summaryrefslogtreecommitdiff
path: root/include/net/bonding.h
blob: ee6c52053aa324800f82baf4cbe2674f47d56399 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
/*
 * Bond several ethernet interfaces into a Cisco, running 'Etherchannel'.
 *
 * Portions are (c) Copyright 1995 Simon "Guru Aleph-Null" Janes
 * NCM: Network and Communications Management, Inc.
 *
 * BUT, I'm the one who modified it for ethernet, so:
 * (c) Copyright 1999, Thomas Davis, tadavis@lbl.gov
 *
 *	This software may be used and distributed according to the terms
 *	of the GNU Public License, incorporated herein by reference.
 *
 */

#ifndef _NET_BONDING_H
#define _NET_BONDING_H

#include <linux/timer.h>
#include <linux/proc_fs.h>
#include <linux/if_bonding.h>
#include <linux/cpumask.h>
#include <linux/in6.h>
#include <linux/netpoll.h>
#include <linux/inetdevice.h>
#include <linux/etherdevice.h>
#include <linux/reciprocal_div.h>
#include <linux/if_link.h>

#include <net/bond_3ad.h>
#include <net/bond_alb.h>
#include <net/bond_options.h>

#define BOND_MAX_ARP_TARGETS	16

#define BOND_DEFAULT_MIIMON	100

/*
 * Less bad way to call ioctl from within the kernel; this needs to be
 * done some other way to get the call out of interrupt context.
 * Needs "ioctl" variable to be supplied by calling context.
 */
#define IOCTL(dev, arg, cmd) ({		\
	int res = 0;			\
	mm_segment_t fs = get_fs();	\
	set_fs(get_ds());		\
	res = ioctl(dev, arg, cmd);	\
	set_fs(fs);			\
	res; })

#define BOND_MODE(bond) ((bond)->params.mode)

/* slave list primitives */
#define bond_slave_list(bond) (&(bond)->dev->adj_list.lower)

#define bond_has_slaves(bond) !list_empty(bond_slave_list(bond))

/* IMPORTANT: bond_first/last_slave can return NULL in case of an empty list */
#define bond_first_slave(bond) \
	(bond_has_slaves(bond) ? \
		netdev_adjacent_get_private(bond_slave_list(bond)->next) : \
		NULL)
#define bond_last_slave(bond) \
	(bond_has_slaves(bond) ? \
		netdev_adjacent_get_private(bond_slave_list(bond)->prev) : \
		NULL)

/* Caller must have rcu_read_lock */
#define bond_first_slave_rcu(bond) \
	netdev_lower_get_first_private_rcu(bond->dev)

#define bond_is_first_slave(bond, pos) (pos == bond_first_slave(bond))
#define bond_is_last_slave(bond, pos) (pos == bond_last_slave(bond))

/**
 * bond_for_each_slave - iterate over all slaves
 * @bond:	the bond holding this list
 * @pos:	current slave
 * @iter:	list_head * iterator
 *
 * Caller must hold RTNL
 */
#define bond_for_each_slave(bond, pos, iter) \
	netdev_for_each_lower_private((bond)->dev, pos, iter)

/* Caller must have rcu_read_lock */
#define bond_for_each_slave_rcu(bond, pos, iter) \
	netdev_for_each_lower_private_rcu((bond)->dev, pos, iter)

#ifdef CONFIG_NET_POLL_CONTROLLER
extern atomic_t netpoll_block_tx;

static inline void block_netpoll_tx(void)
{
	atomic_inc(&netpoll_block_tx);
}

static inline void unblock_netpoll_tx(void)
{
	atomic_dec(&netpoll_block_tx);
}

static inline int is_netpoll_tx_blocked(struct net_device *dev)
{
	if (unlikely(netpoll_tx_running(dev)))
		return atomic_read(&netpoll_block_tx);
	return 0;
}
#else
#define block_netpoll_tx()
#define unblock_netpoll_tx()
#define is_netpoll_tx_blocked(dev) (0)
#endif

struct bond_params {
	int mode;
	int xmit_policy;
	int miimon;
	u8 num_peer_notif;
	int arp_interval;
	int arp_validate;
	int arp_all_targets;
	int use_carrier;
	int fail_over_mac;
	int updelay;
	int downdelay;
	int lacp_fast;
	unsigned int min_links;
	int ad_select;
	char primary[IFNAMSIZ];
	int primary_reselect;
	__be32 arp_targets[BOND_MAX_ARP_TARGETS];
	int tx_queues;
	int all_slaves_active;
	int resend_igmp;
	int lp_interval;
	int packets_per_slave;
	int tlb_dynamic_lb;
	struct reciprocal_value reciprocal_packets_per_slave;
	u16 ad_actor_sys_prio;
	u16 ad_user_port_key;
	u8 ad_actor_system[ETH_ALEN];
};

struct bond_parm_tbl {
	char *modename;
	int mode;
};

struct netdev_notify_work {
	struct delayed_work	work;
	struct net_device	*dev;
	struct netdev_bonding_info bonding_info;
};

struct slave {
	struct net_device *dev; /* first - useful for panic debug */
	struct bonding *bond; /* our master */
	int    delay;
	/* all three in jiffies */
	unsigned long last_link_up;
	unsigned long last_rx;
	unsigned long target_last_arp_rx[BOND_MAX_ARP_TARGETS];
	s8     link;    /* one of BOND_LINK_XXXX */
	s8     new_link;
	u8     backup:1,   /* indicates backup slave. Value corresponds with
			      BOND_STATE_ACTIVE and BOND_STATE_BACKUP */
	       inactive:1, /* indicates inactive slave */
	       should_notify:1, /* indicates whether the state changed */
	       should_notify_link:1; /* indicates whether the link changed */
	u8     duplex;
	u32    original_mtu;
	u32    link_failure_count;
	u32    speed;
	u16    queue_id;
	u8     perm_hwaddr[ETH_ALEN];
	struct ad_slave_info *ad_info;
	struct tlb_slave_info tlb_info;
#ifdef CONFIG_NET_POLL_CONTROLLER
	struct netpoll *np;
#endif
	struct kobject kobj;
	struct rtnl_link_stats64 slave_stats;
};

struct bond_up_slave {
	unsigned int	count;
	struct rcu_head rcu;
	struct slave	*arr[0];
};

/*
 * Link pseudo-state only used internally by monitors
 */
#define BOND_LINK_NOCHANGE -1

/*
 * Here are the locking policies for the two bonding locks:
 * Get rcu_read_lock when reading or RTNL when writing slave list.
 */
struct bonding {
	struct   net_device *dev; /* first - useful for panic debug */
	struct   slave __rcu *curr_active_slave;
	struct   slave __rcu *current_arp_slave;
	struct   slave __rcu *primary_slave;
	struct   bond_up_slave __rcu *slave_arr; /* Array of usable slaves */
	bool     force_primary;
	s32      slave_cnt; /* never change this value outside the attach/detach wrappers */
	int     (*recv_probe)(const struct sk_buff *, struct bonding *,
			      struct slave *);
	/* mode_lock is used for mode-specific locking needs, currently used by:
	 * 3ad mode (4) - protect against running bond_3ad_unbind_slave() and
	 *                bond_3ad_state_machine_handler() concurrently and also
	 *                the access to the state machine shared variables.
	 * TLB mode (5) - to sync the use and modifications of its hash table
	 * ALB mode (6) - to sync the use and modifications of its hash table
	 */
	spinlock_t mode_lock;
	u8	 send_peer_notif;
	u8       igmp_retrans;
#ifdef CONFIG_PROC_FS
	struct   proc_dir_entry *proc_entry;
	char     proc_file_name[IFNAMSIZ];
#endif /* CONFIG_PROC_FS */
	struct   list_head bond_list;
	u32      rr_tx_counter;
	struct   ad_bond_info ad_info;
	struct   alb_bond_info alb_info;
	struct   bond_params params;
	struct   workqueue_struct *wq;
	struct   delayed_work mii_work;
	struct   delayed_work arp_work;
	struct   delayed_work alb_work;
	struct   delayed_work ad_work;
	struct   delayed_work mcast_work;
	struct   delayed_work slave_arr_work;
#ifdef CONFIG_DEBUG_FS
	/* debugging support via debugfs */
	struct	 dentry *debug_dir;
#endif /* CONFIG_DEBUG_FS */
	struct rtnl_link_stats64 bond_stats;
};

#define bond_slave_get_rcu(dev) \
	((struct slave *) rcu_dereference(dev->rx_handler_data))

#define bond_slave_get_rtnl(dev) \
	((struct slave *) rtnl_dereference(dev->rx_handler_data))

void bond_queue_slave_event(struct slave *slave);
void bond_lower_state_changed(struct slave *slave);

struct bond_vlan_tag {
	__be16		vlan_proto;
	unsigned short	vlan_id;
};

/**
 * Returns NULL if the net_device does not belong to any of the bond's slaves
 *
 * Caller must hold bond lock for read
 */
static inline struct slave *bond_get_slave_by_dev(struct bonding *bond,
						  struct net_device *slave_dev)
{
	return netdev_lower_dev_get_private(bond->dev, slave_dev);
}

static inline struct bonding *bond_get_bond_by_slave(struct slave *slave)
{
	return slave->bond;
}

static inline bool bond_should_override_tx_queue(struct bonding *bond)
{
	return BOND_MODE(bond) == BOND_MODE_ACTIVEBACKUP ||
	       BOND_MODE(bond) == BOND_MODE_ROUNDROBIN;
}

static inline bool bond_is_lb(const struct bonding *bond)
{
	return BOND_MODE(bond) == BOND_MODE_TLB ||
	       BOND_MODE(bond) == BOND_MODE_ALB;
}

static inline bool bond_is_nondyn_tlb(const struct bonding *bond)
{
	return (BOND_MODE(bond) == BOND_MODE_TLB)  &&
	       (bond->params.tlb_dynamic_lb == 0);
}

static inline bool bond_mode_uses_xmit_hash(const struct bonding *bond)
{
	return (BOND_MODE(bond) == BOND_MODE_8023AD ||
		BOND_MODE(bond) == BOND_MODE_XOR ||
		bond_is_nondyn_tlb(bond));
}

static inline bool bond_mode_uses_arp(int mode)
{
	return mode != BOND_MODE_8023AD && mode != BOND_MODE_TLB &&
	       mode != BOND_MODE_ALB;
}

static inline bool bond_mode_uses_primary(int mode)
{
	return mode == BOND_MODE_ACTIVEBACKUP || mode == BOND_MODE_TLB ||
	       mode == BOND_MODE_ALB;
}

static inline bool bond_uses_primary(struct bonding *bond)
{
	return bond_mode_uses_primary(BOND_MODE(bond));
}

static inline struct net_device *bond_option_active_slave_get_rcu(struct bonding *bond)
{
	struct slave *slave = rcu_dereference(bond->curr_active_slave);

	return bond_uses_primary(bond) && slave ? slave->dev : NULL;
}

static inline bool bond_slave_is_up(struct slave *slave)
{
	return netif_running(slave->dev) && netif_carrier_ok(slave->dev);
}

static inline void bond_set_active_slave(struct slave *slave)
{
	if (slave->backup) {
		slave->backup = 0;
		bond_queue_slave_event(slave);
		bond_lower_state_changed(slave);
		rtmsg_ifinfo(RTM_NEWLINK, slave->dev, 0, GFP_ATOMIC);
	}
}

static inline void bond_set_backup_slave(struct slave *slave)
{
	if (!slave->backup) {
		slave->backup = 1;
		bond_queue_slave_event(slave);
		bond_lower_state_changed(slave);
		rtmsg_ifinfo(RTM_NEWLINK, slave->dev, 0, GFP_ATOMIC);
	}
}

static inline void bond_set_slave_state(struct slave *slave,
					int slave_state, bool notify)
{
	if (slave->backup == slave_state)
		return;

	slave->backup = slave_state;
	if (notify) {
		bond_lower_state_changed(slave);
		rtmsg_ifinfo(RTM_NEWLINK, slave->dev, 0, GFP_ATOMIC);
		bond_queue_slave_event(slave);
		slave->should_notify = 0;
	} else {
		if (slave->should_notify)
			slave->should_notify = 0;
		else
			slave->should_notify = 1;
	}
}

static inline void bond_slave_state_change(struct bonding *bond)
{
	struct list_head *iter;
	struct slave *tmp;

	bond_for_each_slave(bond, tmp, iter) {
		if (tmp->link == BOND_LINK_UP)
			bond_set_active_slave(tmp);
		else if (tmp->link == BOND_LINK_DOWN)
			bond_set_backup_slave(tmp);
	}
}

static inline void bond_slave_state_notify(struct bonding *bond)
{
	struct list_head *iter;
	struct slave *tmp;

	bond_for_each_slave(bond, tmp, iter) {
		if (tmp->should_notify) {
			bond_lower_state_changed(tmp);
			rtmsg_ifinfo(RTM_NEWLINK, tmp->dev, 0, GFP_ATOMIC);
			tmp->should_notify = 0;
		}
	}
}

static inline int bond_slave_state(struct slave *slave)
{
	return slave->backup;
}

static inline bool bond_is_active_slave(struct slave *slave)
{
	return !bond_slave_state(slave);
}

static inline bool bond_slave_can_tx(struct slave *slave)
{
	return bond_slave_is_up(slave) && slave->link == BOND_LINK_UP &&
	       bond_is_active_slave(slave);
}

#define BOND_PRI_RESELECT_ALWAYS	0
#define BOND_PRI_RESELECT_BETTER	1
#define BOND_PRI_RESELECT_FAILURE	2

#define BOND_FOM_NONE			0
#define BOND_FOM_ACTIVE			1
#define BOND_FOM_FOLLOW			2

#define BOND_ARP_TARGETS_ANY		0
#define BOND_ARP_TARGETS_ALL		1

#define BOND_ARP_VALIDATE_NONE		0
#define BOND_ARP_VALIDATE_ACTIVE	(1 << BOND_STATE_ACTIVE)
#define BOND_ARP_VALIDATE_BACKUP	(1 << BOND_STATE_BACKUP)
#define BOND_ARP_VALIDATE_ALL		(BOND_ARP_VALIDATE_ACTIVE | \
					 BOND_ARP_VALIDATE_BACKUP)
#define BOND_ARP_FILTER			(BOND_ARP_VALIDATE_ALL + 1)
#define BOND_ARP_FILTER_ACTIVE		(BOND_ARP_VALIDATE_ACTIVE | \
					 BOND_ARP_FILTER)
#define BOND_ARP_FILTER_BACKUP		(BOND_ARP_VALIDATE_BACKUP | \
					 BOND_ARP_FILTER)

#define BOND_SLAVE_NOTIFY_NOW		true
#define BOND_SLAVE_NOTIFY_LATER		false

static inline int slave_do_arp_validate(struct bonding *bond,
					struct slave *slave)
{
	return bond->params.arp_validate & (1 << bond_slave_state(slave));
}

static inline int slave_do_arp_validate_only(struct bonding *bond)
{
	return bond->params.arp_validate & BOND_ARP_FILTER;
}

static inline int bond_is_ip_target_ok(__be32 addr)
{
	return !ipv4_is_lbcast(addr) && !ipv4_is_zeronet(addr);
}

/* Get the oldest arp which we've received on this slave for bond's
 * arp_targets.
 */
static inline unsigned long slave_oldest_target_arp_rx(struct bonding *bond,
						       struct slave *slave)
{
	int i = 1;
	unsigned long ret = slave->target_last_arp_rx[0];

	for (; (i < BOND_MAX_ARP_TARGETS) && bond->params.arp_targets[i]; i++)
		if (time_before(slave->target_last_arp_rx[i], ret))
			ret = slave->target_last_arp_rx[i];

	return ret;
}

static inline unsigned long slave_last_rx(struct bonding *bond,
					struct slave *slave)
{
	if (bond->params.arp_all_targets == BOND_ARP_TARGETS_ALL)
		return slave_oldest_target_arp_rx(bond, slave);

	return slave->last_rx;
}

#ifdef CONFIG_NET_POLL_CONTROLLER
static inline void bond_netpoll_send_skb(const struct slave *slave,
					 struct sk_buff *skb)
{
	struct netpoll *np = slave->np;

	if (np)
		netpoll_send_skb(np, skb);
}
#else
static inline void bond_netpoll_send_skb(const struct slave *slave,
					 struct sk_buff *skb)
{
}
#endif

static inline void bond_set_slave_inactive_flags(struct slave *slave,
						 bool notify)
{
	if (!bond_is_lb(slave->bond))
		bond_set_slave_state(slave, BOND_STATE_BACKUP, notify);
	if (!slave->bond->params.all_slaves_active)
		slave->inactive = 1;
}

static inline void bond_set_slave_active_flags(struct slave *slave,
					       bool notify)
{
	bond_set_slave_state(slave, BOND_STATE_ACTIVE, notify);
	slave->inactive = 0;
}

static inline bool bond_is_slave_inactive(struct slave *slave)
{
	return slave->inactive;
}

static inline void bond_set_slave_link_state(struct slave *slave, int state,
					     bool notify)
{
	if (slave->link == state)
		return;

	slave->link = state;
	if (notify) {
		bond_queue_slave_event(slave);
		bond_lower_state_changed(slave);
		slave->should_notify_link = 0;
	} else {
		if (slave->should_notify_link)
			slave->should_notify_link = 0;
		else
			slave->should_notify_link = 1;
	}
}

static inline void bond_slave_link_notify(struct bonding *bond)
{
	struct list_head *iter;
	struct slave *tmp;

	bond_for_each_slave(bond, tmp, iter) {
		if (tmp->should_notify_link) {
			bond_queue_slave_event(tmp);
			bond_lower_state_changed(tmp);
			tmp->should_notify_link = 0;
		}
	}
}

static inline __be32 bond_confirm_addr(struct net_device *dev, __be32 dst, __be32 local)
{
	struct in_device *in_dev;
	__be32 addr = 0;

	rcu_read_lock();
	in_dev = __in_dev_get_rcu(dev);

	if (in_dev)
		addr = inet_confirm_addr(dev_net(dev), in_dev, dst, local,
					 RT_SCOPE_HOST);
	rcu_read_unlock();
	return addr;
}

struct bond_net {
	struct net		*net;	/* Associated network namespace */
	struct list_head	dev_list;
#ifdef CONFIG_PROC_FS
	struct proc_dir_entry	*proc_dir;
#endif
	struct class_attribute	class_attr_bonding_masters;
};

int bond_arp_rcv(const struct sk_buff *skb, struct bonding *bond, struct slave *slave);
void bond_dev_queue_xmit(struct bonding *bond, struct sk_buff *skb, struct net_device *slave_dev);
int bond_create(struct net *net, const char *name);
int bond_create_sysfs(struct bond_net *net);
void bond_destroy_sysfs(struct bond_net *net);
void bond_prepare_sysfs_group(struct bonding *bond);
int bond_sysfs_slave_add(struct slave *slave);
void bond_sysfs_slave_del(struct slave *slave);
int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev);
int bond_release(struct net_device *bond_dev, struct net_device *slave_dev);
u32 bond_xmit_hash(struct bonding *bond, struct sk_buff *skb);
int bond_set_carrier(struct bonding *bond);
void bond_select_active_slave(struct bonding *bond);
void bond_change_active_slave(struct bonding *bond, struct slave *new_active);
void bond_create_debugfs(void);
void bond_destroy_debugfs(void);
void bond_debug_register(struct bonding *bond);
void bond_debug_unregister(struct bonding *bond);
void bond_debug_reregister(struct bonding *bond);
const char *bond_mode_name(int mode);
void bond_setup(struct net_device *bond_dev);
unsigned int bond_get_num_tx_queues(void);
int bond_netlink_init(void);
void bond_netlink_fini(void);
struct net_device *bond_option_active_slave_get_rcu(struct bonding *bond);
const char *bond_slave_link_status(s8 link);
struct bond_vlan_tag *bond_verify_device_path(struct net_device *start_dev,
					      struct net_device *end_dev,
					      int level);
int bond_update_slave_arr(struct bonding *bond, struct slave *skipslave);
void bond_slave_arr_work_rearm(struct bonding *bond, unsigned long delay);

#ifdef CONFIG_PROC_FS
void bond_create_proc_entry(struct bonding *bond);
void bond_remove_proc_entry(struct bonding *bond);
void bond_create_proc_dir(struct bond_net *bn);
void bond_destroy_proc_dir(struct bond_net *bn);
#else
static inline void bond_create_proc_entry(struct bonding *bond)
{
}

static inline void bond_remove_proc_entry(struct bonding *bond)
{
}

static inline void bond_create_proc_dir(struct bond_net *bn)
{
}

static inline void bond_destroy_proc_dir(struct bond_net *bn)
{
}
#endif

static inline struct slave *bond_slave_has_mac(struct bonding *bond,
					       const u8 *mac)
{
	struct list_head *iter;
	struct slave *tmp;

	bond_for_each_slave(bond, tmp, iter)
		if (ether_addr_equal_64bits(mac, tmp->dev->dev_addr))
			return tmp;

	return NULL;
}

/* Caller must hold rcu_read_lock() for read */
static inline struct slave *bond_slave_has_mac_rcu(struct bonding *bond,
					       const u8 *mac)
{
	struct list_head *iter;
	struct slave *tmp;

	bond_for_each_slave_rcu(bond, tmp, iter)
		if (ether_addr_equal_64bits(mac, tmp->dev->dev_addr))
			return tmp;

	return NULL;
}

/* Caller must hold rcu_read_lock() for read */
static inline bool bond_slave_has_mac_rx(struct bonding *bond, const u8 *mac)
{
	struct list_head *iter;
	struct slave *tmp;
	struct netdev_hw_addr *ha;

	bond_for_each_slave_rcu(bond, tmp, iter)
		if (ether_addr_equal_64bits(mac, tmp->dev->dev_addr))
			return true;

	if (netdev_uc_empty(bond->dev))
		return false;

	netdev_for_each_uc_addr(ha, bond->dev)
		if (ether_addr_equal_64bits(mac, ha->addr))
			return true;

	return false;
}

/* Check if the ip is present in arp ip list, or first free slot if ip == 0
 * Returns -1 if not found, index if found
 */
static inline int bond_get_targets_ip(__be32 *targets, __be32 ip)
{
	int i;

	for (i = 0; i < BOND_MAX_ARP_TARGETS; i++)
		if (targets[i] == ip)
			return i;
		else if (targets[i] == 0)
			break;

	return -1;
}

/* exported from bond_main.c */
extern int bond_net_id;
extern const struct bond_parm_tbl bond_lacp_tbl[];
extern const struct bond_parm_tbl xmit_hashtype_tbl[];
extern const struct bond_parm_tbl arp_validate_tbl[];
extern const struct bond_parm_tbl arp_all_targets_tbl[];
extern const struct bond_parm_tbl fail_over_mac_tbl[];
extern const struct bond_parm_tbl pri_reselect_tbl[];
extern struct bond_parm_tbl ad_select_tbl[];

/* exported from bond_netlink.c */
extern struct rtnl_link_ops bond_link_ops;

static inline void bond_tx_drop(struct net_device *dev, struct sk_buff *skb)
{
	atomic_long_inc(&dev->tx_dropped);
	dev_kfree_skb_any(skb);
}

#endif /* _NET_BONDING_H */
eks/aafixes44 main, development code repositoryroot
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat
-rw-r--r--.gitattributes2
-rw-r--r--.gitignore87
-rw-r--r--Makefile.in17
-rw-r--r--acinclude.m4138
-rw-r--r--aclocal.m4278
-rw-r--r--afms/delzip0
-rw-r--r--afms/makefile.mk58
-rw-r--r--afms/prj/build.lst3
-rw-r--r--afms/prj/d.lst3
-rwxr-xr-xagg/inc/agg_alpha_mask_u8.h499
-rwxr-xr-xagg/inc/agg_arc.h74
-rwxr-xr-xagg/inc/agg_array.h887
-rwxr-xr-xagg/inc/agg_arrowhead.h82
-rwxr-xr-xagg/inc/agg_basics.h343
-rwxr-xr-xagg/inc/agg_bezier_arc.h158
-rwxr-xr-xagg/inc/agg_bitset_iterator.h54
-rwxr-xr-xagg/inc/agg_bounding_rect.h116
-rwxr-xr-xagg/inc/agg_bspline.h77
-rwxr-xr-xagg/inc/agg_clip_liang_barsky.h209
-rwxr-xr-xagg/inc/agg_color_gray.h364
-rwxr-xr-xagg/inc/agg_color_rgba.h618
-rwxr-xr-xagg/inc/agg_config.h31
-rwxr-xr-xagg/inc/agg_conv_adaptor_vcgen.h169
-rwxr-xr-xagg/inc/agg_conv_adaptor_vpgen.h166
-rwxr-xr-xagg/inc/agg_conv_bspline.h48
-rwxr-xr-xagg/inc/agg_conv_clip_polygon.h69
-rwxr-xr-xagg/inc/agg_conv_clip_polyline.h69
-rwxr-xr-xagg/inc/agg_conv_close_polygon.h132
-rwxr-xr-xagg/inc/agg_conv_concat.h80
-rwxr-xr-xagg/inc/agg_conv_contour.h65
-rwxr-xr-xagg/inc/agg_conv_curve.h174
-rwxr-xr-xagg/inc/agg_conv_dash.h68
-rwxr-xr-xagg/inc/agg_conv_gpc.h443
-rwxr-xr-xagg/inc/agg_conv_marker.h154
-rwxr-xr-xagg/inc/agg_conv_marker_adaptor.h51
-rwxr-xr-xagg/inc/agg_conv_segmentator.h48
-rwxr-xr-xagg/inc/agg_conv_shorten_path.h50
-rwxr-xr-xagg/inc/agg_conv_smooth_poly1.h80
-rwxr-xr-xagg/inc/agg_conv_stroke.h73
-rwxr-xr-xagg/inc/agg_conv_transform.h75
-rwxr-xr-xagg/inc/agg_conv_unclose_polygon.h59
-rwxr-xr-xagg/inc/agg_curves.h150
-rwxr-xr-xagg/inc/agg_dda_line.h290
-rwxr-xr-xagg/inc/agg_ellipse.h98
-rwxr-xr-xagg/inc/agg_ellipse_bresenham.h113
-rwxr-xr-xagg/inc/agg_embedded_raster_fonts.h59
-rwxr-xr-xagg/inc/agg_font_cache_manager.h397
-rwxr-xr-xagg/inc/agg_gamma_functions.h123
-rwxr-xr-xagg/inc/agg_gamma_lut.h114
-rwxr-xr-xagg/inc/agg_glyph_raster_bin.h155
-rwxr-xr-xagg/inc/agg_gsv_text.h154
-rwxr-xr-xagg/inc/agg_image_filters.h449
-rwxr-xr-xagg/inc/agg_line_aa_basics.h152
-rwxr-xr-xagg/inc/agg_math.h247
-rwxr-xr-xagg/inc/agg_math_stroke.h340
-rwxr-xr-xagg/inc/agg_path_storage.h364
-rwxr-xr-xagg/inc/agg_path_storage_integer.h300
-rwxr-xr-xagg/inc/agg_pattern_filters_rgba.h122
-rwxr-xr-xagg/inc/agg_pixfmt_amask_adaptor.h265
-rwxr-xr-xagg/inc/agg_pixfmt_gray.h703
-rwxr-xr-xagg/inc/agg_pixfmt_rgb.h760
-rwxr-xr-xagg/inc/agg_pixfmt_rgb_packed.h1277
-rwxr-xr-xagg/inc/agg_pixfmt_rgba.h1312
-rwxr-xr-xagg/inc/agg_rasterizer_outline.h146
-rwxr-xr-xagg/inc/agg_rasterizer_outline_aa.h516
-rwxr-xr-xagg/inc/agg_rasterizer_scanline_aa.h743
-rwxr-xr-xagg/inc/agg_render_scanlines.h66
-rwxr-xr-xagg/inc/agg_renderer_base.h618
-rwxr-xr-xagg/inc/agg_renderer_markers.h707
-rwxr-xr-xagg/inc/agg_renderer_mclip.h383
-rwxr-xr-xagg/inc/agg_renderer_outline_aa.h1545
-rwxr-xr-xagg/inc/agg_renderer_outline_image.h924
-rwxr-xr-xagg/inc/agg_renderer_primitives.h224
-rwxr-xr-xagg/inc/agg_renderer_raster_text.h264
-rwxr-xr-xagg/inc/agg_renderer_scanline.h450
-rwxr-xr-xagg/inc/agg_rendering_buffer.h179
-rwxr-xr-xagg/inc/agg_rendering_buffer_dynarow.h184
-rwxr-xr-xagg/inc/agg_rounded_rect.h79
-rwxr-xr-xagg/inc/agg_scanline_bin.h171
-rwxr-xr-xagg/inc/agg_scanline_boolean_algebra.h1559
-rwxr-xr-xagg/inc/agg_scanline_p.h197
-rwxr-xr-xagg/inc/agg_scanline_storage_aa.h796
-rwxr-xr-xagg/inc/agg_scanline_storage_bin.h569
-rwxr-xr-xagg/inc/agg_scanline_u.h323
-rwxr-xr-xagg/inc/agg_shorten_path.h66
-rwxr-xr-xagg/inc/agg_simul_eq.h147
-rwxr-xr-xagg/inc/agg_span_allocator.h72
-rwxr-xr-xagg/inc/agg_span_converter.h53
-rwxr-xr-xagg/inc/agg_span_generator.h50
-rwxr-xr-xagg/inc/agg_span_gouraud.h180
-rwxr-xr-xagg/inc/agg_span_gouraud_gray.h185
-rwxr-xr-xagg/inc/agg_span_gouraud_rgba.h206
-rwxr-xr-xagg/inc/agg_span_gradient.h422
-rwxr-xr-xagg/inc/agg_span_gradient_alpha.h123
-rwxr-xr-xagg/inc/agg_span_image_filter.h110
-rwxr-xr-xagg/inc/agg_span_image_filter_gray.h701
-rwxr-xr-xagg/inc/agg_span_image_filter_rgb.h840
-rwxr-xr-xagg/inc/agg_span_image_filter_rgba.h864
-rwxr-xr-xagg/inc/agg_span_image_resample.h180
-rwxr-xr-xagg/inc/agg_span_image_resample_gray.h359
-rwxr-xr-xagg/inc/agg_span_image_resample_rgb.h393
-rwxr-xr-xagg/inc/agg_span_image_resample_rgba.h393
-rwxr-xr-xagg/inc/agg_span_interpolator_adaptor.h77
-rwxr-xr-xagg/inc/agg_span_interpolator_linear.h232
-rwxr-xr-xagg/inc/agg_span_interpolator_persp.h462
-rwxr-xr-xagg/inc/agg_span_interpolator_trans.h97
-rwxr-xr-xagg/inc/agg_span_pattern.h278
-rwxr-xr-xagg/inc/agg_span_pattern_filter_gray.h472
-rwxr-xr-xagg/inc/agg_span_pattern_filter_rgb.h568
-rwxr-xr-xagg/inc/agg_span_pattern_filter_rgba.h584
-rwxr-xr-xagg/inc/agg_span_pattern_resample_gray.h320
-rwxr-xr-xagg/inc/agg_span_pattern_resample_rgb.h346
-rwxr-xr-xagg/inc/agg_span_pattern_resample_rgba.h354
-rwxr-xr-xagg/inc/agg_span_pattern_rgb.h165
-rwxr-xr-xagg/inc/agg_span_pattern_rgba.h111
-rwxr-xr-xagg/inc/agg_span_solid.h63
-rwxr-xr-xagg/inc/agg_span_subdiv_adaptor.h141
-rwxr-xr-xagg/inc/agg_trans_affine.h344
-rwxr-xr-xagg/inc/agg_trans_bilinear.h166
-rwxr-xr-xagg/inc/agg_trans_double_path.h131
-rwxr-xr-xagg/inc/agg_trans_lens.h79
-rwxr-xr-xagg/inc/agg_trans_perspective.h192
-rwxr-xr-xagg/inc/agg_trans_single_path.h97
-rwxr-xr-xagg/inc/agg_trans_viewport.h304
-rwxr-xr-xagg/inc/agg_trans_warp_magnifier.h51
-rwxr-xr-xagg/inc/agg_vcgen_bspline.h74
-rwxr-xr-xagg/inc/agg_vcgen_contour.h96
-rwxr-xr-xagg/inc/agg_vcgen_dash.h99
-rwxr-xr-xagg/inc/agg_vcgen_markers_term.h72
-rwxr-xr-xagg/inc/agg_vcgen_smooth_poly1.h87
-rwxr-xr-xagg/inc/agg_vcgen_stroke.h114
-rwxr-xr-xagg/inc/agg_vcgen_vertex_sequence.h135
-rwxr-xr-xagg/inc/agg_vertex_iterator.h133
-rwxr-xr-xagg/inc/agg_vertex_sequence.h176
-rwxr-xr-xagg/inc/agg_vpgen_clip_polygon.h83
-rwxr-xr-xagg/inc/agg_vpgen_clip_polyline.h121
-rwxr-xr-xagg/inc/agg_vpgen_segmentator.h61
-rwxr-xr-xagg/prj/build.lst5
-rwxr-xr-xagg/prj/d.lst11
-rw-r--r--agg/source/agg.flt3
-rwxr-xr-xagg/source/agg_arc.cpp105
-rwxr-xr-xagg/source/agg_arrowhead.cpp110
-rwxr-xr-xagg/source/agg_bezier_arc.cpp237
-rwxr-xr-xagg/source/agg_bspline.cpp299
-rwxr-xr-xagg/source/agg_curves.cpp246
-rwxr-xr-xagg/source/agg_embedded_raster_fonts.cpp10426
-rwxr-xr-xagg/source/agg_gsv_text.cpp688
-rwxr-xr-xagg/source/agg_image_filters.cpp120
-rwxr-xr-xagg/source/agg_line_aa_basics.cpp82
-rwxr-xr-xagg/source/agg_line_profile_aa.cpp117
-rwxr-xr-xagg/source/agg_path_storage.cpp525
-rwxr-xr-xagg/source/agg_rasterizer_scanline_aa.cpp621
-rwxr-xr-xagg/source/agg_rounded_rect.cpp164
-rwxr-xr-xagg/source/agg_sqrt_tables.cpp115
-rwxr-xr-xagg/source/agg_trans_affine.cpp195
-rwxr-xr-xagg/source/agg_trans_double_path.cpp273
-rwxr-xr-xagg/source/agg_trans_single_path.cpp202
-rwxr-xr-xagg/source/agg_trans_warp_magnifier.cpp50
-rwxr-xr-xagg/source/agg_vcgen_bspline.cpp194
-rwxr-xr-xagg/source/agg_vcgen_contour.cpp191
-rwxr-xr-xagg/source/agg_vcgen_dash.cpp237
-rwxr-xr-xagg/source/agg_vcgen_markers_term.cpp103
-rwxr-xr-xagg/source/agg_vcgen_smooth_poly1.cpp226
-rwxr-xr-xagg/source/agg_vcgen_stroke.cpp246
-rwxr-xr-xagg/source/agg_vpgen_clip_polygon.cpp133
-rwxr-xr-xagg/source/agg_vpgen_clip_polyline.cpp142
-rwxr-xr-xagg/source/agg_vpgen_segmentator.cpp67
-rwxr-xr-xagg/source/makefile.mk91
-rw-r--r--animations/inc/animations/animationnodehelper.hxx130
-rw-r--r--animations/prj/build.lst3
-rw-r--r--animations/prj/d.lst9
-rw-r--r--animations/source/animcore/animcore.cxx2089
-rw-r--r--animations/source/animcore/animcore.xml30
-rw-r--r--animations/source/animcore/factreg.cxx100
-rw-r--r--animations/source/animcore/factreg.hxx51
-rw-r--r--animations/source/animcore/makefile.mk70
-rw-r--r--animations/source/animcore/targetpropertiescreator.cxx504
-rw-r--r--apache-commons/java/codec/makefile.mk74
-rw-r--r--apache-commons/java/httpclient/makefile.mk79
-rw-r--r--apache-commons/java/lang/makefile.mk76
-rw-r--r--apache-commons/java/logging/makefile.mk78
-rw-r--r--apache-commons/patches/codec.patch17
-rw-r--r--apache-commons/patches/logging.patch15
-rw-r--r--apache-commons/prj/build.lst6
-rw-r--r--apache-commons/prj/d.lst5
-rw-r--r--apple_remote/AppleRemote.m125
-rw-r--r--apple_remote/GlobalKeyboardDevice.m249
-rw-r--r--apple_remote/HIDRemoteControlDevice.m518
-rw-r--r--apple_remote/KeyspanFrontRowControl.m97
-rw-r--r--apple_remote/MultiClickRemoteBehavior.m213
-rw-r--r--apple_remote/RemoteControl.m146
-rw-r--r--apple_remote/RemoteControlContainer.m140
-rw-r--r--apple_remote/RemoteMainController.m177
-rw-r--r--apple_remote/inc/AppleRemote.h40
-rw-r--r--apple_remote/inc/GlobalKeyboardDevice.h54
-rw-r--r--apple_remote/inc/HIDRemoteControlDevice.h67
-rw-r--r--apple_remote/inc/KeyspanFrontRowControl.h42
-rw-r--r--apple_remote/inc/MultiClickRemoteBehavior.h93
-rw-r--r--apple_remote/inc/RemoteControl.h105
-rw-r--r--apple_remote/inc/RemoteControlContainer.h41
-rw-r--r--apple_remote/inc/RemoteMainController.h49
-rw-r--r--apple_remote/makefile.mk82
-rw-r--r--apple_remote/prj/build.lst2
-rw-r--r--apple_remote/prj/d.lst5
-rw-r--r--autodoc/inc/ary/actions.hxx103
-rw-r--r--autodoc/inc/ary/ary.hxx90
-rw-r--r--autodoc/inc/ary/ary_disp.hxx111
-rw-r--r--autodoc/inc/ary/arygroup.hxx107
-rw-r--r--autodoc/inc/ary/ceslot.hxx103
-rw-r--r--autodoc/inc/ary/cessentl.hxx88
-rw-r--r--autodoc/inc/ary/cpp/c_builtintype.hxx97
-rw-r--r--autodoc/inc/ary/cpp/c_ce.hxx103
-rw-r--r--autodoc/inc/ary/cpp/c_class.hxx245
-rw-r--r--autodoc/inc/ary/cpp/c_cppentity.hxx91
-rw-r--r--autodoc/inc/ary/cpp/c_de.hxx104
-rw-r--r--autodoc/inc/ary/cpp/c_define.hxx82
-rw-r--r--autodoc/inc/ary/cpp/c_enum.hxx116
-rw-r--r--autodoc/inc/ary/cpp/c_enuval.hxx96
-rw-r--r--autodoc/inc/ary/cpp/c_funct.hxx149
-rw-r--r--autodoc/inc/ary/cpp/c_gate.hxx121
-rw-r--r--autodoc/inc/ary/cpp/c_macro.hxx84
-rw-r--r--autodoc/inc/ary/cpp/c_namesp.hxx194
-rw-r--r--autodoc/inc/ary/cpp/c_osigna.hxx122
-rw-r--r--autodoc/inc/ary/cpp/c_slntry.hxx110
-rw-r--r--autodoc/inc/ary/cpp/c_traits.hxx216
-rw-r--r--autodoc/inc/ary/cpp/c_tydef.hxx100
-rw-r--r--autodoc/inc/ary/cpp/c_type.hxx133
-rw-r--r--autodoc/inc/ary/cpp/c_types4cpp.hxx134
-rw-r--r--autodoc/inc/ary/cpp/c_vari.hxx114
-rw-r--r--autodoc/inc/ary/cpp/c_vfflag.hxx151
-rw-r--r--autodoc/inc/ary/cpp/cp_ce.hxx173
-rw-r--r--autodoc/inc/ary/cpp/cp_def.hxx99
-rw-r--r--autodoc/inc/ary/cpp/cp_type.hxx96
-rw-r--r--autodoc/inc/ary/cpp/inpcontx.hxx216
-rw-r--r--autodoc/inc/ary/cpp/namechain.hxx140
-rw-r--r--autodoc/inc/ary/cpp/usedtype.hxx212
-rw-r--r--autodoc/inc/ary/doc/d_boolean.hxx96
-rw-r--r--autodoc/inc/ary/doc/d_docu.hxx106
-rw-r--r--autodoc/inc/ary/doc/d_node.hxx109
-rw-r--r--autodoc/inc/ary/doc/d_oldcppdocu.hxx130
-rw-r--r--autodoc/inc/ary/doc/d_oldidldocu.hxx111
-rw-r--r--autodoc/inc/ary/doc/d_parametrized.hxx121
-rw-r--r--autodoc/inc/ary/doc/d_types4doc.hxx70
-rw-r--r--autodoc/inc/ary/doc/ht/dht_interpreter.hxx76
-rw-r--r--autodoc/inc/ary/entity.hxx81
-rw-r--r--autodoc/inc/ary/getncast.hxx88
-rw-r--r--autodoc/inc/ary/idl/i_attribute.hxx135
-rw-r--r--autodoc/inc/ary/idl/i_ce.hxx135
-rw-r--r--autodoc/inc/ary/idl/i_ce2s.hxx95
-rw-r--r--autodoc/inc/ary/idl/i_comrela.hxx80
-rw-r--r--autodoc/inc/ary/idl/i_constant.hxx112
-rw-r--r--autodoc/inc/ary/idl/i_constgroup.hxx101
-rw-r--r--autodoc/inc/ary/idl/i_enum.hxx100
-rw-r--r--autodoc/inc/ary/idl/i_enumvalue.hxx103
-rw-r--r--autodoc/inc/ary/idl/i_exception.hxx107
-rw-r--r--autodoc/inc/ary/idl/i_function.hxx160
-rw-r--r--autodoc/inc/ary/idl/i_gate.hxx83
-rw-r--r--autodoc/inc/ary/idl/i_interface.hxx127
-rw-r--r--autodoc/inc/ary/idl/i_module.hxx114
-rw-r--r--autodoc/inc/ary/idl/i_namelookup.hxx95
-rw-r--r--autodoc/inc/ary/idl/i_param.hxx75
-rw-r--r--autodoc/inc/ary/idl/i_property.hxx143
-rw-r--r--autodoc/inc/ary/idl/i_service.hxx139
-rw-r--r--autodoc/inc/ary/idl/i_singleton.hxx105
-rw-r--r--autodoc/inc/ary/idl/i_siservice.hxx107
-rw-r--r--autodoc/inc/ary/idl/i_sisingleton.hxx100
-rw-r--r--autodoc/inc/ary/idl/i_struct.hxx130
-rw-r--r--autodoc/inc/ary/idl/i_structelem.hxx103
-rw-r--r--autodoc/inc/ary/idl/i_traits.hxx78
-rw-r--r--autodoc/inc/ary/idl/i_type.hxx142
-rw-r--r--autodoc/inc/ary/idl/i_typedef.hxx90
-rw-r--r--autodoc/inc/ary/idl/i_types4idl.hxx142
-rw-r--r--autodoc/inc/ary/idl/ik_attribute.hxx85
-rw-r--r--autodoc/inc/ary/idl/ik_ce.hxx146
-rw-r--r--autodoc/inc/ary/idl/ik_constant.hxx76
-rw-r--r--autodoc/inc/ary/idl/ik_constgroup.hxx73
-rw-r--r--autodoc/inc/ary/idl/ik_enum.hxx85
-rw-r--r--autodoc/inc/ary/idl/ik_enumvalue.hxx73
-rw-r--r--autodoc/inc/ary/idl/ik_exception.hxx82
-rw-r--r--autodoc/inc/ary/idl/ik_function.hxx96
-rw-r--r--autodoc/inc/ary/idl/ik_interface.hxx112
-rw-r--r--autodoc/inc/ary/idl/ik_module.hxx114
-rw-r--r--autodoc/inc/ary/idl/ik_property.hxx89
-rw-r--r--autodoc/inc/ary/idl/ik_service.hxx88
-rw-r--r--autodoc/inc/ary/idl/ik_singleton.hxx73
-rw-r--r--autodoc/inc/ary/idl/ik_siservice.hxx75
-rw-r--r--autodoc/inc/ary/idl/ik_sisingleton.hxx73
-rw-r--r--autodoc/inc/ary/idl/ik_struct.hxx91
-rw-r--r--autodoc/inc/ary/idl/ik_structelem.hxx72
-rw-r--r--autodoc/inc/ary/idl/ik_typedef.hxx83
-rw-r--r--autodoc/inc/ary/idl/ip_ce.hxx210
-rw-r--r--autodoc/inc/ary/idl/ip_type.hxx83
-rw-r--r--autodoc/inc/ary/info/all_dts.hxx160
-rw-r--r--autodoc/inc/ary/info/all_tags.hxx289
-rw-r--r--autodoc/inc/ary/info/ci_attag.hxx101
-rw-r--r--autodoc/inc/ary/info/ci_text.hxx85
-rw-r--r--autodoc/inc/ary/info/docstore.hxx116
-rw-r--r--autodoc/inc/ary/info/infodisp.hxx114
-rw-r--r--autodoc/inc/ary/info/inftypes.hxx122
-rw-r--r--autodoc/inc/ary/itrange.hxx80
-rw-r--r--autodoc/inc/ary/loc/loc_dir.hxx145
-rw-r--r--autodoc/inc/ary/loc/loc_file.hxx68
-rw-r--r--autodoc/inc/ary/loc/loc_filebase.hxx72
-rw-r--r--autodoc/inc/ary/loc/loc_le.hxx94
-rw-r--r--autodoc/inc/ary/loc/loc_root.hxx110
-rw-r--r--autodoc/inc/ary/loc/loc_traits.hxx115
-rw-r--r--autodoc/inc/ary/loc/loc_types4loc.hxx54
-rw-r--r--autodoc/inc/ary/loc/locp_le.hxx88
-rw-r--r--autodoc/inc/ary/namesort.hxx75
-rw-r--r--autodoc/inc/ary/object.hxx70
-rw-r--r--autodoc/inc/ary/qualiname.hxx103
-rw-r--r--autodoc/inc/ary/sequentialids.hxx153
-rw-r--r--autodoc/inc/ary/stdconstiter.hxx98
-rw-r--r--autodoc/inc/ary/symtreenode.hxx344
-rw-r--r--autodoc/inc/ary/types.hxx130
-rw-r--r--autodoc/inc/ary/udmhost.hxx62
-rw-r--r--autodoc/inc/ary_i/ci_atag2.hxx79
-rw-r--r--autodoc/inc/ary_i/ci_text2.hxx92
-rw-r--r--autodoc/inc/ary_i/d_token.hxx282
-rw-r--r--autodoc/inc/ary_i/disdocum.hxx146
-rw-r--r--autodoc/inc/autodoc/displaying.hxx76
-rw-r--r--autodoc/inc/autodoc/dsp_html_std.hxx213
-rw-r--r--autodoc/inc/autodoc/dsp_txt_flist.hxx65
-rw-r--r--autodoc/inc/autodoc/filecoli.hxx72
-rw-r--r--autodoc/inc/autodoc/parsing.hxx78
-rw-r--r--autodoc/inc/autodoc/prs_code.hxx76
-rw-r--r--autodoc/inc/autodoc/prs_docu.hxx59
-rw-r--r--autodoc/inc/autodoc/x_parsing.hxx73
-rw-r--r--autodoc/inc/display/corframe.hxx82
-rw-r--r--autodoc/inc/parser/parser.hxx57
-rw-r--r--autodoc/inc/parser/parserinfo.hxx64
-rw-r--r--autodoc/inc/parser/unoidl.hxx79
-rw-r--r--autodoc/prj/build.lst67
-rw-r--r--autodoc/prj/d.lst3
-rw-r--r--autodoc/source/ary/cpp/c_builtintype.cxx127
-rw-r--r--autodoc/source/ary/cpp/c_class.cxx284
-rw-r--r--autodoc/source/ary/cpp/c_de.cxx51
-rw-r--r--autodoc/source/ary/cpp/c_define.cxx76
-rw-r--r--autodoc/source/ary/cpp/c_enum.cxx134
-rw-r--r--autodoc/source/ary/cpp/c_enuval.cxx87
-rw-r--r--autodoc/source/ary/cpp/c_funct.cxx247
-rw-r--r--autodoc/source/ary/cpp/c_macro.cxx78
-rw-r--r--autodoc/source/ary/cpp/c_namesp.cxx294
-rw-r--r--autodoc/source/ary/cpp/c_osigna.cxx76
-rw-r--r--autodoc/source/ary/cpp/c_reposypart.cxx523
-rw-r--r--autodoc/source/ary/cpp/c_reposypart.hxx114
-rw-r--r--autodoc/source/ary/cpp/c_slots.cxx106
-rw-r--r--autodoc/source/ary/cpp/c_slots.hxx84
-rw-r--r--autodoc/source/ary/cpp/c_traits.cxx223
-rw-r--r--autodoc/source/ary/cpp/c_tydef.cxx94
-rw-r--r--autodoc/source/ary/cpp/c_vari.cxx96
-rw-r--r--autodoc/source/ary/cpp/ca_ce.cxx622
-rw-r--r--autodoc/source/ary/cpp/ca_ce.hxx213
-rw-r--r--autodoc/source/ary/cpp/ca_def.cxx111
-rw-r--r--autodoc/source/ary/cpp/ca_def.hxx115
-rw-r--r--autodoc/source/ary/cpp/ca_type.cxx136
-rw-r--r--autodoc/source/ary/cpp/ca_type.hxx127
-rw-r--r--autodoc/source/ary/cpp/cs_ce.cxx104
-rw-r--r--autodoc/source/ary/cpp/cs_ce.hxx105
-rw-r--r--autodoc/source/ary/cpp/cs_def.cxx86
-rw-r--r--autodoc/source/ary/cpp/cs_def.hxx107
-rw-r--r--autodoc/source/ary/cpp/cs_type.cxx112
-rw-r--r--autodoc/source/ary/cpp/cs_type.hxx138
-rw-r--r--autodoc/source/ary/cpp/makefile.mk80
-rw-r--r--autodoc/source/ary/cpp/namechain.cxx196
-rw-r--r--autodoc/source/ary/cpp/tplparam.cxx74
-rw-r--r--autodoc/source/ary/cpp/tplparam.hxx84
-rw-r--r--autodoc/source/ary/cpp/usedtype.cxx575
-rw-r--r--autodoc/source/ary/doc/d_boolean.cxx55
-rw-r--r--autodoc/source/ary/doc/d_docu.cxx59
-rw-r--r--autodoc/source/ary/doc/d_node.cxx69
-rw-r--r--autodoc/source/ary/doc/d_oldcppdocu.cxx336
-rw-r--r--autodoc/source/ary/doc/d_oldidldocu.cxx76
-rw-r--r--autodoc/source/ary/doc/makefile.mk58
-rw-r--r--autodoc/source/ary/idl/i2s_calculator.cxx992
-rw-r--r--autodoc/source/ary/idl/i2s_calculator.hxx295
-rw-r--r--autodoc/source/ary/idl/i_attribute.cxx159
-rw-r--r--autodoc/source/ary/idl/i_ce.cxx80
-rw-r--r--autodoc/source/ary/idl/i_ce2s.cxx84
-rw-r--r--autodoc/source/ary/idl/i_comrela.cxx47
-rw-r--r--autodoc/source/ary/idl/i_constant.cxx123
-rw-r--r--autodoc/source/ary/idl/i_constgroup.cxx114
-rw-r--r--autodoc/source/ary/idl/i_enum.cxx143
-rw-r--r--autodoc/source/ary/idl/i_enumvalue.cxx116
-rw-r--r--autodoc/source/ary/idl/i_exception.cxx139
-rw-r--r--autodoc/source/ary/idl/i_function.cxx165
-rw-r--r--autodoc/source/ary/idl/i_interface.cxx196
-rw-r--r--autodoc/source/ary/idl/i_module.cxx204
-rw-r--r--autodoc/source/ary/idl/i_namelookup.cxx62
-rw-r--r--autodoc/source/ary/idl/i_nnfinder.hxx118
-rw-r--r--autodoc/source/ary/idl/i_param.cxx57
-rw-r--r--autodoc/source/ary/idl/i_property.cxx171
-rw-r--r--autodoc/source/ary/idl/i_reposypart.cxx119
-rw-r--r--autodoc/source/ary/idl/i_reposypart.hxx96
-rw-r--r--autodoc/source/ary/idl/i_service.cxx171
-rw-r--r--autodoc/source/ary/idl/i_singleton.cxx112
-rw-r--r--autodoc/source/ary/idl/i_siservice.cxx121
-rw-r--r--autodoc/source/ary/idl/i_sisingleton.cxx113
-rw-r--r--autodoc/source/ary/idl/i_struct.cxx163
-rw-r--r--autodoc/source/ary/idl/i_structelem.cxx117
-rw-r--r--autodoc/source/ary/idl/i_traits.cxx72
-rw-r--r--autodoc/source/ary/idl/i_typedef.cxx145
-rw-r--r--autodoc/source/ary/idl/ia_ce.cxx581
-rw-r--r--autodoc/source/ary/idl/ia_ce.hxx253
-rw-r--r--autodoc/source/ary/idl/ia_type.cxx364
-rw-r--r--autodoc/source/ary/idl/ia_type.hxx170
-rw-r--r--autodoc/source/ary/idl/is_ce.cxx65
-rw-r--r--autodoc/source/ary/idl/is_ce.hxx79
-rw-r--r--autodoc/source/ary/idl/is_type.cxx83
-rw-r--r--autodoc/source/ary/idl/is_type.hxx122
-rw-r--r--autodoc/source/ary/idl/it_builtin.cxx79
-rw-r--r--autodoc/source/ary/idl/it_builtin.hxx76
-rw-r--r--autodoc/source/ary/idl/it_ce.cxx100
-rw-r--r--autodoc/source/ary/idl/it_ce.hxx88
-rw-r--r--autodoc/source/ary/idl/it_explicit.cxx100
-rw-r--r--autodoc/source/ary/idl/it_explicit.hxx93
-rw-r--r--autodoc/source/ary/idl/it_named.hxx76
-rw-r--r--autodoc/source/ary/idl/it_sequence.cxx91
-rw-r--r--autodoc/source/ary/idl/it_sequence.hxx84
-rw-r--r--autodoc/source/ary/idl/it_tplparam.cxx92
-rw-r--r--autodoc/source/ary/idl/it_tplparam.hxx98
-rw-r--r--autodoc/source/ary/idl/it_xnameroom.cxx100
-rw-r--r--autodoc/source/ary/idl/it_xnameroom.hxx123
-rw-r--r--autodoc/source/ary/idl/makefile.mk87
-rw-r--r--autodoc/source/ary/inc/cpp_internalgate.hxx66
-rw-r--r--autodoc/source/ary/inc/cross_refs.hxx99
-rw-r--r--autodoc/source/ary/inc/idl_internalgate.hxx66
-rw-r--r--autodoc/source/ary/inc/idsort.hxx52
-rw-r--r--autodoc/source/ary/inc/loc_internalgate.hxx63
-rw-r--r--autodoc/source/ary/inc/nametreenode.hxx210
-rw-r--r--autodoc/source/ary/inc/reposy.hxx91
-rw-r--r--autodoc/source/ary/inc/sci_impl.hxx413
-rw-r--r--autodoc/source/ary/inc/slots.hxx163
-rw-r--r--autodoc/source/ary/inc/sorted_idset.hxx97
-rw-r--r--autodoc/source/ary/inc/sortedids.hxx237
-rw-r--r--autodoc/source/ary/inc/store/s_base.hxx180
-rw-r--r--autodoc/source/ary/inc/store/s_iterator.hxx237
-rw-r--r--autodoc/source/ary/inc/store/s_storage.hxx294
-rw-r--r--autodoc/source/ary/inc/traits_impl.hxx119
-rw-r--r--autodoc/source/ary/info/all_dts.cxx105
-rw-r--r--autodoc/source/ary/info/all_tags.cxx569
-rw-r--r--autodoc/source/ary/info/ci_attag.cxx93
-rw-r--r--autodoc/source/ary/info/ci_text.cxx71
-rw-r--r--autodoc/source/ary/info/makefile.mk60
-rw-r--r--autodoc/source/ary/kernel/ary_disp.cxx108
-rw-r--r--autodoc/source/ary/kernel/cessentl.cxx86
-rw-r--r--autodoc/source/ary/kernel/makefile.mk63
-rw-r--r--autodoc/source/ary/kernel/namesort.cxx100
-rw-r--r--autodoc/source/ary/kernel/qualiname.cxx105
-rw-r--r--autodoc/source/ary/kernel/reposy.cxx218
-rw-r--r--autodoc/source/ary/kernel/slots.cxx164
-rw-r--r--autodoc/source/ary/loc/loc_dir.cxx134
-rw-r--r--autodoc/source/ary/loc/loc_file.cxx66
-rw-r--r--autodoc/source/ary/loc/loc_filebase.cxx63
-rw-r--r--autodoc/source/ary/loc/loc_root.cxx83
-rw-r--r--autodoc/source/ary/loc/loc_traits.cxx91
-rw-r--r--autodoc/source/ary/loc/loca_le.cxx181
-rw-r--r--autodoc/source/ary/loc/loca_le.hxx98
-rw-r--r--autodoc/source/ary/loc/locs_le.cxx67
-rw-r--r--autodoc/source/ary/loc/locs_le.hxx88
-rw-r--r--autodoc/source/ary/loc/makefile.mk61
-rw-r--r--autodoc/source/ary_i/kernel/ci_atag2.cxx57
-rw-r--r--autodoc/source/ary_i/kernel/ci_text2.cxx139
-rw-r--r--autodoc/source/ary_i/kernel/d_token.cxx187
-rw-r--r--autodoc/source/ary_i/kernel/makefile.mk60
-rw-r--r--autodoc/source/display/html/aryattrs.cxx248
-rw-r--r--autodoc/source/display/html/aryattrs.hxx154
-rw-r--r--autodoc/source/display/html/cfrstd.cxx344
-rw-r--r--autodoc/source/display/html/chd_udk2.cxx201
-rw-r--r--autodoc/source/display/html/cre_link.cxx269
-rw-r--r--autodoc/source/display/html/cre_link.hxx133
-rw-r--r--autodoc/source/display/html/dsply_cl.cxx108
-rw-r--r--autodoc/source/display/html/dsply_cl.hxx87
-rw-r--r--autodoc/source/display/html/dsply_da.cxx199
-rw-r--r--autodoc/source/display/html/dsply_da.hxx107
-rw-r--r--autodoc/source/display/html/dsply_op.cxx207
-rw-r--r--autodoc/source/display/html/dsply_op.hxx104
-rw-r--r--autodoc/source/display/html/easywri.cxx65
-rw-r--r--autodoc/source/display/html/easywri.hxx80
-rw-r--r--autodoc/source/display/html/hd_chlst.cxx589
-rw-r--r--autodoc/source/display/html/hd_chlst.hxx206
-rw-r--r--autodoc/source/display/html/hd_docu.cxx486
-rw-r--r--autodoc/source/display/html/hd_docu.hxx196
-rw-r--r--autodoc/source/display/html/hdimpl.cxx546
-rw-r--r--autodoc/source/display/html/hdimpl.hxx247
-rw-r--r--autodoc/source/display/html/html_kit.cxx305
-rw-r--r--autodoc/source/display/html/html_kit.hxx198
-rw-r--r--autodoc/source/display/html/makefile.mk78
-rw-r--r--autodoc/source/display/html/nav_main.cxx377
-rw-r--r--autodoc/source/display/html/nav_main.hxx118
-rw-r--r--autodoc/source/display/html/navibar.cxx315
-rw-r--r--autodoc/source/display/html/navibar.hxx118
-rw-r--r--autodoc/source/display/html/opageenv.cxx489
-rw-r--r--autodoc/source/display/html/opageenv.hxx128
-rw-r--r--autodoc/source/display/html/outfile.cxx392
-rw-r--r--autodoc/source/display/html/outfile.hxx86
-rw-r--r--autodoc/source/display/html/pagemake.cxx576
-rw-r--r--autodoc/source/display/html/pagemake.hxx164
-rw-r--r--autodoc/source/display/html/pm_aldef.cxx245
-rw-r--r--autodoc/source/display/html/pm_aldef.hxx88
-rw-r--r--autodoc/source/display/html/pm_base.cxx77
-rw-r--r--autodoc/source/display/html/pm_base.hxx88
-rw-r--r--autodoc/source/display/html/pm_class.cxx811
-rw-r--r--autodoc/source/display/html/pm_class.hxx131
-rw-r--r--autodoc/source/display/html/pm_help.cxx232
-rw-r--r--autodoc/source/display/html/pm_help.hxx63
-rw-r--r--autodoc/source/display/html/pm_index.cxx317
-rw-r--r--autodoc/source/display/html/pm_index.hxx135
-rw-r--r--autodoc/source/display/html/pm_namsp.cxx173
-rw-r--r--autodoc/source/display/html/pm_namsp.hxx78
-rw-r--r--autodoc/source/display/html/pm_start.cxx137
-rw-r--r--autodoc/source/display/html/pm_start.hxx63
-rw-r--r--autodoc/source/display/html/protarea.cxx138
-rw-r--r--autodoc/source/display/html/protarea.hxx94
-rw-r--r--autodoc/source/display/html/strconst.hxx78
-rw-r--r--autodoc/source/display/idl/hfi_constgroup.cxx138
-rw-r--r--autodoc/source/display/idl/hfi_constgroup.hxx66
-rw-r--r--autodoc/source/display/idl/hfi_doc.cxx191
-rw-r--r--autodoc/source/display/idl/hfi_doc.hxx85
-rw-r--r--autodoc/source/display/idl/hfi_enum.cxx133
-rw-r--r--autodoc/source/display/idl/hfi_enum.hxx68
-rw-r--r--autodoc/source/display/idl/hfi_globalindex.cxx275
-rw-r--r--autodoc/source/display/idl/hfi_globalindex.hxx89
-rw-r--r--autodoc/source/display/idl/hfi_hierarchy.cxx202
-rw-r--r--autodoc/source/display/idl/hfi_hierarchy.hxx124
-rw-r--r--autodoc/source/display/idl/hfi_interface.cxx357
-rw-r--r--autodoc/source/display/idl/hfi_interface.hxx90
-rw-r--r--autodoc/source/display/idl/hfi_linklist.cxx378
-rw-r--r--autodoc/source/display/idl/hfi_linklist.hxx145
-rw-r--r--autodoc/source/display/idl/hfi_method.cxx357
-rw-r--r--autodoc/source/display/idl/hfi_method.hxx104
-rw-r--r--autodoc/source/display/idl/hfi_module.cxx299
-rw-r--r--autodoc/source/display/idl/hfi_module.hxx83
-rw-r--r--autodoc/source/display/idl/hfi_navibar.cxx225
-rw-r--r--autodoc/source/display/idl/hfi_navibar.hxx82
-rw-r--r--autodoc/source/display/idl/hfi_property.cxx451
-rw-r--r--autodoc/source/display/idl/hfi_property.hxx182
-rw-r--r--autodoc/source/display/idl/hfi_service.cxx363
-rw-r--r--autodoc/source/display/idl/hfi_service.hxx99
-rw-r--r--autodoc/source/display/idl/hfi_singleton.cxx133
-rw-r--r--autodoc/source/display/idl/hfi_singleton.hxx69
-rw-r--r--autodoc/source/display/idl/hfi_siservice.cxx175
-rw-r--r--autodoc/source/display/idl/hfi_siservice.hxx72
-rw-r--r--autodoc/source/display/idl/hfi_struct.cxx203
-rw-r--r--autodoc/source/display/idl/hfi_struct.hxx78
-rw-r--r--autodoc/source/display/idl/hfi_tag.cxx354
-rw-r--r--autodoc/source/display/idl/hfi_tag.hxx177
-rw-r--r--autodoc/source/display/idl/hfi_typedef.cxx92
-rw-r--r--autodoc/source/display/idl/hfi_typedef.hxx65
-rw-r--r--autodoc/source/display/idl/hfi_typetext.cxx757
-rw-r--r--autodoc/source/display/idl/hfi_typetext.hxx158
-rw-r--r--autodoc/source/display/idl/hfi_xrefpage.cxx273
-rw-r--r--autodoc/source/display/idl/hfi_xrefpage.hxx104
-rw-r--r--autodoc/source/display/idl/hi_ary.cxx283
-rw-r--r--autodoc/source/display/idl/hi_ary.hxx162
-rw-r--r--autodoc/source/display/idl/hi_display.cxx207
-rw-r--r--autodoc/source/display/idl/hi_env.cxx199
-rw-r--r--autodoc/source/display/idl/hi_env.hxx161
-rw-r--r--autodoc/source/display/idl/hi_factory.cxx321
-rw-r--r--autodoc/source/display/idl/hi_factory.hxx169
-rw-r--r--autodoc/source/display/idl/hi_linkhelper.cxx96
-rw-r--r--autodoc/source/display/idl/hi_linkhelper.hxx107
-rw-r--r--autodoc/source/display/idl/hi_main.cxx764
-rw-r--r--autodoc/source/display/idl/hi_main.hxx178
-rw-r--r--autodoc/source/display/idl/makefile.mk77
-rw-r--r--autodoc/source/display/inc/cfrstd.hxx80
-rw-r--r--autodoc/source/display/inc/html/chd_udk2.hxx95
-rw-r--r--autodoc/source/display/inc/idl/hi_display.hxx111
-rw-r--r--autodoc/source/display/inc/toolkit/hf_docentry.hxx59
-rw-r--r--autodoc/source/display/inc/toolkit/hf_funcdecl.hxx104
-rw-r--r--autodoc/source/display/inc/toolkit/hf_linachain.hxx72
-rw-r--r--autodoc/source/display/inc/toolkit/hf_navi_main.hxx92
-rw-r--r--autodoc/source/display/inc/toolkit/hf_navi_sub.hxx81
-rw-r--r--autodoc/source/display/inc/toolkit/hf_title.hxx91
-rw-r--r--autodoc/source/display/inc/toolkit/htmlfactory.hxx102
-rw-r--r--autodoc/source/display/inc/toolkit/htmlfile.hxx86
-rw-r--r--autodoc/source/display/inc/toolkit/out_node.hxx129
-rw-r--r--autodoc/source/display/inc/toolkit/out_position.hxx117
-rw-r--r--autodoc/source/display/inc/toolkit/out_tree.hxx136
-rw-r--r--autodoc/source/display/inc/toolkit/outputstack.hxx73
-rw-r--r--autodoc/source/display/kernel/displfct.cxx89
-rw-r--r--autodoc/source/display/kernel/displfct.hxx63
-rw-r--r--autodoc/source/display/kernel/makefile.mk55
-rw-r--r--autodoc/source/display/toolkit/hf_docentry.cxx74
-rw-r--r--autodoc/source/display/toolkit/hf_funcdecl.cxx203
-rw-r--r--autodoc/source/display/toolkit/hf_linachain.cxx110
-rw-r--r--autodoc/source/display/toolkit/hf_navi_main.cxx238
-rw-r--r--autodoc/source/display/toolkit/hf_navi_sub.cxx103
-rw-r--r--autodoc/source/display/toolkit/hf_title.cxx169
-rw-r--r--autodoc/source/display/toolkit/htmlfile.cxx211
-rw-r--r--autodoc/source/display/toolkit/makefile.mk64
-rw-r--r--autodoc/source/display/toolkit/out_node.cxx189
-rw-r--r--autodoc/source/display/toolkit/out_position.cxx239
-rw-r--r--autodoc/source/display/toolkit/out_tree.cxx53
-rw-r--r--autodoc/source/display/toolkit/outputstack.cxx58
-rw-r--r--autodoc/source/exes/adc_uni/adc_cl.cxx568
-rw-r--r--autodoc/source/exes/adc_uni/adc_cmd.hxx131
-rw-r--r--autodoc/source/exes/adc_uni/adc_cmd_parse.cxx343
-rw-r--r--autodoc/source/exes/adc_uni/adc_cmd_parse.hxx208
-rw-r--r--autodoc/source/exes/adc_uni/adc_cmds.cxx177
-rw-r--r--autodoc/source/exes/adc_uni/adc_cmds.hxx125
-rw-r--r--autodoc/source/exes/adc_uni/adc_msg.cxx208
-rw-r--r--autodoc/source/exes/adc_uni/cmd_run.cxx613
-rw-r--r--autodoc/source/exes/adc_uni/cmd_run.hxx104
-rw-r--r--autodoc/source/exes/adc_uni/cmd_sincedata.cxx129
-rw-r--r--autodoc/source/exes/adc_uni/cmd_sincedata.hxx91
-rw-r--r--autodoc/source/exes/adc_uni/main.cxx54
-rw-r--r--autodoc/source/exes/adc_uni/makefile.mk104
-rw-r--r--autodoc/source/exes/adc_uni/spec-CommandLine.txt181
-rw-r--r--autodoc/source/exes/adc_uni/spec-DevGuideReferenceFile.txt0
-rw-r--r--autodoc/source/exes/adc_uni/spec-SinceTag_Handling.txt49
-rw-r--r--autodoc/source/inc/adc_cl.hxx193
-rw-r--r--autodoc/source/inc/adc_msg.hxx141
-rw-r--r--autodoc/source/inc/docu_node_ids.hxx64
-rw-r--r--autodoc/source/inc/estack.hxx94
-rw-r--r--autodoc/source/inc/luxenum.hxx103
-rw-r--r--autodoc/source/inc/manip.hxx61
-rw-r--r--autodoc/source/inc/precomp.h66
-rw-r--r--autodoc/source/inc/prprpr.hxx58
-rw-r--r--autodoc/source/inc/tools/filecoll.hxx69
-rw-r--r--autodoc/source/inc/tools/tkpchars.hxx170
-rw-r--r--autodoc/source/mkinc/fullcpp.mk54
-rw-r--r--autodoc/source/parser/adoc/a_rdocu.cxx90
-rw-r--r--autodoc/source/parser/adoc/adoc_tok.cxx47
-rw-r--r--autodoc/source/parser/adoc/cx_a_std.cxx516
-rw-r--r--autodoc/source/parser/adoc/cx_a_sub.cxx182
-rw-r--r--autodoc/source/parser/adoc/docu_pe.cxx403
-rw-r--r--autodoc/source/parser/adoc/makefile.mk62
-rw-r--r--autodoc/source/parser/adoc/prs_adoc.cxx57
-rw-r--r--autodoc/source/parser/adoc/tk_attag.cxx111
-rw-r--r--autodoc/source/parser/adoc/tk_docw.cxx128
-rw-r--r--autodoc/source/parser/cpp/all_toks.cxx151
-rw-r--r--autodoc/source/parser/cpp/all_toks.hxx219
-rw-r--r--autodoc/source/parser/cpp/c_dealer.cxx149
-rw-r--r--autodoc/source/parser/cpp/c_dealer.hxx108
-rw-r--r--autodoc/source/parser/cpp/c_rcode.cxx161
-rw-r--r--autodoc/source/parser/cpp/c_rcode.hxx104
-rw-r--r--autodoc/source/parser/cpp/cpp_pe.cxx78
-rw-r--r--autodoc/source/parser/cpp/cpp_pe.hxx81
-rw-r--r--autodoc/source/parser/cpp/cpp_tok.hxx63
-rw-r--r--autodoc/source/parser/cpp/cx_base.cxx77
-rw-r--r--autodoc/source/parser/cpp/cx_base.hxx96
-rw-r--r--autodoc/source/parser/cpp/cx_c_pp.cxx180
-rw-r--r--autodoc/source/parser/cpp/cx_c_pp.hxx95
-rw-r--r--autodoc/source/parser/cpp/cx_c_std.cxx529
-rw-r--r--autodoc/source/parser/cpp/cx_c_std.hxx92
-rw-r--r--autodoc/source/parser/cpp/cx_c_sub.cxx157
-rw-r--r--autodoc/source/parser/cpp/cx_c_sub.hxx103
-rw-r--r--autodoc/source/parser/cpp/cxt2ary.cxx357
-rw-r--r--autodoc/source/parser/cpp/cxt2ary.hxx198
-rw-r--r--autodoc/source/parser/cpp/defdescr.cxx225
-rw-r--r--autodoc/source/parser/cpp/defdescr.hxx97
-rw-r--r--autodoc/source/parser/cpp/fevnthdl.hxx105
-rw-r--r--autodoc/source/parser/cpp/icprivow.cxx192
-rw-r--r--autodoc/source/parser/cpp/icprivow.hxx123
-rw-r--r--autodoc/source/parser/cpp/makefile.mk87
-rw-r--r--autodoc/source/parser/cpp/pe_base.cxx224
-rw-r--r--autodoc/source/parser/cpp/pe_base.hxx123
-rw-r--r--autodoc/source/parser/cpp/pe_class.cxx503
-rw-r--r--autodoc/source/parser/cpp/pe_class.hxx256
-rw-r--r--autodoc/source/parser/cpp/pe_defs.cxx180
-rw-r--r--autodoc/source/parser/cpp/pe_defs.hxx94
-rw-r--r--autodoc/source/parser/cpp/pe_enum.cxx189
-rw-r--r--autodoc/source/parser/cpp/pe_enum.hxx138
-rw-r--r--autodoc/source/parser/cpp/pe_enval.cxx168
-rw-r--r--autodoc/source/parser/cpp/pe_enval.hxx99
-rw-r--r--autodoc/source/parser/cpp/pe_expr.cxx204
-rw-r--r--autodoc/source/parser/cpp/pe_expr.hxx105
-rw-r--r--autodoc/source/parser/cpp/pe_file.cxx317
-rw-r--r--autodoc/source/parser/cpp/pe_file.hxx209
-rw-r--r--autodoc/source/parser/cpp/pe_funct.cxx610
-rw-r--r--autodoc/source/parser/cpp/pe_funct.hxx281
-rw-r--r--autodoc/source/parser/cpp/pe_ignor.cxx116
-rw-r--r--autodoc/source/parser/cpp/pe_ignor.hxx75
-rw-r--r--autodoc/source/parser/cpp/pe_namsp.cxx163
-rw-r--r--autodoc/source/parser/cpp/pe_namsp.hxx99
-rw-r--r--autodoc/source/parser/cpp/pe_param.cxx280
-rw-r--r--autodoc/source/parser/cpp/pe_param.hxx138
-rw-r--r--autodoc/source/parser/cpp/pe_tpltp.cxx175
-rw-r--r--autodoc/source/parser/cpp/pe_tpltp.hxx106
-rw-r--r--autodoc/source/parser/cpp/pe_tydef.cxx143
-rw-r--r--autodoc/source/parser/cpp/pe_tydef.hxx90
-rw-r--r--autodoc/source/parser/cpp/pe_type.cxx554
-rw-r--r--autodoc/source/parser/cpp/pe_type.hxx185
-rw-r--r--autodoc/source/parser/cpp/pe_vafu.cxx649
-rw-r--r--autodoc/source/parser/cpp/pe_vafu.hxx289
-rw-r--r--autodoc/source/parser/cpp/pe_vari.cxx187
-rw-r--r--autodoc/source/parser/cpp/pe_vari.hxx130
-rw-r--r--autodoc/source/parser/cpp/pev.hxx304
-rw-r--r--autodoc/source/parser/cpp/preproc.cxx231
-rw-r--r--autodoc/source/parser/cpp/preproc.hxx116
-rw-r--r--autodoc/source/parser/cpp/prs_cpp.cxx248
-rw-r--r--autodoc/source/parser/cpp/sdocdist.hxx158
-rw-r--r--autodoc/source/parser/cpp/sfscope.hxx69
-rw-r--r--autodoc/source/parser/cpp/sownstck.hxx325
-rw-r--r--autodoc/source/parser/cpp/srecover.hxx132
-rw-r--r--autodoc/source/parser/cpp/tkp_cpp.cxx92
-rw-r--r--autodoc/source/parser/cpp/tkp_cpp.hxx99
-rw-r--r--autodoc/source/parser/cpp/tokintpr.hxx117
-rw-r--r--autodoc/source/parser/inc/adoc/a_rdocu.hxx71
-rw-r--r--autodoc/source/parser/inc/adoc/adoc_tok.hxx62
-rw-r--r--autodoc/source/parser/inc/adoc/atokdeal.hxx60
-rw-r--r--autodoc/source/parser/inc/adoc/cx_a_std.hxx105
-rw-r--r--autodoc/source/parser/inc/adoc/cx_a_sub.hxx146
-rw-r--r--autodoc/source/parser/inc/adoc/docu_pe.hxx192
-rw-r--r--autodoc/source/parser/inc/adoc/prs_adoc.hxx55
-rw-r--r--autodoc/source/parser/inc/adoc/tk_attag.hxx98
-rw-r--r--autodoc/source/parser/inc/adoc/tk_docw.hxx117
-rw-r--r--autodoc/source/parser/inc/adoc/tokintpr.hxx117
-rw-r--r--autodoc/source/parser/inc/cpp/ctokdeal.hxx74
-rw-r--r--autodoc/source/parser/inc/cpp/prs_cpp.hxx67
-rw-r--r--autodoc/source/parser/inc/doc_deal.hxx89
-rw-r--r--autodoc/source/parser/inc/semantic/callf.hxx287
-rw-r--r--autodoc/source/parser/inc/semantic/parseenv.hxx110
-rw-r--r--autodoc/source/parser/inc/semantic/sub_pe.hxx112
-rw-r--r--autodoc/source/parser/inc/semantic/sub_peu.hxx131
-rw-r--r--autodoc/source/parser/inc/tokens/parseinc.hxx203
-rw-r--r--autodoc/source/parser/inc/tokens/stmstarr.hxx85
-rw-r--r--autodoc/source/parser/inc/tokens/stmstate.hxx68
-rw-r--r--autodoc/source/parser/inc/tokens/stmstfin.hxx80
-rw-r--r--autodoc/source/parser/inc/tokens/tkp.hxx99
-rw-r--r--autodoc/source/parser/inc/tokens/tkpcontx.hxx140
-rw-r--r--autodoc/source/parser/inc/tokens/tkpstama.hxx123
-rw-r--r--autodoc/source/parser/inc/tokens/tokdeal.hxx77
-rw-r--r--autodoc/source/parser/inc/tokens/token.hxx66
-rw-r--r--autodoc/source/parser/inc/tokens/tokproct.hxx83
-rw-r--r--autodoc/source/parser/inc/x_docu.hxx58
-rw-r--r--autodoc/source/parser/inc/x_parse.hxx63
-rw-r--r--autodoc/source/parser/kernel/makefile.mk58
-rw-r--r--autodoc/source/parser/kernel/parsefct.cxx81
-rw-r--r--autodoc/source/parser/kernel/parsefct.hxx60
-rw-r--r--autodoc/source/parser/kernel/x_docu.cxx61
-rw-r--r--autodoc/source/parser/kernel/x_parse.cxx98
-rw-r--r--autodoc/source/parser/semantic/makefile.mk58
-rw-r--r--autodoc/source/parser/semantic/parseenv.cxx86
-rw-r--r--autodoc/source/parser/tokens/makefile.mk62
-rw-r--r--autodoc/source/parser/tokens/stmstarr.cxx99
-rw-r--r--autodoc/source/parser/tokens/stmstate.cxx46
-rw-r--r--autodoc/source/parser/tokens/stmstfin.cxx61
-rw-r--r--autodoc/source/parser/tokens/tkp.cxx72
-rw-r--r--autodoc/source/parser/tokens/tkpcontx.cxx68
-rw-r--r--autodoc/source/parser/tokens/tkpstama.cxx177
-rw-r--r--autodoc/source/parser/tokens/tokdeal.cxx50
-rw-r--r--autodoc/source/parser_i/idl/cx_idlco.cxx545
-rw-r--r--autodoc/source/parser_i/idl/cx_sub.cxx146
-rw-r--r--autodoc/source/parser_i/idl/distrib.cxx264
-rw-r--r--autodoc/source/parser_i/idl/makefile.mk84
-rw-r--r--autodoc/source/parser_i/idl/parsenv2.cxx212
-rw-r--r--autodoc/source/parser_i/idl/pe_attri.cxx294
-rw-r--r--autodoc/source/parser_i/idl/pe_const.cxx280
-rw-r--r--autodoc/source/parser_i/idl/pe_enum2.cxx251
-rw-r--r--autodoc/source/parser_i/idl/pe_evalu.cxx182
-rw-r--r--autodoc/source/parser_i/idl/pe_excp.cxx298
-rw-r--r--autodoc/source/parser_i/idl/pe_file2.cxx318
-rw-r--r--autodoc/source/parser_i/idl/pe_func2.cxx445
-rw-r--r--autodoc/source/parser_i/idl/pe_iface.cxx467
-rw-r--r--autodoc/source/parser_i/idl/pe_property.cxx238
-rw-r--r--autodoc/source/parser_i/idl/pe_selem.cxx205
-rw-r--r--autodoc/source/parser_i/idl/pe_servi.cxx393
-rw-r--r--autodoc/source/parser_i/idl/pe_singl.cxx272
-rw-r--r--autodoc/source/parser_i/idl/pe_struc.cxx327
-rw-r--r--autodoc/source/parser_i/idl/pe_tydf2.cxx184
-rw-r--r--autodoc/source/parser_i/idl/pe_type2.cxx314
-rw-r--r--autodoc/source/parser_i/idl/pe_vari2.cxx173
-rw-r--r--autodoc/source/parser_i/idl/pestate.cxx140
-rw-r--r--autodoc/source/parser_i/idl/semnode.cxx82
-rw-r--r--autodoc/source/parser_i/idl/tk_const.cxx57
-rw-r--r--autodoc/source/parser_i/idl/tk_ident.cxx68
-rw-r--r--autodoc/source/parser_i/idl/tk_keyw.cxx225
-rw-r--r--autodoc/source/parser_i/idl/tk_punct.cxx113
-rw-r--r--autodoc/source/parser_i/idl/tkp_uidl.cxx74
-rw-r--r--autodoc/source/parser_i/idl/unoidl.cxx176
-rw-r--r--autodoc/source/parser_i/idoc/cx_docu2.cxx267
-rw-r--r--autodoc/source/parser_i/idoc/cx_dsapi.cxx533
-rw-r--r--autodoc/source/parser_i/idoc/docu_pe2.cxx606
-rw-r--r--autodoc/source/parser_i/idoc/makefile.mk62
-rw-r--r--autodoc/source/parser_i/idoc/tk_atag2.cxx83
-rw-r--r--autodoc/source/parser_i/idoc/tk_docw2.cxx119
-rw-r--r--autodoc/source/parser_i/idoc/tk_html.cxx58
-rw-r--r--autodoc/source/parser_i/idoc/tk_xml.cxx174
-rw-r--r--autodoc/source/parser_i/inc/s2_dsapi/cx_docu2.hxx233
-rw-r--r--autodoc/source/parser_i/inc/s2_dsapi/cx_dsapi.hxx123
-rw-r--r--autodoc/source/parser_i/inc/s2_dsapi/docu_pe2.hxx174
-rw-r--r--autodoc/source/parser_i/inc/s2_dsapi/dsapitok.hxx65
-rw-r--r--autodoc/source/parser_i/inc/s2_dsapi/tk_atag2.hxx88
-rw-r--r--autodoc/source/parser_i/inc/s2_dsapi/tk_docw2.hxx121
-rw-r--r--autodoc/source/parser_i/inc/s2_dsapi/tk_html.hxx73
-rw-r--r--autodoc/source/parser_i/inc/s2_dsapi/tk_xml.hxx201
-rw-r--r--autodoc/source/parser_i/inc/s2_dsapi/tokintpr.hxx94
-rw-r--r--autodoc/source/parser_i/inc/s2_dsapi/tokrecv.hxx60
-rw-r--r--autodoc/source/parser_i/inc/s2_luidl/cx_idlco.hxx98
-rw-r--r--autodoc/source/parser_i/inc/s2_luidl/cx_sub.hxx131
-rw-r--r--autodoc/source/parser_i/inc/s2_luidl/distrib.hxx272
-rw-r--r--autodoc/source/parser_i/inc/s2_luidl/parsenv2.hxx142
-rw-r--r--autodoc/source/parser_i/inc/s2_luidl/pe_attri.hxx135
-rw-r--r--autodoc/source/parser_i/inc/s2_luidl/pe_const.hxx145
-rw-r--r--autodoc/source/parser_i/inc/s2_luidl/pe_enum2.hxx131
-rw-r--r--autodoc/source/parser_i/inc/s2_luidl/pe_evalu.hxx127
-rw-r--r--autodoc/source/parser_i/inc/s2_luidl/pe_excp.hxx259
-rw-r--r--autodoc/source/parser_i/inc/s2_luidl/pe_file2.hxx140
-rw-r--r--autodoc/source/parser_i/inc/s2_luidl/pe_func2.hxx167
-rw-r--r--autodoc/source/parser_i/inc/s2_luidl/pe_iface.hxx184
-rw-r--r--autodoc/source/parser_i/inc/s2_luidl/pe_modul.hxx63
-rw-r--r--autodoc/source/parser_i/inc/s2_luidl/pe_property.hxx123
-rw-r--r--autodoc/source/parser_i/inc/s2_luidl/pe_selem.hxx121
-rw-r--r--autodoc/source/parser_i/inc/s2_luidl/pe_servi.hxx149
-rw-r--r--autodoc/source/parser_i/inc/s2_luidl/pe_singl.hxx150
-rw-r--r--autodoc/source/parser_i/inc/s2_luidl/pe_struc.hxx285
-rw-r--r--autodoc/source/parser_i/inc/s2_luidl/pe_tydf2.hxx124
-rw-r--r--autodoc/source/parser_i/inc/s2_luidl/pe_type2.hxx116
-rw-r--r--autodoc/source/parser_i/inc/s2_luidl/pe_vari2.hxx107
-rw-r--r--autodoc/source/parser_i/inc/s2_luidl/pestate.hxx106
-rw-r--r--autodoc/source/parser_i/inc/s2_luidl/semnode.hxx132
-rw-r--r--autodoc/source/parser_i/inc/s2_luidl/smp_uidl.hxx82
-rw-r--r--autodoc/source/parser_i/inc/s2_luidl/tk_const.hxx64
-rw-r--r--autodoc/source/parser_i/inc/s2_luidl/tk_ident.hxx75
-rw-r--r--autodoc/source/parser_i/inc/s2_luidl/tk_keyw.hxx251
-rw-r--r--autodoc/source/parser_i/inc/s2_luidl/tk_punct.hxx113
-rw-r--r--autodoc/source/parser_i/inc/s2_luidl/tkp_uidl.hxx84
-rw-r--r--autodoc/source/parser_i/inc/s2_luidl/tokintpr.hxx98
-rw-r--r--autodoc/source/parser_i/inc/s2_luidl/tokproct.hxx93
-rw-r--r--autodoc/source/parser_i/inc/s2_luidl/tokrecv.hxx60
-rw-r--r--autodoc/source/parser_i/inc/s2_luidl/uidl_tok.hxx64
-rw-r--r--autodoc/source/parser_i/inc/semantic/parsenv2.hxx51
-rw-r--r--autodoc/source/parser_i/inc/tokens/stmstar2.hxx83
-rw-r--r--autodoc/source/parser_i/inc/tokens/stmstat2.hxx68
-rw-r--r--autodoc/source/parser_i/inc/tokens/stmstfi2.hxx80
-rw-r--r--autodoc/source/parser_i/inc/tokens/tkp2.hxx84
-rw-r--r--autodoc/source/parser_i/inc/tokens/tkpcont2.hxx123
-rw-r--r--autodoc/source/parser_i/inc/tokens/tkpstam2.hxx121
-rw-r--r--autodoc/source/parser_i/inc/tokens/token2.hxx63
-rw-r--r--autodoc/source/parser_i/inc/x_parse2.hxx67
-rw-r--r--autodoc/source/parser_i/tokens/makefile.mk63
-rw-r--r--autodoc/source/parser_i/tokens/stmstar2.cxx102
-rw-r--r--autodoc/source/parser_i/tokens/stmstat2.cxx46
-rw-r--r--autodoc/source/parser_i/tokens/stmstfi2.cxx61
-rw-r--r--autodoc/source/parser_i/tokens/tkp2.cxx62
-rw-r--r--autodoc/source/parser_i/tokens/tkpcont2.cxx65
-rw-r--r--autodoc/source/parser_i/tokens/tkpstam2.cxx174
-rw-r--r--autodoc/source/parser_i/tokens/x_parse2.cxx61
-rw-r--r--autodoc/source/tools/filecoll.cxx132
-rw-r--r--autodoc/source/tools/makefile.mk58
-rw-r--r--autodoc/source/tools/tkpchars.cxx159
-rw-r--r--avmedia/inc/avmedia/mediaitem.hxx133
-rw-r--r--avmedia/inc/avmedia/mediaplayer.hxx96
-rw-r--r--avmedia/inc/avmedia/mediatoolbox.hxx65
-rw-r--r--avmedia/inc/avmedia/mediawindow.hxx170
-rw-r--r--avmedia/inc/helpids.hrc46
-rw-r--r--avmedia/inc/mediacontrol.hxx114
-rw-r--r--avmedia/prj/build.lst11
-rw-r--r--avmedia/prj/d.lst18
-rw-r--r--avmedia/source/framework/makefile.mk58
-rw-r--r--avmedia/source/framework/mediacontrol.cxx635
-rw-r--r--avmedia/source/framework/mediacontrol.hrc53
-rw-r--r--avmedia/source/framework/mediacontrol.src193
-rw-r--r--avmedia/source/framework/mediaitem.cxx329
-rw-r--r--avmedia/source/framework/mediamisc.cxx48
-rw-r--r--avmedia/source/framework/mediaplayer.cxx166
-rw-r--r--avmedia/source/framework/mediatoolbox.cxx168
-rw-r--r--avmedia/source/framework/soundhandler.cxx563
-rw-r--r--avmedia/source/framework/soundhandler.hxx187
-rw-r--r--avmedia/source/framework/soundhandler.xml49
-rw-r--r--avmedia/source/inc/mediamisc.hxx45
-rw-r--r--avmedia/source/java/FrameGrabber.java190
-rw-r--r--avmedia/source/java/Manager.java148
-rw-r--r--avmedia/source/java/MediaUno.java76
-rw-r--r--avmedia/source/java/Player.java325
-rw-r--r--avmedia/source/java/PlayerWindow.java602
-rw-r--r--avmedia/source/java/WindowAdapter.java508
-rw-r--r--avmedia/source/java/avmedia.jarbin0 -> 16420 bytes
-rw-r--r--avmedia/source/java/makefile.mk61
-rw-r--r--avmedia/source/java/manifest2
-rw-r--r--avmedia/source/java/win/SystemWindowAdapter.java53
-rw-r--r--avmedia/source/java/x11/SystemWindowAdapter.java123
-rw-r--r--avmedia/source/quicktime/framegrabber.cxx152
-rw-r--r--avmedia/source/quicktime/framegrabber.hxx73
-rw-r--r--avmedia/source/quicktime/makefile.mk85
-rw-r--r--avmedia/source/quicktime/manager.cxx96
-rw-r--r--avmedia/source/quicktime/manager.hxx66
-rw-r--r--avmedia/source/quicktime/player.cxx501
-rw-r--r--avmedia/source/quicktime/player.hxx113
-rw-r--r--avmedia/source/quicktime/quicktimecommon.hxx81
-rw-r--r--avmedia/source/quicktime/quicktimeuno.cxx106
-rw-r--r--avmedia/source/quicktime/window.cxx353
-rw-r--r--avmedia/source/quicktime/window.hxx115
-rw-r--r--avmedia/source/viewer/makefile.mk57
-rw-r--r--avmedia/source/viewer/mediaevent_impl.cxx223
-rw-r--r--avmedia/source/viewer/mediaevent_impl.hxx89
-rw-r--r--avmedia/source/viewer/mediawindow.cxx580
-rw-r--r--avmedia/source/viewer/mediawindow.hrc9
-rw-r--r--avmedia/source/viewer/mediawindow.src77
-rw-r--r--avmedia/source/viewer/mediawindow_impl.cxx546
-rw-r--r--avmedia/source/viewer/mediawindow_impl.hxx145
-rw-r--r--avmedia/source/viewer/mediawindowbase_impl.cxx442
-rw-r--r--avmedia/source/viewer/mediawindowbase_impl.hxx131
-rw-r--r--avmedia/source/win/exports.dxp4
-rw-r--r--avmedia/source/win/framegrabber.cxx247
-rw-r--r--avmedia/source/win/framegrabber.hxx74
-rw-r--r--avmedia/source/win/interface.hxx123
-rw-r--r--avmedia/source/win/makefile.mk82
-rw-r--r--avmedia/source/win/manager.cxx97
-rw-r--r--avmedia/source/win/manager.hxx66
-rw-r--r--avmedia/source/win/player.cxx494
-rw-r--r--avmedia/source/win/player.hxx123
-rw-r--r--avmedia/source/win/wincommon.hxx56
-rw-r--r--avmedia/source/win/window.cxx740
-rw-r--r--avmedia/source/win/window.hxx125
-rw-r--r--avmedia/source/win/winuno.cxx104
-rw-r--r--avmedia/source/xine/exports.dxp4
-rw-r--r--avmedia/source/xine/makefile.mk64
-rw-r--r--avmedia/source/xine/manager.cxx91
-rw-r--r--avmedia/source/xine/manager.hxx66
-rw-r--r--avmedia/source/xine/player.cxx262
-rw-r--r--avmedia/source/xine/player.hxx84
-rw-r--r--avmedia/source/xine/window.cxx571
-rw-r--r--avmedia/source/xine/window.hxx114
-rw-r--r--avmedia/source/xine/xinecommon.hxx65
-rw-r--r--avmedia/source/xine/xineuno.cxx106
-rwxr-xr-xavmedia/util/hidother.src41
-rw-r--r--avmedia/util/makefile.mk79
-rw-r--r--basebmp/inc/basebmp/accessor.hxx119
-rw-r--r--basebmp/inc/basebmp/accessoradapters.hxx526
-rw-r--r--basebmp/inc/basebmp/accessorfunctors.hxx187
-rw-r--r--basebmp/inc/basebmp/accessortraits.hxx130
-rw-r--r--basebmp/inc/basebmp/bitmapdevice.hxx692
-rw-r--r--basebmp/inc/basebmp/clippedlinerenderer.hxx412
-rw-r--r--basebmp/inc/basebmp/color.hxx99
-rw-r--r--basebmp/inc/basebmp/colorblendaccessoradapter.hxx148
-rw-r--r--basebmp/inc/basebmp/colormisc.hxx191
-rw-r--r--basebmp/inc/basebmp/colortraits.hxx150
-rwxr-xr-xbasebmp/inc/basebmp/compositeiterator.hxx367
-rw-r--r--basebmp/inc/basebmp/debug.hxx50
-rw-r--r--basebmp/inc/basebmp/drawmodes.hxx55
-rw-r--r--basebmp/inc/basebmp/endian.hxx57
-rw-r--r--basebmp/inc/basebmp/fillimage.hxx69
-rw-r--r--basebmp/inc/basebmp/genericcolorimageaccessor.hxx82
-rw-r--r--basebmp/inc/basebmp/greylevelformats.hxx135
-rw-r--r--basebmp/inc/basebmp/iteratortraits.hxx55
-rw-r--r--basebmp/inc/basebmp/linerenderer.hxx181
-rw-r--r--basebmp/inc/basebmp/metafunctions.hxx222
-rw-r--r--basebmp/inc/basebmp/nonstandarditerator.hxx45
-rw-r--r--basebmp/inc/basebmp/packedpixeliterator.hxx677
-rw-r--r--basebmp/inc/basebmp/paletteformats.hxx147
-rw-r--r--basebmp/inc/basebmp/paletteimageaccessor.hxx168
-rw-r--r--basebmp/inc/basebmp/pixelformatadapters.hxx108
-rw-r--r--basebmp/inc/basebmp/pixeliterator.hxx355
-rw-r--r--basebmp/inc/basebmp/polypolygonrenderer.hxx366
-rw-r--r--basebmp/inc/basebmp/rgb24pixelformats.hxx98
-rw-r--r--basebmp/inc/basebmp/rgbmaskpixelformats.hxx289
-rw-r--r--basebmp/inc/basebmp/scaleimage.hxx195
-rw-r--r--basebmp/inc/basebmp/scanlineformats.hxx56
-rw-r--r--basebmp/inc/basebmp/stridedarrayiterator.hxx114
-rw-r--r--basebmp/inc/basebmp/tools.hxx91
-rw-r--r--basebmp/inc/basebmp/truecolormaskaccessor.hxx290
-rw-r--r--basebmp/prj/build.lst5
-rw-r--r--basebmp/prj/d.lst9
-rw-r--r--basebmp/source/bitmapdevice.cxx2064
-rw-r--r--basebmp/source/debug.cxx106
-rw-r--r--basebmp/source/intconversion.hxx88
-rw-r--r--basebmp/source/makefile.mk76
-rw-r--r--basebmp/source/polypolygonrenderer.cxx127
-rw-r--r--basebmp/test/basictest.cxx300
-rw-r--r--basebmp/test/bmpdemo.cxx1256
-rw-r--r--basebmp/test/bmpmasktest.cxx191
-rw-r--r--basebmp/test/bmptest.cxx218
-rw-r--r--basebmp/test/cliptest.cxx285
-rw-r--r--basebmp/test/export.map34
-rw-r--r--basebmp/test/filltest.cxx279
-rw-r--r--basebmp/test/linetest.cxx227
-rw-r--r--basebmp/test/makefile.mk125
-rw-r--r--basebmp/test/masktest.cxx179
-rw-r--r--basebmp/test/polytest.cxx299
-rw-r--r--basebmp/test/tools.cxx49
-rw-r--r--basebmp/test/tools.hxx31
-rw-r--r--basebmp/util/basebmp.flt4
-rw-r--r--basebmp/util/makefile.mk66
-rw-r--r--basegfx/inc/basegfx/color/bcolor.hxx237
-rw-r--r--basegfx/inc/basegfx/color/bcolormodifier.hxx143
-rw-r--r--basegfx/inc/basegfx/color/bcolortools.hxx72
-rw-r--r--basegfx/inc/basegfx/curve/b2dbeziertools.hxx63
-rw-r--r--basegfx/inc/basegfx/curve/b2dcubicbezier.hxx222
-rw-r--r--basegfx/inc/basegfx/curve/b2dquadraticbezier.hxx73
-rw-r--r--basegfx/inc/basegfx/matrix/b2dhommatrix.hxx168
-rw-r--r--basegfx/inc/basegfx/matrix/b2dhommatrixtools.hxx234
-rw-r--r--basegfx/inc/basegfx/matrix/b3dhommatrix.hxx175
-rw-r--r--basegfx/inc/basegfx/numeric/ftools.hxx203
-rw-r--r--basegfx/inc/basegfx/pixel/bpixel.hxx222
-rw-r--r--basegfx/inc/basegfx/point/b2dhompoint.hxx235
-rw-r--r--basegfx/inc/basegfx/point/b2dpoint.hxx151
-rw-r--r--basegfx/inc/basegfx/point/b2ipoint.hxx127
-rw-r--r--basegfx/inc/basegfx/point/b3dhompoint.hxx405
-rw-r--r--basegfx/inc/basegfx/point/b3dpoint.hxx150
-rw-r--r--basegfx/inc/basegfx/point/b3ipoint.hxx139
-rw-r--r--basegfx/inc/basegfx/polygon/b2dlinegeometry.hxx144
-rw-r--r--basegfx/inc/basegfx/polygon/b2dpolygon.hxx274
-rw-r--r--basegfx/inc/basegfx/polygon/b2dpolygonclipper.hxx82
-rw-r--r--basegfx/inc/basegfx/polygon/b2dpolygoncutandtouch.hxx81
-rw-r--r--basegfx/inc/basegfx/polygon/b2dpolygontools.hxx534
-rw-r--r--basegfx/inc/basegfx/polygon/b2dpolygontriangulator.hxx49
-rw-r--r--basegfx/inc/basegfx/polygon/b2dpolypolygon.hxx137
-rw-r--r--basegfx/inc/basegfx/polygon/b2dpolypolygoncutter.hxx119
-rw-r--r--basegfx/inc/basegfx/polygon/b2dpolypolygonfillrule.hxx60
-rw-r--r--basegfx/inc/basegfx/polygon/b2dpolypolygonrasterconverter.hxx141
-rw-r--r--basegfx/inc/basegfx/polygon/b2dpolypolygontools.hxx279
-rw-r--r--basegfx/inc/basegfx/polygon/b2dtrapezoid.hxx132
-rw-r--r--basegfx/inc/basegfx/polygon/b3dpolygon.hxx141
-rw-r--r--basegfx/inc/basegfx/polygon/b3dpolygonclipper.hxx86
-rw-r--r--basegfx/inc/basegfx/polygon/b3dpolygontools.hxx191
-rw-r--r--basegfx/inc/basegfx/polygon/b3dpolypolygon.hxx125
-rw-r--r--basegfx/inc/basegfx/polygon/b3dpolypolygontools.hxx154
-rw-r--r--basegfx/inc/basegfx/range/b1drange.hxx165
-rw-r--r--basegfx/inc/basegfx/range/b1ibox.hxx143
-rw-r--r--basegfx/inc/basegfx/range/b1irange.hxx144
-rw-r--r--basegfx/inc/basegfx/range/b2dconnectedranges.hxx263
-rw-r--r--basegfx/inc/basegfx/range/b2dpolyrange.hxx145
-rw-r--r--basegfx/inc/basegfx/range/b2drange.hxx295
-rw-r--r--basegfx/inc/basegfx/range/b2drangeclipper.hxx53
-rw-r--r--basegfx/inc/basegfx/range/b2drectangle.hxx42
-rw-r--r--basegfx/inc/basegfx/range/b2ibox.hxx251
-rw-r--r--basegfx/inc/basegfx/range/b2irange.hxx254
-rw-r--r--basegfx/inc/basegfx/range/b2irectangle.hxx42
-rw-r--r--basegfx/inc/basegfx/range/b3drange.hxx302
-rw-r--r--basegfx/inc/basegfx/range/b3dvolume.hxx42
-rw-r--r--basegfx/inc/basegfx/range/b3ibox.hxx259
-rw-r--r--basegfx/inc/basegfx/range/b3irange.hxx262
-rw-r--r--basegfx/inc/basegfx/range/b3ivolume.hxx42
-rw-r--r--basegfx/inc/basegfx/range/basicbox.hxx136
-rw-r--r--basegfx/inc/basegfx/range/basicrange.hxx297
-rw-r--r--basegfx/inc/basegfx/range/rangeexpander.hxx83
-rw-r--r--basegfx/inc/basegfx/raster/bpixelraster.hxx116
-rw-r--r--basegfx/inc/basegfx/raster/bzpixelraster.hxx96
-rw-r--r--basegfx/inc/basegfx/raster/rasterconvert3d.hxx345
-rw-r--r--basegfx/inc/basegfx/tools/b2dclipstate.hxx119
-rwxr-xr-xbasegfx/inc/basegfx/tools/canvastools.hxx221
-rw-r--r--basegfx/inc/basegfx/tools/debugplotter.hxx107
-rw-r--r--basegfx/inc/basegfx/tools/gradienttools.hxx410
-rw-r--r--basegfx/inc/basegfx/tools/keystoplerp.hxx100
-rw-r--r--basegfx/inc/basegfx/tools/lerp.hxx60
-rw-r--r--basegfx/inc/basegfx/tools/rectcliptools.hxx88
-rw-r--r--basegfx/inc/basegfx/tools/tools.hxx131
-rwxr-xr-xbasegfx/inc/basegfx/tools/unopolypolygon.hxx112
-rw-r--r--basegfx/inc/basegfx/tuple/b2dtuple.hxx359
-rw-r--r--basegfx/inc/basegfx/tuple/b2i64tuple.hxx312
-rw-r--r--basegfx/inc/basegfx/tuple/b2ituple.hxx237
-rw-r--r--basegfx/inc/basegfx/tuple/b3dtuple.hxx433
-rw-r--r--basegfx/inc/basegfx/tuple/b3i64tuple.hxx349
-rw-r--r--basegfx/inc/basegfx/tuple/b3ituple.hxx349
-rw-r--r--basegfx/inc/basegfx/vector/b2dsize.hxx42
-rw-r--r--basegfx/inc/basegfx/vector/b2dvector.hxx267
-rw-r--r--basegfx/inc/basegfx/vector/b2enums.hxx76
-rw-r--r--basegfx/inc/basegfx/vector/b2isize.hxx42
-rw-r--r--basegfx/inc/basegfx/vector/b2ivector.hxx230
-rw-r--r--basegfx/inc/basegfx/vector/b3dsize.hxx42
-rw-r--r--basegfx/inc/basegfx/vector/b3dvector.hxx340
-rw-r--r--basegfx/inc/basegfx/vector/b3isize.hxx42
-rw-r--r--basegfx/inc/basegfx/vector/b3ivector.hxx259
-rw-r--r--basegfx/inc/makefile.mk47
-rw-r--r--basegfx/inc/pch/precompiled_basegfx.cxx29
-rw-r--r--basegfx/inc/pch/precompiled_basegfx.hxx32
-rw-r--r--basegfx/prj/build.lst18
-rw-r--r--basegfx/prj/d.lst113
-rw-r--r--basegfx/qa/mkpolygons.pl344
-rw-r--r--basegfx/source/color/bcolor.cxx40
-rw-r--r--basegfx/source/color/bcolormodifier.cxx72
-rw-r--r--basegfx/source/color/bcolortools.cxx268
-rw-r--r--basegfx/source/color/makefile.mk49
-rw-r--r--basegfx/source/curve/b2dbeziertools.cxx163
-rw-r--r--basegfx/source/curve/b2dcubicbezier.cxx1106
-rw-r--r--basegfx/source/curve/b2dquadraticbezier.cxx105
-rw-r--r--basegfx/source/curve/makefile.mk49
-rw-r--r--basegfx/source/inc/PolygonPoint.hxx538
-rw-r--r--basegfx/source/inc/hommatrixtemplate.hxx613
-rw-r--r--basegfx/source/inc/polygontemplate.hxx538
-rw-r--r--basegfx/source/matrix/b2dhommatrix.cxx454
-rw-r--r--basegfx/source/matrix/b2dhommatrixtools.cxx401
-rw-r--r--basegfx/source/matrix/b3dhommatrix.cxx596
-rw-r--r--basegfx/source/matrix/makefile.mk49
-rw-r--r--basegfx/source/numeric/ftools.cxx38
-rw-r--r--basegfx/source/numeric/makefile.mk47
-rw-r--r--basegfx/source/pixel/bpixel.cxx51
-rw-r--r--basegfx/source/pixel/makefile.mk47
-rw-r--r--basegfx/source/point/b2dhompoint.cxx259
-rw-r--r--basegfx/source/point/b2dpoint.cxx85
-rw-r--r--basegfx/source/point/b2ipoint.cxx76
-rw-r--r--basegfx/source/point/b3dhompoint.cxx44
-rw-r--r--basegfx/source/point/b3dpoint.cxx85
-rw-r--r--basegfx/source/point/b3ipoint.cxx79
-rw-r--r--basegfx/source/point/makefile.mk52
-rw-r--r--basegfx/source/polygon/b2dlinegeometry.cxx725
-rw-r--r--basegfx/source/polygon/b2dpolygon.cxx1652
-rw-r--r--basegfx/source/polygon/b2dpolygonclipper.cxx873
-rw-r--r--basegfx/source/polygon/b2dpolygoncutandtouch.cxx1301
-rw-r--r--basegfx/source/polygon/b2dpolygontools.cxx3613
-rw-r--r--basegfx/source/polygon/b2dpolygontriangulator.cxx466
-rw-r--r--basegfx/source/polygon/b2dpolypolygon.cxx432
-rw-r--r--basegfx/source/polygon/b2dpolypolygoncutter.cxx1014
-rw-r--r--basegfx/source/polygon/b2dpolypolygonrasterconverter.cxx702
-rw-r--r--basegfx/source/polygon/b2dpolypolygontools.cxx585
-rw-r--r--basegfx/source/polygon/b2dsvgpolypolygon.cxx1108
-rw-r--r--basegfx/source/polygon/b2dtrapezoid.cxx1228
-rw-r--r--basegfx/source/polygon/b3dpolygon.cxx1816
-rw-r--r--basegfx/source/polygon/b3dpolygonclipper.cxx574
-rw-r--r--basegfx/source/polygon/b3dpolygontools.cxx1263
-rw-r--r--basegfx/source/polygon/b3dpolypolygon.cxx446
-rw-r--r--basegfx/source/polygon/b3dpolypolygontools.cxx556
-rw-r--r--basegfx/source/polygon/makefile.mk63
-rw-r--r--basegfx/source/range/b1drange.cxx56
-rw-r--r--basegfx/source/range/b2dpolyrange.cxx423
-rw-r--r--basegfx/source/range/b2drange.cxx74
-rw-r--r--basegfx/source/range/b2drangeclipper.cxx950
-rw-r--r--basegfx/source/range/b2xrange.cxx142
-rw-r--r--basegfx/source/range/b3drange.cxx85
-rw-r--r--basegfx/source/range/makefile.mk52
-rw-r--r--basegfx/source/raster/bpixelraster.cxx40
-rw-r--r--basegfx/source/raster/bzpixelraster.cxx40
-rw-r--r--basegfx/source/raster/makefile.mk49
-rw-r--r--basegfx/source/raster/rasterconvert3d.cxx353
-rw-r--r--basegfx/source/tools/b2dclipstate.cxx662
-rwxr-xr-xbasegfx/source/tools/canvastools.cxx674
-rwxr-xr-xbasegfx/source/tools/debugplotter.cxx413
-rw-r--r--basegfx/source/tools/gradienttools.cxx349
-rw-r--r--basegfx/source/tools/keystoplerp.cxx107
-rw-r--r--basegfx/source/tools/liangbarsky.cxx132
-rwxr-xr-xbasegfx/source/tools/makefile.mk51
-rw-r--r--basegfx/source/tools/tools.cxx124
-rwxr-xr-xbasegfx/source/tools/unopolypolygon.cxx486
-rw-r--r--basegfx/source/tuple/b2dtuple.cxx84
-rw-r--r--basegfx/source/tuple/b2i64tuple.cxx44
-rw-r--r--basegfx/source/tuple/b2ituple.cxx153
-rw-r--r--basegfx/source/tuple/b3dtuple.cxx55
-rw-r--r--basegfx/source/tuple/b3i64tuple.cxx43
-rw-r--r--basegfx/source/tuple/b3ituple.cxx43
-rw-r--r--basegfx/source/tuple/makefile.mk52
-rw-r--r--basegfx/source/vector/b2dvector.cxx219
-rw-r--r--basegfx/source/vector/b2ivector.cxx159
-rw-r--r--basegfx/source/vector/b3dvector.cxx115
-rw-r--r--basegfx/source/vector/b3ivector.cxx51
-rw-r--r--basegfx/source/vector/makefile.mk50
-rw-r--r--basegfx/source/workbench/Makefile16
-rw-r--r--basegfx/source/workbench/bezierclip.cxx2057
-rw-r--r--basegfx/source/workbench/bezierclip.hxx93
-rw-r--r--basegfx/source/workbench/convexhull.cxx213
-rw-r--r--basegfx/source/workbench/gauss.hxx172
-rw-r--r--basegfx/test/basegfx1d.cxx73
-rw-r--r--basegfx/test/basegfx2d.cxx1461
-rw-r--r--basegfx/test/basegfx3d.cxx222
-rw-r--r--basegfx/test/basegfxtools.cxx110
-rw-r--r--basegfx/test/boxclipper.cxx419
-rw-r--r--basegfx/test/clipstate.cxx178
-rw-r--r--basegfx/test/export.map34
-rw-r--r--basegfx/test/genericclipper.cxx159
-rw-r--r--basegfx/test/makefile.mk80
-rw-r--r--basegfx/test/testtools.cxx235
-rw-r--r--basegfx/test/testtools.hxx98
-rw-r--r--basegfx/util/basegfx.flt6
-rw-r--r--basegfx/util/makefile.mk85
-rw-r--r--basic/inc/basic/basicmanagerrepository.hxx146
-rw-r--r--basic/inc/basic/basicrt.hxx79
-rw-r--r--basic/inc/basic/basmgr.hxx261
-rw-r--r--basic/inc/basic/basrdll.hxx59
-rw-r--r--basic/inc/basic/dispdefs.hxx38
-rw-r--r--basic/inc/basic/mybasic.hxx94
-rw-r--r--basic/inc/basic/process.hxx63
-rw-r--r--basic/inc/basic/sbdef.hxx110
-rw-r--r--basic/inc/basic/sberrors.hxx562
-rw-r--r--basic/inc/basic/sbmeth.hxx101
-rw-r--r--basic/inc/basic/sbmod.hxx187
-rw-r--r--basic/inc/basic/sbobjmod.hxx119
-rw-r--r--basic/inc/basic/sbprop.hxx80
-rw-r--r--basic/inc/basic/sbstar.hxx220
-rw-r--r--basic/inc/basic/sbstdobj.hxx145
-rw-r--r--basic/inc/basic/sbuno.hxx47
-rw-r--r--basic/inc/basic/sbx.hxx369
-rw-r--r--basic/inc/basic/sbxbase.hxx60
-rw-r--r--basic/inc/basic/sbxcore.hxx181
-rw-r--r--basic/inc/basic/sbxdef.hxx384
-rw-r--r--basic/inc/basic/sbxfac.hxx48
-rw-r--r--basic/inc/basic/sbxform.hxx181
-rw-r--r--basic/inc/basic/sbxmeth.hxx62
-rw-r--r--basic/inc/basic/sbxmstrm.hxx49
-rw-r--r--basic/inc/basic/sbxobj.hxx125
-rw-r--r--basic/inc/basic/sbxprop.hxx61
-rw-r--r--basic/inc/basic/sbxvar.hxx514
-rw-r--r--basic/inc/basic/testtool.hxx160
-rw-r--r--basic/inc/basic/ttglobal.hrc49
-rw-r--r--basic/inc/basic/ttstrhlp.hxx74
-rw-r--r--basic/inc/basrid.hxx45
-rw-r--r--basic/inc/makefile.mk47
-rw-r--r--basic/inc/modsizeexceeded.hxx61
-rw-r--r--basic/inc/pch/precompiled_basic.cxx29
-rw-r--r--basic/inc/pch/precompiled_basic.hxx288
-rw-r--r--basic/inc/sb.hrc47
-rw-r--r--basic/inc/sb.hxx42
-rw-r--r--basic/inc/svtmsg.hrc115
-rw-r--r--basic/inc/testtool.hrc36
-rw-r--r--basic/inc/ttmsg.hrc111
-rwxr-xr-xbasic/prj/build.lst13
-rw-r--r--basic/prj/d.lst59
-rw-r--r--basic/source/app/app.cxx1948
-rw-r--r--basic/source/app/app.hxx196
-rw-r--r--basic/source/app/appbased.cxx299
-rw-r--r--basic/source/app/appbased.hxx74
-rw-r--r--basic/source/app/appedit.cxx301
-rw-r--r--basic/source/app/appedit.hxx70
-rw-r--r--basic/source/app/apperror.cxx115
-rw-r--r--basic/source/app/apperror.hxx49
-rw-r--r--basic/source/app/appwin.cxx657
-rw-r--r--basic/source/app/appwin.hxx138
-rw-r--r--basic/source/app/basic.hrc184
-rw-r--r--basic/source/app/basic.src1472
-rw-r--r--basic/source/app/basicrt.cxx144
-rw-r--r--basic/source/app/basmsg.hrc45
-rw-r--r--basic/source/app/basmsg.src54
-rw-r--r--basic/source/app/brkpnts.cxx386
-rw-r--r--basic/source/app/brkpnts.hxx94
-rw-r--r--basic/source/app/dataedit.hxx116
-rw-r--r--basic/source/app/dialogs.cxx1507
-rw-r--r--basic/source/app/dialogs.hxx371
-rw-r--r--basic/source/app/makefile.mk101
-rw-r--r--basic/source/app/msgedit.cxx999
-rw-r--r--basic/source/app/msgedit.hxx114
-rw-r--r--basic/source/app/mybasic.cxx304
-rw-r--r--basic/source/app/printer.cxx122
-rw-r--r--basic/source/app/printer.hxx52
-rw-r--r--basic/source/app/process.cxx229
-rw-r--r--basic/source/app/processw.cxx282
-rw-r--r--basic/source/app/processw.hxx90
-rw-r--r--basic/source/app/resids.hrc158
-rw-r--r--basic/source/app/status.cxx125
-rw-r--r--basic/source/app/status.hxx54
-rw-r--r--basic/source/app/svtmsg.src339
-rw-r--r--basic/source/app/testbasi.cxx31
-rw-r--r--basic/source/app/testtool.idl47
-rw-r--r--basic/source/app/testtool.src61
-rw-r--r--basic/source/app/textedit.cxx866
-rw-r--r--basic/source/app/textedit.hxx138
-rw-r--r--basic/source/app/ttbasic.cxx36
-rw-r--r--basic/source/app/ttbasic.hxx32
-rw-r--r--basic/source/app/ttmsg.src160
-rw-r--r--basic/source/basmgr/basicmanagerrepository.cxx641
-rw-r--r--basic/source/basmgr/basmgr.cxx2490
-rw-r--r--basic/source/basmgr/makefile.mk46
-rw-r--r--basic/source/classes/disas.cxx687
-rw-r--r--basic/source/classes/errobject.cxx225
-rw-r--r--basic/source/classes/eventatt.cxx647
-rw-r--r--basic/source/classes/image.cxx544
-rw-r--r--basic/source/classes/makefile.mk76
-rw-r--r--basic/source/classes/propacc.cxx430
-rwxr-xr-xbasic/source/classes/sb.cxx2109
-rw-r--r--basic/source/classes/sb.src681
-rw-r--r--basic/source/classes/sbintern.cxx82
-rwxr-xr-xbasic/source/classes/sbunoobj.cxx4434
-rw-r--r--basic/source/classes/sbxmod.cxx2456
-rw-r--r--basic/source/comp/buffer.cxx250
-rw-r--r--basic/source/comp/codegen.cxx539
-rw-r--r--basic/source/comp/dim.cxx1203
-rw-r--r--basic/source/comp/exprgen.cxx270
-rw-r--r--basic/source/comp/exprnode.cxx488
-rw-r--r--basic/source/comp/exprtree.cxx1136
-rw-r--r--basic/source/comp/io.cxx358
-rw-r--r--basic/source/comp/loops.cxx558
-rw-r--r--basic/source/comp/makefile.mk60
-rw-r--r--basic/source/comp/parser.cxx863
-rwxr-xr-xbasic/source/comp/sbcomp.cxx477
-rw-r--r--basic/source/comp/scanner.cxx582
-rw-r--r--basic/source/comp/symtbl.cxx536
-rw-r--r--basic/source/comp/token.cxx714
-rw-r--r--basic/source/inc/buffer.hxx63
-rw-r--r--basic/source/inc/codegen.hxx92
-rw-r--r--basic/source/inc/collelem.hxx47
-rw-r--r--basic/source/inc/disas.hxx72
-rw-r--r--basic/source/inc/dlgcont.hxx175
-rw-r--r--basic/source/inc/errobject.hxx52
-rw-r--r--basic/source/inc/expr.hxx266
-rw-r--r--basic/source/inc/filefmt.hxx178
-rw-r--r--basic/source/inc/image.hxx110
-rw-r--r--basic/source/inc/iosys.hxx113
-rw-r--r--basic/source/inc/namecont.hxx766
-rw-r--r--basic/source/inc/object.hxx100
-rw-r--r--basic/source/inc/opcodes.hxx172
-rw-r--r--basic/source/inc/parser.hxx153
-rw-r--r--basic/source/inc/propacc.hxx203
-rw-r--r--basic/source/inc/runtime.hxx530
-rw-r--r--basic/source/inc/sbcomp.hxx38
-rw-r--r--basic/source/inc/sbintern.hxx150
-rw-r--r--basic/source/inc/sbjsmeth.hxx53
-rw-r--r--basic/source/inc/sbjsmod.hxx50
-rwxr-xr-xbasic/source/inc/sbtrace.hxx42
-rw-r--r--basic/source/inc/sbunoobj.hxx326
-rw-r--r--basic/source/inc/scanner.hxx146
-rw-r--r--basic/source/inc/scriptcont.hxx199
-rw-r--r--basic/source/inc/stdobj.hxx51
-rw-r--r--basic/source/inc/symtbl.hxx250
-rw-r--r--basic/source/inc/token.hxx183
-rw-r--r--basic/source/runtime/basrdll.cxx104
-rw-r--r--basic/source/runtime/ddectrl.cxx192
-rw-r--r--basic/source/runtime/ddectrl.hxx64
-rw-r--r--basic/source/runtime/dllmgr.cxx738
-rw-r--r--basic/source/runtime/dllmgr.hxx60
-rw-r--r--basic/source/runtime/inputbox.cxx197
-rw-r--r--basic/source/runtime/iosys.cxx1048
-rw-r--r--basic/source/runtime/makefile.mk71
-rw-r--r--basic/source/runtime/methods.cxx4583
-rw-r--r--basic/source/runtime/methods1.cxx2621
-rw-r--r--basic/source/runtime/props.cxx776
-rw-r--r--basic/source/runtime/rtlproto.hxx349
-rwxr-xr-xbasic/source/runtime/runtime.cxx1268
-rw-r--r--basic/source/runtime/stdobj.cxx788
-rw-r--r--basic/source/runtime/stdobj1.cxx551
-rw-r--r--basic/source/runtime/step0.cxx1332
-rw-r--r--basic/source/runtime/step1.cxx574
-rwxr-xr-xbasic/source/runtime/step2.cxx1261
-rw-r--r--basic/source/runtime/wnt-mingw.s53
-rw-r--r--basic/source/runtime/wnt.asm56
-rw-r--r--basic/source/sample/collelem.cxx79
-rw-r--r--basic/source/sample/makefile.mk58
-rw-r--r--basic/source/sample/object.cxx278
-rw-r--r--basic/source/sample/sample.bas39
-rw-r--r--basic/source/sbx/format.src85
-rw-r--r--basic/source/sbx/makefile.mk77
-rw-r--r--basic/source/sbx/sbxarray.cxx857
-rw-r--r--basic/source/sbx/sbxbase.cxx462
-rw-r--r--basic/source/sbx/sbxbool.cxx252
-rw-r--r--basic/source/sbx/sbxbyte.cxx329
-rw-r--r--basic/source/sbx/sbxchar.cxx324
-rw-r--r--basic/source/sbx/sbxcoll.cxx301
-rw-r--r--basic/source/sbx/sbxconv.hxx151
-rw-r--r--basic/source/sbx/sbxcurr.cxx395
-rw-r--r--basic/source/sbx/sbxdate.cxx414
-rw-r--r--basic/source/sbx/sbxdbl.cxx306
-rw-r--r--basic/source/sbx/sbxdec.cxx797
-rw-r--r--basic/source/sbx/sbxdec.hxx122
-rw-r--r--basic/source/sbx/sbxexec.cxx401
-rw-r--r--basic/source/sbx/sbxform.cxx1168
-rw-r--r--basic/source/sbx/sbxint.cxx963
-rw-r--r--basic/source/sbx/sbxlng.cxx341
-rw-r--r--basic/source/sbx/sbxmstrm.cxx39
-rw-r--r--basic/source/sbx/sbxobj.cxx1145
-rw-r--r--basic/source/sbx/sbxres.cxx91
-rw-r--r--basic/source/sbx/sbxres.hxx87
-rw-r--r--basic/source/sbx/sbxscan.cxx968
-rw-r--r--basic/source/sbx/sbxsng.cxx359
-rw-r--r--basic/source/sbx/sbxstr.cxx319
-rw-r--r--basic/source/sbx/sbxuint.cxx331
-rw-r--r--basic/source/sbx/sbxulng.cxx321
-rw-r--r--basic/source/sbx/sbxvals.cxx109
-rw-r--r--basic/source/sbx/sbxvalue.cxx1858
-rw-r--r--basic/source/sbx/sbxvar.cxx644
-rw-r--r--basic/source/uno/dlgcont.cxx658
-rw-r--r--basic/source/uno/makefile.mk49
-rw-r--r--basic/source/uno/modsizeexceeded.cxx68
-rw-r--r--basic/source/uno/namecont.cxx3506
-rw-r--r--basic/source/uno/sbmodule.cxx44
-rw-r--r--basic/source/uno/sbmodule.hxx45
-rw-r--r--basic/source/uno/sbservices.cxx63
-rw-r--r--basic/source/uno/scriptcont.cxx1328
-rw-r--r--basic/util/makefile.mk146
-rw-r--r--basic/win/res/basic.icobin0 -> 766 bytes
-rw-r--r--basic/win/res/testtool.icobin0 -> 766 bytes
-rw-r--r--basic/win/res/work.icobin0 -> 766 bytes
-rw-r--r--basic/workben/basmgr.src31
-rw-r--r--basic/workben/makefile.mk89
-rw-r--r--basic/workben/mgrtest.cxx591
-rw-r--r--beanshell/bsh-2.0b1-src.patch83
-rw-r--r--beanshell/makefile.mk58
-rw-r--r--beanshell/prj/build.lst3
-rw-r--r--beanshell/prj/d.lst1
-rw-r--r--berkeleydb/db-4.7.25-mingw.patch348
-rw-r--r--berkeleydb/db-4.7.25.patch1048
-rw-r--r--berkeleydb/makefile.mk182
-rw-r--r--berkeleydb/prj/build.lst3
-rw-r--r--berkeleydb/prj/d.lst15
-rw-r--r--boost/README.Regex_Experimental30
-rw-r--r--boost/Regex_Experimental.tar.gzbin0 -> 3463 bytes
-rw-r--r--boost/boost_1_39_0.patch287
-rw-r--r--boost/makefile.mk107
-rw-r--r--boost/prj/build.lst3
-rw-r--r--boost/prj/d.lst312
-rw-r--r--bootstrap.184
-rw-r--r--bridges/inc/bridges/cpp_uno/bridge.hxx503
-rw-r--r--bridges/inc/bridges/cpp_uno/shared/arraypointer.hxx55
-rw-r--r--bridges/inc/bridges/cpp_uno/shared/bridge.hxx128
-rw-r--r--bridges/inc/bridges/cpp_uno/shared/cppinterfaceproxy.hxx106
-rw-r--r--bridges/inc/bridges/cpp_uno/shared/types.hxx77
-rw-r--r--bridges/inc/bridges/cpp_uno/shared/unointerfaceproxy.hxx116
-rw-r--r--bridges/inc/bridges/cpp_uno/shared/vtablefactory.hxx214
-rw-r--r--bridges/inc/bridges/cpp_uno/shared/vtables.hxx108
-rw-r--r--bridges/inc/bridges/cpp_uno/type_misc.hxx129
-rw-r--r--bridges/inc/bridges/remote/bridgeimpl.hxx94
-rw-r--r--bridges/inc/bridges/remote/connection.h67
-rw-r--r--bridges/inc/bridges/remote/context.h260
-rw-r--r--bridges/inc/bridges/remote/counter.hxx57
-rw-r--r--bridges/inc/bridges/remote/helper.hxx68
-rw-r--r--bridges/inc/bridges/remote/mapping.hxx69
-rw-r--r--bridges/inc/bridges/remote/proxy.hxx91
-rw-r--r--bridges/inc/bridges/remote/remote.h93
-rw-r--r--bridges/inc/bridges/remote/remote.hxx73
-rw-r--r--bridges/inc/bridges/remote/stub.hxx64
-rw-r--r--bridges/inc/makefile.mk47
-rw-r--r--bridges/inc/pch/precompiled_bridges.cxx29
-rw-r--r--bridges/inc/pch/precompiled_bridges.hxx152
-rw-r--r--bridges/prj/build.lst36
-rw-r--r--bridges/prj/d.lst28
-rw-r--r--bridges/source/bridge_exports.map8
-rw-r--r--bridges/source/cpp_uno/cc50_solaris_intel/call.s248
-rw-r--r--bridges/source/cpp_uno/cc50_solaris_intel/cc50_solaris_intel.hxx73
-rw-r--r--bridges/source/cpp_uno/cc50_solaris_intel/cpp2uno.cxx527
-rw-r--r--bridges/source/cpp_uno/cc50_solaris_intel/except.cxx449
-rw-r--r--bridges/source/cpp_uno/cc50_solaris_intel/hash.cxx263
-rw-r--r--bridges/source/cpp_uno/cc50_solaris_intel/makefile.mk75
-rw-r--r--bridges/source/cpp_uno/cc50_solaris_intel/uno2cpp.cxx418
-rw-r--r--bridges/source/cpp_uno/cc50_solaris_sparc/call.s199
-rw-r--r--bridges/source/cpp_uno/cc50_solaris_sparc/cc50_solaris_sparc.hxx87
-rw-r--r--bridges/source/cpp_uno/cc50_solaris_sparc/cpp2uno.cxx530
-rw-r--r--bridges/source/cpp_uno/cc50_solaris_sparc/except.cxx445
-rw-r--r--bridges/source/cpp_uno/cc50_solaris_sparc/flushcode.hxx48
-rw-r--r--bridges/source/cpp_uno/cc50_solaris_sparc/hash.cxx264
-rw-r--r--bridges/source/cpp_uno/cc50_solaris_sparc/makefile.mk80
-rw-r--r--bridges/source/cpp_uno/cc50_solaris_sparc/uno2cpp.cxx396
-rw-r--r--bridges/source/cpp_uno/cc5_solaris_sparc64/callvirtualmethod.hxx36
-rw-r--r--bridges/source/cpp_uno/cc5_solaris_sparc64/callvirtualmethod.s59
-rw-r--r--bridges/source/cpp_uno/cc5_solaris_sparc64/cpp2uno.cxx611
-rw-r--r--bridges/source/cpp_uno/cc5_solaris_sparc64/exceptions.cxx459
-rw-r--r--bridges/source/cpp_uno/cc5_solaris_sparc64/exceptions.hxx72
-rw-r--r--bridges/source/cpp_uno/cc5_solaris_sparc64/flushcode.hxx48
-rw-r--r--bridges/source/cpp_uno/cc5_solaris_sparc64/fp.hxx113
-rw-r--r--bridges/source/cpp_uno/cc5_solaris_sparc64/fp.s602
-rw-r--r--bridges/source/cpp_uno/cc5_solaris_sparc64/isdirectreturntype.cxx81
-rw-r--r--bridges/source/cpp_uno/cc5_solaris_sparc64/isdirectreturntype.hxx41
-rw-r--r--bridges/source/cpp_uno/cc5_solaris_sparc64/makefile.mk61
-rw-r--r--bridges/source/cpp_uno/cc5_solaris_sparc64/uno2cpp.cxx509
-rw-r--r--bridges/source/cpp_uno/cc5_solaris_sparc64/vtableslotcall.hxx35
-rw-r--r--bridges/source/cpp_uno/cc5_solaris_sparc64/vtableslotcall.s51
-rw-r--r--bridges/source/cpp_uno/gcc3_freebsd_intel/call.s268
-rw-r--r--bridges/source/cpp_uno/gcc3_freebsd_intel/cpp2uno.cxx490
-rw-r--r--bridges/source/cpp_uno/gcc3_freebsd_intel/except.cxx338
-rw-r--r--bridges/source/cpp_uno/gcc3_freebsd_intel/makefile.mk81
-rw-r--r--bridges/source/cpp_uno/gcc3_freebsd_intel/share.hxx90
-rw-r--r--bridges/source/cpp_uno/gcc3_freebsd_intel/uno2cpp.cxx444
-rw-r--r--bridges/source/cpp_uno/gcc3_freebsd_x86-64/abi.cxx803
-rw-r--r--bridges/source/cpp_uno/gcc3_freebsd_x86-64/abi.hxx67
-rw-r--r--bridges/source/cpp_uno/gcc3_freebsd_x86-64/call.s93
-rw-r--r--bridges/source/cpp_uno/gcc3_freebsd_x86-64/cpp2uno.cxx541
-rw-r--r--bridges/source/cpp_uno/gcc3_freebsd_x86-64/except.cxx338
-rw-r--r--bridges/source/cpp_uno/gcc3_freebsd_x86-64/makefile.mk80
-rw-r--r--bridges/source/cpp_uno/gcc3_freebsd_x86-64/share.hxx90
-rw-r--r--bridges/source/cpp_uno/gcc3_freebsd_x86-64/uno2cpp.cxx558
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_alpha/cpp2uno.cxx676
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_alpha/except.cxx287
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_alpha/makefile.mk77
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_alpha/share.hxx98
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_alpha/uno2cpp.cxx532
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_arm/armhelper.S38
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_arm/cpp2uno.cxx550
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_arm/except.cxx341
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_arm/makefile.mk84
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_arm/share.hxx100
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_arm/uno2cpp.cxx669
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_hppa/call.cxx142
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_hppa/cpp2uno.cxx725
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_hppa/except.cxx334
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_hppa/makefile.mk82
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_hppa/share.hxx99
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_hppa/uno2cpp.cxx521
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_ia64/call.s20
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_ia64/cpp2uno.cxx684
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_ia64/except.cxx287
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_ia64/makefile.mk83
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_ia64/share.hxx130
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_ia64/uno2cpp.cxx690
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_intel/call.s274
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_intel/cpp2uno.cxx489
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_intel/except.cxx330
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_intel/makefile.mk81
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_intel/share.hxx90
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_intel/uno2cpp.cxx451
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_m68k/cpp2uno.cxx536
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_m68k/except.cxx334
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_m68k/makefile.mk80
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_m68k/share.hxx91
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_m68k/uno2cpp.cxx493
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_mips/cpp2uno.cxx803
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_mips/except.cxx325
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_mips/makefile.mk81
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_mips/share.hxx91
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_mips/uno2cpp.cxx597
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_powerpc/cpp2uno.cxx795
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_powerpc/except.cxx287
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_powerpc/makefile.mk80
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_powerpc/share.hxx91
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_powerpc/uno2cpp.cxx672
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_powerpc64/cpp2uno.cxx722
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_powerpc64/except.cxx287
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_powerpc64/makefile.mk79
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_powerpc64/share.hxx96
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_powerpc64/uno2cpp.cxx600
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_s390/cpp2uno.cxx695
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_s390/except.cxx287
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_s390/makefile.mk77
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_s390/share.hxx92
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_s390/uno2cpp.cxx635
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_s390x/cpp2uno.cxx657
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_s390x/except.cxx287
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_s390x/makefile.mk77
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_s390x/share.hxx98
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_s390x/uno2cpp.cxx537
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_sparc/call.s10
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_sparc/cpp2uno.cxx575
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_sparc/except.cxx328
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_sparc/makefile.mk81
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_sparc/share.hxx97
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_sparc/uno2cpp.cxx600
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_x86-64/abi.cxx796
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_x86-64/abi.hxx67
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_x86-64/call.s96
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_x86-64/cpp2uno.cxx520
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_x86-64/except.cxx330
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_x86-64/makefile.mk80
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_x86-64/share.hxx90
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_x86-64/uno2cpp.cxx571
-rw-r--r--bridges/source/cpp_uno/gcc3_macosx_intel/call.s327
-rw-r--r--bridges/source/cpp_uno/gcc3_macosx_intel/cpp2uno.cxx519
-rw-r--r--bridges/source/cpp_uno/gcc3_macosx_intel/except.cxx329
-rw-r--r--bridges/source/cpp_uno/gcc3_macosx_intel/makefile.mk76
-rw-r--r--bridges/source/cpp_uno/gcc3_macosx_intel/share.hxx92
-rw-r--r--bridges/source/cpp_uno/gcc3_macosx_intel/uno2cpp.cxx495
-rw-r--r--bridges/source/cpp_uno/gcc3_macosx_powerpc/cpp2uno.cxx730
-rw-r--r--bridges/source/cpp_uno/gcc3_macosx_powerpc/except.cxx286
-rw-r--r--bridges/source/cpp_uno/gcc3_macosx_powerpc/makefile.mk78
-rw-r--r--bridges/source/cpp_uno/gcc3_macosx_powerpc/share.hxx91
-rw-r--r--bridges/source/cpp_uno/gcc3_macosx_powerpc/uno2cpp.cxx634
-rw-r--r--bridges/source/cpp_uno/gcc3_netbsd_intel/cpp2uno.cxx563
-rw-r--r--bridges/source/cpp_uno/gcc3_netbsd_intel/except.cxx331
-rw-r--r--bridges/source/cpp_uno/gcc3_netbsd_intel/makefile.mk75
-rw-r--r--bridges/source/cpp_uno/gcc3_netbsd_intel/share.hxx86
-rw-r--r--bridges/source/cpp_uno/gcc3_netbsd_intel/uno2cpp.cxx433
-rw-r--r--bridges/source/cpp_uno/gcc3_os2_intel/cpp2uno.cxx525
-rw-r--r--bridges/source/cpp_uno/gcc3_os2_intel/defs/gcc3_uno.def915
-rw-r--r--bridges/source/cpp_uno/gcc3_os2_intel/except.cxx349
-rw-r--r--bridges/source/cpp_uno/gcc3_os2_intel/makefile.mk73
-rw-r--r--bridges/source/cpp_uno/gcc3_os2_intel/share.hxx90
-rw-r--r--bridges/source/cpp_uno/gcc3_os2_intel/uno2cpp.cxx451
-rw-r--r--bridges/source/cpp_uno/gcc3_solaris_intel/cpp2uno.cxx523
-rw-r--r--bridges/source/cpp_uno/gcc3_solaris_intel/except.cxx329
-rw-r--r--bridges/source/cpp_uno/gcc3_solaris_intel/makefile.mk73
-rw-r--r--bridges/source/cpp_uno/gcc3_solaris_intel/share.hxx90
-rw-r--r--bridges/source/cpp_uno/gcc3_solaris_intel/uno2cpp.cxx427
-rw-r--r--bridges/source/cpp_uno/gcc3_solaris_sparc/cpp2uno.cxx564
-rw-r--r--bridges/source/cpp_uno/gcc3_solaris_sparc/except.cxx327
-rw-r--r--bridges/source/cpp_uno/gcc3_solaris_sparc/makefile.mk77
-rw-r--r--bridges/source/cpp_uno/gcc3_solaris_sparc/share.hxx97
-rw-r--r--bridges/source/cpp_uno/gcc3_solaris_sparc/uno2cpp.cxx595
-rw-r--r--bridges/source/cpp_uno/mingw_intel/call.s261
-rw-r--r--bridges/source/cpp_uno/mingw_intel/cpp2uno.cxx518
-rw-r--r--bridges/source/cpp_uno/mingw_intel/dllinit.cxx56
-rw-r--r--bridges/source/cpp_uno/mingw_intel/except.cxx314
-rw-r--r--bridges/source/cpp_uno/mingw_intel/makefile.mk91
-rw-r--r--bridges/source/cpp_uno/mingw_intel/share.hxx90
-rw-r--r--bridges/source/cpp_uno/mingw_intel/smallstruct.cxx79
-rw-r--r--bridges/source/cpp_uno/mingw_intel/smallstruct.hxx35
-rw-r--r--bridges/source/cpp_uno/mingw_intel/uno2cpp.cxx500
-rw-r--r--bridges/source/cpp_uno/msvc_win32_intel/cpp2uno.cxx488
-rw-r--r--bridges/source/cpp_uno/msvc_win32_intel/dllinit.cxx58
-rw-r--r--bridges/source/cpp_uno/msvc_win32_intel/except.cxx632
-rw-r--r--bridges/source/cpp_uno/msvc_win32_intel/makefile.mk83
-rw-r--r--bridges/source/cpp_uno/msvc_win32_intel/msci.hxx57
-rw-r--r--bridges/source/cpp_uno/msvc_win32_intel/uno2cpp.cxx465
-rw-r--r--bridges/source/cpp_uno/shared/bridge.cxx226
-rw-r--r--bridges/source/cpp_uno/shared/component.cxx272
-rw-r--r--bridges/source/cpp_uno/shared/component.hxx39
-rw-r--r--bridges/source/cpp_uno/shared/cppinterfaceproxy.cxx205
-rw-r--r--bridges/source/cpp_uno/shared/guardedarray.hxx52
-rw-r--r--bridges/source/cpp_uno/shared/makefile.mk53
-rw-r--r--bridges/source/cpp_uno/shared/types.cxx126
-rw-r--r--bridges/source/cpp_uno/shared/unointerfaceproxy.cxx142
-rw-r--r--bridges/source/cpp_uno/shared/vtablefactory.cxx382
-rw-r--r--bridges/source/cpp_uno/shared/vtables.cxx154
-rw-r--r--bridges/source/jni_uno/java/com/sun/star/bridges/jni_uno/JNI_info_holder.java52
-rw-r--r--bridges/source/jni_uno/java/com/sun/star/bridges/jni_uno/JNI_proxy.java218
-rw-r--r--bridges/source/jni_uno/java/com/sun/star/bridges/jni_uno/makefile.mk53
-rw-r--r--bridges/source/jni_uno/java/com/sun/star/bridges/jni_uno/manifest1
-rw-r--r--bridges/source/jni_uno/java_uno.map27
-rw-r--r--bridges/source/jni_uno/jni_base.h292
-rw-r--r--bridges/source/jni_uno/jni_bridge.cxx569
-rw-r--r--bridges/source/jni_uno/jni_bridge.h124
-rw-r--r--bridges/source/jni_uno/jni_data.cxx2576
-rw-r--r--bridges/source/jni_uno/jni_helper.h162
-rw-r--r--bridges/source/jni_uno/jni_info.cxx996
-rw-r--r--bridges/source/jni_uno/jni_info.h375
-rw-r--r--bridges/source/jni_uno/jni_java2uno.cxx704
-rw-r--r--bridges/source/jni_uno/jni_uno2java.cxx873
-rw-r--r--bridges/source/jni_uno/makefile.mk85
-rw-r--r--bridges/source/jni_uno/nativethreadpool.cxx230
-rw-r--r--bridges/source/remote/context/context.cxx499
-rw-r--r--bridges/source/remote/context/exports.dxp5
-rw-r--r--bridges/source/remote/context/makefile.mk65
-rwxr-xr-xbridges/source/remote/context/rmcxt.map10
-rw-r--r--bridges/source/remote/idl/corba.idl88
-rw-r--r--bridges/source/remote/static/helper.cxx209
-rw-r--r--bridges/source/remote/static/makefile.mk61
-rw-r--r--bridges/source/remote/static/mapping.cxx218
-rw-r--r--bridges/source/remote/static/proxy.cxx338
-rw-r--r--bridges/source/remote/static/remote.cxx161
-rw-r--r--bridges/source/remote/static/remote_types.cxx96
-rw-r--r--bridges/source/remote/static/remote_types.hxx89
-rw-r--r--bridges/source/remote/static/stub.cxx336
-rw-r--r--bridges/source/remote/urp/makefile.mk78
-rw-r--r--bridges/source/remote/urp/urp_bridgeimpl.cxx250
-rw-r--r--bridges/source/remote/urp/urp_bridgeimpl.hxx133
-rw-r--r--bridges/source/remote/urp/urp_cache.h57
-rw-r--r--bridges/source/remote/urp/urp_cache.hxx160
-rw-r--r--bridges/source/remote/urp/urp_dispatch.cxx116
-rw-r--r--bridges/source/remote/urp/urp_dispatch.hxx78
-rw-r--r--bridges/source/remote/urp/urp_environment.cxx551
-rw-r--r--bridges/source/remote/urp/urp_job.cxx939
-rw-r--r--bridges/source/remote/urp/urp_job.hxx378
-rw-r--r--bridges/source/remote/urp/urp_log.cxx147
-rw-r--r--bridges/source/remote/urp/urp_log.hxx50
-rw-r--r--bridges/source/remote/urp/urp_marshal.cxx235
-rw-r--r--bridges/source/remote/urp/urp_marshal.hxx343
-rw-r--r--bridges/source/remote/urp/urp_marshal_decl.hxx106
-rw-r--r--bridges/source/remote/urp/urp_property.hxx93
-rw-r--r--bridges/source/remote/urp/urp_propertyobject.cxx793
-rw-r--r--bridges/source/remote/urp/urp_propertyobject.hxx108
-rw-r--r--bridges/source/remote/urp/urp_reader.cxx832
-rw-r--r--bridges/source/remote/urp/urp_reader.hxx78
-rw-r--r--bridges/source/remote/urp/urp_replycontainer.hxx75
-rw-r--r--bridges/source/remote/urp/urp_threadid.cxx48
-rw-r--r--bridges/source/remote/urp/urp_threadid.hxx59
-rw-r--r--bridges/source/remote/urp/urp_unmarshal.cxx707
-rw-r--r--bridges/source/remote/urp/urp_unmarshal.hxx280
-rw-r--r--bridges/source/remote/urp/urp_writer.cxx269
-rw-r--r--bridges/source/remote/urp/urp_writer.hxx83
-rw-r--r--bridges/test/com/sun/star/lib/TestBed.java232
-rw-r--r--bridges/test/com/sun/star/lib/makefile.mk36
-rw-r--r--bridges/test/com/sun/star/lib/uno/bridges/java_remote/Bug107753_Test.java394
-rw-r--r--bridges/test/com/sun/star/lib/uno/bridges/java_remote/Bug108825_Test.java163
-rw-r--r--bridges/test/com/sun/star/lib/uno/bridges/java_remote/Bug110892_Test.java124
-rw-r--r--bridges/test/com/sun/star/lib/uno/bridges/java_remote/Bug111153_Test.java103
-rw-r--r--bridges/test/com/sun/star/lib/uno/bridges/java_remote/Bug114133_Test.java76
-rw-r--r--bridges/test/com/sun/star/lib/uno/bridges/java_remote/Bug51323_Test.java84
-rw-r--r--bridges/test/com/sun/star/lib/uno/bridges/java_remote/Bug92174_Test.java99
-rw-r--r--bridges/test/com/sun/star/lib/uno/bridges/java_remote/Bug97697_Test.java105
-rw-r--r--bridges/test/com/sun/star/lib/uno/bridges/java_remote/Bug98508_Test.idl37
-rw-r--r--bridges/test/com/sun/star/lib/uno/bridges/java_remote/Bug98508_Test.java104
-rwxr-xr-xbridges/test/com/sun/star/lib/uno/bridges/java_remote/MethodIdTest.java473
-rw-r--r--bridges/test/com/sun/star/lib/uno/bridges/java_remote/PolyStructTest.idl52
-rw-r--r--bridges/test/com/sun/star/lib/uno/bridges/java_remote/PolyStructTest.java260
-rw-r--r--bridges/test/com/sun/star/lib/uno/bridges/java_remote/StopMessageDispatcherTest.java108
-rw-r--r--bridges/test/com/sun/star/lib/uno/bridges/java_remote/makefile.mk51
-rw-r--r--bridges/test/inter_libs_exc/inter.cxx66
-rw-r--r--bridges/test/inter_libs_exc/makefile.mk80
-rw-r--r--bridges/test/inter_libs_exc/share.h7
-rw-r--r--bridges/test/inter_libs_exc/starter.cxx65
-rw-r--r--bridges/test/inter_libs_exc/starter.map7
-rw-r--r--bridges/test/inter_libs_exc/thrower.cxx48
-rw-r--r--bridges/test/inter_libs_exc/thrower.map7
-rw-r--r--bridges/test/java_uno/acquire/TestAcquire.java304
-rw-r--r--bridges/test/java_uno/acquire/makefile.mk117
-rw-r--r--bridges/test/java_uno/acquire/readme.txt21
-rw-r--r--bridges/test/java_uno/acquire/testacquire.cxx574
-rw-r--r--bridges/test/java_uno/acquire/types.idl68
-rw-r--r--bridges/test/java_uno/any/TestAny.java2267
-rw-r--r--bridges/test/java_uno/any/TestJni.java48
-rw-r--r--bridges/test/java_uno/any/TestRemote.java64
-rw-r--r--bridges/test/java_uno/any/makefile.mk127
-rw-r--r--bridges/test/java_uno/any/test_javauno_any.map6
-rw-r--r--bridges/test/java_uno/any/transport.cxx108
-rw-r--r--bridges/test/java_uno/any/types.idl42
-rw-r--r--bridges/test/java_uno/equals/TestEquals.java1304
-rw-r--r--bridges/test/java_uno/equals/makefile.mk96
-rw-r--r--bridges/test/java_uno/equals/testequals.cxx232
-rw-r--r--bridges/test/java_uno/equals/types.idl47
-rw-r--r--bridges/test/java_uno/nativethreadpool/Relay.java125
-rw-r--r--bridges/test/java_uno/nativethreadpool/makefile.mk121
-rw-r--r--bridges/test/java_uno/nativethreadpool/readme39
-rw-r--r--bridges/test/java_uno/nativethreadpool/relay.manifest2
-rw-r--r--bridges/test/java_uno/nativethreadpool/testnativethreadpoolclient.cxx184
-rw-r--r--bridges/test/java_uno/nativethreadpool/testnativethreadpoolserver.cxx146
-rw-r--r--bridges/test/java_uno/nativethreadpool/types.idl40
-rw-r--r--bridges/test/java_uno/nativethreadpool/version.map35
-rw-r--r--bridges/test/makefile.mk175
-rw-r--r--bridges/test/performance/makefile.mk62
-rw-r--r--bridges/test/performance/testperformance.cxx190
-rw-r--r--bridges/test/test_bridge.idl82
-rw-r--r--bridges/test/testclient.cxx247
-rw-r--r--bridges/test/testclient.java156
-rw-r--r--bridges/test/testcomp.cxx799
-rw-r--r--bridges/test/testcomp.h156
-rw-r--r--bridges/test/testoffice.cxx279
-rw-r--r--bridges/test/testsameprocess.cxx215
-rw-r--r--bridges/test/testserver.cxx253
-rw-r--r--bridges/unotypes/makefile.mk63
-rw-r--r--bridges/version.mk40
-rw-r--r--cairo/cairo-1.8.0.patch251
-rwxr-xr-xcairo/cairo/dummy_pkg_config3
-rw-r--r--cairo/cairo/makefile.mk202
-rw-r--r--cairo/pixman-0.12.0.patch25
-rw-r--r--cairo/pixman/makefile.mk164
-rw-r--r--cairo/prj/build.lst4
-rw-r--r--cairo/prj/d.lst12
-rw-r--r--canvas/inc/canvas/base/basemutexhelper.hxx69
-rw-r--r--canvas/inc/canvas/base/bitmapcanvasbase.hxx134
-rw-r--r--canvas/inc/canvas/base/bufferedgraphicdevicebase.hxx293
-rw-r--r--canvas/inc/canvas/base/cachedprimitivebase.hxx122
-rw-r--r--canvas/inc/canvas/base/canvasbase.hxx483
-rw-r--r--canvas/inc/canvas/base/canvascustomspritebase.hxx277
-rw-r--r--canvas/inc/canvas/base/canvascustomspritehelper.hxx293
-rw-r--r--canvas/inc/canvas/base/doublebitmapbase.hxx151
-rw-r--r--canvas/inc/canvas/base/floatbitmapbase.hxx155
-rw-r--r--canvas/inc/canvas/base/graphicdevicebase.hxx391
-rw-r--r--canvas/inc/canvas/base/integerbitmapbase.hxx151
-rw-r--r--canvas/inc/canvas/base/sprite.hxx119
-rw-r--r--canvas/inc/canvas/base/spritecanvasbase.hxx202
-rw-r--r--canvas/inc/canvas/base/spritesurface.hxx73
-rwxr-xr-xcanvas/inc/canvas/canvastools.hxx661
-rw-r--r--canvas/inc/canvas/debug.hxx65
-rw-r--r--canvas/inc/canvas/elapsedtime.hxx182
-rw-r--r--canvas/inc/canvas/parametricpolypolygon.hxx172
-rw-r--r--canvas/inc/canvas/prioritybooster.hxx65
-rw-r--r--canvas/inc/canvas/propertysethelper.hxx161
-rw-r--r--canvas/inc/canvas/rendering/bitmap.hxx320
-rw-r--r--canvas/inc/canvas/rendering/icachedprimitive.hxx66
-rw-r--r--canvas/inc/canvas/rendering/icolorbuffer.hxx94
-rw-r--r--canvas/inc/canvas/rendering/irendermodule.hxx149
-rw-r--r--canvas/inc/canvas/rendering/isurface.hxx88
-rw-r--r--canvas/inc/canvas/rendering/isurfaceproxy.hxx113
-rw-r--r--canvas/inc/canvas/rendering/isurfaceproxymanager.hxx79
-rw-r--r--canvas/inc/canvas/spriteredrawmanager.hxx434
-rw-r--r--canvas/inc/canvas/vclwrapper.hxx149
-rw-r--r--canvas/inc/canvas/verbosetrace.hxx38
-rw-r--r--canvas/inc/canvas/verifyinput.hxx720
-rw-r--r--canvas/inc/makefile.mk47
-rw-r--r--canvas/inc/pch/precompiled_canvas.cxx29
-rw-r--r--canvas/inc/pch/precompiled_canvas.hxx32
-rw-r--r--canvas/overview.txt50
-rw-r--r--canvas/prj/build.lst10
-rw-r--r--canvas/prj/d.lst26
-rw-r--r--canvas/source/cairo/cairo_cachedbitmap.cxx90
-rw-r--r--canvas/source/cairo/cairo_cachedbitmap.hxx67
-rw-r--r--canvas/source/cairo/cairo_cairo.cxx64
-rw-r--r--canvas/source/cairo/cairo_cairo.hxx97
-rw-r--r--canvas/source/cairo/cairo_canvas.cxx195
-rw-r--r--canvas/source/cairo/cairo_canvas.hxx161
-rw-r--r--canvas/source/cairo/cairo_canvasbitmap.cxx286
-rw-r--r--canvas/source/cairo/cairo_canvasbitmap.hxx138
-rw-r--r--canvas/source/cairo/cairo_canvascustomsprite.cxx175
-rw-r--r--canvas/source/cairo/cairo_canvascustomsprite.hxx156
-rw-r--r--canvas/source/cairo/cairo_canvasfont.cxx193
-rw-r--r--canvas/source/cairo/cairo_canvasfont.hxx96
-rw-r--r--canvas/source/cairo/cairo_canvashelper.cxx1995
-rw-r--r--canvas/source/cairo/cairo_canvashelper.hxx335
-rw-r--r--canvas/source/cairo/cairo_canvashelper_text.cxx398
-rw-r--r--canvas/source/cairo/cairo_canvashelper_texturefill.cxx144
-rw-r--r--canvas/source/cairo/cairo_devicehelper.cxx302
-rw-r--r--canvas/source/cairo/cairo_devicehelper.hxx143
-rw-r--r--canvas/source/cairo/cairo_quartz_cairo.cxx347
-rw-r--r--canvas/source/cairo/cairo_quartz_cairo.hxx73
-rw-r--r--canvas/source/cairo/cairo_repainttarget.hxx60
-rw-r--r--canvas/source/cairo/cairo_services.cxx83
-rw-r--r--canvas/source/cairo/cairo_sprite.hxx71
-rw-r--r--canvas/source/cairo/cairo_spritecanvas.cxx232
-rw-r--r--canvas/source/cairo/cairo_spritecanvas.hxx174
-rw-r--r--canvas/source/cairo/cairo_spritecanvashelper.cxx544
-rw-r--r--canvas/source/cairo/cairo_spritecanvashelper.hxx147
-rw-r--r--canvas/source/cairo/cairo_spritedevicehelper.cxx201
-rw-r--r--canvas/source/cairo/cairo_spritedevicehelper.hxx95
-rw-r--r--canvas/source/cairo/cairo_spritehelper.cxx183
-rw-r--r--canvas/source/cairo/cairo_spritehelper.hxx115
-rw-r--r--canvas/source/cairo/cairo_spritesurface.hxx70
-rw-r--r--canvas/source/cairo/cairo_surfaceprovider.hxx82
-rw-r--r--canvas/source/cairo/cairo_textlayout.cxx656
-rw-r--r--canvas/source/cairo/cairo_textlayout.hxx120
-rw-r--r--canvas/source/cairo/cairo_win32_cairo.cxx325
-rw-r--r--canvas/source/cairo/cairo_win32_cairo.hxx70
-rw-r--r--canvas/source/cairo/cairo_xlib_cairo.cxx352
-rw-r--r--canvas/source/cairo/cairo_xlib_cairo.hxx106
-rw-r--r--canvas/source/cairo/exports.dxp3
-rw-r--r--canvas/source/cairo/makefile.mk132
-rwxr-xr-xcanvas/source/directx/dx_5rm.cxx2283
-rwxr-xr-xcanvas/source/directx/dx_9rm.cxx1363
-rwxr-xr-xcanvas/source/directx/dx_bitmap.cxx219
-rwxr-xr-xcanvas/source/directx/dx_bitmap.hxx93
-rwxr-xr-xcanvas/source/directx/dx_bitmapcanvashelper.cxx246
-rwxr-xr-xcanvas/source/directx/dx_bitmapcanvashelper.hxx136
-rw-r--r--canvas/source/directx/dx_bitmapprovider.hxx45
-rw-r--r--canvas/source/directx/dx_canvas.cxx255
-rw-r--r--canvas/source/directx/dx_canvas.hxx175
-rwxr-xr-xcanvas/source/directx/dx_canvasbitmap.cxx277
-rwxr-xr-xcanvas/source/directx/dx_canvasbitmap.hxx104
-rwxr-xr-xcanvas/source/directx/dx_canvascustomsprite.cxx123
-rwxr-xr-xcanvas/source/directx/dx_canvascustomsprite.hxx139
-rwxr-xr-xcanvas/source/directx/dx_canvasfont.cxx180
-rwxr-xr-xcanvas/source/directx/dx_canvasfont.hxx104
-rwxr-xr-xcanvas/source/directx/dx_canvashelper.cxx814
-rwxr-xr-xcanvas/source/directx/dx_canvashelper.hxx257
-rwxr-xr-xcanvas/source/directx/dx_canvashelper_texturefill.cxx627
-rwxr-xr-xcanvas/source/directx/dx_config.cxx176
-rw-r--r--canvas/source/directx/dx_config.hxx89
-rwxr-xr-xcanvas/source/directx/dx_devicehelper.cxx236
-rwxr-xr-xcanvas/source/directx/dx_devicehelper.hxx121
-rwxr-xr-xcanvas/source/directx/dx_gdiplususer.cxx81
-rwxr-xr-xcanvas/source/directx/dx_gdiplususer.hxx55
-rw-r--r--canvas/source/directx/dx_graphicsprovider.hxx53
-rw-r--r--canvas/source/directx/dx_ibitmap.hxx70
-rwxr-xr-xcanvas/source/directx/dx_impltools.cxx668
-rwxr-xr-xcanvas/source/directx/dx_impltools.hxx142
-rwxr-xr-xcanvas/source/directx/dx_linepolypolygon.cxx65
-rwxr-xr-xcanvas/source/directx/dx_linepolypolygon.hxx56
-rwxr-xr-xcanvas/source/directx/dx_rendermodule.hxx90
-rwxr-xr-xcanvas/source/directx/dx_sprite.hxx51
-rwxr-xr-xcanvas/source/directx/dx_spritecanvas.cxx211
-rwxr-xr-xcanvas/source/directx/dx_spritecanvas.hxx155
-rwxr-xr-xcanvas/source/directx/dx_spritecanvashelper.cxx382
-rwxr-xr-xcanvas/source/directx/dx_spritecanvashelper.hxx161
-rw-r--r--canvas/source/directx/dx_spritedevicehelper.cxx259
-rw-r--r--canvas/source/directx/dx_spritedevicehelper.hxx114
-rwxr-xr-xcanvas/source/directx/dx_spritehelper.cxx216
-rwxr-xr-xcanvas/source/directx/dx_spritehelper.hxx111
-rw-r--r--canvas/source/directx/dx_surfacebitmap.cxx804
-rw-r--r--canvas/source/directx/dx_surfacebitmap.hxx147
-rwxr-xr-xcanvas/source/directx/dx_surfacegraphics.cxx85
-rwxr-xr-xcanvas/source/directx/dx_surfacegraphics.hxx45
-rwxr-xr-xcanvas/source/directx/dx_textlayout.cxx280
-rwxr-xr-xcanvas/source/directx/dx_textlayout.hxx115
-rwxr-xr-xcanvas/source/directx/dx_textlayout_drawhelper.cxx312
-rwxr-xr-xcanvas/source/directx/dx_textlayout_drawhelper.hxx86
-rwxr-xr-xcanvas/source/directx/dx_vcltools.cxx523
-rwxr-xr-xcanvas/source/directx/dx_vcltools.hxx64
-rwxr-xr-xcanvas/source/directx/dx_winstuff.hxx219
-rw-r--r--canvas/source/directx/exports.dxp3
-rw-r--r--canvas/source/directx/makefile.mk219
-rw-r--r--canvas/source/factory/cf_service.cxx553
-rw-r--r--canvas/source/factory/makefile.mk56
-rw-r--r--canvas/source/null/exports.dxp3
-rw-r--r--canvas/source/null/makefile.mk70
-rw-r--r--canvas/source/null/null_canvasbitmap.cxx84
-rw-r--r--canvas/source/null/null_canvasbitmap.hxx92
-rw-r--r--canvas/source/null/null_canvascustomsprite.cxx105
-rw-r--r--canvas/source/null/null_canvascustomsprite.hxx136
-rw-r--r--canvas/source/null/null_canvasfont.cxx121
-rw-r--r--canvas/source/null/null_canvasfont.hxx95
-rw-r--r--canvas/source/null/null_canvashelper.cxx336
-rw-r--r--canvas/source/null/null_canvashelper.hxx273
-rw-r--r--canvas/source/null/null_devicehelper.cxx239
-rw-r--r--canvas/source/null/null_devicehelper.hxx107
-rw-r--r--canvas/source/null/null_spritecanvas.cxx166
-rw-r--r--canvas/source/null/null_spritecanvas.hxx149
-rw-r--r--canvas/source/null/null_spritecanvashelper.cxx131
-rw-r--r--canvas/source/null/null_spritecanvashelper.hxx136
-rw-r--r--canvas/source/null/null_spritehelper.cxx97
-rw-r--r--canvas/source/null/null_spritehelper.hxx105
-rw-r--r--canvas/source/null/null_textlayout.cxx261
-rw-r--r--canvas/source/null/null_textlayout.hxx107
-rw-r--r--canvas/source/null/null_usagecounter.hxx76
-rw-r--r--canvas/source/null/sprite.hxx47
-rw-r--r--canvas/source/simplecanvas/exports.dxp3
-rw-r--r--canvas/source/simplecanvas/makefile.mk63
-rw-r--r--canvas/source/simplecanvas/simplecanvasimpl.cxx400
-rw-r--r--canvas/source/tools/bitmap.cxx838
-rw-r--r--canvas/source/tools/cachedprimitivebase.cxx112
-rw-r--r--canvas/source/tools/canvascustomspritehelper.cxx496
-rwxr-xr-xcanvas/source/tools/canvastools.cxx1044
-rw-r--r--canvas/source/tools/canvastools.flt4
-rw-r--r--canvas/source/tools/elapsedtime.cxx224
-rw-r--r--canvas/source/tools/image.cxx2394
-rw-r--r--canvas/source/tools/image.hxx298
-rw-r--r--canvas/source/tools/image_sysprereq.h102
-rw-r--r--canvas/source/tools/imagecachedprimitive.hxx57
-rw-r--r--canvas/source/tools/makefile.mk101
-rw-r--r--canvas/source/tools/page.cxx152
-rw-r--r--canvas/source/tools/page.hxx157
-rw-r--r--canvas/source/tools/pagemanager.cxx222
-rw-r--r--canvas/source/tools/pagemanager.hxx94
-rw-r--r--canvas/source/tools/parametricpolypolygon.cxx290
-rw-r--r--canvas/source/tools/prioritybooster.cxx83
-rw-r--r--canvas/source/tools/propertysethelper.cxx187
-rw-r--r--canvas/source/tools/spriteredrawmanager.cxx520
-rw-r--r--canvas/source/tools/surface.cxx496
-rw-r--r--canvas/source/tools/surface.hxx162
-rw-r--r--canvas/source/tools/surfaceproxy.cxx182
-rw-r--r--canvas/source/tools/surfaceproxy.hxx134
-rw-r--r--canvas/source/tools/surfaceproxymanager.cxx86
-rw-r--r--canvas/source/tools/surfacerect.hxx135
-rw-r--r--canvas/source/tools/verifyinput.cxx926
-rw-r--r--canvas/source/vcl/backbuffer.cxx71
-rw-r--r--canvas/source/vcl/backbuffer.hxx67
-rw-r--r--canvas/source/vcl/bitmapbackbuffer.cxx165
-rw-r--r--canvas/source/vcl/bitmapbackbuffer.hxx104
-rw-r--r--canvas/source/vcl/cachedbitmap.cxx104
-rw-r--r--canvas/source/vcl/cachedbitmap.hxx78
-rw-r--r--canvas/source/vcl/canvas.cxx161
-rw-r--r--canvas/source/vcl/canvas.hxx131
-rw-r--r--canvas/source/vcl/canvasbitmap.cxx144
-rw-r--r--canvas/source/vcl/canvasbitmap.hxx129
-rw-r--r--canvas/source/vcl/canvasbitmaphelper.cxx567
-rw-r--r--canvas/source/vcl/canvasbitmaphelper.hxx129
-rw-r--r--canvas/source/vcl/canvascustomsprite.cxx197
-rw-r--r--canvas/source/vcl/canvascustomsprite.hxx133
-rw-r--r--canvas/source/vcl/canvasfont.cxx183
-rw-r--r--canvas/source/vcl/canvasfont.hxx100
-rw-r--r--canvas/source/vcl/canvashelper.cxx1428
-rw-r--r--canvas/source/vcl/canvashelper.hxx344
-rw-r--r--canvas/source/vcl/canvashelper_texturefill.cxx1182
-rw-r--r--canvas/source/vcl/devicehelper.cxx242
-rw-r--r--canvas/source/vcl/devicehelper.hxx103
-rw-r--r--canvas/source/vcl/exports.dxp3
-rw-r--r--canvas/source/vcl/impltools.cxx544
-rw-r--r--canvas/source/vcl/impltools.hxx201
-rw-r--r--canvas/source/vcl/makefile.mk85
-rw-r--r--canvas/source/vcl/outdevprovider.hxx61
-rw-r--r--canvas/source/vcl/repainttarget.hxx63
-rw-r--r--canvas/source/vcl/services.cxx90
-rw-r--r--canvas/source/vcl/sprite.hxx71
-rw-r--r--canvas/source/vcl/spritecanvas.cxx178
-rw-r--r--canvas/source/vcl/spritecanvas.hxx172
-rw-r--r--canvas/source/vcl/spritecanvashelper.cxx718
-rw-r--r--canvas/source/vcl/spritecanvashelper.hxx179
-rw-r--r--canvas/source/vcl/spritedevicehelper.cxx158
-rw-r--r--canvas/source/vcl/spritedevicehelper.hxx82
-rw-r--r--canvas/source/vcl/spritehelper.cxx443
-rw-r--r--canvas/source/vcl/spritehelper.hxx121
-rw-r--r--canvas/source/vcl/textlayout.cxx496
-rw-r--r--canvas/source/vcl/textlayout.hxx115
-rw-r--r--canvas/source/vcl/windowoutdevholder.cxx57
-rw-r--r--canvas/source/vcl/windowoutdevholder.hxx66
-rw-r--r--canvas/workben/canvasdemo.cxx712
-rw-r--r--canvas/workben/makefile.mk37
-rw-r--r--chart2/chartview.pmk30
-rw-r--r--chart2/inc/makefile.mk47
-rw-r--r--chart2/inc/pch/precompiled_chart2.cxx29
-rw-r--r--chart2/inc/pch/precompiled_chart2.hxx275
-rw-r--r--chart2/prj/build.lst27
-rw-r--r--chart2/prj/d.lst23
-rw-r--r--chart2/qa/TestCaseOldAPI.java1033
-rw-r--r--chart2/qa/data.chd14
-rw-r--r--chart2/qa/makefile.mk70
-rw-r--r--chart2/qa/unoapi/Test.java51
-rw-r--r--chart2/qa/unoapi/knownissues.xcl40
-rw-r--r--chart2/qa/unoapi/makefile.mk48
-rw-r--r--chart2/qa/unoapi/sch.sce26
-rw-r--r--chart2/qa/unoapi/testdocuments/TransparencyChart.sxsbin0 -> 10810 bytes
-rw-r--r--chart2/qa/unoapi/testdocuments/emptyChart.sdsbin0 -> 44544 bytes
-rw-r--r--chart2/qa/unoapi/testdocuments/space-metal.jpgbin0 -> 4313 bytes
-rw-r--r--chart2/source/controller/accessibility/AccStatisticsObject.cxx81
-rw-r--r--chart2/source/controller/accessibility/AccStatisticsObject.hxx68
-rw-r--r--chart2/source/controller/accessibility/AccessibleBase.cxx1010
-rw-r--r--chart2/source/controller/accessibility/AccessibleChartElement.cxx332
-rw-r--r--chart2/source/controller/accessibility/AccessibleChartElement.hxx142
-rw-r--r--chart2/source/controller/accessibility/AccessibleChartShape.cxx289
-rw-r--r--chart2/source/controller/accessibility/AccessibleChartShape.hxx104
-rw-r--r--chart2/source/controller/accessibility/AccessibleChartView.cxx416
-rw-r--r--chart2/source/controller/accessibility/AccessibleTextHelper.cxx203
-rw-r--r--chart2/source/controller/accessibility/AccessibleViewForwarder.cxx116
-rw-r--r--chart2/source/controller/accessibility/AccessibleViewForwarder.hxx65
-rw-r--r--chart2/source/controller/accessibility/ChartElementFactory.cxx145
-rw-r--r--chart2/source/controller/accessibility/ChartElementFactory.hxx48
-rw-r--r--chart2/source/controller/accessibility/makefile.mk54
-rw-r--r--chart2/source/controller/chartapiwrapper/AreaWrapper.cxx207
-rw-r--r--chart2/source/controller/chartapiwrapper/AreaWrapper.hxx105
-rw-r--r--chart2/source/controller/chartapiwrapper/AxisWrapper.cxx596
-rw-r--r--chart2/source/controller/chartapiwrapper/AxisWrapper.hxx140
-rw-r--r--chart2/source/controller/chartapiwrapper/Chart2ModelContact.cxx319
-rw-r--r--chart2/source/controller/chartapiwrapper/Chart2ModelContact.hxx169
-rw-r--r--chart2/source/controller/chartapiwrapper/ChartDataWrapper.cxx633
-rw-r--r--chart2/source/controller/chartapiwrapper/ChartDataWrapper.hxx149
-rw-r--r--chart2/source/controller/chartapiwrapper/ChartDocumentWrapper.cxx1623
-rw-r--r--chart2/source/controller/chartapiwrapper/DataSeriesPointWrapper.cxx887
-rw-r--r--chart2/source/controller/chartapiwrapper/DataSeriesPointWrapper.hxx160
-rw-r--r--chart2/source/controller/chartapiwrapper/DiagramWrapper.cxx2148
-rw-r--r--chart2/source/controller/chartapiwrapper/DiagramWrapper.hxx319
-rw-r--r--chart2/source/controller/chartapiwrapper/GridWrapper.cxx211
-rw-r--r--chart2/source/controller/chartapiwrapper/GridWrapper.hxx103
-rw-r--r--chart2/source/controller/chartapiwrapper/LegendWrapper.cxx459
-rw-r--r--chart2/source/controller/chartapiwrapper/LegendWrapper.hxx113
-rw-r--r--chart2/source/controller/chartapiwrapper/MinMaxLineWrapper.cxx435
-rw-r--r--chart2/source/controller/chartapiwrapper/MinMaxLineWrapper.hxx139
-rw-r--r--chart2/source/controller/chartapiwrapper/ReferenceSizePropertyProvider.hxx48
-rw-r--r--chart2/source/controller/chartapiwrapper/TitleWrapper.cxx566
-rw-r--r--chart2/source/controller/chartapiwrapper/TitleWrapper.hxx136
-rw-r--r--chart2/source/controller/chartapiwrapper/UpDownBarWrapper.cxx402
-rw-r--r--chart2/source/controller/chartapiwrapper/UpDownBarWrapper.hxx137
-rw-r--r--chart2/source/controller/chartapiwrapper/WallFloorWrapper.cxx192
-rw-r--r--chart2/source/controller/chartapiwrapper/WallFloorWrapper.hxx89
-rw-r--r--chart2/source/controller/chartapiwrapper/WrappedAddInProperty.cxx158
-rw-r--r--chart2/source/controller/chartapiwrapper/WrappedAddInProperty.hxx111
-rw-r--r--chart2/source/controller/chartapiwrapper/WrappedAutomaticPositionProperties.cxx156
-rw-r--r--chart2/source/controller/chartapiwrapper/WrappedAutomaticPositionProperties.hxx49
-rw-r--r--chart2/source/controller/chartapiwrapper/WrappedAxisAndGridExistenceProperties.cxx448
-rw-r--r--chart2/source/controller/chartapiwrapper/WrappedAxisAndGridExistenceProperties.hxx76
-rw-r--r--chart2/source/controller/chartapiwrapper/WrappedCharacterHeightProperty.cxx172
-rw-r--r--chart2/source/controller/chartapiwrapper/WrappedCharacterHeightProperty.hxx102
-rw-r--r--chart2/source/controller/chartapiwrapper/WrappedDataCaptionProperties.cxx193
-rw-r--r--chart2/source/controller/chartapiwrapper/WrappedDataCaptionProperties.hxx61
-rw-r--r--chart2/source/controller/chartapiwrapper/WrappedGapwidthProperty.cxx201
-rw-r--r--chart2/source/controller/chartapiwrapper/WrappedGapwidthProperty.hxx87
-rw-r--r--chart2/source/controller/chartapiwrapper/WrappedNumberFormatProperty.cxx199
-rw-r--r--chart2/source/controller/chartapiwrapper/WrappedNumberFormatProperty.hxx92
-rw-r--r--chart2/source/controller/chartapiwrapper/WrappedScaleProperty.cxx511
-rw-r--r--chart2/source/controller/chartapiwrapper/WrappedScaleProperty.hxx92
-rw-r--r--chart2/source/controller/chartapiwrapper/WrappedScaleTextProperties.cxx167
-rw-r--r--chart2/source/controller/chartapiwrapper/WrappedScaleTextProperties.hxx54
-rw-r--r--chart2/source/controller/chartapiwrapper/WrappedSceneProperty.cxx131
-rw-r--r--chart2/source/controller/chartapiwrapper/WrappedSceneProperty.hxx82
-rw-r--r--chart2/source/controller/chartapiwrapper/WrappedSeriesAreaOrLineProperty.cxx70
-rw-r--r--chart2/source/controller/chartapiwrapper/WrappedSeriesAreaOrLineProperty.hxx60
-rw-r--r--chart2/source/controller/chartapiwrapper/WrappedSeriesOrDiagramProperty.hxx189
-rw-r--r--chart2/source/controller/chartapiwrapper/WrappedSplineProperties.cxx287
-rw-r--r--chart2/source/controller/chartapiwrapper/WrappedSplineProperties.hxx59
-rw-r--r--chart2/source/controller/chartapiwrapper/WrappedStatisticProperties.cxx1154
-rw-r--r--chart2/source/controller/chartapiwrapper/WrappedStatisticProperties.hxx57
-rw-r--r--chart2/source/controller/chartapiwrapper/WrappedStockProperties.cxx330
-rw-r--r--chart2/source/controller/chartapiwrapper/WrappedStockProperties.hxx59
-rw-r--r--chart2/source/controller/chartapiwrapper/WrappedSymbolProperties.cxx593
-rw-r--r--chart2/source/controller/chartapiwrapper/WrappedSymbolProperties.hxx61
-rw-r--r--chart2/source/controller/chartapiwrapper/WrappedTextRotationProperty.cxx87
-rw-r--r--chart2/source/controller/chartapiwrapper/WrappedTextRotationProperty.hxx58
-rw-r--r--chart2/source/controller/chartapiwrapper/makefile.mk77
-rw-r--r--chart2/source/controller/dialogs/Bitmaps.hrc216
-rw-r--r--chart2/source/controller/dialogs/Bitmaps.src543
-rw-r--r--chart2/source/controller/dialogs/Bitmaps_HC.hrc213
-rw-r--r--chart2/source/controller/dialogs/Bitmaps_HC.src543
-rw-r--r--chart2/source/controller/dialogs/ChangingResource.cxx56
-rw-r--r--chart2/source/controller/dialogs/ChangingResource.hxx63
-rw-r--r--chart2/source/controller/dialogs/ChartTypeDialogController.cxx1285
-rw-r--r--chart2/source/controller/dialogs/ChartTypeDialogController.hxx317
-rw-r--r--chart2/source/controller/dialogs/ChartTypeTemplateProvider.hxx53
-rw-r--r--chart2/source/controller/dialogs/CommonResources.hrc79
-rw-r--r--chart2/source/controller/dialogs/DataBrowser.cxx1364
-rw-r--r--chart2/source/controller/dialogs/DataBrowser.hxx204
-rw-r--r--chart2/source/controller/dialogs/DataBrowserModel.cxx1000
-rw-r--r--chart2/source/controller/dialogs/DataBrowserModel.hxx181
-rw-r--r--chart2/source/controller/dialogs/DialogModel.cxx849
-rw-r--r--chart2/source/controller/dialogs/DialogModel.hxx197
-rw-r--r--chart2/source/controller/dialogs/ObjectNameProvider.cxx852
-rw-r--r--chart2/source/controller/dialogs/RangeEdit.cxx70
-rw-r--r--chart2/source/controller/dialogs/RangeSelectionButton.cxx56
-rw-r--r--chart2/source/controller/dialogs/RangeSelectionHelper.cxx198
-rw-r--r--chart2/source/controller/dialogs/RangeSelectionListener.cxx75
-rw-r--r--chart2/source/controller/dialogs/ResourceIds.hrc86
-rw-r--r--chart2/source/controller/dialogs/Strings.src608
-rw-r--r--chart2/source/controller/dialogs/Strings_AdditionalControls.src57
-rw-r--r--chart2/source/controller/dialogs/Strings_ChartTypes.src153
-rw-r--r--chart2/source/controller/dialogs/Strings_Scale.src44
-rw-r--r--chart2/source/controller/dialogs/Strings_Statistic.src72
-rw-r--r--chart2/source/controller/dialogs/TabPages.hrc172
-rw-r--r--chart2/source/controller/dialogs/TextDirectionListBox.cxx60
-rw-r--r--chart2/source/controller/dialogs/TimerTriggeredControllerLock.cxx70
-rw-r--r--chart2/source/controller/dialogs/TitleDialogData.cxx124
-rw-r--r--chart2/source/controller/dialogs/dlg_ChartType.cxx78
-rw-r--r--chart2/source/controller/dialogs/dlg_ChartType.hrc35
-rw-r--r--chart2/source/controller/dialogs/dlg_ChartType.src57
-rw-r--r--chart2/source/controller/dialogs/dlg_ChartType_UNO.cxx139
-rw-r--r--chart2/source/controller/dialogs/dlg_CreationWizard.cxx267
-rw-r--r--chart2/source/controller/dialogs/dlg_CreationWizard.hrc32
-rw-r--r--chart2/source/controller/dialogs/dlg_CreationWizard.src39
-rw-r--r--chart2/source/controller/dialogs/dlg_CreationWizard_UNO.cxx433
-rw-r--r--chart2/source/controller/dialogs/dlg_DataEditor.cxx363
-rw-r--r--chart2/source/controller/dialogs/dlg_DataEditor.hrc47
-rw-r--r--chart2/source/controller/dialogs/dlg_DataEditor.src148
-rw-r--r--chart2/source/controller/dialogs/dlg_DataSource.cxx253
-rw-r--r--chart2/source/controller/dialogs/dlg_DataSource.hrc33
-rw-r--r--chart2/source/controller/dialogs/dlg_DataSource.src48
-rw-r--r--chart2/source/controller/dialogs/dlg_InsertAxis_Grid.cxx164
-rw-r--r--chart2/source/controller/dialogs/dlg_InsertAxis_Grid.hrc46
-rw-r--r--chart2/source/controller/dialogs/dlg_InsertAxis_Grid.src99
-rw-r--r--chart2/source/controller/dialogs/dlg_InsertDataLabel.cxx74
-rw-r--r--chart2/source/controller/dialogs/dlg_InsertDataLabel.hrc32
-rw-r--r--chart2/source/controller/dialogs/dlg_InsertDataLabel.src42
-rw-r--r--chart2/source/controller/dialogs/dlg_InsertErrorBars.cxx134
-rw-r--r--chart2/source/controller/dialogs/dlg_InsertErrorBars.hrc31
-rw-r--r--chart2/source/controller/dialogs/dlg_InsertErrorBars.src43
-rw-r--r--chart2/source/controller/dialogs/dlg_InsertLegend.cxx78
-rw-r--r--chart2/source/controller/dialogs/dlg_InsertLegend.hrc31
-rw-r--r--chart2/source/controller/dialogs/dlg_InsertLegend.src47
-rw-r--r--chart2/source/controller/dialogs/dlg_InsertTitle.cxx67
-rw-r--r--chart2/source/controller/dialogs/dlg_InsertTitle.hrc31
-rw-r--r--chart2/source/controller/dialogs/dlg_InsertTitle.src42
-rw-r--r--chart2/source/controller/dialogs/dlg_InsertTrendline.cxx114
-rw-r--r--chart2/source/controller/dialogs/dlg_InsertTrendline.hrc31
-rw-r--r--chart2/source/controller/dialogs/dlg_InsertTrendline.src48
-rw-r--r--chart2/source/controller/dialogs/dlg_NumberFormat.cxx86
-rw-r--r--chart2/source/controller/dialogs/dlg_NumberFormat.hxx54
-rw-r--r--chart2/source/controller/dialogs/dlg_ObjectProperties.cxx652
-rw-r--r--chart2/source/controller/dialogs/dlg_ObjectProperties.src39
-rw-r--r--chart2/source/controller/dialogs/dlg_ShapeFont.cxx92
-rw-r--r--chart2/source/controller/dialogs/dlg_ShapeFont.src62
-rw-r--r--chart2/source/controller/dialogs/dlg_ShapeParagraph.cxx93
-rw-r--r--chart2/source/controller/dialogs/dlg_ShapeParagraph.src67
-rw-r--r--chart2/source/controller/dialogs/dlg_View3D.cxx118
-rw-r--r--chart2/source/controller/dialogs/dlg_View3D.hrc40
-rw-r--r--chart2/source/controller/dialogs/dlg_View3D.src48
-rw-r--r--chart2/source/controller/dialogs/hidother.src116
-rw-r--r--chart2/source/controller/dialogs/makefile.mk205
-rw-r--r--chart2/source/controller/dialogs/res_BarGeometry.cxx112
-rw-r--r--chart2/source/controller/dialogs/res_BarGeometry.hxx67
-rw-r--r--chart2/source/controller/dialogs/res_BarGeometry.src49
-rw-r--r--chart2/source/controller/dialogs/res_DataLabel.cxx419
-rw-r--r--chart2/source/controller/dialogs/res_DataLabel.hxx104
-rw-r--r--chart2/source/controller/dialogs/res_DataLabel_IDs.hrc45
-rw-r--r--chart2/source/controller/dialogs/res_DataLabel_tmpl.hrc169
-rw-r--r--chart2/source/controller/dialogs/res_ErrorBar.cxx787
-rw-r--r--chart2/source/controller/dialogs/res_ErrorBar_IDs.hrc63
-rw-r--r--chart2/source/controller/dialogs/res_ErrorBar_tmpl.hrc228
-rw-r--r--chart2/source/controller/dialogs/res_LegendPosition.cxx265
-rw-r--r--chart2/source/controller/dialogs/res_LegendPosition.hxx90
-rw-r--r--chart2/source/controller/dialogs/res_LegendPosition_IDs.hrc32
-rw-r--r--chart2/source/controller/dialogs/res_LegendPosition_tmpl.hrc80
-rw-r--r--chart2/source/controller/dialogs/res_SecondaryAxisCheckBoxes_tmpl.hrc59
-rw-r--r--chart2/source/controller/dialogs/res_TextSeparator.cxx155
-rw-r--r--chart2/source/controller/dialogs/res_TextSeparator.hxx75
-rw-r--r--chart2/source/controller/dialogs/res_TextSeparator.src49
-rw-r--r--chart2/source/controller/dialogs/res_Titles.cxx224
-rw-r--r--chart2/source/controller/dialogs/res_Titles.hrc47
-rw-r--r--chart2/source/controller/dialogs/res_Titles.hxx77
-rw-r--r--chart2/source/controller/dialogs/res_Titlesx_tmpl.hrc149
-rw-r--r--chart2/source/controller/dialogs/res_Trendline.cxx282
-rw-r--r--chart2/source/controller/dialogs/res_Trendline.hxx83
-rw-r--r--chart2/source/controller/dialogs/res_Trendline_IDs.hrc44
-rw-r--r--chart2/source/controller/dialogs/res_Trendline_tmpl.hrc123
-rw-r--r--chart2/source/controller/dialogs/tp_3D_SceneAppearance.cxx363
-rw-r--r--chart2/source/controller/dialogs/tp_3D_SceneAppearance.hrc38
-rw-r--r--chart2/source/controller/dialogs/tp_3D_SceneAppearance.hxx99
-rw-r--r--chart2/source/controller/dialogs/tp_3D_SceneAppearance.src98
-rw-r--r--chart2/source/controller/dialogs/tp_3D_SceneGeometry.cxx296
-rw-r--r--chart2/source/controller/dialogs/tp_3D_SceneGeometry.hrc40
-rw-r--r--chart2/source/controller/dialogs/tp_3D_SceneGeometry.hxx112
-rw-r--r--chart2/source/controller/dialogs/tp_3D_SceneGeometry.src147
-rw-r--r--chart2/source/controller/dialogs/tp_3D_SceneIllumination.cxx650
-rw-r--r--chart2/source/controller/dialogs/tp_3D_SceneIllumination.hrc46
-rw-r--r--chart2/source/controller/dialogs/tp_3D_SceneIllumination.hxx145
-rw-r--r--chart2/source/controller/dialogs/tp_3D_SceneIllumination.src162
-rw-r--r--chart2/source/controller/dialogs/tp_AxisLabel.cxx323
-rw-r--r--chart2/source/controller/dialogs/tp_AxisLabel.hxx99
-rw-r--r--chart2/source/controller/dialogs/tp_AxisLabel.src186
-rw-r--r--chart2/source/controller/dialogs/tp_AxisPositions.cxx498
-rw-r--r--chart2/source/controller/dialogs/tp_AxisPositions.hxx112
-rw-r--r--chart2/source/controller/dialogs/tp_AxisPositions.src292
-rw-r--r--chart2/source/controller/dialogs/tp_ChartType.cxx1183
-rw-r--r--chart2/source/controller/dialogs/tp_ChartType.hrc62
-rw-r--r--chart2/source/controller/dialogs/tp_ChartType.hxx125
-rw-r--r--chart2/source/controller/dialogs/tp_ChartType.src259
-rw-r--r--chart2/source/controller/dialogs/tp_DataLabel.cxx74
-rw-r--r--chart2/source/controller/dialogs/tp_DataLabel.hxx64
-rw-r--r--chart2/source/controller/dialogs/tp_DataLabel.src42
-rw-r--r--chart2/source/controller/dialogs/tp_DataSource.cxx1076
-rw-r--r--chart2/source/controller/dialogs/tp_DataSource.hrc50
-rw-r--r--chart2/source/controller/dialogs/tp_DataSource.hxx179
-rw-r--r--chart2/source/controller/dialogs/tp_DataSource.src171
-rw-r--r--chart2/source/controller/dialogs/tp_DataSourceControls.cxx57
-rw-r--r--chart2/source/controller/dialogs/tp_DataSourceControls.hxx70
-rw-r--r--chart2/source/controller/dialogs/tp_ErrorBars.cxx100
-rw-r--r--chart2/source/controller/dialogs/tp_ErrorBars.hxx65
-rw-r--r--chart2/source/controller/dialogs/tp_ErrorBars.src38
-rw-r--r--chart2/source/controller/dialogs/tp_LegendPosition.cxx88
-rw-r--r--chart2/source/controller/dialogs/tp_LegendPosition.hxx69
-rw-r--r--chart2/source/controller/dialogs/tp_LegendPosition.src65
-rw-r--r--chart2/source/controller/dialogs/tp_Location.cxx71
-rw-r--r--chart2/source/controller/dialogs/tp_Location.hrc32
-rw-r--r--chart2/source/controller/dialogs/tp_Location.hxx76
-rw-r--r--chart2/source/controller/dialogs/tp_Location.src73
-rw-r--r--chart2/source/controller/dialogs/tp_PointGeometry.cxx104
-rw-r--r--chart2/source/controller/dialogs/tp_PointGeometry.hxx58
-rw-r--r--chart2/source/controller/dialogs/tp_PointGeometry.src36
-rw-r--r--chart2/source/controller/dialogs/tp_PolarOptions.cxx126
-rw-r--r--chart2/source/controller/dialogs/tp_PolarOptions.hrc40
-rw-r--r--chart2/source/controller/dialogs/tp_PolarOptions.hxx67
-rw-r--r--chart2/source/controller/dialogs/tp_PolarOptions.src87
-rw-r--r--chart2/source/controller/dialogs/tp_RangeChooser.cxx414
-rw-r--r--chart2/source/controller/dialogs/tp_RangeChooser.hrc40
-rw-r--r--chart2/source/controller/dialogs/tp_RangeChooser.hxx124
-rw-r--r--chart2/source/controller/dialogs/tp_RangeChooser.src94
-rw-r--r--chart2/source/controller/dialogs/tp_Scale.cxx518
-rw-r--r--chart2/source/controller/dialogs/tp_Scale.hxx126
-rw-r--r--chart2/source/controller/dialogs/tp_Scale.src190
-rw-r--r--chart2/source/controller/dialogs/tp_SeriesToAxis.cxx313
-rw-r--r--chart2/source/controller/dialogs/tp_SeriesToAxis.hrc45
-rw-r--r--chart2/source/controller/dialogs/tp_SeriesToAxis.hxx95
-rw-r--r--chart2/source/controller/dialogs/tp_SeriesToAxis.src176
-rw-r--r--chart2/source/controller/dialogs/tp_TitleRotation.cxx126
-rw-r--r--chart2/source/controller/dialogs/tp_TitleRotation.hxx69
-rw-r--r--chart2/source/controller/dialogs/tp_TitleRotation.src93
-rw-r--r--chart2/source/controller/dialogs/tp_Trendline.cxx77
-rw-r--r--chart2/source/controller/dialogs/tp_Trendline.hxx59
-rw-r--r--chart2/source/controller/dialogs/tp_Trendline.src38
-rw-r--r--chart2/source/controller/dialogs/tp_Wizard_TitlesAndObjects.cxx187
-rw-r--r--chart2/source/controller/dialogs/tp_Wizard_TitlesAndObjects.hrc50
-rw-r--r--chart2/source/controller/dialogs/tp_Wizard_TitlesAndObjects.hxx93
-rw-r--r--chart2/source/controller/dialogs/tp_Wizard_TitlesAndObjects.src92
-rw-r--r--chart2/source/controller/drawinglayer/DrawViewWrapper.cxx445
-rw-r--r--chart2/source/controller/drawinglayer/ViewElementListProvider.cxx274
-rw-r--r--chart2/source/controller/drawinglayer/makefile.mk49
-rw-r--r--chart2/source/controller/inc/AccessibleBase.hxx379
-rw-r--r--chart2/source/controller/inc/AccessibleChartView.hxx155
-rw-r--r--chart2/source/controller/inc/AccessibleTextHelper.hxx113
-rw-r--r--chart2/source/controller/inc/AxisItemConverter.hxx92
-rw-r--r--chart2/source/controller/inc/CharacterPropertyItemConverter.hxx84
-rw-r--r--chart2/source/controller/inc/ChartDocumentWrapper.hxx235
-rw-r--r--chart2/source/controller/inc/ChartRenderer.hxx76
-rw-r--r--chart2/source/controller/inc/ConfigurationAccess.hxx59
-rw-r--r--chart2/source/controller/inc/DataPointItemConverter.hxx110
-rw-r--r--chart2/source/controller/inc/DrawViewWrapper.hxx112
-rwxr-xr-xchart2/source/controller/inc/ErrorBarItemConverter.hxx84
-rw-r--r--chart2/source/controller/inc/GraphicPropertyItemConverter.hxx85
-rw-r--r--chart2/source/controller/inc/HelpIds.hrc182
-rw-r--r--chart2/source/controller/inc/ItemConverter.hxx215
-rw-r--r--chart2/source/controller/inc/ItemPropertyMap.hxx90
-rw-r--r--chart2/source/controller/inc/LegendItemConverter.hxx79
-rw-r--r--chart2/source/controller/inc/MenuResIds.hrc41
-rw-r--r--chart2/source/controller/inc/MultipleChartConverters.hxx130
-rw-r--r--chart2/source/controller/inc/MultipleItemConverter.hxx60
-rw-r--r--chart2/source/controller/inc/ObjectHierarchy.hxx120
-rw-r--r--chart2/source/controller/inc/ObjectNameProvider.hxx87
-rw-r--r--chart2/source/controller/inc/PositionAndSizeHelper.hxx60
-rwxr-xr-xchart2/source/controller/inc/RangeEdit.hxx56
-rw-r--r--chart2/source/controller/inc/RangeSelectionButton.hxx55
-rwxr-xr-xchart2/source/controller/inc/RangeSelectionHelper.hxx87
-rw-r--r--chart2/source/controller/inc/RangeSelectionListener.hxx79
-rw-r--r--chart2/source/controller/inc/RegressionCurveItemConverter.hxx82
-rw-r--r--chart2/source/controller/inc/RegressionEquationItemConverter.hxx83
-rw-r--r--chart2/source/controller/inc/SchSlotIds.hxx234
-rw-r--r--chart2/source/controller/inc/SeriesOptionsItemConverter.hxx102
-rw-r--r--chart2/source/controller/inc/ShapeController.hrc50
-rw-r--r--chart2/source/controller/inc/StatisticsItemConverter.hxx75
-rw-r--r--chart2/source/controller/inc/TabPageNotifiable.hxx51
-rw-r--r--chart2/source/controller/inc/TextDirectionListBox.hxx49
-rw-r--r--chart2/source/controller/inc/TimerTriggeredControllerLock.hxx63
-rw-r--r--chart2/source/controller/inc/TitleDialogData.hxx67
-rw-r--r--chart2/source/controller/inc/TitleItemConverter.hxx80
-rw-r--r--chart2/source/controller/inc/ViewElementListProvider.hxx70
-rw-r--r--chart2/source/controller/inc/dlg_ChartType.hxx76
-rw-r--r--chart2/source/controller/inc/dlg_ChartType_UNO.hxx86
-rw-r--r--chart2/source/controller/inc/dlg_CreationWizard.hxx105
-rw-r--r--chart2/source/controller/inc/dlg_CreationWizard_UNO.hxx129
-rw-r--r--chart2/source/controller/inc/dlg_DataEditor.hxx121
-rw-r--r--chart2/source/controller/inc/dlg_DataSource.hxx100
-rw-r--r--chart2/source/controller/inc/dlg_InsertAxis_Grid.hxx101
-rw-r--r--chart2/source/controller/inc/dlg_InsertDataLabel.hxx72
-rw-r--r--chart2/source/controller/inc/dlg_InsertErrorBars.hxx78
-rw-r--r--chart2/source/controller/inc/dlg_InsertLegend.hxx72
-rw-r--r--chart2/source/controller/inc/dlg_InsertTitle.hxx64
-rw-r--r--chart2/source/controller/inc/dlg_InsertTrendline.hxx68
-rw-r--r--chart2/source/controller/inc/dlg_ObjectProperties.hxx155
-rw-r--r--chart2/source/controller/inc/dlg_ShapeFont.hxx59
-rw-r--r--chart2/source/controller/inc/dlg_ShapeParagraph.hxx54
-rw-r--r--chart2/source/controller/inc/dlg_View3D.hxx84
-rw-r--r--chart2/source/controller/inc/res_ErrorBar.hxx155
-rw-r--r--chart2/source/controller/itemsetwrapper/AxisItemConverter.cxx835
-rw-r--r--chart2/source/controller/itemsetwrapper/CharacterPropertyItemConverter.cxx518
-rw-r--r--chart2/source/controller/itemsetwrapper/DataPointItemConverter.cxx700
-rwxr-xr-xchart2/source/controller/itemsetwrapper/ErrorBarItemConverter.cxx456
-rw-r--r--chart2/source/controller/itemsetwrapper/GraphicPropertyItemConverter.cxx809
-rw-r--r--chart2/source/controller/itemsetwrapper/ItemConverter.cxx269
-rw-r--r--chart2/source/controller/itemsetwrapper/LegendItemConverter.cxx236
-rw-r--r--chart2/source/controller/itemsetwrapper/MultipleChartConverters.cxx233
-rw-r--r--chart2/source/controller/itemsetwrapper/MultipleItemConverter.cxx84
-rw-r--r--chart2/source/controller/itemsetwrapper/RegressionCurveItemConverter.cxx276
-rw-r--r--chart2/source/controller/itemsetwrapper/RegressionEquationItemConverter.cxx187
-rw-r--r--chart2/source/controller/itemsetwrapper/SchWhichPairs.hxx254
-rw-r--r--chart2/source/controller/itemsetwrapper/SeriesOptionsItemConverter.cxx453
-rw-r--r--chart2/source/controller/itemsetwrapper/StatisticsItemConverter.cxx697
-rw-r--r--chart2/source/controller/itemsetwrapper/TitleItemConverter.cxx245
-rw-r--r--chart2/source/controller/itemsetwrapper/makefile.mk60
-rw-r--r--chart2/source/controller/main/ChartController.cxx1603
-rw-r--r--chart2/source/controller/main/ChartController.hxx737
-rw-r--r--chart2/source/controller/main/ChartController_EditData.cxx80
-rw-r--r--chart2/source/controller/main/ChartController_Insert.cxx946
-rw-r--r--chart2/source/controller/main/ChartController_Position.cxx191
-rw-r--r--chart2/source/controller/main/ChartController_Properties.cxx860
-rw-r--r--chart2/source/controller/main/ChartController_TextEdit.cxx271
-rw-r--r--chart2/source/controller/main/ChartController_Tools.cxx919
-rw-r--r--chart2/source/controller/main/ChartController_Window.cxx2029
-rw-r--r--chart2/source/controller/main/ChartDropTargetHelper.cxx204
-rw-r--r--chart2/source/controller/main/ChartDropTargetHelper.hxx69
-rw-r--r--chart2/source/controller/main/ChartFrameloader.cxx208
-rw-r--r--chart2/source/controller/main/ChartFrameloader.hxx91
-rw-r--r--chart2/source/controller/main/ChartRenderer.cxx178
-rw-r--r--chart2/source/controller/main/ChartTransferable.cxx172
-rw-r--r--chart2/source/controller/main/ChartTransferable.hxx67
-rw-r--r--chart2/source/controller/main/ChartWindow.cxx271
-rw-r--r--chart2/source/controller/main/ChartWindow.hxx88
-rw-r--r--chart2/source/controller/main/CommandDispatch.cxx211
-rw-r--r--chart2/source/controller/main/CommandDispatch.hxx151
-rw-r--r--chart2/source/controller/main/CommandDispatchContainer.cxx216
-rw-r--r--chart2/source/controller/main/CommandDispatchContainer.hxx160
-rw-r--r--chart2/source/controller/main/ConfigurationAccess.cxx120
-rw-r--r--chart2/source/controller/main/ControllerCommandDispatch.cxx805
-rw-r--r--chart2/source/controller/main/ControllerCommandDispatch.hxx136
-rw-r--r--chart2/source/controller/main/DragMethod_Base.cxx93
-rw-r--r--chart2/source/controller/main/DragMethod_Base.hxx69
-rw-r--r--chart2/source/controller/main/DragMethod_PieSegment.cxx163
-rw-r--r--chart2/source/controller/main/DragMethod_PieSegment.hxx64
-rw-r--r--chart2/source/controller/main/DragMethod_RotateDiagram.cxx237
-rw-r--r--chart2/source/controller/main/DragMethod_RotateDiagram.hxx92
-rw-r--r--chart2/source/controller/main/DrawCommandDispatch.cxx674
-rw-r--r--chart2/source/controller/main/DrawCommandDispatch.hrc50
-rw-r--r--chart2/source/controller/main/DrawCommandDispatch.hxx93
-rw-r--r--chart2/source/controller/main/ElementSelector.cxx344
-rw-r--r--chart2/source/controller/main/ElementSelector.hxx123
-rw-r--r--chart2/source/controller/main/FeatureCommandDispatchBase.cxx114
-rw-r--r--chart2/source/controller/main/FeatureCommandDispatchBase.hxx115
-rw-r--r--chart2/source/controller/main/ImplUndoManager.cxx505
-rw-r--r--chart2/source/controller/main/ImplUndoManager.hxx227
-rw-r--r--chart2/source/controller/main/ObjectHierarchy.cxx862
-rw-r--r--chart2/source/controller/main/PositionAndSizeHelper.cxx189
-rw-r--r--chart2/source/controller/main/SelectionHelper.cxx685
-rw-r--r--chart2/source/controller/main/SelectionHelper.hxx139
-rw-r--r--chart2/source/controller/main/ShapeController.cxx738
-rw-r--r--chart2/source/controller/main/ShapeController.hxx100
-rw-r--r--chart2/source/controller/main/ShapeToolbarController.cxx298
-rw-r--r--chart2/source/controller/main/ShapeToolbarController.hxx103
-rw-r--r--chart2/source/controller/main/StatusBarCommandDispatch.cxx156
-rw-r--r--chart2/source/controller/main/StatusBarCommandDispatch.hxx110
-rw-r--r--chart2/source/controller/main/UndoCommandDispatch.cxx147
-rw-r--r--chart2/source/controller/main/UndoCommandDispatch.hxx86
-rw-r--r--chart2/source/controller/main/UndoGuard.cxx143
-rw-r--r--chart2/source/controller/main/UndoManager.cxx440
-rw-r--r--chart2/source/controller/main/_serviceregistration_controller.cxx125
-rw-r--r--chart2/source/controller/main/makefile.mk84
-rw-r--r--chart2/source/controller/makefile.mk128
-rw-r--r--chart2/source/controller/menus/ShapeContextMenu.src124
-rw-r--r--chart2/source/controller/menus/ShapeEditContextMenu.src65
-rw-r--r--chart2/source/controller/menus/makefile.mk63
-rw-r--r--chart2/source/inc/AxisHelper.hxx247
-rw-r--r--chart2/source/inc/AxisIndexDefines.hxx38
-rw-r--r--chart2/source/inc/BaseGFXHelper.hxx102
-rw-r--r--chart2/source/inc/CachedDataSequence.hxx192
-rw-r--r--chart2/source/inc/CharacterProperties.hxx147
-rw-r--r--chart2/source/inc/ChartDebugTrace.hxx69
-rw-r--r--chart2/source/inc/ChartModelHelper.hxx115
-rw-r--r--chart2/source/inc/ChartTypeHelper.hxx104
-rw-r--r--chart2/source/inc/ChartViewHelper.hxx51
-rw-r--r--chart2/source/inc/CloneHelper.hxx124
-rw-r--r--chart2/source/inc/ColorPerPointHelper.hxx65
-rw-r--r--chart2/source/inc/CommonConverters.hxx279
-rw-r--r--chart2/source/inc/CommonFunctors.hxx228
-rw-r--r--chart2/source/inc/ConfigColorScheme.hxx94
-rw-r--r--chart2/source/inc/ConfigItemListener.hxx45
-rw-r--r--chart2/source/inc/ContainerHelper.hxx181
-rw-r--r--chart2/source/inc/ControllerLockGuard.hxx93
-rw-r--r--chart2/source/inc/DataSeriesHelper.hxx213
-rw-r--r--chart2/source/inc/DataSource.hxx83
-rw-r--r--chart2/source/inc/DataSourceHelper.hxx164
-rw-r--r--chart2/source/inc/DiagramHelper.hxx350
-rw-r--r--chart2/source/inc/DisposeHelper.hxx101
-rw-r--r--chart2/source/inc/ErrorBar.hxx160
-rw-r--r--chart2/source/inc/EventListenerHelper.hxx222
-rw-r--r--chart2/source/inc/ExplicitCategoriesProvider.hxx108
-rw-r--r--chart2/source/inc/ExponentialRegressionCurveCalculator.hxx74
-rw-r--r--chart2/source/inc/FastPropertyIdRanges.hxx57
-rw-r--r--chart2/source/inc/FillProperties.hxx91
-rw-r--r--chart2/source/inc/FormattedStringHelper.hxx57
-rwxr-xr-xchart2/source/inc/InternalData.hxx109
-rw-r--r--chart2/source/inc/InternalDataProvider.hxx246
-rw-r--r--chart2/source/inc/LabeledDataSequence.hxx115
-rw-r--r--chart2/source/inc/LegendHelper.hxx78
-rw-r--r--chart2/source/inc/LifeTime.hxx255
-rw-r--r--chart2/source/inc/LineProperties.hxx77
-rw-r--r--chart2/source/inc/LinearRegressionCurveCalculator.hxx74
-rw-r--r--chart2/source/inc/LogarithmicRegressionCurveCalculator.hxx74
-rw-r--r--chart2/source/inc/MeanValueRegressionCurveCalculator.hxx73
-rw-r--r--chart2/source/inc/MediaDescriptorHelper.hxx207
-rw-r--r--chart2/source/inc/ModifyListenerCallBack.hxx68
-rw-r--r--chart2/source/inc/ModifyListenerHelper.hxx307
-rw-r--r--chart2/source/inc/MutexContainer.hxx50
-rw-r--r--chart2/source/inc/NameContainer.hxx104
-rw-r--r--chart2/source/inc/NamedFillProperties.hxx75
-rw-r--r--chart2/source/inc/NamedLineProperties.hxx75
-rw-r--r--chart2/source/inc/NamedProperties.hxx62
-rw-r--r--chart2/source/inc/NoWarningThisInCTOR.hxx46
-rw-r--r--chart2/source/inc/OPropertySet.hxx319
-rw-r--r--chart2/source/inc/ObjectIdentifier.hxx278
-rw-r--r--chart2/source/inc/PotentialRegressionCurveCalculator.hxx76
-rw-r--r--chart2/source/inc/PropertyHelper.hxx197
-rw-r--r--chart2/source/inc/RangeHighlighter.hxx116
-rw-r--r--chart2/source/inc/ReferenceSizeProvider.hxx145
-rw-r--r--chart2/source/inc/RegressionCurveCalculator.hxx93
-rw-r--r--chart2/source/inc/RegressionCurveHelper.hxx241
-rw-r--r--chart2/source/inc/RelativePositionHelper.hxx120
-rw-r--r--chart2/source/inc/RelativeSizeHelper.hxx59
-rw-r--r--chart2/source/inc/ResId.hxx48
-rw-r--r--chart2/source/inc/RessourceManager.hxx53
-rw-r--r--chart2/source/inc/Scaling.hxx210
-rw-r--r--chart2/source/inc/SceneProperties.hxx96
-rw-r--r--chart2/source/inc/ServiceMacros.hxx146
-rw-r--r--chart2/source/inc/StackMode.hxx47
-rw-r--r--chart2/source/inc/StatisticsHelper.hxx133
-rw-r--r--chart2/source/inc/Strings.hrc409
-rw-r--r--chart2/source/inc/ThreeDHelper.hxx159
-rw-r--r--chart2/source/inc/TitleHelper.hxx101
-rw-r--r--chart2/source/inc/TrueGuard.hxx48
-rw-r--r--chart2/source/inc/UncachedDataSequence.hxx206
-rw-r--r--chart2/source/inc/UndoGuard.hxx120
-rw-r--r--chart2/source/inc/UndoManager.hxx180
-rw-r--r--chart2/source/inc/UserDefinedProperties.hxx69
-rw-r--r--chart2/source/inc/WeakListenerAdapter.hxx127
-rw-r--r--chart2/source/inc/WrappedDefaultProperty.hxx66
-rw-r--r--chart2/source/inc/WrappedDirectStateProperty.hxx53
-rw-r--r--chart2/source/inc/WrappedIgnoreProperty.hxx81
-rw-r--r--chart2/source/inc/WrappedProperty.hxx86
-rw-r--r--chart2/source/inc/WrappedPropertySet.hxx145
-rw-r--r--chart2/source/inc/XMLRangeHelper.hxx74
-rw-r--r--chart2/source/inc/charttoolsdllapi.hxx41
-rw-r--r--chart2/source/inc/chartview/ChartSfxItemIds.hxx262
-rw-r--r--chart2/source/inc/chartview/DataPointSymbolSupplier.hxx59
-rw-r--r--chart2/source/inc/chartview/DrawModelWrapper.hxx114
-rw-r--r--chart2/source/inc/chartview/ExplicitValueProvider.hxx119
-rw-r--r--chart2/source/inc/chartview/NumberFormatterWrapper.hxx82
-rw-r--r--chart2/source/inc/chartview/chartviewdllapi.hxx41
-rw-r--r--chart2/source/inc/chartview/servicenames_charttypes.hxx47
-rw-r--r--chart2/source/inc/exports.dxp3
-rw-r--r--chart2/source/inc/macros.hxx53
-rw-r--r--chart2/source/inc/servicenames.hxx71
-rw-r--r--chart2/source/inc/servicenames_charttypes.hxx49
-rw-r--r--chart2/source/inc/servicenames_coosystems.hxx43
-rw-r--r--chart2/source/inc/servicenames_dlwrapper.hxx41
-rw-r--r--chart2/source/model/filter/XMLFilter.cxx873
-rw-r--r--chart2/source/model/filter/makefile.mk49
-rw-r--r--chart2/source/model/inc/BaseCoordinateSystem.hxx190
-rw-r--r--chart2/source/model/inc/CartesianCoordinateSystem.hxx93
-rw-r--r--chart2/source/model/inc/ChartTypeManager.hxx92
-rw-r--r--chart2/source/model/inc/DataSeries.hxx230
-rw-r--r--chart2/source/model/inc/DataSeriesTree.hxx91
-rw-r--r--chart2/source/model/inc/Diagram.hxx241
-rw-r--r--chart2/source/model/inc/PolarCoordinateSystem.hxx93
-rw-r--r--chart2/source/model/inc/StockBar.hxx119
-rw-r--r--chart2/source/model/inc/XMLFilter.hxx223
-rw-r--r--chart2/source/model/inc/_serviceregistration_charttypes.hxx40
-rw-r--r--chart2/source/model/main/Axis.cxx646
-rw-r--r--chart2/source/model/main/Axis.hxx184
-rw-r--r--chart2/source/model/main/BaseCoordinateSystem.cxx409
-rw-r--r--chart2/source/model/main/CartesianCoordinateSystem.cxx155
-rwxr-xr-xchart2/source/model/main/ChartModel.cxx1379
-rw-r--r--chart2/source/model/main/ChartModel.hxx609
-rw-r--r--chart2/source/model/main/ChartModel_Persistence.cxx860
-rw-r--r--chart2/source/model/main/DataPoint.cxx319
-rw-r--r--chart2/source/model/main/DataPoint.hxx143
-rw-r--r--chart2/source/model/main/DataPointProperties.cxx438
-rw-r--r--chart2/source/model/main/DataPointProperties.hxx101
-rw-r--r--chart2/source/model/main/DataSeries.cxx624
-rw-r--r--chart2/source/model/main/DataSeriesProperties.cxx98
-rw-r--r--chart2/source/model/main/DataSeriesProperties.hxx63
-rw-r--r--chart2/source/model/main/Diagram.cxx713
-rw-r--r--chart2/source/model/main/FormattedString.cxx263
-rw-r--r--chart2/source/model/main/FormattedString.hxx140
-rw-r--r--chart2/source/model/main/GridProperties.cxx273
-rw-r--r--chart2/source/model/main/GridProperties.hxx128
-rw-r--r--chart2/source/model/main/LayoutContainer.cxx138
-rw-r--r--chart2/source/model/main/LayoutContainer.hxx90
-rw-r--r--chart2/source/model/main/Legend.cxx369
-rw-r--r--chart2/source/model/main/Legend.hxx154
-rw-r--r--chart2/source/model/main/PageBackground.cxx255
-rw-r--r--chart2/source/model/main/PageBackground.hxx132
-rw-r--r--chart2/source/model/main/PolarCoordinateSystem.cxx155
-rw-r--r--chart2/source/model/main/StockBar.cxx267
-rw-r--r--chart2/source/model/main/Title.cxx412
-rw-r--r--chart2/source/model/main/Title.hxx147
-rw-r--r--chart2/source/model/main/Wall.cxx260
-rw-r--r--chart2/source/model/main/Wall.hxx127
-rw-r--r--chart2/source/model/main/_serviceregistration_model.cxx220
-rw-r--r--chart2/source/model/main/makefile.mk67
-rw-r--r--chart2/source/model/makefile.mk100
-rw-r--r--chart2/source/model/template/AreaChartType.cxx77
-rw-r--r--chart2/source/model/template/AreaChartType.hxx64
-rw-r--r--chart2/source/model/template/AreaChartTypeTemplate.cxx281
-rw-r--r--chart2/source/model/template/AreaChartTypeTemplate.hxx103
-rw-r--r--chart2/source/model/template/BarChartType.cxx78
-rw-r--r--chart2/source/model/template/BarChartType.hxx64
-rw-r--r--chart2/source/model/template/BarChartTypeTemplate.cxx353
-rw-r--r--chart2/source/model/template/BarChartTypeTemplate.hxx121
-rw-r--r--chart2/source/model/template/BubbleChartType.cxx242
-rw-r--r--chart2/source/model/template/BubbleChartType.hxx86
-rw-r--r--chart2/source/model/template/BubbleChartTypeTemplate.cxx314
-rw-r--r--chart2/source/model/template/BubbleChartTypeTemplate.hxx101
-rw-r--r--chart2/source/model/template/BubbleDataInterpreter.cxx308
-rw-r--r--chart2/source/model/template/BubbleDataInterpreter.hxx61
-rw-r--r--chart2/source/model/template/CandleStickChartType.cxx355
-rw-r--r--chart2/source/model/template/CandleStickChartType.hxx90
-rw-r--r--chart2/source/model/template/ChartType.cxx325
-rw-r--r--chart2/source/model/template/ChartType.hxx183
-rw-r--r--chart2/source/model/template/ChartTypeManager.cxx619
-rw-r--r--chart2/source/model/template/ChartTypeTemplate.cxx933
-rw-r--r--chart2/source/model/template/ChartTypeTemplate.hxx299
-rw-r--r--chart2/source/model/template/ColumnChartType.cxx202
-rw-r--r--chart2/source/model/template/ColumnChartType.hxx74
-rw-r--r--chart2/source/model/template/ColumnLineChartTypeTemplate.cxx453
-rw-r--r--chart2/source/model/template/ColumnLineChartTypeTemplate.hxx119
-rw-r--r--chart2/source/model/template/ColumnLineDataInterpreter.cxx101
-rw-r--r--chart2/source/model/template/ColumnLineDataInterpreter.hxx59
-rw-r--r--chart2/source/model/template/DataInterpreter.cxx461
-rw-r--r--chart2/source/model/template/DataInterpreter.hxx100
-rw-r--r--chart2/source/model/template/FilledNetChartType.cxx94
-rw-r--r--chart2/source/model/template/FilledNetChartType.hxx63
-rw-r--r--chart2/source/model/template/LineChartType.cxx214
-rw-r--r--chart2/source/model/template/LineChartType.hxx75
-rw-r--r--chart2/source/model/template/LineChartTypeTemplate.cxx412
-rw-r--r--chart2/source/model/template/LineChartTypeTemplate.hxx109
-rw-r--r--chart2/source/model/template/NetChartType.cxx180
-rw-r--r--chart2/source/model/template/NetChartType.hxx93
-rw-r--r--chart2/source/model/template/NetChartTypeTemplate.cxx229
-rw-r--r--chart2/source/model/template/NetChartTypeTemplate.hxx87
-rw-r--r--chart2/source/model/template/PieChartType.cxx239
-rw-r--r--chart2/source/model/template/PieChartType.hxx81
-rw-r--r--chart2/source/model/template/PieChartTypeTemplate.cxx661
-rw-r--r--chart2/source/model/template/PieChartTypeTemplate.hxx140
-rw-r--r--chart2/source/model/template/ScatterChartType.cxx296
-rw-r--r--chart2/source/model/template/ScatterChartType.hxx91
-rw-r--r--chart2/source/model/template/ScatterChartTypeTemplate.cxx432
-rw-r--r--chart2/source/model/template/ScatterChartTypeTemplate.hxx110
-rw-r--r--chart2/source/model/template/StockChartTypeTemplate.cxx560
-rw-r--r--chart2/source/model/template/StockChartTypeTemplate.hxx138
-rw-r--r--chart2/source/model/template/StockDataInterpreter.cxx344
-rw-r--r--chart2/source/model/template/StockDataInterpreter.hxx69
-rw-r--r--chart2/source/model/template/XYDataInterpreter.cxx273
-rw-r--r--chart2/source/model/template/XYDataInterpreter.hxx61
-rw-r--r--chart2/source/model/template/_serviceregistration_charttypes.cxx138
-rw-r--r--chart2/source/model/template/makefile.mk82
-rw-r--r--chart2/source/tools/AxisHelper.cxx976
-rw-r--r--chart2/source/tools/BaseGFXHelper.cxx222
-rw-r--r--chart2/source/tools/CachedDataSequence.cxx409
-rw-r--r--chart2/source/tools/CharacterProperties.cxx608
-rw-r--r--chart2/source/tools/ChartDebugTrace.cxx417
-rw-r--r--chart2/source/tools/ChartModelHelper.cxx267
-rw-r--r--chart2/source/tools/ChartTypeHelper.cxx685
-rw-r--r--chart2/source/tools/ChartViewHelper.cxx72
-rw-r--r--chart2/source/tools/ColorPerPointHelper.cxx97
-rw-r--r--chart2/source/tools/CommonConverters.cxx549
-rw-r--r--chart2/source/tools/ConfigColorScheme.cxx202
-rw-r--r--chart2/source/tools/ControllerLockGuard.cxx89
-rw-r--r--chart2/source/tools/DataSeriesHelper.cxx918
-rw-r--r--chart2/source/tools/DataSource.cxx91
-rw-r--r--chart2/source/tools/DataSourceHelper.cxx552
-rw-r--r--chart2/source/tools/DiagramHelper.cxx1559
-rw-r--r--chart2/source/tools/ErrorBar.cxx363
-rw-r--r--chart2/source/tools/ExplicitCategoriesProvider.cxx422
-rw-r--r--chart2/source/tools/ExponentialRegressionCurveCalculator.cxx183
-rw-r--r--chart2/source/tools/FillProperties.cxx277
-rw-r--r--chart2/source/tools/FormattedStringHelper.cxx80
-rw-r--r--chart2/source/tools/ImplOPropertySet.cxx207
-rw-r--r--chart2/source/tools/ImplOPropertySet.hxx96
-rwxr-xr-xchart2/source/tools/InternalData.cxx530
-rw-r--r--chart2/source/tools/InternalDataProvider.cxx1314
-rw-r--r--chart2/source/tools/LabeledDataSequence.cxx179
-rw-r--r--chart2/source/tools/LegendHelper.cxx147
-rw-r--r--chart2/source/tools/LifeTime.cxx546
-rw-r--r--chart2/source/tools/LineProperties.cxx185
-rw-r--r--chart2/source/tools/LinearRegressionCurveCalculator.cxx179
-rw-r--r--chart2/source/tools/LogarithmicRegressionCurveCalculator.cxx191
-rw-r--r--chart2/source/tools/MeanValueRegressionCurveCalculator.cxx143
-rw-r--r--chart2/source/tools/MediaDescriptorHelper.cxx221
-rw-r--r--chart2/source/tools/ModifyListenerCallBack.cxx134
-rw-r--r--chart2/source/tools/ModifyListenerHelper.cxx213
-rw-r--r--chart2/source/tools/MutexContainer.cxx43
-rw-r--r--chart2/source/tools/NameContainer.cxx189
-rw-r--r--chart2/source/tools/NamedFillProperties.cxx114
-rw-r--r--chart2/source/tools/NamedLineProperties.cxx99
-rw-r--r--chart2/source/tools/NamedProperties.cxx59
-rw-r--r--chart2/source/tools/OPropertySet.cxx530
-rw-r--r--chart2/source/tools/ObjectIdentifier.cxx1491
-rw-r--r--chart2/source/tools/PotentialRegressionCurveCalculator.cxx177
-rw-r--r--chart2/source/tools/PropertyHelper.cxx314
-rw-r--r--chart2/source/tools/RangeHighlighter.cxx406
-rw-r--r--chart2/source/tools/ReferenceSizeProvider.cxx378
-rw-r--r--chart2/source/tools/RegressionCalculationHelper.hxx131
-rw-r--r--chart2/source/tools/RegressionCurveCalculator.cxx168
-rw-r--r--chart2/source/tools/RegressionCurveHelper.cxx736
-rw-r--r--chart2/source/tools/RegressionCurveModel.cxx441
-rw-r--r--chart2/source/tools/RegressionCurveModel.hxx259
-rw-r--r--chart2/source/tools/RegressionEquation.cxx362
-rw-r--r--chart2/source/tools/RegressionEquation.hxx143
-rw-r--r--chart2/source/tools/RelativePositionHelper.cxx399
-rw-r--r--chart2/source/tools/RelativeSizeHelper.cxx100
-rw-r--r--chart2/source/tools/ResId.cxx47
-rw-r--r--chart2/source/tools/RessourceManager.cxx49
-rw-r--r--chart2/source/tools/Scaling.cxx271
-rw-r--r--chart2/source/tools/SceneProperties.cxx382
-rw-r--r--chart2/source/tools/StatisticsHelper.cxx403
-rw-r--r--chart2/source/tools/ThreeDHelper.cxx1527
-rw-r--r--chart2/source/tools/TitleHelper.cxx378
-rw-r--r--chart2/source/tools/TrueGuard.cxx47
-rw-r--r--chart2/source/tools/UncachedDataSequence.cxx379
-rw-r--r--chart2/source/tools/UserDefinedProperties.cxx73
-rw-r--r--chart2/source/tools/WeakListenerAdapter.cxx76
-rw-r--r--chart2/source/tools/WrappedDefaultProperty.cxx92
-rw-r--r--chart2/source/tools/WrappedDirectStateProperty.cxx59
-rw-r--r--chart2/source/tools/WrappedIgnoreProperty.cxx148
-rw-r--r--chart2/source/tools/WrappedProperty.cxx150
-rw-r--r--chart2/source/tools/WrappedPropertySet.cxx495
-rw-r--r--chart2/source/tools/XMLRangeHelper.cxx418
-rw-r--r--chart2/source/tools/_serviceregistration_tools.cxx200
-rw-r--r--chart2/source/tools/exports.flt3
-rw-r--r--chart2/source/tools/makefile.mk189
-rw-r--r--chart2/source/view/axes/MinimumAndMaximumSupplier.cxx201
-rw-r--r--chart2/source/view/axes/ScaleAutomatism.cxx760
-rw-r--r--chart2/source/view/axes/TickmarkHelper.cxx937
-rw-r--r--chart2/source/view/axes/TickmarkHelper.hxx276
-rw-r--r--chart2/source/view/axes/TickmarkProperties.hxx53
-rw-r--r--chart2/source/view/axes/VAxisBase.cxx253
-rw-r--r--chart2/source/view/axes/VAxisBase.hxx107
-rw-r--r--chart2/source/view/axes/VAxisOrGridBase.cxx98
-rw-r--r--chart2/source/view/axes/VAxisOrGridBase.hxx83
-rw-r--r--chart2/source/view/axes/VAxisProperties.cxx486
-rw-r--r--chart2/source/view/axes/VAxisProperties.hxx168
-rw-r--r--chart2/source/view/axes/VCartesianAxis.cxx1600
-rw-r--r--chart2/source/view/axes/VCartesianAxis.hxx146
-rw-r--r--chart2/source/view/axes/VCartesianCoordinateSystem.cxx250
-rw-r--r--chart2/source/view/axes/VCartesianCoordinateSystem.hxx64
-rw-r--r--chart2/source/view/axes/VCartesianGrid.cxx339
-rw-r--r--chart2/source/view/axes/VCartesianGrid.hxx71
-rw-r--r--chart2/source/view/axes/VCoordinateSystem.cxx598
-rw-r--r--chart2/source/view/axes/VPolarAngleAxis.cxx234
-rw-r--r--chart2/source/view/axes/VPolarAngleAxis.hxx66
-rw-r--r--chart2/source/view/axes/VPolarAxis.cxx83
-rw-r--r--chart2/source/view/axes/VPolarAxis.hxx71
-rw-r--r--chart2/source/view/axes/VPolarCoordinateSystem.cxx211
-rw-r--r--chart2/source/view/axes/VPolarCoordinateSystem.hxx68
-rw-r--r--chart2/source/view/axes/VPolarGrid.cxx273
-rw-r--r--chart2/source/view/axes/VPolarGrid.hxx96
-rw-r--r--chart2/source/view/axes/VPolarRadiusAxis.cxx186
-rw-r--r--chart2/source/view/axes/VPolarRadiusAxis.hxx98
-rw-r--r--chart2/source/view/axes/makefile.mk66
-rw-r--r--chart2/source/view/charttypes/AreaChart.cxx1005
-rw-r--r--chart2/source/view/charttypes/AreaChart.hxx134
-rwxr-xr-xchart2/source/view/charttypes/BarChart.cxx1019
-rw-r--r--chart2/source/view/charttypes/BarChart.hxx110
-rw-r--r--chart2/source/view/charttypes/BarPositionHelper.cxx138
-rw-r--r--chart2/source/view/charttypes/BarPositionHelper.hxx76
-rw-r--r--chart2/source/view/charttypes/BubbleChart.cxx417
-rw-r--r--chart2/source/view/charttypes/BubbleChart.hxx94
-rw-r--r--chart2/source/view/charttypes/CandleStickChart.cxx398
-rw-r--r--chart2/source/view/charttypes/CandleStickChart.hxx89
-rw-r--r--chart2/source/view/charttypes/CategoryPositionHelper.cxx100
-rw-r--r--chart2/source/view/charttypes/CategoryPositionHelper.hxx68
-rw-r--r--chart2/source/view/charttypes/PieChart.cxx897
-rw-r--r--chart2/source/view/charttypes/PieChart.hxx145
-rw-r--r--chart2/source/view/charttypes/Splines.cxx545
-rw-r--r--chart2/source/view/charttypes/Splines.hxx61
-rw-r--r--chart2/source/view/charttypes/VSeriesPlotter.cxx2110
-rw-r--r--chart2/source/view/charttypes/makefile.mk55
-rw-r--r--chart2/source/view/diagram/VDiagram.cxx811
-rw-r--r--chart2/source/view/diagram/makefile.mk48
-rw-r--r--chart2/source/view/exports.flt4
-rw-r--r--chart2/source/view/inc/Clipping.hxx70
-rw-r--r--chart2/source/view/inc/LabelAlignment.hxx41
-rw-r--r--chart2/source/view/inc/LabelPositionHelper.hxx86
-rw-r--r--chart2/source/view/inc/LegendEntryProvider.hxx63
-rw-r--r--chart2/source/view/inc/Linear3DTransformation.hxx67
-rw-r--r--chart2/source/view/inc/MinimumAndMaximumSupplier.hxx100
-rw-r--r--chart2/source/view/inc/PlotterBase.hxx126
-rw-r--r--chart2/source/view/inc/PlottingPositionHelper.hxx406
-rw-r--r--chart2/source/view/inc/PolarLabelPositionHelper.hxx76
-rw-r--r--chart2/source/view/inc/PropertyMapper.hxx133
-rw-r--r--chart2/source/view/inc/ScaleAutomatism.hxx119
-rw-r--r--chart2/source/view/inc/ShapeFactory.hxx254
-rw-r--r--chart2/source/view/inc/Stripe.hxx89
-rw-r--r--chart2/source/view/inc/VCoordinateSystem.hxx212
-rw-r--r--chart2/source/view/inc/VDataSeries.hxx264
-rw-r--r--chart2/source/view/inc/VDiagram.hxx136
-rw-r--r--chart2/source/view/inc/VLegendSymbolFactory.hxx77
-rw-r--r--chart2/source/view/inc/VLineProperties.hxx61
-rw-r--r--chart2/source/view/inc/VPolarTransformation.hxx67
-rw-r--r--chart2/source/view/inc/VSeriesPlotter.hxx453
-rw-r--r--chart2/source/view/inc/ViewDefines.hxx47
-rw-r--r--chart2/source/view/main/ChartItemPool.cxx258
-rw-r--r--chart2/source/view/main/ChartItemPool.hxx58
-rw-r--r--chart2/source/view/main/ChartView.cxx3187
-rw-r--r--chart2/source/view/main/ChartView.hxx261
-rw-r--r--chart2/source/view/main/Clipping.cxx304
-rw-r--r--chart2/source/view/main/DataPointSymbolSupplier.cxx66
-rw-r--r--chart2/source/view/main/DrawModelWrapper.cxx411
-rw-r--r--chart2/source/view/main/LabelPositionHelper.cxx488
-rw-r--r--chart2/source/view/main/Linear3DTransformation.cxx107
-rw-r--r--chart2/source/view/main/NumberFormatterWrapper.cxx169
-rw-r--r--chart2/source/view/main/PlotterBase.cxx135
-rw-r--r--chart2/source/view/main/PlottingPositionHelper.cxx667
-rw-r--r--chart2/source/view/main/PolarLabelPositionHelper.cxx188
-rw-r--r--chart2/source/view/main/PropertyMapper.cxx539
-rw-r--r--chart2/source/view/main/ShapeFactory.cxx2111
-rw-r--r--chart2/source/view/main/Stripe.cxx360
-rw-r--r--chart2/source/view/main/VDataSeries.cxx986
-rw-r--r--chart2/source/view/main/VLegend.cxx834
-rw-r--r--chart2/source/view/main/VLegend.hxx111
-rw-r--r--chart2/source/view/main/VLegendSymbolFactory.cxx374
-rw-r--r--chart2/source/view/main/VLineProperties.cxx109
-rw-r--r--chart2/source/view/main/VPolarTransformation.cxx94
-rw-r--r--chart2/source/view/main/VTitle.cxx299
-rw-r--r--chart2/source/view/main/VTitle.hxx83
-rw-r--r--chart2/source/view/main/_serviceregistration_view.cxx71
-rw-r--r--chart2/source/view/main/makefile.mk68
-rw-r--r--chart2/source/view/makefile.mk120
-rw-r--r--chart2/uiconfig/accelerator/en-US/default.xml30
-rw-r--r--chart2/uiconfig/menubar/menubar.xml156
-rw-r--r--chart2/uiconfig/statusbar/statusbar.xml6
-rw-r--r--chart2/uiconfig/toolbar/arrowshapes.xml34
-rw-r--r--chart2/uiconfig/toolbar/basicshapes.xml29
-rw-r--r--chart2/uiconfig/toolbar/calloutshapes.xml11
-rw-r--r--chart2/uiconfig/toolbar/drawbar.xml20
-rw-r--r--chart2/uiconfig/toolbar/flowchartshapes.xml36
-rw-r--r--chart2/uiconfig/toolbar/standardbar.xml22
-rw-r--r--chart2/uiconfig/toolbar/starshapes.xml17
-rw-r--r--chart2/uiconfig/toolbar/symbolshapes.xml24
-rw-r--r--chart2/uiconfig/toolbar/toolbar.xml15
-rw-r--r--chart2/util/makefile.mk60
-rw-r--r--chart2/util/makefile.pmk46
-rw-r--r--chart2/util/target.pmk32
-rw-r--r--chart2/workbench/addin/exports.dxp3
-rw-r--r--chart2/workbench/addin/makefile.mk86
-rw-r--r--chart2/workbench/addin/sampleaddin.cxx716
-rw-r--r--chart2/workbench/addin/sampleaddin.def7
-rw-r--r--chart2/workbench/addin/sampleaddin.hxx161
-rw-r--r--cli_ure/inc/makefile.mk48
-rw-r--r--cli_ure/inc/pch/precompiled_cli_ure.cxx29
-rw-r--r--cli_ure/inc/pch/precompiled_cli_ure.hxx32
-rw-r--r--cli_ure/prj/build.lst13
-rw-r--r--cli_ure/prj/d.lst13
-rw-r--r--cli_ure/qa/climaker/ClimakerTestCase.java98
-rw-r--r--cli_ure/qa/climaker/climaker.cs1487
-rw-r--r--cli_ure/qa/climaker/makefile.mk135
-rw-r--r--cli_ure/qa/climaker/testobjects.cs588
-rw-r--r--cli_ure/qa/climaker/types.idl483
-rw-r--r--cli_ure/qa/versioning/readme.txt28
-rw-r--r--cli_ure/readme.txt272
-rw-r--r--cli_ure/source/basetypes/assembly.cs2
-rw-r--r--cli_ure/source/basetypes/cli_basetypes_config11
-rw-r--r--cli_ure/source/basetypes/makefile.mk105
-rw-r--r--cli_ure/source/basetypes/uno/Any.cs211
-rw-r--r--cli_ure/source/basetypes/uno/BoundAttribute.cs46
-rw-r--r--cli_ure/source/basetypes/uno/ExceptionAttribute.cs70
-rw-r--r--cli_ure/source/basetypes/uno/OnewayAttribute.cs43
-rw-r--r--cli_ure/source/basetypes/uno/ParameterizedTypeAttribute.cs68
-rw-r--r--cli_ure/source/basetypes/uno/PolymorphicType.cs443
-rw-r--r--cli_ure/source/basetypes/uno/TypeArgumentsAttribute.cs84
-rw-r--r--cli_ure/source/basetypes/uno/TypeParametersAttribute.cs65
-rw-r--r--cli_ure/source/climaker/climaker.exe.config10
-rw-r--r--cli_ure/source/climaker/climaker_app.cxx749
-rw-r--r--cli_ure/source/climaker/climaker_emit.cxx2323
-rw-r--r--cli_ure/source/climaker/climaker_share.h268
-rw-r--r--cli_ure/source/climaker/makefile.mk137
-rw-r--r--cli_ure/source/cliuno.snkbin0 -> 596 bytes
-rw-r--r--cli_ure/source/makefile.mk48
-rw-r--r--cli_ure/source/native/assembly.cxx36
-rw-r--r--cli_ure/source/native/cli_cppuhelper_config11
-rw-r--r--cli_ure/source/native/makefile.mk184
-rw-r--r--cli_ure/source/native/msvc.map6
-rw-r--r--cli_ure/source/native/native_bootstrap.cxx433
-rw-r--r--cli_ure/source/native/native_share.h120
-rw-r--r--cli_ure/source/native/path.cxx218
-rw-r--r--cli_ure/source/scripts/increment_version.pl281
-rw-r--r--cli_ure/source/scripts/subst_template.pl133
-rw-r--r--cli_ure/source/uno_bridge/README.txt20
-rw-r--r--cli_ure/source/uno_bridge/bridge_exports.map8
-rw-r--r--cli_ure/source/uno_bridge/cli_base.h180
-rw-r--r--cli_ure/source/uno_bridge/cli_bridge.cxx369
-rw-r--r--cli_ure/source/uno_bridge/cli_bridge.h120
-rw-r--r--cli_ure/source/uno_bridge/cli_data.cxx2011
-rw-r--r--cli_ure/source/uno_bridge/cli_environment.cxx173
-rw-r--r--cli_ure/source/uno_bridge/cli_environment.h114
-rw-r--r--cli_ure/source/uno_bridge/cli_proxy.cxx1178
-rw-r--r--cli_ure/source/uno_bridge/cli_proxy.h299
-rw-r--r--cli_ure/source/uno_bridge/cli_uno.cxx290
-rw-r--r--cli_ure/source/uno_bridge/makefile.mk95
-rw-r--r--cli_ure/source/ure/assembly.cs2
-rw-r--r--cli_ure/source/ure/cli_ure_config11
-rw-r--r--cli_ure/source/ure/makefile.mk102
-rw-r--r--cli_ure/source/ure/uno/util/DisposeGuard.cs59
-rw-r--r--cli_ure/source/ure/uno/util/WeakAdapter.cs120
-rw-r--r--cli_ure/source/ure/uno/util/WeakBase.cs178
-rw-r--r--cli_ure/source/ure/uno/util/WeakComponentBase.cs194
-rw-r--r--cli_ure/unotypes/cli_uretypes_config11
-rw-r--r--cli_ure/unotypes/makefile.mk79
-rw-r--r--cli_ure/util/makefile.pmk35
-rw-r--r--cli_ure/util/target.pmk44
-rw-r--r--cli_ure/version/incversions.txt39
-rw-r--r--cli_ure/version/makefile.mk60
-rw-r--r--cli_ure/version/version.txt47
-rw-r--r--cli_ure/workbench/dynload/dynload.cs35
-rw-r--r--cli_ure/workbench/dynload/makefile.mk68
-rw-r--r--cli_ure/workbench/dynload/readme.txt2
-rwxr-xr-xcodemaker/codemaker.pmk53
-rw-r--r--codemaker/inc/codemaker/codemaker.hxx56
-rw-r--r--codemaker/inc/codemaker/commoncpp.hxx57
-rw-r--r--codemaker/inc/codemaker/commonjava.hxx44
-rw-r--r--codemaker/inc/codemaker/dependencies.hxx149
-rw-r--r--codemaker/inc/codemaker/exceptiontree.hxx124
-rw-r--r--codemaker/inc/codemaker/generatedtypeset.hxx79
-rw-r--r--codemaker/inc/codemaker/global.hxx151
-rw-r--r--codemaker/inc/codemaker/options.hxx98
-rw-r--r--codemaker/inc/codemaker/typemanager.hxx182
-rw-r--r--codemaker/inc/codemaker/unotype.hxx110
-rw-r--r--codemaker/inc/makefile.mk47
-rw-r--r--codemaker/inc/pch/precompiled_codemaker.cxx29
-rw-r--r--codemaker/inc/pch/precompiled_codemaker.hxx32
-rw-r--r--codemaker/prj/build.lst11
-rw-r--r--codemaker/prj/d.lst14
-rw-r--r--codemaker/source/bonobowrappermaker/corbamaker.cxx239
-rw-r--r--codemaker/source/bonobowrappermaker/corbaoptions.cxx256
-rw-r--r--codemaker/source/bonobowrappermaker/corbaoptions.hxx51
-rw-r--r--codemaker/source/bonobowrappermaker/corbatype.cxx2782
-rw-r--r--codemaker/source/bonobowrappermaker/corbatype.hxx310
-rw-r--r--codemaker/source/bonobowrappermaker/makefile.mk62
-rw-r--r--codemaker/source/codemaker/codemaker.cxx188
-rw-r--r--codemaker/source/codemaker/dependencies.cxx281
-rw-r--r--codemaker/source/codemaker/exceptiontree.cxx106
-rw-r--r--codemaker/source/codemaker/global.cxx449
-rw-r--r--codemaker/source/codemaker/makefile.mk51
-rw-r--r--codemaker/source/codemaker/options.cxx99
-rw-r--r--codemaker/source/codemaker/typemanager.cxx403
-rw-r--r--codemaker/source/codemaker/unotype.cxx103
-rw-r--r--codemaker/source/commoncpp/commoncpp.cxx355
-rw-r--r--codemaker/source/commoncpp/makefile.mk42
-rw-r--r--codemaker/source/commonjava/commonjava.cxx167
-rw-r--r--codemaker/source/commonjava/makefile.mk42
-rw-r--r--codemaker/source/cppumaker/cppumaker.cxx244
-rw-r--r--codemaker/source/cppumaker/cppuoptions.cxx355
-rw-r--r--codemaker/source/cppumaker/cppuoptions.hxx51
-rw-r--r--codemaker/source/cppumaker/cpputype.cxx4504
-rw-r--r--codemaker/source/cppumaker/cpputype.hxx406
-rw-r--r--codemaker/source/cppumaker/dumputils.cxx91
-rw-r--r--codemaker/source/cppumaker/dumputils.hxx46
-rw-r--r--codemaker/source/cppumaker/includes.cxx280
-rw-r--r--codemaker/source/cppumaker/includes.hxx121
-rw-r--r--codemaker/source/cppumaker/makefile.mk65
-rw-r--r--codemaker/source/cunomaker/cunomaker.cxx186
-rw-r--r--codemaker/source/cunomaker/cunooptions.cxx330
-rw-r--r--codemaker/source/cunomaker/cunooptions.hxx51
-rw-r--r--codemaker/source/cunomaker/cunotype.cxx3533
-rw-r--r--codemaker/source/cunomaker/cunotype.hxx309
-rw-r--r--codemaker/source/cunomaker/makefile.mk61
-rw-r--r--codemaker/source/idlmaker/idlmaker.cxx186
-rw-r--r--codemaker/source/idlmaker/idloptions.cxx251
-rw-r--r--codemaker/source/idlmaker/idloptions.hxx51
-rw-r--r--codemaker/source/idlmaker/idltype.cxx1752
-rw-r--r--codemaker/source/idlmaker/idltype.hxx249
-rw-r--r--codemaker/source/idlmaker/makefile.mk62
-rw-r--r--codemaker/source/javamaker/classfile.cxx903
-rw-r--r--codemaker/source/javamaker/classfile.hxx274
-rw-r--r--codemaker/source/javamaker/javamaker.cxx247
-rw-r--r--codemaker/source/javamaker/javaoptions.cxx299
-rw-r--r--codemaker/source/javamaker/javaoptions.hxx51
-rw-r--r--codemaker/source/javamaker/javatype.cxx3374
-rw-r--r--codemaker/source/javamaker/javatype.hxx45
-rw-r--r--codemaker/source/javamaker/makefile.mk58
-rw-r--r--codemaker/test/cppumaker/makefile.mk73
-rw-r--r--codemaker/test/cppumaker/test_codemaker_cppumaker.cxx567
-rw-r--r--codemaker/test/cppumaker/types.idl717
-rw-r--r--codemaker/test/cppumaker/version.map34
-rw-r--r--codemaker/test/javamaker/Test.java559
-rw-r--r--codemaker/test/javamaker/java15/Test.java100
-rw-r--r--codemaker/test/javamaker/java15/makefile.mk41
-rw-r--r--codemaker/test/javamaker/java15/types.idl50
-rw-r--r--codemaker/test/javamaker/makefile.mk41
-rw-r--r--codemaker/test/javamaker/types.idl433
-rw-r--r--comphelper/inc/comphelper/ChainablePropertySet.hxx156
-rw-r--r--comphelper/inc/comphelper/ChainablePropertySetInfo.hxx77
-rw-r--r--comphelper/inc/comphelper/IdPropArrayHelper.hxx123
-rw-r--r--comphelper/inc/comphelper/InlineContainer.hxx149
-rw-r--r--comphelper/inc/comphelper/MasterPropertySet.hxx155
-rw-r--r--comphelper/inc/comphelper/MasterPropertySetInfo.hxx69
-rw-r--r--comphelper/inc/comphelper/PropertyInfoHash.hxx71
-rw-r--r--comphelper/inc/comphelper/SelectionMultiplex.hxx117
-rw-r--r--comphelper/inc/comphelper/SettingsHelper.hxx123
-rw-r--r--comphelper/inc/comphelper/TypeGeneration.hxx124
-rw-r--r--comphelper/inc/comphelper/accessiblecomponenthelper.hxx144
-rw-r--r--comphelper/inc/comphelper/accessiblecontexthelper.hxx376
-rw-r--r--comphelper/inc/comphelper/accessibleeventbuffer.hxx133
-rw-r--r--comphelper/inc/comphelper/accessibleeventnotifier.hxx173
-rw-r--r--comphelper/inc/comphelper/accessiblekeybindinghelper.hxx83
-rw-r--r--comphelper/inc/comphelper/accessibleselectionhelper.hxx134
-rw-r--r--comphelper/inc/comphelper/accessibletexthelper.hxx185
-rw-r--r--comphelper/inc/comphelper/accessiblewrapper.hxx411
-rw-r--r--comphelper/inc/comphelper/accimplaccess.hxx166
-rw-r--r--comphelper/inc/comphelper/anytostring.hxx50
-rw-r--r--comphelper/inc/comphelper/asyncnotification.hxx198
-rw-r--r--comphelper/inc/comphelper/attributelist.hxx77
-rw-r--r--comphelper/inc/comphelper/basicio.hxx106
-rw-r--r--comphelper/inc/comphelper/broadcasthelper.hxx69
-rw-r--r--comphelper/inc/comphelper/classids.hxx574
-rw-r--r--comphelper/inc/comphelper/comphelperdllapi.h14
-rw-r--r--comphelper/inc/comphelper/componentbase.hxx161
-rw-r--r--comphelper/inc/comphelper/componentcontext.hxx252
-rw-r--r--comphelper/inc/comphelper/componentfactory.hxx118
-rw-r--r--comphelper/inc/comphelper/componentmodule.hxx441
-rw-r--r--comphelper/inc/comphelper/composedprops.hxx127
-rw-r--r--comphelper/inc/comphelper/configurationhelper.hxx261
-rw-r--r--comphelper/inc/comphelper/container.hxx85
-rw-r--r--comphelper/inc/comphelper/containermultiplexer.hxx115
-rw-r--r--comphelper/inc/comphelper/docpasswordhelper.hxx320
-rwxr-xr-xcomphelper/inc/comphelper/docpasswordrequest.hxx103
-rw-r--r--comphelper/inc/comphelper/documentconstants.hxx113
-rw-r--r--comphelper/inc/comphelper/documentinfo.hxx59
-rw-r--r--comphelper/inc/comphelper/embeddedobjectcontainer.hxx188
-rw-r--r--comphelper/inc/comphelper/enumhelper.hxx150
-rw-r--r--comphelper/inc/comphelper/eventattachermgr.hxx68
-rw-r--r--comphelper/inc/comphelper/evtlistenerhlp.hxx56
-rwxr-xr-xcomphelper/inc/comphelper/evtmethodhelper.hxx41
-rw-r--r--comphelper/inc/comphelper/extract.hxx164
-rw-r--r--comphelper/inc/comphelper/fileformat.h41
-rw-r--r--comphelper/inc/comphelper/genericpropertyset.hxx41
-rw-r--r--comphelper/inc/comphelper/guarding.hxx63
-rw-r--r--comphelper/inc/comphelper/ihwrapnofilter.hxx102
-rw-r--r--comphelper/inc/comphelper/implbase_var.hxx403
-rw-r--r--comphelper/inc/comphelper/implementationreference.hxx273
-rw-r--r--comphelper/inc/comphelper/interaction.hxx170
-rw-r--r--comphelper/inc/comphelper/legacysingletonfactory.hxx72
-rw-r--r--comphelper/inc/comphelper/listenernotification.hxx308
-rw-r--r--comphelper/inc/comphelper/locale.hxx443
-rw-r--r--comphelper/inc/comphelper/logging.hxx794
-rw-r--r--comphelper/inc/comphelper/make_shared_from_uno.hxx75
-rw-r--r--comphelper/inc/comphelper/makesequence.hxx87
-rw-r--r--comphelper/inc/comphelper/mediadescriptor.hxx340
-rw-r--r--comphelper/inc/comphelper/mimeconfighelper.hxx133
-rw-r--r--comphelper/inc/comphelper/namecontainer.hxx42
-rw-r--r--comphelper/inc/comphelper/namedvaluecollection.hxx355
-rw-r--r--comphelper/inc/comphelper/numberedcollection.hxx198
-rw-r--r--comphelper/inc/comphelper/numbers.hxx74
-rw-r--r--comphelper/inc/comphelper/officeresourcebundle.hxx116
-rw-r--r--comphelper/inc/comphelper/ofopxmlhelper.hxx139
-rw-r--r--comphelper/inc/comphelper/optional.hxx90
-rw-r--r--comphelper/inc/comphelper/optionalvalue.hxx187
-rw-r--r--comphelper/inc/comphelper/oslfile2streamwrap.hxx108
-rw-r--r--comphelper/inc/comphelper/otransactedfilestream.hxx136
-rw-r--r--comphelper/inc/comphelper/processfactory.hxx98
-rw-r--r--comphelper/inc/comphelper/propagg.hxx329
-rw-r--r--comphelper/inc/comphelper/proparrhlp.hxx182
-rw-r--r--comphelper/inc/comphelper/property.hxx238
-rw-r--r--comphelper/inc/comphelper/propertybag.hxx237
-rw-r--r--comphelper/inc/comphelper/propertycontainer.hxx97
-rw-r--r--comphelper/inc/comphelper/propertycontainerhelper.hxx218
-rw-r--r--comphelper/inc/comphelper/propertysethelper.hxx102
-rw-r--r--comphelper/inc/comphelper/propertysetinfo.hxx103
-rw-r--r--comphelper/inc/comphelper/propertystatecontainer.hxx120
-rw-r--r--comphelper/inc/comphelper/propmultiplex.hxx116
-rw-r--r--comphelper/inc/comphelper/propstate.hxx112
-rw-r--r--comphelper/inc/comphelper/proxyaggregation.hxx229
-rw-r--r--comphelper/inc/comphelper/querydeep.hxx484
-rw-r--r--comphelper/inc/comphelper/regpathhelper.hxx71
-rw-r--r--comphelper/inc/comphelper/scopeguard.hxx72
-rw-r--r--comphelper/inc/comphelper/seekableinput.hxx84
-rw-r--r--comphelper/inc/comphelper/seqstream.hxx146
-rw-r--r--comphelper/inc/comphelper/sequence.hxx389
-rw-r--r--comphelper/inc/comphelper/sequenceashashmap.hxx384
-rw-r--r--comphelper/inc/comphelper/sequenceasvector.hxx247
-rw-r--r--comphelper/inc/comphelper/servicedecl.hxx459
-rw-r--r--comphelper/inc/comphelper/servicehelper.hxx105
-rw-r--r--comphelper/inc/comphelper/serviceinfohelper.hxx63
-rw-r--r--comphelper/inc/comphelper/sharedmutex.hxx91
-rw-r--r--comphelper/inc/comphelper/stillreadwriteinteraction.hxx69
-rw-r--r--comphelper/inc/comphelper/stl_types.hxx282
-rw-r--r--comphelper/inc/comphelper/stlunosequence.hxx86
-rw-r--r--comphelper/inc/comphelper/storagehelper.hxx171
-rw-r--r--comphelper/inc/comphelper/streamsection.hxx88
-rw-r--r--comphelper/inc/comphelper/string.hxx135
-rw-r--r--comphelper/inc/comphelper/synchronousdispatch.hxx74
-rw-r--r--comphelper/inc/comphelper/types.hxx180
-rw-r--r--comphelper/inc/comphelper/uieventslogger.hxx57
-rw-r--r--comphelper/inc/comphelper/uno3.hxx302
-rw-r--r--comphelper/inc/comphelper/unwrapargs.hxx150
-rw-r--r--comphelper/inc/comphelper/weak.hxx63
-rw-r--r--comphelper/inc/comphelper/weakbag.hxx92
-rw-r--r--comphelper/inc/comphelper/weakeventlistener.hxx189
-rw-r--r--comphelper/inc/makefile.mk48
-rw-r--r--comphelper/inc/pch/precompiled_comphelper.cxx29
-rw-r--r--comphelper/inc/pch/precompiled_comphelper.hxx32
-rw-r--r--comphelper/prj/build.lst13
-rw-r--r--comphelper/prj/d.lst14
-rw-r--r--comphelper/qa/complex/comphelper/Map.java514
-rw-r--r--comphelper/qa/complex/comphelper/SequenceOutputStreamUnitTest.java71
-rw-r--r--comphelper/qa/complex/comphelper/Test01.java107
-rw-r--r--comphelper/qa/complex/comphelper/TestHelper.java49
-rw-r--r--comphelper/qa/complex/comphelper_all.sce2
-rw-r--r--comphelper/qa/complex/makefile.mk83
-rw-r--r--comphelper/qa/makefile.mk56
-rw-r--r--comphelper/qa/test_string.cxx82
-rw-r--r--comphelper/qa/test_weakbag.cxx70
-rw-r--r--comphelper/qa/version.map34
-rw-r--r--comphelper/source/compare/AnyCompareFactory.cxx191
-rw-r--r--comphelper/source/compare/makefile.mk47
-rw-r--r--comphelper/source/container/IndexedPropertyValuesContainer.cxx270
-rw-r--r--comphelper/source/container/NamedPropertyValuesContainer.cxx239
-rw-r--r--comphelper/source/container/container.cxx153
-rw-r--r--comphelper/source/container/containermultiplexer.cxx203
-rw-r--r--comphelper/source/container/embeddedobjectcontainer.cxx1663
-rw-r--r--comphelper/source/container/enumerablemap.cxx1000
-rw-r--r--comphelper/source/container/enumhelper.cxx297
-rw-r--r--comphelper/source/container/makefile.mk55
-rw-r--r--comphelper/source/container/namecontainer.cxx211
-rw-r--r--comphelper/source/eventattachermgr/eventattachermgr.cxx1036
-rw-r--r--comphelper/source/eventattachermgr/makefile.mk50
-rw-r--r--comphelper/source/inc/comphelper_module.hxx43
-rw-r--r--comphelper/source/misc/SelectionMultiplex.cxx174
-rw-r--r--comphelper/source/misc/accessiblecomponenthelper.cxx221
-rw-r--r--comphelper/source/misc/accessiblecontexthelper.cxx356
-rw-r--r--comphelper/source/misc/accessibleeventbuffer.cxx110
-rw-r--r--comphelper/source/misc/accessibleeventnotifier.cxx259
-rw-r--r--comphelper/source/misc/accessiblekeybindinghelper.cxx114
-rw-r--r--comphelper/source/misc/accessibleselectionhelper.cxx192
-rw-r--r--comphelper/source/misc/accessibletexthelper.cxx915
-rw-r--r--comphelper/source/misc/accessiblewrapper.cxx683
-rw-r--r--comphelper/source/misc/accimplaccess.cxx189
-rw-r--r--comphelper/source/misc/anytostring.cxx335
-rw-r--r--comphelper/source/misc/asyncnotification.cxx281
-rw-r--r--comphelper/source/misc/comphelper_module.cxx41
-rw-r--r--comphelper/source/misc/comphelper_services.cxx79
-rw-r--r--comphelper/source/misc/componentbase.cxx74
-rw-r--r--comphelper/source/misc/componentcontext.cxx151
-rw-r--r--comphelper/source/misc/componentmodule.cxx237
-rw-r--r--comphelper/source/misc/configurationhelper.cxx207
-rw-r--r--comphelper/source/misc/docpasswordhelper.cxx380
-rw-r--r--comphelper/source/misc/docpasswordrequest.cxx194
-rw-r--r--comphelper/source/misc/documentinfo.cxx197
-rw-r--r--comphelper/source/misc/documentiologring.cxx179
-rw-r--r--comphelper/source/misc/documentiologring.hxx88
-rw-r--r--comphelper/source/misc/evtlistenerhlp.cxx52
-rwxr-xr-xcomphelper/source/misc/evtmethodhelper.cxx77
-rw-r--r--comphelper/source/misc/ihwrapnofilter.cxx117
-rw-r--r--comphelper/source/misc/instancelocker.cxx512
-rw-r--r--comphelper/source/misc/instancelocker.hxx133
-rw-r--r--comphelper/source/misc/interaction.cxx99
-rw-r--r--comphelper/source/misc/legacysingletonfactory.cxx197
-rw-r--r--comphelper/source/misc/listenernotification.cxx127
-rw-r--r--comphelper/source/misc/locale.cxx683
-rw-r--r--comphelper/source/misc/logging.cxx405
-rw-r--r--comphelper/source/misc/makefile.mk101
-rw-r--r--comphelper/source/misc/mediadescriptor.cxx868
-rw-r--r--comphelper/source/misc/mimeconfighelper.cxx805
-rw-r--r--comphelper/source/misc/namedvaluecollection.cxx338
-rw-r--r--comphelper/source/misc/numberedcollection.cxx276
-rw-r--r--comphelper/source/misc/numbers.cxx150
-rw-r--r--comphelper/source/misc/officeresourcebundle.cxx240
-rw-r--r--comphelper/source/misc/officerestartmanager.cxx210
-rw-r--r--comphelper/source/misc/officerestartmanager.hxx91
-rw-r--r--comphelper/source/misc/proxyaggregation.cxx276
-rw-r--r--comphelper/source/misc/querydeep.cxx76
-rw-r--r--comphelper/source/misc/regpathhelper.cxx235
-rw-r--r--comphelper/source/misc/scopeguard.cxx71
-rw-r--r--comphelper/source/misc/sequence.cxx103
-rw-r--r--comphelper/source/misc/sequenceashashmap.cxx400
-rw-r--r--comphelper/source/misc/servicedecl.cxx196
-rw-r--r--comphelper/source/misc/serviceinfohelper.cxx112
-rw-r--r--comphelper/source/misc/sharedmutex.cxx62
-rw-r--r--comphelper/source/misc/stillreadwriteinteraction.cxx144
-rw-r--r--comphelper/source/misc/storagehelper.cxx487
-rw-r--r--comphelper/source/misc/string.cxx125
-rw-r--r--comphelper/source/misc/synchronousdispatch.cxx102
-rw-r--r--comphelper/source/misc/types.cxx477
-rw-r--r--comphelper/source/misc/uieventslogger.cxx686
-rw-r--r--comphelper/source/misc/weak.cxx76
-rw-r--r--comphelper/source/misc/weakeventlistener.cxx93
-rw-r--r--comphelper/source/officeinstdir/makefile.mk50
-rw-r--r--comphelper/source/officeinstdir/officeinstallationdirectories.cxx350
-rw-r--r--comphelper/source/officeinstdir/officeinstallationdirectories.hxx107
-rw-r--r--comphelper/source/processfactory/componentfactory.cxx86
-rw-r--r--comphelper/source/processfactory/makefile.mk52
-rw-r--r--comphelper/source/processfactory/processfactory.cxx127
-rw-r--r--comphelper/source/property/ChainablePropertySet.cxx321
-rw-r--r--comphelper/source/property/ChainablePropertySetInfo.cxx142
-rw-r--r--comphelper/source/property/MasterPropertySet.cxx505
-rw-r--r--comphelper/source/property/MasterPropertySetInfo.cxx170
-rw-r--r--comphelper/source/property/TypeGeneration.cxx237
-rw-r--r--comphelper/source/property/composedprops.cxx357
-rw-r--r--comphelper/source/property/genericpropertyset.cxx301
-rw-r--r--comphelper/source/property/makefile.mk65
-rw-r--r--comphelper/source/property/opropertybag.cxx585
-rw-r--r--comphelper/source/property/opropertybag.hxx242
-rw-r--r--comphelper/source/property/propagg.cxx1027
-rw-r--r--comphelper/source/property/property.cxx245
-rw-r--r--comphelper/source/property/propertybag.cxx221
-rw-r--r--comphelper/source/property/propertycontainer.cxx105
-rw-r--r--comphelper/source/property/propertycontainerhelper.cxx552
-rw-r--r--comphelper/source/property/propertysethelper.cxx328
-rw-r--r--comphelper/source/property/propertysetinfo.cxx214
-rw-r--r--comphelper/source/property/propertystatecontainer.cxx339
-rw-r--r--comphelper/source/property/propmultiplex.cxx182
-rw-r--r--comphelper/source/property/propstate.cxx261
-rw-r--r--comphelper/source/streaming/basicio.cxx174
-rw-r--r--comphelper/source/streaming/makefile.mk54
-rw-r--r--comphelper/source/streaming/memorystream.cxx247
-rw-r--r--comphelper/source/streaming/oslfile2streamwrap.cxx198
-rw-r--r--comphelper/source/streaming/otransactedfilestream.cxx824
-rw-r--r--comphelper/source/streaming/seekableinput.cxx267
-rw-r--r--comphelper/source/streaming/seqinputstreamserv.cxx251
-rw-r--r--comphelper/source/streaming/seqoutputstreamserv.cxx172
-rw-r--r--comphelper/source/streaming/seqstream.cxx243
-rw-r--r--comphelper/source/streaming/streamsection.cxx122
-rw-r--r--comphelper/source/xml/attributelist.cxx179
-rw-r--r--comphelper/source/xml/makefile.mk48
-rw-r--r--comphelper/source/xml/ofopxmlhelper.cxx467
-rw-r--r--comphelper/test/uno_iterators/makefile.mk48
-rw-r--r--comphelper/test/uno_iterators/uno_iterators.cxx218
-rw-r--r--comphelper/util/exports.dxp3
-rw-r--r--comphelper/util/makefile.mk70
-rw-r--r--comphelper/util/makefile.pmk35
-rw-r--r--comphelper/version.mk46
-rwxr-xr-xconfig.guess1502
-rwxr-xr-xconfig.sub1714
-rw-r--r--configmgr/inc/makefile.mk38
-rw-r--r--configmgr/inc/pch/precompiled_configmgr.cxx28
-rw-r--r--configmgr/inc/pch/precompiled_configmgr.hxx32
-rw-r--r--configmgr/prj/build.lst4
-rw-r--r--configmgr/prj/d.lst3
-rw-r--r--configmgr/qa/unit/data.xcd5190
-rw-r--r--configmgr/qa/unit/makefile.mk93
-rw-r--r--configmgr/qa/unit/no_localization0
-rw-r--r--configmgr/qa/unit/test.cxx678
-rw-r--r--configmgr/qa/unit/urebootstrap.ini30
-rw-r--r--configmgr/qa/unit/version.map34
-rw-r--r--configmgr/qa/unoapi/Test.java50
-rw-r--r--configmgr/qa/unoapi/makefile.mk50
-rw-r--r--configmgr/qa/unoapi/module.sce29
-rw-r--r--configmgr/source/README158
-rw-r--r--configmgr/source/access.cxx2207
-rw-r--r--configmgr/source/access.hxx582
-rw-r--r--configmgr/source/additions.hxx43
-rw-r--r--configmgr/source/broadcaster.cxx258
-rw-r--r--configmgr/source/broadcaster.hxx181
-rw-r--r--configmgr/source/childaccess.cxx391
-rw-r--r--configmgr/source/childaccess.hxx157
-rw-r--r--configmgr/source/components.cxx867
-rw-r--r--configmgr/source/components.hxx180
-rw-r--r--configmgr/source/configurationprovider.cxx535
-rw-r--r--configmgr/source/configurationprovider.hxx67
-rw-r--r--configmgr/source/configurationregistry.cxx950
-rw-r--r--configmgr/source/configurationregistry.hxx57
-rw-r--r--configmgr/source/data.cxx372
-rw-r--r--configmgr/source/data.hxx106
-rw-r--r--configmgr/source/defaultprovider.cxx131
-rw-r--r--configmgr/source/defaultprovider.hxx59
-rw-r--r--configmgr/source/groupnode.cxx90
-rw-r--r--configmgr/source/groupnode.hxx75
-rw-r--r--configmgr/source/localizedpropertynode.cxx87
-rw-r--r--configmgr/source/localizedpropertynode.hxx76
-rw-r--r--configmgr/source/localizedvaluenode.cxx78
-rw-r--r--configmgr/source/localizedvaluenode.hxx66
-rw-r--r--configmgr/source/lock.cxx39
-rw-r--r--configmgr/source/lock.hxx41
-rw-r--r--configmgr/source/makefile.mk84
-rw-r--r--configmgr/source/modifications.cxx87
-rw-r--r--configmgr/source/modifications.hxx67
-rw-r--r--configmgr/source/node.cxx108
-rw-r--r--configmgr/source/node.hxx86
-rw-r--r--configmgr/source/nodemap.cxx50
-rw-r--r--configmgr/source/nodemap.hxx49
-rw-r--r--configmgr/source/pad.cxx91
-rw-r--r--configmgr/source/pad.hxx61
-rw-r--r--configmgr/source/parsemanager.cxx85
-rw-r--r--configmgr/source/parsemanager.hxx69
-rw-r--r--configmgr/source/parser.hxx62
-rw-r--r--configmgr/source/partial.cxx137
-rw-r--r--configmgr/source/partial.hxx71
-rw-r--r--configmgr/source/path.hxx43
-rw-r--r--configmgr/source/propertynode.cxx110
-rw-r--r--configmgr/source/propertynode.hxx83
-rw-r--r--configmgr/source/rootaccess.cxx327
-rw-r--r--configmgr/source/rootaccess.hxx157
-rw-r--r--configmgr/source/services.cxx135
-rw-r--r--configmgr/source/setnode.cxx129
-rw-r--r--configmgr/source/setnode.hxx84
-rw-r--r--configmgr/source/span.hxx64
-rw-r--r--configmgr/source/type.cxx187
-rw-r--r--configmgr/source/type.hxx56
-rw-r--r--configmgr/source/update.cxx227
-rw-r--r--configmgr/source/update.hxx59
-rw-r--r--configmgr/source/valueparser.cxx470
-rw-r--r--configmgr/source/valueparser.hxx92
-rw-r--r--configmgr/source/writemodfile.cxx601
-rw-r--r--configmgr/source/writemodfile.hxx45
-rw-r--r--configmgr/source/xcdparser.cxx183
-rw-r--r--configmgr/source/xcdparser.hxx78
-rw-r--r--configmgr/source/xcsparser.cxx673
-rw-r--r--configmgr/source/xcsparser.hxx106
-rw-r--r--configmgr/source/xcuparser.cxx1125
-rw-r--r--configmgr/source/xcuparser.hxx155
-rw-r--r--configmgr/source/xmldata.cxx204
-rw-r--r--configmgr/source/xmldata.hxx58
-rw-r--r--configmgr/source/xmlreader.cxx1054
-rw-r--r--configmgr/source/xmlreader.hxx186
-rwxr-xr-xconfigure31179
-rwxr-xr-xconfigure.cmd7
-rw-r--r--configure.in7024
-rw-r--r--connectivity/com/sun/star/sdbcx/comp/hsqldb/FileSystemRuntimeException.java73
-rw-r--r--connectivity/com/sun/star/sdbcx/comp/hsqldb/NativeInputStreamHelper.java74
-rw-r--r--connectivity/com/sun/star/sdbcx/comp/hsqldb/NativeLibraries.java80
-rw-r--r--connectivity/com/sun/star/sdbcx/comp/hsqldb/NativeOutputStreamHelper.java48
-rw-r--r--connectivity/com/sun/star/sdbcx/comp/hsqldb/NativeStorageAccess.java80
-rw-r--r--connectivity/com/sun/star/sdbcx/comp/hsqldb/StorageAccess.java171
-rw-r--r--connectivity/com/sun/star/sdbcx/comp/hsqldb/StorageFileAccess.java107
-rw-r--r--connectivity/com/sun/star/sdbcx/comp/hsqldb/StorageNativeInputStream.java53
-rw-r--r--connectivity/com/sun/star/sdbcx/comp/hsqldb/StorageNativeOutputStream.java143
-rw-r--r--connectivity/com/sun/star/sdbcx/comp/hsqldb/makefile.mk65
-rw-r--r--connectivity/dbtools.pmk29
-rw-r--r--connectivity/inc/connectivity/BlobHelper.hxx51
-rw-r--r--connectivity/inc/connectivity/CommonTools.hxx216
-rw-r--r--connectivity/inc/connectivity/ConnectionWrapper.hxx98
-rw-r--r--connectivity/inc/connectivity/DateConversion.hxx94
-rwxr-xr-xconnectivity/inc/connectivity/DriversConfig.hxx87
-rw-r--r--connectivity/inc/connectivity/FValue.hxx467
-rw-r--r--connectivity/inc/connectivity/IParseContext.hxx108
-rw-r--r--connectivity/inc/connectivity/PColumn.hxx148
-rw-r--r--connectivity/inc/connectivity/ParameterCont.hxx59
-rw-r--r--connectivity/inc/connectivity/SQLStatementHelper.hxx54
-rw-r--r--connectivity/inc/connectivity/StdTypeDefs.hxx48
-rw-r--r--connectivity/inc/connectivity/TColumnsHelper.hxx70
-rw-r--r--connectivity/inc/connectivity/TIndex.hxx56
-rw-r--r--connectivity/inc/connectivity/TIndexColumns.hxx50
-rw-r--r--connectivity/inc/connectivity/TIndexes.hxx57
-rw-r--r--connectivity/inc/connectivity/TKey.hxx54
-rw-r--r--connectivity/inc/connectivity/TKeyColumns.hxx50
-rw-r--r--connectivity/inc/connectivity/TKeys.hxx66
-rw-r--r--connectivity/inc/connectivity/TTableHelper.hxx173
-rw-r--r--connectivity/inc/connectivity/conncleanup.hxx97
-rw-r--r--connectivity/inc/connectivity/dbcharset.hxx168
-rw-r--r--connectivity/inc/connectivity/dbconversion.hxx224
-rw-r--r--connectivity/inc/connectivity/dbexception.hxx377
-rw-r--r--connectivity/inc/connectivity/dbmetadata.hxx200
-rw-r--r--connectivity/inc/connectivity/dbtools.hxx825
-rw-r--r--connectivity/inc/connectivity/dbtoolsdllapi.hxx40
-rw-r--r--connectivity/inc/connectivity/filtermanager.hxx131
-rw-r--r--connectivity/inc/connectivity/formattedcolumnvalue.hxx119
-rw-r--r--connectivity/inc/connectivity/parameters.hxx426
-rw-r--r--connectivity/inc/connectivity/paramwrapper.hxx208
-rw-r--r--connectivity/inc/connectivity/predicateinput.hxx126
-rw-r--r--connectivity/inc/connectivity/sdbcx/IRefreshable.hxx57
-rw-r--r--connectivity/inc/connectivity/sdbcx/VCatalog.hxx132
-rw-r--r--connectivity/inc/connectivity/sdbcx/VCollection.hxx243
-rw-r--r--connectivity/inc/connectivity/sdbcx/VColumn.hxx118
-rw-r--r--connectivity/inc/connectivity/sdbcx/VDescriptor.hxx102
-rw-r--r--connectivity/inc/connectivity/sdbcx/VGroup.hxx113
-rw-r--r--connectivity/inc/connectivity/sdbcx/VIndex.hxx117
-rw-r--r--connectivity/inc/connectivity/sdbcx/VIndexColumn.hxx69
-rw-r--r--connectivity/inc/connectivity/sdbcx/VKey.hxx128
-rw-r--r--connectivity/inc/connectivity/sdbcx/VKeyColumn.hxx71
-rw-r--r--connectivity/inc/connectivity/sdbcx/VTable.hxx148
-rw-r--r--connectivity/inc/connectivity/sdbcx/VTypeDef.hxx47
-rw-r--r--connectivity/inc/connectivity/sdbcx/VUser.hxx107
-rw-r--r--connectivity/inc/connectivity/sdbcx/VView.hxx108
-rw-r--r--connectivity/inc/connectivity/sqlerror.hxx340
-rw-r--r--connectivity/inc/connectivity/sqliterator.hxx366
-rw-r--r--connectivity/inc/connectivity/sqlnode.hxx472
-rw-r--r--connectivity/inc/connectivity/sqlparse.hxx261
-rw-r--r--connectivity/inc/connectivity/standardsqlstate.hxx73
-rw-r--r--connectivity/inc/connectivity/statementcomposer.hxx111
-rw-r--r--connectivity/inc/connectivity/virtualdbtools.hxx358
-rw-r--r--connectivity/inc/connectivity/warningscontainer.hxx107
-rw-r--r--connectivity/inc/makefile.mk47
-rw-r--r--connectivity/inc/pch/precompiled_connectivity.cxx29
-rw-r--r--connectivity/inc/pch/precompiled_connectivity.hxx334
-rwxr-xr-xconnectivity/makefile.pmk62
-rw-r--r--connectivity/prj/build.lst32
-rw-r--r--connectivity/prj/d.lst33
-rw-r--r--connectivity/qa/connectivity/GeneralTest.java62
-rw-r--r--connectivity/qa/connectivity/makefile.mk65
-rwxr-xr-xconnectivity/qa/connectivity/tools/AbstractDatabase.java222
-rw-r--r--connectivity/qa/connectivity/tools/CRMDatabase.java292
-rw-r--r--connectivity/qa/connectivity/tools/DataSource.java145
-rwxr-xr-xconnectivity/qa/connectivity/tools/DatabaseAccess.java63
-rwxr-xr-xconnectivity/qa/connectivity/tools/DbaseDatabase.java98
-rw-r--r--connectivity/qa/connectivity/tools/HsqlColumnDescriptor.java84
-rw-r--r--connectivity/qa/connectivity/tools/HsqlDatabase.java213
-rw-r--r--connectivity/qa/connectivity/tools/HsqlTableDescriptor.java102
-rw-r--r--connectivity/qa/connectivity/tools/QueryDefinition.java74
-rw-r--r--connectivity/qa/connectivity/tools/RowSet.java292
-rw-r--r--connectivity/qa/connectivity/tools/makefile.mk65
-rw-r--r--connectivity/qa/connectivity/tools/sdb/Connection.java93
-rw-r--r--connectivity/qa/drivers/dbase/.nbattrs10
-rw-r--r--connectivity/qa/drivers/dbase/DBaseDateFunctions.java309
-rw-r--r--connectivity/qa/drivers/dbase/DBaseDriverTest.java94
-rw-r--r--connectivity/qa/drivers/dbase/DBaseNumericFunctions.java402
-rwxr-xr-xconnectivity/qa/drivers/dbase/DBaseSqlTests.java96
-rw-r--r--connectivity/qa/drivers/dbase/DBaseStringFunctions.java323
-rw-r--r--connectivity/qa/drivers/dbase/makefile.mk64
-rw-r--r--connectivity/qa/drivers/dbase/test.properties5
-rw-r--r--connectivity/qa/drivers/hsqldb/DatabaseMetaData.java152
-rw-r--r--connectivity/qa/drivers/hsqldb/DriverTest.java170
-rw-r--r--connectivity/qa/drivers/hsqldb/TestCacheSize.java617
-rw-r--r--connectivity/qa/drivers/jdbc/LongVarCharTest.java131
-rw-r--r--connectivity/qa/drivers/jdbc/makefile.mk66
-rw-r--r--connectivity/source/commontools/AutoRetrievingBase.cxx71
-rw-r--r--connectivity/source/commontools/BlobHelper.cxx69
-rw-r--r--connectivity/source/commontools/CommonTools.cxx369
-rw-r--r--connectivity/source/commontools/ConnectionWrapper.cxx267
-rw-r--r--connectivity/source/commontools/DateConversion.cxx520
-rwxr-xr-xconnectivity/source/commontools/DriversConfig.cxx262
-rw-r--r--connectivity/source/commontools/FDatabaseMetaDataResultSet.cxx913
-rw-r--r--connectivity/source/commontools/FDatabaseMetaDataResultSetMetaData.cxx692
-rw-r--r--connectivity/source/commontools/FValue.cxx2333
-rw-r--r--connectivity/source/commontools/ParamterSubstitution.cxx132
-rw-r--r--connectivity/source/commontools/RowFunctionParser.cxx499
-rw-r--r--connectivity/source/commontools/TColumnsHelper.cxx225
-rw-r--r--connectivity/source/commontools/TConnection.cxx106
-rw-r--r--connectivity/source/commontools/TDatabaseMetaDataBase.cxx333
-rw-r--r--connectivity/source/commontools/TIndex.cxx110
-rw-r--r--connectivity/source/commontools/TIndexColumns.cxx127
-rw-r--r--connectivity/source/commontools/TIndexes.cxx262
-rw-r--r--connectivity/source/commontools/TKey.cxx119
-rw-r--r--connectivity/source/commontools/TKeyColumns.cxx145
-rw-r--r--connectivity/source/commontools/TKeys.cxx320
-rw-r--r--connectivity/source/commontools/TPrivilegesResultSet.cxx155
-rw-r--r--connectivity/source/commontools/TSkipDeletedSet.cxx278
-rw-r--r--connectivity/source/commontools/TSortIndex.cxx178
-rw-r--r--connectivity/source/commontools/TTableHelper.cxx630
-rw-r--r--connectivity/source/commontools/conncleanup.cxx247
-rw-r--r--connectivity/source/commontools/dbcharset.cxx232
-rw-r--r--connectivity/source/commontools/dbconversion.cxx490
-rw-r--r--connectivity/source/commontools/dbexception.cxx564
-rw-r--r--connectivity/source/commontools/dbmetadata.cxx448
-rw-r--r--connectivity/source/commontools/dbtools.cxx2173
-rw-r--r--connectivity/source/commontools/dbtools2.cxx974
-rw-r--r--connectivity/source/commontools/filtermanager.cxx198
-rw-r--r--connectivity/source/commontools/formattedcolumnvalue.cxx345
-rw-r--r--connectivity/source/commontools/makefile.mk103
-rw-r--r--connectivity/source/commontools/parameters.cxx1120
-rw-r--r--connectivity/source/commontools/paramwrapper.cxx364
-rw-r--r--connectivity/source/commontools/predicateinput.cxx391
-rw-r--r--connectivity/source/commontools/propertyids.cxx198
-rw-r--r--connectivity/source/commontools/sqlerror.cxx363
-rw-r--r--connectivity/source/commontools/statementcomposer.cxx315
-rw-r--r--connectivity/source/commontools/warningscontainer.cxx123
-rw-r--r--connectivity/source/cpool/ZConnectionPool.cxx336
-rw-r--r--connectivity/source/cpool/ZConnectionPool.hxx155
-rw-r--r--connectivity/source/cpool/ZConnectionWrapper.cxx258
-rw-r--r--connectivity/source/cpool/ZConnectionWrapper.hxx87
-rw-r--r--connectivity/source/cpool/ZDriverWrapper.cxx135
-rw-r--r--connectivity/source/cpool/ZDriverWrapper.hxx89
-rw-r--r--connectivity/source/cpool/ZPoolCollection.cxx581
-rw-r--r--connectivity/source/cpool/ZPoolCollection.hxx148
-rw-r--r--connectivity/source/cpool/ZPooledConnection.cxx88
-rw-r--r--connectivity/source/cpool/ZPooledConnection.hxx68
-rw-r--r--connectivity/source/cpool/Zregistration.cxx108
-rw-r--r--connectivity/source/cpool/dbpool.xml28
-rw-r--r--connectivity/source/cpool/exports.dxp3
-rw-r--r--connectivity/source/cpool/makefile.mk81
-rw-r--r--connectivity/source/dbtools/dbt.xml16
-rw-r--r--connectivity/source/dbtools/exports.dxp3
-rw-r--r--connectivity/source/dbtools/makefile.mk97
-rw-r--r--connectivity/source/drivers/adabas/BCatalog.cxx168
-rw-r--r--connectivity/source/drivers/adabas/BColumns.cxx184
-rw-r--r--connectivity/source/drivers/adabas/BConnection.cxx274
-rw-r--r--connectivity/source/drivers/adabas/BDatabaseMetaData.cxx161
-rw-r--r--connectivity/source/drivers/adabas/BDriver.cxx1819
-rw-r--r--connectivity/source/drivers/adabas/BFunctions.cxx275
-rw-r--r--connectivity/source/drivers/adabas/BGroup.cxx94
-rw-r--r--connectivity/source/drivers/adabas/BGroups.cxx93
-rw-r--r--connectivity/source/drivers/adabas/BIndex.cxx106
-rw-r--r--connectivity/source/drivers/adabas/BIndexColumns.cxx124
-rw-r--r--connectivity/source/drivers/adabas/BIndexes.cxx192
-rw-r--r--connectivity/source/drivers/adabas/BKeys.cxx181
-rw-r--r--connectivity/source/drivers/adabas/BPreparedStatement.cxx76
-rw-r--r--connectivity/source/drivers/adabas/BResultSet.cxx223
-rw-r--r--connectivity/source/drivers/adabas/BResultSetMetaData.cxx87
-rw-r--r--connectivity/source/drivers/adabas/BStatement.cxx79
-rw-r--r--connectivity/source/drivers/adabas/BTable.cxx376
-rw-r--r--connectivity/source/drivers/adabas/BTables.cxx522
-rw-r--r--connectivity/source/drivers/adabas/BUser.cxx332
-rw-r--r--connectivity/source/drivers/adabas/BUsers.cxx128
-rw-r--r--connectivity/source/drivers/adabas/BViews.cxx194
-rw-r--r--connectivity/source/drivers/adabas/Bservices.cxx176
-rw-r--r--connectivity/source/drivers/adabas/adabas.mxp.map148
-rwxr-xr-xconnectivity/source/drivers/adabas/adabas.xcu130
-rw-r--r--connectivity/source/drivers/adabas/adabas.xml27
-rw-r--r--connectivity/source/drivers/adabas/exports.dxp3
-rw-r--r--connectivity/source/drivers/adabas/makefile.mk106
-rw-r--r--connectivity/source/drivers/ado/ACallableStatement.cxx235
-rw-r--r--connectivity/source/drivers/ado/ACatalog.cxx127
-rw-r--r--connectivity/source/drivers/ado/AColumn.cxx300
-rw-r--r--connectivity/source/drivers/ado/AColumns.cxx142
-rw-r--r--connectivity/source/drivers/ado/AConnection.cxx625
-rw-r--r--connectivity/source/drivers/ado/ADatabaseMetaData.cxx1093
-rw-r--r--connectivity/source/drivers/ado/ADatabaseMetaDataImpl.cxx608
-rw-r--r--connectivity/source/drivers/ado/ADatabaseMetaDataResultSet.cxx1218
-rw-r--r--connectivity/source/drivers/ado/ADatabaseMetaDataResultSetMetaData.cxx233
-rw-r--r--connectivity/source/drivers/ado/ADriver.cxx271
-rw-r--r--connectivity/source/drivers/ado/AGroup.cxx192
-rw-r--r--connectivity/source/drivers/ado/AGroups.cxx88
-rw-r--r--connectivity/source/drivers/ado/AIndex.cxx157
-rw-r--r--connectivity/source/drivers/ado/AIndexes.cxx90
-rw-r--r--connectivity/source/drivers/ado/AKey.cxx167
-rw-r--r--connectivity/source/drivers/ado/AKeyColumn.cxx71
-rw-r--r--connectivity/source/drivers/ado/AKeyColumns.cxx97
-rw-r--r--connectivity/source/drivers/ado/AKeys.cxx115
-rw-r--r--connectivity/source/drivers/ado/APreparedStatement.cxx564
-rw-r--r--connectivity/source/drivers/ado/AResultSet.cxx1173
-rw-r--r--connectivity/source/drivers/ado/AResultSetMetaData.cxx262
-rw-r--r--connectivity/source/drivers/ado/AStatement.cxx841
-rw-r--r--connectivity/source/drivers/ado/ATable.cxx257
-rw-r--r--connectivity/source/drivers/ado/ATables.cxx115
-rw-r--r--connectivity/source/drivers/ado/AUser.cxx227
-rw-r--r--connectivity/source/drivers/ado/AUsers.cxx87
-rw-r--r--connectivity/source/drivers/ado/AView.cxx123
-rw-r--r--connectivity/source/drivers/ado/AViews.cxx104
-rw-r--r--connectivity/source/drivers/ado/Aolevariant.cxx791
-rw-r--r--connectivity/source/drivers/ado/Aservices.cxx175
-rw-r--r--connectivity/source/drivers/ado/Awrapado.cxx2201
-rwxr-xr-xconnectivity/source/drivers/ado/ado.xcu259
-rw-r--r--connectivity/source/drivers/ado/ado.xml29
-rw-r--r--connectivity/source/drivers/ado/ado_post_sys_include.h32
-rw-r--r--connectivity/source/drivers/ado/ado_pre_sys_include.h37
-rw-r--r--connectivity/source/drivers/ado/adoimp.cxx336
-rw-r--r--connectivity/source/drivers/ado/exports.dxp3
-rw-r--r--connectivity/source/drivers/ado/makefile.mk114
-rw-r--r--connectivity/source/drivers/calc/CCatalog.cxx80
-rw-r--r--connectivity/source/drivers/calc/CColumns.cxx55
-rw-r--r--connectivity/source/drivers/calc/CConnection.cxx295
-rw-r--r--connectivity/source/drivers/calc/CDatabaseMetaData.cxx490
-rw-r--r--connectivity/source/drivers/calc/CDriver.cxx105
-rw-r--r--connectivity/source/drivers/calc/CPreparedStatement.cxx43
-rw-r--r--connectivity/source/drivers/calc/CResultSet.cxx191
-rw-r--r--connectivity/source/drivers/calc/CStatement.cxx43
-rw-r--r--connectivity/source/drivers/calc/CTable.cxx871
-rw-r--r--connectivity/source/drivers/calc/CTables.cxx62
-rw-r--r--connectivity/source/drivers/calc/CalcDriver.xml32
-rw-r--r--connectivity/source/drivers/calc/Cservices.cxx175
-rwxr-xr-xconnectivity/source/drivers/calc/calc.xcu63
-rw-r--r--connectivity/source/drivers/calc/exports.dxp3
-rw-r--r--connectivity/source/drivers/calc/makefile.mk96
-rw-r--r--connectivity/source/drivers/dbase/DCatalog.cxx70
-rw-r--r--connectivity/source/drivers/dbase/DCode.cxx131
-rw-r--r--connectivity/source/drivers/dbase/DColumns.cxx91
-rw-r--r--connectivity/source/drivers/dbase/DConnection.cxx135
-rw-r--r--connectivity/source/drivers/dbase/DDatabaseMetaData.cxx416
-rw-r--r--connectivity/source/drivers/dbase/DDriver.cxx127
-rw-r--r--connectivity/source/drivers/dbase/DIndex.cxx679
-rw-r--r--connectivity/source/drivers/dbase/DIndexColumns.cxx94
-rw-r--r--connectivity/source/drivers/dbase/DIndexIter.cxx315
-rw-r--r--connectivity/source/drivers/dbase/DIndexes.cxx137
-rw-r--r--connectivity/source/drivers/dbase/DNoException.cxx650
-rw-r--r--connectivity/source/drivers/dbase/DPreparedStatement.cxx42
-rw-r--r--connectivity/source/drivers/dbase/DResultSet.cxx249
-rw-r--r--connectivity/source/drivers/dbase/DStatement.cxx44
-rw-r--r--connectivity/source/drivers/dbase/DTable.cxx2855
-rw-r--r--connectivity/source/drivers/dbase/DTables.cxx144
-rw-r--r--connectivity/source/drivers/dbase/Dservices.cxx175
-rw-r--r--connectivity/source/drivers/dbase/dbase.mxp.map173
-rwxr-xr-xconnectivity/source/drivers/dbase/dbase.xcu100
-rw-r--r--connectivity/source/drivers/dbase/dbase.xml33
-rw-r--r--connectivity/source/drivers/dbase/dindexnode.cxx1056
-rw-r--r--connectivity/source/drivers/dbase/exports.dxp3
-rw-r--r--connectivity/source/drivers/dbase/makefile.mk129
-rw-r--r--connectivity/source/drivers/evoab/LCatalog.cxx72
-rw-r--r--connectivity/source/drivers/evoab/LCatalog.hxx49
-rw-r--r--connectivity/source/drivers/evoab/LColumnAlias.cxx232
-rw-r--r--connectivity/source/drivers/evoab/LColumnAlias.hxx113
-rw-r--r--connectivity/source/drivers/evoab/LColumns.cxx57
-rw-r--r--connectivity/source/drivers/evoab/LColumns.hxx52
-rw-r--r--connectivity/source/drivers/evoab/LConfigAccess.cxx161
-rw-r--r--connectivity/source/drivers/evoab/LConfigAccess.hxx46
-rw-r--r--connectivity/source/drivers/evoab/LConnection.cxx267
-rw-r--r--connectivity/source/drivers/evoab/LConnection.hxx78
-rw-r--r--connectivity/source/drivers/evoab/LDatabaseMetaData.cxx391
-rw-r--r--connectivity/source/drivers/evoab/LDatabaseMetaData.hxx56
-rw-r--r--connectivity/source/drivers/evoab/LDebug.cxx42
-rw-r--r--connectivity/source/drivers/evoab/LDebug.hxx42
-rw-r--r--connectivity/source/drivers/evoab/LDriver.cxx505
-rw-r--r--connectivity/source/drivers/evoab/LDriver.hxx115
-rw-r--r--connectivity/source/drivers/evoab/LFolderList.cxx563
-rw-r--r--connectivity/source/drivers/evoab/LFolderList.hxx92
-rw-r--r--connectivity/source/drivers/evoab/LNoException.cxx324
-rw-r--r--connectivity/source/drivers/evoab/LPreparedStatement.cxx43
-rw-r--r--connectivity/source/drivers/evoab/LPreparedStatement.hxx50
-rw-r--r--connectivity/source/drivers/evoab/LResultSet.cxx190
-rw-r--r--connectivity/source/drivers/evoab/LResultSet.hxx81
-rw-r--r--connectivity/source/drivers/evoab/LServices.cxx175
-rw-r--r--connectivity/source/drivers/evoab/LStatement.cxx43
-rw-r--r--connectivity/source/drivers/evoab/LStatement.hxx49
-rw-r--r--connectivity/source/drivers/evoab/LTable.cxx870
-rw-r--r--connectivity/source/drivers/evoab/LTable.hxx100
-rw-r--r--connectivity/source/drivers/evoab/LTables.cxx62
-rw-r--r--connectivity/source/drivers/evoab/LTables.hxx52
-rwxr-xr-xconnectivity/source/drivers/evoab/evoab.xcu61
-rw-r--r--connectivity/source/drivers/evoab/evoab.xml33
-rw-r--r--connectivity/source/drivers/evoab/exports.dxp3
-rw-r--r--connectivity/source/drivers/evoab/makefile.mk104
-rw-r--r--connectivity/source/drivers/evoab2/EApi.cxx135
-rw-r--r--connectivity/source/drivers/evoab2/EApi.h143
-rw-r--r--connectivity/source/drivers/evoab2/NCatalog.cxx100
-rw-r--r--connectivity/source/drivers/evoab2/NCatalog.hxx56
-rw-r--r--connectivity/source/drivers/evoab2/NColumns.cxx90
-rw-r--r--connectivity/source/drivers/evoab2/NColumns.hxx57
-rw-r--r--connectivity/source/drivers/evoab2/NConnection.cxx292
-rw-r--r--connectivity/source/drivers/evoab2/NConnection.hxx123
-rw-r--r--connectivity/source/drivers/evoab2/NDatabaseMetaData.cxx1192
-rw-r--r--connectivity/source/drivers/evoab2/NDatabaseMetaData.hxx236
-rw-r--r--connectivity/source/drivers/evoab2/NDebug.cxx40
-rw-r--r--connectivity/source/drivers/evoab2/NDebug.hxx42
-rw-r--r--connectivity/source/drivers/evoab2/NDriver.cxx190
-rw-r--r--connectivity/source/drivers/evoab2/NDriver.hxx98
-rw-r--r--connectivity/source/drivers/evoab2/NPreparedStatement.cxx335
-rw-r--r--connectivity/source/drivers/evoab2/NPreparedStatement.hxx138
-rw-r--r--connectivity/source/drivers/evoab2/NResultSet.cxx1020
-rw-r--r--connectivity/source/drivers/evoab2/NResultSet.hxx183
-rw-r--r--connectivity/source/drivers/evoab2/NResultSetMetaData.cxx194
-rw-r--r--connectivity/source/drivers/evoab2/NResultSetMetaData.hxx88
-rw-r--r--connectivity/source/drivers/evoab2/NServices.cxx175
-rw-r--r--connectivity/source/drivers/evoab2/NStatement.cxx682
-rw-r--r--connectivity/source/drivers/evoab2/NStatement.hxx288
-rw-r--r--connectivity/source/drivers/evoab2/NTable.cxx89
-rw-r--r--connectivity/source/drivers/evoab2/NTable.hxx67
-rw-r--r--connectivity/source/drivers/evoab2/NTables.cxx105
-rw-r--r--connectivity/source/drivers/evoab2/NTables.hxx54
-rw-r--r--connectivity/source/drivers/evoab2/evoab.xml30
-rwxr-xr-xconnectivity/source/drivers/evoab2/evoab2.xcu76
-rw-r--r--connectivity/source/drivers/evoab2/makefile.mk112
-rw-r--r--connectivity/source/drivers/file/FCatalog.cxx121
-rw-r--r--connectivity/source/drivers/file/FColumns.cxx94
-rw-r--r--connectivity/source/drivers/file/FConnection.cxx461
-rw-r--r--connectivity/source/drivers/file/FDatabaseMetaData.cxx1223
-rw-r--r--connectivity/source/drivers/file/FDateFunctions.cxx289
-rw-r--r--connectivity/source/drivers/file/FDriver.cxx285
-rw-r--r--connectivity/source/drivers/file/FNoException.cxx131
-rw-r--r--connectivity/source/drivers/file/FNumericFunctions.cxx249
-rw-r--r--connectivity/source/drivers/file/FPreparedStatement.cxx634
-rw-r--r--connectivity/source/drivers/file/FResultSet.cxx1898
-rw-r--r--connectivity/source/drivers/file/FResultSetMetaData.cxx219
-rw-r--r--connectivity/source/drivers/file/FStatement.cxx860
-rw-r--r--connectivity/source/drivers/file/FStringFunctions.cxx267
-rw-r--r--connectivity/source/drivers/file/FTable.cxx257
-rw-r--r--connectivity/source/drivers/file/FTables.cxx83
-rw-r--r--connectivity/source/drivers/file/fanalyzer.cxx322
-rw-r--r--connectivity/source/drivers/file/fcode.cxx519
-rw-r--r--connectivity/source/drivers/file/fcomp.cxx917
-rw-r--r--connectivity/source/drivers/file/file.xml32
-rw-r--r--connectivity/source/drivers/file/makefile.mk108
-rw-r--r--connectivity/source/drivers/file/quotedstring.cxx164
-rw-r--r--connectivity/source/drivers/flat/ECatalog.cxx75
-rw-r--r--connectivity/source/drivers/flat/EColumns.cxx56
-rw-r--r--connectivity/source/drivers/flat/EConnection.cxx181
-rw-r--r--connectivity/source/drivers/flat/EDatabaseMetaData.cxx267
-rw-r--r--connectivity/source/drivers/flat/EDriver.cxx145
-rw-r--r--connectivity/source/drivers/flat/EPreparedStatement.cxx46
-rw-r--r--connectivity/source/drivers/flat/EResultSet.cxx189
-rw-r--r--connectivity/source/drivers/flat/EStatement.cxx43
-rw-r--r--connectivity/source/drivers/flat/ETable.cxx847
-rw-r--r--connectivity/source/drivers/flat/ETables.cxx62
-rw-r--r--connectivity/source/drivers/flat/Eservices.cxx175
-rw-r--r--connectivity/source/drivers/flat/exports.dxp3
-rw-r--r--connectivity/source/drivers/flat/flat.mxp.map141
-rwxr-xr-xconnectivity/source/drivers/flat/flat.xcu110
-rw-r--r--connectivity/source/drivers/flat/flat.xml33
-rw-r--r--connectivity/source/drivers/flat/makefile.mk107
-rw-r--r--connectivity/source/drivers/hsqldb/HCatalog.cxx166
-rw-r--r--connectivity/source/drivers/hsqldb/HColumns.cxx89
-rw-r--r--connectivity/source/drivers/hsqldb/HConnection.cxx422
-rw-r--r--connectivity/source/drivers/hsqldb/HDriver.cxx886
-rw-r--r--connectivity/source/drivers/hsqldb/HStorage.hxx118
-rw-r--r--connectivity/source/drivers/hsqldb/HStorageAccess.cxx551
-rw-r--r--connectivity/source/drivers/hsqldb/HStorageMap.cxx362
-rw-r--r--connectivity/source/drivers/hsqldb/HTable.cxx427
-rw-r--r--connectivity/source/drivers/hsqldb/HTables.cxx200
-rw-r--r--connectivity/source/drivers/hsqldb/HTerminateListener.cxx64
-rw-r--r--connectivity/source/drivers/hsqldb/HTerminateListener.hxx66
-rw-r--r--connectivity/source/drivers/hsqldb/HTools.cxx73
-rw-r--r--connectivity/source/drivers/hsqldb/HUser.cxx351
-rw-r--r--connectivity/source/drivers/hsqldb/HUsers.cxx120
-rw-r--r--connectivity/source/drivers/hsqldb/HView.cxx213
-rw-r--r--connectivity/source/drivers/hsqldb/HViews.cxx169
-rw-r--r--connectivity/source/drivers/hsqldb/Hservices.cxx177
-rw-r--r--connectivity/source/drivers/hsqldb/StorageFileAccess.cxx180
-rw-r--r--connectivity/source/drivers/hsqldb/StorageNativeInputStream.cxx306
-rw-r--r--connectivity/source/drivers/hsqldb/StorageNativeOutputStream.cxx219
-rw-r--r--connectivity/source/drivers/hsqldb/accesslog.cxx83
-rw-r--r--connectivity/source/drivers/hsqldb/accesslog.hxx145
-rw-r--r--connectivity/source/drivers/hsqldb/exports.dxp30
-rw-r--r--connectivity/source/drivers/hsqldb/hsqldb.map35
-rwxr-xr-xconnectivity/source/drivers/hsqldb/hsqldb.xcu78
-rw-r--r--connectivity/source/drivers/hsqldb/hsqldb.xml28
-rw-r--r--connectivity/source/drivers/hsqldb/hsqlui.hrc36
-rw-r--r--connectivity/source/drivers/hsqldb/hsqlui.src53
-rw-r--r--connectivity/source/drivers/hsqldb/makefile.mk117
-rw-r--r--connectivity/source/drivers/jdbc/Array.cxx152
-rw-r--r--connectivity/source/drivers/jdbc/Blob.cxx148
-rw-r--r--connectivity/source/drivers/jdbc/Boolean.cxx51
-rw-r--r--connectivity/source/drivers/jdbc/CallableStatement.cxx359
-rw-r--r--connectivity/source/drivers/jdbc/Class.cxx73
-rw-r--r--connectivity/source/drivers/jdbc/Clob.cxx146
-rw-r--r--connectivity/source/drivers/jdbc/ConnectionLog.cxx134
-rw-r--r--connectivity/source/drivers/jdbc/ContextClassLoader.cxx131
-rw-r--r--connectivity/source/drivers/jdbc/DatabaseMetaData.cxx1462
-rw-r--r--connectivity/source/drivers/jdbc/Date.cxx53
-rw-r--r--connectivity/source/drivers/jdbc/DriverPropertyInfo.cxx141
-rw-r--r--connectivity/source/drivers/jdbc/Exception.cxx48
-rw-r--r--connectivity/source/drivers/jdbc/InputStream.cxx110
-rw-r--r--connectivity/source/drivers/jdbc/JBigDecimal.cxx89
-rw-r--r--connectivity/source/drivers/jdbc/JConnection.cxx873
-rw-r--r--connectivity/source/drivers/jdbc/JDriver.cxx256
-rw-r--r--connectivity/source/drivers/jdbc/JStatement.cxx829
-rw-r--r--connectivity/source/drivers/jdbc/Object.cxx429
-rw-r--r--connectivity/source/drivers/jdbc/PreparedStatement.cxx666
-rw-r--r--connectivity/source/drivers/jdbc/Reader.cxx121
-rw-r--r--connectivity/source/drivers/jdbc/Ref.cxx61
-rw-r--r--connectivity/source/drivers/jdbc/ResultSet.cxx1087
-rw-r--r--connectivity/source/drivers/jdbc/ResultSetMetaData.cxx238
-rw-r--r--connectivity/source/drivers/jdbc/SQLException.cxx100
-rw-r--r--connectivity/source/drivers/jdbc/SQLWarning.cxx48
-rw-r--r--connectivity/source/drivers/jdbc/String.cxx62
-rw-r--r--connectivity/source/drivers/jdbc/Throwable.cxx69
-rw-r--r--connectivity/source/drivers/jdbc/Timestamp.cxx201
-rw-r--r--connectivity/source/drivers/jdbc/exports.dxp3
-rw-r--r--connectivity/source/drivers/jdbc/jdbc.mxp.map154
-rwxr-xr-xconnectivity/source/drivers/jdbc/jdbc.xcu214
-rw-r--r--connectivity/source/drivers/jdbc/jdbc.xml30
-rw-r--r--connectivity/source/drivers/jdbc/jservices.cxx177
-rw-r--r--connectivity/source/drivers/jdbc/makefile.mk112
-rw-r--r--connectivity/source/drivers/jdbc/tools.cxx274
-rw-r--r--connectivity/source/drivers/kab/KCatalog.cxx124
-rw-r--r--connectivity/source/drivers/kab/KCatalog.hxx64
-rw-r--r--connectivity/source/drivers/kab/KColumns.cxx98
-rw-r--r--connectivity/source/drivers/kab/KColumns.hxx54
-rw-r--r--connectivity/source/drivers/kab/KConnection.cxx328
-rw-r--r--connectivity/source/drivers/kab/KConnection.hxx139
-rw-r--r--connectivity/source/drivers/kab/KDEInit.cxx155
-rw-r--r--connectivity/source/drivers/kab/KDEInit.h44
-rw-r--r--connectivity/source/drivers/kab/KDatabaseMetaData.cxx1080
-rw-r--r--connectivity/source/drivers/kab/KDatabaseMetaData.hxx213
-rw-r--r--connectivity/source/drivers/kab/KDriver.cxx473
-rw-r--r--connectivity/source/drivers/kab/KDriver.hxx223
-rw-r--r--connectivity/source/drivers/kab/KPreparedStatement.cxx390
-rw-r--r--connectivity/source/drivers/kab/KPreparedStatement.hxx119
-rw-r--r--connectivity/source/drivers/kab/KResultSet.cxx987
-rw-r--r--connectivity/source/drivers/kab/KResultSet.hxx224
-rw-r--r--connectivity/source/drivers/kab/KResultSetMetaData.cxx187
-rw-r--r--connectivity/source/drivers/kab/KResultSetMetaData.hxx92
-rw-r--r--connectivity/source/drivers/kab/KServices.cxx177
-rw-r--r--connectivity/source/drivers/kab/KStatement.cxx584
-rw-r--r--connectivity/source/drivers/kab/KStatement.hxx172
-rw-r--r--connectivity/source/drivers/kab/KTable.cxx96
-rw-r--r--connectivity/source/drivers/kab/KTable.hxx68
-rw-r--r--connectivity/source/drivers/kab/KTables.cxx90
-rw-r--r--connectivity/source/drivers/kab/KTables.hxx61
-rw-r--r--connectivity/source/drivers/kab/exports.dxp3
-rwxr-xr-xconnectivity/source/drivers/kab/kab.xcu46
-rw-r--r--connectivity/source/drivers/kab/kab.xml79
-rw-r--r--connectivity/source/drivers/kab/kabdrv.map9
-rw-r--r--connectivity/source/drivers/kab/kcondition.cxx229
-rw-r--r--connectivity/source/drivers/kab/kcondition.hxx162
-rw-r--r--connectivity/source/drivers/kab/kfields.cxx94
-rw-r--r--connectivity/source/drivers/kab/kfields.hxx47
-rw-r--r--connectivity/source/drivers/kab/korder.cxx88
-rw-r--r--connectivity/source/drivers/kab/korder.hxx74
-rw-r--r--connectivity/source/drivers/kab/makefile.mk137
-rwxr-xr-xconnectivity/source/drivers/macab/MacabAddressBook.cxx256
-rwxr-xr-xconnectivity/source/drivers/macab/MacabAddressBook.hxx72
-rwxr-xr-xconnectivity/source/drivers/macab/MacabCatalog.cxx124
-rwxr-xr-xconnectivity/source/drivers/macab/MacabCatalog.hxx64
-rwxr-xr-xconnectivity/source/drivers/macab/MacabColumns.cxx98
-rwxr-xr-xconnectivity/source/drivers/macab/MacabColumns.hxx54
-rwxr-xr-xconnectivity/source/drivers/macab/MacabConnection.cxx324
-rwxr-xr-xconnectivity/source/drivers/macab/MacabConnection.hxx131
-rwxr-xr-xconnectivity/source/drivers/macab/MacabDatabaseMetaData.cxx1126
-rwxr-xr-xconnectivity/source/drivers/macab/MacabDatabaseMetaData.hxx212
-rwxr-xr-xconnectivity/source/drivers/macab/MacabDriver.cxx348
-rwxr-xr-xconnectivity/source/drivers/macab/MacabDriver.hxx196
-rw-r--r--connectivity/source/drivers/macab/MacabGroup.cxx102
-rw-r--r--connectivity/source/drivers/macab/MacabGroup.hxx51
-rw-r--r--connectivity/source/drivers/macab/MacabHeader.cxx343
-rw-r--r--connectivity/source/drivers/macab/MacabHeader.hxx71
-rwxr-xr-xconnectivity/source/drivers/macab/MacabPreparedStatement.cxx407
-rwxr-xr-xconnectivity/source/drivers/macab/MacabPreparedStatement.hxx119
-rwxr-xr-xconnectivity/source/drivers/macab/MacabRecord.cxx347
-rwxr-xr-xconnectivity/source/drivers/macab/MacabRecord.hxx77
-rwxr-xr-xconnectivity/source/drivers/macab/MacabRecords.cxx1212
-rwxr-xr-xconnectivity/source/drivers/macab/MacabRecords.hxx136
-rwxr-xr-xconnectivity/source/drivers/macab/MacabResultSet.cxx1073
-rwxr-xr-xconnectivity/source/drivers/macab/MacabResultSet.hxx226
-rwxr-xr-xconnectivity/source/drivers/macab/MacabResultSetMetaData.cxx224
-rwxr-xr-xconnectivity/source/drivers/macab/MacabResultSetMetaData.hxx94
-rwxr-xr-xconnectivity/source/drivers/macab/MacabServices.cxx177
-rwxr-xr-xconnectivity/source/drivers/macab/MacabStatement.cxx611
-rwxr-xr-xconnectivity/source/drivers/macab/MacabStatement.hxx176
-rwxr-xr-xconnectivity/source/drivers/macab/MacabTable.cxx96
-rwxr-xr-xconnectivity/source/drivers/macab/MacabTable.hxx68
-rwxr-xr-xconnectivity/source/drivers/macab/MacabTables.cxx90
-rwxr-xr-xconnectivity/source/drivers/macab/MacabTables.hxx61
-rwxr-xr-xconnectivity/source/drivers/macab/exports.dxp3
-rwxr-xr-xconnectivity/source/drivers/macab/macab.xcu46
-rwxr-xr-xconnectivity/source/drivers/macab/macab.xml79
-rwxr-xr-xconnectivity/source/drivers/macab/macabcondition.cxx250
-rwxr-xr-xconnectivity/source/drivers/macab/macabcondition.hxx169
-rwxr-xr-xconnectivity/source/drivers/macab/macaborder.cxx86
-rwxr-xr-xconnectivity/source/drivers/macab/macaborder.hxx74
-rw-r--r--connectivity/source/drivers/macab/macabutilities.hxx149
-rwxr-xr-xconnectivity/source/drivers/macab/makefile.mk129
-rw-r--r--connectivity/source/drivers/mozab/MCatalog.cxx127
-rw-r--r--connectivity/source/drivers/mozab/MCatalog.hxx66
-rw-r--r--connectivity/source/drivers/mozab/MColumnAlias.cxx191
-rw-r--r--connectivity/source/drivers/mozab/MColumnAlias.hxx85
-rw-r--r--connectivity/source/drivers/mozab/MColumns.cxx100
-rw-r--r--connectivity/source/drivers/mozab/MColumns.hxx58
-rw-r--r--connectivity/source/drivers/mozab/MConfigAccess.cxx273
-rw-r--r--connectivity/source/drivers/mozab/MConfigAccess.hxx39
-rw-r--r--connectivity/source/drivers/mozab/MConnection.cxx603
-rw-r--r--connectivity/source/drivers/mozab/MConnection.hxx231
-rw-r--r--connectivity/source/drivers/mozab/MDatabaseMetaData.cxx1031
-rw-r--r--connectivity/source/drivers/mozab/MDatabaseMetaData.hxx204
-rw-r--r--connectivity/source/drivers/mozab/MDriver.cxx329
-rw-r--r--connectivity/source/drivers/mozab/MDriver.hxx110
-rw-r--r--connectivity/source/drivers/mozab/MExtConfigAccess.hxx46
-rw-r--r--connectivity/source/drivers/mozab/MPreparedStatement.cxx544
-rw-r--r--connectivity/source/drivers/mozab/MPreparedStatement.hxx169
-rw-r--r--connectivity/source/drivers/mozab/MResultSet.cxx1980
-rw-r--r--connectivity/source/drivers/mozab/MResultSet.hxx366
-rw-r--r--connectivity/source/drivers/mozab/MResultSetMetaData.cxx212
-rw-r--r--connectivity/source/drivers/mozab/MResultSetMetaData.hxx98
-rw-r--r--connectivity/source/drivers/mozab/MServices.cxx225
-rw-r--r--connectivity/source/drivers/mozab/MStatement.cxx561
-rw-r--r--connectivity/source/drivers/mozab/MStatement.hxx213
-rw-r--r--connectivity/source/drivers/mozab/MTable.cxx95
-rw-r--r--connectivity/source/drivers/mozab/MTable.hxx72
-rw-r--r--connectivity/source/drivers/mozab/MTables.cxx104
-rw-r--r--connectivity/source/drivers/mozab/MTables.hxx55
-rw-r--r--connectivity/source/drivers/mozab/bootstrap/MMozillaBootstrap.cxx334
-rw-r--r--connectivity/source/drivers/mozab/bootstrap/MMozillaBootstrap.hxx101
-rw-r--r--connectivity/source/drivers/mozab/bootstrap/MNSFolders.cxx171
-rw-r--r--connectivity/source/drivers/mozab/bootstrap/MNSFolders.hxx46
-rw-r--r--connectivity/source/drivers/mozab/bootstrap/MNSINIParser.cxx139
-rw-r--r--connectivity/source/drivers/mozab/bootstrap/MNSINIParser.hxx83
-rw-r--r--connectivity/source/drivers/mozab/bootstrap/MNSInit.cxx347
-rw-r--r--connectivity/source/drivers/mozab/bootstrap/MNSInit.hxx45
-rw-r--r--connectivity/source/drivers/mozab/bootstrap/MNSProfile.cxx631
-rw-r--r--connectivity/source/drivers/mozab/bootstrap/MNSProfile.hxx74
-rw-r--r--connectivity/source/drivers/mozab/bootstrap/MNSProfileDirServiceProvider.cxx240
-rw-r--r--connectivity/source/drivers/mozab/bootstrap/MNSProfileDirServiceProvider.hxx83
-rw-r--r--connectivity/source/drivers/mozab/bootstrap/MNSProfileDiscover.cxx535
-rw-r--r--connectivity/source/drivers/mozab/bootstrap/MNSProfileDiscover.hxx134
-rw-r--r--connectivity/source/drivers/mozab/bootstrap/MNSProfileManager.cxx113
-rw-r--r--connectivity/source/drivers/mozab/bootstrap/MNSProfileManager.hxx80
-rw-r--r--connectivity/source/drivers/mozab/bootstrap/MNSRunnable.cxx98
-rw-r--r--connectivity/source/drivers/mozab/bootstrap/MNSRunnable.hxx68
-rw-r--r--connectivity/source/drivers/mozab/bootstrap/makefile.mk93
-rw-r--r--connectivity/source/drivers/mozab/bootstrap/mozilla_nsinit.h54
-rw-r--r--connectivity/source/drivers/mozab/bootstrap/mozilla_nsprofile.h89
-rw-r--r--connectivity/source/drivers/mozab/bootstrap/mozilla_nsprofiledirserviceprovider.h41
-rw-r--r--connectivity/source/drivers/mozab/bootstrap/mozilla_profile_discover.h46
-rw-r--r--connectivity/source/drivers/mozab/bootstrap/mozilla_profilemanager.h84
-rw-r--r--connectivity/source/drivers/mozab/bootstrap/post_include_windows.h30
-rw-r--r--connectivity/source/drivers/mozab/bootstrap/pre_include_windows.h31
-rw-r--r--connectivity/source/drivers/mozab/exports.dxp3
-rw-r--r--connectivity/source/drivers/mozab/makefile.mk186
-rw-r--r--connectivity/source/drivers/mozab/makefile_mozab.mk128
-rwxr-xr-xconnectivity/source/drivers/mozab/mozab.xcu154
-rw-r--r--connectivity/source/drivers/mozab/mozab.xml82
-rwxr-xr-xconnectivity/source/drivers/mozab/mozab2.xcu118
-rw-r--r--connectivity/source/drivers/mozab/mozabdrv.map8
-rw-r--r--connectivity/source/drivers/mozab/mozillasrc/MDatabaseMetaDataHelper.cxx806
-rw-r--r--connectivity/source/drivers/mozab/mozillasrc/MDatabaseMetaDataHelper.hxx80
-rw-r--r--connectivity/source/drivers/mozab/mozillasrc/MErrorResource.hxx77
-rw-r--r--connectivity/source/drivers/mozab/mozillasrc/MLdapAttributeMap.cxx450
-rw-r--r--connectivity/source/drivers/mozab/mozillasrc/MLdapAttributeMap.hxx75
-rw-r--r--connectivity/source/drivers/mozab/mozillasrc/MNSDeclares.hxx52
-rw-r--r--connectivity/source/drivers/mozab/mozillasrc/MNSInclude.hxx81
-rw-r--r--connectivity/source/drivers/mozab/mozillasrc/MNSMozabProxy.cxx404
-rw-r--r--connectivity/source/drivers/mozab/mozillasrc/MNSMozabProxy.hxx119
-rw-r--r--connectivity/source/drivers/mozab/mozillasrc/MNSTerminateListener.cxx86
-rw-r--r--connectivity/source/drivers/mozab/mozillasrc/MNSTerminateListener.hxx57
-rw-r--r--connectivity/source/drivers/mozab/mozillasrc/MNameMapper.cxx142
-rw-r--r--connectivity/source/drivers/mozab/mozillasrc/MNameMapper.hxx83
-rw-r--r--connectivity/source/drivers/mozab/mozillasrc/MQuery.cxx823
-rw-r--r--connectivity/source/drivers/mozab/mozillasrc/MQuery.hxx282
-rw-r--r--connectivity/source/drivers/mozab/mozillasrc/MQueryHelper.cxx635
-rw-r--r--connectivity/source/drivers/mozab/mozillasrc/MQueryHelper.hxx142
-rw-r--r--connectivity/source/drivers/mozab/mozillasrc/MTypeConverter.cxx138
-rw-r--r--connectivity/source/drivers/mozab/mozillasrc/MTypeConverter.hxx66
-rw-r--r--connectivity/source/drivers/mozab/mozillasrc/makefile.mk77
-rw-r--r--connectivity/source/drivers/mozab/post_include_mozilla.h58
-rw-r--r--connectivity/source/drivers/mozab/pre_include_mozilla.h70
-rw-r--r--connectivity/source/drivers/mysql/YCatalog.cxx174
-rw-r--r--connectivity/source/drivers/mysql/YColumns.cxx89
-rw-r--r--connectivity/source/drivers/mysql/YDriver.cxx481
-rw-r--r--connectivity/source/drivers/mysql/YTable.cxx385
-rw-r--r--connectivity/source/drivers/mysql/YTables.cxx243
-rw-r--r--connectivity/source/drivers/mysql/YUser.cxx350
-rw-r--r--connectivity/source/drivers/mysql/YUsers.cxx118
-rw-r--r--connectivity/source/drivers/mysql/YViews.cxx162
-rw-r--r--connectivity/source/drivers/mysql/Yservices.cxx176
-rw-r--r--connectivity/source/drivers/mysql/exports.dxp3
-rw-r--r--connectivity/source/drivers/mysql/makefile.mk84
-rwxr-xr-xconnectivity/source/drivers/mysql/mysql.xcu258
-rw-r--r--connectivity/source/drivers/mysql/mysql.xml29
-rw-r--r--connectivity/source/drivers/odbc/OFunctions.cxx285
-rw-r--r--connectivity/source/drivers/odbc/ORealDriver.cxx369
-rw-r--r--connectivity/source/drivers/odbc/ORealDriver.hxx50
-rw-r--r--connectivity/source/drivers/odbc/makefile.mk78
-rwxr-xr-xconnectivity/source/drivers/odbc/odbc.xcu175
-rw-r--r--connectivity/source/drivers/odbc/odbc.xml28
-rw-r--r--connectivity/source/drivers/odbc/oservices.cxx177
-rw-r--r--connectivity/source/drivers/odbcbase/OConnection.cxx670
-rw-r--r--connectivity/source/drivers/odbcbase/ODatabaseMetaData.cxx1743
-rw-r--r--connectivity/source/drivers/odbcbase/ODatabaseMetaDataResultSet.cxx1323
-rw-r--r--connectivity/source/drivers/odbcbase/ODriver.cxx229
-rw-r--r--connectivity/source/drivers/odbcbase/OPreparedStatement.cxx973
-rw-r--r--connectivity/source/drivers/odbcbase/OResultSet.cxx1755
-rw-r--r--connectivity/source/drivers/odbcbase/OResultSetMetaData.cxx312
-rw-r--r--connectivity/source/drivers/odbcbase/OStatement.cxx1154
-rw-r--r--connectivity/source/drivers/odbcbase/OTools.cxx946
-rw-r--r--connectivity/source/drivers/odbcbase/makefile.mk90
-rw-r--r--connectivity/source/inc/AutoRetrievingBase.hxx59
-rw-r--r--connectivity/source/inc/FDatabaseMetaDataResultSet.hxx279
-rw-r--r--connectivity/source/inc/FDatabaseMetaDataResultSetMetaData.hxx114
-rw-r--r--connectivity/source/inc/OColumn.hxx146
-rw-r--r--connectivity/source/inc/OSubComponent.hxx92
-rw-r--r--connectivity/source/inc/OTypeInfo.hxx92
-rw-r--r--connectivity/source/inc/ParameterSubstitution.hxx71
-rw-r--r--connectivity/source/inc/RowFunctionParser.hxx152
-rw-r--r--connectivity/source/inc/TConnection.hxx92
-rw-r--r--connectivity/source/inc/TDatabaseMetaDataBase.hxx142
-rw-r--r--connectivity/source/inc/TKeyValue.hxx82
-rw-r--r--connectivity/source/inc/TPrivilegesResultSet.hxx54
-rw-r--r--connectivity/source/inc/TResultSetHelper.hxx58
-rw-r--r--connectivity/source/inc/TSkipDeletedSet.hxx105
-rw-r--r--connectivity/source/inc/TSortIndex.hxx139
-rw-r--r--connectivity/source/inc/UStringDescription_Impl.hxx106
-rw-r--r--connectivity/source/inc/adabas/BCatalog.hxx77
-rw-r--r--connectivity/source/inc/adabas/BColumn.hxx54
-rw-r--r--connectivity/source/inc/adabas/BColumns.hxx61
-rw-r--r--connectivity/source/inc/adabas/BConnection.hxx78
-rw-r--r--connectivity/source/inc/adabas/BDatabaseMetaData.hxx55
-rw-r--r--connectivity/source/inc/adabas/BDriver.hxx177
-rw-r--r--connectivity/source/inc/adabas/BGroup.hxx50
-rw-r--r--connectivity/source/inc/adabas/BGroups.hxx66
-rw-r--r--connectivity/source/inc/adabas/BIndex.hxx58
-rw-r--r--connectivity/source/inc/adabas/BIndexColumn.hxx58
-rw-r--r--connectivity/source/inc/adabas/BIndexColumns.hxx58
-rw-r--r--connectivity/source/inc/adabas/BIndexes.hxx58
-rw-r--r--connectivity/source/inc/adabas/BKeys.hxx55
-rw-r--r--connectivity/source/inc/adabas/BPreparedStatement.hxx52
-rw-r--r--connectivity/source/inc/adabas/BResultSet.hxx60
-rw-r--r--connectivity/source/inc/adabas/BResultSetMetaData.hxx56
-rw-r--r--connectivity/source/inc/adabas/BStatement.hxx62
-rw-r--r--connectivity/source/inc/adabas/BTable.hxx110
-rw-r--r--connectivity/source/inc/adabas/BTables.hxx80
-rw-r--r--connectivity/source/inc/adabas/BUser.hxx82
-rw-r--r--connectivity/source/inc/adabas/BUsers.hxx66
-rw-r--r--connectivity/source/inc/adabas/BViews.hxx64
-rw-r--r--connectivity/source/inc/ado/ACallableStatement.hxx88
-rw-r--r--connectivity/source/inc/ado/ACatalog.hxx61
-rw-r--r--connectivity/source/inc/ado/ACollection.hxx231
-rw-r--r--connectivity/source/inc/ado/AColumn.hxx70
-rw-r--r--connectivity/source/inc/ado/AColumns.hxx68
-rw-r--r--connectivity/source/inc/ado/AConnection.hxx151
-rw-r--r--connectivity/source/inc/ado/ADatabaseMetaData.hxx230
-rw-r--r--connectivity/source/inc/ado/ADatabaseMetaDataResultSet.hxx227
-rw-r--r--connectivity/source/inc/ado/ADatabaseMetaDataResultSetMetaData.hxx115
-rw-r--r--connectivity/source/inc/ado/ADriver.hxx93
-rw-r--r--connectivity/source/inc/ado/AGroup.hxx76
-rw-r--r--connectivity/source/inc/ado/AGroups.hxx69
-rw-r--r--connectivity/source/inc/ado/AIndex.hxx65
-rw-r--r--connectivity/source/inc/ado/AIndexColumn.hxx58
-rw-r--r--connectivity/source/inc/ado/AIndexColumns.hxx55
-rw-r--r--connectivity/source/inc/ado/AIndexes.hxx66
-rw-r--r--connectivity/source/inc/ado/AKey.hxx73
-rw-r--r--connectivity/source/inc/ado/AKeyColumn.hxx58
-rw-r--r--connectivity/source/inc/ado/AKeyColumns.hxx55
-rw-r--r--connectivity/source/inc/ado/AKeys.hxx66
-rw-r--r--connectivity/source/inc/ado/APreparedStatement.hxx124
-rw-r--r--connectivity/source/inc/ado/AResultSet.hxx237
-rw-r--r--connectivity/source/inc/ado/AResultSetMetaData.hxx93
-rw-r--r--connectivity/source/inc/ado/AStatement.hxx201
-rw-r--r--connectivity/source/inc/ado/ATable.hxx88
-rw-r--r--connectivity/source/inc/ado/ATables.hxx65
-rw-r--r--connectivity/source/inc/ado/AUser.hxx102
-rw-r--r--connectivity/source/inc/ado/AUsers.hxx70
-rw-r--r--connectivity/source/inc/ado/AView.hxx66
-rw-r--r--connectivity/source/inc/ado/AViews.hxx64
-rw-r--r--connectivity/source/inc/ado/Aolevariant.hxx175
-rw-r--r--connectivity/source/inc/ado/Aolewrap.hxx245
-rw-r--r--connectivity/source/inc/ado/Awrapado.hxx419
-rw-r--r--connectivity/source/inc/ado/Awrapadox.hxx149
-rw-r--r--connectivity/source/inc/ado/WrapCatalog.hxx58
-rw-r--r--connectivity/source/inc/ado/WrapColumn.hxx72
-rw-r--r--connectivity/source/inc/ado/WrapIndex.hxx60
-rw-r--r--connectivity/source/inc/ado/WrapKey.hxx62
-rw-r--r--connectivity/source/inc/ado/WrapTable.hxx65
-rw-r--r--connectivity/source/inc/ado/WrapTypeDefs.hxx53
-rw-r--r--connectivity/source/inc/ado/adoimp.hxx112
-rw-r--r--connectivity/source/inc/calc/CCatalog.hxx50
-rw-r--r--connectivity/source/inc/calc/CColumns.hxx53
-rw-r--r--connectivity/source/inc/calc/CConnection.hxx97
-rw-r--r--connectivity/source/inc/calc/CDatabaseMetaData.hxx61
-rw-r--r--connectivity/source/inc/calc/CDriver.hxx65
-rw-r--r--connectivity/source/inc/calc/CPreparedStatement.hxx50
-rw-r--r--connectivity/source/inc/calc/CResultSet.hxx90
-rw-r--r--connectivity/source/inc/calc/CStatement.hxx50
-rw-r--r--connectivity/source/inc/calc/CTable.hxx107
-rw-r--r--connectivity/source/inc/calc/CTables.hxx52
-rw-r--r--connectivity/source/inc/dbase/DCatalog.hxx49
-rw-r--r--connectivity/source/inc/dbase/DCode.hxx69
-rw-r--r--connectivity/source/inc/dbase/DColumns.hxx55
-rw-r--r--connectivity/source/inc/dbase/DConnection.hxx58
-rw-r--r--connectivity/source/inc/dbase/DDatabaseMetaData.hxx68
-rw-r--r--connectivity/source/inc/dbase/DDatabaseMetaDataResultSet.hxx196
-rw-r--r--connectivity/source/inc/dbase/DDatabaseMetaDataResultSetMetaData.hxx108
-rw-r--r--connectivity/source/inc/dbase/DDriver.hxx61
-rw-r--r--connectivity/source/inc/dbase/DIndex.hxx160
-rw-r--r--connectivity/source/inc/dbase/DIndexColumns.hxx60
-rw-r--r--connectivity/source/inc/dbase/DIndexIter.hxx85
-rw-r--r--connectivity/source/inc/dbase/DIndexPage.hxx89
-rw-r--r--connectivity/source/inc/dbase/DIndexes.hxx61
-rw-r--r--connectivity/source/inc/dbase/DPreparedStatement.hxx50
-rw-r--r--connectivity/source/inc/dbase/DResultSet.hxx90
-rw-r--r--connectivity/source/inc/dbase/DStatement.hxx49
-rw-r--r--connectivity/source/inc/dbase/DTable.hxx185
-rw-r--r--connectivity/source/inc/dbase/DTables.hxx58
-rw-r--r--connectivity/source/inc/dbase/dindexnode.hxx347
-rw-r--r--connectivity/source/inc/diagnose_ex.h46
-rw-r--r--connectivity/source/inc/file/FCatalog.hxx71
-rw-r--r--connectivity/source/inc/file/FColumns.hxx59
-rw-r--r--connectivity/source/inc/file/FConnection.hxx160
-rw-r--r--connectivity/source/inc/file/FDatabaseMetaData.hxx197
-rw-r--r--connectivity/source/inc/file/FDateFunctions.hxx242
-rw-r--r--connectivity/source/inc/file/FDriver.hxx87
-rw-r--r--connectivity/source/inc/file/FNumericFunctions.hxx376
-rw-r--r--connectivity/source/inc/file/FPreparedStatement.hxx135
-rw-r--r--connectivity/source/inc/file/FResultSet.hxx357
-rw-r--r--connectivity/source/inc/file/FResultSetMetaData.hxx91
-rw-r--r--connectivity/source/inc/file/FStatement.hxx223
-rw-r--r--connectivity/source/inc/file/FStringFunctions.hxx283
-rw-r--r--connectivity/source/inc/file/FTable.hxx120
-rw-r--r--connectivity/source/inc/file/FTables.hxx61
-rw-r--r--connectivity/source/inc/file/fanalyzer.hxx96
-rw-r--r--connectivity/source/inc/file/fcode.hxx396
-rw-r--r--connectivity/source/inc/file/fcomp.hxx120
-rw-r--r--connectivity/source/inc/file/filedllapi.hxx40
-rw-r--r--connectivity/source/inc/file/quotedstring.hxx55
-rw-r--r--connectivity/source/inc/flat/ECatalog.hxx49
-rw-r--r--connectivity/source/inc/flat/EColumns.hxx52
-rw-r--r--connectivity/source/inc/flat/EConnection.hxx71
-rw-r--r--connectivity/source/inc/flat/EDatabaseMetaData.hxx55
-rw-r--r--connectivity/source/inc/flat/EDriver.hxx61
-rw-r--r--connectivity/source/inc/flat/EPreparedStatement.hxx50
-rw-r--r--connectivity/source/inc/flat/EResultSet.hxx81
-rw-r--r--connectivity/source/inc/flat/EStatement.hxx49
-rw-r--r--connectivity/source/inc/flat/ETable.hxx103
-rw-r--r--connectivity/source/inc/flat/ETables.hxx52
-rw-r--r--connectivity/source/inc/hsqldb/HCatalog.hxx72
-rw-r--r--connectivity/source/inc/hsqldb/HColumns.hxx70
-rw-r--r--connectivity/source/inc/hsqldb/HConnection.hxx186
-rw-r--r--connectivity/source/inc/hsqldb/HDriver.hxx144
-rw-r--r--connectivity/source/inc/hsqldb/HStorageAccess.h95
-rw-r--r--connectivity/source/inc/hsqldb/HStorageAccess.hxx43
-rw-r--r--connectivity/source/inc/hsqldb/HStorageMap.hxx94
-rw-r--r--connectivity/source/inc/hsqldb/HTable.hxx128
-rw-r--r--connectivity/source/inc/hsqldb/HTables.hxx78
-rw-r--r--connectivity/source/inc/hsqldb/HTools.hxx65
-rw-r--r--connectivity/source/inc/hsqldb/HUser.hxx82
-rw-r--r--connectivity/source/inc/hsqldb/HUsers.hxx62
-rw-r--r--connectivity/source/inc/hsqldb/HView.hxx97
-rw-r--r--connectivity/source/inc/hsqldb/HViews.hxx63
-rw-r--r--connectivity/source/inc/hsqldb/StorageFileAccess.h37
-rw-r--r--connectivity/source/inc/hsqldb/StorageNativeInputStream.h70
-rw-r--r--connectivity/source/inc/internalnode.hxx60
-rw-r--r--connectivity/source/inc/java/ContextClassLoader.hxx103
-rw-r--r--connectivity/source/inc/java/GlobalRef.hxx122
-rw-r--r--connectivity/source/inc/java/LocalRef.hxx106
-rw-r--r--connectivity/source/inc/java/io/InputStream.hxx60
-rw-r--r--connectivity/source/inc/java/io/Reader.hxx61
-rw-r--r--connectivity/source/inc/java/lang/Boolean.hxx53
-rw-r--r--connectivity/source/inc/java/lang/Class.hxx55
-rw-r--r--connectivity/source/inc/java/lang/Exception.hxx51
-rw-r--r--connectivity/source/inc/java/lang/Object.hxx175
-rw-r--r--connectivity/source/inc/java/lang/String.hxx53
-rw-r--r--connectivity/source/inc/java/lang/Throwable.hxx54
-rw-r--r--connectivity/source/inc/java/math/BigDecimal.hxx53
-rw-r--r--connectivity/source/inc/java/sql/Array.hxx63
-rw-r--r--connectivity/source/inc/java/sql/Blob.hxx63
-rw-r--r--connectivity/source/inc/java/sql/CallableStatement.hxx91
-rw-r--r--connectivity/source/inc/java/sql/Clob.hxx63
-rw-r--r--connectivity/source/inc/java/sql/Connection.hxx151
-rw-r--r--connectivity/source/inc/java/sql/ConnectionLog.hxx142
-rw-r--r--connectivity/source/inc/java/sql/DatabaseMetaData.hxx224
-rw-r--r--connectivity/source/inc/java/sql/Driver.hxx76
-rw-r--r--connectivity/source/inc/java/sql/DriverPropertyInfo.hxx61
-rw-r--r--connectivity/source/inc/java/sql/JStatement.hxx219
-rw-r--r--connectivity/source/inc/java/sql/PreparedStatement.hxx113
-rw-r--r--connectivity/source/inc/java/sql/Ref.hxx58
-rw-r--r--connectivity/source/inc/java/sql/ResultSet.hxx208
-rw-r--r--connectivity/source/inc/java/sql/ResultSetMetaData.hxx82
-rw-r--r--connectivity/source/inc/java/sql/SQLException.hxx68
-rw-r--r--connectivity/source/inc/java/sql/SQLWarning.hxx64
-rw-r--r--connectivity/source/inc/java/sql/Timestamp.hxx99
-rw-r--r--connectivity/source/inc/java/tools.hxx92
-rw-r--r--connectivity/source/inc/java/util/Date.hxx54
-rw-r--r--connectivity/source/inc/java/util/Property.hxx49
-rw-r--r--connectivity/source/inc/mysql/YCatalog.hxx73
-rw-r--r--connectivity/source/inc/mysql/YColumns.hxx70
-rw-r--r--connectivity/source/inc/mysql/YDriver.hxx126
-rw-r--r--connectivity/source/inc/mysql/YTable.hxx128
-rw-r--r--connectivity/source/inc/mysql/YTables.hxx88
-rw-r--r--connectivity/source/inc/mysql/YUser.hxx82
-rw-r--r--connectivity/source/inc/mysql/YUsers.hxx62
-rw-r--r--connectivity/source/inc/mysql/YViews.hxx64
-rw-r--r--connectivity/source/inc/odbc/OBoundParam.hxx222
-rw-r--r--connectivity/source/inc/odbc/OConnection.hxx160
-rw-r--r--connectivity/source/inc/odbc/ODatabaseMetaData.hxx224
-rw-r--r--connectivity/source/inc/odbc/ODatabaseMetaDataResultSet.hxx242
-rw-r--r--connectivity/source/inc/odbc/ODefs3.hxx92
-rw-r--r--connectivity/source/inc/odbc/ODriver.hxx90
-rw-r--r--connectivity/source/inc/odbc/OFunctiondefs.hxx175
-rw-r--r--connectivity/source/inc/odbc/OFunctions.hxx556
-rw-r--r--connectivity/source/inc/odbc/OPreparedStatement.hxx171
-rw-r--r--connectivity/source/inc/odbc/OResultSet.hxx327
-rw-r--r--connectivity/source/inc/odbc/OResultSetMetaData.hxx126
-rw-r--r--connectivity/source/inc/odbc/OStatement.hxx248
-rw-r--r--connectivity/source/inc/odbc/OTools.hxx276
-rw-r--r--connectivity/source/inc/odbc/odbcbasedllapi.hxx40
-rw-r--r--connectivity/source/inc/propertyids.hxx159
-rw-r--r--connectivity/source/inc/resource/adabas_res.hrc43
-rw-r--r--connectivity/source/inc/resource/ado_res.hrc50
-rw-r--r--connectivity/source/inc/resource/calc_res.hrc41
-rw-r--r--connectivity/source/inc/resource/common_res.hrc78
-rw-r--r--connectivity/source/inc/resource/conn_shared_res.hrc73
-rw-r--r--connectivity/source/inc/resource/dbase_res.hrc61
-rw-r--r--connectivity/source/inc/resource/evoab2_res.hrc42
-rw-r--r--connectivity/source/inc/resource/file_res.hrc48
-rw-r--r--connectivity/source/inc/resource/hsqldb_res.hrc47
-rw-r--r--connectivity/source/inc/resource/jdbc_log.hrc90
-rw-r--r--connectivity/source/inc/resource/kab_res.hrc43
-rw-r--r--connectivity/source/inc/resource/macab_res.hrc41
-rw-r--r--connectivity/source/inc/resource/mozab_res.hrc74
-rw-r--r--connectivity/source/inc/resource/sharedresources.hxx164
-rw-r--r--connectivity/source/inc/sqlscan.hxx90
-rw-r--r--connectivity/source/manager/exports.dxp3
-rw-r--r--connectivity/source/manager/makefile.mk79
-rw-r--r--connectivity/source/manager/mdrivermanager.cxx741
-rw-r--r--connectivity/source/manager/mdrivermanager.hxx146
-rw-r--r--connectivity/source/manager/mregistration.cxx112
-rw-r--r--connectivity/source/manager/sdbc.mxp.map53
-rw-r--r--connectivity/source/parse/PColumn.cxx249
-rw-r--r--connectivity/source/parse/internalnode.cxx85
-rw-r--r--connectivity/source/parse/makefile.mk67
-rw-r--r--connectivity/source/parse/sqlbison.y4381
-rw-r--r--connectivity/source/parse/sqlflex.l809
-rw-r--r--connectivity/source/parse/sqliterator.cxx2247
-rw-r--r--connectivity/source/parse/sqlnode.cxx2826
-rw-r--r--connectivity/source/parse/wrap_sqlbison.cxx31
-rw-r--r--connectivity/source/parse/wrap_sqlflex.cxx35
-rw-r--r--connectivity/source/resource/conn_error_message.src99
-rw-r--r--connectivity/source/resource/conn_log_res.src312
-rw-r--r--connectivity/source/resource/conn_shared_res.src649
-rw-r--r--connectivity/source/resource/makefile.mk108
-rw-r--r--connectivity/source/resource/sharedresources.cxx242
-rw-r--r--connectivity/source/sdbcx/VCatalog.cxx241
-rw-r--r--connectivity/source/sdbcx/VCollection.cxx603
-rw-r--r--connectivity/source/sdbcx/VColumn.cxx229
-rw-r--r--connectivity/source/sdbcx/VDescriptor.cxx155
-rw-r--r--connectivity/source/sdbcx/VGroup.cxx183
-rw-r--r--connectivity/source/sdbcx/VIndex.cxx223
-rw-r--r--connectivity/source/sdbcx/VIndexColumn.cxx120
-rw-r--r--connectivity/source/sdbcx/VKey.cxx228
-rw-r--r--connectivity/source/sdbcx/VKeyColumn.cxx125
-rw-r--r--connectivity/source/sdbcx/VTable.cxx336
-rw-r--r--connectivity/source/sdbcx/VUser.cxx194
-rw-r--r--connectivity/source/sdbcx/VView.cxx150
-rw-r--r--connectivity/source/sdbcx/makefile.mk63
-rw-r--r--connectivity/source/simpledbt/charset_s.cxx73
-rw-r--r--connectivity/source/simpledbt/charset_s.hxx68
-rw-r--r--connectivity/source/simpledbt/dbtfactory.cxx114
-rw-r--r--connectivity/source/simpledbt/dbtfactory.hxx81
-rw-r--r--connectivity/source/simpledbt/makefile.mk53
-rw-r--r--connectivity/source/simpledbt/parsenode_s.cxx93
-rw-r--r--connectivity/source/simpledbt/parsenode_s.hxx81
-rw-r--r--connectivity/source/simpledbt/parser_s.cxx86
-rw-r--r--connectivity/source/simpledbt/parser_s.hxx74
-rw-r--r--connectivity/source/simpledbt/refbase.cxx64
-rw-r--r--connectivity/source/simpledbt/refbase.hxx61
-rw-r--r--connectivity/source/simpledbt/staticdbtools_s.cxx212
-rw-r--r--connectivity/source/simpledbt/staticdbtools_s.hxx207
-rwxr-xr-xconnectivity/target.pmk36
-rwxr-xr-xconnectivity/util/makefile.mk62
-rw-r--r--connectivity/version.mk119
-rw-r--r--connectivity/workben/TT/StartTest.classbin0 -> 183 bytes
-rw-r--r--connectivity/workben/TT/StartTest.java293
-rw-r--r--connectivity/workben/iniParser/main.cxx189
-rw-r--r--connectivity/workben/iniParser/makefile.mk62
-rw-r--r--connectivity/workben/little/main.cxx117
-rw-r--r--connectivity/workben/little/makefile.mk60
-rw-r--r--connectivity/workben/skeleton/SResultSet.hxx246
-rw-r--r--connectivity/workben/skeleton/how_to_write_a_driver.txt51
-rw-r--r--connectivity/workben/testmoz/initUNO.cxx45
-rw-r--r--connectivity/workben/testmoz/main.cxx724
-rw-r--r--connectivity/workben/testmoz/makefile.mk70
-rw-r--r--connectivity/workben/testmoz/mozthread.cxx477
-rw-r--r--cosv/inc/cosv/bstream.hxx150
-rw-r--r--cosv/inc/cosv/comdline.hxx70
-rw-r--r--cosv/inc/cosv/comfunc.hxx125
-rw-r--r--cosv/inc/cosv/commandline.hxx180
-rw-r--r--cosv/inc/cosv/csv_env.hxx154
-rw-r--r--cosv/inc/cosv/csv_ostream.hxx134
-rw-r--r--cosv/inc/cosv/csv_precomp.h46
-rw-r--r--cosv/inc/cosv/datetime.hxx84
-rw-r--r--cosv/inc/cosv/dirchain.hxx180
-rw-r--r--cosv/inc/cosv/file.hxx137
-rw-r--r--cosv/inc/cosv/mbstream.hxx93
-rw-r--r--cosv/inc/cosv/openclose.hxx144
-rw-r--r--cosv/inc/cosv/persist.hxx105
-rw-r--r--cosv/inc/cosv/ploc.hxx129
-rw-r--r--cosv/inc/cosv/ploc_dir.hxx118
-rw-r--r--cosv/inc/cosv/plocroot.hxx80
-rw-r--r--cosv/inc/cosv/std_outp.hxx136
-rw-r--r--cosv/inc/cosv/str_types.hxx94
-rw-r--r--cosv/inc/cosv/streamstr.hxx391
-rw-r--r--cosv/inc/cosv/string.hxx579
-rw-r--r--cosv/inc/cosv/stringdata.hxx135
-rw-r--r--cosv/inc/cosv/tpl/dyn.hxx238
-rw-r--r--cosv/inc/cosv/tpl/funcall.hxx307
-rw-r--r--cosv/inc/cosv/tpl/processor.hxx183
-rw-r--r--cosv/inc/cosv/tpl/range.hxx191
-rw-r--r--cosv/inc/cosv/tpl/swelist.hxx369
-rw-r--r--cosv/inc/cosv/tpl/tpltools.hxx228
-rw-r--r--cosv/inc/cosv/tpl/vvector.hxx539
-rw-r--r--cosv/inc/cosv/x.hxx71
-rw-r--r--cosv/prj/build.lst16
-rw-r--r--cosv/prj/d.lst8
-rw-r--r--cosv/source/comphelp/badcast.cxx45
-rw-r--r--cosv/source/comphelp/makefile.mk55
-rw-r--r--cosv/source/fullcpp.mk57
-rw-r--r--cosv/source/inc/precomp.h36
-rw-r--r--cosv/source/service/comdline.cxx57
-rw-r--r--cosv/source/service/comfunc.cxx155
-rw-r--r--cosv/source/service/commandline.cxx342
-rw-r--r--cosv/source/service/csv_ostream.cxx92
-rw-r--r--cosv/source/service/datetime.cxx84
-rw-r--r--cosv/source/service/makefile.mk59
-rw-r--r--cosv/source/service/std_outp.cxx81
-rw-r--r--cosv/source/storage/dirchain.cxx155
-rw-r--r--cosv/source/storage/file.cxx242
-rw-r--r--cosv/source/storage/makefile.mk69
-rw-r--r--cosv/source/storage/mbstream.cxx119
-rw-r--r--cosv/source/storage/persist.cxx113
-rw-r--r--cosv/source/storage/ploc.cxx157
-rw-r--r--cosv/source/storage/ploc_dir.cxx364
-rw-r--r--cosv/source/storage/plocroot.cxx525
-rw-r--r--cosv/source/strings/makefile.mk58
-rw-r--r--cosv/source/strings/str_types.cxx44
-rw-r--r--cosv/source/strings/streamstr.cxx981
-rw-r--r--cosv/source/strings/string.cxx414
-rw-r--r--cosv/source/unittest/file_ut.cxx121
-rw-r--r--cosv/source/unittest/makefile.mk80
-rw-r--r--cosv/source/unittest/string_ut.cxx140
-rw-r--r--cosv/source/unittest/ut.hxx53
-rw-r--r--cosv/source/unittest/ut_main.cxx47
-rw-r--r--cosv/util/makefile.mk58
-rw-r--r--cppcanvas/inc/cppcanvas/basegfxfactory.hxx104
-rw-r--r--cppcanvas/inc/cppcanvas/bitmap.hxx80
-rw-r--r--cppcanvas/inc/cppcanvas/bitmapcanvas.hxx66
-rw-r--r--cppcanvas/inc/cppcanvas/canvas.hxx116
-rw-r--r--cppcanvas/inc/cppcanvas/canvasgraphic.hxx170
-rw-r--r--cppcanvas/inc/cppcanvas/color.hxx95
-rw-r--r--cppcanvas/inc/cppcanvas/customsprite.hxx53
-rw-r--r--cppcanvas/inc/cppcanvas/font.hxx65
-rw-r--r--cppcanvas/inc/cppcanvas/polypolygon.hxx93
-rw-r--r--cppcanvas/inc/cppcanvas/renderer.hxx147
-rw-r--r--cppcanvas/inc/cppcanvas/sprite.hxx116
-rw-r--r--cppcanvas/inc/cppcanvas/spritecanvas.hxx81
-rw-r--r--cppcanvas/inc/cppcanvas/text.hxx55
-rw-r--r--cppcanvas/inc/cppcanvas/vclfactory.hxx147
-rw-r--r--cppcanvas/inc/makefile.mk47
-rw-r--r--cppcanvas/inc/pch/precompiled_cppcanvas.cxx29
-rw-r--r--cppcanvas/inc/pch/precompiled_cppcanvas.hxx32
-rw-r--r--cppcanvas/prj/build.lst7
-rw-r--r--cppcanvas/prj/d.lst19
-rw-r--r--cppcanvas/source/inc/action.hxx164
-rw-r--r--cppcanvas/source/inc/canvasgraphichelper.hxx86
-rw-r--r--cppcanvas/source/inc/implrenderer.hxx187
-rw-r--r--cppcanvas/source/inc/tools.hxx56
-rw-r--r--cppcanvas/source/mtfrenderer/bitmapaction.cxx238
-rw-r--r--cppcanvas/source/mtfrenderer/bitmapaction.hxx81
-rw-r--r--cppcanvas/source/mtfrenderer/cachedprimitivebase.cxx93
-rw-r--r--cppcanvas/source/mtfrenderer/cachedprimitivebase.hxx95
-rw-r--r--cppcanvas/source/mtfrenderer/implrenderer.cxx3155
-rw-r--r--cppcanvas/source/mtfrenderer/lineaction.cxx167
-rw-r--r--cppcanvas/source/mtfrenderer/lineaction.hxx73
-rw-r--r--cppcanvas/source/mtfrenderer/makefile.mk57
-rw-r--r--cppcanvas/source/mtfrenderer/mtftools.cxx693
-rw-r--r--cppcanvas/source/mtfrenderer/mtftools.hxx270
-rw-r--r--cppcanvas/source/mtfrenderer/outdevstate.hxx145
-rw-r--r--cppcanvas/source/mtfrenderer/pointaction.cxx187
-rw-r--r--cppcanvas/source/mtfrenderer/pointaction.hxx78
-rw-r--r--cppcanvas/source/mtfrenderer/polypolyaction.cxx538
-rw-r--r--cppcanvas/source/mtfrenderer/polypolyaction.hxx101
-rw-r--r--cppcanvas/source/mtfrenderer/textaction.cxx2315
-rw-r--r--cppcanvas/source/mtfrenderer/textaction.hxx102
-rw-r--r--cppcanvas/source/mtfrenderer/transparencygroupaction.cxx592
-rw-r--r--cppcanvas/source/mtfrenderer/transparencygroupaction.hxx140
-rw-r--r--cppcanvas/source/tools/canvasgraphichelper.cxx151
-rw-r--r--cppcanvas/source/tools/makefile.mk50
-rw-r--r--cppcanvas/source/tools/tools.cxx62
-rw-r--r--cppcanvas/source/wrapper/basegfxfactory.cxx164
-rw-r--r--cppcanvas/source/wrapper/implbitmap.cxx126
-rw-r--r--cppcanvas/source/wrapper/implbitmap.hxx82
-rw-r--r--cppcanvas/source/wrapper/implbitmapcanvas.cxx73
-rw-r--r--cppcanvas/source/wrapper/implbitmapcanvas.hxx76
-rw-r--r--cppcanvas/source/wrapper/implcanvas.cxx141
-rw-r--r--cppcanvas/source/wrapper/implcanvas.hxx104
-rw-r--r--cppcanvas/source/wrapper/implcolor.cxx68
-rw-r--r--cppcanvas/source/wrapper/implcolor.hxx66
-rw-r--r--cppcanvas/source/wrapper/implcustomsprite.cxx82
-rw-r--r--cppcanvas/source/wrapper/implcustomsprite.hxx71
-rw-r--r--cppcanvas/source/wrapper/implfont.cxx91
-rw-r--r--cppcanvas/source/wrapper/implfont.hxx83
-rw-r--r--cppcanvas/source/wrapper/implpolypolygon.cxx201
-rw-r--r--cppcanvas/source/wrapper/implpolypolygon.hxx99
-rw-r--r--cppcanvas/source/wrapper/implsprite.cxx236
-rw-r--r--cppcanvas/source/wrapper/implsprite.hxx95
-rw-r--r--cppcanvas/source/wrapper/implspritecanvas.cxx159
-rw-r--r--cppcanvas/source/wrapper/implspritecanvas.hxx110
-rw-r--r--cppcanvas/source/wrapper/impltext.cxx101
-rw-r--r--cppcanvas/source/wrapper/impltext.hxx78
-rw-r--r--cppcanvas/source/wrapper/makefile.mk60
-rw-r--r--cppcanvas/source/wrapper/vclfactory.cxx363
-rw-r--r--cppcanvas/util/cppcanvas.flt4
-rw-r--r--cppcanvas/util/makefile.mk70
-rw-r--r--cppu/inc/com/sun/star/uno/Any.h383
-rw-r--r--cppu/inc/com/sun/star/uno/Any.hxx589
-rw-r--r--cppu/inc/com/sun/star/uno/Reference.h533
-rw-r--r--cppu/inc/com/sun/star/uno/Reference.hxx431
-rw-r--r--cppu/inc/com/sun/star/uno/Sequence.h288
-rw-r--r--cppu/inc/com/sun/star/uno/Sequence.hxx307
-rw-r--r--cppu/inc/com/sun/star/uno/Type.h458
-rw-r--r--cppu/inc/com/sun/star/uno/Type.hxx327
-rw-r--r--cppu/inc/com/sun/star/uno/genfunc.h69
-rw-r--r--cppu/inc/com/sun/star/uno/genfunc.hxx88
-rw-r--r--cppu/inc/cppu/Enterable.hxx114
-rw-r--r--cppu/inc/cppu/EnvDcp.hxx75
-rw-r--r--cppu/inc/cppu/EnvGuards.hxx113
-rw-r--r--cppu/inc/cppu/FreeReference.hxx166
-rw-r--r--cppu/inc/cppu/Map.hxx113
-rw-r--r--cppu/inc/cppu/Shield.hxx90
-rw-r--r--cppu/inc/cppu/helper/purpenv/Environment.hxx46
-rw-r--r--cppu/inc/cppu/helper/purpenv/Mapping.hxx68
-rw-r--r--cppu/inc/cppu/macros.hxx65
-rw-r--r--cppu/inc/cppu/unotype.hxx377
-rw-r--r--cppu/inc/makefile.mk48
-rw-r--r--cppu/inc/pch/precompiled_cppu.cxx29
-rw-r--r--cppu/inc/pch/precompiled_cppu.hxx32
-rw-r--r--cppu/inc/typelib/typeclass.h104
-rw-r--r--cppu/inc/typelib/typedescription.h1160
-rw-r--r--cppu/inc/typelib/typedescription.hxx226
-rw-r--r--cppu/inc/typelib/uik.h53
-rw-r--r--cppu/inc/uno/Enterable.h112
-rw-r--r--cppu/inc/uno/EnvDcp.h63
-rw-r--r--cppu/inc/uno/any2.h178
-rw-r--r--cppu/inc/uno/cuno.h50
-rw-r--r--cppu/inc/uno/current_context.h68
-rw-r--r--cppu/inc/uno/current_context.hxx127
-rw-r--r--cppu/inc/uno/data.h257
-rw-r--r--cppu/inc/uno/dispatcher.h97
-rw-r--r--cppu/inc/uno/dispatcher.hxx175
-rw-r--r--cppu/inc/uno/environment.h385
-rw-r--r--cppu/inc/uno/environment.hxx278
-rw-r--r--cppu/inc/uno/lbnames.h103
-rw-r--r--cppu/inc/uno/mapping.h203
-rw-r--r--cppu/inc/uno/mapping.hxx354
-rw-r--r--cppu/inc/uno/sequence2.h187
-rw-r--r--cppu/inc/uno/threadpool.h189
-rw-r--r--cppu/prj/build.lst12
-rw-r--r--cppu/prj/d.lst74
-rw-r--r--cppu/qa/makefile.mk96
-rw-r--r--cppu/qa/test_any.cxx2330
-rw-r--r--cppu/qa/test_recursion.cxx57
-rw-r--r--cppu/qa/test_reference.cxx156
-rw-r--r--cppu/qa/test_unotype.cxx812
-rw-r--r--cppu/qa/types.idl63
-rw-r--r--cppu/qa/version.map34
-rw-r--r--cppu/source/AffineBridge/AffineBridge.cxx364
-rw-r--r--cppu/source/AffineBridge/makefile.mk44
-rwxr-xr-xcppu/source/LogBridge/LogBridge.cxx277
-rwxr-xr-xcppu/source/LogBridge/makefile.mk44
-rw-r--r--cppu/source/UnsafeBridge/UnsafeBridge.cxx163
-rw-r--r--cppu/source/UnsafeBridge/makefile.mk44
-rw-r--r--cppu/source/cppu/cppu_opt.cxx81
-rw-r--r--cppu/source/cppu/makefile.mk45
-rw-r--r--cppu/source/helper/purpenv/Proxy.hxx89
-rw-r--r--cppu/source/helper/purpenv/export.mk19
-rw-r--r--cppu/source/helper/purpenv/helper_purpenv_Environment.cxx537
-rw-r--r--cppu/source/helper/purpenv/helper_purpenv_Mapping.cxx233
-rw-r--r--cppu/source/helper/purpenv/helper_purpenv_Proxy.cxx530
-rw-r--r--cppu/source/helper/purpenv/makefile.mk46
-rw-r--r--cppu/source/threadpool/current.cxx299
-rw-r--r--cppu/source/threadpool/current.hxx48
-rw-r--r--cppu/source/threadpool/jobqueue.cxx191
-rw-r--r--cppu/source/threadpool/jobqueue.hxx79
-rw-r--r--cppu/source/threadpool/makefile.mk49
-rw-r--r--cppu/source/threadpool/thread.cxx217
-rw-r--r--cppu/source/threadpool/thread.hxx88
-rw-r--r--cppu/source/threadpool/threadident.cxx135
-rw-r--r--cppu/source/threadpool/threadpool.cxx502
-rw-r--r--cppu/source/threadpool/threadpool.hxx129
-rw-r--r--cppu/source/typelib/makefile.mk45
-rw-r--r--cppu/source/typelib/static_types.cxx673
-rw-r--r--cppu/source/typelib/typelib.cxx2671
-rw-r--r--cppu/source/uno/EnvDcp.c49
-rw-r--r--cppu/source/uno/EnvStack.cxx380
-rw-r--r--cppu/source/uno/IdentityMapping.cxx106
-rw-r--r--cppu/source/uno/IdentityMapping.hxx39
-rw-r--r--cppu/source/uno/any.cxx150
-rw-r--r--cppu/source/uno/assign.hxx635
-rw-r--r--cppu/source/uno/cascade_mapping.cxx341
-rw-r--r--cppu/source/uno/cascade_mapping.hxx41
-rw-r--r--cppu/source/uno/constr.hxx267
-rw-r--r--cppu/source/uno/copy.hxx886
-rw-r--r--cppu/source/uno/data.cxx617
-rw-r--r--cppu/source/uno/destr.hxx438
-rw-r--r--cppu/source/uno/env_subst.cxx54
-rw-r--r--cppu/source/uno/env_subst.hxx41
-rw-r--r--cppu/source/uno/eq.hxx668
-rw-r--r--cppu/source/uno/lbenv.cxx1182
-rw-r--r--cppu/source/uno/lbmap.cxx692
-rw-r--r--cppu/source/uno/loadmodule.cxx55
-rw-r--r--cppu/source/uno/loadmodule.hxx51
-rw-r--r--cppu/source/uno/makefile.mk55
-rw-r--r--cppu/source/uno/prim.hxx206
-rw-r--r--cppu/source/uno/sequence.cxx1016
-rwxr-xr-xcppu/util/cppu.map127
-rw-r--r--cppu/util/empty.def6
-rw-r--r--cppu/util/extra.mk89
-rw-r--r--cppu/util/makefile.mk105
-rw-r--r--cppu/util/makefile.pmk32
-rw-r--r--cppu/util/purpenvhelper3MSC.map8
-rw-r--r--cppu/util/target.pmk62
-rw-r--r--cppu/util/uno_purpenvhelperC52.map9
-rw-r--r--cppu/util/uno_purpenvhelpergcc3.map8
-rw-r--r--cppu/util/uno_purpenvhelperwntgcc.map8
-rw-r--r--cppu/util/unsafe_os2.map7
-rwxr-xr-xcppuhelper/inc/cppuhelper/access_control.hxx124
-rw-r--r--cppuhelper/inc/cppuhelper/basemutex.hxx49
-rw-r--r--cppuhelper/inc/cppuhelper/bootstrap.hxx223
-rw-r--r--cppuhelper/inc/cppuhelper/compbase.hxx115
-rw-r--r--cppuhelper/inc/cppuhelper/compbase1.hxx137
-rw-r--r--cppuhelper/inc/cppuhelper/compbase10.hxx137
-rw-r--r--cppuhelper/inc/cppuhelper/compbase11.hxx137
-rw-r--r--cppuhelper/inc/cppuhelper/compbase12.hxx137
-rw-r--r--cppuhelper/inc/cppuhelper/compbase2.hxx137
-rw-r--r--cppuhelper/inc/cppuhelper/compbase3.hxx137
-rw-r--r--cppuhelper/inc/cppuhelper/compbase4.hxx137
-rw-r--r--cppuhelper/inc/cppuhelper/compbase5.hxx137
-rw-r--r--cppuhelper/inc/cppuhelper/compbase6.hxx137
-rw-r--r--cppuhelper/inc/cppuhelper/compbase7.hxx137
-rw-r--r--cppuhelper/inc/cppuhelper/compbase8.hxx137
-rw-r--r--cppuhelper/inc/cppuhelper/compbase9.hxx136
-rw-r--r--cppuhelper/inc/cppuhelper/compbase_ex.hxx176
-rw-r--r--cppuhelper/inc/cppuhelper/component.hxx120
-rw-r--r--cppuhelper/inc/cppuhelper/component_context.hxx96
-rw-r--r--cppuhelper/inc/cppuhelper/exc_hlp.hxx98
-rw-r--r--cppuhelper/inc/cppuhelper/factory.hxx277
-rw-r--r--cppuhelper/inc/cppuhelper/findsofficepath.h45
-rw-r--r--cppuhelper/inc/cppuhelper/implbase.hxx298
-rw-r--r--cppuhelper/inc/cppuhelper/implbase1.hxx295
-rw-r--r--cppuhelper/inc/cppuhelper/implbase10.hxx300
-rw-r--r--cppuhelper/inc/cppuhelper/implbase11.hxx301
-rw-r--r--cppuhelper/inc/cppuhelper/implbase12.hxx302
-rw-r--r--cppuhelper/inc/cppuhelper/implbase2.hxx291
-rw-r--r--cppuhelper/inc/cppuhelper/implbase3.hxx293
-rw-r--r--cppuhelper/inc/cppuhelper/implbase4.hxx294
-rw-r--r--cppuhelper/inc/cppuhelper/implbase5.hxx295
-rw-r--r--cppuhelper/inc/cppuhelper/implbase6.hxx296
-rw-r--r--cppuhelper/inc/cppuhelper/implbase7.hxx298
-rw-r--r--cppuhelper/inc/cppuhelper/implbase8.hxx298
-rw-r--r--cppuhelper/inc/cppuhelper/implbase9.hxx300
-rw-r--r--cppuhelper/inc/cppuhelper/implbase_ex.hxx174
-rw-r--r--cppuhelper/inc/cppuhelper/implbase_ex_post.hxx231
-rw-r--r--cppuhelper/inc/cppuhelper/implbase_ex_pre.hxx36
-rw-r--r--cppuhelper/inc/cppuhelper/implementationentry.hxx111
-rw-r--r--cppuhelper/inc/cppuhelper/interfacecontainer.h604
-rw-r--r--cppuhelper/inc/cppuhelper/interfacecontainer.hxx203
-rw-r--r--cppuhelper/inc/cppuhelper/propertysetmixin.hxx488
-rw-r--r--cppuhelper/inc/cppuhelper/propshlp.hxx640
-rw-r--r--cppuhelper/inc/cppuhelper/proptypehlp.h76
-rw-r--r--cppuhelper/inc/cppuhelper/proptypehlp.hxx530
-rw-r--r--cppuhelper/inc/cppuhelper/queryinterface.hxx541
-rw-r--r--cppuhelper/inc/cppuhelper/servicefactory.hxx122
-rw-r--r--cppuhelper/inc/cppuhelper/shlib.hxx82
-rw-r--r--cppuhelper/inc/cppuhelper/stdidlclass.hxx389
-rw-r--r--cppuhelper/inc/cppuhelper/typeprovider.hxx242
-rw-r--r--cppuhelper/inc/cppuhelper/unourl.hxx192
-rw-r--r--cppuhelper/inc/cppuhelper/weak.hxx172
-rw-r--r--cppuhelper/inc/cppuhelper/weakagg.hxx111
-rw-r--r--cppuhelper/inc/cppuhelper/weakref.hxx169
-rw-r--r--cppuhelper/inc/makefile.mk47
-rw-r--r--cppuhelper/inc/pch/precompiled_cppuhelper.cxx29
-rw-r--r--cppuhelper/inc/pch/precompiled_cppuhelper.hxx32
-rw-r--r--cppuhelper/prj/build.lst6
-rw-r--r--cppuhelper/prj/d.lst74
-rw-r--r--cppuhelper/qa/ifcontainer/cppu_ifcontainer.cxx283
-rw-r--r--cppuhelper/qa/ifcontainer/export.map7
-rw-r--r--cppuhelper/qa/ifcontainer/makefile.mk61
-rw-r--r--cppuhelper/qa/propertysetmixin/JavaSupplier.java322
-rw-r--r--cppuhelper/qa/propertysetmixin/comp_propertysetmixin.cxx436
-rw-r--r--cppuhelper/qa/propertysetmixin/makefile.mk125
-rw-r--r--cppuhelper/qa/propertysetmixin/manifest2
-rw-r--r--cppuhelper/qa/propertysetmixin/test.map34
-rw-r--r--cppuhelper/qa/propertysetmixin/test_propertysetmixin.cxx680
-rw-r--r--cppuhelper/qa/propertysetmixin/types.idl85
-rw-r--r--cppuhelper/qa/sce/test_unourl.sce1
-rw-r--r--cppuhelper/qa/unourl/cppu_unourl.cxx481
-rw-r--r--cppuhelper/qa/unourl/export.map7
-rw-r--r--cppuhelper/qa/unourl/makefile.mk61
-rw-r--r--cppuhelper/qa/weak/makefile.mk53
-rw-r--r--cppuhelper/qa/weak/test_weak.cxx109
-rw-r--r--cppuhelper/qa/weak/version.map34
-rw-r--r--cppuhelper/source/access_control.cxx149
-rw-r--r--cppuhelper/source/bootstrap.cxx664
-rwxr-xr-xcppuhelper/source/cc5_solaris_sparc.map389
-rw-r--r--cppuhelper/source/component.cxx248
-rw-r--r--cppuhelper/source/component_context.cxx899
-rw-r--r--cppuhelper/source/exc_thrower.cxx298
-rw-r--r--cppuhelper/source/factory.cxx1140
-rw-r--r--cppuhelper/source/findsofficepath.c205
-rw-r--r--cppuhelper/source/gcc3.map384
-rw-r--r--cppuhelper/source/gcc3os2.map377
-rw-r--r--cppuhelper/source/implbase.cxx471
-rw-r--r--cppuhelper/source/implbase_ex.cxx469
-rw-r--r--cppuhelper/source/implementationentry.cxx102
-rw-r--r--cppuhelper/source/interfacecontainer.cxx731
-rw-r--r--cppuhelper/source/macro_expander.cxx198
-rw-r--r--cppuhelper/source/macro_expander.hxx60
-rw-r--r--cppuhelper/source/makefile.mk192
-rw-r--r--cppuhelper/source/msvc_win32_intel.map280
-rw-r--r--cppuhelper/source/propertysetmixin.cxx1428
-rw-r--r--cppuhelper/source/propshlp.cxx1241
-rw-r--r--cppuhelper/source/servicefactory.cxx660
-rw-r--r--cppuhelper/source/shlib.cxx609
-rw-r--r--cppuhelper/source/stdidlclass.cxx259
-rw-r--r--cppuhelper/source/tdmgr.cxx762
-rw-r--r--cppuhelper/source/typeprovider.cxx326
-rw-r--r--cppuhelper/source/unorc30
-rw-r--r--cppuhelper/source/unourl.cxx298
-rw-r--r--cppuhelper/source/weak.cxx553
-rw-r--r--cppuhelper/test/bootstrap/TestEnv.cxx128
-rw-r--r--cppuhelper/test/bootstrap/TestEnv.def8
-rw-r--r--cppuhelper/test/bootstrap/bootstrap.test.cxx320
-rw-r--r--cppuhelper/test/bootstrap/makefile.mk61
-rw-r--r--cppuhelper/test/cfg_data/instance/uno/components.xml76
-rw-r--r--cppuhelper/test/cfg_data/template/uno/components.xml24
-rw-r--r--cppuhelper/test/cfg_test.cxx303
-rw-r--r--cppuhelper/test/helpertest.idl84
-rw-r--r--cppuhelper/test/loader/loader.test.cxx205
-rw-r--r--cppuhelper/test/loader/makefile.mk59
-rw-r--r--cppuhelper/test/makefile.mk168
-rw-r--r--cppuhelper/test/testcmp/TestComponent.cxx247
-rw-r--r--cppuhelper/test/testcmp/TestComponent.hxx56
-rwxr-xr-xcppuhelper/test/testcmp/TestComponent.uno.def11
-rw-r--r--cppuhelper/test/testcmp/makefile.mk49
-rw-r--r--cppuhelper/test/testcontainer.cxx153
-rw-r--r--cppuhelper/test/testdefaultbootstrapping.cxx84
-rw-r--r--cppuhelper/test/testdefaultbootstrapping.pl277
-rw-r--r--cppuhelper/test/testhelper.cxx104
-rw-r--r--cppuhelper/test/testhelper.hxx31
-rw-r--r--cppuhelper/test/testidlclass.cxx227
-rw-r--r--cppuhelper/test/testimplhelper.cxx581
-rw-r--r--cppuhelper/test/testlib/UNO.pm68
-rwxr-xr-xcppuhelper/test/testlib/defbootstrap.map8
-rw-r--r--cppuhelper/test/testlib/defbootstrap_lib.cxx117
-rwxr-xr-xcppuhelper/test/testlib/makefile.mk103
-rw-r--r--cppuhelper/test/testpropshlp.cxx1181
-rw-r--r--cppuhelper/test/testproptyphlp.cxx84
-rw-r--r--cppuhelper/unotypes/cppuhelper/detail/XExceptionThrower.idl47
-rw-r--r--cppuhelper/unotypes/makefile.mk52
-rw-r--r--cppunit/ldflags.patch10
-rw-r--r--cppunit/makefile.mk192
-rw-r--r--cppunit/ooo-DllPlugInTester.mk50
-rw-r--r--cppunit/ooo-cppunit_dll.mk100
-rw-r--r--cppunit/prj/build.lst2
-rw-r--r--cppunit/prj/d.lst29
-rw-r--r--cppunit/solarisfinite.patch14
-rw-r--r--cppunit/warnings.patch22
-rw-r--r--cppunit/windows.patch12
-rw-r--r--cpputools/prj/build.lst8
-rw-r--r--cpputools/prj/d.lst12
-rwxr-xr-xcpputools/source/regcomplazy/makefile.mk54
-rwxr-xr-xcpputools/source/regcomplazy/regcomplazy.cxx282
-rw-r--r--cpputools/source/registercomponent/makefile.mk75
-rw-r--r--cpputools/source/registercomponent/registercomponent.cxx855
-rw-r--r--cpputools/source/regsingleton/makefile.mk79
-rw-r--r--cpputools/source/regsingleton/regsingleton.cxx173
-rw-r--r--cpputools/source/sp2bv/makefile.mk56
-rw-r--r--cpputools/source/sp2bv/readme.txt10
-rw-r--r--cpputools/source/sp2bv/sp2bv.cxx141
-rw-r--r--cpputools/source/unoexe/makefile.mk91
-rw-r--r--cpputools/source/unoexe/unoexe.cxx899
-rw-r--r--curl/curl-7.19.7.patch83
-rw-r--r--curl/curl-7.19.7_mingw.patch24
-rw-r--r--curl/curl-7.19.7_win.patch19
-rw-r--r--curl/makefile.mk162
-rw-r--r--curl/prj/build.lst3
-rw-r--r--curl/prj/d.lst15
-rw-r--r--dbaccess/inc/AsyncronousLink.hxx71
-rw-r--r--dbaccess/inc/IController.hxx140
-rw-r--r--dbaccess/inc/IEnvironment.hxx77
-rw-r--r--dbaccess/inc/IReference.hxx44
-rw-r--r--dbaccess/inc/ToolBoxHelper.hxx95
-rw-r--r--dbaccess/inc/controllerframe.hxx84
-rw-r--r--dbaccess/inc/dataview.hxx99
-rw-r--r--dbaccess/inc/dbaccess_helpid.hrc475
-rw-r--r--dbaccess/inc/dbaccess_slotid.hrc114
-rw-r--r--dbaccess/inc/dbaccessdllapi.h43
-rw-r--r--dbaccess/inc/genericcontroller.hxx542
-rw-r--r--dbaccess/inc/makefile.mk47
-rw-r--r--dbaccess/inc/pch/precompiled_dbaccess.cxx29
-rw-r--r--dbaccess/inc/pch/precompiled_dbaccess.hxx520
-rw-r--r--dbaccess/inc/singledoccontroller.hxx234
-rw-r--r--dbaccess/prj/build.lst31
-rw-r--r--dbaccess/prj/d.lst53
-rw-r--r--dbaccess/prj/dba.xml97
-rw-r--r--dbaccess/prj/dbu.xml134
-rw-r--r--dbaccess/qa/complex/dbaccess/ApplicationController.java176
-rw-r--r--dbaccess/qa/complex/dbaccess/Beamer.java191
-rw-r--r--dbaccess/qa/complex/dbaccess/CRMBasedTestCase.java83
-rwxr-xr-xdbaccess/qa/complex/dbaccess/CopyTableInterActionHandler.java50
-rwxr-xr-xdbaccess/qa/complex/dbaccess/CopyTableWizard.java236
-rw-r--r--dbaccess/qa/complex/dbaccess/DataSource.java110
-rwxr-xr-xdbaccess/qa/complex/dbaccess/DatabaseApplication.java101
-rw-r--r--dbaccess/qa/complex/dbaccess/DatabaseDocument.java1034
-rw-r--r--dbaccess/qa/complex/dbaccess/FileHelper.java44
-rw-r--r--dbaccess/qa/complex/dbaccess/Parser.java208
-rw-r--r--dbaccess/qa/complex/dbaccess/PropertyBag.java294
-rw-r--r--dbaccess/qa/complex/dbaccess/Query.java126
-rw-r--r--dbaccess/qa/complex/dbaccess/QueryInQuery.java192
-rw-r--r--dbaccess/qa/complex/dbaccess/RowSet.java1026
-rw-r--r--dbaccess/qa/complex/dbaccess/RowSetEventListener.java111
-rwxr-xr-xdbaccess/qa/complex/dbaccess/SingleSelectQueryComposer.java395
-rw-r--r--dbaccess/qa/complex/dbaccess/TestCase.java126
-rw-r--r--dbaccess/qa/complex/dbaccess/UISettings.java152
-rw-r--r--dbaccess/qa/complex/dbaccess/dbaccess.sce12
-rwxr-xr-xdbaccess/qa/complex/dbaccess/makefile.mk78
-rw-r--r--dbaccess/qa/unoapi/Test.java52
-rw-r--r--dbaccess/qa/unoapi/dbaccess.props6
-rw-r--r--dbaccess/qa/unoapi/dbaccess.sce15
-rw-r--r--dbaccess/qa/unoapi/knownissues.xcl62
-rw-r--r--dbaccess/qa/unoapi/makefile.mk48
-rwxr-xr-xdbaccess/qa/unoapi/testdocuments/TestDB/testDB.dbfbin0 -> 949 bytes
-rwxr-xr-xdbaccess/qa/unoapi/testdocuments/TestDB/testDB.dbtbin0 -> 512 bytes
-rw-r--r--dbaccess/source/core/api/BookmarkSet.cxx278
-rw-r--r--dbaccess/source/core/api/BookmarkSet.hxx75
-rw-r--r--dbaccess/source/core/api/CIndexColumn.hxx59
-rw-r--r--dbaccess/source/core/api/CIndexes.cxx123
-rw-r--r--dbaccess/source/core/api/CIndexes.hxx58
-rw-r--r--dbaccess/source/core/api/CRowSetColumn.cxx111
-rw-r--r--dbaccess/source/core/api/CRowSetColumn.hxx66
-rw-r--r--dbaccess/source/core/api/CRowSetDataColumn.cxx292
-rw-r--r--dbaccess/source/core/api/CRowSetDataColumn.hxx113
-rw-r--r--dbaccess/source/core/api/CacheSet.cxx753
-rw-r--r--dbaccess/source/core/api/CacheSet.hxx179
-rw-r--r--dbaccess/source/core/api/FilteredContainer.cxx498
-rw-r--r--dbaccess/source/core/api/HelperCollections.cxx122
-rw-r--r--dbaccess/source/core/api/HelperCollections.hxx128
-rw-r--r--dbaccess/source/core/api/KeySet.cxx1704
-rw-r--r--dbaccess/source/core/api/KeySet.hxx233
-rw-r--r--dbaccess/source/core/api/OptimisticSet.cxx767
-rw-r--r--dbaccess/source/core/api/OptimisticSet.hxx109
-rw-r--r--dbaccess/source/core/api/PrivateRow.cxx142
-rw-r--r--dbaccess/source/core/api/PrivateRow.hxx69
-rw-r--r--dbaccess/source/core/api/RowSet.cxx3057
-rw-r--r--dbaccess/source/core/api/RowSet.hxx544
-rw-r--r--dbaccess/source/core/api/RowSetBase.cxx1577
-rw-r--r--dbaccess/source/core/api/RowSetBase.hxx463
-rw-r--r--dbaccess/source/core/api/RowSetCache.cxx1685
-rw-r--r--dbaccess/source/core/api/RowSetCache.hxx273
-rw-r--r--dbaccess/source/core/api/RowSetCacheIterator.cxx152
-rw-r--r--dbaccess/source/core/api/RowSetCacheIterator.hxx92
-rw-r--r--dbaccess/source/core/api/RowSetRow.hxx108
-rw-r--r--dbaccess/source/core/api/SingleSelectQueryComposer.cxx1875
-rw-r--r--dbaccess/source/core/api/StaticSet.cxx392
-rw-r--r--dbaccess/source/core/api/StaticSet.hxx93
-rw-r--r--dbaccess/source/core/api/TableDeco.cxx758
-rw-r--r--dbaccess/source/core/api/View.cxx161
-rw-r--r--dbaccess/source/core/api/WrappedResultSet.cxx255
-rw-r--r--dbaccess/source/core/api/WrappedResultSet.hxx79
-rw-r--r--dbaccess/source/core/api/callablestatement.cxx344
-rw-r--r--dbaccess/source/core/api/column.cxx481
-rw-r--r--dbaccess/source/core/api/columnsettings.cxx182
-rw-r--r--dbaccess/source/core/api/datacolumn.cxx485
-rw-r--r--dbaccess/source/core/api/datacolumn.hxx129
-rw-r--r--dbaccess/source/core/api/datasettings.cxx254
-rw-r--r--dbaccess/source/core/api/definitioncolumn.cxx673
-rw-r--r--dbaccess/source/core/api/makefile.mk82
-rw-r--r--dbaccess/source/core/api/preparedstatement.cxx473
-rw-r--r--dbaccess/source/core/api/query.cxx445
-rw-r--r--dbaccess/source/core/api/query.hxx186
-rw-r--r--dbaccess/source/core/api/querycomposer.cxx406
-rw-r--r--dbaccess/source/core/api/querycontainer.cxx475
-rw-r--r--dbaccess/source/core/api/querydescriptor.cxx323
-rw-r--r--dbaccess/source/core/api/querydescriptor.hxx183
-rw-r--r--dbaccess/source/core/api/resultcolumn.cxx357
-rw-r--r--dbaccess/source/core/api/resultcolumn.hxx101
-rw-r--r--dbaccess/source/core/api/resultset.cxx1208
-rw-r--r--dbaccess/source/core/api/resultset.hxx278
-rw-r--r--dbaccess/source/core/api/statement.cxx696
-rw-r--r--dbaccess/source/core/api/table.cxx417
-rw-r--r--dbaccess/source/core/api/tablecontainer.cxx516
-rw-r--r--dbaccess/source/core/api/viewcontainer.cxx274
-rw-r--r--dbaccess/source/core/dataaccess/ComponentDefinition.cxx328
-rw-r--r--dbaccess/source/core/dataaccess/ComponentDefinition.hxx207
-rw-r--r--dbaccess/source/core/dataaccess/ContentHelper.cxx762
-rw-r--r--dbaccess/source/core/dataaccess/ModelImpl.cxx1502
-rw-r--r--dbaccess/source/core/dataaccess/ModelImpl.hxx641
-rw-r--r--dbaccess/source/core/dataaccess/SharedConnection.cxx186
-rw-r--r--dbaccess/source/core/dataaccess/SharedConnection.hxx172
-rw-r--r--dbaccess/source/core/dataaccess/bookmarkcontainer.cxx421
-rw-r--r--dbaccess/source/core/dataaccess/bookmarkcontainer.hxx208
-rw-r--r--dbaccess/source/core/dataaccess/commandcontainer.cxx115
-rw-r--r--dbaccess/source/core/dataaccess/commandcontainer.hxx93
-rw-r--r--dbaccess/source/core/dataaccess/commanddefinition.cxx179
-rw-r--r--dbaccess/source/core/dataaccess/commanddefinition.hxx144
-rw-r--r--dbaccess/source/core/dataaccess/connection.cxx946
-rw-r--r--dbaccess/source/core/dataaccess/connection.hxx252
-rw-r--r--dbaccess/source/core/dataaccess/dataaccessdescriptor.cxx348
-rw-r--r--dbaccess/source/core/dataaccess/databasecontext.cxx809
-rw-r--r--dbaccess/source/core/dataaccess/databasecontext.hxx213
-rw-r--r--dbaccess/source/core/dataaccess/databasedocument.cxx2191
-rw-r--r--dbaccess/source/core/dataaccess/databasedocument.hxx709
-rw-r--r--dbaccess/source/core/dataaccess/databaseregistrations.cxx399
-rw-r--r--dbaccess/source/core/dataaccess/databaseregistrations.hxx51
-rwxr-xr-xdbaccess/source/core/dataaccess/datasource.cxx1476
-rw-r--r--dbaccess/source/core/dataaccess/datasource.hxx305
-rw-r--r--dbaccess/source/core/dataaccess/definitioncontainer.cxx748
-rw-r--r--dbaccess/source/core/dataaccess/documentcontainer.cxx833
-rw-r--r--dbaccess/source/core/dataaccess/documentcontainer.hxx168
-rw-r--r--dbaccess/source/core/dataaccess/documentdefinition.cxx2404
-rw-r--r--dbaccess/source/core/dataaccess/documentdefinition.hxx410
-rw-r--r--dbaccess/source/core/dataaccess/documenteventexecutor.cxx231
-rw-r--r--dbaccess/source/core/dataaccess/documenteventexecutor.hxx78
-rw-r--r--dbaccess/source/core/dataaccess/documenteventnotifier.cxx319
-rw-r--r--dbaccess/source/core/dataaccess/documenteventnotifier.hxx144
-rw-r--r--dbaccess/source/core/dataaccess/documentevents.cxx265
-rw-r--r--dbaccess/source/core/dataaccess/documentevents.hxx90
-rw-r--r--dbaccess/source/core/dataaccess/intercept.cxx447
-rw-r--r--dbaccess/source/core/dataaccess/intercept.hxx190
-rw-r--r--dbaccess/source/core/dataaccess/makefile.mk69
-rw-r--r--dbaccess/source/core/dataaccess/myucp_datasupplier.cxx430
-rw-r--r--dbaccess/source/core/dataaccess/myucp_datasupplier.hxx83
-rw-r--r--dbaccess/source/core/dataaccess/myucp_resultset.cxx106
-rw-r--r--dbaccess/source/core/dataaccess/myucp_resultset.hxx67
-rw-r--r--dbaccess/source/core/inc/ContainerListener.hxx97
-rw-r--r--dbaccess/source/core/inc/ContainerMediator.hxx123
-rw-r--r--dbaccess/source/core/inc/ContentHelper.hxx249
-rw-r--r--dbaccess/source/core/inc/DatabaseDataProvider.hxx278
-rw-r--r--dbaccess/source/core/inc/FilteredContainer.hxx144
-rw-r--r--dbaccess/source/core/inc/PropertyForward.hxx96
-rw-r--r--dbaccess/source/core/inc/RefreshListener.hxx59
-rw-r--r--dbaccess/source/core/inc/SingleSelectQueryComposer.hxx283
-rw-r--r--dbaccess/source/core/inc/TableDeco.hxx220
-rw-r--r--dbaccess/source/core/inc/View.hxx91
-rw-r--r--dbaccess/source/core/inc/callablestatement.hxx95
-rw-r--r--dbaccess/source/core/inc/column.hxx258
-rw-r--r--dbaccess/source/core/inc/columnsettings.hxx109
-rw-r--r--dbaccess/source/core/inc/commandbase.hxx71
-rw-r--r--dbaccess/source/core/inc/composertools.hxx142
-rw-r--r--dbaccess/source/core/inc/containerapprove.hxx80
-rw-r--r--dbaccess/source/core/inc/core_resource.hrc113
-rw-r--r--dbaccess/source/core/inc/core_resource.hxx130
-rw-r--r--dbaccess/source/core/inc/datasettings.hxx109
-rw-r--r--dbaccess/source/core/inc/dbamiscres.hrc62
-rw-r--r--dbaccess/source/core/inc/definitioncolumn.hxx318
-rw-r--r--dbaccess/source/core/inc/definitioncontainer.hxx375
-rw-r--r--dbaccess/source/core/inc/module_dba.hxx45
-rw-r--r--dbaccess/source/core/inc/object.hxx40
-rw-r--r--dbaccess/source/core/inc/objectnameapproval.hxx95
-rw-r--r--dbaccess/source/core/inc/preparedstatement.hxx132
-rw-r--r--dbaccess/source/core/inc/querycomposer.hxx139
-rw-r--r--dbaccess/source/core/inc/querycontainer.hxx234
-rw-r--r--dbaccess/source/core/inc/recovery/dbdocrecovery.hxx92
-rw-r--r--dbaccess/source/core/inc/sdbcoretools.hxx88
-rw-r--r--dbaccess/source/core/inc/statement.hxx220
-rw-r--r--dbaccess/source/core/inc/table.hxx164
-rw-r--r--dbaccess/source/core/inc/tablecontainer.hxx149
-rw-r--r--dbaccess/source/core/inc/userinformation.hxx50
-rw-r--r--dbaccess/source/core/inc/veto.hxx79
-rw-r--r--dbaccess/source/core/inc/viewcontainer.hxx139
-rw-r--r--dbaccess/source/core/misc/ContainerListener.cxx131
-rw-r--r--dbaccess/source/core/misc/ContainerMediator.cxx281
-rw-r--r--dbaccess/source/core/misc/DatabaseDataProvider.cxx1169
-rw-r--r--dbaccess/source/core/misc/PropertyForward.cxx173
-rw-r--r--dbaccess/source/core/misc/apitools.cxx155
-rw-r--r--dbaccess/source/core/misc/dbastrings.cxx49
-rw-r--r--dbaccess/source/core/misc/dsntypes.cxx629
-rw-r--r--dbaccess/source/core/misc/makefile.mk60
-rw-r--r--dbaccess/source/core/misc/module_dba.cxx43
-rw-r--r--dbaccess/source/core/misc/objectnameapproval.cxx116
-rw-r--r--dbaccess/source/core/misc/sdbcoretools.cxx175
-rw-r--r--dbaccess/source/core/misc/services.cxx138
-rw-r--r--dbaccess/source/core/misc/userinformation.cxx59
-rw-r--r--dbaccess/source/core/misc/veto.cxx78
-rw-r--r--dbaccess/source/core/recovery/dbdocrecovery.cxx436
-rw-r--r--dbaccess/source/core/recovery/makefile.mk58
-rw-r--r--dbaccess/source/core/recovery/settingsimport.cxx294
-rw-r--r--dbaccess/source/core/recovery/settingsimport.hxx190
-rw-r--r--dbaccess/source/core/recovery/storagestream.cxx126
-rw-r--r--dbaccess/source/core/recovery/storagestream.hxx109
-rw-r--r--dbaccess/source/core/recovery/storagetextstream.cxx130
-rw-r--r--dbaccess/source/core/recovery/storagetextstream.hxx66
-rw-r--r--dbaccess/source/core/recovery/storagexmlstream.cxx197
-rw-r--r--dbaccess/source/core/recovery/storagexmlstream.hxx113
-rw-r--r--dbaccess/source/core/recovery/subcomponentloader.cxx200
-rw-r--r--dbaccess/source/core/recovery/subcomponentloader.hxx87
-rw-r--r--dbaccess/source/core/recovery/subcomponentrecovery.cxx702
-rw-r--r--dbaccess/source/core/recovery/subcomponentrecovery.hxx126
-rw-r--r--dbaccess/source/core/recovery/subcomponents.hxx88
-rw-r--r--dbaccess/source/core/resource/core_resource.cxx119
-rw-r--r--dbaccess/source/core/resource/makefile.mk48
-rw-r--r--dbaccess/source/core/resource/strings.src326
-rw-r--r--dbaccess/source/ext/adabas/ANewDb.cxx161
-rw-r--r--dbaccess/source/ext/adabas/ANewDb.hxx100
-rw-r--r--dbaccess/source/ext/adabas/ASQLNameEdit.hxx61
-rw-r--r--dbaccess/source/ext/adabas/ASqlNameEdit.cxx80
-rw-r--r--dbaccess/source/ext/adabas/Acomponentmodule.cxx351
-rw-r--r--dbaccess/source/ext/adabas/Acomponentmodule.hxx294
-rw-r--r--dbaccess/source/ext/adabas/AdabasNewDb.cxx805
-rw-r--r--dbaccess/source/ext/adabas/AdabasNewDb.hrc78
-rw-r--r--dbaccess/source/ext/adabas/AdabasNewDb.hxx165
-rw-r--r--dbaccess/source/ext/adabas/AdabasNewDb.src455
-rw-r--r--dbaccess/source/ext/adabas/Aservices.cxx114
-rw-r--r--dbaccess/source/ext/adabas/Astringconstants.cxx60
-rw-r--r--dbaccess/source/ext/adabas/Astringconstants.hrc103
-rw-r--r--dbaccess/source/ext/adabas/adabasui.dxp4
-rw-r--r--dbaccess/source/ext/adabas/adabasui_resource.hrc92
-rw-r--r--dbaccess/source/ext/adabas/adabasuistrings.cxx37
-rw-r--r--dbaccess/source/ext/adabas/adabasuistrings.hrc42
-rw-r--r--dbaccess/source/ext/adabas/exports.dxp3
-rw-r--r--dbaccess/source/ext/adabas/makefile.mk93
-rw-r--r--dbaccess/source/ext/macromigration/dbmm_global.hrc86
-rw-r--r--dbaccess/source/ext/macromigration/dbmm_module.cxx45
-rw-r--r--dbaccess/source/ext/macromigration/dbmm_module.hxx45
-rw-r--r--dbaccess/source/ext/macromigration/dbmm_services.cxx58
-rw-r--r--dbaccess/source/ext/macromigration/dbmm_types.cxx63
-rw-r--r--dbaccess/source/ext/macromigration/dbmm_types.hxx69
-rw-r--r--dbaccess/source/ext/macromigration/docinteraction.cxx142
-rw-r--r--dbaccess/source/ext/macromigration/docinteraction.hxx95
-rw-r--r--dbaccess/source/ext/macromigration/macromigration.hrc96
-rw-r--r--dbaccess/source/ext/macromigration/macromigration.src453
-rw-r--r--dbaccess/source/ext/macromigration/macromigrationdialog.cxx628
-rw-r--r--dbaccess/source/ext/macromigration/macromigrationdialog.hxx94
-rw-r--r--dbaccess/source/ext/macromigration/macromigrationpages.cxx361
-rw-r--r--dbaccess/source/ext/macromigration/macromigrationpages.hxx181
-rw-r--r--dbaccess/source/ext/macromigration/macromigrationwizard.cxx263
-rw-r--r--dbaccess/source/ext/macromigration/makefile.mk101
-rw-r--r--dbaccess/source/ext/macromigration/migrationengine.cxx1990
-rw-r--r--dbaccess/source/ext/macromigration/migrationengine.hxx100
-rw-r--r--dbaccess/source/ext/macromigration/migrationerror.hxx173
-rw-r--r--dbaccess/source/ext/macromigration/migrationlog.cxx512
-rw-r--r--dbaccess/source/ext/macromigration/migrationlog.hxx128
-rw-r--r--dbaccess/source/ext/macromigration/migrationprogress.hxx58
-rw-r--r--dbaccess/source/ext/macromigration/progresscapture.cxx135
-rw-r--r--dbaccess/source/ext/macromigration/progresscapture.hxx79
-rw-r--r--dbaccess/source/ext/macromigration/progressmixer.cxx216
-rw-r--r--dbaccess/source/ext/macromigration/progressmixer.hxx100
-rw-r--r--dbaccess/source/ext/macromigration/rangeprogressbar.hxx104
-rw-r--r--dbaccess/source/filter/migration/cfgimport.cxx1260
-rw-r--r--dbaccess/source/filter/migration/cfgimport.hxx223
-rw-r--r--dbaccess/source/filter/migration/cfgservices.cxx115
-rw-r--r--dbaccess/source/filter/migration/makefile.mk74
-rw-r--r--dbaccess/source/filter/xml/dbloader2.cxx658
-rw-r--r--dbaccess/source/filter/xml/makefile.mk114
-rw-r--r--dbaccess/source/filter/xml/xmlAutoStyle.cxx109
-rw-r--r--dbaccess/source/filter/xml/xmlAutoStyle.hxx66
-rw-r--r--dbaccess/source/filter/xml/xmlColumn.cxx221
-rw-r--r--dbaccess/source/filter/xml/xmlColumn.hxx66
-rw-r--r--dbaccess/source/filter/xml/xmlComponent.cxx155
-rw-r--r--dbaccess/source/filter/xml/xmlComponent.hxx64
-rw-r--r--dbaccess/source/filter/xml/xmlConnectionData.cxx137
-rw-r--r--dbaccess/source/filter/xml/xmlConnectionData.hxx60
-rw-r--r--dbaccess/source/filter/xml/xmlConnectionResource.cxx130
-rw-r--r--dbaccess/source/filter/xml/xmlConnectionResource.hxx55
-rw-r--r--dbaccess/source/filter/xml/xmlDataSource.cxx309
-rw-r--r--dbaccess/source/filter/xml/xmlDataSource.hxx66
-rw-r--r--dbaccess/source/filter/xml/xmlDataSourceInfo.cxx173
-rw-r--r--dbaccess/source/filter/xml/xmlDataSourceInfo.hxx52
-rw-r--r--dbaccess/source/filter/xml/xmlDataSourceSetting.cxx271
-rw-r--r--dbaccess/source/filter/xml/xmlDataSourceSetting.hxx81
-rw-r--r--dbaccess/source/filter/xml/xmlDataSourceSettings.cxx114
-rw-r--r--dbaccess/source/filter/xml/xmlDataSourceSettings.hxx53
-rw-r--r--dbaccess/source/filter/xml/xmlDatabase.cxx158
-rw-r--r--dbaccess/source/filter/xml/xmlDatabase.hxx56
-rw-r--r--dbaccess/source/filter/xml/xmlDatabaseDescription.cxx122
-rw-r--r--dbaccess/source/filter/xml/xmlDatabaseDescription.hxx60
-rw-r--r--dbaccess/source/filter/xml/xmlDocuments.cxx150
-rw-r--r--dbaccess/source/filter/xml/xmlDocuments.hxx79
-rw-r--r--dbaccess/source/filter/xml/xmlEnums.hxx172
-rw-r--r--dbaccess/source/filter/xml/xmlExport.cxx1455
-rw-r--r--dbaccess/source/filter/xml/xmlExport.hxx243
-rw-r--r--dbaccess/source/filter/xml/xmlFileBasedDatabase.cxx153
-rw-r--r--dbaccess/source/filter/xml/xmlFileBasedDatabase.hxx54
-rw-r--r--dbaccess/source/filter/xml/xmlHelper.cxx218
-rw-r--r--dbaccess/source/filter/xml/xmlHelper.hxx76
-rw-r--r--dbaccess/source/filter/xml/xmlHierarchyCollection.cxx203
-rw-r--r--dbaccess/source/filter/xml/xmlHierarchyCollection.hxx75
-rw-r--r--dbaccess/source/filter/xml/xmlLogin.cxx157
-rw-r--r--dbaccess/source/filter/xml/xmlLogin.hxx52
-rw-r--r--dbaccess/source/filter/xml/xmlQuery.cxx174
-rw-r--r--dbaccess/source/filter/xml/xmlQuery.hxx66
-rw-r--r--dbaccess/source/filter/xml/xmlServerDatabase.cxx193
-rw-r--r--dbaccess/source/filter/xml/xmlServerDatabase.hxx55
-rw-r--r--dbaccess/source/filter/xml/xmlStyleImport.cxx363
-rw-r--r--dbaccess/source/filter/xml/xmlStyleImport.hxx157
-rw-r--r--dbaccess/source/filter/xml/xmlTable.cxx295
-rw-r--r--dbaccess/source/filter/xml/xmlTable.hxx91
-rw-r--r--dbaccess/source/filter/xml/xmlTableFilterList.cxx132
-rw-r--r--dbaccess/source/filter/xml/xmlTableFilterList.hxx79
-rw-r--r--dbaccess/source/filter/xml/xmlTableFilterPattern.cxx76
-rw-r--r--dbaccess/source/filter/xml/xmlTableFilterPattern.hxx56
-rw-r--r--dbaccess/source/filter/xml/xmlfilter.cxx981
-rw-r--r--dbaccess/source/filter/xml/xmlfilter.hxx210
-rw-r--r--dbaccess/source/filter/xml/xmlservices.cxx126
-rwxr-xr-xdbaccess/source/inc/OAuthenticationContinuation.hxx82
-rw-r--r--dbaccess/source/inc/apitools.hxx455
-rw-r--r--dbaccess/source/inc/cfg_reghelper.hxx60
-rw-r--r--dbaccess/source/inc/cfgstrings.hrc99
-rw-r--r--dbaccess/source/inc/constasciistring.hxx61
-rw-r--r--dbaccess/source/inc/dbadllapi.hxx41
-rw-r--r--dbaccess/source/inc/dbastrings.hrc53
-rw-r--r--dbaccess/source/inc/dbu_reghelper.hxx60
-rw-r--r--dbaccess/source/inc/dbustrings.hrc78
-rw-r--r--dbaccess/source/inc/dsntypes.hxx241
-rw-r--r--dbaccess/source/inc/flt_reghelper.hxx60
-rw-r--r--dbaccess/source/inc/registrationhelper.hxx168
-rw-r--r--dbaccess/source/inc/sdbtstrings.hrc42
-rw-r--r--dbaccess/source/inc/stringconstants.hrc433
-rw-r--r--dbaccess/source/inc/stringconstants.inc269
-rw-r--r--dbaccess/source/inc/xmlstrings.hrc45
-rw-r--r--dbaccess/source/sdbtools/connection/connectiondependent.hxx156
-rw-r--r--dbaccess/source/sdbtools/connection/connectiontools.cxx197
-rw-r--r--dbaccess/source/sdbtools/connection/connectiontools.hxx125
-rw-r--r--dbaccess/source/sdbtools/connection/datasourcemetadata.cxx93
-rw-r--r--dbaccess/source/sdbtools/connection/datasourcemetadata.hxx97
-rw-r--r--dbaccess/source/sdbtools/connection/makefile.mk49
-rw-r--r--dbaccess/source/sdbtools/connection/objectnames.cxx498
-rw-r--r--dbaccess/source/sdbtools/connection/objectnames.hxx98
-rw-r--r--dbaccess/source/sdbtools/connection/tablename.cxx275
-rw-r--r--dbaccess/source/sdbtools/connection/tablename.hxx109
-rw-r--r--dbaccess/source/sdbtools/inc/module_sdbt.hxx47
-rw-r--r--dbaccess/source/sdbtools/inc/sdbt_resource.hrc48
-rw-r--r--dbaccess/source/sdbtools/misc/makefile.mk47
-rw-r--r--dbaccess/source/sdbtools/misc/module_sdbt.cxx45
-rw-r--r--dbaccess/source/sdbtools/misc/sdbt_services.cxx107
-rw-r--r--dbaccess/source/sdbtools/resource/makefile.mk45
-rw-r--r--dbaccess/source/sdbtools/resource/sdbt_strings.src65
-rw-r--r--dbaccess/source/shared/cfg_reghelper.cxx49
-rw-r--r--dbaccess/source/shared/cfgstrings.cxx91
-rw-r--r--dbaccess/source/shared/dbu_reghelper.cxx48
-rw-r--r--dbaccess/source/shared/dbustrings.cxx73
-rw-r--r--dbaccess/source/shared/flt_reghelper.cxx49
-rw-r--r--dbaccess/source/shared/makefile.mk76
-rw-r--r--dbaccess/source/shared/registrationhelper.cxx215
-rw-r--r--dbaccess/source/shared/sdbtstrings.cxx35
-rw-r--r--dbaccess/source/shared/xmlstrings.cxx36
-rw-r--r--dbaccess/source/ui/app/AppController.cxx3016
-rw-r--r--dbaccess/source/ui/app/AppController.hxx576
-rw-r--r--dbaccess/source/ui/app/AppControllerDnD.cxx942
-rw-r--r--dbaccess/source/ui/app/AppControllerGen.cxx856
-rw-r--r--dbaccess/source/ui/app/AppDetailPageHelper.cxx1523
-rw-r--r--dbaccess/source/ui/app/AppDetailPageHelper.hxx403
-rw-r--r--dbaccess/source/ui/app/AppDetailView.cxx1007
-rw-r--r--dbaccess/source/ui/app/AppDetailView.hxx405
-rw-r--r--dbaccess/source/ui/app/AppIconControl.cxx135
-rw-r--r--dbaccess/source/ui/app/AppIconControl.hxx62
-rw-r--r--dbaccess/source/ui/app/AppSwapWindow.cxx232
-rw-r--r--dbaccess/source/ui/app/AppSwapWindow.hxx112
-rw-r--r--dbaccess/source/ui/app/AppTitleWindow.cxx188
-rw-r--r--dbaccess/source/ui/app/AppTitleWindow.hxx85
-rw-r--r--dbaccess/source/ui/app/AppView.cxx659
-rw-r--r--dbaccess/source/ui/app/AppView.hxx332
-rw-r--r--dbaccess/source/ui/app/IApplicationController.hxx100
-rw-r--r--dbaccess/source/ui/app/app.src476
-rw-r--r--dbaccess/source/ui/app/dbu_app.hrc78
-rw-r--r--dbaccess/source/ui/app/makefile.mk69
-rw-r--r--dbaccess/source/ui/app/subcomponentmanager.cxx612
-rw-r--r--dbaccess/source/ui/app/subcomponentmanager.hxx136
-rw-r--r--dbaccess/source/ui/app/window_layout.txt31
-rw-r--r--dbaccess/source/ui/browser/AsyncronousLink.cxx112
-rw-r--r--dbaccess/source/ui/browser/bcommon.src35
-rw-r--r--dbaccess/source/ui/browser/brwctrlr.cxx3081
-rw-r--r--dbaccess/source/ui/browser/brwview.cxx395
-rw-r--r--dbaccess/source/ui/browser/dataview.cxx268
-rw-r--r--dbaccess/source/ui/browser/dbexchange.cxx263
-rw-r--r--dbaccess/source/ui/browser/dbloader.cxx358
-rw-r--r--dbaccess/source/ui/browser/dbtreemodel.cxx55
-rw-r--r--dbaccess/source/ui/browser/dbtreemodel.hxx79
-rw-r--r--dbaccess/source/ui/browser/dbtreeview.cxx131
-rw-r--r--dbaccess/source/ui/browser/dbtreeview.hxx82
-rw-r--r--dbaccess/source/ui/browser/dsEntriesNoExp.cxx291
-rw-r--r--dbaccess/source/ui/browser/dsbrowserDnD.cxx295
-rw-r--r--dbaccess/source/ui/browser/exsrcbrw.cxx500
-rw-r--r--dbaccess/source/ui/browser/formadapter.cxx1794
-rw-r--r--dbaccess/source/ui/browser/genericcontroller.cxx1682
-rw-r--r--dbaccess/source/ui/browser/makefile.mk71
-rw-r--r--dbaccess/source/ui/browser/sbabrw.src205
-rw-r--r--dbaccess/source/ui/browser/sbagrid.cxx1786
-rw-r--r--dbaccess/source/ui/browser/sbagrid.src139
-rw-r--r--dbaccess/source/ui/browser/sbamultiplex.cxx111
-rw-r--r--dbaccess/source/ui/browser/unodatbr.cxx3784
-rw-r--r--dbaccess/source/ui/control/ColumnControlWindow.cxx198
-rw-r--r--dbaccess/source/ui/control/FieldDescControl.cxx1941
-rw-r--r--dbaccess/source/ui/control/RelationControl.cxx751
-rw-r--r--dbaccess/source/ui/control/ScrollHelper.cxx81
-rw-r--r--dbaccess/source/ui/control/SqlNameEdit.cxx100
-rw-r--r--dbaccess/source/ui/control/TableGrantCtrl.cxx516
-rw-r--r--dbaccess/source/ui/control/TableGrantCtrl.src96
-rw-r--r--dbaccess/source/ui/control/VertSplitView.cxx220
-rw-r--r--dbaccess/source/ui/control/charsetlistbox.cxx118
-rw-r--r--dbaccess/source/ui/control/curledit.cxx158
-rw-r--r--dbaccess/source/ui/control/dbtreelistbox.cxx756
-rw-r--r--dbaccess/source/ui/control/listviewitems.cxx84
-rw-r--r--dbaccess/source/ui/control/makefile.mk78
-rw-r--r--dbaccess/source/ui/control/marktree.cxx247
-rw-r--r--dbaccess/source/ui/control/opendoccontrols.cxx363
-rw-r--r--dbaccess/source/ui/control/sqledit.cxx224
-rw-r--r--dbaccess/source/ui/control/statusbarontroller.cxx50
-rw-r--r--dbaccess/source/ui/control/tabletree.cxx738
-rw-r--r--dbaccess/source/ui/control/tabletree.hrc37
-rw-r--r--dbaccess/source/ui/control/tabletree.src88
-rw-r--r--dbaccess/source/ui/control/toolboxcontroller.cxx321
-rw-r--r--dbaccess/source/ui/control/undosqledit.cxx50
-rw-r--r--dbaccess/source/ui/control/undosqledit.src66
-rw-r--r--dbaccess/source/ui/dlg/AdabasPage.hrc50
-rw-r--r--dbaccess/source/ui/dlg/AdabasStat.cxx333
-rw-r--r--dbaccess/source/ui/dlg/AdabasStat.hrc52
-rw-r--r--dbaccess/source/ui/dlg/AdabasStat.hxx98
-rw-r--r--dbaccess/source/ui/dlg/AdabasStat.src231
-rw-r--r--dbaccess/source/ui/dlg/AutoControls.src102
-rw-r--r--dbaccess/source/ui/dlg/AutoControls_tmpl.hrc516
-rw-r--r--dbaccess/source/ui/dlg/CollectionView.cxx397
-rw-r--r--dbaccess/source/ui/dlg/CollectionView.hrc50
-rw-r--r--dbaccess/source/ui/dlg/CollectionView.src167
-rw-r--r--dbaccess/source/ui/dlg/ConnectionHelper.cxx994
-rw-r--r--dbaccess/source/ui/dlg/ConnectionHelper.hxx140
-rw-r--r--dbaccess/source/ui/dlg/ConnectionPage.cxx466
-rw-r--r--dbaccess/source/ui/dlg/ConnectionPage.hrc59
-rw-r--r--dbaccess/source/ui/dlg/ConnectionPage.hxx114
-rw-r--r--dbaccess/source/ui/dlg/ConnectionPage.src187
-rw-r--r--dbaccess/source/ui/dlg/ConnectionPageSetup.cxx321
-rw-r--r--dbaccess/source/ui/dlg/ConnectionPageSetup.hxx117
-rw-r--r--dbaccess/source/ui/dlg/DBSetupConnectionPages.cxx1027
-rw-r--r--dbaccess/source/ui/dlg/DBSetupConnectionPages.hxx344
-rwxr-xr-xdbaccess/source/ui/dlg/DbAdminImpl.cxx1219
-rw-r--r--dbaccess/source/ui/dlg/DbAdminImpl.hxx216
-rw-r--r--dbaccess/source/ui/dlg/DriverSettings.cxx116
-rw-r--r--dbaccess/source/ui/dlg/DriverSettings.hxx112
-rw-r--r--dbaccess/source/ui/dlg/ExtensionNotPresent.cxx218
-rw-r--r--dbaccess/source/ui/dlg/ExtensionNotPresent.hrc48
-rw-r--r--dbaccess/source/ui/dlg/ExtensionNotPresent.src89
-rw-r--r--dbaccess/source/ui/dlg/RelationDlg.cxx303
-rw-r--r--dbaccess/source/ui/dlg/RelationDlg.hrc54
-rw-r--r--dbaccess/source/ui/dlg/RelationDlg.src185
-rw-r--r--dbaccess/source/ui/dlg/TablesSingleDlg.cxx151
-rw-r--r--dbaccess/source/ui/dlg/TextConnectionHelper.cxx617
-rw-r--r--dbaccess/source/ui/dlg/TextConnectionHelper.hxx140
-rw-r--r--dbaccess/source/ui/dlg/UserAdmin.cxx393
-rw-r--r--dbaccess/source/ui/dlg/UserAdmin.hrc59
-rw-r--r--dbaccess/source/ui/dlg/UserAdmin.hxx107
-rw-r--r--dbaccess/source/ui/dlg/UserAdmin.src242
-rw-r--r--dbaccess/source/ui/dlg/UserAdminDlg.cxx206
-rw-r--r--dbaccess/source/ui/dlg/UserAdminDlg.hrc33
-rw-r--r--dbaccess/source/ui/dlg/UserAdminDlg.src60
-rwxr-xr-xdbaccess/source/ui/dlg/admincontrols.cxx311
-rwxr-xr-xdbaccess/source/ui/dlg/admincontrols.hrc49
-rwxr-xr-xdbaccess/source/ui/dlg/admincontrols.hxx82
-rwxr-xr-xdbaccess/source/ui/dlg/admincontrols.src131
-rw-r--r--dbaccess/source/ui/dlg/adminpages.cxx337
-rw-r--r--dbaccess/source/ui/dlg/adminpages.hxx299
-rw-r--r--dbaccess/source/ui/dlg/adodatalinks.cxx211
-rw-r--r--dbaccess/source/ui/dlg/adodatalinks.hxx39
-rw-r--r--dbaccess/source/ui/dlg/adtabdlg.cxx533
-rw-r--r--dbaccess/source/ui/dlg/adtabdlg.hrc47
-rw-r--r--dbaccess/source/ui/dlg/adtabdlg.src102
-rw-r--r--dbaccess/source/ui/dlg/advancedsettings.cxx565
-rw-r--r--dbaccess/source/ui/dlg/advancedsettings.hrc75
-rw-r--r--dbaccess/source/ui/dlg/advancedsettings.hxx150
-rw-r--r--dbaccess/source/ui/dlg/advancedsettings.src366
-rw-r--r--dbaccess/source/ui/dlg/dbadmin.cxx515
-rw-r--r--dbaccess/source/ui/dlg/dbadmin.hrc111
-rw-r--r--dbaccess/source/ui/dlg/dbadmin.src787
-rw-r--r--dbaccess/source/ui/dlg/dbadmin2.src188
-rw-r--r--dbaccess/source/ui/dlg/dbadminsetup.hrc136
-rw-r--r--dbaccess/source/ui/dlg/dbadminsetup.src673
-rw-r--r--dbaccess/source/ui/dlg/dbfindex.cxx583
-rw-r--r--dbaccess/source/ui/dlg/dbfindex.hrc26
-rw-r--r--dbaccess/source/ui/dlg/dbfindex.hxx166
-rw-r--r--dbaccess/source/ui/dlg/dbfindex.src246
-rw-r--r--dbaccess/source/ui/dlg/dbwiz.cxx421
-rw-r--r--dbaccess/source/ui/dlg/dbwizsetup.cxx1251
-rw-r--r--dbaccess/source/ui/dlg/detailpages.cxx1151
-rw-r--r--dbaccess/source/ui/dlg/detailpages.hxx388
-rw-r--r--dbaccess/source/ui/dlg/directsql.cxx367
-rw-r--r--dbaccess/source/ui/dlg/directsql.hrc43
-rw-r--r--dbaccess/source/ui/dlg/directsql.src134
-rw-r--r--dbaccess/source/ui/dlg/dlgattr.cxx148
-rw-r--r--dbaccess/source/ui/dlg/dlgattr.src122
-rw-r--r--dbaccess/source/ui/dlg/dlgsave.cxx486
-rw-r--r--dbaccess/source/ui/dlg/dlgsave.hrc53
-rw-r--r--dbaccess/source/ui/dlg/dlgsave.src141
-rw-r--r--dbaccess/source/ui/dlg/dlgsize.cxx130
-rw-r--r--dbaccess/source/ui/dlg/dlgsize.hrc39
-rw-r--r--dbaccess/source/ui/dlg/dlgsize.src189
-rw-r--r--dbaccess/source/ui/dlg/dsnItem.hxx69
-rw-r--r--dbaccess/source/ui/dlg/dsselect.cxx318
-rw-r--r--dbaccess/source/ui/dlg/dsselect.hrc41
-rw-r--r--dbaccess/source/ui/dlg/dsselect.hxx95
-rw-r--r--dbaccess/source/ui/dlg/dsselect.src107
-rw-r--r--dbaccess/source/ui/dlg/finteraction.cxx88
-rw-r--r--dbaccess/source/ui/dlg/finteraction.hxx75
-rw-r--r--dbaccess/source/ui/dlg/generalpage.cxx636
-rw-r--r--dbaccess/source/ui/dlg/generalpage.hxx177
-rw-r--r--dbaccess/source/ui/dlg/indexdialog.cxx962
-rw-r--r--dbaccess/source/ui/dlg/indexdialog.hrc49
-rw-r--r--dbaccess/source/ui/dlg/indexdialog.src236
-rw-r--r--dbaccess/source/ui/dlg/indexfieldscontrol.cxx516
-rw-r--r--dbaccess/source/ui/dlg/makefile.mk156
-rw-r--r--dbaccess/source/ui/dlg/odbcconfig.cxx403
-rw-r--r--dbaccess/source/ui/dlg/odbcconfig.hxx140
-rw-r--r--dbaccess/source/ui/dlg/optionalboolitem.cxx76
-rw-r--r--dbaccess/source/ui/dlg/optionalboolitem.hxx67
-rw-r--r--dbaccess/source/ui/dlg/paramdialog.cxx452
-rw-r--r--dbaccess/source/ui/dlg/paramdialog.hrc46
-rw-r--r--dbaccess/source/ui/dlg/paramdialog.src100
-rw-r--r--dbaccess/source/ui/dlg/queryfilter.cxx921
-rw-r--r--dbaccess/source/ui/dlg/queryfilter.hrc64
-rw-r--r--dbaccess/source/ui/dlg/queryfilter.src222
-rw-r--r--dbaccess/source/ui/dlg/queryorder.cxx334
-rw-r--r--dbaccess/source/ui/dlg/queryorder.hrc57
-rw-r--r--dbaccess/source/ui/dlg/queryorder.src211
-rw-r--r--dbaccess/source/ui/dlg/sqlmessage.cxx817
-rw-r--r--dbaccess/source/ui/dlg/sqlmessage.hrc50
-rw-r--r--dbaccess/source/ui/dlg/sqlmessage.src161
-rw-r--r--dbaccess/source/ui/dlg/tablespage.cxx694
-rw-r--r--dbaccess/source/ui/dlg/tablespage.hxx135
-rw-r--r--dbaccess/source/ui/dlg/textconnectionsettings.cxx106
-rw-r--r--dbaccess/source/ui/dlg/textconnectionsettings.src60
-rw-r--r--dbaccess/source/ui/imagelists/dbimagelists.src262
-rw-r--r--dbaccess/source/ui/imagelists/makefile.mk49
-rw-r--r--dbaccess/source/ui/inc/AccessibleBaseIFace.hxx54
-rw-r--r--dbaccess/source/ui/inc/AppElementType.hxx66
-rw-r--r--dbaccess/source/ui/inc/CollectionView.hxx100
-rw-r--r--dbaccess/source/ui/inc/ColumnControlWindow.hxx90
-rw-r--r--dbaccess/source/ui/inc/ConnectionLine.hxx115
-rw-r--r--dbaccess/source/ui/inc/ConnectionLineAccess.hxx113
-rw-r--r--dbaccess/source/ui/inc/ConnectionLineData.hxx111
-rw-r--r--dbaccess/source/ui/inc/DExport.hxx189
-rw-r--r--dbaccess/source/ui/inc/ExtensionNotPresent.hxx101
-rw-r--r--dbaccess/source/ui/inc/FieldControls.hxx199
-rw-r--r--dbaccess/source/ui/inc/FieldDescControl.hxx242
-rw-r--r--dbaccess/source/ui/inc/FieldDescriptions.hxx135
-rw-r--r--dbaccess/source/ui/inc/GeneralUndo.hxx59
-rw-r--r--dbaccess/source/ui/inc/HtmlReader.hxx100
-rw-r--r--dbaccess/source/ui/inc/IClipBoardTest.hxx49
-rw-r--r--dbaccess/source/ui/inc/IItemSetHelper.hxx76
-rw-r--r--dbaccess/source/ui/inc/IUpdateHelper.hxx52
-rw-r--r--dbaccess/source/ui/inc/JAccess.hxx90
-rw-r--r--dbaccess/source/ui/inc/JoinController.hxx188
-rw-r--r--dbaccess/source/ui/inc/JoinDesignView.hxx91
-rw-r--r--dbaccess/source/ui/inc/JoinExchange.hxx97
-rw-r--r--dbaccess/source/ui/inc/JoinTableView.hxx337
-rw-r--r--dbaccess/source/ui/inc/QEnumTypes.hxx90
-rw-r--r--dbaccess/source/ui/inc/QueryDesignView.hxx189
-rw-r--r--dbaccess/source/ui/inc/QueryTableView.hxx149
-rw-r--r--dbaccess/source/ui/inc/QueryTextView.hxx76
-rw-r--r--dbaccess/source/ui/inc/QueryViewSwitch.hxx104
-rw-r--r--dbaccess/source/ui/inc/RTableConnectionData.hxx108
-rw-r--r--dbaccess/source/ui/inc/RefFunctor.hxx60
-rw-r--r--dbaccess/source/ui/inc/RelControliFace.hxx60
-rw-r--r--dbaccess/source/ui/inc/RelationControl.hrc34
-rw-r--r--dbaccess/source/ui/inc/RelationControl.hxx108
-rw-r--r--dbaccess/source/ui/inc/RelationController.hxx101
-rw-r--r--dbaccess/source/ui/inc/RelationDesignView.hxx74
-rw-r--r--dbaccess/source/ui/inc/RelationDlg.hxx130
-rw-r--r--dbaccess/source/ui/inc/RelationTableView.hxx82
-rw-r--r--dbaccess/source/ui/inc/RtfReader.hxx84
-rw-r--r--dbaccess/source/ui/inc/ScrollHelper.hxx81
-rw-r--r--dbaccess/source/ui/inc/SqlNameEdit.hxx112
-rw-r--r--dbaccess/source/ui/inc/TableConnection.hxx123
-rw-r--r--dbaccess/source/ui/inc/TableConnectionData.hxx119
-rw-r--r--dbaccess/source/ui/inc/TableController.hxx178
-rw-r--r--dbaccess/source/ui/inc/TableCopyHelper.hxx212
-rw-r--r--dbaccess/source/ui/inc/TableDesignControl.hxx108
-rw-r--r--dbaccess/source/ui/inc/TableDesignHelpBar.hxx81
-rw-r--r--dbaccess/source/ui/inc/TableDesignView.hxx131
-rw-r--r--dbaccess/source/ui/inc/TableFieldDescription.hxx167
-rw-r--r--dbaccess/source/ui/inc/TableGrantCtrl.hxx126
-rw-r--r--dbaccess/source/ui/inc/TableRow.hxx101
-rw-r--r--dbaccess/source/ui/inc/TableRowExchange.hxx57
-rw-r--r--dbaccess/source/ui/inc/TableWindow.hxx209
-rw-r--r--dbaccess/source/ui/inc/TableWindowAccess.hxx124
-rw-r--r--dbaccess/source/ui/inc/TableWindowData.hxx106
-rw-r--r--dbaccess/source/ui/inc/TableWindowListBox.hxx109
-rw-r--r--dbaccess/source/ui/inc/TableWindowTitle.hxx59
-rw-r--r--dbaccess/source/ui/inc/TablesSingleDlg.hxx93
-rw-r--r--dbaccess/source/ui/inc/TokenWriter.hxx257
-rw-r--r--dbaccess/source/ui/inc/TypeInfo.hxx152
-rw-r--r--dbaccess/source/ui/inc/UITools.hxx474
-rw-r--r--dbaccess/source/ui/inc/UserAdminDlg.hxx100
-rw-r--r--dbaccess/source/ui/inc/VertSplitView.hxx60
-rw-r--r--dbaccess/source/ui/inc/WCPage.hxx120
-rw-r--r--dbaccess/source/ui/inc/WColumnSelect.hxx109
-rw-r--r--dbaccess/source/ui/inc/WCopyTable.hxx420
-rw-r--r--dbaccess/source/ui/inc/WExtendPages.hxx86
-rw-r--r--dbaccess/source/ui/inc/WNameMatch.hxx112
-rw-r--r--dbaccess/source/ui/inc/WTabPage.hxx60
-rw-r--r--dbaccess/source/ui/inc/WTypeSelect.hxx142
-rw-r--r--dbaccess/source/ui/inc/adtabdlg.hxx140
-rw-r--r--dbaccess/source/ui/inc/advancedsettingsdlg.hxx94
-rw-r--r--dbaccess/source/ui/inc/asyncmodaldialog.hxx67
-rw-r--r--dbaccess/source/ui/inc/browserids.hxx122
-rw-r--r--dbaccess/source/ui/inc/brwctrlr.hxx367
-rw-r--r--dbaccess/source/ui/inc/brwview.hxx125
-rw-r--r--dbaccess/source/ui/inc/callbacks.hxx133
-rw-r--r--dbaccess/source/ui/inc/charsetlistbox.hxx65
-rw-r--r--dbaccess/source/ui/inc/charsets.hxx150
-rw-r--r--dbaccess/source/ui/inc/commontypes.hxx60
-rw-r--r--dbaccess/source/ui/inc/curledit.hxx93
-rw-r--r--dbaccess/source/ui/inc/databaseobjectview.hxx286
-rw-r--r--dbaccess/source/ui/inc/datasourceconnector.hxx102
-rw-r--r--dbaccess/source/ui/inc/datasourcemap.hxx274
-rw-r--r--dbaccess/source/ui/inc/dbadmin.hxx144
-rw-r--r--dbaccess/source/ui/inc/dbexchange.hxx113
-rw-r--r--dbaccess/source/ui/inc/dbtreelistbox.hxx167
-rw-r--r--dbaccess/source/ui/inc/dbu_brw.hrc55
-rw-r--r--dbaccess/source/ui/inc/dbu_control.hrc56
-rw-r--r--dbaccess/source/ui/inc/dbu_dlg.hrc135
-rw-r--r--dbaccess/source/ui/inc/dbu_misc.hrc62
-rw-r--r--dbaccess/source/ui/inc/dbu_qry.hrc96
-rw-r--r--dbaccess/source/ui/inc/dbu_rel.hrc50
-rw-r--r--dbaccess/source/ui/inc/dbu_resource.hrc420
-rw-r--r--dbaccess/source/ui/inc/dbu_tbl.hrc99
-rw-r--r--dbaccess/source/ui/inc/dbu_uno.hrc56
-rw-r--r--dbaccess/source/ui/inc/dbwiz.hxx145
-rw-r--r--dbaccess/source/ui/inc/dbwizsetup.hxx211
-rw-r--r--dbaccess/source/ui/inc/defaultobjectnamecheck.hxx152
-rw-r--r--dbaccess/source/ui/inc/directsql.hxx159
-rw-r--r--dbaccess/source/ui/inc/dlgattr.hrc37
-rw-r--r--dbaccess/source/ui/inc/dlgattr.hxx68
-rw-r--r--dbaccess/source/ui/inc/dlgsave.hxx105
-rw-r--r--dbaccess/source/ui/inc/dlgsize.hxx78
-rw-r--r--dbaccess/source/ui/inc/dsitems.hxx105
-rw-r--r--dbaccess/source/ui/inc/dsmeta.hxx142
-rw-r--r--dbaccess/source/ui/inc/exsrcbrw.hxx112
-rw-r--r--dbaccess/source/ui/inc/formadapter.hxx523
-rw-r--r--dbaccess/source/ui/inc/imageprovider.hxx192
-rw-r--r--dbaccess/source/ui/inc/indexcollection.hxx125
-rw-r--r--dbaccess/source/ui/inc/indexdialog.hxx209
-rw-r--r--dbaccess/source/ui/inc/indexes.hxx107
-rw-r--r--dbaccess/source/ui/inc/indexfieldscontrol.hxx118
-rw-r--r--dbaccess/source/ui/inc/linkeddocuments.hxx159
-rw-r--r--dbaccess/source/ui/inc/listviewitems.hxx70
-rw-r--r--dbaccess/source/ui/inc/localresaccess.hxx64
-rw-r--r--dbaccess/source/ui/inc/makefile.mk43
-rw-r--r--dbaccess/source/ui/inc/marktree.hxx86
-rw-r--r--dbaccess/source/ui/inc/moduledbu.hxx107
-rw-r--r--dbaccess/source/ui/inc/objectnamecheck.hxx74
-rw-r--r--dbaccess/source/ui/inc/opendoccontrols.hxx99
-rw-r--r--dbaccess/source/ui/inc/paramdialog.hxx152
-rw-r--r--dbaccess/source/ui/inc/propertysetitem.hxx71
-rw-r--r--dbaccess/source/ui/inc/propertystorage.hxx94
-rw-r--r--dbaccess/source/ui/inc/querycontainerwindow.hxx136
-rw-r--r--dbaccess/source/ui/inc/querycontroller.hxx259
-rw-r--r--dbaccess/source/ui/inc/queryfilter.hxx163
-rw-r--r--dbaccess/source/ui/inc/queryorder.hxx138
-rw-r--r--dbaccess/source/ui/inc/queryview.hxx59
-rw-r--r--dbaccess/source/ui/inc/sbagrid.hrc125
-rw-r--r--dbaccess/source/ui/inc/sbagrid.hxx363
-rw-r--r--dbaccess/source/ui/inc/sbamultiplex.hxx488
-rw-r--r--dbaccess/source/ui/inc/sqledit.hxx89
-rw-r--r--dbaccess/source/ui/inc/sqlmessage.hxx143
-rw-r--r--dbaccess/source/ui/inc/statusbarontroller.hxx62
-rw-r--r--dbaccess/source/ui/inc/stringlistitem.hxx72
-rw-r--r--dbaccess/source/ui/inc/tabletree.hxx212
-rw-r--r--dbaccess/source/ui/inc/textconnectionsettings.hxx79
-rw-r--r--dbaccess/source/ui/inc/toolbox_tmpl.hrc100
-rw-r--r--dbaccess/source/ui/inc/toolboxcontroller.hxx85
-rw-r--r--dbaccess/source/ui/inc/undosqledit.hxx61
-rw-r--r--dbaccess/source/ui/inc/unoadmin.hxx87
-rw-r--r--dbaccess/source/ui/inc/unodatbr.hxx541
-rw-r--r--dbaccess/source/ui/inc/unosqlmessage.hxx92
-rw-r--r--dbaccess/source/ui/misc/DExport.cxx904
-rw-r--r--dbaccess/source/ui/misc/HtmlReader.cxx598
-rw-r--r--dbaccess/source/ui/misc/ModuleHelper.cxx44
-rw-r--r--dbaccess/source/ui/misc/RowSetDrop.cxx273
-rw-r--r--dbaccess/source/ui/misc/RtfReader.cxx377
-rw-r--r--dbaccess/source/ui/misc/TableCopyHelper.cxx415
-rw-r--r--dbaccess/source/ui/misc/TokenWriter.cxx1161
-rw-r--r--dbaccess/source/ui/misc/ToolBoxHelper.cxx140
-rw-r--r--dbaccess/source/ui/misc/UITools.cxx1888
-rw-r--r--dbaccess/source/ui/misc/UpdateHelperImpl.hxx149
-rw-r--r--dbaccess/source/ui/misc/WCPage.cxx418
-rw-r--r--dbaccess/source/ui/misc/WColumnSelect.cxx452
-rw-r--r--dbaccess/source/ui/misc/WCopyTable.cxx1692
-rw-r--r--dbaccess/source/ui/misc/WExtendPages.cxx92
-rw-r--r--dbaccess/source/ui/misc/WNameMatch.cxx450
-rw-r--r--dbaccess/source/ui/misc/WTypeSelect.cxx508
-rw-r--r--dbaccess/source/ui/misc/WizardPages.hrc81
-rw-r--r--dbaccess/source/ui/misc/WizardPages.src630
-rw-r--r--dbaccess/source/ui/misc/asyncmodaldialog.cxx121
-rw-r--r--dbaccess/source/ui/misc/charsets.cxx196
-rw-r--r--dbaccess/source/ui/misc/controllerframe.cxx443
-rw-r--r--dbaccess/source/ui/misc/databaseobjectview.cxx344
-rw-r--r--dbaccess/source/ui/misc/datasourceconnector.cxx277
-rw-r--r--dbaccess/source/ui/misc/dbumiscres.hrc62
-rw-r--r--dbaccess/source/ui/misc/dbumiscres.src100
-rw-r--r--dbaccess/source/ui/misc/defaultobjectnamecheck.cxx232
-rw-r--r--dbaccess/source/ui/misc/dsmeta.cxx213
-rw-r--r--dbaccess/source/ui/misc/imageprovider.cxx261
-rw-r--r--dbaccess/source/ui/misc/indexcollection.cxx424
-rw-r--r--dbaccess/source/ui/misc/linkeddocuments.cxx479
-rw-r--r--dbaccess/source/ui/misc/makefile.mk85
-rw-r--r--dbaccess/source/ui/misc/moduledbu.cxx146
-rw-r--r--dbaccess/source/ui/misc/propertysetitem.cxx86
-rw-r--r--dbaccess/source/ui/misc/propertystorage.cxx136
-rw-r--r--dbaccess/source/ui/misc/singledoccontroller.cxx749
-rw-r--r--dbaccess/source/ui/misc/stringlistitem.cxx87
-rw-r--r--dbaccess/source/ui/misc/uiservices.cxx166
-rw-r--r--dbaccess/source/ui/querydesign/ConnectionData.hxx63
-rw-r--r--dbaccess/source/ui/querydesign/ConnectionLine.cxx397
-rw-r--r--dbaccess/source/ui/querydesign/ConnectionLineAccess.cxx272
-rw-r--r--dbaccess/source/ui/querydesign/ConnectionLineData.cxx106
-rw-r--r--dbaccess/source/ui/querydesign/JAccess.cxx145
-rw-r--r--dbaccess/source/ui/querydesign/JoinController.cxx547
-rw-r--r--dbaccess/source/ui/querydesign/JoinDesignView.cxx170
-rw-r--r--dbaccess/source/ui/querydesign/JoinExchange.cxx186
-rw-r--r--dbaccess/source/ui/querydesign/JoinTableView.cxx1773
-rw-r--r--dbaccess/source/ui/querydesign/QTableConnection.cxx111
-rw-r--r--dbaccess/source/ui/querydesign/QTableConnection.hxx62
-rw-r--r--dbaccess/source/ui/querydesign/QTableConnectionData.cxx178
-rw-r--r--dbaccess/source/ui/querydesign/QTableConnectionData.hxx99
-rw-r--r--dbaccess/source/ui/querydesign/QTableWindow.cxx284
-rw-r--r--dbaccess/source/ui/querydesign/QTableWindow.hxx100
-rw-r--r--dbaccess/source/ui/querydesign/QTableWindowData.cxx62
-rw-r--r--dbaccess/source/ui/querydesign/QTableWindowData.hxx59
-rw-r--r--dbaccess/source/ui/querydesign/Query.hrc35
-rw-r--r--dbaccess/source/ui/querydesign/QueryAddTabConnUndoAction.hxx63
-rw-r--r--dbaccess/source/ui/querydesign/QueryDesignFieldUndoAct.hxx165
-rw-r--r--dbaccess/source/ui/querydesign/QueryDesignUndoAction.hxx50
-rw-r--r--dbaccess/source/ui/querydesign/QueryDesignView.cxx3300
-rw-r--r--dbaccess/source/ui/querydesign/QueryMoveTabWinUndoAct.cxx56
-rw-r--r--dbaccess/source/ui/querydesign/QueryMoveTabWinUndoAct.hxx72
-rw-r--r--dbaccess/source/ui/querydesign/QuerySizeTabWinUndoAct.hxx88
-rw-r--r--dbaccess/source/ui/querydesign/QueryTabConnUndoAction.cxx150
-rw-r--r--dbaccess/source/ui/querydesign/QueryTabConnUndoAction.hxx59
-rw-r--r--dbaccess/source/ui/querydesign/QueryTabWinShowUndoAct.hxx66
-rw-r--r--dbaccess/source/ui/querydesign/QueryTabWinUndoAct.cxx155
-rw-r--r--dbaccess/source/ui/querydesign/QueryTabWinUndoAct.hxx87
-rw-r--r--dbaccess/source/ui/querydesign/QueryTableView.cxx1100
-rw-r--r--dbaccess/source/ui/querydesign/QueryTextView.cxx179
-rw-r--r--dbaccess/source/ui/querydesign/QueryViewSwitch.cxx361
-rw-r--r--dbaccess/source/ui/querydesign/SelectionBrowseBox.cxx2885
-rw-r--r--dbaccess/source/ui/querydesign/SelectionBrowseBox.hxx362
-rw-r--r--dbaccess/source/ui/querydesign/TableConnection.cxx256
-rw-r--r--dbaccess/source/ui/querydesign/TableConnectionData.cxx202
-rw-r--r--dbaccess/source/ui/querydesign/TableFieldDescription.cxx246
-rw-r--r--dbaccess/source/ui/querydesign/TableFieldInfo.cxx59
-rw-r--r--dbaccess/source/ui/querydesign/TableFieldInfo.hxx57
-rw-r--r--dbaccess/source/ui/querydesign/TableWindow.cxx822
-rw-r--r--dbaccess/source/ui/querydesign/TableWindowAccess.cxx319
-rw-r--r--dbaccess/source/ui/querydesign/TableWindowData.cxx157
-rw-r--r--dbaccess/source/ui/querydesign/TableWindowListBox.cxx423
-rw-r--r--dbaccess/source/ui/querydesign/TableWindowTitle.cxx248
-rw-r--r--dbaccess/source/ui/querydesign/class.jpgbin0 -> 224242 bytes
-rw-r--r--dbaccess/source/ui/querydesign/makefile.mk89
-rw-r--r--dbaccess/source/ui/querydesign/query.src423
-rw-r--r--dbaccess/source/ui/querydesign/querycontainerwindow.cxx288
-rw-r--r--dbaccess/source/ui/querydesign/querycontroller.cxx1868
-rw-r--r--dbaccess/source/ui/querydesign/querydlg.cxx399
-rw-r--r--dbaccess/source/ui/querydesign/querydlg.hrc61
-rw-r--r--dbaccess/source/ui/querydesign/querydlg.hxx120
-rw-r--r--dbaccess/source/ui/querydesign/querydlg.src194
-rw-r--r--dbaccess/source/ui/querydesign/queryview.cxx62
-rw-r--r--dbaccess/source/ui/relationdesign/RTableConnection.cxx157
-rw-r--r--dbaccess/source/ui/relationdesign/RTableConnection.hxx59
-rw-r--r--dbaccess/source/ui/relationdesign/RTableConnectionData.cxx466
-rw-r--r--dbaccess/source/ui/relationdesign/RTableWindow.hxx51
-rw-r--r--dbaccess/source/ui/relationdesign/RelationController.cxx615
-rw-r--r--dbaccess/source/ui/relationdesign/RelationDesignView.cxx153
-rw-r--r--dbaccess/source/ui/relationdesign/RelationTableView.cxx486
-rw-r--r--dbaccess/source/ui/relationdesign/makefile.mk58
-rw-r--r--dbaccess/source/ui/relationdesign/relation.src130
-rw-r--r--dbaccess/source/ui/tabledesign/FieldDescGenWin.cxx203
-rw-r--r--dbaccess/source/ui/tabledesign/FieldDescGenWin.hxx88
-rw-r--r--dbaccess/source/ui/tabledesign/FieldDescriptions.cxx699
-rw-r--r--dbaccess/source/ui/tabledesign/TEditControl.cxx2015
-rw-r--r--dbaccess/source/ui/tabledesign/TEditControl.hxx232
-rw-r--r--dbaccess/source/ui/tabledesign/TableController.cxx1613
-rw-r--r--dbaccess/source/ui/tabledesign/TableDesignControl.cxx241
-rw-r--r--dbaccess/source/ui/tabledesign/TableDesignHelpBar.cxx130
-rw-r--r--dbaccess/source/ui/tabledesign/TableDesignView.cxx400
-rw-r--r--dbaccess/source/ui/tabledesign/TableFieldControl.cxx177
-rw-r--r--dbaccess/source/ui/tabledesign/TableFieldControl.hxx72
-rw-r--r--dbaccess/source/ui/tabledesign/TableFieldDescWin.cxx337
-rw-r--r--dbaccess/source/ui/tabledesign/TableFieldDescWin.hxx115
-rw-r--r--dbaccess/source/ui/tabledesign/TableRow.cxx235
-rw-r--r--dbaccess/source/ui/tabledesign/TableRowExchange.cxx97
-rw-r--r--dbaccess/source/ui/tabledesign/TableUndo.cxx495
-rw-r--r--dbaccess/source/ui/tabledesign/TableUndo.hxx178
-rw-r--r--dbaccess/source/ui/tabledesign/makefile.mk65
-rw-r--r--dbaccess/source/ui/tabledesign/table.src413
-rw-r--r--dbaccess/source/ui/uno/AdabasSettingsDlg.cxx133
-rw-r--r--dbaccess/source/ui/uno/AdabasSettingsDlg.hxx80
-rw-r--r--dbaccess/source/ui/uno/AdvancedSettingsDlg.cxx159
-rw-r--r--dbaccess/source/ui/uno/ColumnControl.cxx151
-rw-r--r--dbaccess/source/ui/uno/ColumnControl.hxx58
-rw-r--r--dbaccess/source/ui/uno/ColumnModel.cxx188
-rw-r--r--dbaccess/source/ui/uno/ColumnModel.hxx134
-rw-r--r--dbaccess/source/ui/uno/ColumnPeer.cxx172
-rw-r--r--dbaccess/source/ui/uno/ColumnPeer.hxx70
-rw-r--r--dbaccess/source/ui/uno/DBTypeWizDlg.cxx132
-rw-r--r--dbaccess/source/ui/uno/DBTypeWizDlg.hxx80
-rw-r--r--dbaccess/source/ui/uno/DBTypeWizDlgSetup.cxx166
-rw-r--r--dbaccess/source/ui/uno/DBTypeWizDlgSetup.hxx84
-rw-r--r--dbaccess/source/ui/uno/TableFilterDlg.cxx133
-rw-r--r--dbaccess/source/ui/uno/TableFilterDlg.hxx80
-rw-r--r--dbaccess/source/ui/uno/UserSettingsDlg.cxx133
-rw-r--r--dbaccess/source/ui/uno/UserSettingsDlg.hxx80
-rw-r--r--dbaccess/source/ui/uno/admindlg.cxx139
-rw-r--r--dbaccess/source/ui/uno/admindlg.hxx80
-rw-r--r--dbaccess/source/ui/uno/composerdialogs.cxx227
-rw-r--r--dbaccess/source/ui/uno/composerdialogs.hxx160
-rw-r--r--dbaccess/source/ui/uno/copytablewizard.cxx1627
-rw-r--r--dbaccess/source/ui/uno/copytablewizard.src80
-rwxr-xr-xdbaccess/source/ui/uno/dbinteraction.cxx427
-rw-r--r--dbaccess/source/ui/uno/dbinteraction.hxx188
-rw-r--r--dbaccess/source/ui/uno/dbinteraction.src41
-rw-r--r--dbaccess/source/ui/uno/makefile.mk76
-rw-r--r--dbaccess/source/ui/uno/textconnectionsettings_uno.cxx263
-rw-r--r--dbaccess/source/ui/uno/unoDirectSql.cxx156
-rw-r--r--dbaccess/source/ui/uno/unoDirectSql.hxx94
-rw-r--r--dbaccess/source/ui/uno/unoadmin.cxx145
-rw-r--r--dbaccess/source/ui/uno/unosqlmessage.cxx176
-rw-r--r--dbaccess/uiconfig/dbapp/menubar/menubar.xml143
-rw-r--r--dbaccess/uiconfig/dbapp/statusbar/statusbar.xml8
-rw-r--r--dbaccess/uiconfig/dbapp/toolbar/formobjectbar.xml8
-rw-r--r--dbaccess/uiconfig/dbapp/toolbar/queryobjectbar.xml8
-rw-r--r--dbaccess/uiconfig/dbapp/toolbar/reportobjectbar.xml8
-rw-r--r--dbaccess/uiconfig/dbapp/toolbar/tableobjectbar.xml8
-rw-r--r--dbaccess/uiconfig/dbapp/toolbar/toolbar.xml19
-rw-r--r--dbaccess/uiconfig/dbbrowser/menubar/compat.xml1
-rw-r--r--dbaccess/uiconfig/dbbrowser/menubar/preserve.txt1
-rw-r--r--dbaccess/uiconfig/dbbrowser/toolbar/toolbar.xml33
-rw-r--r--dbaccess/uiconfig/dbquery/menubar/menubar.xml84
-rw-r--r--dbaccess/uiconfig/dbquery/toolbar/designobjectbar.xml10
-rw-r--r--dbaccess/uiconfig/dbquery/toolbar/sqlobjectbar.xml5
-rw-r--r--dbaccess/uiconfig/dbquery/toolbar/toolbar.xml20
-rw-r--r--dbaccess/uiconfig/dbrelation/menubar/menubar.xml67
-rw-r--r--dbaccess/uiconfig/dbrelation/toolbar/toolbar.xml13
-rw-r--r--dbaccess/uiconfig/dbtable/menubar/menubar.xml68
-rw-r--r--dbaccess/uiconfig/dbtable/toolbar/toolbar.xml17
-rw-r--r--dbaccess/uiconfig/dbtdata/menubar/menubar.xml76
-rw-r--r--dbaccess/uiconfig/dbtdata/toolbar/toolbar.xml27
-rw-r--r--dbaccess/util/dba.pmk29
-rw-r--r--dbaccess/util/hidother.src518
-rw-r--r--dbaccess/util/makefile.mk241
-rw-r--r--dbaccess/util/makefile.pmk31
-rw-r--r--dbaccess/win32/source/odbcconfig/makefile.mk54
-rw-r--r--dbaccess/win32/source/odbcconfig/odbcconfig.cxx159
-rw-r--r--default_images/avmedia/res/av02048.pngbin0 -> 711 bytes
-rw-r--r--default_images/avmedia/res/av02049.pngbin0 -> 712 bytes
-rw-r--r--default_images/avmedia/res/av02050.pngbin0 -> 637 bytes
-rw-r--r--default_images/avmedia/res/av02051.pngbin0 -> 653 bytes
-rw-r--r--default_images/avmedia/res/av02052.pngbin0 -> 771 bytes
-rw-r--r--default_images/avmedia/res/av02053.pngbin0 -> 477 bytes
-rw-r--r--default_images/avmedia/res/av02054.pngbin0 -> 1059 bytes
-rwxr-xr-xdefault_images/avmedia/res/avaudiologo.pngbin0 -> 6724 bytes
-rwxr-xr-xdefault_images/avmedia/res/avemptylogo.pngbin0 -> 1906 bytes
-rw-r--r--default_images/avmedia/res/avh02048.pngbin0 -> 141 bytes
-rw-r--r--default_images/avmedia/res/avh02049.pngbin0 -> 131 bytes
-rw-r--r--default_images/avmedia/res/avh02050.pngbin0 -> 125 bytes
-rw-r--r--default_images/avmedia/res/avh02051.pngbin0 -> 123 bytes
-rw-r--r--default_images/avmedia/res/avh02052.pngbin0 -> 154 bytes
-rw-r--r--default_images/avmedia/res/avh02053.pngbin0 -> 135 bytes
-rw-r--r--default_images/avmedia/res/avh02054.pngbin0 -> 175 bytes
-rw-r--r--default_images/avmedia/res/avl02048.pngbin0 -> 1188 bytes
-rwxr-xr-xdefault_images/avmedia/res/avl02049.pngbin0 -> 991 bytes
-rwxr-xr-xdefault_images/avmedia/res/avl02050.pngbin0 -> 895 bytes
-rwxr-xr-xdefault_images/avmedia/res/avl02051.pngbin0 -> 878 bytes
-rwxr-xr-xdefault_images/avmedia/res/avl02052.pngbin0 -> 1197 bytes
-rwxr-xr-xdefault_images/avmedia/res/avl02053.pngbin0 -> 786 bytes
-rwxr-xr-xdefault_images/avmedia/res/avl02054.pngbin0 -> 1688 bytes
-rw-r--r--default_images/avmedia/res/avlh02048.pngbin0 -> 175 bytes
-rwxr-xr-xdefault_images/avmedia/res/avlh02049.pngbin0 -> 163 bytes
-rwxr-xr-xdefault_images/avmedia/res/avlh02050.pngbin0 -> 147 bytes
-rwxr-xr-xdefault_images/avmedia/res/avlh02051.pngbin0 -> 144 bytes
-rwxr-xr-xdefault_images/avmedia/res/avlh02052.pngbin0 -> 200 bytes
-rwxr-xr-xdefault_images/avmedia/res/avlh02053.pngbin0 -> 143 bytes
-rwxr-xr-xdefault_images/avmedia/res/avlh02054.pngbin0 -> 231 bytes
-rw-r--r--default_images/basctl/res/im01.pngbin0 -> 780 bytes
-rw-r--r--default_images/basctl/res/imh01.pngbin0 -> 183 bytes
-rw-r--r--default_images/basctl/res/locked.pngbin0 -> 385 bytes
-rw-r--r--default_images/basctl/res/locked_h.pngbin0 -> 120 bytes
-rw-r--r--default_images/chart2/res/areas3d_52x60.pngbin0 -> 459 bytes
-rw-r--r--default_images/chart2/res/areas3d_52x60_h.pngbin0 -> 336 bytes
-rw-r--r--default_images/chart2/res/areas_52x60.pngbin0 -> 400 bytes
-rw-r--r--default_images/chart2/res/areas_52x60_h.pngbin0 -> 300 bytes
-rw-r--r--default_images/chart2/res/areasfull3d_52x60.pngbin0 -> 319 bytes
-rw-r--r--default_images/chart2/res/areasfull3d_52x60_h.pngbin0 -> 283 bytes
-rw-r--r--default_images/chart2/res/areasfull_52x60.pngbin0 -> 287 bytes
-rw-r--r--default_images/chart2/res/areasfull_52x60_h.pngbin0 -> 230 bytes
-rw-r--r--default_images/chart2/res/areaspiled3d_52x60.pngbin0 -> 484 bytes
-rw-r--r--default_images/chart2/res/areaspiled3d_52x60_h.pngbin0 -> 382 bytes
-rw-r--r--default_images/chart2/res/areaspiled_52x60.pngbin0 -> 358 bytes
-rw-r--r--default_images/chart2/res/areaspiled_52x60_h.pngbin0 -> 283 bytes
-rw-r--r--default_images/chart2/res/bar3d_52x60.pngbin0 -> 337 bytes
-rw-r--r--default_images/chart2/res/bar3d_52x60_h.pngbin0 -> 289 bytes
-rw-r--r--default_images/chart2/res/bar3ddeep_52x60.pngbin0 -> 468 bytes
-rw-r--r--default_images/chart2/res/bar3ddeep_52x60_h.pngbin0 -> 332 bytes
-rw-r--r--default_images/chart2/res/bar_52x60.pngbin0 -> 227 bytes
-rw-r--r--default_images/chart2/res/bar_52x60_h.pngbin0 -> 188 bytes
-rw-r--r--default_images/chart2/res/barpercent3d_52x60.pngbin0 -> 303 bytes
-rw-r--r--default_images/chart2/res/barpercent3d_52x60_h.pngbin0 -> 247 bytes
-rw-r--r--default_images/chart2/res/barpercent_52x60.pngbin0 -> 218 bytes
-rw-r--r--default_images/chart2/res/barpercent_52x60_h.pngbin0 -> 169 bytes
-rw-r--r--default_images/chart2/res/barstack3d_52x60.pngbin0 -> 307 bytes
-rw-r--r--default_images/chart2/res/barstack3d_52x60_h.pngbin0 -> 251 bytes
-rw-r--r--default_images/chart2/res/barstack_52x60.pngbin0 -> 218 bytes
-rw-r--r--default_images/chart2/res/barstack_52x60_h.pngbin0 -> 172 bytes
-rw-r--r--default_images/chart2/res/bubble_52x60.pngbin0 -> 2715 bytes
-rw-r--r--default_images/chart2/res/bubble_52x60_h.pngbin0 -> 339 bytes
-rw-r--r--default_images/chart2/res/columnline_52x60.pngbin0 -> 281 bytes
-rw-r--r--default_images/chart2/res/columnline_52x60_h.pngbin0 -> 222 bytes
-rw-r--r--default_images/chart2/res/columnpercent3d_52x60.pngbin0 -> 324 bytes
-rw-r--r--default_images/chart2/res/columnpercent3d_52x60_h.pngbin0 -> 274 bytes
-rw-r--r--default_images/chart2/res/columnpercent_52x60.pngbin0 -> 218 bytes
-rw-r--r--default_images/chart2/res/columnpercent_52x60_h.pngbin0 -> 177 bytes
-rw-r--r--default_images/chart2/res/columns3d_52x60.pngbin0 -> 345 bytes
-rw-r--r--default_images/chart2/res/columns3d_52x60_h.pngbin0 -> 278 bytes
-rw-r--r--default_images/chart2/res/columns3ddeep_52x60.pngbin0 -> 454 bytes
-rw-r--r--default_images/chart2/res/columns3ddeep_52x60_h.pngbin0 -> 334 bytes
-rw-r--r--default_images/chart2/res/columns_52x60.pngbin0 -> 214 bytes
-rw-r--r--default_images/chart2/res/columns_52x60_h.pngbin0 -> 174 bytes
-rw-r--r--default_images/chart2/res/columnstack3d_52x60.pngbin0 -> 326 bytes
-rw-r--r--default_images/chart2/res/columnstack3d_52x60_h.pngbin0 -> 278 bytes
-rw-r--r--default_images/chart2/res/columnstack_52x60.pngbin0 -> 218 bytes
-rw-r--r--default_images/chart2/res/columnstack_52x60_h.pngbin0 -> 178 bytes
-rw-r--r--default_images/chart2/res/columnstackline_52x60.pngbin0 -> 247 bytes
-rw-r--r--default_images/chart2/res/columnstackline_52x60_h.pngbin0 -> 194 bytes
-rw-r--r--default_images/chart2/res/cone_52x60.pngbin0 -> 717 bytes
-rw-r--r--default_images/chart2/res/cone_52x60_h.pngbin0 -> 341 bytes
-rw-r--r--default_images/chart2/res/conedeep_52x60.pngbin0 -> 742 bytes
-rw-r--r--default_images/chart2/res/conedeep_52x60_h.pngbin0 -> 462 bytes
-rw-r--r--default_images/chart2/res/conehori_52x60.pngbin0 -> 623 bytes
-rw-r--r--default_images/chart2/res/conehori_52x60_h.pngbin0 -> 356 bytes
-rw-r--r--default_images/chart2/res/conehorideep_52x60.pngbin0 -> 685 bytes
-rw-r--r--default_images/chart2/res/conehorideep_52x60_h.pngbin0 -> 436 bytes
-rw-r--r--default_images/chart2/res/conehoripercent_52x60.pngbin0 -> 605 bytes
-rw-r--r--default_images/chart2/res/conehoripercent_52x60_h.pngbin0 -> 360 bytes
-rw-r--r--default_images/chart2/res/conehoristack_52x60.pngbin0 -> 650 bytes
-rw-r--r--default_images/chart2/res/conehoristack_52x60_h.pngbin0 -> 378 bytes
-rw-r--r--default_images/chart2/res/conepercent_52x60.pngbin0 -> 628 bytes
-rw-r--r--default_images/chart2/res/conepercent_52x60_h.pngbin0 -> 383 bytes
-rw-r--r--default_images/chart2/res/conestack_52x60.pngbin0 -> 687 bytes
-rw-r--r--default_images/chart2/res/conestack_52x60_h.pngbin0 -> 401 bytes
-rw-r--r--default_images/chart2/res/cylinder_52x60.pngbin0 -> 489 bytes
-rw-r--r--default_images/chart2/res/cylinder_52x60_h.pngbin0 -> 326 bytes
-rw-r--r--default_images/chart2/res/cylinderdeep_52x60.pngbin0 -> 570 bytes
-rw-r--r--default_images/chart2/res/cylinderdeep_52x60_h.pngbin0 -> 397 bytes
-rw-r--r--default_images/chart2/res/cylinderhori_52x60.pngbin0 -> 457 bytes
-rw-r--r--default_images/chart2/res/cylinderhori_52x60_h.pngbin0 -> 295 bytes
-rw-r--r--default_images/chart2/res/cylinderhorideep_52x60.pngbin0 -> 666 bytes
-rw-r--r--default_images/chart2/res/cylinderhorideep_52x60_h.pngbin0 -> 380 bytes
-rw-r--r--default_images/chart2/res/cylinderhoriprocent_52x60.pngbin0 -> 608 bytes
-rw-r--r--default_images/chart2/res/cylinderhoriprocent_52x60_h.pngbin0 -> 333 bytes
-rw-r--r--default_images/chart2/res/cylinderhoristack_52x60.pngbin0 -> 614 bytes
-rw-r--r--default_images/chart2/res/cylinderhoristack_52x60_h.pngbin0 -> 321 bytes
-rw-r--r--default_images/chart2/res/cylinderpercent_52x60.pngbin0 -> 596 bytes
-rw-r--r--default_images/chart2/res/cylinderpercent_52x60_h.pngbin0 -> 341 bytes
-rw-r--r--default_images/chart2/res/cylinderstack_52x60.pngbin0 -> 602 bytes
-rw-r--r--default_images/chart2/res/cylinderstack_52x60_h.pngbin0 -> 355 bytes
-rw-r--r--default_images/chart2/res/dataeditor_icon01.pngbin0 -> 502 bytes
-rw-r--r--default_images/chart2/res/dataeditor_icon02.pngbin0 -> 586 bytes
-rw-r--r--default_images/chart2/res/dataeditor_icon03.pngbin0 -> 380 bytes
-rw-r--r--default_images/chart2/res/dataeditor_icon04.pngbin0 -> 486 bytes
-rw-r--r--default_images/chart2/res/dataeditor_icon05.pngbin0 -> 685 bytes
-rw-r--r--default_images/chart2/res/dataeditor_icon06.pngbin0 -> 624 bytes
-rw-r--r--default_images/chart2/res/dataeditor_icon07.pngbin0 -> 486 bytes
-rw-r--r--default_images/chart2/res/dataeditor_icon_h01.pngbin0 -> 114 bytes
-rw-r--r--default_images/chart2/res/dataeditor_icon_h02.pngbin0 -> 111 bytes
-rw-r--r--default_images/chart2/res/dataeditor_icon_h03.pngbin0 -> 105 bytes
-rw-r--r--default_images/chart2/res/dataeditor_icon_h04.pngbin0 -> 103 bytes
-rw-r--r--default_images/chart2/res/dataeditor_icon_h05.pngbin0 -> 145 bytes
-rw-r--r--default_images/chart2/res/dataeditor_icon_h06.pngbin0 -> 146 bytes
-rw-r--r--default_images/chart2/res/dataeditor_icon_h07.pngbin0 -> 111 bytes
-rw-r--r--default_images/chart2/res/donut3d_52x60.pngbin0 -> 538 bytes
-rw-r--r--default_images/chart2/res/donut3d_52x60_h.pngbin0 -> 394 bytes
-rw-r--r--default_images/chart2/res/donut3dexploded_52x60.pngbin0 -> 733 bytes
-rw-r--r--default_images/chart2/res/donut3dexploded_52x60_h.pngbin0 -> 462 bytes
-rw-r--r--default_images/chart2/res/donut_52x60.pngbin0 -> 481 bytes
-rw-r--r--default_images/chart2/res/donut_52x60_h.pngbin0 -> 379 bytes
-rw-r--r--default_images/chart2/res/donutexploded_52x60.pngbin0 -> 564 bytes
-rw-r--r--default_images/chart2/res/donutexploded_52x60_h.pngbin0 -> 451 bytes
-rw-r--r--default_images/chart2/res/errorbothhori_30.pngbin0 -> 563 bytes
-rw-r--r--default_images/chart2/res/errorbothhori_30_h.pngbin0 -> 112 bytes
-rw-r--r--default_images/chart2/res/errorbothverti_30.pngbin0 -> 628 bytes
-rw-r--r--default_images/chart2/res/errorbothverti_30_h.pngbin0 -> 112 bytes
-rw-r--r--default_images/chart2/res/errordown_30.pngbin0 -> 596 bytes
-rw-r--r--default_images/chart2/res/errordown_30_h.pngbin0 -> 111 bytes
-rw-r--r--default_images/chart2/res/errorleft_30.pngbin0 -> 547 bytes
-rw-r--r--default_images/chart2/res/errorleft_30_h.pngbin0 -> 111 bytes
-rw-r--r--default_images/chart2/res/errorright_30.pngbin0 -> 552 bytes
-rw-r--r--default_images/chart2/res/errorright_30_h.pngbin0 -> 110 bytes
-rw-r--r--default_images/chart2/res/errorup_30.pngbin0 -> 586 bytes
-rw-r--r--default_images/chart2/res/errorup_30_h.pngbin0 -> 106 bytes
-rw-r--r--default_images/chart2/res/net_52x60.pngbin0 -> 805 bytes
-rw-r--r--default_images/chart2/res/net_52x60_h.pngbin0 -> 557 bytes
-rw-r--r--default_images/chart2/res/netfill_52x60.pngbin0 -> 2356 bytes
-rw-r--r--default_images/chart2/res/netfill_52x60_h.pngbin0 -> 1111 bytes
-rw-r--r--default_images/chart2/res/netlinepoint_52x60.pngbin0 -> 971 bytes
-rw-r--r--default_images/chart2/res/netlinepoint_52x60_h.pngbin0 -> 571 bytes
-rw-r--r--default_images/chart2/res/netlinepointstack_52x60.pngbin0 -> 1029 bytes
-rw-r--r--default_images/chart2/res/netlinepointstack_52x60_h.pngbin0 -> 516 bytes
-rw-r--r--default_images/chart2/res/netpoint_52x60.pngbin0 -> 789 bytes
-rw-r--r--default_images/chart2/res/netpoint_52x60_h.pngbin0 -> 402 bytes
-rw-r--r--default_images/chart2/res/netpointstack_52x60.pngbin0 -> 749 bytes
-rw-r--r--default_images/chart2/res/netpointstack_52x60_h.pngbin0 -> 389 bytes
-rw-r--r--default_images/chart2/res/netstack_52x60.pngbin0 -> 857 bytes
-rw-r--r--default_images/chart2/res/netstack_52x60_h.pngbin0 -> 494 bytes
-rw-r--r--default_images/chart2/res/netstackfill_52x60.pngbin0 -> 2913 bytes
-rw-r--r--default_images/chart2/res/netstackfill_52x60_h.pngbin0 -> 1032 bytes
-rw-r--r--default_images/chart2/res/nostackdirect3d_52x60.pngbin0 -> 813 bytes
-rw-r--r--default_images/chart2/res/nostackdirect3d_52x60_h.pngbin0 -> 347 bytes
-rw-r--r--default_images/chart2/res/nostackdirectboth_52x60.pngbin0 -> 566 bytes
-rw-r--r--default_images/chart2/res/nostackdirectboth_52x60_h.pngbin0 -> 318 bytes
-rw-r--r--default_images/chart2/res/nostackdirectlines_52x60.pngbin0 -> 394 bytes
-rw-r--r--default_images/chart2/res/nostackdirectlines_52x60_h.pngbin0 -> 299 bytes
-rw-r--r--default_images/chart2/res/nostackdirectpoints_52x60.pngbin0 -> 343 bytes
-rw-r--r--default_images/chart2/res/nostackdirectpoints_52x60_h.pngbin0 -> 206 bytes
-rw-r--r--default_images/chart2/res/nostacksmooth3d_52x60.pngbin0 -> 1314 bytes
-rw-r--r--default_images/chart2/res/nostacksmooth3d_52x60_h.pngbin0 -> 361 bytes
-rw-r--r--default_images/chart2/res/nostacksmoothboth_52x60.pngbin0 -> 847 bytes
-rw-r--r--default_images/chart2/res/nostacksmoothboth_52x60_h.pngbin0 -> 337 bytes
-rw-r--r--default_images/chart2/res/nostacksmoothlines_52x60.pngbin0 -> 756 bytes
-rw-r--r--default_images/chart2/res/nostacksmoothlines_52x60_h.pngbin0 -> 302 bytes
-rw-r--r--default_images/chart2/res/pie3d_52x60.pngbin0 -> 461 bytes
-rw-r--r--default_images/chart2/res/pie3d_52x60_h.pngbin0 -> 313 bytes
-rw-r--r--default_images/chart2/res/pie3dexploded_52x60.pngbin0 -> 555 bytes
-rw-r--r--default_images/chart2/res/pie3dexploded_52x60_h.pngbin0 -> 411 bytes
-rw-r--r--default_images/chart2/res/pie_52x60.pngbin0 -> 403 bytes
-rw-r--r--default_images/chart2/res/pie_52x60_h.pngbin0 -> 312 bytes
-rw-r--r--default_images/chart2/res/pieexploded_52x60.pngbin0 -> 442 bytes
-rw-r--r--default_images/chart2/res/pieexploded_52x60_h.pngbin0 -> 347 bytes
-rw-r--r--default_images/chart2/res/pyramind_52x60.pngbin0 -> 571 bytes
-rw-r--r--default_images/chart2/res/pyramind_52x60_h.pngbin0 -> 347 bytes
-rw-r--r--default_images/chart2/res/pyraminddeep_52x60.pngbin0 -> 657 bytes
-rw-r--r--default_images/chart2/res/pyraminddeep_52x60_h.pngbin0 -> 430 bytes
-rw-r--r--default_images/chart2/res/pyramindhori_52x60.pngbin0 -> 441 bytes
-rw-r--r--default_images/chart2/res/pyramindhori_52x60_h.pngbin0 -> 332 bytes
-rw-r--r--default_images/chart2/res/pyramindhorideep_52x60.pngbin0 -> 584 bytes
-rw-r--r--default_images/chart2/res/pyramindhorideep_52x60_h.pngbin0 -> 409 bytes
-rw-r--r--default_images/chart2/res/pyramindhoripercent_52x60.pngbin0 -> 463 bytes
-rw-r--r--default_images/chart2/res/pyramindhoripercent_52x60_h.pngbin0 -> 320 bytes
-rw-r--r--default_images/chart2/res/pyramindhoristack_52x60.pngbin0 -> 469 bytes
-rw-r--r--default_images/chart2/res/pyramindhoristack_52x60_h.pngbin0 -> 317 bytes
-rw-r--r--default_images/chart2/res/pyramindpercent_52x60.pngbin0 -> 533 bytes
-rw-r--r--default_images/chart2/res/pyramindpercent_52x60_h.pngbin0 -> 357 bytes
-rw-r--r--default_images/chart2/res/pyramindstack_52x60.pngbin0 -> 564 bytes
-rw-r--r--default_images/chart2/res/pyramindstack_52x60_h.pngbin0 -> 361 bytes
-rw-r--r--default_images/chart2/res/regexp.pngbin0 -> 1092 bytes
-rw-r--r--default_images/chart2/res/regexp_h.pngbin0 -> 188 bytes
-rw-r--r--default_images/chart2/res/reglin.pngbin0 -> 1000 bytes
-rw-r--r--default_images/chart2/res/reglin_h.pngbin0 -> 183 bytes
-rw-r--r--default_images/chart2/res/reglog.pngbin0 -> 1034 bytes
-rw-r--r--default_images/chart2/res/reglog_h.pngbin0 -> 186 bytes
-rw-r--r--default_images/chart2/res/regno.pngbin0 -> 608 bytes
-rw-r--r--default_images/chart2/res/regno_h.pngbin0 -> 122 bytes
-rw-r--r--default_images/chart2/res/regpow.pngbin0 -> 1149 bytes
-rw-r--r--default_images/chart2/res/regpow_h.pngbin0 -> 193 bytes
-rw-r--r--default_images/chart2/res/selectrange.pngbin0 -> 629 bytes
-rw-r--r--default_images/chart2/res/selectrange_h.pngbin0 -> 119 bytes
-rw-r--r--default_images/chart2/res/stackdirect3d_52x60.pngbin0 -> 738 bytes
-rw-r--r--default_images/chart2/res/stackdirect3d_52x60_h.pngbin0 -> 286 bytes
-rw-r--r--default_images/chart2/res/stackdirectboth_52x60.pngbin0 -> 582 bytes
-rw-r--r--default_images/chart2/res/stackdirectboth_52x60_h.pngbin0 -> 279 bytes
-rw-r--r--default_images/chart2/res/stackdirectlines_52x60.pngbin0 -> 409 bytes
-rw-r--r--default_images/chart2/res/stackdirectlines_52x60_h.pngbin0 -> 246 bytes
-rw-r--r--default_images/chart2/res/stackdirectpoints_52x60.pngbin0 -> 336 bytes
-rw-r--r--default_images/chart2/res/stackdirectpoints_52x60_h.pngbin0 -> 205 bytes
-rw-r--r--default_images/chart2/res/stacksmooth3d_52x60.pngbin0 -> 946 bytes
-rw-r--r--default_images/chart2/res/stacksmooth3d_52x60_h.pngbin0 -> 279 bytes
-rw-r--r--default_images/chart2/res/stacksmoothboth_52x60.pngbin0 -> 598 bytes
-rw-r--r--default_images/chart2/res/stacksmoothboth_52x60_h.pngbin0 -> 289 bytes
-rw-r--r--default_images/chart2/res/stacksmoothlines_52x60.pngbin0 -> 879 bytes
-rw-r--r--default_images/chart2/res/stacksmoothlines_52x60_h.pngbin0 -> 251 bytes
-rw-r--r--default_images/chart2/res/stock_52x60.pngbin0 -> 296 bytes
-rw-r--r--default_images/chart2/res/stock_52x60_h.pngbin0 -> 166 bytes
-rw-r--r--default_images/chart2/res/stockblock_52x60.pngbin0 -> 366 bytes
-rw-r--r--default_images/chart2/res/stockblock_52x60_h.pngbin0 -> 195 bytes
-rw-r--r--default_images/chart2/res/stockcolumns_52x60.pngbin0 -> 489 bytes
-rw-r--r--default_images/chart2/res/stockcolumns_52x60_h.pngbin0 -> 248 bytes
-rw-r--r--default_images/chart2/res/stockcolumnsattach_52x60.pngbin0 -> 557 bytes
-rw-r--r--default_images/chart2/res/stockcolumnsattach_52x60_h.pngbin0 -> 258 bytes
-rw-r--r--default_images/chart2/res/typearea_16.pngbin0 -> 600 bytes
-rw-r--r--default_images/chart2/res/typearea_16_h.pngbin0 -> 154 bytes
-rw-r--r--default_images/chart2/res/typebar_16.pngbin0 -> 442 bytes
-rw-r--r--default_images/chart2/res/typebar_16_h.pngbin0 -> 103 bytes
-rw-r--r--default_images/chart2/res/typebubble_16.pngbin0 -> 581 bytes
-rw-r--r--default_images/chart2/res/typebubble_16_h.pngbin0 -> 141 bytes
-rw-r--r--default_images/chart2/res/typecolumn_16.pngbin0 -> 521 bytes
-rw-r--r--default_images/chart2/res/typecolumn_16_h.pngbin0 -> 100 bytes
-rw-r--r--default_images/chart2/res/typecolumnline_16.pngbin0 -> 541 bytes
-rw-r--r--default_images/chart2/res/typecolumnline_16_h.pngbin0 -> 150 bytes
-rw-r--r--default_images/chart2/res/typenet_16.pngbin0 -> 582 bytes
-rw-r--r--default_images/chart2/res/typenet_16_h.pngbin0 -> 187 bytes
-rw-r--r--default_images/chart2/res/typepie_16.pngbin0 -> 895 bytes
-rw-r--r--default_images/chart2/res/typepie_16_h.pngbin0 -> 155 bytes
-rw-r--r--default_images/chart2/res/typepointline_16.pngbin0 -> 638 bytes
-rw-r--r--default_images/chart2/res/typepointline_16_h.pngbin0 -> 155 bytes
-rw-r--r--default_images/chart2/res/typestock_16.pngbin0 -> 405 bytes
-rw-r--r--default_images/chart2/res/typestock_16_h.pngbin0 -> 124 bytes
-rw-r--r--default_images/chart2/res/typexy_16.pngbin0 -> 388 bytes
-rw-r--r--default_images/chart2/res/typexy_16_h.pngbin0 -> 163 bytes
-rw-r--r--default_images/chart2/res/valueaxisdirect3d_52x60.pngbin0 -> 524 bytes
-rw-r--r--default_images/chart2/res/valueaxisdirect3d_52x60_h.pngbin0 -> 363 bytes
-rw-r--r--default_images/chart2/res/valueaxisdirectboth_52x60.pngbin0 -> 572 bytes
-rw-r--r--default_images/chart2/res/valueaxisdirectboth_52x60_h.pngbin0 -> 345 bytes
-rw-r--r--default_images/chart2/res/valueaxisdirectlines_52x60.pngbin0 -> 376 bytes
-rw-r--r--default_images/chart2/res/valueaxisdirectlines_52x60_h.pngbin0 -> 313 bytes
-rw-r--r--default_images/chart2/res/valueaxisdirectpoints_52x60.pngbin0 -> 344 bytes
-rw-r--r--default_images/chart2/res/valueaxisdirectpoints_52x60_h.pngbin0 -> 207 bytes
-rw-r--r--default_images/chart2/res/valueaxissmooth3d_52x60.pngbin0 -> 1501 bytes
-rw-r--r--default_images/chart2/res/valueaxissmooth3d_52x60_h.pngbin0 -> 354 bytes
-rw-r--r--default_images/chart2/res/valueaxissmoothboth_52x60.pngbin0 -> 879 bytes
-rw-r--r--default_images/chart2/res/valueaxissmoothboth_52x60_h.pngbin0 -> 344 bytes
-rw-r--r--default_images/chart2/res/valueaxissmoothlines_52x60.pngbin0 -> 796 bytes
-rw-r--r--default_images/chart2/res/valueaxissmoothlines_52x60_h.pngbin0 -> 313 bytes
-rw-r--r--default_images/database/linked_text_table.pngbin0 -> 607 bytes
-rw-r--r--default_images/database/linked_text_table_hc.pngbin0 -> 144 bytes
-rw-r--r--default_images/dbaccess/res/all_left.pngbin0 -> 460 bytes
-rw-r--r--default_images/dbaccess/res/all_left_h.pngbin0 -> 106 bytes
-rw-r--r--default_images/dbaccess/res/all_right.pngbin0 -> 448 bytes
-rw-r--r--default_images/dbaccess/res/all_right_h.pngbin0 -> 106 bytes
-rw-r--r--default_images/dbaccess/res/db.pngbin0 -> 1007 bytes
-rw-r--r--default_images/dbaccess/res/db_sch.pngbin0 -> 176 bytes
-rw-r--r--default_images/dbaccess/res/exerror.pngbin0 -> 510 bytes
-rw-r--r--default_images/dbaccess/res/exerror_sch.pngbin0 -> 140 bytes
-rw-r--r--default_images/dbaccess/res/exinfo.pngbin0 -> 801 bytes
-rw-r--r--default_images/dbaccess/res/exinfo_sch.pngbin0 -> 370 bytes
-rw-r--r--default_images/dbaccess/res/exwarning.pngbin0 -> 733 bytes
-rw-r--r--default_images/dbaccess/res/exwarning_sch.pngbin0 -> 152 bytes
-rw-r--r--default_images/dbaccess/res/form_16.pngbin0 -> 515 bytes
-rw-r--r--default_images/dbaccess/res/form_16_h.pngbin0 -> 118 bytes
-rw-r--r--default_images/dbaccess/res/forms_16.pngbin0 -> 586 bytes
-rw-r--r--default_images/dbaccess/res/forms_16_h.pngbin0 -> 141 bytes
-rw-r--r--default_images/dbaccess/res/forms_32.pngbin0 -> 1514 bytes
-rw-r--r--default_images/dbaccess/res/forms_32_h.pngbin0 -> 212 bytes
-rw-r--r--default_images/dbaccess/res/jo01.pngbin0 -> 404 bytes
-rw-r--r--default_images/dbaccess/res/jo02.pngbin0 -> 443 bytes
-rw-r--r--default_images/dbaccess/res/joh01.pngbin0 -> 112 bytes
-rw-r--r--default_images/dbaccess/res/joh02.pngbin0 -> 110 bytes
-rw-r--r--default_images/dbaccess/res/lc036.pngbin0 -> 1146 bytes
-rw-r--r--default_images/dbaccess/res/lc037.pngbin0 -> 1173 bytes
-rw-r--r--default_images/dbaccess/res/lc038.pngbin0 -> 1091 bytes
-rw-r--r--default_images/dbaccess/res/lc039.pngbin0 -> 989 bytes
-rw-r--r--default_images/dbaccess/res/lc040.pngbin0 -> 1583 bytes
-rw-r--r--default_images/dbaccess/res/lch036.pngbin0 -> 173 bytes
-rw-r--r--default_images/dbaccess/res/lch037.pngbin0 -> 186 bytes
-rw-r--r--default_images/dbaccess/res/lch038.pngbin0 -> 202 bytes
-rw-r--r--default_images/dbaccess/res/lch039.pngbin0 -> 166 bytes
-rw-r--r--default_images/dbaccess/res/lch040.pngbin0 -> 237 bytes
-rw-r--r--default_images/dbaccess/res/nu07.pngbin0 -> 477 bytes
-rw-r--r--default_images/dbaccess/res/nu08.pngbin0 -> 510 bytes
-rw-r--r--default_images/dbaccess/res/nu09.pngbin0 -> 454 bytes
-rw-r--r--default_images/dbaccess/res/nuh07.pngbin0 -> 135 bytes
-rw-r--r--default_images/dbaccess/res/nuh08.pngbin0 -> 140 bytes
-rw-r--r--default_images/dbaccess/res/nuh09.pngbin0 -> 126 bytes
-rw-r--r--default_images/dbaccess/res/one_left.pngbin0 -> 454 bytes
-rw-r--r--default_images/dbaccess/res/one_left_h.pngbin0 -> 101 bytes
-rw-r--r--default_images/dbaccess/res/one_right.pngbin0 -> 465 bytes
-rw-r--r--default_images/dbaccess/res/one_right_h.pngbin0 -> 101 bytes
-rw-r--r--default_images/dbaccess/res/pkey.pngbin0 -> 390 bytes
-rw-r--r--default_images/dbaccess/res/pkey_sch.pngbin0 -> 110 bytes
-rw-r--r--default_images/dbaccess/res/queries_32.pngbin0 -> 1107 bytes
-rw-r--r--default_images/dbaccess/res/queries_32_h.pngbin0 -> 203 bytes
-rw-r--r--default_images/dbaccess/res/report_16.pngbin0 -> 644 bytes
-rw-r--r--default_images/dbaccess/res/report_16_h.pngbin0 -> 102 bytes
-rw-r--r--default_images/dbaccess/res/reports_16.pngbin0 -> 656 bytes
-rw-r--r--default_images/dbaccess/res/reports_16_h.pngbin0 -> 130 bytes
-rw-r--r--default_images/dbaccess/res/reports_32.pngbin0 -> 1653 bytes
-rw-r--r--default_images/dbaccess/res/reports_32_h.pngbin0 -> 213 bytes
-rw-r--r--default_images/dbaccess/res/sc036.pngbin0 -> 771 bytes
-rw-r--r--default_images/dbaccess/res/sc037.pngbin0 -> 765 bytes
-rw-r--r--default_images/dbaccess/res/sc038.pngbin0 -> 755 bytes
-rw-r--r--default_images/dbaccess/res/sc039.pngbin0 -> 706 bytes
-rw-r--r--default_images/dbaccess/res/sc040.pngbin0 -> 873 bytes
-rw-r--r--default_images/dbaccess/res/sch036.pngbin0 -> 146 bytes
-rw-r--r--default_images/dbaccess/res/sch037.pngbin0 -> 163 bytes
-rw-r--r--default_images/dbaccess/res/sch038.pngbin0 -> 177 bytes
-rw-r--r--default_images/dbaccess/res/sch039.pngbin0 -> 146 bytes
-rw-r--r--default_images/dbaccess/res/sch040.pngbin0 -> 176 bytes
-rw-r--r--default_images/dbaccess/res/sortdown.pngbin0 -> 583 bytes
-rw-r--r--default_images/dbaccess/res/sortdown_h.pngbin0 -> 174 bytes
-rw-r--r--default_images/dbaccess/res/sortup.pngbin0 -> 574 bytes
-rw-r--r--default_images/dbaccess/res/sortup_h.pngbin0 -> 176 bytes
-rw-r--r--default_images/dbaccess/res/sxh03187.pngbin0 -> 142 bytes
-rw-r--r--default_images/dbaccess/res/sxh16670.pngbin0 -> 168 bytes
-rw-r--r--default_images/dbaccess/res/tables_32.pngbin0 -> 1353 bytes
-rw-r--r--default_images/dbaccess/res/tables_32_h.pngbin0 -> 222 bytes
-rw-r--r--default_images/desktop/res/caution_12.pngbin0 -> 548 bytes
-rw-r--r--default_images/desktop/res/caution_12_h.pngbin0 -> 142 bytes
-rw-r--r--default_images/desktop/res/caution_16.pngbin0 -> 733 bytes
-rw-r--r--default_images/desktop/res/caution_16_h.pngbin0 -> 152 bytes
-rw-r--r--default_images/desktop/res/extension_16.pngbin0 -> 557 bytes
-rw-r--r--default_images/desktop/res/extension_16_h.pngbin0 -> 148 bytes
-rw-r--r--default_images/desktop/res/extension_32.pngbin0 -> 1298 bytes
-rw-r--r--default_images/desktop/res/extension_32_h.pngbin0 -> 225 bytes
-rw-r--r--default_images/desktop/res/info_16.pngbin0 -> 801 bytes
-rw-r--r--default_images/desktop/res/info_16_h.pngbin0 -> 370 bytes
-rw-r--r--default_images/desktop/res/lock_16.pngbin0 -> 973 bytes
-rw-r--r--default_images/desktop/res/lock_16_h.pngbin0 -> 151 bytes
-rw-r--r--default_images/desktop/res/regkey.pngbin0 -> 1130 bytes
-rw-r--r--default_images/desktop/res/shared_16.pngbin0 -> 4055 bytes
-rw-r--r--default_images/desktop/res/shared_16_h.pngbin0 -> 3650 bytes
-rw-r--r--default_images/extensions/res/addresspilot.pngbin0 -> 1410 bytes
-rw-r--r--default_images/extensions/res/arrow.pngbin0 -> 537 bytes
-rw-r--r--default_images/extensions/res/buttonminus.pngbin0 -> 457 bytes
-rw-r--r--default_images/extensions/res/buttonminus_hc.pngbin0 -> 122 bytes
-rw-r--r--default_images/extensions/res/buttonplus.pngbin0 -> 424 bytes
-rw-r--r--default_images/extensions/res/buttonplus_hc.pngbin0 -> 228 bytes
-rw-r--r--default_images/extensions/res/m_arrow.pngbin0 -> 526 bytes
-rw-r--r--default_images/extensions/source/scanner/handle.pngbin0 -> 195 bytes
-rw-r--r--default_images/extensions/source/scanner/minus.pngbin0 -> 293 bytes
-rw-r--r--default_images/extensions/source/scanner/plus.pngbin0 -> 331 bytes
-rw-r--r--default_images/extensions/source/update/ui/onlineupdate_16.pngbin0 -> 529 bytes
-rw-r--r--default_images/extensions/source/update/ui/onlineupdate_16_h.pngbin0 -> 141 bytes
-rw-r--r--default_images/extensions/source/update/ui/onlineupdate_26.pngbin0 -> 866 bytes
-rw-r--r--default_images/extensions/source/update/ui/onlineupdate_26_h.pngbin0 -> 171 bytes
-rw-r--r--default_images/formula/res/fapclose.pngbin0 -> 440 bytes
-rw-r--r--default_images/formula/res/fapclose_h.pngbin0 -> 109 bytes
-rw-r--r--default_images/formula/res/faperror.pngbin0 -> 453 bytes
-rw-r--r--default_images/formula/res/faperror_h.pngbin0 -> 107 bytes
-rw-r--r--default_images/formula/res/fapok.pngbin0 -> 444 bytes
-rw-r--r--default_images/formula/res/fapok_h.pngbin0 -> 107 bytes
-rw-r--r--default_images/formula/res/fapopen.pngbin0 -> 736 bytes
-rw-r--r--default_images/formula/res/fapopen_h.pngbin0 -> 126 bytes
-rw-r--r--default_images/formula/res/fx.pngbin0 -> 500 bytes
-rw-r--r--default_images/formula/res/fx_h.pngbin0 -> 124 bytes
-rw-r--r--default_images/formula/res/refinp1.pngbin0 -> 629 bytes
-rw-r--r--default_images/formula/res/refinp1_h.pngbin0 -> 119 bytes
-rw-r--r--default_images/formula/res/refinp2.pngbin0 -> 569 bytes
-rw-r--r--default_images/formula/res/refinp2_h.pngbin0 -> 122 bytes
-rw-r--r--default_images/fpicker/res/fp011.pngbin0 -> 705 bytes
-rw-r--r--default_images/fpicker/res/fp014.pngbin0 -> 663 bytes
-rw-r--r--default_images/fpicker/res/fph011.pngbin0 -> 135 bytes
-rw-r--r--default_images/fpicker/res/fph014.pngbin0 -> 125 bytes
-rw-r--r--default_images/fpicker/res/list.pngbin0 -> 202 bytes
-rw-r--r--default_images/framework/res/addtemplate_32.pngbin0 -> 4077 bytes
-rw-r--r--default_images/framework/res/arrow.pngbin0 -> 537 bytes
-rw-r--r--default_images/framework/res/backing.pngbin0 -> 15255 bytes
-rw-r--r--default_images/framework/res/backing_hc.pngbin0 -> 6358 bytes
-rw-r--r--default_images/framework/res/backing_right.pngbin0 -> 23733 bytes
-rw-r--r--default_images/framework/res/backing_right_hc.pngbin0 -> 7922 bytes
-rw-r--r--default_images/framework/res/backing_rtl_left.pngbin0 -> 15255 bytes
-rw-r--r--default_images/framework/res/backing_rtl_left_hc.pngbin0 -> 6358 bytes
-rw-r--r--default_images/framework/res/backing_rtl_right.pngbin0 -> 23733 bytes
-rw-r--r--default_images/framework/res/backing_rtl_right_hc.pngbin0 -> 7922 bytes
-rw-r--r--default_images/framework/res/backing_space.pngbin0 -> 3703 bytes
-rw-r--r--default_images/framework/res/backing_space_hc.pngbin0 -> 3613 bytes
-rw-r--r--default_images/framework/res/extension.pngbin0 -> 4076 bytes
-rw-r--r--default_images/framework/res/extension_hc.pngbin0 -> 3755 bytes
-rw-r--r--default_images/framework/res/folder_32.pngbin0 -> 4205 bytes
-rw-r--r--default_images/framework/res/folder_32_hc.pngbin0 -> 3700 bytes
-rw-r--r--default_images/framework/res/info_26.pngbin0 -> 4016 bytes
-rw-r--r--default_images/framework/res/info_hc.pngbin0 -> 3649 bytes
-rw-r--r--default_images/framework/res/logo.pngbin0 -> 695 bytes
-rw-r--r--default_images/framework/res/register_32.pngbin0 -> 4175 bytes
-rw-r--r--default_images/framework/res/register_hc.pngbin0 -> 3729 bytes
-rw-r--r--default_images/framework/res/template_hc.pngbin0 -> 3703 bytes
-rw-r--r--default_images/framework/res/templates_32.pngbin0 -> 4394 bytes
-rw-r--r--default_images/framework/res/templates_32_hc.pngbin0 -> 3838 bytes
-rw-r--r--default_images/goodies/res/bombe.bmpbin0 -> 630 bytes
-rw-r--r--default_images/goodies/res/explos1.bmpbin0 -> 630 bytes
-rw-r--r--default_images/goodies/res/explos2.bmpbin0 -> 630 bytes
-rw-r--r--default_images/goodies/res/explos3.bmpbin0 -> 630 bytes
-rw-r--r--default_images/goodies/res/fighter1.bmpbin0 -> 630 bytes
-rw-r--r--default_images/goodies/res/fighterl.bmpbin0 -> 630 bytes
-rw-r--r--default_images/goodies/res/fighterr.bmpbin0 -> 630 bytes
-rw-r--r--default_images/goodies/res/helden.bmpbin0 -> 4438 bytes
-rw-r--r--default_images/goodies/res/monitio1.bmpbin0 -> 630 bytes
-rw-r--r--default_images/goodies/res/monitio2.bmpbin0 -> 630 bytes
-rw-r--r--default_images/goodies/res/monstb1.bmpbin0 -> 630 bytes
-rw-r--r--default_images/goodies/res/monstb2.bmpbin0 -> 630 bytes
-rw-r--r--default_images/goodies/res/monstb3.bmpbin0 -> 630 bytes
-rw-r--r--default_images/goodies/res/monstb4.bmpbin0 -> 630 bytes
-rw-r--r--default_images/goodies/res/monster1.bmpbin0 -> 630 bytes
-rw-r--r--default_images/goodies/res/monster2.bmpbin0 -> 630 bytes
-rw-r--r--default_images/goodies/res/monster3.bmpbin0 -> 630 bytes
-rw-r--r--default_images/goodies/res/monster4.bmpbin0 -> 630 bytes
-rw-r--r--default_images/goodies/res/scores.bmpbin0 -> 52918 bytes
-rw-r--r--default_images/goodies/res/swars.bmpbin0 -> 9118 bytes
-rw-r--r--default_images/goodies/res/uvisibl1.bmpbin0 -> 630 bytes
-rw-r--r--default_images/goodies/res/uvisibl2.bmpbin0 -> 630 bytes
-rw-r--r--default_images/goodies/res/uvisibl3.bmpbin0 -> 630 bytes
-rw-r--r--default_images/goodies/res/wall1.bmpbin0 -> 630 bytes
-rw-r--r--default_images/goodies/res/wall10.bmpbin0 -> 630 bytes
-rw-r--r--default_images/goodies/res/wall2.bmpbin0 -> 630 bytes
-rw-r--r--default_images/goodies/res/wall3.bmpbin0 -> 630 bytes
-rw-r--r--default_images/goodies/res/wall4.bmpbin0 -> 630 bytes
-rw-r--r--default_images/goodies/res/wall5.bmpbin0 -> 630 bytes
-rw-r--r--default_images/goodies/res/wall6.bmpbin0 -> 630 bytes
-rw-r--r--default_images/goodies/res/wall7.bmpbin0 -> 630 bytes
-rw-r--r--default_images/goodies/res/wall8.bmpbin0 -> 630 bytes
-rw-r--r--default_images/goodies/res/wall9.bmpbin0 -> 630 bytes
-rw-r--r--default_images/goodies/res/wlcome2.bmpbin0 -> 52918 bytes
-rw-r--r--default_images/introabout/about.bmpbin0 -> 118614 bytes
-rwxr-xr-xdefault_images/introabout/about.pngbin0 -> 11174 bytes
-rw-r--r--default_images/introabout/intro.bmpbin0 -> 378718 bytes
-rwxr-xr-xdefault_images/introabout/intro.pngbin0 -> 28663 bytes
-rw-r--r--default_images/minimizer/minimizepresi_80.pngbin0 -> 6716 bytes
-rw-r--r--default_images/minimizer/minimizepresi_80_h.pngbin0 -> 4233 bytes
-rw-r--r--default_images/minimizer/opt_16.pngbin0 -> 4033 bytes
-rw-r--r--default_images/minimizer/opt_16_h.pngbin0 -> 3683 bytes
-rw-r--r--default_images/minimizer/opt_26.pngbin0 -> 4401 bytes
-rw-r--r--default_images/minimizer/opt_26_h.pngbin0 -> 3845 bytes
-rw-r--r--default_images/oracleirm/res/irmprotecteditem.bmp0
-rw-r--r--default_images/padmin/source/butter.pngbin0 -> 1834 bytes
-rw-r--r--default_images/padmin/source/fax.pngbin0 -> 730 bytes
-rwxr-xr-xdefault_images/padmin/source/fax_16_h.pngbin0 -> 152 bytes
-rw-r--r--default_images/padmin/source/pdf.pngbin0 -> 610 bytes
-rw-r--r--default_images/padmin/source/print.pngbin0 -> 577 bytes
-rwxr-xr-xdefault_images/padmin/source/printer_16_h.pngbin0 -> 133 bytes
-rwxr-xr-xdefault_images/padmin/source/printer_40x48_h.pngbin0 -> 301 bytes
-rw-r--r--default_images/padmin/source/printer_large.pngbin0 -> 1429 bytes
-rwxr-xr-xdefault_images/padmin/source/printpdf_16_h.pngbin0 -> 150 bytes
-rw-r--r--default_images/reportdesign/res/report_16.pngbin0 -> 644 bytes
-rw-r--r--default_images/reportdesign/res/sc20557.pngbin0 -> 510 bytes
-rwxr-xr-xdefault_images/reportdesign/res/sc30768.pngbin0 -> 583 bytes
-rwxr-xr-xdefault_images/reportdesign/res/sc30769.pngbin0 -> 3927 bytes
-rwxr-xr-xdefault_images/reportdesign/res/sc30770.pngbin0 -> 510 bytes
-rwxr-xr-xdefault_images/reportdesign/res/sch30768.pngbin0 -> 348 bytes
-rwxr-xr-xdefault_images/reportdesign/res/sch30769.pngbin0 -> 3670 bytes
-rwxr-xr-xdefault_images/reportdesign/res/sch30770.pngbin0 -> 140 bytes
-rw-r--r--default_images/reportdesign/res/sortdown.pngbin0 -> 583 bytes
-rw-r--r--default_images/reportdesign/res/sortdown_h.pngbin0 -> 174 bytes
-rw-r--r--default_images/reportdesign/res/sortup.pngbin0 -> 574 bytes
-rw-r--r--default_images/reportdesign/res/sortup_h.pngbin0 -> 176 bytes
-rw-r--r--default_images/reportdesign/res/sx10454.pngbin0 -> 498 bytes
-rw-r--r--default_images/reportdesign/res/sx10928.pngbin0 -> 337 bytes
-rw-r--r--default_images/reportdesign/res/sx10929.pngbin0 -> 394 bytes
-rw-r--r--default_images/reportdesign/res/sx11047.pngbin0 -> 671 bytes
-rw-r--r--default_images/reportdesign/res/sx12452.pngbin0 -> 863 bytes
-rw-r--r--default_images/reportdesign/res/sx12453.pngbin0 -> 863 bytes
-rw-r--r--default_images/reportdesign/res/sx12454.pngbin0 -> 546 bytes
-rw-r--r--default_images/reportdesign/res/sx12464.pngbin0 -> 644 bytes
-rw-r--r--default_images/reportdesign/res/sx12466.pngbin0 -> 499 bytes
-rw-r--r--default_images/reportdesign/res/sx12468.pngbin0 -> 501 bytes
-rw-r--r--default_images/reportdesign/res/sx12477.pngbin0 -> 394 bytes
-rw-r--r--default_images/reportdesign/res/sx12594.pngbin0 -> 543 bytes
-rw-r--r--default_images/reportdesign/res/sx12602.pngbin0 -> 498 bytes
-rw-r--r--default_images/reportdesign/res/sx12603.pngbin0 -> 501 bytes
-rw-r--r--default_images/reportdesign/res/sxh10454.pngbin0 -> 259 bytes
-rw-r--r--default_images/reportdesign/res/sxh10928.pngbin0 -> 101 bytes
-rw-r--r--default_images/reportdesign/res/sxh10929.pngbin0 -> 101 bytes
-rw-r--r--default_images/reportdesign/res/sxh11047.pngbin0 -> 131 bytes
-rw-r--r--default_images/reportdesign/res/sxh12452.pngbin0 -> 863 bytes
-rw-r--r--default_images/reportdesign/res/sxh12453.pngbin0 -> 863 bytes
-rw-r--r--default_images/reportdesign/res/sxh12454.pngbin0 -> 260 bytes
-rw-r--r--default_images/reportdesign/res/sxh12464.pngbin0 -> 644 bytes
-rw-r--r--default_images/reportdesign/res/sxh12466.pngbin0 -> 264 bytes
-rw-r--r--default_images/reportdesign/res/sxh12468.pngbin0 -> 272 bytes
-rw-r--r--default_images/reportdesign/res/sxh12477.pngbin0 -> 101 bytes
-rw-r--r--default_images/reportdesign/res/sxh12594.pngbin0 -> 129 bytes
-rw-r--r--default_images/reportdesign/res/sxh12602.pngbin0 -> 259 bytes
-rw-r--r--default_images/reportdesign/res/sxh12603.pngbin0 -> 216 bytes
-rw-r--r--default_images/res/adrbook.pngbin0 -> 998 bytes
-rw-r--r--default_images/res/adrbook_hc.pngbin0 -> 128 bytes
-rw-r--r--default_images/res/arrow_move_down.pngbin0 -> 583 bytes
-rw-r--r--default_images/res/arrow_move_down_hc.pngbin0 -> 334 bytes
-rw-r--r--default_images/res/arrow_move_up.pngbin0 -> 574 bytes
-rw-r--r--default_images/res/arrow_move_up_hc.pngbin0 -> 176 bytes
-rw-r--r--default_images/res/arrowup_16.pngbin0 -> 583 bytes
-rw-r--r--default_images/res/ballgreen_7.pngbin0 -> 269 bytes
-rw-r--r--default_images/res/ballred_7.pngbin0 -> 241 bytes
-rw-r--r--default_images/res/basbrk.pngbin0 -> 608 bytes
-rw-r--r--default_images/res/basgocl.pngbin0 -> 203 bytes
-rw-r--r--default_images/res/basobj2.pngbin0 -> 195 bytes
-rw-r--r--default_images/res/baswatr.pngbin0 -> 780 bytes
-rw-r--r--default_images/res/baswatr_h.pngbin0 -> 181 bytes
-rw-r--r--default_images/res/browse.pngbin0 -> 816 bytes
-rw-r--r--default_images/res/browse_hc.pngbin0 -> 167 bytes
-rw-r--r--default_images/res/commandimagelist/ar/lc_bold.pngbin0 -> 473 bytes
-rw-r--r--default_images/res/commandimagelist/ar/lc_italic.pngbin0 -> 440 bytes
-rw-r--r--default_images/res/commandimagelist/ar/lc_underline.pngbin0 -> 424 bytes
-rw-r--r--default_images/res/commandimagelist/ar/lch_bold.pngbin0 -> 146 bytes
-rw-r--r--default_images/res/commandimagelist/ar/lch_italic.pngbin0 -> 425 bytes
-rw-r--r--default_images/res/commandimagelist/ar/lch_underline.pngbin0 -> 177 bytes
-rw-r--r--default_images/res/commandimagelist/ar/sc_bold.pngbin0 -> 328 bytes
-rw-r--r--default_images/res/commandimagelist/ar/sc_italic.pngbin0 -> 304 bytes
-rw-r--r--default_images/res/commandimagelist/ar/sc_underline.pngbin0 -> 341 bytes
-rw-r--r--default_images/res/commandimagelist/ar/sch_bold.pngbin0 -> 118 bytes
-rw-r--r--default_images/res/commandimagelist/ar/sch_italic.pngbin0 -> 289 bytes
-rw-r--r--default_images/res/commandimagelist/ar/sch_underline.pngbin0 -> 124 bytes
-rw-r--r--default_images/res/commandimagelist/bg/lc_backcolor.pngbin0 -> 735 bytes
-rw-r--r--default_images/res/commandimagelist/bg/lc_bold.pngbin0 -> 519 bytes
-rw-r--r--default_images/res/commandimagelist/bg/lc_dbqueryrename.pngbin0 -> 405 bytes
-rw-r--r--default_images/res/commandimagelist/bg/lc_dbtablerename.pngbin0 -> 405 bytes
-rw-r--r--default_images/res/commandimagelist/bg/lc_doubleclicktextedit.pngbin0 -> 452 bytes
-rw-r--r--default_images/res/commandimagelist/bg/lc_edit.pngbin0 -> 333 bytes
-rw-r--r--default_images/res/commandimagelist/bg/lc_editglossary.pngbin0 -> 557 bytes
-rw-r--r--default_images/res/commandimagelist/bg/lc_hyphenate.pngbin0 -> 343 bytes
-rw-r--r--default_images/res/commandimagelist/bg/lc_hyphenation.pngbin0 -> 343 bytes
-rw-r--r--default_images/res/commandimagelist/bg/lc_insertedit.pngbin0 -> 333 bytes
-rw-r--r--default_images/res/commandimagelist/bg/lc_italic.pngbin0 -> 545 bytes
-rw-r--r--default_images/res/commandimagelist/bg/lc_label.pngbin0 -> 272 bytes
-rw-r--r--default_images/res/commandimagelist/bg/lc_ordercrit.pngbin0 -> 564 bytes
-rw-r--r--default_images/res/commandimagelist/bg/lc_pickthrough.pngbin0 -> 409 bytes
-rw-r--r--default_images/res/commandimagelist/bg/lc_shadowed.pngbin0 -> 805 bytes
-rw-r--r--default_images/res/commandimagelist/bg/lc_sortascending.pngbin0 -> 719 bytes
-rw-r--r--default_images/res/commandimagelist/bg/lc_sortdescending.pngbin0 -> 695 bytes
-rw-r--r--default_images/res/commandimagelist/bg/lc_sortdown.pngbin0 -> 695 bytes
-rw-r--r--default_images/res/commandimagelist/bg/lc_sortup.pngbin0 -> 719 bytes
-rw-r--r--default_images/res/commandimagelist/bg/lc_spelldialog.pngbin0 -> 485 bytes
-rw-r--r--default_images/res/commandimagelist/bg/lc_spelling.pngbin0 -> 485 bytes
-rw-r--r--default_images/res/commandimagelist/bg/lc_spellonline.pngbin0 -> 314 bytes
-rw-r--r--default_images/res/commandimagelist/bg/lc_strikeout.pngbin0 -> 386 bytes
-rw-r--r--default_images/res/commandimagelist/bg/lc_tablesort.pngbin0 -> 564 bytes
-rw-r--r--default_images/res/commandimagelist/bg/lc_textdraft.pngbin0 -> 515 bytes
-rw-r--r--default_images/res/commandimagelist/bg/lc_thesaurus.pngbin0 -> 485 bytes
-rw-r--r--default_images/res/commandimagelist/bg/lc_thesaurusdialog.pngbin0 -> 485 bytes
-rw-r--r--default_images/res/commandimagelist/bg/lc_underline.pngbin0 -> 508 bytes
-rw-r--r--default_images/res/commandimagelist/bg/lc_underlinedouble.pngbin0 -> 509 bytes
-rw-r--r--default_images/res/commandimagelist/bg/lch_backcolor.pngbin0 -> 218 bytes
-rw-r--r--default_images/res/commandimagelist/bg/lch_bold.pngbin0 -> 446 bytes
-rw-r--r--default_images/res/commandimagelist/bg/lch_doubleclicktextedit.pngbin0 -> 184 bytes
-rw-r--r--default_images/res/commandimagelist/bg/lch_edit.pngbin0 -> 153 bytes
-rw-r--r--default_images/res/commandimagelist/bg/lch_editglossary.pngbin0 -> 220 bytes
-rw-r--r--default_images/res/commandimagelist/bg/lch_hyphenate.pngbin0 -> 153 bytes
-rw-r--r--default_images/res/commandimagelist/bg/lch_hyphenation.pngbin0 -> 153 bytes
-rw-r--r--default_images/res/commandimagelist/bg/lch_insertedit.pngbin0 -> 153 bytes
-rw-r--r--default_images/res/commandimagelist/bg/lch_insertfixedtext.pngbin0 -> 147 bytes
-rw-r--r--default_images/res/commandimagelist/bg/lch_italic.pngbin0 -> 498 bytes
-rw-r--r--default_images/res/commandimagelist/bg/lch_label.pngbin0 -> 147 bytes
-rw-r--r--default_images/res/commandimagelist/bg/lch_ordercrit.pngbin0 -> 454 bytes
-rw-r--r--default_images/res/commandimagelist/bg/lch_pickthrough.pngbin0 -> 145 bytes
-rw-r--r--default_images/res/commandimagelist/bg/lch_quickedit.pngbin0 -> 141 bytes
-rw-r--r--default_images/res/commandimagelist/bg/lch_sortascending.pngbin0 -> 490 bytes
-rw-r--r--default_images/res/commandimagelist/bg/lch_sortdescending.pngbin0 -> 488 bytes
-rw-r--r--default_images/res/commandimagelist/bg/lch_sortdown.pngbin0 -> 488 bytes
-rw-r--r--default_images/res/commandimagelist/bg/lch_sortup.pngbin0 -> 490 bytes
-rw-r--r--default_images/res/commandimagelist/bg/lch_spelldialog.pngbin0 -> 184 bytes
-rw-r--r--default_images/res/commandimagelist/bg/lch_spelling.pngbin0 -> 182 bytes
-rw-r--r--default_images/res/commandimagelist/bg/lch_spellonline.pngbin0 -> 152 bytes
-rw-r--r--default_images/res/commandimagelist/bg/lch_strikeout.pngbin0 -> 196 bytes
-rw-r--r--default_images/res/commandimagelist/bg/lch_tablesort.pngbin0 -> 454 bytes
-rw-r--r--default_images/res/commandimagelist/bg/lch_thesaurus.pngbin0 -> 168 bytes
-rw-r--r--default_images/res/commandimagelist/bg/lch_thesaurusdialog.pngbin0 -> 168 bytes
-rw-r--r--default_images/res/commandimagelist/bg/lch_toggleaxistitle.pngbin0 -> 145 bytes
-rw-r--r--default_images/res/commandimagelist/bg/lch_toggletitle.pngbin0 -> 154 bytes
-rw-r--r--default_images/res/commandimagelist/bg/lch_underline.pngbin0 -> 435 bytes
-rw-r--r--default_images/res/commandimagelist/bg/lch_underlinedouble.pngbin0 -> 436 bytes
-rw-r--r--default_images/res/commandimagelist/bg/sc_backcolor.pngbin0 -> 406 bytes
-rw-r--r--default_images/res/commandimagelist/bg/sc_bold.pngbin0 -> 372 bytes
-rw-r--r--default_images/res/commandimagelist/bg/sc_dbqueryrename.pngbin0 -> 287 bytes
-rw-r--r--default_images/res/commandimagelist/bg/sc_dbtablerename.pngbin0 -> 287 bytes
-rw-r--r--default_images/res/commandimagelist/bg/sc_doubleclicktextedit.pngbin0 -> 326 bytes
-rw-r--r--default_images/res/commandimagelist/bg/sc_edit.pngbin0 -> 264 bytes
-rw-r--r--default_images/res/commandimagelist/bg/sc_editglossary.pngbin0 -> 345 bytes
-rw-r--r--default_images/res/commandimagelist/bg/sc_hyphenate.pngbin0 -> 229 bytes
-rw-r--r--default_images/res/commandimagelist/bg/sc_hyphenation.pngbin0 -> 229 bytes
-rw-r--r--default_images/res/commandimagelist/bg/sc_insertedit.pngbin0 -> 264 bytes
-rw-r--r--default_images/res/commandimagelist/bg/sc_insertfixedtext.pngbin0 -> 202 bytes
-rw-r--r--default_images/res/commandimagelist/bg/sc_italic.pngbin0 -> 347 bytes
-rw-r--r--default_images/res/commandimagelist/bg/sc_label.pngbin0 -> 202 bytes
-rw-r--r--default_images/res/commandimagelist/bg/sc_ordercrit.pngbin0 -> 362 bytes
-rw-r--r--default_images/res/commandimagelist/bg/sc_quickedit.pngbin0 -> 263 bytes
-rw-r--r--default_images/res/commandimagelist/bg/sc_shadowed.pngbin0 -> 605 bytes
-rw-r--r--default_images/res/commandimagelist/bg/sc_sortascending.pngbin0 -> 446 bytes
-rw-r--r--default_images/res/commandimagelist/bg/sc_sortdescending.pngbin0 -> 440 bytes
-rw-r--r--default_images/res/commandimagelist/bg/sc_sortdown.pngbin0 -> 440 bytes
-rw-r--r--default_images/res/commandimagelist/bg/sc_sortup.pngbin0 -> 444 bytes
-rw-r--r--default_images/res/commandimagelist/bg/sc_spelldialog.pngbin0 -> 340 bytes
-rw-r--r--default_images/res/commandimagelist/bg/sc_spelling.pngbin0 -> 340 bytes
-rw-r--r--default_images/res/commandimagelist/bg/sc_spellonline.pngbin0 -> 229 bytes
-rw-r--r--default_images/res/commandimagelist/bg/sc_strikeout.pngbin0 -> 231 bytes
-rw-r--r--default_images/res/commandimagelist/bg/sc_tablesort.pngbin0 -> 362 bytes
-rw-r--r--default_images/res/commandimagelist/bg/sc_textdraft.pngbin0 -> 400 bytes
-rw-r--r--default_images/res/commandimagelist/bg/sc_thesaurus.pngbin0 -> 350 bytes
-rw-r--r--default_images/res/commandimagelist/bg/sc_thesaurusdialog.pngbin0 -> 350 bytes
-rw-r--r--default_images/res/commandimagelist/bg/sc_underline.pngbin0 -> 365 bytes
-rw-r--r--default_images/res/commandimagelist/bg/sc_underlinedouble.pngbin0 -> 388 bytes
-rw-r--r--default_images/res/commandimagelist/bg/sch_backcolor.pngbin0 -> 185 bytes
-rw-r--r--default_images/res/commandimagelist/bg/sch_bold.pngbin0 -> 297 bytes
-rw-r--r--default_images/res/commandimagelist/bg/sch_editglossary.pngbin0 -> 165 bytes
-rw-r--r--default_images/res/commandimagelist/bg/sch_hyphenate.pngbin0 -> 121 bytes
-rw-r--r--default_images/res/commandimagelist/bg/sch_hyphenation.pngbin0 -> 121 bytes
-rw-r--r--default_images/res/commandimagelist/bg/sch_insertedit.pngbin0 -> 116 bytes
-rw-r--r--default_images/res/commandimagelist/bg/sch_italic.pngbin0 -> 318 bytes
-rw-r--r--default_images/res/commandimagelist/bg/sch_label.pngbin0 -> 104 bytes
-rw-r--r--default_images/res/commandimagelist/bg/sch_ordercrit.pngbin0 -> 316 bytes
-rw-r--r--default_images/res/commandimagelist/bg/sch_pickthrough.pngbin0 -> 129 bytes
-rw-r--r--default_images/res/commandimagelist/bg/sch_sortascending.pngbin0 -> 337 bytes
-rw-r--r--default_images/res/commandimagelist/bg/sch_sortdescending.pngbin0 -> 345 bytes
-rw-r--r--default_images/res/commandimagelist/bg/sch_sortdown.pngbin0 -> 345 bytes
-rw-r--r--default_images/res/commandimagelist/bg/sch_sortup.pngbin0 -> 337 bytes
-rw-r--r--default_images/res/commandimagelist/bg/sch_spelldialog.pngbin0 -> 143 bytes
-rw-r--r--default_images/res/commandimagelist/bg/sch_spelling.pngbin0 -> 143 bytes
-rw-r--r--default_images/res/commandimagelist/bg/sch_spellonline.pngbin0 -> 122 bytes
-rw-r--r--default_images/res/commandimagelist/bg/sch_strikeout.pngbin0 -> 145 bytes
-rw-r--r--default_images/res/commandimagelist/bg/sch_tablesort.pngbin0 -> 316 bytes
-rw-r--r--default_images/res/commandimagelist/bg/sch_thesaurus.pngbin0 -> 137 bytes
-rw-r--r--default_images/res/commandimagelist/bg/sch_thesaurusdialog.pngbin0 -> 137 bytes
-rw-r--r--default_images/res/commandimagelist/bg/sch_underline.pngbin0 -> 319 bytes
-rw-r--r--default_images/res/commandimagelist/bg/sch_underlinedouble.pngbin0 -> 319 bytes
-rw-r--r--default_images/res/commandimagelist/ca/lc_bold.pngbin0 -> 396 bytes
-rw-r--r--default_images/res/commandimagelist/ca/lc_italic.pngbin0 -> 531 bytes
-rw-r--r--default_images/res/commandimagelist/ca/lc_underline.pngbin0 -> 521 bytes
-rw-r--r--default_images/res/commandimagelist/ca/lc_underlinedouble.pngbin0 -> 531 bytes
-rw-r--r--default_images/res/commandimagelist/ca/lch_bold.pngbin0 -> 130 bytes
-rw-r--r--default_images/res/commandimagelist/ca/lch_italic.pngbin0 -> 489 bytes
-rw-r--r--default_images/res/commandimagelist/ca/lch_underline.pngbin0 -> 145 bytes
-rw-r--r--default_images/res/commandimagelist/ca/lch_underlinedouble.pngbin0 -> 144 bytes
-rw-r--r--default_images/res/commandimagelist/ca/sc_bold.pngbin0 -> 296 bytes
-rw-r--r--default_images/res/commandimagelist/ca/sc_italic.pngbin0 -> 368 bytes
-rw-r--r--default_images/res/commandimagelist/ca/sc_underline.pngbin0 -> 386 bytes
-rw-r--r--default_images/res/commandimagelist/ca/sc_underlinedouble.pngbin0 -> 394 bytes
-rw-r--r--default_images/res/commandimagelist/ca/sch_bold.pngbin0 -> 105 bytes
-rw-r--r--default_images/res/commandimagelist/ca/sch_italic.pngbin0 -> 339 bytes
-rw-r--r--default_images/res/commandimagelist/ca/sch_underline.pngbin0 -> 118 bytes
-rw-r--r--default_images/res/commandimagelist/ca/sch_underlinedouble.pngbin0 -> 120 bytes
-rw-r--r--default_images/res/commandimagelist/cs/lc_bold.pngbin0 -> 473 bytes
-rw-r--r--default_images/res/commandimagelist/cs/lc_italic.pngbin0 -> 440 bytes
-rw-r--r--default_images/res/commandimagelist/cs/lc_numberformatdecimal.pngbin0 -> 671 bytes
-rw-r--r--default_images/res/commandimagelist/cs/lc_underline.pngbin0 -> 424 bytes
-rw-r--r--default_images/res/commandimagelist/cs/lc_underlinedouble.pngbin0 -> 424 bytes
-rw-r--r--default_images/res/commandimagelist/cs/lch_bold.pngbin0 -> 146 bytes
-rw-r--r--default_images/res/commandimagelist/cs/lch_italic.pngbin0 -> 425 bytes
-rw-r--r--default_images/res/commandimagelist/cs/lch_numberformatdecimal.pngbin0 -> 145 bytes
-rw-r--r--default_images/res/commandimagelist/cs/lch_underline.pngbin0 -> 177 bytes
-rw-r--r--default_images/res/commandimagelist/cs/lch_underlinedouble.pngbin0 -> 178 bytes
-rw-r--r--default_images/res/commandimagelist/cs/sc_bold.pngbin0 -> 328 bytes
-rw-r--r--default_images/res/commandimagelist/cs/sc_italic.pngbin0 -> 304 bytes
-rw-r--r--default_images/res/commandimagelist/cs/sc_numberformatdecimal.pngbin0 -> 485 bytes
-rw-r--r--default_images/res/commandimagelist/cs/sc_underline.pngbin0 -> 341 bytes
-rw-r--r--default_images/res/commandimagelist/cs/sc_underlinedouble.pngbin0 -> 361 bytes
-rw-r--r--default_images/res/commandimagelist/cs/sch_bold.pngbin0 -> 118 bytes
-rw-r--r--default_images/res/commandimagelist/cs/sch_italic.pngbin0 -> 289 bytes
-rw-r--r--default_images/res/commandimagelist/cs/sch_numberformatdecimal.pngbin0 -> 119 bytes
-rw-r--r--default_images/res/commandimagelist/cs/sch_underline.pngbin0 -> 124 bytes
-rw-r--r--default_images/res/commandimagelist/cs/sch_underlinedouble.pngbin0 -> 123 bytes
-rw-r--r--default_images/res/commandimagelist/de/lc_bold.pngbin0 -> 452 bytes
-rw-r--r--default_images/res/commandimagelist/de/lc_italic.pngbin0 -> 846 bytes
-rw-r--r--default_images/res/commandimagelist/de/lc_numberformatdecimal.pngbin0 -> 703 bytes
-rw-r--r--default_images/res/commandimagelist/de/lc_underline.pngbin0 -> 570 bytes
-rw-r--r--default_images/res/commandimagelist/de/lc_underlinedouble.pngbin0 -> 560 bytes
-rw-r--r--default_images/res/commandimagelist/de/lch_bold.pngbin0 -> 321 bytes
-rw-r--r--default_images/res/commandimagelist/de/lch_italic.pngbin0 -> 190 bytes
-rw-r--r--default_images/res/commandimagelist/de/lch_numberformatdecimal.pngbin0 -> 151 bytes
-rw-r--r--default_images/res/commandimagelist/de/lch_underline.pngbin0 -> 177 bytes
-rw-r--r--default_images/res/commandimagelist/de/lch_underlinedouble.pngbin0 -> 178 bytes
-rw-r--r--default_images/res/commandimagelist/de/sc_bold.pngbin0 -> 354 bytes
-rw-r--r--default_images/res/commandimagelist/de/sc_italic.pngbin0 -> 573 bytes
-rw-r--r--default_images/res/commandimagelist/de/sc_numberformatdecimal.pngbin0 -> 488 bytes
-rw-r--r--default_images/res/commandimagelist/de/sc_underline.pngbin0 -> 408 bytes
-rw-r--r--default_images/res/commandimagelist/de/sc_underlinedouble.pngbin0 -> 425 bytes
-rw-r--r--default_images/res/commandimagelist/de/sch_bold.pngbin0 -> 262 bytes
-rw-r--r--default_images/res/commandimagelist/de/sch_italic.pngbin0 -> 144 bytes
-rw-r--r--default_images/res/commandimagelist/de/sch_numberformatdecimal.pngbin0 -> 126 bytes
-rw-r--r--default_images/res/commandimagelist/de/sch_underline.pngbin0 -> 124 bytes
-rw-r--r--default_images/res/commandimagelist/de/sch_underlinedouble.pngbin0 -> 123 bytes
-rw-r--r--default_images/res/commandimagelist/en-GB/lc_bold.pngbin0 -> 650 bytes
-rw-r--r--default_images/res/commandimagelist/en-GB/lc_italic.pngbin0 -> 570 bytes
-rw-r--r--default_images/res/commandimagelist/en-GB/lc_numberformatdecimal.pngbin0 -> 671 bytes
-rw-r--r--default_images/res/commandimagelist/en-GB/lc_underline.pngbin0 -> 570 bytes
-rw-r--r--default_images/res/commandimagelist/en-GB/lc_underlinedouble.pngbin0 -> 560 bytes
-rw-r--r--default_images/res/commandimagelist/en-GB/lch_bold.pngbin0 -> 146 bytes
-rw-r--r--default_images/res/commandimagelist/en-GB/lch_italic.pngbin0 -> 152 bytes
-rw-r--r--default_images/res/commandimagelist/en-GB/lch_numberformatdecimal.pngbin0 -> 145 bytes
-rw-r--r--default_images/res/commandimagelist/en-GB/lch_underline.pngbin0 -> 177 bytes
-rw-r--r--default_images/res/commandimagelist/en-GB/lch_underlinedouble.pngbin0 -> 178 bytes
-rw-r--r--default_images/res/commandimagelist/en-GB/sc_bold.pngbin0 -> 473 bytes
-rw-r--r--default_images/res/commandimagelist/en-GB/sc_italic.pngbin0 -> 412 bytes
-rw-r--r--default_images/res/commandimagelist/en-GB/sc_numberformatdecimal.pngbin0 -> 485 bytes
-rw-r--r--default_images/res/commandimagelist/en-GB/sc_underline.pngbin0 -> 408 bytes
-rw-r--r--default_images/res/commandimagelist/en-GB/sc_underlinedouble.pngbin0 -> 425 bytes
-rw-r--r--default_images/res/commandimagelist/en-GB/sch_bold.pngbin0 -> 118 bytes
-rw-r--r--default_images/res/commandimagelist/en-GB/sch_italic.pngbin0 -> 128 bytes
-rw-r--r--default_images/res/commandimagelist/en-GB/sch_numberformatdecimal.pngbin0 -> 119 bytes
-rw-r--r--default_images/res/commandimagelist/en-GB/sch_underline.pngbin0 -> 124 bytes
-rw-r--r--default_images/res/commandimagelist/en-GB/sch_underlinedouble.pngbin0 -> 123 bytes
-rw-r--r--default_images/res/commandimagelist/es/lc_bold.pngbin0 -> 396 bytes
-rw-r--r--default_images/res/commandimagelist/es/lc_italic.pngbin0 -> 531 bytes
-rw-r--r--default_images/res/commandimagelist/es/lc_numberformatdecimal.pngbin0 -> 703 bytes
-rw-r--r--default_images/res/commandimagelist/es/lc_underline.pngbin0 -> 521 bytes
-rw-r--r--default_images/res/commandimagelist/es/lc_underlinedouble.pngbin0 -> 531 bytes
-rw-r--r--default_images/res/commandimagelist/es/lch_bold.pngbin0 -> 130 bytes
-rw-r--r--default_images/res/commandimagelist/es/lch_italic.pngbin0 -> 489 bytes
-rw-r--r--default_images/res/commandimagelist/es/lch_numberformatdecimal.pngbin0 -> 151 bytes
-rw-r--r--default_images/res/commandimagelist/es/lch_underline.pngbin0 -> 145 bytes
-rw-r--r--default_images/res/commandimagelist/es/lch_underlinedouble.pngbin0 -> 144 bytes
-rw-r--r--default_images/res/commandimagelist/es/sc_bold.pngbin0 -> 296 bytes
-rw-r--r--default_images/res/commandimagelist/es/sc_italic.pngbin0 -> 368 bytes
-rw-r--r--default_images/res/commandimagelist/es/sc_numberformatdecimal.pngbin0 -> 488 bytes
-rw-r--r--default_images/res/commandimagelist/es/sc_underline.pngbin0 -> 386 bytes
-rw-r--r--default_images/res/commandimagelist/es/sc_underlinedouble.pngbin0 -> 394 bytes
-rw-r--r--default_images/res/commandimagelist/es/sch_bold.pngbin0 -> 105 bytes
-rw-r--r--default_images/res/commandimagelist/es/sch_italic.pngbin0 -> 339 bytes
-rw-r--r--default_images/res/commandimagelist/es/sch_numberformatdecimal.pngbin0 -> 126 bytes
-rw-r--r--default_images/res/commandimagelist/es/sch_underline.pngbin0 -> 118 bytes
-rw-r--r--default_images/res/commandimagelist/es/sch_underlinedouble.pngbin0 -> 120 bytes
-rw-r--r--default_images/res/commandimagelist/et/lc_bold.pngbin0 -> 473 bytes
-rw-r--r--default_images/res/commandimagelist/et/lc_italic.pngbin0 -> 440 bytes
-rw-r--r--default_images/res/commandimagelist/et/lc_numberformatdecimal.pngbin0 -> 671 bytes
-rw-r--r--default_images/res/commandimagelist/et/lc_underline.pngbin0 -> 424 bytes
-rw-r--r--default_images/res/commandimagelist/et/lc_underlinedouble.pngbin0 -> 424 bytes
-rw-r--r--default_images/res/commandimagelist/et/lch_bold.pngbin0 -> 146 bytes
-rw-r--r--default_images/res/commandimagelist/et/lch_italic.pngbin0 -> 425 bytes
-rw-r--r--default_images/res/commandimagelist/et/lch_numberformatdecimal.pngbin0 -> 145 bytes
-rw-r--r--default_images/res/commandimagelist/et/lch_underline.pngbin0 -> 177 bytes
-rw-r--r--default_images/res/commandimagelist/et/lch_underlinedouble.pngbin0 -> 178 bytes
-rw-r--r--default_images/res/commandimagelist/et/sc_bold.pngbin0 -> 328 bytes
-rw-r--r--default_images/res/commandimagelist/et/sc_italic.pngbin0 -> 304 bytes
-rw-r--r--default_images/res/commandimagelist/et/sc_numberformatdecimal.pngbin0 -> 485 bytes
-rw-r--r--default_images/res/commandimagelist/et/sc_underline.pngbin0 -> 339 bytes
-rw-r--r--default_images/res/commandimagelist/et/sc_underlinedouble.pngbin0 -> 361 bytes
-rw-r--r--default_images/res/commandimagelist/et/sch_bold.pngbin0 -> 118 bytes
-rw-r--r--default_images/res/commandimagelist/et/sch_italic.pngbin0 -> 289 bytes
-rw-r--r--default_images/res/commandimagelist/et/sch_numberformatdecimal.pngbin0 -> 119 bytes
-rw-r--r--default_images/res/commandimagelist/et/sch_underline.pngbin0 -> 124 bytes
-rw-r--r--default_images/res/commandimagelist/et/sch_underlinedouble.pngbin0 -> 123 bytes
-rw-r--r--default_images/res/commandimagelist/fr/lc_bold.pngbin0 -> 516 bytes
-rw-r--r--default_images/res/commandimagelist/fr/lc_italic.pngbin0 -> 440 bytes
-rw-r--r--default_images/res/commandimagelist/fr/lc_underline.pngbin0 -> 521 bytes
-rw-r--r--default_images/res/commandimagelist/fr/lc_underlinedouble.pngbin0 -> 531 bytes
-rw-r--r--default_images/res/commandimagelist/fr/lch_bold.pngbin0 -> 129 bytes
-rw-r--r--default_images/res/commandimagelist/fr/lch_italic.pngbin0 -> 425 bytes
-rw-r--r--default_images/res/commandimagelist/fr/lch_underline.pngbin0 -> 145 bytes
-rw-r--r--default_images/res/commandimagelist/fr/lch_underlinedouble.pngbin0 -> 144 bytes
-rw-r--r--default_images/res/commandimagelist/fr/sc_bold.pngbin0 -> 366 bytes
-rw-r--r--default_images/res/commandimagelist/fr/sc_italic.pngbin0 -> 304 bytes
-rw-r--r--default_images/res/commandimagelist/fr/sc_underline.pngbin0 -> 386 bytes
-rw-r--r--default_images/res/commandimagelist/fr/sc_underlinedouble.pngbin0 -> 394 bytes
-rw-r--r--default_images/res/commandimagelist/fr/sch_bold.pngbin0 -> 121 bytes
-rw-r--r--default_images/res/commandimagelist/fr/sch_italic.pngbin0 -> 289 bytes
-rw-r--r--default_images/res/commandimagelist/fr/sch_underline.pngbin0 -> 118 bytes
-rw-r--r--default_images/res/commandimagelist/fr/sch_underlinedouble.pngbin0 -> 120 bytes
-rw-r--r--default_images/res/commandimagelist/hu/lc_bold.pngbin0 -> 340 bytes
-rw-r--r--default_images/res/commandimagelist/hu/lc_italic.pngbin0 -> 549 bytes
-rw-r--r--default_images/res/commandimagelist/hu/lc_underline.pngbin0 -> 528 bytes
-rw-r--r--default_images/res/commandimagelist/hu/lc_underlinedouble.pngbin0 -> 652 bytes
-rw-r--r--default_images/res/commandimagelist/hu/lch_bold.pngbin0 -> 285 bytes
-rw-r--r--default_images/res/commandimagelist/hu/lch_italic.pngbin0 -> 182 bytes
-rw-r--r--default_images/res/commandimagelist/hu/lch_underline.pngbin0 -> 186 bytes
-rw-r--r--default_images/res/commandimagelist/hu/lch_underlinedouble.pngbin0 -> 184 bytes
-rw-r--r--default_images/res/commandimagelist/hu/sc_bold.pngbin0 -> 258 bytes
-rw-r--r--default_images/res/commandimagelist/hu/sc_italic.pngbin0 -> 373 bytes
-rw-r--r--default_images/res/commandimagelist/hu/sc_underline.pngbin0 -> 353 bytes
-rw-r--r--default_images/res/commandimagelist/hu/sc_underlinedouble.pngbin0 -> 472 bytes
-rw-r--r--default_images/res/commandimagelist/hu/sch_bold.pngbin0 -> 226 bytes
-rw-r--r--default_images/res/commandimagelist/hu/sch_italic.pngbin0 -> 141 bytes
-rw-r--r--default_images/res/commandimagelist/hu/sch_underline.pngbin0 -> 140 bytes
-rw-r--r--default_images/res/commandimagelist/hu/sch_underlinedouble.pngbin0 -> 140 bytes
-rw-r--r--default_images/res/commandimagelist/it/lc_bold.pngbin0 -> 516 bytes
-rw-r--r--default_images/res/commandimagelist/it/lc_italic.pngbin0 -> 531 bytes
-rw-r--r--default_images/res/commandimagelist/it/lc_underline.pngbin0 -> 521 bytes
-rw-r--r--default_images/res/commandimagelist/it/lc_underlinedouble.pngbin0 -> 531 bytes
-rw-r--r--default_images/res/commandimagelist/it/lch_bold.pngbin0 -> 129 bytes
-rw-r--r--default_images/res/commandimagelist/it/lch_italic.pngbin0 -> 489 bytes
-rw-r--r--default_images/res/commandimagelist/it/lch_underline.pngbin0 -> 145 bytes
-rw-r--r--default_images/res/commandimagelist/it/lch_underlinedouble.pngbin0 -> 144 bytes
-rw-r--r--default_images/res/commandimagelist/it/sc_bold.pngbin0 -> 366 bytes
-rw-r--r--default_images/res/commandimagelist/it/sc_italic.pngbin0 -> 368 bytes
-rw-r--r--default_images/res/commandimagelist/it/sc_underline.pngbin0 -> 386 bytes
-rw-r--r--default_images/res/commandimagelist/it/sc_underlinedouble.pngbin0 -> 394 bytes
-rw-r--r--default_images/res/commandimagelist/it/sch_bold.pngbin0 -> 121 bytes
-rw-r--r--default_images/res/commandimagelist/it/sch_italic.pngbin0 -> 339 bytes
-rw-r--r--default_images/res/commandimagelist/it/sch_underline.pngbin0 -> 118 bytes
-rw-r--r--default_images/res/commandimagelist/it/sch_underlinedouble.pngbin0 -> 120 bytes
-rw-r--r--default_images/res/commandimagelist/ja/lc_bold.pngbin0 -> 473 bytes
-rw-r--r--default_images/res/commandimagelist/ja/lc_italic.pngbin0 -> 440 bytes
-rw-r--r--default_images/res/commandimagelist/ja/lc_underline.pngbin0 -> 424 bytes
-rw-r--r--default_images/res/commandimagelist/ja/lc_underlinedouble.pngbin0 -> 424 bytes
-rw-r--r--default_images/res/commandimagelist/ja/lch_bold.pngbin0 -> 146 bytes
-rw-r--r--default_images/res/commandimagelist/ja/lch_italic.pngbin0 -> 425 bytes
-rw-r--r--default_images/res/commandimagelist/ja/lch_underline.pngbin0 -> 177 bytes
-rw-r--r--default_images/res/commandimagelist/ja/lch_underlinedouble.pngbin0 -> 178 bytes
-rw-r--r--default_images/res/commandimagelist/ja/sc_bold.pngbin0 -> 328 bytes
-rw-r--r--default_images/res/commandimagelist/ja/sc_italic.pngbin0 -> 304 bytes
-rw-r--r--default_images/res/commandimagelist/ja/sc_underline.pngbin0 -> 341 bytes
-rw-r--r--default_images/res/commandimagelist/ja/sc_underlinedouble.pngbin0 -> 361 bytes
-rw-r--r--default_images/res/commandimagelist/ja/sch_bold.pngbin0 -> 118 bytes
-rw-r--r--default_images/res/commandimagelist/ja/sch_italic.pngbin0 -> 289 bytes
-rw-r--r--default_images/res/commandimagelist/ja/sch_underline.pngbin0 -> 124 bytes
-rw-r--r--default_images/res/commandimagelist/ja/sch_underlinedouble.pngbin0 -> 123 bytes
-rw-r--r--default_images/res/commandimagelist/km/lc_bold.pngbin0 -> 368 bytes
-rw-r--r--default_images/res/commandimagelist/km/lc_italic.pngbin0 -> 608 bytes
-rw-r--r--default_images/res/commandimagelist/km/lc_numberformatdecimal.pngbin0 -> 671 bytes
-rw-r--r--default_images/res/commandimagelist/km/lc_underline.pngbin0 -> 573 bytes
-rw-r--r--default_images/res/commandimagelist/km/lc_underlinedouble.pngbin0 -> 573 bytes
-rw-r--r--default_images/res/commandimagelist/km/lch_bold.pngbin0 -> 152 bytes
-rw-r--r--default_images/res/commandimagelist/km/lch_italic.pngbin0 -> 556 bytes
-rw-r--r--default_images/res/commandimagelist/km/lch_numberformatdecimal.pngbin0 -> 145 bytes
-rw-r--r--default_images/res/commandimagelist/km/lch_underline.pngbin0 -> 149 bytes
-rw-r--r--default_images/res/commandimagelist/km/lch_underlinedouble.pngbin0 -> 147 bytes
-rw-r--r--default_images/res/commandimagelist/km/sc_bold.pngbin0 -> 366 bytes
-rw-r--r--default_images/res/commandimagelist/km/sc_italic.pngbin0 -> 495 bytes
-rw-r--r--default_images/res/commandimagelist/km/sc_numberformatdecimal.pngbin0 -> 485 bytes
-rw-r--r--default_images/res/commandimagelist/km/sc_underline.pngbin0 -> 497 bytes
-rw-r--r--default_images/res/commandimagelist/km/sc_underlinedouble.pngbin0 -> 501 bytes
-rw-r--r--default_images/res/commandimagelist/km/sch_bold.pngbin0 -> 127 bytes
-rw-r--r--default_images/res/commandimagelist/km/sch_italic.pngbin0 -> 483 bytes
-rw-r--r--default_images/res/commandimagelist/km/sch_numberformatdecimal.pngbin0 -> 119 bytes
-rw-r--r--default_images/res/commandimagelist/km/sch_underline.pngbin0 -> 132 bytes
-rw-r--r--default_images/res/commandimagelist/km/sch_underlinedouble.pngbin0 -> 132 bytes
-rw-r--r--default_images/res/commandimagelist/ko/lc_bold.pngbin0 -> 338 bytes
-rw-r--r--default_images/res/commandimagelist/ko/lc_charfontname.pngbin0 -> 341 bytes
-rw-r--r--default_images/res/commandimagelist/ko/lc_color.pngbin0 -> 349 bytes
-rw-r--r--default_images/res/commandimagelist/ko/lc_drawtext.pngbin0 -> 318 bytes
-rw-r--r--default_images/res/commandimagelist/ko/lc_fontcolor.pngbin0 -> 349 bytes
-rw-r--r--default_images/res/commandimagelist/ko/lc_fontheight.pngbin0 -> 434 bytes
-rw-r--r--default_images/res/commandimagelist/ko/lc_italic.pngbin0 -> 351 bytes
-rw-r--r--default_images/res/commandimagelist/ko/lc_ordercrit.pngbin0 -> 315 bytes
-rw-r--r--default_images/res/commandimagelist/ko/lc_outlinefont.pngbin0 -> 403 bytes
-rw-r--r--default_images/res/commandimagelist/ko/lc_shadowed.pngbin0 -> 438 bytes
-rw-r--r--default_images/res/commandimagelist/ko/lc_sortdown.pngbin0 -> 355 bytes
-rw-r--r--default_images/res/commandimagelist/ko/lc_sortup.pngbin0 -> 368 bytes
-rw-r--r--default_images/res/commandimagelist/ko/lc_strikeout.pngbin0 -> 341 bytes
-rw-r--r--default_images/res/commandimagelist/ko/lc_tablesort.pngbin0 -> 315 bytes
-rw-r--r--default_images/res/commandimagelist/ko/lc_text.pngbin0 -> 318 bytes
-rw-r--r--default_images/res/commandimagelist/ko/lc_text_marquee.pngbin0 -> 413 bytes
-rw-r--r--default_images/res/commandimagelist/ko/lc_textdirectionlefttoright.pngbin0 -> 362 bytes
-rw-r--r--default_images/res/commandimagelist/ko/lc_textdirectiontoptobottom.pngbin0 -> 346 bytes
-rw-r--r--default_images/res/commandimagelist/ko/lc_texttoolbox.pngbin0 -> 318 bytes
-rw-r--r--default_images/res/commandimagelist/ko/lc_underline.pngbin0 -> 357 bytes
-rw-r--r--default_images/res/commandimagelist/ko/lc_underlinedouble.pngbin0 -> 362 bytes
-rw-r--r--default_images/res/commandimagelist/ko/lc_verticaltext.pngbin0 -> 312 bytes
-rw-r--r--default_images/res/commandimagelist/ko/lch_bold.pngbin0 -> 138 bytes
-rw-r--r--default_images/res/commandimagelist/ko/lch_charfontname.pngbin0 -> 134 bytes
-rw-r--r--default_images/res/commandimagelist/ko/lch_color.pngbin0 -> 160 bytes
-rw-r--r--default_images/res/commandimagelist/ko/lch_drawtext.pngbin0 -> 123 bytes
-rw-r--r--default_images/res/commandimagelist/ko/lch_fontcolor.pngbin0 -> 160 bytes
-rw-r--r--default_images/res/commandimagelist/ko/lch_fontheight.pngbin0 -> 216 bytes
-rw-r--r--default_images/res/commandimagelist/ko/lch_italic.pngbin0 -> 127 bytes
-rw-r--r--default_images/res/commandimagelist/ko/lch_ordercrit.pngbin0 -> 124 bytes
-rw-r--r--default_images/res/commandimagelist/ko/lch_outlinefont.pngbin0 -> 153 bytes
-rw-r--r--default_images/res/commandimagelist/ko/lch_shadowed.pngbin0 -> 162 bytes
-rw-r--r--default_images/res/commandimagelist/ko/lch_sortdown.pngbin0 -> 147 bytes
-rw-r--r--default_images/res/commandimagelist/ko/lch_sortup.pngbin0 -> 153 bytes
-rw-r--r--default_images/res/commandimagelist/ko/lch_strikeout.pngbin0 -> 154 bytes
-rw-r--r--default_images/res/commandimagelist/ko/lch_tablesort.pngbin0 -> 116 bytes
-rw-r--r--default_images/res/commandimagelist/ko/lch_text.pngbin0 -> 123 bytes
-rw-r--r--default_images/res/commandimagelist/ko/lch_text_marquee.pngbin0 -> 168 bytes
-rw-r--r--default_images/res/commandimagelist/ko/lch_textdirectionlefttoright.pngbin0 -> 156 bytes
-rw-r--r--default_images/res/commandimagelist/ko/lch_textdirectiontoptobottom.pngbin0 -> 150 bytes
-rw-r--r--default_images/res/commandimagelist/ko/lch_texttoolbox.pngbin0 -> 123 bytes
-rw-r--r--default_images/res/commandimagelist/ko/lch_underline.pngbin0 -> 145 bytes
-rw-r--r--default_images/res/commandimagelist/ko/lch_underlinedouble.pngbin0 -> 136 bytes
-rw-r--r--default_images/res/commandimagelist/ko/lch_verticaltext.pngbin0 -> 119 bytes
-rw-r--r--default_images/res/commandimagelist/ko/sc_bold.pngbin0 -> 269 bytes
-rw-r--r--default_images/res/commandimagelist/ko/sc_charfontname.pngbin0 -> 257 bytes
-rw-r--r--default_images/res/commandimagelist/ko/sc_color.pngbin0 -> 271 bytes
-rw-r--r--default_images/res/commandimagelist/ko/sc_drawtext.pngbin0 -> 258 bytes
-rw-r--r--default_images/res/commandimagelist/ko/sc_fontcolor.pngbin0 -> 271 bytes
-rw-r--r--default_images/res/commandimagelist/ko/sc_fontheight.pngbin0 -> 301 bytes
-rw-r--r--default_images/res/commandimagelist/ko/sc_italic.pngbin0 -> 252 bytes
-rw-r--r--default_images/res/commandimagelist/ko/sc_ordercrit.pngbin0 -> 244 bytes
-rw-r--r--default_images/res/commandimagelist/ko/sc_outlinefont.pngbin0 -> 299 bytes
-rw-r--r--default_images/res/commandimagelist/ko/sc_shadowed.pngbin0 -> 308 bytes
-rw-r--r--default_images/res/commandimagelist/ko/sc_sortdown.pngbin0 -> 307 bytes
-rw-r--r--default_images/res/commandimagelist/ko/sc_sortup.pngbin0 -> 281 bytes
-rw-r--r--default_images/res/commandimagelist/ko/sc_strikeout.pngbin0 -> 263 bytes
-rw-r--r--default_images/res/commandimagelist/ko/sc_tablesort.pngbin0 -> 244 bytes
-rw-r--r--default_images/res/commandimagelist/ko/sc_text.pngbin0 -> 258 bytes
-rw-r--r--default_images/res/commandimagelist/ko/sc_text_marquee.pngbin0 -> 267 bytes
-rw-r--r--default_images/res/commandimagelist/ko/sc_textdirectionlefttoright.pngbin0 -> 283 bytes
-rw-r--r--default_images/res/commandimagelist/ko/sc_textdirectiontoptobottom.pngbin0 -> 272 bytes
-rw-r--r--default_images/res/commandimagelist/ko/sc_texttoolbox.pngbin0 -> 258 bytes
-rw-r--r--default_images/res/commandimagelist/ko/sc_underline.pngbin0 -> 285 bytes
-rw-r--r--default_images/res/commandimagelist/ko/sc_underlinedouble.pngbin0 -> 281 bytes
-rw-r--r--default_images/res/commandimagelist/ko/sc_verticaltext.pngbin0 -> 243 bytes
-rw-r--r--default_images/res/commandimagelist/ko/sch_bold.pngbin0 -> 113 bytes
-rw-r--r--default_images/res/commandimagelist/ko/sch_charfontname.pngbin0 -> 105 bytes
-rw-r--r--default_images/res/commandimagelist/ko/sch_color.pngbin0 -> 121 bytes
-rw-r--r--default_images/res/commandimagelist/ko/sch_drawtext.pngbin0 -> 105 bytes
-rw-r--r--default_images/res/commandimagelist/ko/sch_fontcolor.pngbin0 -> 121 bytes
-rw-r--r--default_images/res/commandimagelist/ko/sch_fontheight.pngbin0 -> 137 bytes
-rw-r--r--default_images/res/commandimagelist/ko/sch_italic.pngbin0 -> 118 bytes
-rw-r--r--default_images/res/commandimagelist/ko/sch_ordercrit.pngbin0 -> 243 bytes
-rw-r--r--default_images/res/commandimagelist/ko/sch_outlinefont.pngbin0 -> 128 bytes
-rw-r--r--default_images/res/commandimagelist/ko/sch_shadowed.pngbin0 -> 136 bytes
-rw-r--r--default_images/res/commandimagelist/ko/sch_sortdown.pngbin0 -> 124 bytes
-rw-r--r--default_images/res/commandimagelist/ko/sch_sortup.pngbin0 -> 118 bytes
-rw-r--r--default_images/res/commandimagelist/ko/sch_strikeout.pngbin0 -> 135 bytes
-rw-r--r--default_images/res/commandimagelist/ko/sch_tablesort.pngbin0 -> 243 bytes
-rw-r--r--default_images/res/commandimagelist/ko/sch_text.pngbin0 -> 105 bytes
-rw-r--r--default_images/res/commandimagelist/ko/sch_text_marquee.pngbin0 -> 126 bytes
-rw-r--r--default_images/res/commandimagelist/ko/sch_textdirectionlefttoright.pngbin0 -> 129 bytes
-rw-r--r--default_images/res/commandimagelist/ko/sch_textdirectiontoptobottom.pngbin0 -> 128 bytes
-rw-r--r--default_images/res/commandimagelist/ko/sch_texttoolbox.pngbin0 -> 105 bytes
-rw-r--r--default_images/res/commandimagelist/ko/sch_underline.pngbin0 -> 117 bytes
-rw-r--r--default_images/res/commandimagelist/ko/sch_underlinedouble.pngbin0 -> 118 bytes
-rw-r--r--default_images/res/commandimagelist/ko/sch_verticaltext.pngbin0 -> 107 bytes
-rw-r--r--default_images/res/commandimagelist/lc_absoluterecord.pngbin0 -> 1509 bytes
-rw-r--r--default_images/res/commandimagelist/lc_actionmode.pngbin0 -> 1322 bytes
-rw-r--r--default_images/res/commandimagelist/lc_addbookmark.pngbin0 -> 276 bytes
-rw-r--r--default_images/res/commandimagelist/lc_adddatefield.pngbin0 -> 818 bytes
-rw-r--r--default_images/res/commandimagelist/lc_adddirect.pngbin0 -> 666 bytes
-rw-r--r--default_images/res/commandimagelist/lc_addfield.pngbin0 -> 727 bytes
-rw-r--r--default_images/res/commandimagelist/lc_addons.pngbin0 -> 897 bytes
-rw-r--r--default_images/res/commandimagelist/lc_addprintarea.pngbin0 -> 796 bytes
-rw-r--r--default_images/res/commandimagelist/lc_addtable.pngbin0 -> 740 bytes
-rw-r--r--default_images/res/commandimagelist/lc_addwatch.pngbin0 -> 879 bytes
-rw-r--r--default_images/res/commandimagelist/lc_adjust.pngbin0 -> 1348 bytes
-rw-r--r--default_images/res/commandimagelist/lc_advancedmode.pngbin0 -> 1572 bytes
-rw-r--r--default_images/res/commandimagelist/lc_alignblock.pngbin0 -> 479 bytes
-rw-r--r--default_images/res/commandimagelist/lc_alignbottom.pngbin0 -> 851 bytes
-rw-r--r--default_images/res/commandimagelist/lc_aligncenter.pngbin0 -> 985 bytes
-rw-r--r--default_images/res/commandimagelist/lc_aligndown.pngbin0 -> 725 bytes
-rw-r--r--default_images/res/commandimagelist/lc_alignhorizontalcenter.pngbin0 -> 493 bytes
-rw-r--r--default_images/res/commandimagelist/lc_alignleft.pngbin0 -> 487 bytes
-rw-r--r--default_images/res/commandimagelist/lc_alignmiddle.pngbin0 -> 955 bytes
-rw-r--r--default_images/res/commandimagelist/lc_alignright.pngbin0 -> 486 bytes
-rw-r--r--default_images/res/commandimagelist/lc_aligntop.pngbin0 -> 861 bytes
-rw-r--r--default_images/res/commandimagelist/lc_alignup.pngbin0 -> 717 bytes
-rw-r--r--default_images/res/commandimagelist/lc_alignvcenter.pngbin0 -> 973 bytes
-rw-r--r--default_images/res/commandimagelist/lc_alignverticalcenter.pngbin0 -> 973 bytes
-rw-r--r--default_images/res/commandimagelist/lc_animationeffects.pngbin0 -> 1029 bytes
-rw-r--r--default_images/res/commandimagelist/lc_animationmode.pngbin0 -> 1406 bytes
-rw-r--r--default_images/res/commandimagelist/lc_animationobjects.pngbin0 -> 949 bytes
-rw-r--r--default_images/res/commandimagelist/lc_apply.pngbin0 -> 1435 bytes
-rw-r--r--default_images/res/commandimagelist/lc_arc.pngbin0 -> 1042 bytes
-rw-r--r--default_images/res/commandimagelist/lc_arrowshapes.chevron.pngbin0 -> 904 bytes
-rw-r--r--default_images/res/commandimagelist/lc_arrowshapes.circular-arrow.pngbin0 -> 1267 bytes
-rw-r--r--default_images/res/commandimagelist/lc_arrowshapes.corner-right-arrow.pngbin0 -> 748 bytes
-rw-r--r--default_images/res/commandimagelist/lc_arrowshapes.down-arrow-callout.pngbin0 -> 834 bytes
-rw-r--r--default_images/res/commandimagelist/lc_arrowshapes.down-arrow.pngbin0 -> 905 bytes
-rw-r--r--default_images/res/commandimagelist/lc_arrowshapes.left-arrow-callout.pngbin0 -> 812 bytes
-rw-r--r--default_images/res/commandimagelist/lc_arrowshapes.left-arrow.pngbin0 -> 794 bytes
-rw-r--r--default_images/res/commandimagelist/lc_arrowshapes.left-right-arrow-callout.pngbin0 -> 920 bytes
-rw-r--r--default_images/res/commandimagelist/lc_arrowshapes.left-right-arrow.pngbin0 -> 882 bytes
-rw-r--r--default_images/res/commandimagelist/lc_arrowshapes.notched-right-arrow.pngbin0 -> 900 bytes
-rw-r--r--default_images/res/commandimagelist/lc_arrowshapes.pentagon-right.pngbin0 -> 745 bytes
-rw-r--r--default_images/res/commandimagelist/lc_arrowshapes.pngbin0 -> 882 bytes
-rw-r--r--default_images/res/commandimagelist/lc_arrowshapes.quad-arrow-callout.pngbin0 -> 1318 bytes
-rw-r--r--default_images/res/commandimagelist/lc_arrowshapes.quad-arrow.pngbin0 -> 1054 bytes
-rw-r--r--default_images/res/commandimagelist/lc_arrowshapes.right-arrow-callout.pngbin0 -> 827 bytes
-rw-r--r--default_images/res/commandimagelist/lc_arrowshapes.right-arrow.pngbin0 -> 822 bytes
-rw-r--r--default_images/res/commandimagelist/lc_arrowshapes.s-sharped-arrow.pngbin0 -> 1235 bytes
-rw-r--r--default_images/res/commandimagelist/lc_arrowshapes.split-arrow.pngbin0 -> 1008 bytes
-rw-r--r--default_images/res/commandimagelist/lc_arrowshapes.split-round-arrow.pngbin0 -> 1252 bytes
-rw-r--r--default_images/res/commandimagelist/lc_arrowshapes.striped-right-arrow.pngbin0 -> 860 bytes
-rw-r--r--default_images/res/commandimagelist/lc_arrowshapes.up-arrow-callout.pngbin0 -> 755 bytes
-rw-r--r--default_images/res/commandimagelist/lc_arrowshapes.up-arrow.pngbin0 -> 794 bytes
-rw-r--r--default_images/res/commandimagelist/lc_arrowshapes.up-down-arrow-callout.pngbin0 -> 1012 bytes
-rw-r--r--default_images/res/commandimagelist/lc_arrowshapes.up-down-arrow.pngbin0 -> 994 bytes
-rw-r--r--default_images/res/commandimagelist/lc_arrowshapes.up-right-arrow-callout.pngbin0 -> 1013 bytes
-rw-r--r--default_images/res/commandimagelist/lc_arrowshapes.up-right-arrow.pngbin0 -> 913 bytes
-rw-r--r--default_images/res/commandimagelist/lc_arrowshapes.up-right-down-arrow.pngbin0 -> 979 bytes
-rw-r--r--default_images/res/commandimagelist/lc_arrowstoolbox.pngbin0 -> 616 bytes
-rw-r--r--default_images/res/commandimagelist/lc_assignlayout.pngbin0 -> 4055 bytes
-rw-r--r--default_images/res/commandimagelist/lc_autocontrolfocus.pngbin0 -> 1022 bytes
-rw-r--r--default_images/res/commandimagelist/lc_autofilter.pngbin0 -> 1321 bytes
-rw-r--r--default_images/res/commandimagelist/lc_autoformat.pngbin0 -> 1362 bytes
-rw-r--r--default_images/res/commandimagelist/lc_autosum.pngbin0 -> 921 bytes
-rw-r--r--default_images/res/commandimagelist/lc_avmediaplayer.pngbin0 -> 773 bytes
-rw-r--r--default_images/res/commandimagelist/lc_backcolor.pngbin0 -> 1205 bytes
-rw-r--r--default_images/res/commandimagelist/lc_backgroundcolor.pngbin0 -> 1126 bytes
-rw-r--r--default_images/res/commandimagelist/lc_backgroundpatterncontroller.pngbin0 -> 1126 bytes
-rw-r--r--default_images/res/commandimagelist/lc_backward.pngbin0 -> 564 bytes
-rw-r--r--default_images/res/commandimagelist/lc_basicshapes.block-arc.pngbin0 -> 1146 bytes
-rw-r--r--default_images/res/commandimagelist/lc_basicshapes.can.pngbin0 -> 1177 bytes
-rw-r--r--default_images/res/commandimagelist/lc_basicshapes.circle-pie.pngbin0 -> 1178 bytes
-rw-r--r--default_images/res/commandimagelist/lc_basicshapes.circle.pngbin0 -> 1329 bytes
-rw-r--r--default_images/res/commandimagelist/lc_basicshapes.cross.pngbin0 -> 714 bytes
-rw-r--r--default_images/res/commandimagelist/lc_basicshapes.cube.pngbin0 -> 878 bytes
-rw-r--r--default_images/res/commandimagelist/lc_basicshapes.diamond.pngbin0 -> 1030 bytes
-rw-r--r--default_images/res/commandimagelist/lc_basicshapes.ellipse.pngbin0 -> 1165 bytes
-rw-r--r--default_images/res/commandimagelist/lc_basicshapes.frame.pngbin0 -> 709 bytes
-rw-r--r--default_images/res/commandimagelist/lc_basicshapes.hexagon.pngbin0 -> 839 bytes
-rw-r--r--default_images/res/commandimagelist/lc_basicshapes.isosceles-triangle.pngbin0 -> 774 bytes
-rw-r--r--default_images/res/commandimagelist/lc_basicshapes.octagon.pngbin0 -> 880 bytes
-rw-r--r--default_images/res/commandimagelist/lc_basicshapes.paper.pngbin0 -> 758 bytes
-rw-r--r--default_images/res/commandimagelist/lc_basicshapes.parallelogram.pngbin0 -> 831 bytes
-rw-r--r--default_images/res/commandimagelist/lc_basicshapes.pentagon.pngbin0 -> 811 bytes
-rw-r--r--default_images/res/commandimagelist/lc_basicshapes.pngbin0 -> 1030 bytes
-rw-r--r--default_images/res/commandimagelist/lc_basicshapes.quadrat.pngbin0 -> 566 bytes
-rw-r--r--default_images/res/commandimagelist/lc_basicshapes.rectangle.pngbin0 -> 507 bytes
-rw-r--r--default_images/res/commandimagelist/lc_basicshapes.right-triangle.pngbin0 -> 729 bytes
-rw-r--r--default_images/res/commandimagelist/lc_basicshapes.ring.pngbin0 -> 1845 bytes
-rw-r--r--default_images/res/commandimagelist/lc_basicshapes.round-quadrat.pngbin0 -> 782 bytes
-rw-r--r--default_images/res/commandimagelist/lc_basicshapes.round-rectangle.pngbin0 -> 711 bytes
-rw-r--r--default_images/res/commandimagelist/lc_basicshapes.trapezoid.pngbin0 -> 736 bytes
-rw-r--r--default_images/res/commandimagelist/lc_basicstepinto.pngbin0 -> 1173 bytes
-rw-r--r--default_images/res/commandimagelist/lc_basicstepout.pngbin0 -> 1167 bytes
-rw-r--r--default_images/res/commandimagelist/lc_basicstepover.pngbin0 -> 1215 bytes
-rw-r--r--default_images/res/commandimagelist/lc_basicstop.pngbin0 -> 885 bytes
-rw-r--r--default_images/res/commandimagelist/lc_beamer.pngbin0 -> 276 bytes
-rw-r--r--default_images/res/commandimagelist/lc_beforeobject.pngbin0 -> 942 bytes
-rw-r--r--default_images/res/commandimagelist/lc_behindobject.pngbin0 -> 1077 bytes
-rw-r--r--default_images/res/commandimagelist/lc_bezier_unfilled.pngbin0 -> 917 bytes
-rw-r--r--default_images/res/commandimagelist/lc_bezierappend.pngbin0 -> 733 bytes
-rw-r--r--default_images/res/commandimagelist/lc_bezierclose.pngbin0 -> 585 bytes
-rw-r--r--default_images/res/commandimagelist/lc_bezierconvert.pngbin0 -> 996 bytes
-rw-r--r--default_images/res/commandimagelist/lc_beziercutline.pngbin0 -> 1620 bytes
-rw-r--r--default_images/res/commandimagelist/lc_bezierdelete.pngbin0 -> 734 bytes
-rw-r--r--default_images/res/commandimagelist/lc_bezieredge.pngbin0 -> 490 bytes
-rw-r--r--default_images/res/commandimagelist/lc_beziereliminatepoints.pngbin0 -> 816 bytes
-rw-r--r--default_images/res/commandimagelist/lc_bezierfill.pngbin0 -> 1176 bytes
-rw-r--r--default_images/res/commandimagelist/lc_bezierinsert.pngbin0 -> 814 bytes
-rw-r--r--default_images/res/commandimagelist/lc_beziermove.pngbin0 -> 834 bytes
-rw-r--r--default_images/res/commandimagelist/lc_beziersmooth.pngbin0 -> 621 bytes
-rw-r--r--default_images/res/commandimagelist/lc_beziersymmetric.pngbin0 -> 730 bytes
-rw-r--r--default_images/res/commandimagelist/lc_bighandles.pngbin0 -> 450 bytes
-rw-r--r--default_images/res/commandimagelist/lc_bold.pngbin0 -> 650 bytes
-rw-r--r--default_images/res/commandimagelist/lc_borderdialog.pngbin0 -> 339 bytes
-rw-r--r--default_images/res/commandimagelist/lc_bringtofront.pngbin0 -> 632 bytes
-rw-r--r--default_images/res/commandimagelist/lc_browsebackward.pngbin0 -> 1042 bytes
-rw-r--r--default_images/res/commandimagelist/lc_browseforward.pngbin0 -> 1039 bytes
-rw-r--r--default_images/res/commandimagelist/lc_browseview.pngbin0 -> 1493 bytes
-rw-r--r--default_images/res/commandimagelist/lc_bullet.pngbin0 -> 1739 bytes
-rw-r--r--default_images/res/commandimagelist/lc_bulletsandnumberingdialog.pngbin0 -> 934 bytes
-rw-r--r--default_images/res/commandimagelist/lc_calloutshapes.cloud-callout.pngbin0 -> 1593 bytes
-rw-r--r--default_images/res/commandimagelist/lc_calloutshapes.line-callout-1.pngbin0 -> 743 bytes
-rw-r--r--default_images/res/commandimagelist/lc_calloutshapes.line-callout-2.pngbin0 -> 715 bytes
-rw-r--r--default_images/res/commandimagelist/lc_calloutshapes.line-callout-3.pngbin0 -> 605 bytes
-rw-r--r--default_images/res/commandimagelist/lc_calloutshapes.pngbin0 -> 1102 bytes
-rw-r--r--default_images/res/commandimagelist/lc_calloutshapes.rectangular-callout.pngbin0 -> 774 bytes
-rw-r--r--default_images/res/commandimagelist/lc_calloutshapes.round-callout.pngbin0 -> 1350 bytes
-rw-r--r--default_images/res/commandimagelist/lc_calloutshapes.round-rectangular-callout.pngbin0 -> 1102 bytes
-rw-r--r--default_images/res/commandimagelist/lc_cancel.pngbin0 -> 1119 bytes
-rw-r--r--default_images/res/commandimagelist/lc_cellvertbottom.pngbin0 -> 851 bytes
-rw-r--r--default_images/res/commandimagelist/lc_cellvertcenter.pngbin0 -> 973 bytes
-rw-r--r--default_images/res/commandimagelist/lc_cellverttop.pngbin0 -> 861 bytes
-rw-r--r--default_images/res/commandimagelist/lc_centerpara.pngbin0 -> 493 bytes
-rw-r--r--default_images/res/commandimagelist/lc_chainframes.pngbin0 -> 877 bytes
-rw-r--r--default_images/res/commandimagelist/lc_changebezier.pngbin0 -> 1292 bytes
-rw-r--r--default_images/res/commandimagelist/lc_changepolygon.pngbin0 -> 1354 bytes
-rw-r--r--default_images/res/commandimagelist/lc_charfontname.pngbin0 -> 1355 bytes
-rw-r--r--default_images/res/commandimagelist/lc_checkbox.pngbin0 -> 871 bytes
-rw-r--r--default_images/res/commandimagelist/lc_choosecontrols.pngbin0 -> 1334 bytes
-rw-r--r--default_images/res/commandimagelist/lc_choosedesign.pngbin0 -> 1199 bytes
-rw-r--r--default_images/res/commandimagelist/lc_choosemacro.pngbin0 -> 1981 bytes
-rw-r--r--default_images/res/commandimagelist/lc_choosepolygon.pngbin0 -> 625 bytes
-rw-r--r--default_images/res/commandimagelist/lc_circle.pngbin0 -> 1329 bytes
-rw-r--r--default_images/res/commandimagelist/lc_circle_unfilled.pngbin0 -> 1315 bytes
-rw-r--r--default_images/res/commandimagelist/lc_circlearc.pngbin0 -> 1105 bytes
-rw-r--r--default_images/res/commandimagelist/lc_circlecut.pngbin0 -> 1329 bytes
-rw-r--r--default_images/res/commandimagelist/lc_circlecut_unfilled.pngbin0 -> 1365 bytes
-rw-r--r--default_images/res/commandimagelist/lc_circlepie.pngbin0 -> 1178 bytes
-rw-r--r--default_images/res/commandimagelist/lc_circlepie_unfilled.pngbin0 -> 1190 bytes
-rw-r--r--default_images/res/commandimagelist/lc_clickchangerotation.pngbin0 -> 1690 bytes
-rw-r--r--default_images/res/commandimagelist/lc_closedoc.pngbin0 -> 1097 bytes
-rw-r--r--default_images/res/commandimagelist/lc_closedocs.pngbin0 -> 582 bytes
-rw-r--r--default_images/res/commandimagelist/lc_closemasterview.pngbin0 -> 1194 bytes
-rw-r--r--default_images/res/commandimagelist/lc_closewin.pngbin0 -> 1097 bytes
-rw-r--r--default_images/res/commandimagelist/lc_color.pngbin0 -> 1019 bytes
-rw-r--r--default_images/res/commandimagelist/lc_colorsettings.pngbin0 -> 1115 bytes
-rw-r--r--default_images/res/commandimagelist/lc_colorview.pngbin0 -> 678 bytes
-rw-r--r--default_images/res/commandimagelist/lc_combobox.pngbin0 -> 1175 bytes
-rw-r--r--default_images/res/commandimagelist/lc_commontaskbarvisible.pngbin0 -> 1017 bytes
-rw-r--r--default_images/res/commandimagelist/lc_compilebasic.pngbin0 -> 1071 bytes
-rw-r--r--default_images/res/commandimagelist/lc_cone.pngbin0 -> 925 bytes
-rw-r--r--default_images/res/commandimagelist/lc_config.pngbin0 -> 1334 bytes
-rw-r--r--default_images/res/commandimagelist/lc_connector.pngbin0 -> 652 bytes
-rw-r--r--default_images/res/commandimagelist/lc_connectorarrowend.pngbin0 -> 828 bytes
-rw-r--r--default_images/res/commandimagelist/lc_connectorarrows.pngbin0 -> 843 bytes
-rw-r--r--default_images/res/commandimagelist/lc_connectorarrowstart.pngbin0 -> 826 bytes
-rw-r--r--default_images/res/commandimagelist/lc_connectorcircleend.pngbin0 -> 823 bytes
-rw-r--r--default_images/res/commandimagelist/lc_connectorcircles.pngbin0 -> 773 bytes
-rw-r--r--default_images/res/commandimagelist/lc_connectorcirclestart.pngbin0 -> 820 bytes
-rw-r--r--default_images/res/commandimagelist/lc_connectorcurve.pngbin0 -> 801 bytes
-rw-r--r--default_images/res/commandimagelist/lc_connectorcurvearrowend.pngbin0 -> 956 bytes
-rw-r--r--default_images/res/commandimagelist/lc_connectorcurvearrows.pngbin0 -> 976 bytes
-rw-r--r--default_images/res/commandimagelist/lc_connectorcurvearrowstart.pngbin0 -> 979 bytes
-rw-r--r--default_images/res/commandimagelist/lc_connectorcurvecircleend.pngbin0 -> 934 bytes
-rw-r--r--default_images/res/commandimagelist/lc_connectorcurvecircles.pngbin0 -> 903 bytes
-rw-r--r--default_images/res/commandimagelist/lc_connectorcurvecirclestart.pngbin0 -> 967 bytes
-rw-r--r--default_images/res/commandimagelist/lc_connectorline.pngbin0 -> 728 bytes
-rw-r--r--default_images/res/commandimagelist/lc_connectorlinearrowend.pngbin0 -> 838 bytes
-rw-r--r--default_images/res/commandimagelist/lc_connectorlinearrows.pngbin0 -> 875 bytes
-rw-r--r--default_images/res/commandimagelist/lc_connectorlinearrowstart.pngbin0 -> 872 bytes
-rw-r--r--default_images/res/commandimagelist/lc_connectorlinecircleend.pngbin0 -> 891 bytes
-rw-r--r--default_images/res/commandimagelist/lc_connectorlinecircles.pngbin0 -> 819 bytes
-rw-r--r--default_images/res/commandimagelist/lc_connectorlinecirclestart.pngbin0 -> 890 bytes
-rw-r--r--default_images/res/commandimagelist/lc_connectorlines.pngbin0 -> 796 bytes
-rw-r--r--default_images/res/commandimagelist/lc_connectorlinesarrowend.pngbin0 -> 901 bytes
-rw-r--r--default_images/res/commandimagelist/lc_connectorlinesarrows.pngbin0 -> 952 bytes
-rw-r--r--default_images/res/commandimagelist/lc_connectorlinesarrowstart.pngbin0 -> 906 bytes
-rw-r--r--default_images/res/commandimagelist/lc_connectorlinescircleend.pngbin0 -> 870 bytes
-rw-r--r--default_images/res/commandimagelist/lc_connectorlinescircles.pngbin0 -> 818 bytes
-rw-r--r--default_images/res/commandimagelist/lc_connectorlinescirclestart.pngbin0 -> 894 bytes
-rw-r--r--default_images/res/commandimagelist/lc_connectortoolbox.pngbin0 -> 773 bytes
-rw-r--r--default_images/res/commandimagelist/lc_contourdialog.pngbin0 -> 1043 bytes
-rw-r--r--default_images/res/commandimagelist/lc_controlcodes.pngbin0 -> 731 bytes
-rw-r--r--default_images/res/commandimagelist/lc_controlproperties.pngbin0 -> 1095 bytes
-rw-r--r--default_images/res/commandimagelist/lc_convertinto3d.pngbin0 -> 1189 bytes
-rw-r--r--default_images/res/commandimagelist/lc_convertinto3dlathe.pngbin0 -> 1225 bytes
-rw-r--r--default_images/res/commandimagelist/lc_convertinto3dlathefast.pngbin0 -> 1325 bytes
-rw-r--r--default_images/res/commandimagelist/lc_copy.pngbin0 -> 855 bytes
-rw-r--r--default_images/res/commandimagelist/lc_countall.pngbin0 -> 276 bytes
-rw-r--r--default_images/res/commandimagelist/lc_crookrotate.pngbin0 -> 1191 bytes
-rw-r--r--default_images/res/commandimagelist/lc_crookslant.pngbin0 -> 1381 bytes
-rw-r--r--default_images/res/commandimagelist/lc_crop.pngbin0 -> 1946 bytes
-rw-r--r--default_images/res/commandimagelist/lc_cube.pngbin0 -> 944 bytes
-rw-r--r--default_images/res/commandimagelist/lc_currencyfield.pngbin0 -> 1219 bytes
-rw-r--r--default_images/res/commandimagelist/lc_customanimation.pngbin0 -> 1348 bytes
-rw-r--r--default_images/res/commandimagelist/lc_cut.pngbin0 -> 1623 bytes
-rw-r--r--default_images/res/commandimagelist/lc_cylinder.pngbin0 -> 1167 bytes
-rw-r--r--default_images/res/commandimagelist/lc_cyramid.pngbin0 -> 1051 bytes
-rw-r--r--default_images/res/commandimagelist/lc_datadatapilotrun.pngbin0 -> 1156 bytes
-rw-r--r--default_images/res/commandimagelist/lc_datafilterautofilter.pngbin0 -> 1321 bytes
-rw-r--r--default_images/res/commandimagelist/lc_datafilterspecialfilter.pngbin0 -> 836 bytes
-rw-r--r--default_images/res/commandimagelist/lc_datafilterstandardfilter.pngbin0 -> 809 bytes
-rw-r--r--default_images/res/commandimagelist/lc_dataimport.pngbin0 -> 631 bytes
-rw-r--r--default_images/res/commandimagelist/lc_dataincolumns.pngbin0 -> 502 bytes
-rw-r--r--default_images/res/commandimagelist/lc_datainrows.pngbin0 -> 588 bytes
-rw-r--r--default_images/res/commandimagelist/lc_datefield.pngbin0 -> 818 bytes
-rw-r--r--default_images/res/commandimagelist/lc_dbaddrelation.pngbin0 -> 944 bytes
-rw-r--r--default_images/res/commandimagelist/lc_dbchangedesignmode.pngbin0 -> 1266 bytes
-rw-r--r--default_images/res/commandimagelist/lc_dbclearquery.pngbin0 -> 1343 bytes
-rw-r--r--default_images/res/commandimagelist/lc_dbdistinctvalues.pngbin0 -> 1076 bytes
-rw-r--r--default_images/res/commandimagelist/lc_dbdtableedit.pngbin0 -> 923 bytes
-rw-r--r--default_images/res/commandimagelist/lc_dbformdelete.pngbin0 -> 1182 bytes
-rw-r--r--default_images/res/commandimagelist/lc_dbformedit.pngbin0 -> 1135 bytes
-rw-r--r--default_images/res/commandimagelist/lc_dbformopen.pngbin0 -> 1056 bytes
-rw-r--r--default_images/res/commandimagelist/lc_dbformrename.pngbin0 -> 824 bytes
-rw-r--r--default_images/res/commandimagelist/lc_dbindexdesign.pngbin0 -> 1169 bytes
-rw-r--r--default_images/res/commandimagelist/lc_dbnewform.pngbin0 -> 1146 bytes
-rw-r--r--default_images/res/commandimagelist/lc_dbnewformautopilot.pngbin0 -> 1468 bytes
-rw-r--r--default_images/res/commandimagelist/lc_dbnewquery.pngbin0 -> 1322 bytes
-rw-r--r--default_images/res/commandimagelist/lc_dbnewqueryautopilot.pngbin0 -> 1662 bytes
-rw-r--r--default_images/res/commandimagelist/lc_dbnewquerysql.pngbin0 -> 1136 bytes
-rw-r--r--default_images/res/commandimagelist/lc_dbnewreport.pngbin0 -> 1257 bytes
-rw-r--r--default_images/res/commandimagelist/lc_dbnewreportautopilot.pngbin0 -> 1581 bytes
-rw-r--r--default_images/res/commandimagelist/lc_dbnewtable.pngbin0 -> 983 bytes
-rw-r--r--default_images/res/commandimagelist/lc_dbnewtableautopilot.pngbin0 -> 1401 bytes
-rw-r--r--default_images/res/commandimagelist/lc_dbnewview.pngbin0 -> 1220 bytes
-rw-r--r--default_images/res/commandimagelist/lc_dbnewviewsql.pngbin0 -> 1282 bytes
-rw-r--r--default_images/res/commandimagelist/lc_dbquerydelete.pngbin0 -> 999 bytes
-rw-r--r--default_images/res/commandimagelist/lc_dbqueryedit.pngbin0 -> 1256 bytes
-rw-r--r--default_images/res/commandimagelist/lc_dbqueryopen.pngbin0 -> 1332 bytes
-rw-r--r--default_images/res/commandimagelist/lc_dbqueryrename.pngbin0 -> 609 bytes
-rw-r--r--default_images/res/commandimagelist/lc_dbreportdelete.pngbin0 -> 1277 bytes
-rw-r--r--default_images/res/commandimagelist/lc_dbreportedit.pngbin0 -> 1177 bytes
-rw-r--r--default_images/res/commandimagelist/lc_dbreportopen.pngbin0 -> 1189 bytes
-rw-r--r--default_images/res/commandimagelist/lc_dbreportrename.pngbin0 -> 891 bytes
-rw-r--r--default_images/res/commandimagelist/lc_dbsortingandgrouping.pngbin0 -> 798 bytes
-rw-r--r--default_images/res/commandimagelist/lc_dbtabledelete.pngbin0 -> 999 bytes
-rw-r--r--default_images/res/commandimagelist/lc_dbtableedit.pngbin0 -> 923 bytes
-rw-r--r--default_images/res/commandimagelist/lc_dbtableopen.pngbin0 -> 1024 bytes
-rw-r--r--default_images/res/commandimagelist/lc_dbtablerename.pngbin0 -> 609 bytes
-rw-r--r--default_images/res/commandimagelist/lc_dbviewaliases.pngbin0 -> 651 bytes
-rw-r--r--default_images/res/commandimagelist/lc_dbviewfunctions.pngbin0 -> 743 bytes
-rw-r--r--default_images/res/commandimagelist/lc_dbviewtablenames.pngbin0 -> 668 bytes
-rw-r--r--default_images/res/commandimagelist/lc_decrementindent.pngbin0 -> 840 bytes
-rw-r--r--default_images/res/commandimagelist/lc_decrementlevel.pngbin0 -> 866 bytes
-rw-r--r--default_images/res/commandimagelist/lc_decrementsublevels.pngbin0 -> 1079 bytes
-rw-r--r--default_images/res/commandimagelist/lc_defaultbullet.pngbin0 -> 544 bytes
-rw-r--r--default_images/res/commandimagelist/lc_defaultnumbering.pngbin0 -> 584 bytes
-rw-r--r--default_images/res/commandimagelist/lc_definename.pngbin0 -> 621 bytes
-rw-r--r--default_images/res/commandimagelist/lc_defineprintarea.pngbin0 -> 1108 bytes
-rw-r--r--default_images/res/commandimagelist/lc_delete.pngbin0 -> 999 bytes
-rwxr-xr-xdefault_images/res/commandimagelist/lc_deleteallannotation.pngbin0 -> 4560 bytes
-rwxr-xr-xdefault_images/res/commandimagelist/lc_deleteannotation.pngbin0 -> 4526 bytes
-rw-r--r--default_images/res/commandimagelist/lc_deletecolumns.pngbin0 -> 748 bytes
-rw-r--r--default_images/res/commandimagelist/lc_deletemasterpage.pngbin0 -> 1268 bytes
-rw-r--r--default_images/res/commandimagelist/lc_deleteprintarea.pngbin0 -> 1075 bytes
-rw-r--r--default_images/res/commandimagelist/lc_deleterecord.pngbin0 -> 1239 bytes
-rw-r--r--default_images/res/commandimagelist/lc_deleterows.pngbin0 -> 565 bytes
-rw-r--r--default_images/res/commandimagelist/lc_designerdialog.pngbin0 -> 970 bytes
-rw-r--r--default_images/res/commandimagelist/lc_dia.pngbin0 -> 1171 bytes
-rw-r--r--default_images/res/commandimagelist/lc_diaauto.pngbin0 -> 1171 bytes
-rw-r--r--default_images/res/commandimagelist/lc_diaeffect.pngbin0 -> 1171 bytes
-rw-r--r--default_images/res/commandimagelist/lc_diagramdata.pngbin0 -> 558 bytes
-rw-r--r--default_images/res/commandimagelist/lc_diagramtype.pngbin0 -> 1069 bytes
-rw-r--r--default_images/res/commandimagelist/lc_diaspeed.pngbin0 -> 1171 bytes
-rw-r--r--default_images/res/commandimagelist/lc_diatime.pngbin0 -> 1171 bytes
-rw-r--r--default_images/res/commandimagelist/lc_distributecolumns.pngbin0 -> 893 bytes
-rw-r--r--default_images/res/commandimagelist/lc_distributerows.pngbin0 -> 610 bytes
-rw-r--r--default_images/res/commandimagelist/lc_doubleclicktextedit.pngbin0 -> 1272 bytes
-rw-r--r--default_images/res/commandimagelist/lc_downsearch.pngbin0 -> 4270 bytes
-rw-r--r--default_images/res/commandimagelist/lc_draw.pngbin0 -> 1603 bytes
-rw-r--r--default_images/res/commandimagelist/lc_drawcaption.pngbin0 -> 1403 bytes
-rw-r--r--default_images/res/commandimagelist/lc_drawchart.pngbin0 -> 887 bytes
-rw-r--r--default_images/res/commandimagelist/lc_drawselect.pngbin0 -> 806 bytes
-rw-r--r--default_images/res/commandimagelist/lc_drawtext.pngbin0 -> 682 bytes
-rw-r--r--default_images/res/commandimagelist/lc_dsbdocumentdatasource.pngbin0 -> 1786 bytes
-rw-r--r--default_images/res/commandimagelist/lc_dsbeditdoc.pngbin0 -> 1094 bytes
-rw-r--r--default_images/res/commandimagelist/lc_dsbformletter.pngbin0 -> 1062 bytes
-rw-r--r--default_images/res/commandimagelist/lc_dsbinsertcolumns.pngbin0 -> 778 bytes
-rw-r--r--default_images/res/commandimagelist/lc_dsbinsertcontent.pngbin0 -> 787 bytes
-rw-r--r--default_images/res/commandimagelist/lc_dsbrowserexplorer.pngbin0 -> 1004 bytes
-rw-r--r--default_images/res/commandimagelist/lc_duplicatepage.pngbin0 -> 1389 bytes
-rw-r--r--default_images/res/commandimagelist/lc_edit.pngbin0 -> 895 bytes
-rw-r--r--default_images/res/commandimagelist/lc_editdoc.pngbin0 -> 1094 bytes
-rw-r--r--default_images/res/commandimagelist/lc_editframeset.pngbin0 -> 276 bytes
-rw-r--r--default_images/res/commandimagelist/lc_editglossary.pngbin0 -> 1169 bytes
-rw-r--r--default_images/res/commandimagelist/lc_editheaderandfooter.pngbin0 -> 677 bytes
-rw-r--r--default_images/res/commandimagelist/lc_editprintarea.pngbin0 -> 1013 bytes
-rw-r--r--default_images/res/commandimagelist/lc_ellipse.pngbin0 -> 1165 bytes
-rw-r--r--default_images/res/commandimagelist/lc_ellipse_unfilled.pngbin0 -> 1196 bytes
-rw-r--r--default_images/res/commandimagelist/lc_ellipsecut.pngbin0 -> 1122 bytes
-rw-r--r--default_images/res/commandimagelist/lc_ellipsecut_unfilled.pngbin0 -> 1160 bytes
-rw-r--r--default_images/res/commandimagelist/lc_ellipsetoolbox.pngbin0 -> 1165 bytes
-rw-r--r--default_images/res/commandimagelist/lc_entergroup.pngbin0 -> 1017 bytes
-rw-r--r--default_images/res/commandimagelist/lc_entirecolumn.pngbin0 -> 1120 bytes
-rw-r--r--default_images/res/commandimagelist/lc_entirerow.pngbin0 -> 925 bytes
-rw-r--r--default_images/res/commandimagelist/lc_euroconverter.pngbin0 -> 1024 bytes
-rw-r--r--default_images/res/commandimagelist/lc_executereport.pngbin0 -> 1068 bytes
-rw-r--r--default_images/res/commandimagelist/lc_expandpage.pngbin0 -> 683 bytes
-rw-r--r--default_images/res/commandimagelist/lc_exportdialog.pngbin0 -> 886 bytes
-rw-r--r--default_images/res/commandimagelist/lc_exportdirecttopdf.pngbin0 -> 841 bytes
-rw-r--r--default_images/res/commandimagelist/lc_exportto.pngbin0 -> 1131 bytes
-rw-r--r--default_images/res/commandimagelist/lc_extendedhelp.pngbin0 -> 2077 bytes
-rw-r--r--default_images/res/commandimagelist/lc_extrusion3dcolor.pngbin0 -> 762 bytes
-rw-r--r--default_images/res/commandimagelist/lc_extrusiondepthfloater.pngbin0 -> 1246 bytes
-rw-r--r--default_images/res/commandimagelist/lc_extrusiondirectionfloater.pngbin0 -> 1255 bytes
-rw-r--r--default_images/res/commandimagelist/lc_extrusionlightingfloater.pngbin0 -> 710 bytes
-rw-r--r--default_images/res/commandimagelist/lc_extrusionsurfacefloater.pngbin0 -> 2093 bytes
-rw-r--r--default_images/res/commandimagelist/lc_extrusiontiltdown.pngbin0 -> 1633 bytes
-rw-r--r--default_images/res/commandimagelist/lc_extrusiontiltleft.pngbin0 -> 1724 bytes
-rw-r--r--default_images/res/commandimagelist/lc_extrusiontiltright.pngbin0 -> 1763 bytes
-rw-r--r--default_images/res/commandimagelist/lc_extrusiontiltup.pngbin0 -> 1633 bytes
-rw-r--r--default_images/res/commandimagelist/lc_extrusiontoggle.pngbin0 -> 1290 bytes
-rw-r--r--default_images/res/commandimagelist/lc_fieldnames.pngbin0 -> 735 bytes
-rw-r--r--default_images/res/commandimagelist/lc_fields.pngbin0 -> 735 bytes
-rw-r--r--default_images/res/commandimagelist/lc_filecontrol.pngbin0 -> 1037 bytes
-rw-r--r--default_images/res/commandimagelist/lc_filedocument.pngbin0 -> 276 bytes
-rw-r--r--default_images/res/commandimagelist/lc_fillshadow.pngbin0 -> 547 bytes
-rw-r--r--default_images/res/commandimagelist/lc_fillstyle.pngbin0 -> 1133 bytes
-rw-r--r--default_images/res/commandimagelist/lc_filtercrit.pngbin0 -> 809 bytes
-rw-r--r--default_images/res/commandimagelist/lc_firstpage.pngbin0 -> 1103 bytes
-rw-r--r--default_images/res/commandimagelist/lc_firstrecord.pngbin0 -> 810 bytes
-rw-r--r--default_images/res/commandimagelist/lc_fliphorizontal.pngbin0 -> 844 bytes
-rw-r--r--default_images/res/commandimagelist/lc_flipvertical.pngbin0 -> 902 bytes
-rw-r--r--default_images/res/commandimagelist/lc_flowchartshapes.flowchart-alternate-process.pngbin0 -> 782 bytes
-rw-r--r--default_images/res/commandimagelist/lc_flowchartshapes.flowchart-card.pngbin0 -> 631 bytes
-rw-r--r--default_images/res/commandimagelist/lc_flowchartshapes.flowchart-collate.pngbin0 -> 978 bytes
-rw-r--r--default_images/res/commandimagelist/lc_flowchartshapes.flowchart-connector.pngbin0 -> 1329 bytes
-rw-r--r--default_images/res/commandimagelist/lc_flowchartshapes.flowchart-data.pngbin0 -> 831 bytes
-rw-r--r--default_images/res/commandimagelist/lc_flowchartshapes.flowchart-decision.pngbin0 -> 1030 bytes
-rw-r--r--default_images/res/commandimagelist/lc_flowchartshapes.flowchart-delay.pngbin0 -> 1069 bytes
-rw-r--r--default_images/res/commandimagelist/lc_flowchartshapes.flowchart-direct-access-storage.pngbin0 -> 1110 bytes
-rw-r--r--default_images/res/commandimagelist/lc_flowchartshapes.flowchart-display.pngbin0 -> 879 bytes
-rw-r--r--default_images/res/commandimagelist/lc_flowchartshapes.flowchart-document.pngbin0 -> 1063 bytes
-rw-r--r--default_images/res/commandimagelist/lc_flowchartshapes.flowchart-extract.pngbin0 -> 774 bytes
-rw-r--r--default_images/res/commandimagelist/lc_flowchartshapes.flowchart-internal-storage.pngbin0 -> 663 bytes
-rw-r--r--default_images/res/commandimagelist/lc_flowchartshapes.flowchart-magnetic-disk.pngbin0 -> 1177 bytes
-rw-r--r--default_images/res/commandimagelist/lc_flowchartshapes.flowchart-manual-input.pngbin0 -> 665 bytes
-rw-r--r--default_images/res/commandimagelist/lc_flowchartshapes.flowchart-manual-operation.pngbin0 -> 736 bytes
-rw-r--r--default_images/res/commandimagelist/lc_flowchartshapes.flowchart-merge.pngbin0 -> 814 bytes
-rw-r--r--default_images/res/commandimagelist/lc_flowchartshapes.flowchart-multidocument.pngbin0 -> 1013 bytes
-rw-r--r--default_images/res/commandimagelist/lc_flowchartshapes.flowchart-off-page-connector.pngbin0 -> 782 bytes
-rw-r--r--default_images/res/commandimagelist/lc_flowchartshapes.flowchart-or.pngbin0 -> 1442 bytes
-rw-r--r--default_images/res/commandimagelist/lc_flowchartshapes.flowchart-predefined-process.pngbin0 -> 694 bytes
-rw-r--r--default_images/res/commandimagelist/lc_flowchartshapes.flowchart-preparation.pngbin0 -> 839 bytes
-rw-r--r--default_images/res/commandimagelist/lc_flowchartshapes.flowchart-process.pngbin0 -> 566 bytes
-rw-r--r--default_images/res/commandimagelist/lc_flowchartshapes.flowchart-punched-tape.pngbin0 -> 1474 bytes
-rw-r--r--default_images/res/commandimagelist/lc_flowchartshapes.flowchart-sequential-access.pngbin0 -> 1244 bytes
-rw-r--r--default_images/res/commandimagelist/lc_flowchartshapes.flowchart-sort.pngbin0 -> 1013 bytes
-rw-r--r--default_images/res/commandimagelist/lc_flowchartshapes.flowchart-stored-data.pngbin0 -> 914 bytes
-rw-r--r--default_images/res/commandimagelist/lc_flowchartshapes.flowchart-summing-junction.pngbin0 -> 1682 bytes
-rw-r--r--default_images/res/commandimagelist/lc_flowchartshapes.flowchart-terminator.pngbin0 -> 699 bytes
-rw-r--r--default_images/res/commandimagelist/lc_flowchartshapes.pngbin0 -> 663 bytes
-rw-r--r--default_images/res/commandimagelist/lc_fontcolor.pngbin0 -> 1019 bytes
-rw-r--r--default_images/res/commandimagelist/lc_fontdialog.pngbin0 -> 1421 bytes
-rw-r--r--default_images/res/commandimagelist/lc_fontheight.pngbin0 -> 1547 bytes
-rw-r--r--default_images/res/commandimagelist/lc_fontwork.pngbin0 -> 834 bytes
-rw-r--r--default_images/res/commandimagelist/lc_fontworkalignmentfloater.pngbin0 -> 493 bytes
-rw-r--r--default_images/res/commandimagelist/lc_fontworkcharacterspacingfloater.pngbin0 -> 1220 bytes
-rw-r--r--default_images/res/commandimagelist/lc_fontworkgalleryfloater.pngbin0 -> 875 bytes
-rw-r--r--default_images/res/commandimagelist/lc_fontworksameletterheights.pngbin0 -> 751 bytes
-rw-r--r--default_images/res/commandimagelist/lc_fontworkshapetype.fontwork-arch-down-curve.pngbin0 -> 576 bytes
-rw-r--r--default_images/res/commandimagelist/lc_fontworkshapetype.fontwork-arch-down-pour.pngbin0 -> 555 bytes
-rw-r--r--default_images/res/commandimagelist/lc_fontworkshapetype.fontwork-arch-left-curve.pngbin0 -> 573 bytes
-rw-r--r--default_images/res/commandimagelist/lc_fontworkshapetype.fontwork-arch-left-pour.pngbin0 -> 577 bytes
-rw-r--r--default_images/res/commandimagelist/lc_fontworkshapetype.fontwork-arch-right-curve.pngbin0 -> 580 bytes
-rw-r--r--default_images/res/commandimagelist/lc_fontworkshapetype.fontwork-arch-right-pour.pngbin0 -> 563 bytes
-rw-r--r--default_images/res/commandimagelist/lc_fontworkshapetype.fontwork-arch-up-curve.pngbin0 -> 569 bytes
-rw-r--r--default_images/res/commandimagelist/lc_fontworkshapetype.fontwork-arch-up-pour.pngbin0 -> 550 bytes
-rw-r--r--default_images/res/commandimagelist/lc_fontworkshapetype.fontwork-chevron-down.pngbin0 -> 413 bytes
-rw-r--r--default_images/res/commandimagelist/lc_fontworkshapetype.fontwork-chevron-up.pngbin0 -> 389 bytes
-rw-r--r--default_images/res/commandimagelist/lc_fontworkshapetype.fontwork-circle-curve.pngbin0 -> 701 bytes
-rw-r--r--default_images/res/commandimagelist/lc_fontworkshapetype.fontwork-circle-pour.pngbin0 -> 687 bytes
-rw-r--r--default_images/res/commandimagelist/lc_fontworkshapetype.fontwork-curve-down.pngbin0 -> 488 bytes
-rw-r--r--default_images/res/commandimagelist/lc_fontworkshapetype.fontwork-curve-up.pngbin0 -> 491 bytes
-rw-r--r--default_images/res/commandimagelist/lc_fontworkshapetype.fontwork-fade-down.pngbin0 -> 375 bytes
-rw-r--r--default_images/res/commandimagelist/lc_fontworkshapetype.fontwork-fade-left.pngbin0 -> 365 bytes
-rw-r--r--default_images/res/commandimagelist/lc_fontworkshapetype.fontwork-fade-right.pngbin0 -> 355 bytes
-rw-r--r--default_images/res/commandimagelist/lc_fontworkshapetype.fontwork-fade-up-and-left.pngbin0 -> 409 bytes
-rw-r--r--default_images/res/commandimagelist/lc_fontworkshapetype.fontwork-fade-up-and-right.pngbin0 -> 382 bytes
-rw-r--r--default_images/res/commandimagelist/lc_fontworkshapetype.fontwork-fade-up.pngbin0 -> 369 bytes
-rw-r--r--default_images/res/commandimagelist/lc_fontworkshapetype.fontwork-inflate.pngbin0 -> 357 bytes
-rw-r--r--default_images/res/commandimagelist/lc_fontworkshapetype.fontwork-open-circle-curve.pngbin0 -> 727 bytes
-rw-r--r--default_images/res/commandimagelist/lc_fontworkshapetype.fontwork-open-circle-pour.pngbin0 -> 717 bytes
-rw-r--r--default_images/res/commandimagelist/lc_fontworkshapetype.fontwork-plain-text.pngbin0 -> 300 bytes
-rw-r--r--default_images/res/commandimagelist/lc_fontworkshapetype.fontwork-slant-down.pngbin0 -> 377 bytes
-rw-r--r--default_images/res/commandimagelist/lc_fontworkshapetype.fontwork-slant-up.pngbin0 -> 376 bytes
-rw-r--r--default_images/res/commandimagelist/lc_fontworkshapetype.fontwork-stop.pngbin0 -> 353 bytes
-rw-r--r--default_images/res/commandimagelist/lc_fontworkshapetype.fontwork-triangle-down.pngbin0 -> 409 bytes
-rw-r--r--default_images/res/commandimagelist/lc_fontworkshapetype.fontwork-triangle-up.pngbin0 -> 388 bytes
-rw-r--r--default_images/res/commandimagelist/lc_fontworkshapetype.fontwork-wave.pngbin0 -> 518 bytes
-rw-r--r--default_images/res/commandimagelist/lc_fontworkshapetype.pngbin0 -> 834 bytes
-rw-r--r--default_images/res/commandimagelist/lc_formatarea.pngbin0 -> 1133 bytes
-rw-r--r--default_images/res/commandimagelist/lc_formatgroup.pngbin0 -> 771 bytes
-rw-r--r--default_images/res/commandimagelist/lc_formatline.pngbin0 -> 849 bytes
-rw-r--r--default_images/res/commandimagelist/lc_formatpaintbrush.pngbin0 -> 1687 bytes
-rw-r--r--default_images/res/commandimagelist/lc_formattedfield.pngbin0 -> 870 bytes
-rw-r--r--default_images/res/commandimagelist/lc_formatungroup.pngbin0 -> 690 bytes
-rw-r--r--default_images/res/commandimagelist/lc_formdesigntools.pngbin0 -> 1039 bytes
-rw-r--r--default_images/res/commandimagelist/lc_formelcursor.pngbin0 -> 677 bytes
-rw-r--r--default_images/res/commandimagelist/lc_formfilter.pngbin0 -> 961 bytes
-rw-r--r--default_images/res/commandimagelist/lc_formfiltered.pngbin0 -> 1041 bytes
-rw-r--r--default_images/res/commandimagelist/lc_formfilterexecute.pngbin0 -> 809 bytes
-rw-r--r--default_images/res/commandimagelist/lc_formfilternavigator.pngbin0 -> 1444 bytes
-rw-r--r--default_images/res/commandimagelist/lc_formproperties.pngbin0 -> 993 bytes
-rw-r--r--default_images/res/commandimagelist/lc_forward.pngbin0 -> 574 bytes
-rw-r--r--default_images/res/commandimagelist/lc_framedialog.pngbin0 -> 894 bytes
-rw-r--r--default_images/res/commandimagelist/lc_framelinecolor.pngbin0 -> 446 bytes
-rw-r--r--default_images/res/commandimagelist/lc_freeline.pngbin0 -> 1236 bytes
-rw-r--r--default_images/res/commandimagelist/lc_freeline_unfilled.pngbin0 -> 1115 bytes
-rw-r--r--default_images/res/commandimagelist/lc_fullscreen.pngbin0 -> 736 bytes
-rw-r--r--default_images/res/commandimagelist/lc_gallery.pngbin0 -> 1058 bytes
-rw-r--r--default_images/res/commandimagelist/lc_getactivetask.pngbin0 -> 276 bytes
-rw-r--r--default_images/res/commandimagelist/lc_glueeditmode.pngbin0 -> 1186 bytes
-rw-r--r--default_images/res/commandimagelist/lc_glueescapedirectionbottom.pngbin0 -> 807 bytes
-rw-r--r--default_images/res/commandimagelist/lc_glueescapedirectionleft.pngbin0 -> 808 bytes
-rw-r--r--default_images/res/commandimagelist/lc_glueescapedirectionright.pngbin0 -> 824 bytes
-rw-r--r--default_images/res/commandimagelist/lc_glueescapedirectiontop.pngbin0 -> 836 bytes
-rw-r--r--default_images/res/commandimagelist/lc_gluehorzaligncenter.pngbin0 -> 851 bytes
-rw-r--r--default_images/res/commandimagelist/lc_gluehorzalignleft.pngbin0 -> 863 bytes
-rw-r--r--default_images/res/commandimagelist/lc_gluehorzalignright.pngbin0 -> 886 bytes
-rw-r--r--default_images/res/commandimagelist/lc_glueinsertpoint.pngbin0 -> 945 bytes
-rw-r--r--default_images/res/commandimagelist/lc_gluepercent.pngbin0 -> 1035 bytes
-rw-r--r--default_images/res/commandimagelist/lc_gluevertalignbottom.pngbin0 -> 900 bytes
-rw-r--r--default_images/res/commandimagelist/lc_gluevertaligncenter.pngbin0 -> 818 bytes
-rw-r--r--default_images/res/commandimagelist/lc_gluevertaligntop.pngbin0 -> 897 bytes
-rw-r--r--default_images/res/commandimagelist/lc_goalseekdialog.pngbin0 -> 1271 bytes
-rw-r--r--default_images/res/commandimagelist/lc_gotoend.pngbin0 -> 964 bytes
-rw-r--r--default_images/res/commandimagelist/lc_gotoendofdoc.pngbin0 -> 1057 bytes
-rw-r--r--default_images/res/commandimagelist/lc_gotostartofdoc.pngbin0 -> 1103 bytes
-rw-r--r--default_images/res/commandimagelist/lc_gotostartoftable.pngbin0 -> 943 bytes
-rw-r--r--default_images/res/commandimagelist/lc_grafattrcrop.pngbin0 -> 1946 bytes
-rw-r--r--default_images/res/commandimagelist/lc_grafblue.pngbin0 -> 843 bytes
-rw-r--r--default_images/res/commandimagelist/lc_grafcontrast.pngbin0 -> 1202 bytes
-rw-r--r--default_images/res/commandimagelist/lc_grafgamma.pngbin0 -> 1387 bytes
-rw-r--r--default_images/res/commandimagelist/lc_grafgreen.pngbin0 -> 847 bytes
-rw-r--r--default_images/res/commandimagelist/lc_grafinvert.pngbin0 -> 744 bytes
-rw-r--r--default_images/res/commandimagelist/lc_grafluminance.pngbin0 -> 1339 bytes
-rw-r--r--default_images/res/commandimagelist/lc_grafmode.pngbin0 -> 1131 bytes
-rw-r--r--default_images/res/commandimagelist/lc_grafred.pngbin0 -> 828 bytes
-rw-r--r--default_images/res/commandimagelist/lc_graftransparence.pngbin0 -> 895 bytes
-rw-r--r--default_images/res/commandimagelist/lc_graphic.pngbin0 -> 1102 bytes
-rw-r--r--default_images/res/commandimagelist/lc_graphicfilterinvert.pngbin0 -> 744 bytes
-rw-r--r--default_images/res/commandimagelist/lc_graphicfiltermosaic.pngbin0 -> 382 bytes
-rw-r--r--default_images/res/commandimagelist/lc_graphicfilterpopart.pngbin0 -> 439 bytes
-rw-r--r--default_images/res/commandimagelist/lc_graphicfilterposter.pngbin0 -> 1359 bytes
-rw-r--r--default_images/res/commandimagelist/lc_graphicfilterrelief.pngbin0 -> 1113 bytes
-rw-r--r--default_images/res/commandimagelist/lc_graphicfilterremovenoise.pngbin0 -> 875 bytes
-rw-r--r--default_images/res/commandimagelist/lc_graphicfiltersepia.pngbin0 -> 1331 bytes
-rw-r--r--default_images/res/commandimagelist/lc_graphicfiltersharpen.pngbin0 -> 701 bytes
-rw-r--r--default_images/res/commandimagelist/lc_graphicfiltersmooth.pngbin0 -> 792 bytes
-rw-r--r--default_images/res/commandimagelist/lc_graphicfiltersobel.pngbin0 -> 588 bytes
-rw-r--r--default_images/res/commandimagelist/lc_graphicfiltersolarize.pngbin0 -> 1053 bytes
-rw-r--r--default_images/res/commandimagelist/lc_graphicfiltertoolbox.pngbin0 -> 1005 bytes
-rw-r--r--default_images/res/commandimagelist/lc_greatestheight.pngbin0 -> 945 bytes
-rw-r--r--default_images/res/commandimagelist/lc_greatestwidth.pngbin0 -> 790 bytes
-rw-r--r--default_images/res/commandimagelist/lc_grid.pngbin0 -> 558 bytes
-rw-r--r--default_images/res/commandimagelist/lc_griduse.pngbin0 -> 711 bytes
-rw-r--r--default_images/res/commandimagelist/lc_gridvisible.pngbin0 -> 398 bytes
-rw-r--r--default_images/res/commandimagelist/lc_group.pngbin0 -> 631 bytes
-rw-r--r--default_images/res/commandimagelist/lc_groupbox.pngbin0 -> 891 bytes
-rw-r--r--default_images/res/commandimagelist/lc_grow.pngbin0 -> 1456 bytes
-rw-r--r--default_images/res/commandimagelist/lc_halfsphere.pngbin0 -> 1570 bytes
-rw-r--r--default_images/res/commandimagelist/lc_handlesdraft.pngbin0 -> 497 bytes
-rw-r--r--default_images/res/commandimagelist/lc_help.pngbin0 -> 1446 bytes
-rw-r--r--default_images/res/commandimagelist/lc_helpannotate.pngbin0 -> 923 bytes
-rw-r--r--default_images/res/commandimagelist/lc_helpbookmark.pngbin0 -> 718 bytes
-rw-r--r--default_images/res/commandimagelist/lc_helpdownload.pngbin0 -> 276 bytes
-rw-r--r--default_images/res/commandimagelist/lc_helperdialog.pngbin0 -> 1828 bytes
-rw-r--r--default_images/res/commandimagelist/lc_helpindex.pngbin0 -> 1828 bytes
-rw-r--r--default_images/res/commandimagelist/lc_helplinesmove.pngbin0 -> 758 bytes
-rw-r--r--default_images/res/commandimagelist/lc_helplinesuse.pngbin0 -> 793 bytes
-rw-r--r--default_images/res/commandimagelist/lc_helplinesvisible.pngbin0 -> 504 bytes
-rw-r--r--default_images/res/commandimagelist/lc_helpmenu.pngbin0 -> 1623 bytes
-rw-r--r--default_images/res/commandimagelist/lc_helpsearch.pngbin0 -> 1005 bytes
-rw-r--r--default_images/res/commandimagelist/lc_helpzoomin.pngbin0 -> 1425 bytes
-rw-r--r--default_images/res/commandimagelist/lc_helpzoomout.pngbin0 -> 1382 bytes
-rw-r--r--default_images/res/commandimagelist/lc_hfixedline.pngbin0 -> 508 bytes
-rw-r--r--default_images/res/commandimagelist/lc_hideslide.pngbin0 -> 871 bytes
-rw-r--r--default_images/res/commandimagelist/lc_hscrollbar.pngbin0 -> 948 bytes
-rw-r--r--default_images/res/commandimagelist/lc_hyperlinkdialog.pngbin0 -> 2569 bytes
-rw-r--r--default_images/res/commandimagelist/lc_hyphenate.pngbin0 -> 837 bytes
-rw-r--r--default_images/res/commandimagelist/lc_hyphenation.pngbin0 -> 837 bytes
-rw-r--r--default_images/res/commandimagelist/lc_imagebutton.pngbin0 -> 945 bytes
-rw-r--r--default_images/res/commandimagelist/lc_imagecontrol.pngbin0 -> 940 bytes
-rw-r--r--default_images/res/commandimagelist/lc_imagemapdialog.pngbin0 -> 1206 bytes
-rwxr-xr-xdefault_images/res/commandimagelist/lc_importdialog.pngbin0 -> 816 bytes
-rw-r--r--default_images/res/commandimagelist/lc_importfromfile.pngbin0 -> 1290 bytes
-rw-r--r--default_images/res/commandimagelist/lc_incrementindent.pngbin0 -> 843 bytes
-rw-r--r--default_images/res/commandimagelist/lc_incrementlevel.pngbin0 -> 892 bytes
-rw-r--r--default_images/res/commandimagelist/lc_incrementsublevels.pngbin0 -> 1133 bytes
-rw-r--r--default_images/res/commandimagelist/lc_inscellsctrl.pngbin0 -> 841 bytes
-rw-r--r--default_images/res/commandimagelist/lc_insertannotation.pngbin0 -> 4286 bytes
-rw-r--r--default_images/res/commandimagelist/lc_insertauthorfield.pngbin0 -> 1319 bytes
-rw-r--r--default_images/res/commandimagelist/lc_insertavmedia.pngbin0 -> 1001 bytes
-rw-r--r--default_images/res/commandimagelist/lc_insertbookmark.pngbin0 -> 1328 bytes
-rw-r--r--default_images/res/commandimagelist/lc_insertcaptiondialog.pngbin0 -> 675 bytes
-rw-r--r--default_images/res/commandimagelist/lc_insertcellsdown.pngbin0 -> 1026 bytes
-rw-r--r--default_images/res/commandimagelist/lc_insertcellsright.pngbin0 -> 962 bytes
-rw-r--r--default_images/res/commandimagelist/lc_insertcolumns.pngbin0 -> 901 bytes
-rw-r--r--default_images/res/commandimagelist/lc_insertctrl.pngbin0 -> 495 bytes
-rw-r--r--default_images/res/commandimagelist/lc_insertcurrencyfield.pngbin0 -> 1219 bytes
-rw-r--r--default_images/res/commandimagelist/lc_insertdatefield.pngbin0 -> 818 bytes
-rw-r--r--default_images/res/commandimagelist/lc_insertdoc.pngbin0 -> 1244 bytes
-rw-r--r--default_images/res/commandimagelist/lc_insertdraw.pngbin0 -> 1103 bytes
-rw-r--r--default_images/res/commandimagelist/lc_insertedit.pngbin0 -> 895 bytes
-rw-r--r--default_images/res/commandimagelist/lc_insertendnote.pngbin0 -> 1218 bytes
-rw-r--r--default_images/res/commandimagelist/lc_insertfield.pngbin0 -> 778 bytes
-rw-r--r--default_images/res/commandimagelist/lc_insertfieldctrl.pngbin0 -> 778 bytes
-rw-r--r--default_images/res/commandimagelist/lc_insertfilecontrol.pngbin0 -> 1037 bytes
-rw-r--r--default_images/res/commandimagelist/lc_insertfixedtext.pngbin0 -> 635 bytes
-rw-r--r--default_images/res/commandimagelist/lc_insertfootnote.pngbin0 -> 1266 bytes
-rw-r--r--default_images/res/commandimagelist/lc_insertformattedfield.pngbin0 -> 870 bytes
-rw-r--r--default_images/res/commandimagelist/lc_insertformula.pngbin0 -> 1116 bytes
-rw-r--r--default_images/res/commandimagelist/lc_insertframe.pngbin0 -> 624 bytes
-rw-r--r--default_images/res/commandimagelist/lc_insertframeinteract.pngbin0 -> 624 bytes
-rw-r--r--default_images/res/commandimagelist/lc_insertframeinteractnocolumns.pngbin0 -> 624 bytes
-rw-r--r--default_images/res/commandimagelist/lc_insertgraphic.pngbin0 -> 1261 bytes
-rw-r--r--default_images/res/commandimagelist/lc_inserthyperlink.pngbin0 -> 1553 bytes
-rw-r--r--default_images/res/commandimagelist/lc_insertimagecontrol.pngbin0 -> 940 bytes
-rw-r--r--default_images/res/commandimagelist/lc_insertindexesentry.pngbin0 -> 799 bytes
-rw-r--r--default_images/res/commandimagelist/lc_insertlistbox.pngbin0 -> 976 bytes
-rw-r--r--default_images/res/commandimagelist/lc_insertmasterpage.pngbin0 -> 1007 bytes
-rw-r--r--default_images/res/commandimagelist/lc_insertmath.pngbin0 -> 814 bytes
-rw-r--r--default_images/res/commandimagelist/lc_insertneutralparagraph.pngbin0 -> 519 bytes
-rw-r--r--default_images/res/commandimagelist/lc_insertnumericfield.pngbin0 -> 664 bytes
-rw-r--r--default_images/res/commandimagelist/lc_insertobjctrl.pngbin0 -> 994 bytes
-rw-r--r--default_images/res/commandimagelist/lc_insertobject.pngbin0 -> 994 bytes
-rw-r--r--default_images/res/commandimagelist/lc_insertobjectchart.pngbin0 -> 887 bytes
-rw-r--r--default_images/res/commandimagelist/lc_insertobjectdialog.pngbin0 -> 994 bytes
-rw-r--r--default_images/res/commandimagelist/lc_insertobjectfloatingframe.pngbin0 -> 525 bytes
-rw-r--r--default_images/res/commandimagelist/lc_insertobjectstarmath.pngbin0 -> 814 bytes
-rw-r--r--default_images/res/commandimagelist/lc_insertpage.pngbin0 -> 4241 bytes
-rw-r--r--default_images/res/commandimagelist/lc_insertpagecountfield.pngbin0 -> 1263 bytes
-rw-r--r--default_images/res/commandimagelist/lc_insertpagenumberfield.pngbin0 -> 996 bytes
-rw-r--r--default_images/res/commandimagelist/lc_insertpatternfield.pngbin0 -> 832 bytes
-rw-r--r--default_images/res/commandimagelist/lc_insertplugin.pngbin0 -> 1337 bytes
-rw-r--r--default_images/res/commandimagelist/lc_insertpushbutton.pngbin0 -> 688 bytes
-rw-r--r--default_images/res/commandimagelist/lc_insertreferencefield.pngbin0 -> 962 bytes
-rw-r--r--default_images/res/commandimagelist/lc_insertrows.pngbin0 -> 745 bytes
-rw-r--r--default_images/res/commandimagelist/lc_insertsection.pngbin0 -> 675 bytes
-rw-r--r--default_images/res/commandimagelist/lc_insertsound.pngbin0 -> 1024 bytes
-rw-r--r--default_images/res/commandimagelist/lc_insertspreadsheet.pngbin0 -> 558 bytes
-rw-r--r--default_images/res/commandimagelist/lc_insertsymbol.pngbin0 -> 1739 bytes
-rw-r--r--default_images/res/commandimagelist/lc_inserttable.pngbin0 -> 558 bytes
-rw-r--r--default_images/res/commandimagelist/lc_inserttextframe.pngbin0 -> 624 bytes
-rw-r--r--default_images/res/commandimagelist/lc_inserttimefield.pngbin0 -> 1983 bytes
-rw-r--r--default_images/res/commandimagelist/lc_inserttitlefield.pngbin0 -> 702 bytes
-rw-r--r--default_images/res/commandimagelist/lc_inserttoolbox.pngbin0 -> 1290 bytes
-rw-r--r--default_images/res/commandimagelist/lc_inserttopicfield.pngbin0 -> 749 bytes
-rw-r--r--default_images/res/commandimagelist/lc_inserttreecontrol.pngbin0 -> 589 bytes
-rw-r--r--default_images/res/commandimagelist/lc_insertvideo.pngbin0 -> 949 bytes
-rw-r--r--default_images/res/commandimagelist/lc_insobjctrl.pngbin0 -> 994 bytes
-rw-r--r--default_images/res/commandimagelist/lc_interactivegradient.pngbin0 -> 1655 bytes
-rw-r--r--default_images/res/commandimagelist/lc_interactivetransparence.pngbin0 -> 1161 bytes
-rw-r--r--default_images/res/commandimagelist/lc_internetonline.pngbin0 -> 276 bytes
-rw-r--r--default_images/res/commandimagelist/lc_italic.pngbin0 -> 570 bytes
-rw-r--r--default_images/res/commandimagelist/lc_justifypara.pngbin0 -> 479 bytes
-rw-r--r--default_images/res/commandimagelist/lc_label.pngbin0 -> 635 bytes
-rw-r--r--default_images/res/commandimagelist/lc_lastpage.pngbin0 -> 1057 bytes
-rw-r--r--default_images/res/commandimagelist/lc_lastrecord.pngbin0 -> 810 bytes
-rw-r--r--default_images/res/commandimagelist/lc_leaveallgroups.pngbin0 -> 1187 bytes
-rw-r--r--default_images/res/commandimagelist/lc_leavegroup.pngbin0 -> 1024 bytes
-rw-r--r--default_images/res/commandimagelist/lc_leftpara.pngbin0 -> 487 bytes
-rw-r--r--default_images/res/commandimagelist/lc_line.pngbin0 -> 792 bytes
-rw-r--r--default_images/res/commandimagelist/lc_line_diagonal.pngbin0 -> 633 bytes
-rw-r--r--default_images/res/commandimagelist/lc_linearrowcircle.pngbin0 -> 774 bytes
-rw-r--r--default_images/res/commandimagelist/lc_linearrowend.pngbin0 -> 616 bytes
-rw-r--r--default_images/res/commandimagelist/lc_linearrows.pngbin0 -> 723 bytes
-rw-r--r--default_images/res/commandimagelist/lc_linearrowsquare.pngbin0 -> 644 bytes
-rw-r--r--default_images/res/commandimagelist/lc_linearrowstart.pngbin0 -> 602 bytes
-rw-r--r--default_images/res/commandimagelist/lc_linecirclearrow.pngbin0 -> 761 bytes
-rw-r--r--default_images/res/commandimagelist/lc_lineendstyle.pngbin0 -> 888 bytes
-rw-r--r--default_images/res/commandimagelist/lc_linesquarearrow.pngbin0 -> 647 bytes
-rw-r--r--default_images/res/commandimagelist/lc_linestyle.pngbin0 -> 339 bytes
-rw-r--r--default_images/res/commandimagelist/lc_linetoolbox.pngbin0 -> 1115 bytes
-rw-r--r--default_images/res/commandimagelist/lc_linewidth.pngbin0 -> 1133 bytes
-rw-r--r--default_images/res/commandimagelist/lc_listbox.pngbin0 -> 976 bytes
-rw-r--r--default_images/res/commandimagelist/lc_loadbasic.pngbin0 -> 779 bytes
-rw-r--r--default_images/res/commandimagelist/lc_macrorecorder.pngbin0 -> 1264 bytes
-rw-r--r--default_images/res/commandimagelist/lc_macrorecordingfloat.pngbin0 -> 276 bytes
-rw-r--r--default_images/res/commandimagelist/lc_mailwindow.pngbin0 -> 276 bytes
-rw-r--r--default_images/res/commandimagelist/lc_managebreakpoints.pngbin0 -> 1386 bytes
-rw-r--r--default_images/res/commandimagelist/lc_managelanguage.pngbin0 -> 1828 bytes
-rw-r--r--default_images/res/commandimagelist/lc_marks.pngbin0 -> 532 bytes
-rw-r--r--default_images/res/commandimagelist/lc_matchgroup.pngbin0 -> 800 bytes
-rw-r--r--default_images/res/commandimagelist/lc_measureline.pngbin0 -> 818 bytes
-rw-r--r--default_images/res/commandimagelist/lc_mergecells.pngbin0 -> 591 bytes
-rw-r--r--default_images/res/commandimagelist/lc_mergedialog.pngbin0 -> 1062 bytes
-rw-r--r--default_images/res/commandimagelist/lc_mirror.pngbin0 -> 1909 bytes
-rw-r--r--default_images/res/commandimagelist/lc_modifyframe.pngbin0 -> 1163 bytes
-rw-r--r--default_images/res/commandimagelist/lc_modifypage.pngbin0 -> 768 bytes
-rw-r--r--default_images/res/commandimagelist/lc_moduledialog.pngbin0 -> 1196 bytes
-rw-r--r--default_images/res/commandimagelist/lc_morecontrols.pngbin0 -> 841 bytes
-rw-r--r--default_images/res/commandimagelist/lc_movedown.pngbin0 -> 921 bytes
-rw-r--r--default_images/res/commandimagelist/lc_movedownsubitems.pngbin0 -> 1150 bytes
-rw-r--r--default_images/res/commandimagelist/lc_moveup.pngbin0 -> 923 bytes
-rw-r--r--default_images/res/commandimagelist/lc_moveupsubitems.pngbin0 -> 1181 bytes
-rw-r--r--default_images/res/commandimagelist/lc_navigationbar.pngbin0 -> 927 bytes
-rw-r--r--default_images/res/commandimagelist/lc_navigator.pngbin0 -> 1692 bytes
-rw-r--r--default_images/res/commandimagelist/lc_newarrangement.pngbin0 -> 1173 bytes
-rw-r--r--default_images/res/commandimagelist/lc_newdoc.pngbin0 -> 666 bytes
-rw-r--r--default_images/res/commandimagelist/lc_newrecord.pngbin0 -> 1001 bytes
-rwxr-xr-xdefault_images/res/commandimagelist/lc_nextannotation.pngbin0 -> 4477 bytes
-rw-r--r--default_images/res/commandimagelist/lc_nextpage.pngbin0 -> 1078 bytes
-rw-r--r--default_images/res/commandimagelist/lc_nextrecord.pngbin0 -> 734 bytes
-rw-r--r--default_images/res/commandimagelist/lc_no.pngbin0 -> 1479 bytes
-rw-r--r--default_images/res/commandimagelist/lc_numberformatcurrency.pngbin0 -> 1219 bytes
-rw-r--r--default_images/res/commandimagelist/lc_numberformatdate.pngbin0 -> 818 bytes
-rw-r--r--default_images/res/commandimagelist/lc_numberformatdecdecimals.pngbin0 -> 1078 bytes
-rw-r--r--default_images/res/commandimagelist/lc_numberformatdecimal.pngbin0 -> 671 bytes
-rw-r--r--default_images/res/commandimagelist/lc_numberformatincdecimals.pngbin0 -> 937 bytes
-rw-r--r--default_images/res/commandimagelist/lc_numberformatpercent.pngbin0 -> 744 bytes
-rw-r--r--default_images/res/commandimagelist/lc_numberformatscientific.pngbin0 -> 662 bytes
-rw-r--r--default_images/res/commandimagelist/lc_numberformatstandard.pngbin0 -> 1063 bytes
-rw-r--r--default_images/res/commandimagelist/lc_numberingstart.pngbin0 -> 1130 bytes
-rw-r--r--default_images/res/commandimagelist/lc_numericfield.pngbin0 -> 664 bytes
-rw-r--r--default_images/res/commandimagelist/lc_objectalign.pngbin0 -> 829 bytes
-rw-r--r--default_images/res/commandimagelist/lc_objectalignleft.pngbin0 -> 829 bytes
-rw-r--r--default_images/res/commandimagelist/lc_objectalignright.pngbin0 -> 848 bytes
-rw-r--r--default_images/res/commandimagelist/lc_objectcatalog.pngbin0 -> 1261 bytes
-rw-r--r--default_images/res/commandimagelist/lc_objectposition.pngbin0 -> 625 bytes
-rw-r--r--default_images/res/commandimagelist/lc_objects3dtoolbox.pngbin0 -> 944 bytes
-rw-r--r--default_images/res/commandimagelist/lc_ok.pngbin0 -> 1015 bytes
-rw-r--r--default_images/res/commandimagelist/lc_open.pngbin0 -> 1188 bytes
-rw-r--r--default_images/res/commandimagelist/lc_openreadonly.pngbin0 -> 1319 bytes
-rw-r--r--default_images/res/commandimagelist/lc_openurl.pngbin0 -> 1553 bytes
-rw-r--r--default_images/res/commandimagelist/lc_optimizetable.pngbin0 -> 876 bytes
-rw-r--r--default_images/res/commandimagelist/lc_ordercrit.pngbin0 -> 629 bytes
-rw-r--r--default_images/res/commandimagelist/lc_outlinebullet.pngbin0 -> 934 bytes
-rw-r--r--default_images/res/commandimagelist/lc_outlinecollapse.pngbin0 -> 790 bytes
-rw-r--r--default_images/res/commandimagelist/lc_outlinecollapseall.pngbin0 -> 796 bytes
-rw-r--r--default_images/res/commandimagelist/lc_outlinedown.pngbin0 -> 921 bytes
-rw-r--r--default_images/res/commandimagelist/lc_outlineexpand.pngbin0 -> 776 bytes
-rw-r--r--default_images/res/commandimagelist/lc_outlineexpandall.pngbin0 -> 767 bytes
-rw-r--r--default_images/res/commandimagelist/lc_outlinefont.pngbin0 -> 1096 bytes
-rw-r--r--default_images/res/commandimagelist/lc_outlineformat.pngbin0 -> 1421 bytes
-rw-r--r--default_images/res/commandimagelist/lc_outlineleft.pngbin0 -> 892 bytes
-rw-r--r--default_images/res/commandimagelist/lc_outlineright.pngbin0 -> 866 bytes
-rw-r--r--default_images/res/commandimagelist/lc_outlineup.pngbin0 -> 923 bytes
-rw-r--r--default_images/res/commandimagelist/lc_overline.pngbin0 -> 470 bytes
-rw-r--r--default_images/res/commandimagelist/lc_pagedown.pngbin0 -> 1078 bytes
-rw-r--r--default_images/res/commandimagelist/lc_pageup.pngbin0 -> 1103 bytes
-rw-r--r--default_images/res/commandimagelist/lc_paragraphdialog.pngbin0 -> 965 bytes
-rw-r--r--default_images/res/commandimagelist/lc_paralefttoright.pngbin0 -> 932 bytes
-rw-r--r--default_images/res/commandimagelist/lc_pararighttoleft.pngbin0 -> 940 bytes
-rw-r--r--default_images/res/commandimagelist/lc_paraspacedecrease.pngbin0 -> 842 bytes
-rw-r--r--default_images/res/commandimagelist/lc_paraspaceincrease.pngbin0 -> 852 bytes
-rw-r--r--default_images/res/commandimagelist/lc_paste.pngbin0 -> 1220 bytes
-rw-r--r--default_images/res/commandimagelist/lc_patternfield.pngbin0 -> 832 bytes
-rw-r--r--default_images/res/commandimagelist/lc_pickthrough.pngbin0 -> 1425 bytes
-rw-r--r--default_images/res/commandimagelist/lc_pie.pngbin0 -> 1025 bytes
-rw-r--r--default_images/res/commandimagelist/lc_pie_unfilled.pngbin0 -> 1078 bytes
-rw-r--r--default_images/res/commandimagelist/lc_playmacro.pngbin0 -> 276 bytes
-rw-r--r--default_images/res/commandimagelist/lc_pluginsactive.pngbin0 -> 1337 bytes
-rw-r--r--default_images/res/commandimagelist/lc_polygon.pngbin0 -> 1104 bytes
-rw-r--r--default_images/res/commandimagelist/lc_polygon_diagonal.pngbin0 -> 601 bytes
-rw-r--r--default_images/res/commandimagelist/lc_polygon_diagonal_unfilled.pngbin0 -> 534 bytes
-rw-r--r--default_images/res/commandimagelist/lc_polygon_unfilled.pngbin0 -> 1036 bytes
-rw-r--r--default_images/res/commandimagelist/lc_presentation.pngbin0 -> 961 bytes
-rw-r--r--default_images/res/commandimagelist/lc_presentationlayout.pngbin0 -> 1249 bytes
-rw-r--r--default_images/res/commandimagelist/lc_preview.pngbin0 -> 276 bytes
-rw-r--r--default_images/res/commandimagelist/lc_previewprintoptions.pngbin0 -> 1061 bytes
-rw-r--r--default_images/res/commandimagelist/lc_previewzoom.pngbin0 -> 1348 bytes
-rwxr-xr-xdefault_images/res/commandimagelist/lc_previousannotation.pngbin0 -> 4492 bytes
-rw-r--r--default_images/res/commandimagelist/lc_previouspage.pngbin0 -> 1103 bytes
-rw-r--r--default_images/res/commandimagelist/lc_prevrecord.pngbin0 -> 720 bytes
-rw-r--r--default_images/res/commandimagelist/lc_print.pngbin0 -> 875 bytes
-rw-r--r--default_images/res/commandimagelist/lc_printdefault.pngbin0 -> 875 bytes
-rw-r--r--default_images/res/commandimagelist/lc_printersetup.pngbin0 -> 1061 bytes
-rw-r--r--default_images/res/commandimagelist/lc_printlayout.pngbin0 -> 1150 bytes
-rw-r--r--default_images/res/commandimagelist/lc_printpagepreview.pngbin0 -> 901 bytes
-rw-r--r--default_images/res/commandimagelist/lc_printpreview.pngbin0 -> 1086 bytes
-rw-r--r--default_images/res/commandimagelist/lc_progressbar.pngbin0 -> 578 bytes
-rw-r--r--default_images/res/commandimagelist/lc_pushbutton.pngbin0 -> 688 bytes
-rw-r--r--default_images/res/commandimagelist/lc_quickedit.pngbin0 -> 1021 bytes
-rw-r--r--default_images/res/commandimagelist/lc_quit.pngbin0 -> 1106 bytes
-rw-r--r--default_images/res/commandimagelist/lc_radiobutton.pngbin0 -> 1040 bytes
-rw-r--r--default_images/res/commandimagelist/lc_recsave.pngbin0 -> 1002 bytes
-rw-r--r--default_images/res/commandimagelist/lc_recsearch.pngbin0 -> 1005 bytes
-rw-r--r--default_images/res/commandimagelist/lc_rect.pngbin0 -> 507 bytes
-rw-r--r--default_images/res/commandimagelist/lc_rect_rounded.pngbin0 -> 711 bytes
-rw-r--r--default_images/res/commandimagelist/lc_rect_rounded_unfilled.pngbin0 -> 761 bytes
-rw-r--r--default_images/res/commandimagelist/lc_rect_unfilled.pngbin0 -> 449 bytes
-rw-r--r--default_images/res/commandimagelist/lc_rectangletoolbox.pngbin0 -> 507 bytes
-rw-r--r--default_images/res/commandimagelist/lc_recundo.pngbin0 -> 1876 bytes
-rw-r--r--default_images/res/commandimagelist/lc_redo.pngbin0 -> 1549 bytes
-rw-r--r--default_images/res/commandimagelist/lc_refresh.pngbin0 -> 1603 bytes
-rw-r--r--default_images/res/commandimagelist/lc_refreshformcontrol.pngbin0 -> 1698 bytes
-rw-r--r--default_images/res/commandimagelist/lc_rehearsetimings.pngbin0 -> 1486 bytes
-rw-r--r--default_images/res/commandimagelist/lc_reload.pngbin0 -> 1603 bytes
-rw-r--r--default_images/res/commandimagelist/lc_removebullets.pngbin0 -> 485 bytes
-rw-r--r--default_images/res/commandimagelist/lc_removefilter.pngbin0 -> 1084 bytes
-rw-r--r--default_images/res/commandimagelist/lc_removefiltersort.pngbin0 -> 1084 bytes
-rw-r--r--default_images/res/commandimagelist/lc_renamemasterpage.pngbin0 -> 936 bytes
-rw-r--r--default_images/res/commandimagelist/lc_repeat.pngbin0 -> 1624 bytes
-rw-r--r--default_images/res/commandimagelist/lc_reportnavigator.pngbin0 -> 1548 bytes
-rw-r--r--default_images/res/commandimagelist/lc_reverseorder.pngbin0 -> 1240 bytes
-rw-r--r--default_images/res/commandimagelist/lc_rightpara.pngbin0 -> 486 bytes
-rw-r--r--default_images/res/commandimagelist/lc_rulerrows.pngbin0 -> 1724 bytes
-rw-r--r--default_images/res/commandimagelist/lc_rulerrowsvertical.pngbin0 -> 1763 bytes
-rw-r--r--default_images/res/commandimagelist/lc_runbasic.pngbin0 -> 992 bytes
-rw-r--r--default_images/res/commandimagelist/lc_save.pngbin0 -> 776 bytes
-rw-r--r--default_images/res/commandimagelist/lc_saveas.pngbin0 -> 846 bytes
-rw-r--r--default_images/res/commandimagelist/lc_saveastemplate.pngbin0 -> 995 bytes
-rw-r--r--default_images/res/commandimagelist/lc_savebasicas.pngbin0 -> 906 bytes
-rw-r--r--default_images/res/commandimagelist/lc_sbabrwinsert.pngbin0 -> 778 bytes
-rw-r--r--default_images/res/commandimagelist/lc_sbaexecutesql.pngbin0 -> 1190 bytes
-rw-r--r--default_images/res/commandimagelist/lc_sbanativesql.pngbin0 -> 1007 bytes
-rw-r--r--default_images/res/commandimagelist/lc_scaletext.pngbin0 -> 1431 bytes
-rw-r--r--default_images/res/commandimagelist/lc_scrollbar.pngbin0 -> 1008 bytes
-rw-r--r--default_images/res/commandimagelist/lc_searchdialog.pngbin0 -> 1005 bytes
-rwxr-xr-xdefault_images/res/commandimagelist/lc_sectionalignbottom.pngbin0 -> 770 bytes
-rwxr-xr-xdefault_images/res/commandimagelist/lc_sectionalignleft.pngbin0 -> 874 bytes
-rwxr-xr-xdefault_images/res/commandimagelist/lc_sectionalignright.pngbin0 -> 874 bytes
-rwxr-xr-xdefault_images/res/commandimagelist/lc_sectionaligntop.pngbin0 -> 770 bytes
-rw-r--r--default_images/res/commandimagelist/lc_sectionshrink.pngbin0 -> 827 bytes
-rw-r--r--default_images/res/commandimagelist/lc_sectionshrinkbottom.pngbin0 -> 625 bytes
-rw-r--r--default_images/res/commandimagelist/lc_sectionshrinktop.pngbin0 -> 659 bytes
-rw-r--r--default_images/res/commandimagelist/lc_selectall.pngbin0 -> 815 bytes
-rw-r--r--default_images/res/commandimagelist/lc_selectmode.pngbin0 -> 806 bytes
-rw-r--r--default_images/res/commandimagelist/lc_selectobject.pngbin0 -> 806 bytes
-rw-r--r--default_images/res/commandimagelist/lc_selecttable.pngbin0 -> 902 bytes
-rw-r--r--default_images/res/commandimagelist/lc_sendfax.pngbin0 -> 1116 bytes
-rw-r--r--default_images/res/commandimagelist/lc_sendmail.pngbin0 -> 789 bytes
-rw-r--r--default_images/res/commandimagelist/lc_sendtoback.pngbin0 -> 616 bytes
-rw-r--r--default_images/res/commandimagelist/lc_setborderstyle.pngbin0 -> 459 bytes
-rw-r--r--default_images/res/commandimagelist/lc_setdocumentproperties.pngbin0 -> 981 bytes
-rw-r--r--default_images/res/commandimagelist/lc_setobjecttobackground.pngbin0 -> 828 bytes
-rw-r--r--default_images/res/commandimagelist/lc_setobjecttoforeground.pngbin0 -> 816 bytes
-rw-r--r--default_images/res/commandimagelist/lc_setoptimalcolumnwidth.pngbin0 -> 685 bytes
-rw-r--r--default_images/res/commandimagelist/lc_setoptimalcolumnwidthdirect.pngbin0 -> 685 bytes
-rw-r--r--default_images/res/commandimagelist/lc_setoptimalrowheight.pngbin0 -> 576 bytes
-rw-r--r--default_images/res/commandimagelist/lc_shadowcursor.pngbin0 -> 931 bytes
-rw-r--r--default_images/res/commandimagelist/lc_shadowed.pngbin0 -> 835 bytes
-rw-r--r--default_images/res/commandimagelist/lc_shear.pngbin0 -> 617 bytes
-rw-r--r--default_images/res/commandimagelist/lc_shell3d.pngbin0 -> 1424 bytes
-rwxr-xr-xdefault_images/res/commandimagelist/lc_showannotation.pngbin0 -> 4154 bytes
-rw-r--r--default_images/res/commandimagelist/lc_showbookview.pngbin0 -> 707 bytes
-rw-r--r--default_images/res/commandimagelist/lc_showbrowser.pngbin0 -> 1095 bytes
-rw-r--r--default_images/res/commandimagelist/lc_showdatanavigator.pngbin0 -> 932 bytes
-rw-r--r--default_images/res/commandimagelist/lc_showfmexplorer.pngbin0 -> 1474 bytes
-rw-r--r--default_images/res/commandimagelist/lc_showmultiplepages.pngbin0 -> 559 bytes
-rw-r--r--default_images/res/commandimagelist/lc_showpropbrowser.pngbin0 -> 1095 bytes
-rw-r--r--default_images/res/commandimagelist/lc_showslide.pngbin0 -> 898 bytes
-rw-r--r--default_images/res/commandimagelist/lc_showtwopages.pngbin0 -> 613 bytes
-rw-r--r--default_images/res/commandimagelist/lc_shrink.pngbin0 -> 1316 bytes
-rw-r--r--default_images/res/commandimagelist/lc_smallestheight.pngbin0 -> 868 bytes
-rw-r--r--default_images/res/commandimagelist/lc_smallestwidth.pngbin0 -> 800 bytes
-rw-r--r--default_images/res/commandimagelist/lc_snapborder.pngbin0 -> 1026 bytes
-rw-r--r--default_images/res/commandimagelist/lc_snapframe.pngbin0 -> 778 bytes
-rw-r--r--default_images/res/commandimagelist/lc_snappoints.pngbin0 -> 767 bytes
-rw-r--r--default_images/res/commandimagelist/lc_solidcreate.pngbin0 -> 1061 bytes
-rw-r--r--default_images/res/commandimagelist/lc_sortascending.pngbin0 -> 968 bytes
-rw-r--r--default_images/res/commandimagelist/lc_sortdescending.pngbin0 -> 951 bytes
-rw-r--r--default_images/res/commandimagelist/lc_sortdown.pngbin0 -> 951 bytes
-rw-r--r--default_images/res/commandimagelist/lc_sortup.pngbin0 -> 968 bytes
-rw-r--r--default_images/res/commandimagelist/lc_sourceview.pngbin0 -> 1063 bytes
-rw-r--r--default_images/res/commandimagelist/lc_spacepara1.pngbin0 -> 479 bytes
-rw-r--r--default_images/res/commandimagelist/lc_spacepara15.pngbin0 -> 447 bytes
-rw-r--r--default_images/res/commandimagelist/lc_spacepara2.pngbin0 -> 417 bytes
-rw-r--r--default_images/res/commandimagelist/lc_spelldialog.pngbin0 -> 1159 bytes
-rw-r--r--default_images/res/commandimagelist/lc_spelling.pngbin0 -> 1159 bytes
-rw-r--r--default_images/res/commandimagelist/lc_spellingandgrammardialog.pngbin0 -> 1159 bytes
-rw-r--r--default_images/res/commandimagelist/lc_spellonline.pngbin0 -> 754 bytes
-rw-r--r--default_images/res/commandimagelist/lc_sphere.pngbin0 -> 1816 bytes
-rw-r--r--default_images/res/commandimagelist/lc_spinbutton.pngbin0 -> 978 bytes
-rw-r--r--default_images/res/commandimagelist/lc_splitcell.pngbin0 -> 595 bytes
-rw-r--r--default_images/res/commandimagelist/lc_splithorizontal.pngbin0 -> 276 bytes
-rw-r--r--default_images/res/commandimagelist/lc_splitparenthorizontal.pngbin0 -> 276 bytes
-rw-r--r--default_images/res/commandimagelist/lc_splitparentvertical.pngbin0 -> 161 bytes
-rw-r--r--default_images/res/commandimagelist/lc_splitvertical.pngbin0 -> 276 bytes
-rw-r--r--default_images/res/commandimagelist/lc_square.pngbin0 -> 566 bytes
-rw-r--r--default_images/res/commandimagelist/lc_square_rounded.pngbin0 -> 782 bytes
-rw-r--r--default_images/res/commandimagelist/lc_square_rounded_unfilled.pngbin0 -> 784 bytes
-rw-r--r--default_images/res/commandimagelist/lc_square_unfilled.pngbin0 -> 488 bytes
-rw-r--r--default_images/res/commandimagelist/lc_starchartdialog.pngbin0 -> 887 bytes
-rw-r--r--default_images/res/commandimagelist/lc_starshapes.bang.pngbin0 -> 1450 bytes
-rw-r--r--default_images/res/commandimagelist/lc_starshapes.concave-star6.pngbin0 -> 1233 bytes
-rw-r--r--default_images/res/commandimagelist/lc_starshapes.doorplate.pngbin0 -> 1079 bytes
-rw-r--r--default_images/res/commandimagelist/lc_starshapes.horizontal-scroll.pngbin0 -> 968 bytes
-rw-r--r--default_images/res/commandimagelist/lc_starshapes.pngbin0 -> 1182 bytes
-rw-r--r--default_images/res/commandimagelist/lc_starshapes.signet.pngbin0 -> 1459 bytes
-rw-r--r--default_images/res/commandimagelist/lc_starshapes.star12.pngbin0 -> 1466 bytes
-rw-r--r--default_images/res/commandimagelist/lc_starshapes.star24.pngbin0 -> 1739 bytes
-rw-r--r--default_images/res/commandimagelist/lc_starshapes.star4.pngbin0 -> 981 bytes
-rw-r--r--default_images/res/commandimagelist/lc_starshapes.star5.pngbin0 -> 1182 bytes
-rw-r--r--default_images/res/commandimagelist/lc_starshapes.star6.pngbin0 -> 1068 bytes
-rw-r--r--default_images/res/commandimagelist/lc_starshapes.star8.pngbin0 -> 1266 bytes
-rw-r--r--default_images/res/commandimagelist/lc_starshapes.vertical-scroll.pngbin0 -> 961 bytes
-rw-r--r--default_images/res/commandimagelist/lc_strikeout.pngbin0 -> 706 bytes
-rw-r--r--default_images/res/commandimagelist/lc_styleapply.pngbin0 -> 1133 bytes
-rw-r--r--default_images/res/commandimagelist/lc_stylenewbyexample.pngbin0 -> 1004 bytes
-rw-r--r--default_images/res/commandimagelist/lc_styleupdatebyexample.pngbin0 -> 276 bytes
-rw-r--r--default_images/res/commandimagelist/lc_subscript.pngbin0 -> 1653 bytes
-rw-r--r--default_images/res/commandimagelist/lc_superscript.pngbin0 -> 1633 bytes
-rw-r--r--default_images/res/commandimagelist/lc_switchcontroldesignmode.pngbin0 -> 1059 bytes
-rw-r--r--default_images/res/commandimagelist/lc_switchxformsdesignmode.pngbin0 -> 1059 bytes
-rw-r--r--default_images/res/commandimagelist/lc_symbolcatalogue.pngbin0 -> 921 bytes
-rw-r--r--default_images/res/commandimagelist/lc_symbolshapes.brace-pair.pngbin0 -> 1211 bytes
-rw-r--r--default_images/res/commandimagelist/lc_symbolshapes.bracket-pair.pngbin0 -> 965 bytes
-rw-r--r--default_images/res/commandimagelist/lc_symbolshapes.cloud.pngbin0 -> 1350 bytes
-rw-r--r--default_images/res/commandimagelist/lc_symbolshapes.diamond-bevel.pngbin0 -> 1417 bytes
-rw-r--r--default_images/res/commandimagelist/lc_symbolshapes.flower.pngbin0 -> 1986 bytes
-rw-r--r--default_images/res/commandimagelist/lc_symbolshapes.forbidden.pngbin0 -> 2002 bytes
-rw-r--r--default_images/res/commandimagelist/lc_symbolshapes.heart.pngbin0 -> 1701 bytes
-rw-r--r--default_images/res/commandimagelist/lc_symbolshapes.left-brace.pngbin0 -> 860 bytes
-rw-r--r--default_images/res/commandimagelist/lc_symbolshapes.left-bracket.pngbin0 -> 687 bytes
-rw-r--r--default_images/res/commandimagelist/lc_symbolshapes.lightning.pngbin0 -> 1148 bytes
-rw-r--r--default_images/res/commandimagelist/lc_symbolshapes.moon.pngbin0 -> 1387 bytes
-rw-r--r--default_images/res/commandimagelist/lc_symbolshapes.octagon-bevel.pngbin0 -> 1325 bytes
-rw-r--r--default_images/res/commandimagelist/lc_symbolshapes.pngbin0 -> 1805 bytes
-rw-r--r--default_images/res/commandimagelist/lc_symbolshapes.puzzle.pngbin0 -> 1335 bytes
-rw-r--r--default_images/res/commandimagelist/lc_symbolshapes.quad-bevel.pngbin0 -> 976 bytes
-rw-r--r--default_images/res/commandimagelist/lc_symbolshapes.right-brace.pngbin0 -> 854 bytes
-rw-r--r--default_images/res/commandimagelist/lc_symbolshapes.right-bracket.pngbin0 -> 686 bytes
-rw-r--r--default_images/res/commandimagelist/lc_symbolshapes.smiley.pngbin0 -> 1805 bytes
-rw-r--r--default_images/res/commandimagelist/lc_symbolshapes.sun.pngbin0 -> 1328 bytes
-rw-r--r--default_images/res/commandimagelist/lc_tabdialog.pngbin0 -> 1345 bytes
-rw-r--r--default_images/res/commandimagelist/lc_tabledesign.pngbin0 -> 1058 bytes
-rw-r--r--default_images/res/commandimagelist/lc_tabledialog.pngbin0 -> 942 bytes
-rw-r--r--default_images/res/commandimagelist/lc_tablemodefix.pngbin0 -> 629 bytes
-rw-r--r--default_images/res/commandimagelist/lc_tablemodefixprop.pngbin0 -> 740 bytes
-rw-r--r--default_images/res/commandimagelist/lc_tablemodevariable.pngbin0 -> 706 bytes
-rw-r--r--default_images/res/commandimagelist/lc_tablesort.pngbin0 -> 629 bytes
-rw-r--r--default_images/res/commandimagelist/lc_testmode.pngbin0 -> 1059 bytes
-rw-r--r--default_images/res/commandimagelist/lc_text.pngbin0 -> 682 bytes
-rw-r--r--default_images/res/commandimagelist/lc_text_marquee.pngbin0 -> 1052 bytes
-rw-r--r--default_images/res/commandimagelist/lc_textdirectionlefttoright.pngbin0 -> 781 bytes
-rw-r--r--default_images/res/commandimagelist/lc_textdirectiontoptobottom.pngbin0 -> 699 bytes
-rw-r--r--default_images/res/commandimagelist/lc_textfittosizetool.pngbin0 -> 1115 bytes
-rw-r--r--default_images/res/commandimagelist/lc_texttoolbox.pngbin0 -> 682 bytes
-rw-r--r--default_images/res/commandimagelist/lc_thesaurus.pngbin0 -> 1407 bytes
-rw-r--r--default_images/res/commandimagelist/lc_thesaurusdialog.pngbin0 -> 1407 bytes
-rw-r--r--default_images/res/commandimagelist/lc_timefield.pngbin0 -> 1983 bytes
-rw-r--r--default_images/res/commandimagelist/lc_toggleanchortype.pngbin0 -> 1049 bytes
-rw-r--r--default_images/res/commandimagelist/lc_toggleaxisdescr.pngbin0 -> 499 bytes
-rw-r--r--default_images/res/commandimagelist/lc_toggleaxistitle.pngbin0 -> 843 bytes
-rw-r--r--default_images/res/commandimagelist/lc_togglebreakpoint.pngbin0 -> 1419 bytes
-rw-r--r--default_images/res/commandimagelist/lc_togglegridhorizontal.pngbin0 -> 525 bytes
-rw-r--r--default_images/res/commandimagelist/lc_togglegridvertical.pngbin0 -> 580 bytes
-rw-r--r--default_images/res/commandimagelist/lc_togglelegend.pngbin0 -> 872 bytes
-rw-r--r--default_images/res/commandimagelist/lc_togglemergecells.pngbin0 -> 591 bytes
-rw-r--r--default_images/res/commandimagelist/lc_toggleobjectbeziermode.pngbin0 -> 692 bytes
-rw-r--r--default_images/res/commandimagelist/lc_toggleobjectrotatemode.pngbin0 -> 1572 bytes
-rw-r--r--default_images/res/commandimagelist/lc_toggletitle.pngbin0 -> 692 bytes
-rw-r--r--default_images/res/commandimagelist/lc_toolsmacroedit.pngbin0 -> 276 bytes
-rw-r--r--default_images/res/commandimagelist/lc_toolsoptions.pngbin0 -> 276 bytes
-rw-r--r--default_images/res/commandimagelist/lc_torus.pngbin0 -> 1520 bytes
-rw-r--r--default_images/res/commandimagelist/lc_transformdialog.pngbin0 -> 1454 bytes
-rw-r--r--default_images/res/commandimagelist/lc_underline.pngbin0 -> 570 bytes
-rw-r--r--default_images/res/commandimagelist/lc_underlinedouble.pngbin0 -> 560 bytes
-rw-r--r--default_images/res/commandimagelist/lc_undo.pngbin0 -> 1569 bytes
-rw-r--r--default_images/res/commandimagelist/lc_ungroup.pngbin0 -> 634 bytes
-rw-r--r--default_images/res/commandimagelist/lc_unhainframes.pngbin0 -> 1267 bytes
-rw-r--r--default_images/res/commandimagelist/lc_upsearch.pngbin0 -> 4288 bytes
-rw-r--r--default_images/res/commandimagelist/lc_urlbutton.pngbin0 -> 276 bytes
-rw-r--r--default_images/res/commandimagelist/lc_usewizards.pngbin0 -> 1266 bytes
-rw-r--r--default_images/res/commandimagelist/lc_verticalcaption.pngbin0 -> 1401 bytes
-rw-r--r--default_images/res/commandimagelist/lc_verticaltext.pngbin0 -> 611 bytes
-rw-r--r--default_images/res/commandimagelist/lc_verticaltextfittosizetool.pngbin0 -> 1260 bytes
-rw-r--r--default_images/res/commandimagelist/lc_vfixedline.pngbin0 -> 597 bytes
-rw-r--r--default_images/res/commandimagelist/lc_view100.pngbin0 -> 1160 bytes
-rw-r--r--default_images/res/commandimagelist/lc_viewdatasourcebrowser.pngbin0 -> 1514 bytes
-rw-r--r--default_images/res/commandimagelist/lc_viewformasgrid.pngbin0 -> 795 bytes
-rw-r--r--default_images/res/commandimagelist/lc_vscrollbar.pngbin0 -> 1008 bytes
-rw-r--r--default_images/res/commandimagelist/lc_window3d.pngbin0 -> 355 bytes
-rw-r--r--default_images/res/commandimagelist/lc_wrapcontour.pngbin0 -> 681 bytes
-rw-r--r--default_images/res/commandimagelist/lc_wrapideal.pngbin0 -> 577 bytes
-rw-r--r--default_images/res/commandimagelist/lc_wrapleft.pngbin0 -> 492 bytes
-rw-r--r--default_images/res/commandimagelist/lc_wrapoff.pngbin0 -> 478 bytes
-rw-r--r--default_images/res/commandimagelist/lc_wrapon.pngbin0 -> 539 bytes
-rw-r--r--default_images/res/commandimagelist/lc_wrapright.pngbin0 -> 518 bytes
-rw-r--r--default_images/res/commandimagelist/lc_wrapthrough.pngbin0 -> 518 bytes
-rw-r--r--default_images/res/commandimagelist/lc_xlinecolor.pngbin0 -> 1133 bytes
-rw-r--r--default_images/res/commandimagelist/lc_xlinestyle.pngbin0 -> 1133 bytes
-rw-r--r--default_images/res/commandimagelist/lc_yes.pngbin0 -> 1443 bytes
-rw-r--r--default_images/res/commandimagelist/lc_zoom.pngbin0 -> 1348 bytes
-rw-r--r--default_images/res/commandimagelist/lc_zoom100percent.pngbin0 -> 1160 bytes
-rw-r--r--default_images/res/commandimagelist/lc_zoomin.pngbin0 -> 1425 bytes
-rw-r--r--default_images/res/commandimagelist/lc_zoomminus.pngbin0 -> 1382 bytes
-rw-r--r--default_images/res/commandimagelist/lc_zoomnext.pngbin0 -> 1845 bytes
-rw-r--r--default_images/res/commandimagelist/lc_zoomobjects.pngbin0 -> 1126 bytes
-rw-r--r--default_images/res/commandimagelist/lc_zoomoptimal.pngbin0 -> 1101 bytes
-rw-r--r--default_images/res/commandimagelist/lc_zoomout.pngbin0 -> 1382 bytes
-rw-r--r--default_images/res/commandimagelist/lc_zoompage.pngbin0 -> 1086 bytes
-rw-r--r--default_images/res/commandimagelist/lc_zoompagewidth.pngbin0 -> 1183 bytes
-rw-r--r--default_images/res/commandimagelist/lc_zoompanning.pngbin0 -> 1791 bytes
-rw-r--r--default_images/res/commandimagelist/lc_zoomplus.pngbin0 -> 1425 bytes
-rw-r--r--default_images/res/commandimagelist/lc_zoomprevious.pngbin0 -> 1659 bytes
-rw-r--r--default_images/res/commandimagelist/lc_zoomtoolbox.pngbin0 -> 1348 bytes
-rw-r--r--default_images/res/commandimagelist/lch_absoluterecord.pngbin0 -> 191 bytes
-rw-r--r--default_images/res/commandimagelist/lch_actionmode.pngbin0 -> 233 bytes
-rw-r--r--default_images/res/commandimagelist/lch_addbookmark.pngbin0 -> 161 bytes
-rw-r--r--default_images/res/commandimagelist/lch_adddatefield.pngbin0 -> 156 bytes
-rw-r--r--default_images/res/commandimagelist/lch_adddirect.pngbin0 -> 123 bytes
-rw-r--r--default_images/res/commandimagelist/lch_addfield.pngbin0 -> 135 bytes
-rw-r--r--default_images/res/commandimagelist/lch_addons.pngbin0 -> 180 bytes
-rw-r--r--default_images/res/commandimagelist/lch_addprintarea.pngbin0 -> 188 bytes
-rw-r--r--default_images/res/commandimagelist/lch_addtable.pngbin0 -> 155 bytes
-rw-r--r--default_images/res/commandimagelist/lch_addwatch.pngbin0 -> 171 bytes
-rw-r--r--default_images/res/commandimagelist/lch_adjust.pngbin0 -> 177 bytes
-rw-r--r--default_images/res/commandimagelist/lch_advancedmode.pngbin0 -> 177 bytes
-rw-r--r--default_images/res/commandimagelist/lch_alignblock.pngbin0 -> 315 bytes
-rw-r--r--default_images/res/commandimagelist/lch_alignbottom.pngbin0 -> 148 bytes
-rw-r--r--default_images/res/commandimagelist/lch_aligncenter.pngbin0 -> 170 bytes
-rw-r--r--default_images/res/commandimagelist/lch_aligndown.pngbin0 -> 155 bytes
-rw-r--r--default_images/res/commandimagelist/lch_alignhorizontalcenter.pngbin0 -> 319 bytes
-rw-r--r--default_images/res/commandimagelist/lch_alignleft.pngbin0 -> 317 bytes
-rw-r--r--default_images/res/commandimagelist/lch_alignmiddle.pngbin0 -> 177 bytes
-rw-r--r--default_images/res/commandimagelist/lch_alignright.pngbin0 -> 317 bytes
-rw-r--r--default_images/res/commandimagelist/lch_aligntop.pngbin0 -> 156 bytes
-rw-r--r--default_images/res/commandimagelist/lch_alignup.pngbin0 -> 157 bytes
-rw-r--r--default_images/res/commandimagelist/lch_alignvcenter.pngbin0 -> 164 bytes
-rw-r--r--default_images/res/commandimagelist/lch_alignverticalcenter.pngbin0 -> 164 bytes
-rw-r--r--default_images/res/commandimagelist/lch_animationeffects.pngbin0 -> 204 bytes
-rw-r--r--default_images/res/commandimagelist/lch_animationmode.pngbin0 -> 242 bytes
-rw-r--r--default_images/res/commandimagelist/lch_animationobjects.pngbin0 -> 147 bytes
-rw-r--r--default_images/res/commandimagelist/lch_arc.pngbin0 -> 142 bytes
-rw-r--r--default_images/res/commandimagelist/lch_arrowshapes.chevron.pngbin0 -> 136 bytes
-rw-r--r--default_images/res/commandimagelist/lch_arrowshapes.circular-arrow.pngbin0 -> 190 bytes
-rw-r--r--default_images/res/commandimagelist/lch_arrowshapes.corner-right-arrow.pngbin0 -> 162 bytes
-rw-r--r--default_images/res/commandimagelist/lch_arrowshapes.down-arrow-callout.pngbin0 -> 153 bytes
-rw-r--r--default_images/res/commandimagelist/lch_arrowshapes.down-arrow.pngbin0 -> 159 bytes
-rw-r--r--default_images/res/commandimagelist/lch_arrowshapes.left-arrow-callout.pngbin0 -> 162 bytes
-rw-r--r--default_images/res/commandimagelist/lch_arrowshapes.left-arrow.pngbin0 -> 160 bytes
-rw-r--r--default_images/res/commandimagelist/lch_arrowshapes.left-right-arrow-callout.pngbin0 -> 185 bytes
-rw-r--r--default_images/res/commandimagelist/lch_arrowshapes.left-right-arrow.pngbin0 -> 167 bytes
-rw-r--r--default_images/res/commandimagelist/lch_arrowshapes.notched-right-arrow.pngbin0 -> 154 bytes
-rw-r--r--default_images/res/commandimagelist/lch_arrowshapes.pentagon-right.pngbin0 -> 148 bytes
-rw-r--r--default_images/res/commandimagelist/lch_arrowshapes.pngbin0 -> 167 bytes
-rw-r--r--default_images/res/commandimagelist/lch_arrowshapes.quad-arrow-callout.pngbin0 -> 208 bytes
-rw-r--r--default_images/res/commandimagelist/lch_arrowshapes.quad-arrow.pngbin0 -> 190 bytes
-rw-r--r--default_images/res/commandimagelist/lch_arrowshapes.right-arrow-callout.pngbin0 -> 156 bytes
-rw-r--r--default_images/res/commandimagelist/lch_arrowshapes.right-arrow.pngbin0 -> 162 bytes
-rw-r--r--default_images/res/commandimagelist/lch_arrowshapes.s-sharped-arrow.pngbin0 -> 198 bytes
-rw-r--r--default_images/res/commandimagelist/lch_arrowshapes.split-arrow.pngbin0 -> 181 bytes
-rw-r--r--default_images/res/commandimagelist/lch_arrowshapes.split-round-arrow.pngbin0 -> 193 bytes
-rw-r--r--default_images/res/commandimagelist/lch_arrowshapes.striped-right-arrow.pngbin0 -> 166 bytes
-rw-r--r--default_images/res/commandimagelist/lch_arrowshapes.up-arrow-callout.pngbin0 -> 150 bytes
-rw-r--r--default_images/res/commandimagelist/lch_arrowshapes.up-arrow.pngbin0 -> 154 bytes
-rw-r--r--default_images/res/commandimagelist/lch_arrowshapes.up-down-arrow-callout.pngbin0 -> 167 bytes
-rw-r--r--default_images/res/commandimagelist/lch_arrowshapes.up-down-arrow.pngbin0 -> 165 bytes
-rw-r--r--default_images/res/commandimagelist/lch_arrowshapes.up-right-arrow-callout.pngbin0 -> 191 bytes
-rw-r--r--default_images/res/commandimagelist/lch_arrowshapes.up-right-arrow.pngbin0 -> 176 bytes
-rw-r--r--default_images/res/commandimagelist/lch_arrowshapes.up-right-down-arrow.pngbin0 -> 180 bytes
-rw-r--r--default_images/res/commandimagelist/lch_arrowstoolbox.pngbin0 -> 116 bytes
-rw-r--r--default_images/res/commandimagelist/lch_assignlayout.pngbin0 -> 3651 bytes
-rw-r--r--default_images/res/commandimagelist/lch_autocontrolfocus.pngbin0 -> 148 bytes
-rw-r--r--default_images/res/commandimagelist/lch_autofilter.pngbin0 -> 210 bytes
-rw-r--r--default_images/res/commandimagelist/lch_autoformat.pngbin0 -> 236 bytes
-rw-r--r--default_images/res/commandimagelist/lch_autosum.pngbin0 -> 149 bytes
-rw-r--r--default_images/res/commandimagelist/lch_avmediaplayer.pngbin0 -> 157 bytes
-rw-r--r--default_images/res/commandimagelist/lch_backcolor.pngbin0 -> 216 bytes
-rw-r--r--default_images/res/commandimagelist/lch_backgroundcolor.pngbin0 -> 228 bytes
-rw-r--r--default_images/res/commandimagelist/lch_backgroundpatterncontroller.pngbin0 -> 228 bytes
-rw-r--r--default_images/res/commandimagelist/lch_backward.pngbin0 -> 131 bytes
-rw-r--r--default_images/res/commandimagelist/lch_basicshapes.block-arc.pngbin0 -> 183 bytes
-rw-r--r--default_images/res/commandimagelist/lch_basicshapes.can.pngbin0 -> 166 bytes
-rw-r--r--default_images/res/commandimagelist/lch_basicshapes.circle-pie.pngbin0 -> 180 bytes
-rw-r--r--default_images/res/commandimagelist/lch_basicshapes.circle.pngbin0 -> 176 bytes
-rw-r--r--default_images/res/commandimagelist/lch_basicshapes.cross.pngbin0 -> 136 bytes
-rw-r--r--default_images/res/commandimagelist/lch_basicshapes.cube.pngbin0 -> 155 bytes
-rw-r--r--default_images/res/commandimagelist/lch_basicshapes.diamond.pngbin0 -> 165 bytes
-rw-r--r--default_images/res/commandimagelist/lch_basicshapes.ellipse.pngbin0 -> 165 bytes
-rw-r--r--default_images/res/commandimagelist/lch_basicshapes.frame.pngbin0 -> 120 bytes
-rw-r--r--default_images/res/commandimagelist/lch_basicshapes.hexagon.pngbin0 -> 168 bytes
-rw-r--r--default_images/res/commandimagelist/lch_basicshapes.isosceles-triangle.pngbin0 -> 168 bytes
-rw-r--r--default_images/res/commandimagelist/lch_basicshapes.octagon.pngbin0 -> 147 bytes
-rw-r--r--default_images/res/commandimagelist/lch_basicshapes.paper.pngbin0 -> 142 bytes
-rw-r--r--default_images/res/commandimagelist/lch_basicshapes.parallelogram.pngbin0 -> 145 bytes
-rw-r--r--default_images/res/commandimagelist/lch_basicshapes.pentagon.pngbin0 -> 179 bytes
-rw-r--r--default_images/res/commandimagelist/lch_basicshapes.pngbin0 -> 165 bytes
-rw-r--r--default_images/res/commandimagelist/lch_basicshapes.quadrat.pngbin0 -> 107 bytes
-rw-r--r--default_images/res/commandimagelist/lch_basicshapes.rectangle.pngbin0 -> 107 bytes
-rw-r--r--default_images/res/commandimagelist/lch_basicshapes.right-triangle.pngbin0 -> 158 bytes
-rw-r--r--default_images/res/commandimagelist/lch_basicshapes.ring.pngbin0 -> 203 bytes
-rw-r--r--default_images/res/commandimagelist/lch_basicshapes.round-quadrat.pngbin0 -> 140 bytes
-rw-r--r--default_images/res/commandimagelist/lch_basicshapes.round-rectangle.pngbin0 -> 138 bytes
-rw-r--r--default_images/res/commandimagelist/lch_basicshapes.trapezoid.pngbin0 -> 163 bytes
-rw-r--r--default_images/res/commandimagelist/lch_basicstepinto.pngbin0 -> 175 bytes
-rw-r--r--default_images/res/commandimagelist/lch_basicstepout.pngbin0 -> 184 bytes
-rw-r--r--default_images/res/commandimagelist/lch_basicstepover.pngbin0 -> 182 bytes
-rw-r--r--default_images/res/commandimagelist/lch_basicstop.pngbin0 -> 144 bytes
-rw-r--r--default_images/res/commandimagelist/lch_beamer.pngbin0 -> 161 bytes
-rw-r--r--default_images/res/commandimagelist/lch_beforeobject.pngbin0 -> 151 bytes
-rw-r--r--default_images/res/commandimagelist/lch_behindobject.pngbin0 -> 161 bytes
-rw-r--r--default_images/res/commandimagelist/lch_bezier_unfilled.pngbin0 -> 158 bytes
-rw-r--r--default_images/res/commandimagelist/lch_bezierappend.pngbin0 -> 170 bytes
-rw-r--r--default_images/res/commandimagelist/lch_bezierclose.pngbin0 -> 172 bytes
-rw-r--r--default_images/res/commandimagelist/lch_bezierconvert.pngbin0 -> 154 bytes
-rw-r--r--default_images/res/commandimagelist/lch_beziercutline.pngbin0 -> 228 bytes
-rw-r--r--default_images/res/commandimagelist/lch_bezierdelete.pngbin0 -> 209 bytes
-rw-r--r--default_images/res/commandimagelist/lch_bezieredge.pngbin0 -> 148 bytes
-rw-r--r--default_images/res/commandimagelist/lch_beziereliminatepoints.pngbin0 -> 192 bytes
-rw-r--r--default_images/res/commandimagelist/lch_bezierfill.pngbin0 -> 169 bytes
-rw-r--r--default_images/res/commandimagelist/lch_bezierinsert.pngbin0 -> 198 bytes
-rw-r--r--default_images/res/commandimagelist/lch_beziermove.pngbin0 -> 179 bytes
-rw-r--r--default_images/res/commandimagelist/lch_beziersmooth.pngbin0 -> 164 bytes
-rw-r--r--default_images/res/commandimagelist/lch_beziersymmetric.pngbin0 -> 195 bytes
-rw-r--r--default_images/res/commandimagelist/lch_bighandles.pngbin0 -> 143 bytes
-rw-r--r--default_images/res/commandimagelist/lch_bold.pngbin0 -> 146 bytes
-rw-r--r--default_images/res/commandimagelist/lch_borderdialog.pngbin0 -> 106 bytes
-rw-r--r--default_images/res/commandimagelist/lch_bringtofront.pngbin0 -> 140 bytes
-rw-r--r--default_images/res/commandimagelist/lch_browsebackward.pngbin0 -> 141 bytes
-rw-r--r--default_images/res/commandimagelist/lch_browseforward.pngbin0 -> 143 bytes
-rw-r--r--default_images/res/commandimagelist/lch_browseview.pngbin0 -> 281 bytes
-rw-r--r--default_images/res/commandimagelist/lch_bullet.pngbin0 -> 136 bytes
-rw-r--r--default_images/res/commandimagelist/lch_bulletsandnumberingdialog.pngbin0 -> 163 bytes
-rw-r--r--default_images/res/commandimagelist/lch_calloutshapes.cloud-callout.pngbin0 -> 219 bytes
-rw-r--r--default_images/res/commandimagelist/lch_calloutshapes.line-callout-1.pngbin0 -> 155 bytes
-rw-r--r--default_images/res/commandimagelist/lch_calloutshapes.line-callout-2.pngbin0 -> 155 bytes
-rw-r--r--default_images/res/commandimagelist/lch_calloutshapes.line-callout-3.pngbin0 -> 117 bytes
-rw-r--r--default_images/res/commandimagelist/lch_calloutshapes.pngbin0 -> 475 bytes
-rw-r--r--default_images/res/commandimagelist/lch_calloutshapes.rectangular-callout.pngbin0 -> 143 bytes
-rw-r--r--default_images/res/commandimagelist/lch_calloutshapes.round-callout.pngbin0 -> 175 bytes
-rw-r--r--default_images/res/commandimagelist/lch_calloutshapes.round-rectangular-callout.pngbin0 -> 475 bytes
-rw-r--r--default_images/res/commandimagelist/lch_cellvertbottom.pngbin0 -> 148 bytes
-rw-r--r--default_images/res/commandimagelist/lch_cellvertcenter.pngbin0 -> 164 bytes
-rw-r--r--default_images/res/commandimagelist/lch_cellverttop.pngbin0 -> 156 bytes
-rw-r--r--default_images/res/commandimagelist/lch_centerpara.pngbin0 -> 319 bytes
-rw-r--r--default_images/res/commandimagelist/lch_chainframes.pngbin0 -> 153 bytes
-rw-r--r--default_images/res/commandimagelist/lch_changebezier.pngbin0 -> 457 bytes
-rw-r--r--default_images/res/commandimagelist/lch_changepolygon.pngbin0 -> 203 bytes
-rw-r--r--default_images/res/commandimagelist/lch_charfontname.pngbin0 -> 161 bytes
-rw-r--r--default_images/res/commandimagelist/lch_checkbox.pngbin0 -> 165 bytes
-rw-r--r--default_images/res/commandimagelist/lch_choosecontrols.pngbin0 -> 211 bytes
-rw-r--r--default_images/res/commandimagelist/lch_choosedesign.pngbin0 -> 238 bytes
-rw-r--r--default_images/res/commandimagelist/lch_choosemacro.pngbin0 -> 172 bytes
-rw-r--r--default_images/res/commandimagelist/lch_choosepolygon.pngbin0 -> 127 bytes
-rw-r--r--default_images/res/commandimagelist/lch_circle.pngbin0 -> 176 bytes
-rw-r--r--default_images/res/commandimagelist/lch_circle_unfilled.pngbin0 -> 157 bytes
-rw-r--r--default_images/res/commandimagelist/lch_circlearc.pngbin0 -> 159 bytes
-rw-r--r--default_images/res/commandimagelist/lch_circlecut.pngbin0 -> 184 bytes
-rw-r--r--default_images/res/commandimagelist/lch_circlecut_unfilled.pngbin0 -> 176 bytes
-rw-r--r--default_images/res/commandimagelist/lch_circlepie.pngbin0 -> 180 bytes
-rw-r--r--default_images/res/commandimagelist/lch_circlepie_unfilled.pngbin0 -> 162 bytes
-rw-r--r--default_images/res/commandimagelist/lch_clickchangerotation.pngbin0 -> 232 bytes
-rw-r--r--default_images/res/commandimagelist/lch_closedoc.pngbin0 -> 192 bytes
-rw-r--r--default_images/res/commandimagelist/lch_closedocs.pngbin0 -> 119 bytes
-rw-r--r--default_images/res/commandimagelist/lch_closemasterview.pngbin0 -> 188 bytes
-rw-r--r--default_images/res/commandimagelist/lch_closewin.pngbin0 -> 192 bytes
-rw-r--r--default_images/res/commandimagelist/lch_color.pngbin0 -> 181 bytes
-rw-r--r--default_images/res/commandimagelist/lch_colorsettings.pngbin0 -> 189 bytes
-rw-r--r--default_images/res/commandimagelist/lch_colorview.pngbin0 -> 120 bytes
-rw-r--r--default_images/res/commandimagelist/lch_combobox.pngbin0 -> 164 bytes
-rw-r--r--default_images/res/commandimagelist/lch_commontaskbarvisible.pngbin0 -> 170 bytes
-rw-r--r--default_images/res/commandimagelist/lch_compilebasic.pngbin0 -> 202 bytes
-rw-r--r--default_images/res/commandimagelist/lch_cone.pngbin0 -> 188 bytes
-rw-r--r--default_images/res/commandimagelist/lch_config.pngbin0 -> 211 bytes
-rw-r--r--default_images/res/commandimagelist/lch_connector.pngbin0 -> 115 bytes
-rw-r--r--default_images/res/commandimagelist/lch_connectorarrowend.pngbin0 -> 133 bytes
-rw-r--r--default_images/res/commandimagelist/lch_connectorarrows.pngbin0 -> 141 bytes
-rw-r--r--default_images/res/commandimagelist/lch_connectorarrowstart.pngbin0 -> 129 bytes
-rw-r--r--default_images/res/commandimagelist/lch_connectorcircleend.pngbin0 -> 132 bytes
-rw-r--r--default_images/res/commandimagelist/lch_connectorcircles.pngbin0 -> 141 bytes
-rw-r--r--default_images/res/commandimagelist/lch_connectorcirclestart.pngbin0 -> 132 bytes
-rw-r--r--default_images/res/commandimagelist/lch_connectorcurve.pngbin0 -> 150 bytes
-rw-r--r--default_images/res/commandimagelist/lch_connectorcurvearrowend.pngbin0 -> 163 bytes
-rw-r--r--default_images/res/commandimagelist/lch_connectorcurvearrows.pngbin0 -> 164 bytes
-rw-r--r--default_images/res/commandimagelist/lch_connectorcurvearrowstart.pngbin0 -> 161 bytes
-rw-r--r--default_images/res/commandimagelist/lch_connectorcurvecircleend.pngbin0 -> 160 bytes
-rw-r--r--default_images/res/commandimagelist/lch_connectorcurvecircles.pngbin0 -> 167 bytes
-rw-r--r--default_images/res/commandimagelist/lch_connectorcurvecirclestart.pngbin0 -> 161 bytes
-rw-r--r--default_images/res/commandimagelist/lch_connectorline.pngbin0 -> 139 bytes
-rw-r--r--default_images/res/commandimagelist/lch_connectorlinearrowend.pngbin0 -> 147 bytes
-rw-r--r--default_images/res/commandimagelist/lch_connectorlinearrows.pngbin0 -> 158 bytes
-rw-r--r--default_images/res/commandimagelist/lch_connectorlinearrowstart.pngbin0 -> 153 bytes
-rw-r--r--default_images/res/commandimagelist/lch_connectorlinecircleend.pngbin0 -> 150 bytes
-rw-r--r--default_images/res/commandimagelist/lch_connectorlinecircles.pngbin0 -> 146 bytes
-rw-r--r--default_images/res/commandimagelist/lch_connectorlinecirclestart.pngbin0 -> 149 bytes
-rw-r--r--default_images/res/commandimagelist/lch_connectorlines.pngbin0 -> 145 bytes
-rw-r--r--default_images/res/commandimagelist/lch_connectorlinesarrowend.pngbin0 -> 155 bytes
-rw-r--r--default_images/res/commandimagelist/lch_connectorlinesarrows.pngbin0 -> 162 bytes
-rw-r--r--default_images/res/commandimagelist/lch_connectorlinesarrowstart.pngbin0 -> 155 bytes
-rw-r--r--default_images/res/commandimagelist/lch_connectorlinescircleend.pngbin0 -> 155 bytes
-rw-r--r--default_images/res/commandimagelist/lch_connectorlinescircles.pngbin0 -> 160 bytes
-rw-r--r--default_images/res/commandimagelist/lch_connectorlinescirclestart.pngbin0 -> 155 bytes
-rw-r--r--default_images/res/commandimagelist/lch_connectortoolbox.pngbin0 -> 141 bytes
-rw-r--r--default_images/res/commandimagelist/lch_contourdialog.pngbin0 -> 207 bytes
-rw-r--r--default_images/res/commandimagelist/lch_controlcodes.pngbin0 -> 118 bytes
-rw-r--r--default_images/res/commandimagelist/lch_controlproperties.pngbin0 -> 207 bytes
-rw-r--r--default_images/res/commandimagelist/lch_convertinto3d.pngbin0 -> 182 bytes
-rw-r--r--default_images/res/commandimagelist/lch_convertinto3dlathe.pngbin0 -> 197 bytes
-rw-r--r--default_images/res/commandimagelist/lch_convertinto3dlathefast.pngbin0 -> 192 bytes
-rw-r--r--default_images/res/commandimagelist/lch_copy.pngbin0 -> 156 bytes
-rw-r--r--default_images/res/commandimagelist/lch_countall.pngbin0 -> 161 bytes
-rw-r--r--default_images/res/commandimagelist/lch_crookrotate.pngbin0 -> 199 bytes
-rw-r--r--default_images/res/commandimagelist/lch_crookslant.pngbin0 -> 209 bytes
-rw-r--r--default_images/res/commandimagelist/lch_crop.pngbin0 -> 161 bytes
-rw-r--r--default_images/res/commandimagelist/lch_cube.pngbin0 -> 149 bytes
-rw-r--r--default_images/res/commandimagelist/lch_currencyfield.pngbin0 -> 183 bytes
-rw-r--r--default_images/res/commandimagelist/lch_customanimation.pngbin0 -> 228 bytes
-rw-r--r--default_images/res/commandimagelist/lch_cut.pngbin0 -> 208 bytes
-rw-r--r--default_images/res/commandimagelist/lch_cylinder.pngbin0 -> 175 bytes
-rw-r--r--default_images/res/commandimagelist/lch_cyramid.pngbin0 -> 177 bytes
-rw-r--r--default_images/res/commandimagelist/lch_datadatapilotrun.pngbin0 -> 186 bytes
-rw-r--r--default_images/res/commandimagelist/lch_datafilterautofilter.pngbin0 -> 210 bytes
-rw-r--r--default_images/res/commandimagelist/lch_datafilterspecialfilter.pngbin0 -> 166 bytes
-rw-r--r--default_images/res/commandimagelist/lch_datafilterstandardfilter.pngbin0 -> 138 bytes
-rw-r--r--default_images/res/commandimagelist/lch_dataimport.pngbin0 -> 129 bytes
-rw-r--r--default_images/res/commandimagelist/lch_dataincolumns.pngbin0 -> 114 bytes
-rw-r--r--default_images/res/commandimagelist/lch_datainrows.pngbin0 -> 111 bytes
-rw-r--r--default_images/res/commandimagelist/lch_datefield.pngbin0 -> 156 bytes
-rw-r--r--default_images/res/commandimagelist/lch_dbaddrelation.pngbin0 -> 207 bytes
-rw-r--r--default_images/res/commandimagelist/lch_dbchangedesignmode.pngbin0 -> 217 bytes
-rw-r--r--default_images/res/commandimagelist/lch_dbclearquery.pngbin0 -> 230 bytes
-rw-r--r--default_images/res/commandimagelist/lch_dbdistinctvalues.pngbin0 -> 175 bytes
-rw-r--r--default_images/res/commandimagelist/lch_dbformdelete.pngbin0 -> 204 bytes
-rw-r--r--default_images/res/commandimagelist/lch_dbformedit.pngbin0 -> 221 bytes
-rw-r--r--default_images/res/commandimagelist/lch_dbformopen.pngbin0 -> 216 bytes
-rw-r--r--default_images/res/commandimagelist/lch_dbformrename.pngbin0 -> 184 bytes
-rw-r--r--default_images/res/commandimagelist/lch_dbindexdesign.pngbin0 -> 199 bytes
-rw-r--r--default_images/res/commandimagelist/lch_dbnewform.pngbin0 -> 228 bytes
-rw-r--r--default_images/res/commandimagelist/lch_dbnewformautopilot.pngbin0 -> 284 bytes
-rw-r--r--default_images/res/commandimagelist/lch_dbnewquery.pngbin0 -> 214 bytes
-rw-r--r--default_images/res/commandimagelist/lch_dbnewqueryautopilot.pngbin0 -> 272 bytes
-rw-r--r--default_images/res/commandimagelist/lch_dbnewquerysql.pngbin0 -> 168 bytes
-rw-r--r--default_images/res/commandimagelist/lch_dbnewreport.pngbin0 -> 192 bytes
-rw-r--r--default_images/res/commandimagelist/lch_dbnewreportautopilot.pngbin0 -> 248 bytes
-rw-r--r--default_images/res/commandimagelist/lch_dbnewtable.pngbin0 -> 171 bytes
-rw-r--r--default_images/res/commandimagelist/lch_dbnewtableautopilot.pngbin0 -> 252 bytes
-rw-r--r--default_images/res/commandimagelist/lch_dbnewview.pngbin0 -> 205 bytes
-rw-r--r--default_images/res/commandimagelist/lch_dbnewviewsql.pngbin0 -> 220 bytes
-rw-r--r--default_images/res/commandimagelist/lch_dbquerydelete.pngbin0 -> 212 bytes
-rw-r--r--default_images/res/commandimagelist/lch_dbqueryedit.pngbin0 -> 241 bytes
-rw-r--r--default_images/res/commandimagelist/lch_dbqueryopen.pngbin0 -> 203 bytes
-rw-r--r--default_images/res/commandimagelist/lch_dbqueryrename.pngbin0 -> 140 bytes
-rw-r--r--default_images/res/commandimagelist/lch_dbreportdelete.pngbin0 -> 205 bytes
-rw-r--r--default_images/res/commandimagelist/lch_dbreportedit.pngbin0 -> 212 bytes
-rw-r--r--default_images/res/commandimagelist/lch_dbreportopen.pngbin0 -> 187 bytes
-rw-r--r--default_images/res/commandimagelist/lch_dbreportrename.pngbin0 -> 167 bytes
-rw-r--r--default_images/res/commandimagelist/lch_dbsortingandgrouping.pngbin0 -> 108 bytes
-rw-r--r--default_images/res/commandimagelist/lch_dbtabledelete.pngbin0 -> 212 bytes
-rw-r--r--default_images/res/commandimagelist/lch_dbtableedit.pngbin0 -> 198 bytes
-rw-r--r--default_images/res/commandimagelist/lch_dbtableopen.pngbin0 -> 177 bytes
-rw-r--r--default_images/res/commandimagelist/lch_dbtablerename.pngbin0 -> 140 bytes
-rw-r--r--default_images/res/commandimagelist/lch_dbviewaliases.pngbin0 -> 130 bytes
-rw-r--r--default_images/res/commandimagelist/lch_dbviewfunctions.pngbin0 -> 151 bytes
-rw-r--r--default_images/res/commandimagelist/lch_dbviewtablenames.pngbin0 -> 162 bytes
-rw-r--r--default_images/res/commandimagelist/lch_decrementindent.pngbin0 -> 142 bytes
-rw-r--r--default_images/res/commandimagelist/lch_decrementlevel.pngbin0 -> 132 bytes
-rw-r--r--default_images/res/commandimagelist/lch_decrementsublevels.pngbin0 -> 169 bytes
-rw-r--r--default_images/res/commandimagelist/lch_defaultbullet.pngbin0 -> 105 bytes
-rw-r--r--default_images/res/commandimagelist/lch_defaultnumbering.pngbin0 -> 125 bytes
-rw-r--r--default_images/res/commandimagelist/lch_definename.pngbin0 -> 135 bytes
-rw-r--r--default_images/res/commandimagelist/lch_defineprintarea.pngbin0 -> 225 bytes
-rw-r--r--default_images/res/commandimagelist/lch_delete.pngbin0 -> 165 bytes
-rwxr-xr-xdefault_images/res/commandimagelist/lch_deleteallannotation.pngbin0 -> 3740 bytes
-rwxr-xr-xdefault_images/res/commandimagelist/lch_deleteannotation.pngbin0 -> 3744 bytes
-rw-r--r--default_images/res/commandimagelist/lch_deletecolumns.pngbin0 -> 111 bytes
-rw-r--r--default_images/res/commandimagelist/lch_deletemasterpage.pngbin0 -> 231 bytes
-rw-r--r--default_images/res/commandimagelist/lch_deleteprintarea.pngbin0 -> 247 bytes
-rw-r--r--default_images/res/commandimagelist/lch_deleterecord.pngbin0 -> 186 bytes
-rw-r--r--default_images/res/commandimagelist/lch_deleterows.pngbin0 -> 113 bytes
-rw-r--r--default_images/res/commandimagelist/lch_designerdialog.pngbin0 -> 176 bytes
-rw-r--r--default_images/res/commandimagelist/lch_dia.pngbin0 -> 190 bytes
-rw-r--r--default_images/res/commandimagelist/lch_diaauto.pngbin0 -> 190 bytes
-rw-r--r--default_images/res/commandimagelist/lch_diaeffect.pngbin0 -> 190 bytes
-rw-r--r--default_images/res/commandimagelist/lch_diagramdata.pngbin0 -> 313 bytes
-rw-r--r--default_images/res/commandimagelist/lch_diagramtype.pngbin0 -> 165 bytes
-rw-r--r--default_images/res/commandimagelist/lch_diaspeed.pngbin0 -> 190 bytes
-rw-r--r--default_images/res/commandimagelist/lch_diatime.pngbin0 -> 190 bytes
-rw-r--r--default_images/res/commandimagelist/lch_distributecolumns.pngbin0 -> 147 bytes
-rw-r--r--default_images/res/commandimagelist/lch_distributerows.pngbin0 -> 150 bytes
-rw-r--r--default_images/res/commandimagelist/lch_doubleclicktextedit.pngbin0 -> 188 bytes
-rw-r--r--default_images/res/commandimagelist/lch_downsearch.pngbin0 -> 3686 bytes
-rw-r--r--default_images/res/commandimagelist/lch_draw.pngbin0 -> 190 bytes
-rw-r--r--default_images/res/commandimagelist/lch_drawcaption.pngbin0 -> 160 bytes
-rw-r--r--default_images/res/commandimagelist/lch_drawchart.pngbin0 -> 114 bytes
-rw-r--r--default_images/res/commandimagelist/lch_drawselect.pngbin0 -> 141 bytes
-rw-r--r--default_images/res/commandimagelist/lch_drawtext.pngbin0 -> 120 bytes
-rw-r--r--default_images/res/commandimagelist/lch_dsbdocumentdatasource.pngbin0 -> 215 bytes
-rw-r--r--default_images/res/commandimagelist/lch_dsbeditdoc.pngbin0 -> 197 bytes
-rw-r--r--default_images/res/commandimagelist/lch_dsbformletter.pngbin0 -> 197 bytes
-rw-r--r--default_images/res/commandimagelist/lch_dsbinsertcolumns.pngbin0 -> 143 bytes
-rw-r--r--default_images/res/commandimagelist/lch_dsbinsertcontent.pngbin0 -> 152 bytes
-rw-r--r--default_images/res/commandimagelist/lch_dsbrowserexplorer.pngbin0 -> 153 bytes
-rw-r--r--default_images/res/commandimagelist/lch_duplicatepage.pngbin0 -> 192 bytes
-rw-r--r--default_images/res/commandimagelist/lch_edit.pngbin0 -> 152 bytes
-rw-r--r--default_images/res/commandimagelist/lch_editdoc.pngbin0 -> 197 bytes
-rw-r--r--default_images/res/commandimagelist/lch_editframeset.pngbin0 -> 161 bytes
-rw-r--r--default_images/res/commandimagelist/lch_editglossary.pngbin0 -> 211 bytes
-rw-r--r--default_images/res/commandimagelist/lch_editheaderandfooter.pngbin0 -> 120 bytes
-rw-r--r--default_images/res/commandimagelist/lch_editprintarea.pngbin0 -> 236 bytes
-rw-r--r--default_images/res/commandimagelist/lch_ellipse.pngbin0 -> 165 bytes
-rw-r--r--default_images/res/commandimagelist/lch_ellipse_unfilled.pngbin0 -> 146 bytes
-rw-r--r--default_images/res/commandimagelist/lch_ellipsecut.pngbin0 -> 171 bytes
-rw-r--r--default_images/res/commandimagelist/lch_ellipsecut_unfilled.pngbin0 -> 154 bytes
-rw-r--r--default_images/res/commandimagelist/lch_ellipsetoolbox.pngbin0 -> 165 bytes
-rw-r--r--default_images/res/commandimagelist/lch_entergroup.pngbin0 -> 176 bytes
-rw-r--r--default_images/res/commandimagelist/lch_entirecolumn.pngbin0 -> 120 bytes
-rw-r--r--default_images/res/commandimagelist/lch_entirerow.pngbin0 -> 122 bytes
-rw-r--r--default_images/res/commandimagelist/lch_euroconverter.pngbin0 -> 184 bytes
-rw-r--r--default_images/res/commandimagelist/lch_executereport.pngbin0 -> 162 bytes
-rw-r--r--default_images/res/commandimagelist/lch_expandpage.pngbin0 -> 178 bytes
-rw-r--r--default_images/res/commandimagelist/lch_exportdialog.pngbin0 -> 189 bytes
-rw-r--r--default_images/res/commandimagelist/lch_exportdirecttopdf.pngbin0 -> 169 bytes
-rw-r--r--default_images/res/commandimagelist/lch_exportto.pngbin0 -> 171 bytes
-rw-r--r--default_images/res/commandimagelist/lch_extendedhelp.pngbin0 -> 186 bytes
-rw-r--r--default_images/res/commandimagelist/lch_extrusion3dcolor.pngbin0 -> 161 bytes
-rw-r--r--default_images/res/commandimagelist/lch_extrusiondepthfloater.pngbin0 -> 198 bytes
-rw-r--r--default_images/res/commandimagelist/lch_extrusiondirectionfloater.pngbin0 -> 193 bytes
-rw-r--r--default_images/res/commandimagelist/lch_extrusionlightingfloater.pngbin0 -> 226 bytes
-rw-r--r--default_images/res/commandimagelist/lch_extrusionsurfacefloater.pngbin0 -> 231 bytes
-rw-r--r--default_images/res/commandimagelist/lch_extrusiontiltdown.pngbin0 -> 209 bytes
-rw-r--r--default_images/res/commandimagelist/lch_extrusiontiltleft.pngbin0 -> 210 bytes
-rw-r--r--default_images/res/commandimagelist/lch_extrusiontiltright.pngbin0 -> 211 bytes
-rw-r--r--default_images/res/commandimagelist/lch_extrusiontiltup.pngbin0 -> 208 bytes
-rw-r--r--default_images/res/commandimagelist/lch_extrusiontoggle.pngbin0 -> 182 bytes
-rw-r--r--default_images/res/commandimagelist/lch_fieldnames.pngbin0 -> 131 bytes
-rw-r--r--default_images/res/commandimagelist/lch_fields.pngbin0 -> 131 bytes
-rw-r--r--default_images/res/commandimagelist/lch_filecontrol.pngbin0 -> 158 bytes
-rw-r--r--default_images/res/commandimagelist/lch_filedocument.pngbin0 -> 161 bytes
-rw-r--r--default_images/res/commandimagelist/lch_fillshadow.pngbin0 -> 121 bytes
-rw-r--r--default_images/res/commandimagelist/lch_fillstyle.pngbin0 -> 227 bytes
-rw-r--r--default_images/res/commandimagelist/lch_filtercrit.pngbin0 -> 138 bytes
-rw-r--r--default_images/res/commandimagelist/lch_firstpage.pngbin0 -> 186 bytes
-rw-r--r--default_images/res/commandimagelist/lch_firstrecord.pngbin0 -> 139 bytes
-rw-r--r--default_images/res/commandimagelist/lch_fliphorizontal.pngbin0 -> 142 bytes
-rw-r--r--default_images/res/commandimagelist/lch_flipvertical.pngbin0 -> 144 bytes
-rw-r--r--default_images/res/commandimagelist/lch_flowchartshapes.flowchart-alternate-process.pngbin0 -> 140 bytes
-rw-r--r--default_images/res/commandimagelist/lch_flowchartshapes.flowchart-card.pngbin0 -> 134 bytes
-rw-r--r--default_images/res/commandimagelist/lch_flowchartshapes.flowchart-collate.pngbin0 -> 173 bytes
-rw-r--r--default_images/res/commandimagelist/lch_flowchartshapes.flowchart-connector.pngbin0 -> 176 bytes
-rw-r--r--default_images/res/commandimagelist/lch_flowchartshapes.flowchart-data.pngbin0 -> 145 bytes
-rw-r--r--default_images/res/commandimagelist/lch_flowchartshapes.flowchart-decision.pngbin0 -> 165 bytes
-rw-r--r--default_images/res/commandimagelist/lch_flowchartshapes.flowchart-delay.pngbin0 -> 156 bytes
-rw-r--r--default_images/res/commandimagelist/lch_flowchartshapes.flowchart-direct-access-storage.pngbin0 -> 164 bytes
-rw-r--r--default_images/res/commandimagelist/lch_flowchartshapes.flowchart-display.pngbin0 -> 168 bytes
-rw-r--r--default_images/res/commandimagelist/lch_flowchartshapes.flowchart-document.pngbin0 -> 147 bytes
-rw-r--r--default_images/res/commandimagelist/lch_flowchartshapes.flowchart-extract.pngbin0 -> 168 bytes
-rw-r--r--default_images/res/commandimagelist/lch_flowchartshapes.flowchart-internal-storage.pngbin0 -> 113 bytes
-rw-r--r--default_images/res/commandimagelist/lch_flowchartshapes.flowchart-magnetic-disk.pngbin0 -> 166 bytes
-rw-r--r--default_images/res/commandimagelist/lch_flowchartshapes.flowchart-manual-input.pngbin0 -> 139 bytes
-rw-r--r--default_images/res/commandimagelist/lch_flowchartshapes.flowchart-manual-operation.pngbin0 -> 163 bytes
-rw-r--r--default_images/res/commandimagelist/lch_flowchartshapes.flowchart-merge.pngbin0 -> 170 bytes
-rw-r--r--default_images/res/commandimagelist/lch_flowchartshapes.flowchart-multidocument.pngbin0 -> 182 bytes
-rw-r--r--default_images/res/commandimagelist/lch_flowchartshapes.flowchart-off-page-connector.pngbin0 -> 144 bytes
-rw-r--r--default_images/res/commandimagelist/lch_flowchartshapes.flowchart-or.pngbin0 -> 188 bytes
-rw-r--r--default_images/res/commandimagelist/lch_flowchartshapes.flowchart-predefined-process.pngbin0 -> 115 bytes
-rw-r--r--default_images/res/commandimagelist/lch_flowchartshapes.flowchart-preparation.pngbin0 -> 168 bytes
-rw-r--r--default_images/res/commandimagelist/lch_flowchartshapes.flowchart-process.pngbin0 -> 107 bytes
-rw-r--r--default_images/res/commandimagelist/lch_flowchartshapes.flowchart-punched-tape.pngbin0 -> 195 bytes
-rw-r--r--default_images/res/commandimagelist/lch_flowchartshapes.flowchart-sequential-access.pngbin0 -> 187 bytes
-rw-r--r--default_images/res/commandimagelist/lch_flowchartshapes.flowchart-sort.pngbin0 -> 169 bytes
-rw-r--r--default_images/res/commandimagelist/lch_flowchartshapes.flowchart-stored-data.pngbin0 -> 148 bytes
-rw-r--r--default_images/res/commandimagelist/lch_flowchartshapes.flowchart-summing-junction.pngbin0 -> 200 bytes
-rw-r--r--default_images/res/commandimagelist/lch_flowchartshapes.flowchart-terminator.pngbin0 -> 150 bytes
-rw-r--r--default_images/res/commandimagelist/lch_flowchartshapes.pngbin0 -> 113 bytes
-rw-r--r--default_images/res/commandimagelist/lch_fontcolor.pngbin0 -> 181 bytes
-rw-r--r--default_images/res/commandimagelist/lch_fontdialog.pngbin0 -> 200 bytes
-rw-r--r--default_images/res/commandimagelist/lch_fontheight.pngbin0 -> 181 bytes
-rw-r--r--default_images/res/commandimagelist/lch_fontwork.pngbin0 -> 183 bytes
-rw-r--r--default_images/res/commandimagelist/lch_fontworkalignmentfloater.pngbin0 -> 319 bytes
-rw-r--r--default_images/res/commandimagelist/lch_fontworkcharacterspacingfloater.pngbin0 -> 197 bytes
-rw-r--r--default_images/res/commandimagelist/lch_fontworkgalleryfloater.pngbin0 -> 174 bytes
-rw-r--r--default_images/res/commandimagelist/lch_fontworksameletterheights.pngbin0 -> 508 bytes
-rw-r--r--default_images/res/commandimagelist/lch_fontworkshapetype.fontwork-arch-down-curve.pngbin0 -> 158 bytes
-rw-r--r--default_images/res/commandimagelist/lch_fontworkshapetype.fontwork-arch-down-pour.pngbin0 -> 155 bytes
-rw-r--r--default_images/res/commandimagelist/lch_fontworkshapetype.fontwork-arch-left-curve.pngbin0 -> 156 bytes
-rw-r--r--default_images/res/commandimagelist/lch_fontworkshapetype.fontwork-arch-left-pour.pngbin0 -> 157 bytes
-rw-r--r--default_images/res/commandimagelist/lch_fontworkshapetype.fontwork-arch-right-curve.pngbin0 -> 158 bytes
-rw-r--r--default_images/res/commandimagelist/lch_fontworkshapetype.fontwork-arch-right-pour.pngbin0 -> 156 bytes
-rw-r--r--default_images/res/commandimagelist/lch_fontworkshapetype.fontwork-arch-up-curve.pngbin0 -> 153 bytes
-rw-r--r--default_images/res/commandimagelist/lch_fontworkshapetype.fontwork-arch-up-pour.pngbin0 -> 149 bytes
-rw-r--r--default_images/res/commandimagelist/lch_fontworkshapetype.fontwork-chevron-down.pngbin0 -> 151 bytes
-rw-r--r--default_images/res/commandimagelist/lch_fontworkshapetype.fontwork-chevron-up.pngbin0 -> 149 bytes
-rw-r--r--default_images/res/commandimagelist/lch_fontworkshapetype.fontwork-circle-curve.pngbin0 -> 181 bytes
-rw-r--r--default_images/res/commandimagelist/lch_fontworkshapetype.fontwork-circle-pour.pngbin0 -> 169 bytes
-rw-r--r--default_images/res/commandimagelist/lch_fontworkshapetype.fontwork-curve-down.pngbin0 -> 171 bytes
-rw-r--r--default_images/res/commandimagelist/lch_fontworkshapetype.fontwork-curve-up.pngbin0 -> 172 bytes
-rw-r--r--default_images/res/commandimagelist/lch_fontworkshapetype.fontwork-fade-down.pngbin0 -> 147 bytes
-rw-r--r--default_images/res/commandimagelist/lch_fontworkshapetype.fontwork-fade-left.pngbin0 -> 136 bytes
-rw-r--r--default_images/res/commandimagelist/lch_fontworkshapetype.fontwork-fade-right.pngbin0 -> 140 bytes
-rw-r--r--default_images/res/commandimagelist/lch_fontworkshapetype.fontwork-fade-up-and-left.pngbin0 -> 161 bytes
-rw-r--r--default_images/res/commandimagelist/lch_fontworkshapetype.fontwork-fade-up-and-right.pngbin0 -> 160 bytes
-rw-r--r--default_images/res/commandimagelist/lch_fontworkshapetype.fontwork-fade-up.pngbin0 -> 151 bytes
-rw-r--r--default_images/res/commandimagelist/lch_fontworkshapetype.fontwork-inflate.pngbin0 -> 134 bytes
-rw-r--r--default_images/res/commandimagelist/lch_fontworkshapetype.fontwork-open-circle-curve.pngbin0 -> 188 bytes
-rw-r--r--default_images/res/commandimagelist/lch_fontworkshapetype.fontwork-open-circle-pour.pngbin0 -> 181 bytes
-rw-r--r--default_images/res/commandimagelist/lch_fontworkshapetype.fontwork-plain-text.pngbin0 -> 102 bytes
-rw-r--r--default_images/res/commandimagelist/lch_fontworkshapetype.fontwork-slant-down.pngbin0 -> 142 bytes
-rw-r--r--default_images/res/commandimagelist/lch_fontworkshapetype.fontwork-slant-up.pngbin0 -> 141 bytes
-rw-r--r--default_images/res/commandimagelist/lch_fontworkshapetype.fontwork-stop.pngbin0 -> 132 bytes
-rw-r--r--default_images/res/commandimagelist/lch_fontworkshapetype.fontwork-triangle-down.pngbin0 -> 156 bytes
-rw-r--r--default_images/res/commandimagelist/lch_fontworkshapetype.fontwork-triangle-up.pngbin0 -> 155 bytes
-rw-r--r--default_images/res/commandimagelist/lch_fontworkshapetype.fontwork-wave.pngbin0 -> 162 bytes
-rw-r--r--default_images/res/commandimagelist/lch_fontworkshapetype.pngbin0 -> 183 bytes
-rw-r--r--default_images/res/commandimagelist/lch_formatarea.pngbin0 -> 227 bytes
-rw-r--r--default_images/res/commandimagelist/lch_formatgroup.pngbin0 -> 137 bytes
-rw-r--r--default_images/res/commandimagelist/lch_formatline.pngbin0 -> 189 bytes
-rw-r--r--default_images/res/commandimagelist/lch_formatpaintbrush.pngbin0 -> 217 bytes
-rw-r--r--default_images/res/commandimagelist/lch_formattedfield.pngbin0 -> 123 bytes
-rw-r--r--default_images/res/commandimagelist/lch_formatungroup.pngbin0 -> 195 bytes
-rw-r--r--default_images/res/commandimagelist/lch_formdesigntools.pngbin0 -> 190 bytes
-rw-r--r--default_images/res/commandimagelist/lch_formelcursor.pngbin0 -> 140 bytes
-rw-r--r--default_images/res/commandimagelist/lch_formfilter.pngbin0 -> 178 bytes
-rw-r--r--default_images/res/commandimagelist/lch_formfiltered.pngbin0 -> 179 bytes
-rw-r--r--default_images/res/commandimagelist/lch_formfilterexecute.pngbin0 -> 138 bytes
-rw-r--r--default_images/res/commandimagelist/lch_formfilternavigator.pngbin0 -> 214 bytes
-rw-r--r--default_images/res/commandimagelist/lch_formproperties.pngbin0 -> 156 bytes
-rw-r--r--default_images/res/commandimagelist/lch_forward.pngbin0 -> 127 bytes
-rw-r--r--default_images/res/commandimagelist/lch_framedialog.pngbin0 -> 171 bytes
-rw-r--r--default_images/res/commandimagelist/lch_framelinecolor.pngbin0 -> 102 bytes
-rw-r--r--default_images/res/commandimagelist/lch_freeline.pngbin0 -> 499 bytes
-rw-r--r--default_images/res/commandimagelist/lch_freeline_unfilled.pngbin0 -> 499 bytes
-rw-r--r--default_images/res/commandimagelist/lch_fullscreen.pngbin0 -> 194 bytes
-rw-r--r--default_images/res/commandimagelist/lch_gallery.pngbin0 -> 163 bytes
-rw-r--r--default_images/res/commandimagelist/lch_getactivetask.pngbin0 -> 161 bytes
-rw-r--r--default_images/res/commandimagelist/lch_glueeditmode.pngbin0 -> 181 bytes
-rw-r--r--default_images/res/commandimagelist/lch_glueescapedirectionbottom.pngbin0 -> 155 bytes
-rw-r--r--default_images/res/commandimagelist/lch_glueescapedirectionleft.pngbin0 -> 147 bytes
-rw-r--r--default_images/res/commandimagelist/lch_glueescapedirectionright.pngbin0 -> 146 bytes
-rw-r--r--default_images/res/commandimagelist/lch_glueescapedirectiontop.pngbin0 -> 159 bytes
-rw-r--r--default_images/res/commandimagelist/lch_gluehorzaligncenter.pngbin0 -> 157 bytes
-rw-r--r--default_images/res/commandimagelist/lch_gluehorzalignleft.pngbin0 -> 166 bytes
-rw-r--r--default_images/res/commandimagelist/lch_gluehorzalignright.pngbin0 -> 166 bytes
-rw-r--r--default_images/res/commandimagelist/lch_glueinsertpoint.pngbin0 -> 156 bytes
-rw-r--r--default_images/res/commandimagelist/lch_gluepercent.pngbin0 -> 162 bytes
-rw-r--r--default_images/res/commandimagelist/lch_gluevertalignbottom.pngbin0 -> 162 bytes
-rw-r--r--default_images/res/commandimagelist/lch_gluevertaligncenter.pngbin0 -> 150 bytes
-rw-r--r--default_images/res/commandimagelist/lch_gluevertaligntop.pngbin0 -> 163 bytes
-rw-r--r--default_images/res/commandimagelist/lch_goalseekdialog.pngbin0 -> 176 bytes
-rw-r--r--default_images/res/commandimagelist/lch_gotoend.pngbin0 -> 127 bytes
-rw-r--r--default_images/res/commandimagelist/lch_gotoendofdoc.pngbin0 -> 185 bytes
-rw-r--r--default_images/res/commandimagelist/lch_gotostartofdoc.pngbin0 -> 186 bytes
-rw-r--r--default_images/res/commandimagelist/lch_gotostartoftable.pngbin0 -> 132 bytes
-rw-r--r--default_images/res/commandimagelist/lch_grafattrcrop.pngbin0 -> 161 bytes
-rw-r--r--default_images/res/commandimagelist/lch_grafblue.pngbin0 -> 179 bytes
-rw-r--r--default_images/res/commandimagelist/lch_grafcontrast.pngbin0 -> 144 bytes
-rw-r--r--default_images/res/commandimagelist/lch_grafgamma.pngbin0 -> 194 bytes
-rw-r--r--default_images/res/commandimagelist/lch_grafgreen.pngbin0 -> 179 bytes
-rw-r--r--default_images/res/commandimagelist/lch_grafinvert.pngbin0 -> 114 bytes
-rw-r--r--default_images/res/commandimagelist/lch_grafluminance.pngbin0 -> 179 bytes
-rw-r--r--default_images/res/commandimagelist/lch_grafmode.pngbin0 -> 214 bytes
-rw-r--r--default_images/res/commandimagelist/lch_grafred.pngbin0 -> 179 bytes
-rw-r--r--default_images/res/commandimagelist/lch_graftransparence.pngbin0 -> 163 bytes
-rw-r--r--default_images/res/commandimagelist/lch_graphic.pngbin0 -> 445 bytes
-rw-r--r--default_images/res/commandimagelist/lch_graphicfilterinvert.pngbin0 -> 114 bytes
-rw-r--r--default_images/res/commandimagelist/lch_graphicfiltermosaic.pngbin0 -> 151 bytes
-rw-r--r--default_images/res/commandimagelist/lch_graphicfilterpopart.pngbin0 -> 189 bytes
-rw-r--r--default_images/res/commandimagelist/lch_graphicfilterposter.pngbin0 -> 184 bytes
-rw-r--r--default_images/res/commandimagelist/lch_graphicfilterrelief.pngbin0 -> 136 bytes
-rw-r--r--default_images/res/commandimagelist/lch_graphicfilterremovenoise.pngbin0 -> 232 bytes
-rw-r--r--default_images/res/commandimagelist/lch_graphicfiltersepia.pngbin0 -> 169 bytes
-rw-r--r--default_images/res/commandimagelist/lch_graphicfiltersharpen.pngbin0 -> 164 bytes
-rw-r--r--default_images/res/commandimagelist/lch_graphicfiltersmooth.pngbin0 -> 171 bytes
-rw-r--r--default_images/res/commandimagelist/lch_graphicfiltersobel.pngbin0 -> 171 bytes
-rw-r--r--default_images/res/commandimagelist/lch_graphicfiltersolarize.pngbin0 -> 174 bytes
-rw-r--r--default_images/res/commandimagelist/lch_graphicfiltertoolbox.pngbin0 -> 204 bytes
-rw-r--r--default_images/res/commandimagelist/lch_greatestheight.pngbin0 -> 146 bytes
-rw-r--r--default_images/res/commandimagelist/lch_greatestwidth.pngbin0 -> 141 bytes
-rw-r--r--default_images/res/commandimagelist/lch_grid.pngbin0 -> 313 bytes
-rw-r--r--default_images/res/commandimagelist/lch_griduse.pngbin0 -> 165 bytes
-rw-r--r--default_images/res/commandimagelist/lch_gridvisible.pngbin0 -> 330 bytes
-rw-r--r--default_images/res/commandimagelist/lch_group.pngbin0 -> 129 bytes
-rw-r--r--default_images/res/commandimagelist/lch_groupbox.pngbin0 -> 132 bytes
-rw-r--r--default_images/res/commandimagelist/lch_grow.pngbin0 -> 199 bytes
-rw-r--r--default_images/res/commandimagelist/lch_halfsphere.pngbin0 -> 181 bytes
-rw-r--r--default_images/res/commandimagelist/lch_handlesdraft.pngbin0 -> 140 bytes
-rw-r--r--default_images/res/commandimagelist/lch_helpannotate.pngbin0 -> 166 bytes
-rw-r--r--default_images/res/commandimagelist/lch_helpbookmark.pngbin0 -> 134 bytes
-rw-r--r--default_images/res/commandimagelist/lch_helpdownload.pngbin0 -> 161 bytes
-rw-r--r--default_images/res/commandimagelist/lch_helperdialog.pngbin0 -> 204 bytes
-rw-r--r--default_images/res/commandimagelist/lch_helpindex.pngbin0 -> 204 bytes
-rw-r--r--default_images/res/commandimagelist/lch_helplinesmove.pngbin0 -> 145 bytes
-rw-r--r--default_images/res/commandimagelist/lch_helplinesuse.pngbin0 -> 158 bytes
-rw-r--r--default_images/res/commandimagelist/lch_helplinesvisible.pngbin0 -> 101 bytes
-rw-r--r--default_images/res/commandimagelist/lch_helpmenu.pngbin0 -> 208 bytes
-rw-r--r--default_images/res/commandimagelist/lch_helpsearch.pngbin0 -> 155 bytes
-rw-r--r--default_images/res/commandimagelist/lch_helpzoomin.pngbin0 -> 183 bytes
-rw-r--r--default_images/res/commandimagelist/lch_helpzoomout.pngbin0 -> 181 bytes
-rw-r--r--default_images/res/commandimagelist/lch_hfixedline.pngbin0 -> 110 bytes
-rw-r--r--default_images/res/commandimagelist/lch_hideslide.pngbin0 -> 121 bytes
-rw-r--r--default_images/res/commandimagelist/lch_hscrollbar.pngbin0 -> 130 bytes
-rw-r--r--default_images/res/commandimagelist/lch_hyperlinkdialog.pngbin0 -> 314 bytes
-rw-r--r--default_images/res/commandimagelist/lch_hyphenate.pngbin0 -> 142 bytes
-rw-r--r--default_images/res/commandimagelist/lch_hyphenation.pngbin0 -> 142 bytes
-rw-r--r--default_images/res/commandimagelist/lch_imagebutton.pngbin0 -> 135 bytes
-rw-r--r--default_images/res/commandimagelist/lch_imagecontrol.pngbin0 -> 180 bytes
-rw-r--r--default_images/res/commandimagelist/lch_imagemapdialog.pngbin0 -> 184 bytes
-rwxr-xr-xdefault_images/res/commandimagelist/lch_importdialog.pngbin0 -> 427 bytes
-rw-r--r--default_images/res/commandimagelist/lch_importfromfile.pngbin0 -> 209 bytes
-rw-r--r--default_images/res/commandimagelist/lch_incrementindent.pngbin0 -> 142 bytes
-rw-r--r--default_images/res/commandimagelist/lch_incrementlevel.pngbin0 -> 130 bytes
-rw-r--r--default_images/res/commandimagelist/lch_incrementsublevels.pngbin0 -> 166 bytes
-rw-r--r--default_images/res/commandimagelist/lch_inscellsctrl.pngbin0 -> 157 bytes
-rw-r--r--default_images/res/commandimagelist/lch_insertannotation.pngbin0 -> 166 bytes
-rw-r--r--default_images/res/commandimagelist/lch_insertauthorfield.pngbin0 -> 209 bytes
-rw-r--r--default_images/res/commandimagelist/lch_insertavmedia.pngbin0 -> 210 bytes
-rw-r--r--default_images/res/commandimagelist/lch_insertbookmark.pngbin0 -> 186 bytes
-rw-r--r--default_images/res/commandimagelist/lch_insertcaptiondialog.pngbin0 -> 136 bytes
-rw-r--r--default_images/res/commandimagelist/lch_insertcellsdown.pngbin0 -> 168 bytes
-rw-r--r--default_images/res/commandimagelist/lch_insertcellsright.pngbin0 -> 160 bytes
-rw-r--r--default_images/res/commandimagelist/lch_insertcolumns.pngbin0 -> 119 bytes
-rw-r--r--default_images/res/commandimagelist/lch_insertctrl.pngbin0 -> 139 bytes
-rw-r--r--default_images/res/commandimagelist/lch_insertcurrencyfield.pngbin0 -> 183 bytes
-rw-r--r--default_images/res/commandimagelist/lch_insertdatefield.pngbin0 -> 156 bytes
-rw-r--r--default_images/res/commandimagelist/lch_insertdoc.pngbin0 -> 181 bytes
-rw-r--r--default_images/res/commandimagelist/lch_insertdraw.pngbin0 -> 204 bytes
-rw-r--r--default_images/res/commandimagelist/lch_insertedit.pngbin0 -> 152 bytes
-rw-r--r--default_images/res/commandimagelist/lch_insertendnote.pngbin0 -> 182 bytes
-rw-r--r--default_images/res/commandimagelist/lch_insertfield.pngbin0 -> 143 bytes
-rw-r--r--default_images/res/commandimagelist/lch_insertfieldctrl.pngbin0 -> 143 bytes
-rw-r--r--default_images/res/commandimagelist/lch_insertfilecontrol.pngbin0 -> 158 bytes
-rw-r--r--default_images/res/commandimagelist/lch_insertfixedtext.pngbin0 -> 144 bytes
-rw-r--r--default_images/res/commandimagelist/lch_insertfootnote.pngbin0 -> 184 bytes
-rw-r--r--default_images/res/commandimagelist/lch_insertformattedfield.pngbin0 -> 123 bytes
-rw-r--r--default_images/res/commandimagelist/lch_insertformula.pngbin0 -> 197 bytes
-rw-r--r--default_images/res/commandimagelist/lch_insertframe.pngbin0 -> 109 bytes
-rw-r--r--default_images/res/commandimagelist/lch_insertframeinteract.pngbin0 -> 109 bytes
-rw-r--r--default_images/res/commandimagelist/lch_insertframeinteractnocolumns.pngbin0 -> 109 bytes
-rw-r--r--default_images/res/commandimagelist/lch_insertgraphic.pngbin0 -> 167 bytes
-rw-r--r--default_images/res/commandimagelist/lch_inserthyperlink.pngbin0 -> 248 bytes
-rw-r--r--default_images/res/commandimagelist/lch_insertimagecontrol.pngbin0 -> 180 bytes
-rw-r--r--default_images/res/commandimagelist/lch_insertindexesentry.pngbin0 -> 135 bytes
-rw-r--r--default_images/res/commandimagelist/lch_insertlistbox.pngbin0 -> 151 bytes
-rw-r--r--default_images/res/commandimagelist/lch_insertmasterpage.pngbin0 -> 199 bytes
-rw-r--r--default_images/res/commandimagelist/lch_insertmath.pngbin0 -> 140 bytes
-rw-r--r--default_images/res/commandimagelist/lch_insertneutralparagraph.pngbin0 -> 114 bytes
-rw-r--r--default_images/res/commandimagelist/lch_insertnumericfield.pngbin0 -> 151 bytes
-rw-r--r--default_images/res/commandimagelist/lch_insertobjctrl.pngbin0 -> 181 bytes
-rw-r--r--default_images/res/commandimagelist/lch_insertobject.pngbin0 -> 181 bytes
-rw-r--r--default_images/res/commandimagelist/lch_insertobjectchart.pngbin0 -> 114 bytes
-rw-r--r--default_images/res/commandimagelist/lch_insertobjectdialog.pngbin0 -> 181 bytes
-rw-r--r--default_images/res/commandimagelist/lch_insertobjectfloatingframe.pngbin0 -> 154 bytes
-rw-r--r--default_images/res/commandimagelist/lch_insertobjectstarmath.pngbin0 -> 140 bytes
-rw-r--r--default_images/res/commandimagelist/lch_insertpage.pngbin0 -> 3703 bytes
-rw-r--r--default_images/res/commandimagelist/lch_insertpagecountfield.pngbin0 -> 148 bytes
-rw-r--r--default_images/res/commandimagelist/lch_insertpagenumberfield.pngbin0 -> 136 bytes
-rw-r--r--default_images/res/commandimagelist/lch_insertpatternfield.pngbin0 -> 135 bytes
-rw-r--r--default_images/res/commandimagelist/lch_insertplugin.pngbin0 -> 181 bytes
-rw-r--r--default_images/res/commandimagelist/lch_insertpushbutton.pngbin0 -> 116 bytes
-rw-r--r--default_images/res/commandimagelist/lch_insertreferencefield.pngbin0 -> 145 bytes
-rw-r--r--default_images/res/commandimagelist/lch_insertrows.pngbin0 -> 124 bytes
-rw-r--r--default_images/res/commandimagelist/lch_insertsection.pngbin0 -> 116 bytes
-rw-r--r--default_images/res/commandimagelist/lch_insertsound.pngbin0 -> 144 bytes
-rw-r--r--default_images/res/commandimagelist/lch_insertspreadsheet.pngbin0 -> 313 bytes
-rw-r--r--default_images/res/commandimagelist/lch_insertsymbol.pngbin0 -> 136 bytes
-rw-r--r--default_images/res/commandimagelist/lch_inserttable.pngbin0 -> 313 bytes
-rw-r--r--default_images/res/commandimagelist/lch_inserttextframe.pngbin0 -> 109 bytes
-rw-r--r--default_images/res/commandimagelist/lch_inserttimefield.pngbin0 -> 207 bytes
-rw-r--r--default_images/res/commandimagelist/lch_inserttitlefield.pngbin0 -> 149 bytes
-rw-r--r--default_images/res/commandimagelist/lch_inserttoolbox.pngbin0 -> 209 bytes
-rw-r--r--default_images/res/commandimagelist/lch_inserttopicfield.pngbin0 -> 149 bytes
-rw-r--r--default_images/res/commandimagelist/lch_inserttreecontrol.pngbin0 -> 130 bytes
-rw-r--r--default_images/res/commandimagelist/lch_insertvideo.pngbin0 -> 147 bytes
-rw-r--r--default_images/res/commandimagelist/lch_insobjctrl.pngbin0 -> 181 bytes
-rw-r--r--default_images/res/commandimagelist/lch_interactivegradient.pngbin0 -> 214 bytes
-rw-r--r--default_images/res/commandimagelist/lch_interactivetransparence.pngbin0 -> 236 bytes
-rw-r--r--default_images/res/commandimagelist/lch_internetonline.pngbin0 -> 161 bytes
-rw-r--r--default_images/res/commandimagelist/lch_italic.pngbin0 -> 152 bytes
-rw-r--r--default_images/res/commandimagelist/lch_justifypara.pngbin0 -> 315 bytes
-rw-r--r--default_images/res/commandimagelist/lch_label.pngbin0 -> 144 bytes
-rw-r--r--default_images/res/commandimagelist/lch_lastpage.pngbin0 -> 185 bytes
-rw-r--r--default_images/res/commandimagelist/lch_lastrecord.pngbin0 -> 130 bytes
-rw-r--r--default_images/res/commandimagelist/lch_leaveallgroups.pngbin0 -> 182 bytes
-rw-r--r--default_images/res/commandimagelist/lch_leavegroup.pngbin0 -> 179 bytes
-rw-r--r--default_images/res/commandimagelist/lch_leftpara.pngbin0 -> 317 bytes
-rw-r--r--default_images/res/commandimagelist/lch_line.pngbin0 -> 123 bytes
-rw-r--r--default_images/res/commandimagelist/lch_line_diagonal.pngbin0 -> 138 bytes
-rw-r--r--default_images/res/commandimagelist/lch_linearrowcircle.pngbin0 -> 125 bytes
-rw-r--r--default_images/res/commandimagelist/lch_linearrowend.pngbin0 -> 116 bytes
-rw-r--r--default_images/res/commandimagelist/lch_linearrows.pngbin0 -> 130 bytes
-rw-r--r--default_images/res/commandimagelist/lch_linearrowsquare.pngbin0 -> 123 bytes
-rw-r--r--default_images/res/commandimagelist/lch_linearrowstart.pngbin0 -> 116 bytes
-rw-r--r--default_images/res/commandimagelist/lch_linecirclearrow.pngbin0 -> 128 bytes
-rw-r--r--default_images/res/commandimagelist/lch_lineendstyle.pngbin0 -> 150 bytes
-rw-r--r--default_images/res/commandimagelist/lch_linesquarearrow.pngbin0 -> 123 bytes
-rw-r--r--default_images/res/commandimagelist/lch_linestyle.pngbin0 -> 106 bytes
-rw-r--r--default_images/res/commandimagelist/lch_linetoolbox.pngbin0 -> 499 bytes
-rw-r--r--default_images/res/commandimagelist/lch_linewidth.pngbin0 -> 227 bytes
-rw-r--r--default_images/res/commandimagelist/lch_listbox.pngbin0 -> 151 bytes
-rw-r--r--default_images/res/commandimagelist/lch_loadbasic.pngbin0 -> 1110 bytes
-rw-r--r--default_images/res/commandimagelist/lch_macrorecorder.pngbin0 -> 219 bytes
-rw-r--r--default_images/res/commandimagelist/lch_macrorecordingfloat.pngbin0 -> 161 bytes
-rw-r--r--default_images/res/commandimagelist/lch_mailwindow.pngbin0 -> 161 bytes
-rw-r--r--default_images/res/commandimagelist/lch_managebreakpoints.pngbin0 -> 206 bytes
-rw-r--r--default_images/res/commandimagelist/lch_managelanguage.pngbin0 -> 269 bytes
-rw-r--r--default_images/res/commandimagelist/lch_marks.pngbin0 -> 121 bytes
-rw-r--r--default_images/res/commandimagelist/lch_matchgroup.pngbin0 -> 151 bytes
-rw-r--r--default_images/res/commandimagelist/lch_measureline.pngbin0 -> 117 bytes
-rw-r--r--default_images/res/commandimagelist/lch_mergecells.pngbin0 -> 129 bytes
-rw-r--r--default_images/res/commandimagelist/lch_mergedialog.pngbin0 -> 197 bytes
-rw-r--r--default_images/res/commandimagelist/lch_mirror.pngbin0 -> 234 bytes
-rw-r--r--default_images/res/commandimagelist/lch_modifyframe.pngbin0 -> 201 bytes
-rw-r--r--default_images/res/commandimagelist/lch_modifypage.pngbin0 -> 136 bytes
-rw-r--r--default_images/res/commandimagelist/lch_moduledialog.pngbin0 -> 185 bytes
-rw-r--r--default_images/res/commandimagelist/lch_morecontrols.pngbin0 -> 193 bytes
-rw-r--r--default_images/res/commandimagelist/lch_movedown.pngbin0 -> 125 bytes
-rw-r--r--default_images/res/commandimagelist/lch_movedownsubitems.pngbin0 -> 177 bytes
-rw-r--r--default_images/res/commandimagelist/lch_moveup.pngbin0 -> 128 bytes
-rw-r--r--default_images/res/commandimagelist/lch_moveupsubitems.pngbin0 -> 172 bytes
-rw-r--r--default_images/res/commandimagelist/lch_navigationbar.pngbin0 -> 122 bytes
-rw-r--r--default_images/res/commandimagelist/lch_navigator.pngbin0 -> 233 bytes
-rw-r--r--default_images/res/commandimagelist/lch_newarrangement.pngbin0 -> 138 bytes
-rw-r--r--default_images/res/commandimagelist/lch_newdoc.pngbin0 -> 123 bytes
-rw-r--r--default_images/res/commandimagelist/lch_newrecord.pngbin0 -> 172 bytes
-rwxr-xr-xdefault_images/res/commandimagelist/lch_nextannotation.pngbin0 -> 3700 bytes
-rw-r--r--default_images/res/commandimagelist/lch_nextpage.pngbin0 -> 194 bytes
-rw-r--r--default_images/res/commandimagelist/lch_nextrecord.pngbin0 -> 127 bytes
-rw-r--r--default_images/res/commandimagelist/lch_numberformatcurrency.pngbin0 -> 183 bytes
-rw-r--r--default_images/res/commandimagelist/lch_numberformatdate.pngbin0 -> 156 bytes
-rw-r--r--default_images/res/commandimagelist/lch_numberformatdecdecimals.pngbin0 -> 205 bytes
-rw-r--r--default_images/res/commandimagelist/lch_numberformatdecimal.pngbin0 -> 145 bytes
-rw-r--r--default_images/res/commandimagelist/lch_numberformatincdecimals.pngbin0 -> 161 bytes
-rw-r--r--default_images/res/commandimagelist/lch_numberformatpercent.pngbin0 -> 159 bytes
-rw-r--r--default_images/res/commandimagelist/lch_numberformatscientific.pngbin0 -> 121 bytes
-rw-r--r--default_images/res/commandimagelist/lch_numberformatstandard.pngbin0 -> 173 bytes
-rw-r--r--default_images/res/commandimagelist/lch_numberingstart.pngbin0 -> 174 bytes
-rw-r--r--default_images/res/commandimagelist/lch_numericfield.pngbin0 -> 151 bytes
-rw-r--r--default_images/res/commandimagelist/lch_objectalign.pngbin0 -> 146 bytes
-rw-r--r--default_images/res/commandimagelist/lch_objectalignleft.pngbin0 -> 146 bytes
-rw-r--r--default_images/res/commandimagelist/lch_objectalignright.pngbin0 -> 149 bytes
-rw-r--r--default_images/res/commandimagelist/lch_objectcatalog.pngbin0 -> 167 bytes
-rw-r--r--default_images/res/commandimagelist/lch_objectposition.pngbin0 -> 127 bytes
-rw-r--r--default_images/res/commandimagelist/lch_objects3dtoolbox.pngbin0 -> 149 bytes
-rw-r--r--default_images/res/commandimagelist/lch_open.pngbin0 -> 175 bytes
-rw-r--r--default_images/res/commandimagelist/lch_openreadonly.pngbin0 -> 230 bytes
-rw-r--r--default_images/res/commandimagelist/lch_openurl.pngbin0 -> 248 bytes
-rw-r--r--default_images/res/commandimagelist/lch_optimizetable.pngbin0 -> 180 bytes
-rw-r--r--default_images/res/commandimagelist/lch_ordercrit.pngbin0 -> 176 bytes
-rw-r--r--default_images/res/commandimagelist/lch_outlinebullet.pngbin0 -> 163 bytes
-rw-r--r--default_images/res/commandimagelist/lch_outlinecollapse.pngbin0 -> 131 bytes
-rw-r--r--default_images/res/commandimagelist/lch_outlinecollapseall.pngbin0 -> 134 bytes
-rw-r--r--default_images/res/commandimagelist/lch_outlinedown.pngbin0 -> 125 bytes
-rw-r--r--default_images/res/commandimagelist/lch_outlineexpand.pngbin0 -> 126 bytes
-rw-r--r--default_images/res/commandimagelist/lch_outlineexpandall.pngbin0 -> 127 bytes
-rw-r--r--default_images/res/commandimagelist/lch_outlinefont.pngbin0 -> 182 bytes
-rw-r--r--default_images/res/commandimagelist/lch_outlineformat.pngbin0 -> 200 bytes
-rw-r--r--default_images/res/commandimagelist/lch_outlineleft.pngbin0 -> 130 bytes
-rw-r--r--default_images/res/commandimagelist/lch_outlineright.pngbin0 -> 132 bytes
-rw-r--r--default_images/res/commandimagelist/lch_outlineup.pngbin0 -> 128 bytes
-rw-r--r--default_images/res/commandimagelist/lch_overline.pngbin0 -> 296 bytes
-rw-r--r--default_images/res/commandimagelist/lch_pagedown.pngbin0 -> 194 bytes
-rw-r--r--default_images/res/commandimagelist/lch_pageup.pngbin0 -> 197 bytes
-rw-r--r--default_images/res/commandimagelist/lch_paragraphdialog.pngbin0 -> 168 bytes
-rw-r--r--default_images/res/commandimagelist/lch_paralefttoright.pngbin0 -> 153 bytes
-rw-r--r--default_images/res/commandimagelist/lch_pararighttoleft.pngbin0 -> 154 bytes
-rw-r--r--default_images/res/commandimagelist/lch_paraspacedecrease.pngbin0 -> 127 bytes
-rw-r--r--default_images/res/commandimagelist/lch_paraspaceincrease.pngbin0 -> 128 bytes
-rw-r--r--default_images/res/commandimagelist/lch_paste.pngbin0 -> 204 bytes
-rw-r--r--default_images/res/commandimagelist/lch_patternfield.pngbin0 -> 135 bytes
-rw-r--r--default_images/res/commandimagelist/lch_pickthrough.pngbin0 -> 149 bytes
-rw-r--r--default_images/res/commandimagelist/lch_pie.pngbin0 -> 172 bytes
-rw-r--r--default_images/res/commandimagelist/lch_pie_unfilled.pngbin0 -> 148 bytes
-rw-r--r--default_images/res/commandimagelist/lch_playmacro.pngbin0 -> 161 bytes
-rw-r--r--default_images/res/commandimagelist/lch_pluginsactive.pngbin0 -> 181 bytes
-rw-r--r--default_images/res/commandimagelist/lch_polygon.pngbin0 -> 190 bytes
-rw-r--r--default_images/res/commandimagelist/lch_polygon_diagonal.pngbin0 -> 116 bytes
-rw-r--r--default_images/res/commandimagelist/lch_polygon_diagonal_unfilled.pngbin0 -> 100 bytes
-rw-r--r--default_images/res/commandimagelist/lch_polygon_unfilled.pngbin0 -> 177 bytes
-rw-r--r--default_images/res/commandimagelist/lch_presentation.pngbin0 -> 160 bytes
-rw-r--r--default_images/res/commandimagelist/lch_presentationlayout.pngbin0 -> 190 bytes
-rw-r--r--default_images/res/commandimagelist/lch_preview.pngbin0 -> 135 bytes
-rw-r--r--default_images/res/commandimagelist/lch_previewprintoptions.pngbin0 -> 191 bytes
-rw-r--r--default_images/res/commandimagelist/lch_previewzoom.pngbin0 -> 177 bytes
-rwxr-xr-xdefault_images/res/commandimagelist/lch_previousannotation.pngbin0 -> 3700 bytes
-rw-r--r--default_images/res/commandimagelist/lch_previouspage.pngbin0 -> 197 bytes
-rw-r--r--default_images/res/commandimagelist/lch_prevrecord.pngbin0 -> 131 bytes
-rw-r--r--default_images/res/commandimagelist/lch_print.pngbin0 -> 160 bytes
-rw-r--r--default_images/res/commandimagelist/lch_printdefault.pngbin0 -> 160 bytes
-rw-r--r--default_images/res/commandimagelist/lch_printersetup.pngbin0 -> 191 bytes
-rw-r--r--default_images/res/commandimagelist/lch_printlayout.pngbin0 -> 215 bytes
-rw-r--r--default_images/res/commandimagelist/lch_printpagepreview.pngbin0 -> 182 bytes
-rw-r--r--default_images/res/commandimagelist/lch_printpreview.pngbin0 -> 163 bytes
-rw-r--r--default_images/res/commandimagelist/lch_progressbar.pngbin0 -> 114 bytes
-rw-r--r--default_images/res/commandimagelist/lch_pushbutton.pngbin0 -> 116 bytes
-rw-r--r--default_images/res/commandimagelist/lch_quickedit.pngbin0 -> 148 bytes
-rw-r--r--default_images/res/commandimagelist/lch_quit.pngbin0 -> 145 bytes
-rw-r--r--default_images/res/commandimagelist/lch_radiobutton.pngbin0 -> 176 bytes
-rw-r--r--default_images/res/commandimagelist/lch_recsave.pngbin0 -> 166 bytes
-rw-r--r--default_images/res/commandimagelist/lch_recsearch.pngbin0 -> 155 bytes
-rw-r--r--default_images/res/commandimagelist/lch_rect.pngbin0 -> 107 bytes
-rw-r--r--default_images/res/commandimagelist/lch_rect_rounded.pngbin0 -> 138 bytes
-rw-r--r--default_images/res/commandimagelist/lch_rect_rounded_unfilled.pngbin0 -> 128 bytes
-rw-r--r--default_images/res/commandimagelist/lch_rect_unfilled.pngbin0 -> 311 bytes
-rw-r--r--default_images/res/commandimagelist/lch_rectangletoolbox.pngbin0 -> 107 bytes
-rw-r--r--default_images/res/commandimagelist/lch_recundo.pngbin0 -> 209 bytes
-rw-r--r--default_images/res/commandimagelist/lch_redo.pngbin0 -> 178 bytes
-rw-r--r--default_images/res/commandimagelist/lch_refresh.pngbin0 -> 190 bytes
-rw-r--r--default_images/res/commandimagelist/lch_refreshformcontrol.pngbin0 -> 247 bytes
-rw-r--r--default_images/res/commandimagelist/lch_rehearsetimings.pngbin0 -> 204 bytes
-rw-r--r--default_images/res/commandimagelist/lch_reload.pngbin0 -> 190 bytes
-rw-r--r--default_images/res/commandimagelist/lch_removebullets.pngbin0 -> 297 bytes
-rw-r--r--default_images/res/commandimagelist/lch_removefilter.pngbin0 -> 190 bytes
-rw-r--r--default_images/res/commandimagelist/lch_removefiltersort.pngbin0 -> 190 bytes
-rw-r--r--default_images/res/commandimagelist/lch_renamemasterpage.pngbin0 -> 191 bytes
-rw-r--r--default_images/res/commandimagelist/lch_repeat.pngbin0 -> 210 bytes
-rw-r--r--default_images/res/commandimagelist/lch_reportnavigator.pngbin0 -> 230 bytes
-rw-r--r--default_images/res/commandimagelist/lch_reverseorder.pngbin0 -> 188 bytes
-rw-r--r--default_images/res/commandimagelist/lch_rightpara.pngbin0 -> 317 bytes
-rw-r--r--default_images/res/commandimagelist/lch_rulerrows.pngbin0 -> 210 bytes
-rw-r--r--default_images/res/commandimagelist/lch_rulerrowsvertical.pngbin0 -> 211 bytes
-rw-r--r--default_images/res/commandimagelist/lch_runbasic.pngbin0 -> 160 bytes
-rw-r--r--default_images/res/commandimagelist/lch_save.pngbin0 -> 133 bytes
-rw-r--r--default_images/res/commandimagelist/lch_saveas.pngbin0 -> 140 bytes
-rw-r--r--default_images/res/commandimagelist/lch_saveastemplate.pngbin0 -> 162 bytes
-rw-r--r--default_images/res/commandimagelist/lch_savebasicas.pngbin0 -> 168 bytes
-rw-r--r--default_images/res/commandimagelist/lch_sbabrwinsert.pngbin0 -> 143 bytes
-rw-r--r--default_images/res/commandimagelist/lch_sbaexecutesql.pngbin0 -> 216 bytes
-rw-r--r--default_images/res/commandimagelist/lch_sbanativesql.pngbin0 -> 177 bytes
-rw-r--r--default_images/res/commandimagelist/lch_scaletext.pngbin0 -> 219 bytes
-rw-r--r--default_images/res/commandimagelist/lch_scrollbar.pngbin0 -> 127 bytes
-rw-r--r--default_images/res/commandimagelist/lch_searchdialog.pngbin0 -> 155 bytes
-rwxr-xr-xdefault_images/res/commandimagelist/lch_sectionalignbottom.pngbin0 -> 165 bytes
-rwxr-xr-xdefault_images/res/commandimagelist/lch_sectionalignleft.pngbin0 -> 156 bytes
-rwxr-xr-xdefault_images/res/commandimagelist/lch_sectionalignright.pngbin0 -> 150 bytes
-rwxr-xr-xdefault_images/res/commandimagelist/lch_sectionaligntop.pngbin0 -> 167 bytes
-rw-r--r--default_images/res/commandimagelist/lch_sectionshrink.pngbin0 -> 158 bytes
-rw-r--r--default_images/res/commandimagelist/lch_sectionshrinkbottom.pngbin0 -> 139 bytes
-rw-r--r--default_images/res/commandimagelist/lch_sectionshrinktop.pngbin0 -> 143 bytes
-rw-r--r--default_images/res/commandimagelist/lch_selectall.pngbin0 -> 153 bytes
-rw-r--r--default_images/res/commandimagelist/lch_selectmode.pngbin0 -> 141 bytes
-rw-r--r--default_images/res/commandimagelist/lch_selectobject.pngbin0 -> 141 bytes
-rw-r--r--default_images/res/commandimagelist/lch_selecttable.pngbin0 -> 108 bytes
-rw-r--r--default_images/res/commandimagelist/lch_sendfax.pngbin0 -> 197 bytes
-rw-r--r--default_images/res/commandimagelist/lch_sendmail.pngbin0 -> 201 bytes
-rw-r--r--default_images/res/commandimagelist/lch_sendtoback.pngbin0 -> 149 bytes
-rw-r--r--default_images/res/commandimagelist/lch_setborderstyle.pngbin0 -> 314 bytes
-rw-r--r--default_images/res/commandimagelist/lch_setdocumentproperties.pngbin0 -> 174 bytes
-rw-r--r--default_images/res/commandimagelist/lch_setobjecttobackground.pngbin0 -> 141 bytes
-rw-r--r--default_images/res/commandimagelist/lch_setobjecttoforeground.pngbin0 -> 141 bytes
-rw-r--r--default_images/res/commandimagelist/lch_setoptimalcolumnwidth.pngbin0 -> 145 bytes
-rw-r--r--default_images/res/commandimagelist/lch_setoptimalcolumnwidthdirect.pngbin0 -> 145 bytes
-rw-r--r--default_images/res/commandimagelist/lch_setoptimalrowheight.pngbin0 -> 138 bytes
-rw-r--r--default_images/res/commandimagelist/lch_shadowcursor.pngbin0 -> 165 bytes
-rw-r--r--default_images/res/commandimagelist/lch_shadowed.pngbin0 -> 176 bytes
-rw-r--r--default_images/res/commandimagelist/lch_shear.pngbin0 -> 177 bytes
-rw-r--r--default_images/res/commandimagelist/lch_shell3d.pngbin0 -> 199 bytes
-rwxr-xr-xdefault_images/res/commandimagelist/lch_showannotation.pngbin0 -> 3628 bytes
-rw-r--r--default_images/res/commandimagelist/lch_showbookview.pngbin0 -> 131 bytes
-rw-r--r--default_images/res/commandimagelist/lch_showbrowser.pngbin0 -> 207 bytes
-rw-r--r--default_images/res/commandimagelist/lch_showdatanavigator.pngbin0 -> 148 bytes
-rw-r--r--default_images/res/commandimagelist/lch_showfmexplorer.pngbin0 -> 242 bytes
-rw-r--r--default_images/res/commandimagelist/lch_showmultiplepages.pngbin0 -> 136 bytes
-rw-r--r--default_images/res/commandimagelist/lch_showpropbrowser.pngbin0 -> 207 bytes
-rw-r--r--default_images/res/commandimagelist/lch_showslide.pngbin0 -> 126 bytes
-rw-r--r--default_images/res/commandimagelist/lch_showtwopages.pngbin0 -> 132 bytes
-rw-r--r--default_images/res/commandimagelist/lch_shrink.pngbin0 -> 182 bytes
-rw-r--r--default_images/res/commandimagelist/lch_smallestheight.pngbin0 -> 156 bytes
-rw-r--r--default_images/res/commandimagelist/lch_smallestwidth.pngbin0 -> 147 bytes
-rw-r--r--default_images/res/commandimagelist/lch_snapborder.pngbin0 -> 165 bytes
-rw-r--r--default_images/res/commandimagelist/lch_snapframe.pngbin0 -> 139 bytes
-rw-r--r--default_images/res/commandimagelist/lch_snappoints.pngbin0 -> 184 bytes
-rw-r--r--default_images/res/commandimagelist/lch_solidcreate.pngbin0 -> 169 bytes
-rw-r--r--default_images/res/commandimagelist/lch_sortascending.pngbin0 -> 199 bytes
-rw-r--r--default_images/res/commandimagelist/lch_sortdescending.pngbin0 -> 212 bytes
-rw-r--r--default_images/res/commandimagelist/lch_sortdown.pngbin0 -> 212 bytes
-rw-r--r--default_images/res/commandimagelist/lch_sortup.pngbin0 -> 199 bytes
-rw-r--r--default_images/res/commandimagelist/lch_sourceview.pngbin0 -> 156 bytes
-rw-r--r--default_images/res/commandimagelist/lch_spacepara1.pngbin0 -> 315 bytes
-rw-r--r--default_images/res/commandimagelist/lch_spacepara15.pngbin0 -> 315 bytes
-rw-r--r--default_images/res/commandimagelist/lch_spacepara2.pngbin0 -> 316 bytes
-rw-r--r--default_images/res/commandimagelist/lch_spelldialog.pngbin0 -> 196 bytes
-rw-r--r--default_images/res/commandimagelist/lch_spelling.pngbin0 -> 196 bytes
-rw-r--r--default_images/res/commandimagelist/lch_spellingandgrammardialog.pngbin0 -> 196 bytes
-rw-r--r--default_images/res/commandimagelist/lch_spellonline.pngbin0 -> 147 bytes
-rw-r--r--default_images/res/commandimagelist/lch_sphere.pngbin0 -> 210 bytes
-rw-r--r--default_images/res/commandimagelist/lch_spinbutton.pngbin0 -> 116 bytes
-rw-r--r--default_images/res/commandimagelist/lch_splitcell.pngbin0 -> 129 bytes
-rw-r--r--default_images/res/commandimagelist/lch_splithorizontal.pngbin0 -> 161 bytes
-rw-r--r--default_images/res/commandimagelist/lch_splitparenthorizontal.pngbin0 -> 161 bytes
-rw-r--r--default_images/res/commandimagelist/lch_splitparentvertical.pngbin0 -> 161 bytes
-rw-r--r--default_images/res/commandimagelist/lch_splitvertical.pngbin0 -> 161 bytes
-rw-r--r--default_images/res/commandimagelist/lch_square.pngbin0 -> 107 bytes
-rw-r--r--default_images/res/commandimagelist/lch_square_rounded.pngbin0 -> 140 bytes
-rw-r--r--default_images/res/commandimagelist/lch_square_rounded_unfilled.pngbin0 -> 136 bytes
-rw-r--r--default_images/res/commandimagelist/lch_square_unfilled.pngbin0 -> 313 bytes
-rw-r--r--default_images/res/commandimagelist/lch_starchartdialog.pngbin0 -> 114 bytes
-rw-r--r--default_images/res/commandimagelist/lch_starshapes.bang.pngbin0 -> 241 bytes
-rw-r--r--default_images/res/commandimagelist/lch_starshapes.concave-star6.pngbin0 -> 201 bytes
-rw-r--r--default_images/res/commandimagelist/lch_starshapes.doorplate.pngbin0 -> 148 bytes
-rw-r--r--default_images/res/commandimagelist/lch_starshapes.horizontal-scroll.pngbin0 -> 175 bytes
-rw-r--r--default_images/res/commandimagelist/lch_starshapes.pngbin0 -> 211 bytes
-rw-r--r--default_images/res/commandimagelist/lch_starshapes.signet.pngbin0 -> 220 bytes
-rw-r--r--default_images/res/commandimagelist/lch_starshapes.star12.pngbin0 -> 243 bytes
-rw-r--r--default_images/res/commandimagelist/lch_starshapes.star24.pngbin0 -> 237 bytes
-rw-r--r--default_images/res/commandimagelist/lch_starshapes.star4.pngbin0 -> 188 bytes
-rw-r--r--default_images/res/commandimagelist/lch_starshapes.star5.pngbin0 -> 211 bytes
-rw-r--r--default_images/res/commandimagelist/lch_starshapes.star6.pngbin0 -> 180 bytes
-rw-r--r--default_images/res/commandimagelist/lch_starshapes.star8.pngbin0 -> 204 bytes
-rw-r--r--default_images/res/commandimagelist/lch_starshapes.vertical-scroll.pngbin0 -> 171 bytes
-rw-r--r--default_images/res/commandimagelist/lch_strikeout.pngbin0 -> 166 bytes
-rw-r--r--default_images/res/commandimagelist/lch_styleapply.pngbin0 -> 227 bytes
-rw-r--r--default_images/res/commandimagelist/lch_stylenewbyexample.pngbin0 -> 184 bytes
-rw-r--r--default_images/res/commandimagelist/lch_styleupdatebyexample.pngbin0 -> 161 bytes
-rw-r--r--default_images/res/commandimagelist/lch_subscript.pngbin0 -> 224 bytes
-rw-r--r--default_images/res/commandimagelist/lch_superscript.pngbin0 -> 226 bytes
-rw-r--r--default_images/res/commandimagelist/lch_switchcontroldesignmode.pngbin0 -> 213 bytes
-rw-r--r--default_images/res/commandimagelist/lch_switchxformsdesignmode.pngbin0 -> 213 bytes
-rw-r--r--default_images/res/commandimagelist/lch_symbolcatalogue.pngbin0 -> 149 bytes
-rw-r--r--default_images/res/commandimagelist/lch_symbolshapes.brace-pair.pngbin0 -> 175 bytes
-rw-r--r--default_images/res/commandimagelist/lch_symbolshapes.bracket-pair.pngbin0 -> 144 bytes
-rw-r--r--default_images/res/commandimagelist/lch_symbolshapes.cloud.pngbin0 -> 211 bytes
-rw-r--r--default_images/res/commandimagelist/lch_symbolshapes.diamond-bevel.pngbin0 -> 184 bytes
-rw-r--r--default_images/res/commandimagelist/lch_symbolshapes.flower.pngbin0 -> 210 bytes
-rw-r--r--default_images/res/commandimagelist/lch_symbolshapes.forbidden.pngbin0 -> 216 bytes
-rw-r--r--default_images/res/commandimagelist/lch_symbolshapes.heart.pngbin0 -> 204 bytes
-rw-r--r--default_images/res/commandimagelist/lch_symbolshapes.left-brace.pngbin0 -> 150 bytes
-rw-r--r--default_images/res/commandimagelist/lch_symbolshapes.left-bracket.pngbin0 -> 126 bytes
-rw-r--r--default_images/res/commandimagelist/lch_symbolshapes.lightning.pngbin0 -> 187 bytes
-rw-r--r--default_images/res/commandimagelist/lch_symbolshapes.moon.pngbin0 -> 185 bytes
-rw-r--r--default_images/res/commandimagelist/lch_symbolshapes.octagon-bevel.pngbin0 -> 204 bytes
-rw-r--r--default_images/res/commandimagelist/lch_symbolshapes.pngbin0 -> 207 bytes
-rw-r--r--default_images/res/commandimagelist/lch_symbolshapes.puzzle.pngbin0 -> 207 bytes
-rw-r--r--default_images/res/commandimagelist/lch_symbolshapes.quad-bevel.pngbin0 -> 163 bytes
-rw-r--r--default_images/res/commandimagelist/lch_symbolshapes.right-brace.pngbin0 -> 150 bytes
-rw-r--r--default_images/res/commandimagelist/lch_symbolshapes.right-bracket.pngbin0 -> 126 bytes
-rw-r--r--default_images/res/commandimagelist/lch_symbolshapes.smiley.pngbin0 -> 207 bytes
-rw-r--r--default_images/res/commandimagelist/lch_symbolshapes.sun.pngbin0 -> 233 bytes
-rw-r--r--default_images/res/commandimagelist/lch_tabdialog.pngbin0 -> 198 bytes
-rw-r--r--default_images/res/commandimagelist/lch_tabledesign.pngbin0 -> 201 bytes
-rw-r--r--default_images/res/commandimagelist/lch_tabledialog.pngbin0 -> 169 bytes
-rw-r--r--default_images/res/commandimagelist/lch_tablemodefix.pngbin0 -> 116 bytes
-rw-r--r--default_images/res/commandimagelist/lch_tablemodefixprop.pngbin0 -> 160 bytes
-rw-r--r--default_images/res/commandimagelist/lch_tablemodevariable.pngbin0 -> 145 bytes
-rw-r--r--default_images/res/commandimagelist/lch_tablesort.pngbin0 -> 176 bytes
-rw-r--r--default_images/res/commandimagelist/lch_testmode.pngbin0 -> 213 bytes
-rw-r--r--default_images/res/commandimagelist/lch_text.pngbin0 -> 120 bytes
-rw-r--r--default_images/res/commandimagelist/lch_text_marquee.pngbin0 -> 154 bytes
-rw-r--r--default_images/res/commandimagelist/lch_textdirectionlefttoright.pngbin0 -> 173 bytes
-rw-r--r--default_images/res/commandimagelist/lch_textdirectiontoptobottom.pngbin0 -> 167 bytes
-rw-r--r--default_images/res/commandimagelist/lch_textfittosizetool.pngbin0 -> 163 bytes
-rw-r--r--default_images/res/commandimagelist/lch_texttoolbox.pngbin0 -> 120 bytes
-rw-r--r--default_images/res/commandimagelist/lch_thesaurus.pngbin0 -> 167 bytes
-rw-r--r--default_images/res/commandimagelist/lch_thesaurusdialog.pngbin0 -> 167 bytes
-rw-r--r--default_images/res/commandimagelist/lch_timefield.pngbin0 -> 207 bytes
-rw-r--r--default_images/res/commandimagelist/lch_toggleanchortype.pngbin0 -> 189 bytes
-rw-r--r--default_images/res/commandimagelist/lch_toggleaxisdescr.pngbin0 -> 111 bytes
-rw-r--r--default_images/res/commandimagelist/lch_toggleaxistitle.pngbin0 -> 143 bytes
-rw-r--r--default_images/res/commandimagelist/lch_togglebreakpoint.pngbin0 -> 219 bytes
-rw-r--r--default_images/res/commandimagelist/lch_togglegridhorizontal.pngbin0 -> 114 bytes
-rw-r--r--default_images/res/commandimagelist/lch_togglegridvertical.pngbin0 -> 111 bytes
-rw-r--r--default_images/res/commandimagelist/lch_togglelegend.pngbin0 -> 131 bytes
-rw-r--r--default_images/res/commandimagelist/lch_togglemergecells.pngbin0 -> 129 bytes
-rw-r--r--default_images/res/commandimagelist/lch_toggleobjectbeziermode.pngbin0 -> 178 bytes
-rw-r--r--default_images/res/commandimagelist/lch_toggleobjectrotatemode.pngbin0 -> 177 bytes
-rw-r--r--default_images/res/commandimagelist/lch_toggletitle.pngbin0 -> 136 bytes
-rw-r--r--default_images/res/commandimagelist/lch_toolsmacroedit.pngbin0 -> 161 bytes
-rw-r--r--default_images/res/commandimagelist/lch_toolsoptions.pngbin0 -> 161 bytes
-rw-r--r--default_images/res/commandimagelist/lch_torus.pngbin0 -> 197 bytes
-rw-r--r--default_images/res/commandimagelist/lch_transformdialog.pngbin0 -> 177 bytes
-rw-r--r--default_images/res/commandimagelist/lch_underline.pngbin0 -> 177 bytes
-rw-r--r--default_images/res/commandimagelist/lch_underlinedouble.pngbin0 -> 178 bytes
-rw-r--r--default_images/res/commandimagelist/lch_undo.pngbin0 -> 179 bytes
-rw-r--r--default_images/res/commandimagelist/lch_ungroup.pngbin0 -> 156 bytes
-rw-r--r--default_images/res/commandimagelist/lch_unhainframes.pngbin0 -> 221 bytes
-rw-r--r--default_images/res/commandimagelist/lch_upsearch.pngbin0 -> 3672 bytes
-rw-r--r--default_images/res/commandimagelist/lch_urlbutton.pngbin0 -> 161 bytes
-rw-r--r--default_images/res/commandimagelist/lch_usewizards.pngbin0 -> 225 bytes
-rw-r--r--default_images/res/commandimagelist/lch_verticalcaption.pngbin0 -> 155 bytes
-rw-r--r--default_images/res/commandimagelist/lch_verticaltext.pngbin0 -> 119 bytes
-rw-r--r--default_images/res/commandimagelist/lch_verticaltextfittosizetool.pngbin0 -> 162 bytes
-rw-r--r--default_images/res/commandimagelist/lch_vfixedline.pngbin0 -> 118 bytes
-rw-r--r--default_images/res/commandimagelist/lch_view100.pngbin0 -> 174 bytes
-rw-r--r--default_images/res/commandimagelist/lch_viewdatasourcebrowser.pngbin0 -> 141 bytes
-rw-r--r--default_images/res/commandimagelist/lch_viewformasgrid.pngbin0 -> 139 bytes
-rw-r--r--default_images/res/commandimagelist/lch_vscrollbar.pngbin0 -> 127 bytes
-rw-r--r--default_images/res/commandimagelist/lch_window3d.pngbin0 -> 178 bytes
-rw-r--r--default_images/res/commandimagelist/lch_wrapcontour.pngbin0 -> 157 bytes
-rw-r--r--default_images/res/commandimagelist/lch_wrapideal.pngbin0 -> 151 bytes
-rw-r--r--default_images/res/commandimagelist/lch_wrapleft.pngbin0 -> 122 bytes
-rw-r--r--default_images/res/commandimagelist/lch_wrapoff.pngbin0 -> 118 bytes
-rw-r--r--default_images/res/commandimagelist/lch_wrapon.pngbin0 -> 131 bytes
-rw-r--r--default_images/res/commandimagelist/lch_wrapright.pngbin0 -> 126 bytes
-rw-r--r--default_images/res/commandimagelist/lch_wrapthrough.pngbin0 -> 142 bytes
-rw-r--r--default_images/res/commandimagelist/lch_xlinecolor.pngbin0 -> 227 bytes
-rw-r--r--default_images/res/commandimagelist/lch_xlinestyle.pngbin0 -> 227 bytes
-rw-r--r--default_images/res/commandimagelist/lch_zoom.pngbin0 -> 177 bytes
-rw-r--r--default_images/res/commandimagelist/lch_zoom100percent.pngbin0 -> 174 bytes
-rw-r--r--default_images/res/commandimagelist/lch_zoomin.pngbin0 -> 183 bytes
-rw-r--r--default_images/res/commandimagelist/lch_zoomminus.pngbin0 -> 181 bytes
-rw-r--r--default_images/res/commandimagelist/lch_zoomnext.pngbin0 -> 204 bytes
-rw-r--r--default_images/res/commandimagelist/lch_zoomobjects.pngbin0 -> 203 bytes
-rw-r--r--default_images/res/commandimagelist/lch_zoomoptimal.pngbin0 -> 194 bytes
-rw-r--r--default_images/res/commandimagelist/lch_zoomout.pngbin0 -> 181 bytes
-rw-r--r--default_images/res/commandimagelist/lch_zoompage.pngbin0 -> 163 bytes
-rw-r--r--default_images/res/commandimagelist/lch_zoompagewidth.pngbin0 -> 201 bytes
-rw-r--r--default_images/res/commandimagelist/lch_zoompanning.pngbin0 -> 233 bytes
-rw-r--r--default_images/res/commandimagelist/lch_zoomplus.pngbin0 -> 183 bytes
-rw-r--r--default_images/res/commandimagelist/lch_zoomprevious.pngbin0 -> 196 bytes
-rw-r--r--default_images/res/commandimagelist/lch_zoomtoolbox.pngbin0 -> 177 bytes
-rw-r--r--default_images/res/commandimagelist/nl/lc_bold.pngbin0 -> 471 bytes
-rw-r--r--default_images/res/commandimagelist/nl/lc_italic.pngbin0 -> 531 bytes
-rw-r--r--default_images/res/commandimagelist/nl/lc_underline.pngbin0 -> 542 bytes
-rw-r--r--default_images/res/commandimagelist/nl/lc_underlinedouble.pngbin0 -> 542 bytes
-rw-r--r--default_images/res/commandimagelist/nl/lch_bold.pngbin0 -> 152 bytes
-rw-r--r--default_images/res/commandimagelist/nl/lch_italic.pngbin0 -> 489 bytes
-rw-r--r--default_images/res/commandimagelist/nl/lch_underline.pngbin0 -> 186 bytes
-rw-r--r--default_images/res/commandimagelist/nl/lch_underlinedouble.pngbin0 -> 189 bytes
-rw-r--r--default_images/res/commandimagelist/nl/sc_bold.pngbin0 -> 326 bytes
-rw-r--r--default_images/res/commandimagelist/nl/sc_italic.pngbin0 -> 368 bytes
-rw-r--r--default_images/res/commandimagelist/nl/sc_underline.pngbin0 -> 397 bytes
-rw-r--r--default_images/res/commandimagelist/nl/sc_underlinedouble.pngbin0 -> 400 bytes
-rw-r--r--default_images/res/commandimagelist/nl/sch_bold.pngbin0 -> 123 bytes
-rw-r--r--default_images/res/commandimagelist/nl/sch_italic.pngbin0 -> 339 bytes
-rw-r--r--default_images/res/commandimagelist/nl/sch_underline.pngbin0 -> 123 bytes
-rw-r--r--default_images/res/commandimagelist/nl/sch_underlinedouble.pngbin0 -> 122 bytes
-rw-r--r--default_images/res/commandimagelist/pl/lc_bold.pngbin0 -> 516 bytes
-rw-r--r--default_images/res/commandimagelist/pl/lc_italic.pngbin0 -> 574 bytes
-rw-r--r--default_images/res/commandimagelist/pl/lc_underline.pngbin0 -> 419 bytes
-rw-r--r--default_images/res/commandimagelist/pl/lc_underlinedouble.pngbin0 -> 516 bytes
-rw-r--r--default_images/res/commandimagelist/pl/lch_bold.pngbin0 -> 129 bytes
-rw-r--r--default_images/res/commandimagelist/pl/lch_italic.pngbin0 -> 494 bytes
-rw-r--r--default_images/res/commandimagelist/pl/lch_underline.pngbin0 -> 146 bytes
-rw-r--r--default_images/res/commandimagelist/pl/lch_underlinedouble.pngbin0 -> 145 bytes
-rw-r--r--default_images/res/commandimagelist/pl/sc_bold.pngbin0 -> 366 bytes
-rw-r--r--default_images/res/commandimagelist/pl/sc_italic.pngbin0 -> 398 bytes
-rw-r--r--default_images/res/commandimagelist/pl/sc_underline.pngbin0 -> 333 bytes
-rw-r--r--default_images/res/commandimagelist/pl/sc_underlinedouble.pngbin0 -> 408 bytes
-rw-r--r--default_images/res/commandimagelist/pl/sch_bold.pngbin0 -> 121 bytes
-rw-r--r--default_images/res/commandimagelist/pl/sch_italic.pngbin0 -> 346 bytes
-rw-r--r--default_images/res/commandimagelist/pl/sch_underline.pngbin0 -> 123 bytes
-rw-r--r--default_images/res/commandimagelist/pl/sch_underlinedouble.pngbin0 -> 121 bytes
-rw-r--r--default_images/res/commandimagelist/pt-BR/lc_bold.pngbin0 -> 396 bytes
-rw-r--r--default_images/res/commandimagelist/pt-BR/lc_italic.pngbin0 -> 440 bytes
-rw-r--r--default_images/res/commandimagelist/pt-BR/lc_underline.pngbin0 -> 521 bytes
-rw-r--r--default_images/res/commandimagelist/pt-BR/lc_underlinedouble.pngbin0 -> 531 bytes
-rw-r--r--default_images/res/commandimagelist/pt-BR/lch_bold.pngbin0 -> 130 bytes
-rw-r--r--default_images/res/commandimagelist/pt-BR/lch_italic.pngbin0 -> 425 bytes
-rw-r--r--default_images/res/commandimagelist/pt-BR/lch_underline.pngbin0 -> 145 bytes
-rw-r--r--default_images/res/commandimagelist/pt-BR/lch_underlinedouble.pngbin0 -> 144 bytes
-rw-r--r--default_images/res/commandimagelist/pt-BR/sc_bold.pngbin0 -> 296 bytes
-rw-r--r--default_images/res/commandimagelist/pt-BR/sc_italic.pngbin0 -> 304 bytes
-rw-r--r--default_images/res/commandimagelist/pt-BR/sc_underline.pngbin0 -> 386 bytes
-rw-r--r--default_images/res/commandimagelist/pt-BR/sc_underlinedouble.pngbin0 -> 394 bytes
-rw-r--r--default_images/res/commandimagelist/pt-BR/sch_bold.pngbin0 -> 105 bytes
-rw-r--r--default_images/res/commandimagelist/pt-BR/sch_italic.pngbin0 -> 289 bytes
-rw-r--r--default_images/res/commandimagelist/pt-BR/sch_underline.pngbin0 -> 118 bytes
-rw-r--r--default_images/res/commandimagelist/pt-BR/sch_underlinedouble.pngbin0 -> 120 bytes
-rw-r--r--default_images/res/commandimagelist/pt/lc_bold.pngbin0 -> 396 bytes
-rw-r--r--default_images/res/commandimagelist/pt/lc_italic.pngbin0 -> 440 bytes
-rw-r--r--default_images/res/commandimagelist/pt/lc_underline.pngbin0 -> 521 bytes
-rw-r--r--default_images/res/commandimagelist/pt/lc_underlinedouble.pngbin0 -> 531 bytes
-rw-r--r--default_images/res/commandimagelist/pt/lch_bold.pngbin0 -> 130 bytes
-rw-r--r--default_images/res/commandimagelist/pt/lch_italic.pngbin0 -> 425 bytes
-rw-r--r--default_images/res/commandimagelist/pt/lch_underline.pngbin0 -> 145 bytes
-rw-r--r--default_images/res/commandimagelist/pt/lch_underlinedouble.pngbin0 -> 144 bytes
-rw-r--r--default_images/res/commandimagelist/pt/sc_bold.pngbin0 -> 296 bytes
-rw-r--r--default_images/res/commandimagelist/pt/sc_italic.pngbin0 -> 304 bytes
-rw-r--r--default_images/res/commandimagelist/pt/sc_underline.pngbin0 -> 386 bytes
-rw-r--r--default_images/res/commandimagelist/pt/sc_underlinedouble.pngbin0 -> 394 bytes
-rw-r--r--default_images/res/commandimagelist/pt/sch_bold.pngbin0 -> 105 bytes
-rw-r--r--default_images/res/commandimagelist/pt/sch_italic.pngbin0 -> 289 bytes
-rw-r--r--default_images/res/commandimagelist/pt/sch_underline.pngbin0 -> 118 bytes
-rw-r--r--default_images/res/commandimagelist/pt/sch_underlinedouble.pngbin0 -> 120 bytes
-rw-r--r--default_images/res/commandimagelist/ru/lc_bold.pngbin0 -> 443 bytes
-rw-r--r--default_images/res/commandimagelist/ru/lc_italic.pngbin0 -> 465 bytes
-rw-r--r--default_images/res/commandimagelist/ru/lc_underline.pngbin0 -> 344 bytes
-rw-r--r--default_images/res/commandimagelist/ru/lc_underlinedouble.pngbin0 -> 345 bytes
-rw-r--r--default_images/res/commandimagelist/ru/lch_bold.pngbin0 -> 145 bytes
-rw-r--r--default_images/res/commandimagelist/ru/lch_italic.pngbin0 -> 344 bytes
-rw-r--r--default_images/res/commandimagelist/ru/lch_underline.pngbin0 -> 112 bytes
-rw-r--r--default_images/res/commandimagelist/ru/lch_underlinedouble.pngbin0 -> 113 bytes
-rw-r--r--default_images/res/commandimagelist/ru/sc_bold.pngbin0 -> 278 bytes
-rw-r--r--default_images/res/commandimagelist/ru/sc_italic.pngbin0 -> 291 bytes
-rw-r--r--default_images/res/commandimagelist/ru/sc_underline.pngbin0 -> 261 bytes
-rw-r--r--default_images/res/commandimagelist/ru/sc_underlinedouble.pngbin0 -> 265 bytes
-rw-r--r--default_images/res/commandimagelist/ru/sch_bold.pngbin0 -> 116 bytes
-rw-r--r--default_images/res/commandimagelist/ru/sch_italic.pngbin0 -> 126 bytes
-rw-r--r--default_images/res/commandimagelist/ru/sch_underline.pngbin0 -> 106 bytes
-rw-r--r--default_images/res/commandimagelist/ru/sch_underlinedouble.pngbin0 -> 104 bytes
-rw-r--r--default_images/res/commandimagelist/sc_absoluterecord.pngbin0 -> 895 bytes
-rw-r--r--default_images/res/commandimagelist/sc_actionmode.pngbin0 -> 863 bytes
-rw-r--r--default_images/res/commandimagelist/sc_addbookmark.pngbin0 -> 202 bytes
-rw-r--r--default_images/res/commandimagelist/sc_adddatefield.pngbin0 -> 626 bytes
-rw-r--r--default_images/res/commandimagelist/sc_adddirect.pngbin0 -> 525 bytes
-rw-r--r--default_images/res/commandimagelist/sc_addfield.pngbin0 -> 503 bytes
-rw-r--r--default_images/res/commandimagelist/sc_addons.pngbin0 -> 557 bytes
-rw-r--r--default_images/res/commandimagelist/sc_addprintarea.pngbin0 -> 542 bytes
-rw-r--r--default_images/res/commandimagelist/sc_addtable.pngbin0 -> 576 bytes
-rw-r--r--default_images/res/commandimagelist/sc_addwatch.pngbin0 -> 595 bytes
-rw-r--r--default_images/res/commandimagelist/sc_adjust.pngbin0 -> 761 bytes
-rw-r--r--default_images/res/commandimagelist/sc_advancedmode.pngbin0 -> 910 bytes
-rw-r--r--default_images/res/commandimagelist/sc_alignblock.pngbin0 -> 314 bytes
-rw-r--r--default_images/res/commandimagelist/sc_alignbottom.pngbin0 -> 630 bytes
-rw-r--r--default_images/res/commandimagelist/sc_aligncenter.pngbin0 -> 750 bytes
-rw-r--r--default_images/res/commandimagelist/sc_aligndown.pngbin0 -> 553 bytes
-rw-r--r--default_images/res/commandimagelist/sc_alignhorizontalcenter.pngbin0 -> 324 bytes
-rw-r--r--default_images/res/commandimagelist/sc_alignleft.pngbin0 -> 320 bytes
-rw-r--r--default_images/res/commandimagelist/sc_alignmiddle.pngbin0 -> 737 bytes
-rw-r--r--default_images/res/commandimagelist/sc_alignright.pngbin0 -> 322 bytes
-rw-r--r--default_images/res/commandimagelist/sc_aligntop.pngbin0 -> 645 bytes
-rw-r--r--default_images/res/commandimagelist/sc_alignup.pngbin0 -> 545 bytes
-rw-r--r--default_images/res/commandimagelist/sc_alignvcenter.pngbin0 -> 673 bytes
-rw-r--r--default_images/res/commandimagelist/sc_alignverticalcenter.pngbin0 -> 673 bytes
-rw-r--r--default_images/res/commandimagelist/sc_animationeffects.pngbin0 -> 704 bytes
-rw-r--r--default_images/res/commandimagelist/sc_animationmode.pngbin0 -> 757 bytes
-rw-r--r--default_images/res/commandimagelist/sc_animationobjects.pngbin0 -> 524 bytes
-rw-r--r--default_images/res/commandimagelist/sc_apply.pngbin0 -> 928 bytes
-rw-r--r--default_images/res/commandimagelist/sc_arc.pngbin0 -> 716 bytes
-rw-r--r--default_images/res/commandimagelist/sc_arrowshapes.chevron.pngbin0 -> 558 bytes
-rw-r--r--default_images/res/commandimagelist/sc_arrowshapes.circular-arrow.pngbin0 -> 768 bytes
-rw-r--r--default_images/res/commandimagelist/sc_arrowshapes.corner-right-arrow.pngbin0 -> 496 bytes
-rw-r--r--default_images/res/commandimagelist/sc_arrowshapes.down-arrow-callout.pngbin0 -> 576 bytes
-rw-r--r--default_images/res/commandimagelist/sc_arrowshapes.down-arrow.pngbin0 -> 581 bytes
-rw-r--r--default_images/res/commandimagelist/sc_arrowshapes.left-arrow-callout.pngbin0 -> 586 bytes
-rw-r--r--default_images/res/commandimagelist/sc_arrowshapes.left-arrow.pngbin0 -> 517 bytes
-rw-r--r--default_images/res/commandimagelist/sc_arrowshapes.left-right-arrow-callout.pngbin0 -> 674 bytes
-rw-r--r--default_images/res/commandimagelist/sc_arrowshapes.left-right-arrow.pngbin0 -> 522 bytes
-rw-r--r--default_images/res/commandimagelist/sc_arrowshapes.notched-right-arrow.pngbin0 -> 566 bytes
-rw-r--r--default_images/res/commandimagelist/sc_arrowshapes.pentagon-right.pngbin0 -> 525 bytes
-rw-r--r--default_images/res/commandimagelist/sc_arrowshapes.pngbin0 -> 522 bytes
-rw-r--r--default_images/res/commandimagelist/sc_arrowshapes.quad-arrow-callout.pngbin0 -> 717 bytes
-rw-r--r--default_images/res/commandimagelist/sc_arrowshapes.quad-arrow.pngbin0 -> 678 bytes
-rw-r--r--default_images/res/commandimagelist/sc_arrowshapes.right-arrow-callout.pngbin0 -> 596 bytes
-rw-r--r--default_images/res/commandimagelist/sc_arrowshapes.right-arrow.pngbin0 -> 538 bytes
-rw-r--r--default_images/res/commandimagelist/sc_arrowshapes.s-sharped-arrow.pngbin0 -> 741 bytes
-rw-r--r--default_images/res/commandimagelist/sc_arrowshapes.split-arrow.pngbin0 -> 650 bytes
-rw-r--r--default_images/res/commandimagelist/sc_arrowshapes.split-round-arrow.pngbin0 -> 769 bytes
-rw-r--r--default_images/res/commandimagelist/sc_arrowshapes.striped-right-arrow.pngbin0 -> 530 bytes
-rw-r--r--default_images/res/commandimagelist/sc_arrowshapes.up-arrow-callout.pngbin0 -> 549 bytes
-rw-r--r--default_images/res/commandimagelist/sc_arrowshapes.up-arrow.pngbin0 -> 582 bytes
-rw-r--r--default_images/res/commandimagelist/sc_arrowshapes.up-down-arrow-callout.pngbin0 -> 662 bytes
-rw-r--r--default_images/res/commandimagelist/sc_arrowshapes.up-down-arrow.pngbin0 -> 661 bytes
-rw-r--r--default_images/res/commandimagelist/sc_arrowshapes.up-right-arrow-callout.pngbin0 -> 673 bytes
-rw-r--r--default_images/res/commandimagelist/sc_arrowshapes.up-right-arrow.pngbin0 -> 589 bytes
-rw-r--r--default_images/res/commandimagelist/sc_arrowshapes.up-right-down-arrow.pngbin0 -> 649 bytes
-rw-r--r--default_images/res/commandimagelist/sc_arrowstoolbox.pngbin0 -> 539 bytes
-rw-r--r--default_images/res/commandimagelist/sc_assignlayout.pngbin0 -> 3890 bytes
-rw-r--r--default_images/res/commandimagelist/sc_autocontrolfocus.pngbin0 -> 660 bytes
-rw-r--r--default_images/res/commandimagelist/sc_autofilter.pngbin0 -> 711 bytes
-rw-r--r--default_images/res/commandimagelist/sc_autoformat.pngbin0 -> 753 bytes
-rw-r--r--default_images/res/commandimagelist/sc_autosum.pngbin0 -> 563 bytes
-rw-r--r--default_images/res/commandimagelist/sc_avmediaplayer.pngbin0 -> 396 bytes
-rw-r--r--default_images/res/commandimagelist/sc_backcolor.pngbin0 -> 616 bytes
-rw-r--r--default_images/res/commandimagelist/sc_backgroundcolor.pngbin0 -> 789 bytes
-rw-r--r--default_images/res/commandimagelist/sc_backgroundpatterncontroller.pngbin0 -> 789 bytes
-rw-r--r--default_images/res/commandimagelist/sc_backward.pngbin0 -> 464 bytes
-rw-r--r--default_images/res/commandimagelist/sc_basicshapes.block-arc.pngbin0 -> 710 bytes
-rw-r--r--default_images/res/commandimagelist/sc_basicshapes.can.pngbin0 -> 839 bytes
-rw-r--r--default_images/res/commandimagelist/sc_basicshapes.circle-pie.pngbin0 -> 765 bytes
-rw-r--r--default_images/res/commandimagelist/sc_basicshapes.circle.pngbin0 -> 855 bytes
-rw-r--r--default_images/res/commandimagelist/sc_basicshapes.cross.pngbin0 -> 569 bytes
-rw-r--r--default_images/res/commandimagelist/sc_basicshapes.cube.pngbin0 -> 628 bytes
-rw-r--r--default_images/res/commandimagelist/sc_basicshapes.diamond.pngbin0 -> 671 bytes
-rw-r--r--default_images/res/commandimagelist/sc_basicshapes.ellipse.pngbin0 -> 756 bytes
-rw-r--r--default_images/res/commandimagelist/sc_basicshapes.frame.pngbin0 -> 506 bytes
-rw-r--r--default_images/res/commandimagelist/sc_basicshapes.hexagon.pngbin0 -> 552 bytes
-rw-r--r--default_images/res/commandimagelist/sc_basicshapes.isosceles-triangle.pngbin0 -> 518 bytes
-rw-r--r--default_images/res/commandimagelist/sc_basicshapes.octagon.pngbin0 -> 615 bytes
-rw-r--r--default_images/res/commandimagelist/sc_basicshapes.paper.pngbin0 -> 547 bytes
-rw-r--r--default_images/res/commandimagelist/sc_basicshapes.parallelogram.pngbin0 -> 565 bytes
-rw-r--r--default_images/res/commandimagelist/sc_basicshapes.pentagon.pngbin0 -> 623 bytes
-rw-r--r--default_images/res/commandimagelist/sc_basicshapes.pngbin0 -> 671 bytes
-rw-r--r--default_images/res/commandimagelist/sc_basicshapes.quadrat.pngbin0 -> 431 bytes
-rw-r--r--default_images/res/commandimagelist/sc_basicshapes.rectangle.pngbin0 -> 378 bytes
-rw-r--r--default_images/res/commandimagelist/sc_basicshapes.right-triangle.pngbin0 -> 522 bytes
-rw-r--r--default_images/res/commandimagelist/sc_basicshapes.ring.pngbin0 -> 1044 bytes
-rw-r--r--default_images/res/commandimagelist/sc_basicshapes.round-quadrat.pngbin0 -> 624 bytes
-rw-r--r--default_images/res/commandimagelist/sc_basicshapes.round-rectangle.pngbin0 -> 539 bytes
-rw-r--r--default_images/res/commandimagelist/sc_basicshapes.trapezoid.pngbin0 -> 585 bytes
-rw-r--r--default_images/res/commandimagelist/sc_basicstepinto.pngbin0 -> 662 bytes
-rw-r--r--default_images/res/commandimagelist/sc_basicstepout.pngbin0 -> 718 bytes
-rw-r--r--default_images/res/commandimagelist/sc_basicstepover.pngbin0 -> 698 bytes
-rw-r--r--default_images/res/commandimagelist/sc_basicstop.pngbin0 -> 592 bytes
-rw-r--r--default_images/res/commandimagelist/sc_beamer.pngbin0 -> 202 bytes
-rw-r--r--default_images/res/commandimagelist/sc_beforeobject.pngbin0 -> 636 bytes
-rw-r--r--default_images/res/commandimagelist/sc_behindobject.pngbin0 -> 733 bytes
-rw-r--r--default_images/res/commandimagelist/sc_bezier_unfilled.pngbin0 -> 674 bytes
-rw-r--r--default_images/res/commandimagelist/sc_bezierappend.pngbin0 -> 521 bytes
-rw-r--r--default_images/res/commandimagelist/sc_bezierclose.pngbin0 -> 420 bytes
-rw-r--r--default_images/res/commandimagelist/sc_bezierconvert.pngbin0 -> 766 bytes
-rw-r--r--default_images/res/commandimagelist/sc_beziercutline.pngbin0 -> 882 bytes
-rw-r--r--default_images/res/commandimagelist/sc_bezierdelete.pngbin0 -> 533 bytes
-rw-r--r--default_images/res/commandimagelist/sc_bezieredge.pngbin0 -> 332 bytes
-rw-r--r--default_images/res/commandimagelist/sc_beziereliminatepoints.pngbin0 -> 503 bytes
-rw-r--r--default_images/res/commandimagelist/sc_bezierfill.pngbin0 -> 748 bytes
-rw-r--r--default_images/res/commandimagelist/sc_bezierinsert.pngbin0 -> 523 bytes
-rw-r--r--default_images/res/commandimagelist/sc_beziermove.pngbin0 -> 580 bytes
-rw-r--r--default_images/res/commandimagelist/sc_beziersmooth.pngbin0 -> 405 bytes
-rw-r--r--default_images/res/commandimagelist/sc_beziersymmetric.pngbin0 -> 446 bytes
-rw-r--r--default_images/res/commandimagelist/sc_bighandles.pngbin0 -> 439 bytes
-rw-r--r--default_images/res/commandimagelist/sc_bmpmask.pngbin0 -> 594 bytes
-rw-r--r--default_images/res/commandimagelist/sc_bmpmask_h.pngbin0 -> 141 bytes
-rw-r--r--default_images/res/commandimagelist/sc_bold.pngbin0 -> 473 bytes
-rw-r--r--default_images/res/commandimagelist/sc_borderdialog.pngbin0 -> 268 bytes
-rw-r--r--default_images/res/commandimagelist/sc_bringtofront.pngbin0 -> 509 bytes
-rw-r--r--default_images/res/commandimagelist/sc_browsebackward.pngbin0 -> 526 bytes
-rw-r--r--default_images/res/commandimagelist/sc_browseforward.pngbin0 -> 537 bytes
-rw-r--r--default_images/res/commandimagelist/sc_browseview.pngbin0 -> 825 bytes
-rw-r--r--default_images/res/commandimagelist/sc_bullet.pngbin0 -> 794 bytes
-rw-r--r--default_images/res/commandimagelist/sc_bulletsandnumberingdialog.pngbin0 -> 654 bytes
-rw-r--r--default_images/res/commandimagelist/sc_calloutshapes.cloud-callout.pngbin0 -> 863 bytes
-rw-r--r--default_images/res/commandimagelist/sc_calloutshapes.line-callout-1.pngbin0 -> 543 bytes
-rw-r--r--default_images/res/commandimagelist/sc_calloutshapes.line-callout-2.pngbin0 -> 569 bytes
-rw-r--r--default_images/res/commandimagelist/sc_calloutshapes.line-callout-3.pngbin0 -> 513 bytes
-rw-r--r--default_images/res/commandimagelist/sc_calloutshapes.pngbin0 -> 701 bytes
-rw-r--r--default_images/res/commandimagelist/sc_calloutshapes.rectangular-callout.pngbin0 -> 528 bytes
-rw-r--r--default_images/res/commandimagelist/sc_calloutshapes.round-callout.pngbin0 -> 842 bytes
-rw-r--r--default_images/res/commandimagelist/sc_calloutshapes.round-rectangular-callout.pngbin0 -> 701 bytes
-rw-r--r--default_images/res/commandimagelist/sc_cancel.pngbin0 -> 510 bytes
-rw-r--r--default_images/res/commandimagelist/sc_cellvertbottom.pngbin0 -> 630 bytes
-rw-r--r--default_images/res/commandimagelist/sc_cellvertcenter.pngbin0 -> 673 bytes
-rw-r--r--default_images/res/commandimagelist/sc_cellverttop.pngbin0 -> 645 bytes
-rw-r--r--default_images/res/commandimagelist/sc_centerpara.pngbin0 -> 324 bytes
-rw-r--r--default_images/res/commandimagelist/sc_chainframes.pngbin0 -> 532 bytes
-rw-r--r--default_images/res/commandimagelist/sc_changebezier.pngbin0 -> 779 bytes
-rw-r--r--default_images/res/commandimagelist/sc_changecasetolower.pngbin0 -> 555 bytes
-rw-r--r--default_images/res/commandimagelist/sc_changecasetoupper.pngbin0 -> 550 bytes
-rw-r--r--default_images/res/commandimagelist/sc_changedatabasefield.pngbin0 -> 1007 bytes
-rw-r--r--default_images/res/commandimagelist/sc_changepolygon.pngbin0 -> 844 bytes
-rw-r--r--default_images/res/commandimagelist/sc_charfontname.pngbin0 -> 814 bytes
-rw-r--r--default_images/res/commandimagelist/sc_checkbox.pngbin0 -> 620 bytes
-rw-r--r--default_images/res/commandimagelist/sc_choosecontrols.pngbin0 -> 676 bytes
-rw-r--r--default_images/res/commandimagelist/sc_choosedesign.pngbin0 -> 899 bytes
-rw-r--r--default_images/res/commandimagelist/sc_choosemacro.pngbin0 -> 652 bytes
-rw-r--r--default_images/res/commandimagelist/sc_choosepolygon.pngbin0 -> 477 bytes
-rw-r--r--default_images/res/commandimagelist/sc_circle.pngbin0 -> 855 bytes
-rw-r--r--default_images/res/commandimagelist/sc_circle_unfilled.pngbin0 -> 885 bytes
-rw-r--r--default_images/res/commandimagelist/sc_circlearc.pngbin0 -> 737 bytes
-rw-r--r--default_images/res/commandimagelist/sc_circlecut.pngbin0 -> 831 bytes
-rw-r--r--default_images/res/commandimagelist/sc_circlecut_unfilled.pngbin0 -> 884 bytes
-rw-r--r--default_images/res/commandimagelist/sc_circlepie.pngbin0 -> 765 bytes
-rw-r--r--default_images/res/commandimagelist/sc_circlepie_unfilled.pngbin0 -> 842 bytes
-rw-r--r--default_images/res/commandimagelist/sc_clickchangerotation.pngbin0 -> 922 bytes
-rw-r--r--default_images/res/commandimagelist/sc_closedoc.pngbin0 -> 784 bytes
-rw-r--r--default_images/res/commandimagelist/sc_closedocs.pngbin0 -> 401 bytes
-rw-r--r--default_images/res/commandimagelist/sc_closemasterview.pngbin0 -> 743 bytes
-rw-r--r--default_images/res/commandimagelist/sc_closewin.pngbin0 -> 784 bytes
-rw-r--r--default_images/res/commandimagelist/sc_color.pngbin0 -> 585 bytes
-rw-r--r--default_images/res/commandimagelist/sc_colorsettings.pngbin0 -> 698 bytes
-rw-r--r--default_images/res/commandimagelist/sc_colorview.pngbin0 -> 505 bytes
-rw-r--r--default_images/res/commandimagelist/sc_combobox.pngbin0 -> 765 bytes
-rw-r--r--default_images/res/commandimagelist/sc_commontaskbarvisible.pngbin0 -> 673 bytes
-rw-r--r--default_images/res/commandimagelist/sc_compilebasic.pngbin0 -> 736 bytes
-rw-r--r--default_images/res/commandimagelist/sc_cone.pngbin0 -> 593 bytes
-rw-r--r--default_images/res/commandimagelist/sc_config.pngbin0 -> 800 bytes
-rw-r--r--default_images/res/commandimagelist/sc_connector.pngbin0 -> 635 bytes
-rw-r--r--default_images/res/commandimagelist/sc_connectorarrowend.pngbin0 -> 695 bytes
-rw-r--r--default_images/res/commandimagelist/sc_connectorarrows.pngbin0 -> 733 bytes
-rw-r--r--default_images/res/commandimagelist/sc_connectorarrowstart.pngbin0 -> 748 bytes
-rw-r--r--default_images/res/commandimagelist/sc_connectorcircleend.pngbin0 -> 724 bytes
-rw-r--r--default_images/res/commandimagelist/sc_connectorcircles.pngbin0 -> 702 bytes
-rw-r--r--default_images/res/commandimagelist/sc_connectorcirclestart.pngbin0 -> 723 bytes
-rw-r--r--default_images/res/commandimagelist/sc_connectorcurve.pngbin0 -> 680 bytes
-rw-r--r--default_images/res/commandimagelist/sc_connectorcurvearrowend.pngbin0 -> 756 bytes
-rw-r--r--default_images/res/commandimagelist/sc_connectorcurvearrows.pngbin0 -> 799 bytes
-rw-r--r--default_images/res/commandimagelist/sc_connectorcurvearrowstart.pngbin0 -> 760 bytes
-rw-r--r--default_images/res/commandimagelist/sc_connectorcurvecircleend.pngbin0 -> 722 bytes
-rw-r--r--default_images/res/commandimagelist/sc_connectorcurvecircles.pngbin0 -> 679 bytes
-rw-r--r--default_images/res/commandimagelist/sc_connectorcurvecirclestart.pngbin0 -> 771 bytes
-rw-r--r--default_images/res/commandimagelist/sc_connectorline.pngbin0 -> 594 bytes
-rw-r--r--default_images/res/commandimagelist/sc_connectorlinearrowend.pngbin0 -> 660 bytes
-rw-r--r--default_images/res/commandimagelist/sc_connectorlinearrows.pngbin0 -> 647 bytes
-rw-r--r--default_images/res/commandimagelist/sc_connectorlinearrowstart.pngbin0 -> 686 bytes
-rw-r--r--default_images/res/commandimagelist/sc_connectorlinecircleend.pngbin0 -> 666 bytes
-rw-r--r--default_images/res/commandimagelist/sc_connectorlinecircles.pngbin0 -> 679 bytes
-rw-r--r--default_images/res/commandimagelist/sc_connectorlinecirclestart.pngbin0 -> 696 bytes
-rw-r--r--default_images/res/commandimagelist/sc_connectorlines.pngbin0 -> 614 bytes
-rw-r--r--default_images/res/commandimagelist/sc_connectorlinesarrowend.pngbin0 -> 699 bytes
-rw-r--r--default_images/res/commandimagelist/sc_connectorlinesarrows.pngbin0 -> 698 bytes
-rw-r--r--default_images/res/commandimagelist/sc_connectorlinesarrowstart.pngbin0 -> 733 bytes
-rw-r--r--default_images/res/commandimagelist/sc_connectorlinescircleend.pngbin0 -> 682 bytes
-rw-r--r--default_images/res/commandimagelist/sc_connectorlinescircles.pngbin0 -> 646 bytes
-rw-r--r--default_images/res/commandimagelist/sc_connectorlinescirclestart.pngbin0 -> 701 bytes
-rw-r--r--default_images/res/commandimagelist/sc_connectortoolbox.pngbin0 -> 702 bytes
-rw-r--r--default_images/res/commandimagelist/sc_contourdialog.pngbin0 -> 589 bytes
-rw-r--r--default_images/res/commandimagelist/sc_controlcodes.pngbin0 -> 489 bytes
-rw-r--r--default_images/res/commandimagelist/sc_controlproperties.pngbin0 -> 760 bytes
-rw-r--r--default_images/res/commandimagelist/sc_convertinto3d.pngbin0 -> 749 bytes
-rw-r--r--default_images/res/commandimagelist/sc_convertinto3dlathe.pngbin0 -> 712 bytes
-rw-r--r--default_images/res/commandimagelist/sc_convertinto3dlathefast.pngbin0 -> 702 bytes
-rw-r--r--default_images/res/commandimagelist/sc_copy.pngbin0 -> 600 bytes
-rw-r--r--default_images/res/commandimagelist/sc_countall.pngbin0 -> 202 bytes
-rw-r--r--default_images/res/commandimagelist/sc_crookrotate.pngbin0 -> 688 bytes
-rw-r--r--default_images/res/commandimagelist/sc_crookslant.pngbin0 -> 706 bytes
-rw-r--r--default_images/res/commandimagelist/sc_crop.pngbin0 -> 1068 bytes
-rw-r--r--default_images/res/commandimagelist/sc_cube.pngbin0 -> 631 bytes
-rw-r--r--default_images/res/commandimagelist/sc_currencyfield.pngbin0 -> 727 bytes
-rw-r--r--default_images/res/commandimagelist/sc_customanimation.pngbin0 -> 820 bytes
-rw-r--r--default_images/res/commandimagelist/sc_cut.pngbin0 -> 802 bytes
-rw-r--r--default_images/res/commandimagelist/sc_cylinder.pngbin0 -> 736 bytes
-rw-r--r--default_images/res/commandimagelist/sc_cyramid.pngbin0 -> 640 bytes
-rw-r--r--default_images/res/commandimagelist/sc_datadatapilotrun.pngbin0 -> 784 bytes
-rw-r--r--default_images/res/commandimagelist/sc_datafilterautofilter.pngbin0 -> 711 bytes
-rw-r--r--default_images/res/commandimagelist/sc_datafilterspecialfilter.pngbin0 -> 492 bytes
-rw-r--r--default_images/res/commandimagelist/sc_datafilterstandardfilter.pngbin0 -> 460 bytes
-rw-r--r--default_images/res/commandimagelist/sc_dataimport.pngbin0 -> 483 bytes
-rw-r--r--default_images/res/commandimagelist/sc_dataincolumns.pngbin0 -> 366 bytes
-rw-r--r--default_images/res/commandimagelist/sc_datainrows.pngbin0 -> 437 bytes
-rw-r--r--default_images/res/commandimagelist/sc_datefield.pngbin0 -> 626 bytes
-rw-r--r--default_images/res/commandimagelist/sc_dbaddrelation.pngbin0 -> 739 bytes
-rw-r--r--default_images/res/commandimagelist/sc_dbchangedesignmode.pngbin0 -> 803 bytes
-rw-r--r--default_images/res/commandimagelist/sc_dbclearquery.pngbin0 -> 883 bytes
-rw-r--r--default_images/res/commandimagelist/sc_dbdistinctvalues.pngbin0 -> 612 bytes
-rw-r--r--default_images/res/commandimagelist/sc_dbdtableedit.pngbin0 -> 683 bytes
-rw-r--r--default_images/res/commandimagelist/sc_dbformdelete.pngbin0 -> 768 bytes
-rw-r--r--default_images/res/commandimagelist/sc_dbformedit.pngbin0 -> 742 bytes
-rw-r--r--default_images/res/commandimagelist/sc_dbformopen.pngbin0 -> 628 bytes
-rw-r--r--default_images/res/commandimagelist/sc_dbformrename.pngbin0 -> 599 bytes
-rw-r--r--default_images/res/commandimagelist/sc_dbindexdesign.pngbin0 -> 696 bytes
-rw-r--r--default_images/res/commandimagelist/sc_dbnewform.pngbin0 -> 757 bytes
-rw-r--r--default_images/res/commandimagelist/sc_dbnewformautopilot.pngbin0 -> 852 bytes
-rw-r--r--default_images/res/commandimagelist/sc_dbnewquery.pngbin0 -> 903 bytes
-rw-r--r--default_images/res/commandimagelist/sc_dbnewqueryautopilot.pngbin0 -> 983 bytes
-rw-r--r--default_images/res/commandimagelist/sc_dbnewquerysql.pngbin0 -> 679 bytes
-rw-r--r--default_images/res/commandimagelist/sc_dbnewreport.pngbin0 -> 818 bytes
-rw-r--r--default_images/res/commandimagelist/sc_dbnewreportautopilot.pngbin0 -> 853 bytes
-rw-r--r--default_images/res/commandimagelist/sc_dbnewtable.pngbin0 -> 688 bytes
-rw-r--r--default_images/res/commandimagelist/sc_dbnewtableautopilot.pngbin0 -> 798 bytes
-rw-r--r--default_images/res/commandimagelist/sc_dbnewview.pngbin0 -> 767 bytes
-rw-r--r--default_images/res/commandimagelist/sc_dbnewviewsql.pngbin0 -> 850 bytes
-rw-r--r--default_images/res/commandimagelist/sc_dbquerydelete.pngbin0 -> 716 bytes
-rw-r--r--default_images/res/commandimagelist/sc_dbqueryedit.pngbin0 -> 805 bytes
-rw-r--r--default_images/res/commandimagelist/sc_dbqueryopen.pngbin0 -> 713 bytes
-rw-r--r--default_images/res/commandimagelist/sc_dbqueryrename.pngbin0 -> 473 bytes
-rw-r--r--default_images/res/commandimagelist/sc_dbreportdelete.pngbin0 -> 816 bytes
-rw-r--r--default_images/res/commandimagelist/sc_dbreportedit.pngbin0 -> 802 bytes
-rw-r--r--default_images/res/commandimagelist/sc_dbreportopen.pngbin0 -> 718 bytes
-rw-r--r--default_images/res/commandimagelist/sc_dbreportrename.pngbin0 -> 638 bytes
-rw-r--r--default_images/res/commandimagelist/sc_dbsortingandgrouping.pngbin0 -> 546 bytes
-rw-r--r--default_images/res/commandimagelist/sc_dbtabledelete.pngbin0 -> 716 bytes
-rw-r--r--default_images/res/commandimagelist/sc_dbtableedit.pngbin0 -> 683 bytes
-rw-r--r--default_images/res/commandimagelist/sc_dbtableopen.pngbin0 -> 617 bytes
-rw-r--r--default_images/res/commandimagelist/sc_dbtablerename.pngbin0 -> 473 bytes
-rw-r--r--default_images/res/commandimagelist/sc_dbviewaliases.pngbin0 -> 499 bytes
-rw-r--r--default_images/res/commandimagelist/sc_dbviewfunctions.pngbin0 -> 543 bytes
-rw-r--r--default_images/res/commandimagelist/sc_dbviewtablenames.pngbin0 -> 506 bytes
-rw-r--r--default_images/res/commandimagelist/sc_decrementindent.pngbin0 -> 538 bytes
-rw-r--r--default_images/res/commandimagelist/sc_decrementlevel.pngbin0 -> 482 bytes
-rw-r--r--default_images/res/commandimagelist/sc_decrementsublevels.pngbin0 -> 619 bytes
-rw-r--r--default_images/res/commandimagelist/sc_defaultbullet.pngbin0 -> 447 bytes
-rw-r--r--default_images/res/commandimagelist/sc_defaultnumbering.pngbin0 -> 379 bytes
-rw-r--r--default_images/res/commandimagelist/sc_definename.pngbin0 -> 422 bytes
-rw-r--r--default_images/res/commandimagelist/sc_defineprintarea.pngbin0 -> 713 bytes
-rw-r--r--default_images/res/commandimagelist/sc_delete.pngbin0 -> 510 bytes
-rwxr-xr-xdefault_images/res/commandimagelist/sc_deleteallannotation.pngbin0 -> 4117 bytes
-rwxr-xr-xdefault_images/res/commandimagelist/sc_deleteannotation.pngbin0 -> 4042 bytes
-rw-r--r--default_images/res/commandimagelist/sc_deletecolumns.pngbin0 -> 486 bytes
-rw-r--r--default_images/res/commandimagelist/sc_deletemasterpage.pngbin0 -> 802 bytes
-rw-r--r--default_images/res/commandimagelist/sc_deleteprintarea.pngbin0 -> 694 bytes
-rw-r--r--default_images/res/commandimagelist/sc_deleterecord.pngbin0 -> 682 bytes
-rw-r--r--default_images/res/commandimagelist/sc_deleterows.pngbin0 -> 380 bytes
-rw-r--r--default_images/res/commandimagelist/sc_designerdialog.pngbin0 -> 671 bytes
-rw-r--r--default_images/res/commandimagelist/sc_dia.pngbin0 -> 735 bytes
-rw-r--r--default_images/res/commandimagelist/sc_diaauto.pngbin0 -> 735 bytes
-rw-r--r--default_images/res/commandimagelist/sc_diaeffect.pngbin0 -> 735 bytes
-rw-r--r--default_images/res/commandimagelist/sc_diagramdata.pngbin0 -> 404 bytes
-rw-r--r--default_images/res/commandimagelist/sc_diagramtype.pngbin0 -> 701 bytes
-rw-r--r--default_images/res/commandimagelist/sc_diaspeed.pngbin0 -> 735 bytes
-rw-r--r--default_images/res/commandimagelist/sc_diatime.pngbin0 -> 735 bytes
-rw-r--r--default_images/res/commandimagelist/sc_distributecolumns.pngbin0 -> 603 bytes
-rw-r--r--default_images/res/commandimagelist/sc_distributerows.pngbin0 -> 424 bytes
-rw-r--r--default_images/res/commandimagelist/sc_doubleclicktextedit.pngbin0 -> 721 bytes
-rw-r--r--default_images/res/commandimagelist/sc_downsearch.pngbin0 -> 3927 bytes
-rw-r--r--default_images/res/commandimagelist/sc_draw.pngbin0 -> 909 bytes
-rw-r--r--default_images/res/commandimagelist/sc_drawcaption.pngbin0 -> 862 bytes
-rw-r--r--default_images/res/commandimagelist/sc_drawchart.pngbin0 -> 529 bytes
-rw-r--r--default_images/res/commandimagelist/sc_drawselect.pngbin0 -> 568 bytes
-rw-r--r--default_images/res/commandimagelist/sc_drawtext.pngbin0 -> 509 bytes
-rw-r--r--default_images/res/commandimagelist/sc_dsbdocumentdatasource.pngbin0 -> 1066 bytes
-rw-r--r--default_images/res/commandimagelist/sc_dsbeditdoc.pngbin0 -> 760 bytes
-rw-r--r--default_images/res/commandimagelist/sc_dsbformletter.pngbin0 -> 695 bytes
-rw-r--r--default_images/res/commandimagelist/sc_dsbinsertcolumns.pngbin0 -> 484 bytes
-rw-r--r--default_images/res/commandimagelist/sc_dsbinsertcontent.pngbin0 -> 485 bytes
-rw-r--r--default_images/res/commandimagelist/sc_dsbrowserexplorer.pngbin0 -> 731 bytes
-rw-r--r--default_images/res/commandimagelist/sc_duplicatepage.pngbin0 -> 760 bytes
-rw-r--r--default_images/res/commandimagelist/sc_edit.pngbin0 -> 547 bytes
-rw-r--r--default_images/res/commandimagelist/sc_editdoc.pngbin0 -> 760 bytes
-rw-r--r--default_images/res/commandimagelist/sc_editframeset.pngbin0 -> 202 bytes
-rw-r--r--default_images/res/commandimagelist/sc_editglossary.pngbin0 -> 650 bytes
-rw-r--r--default_images/res/commandimagelist/sc_editheaderandfooter.pngbin0 -> 556 bytes
-rw-r--r--default_images/res/commandimagelist/sc_editprintarea.pngbin0 -> 673 bytes
-rw-r--r--default_images/res/commandimagelist/sc_ellipse.pngbin0 -> 756 bytes
-rw-r--r--default_images/res/commandimagelist/sc_ellipse_unfilled.pngbin0 -> 802 bytes
-rw-r--r--default_images/res/commandimagelist/sc_ellipsecut.pngbin0 -> 722 bytes
-rw-r--r--default_images/res/commandimagelist/sc_ellipsecut_unfilled.pngbin0 -> 819 bytes
-rw-r--r--default_images/res/commandimagelist/sc_ellipsetoolbox.pngbin0 -> 756 bytes
-rw-r--r--default_images/res/commandimagelist/sc_entergroup.pngbin0 -> 698 bytes
-rw-r--r--default_images/res/commandimagelist/sc_entirecolumn.pngbin0 -> 703 bytes
-rw-r--r--default_images/res/commandimagelist/sc_entirerow.pngbin0 -> 615 bytes
-rw-r--r--default_images/res/commandimagelist/sc_euroconverter.pngbin0 -> 560 bytes
-rw-r--r--default_images/res/commandimagelist/sc_executereport.pngbin0 -> 760 bytes
-rw-r--r--default_images/res/commandimagelist/sc_expandpage.pngbin0 -> 421 bytes
-rw-r--r--default_images/res/commandimagelist/sc_exportdialog.pngbin0 -> 647 bytes
-rw-r--r--default_images/res/commandimagelist/sc_exportdirecttopdf.pngbin0 -> 606 bytes
-rw-r--r--default_images/res/commandimagelist/sc_exportto.pngbin0 -> 758 bytes
-rw-r--r--default_images/res/commandimagelist/sc_extendedhelp.pngbin0 -> 937 bytes
-rw-r--r--default_images/res/commandimagelist/sc_extrusion3dcolor.pngbin0 -> 570 bytes
-rw-r--r--default_images/res/commandimagelist/sc_extrusiondepthfloater.pngbin0 -> 795 bytes
-rw-r--r--default_images/res/commandimagelist/sc_extrusiondirectionfloater.pngbin0 -> 786 bytes
-rw-r--r--default_images/res/commandimagelist/sc_extrusionlightingfloater.pngbin0 -> 474 bytes
-rw-r--r--default_images/res/commandimagelist/sc_extrusionsurfacefloater.pngbin0 -> 919 bytes
-rw-r--r--default_images/res/commandimagelist/sc_extrusiontiltdown.pngbin0 -> 933 bytes
-rw-r--r--default_images/res/commandimagelist/sc_extrusiontiltleft.pngbin0 -> 980 bytes
-rw-r--r--default_images/res/commandimagelist/sc_extrusiontiltright.pngbin0 -> 1018 bytes
-rw-r--r--default_images/res/commandimagelist/sc_extrusiontiltup.pngbin0 -> 952 bytes
-rw-r--r--default_images/res/commandimagelist/sc_extrusiontoggle.pngbin0 -> 771 bytes
-rw-r--r--default_images/res/commandimagelist/sc_fieldnames.pngbin0 -> 488 bytes
-rw-r--r--default_images/res/commandimagelist/sc_fields.pngbin0 -> 488 bytes
-rw-r--r--default_images/res/commandimagelist/sc_filecontrol.pngbin0 -> 761 bytes
-rw-r--r--default_images/res/commandimagelist/sc_filedocument.pngbin0 -> 202 bytes
-rw-r--r--default_images/res/commandimagelist/sc_fillshadow.pngbin0 -> 404 bytes
-rw-r--r--default_images/res/commandimagelist/sc_fillstyle.pngbin0 -> 831 bytes
-rw-r--r--default_images/res/commandimagelist/sc_filtercrit.pngbin0 -> 460 bytes
-rw-r--r--default_images/res/commandimagelist/sc_firstpage.pngbin0 -> 794 bytes
-rw-r--r--default_images/res/commandimagelist/sc_firstrecord.pngbin0 -> 530 bytes
-rw-r--r--default_images/res/commandimagelist/sc_fliphorizontal.pngbin0 -> 611 bytes
-rw-r--r--default_images/res/commandimagelist/sc_flipvertical.pngbin0 -> 654 bytes
-rw-r--r--default_images/res/commandimagelist/sc_flowchartshapes.flowchart-alternate-process.pngbin0 -> 624 bytes
-rw-r--r--default_images/res/commandimagelist/sc_flowchartshapes.flowchart-card.pngbin0 -> 490 bytes
-rw-r--r--default_images/res/commandimagelist/sc_flowchartshapes.flowchart-collate.pngbin0 -> 641 bytes
-rw-r--r--default_images/res/commandimagelist/sc_flowchartshapes.flowchart-connector.pngbin0 -> 855 bytes
-rw-r--r--default_images/res/commandimagelist/sc_flowchartshapes.flowchart-data.pngbin0 -> 565 bytes
-rw-r--r--default_images/res/commandimagelist/sc_flowchartshapes.flowchart-decision.pngbin0 -> 671 bytes
-rw-r--r--default_images/res/commandimagelist/sc_flowchartshapes.flowchart-delay.pngbin0 -> 732 bytes
-rw-r--r--default_images/res/commandimagelist/sc_flowchartshapes.flowchart-direct-access-storage.pngbin0 -> 816 bytes
-rw-r--r--default_images/res/commandimagelist/sc_flowchartshapes.flowchart-display.pngbin0 -> 607 bytes
-rw-r--r--default_images/res/commandimagelist/sc_flowchartshapes.flowchart-document.pngbin0 -> 682 bytes
-rw-r--r--default_images/res/commandimagelist/sc_flowchartshapes.flowchart-extract.pngbin0 -> 518 bytes
-rw-r--r--default_images/res/commandimagelist/sc_flowchartshapes.flowchart-internal-storage.pngbin0 -> 466 bytes
-rw-r--r--default_images/res/commandimagelist/sc_flowchartshapes.flowchart-magnetic-disk.pngbin0 -> 839 bytes
-rw-r--r--default_images/res/commandimagelist/sc_flowchartshapes.flowchart-manual-input.pngbin0 -> 487 bytes
-rw-r--r--default_images/res/commandimagelist/sc_flowchartshapes.flowchart-manual-operation.pngbin0 -> 585 bytes
-rw-r--r--default_images/res/commandimagelist/sc_flowchartshapes.flowchart-merge.pngbin0 -> 557 bytes
-rw-r--r--default_images/res/commandimagelist/sc_flowchartshapes.flowchart-multidocument.pngbin0 -> 660 bytes
-rw-r--r--default_images/res/commandimagelist/sc_flowchartshapes.flowchart-off-page-connector.pngbin0 -> 530 bytes
-rw-r--r--default_images/res/commandimagelist/sc_flowchartshapes.flowchart-or.pngbin0 -> 932 bytes
-rw-r--r--default_images/res/commandimagelist/sc_flowchartshapes.flowchart-predefined-process.pngbin0 -> 506 bytes
-rw-r--r--default_images/res/commandimagelist/sc_flowchartshapes.flowchart-preparation.pngbin0 -> 552 bytes
-rw-r--r--default_images/res/commandimagelist/sc_flowchartshapes.flowchart-process.pngbin0 -> 431 bytes
-rw-r--r--default_images/res/commandimagelist/sc_flowchartshapes.flowchart-punched-tape.pngbin0 -> 864 bytes
-rw-r--r--default_images/res/commandimagelist/sc_flowchartshapes.flowchart-sequential-access.pngbin0 -> 865 bytes
-rw-r--r--default_images/res/commandimagelist/sc_flowchartshapes.flowchart-sort.pngbin0 -> 678 bytes
-rw-r--r--default_images/res/commandimagelist/sc_flowchartshapes.flowchart-stored-data.pngbin0 -> 706 bytes
-rw-r--r--default_images/res/commandimagelist/sc_flowchartshapes.flowchart-summing-junction.pngbin0 -> 1018 bytes
-rw-r--r--default_images/res/commandimagelist/sc_flowchartshapes.flowchart-terminator.pngbin0 -> 488 bytes
-rw-r--r--default_images/res/commandimagelist/sc_flowchartshapes.pngbin0 -> 466 bytes
-rw-r--r--default_images/res/commandimagelist/sc_fontcolor.pngbin0 -> 585 bytes
-rw-r--r--default_images/res/commandimagelist/sc_fontdialog.pngbin0 -> 762 bytes
-rw-r--r--default_images/res/commandimagelist/sc_fontheight.pngbin0 -> 938 bytes
-rw-r--r--default_images/res/commandimagelist/sc_fontwork.pngbin0 -> 514 bytes
-rw-r--r--default_images/res/commandimagelist/sc_fontworkalignmentfloater.pngbin0 -> 324 bytes
-rw-r--r--default_images/res/commandimagelist/sc_fontworkcharacterspacingfloater.pngbin0 -> 780 bytes
-rw-r--r--default_images/res/commandimagelist/sc_fontworkgalleryfloater.pngbin0 -> 611 bytes
-rw-r--r--default_images/res/commandimagelist/sc_fontworksameletterheights.pngbin0 -> 470 bytes
-rw-r--r--default_images/res/commandimagelist/sc_fontworkshapetype.fontwork-arch-down-curve.pngbin0 -> 323 bytes
-rw-r--r--default_images/res/commandimagelist/sc_fontworkshapetype.fontwork-arch-down-pour.pngbin0 -> 320 bytes
-rw-r--r--default_images/res/commandimagelist/sc_fontworkshapetype.fontwork-arch-left-curve.pngbin0 -> 325 bytes
-rw-r--r--default_images/res/commandimagelist/sc_fontworkshapetype.fontwork-arch-left-pour.pngbin0 -> 328 bytes
-rw-r--r--default_images/res/commandimagelist/sc_fontworkshapetype.fontwork-arch-right-curve.pngbin0 -> 333 bytes
-rw-r--r--default_images/res/commandimagelist/sc_fontworkshapetype.fontwork-arch-right-pour.pngbin0 -> 334 bytes
-rw-r--r--default_images/res/commandimagelist/sc_fontworkshapetype.fontwork-arch-up-curve.pngbin0 -> 322 bytes
-rw-r--r--default_images/res/commandimagelist/sc_fontworkshapetype.fontwork-arch-up-pour.pngbin0 -> 323 bytes
-rw-r--r--default_images/res/commandimagelist/sc_fontworkshapetype.fontwork-chevron-down.pngbin0 -> 330 bytes
-rw-r--r--default_images/res/commandimagelist/sc_fontworkshapetype.fontwork-chevron-up.pngbin0 -> 316 bytes
-rw-r--r--default_images/res/commandimagelist/sc_fontworkshapetype.fontwork-circle-curve.pngbin0 -> 347 bytes
-rw-r--r--default_images/res/commandimagelist/sc_fontworkshapetype.fontwork-circle-pour.pngbin0 -> 356 bytes
-rw-r--r--default_images/res/commandimagelist/sc_fontworkshapetype.fontwork-curve-down.pngbin0 -> 366 bytes
-rw-r--r--default_images/res/commandimagelist/sc_fontworkshapetype.fontwork-curve-up.pngbin0 -> 363 bytes
-rw-r--r--default_images/res/commandimagelist/sc_fontworkshapetype.fontwork-fade-down.pngbin0 -> 289 bytes
-rw-r--r--default_images/res/commandimagelist/sc_fontworkshapetype.fontwork-fade-left.pngbin0 -> 288 bytes
-rw-r--r--default_images/res/commandimagelist/sc_fontworkshapetype.fontwork-fade-right.pngbin0 -> 284 bytes
-rw-r--r--default_images/res/commandimagelist/sc_fontworkshapetype.fontwork-fade-up-and-left.pngbin0 -> 318 bytes
-rw-r--r--default_images/res/commandimagelist/sc_fontworkshapetype.fontwork-fade-up-and-right.pngbin0 -> 308 bytes
-rw-r--r--default_images/res/commandimagelist/sc_fontworkshapetype.fontwork-fade-up.pngbin0 -> 292 bytes
-rw-r--r--default_images/res/commandimagelist/sc_fontworkshapetype.fontwork-inflate.pngbin0 -> 280 bytes
-rw-r--r--default_images/res/commandimagelist/sc_fontworkshapetype.fontwork-open-circle-curve.pngbin0 -> 349 bytes
-rw-r--r--default_images/res/commandimagelist/sc_fontworkshapetype.fontwork-open-circle-pour.pngbin0 -> 357 bytes
-rw-r--r--default_images/res/commandimagelist/sc_fontworkshapetype.fontwork-plain-text.pngbin0 -> 247 bytes
-rw-r--r--default_images/res/commandimagelist/sc_fontworkshapetype.fontwork-slant-down.pngbin0 -> 300 bytes
-rw-r--r--default_images/res/commandimagelist/sc_fontworkshapetype.fontwork-slant-up.pngbin0 -> 294 bytes
-rw-r--r--default_images/res/commandimagelist/sc_fontworkshapetype.fontwork-stop.pngbin0 -> 280 bytes
-rw-r--r--default_images/res/commandimagelist/sc_fontworkshapetype.fontwork-triangle-down.pngbin0 -> 307 bytes
-rw-r--r--default_images/res/commandimagelist/sc_fontworkshapetype.fontwork-triangle-up.pngbin0 -> 310 bytes
-rw-r--r--default_images/res/commandimagelist/sc_fontworkshapetype.fontwork-wave.pngbin0 -> 335 bytes
-rw-r--r--default_images/res/commandimagelist/sc_fontworkshapetype.pngbin0 -> 514 bytes
-rw-r--r--default_images/res/commandimagelist/sc_formatarea.pngbin0 -> 831 bytes
-rw-r--r--default_images/res/commandimagelist/sc_formatgroup.pngbin0 -> 568 bytes
-rw-r--r--default_images/res/commandimagelist/sc_formatline.pngbin0 -> 509 bytes
-rw-r--r--default_images/res/commandimagelist/sc_formatpaintbrush.pngbin0 -> 852 bytes
-rw-r--r--default_images/res/commandimagelist/sc_formattedfield.pngbin0 -> 519 bytes
-rw-r--r--default_images/res/commandimagelist/sc_formatungroup.pngbin0 -> 532 bytes
-rw-r--r--default_images/res/commandimagelist/sc_formdesigntools.pngbin0 -> 662 bytes
-rw-r--r--default_images/res/commandimagelist/sc_formelcursor.pngbin0 -> 462 bytes
-rw-r--r--default_images/res/commandimagelist/sc_formfilter.pngbin0 -> 541 bytes
-rw-r--r--default_images/res/commandimagelist/sc_formfiltered.pngbin0 -> 588 bytes
-rw-r--r--default_images/res/commandimagelist/sc_formfilterexecute.pngbin0 -> 460 bytes
-rw-r--r--default_images/res/commandimagelist/sc_formfilternavigator.pngbin0 -> 772 bytes
-rw-r--r--default_images/res/commandimagelist/sc_formproperties.pngbin0 -> 688 bytes
-rw-r--r--default_images/res/commandimagelist/sc_forward.pngbin0 -> 455 bytes
-rw-r--r--default_images/res/commandimagelist/sc_framedialog.pngbin0 -> 665 bytes
-rw-r--r--default_images/res/commandimagelist/sc_framelinecolor.pngbin0 -> 315 bytes
-rw-r--r--default_images/res/commandimagelist/sc_freeline.pngbin0 -> 781 bytes
-rw-r--r--default_images/res/commandimagelist/sc_freeline_unfilled.pngbin0 -> 795 bytes
-rw-r--r--default_images/res/commandimagelist/sc_fullscreen.pngbin0 -> 494 bytes
-rw-r--r--default_images/res/commandimagelist/sc_gallery.pngbin0 -> 649 bytes
-rw-r--r--default_images/res/commandimagelist/sc_getactivetask.pngbin0 -> 202 bytes
-rw-r--r--default_images/res/commandimagelist/sc_glueeditmode.pngbin0 -> 586 bytes
-rw-r--r--default_images/res/commandimagelist/sc_glueescapedirectionbottom.pngbin0 -> 573 bytes
-rw-r--r--default_images/res/commandimagelist/sc_glueescapedirectionleft.pngbin0 -> 569 bytes
-rw-r--r--default_images/res/commandimagelist/sc_glueescapedirectionright.pngbin0 -> 574 bytes
-rw-r--r--default_images/res/commandimagelist/sc_glueescapedirectiontop.pngbin0 -> 575 bytes
-rw-r--r--default_images/res/commandimagelist/sc_gluehorzaligncenter.pngbin0 -> 587 bytes
-rw-r--r--default_images/res/commandimagelist/sc_gluehorzalignleft.pngbin0 -> 618 bytes
-rw-r--r--default_images/res/commandimagelist/sc_gluehorzalignright.pngbin0 -> 636 bytes
-rw-r--r--default_images/res/commandimagelist/sc_glueinsertpoint.pngbin0 -> 645 bytes
-rw-r--r--default_images/res/commandimagelist/sc_gluepercent.pngbin0 -> 688 bytes
-rw-r--r--default_images/res/commandimagelist/sc_gluevertalignbottom.pngbin0 -> 632 bytes
-rw-r--r--default_images/res/commandimagelist/sc_gluevertaligncenter.pngbin0 -> 596 bytes
-rw-r--r--default_images/res/commandimagelist/sc_gluevertaligntop.pngbin0 -> 644 bytes
-rw-r--r--default_images/res/commandimagelist/sc_goalseekdialog.pngbin0 -> 646 bytes
-rw-r--r--default_images/res/commandimagelist/sc_gotoend.pngbin0 -> 601 bytes
-rw-r--r--default_images/res/commandimagelist/sc_gotoendofdoc.pngbin0 -> 739 bytes
-rw-r--r--default_images/res/commandimagelist/sc_gotostartofdoc.pngbin0 -> 794 bytes
-rw-r--r--default_images/res/commandimagelist/sc_gotostartoftable.pngbin0 -> 600 bytes
-rw-r--r--default_images/res/commandimagelist/sc_grafattrcrop.pngbin0 -> 1068 bytes
-rw-r--r--default_images/res/commandimagelist/sc_grafblue.pngbin0 -> 615 bytes
-rw-r--r--default_images/res/commandimagelist/sc_grafcontrast.pngbin0 -> 737 bytes
-rw-r--r--default_images/res/commandimagelist/sc_grafgamma.pngbin0 -> 836 bytes
-rw-r--r--default_images/res/commandimagelist/sc_grafgreen.pngbin0 -> 615 bytes
-rw-r--r--default_images/res/commandimagelist/sc_grafinvert.pngbin0 -> 542 bytes
-rw-r--r--default_images/res/commandimagelist/sc_grafluminance.pngbin0 -> 787 bytes
-rw-r--r--default_images/res/commandimagelist/sc_grafmode.pngbin0 -> 674 bytes
-rw-r--r--default_images/res/commandimagelist/sc_grafred.pngbin0 -> 612 bytes
-rw-r--r--default_images/res/commandimagelist/sc_graftransparence.pngbin0 -> 659 bytes
-rw-r--r--default_images/res/commandimagelist/sc_graphic.pngbin0 -> 710 bytes
-rw-r--r--default_images/res/commandimagelist/sc_graphicfilterinvert.pngbin0 -> 542 bytes
-rw-r--r--default_images/res/commandimagelist/sc_graphicfiltermosaic.pngbin0 -> 320 bytes
-rw-r--r--default_images/res/commandimagelist/sc_graphicfilterpopart.pngbin0 -> 350 bytes
-rw-r--r--default_images/res/commandimagelist/sc_graphicfilterposter.pngbin0 -> 689 bytes
-rw-r--r--default_images/res/commandimagelist/sc_graphicfilterrelief.pngbin0 -> 835 bytes
-rw-r--r--default_images/res/commandimagelist/sc_graphicfilterremovenoise.pngbin0 -> 558 bytes
-rw-r--r--default_images/res/commandimagelist/sc_graphicfiltersepia.pngbin0 -> 682 bytes
-rw-r--r--default_images/res/commandimagelist/sc_graphicfiltersharpen.pngbin0 -> 507 bytes
-rw-r--r--default_images/res/commandimagelist/sc_graphicfiltersmooth.pngbin0 -> 621 bytes
-rw-r--r--default_images/res/commandimagelist/sc_graphicfiltersobel.pngbin0 -> 379 bytes
-rw-r--r--default_images/res/commandimagelist/sc_graphicfiltersolarize.pngbin0 -> 749 bytes
-rw-r--r--default_images/res/commandimagelist/sc_graphicfiltertoolbox.pngbin0 -> 649 bytes
-rw-r--r--default_images/res/commandimagelist/sc_greatestheight.pngbin0 -> 722 bytes
-rw-r--r--default_images/res/commandimagelist/sc_greatestwidth.pngbin0 -> 632 bytes
-rw-r--r--default_images/res/commandimagelist/sc_grid.pngbin0 -> 404 bytes
-rw-r--r--default_images/res/commandimagelist/sc_griduse.pngbin0 -> 432 bytes
-rw-r--r--default_images/res/commandimagelist/sc_gridvisible.pngbin0 -> 283 bytes
-rw-r--r--default_images/res/commandimagelist/sc_group.pngbin0 -> 483 bytes
-rw-r--r--default_images/res/commandimagelist/sc_groupbox.pngbin0 -> 650 bytes
-rw-r--r--default_images/res/commandimagelist/sc_grow.pngbin0 -> 870 bytes
-rw-r--r--default_images/res/commandimagelist/sc_halfsphere.pngbin0 -> 857 bytes
-rw-r--r--default_images/res/commandimagelist/sc_handlesdraft.pngbin0 -> 359 bytes
-rw-r--r--default_images/res/commandimagelist/sc_help.pngbin0 -> 801 bytes
-rw-r--r--default_images/res/commandimagelist/sc_helpannotate.pngbin0 -> 625 bytes
-rw-r--r--default_images/res/commandimagelist/sc_helpbookmark.pngbin0 -> 569 bytes
-rw-r--r--default_images/res/commandimagelist/sc_helpdownload.pngbin0 -> 202 bytes
-rw-r--r--default_images/res/commandimagelist/sc_helperdialog.pngbin0 -> 998 bytes
-rw-r--r--default_images/res/commandimagelist/sc_helpindex.pngbin0 -> 998 bytes
-rw-r--r--default_images/res/commandimagelist/sc_helplinesmove.pngbin0 -> 428 bytes
-rw-r--r--default_images/res/commandimagelist/sc_helplinesuse.pngbin0 -> 481 bytes
-rw-r--r--default_images/res/commandimagelist/sc_helplinesvisible.pngbin0 -> 347 bytes
-rw-r--r--default_images/res/commandimagelist/sc_helpmenu.pngbin0 -> 802 bytes
-rw-r--r--default_images/res/commandimagelist/sc_helpsearch.pngbin0 -> 680 bytes
-rw-r--r--default_images/res/commandimagelist/sc_helpzoomin.pngbin0 -> 763 bytes
-rw-r--r--default_images/res/commandimagelist/sc_helpzoomout.pngbin0 -> 737 bytes
-rw-r--r--default_images/res/commandimagelist/sc_hfixedline.pngbin0 -> 337 bytes
-rw-r--r--default_images/res/commandimagelist/sc_hideslide.pngbin0 -> 606 bytes
-rw-r--r--default_images/res/commandimagelist/sc_hscrollbar.pngbin0 -> 593 bytes
-rw-r--r--default_images/res/commandimagelist/sc_hyperlinkdialog.pngbin0 -> 1184 bytes
-rw-r--r--default_images/res/commandimagelist/sc_hyphenate.pngbin0 -> 525 bytes
-rw-r--r--default_images/res/commandimagelist/sc_hyphenation.pngbin0 -> 525 bytes
-rw-r--r--default_images/res/commandimagelist/sc_imagebutton.pngbin0 -> 742 bytes
-rw-r--r--default_images/res/commandimagelist/sc_imagecontrol.pngbin0 -> 649 bytes
-rw-r--r--default_images/res/commandimagelist/sc_imagemapdialog.pngbin0 -> 701 bytes
-rwxr-xr-xdefault_images/res/commandimagelist/sc_importdialog.pngbin0 -> 592 bytes
-rw-r--r--default_images/res/commandimagelist/sc_importfromfile.pngbin0 -> 760 bytes
-rw-r--r--default_images/res/commandimagelist/sc_incrementindent.pngbin0 -> 538 bytes
-rw-r--r--default_images/res/commandimagelist/sc_incrementlevel.pngbin0 -> 488 bytes
-rw-r--r--default_images/res/commandimagelist/sc_incrementsublevels.pngbin0 -> 626 bytes
-rw-r--r--default_images/res/commandimagelist/sc_inscellsctrl.pngbin0 -> 622 bytes
-rw-r--r--default_images/res/commandimagelist/sc_insertannotation.pngbin0 -> 3987 bytes
-rw-r--r--default_images/res/commandimagelist/sc_insertauthorfield.pngbin0 -> 846 bytes
-rw-r--r--default_images/res/commandimagelist/sc_insertavmedia.pngbin0 -> 548 bytes
-rw-r--r--default_images/res/commandimagelist/sc_insertbookmark.pngbin0 -> 651 bytes
-rw-r--r--default_images/res/commandimagelist/sc_insertcaptiondialog.pngbin0 -> 504 bytes
-rw-r--r--default_images/res/commandimagelist/sc_insertcellsdown.pngbin0 -> 747 bytes
-rw-r--r--default_images/res/commandimagelist/sc_insertcellsright.pngbin0 -> 689 bytes
-rw-r--r--default_images/res/commandimagelist/sc_insertcolumns.pngbin0 -> 586 bytes
-rw-r--r--default_images/res/commandimagelist/sc_insertctrl.pngbin0 -> 393 bytes
-rw-r--r--default_images/res/commandimagelist/sc_insertcurrencyfield.pngbin0 -> 727 bytes
-rw-r--r--default_images/res/commandimagelist/sc_insertdatefield.pngbin0 -> 626 bytes
-rw-r--r--default_images/res/commandimagelist/sc_insertdoc.pngbin0 -> 801 bytes
-rw-r--r--default_images/res/commandimagelist/sc_insertdraw.pngbin0 -> 742 bytes
-rw-r--r--default_images/res/commandimagelist/sc_insertedit.pngbin0 -> 547 bytes
-rw-r--r--default_images/res/commandimagelist/sc_insertendnote.pngbin0 -> 706 bytes
-rw-r--r--default_images/res/commandimagelist/sc_insertfield.pngbin0 -> 484 bytes
-rw-r--r--default_images/res/commandimagelist/sc_insertfieldctrl.pngbin0 -> 484 bytes
-rw-r--r--default_images/res/commandimagelist/sc_insertfilecontrol.pngbin0 -> 761 bytes
-rw-r--r--default_images/res/commandimagelist/sc_insertfixedtext.pngbin0 -> 425 bytes
-rw-r--r--default_images/res/commandimagelist/sc_insertfootnote.pngbin0 -> 735 bytes
-rw-r--r--default_images/res/commandimagelist/sc_insertformattedfield.pngbin0 -> 519 bytes
-rw-r--r--default_images/res/commandimagelist/sc_insertformula.pngbin0 -> 651 bytes
-rw-r--r--default_images/res/commandimagelist/sc_insertframe.pngbin0 -> 466 bytes
-rw-r--r--default_images/res/commandimagelist/sc_insertframeinteract.pngbin0 -> 466 bytes
-rw-r--r--default_images/res/commandimagelist/sc_insertframeinteractnocolumns.pngbin0 -> 466 bytes
-rw-r--r--default_images/res/commandimagelist/sc_insertgraphic.pngbin0 -> 768 bytes
-rw-r--r--default_images/res/commandimagelist/sc_inserthyperlink.pngbin0 -> 802 bytes
-rw-r--r--default_images/res/commandimagelist/sc_insertimagecontrol.pngbin0 -> 649 bytes
-rw-r--r--default_images/res/commandimagelist/sc_insertindexesentry.pngbin0 -> 461 bytes
-rw-r--r--default_images/res/commandimagelist/sc_insertlistbox.pngbin0 -> 728 bytes
-rw-r--r--default_images/res/commandimagelist/sc_insertmasterpage.pngbin0 -> 643 bytes
-rw-r--r--default_images/res/commandimagelist/sc_insertmath.pngbin0 -> 511 bytes
-rw-r--r--default_images/res/commandimagelist/sc_insertneutralparagraph.pngbin0 -> 343 bytes
-rw-r--r--default_images/res/commandimagelist/sc_insertnumericfield.pngbin0 -> 435 bytes
-rw-r--r--default_images/res/commandimagelist/sc_insertobjctrl.pngbin0 -> 636 bytes
-rw-r--r--default_images/res/commandimagelist/sc_insertobject.pngbin0 -> 636 bytes
-rw-r--r--default_images/res/commandimagelist/sc_insertobjectchart.pngbin0 -> 529 bytes
-rw-r--r--default_images/res/commandimagelist/sc_insertobjectdialog.pngbin0 -> 636 bytes
-rw-r--r--default_images/res/commandimagelist/sc_insertobjectfloatingframe.pngbin0 -> 429 bytes
-rw-r--r--default_images/res/commandimagelist/sc_insertobjectstarmath.pngbin0 -> 511 bytes
-rw-r--r--default_images/res/commandimagelist/sc_insertpage.pngbin0 -> 3991 bytes
-rw-r--r--default_images/res/commandimagelist/sc_insertpagecountfield.pngbin0 -> 825 bytes
-rw-r--r--default_images/res/commandimagelist/sc_insertpagenumberfield.pngbin0 -> 699 bytes
-rw-r--r--default_images/res/commandimagelist/sc_insertpatternfield.pngbin0 -> 492 bytes
-rw-r--r--default_images/res/commandimagelist/sc_insertplugin.pngbin0 -> 705 bytes
-rw-r--r--default_images/res/commandimagelist/sc_insertpushbutton.pngbin0 -> 577 bytes
-rw-r--r--default_images/res/commandimagelist/sc_insertreferencefield.pngbin0 -> 540 bytes
-rw-r--r--default_images/res/commandimagelist/sc_insertrows.pngbin0 -> 502 bytes
-rw-r--r--default_images/res/commandimagelist/sc_insertsection.pngbin0 -> 515 bytes
-rw-r--r--default_images/res/commandimagelist/sc_insertsound.pngbin0 -> 519 bytes
-rw-r--r--default_images/res/commandimagelist/sc_insertspreadsheet.pngbin0 -> 404 bytes
-rw-r--r--default_images/res/commandimagelist/sc_insertsymbol.pngbin0 -> 794 bytes
-rw-r--r--default_images/res/commandimagelist/sc_inserttable.pngbin0 -> 404 bytes
-rw-r--r--default_images/res/commandimagelist/sc_inserttextframe.pngbin0 -> 466 bytes
-rw-r--r--default_images/res/commandimagelist/sc_inserttimefield.pngbin0 -> 830 bytes
-rw-r--r--default_images/res/commandimagelist/sc_inserttitlefield.pngbin0 -> 538 bytes
-rw-r--r--default_images/res/commandimagelist/sc_inserttoolbox.pngbin0 -> 760 bytes
-rw-r--r--default_images/res/commandimagelist/sc_inserttopicfield.pngbin0 -> 627 bytes
-rw-r--r--default_images/res/commandimagelist/sc_inserttreecontrol.pngbin0 -> 426 bytes
-rw-r--r--default_images/res/commandimagelist/sc_insertvideo.pngbin0 -> 524 bytes
-rw-r--r--default_images/res/commandimagelist/sc_insobjctrl.pngbin0 -> 636 bytes
-rw-r--r--default_images/res/commandimagelist/sc_interactivegradient.pngbin0 -> 795 bytes
-rw-r--r--default_images/res/commandimagelist/sc_interactivetransparence.pngbin0 -> 621 bytes
-rw-r--r--default_images/res/commandimagelist/sc_internetonline.pngbin0 -> 202 bytes
-rw-r--r--default_images/res/commandimagelist/sc_italic.pngbin0 -> 412 bytes
-rw-r--r--default_images/res/commandimagelist/sc_justifypara.pngbin0 -> 314 bytes
-rw-r--r--default_images/res/commandimagelist/sc_label.pngbin0 -> 425 bytes
-rw-r--r--default_images/res/commandimagelist/sc_lastpage.pngbin0 -> 739 bytes
-rw-r--r--default_images/res/commandimagelist/sc_lastrecord.pngbin0 -> 530 bytes
-rw-r--r--default_images/res/commandimagelist/sc_leaveallgroups.pngbin0 -> 756 bytes
-rw-r--r--default_images/res/commandimagelist/sc_leavegroup.pngbin0 -> 678 bytes
-rw-r--r--default_images/res/commandimagelist/sc_leftpara.pngbin0 -> 320 bytes
-rw-r--r--default_images/res/commandimagelist/sc_line.pngbin0 -> 633 bytes
-rw-r--r--default_images/res/commandimagelist/sc_line_diagonal.pngbin0 -> 679 bytes
-rw-r--r--default_images/res/commandimagelist/sc_linearrowcircle.pngbin0 -> 632 bytes
-rw-r--r--default_images/res/commandimagelist/sc_linearrowend.pngbin0 -> 539 bytes
-rw-r--r--default_images/res/commandimagelist/sc_linearrows.pngbin0 -> 589 bytes
-rw-r--r--default_images/res/commandimagelist/sc_linearrowsquare.pngbin0 -> 553 bytes
-rw-r--r--default_images/res/commandimagelist/sc_linearrowstart.pngbin0 -> 542 bytes
-rw-r--r--default_images/res/commandimagelist/sc_linecirclearrow.pngbin0 -> 646 bytes
-rw-r--r--default_images/res/commandimagelist/sc_lineendstyle.pngbin0 -> 682 bytes
-rw-r--r--default_images/res/commandimagelist/sc_linesquarearrow.pngbin0 -> 585 bytes
-rw-r--r--default_images/res/commandimagelist/sc_linestyle.pngbin0 -> 268 bytes
-rw-r--r--default_images/res/commandimagelist/sc_linetoolbox.pngbin0 -> 795 bytes
-rw-r--r--default_images/res/commandimagelist/sc_linewidth.pngbin0 -> 509 bytes
-rw-r--r--default_images/res/commandimagelist/sc_listbox.pngbin0 -> 728 bytes
-rw-r--r--default_images/res/commandimagelist/sc_loadbasic.pngbin0 -> 595 bytes
-rw-r--r--default_images/res/commandimagelist/sc_macrorecorder.pngbin0 -> 760 bytes
-rw-r--r--default_images/res/commandimagelist/sc_macrorecordingfloat.pngbin0 -> 202 bytes
-rw-r--r--default_images/res/commandimagelist/sc_mailwindow.pngbin0 -> 202 bytes
-rw-r--r--default_images/res/commandimagelist/sc_managebreakpoints.pngbin0 -> 784 bytes
-rw-r--r--default_images/res/commandimagelist/sc_managelanguage.pngbin0 -> 873 bytes
-rw-r--r--default_images/res/commandimagelist/sc_marks.pngbin0 -> 381 bytes
-rw-r--r--default_images/res/commandimagelist/sc_matchgroup.pngbin0 -> 503 bytes
-rw-r--r--default_images/res/commandimagelist/sc_measureline.pngbin0 -> 667 bytes
-rw-r--r--default_images/res/commandimagelist/sc_mergecells.pngbin0 -> 412 bytes
-rw-r--r--default_images/res/commandimagelist/sc_mergedialog.pngbin0 -> 695 bytes
-rw-r--r--default_images/res/commandimagelist/sc_mirror.pngbin0 -> 935 bytes
-rw-r--r--default_images/res/commandimagelist/sc_modifyframe.pngbin0 -> 712 bytes
-rw-r--r--default_images/res/commandimagelist/sc_modifypage.pngbin0 -> 572 bytes
-rw-r--r--default_images/res/commandimagelist/sc_moduledialog.pngbin0 -> 631 bytes
-rw-r--r--default_images/res/commandimagelist/sc_morecontrols.pngbin0 -> 566 bytes
-rw-r--r--default_images/res/commandimagelist/sc_movedown.pngbin0 -> 489 bytes
-rw-r--r--default_images/res/commandimagelist/sc_movedownsubitems.pngbin0 -> 649 bytes
-rw-r--r--default_images/res/commandimagelist/sc_moveup.pngbin0 -> 501 bytes
-rw-r--r--default_images/res/commandimagelist/sc_moveupsubitems.pngbin0 -> 661 bytes
-rw-r--r--default_images/res/commandimagelist/sc_navigationbar.pngbin0 -> 735 bytes
-rw-r--r--default_images/res/commandimagelist/sc_navigator.pngbin0 -> 1014 bytes
-rw-r--r--default_images/res/commandimagelist/sc_newarrangement.pngbin0 -> 564 bytes
-rw-r--r--default_images/res/commandimagelist/sc_newdoc.pngbin0 -> 525 bytes
-rw-r--r--default_images/res/commandimagelist/sc_newrecord.pngbin0 -> 662 bytes
-rwxr-xr-xdefault_images/res/commandimagelist/sc_nextannotation.pngbin0 -> 4045 bytes
-rw-r--r--default_images/res/commandimagelist/sc_nextpage.pngbin0 -> 747 bytes
-rw-r--r--default_images/res/commandimagelist/sc_nextrecord.pngbin0 -> 474 bytes
-rw-r--r--default_images/res/commandimagelist/sc_no.pngbin0 -> 958 bytes
-rw-r--r--default_images/res/commandimagelist/sc_numberformatcurrency.pngbin0 -> 727 bytes
-rw-r--r--default_images/res/commandimagelist/sc_numberformatdate.pngbin0 -> 626 bytes
-rw-r--r--default_images/res/commandimagelist/sc_numberformatdecdecimals.pngbin0 -> 728 bytes
-rw-r--r--default_images/res/commandimagelist/sc_numberformatdecimal.pngbin0 -> 485 bytes
-rw-r--r--default_images/res/commandimagelist/sc_numberformatincdecimals.pngbin0 -> 588 bytes
-rw-r--r--default_images/res/commandimagelist/sc_numberformatpercent.pngbin0 -> 567 bytes
-rw-r--r--default_images/res/commandimagelist/sc_numberformatscientific.pngbin0 -> 435 bytes
-rw-r--r--default_images/res/commandimagelist/sc_numberformatstandard.pngbin0 -> 685 bytes
-rw-r--r--default_images/res/commandimagelist/sc_numberingstart.pngbin0 -> 721 bytes
-rw-r--r--default_images/res/commandimagelist/sc_numericfield.pngbin0 -> 435 bytes
-rw-r--r--default_images/res/commandimagelist/sc_objectalign.pngbin0 -> 621 bytes
-rw-r--r--default_images/res/commandimagelist/sc_objectalignleft.pngbin0 -> 621 bytes
-rw-r--r--default_images/res/commandimagelist/sc_objectalignright.pngbin0 -> 628 bytes
-rw-r--r--default_images/res/commandimagelist/sc_objectcatalog.pngbin0 -> 768 bytes
-rw-r--r--default_images/res/commandimagelist/sc_objectposition.pngbin0 -> 477 bytes
-rw-r--r--default_images/res/commandimagelist/sc_objects3dtoolbox.pngbin0 -> 631 bytes
-rw-r--r--default_images/res/commandimagelist/sc_ok.pngbin0 -> 596 bytes
-rw-r--r--default_images/res/commandimagelist/sc_open.pngbin0 -> 711 bytes
-rw-r--r--default_images/res/commandimagelist/sc_open_h.pngbin0 -> 141 bytes
-rw-r--r--default_images/res/commandimagelist/sc_openreadonly.pngbin0 -> 809 bytes
-rw-r--r--default_images/res/commandimagelist/sc_openurl.pngbin0 -> 802 bytes
-rw-r--r--default_images/res/commandimagelist/sc_optimizetable.pngbin0 -> 599 bytes
-rw-r--r--default_images/res/commandimagelist/sc_ordercrit.pngbin0 -> 442 bytes
-rw-r--r--default_images/res/commandimagelist/sc_outlinebullet.pngbin0 -> 654 bytes
-rw-r--r--default_images/res/commandimagelist/sc_outlinecollapse.pngbin0 -> 541 bytes
-rw-r--r--default_images/res/commandimagelist/sc_outlinecollapseall.pngbin0 -> 557 bytes
-rw-r--r--default_images/res/commandimagelist/sc_outlinedown.pngbin0 -> 489 bytes
-rw-r--r--default_images/res/commandimagelist/sc_outlineexpand.pngbin0 -> 545 bytes
-rw-r--r--default_images/res/commandimagelist/sc_outlineexpandall.pngbin0 -> 550 bytes
-rw-r--r--default_images/res/commandimagelist/sc_outlinefont.pngbin0 -> 640 bytes
-rw-r--r--default_images/res/commandimagelist/sc_outlineformat.pngbin0 -> 762 bytes
-rw-r--r--default_images/res/commandimagelist/sc_outlineleft.pngbin0 -> 488 bytes
-rw-r--r--default_images/res/commandimagelist/sc_outlineright.pngbin0 -> 482 bytes
-rw-r--r--default_images/res/commandimagelist/sc_outlineup.pngbin0 -> 501 bytes
-rw-r--r--default_images/res/commandimagelist/sc_overline.pngbin0 -> 347 bytes
-rw-r--r--default_images/res/commandimagelist/sc_pagedown.pngbin0 -> 747 bytes
-rw-r--r--default_images/res/commandimagelist/sc_pageup.pngbin0 -> 757 bytes
-rw-r--r--default_images/res/commandimagelist/sc_paragraphdialog.pngbin0 -> 647 bytes
-rw-r--r--default_images/res/commandimagelist/sc_paralefttoright.pngbin0 -> 620 bytes
-rw-r--r--default_images/res/commandimagelist/sc_pararighttoleft.pngbin0 -> 622 bytes
-rw-r--r--default_images/res/commandimagelist/sc_paraspacedecrease.pngbin0 -> 503 bytes
-rw-r--r--default_images/res/commandimagelist/sc_paraspaceincrease.pngbin0 -> 510 bytes
-rw-r--r--default_images/res/commandimagelist/sc_paste.pngbin0 -> 793 bytes
-rw-r--r--default_images/res/commandimagelist/sc_patternfield.pngbin0 -> 492 bytes
-rw-r--r--default_images/res/commandimagelist/sc_pickthrough.pngbin0 -> 745 bytes
-rw-r--r--default_images/res/commandimagelist/sc_pie.pngbin0 -> 695 bytes
-rw-r--r--default_images/res/commandimagelist/sc_pie_unfilled.pngbin0 -> 780 bytes
-rw-r--r--default_images/res/commandimagelist/sc_playmacro.pngbin0 -> 202 bytes
-rw-r--r--default_images/res/commandimagelist/sc_pluginsactive.pngbin0 -> 705 bytes
-rw-r--r--default_images/res/commandimagelist/sc_polygon.pngbin0 -> 677 bytes
-rw-r--r--default_images/res/commandimagelist/sc_polygon_diagonal.pngbin0 -> 465 bytes
-rw-r--r--default_images/res/commandimagelist/sc_polygon_diagonal_unfilled.pngbin0 -> 514 bytes
-rw-r--r--default_images/res/commandimagelist/sc_polygon_unfilled.pngbin0 -> 790 bytes
-rw-r--r--default_images/res/commandimagelist/sc_position.pngbin0 -> 173 bytes
-rw-r--r--default_images/res/commandimagelist/sc_presentation.pngbin0 -> 676 bytes
-rw-r--r--default_images/res/commandimagelist/sc_presentationlayout.pngbin0 -> 754 bytes
-rw-r--r--default_images/res/commandimagelist/sc_preview.pngbin0 -> 202 bytes
-rw-r--r--default_images/res/commandimagelist/sc_previewprintoptions.pngbin0 -> 726 bytes
-rw-r--r--default_images/res/commandimagelist/sc_previewzoom.pngbin0 -> 761 bytes
-rwxr-xr-xdefault_images/res/commandimagelist/sc_previousannotation.pngbin0 -> 4037 bytes
-rw-r--r--default_images/res/commandimagelist/sc_previouspage.pngbin0 -> 757 bytes
-rw-r--r--default_images/res/commandimagelist/sc_prevrecord.pngbin0 -> 467 bytes
-rw-r--r--default_images/res/commandimagelist/sc_print.pngbin0 -> 577 bytes
-rw-r--r--default_images/res/commandimagelist/sc_printdefault.pngbin0 -> 577 bytes
-rw-r--r--default_images/res/commandimagelist/sc_printersetup.pngbin0 -> 726 bytes
-rw-r--r--default_images/res/commandimagelist/sc_printlayout.pngbin0 -> 638 bytes
-rw-r--r--default_images/res/commandimagelist/sc_printpagepreview.pngbin0 -> 595 bytes
-rw-r--r--default_images/res/commandimagelist/sc_printpreview.pngbin0 -> 801 bytes
-rw-r--r--default_images/res/commandimagelist/sc_progressbar.pngbin0 -> 414 bytes
-rw-r--r--default_images/res/commandimagelist/sc_pushbutton.pngbin0 -> 577 bytes
-rw-r--r--default_images/res/commandimagelist/sc_quickedit.pngbin0 -> 618 bytes
-rw-r--r--default_images/res/commandimagelist/sc_quit.pngbin0 -> 647 bytes
-rw-r--r--default_images/res/commandimagelist/sc_radiobutton.pngbin0 -> 619 bytes
-rw-r--r--default_images/res/commandimagelist/sc_recsave.pngbin0 -> 688 bytes
-rw-r--r--default_images/res/commandimagelist/sc_recsearch.pngbin0 -> 680 bytes
-rw-r--r--default_images/res/commandimagelist/sc_rect.pngbin0 -> 378 bytes
-rw-r--r--default_images/res/commandimagelist/sc_rect_rounded.pngbin0 -> 539 bytes
-rw-r--r--default_images/res/commandimagelist/sc_rect_rounded_unfilled.pngbin0 -> 541 bytes
-rw-r--r--default_images/res/commandimagelist/sc_rect_unfilled.pngbin0 -> 406 bytes
-rw-r--r--default_images/res/commandimagelist/sc_rectangletoolbox.pngbin0 -> 378 bytes
-rw-r--r--default_images/res/commandimagelist/sc_recundo.pngbin0 -> 1038 bytes
-rw-r--r--default_images/res/commandimagelist/sc_redo.pngbin0 -> 894 bytes
-rw-r--r--default_images/res/commandimagelist/sc_refresh.pngbin0 -> 909 bytes
-rw-r--r--default_images/res/commandimagelist/sc_refreshformcontrol.pngbin0 -> 866 bytes
-rw-r--r--default_images/res/commandimagelist/sc_rehearsetimings.pngbin0 -> 927 bytes
-rw-r--r--default_images/res/commandimagelist/sc_reload.pngbin0 -> 909 bytes
-rw-r--r--default_images/res/commandimagelist/sc_removebullets.pngbin0 -> 326 bytes
-rw-r--r--default_images/res/commandimagelist/sc_removefilter.pngbin0 -> 603 bytes
-rw-r--r--default_images/res/commandimagelist/sc_removefiltersort.pngbin0 -> 603 bytes
-rw-r--r--default_images/res/commandimagelist/sc_renamemasterpage.pngbin0 -> 630 bytes
-rw-r--r--default_images/res/commandimagelist/sc_repeat.pngbin0 -> 907 bytes
-rw-r--r--default_images/res/commandimagelist/sc_reportnavigator.pngbin0 -> 919 bytes
-rw-r--r--default_images/res/commandimagelist/sc_reverseorder.pngbin0 -> 803 bytes
-rw-r--r--default_images/res/commandimagelist/sc_rightpara.pngbin0 -> 322 bytes
-rw-r--r--default_images/res/commandimagelist/sc_rulerrows.pngbin0 -> 980 bytes
-rw-r--r--default_images/res/commandimagelist/sc_rulerrowsvertical.pngbin0 -> 1018 bytes
-rw-r--r--default_images/res/commandimagelist/sc_runbasic.pngbin0 -> 713 bytes
-rw-r--r--default_images/res/commandimagelist/sc_save.pngbin0 -> 535 bytes
-rw-r--r--default_images/res/commandimagelist/sc_saveas.pngbin0 -> 585 bytes
-rw-r--r--default_images/res/commandimagelist/sc_saveastemplate.pngbin0 -> 715 bytes
-rw-r--r--default_images/res/commandimagelist/sc_savebasicas.pngbin0 -> 676 bytes
-rw-r--r--default_images/res/commandimagelist/sc_sbabrwinsert.pngbin0 -> 484 bytes
-rw-r--r--default_images/res/commandimagelist/sc_sbaexecutesql.pngbin0 -> 816 bytes
-rw-r--r--default_images/res/commandimagelist/sc_sbanativesql.pngbin0 -> 645 bytes
-rw-r--r--default_images/res/commandimagelist/sc_scaletext.pngbin0 -> 821 bytes
-rw-r--r--default_images/res/commandimagelist/sc_scrollbar.pngbin0 -> 592 bytes
-rw-r--r--default_images/res/commandimagelist/sc_searchdialog.pngbin0 -> 680 bytes
-rwxr-xr-xdefault_images/res/commandimagelist/sc_sectionalignbottom.pngbin0 -> 581 bytes
-rwxr-xr-xdefault_images/res/commandimagelist/sc_sectionalignleft.pngbin0 -> 652 bytes
-rwxr-xr-xdefault_images/res/commandimagelist/sc_sectionalignright.pngbin0 -> 655 bytes
-rwxr-xr-xdefault_images/res/commandimagelist/sc_sectionaligntop.pngbin0 -> 584 bytes
-rw-r--r--default_images/res/commandimagelist/sc_sectionshrink.pngbin0 -> 612 bytes
-rw-r--r--default_images/res/commandimagelist/sc_sectionshrinkbottom.pngbin0 -> 492 bytes
-rw-r--r--default_images/res/commandimagelist/sc_sectionshrinktop.pngbin0 -> 491 bytes
-rw-r--r--default_images/res/commandimagelist/sc_selectall.pngbin0 -> 595 bytes
-rw-r--r--default_images/res/commandimagelist/sc_selectmode.pngbin0 -> 568 bytes
-rw-r--r--default_images/res/commandimagelist/sc_selectobject.pngbin0 -> 568 bytes
-rw-r--r--default_images/res/commandimagelist/sc_selecttable.pngbin0 -> 644 bytes
-rw-r--r--default_images/res/commandimagelist/sc_sendfax.pngbin0 -> 730 bytes
-rw-r--r--default_images/res/commandimagelist/sc_sendmail.pngbin0 -> 552 bytes
-rw-r--r--default_images/res/commandimagelist/sc_sendtoback.pngbin0 -> 499 bytes
-rw-r--r--default_images/res/commandimagelist/sc_setborderstyle.pngbin0 -> 356 bytes
-rw-r--r--default_images/res/commandimagelist/sc_setdocumentproperties.pngbin0 -> 702 bytes
-rw-r--r--default_images/res/commandimagelist/sc_setobjecttobackground.pngbin0 -> 596 bytes
-rw-r--r--default_images/res/commandimagelist/sc_setobjecttoforeground.pngbin0 -> 602 bytes
-rw-r--r--default_images/res/commandimagelist/sc_setoptimalcolumnwidth.pngbin0 -> 480 bytes
-rw-r--r--default_images/res/commandimagelist/sc_setoptimalcolumnwidthdirect.pngbin0 -> 480 bytes
-rw-r--r--default_images/res/commandimagelist/sc_setoptimalrowheight.pngbin0 -> 399 bytes
-rw-r--r--default_images/res/commandimagelist/sc_shadowcursor.pngbin0 -> 595 bytes
-rw-r--r--default_images/res/commandimagelist/sc_shadowed.pngbin0 -> 595 bytes
-rw-r--r--default_images/res/commandimagelist/sc_shear.pngbin0 -> 461 bytes
-rw-r--r--default_images/res/commandimagelist/sc_shell3d.pngbin0 -> 872 bytes
-rwxr-xr-xdefault_images/res/commandimagelist/sc_showannotation.pngbin0 -> 3879 bytes
-rw-r--r--default_images/res/commandimagelist/sc_showbookview.pngbin0 -> 524 bytes
-rw-r--r--default_images/res/commandimagelist/sc_showbrowser.pngbin0 -> 760 bytes
-rw-r--r--default_images/res/commandimagelist/sc_showdatanavigator.pngbin0 -> 636 bytes
-rw-r--r--default_images/res/commandimagelist/sc_showfmexplorer.pngbin0 -> 876 bytes
-rw-r--r--default_images/res/commandimagelist/sc_showmultiplepages.pngbin0 -> 412 bytes
-rw-r--r--default_images/res/commandimagelist/sc_showpropbrowser.pngbin0 -> 760 bytes
-rw-r--r--default_images/res/commandimagelist/sc_showslide.pngbin0 -> 610 bytes
-rw-r--r--default_images/res/commandimagelist/sc_showtwopages.pngbin0 -> 453 bytes
-rw-r--r--default_images/res/commandimagelist/sc_shrink.pngbin0 -> 771 bytes
-rw-r--r--default_images/res/commandimagelist/sc_size.pngbin0 -> 176 bytes
-rw-r--r--default_images/res/commandimagelist/sc_smallestheight.pngbin0 -> 686 bytes
-rw-r--r--default_images/res/commandimagelist/sc_smallestwidth.pngbin0 -> 635 bytes
-rw-r--r--default_images/res/commandimagelist/sc_snapborder.pngbin0 -> 659 bytes
-rw-r--r--default_images/res/commandimagelist/sc_snapframe.pngbin0 -> 505 bytes
-rw-r--r--default_images/res/commandimagelist/sc_snappoints.pngbin0 -> 499 bytes
-rw-r--r--default_images/res/commandimagelist/sc_solidcreate.pngbin0 -> 575 bytes
-rw-r--r--default_images/res/commandimagelist/sc_sortascending.pngbin0 -> 659 bytes
-rw-r--r--default_images/res/commandimagelist/sc_sortdescending.pngbin0 -> 673 bytes
-rw-r--r--default_images/res/commandimagelist/sc_sortdown.pngbin0 -> 673 bytes
-rw-r--r--default_images/res/commandimagelist/sc_sortup.pngbin0 -> 659 bytes
-rw-r--r--default_images/res/commandimagelist/sc_sourceview.pngbin0 -> 590 bytes
-rw-r--r--default_images/res/commandimagelist/sc_spacepara1.pngbin0 -> 314 bytes
-rw-r--r--default_images/res/commandimagelist/sc_spacepara15.pngbin0 -> 312 bytes
-rw-r--r--default_images/res/commandimagelist/sc_spacepara2.pngbin0 -> 304 bytes
-rw-r--r--default_images/res/commandimagelist/sc_spelldialog.pngbin0 -> 605 bytes
-rw-r--r--default_images/res/commandimagelist/sc_spelling.pngbin0 -> 605 bytes
-rw-r--r--default_images/res/commandimagelist/sc_spellingandgrammardialog.pngbin0 -> 605 bytes
-rw-r--r--default_images/res/commandimagelist/sc_spellonline.pngbin0 -> 505 bytes
-rw-r--r--default_images/res/commandimagelist/sc_sphere.pngbin0 -> 936 bytes
-rw-r--r--default_images/res/commandimagelist/sc_spinbutton.pngbin0 -> 549 bytes
-rw-r--r--default_images/res/commandimagelist/sc_splitcell.pngbin0 -> 418 bytes
-rw-r--r--default_images/res/commandimagelist/sc_splithorizontal.pngbin0 -> 202 bytes
-rw-r--r--default_images/res/commandimagelist/sc_splitparenthorizontal.pngbin0 -> 202 bytes
-rw-r--r--default_images/res/commandimagelist/sc_splitparentvertical.pngbin0 -> 202 bytes
-rw-r--r--default_images/res/commandimagelist/sc_splitvertical.pngbin0 -> 202 bytes
-rw-r--r--default_images/res/commandimagelist/sc_square.pngbin0 -> 431 bytes
-rw-r--r--default_images/res/commandimagelist/sc_square_rounded.pngbin0 -> 624 bytes
-rw-r--r--default_images/res/commandimagelist/sc_square_rounded_unfilled.pngbin0 -> 600 bytes
-rw-r--r--default_images/res/commandimagelist/sc_square_unfilled.pngbin0 -> 450 bytes
-rw-r--r--default_images/res/commandimagelist/sc_starchartdialog.pngbin0 -> 529 bytes
-rw-r--r--default_images/res/commandimagelist/sc_starshapes.bang.pngbin0 -> 752 bytes
-rw-r--r--default_images/res/commandimagelist/sc_starshapes.concave-star6.pngbin0 -> 780 bytes
-rw-r--r--default_images/res/commandimagelist/sc_starshapes.doorplate.pngbin0 -> 680 bytes
-rw-r--r--default_images/res/commandimagelist/sc_starshapes.horizontal-scroll.pngbin0 -> 582 bytes
-rw-r--r--default_images/res/commandimagelist/sc_starshapes.pngbin0 -> 612 bytes
-rw-r--r--default_images/res/commandimagelist/sc_starshapes.signet.pngbin0 -> 775 bytes
-rw-r--r--default_images/res/commandimagelist/sc_starshapes.star12.pngbin0 -> 817 bytes
-rw-r--r--default_images/res/commandimagelist/sc_starshapes.star24.pngbin0 -> 946 bytes
-rw-r--r--default_images/res/commandimagelist/sc_starshapes.star4.pngbin0 -> 587 bytes
-rw-r--r--default_images/res/commandimagelist/sc_starshapes.star5.pngbin0 -> 612 bytes
-rw-r--r--default_images/res/commandimagelist/sc_starshapes.star6.pngbin0 -> 741 bytes
-rw-r--r--default_images/res/commandimagelist/sc_starshapes.star8.pngbin0 -> 720 bytes
-rw-r--r--default_images/res/commandimagelist/sc_starshapes.vertical-scroll.pngbin0 -> 572 bytes
-rw-r--r--default_images/res/commandimagelist/sc_strikeout.pngbin0 -> 459 bytes
-rw-r--r--default_images/res/commandimagelist/sc_styleapply.pngbin0 -> 831 bytes
-rw-r--r--default_images/res/commandimagelist/sc_stylenewbyexample.pngbin0 -> 613 bytes
-rw-r--r--default_images/res/commandimagelist/sc_styleupdatebyexample.pngbin0 -> 734 bytes
-rw-r--r--default_images/res/commandimagelist/sc_stylewatercanmode.pngbin0 -> 831 bytes
-rw-r--r--default_images/res/commandimagelist/sc_subscript.pngbin0 -> 927 bytes
-rw-r--r--default_images/res/commandimagelist/sc_superscript.pngbin0 -> 914 bytes
-rw-r--r--default_images/res/commandimagelist/sc_switchcontroldesignmode.pngbin0 -> 698 bytes
-rw-r--r--default_images/res/commandimagelist/sc_switchxformsdesignmode.pngbin0 -> 698 bytes
-rw-r--r--default_images/res/commandimagelist/sc_symbolcatalogue.pngbin0 -> 563 bytes
-rw-r--r--default_images/res/commandimagelist/sc_symbolshapes.brace-pair.pngbin0 -> 756 bytes
-rw-r--r--default_images/res/commandimagelist/sc_symbolshapes.bracket-pair.pngbin0 -> 667 bytes
-rw-r--r--default_images/res/commandimagelist/sc_symbolshapes.cloud.pngbin0 -> 847 bytes
-rw-r--r--default_images/res/commandimagelist/sc_symbolshapes.diamond-bevel.pngbin0 -> 660 bytes
-rw-r--r--default_images/res/commandimagelist/sc_symbolshapes.flower.pngbin0 -> 921 bytes
-rw-r--r--default_images/res/commandimagelist/sc_symbolshapes.forbidden.pngbin0 -> 1077 bytes
-rw-r--r--default_images/res/commandimagelist/sc_symbolshapes.heart.pngbin0 -> 945 bytes
-rw-r--r--default_images/res/commandimagelist/sc_symbolshapes.left-brace.pngbin0 -> 587 bytes
-rw-r--r--default_images/res/commandimagelist/sc_symbolshapes.left-bracket.pngbin0 -> 514 bytes
-rw-r--r--default_images/res/commandimagelist/sc_symbolshapes.lightning.pngbin0 -> 669 bytes
-rw-r--r--default_images/res/commandimagelist/sc_symbolshapes.moon.pngbin0 -> 814 bytes
-rw-r--r--default_images/res/commandimagelist/sc_symbolshapes.octagon-bevel.pngbin0 -> 765 bytes
-rw-r--r--default_images/res/commandimagelist/sc_symbolshapes.pngbin0 -> 1086 bytes
-rw-r--r--default_images/res/commandimagelist/sc_symbolshapes.puzzle.pngbin0 -> 830 bytes
-rw-r--r--default_images/res/commandimagelist/sc_symbolshapes.quad-bevel.pngbin0 -> 585 bytes
-rw-r--r--default_images/res/commandimagelist/sc_symbolshapes.right-brace.pngbin0 -> 586 bytes
-rw-r--r--default_images/res/commandimagelist/sc_symbolshapes.right-bracket.pngbin0 -> 522 bytes
-rw-r--r--default_images/res/commandimagelist/sc_symbolshapes.smiley.pngbin0 -> 1086 bytes
-rw-r--r--default_images/res/commandimagelist/sc_symbolshapes.sun.pngbin0 -> 651 bytes
-rw-r--r--default_images/res/commandimagelist/sc_tabdialog.pngbin0 -> 785 bytes
-rw-r--r--default_images/res/commandimagelist/sc_tabledesign.pngbin0 -> 660 bytes
-rw-r--r--default_images/res/commandimagelist/sc_tabledialog.pngbin0 -> 640 bytes
-rw-r--r--default_images/res/commandimagelist/sc_tablemodefix.pngbin0 -> 411 bytes
-rw-r--r--default_images/res/commandimagelist/sc_tablemodefixprop.pngbin0 -> 456 bytes
-rw-r--r--default_images/res/commandimagelist/sc_tablemodevariable.pngbin0 -> 408 bytes
-rw-r--r--default_images/res/commandimagelist/sc_tablesort.pngbin0 -> 442 bytes
-rw-r--r--default_images/res/commandimagelist/sc_testmode.pngbin0 -> 698 bytes
-rw-r--r--default_images/res/commandimagelist/sc_text.pngbin0 -> 509 bytes
-rw-r--r--default_images/res/commandimagelist/sc_text_marquee.pngbin0 -> 602 bytes
-rw-r--r--default_images/res/commandimagelist/sc_textdirectionlefttoright.pngbin0 -> 532 bytes
-rw-r--r--default_images/res/commandimagelist/sc_textdirectiontoptobottom.pngbin0 -> 520 bytes
-rw-r--r--default_images/res/commandimagelist/sc_textfittosizetool.pngbin0 -> 752 bytes
-rw-r--r--default_images/res/commandimagelist/sc_texttoolbox.pngbin0 -> 509 bytes
-rw-r--r--default_images/res/commandimagelist/sc_thesaurus.pngbin0 -> 822 bytes
-rw-r--r--default_images/res/commandimagelist/sc_thesaurusdialog.pngbin0 -> 822 bytes
-rw-r--r--default_images/res/commandimagelist/sc_timefield.pngbin0 -> 830 bytes
-rw-r--r--default_images/res/commandimagelist/sc_toggleanchortype.pngbin0 -> 642 bytes
-rw-r--r--default_images/res/commandimagelist/sc_toggleaxisdescr.pngbin0 -> 375 bytes
-rw-r--r--default_images/res/commandimagelist/sc_toggleaxistitle.pngbin0 -> 534 bytes
-rw-r--r--default_images/res/commandimagelist/sc_togglebreakpoint.pngbin0 -> 774 bytes
-rw-r--r--default_images/res/commandimagelist/sc_togglegridhorizontal.pngbin0 -> 433 bytes
-rw-r--r--default_images/res/commandimagelist/sc_togglegridvertical.pngbin0 -> 502 bytes
-rw-r--r--default_images/res/commandimagelist/sc_togglelegend.pngbin0 -> 572 bytes
-rw-r--r--default_images/res/commandimagelist/sc_togglemergecells.pngbin0 -> 412 bytes
-rw-r--r--default_images/res/commandimagelist/sc_toggleobjectbeziermode.pngbin0 -> 477 bytes
-rw-r--r--default_images/res/commandimagelist/sc_toggleobjectrotatemode.pngbin0 -> 910 bytes
-rw-r--r--default_images/res/commandimagelist/sc_toggletitle.pngbin0 -> 503 bytes
-rw-r--r--default_images/res/commandimagelist/sc_toolsmacroedit.pngbin0 -> 202 bytes
-rw-r--r--default_images/res/commandimagelist/sc_toolsoptions.pngbin0 -> 202 bytes
-rw-r--r--default_images/res/commandimagelist/sc_torus.pngbin0 -> 737 bytes
-rw-r--r--default_images/res/commandimagelist/sc_transformdialog.pngbin0 -> 809 bytes
-rw-r--r--default_images/res/commandimagelist/sc_underline.pngbin0 -> 408 bytes
-rw-r--r--default_images/res/commandimagelist/sc_underlinedouble.pngbin0 -> 425 bytes
-rw-r--r--default_images/res/commandimagelist/sc_undo.pngbin0 -> 888 bytes
-rw-r--r--default_images/res/commandimagelist/sc_ungroup.pngbin0 -> 483 bytes
-rw-r--r--default_images/res/commandimagelist/sc_unhainframes.pngbin0 -> 700 bytes
-rw-r--r--default_images/res/commandimagelist/sc_upsearch.pngbin0 -> 583 bytes
-rw-r--r--default_images/res/commandimagelist/sc_urlbutton.pngbin0 -> 202 bytes
-rw-r--r--default_images/res/commandimagelist/sc_usewizards.pngbin0 -> 662 bytes
-rw-r--r--default_images/res/commandimagelist/sc_verticalcaption.pngbin0 -> 882 bytes
-rw-r--r--default_images/res/commandimagelist/sc_verticaltext.pngbin0 -> 470 bytes
-rw-r--r--default_images/res/commandimagelist/sc_verticaltextfittosizetool.pngbin0 -> 841 bytes
-rw-r--r--default_images/res/commandimagelist/sc_vfixedline.pngbin0 -> 394 bytes
-rw-r--r--default_images/res/commandimagelist/sc_view100.pngbin0 -> 817 bytes
-rw-r--r--default_images/res/commandimagelist/sc_viewdatasourcebrowser.pngbin0 -> 998 bytes
-rw-r--r--default_images/res/commandimagelist/sc_viewformasgrid.pngbin0 -> 580 bytes
-rw-r--r--default_images/res/commandimagelist/sc_vscrollbar.pngbin0 -> 592 bytes
-rw-r--r--default_images/res/commandimagelist/sc_window3d.pngbin0 -> 271 bytes
-rw-r--r--default_images/res/commandimagelist/sc_wrapcontour.pngbin0 -> 333 bytes
-rw-r--r--default_images/res/commandimagelist/sc_wrapideal.pngbin0 -> 493 bytes
-rw-r--r--default_images/res/commandimagelist/sc_wrapleft.pngbin0 -> 311 bytes
-rw-r--r--default_images/res/commandimagelist/sc_wrapoff.pngbin0 -> 304 bytes
-rw-r--r--default_images/res/commandimagelist/sc_wrapon.pngbin0 -> 340 bytes
-rw-r--r--default_images/res/commandimagelist/sc_wrapright.pngbin0 -> 318 bytes
-rw-r--r--default_images/res/commandimagelist/sc_wrapthrough.pngbin0 -> 359 bytes
-rw-r--r--default_images/res/commandimagelist/sc_xlinecolor.pngbin0 -> 509 bytes
-rw-r--r--default_images/res/commandimagelist/sc_xlinestyle.pngbin0 -> 509 bytes
-rw-r--r--default_images/res/commandimagelist/sc_yes.pngbin0 -> 948 bytes
-rw-r--r--default_images/res/commandimagelist/sc_zoom.pngbin0 -> 761 bytes
-rw-r--r--default_images/res/commandimagelist/sc_zoom100percent.pngbin0 -> 817 bytes
-rw-r--r--default_images/res/commandimagelist/sc_zoomin.pngbin0 -> 763 bytes
-rw-r--r--default_images/res/commandimagelist/sc_zoomminus.pngbin0 -> 737 bytes
-rw-r--r--default_images/res/commandimagelist/sc_zoomnext.pngbin0 -> 984 bytes
-rw-r--r--default_images/res/commandimagelist/sc_zoomobjects.pngbin0 -> 795 bytes
-rw-r--r--default_images/res/commandimagelist/sc_zoomoptimal.pngbin0 -> 784 bytes
-rw-r--r--default_images/res/commandimagelist/sc_zoomout.pngbin0 -> 737 bytes
-rw-r--r--default_images/res/commandimagelist/sc_zoompage.pngbin0 -> 801 bytes
-rw-r--r--default_images/res/commandimagelist/sc_zoompagewidth.pngbin0 -> 852 bytes
-rw-r--r--default_images/res/commandimagelist/sc_zoompanning.pngbin0 -> 924 bytes
-rw-r--r--default_images/res/commandimagelist/sc_zoomplus.pngbin0 -> 763 bytes
-rw-r--r--default_images/res/commandimagelist/sc_zoomprevious.pngbin0 -> 952 bytes
-rw-r--r--default_images/res/commandimagelist/sc_zoomtoolbox.pngbin0 -> 761 bytes
-rw-r--r--default_images/res/commandimagelist/sch_absoluterecord.pngbin0 -> 144 bytes
-rw-r--r--default_images/res/commandimagelist/sch_actionmode.pngbin0 -> 174 bytes
-rw-r--r--default_images/res/commandimagelist/sch_addbookmark.pngbin0 -> 122 bytes
-rw-r--r--default_images/res/commandimagelist/sch_adddatefield.pngbin0 -> 119 bytes
-rw-r--r--default_images/res/commandimagelist/sch_adddirect.pngbin0 -> 109 bytes
-rw-r--r--default_images/res/commandimagelist/sch_addfield.pngbin0 -> 121 bytes
-rw-r--r--default_images/res/commandimagelist/sch_addons.pngbin0 -> 148 bytes
-rw-r--r--default_images/res/commandimagelist/sch_addprintarea.pngbin0 -> 152 bytes
-rw-r--r--default_images/res/commandimagelist/sch_addtable.pngbin0 -> 139 bytes
-rw-r--r--default_images/res/commandimagelist/sch_addwatch.pngbin0 -> 139 bytes
-rw-r--r--default_images/res/commandimagelist/sch_adjust.pngbin0 -> 132 bytes
-rw-r--r--default_images/res/commandimagelist/sch_advancedmode.pngbin0 -> 132 bytes
-rw-r--r--default_images/res/commandimagelist/sch_alignblock.pngbin0 -> 266 bytes
-rw-r--r--default_images/res/commandimagelist/sch_alignbottom.pngbin0 -> 123 bytes
-rw-r--r--default_images/res/commandimagelist/sch_aligncenter.pngbin0 -> 154 bytes
-rw-r--r--default_images/res/commandimagelist/sch_aligndown.pngbin0 -> 142 bytes
-rw-r--r--default_images/res/commandimagelist/sch_alignhorizontalcenter.pngbin0 -> 269 bytes
-rw-r--r--default_images/res/commandimagelist/sch_alignleft.pngbin0 -> 268 bytes
-rw-r--r--default_images/res/commandimagelist/sch_alignmiddle.pngbin0 -> 154 bytes
-rw-r--r--default_images/res/commandimagelist/sch_alignright.pngbin0 -> 268 bytes
-rw-r--r--default_images/res/commandimagelist/sch_aligntop.pngbin0 -> 129 bytes
-rw-r--r--default_images/res/commandimagelist/sch_alignup.pngbin0 -> 145 bytes
-rw-r--r--default_images/res/commandimagelist/sch_alignvcenter.pngbin0 -> 127 bytes
-rw-r--r--default_images/res/commandimagelist/sch_alignverticalcenter.pngbin0 -> 127 bytes
-rw-r--r--default_images/res/commandimagelist/sch_animationeffects.pngbin0 -> 170 bytes
-rw-r--r--default_images/res/commandimagelist/sch_animationmode.pngbin0 -> 178 bytes
-rw-r--r--default_images/res/commandimagelist/sch_animationobjects.pngbin0 -> 127 bytes
-rw-r--r--default_images/res/commandimagelist/sch_arc.pngbin0 -> 120 bytes
-rw-r--r--default_images/res/commandimagelist/sch_arrowshapes.chevron.pngbin0 -> 129 bytes
-rw-r--r--default_images/res/commandimagelist/sch_arrowshapes.circular-arrow.pngbin0 -> 169 bytes
-rw-r--r--default_images/res/commandimagelist/sch_arrowshapes.corner-right-arrow.pngbin0 -> 131 bytes
-rw-r--r--default_images/res/commandimagelist/sch_arrowshapes.down-arrow-callout.pngbin0 -> 140 bytes
-rw-r--r--default_images/res/commandimagelist/sch_arrowshapes.down-arrow.pngbin0 -> 131 bytes
-rw-r--r--default_images/res/commandimagelist/sch_arrowshapes.left-arrow-callout.pngbin0 -> 135 bytes
-rw-r--r--default_images/res/commandimagelist/sch_arrowshapes.left-arrow.pngbin0 -> 130 bytes
-rw-r--r--default_images/res/commandimagelist/sch_arrowshapes.left-right-arrow-callout.pngbin0 -> 149 bytes
-rw-r--r--default_images/res/commandimagelist/sch_arrowshapes.left-right-arrow.pngbin0 -> 140 bytes
-rw-r--r--default_images/res/commandimagelist/sch_arrowshapes.notched-right-arrow.pngbin0 -> 132 bytes
-rw-r--r--default_images/res/commandimagelist/sch_arrowshapes.pentagon-right.pngbin0 -> 123 bytes
-rw-r--r--default_images/res/commandimagelist/sch_arrowshapes.pngbin0 -> 140 bytes
-rw-r--r--default_images/res/commandimagelist/sch_arrowshapes.quad-arrow-callout.pngbin0 -> 152 bytes
-rw-r--r--default_images/res/commandimagelist/sch_arrowshapes.quad-arrow.pngbin0 -> 148 bytes
-rw-r--r--default_images/res/commandimagelist/sch_arrowshapes.right-arrow-callout.pngbin0 -> 136 bytes
-rw-r--r--default_images/res/commandimagelist/sch_arrowshapes.right-arrow.pngbin0 -> 129 bytes
-rw-r--r--default_images/res/commandimagelist/sch_arrowshapes.s-sharped-arrow.pngbin0 -> 163 bytes
-rw-r--r--default_images/res/commandimagelist/sch_arrowshapes.split-arrow.pngbin0 -> 147 bytes
-rw-r--r--default_images/res/commandimagelist/sch_arrowshapes.split-round-arrow.pngbin0 -> 163 bytes
-rw-r--r--default_images/res/commandimagelist/sch_arrowshapes.striped-right-arrow.pngbin0 -> 133 bytes
-rw-r--r--default_images/res/commandimagelist/sch_arrowshapes.up-arrow-callout.pngbin0 -> 140 bytes
-rw-r--r--default_images/res/commandimagelist/sch_arrowshapes.up-arrow.pngbin0 -> 130 bytes
-rw-r--r--default_images/res/commandimagelist/sch_arrowshapes.up-down-arrow-callout.pngbin0 -> 151 bytes
-rw-r--r--default_images/res/commandimagelist/sch_arrowshapes.up-down-arrow.pngbin0 -> 135 bytes
-rw-r--r--default_images/res/commandimagelist/sch_arrowshapes.up-right-arrow-callout.pngbin0 -> 165 bytes
-rw-r--r--default_images/res/commandimagelist/sch_arrowshapes.up-right-arrow.pngbin0 -> 150 bytes
-rw-r--r--default_images/res/commandimagelist/sch_arrowshapes.up-right-down-arrow.pngbin0 -> 144 bytes
-rw-r--r--default_images/res/commandimagelist/sch_arrowstoolbox.pngbin0 -> 101 bytes
-rw-r--r--default_images/res/commandimagelist/sch_assignlayout.pngbin0 -> 3632 bytes
-rw-r--r--default_images/res/commandimagelist/sch_autocontrolfocus.pngbin0 -> 122 bytes
-rw-r--r--default_images/res/commandimagelist/sch_autofilter.pngbin0 -> 173 bytes
-rw-r--r--default_images/res/commandimagelist/sch_autoformat.pngbin0 -> 193 bytes
-rw-r--r--default_images/res/commandimagelist/sch_autosum.pngbin0 -> 128 bytes
-rw-r--r--default_images/res/commandimagelist/sch_avmediaplayer.pngbin0 -> 124 bytes
-rw-r--r--default_images/res/commandimagelist/sch_backcolor.pngbin0 -> 181 bytes
-rw-r--r--default_images/res/commandimagelist/sch_backgroundcolor.pngbin0 -> 167 bytes
-rw-r--r--default_images/res/commandimagelist/sch_backgroundpatterncontroller.pngbin0 -> 167 bytes
-rw-r--r--default_images/res/commandimagelist/sch_backward.pngbin0 -> 121 bytes
-rw-r--r--default_images/res/commandimagelist/sch_basicshapes.block-arc.pngbin0 -> 136 bytes
-rw-r--r--default_images/res/commandimagelist/sch_basicshapes.can.pngbin0 -> 138 bytes
-rw-r--r--default_images/res/commandimagelist/sch_basicshapes.circle-pie.pngbin0 -> 144 bytes
-rw-r--r--default_images/res/commandimagelist/sch_basicshapes.circle.pngbin0 -> 136 bytes
-rw-r--r--default_images/res/commandimagelist/sch_basicshapes.cross.pngbin0 -> 108 bytes
-rw-r--r--default_images/res/commandimagelist/sch_basicshapes.cube.pngbin0 -> 140 bytes
-rw-r--r--default_images/res/commandimagelist/sch_basicshapes.diamond.pngbin0 -> 131 bytes
-rw-r--r--default_images/res/commandimagelist/sch_basicshapes.ellipse.pngbin0 -> 128 bytes
-rw-r--r--default_images/res/commandimagelist/sch_basicshapes.frame.pngbin0 -> 107 bytes
-rw-r--r--default_images/res/commandimagelist/sch_basicshapes.hexagon.pngbin0 -> 134 bytes
-rw-r--r--default_images/res/commandimagelist/sch_basicshapes.isosceles-triangle.pngbin0 -> 138 bytes
-rw-r--r--default_images/res/commandimagelist/sch_basicshapes.octagon.pngbin0 -> 134 bytes
-rw-r--r--default_images/res/commandimagelist/sch_basicshapes.paper.pngbin0 -> 126 bytes
-rw-r--r--default_images/res/commandimagelist/sch_basicshapes.parallelogram.pngbin0 -> 130 bytes
-rw-r--r--default_images/res/commandimagelist/sch_basicshapes.pentagon.pngbin0 -> 150 bytes
-rw-r--r--default_images/res/commandimagelist/sch_basicshapes.pngbin0 -> 131 bytes
-rw-r--r--default_images/res/commandimagelist/sch_basicshapes.quadrat.pngbin0 -> 262 bytes
-rw-r--r--default_images/res/commandimagelist/sch_basicshapes.rectangle.pngbin0 -> 259 bytes
-rw-r--r--default_images/res/commandimagelist/sch_basicshapes.right-triangle.pngbin0 -> 127 bytes
-rw-r--r--default_images/res/commandimagelist/sch_basicshapes.ring.pngbin0 -> 144 bytes
-rw-r--r--default_images/res/commandimagelist/sch_basicshapes.round-quadrat.pngbin0 -> 107 bytes
-rw-r--r--default_images/res/commandimagelist/sch_basicshapes.round-rectangle.pngbin0 -> 107 bytes
-rw-r--r--default_images/res/commandimagelist/sch_basicshapes.trapezoid.pngbin0 -> 142 bytes
-rw-r--r--default_images/res/commandimagelist/sch_basicstepinto.pngbin0 -> 143 bytes
-rw-r--r--default_images/res/commandimagelist/sch_basicstepout.pngbin0 -> 142 bytes
-rw-r--r--default_images/res/commandimagelist/sch_basicstepover.pngbin0 -> 147 bytes
-rw-r--r--default_images/res/commandimagelist/sch_basicstop.pngbin0 -> 123 bytes
-rw-r--r--default_images/res/commandimagelist/sch_beamer.pngbin0 -> 122 bytes
-rw-r--r--default_images/res/commandimagelist/sch_beforeobject.pngbin0 -> 127 bytes
-rw-r--r--default_images/res/commandimagelist/sch_behindobject.pngbin0 -> 134 bytes
-rw-r--r--default_images/res/commandimagelist/sch_bezier_unfilled.pngbin0 -> 125 bytes
-rw-r--r--default_images/res/commandimagelist/sch_bezierappend.pngbin0 -> 148 bytes
-rw-r--r--default_images/res/commandimagelist/sch_bezierclose.pngbin0 -> 135 bytes
-rw-r--r--default_images/res/commandimagelist/sch_bezierconvert.pngbin0 -> 131 bytes
-rw-r--r--default_images/res/commandimagelist/sch_beziercutline.pngbin0 -> 192 bytes
-rw-r--r--default_images/res/commandimagelist/sch_bezierdelete.pngbin0 -> 170 bytes
-rw-r--r--default_images/res/commandimagelist/sch_bezieredge.pngbin0 -> 128 bytes
-rw-r--r--default_images/res/commandimagelist/sch_beziereliminatepoints.pngbin0 -> 156 bytes
-rw-r--r--default_images/res/commandimagelist/sch_bezierfill.pngbin0 -> 134 bytes
-rw-r--r--default_images/res/commandimagelist/sch_bezierinsert.pngbin0 -> 157 bytes
-rw-r--r--default_images/res/commandimagelist/sch_beziermove.pngbin0 -> 152 bytes
-rw-r--r--default_images/res/commandimagelist/sch_beziersmooth.pngbin0 -> 133 bytes
-rw-r--r--default_images/res/commandimagelist/sch_beziersymmetric.pngbin0 -> 148 bytes
-rw-r--r--default_images/res/commandimagelist/sch_bighandles.pngbin0 -> 125 bytes
-rw-r--r--default_images/res/commandimagelist/sch_bold.pngbin0 -> 118 bytes
-rw-r--r--default_images/res/commandimagelist/sch_borderdialog.pngbin0 -> 252 bytes
-rw-r--r--default_images/res/commandimagelist/sch_bringtofront.pngbin0 -> 134 bytes
-rw-r--r--default_images/res/commandimagelist/sch_browsebackward.pngbin0 -> 310 bytes
-rw-r--r--default_images/res/commandimagelist/sch_browseforward.pngbin0 -> 320 bytes
-rw-r--r--default_images/res/commandimagelist/sch_browseview.pngbin0 -> 186 bytes
-rw-r--r--default_images/res/commandimagelist/sch_bullet.pngbin0 -> 126 bytes
-rw-r--r--default_images/res/commandimagelist/sch_bulletsandnumberingdialog.pngbin0 -> 137 bytes
-rw-r--r--default_images/res/commandimagelist/sch_calloutshapes.cloud-callout.pngbin0 -> 159 bytes
-rw-r--r--default_images/res/commandimagelist/sch_calloutshapes.line-callout-1.pngbin0 -> 125 bytes
-rw-r--r--default_images/res/commandimagelist/sch_calloutshapes.line-callout-2.pngbin0 -> 124 bytes
-rw-r--r--default_images/res/commandimagelist/sch_calloutshapes.line-callout-3.pngbin0 -> 104 bytes
-rw-r--r--default_images/res/commandimagelist/sch_calloutshapes.pngbin0 -> 139 bytes
-rw-r--r--default_images/res/commandimagelist/sch_calloutshapes.rectangular-callout.pngbin0 -> 122 bytes
-rw-r--r--default_images/res/commandimagelist/sch_calloutshapes.round-callout.pngbin0 -> 148 bytes
-rw-r--r--default_images/res/commandimagelist/sch_calloutshapes.round-rectangular-callout.pngbin0 -> 139 bytes
-rw-r--r--default_images/res/commandimagelist/sch_cellvertbottom.pngbin0 -> 123 bytes
-rw-r--r--default_images/res/commandimagelist/sch_cellvertcenter.pngbin0 -> 127 bytes
-rw-r--r--default_images/res/commandimagelist/sch_cellverttop.pngbin0 -> 129 bytes
-rw-r--r--default_images/res/commandimagelist/sch_centerpara.pngbin0 -> 269 bytes
-rw-r--r--default_images/res/commandimagelist/sch_chainframes.pngbin0 -> 127 bytes
-rw-r--r--default_images/res/commandimagelist/sch_changebezier.pngbin0 -> 133 bytes
-rw-r--r--default_images/res/commandimagelist/sch_changecasetolower.pngbin0 -> 143 bytes
-rw-r--r--default_images/res/commandimagelist/sch_changecasetoupper.pngbin0 -> 148 bytes
-rw-r--r--default_images/res/commandimagelist/sch_changedatabasefield.pngbin0 -> 176 bytes
-rw-r--r--default_images/res/commandimagelist/sch_changepolygon.pngbin0 -> 155 bytes
-rw-r--r--default_images/res/commandimagelist/sch_charfontname.pngbin0 -> 128 bytes
-rw-r--r--default_images/res/commandimagelist/sch_checkbox.pngbin0 -> 132 bytes
-rw-r--r--default_images/res/commandimagelist/sch_choosecontrols.pngbin0 -> 158 bytes
-rw-r--r--default_images/res/commandimagelist/sch_choosedesign.pngbin0 -> 175 bytes
-rw-r--r--default_images/res/commandimagelist/sch_choosemacro.pngbin0 -> 137 bytes
-rw-r--r--default_images/res/commandimagelist/sch_choosepolygon.pngbin0 -> 121 bytes
-rw-r--r--default_images/res/commandimagelist/sch_circle.pngbin0 -> 136 bytes
-rw-r--r--default_images/res/commandimagelist/sch_circle_unfilled.pngbin0 -> 124 bytes
-rw-r--r--default_images/res/commandimagelist/sch_circlearc.pngbin0 -> 122 bytes
-rw-r--r--default_images/res/commandimagelist/sch_circlecut.pngbin0 -> 149 bytes
-rw-r--r--default_images/res/commandimagelist/sch_circlecut_unfilled.pngbin0 -> 134 bytes
-rw-r--r--default_images/res/commandimagelist/sch_circlepie.pngbin0 -> 144 bytes
-rw-r--r--default_images/res/commandimagelist/sch_circlepie_unfilled.pngbin0 -> 128 bytes
-rw-r--r--default_images/res/commandimagelist/sch_clickchangerotation.pngbin0 -> 175 bytes
-rw-r--r--default_images/res/commandimagelist/sch_closedoc.pngbin0 -> 157 bytes
-rw-r--r--default_images/res/commandimagelist/sch_closedocs.pngbin0 -> 108 bytes
-rw-r--r--default_images/res/commandimagelist/sch_closemasterview.pngbin0 -> 161 bytes
-rw-r--r--default_images/res/commandimagelist/sch_closewin.pngbin0 -> 157 bytes
-rw-r--r--default_images/res/commandimagelist/sch_color.pngbin0 -> 149 bytes
-rw-r--r--default_images/res/commandimagelist/sch_colorsettings.pngbin0 -> 166 bytes
-rw-r--r--default_images/res/commandimagelist/sch_colorview.pngbin0 -> 260 bytes
-rw-r--r--default_images/res/commandimagelist/sch_combobox.pngbin0 -> 130 bytes
-rw-r--r--default_images/res/commandimagelist/sch_commontaskbarvisible.pngbin0 -> 147 bytes
-rw-r--r--default_images/res/commandimagelist/sch_compilebasic.pngbin0 -> 173 bytes
-rw-r--r--default_images/res/commandimagelist/sch_cone.pngbin0 -> 138 bytes
-rw-r--r--default_images/res/commandimagelist/sch_config.pngbin0 -> 158 bytes
-rw-r--r--default_images/res/commandimagelist/sch_connector.pngbin0 -> 110 bytes
-rw-r--r--default_images/res/commandimagelist/sch_connectorarrowend.pngbin0 -> 118 bytes
-rw-r--r--default_images/res/commandimagelist/sch_connectorarrows.pngbin0 -> 117 bytes
-rw-r--r--default_images/res/commandimagelist/sch_connectorarrowstart.pngbin0 -> 116 bytes
-rw-r--r--default_images/res/commandimagelist/sch_connectorcircleend.pngbin0 -> 110 bytes
-rw-r--r--default_images/res/commandimagelist/sch_connectorcircles.pngbin0 -> 113 bytes
-rw-r--r--default_images/res/commandimagelist/sch_connectorcirclestart.pngbin0 -> 112 bytes
-rw-r--r--default_images/res/commandimagelist/sch_connectorcurve.pngbin0 -> 117 bytes
-rw-r--r--default_images/res/commandimagelist/sch_connectorcurvearrowend.pngbin0 -> 124 bytes
-rw-r--r--default_images/res/commandimagelist/sch_connectorcurvearrows.pngbin0 -> 124 bytes
-rw-r--r--default_images/res/commandimagelist/sch_connectorcurvearrowstart.pngbin0 -> 121 bytes
-rw-r--r--default_images/res/commandimagelist/sch_connectorcurvecircleend.pngbin0 -> 120 bytes
-rw-r--r--default_images/res/commandimagelist/sch_connectorcurvecircles.pngbin0 -> 119 bytes
-rw-r--r--default_images/res/commandimagelist/sch_connectorcurvecirclestart.pngbin0 -> 119 bytes
-rw-r--r--default_images/res/commandimagelist/sch_connectorline.pngbin0 -> 116 bytes
-rw-r--r--default_images/res/commandimagelist/sch_connectorlinearrowend.pngbin0 -> 124 bytes
-rw-r--r--default_images/res/commandimagelist/sch_connectorlinearrows.pngbin0 -> 124 bytes
-rw-r--r--default_images/res/commandimagelist/sch_connectorlinearrowstart.pngbin0 -> 124 bytes
-rw-r--r--default_images/res/commandimagelist/sch_connectorlinecircleend.pngbin0 -> 112 bytes
-rw-r--r--default_images/res/commandimagelist/sch_connectorlinecircles.pngbin0 -> 112 bytes
-rw-r--r--default_images/res/commandimagelist/sch_connectorlinecirclestart.pngbin0 -> 113 bytes
-rw-r--r--default_images/res/commandimagelist/sch_connectorlines.pngbin0 -> 114 bytes
-rw-r--r--default_images/res/commandimagelist/sch_connectorlinesarrowend.pngbin0 -> 125 bytes
-rw-r--r--default_images/res/commandimagelist/sch_connectorlinesarrows.pngbin0 -> 124 bytes
-rw-r--r--default_images/res/commandimagelist/sch_connectorlinesarrowstart.pngbin0 -> 120 bytes
-rw-r--r--default_images/res/commandimagelist/sch_connectorlinescircleend.pngbin0 -> 117 bytes
-rw-r--r--default_images/res/commandimagelist/sch_connectorlinescircles.pngbin0 -> 117 bytes
-rw-r--r--default_images/res/commandimagelist/sch_connectorlinescirclestart.pngbin0 -> 118 bytes
-rw-r--r--default_images/res/commandimagelist/sch_connectortoolbox.pngbin0 -> 113 bytes
-rw-r--r--default_images/res/commandimagelist/sch_contourdialog.pngbin0 -> 166 bytes
-rw-r--r--default_images/res/commandimagelist/sch_controlcodes.pngbin0 -> 107 bytes
-rw-r--r--default_images/res/commandimagelist/sch_controlproperties.pngbin0 -> 162 bytes
-rw-r--r--default_images/res/commandimagelist/sch_convertinto3d.pngbin0 -> 142 bytes
-rw-r--r--default_images/res/commandimagelist/sch_convertinto3dlathe.pngbin0 -> 160 bytes
-rw-r--r--default_images/res/commandimagelist/sch_convertinto3dlathefast.pngbin0 -> 141 bytes
-rw-r--r--default_images/res/commandimagelist/sch_copy.pngbin0 -> 129 bytes
-rw-r--r--default_images/res/commandimagelist/sch_countall.pngbin0 -> 122 bytes
-rw-r--r--default_images/res/commandimagelist/sch_crookrotate.pngbin0 -> 151 bytes
-rw-r--r--default_images/res/commandimagelist/sch_crookslant.pngbin0 -> 167 bytes
-rw-r--r--default_images/res/commandimagelist/sch_crop.pngbin0 -> 129 bytes
-rw-r--r--default_images/res/commandimagelist/sch_cube.pngbin0 -> 130 bytes
-rw-r--r--default_images/res/commandimagelist/sch_currencyfield.pngbin0 -> 141 bytes
-rw-r--r--default_images/res/commandimagelist/sch_customanimation.pngbin0 -> 170 bytes
-rw-r--r--default_images/res/commandimagelist/sch_cut.pngbin0 -> 167 bytes
-rw-r--r--default_images/res/commandimagelist/sch_cylinder.pngbin0 -> 138 bytes
-rw-r--r--default_images/res/commandimagelist/sch_cyramid.pngbin0 -> 139 bytes
-rw-r--r--default_images/res/commandimagelist/sch_datadatapilotrun.pngbin0 -> 144 bytes
-rw-r--r--default_images/res/commandimagelist/sch_datafilterautofilter.pngbin0 -> 173 bytes
-rw-r--r--default_images/res/commandimagelist/sch_datafilterspecialfilter.pngbin0 -> 137 bytes
-rw-r--r--default_images/res/commandimagelist/sch_datafilterstandardfilter.pngbin0 -> 117 bytes
-rw-r--r--default_images/res/commandimagelist/sch_dataimport.pngbin0 -> 109 bytes
-rw-r--r--default_images/res/commandimagelist/sch_dataincolumns.pngbin0 -> 107 bytes
-rw-r--r--default_images/res/commandimagelist/sch_datainrows.pngbin0 -> 263 bytes
-rw-r--r--default_images/res/commandimagelist/sch_datefield.pngbin0 -> 119 bytes
-rw-r--r--default_images/res/commandimagelist/sch_dbaddrelation.pngbin0 -> 149 bytes
-rw-r--r--default_images/res/commandimagelist/sch_dbchangedesignmode.pngbin0 -> 164 bytes
-rw-r--r--default_images/res/commandimagelist/sch_dbclearquery.pngbin0 -> 185 bytes
-rw-r--r--default_images/res/commandimagelist/sch_dbdistinctvalues.pngbin0 -> 133 bytes
-rw-r--r--default_images/res/commandimagelist/sch_dbformdelete.pngbin0 -> 173 bytes
-rw-r--r--default_images/res/commandimagelist/sch_dbformedit.pngbin0 -> 167 bytes
-rw-r--r--default_images/res/commandimagelist/sch_dbformopen.pngbin0 -> 148 bytes
-rw-r--r--default_images/res/commandimagelist/sch_dbformrename.pngbin0 -> 135 bytes
-rw-r--r--default_images/res/commandimagelist/sch_dbindexdesign.pngbin0 -> 156 bytes
-rw-r--r--default_images/res/commandimagelist/sch_dbnewform.pngbin0 -> 147 bytes
-rw-r--r--default_images/res/commandimagelist/sch_dbnewformautopilot.pngbin0 -> 189 bytes
-rw-r--r--default_images/res/commandimagelist/sch_dbnewquery.pngbin0 -> 161 bytes
-rw-r--r--default_images/res/commandimagelist/sch_dbnewqueryautopilot.pngbin0 -> 199 bytes
-rw-r--r--default_images/res/commandimagelist/sch_dbnewquerysql.pngbin0 -> 137 bytes
-rw-r--r--default_images/res/commandimagelist/sch_dbnewreport.pngbin0 -> 157 bytes
-rw-r--r--default_images/res/commandimagelist/sch_dbnewreportautopilot.pngbin0 -> 196 bytes
-rw-r--r--default_images/res/commandimagelist/sch_dbnewtable.pngbin0 -> 135 bytes
-rw-r--r--default_images/res/commandimagelist/sch_dbnewtableautopilot.pngbin0 -> 184 bytes
-rw-r--r--default_images/res/commandimagelist/sch_dbnewview.pngbin0 -> 159 bytes
-rw-r--r--default_images/res/commandimagelist/sch_dbnewviewsql.pngbin0 -> 175 bytes
-rw-r--r--default_images/res/commandimagelist/sch_dbquerydelete.pngbin0 -> 169 bytes
-rw-r--r--default_images/res/commandimagelist/sch_dbqueryedit.pngbin0 -> 182 bytes
-rw-r--r--default_images/res/commandimagelist/sch_dbqueryopen.pngbin0 -> 167 bytes
-rw-r--r--default_images/res/commandimagelist/sch_dbqueryrename.pngbin0 -> 130 bytes
-rw-r--r--default_images/res/commandimagelist/sch_dbreportdelete.pngbin0 -> 167 bytes
-rw-r--r--default_images/res/commandimagelist/sch_dbreportedit.pngbin0 -> 180 bytes
-rw-r--r--default_images/res/commandimagelist/sch_dbreportopen.pngbin0 -> 156 bytes
-rw-r--r--default_images/res/commandimagelist/sch_dbreportrename.pngbin0 -> 148 bytes
-rw-r--r--default_images/res/commandimagelist/sch_dbsortingandgrouping.pngbin0 -> 260 bytes
-rw-r--r--default_images/res/commandimagelist/sch_dbtabledelete.pngbin0 -> 169 bytes
-rw-r--r--default_images/res/commandimagelist/sch_dbtableedit.pngbin0 -> 172 bytes
-rw-r--r--default_images/res/commandimagelist/sch_dbtableopen.pngbin0 -> 147 bytes
-rw-r--r--default_images/res/commandimagelist/sch_dbtablerename.pngbin0 -> 130 bytes
-rw-r--r--default_images/res/commandimagelist/sch_dbviewaliases.pngbin0 -> 123 bytes
-rw-r--r--default_images/res/commandimagelist/sch_dbviewfunctions.pngbin0 -> 129 bytes
-rw-r--r--default_images/res/commandimagelist/sch_dbviewtablenames.pngbin0 -> 139 bytes
-rw-r--r--default_images/res/commandimagelist/sch_decrementindent.pngbin0 -> 119 bytes
-rw-r--r--default_images/res/commandimagelist/sch_decrementlevel.pngbin0 -> 111 bytes
-rw-r--r--default_images/res/commandimagelist/sch_decrementsublevels.pngbin0 -> 134 bytes
-rw-r--r--default_images/res/commandimagelist/sch_defaultbullet.pngbin0 -> 259 bytes
-rw-r--r--default_images/res/commandimagelist/sch_defaultnumbering.pngbin0 -> 109 bytes
-rw-r--r--default_images/res/commandimagelist/sch_definename.pngbin0 -> 111 bytes
-rw-r--r--default_images/res/commandimagelist/sch_defineprintarea.pngbin0 -> 153 bytes
-rw-r--r--default_images/res/commandimagelist/sch_delete.pngbin0 -> 140 bytes
-rwxr-xr-xdefault_images/res/commandimagelist/sch_deleteallannotation.pngbin0 -> 3677 bytes
-rwxr-xr-xdefault_images/res/commandimagelist/sch_deleteannotation.pngbin0 -> 3663 bytes
-rw-r--r--default_images/res/commandimagelist/sch_deletecolumns.pngbin0 -> 103 bytes
-rw-r--r--default_images/res/commandimagelist/sch_deletemasterpage.pngbin0 -> 174 bytes
-rw-r--r--default_images/res/commandimagelist/sch_deleteprintarea.pngbin0 -> 171 bytes
-rw-r--r--default_images/res/commandimagelist/sch_deleterecord.pngbin0 -> 148 bytes
-rw-r--r--default_images/res/commandimagelist/sch_deleterows.pngbin0 -> 105 bytes
-rw-r--r--default_images/res/commandimagelist/sch_designerdialog.pngbin0 -> 153 bytes
-rw-r--r--default_images/res/commandimagelist/sch_dia.pngbin0 -> 159 bytes
-rw-r--r--default_images/res/commandimagelist/sch_diaauto.pngbin0 -> 159 bytes
-rw-r--r--default_images/res/commandimagelist/sch_diaeffect.pngbin0 -> 159 bytes
-rw-r--r--default_images/res/commandimagelist/sch_diagramdata.pngbin0 -> 245 bytes
-rw-r--r--default_images/res/commandimagelist/sch_diagramtype.pngbin0 -> 141 bytes
-rw-r--r--default_images/res/commandimagelist/sch_diaspeed.pngbin0 -> 159 bytes
-rw-r--r--default_images/res/commandimagelist/sch_diatime.pngbin0 -> 159 bytes
-rw-r--r--default_images/res/commandimagelist/sch_distributecolumns.pngbin0 -> 127 bytes
-rw-r--r--default_images/res/commandimagelist/sch_distributerows.pngbin0 -> 131 bytes
-rw-r--r--default_images/res/commandimagelist/sch_doubleclicktextedit.pngbin0 -> 147 bytes
-rw-r--r--default_images/res/commandimagelist/sch_downsearch.pngbin0 -> 3670 bytes
-rw-r--r--default_images/res/commandimagelist/sch_draw.pngbin0 -> 144 bytes
-rw-r--r--default_images/res/commandimagelist/sch_drawcaption.pngbin0 -> 127 bytes
-rw-r--r--default_images/res/commandimagelist/sch_drawchart.pngbin0 -> 101 bytes
-rw-r--r--default_images/res/commandimagelist/sch_drawselect.pngbin0 -> 121 bytes
-rw-r--r--default_images/res/commandimagelist/sch_drawtext.pngbin0 -> 104 bytes
-rw-r--r--default_images/res/commandimagelist/sch_dsbdocumentdatasource.pngbin0 -> 189 bytes
-rw-r--r--default_images/res/commandimagelist/sch_dsbeditdoc.pngbin0 -> 174 bytes
-rw-r--r--default_images/res/commandimagelist/sch_dsbformletter.pngbin0 -> 156 bytes
-rw-r--r--default_images/res/commandimagelist/sch_dsbinsertcolumns.pngbin0 -> 125 bytes
-rw-r--r--default_images/res/commandimagelist/sch_dsbinsertcontent.pngbin0 -> 133 bytes
-rw-r--r--default_images/res/commandimagelist/sch_dsbrowserexplorer.pngbin0 -> 129 bytes
-rw-r--r--default_images/res/commandimagelist/sch_duplicatepage.pngbin0 -> 157 bytes
-rw-r--r--default_images/res/commandimagelist/sch_edit.pngbin0 -> 115 bytes
-rw-r--r--default_images/res/commandimagelist/sch_editdoc.pngbin0 -> 174 bytes
-rw-r--r--default_images/res/commandimagelist/sch_editframeset.pngbin0 -> 122 bytes
-rw-r--r--default_images/res/commandimagelist/sch_editglossary.pngbin0 -> 167 bytes
-rw-r--r--default_images/res/commandimagelist/sch_editheaderandfooter.pngbin0 -> 109 bytes
-rw-r--r--default_images/res/commandimagelist/sch_editprintarea.pngbin0 -> 181 bytes
-rw-r--r--default_images/res/commandimagelist/sch_ellipse.pngbin0 -> 128 bytes
-rw-r--r--default_images/res/commandimagelist/sch_ellipse_unfilled.pngbin0 -> 119 bytes
-rw-r--r--default_images/res/commandimagelist/sch_ellipsecut.pngbin0 -> 138 bytes
-rw-r--r--default_images/res/commandimagelist/sch_ellipsecut_unfilled.pngbin0 -> 125 bytes
-rw-r--r--default_images/res/commandimagelist/sch_ellipsetoolbox.pngbin0 -> 128 bytes
-rw-r--r--default_images/res/commandimagelist/sch_entergroup.pngbin0 -> 144 bytes
-rw-r--r--default_images/res/commandimagelist/sch_entirecolumn.pngbin0 -> 262 bytes
-rw-r--r--default_images/res/commandimagelist/sch_entirerow.pngbin0 -> 100 bytes
-rw-r--r--default_images/res/commandimagelist/sch_euroconverter.pngbin0 -> 141 bytes
-rw-r--r--default_images/res/commandimagelist/sch_executereport.pngbin0 -> 152 bytes
-rw-r--r--default_images/res/commandimagelist/sch_expandpage.pngbin0 -> 139 bytes
-rw-r--r--default_images/res/commandimagelist/sch_exportdialog.pngbin0 -> 156 bytes
-rw-r--r--default_images/res/commandimagelist/sch_exportdirecttopdf.pngbin0 -> 149 bytes
-rw-r--r--default_images/res/commandimagelist/sch_exportto.pngbin0 -> 144 bytes
-rw-r--r--default_images/res/commandimagelist/sch_extendedhelp.pngbin0 -> 149 bytes
-rw-r--r--default_images/res/commandimagelist/sch_extrusion3dcolor.pngbin0 -> 134 bytes
-rw-r--r--default_images/res/commandimagelist/sch_extrusiondepthfloater.pngbin0 -> 158 bytes
-rw-r--r--default_images/res/commandimagelist/sch_extrusiondirectionfloater.pngbin0 -> 154 bytes
-rw-r--r--default_images/res/commandimagelist/sch_extrusionlightingfloater.pngbin0 -> 161 bytes
-rw-r--r--default_images/res/commandimagelist/sch_extrusionsurfacefloater.pngbin0 -> 141 bytes
-rw-r--r--default_images/res/commandimagelist/sch_extrusiontiltdown.pngbin0 -> 160 bytes
-rw-r--r--default_images/res/commandimagelist/sch_extrusiontiltleft.pngbin0 -> 156 bytes
-rw-r--r--default_images/res/commandimagelist/sch_extrusiontiltright.pngbin0 -> 162 bytes
-rw-r--r--default_images/res/commandimagelist/sch_extrusiontiltup.pngbin0 -> 161 bytes
-rw-r--r--default_images/res/commandimagelist/sch_extrusiontoggle.pngbin0 -> 149 bytes
-rw-r--r--default_images/res/commandimagelist/sch_fieldnames.pngbin0 -> 117 bytes
-rw-r--r--default_images/res/commandimagelist/sch_fields.pngbin0 -> 117 bytes
-rw-r--r--default_images/res/commandimagelist/sch_filecontrol.pngbin0 -> 132 bytes
-rw-r--r--default_images/res/commandimagelist/sch_filedocument.pngbin0 -> 122 bytes
-rw-r--r--default_images/res/commandimagelist/sch_fillshadow.pngbin0 -> 111 bytes
-rw-r--r--default_images/res/commandimagelist/sch_fillstyle.pngbin0 -> 171 bytes
-rw-r--r--default_images/res/commandimagelist/sch_filtercrit.pngbin0 -> 117 bytes
-rw-r--r--default_images/res/commandimagelist/sch_firstpage.pngbin0 -> 152 bytes
-rw-r--r--default_images/res/commandimagelist/sch_firstrecord.pngbin0 -> 119 bytes
-rw-r--r--default_images/res/commandimagelist/sch_fliphorizontal.pngbin0 -> 132 bytes
-rw-r--r--default_images/res/commandimagelist/sch_flipvertical.pngbin0 -> 135 bytes
-rw-r--r--default_images/res/commandimagelist/sch_flowchartshapes.flowchart-alternate-process.pngbin0 -> 107 bytes
-rw-r--r--default_images/res/commandimagelist/sch_flowchartshapes.flowchart-card.pngbin0 -> 114 bytes
-rw-r--r--default_images/res/commandimagelist/sch_flowchartshapes.flowchart-collate.pngbin0 -> 139 bytes
-rw-r--r--default_images/res/commandimagelist/sch_flowchartshapes.flowchart-connector.pngbin0 -> 136 bytes
-rw-r--r--default_images/res/commandimagelist/sch_flowchartshapes.flowchart-data.pngbin0 -> 130 bytes
-rw-r--r--default_images/res/commandimagelist/sch_flowchartshapes.flowchart-decision.pngbin0 -> 131 bytes
-rw-r--r--default_images/res/commandimagelist/sch_flowchartshapes.flowchart-delay.pngbin0 -> 126 bytes
-rw-r--r--default_images/res/commandimagelist/sch_flowchartshapes.flowchart-direct-access-storage.pngbin0 -> 127 bytes
-rw-r--r--default_images/res/commandimagelist/sch_flowchartshapes.flowchart-display.pngbin0 -> 135 bytes
-rw-r--r--default_images/res/commandimagelist/sch_flowchartshapes.flowchart-document.pngbin0 -> 301 bytes
-rw-r--r--default_images/res/commandimagelist/sch_flowchartshapes.flowchart-extract.pngbin0 -> 138 bytes
-rw-r--r--default_images/res/commandimagelist/sch_flowchartshapes.flowchart-internal-storage.pngbin0 -> 101 bytes
-rw-r--r--default_images/res/commandimagelist/sch_flowchartshapes.flowchart-magnetic-disk.pngbin0 -> 138 bytes
-rw-r--r--default_images/res/commandimagelist/sch_flowchartshapes.flowchart-manual-input.pngbin0 -> 119 bytes
-rw-r--r--default_images/res/commandimagelist/sch_flowchartshapes.flowchart-manual-operation.pngbin0 -> 142 bytes
-rw-r--r--default_images/res/commandimagelist/sch_flowchartshapes.flowchart-merge.pngbin0 -> 155 bytes
-rw-r--r--default_images/res/commandimagelist/sch_flowchartshapes.flowchart-multidocument.pngbin0 -> 331 bytes
-rw-r--r--default_images/res/commandimagelist/sch_flowchartshapes.flowchart-off-page-connector.pngbin0 -> 121 bytes
-rw-r--r--default_images/res/commandimagelist/sch_flowchartshapes.flowchart-or.pngbin0 -> 150 bytes
-rw-r--r--default_images/res/commandimagelist/sch_flowchartshapes.flowchart-predefined-process.pngbin0 -> 266 bytes
-rw-r--r--default_images/res/commandimagelist/sch_flowchartshapes.flowchart-preparation.pngbin0 -> 134 bytes
-rw-r--r--default_images/res/commandimagelist/sch_flowchartshapes.flowchart-process.pngbin0 -> 262 bytes
-rw-r--r--default_images/res/commandimagelist/sch_flowchartshapes.flowchart-punched-tape.pngbin0 -> 139 bytes
-rw-r--r--default_images/res/commandimagelist/sch_flowchartshapes.flowchart-sequential-access.pngbin0 -> 141 bytes
-rw-r--r--default_images/res/commandimagelist/sch_flowchartshapes.flowchart-sort.pngbin0 -> 129 bytes
-rw-r--r--default_images/res/commandimagelist/sch_flowchartshapes.flowchart-stored-data.pngbin0 -> 126 bytes
-rw-r--r--default_images/res/commandimagelist/sch_flowchartshapes.flowchart-summing-junction.pngbin0 -> 152 bytes
-rw-r--r--default_images/res/commandimagelist/sch_flowchartshapes.flowchart-terminator.pngbin0 -> 114 bytes
-rw-r--r--default_images/res/commandimagelist/sch_flowchartshapes.pngbin0 -> 101 bytes
-rw-r--r--default_images/res/commandimagelist/sch_fontcolor.pngbin0 -> 149 bytes
-rw-r--r--default_images/res/commandimagelist/sch_fontdialog.pngbin0 -> 166 bytes
-rw-r--r--default_images/res/commandimagelist/sch_fontheight.pngbin0 -> 146 bytes
-rw-r--r--default_images/res/commandimagelist/sch_fontwork.pngbin0 -> 157 bytes
-rw-r--r--default_images/res/commandimagelist/sch_fontworkalignmentfloater.pngbin0 -> 269 bytes
-rw-r--r--default_images/res/commandimagelist/sch_fontworkcharacterspacingfloater.pngbin0 -> 172 bytes
-rw-r--r--default_images/res/commandimagelist/sch_fontworkgalleryfloater.pngbin0 -> 364 bytes
-rw-r--r--default_images/res/commandimagelist/sch_fontworksameletterheights.pngbin0 -> 163 bytes
-rw-r--r--default_images/res/commandimagelist/sch_fontworkshapetype.fontwork-arch-down-curve.pngbin0 -> 138 bytes
-rw-r--r--default_images/res/commandimagelist/sch_fontworkshapetype.fontwork-arch-down-pour.pngbin0 -> 134 bytes
-rw-r--r--default_images/res/commandimagelist/sch_fontworkshapetype.fontwork-arch-left-curve.pngbin0 -> 130 bytes
-rw-r--r--default_images/res/commandimagelist/sch_fontworkshapetype.fontwork-arch-left-pour.pngbin0 -> 133 bytes
-rw-r--r--default_images/res/commandimagelist/sch_fontworkshapetype.fontwork-arch-right-curve.pngbin0 -> 131 bytes
-rw-r--r--default_images/res/commandimagelist/sch_fontworkshapetype.fontwork-arch-right-pour.pngbin0 -> 133 bytes
-rw-r--r--default_images/res/commandimagelist/sch_fontworkshapetype.fontwork-arch-up-curve.pngbin0 -> 134 bytes
-rw-r--r--default_images/res/commandimagelist/sch_fontworkshapetype.fontwork-arch-up-pour.pngbin0 -> 129 bytes
-rw-r--r--default_images/res/commandimagelist/sch_fontworkshapetype.fontwork-chevron-down.pngbin0 -> 139 bytes
-rw-r--r--default_images/res/commandimagelist/sch_fontworkshapetype.fontwork-chevron-up.pngbin0 -> 128 bytes
-rw-r--r--default_images/res/commandimagelist/sch_fontworkshapetype.fontwork-circle-curve.pngbin0 -> 145 bytes
-rw-r--r--default_images/res/commandimagelist/sch_fontworkshapetype.fontwork-circle-pour.pngbin0 -> 143 bytes
-rw-r--r--default_images/res/commandimagelist/sch_fontworkshapetype.fontwork-curve-down.pngbin0 -> 144 bytes
-rw-r--r--default_images/res/commandimagelist/sch_fontworkshapetype.fontwork-curve-up.pngbin0 -> 138 bytes
-rw-r--r--default_images/res/commandimagelist/sch_fontworkshapetype.fontwork-fade-down.pngbin0 -> 131 bytes
-rw-r--r--default_images/res/commandimagelist/sch_fontworkshapetype.fontwork-fade-left.pngbin0 -> 113 bytes
-rw-r--r--default_images/res/commandimagelist/sch_fontworkshapetype.fontwork-fade-right.pngbin0 -> 119 bytes
-rw-r--r--default_images/res/commandimagelist/sch_fontworkshapetype.fontwork-fade-up-and-left.pngbin0 -> 133 bytes
-rw-r--r--default_images/res/commandimagelist/sch_fontworkshapetype.fontwork-fade-up-and-right.pngbin0 -> 130 bytes
-rw-r--r--default_images/res/commandimagelist/sch_fontworkshapetype.fontwork-fade-up.pngbin0 -> 125 bytes
-rw-r--r--default_images/res/commandimagelist/sch_fontworkshapetype.fontwork-inflate.pngbin0 -> 115 bytes
-rw-r--r--default_images/res/commandimagelist/sch_fontworkshapetype.fontwork-open-circle-curve.pngbin0 -> 146 bytes
-rw-r--r--default_images/res/commandimagelist/sch_fontworkshapetype.fontwork-open-circle-pour.pngbin0 -> 142 bytes
-rw-r--r--default_images/res/commandimagelist/sch_fontworkshapetype.fontwork-plain-text.pngbin0 -> 210 bytes
-rw-r--r--default_images/res/commandimagelist/sch_fontworkshapetype.fontwork-slant-down.pngbin0 -> 127 bytes
-rw-r--r--default_images/res/commandimagelist/sch_fontworkshapetype.fontwork-slant-up.pngbin0 -> 116 bytes
-rw-r--r--default_images/res/commandimagelist/sch_fontworkshapetype.fontwork-stop.pngbin0 -> 111 bytes
-rw-r--r--default_images/res/commandimagelist/sch_fontworkshapetype.fontwork-triangle-down.pngbin0 -> 140 bytes
-rw-r--r--default_images/res/commandimagelist/sch_fontworkshapetype.fontwork-triangle-up.pngbin0 -> 134 bytes
-rw-r--r--default_images/res/commandimagelist/sch_fontworkshapetype.fontwork-wave.pngbin0 -> 136 bytes
-rw-r--r--default_images/res/commandimagelist/sch_fontworkshapetype.pngbin0 -> 157 bytes
-rw-r--r--default_images/res/commandimagelist/sch_formatarea.pngbin0 -> 171 bytes
-rw-r--r--default_images/res/commandimagelist/sch_formatgroup.pngbin0 -> 128 bytes
-rw-r--r--default_images/res/commandimagelist/sch_formatline.pngbin0 -> 136 bytes
-rw-r--r--default_images/res/commandimagelist/sch_formatpaintbrush.pngbin0 -> 160 bytes
-rw-r--r--default_images/res/commandimagelist/sch_formattedfield.pngbin0 -> 117 bytes
-rw-r--r--default_images/res/commandimagelist/sch_formatungroup.pngbin0 -> 160 bytes
-rw-r--r--default_images/res/commandimagelist/sch_formdesigntools.pngbin0 -> 152 bytes
-rw-r--r--default_images/res/commandimagelist/sch_formelcursor.pngbin0 -> 119 bytes
-rw-r--r--default_images/res/commandimagelist/sch_formfilter.pngbin0 -> 146 bytes
-rw-r--r--default_images/res/commandimagelist/sch_formfiltered.pngbin0 -> 152 bytes
-rw-r--r--default_images/res/commandimagelist/sch_formfilterexecute.pngbin0 -> 117 bytes
-rw-r--r--default_images/res/commandimagelist/sch_formfilternavigator.pngbin0 -> 174 bytes
-rw-r--r--default_images/res/commandimagelist/sch_formproperties.pngbin0 -> 134 bytes
-rw-r--r--default_images/res/commandimagelist/sch_forward.pngbin0 -> 122 bytes
-rw-r--r--default_images/res/commandimagelist/sch_framedialog.pngbin0 -> 150 bytes
-rw-r--r--default_images/res/commandimagelist/sch_framelinecolor.pngbin0 -> 262 bytes
-rw-r--r--default_images/res/commandimagelist/sch_freeline.pngbin0 -> 161 bytes
-rw-r--r--default_images/res/commandimagelist/sch_freeline_unfilled.pngbin0 -> 156 bytes
-rw-r--r--default_images/res/commandimagelist/sch_fullscreen.pngbin0 -> 140 bytes
-rw-r--r--default_images/res/commandimagelist/sch_gallery.pngbin0 -> 133 bytes
-rw-r--r--default_images/res/commandimagelist/sch_getactivetask.pngbin0 -> 122 bytes
-rw-r--r--default_images/res/commandimagelist/sch_glueeditmode.pngbin0 -> 145 bytes
-rw-r--r--default_images/res/commandimagelist/sch_glueescapedirectionbottom.pngbin0 -> 138 bytes
-rw-r--r--default_images/res/commandimagelist/sch_glueescapedirectionleft.pngbin0 -> 131 bytes
-rw-r--r--default_images/res/commandimagelist/sch_glueescapedirectionright.pngbin0 -> 132 bytes
-rw-r--r--default_images/res/commandimagelist/sch_glueescapedirectiontop.pngbin0 -> 139 bytes
-rw-r--r--default_images/res/commandimagelist/sch_gluehorzaligncenter.pngbin0 -> 129 bytes
-rw-r--r--default_images/res/commandimagelist/sch_gluehorzalignleft.pngbin0 -> 138 bytes
-rw-r--r--default_images/res/commandimagelist/sch_gluehorzalignright.pngbin0 -> 140 bytes
-rw-r--r--default_images/res/commandimagelist/sch_glueinsertpoint.pngbin0 -> 142 bytes
-rw-r--r--default_images/res/commandimagelist/sch_gluepercent.pngbin0 -> 134 bytes
-rw-r--r--default_images/res/commandimagelist/sch_gluevertalignbottom.pngbin0 -> 135 bytes
-rw-r--r--default_images/res/commandimagelist/sch_gluevertaligncenter.pngbin0 -> 123 bytes
-rw-r--r--default_images/res/commandimagelist/sch_gluevertaligntop.pngbin0 -> 137 bytes
-rw-r--r--default_images/res/commandimagelist/sch_goalseekdialog.pngbin0 -> 141 bytes
-rw-r--r--default_images/res/commandimagelist/sch_gotoend.pngbin0 -> 105 bytes
-rw-r--r--default_images/res/commandimagelist/sch_gotoendofdoc.pngbin0 -> 154 bytes
-rw-r--r--default_images/res/commandimagelist/sch_gotostartofdoc.pngbin0 -> 152 bytes
-rw-r--r--default_images/res/commandimagelist/sch_gotostartoftable.pngbin0 -> 115 bytes
-rw-r--r--default_images/res/commandimagelist/sch_grafattrcrop.pngbin0 -> 129 bytes
-rw-r--r--default_images/res/commandimagelist/sch_grafblue.pngbin0 -> 150 bytes
-rw-r--r--default_images/res/commandimagelist/sch_grafcontrast.pngbin0 -> 118 bytes
-rw-r--r--default_images/res/commandimagelist/sch_grafgamma.pngbin0 -> 146 bytes
-rw-r--r--default_images/res/commandimagelist/sch_grafgreen.pngbin0 -> 150 bytes
-rw-r--r--default_images/res/commandimagelist/sch_grafinvert.pngbin0 -> 103 bytes
-rw-r--r--default_images/res/commandimagelist/sch_grafluminance.pngbin0 -> 139 bytes
-rw-r--r--default_images/res/commandimagelist/sch_grafmode.pngbin0 -> 165 bytes
-rw-r--r--default_images/res/commandimagelist/sch_grafred.pngbin0 -> 151 bytes
-rw-r--r--default_images/res/commandimagelist/sch_graftransparence.pngbin0 -> 141 bytes
-rw-r--r--default_images/res/commandimagelist/sch_graphic.pngbin0 -> 127 bytes
-rw-r--r--default_images/res/commandimagelist/sch_graphicfilterinvert.pngbin0 -> 103 bytes
-rw-r--r--default_images/res/commandimagelist/sch_graphicfiltermosaic.pngbin0 -> 137 bytes
-rw-r--r--default_images/res/commandimagelist/sch_graphicfilterpopart.pngbin0 -> 149 bytes
-rw-r--r--default_images/res/commandimagelist/sch_graphicfilterposter.pngbin0 -> 142 bytes
-rw-r--r--default_images/res/commandimagelist/sch_graphicfilterrelief.pngbin0 -> 121 bytes
-rw-r--r--default_images/res/commandimagelist/sch_graphicfilterremovenoise.pngbin0 -> 180 bytes
-rw-r--r--default_images/res/commandimagelist/sch_graphicfiltersepia.pngbin0 -> 132 bytes
-rw-r--r--default_images/res/commandimagelist/sch_graphicfiltersharpen.pngbin0 -> 130 bytes
-rw-r--r--default_images/res/commandimagelist/sch_graphicfiltersmooth.pngbin0 -> 136 bytes
-rw-r--r--default_images/res/commandimagelist/sch_graphicfiltersobel.pngbin0 -> 133 bytes
-rw-r--r--default_images/res/commandimagelist/sch_graphicfiltersolarize.pngbin0 -> 143 bytes
-rw-r--r--default_images/res/commandimagelist/sch_graphicfiltertoolbox.pngbin0 -> 157 bytes
-rw-r--r--default_images/res/commandimagelist/sch_greatestheight.pngbin0 -> 121 bytes
-rw-r--r--default_images/res/commandimagelist/sch_greatestwidth.pngbin0 -> 123 bytes
-rw-r--r--default_images/res/commandimagelist/sch_grid.pngbin0 -> 245 bytes
-rw-r--r--default_images/res/commandimagelist/sch_griduse.pngbin0 -> 134 bytes
-rw-r--r--default_images/res/commandimagelist/sch_gridvisible.pngbin0 -> 249 bytes
-rw-r--r--default_images/res/commandimagelist/sch_group.pngbin0 -> 109 bytes
-rw-r--r--default_images/res/commandimagelist/sch_groupbox.pngbin0 -> 114 bytes
-rw-r--r--default_images/res/commandimagelist/sch_grow.pngbin0 -> 160 bytes
-rw-r--r--default_images/res/commandimagelist/sch_halfsphere.pngbin0 -> 138 bytes
-rw-r--r--default_images/res/commandimagelist/sch_handlesdraft.pngbin0 -> 125 bytes
-rw-r--r--default_images/res/commandimagelist/sch_helpannotate.pngbin0 -> 139 bytes
-rw-r--r--default_images/res/commandimagelist/sch_helpbookmark.pngbin0 -> 120 bytes
-rw-r--r--default_images/res/commandimagelist/sch_helpdownload.pngbin0 -> 122 bytes
-rw-r--r--default_images/res/commandimagelist/sch_helperdialog.pngbin0 -> 165 bytes
-rw-r--r--default_images/res/commandimagelist/sch_helpindex.pngbin0 -> 165 bytes
-rw-r--r--default_images/res/commandimagelist/sch_helplinesmove.pngbin0 -> 136 bytes
-rw-r--r--default_images/res/commandimagelist/sch_helplinesuse.pngbin0 -> 135 bytes
-rw-r--r--default_images/res/commandimagelist/sch_helplinesvisible.pngbin0 -> 273 bytes
-rw-r--r--default_images/res/commandimagelist/sch_helpmenu.pngbin0 -> 167 bytes
-rw-r--r--default_images/res/commandimagelist/sch_helpsearch.pngbin0 -> 128 bytes
-rw-r--r--default_images/res/commandimagelist/sch_helpzoomin.pngbin0 -> 137 bytes
-rw-r--r--default_images/res/commandimagelist/sch_helpzoomout.pngbin0 -> 135 bytes
-rw-r--r--default_images/res/commandimagelist/sch_hfixedline.pngbin0 -> 101 bytes
-rw-r--r--default_images/res/commandimagelist/sch_hideslide.pngbin0 -> 109 bytes
-rw-r--r--default_images/res/commandimagelist/sch_hscrollbar.pngbin0 -> 111 bytes
-rw-r--r--default_images/res/commandimagelist/sch_hyperlinkdialog.pngbin0 -> 205 bytes
-rw-r--r--default_images/res/commandimagelist/sch_hyphenate.pngbin0 -> 115 bytes
-rw-r--r--default_images/res/commandimagelist/sch_hyphenation.pngbin0 -> 115 bytes
-rw-r--r--default_images/res/commandimagelist/sch_imagebutton.pngbin0 -> 123 bytes
-rw-r--r--default_images/res/commandimagelist/sch_imagecontrol.pngbin0 -> 134 bytes
-rw-r--r--default_images/res/commandimagelist/sch_imagemapdialog.pngbin0 -> 147 bytes
-rwxr-xr-xdefault_images/res/commandimagelist/sch_importdialog.pngbin0 -> 319 bytes
-rw-r--r--default_images/res/commandimagelist/sch_importfromfile.pngbin0 -> 164 bytes
-rw-r--r--default_images/res/commandimagelist/sch_incrementindent.pngbin0 -> 121 bytes
-rw-r--r--default_images/res/commandimagelist/sch_incrementlevel.pngbin0 -> 113 bytes
-rw-r--r--default_images/res/commandimagelist/sch_incrementsublevels.pngbin0 -> 136 bytes
-rw-r--r--default_images/res/commandimagelist/sch_inscellsctrl.pngbin0 -> 124 bytes
-rw-r--r--default_images/res/commandimagelist/sch_insertannotation.pngbin0 -> 139 bytes
-rw-r--r--default_images/res/commandimagelist/sch_insertauthorfield.pngbin0 -> 164 bytes
-rw-r--r--default_images/res/commandimagelist/sch_insertavmedia.pngbin0 -> 165 bytes
-rw-r--r--default_images/res/commandimagelist/sch_insertbookmark.pngbin0 -> 160 bytes
-rw-r--r--default_images/res/commandimagelist/sch_insertcaptiondialog.pngbin0 -> 119 bytes
-rw-r--r--default_images/res/commandimagelist/sch_insertcellsdown.pngbin0 -> 143 bytes
-rw-r--r--default_images/res/commandimagelist/sch_insertcellsright.pngbin0 -> 132 bytes
-rw-r--r--default_images/res/commandimagelist/sch_insertcolumns.pngbin0 -> 111 bytes
-rw-r--r--default_images/res/commandimagelist/sch_insertctrl.pngbin0 -> 120 bytes
-rw-r--r--default_images/res/commandimagelist/sch_insertcurrencyfield.pngbin0 -> 141 bytes
-rw-r--r--default_images/res/commandimagelist/sch_insertdatefield.pngbin0 -> 119 bytes
-rw-r--r--default_images/res/commandimagelist/sch_insertdoc.pngbin0 -> 146 bytes
-rw-r--r--default_images/res/commandimagelist/sch_insertdraw.pngbin0 -> 156 bytes
-rw-r--r--default_images/res/commandimagelist/sch_insertedit.pngbin0 -> 115 bytes
-rw-r--r--default_images/res/commandimagelist/sch_insertendnote.pngbin0 -> 151 bytes
-rw-r--r--default_images/res/commandimagelist/sch_insertfield.pngbin0 -> 125 bytes
-rw-r--r--default_images/res/commandimagelist/sch_insertfieldctrl.pngbin0 -> 125 bytes
-rw-r--r--default_images/res/commandimagelist/sch_insertfilecontrol.pngbin0 -> 132 bytes
-rw-r--r--default_images/res/commandimagelist/sch_insertfixedtext.pngbin0 -> 110 bytes
-rw-r--r--default_images/res/commandimagelist/sch_insertfootnote.pngbin0 -> 153 bytes
-rw-r--r--default_images/res/commandimagelist/sch_insertformattedfield.pngbin0 -> 117 bytes
-rw-r--r--default_images/res/commandimagelist/sch_insertformula.pngbin0 -> 162 bytes
-rw-r--r--default_images/res/commandimagelist/sch_insertframe.pngbin0 -> 101 bytes
-rw-r--r--default_images/res/commandimagelist/sch_insertframeinteract.pngbin0 -> 101 bytes
-rw-r--r--default_images/res/commandimagelist/sch_insertframeinteractnocolumns.pngbin0 -> 101 bytes
-rw-r--r--default_images/res/commandimagelist/sch_insertgraphic.pngbin0 -> 132 bytes
-rw-r--r--default_images/res/commandimagelist/sch_inserthyperlink.pngbin0 -> 177 bytes
-rw-r--r--default_images/res/commandimagelist/sch_insertimagecontrol.pngbin0 -> 134 bytes
-rw-r--r--default_images/res/commandimagelist/sch_insertindexesentry.pngbin0 -> 116 bytes
-rw-r--r--default_images/res/commandimagelist/sch_insertlistbox.pngbin0 -> 133 bytes
-rw-r--r--default_images/res/commandimagelist/sch_insertmasterpage.pngbin0 -> 168 bytes
-rw-r--r--default_images/res/commandimagelist/sch_insertmath.pngbin0 -> 117 bytes
-rw-r--r--default_images/res/commandimagelist/sch_insertneutralparagraph.pngbin0 -> 103 bytes
-rw-r--r--default_images/res/commandimagelist/sch_insertnumericfield.pngbin0 -> 106 bytes
-rw-r--r--default_images/res/commandimagelist/sch_insertobjctrl.pngbin0 -> 144 bytes
-rw-r--r--default_images/res/commandimagelist/sch_insertobject.pngbin0 -> 144 bytes
-rw-r--r--default_images/res/commandimagelist/sch_insertobjectchart.pngbin0 -> 101 bytes
-rw-r--r--default_images/res/commandimagelist/sch_insertobjectdialog.pngbin0 -> 144 bytes
-rw-r--r--default_images/res/commandimagelist/sch_insertobjectfloatingframe.pngbin0 -> 102 bytes
-rw-r--r--default_images/res/commandimagelist/sch_insertobjectstarmath.pngbin0 -> 117 bytes
-rw-r--r--default_images/res/commandimagelist/sch_insertpage.pngbin0 -> 3670 bytes
-rw-r--r--default_images/res/commandimagelist/sch_insertpagecountfield.pngbin0 -> 126 bytes
-rw-r--r--default_images/res/commandimagelist/sch_insertpagenumberfield.pngbin0 -> 119 bytes
-rw-r--r--default_images/res/commandimagelist/sch_insertpatternfield.pngbin0 -> 108 bytes
-rw-r--r--default_images/res/commandimagelist/sch_insertplugin.pngbin0 -> 138 bytes
-rw-r--r--default_images/res/commandimagelist/sch_insertpushbutton.pngbin0 -> 100 bytes
-rw-r--r--default_images/res/commandimagelist/sch_insertreferencefield.pngbin0 -> 139 bytes
-rw-r--r--default_images/res/commandimagelist/sch_insertrows.pngbin0 -> 114 bytes
-rw-r--r--default_images/res/commandimagelist/sch_insertsection.pngbin0 -> 105 bytes
-rw-r--r--default_images/res/commandimagelist/sch_insertsound.pngbin0 -> 125 bytes
-rw-r--r--default_images/res/commandimagelist/sch_insertspreadsheet.pngbin0 -> 245 bytes
-rw-r--r--default_images/res/commandimagelist/sch_insertsymbol.pngbin0 -> 126 bytes
-rw-r--r--default_images/res/commandimagelist/sch_inserttable.pngbin0 -> 245 bytes
-rw-r--r--default_images/res/commandimagelist/sch_inserttextframe.pngbin0 -> 101 bytes
-rw-r--r--default_images/res/commandimagelist/sch_inserttimefield.pngbin0 -> 163 bytes
-rw-r--r--default_images/res/commandimagelist/sch_inserttitlefield.pngbin0 -> 122 bytes
-rw-r--r--default_images/res/commandimagelist/sch_inserttoolbox.pngbin0 -> 164 bytes
-rw-r--r--default_images/res/commandimagelist/sch_inserttopicfield.pngbin0 -> 134 bytes
-rw-r--r--default_images/res/commandimagelist/sch_inserttreecontrol.pngbin0 -> 116 bytes
-rw-r--r--default_images/res/commandimagelist/sch_insertvideo.pngbin0 -> 127 bytes
-rw-r--r--default_images/res/commandimagelist/sch_insobjctrl.pngbin0 -> 144 bytes
-rw-r--r--default_images/res/commandimagelist/sch_interactivegradient.pngbin0 -> 151 bytes
-rw-r--r--default_images/res/commandimagelist/sch_interactivetransparence.pngbin0 -> 171 bytes
-rw-r--r--default_images/res/commandimagelist/sch_internetonline.pngbin0 -> 122 bytes
-rw-r--r--default_images/res/commandimagelist/sch_italic.pngbin0 -> 128 bytes
-rw-r--r--default_images/res/commandimagelist/sch_justifypara.pngbin0 -> 266 bytes
-rw-r--r--default_images/res/commandimagelist/sch_label.pngbin0 -> 110 bytes
-rw-r--r--default_images/res/commandimagelist/sch_lastpage.pngbin0 -> 154 bytes
-rw-r--r--default_images/res/commandimagelist/sch_lastrecord.pngbin0 -> 115 bytes
-rw-r--r--default_images/res/commandimagelist/sch_leaveallgroups.pngbin0 -> 157 bytes
-rw-r--r--default_images/res/commandimagelist/sch_leavegroup.pngbin0 -> 156 bytes
-rw-r--r--default_images/res/commandimagelist/sch_leftpara.pngbin0 -> 268 bytes
-rw-r--r--default_images/res/commandimagelist/sch_line.pngbin0 -> 110 bytes
-rw-r--r--default_images/res/commandimagelist/sch_line_diagonal.pngbin0 -> 125 bytes
-rw-r--r--default_images/res/commandimagelist/sch_linearrowcircle.pngbin0 -> 100 bytes
-rw-r--r--default_images/res/commandimagelist/sch_linearrowend.pngbin0 -> 101 bytes
-rw-r--r--default_images/res/commandimagelist/sch_linearrows.pngbin0 -> 108 bytes
-rw-r--r--default_images/res/commandimagelist/sch_linearrowsquare.pngbin0 -> 291 bytes
-rw-r--r--default_images/res/commandimagelist/sch_linearrowstart.pngbin0 -> 287 bytes
-rw-r--r--default_images/res/commandimagelist/sch_linecirclearrow.pngbin0 -> 102 bytes
-rw-r--r--default_images/res/commandimagelist/sch_lineendstyle.pngbin0 -> 124 bytes
-rw-r--r--default_images/res/commandimagelist/sch_linesquarearrow.pngbin0 -> 102 bytes
-rw-r--r--default_images/res/commandimagelist/sch_linestyle.pngbin0 -> 252 bytes
-rw-r--r--default_images/res/commandimagelist/sch_linetoolbox.pngbin0 -> 156 bytes
-rw-r--r--default_images/res/commandimagelist/sch_linewidth.pngbin0 -> 136 bytes
-rw-r--r--default_images/res/commandimagelist/sch_listbox.pngbin0 -> 133 bytes
-rw-r--r--default_images/res/commandimagelist/sch_loadbasic.pngbin0 -> 1047 bytes
-rw-r--r--default_images/res/commandimagelist/sch_macrorecorder.pngbin0 -> 169 bytes
-rw-r--r--default_images/res/commandimagelist/sch_macrorecordingfloat.pngbin0 -> 122 bytes
-rw-r--r--default_images/res/commandimagelist/sch_mailwindow.pngbin0 -> 122 bytes
-rw-r--r--default_images/res/commandimagelist/sch_managebreakpoints.pngbin0 -> 157 bytes
-rw-r--r--default_images/res/commandimagelist/sch_managelanguage.pngbin0 -> 184 bytes
-rw-r--r--default_images/res/commandimagelist/sch_marks.pngbin0 -> 105 bytes
-rw-r--r--default_images/res/commandimagelist/sch_matchgroup.pngbin0 -> 123 bytes
-rw-r--r--default_images/res/commandimagelist/sch_measureline.pngbin0 -> 104 bytes
-rw-r--r--default_images/res/commandimagelist/sch_mergecells.pngbin0 -> 121 bytes
-rw-r--r--default_images/res/commandimagelist/sch_mergedialog.pngbin0 -> 156 bytes
-rw-r--r--default_images/res/commandimagelist/sch_mirror.pngbin0 -> 178 bytes
-rw-r--r--default_images/res/commandimagelist/sch_modifyframe.pngbin0 -> 172 bytes
-rw-r--r--default_images/res/commandimagelist/sch_modifypage.pngbin0 -> 122 bytes
-rw-r--r--default_images/res/commandimagelist/sch_moduledialog.pngbin0 -> 144 bytes
-rw-r--r--default_images/res/commandimagelist/sch_morecontrols.pngbin0 -> 147 bytes
-rw-r--r--default_images/res/commandimagelist/sch_movedown.pngbin0 -> 115 bytes
-rw-r--r--default_images/res/commandimagelist/sch_movedownsubitems.pngbin0 -> 142 bytes
-rw-r--r--default_images/res/commandimagelist/sch_moveup.pngbin0 -> 114 bytes
-rw-r--r--default_images/res/commandimagelist/sch_moveupsubitems.pngbin0 -> 141 bytes
-rw-r--r--default_images/res/commandimagelist/sch_navigationbar.pngbin0 -> 107 bytes
-rw-r--r--default_images/res/commandimagelist/sch_navigator.pngbin0 -> 174 bytes
-rw-r--r--default_images/res/commandimagelist/sch_newarrangement.pngbin0 -> 122 bytes
-rw-r--r--default_images/res/commandimagelist/sch_newdoc.pngbin0 -> 109 bytes
-rw-r--r--default_images/res/commandimagelist/sch_newrecord.pngbin0 -> 140 bytes
-rwxr-xr-xdefault_images/res/commandimagelist/sch_nextannotation.pngbin0 -> 3648 bytes
-rw-r--r--default_images/res/commandimagelist/sch_nextpage.pngbin0 -> 158 bytes
-rw-r--r--default_images/res/commandimagelist/sch_nextrecord.pngbin0 -> 108 bytes
-rw-r--r--default_images/res/commandimagelist/sch_numberformatcurrency.pngbin0 -> 141 bytes
-rw-r--r--default_images/res/commandimagelist/sch_numberformatdate.pngbin0 -> 119 bytes
-rw-r--r--default_images/res/commandimagelist/sch_numberformatdecdecimals.pngbin0 -> 141 bytes
-rw-r--r--default_images/res/commandimagelist/sch_numberformatdecimal.pngbin0 -> 119 bytes
-rw-r--r--default_images/res/commandimagelist/sch_numberformatincdecimals.pngbin0 -> 124 bytes
-rw-r--r--default_images/res/commandimagelist/sch_numberformatpercent.pngbin0 -> 122 bytes
-rw-r--r--default_images/res/commandimagelist/sch_numberformatscientific.pngbin0 -> 104 bytes
-rw-r--r--default_images/res/commandimagelist/sch_numberformatstandard.pngbin0 -> 135 bytes
-rw-r--r--default_images/res/commandimagelist/sch_numberingstart.pngbin0 -> 143 bytes
-rw-r--r--default_images/res/commandimagelist/sch_numericfield.pngbin0 -> 106 bytes
-rw-r--r--default_images/res/commandimagelist/sch_objectalign.pngbin0 -> 135 bytes
-rw-r--r--default_images/res/commandimagelist/sch_objectalignleft.pngbin0 -> 135 bytes
-rw-r--r--default_images/res/commandimagelist/sch_objectalignright.pngbin0 -> 137 bytes
-rw-r--r--default_images/res/commandimagelist/sch_objectcatalog.pngbin0 -> 132 bytes
-rw-r--r--default_images/res/commandimagelist/sch_objectposition.pngbin0 -> 121 bytes
-rw-r--r--default_images/res/commandimagelist/sch_objects3dtoolbox.pngbin0 -> 130 bytes
-rw-r--r--default_images/res/commandimagelist/sch_open.pngbin0 -> 141 bytes
-rw-r--r--default_images/res/commandimagelist/sch_openreadonly.pngbin0 -> 177 bytes
-rw-r--r--default_images/res/commandimagelist/sch_openurl.pngbin0 -> 177 bytes
-rw-r--r--default_images/res/commandimagelist/sch_optimizetable.pngbin0 -> 142 bytes
-rw-r--r--default_images/res/commandimagelist/sch_ordercrit.pngbin0 -> 143 bytes
-rw-r--r--default_images/res/commandimagelist/sch_outlinebullet.pngbin0 -> 137 bytes
-rw-r--r--default_images/res/commandimagelist/sch_outlinecollapse.pngbin0 -> 112 bytes
-rw-r--r--default_images/res/commandimagelist/sch_outlinecollapseall.pngbin0 -> 115 bytes
-rw-r--r--default_images/res/commandimagelist/sch_outlinedown.pngbin0 -> 115 bytes
-rw-r--r--default_images/res/commandimagelist/sch_outlineexpand.pngbin0 -> 110 bytes
-rw-r--r--default_images/res/commandimagelist/sch_outlineexpandall.pngbin0 -> 111 bytes
-rw-r--r--default_images/res/commandimagelist/sch_outlinefont.pngbin0 -> 143 bytes
-rw-r--r--default_images/res/commandimagelist/sch_outlineformat.pngbin0 -> 166 bytes
-rw-r--r--default_images/res/commandimagelist/sch_outlineleft.pngbin0 -> 113 bytes
-rw-r--r--default_images/res/commandimagelist/sch_outlineright.pngbin0 -> 111 bytes
-rw-r--r--default_images/res/commandimagelist/sch_outlineup.pngbin0 -> 114 bytes
-rw-r--r--default_images/res/commandimagelist/sch_overline.pngbin0 -> 177 bytes
-rw-r--r--default_images/res/commandimagelist/sch_pagedown.pngbin0 -> 158 bytes
-rw-r--r--default_images/res/commandimagelist/sch_pageup.pngbin0 -> 159 bytes
-rw-r--r--default_images/res/commandimagelist/sch_paragraphdialog.pngbin0 -> 143 bytes
-rw-r--r--default_images/res/commandimagelist/sch_paralefttoright.pngbin0 -> 130 bytes
-rw-r--r--default_images/res/commandimagelist/sch_pararighttoleft.pngbin0 -> 127 bytes
-rw-r--r--default_images/res/commandimagelist/sch_paraspacedecrease.pngbin0 -> 113 bytes
-rw-r--r--default_images/res/commandimagelist/sch_paraspaceincrease.pngbin0 -> 117 bytes
-rw-r--r--default_images/res/commandimagelist/sch_paste.pngbin0 -> 165 bytes
-rw-r--r--default_images/res/commandimagelist/sch_patternfield.pngbin0 -> 108 bytes
-rw-r--r--default_images/res/commandimagelist/sch_pickthrough.pngbin0 -> 128 bytes
-rw-r--r--default_images/res/commandimagelist/sch_pie.pngbin0 -> 135 bytes
-rw-r--r--default_images/res/commandimagelist/sch_pie_unfilled.pngbin0 -> 121 bytes
-rw-r--r--default_images/res/commandimagelist/sch_playmacro.pngbin0 -> 122 bytes
-rw-r--r--default_images/res/commandimagelist/sch_pluginsactive.pngbin0 -> 138 bytes
-rw-r--r--default_images/res/commandimagelist/sch_polygon.pngbin0 -> 141 bytes
-rw-r--r--default_images/res/commandimagelist/sch_polygon_diagonal.pngbin0 -> 102 bytes
-rw-r--r--default_images/res/commandimagelist/sch_polygon_diagonal_unfilled.pngbin0 -> 264 bytes
-rw-r--r--default_images/res/commandimagelist/sch_polygon_unfilled.pngbin0 -> 129 bytes
-rw-r--r--default_images/res/commandimagelist/sch_presentation.pngbin0 -> 140 bytes
-rw-r--r--default_images/res/commandimagelist/sch_presentationlayout.pngbin0 -> 150 bytes
-rw-r--r--default_images/res/commandimagelist/sch_preview.pngbin0 -> 123 bytes
-rw-r--r--default_images/res/commandimagelist/sch_previewprintoptions.pngbin0 -> 164 bytes
-rw-r--r--default_images/res/commandimagelist/sch_previewzoom.pngbin0 -> 132 bytes
-rwxr-xr-xdefault_images/res/commandimagelist/sch_previousannotation.pngbin0 -> 3647 bytes
-rw-r--r--default_images/res/commandimagelist/sch_previouspage.pngbin0 -> 159 bytes
-rw-r--r--default_images/res/commandimagelist/sch_prevrecord.pngbin0 -> 115 bytes
-rw-r--r--default_images/res/commandimagelist/sch_print.pngbin0 -> 133 bytes
-rw-r--r--default_images/res/commandimagelist/sch_printdefault.pngbin0 -> 133 bytes
-rw-r--r--default_images/res/commandimagelist/sch_printersetup.pngbin0 -> 164 bytes
-rw-r--r--default_images/res/commandimagelist/sch_printlayout.pngbin0 -> 160 bytes
-rw-r--r--default_images/res/commandimagelist/sch_printpagepreview.pngbin0 -> 150 bytes
-rw-r--r--default_images/res/commandimagelist/sch_printpreview.pngbin0 -> 131 bytes
-rw-r--r--default_images/res/commandimagelist/sch_progressbar.pngbin0 -> 103 bytes
-rw-r--r--default_images/res/commandimagelist/sch_pushbutton.pngbin0 -> 100 bytes
-rw-r--r--default_images/res/commandimagelist/sch_quickedit.pngbin0 -> 122 bytes
-rw-r--r--default_images/res/commandimagelist/sch_quit.pngbin0 -> 131 bytes
-rw-r--r--default_images/res/commandimagelist/sch_radiobutton.pngbin0 -> 129 bytes
-rw-r--r--default_images/res/commandimagelist/sch_recsave.pngbin0 -> 139 bytes
-rw-r--r--default_images/res/commandimagelist/sch_recsearch.pngbin0 -> 128 bytes
-rw-r--r--default_images/res/commandimagelist/sch_rect.pngbin0 -> 259 bytes
-rw-r--r--default_images/res/commandimagelist/sch_rect_rounded.pngbin0 -> 107 bytes
-rw-r--r--default_images/res/commandimagelist/sch_rect_rounded_unfilled.pngbin0 -> 274 bytes
-rw-r--r--default_images/res/commandimagelist/sch_rect_unfilled.pngbin0 -> 257 bytes
-rw-r--r--default_images/res/commandimagelist/sch_rectangletoolbox.pngbin0 -> 259 bytes
-rw-r--r--default_images/res/commandimagelist/sch_recundo.pngbin0 -> 166 bytes
-rw-r--r--default_images/res/commandimagelist/sch_redo.pngbin0 -> 143 bytes
-rw-r--r--default_images/res/commandimagelist/sch_refresh.pngbin0 -> 144 bytes
-rw-r--r--default_images/res/commandimagelist/sch_refreshformcontrol.pngbin0 -> 169 bytes
-rw-r--r--default_images/res/commandimagelist/sch_rehearsetimings.pngbin0 -> 161 bytes
-rw-r--r--default_images/res/commandimagelist/sch_reload.pngbin0 -> 144 bytes
-rw-r--r--default_images/res/commandimagelist/sch_removebullets.pngbin0 -> 252 bytes
-rw-r--r--default_images/res/commandimagelist/sch_removefilter.pngbin0 -> 166 bytes
-rw-r--r--default_images/res/commandimagelist/sch_removefiltersort.pngbin0 -> 166 bytes
-rw-r--r--default_images/res/commandimagelist/sch_renamemasterpage.pngbin0 -> 162 bytes
-rw-r--r--default_images/res/commandimagelist/sch_repeat.pngbin0 -> 159 bytes
-rw-r--r--default_images/res/commandimagelist/sch_reportnavigator.pngbin0 -> 192 bytes
-rw-r--r--default_images/res/commandimagelist/sch_reverseorder.pngbin0 -> 141 bytes
-rw-r--r--default_images/res/commandimagelist/sch_rightpara.pngbin0 -> 268 bytes
-rw-r--r--default_images/res/commandimagelist/sch_rulerrows.pngbin0 -> 156 bytes
-rw-r--r--default_images/res/commandimagelist/sch_rulerrowsvertical.pngbin0 -> 162 bytes
-rw-r--r--default_images/res/commandimagelist/sch_runbasic.pngbin0 -> 130 bytes
-rw-r--r--default_images/res/commandimagelist/sch_save.pngbin0 -> 117 bytes
-rw-r--r--default_images/res/commandimagelist/sch_saveas.pngbin0 -> 123 bytes
-rw-r--r--default_images/res/commandimagelist/sch_saveastemplate.pngbin0 -> 142 bytes
-rw-r--r--default_images/res/commandimagelist/sch_savebasicas.pngbin0 -> 146 bytes
-rw-r--r--default_images/res/commandimagelist/sch_sbabrwinsert.pngbin0 -> 125 bytes
-rw-r--r--default_images/res/commandimagelist/sch_sbaexecutesql.pngbin0 -> 172 bytes
-rw-r--r--default_images/res/commandimagelist/sch_sbanativesql.pngbin0 -> 149 bytes
-rw-r--r--default_images/res/commandimagelist/sch_scaletext.pngbin0 -> 169 bytes
-rw-r--r--default_images/res/commandimagelist/sch_scrollbar.pngbin0 -> 108 bytes
-rw-r--r--default_images/res/commandimagelist/sch_searchdialog.pngbin0 -> 128 bytes
-rwxr-xr-xdefault_images/res/commandimagelist/sch_sectionalignbottom.pngbin0 -> 135 bytes
-rwxr-xr-xdefault_images/res/commandimagelist/sch_sectionalignleft.pngbin0 -> 133 bytes
-rwxr-xr-xdefault_images/res/commandimagelist/sch_sectionalignright.pngbin0 -> 131 bytes
-rwxr-xr-xdefault_images/res/commandimagelist/sch_sectionaligntop.pngbin0 -> 137 bytes
-rw-r--r--default_images/res/commandimagelist/sch_sectionshrink.pngbin0 -> 139 bytes
-rw-r--r--default_images/res/commandimagelist/sch_sectionshrinkbottom.pngbin0 -> 125 bytes
-rw-r--r--default_images/res/commandimagelist/sch_sectionshrinktop.pngbin0 -> 133 bytes
-rw-r--r--default_images/res/commandimagelist/sch_selectall.pngbin0 -> 134 bytes
-rw-r--r--default_images/res/commandimagelist/sch_selectmode.pngbin0 -> 121 bytes
-rw-r--r--default_images/res/commandimagelist/sch_selectobject.pngbin0 -> 121 bytes
-rw-r--r--default_images/res/commandimagelist/sch_selecttable.pngbin0 -> 249 bytes
-rw-r--r--default_images/res/commandimagelist/sch_sendfax.pngbin0 -> 152 bytes
-rw-r--r--default_images/res/commandimagelist/sch_sendmail.pngbin0 -> 160 bytes
-rw-r--r--default_images/res/commandimagelist/sch_sendtoback.pngbin0 -> 133 bytes
-rw-r--r--default_images/res/commandimagelist/sch_setborderstyle.pngbin0 -> 258 bytes
-rw-r--r--default_images/res/commandimagelist/sch_setdocumentproperties.pngbin0 -> 152 bytes
-rw-r--r--default_images/res/commandimagelist/sch_setobjecttobackground.pngbin0 -> 124 bytes
-rw-r--r--default_images/res/commandimagelist/sch_setobjecttoforeground.pngbin0 -> 124 bytes
-rw-r--r--default_images/res/commandimagelist/sch_setoptimalcolumnwidth.pngbin0 -> 126 bytes
-rw-r--r--default_images/res/commandimagelist/sch_setoptimalcolumnwidthdirect.pngbin0 -> 126 bytes
-rw-r--r--default_images/res/commandimagelist/sch_setoptimalrowheight.pngbin0 -> 123 bytes
-rw-r--r--default_images/res/commandimagelist/sch_shadowcursor.pngbin0 -> 135 bytes
-rw-r--r--default_images/res/commandimagelist/sch_shadowed.pngbin0 -> 152 bytes
-rw-r--r--default_images/res/commandimagelist/sch_shear.pngbin0 -> 151 bytes
-rw-r--r--default_images/res/commandimagelist/sch_shell3d.pngbin0 -> 152 bytes
-rwxr-xr-xdefault_images/res/commandimagelist/sch_showannotation.pngbin0 -> 3611 bytes
-rw-r--r--default_images/res/commandimagelist/sch_showbookview.pngbin0 -> 120 bytes
-rw-r--r--default_images/res/commandimagelist/sch_showbrowser.pngbin0 -> 162 bytes
-rw-r--r--default_images/res/commandimagelist/sch_showdatanavigator.pngbin0 -> 116 bytes
-rw-r--r--default_images/res/commandimagelist/sch_showfmexplorer.pngbin0 -> 174 bytes
-rw-r--r--default_images/res/commandimagelist/sch_showmultiplepages.pngbin0 -> 116 bytes
-rw-r--r--default_images/res/commandimagelist/sch_showpropbrowser.pngbin0 -> 162 bytes
-rw-r--r--default_images/res/commandimagelist/sch_showslide.pngbin0 -> 115 bytes
-rw-r--r--default_images/res/commandimagelist/sch_showtwopages.pngbin0 -> 123 bytes
-rw-r--r--default_images/res/commandimagelist/sch_shrink.pngbin0 -> 138 bytes
-rw-r--r--default_images/res/commandimagelist/sch_smallestheight.pngbin0 -> 129 bytes
-rw-r--r--default_images/res/commandimagelist/sch_smallestwidth.pngbin0 -> 130 bytes
-rw-r--r--default_images/res/commandimagelist/sch_snapborder.pngbin0 -> 132 bytes
-rw-r--r--default_images/res/commandimagelist/sch_snapframe.pngbin0 -> 121 bytes
-rw-r--r--default_images/res/commandimagelist/sch_snappoints.pngbin0 -> 150 bytes
-rw-r--r--default_images/res/commandimagelist/sch_solidcreate.pngbin0 -> 133 bytes
-rw-r--r--default_images/res/commandimagelist/sch_sortascending.pngbin0 -> 155 bytes
-rw-r--r--default_images/res/commandimagelist/sch_sortdescending.pngbin0 -> 160 bytes
-rw-r--r--default_images/res/commandimagelist/sch_sortdown.pngbin0 -> 160 bytes
-rw-r--r--default_images/res/commandimagelist/sch_sortup.pngbin0 -> 155 bytes
-rw-r--r--default_images/res/commandimagelist/sch_sourceview.pngbin0 -> 124 bytes
-rw-r--r--default_images/res/commandimagelist/sch_spacepara1.pngbin0 -> 266 bytes
-rw-r--r--default_images/res/commandimagelist/sch_spacepara15.pngbin0 -> 266 bytes
-rw-r--r--default_images/res/commandimagelist/sch_spacepara2.pngbin0 -> 266 bytes
-rw-r--r--default_images/res/commandimagelist/sch_spelldialog.pngbin0 -> 156 bytes
-rw-r--r--default_images/res/commandimagelist/sch_spelling.pngbin0 -> 156 bytes
-rw-r--r--default_images/res/commandimagelist/sch_spellingandgrammardialog.pngbin0 -> 156 bytes
-rw-r--r--default_images/res/commandimagelist/sch_spellonline.pngbin0 -> 125 bytes
-rw-r--r--default_images/res/commandimagelist/sch_sphere.pngbin0 -> 146 bytes
-rw-r--r--default_images/res/commandimagelist/sch_spinbutton.pngbin0 -> 110 bytes
-rw-r--r--default_images/res/commandimagelist/sch_splitcell.pngbin0 -> 121 bytes
-rw-r--r--default_images/res/commandimagelist/sch_splithorizontal.pngbin0 -> 221 bytes
-rw-r--r--default_images/res/commandimagelist/sch_splitparenthorizontal.pngbin0 -> 221 bytes
-rw-r--r--default_images/res/commandimagelist/sch_splitparentvertical.pngbin0 -> 122 bytes
-rw-r--r--default_images/res/commandimagelist/sch_splitvertical.pngbin0 -> 122 bytes
-rw-r--r--default_images/res/commandimagelist/sch_square.pngbin0 -> 262 bytes
-rw-r--r--default_images/res/commandimagelist/sch_square_rounded.pngbin0 -> 107 bytes
-rw-r--r--default_images/res/commandimagelist/sch_square_rounded_unfilled.pngbin0 -> 278 bytes
-rw-r--r--default_images/res/commandimagelist/sch_square_unfilled.pngbin0 -> 259 bytes
-rw-r--r--default_images/res/commandimagelist/sch_starchartdialog.pngbin0 -> 101 bytes
-rw-r--r--default_images/res/commandimagelist/sch_starshapes.bang.pngbin0 -> 176 bytes
-rw-r--r--default_images/res/commandimagelist/sch_starshapes.concave-star6.pngbin0 -> 154 bytes
-rw-r--r--default_images/res/commandimagelist/sch_starshapes.doorplate.pngbin0 -> 127 bytes
-rw-r--r--default_images/res/commandimagelist/sch_starshapes.horizontal-scroll.pngbin0 -> 139 bytes
-rw-r--r--default_images/res/commandimagelist/sch_starshapes.pngbin0 -> 157 bytes
-rw-r--r--default_images/res/commandimagelist/sch_starshapes.signet.pngbin0 -> 170 bytes
-rw-r--r--default_images/res/commandimagelist/sch_starshapes.star12.pngbin0 -> 176 bytes
-rw-r--r--default_images/res/commandimagelist/sch_starshapes.star24.pngbin0 -> 185 bytes
-rw-r--r--default_images/res/commandimagelist/sch_starshapes.star4.pngbin0 -> 137 bytes
-rw-r--r--default_images/res/commandimagelist/sch_starshapes.star5.pngbin0 -> 157 bytes
-rw-r--r--default_images/res/commandimagelist/sch_starshapes.star6.pngbin0 -> 147 bytes
-rw-r--r--default_images/res/commandimagelist/sch_starshapes.star8.pngbin0 -> 160 bytes
-rw-r--r--default_images/res/commandimagelist/sch_starshapes.vertical-scroll.pngbin0 -> 134 bytes
-rw-r--r--default_images/res/commandimagelist/sch_strikeout.pngbin0 -> 122 bytes
-rw-r--r--default_images/res/commandimagelist/sch_styleapply.pngbin0 -> 171 bytes
-rw-r--r--default_images/res/commandimagelist/sch_stylenewbyexample.pngbin0 -> 147 bytes
-rw-r--r--default_images/res/commandimagelist/sch_styleupdatebyexample.pngbin0 -> 150 bytes
-rw-r--r--default_images/res/commandimagelist/sch_stylewatercanmode.pngbin0 -> 171 bytes
-rw-r--r--default_images/res/commandimagelist/sch_subscript.pngbin0 -> 178 bytes
-rw-r--r--default_images/res/commandimagelist/sch_superscript.pngbin0 -> 179 bytes
-rw-r--r--default_images/res/commandimagelist/sch_switchcontroldesignmode.pngbin0 -> 167 bytes
-rw-r--r--default_images/res/commandimagelist/sch_switchxformsdesignmode.pngbin0 -> 167 bytes
-rw-r--r--default_images/res/commandimagelist/sch_symbolcatalogue.pngbin0 -> 128 bytes
-rw-r--r--default_images/res/commandimagelist/sch_symbolshapes.brace-pair.pngbin0 -> 125 bytes
-rw-r--r--default_images/res/commandimagelist/sch_symbolshapes.bracket-pair.pngbin0 -> 105 bytes
-rw-r--r--default_images/res/commandimagelist/sch_symbolshapes.cloud.pngbin0 -> 167 bytes
-rw-r--r--default_images/res/commandimagelist/sch_symbolshapes.diamond-bevel.pngbin0 -> 162 bytes
-rw-r--r--default_images/res/commandimagelist/sch_symbolshapes.flower.pngbin0 -> 166 bytes
-rw-r--r--default_images/res/commandimagelist/sch_symbolshapes.forbidden.pngbin0 -> 164 bytes
-rw-r--r--default_images/res/commandimagelist/sch_symbolshapes.heart.pngbin0 -> 168 bytes
-rw-r--r--default_images/res/commandimagelist/sch_symbolshapes.left-brace.pngbin0 -> 113 bytes
-rw-r--r--default_images/res/commandimagelist/sch_symbolshapes.left-bracket.pngbin0 -> 286 bytes
-rw-r--r--default_images/res/commandimagelist/sch_symbolshapes.lightning.pngbin0 -> 150 bytes
-rw-r--r--default_images/res/commandimagelist/sch_symbolshapes.moon.pngbin0 -> 446 bytes
-rw-r--r--default_images/res/commandimagelist/sch_symbolshapes.octagon-bevel.pngbin0 -> 160 bytes
-rw-r--r--default_images/res/commandimagelist/sch_symbolshapes.pngbin0 -> 168 bytes
-rw-r--r--default_images/res/commandimagelist/sch_symbolshapes.puzzle.pngbin0 -> 161 bytes
-rw-r--r--default_images/res/commandimagelist/sch_symbolshapes.quad-bevel.pngbin0 -> 132 bytes
-rw-r--r--default_images/res/commandimagelist/sch_symbolshapes.right-brace.pngbin0 -> 115 bytes
-rw-r--r--default_images/res/commandimagelist/sch_symbolshapes.right-bracket.pngbin0 -> 282 bytes
-rw-r--r--default_images/res/commandimagelist/sch_symbolshapes.smiley.pngbin0 -> 168 bytes
-rw-r--r--default_images/res/commandimagelist/sch_symbolshapes.sun.pngbin0 -> 175 bytes
-rw-r--r--default_images/res/commandimagelist/sch_tabdialog.pngbin0 -> 145 bytes
-rw-r--r--default_images/res/commandimagelist/sch_tabledesign.pngbin0 -> 146 bytes
-rw-r--r--default_images/res/commandimagelist/sch_tabledialog.pngbin0 -> 138 bytes
-rw-r--r--default_images/res/commandimagelist/sch_tablemodefix.pngbin0 -> 101 bytes
-rw-r--r--default_images/res/commandimagelist/sch_tablemodefixprop.pngbin0 -> 130 bytes
-rw-r--r--default_images/res/commandimagelist/sch_tablemodevariable.pngbin0 -> 121 bytes
-rw-r--r--default_images/res/commandimagelist/sch_tablesort.pngbin0 -> 143 bytes
-rw-r--r--default_images/res/commandimagelist/sch_testmode.pngbin0 -> 167 bytes
-rw-r--r--default_images/res/commandimagelist/sch_text.pngbin0 -> 104 bytes
-rw-r--r--default_images/res/commandimagelist/sch_text_marquee.pngbin0 -> 134 bytes
-rw-r--r--default_images/res/commandimagelist/sch_textdirectionlefttoright.pngbin0 -> 143 bytes
-rw-r--r--default_images/res/commandimagelist/sch_textdirectiontoptobottom.pngbin0 -> 141 bytes
-rw-r--r--default_images/res/commandimagelist/sch_textfittosizetool.pngbin0 -> 135 bytes
-rw-r--r--default_images/res/commandimagelist/sch_texttoolbox.pngbin0 -> 104 bytes
-rw-r--r--default_images/res/commandimagelist/sch_thesaurus.pngbin0 -> 139 bytes
-rw-r--r--default_images/res/commandimagelist/sch_thesaurusdialog.pngbin0 -> 139 bytes
-rw-r--r--default_images/res/commandimagelist/sch_timefield.pngbin0 -> 163 bytes
-rw-r--r--default_images/res/commandimagelist/sch_toggleanchortype.pngbin0 -> 124 bytes
-rw-r--r--default_images/res/commandimagelist/sch_toggleaxisdescr.pngbin0 -> 101 bytes
-rw-r--r--default_images/res/commandimagelist/sch_toggleaxistitle.pngbin0 -> 138 bytes
-rw-r--r--default_images/res/commandimagelist/sch_togglebreakpoint.pngbin0 -> 167 bytes
-rw-r--r--default_images/res/commandimagelist/sch_togglegridhorizontal.pngbin0 -> 264 bytes
-rw-r--r--default_images/res/commandimagelist/sch_togglegridvertical.pngbin0 -> 257 bytes
-rw-r--r--default_images/res/commandimagelist/sch_togglelegend.pngbin0 -> 116 bytes
-rw-r--r--default_images/res/commandimagelist/sch_togglemergecells.pngbin0 -> 121 bytes
-rw-r--r--default_images/res/commandimagelist/sch_toggleobjectbeziermode.pngbin0 -> 142 bytes
-rw-r--r--default_images/res/commandimagelist/sch_toggleobjectrotatemode.pngbin0 -> 132 bytes
-rw-r--r--default_images/res/commandimagelist/sch_toggletitle.pngbin0 -> 131 bytes
-rw-r--r--default_images/res/commandimagelist/sch_toolsmacroedit.pngbin0 -> 122 bytes
-rw-r--r--default_images/res/commandimagelist/sch_toolsoptions.pngbin0 -> 122 bytes
-rw-r--r--default_images/res/commandimagelist/sch_torus.pngbin0 -> 139 bytes
-rw-r--r--default_images/res/commandimagelist/sch_transformdialog.pngbin0 -> 150 bytes
-rw-r--r--default_images/res/commandimagelist/sch_underline.pngbin0 -> 124 bytes
-rw-r--r--default_images/res/commandimagelist/sch_underlinedouble.pngbin0 -> 123 bytes
-rw-r--r--default_images/res/commandimagelist/sch_undo.pngbin0 -> 150 bytes
-rw-r--r--default_images/res/commandimagelist/sch_ungroup.pngbin0 -> 128 bytes
-rw-r--r--default_images/res/commandimagelist/sch_unhainframes.pngbin0 -> 155 bytes
-rw-r--r--default_images/res/commandimagelist/sch_upsearch.pngbin0 -> 348 bytes
-rw-r--r--default_images/res/commandimagelist/sch_urlbutton.pngbin0 -> 122 bytes
-rw-r--r--default_images/res/commandimagelist/sch_usewizards.pngbin0 -> 187 bytes
-rw-r--r--default_images/res/commandimagelist/sch_verticalcaption.pngbin0 -> 126 bytes
-rw-r--r--default_images/res/commandimagelist/sch_verticaltext.pngbin0 -> 105 bytes
-rw-r--r--default_images/res/commandimagelist/sch_verticaltextfittosizetool.pngbin0 -> 131 bytes
-rw-r--r--default_images/res/commandimagelist/sch_vfixedline.pngbin0 -> 101 bytes
-rw-r--r--default_images/res/commandimagelist/sch_view100.pngbin0 -> 132 bytes
-rw-r--r--default_images/res/commandimagelist/sch_viewdatasourcebrowser.pngbin0 -> 128 bytes
-rw-r--r--default_images/res/commandimagelist/sch_viewformasgrid.pngbin0 -> 124 bytes
-rw-r--r--default_images/res/commandimagelist/sch_vscrollbar.pngbin0 -> 108 bytes
-rw-r--r--default_images/res/commandimagelist/sch_window3d.pngbin0 -> 127 bytes
-rw-r--r--default_images/res/commandimagelist/sch_wrapcontour.pngbin0 -> 125 bytes
-rw-r--r--default_images/res/commandimagelist/sch_wrapideal.pngbin0 -> 135 bytes
-rw-r--r--default_images/res/commandimagelist/sch_wrapleft.pngbin0 -> 102 bytes
-rw-r--r--default_images/res/commandimagelist/sch_wrapoff.pngbin0 -> 101 bytes
-rw-r--r--default_images/res/commandimagelist/sch_wrapon.pngbin0 -> 107 bytes
-rw-r--r--default_images/res/commandimagelist/sch_wrapright.pngbin0 -> 104 bytes
-rw-r--r--default_images/res/commandimagelist/sch_wrapthrough.pngbin0 -> 121 bytes
-rw-r--r--default_images/res/commandimagelist/sch_xlinecolor.pngbin0 -> 136 bytes
-rw-r--r--default_images/res/commandimagelist/sch_xlinestyle.pngbin0 -> 136 bytes
-rw-r--r--default_images/res/commandimagelist/sch_zoom.pngbin0 -> 132 bytes
-rw-r--r--default_images/res/commandimagelist/sch_zoom100percent.pngbin0 -> 132 bytes
-rw-r--r--default_images/res/commandimagelist/sch_zoomin.pngbin0 -> 137 bytes
-rw-r--r--default_images/res/commandimagelist/sch_zoomminus.pngbin0 -> 135 bytes
-rw-r--r--default_images/res/commandimagelist/sch_zoomnext.pngbin0 -> 158 bytes
-rw-r--r--default_images/res/commandimagelist/sch_zoomobjects.pngbin0 -> 159 bytes
-rw-r--r--default_images/res/commandimagelist/sch_zoomoptimal.pngbin0 -> 259 bytes
-rw-r--r--default_images/res/commandimagelist/sch_zoomout.pngbin0 -> 135 bytes
-rw-r--r--default_images/res/commandimagelist/sch_zoompage.pngbin0 -> 131 bytes
-rw-r--r--default_images/res/commandimagelist/sch_zoompagewidth.pngbin0 -> 162 bytes
-rw-r--r--default_images/res/commandimagelist/sch_zoompanning.pngbin0 -> 176 bytes
-rw-r--r--default_images/res/commandimagelist/sch_zoomplus.pngbin0 -> 137 bytes
-rw-r--r--default_images/res/commandimagelist/sch_zoomprevious.pngbin0 -> 157 bytes
-rw-r--r--default_images/res/commandimagelist/sch_zoomtoolbox.pngbin0 -> 132 bytes
-rw-r--r--default_images/res/commandimagelist/sk/lc_bold.pngbin0 -> 473 bytes
-rw-r--r--default_images/res/commandimagelist/sk/lc_italic.pngbin0 -> 440 bytes
-rw-r--r--default_images/res/commandimagelist/sk/lc_numberformatdecimal.pngbin0 -> 671 bytes
-rw-r--r--default_images/res/commandimagelist/sk/lc_underline.pngbin0 -> 424 bytes
-rw-r--r--default_images/res/commandimagelist/sk/lc_underlinedouble.pngbin0 -> 424 bytes
-rw-r--r--default_images/res/commandimagelist/sk/lch_bold.pngbin0 -> 146 bytes
-rw-r--r--default_images/res/commandimagelist/sk/lch_italic.pngbin0 -> 425 bytes
-rw-r--r--default_images/res/commandimagelist/sk/lch_numberformatdecimal.pngbin0 -> 145 bytes
-rw-r--r--default_images/res/commandimagelist/sk/lch_underline.pngbin0 -> 177 bytes
-rw-r--r--default_images/res/commandimagelist/sk/lch_underlinedouble.pngbin0 -> 178 bytes
-rw-r--r--default_images/res/commandimagelist/sk/sc_bold.pngbin0 -> 328 bytes
-rw-r--r--default_images/res/commandimagelist/sk/sc_italic.pngbin0 -> 304 bytes
-rw-r--r--default_images/res/commandimagelist/sk/sc_numberformatdecimal.pngbin0 -> 485 bytes
-rw-r--r--default_images/res/commandimagelist/sk/sc_underline.pngbin0 -> 341 bytes
-rw-r--r--default_images/res/commandimagelist/sk/sc_underlinedouble.pngbin0 -> 361 bytes
-rw-r--r--default_images/res/commandimagelist/sk/sch_bold.pngbin0 -> 118 bytes
-rw-r--r--default_images/res/commandimagelist/sk/sch_italic.pngbin0 -> 289 bytes
-rw-r--r--default_images/res/commandimagelist/sk/sch_numberformatdecimal.pngbin0 -> 119 bytes
-rw-r--r--default_images/res/commandimagelist/sk/sch_underline.pngbin0 -> 124 bytes
-rw-r--r--default_images/res/commandimagelist/sk/sch_underlinedouble.pngbin0 -> 123 bytes
-rw-r--r--default_images/res/commandimagelist/sl/lc_bold.pngbin0 -> 423 bytes
-rw-r--r--default_images/res/commandimagelist/sl/lc_italic.pngbin0 -> 490 bytes
-rw-r--r--default_images/res/commandimagelist/sl/lc_underline.pngbin0 -> 419 bytes
-rw-r--r--default_images/res/commandimagelist/sl/lc_underlinedouble.pngbin0 -> 516 bytes
-rw-r--r--default_images/res/commandimagelist/sl/lch_bold.pngbin0 -> 160 bytes
-rw-r--r--default_images/res/commandimagelist/sl/lch_italic.pngbin0 -> 164 bytes
-rw-r--r--default_images/res/commandimagelist/sl/lch_underline.pngbin0 -> 146 bytes
-rw-r--r--default_images/res/commandimagelist/sl/lch_underlinedouble.pngbin0 -> 145 bytes
-rw-r--r--default_images/res/commandimagelist/sl/sc_bold.pngbin0 -> 313 bytes
-rw-r--r--default_images/res/commandimagelist/sl/sc_italic.pngbin0 -> 330 bytes
-rw-r--r--default_images/res/commandimagelist/sl/sc_underline.pngbin0 -> 333 bytes
-rw-r--r--default_images/res/commandimagelist/sl/sc_underlinedouble.pngbin0 -> 408 bytes
-rw-r--r--default_images/res/commandimagelist/sl/sch_bold.pngbin0 -> 132 bytes
-rw-r--r--default_images/res/commandimagelist/sl/sch_italic.pngbin0 -> 130 bytes
-rw-r--r--default_images/res/commandimagelist/sl/sch_underline.pngbin0 -> 123 bytes
-rw-r--r--default_images/res/commandimagelist/sl/sch_underlinedouble.pngbin0 -> 121 bytes
-rw-r--r--default_images/res/commandimagelist/sv/lc_bold.pngbin0 -> 452 bytes
-rw-r--r--default_images/res/commandimagelist/sv/lc_italic.pngbin0 -> 846 bytes
-rw-r--r--default_images/res/commandimagelist/sv/lc_underline.pngbin0 -> 570 bytes
-rw-r--r--default_images/res/commandimagelist/sv/lc_underlinedouble.pngbin0 -> 560 bytes
-rw-r--r--default_images/res/commandimagelist/sv/lch_bold.pngbin0 -> 285 bytes
-rw-r--r--default_images/res/commandimagelist/sv/lch_italic.pngbin0 -> 494 bytes
-rw-r--r--default_images/res/commandimagelist/sv/lch_underline.pngbin0 -> 177 bytes
-rw-r--r--default_images/res/commandimagelist/sv/lch_underlinedouble.pngbin0 -> 178 bytes
-rw-r--r--default_images/res/commandimagelist/sv/sc_bold.pngbin0 -> 354 bytes
-rw-r--r--default_images/res/commandimagelist/sv/sc_italic.pngbin0 -> 573 bytes
-rw-r--r--default_images/res/commandimagelist/sv/sc_underline.pngbin0 -> 408 bytes
-rw-r--r--default_images/res/commandimagelist/sv/sc_underlinedouble.pngbin0 -> 425 bytes
-rw-r--r--default_images/res/commandimagelist/sv/sch_bold.pngbin0 -> 226 bytes
-rw-r--r--default_images/res/commandimagelist/sv/sch_italic.pngbin0 -> 346 bytes
-rw-r--r--default_images/res/commandimagelist/sv/sch_underline.pngbin0 -> 124 bytes
-rw-r--r--default_images/res/commandimagelist/sv/sch_underlinedouble.pngbin0 -> 123 bytes
-rw-r--r--default_images/res/commandimagelist/tr/lc_bold.pngbin0 -> 423 bytes
-rw-r--r--default_images/res/commandimagelist/tr/lc_italic.pngbin0 -> 503 bytes
-rw-r--r--default_images/res/commandimagelist/tr/lc_underline.pngbin0 -> 528 bytes
-rw-r--r--default_images/res/commandimagelist/tr/lc_underlinedouble.pngbin0 -> 652 bytes
-rw-r--r--default_images/res/commandimagelist/tr/lch_bold.pngbin0 -> 160 bytes
-rw-r--r--default_images/res/commandimagelist/tr/lch_italic.pngbin0 -> 173 bytes
-rw-r--r--default_images/res/commandimagelist/tr/lch_underline.pngbin0 -> 186 bytes
-rw-r--r--default_images/res/commandimagelist/tr/lch_underlinedouble.pngbin0 -> 184 bytes
-rw-r--r--default_images/res/commandimagelist/tr/sc_bold.pngbin0 -> 313 bytes
-rw-r--r--default_images/res/commandimagelist/tr/sc_italic.pngbin0 -> 364 bytes
-rw-r--r--default_images/res/commandimagelist/tr/sc_underline.pngbin0 -> 353 bytes
-rw-r--r--default_images/res/commandimagelist/tr/sc_underlinedouble.pngbin0 -> 472 bytes
-rw-r--r--default_images/res/commandimagelist/tr/sch_bold.pngbin0 -> 132 bytes
-rw-r--r--default_images/res/commandimagelist/tr/sch_italic.pngbin0 -> 128 bytes
-rw-r--r--default_images/res/commandimagelist/tr/sch_underline.pngbin0 -> 140 bytes
-rw-r--r--default_images/res/commandimagelist/tr/sch_underlinedouble.pngbin0 -> 140 bytes
-rw-r--r--default_images/res/commandimagelist/zh-CN/lc_bold.pngbin0 -> 473 bytes
-rw-r--r--default_images/res/commandimagelist/zh-CN/lc_italic.pngbin0 -> 440 bytes
-rw-r--r--default_images/res/commandimagelist/zh-CN/lc_underline.pngbin0 -> 424 bytes
-rw-r--r--default_images/res/commandimagelist/zh-CN/lc_underlinedouble.pngbin0 -> 424 bytes
-rw-r--r--default_images/res/commandimagelist/zh-CN/lch_bold.pngbin0 -> 146 bytes
-rw-r--r--default_images/res/commandimagelist/zh-CN/lch_italic.pngbin0 -> 425 bytes
-rw-r--r--default_images/res/commandimagelist/zh-CN/lch_underline.pngbin0 -> 177 bytes
-rw-r--r--default_images/res/commandimagelist/zh-CN/lch_underlinedouble.pngbin0 -> 178 bytes
-rw-r--r--default_images/res/commandimagelist/zh-CN/sc_bold.pngbin0 -> 328 bytes
-rw-r--r--default_images/res/commandimagelist/zh-CN/sc_italic.pngbin0 -> 304 bytes
-rw-r--r--default_images/res/commandimagelist/zh-CN/sc_underline.pngbin0 -> 341 bytes
-rw-r--r--default_images/res/commandimagelist/zh-CN/sc_underlinedouble.pngbin0 -> 361 bytes
-rw-r--r--default_images/res/commandimagelist/zh-CN/sch_bold.pngbin0 -> 118 bytes
-rw-r--r--default_images/res/commandimagelist/zh-CN/sch_italic.pngbin0 -> 289 bytes
-rw-r--r--default_images/res/commandimagelist/zh-CN/sch_underline.pngbin0 -> 124 bytes
-rw-r--r--default_images/res/commandimagelist/zh-CN/sch_underlinedouble.pngbin0 -> 123 bytes
-rw-r--r--default_images/res/commandimagelist/zh-TW/lc_bold.pngbin0 -> 473 bytes
-rw-r--r--default_images/res/commandimagelist/zh-TW/lc_italic.pngbin0 -> 440 bytes
-rw-r--r--default_images/res/commandimagelist/zh-TW/lc_underline.pngbin0 -> 424 bytes
-rw-r--r--default_images/res/commandimagelist/zh-TW/lc_underlinedouble.pngbin0 -> 424 bytes
-rw-r--r--default_images/res/commandimagelist/zh-TW/lch_bold.pngbin0 -> 146 bytes
-rw-r--r--default_images/res/commandimagelist/zh-TW/lch_italic.pngbin0 -> 425 bytes
-rw-r--r--default_images/res/commandimagelist/zh-TW/lch_underline.pngbin0 -> 177 bytes
-rw-r--r--default_images/res/commandimagelist/zh-TW/lch_underlinedouble.pngbin0 -> 178 bytes
-rw-r--r--default_images/res/commandimagelist/zh-TW/sc_bold.pngbin0 -> 328 bytes
-rw-r--r--default_images/res/commandimagelist/zh-TW/sc_italic.pngbin0 -> 304 bytes
-rw-r--r--default_images/res/commandimagelist/zh-TW/sc_underline.pngbin0 -> 341 bytes
-rw-r--r--default_images/res/commandimagelist/zh-TW/sc_underlinedouble.pngbin0 -> 361 bytes
-rw-r--r--default_images/res/commandimagelist/zh-TW/sch_bold.pngbin0 -> 118 bytes
-rw-r--r--default_images/res/commandimagelist/zh-TW/sch_underline.pngbin0 -> 124 bytes
-rw-r--r--default_images/res/commandimagelist/zh-TW/sch_underlinedouble.pngbin0 -> 123 bytes
-rw-r--r--default_images/res/component_16.pngbin0 -> 296 bytes
-rw-r--r--default_images/res/component_16_h.pngbin0 -> 101 bytes
-rw-r--r--default_images/res/cookie.pngbin0 -> 18364 bytes
-rw-r--r--default_images/res/cs/lc26648.pngbin0 -> 424 bytes
-rw-r--r--default_images/res/cs/sc10009.pngbin0 -> 328 bytes
-rw-r--r--default_images/res/cs/sch10008.pngbin0 -> 289 bytes
-rw-r--r--default_images/res/da01.pngbin0 -> 381 bytes
-rw-r--r--default_images/res/da02.pngbin0 -> 381 bytes
-rw-r--r--default_images/res/da03.pngbin0 -> 487 bytes
-rw-r--r--default_images/res/da04.pngbin0 -> 443 bytes
-rw-r--r--default_images/res/da05.pngbin0 -> 444 bytes
-rw-r--r--default_images/res/da06.pngbin0 -> 498 bytes
-rw-r--r--default_images/res/dah01.pngbin0 -> 257 bytes
-rw-r--r--default_images/res/dah02.pngbin0 -> 257 bytes
-rw-r--r--default_images/res/dah03.pngbin0 -> 111 bytes
-rw-r--r--default_images/res/dah04.pngbin0 -> 104 bytes
-rw-r--r--default_images/res/dah05.pngbin0 -> 105 bytes
-rw-r--r--default_images/res/dah06.pngbin0 -> 127 bytes
-rw-r--r--default_images/res/de/lc10008.pngbin0 -> 846 bytes
-rw-r--r--default_images/res/de/lch10014.pngbin0 -> 177 bytes
-rw-r--r--default_images/res/de/sc10009.pngbin0 -> 354 bytes
-rw-r--r--default_images/res/de/sc10014.pngbin0 -> 408 bytes
-rw-r--r--default_images/res/de/sch10014.pngbin0 -> 124 bytes
-rw-r--r--default_images/res/de/sch26648.pngbin0 -> 123 bytes
-rw-r--r--default_images/res/dialogfolder_16.pngbin0 -> 581 bytes
-rw-r--r--default_images/res/dialogfolder_16_h.pngbin0 -> 139 bytes
-rw-r--r--default_images/res/dialogfoldernot_16.pngbin0 -> 580 bytes
-rw-r--r--default_images/res/dialogfoldernot_16_h.pngbin0 -> 140 bytes
-rw-r--r--default_images/res/dir-clos.pngbin0 -> 420 bytes
-rw-r--r--default_images/res/dir-open.pngbin0 -> 760 bytes
-rw-r--r--default_images/res/empty.pngbin0 -> 124 bytes
-rw-r--r--default_images/res/empty_l.pngbin0 -> 136 bytes
-rw-r--r--default_images/res/es/lc10008.pngbin0 -> 531 bytes
-rw-r--r--default_images/res/es/lc10009.pngbin0 -> 396 bytes
-rw-r--r--default_images/res/es/lc10014.pngbin0 -> 521 bytes
-rw-r--r--default_images/res/es/lc26648.pngbin0 -> 531 bytes
-rw-r--r--default_images/res/es/lch10008.pngbin0 -> 489 bytes
-rw-r--r--default_images/res/es/lch10009.pngbin0 -> 130 bytes
-rw-r--r--default_images/res/es/lch10014.pngbin0 -> 145 bytes
-rw-r--r--default_images/res/es/lch26648.pngbin0 -> 144 bytes
-rw-r--r--default_images/res/es/sc10008.pngbin0 -> 368 bytes
-rw-r--r--default_images/res/es/sc10009.pngbin0 -> 296 bytes
-rw-r--r--default_images/res/es/sc10014.pngbin0 -> 386 bytes
-rw-r--r--default_images/res/es/sc26648.pngbin0 -> 394 bytes
-rw-r--r--default_images/res/es/sch10008.pngbin0 -> 339 bytes
-rw-r--r--default_images/res/es/sch10009.pngbin0 -> 105 bytes
-rw-r--r--default_images/res/es/sch10014.pngbin0 -> 118 bytes
-rw-r--r--default_images/res/es/sch26648.pngbin0 -> 120 bytes
-rw-r--r--default_images/res/extension_plus_26.pngbin0 -> 1117 bytes
-rw-r--r--default_images/res/extension_plus_32.pngbin0 -> 1298 bytes
-rw-r--r--default_images/res/fileopen.pngbin0 -> 401 bytes
-rw-r--r--default_images/res/fileopen_hc.pngbin0 -> 108 bytes
-rw-r--r--default_images/res/foldercl.pngbin0 -> 421 bytes
-rw-r--r--default_images/res/foldercl_h.pngbin0 -> 104 bytes
-rw-r--r--default_images/res/folderop.pngbin0 -> 520 bytes
-rw-r--r--default_images/res/folderop_h.pngbin0 -> 124 bytes
-rw-r--r--default_images/res/fp010.pngbin0 -> 605 bytes
-rw-r--r--default_images/res/fp015.pngbin0 -> 663 bytes
-rw-r--r--default_images/res/fph010.pngbin0 -> 137 bytes
-rw-r--r--default_images/res/fph015.pngbin0 -> 125 bytes
-rw-r--r--default_images/res/fr/lc10008.pngbin0 -> 440 bytes
-rw-r--r--default_images/res/fr/lc10009.pngbin0 -> 516 bytes
-rw-r--r--default_images/res/fr/lc10014.pngbin0 -> 521 bytes
-rw-r--r--default_images/res/fr/lc26648.pngbin0 -> 531 bytes
-rw-r--r--default_images/res/fr/lch10008.pngbin0 -> 425 bytes
-rw-r--r--default_images/res/fr/lch10009.pngbin0 -> 129 bytes
-rw-r--r--default_images/res/fr/lch10014.pngbin0 -> 145 bytes
-rw-r--r--default_images/res/fr/lch26648.pngbin0 -> 144 bytes
-rw-r--r--default_images/res/fr/sc10008.pngbin0 -> 304 bytes
-rw-r--r--default_images/res/fr/sc10009.pngbin0 -> 366 bytes
-rw-r--r--default_images/res/fr/sc10014.pngbin0 -> 386 bytes
-rw-r--r--default_images/res/fr/sc26648.pngbin0 -> 394 bytes
-rw-r--r--default_images/res/fr/sch10008.pngbin0 -> 289 bytes
-rw-r--r--default_images/res/fr/sch10009.pngbin0 -> 121 bytes
-rw-r--r--default_images/res/fr/sch10014.pngbin0 -> 118 bytes
-rw-r--r--default_images/res/fr/sch26648.pngbin0 -> 120 bytes
-rw-r--r--default_images/res/fwthcirc.pngbin0 -> 208 bytes
-rw-r--r--default_images/res/fwthcirc_h.pngbin0 -> 206 bytes
-rw-r--r--default_images/res/grafikde.pngbin0 -> 733 bytes
-rw-r--r--default_images/res/grafikde_h.pngbin0 -> 184 bytes
-rw-r--r--default_images/res/grafikei.pngbin0 -> 675 bytes
-rw-r--r--default_images/res/grafikei_h.pngbin0 -> 135 bytes
-rw-r--r--default_images/res/harddisk_16.pngbin0 -> 335 bytes
-rw-r--r--default_images/res/harddisk_16_h.pngbin0 -> 131 bytes
-rw-r--r--default_images/res/helpimg/area1.pngbin0 -> 3720 bytes
-rw-r--r--default_images/res/helpimg/area2.pngbin0 -> 3700 bytes
-rw-r--r--default_images/res/helpimg/bg/calcein.pngbin0 -> 538 bytes
-rw-r--r--default_images/res/helpimg/bg/feldalle.pngbin0 -> 1752 bytes
-rw-r--r--default_images/res/helpimg/bg/feldbrei.pngbin0 -> 455 bytes
-rw-r--r--default_images/res/helpimg/bg/feldcolo.pngbin0 -> 833 bytes
-rw-r--r--default_images/res/helpimg/bg/names_as_addressing.pngbin0 -> 5852 bytes
-rw-r--r--default_images/res/helpimg/bg/objbitmp.pngbin0 -> 3523 bytes
-rw-r--r--default_images/res/helpimg/bg/prinzoom.pngbin0 -> 1395 bytes
-rw-r--r--default_images/res/helpimg/bg/rechenlt.pngbin0 -> 585 bytes
-rw-r--r--default_images/res/helpimg/bg/sheettabs.pngbin0 -> 2103 bytes
-rw-r--r--default_images/res/helpimg/bg/swh00055.pngbin0 -> 595 bytes
-rw-r--r--default_images/res/helpimg/bg/swh00056.pngbin0 -> 519 bytes
-rw-r--r--default_images/res/helpimg/bg/swh00117.pngbin0 -> 1109 bytes
-rw-r--r--default_images/res/helpimg/bg/zellvor.pngbin0 -> 634 bytes
-rw-r--r--default_images/res/helpimg/border_ca_1.pngbin0 -> 740 bytes
-rw-r--r--default_images/res/helpimg/border_ca_2.pngbin0 -> 665 bytes
-rw-r--r--default_images/res/helpimg/border_ca_3.pngbin0 -> 701 bytes
-rw-r--r--default_images/res/helpimg/border_ca_4.pngbin0 -> 605 bytes
-rw-r--r--default_images/res/helpimg/border_ca_5.pngbin0 -> 200 bytes
-rw-r--r--default_images/res/helpimg/border_ca_6.pngbin0 -> 503 bytes
-rw-r--r--default_images/res/helpimg/border_ca_7.pngbin0 -> 507 bytes
-rw-r--r--default_images/res/helpimg/border_ca_8.pngbin0 -> 546 bytes
-rw-r--r--default_images/res/helpimg/border_ca_9.pngbin0 -> 679 bytes
-rw-r--r--default_images/res/helpimg/border_ca_gray.pngbin0 -> 525 bytes
-rw-r--r--default_images/res/helpimg/border_ca_white.pngbin0 -> 518 bytes
-rw-r--r--default_images/res/helpimg/border_wr_1.pngbin0 -> 765 bytes
-rw-r--r--default_images/res/helpimg/border_wr_2.pngbin0 -> 799 bytes
-rw-r--r--default_images/res/helpimg/border_wr_3.pngbin0 -> 856 bytes
-rw-r--r--default_images/res/helpimg/border_wr_4.pngbin0 -> 858 bytes
-rw-r--r--default_images/res/helpimg/border_wr_5.pngbin0 -> 869 bytes
-rw-r--r--default_images/res/helpimg/border_wr_6.pngbin0 -> 370 bytes
-rw-r--r--default_images/res/helpimg/border_wr_7.pngbin0 -> 372 bytes
-rw-r--r--default_images/res/helpimg/border_wr_8.pngbin0 -> 368 bytes
-rw-r--r--default_images/res/helpimg/border_wr_9.pngbin0 -> 319 bytes
-rw-r--r--default_images/res/helpimg/calcein.pngbin0 -> 538 bytes
-rw-r--r--default_images/res/helpimg/calcnav.pngbin0 -> 656 bytes
-rw-r--r--default_images/res/helpimg/copydata.pngbin0 -> 167 bytes
-rw-r--r--default_images/res/helpimg/cs/calcein.pngbin0 -> 538 bytes
-rw-r--r--default_images/res/helpimg/cs/feldalle.pngbin0 -> 752 bytes
-rw-r--r--default_images/res/helpimg/cs/feldbrei.pngbin0 -> 458 bytes
-rw-r--r--default_images/res/helpimg/cs/feldcolo.pngbin0 -> 575 bytes
-rw-r--r--default_images/res/helpimg/cs/names_as_addressing.pngbin0 -> 1920 bytes
-rw-r--r--default_images/res/helpimg/cs/rechenlt.pngbin0 -> 1006 bytes
-rw-r--r--default_images/res/helpimg/cs/sheettabs.pngbin0 -> 1397 bytes
-rw-r--r--default_images/res/helpimg/cs/swh00055.pngbin0 -> 650 bytes
-rw-r--r--default_images/res/helpimg/cs/swh00056.pngbin0 -> 518 bytes
-rw-r--r--default_images/res/helpimg/cs/swh00117.pngbin0 -> 723 bytes
-rw-r--r--default_images/res/helpimg/cs/zellvor.pngbin0 -> 585 bytes
-rw-r--r--default_images/res/helpimg/da/calcein.pngbin0 -> 538 bytes
-rw-r--r--default_images/res/helpimg/da/feldalle.pngbin0 -> 763 bytes
-rw-r--r--default_images/res/helpimg/da/feldbrei.pngbin0 -> 458 bytes
-rw-r--r--default_images/res/helpimg/da/feldcolo.pngbin0 -> 534 bytes
-rw-r--r--default_images/res/helpimg/da/names_as_addressing.pngbin0 -> 1907 bytes
-rw-r--r--default_images/res/helpimg/da/rechenlt.pngbin0 -> 567 bytes
-rw-r--r--default_images/res/helpimg/da/sheettabs.pngbin0 -> 1404 bytes
-rw-r--r--default_images/res/helpimg/da/swh00055.pngbin0 -> 593 bytes
-rw-r--r--default_images/res/helpimg/da/swh00056.pngbin0 -> 519 bytes
-rw-r--r--default_images/res/helpimg/da/swh00117.pngbin0 -> 689 bytes
-rw-r--r--default_images/res/helpimg/da/zellvor.pngbin0 -> 577 bytes
-rw-r--r--default_images/res/helpimg/de/calcein.pngbin0 -> 538 bytes
-rw-r--r--default_images/res/helpimg/de/feldalle.pngbin0 -> 1090 bytes
-rw-r--r--default_images/res/helpimg/de/feldbrei.pngbin0 -> 440 bytes
-rw-r--r--default_images/res/helpimg/de/feldcolo.pngbin0 -> 722 bytes
-rw-r--r--default_images/res/helpimg/de/names_as_addressing.pngbin0 -> 1914 bytes
-rw-r--r--default_images/res/helpimg/de/objbitmp.pngbin0 -> 4618 bytes
-rw-r--r--default_images/res/helpimg/de/prinzoom.pngbin0 -> 1571 bytes
-rw-r--r--default_images/res/helpimg/de/rechenlt.pngbin0 -> 531 bytes
-rw-r--r--default_images/res/helpimg/de/sheettabs.pngbin0 -> 1446 bytes
-rw-r--r--default_images/res/helpimg/de/swh00055.pngbin0 -> 591 bytes
-rw-r--r--default_images/res/helpimg/de/swh00056.pngbin0 -> 518 bytes
-rw-r--r--default_images/res/helpimg/de/swh00117.pngbin0 -> 910 bytes
-rw-r--r--default_images/res/helpimg/de/zellvor.pngbin0 -> 738 bytes
-rw-r--r--default_images/res/helpimg/diatrans.pngbin0 -> 98 bytes
-rw-r--r--default_images/res/helpimg/dircurscent.pngbin0 -> 151 bytes
-rw-r--r--default_images/res/helpimg/dircursleft.pngbin0 -> 130 bytes
-rw-r--r--default_images/res/helpimg/dircursright.pngbin0 -> 126 bytes
-rw-r--r--default_images/res/helpimg/ein.pngbin0 -> 124 bytes
-rw-r--r--default_images/res/helpimg/en-GB/calcein.pngbin0 -> 538 bytes
-rw-r--r--default_images/res/helpimg/en-GB/feldalle.pngbin0 -> 346 bytes
-rw-r--r--default_images/res/helpimg/en-GB/feldbrei.pngbin0 -> 440 bytes
-rw-r--r--default_images/res/helpimg/en-GB/feldcolo.pngbin0 -> 557 bytes
-rw-r--r--default_images/res/helpimg/en-GB/names_as_addressing.pngbin0 -> 2959 bytes
-rw-r--r--default_images/res/helpimg/en-GB/rechenlt.pngbin0 -> 585 bytes
-rw-r--r--default_images/res/helpimg/en-GB/sheettabs.pngbin0 -> 1414 bytes
-rw-r--r--default_images/res/helpimg/en-GB/swh00055.pngbin0 -> 596 bytes
-rw-r--r--default_images/res/helpimg/en-GB/swh00056.pngbin0 -> 518 bytes
-rw-r--r--default_images/res/helpimg/en-GB/swh00117.pngbin0 -> 891 bytes
-rw-r--r--default_images/res/helpimg/en-GB/zellvor.pngbin0 -> 572 bytes
-rw-r--r--default_images/res/helpimg/es/calcein.pngbin0 -> 538 bytes
-rw-r--r--default_images/res/helpimg/es/feldalle.pngbin0 -> 1221 bytes
-rw-r--r--default_images/res/helpimg/es/feldbrei.pngbin0 -> 440 bytes
-rw-r--r--default_images/res/helpimg/es/feldcolo.pngbin0 -> 645 bytes
-rw-r--r--default_images/res/helpimg/es/names_as_addressing.pngbin0 -> 3180 bytes
-rw-r--r--default_images/res/helpimg/es/objbitmp.pngbin0 -> 2540 bytes
-rw-r--r--default_images/res/helpimg/es/prinzoom.pngbin0 -> 1476 bytes
-rw-r--r--default_images/res/helpimg/es/rechenlt.pngbin0 -> 950 bytes
-rw-r--r--default_images/res/helpimg/es/sheettabs.pngbin0 -> 1868 bytes
-rw-r--r--default_images/res/helpimg/es/swh00055.pngbin0 -> 592 bytes
-rw-r--r--default_images/res/helpimg/es/swh00056.pngbin0 -> 518 bytes
-rw-r--r--default_images/res/helpimg/es/swh00117.pngbin0 -> 829 bytes
-rw-r--r--default_images/res/helpimg/es/zellvor.pngbin0 -> 761 bytes
-rw-r--r--default_images/res/helpimg/et/calcein.pngbin0 -> 538 bytes
-rwxr-xr-xdefault_images/res/helpimg/et/feldalle.pngbin0 -> 1024 bytes
-rw-r--r--default_images/res/helpimg/et/feldbrei.pngbin0 -> 457 bytes
-rwxr-xr-xdefault_images/res/helpimg/et/feldcolo.pngbin0 -> 639 bytes
-rwxr-xr-xdefault_images/res/helpimg/et/names_as_addressing.pngbin0 -> 3251 bytes
-rw-r--r--default_images/res/helpimg/et/rechenlt.pngbin0 -> 1006 bytes
-rwxr-xr-xdefault_images/res/helpimg/et/sheettabs.pngbin0 -> 1809 bytes
-rw-r--r--default_images/res/helpimg/et/swh00055.pngbin0 -> 650 bytes
-rw-r--r--default_images/res/helpimg/et/swh00056.pngbin0 -> 518 bytes
-rwxr-xr-xdefault_images/res/helpimg/et/swh00117.pngbin0 -> 835 bytes
-rwxr-xr-xdefault_images/res/helpimg/et/zellvor.pngbin0 -> 695 bytes
-rw-r--r--default_images/res/helpimg/feldalle.pngbin0 -> 747 bytes
-rw-r--r--default_images/res/helpimg/feldbrei.pngbin0 -> 440 bytes
-rw-r--r--default_images/res/helpimg/feldcolo.pngbin0 -> 556 bytes
-rw-r--r--default_images/res/helpimg/feldurch.pngbin0 -> 486 bytes
-rw-r--r--default_images/res/helpimg/formschn.pngbin0 -> 601 bytes
-rw-r--r--default_images/res/helpimg/formsubt.pngbin0 -> 606 bytes
-rw-r--r--default_images/res/helpimg/formvers.pngbin0 -> 739 bytes
-rw-r--r--default_images/res/helpimg/fr/calcein.pngbin0 -> 538 bytes
-rw-r--r--default_images/res/helpimg/fr/feldalle.pngbin0 -> 1108 bytes
-rw-r--r--default_images/res/helpimg/fr/feldbrei.pngbin0 -> 521 bytes
-rw-r--r--default_images/res/helpimg/fr/feldcolo.pngbin0 -> 605 bytes
-rw-r--r--default_images/res/helpimg/fr/names_as_addressing.pngbin0 -> 2991 bytes
-rw-r--r--default_images/res/helpimg/fr/objbitmp.pngbin0 -> 2315 bytes
-rw-r--r--default_images/res/helpimg/fr/prinzoom.pngbin0 -> 1395 bytes
-rw-r--r--default_images/res/helpimg/fr/rechenlt.pngbin0 -> 876 bytes
-rw-r--r--default_images/res/helpimg/fr/sheettabs.pngbin0 -> 1869 bytes
-rw-r--r--default_images/res/helpimg/fr/swh00055.pngbin0 -> 592 bytes
-rw-r--r--default_images/res/helpimg/fr/swh00056.pngbin0 -> 519 bytes
-rw-r--r--default_images/res/helpimg/fr/swh00117.pngbin0 -> 826 bytes
-rw-r--r--default_images/res/helpimg/fr/zellvor.pngbin0 -> 679 bytes
-rw-r--r--default_images/res/helpimg/hand01.pngbin0 -> 143 bytes
-rw-r--r--default_images/res/helpimg/hsizebar.pngbin0 -> 95 bytes
-rw-r--r--default_images/res/helpimg/hu/calcein.pngbin0 -> 543 bytes
-rw-r--r--default_images/res/helpimg/hu/feldalle.pngbin0 -> 820 bytes
-rw-r--r--default_images/res/helpimg/hu/feldbrei.pngbin0 -> 453 bytes
-rw-r--r--default_images/res/helpimg/hu/feldcolo.pngbin0 -> 571 bytes
-rw-r--r--default_images/res/helpimg/hu/names_as_addressing.pngbin0 -> 1802 bytes
-rw-r--r--default_images/res/helpimg/hu/rechenlt.pngbin0 -> 643 bytes
-rw-r--r--default_images/res/helpimg/hu/sheettabs.pngbin0 -> 2168 bytes
-rw-r--r--default_images/res/helpimg/hu/swh00055.pngbin0 -> 593 bytes
-rw-r--r--default_images/res/helpimg/hu/swh00056.pngbin0 -> 518 bytes
-rw-r--r--default_images/res/helpimg/hu/swh00117.pngbin0 -> 709 bytes
-rw-r--r--default_images/res/helpimg/hu/zellvor.pngbin0 -> 644 bytes
-rw-r--r--default_images/res/helpimg/it/calcein.pngbin0 -> 538 bytes
-rw-r--r--default_images/res/helpimg/it/feldalle.pngbin0 -> 1724 bytes
-rw-r--r--default_images/res/helpimg/it/feldbrei.pngbin0 -> 603 bytes
-rw-r--r--default_images/res/helpimg/it/feldcolo.pngbin0 -> 760 bytes
-rw-r--r--default_images/res/helpimg/it/names_as_addressing.pngbin0 -> 3177 bytes
-rw-r--r--default_images/res/helpimg/it/objbitmp.pngbin0 -> 3209 bytes
-rw-r--r--default_images/res/helpimg/it/prinzoom.pngbin0 -> 1395 bytes
-rw-r--r--default_images/res/helpimg/it/rechenlt.pngbin0 -> 917 bytes
-rw-r--r--default_images/res/helpimg/it/sheettabs.pngbin0 -> 1955 bytes
-rw-r--r--default_images/res/helpimg/it/swh00055.pngbin0 -> 593 bytes
-rw-r--r--default_images/res/helpimg/it/swh00056.pngbin0 -> 518 bytes
-rw-r--r--default_images/res/helpimg/it/swh00117.pngbin0 -> 1032 bytes
-rw-r--r--default_images/res/helpimg/it/zellvor.pngbin0 -> 844 bytes
-rw-r--r--default_images/res/helpimg/ja/calcein.pngbin0 -> 527 bytes
-rw-r--r--default_images/res/helpimg/ja/feldalle.pngbin0 -> 767 bytes
-rw-r--r--default_images/res/helpimg/ja/feldbrei.pngbin0 -> 445 bytes
-rw-r--r--default_images/res/helpimg/ja/feldcolo.pngbin0 -> 528 bytes
-rw-r--r--default_images/res/helpimg/ja/names_as_addressing.pngbin0 -> 1749 bytes
-rw-r--r--default_images/res/helpimg/ja/objbitmp.pngbin0 -> 4218 bytes
-rw-r--r--default_images/res/helpimg/ja/prinzoom.pngbin0 -> 1273 bytes
-rw-r--r--default_images/res/helpimg/ja/rechenlt.pngbin0 -> 607 bytes
-rw-r--r--default_images/res/helpimg/ja/sheettabs.pngbin0 -> 1420 bytes
-rw-r--r--default_images/res/helpimg/ja/swh00055.pngbin0 -> 646 bytes
-rw-r--r--default_images/res/helpimg/ja/swh00056.pngbin0 -> 510 bytes
-rw-r--r--default_images/res/helpimg/ja/swh00117.pngbin0 -> 679 bytes
-rw-r--r--default_images/res/helpimg/ja/zellvor.pngbin0 -> 575 bytes
-rw-r--r--default_images/res/helpimg/km/calcein.pngbin0 -> 538 bytes
-rw-r--r--default_images/res/helpimg/km/feldalle.pngbin0 -> 748 bytes
-rw-r--r--default_images/res/helpimg/km/feldbrei.pngbin0 -> 441 bytes
-rw-r--r--default_images/res/helpimg/km/feldcolo.pngbin0 -> 557 bytes
-rw-r--r--default_images/res/helpimg/km/names_as_addressing.pngbin0 -> 2137 bytes
-rw-r--r--default_images/res/helpimg/km/rechenlt.pngbin0 -> 607 bytes
-rw-r--r--default_images/res/helpimg/km/sheettabs.pngbin0 -> 1431 bytes
-rw-r--r--default_images/res/helpimg/km/swh00055.pngbin0 -> 592 bytes
-rw-r--r--default_images/res/helpimg/km/swh00056.pngbin0 -> 518 bytes
-rw-r--r--default_images/res/helpimg/km/swh00117.pngbin0 -> 714 bytes
-rw-r--r--default_images/res/helpimg/km/zellvor.pngbin0 -> 614 bytes
-rw-r--r--default_images/res/helpimg/ko/calcein.pngbin0 -> 543 bytes
-rw-r--r--default_images/res/helpimg/ko/feldalle.pngbin0 -> 784 bytes
-rw-r--r--default_images/res/helpimg/ko/feldbrei.pngbin0 -> 457 bytes
-rw-r--r--default_images/res/helpimg/ko/feldcolo.pngbin0 -> 587 bytes
-rw-r--r--default_images/res/helpimg/ko/names_as_addressing.pngbin0 -> 2143 bytes
-rw-r--r--default_images/res/helpimg/ko/objbitmp.pngbin0 -> 3775 bytes
-rw-r--r--default_images/res/helpimg/ko/prinzoom.pngbin0 -> 1171 bytes
-rw-r--r--default_images/res/helpimg/ko/rechenlt.pngbin0 -> 583 bytes
-rw-r--r--default_images/res/helpimg/ko/sheettabs.pngbin0 -> 1433 bytes
-rw-r--r--default_images/res/helpimg/ko/swh00055.pngbin0 -> 619 bytes
-rw-r--r--default_images/res/helpimg/ko/swh00056.pngbin0 -> 529 bytes
-rw-r--r--default_images/res/helpimg/ko/swh00117.pngbin0 -> 739 bytes
-rw-r--r--default_images/res/helpimg/ko/zellvor.pngbin0 -> 571 bytes
-rw-r--r--default_images/res/helpimg/kombi1.pngbin0 -> 1595 bytes
-rwxr-xr-xdefault_images/res/helpimg/left.pngbin0 -> 442 bytes
-rwxr-xr-xdefault_images/res/helpimg/left2.pngbin0 -> 446 bytes
-rw-r--r--default_images/res/helpimg/linkdata.pngbin0 -> 167 bytes
-rw-r--r--default_images/res/helpimg/linleft.pngbin0 -> 155 bytes
-rw-r--r--default_images/res/helpimg/linright.pngbin0 -> 146 bytes
-rw-r--r--default_images/res/helpimg/movedata.pngbin0 -> 153 bytes
-rw-r--r--default_images/res/helpimg/names_as_addressing.pngbin0 -> 2959 bytes
-rw-r--r--default_images/res/helpimg/note.pngbin0 -> 1504 bytes
-rwxr-xr-xdefault_images/res/helpimg/note_small.pngbin0 -> 615 bytes
-rwxr-xr-xdefault_images/res/helpimg/pl/calcein.pngbin0 -> 543 bytes
-rwxr-xr-xdefault_images/res/helpimg/pl/feldalle.pngbin0 -> 983 bytes
-rwxr-xr-xdefault_images/res/helpimg/pl/feldbrei.pngbin0 -> 485 bytes
-rwxr-xr-xdefault_images/res/helpimg/pl/feldcolo.pngbin0 -> 597 bytes
-rwxr-xr-xdefault_images/res/helpimg/pl/names_as_addressing.pngbin0 -> 2243 bytes
-rwxr-xr-xdefault_images/res/helpimg/pl/objbitmp.pngbin0 -> 3325 bytes
-rwxr-xr-xdefault_images/res/helpimg/pl/prinzoom.pngbin0 -> 1585 bytes
-rwxr-xr-xdefault_images/res/helpimg/pl/rechenlt.pngbin0 -> 654 bytes
-rwxr-xr-xdefault_images/res/helpimg/pl/sheettabs.pngbin0 -> 1439 bytes
-rwxr-xr-xdefault_images/res/helpimg/pl/swh00055.pngbin0 -> 592 bytes
-rwxr-xr-xdefault_images/res/helpimg/pl/swh00056.pngbin0 -> 518 bytes
-rwxr-xr-xdefault_images/res/helpimg/pl/swh00117.pngbin0 -> 819 bytes
-rwxr-xr-xdefault_images/res/helpimg/pl/zellvor.pngbin0 -> 599 bytes
-rw-r--r--default_images/res/helpimg/pt-BR/calcein.pngbin0 -> 538 bytes
-rw-r--r--default_images/res/helpimg/pt-BR/feldalle.pngbin0 -> 483 bytes
-rw-r--r--default_images/res/helpimg/pt-BR/feldbrei.pngbin0 -> 222 bytes
-rw-r--r--default_images/res/helpimg/pt-BR/feldcolo.pngbin0 -> 461 bytes
-rw-r--r--default_images/res/helpimg/pt-BR/names_as_addressing.pngbin0 -> 1567 bytes
-rw-r--r--default_images/res/helpimg/pt-BR/prinzoom.pngbin0 -> 1486 bytes
-rw-r--r--default_images/res/helpimg/pt-BR/rechenlt.pngbin0 -> 603 bytes
-rw-r--r--default_images/res/helpimg/pt-BR/sheettabs.pngbin0 -> 1405 bytes
-rw-r--r--default_images/res/helpimg/pt-BR/swh00055.pngbin0 -> 595 bytes
-rw-r--r--default_images/res/helpimg/pt-BR/swh00056.pngbin0 -> 519 bytes
-rw-r--r--default_images/res/helpimg/pt-BR/swh00117.pngbin0 -> 811 bytes
-rw-r--r--default_images/res/helpimg/pt-BR/zellvor.pngbin0 -> 482 bytes
-rw-r--r--default_images/res/helpimg/pt/calcein.pngbin0 -> 538 bytes
-rw-r--r--default_images/res/helpimg/pt/feldalle.pngbin0 -> 483 bytes
-rw-r--r--default_images/res/helpimg/pt/feldbrei.pngbin0 -> 222 bytes
-rw-r--r--default_images/res/helpimg/pt/feldcolo.pngbin0 -> 461 bytes
-rw-r--r--default_images/res/helpimg/pt/names_as_addressing.pngbin0 -> 1567 bytes
-rw-r--r--default_images/res/helpimg/pt/prinzoom.pngbin0 -> 1486 bytes
-rw-r--r--default_images/res/helpimg/pt/rechenlt.pngbin0 -> 603 bytes
-rw-r--r--default_images/res/helpimg/pt/sheettabs.pngbin0 -> 1405 bytes
-rw-r--r--default_images/res/helpimg/pt/swh00055.pngbin0 -> 595 bytes
-rw-r--r--default_images/res/helpimg/pt/swh00056.pngbin0 -> 519 bytes
-rw-r--r--default_images/res/helpimg/pt/swh00117.pngbin0 -> 811 bytes
-rw-r--r--default_images/res/helpimg/pt/zellvor.pngbin0 -> 482 bytes
-rw-r--r--default_images/res/helpimg/rechenlt.pngbin0 -> 585 bytes
-rw-r--r--default_images/res/helpimg/refhand.pngbin0 -> 127 bytes
-rwxr-xr-xdefault_images/res/helpimg/right.pngbin0 -> 433 bytes
-rwxr-xr-xdefault_images/res/helpimg/right2.pngbin0 -> 449 bytes
-rw-r--r--default_images/res/helpimg/rotieren.pngbin0 -> 647 bytes
-rw-r--r--default_images/res/helpimg/sheettabs.pngbin0 -> 1415 bytes
-rwxr-xr-xdefault_images/res/helpimg/sistop.pngbin0 -> 157 bytes
-rw-r--r--default_images/res/helpimg/sk/calcein.pngbin0 -> 538 bytes
-rw-r--r--default_images/res/helpimg/sk/feldalle.pngbin0 -> 765 bytes
-rw-r--r--default_images/res/helpimg/sk/feldbrei.pngbin0 -> 457 bytes
-rw-r--r--default_images/res/helpimg/sk/feldcolo.pngbin0 -> 574 bytes
-rw-r--r--default_images/res/helpimg/sk/names_as_addressing.pngbin0 -> 1929 bytes
-rw-r--r--default_images/res/helpimg/sk/rechenlt.pngbin0 -> 1006 bytes
-rw-r--r--default_images/res/helpimg/sk/sheettabs.pngbin0 -> 1397 bytes
-rw-r--r--default_images/res/helpimg/sk/swh00055.pngbin0 -> 650 bytes
-rw-r--r--default_images/res/helpimg/sk/swh00056.pngbin0 -> 518 bytes
-rw-r--r--default_images/res/helpimg/sk/swh00117.pngbin0 -> 720 bytes
-rw-r--r--default_images/res/helpimg/sk/zellvor.pngbin0 -> 616 bytes
-rw-r--r--default_images/res/helpimg/sl/calcein.pngbin0 -> 538 bytes
-rw-r--r--default_images/res/helpimg/sl/feldalle.pngbin0 -> 709 bytes
-rw-r--r--default_images/res/helpimg/sl/feldbrei.pngbin0 -> 454 bytes
-rw-r--r--default_images/res/helpimg/sl/feldcolo.pngbin0 -> 548 bytes
-rw-r--r--default_images/res/helpimg/sl/names_as_addressing.pngbin0 -> 1923 bytes
-rw-r--r--default_images/res/helpimg/sl/rechenlt.pngbin0 -> 597 bytes
-rw-r--r--default_images/res/helpimg/sl/sheettabs.pngbin0 -> 2022 bytes
-rw-r--r--default_images/res/helpimg/sl/swh00055.pngbin0 -> 592 bytes
-rw-r--r--default_images/res/helpimg/sl/swh00056.pngbin0 -> 519 bytes
-rw-r--r--default_images/res/helpimg/sl/swh00117.pngbin0 -> 711 bytes
-rw-r--r--default_images/res/helpimg/sl/zellvor.pngbin0 -> 564 bytes
-rw-r--r--default_images/res/helpimg/smzb1.pngbin0 -> 985 bytes
-rw-r--r--default_images/res/helpimg/smzb10.pngbin0 -> 1249 bytes
-rw-r--r--default_images/res/helpimg/smzb2.pngbin0 -> 647 bytes
-rw-r--r--default_images/res/helpimg/smzb3.pngbin0 -> 1104 bytes
-rw-r--r--default_images/res/helpimg/smzb4.pngbin0 -> 1759 bytes
-rw-r--r--default_images/res/helpimg/smzb5.pngbin0 -> 3068 bytes
-rw-r--r--default_images/res/helpimg/smzb6.pngbin0 -> 2386 bytes
-rw-r--r--default_images/res/helpimg/smzb7.pngbin0 -> 1075 bytes
-rw-r--r--default_images/res/helpimg/smzb8.pngbin0 -> 1303 bytes
-rw-r--r--default_images/res/helpimg/smzb9.pngbin0 -> 1555 bytes
-rw-r--r--default_images/res/helpimg/sv/calcein.pngbin0 -> 538 bytes
-rw-r--r--default_images/res/helpimg/sv/feldalle.pngbin0 -> 764 bytes
-rw-r--r--default_images/res/helpimg/sv/feldbrei.pngbin0 -> 440 bytes
-rw-r--r--default_images/res/helpimg/sv/feldcolo.pngbin0 -> 552 bytes
-rw-r--r--default_images/res/helpimg/sv/names_as_addressing.pngbin0 -> 1873 bytes
-rw-r--r--default_images/res/helpimg/sv/objbitmp.pngbin0 -> 3111 bytes
-rw-r--r--default_images/res/helpimg/sv/prinzoom.pngbin0 -> 1473 bytes
-rw-r--r--default_images/res/helpimg/sv/rechenlt.pngbin0 -> 558 bytes
-rw-r--r--default_images/res/helpimg/sv/sheettabs.pngbin0 -> 1407 bytes
-rw-r--r--default_images/res/helpimg/sv/swh00055.pngbin0 -> 592 bytes
-rw-r--r--default_images/res/helpimg/sv/swh00056.pngbin0 -> 518 bytes
-rw-r--r--default_images/res/helpimg/sv/swh00117.pngbin0 -> 692 bytes
-rw-r--r--default_images/res/helpimg/sv/zellvor.pngbin0 -> 575 bytes
-rw-r--r--default_images/res/helpimg/swh00055.pngbin0 -> 595 bytes
-rw-r--r--default_images/res/helpimg/swh00056.pngbin0 -> 518 bytes
-rw-r--r--default_images/res/helpimg/swh00117.pngbin0 -> 692 bytes
-rwxr-xr-xdefault_images/res/helpimg/swh00177.pngbin0 -> 101 bytes
-rwxr-xr-xdefault_images/res/helpimg/swh00178.pngbin0 -> 115 bytes
-rwxr-xr-xdefault_images/res/helpimg/swh00179.pngbin0 -> 109 bytes
-rwxr-xr-xdefault_images/res/helpimg/swh00180.pngbin0 -> 102 bytes
-rw-r--r--default_images/res/helpimg/tip.pngbin0 -> 1761 bytes
-rwxr-xr-xdefault_images/res/helpimg/tip_small.pngbin0 -> 711 bytes
-rw-r--r--default_images/res/helpimg/tr/calcein.pngbin0 -> 538 bytes
-rw-r--r--default_images/res/helpimg/tr/feldalle.pngbin0 -> 775 bytes
-rw-r--r--default_images/res/helpimg/tr/feldbrei.pngbin0 -> 379 bytes
-rw-r--r--default_images/res/helpimg/tr/feldcolo.pngbin0 -> 388 bytes
-rw-r--r--default_images/res/helpimg/tr/names_as_addressing.pngbin0 -> 4229 bytes
-rw-r--r--default_images/res/helpimg/tr/objbitmp.pngbin0 -> 4109 bytes
-rw-r--r--default_images/res/helpimg/tr/prinzoom.pngbin0 -> 1809 bytes
-rw-r--r--default_images/res/helpimg/tr/rechenlt.pngbin0 -> 1911 bytes
-rw-r--r--default_images/res/helpimg/tr/sheettabs.pngbin0 -> 1515 bytes
-rw-r--r--default_images/res/helpimg/tr/swh00055.pngbin0 -> 596 bytes
-rw-r--r--default_images/res/helpimg/tr/swh00056.pngbin0 -> 518 bytes
-rw-r--r--default_images/res/helpimg/tr/swh00117.pngbin0 -> 561 bytes
-rw-r--r--default_images/res/helpimg/tr/zellvor.pngbin0 -> 393 bytes
-rw-r--r--default_images/res/helpimg/ueberblenden.pngbin0 -> 1069 bytes
-rw-r--r--default_images/res/helpimg/warning.pngbin0 -> 784 bytes
-rwxr-xr-xdefault_images/res/helpimg/warning_small.pngbin0 -> 395 bytes
-rw-r--r--default_images/res/helpimg/what-if.pngbin0 -> 10107 bytes
-rw-r--r--default_images/res/helpimg/zellvor.pngbin0 -> 571 bytes
-rw-r--r--default_images/res/helpimg/zh-CN/calcein.pngbin0 -> 535 bytes
-rw-r--r--default_images/res/helpimg/zh-CN/feldalle.pngbin0 -> 794 bytes
-rw-r--r--default_images/res/helpimg/zh-CN/feldbrei.pngbin0 -> 469 bytes
-rw-r--r--default_images/res/helpimg/zh-CN/feldcolo.pngbin0 -> 574 bytes
-rw-r--r--default_images/res/helpimg/zh-CN/names_as_addressing.pngbin0 -> 1837 bytes
-rw-r--r--default_images/res/helpimg/zh-CN/objbitmp.pngbin0 -> 3739 bytes
-rw-r--r--default_images/res/helpimg/zh-CN/prinzoom.pngbin0 -> 1445 bytes
-rw-r--r--default_images/res/helpimg/zh-CN/rechenlt.pngbin0 -> 592 bytes
-rw-r--r--default_images/res/helpimg/zh-CN/sheettabs.pngbin0 -> 1591 bytes
-rw-r--r--default_images/res/helpimg/zh-CN/swh00055.pngbin0 -> 637 bytes
-rw-r--r--default_images/res/helpimg/zh-CN/swh00056.pngbin0 -> 519 bytes
-rw-r--r--default_images/res/helpimg/zh-CN/swh00117.pngbin0 -> 748 bytes
-rw-r--r--default_images/res/helpimg/zh-CN/zellvor.pngbin0 -> 598 bytes
-rw-r--r--default_images/res/helpimg/zh-TW/calcein.pngbin0 -> 540 bytes
-rw-r--r--default_images/res/helpimg/zh-TW/feldalle.pngbin0 -> 832 bytes
-rw-r--r--default_images/res/helpimg/zh-TW/feldbrei.pngbin0 -> 482 bytes
-rw-r--r--default_images/res/helpimg/zh-TW/feldcolo.pngbin0 -> 574 bytes
-rw-r--r--default_images/res/helpimg/zh-TW/names_as_addressing.pngbin0 -> 1889 bytes
-rw-r--r--default_images/res/helpimg/zh-TW/objbitmp.pngbin0 -> 3096 bytes
-rw-r--r--default_images/res/helpimg/zh-TW/prinzoom.pngbin0 -> 1395 bytes
-rw-r--r--default_images/res/helpimg/zh-TW/rechenlt.pngbin0 -> 600 bytes
-rw-r--r--default_images/res/helpimg/zh-TW/sheettabs.pngbin0 -> 1474 bytes
-rw-r--r--default_images/res/helpimg/zh-TW/swh00055.pngbin0 -> 657 bytes
-rw-r--r--default_images/res/helpimg/zh-TW/swh00056.pngbin0 -> 520 bytes
-rw-r--r--default_images/res/helpimg/zh-TW/swh00117.pngbin0 -> 750 bytes
-rw-r--r--default_images/res/helpimg/zh-TW/zellvor.pngbin0 -> 599 bytes
-rw-r--r--default_images/res/hidedependency_16.pngbin0 -> 328 bytes
-rw-r--r--default_images/res/hldocntp.pngbin0 -> 1297 bytes
-rw-r--r--default_images/res/hldocntp_h.pngbin0 -> 198 bytes
-rw-r--r--default_images/res/hldoctp.pngbin0 -> 1766 bytes
-rw-r--r--default_images/res/hldoctp_h.pngbin0 -> 221 bytes
-rw-r--r--default_images/res/hlinettp.pngbin0 -> 1742 bytes
-rw-r--r--default_images/res/hlinettp_h.pngbin0 -> 333 bytes
-rw-r--r--default_images/res/hlmailtp.pngbin0 -> 1841 bytes
-rw-r--r--default_images/res/hlmailtp_h.pngbin0 -> 219 bytes
-rw-r--r--default_images/res/hu/lc10008.pngbin0 -> 549 bytes
-rw-r--r--default_images/res/hu/lc10009.pngbin0 -> 340 bytes
-rw-r--r--default_images/res/hu/lc10014.pngbin0 -> 528 bytes
-rw-r--r--default_images/res/hu/lc26648.pngbin0 -> 652 bytes
-rw-r--r--default_images/res/hu/lch10008.pngbin0 -> 182 bytes
-rw-r--r--default_images/res/hu/lch10009.pngbin0 -> 285 bytes
-rw-r--r--default_images/res/hu/lch10014.pngbin0 -> 186 bytes
-rw-r--r--default_images/res/hu/lch26648.pngbin0 -> 184 bytes
-rw-r--r--default_images/res/hu/sc10008.pngbin0 -> 373 bytes
-rw-r--r--default_images/res/hu/sc10009.pngbin0 -> 258 bytes
-rw-r--r--default_images/res/hu/sc10014.pngbin0 -> 353 bytes
-rw-r--r--default_images/res/hu/sc26648.pngbin0 -> 472 bytes
-rw-r--r--default_images/res/hu/sch10008.pngbin0 -> 141 bytes
-rw-r--r--default_images/res/hu/sch10009.pngbin0 -> 226 bytes
-rw-r--r--default_images/res/hu/sch10014.pngbin0 -> 140 bytes
-rw-r--r--default_images/res/hu/sch26648.pngbin0 -> 140 bytes
-rw-r--r--default_images/res/im30820.pngbin0 -> 653 bytes
-rw-r--r--default_images/res/im30821.pngbin0 -> 631 bytes
-rw-r--r--default_images/res/im30822.pngbin0 -> 548 bytes
-rw-r--r--default_images/res/im30823.pngbin0 -> 467 bytes
-rw-r--r--default_images/res/im30826.pngbin0 -> 432 bytes
-rw-r--r--default_images/res/im30827.pngbin0 -> 645 bytes
-rw-r--r--default_images/res/im30838.pngbin0 -> 608 bytes
-rw-r--r--default_images/res/im30839.pngbin0 -> 615 bytes
-rw-r--r--default_images/res/im30840.pngbin0 -> 403 bytes
-rw-r--r--default_images/res/im30841.pngbin0 -> 426 bytes
-rw-r--r--default_images/res/imh30820.pngbin0 -> 149 bytes
-rw-r--r--default_images/res/imh30821.pngbin0 -> 144 bytes
-rw-r--r--default_images/res/imh30822.pngbin0 -> 328 bytes
-rw-r--r--default_images/res/imh30823.pngbin0 -> 1035 bytes
-rw-r--r--default_images/res/imh30826.pngbin0 -> 138 bytes
-rw-r--r--default_images/res/imh30827.pngbin0 -> 141 bytes
-rw-r--r--default_images/res/imh30838.pngbin0 -> 131 bytes
-rw-r--r--default_images/res/imh30839.pngbin0 -> 110 bytes
-rw-r--r--default_images/res/imh30840.pngbin0 -> 117 bytes
-rw-r--r--default_images/res/imh30841.pngbin0 -> 116 bytes
-rw-r--r--default_images/res/info.pngbin0 -> 1642 bytes
-rw-r--r--default_images/res/info_16.pngbin0 -> 801 bytes
-rw-r--r--default_images/res/it/lc10008.pngbin0 -> 531 bytes
-rw-r--r--default_images/res/it/lc10009.pngbin0 -> 516 bytes
-rw-r--r--default_images/res/it/lc10014.pngbin0 -> 521 bytes
-rw-r--r--default_images/res/it/lc26648.pngbin0 -> 531 bytes
-rw-r--r--default_images/res/it/lch10008.pngbin0 -> 489 bytes
-rw-r--r--default_images/res/it/lch26648.pngbin0 -> 144 bytes
-rw-r--r--default_images/res/it/sc10008.pngbin0 -> 368 bytes
-rw-r--r--default_images/res/it/sc10009.pngbin0 -> 366 bytes
-rw-r--r--default_images/res/it/sc10014.pngbin0 -> 386 bytes
-rw-r--r--default_images/res/it/sch10009.pngbin0 -> 121 bytes
-rw-r--r--default_images/res/javacomponent_16.pngbin0 -> 525 bytes
-rw-r--r--default_images/res/javacomponent_16_h.pngbin0 -> 165 bytes
-rw-r--r--default_images/res/javalibrary_16.pngbin0 -> 910 bytes
-rw-r--r--default_images/res/javalibrary_16_h.pngbin0 -> 166 bytes
-rw-r--r--default_images/res/ko/lc10712.pngbin0 -> 368 bytes
-rw-r--r--default_images/res/ko/lc10713.pngbin0 -> 355 bytes
-rw-r--r--default_images/res/ko/lch10712.pngbin0 -> 153 bytes
-rw-r--r--default_images/res/ko/lch10713.pngbin0 -> 147 bytes
-rw-r--r--default_images/res/ko/sc10712.pngbin0 -> 281 bytes
-rw-r--r--default_images/res/ko/sc10713.pngbin0 -> 307 bytes
-rw-r--r--default_images/res/ko/sch10712.pngbin0 -> 118 bytes
-rw-r--r--default_images/res/ko/sch10713.pngbin0 -> 124 bytes
-rw-r--r--default_images/res/lc05504.pngbin0 -> 875 bytes
-rw-r--r--default_images/res/lc05505.pngbin0 -> 776 bytes
-rw-r--r--default_images/res/lc05508.pngbin0 -> 1603 bytes
-rw-r--r--default_images/res/lc05509.pngbin0 -> 875 bytes
-rw-r--r--default_images/res/lc05539.pngbin0 -> 970 bytes
-rw-r--r--default_images/res/lc05596.pngbin0 -> 1553 bytes
-rw-r--r--default_images/res/lc05646.pngbin0 -> 276 bytes
-rw-r--r--default_images/res/lc05647.pngbin0 -> 276 bytes
-rw-r--r--default_images/res/lc05648.pngbin0 -> 276 bytes
-rw-r--r--default_images/res/lc05649.pngbin0 -> 276 bytes
-rw-r--r--default_images/res/lc05650.pngbin0 -> 161 bytes
-rw-r--r--default_images/res/lc05651.pngbin0 -> 1163 bytes
-rw-r--r--default_images/res/lc05678.pngbin0 -> 2569 bytes
-rw-r--r--default_images/res/lc05700.pngbin0 -> 1549 bytes
-rw-r--r--default_images/res/lc05701.pngbin0 -> 1569 bytes
-rw-r--r--default_images/res/lc05710.pngbin0 -> 1623 bytes
-rw-r--r--default_images/res/lc05711.pngbin0 -> 855 bytes
-rw-r--r--default_images/res/lc05961.pngbin0 -> 1005 bytes
-rw-r--r--default_images/res/lc06300.pngbin0 -> 1039 bytes
-rw-r--r--default_images/res/lc06301.pngbin0 -> 1042 bytes
-rw-r--r--default_images/res/lc06302.pngbin0 -> 885 bytes
-rw-r--r--default_images/res/lc06303.pngbin0 -> 1132 bytes
-rw-r--r--default_images/res/lc06304.pngbin0 -> 276 bytes
-rw-r--r--default_images/res/lc06308.pngbin0 -> 1130 bytes
-rw-r--r--default_images/res/lc06309.pngbin0 -> 276 bytes
-rw-r--r--default_images/res/lc06312.pngbin0 -> 1094 bytes
-rw-r--r--default_images/res/lc06331.pngbin0 -> 276 bytes
-rw-r--r--default_images/res/lc06332.pngbin0 -> 764 bytes
-rw-r--r--default_images/res/lc06333.pngbin0 -> 736 bytes
-rw-r--r--default_images/res/lc06334.pngbin0 -> 276 bytes
-rw-r--r--default_images/res/lc06335.pngbin0 -> 276 bytes
-rw-r--r--default_images/res/lc06336.pngbin0 -> 276 bytes
-rw-r--r--default_images/res/lc06337.pngbin0 -> 276 bytes
-rw-r--r--default_images/res/lc06338.pngbin0 -> 1610 bytes
-rw-r--r--default_images/res/lc06350.pngbin0 -> 1163 bytes
-rw-r--r--default_images/res/lc06351.pngbin0 -> 276 bytes
-rw-r--r--default_images/res/lc06352.pngbin0 -> 276 bytes
-rw-r--r--default_images/res/lc06353.pngbin0 -> 276 bytes
-rw-r--r--default_images/res/lc06354.pngbin0 -> 276 bytes
-rw-r--r--default_images/res/lc06355.pngbin0 -> 276 bytes
-rw-r--r--default_images/res/lc06356.pngbin0 -> 276 bytes
-rw-r--r--default_images/res/lc06357.pngbin0 -> 276 bytes
-rw-r--r--default_images/res/lc10366.pngbin0 -> 1692 bytes
-rw-r--r--default_images/res/lc10711.pngbin0 -> 1084 bytes
-rw-r--r--default_images/res/lc10712.pngbin0 -> 968 bytes
-rw-r--r--default_images/res/lc10713.pngbin0 -> 951 bytes
-rw-r--r--default_images/res/lc10715.pngbin0 -> 809 bytes
-rw-r--r--default_images/res/lc10716.pngbin0 -> 1321 bytes
-rw-r--r--default_images/res/lc10851.pngbin0 -> 877 bytes
-rw-r--r--default_images/res/lc10853.pngbin0 -> 1005 bytes
-rw-r--r--default_images/res/lc10854.pngbin0 -> 2158 bytes
-rw-r--r--default_images/res/lch05504.pngbin0 -> 160 bytes
-rw-r--r--default_images/res/lch05509.pngbin0 -> 160 bytes
-rw-r--r--default_images/res/lch05678.pngbin0 -> 314 bytes
-rw-r--r--default_images/res/lch05711.pngbin0 -> 156 bytes
-rw-r--r--default_images/res/lch05961.pngbin0 -> 155 bytes
-rw-r--r--default_images/res/lch06300.pngbin0 -> 143 bytes
-rw-r--r--default_images/res/lch06301.pngbin0 -> 141 bytes
-rw-r--r--default_images/res/lch06303.pngbin0 -> 170 bytes
-rw-r--r--default_images/res/lch06308.pngbin0 -> 158 bytes
-rw-r--r--default_images/res/lch10711.pngbin0 -> 190 bytes
-rw-r--r--default_images/res/lch10712.pngbin0 -> 199 bytes
-rw-r--r--default_images/res/lch10713.pngbin0 -> 212 bytes
-rw-r--r--default_images/res/lch10715.pngbin0 -> 138 bytes
-rw-r--r--default_images/res/lch10716.pngbin0 -> 210 bytes
-rw-r--r--default_images/res/lch10851.pngbin0 -> 153 bytes
-rw-r--r--default_images/res/lch10853.pngbin0 -> 155 bytes
-rw-r--r--default_images/res/lch10854.pngbin0 -> 211 bytes
-rw-r--r--default_images/res/library_16.pngbin0 -> 854 bytes
-rw-r--r--default_images/res/library_16_h.pngbin0 -> 120 bytes
-rw-r--r--default_images/res/lock.pngbin0 -> 385 bytes
-rw-r--r--default_images/res/lock_hc.pngbin0 -> 120 bytes
-rw-r--r--default_images/res/lx03123.pngbin0 -> 982 bytes
-rw-r--r--default_images/res/lx03124.pngbin0 -> 315 bytes
-rw-r--r--default_images/res/lx03125.pngbin0 -> 1418 bytes
-rw-r--r--default_images/res/lx03126.pngbin0 -> 692 bytes
-rw-r--r--default_images/res/lx03127.pngbin0 -> 919 bytes
-rw-r--r--default_images/res/lx03128.pngbin0 -> 749 bytes
-rw-r--r--default_images/res/lx03129.pngbin0 -> 1319 bytes
-rw-r--r--default_images/res/lx03130.pngbin0 -> 1166 bytes
-rw-r--r--default_images/res/lx03131.pngbin0 -> 919 bytes
-rw-r--r--default_images/res/lx03132.pngbin0 -> 919 bytes
-rw-r--r--default_images/res/lx03134.pngbin0 -> 315 bytes
-rw-r--r--default_images/res/lx03135.pngbin0 -> 860 bytes
-rw-r--r--default_images/res/lx03136.pngbin0 -> 821 bytes
-rw-r--r--default_images/res/lx03137.pngbin0 -> 1418 bytes
-rw-r--r--default_images/res/lx03138.pngbin0 -> 1218 bytes
-rw-r--r--default_images/res/lx03139.pngbin0 -> 755 bytes
-rw-r--r--default_images/res/lx03140.pngbin0 -> 1418 bytes
-rw-r--r--default_images/res/lx03141.pngbin0 -> 625 bytes
-rw-r--r--default_images/res/lx03142.pngbin0 -> 315 bytes
-rw-r--r--default_images/res/lx03144.pngbin0 -> 1172 bytes
-rw-r--r--default_images/res/lx03145.pngbin0 -> 354 bytes
-rw-r--r--default_images/res/lx03150.pngbin0 -> 749 bytes
-rw-r--r--default_images/res/lx03151.pngbin0 -> 322 bytes
-rw-r--r--default_images/res/lx03152.pngbin0 -> 1418 bytes
-rw-r--r--default_images/res/lx03153.pngbin0 -> 1418 bytes
-rw-r--r--default_images/res/lx03154.pngbin0 -> 1418 bytes
-rw-r--r--default_images/res/lx03155.pngbin0 -> 1418 bytes
-rw-r--r--default_images/res/lx03156.pngbin0 -> 903 bytes
-rw-r--r--default_images/res/lx03157.pngbin0 -> 1218 bytes
-rw-r--r--default_images/res/lx03158.pngbin0 -> 1418 bytes
-rw-r--r--default_images/res/lx03159.pngbin0 -> 315 bytes
-rw-r--r--default_images/res/lx03160.pngbin0 -> 1315 bytes
-rw-r--r--default_images/res/lx03161.pngbin0 -> 903 bytes
-rw-r--r--default_images/res/lx03162.pngbin0 -> 903 bytes
-rw-r--r--default_images/res/lx03163.pngbin0 -> 941 bytes
-rw-r--r--default_images/res/lx03164.pngbin0 -> 409 bytes
-rw-r--r--default_images/res/lx03165.pngbin0 -> 581 bytes
-rw-r--r--default_images/res/lx03166.pngbin0 -> 772 bytes
-rw-r--r--default_images/res/lx03167.pngbin0 -> 648 bytes
-rw-r--r--default_images/res/lx03168.pngbin0 -> 315 bytes
-rw-r--r--default_images/res/lx03187.pngbin0 -> 315 bytes
-rw-r--r--default_images/res/lx03188.pngbin0 -> 692 bytes
-rw-r--r--default_images/res/lx03189.pngbin0 -> 625 bytes
-rw-r--r--default_images/res/lx03190.pngbin0 -> 315 bytes
-rw-r--r--default_images/res/lx03193.pngbin0 -> 315 bytes
-rw-r--r--default_images/res/lx03198.pngbin0 -> 315 bytes
-rw-r--r--default_images/res/lx03201.pngbin0 -> 315 bytes
-rw-r--r--default_images/res/lx03202.pngbin0 -> 315 bytes
-rw-r--r--default_images/res/lx03203.pngbin0 -> 315 bytes
-rw-r--r--default_images/res/lx03204.pngbin0 -> 315 bytes
-rw-r--r--default_images/res/lx03205.pngbin0 -> 315 bytes
-rw-r--r--default_images/res/lx03206.pngbin0 -> 315 bytes
-rw-r--r--default_images/res/lx03214.pngbin0 -> 308 bytes
-rw-r--r--default_images/res/lx03216.pngbin0 -> 2875 bytes
-rw-r--r--default_images/res/lx03217.pngbin0 -> 1363 bytes
-rw-r--r--default_images/res/lx03218.pngbin0 -> 1363 bytes
-rw-r--r--default_images/res/lx03219.pngbin0 -> 1418 bytes
-rw-r--r--default_images/res/lx03220.pngbin0 -> 1363 bytes
-rw-r--r--default_images/res/lx03221.pngbin0 -> 1363 bytes
-rw-r--r--default_images/res/lx03222.pngbin0 -> 1363 bytes
-rw-r--r--default_images/res/lx03226.pngbin0 -> 909 bytes
-rw-r--r--default_images/res/lx03227.pngbin0 -> 1363 bytes
-rw-r--r--default_images/res/lx03228.pngbin0 -> 1307 bytes
-rw-r--r--default_images/res/lx03236.pngbin0 -> 315 bytes
-rw-r--r--default_images/res/lx03237.pngbin0 -> 315 bytes
-rw-r--r--default_images/res/lx03239.pngbin0 -> 739 bytes
-rw-r--r--default_images/res/lx03241.pngbin0 -> 749 bytes
-rw-r--r--default_images/res/lx03242.pngbin0 -> 966 bytes
-rw-r--r--default_images/res/lx03243.pngbin0 -> 982 bytes
-rw-r--r--default_images/res/lx03244.pngbin0 -> 1166 bytes
-rw-r--r--default_images/res/lx03245.pngbin0 -> 1497 bytes
-rw-r--r--default_images/res/lx03246.pngbin0 -> 1548 bytes
-rw-r--r--default_images/res/lx03247.pngbin0 -> 1346 bytes
-rw-r--r--default_images/res/lx03248.pngbin0 -> 1110 bytes
-rw-r--r--default_images/res/lx03249.pngbin0 -> 1180 bytes
-rw-r--r--default_images/res/lx03250.pngbin0 -> 917 bytes
-rw-r--r--default_images/res/lx03251.pngbin0 -> 1106 bytes
-rw-r--r--default_images/res/lx03252.pngbin0 -> 1506 bytes
-rw-r--r--default_images/res/lx03253.pngbin0 -> 1370 bytes
-rw-r--r--default_images/res/lx03254.pngbin0 -> 1130 bytes
-rw-r--r--default_images/res/lx03255.pngbin0 -> 1153 bytes
-rw-r--r--default_images/res/lx03256.pngbin0 -> 1117 bytes
-rw-r--r--default_images/res/lxh03123.pngbin0 -> 3742 bytes
-rw-r--r--default_images/res/lxh03124.pngbin0 -> 170 bytes
-rw-r--r--default_images/res/lxh03125.pngbin0 -> 223 bytes
-rw-r--r--default_images/res/lxh03126.pngbin0 -> 3706 bytes
-rw-r--r--default_images/res/lxh03127.pngbin0 -> 3780 bytes
-rw-r--r--default_images/res/lxh03128.pngbin0 -> 126 bytes
-rw-r--r--default_images/res/lxh03129.pngbin0 -> 3807 bytes
-rw-r--r--default_images/res/lxh03130.pngbin0 -> 3798 bytes
-rw-r--r--default_images/res/lxh03131.pngbin0 -> 3780 bytes
-rw-r--r--default_images/res/lxh03132.pngbin0 -> 3780 bytes
-rw-r--r--default_images/res/lxh03134.pngbin0 -> 170 bytes
-rw-r--r--default_images/res/lxh03135.pngbin0 -> 142 bytes
-rw-r--r--default_images/res/lxh03136.pngbin0 -> 142 bytes
-rw-r--r--default_images/res/lxh03137.pngbin0 -> 223 bytes
-rw-r--r--default_images/res/lxh03138.pngbin0 -> 202 bytes
-rw-r--r--default_images/res/lxh03139.pngbin0 -> 3735 bytes
-rw-r--r--default_images/res/lxh03140.pngbin0 -> 223 bytes
-rw-r--r--default_images/res/lxh03141.pngbin0 -> 153 bytes
-rw-r--r--default_images/res/lxh03142.pngbin0 -> 170 bytes
-rw-r--r--default_images/res/lxh03144.pngbin0 -> 3822 bytes
-rw-r--r--default_images/res/lxh03145.pngbin0 -> 170 bytes
-rw-r--r--default_images/res/lxh03150.pngbin0 -> 126 bytes
-rw-r--r--default_images/res/lxh03151.pngbin0 -> 130 bytes
-rw-r--r--default_images/res/lxh03152.pngbin0 -> 223 bytes
-rw-r--r--default_images/res/lxh03153.pngbin0 -> 223 bytes
-rw-r--r--default_images/res/lxh03154.pngbin0 -> 223 bytes
-rw-r--r--default_images/res/lxh03155.pngbin0 -> 223 bytes
-rw-r--r--default_images/res/lxh03156.pngbin0 -> 3771 bytes
-rw-r--r--default_images/res/lxh03157.pngbin0 -> 202 bytes
-rw-r--r--default_images/res/lxh03158.pngbin0 -> 223 bytes
-rw-r--r--default_images/res/lxh03159.pngbin0 -> 170 bytes
-rw-r--r--default_images/res/lxh03160.pngbin0 -> 220 bytes
-rw-r--r--default_images/res/lxh03161.pngbin0 -> 3771 bytes
-rw-r--r--default_images/res/lxh03162.pngbin0 -> 3771 bytes
-rw-r--r--default_images/res/lxh03163.pngbin0 -> 3774 bytes
-rw-r--r--default_images/res/lxh03164.pngbin0 -> 164 bytes
-rw-r--r--default_images/res/lxh03165.pngbin0 -> 200 bytes
-rw-r--r--default_images/res/lxh03166.pngbin0 -> 285 bytes
-rw-r--r--default_images/res/lxh03167.pngbin0 -> 192 bytes
-rw-r--r--default_images/res/lxh03168.pngbin0 -> 170 bytes
-rw-r--r--default_images/res/lxh03187.pngbin0 -> 170 bytes
-rw-r--r--default_images/res/lxh03188.pngbin0 -> 3706 bytes
-rw-r--r--default_images/res/lxh03189.pngbin0 -> 153 bytes
-rw-r--r--default_images/res/lxh03190.pngbin0 -> 315 bytes
-rw-r--r--default_images/res/lxh03193.pngbin0 -> 315 bytes
-rw-r--r--default_images/res/lxh03198.pngbin0 -> 170 bytes
-rw-r--r--default_images/res/lxh03201.pngbin0 -> 170 bytes
-rw-r--r--default_images/res/lxh03202.pngbin0 -> 170 bytes
-rw-r--r--default_images/res/lxh03203.pngbin0 -> 170 bytes
-rw-r--r--default_images/res/lxh03204.pngbin0 -> 170 bytes
-rw-r--r--default_images/res/lxh03205.pngbin0 -> 170 bytes
-rw-r--r--default_images/res/lxh03206.pngbin0 -> 170 bytes
-rw-r--r--default_images/res/lxh03214.pngbin0 -> 197 bytes
-rw-r--r--default_images/res/lxh03216.pngbin0 -> 243 bytes
-rw-r--r--default_images/res/lxh03217.pngbin0 -> 3892 bytes
-rw-r--r--default_images/res/lxh03218.pngbin0 -> 3892 bytes
-rw-r--r--default_images/res/lxh03219.pngbin0 -> 223 bytes
-rw-r--r--default_images/res/lxh03220.pngbin0 -> 3892 bytes
-rw-r--r--default_images/res/lxh03221.pngbin0 -> 3892 bytes
-rw-r--r--default_images/res/lxh03222.pngbin0 -> 3892 bytes
-rw-r--r--default_images/res/lxh03226.pngbin0 -> 3763 bytes
-rw-r--r--default_images/res/lxh03227.pngbin0 -> 3892 bytes
-rw-r--r--default_images/res/lxh03228.pngbin0 -> 3886 bytes
-rw-r--r--default_images/res/lxh03236.pngbin0 -> 170 bytes
-rw-r--r--default_images/res/lxh03237.pngbin0 -> 170 bytes
-rw-r--r--default_images/res/lxh03239.pngbin0 -> 167 bytes
-rw-r--r--default_images/res/lxh03241.pngbin0 -> 126 bytes
-rw-r--r--default_images/res/lxh03242.pngbin0 -> 3784 bytes
-rw-r--r--default_images/res/lxh03243.pngbin0 -> 3742 bytes
-rw-r--r--default_images/res/lxh03244.pngbin0 -> 3798 bytes
-rw-r--r--default_images/res/lxh03245.pngbin0 -> 3867 bytes
-rw-r--r--default_images/res/lxh03246.pngbin0 -> 3955 bytes
-rw-r--r--default_images/res/lxh03247.pngbin0 -> 3880 bytes
-rw-r--r--default_images/res/lxh03248.pngbin0 -> 3816 bytes
-rw-r--r--default_images/res/lxh03249.pngbin0 -> 3805 bytes
-rw-r--r--default_images/res/lxh03250.pngbin0 -> 3778 bytes
-rw-r--r--default_images/res/lxh03251.pngbin0 -> 3831 bytes
-rw-r--r--default_images/res/lxh03252.pngbin0 -> 3945 bytes
-rw-r--r--default_images/res/lxh03253.pngbin0 -> 3856 bytes
-rw-r--r--default_images/res/lxh03254.pngbin0 -> 3850 bytes
-rw-r--r--default_images/res/lxh03255.pngbin0 -> 3835 bytes
-rw-r--r--default_images/res/lxh03256.pngbin0 -> 205 bytes
-rw-r--r--default_images/res/mainapp_16.pngbin0 -> 893 bytes
-rw-r--r--default_images/res/mainapp_16_8.pngbin0 -> 893 bytes
-rw-r--r--default_images/res/mainapp_16_h.pngbin0 -> 3675 bytes
-rw-r--r--default_images/res/mainapp_32.pngbin0 -> 2429 bytes
-rw-r--r--default_images/res/mainapp_32_8.pngbin0 -> 2429 bytes
-rw-r--r--default_images/res/mainapp_32_h.pngbin0 -> 3859 bytes
-rw-r--r--default_images/res/mainapp_48_8.pngbin0 -> 4184 bytes
-rw-r--r--default_images/res/minus.pngbin0 -> 293 bytes
-rw-r--r--default_images/res/minus_sch.pngbin0 -> 220 bytes
-rw-r--r--default_images/res/newdoc.pngbin0 -> 401 bytes
-rw-r--r--default_images/res/newdoc_hc.pngbin0 -> 108 bytes
-rw-r--r--default_images/res/odb_16_8.pngbin0 -> 574 bytes
-rw-r--r--default_images/res/odb_32.pngbin0 -> 1497 bytes
-rw-r--r--default_images/res/odb_32_8.pngbin0 -> 1497 bytes
-rw-r--r--default_images/res/odb_32_hc.pngbin0 -> 3867 bytes
-rw-r--r--default_images/res/odb_48_8.pngbin0 -> 2430 bytes
-rw-r--r--default_images/res/odf_16_8.pngbin0 -> 580 bytes
-rw-r--r--default_images/res/odf_32.pngbin0 -> 1346 bytes
-rw-r--r--default_images/res/odf_32_8.pngbin0 -> 1346 bytes
-rw-r--r--default_images/res/odf_32_hc.pngbin0 -> 3880 bytes
-rw-r--r--default_images/res/odf_48_8.pngbin0 -> 2171 bytes
-rw-r--r--default_images/res/odg_16_8.pngbin0 -> 572 bytes
-rw-r--r--default_images/res/odg_32.pngbin0 -> 1548 bytes
-rw-r--r--default_images/res/odg_32_8.pngbin0 -> 1548 bytes
-rw-r--r--default_images/res/odg_32_hc.pngbin0 -> 3955 bytes
-rw-r--r--default_images/res/odg_48_8.pngbin0 -> 2518 bytes
-rw-r--r--default_images/res/odm_16_8.pngbin0 -> 472 bytes
-rw-r--r--default_images/res/odm_32_8.pngbin0 -> 1110 bytes
-rw-r--r--default_images/res/odm_48_8.pngbin0 -> 1741 bytes
-rw-r--r--default_images/res/odp_16_8.pngbin0 -> 441 bytes
-rw-r--r--default_images/res/odp_32.pngbin0 -> 1180 bytes
-rw-r--r--default_images/res/odp_32_8.pngbin0 -> 1180 bytes
-rw-r--r--default_images/res/odp_32_hc.pngbin0 -> 3805 bytes
-rw-r--r--default_images/res/odp_48_8.pngbin0 -> 2125 bytes
-rw-r--r--default_images/res/ods_16_8.pngbin0 -> 436 bytes
-rw-r--r--default_images/res/ods_32.pngbin0 -> 917 bytes
-rw-r--r--default_images/res/ods_32_8.pngbin0 -> 917 bytes
-rw-r--r--default_images/res/ods_32_hc.pngbin0 -> 3778 bytes
-rw-r--r--default_images/res/ods_48_8.pngbin0 -> 2079 bytes
-rw-r--r--default_images/res/odt_16_8.pngbin0 -> 420 bytes
-rw-r--r--default_images/res/odt_32.pngbin0 -> 1106 bytes
-rw-r--r--default_images/res/odt_32_8.pngbin0 -> 1106 bytes
-rw-r--r--default_images/res/odt_32_hc.pngbin0 -> 3831 bytes
-rw-r--r--default_images/res/odt_48_8.pngbin0 -> 2094 bytes
-rw-r--r--default_images/res/oleobj.pngbin0 -> 1287 bytes
-rw-r--r--default_images/res/open_32.pngbin0 -> 1319 bytes
-rw-r--r--default_images/res/otg_16_8.pngbin0 -> 554 bytes
-rw-r--r--default_images/res/otg_32_8.pngbin0 -> 1506 bytes
-rw-r--r--default_images/res/otg_48_8.pngbin0 -> 2482 bytes
-rw-r--r--default_images/res/oth_16_8.pngbin0 -> 436 bytes
-rw-r--r--default_images/res/oth_32_8.pngbin0 -> 966 bytes
-rw-r--r--default_images/res/oth_48_8.pngbin0 -> 1537 bytes
-rw-r--r--default_images/res/otp_16_8.pngbin0 -> 532 bytes
-rw-r--r--default_images/res/otp_32_8.pngbin0 -> 1370 bytes
-rw-r--r--default_images/res/otp_48_8.pngbin0 -> 2376 bytes
-rw-r--r--default_images/res/ots_16_8.pngbin0 -> 538 bytes
-rw-r--r--default_images/res/ots_32_8.pngbin0 -> 1130 bytes
-rw-r--r--default_images/res/ots_48_8.pngbin0 -> 2400 bytes
-rw-r--r--default_images/res/ott_16_8.pngbin0 -> 444 bytes
-rw-r--r--default_images/res/ott_32_8.pngbin0 -> 1153 bytes
-rw-r--r--default_images/res/ott_48_8.pngbin0 -> 2125 bytes
-rw-r--r--default_images/res/plugin.pngbin0 -> 1771 bytes
-rw-r--r--default_images/res/plus.pngbin0 -> 331 bytes
-rw-r--r--default_images/res/plus_sch.pngbin0 -> 228 bytes
-rw-r--r--default_images/res/printeradmin_16.pngbin0 -> 4259 bytes
-rw-r--r--default_images/res/printeradmin_16_8.pngbin0 -> 4259 bytes
-rw-r--r--default_images/res/printeradmin_16_h.pngbin0 -> 3671 bytes
-rw-r--r--default_images/res/printeradmin_32.pngbin0 -> 5595 bytes
-rw-r--r--default_images/res/printeradmin_32_8.pngbin0 -> 5595 bytes
-rw-r--r--default_images/res/printeradmin_32_h.pngbin0 -> 3916 bytes
-rw-r--r--default_images/res/printeradmin_48_8.pngbin0 -> 7337 bytes
-rw-r--r--default_images/res/puzzlefolder_16.pngbin0 -> 695 bytes
-rw-r--r--default_images/res/puzzlefolder_16_h.pngbin0 -> 155 bytes
-rw-r--r--default_images/res/puzzleslice_16.pngbin0 -> 593 bytes
-rw-r--r--default_images/res/puzzleslice_16_h.pngbin0 -> 149 bytes
-rw-r--r--default_images/res/sc05500.pngbin0 -> 525 bytes
-rw-r--r--default_images/res/sc05501.pngbin0 -> 711 bytes
-rw-r--r--default_images/res/sc05502.pngbin0 -> 585 bytes
-rw-r--r--default_images/res/sc05504.pngbin0 -> 577 bytes
-rw-r--r--default_images/res/sc05505.pngbin0 -> 535 bytes
-rw-r--r--default_images/res/sc05508.pngbin0 -> 909 bytes
-rw-r--r--default_images/res/sc05509.pngbin0 -> 577 bytes
-rw-r--r--default_images/res/sc05539.pngbin0 -> 671 bytes
-rw-r--r--default_images/res/sc05554.pngbin0 -> 831 bytes
-rw-r--r--default_images/res/sc05555.pngbin0 -> 613 bytes
-rw-r--r--default_images/res/sc05556.pngbin0 -> 734 bytes
-rw-r--r--default_images/res/sc05596.pngbin0 -> 802 bytes
-rw-r--r--default_images/res/sc05646.pngbin0 -> 202 bytes
-rw-r--r--default_images/res/sc05647.pngbin0 -> 202 bytes
-rw-r--r--default_images/res/sc05648.pngbin0 -> 202 bytes
-rw-r--r--default_images/res/sc05649.pngbin0 -> 202 bytes
-rw-r--r--default_images/res/sc05650.pngbin0 -> 202 bytes
-rw-r--r--default_images/res/sc05651.pngbin0 -> 712 bytes
-rw-r--r--default_images/res/sc05678.pngbin0 -> 1184 bytes
-rw-r--r--default_images/res/sc05700.pngbin0 -> 894 bytes
-rw-r--r--default_images/res/sc05701.pngbin0 -> 888 bytes
-rw-r--r--default_images/res/sc05710.pngbin0 -> 802 bytes
-rw-r--r--default_images/res/sc05711.pngbin0 -> 600 bytes
-rw-r--r--default_images/res/sc05961.pngbin0 -> 680 bytes
-rw-r--r--default_images/res/sc06300.pngbin0 -> 537 bytes
-rw-r--r--default_images/res/sc06301.pngbin0 -> 526 bytes
-rw-r--r--default_images/res/sc06302.pngbin0 -> 592 bytes
-rw-r--r--default_images/res/sc06303.pngbin0 -> 705 bytes
-rw-r--r--default_images/res/sc06304.pngbin0 -> 202 bytes
-rw-r--r--default_images/res/sc06308.pngbin0 -> 796 bytes
-rw-r--r--default_images/res/sc06309.pngbin0 -> 202 bytes
-rw-r--r--default_images/res/sc06312.pngbin0 -> 760 bytes
-rw-r--r--default_images/res/sc06331.pngbin0 -> 663 bytes
-rw-r--r--default_images/res/sc06332.pngbin0 -> 503 bytes
-rw-r--r--default_images/res/sc06333.pngbin0 -> 494 bytes
-rw-r--r--default_images/res/sc06334.pngbin0 -> 202 bytes
-rw-r--r--default_images/res/sc06335.pngbin0 -> 202 bytes
-rw-r--r--default_images/res/sc06336.pngbin0 -> 202 bytes
-rw-r--r--default_images/res/sc06337.pngbin0 -> 202 bytes
-rw-r--r--default_images/res/sc06338.pngbin0 -> 1007 bytes
-rw-r--r--default_images/res/sc06350.pngbin0 -> 712 bytes
-rw-r--r--default_images/res/sc06351.pngbin0 -> 202 bytes
-rw-r--r--default_images/res/sc06352.pngbin0 -> 202 bytes
-rw-r--r--default_images/res/sc06353.pngbin0 -> 202 bytes
-rw-r--r--default_images/res/sc06354.pngbin0 -> 202 bytes
-rw-r--r--default_images/res/sc06355.pngbin0 -> 202 bytes
-rw-r--r--default_images/res/sc06356.pngbin0 -> 202 bytes
-rw-r--r--default_images/res/sc06357.pngbin0 -> 202 bytes
-rw-r--r--default_images/res/sc06580.pngbin0 -> 202 bytes
-rw-r--r--default_images/res/sc10223.pngbin0 -> 173 bytes
-rw-r--r--default_images/res/sc10224.pngbin0 -> 176 bytes
-rw-r--r--default_images/res/sc10243.pngbin0 -> 605 bytes
-rw-r--r--default_images/res/sc10350.pngbin0 -> 594 bytes
-rw-r--r--default_images/res/sc10366.pngbin0 -> 1014 bytes
-rw-r--r--default_images/res/sc10711.pngbin0 -> 603 bytes
-rw-r--r--default_images/res/sc10712.pngbin0 -> 659 bytes
-rw-r--r--default_images/res/sc10713.pngbin0 -> 673 bytes
-rw-r--r--default_images/res/sc10715.pngbin0 -> 460 bytes
-rw-r--r--default_images/res/sc10716.pngbin0 -> 711 bytes
-rw-r--r--default_images/res/sc10851.pngbin0 -> 532 bytes
-rw-r--r--default_images/res/sc10853.pngbin0 -> 680 bytes
-rw-r--r--default_images/res/sc10854.pngbin0 -> 813 bytes
-rw-r--r--default_images/res/sc10863.pngbin0 -> 787 bytes
-rw-r--r--default_images/res/sc10864.pngbin0 -> 737 bytes
-rw-r--r--default_images/res/sc10865.pngbin0 -> 612 bytes
-rw-r--r--default_images/res/sc10866.pngbin0 -> 615 bytes
-rw-r--r--default_images/res/sc10867.pngbin0 -> 615 bytes
-rw-r--r--default_images/res/sc10868.pngbin0 -> 836 bytes
-rw-r--r--default_images/res/sc10869.pngbin0 -> 659 bytes
-rw-r--r--default_images/res/sch05500.pngbin0 -> 109 bytes
-rw-r--r--default_images/res/sch05501.pngbin0 -> 141 bytes
-rw-r--r--default_images/res/sch05502.pngbin0 -> 123 bytes
-rw-r--r--default_images/res/sch05504.pngbin0 -> 133 bytes
-rw-r--r--default_images/res/sch05509.pngbin0 -> 133 bytes
-rw-r--r--default_images/res/sch05554.pngbin0 -> 171 bytes
-rw-r--r--default_images/res/sch05555.pngbin0 -> 147 bytes
-rw-r--r--default_images/res/sch05556.pngbin0 -> 150 bytes
-rw-r--r--default_images/res/sch05678.pngbin0 -> 205 bytes
-rw-r--r--default_images/res/sch05711.pngbin0 -> 129 bytes
-rw-r--r--default_images/res/sch05961.pngbin0 -> 128 bytes
-rw-r--r--default_images/res/sch06300.pngbin0 -> 320 bytes
-rw-r--r--default_images/res/sch06301.pngbin0 -> 310 bytes
-rw-r--r--default_images/res/sch06303.pngbin0 -> 135 bytes
-rw-r--r--default_images/res/sch06308.pngbin0 -> 139 bytes
-rw-r--r--default_images/res/sch10243.pngbin0 -> 156 bytes
-rw-r--r--default_images/res/sch10711.pngbin0 -> 166 bytes
-rw-r--r--default_images/res/sch10712.pngbin0 -> 155 bytes
-rw-r--r--default_images/res/sch10713.pngbin0 -> 160 bytes
-rw-r--r--default_images/res/sch10715.pngbin0 -> 117 bytes
-rw-r--r--default_images/res/sch10716.pngbin0 -> 173 bytes
-rw-r--r--default_images/res/sch10851.pngbin0 -> 127 bytes
-rw-r--r--default_images/res/sch10853.pngbin0 -> 128 bytes
-rw-r--r--default_images/res/sch10854.pngbin0 -> 146 bytes
-rw-r--r--default_images/res/sch10863.pngbin0 -> 139 bytes
-rw-r--r--default_images/res/sch10864.pngbin0 -> 118 bytes
-rw-r--r--default_images/res/sch10865.pngbin0 -> 151 bytes
-rw-r--r--default_images/res/sch10866.pngbin0 -> 150 bytes
-rw-r--r--default_images/res/sch10867.pngbin0 -> 150 bytes
-rw-r--r--default_images/res/sch10868.pngbin0 -> 146 bytes
-rw-r--r--default_images/res/sch10869.pngbin0 -> 141 bytes
-rw-r--r--default_images/res/script.pngbin0 -> 664 bytes
-rw-r--r--default_images/res/script_hc.pngbin0 -> 161 bytes
-rw-r--r--default_images/res/selectupd_16.pngbin0 -> 382 bytes
-rw-r--r--default_images/res/soliline.pngbin0 -> 153 bytes
-rw-r--r--default_images/res/sx03123.pngbin0 -> 425 bytes
-rw-r--r--default_images/res/sx03124.pngbin0 -> 202 bytes
-rw-r--r--default_images/res/sx03125.pngbin0 -> 725 bytes
-rw-r--r--default_images/res/sx03126.pngbin0 -> 412 bytes
-rw-r--r--default_images/res/sx03127.pngbin0 -> 513 bytes
-rw-r--r--default_images/res/sx03128.pngbin0 -> 525 bytes
-rw-r--r--default_images/res/sx03129.pngbin0 -> 555 bytes
-rw-r--r--default_images/res/sx03130.pngbin0 -> 515 bytes
-rw-r--r--default_images/res/sx03131.pngbin0 -> 513 bytes
-rw-r--r--default_images/res/sx03132.pngbin0 -> 513 bytes
-rw-r--r--default_images/res/sx03134.pngbin0 -> 202 bytes
-rw-r--r--default_images/res/sx03135.pngbin0 -> 484 bytes
-rw-r--r--default_images/res/sx03136.pngbin0 -> 485 bytes
-rw-r--r--default_images/res/sx03137.pngbin0 -> 725 bytes
-rw-r--r--default_images/res/sx03138.pngbin0 -> 596 bytes
-rw-r--r--default_images/res/sx03139.pngbin0 -> 366 bytes
-rw-r--r--default_images/res/sx03140.pngbin0 -> 725 bytes
-rw-r--r--default_images/res/sx03141.pngbin0 -> 401 bytes
-rw-r--r--default_images/res/sx03142.pngbin0 -> 202 bytes
-rw-r--r--default_images/res/sx03144.pngbin0 -> 562 bytes
-rw-r--r--default_images/res/sx03145.pngbin0 -> 202 bytes
-rw-r--r--default_images/res/sx03150.pngbin0 -> 525 bytes
-rw-r--r--default_images/res/sx03151.pngbin0 -> 271 bytes
-rw-r--r--default_images/res/sx03152.pngbin0 -> 725 bytes
-rw-r--r--default_images/res/sx03153.pngbin0 -> 725 bytes
-rw-r--r--default_images/res/sx03154.pngbin0 -> 725 bytes
-rw-r--r--default_images/res/sx03155.pngbin0 -> 725 bytes
-rw-r--r--default_images/res/sx03156.pngbin0 -> 392 bytes
-rw-r--r--default_images/res/sx03157.pngbin0 -> 596 bytes
-rw-r--r--default_images/res/sx03158.pngbin0 -> 725 bytes
-rw-r--r--default_images/res/sx03159.pngbin0 -> 202 bytes
-rw-r--r--default_images/res/sx03160.pngbin0 -> 701 bytes
-rw-r--r--default_images/res/sx03161.pngbin0 -> 392 bytes
-rw-r--r--default_images/res/sx03162.pngbin0 -> 392 bytes
-rw-r--r--default_images/res/sx03163.pngbin0 -> 413 bytes
-rw-r--r--default_images/res/sx03164.pngbin0 -> 335 bytes
-rw-r--r--default_images/res/sx03165.pngbin0 -> 433 bytes
-rw-r--r--default_images/res/sx03166.pngbin0 -> 534 bytes
-rw-r--r--default_images/res/sx03167.pngbin0 -> 392 bytes
-rw-r--r--default_images/res/sx03168.pngbin0 -> 202 bytes
-rw-r--r--default_images/res/sx03187.pngbin0 -> 577 bytes
-rw-r--r--default_images/res/sx03188.pngbin0 -> 412 bytes
-rw-r--r--default_images/res/sx03189.pngbin0 -> 401 bytes
-rw-r--r--default_images/res/sx03190.pngbin0 -> 711 bytes
-rw-r--r--default_images/res/sx03193.pngbin0 -> 510 bytes
-rw-r--r--default_images/res/sx03198.pngbin0 -> 202 bytes
-rw-r--r--default_images/res/sx03201.pngbin0 -> 706 bytes
-rw-r--r--default_images/res/sx03202.pngbin0 -> 732 bytes
-rw-r--r--default_images/res/sx03203.pngbin0 -> 202 bytes
-rw-r--r--default_images/res/sx03204.pngbin0 -> 202 bytes
-rw-r--r--default_images/res/sx03205.pngbin0 -> 202 bytes
-rw-r--r--default_images/res/sx03206.pngbin0 -> 202 bytes
-rw-r--r--default_images/res/sx03214.pngbin0 -> 252 bytes
-rw-r--r--default_images/res/sx03216.pngbin0 -> 1017 bytes
-rw-r--r--default_images/res/sx03217.pngbin0 -> 555 bytes
-rw-r--r--default_images/res/sx03218.pngbin0 -> 555 bytes
-rw-r--r--default_images/res/sx03219.pngbin0 -> 725 bytes
-rw-r--r--default_images/res/sx03220.pngbin0 -> 555 bytes
-rw-r--r--default_images/res/sx03221.pngbin0 -> 555 bytes
-rw-r--r--default_images/res/sx03222.pngbin0 -> 555 bytes
-rw-r--r--default_images/res/sx03226.pngbin0 -> 450 bytes
-rw-r--r--default_images/res/sx03227.pngbin0 -> 555 bytes
-rw-r--r--default_images/res/sx03228.pngbin0 -> 522 bytes
-rw-r--r--default_images/res/sx03236.pngbin0 -> 202 bytes
-rw-r--r--default_images/res/sx03237.pngbin0 -> 202 bytes
-rw-r--r--default_images/res/sx03239.pngbin0 -> 510 bytes
-rw-r--r--default_images/res/sx03241.pngbin0 -> 525 bytes
-rw-r--r--default_images/res/sx03242.pngbin0 -> 436 bytes
-rw-r--r--default_images/res/sx03243.pngbin0 -> 425 bytes
-rw-r--r--default_images/res/sx03244.pngbin0 -> 515 bytes
-rw-r--r--default_images/res/sx03245.pngbin0 -> 574 bytes
-rw-r--r--default_images/res/sx03246.pngbin0 -> 572 bytes
-rw-r--r--default_images/res/sx03247.pngbin0 -> 580 bytes
-rw-r--r--default_images/res/sx03248.pngbin0 -> 472 bytes
-rw-r--r--default_images/res/sx03249.pngbin0 -> 441 bytes
-rw-r--r--default_images/res/sx03250.pngbin0 -> 436 bytes
-rw-r--r--default_images/res/sx03251.pngbin0 -> 420 bytes
-rw-r--r--default_images/res/sx03252.pngbin0 -> 554 bytes
-rw-r--r--default_images/res/sx03253.pngbin0 -> 532 bytes
-rw-r--r--default_images/res/sx03254.pngbin0 -> 538 bytes
-rw-r--r--default_images/res/sx03255.pngbin0 -> 444 bytes
-rw-r--r--default_images/res/sx03256.pngbin0 -> 557 bytes
-rw-r--r--default_images/res/sx10144.pngbin0 -> 676 bytes
-rw-r--r--default_images/res/sx10593.pngbin0 -> 515 bytes
-rw-r--r--default_images/res/sx10594.pngbin0 -> 577 bytes
-rw-r--r--default_images/res/sx10595.pngbin0 -> 619 bytes
-rw-r--r--default_images/res/sx10596.pngbin0 -> 620 bytes
-rw-r--r--default_images/res/sx10597.pngbin0 -> 425 bytes
-rw-r--r--default_images/res/sx10598.pngbin0 -> 650 bytes
-rw-r--r--default_images/res/sx10599.pngbin0 -> 547 bytes
-rw-r--r--default_images/res/sx10600.pngbin0 -> 728 bytes
-rw-r--r--default_images/res/sx10601.pngbin0 -> 765 bytes
-rw-r--r--default_images/res/sx10602.pngbin0 -> 202 bytes
-rw-r--r--default_images/res/sx10603.pngbin0 -> 404 bytes
-rw-r--r--default_images/res/sx10604.pngbin0 -> 742 bytes
-rw-r--r--default_images/res/sx10605.pngbin0 -> 761 bytes
-rw-r--r--default_images/res/sx10607.pngbin0 -> 735 bytes
-rw-r--r--default_images/res/sx10704.pngbin0 -> 626 bytes
-rw-r--r--default_images/res/sx10705.pngbin0 -> 830 bytes
-rw-r--r--default_images/res/sx10706.pngbin0 -> 435 bytes
-rw-r--r--default_images/res/sx10707.pngbin0 -> 727 bytes
-rw-r--r--default_images/res/sx10708.pngbin0 -> 492 bytes
-rw-r--r--default_images/res/sx10710.pngbin0 -> 649 bytes
-rw-r--r--default_images/res/sx10715.pngbin0 -> 460 bytes
-rw-r--r--default_images/res/sx10728.pngbin0 -> 519 bytes
-rw-r--r--default_images/res/sx10757.pngbin0 -> 771 bytes
-rw-r--r--default_images/res/sx10768.pngbin0 -> 592 bytes
-rw-r--r--default_images/res/sx10769.pngbin0 -> 549 bytes
-rw-r--r--default_images/res/sx16670.pngbin0 -> 794 bytes
-rw-r--r--default_images/res/sx18002.pngbin0 -> 420 bytes
-rw-r--r--default_images/res/sx18003.pngbin0 -> 389 bytes
-rw-r--r--default_images/res/sx18013.pngbin0 -> 586 bytes
-rw-r--r--default_images/res/sx18022.pngbin0 -> 571 bytes
-rw-r--r--default_images/res/sx18027.pngbin0 -> 231 bytes
-rw-r--r--default_images/res/sxh03123.pngbin0 -> 3679 bytes
-rw-r--r--default_images/res/sxh03124.pngbin0 -> 122 bytes
-rw-r--r--default_images/res/sxh03125.pngbin0 -> 153 bytes
-rw-r--r--default_images/res/sxh03126.pngbin0 -> 3662 bytes
-rw-r--r--default_images/res/sxh03127.pngbin0 -> 3704 bytes
-rw-r--r--default_images/res/sxh03128.pngbin0 -> 109 bytes
-rw-r--r--default_images/res/sxh03129.pngbin0 -> 3681 bytes
-rw-r--r--default_images/res/sxh03130.pngbin0 -> 3701 bytes
-rw-r--r--default_images/res/sxh03131.pngbin0 -> 3704 bytes
-rw-r--r--default_images/res/sxh03132.pngbin0 -> 3704 bytes
-rw-r--r--default_images/res/sxh03134.pngbin0 -> 122 bytes
-rw-r--r--default_images/res/sxh03135.pngbin0 -> 121 bytes
-rw-r--r--default_images/res/sxh03136.pngbin0 -> 120 bytes
-rw-r--r--default_images/res/sxh03137.pngbin0 -> 153 bytes
-rw-r--r--default_images/res/sxh03138.pngbin0 -> 173 bytes
-rw-r--r--default_images/res/sxh03139.pngbin0 -> 3655 bytes
-rw-r--r--default_images/res/sxh03140.pngbin0 -> 153 bytes
-rw-r--r--default_images/res/sxh03141.pngbin0 -> 108 bytes
-rw-r--r--default_images/res/sxh03142.pngbin0 -> 122 bytes
-rw-r--r--default_images/res/sxh03144.pngbin0 -> 3682 bytes
-rw-r--r--default_images/res/sxh03145.pngbin0 -> 122 bytes
-rw-r--r--default_images/res/sxh03150.pngbin0 -> 109 bytes
-rw-r--r--default_images/res/sxh03151.pngbin0 -> 103 bytes
-rw-r--r--default_images/res/sxh03152.pngbin0 -> 153 bytes
-rw-r--r--default_images/res/sxh03153.pngbin0 -> 153 bytes
-rw-r--r--default_images/res/sxh03154.pngbin0 -> 153 bytes
-rw-r--r--default_images/res/sxh03155.pngbin0 -> 153 bytes
-rw-r--r--default_images/res/sxh03156.pngbin0 -> 3664 bytes
-rw-r--r--default_images/res/sxh03157.pngbin0 -> 173 bytes
-rw-r--r--default_images/res/sxh03158.pngbin0 -> 153 bytes
-rw-r--r--default_images/res/sxh03159.pngbin0 -> 122 bytes
-rw-r--r--default_images/res/sxh03160.pngbin0 -> 140 bytes
-rw-r--r--default_images/res/sxh03161.pngbin0 -> 3664 bytes
-rw-r--r--default_images/res/sxh03162.pngbin0 -> 3664 bytes
-rw-r--r--default_images/res/sxh03163.pngbin0 -> 3660 bytes
-rw-r--r--default_images/res/sxh03164.pngbin0 -> 131 bytes
-rw-r--r--default_images/res/sxh03165.pngbin0 -> 161 bytes
-rw-r--r--default_images/res/sxh03166.pngbin0 -> 188 bytes
-rw-r--r--default_images/res/sxh03167.pngbin0 -> 154 bytes
-rw-r--r--default_images/res/sxh03168.pngbin0 -> 122 bytes
-rw-r--r--default_images/res/sxh03187.pngbin0 -> 122 bytes
-rw-r--r--default_images/res/sxh03188.pngbin0 -> 3662 bytes
-rw-r--r--default_images/res/sxh03189.pngbin0 -> 108 bytes
-rw-r--r--default_images/res/sxh03190.pngbin0 -> 141 bytes
-rw-r--r--default_images/res/sxh03193.pngbin0 -> 140 bytes
-rw-r--r--default_images/res/sxh03198.pngbin0 -> 122 bytes
-rw-r--r--default_images/res/sxh03201.pngbin0 -> 158 bytes
-rw-r--r--default_images/res/sxh03202.pngbin0 -> 148 bytes
-rw-r--r--default_images/res/sxh03203.pngbin0 -> 122 bytes
-rw-r--r--default_images/res/sxh03204.pngbin0 -> 122 bytes
-rw-r--r--default_images/res/sxh03205.pngbin0 -> 122 bytes
-rw-r--r--default_images/res/sxh03206.pngbin0 -> 122 bytes
-rw-r--r--default_images/res/sxh03214.pngbin0 -> 143 bytes
-rw-r--r--default_images/res/sxh03216.pngbin0 -> 148 bytes
-rw-r--r--default_images/res/sxh03217.pngbin0 -> 3705 bytes
-rw-r--r--default_images/res/sxh03218.pngbin0 -> 3705 bytes
-rw-r--r--default_images/res/sxh03219.pngbin0 -> 153 bytes
-rw-r--r--default_images/res/sxh03220.pngbin0 -> 3705 bytes
-rw-r--r--default_images/res/sxh03221.pngbin0 -> 3705 bytes
-rw-r--r--default_images/res/sxh03222.pngbin0 -> 3705 bytes
-rw-r--r--default_images/res/sxh03226.pngbin0 -> 3668 bytes
-rw-r--r--default_images/res/sxh03227.pngbin0 -> 3705 bytes
-rw-r--r--default_images/res/sxh03228.pngbin0 -> 3678 bytes
-rw-r--r--default_images/res/sxh03236.pngbin0 -> 122 bytes
-rw-r--r--default_images/res/sxh03237.pngbin0 -> 122 bytes
-rw-r--r--default_images/res/sxh03239.pngbin0 -> 132 bytes
-rw-r--r--default_images/res/sxh03241.pngbin0 -> 109 bytes
-rw-r--r--default_images/res/sxh03242.pngbin0 -> 3648 bytes
-rw-r--r--default_images/res/sxh03243.pngbin0 -> 3679 bytes
-rw-r--r--default_images/res/sxh03244.pngbin0 -> 3701 bytes
-rw-r--r--default_images/res/sxh03245.pngbin0 -> 3687 bytes
-rw-r--r--default_images/res/sxh03246.pngbin0 -> 3706 bytes
-rw-r--r--default_images/res/sxh03247.pngbin0 -> 3695 bytes
-rw-r--r--default_images/res/sxh03248.pngbin0 -> 3666 bytes
-rw-r--r--default_images/res/sxh03249.pngbin0 -> 3679 bytes
-rw-r--r--default_images/res/sxh03250.pngbin0 -> 3666 bytes
-rw-r--r--default_images/res/sxh03251.pngbin0 -> 3667 bytes
-rw-r--r--default_images/res/sxh03252.pngbin0 -> 3694 bytes
-rw-r--r--default_images/res/sxh03253.pngbin0 -> 3698 bytes
-rw-r--r--default_images/res/sxh03254.pngbin0 -> 3709 bytes
-rw-r--r--default_images/res/sxh03255.pngbin0 -> 3662 bytes
-rw-r--r--default_images/res/sxh03256.pngbin0 -> 148 bytes
-rw-r--r--default_images/res/sxh10144.pngbin0 -> 155 bytes
-rw-r--r--default_images/res/sxh10593.pngbin0 -> 118 bytes
-rw-r--r--default_images/res/sxh10594.pngbin0 -> 100 bytes
-rw-r--r--default_images/res/sxh10595.pngbin0 -> 129 bytes
-rw-r--r--default_images/res/sxh10596.pngbin0 -> 132 bytes
-rw-r--r--default_images/res/sxh10597.pngbin0 -> 110 bytes
-rw-r--r--default_images/res/sxh10598.pngbin0 -> 114 bytes
-rw-r--r--default_images/res/sxh10599.pngbin0 -> 115 bytes
-rw-r--r--default_images/res/sxh10600.pngbin0 -> 133 bytes
-rw-r--r--default_images/res/sxh10601.pngbin0 -> 130 bytes
-rw-r--r--default_images/res/sxh10602.pngbin0 -> 122 bytes
-rw-r--r--default_images/res/sxh10603.pngbin0 -> 245 bytes
-rw-r--r--default_images/res/sxh10604.pngbin0 -> 123 bytes
-rw-r--r--default_images/res/sxh10605.pngbin0 -> 132 bytes
-rw-r--r--default_images/res/sxh10607.pngbin0 -> 107 bytes
-rw-r--r--default_images/res/sxh10704.pngbin0 -> 119 bytes
-rw-r--r--default_images/res/sxh10705.pngbin0 -> 163 bytes
-rw-r--r--default_images/res/sxh10706.pngbin0 -> 106 bytes
-rw-r--r--default_images/res/sxh10707.pngbin0 -> 141 bytes
-rw-r--r--default_images/res/sxh10708.pngbin0 -> 108 bytes
-rw-r--r--default_images/res/sxh10710.pngbin0 -> 134 bytes
-rw-r--r--default_images/res/sxh10715.pngbin0 -> 117 bytes
-rw-r--r--default_images/res/sxh10728.pngbin0 -> 117 bytes
-rw-r--r--default_images/res/sxh10757.pngbin0 -> 151 bytes
-rw-r--r--default_images/res/sxh10768.pngbin0 -> 108 bytes
-rw-r--r--default_images/res/sxh10769.pngbin0 -> 110 bytes
-rw-r--r--default_images/res/sxh18002.pngbin0 -> 279 bytes
-rw-r--r--default_images/res/sxh18003.pngbin0 -> 267 bytes
-rw-r--r--default_images/res/sxh18013.pngbin0 -> 141 bytes
-rw-r--r--default_images/res/sxh18022.pngbin0 -> 105 bytes
-rw-r--r--default_images/res/sxh18027.pngbin0 -> 193 bytes
-rw-r--r--default_images/res/target.pngbin0 -> 813 bytes
-rw-r--r--default_images/res/target_hc.pngbin0 -> 146 bytes
-rw-r--r--default_images/res/tb01.pngbin0 -> 502 bytes
-rw-r--r--default_images/res/tb02.pngbin0 -> 607 bytes
-rw-r--r--default_images/res/tb03.pngbin0 -> 536 bytes
-rw-r--r--default_images/res/tb04.pngbin0 -> 655 bytes
-rw-r--r--default_images/res/tb05.pngbin0 -> 656 bytes
-rw-r--r--default_images/res/tbh01.pngbin0 -> 122 bytes
-rw-r--r--default_images/res/tbh02.pngbin0 -> 140 bytes
-rw-r--r--default_images/res/tbh03.pngbin0 -> 132 bytes
-rw-r--r--default_images/res/tbh04.pngbin0 -> 152 bytes
-rw-r--r--default_images/res/tbh05.pngbin0 -> 153 bytes
-rw-r--r--default_images/res/template_32.pngbin0 -> 1180 bytes
-rw-r--r--default_images/res/versionwarning.pngbin0 -> 866 bytes
-rw-r--r--default_images/res/xml_16.pngbin0 -> 720 bytes
-rw-r--r--default_images/res/xml_16_h.pngbin0 -> 141 bytes
-rw-r--r--default_images/sc/res/date.pngbin0 -> 646 bytes
-rw-r--r--default_images/sc/res/date_h.pngbin0 -> 120 bytes
-rw-r--r--default_images/sc/res/dropcopy.pngbin0 -> 660 bytes
-rw-r--r--default_images/sc/res/dropcopy_h.pngbin0 -> 125 bytes
-rw-r--r--default_images/sc/res/droplink.pngbin0 -> 503 bytes
-rw-r--r--default_images/sc/res/droplink_h.pngbin0 -> 100 bytes
-rw-r--r--default_images/sc/res/dropurl.pngbin0 -> 532 bytes
-rw-r--r--default_images/sc/res/dropurl_h.pngbin0 -> 127 bytes
-rw-r--r--default_images/sc/res/file.pngbin0 -> 736 bytes
-rw-r--r--default_images/sc/res/file_h.pngbin0 -> 126 bytes
-rw-r--r--default_images/sc/res/fx.pngbin0 -> 500 bytes
-rw-r--r--default_images/sc/res/imglst/apptbx/lc26047.pngbin0 -> 1116 bytes
-rw-r--r--default_images/sc/res/imglst/apptbx/lc26048.pngbin0 -> 921 bytes
-rw-r--r--default_images/sc/res/imglst/apptbx/lc26049.pngbin0 -> 370 bytes
-rw-r--r--default_images/sc/res/imglst/apptbx/lc26050.pngbin0 -> 999 bytes
-rw-r--r--default_images/sc/res/imglst/apptbx/lc26051.pngbin0 -> 786 bytes
-rw-r--r--default_images/sc/res/imglst/apptbx/lch26047.pngbin0 -> 197 bytes
-rw-r--r--default_images/sc/res/imglst/apptbx/lch26048.pngbin0 -> 149 bytes
-rw-r--r--default_images/sc/res/imglst/apptbx/lch26049.pngbin0 -> 304 bytes
-rw-r--r--default_images/sc/res/imglst/apptbx/lch26050.pngbin0 -> 165 bytes
-rw-r--r--default_images/sc/res/imglst/apptbx/lch26051.pngbin0 -> 143 bytes
-rw-r--r--default_images/sc/res/imglst/apptbx/sc26047.pngbin0 -> 651 bytes
-rw-r--r--default_images/sc/res/imglst/apptbx/sc26048.pngbin0 -> 563 bytes
-rw-r--r--default_images/sc/res/imglst/apptbx/sc26049.pngbin0 -> 288 bytes
-rw-r--r--default_images/sc/res/imglst/apptbx/sc26050.pngbin0 -> 510 bytes
-rw-r--r--default_images/sc/res/imglst/apptbx/sc26051.pngbin0 -> 477 bytes
-rw-r--r--default_images/sc/res/imglst/apptbx/sch26047.pngbin0 -> 162 bytes
-rw-r--r--default_images/sc/res/imglst/apptbx/sch26048.pngbin0 -> 128 bytes
-rw-r--r--default_images/sc/res/imglst/apptbx/sch26049.pngbin0 -> 249 bytes
-rw-r--r--default_images/sc/res/imglst/apptbx/sch26050.pngbin0 -> 140 bytes
-rw-r--r--default_images/sc/res/imglst/apptbx/sch26051.pngbin0 -> 135 bytes
-rw-r--r--default_images/sc/res/imglst/dbgui/ou01.pngbin0 -> 159 bytes
-rw-r--r--default_images/sc/res/imglst/dbgui/ou010.pngbin0 -> 162 bytes
-rw-r--r--default_images/sc/res/imglst/dbgui/ou011.pngbin0 -> 143 bytes
-rw-r--r--default_images/sc/res/imglst/dbgui/ou012.pngbin0 -> 142 bytes
-rw-r--r--default_images/sc/res/imglst/dbgui/ou02.pngbin0 -> 175 bytes
-rw-r--r--default_images/sc/res/imglst/dbgui/ou03.pngbin0 -> 179 bytes
-rw-r--r--default_images/sc/res/imglst/dbgui/ou04.pngbin0 -> 173 bytes
-rw-r--r--default_images/sc/res/imglst/dbgui/ou05.pngbin0 -> 178 bytes
-rw-r--r--default_images/sc/res/imglst/dbgui/ou06.pngbin0 -> 180 bytes
-rw-r--r--default_images/sc/res/imglst/dbgui/ou07.pngbin0 -> 175 bytes
-rw-r--r--default_images/sc/res/imglst/dbgui/ou08.pngbin0 -> 175 bytes
-rw-r--r--default_images/sc/res/imglst/dbgui/ou09.pngbin0 -> 170 bytes
-rw-r--r--default_images/sc/res/imglst/dbgui/ouh01.pngbin0 -> 159 bytes
-rw-r--r--default_images/sc/res/imglst/dbgui/ouh010.pngbin0 -> 164 bytes
-rw-r--r--default_images/sc/res/imglst/dbgui/ouh011.pngbin0 -> 144 bytes
-rw-r--r--default_images/sc/res/imglst/dbgui/ouh012.pngbin0 -> 148 bytes
-rw-r--r--default_images/sc/res/imglst/dbgui/ouh02.pngbin0 -> 174 bytes
-rw-r--r--default_images/sc/res/imglst/dbgui/ouh03.pngbin0 -> 178 bytes
-rw-r--r--default_images/sc/res/imglst/dbgui/ouh04.pngbin0 -> 174 bytes
-rw-r--r--default_images/sc/res/imglst/dbgui/ouh05.pngbin0 -> 178 bytes
-rw-r--r--default_images/sc/res/imglst/dbgui/ouh06.pngbin0 -> 179 bytes
-rw-r--r--default_images/sc/res/imglst/dbgui/ouh07.pngbin0 -> 176 bytes
-rw-r--r--default_images/sc/res/imglst/dbgui/ouh08.pngbin0 -> 173 bytes
-rw-r--r--default_images/sc/res/imglst/dbgui/ouh09.pngbin0 -> 170 bytes
-rw-r--r--default_images/sc/res/imglst/navipi/na010.pngbin0 -> 796 bytes
-rw-r--r--default_images/sc/res/imglst/navipi/na011.pngbin0 -> 628 bytes
-rw-r--r--default_images/sc/res/imglst/navipi/na03.pngbin0 -> 463 bytes
-rw-r--r--default_images/sc/res/imglst/navipi/na05.pngbin0 -> 674 bytes
-rw-r--r--default_images/sc/res/imglst/navipi/na06.pngbin0 -> 679 bytes
-rw-r--r--default_images/sc/res/imglst/navipi/na07.pngbin0 -> 441 bytes
-rw-r--r--default_images/sc/res/imglst/navipi/na09.pngbin0 -> 393 bytes
-rw-r--r--default_images/sc/res/imglst/navipi/nah010.pngbin0 -> 139 bytes
-rw-r--r--default_images/sc/res/imglst/navipi/nah011.pngbin0 -> 150 bytes
-rw-r--r--default_images/sc/res/imglst/navipi/nah03.pngbin0 -> 125 bytes
-rw-r--r--default_images/sc/res/imglst/navipi/nah05.pngbin0 -> 147 bytes
-rw-r--r--default_images/sc/res/imglst/navipi/nah06.pngbin0 -> 149 bytes
-rw-r--r--default_images/sc/res/imglst/navipi/nah07.pngbin0 -> 149 bytes
-rw-r--r--default_images/sc/res/imglst/navipi/nah09.pngbin0 -> 120 bytes
-rw-r--r--default_images/sc/res/imglst/navipi/nc01.pngbin0 -> 404 bytes
-rw-r--r--default_images/sc/res/imglst/navipi/nc02.pngbin0 -> 422 bytes
-rw-r--r--default_images/sc/res/imglst/navipi/nc03.pngbin0 -> 1007 bytes
-rw-r--r--default_images/sc/res/imglst/navipi/nc04.pngbin0 -> 768 bytes
-rw-r--r--default_images/sc/res/imglst/navipi/nc05.pngbin0 -> 529 bytes
-rw-r--r--default_images/sc/res/imglst/navipi/nc06.pngbin0 -> 625 bytes
-rw-r--r--default_images/sc/res/imglst/navipi/nc07.pngbin0 -> 503 bytes
-rw-r--r--default_images/sc/res/imglst/navipi/nc08.pngbin0 -> 768 bytes
-rw-r--r--default_images/sc/res/imglst/navipi/nch01.pngbin0 -> 245 bytes
-rw-r--r--default_images/sc/res/imglst/navipi/nch02.pngbin0 -> 111 bytes
-rw-r--r--default_images/sc/res/imglst/navipi/nch03.pngbin0 -> 176 bytes
-rw-r--r--default_images/sc/res/imglst/navipi/nch04.pngbin0 -> 132 bytes
-rw-r--r--default_images/sc/res/imglst/navipi/nch05.pngbin0 -> 101 bytes
-rw-r--r--default_images/sc/res/imglst/navipi/nch06.pngbin0 -> 139 bytes
-rw-r--r--default_images/sc/res/imglst/navipi/nch07.pngbin0 -> 100 bytes
-rw-r--r--default_images/sc/res/imglst/navipi/nch08.pngbin0 -> 132 bytes
-rw-r--r--default_images/sc/res/lftrgt.pngbin0 -> 1143 bytes
-rw-r--r--default_images/sc/res/lftrgt_h.pngbin0 -> 364 bytes
-rw-r--r--default_images/sc/res/page.pngbin0 -> 706 bytes
-rw-r--r--default_images/sc/res/page_h.pngbin0 -> 120 bytes
-rw-r--r--default_images/sc/res/pages.pngbin0 -> 828 bytes
-rw-r--r--default_images/sc/res/pages_h.pngbin0 -> 128 bytes
-rw-r--r--default_images/sc/res/popup_select_current.pngbin0 -> 454 bytes
-rw-r--r--default_images/sc/res/popup_unselect_current.pngbin0 -> 348 bytes
-rw-r--r--default_images/sc/res/sf01.pngbin0 -> 623 bytes
-rw-r--r--default_images/sc/res/sf02.pngbin0 -> 572 bytes
-rw-r--r--default_images/sc/res/sfh01.pngbin0 -> 116 bytes
-rw-r--r--default_images/sc/res/sfh02.pngbin0 -> 122 bytes
-rw-r--r--default_images/sc/res/table.pngbin0 -> 490 bytes
-rw-r--r--default_images/sc/res/table_h.pngbin0 -> 123 bytes
-rw-r--r--default_images/sc/res/text.pngbin0 -> 831 bytes
-rw-r--r--default_images/sc/res/text_h.pngbin0 -> 127 bytes
-rw-r--r--default_images/sc/res/time.pngbin0 -> 902 bytes
-rw-r--r--default_images/sc/res/time_h.pngbin0 -> 165 bytes
-rw-r--r--default_images/sc/res/topdown.pngbin0 -> 1280 bytes
-rw-r--r--default_images/sc/res/topdown_h.pngbin0 -> 410 bytes
-rw-r--r--default_images/sd/res/breakplayingblue_16.pngbin0 -> 637 bytes
-rw-r--r--default_images/sd/res/breakplayingblue_16_h.pngbin0 -> 125 bytes
-rw-r--r--default_images/sd/res/chart.pngbin0 -> 2275 bytes
-rw-r--r--default_images/sd/res/chkpage0.pngbin0 -> 645 bytes
-rw-r--r--default_images/sd/res/chkpage0_h.pngbin0 -> 124 bytes
-rw-r--r--default_images/sd/res/chkpage1.pngbin0 -> 910 bytes
-rw-r--r--default_images/sd/res/chkpage1_h.pngbin0 -> 159 bytes
-rw-r--r--default_images/sd/res/click_16.pngbin0 -> 574 bytes
-rw-r--r--default_images/sd/res/click_16_h.pngbin0 -> 165 bytes
-rwxr-xr-xdefault_images/sd/res/comments_indicator.pngbin0 -> 186 bytes
-rwxr-xr-xdefault_images/sd/res/comments_indicator_hc.pngbin0 -> 293 bytes
-rw-r--r--default_images/sd/res/del1bmp.pngbin0 -> 279 bytes
-rw-r--r--default_images/sd/res/del1bmp_h.pngbin0 -> 129 bytes
-rw-r--r--default_images/sd/res/delall.pngbin0 -> 367 bytes
-rw-r--r--default_images/sd/res/delall_h.pngbin0 -> 146 bytes
-rw-r--r--default_images/sd/res/dlgass1.pngbin0 -> 9214 bytes
-rw-r--r--default_images/sd/res/dlgass2.pngbin0 -> 7505 bytes
-rw-r--r--default_images/sd/res/dlgass3.pngbin0 -> 5965 bytes
-rw-r--r--default_images/sd/res/dlgass4.pngbin0 -> 7153 bytes
-rw-r--r--default_images/sd/res/dlgass5.pngbin0 -> 6188 bytes
-rw-r--r--default_images/sd/res/docclose.pngbin0 -> 239 bytes
-rw-r--r--default_images/sd/res/docclose_h.pngbin0 -> 218 bytes
-rw-r--r--default_images/sd/res/docopen.pngbin0 -> 245 bytes
-rw-r--r--default_images/sd/res/docopen_h.pngbin0 -> 249 bytes
-rw-r--r--default_images/sd/res/doctext.pngbin0 -> 223 bytes
-rw-r--r--default_images/sd/res/doctext_h.pngbin0 -> 220 bytes
-rw-r--r--default_images/sd/res/effect_16.pngbin0 -> 462 bytes
-rw-r--r--default_images/sd/res/effect_16_h.pngbin0 -> 130 bytes
-rw-r--r--default_images/sd/res/effectfade_16.pngbin0 -> 539 bytes
-rw-r--r--default_images/sd/res/effectfade_16_h.pngbin0 -> 135 bytes
-rw-r--r--default_images/sd/res/effectole_16.pngbin0 -> 626 bytes
-rw-r--r--default_images/sd/res/effectole_16_h.pngbin0 -> 150 bytes
-rw-r--r--default_images/sd/res/effectpath_16.pngbin0 -> 599 bytes
-rw-r--r--default_images/sd/res/effectpath_16_h.pngbin0 -> 149 bytes
-rw-r--r--default_images/sd/res/effectshape_16.pngbin0 -> 515 bytes
-rw-r--r--default_images/sd/res/effectshape_16_h.pngbin0 -> 133 bytes
-rw-r--r--default_images/sd/res/fade_effect_indicator.pngbin0 -> 277 bytes
-rw-r--r--default_images/sd/res/fade_effect_indicator_hc.pngbin0 -> 125 bytes
-rw-r--r--default_images/sd/res/foilh01.pngbin0 -> 818 bytes
-rw-r--r--default_images/sd/res/foilh01_h.pngbin0 -> 141 bytes
-rw-r--r--default_images/sd/res/foilh02.pngbin0 -> 822 bytes
-rw-r--r--default_images/sd/res/foilh02_h.pngbin0 -> 144 bytes
-rw-r--r--default_images/sd/res/foilh03.pngbin0 -> 996 bytes
-rw-r--r--default_images/sd/res/foilh03_h.pngbin0 -> 183 bytes
-rw-r--r--default_images/sd/res/foilh04.pngbin0 -> 866 bytes
-rw-r--r--default_images/sd/res/foilh04_h.pngbin0 -> 146 bytes
-rw-r--r--default_images/sd/res/foilh06.pngbin0 -> 922 bytes
-rw-r--r--default_images/sd/res/foilh06_h.pngbin0 -> 151 bytes
-rw-r--r--default_images/sd/res/foilh09.pngbin0 -> 923 bytes
-rw-r--r--default_images/sd/res/foilh09_h.pngbin0 -> 157 bytes
-rw-r--r--default_images/sd/res/foiln01.pngbin0 -> 904 bytes
-rw-r--r--default_images/sd/res/foiln01_h.pngbin0 -> 182 bytes
-rw-r--r--default_images/sd/res/foilnone.pngbin0 -> 1184 bytes
-rw-r--r--default_images/sd/res/get1obj.pngbin0 -> 251 bytes
-rw-r--r--default_images/sd/res/get1obj_h.pngbin0 -> 135 bytes
-rw-r--r--default_images/sd/res/getallob.pngbin0 -> 314 bytes
-rw-r--r--default_images/sd/res/getallob_h.pngbin0 -> 158 bytes
-rw-r--r--default_images/sd/res/graphic.pngbin0 -> 866 bytes
-rw-r--r--default_images/sd/res/graphic_h.pngbin0 -> 139 bytes
-rw-r--r--default_images/sd/res/group.pngbin0 -> 630 bytes
-rw-r--r--default_images/sd/res/group_h.pngbin0 -> 135 bytes
-rw-r--r--default_images/sd/res/hlplhorz.pngbin0 -> 549 bytes
-rw-r--r--default_images/sd/res/hlplhorz_h.pngbin0 -> 119 bytes
-rw-r--r--default_images/sd/res/hlplvert.pngbin0 -> 544 bytes
-rw-r--r--default_images/sd/res/hlplvert_h.pngbin0 -> 116 bytes
-rw-r--r--default_images/sd/res/hlppoint.pngbin0 -> 634 bytes
-rw-r--r--default_images/sd/res/hlppoint_h.pngbin0 -> 136 bytes
-rw-r--r--default_images/sd/res/image.pngbin0 -> 8211 bytes
-rw-r--r--default_images/sd/res/imagelst/nv010.pngbin0 -> 532 bytes
-rw-r--r--default_images/sd/res/imagelst/nv02.pngbin0 -> 501 bytes
-rw-r--r--default_images/sd/res/imagelst/nv03.pngbin0 -> 530 bytes
-rw-r--r--default_images/sd/res/imagelst/nv04.pngbin0 -> 467 bytes
-rw-r--r--default_images/sd/res/imagelst/nv05.pngbin0 -> 474 bytes
-rw-r--r--default_images/sd/res/imagelst/nv06.pngbin0 -> 530 bytes
-rw-r--r--default_images/sd/res/imagelst/nv08.pngbin0 -> 660 bytes
-rw-r--r--default_images/sd/res/imagelst/nv09.pngbin0 -> 503 bytes
-rw-r--r--default_images/sd/res/imagelst/nvh010.pngbin0 -> 127 bytes
-rw-r--r--default_images/sd/res/imagelst/nvh02.pngbin0 -> 151 bytes
-rw-r--r--default_images/sd/res/imagelst/nvh03.pngbin0 -> 119 bytes
-rw-r--r--default_images/sd/res/imagelst/nvh04.pngbin0 -> 115 bytes
-rw-r--r--default_images/sd/res/imagelst/nvh05.pngbin0 -> 108 bytes
-rw-r--r--default_images/sd/res/imagelst/nvh06.pngbin0 -> 115 bytes
-rw-r--r--default_images/sd/res/imagelst/nvh08.pngbin0 -> 125 bytes
-rw-r--r--default_images/sd/res/imagelst/nvh09.pngbin0 -> 100 bytes
-rw-r--r--default_images/sd/res/imagelst/sc27036.pngbin0 -> 779 bytes
-rw-r--r--default_images/sd/res/imagelst/sf01.pngbin0 -> 597 bytes
-rw-r--r--default_images/sd/res/imagelst/sf02.pngbin0 -> 638 bytes
-rw-r--r--default_images/sd/res/imagelst/sfh01.pngbin0 -> 153 bytes
-rw-r--r--default_images/sd/res/imagelst/sfh02.pngbin0 -> 146 bytes
-rw-r--r--default_images/sd/res/layout_empty.pngbin0 -> 605 bytes
-rw-r--r--default_images/sd/res/layout_empty_h.pngbin0 -> 563 bytes
-rw-r--r--default_images/sd/res/layout_head01.pngbin0 -> 747 bytes
-rw-r--r--default_images/sd/res/layout_head01_h.pngbin0 -> 3709 bytes
-rw-r--r--default_images/sd/res/layout_head02.pngbin0 -> 839 bytes
-rw-r--r--default_images/sd/res/layout_head02_h.pngbin0 -> 3710 bytes
-rw-r--r--default_images/sd/res/layout_head02a.pngbin0 -> 874 bytes
-rw-r--r--default_images/sd/res/layout_head02a_h.pngbin0 -> 3737 bytes
-rw-r--r--default_images/sd/res/layout_head02b.pngbin0 -> 853 bytes
-rw-r--r--default_images/sd/res/layout_head02b_h.pngbin0 -> 3729 bytes
-rw-r--r--default_images/sd/res/layout_head03.pngbin0 -> 871 bytes
-rw-r--r--default_images/sd/res/layout_head03_h.pngbin0 -> 3711 bytes
-rw-r--r--default_images/sd/res/layout_head03a.pngbin0 -> 885 bytes
-rw-r--r--default_images/sd/res/layout_head03a_h.pngbin0 -> 3748 bytes
-rw-r--r--default_images/sd/res/layout_head03b.pngbin0 -> 912 bytes
-rw-r--r--default_images/sd/res/layout_head03b_h.pngbin0 -> 361 bytes
-rw-r--r--default_images/sd/res/layout_head03c.pngbin0 -> 906 bytes
-rw-r--r--default_images/sd/res/layout_head03c_h.pngbin0 -> 368 bytes
-rw-r--r--default_images/sd/res/layout_head04.pngbin0 -> 904 bytes
-rw-r--r--default_images/sd/res/layout_head04_h.pngbin0 -> 3749 bytes
-rw-r--r--default_images/sd/res/layout_head06.pngbin0 -> 904 bytes
-rw-r--r--default_images/sd/res/layout_head06_h.pngbin0 -> 3759 bytes
-rw-r--r--default_images/sd/res/layout_textonly.pngbin0 -> 827 bytes
-rw-r--r--default_images/sd/res/layout_textonly_h.pngbin0 -> 3695 bytes
-rw-r--r--default_images/sd/res/layout_vertical01.pngbin0 -> 927 bytes
-rw-r--r--default_images/sd/res/layout_vertical01_h.pngbin0 -> 3719 bytes
-rw-r--r--default_images/sd/res/layout_vertical02.pngbin0 -> 956 bytes
-rw-r--r--default_images/sd/res/layout_vertical02_h.pngbin0 -> 3736 bytes
-rw-r--r--default_images/sd/res/minus_h.pngbin0 -> 220 bytes
-rw-r--r--default_images/sd/res/mspgmode.pngbin0 -> 239 bytes
-rw-r--r--default_images/sd/res/mspgmode_h.pngbin0 -> 111 bytes
-rw-r--r--default_images/sd/res/object.pngbin0 -> 2678 bytes
-rw-r--r--default_images/sd/res/objects.pngbin0 -> 526 bytes
-rw-r--r--default_images/sd/res/objects_h.pngbin0 -> 107 bytes
-rw-r--r--default_images/sd/res/objekt.pngbin0 -> 302 bytes
-rw-r--r--default_images/sd/res/objekt_h.pngbin0 -> 140 bytes
-rw-r--r--default_images/sd/res/ole.pngbin0 -> 729 bytes
-rw-r--r--default_images/sd/res/ole_h.pngbin0 -> 146 bytes
-rw-r--r--default_images/sd/res/orgchart.pngbin0 -> 1637 bytes
-rw-r--r--default_images/sd/res/page.pngbin0 -> 537 bytes
-rw-r--r--default_images/sd/res/page_h.pngbin0 -> 114 bytes
-rw-r--r--default_images/sd/res/pageexcl.pngbin0 -> 505 bytes
-rw-r--r--default_images/sd/res/pageexcl_h.pngbin0 -> 108 bytes
-rw-r--r--default_images/sd/res/pagemode.pngbin0 -> 219 bytes
-rw-r--r--default_images/sd/res/pagemode_h.pngbin0 -> 103 bytes
-rw-r--r--default_images/sd/res/pageobjs.pngbin0 -> 645 bytes
-rw-r--r--default_images/sd/res/pageobjs_h.pngbin0 -> 140 bytes
-rw-r--r--default_images/sd/res/pagobjex.pngbin0 -> 601 bytes
-rw-r--r--default_images/sd/res/pagobjex_h.pngbin0 -> 121 bytes
-rw-r--r--default_images/sd/res/pipette.pngbin0 -> 594 bytes
-rw-r--r--default_images/sd/res/pipette_h.pngbin0 -> 141 bytes
-rw-r--r--default_images/sd/res/placeholder_chart_large.pngbin0 -> 561 bytes
-rw-r--r--default_images/sd/res/placeholder_chart_large_hover.pngbin0 -> 560 bytes
-rw-r--r--default_images/sd/res/placeholder_chart_small.pngbin0 -> 435 bytes
-rw-r--r--default_images/sd/res/placeholder_chart_small_hover.pngbin0 -> 435 bytes
-rw-r--r--default_images/sd/res/placeholder_image_large.pngbin0 -> 555 bytes
-rw-r--r--default_images/sd/res/placeholder_image_large_hover.pngbin0 -> 555 bytes
-rw-r--r--default_images/sd/res/placeholder_image_small.pngbin0 -> 418 bytes
-rw-r--r--default_images/sd/res/placeholder_image_small_hover.pngbin0 -> 417 bytes
-rw-r--r--default_images/sd/res/placeholder_movie_large.pngbin0 -> 572 bytes
-rw-r--r--default_images/sd/res/placeholder_movie_large_hover.pngbin0 -> 572 bytes
-rw-r--r--default_images/sd/res/placeholder_movie_small.pngbin0 -> 439 bytes
-rw-r--r--default_images/sd/res/placeholder_movie_small_hover.pngbin0 -> 439 bytes
-rw-r--r--default_images/sd/res/placeholder_table_large.pngbin0 -> 524 bytes
-rw-r--r--default_images/sd/res/placeholder_table_large_hover.pngbin0 -> 524 bytes
-rw-r--r--default_images/sd/res/placeholder_table_small.pngbin0 -> 400 bytes
-rw-r--r--default_images/sd/res/placeholder_table_small_hover.pngbin0 -> 400 bytes
-rw-r--r--default_images/sd/res/playblue_16.pngbin0 -> 712 bytes
-rw-r--r--default_images/sd/res/playblue_16_h.pngbin0 -> 131 bytes
-rw-r--r--default_images/sd/res/plus_h.pngbin0 -> 228 bytes
-rw-r--r--default_images/sd/res/pubdes.pngbin0 -> 2065 bytes
-rw-r--r--default_images/sd/res/pubdes2.pngbin0 -> 2250 bytes
-rw-r--r--default_images/sd/res/pubdes3.pngbin0 -> 3421 bytes
-rw-r--r--default_images/sd/res/pubdes4.pngbin0 -> 3314 bytes
-rw-r--r--default_images/sd/res/pubdlg1.pngbin0 -> 11880 bytes
-rw-r--r--default_images/sd/res/pubdlg2.pngbin0 -> 11026 bytes
-rw-r--r--default_images/sd/res/pubdlg3.pngbin0 -> 13014 bytes
-rw-r--r--default_images/sd/res/pubdlg4.pngbin0 -> 10620 bytes
-rw-r--r--default_images/sd/res/pubdlg5.pngbin0 -> 13334 bytes
-rw-r--r--default_images/sd/res/stopplayingblue_16.pngbin0 -> 653 bytes
-rw-r--r--default_images/sd/res/stopplayingblue_16_h.pngbin0 -> 123 bytes
-rw-r--r--default_images/sd/res/table.pngbin0 -> 1728 bytes
-rw-r--r--default_images/sd/res/time_16.pngbin0 -> 830 bytes
-rw-r--r--default_images/sd/res/time_16_h.pngbin0 -> 163 bytes
-rw-r--r--default_images/sd/res/waiticon.pngbin0 -> 243 bytes
-rwxr-xr-xdefault_images/sfx2/res/128x128_calc_doc-p.pngbin0 -> 4802 bytes
-rwxr-xr-xdefault_images/sfx2/res/128x128_draw_doc-p.pngbin0 -> 6055 bytes
-rwxr-xr-xdefault_images/sfx2/res/128x128_impress_doc-p.pngbin0 -> 6219 bytes
-rwxr-xr-xdefault_images/sfx2/res/128x128_math_doc-p.pngbin0 -> 5852 bytes
-rwxr-xr-xdefault_images/sfx2/res/128x128_writer_doc-p.pngbin0 -> 3732 bytes
-rw-r--r--default_images/sfx2/res/an01.pngbin0 -> 6796 bytes
-rw-r--r--default_images/sfx2/res/an02.pngbin0 -> 6125 bytes
-rw-r--r--default_images/sfx2/res/an03.pngbin0 -> 5474 bytes
-rw-r--r--default_images/sfx2/res/an04.pngbin0 -> 4714 bytes
-rw-r--r--default_images/sfx2/res/an05.pngbin0 -> 3872 bytes
-rw-r--r--default_images/sfx2/res/an06.pngbin0 -> 2708 bytes
-rw-r--r--default_images/sfx2/res/closedoc.pngbin0 -> 309 bytes
-rw-r--r--default_images/sfx2/res/closedochc.pngbin0 -> 106 bytes
-rw-r--r--default_images/sfx2/res/command.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/deleterow.pngbin0 -> 195 bytes
-rw-r--r--default_images/sfx2/res/deleterow_h.pngbin0 -> 109 bytes
-rw-r--r--default_images/sfx2/res/dictate.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/doccl.pngbin0 -> 573 bytes
-rw-r--r--default_images/sfx2/res/doccl_h.pngbin0 -> 121 bytes
-rw-r--r--default_images/sfx2/res/favourite.pngbin0 -> 674 bytes
-rw-r--r--default_images/sfx2/res/favourite_big.pngbin0 -> 902 bytes
-rw-r--r--default_images/sfx2/res/favourite_big_h.pngbin0 -> 152 bytes
-rw-r--r--default_images/sfx2/res/favourite_h.pngbin0 -> 135 bytes
-rw-r--r--default_images/sfx2/res/hlpbookclosed.pngbin0 -> 596 bytes
-rw-r--r--default_images/sfx2/res/hlpbookclosed_h.pngbin0 -> 173 bytes
-rw-r--r--default_images/sfx2/res/hlpbookopen.pngbin0 -> 753 bytes
-rw-r--r--default_images/sfx2/res/hlpbookopen_h.pngbin0 -> 199 bytes
-rw-r--r--default_images/sfx2/res/hlpdoc.pngbin0 -> 939 bytes
-rw-r--r--default_images/sfx2/res/hlpdoc_h.pngbin0 -> 144 bytes
-rw-r--r--default_images/sfx2/res/indexoff_big.pngbin0 -> 869 bytes
-rw-r--r--default_images/sfx2/res/indexoff_big_h.pngbin0 -> 155 bytes
-rw-r--r--default_images/sfx2/res/indexoff_small.pngbin0 -> 674 bytes
-rw-r--r--default_images/sfx2/res/indexoff_small_h.pngbin0 -> 138 bytes
-rw-r--r--default_images/sfx2/res/indexon_big.pngbin0 -> 838 bytes
-rw-r--r--default_images/sfx2/res/indexon_big_h.pngbin0 -> 151 bytes
-rw-r--r--default_images/sfx2/res/indexon_small.pngbin0 -> 663 bytes
-rw-r--r--default_images/sfx2/res/indexon_small_h.pngbin0 -> 134 bytes
-rw-r--r--default_images/sfx2/res/lco.pngbin0 -> 1869 bytes
-rw-r--r--default_images/sfx2/res/lmo.pngbin0 -> 1869 bytes
-rw-r--r--default_images/sfx2/res/ln01.pngbin0 -> 246 bytes
-rw-r--r--default_images/sfx2/res/ln010.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln0100.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln0101.pngbin0 -> 308 bytes
-rw-r--r--default_images/sfx2/res/ln0102.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln0103.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln0104.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln0105.pngbin0 -> 1430 bytes
-rw-r--r--default_images/sfx2/res/ln0106.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln0107.pngbin0 -> 625 bytes
-rw-r--r--default_images/sfx2/res/ln0108.pngbin0 -> 1218 bytes
-rw-r--r--default_images/sfx2/res/ln0109.pngbin0 -> 330 bytes
-rw-r--r--default_images/sfx2/res/ln011.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln0110.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln0111.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln0112.pngbin0 -> 349 bytes
-rw-r--r--default_images/sfx2/res/ln0113.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln0114.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln0115.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln0116.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln0117.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln0118.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln0119.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln012.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln0120.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln0121.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln0122.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln0123.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln0124.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln0125.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln0126.pngbin0 -> 418 bytes
-rw-r--r--default_images/sfx2/res/ln013.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln014.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln015.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln016.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln017.pngbin0 -> 444 bytes
-rw-r--r--default_images/sfx2/res/ln018.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln019.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln02.pngbin0 -> 625 bytes
-rw-r--r--default_images/sfx2/res/ln020.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln021.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln022.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln023.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln024.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln025.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln026.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln027.pngbin0 -> 409 bytes
-rw-r--r--default_images/sfx2/res/ln028.pngbin0 -> 581 bytes
-rw-r--r--default_images/sfx2/res/ln029.pngbin0 -> 772 bytes
-rw-r--r--default_images/sfx2/res/ln03.pngbin0 -> 625 bytes
-rw-r--r--default_images/sfx2/res/ln030.pngbin0 -> 648 bytes
-rw-r--r--default_images/sfx2/res/ln031.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln032.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln033.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln034.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln035.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln036.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln037.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln038.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln039.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln04.pngbin0 -> 625 bytes
-rw-r--r--default_images/sfx2/res/ln040.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln041.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln042.pngbin0 -> 388 bytes
-rw-r--r--default_images/sfx2/res/ln043.pngbin0 -> 401 bytes
-rw-r--r--default_images/sfx2/res/ln044.pngbin0 -> 322 bytes
-rw-r--r--default_images/sfx2/res/ln045.pngbin0 -> 1418 bytes
-rw-r--r--default_images/sfx2/res/ln046.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln047.pngbin0 -> 448 bytes
-rw-r--r--default_images/sfx2/res/ln048.pngbin0 -> 1315 bytes
-rw-r--r--default_images/sfx2/res/ln049.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln05.pngbin0 -> 625 bytes
-rw-r--r--default_images/sfx2/res/ln050.pngbin0 -> 1218 bytes
-rw-r--r--default_images/sfx2/res/ln051.pngbin0 -> 371 bytes
-rw-r--r--default_images/sfx2/res/ln052.pngbin0 -> 1418 bytes
-rw-r--r--default_images/sfx2/res/ln053.pngbin0 -> 1315 bytes
-rw-r--r--default_images/sfx2/res/ln054.pngbin0 -> 1418 bytes
-rw-r--r--default_images/sfx2/res/ln055.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln056.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln057.pngbin0 -> 1418 bytes
-rw-r--r--default_images/sfx2/res/ln058.pngbin0 -> 370 bytes
-rw-r--r--default_images/sfx2/res/ln059.pngbin0 -> 1430 bytes
-rw-r--r--default_images/sfx2/res/ln06.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln060.pngbin0 -> 434 bytes
-rw-r--r--default_images/sfx2/res/ln061.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln062.pngbin0 -> 330 bytes
-rw-r--r--default_images/sfx2/res/ln063.pngbin0 -> 314 bytes
-rw-r--r--default_images/sfx2/res/ln064.pngbin0 -> 349 bytes
-rw-r--r--default_images/sfx2/res/ln065.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln066.pngbin0 -> 860 bytes
-rw-r--r--default_images/sfx2/res/ln067.pngbin0 -> 1315 bytes
-rw-r--r--default_images/sfx2/res/ln068.pngbin0 -> 350 bytes
-rw-r--r--default_images/sfx2/res/ln069.pngbin0 -> 1315 bytes
-rw-r--r--default_images/sfx2/res/ln07.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln070.pngbin0 -> 1418 bytes
-rw-r--r--default_images/sfx2/res/ln071.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln072.pngbin0 -> 332 bytes
-rw-r--r--default_images/sfx2/res/ln073.pngbin0 -> 1218 bytes
-rw-r--r--default_images/sfx2/res/ln074.pngbin0 -> 1418 bytes
-rw-r--r--default_images/sfx2/res/ln075.pngbin0 -> 1418 bytes
-rw-r--r--default_images/sfx2/res/ln076.pngbin0 -> 353 bytes
-rw-r--r--default_images/sfx2/res/ln077.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln078.pngbin0 -> 551 bytes
-rw-r--r--default_images/sfx2/res/ln079.pngbin0 -> 547 bytes
-rw-r--r--default_images/sfx2/res/ln08.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln080.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln081.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln082.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln083.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln084.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln085.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln086.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln087.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln088.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln089.pngbin0 -> 860 bytes
-rw-r--r--default_images/sfx2/res/ln09.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln090.pngbin0 -> 821 bytes
-rw-r--r--default_images/sfx2/res/ln091.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln092.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln093.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln094.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln095.pngbin0 -> 749 bytes
-rw-r--r--default_images/sfx2/res/ln096.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln097.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln098.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/ln099.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/lxrun.pngbin0 -> 315 bytes
-rw-r--r--default_images/sfx2/res/minus.pngbin0 -> 293 bytes
-rw-r--r--default_images/sfx2/res/newex.pngbin0 -> 613 bytes
-rw-r--r--default_images/sfx2/res/newex_h.pngbin0 -> 147 bytes
-rw-r--r--default_images/sfx2/res/phndial1.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/phndial2.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/phndis.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/phnidle.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/phnring1.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/phnring2.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/phnspk1.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/plus.pngbin0 -> 331 bytes
-rw-r--r--default_images/sfx2/res/pr01.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/pr010.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/pr011.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/pr012.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/pr013.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/pr014.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/pr015.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/pr016.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/pr02.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/pr03.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/pr04.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/pr05.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/pr06.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/pr07.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/pr08.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/pr09.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sco.pngbin0 -> 1222 bytes
-rwxr-xr-xdefault_images/sfx2/res/signet.pngbin0 -> 4599 bytes
-rw-r--r--default_images/sfx2/res/smo.pngbin0 -> 1222 bytes
-rw-r--r--default_images/sfx2/res/sn01.pngbin0 -> 454 bytes
-rw-r--r--default_images/sfx2/res/sn010.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn0100.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn0101.pngbin0 -> 252 bytes
-rw-r--r--default_images/sfx2/res/sn0102.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn0103.pngbin0 -> 265 bytes
-rw-r--r--default_images/sfx2/res/sn0104.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn0105.pngbin0 -> 271 bytes
-rw-r--r--default_images/sfx2/res/sn0106.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn0107.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn0108.pngbin0 -> 596 bytes
-rw-r--r--default_images/sfx2/res/sn0109.pngbin0 -> 268 bytes
-rw-r--r--default_images/sfx2/res/sn011.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn0110.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn0111.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn0112.pngbin0 -> 255 bytes
-rw-r--r--default_images/sfx2/res/sn0113.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn0114.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn0115.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn0116.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn0117.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn0118.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn0119.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn012.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn0120.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn0121.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn0122.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn0123.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn0124.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn0125.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn0126.pngbin0 -> 253 bytes
-rw-r--r--default_images/sfx2/res/sn013.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn014.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn015.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn016.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn017.pngbin0 -> 510 bytes
-rw-r--r--default_images/sfx2/res/sn018.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn019.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn02.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn020.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn021.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn022.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn023.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn024.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn025.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn026.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn027.pngbin0 -> 335 bytes
-rw-r--r--default_images/sfx2/res/sn028.pngbin0 -> 433 bytes
-rw-r--r--default_images/sfx2/res/sn029.pngbin0 -> 534 bytes
-rw-r--r--default_images/sfx2/res/sn03.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn030.pngbin0 -> 392 bytes
-rw-r--r--default_images/sfx2/res/sn031.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn032.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn033.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn034.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn035.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn036.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn037.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn038.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn039.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn04.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn040.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn041.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn042.pngbin0 -> 272 bytes
-rw-r--r--default_images/sfx2/res/sn043.pngbin0 -> 286 bytes
-rw-r--r--default_images/sfx2/res/sn044.pngbin0 -> 271 bytes
-rw-r--r--default_images/sfx2/res/sn045.pngbin0 -> 725 bytes
-rw-r--r--default_images/sfx2/res/sn046.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn047.pngbin0 -> 317 bytes
-rw-r--r--default_images/sfx2/res/sn048.pngbin0 -> 701 bytes
-rw-r--r--default_images/sfx2/res/sn049.pngbin0 -> 725 bytes
-rw-r--r--default_images/sfx2/res/sn05.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn050.pngbin0 -> 596 bytes
-rw-r--r--default_images/sfx2/res/sn051.pngbin0 -> 271 bytes
-rw-r--r--default_images/sfx2/res/sn052.pngbin0 -> 725 bytes
-rw-r--r--default_images/sfx2/res/sn053.pngbin0 -> 701 bytes
-rw-r--r--default_images/sfx2/res/sn054.pngbin0 -> 725 bytes
-rw-r--r--default_images/sfx2/res/sn055.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn056.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn057.pngbin0 -> 725 bytes
-rw-r--r--default_images/sfx2/res/sn058.pngbin0 -> 276 bytes
-rw-r--r--default_images/sfx2/res/sn059.pngbin0 -> 271 bytes
-rw-r--r--default_images/sfx2/res/sn06.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn060.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn061.pngbin0 -> 265 bytes
-rw-r--r--default_images/sfx2/res/sn062.pngbin0 -> 268 bytes
-rw-r--r--default_images/sfx2/res/sn063.pngbin0 -> 269 bytes
-rw-r--r--default_images/sfx2/res/sn064.pngbin0 -> 255 bytes
-rw-r--r--default_images/sfx2/res/sn065.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn066.pngbin0 -> 484 bytes
-rw-r--r--default_images/sfx2/res/sn067.pngbin0 -> 701 bytes
-rw-r--r--default_images/sfx2/res/sn068.pngbin0 -> 265 bytes
-rw-r--r--default_images/sfx2/res/sn069.pngbin0 -> 701 bytes
-rw-r--r--default_images/sfx2/res/sn07.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn070.pngbin0 -> 725 bytes
-rw-r--r--default_images/sfx2/res/sn071.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn072.pngbin0 -> 267 bytes
-rw-r--r--default_images/sfx2/res/sn073.pngbin0 -> 596 bytes
-rw-r--r--default_images/sfx2/res/sn074.pngbin0 -> 725 bytes
-rw-r--r--default_images/sfx2/res/sn075.pngbin0 -> 725 bytes
-rw-r--r--default_images/sfx2/res/sn076.pngbin0 -> 262 bytes
-rw-r--r--default_images/sfx2/res/sn077.pngbin0 -> 701 bytes
-rw-r--r--default_images/sfx2/res/sn078.pngbin0 -> 314 bytes
-rw-r--r--default_images/sfx2/res/sn079.pngbin0 -> 280 bytes
-rw-r--r--default_images/sfx2/res/sn08.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn080.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn081.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn082.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn083.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn084.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn085.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn086.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn087.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn088.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn089.pngbin0 -> 484 bytes
-rw-r--r--default_images/sfx2/res/sn09.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn090.pngbin0 -> 485 bytes
-rw-r--r--default_images/sfx2/res/sn091.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn092.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn093.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn094.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn095.pngbin0 -> 525 bytes
-rw-r--r--default_images/sfx2/res/sn096.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn097.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn098.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/sn099.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/speekoff.pngbin0 -> 202 bytes
-rw-r--r--default_images/sfx2/res/styfam1.pngbin0 -> 667 bytes
-rw-r--r--default_images/sfx2/res/styfam1_h.pngbin0 -> 142 bytes
-rw-r--r--default_images/sfx2/res/styfam2.pngbin0 -> 657 bytes
-rw-r--r--default_images/sfx2/res/styfam2_h.pngbin0 -> 124 bytes
-rw-r--r--default_images/sfx2/res/styfam3.pngbin0 -> 268 bytes
-rw-r--r--default_images/sfx2/res/styfam3_h.pngbin0 -> 165 bytes
-rw-r--r--default_images/sfx2/res/styfam4.pngbin0 -> 572 bytes
-rw-r--r--default_images/sfx2/res/styfam4_h.pngbin0 -> 122 bytes
-rw-r--r--default_images/starmath/res/al21801.pngbin0 -> 252 bytes
-rw-r--r--default_images/starmath/res/al21802.pngbin0 -> 233 bytes
-rw-r--r--default_images/starmath/res/al21803.pngbin0 -> 262 bytes
-rw-r--r--default_images/starmath/res/al21804.pngbin0 -> 252 bytes
-rw-r--r--default_images/starmath/res/al21805.pngbin0 -> 212 bytes
-rw-r--r--default_images/starmath/res/al21806.pngbin0 -> 218 bytes
-rw-r--r--default_images/starmath/res/al21808.pngbin0 -> 217 bytes
-rw-r--r--default_images/starmath/res/al21809.pngbin0 -> 273 bytes
-rw-r--r--default_images/starmath/res/al21810.pngbin0 -> 253 bytes
-rw-r--r--default_images/starmath/res/al21811.pngbin0 -> 284 bytes
-rw-r--r--default_images/starmath/res/al21812.pngbin0 -> 282 bytes
-rw-r--r--default_images/starmath/res/al21813.pngbin0 -> 233 bytes
-rw-r--r--default_images/starmath/res/al21814.pngbin0 -> 236 bytes
-rw-r--r--default_images/starmath/res/al21821.pngbin0 -> 249 bytes
-rw-r--r--default_images/starmath/res/al21822.pngbin0 -> 259 bytes
-rw-r--r--default_images/starmath/res/al21823.pngbin0 -> 239 bytes
-rw-r--r--default_images/starmath/res/al21824.pngbin0 -> 258 bytes
-rw-r--r--default_images/starmath/res/al21825.pngbin0 -> 228 bytes
-rw-r--r--default_images/starmath/res/al21826.pngbin0 -> 235 bytes
-rw-r--r--default_images/starmath/res/alh21801.pngbin0 -> 155 bytes
-rw-r--r--default_images/starmath/res/alh21802.pngbin0 -> 138 bytes
-rw-r--r--default_images/starmath/res/alh21803.pngbin0 -> 166 bytes
-rw-r--r--default_images/starmath/res/alh21804.pngbin0 -> 153 bytes
-rw-r--r--default_images/starmath/res/alh21805.pngbin0 -> 130 bytes
-rw-r--r--default_images/starmath/res/alh21806.pngbin0 -> 131 bytes
-rw-r--r--default_images/starmath/res/alh21808.pngbin0 -> 138 bytes
-rw-r--r--default_images/starmath/res/alh21809.pngbin0 -> 163 bytes
-rw-r--r--default_images/starmath/res/alh21810.pngbin0 -> 146 bytes
-rw-r--r--default_images/starmath/res/alh21811.pngbin0 -> 173 bytes
-rw-r--r--default_images/starmath/res/alh21812.pngbin0 -> 165 bytes
-rw-r--r--default_images/starmath/res/alh21813.pngbin0 -> 140 bytes
-rw-r--r--default_images/starmath/res/alh21814.pngbin0 -> 142 bytes
-rw-r--r--default_images/starmath/res/alh21821.pngbin0 -> 167 bytes
-rw-r--r--default_images/starmath/res/alh21822.pngbin0 -> 174 bytes
-rw-r--r--default_images/starmath/res/alh21823.pngbin0 -> 136 bytes
-rw-r--r--default_images/starmath/res/alh21824.pngbin0 -> 148 bytes
-rw-r--r--default_images/starmath/res/alh21825.pngbin0 -> 151 bytes
-rw-r--r--default_images/starmath/res/alh21826.pngbin0 -> 152 bytes
-rw-r--r--default_images/starmath/res/ar_right.pngbin0 -> 1451 bytes
-rw-r--r--default_images/starmath/res/ar_right_h.pngbin0 -> 179 bytes
-rw-r--r--default_images/starmath/res/at21701.pngbin0 -> 234 bytes
-rw-r--r--default_images/starmath/res/at21702.pngbin0 -> 230 bytes
-rw-r--r--default_images/starmath/res/at21703.pngbin0 -> 241 bytes
-rw-r--r--default_images/starmath/res/at21704.pngbin0 -> 252 bytes
-rw-r--r--default_images/starmath/res/at21705.pngbin0 -> 238 bytes
-rw-r--r--default_images/starmath/res/at21706.pngbin0 -> 255 bytes
-rw-r--r--default_images/starmath/res/at21707.pngbin0 -> 251 bytes
-rw-r--r--default_images/starmath/res/at21708.pngbin0 -> 250 bytes
-rw-r--r--default_images/starmath/res/at21709.pngbin0 -> 240 bytes
-rw-r--r--default_images/starmath/res/at21710.pngbin0 -> 236 bytes
-rw-r--r--default_images/starmath/res/at21711.pngbin0 -> 244 bytes
-rw-r--r--default_images/starmath/res/at21712.pngbin0 -> 244 bytes
-rw-r--r--default_images/starmath/res/at21713.pngbin0 -> 270 bytes
-rw-r--r--default_images/starmath/res/at21714.pngbin0 -> 270 bytes
-rw-r--r--default_images/starmath/res/at21715.pngbin0 -> 271 bytes
-rw-r--r--default_images/starmath/res/at21716.pngbin0 -> 183 bytes
-rw-r--r--default_images/starmath/res/at21717.pngbin0 -> 635 bytes
-rw-r--r--default_images/starmath/res/at21718.pngbin0 -> 541 bytes
-rw-r--r--default_images/starmath/res/at21719.pngbin0 -> 1473 bytes
-rw-r--r--default_images/starmath/res/at21720.pngbin0 -> 1298 bytes
-rw-r--r--default_images/starmath/res/at21722.pngbin0 -> 302 bytes
-rw-r--r--default_images/starmath/res/at21723.pngbin0 -> 288 bytes
-rw-r--r--default_images/starmath/res/at21724.pngbin0 -> 289 bytes
-rw-r--r--default_images/starmath/res/ath21701.pngbin0 -> 211 bytes
-rw-r--r--default_images/starmath/res/ath21702.pngbin0 -> 210 bytes
-rw-r--r--default_images/starmath/res/ath21703.pngbin0 -> 222 bytes
-rw-r--r--default_images/starmath/res/ath21704.pngbin0 -> 214 bytes
-rw-r--r--default_images/starmath/res/ath21705.pngbin0 -> 203 bytes
-rw-r--r--default_images/starmath/res/ath21706.pngbin0 -> 218 bytes
-rw-r--r--default_images/starmath/res/ath21707.pngbin0 -> 212 bytes
-rw-r--r--default_images/starmath/res/ath21708.pngbin0 -> 219 bytes
-rw-r--r--default_images/starmath/res/ath21709.pngbin0 -> 216 bytes
-rw-r--r--default_images/starmath/res/ath21710.pngbin0 -> 214 bytes
-rw-r--r--default_images/starmath/res/ath21711.pngbin0 -> 219 bytes
-rw-r--r--default_images/starmath/res/ath21712.pngbin0 -> 220 bytes
-rw-r--r--default_images/starmath/res/ath21713.pngbin0 -> 235 bytes
-rw-r--r--default_images/starmath/res/ath21714.pngbin0 -> 235 bytes
-rw-r--r--default_images/starmath/res/ath21715.pngbin0 -> 225 bytes
-rw-r--r--default_images/starmath/res/ath21716.pngbin0 -> 219 bytes
-rw-r--r--default_images/starmath/res/ath21717.pngbin0 -> 145 bytes
-rw-r--r--default_images/starmath/res/ath21718.pngbin0 -> 155 bytes
-rw-r--r--default_images/starmath/res/ath21719.pngbin0 -> 176 bytes
-rw-r--r--default_images/starmath/res/ath21720.pngbin0 -> 157 bytes
-rw-r--r--default_images/starmath/res/ath21722.pngbin0 -> 261 bytes
-rw-r--r--default_images/starmath/res/ath21723.pngbin0 -> 260 bytes
-rw-r--r--default_images/starmath/res/ath21724.pngbin0 -> 256 bytes
-rw-r--r--default_images/starmath/res/bi21301.pngbin0 -> 246 bytes
-rw-r--r--default_images/starmath/res/bi21302.pngbin0 -> 239 bytes
-rw-r--r--default_images/starmath/res/bi21303.pngbin0 -> 242 bytes
-rw-r--r--default_images/starmath/res/bi21304.pngbin0 -> 228 bytes
-rw-r--r--default_images/starmath/res/bi21305.pngbin0 -> 233 bytes
-rw-r--r--default_images/starmath/res/bi21306.pngbin0 -> 234 bytes
-rw-r--r--default_images/starmath/res/bi21307.pngbin0 -> 244 bytes
-rw-r--r--default_images/starmath/res/bi21308.pngbin0 -> 241 bytes
-rw-r--r--default_images/starmath/res/bi21309.pngbin0 -> 233 bytes
-rw-r--r--default_images/starmath/res/bi21310.pngbin0 -> 225 bytes
-rw-r--r--default_images/starmath/res/bi21311.pngbin0 -> 243 bytes
-rw-r--r--default_images/starmath/res/bi21312.pngbin0 -> 250 bytes
-rw-r--r--default_images/starmath/res/bi21313.pngbin0 -> 232 bytes
-rw-r--r--default_images/starmath/res/bi21314.pngbin0 -> 231 bytes
-rw-r--r--default_images/starmath/res/bi21315.pngbin0 -> 230 bytes
-rw-r--r--default_images/starmath/res/bi21316.pngbin0 -> 243 bytes
-rw-r--r--default_images/starmath/res/bi21322.pngbin0 -> 225 bytes
-rw-r--r--default_images/starmath/res/bi21323.pngbin0 -> 241 bytes
-rw-r--r--default_images/starmath/res/bi21324.pngbin0 -> 250 bytes
-rw-r--r--default_images/starmath/res/bi21325.pngbin0 -> 247 bytes
-rw-r--r--default_images/starmath/res/bi21326.pngbin0 -> 245 bytes
-rw-r--r--default_images/starmath/res/bih21301.pngbin0 -> 143 bytes
-rw-r--r--default_images/starmath/res/bih21302.pngbin0 -> 151 bytes
-rw-r--r--default_images/starmath/res/bih21303.pngbin0 -> 145 bytes
-rw-r--r--default_images/starmath/res/bih21304.pngbin0 -> 229 bytes
-rw-r--r--default_images/starmath/res/bih21305.pngbin0 -> 149 bytes
-rw-r--r--default_images/starmath/res/bih21306.pngbin0 -> 148 bytes
-rw-r--r--default_images/starmath/res/bih21307.pngbin0 -> 245 bytes
-rw-r--r--default_images/starmath/res/bih21308.pngbin0 -> 234 bytes
-rw-r--r--default_images/starmath/res/bih21309.pngbin0 -> 247 bytes
-rw-r--r--default_images/starmath/res/bih21310.pngbin0 -> 246 bytes
-rw-r--r--default_images/starmath/res/bih21311.pngbin0 -> 235 bytes
-rw-r--r--default_images/starmath/res/bih21312.pngbin0 -> 243 bytes
-rw-r--r--default_images/starmath/res/bih21313.pngbin0 -> 240 bytes
-rw-r--r--default_images/starmath/res/bih21314.pngbin0 -> 241 bytes
-rw-r--r--default_images/starmath/res/bih21315.pngbin0 -> 235 bytes
-rw-r--r--default_images/starmath/res/bih21316.pngbin0 -> 238 bytes
-rw-r--r--default_images/starmath/res/bih21322.pngbin0 -> 231 bytes
-rw-r--r--default_images/starmath/res/bih21323.pngbin0 -> 253 bytes
-rw-r--r--default_images/starmath/res/bih21324.pngbin0 -> 238 bytes
-rw-r--r--default_images/starmath/res/bih21325.pngbin0 -> 242 bytes
-rw-r--r--default_images/starmath/res/bih21326.pngbin0 -> 235 bytes
-rw-r--r--default_images/starmath/res/co21901.pngbin0 -> 654 bytes
-rw-r--r--default_images/starmath/res/co21902.pngbin0 -> 151 bytes
-rw-r--r--default_images/starmath/res/co21903.pngbin0 -> 151 bytes
-rw-r--r--default_images/starmath/res/co21904.pngbin0 -> 229 bytes
-rw-r--r--default_images/starmath/res/co21905.pngbin0 -> 211 bytes
-rw-r--r--default_images/starmath/res/co21906.pngbin0 -> 240 bytes
-rw-r--r--default_images/starmath/res/co21907.pngbin0 -> 252 bytes
-rw-r--r--default_images/starmath/res/co21908.pngbin0 -> 238 bytes
-rw-r--r--default_images/starmath/res/co21909.pngbin0 -> 250 bytes
-rw-r--r--default_images/starmath/res/co21910.pngbin0 -> 276 bytes
-rw-r--r--default_images/starmath/res/co21911.pngbin0 -> 257 bytes
-rw-r--r--default_images/starmath/res/co21912.pngbin0 -> 231 bytes
-rw-r--r--default_images/starmath/res/co21916.pngbin0 -> 239 bytes
-rw-r--r--default_images/starmath/res/co21917.pngbin0 -> 242 bytes
-rw-r--r--default_images/starmath/res/co21918.pngbin0 -> 241 bytes
-rw-r--r--default_images/starmath/res/coh21901.pngbin0 -> 122 bytes
-rw-r--r--default_images/starmath/res/coh21902.pngbin0 -> 101 bytes
-rw-r--r--default_images/starmath/res/coh21903.pngbin0 -> 101 bytes
-rw-r--r--default_images/starmath/res/coh21904.pngbin0 -> 229 bytes
-rw-r--r--default_images/starmath/res/coh21905.pngbin0 -> 206 bytes
-rw-r--r--default_images/starmath/res/coh21906.pngbin0 -> 238 bytes
-rw-r--r--default_images/starmath/res/coh21907.pngbin0 -> 248 bytes
-rw-r--r--default_images/starmath/res/coh21908.pngbin0 -> 234 bytes
-rw-r--r--default_images/starmath/res/coh21909.pngbin0 -> 218 bytes
-rw-r--r--default_images/starmath/res/coh21910.pngbin0 -> 238 bytes
-rw-r--r--default_images/starmath/res/coh21911.pngbin0 -> 231 bytes
-rw-r--r--default_images/starmath/res/coh21912.pngbin0 -> 230 bytes
-rw-r--r--default_images/starmath/res/coh21916.pngbin0 -> 227 bytes
-rw-r--r--default_images/starmath/res/coh21917.pngbin0 -> 228 bytes
-rw-r--r--default_images/starmath/res/coh21918.pngbin0 -> 233 bytes
-rw-r--r--default_images/starmath/res/dist101.pngbin0 -> 349 bytes
-rw-r--r--default_images/starmath/res/dist101_h.pngbin0 -> 225 bytes
-rw-r--r--default_images/starmath/res/dist102.pngbin0 -> 342 bytes
-rw-r--r--default_images/starmath/res/dist102_h.pngbin0 -> 222 bytes
-rw-r--r--default_images/starmath/res/dist103.pngbin0 -> 351 bytes
-rw-r--r--default_images/starmath/res/dist103_h.pngbin0 -> 223 bytes
-rw-r--r--default_images/starmath/res/dist104.pngbin0 -> 351 bytes
-rw-r--r--default_images/starmath/res/dist104_h.pngbin0 -> 226 bytes
-rw-r--r--default_images/starmath/res/dist11.pngbin0 -> 373 bytes
-rw-r--r--default_images/starmath/res/dist11_h.pngbin0 -> 246 bytes
-rw-r--r--default_images/starmath/res/dist12.pngbin0 -> 497 bytes
-rw-r--r--default_images/starmath/res/dist12_h.pngbin0 -> 329 bytes
-rw-r--r--default_images/starmath/res/dist13.pngbin0 -> 458 bytes
-rw-r--r--default_images/starmath/res/dist13_h.pngbin0 -> 293 bytes
-rw-r--r--default_images/starmath/res/dist21.pngbin0 -> 537 bytes
-rw-r--r--default_images/starmath/res/dist21_h.pngbin0 -> 377 bytes
-rw-r--r--default_images/starmath/res/dist22.pngbin0 -> 523 bytes
-rw-r--r--default_images/starmath/res/dist22_h.pngbin0 -> 365 bytes
-rw-r--r--default_images/starmath/res/dist31.pngbin0 -> 457 bytes
-rw-r--r--default_images/starmath/res/dist31_h.pngbin0 -> 295 bytes
-rw-r--r--default_images/starmath/res/dist32.pngbin0 -> 459 bytes
-rw-r--r--default_images/starmath/res/dist32_h.pngbin0 -> 294 bytes
-rw-r--r--default_images/starmath/res/dist41.pngbin0 -> 442 bytes
-rw-r--r--default_images/starmath/res/dist41_h.pngbin0 -> 287 bytes
-rw-r--r--default_images/starmath/res/dist42.pngbin0 -> 454 bytes
-rw-r--r--default_images/starmath/res/dist42_h.pngbin0 -> 291 bytes
-rw-r--r--default_images/starmath/res/dist51.pngbin0 -> 511 bytes
-rw-r--r--default_images/starmath/res/dist51_h.pngbin0 -> 304 bytes
-rw-r--r--default_images/starmath/res/dist52.pngbin0 -> 489 bytes
-rw-r--r--default_images/starmath/res/dist52_h.pngbin0 -> 289 bytes
-rw-r--r--default_images/starmath/res/dist61.pngbin0 -> 475 bytes
-rw-r--r--default_images/starmath/res/dist61_h.pngbin0 -> 325 bytes
-rw-r--r--default_images/starmath/res/dist62.pngbin0 -> 433 bytes
-rw-r--r--default_images/starmath/res/dist62_h.pngbin0 -> 305 bytes
-rw-r--r--default_images/starmath/res/dist71.pngbin0 -> 448 bytes
-rw-r--r--default_images/starmath/res/dist71_h.pngbin0 -> 313 bytes
-rw-r--r--default_images/starmath/res/dist72.pngbin0 -> 444 bytes
-rw-r--r--default_images/starmath/res/dist72_h.pngbin0 -> 315 bytes
-rw-r--r--default_images/starmath/res/dist81.pngbin0 -> 472 bytes
-rw-r--r--default_images/starmath/res/dist81_h.pngbin0 -> 341 bytes
-rw-r--r--default_images/starmath/res/dist82.pngbin0 -> 471 bytes
-rw-r--r--default_images/starmath/res/dist82_h.pngbin0 -> 307 bytes
-rw-r--r--default_images/starmath/res/dist91.pngbin0 -> 484 bytes
-rw-r--r--default_images/starmath/res/dist91_h.pngbin0 -> 328 bytes
-rw-r--r--default_images/starmath/res/dist92.pngbin0 -> 501 bytes
-rw-r--r--default_images/starmath/res/dist92_h.pngbin0 -> 353 bytes
-rw-r--r--default_images/starmath/res/fo21601.pngbin0 -> 229 bytes
-rw-r--r--default_images/starmath/res/fo21602.pngbin0 -> 225 bytes
-rw-r--r--default_images/starmath/res/fo21603.pngbin0 -> 229 bytes
-rw-r--r--default_images/starmath/res/fo21604.pngbin0 -> 229 bytes
-rw-r--r--default_images/starmath/res/fo21605.pngbin0 -> 243 bytes
-rw-r--r--default_images/starmath/res/fo21606.pngbin0 -> 252 bytes
-rw-r--r--default_images/starmath/res/fo21607.pngbin0 -> 267 bytes
-rw-r--r--default_images/starmath/res/fo21609.pngbin0 -> 260 bytes
-rw-r--r--default_images/starmath/res/fo21610.pngbin0 -> 292 bytes
-rw-r--r--default_images/starmath/res/fo21611.pngbin0 -> 296 bytes
-rw-r--r--default_images/starmath/res/fo21613.pngbin0 -> 280 bytes
-rw-r--r--default_images/starmath/res/fo21614.pngbin0 -> 262 bytes
-rw-r--r--default_images/starmath/res/fo21615.pngbin0 -> 265 bytes
-rw-r--r--default_images/starmath/res/foh21601.pngbin0 -> 222 bytes
-rw-r--r--default_images/starmath/res/foh21602.pngbin0 -> 241 bytes
-rw-r--r--default_images/starmath/res/foh21603.pngbin0 -> 218 bytes
-rw-r--r--default_images/starmath/res/foh21604.pngbin0 -> 217 bytes
-rw-r--r--default_images/starmath/res/foh21605.pngbin0 -> 232 bytes
-rw-r--r--default_images/starmath/res/foh21606.pngbin0 -> 237 bytes
-rw-r--r--default_images/starmath/res/foh21607.pngbin0 -> 242 bytes
-rw-r--r--default_images/starmath/res/foh21609.pngbin0 -> 275 bytes
-rw-r--r--default_images/starmath/res/foh21610.pngbin0 -> 274 bytes
-rw-r--r--default_images/starmath/res/foh21611.pngbin0 -> 277 bytes
-rw-r--r--default_images/starmath/res/foh21613.pngbin0 -> 269 bytes
-rw-r--r--default_images/starmath/res/foh21614.pngbin0 -> 246 bytes
-rw-r--r--default_images/starmath/res/foh21615.pngbin0 -> 244 bytes
-rw-r--r--default_images/starmath/res/fu21501.pngbin0 -> 210 bytes
-rw-r--r--default_images/starmath/res/fu21502.pngbin0 -> 224 bytes
-rw-r--r--default_images/starmath/res/fu21503.pngbin0 -> 223 bytes
-rw-r--r--default_images/starmath/res/fu21504.pngbin0 -> 239 bytes
-rw-r--r--default_images/starmath/res/fu21505.pngbin0 -> 219 bytes
-rw-r--r--default_images/starmath/res/fu21506.pngbin0 -> 179 bytes
-rw-r--r--default_images/starmath/res/fu21507.pngbin0 -> 223 bytes
-rw-r--r--default_images/starmath/res/fu21508.pngbin0 -> 204 bytes
-rw-r--r--default_images/starmath/res/fu21509.pngbin0 -> 210 bytes
-rw-r--r--default_images/starmath/res/fu21510.pngbin0 -> 200 bytes
-rw-r--r--default_images/starmath/res/fu21511.pngbin0 -> 211 bytes
-rw-r--r--default_images/starmath/res/fu21512.pngbin0 -> 224 bytes
-rw-r--r--default_images/starmath/res/fu21513.pngbin0 -> 217 bytes
-rw-r--r--default_images/starmath/res/fu21514.pngbin0 -> 215 bytes
-rw-r--r--default_images/starmath/res/fu21515.pngbin0 -> 210 bytes
-rw-r--r--default_images/starmath/res/fu21516.pngbin0 -> 224 bytes
-rw-r--r--default_images/starmath/res/fu21517.pngbin0 -> 237 bytes
-rw-r--r--default_images/starmath/res/fu21518.pngbin0 -> 226 bytes
-rw-r--r--default_images/starmath/res/fu21519.pngbin0 -> 234 bytes
-rw-r--r--default_images/starmath/res/fu21520.pngbin0 -> 241 bytes
-rw-r--r--default_images/starmath/res/fu21521.pngbin0 -> 241 bytes
-rw-r--r--default_images/starmath/res/fu21522.pngbin0 -> 237 bytes
-rw-r--r--default_images/starmath/res/fu21523.pngbin0 -> 226 bytes
-rw-r--r--default_images/starmath/res/fu21524.pngbin0 -> 243 bytes
-rw-r--r--default_images/starmath/res/fu21908.pngbin0 -> 248 bytes
-rw-r--r--default_images/starmath/res/fuh21501.pngbin0 -> 188 bytes
-rw-r--r--default_images/starmath/res/fuh21502.pngbin0 -> 225 bytes
-rw-r--r--default_images/starmath/res/fuh21503.pngbin0 -> 235 bytes
-rw-r--r--default_images/starmath/res/fuh21504.pngbin0 -> 249 bytes
-rw-r--r--default_images/starmath/res/fuh21505.pngbin0 -> 213 bytes
-rw-r--r--default_images/starmath/res/fuh21506.pngbin0 -> 110 bytes
-rw-r--r--default_images/starmath/res/fuh21507.pngbin0 -> 138 bytes
-rw-r--r--default_images/starmath/res/fuh21508.pngbin0 -> 130 bytes
-rw-r--r--default_images/starmath/res/fuh21509.pngbin0 -> 131 bytes
-rw-r--r--default_images/starmath/res/fuh21510.pngbin0 -> 132 bytes
-rw-r--r--default_images/starmath/res/fuh21511.pngbin0 -> 128 bytes
-rw-r--r--default_images/starmath/res/fuh21512.pngbin0 -> 130 bytes
-rw-r--r--default_images/starmath/res/fuh21513.pngbin0 -> 132 bytes
-rw-r--r--default_images/starmath/res/fuh21514.pngbin0 -> 140 bytes
-rw-r--r--default_images/starmath/res/fuh21515.pngbin0 -> 134 bytes
-rw-r--r--default_images/starmath/res/fuh21516.pngbin0 -> 136 bytes
-rw-r--r--default_images/starmath/res/fuh21517.pngbin0 -> 139 bytes
-rw-r--r--default_images/starmath/res/fuh21518.pngbin0 -> 142 bytes
-rw-r--r--default_images/starmath/res/fuh21519.pngbin0 -> 139 bytes
-rw-r--r--default_images/starmath/res/fuh21520.pngbin0 -> 136 bytes
-rw-r--r--default_images/starmath/res/fuh21521.pngbin0 -> 145 bytes
-rw-r--r--default_images/starmath/res/fuh21522.pngbin0 -> 152 bytes
-rw-r--r--default_images/starmath/res/fuh21523.pngbin0 -> 145 bytes
-rw-r--r--default_images/starmath/res/fuh21524.pngbin0 -> 145 bytes
-rw-r--r--default_images/starmath/res/fuh21908.pngbin0 -> 228 bytes
-rw-r--r--default_images/starmath/res/im21101.pngbin0 -> 300 bytes
-rw-r--r--default_images/starmath/res/im21102.pngbin0 -> 233 bytes
-rw-r--r--default_images/starmath/res/im21103.pngbin0 -> 256 bytes
-rw-r--r--default_images/starmath/res/im21104.pngbin0 -> 277 bytes
-rw-r--r--default_images/starmath/res/im21105.pngbin0 -> 270 bytes
-rw-r--r--default_images/starmath/res/im21106.pngbin0 -> 255 bytes
-rw-r--r--default_images/starmath/res/im21107.pngbin0 -> 286 bytes
-rw-r--r--default_images/starmath/res/im21108.pngbin0 -> 1243 bytes
-rw-r--r--default_images/starmath/res/im21117.pngbin0 -> 261 bytes
-rw-r--r--default_images/starmath/res/imh21101.pngbin0 -> 293 bytes
-rw-r--r--default_images/starmath/res/imh21102.pngbin0 -> 247 bytes
-rw-r--r--default_images/starmath/res/imh21103.pngbin0 -> 227 bytes
-rw-r--r--default_images/starmath/res/imh21104.pngbin0 -> 275 bytes
-rw-r--r--default_images/starmath/res/imh21105.pngbin0 -> 250 bytes
-rw-r--r--default_images/starmath/res/imh21106.pngbin0 -> 218 bytes
-rw-r--r--default_images/starmath/res/imh21107.pngbin0 -> 168 bytes
-rw-r--r--default_images/starmath/res/imh21108.pngbin0 -> 218 bytes
-rw-r--r--default_images/starmath/res/imh21117.pngbin0 -> 247 bytes
-rw-r--r--default_images/starmath/res/mi21608.pngbin0 -> 201 bytes
-rw-r--r--default_images/starmath/res/mi21612.pngbin0 -> 251 bytes
-rw-r--r--default_images/starmath/res/mi22003.pngbin0 -> 248 bytes
-rw-r--r--default_images/starmath/res/mi22004.pngbin0 -> 253 bytes
-rw-r--r--default_images/starmath/res/mi22005.pngbin0 -> 231 bytes
-rw-r--r--default_images/starmath/res/mi22006.pngbin0 -> 248 bytes
-rw-r--r--default_images/starmath/res/mi22007.pngbin0 -> 264 bytes
-rw-r--r--default_images/starmath/res/mi22008.pngbin0 -> 154 bytes
-rw-r--r--default_images/starmath/res/mi22009.pngbin0 -> 172 bytes
-rw-r--r--default_images/starmath/res/mi22010.pngbin0 -> 170 bytes
-rw-r--r--default_images/starmath/res/mi22011.pngbin0 -> 154 bytes
-rw-r--r--default_images/starmath/res/mi22012.pngbin0 -> 157 bytes
-rw-r--r--default_images/starmath/res/mi22013.pngbin0 -> 252 bytes
-rw-r--r--default_images/starmath/res/mi22014.pngbin0 -> 234 bytes
-rw-r--r--default_images/starmath/res/mi22015.pngbin0 -> 235 bytes
-rw-r--r--default_images/starmath/res/mi22016.pngbin0 -> 591 bytes
-rw-r--r--default_images/starmath/res/mi22017.pngbin0 -> 604 bytes
-rw-r--r--default_images/starmath/res/mi22018.pngbin0 -> 586 bytes
-rw-r--r--default_images/starmath/res/mi22019.pngbin0 -> 599 bytes
-rw-r--r--default_images/starmath/res/mih21608.pngbin0 -> 170 bytes
-rw-r--r--default_images/starmath/res/mih21612.pngbin0 -> 226 bytes
-rw-r--r--default_images/starmath/res/mih22003.pngbin0 -> 230 bytes
-rw-r--r--default_images/starmath/res/mih22004.pngbin0 -> 235 bytes
-rw-r--r--default_images/starmath/res/mih22005.pngbin0 -> 201 bytes
-rw-r--r--default_images/starmath/res/mih22006.pngbin0 -> 223 bytes
-rw-r--r--default_images/starmath/res/mih22007.pngbin0 -> 236 bytes
-rw-r--r--default_images/starmath/res/mih22008.pngbin0 -> 144 bytes
-rw-r--r--default_images/starmath/res/mih22009.pngbin0 -> 154 bytes
-rw-r--r--default_images/starmath/res/mih22010.pngbin0 -> 150 bytes
-rw-r--r--default_images/starmath/res/mih22011.pngbin0 -> 145 bytes
-rw-r--r--default_images/starmath/res/mih22012.pngbin0 -> 147 bytes
-rw-r--r--default_images/starmath/res/mih22013.pngbin0 -> 206 bytes
-rw-r--r--default_images/starmath/res/mih22014.pngbin0 -> 224 bytes
-rw-r--r--default_images/starmath/res/mih22015.pngbin0 -> 217 bytes
-rw-r--r--default_images/starmath/res/mih22016.pngbin0 -> 113 bytes
-rw-r--r--default_images/starmath/res/mih22017.pngbin0 -> 116 bytes
-rw-r--r--default_images/starmath/res/mih22018.pngbin0 -> 119 bytes
-rw-r--r--default_images/starmath/res/mih22019.pngbin0 -> 122 bytes
-rw-r--r--default_images/starmath/res/op21401.pngbin0 -> 256 bytes
-rw-r--r--default_images/starmath/res/op21402.pngbin0 -> 254 bytes
-rw-r--r--default_images/starmath/res/op21403.pngbin0 -> 252 bytes
-rw-r--r--default_images/starmath/res/op21405.pngbin0 -> 258 bytes
-rw-r--r--default_images/starmath/res/op21406.pngbin0 -> 256 bytes
-rw-r--r--default_images/starmath/res/op21407.pngbin0 -> 244 bytes
-rw-r--r--default_images/starmath/res/op21408.pngbin0 -> 251 bytes
-rw-r--r--default_images/starmath/res/op21409.pngbin0 -> 267 bytes
-rw-r--r--default_images/starmath/res/op21410.pngbin0 -> 261 bytes
-rw-r--r--default_images/starmath/res/op21411.pngbin0 -> 266 bytes
-rw-r--r--default_images/starmath/res/op21412.pngbin0 -> 257 bytes
-rw-r--r--default_images/starmath/res/op21413.pngbin0 -> 268 bytes
-rw-r--r--default_images/starmath/res/op21414.pngbin0 -> 267 bytes
-rw-r--r--default_images/starmath/res/op21415.pngbin0 -> 270 bytes
-rw-r--r--default_images/starmath/res/op21416.pngbin0 -> 263 bytes
-rw-r--r--default_images/starmath/res/op21417.pngbin0 -> 228 bytes
-rw-r--r--default_images/starmath/res/op21418.pngbin0 -> 241 bytes
-rw-r--r--default_images/starmath/res/op21419.pngbin0 -> 256 bytes
-rw-r--r--default_images/starmath/res/op21420.pngbin0 -> 241 bytes
-rw-r--r--default_images/starmath/res/op21421.pngbin0 -> 235 bytes
-rw-r--r--default_images/starmath/res/op22001.pngbin0 -> 246 bytes
-rw-r--r--default_images/starmath/res/op22002.pngbin0 -> 253 bytes
-rw-r--r--default_images/starmath/res/oph21401.pngbin0 -> 226 bytes
-rw-r--r--default_images/starmath/res/oph21402.pngbin0 -> 226 bytes
-rw-r--r--default_images/starmath/res/oph21403.pngbin0 -> 232 bytes
-rw-r--r--default_images/starmath/res/oph21405.pngbin0 -> 242 bytes
-rw-r--r--default_images/starmath/res/oph21406.pngbin0 -> 233 bytes
-rw-r--r--default_images/starmath/res/oph21407.pngbin0 -> 244 bytes
-rw-r--r--default_images/starmath/res/oph21408.pngbin0 -> 250 bytes
-rw-r--r--default_images/starmath/res/oph21409.pngbin0 -> 232 bytes
-rw-r--r--default_images/starmath/res/oph21410.pngbin0 -> 231 bytes
-rw-r--r--default_images/starmath/res/oph21411.pngbin0 -> 230 bytes
-rw-r--r--default_images/starmath/res/oph21412.pngbin0 -> 233 bytes
-rw-r--r--default_images/starmath/res/oph21413.pngbin0 -> 243 bytes
-rw-r--r--default_images/starmath/res/oph21414.pngbin0 -> 245 bytes
-rw-r--r--default_images/starmath/res/oph21415.pngbin0 -> 240 bytes
-rw-r--r--default_images/starmath/res/oph21416.pngbin0 -> 241 bytes
-rw-r--r--default_images/starmath/res/oph21417.pngbin0 -> 221 bytes
-rw-r--r--default_images/starmath/res/oph21418.pngbin0 -> 200 bytes
-rw-r--r--default_images/starmath/res/oph21419.pngbin0 -> 227 bytes
-rw-r--r--default_images/starmath/res/oph21420.pngbin0 -> 220 bytes
-rw-r--r--default_images/starmath/res/oph21421.pngbin0 -> 209 bytes
-rw-r--r--default_images/starmath/res/oph22001.pngbin0 -> 233 bytes
-rw-r--r--default_images/starmath/res/oph22002.pngbin0 -> 226 bytes
-rw-r--r--default_images/starmath/res/un21201.pngbin0 -> 220 bytes
-rw-r--r--default_images/starmath/res/un21202.pngbin0 -> 215 bytes
-rw-r--r--default_images/starmath/res/un21203.pngbin0 -> 219 bytes
-rw-r--r--default_images/starmath/res/un21204.pngbin0 -> 224 bytes
-rw-r--r--default_images/starmath/res/un21205.pngbin0 -> 236 bytes
-rw-r--r--default_images/starmath/res/un21206.pngbin0 -> 242 bytes
-rw-r--r--default_images/starmath/res/un21207.pngbin0 -> 229 bytes
-rw-r--r--default_images/starmath/res/un21208.pngbin0 -> 248 bytes
-rw-r--r--default_images/starmath/res/un21209.pngbin0 -> 234 bytes
-rw-r--r--default_images/starmath/res/un21210.pngbin0 -> 255 bytes
-rw-r--r--default_images/starmath/res/un21211.pngbin0 -> 246 bytes
-rw-r--r--default_images/starmath/res/un21212.pngbin0 -> 264 bytes
-rw-r--r--default_images/starmath/res/un21213.pngbin0 -> 219 bytes
-rw-r--r--default_images/starmath/res/un21214.pngbin0 -> 230 bytes
-rw-r--r--default_images/starmath/res/un21215.pngbin0 -> 240 bytes
-rw-r--r--default_images/starmath/res/un21221.pngbin0 -> 239 bytes
-rw-r--r--default_images/starmath/res/unh21201.pngbin0 -> 203 bytes
-rw-r--r--default_images/starmath/res/unh21202.pngbin0 -> 201 bytes
-rw-r--r--default_images/starmath/res/unh21203.pngbin0 -> 205 bytes
-rw-r--r--default_images/starmath/res/unh21204.pngbin0 -> 212 bytes
-rw-r--r--default_images/starmath/res/unh21205.pngbin0 -> 225 bytes
-rw-r--r--default_images/starmath/res/unh21206.pngbin0 -> 218 bytes
-rw-r--r--default_images/starmath/res/unh21207.pngbin0 -> 238 bytes
-rw-r--r--default_images/starmath/res/unh21208.pngbin0 -> 244 bytes
-rw-r--r--default_images/starmath/res/unh21209.pngbin0 -> 220 bytes
-rw-r--r--default_images/starmath/res/unh21210.pngbin0 -> 220 bytes
-rw-r--r--default_images/starmath/res/unh21211.pngbin0 -> 232 bytes
-rw-r--r--default_images/starmath/res/unh21212.pngbin0 -> 236 bytes
-rw-r--r--default_images/starmath/res/unh21213.pngbin0 -> 197 bytes
-rw-r--r--default_images/starmath/res/unh21214.pngbin0 -> 229 bytes
-rw-r--r--default_images/starmath/res/unh21215.pngbin0 -> 227 bytes
-rw-r--r--default_images/starmath/res/unh21221.pngbin0 -> 231 bytes
-rw-r--r--default_images/svtools/res/back_large.pngbin0 -> 1042 bytes
-rw-r--r--default_images/svtools/res/back_large_h.pngbin0 -> 149 bytes
-rw-r--r--default_images/svtools/res/back_small.pngbin0 -> 526 bytes
-rw-r--r--default_images/svtools/res/back_small_h.pngbin0 -> 164 bytes
-rw-r--r--default_images/svtools/res/bmpfont.pngbin0 -> 737 bytes
-rw-r--r--default_images/svtools/res/bmpfont_h.pngbin0 -> 161 bytes
-rw-r--r--default_images/svtools/res/closer.pngbin0 -> 309 bytes
-rw-r--r--default_images/svtools/res/collate.pngbin0 -> 2146 bytes
-rw-r--r--default_images/svtools/res/collate_h.pngbin0 -> 271 bytes
-rw-r--r--default_images/svtools/res/ed01.pngbin0 -> 397 bytes
-rw-r--r--default_images/svtools/res/ed02.pngbin0 -> 432 bytes
-rw-r--r--default_images/svtools/res/ed03.pngbin0 -> 412 bytes
-rw-r--r--default_images/svtools/res/ed04.pngbin0 -> 402 bytes
-rw-r--r--default_images/svtools/res/ed05.pngbin0 -> 536 bytes
-rw-r--r--default_images/svtools/res/ed06.pngbin0 -> 404 bytes
-rw-r--r--default_images/svtools/res/ed07.pngbin0 -> 540 bytes
-rw-r--r--default_images/svtools/res/ed08.pngbin0 -> 351 bytes
-rw-r--r--default_images/svtools/res/ed09.pngbin0 -> 126 bytes
-rw-r--r--default_images/svtools/res/edh01.pngbin0 -> 107 bytes
-rw-r--r--default_images/svtools/res/edh02.pngbin0 -> 132 bytes
-rw-r--r--default_images/svtools/res/edh03.pngbin0 -> 110 bytes
-rw-r--r--default_images/svtools/res/edh04.pngbin0 -> 119 bytes
-rw-r--r--default_images/svtools/res/edh05.pngbin0 -> 119 bytes
-rw-r--r--default_images/svtools/res/edh06.pngbin0 -> 112 bytes
-rw-r--r--default_images/svtools/res/edh07.pngbin0 -> 128 bytes
-rw-r--r--default_images/svtools/res/edh08.pngbin0 -> 102 bytes
-rw-r--r--default_images/svtools/res/edh09.pngbin0 -> 161 bytes
-rw-r--r--default_images/svtools/res/folder.pngbin0 -> 436 bytes
-rw-r--r--default_images/svtools/res/helpagent.pngbin0 -> 3036 bytes
-rw-r--r--default_images/svtools/res/info_large.pngbin0 -> 755 bytes
-rw-r--r--default_images/svtools/res/info_large_h.pngbin0 -> 314 bytes
-rw-r--r--default_images/svtools/res/info_small.pngbin0 -> 479 bytes
-rw-r--r--default_images/svtools/res/info_small_h.pngbin0 -> 259 bytes
-rw-r--r--default_images/svtools/res/my_docs.pngbin0 -> 1285 bytes
-rw-r--r--default_images/svtools/res/my_docs_h.pngbin0 -> 233 bytes
-rw-r--r--default_images/svtools/res/ncollate.pngbin0 -> 2244 bytes
-rw-r--r--default_images/svtools/res/ncollate_h.pngbin0 -> 300 bytes
-rw-r--r--default_images/svtools/res/new_doc.pngbin0 -> 950 bytes
-rw-r--r--default_images/svtools/res/new_doc_h.pngbin0 -> 3785 bytes
-rw-r--r--default_images/svtools/res/preview_large.pngbin0 -> 701 bytes
-rw-r--r--default_images/svtools/res/preview_large_h.pngbin0 -> 110 bytes
-rw-r--r--default_images/svtools/res/preview_small.pngbin0 -> 491 bytes
-rw-r--r--default_images/svtools/res/preview_small_h.pngbin0 -> 104 bytes
-rw-r--r--default_images/svtools/res/prnfont.pngbin0 -> 634 bytes
-rw-r--r--default_images/svtools/res/prnfont_h.pngbin0 -> 149 bytes
-rw-r--r--default_images/svtools/res/regkey.pngbin0 -> 1130 bytes
-rw-r--r--default_images/svtools/res/samples.pngbin0 -> 1456 bytes
-rw-r--r--default_images/svtools/res/samples_h.pngbin0 -> 217 bytes
-rw-r--r--default_images/svtools/res/scalfont.pngbin0 -> 808 bytes
-rw-r--r--default_images/svtools/res/scalfont_h.pngbin0 -> 165 bytes
-rw-r--r--default_images/svtools/res/template.pngbin0 -> 966 bytes
-rw-r--r--default_images/svtools/res/template_h.pngbin0 -> 3784 bytes
-rw-r--r--default_images/svtools/res/triangle_down.pngbin0 -> 369 bytes
-rw-r--r--default_images/svtools/res/triangle_down_hc.pngbin0 -> 100 bytes
-rw-r--r--default_images/svtools/res/triangle_right.pngbin0 -> 425 bytes
-rw-r--r--default_images/svtools/res/triangle_right_hc.pngbin0 -> 100 bytes
-rw-r--r--default_images/svtools/res/ttall.pngbin0 -> 914 bytes
-rw-r--r--default_images/svtools/res/ttdef.pngbin0 -> 915 bytes
-rw-r--r--default_images/svtools/res/tthid.pngbin0 -> 917 bytes
-rw-r--r--default_images/svtools/res/ttremote.pngbin0 -> 931 bytes
-rw-r--r--default_images/svtools/res/ttshow.pngbin0 -> 923 bytes
-rw-r--r--default_images/svtools/res/ttshow2.pngbin0 -> 923 bytes
-rw-r--r--default_images/svtools/res/up_large.pngbin0 -> 960 bytes
-rw-r--r--default_images/svtools/res/up_large_h.pngbin0 -> 173 bytes
-rw-r--r--default_images/svtools/res/up_small.pngbin0 -> 605 bytes
-rw-r--r--default_images/svtools/res/up_small_h.pngbin0 -> 137 bytes
-rw-r--r--default_images/svx/res/3dgeo.pngbin0 -> 325 bytes
-rw-r--r--default_images/svx/res/3dgeo_h.pngbin0 -> 155 bytes
-rw-r--r--default_images/svx/res/3dlight.pngbin0 -> 452 bytes
-rw-r--r--default_images/svx/res/3dlight_h.pngbin0 -> 168 bytes
-rw-r--r--default_images/svx/res/3drepres.pngbin0 -> 451 bytes
-rw-r--r--default_images/svx/res/3drepres_h.pngbin0 -> 156 bytes
-rw-r--r--default_images/svx/res/3dtextur.pngbin0 -> 421 bytes
-rw-r--r--default_images/svx/res/3dtextur_h.pngbin0 -> 158 bytes
-rw-r--r--default_images/svx/res/apply.pngbin0 -> 477 bytes
-rw-r--r--default_images/svx/res/apply_h.pngbin0 -> 135 bytes
-rw-r--r--default_images/svx/res/blend3d.pngbin0 -> 936 bytes
-rw-r--r--default_images/svx/res/blend3d_h.pngbin0 -> 146 bytes
-rw-r--r--default_images/svx/res/brightlit_16.pngbin0 -> 379 bytes
-rw-r--r--default_images/svx/res/brightlit_16_h.pngbin0 -> 162 bytes
-rw-r--r--default_images/svx/res/caution_11x16.pngbin0 -> 536 bytes
-rw-r--r--default_images/svx/res/caution_11x16_h.pngbin0 -> 145 bytes
-rw-r--r--default_images/svx/res/cd01.pngbin0 -> 477 bytes
-rw-r--r--default_images/svx/res/cd015.pngbin0 -> 477 bytes
-rw-r--r--default_images/svx/res/cd016.pngbin0 -> 580 bytes
-rw-r--r--default_images/svx/res/cd017.pngbin0 -> 523 bytes
-rw-r--r--default_images/svx/res/cd018.pngbin0 -> 533 bytes
-rw-r--r--default_images/svx/res/cd02.pngbin0 -> 228 bytes
-rw-r--r--default_images/svx/res/cd020.pngbin0 -> 888 bytes
-rw-r--r--default_images/svx/res/cd021.pngbin0 -> 894 bytes
-rw-r--r--default_images/svx/res/cd025.pngbin0 -> 645 bytes
-rw-r--r--default_images/svx/res/cd026.pngbin0 -> 594 bytes
-rw-r--r--default_images/svx/res/cd05.pngbin0 -> 568 bytes
-rw-r--r--default_images/svx/res/cd06.pngbin0 -> 378 bytes
-rw-r--r--default_images/svx/res/cd07.pngbin0 -> 756 bytes
-rw-r--r--default_images/svx/res/cd08.pngbin0 -> 677 bytes
-rw-r--r--default_images/svx/res/cdh01.pngbin0 -> 135 bytes
-rw-r--r--default_images/svx/res/cdh015.pngbin0 -> 142 bytes
-rw-r--r--default_images/svx/res/cdh016.pngbin0 -> 152 bytes
-rw-r--r--default_images/svx/res/cdh017.pngbin0 -> 157 bytes
-rw-r--r--default_images/svx/res/cdh018.pngbin0 -> 170 bytes
-rw-r--r--default_images/svx/res/cdh02.pngbin0 -> 125 bytes
-rw-r--r--default_images/svx/res/cdh020.pngbin0 -> 150 bytes
-rw-r--r--default_images/svx/res/cdh021.pngbin0 -> 143 bytes
-rw-r--r--default_images/svx/res/cdh025.pngbin0 -> 159 bytes
-rw-r--r--default_images/svx/res/cdh026.pngbin0 -> 141 bytes
-rw-r--r--default_images/svx/res/cdh05.pngbin0 -> 121 bytes
-rw-r--r--default_images/svx/res/cdh06.pngbin0 -> 259 bytes
-rw-r--r--default_images/svx/res/cdh07.pngbin0 -> 128 bytes
-rw-r--r--default_images/svx/res/cdh08.pngbin0 -> 141 bytes
-rw-r--r--default_images/svx/res/color.pngbin0 -> 445 bytes
-rw-r--r--default_images/svx/res/color_h.pngbin0 -> 120 bytes
-rw-r--r--default_images/svx/res/colordlg.pngbin0 -> 698 bytes
-rw-r--r--default_images/svx/res/colordlg_h.pngbin0 -> 166 bytes
-rw-r--r--default_images/svx/res/convrt3d.pngbin0 -> 749 bytes
-rw-r--r--default_images/svx/res/convrt3d_h.pngbin0 -> 142 bytes
-rw-r--r--default_images/svx/res/dimlit_16.pngbin0 -> 372 bytes
-rw-r--r--default_images/svx/res/dimlit_16_h.pngbin0 -> 164 bytes
-rw-r--r--default_images/svx/res/directioneast_22.pngbin0 -> 354 bytes
-rw-r--r--default_images/svx/res/directioneast_22_h.pngbin0 -> 141 bytes
-rw-r--r--default_images/svx/res/directionnorth_22.pngbin0 -> 349 bytes
-rw-r--r--default_images/svx/res/directionnorth_22_h.pngbin0 -> 143 bytes
-rw-r--r--default_images/svx/res/directionnortheast_22.pngbin0 -> 392 bytes
-rw-r--r--default_images/svx/res/directionnortheast_22_h.pngbin0 -> 179 bytes
-rw-r--r--default_images/svx/res/directionnorthwest_22.pngbin0 -> 436 bytes
-rw-r--r--default_images/svx/res/directionnorthwest_22_h.pngbin0 -> 177 bytes
-rw-r--r--default_images/svx/res/directionsouth_22.pngbin0 -> 349 bytes
-rw-r--r--default_images/svx/res/directionsouth_22_h.pngbin0 -> 127 bytes
-rw-r--r--default_images/svx/res/directionsoutheast_22.pngbin0 -> 430 bytes
-rw-r--r--default_images/svx/res/directionsoutheast_22_h.pngbin0 -> 175 bytes
-rw-r--r--default_images/svx/res/directionsouthwest_22.pngbin0 -> 427 bytes
-rw-r--r--default_images/svx/res/directionsouthwest_22_h.pngbin0 -> 171 bytes
-rw-r--r--default_images/svx/res/directionstraight_22.pngbin0 -> 277 bytes
-rw-r--r--default_images/svx/res/directionstraight_22_h.pngbin0 -> 101 bytes
-rw-r--r--default_images/svx/res/directionwest_22.pngbin0 -> 375 bytes
-rw-r--r--default_images/svx/res/directionwest_22_h.pngbin0 -> 137 bytes
-rw-r--r--default_images/svx/res/doublesi.pngbin0 -> 317 bytes
-rw-r--r--default_images/svx/res/doublesi_h.pngbin0 -> 146 bytes
-rw-r--r--default_images/svx/res/dsth_cen.pngbin0 -> 682 bytes
-rw-r--r--default_images/svx/res/dsth_cen_h.pngbin0 -> 137 bytes
-rw-r--r--default_images/svx/res/dsth_dst.pngbin0 -> 673 bytes
-rw-r--r--default_images/svx/res/dsth_dst_h.pngbin0 -> 139 bytes
-rw-r--r--default_images/svx/res/dsth_hig.pngbin0 -> 655 bytes
-rw-r--r--default_images/svx/res/dsth_hig_h.pngbin0 -> 135 bytes
-rw-r--r--default_images/svx/res/dsth_low.pngbin0 -> 662 bytes
-rw-r--r--default_images/svx/res/dsth_low_h.pngbin0 -> 133 bytes
-rw-r--r--default_images/svx/res/dstv_cen.pngbin0 -> 699 bytes
-rw-r--r--default_images/svx/res/dstv_cen_h.pngbin0 -> 139 bytes
-rw-r--r--default_images/svx/res/dstv_dst.pngbin0 -> 691 bytes
-rw-r--r--default_images/svx/res/dstv_dst_h.pngbin0 -> 134 bytes
-rw-r--r--default_images/svx/res/dstv_hig.pngbin0 -> 674 bytes
-rw-r--r--default_images/svx/res/dstv_hig_h.pngbin0 -> 134 bytes
-rw-r--r--default_images/svx/res/dstv_low.pngbin0 -> 651 bytes
-rw-r--r--default_images/svx/res/dstv_low_h.pngbin0 -> 136 bytes
-rw-r--r--default_images/svx/res/extrusion05inch_16.pngbin0 -> 485 bytes
-rw-r--r--default_images/svx/res/extrusion05inch_16_h.pngbin0 -> 119 bytes
-rw-r--r--default_images/svx/res/extrusion0inch_16.pngbin0 -> 382 bytes
-rw-r--r--default_images/svx/res/extrusion0inch_16_h.pngbin0 -> 258 bytes
-rw-r--r--default_images/svx/res/extrusion1inch_16.pngbin0 -> 545 bytes
-rw-r--r--default_images/svx/res/extrusion1inch_16_h.pngbin0 -> 136 bytes
-rw-r--r--default_images/svx/res/extrusion2inch_16.pngbin0 -> 607 bytes
-rw-r--r--default_images/svx/res/extrusion2inch_16_h.pngbin0 -> 148 bytes
-rw-r--r--default_images/svx/res/extrusion4inch_16.pngbin0 -> 661 bytes
-rw-r--r--default_images/svx/res/extrusion4inch_16_h.pngbin0 -> 151 bytes
-rw-r--r--default_images/svx/res/extrusioninfinity_16.pngbin0 -> 680 bytes
-rw-r--r--default_images/svx/res/extrusioninfinity_16_h.pngbin0 -> 148 bytes
-rw-r--r--default_images/svx/res/filter3d.pngbin0 -> 460 bytes
-rw-r--r--default_images/svx/res/filter3d_h.pngbin0 -> 117 bytes
-rw-r--r--default_images/svx/res/fontworkaligncentered_16.pngbin0 -> 324 bytes
-rw-r--r--default_images/svx/res/fontworkaligncentered_16_h.pngbin0 -> 188 bytes
-rw-r--r--default_images/svx/res/fontworkaligncentered_26.pngbin0 -> 493 bytes
-rw-r--r--default_images/svx/res/fontworkaligncentered_26_h.pngbin0 -> 210 bytes
-rw-r--r--default_images/svx/res/fontworkalignjustified_16.pngbin0 -> 314 bytes
-rw-r--r--default_images/svx/res/fontworkalignjustified_16_h.pngbin0 -> 184 bytes
-rw-r--r--default_images/svx/res/fontworkalignjustified_26.pngbin0 -> 479 bytes
-rw-r--r--default_images/svx/res/fontworkalignjustified_26_h.pngbin0 -> 189 bytes
-rw-r--r--default_images/svx/res/fontworkalignleft_16.pngbin0 -> 320 bytes
-rw-r--r--default_images/svx/res/fontworkalignleft_16_h.pngbin0 -> 186 bytes
-rw-r--r--default_images/svx/res/fontworkalignleft_26.pngbin0 -> 487 bytes
-rw-r--r--default_images/svx/res/fontworkalignleft_26_h.pngbin0 -> 206 bytes
-rw-r--r--default_images/svx/res/fontworkalignright_16.pngbin0 -> 322 bytes
-rw-r--r--default_images/svx/res/fontworkalignright_16_h.pngbin0 -> 191 bytes
-rw-r--r--default_images/svx/res/fontworkalignright_26.pngbin0 -> 486 bytes
-rw-r--r--default_images/svx/res/fontworkalignright_26_h.pngbin0 -> 208 bytes
-rw-r--r--default_images/svx/res/fontworkalignstretch_16.pngbin0 -> 498 bytes
-rw-r--r--default_images/svx/res/fontworkalignstretch_16_h.pngbin0 -> 110 bytes
-rw-r--r--default_images/svx/res/fontworkalignstretch_26.pngbin0 -> 837 bytes
-rw-r--r--default_images/svx/res/fontworkalignstretch_26_h.pngbin0 -> 132 bytes
-rw-r--r--default_images/svx/res/fr01.pngbin0 -> 387 bytes
-rw-r--r--default_images/svx/res/fr010.pngbin0 -> 487 bytes
-rw-r--r--default_images/svx/res/fr011.pngbin0 -> 478 bytes
-rw-r--r--default_images/svx/res/fr012.pngbin0 -> 475 bytes
-rw-r--r--default_images/svx/res/fr02.pngbin0 -> 395 bytes
-rw-r--r--default_images/svx/res/fr03.pngbin0 -> 397 bytes
-rw-r--r--default_images/svx/res/fr04.pngbin0 -> 388 bytes
-rw-r--r--default_images/svx/res/fr05.pngbin0 -> 396 bytes
-rw-r--r--default_images/svx/res/fr06.pngbin0 -> 402 bytes
-rw-r--r--default_images/svx/res/fr07.pngbin0 -> 409 bytes
-rw-r--r--default_images/svx/res/fr08.pngbin0 -> 366 bytes
-rw-r--r--default_images/svx/res/fr09.pngbin0 -> 505 bytes
-rw-r--r--default_images/svx/res/frh01.pngbin0 -> 277 bytes
-rw-r--r--default_images/svx/res/frh010.pngbin0 -> 103 bytes
-rw-r--r--default_images/svx/res/frh011.pngbin0 -> 108 bytes
-rw-r--r--default_images/svx/res/frh012.pngbin0 -> 282 bytes
-rw-r--r--default_images/svx/res/frh02.pngbin0 -> 278 bytes
-rw-r--r--default_images/svx/res/frh03.pngbin0 -> 278 bytes
-rw-r--r--default_images/svx/res/frh04.pngbin0 -> 288 bytes
-rw-r--r--default_images/svx/res/frh05.pngbin0 -> 280 bytes
-rw-r--r--default_images/svx/res/frh06.pngbin0 -> 281 bytes
-rw-r--r--default_images/svx/res/frh07.pngbin0 -> 281 bytes
-rw-r--r--default_images/svx/res/frh08.pngbin0 -> 277 bytes
-rw-r--r--default_images/svx/res/frh09.pngbin0 -> 105 bytes
-rw-r--r--default_images/svx/res/frmsel.bmpbin0 -> 510 bytes
-rw-r--r--default_images/svx/res/fw01.pngbin0 -> 183 bytes
-rw-r--r--default_images/svx/res/fw010.pngbin0 -> 174 bytes
-rw-r--r--default_images/svx/res/fw011.pngbin0 -> 204 bytes
-rw-r--r--default_images/svx/res/fw012.pngbin0 -> 194 bytes
-rw-r--r--default_images/svx/res/fw013.pngbin0 -> 160 bytes
-rw-r--r--default_images/svx/res/fw014.pngbin0 -> 171 bytes
-rw-r--r--default_images/svx/res/fw015.pngbin0 -> 185 bytes
-rw-r--r--default_images/svx/res/fw016.pngbin0 -> 173 bytes
-rw-r--r--default_images/svx/res/fw017.pngbin0 -> 166 bytes
-rw-r--r--default_images/svx/res/fw018.pngbin0 -> 199 bytes
-rw-r--r--default_images/svx/res/fw019.pngbin0 -> 190 bytes
-rw-r--r--default_images/svx/res/fw02.pngbin0 -> 217 bytes
-rw-r--r--default_images/svx/res/fw020.pngbin0 -> 186 bytes
-rw-r--r--default_images/svx/res/fw021.pngbin0 -> 192 bytes
-rw-r--r--default_images/svx/res/fw03.pngbin0 -> 214 bytes
-rw-r--r--default_images/svx/res/fw04.pngbin0 -> 196 bytes
-rw-r--r--default_images/svx/res/fw05.pngbin0 -> 213 bytes
-rw-r--r--default_images/svx/res/fw06.pngbin0 -> 180 bytes
-rw-r--r--default_images/svx/res/fw07.pngbin0 -> 156 bytes
-rw-r--r--default_images/svx/res/fw08.pngbin0 -> 159 bytes
-rw-r--r--default_images/svx/res/fw09.pngbin0 -> 154 bytes
-rw-r--r--default_images/svx/res/fwbhcirc.pngbin0 -> 206 bytes
-rw-r--r--default_images/svx/res/fwbhcirc_h.pngbin0 -> 206 bytes
-rw-r--r--default_images/svx/res/fwbotarc.pngbin0 -> 194 bytes
-rw-r--r--default_images/svx/res/fwbotarc_h.pngbin0 -> 194 bytes
-rw-r--r--default_images/svx/res/fwbuttn1.pngbin0 -> 207 bytes
-rw-r--r--default_images/svx/res/fwbuttn1_h.pngbin0 -> 207 bytes
-rw-r--r--default_images/svx/res/fwbuttn2.pngbin0 -> 214 bytes
-rw-r--r--default_images/svx/res/fwbuttn2_h.pngbin0 -> 214 bytes
-rw-r--r--default_images/svx/res/fwbuttn3.pngbin0 -> 214 bytes
-rw-r--r--default_images/svx/res/fwbuttn3_h.pngbin0 -> 214 bytes
-rw-r--r--default_images/svx/res/fwbuttn4.pngbin0 -> 214 bytes
-rw-r--r--default_images/svx/res/fwbuttn4_h.pngbin0 -> 214 bytes
-rw-r--r--default_images/svx/res/fwh01.pngbin0 -> 153 bytes
-rw-r--r--default_images/svx/res/fwh010.pngbin0 -> 172 bytes
-rw-r--r--default_images/svx/res/fwh011.pngbin0 -> 200 bytes
-rw-r--r--default_images/svx/res/fwh012.pngbin0 -> 193 bytes
-rw-r--r--default_images/svx/res/fwh013.pngbin0 -> 155 bytes
-rw-r--r--default_images/svx/res/fwh014.pngbin0 -> 167 bytes
-rw-r--r--default_images/svx/res/fwh015.pngbin0 -> 181 bytes
-rw-r--r--default_images/svx/res/fwh016.pngbin0 -> 165 bytes
-rw-r--r--default_images/svx/res/fwh017.pngbin0 -> 161 bytes
-rw-r--r--default_images/svx/res/fwh018.pngbin0 -> 181 bytes
-rw-r--r--default_images/svx/res/fwh019.pngbin0 -> 189 bytes
-rw-r--r--default_images/svx/res/fwh02.pngbin0 -> 207 bytes
-rw-r--r--default_images/svx/res/fwh020.pngbin0 -> 182 bytes
-rw-r--r--default_images/svx/res/fwh021.pngbin0 -> 188 bytes
-rw-r--r--default_images/svx/res/fwh03.pngbin0 -> 183 bytes
-rw-r--r--default_images/svx/res/fwh04.pngbin0 -> 190 bytes
-rw-r--r--default_images/svx/res/fwh05.pngbin0 -> 191 bytes
-rw-r--r--default_images/svx/res/fwh06.pngbin0 -> 179 bytes
-rw-r--r--default_images/svx/res/fwh07.pngbin0 -> 151 bytes
-rw-r--r--default_images/svx/res/fwh08.pngbin0 -> 154 bytes
-rw-r--r--default_images/svx/res/fwh09.pngbin0 -> 150 bytes
-rw-r--r--default_images/svx/res/fwlftarc.pngbin0 -> 201 bytes
-rw-r--r--default_images/svx/res/fwlftarc_h.pngbin0 -> 201 bytes
-rw-r--r--default_images/svx/res/fwlhcirc.pngbin0 -> 202 bytes
-rw-r--r--default_images/svx/res/fwlhcirc_h.pngbin0 -> 202 bytes
-rw-r--r--default_images/svx/res/fwrgtarc.pngbin0 -> 196 bytes
-rw-r--r--default_images/svx/res/fwrgtarc_h.pngbin0 -> 196 bytes
-rw-r--r--default_images/svx/res/fwrhcirc.pngbin0 -> 200 bytes
-rw-r--r--default_images/svx/res/fwrhcirc_h.pngbin0 -> 200 bytes
-rw-r--r--default_images/svx/res/fwtoparc.pngbin0 -> 197 bytes
-rw-r--r--default_images/svx/res/fwtoparc_h.pngbin0 -> 197 bytes
-rw-r--r--default_images/svx/res/galdefl.pngbin0 -> 821 bytes
-rw-r--r--default_images/svx/res/galdefs.pngbin0 -> 485 bytes
-rw-r--r--default_images/svx/res/galicon.pngbin0 -> 566 bytes
-rw-r--r--default_images/svx/res/galicon_h.pngbin0 -> 105 bytes
-rw-r--r--default_images/svx/res/galimpl.pngbin0 -> 315 bytes
-rw-r--r--default_images/svx/res/galimps.pngbin0 -> 202 bytes
-rw-r--r--default_images/svx/res/gallist.pngbin0 -> 580 bytes
-rw-r--r--default_images/svx/res/gallist_h.pngbin0 -> 103 bytes
-rw-r--r--default_images/svx/res/galmedia.pngbin0 -> 1912 bytes
-rw-r--r--default_images/svx/res/galnorl.pngbin0 -> 860 bytes
-rw-r--r--default_images/svx/res/galnors.pngbin0 -> 484 bytes
-rw-r--r--default_images/svx/res/galrdol.pngbin0 -> 844 bytes
-rw-r--r--default_images/svx/res/galrdos.pngbin0 -> 484 bytes
-rw-r--r--default_images/svx/res/galsnd1.pngbin0 -> 773 bytes
-rw-r--r--default_images/svx/res/galsnd2.pngbin0 -> 771 bytes
-rw-r--r--default_images/svx/res/galsnd3.pngbin0 -> 645 bytes
-rw-r--r--default_images/svx/res/galsnd4.pngbin0 -> 930 bytes
-rw-r--r--default_images/svx/res/galsnd5.pngbin0 -> 608 bytes
-rw-r--r--default_images/svx/res/galsnd6.pngbin0 -> 678 bytes
-rw-r--r--default_images/svx/res/galsnd7.pngbin0 -> 639 bytes
-rw-r--r--default_images/svx/res/graphic.pngbin0 -> 866 bytes
-rw-r--r--default_images/svx/res/grfload.pngbin0 -> 262 bytes
-rw-r--r--default_images/svx/res/id01.pngbin0 -> 477 bytes
-rw-r--r--default_images/svx/res/id016.pngbin0 -> 479 bytes
-rw-r--r--default_images/svx/res/id018.pngbin0 -> 652 bytes
-rw-r--r--default_images/svx/res/id019.pngbin0 -> 712 bytes
-rw-r--r--default_images/svx/res/id02.pngbin0 -> 711 bytes
-rw-r--r--default_images/svx/res/id03.pngbin0 -> 585 bytes
-rw-r--r--default_images/svx/res/id030.pngbin0 -> 477 bytes
-rw-r--r--default_images/svx/res/id031.pngbin0 -> 580 bytes
-rw-r--r--default_images/svx/res/id032.pngbin0 -> 523 bytes
-rw-r--r--default_images/svx/res/id033.pngbin0 -> 533 bytes
-rw-r--r--default_images/svx/res/id04.pngbin0 -> 568 bytes
-rw-r--r--default_images/svx/res/id040.pngbin0 -> 888 bytes
-rw-r--r--default_images/svx/res/id041.pngbin0 -> 894 bytes
-rw-r--r--default_images/svx/res/id05.pngbin0 -> 378 bytes
-rw-r--r--default_images/svx/res/id06.pngbin0 -> 756 bytes
-rw-r--r--default_images/svx/res/id07.pngbin0 -> 677 bytes
-rw-r--r--default_images/svx/res/id08.pngbin0 -> 781 bytes
-rw-r--r--default_images/svx/res/idh01.pngbin0 -> 135 bytes
-rw-r--r--default_images/svx/res/idh016.pngbin0 -> 146 bytes
-rw-r--r--default_images/svx/res/idh018.pngbin0 -> 266 bytes
-rw-r--r--default_images/svx/res/idh019.pngbin0 -> 172 bytes
-rw-r--r--default_images/svx/res/idh02.pngbin0 -> 141 bytes
-rw-r--r--default_images/svx/res/idh03.pngbin0 -> 123 bytes
-rw-r--r--default_images/svx/res/idh030.pngbin0 -> 142 bytes
-rw-r--r--default_images/svx/res/idh031.pngbin0 -> 152 bytes
-rw-r--r--default_images/svx/res/idh032.pngbin0 -> 157 bytes
-rw-r--r--default_images/svx/res/idh033.pngbin0 -> 170 bytes
-rw-r--r--default_images/svx/res/idh04.pngbin0 -> 121 bytes
-rw-r--r--default_images/svx/res/idh040.pngbin0 -> 150 bytes
-rw-r--r--default_images/svx/res/idh041.pngbin0 -> 143 bytes
-rw-r--r--default_images/svx/res/idh05.pngbin0 -> 259 bytes
-rw-r--r--default_images/svx/res/idh06.pngbin0 -> 128 bytes
-rw-r--r--default_images/svx/res/idh07.pngbin0 -> 141 bytes
-rw-r--r--default_images/svx/res/idh08.pngbin0 -> 161 bytes
-rw-r--r--default_images/svx/res/invert3d.pngbin0 -> 354 bytes
-rw-r--r--default_images/svx/res/invert3d_h.pngbin0 -> 154 bytes
-rw-r--r--default_images/svx/res/legtyp1.pngbin0 -> 606 bytes
-rw-r--r--default_images/svx/res/legtyp1_hc.pngbin0 -> 110 bytes
-rw-r--r--default_images/svx/res/legtyp2.pngbin0 -> 705 bytes
-rw-r--r--default_images/svx/res/legtyp2_hc.pngbin0 -> 137 bytes
-rw-r--r--default_images/svx/res/legtyp3.pngbin0 -> 671 bytes
-rw-r--r--default_images/svx/res/legtyp3_hc.pngbin0 -> 139 bytes
-rw-r--r--default_images/svx/res/legtyp4.pngbin0 -> 731 bytes
-rw-r--r--default_images/svx/res/legtyp4_hc.pngbin0 -> 131 bytes
-rw-r--r--default_images/svx/res/lght2sid.pngbin0 -> 376 bytes
-rw-r--r--default_images/svx/res/lght2sid_h.pngbin0 -> 155 bytes
-rw-r--r--default_images/svx/res/light.pngbin0 -> 386 bytes
-rw-r--r--default_images/svx/res/light_h.pngbin0 -> 133 bytes
-rw-r--r--default_images/svx/res/lightfrombottom_22.pngbin0 -> 1088 bytes
-rw-r--r--default_images/svx/res/lightfrombottom_22_h.pngbin0 -> 204 bytes
-rw-r--r--default_images/svx/res/lightfrombottomleft_22.pngbin0 -> 1113 bytes
-rw-r--r--default_images/svx/res/lightfrombottomleft_22_h.pngbin0 -> 197 bytes
-rw-r--r--default_images/svx/res/lightfrombottomright_22.pngbin0 -> 1049 bytes
-rw-r--r--default_images/svx/res/lightfrombottomright_22_h.pngbin0 -> 198 bytes
-rw-r--r--default_images/svx/res/lightfromfront_22.pngbin0 -> 1204 bytes
-rw-r--r--default_images/svx/res/lightfromfront_22_h.pngbin0 -> 213 bytes
-rw-r--r--default_images/svx/res/lightfromleft_22.pngbin0 -> 1012 bytes
-rw-r--r--default_images/svx/res/lightfromleft_22_h.pngbin0 -> 211 bytes
-rw-r--r--default_images/svx/res/lightfromright_22.pngbin0 -> 1027 bytes
-rw-r--r--default_images/svx/res/lightfromright_22_h.pngbin0 -> 210 bytes
-rw-r--r--default_images/svx/res/lightfromtop_22.pngbin0 -> 1140 bytes
-rw-r--r--default_images/svx/res/lightfromtop_22_h.pngbin0 -> 196 bytes
-rw-r--r--default_images/svx/res/lightfromtopleft_22.pngbin0 -> 1111 bytes
-rw-r--r--default_images/svx/res/lightfromtopleft_22_h.pngbin0 -> 213 bytes
-rw-r--r--default_images/svx/res/lightfromtopright_22.pngbin0 -> 1125 bytes
-rw-r--r--default_images/svx/res/lightfromtopright_22_h.pngbin0 -> 213 bytes
-rw-r--r--default_images/svx/res/lightofffrombottom_22.pngbin0 -> 522 bytes
-rw-r--r--default_images/svx/res/lightofffrombottom_22_h.pngbin0 -> 243 bytes
-rw-r--r--default_images/svx/res/lightofffrombottomleft_22.pngbin0 -> 575 bytes
-rw-r--r--default_images/svx/res/lightofffrombottomleft_22_h.pngbin0 -> 169 bytes
-rw-r--r--default_images/svx/res/lightofffrombottomright_22.pngbin0 -> 580 bytes
-rw-r--r--default_images/svx/res/lightofffrombottomright_22_h.pngbin0 -> 168 bytes
-rw-r--r--default_images/svx/res/lightofffromleft_22.pngbin0 -> 488 bytes
-rw-r--r--default_images/svx/res/lightofffromleft_22_h.pngbin0 -> 210 bytes
-rw-r--r--default_images/svx/res/lightofffromright_22.pngbin0 -> 510 bytes
-rw-r--r--default_images/svx/res/lightofffromright_22_h.pngbin0 -> 213 bytes
-rw-r--r--default_images/svx/res/lightofffromtop_22.pngbin0 -> 543 bytes
-rw-r--r--default_images/svx/res/lightofffromtop_22_h.pngbin0 -> 245 bytes
-rw-r--r--default_images/svx/res/lightofffromtopleft_22.pngbin0 -> 572 bytes
-rw-r--r--default_images/svx/res/lightofffromtopleft_22_h.pngbin0 -> 169 bytes
-rw-r--r--default_images/svx/res/lightofffromtopright_22.pngbin0 -> 570 bytes
-rw-r--r--default_images/svx/res/lightofffromtopright_22_h.pngbin0 -> 167 bytes
-rw-r--r--default_images/svx/res/lighton.pngbin0 -> 407 bytes
-rw-r--r--default_images/svx/res/lighton_h.pngbin0 -> 166 bytes
-rw-r--r--default_images/svx/res/lightonfrombottom_22.pngbin0 -> 605 bytes
-rw-r--r--default_images/svx/res/lightonfrombottom_22_h.pngbin0 -> 190 bytes
-rw-r--r--default_images/svx/res/lightonfrombottomleft_22.pngbin0 -> 621 bytes
-rw-r--r--default_images/svx/res/lightonfrombottomleft_22_h.pngbin0 -> 206 bytes
-rw-r--r--default_images/svx/res/lightonfrombottomright_22.pngbin0 -> 650 bytes
-rw-r--r--default_images/svx/res/lightonfrombottomright_22_h.pngbin0 -> 210 bytes
-rw-r--r--default_images/svx/res/lightonfromleft_22.pngbin0 -> 607 bytes
-rw-r--r--default_images/svx/res/lightonfromleft_22_h.pngbin0 -> 194 bytes
-rw-r--r--default_images/svx/res/lightonfromright_22.pngbin0 -> 616 bytes
-rw-r--r--default_images/svx/res/lightonfromright_22_h.pngbin0 -> 187 bytes
-rw-r--r--default_images/svx/res/lightonfromtop_22.pngbin0 -> 627 bytes
-rw-r--r--default_images/svx/res/lightonfromtop_22_h.pngbin0 -> 196 bytes
-rw-r--r--default_images/svx/res/lightonfromtopleft_22.pngbin0 -> 661 bytes
-rw-r--r--default_images/svx/res/lightonfromtopleft_22_h.pngbin0 -> 204 bytes
-rw-r--r--default_images/svx/res/lightonfromtopright_22.pngbin0 -> 634 bytes
-rw-r--r--default_images/svx/res/lightonfromtopright_22_h.pngbin0 -> 205 bytes
-rw-r--r--default_images/svx/res/lngcheck.pngbin0 -> 547 bytes
-rw-r--r--default_images/svx/res/lngcheck_h.pngbin0 -> 145 bytes
-rw-r--r--default_images/svx/res/lo01.pngbin0 -> 232 bytes
-rw-r--r--default_images/svx/res/lo02.pngbin0 -> 223 bytes
-rw-r--r--default_images/svx/res/lo03.pngbin0 -> 179 bytes
-rw-r--r--default_images/svx/res/loh01.pngbin0 -> 121 bytes
-rw-r--r--default_images/svx/res/loh02.pngbin0 -> 121 bytes
-rw-r--r--default_images/svx/res/loh03.pngbin0 -> 151 bytes
-rw-r--r--default_images/svx/res/luminanc.pngbin0 -> 505 bytes
-rw-r--r--default_images/svx/res/luminanc_h.pngbin0 -> 260 bytes
-rw-r--r--default_images/svx/res/material.pngbin0 -> 463 bytes
-rw-r--r--default_images/svx/res/material_h.pngbin0 -> 153 bytes
-rw-r--r--default_images/svx/res/matte_16.pngbin0 -> 960 bytes
-rw-r--r--default_images/svx/res/matte_16_h.pngbin0 -> 179 bytes
-rw-r--r--default_images/svx/res/metal_16.pngbin0 -> 833 bytes
-rw-r--r--default_images/svx/res/metal_16_h.pngbin0 -> 168 bytes
-rw-r--r--default_images/svx/res/minus_h.pngbin0 -> 220 bytes
-rw-r--r--default_images/svx/res/modula3d.pngbin0 -> 432 bytes
-rw-r--r--default_images/svx/res/modula3d_h.pngbin0 -> 143 bytes
-rw-r--r--default_images/svx/res/navigationball_10.pngbin0 -> 437 bytes
-rw-r--r--default_images/svx/res/navigationball_10_h.pngbin0 -> 111 bytes
-rw-r--r--default_images/svx/res/normallit_16.pngbin0 -> 376 bytes
-rw-r--r--default_images/svx/res/normallit_16_h.pngbin0 -> 164 bytes
-rw-r--r--default_images/svx/res/normflat.pngbin0 -> 275 bytes
-rw-r--r--default_images/svx/res/normflat_h.pngbin0 -> 138 bytes
-rw-r--r--default_images/svx/res/normobjs.pngbin0 -> 372 bytes
-rw-r--r--default_images/svx/res/normobjs_h.pngbin0 -> 146 bytes
-rw-r--r--default_images/svx/res/normsphe.pngbin0 -> 326 bytes
-rw-r--r--default_images/svx/res/normsphe_h.pngbin0 -> 146 bytes
-rw-r--r--default_images/svx/res/notcertificate_16.pngbin0 -> 876 bytes
-rw-r--r--default_images/svx/res/notcertificate_16_h.pngbin0 -> 194 bytes
-rw-r--r--default_images/svx/res/notcheck.pngbin0 -> 121 bytes
-rw-r--r--default_images/svx/res/nu01.pngbin0 -> 477 bytes
-rw-r--r--default_images/svx/res/nu02.pngbin0 -> 510 bytes
-rw-r--r--default_images/svx/res/nu03.pngbin0 -> 625 bytes
-rwxr-xr-xdefault_images/svx/res/nu04.pngbin0 -> 430 bytes
-rw-r--r--default_images/svx/res/nu07.pngbin0 -> 477 bytes
-rw-r--r--default_images/svx/res/nu08.pngbin0 -> 510 bytes
-rw-r--r--default_images/svx/res/nuh01.pngbin0 -> 135 bytes
-rw-r--r--default_images/svx/res/nuh02.pngbin0 -> 140 bytes
-rw-r--r--default_images/svx/res/nuh03.pngbin0 -> 139 bytes
-rwxr-xr-xdefault_images/svx/res/nuh04.pngbin0 -> 135 bytes
-rw-r--r--default_images/svx/res/objects.pngbin0 -> 526 bytes
-rw-r--r--default_images/svx/res/objspc3d.pngbin0 -> 267 bytes
-rw-r--r--default_images/svx/res/objspc3d_h.pngbin0 -> 131 bytes
-rw-r--r--default_images/svx/res/odfwarning.pngbin0 -> 536 bytes
-rw-r--r--default_images/svx/res/odfwarning_h.pngbin0 -> 145 bytes
-rw-r--r--default_images/svx/res/ole.pngbin0 -> 729 bytes
-rw-r--r--default_images/svx/res/parallel.pngbin0 -> 288 bytes
-rw-r--r--default_images/svx/res/parallel_16.pngbin0 -> 350 bytes
-rw-r--r--default_images/svx/res/parallel_16_h.pngbin0 -> 163 bytes
-rw-r--r--default_images/svx/res/parallel_h.pngbin0 -> 162 bytes
-rw-r--r--default_images/svx/res/persp3d.pngbin0 -> 285 bytes
-rw-r--r--default_images/svx/res/persp3d_h.pngbin0 -> 142 bytes
-rw-r--r--default_images/svx/res/perspective_16.pngbin0 -> 354 bytes
-rw-r--r--default_images/svx/res/perspective_16_h.pngbin0 -> 168 bytes
-rw-r--r--default_images/svx/res/plastic_16.pngbin0 -> 688 bytes
-rw-r--r--default_images/svx/res/plastic_16_h.pngbin0 -> 149 bytes
-rw-r--r--default_images/svx/res/plus_h.pngbin0 -> 228 bytes
-rw-r--r--default_images/svx/res/pr01.pngbin0 -> 342 bytes
-rw-r--r--default_images/svx/res/pr010.pngbin0 -> 345 bytes
-rw-r--r--default_images/svx/res/pr011.pngbin0 -> 354 bytes
-rw-r--r--default_images/svx/res/pr012.pngbin0 -> 339 bytes
-rw-r--r--default_images/svx/res/pr013.pngbin0 -> 242 bytes
-rw-r--r--default_images/svx/res/pr014.pngbin0 -> 398 bytes
-rw-r--r--default_images/svx/res/pr015.pngbin0 -> 331 bytes
-rw-r--r--default_images/svx/res/pr016.pngbin0 -> 408 bytes
-rw-r--r--default_images/svx/res/pr017.pngbin0 -> 328 bytes
-rw-r--r--default_images/svx/res/pr018.pngbin0 -> 384 bytes
-rw-r--r--default_images/svx/res/pr019.pngbin0 -> 392 bytes
-rw-r--r--default_images/svx/res/pr02.pngbin0 -> 323 bytes
-rw-r--r--default_images/svx/res/pr020.pngbin0 -> 398 bytes
-rw-r--r--default_images/svx/res/pr021.pngbin0 -> 493 bytes
-rw-r--r--default_images/svx/res/pr03.pngbin0 -> 323 bytes
-rw-r--r--default_images/svx/res/pr04.pngbin0 -> 348 bytes
-rw-r--r--default_images/svx/res/pr05.pngbin0 -> 343 bytes
-rw-r--r--default_images/svx/res/pr06.pngbin0 -> 423 bytes
-rw-r--r--default_images/svx/res/pr07.pngbin0 -> 242 bytes
-rw-r--r--default_images/svx/res/pr08.pngbin0 -> 240 bytes
-rw-r--r--default_images/svx/res/pr09.pngbin0 -> 401 bytes
-rw-r--r--default_images/svx/res/prh01.pngbin0 -> 254 bytes
-rw-r--r--default_images/svx/res/prh010.pngbin0 -> 256 bytes
-rw-r--r--default_images/svx/res/prh011.pngbin0 -> 105 bytes
-rw-r--r--default_images/svx/res/prh012.pngbin0 -> 260 bytes
-rw-r--r--default_images/svx/res/prh013.pngbin0 -> 212 bytes
-rw-r--r--default_images/svx/res/prh014.pngbin0 -> 279 bytes
-rw-r--r--default_images/svx/res/prh015.pngbin0 -> 261 bytes
-rw-r--r--default_images/svx/res/prh016.pngbin0 -> 104 bytes
-rw-r--r--default_images/svx/res/prh017.pngbin0 -> 261 bytes
-rw-r--r--default_images/svx/res/prh018.pngbin0 -> 103 bytes
-rw-r--r--default_images/svx/res/prh019.pngbin0 -> 260 bytes
-rw-r--r--default_images/svx/res/prh02.pngbin0 -> 256 bytes
-rw-r--r--default_images/svx/res/prh020.pngbin0 -> 261 bytes
-rw-r--r--default_images/svx/res/prh021.pngbin0 -> 118 bytes
-rw-r--r--default_images/svx/res/prh03.pngbin0 -> 264 bytes
-rw-r--r--default_images/svx/res/prh04.pngbin0 -> 257 bytes
-rw-r--r--default_images/svx/res/prh05.pngbin0 -> 262 bytes
-rw-r--r--default_images/svx/res/prh06.pngbin0 -> 136 bytes
-rw-r--r--default_images/svx/res/prh07.pngbin0 -> 214 bytes
-rw-r--r--default_images/svx/res/prh08.pngbin0 -> 215 bytes
-rw-r--r--default_images/svx/res/prh09.pngbin0 -> 261 bytes
-rw-r--r--default_images/svx/res/rectbtns.pngbin0 -> 280 bytes
-rw-r--r--default_images/svx/res/reload.pngbin0 -> 909 bytes
-rw-r--r--default_images/svx/res/reloads.pngbin0 -> 299 bytes
-rw-r--r--default_images/svx/res/replac3d.pngbin0 -> 266 bytes
-rw-r--r--default_images/svx/res/replac3d_h.pngbin0 -> 142 bytes
-rw-r--r--default_images/svx/res/rotate3d.pngbin0 -> 702 bytes
-rw-r--r--default_images/svx/res/rotate3d_h.pngbin0 -> 141 bytes
-rw-r--r--default_images/svx/res/sc10350_h.pngbin0 -> 141 bytes
-rw-r--r--default_images/svx/res/sh01.pngbin0 -> 335 bytes
-rw-r--r--default_images/svx/res/sh02.pngbin0 -> 345 bytes
-rw-r--r--default_images/svx/res/sh03.pngbin0 -> 345 bytes
-rw-r--r--default_images/svx/res/sh04.pngbin0 -> 349 bytes
-rw-r--r--default_images/svx/res/sh05.pngbin0 -> 343 bytes
-rw-r--r--default_images/svx/res/shadow3d.pngbin0 -> 193 bytes
-rw-r--r--default_images/svx/res/shadow3d_h.pngbin0 -> 124 bytes
-rw-r--r--default_images/svx/res/shh01.pngbin0 -> 253 bytes
-rw-r--r--default_images/svx/res/shh02.pngbin0 -> 102 bytes
-rw-r--r--default_images/svx/res/shh03.pngbin0 -> 105 bytes
-rw-r--r--default_images/svx/res/shh04.pngbin0 -> 103 bytes
-rw-r--r--default_images/svx/res/shh05.pngbin0 -> 105 bytes
-rw-r--r--default_images/svx/res/signet_11x16.pngbin0 -> 604 bytes
-rw-r--r--default_images/svx/res/signet_11x16_h.pngbin0 -> 147 bytes
-rw-r--r--default_images/svx/res/slidezoomin_11.pngbin0 -> 562 bytes
-rw-r--r--default_images/svx/res/slidezoomin_11_h.pngbin0 -> 122 bytes
-rw-r--r--default_images/svx/res/slidezoomout_11.pngbin0 -> 539 bytes
-rw-r--r--default_images/svx/res/slidezoomout_11_h.pngbin0 -> 121 bytes
-rw-r--r--default_images/svx/res/spellerr.pngbin0 -> 510 bytes
-rw-r--r--default_images/svx/res/spellok.pngbin0 -> 477 bytes
-rw-r--r--default_images/svx/res/sphere3d.pngbin0 -> 885 bytes
-rw-r--r--default_images/svx/res/sphere3d_h.pngbin0 -> 124 bytes
-rw-r--r--default_images/svx/res/time.pngbin0 -> 902 bytes
-rw-r--r--default_images/svx/res/time_h.pngbin0 -> 165 bytes
-rw-r--r--default_images/svx/res/tr10416.pngbin0 -> 1742 bytes
-rw-r--r--default_images/svx/res/tr10432.pngbin0 -> 2429 bytes
-rw-r--r--default_images/svx/res/tr10433.pngbin0 -> 2158 bytes
-rw-r--r--default_images/svx/res/tr10434.pngbin0 -> 2576 bytes
-rw-r--r--default_images/svx/res/tr10435.pngbin0 -> 2258 bytes
-rw-r--r--default_images/svx/res/tr10436.pngbin0 -> 2371 bytes
-rw-r--r--default_images/svx/res/tr10437.pngbin0 -> 4703 bytes
-rw-r--r--default_images/svx/res/tr10439.pngbin0 -> 2158 bytes
-rw-r--r--default_images/svx/res/tr10447.pngbin0 -> 2491 bytes
-rw-r--r--default_images/svx/res/tr10450.pngbin0 -> 2594 bytes
-rw-r--r--default_images/svx/res/tr10452.pngbin0 -> 1641 bytes
-rw-r--r--default_images/svx/res/tr10921.pngbin0 -> 2912 bytes
-rw-r--r--default_images/svx/res/trh10416.pngbin0 -> 333 bytes
-rw-r--r--default_images/svx/res/trh10432.pngbin0 -> 3859 bytes
-rw-r--r--default_images/svx/res/trh10433.pngbin0 -> 3905 bytes
-rw-r--r--default_images/svx/res/trh10434.pngbin0 -> 3962 bytes
-rw-r--r--default_images/svx/res/trh10435.pngbin0 -> 3919 bytes
-rw-r--r--default_images/svx/res/trh10436.pngbin0 -> 3911 bytes
-rw-r--r--default_images/svx/res/trh10437.pngbin0 -> 3857 bytes
-rw-r--r--default_images/svx/res/trh10439.pngbin0 -> 3905 bytes
-rw-r--r--default_images/svx/res/trh10447.pngbin0 -> 3946 bytes
-rw-r--r--default_images/svx/res/trh10450.pngbin0 -> 3953 bytes
-rw-r--r--default_images/svx/res/trh10452.pngbin0 -> 229 bytes
-rw-r--r--default_images/svx/res/trh10921.pngbin0 -> 345 bytes
-rw-r--r--default_images/svx/res/vendor01.pngbin0 -> 3269 bytes
-rw-r--r--default_images/svx/res/vendor01h.pngbin0 -> 3269 bytes
-rw-r--r--default_images/svx/res/wireframe_16.pngbin0 -> 471 bytes
-rw-r--r--default_images/svx/res/wireframe_16_h.pngbin0 -> 137 bytes
-rw-r--r--default_images/svx/res/zetlhor2.pngbin0 -> 194 bytes
-rw-r--r--default_images/svx/res/zetlhor2_h.pngbin0 -> 193 bytes
-rw-r--r--default_images/svx/res/zetlver2.pngbin0 -> 198 bytes
-rw-r--r--default_images/svx/res/zetlver2_h.pngbin0 -> 187 bytes
-rw-r--r--default_images/svx/source/svdraw/cropmarkers.pngbin0 -> 949 bytes
-rw-r--r--default_images/svx/source/svdraw/cropmarkers2.pngbin0 -> 1181 bytes
-rw-r--r--default_images/svx/source/svdraw/cropmarkersACC.pngbin0 -> 1033 bytes
-rw-r--r--default_images/svx/source/svdraw/markers.pngbin0 -> 2611 bytes
-rw-r--r--default_images/svx/source/svdraw/markers2.pngbin0 -> 4362 bytes
-rw-r--r--default_images/svx/source/svdraw/markersACC.pngbin0 -> 2232 bytes
-rw-r--r--default_images/sw/imglst/lc20556.pngbin0 -> 1116 bytes
-rw-r--r--default_images/sw/imglst/lc20557.pngbin0 -> 999 bytes
-rw-r--r--default_images/sw/imglst/lc20558.pngbin0 -> 786 bytes
-rw-r--r--default_images/sw/imglst/lch20556.pngbin0 -> 197 bytes
-rw-r--r--default_images/sw/imglst/lch20557.pngbin0 -> 165 bytes
-rw-r--r--default_images/sw/imglst/lch20558.pngbin0 -> 143 bytes
-rw-r--r--default_images/sw/imglst/nc20000.pngbin0 -> 270 bytes
-rw-r--r--default_images/sw/imglst/nc20001.pngbin0 -> 404 bytes
-rw-r--r--default_images/sw/imglst/nc20002.pngbin0 -> 466 bytes
-rw-r--r--default_images/sw/imglst/nc20003.pngbin0 -> 768 bytes
-rw-r--r--default_images/sw/imglst/nc20004.pngbin0 -> 529 bytes
-rw-r--r--default_images/sw/imglst/nc20005.pngbin0 -> 651 bytes
-rw-r--r--default_images/sw/imglst/nc20006.pngbin0 -> 262 bytes
-rw-r--r--default_images/sw/imglst/nc20007.pngbin0 -> 532 bytes
-rw-r--r--default_images/sw/imglst/nc20008.pngbin0 -> 555 bytes
-rw-r--r--default_images/sw/imglst/nc20009.pngbin0 -> 461 bytes
-rw-r--r--default_images/sw/imglst/nc20010.pngbin0 -> 625 bytes
-rw-r--r--default_images/sw/imglst/nc20011.pngbin0 -> 768 bytes
-rw-r--r--default_images/sw/imglst/nch20000.pngbin0 -> 101 bytes
-rw-r--r--default_images/sw/imglst/nch20001.pngbin0 -> 245 bytes
-rw-r--r--default_images/sw/imglst/nch20002.pngbin0 -> 101 bytes
-rw-r--r--default_images/sw/imglst/nch20003.pngbin0 -> 132 bytes
-rw-r--r--default_images/sw/imglst/nch20004.pngbin0 -> 101 bytes
-rw-r--r--default_images/sw/imglst/nch20005.pngbin0 -> 160 bytes
-rw-r--r--default_images/sw/imglst/nch20006.pngbin0 -> 268 bytes
-rw-r--r--default_images/sw/imglst/nch20007.pngbin0 -> 127 bytes
-rw-r--r--default_images/sw/imglst/nch20008.pngbin0 -> 137 bytes
-rw-r--r--default_images/sw/imglst/nch20009.pngbin0 -> 116 bytes
-rw-r--r--default_images/sw/imglst/nch20010.pngbin0 -> 139 bytes
-rw-r--r--default_images/sw/imglst/nch20011.pngbin0 -> 132 bytes
-rw-r--r--default_images/sw/imglst/re01.pngbin0 -> 399 bytes
-rw-r--r--default_images/sw/imglst/re02.pngbin0 -> 532 bytes
-rw-r--r--default_images/sw/imglst/re03.pngbin0 -> 359 bytes
-rw-r--r--default_images/sw/imglst/re04.pngbin0 -> 498 bytes
-rw-r--r--default_images/sw/imglst/reh01.pngbin0 -> 109 bytes
-rw-r--r--default_images/sw/imglst/reh02.pngbin0 -> 136 bytes
-rw-r--r--default_images/sw/imglst/reh03.pngbin0 -> 269 bytes
-rw-r--r--default_images/sw/imglst/reh04.pngbin0 -> 127 bytes
-rw-r--r--default_images/sw/imglst/sc20171.pngbin0 -> 443 bytes
-rw-r--r--default_images/sw/imglst/sc20172.pngbin0 -> 413 bytes
-rw-r--r--default_images/sw/imglst/sc20173.pngbin0 -> 429 bytes
-rw-r--r--default_images/sw/imglst/sc20174.pngbin0 -> 432 bytes
-rw-r--r--default_images/sw/imglst/sc20175.pngbin0 -> 679 bytes
-rw-r--r--default_images/sw/imglst/sc20177.pngbin0 -> 646 bytes
-rw-r--r--default_images/sw/imglst/sc20179.pngbin0 -> 663 bytes
-rw-r--r--default_images/sw/imglst/sc20182.pngbin0 -> 657 bytes
-rw-r--r--default_images/sw/imglst/sc20183.pngbin0 -> 640 bytes
-rw-r--r--default_images/sw/imglst/sc20186.pngbin0 -> 674 bytes
-rw-r--r--default_images/sw/imglst/sc20233.pngbin0 -> 628 bytes
-rw-r--r--default_images/sw/imglst/sc20234.pngbin0 -> 796 bytes
-rw-r--r--default_images/sw/imglst/sc20235.pngbin0 -> 532 bytes
-rw-r--r--default_images/sw/imglst/sc20236.pngbin0 -> 280 bytes
-rw-r--r--default_images/sw/imglst/sc20238.pngbin0 -> 503 bytes
-rw-r--r--default_images/sw/imglst/sc20239.pngbin0 -> 660 bytes
-rw-r--r--default_images/sw/imglst/sc20244.pngbin0 -> 796 bytes
-rw-r--r--default_images/sw/imglst/sc20245.pngbin0 -> 735 bytes
-rw-r--r--default_images/sw/imglst/sc20246.pngbin0 -> 705 bytes
-rw-r--r--default_images/sw/imglst/sc20247.pngbin0 -> 729 bytes
-rw-r--r--default_images/sw/imglst/sc20248.pngbin0 -> 692 bytes
-rw-r--r--default_images/sw/imglst/sc20249.pngbin0 -> 756 bytes
-rw-r--r--default_images/sw/imglst/sc20556.pngbin0 -> 651 bytes
-rw-r--r--default_images/sw/imglst/sc20557.pngbin0 -> 510 bytes
-rw-r--r--default_images/sw/imglst/sc20558.pngbin0 -> 477 bytes
-rw-r--r--default_images/sw/imglst/sch20171.pngbin0 -> 126 bytes
-rw-r--r--default_images/sw/imglst/sch20172.pngbin0 -> 110 bytes
-rw-r--r--default_images/sw/imglst/sch20173.pngbin0 -> 113 bytes
-rw-r--r--default_images/sw/imglst/sch20174.pngbin0 -> 124 bytes
-rw-r--r--default_images/sw/imglst/sch20175.pngbin0 -> 149 bytes
-rw-r--r--default_images/sw/imglst/sch20177.pngbin0 -> 142 bytes
-rw-r--r--default_images/sw/imglst/sch20179.pngbin0 -> 148 bytes
-rw-r--r--default_images/sw/imglst/sch20182.pngbin0 -> 146 bytes
-rw-r--r--default_images/sw/imglst/sch20183.pngbin0 -> 129 bytes
-rw-r--r--default_images/sw/imglst/sch20186.pngbin0 -> 147 bytes
-rw-r--r--default_images/sw/imglst/sch20233.pngbin0 -> 150 bytes
-rw-r--r--default_images/sw/imglst/sch20234.pngbin0 -> 139 bytes
-rw-r--r--default_images/sw/imglst/sch20235.pngbin0 -> 127 bytes
-rw-r--r--default_images/sw/imglst/sch20236.pngbin0 -> 121 bytes
-rw-r--r--default_images/sw/imglst/sch20238.pngbin0 -> 100 bytes
-rw-r--r--default_images/sw/imglst/sch20239.pngbin0 -> 125 bytes
-rw-r--r--default_images/sw/imglst/sch20244.pngbin0 -> 139 bytes
-rw-r--r--default_images/sw/imglst/sch20245.pngbin0 -> 164 bytes
-rw-r--r--default_images/sw/imglst/sch20246.pngbin0 -> 136 bytes
-rw-r--r--default_images/sw/imglst/sch20247.pngbin0 -> 148 bytes
-rw-r--r--default_images/sw/imglst/sch20248.pngbin0 -> 135 bytes
-rw-r--r--default_images/sw/imglst/sch20249.pngbin0 -> 127 bytes
-rw-r--r--default_images/sw/imglst/sch20556.pngbin0 -> 162 bytes
-rw-r--r--default_images/sw/imglst/sch20557.pngbin0 -> 140 bytes
-rw-r--r--default_images/sw/imglst/sch20558.pngbin0 -> 135 bytes
-rw-r--r--default_images/sw/imglst/sf01.pngbin0 -> 657 bytes
-rw-r--r--default_images/sw/imglst/sf02.pngbin0 -> 667 bytes
-rw-r--r--default_images/sw/imglst/sf03.pngbin0 -> 524 bytes
-rw-r--r--default_images/sw/imglst/sf04.pngbin0 -> 572 bytes
-rw-r--r--default_images/sw/imglst/sf05.pngbin0 -> 719 bytes
-rw-r--r--default_images/sw/imglst/sfh01.pngbin0 -> 124 bytes
-rw-r--r--default_images/sw/imglst/sfh02.pngbin0 -> 142 bytes
-rw-r--r--default_images/sw/imglst/sfh03.pngbin0 -> 127 bytes
-rw-r--r--default_images/sw/imglst/sfh04.pngbin0 -> 122 bytes
-rw-r--r--default_images/sw/imglst/sfh05.pngbin0 -> 121 bytes
-rw-r--r--default_images/sw/imglst/sr20000.pngbin0 -> 410 bytes
-rw-r--r--default_images/sw/imglst/sr20001.pngbin0 -> 426 bytes
-rw-r--r--default_images/sw/imglst/sr20002.pngbin0 -> 404 bytes
-rw-r--r--default_images/sw/imglst/sr20003.pngbin0 -> 466 bytes
-rw-r--r--default_images/sw/imglst/sr20004.pngbin0 -> 525 bytes
-rw-r--r--default_images/sw/imglst/sr20005.pngbin0 -> 742 bytes
-rw-r--r--default_images/sw/imglst/sr20006.pngbin0 -> 676 bytes
-rw-r--r--default_images/sw/imglst/sr20007.pngbin0 -> 262 bytes
-rw-r--r--default_images/sw/imglst/sr20008.pngbin0 -> 651 bytes
-rw-r--r--default_images/sw/imglst/sr20009.pngbin0 -> 768 bytes
-rw-r--r--default_images/sw/imglst/sr20010.pngbin0 -> 529 bytes
-rw-r--r--default_images/sw/imglst/sr20011.pngbin0 -> 270 bytes
-rw-r--r--default_images/sw/imglst/sr20012.pngbin0 -> 422 bytes
-rw-r--r--default_images/sw/imglst/sr20013.pngbin0 -> 735 bytes
-rw-r--r--default_images/sw/imglst/sr20014.pngbin0 -> 640 bytes
-rw-r--r--default_images/sw/imglst/sr20015.pngbin0 -> 625 bytes
-rw-r--r--default_images/sw/imglst/sr20016.pngbin0 -> 1008 bytes
-rw-r--r--default_images/sw/imglst/sr20017.pngbin0 -> 424 bytes
-rw-r--r--default_images/sw/imglst/sr20018.pngbin0 -> 571 bytes
-rw-r--r--default_images/sw/imglst/sr20019.pngbin0 -> 570 bytes
-rw-r--r--default_images/sw/imglst/srh20000.pngbin0 -> 104 bytes
-rw-r--r--default_images/sw/imglst/srh20001.pngbin0 -> 104 bytes
-rw-r--r--default_images/sw/imglst/srh20002.pngbin0 -> 245 bytes
-rw-r--r--default_images/sw/imglst/srh20003.pngbin0 -> 101 bytes
-rw-r--r--default_images/sw/imglst/srh20004.pngbin0 -> 109 bytes
-rw-r--r--default_images/sw/imglst/srh20005.pngbin0 -> 156 bytes
-rw-r--r--default_images/sw/imglst/srh20006.pngbin0 -> 155 bytes
-rw-r--r--default_images/sw/imglst/srh20007.pngbin0 -> 268 bytes
-rw-r--r--default_images/sw/imglst/srh20008.pngbin0 -> 160 bytes
-rw-r--r--default_images/sw/imglst/srh20009.pngbin0 -> 132 bytes
-rw-r--r--default_images/sw/imglst/srh20010.pngbin0 -> 101 bytes
-rw-r--r--default_images/sw/imglst/srh20011.pngbin0 -> 101 bytes
-rw-r--r--default_images/sw/imglst/srh20012.pngbin0 -> 114 bytes
-rw-r--r--default_images/sw/imglst/srh20013.pngbin0 -> 153 bytes
-rw-r--r--default_images/sw/imglst/srh20014.pngbin0 -> 129 bytes
-rw-r--r--default_images/sw/imglst/srh20015.pngbin0 -> 139 bytes
-rw-r--r--default_images/sw/imglst/srh20016.pngbin0 -> 167 bytes
-rw-r--r--default_images/sw/imglst/srh20017.pngbin0 -> 115 bytes
-rw-r--r--default_images/sw/imglst/srh20018.pngbin0 -> 115 bytes
-rw-r--r--default_images/sw/imglst/srh20019.pngbin0 -> 141 bytes
-rw-r--r--default_images/sw/imglst/sx01.pngbin0 -> 261 bytes
-rw-r--r--default_images/sw/imglst/sx02.pngbin0 -> 366 bytes
-rw-r--r--default_images/sw/imglst/sx03.pngbin0 -> 732 bytes
-rw-r--r--default_images/sw/imglst/sxh01.pngbin0 -> 284 bytes
-rw-r--r--default_images/sw/imglst/sxh02.pngbin0 -> 107 bytes
-rw-r--r--default_images/sw/imglst/sxh03.pngbin0 -> 148 bytes
-rw-r--r--default_images/sw/imglst/wr01.pngbin0 -> 615 bytes
-rw-r--r--default_images/sw/imglst/wr010.pngbin0 -> 768 bytes
-rw-r--r--default_images/sw/imglst/wr011.pngbin0 -> 743 bytes
-rw-r--r--default_images/sw/imglst/wr02.pngbin0 -> 639 bytes
-rw-r--r--default_images/sw/imglst/wr03.pngbin0 -> 649 bytes
-rw-r--r--default_images/sw/imglst/wr04.pngbin0 -> 661 bytes
-rw-r--r--default_images/sw/imglst/wr05.pngbin0 -> 663 bytes
-rw-r--r--default_images/sw/imglst/wr06.pngbin0 -> 650 bytes
-rw-r--r--default_images/sw/imglst/wr07.pngbin0 -> 721 bytes
-rw-r--r--default_images/sw/imglst/wr08.pngbin0 -> 740 bytes
-rw-r--r--default_images/sw/imglst/wr09.pngbin0 -> 743 bytes
-rw-r--r--default_images/sw/imglst/wrh01.pngbin0 -> 123 bytes
-rw-r--r--default_images/sw/imglst/wrh010.pngbin0 -> 179 bytes
-rw-r--r--default_images/sw/imglst/wrh011.pngbin0 -> 169 bytes
-rw-r--r--default_images/sw/imglst/wrh02.pngbin0 -> 135 bytes
-rw-r--r--default_images/sw/imglst/wrh03.pngbin0 -> 136 bytes
-rw-r--r--default_images/sw/imglst/wrh04.pngbin0 -> 139 bytes
-rw-r--r--default_images/sw/imglst/wrh05.pngbin0 -> 148 bytes
-rw-r--r--default_images/sw/imglst/wrh06.pngbin0 -> 135 bytes
-rw-r--r--default_images/sw/imglst/wrh07.pngbin0 -> 155 bytes
-rw-r--r--default_images/sw/imglst/wrh08.pngbin0 -> 169 bytes
-rw-r--r--default_images/sw/imglst/wrh09.pngbin0 -> 169 bytes
-rw-r--r--default_images/sw/res/all_left.pngbin0 -> 460 bytes
-rw-r--r--default_images/sw/res/all_left_h.pngbin0 -> 106 bytes
-rw-r--r--default_images/sw/res/all_right.pngbin0 -> 448 bytes
-rw-r--r--default_images/sw/res/all_right_h.pngbin0 -> 106 bytes
-rw-r--r--default_images/sw/res/anchor.pngbin0 -> 264 bytes
-rw-r--r--default_images/sw/res/danchor.pngbin0 -> 264 bytes
-rw-r--r--default_images/sw/res/dog.pngbin0 -> 1307 bytes
-rw-r--r--default_images/sw/res/dog_h.pngbin0 -> 199 bytes
-rw-r--r--default_images/sw/res/doublepage_11x23.pngbin0 -> 541 bytes
-rw-r--r--default_images/sw/res/doublepage_11x23_h.pngbin0 -> 118 bytes
-rw-r--r--default_images/sw/res/doublepage_a_11x23.pngbin0 -> 533 bytes
-rw-r--r--default_images/sw/res/doublepage_a_11x23_h.pngbin0 -> 128 bytes
-rw-r--r--default_images/sw/res/emptypage_11x15.pngbin0 -> 428 bytes
-rw-r--r--default_images/sw/res/emptypage_11x15_h.pngbin0 -> 103 bytes
-rw-r--r--default_images/sw/res/emptypage_a_11x15.pngbin0 -> 429 bytes
-rw-r--r--default_images/sw/res/emptypage_a_11x15_h.pngbin0 -> 111 bytes
-rw-r--r--default_images/sw/res/envhc_l.pngbin0 -> 1187 bytes
-rw-r--r--default_images/sw/res/envhc_l_h.pngbin0 -> 142 bytes
-rw-r--r--default_images/sw/res/envhc_u.pngbin0 -> 1042 bytes
-rw-r--r--default_images/sw/res/envhc_u_h.pngbin0 -> 130 bytes
-rw-r--r--default_images/sw/res/envhl_l.pngbin0 -> 1137 bytes
-rw-r--r--default_images/sw/res/envhl_l_h.pngbin0 -> 142 bytes
-rw-r--r--default_images/sw/res/envhl_u.pngbin0 -> 995 bytes
-rw-r--r--default_images/sw/res/envhl_u_h.pngbin0 -> 130 bytes
-rw-r--r--default_images/sw/res/envhr_l.pngbin0 -> 1147 bytes
-rw-r--r--default_images/sw/res/envhr_l_h.pngbin0 -> 143 bytes
-rw-r--r--default_images/sw/res/envhr_u.pngbin0 -> 1002 bytes
-rw-r--r--default_images/sw/res/envhr_u_h.pngbin0 -> 129 bytes
-rw-r--r--default_images/sw/res/envvc_l.pngbin0 -> 1299 bytes
-rw-r--r--default_images/sw/res/envvc_l_h.pngbin0 -> 147 bytes
-rw-r--r--default_images/sw/res/envvc_u.pngbin0 -> 1081 bytes
-rw-r--r--default_images/sw/res/envvc_u_h.pngbin0 -> 139 bytes
-rw-r--r--default_images/sw/res/envvl_l.pngbin0 -> 1231 bytes
-rw-r--r--default_images/sw/res/envvl_l_h.pngbin0 -> 142 bytes
-rw-r--r--default_images/sw/res/envvl_u.pngbin0 -> 1016 bytes
-rw-r--r--default_images/sw/res/envvl_u_h.pngbin0 -> 135 bytes
-rw-r--r--default_images/sw/res/envvr_l.pngbin0 -> 1226 bytes
-rw-r--r--default_images/sw/res/envvr_l_h.pngbin0 -> 142 bytes
-rw-r--r--default_images/sw/res/envvr_u.pngbin0 -> 1014 bytes
-rw-r--r--default_images/sw/res/envvr_u_h.pngbin0 -> 135 bytes
-rw-r--r--default_images/sw/res/one_left.pngbin0 -> 454 bytes
-rw-r--r--default_images/sw/res/one_left_h.pngbin0 -> 101 bytes
-rw-r--r--default_images/sw/res/one_right.pngbin0 -> 465 bytes
-rw-r--r--default_images/sw/res/one_right_h.pngbin0 -> 101 bytes
-rw-r--r--default_images/sw/res/punkt.pngbin0 -> 437 bytes
-rw-r--r--default_images/sw/res/punkt_h.pngbin0 -> 111 bytes
-rw-r--r--default_images/sw/res/styfamnu.pngbin0 -> 719 bytes
-rw-r--r--default_images/sw/res/styfamnu_h.pngbin0 -> 121 bytes
-rw-r--r--default_images/sw/res/twopages_11x25.pngbin0 -> 464 bytes
-rw-r--r--default_images/sw/res/twopages_11x25_h.pngbin0 -> 116 bytes
-rw-r--r--default_images/sw/res/twopages_a_11x25.pngbin0 -> 464 bytes
-rw-r--r--default_images/sw/res/twopages_a_11x25_h.pngbin0 -> 125 bytes
-rw-r--r--default_images/sw/res/x.pngbin0 -> 202 bytes
-rw-r--r--default_images/sw/res/zetlhor2.pngbin0 -> 359 bytes
-rw-r--r--default_images/sw/res/zetlhor2_h.pngbin0 -> 171 bytes
-rw-r--r--default_images/sw/res/zetlver2.pngbin0 -> 387 bytes
-rw-r--r--default_images/sw/res/zetlver2_h.pngbin0 -> 104 bytes
-rw-r--r--default_images/toolkit/source/awt/spinner03-32-hc_01.pngbin0 -> 441 bytes
-rw-r--r--default_images/toolkit/source/awt/spinner03-32-hc_02.pngbin0 -> 436 bytes
-rw-r--r--default_images/toolkit/source/awt/spinner03-32-hc_03.pngbin0 -> 435 bytes
-rw-r--r--default_images/toolkit/source/awt/spinner03-32-hc_04.pngbin0 -> 435 bytes
-rw-r--r--default_images/toolkit/source/awt/spinner03-32-hc_05.pngbin0 -> 439 bytes
-rw-r--r--default_images/toolkit/source/awt/spinner03-32-hc_06.pngbin0 -> 443 bytes
-rw-r--r--default_images/toolkit/source/awt/spinner03-32-hc_07.pngbin0 -> 444 bytes
-rw-r--r--default_images/toolkit/source/awt/spinner03-32-hc_08.pngbin0 -> 439 bytes
-rw-r--r--default_images/toolkit/source/awt/spinner03-32-hc_09.pngbin0 -> 427 bytes
-rw-r--r--default_images/toolkit/source/awt/spinner03-32-hc_10.pngbin0 -> 429 bytes
-rw-r--r--default_images/toolkit/source/awt/spinner03-32-hc_11.pngbin0 -> 429 bytes
-rw-r--r--default_images/toolkit/source/awt/spinner03-32-hc_12.pngbin0 -> 435 bytes
-rw-r--r--default_images/toolkit/source/awt/spinner03-grey_01.pngbin0 -> 666 bytes
-rw-r--r--default_images/toolkit/source/awt/spinner03-grey_02.pngbin0 -> 668 bytes
-rw-r--r--default_images/toolkit/source/awt/spinner03-grey_03.pngbin0 -> 678 bytes
-rw-r--r--default_images/toolkit/source/awt/spinner03-grey_04.pngbin0 -> 680 bytes
-rw-r--r--default_images/toolkit/source/awt/spinner03-grey_05.pngbin0 -> 671 bytes
-rw-r--r--default_images/toolkit/source/awt/spinner03-grey_06.pngbin0 -> 676 bytes
-rw-r--r--default_images/toolkit/source/awt/spinner03-grey_07.pngbin0 -> 692 bytes
-rw-r--r--default_images/toolkit/source/awt/spinner03-grey_08.pngbin0 -> 682 bytes
-rw-r--r--default_images/toolkit/source/awt/spinner03-grey_09.pngbin0 -> 675 bytes
-rw-r--r--default_images/toolkit/source/awt/spinner03-grey_10.pngbin0 -> 673 bytes
-rw-r--r--default_images/toolkit/source/awt/spinner03-grey_11.pngbin0 -> 679 bytes
-rw-r--r--default_images/toolkit/source/awt/spinner03-grey_12.pngbin0 -> 676 bytes
-rw-r--r--default_images/vcl/source/src/check.pngbin0 -> 368 bytes
-rw-r--r--default_images/vcl/source/src/checkmac.pngbin0 -> 377 bytes
-rw-r--r--default_images/vcl/source/src/checkmono.bmpbin0 -> 898 bytes
-rw-r--r--default_images/vcl/source/src/checkos2.pngbin0 -> 388 bytes
-rw-r--r--default_images/vcl/source/src/checkunx.pngbin0 -> 226 bytes
-rw-r--r--default_images/vcl/source/src/checkwin.pngbin0 -> 368 bytes
-rw-r--r--default_images/vcl/source/src/closedoc.pngbin0 -> 309 bytes
-rw-r--r--default_images/vcl/source/src/closedochc.pngbin0 -> 106 bytes
-rw-r--r--default_images/vcl/source/src/collate.pngbin0 -> 672 bytes
-rw-r--r--default_images/vcl/source/src/collate_h.pngbin0 -> 380 bytes
-rw-r--r--default_images/vcl/source/src/msgbox.pngbin0 -> 6023 bytes
-rw-r--r--default_images/vcl/source/src/msgbox_hc.pngbin0 -> 1106 bytes
-rw-r--r--default_images/vcl/source/src/ncollate.pngbin0 -> 635 bytes
-rw-r--r--default_images/vcl/source/src/ncollate_h.pngbin0 -> 393 bytes
-rw-r--r--default_images/vcl/source/src/pin.pngbin0 -> 330 bytes
-rw-r--r--default_images/vcl/source/src/radio.pngbin0 -> 323 bytes
-rw-r--r--default_images/vcl/source/src/radiomac.pngbin0 -> 380 bytes
-rw-r--r--default_images/vcl/source/src/radiomono.bmpbin0 -> 638 bytes
-rw-r--r--default_images/vcl/source/src/radioos2.pngbin0 -> 404 bytes
-rw-r--r--default_images/vcl/source/src/radiounx.pngbin0 -> 368 bytes
-rw-r--r--default_images/vcl/source/src/radiowin.pngbin0 -> 323 bytes
-rw-r--r--default_images/vcl/source/src/scrbmp.pngbin0 -> 749 bytes
-rw-r--r--default_images/vcl/source/src/scrmsk.pngbin0 -> 229 bytes
-rw-r--r--default_images/vcl/source/src/splharw.pngbin0 -> 258 bytes
-rw-r--r--default_images/vcl/source/src/splhpin.pngbin0 -> 299 bytes
-rw-r--r--default_images/vcl/source/src/splvarw.pngbin0 -> 279 bytes
-rw-r--r--default_images/vcl/source/src/splvpin.pngbin0 -> 293 bytes
-rw-r--r--default_images/wizards/res/diagonal.pngbin0 -> 522 bytes
-rw-r--r--default_images/wizards/res/diagonal_h.pngbin0 -> 231 bytes
-rw-r--r--default_images/wizards/res/formarrangefree_42.pngbin0 -> 476 bytes
-rw-r--r--default_images/wizards/res/formarrangefree_42_h.pngbin0 -> 175 bytes
-rw-r--r--default_images/wizards/res/formarrangelistside_42.pngbin0 -> 424 bytes
-rw-r--r--default_images/wizards/res/formarrangelistside_42_h.pngbin0 -> 132 bytes
-rw-r--r--default_images/wizards/res/formarrangelisttop_42.pngbin0 -> 418 bytes
-rw-r--r--default_images/wizards/res/formarrangelisttop_42_h.pngbin0 -> 134 bytes
-rw-r--r--default_images/wizards/res/formarrangetable_42.pngbin0 -> 442 bytes
-rw-r--r--default_images/wizards/res/formarrangetable_42_h.pngbin0 -> 127 bytes
-rw-r--r--default_images/wizards/res/frame_bottom.pngbin0 -> 472 bytes
-rw-r--r--default_images/wizards/res/frame_bottom_h.pngbin0 -> 170 bytes
-rw-r--r--default_images/wizards/res/frame_left.pngbin0 -> 474 bytes
-rw-r--r--default_images/wizards/res/frame_left_h.pngbin0 -> 161 bytes
-rw-r--r--default_images/wizards/res/frame_right.pngbin0 -> 470 bytes
-rw-r--r--default_images/wizards/res/frame_right_h.pngbin0 -> 160 bytes
-rw-r--r--default_images/wizards/res/frame_top.pngbin0 -> 472 bytes
-rw-r--r--default_images/wizards/res/frame_top_h.pngbin0 -> 170 bytes
-rw-r--r--default_images/wizards/res/landscape_32.pngbin0 -> 735 bytes
-rw-r--r--default_images/wizards/res/landscape_32_h.pngbin0 -> 127 bytes
-rw-r--r--default_images/wizards/res/portrait_32.pngbin0 -> 749 bytes
-rw-r--r--default_images/wizards/res/portrait_32_h.pngbin0 -> 126 bytes
-rw-r--r--default_images/wizards/res/simple.pngbin0 -> 460 bytes
-rw-r--r--default_images/wizards/res/simple_h.pngbin0 -> 161 bytes
-rw-r--r--default_images/wizards/res/table_2.pngbin0 -> 477 bytes
-rw-r--r--default_images/wizards/res/table_2_h.pngbin0 -> 181 bytes
-rw-r--r--default_images/wizards/res/table_3.pngbin0 -> 468 bytes
-rw-r--r--default_images/wizards/res/table_3_h.pngbin0 -> 169 bytes
-rw-r--r--default_images/wizards/res/ttt.pngbin0 -> 749 bytes
-rw-r--r--default_images/wizards/res/zigzag.pngbin0 -> 539 bytes
-rw-r--r--default_images/wizards/res/zigzag_h.pngbin0 -> 242 bytes
-rw-r--r--default_images/xmlsecurity/res/caution_11x16.pngbin0 -> 536 bytes
-rw-r--r--default_images/xmlsecurity/res/caution_11x16_h.pngbin0 -> 145 bytes
-rw-r--r--default_images/xmlsecurity/res/certificate_16.pngbin0 -> 708 bytes
-rw-r--r--default_images/xmlsecurity/res/certificate_16_h.pngbin0 -> 157 bytes
-rw-r--r--default_images/xmlsecurity/res/certificate_40x56.pngbin0 -> 2614 bytes
-rw-r--r--default_images/xmlsecurity/res/certificate_40x56_h.pngbin0 -> 267 bytes
-rw-r--r--default_images/xmlsecurity/res/key_12.pngbin0 -> 439 bytes
-rw-r--r--default_images/xmlsecurity/res/key_12_h.pngbin0 -> 120 bytes
-rw-r--r--default_images/xmlsecurity/res/notcertificate_16.pngbin0 -> 876 bytes
-rw-r--r--default_images/xmlsecurity/res/notcertificate_16_h.pngbin0 -> 194 bytes
-rw-r--r--default_images/xmlsecurity/res/notcertificate_40x56.pngbin0 -> 3343 bytes
-rw-r--r--default_images/xmlsecurity/res/notcertificate_40x56_h.pngbin0 -> 1213 bytes
-rw-r--r--default_images/xmlsecurity/res/signet_11x16.pngbin0 -> 604 bytes
-rw-r--r--default_images/xmlsecurity/res/signet_11x16_h.pngbin0 -> 147 bytes
-rw-r--r--desktop/inc/app.hxx217
-rw-r--r--desktop/inc/deployment.hrc87
-rw-r--r--desktop/inc/makefile.mk47
-rw-r--r--desktop/inc/pch/precompiled_desktop.cxx29
-rw-r--r--desktop/inc/pch/precompiled_desktop.hxx40
-rw-r--r--desktop/os2/source/applauncher/launcher.cxx122
-rw-r--r--desktop/os2/source/applauncher/launcher.hxx9
-rw-r--r--desktop/os2/source/applauncher/makefile.mk121
-rw-r--r--desktop/os2/source/applauncher/officeloader.cxx3
-rw-r--r--desktop/os2/source/applauncher/quickstart.cxx3
-rw-r--r--desktop/os2/source/applauncher/sbase.cxx3
-rw-r--r--desktop/os2/source/applauncher/scalc.cxx3
-rw-r--r--desktop/os2/source/applauncher/sdraw.cxx3
-rw-r--r--desktop/os2/source/applauncher/simpress.cxx3
-rw-r--r--desktop/os2/source/applauncher/smath.cxx3
-rw-r--r--desktop/os2/source/applauncher/swriter.cxx3
-rw-r--r--desktop/prj/build.lst43
-rw-r--r--desktop/prj/d.lst145
-rw-r--r--desktop/qa/deployment_misc/makefile.mk54
-rw-r--r--desktop/qa/deployment_misc/test_dp_version.cxx90
-rw-r--r--desktop/qa/deployment_misc/version.map34
-rw-r--r--desktop/registry/data/org/openoffice/Office/Jobs.xcu74
-rw-r--r--desktop/registry/data/org/openoffice/Office/makefile.mk77
-rw-r--r--desktop/scripts/basis-link1
-rw-r--r--desktop/scripts/makefile.mk67
-rw-r--r--desktop/scripts/mozwrapper.sh8
-rw-r--r--desktop/scripts/odf-basis-link1
-rw-r--r--desktop/scripts/sbase.sh4
-rw-r--r--desktop/scripts/scalc.sh4
-rw-r--r--desktop/scripts/sdraw.sh4
-rw-r--r--desktop/scripts/simpress.sh4
-rw-r--r--desktop/scripts/smaster.sh4
-rw-r--r--desktop/scripts/smath.sh4
-rw-r--r--desktop/scripts/so-basis-link1
-rw-r--r--desktop/scripts/soffice.sh135
-rw-r--r--desktop/scripts/sweb.sh4
-rw-r--r--desktop/scripts/swriter.sh4
-rw-r--r--desktop/scripts/unoinfo.sh56
-rw-r--r--desktop/scripts/unopkg.sh76
-rw-r--r--desktop/scripts/ure-link1
-rw-r--r--desktop/source/app/app.cxx3338
-rw-r--r--desktop/source/app/appfirststart.cxx318
-rw-r--r--desktop/source/app/appinit.cxx484
-rw-r--r--desktop/source/app/appinit.hxx50
-rw-r--r--desktop/source/app/appsys.cxx69
-rw-r--r--desktop/source/app/appsys.hxx42
-rwxr-xr-xdesktop/source/app/check_ext_deps.cxx431
-rw-r--r--desktop/source/app/checkinstall.cxx118
-rw-r--r--desktop/source/app/checkinstall.hxx42
-rw-r--r--desktop/source/app/cmdlineargs.cxx900
-rw-r--r--desktop/source/app/cmdlineargs.hxx212
-rw-r--r--desktop/source/app/cmdlinehelp.cxx173
-rw-r--r--desktop/source/app/cmdlinehelp.hxx23
-rw-r--r--desktop/source/app/configinit.cxx303
-rw-r--r--desktop/source/app/configinit.hxx71
-rw-r--r--desktop/source/app/copyright_ascii_ooo.c10
-rw-r--r--desktop/source/app/copyright_ascii_sun.c8
-rw-r--r--desktop/source/app/desktop.hrc91
-rw-r--r--desktop/source/app/desktop.src234
-rw-r--r--desktop/source/app/desktopcontext.cxx63
-rw-r--r--desktop/source/app/desktopcontext.hxx50
-rw-r--r--desktop/source/app/desktopresid.cxx44
-rw-r--r--desktop/source/app/desktopresid.hxx44
-rw-r--r--desktop/source/app/dispatchwatcher.cxx514
-rw-r--r--desktop/source/app/dispatchwatcher.hxx124
-rw-r--r--desktop/source/app/exports.dxp3
-rw-r--r--desktop/source/app/langselect.cxx558
-rw-r--r--desktop/source/app/langselect.hxx74
-rw-r--r--desktop/source/app/lockfile.cxx256
-rw-r--r--desktop/source/app/lockfile.hxx99
-rw-r--r--desktop/source/app/lockfile2.cxx70
-rw-r--r--desktop/source/app/main.c36
-rw-r--r--desktop/source/app/makefile.mk115
-rw-r--r--desktop/source/app/officeipcthread.cxx996
-rw-r--r--desktop/source/app/officeipcthread.hxx165
-rw-r--r--desktop/source/app/omutexmember.hxx61
-rw-r--r--desktop/source/app/sofficemain.cxx52
-rw-r--r--desktop/source/app/sofficemain.h43
-rw-r--r--desktop/source/app/userinstall.cxx301
-rw-r--r--desktop/source/app/userinstall.hxx52
-rw-r--r--desktop/source/app/version.map34
-rw-r--r--desktop/source/deployment/dp_log.cxx211
-rw-r--r--desktop/source/deployment/dp_persmap.cxx253
-rw-r--r--desktop/source/deployment/dp_services.cxx136
-rw-r--r--desktop/source/deployment/dp_xml.cxx78
-rw-r--r--desktop/source/deployment/gui/descedit.cxx100
-rw-r--r--desktop/source/deployment/gui/descedit.hxx57
-rw-r--r--desktop/source/deployment/gui/dp_gui.h98
-rwxr-xr-xdesktop/source/deployment/gui/dp_gui.hrc180
-rw-r--r--desktop/source/deployment/gui/dp_gui_autoscrolledit.cxx74
-rw-r--r--desktop/source/deployment/gui/dp_gui_autoscrolledit.hxx51
-rw-r--r--desktop/source/deployment/gui/dp_gui_backend.src131
-rw-r--r--desktop/source/deployment/gui/dp_gui_dependencydialog.cxx86
-rw-r--r--desktop/source/deployment/gui/dp_gui_dependencydialog.hxx68
-rw-r--r--desktop/source/deployment/gui/dp_gui_dependencydialog.src70
-rwxr-xr-xdesktop/source/deployment/gui/dp_gui_dialog.src345
-rw-r--r--desktop/source/deployment/gui/dp_gui_dialog2.cxx1780
-rwxr-xr-xdesktop/source/deployment/gui/dp_gui_dialog2.hxx266
-rw-r--r--desktop/source/deployment/gui/dp_gui_dialog2.src252
-rwxr-xr-xdesktop/source/deployment/gui/dp_gui_extensioncmdqueue.cxx1212
-rwxr-xr-xdesktop/source/deployment/gui/dp_gui_extensioncmdqueue.hxx111
-rwxr-xr-xdesktop/source/deployment/gui/dp_gui_extlistbox.cxx1210
-rwxr-xr-xdesktop/source/deployment/gui/dp_gui_extlistbox.hxx270
-rwxr-xr-xdesktop/source/deployment/gui/dp_gui_service.cxx376
-rw-r--r--desktop/source/deployment/gui/dp_gui_shared.hxx62
-rw-r--r--desktop/source/deployment/gui/dp_gui_system.cxx59
-rw-r--r--desktop/source/deployment/gui/dp_gui_system.hxx37
-rwxr-xr-xdesktop/source/deployment/gui/dp_gui_theextmgr.cxx531
-rwxr-xr-xdesktop/source/deployment/gui/dp_gui_theextmgr.hxx131
-rw-r--r--desktop/source/deployment/gui/dp_gui_thread.cxx82
-rw-r--r--desktop/source/deployment/gui/dp_gui_thread.hxx84
-rw-r--r--desktop/source/deployment/gui/dp_gui_updatedata.hxx86
-rw-r--r--desktop/source/deployment/gui/dp_gui_updatedialog.cxx1301
-rw-r--r--desktop/source/deployment/gui/dp_gui_updatedialog.hxx233
-rw-r--r--desktop/source/deployment/gui/dp_gui_updatedialog.src265
-rw-r--r--desktop/source/deployment/gui/dp_gui_updateinstalldialog.cxx756
-rw-r--r--desktop/source/deployment/gui/dp_gui_updateinstalldialog.hxx144
-rw-r--r--desktop/source/deployment/gui/dp_gui_updateinstalldialog.src203
-rw-r--r--desktop/source/deployment/gui/dp_gui_versionboxes.src76
-rw-r--r--desktop/source/deployment/gui/license_dialog.cxx330
-rw-r--r--desktop/source/deployment/gui/license_dialog.hxx71
-rw-r--r--desktop/source/deployment/gui/makefile.mk109
-rw-r--r--desktop/source/deployment/inc/db.hxx173
-rw-r--r--desktop/source/deployment/inc/dp_dependencies.hxx82
-rw-r--r--desktop/source/deployment/inc/dp_descriptioninfoset.hxx299
-rw-r--r--desktop/source/deployment/inc/dp_identifier.hxx92
-rw-r--r--desktop/source/deployment/inc/dp_interact.h150
-rw-r--r--desktop/source/deployment/inc/dp_misc.h179
-rw-r--r--desktop/source/deployment/inc/dp_misc.mk42
-rw-r--r--desktop/source/deployment/inc/dp_misc_api.hxx40
-rw-r--r--desktop/source/deployment/inc/dp_persmap.h65
-rw-r--r--desktop/source/deployment/inc/dp_platform.hxx56
-rw-r--r--desktop/source/deployment/inc/dp_resource.h67
-rw-r--r--desktop/source/deployment/inc/dp_ucb.h91
-rwxr-xr-xdesktop/source/deployment/inc/dp_update.hxx147
-rw-r--r--desktop/source/deployment/inc/dp_version.hxx48
-rw-r--r--desktop/source/deployment/inc/dp_xml.h57
-rw-r--r--desktop/source/deployment/makefile.mk112
-rw-r--r--desktop/source/deployment/manager/dp_activepackages.cxx206
-rw-r--r--desktop/source/deployment/manager/dp_activepackages.hxx99
-rw-r--r--desktop/source/deployment/manager/dp_commandenvironments.cxx324
-rw-r--r--desktop/source/deployment/manager/dp_commandenvironments.hxx183
-rw-r--r--desktop/source/deployment/manager/dp_extensionmanager.cxx1519
-rw-r--r--desktop/source/deployment/manager/dp_extensionmanager.hxx324
-rw-r--r--desktop/source/deployment/manager/dp_informationprovider.cxx393
-rw-r--r--desktop/source/deployment/manager/dp_manager.cxx1673
-rw-r--r--desktop/source/deployment/manager/dp_manager.h294
-rw-r--r--desktop/source/deployment/manager/dp_manager.hrc39
-rw-r--r--desktop/source/deployment/manager/dp_manager.src59
-rw-r--r--desktop/source/deployment/manager/dp_managerfac.cxx200
-rw-r--r--desktop/source/deployment/manager/dp_properties.cxx169
-rw-r--r--desktop/source/deployment/manager/dp_properties.hxx78
-rw-r--r--desktop/source/deployment/manager/makefile.mk55
-rw-r--r--desktop/source/deployment/misc/db.cxx272
-rw-r--r--desktop/source/deployment/misc/dp_dependencies.cxx171
-rw-r--r--desktop/source/deployment/misc/dp_descriptioninfoset.cxx864
-rw-r--r--desktop/source/deployment/misc/dp_identifier.cxx73
-rw-r--r--desktop/source/deployment/misc/dp_interact.cxx185
-rw-r--r--desktop/source/deployment/misc/dp_misc.cxx630
-rw-r--r--desktop/source/deployment/misc/dp_misc.hrc33
-rw-r--r--desktop/source/deployment/misc/dp_misc.src40
-rw-r--r--desktop/source/deployment/misc/dp_platform.cxx232
-rw-r--r--desktop/source/deployment/misc/dp_resource.cxx233
-rw-r--r--desktop/source/deployment/misc/dp_ucb.cxx320
-rw-r--r--desktop/source/deployment/misc/dp_update.cxx447
-rw-r--r--desktop/source/deployment/misc/dp_version.cxx74
-rw-r--r--desktop/source/deployment/misc/makefile.mk95
-rw-r--r--desktop/source/deployment/registry/component/dp_compbackenddb.cxx156
-rw-r--r--desktop/source/deployment/registry/component/dp_compbackenddb.hxx120
-rw-r--r--desktop/source/deployment/registry/component/dp_component.cxx1586
-rw-r--r--desktop/source/deployment/registry/component/dp_component.hrc39
-rw-r--r--desktop/source/deployment/registry/component/dp_component.src54
-rw-r--r--desktop/source/deployment/registry/component/makefile.mk48
-rw-r--r--desktop/source/deployment/registry/configuration/dp_configuration.cxx783
-rw-r--r--desktop/source/deployment/registry/configuration/dp_configuration.hrc36
-rw-r--r--desktop/source/deployment/registry/configuration/dp_configuration.src39
-rw-r--r--desktop/source/deployment/registry/configuration/dp_configurationbackenddb.cxx183
-rw-r--r--desktop/source/deployment/registry/configuration/dp_configurationbackenddb.hxx93
-rw-r--r--desktop/source/deployment/registry/configuration/makefile.mk52
-rw-r--r--desktop/source/deployment/registry/dp_backend.cxx807
-rw-r--r--desktop/source/deployment/registry/dp_backenddb.cxx649
-rw-r--r--desktop/source/deployment/registry/dp_registry.cxx558
-rw-r--r--desktop/source/deployment/registry/dp_registry.src59
-rw-r--r--desktop/source/deployment/registry/executable/dp_executable.cxx331
-rw-r--r--desktop/source/deployment/registry/executable/dp_executablebackenddb.cxx81
-rw-r--r--desktop/source/deployment/registry/executable/dp_executablebackenddb.hxx76
-rw-r--r--desktop/source/deployment/registry/executable/makefile.mk44
-rw-r--r--desktop/source/deployment/registry/help/dp_help.cxx658
-rw-r--r--desktop/source/deployment/registry/help/dp_help.hrc39
-rw-r--r--desktop/source/deployment/registry/help/dp_help.src44
-rw-r--r--desktop/source/deployment/registry/help/dp_helpbackenddb.cxx175
-rw-r--r--desktop/source/deployment/registry/help/dp_helpbackenddb.hxx89
-rw-r--r--desktop/source/deployment/registry/help/makefile.mk52
-rw-r--r--desktop/source/deployment/registry/inc/dp_backend.h379
-rw-r--r--desktop/source/deployment/registry/inc/dp_backenddb.hxx170
-rw-r--r--desktop/source/deployment/registry/inc/dp_registry.hrc40
-rw-r--r--desktop/source/deployment/registry/makefile.mk49
-rw-r--r--desktop/source/deployment/registry/package/dp_extbackenddb.cxx135
-rw-r--r--desktop/source/deployment/registry/package/dp_extbackenddb.hxx96
-rw-r--r--desktop/source/deployment/registry/package/dp_package.cxx1645
-rw-r--r--desktop/source/deployment/registry/package/dp_package.hrc35
-rw-r--r--desktop/source/deployment/registry/package/dp_package.src34
-rw-r--r--desktop/source/deployment/registry/package/makefile.mk48
-rw-r--r--desktop/source/deployment/registry/script/dp_lib_container.cxx73
-rw-r--r--desktop/source/deployment/registry/script/dp_lib_container.h57
-rw-r--r--desktop/source/deployment/registry/script/dp_script.cxx499
-rw-r--r--desktop/source/deployment/registry/script/dp_script.hrc39
-rw-r--r--desktop/source/deployment/registry/script/dp_script.src49
-rw-r--r--desktop/source/deployment/registry/script/dp_scriptbackenddb.cxx85
-rw-r--r--desktop/source/deployment/registry/script/dp_scriptbackenddb.hxx73
-rw-r--r--desktop/source/deployment/registry/script/makefile.mk49
-rw-r--r--desktop/source/deployment/registry/sfwk/dp_parceldesc.cxx130
-rw-r--r--desktop/source/deployment/registry/sfwk/dp_parceldesc.hxx89
-rw-r--r--desktop/source/deployment/registry/sfwk/dp_sfwk.cxx408
-rw-r--r--desktop/source/deployment/registry/sfwk/dp_sfwk.hrc35
-rw-r--r--desktop/source/deployment/registry/sfwk/dp_sfwk.src35
-rw-r--r--desktop/source/deployment/registry/sfwk/makefile.mk48
-rw-r--r--desktop/source/deployment/target.pmk36
-rw-r--r--desktop/source/deployment/unopkg/makefile.mk48
-rw-r--r--desktop/source/deployment/unopkg/unopkg.src84
-rw-r--r--desktop/source/inc/exithelper.hxx68
-rw-r--r--desktop/source/inc/helpid.hrc78
-rw-r--r--desktop/source/migration/cfgfilter.cxx333
-rw-r--r--desktop/source/migration/cfgfilter.hxx173
-rw-r--r--desktop/source/migration/makefile.mk59
-rwxr-xr-xdesktop/source/migration/migration.cxx1365
-rw-r--r--desktop/source/migration/migration.hxx46
-rw-r--r--desktop/source/migration/migration_impl.hxx252
-rw-r--r--desktop/source/migration/pages.cxx673
-rw-r--r--desktop/source/migration/pages.hxx214
-rw-r--r--desktop/source/migration/services/autocorrmigration.cxx285
-rw-r--r--desktop/source/migration/services/autocorrmigration.hxx102
-rw-r--r--desktop/source/migration/services/basicmigration.cxx274
-rw-r--r--desktop/source/migration/services/basicmigration.hxx102
-rw-r--r--desktop/source/migration/services/cexports.cxx80
-rw-r--r--desktop/source/migration/services/cexportsoo3.cxx68
-rw-r--r--desktop/source/migration/services/cppumaker.mk36
-rw-r--r--desktop/source/migration/services/jvmfwk.cxx529
-rw-r--r--desktop/source/migration/services/jvmfwk.hxx50
-rw-r--r--desktop/source/migration/services/makefile.mk119
-rw-r--r--desktop/source/migration/services/migrationoo2.xml78
-rwxr-xr-xdesktop/source/migration/services/migrationoo3.map8
-rw-r--r--desktop/source/migration/services/misc.hxx48
-rw-r--r--desktop/source/migration/services/oo3extensionmigration.cxx583
-rw-r--r--desktop/source/migration/services/oo3extensionmigration.hxx160
-rwxr-xr-xdesktop/source/migration/services/wordbookmigration.cxx322
-rwxr-xr-xdesktop/source/migration/services/wordbookmigration.hxx102
-rw-r--r--desktop/source/migration/wizard.cxx654
-rw-r--r--desktop/source/migration/wizard.hrc99
-rw-r--r--desktop/source/migration/wizard.hxx106
-rw-r--r--desktop/source/migration/wizard.src424
-rw-r--r--desktop/source/offacc/acceptor.cxx367
-rw-r--r--desktop/source/offacc/acceptor.hxx129
-rw-r--r--desktop/source/offacc/makefile.mk62
-rw-r--r--desktop/source/pagein/file_image.h78
-rw-r--r--desktop/source/pagein/file_image_unx.c150
-rw-r--r--desktop/source/pagein/makefile.mk165
-rw-r--r--desktop/source/pagein/pagein.c149
-rw-r--r--desktop/source/pkgchk/unopkg/makefile.mk104
-rw-r--r--desktop/source/pkgchk/unopkg/unopkg_app.cxx691
-rw-r--r--desktop/source/pkgchk/unopkg/unopkg_cmdenv.cxx433
-rw-r--r--desktop/source/pkgchk/unopkg/unopkg_main.c36
-rw-r--r--desktop/source/pkgchk/unopkg/unopkg_main.h43
-rw-r--r--desktop/source/pkgchk/unopkg/unopkg_misc.cxx637
-rw-r--r--desktop/source/pkgchk/unopkg/unopkg_shared.h188
-rw-r--r--desktop/source/pkgchk/unopkg/version.map34
-rw-r--r--desktop/source/registration/com/sun/star/registration/Registration.java339
-rw-r--r--desktop/source/registration/com/sun/star/registration/makefile.mk55
-rw-r--r--desktop/source/registration/com/sun/star/registration/manifest2
-rw-r--r--desktop/source/registration/com/sun/star/servicetag/BrowserSupport.java201
-rw-r--r--desktop/source/registration/com/sun/star/servicetag/Installer.java943
-rw-r--r--desktop/source/registration/com/sun/star/servicetag/LinuxSystemEnvironment.java323
-rw-r--r--desktop/source/registration/com/sun/star/servicetag/RegistrationData.java531
-rw-r--r--desktop/source/registration/com/sun/star/servicetag/RegistrationDocument.java440
-rw-r--r--desktop/source/registration/com/sun/star/servicetag/Registry.java554
-rw-r--r--desktop/source/registration/com/sun/star/servicetag/ServiceTag.java636
-rw-r--r--desktop/source/registration/com/sun/star/servicetag/SolarisServiceTag.java64
-rw-r--r--desktop/source/registration/com/sun/star/servicetag/SolarisSystemEnvironment.java421
-rw-r--r--desktop/source/registration/com/sun/star/servicetag/SunConnection.java292
-rw-r--r--desktop/source/registration/com/sun/star/servicetag/SysnetRegistryHelper.java376
-rw-r--r--desktop/source/registration/com/sun/star/servicetag/SystemEnvironment.java436
-rw-r--r--desktop/source/registration/com/sun/star/servicetag/UnauthorizedAccessException.java55
-rw-r--r--desktop/source/registration/com/sun/star/servicetag/Util.java293
-rw-r--r--desktop/source/registration/com/sun/star/servicetag/WindowsSystemEnvironment.java232
-rw-r--r--desktop/source/registration/com/sun/star/servicetag/makefile.mk79
-rw-r--r--desktop/source/registration/com/sun/star/servicetag/resources/product_registration.xsd366
-rw-r--r--desktop/source/so_comp/evaluation.cxx205
-rw-r--r--desktop/source/so_comp/evaluation.hxx92
-rw-r--r--desktop/source/so_comp/makefile.mk77
-rw-r--r--desktop/source/so_comp/oemjob.cxx280
-rw-r--r--desktop/source/so_comp/oemjob.hxx92
-rw-r--r--desktop/source/so_comp/services.cxx160
-rwxr-xr-xdesktop/source/splash/firststart.cxx156
-rwxr-xr-xdesktop/source/splash/firststart.hxx90
-rw-r--r--desktop/source/splash/makefile.mk89
-rwxr-xr-xdesktop/source/splash/services_spl.cxx157
-rw-r--r--desktop/source/splash/splash.cxx715
-rw-r--r--desktop/source/splash/splash.hxx136
-rw-r--r--desktop/test/deployment/boxt/Addons.xcu50
-rw-r--r--desktop/test/deployment/boxt/ProtocolHandler.xcu38
-rw-r--r--desktop/test/deployment/boxt/boxt.cxx235
-rw-r--r--desktop/test/deployment/boxt/description.xml39
-rw-r--r--desktop/test/deployment/boxt/makefile.mk68
-rw-r--r--desktop/test/deployment/boxt/manifest.xml37
-rw-r--r--desktop/test/deployment/dependencies/broken-dependency.oxtbin0 -> 1655 bytes
-rw-r--r--desktop/test/deployment/dependencies/double-dependencies.oxtbin0 -> 1651 bytes
-rw-r--r--desktop/test/deployment/dependencies/empty-dependencies.oxtbin0 -> 1624 bytes
-rw-r--r--desktop/test/deployment/dependencies/funny-dependency.oxtbin0 -> 1730 bytes
-rw-r--r--desktop/test/deployment/dependencies/license-dependency.oxtbin0 -> 1891 bytes
-rw-r--r--desktop/test/deployment/dependencies/many-dependencies.oxtbin0 -> 1702 bytes
-rw-r--r--desktop/test/deployment/dependencies/minattr22.oxtbin0 -> 1690 bytes
-rw-r--r--desktop/test/deployment/dependencies/minattr23.oxtbin0 -> 1690 bytes
-rw-r--r--desktop/test/deployment/dependencies/minattr24.oxtbin0 -> 1690 bytes
-rw-r--r--desktop/test/deployment/dependencies/no-dependencies.oxtbin0 -> 1611 bytes
-rw-r--r--desktop/test/deployment/dependencies/no-description.oxtbin0 -> 1360 bytes
-rw-r--r--desktop/test/deployment/dependencies/readme.txt82
-rw-r--r--desktop/test/deployment/dependencies/unknown-dependency.oxtbin0 -> 1633 bytes
-rw-r--r--desktop/test/deployment/dependencies/version10000.oxtbin0 -> 1668 bytes
-rw-r--r--desktop/test/deployment/dependencies/version21.oxtbin0 -> 1666 bytes
-rw-r--r--desktop/test/deployment/dependencies/version21ns.oxtbin0 -> 1661 bytes
-rw-r--r--desktop/test/deployment/dependencies/version21other.oxtbin0 -> 1679 bytes
-rw-r--r--desktop/test/deployment/dependencies/version22.oxtbin0 -> 1666 bytes
-rw-r--r--desktop/test/deployment/dependencies/version23.oxtbin0 -> 1666 bytes
-rw-r--r--desktop/test/deployment/dependencies/versionempty.oxtbin0 -> 1675 bytes
-rw-r--r--desktop/test/deployment/dependencies/versionnone.oxtbin0 -> 1674 bytes
-rw-r--r--desktop/test/deployment/description/desc1.oxtbin0 -> 2096 bytes
-rw-r--r--desktop/test/deployment/description/desc2.oxtbin0 -> 2091 bytes
-rw-r--r--desktop/test/deployment/description/desc3.oxtbin0 -> 2070 bytes
-rw-r--r--desktop/test/deployment/description/desc4.oxtbin0 -> 2061 bytes
-rw-r--r--desktop/test/deployment/description/desc5.oxtbin0 -> 2041 bytes
-rwxr-xr-xdesktop/test/deployment/description/readme.txt23
-rw-r--r--desktop/test/deployment/display_name/name1.oxtbin0 -> 704 bytes
-rw-r--r--desktop/test/deployment/display_name/name2.oxtbin0 -> 699 bytes
-rw-r--r--desktop/test/deployment/display_name/name3.oxtbin0 -> 681 bytes
-rw-r--r--desktop/test/deployment/display_name/name4.oxtbin0 -> 675 bytes
-rw-r--r--desktop/test/deployment/display_name/name5.oxtbin0 -> 654 bytes
-rw-r--r--desktop/test/deployment/display_name/readme.txt26
-rw-r--r--desktop/test/deployment/executable_content/build/hello.c45
-rw-r--r--desktop/test/deployment/executable_content/build/makefile.mk51
-rw-r--r--desktop/test/deployment/executable_content/build/readme.txt2
-rw-r--r--desktop/test/deployment/executable_content/hello.oxtbin0 -> 35048 bytes
-rw-r--r--desktop/test/deployment/executable_content/readme.txt12
-rw-r--r--desktop/test/deployment/identifier/explicit/identifier.oxtbin0 -> 1660 bytes
-rw-r--r--desktop/test/deployment/identifier/legacy/identifier.oxtbin0 -> 1634 bytes
-rw-r--r--desktop/test/deployment/identifier/readme.txt33
-rw-r--r--desktop/test/deployment/locationtest/LocationTest.idl40
-rw-r--r--desktop/test/deployment/locationtest/LocationTest.java165
-rw-r--r--desktop/test/deployment/locationtest/LocationTest.odtbin0 -> 7681 bytes
-rw-r--r--desktop/test/deployment/locationtest/MANIFEST.MF2
-rw-r--r--desktop/test/deployment/locationtest/delzip1
-rw-r--r--desktop/test/deployment/locationtest/description.xml13
-rw-r--r--desktop/test/deployment/locationtest/makefile.mk84
-rw-r--r--desktop/test/deployment/locationtest/manifest.xml5
-rw-r--r--desktop/test/deployment/options/handler/com/sun/star/comp/extensionoptions/MANIFEST.MF2
-rw-r--r--desktop/test/deployment/options/handler/com/sun/star/comp/extensionoptions/OptionsEventHandler.java449
-rw-r--r--desktop/test/deployment/options/handler/com/sun/star/comp/extensionoptions/makefile.mk53
-rw-r--r--desktop/test/deployment/options/leaf1.oxtbin0 -> 8308 bytes
-rw-r--r--desktop/test/deployment/options/leaf1mod.oxtbin0 -> 8310 bytes
-rw-r--r--desktop/test/deployment/options/leaf2.oxtbin0 -> 8338 bytes
-rw-r--r--desktop/test/deployment/options/leaves1.oxtbin0 -> 21158 bytes
-rw-r--r--desktop/test/deployment/options/leaves2.oxtbin0 -> 21153 bytes
-rw-r--r--desktop/test/deployment/options/leaves3.oxtbin0 -> 21080 bytes
-rw-r--r--desktop/test/deployment/options/modules1.oxtbin0 -> 24317 bytes
-rw-r--r--desktop/test/deployment/options/modules2.oxtbin0 -> 24196 bytes
-rw-r--r--desktop/test/deployment/options/nodes1.oxtbin0 -> 1882 bytes
-rw-r--r--desktop/test/deployment/options/nodes2.oxtbin0 -> 24287 bytes
-rw-r--r--desktop/test/deployment/options/nodes3.oxtbin0 -> 24315 bytes
-rw-r--r--desktop/test/deployment/options/nodes4.oxtbin0 -> 24318 bytes
-rw-r--r--desktop/test/deployment/options/nodes5.oxtbin0 -> 12616 bytes
-rw-r--r--desktop/test/deployment/options/readme.txt200
-rw-r--r--desktop/test/deployment/simple_license/BadDesc.oxtbin0 -> 9663 bytes
-rw-r--r--desktop/test/deployment/simple_license/BadNamespace.oxtbin0 -> 9736 bytes
-rw-r--r--desktop/test/deployment/simple_license/BadRoot.oxtbin0 -> 9073 bytes
-rw-r--r--desktop/test/deployment/simple_license/Locale1.oxtbin0 -> 2126 bytes
-rw-r--r--desktop/test/deployment/simple_license/Locale2.oxtbin0 -> 2121 bytes
-rw-r--r--desktop/test/deployment/simple_license/Locale3.oxtbin0 -> 2101 bytes
-rw-r--r--desktop/test/deployment/simple_license/Locale4.oxtbin0 -> 2094 bytes
-rw-r--r--desktop/test/deployment/simple_license/Locale5.oxtbin0 -> 2072 bytes
-rw-r--r--desktop/test/deployment/simple_license/Locale6.oxtbin0 -> 1397 bytes
-rw-r--r--desktop/test/deployment/simple_license/LongLic.oxtbin0 -> 9521 bytes
-rw-r--r--desktop/test/deployment/simple_license/MissingLic.oxtbin0 -> 9214 bytes
-rw-r--r--desktop/test/deployment/simple_license/MissingLicRef.oxtbin0 -> 9332 bytes
-rw-r--r--desktop/test/deployment/simple_license/NoDefLang.oxtbin0 -> 9360 bytes
-rw-r--r--desktop/test/deployment/simple_license/NoDesc.oxtbin0 -> 8722 bytes
-rw-r--r--desktop/test/deployment/simple_license/NoLang.oxtbin0 -> 9217 bytes
-rw-r--r--desktop/test/deployment/simple_license/Prefix.oxtbin0 -> 1112 bytes
-rw-r--r--desktop/test/deployment/simple_license/ShortLicense.oxtbin0 -> 9381 bytes
-rw-r--r--desktop/test/deployment/simple_license/ShortLicenseShared.oxtbin0 -> 9382 bytes
-rwxr-xr-xdesktop/test/deployment/simple_license/suppress_license.oxtbin0 -> 2143 bytes
-rw-r--r--desktop/test/deployment/simple_license/tests_simple_license.odtbin0 -> 16629 bytes
-rw-r--r--desktop/test/deployment/update/changing_display_name/change1.oxtbin0 -> 1650 bytes
-rw-r--r--desktop/test/deployment/update/changing_display_name/change1_mod.oxtbin0 -> 1673 bytes
-rw-r--r--desktop/test/deployment/update/changing_display_name/readme.txt13
-rw-r--r--desktop/test/deployment/update/changing_display_name/update1/change1.oxtbin0 -> 1675 bytes
-rw-r--r--desktop/test/deployment/update/changing_display_name/update1/change1.update.xml10
-rw-r--r--desktop/test/deployment/update/changing_display_name/update2/change1.oxtbin0 -> 1687 bytes
-rw-r--r--desktop/test/deployment/update/changing_display_name/update2/change1.update.xml10
-rw-r--r--desktop/test/deployment/update/default_url/default1.oxtbin0 -> 1544 bytes
-rw-r--r--desktop/test/deployment/update/default_url/default2.oxtbin0 -> 1544 bytes
-rw-r--r--desktop/test/deployment/update/default_url/readme.txt9
-rw-r--r--desktop/test/deployment/update/default_url/update/default1.oxtbin0 -> 1546 bytes
-rw-r--r--desktop/test/deployment/update/default_url/update/default1.update.xml10
-rw-r--r--desktop/test/deployment/update/default_url/update/default2.oxtbin0 -> 1546 bytes
-rw-r--r--desktop/test/deployment/update/default_url/update/default2.update.xml10
-rw-r--r--desktop/test/deployment/update/default_url/update/feed1.xml33
-rw-r--r--desktop/test/deployment/update/defect/fail1.oxtbin0 -> 2189 bytes
-rw-r--r--desktop/test/deployment/update/defect/fail2.oxtbin0 -> 2188 bytes
-rw-r--r--desktop/test/deployment/update/defect/fail3.oxtbin0 -> 2188 bytes
-rw-r--r--desktop/test/deployment/update/defect/fail4.oxtbin0 -> 2189 bytes
-rw-r--r--desktop/test/deployment/update/defect/info1.oxtbin0 -> 2188 bytes
-rw-r--r--desktop/test/deployment/update/defect/info2.oxtbin0 -> 2187 bytes
-rw-r--r--desktop/test/deployment/update/defect/info3.oxtbin0 -> 2187 bytes
-rw-r--r--desktop/test/deployment/update/defect/readme.txt15
-rw-r--r--desktop/test/deployment/update/defect/update/fail1.oxtbin0 -> 2193 bytes
-rw-r--r--desktop/test/deployment/update/defect/update/fail1.update.xml10
-rw-r--r--desktop/test/deployment/update/defect/update/fail2.oxtbin0 -> 2436 bytes
-rw-r--r--desktop/test/deployment/update/defect/update/fail2.update.xml10
-rw-r--r--desktop/test/deployment/update/defect/update/fail3.oxtbin0 -> 2396 bytes
-rw-r--r--desktop/test/deployment/update/defect/update/fail3.update.xml10
-rw-r--r--desktop/test/deployment/update/defect/update/fail4.oxt0
-rw-r--r--desktop/test/deployment/update/defect/update/fail4.update.xml10
-rw-r--r--desktop/test/deployment/update/defect/update/info1.update.xml0
-rw-r--r--desktop/test/deployment/update/defect/update/info2.update.xml1
-rw-r--r--desktop/test/deployment/update/defect/update/info3.oxtbin0 -> 2189 bytes
-rw-r--r--desktop/test/deployment/update/defect/update/info3.update.xml10
-rw-r--r--desktop/test/deployment/update/dependencies/publisher_en.html9
-rw-r--r--desktop/test/deployment/update/dependencies/readme.txt32
-rw-r--r--desktop/test/deployment/update/dependencies/release-notes_en.html8
-rw-r--r--desktop/test/deployment/update/dependencies/update-dependencies.oxtbin0 -> 1751 bytes
-rw-r--r--desktop/test/deployment/update/dependencies/update/update-dependencies.update.xml71
-rw-r--r--desktop/test/deployment/update/license/lic1.oxtbin0 -> 3608 bytes
-rw-r--r--desktop/test/deployment/update/license/lic2.oxtbin0 -> 3625 bytes
-rw-r--r--desktop/test/deployment/update/license/lic3.oxtbin0 -> 3624 bytes
-rw-r--r--desktop/test/deployment/update/license/readme.txt9
-rw-r--r--desktop/test/deployment/update/license/update/lic1.oxtbin0 -> 3610 bytes
-rw-r--r--desktop/test/deployment/update/license/update/lic1.update.xml10
-rw-r--r--desktop/test/deployment/update/license/update/lic2.oxtbin0 -> 3627 bytes
-rw-r--r--desktop/test/deployment/update/license/update/lic2.update.xml10
-rw-r--r--desktop/test/deployment/update/license/update/lic3.oxtbin0 -> 3626 bytes
-rw-r--r--desktop/test/deployment/update/license/update/lic3.update.xml10
-rw-r--r--desktop/test/deployment/update/platform/all1.oxtbin0 -> 692 bytes
-rw-r--r--desktop/test/deployment/update/platform/all2.oxtbin0 -> 702 bytes
-rw-r--r--desktop/test/deployment/update/platform/all3.oxtbin0 -> 297 bytes
-rw-r--r--desktop/test/deployment/update/platform/freebsd_x86.oxtbin0 -> 706 bytes
-rw-r--r--desktop/test/deployment/update/platform/freebsd_x86_64.oxtbin0 -> 711 bytes
-rw-r--r--desktop/test/deployment/update/platform/invalid1.oxtbin0 -> 653 bytes
-rw-r--r--desktop/test/deployment/update/platform/invalid2.oxtbin0 -> 653 bytes
-rw-r--r--desktop/test/deployment/update/platform/invalid3.oxtbin0 -> 655 bytes
-rw-r--r--desktop/test/deployment/update/platform/linux_arm_eabi.oxtbin0 -> 709 bytes
-rw-r--r--desktop/test/deployment/update/platform/linux_arm_oabi.oxtbin0 -> 710 bytes
-rw-r--r--desktop/test/deployment/update/platform/linux_ia64.oxtbin0 -> 706 bytes
-rw-r--r--desktop/test/deployment/update/platform/linux_mips_eb.oxtbin0 -> 709 bytes
-rw-r--r--desktop/test/deployment/update/platform/linux_mips_el.oxtbin0 -> 708 bytes
-rw-r--r--desktop/test/deployment/update/platform/linux_powerpc.oxtbin0 -> 708 bytes
-rw-r--r--desktop/test/deployment/update/platform/linux_powerpc64.oxtbin0 -> 710 bytes
-rw-r--r--desktop/test/deployment/update/platform/linux_s390.oxtbin0 -> 705 bytes
-rw-r--r--desktop/test/deployment/update/platform/linux_s390x.oxtbin0 -> 706 bytes
-rw-r--r--desktop/test/deployment/update/platform/linux_sparc.oxtbin0 -> 706 bytes
-rw-r--r--desktop/test/deployment/update/platform/linux_x86.oxtbin0 -> 705 bytes
-rw-r--r--desktop/test/deployment/update/platform/linux_x86_64.oxtbin0 -> 708 bytes
-rw-r--r--desktop/test/deployment/update/platform/macosx_powerpc.oxtbin0 -> 710 bytes
-rw-r--r--desktop/test/deployment/update/platform/macosx_x86.oxtbin0 -> 707 bytes
-rw-r--r--desktop/test/deployment/update/platform/mul1.oxtbin0 -> 952 bytes
-rw-r--r--desktop/test/deployment/update/platform/os2_x86.oxtbin0 -> 706 bytes
-rw-r--r--desktop/test/deployment/update/platform/readme.txt49
-rw-r--r--desktop/test/deployment/update/platform/solaris_sparc.oxtbin0 -> 709 bytes
-rw-r--r--desktop/test/deployment/update/platform/solaris_x86.oxtbin0 -> 706 bytes
-rw-r--r--desktop/test/deployment/update/platform/windows_x86.oxtbin0 -> 707 bytes
-rw-r--r--desktop/test/deployment/update/publisher/pub1.oxtbin0 -> 1882 bytes
-rw-r--r--desktop/test/deployment/update/publisher/pub10.oxtbin0 -> 1742 bytes
-rw-r--r--desktop/test/deployment/update/publisher/pub11.oxtbin0 -> 1601 bytes
-rw-r--r--desktop/test/deployment/update/publisher/pub2.oxtbin0 -> 1866 bytes
-rw-r--r--desktop/test/deployment/update/publisher/pub3.oxtbin0 -> 1829 bytes
-rw-r--r--desktop/test/deployment/update/publisher/pub4.oxtbin0 -> 1812 bytes
-rw-r--r--desktop/test/deployment/update/publisher/pub5.oxtbin0 -> 1769 bytes
-rw-r--r--desktop/test/deployment/update/publisher/pub6.oxtbin0 -> 1814 bytes
-rw-r--r--desktop/test/deployment/update/publisher/pub7.oxtbin0 -> 1769 bytes
-rw-r--r--desktop/test/deployment/update/publisher/pub8.oxtbin0 -> 1853 bytes
-rw-r--r--desktop/test/deployment/update/publisher/pub9.oxtbin0 -> 1779 bytes
-rw-r--r--desktop/test/deployment/update/publisher/publisher_de-DE-altmark.html9
-rw-r--r--desktop/test/deployment/update/publisher/publisher_de-DE.html9
-rw-r--r--desktop/test/deployment/update/publisher/publisher_de.html9
-rw-r--r--desktop/test/deployment/update/publisher/publisher_en-GB.html9
-rw-r--r--desktop/test/deployment/update/publisher/publisher_en-US-region1.html9
-rw-r--r--desktop/test/deployment/update/publisher/publisher_en-US-region2.html9
-rw-r--r--desktop/test/deployment/update/publisher/publisher_en-US.html9
-rw-r--r--desktop/test/deployment/update/publisher/publisher_en-region3.html9
-rw-r--r--desktop/test/deployment/update/publisher/publisher_en.html9
-rw-r--r--desktop/test/deployment/update/publisher/readme.txt212
-rw-r--r--desktop/test/deployment/update/publisher/release-notes_de-DE-altmark.html8
-rw-r--r--desktop/test/deployment/update/publisher/release-notes_de-DE.html8
-rw-r--r--desktop/test/deployment/update/publisher/release-notes_de.html8
-rw-r--r--desktop/test/deployment/update/publisher/release-notes_en-GB.html8
-rw-r--r--desktop/test/deployment/update/publisher/release-notes_en-US-region1.html8
-rw-r--r--desktop/test/deployment/update/publisher/release-notes_en-US-region2.html8
-rw-r--r--desktop/test/deployment/update/publisher/release-notes_en-US.html8
-rw-r--r--desktop/test/deployment/update/publisher/release-notes_en-region3.html8
-rw-r--r--desktop/test/deployment/update/publisher/release-notes_en.html8
-rw-r--r--desktop/test/deployment/update/publisher/update/pub1.oxtbin0 -> 1885 bytes
-rw-r--r--desktop/test/deployment/update/publisher/update/pub1.update.xml36
-rw-r--r--desktop/test/deployment/update/publisher/update/pub10.oxtbin0 -> 1744 bytes
-rw-r--r--desktop/test/deployment/update/publisher/update/pub11.oxtbin0 -> 1603 bytes
-rw-r--r--desktop/test/deployment/update/publisher/update/pub2.oxtbin0 -> 1871 bytes
-rw-r--r--desktop/test/deployment/update/publisher/update/pub2.update.xml34
-rw-r--r--desktop/test/deployment/update/publisher/update/pub3.oxtbin0 -> 1833 bytes
-rw-r--r--desktop/test/deployment/update/publisher/update/pub3.update.xml30
-rw-r--r--desktop/test/deployment/update/publisher/update/pub4.oxtbin0 -> 1815 bytes
-rw-r--r--desktop/test/deployment/update/publisher/update/pub4.update.xml28
-rw-r--r--desktop/test/deployment/update/publisher/update/pub5.oxtbin0 -> 1774 bytes
-rw-r--r--desktop/test/deployment/update/publisher/update/pub5.update.xml24
-rw-r--r--desktop/test/deployment/update/publisher/update/pub6.oxtbin0 -> 1816 bytes
-rw-r--r--desktop/test/deployment/update/publisher/update/pub6.update.xml24
-rw-r--r--desktop/test/deployment/update/publisher/update/pub7.oxtbin0 -> 1771 bytes
-rw-r--r--desktop/test/deployment/update/publisher/update/pub7.update.xml24
-rw-r--r--desktop/test/deployment/update/publisher/update/pub8.oxtbin0 -> 1855 bytes
-rw-r--r--desktop/test/deployment/update/publisher/update/pub9.oxtbin0 -> 1781 bytes
-rw-r--r--desktop/test/deployment/update/readme.txt68
-rw-r--r--desktop/test/deployment/update/simple/plain1.oxtbin0 -> 1642 bytes
-rw-r--r--desktop/test/deployment/update/simple/plain2.oxtbin0 -> 1643 bytes
-rw-r--r--desktop/test/deployment/update/simple/plain3.oxtbin0 -> 1643 bytes
-rw-r--r--desktop/test/deployment/update/simple/readme.txt31
-rw-r--r--desktop/test/deployment/update/simple/update/plain1.oxtbin0 -> 1645 bytes
-rw-r--r--desktop/test/deployment/update/simple/update/plain1.update.xml10
-rw-r--r--desktop/test/deployment/update/simple/update/plain2.oxtbin0 -> 1645 bytes
-rw-r--r--desktop/test/deployment/update/simple/update/plain2.update.xml10
-rw-r--r--desktop/test/deployment/update/simple/update/plain3.oxtbin0 -> 1645 bytes
-rw-r--r--desktop/test/deployment/update/simple/update/plain3.update.xml10
-rw-r--r--desktop/test/deployment/update/updatefeed/feed1.oxtbin0 -> 2184 bytes
-rw-r--r--desktop/test/deployment/update/updatefeed/feed2.oxtbin0 -> 2184 bytes
-rw-r--r--desktop/test/deployment/update/updatefeed/update/feed1.oxtbin0 -> 2184 bytes
-rw-r--r--desktop/test/deployment/update/updatefeed/update/feed1.update.xml10
-rw-r--r--desktop/test/deployment/update/updatefeed/update/feed1.xml33
-rw-r--r--desktop/test/deployment/update/updatefeed/update/feed2.oxtbin0 -> 2184 bytes
-rw-r--r--desktop/test/deployment/update/updatefeed/update/feed2.update.xml10
-rwxr-xr-xdesktop/test/deployment/update/updateinfocreation/build/MANIFEST.MF2
-rwxr-xr-xdesktop/test/deployment/update/updateinfocreation/build/TestExtension.idl40
-rwxr-xr-xdesktop/test/deployment/update/updateinfocreation/build/TestExtension.java165
-rwxr-xr-xdesktop/test/deployment/update/updateinfocreation/build/delzip1
-rw-r--r--desktop/test/deployment/update/updateinfocreation/build/description.xml13
-rwxr-xr-xdesktop/test/deployment/update/updateinfocreation/build/makefile.mk88
-rwxr-xr-xdesktop/test/deployment/update/updateinfocreation/build/manifest.xml5
-rw-r--r--desktop/test/deployment/update/updateinfocreation/readme.txt38
-rw-r--r--desktop/test/deployment/update/updateinfocreation/update/updateinfo.oxtbin0 -> 4295 bytes
-rw-r--r--desktop/test/deployment/update/updateinfocreation/updateinfo.oxtbin0 -> 4295 bytes
-rw-r--r--desktop/test/deployment/update/website_update/readme.txt133
-rw-r--r--desktop/test/deployment/update/website_update/update/web1.oxtbin0 -> 1695 bytes
-rw-r--r--desktop/test/deployment/update/website_update/update/web1.update.xml20
-rw-r--r--desktop/test/deployment/update/website_update/update/web1_de-DE-altmark.html18
-rw-r--r--desktop/test/deployment/update/website_update/update/web1_de-DE.html18
-rw-r--r--desktop/test/deployment/update/website_update/update/web1_de.html19
-rw-r--r--desktop/test/deployment/update/website_update/update/web1_en-GB.html19
-rw-r--r--desktop/test/deployment/update/website_update/update/web1_en-US-region1.html19
-rw-r--r--desktop/test/deployment/update/website_update/update/web1_en-US-region2.html19
-rw-r--r--desktop/test/deployment/update/website_update/update/web1_en-US.html20
-rw-r--r--desktop/test/deployment/update/website_update/update/web1_en-region3.html19
-rw-r--r--desktop/test/deployment/update/website_update/update/web1_en.html19
-rw-r--r--desktop/test/deployment/update/website_update/update/web2.oxtbin0 -> 1695 bytes
-rw-r--r--desktop/test/deployment/update/website_update/update/web2.update.xml19
-rw-r--r--desktop/test/deployment/update/website_update/update/web3.oxtbin0 -> 1695 bytes
-rw-r--r--desktop/test/deployment/update/website_update/update/web3.update.xml17
-rw-r--r--desktop/test/deployment/update/website_update/update/web4.oxtbin0 -> 1695 bytes
-rw-r--r--desktop/test/deployment/update/website_update/update/web4.update.xml16
-rw-r--r--desktop/test/deployment/update/website_update/update/web5.oxtbin0 -> 1695 bytes
-rw-r--r--desktop/test/deployment/update/website_update/update/web5.update.xml14
-rw-r--r--desktop/test/deployment/update/website_update/update/web6.oxtbin0 -> 1640 bytes
-rw-r--r--desktop/test/deployment/update/website_update/update/web6/description.xml11
-rw-r--r--desktop/test/deployment/update/website_update/update/web6/readme.txt5
-rw-r--r--desktop/test/deployment/update/website_update/update/web7.oxtbin0 -> 1897 bytes
-rw-r--r--desktop/test/deployment/update/website_update/update/web7/description.xml36
-rw-r--r--desktop/test/deployment/update/website_update/update/web7/readme.txt5
-rw-r--r--desktop/test/deployment/update/website_update/web1.oxtbin0 -> 1693 bytes
-rw-r--r--desktop/test/deployment/update/website_update/web2.oxtbin0 -> 1693 bytes
-rw-r--r--desktop/test/deployment/update/website_update/web3.oxtbin0 -> 1693 bytes
-rw-r--r--desktop/test/deployment/update/website_update/web4.oxtbin0 -> 1693 bytes
-rw-r--r--desktop/test/deployment/update/website_update/web5.oxtbin0 -> 1693 bytes
-rw-r--r--desktop/test/deployment/update/website_update/web6.oxtbin0 -> 1638 bytes
-rw-r--r--desktop/test/deployment/update/website_update/web7.oxtbin0 -> 1894 bytes
-rw-r--r--desktop/test/deployment/update/wrong_url/readme.txt18
-rw-r--r--desktop/test/deployment/update/wrong_url/update/url1.oxtbin0 -> 2192 bytes
-rw-r--r--desktop/test/deployment/update/wrong_url/update/url1.update.xml11
-rw-r--r--desktop/test/deployment/update/wrong_url/update/url2.oxtbin0 -> 2206 bytes
-rw-r--r--desktop/test/deployment/update/wrong_url/update/url2.update.xml10
-rw-r--r--desktop/test/deployment/update/wrong_url/update/wrongdownload1.update.xml11
-rw-r--r--desktop/test/deployment/update/wrong_url/update/wrongdownload2.update.xml11
-rw-r--r--desktop/test/deployment/update/wrong_url/update/wrongdownload3.update.xml11
-rw-r--r--desktop/test/deployment/update/wrong_url/url1.oxtbin0 -> 2190 bytes
-rw-r--r--desktop/test/deployment/update/wrong_url/url2.oxtbin0 -> 2205 bytes
-rw-r--r--desktop/test/deployment/update/wrong_url/url3.oxtbin0 -> 2204 bytes
-rw-r--r--desktop/test/deployment/update/wrong_url/wrongdownload1.oxtbin0 -> 2194 bytes
-rw-r--r--desktop/test/deployment/update/wrong_url/wrongdownload2.oxtbin0 -> 2194 bytes
-rw-r--r--desktop/test/deployment/update/wrong_url/wrongdownload3.oxtbin0 -> 2194 bytes
-rw-r--r--desktop/test/deployment/version/readme.txt85
-rw-r--r--desktop/test/deployment/version/version_0.0/dependency.oxtbin0 -> 1657 bytes
-rw-r--r--desktop/test/deployment/version/version_0.0/license.oxtbin0 -> 1733 bytes
-rw-r--r--desktop/test/deployment/version/version_0.0/plain.oxtbin0 -> 1618 bytes
-rw-r--r--desktop/test/deployment/version/version_1.02.4.7.0/dependency.oxtbin0 -> 1662 bytes
-rw-r--r--desktop/test/deployment/version/version_1.02.4.7.0/license.oxtbin0 -> 1738 bytes
-rw-r--r--desktop/test/deployment/version/version_1.02.4.7.0/plain.oxtbin0 -> 1624 bytes
-rw-r--r--desktop/test/deployment/version/version_1.2.15.3/dependency.oxtbin0 -> 1662 bytes
-rw-r--r--desktop/test/deployment/version/version_1.2.15.3/license.oxtbin0 -> 1738 bytes
-rw-r--r--desktop/test/deployment/version/version_1.2.15.3/plain.oxtbin0 -> 1624 bytes
-rw-r--r--desktop/test/deployment/version/version_1.2.3/dependency.oxtbin0 -> 1659 bytes
-rw-r--r--desktop/test/deployment/version/version_1.2.3/license.oxtbin0 -> 1735 bytes
-rw-r--r--desktop/test/deployment/version/version_1.2.3/plain.oxtbin0 -> 1620 bytes
-rw-r--r--desktop/test/deployment/version/version_1.2.4.7/dependency.oxtbin0 -> 1661 bytes
-rw-r--r--desktop/test/deployment/version/version_1.2.4.7/license.oxtbin0 -> 1737 bytes
-rw-r--r--desktop/test/deployment/version/version_1.2.4.7/plain.oxtbin0 -> 1623 bytes
-rw-r--r--desktop/test/deployment/version/version_badelement/dependency.oxtbin0 -> 1654 bytes
-rw-r--r--desktop/test/deployment/version/version_badelement/license.oxtbin0 -> 1731 bytes
-rw-r--r--desktop/test/deployment/version/version_badelement/plain.oxtbin0 -> 1616 bytes
-rw-r--r--desktop/test/deployment/version/version_badvalue/dependency.oxtbin0 -> 1657 bytes
-rw-r--r--desktop/test/deployment/version/version_badvalue/license.oxtbin0 -> 1733 bytes
-rw-r--r--desktop/test/deployment/version/version_badvalue/plain.oxtbin0 -> 1618 bytes
-rw-r--r--desktop/test/deployment/version/version_nodependencies_0.0/dependency.oxtbin0 -> 1618 bytes
-rw-r--r--desktop/test/deployment/version/version_nodependencies_1.02.4.7.0/dependency.oxtbin0 -> 1624 bytes
-rw-r--r--desktop/test/deployment/version/version_nodependencies_1.2.15.3/dependency.oxtbin0 -> 1624 bytes
-rw-r--r--desktop/test/deployment/version/version_nodependencies_1.2.3/dependency.oxtbin0 -> 1620 bytes
-rw-r--r--desktop/test/deployment/version/version_nodependencies_1.2.4.7/dependency.oxtbin0 -> 1623 bytes
-rw-r--r--desktop/test/deployment/version/version_nodependencies_badelement/dependency.oxtbin0 -> 1616 bytes
-rw-r--r--desktop/test/deployment/version/version_nodependencies_badvalue/dependency.oxtbin0 -> 1618 bytes
-rw-r--r--desktop/test/deployment/version/version_nodependencies_none/dependency.oxtbin0 -> 1598 bytes
-rw-r--r--desktop/test/deployment/version/version_none/dependency.oxtbin0 -> 1645 bytes
-rw-r--r--desktop/test/deployment/version/version_none/license.oxtbin0 -> 1722 bytes
-rw-r--r--desktop/test/deployment/version/version_none/plain.oxtbin0 -> 1598 bytes
-rw-r--r--desktop/unx/source/officeloader/makefile.mk47
-rwxr-xr-xdesktop/unx/source/officeloader/officeloader.cxx110
-rw-r--r--desktop/util/hidother.src54
-rw-r--r--desktop/util/makefile.mk277
-rw-r--r--desktop/util/ooverinfo.rc138
-rw-r--r--desktop/util/ooverinfo2.rc90
-rw-r--r--desktop/util/soffice.icobin0 -> 4990 bytes
-rw-r--r--desktop/util/template.manifest10
-rwxr-xr-xdesktop/util/verinfo.rc142
-rw-r--r--desktop/util/writer.r1
-rw-r--r--desktop/win32/source/applauncher/launcher.cxx146
-rw-r--r--desktop/win32/source/applauncher/launcher.hxx21
-rw-r--r--desktop/win32/source/applauncher/makefile.mk148
-rw-r--r--desktop/win32/source/applauncher/ooo/makefile.mk130
-rwxr-xr-xdesktop/win32/source/applauncher/ooo/verinfo.rc97
-rw-r--r--desktop/win32/source/applauncher/sbase.cxx34
-rw-r--r--desktop/win32/source/applauncher/scalc.cxx34
-rw-r--r--desktop/win32/source/applauncher/sdraw.cxx34
-rw-r--r--desktop/win32/source/applauncher/simpress.cxx34
-rw-r--r--desktop/win32/source/applauncher/smath.cxx34
-rw-r--r--desktop/win32/source/applauncher/sweb.cxx34
-rw-r--r--desktop/win32/source/applauncher/swriter.cxx32
-rwxr-xr-xdesktop/win32/source/applauncher/verinfo.rc102
-rw-r--r--desktop/win32/source/extendloaderenvironment.cxx182
-rw-r--r--desktop/win32/source/extendloaderenvironment.hxx95
-rw-r--r--desktop/win32/source/guiloader/genericloader.cxx176
-rw-r--r--desktop/win32/source/guiloader/makefile.mk64
-rw-r--r--desktop/win32/source/guistdio/guistdio.cxx30
-rw-r--r--desktop/win32/source/guistdio/guistdio.inc453
-rw-r--r--desktop/win32/source/guistdio/makefile.mk58
-rw-r--r--desktop/win32/source/guistdio/unopkgio.cxx31
-rw-r--r--desktop/win32/source/lwrapa.cxx32
-rw-r--r--desktop/win32/source/lwrapw.cxx33
-rw-r--r--desktop/win32/source/main.h13
-rw-r--r--desktop/win32/source/makefile.mk63
-rw-r--r--desktop/win32/source/officeloader/makefile.mk63
-rw-r--r--desktop/win32/source/officeloader/officeloader.cxx425
-rw-r--r--desktop/win32/source/rebase/Resource.h38
-rw-r--r--desktop/win32/source/rebase/makefile.mk89
-rw-r--r--desktop/win32/source/rebase/rcfooter.txt2
-rw-r--r--desktop/win32/source/rebase/rcheader.txt39
-rw-r--r--desktop/win32/source/rebase/rctmpl.txt9
-rw-r--r--desktop/win32/source/rebase/rebase.cxx187
-rw-r--r--desktop/win32/source/rebase/rebasegui.cxx197
-rw-r--r--desktop/win32/source/rebase/rebasegui.ulf11
-rw-r--r--desktop/win32/source/rwrapa.cxx32
-rw-r--r--desktop/win32/source/rwrapw.cxx33
-rw-r--r--desktop/win32/source/setup/Resource.h79
-rw-r--r--desktop/win32/source/setup/makefile.mk91
-rw-r--r--desktop/win32/source/setup/rcfooter.txt2
-rw-r--r--desktop/win32/source/setup/rcheader.txt43
-rw-r--r--desktop/win32/source/setup/rctmpl.txt49
-rwxr-xr-xdesktop/win32/source/setup/setup.cpp2066
-rw-r--r--desktop/win32/source/setup/setup.hxx154
-rw-r--r--desktop/win32/source/setup/setup.icobin0 -> 4710 bytes
-rw-r--r--desktop/win32/source/setup/setup.ulf162
-rw-r--r--desktop/win32/source/setup/setup_a.cxx31
-rw-r--r--desktop/win32/source/setup/setup_help.hxx47
-rw-r--r--desktop/win32/source/setup/setup_main.cxx147
-rw-r--r--desktop/win32/source/setup/setup_main.hxx74
-rw-r--r--desktop/win32/source/setup/setup_w.cxx35
-rw-r--r--desktop/win32/source/sowrapper.cxx47
-rw-r--r--desktop/win32/source/unoinfo.cxx148
-rw-r--r--desktop/win32/source/wrapper.h173
-rw-r--r--desktop/win32/source/wrappera.cxx31
-rw-r--r--desktop/win32/source/wrapperw.cxx32
-rw-r--r--desktop/zipintro/delzip1
-rw-r--r--desktop/zipintro/makefile.mk134
-rwxr-xr-xdmake/AUTHORS0
-rwxr-xr-xdmake/COPYING37
-rwxr-xr-xdmake/ChangeLog4259
-rwxr-xr-xdmake/INSTALL3
-rwxr-xr-xdmake/Makefile.am64
-rwxr-xr-xdmake/Makefile.in869
-rwxr-xr-xdmake/NEWS316
-rwxr-xr-xdmake/acinclude.m43
-rwxr-xr-xdmake/aclocal.m4908
-rw-r--r--dmake/alloc.h59
-rwxr-xr-xdmake/autogen.sh63
-rwxr-xr-xdmake/compile142
-rwxr-xr-xdmake/config.guess1463
-rw-r--r--dmake/config.h.in184
-rwxr-xr-xdmake/config.sub1579
-rwxr-xr-xdmake/configure9000
-rwxr-xr-xdmake/configure.in220
-rw-r--r--dmake/dag.c697
-rw-r--r--dmake/db.h66
-rw-r--r--dmake/dbug/dbug.mk66
-rw-r--r--dmake/dbug/dbug/dbug.c1845
-rw-r--r--dmake/dbug/dbug/dbug.h164
-rwxr-xr-xdmake/dbug/dbug/dbug.txt1452
-rw-r--r--dmake/dbug/dbug/dbug.uue368
-rwxr-xr-xdmake/dbug/dbug/example1.c12
-rwxr-xr-xdmake/dbug/dbug/example2.c17
-rwxr-xr-xdmake/dbug/dbug/example3.c16
-rwxr-xr-xdmake/dbug/dbug/factorial.c15
-rwxr-xr-xdmake/dbug/dbug/main.c27
-rwxr-xr-xdmake/dbug/dbug/makeman.sh18
-rw-r--r--dmake/dbug/dbug/readme52
-rwxr-xr-xdmake/dbug/dbug/user.r938
-rw-r--r--dmake/dbug/getwd.c6
-rw-r--r--dmake/dbug/malloc/_changes9
-rw-r--r--dmake/dbug/malloc/_readme133
-rw-r--r--dmake/dbug/malloc/calloc.c49
-rw-r--r--dmake/dbug/malloc/debug.h99
-rw-r--r--dmake/dbug/malloc/dump.c103
-rw-r--r--dmake/dbug/malloc/free.c150
-rw-r--r--dmake/dbug/malloc/m_init.c79
-rw-r--r--dmake/dbug/malloc/m_perror.c73
-rw-r--r--dmake/dbug/malloc/makefile77
-rw-r--r--dmake/dbug/malloc/malloc.3223
-rw-r--r--dmake/dbug/malloc/malloc.c627
-rw-r--r--dmake/dbug/malloc/malloc.h85
-rw-r--r--dmake/dbug/malloc/mallopt.c98
-rw-r--r--dmake/dbug/malloc/memory.c195
-rw-r--r--dmake/dbug/malloc/mlc_chk.c256
-rw-r--r--dmake/dbug/malloc/mlc_chn.c188
-rw-r--r--dmake/dbug/malloc/patchlev1
-rw-r--r--dmake/dbug/malloc/realloc.c180
-rw-r--r--dmake/dbug/malloc/string.c533
-rw-r--r--dmake/dbug/malloc/testmem.c646
-rw-r--r--dmake/dbug/malloc/testmlc.c176
-rw-r--r--dmake/dbug/malloc/tostring.c132
-rw-r--r--dmake/dbug/malloc/tostring.h13
-rw-r--r--dmake/dbug/readme13
-rwxr-xr-xdmake/depcomp530
-rw-r--r--dmake/dmake.c959
-rw-r--r--dmake/dmake.h230
-rw-r--r--dmake/dmakeroot.h.in6
-rw-r--r--dmake/dmdump.c287
-rw-r--r--dmake/dmstring.c300
-rw-r--r--dmake/dstdarg.h43
-rw-r--r--dmake/expand.c1204
-rw-r--r--dmake/extern.h192
-rw-r--r--dmake/function.c726
-rw-r--r--dmake/getinp.c848
-rw-r--r--dmake/hash.c54
-rw-r--r--dmake/imacs.c206
-rw-r--r--dmake/infer.c904
-rwxr-xr-xdmake/install-sh323
-rw-r--r--dmake/itypes.h82
-rw-r--r--dmake/mac/arlib.c56
-rw-r--r--dmake/mac/bogus.c99
-rw-r--r--dmake/mac/config.mk44
-rw-r--r--dmake/mac/dirbrk.c42
-rw-r--r--dmake/mac/directry.c264
-rw-r--r--dmake/mac/dompwmak67
-rw-r--r--dmake/mac/environ.c231
-rw-r--r--dmake/mac/eold.c119
-rw-r--r--dmake/mac/main.c43
-rw-r--r--dmake/mac/make.sh107
-rw-r--r--dmake/mac/make_mac.sh105
-rw-r--r--dmake/mac/public.h173
-rw-r--r--dmake/mac/rmprq.c38
-rw-r--r--dmake/mac/ruletab.c43
-rw-r--r--dmake/mac/startup.h28
-rw-r--r--dmake/mac/sysintf.h41
-rw-r--r--dmake/mac/template.mk7
-rw-r--r--dmake/mac/tempnam.c65
-rw-r--r--dmake/mac/tomacfil.c38
-rw-r--r--dmake/macparse.c232
-rwxr-xr-xdmake/make.bat273
-rw-r--r--dmake/make.c1774
-rwxr-xr-xdmake/make.cmd115
-rw-r--r--dmake/makefile.mk432
-rw-r--r--dmake/man/dmake.nc3644
-rw-r--r--dmake/man/dmake.tf3480
-rw-r--r--dmake/man/readme12
-rwxr-xr-xdmake/missing360
-rwxr-xr-xdmake/mkinstalldirs158
-rw-r--r--dmake/msdos/arlib.c56
-rw-r--r--dmake/msdos/borland/bcc30/config.h48
-rw-r--r--dmake/msdos/borland/bcc30/config.mk8
-rw-r--r--dmake/msdos/borland/bcc30/lib.rsp1
-rw-r--r--dmake/msdos/borland/bcc30/libswp.rsp1
-rwxr-xr-xdmake/msdos/borland/bcc30/mkswp.bat107
-rw-r--r--dmake/msdos/borland/bcc30/obj.rsp34
-rw-r--r--dmake/msdos/borland/bcc30/objswp.rsp36
-rw-r--r--dmake/msdos/borland/bcc30/public.h170
-rw-r--r--dmake/msdos/borland/bcc30/template.mk7
-rw-r--r--dmake/msdos/borland/bcc40/config.h51
-rw-r--r--dmake/msdos/borland/bcc40/config.mk7
-rw-r--r--dmake/msdos/borland/bcc40/lib.rsp2
-rw-r--r--dmake/msdos/borland/bcc40/libswp.rsp1
-rwxr-xr-xdmake/msdos/borland/bcc40/mkswp.bat107
-rw-r--r--dmake/msdos/borland/bcc40/obj.rsp34
-rw-r--r--dmake/msdos/borland/bcc40/objswp.rsp36
-rw-r--r--dmake/msdos/borland/bcc40/public.h170
-rw-r--r--dmake/msdos/borland/bcc40/template.mk7
-rw-r--r--dmake/msdos/borland/bcc45/config.h51
-rw-r--r--dmake/msdos/borland/bcc45/config.mk7
-rw-r--r--dmake/msdos/borland/bcc45/lib.rsp2
-rw-r--r--dmake/msdos/borland/bcc45/libswp.rsp1
-rwxr-xr-xdmake/msdos/borland/bcc45/mkswp.bat107
-rw-r--r--dmake/msdos/borland/bcc45/obj.rsp34
-rw-r--r--dmake/msdos/borland/bcc45/objswp.rsp36
-rw-r--r--dmake/msdos/borland/bcc45/public.h170
-rw-r--r--dmake/msdos/borland/bcc45/template.mk7
-rw-r--r--dmake/msdos/borland/bcc50/config.h51
-rw-r--r--dmake/msdos/borland/bcc50/config.mk7
-rw-r--r--dmake/msdos/borland/bcc50/lib.rsp2
-rw-r--r--dmake/msdos/borland/bcc50/libswp.rsp1
-rwxr-xr-xdmake/msdos/borland/bcc50/mkswp.bat107
-rw-r--r--dmake/msdos/borland/bcc50/obj.rsp34
-rw-r--r--dmake/msdos/borland/bcc50/objswp.rsp36
-rw-r--r--dmake/msdos/borland/bcc50/public.h170
-rw-r--r--dmake/msdos/borland/bcc50/template.mk7
-rw-r--r--dmake/msdos/borland/config.mk46
-rw-r--r--dmake/msdos/borland/tcc20/config.h48
-rw-r--r--dmake/msdos/borland/tcc20/config.mk10
-rw-r--r--dmake/msdos/borland/tcc20/libswp.rsp1
-rwxr-xr-xdmake/msdos/borland/tcc20/mkswp.bat107
-rw-r--r--dmake/msdos/borland/tcc20/objswp.rsp36
-rw-r--r--dmake/msdos/borland/tcc20/public.h170
-rw-r--r--dmake/msdos/borland/tcc20/template.mk7
-rw-r--r--dmake/msdos/borland/tempnam.c109
-rw-r--r--dmake/msdos/borland/utime.c66
-rw-r--r--dmake/msdos/config.mk71
-rw-r--r--dmake/msdos/dchdir.c47
-rw-r--r--dmake/msdos/dirbrk.c42
-rw-r--r--dmake/msdos/dirent.h32
-rw-r--r--dmake/msdos/dirlib.c285
-rw-r--r--dmake/msdos/dosdta.h16
-rw-r--r--dmake/msdos/dstrlwr.c49
-rw-r--r--dmake/msdos/exec.asm1234
-rw-r--r--dmake/msdos/exec.h43
-rw-r--r--dmake/msdos/exec.uue63
-rw-r--r--dmake/msdos/find.c130
-rw-r--r--dmake/msdos/microsft/config.h77
-rw-r--r--dmake/msdos/microsft/config.mk59
-rw-r--r--dmake/msdos/microsft/msc51/config.mk11
-rw-r--r--dmake/msdos/microsft/msc51/lib.rsp1
-rw-r--r--dmake/msdos/microsft/msc51/libswp.rsp1
-rwxr-xr-xdmake/msdos/microsft/msc51/mk.bat102
-rwxr-xr-xdmake/msdos/microsft/msc51/mkswp.bat104
-rw-r--r--dmake/msdos/microsft/msc51/obj.rsp33
-rw-r--r--dmake/msdos/microsft/msc51/objswp.rsp34
-rw-r--r--dmake/msdos/microsft/msc51/public.h170
-rw-r--r--dmake/msdos/microsft/msc51/template.mk7
-rw-r--r--dmake/msdos/microsft/msc60/config.mk11
-rw-r--r--dmake/msdos/microsft/msc60/lib.rsp1
-rw-r--r--dmake/msdos/microsft/msc60/libswp.rsp1
-rwxr-xr-xdmake/msdos/microsft/msc60/mk.bat102
-rwxr-xr-xdmake/msdos/microsft/msc60/mkswp.bat104
-rw-r--r--dmake/msdos/microsft/msc60/obj.rsp33
-rw-r--r--dmake/msdos/microsft/msc60/objswp.rsp34
-rw-r--r--dmake/msdos/microsft/msc60/public.h170
-rw-r--r--dmake/msdos/microsft/msc60/template.mk7
-rw-r--r--dmake/msdos/microsft/optoff.h27
-rw-r--r--dmake/msdos/microsft/tempnam.c110
-rw-r--r--dmake/msdos/rmprq.c44
-rw-r--r--dmake/msdos/ruletab.c45
-rw-r--r--dmake/msdos/runargv.c188
-rw-r--r--dmake/msdos/spawn.c415
-rw-r--r--dmake/msdos/startup.h26
-rw-r--r--dmake/msdos/switchar.c55
-rw-r--r--dmake/msdos/sysintf.h52
-rw-r--r--dmake/msdos/tee.c31
-rw-r--r--dmake/msdos/zortech/config.h52
-rw-r--r--dmake/msdos/zortech/config.mk73
-rw-r--r--dmake/msdos/zortech/environ.c59
-rw-r--r--dmake/msdos/zortech/lib.rsp1
-rw-r--r--dmake/msdos/zortech/libswp.rsp1
-rwxr-xr-xdmake/msdos/zortech/mkswp.bat36
-rw-r--r--dmake/msdos/zortech/obj.rsp34
-rw-r--r--dmake/msdos/zortech/objswp.rsp35
-rw-r--r--dmake/msdos/zortech/public.h169
-rw-r--r--dmake/msdos/zortech/startup.mk153
-rw-r--r--dmake/msdos/zortech/tempnam.c106
-rw-r--r--dmake/os2/config.mk54
-rw-r--r--dmake/os2/dchdir.c41
-rw-r--r--dmake/os2/dirent.h36
-rw-r--r--dmake/os2/ibm/config.h78
-rw-r--r--dmake/os2/ibm/config.mk54
-rw-r--r--dmake/os2/ibm/icc/config.mk11
-rw-r--r--dmake/os2/ibm/icc/lib.rsp1
-rwxr-xr-xdmake/os2/ibm/icc/mk.cmd96
-rw-r--r--dmake/os2/ibm/icc/obj.rsp31
-rw-r--r--dmake/os2/ibm/icc/public.h169
-rw-r--r--dmake/os2/ibm/icc/template.mk7
-rw-r--r--dmake/os2/ibm/icc3/config.mk11
-rw-r--r--dmake/os2/ibm/icc3/lib.rsp1
-rwxr-xr-xdmake/os2/ibm/icc3/mk.cmd192
-rw-r--r--dmake/os2/ibm/icc3/obj.rsp30
-rw-r--r--dmake/os2/ibm/icc3/public.h169
-rw-r--r--dmake/os2/ibm/icc3/template.mk7
-rw-r--r--dmake/os2/ibm/tempnam.c111
-rw-r--r--dmake/os2/ruletab.c47
-rw-r--r--dmake/os2/startup.h27
-rw-r--r--dmake/os2/switchar.c43
-rw-r--r--dmake/os2/sysintf.h62
-rw-r--r--dmake/parse.c176
-rw-r--r--dmake/path.c337
-rw-r--r--dmake/percent.c251
-rw-r--r--dmake/posix.h66
-rw-r--r--dmake/qssl/config.mk43
-rw-r--r--dmake/qssl/make.sh62
-rw-r--r--dmake/qssl/public.h166
-rw-r--r--dmake/qssl/ruletab.c41
-rw-r--r--dmake/qssl/runargv.c298
-rw-r--r--dmake/qssl/setup40
-rw-r--r--dmake/qssl/startup.h28
-rw-r--r--dmake/qssl/stdlib.h48
-rw-r--r--dmake/qssl/sysintf.h42
-rw-r--r--dmake/qssl/template.mk7
-rw-r--r--dmake/qssl/tempnam.c102
-rw-r--r--dmake/qssl/time.h32
-rw-r--r--dmake/quit.c116
-rw-r--r--dmake/rcsclean.awk57
-rw-r--r--dmake/readme/intro.txt40
-rw-r--r--dmake/readme/license.txt248
-rw-r--r--dmake/readme/public/install.txt203
-rw-r--r--dmake/readme/public/mac.txt43
-rw-r--r--dmake/readme/public/msdos.txt124
-rw-r--r--dmake/readme/public/os2.txt76
-rw-r--r--dmake/readme/public/qssl-qnx.txt5
-rw-r--r--dmake/readme/public/srcorg.txt74
-rw-r--r--dmake/readme/public/tos.txt31
-rw-r--r--dmake/readme/public/unix.txt171
-rw-r--r--dmake/readme/read1st.txt58
-rw-r--r--dmake/readme/release.txt196
-rw-r--r--dmake/rulparse.c1740
-rwxr-xr-xdmake/stamp-h1
-rwxr-xr-xdmake/startup/Makefile.am7
-rw-r--r--dmake/startup/Makefile.in492
-rw-r--r--dmake/startup/config.mk.in5
-rw-r--r--dmake/startup/mac/macros.mk41
-rw-r--r--dmake/startup/msdos/borland/bcc30/macros.mk4
-rw-r--r--dmake/startup/msdos/borland/bcc40/macros.mk4
-rw-r--r--dmake/startup/msdos/borland/bcc45/macros.mk4
-rw-r--r--dmake/startup/msdos/borland/bcc50.32/macros.mk4
-rw-r--r--dmake/startup/msdos/borland/bcc50/macros.mk4
-rw-r--r--dmake/startup/msdos/borland/macros.mk33
-rw-r--r--dmake/startup/msdos/borland/tcc20/macros.mk4
-rw-r--r--dmake/startup/msdos/macros.mk62
-rw-r--r--dmake/startup/msdos/microsft/macros.mk34
-rw-r--r--dmake/startup/msdos/recipes.mk9
-rw-r--r--dmake/startup/msdos/zortech/macros.mk30
-rw-r--r--dmake/startup/os2/ibm/macros.mk30
-rw-r--r--dmake/startup/os2/macros.mk60
-rw-r--r--dmake/startup/qssl/macros.mk11
-rw-r--r--dmake/startup/qssl/qnx/macros.mk11
-rw-r--r--dmake/startup/qssl/qnx/recipes.mk8
-rw-r--r--dmake/startup/qssl/recipes.mk8
-rw-r--r--dmake/startup/startup.mk211
-rw-r--r--dmake/startup/summary3
-rw-r--r--dmake/startup/template.mk7
-rw-r--r--dmake/startup/templates/mac/template.mk7
-rw-r--r--dmake/startup/templates/msdos/borland/bcc30/template.mk7
-rw-r--r--dmake/startup/templates/msdos/borland/bcc40/template.mk7
-rw-r--r--dmake/startup/templates/msdos/borland/bcc45/template.mk7
-rw-r--r--dmake/startup/templates/msdos/borland/bcc50/template.mk7
-rw-r--r--dmake/startup/templates/msdos/borland/tcc20/template.mk7
-rw-r--r--dmake/startup/templates/msdos/microsft/msc51/template.mk7
-rw-r--r--dmake/startup/templates/msdos/microsft/msc60/template.mk7
-rw-r--r--dmake/startup/templates/os2/ibm/icc/template.mk7
-rw-r--r--dmake/startup/templates/qssl/template.mk7
-rw-r--r--dmake/startup/templates/tos/template.mk7
-rw-r--r--dmake/startup/templates/unix/386ix/template.mk7
-rw-r--r--dmake/startup/templates/unix/bsd43/template.mk7
-rw-r--r--dmake/startup/templates/unix/bsd43/uw/template.mk7
-rw-r--r--dmake/startup/templates/unix/bsd43/vf/template.mk7
-rw-r--r--dmake/startup/templates/unix/coherent/ver40/template.mk7
-rw-r--r--dmake/startup/templates/unix/coherent/ver42/template.mk7
-rw-r--r--dmake/startup/templates/unix/linux/gnu/template.mk7
-rw-r--r--dmake/startup/templates/unix/solaris/gnu/template.mk7
-rw-r--r--dmake/startup/templates/unix/solaris/template.mk7
-rw-r--r--dmake/startup/templates/unix/sysvr1/template.mk7
-rw-r--r--dmake/startup/templates/unix/sysvr3/pwd/template.mk7
-rw-r--r--dmake/startup/templates/unix/sysvr3/template.mk7
-rw-r--r--dmake/startup/templates/unix/sysvr4/template.mk7
-rw-r--r--dmake/startup/templates/unix/xenix/pwd/template.mk7
-rw-r--r--dmake/startup/templates/unix/xenix/template.mk7
-rw-r--r--dmake/startup/templates/win95/borland/bcc50/template.mk7
-rw-r--r--dmake/startup/templates/win95/microsft/vpp40/template.mk7
-rw-r--r--dmake/startup/templates/winnt/borland/bcc50/template.mk7
-rw-r--r--dmake/startup/templates/winnt/microsft/vpp40/template.mk7
-rw-r--r--dmake/startup/tos/macros.mk24
-rw-r--r--dmake/startup/unix/386ix/macros.mk6
-rwxr-xr-xdmake/startup/unix/Makefile.am8
-rw-r--r--dmake/startup/unix/Makefile.in489
-rw-r--r--dmake/startup/unix/bsd43/macros.mk11
-rw-r--r--dmake/startup/unix/bsd43/recipes.mk13
-rw-r--r--dmake/startup/unix/coherent/macros.mk6
-rw-r--r--dmake/startup/unix/coherent/recipes.mk6
-rw-r--r--dmake/startup/unix/cygwin/Makefile.am6
-rw-r--r--dmake/startup/unix/cygwin/Makefile.in331
-rw-r--r--dmake/startup/unix/cygwin/macros.mk10
-rwxr-xr-xdmake/startup/unix/linux/Makefile.am6
-rw-r--r--dmake/startup/unix/linux/Makefile.in331
-rw-r--r--dmake/startup/unix/linux/gnu/macros.mk6
-rw-r--r--dmake/startup/unix/linux/macros.mk10
-rwxr-xr-xdmake/startup/unix/macosx/Makefile.am6
-rw-r--r--dmake/startup/unix/macosx/Makefile.in331
-rw-r--r--dmake/startup/unix/macosx/gnu/macros.mk6
-rw-r--r--dmake/startup/unix/macosx/macros.mk10
-rw-r--r--dmake/startup/unix/macros.mk5
-rw-r--r--dmake/startup/unix/os2/Makefile.am6
-rw-r--r--dmake/startup/unix/os2/Makefile.in331
-rw-r--r--dmake/startup/unix/os2/macros.mk60
-rw-r--r--dmake/startup/unix/recipes.mk15
-rwxr-xr-xdmake/startup/unix/solaris/Makefile.am6
-rw-r--r--dmake/startup/unix/solaris/Makefile.in331
-rw-r--r--dmake/startup/unix/solaris/macros.mk6
-rw-r--r--dmake/startup/unix/sysvr1/macros.mk6
-rw-r--r--dmake/startup/unix/sysvr3/gnu/macros.mk12
-rw-r--r--dmake/startup/unix/sysvr3/macros.mk7
-rwxr-xr-xdmake/startup/unix/sysvr4/Makefile.am6
-rw-r--r--dmake/startup/unix/sysvr4/Makefile.in331
-rw-r--r--dmake/startup/unix/sysvr4/macros.mk6
-rw-r--r--dmake/startup/unix/xenix/macros.mk6
-rw-r--r--dmake/startup/win95/borland/macros.mk34
-rw-r--r--dmake/startup/win95/macros.mk75
-rw-r--r--dmake/startup/win95/microsft/macros.mk38
-rw-r--r--dmake/startup/win95/recipes.mk9
-rw-r--r--dmake/startup/winnt/Makefile.am8
-rw-r--r--dmake/startup/winnt/Makefile.in489
-rw-r--r--dmake/startup/winnt/borland/macros.mk34
-rw-r--r--dmake/startup/winnt/macros.mk75
-rw-r--r--dmake/startup/winnt/microsft/macros.mk37
-rw-r--r--dmake/startup/winnt/mingw/Makefile.am6
-rw-r--r--dmake/startup/winnt/mingw/Makefile.in331
-rw-r--r--dmake/startup/winnt/mingw/macros.mk10
-rw-r--r--dmake/startup/winnt/msvc6/Makefile.am6
-rw-r--r--dmake/startup/winnt/msvc6/Makefile.in331
-rw-r--r--dmake/startup/winnt/msvc6/macros.mk37
-rw-r--r--dmake/startup/winnt/recipes.mk9
-rw-r--r--dmake/stat.c278
-rw-r--r--dmake/state.c231
-rw-r--r--dmake/stdmacs.h60
-rw-r--r--dmake/struct.h261
-rw-r--r--dmake/sysintf.c1157
-rw-r--r--dmake/tests/Makefile.am22
-rw-r--r--dmake/tests/Makefile.in392
-rw-r--r--dmake/tests/README12
-rwxr-xr-xdmake/tests/function_macros-196
-rwxr-xr-xdmake/tests/function_macros-10122
-rwxr-xr-xdmake/tests/function_macros-264
-rwxr-xr-xdmake/tests/function_macros-340
-rwxr-xr-xdmake/tests/function_macros-435
-rwxr-xr-xdmake/tests/function_macros-546
-rwxr-xr-xdmake/tests/function_macros-642
-rwxr-xr-xdmake/tests/function_macros-739
-rwxr-xr-xdmake/tests/function_macros-8101
-rwxr-xr-xdmake/tests/function_macros-970
-rwxr-xr-xdmake/tests/infra-044
-rwxr-xr-xdmake/tests/macros-141
-rwxr-xr-xdmake/tests/macros-1099
-rwxr-xr-xdmake/tests/macros-11147
-rwxr-xr-xdmake/tests/macros-262
-rwxr-xr-xdmake/tests/macros-371
-rwxr-xr-xdmake/tests/macros-492
-rwxr-xr-xdmake/tests/macros-568
-rwxr-xr-xdmake/tests/macros-662
-rwxr-xr-xdmake/tests/macros-776
-rwxr-xr-xdmake/tests/macros-8157
-rwxr-xr-xdmake/tests/macros-9141
-rwxr-xr-xdmake/tests/misc-135
-rwxr-xr-xdmake/tests/misc-1041
-rwxr-xr-xdmake/tests/misc-1142
-rwxr-xr-xdmake/tests/misc-1240
-rwxr-xr-xdmake/tests/misc-1351
-rwxr-xr-xdmake/tests/misc-1444
-rwxr-xr-xdmake/tests/misc-1553
-rwxr-xr-xdmake/tests/misc-1648
-rwxr-xr-xdmake/tests/misc-1742
-rwxr-xr-xdmake/tests/misc-18169
-rwxr-xr-xdmake/tests/misc-1945
-rwxr-xr-xdmake/tests/misc-240
-rwxr-xr-xdmake/tests/misc-20121
-rwxr-xr-xdmake/tests/misc-2141
-rwxr-xr-xdmake/tests/misc-344
-rwxr-xr-xdmake/tests/misc-462
-rwxr-xr-xdmake/tests/misc-549
-rwxr-xr-xdmake/tests/misc-665
-rwxr-xr-xdmake/tests/misc-747
-rwxr-xr-xdmake/tests/misc-839
-rwxr-xr-xdmake/tests/misc-953
-rwxr-xr-xdmake/tests/recipes-138
-rwxr-xr-xdmake/tests/recipes-241
-rwxr-xr-xdmake/tests/recipes-340
-rwxr-xr-xdmake/tests/recipes-438
-rwxr-xr-xdmake/tests/recipes-562
-rwxr-xr-xdmake/tests/recipes-666
-rwxr-xr-xdmake/tests/recipes-738
-rwxr-xr-xdmake/tests/recipes-8104
-rwxr-xr-xdmake/tests/recipes-9117
-rw-r--r--dmake/tests/targets-178
-rw-r--r--dmake/tests/targets-1050
-rw-r--r--dmake/tests/targets-1138
-rw-r--r--dmake/tests/targets-1247
-rwxr-xr-xdmake/tests/targets-1349
-rwxr-xr-xdmake/tests/targets-1453
-rwxr-xr-xdmake/tests/targets-1556
-rwxr-xr-xdmake/tests/targets-1649
-rwxr-xr-xdmake/tests/targets-1738
-rwxr-xr-xdmake/tests/targets-1852
-rwxr-xr-xdmake/tests/targets-1968
-rw-r--r--dmake/tests/targets-270
-rwxr-xr-xdmake/tests/targets-2065
-rwxr-xr-xdmake/tests/targets-2155
-rwxr-xr-xdmake/tests/targets-2255
-rwxr-xr-xdmake/tests/targets-2356
-rwxr-xr-xdmake/tests/targets-2461
-rwxr-xr-xdmake/tests/targets-2551
-rwxr-xr-xdmake/tests/targets-2657
-rwxr-xr-xdmake/tests/targets-2759
-rwxr-xr-xdmake/tests/targets-28175
-rwxr-xr-xdmake/tests/targets-2959
-rw-r--r--dmake/tests/targets-349
-rwxr-xr-xdmake/tests/targets-3064
-rw-r--r--dmake/tests/targets-470
-rw-r--r--dmake/tests/targets-551
-rw-r--r--dmake/tests/targets-652
-rw-r--r--dmake/tests/targets-754
-rw-r--r--dmake/tests/targets-850
-rw-r--r--dmake/tests/targets-949
-rw-r--r--dmake/tos/config.mk49
-rw-r--r--dmake/tos/make.sh57
-rw-r--r--dmake/tos/public.h166
-rw-r--r--dmake/tos/putenv.c78
-rw-r--r--dmake/tos/ruletab.c42
-rw-r--r--dmake/tos/startup.h28
-rw-r--r--dmake/tos/sysintf.h45
-rw-r--r--dmake/tos/template.mk7
-rw-r--r--dmake/tos/tempnam.c104
-rw-r--r--dmake/unix/386ix/ar.h27
-rw-r--r--dmake/unix/386ix/config.mk27
-rw-r--r--dmake/unix/386ix/make.sh60
-rw-r--r--dmake/unix/386ix/public.h167
-rw-r--r--dmake/unix/386ix/stdlib.h44
-rw-r--r--dmake/unix/386ix/template.mk7
-rw-r--r--dmake/unix/386ix/time.h35
-rwxr-xr-xdmake/unix/Makefile.am7
-rwxr-xr-xdmake/unix/Makefile.in396
-rw-r--r--dmake/unix/arlib.c610
-rw-r--r--dmake/unix/bsd43/config.mk27
-rw-r--r--dmake/unix/bsd43/dirent.h28
-rw-r--r--dmake/unix/bsd43/limits.h32
-rw-r--r--dmake/unix/bsd43/make.sh69
-rw-r--r--dmake/unix/bsd43/public.h167
-rw-r--r--dmake/unix/bsd43/putenv.c78
-rw-r--r--dmake/unix/bsd43/setvbuf.c40
-rw-r--r--dmake/unix/bsd43/stdlib.h44
-rw-r--r--dmake/unix/bsd43/string.h43
-rw-r--r--dmake/unix/bsd43/template.mk7
-rw-r--r--dmake/unix/bsd43/tempnam.c103
-rw-r--r--dmake/unix/bsd43/utime.c70
-rw-r--r--dmake/unix/bsd43/uw/config.mk17
-rw-r--r--dmake/unix/bsd43/uw/make.sh69
-rw-r--r--dmake/unix/bsd43/uw/public.h167
-rw-r--r--dmake/unix/bsd43/uw/template.mk7
-rw-r--r--dmake/unix/bsd43/vf/config.mk11
-rw-r--r--dmake/unix/bsd43/vf/ctype.h51
-rw-r--r--dmake/unix/bsd43/vf/make.sh73
-rw-r--r--dmake/unix/bsd43/vf/memcpy.c36
-rw-r--r--dmake/unix/bsd43/vf/public.h167
-rw-r--r--dmake/unix/bsd43/vf/template.mk7
-rw-r--r--dmake/unix/bsd43/vf/vfprintf.c48
-rw-r--r--dmake/unix/bsdarm32/config.mk27
-rw-r--r--dmake/unix/bsdarm32/dirent.h30
-rw-r--r--dmake/unix/bsdarm32/limits.h29
-rw-r--r--dmake/unix/bsdarm32/make.sh67
-rw-r--r--dmake/unix/bsdarm32/public.h167
-rw-r--r--dmake/unix/bsdarm32/putenv.c78
-rw-r--r--dmake/unix/bsdarm32/stdlib.h44
-rw-r--r--dmake/unix/bsdarm32/string.h42
-rw-r--r--dmake/unix/bsdarm32/template.mk7
-rw-r--r--dmake/unix/bsdarm32/tempnam.c105
-rw-r--r--dmake/unix/bsdarm32/utime.c70
-rw-r--r--dmake/unix/coherent/config.mk26
-rw-r--r--dmake/unix/coherent/stdlib.h44
-rw-r--r--dmake/unix/coherent/time.h32
-rw-r--r--dmake/unix/coherent/ver40/config.mk11
-rw-r--r--dmake/unix/coherent/ver40/getcwd.c49
-rw-r--r--dmake/unix/coherent/ver40/make.sh64
-rw-r--r--dmake/unix/coherent/ver40/public.h167
-rw-r--r--dmake/unix/coherent/ver40/template.mk7
-rw-r--r--dmake/unix/coherent/ver40/vfprintf.c190
-rw-r--r--dmake/unix/coherent/ver42/config.mk11
-rw-r--r--dmake/unix/coherent/ver42/make.sh60
-rw-r--r--dmake/unix/coherent/ver42/public.h167
-rw-r--r--dmake/unix/coherent/ver42/template.mk7
-rw-r--r--dmake/unix/config.mk39
-rw-r--r--dmake/unix/cygwin/public.h172
-rw-r--r--dmake/unix/dcache.c223
-rw-r--r--dmake/unix/dirbrk.c53
-rw-r--r--dmake/unix/linux/config.mk27
-rw-r--r--dmake/unix/linux/gnu/config.mk4
-rw-r--r--dmake/unix/linux/gnu/make.sh193
-rw-r--r--dmake/unix/linux/gnu/public.h172
-rw-r--r--dmake/unix/linux/gnu/template.mk7
-rw-r--r--dmake/unix/macosx/config.mk27
-rw-r--r--dmake/unix/macosx/gnu/config.mk4
-rw-r--r--dmake/unix/macosx/gnu/make.sh63
-rw-r--r--dmake/unix/macosx/gnu/public.h167
-rw-r--r--dmake/unix/macosx/gnu/template.mk7
-rw-r--r--dmake/unix/macosx/tempnam.c102
-rw-r--r--dmake/unix/os2/public.h172
-rw-r--r--dmake/unix/rmprq.c121
-rw-r--r--dmake/unix/ruletab.c44
-rw-r--r--dmake/unix/runargv.c1101
-rw-r--r--dmake/unix/solaris/config.mk27
-rw-r--r--dmake/unix/solaris/getcwd.c231
-rw-r--r--dmake/unix/solaris/gnu/config.mk8
-rw-r--r--dmake/unix/solaris/gnu/make.sh64
-rw-r--r--dmake/unix/solaris/gnu/public.h167
-rw-r--r--dmake/unix/solaris/gnu/template.mk7
-rw-r--r--dmake/unix/solaris/make.sh64
-rw-r--r--dmake/unix/solaris/public.h166
-rw-r--r--dmake/unix/solaris/template.mk7
-rw-r--r--dmake/unix/solaris/tempnam.c103
-rw-r--r--dmake/unix/startup.h27
-rw-r--r--dmake/unix/sysintf.h50
-rw-r--r--dmake/unix/sysvr1/config.mk28
-rw-r--r--dmake/unix/sysvr1/make.sh62
-rw-r--r--dmake/unix/sysvr1/public.h167
-rw-r--r--dmake/unix/sysvr1/putenv.c78
-rw-r--r--dmake/unix/sysvr1/stdlib.h44
-rw-r--r--dmake/unix/sysvr1/template.mk7
-rw-r--r--dmake/unix/sysvr1/time.h32
-rw-r--r--dmake/unix/sysvr1/vfprintf.c58
-rw-r--r--dmake/unix/sysvr3/config.mk27
-rw-r--r--dmake/unix/sysvr3/gnu/public.h165
-rw-r--r--dmake/unix/sysvr3/make.sh60
-rw-r--r--dmake/unix/sysvr3/public.h167
-rw-r--r--dmake/unix/sysvr3/pwd/config.mk20
-rw-r--r--dmake/unix/sysvr3/pwd/getcwd.c231
-rw-r--r--dmake/unix/sysvr3/pwd/make.sh62
-rw-r--r--dmake/unix/sysvr3/pwd/public.h167
-rw-r--r--dmake/unix/sysvr3/pwd/template.mk7
-rw-r--r--dmake/unix/sysvr3/stdlib.h55
-rw-r--r--dmake/unix/sysvr3/template.mk7
-rw-r--r--dmake/unix/sysvr3/time.h32
-rw-r--r--dmake/unix/sysvr4/config.mk27
-rw-r--r--dmake/unix/sysvr4/make.sh60
-rw-r--r--dmake/unix/sysvr4/public.h167
-rw-r--r--dmake/unix/sysvr4/template.mk7
-rw-r--r--dmake/unix/tempnam.c106
-rw-r--r--dmake/unix/xenix/config.mk27
-rw-r--r--dmake/unix/xenix/make.sh60
-rw-r--r--dmake/unix/xenix/public.h167
-rw-r--r--dmake/unix/xenix/pwd/config.mk23
-rw-r--r--dmake/unix/xenix/pwd/getcwd.c231
-rw-r--r--dmake/unix/xenix/pwd/make.sh62
-rw-r--r--dmake/unix/xenix/pwd/public.h167
-rw-r--r--dmake/unix/xenix/pwd/template.mk7
-rw-r--r--dmake/unix/xenix/stdlib.h50
-rw-r--r--dmake/unix/xenix/template.mk7
-rw-r--r--dmake/unix/xenix/time.h32
-rw-r--r--dmake/vextern.h129
-rw-r--r--dmake/win95/borland/bcc50/config.h44
-rw-r--r--dmake/win95/borland/bcc50/config.mk14
-rw-r--r--dmake/win95/borland/bcc50/lib.rsp2
-rwxr-xr-xdmake/win95/borland/bcc50/mk.bat96
-rw-r--r--dmake/win95/borland/bcc50/obj.rsp32
-rw-r--r--dmake/win95/borland/bcc50/public.h168
-rw-r--r--dmake/win95/borland/bcc50/template.mk7
-rw-r--r--dmake/win95/borland/config.mk51
-rw-r--r--dmake/win95/borland/ruletab.c44
-rw-r--r--dmake/win95/borland/sysintf.h55
-rw-r--r--dmake/win95/borland/tempnam.c114
-rw-r--r--dmake/win95/config.mk53
-rw-r--r--dmake/win95/dchdir.c49
-rw-r--r--dmake/win95/microsft/config.h122
-rw-r--r--dmake/win95/microsft/config.mk62
-rw-r--r--dmake/win95/microsft/optoff.h27
-rw-r--r--dmake/win95/microsft/ruletab.c56
-rw-r--r--dmake/win95/microsft/sysintf.h57
-rw-r--r--dmake/win95/microsft/tempnam.c110
-rw-r--r--dmake/win95/microsft/vpp40/config.mk14
-rw-r--r--dmake/win95/microsft/vpp40/lib.rsp1
-rwxr-xr-xdmake/win95/microsft/vpp40/mk.bat41
-rw-r--r--dmake/win95/microsft/vpp40/obj.rsp28
-rw-r--r--dmake/win95/microsft/vpp40/public.h167
-rw-r--r--dmake/win95/microsft/vpp40/runargv.c288
-rw-r--r--dmake/win95/microsft/vpp40/template.mk7
-rw-r--r--dmake/win95/microsft/vpp40/tempnam.c110
-rw-r--r--dmake/win95/startup.h28
-rw-r--r--dmake/win95/switchar.c43
-rw-r--r--dmake/winnt/borland/bcc50/config.h44
-rw-r--r--dmake/winnt/borland/bcc50/config.mk12
-rw-r--r--dmake/winnt/borland/bcc50/lib.rsp2
-rwxr-xr-xdmake/winnt/borland/bcc50/mk.bat95
-rwxr-xr-xdmake/winnt/borland/bcc50/mk.cmd93
-rw-r--r--dmake/winnt/borland/bcc50/obj.rsp31
-rw-r--r--dmake/winnt/borland/bcc50/public.h168
-rw-r--r--dmake/winnt/borland/bcc50/template.mk7
-rw-r--r--dmake/winnt/borland/config.mk51
-rw-r--r--dmake/winnt/borland/ruletab.c44
-rw-r--r--dmake/winnt/borland/sysintf.h55
-rw-r--r--dmake/winnt/borland/tempnam.c114
-rw-r--r--dmake/winnt/config.mk57
-rw-r--r--dmake/winnt/dchdir.c47
-rw-r--r--dmake/winnt/microsft/config.h85
-rw-r--r--dmake/winnt/microsft/config.mk61
-rw-r--r--dmake/winnt/microsft/optoff.h27
-rw-r--r--dmake/winnt/microsft/ruletab.c45
-rw-r--r--dmake/winnt/microsft/sysintf.h57
-rw-r--r--dmake/winnt/microsft/tempnam.c110
-rw-r--r--dmake/winnt/microsft/vpp40/config.mk14
-rw-r--r--dmake/winnt/microsft/vpp40/lib.rsp1
-rwxr-xr-xdmake/winnt/microsft/vpp40/mk.bat32
-rwxr-xr-xdmake/winnt/microsft/vpp40/mk.cmd31
-rw-r--r--dmake/winnt/microsft/vpp40/obj.rsp28
-rw-r--r--dmake/winnt/microsft/vpp40/public.h167
-rw-r--r--dmake/winnt/microsft/vpp40/runargv.c288
-rw-r--r--dmake/winnt/microsft/vpp40/template.mk7
-rw-r--r--dmake/winnt/microsft/vpp40/tempnam.c110
-rw-r--r--dmake/winnt/mingw/public.h167
-rw-r--r--dmake/winnt/mingw/sysintf.h62
-rw-r--r--dmake/winnt/msvc6/public.h167
-rw-r--r--dmake/winnt/msvc6/sysintf.h62
-rw-r--r--dmake/winnt/startup.h29
-rw-r--r--drawinglayer/inc/drawinglayer/animation/animationtiming.hxx148
-rw-r--r--drawinglayer/inc/drawinglayer/attribute/fillbitmapattribute.hxx89
-rw-r--r--drawinglayer/inc/drawinglayer/attribute/fillgradientattribute.hxx121
-rw-r--r--drawinglayer/inc/drawinglayer/attribute/fillhatchattribute.hxx112
-rw-r--r--drawinglayer/inc/drawinglayer/attribute/fontattribute.hxx100
-rw-r--r--drawinglayer/inc/drawinglayer/attribute/lineattribute.hxx84
-rw-r--r--drawinglayer/inc/drawinglayer/attribute/linestartendattribute.hxx85
-rw-r--r--drawinglayer/inc/drawinglayer/attribute/materialattribute3d.hxx89
-rw-r--r--drawinglayer/inc/drawinglayer/attribute/sdrallattribute3d.hxx86
-rw-r--r--drawinglayer/inc/drawinglayer/attribute/sdrfillattribute.hxx99
-rw-r--r--drawinglayer/inc/drawinglayer/attribute/sdrfillbitmapattribute.hxx101
-rw-r--r--drawinglayer/inc/drawinglayer/attribute/sdrlightattribute3d.hxx96
-rw-r--r--drawinglayer/inc/drawinglayer/attribute/sdrlightingattribute3d.hxx99
-rw-r--r--drawinglayer/inc/drawinglayer/attribute/sdrlineattribute.hxx104
-rw-r--r--drawinglayer/inc/drawinglayer/attribute/sdrlinestartendattribute.hxx102
-rw-r--r--drawinglayer/inc/drawinglayer/attribute/sdrobjectattribute3d.hxx111
-rw-r--r--drawinglayer/inc/drawinglayer/attribute/sdrsceneattribute3d.hxx94
-rw-r--r--drawinglayer/inc/drawinglayer/attribute/sdrshadowattribute.hxx93
-rw-r--r--drawinglayer/inc/drawinglayer/attribute/strokeattribute.hxx79
-rw-r--r--drawinglayer/inc/drawinglayer/geometry/viewinformation2d.hxx183
-rw-r--r--drawinglayer/inc/drawinglayer/geometry/viewinformation3d.hxx177
-rw-r--r--drawinglayer/inc/drawinglayer/primitive2d/animatedprimitive2d.hxx178
-rw-r--r--drawinglayer/inc/drawinglayer/primitive2d/backgroundcolorprimitive2d.hxx93
-rw-r--r--drawinglayer/inc/drawinglayer/primitive2d/baseprimitive2d.hxx299
-rw-r--r--drawinglayer/inc/drawinglayer/primitive2d/bitmapprimitive2d.hxx87
-rw-r--r--drawinglayer/inc/drawinglayer/primitive2d/borderlineprimitive2d.hxx164
-rw-r--r--drawinglayer/inc/drawinglayer/primitive2d/chartprimitive2d.hxx79
-rw-r--r--drawinglayer/inc/drawinglayer/primitive2d/controlprimitive2d.hxx120
-rw-r--r--drawinglayer/inc/drawinglayer/primitive2d/discretebitmapprimitive2d.hxx85
-rw-r--r--drawinglayer/inc/drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx110
-rw-r--r--drawinglayer/inc/drawinglayer/primitive2d/embedded3dprimitive2d.hxx129
-rw-r--r--drawinglayer/inc/drawinglayer/primitive2d/epsprimitive2d.hxx88
-rw-r--r--drawinglayer/inc/drawinglayer/primitive2d/fillbitmapprimitive2d.hxx95
-rw-r--r--drawinglayer/inc/drawinglayer/primitive2d/fillgradientprimitive2d.hxx116
-rw-r--r--drawinglayer/inc/drawinglayer/primitive2d/fillhatchprimitive2d.hxx96
-rw-r--r--drawinglayer/inc/drawinglayer/primitive2d/graphicprimitive2d.hxx105
-rw-r--r--drawinglayer/inc/drawinglayer/primitive2d/gridprimitive2d.hxx126
-rw-r--r--drawinglayer/inc/drawinglayer/primitive2d/groupprimitive2d.hxx102
-rw-r--r--drawinglayer/inc/drawinglayer/primitive2d/helplineprimitive2d.hxx121
-rw-r--r--drawinglayer/inc/drawinglayer/primitive2d/hiddengeometryprimitive2d.hxx79
-rw-r--r--drawinglayer/inc/drawinglayer/primitive2d/invertprimitive2d.hxx66
-rw-r--r--drawinglayer/inc/drawinglayer/primitive2d/markerarrayprimitive2d.hxx95
-rw-r--r--drawinglayer/inc/drawinglayer/primitive2d/maskprimitive2d.hxx86
-rw-r--r--drawinglayer/inc/drawinglayer/primitive2d/mediaprimitive2d.hxx100
-rw-r--r--drawinglayer/inc/drawinglayer/primitive2d/metafileprimitive2d.hxx101
-rw-r--r--drawinglayer/inc/drawinglayer/primitive2d/modifiedcolorprimitive2d.hxx86
-rw-r--r--drawinglayer/inc/drawinglayer/primitive2d/pagepreviewprimitive2d.hxx111
-rw-r--r--drawinglayer/inc/drawinglayer/primitive2d/pointarrayprimitive2d.hxx90
-rw-r--r--drawinglayer/inc/drawinglayer/primitive2d/polygonprimitive2d.hxx324
-rw-r--r--drawinglayer/inc/drawinglayer/primitive2d/polypolygonprimitive2d.hxx446
-rw-r--r--drawinglayer/inc/drawinglayer/primitive2d/primitivetools2d.hxx199
-rw-r--r--drawinglayer/inc/drawinglayer/primitive2d/sceneprimitive2d.hxx166
-rw-r--r--drawinglayer/inc/drawinglayer/primitive2d/sdrdecompositiontools2d.hxx85
-rw-r--r--drawinglayer/inc/drawinglayer/primitive2d/shadowprimitive2d.hxx95
-rw-r--r--drawinglayer/inc/drawinglayer/primitive2d/structuretagprimitive2d.hxx78
-rw-r--r--drawinglayer/inc/drawinglayer/primitive2d/textdecoratedprimitive2d.hxx157
-rw-r--r--drawinglayer/inc/drawinglayer/primitive2d/texteffectprimitive2d.hxx113
-rw-r--r--drawinglayer/inc/drawinglayer/primitive2d/textenumsprimitive2d.hxx111
-rw-r--r--drawinglayer/inc/drawinglayer/primitive2d/texthierarchyprimitive2d.hxx219
-rw-r--r--drawinglayer/inc/drawinglayer/primitive2d/textlayoutdevice.hxx164
-rw-r--r--drawinglayer/inc/drawinglayer/primitive2d/textlineprimitive2d.hxx91
-rw-r--r--drawinglayer/inc/drawinglayer/primitive2d/textprimitive2d.hxx186
-rw-r--r--drawinglayer/inc/drawinglayer/primitive2d/textstrikeoutprimitive2d.hxx159
-rw-r--r--drawinglayer/inc/drawinglayer/primitive2d/transformprimitive2d.hxx91
-rw-r--r--drawinglayer/inc/drawinglayer/primitive2d/transparenceprimitive2d.hxx103
-rw-r--r--drawinglayer/inc/drawinglayer/primitive2d/unifiedtransparenceprimitive2d.hxx91
-rw-r--r--drawinglayer/inc/drawinglayer/primitive2d/wallpaperprimitive2d.hxx94
-rw-r--r--drawinglayer/inc/drawinglayer/primitive2d/wrongspellprimitive2d.hxx99
-rw-r--r--drawinglayer/inc/drawinglayer/primitive3d/baseprimitive3d.hxx220
-rw-r--r--drawinglayer/inc/drawinglayer/primitive3d/drawinglayer_primitivetypes3d.hxx65
-rw-r--r--drawinglayer/inc/drawinglayer/primitive3d/groupprimitive3d.hxx88
-rw-r--r--drawinglayer/inc/drawinglayer/primitive3d/hatchtextureprimitive3d.hxx93
-rw-r--r--drawinglayer/inc/drawinglayer/primitive3d/hiddengeometryprimitive3d.hxx81
-rw-r--r--drawinglayer/inc/drawinglayer/primitive3d/modifiedcolorprimitive3d.hxx76
-rw-r--r--drawinglayer/inc/drawinglayer/primitive3d/polygonprimitive3d.hxx141
-rw-r--r--drawinglayer/inc/drawinglayer/primitive3d/polygontubeprimitive3d.hxx111
-rw-r--r--drawinglayer/inc/drawinglayer/primitive3d/polypolygonprimitive3d.hxx90
-rw-r--r--drawinglayer/inc/drawinglayer/primitive3d/sdrcubeprimitive3d.hxx76
-rw-r--r--drawinglayer/inc/drawinglayer/primitive3d/sdrdecompositiontools3d.hxx104
-rw-r--r--drawinglayer/inc/drawinglayer/primitive3d/sdrextrudelathetools3d.hxx143
-rw-r--r--drawinglayer/inc/drawinglayer/primitive3d/sdrextrudeprimitive3d.hxx136
-rw-r--r--drawinglayer/inc/drawinglayer/primitive3d/sdrlatheprimitive3d.hxx154
-rw-r--r--drawinglayer/inc/drawinglayer/primitive3d/sdrpolypolygonprimitive3d.hxx88
-rw-r--r--drawinglayer/inc/drawinglayer/primitive3d/sdrprimitive3d.hxx95
-rw-r--r--drawinglayer/inc/drawinglayer/primitive3d/sdrsphereprimitive3d.hxx87
-rw-r--r--drawinglayer/inc/drawinglayer/primitive3d/shadowprimitive3d.hxx91
-rw-r--r--drawinglayer/inc/drawinglayer/primitive3d/textureprimitive3d.hxx237
-rw-r--r--drawinglayer/inc/drawinglayer/primitive3d/transformprimitive3d.hxx81
-rw-r--r--drawinglayer/inc/drawinglayer/processor2d/baseprocessor2d.hxx240
-rw-r--r--drawinglayer/inc/drawinglayer/processor2d/canvasprocessor.hxx132
-rw-r--r--drawinglayer/inc/drawinglayer/processor2d/contourextractor2d.hxx68
-rw-r--r--drawinglayer/inc/drawinglayer/processor2d/hittestprocessor2d.hxx114
-rw-r--r--drawinglayer/inc/drawinglayer/processor2d/linegeometryextractor2d.hxx71
-rw-r--r--drawinglayer/inc/drawinglayer/processor2d/textaspolygonextractor2d.hxx104
-rw-r--r--drawinglayer/inc/drawinglayer/processor2d/vclmetafileprocessor2d.hxx154
-rw-r--r--drawinglayer/inc/drawinglayer/processor2d/vclpixelprocessor2d.hxx77
-rw-r--r--drawinglayer/inc/drawinglayer/processor2d/vclprocessor2d.hxx138
-rw-r--r--drawinglayer/inc/drawinglayer/processor3d/baseprocessor3d.hxx119
-rw-r--r--drawinglayer/inc/drawinglayer/processor3d/cutfindprocessor3d.hxx97
-rw-r--r--drawinglayer/inc/drawinglayer/processor3d/defaultprocessor3d.hxx164
-rw-r--r--drawinglayer/inc/drawinglayer/processor3d/geometry2dextractor.hxx81
-rw-r--r--drawinglayer/inc/drawinglayer/processor3d/shadow3dextractor.hxx123
-rw-r--r--drawinglayer/inc/drawinglayer/processor3d/zbufferprocessor3d.hxx119
-rw-r--r--drawinglayer/inc/drawinglayer/texture/texture.hxx266
-rw-r--r--drawinglayer/inc/drawinglayer/texture/texture3d.hxx165
-rw-r--r--drawinglayer/inc/makefile.mk47
-rw-r--r--drawinglayer/inc/pch/precompiled_drawinglayer.cxx29
-rw-r--r--drawinglayer/inc/pch/precompiled_drawinglayer.hxx32
-rw-r--r--drawinglayer/prj/build.lst13
-rw-r--r--drawinglayer/prj/d.lst119
-rw-r--r--drawinglayer/source/animation/animationtiming.cxx370
-rw-r--r--drawinglayer/source/animation/makefile.mk44
-rw-r--r--drawinglayer/source/attribute/fillbitmapattribute.cxx199
-rw-r--r--drawinglayer/source/attribute/fillgradientattribute.cxx250
-rw-r--r--drawinglayer/source/attribute/fillhatchattribute.cxx219
-rw-r--r--drawinglayer/source/attribute/fontattribute.cxx253
-rw-r--r--drawinglayer/source/attribute/lineattribute.cxx185
-rw-r--r--drawinglayer/source/attribute/linestartendattribute.cxx194
-rw-r--r--drawinglayer/source/attribute/makefile.mk61
-rw-r--r--drawinglayer/source/attribute/materialattribute3d.cxx207
-rw-r--r--drawinglayer/source/attribute/sdrallattribute3d.cxx83
-rw-r--r--drawinglayer/source/attribute/sdrfillattribute.cxx221
-rw-r--r--drawinglayer/source/attribute/sdrfillbitmapattribute.cxx404
-rw-r--r--drawinglayer/source/attribute/sdrlightattribute3d.cxx196
-rw-r--r--drawinglayer/source/attribute/sdrlightingattribute3d.cxx235
-rw-r--r--drawinglayer/source/attribute/sdrlineattribute.cxx250
-rw-r--r--drawinglayer/source/attribute/sdrlinestartendattribute.cxx254
-rw-r--r--drawinglayer/source/attribute/sdrobjectattribute3d.cxx292
-rw-r--r--drawinglayer/source/attribute/sdrsceneattribute3d.cxx218
-rw-r--r--drawinglayer/source/attribute/sdrshadowattribute.cxx193
-rw-r--r--drawinglayer/source/attribute/strokeattribute.cxx182
-rw-r--r--drawinglayer/source/geometry/makefile.mk44
-rw-r--r--drawinglayer/source/geometry/viewinformation2d.cxx592
-rw-r--r--drawinglayer/source/geometry/viewinformation3d.cxx599
-rw-r--r--drawinglayer/source/primitive2d/animatedprimitive2d.cxx224
-rw-r--r--drawinglayer/source/primitive2d/backgroundcolorprimitive2d.cxx116
-rw-r--r--drawinglayer/source/primitive2d/baseprimitive2d.cxx278
-rw-r--r--drawinglayer/source/primitive2d/bitmapprimitive2d.cxx81
-rw-r--r--drawinglayer/source/primitive2d/borderlineprimitive2d.cxx235
-rw-r--r--drawinglayer/source/primitive2d/chartprimitive2d.cxx82
-rw-r--r--drawinglayer/source/primitive2d/controlprimitive2d.cxx383
-rw-r--r--drawinglayer/source/primitive2d/discretebitmapprimitive2d.cxx116
-rw-r--r--drawinglayer/source/primitive2d/embedded3dprimitive2d.cxx168
-rw-r--r--drawinglayer/source/primitive2d/epsprimitive2d.cxx103
-rw-r--r--drawinglayer/source/primitive2d/fillbitmapprimitive2d.cxx142
-rw-r--r--drawinglayer/source/primitive2d/fillgradientprimitive2d.cxx298
-rw-r--r--drawinglayer/source/primitive2d/fillhatchprimitive2d.cxx161
-rw-r--r--drawinglayer/source/primitive2d/graphicprimitive2d.cxx942
-rw-r--r--drawinglayer/source/primitive2d/gridprimitive2d.cxx320
-rw-r--r--drawinglayer/source/primitive2d/groupprimitive2d.cxx79
-rw-r--r--drawinglayer/source/primitive2d/helplineprimitive2d.cxx222
-rw-r--r--drawinglayer/source/primitive2d/hiddengeometryprimitive2d.cxx75
-rw-r--r--drawinglayer/source/primitive2d/invertprimitive2d.cxx57
-rw-r--r--drawinglayer/source/primitive2d/makefile.mk89
-rw-r--r--drawinglayer/source/primitive2d/markerarrayprimitive2d.cxx157
-rw-r--r--drawinglayer/source/primitive2d/maskprimitive2d.cxx76
-rw-r--r--drawinglayer/source/primitive2d/mediaprimitive2d.cxx163
-rw-r--r--drawinglayer/source/primitive2d/metafileprimitive2d.cxx3252
-rw-r--r--drawinglayer/source/primitive2d/modifiedcolorprimitive2d.cxx71
-rw-r--r--drawinglayer/source/primitive2d/pagepreviewprimitive2d.cxx183
-rw-r--r--drawinglayer/source/primitive2d/pointarrayprimitive2d.cxx93
-rw-r--r--drawinglayer/source/primitive2d/polygonprimitive2d.cxx638
-rw-r--r--drawinglayer/source/primitive2d/polypolygonprimitive2d.cxx572
-rw-r--r--drawinglayer/source/primitive2d/primitivetools2d.cxx170
-rw-r--r--drawinglayer/source/primitive2d/sceneprimitive2d.cxx480
-rw-r--r--drawinglayer/source/primitive2d/sdrdecompositiontools2d.cxx130
-rw-r--r--drawinglayer/source/primitive2d/shadowprimitive2d.cxx106
-rw-r--r--drawinglayer/source/primitive2d/structuretagprimitive2d.cxx59
-rw-r--r--drawinglayer/source/primitive2d/textdecoratedprimitive2d.cxx606
-rw-r--r--drawinglayer/source/primitive2d/texteffectprimitive2d.cxx239
-rw-r--r--drawinglayer/source/primitive2d/textenumsprimitive2d.cxx121
-rw-r--r--drawinglayer/source/primitive2d/texthierarchyprimitive2d.cxx158
-rw-r--r--drawinglayer/source/primitive2d/textlayoutdevice.cxx491
-rw-r--r--drawinglayer/source/primitive2d/textlineprimitive2d.cxx309
-rw-r--r--drawinglayer/source/primitive2d/textprimitive2d.cxx339
-rw-r--r--drawinglayer/source/primitive2d/textstrikeoutprimitive2d.cxx286
-rw-r--r--drawinglayer/source/primitive2d/transformprimitive2d.cxx79
-rw-r--r--drawinglayer/source/primitive2d/transparenceprimitive2d.cxx78
-rw-r--r--drawinglayer/source/primitive2d/unifiedtransparenceprimitive2d.cxx136
-rw-r--r--drawinglayer/source/primitive2d/wallpaperprimitive2d.cxx269
-rw-r--r--drawinglayer/source/primitive2d/wrongspellprimitive2d.cxx122
-rw-r--r--drawinglayer/source/primitive3d/baseprimitive3d.cxx278
-rw-r--r--drawinglayer/source/primitive3d/groupprimitive3d.cxx79
-rw-r--r--drawinglayer/source/primitive3d/hatchtextureprimitive3d.cxx319
-rw-r--r--drawinglayer/source/primitive3d/hiddengeometryprimitive3d.cxx76
-rw-r--r--drawinglayer/source/primitive3d/makefile.mk62
-rw-r--r--drawinglayer/source/primitive3d/modifiedcolorprimitive3d.cxx71
-rw-r--r--drawinglayer/source/primitive3d/polygonprimitive3d.cxx178
-rw-r--r--drawinglayer/source/primitive3d/polygontubeprimitive3d.cxx579
-rw-r--r--drawinglayer/source/primitive3d/polypolygonprimitive3d.cxx83
-rw-r--r--drawinglayer/source/primitive3d/sdrcubeprimitive3d.cxx222
-rw-r--r--drawinglayer/source/primitive3d/sdrdecompositiontools3d.cxx339
-rw-r--r--drawinglayer/source/primitive3d/sdrextrudelathetools3d.cxx991
-rw-r--r--drawinglayer/source/primitive3d/sdrextrudeprimitive3d.cxx526
-rw-r--r--drawinglayer/source/primitive3d/sdrlatheprimitive3d.cxx387
-rw-r--r--drawinglayer/source/primitive3d/sdrpolypolygonprimitive3d.cxx194
-rw-r--r--drawinglayer/source/primitive3d/sdrprimitive3d.cxx125
-rw-r--r--drawinglayer/source/primitive3d/sdrsphereprimitive3d.cxx224
-rw-r--r--drawinglayer/source/primitive3d/shadowprimitive3d.cxx80
-rw-r--r--drawinglayer/source/primitive3d/textureprimitive3d.cxx227
-rw-r--r--drawinglayer/source/primitive3d/transformprimitive3d.cxx79
-rw-r--r--drawinglayer/source/processor2d/baseprocessor2d.cxx91
-rw-r--r--drawinglayer/source/processor2d/canvasprocessor.cxx2218
-rw-r--r--drawinglayer/source/processor2d/contourextractor2d.cxx203
-rw-r--r--drawinglayer/source/processor2d/helperchartrenderer.cxx155
-rw-r--r--drawinglayer/source/processor2d/helperchartrenderer.hxx60
-rw-r--r--drawinglayer/source/processor2d/helperwrongspellrenderer.cxx96
-rw-r--r--drawinglayer/source/processor2d/helperwrongspellrenderer.hxx65
-rw-r--r--drawinglayer/source/processor2d/hittestprocessor2d.cxx605
-rw-r--r--drawinglayer/source/processor2d/linegeometryextractor2d.cxx144
-rw-r--r--drawinglayer/source/processor2d/makefile.mk58
-rw-r--r--drawinglayer/source/processor2d/textaspolygonextractor2d.cxx247
-rw-r--r--drawinglayer/source/processor2d/vclhelperbitmaprender.cxx272
-rw-r--r--drawinglayer/source/processor2d/vclhelperbitmaprender.hxx66
-rw-r--r--drawinglayer/source/processor2d/vclhelperbitmaptransform.cxx431
-rw-r--r--drawinglayer/source/processor2d/vclhelperbitmaptransform.hxx60
-rw-r--r--drawinglayer/source/processor2d/vclhelperbufferdevice.cxx182
-rw-r--r--drawinglayer/source/processor2d/vclhelperbufferdevice.hxx70
-rw-r--r--drawinglayer/source/processor2d/vclhelpergradient.cxx285
-rw-r--r--drawinglayer/source/processor2d/vclhelpergradient.hxx62
-rw-r--r--drawinglayer/source/processor2d/vclmetafileprocessor2d.cxx2017
-rw-r--r--drawinglayer/source/processor2d/vclpixelprocessor2d.cxx613
-rw-r--r--drawinglayer/source/processor2d/vclprocessor2d.cxx1492
-rw-r--r--drawinglayer/source/processor3d/baseprocessor3d.cxx114
-rw-r--r--drawinglayer/source/processor3d/cutfindprocessor3d.cxx225
-rw-r--r--drawinglayer/source/processor3d/defaultprocessor3d.cxx566
-rw-r--r--drawinglayer/source/processor3d/geometry2dextractor.cxx170
-rw-r--r--drawinglayer/source/processor3d/makefile.mk50
-rw-r--r--drawinglayer/source/processor3d/shadow3dextractor.cxx342
-rw-r--r--drawinglayer/source/processor3d/zbufferprocessor3d.cxx840
-rw-r--r--drawinglayer/source/texture/makefile.mk45
-rw-r--r--drawinglayer/source/texture/texture.cxx644
-rw-r--r--drawinglayer/source/texture/texture3d.cxx262
-rw-r--r--drawinglayer/util/drawinglayer.flt4
-rw-r--r--drawinglayer/util/makefile.mk85
-rw-r--r--dtrans/inc/makefile.mk47
-rw-r--r--dtrans/inc/pch/precompiled_dtrans.cxx29
-rw-r--r--dtrans/inc/pch/precompiled_dtrans.hxx32
-rw-r--r--dtrans/prj/build.lst15
-rw-r--r--dtrans/prj/d.lst9
-rw-r--r--dtrans/source/cnttype/exports.dxp3
-rw-r--r--dtrans/source/cnttype/makefile.mk53
-rw-r--r--dtrans/source/cnttype/mcnttfactory.cxx123
-rw-r--r--dtrans/source/cnttype/mcnttfactory.hxx85
-rw-r--r--dtrans/source/cnttype/mcnttype.cxx427
-rw-r--r--dtrans/source/cnttype/mcnttype.hxx97
-rw-r--r--dtrans/source/cnttype/mcnttype.xml35
-rw-r--r--dtrans/source/cnttype/mctfentry.cxx160
-rw-r--r--dtrans/source/cnttype/wbench/makefile.mk53
-rw-r--r--dtrans/source/cnttype/wbench/testcnttype.cxx269
-rw-r--r--dtrans/source/generic/clipboardmanager.cxx266
-rw-r--r--dtrans/source/generic/clipboardmanager.hxx127
-rw-r--r--dtrans/source/generic/dtrans.cxx131
-rw-r--r--dtrans/source/generic/dtrans.xml44
-rw-r--r--dtrans/source/generic/exports.dxp3
-rw-r--r--dtrans/source/generic/generic_clipboard.cxx205
-rw-r--r--dtrans/source/generic/generic_clipboard.hxx135
-rw-r--r--dtrans/source/generic/makefile.mk67
-rw-r--r--dtrans/source/inc/DtObjFactory.hxx54
-rw-r--r--dtrans/source/inc/MtaOleClipb.hxx134
-rw-r--r--dtrans/source/os2/clipb/OS2Bitmap.cxx248
-rw-r--r--dtrans/source/os2/clipb/Os2Clipboard.cxx447
-rw-r--r--dtrans/source/os2/clipb/Os2Clipboard.hxx136
-rw-r--r--dtrans/source/os2/clipb/Os2Service.cxx106
-rw-r--r--dtrans/source/os2/clipb/Os2Transferable.cxx176
-rw-r--r--dtrans/source/os2/clipb/Os2Transferable.hxx99
-rw-r--r--dtrans/source/os2/clipb/exports.dxp4
-rw-r--r--dtrans/source/os2/clipb/makefile.mk59
-rw-r--r--dtrans/source/os2/clipb/sysdtrans.xml43
-rw-r--r--dtrans/source/test/makefile.mk53
-rw-r--r--dtrans/source/test/test_dtrans.cxx512
-rw-r--r--dtrans/source/win32/clipb/APNDataObject.hxx87
-rw-r--r--dtrans/source/win32/clipb/WinClipbImpl.cxx273
-rw-r--r--dtrans/source/win32/clipb/WinClipbImpl.hxx125
-rw-r--r--dtrans/source/win32/clipb/WinClipboard.cxx322
-rw-r--r--dtrans/source/win32/clipb/WinClipboard.hxx157
-rw-r--r--dtrans/source/win32/clipb/exports.dxp4
-rw-r--r--dtrans/source/win32/clipb/makefile.mk59
-rw-r--r--dtrans/source/win32/clipb/sysdtrans.xml43
-rw-r--r--dtrans/source/win32/clipb/wcbentry.cxx159
-rw-r--r--dtrans/source/win32/dnd/dnd.xml46
-rw-r--r--dtrans/source/win32/dnd/dndentry.cxx153
-rw-r--r--dtrans/source/win32/dnd/exports.dxp3
-rw-r--r--dtrans/source/win32/dnd/globals.cxx139
-rw-r--r--dtrans/source/win32/dnd/globals.hxx94
-rw-r--r--dtrans/source/win32/dnd/idroptarget.cxx114
-rw-r--r--dtrans/source/win32/dnd/idroptarget.hxx74
-rw-r--r--dtrans/source/win32/dnd/makefile.mk66
-rw-r--r--dtrans/source/win32/dnd/source.cxx431
-rw-r--r--dtrans/source/win32/dnd/source.hxx151
-rw-r--r--dtrans/source/win32/dnd/sourcecontext.cxx156
-rw-r--r--dtrans/source/win32/dnd/sourcecontext.hxx89
-rw-r--r--dtrans/source/win32/dnd/target.cxx661
-rw-r--r--dtrans/source/win32/dnd/target.hxx213
-rw-r--r--dtrans/source/win32/dnd/targetdragcontext.cxx59
-rw-r--r--dtrans/source/win32/dnd/targetdragcontext.hxx62
-rw-r--r--dtrans/source/win32/dnd/targetdropcontext.cxx69
-rw-r--r--dtrans/source/win32/dnd/targetdropcontext.hxx72
-rw-r--r--dtrans/source/win32/dtobj/APNDataObject.cxx378
-rw-r--r--dtrans/source/win32/dtobj/APNDataObject.hxx89
-rw-r--r--dtrans/source/win32/dtobj/DOTransferable.cxx605
-rw-r--r--dtrans/source/win32/dtobj/DOTransferable.hxx133
-rw-r--r--dtrans/source/win32/dtobj/DTransHelper.cxx239
-rw-r--r--dtrans/source/win32/dtobj/DTransHelper.hxx214
-rw-r--r--dtrans/source/win32/dtobj/DataFmtTransl.cxx336
-rw-r--r--dtrans/source/win32/dtobj/DataFmtTransl.hxx83
-rw-r--r--dtrans/source/win32/dtobj/DtObjFactory.cxx74
-rw-r--r--dtrans/source/win32/dtobj/Fetc.cxx259
-rw-r--r--dtrans/source/win32/dtobj/Fetc.hxx93
-rw-r--r--dtrans/source/win32/dtobj/FetcList.cxx480
-rw-r--r--dtrans/source/win32/dtobj/FetcList.hxx156
-rw-r--r--dtrans/source/win32/dtobj/FmtFilter.cxx536
-rw-r--r--dtrans/source/win32/dtobj/FmtFilter.hxx90
-rw-r--r--dtrans/source/win32/dtobj/MimeAttrib.hxx50
-rw-r--r--dtrans/source/win32/dtobj/TxtCnvtHlp.cxx145
-rw-r--r--dtrans/source/win32/dtobj/TxtCnvtHlp.hxx63
-rw-r--r--dtrans/source/win32/dtobj/XNotifyingDataObject.cxx163
-rw-r--r--dtrans/source/win32/dtobj/XNotifyingDataObject.hxx105
-rw-r--r--dtrans/source/win32/dtobj/XTDataObject.cxx848
-rw-r--r--dtrans/source/win32/dtobj/XTDataObject.hxx177
-rw-r--r--dtrans/source/win32/dtobj/makefile.mk76
-rw-r--r--dtrans/source/win32/ftransl/exports.dxp3
-rw-r--r--dtrans/source/win32/ftransl/ftransl.cxx648
-rw-r--r--dtrans/source/win32/ftransl/ftransl.hxx132
-rw-r--r--dtrans/source/win32/ftransl/ftransl.xml33
-rw-r--r--dtrans/source/win32/ftransl/ftranslentry.cxx163
-rw-r--r--dtrans/source/win32/ftransl/makefile.mk51
-rw-r--r--dtrans/source/win32/misc/ImplHelper.cxx489
-rw-r--r--dtrans/source/win32/misc/ImplHelper.hxx106
-rw-r--r--dtrans/source/win32/misc/WinClip.hxx45
-rw-r--r--dtrans/source/win32/misc/makefile.mk60
-rw-r--r--dtrans/source/win32/mtaole/MtaOleClipb.cxx893
-rw-r--r--dtrans/source/win32/mtaole/makefile.mk54
-rw-r--r--dtrans/source/win32/workbench/XTDo.cxx431
-rw-r--r--dtrans/source/win32/workbench/XTDo.hxx134
-rw-r--r--dtrans/source/win32/workbench/makefile.mk96
-rw-r--r--dtrans/source/win32/workbench/test_wincb.cxx348
-rw-r--r--dtrans/source/win32/workbench/testmarshal.cxx243
-rw-r--r--dtrans/test/win32/dnd/atlwindow.cxx262
-rw-r--r--dtrans/test/win32/dnd/atlwindow.hxx100
-rw-r--r--dtrans/test/win32/dnd/dndTest.cxx210
-rw-r--r--dtrans/test/win32/dnd/makefile.mk83
-rw-r--r--dtrans/test/win32/dnd/sourcelistener.cxx73
-rw-r--r--dtrans/test/win32/dnd/sourcelistener.hxx65
-rw-r--r--dtrans/test/win32/dnd/targetlistener.cxx103
-rw-r--r--dtrans/test/win32/dnd/targetlistener.hxx74
-rw-r--r--dtrans/test/win32/dnd/transferable.cxx126
-rw-r--r--dtrans/test/win32/dnd/transferable.hxx124
-rw-r--r--dtrans/util/exports.dxp3
-rw-r--r--dtrans/util/makefile.mk182
-rw-r--r--editeng/inc/editeng.hrc43
-rw-r--r--editeng/inc/editeng/AccessibleComponentBase.hxx147
-rw-r--r--editeng/inc/editeng/AccessibleContextBase.hxx400
-rw-r--r--editeng/inc/editeng/AccessibleEditableTextPara.hxx419
-rw-r--r--editeng/inc/editeng/AccessibleImageBullet.hxx237
-rw-r--r--editeng/inc/editeng/AccessibleParaManager.hxx347
-rw-r--r--editeng/inc/editeng/AccessibleSelectionBase.hxx73
-rw-r--r--editeng/inc/editeng/AccessibleStaticTextBase.hxx283
-rw-r--r--editeng/inc/editeng/AccessibleStringWrap.hxx63
-rw-r--r--editeng/inc/editeng/SpellPortions.hxx95
-rw-r--r--editeng/inc/editeng/UnoForbiddenCharsTable.hxx65
-rw-r--r--editeng/inc/editeng/acorrcfg.hxx133
-rw-r--r--editeng/inc/editeng/adjitem.hxx143
-rw-r--r--editeng/inc/editeng/akrnitem.hxx74
-rw-r--r--editeng/inc/editeng/blnkitem.hxx72
-rw-r--r--editeng/inc/editeng/bolnitem.hxx83
-rw-r--r--editeng/inc/editeng/borderline.hxx134
-rw-r--r--editeng/inc/editeng/boxitem.hxx226
-rw-r--r--editeng/inc/editeng/brkitem.hxx103
-rw-r--r--editeng/inc/editeng/brshitem.hxx140
-rw-r--r--editeng/inc/editeng/bulitem.hxx160
-rw-r--r--editeng/inc/editeng/charhiddenitem.hxx61
-rw-r--r--editeng/inc/editeng/charreliefitem.hxx80
-rw-r--r--editeng/inc/editeng/charrotateitem.hxx92
-rw-r--r--editeng/inc/editeng/charscaleitem.hxx78
-rw-r--r--editeng/inc/editeng/cmapitem.hxx89
-rw-r--r--editeng/inc/editeng/cntritem.hxx68
-rw-r--r--editeng/inc/editeng/colritem.hxx95
-rw-r--r--editeng/inc/editeng/crsditem.hxx93
-rw-r--r--editeng/inc/editeng/cscoitem.hxx75
-rw-r--r--editeng/inc/editeng/editdata.hxx388
-rwxr-xr-xediteng/inc/editeng/editeng.hxx487
-rw-r--r--editeng/inc/editeng/editengdllapi.h43
-rw-r--r--editeng/inc/editeng/editerr.hxx39
-rw-r--r--editeng/inc/editeng/editids.hrc245
-rw-r--r--editeng/inc/editeng/editobj.hxx126
-rw-r--r--editeng/inc/editeng/editrids.hrc432
-rw-r--r--editeng/inc/editeng/editstat.hxx150
-rw-r--r--editeng/inc/editeng/editund2.hxx76
-rw-r--r--editeng/inc/editeng/editview.hxx250
-rw-r--r--editeng/inc/editeng/edtdlg.hxx114
-rw-r--r--editeng/inc/editeng/eedata.hxx74
-rw-r--r--editeng/inc/editeng/eeitem.hxx99
-rw-r--r--editeng/inc/editeng/eeitemid.hxx136
-rw-r--r--editeng/inc/editeng/eerdll.hxx61
-rw-r--r--editeng/inc/editeng/emphitem.hxx88
-rw-r--r--editeng/inc/editeng/escpitem.hxx114
-rw-r--r--editeng/inc/editeng/fhgtitem.hxx116
-rw-r--r--editeng/inc/editeng/flditem.hxx427
-rw-r--r--editeng/inc/editeng/flstitem.hxx79
-rw-r--r--editeng/inc/editeng/fontitem.hxx118
-rw-r--r--editeng/inc/editeng/forbiddencharacterstable.hxx70
-rw-r--r--editeng/inc/editeng/forbiddenruleitem.hxx69
-rw-r--r--editeng/inc/editeng/frmdir.hxx60
-rw-r--r--editeng/inc/editeng/frmdiritem.hxx80
-rw-r--r--editeng/inc/editeng/fwdtitem.hxx108
-rw-r--r--editeng/inc/editeng/hangulhanja.hxx302
-rw-r--r--editeng/inc/editeng/hngpnctitem.hxx69
-rw-r--r--editeng/inc/editeng/hyznitem.hxx106
-rw-r--r--editeng/inc/editeng/itemtype.hxx75
-rw-r--r--editeng/inc/editeng/keepitem.hxx78
-rw-r--r--editeng/inc/editeng/kernitem.hxx80
-rw-r--r--editeng/inc/editeng/langitem.hxx84
-rw-r--r--editeng/inc/editeng/lcolitem.hxx65
-rw-r--r--editeng/inc/editeng/lrspitem.hxx179
-rw-r--r--editeng/inc/editeng/lspcitem.hxx123
-rw-r--r--editeng/inc/editeng/measfld.hxx66
-rw-r--r--editeng/inc/editeng/memberids.hrc196
-rw-r--r--editeng/inc/editeng/mutxhelp.hxx44
-rw-r--r--editeng/inc/editeng/nhypitem.hxx68
-rw-r--r--editeng/inc/editeng/nlbkitem.hxx73
-rw-r--r--editeng/inc/editeng/numdef.hxx30
-rw-r--r--editeng/inc/editeng/numitem.hxx396
-rw-r--r--editeng/inc/editeng/opaqitem.hxx81
-rw-r--r--editeng/inc/editeng/optitems.hxx111
-rw-r--r--editeng/inc/editeng/orphitem.hxx74
-rw-r--r--editeng/inc/editeng/outliner.hxx1053
-rw-r--r--editeng/inc/editeng/outlobj.hxx96
-rw-r--r--editeng/inc/editeng/paperinf.hxx73
-rw-r--r--editeng/inc/editeng/paragraphdata.hxx72
-rw-r--r--editeng/inc/editeng/paravertalignitem.hxx80
-rw-r--r--editeng/inc/editeng/pbinitem.hxx77
-rw-r--r--editeng/inc/editeng/pgrditem.hxx64
-rw-r--r--editeng/inc/editeng/pmdlitem.hxx86
-rw-r--r--editeng/inc/editeng/postitem.hxx89
-rw-r--r--editeng/inc/editeng/prntitem.hxx79
-rw-r--r--editeng/inc/editeng/protitem.hxx105
-rw-r--r--editeng/inc/editeng/prszitem.hxx68
-rw-r--r--editeng/inc/editeng/scriptspaceitem.hxx70
-rw-r--r--editeng/inc/editeng/scripttypeitem.hxx91
-rw-r--r--editeng/inc/editeng/shaditem.hxx111
-rw-r--r--editeng/inc/editeng/shdditem.hxx74
-rw-r--r--editeng/inc/editeng/sizeitem.hxx83
-rw-r--r--editeng/inc/editeng/spltitem.hxx81
-rwxr-xr-xediteng/inc/editeng/splwrap.hxx160
-rw-r--r--editeng/inc/editeng/svxacorr.hxx399
-rw-r--r--editeng/inc/editeng/svxenum.hxx218
-rw-r--r--editeng/inc/editeng/svxfont.hxx126
-rw-r--r--editeng/inc/editeng/svxrtf.hxx475
-rw-r--r--editeng/inc/editeng/swafopt.hxx105
-rw-r--r--editeng/inc/editeng/tstpitem.hxx185
-rw-r--r--editeng/inc/editeng/twolinesitem.hxx90
-rw-r--r--editeng/inc/editeng/txtrange.hxx118
-rw-r--r--editeng/inc/editeng/udlnitem.hxx133
-rw-r--r--editeng/inc/editeng/ulspitem.hxx113
-rw-r--r--editeng/inc/editeng/unoedhlp.hxx189
-rw-r--r--editeng/inc/editeng/unoedprx.hxx179
-rw-r--r--editeng/inc/editeng/unoedsrc.hxx552
-rw-r--r--editeng/inc/editeng/unofdesc.hxx54
-rw-r--r--editeng/inc/editeng/unofield.hxx137
-rw-r--r--editeng/inc/editeng/unofored.hxx100
-rw-r--r--editeng/inc/editeng/unoforou.hxx129
-rw-r--r--editeng/inc/editeng/unoipset.hxx84
-rw-r--r--editeng/inc/editeng/unolingu.hxx236
-rw-r--r--editeng/inc/editeng/unonrule.hxx95
-rw-r--r--editeng/inc/editeng/unopracc.hxx73
-rw-r--r--editeng/inc/editeng/unoprnms.hxx376
-rw-r--r--editeng/inc/editeng/unotext.hxx677
-rw-r--r--editeng/inc/editeng/unoviwed.hxx62
-rw-r--r--editeng/inc/editeng/unoviwou.hxx68
-rw-r--r--editeng/inc/editeng/wghtitem.hxx89
-rw-r--r--editeng/inc/editeng/widwitem.hxx74
-rw-r--r--editeng/inc/editeng/writingmodeitem.hxx68
-rw-r--r--editeng/inc/editeng/wrlmitem.hxx75
-rw-r--r--editeng/inc/editeng/xmlcnitm.hxx91
-rw-r--r--editeng/inc/editxml.hxx43
-rw-r--r--editeng/inc/helpid.hrc81
-rw-r--r--editeng/inc/makefile.mk52
-rw-r--r--editeng/inc/pch/precompiled_editeng.cxx32
-rw-r--r--editeng/inc/pch/precompiled_editeng.hxx897
-rw-r--r--editeng/prj/build.lst13
-rw-r--r--editeng/prj/d.lst14
-rw-r--r--editeng/source/accessibility/AccessibleComponentBase.cxx237
-rw-r--r--editeng/source/accessibility/AccessibleContextBase.cxx715
-rw-r--r--editeng/source/accessibility/AccessibleEditableTextPara.cxx2311
-rw-r--r--editeng/source/accessibility/AccessibleHyperlink.cxx146
-rw-r--r--editeng/source/accessibility/AccessibleHyperlink.hxx82
-rw-r--r--editeng/source/accessibility/AccessibleImageBullet.cxx651
-rw-r--r--editeng/source/accessibility/AccessibleParaManager.cxx420
-rw-r--r--editeng/source/accessibility/AccessibleSelectionBase.cxx108
-rw-r--r--editeng/source/accessibility/AccessibleStaticTextBase.cxx1047
-rw-r--r--editeng/source/accessibility/AccessibleStringWrap.cxx100
-rw-r--r--editeng/source/accessibility/accessibility.src43
-rw-r--r--editeng/source/accessibility/makefile.mk59
-rw-r--r--editeng/source/editeng/editattr.cxx454
-rw-r--r--editeng/source/editeng/editattr.hxx426
-rw-r--r--editeng/source/editeng/editdbg.cxx586
-rw-r--r--editeng/source/editeng/editdbg.hxx57
-rw-r--r--editeng/source/editeng/editdoc.cxx2314
-rw-r--r--editeng/source/editeng/editdoc.hxx802
-rw-r--r--editeng/source/editeng/editdoc2.cxx544
-rw-r--r--editeng/source/editeng/editeng.cxx2950
-rw-r--r--editeng/source/editeng/editeng.src124
-rw-r--r--editeng/source/editeng/editobj.cxx1725
-rw-r--r--editeng/source/editeng/editobj2.hxx309
-rw-r--r--editeng/source/editeng/editsel.cxx121
-rw-r--r--editeng/source/editeng/editsel.hxx75
-rw-r--r--editeng/source/editeng/editstt2.hxx130
-rw-r--r--editeng/source/editeng/editundo.cxx750
-rw-r--r--editeng/source/editeng/editundo.hxx315
-rwxr-xr-xediteng/source/editeng/editview.cxx1655
-rw-r--r--editeng/source/editeng/edtspell.cxx758
-rw-r--r--editeng/source/editeng/edtspell.hxx179
-rw-r--r--editeng/source/editeng/eehtml.cxx869
-rw-r--r--editeng/source/editeng/eehtml.hxx99
-rw-r--r--editeng/source/editeng/eeng_pch.cxx30
-rw-r--r--editeng/source/editeng/eeng_pch.hxx34
-rw-r--r--editeng/source/editeng/eeobj.cxx112
-rw-r--r--editeng/source/editeng/eeobj.hxx72
-rw-r--r--editeng/source/editeng/eerdll.cxx237
-rw-r--r--editeng/source/editeng/eerdll2.hxx61
-rw-r--r--editeng/source/editeng/eertfpar.cxx632
-rw-r--r--editeng/source/editeng/eertfpar.hxx128
-rwxr-xr-xediteng/source/editeng/impedit.cxx2005
-rwxr-xr-xediteng/source/editeng/impedit.hxx1214
-rwxr-xr-xediteng/source/editeng/impedit2.cxx4644
-rw-r--r--editeng/source/editeng/impedit3.cxx4677
-rwxr-xr-xediteng/source/editeng/impedit4.cxx3251
-rw-r--r--editeng/source/editeng/impedit5.cxx911
-rw-r--r--editeng/source/editeng/makefile.mk80
-rw-r--r--editeng/source/editeng/textconv.cxx629
-rw-r--r--editeng/source/editeng/textconv.hxx122
-rw-r--r--editeng/source/items/bulitem.cxx534
-rw-r--r--editeng/source/items/charhiddenitem.cxx82
-rw-r--r--editeng/source/items/flditem.cxx1098
-rw-r--r--editeng/source/items/frmitems.cxx4467
-rw-r--r--editeng/source/items/itemtype.cxx239
-rw-r--r--editeng/source/items/makefile.mk79
-rw-r--r--editeng/source/items/numitem.cxx1273
-rw-r--r--editeng/source/items/optitems.cxx203
-rw-r--r--editeng/source/items/page.src255
-rw-r--r--editeng/source/items/paperinf.cxx185
-rw-r--r--editeng/source/items/paraitem.cxx1757
-rw-r--r--editeng/source/items/svdfield.cxx65
-rw-r--r--editeng/source/items/svxfont.cxx857
-rw-r--r--editeng/source/items/svxitems.src1027
-rw-r--r--editeng/source/items/textitem.cxx3843
-rw-r--r--editeng/source/items/writingmodeitem.cxx153
-rw-r--r--editeng/source/items/xmlcnitm.cxx248
-rw-r--r--editeng/source/misc/SvXMLAutoCorrectExport.cxx117
-rw-r--r--editeng/source/misc/SvXMLAutoCorrectExport.hxx75
-rw-r--r--editeng/source/misc/SvXMLAutoCorrectImport.cxx266
-rw-r--r--editeng/source/misc/SvXMLAutoCorrectImport.hxx148
-rw-r--r--editeng/source/misc/acorrcfg.cxx675
-rwxr-xr-xediteng/source/misc/edtdlg.cxx43
-rw-r--r--editeng/source/misc/forbiddencharacterstable.cxx92
-rw-r--r--editeng/source/misc/hangulhanja.cxx1171
-rw-r--r--editeng/source/misc/lingu.src104
-rw-r--r--editeng/source/misc/makefile.mk71
-rw-r--r--editeng/source/misc/splwrap.cxx632
-rw-r--r--editeng/source/misc/svxacorr.cxx2786
-rw-r--r--editeng/source/misc/swafopt.cxx158
-rw-r--r--editeng/source/misc/txtrange.cxx719
-rwxr-xr-xediteng/source/misc/unolingu.cxx1377
-rw-r--r--editeng/source/outliner/makefile.mk60
-rw-r--r--editeng/source/outliner/outl_pch.cxx31
-rw-r--r--editeng/source/outliner/outl_pch.hxx33
-rw-r--r--editeng/source/outliner/outleeng.cxx244
-rw-r--r--editeng/source/outliner/outleeng.hxx93
-rw-r--r--editeng/source/outliner/outlin2.cxx813
-rw-r--r--editeng/source/outliner/outliner.cxx2181
-rw-r--r--editeng/source/outliner/outliner.src84
-rw-r--r--editeng/source/outliner/outlobj.cxx271
-rw-r--r--editeng/source/outliner/outlundo.cxx234
-rw-r--r--editeng/source/outliner/outlundo.hxx140
-rwxr-xr-xediteng/source/outliner/outlvw.cxx1734
-rw-r--r--editeng/source/outliner/paralist.cxx287
-rw-r--r--editeng/source/outliner/paralist.hxx71
-rw-r--r--editeng/source/rtf/makefile.mk51
-rw-r--r--editeng/source/rtf/rtfgrf.cxx558
-rw-r--r--editeng/source/rtf/rtfitem.cxx2101
-rw-r--r--editeng/source/rtf/segincr.asm39
-rw-r--r--editeng/source/rtf/svxrtf.cxx1514
-rw-r--r--editeng/source/uno/UnoForbiddenCharsTable.cxx145
-rw-r--r--editeng/source/uno/makefile.mk61
-rw-r--r--editeng/source/uno/unoedhlp.cxx197
-rw-r--r--editeng/source/uno/unoedprx.cxx1316
-rw-r--r--editeng/source/uno/unoedsrc.cxx90
-rw-r--r--editeng/source/uno/unofdesc.cxx266
-rw-r--r--editeng/source/uno/unofield.cxx1180
-rw-r--r--editeng/source/uno/unofored.cxx557
-rw-r--r--editeng/source/uno/unoforou.cxx615
-rw-r--r--editeng/source/uno/unoipset.cxx394
-rw-r--r--editeng/source/uno/unonrule.cxx615
-rw-r--r--editeng/source/uno/unopracc.cxx171
-rw-r--r--editeng/source/uno/unotext.cxx2724
-rw-r--r--editeng/source/uno/unotext2.cxx711
-rw-r--r--editeng/source/uno/unoviwed.cxx137
-rw-r--r--editeng/source/uno/unoviwou.cxx173
-rw-r--r--editeng/source/xml/editsource.hxx52
-rw-r--r--editeng/source/xml/makefile.mk50
-rw-r--r--editeng/source/xml/xmltxtexp.cxx500
-rw-r--r--editeng/source/xml/xmltxtimp.cxx260
-rw-r--r--editeng/util/editeng.dxp3
-rw-r--r--editeng/util/hidother.src52
-rw-r--r--editeng/util/makefile.mk102
-rw-r--r--editeng/util/makefile.pmk47
-rw-r--r--embeddedobj/inc/makefile.mk47
-rw-r--r--embeddedobj/inc/pch/precompiled_embeddedobj.cxx29
-rw-r--r--embeddedobj/inc/pch/precompiled_embeddedobj.hxx32
-rw-r--r--embeddedobj/prj/build.lst7
-rw-r--r--embeddedobj/prj/d.lst6
-rw-r--r--embeddedobj/prj/l10n1
-rw-r--r--embeddedobj/qa/embedding/EmbeddingTest.java7
-rw-r--r--embeddedobj/qa/embedding/EmbeddingUnitTest.java91
-rw-r--r--embeddedobj/qa/embedding/Test01.java135
-rw-r--r--embeddedobj/qa/embedding/TestHelper.java36
-rw-r--r--embeddedobj/qa/embedding/makefile.mk84
-rw-r--r--embeddedobj/source/commonembedding/embedobj.cxx701
-rw-r--r--embeddedobj/source/commonembedding/inplaceobj.cxx89
-rw-r--r--embeddedobj/source/commonembedding/makefile.mk56
-rw-r--r--embeddedobj/source/commonembedding/miscobj.cxx700
-rw-r--r--embeddedobj/source/commonembedding/persistence.cxx1918
-rw-r--r--embeddedobj/source/commonembedding/register.cxx133
-rw-r--r--embeddedobj/source/commonembedding/specialobject.cxx245
-rw-r--r--embeddedobj/source/commonembedding/visobj.cxx236
-rw-r--r--embeddedobj/source/commonembedding/xfactory.cxx579
-rw-r--r--embeddedobj/source/commonembedding/xfactory.hxx125
-rw-r--r--embeddedobj/source/general/docholder.cxx1360
-rw-r--r--embeddedobj/source/general/dummyobject.cxx722
-rw-r--r--embeddedobj/source/general/intercept.cxx426
-rw-r--r--embeddedobj/source/general/makefile.mk60
-rw-r--r--embeddedobj/source/general/xcreator.cxx491
-rw-r--r--embeddedobj/source/inc/closepreventer.hxx38
-rw-r--r--embeddedobj/source/inc/commonembobj.hxx521
-rw-r--r--embeddedobj/source/inc/docholder.hxx213
-rw-r--r--embeddedobj/source/inc/dummyobject.hxx297
-rw-r--r--embeddedobj/source/inc/intercept.hxx167
-rw-r--r--embeddedobj/source/inc/oleembobj.hxx546
-rw-r--r--embeddedobj/source/inc/specialobject.hxx90
-rw-r--r--embeddedobj/source/inc/targetstatecontrol.hxx48
-rw-r--r--embeddedobj/source/inc/xcreator.hxx91
-rw-r--r--embeddedobj/source/msole/advisesink.cxx134
-rw-r--r--embeddedobj/source/msole/advisesink.hxx56
-rw-r--r--embeddedobj/source/msole/closepreventer.cxx52
-rw-r--r--embeddedobj/source/msole/exports.dxp3
-rw-r--r--embeddedobj/source/msole/graphconvert.cxx133
-rw-r--r--embeddedobj/source/msole/makefile.mk132
-rw-r--r--embeddedobj/source/msole/mtnotification.hxx55
-rw-r--r--embeddedobj/source/msole/olecomponent.cxx1801
-rw-r--r--embeddedobj/source/msole/olecomponent.hxx194
-rw-r--r--embeddedobj/source/msole/oleembed.cxx1131
-rw-r--r--embeddedobj/source/msole/olemisc.cxx704
-rw-r--r--embeddedobj/source/msole/olepersist.cxx2201
-rw-r--r--embeddedobj/source/msole/oleregister.cxx123
-rw-r--r--embeddedobj/source/msole/olevisual.cxx444
-rw-r--r--embeddedobj/source/msole/olewrapclient.cxx158
-rw-r--r--embeddedobj/source/msole/olewrapclient.hxx56
-rw-r--r--embeddedobj/source/msole/ownview.cxx665
-rw-r--r--embeddedobj/source/msole/ownview.hxx90
-rw-r--r--embeddedobj/source/msole/platform.h49
-rw-r--r--embeddedobj/source/msole/xdialogcreator.cxx385
-rw-r--r--embeddedobj/source/msole/xdialogcreator.hxx77
-rw-r--r--embeddedobj/source/msole/xolefactory.cxx342
-rw-r--r--embeddedobj/source/msole/xolefactory.hxx84
-rw-r--r--embeddedobj/test/Container1/BitmapPainter.java286
-rw-r--r--embeddedobj/test/Container1/EmbedContApp.java1687
-rw-r--r--embeddedobj/test/Container1/EmbedContFrame.java118
-rw-r--r--embeddedobj/test/Container1/JavaWindowPeerFake.java109
-rw-r--r--embeddedobj/test/Container1/NativeView.java177
-rw-r--r--embeddedobj/test/Container1/PaintThread.java153
-rw-r--r--embeddedobj/test/Container1/WindowHelper.java137
-rw-r--r--embeddedobj/test/Container1/makefile.mk87
-rw-r--r--embeddedobj/test/Container1/nativelib/exports.dxp3
-rw-r--r--embeddedobj/test/Container1/nativelib/makefile.mk78
-rw-r--r--embeddedobj/test/Container1/nativelib/nativeview.c186
-rw-r--r--embeddedobj/test/Container1/nativelib/nativeview.h57
-rw-r--r--embeddedobj/test/MainThreadExecutor/exports.dxp3
-rw-r--r--embeddedobj/test/MainThreadExecutor/makefile.mk67
-rw-r--r--embeddedobj/test/MainThreadExecutor/register.cxx101
-rw-r--r--embeddedobj/test/MainThreadExecutor/xexecutor.cxx142
-rw-r--r--embeddedobj/test/MainThreadExecutor/xexecutor.hxx87
-rw-r--r--embeddedobj/test/mtexecutor/bitmapcreator.cxx123
-rw-r--r--embeddedobj/test/mtexecutor/bitmapcreator.hxx69
-rw-r--r--embeddedobj/test/mtexecutor/exports.dxp3
-rw-r--r--embeddedobj/test/mtexecutor/mainthreadexecutor.cxx139
-rw-r--r--embeddedobj/test/mtexecutor/mainthreadexecutor.hxx83
-rw-r--r--embeddedobj/test/mtexecutor/makefile.mk78
-rw-r--r--embeddedobj/test/mtexecutor/mteregister.cxx123
-rw-r--r--embeddedobj/util/exports.dxp3
-rw-r--r--embeddedobj/util/makefile.mk89
-rw-r--r--epm/epm-3.7.patch657
-rw-r--r--epm/makefile.mk62
-rw-r--r--epm/prj/build.lst2
-rw-r--r--epm/prj/d.lst3
-rw-r--r--eventattacher/prj/build.lst4
-rw-r--r--eventattacher/prj/d.lst3
-rw-r--r--eventattacher/source/eventattacher.cxx898
-rw-r--r--eventattacher/source/makefile.mk63
-rw-r--r--expat/expat-2.0.1.patch93
-rw-r--r--expat/expat-winapi.patch13
-rw-r--r--expat/makefile.mk65
-rw-r--r--expat/prj/build.lst3
-rw-r--r--expat/prj/d.lst15
-rw-r--r--external/gcc3_specific/makefile.mk69
-rw-r--r--external/glibc-2.1.3.patch210
-rw-r--r--external/glibc/makefile.mk70
-rw-r--r--external/mingwheaders/makefile.mk210
-rw-r--r--external/mingwheaders/mingw_atl_headers.patch1654
-rw-r--r--external/mingwheaders/mingw_headers.patch2130
-rw-r--r--external/prj/build.lst5
-rw-r--r--external/prj/d.lst65
-rw-r--r--external/unowinreg/README2
-rw-r--r--extras/prj/build.lst30
-rw-r--r--extras/prj/d.lst12
-rw-r--r--extras/source/autotext/delzip1
-rw-r--r--extras/source/autotext/lang/af-ZA/acor_af-ZA.datbin0 -> 5241 bytes
-rw-r--r--extras/source/autotext/lang/bg/acor_bg-BG.datbin0 -> 3410 bytes
-rw-r--r--extras/source/autotext/lang/bg/crdbus50.baubin0 -> 14598 bytes
-rw-r--r--extras/source/autotext/lang/bg/standard.baubin0 -> 56036 bytes
-rw-r--r--extras/source/autotext/lang/bg/template.baubin0 -> 59956 bytes
-rw-r--r--extras/source/autotext/lang/cs/acor_cs-CZ.datbin0 -> 99637 bytes
-rw-r--r--extras/source/autotext/lang/cs/crdbus50.baubin0 -> 34953 bytes
-rw-r--r--extras/source/autotext/lang/cs/crdbus54.baubin0 -> 34910 bytes
-rw-r--r--extras/source/autotext/lang/cs/standard.baubin0 -> 86365 bytes
-rw-r--r--extras/source/autotext/lang/cs/template.baubin0 -> 58306 bytes
-rw-r--r--extras/source/autotext/lang/da/acor_da-DK.datbin0 -> 7470 bytes
-rw-r--r--extras/source/autotext/lang/da/crdbus50.baubin0 -> 28865 bytes
-rw-r--r--extras/source/autotext/lang/da/standard.baubin0 -> 55464 bytes
-rw-r--r--extras/source/autotext/lang/da/template.baubin0 -> 45130 bytes
-rw-r--r--extras/source/autotext/lang/de/acor_de-DE.datbin0 -> 52613 bytes
-rw-r--r--extras/source/autotext/lang/de/crdbus50.baubin0 -> 20777 bytes
-rw-r--r--extras/source/autotext/lang/de/standard.baubin0 -> 48317 bytes
-rw-r--r--extras/source/autotext/lang/de/template.baubin0 -> 49052 bytes
-rw-r--r--extras/source/autotext/lang/delzip1
-rw-r--r--extras/source/autotext/lang/en-AU/acor_en-AU.datbin0 -> 79211 bytes
-rw-r--r--extras/source/autotext/lang/en-GB/acor_en-GB.datbin0 -> 79212 bytes
-rw-r--r--extras/source/autotext/lang/en-GB/crdbus50.baubin0 -> 30564 bytes
-rw-r--r--extras/source/autotext/lang/en-GB/standard.baubin0 -> 68960 bytes
-rw-r--r--extras/source/autotext/lang/en-GB/template.baubin0 -> 49042 bytes
-rw-r--r--extras/source/autotext/lang/en-US/acor_en-US.datbin0 -> 78472 bytes
-rw-r--r--extras/source/autotext/lang/en-US/crdbus50.baubin0 -> 29311 bytes
-rw-r--r--extras/source/autotext/lang/en-US/standard.baubin0 -> 57462 bytes
-rw-r--r--extras/source/autotext/lang/en-US/template.baubin0 -> 45671 bytes
-rw-r--r--extras/source/autotext/lang/en-ZA/acor_en-ZA.datbin0 -> 8244 bytes
-rw-r--r--extras/source/autotext/lang/es/acor_es-ES.datbin0 -> 39611 bytes
-rw-r--r--extras/source/autotext/lang/es/crdbus50.baubin0 -> 29126 bytes
-rw-r--r--extras/source/autotext/lang/es/standard.baubin0 -> 43448 bytes
-rw-r--r--extras/source/autotext/lang/es/template.baubin0 -> 45738 bytes
-rw-r--r--extras/source/autotext/lang/eu/acor_eu.datbin0 -> 78988 bytes
-rwxr-xr-xextras/source/autotext/lang/eu/crdbus50.baubin0 -> 29311 bytes
-rwxr-xr-xextras/source/autotext/lang/eu/standard.baubin0 -> 57462 bytes
-rwxr-xr-xextras/source/autotext/lang/eu/template.baubin0 -> 45671 bytes
-rw-r--r--extras/source/autotext/lang/fa/acor_fa-IR.datbin0 -> 629744 bytes
-rw-r--r--extras/source/autotext/lang/fi/acor_fi-FI.datbin0 -> 5810 bytes
-rw-r--r--extras/source/autotext/lang/fr/acor_fr-FR.datbin0 -> 4650 bytes
-rw-r--r--extras/source/autotext/lang/fr/crdbus50.baubin0 -> 29255 bytes
-rw-r--r--extras/source/autotext/lang/fr/standard.baubin0 -> 48704 bytes
-rw-r--r--extras/source/autotext/lang/fr/template.baubin0 -> 45856 bytes
-rw-r--r--extras/source/autotext/lang/ga-IE/acor_ga-IE.datbin0 -> 13750 bytes
-rw-r--r--extras/source/autotext/lang/hu/acor_hu-HU.datbin0 -> 96683 bytes
-rw-r--r--extras/source/autotext/lang/hu/crdbus50.baubin0 -> 29629 bytes
-rw-r--r--extras/source/autotext/lang/hu/crdbus54.baubin0 -> 29564 bytes
-rw-r--r--extras/source/autotext/lang/hu/mytexts.baubin0 -> 577 bytes
-rw-r--r--extras/source/autotext/lang/hu/standard.baubin0 -> 44813 bytes
-rw-r--r--extras/source/autotext/lang/hu/template.baubin0 -> 53009 bytes
-rw-r--r--extras/source/autotext/lang/it/acor_it-IT.datbin0 -> 13337 bytes
-rw-r--r--extras/source/autotext/lang/it/crdbus50.baubin0 -> 29144 bytes
-rw-r--r--extras/source/autotext/lang/it/standard.baubin0 -> 44669 bytes
-rw-r--r--extras/source/autotext/lang/it/template.baubin0 -> 45994 bytes
-rw-r--r--extras/source/autotext/lang/ja/acor_ja-JP.datbin0 -> 77736 bytes
-rw-r--r--extras/source/autotext/lang/ja/crdbus50.baubin0 -> 15065 bytes
-rw-r--r--extras/source/autotext/lang/ja/standard.baubin0 -> 36137 bytes
-rw-r--r--extras/source/autotext/lang/ja/template.baubin0 -> 46244 bytes
-rw-r--r--extras/source/autotext/lang/km/crdbus50.baubin0 -> 29311 bytes
-rw-r--r--extras/source/autotext/lang/km/standard.baubin0 -> 57462 bytes
-rw-r--r--extras/source/autotext/lang/km/template.baubin0 -> 45671 bytes
-rw-r--r--extras/source/autotext/lang/ko/acor_ko-KR.datbin0 -> 77736 bytes
-rw-r--r--extras/source/autotext/lang/ko/crdbus50.baubin0 -> 15587 bytes
-rw-r--r--extras/source/autotext/lang/ko/standard.baubin0 -> 40482 bytes
-rw-r--r--extras/source/autotext/lang/ko/template.baubin0 -> 46406 bytes
-rw-r--r--extras/source/autotext/lang/lb-LU/acor_lb-LU.datbin0 -> 45098 bytes
-rw-r--r--extras/source/autotext/lang/makefile.mk50
-rw-r--r--extras/source/autotext/lang/mn/acor_mn-MN.datbin0 -> 4249 bytes
-rw-r--r--extras/source/autotext/lang/mn/crdbus50.baubin0 -> 31760 bytes
-rw-r--r--extras/source/autotext/lang/mn/standard.baubin0 -> 64482 bytes
-rw-r--r--extras/source/autotext/lang/mn/template.baubin0 -> 50850 bytes
-rw-r--r--extras/source/autotext/lang/nl/acor_nl-NL.datbin0 -> 18708 bytes
-rw-r--r--extras/source/autotext/lang/nl/crdbus50.baubin0 -> 34228 bytes
-rw-r--r--extras/source/autotext/lang/nl/standard.baubin0 -> 40557 bytes
-rw-r--r--extras/source/autotext/lang/nl/template.baubin0 -> 39676 bytes
-rw-r--r--extras/source/autotext/lang/pl/acor_pl-PL.datbin0 -> 7913 bytes
-rw-r--r--extras/source/autotext/lang/pl/crdbus50.baubin0 -> 16633 bytes
-rw-r--r--extras/source/autotext/lang/pl/standard.baubin0 -> 33032 bytes
-rw-r--r--extras/source/autotext/lang/pl/template.baubin0 -> 7581 bytes
-rw-r--r--extras/source/autotext/lang/pt-BR/acor_pt-BR.datbin0 -> 40513 bytes
-rw-r--r--extras/source/autotext/lang/pt-BR/crdbus50.baubin0 -> 14627 bytes
-rw-r--r--extras/source/autotext/lang/pt-BR/standard.baubin0 -> 36413 bytes
-rw-r--r--extras/source/autotext/lang/pt-BR/template.baubin0 -> 46270 bytes
-rw-r--r--extras/source/autotext/lang/pt/acor_pt-PT.datbin0 -> 15141 bytes
-rw-r--r--extras/source/autotext/lang/pt/crdbus50.baubin0 -> 36662 bytes
-rw-r--r--extras/source/autotext/lang/pt/standard.baubin0 -> 61444 bytes
-rw-r--r--extras/source/autotext/lang/pt/template.baubin0 -> 7042 bytes
-rw-r--r--extras/source/autotext/lang/ru/acor_ru-RU.datbin0 -> 25673 bytes
-rw-r--r--extras/source/autotext/lang/ru/crdbus50.baubin0 -> 29311 bytes
-rw-r--r--extras/source/autotext/lang/ru/standard.baubin0 -> 57462 bytes
-rw-r--r--extras/source/autotext/lang/ru/template.baubin0 -> 45671 bytes
-rw-r--r--extras/source/autotext/lang/sh-ME/acor_sh-ME.datbin0 -> 1631 bytes
-rw-r--r--extras/source/autotext/lang/sh-RS/acor_sh-RS.datbin0 -> 1631 bytes
-rw-r--r--extras/source/autotext/lang/sh-YU/acor_sh-YU.datbin0 -> 1631 bytes
-rw-r--r--extras/source/autotext/lang/sk/acor_sk-SK.datbin0 -> 5641 bytes
-rw-r--r--extras/source/autotext/lang/sk/crdbus50.baubin0 -> 30465 bytes
-rw-r--r--extras/source/autotext/lang/sk/crdbus54.baubin0 -> 30842 bytes
-rw-r--r--extras/source/autotext/lang/sk/standard.baubin0 -> 92337 bytes
-rw-r--r--extras/source/autotext/lang/sk/template.baubin0 -> 60907 bytes
-rw-r--r--extras/source/autotext/lang/sl/acor_sl-SI.datbin0 -> 46882 bytes
-rw-r--r--extras/source/autotext/lang/sl/crdbus50.baubin0 -> 30684 bytes
-rw-r--r--extras/source/autotext/lang/sl/crdbus54.baubin0 -> 30620 bytes
-rw-r--r--extras/source/autotext/lang/sl/mytexts.baubin0 -> 570 bytes
-rw-r--r--extras/source/autotext/lang/sl/standard.baubin0 -> 59934 bytes
-rw-r--r--extras/source/autotext/lang/sl/template.baubin0 -> 61243 bytes
-rw-r--r--extras/source/autotext/lang/sr-ME/acor_sr-ME.datbin0 -> 1683 bytes
-rw-r--r--extras/source/autotext/lang/sr-RS/acor_sr-RS.datbin0 -> 1683 bytes
-rw-r--r--extras/source/autotext/lang/sr-YU/acor_sr-YU.datbin0 -> 1683 bytes
-rw-r--r--extras/source/autotext/lang/sv/acor_sv-SE.datbin0 -> 15453 bytes
-rw-r--r--extras/source/autotext/lang/sv/crdbus50.baubin0 -> 29241 bytes
-rw-r--r--extras/source/autotext/lang/sv/standard.baubin0 -> 38778 bytes
-rw-r--r--extras/source/autotext/lang/sv/template.baubin0 -> 45349 bytes
-rw-r--r--extras/source/autotext/lang/tr/acor_tr-TR.datbin0 -> 16444 bytes
-rw-r--r--extras/source/autotext/lang/tr/crdbus50.baubin0 -> 143872 bytes
-rw-r--r--extras/source/autotext/lang/tr/template.baubin0 -> 28672 bytes
-rw-r--r--extras/source/autotext/lang/vi/acor_vi-VN.datbin0 -> 77337 bytes
-rw-r--r--extras/source/autotext/lang/zh-CN/acor_zh-CN.datbin0 -> 14211 bytes
-rw-r--r--extras/source/autotext/lang/zh-CN/crdbus50.baubin0 -> 15356 bytes
-rw-r--r--extras/source/autotext/lang/zh-CN/standard.baubin0 -> 38238 bytes
-rw-r--r--extras/source/autotext/lang/zh-CN/template.baubin0 -> 46139 bytes
-rw-r--r--extras/source/autotext/lang/zh-TW/acor_zh-TW.datbin0 -> 14211 bytes
-rw-r--r--extras/source/autotext/lang/zh-TW/crdbus50.baubin0 -> 15481 bytes
-rw-r--r--extras/source/autotext/lang/zh-TW/standard.baubin0 -> 35426 bytes
-rw-r--r--extras/source/autotext/lang/zh-TW/template.baubin0 -> 47136 bytes
-rw-r--r--extras/source/autotext/makefile.mk53
-rw-r--r--extras/source/autotext/mytexts.baubin0 -> 567 bytes
-rw-r--r--extras/source/database/biblio.dbfbin0 -> 343909 bytes
-rw-r--r--extras/source/database/biblio.dbtbin0 -> 564226 bytes
-rw-r--r--extras/source/database/biblio.odbbin0 -> 1661 bytes
-rw-r--r--extras/source/database/delzip1
-rw-r--r--extras/source/database/makefile.mk53
-rw-r--r--extras/source/gallery/apples.gifbin0 -> 6197 bytes
-rw-r--r--extras/source/gallery/bigapple.gifbin0 -> 35287 bytes
-rw-r--r--extras/source/gallery/bullets/blkpearl.gifbin0 -> 929 bytes
-rw-r--r--extras/source/gallery/bullets/bluarrow.gifbin0 -> 93 bytes
-rw-r--r--extras/source/gallery/bullets/bluball.gifbin0 -> 103 bytes
-rw-r--r--extras/source/gallery/bullets/bludiamd.gifbin0 -> 111 bytes
-rw-r--r--extras/source/gallery/bullets/bluered.gifbin0 -> 507 bytes
-rw-r--r--extras/source/gallery/bullets/blusqare.gifbin0 -> 96 bytes
-rw-r--r--extras/source/gallery/bullets/blustar.gifbin0 -> 146 bytes
-rw-r--r--extras/source/gallery/bullets/coffee_1.gifbin0 -> 644 bytes
-rw-r--r--extras/source/gallery/bullets/coffee_2.gifbin0 -> 656 bytes
-rw-r--r--extras/source/gallery/bullets/coffee_3.gifbin0 -> 625 bytes
-rw-r--r--extras/source/gallery/bullets/coffee_4.gifbin0 -> 605 bytes
-rw-r--r--extras/source/gallery/bullets/coffee_5.gifbin0 -> 671 bytes
-rw-r--r--extras/source/gallery/bullets/con-blue.gifbin0 -> 594 bytes
-rw-r--r--extras/source/gallery/bullets/con-cyan.gifbin0 -> 614 bytes
-rw-r--r--extras/source/gallery/bullets/con-green.gifbin0 -> 393 bytes
-rw-r--r--extras/source/gallery/bullets/con-lilac.gifbin0 -> 600 bytes
-rw-r--r--extras/source/gallery/bullets/con-oran.gifbin0 -> 594 bytes
-rw-r--r--extras/source/gallery/bullets/con-pink.gifbin0 -> 394 bytes
-rw-r--r--extras/source/gallery/bullets/con-red.gifbin0 -> 388 bytes
-rw-r--r--extras/source/gallery/bullets/con-yellow.gifbin0 -> 375 bytes
-rw-r--r--extras/source/gallery/bullets/corner_1.gifbin0 -> 399 bytes
-rw-r--r--extras/source/gallery/bullets/corner_2.gifbin0 -> 399 bytes
-rw-r--r--extras/source/gallery/bullets/corner_3.gifbin0 -> 402 bytes
-rw-r--r--extras/source/gallery/bullets/corner_4.gifbin0 -> 408 bytes
-rw-r--r--extras/source/gallery/bullets/darkball.gifbin0 -> 924 bytes
-rw-r--r--extras/source/gallery/bullets/darkblue.gifbin0 -> 527 bytes
-rw-r--r--extras/source/gallery/bullets/delzip1
-rw-r--r--extras/source/gallery/bullets/gldpearl.gifbin0 -> 929 bytes
-rw-r--r--extras/source/gallery/bullets/golfball.gifbin0 -> 960 bytes
-rw-r--r--extras/source/gallery/bullets/grnarrow.gifbin0 -> 94 bytes
-rw-r--r--extras/source/gallery/bullets/grnball.gifbin0 -> 101 bytes
-rw-r--r--extras/source/gallery/bullets/grndiamd.gifbin0 -> 111 bytes
-rw-r--r--extras/source/gallery/bullets/grnpearl.gifbin0 -> 935 bytes
-rw-r--r--extras/source/gallery/bullets/grnsqare.gifbin0 -> 97 bytes
-rw-r--r--extras/source/gallery/bullets/grnstar.gifbin0 -> 144 bytes
-rw-r--r--extras/source/gallery/bullets/gryarrow.gifbin0 -> 94 bytes
-rw-r--r--extras/source/gallery/bullets/gryball.gifbin0 -> 103 bytes
-rw-r--r--extras/source/gallery/bullets/grydiamd.gifbin0 -> 113 bytes
-rw-r--r--extras/source/gallery/bullets/grysqare.gifbin0 -> 98 bytes
-rw-r--r--extras/source/gallery/bullets/grystar.gifbin0 -> 144 bytes
-rw-r--r--extras/source/gallery/bullets/makefile.mk49
-rw-r--r--extras/source/gallery/bullets/orgarrow.gifbin0 -> 96 bytes
-rw-r--r--extras/source/gallery/bullets/orgball.gifbin0 -> 104 bytes
-rw-r--r--extras/source/gallery/bullets/orgdiamd.gifbin0 -> 149 bytes
-rw-r--r--extras/source/gallery/bullets/orgsqare.gifbin0 -> 99 bytes
-rw-r--r--extras/source/gallery/bullets/orgstar.gifbin0 -> 143 bytes
-rw-r--r--extras/source/gallery/bullets/pebble_1.gifbin0 -> 434 bytes
-rw-r--r--extras/source/gallery/bullets/pebble_2.gifbin0 -> 460 bytes
-rw-r--r--extras/source/gallery/bullets/pebble_3.gifbin0 -> 463 bytes
-rw-r--r--extras/source/gallery/bullets/poliball.gifbin0 -> 945 bytes
-rw-r--r--extras/source/gallery/bullets/popcorn_1.gifbin0 -> 1005 bytes
-rw-r--r--extras/source/gallery/bullets/popcorn_2.gifbin0 -> 1249 bytes
-rw-r--r--extras/source/gallery/bullets/rainbow.gifbin0 -> 527 bytes
-rw-r--r--extras/source/gallery/bullets/redarrow.gifbin0 -> 97 bytes
-rw-r--r--extras/source/gallery/bullets/redball.gifbin0 -> 103 bytes
-rw-r--r--extras/source/gallery/bullets/reddiamd.gifbin0 -> 111 bytes
-rw-r--r--extras/source/gallery/bullets/redsqare.gifbin0 -> 97 bytes
-rw-r--r--extras/source/gallery/bullets/redstar.gifbin0 -> 145 bytes
-rw-r--r--extras/source/gallery/bullets/whtpearl.gifbin0 -> 931 bytes
-rw-r--r--extras/source/gallery/bullets/ylwarrow.gifbin0 -> 126 bytes
-rw-r--r--extras/source/gallery/bullets/ylwball.gifbin0 -> 133 bytes
-rw-r--r--extras/source/gallery/bullets/ylwdiamd.gifbin0 -> 145 bytes
-rw-r--r--extras/source/gallery/bullets/ylwsqare.gifbin0 -> 96 bytes
-rw-r--r--extras/source/gallery/bullets/ylwstar.gifbin0 -> 145 bytes
-rw-r--r--extras/source/gallery/delzip0
-rw-r--r--extras/source/gallery/flower.gifbin0 -> 6073 bytes
-rw-r--r--extras/source/gallery/flowers.gifbin0 -> 9333 bytes
-rw-r--r--extras/source/gallery/gallery_sound/delzip1
-rw-r--r--extras/source/gallery/gallery_sound/makefile.mk49
-rw-r--r--extras/source/gallery/gallery_sound/sg100.sdvbin0 -> 2048 bytes
-rw-r--r--extras/source/gallery/gallery_sound/sg100.thmbin0 -> 538 bytes
-rw-r--r--extras/source/gallery/gallery_sound/sg30.sdvbin0 -> 2048 bytes
-rw-r--r--extras/source/gallery/gallery_sound/sg30.thmbin0 -> 565 bytes
-rw-r--r--extras/source/gallery/gallery_system/delzip1
-rw-r--r--extras/source/gallery/gallery_system/makefile.mk49
-rw-r--r--extras/source/gallery/gallery_system/sg1.sdgbin0 -> 29872 bytes
-rw-r--r--extras/source/gallery/gallery_system/sg1.sdvbin0 -> 2048 bytes
-rw-r--r--extras/source/gallery/gallery_system/sg1.thmbin0 -> 2432 bytes
-rw-r--r--extras/source/gallery/gallery_system/sg2.sdgbin0 -> 25785 bytes
-rw-r--r--extras/source/gallery/gallery_system/sg2.sdvbin0 -> 2048 bytes
-rw-r--r--extras/source/gallery/gallery_system/sg2.thmbin0 -> 1266 bytes
-rw-r--r--extras/source/gallery/gallery_system/sg24.sdgbin0 -> 49161 bytes
-rw-r--r--extras/source/gallery/gallery_system/sg24.sdvbin0 -> 359424 bytes
-rw-r--r--extras/source/gallery/gallery_system/sg24.thmbin0 -> 1236 bytes
-rw-r--r--extras/source/gallery/gallery_system/sg25.sdgbin0 -> 55650 bytes
-rw-r--r--extras/source/gallery/gallery_system/sg25.sdvbin0 -> 2048 bytes
-rw-r--r--extras/source/gallery/gallery_system/sg25.thmbin0 -> 2016 bytes
-rw-r--r--extras/source/gallery/gallery_system/sg3.sdgbin0 -> 270058 bytes
-rw-r--r--extras/source/gallery/gallery_system/sg3.sdvbin0 -> 2048 bytes
-rw-r--r--extras/source/gallery/gallery_system/sg3.thmbin0 -> 2503 bytes
-rw-r--r--extras/source/gallery/gallery_system/sg36.sdgbin0 -> 65354 bytes
-rw-r--r--extras/source/gallery/gallery_system/sg36.sdvbin0 -> 589312 bytes
-rw-r--r--extras/source/gallery/gallery_system/sg36.thmbin0 -> 1163 bytes
-rw-r--r--extras/source/gallery/gallery_system/sg4.sdgbin0 -> 60533 bytes
-rw-r--r--extras/source/gallery/gallery_system/sg4.sdvbin0 -> 2048 bytes
-rw-r--r--extras/source/gallery/gallery_system/sg4.thmbin0 -> 3323 bytes
-rw-r--r--extras/source/gallery/gallery_system/sg9.sdgbin0 -> 5331 bytes
-rw-r--r--extras/source/gallery/gallery_system/sg9.sdvbin0 -> 2048 bytes
-rw-r--r--extras/source/gallery/gallery_system/sg9.thmbin0 -> 1458 bytes
-rw-r--r--extras/source/gallery/htmlexpo/bludown.gifbin0 -> 873 bytes
-rw-r--r--extras/source/gallery/htmlexpo/blufirs.gifbin0 -> 906 bytes
-rw-r--r--extras/source/gallery/htmlexpo/blufirs_.gifbin0 -> 884 bytes
-rw-r--r--extras/source/gallery/htmlexpo/blulast.gifbin0 -> 909 bytes
-rw-r--r--extras/source/gallery/htmlexpo/blulast_.gifbin0 -> 898 bytes
-rw-r--r--extras/source/gallery/htmlexpo/blunav.gifbin0 -> 1441 bytes
-rw-r--r--extras/source/gallery/htmlexpo/blunext.gifbin0 -> 886 bytes
-rw-r--r--extras/source/gallery/htmlexpo/blunext_.gifbin0 -> 841 bytes
-rw-r--r--extras/source/gallery/htmlexpo/bluprev.gifbin0 -> 893 bytes
-rw-r--r--extras/source/gallery/htmlexpo/bluprev_.gifbin0 -> 841 bytes
-rw-r--r--extras/source/gallery/htmlexpo/blutext.gifbin0 -> 1390 bytes
-rw-r--r--extras/source/gallery/htmlexpo/bluup.gifbin0 -> 874 bytes
-rw-r--r--extras/source/gallery/htmlexpo/cubdown.gifbin0 -> 1628 bytes
-rw-r--r--extras/source/gallery/htmlexpo/cubfirs.gifbin0 -> 1704 bytes
-rw-r--r--extras/source/gallery/htmlexpo/cubfirs_.gifbin0 -> 1320 bytes
-rw-r--r--extras/source/gallery/htmlexpo/cublast.gifbin0 -> 1712 bytes
-rw-r--r--extras/source/gallery/htmlexpo/cublast_.gifbin0 -> 1282 bytes
-rw-r--r--extras/source/gallery/htmlexpo/cubnav.gifbin0 -> 1719 bytes
-rw-r--r--extras/source/gallery/htmlexpo/cubnext.gifbin0 -> 1651 bytes
-rw-r--r--extras/source/gallery/htmlexpo/cubnext_.gifbin0 -> 1244 bytes
-rw-r--r--extras/source/gallery/htmlexpo/cubprev.gifbin0 -> 1648 bytes
-rw-r--r--extras/source/gallery/htmlexpo/cubprev_.gifbin0 -> 1239 bytes
-rw-r--r--extras/source/gallery/htmlexpo/cubtext.gifbin0 -> 1687 bytes
-rw-r--r--extras/source/gallery/htmlexpo/cubup.gifbin0 -> 1646 bytes
-rw-r--r--extras/source/gallery/htmlexpo/delzip1
-rw-r--r--extras/source/gallery/htmlexpo/gredown.gifbin0 -> 1360 bytes
-rw-r--r--extras/source/gallery/htmlexpo/grefirs.gifbin0 -> 1517 bytes
-rw-r--r--extras/source/gallery/htmlexpo/grefirs_.gifbin0 -> 1442 bytes
-rw-r--r--extras/source/gallery/htmlexpo/grelast.gifbin0 -> 1457 bytes
-rw-r--r--extras/source/gallery/htmlexpo/grelast_.gifbin0 -> 1290 bytes
-rw-r--r--extras/source/gallery/htmlexpo/grenav.gifbin0 -> 1582 bytes
-rw-r--r--extras/source/gallery/htmlexpo/grenext.gifbin0 -> 1372 bytes
-rw-r--r--extras/source/gallery/htmlexpo/grenext_.gifbin0 -> 1184 bytes
-rw-r--r--extras/source/gallery/htmlexpo/greprev.gifbin0 -> 1370 bytes
-rw-r--r--extras/source/gallery/htmlexpo/greprev_.gifbin0 -> 1180 bytes
-rw-r--r--extras/source/gallery/htmlexpo/gretext.gifbin0 -> 1433 bytes
-rw-r--r--extras/source/gallery/htmlexpo/greup.gifbin0 -> 1365 bytes
-rw-r--r--extras/source/gallery/htmlexpo/makefile.mk49
-rw-r--r--extras/source/gallery/htmlexpo/simdown.gifbin0 -> 439 bytes
-rw-r--r--extras/source/gallery/htmlexpo/simfirs.gifbin0 -> 477 bytes
-rw-r--r--extras/source/gallery/htmlexpo/simfirs_.gifbin0 -> 477 bytes
-rw-r--r--extras/source/gallery/htmlexpo/simlast.gifbin0 -> 483 bytes
-rw-r--r--extras/source/gallery/htmlexpo/simlast_.gifbin0 -> 624 bytes
-rw-r--r--extras/source/gallery/htmlexpo/simnav.gifbin0 -> 483 bytes
-rw-r--r--extras/source/gallery/htmlexpo/simnext.gifbin0 -> 448 bytes
-rw-r--r--extras/source/gallery/htmlexpo/simnext_.gifbin0 -> 445 bytes
-rw-r--r--extras/source/gallery/htmlexpo/simprev.gifbin0 -> 444 bytes
-rw-r--r--extras/source/gallery/htmlexpo/simprev_.gifbin0 -> 446 bytes
-rw-r--r--extras/source/gallery/htmlexpo/simtext.gifbin0 -> 646 bytes
-rw-r--r--extras/source/gallery/htmlexpo/simup.gifbin0 -> 439 bytes
-rw-r--r--extras/source/gallery/makefile.mk49
-rw-r--r--extras/source/gallery/rulers/blkballs.gifbin0 -> 2272 bytes
-rw-r--r--extras/source/gallery/rulers/blurulr1.gifbin0 -> 6583 bytes
-rw-r--r--extras/source/gallery/rulers/blurulr2.gifbin0 -> 2965 bytes
-rw-r--r--extras/source/gallery/rulers/blurulr3.gifbin0 -> 2011 bytes
-rw-r--r--extras/source/gallery/rulers/blurulr4.gifbin0 -> 2561 bytes
-rw-r--r--extras/source/gallery/rulers/blurulr5.gifbin0 -> 5708 bytes
-rw-r--r--extras/source/gallery/rulers/blurulr6.gifbin0 -> 1878 bytes
-rw-r--r--extras/source/gallery/rulers/delzip1
-rw-r--r--extras/source/gallery/rulers/gldballs.gifbin0 -> 2240 bytes
-rw-r--r--extras/source/gallery/rulers/grnballs.gifbin0 -> 3702 bytes
-rw-r--r--extras/source/gallery/rulers/grnrulr1.gifbin0 -> 2409 bytes
-rw-r--r--extras/source/gallery/rulers/grnrulr2.gifbin0 -> 2759 bytes
-rw-r--r--extras/source/gallery/rulers/grnrulr3.gifbin0 -> 2599 bytes
-rw-r--r--extras/source/gallery/rulers/grnrulr4.gifbin0 -> 3172 bytes
-rw-r--r--extras/source/gallery/rulers/gryrulr1.gifbin0 -> 2144 bytes
-rw-r--r--extras/source/gallery/rulers/gryrulr2.gifbin0 -> 3014 bytes
-rw-r--r--extras/source/gallery/rulers/gryrulr3.gifbin0 -> 1479 bytes
-rw-r--r--extras/source/gallery/rulers/makefile.mk49
-rw-r--r--extras/source/gallery/rulers/orgrulr1.gifbin0 -> 2667 bytes
-rw-r--r--extras/source/gallery/rulers/redrulr1.gifbin0 -> 2138 bytes
-rw-r--r--extras/source/gallery/rulers/redrulr2.gifbin0 -> 2037 bytes
-rw-r--r--extras/source/gallery/rulers/redrulr3.gifbin0 -> 2192 bytes
-rw-r--r--extras/source/gallery/rulers/redrulr4.gifbin0 -> 2089 bytes
-rw-r--r--extras/source/gallery/rulers/redrulr5.gifbin0 -> 1343 bytes
-rw-r--r--extras/source/gallery/rulers/striped.gifbin0 -> 1553 bytes
-rw-r--r--extras/source/gallery/rulers/whtballs.gifbin0 -> 3616 bytes
-rw-r--r--extras/source/gallery/rulers/ylwrulr1.gifbin0 -> 2667 bytes
-rw-r--r--extras/source/gallery/sky.gifbin0 -> 7517 bytes
-rw-r--r--extras/source/gallery/sounds/apert.wavbin0 -> 47760 bytes
-rw-r--r--extras/source/gallery/sounds/apert2.wavbin0 -> 60904 bytes
-rw-r--r--extras/source/gallery/sounds/applause.wavbin0 -> 90472 bytes
-rw-r--r--extras/source/gallery/sounds/beam.wavbin0 -> 43728 bytes
-rw-r--r--extras/source/gallery/sounds/beam2.wavbin0 -> 73456 bytes
-rw-r--r--extras/source/gallery/sounds/cow.wavbin0 -> 37546 bytes
-rw-r--r--extras/source/gallery/sounds/curve.wavbin0 -> 134660 bytes
-rw-r--r--extras/source/gallery/sounds/delzip1
-rw-r--r--extras/source/gallery/sounds/drama.wavbin0 -> 162366 bytes
-rw-r--r--extras/source/gallery/sounds/explos.wavbin0 -> 47532 bytes
-rw-r--r--extras/source/gallery/sounds/falling.wavbin0 -> 87008 bytes
-rw-r--r--extras/source/gallery/sounds/glasses.wavbin0 -> 36270 bytes
-rw-r--r--extras/source/gallery/sounds/gong.wavbin0 -> 191292 bytes
-rw-r--r--extras/source/gallery/sounds/horse.wavbin0 -> 41958 bytes
-rw-r--r--extras/source/gallery/sounds/kling.wavbin0 -> 46376 bytes
-rw-r--r--extras/source/gallery/sounds/kongas.wavbin0 -> 54866 bytes
-rw-r--r--extras/source/gallery/sounds/laser.wavbin0 -> 8408 bytes
-rw-r--r--extras/source/gallery/sounds/left.wavbin0 -> 29788 bytes
-rw-r--r--extras/source/gallery/sounds/makefile.mk49
-rw-r--r--extras/source/gallery/sounds/nature1.wavbin0 -> 83102 bytes
-rw-r--r--extras/source/gallery/sounds/nature2.wavbin0 -> 37164 bytes
-rw-r--r--extras/source/gallery/sounds/ok.wavbin0 -> 8862 bytes
-rw-r--r--extras/source/gallery/sounds/pluck.wavbin0 -> 28510 bytes
-rw-r--r--extras/source/gallery/sounds/roll.wavbin0 -> 242648 bytes
-rw-r--r--extras/source/gallery/sounds/romans.wavbin0 -> 90466 bytes
-rw-r--r--extras/source/gallery/sounds/soft.wavbin0 -> 185752 bytes
-rw-r--r--extras/source/gallery/sounds/space.wavbin0 -> 133758 bytes
-rw-r--r--extras/source/gallery/sounds/space2.wavbin0 -> 192686 bytes
-rw-r--r--extras/source/gallery/sounds/space3.wavbin0 -> 144748 bytes
-rw-r--r--extras/source/gallery/sounds/sparcle.wavbin0 -> 65580 bytes
-rw-r--r--extras/source/gallery/sounds/strom.wavbin0 -> 85106 bytes
-rw-r--r--extras/source/gallery/sounds/theetone.wavbin0 -> 49506 bytes
-rw-r--r--extras/source/gallery/sounds/top.wavbin0 -> 69242 bytes
-rw-r--r--extras/source/gallery/sounds/train.wavbin0 -> 56716 bytes
-rw-r--r--extras/source/gallery/sounds/untie.wavbin0 -> 190884 bytes
-rw-r--r--extras/source/gallery/sounds/ups.wavbin0 -> 28682 bytes
-rw-r--r--extras/source/gallery/sounds/wallewal.wavbin0 -> 104018 bytes
-rw-r--r--extras/source/gallery/www-back/aqua.jpgbin0 -> 5511 bytes
-rw-r--r--extras/source/gallery/www-back/bathroom.jpgbin0 -> 4473 bytes
-rw-r--r--extras/source/gallery/www-back/blocks.jpgbin0 -> 5664 bytes
-rw-r--r--extras/source/gallery/www-back/blow_green.jpgbin0 -> 3159 bytes
-rw-r--r--extras/source/gallery/www-back/blueblop.jpgbin0 -> 4469 bytes
-rw-r--r--extras/source/gallery/www-back/bulging.jpgbin0 -> 4523 bytes
-rw-r--r--extras/source/gallery/www-back/canvas_blue.jpgbin0 -> 5961 bytes
-rw-r--r--extras/source/gallery/www-back/cheese.jpgbin0 -> 3029 bytes
-rw-r--r--extras/source/gallery/www-back/chocolate.jpgbin0 -> 4316 bytes
-rw-r--r--extras/source/gallery/www-back/citrus.jpgbin0 -> 7669 bytes
-rw-r--r--extras/source/gallery/www-back/confetti.jpgbin0 -> 11733 bytes
-rw-r--r--extras/source/gallery/www-back/daisy.jpgbin0 -> 8197 bytes
-rw-r--r--extras/source/gallery/www-back/delzip1
-rw-r--r--extras/source/gallery/www-back/fluffy-grey.jpgbin0 -> 4314 bytes
-rw-r--r--extras/source/gallery/www-back/fluffy.jpgbin0 -> 6890 bytes
-rw-r--r--extras/source/gallery/www-back/fuzzy-blue.jpgbin0 -> 11472 bytes
-rw-r--r--extras/source/gallery/www-back/fuzzy-darkgrey.jpgbin0 -> 7293 bytes
-rw-r--r--extras/source/gallery/www-back/fuzzy-grey.jpgbin0 -> 6340 bytes
-rw-r--r--extras/source/gallery/www-back/fuzzy-lightgrey.jpgbin0 -> 4321 bytes
-rw-r--r--extras/source/gallery/www-back/fuzzy_light.jpgbin0 -> 4880 bytes
-rw-r--r--extras/source/gallery/www-back/gregre.gifbin0 -> 2326 bytes
-rw-r--r--extras/source/gallery/www-back/grey.gifbin0 -> 8529 bytes
-rw-r--r--extras/source/gallery/www-back/grypaws.gifbin0 -> 3537 bytes
-rw-r--r--extras/source/gallery/www-back/ice-blue.jpgbin0 -> 4675 bytes
-rw-r--r--extras/source/gallery/www-back/ice-light.jpgbin0 -> 3182 bytes
-rw-r--r--extras/source/gallery/www-back/imitation_leather.jpgbin0 -> 4207 bytes
-rw-r--r--extras/source/gallery/www-back/interstices.jpgbin0 -> 3964 bytes
-rw-r--r--extras/source/gallery/www-back/jeans.jpgbin0 -> 7002 bytes
-rw-r--r--extras/source/gallery/www-back/jeansblk.jpgbin0 -> 5436 bytes
-rw-r--r--extras/source/gallery/www-back/lawn-artificial.jpgbin0 -> 13522 bytes
-rw-r--r--extras/source/gallery/www-back/lawn.jpgbin0 -> 11635 bytes
-rw-r--r--extras/source/gallery/www-back/lightblue-wet.jpgbin0 -> 5235 bytes
-rw-r--r--extras/source/gallery/www-back/linen-fine.jpgbin0 -> 5580 bytes
-rw-r--r--extras/source/gallery/www-back/lino-green.jpgbin0 -> 6275 bytes
-rw-r--r--extras/source/gallery/www-back/liquid-blue.jpgbin0 -> 3497 bytes
-rw-r--r--extras/source/gallery/www-back/makefile.mk49
-rw-r--r--extras/source/gallery/www-back/marble.jpgbin0 -> 4161 bytes
-rw-r--r--extras/source/gallery/www-back/marble_dark.jpgbin0 -> 6805 bytes
-rw-r--r--extras/source/gallery/www-back/mazes.jpgbin0 -> 9817 bytes
-rw-r--r--extras/source/gallery/www-back/mint.gifbin0 -> 4469 bytes
-rw-r--r--extras/source/gallery/www-back/notes.gifbin0 -> 1429 bytes
-rw-r--r--extras/source/gallery/www-back/pattern.jpgbin0 -> 13299 bytes
-rw-r--r--extras/source/gallery/www-back/pebble-light.jpgbin0 -> 5816 bytes
-rw-r--r--extras/source/gallery/www-back/pink.gifbin0 -> 4687 bytes
-rw-r--r--extras/source/gallery/www-back/pool.jpgbin0 -> 6005 bytes
-rw-r--r--extras/source/gallery/www-back/popcorn.jpgbin0 -> 12694 bytes
-rw-r--r--extras/source/gallery/www-back/purple.jpgbin0 -> 4257 bytes
-rw-r--r--extras/source/gallery/www-back/reddark.jpgbin0 -> 4968 bytes
-rw-r--r--extras/source/gallery/www-back/rings-green.jpgbin0 -> 5094 bytes
-rw-r--r--extras/source/gallery/www-back/rings-orange.jpgbin0 -> 6445 bytes
-rw-r--r--extras/source/gallery/www-back/roses.jpgbin0 -> 8323 bytes
-rw-r--r--extras/source/gallery/www-back/sand-light.jpgbin0 -> 4049 bytes
-rw-r--r--extras/source/gallery/www-back/sand.jpgbin0 -> 5402 bytes
-rw-r--r--extras/source/gallery/www-back/sky.jpgbin0 -> 1969 bytes
-rw-r--r--extras/source/gallery/www-back/soft-structure_grey.jpgbin0 -> 4818 bytes
-rw-r--r--extras/source/gallery/www-back/space.jpgbin0 -> 3011 bytes
-rw-r--r--extras/source/gallery/www-back/stone-dark.jpgbin0 -> 6351 bytes
-rw-r--r--extras/source/gallery/www-back/stone.jpgbin0 -> 7011 bytes
-rw-r--r--extras/source/gallery/www-back/structure.jpgbin0 -> 3834 bytes
-rw-r--r--extras/source/gallery/www-back/structure_darkgreen.gifbin0 -> 3782 bytes
-rw-r--r--extras/source/gallery/www-back/structure_green.jpgbin0 -> 4035 bytes
-rw-r--r--extras/source/gallery/www-back/wall-grey.jpgbin0 -> 5414 bytes
-rw-r--r--extras/source/gallery/www-back/wet-turquoise.jpgbin0 -> 3119 bytes
-rw-r--r--extras/source/gallery/www-back/wood.jpgbin0 -> 10382 bytes
-rw-r--r--extras/source/gallery/www-graf/bluat.gifbin0 -> 1330 bytes
-rw-r--r--extras/source/gallery/www-graf/bluback.gifbin0 -> 1016 bytes
-rw-r--r--extras/source/gallery/www-graf/bludisk.gifbin0 -> 1016 bytes
-rw-r--r--extras/source/gallery/www-graf/bludown.gifbin0 -> 1010 bytes
-rw-r--r--extras/source/gallery/www-graf/bluhome.gifbin0 -> 1031 bytes
-rw-r--r--extras/source/gallery/www-graf/bluinfo.gifbin0 -> 1000 bytes
-rw-r--r--extras/source/gallery/www-graf/bluleft.gifbin0 -> 1017 bytes
-rw-r--r--extras/source/gallery/www-graf/blumail.gifbin0 -> 1017 bytes
-rw-r--r--extras/source/gallery/www-graf/bluminus.gifbin0 -> 989 bytes
-rw-r--r--extras/source/gallery/www-graf/bluplus.gifbin0 -> 1009 bytes
-rw-r--r--extras/source/gallery/www-graf/bluquest.gifbin0 -> 1041 bytes
-rw-r--r--extras/source/gallery/www-graf/bluright.gifbin0 -> 1020 bytes
-rw-r--r--extras/source/gallery/www-graf/bluup.gifbin0 -> 1011 bytes
-rw-r--r--extras/source/gallery/www-graf/delzip1
-rw-r--r--extras/source/gallery/www-graf/gredisk.gifbin0 -> 1016 bytes
-rw-r--r--extras/source/gallery/www-graf/gredown.gifbin0 -> 1010 bytes
-rw-r--r--extras/source/gallery/www-graf/grehome.gifbin0 -> 1031 bytes
-rw-r--r--extras/source/gallery/www-graf/greinfo.gifbin0 -> 1000 bytes
-rw-r--r--extras/source/gallery/www-graf/greleft.gifbin0 -> 1017 bytes
-rw-r--r--extras/source/gallery/www-graf/gremail.gifbin0 -> 1017 bytes
-rw-r--r--extras/source/gallery/www-graf/greminus.gifbin0 -> 989 bytes
-rw-r--r--extras/source/gallery/www-graf/greplus.gifbin0 -> 1009 bytes
-rw-r--r--extras/source/gallery/www-graf/grequest.gifbin0 -> 1041 bytes
-rw-r--r--extras/source/gallery/www-graf/greright.gifbin0 -> 1020 bytes
-rw-r--r--extras/source/gallery/www-graf/greup.gifbin0 -> 1011 bytes
-rw-r--r--extras/source/gallery/www-graf/grnat.gifbin0 -> 1264 bytes
-rw-r--r--extras/source/gallery/www-graf/grnback.gifbin0 -> 1073 bytes
-rw-r--r--extras/source/gallery/www-graf/grndisk.gifbin0 -> 1219 bytes
-rw-r--r--extras/source/gallery/www-graf/grndown.gifbin0 -> 1231 bytes
-rw-r--r--extras/source/gallery/www-graf/grnexcla.gifbin0 -> 1206 bytes
-rw-r--r--extras/source/gallery/www-graf/grnhome.gifbin0 -> 872 bytes
-rw-r--r--extras/source/gallery/www-graf/grninfo.gifbin0 -> 1200 bytes
-rw-r--r--extras/source/gallery/www-graf/grnleft.gifbin0 -> 1227 bytes
-rw-r--r--extras/source/gallery/www-graf/grnmail.gifbin0 -> 1222 bytes
-rw-r--r--extras/source/gallery/www-graf/grnminus.gifbin0 -> 1187 bytes
-rw-r--r--extras/source/gallery/www-graf/grnplus.gifbin0 -> 1204 bytes
-rw-r--r--extras/source/gallery/www-graf/grnquest.gifbin0 -> 1226 bytes
-rw-r--r--extras/source/gallery/www-graf/grnright.gifbin0 -> 1201 bytes
-rw-r--r--extras/source/gallery/www-graf/grnup.gifbin0 -> 1220 bytes
-rw-r--r--extras/source/gallery/www-graf/gryat.gifbin0 -> 1052 bytes
-rw-r--r--extras/source/gallery/www-graf/gryback.gifbin0 -> 1032 bytes
-rw-r--r--extras/source/gallery/www-graf/grydisk.gifbin0 -> 1044 bytes
-rw-r--r--extras/source/gallery/www-graf/grydown.gifbin0 -> 1022 bytes
-rw-r--r--extras/source/gallery/www-graf/gryhome.gifbin0 -> 1050 bytes
-rw-r--r--extras/source/gallery/www-graf/gryinfo.gifbin0 -> 1017 bytes
-rw-r--r--extras/source/gallery/www-graf/gryleft.gifbin0 -> 1030 bytes
-rw-r--r--extras/source/gallery/www-graf/grymail.gifbin0 -> 1036 bytes
-rw-r--r--extras/source/gallery/www-graf/gryminus.gifbin0 -> 1012 bytes
-rw-r--r--extras/source/gallery/www-graf/gryplus.gifbin0 -> 1030 bytes
-rw-r--r--extras/source/gallery/www-graf/gryquest.gifbin0 -> 1023 bytes
-rw-r--r--extras/source/gallery/www-graf/gryright.gifbin0 -> 1033 bytes
-rw-r--r--extras/source/gallery/www-graf/gryup.gifbin0 -> 1027 bytes
-rw-r--r--extras/source/gallery/www-graf/makefile.mk23
-rw-r--r--extras/source/gallery/www-graf/men@work.gifbin0 -> 1287 bytes
-rw-r--r--extras/source/gallery/www-graf/orgat.gifbin0 -> 606 bytes
-rw-r--r--extras/source/gallery/www-graf/orgback.gifbin0 -> 1259 bytes
-rw-r--r--extras/source/gallery/www-graf/orgdisk.gifbin0 -> 421 bytes
-rw-r--r--extras/source/gallery/www-graf/orgdown.gifbin0 -> 560 bytes
-rw-r--r--extras/source/gallery/www-graf/orghome.gifbin0 -> 808 bytes
-rw-r--r--extras/source/gallery/www-graf/orginfo.gifbin0 -> 341 bytes
-rw-r--r--extras/source/gallery/www-graf/orgleft.gifbin0 -> 285 bytes
-rw-r--r--extras/source/gallery/www-graf/orgmail.gifbin0 -> 517 bytes
-rw-r--r--extras/source/gallery/www-graf/orgminus.gifbin0 -> 272 bytes
-rw-r--r--extras/source/gallery/www-graf/orgplus.gifbin0 -> 289 bytes
-rw-r--r--extras/source/gallery/www-graf/orgquest.gifbin0 -> 281 bytes
-rw-r--r--extras/source/gallery/www-graf/orgright.gifbin0 -> 293 bytes
-rw-r--r--extras/source/gallery/www-graf/orgup.gifbin0 -> 1042 bytes
-rw-r--r--extras/source/gallery/www-graf/redat.gifbin0 -> 1413 bytes
-rw-r--r--extras/source/gallery/www-graf/redback.gifbin0 -> 1040 bytes
-rw-r--r--extras/source/gallery/www-graf/reddisk.gifbin0 -> 1019 bytes
-rw-r--r--extras/source/gallery/www-graf/reddown.gifbin0 -> 1015 bytes
-rw-r--r--extras/source/gallery/www-graf/redhome.gifbin0 -> 1032 bytes
-rw-r--r--extras/source/gallery/www-graf/redinfo.gifbin0 -> 1002 bytes
-rw-r--r--extras/source/gallery/www-graf/redleft.gifbin0 -> 1018 bytes
-rw-r--r--extras/source/gallery/www-graf/redmail.gifbin0 -> 1018 bytes
-rw-r--r--extras/source/gallery/www-graf/redminus.gifbin0 -> 993 bytes
-rw-r--r--extras/source/gallery/www-graf/redplus.gifbin0 -> 1015 bytes
-rw-r--r--extras/source/gallery/www-graf/redquest.gifbin0 -> 1045 bytes
-rw-r--r--extras/source/gallery/www-graf/redright.gifbin0 -> 1019 bytes
-rw-r--r--extras/source/gallery/www-graf/redup.gifbin0 -> 1015 bytes
-rw-r--r--extras/source/gallery/www-graf/turdown.gifbin0 -> 669 bytes
-rw-r--r--extras/source/gallery/www-graf/turhome.gifbin0 -> 474 bytes
-rw-r--r--extras/source/gallery/www-graf/turleft.gifbin0 -> 663 bytes
-rw-r--r--extras/source/gallery/www-graf/turright.gifbin0 -> 667 bytes
-rw-r--r--extras/source/gallery/www-graf/turup.gifbin0 -> 663 bytes
-rw-r--r--extras/source/gallery/www-graf/viohome.gifbin0 -> 249 bytes
-rw-r--r--extras/source/gallery/www-graf/violeft.gifbin0 -> 236 bytes
-rw-r--r--extras/source/gallery/www-graf/vioright.gifbin0 -> 238 bytes
-rw-r--r--extras/source/gallery/www-graf/vioup.gifbin0 -> 230 bytes
-rw-r--r--extras/source/gallery/www-graf/ylwdown.gifbin0 -> 149 bytes
-rw-r--r--extras/source/gallery/www-graf/ylwhome.gifbin0 -> 221 bytes
-rw-r--r--extras/source/gallery/www-graf/ylwleft.gifbin0 -> 177 bytes
-rw-r--r--extras/source/gallery/www-graf/ylwmail.gifbin0 -> 208 bytes
-rw-r--r--extras/source/gallery/www-graf/ylwright.gifbin0 -> 177 bytes
-rw-r--r--extras/source/gallery/www-graf/ylwup.gifbin0 -> 150 bytes
-rw-r--r--extras/source/misc_config/autotbl.fmtbin0 -> 48408 bytes
-rw-r--r--extras/source/misc_config/delzip0
-rw-r--r--extras/source/misc_config/makefile.mk49
-rwxr-xr-xextras/source/misc_config/wizard/form/styles/beige.css79
-rwxr-xr-xextras/source/misc_config/wizard/form/styles/bgr.css79
-rwxr-xr-xextras/source/misc_config/wizard/form/styles/dark.css79
-rwxr-xr-xextras/source/misc_config/wizard/form/styles/grey.css79
-rwxr-xr-xextras/source/misc_config/wizard/form/styles/ibg.css79
-rwxr-xr-xextras/source/misc_config/wizard/form/styles/ice.css79
-rwxr-xr-xextras/source/misc_config/wizard/form/styles/orange.css79
-rwxr-xr-xextras/source/misc_config/wizard/form/styles/red.css79
-rwxr-xr-xextras/source/misc_config/wizard/form/styles/violet.css79
-rwxr-xr-xextras/source/misc_config/wizard/form/styles/water.css79
-rw-r--r--extras/source/misc_config/wizard/web/images/calc.gifbin0 -> 1252 bytes
-rw-r--r--extras/source/misc_config/wizard/web/images/draw.gifbin0 -> 1386 bytes
-rw-r--r--extras/source/misc_config/wizard/web/images/fls.gifbin0 -> 1488 bytes
-rw-r--r--extras/source/misc_config/wizard/web/images/graphics.gifbin0 -> 1533 bytes
-rw-r--r--extras/source/misc_config/wizard/web/images/html.gifbin0 -> 1366 bytes
-rw-r--r--extras/source/misc_config/wizard/web/images/impress.gifbin0 -> 1311 bytes
-rw-r--r--extras/source/misc_config/wizard/web/images/media.gifbin0 -> 1407 bytes
-rw-r--r--extras/source/misc_config/wizard/web/images/other.gifbin0 -> 1356 bytes
-rw-r--r--extras/source/misc_config/wizard/web/images/pdf.gifbin0 -> 1485 bytes
-rw-r--r--extras/source/misc_config/wizard/web/images/writer.gifbin0 -> 1376 bytes
-rw-r--r--extras/source/misc_config/wizard/web/layouts/diagonal/index.html.xsl104
-rw-r--r--extras/source/misc_config/wizard/web/layouts/frame_bottom/index.html.xsl71
-rw-r--r--extras/source/misc_config/wizard/web/layouts/frame_bottom/mainframe.html7
-rw-r--r--extras/source/misc_config/wizard/web/layouts/frame_bottom/tocframe.html.xsl100
-rw-r--r--extras/source/misc_config/wizard/web/layouts/frame_left/index.html.xsl71
-rw-r--r--extras/source/misc_config/wizard/web/layouts/frame_left/mainframe.html7
-rw-r--r--extras/source/misc_config/wizard/web/layouts/frame_left/tocframe.html.xsl96
-rw-r--r--extras/source/misc_config/wizard/web/layouts/frame_right/index.html.xsl71
-rw-r--r--extras/source/misc_config/wizard/web/layouts/frame_right/mainframe.html7
-rw-r--r--extras/source/misc_config/wizard/web/layouts/frame_right/tocframe.html.xsl99
-rw-r--r--extras/source/misc_config/wizard/web/layouts/frame_top/index.html.xsl71
-rw-r--r--extras/source/misc_config/wizard/web/layouts/frame_top/mainframe.html7
-rw-r--r--extras/source/misc_config/wizard/web/layouts/frame_top/tocframe.html.xsl99
-rw-r--r--extras/source/misc_config/wizard/web/layouts/layout.xsl204
-rw-r--r--extras/source/misc_config/wizard/web/layouts/layoutF.xsl122
-rw-r--r--extras/source/misc_config/wizard/web/layouts/layoutX.xsl291
-rw-r--r--extras/source/misc_config/wizard/web/layouts/simple/index.html.xsl131
-rw-r--r--extras/source/misc_config/wizard/web/layouts/source.xml.xsl55
-rw-r--r--extras/source/misc_config/wizard/web/layouts/table_2/index.html.xsl185
-rw-r--r--extras/source/misc_config/wizard/web/layouts/table_3/index.html.xsl191
-rw-r--r--extras/source/misc_config/wizard/web/layouts/zigzag/index.html.xsl190
-rwxr-xr-xextras/source/misc_config/wizard/web/preview.html41
-rw-r--r--extras/source/misc_config/wizard/web/styles/beige.css79
-rw-r--r--extras/source/misc_config/wizard/web/styles/bg.css79
-rw-r--r--extras/source/misc_config/wizard/web/styles/bgr.css79
-rw-r--r--extras/source/misc_config/wizard/web/styles/bgrey.css79
-rw-r--r--extras/source/misc_config/wizard/web/styles/bwb.css79
-rw-r--r--extras/source/misc_config/wizard/web/styles/bwo.css79
-rw-r--r--extras/source/misc_config/wizard/web/styles/dark.css79
-rw-r--r--extras/source/misc_config/wizard/web/styles/dp.css79
-rw-r--r--extras/source/misc_config/wizard/web/styles/forest.css79
-rw-r--r--extras/source/misc_config/wizard/web/styles/green.css79
-rw-r--r--extras/source/misc_config/wizard/web/styles/greenred.css79
-rw-r--r--extras/source/misc_config/wizard/web/styles/grey.css79
-rw-r--r--extras/source/misc_config/wizard/web/styles/ibg.css79
-rw-r--r--extras/source/misc_config/wizard/web/styles/ice.css79
-rw-r--r--extras/source/misc_config/wizard/web/styles/marine.css79
-rw-r--r--extras/source/misc_config/wizard/web/styles/orange.css79
-rw-r--r--extras/source/misc_config/wizard/web/styles/pc_old.css91
-rw-r--r--extras/source/misc_config/wizard/web/styles/red.css79
-rw-r--r--extras/source/misc_config/wizard/web/styles/rgb.css91
-rw-r--r--extras/source/misc_config/wizard/web/styles/strange.css79
-rw-r--r--extras/source/misc_config/wizard/web/styles/violet.css79
-rw-r--r--extras/source/misc_config/wizard/web/styles/water.css79
-rw-r--r--extras/source/palettes/cmyk.soc220
-rw-r--r--extras/source/palettes/delzip3
-rw-r--r--extras/source/palettes/gallery.soc65
-rw-r--r--extras/source/palettes/html.soc135
-rw-r--r--extras/source/palettes/lang/bg/arrowhd_bg.soe28
-rw-r--r--extras/source/palettes/lang/bg/classic_bg.sog141
-rw-r--r--extras/source/palettes/lang/bg/hatching_bg.soh39
-rw-r--r--extras/source/palettes/lang/bg/modern_bg.sog31
-rw-r--r--extras/source/palettes/lang/bg/palette_bg.soc81
-rw-r--r--extras/source/palettes/lang/bg/styles_bg.sod10
-rw-r--r--extras/source/palettes/lang/cs/arrowhd_cs.soe28
-rw-r--r--extras/source/palettes/lang/cs/classic_cs.sog141
-rw-r--r--extras/source/palettes/lang/cs/hatching_cs.soh39
-rw-r--r--extras/source/palettes/lang/cs/modern_cs.sog31
-rw-r--r--extras/source/palettes/lang/cs/palette_cs.soc81
-rw-r--r--extras/source/palettes/lang/cs/styles_cs.sod2
-rw-r--r--extras/source/palettes/lang/da/arrowhd_da.soe26
-rw-r--r--extras/source/palettes/lang/da/classic_da.sog139
-rw-r--r--extras/source/palettes/lang/da/hatching_da.soh37
-rw-r--r--extras/source/palettes/lang/da/modern_da.sog29
-rw-r--r--extras/source/palettes/lang/da/palette_da.soc81
-rw-r--r--extras/source/palettes/lang/da/styles_da.sod8
-rw-r--r--extras/source/palettes/lang/de/arrowhd_de.soe28
-rw-r--r--extras/source/palettes/lang/de/classic_de.sog141
-rw-r--r--extras/source/palettes/lang/de/hatching_de.soh39
-rw-r--r--extras/source/palettes/lang/de/modern_de.sog31
-rw-r--r--extras/source/palettes/lang/de/palette_de.soc81
-rw-r--r--extras/source/palettes/lang/de/styles_de.sod10
-rw-r--r--extras/source/palettes/lang/delzip0
-rw-r--r--extras/source/palettes/lang/en-GB/arrowhd_en-GB.soe28
-rw-r--r--extras/source/palettes/lang/en-GB/classic_en-GB.sog141
-rw-r--r--extras/source/palettes/lang/en-GB/hatching_en-GB.soh39
-rw-r--r--extras/source/palettes/lang/en-GB/modern_en-GB.sog31
-rw-r--r--extras/source/palettes/lang/en-GB/palette_en-GB.soc81
-rw-r--r--extras/source/palettes/lang/en-GB/styles_en-GB.sod10
-rw-r--r--extras/source/palettes/lang/en-US/arrowhd_en-US.soe28
-rw-r--r--extras/source/palettes/lang/en-US/classic_en-US.sog141
-rw-r--r--extras/source/palettes/lang/en-US/hatching_en-US.soh39
-rw-r--r--extras/source/palettes/lang/en-US/modern_en-US.sog31
-rw-r--r--extras/source/palettes/lang/en-US/palette_en-US.soc81
-rw-r--r--extras/source/palettes/lang/en-US/styles_en-US.sod10
-rw-r--r--extras/source/palettes/lang/es/arrowhd_es.soe28
-rw-r--r--extras/source/palettes/lang/es/classic_es.sog141
-rw-r--r--extras/source/palettes/lang/es/hatching_es.soh39
-rw-r--r--extras/source/palettes/lang/es/modern_es.sog31
-rw-r--r--extras/source/palettes/lang/es/palette_es.soc81
-rw-r--r--extras/source/palettes/lang/es/styles_es.sod10
-rwxr-xr-xextras/source/palettes/lang/eu/arrowhd_eu.soe28
-rwxr-xr-xextras/source/palettes/lang/eu/classic_eu.sog141
-rwxr-xr-xextras/source/palettes/lang/eu/hatching_eu.soh39
-rwxr-xr-xextras/source/palettes/lang/eu/modern_eu.sog31
-rwxr-xr-xextras/source/palettes/lang/eu/palette_eu.soc81
-rwxr-xr-xextras/source/palettes/lang/eu/styles_eu.sod10
-rw-r--r--extras/source/palettes/lang/fr/arrowhd_fr.soe28
-rw-r--r--extras/source/palettes/lang/fr/classic_fr.sog141
-rw-r--r--extras/source/palettes/lang/fr/hatching_fr.soh39
-rw-r--r--extras/source/palettes/lang/fr/modern_fr.sog31
-rw-r--r--extras/source/palettes/lang/fr/palette_fr.soc81
-rw-r--r--extras/source/palettes/lang/fr/styles_fr.sod10
-rw-r--r--extras/source/palettes/lang/hu/arrowhd_hu.soe28
-rw-r--r--extras/source/palettes/lang/hu/classic_hu.sog141
-rw-r--r--extras/source/palettes/lang/hu/hatching_hu.soh39
-rw-r--r--extras/source/palettes/lang/hu/modern_hu.sog31
-rw-r--r--extras/source/palettes/lang/hu/palette_hu.soc81
-rw-r--r--extras/source/palettes/lang/hu/styles_hu.sod10
-rw-r--r--extras/source/palettes/lang/it/arrowhd_it.soe28
-rw-r--r--extras/source/palettes/lang/it/classic_it.sog141
-rw-r--r--extras/source/palettes/lang/it/hatching_it.soh39
-rw-r--r--extras/source/palettes/lang/it/modern_it.sog31
-rw-r--r--extras/source/palettes/lang/it/palette_it.soc81
-rw-r--r--extras/source/palettes/lang/it/styles_it.sod10
-rw-r--r--extras/source/palettes/lang/ja/arrowhd_ja.soe28
-rw-r--r--extras/source/palettes/lang/ja/classic_ja.sog2
-rw-r--r--extras/source/palettes/lang/ja/hatching_ja.soh39
-rw-r--r--extras/source/palettes/lang/ja/modern_ja.sog31
-rw-r--r--extras/source/palettes/lang/ja/palette_ja.soc81
-rw-r--r--extras/source/palettes/lang/ja/styles_ja.sod10
-rw-r--r--extras/source/palettes/lang/km/arrowhd_km.soe28
-rw-r--r--extras/source/palettes/lang/km/classic_km.sog141
-rw-r--r--extras/source/palettes/lang/km/hatching_km.soh39
-rw-r--r--extras/source/palettes/lang/km/modern_km.sog31
-rw-r--r--extras/source/palettes/lang/km/palette_km.soc81
-rw-r--r--extras/source/palettes/lang/km/styles_km.sod10
-rw-r--r--extras/source/palettes/lang/ko/arrowhd_ko.soe28
-rw-r--r--extras/source/palettes/lang/ko/classic_ko.sog2
-rw-r--r--extras/source/palettes/lang/ko/hatching_ko.soh39
-rw-r--r--extras/source/palettes/lang/ko/modern_ko.sog31
-rw-r--r--extras/source/palettes/lang/ko/palette_ko.soc81
-rw-r--r--extras/source/palettes/lang/ko/styles_ko.sod10
-rw-r--r--extras/source/palettes/lang/makefile.mk47
-rw-r--r--extras/source/palettes/lang/nl/arrowhd_nl.soe28
-rw-r--r--extras/source/palettes/lang/nl/classic_nl.sog141
-rw-r--r--extras/source/palettes/lang/nl/hatching_nl.soh39
-rw-r--r--extras/source/palettes/lang/nl/modern_nl.sog31
-rw-r--r--extras/source/palettes/lang/nl/palette_nl.soc81
-rw-r--r--extras/source/palettes/lang/nl/styles_nl.sod10
-rw-r--r--extras/source/palettes/lang/pl/arrowhd_pl.soebin0 -> 2846 bytes
-rw-r--r--extras/source/palettes/lang/pl/classic_pl.sogbin0 -> 9006 bytes
-rw-r--r--extras/source/palettes/lang/pl/hatching_pl.sohbin0 -> 1300 bytes
-rw-r--r--extras/source/palettes/lang/pl/modern_pl.sogbin0 -> 1598 bytes
-rw-r--r--extras/source/palettes/lang/pl/palette_pl.socbin0 -> 2078 bytes
-rw-r--r--extras/source/palettes/lang/pl/styles_pl.sodbin0 -> 278 bytes
-rw-r--r--extras/source/palettes/lang/pt-BR/arrowhd_pt-BR.soe28
-rw-r--r--extras/source/palettes/lang/pt-BR/classic_pt-BR.sog31
-rw-r--r--extras/source/palettes/lang/pt-BR/hatching_pt-BR.soh39
-rw-r--r--extras/source/palettes/lang/pt-BR/modern_pt-BR.sog31
-rw-r--r--extras/source/palettes/lang/pt-BR/palette_pt-BR.soc81
-rw-r--r--extras/source/palettes/lang/pt-BR/styles_pt-BR.sod3
-rw-r--r--extras/source/palettes/lang/pt/arrowhd_pt.soe28
-rw-r--r--extras/source/palettes/lang/pt/classic_pt.sog141
-rw-r--r--extras/source/palettes/lang/pt/hatching_pt.soh39
-rw-r--r--extras/source/palettes/lang/pt/modern_pt.sog32
-rw-r--r--extras/source/palettes/lang/pt/palette_pt.soc81
-rw-r--r--extras/source/palettes/lang/pt/styles_pt.sod11
-rw-r--r--extras/source/palettes/lang/ru/arrowhd_ru.soebin0 -> 2846 bytes
-rw-r--r--extras/source/palettes/lang/ru/classic_ru.sogbin0 -> 9006 bytes
-rw-r--r--extras/source/palettes/lang/ru/hatching_ru.sohbin0 -> 1300 bytes
-rw-r--r--extras/source/palettes/lang/ru/modern_ru.sogbin0 -> 1598 bytes
-rw-r--r--extras/source/palettes/lang/ru/palette_ru.socbin0 -> 2078 bytes
-rw-r--r--extras/source/palettes/lang/ru/styles_ru.sodbin0 -> 278 bytes
-rw-r--r--extras/source/palettes/lang/sk/arrowhd_sk.soe28
-rw-r--r--extras/source/palettes/lang/sk/classic_sk.sog141
-rw-r--r--extras/source/palettes/lang/sk/hatching_sk.soh39
-rw-r--r--extras/source/palettes/lang/sk/modern_sk.sog31
-rw-r--r--extras/source/palettes/lang/sk/palette_sk.soc81
-rw-r--r--extras/source/palettes/lang/sk/styles_sk.sod10
-rw-r--r--extras/source/palettes/lang/sl/arrowhd_sl.soe28
-rw-r--r--extras/source/palettes/lang/sl/classic_sl.sog141
-rw-r--r--extras/source/palettes/lang/sl/hatching_sl.soh39
-rw-r--r--extras/source/palettes/lang/sl/modern_sl.sog31
-rw-r--r--extras/source/palettes/lang/sl/palette_sl.soc81
-rw-r--r--extras/source/palettes/lang/sl/styles_sl.sod10
-rw-r--r--extras/source/palettes/lang/sv/arrowhd_sv.soe28
-rw-r--r--extras/source/palettes/lang/sv/classic_sv.sog141
-rw-r--r--extras/source/palettes/lang/sv/hatching_sv.soh39
-rw-r--r--extras/source/palettes/lang/sv/modern_sv.sog32
-rw-r--r--extras/source/palettes/lang/sv/palette_sv.soc81
-rw-r--r--extras/source/palettes/lang/sv/styles_sv.sod10
-rw-r--r--extras/source/palettes/lang/tr/arrowhd_tr.soe28
-rw-r--r--extras/source/palettes/lang/tr/classic_tr.sog141
-rw-r--r--extras/source/palettes/lang/tr/hatching_tr.soh39
-rw-r--r--extras/source/palettes/lang/tr/modern_tr.sog31
-rw-r--r--extras/source/palettes/lang/tr/palette_tr.soc81
-rw-r--r--extras/source/palettes/lang/tr/styles_tr.sod10
-rw-r--r--extras/source/palettes/lang/zh-CN/arrowhd_zh-CN.soe28
-rw-r--r--extras/source/palettes/lang/zh-CN/classic_zh-CN.sog2
-rw-r--r--extras/source/palettes/lang/zh-CN/hatching_zh-CN.soh39
-rw-r--r--extras/source/palettes/lang/zh-CN/modern_zh-CN.sog31
-rw-r--r--extras/source/palettes/lang/zh-CN/palette_zh-CN.soc81
-rw-r--r--extras/source/palettes/lang/zh-CN/styles_zh-CN.sod10
-rw-r--r--extras/source/palettes/lang/zh-TW/arrowhd_zh-TW.soe28
-rw-r--r--extras/source/palettes/lang/zh-TW/classic_zh-TW.sog2
-rw-r--r--extras/source/palettes/lang/zh-TW/hatching_zh-TW.soh39
-rw-r--r--extras/source/palettes/lang/zh-TW/modern_zh-TW.sog31
-rw-r--r--extras/source/palettes/lang/zh-TW/palette_zh-TW.soc81
-rw-r--r--extras/source/palettes/lang/zh-TW/styles_zh-TW.sod10
-rw-r--r--extras/source/palettes/makefile.mk51
-rw-r--r--extras/source/palettes/scribus.soc548
-rw-r--r--extras/source/palettes/standard.sobbin0 -> 155895 bytes
-rw-r--r--extras/source/palettes/standard.soc103
-rw-r--r--extras/source/palettes/standard.sod15
-rw-r--r--extras/source/palettes/standard.soe16
-rw-r--r--extras/source/palettes/standard.sog19
-rw-r--r--extras/source/palettes/standard.soh14
-rw-r--r--extras/source/palettes/web.soc236
-rw-r--r--extras/source/shellnew/soffice.html12
-rw-r--r--extras/source/shellnew/soffice.odgbin0 -> 8428 bytes
-rw-r--r--extras/source/shellnew/soffice.odpbin0 -> 9026 bytes
-rw-r--r--extras/source/shellnew/soffice.odsbin0 -> 6598 bytes
-rw-r--r--extras/source/shellnew/soffice.odtbin0 -> 7334 bytes
-rw-r--r--extras/source/symbols/delzip1
-rw-r--r--extras/source/symbols/l_2people.bmpbin0 -> 2136 bytes
-rw-r--r--extras/source/symbols/l_attention1.bmpbin0 -> 2136 bytes
-rw-r--r--extras/source/symbols/l_attention2.bmpbin0 -> 2136 bytes
-rw-r--r--extras/source/symbols/l_attention3.bmpbin0 -> 2136 bytes
-rw-r--r--extras/source/symbols/l_candy.bmpbin0 -> 2136 bytes
-rw-r--r--extras/source/symbols/l_face.bmpbin0 -> 2136 bytes
-rw-r--r--extras/source/symbols/l_flower.bmpbin0 -> 2136 bytes
-rw-r--r--extras/source/symbols/l_ghost.bmpbin0 -> 2136 bytes
-rw-r--r--extras/source/symbols/l_halloween.bmpbin0 -> 2136 bytes
-rw-r--r--extras/source/symbols/l_home.bmpbin0 -> 2136 bytes
-rw-r--r--extras/source/symbols/l_lamp.bmpbin0 -> 2136 bytes
-rw-r--r--extras/source/symbols/l_lock.bmpbin0 -> 2136 bytes
-rw-r--r--extras/source/symbols/l_page_b.bmpbin0 -> 2136 bytes
-rw-r--r--extras/source/symbols/l_page_g.bmpbin0 -> 2136 bytes
-rw-r--r--extras/source/symbols/l_page_y.bmpbin0 -> 2136 bytes
-rw-r--r--extras/source/symbols/l_people.bmpbin0 -> 2136 bytes
-rw-r--r--extras/source/symbols/l_rose.bmpbin0 -> 2136 bytes
-rw-r--r--extras/source/symbols/l_save.bmpbin0 -> 2136 bytes
-rw-r--r--extras/source/symbols/l_smiley_1.bmpbin0 -> 2136 bytes
-rw-r--r--extras/source/symbols/l_smiley_oh.bmpbin0 -> 2136 bytes
-rw-r--r--extras/source/symbols/l_smiley_sad.bmpbin0 -> 2136 bytes
-rw-r--r--extras/source/symbols/l_snow.bmpbin0 -> 2136 bytes
-rw-r--r--extras/source/symbols/l_star.bmpbin0 -> 2136 bytes
-rw-r--r--extras/source/symbols/makefile.mk51
-rw-r--r--extras/source/symbols/s_arrow-1.bmpbin0 -> 824 bytes
-rw-r--r--extras/source/symbols/s_arrow-2.bmpbin0 -> 824 bytes
-rw-r--r--extras/source/symbols/s_arrow-3.bmpbin0 -> 824 bytes
-rw-r--r--extras/source/symbols/s_arrow-4.bmpbin0 -> 824 bytes
-rw-r--r--extras/source/symbols/s_attention1.bmpbin0 -> 824 bytes
-rw-r--r--extras/source/symbols/s_attention2.bmpbin0 -> 824 bytes
-rw-r--r--extras/source/symbols/s_attention3.bmpbin0 -> 824 bytes
-rw-r--r--extras/source/symbols/s_ball-b.bmpbin0 -> 824 bytes
-rw-r--r--extras/source/symbols/s_ball-g.bmpbin0 -> 824 bytes
-rw-r--r--extras/source/symbols/s_ball-r.bmpbin0 -> 824 bytes
-rw-r--r--extras/source/symbols/s_ball.bmpbin0 -> 824 bytes
-rw-r--r--extras/source/symbols/s_bug.bmpbin0 -> 824 bytes
-rw-r--r--extras/source/symbols/s_clover.bmpbin0 -> 824 bytes
-rw-r--r--extras/source/symbols/s_egg.bmpbin0 -> 824 bytes
-rw-r--r--extras/source/symbols/s_face.bmpbin0 -> 824 bytes
-rw-r--r--extras/source/symbols/s_flower.bmpbin0 -> 344 bytes
-rw-r--r--extras/source/symbols/s_ghost.bmpbin0 -> 824 bytes
-rw-r--r--extras/source/symbols/s_group.bmpbin0 -> 824 bytes
-rw-r--r--extras/source/symbols/s_halloween.bmpbin0 -> 824 bytes
-rw-r--r--extras/source/symbols/s_heart.bmpbin0 -> 824 bytes
-rw-r--r--extras/source/symbols/s_home.bmpbin0 -> 824 bytes
-rw-r--r--extras/source/symbols/s_lock.bmpbin0 -> 824 bytes
-rw-r--r--extras/source/symbols/s_ok-g.bmpbin0 -> 824 bytes
-rw-r--r--extras/source/symbols/s_ok-r.bmpbin0 -> 824 bytes
-rw-r--r--extras/source/symbols/s_ok.bmpbin0 -> 824 bytes
-rw-r--r--extras/source/symbols/s_page_b.bmpbin0 -> 824 bytes
-rw-r--r--extras/source/symbols/s_page_g.bmpbin0 -> 824 bytes
-rw-r--r--extras/source/symbols/s_page_y.bmpbin0 -> 824 bytes
-rw-r--r--extras/source/symbols/s_pen-b.bmpbin0 -> 824 bytes
-rw-r--r--extras/source/symbols/s_pen-g.bmpbin0 -> 824 bytes
-rw-r--r--extras/source/symbols/s_pen-r.bmpbin0 -> 824 bytes
-rw-r--r--extras/source/symbols/s_people.bmpbin0 -> 824 bytes
-rw-r--r--extras/source/symbols/s_smily_1.bmpbin0 -> 824 bytes
-rw-r--r--extras/source/symbols/s_smily_oh.bmpbin0 -> 824 bytes
-rw-r--r--extras/source/symbols/s_smily_sad.bmpbin0 -> 824 bytes
-rw-r--r--extras/source/symbols/s_snow.bmpbin0 -> 824 bytes
-rw-r--r--extras/source/symbols/s_star.bmpbin0 -> 824 bytes
-rw-r--r--extras/source/symbols/s_team.bmpbin0 -> 824 bytes
-rw-r--r--extras/source/symbols/s_x-g.bmpbin0 -> 824 bytes
-rw-r--r--extras/source/symbols/s_x-r.bmpbin0 -> 824 bytes
-rw-r--r--extras/source/symbols/s_x.bmpbin0 -> 824 bytes
-rw-r--r--extras/source/templates/lang/delzip1
-rw-r--r--extras/source/templates/lang/makefile.mk49
-rw-r--r--extras/source/templates/layout/lang/bg/lyt-cool.otpbin0 -> 10997 bytes
-rw-r--r--extras/source/templates/layout/lang/bg/lyt-darkblue.otpbin0 -> 10639 bytes
-rw-r--r--extras/source/templates/layout/lang/cs/lyt-cool.otpbin0 -> 10978 bytes
-rw-r--r--extras/source/templates/layout/lang/cs/lyt-darkblue.otpbin0 -> 10725 bytes
-rw-r--r--extras/source/templates/layout/lang/da/lyt-cool.otpbin0 -> 8697 bytes
-rw-r--r--extras/source/templates/layout/lang/da/lyt-darkblue.otpbin0 -> 8699 bytes
-rw-r--r--extras/source/templates/layout/lang/de/lyt-aqua.otpbin0 -> 32080 bytes
-rw-r--r--extras/source/templates/layout/lang/de/lyt-blackandwhite.otpbin0 -> 197893 bytes
-rw-r--r--extras/source/templates/layout/lang/de/lyt-bluegrey.otpbin0 -> 292522 bytes
-rw-r--r--extras/source/templates/layout/lang/de/lyt-bluelinesgrad.otpbin0 -> 47929 bytes
-rw-r--r--extras/source/templates/layout/lang/de/lyt-bluetitledown.otpbin0 -> 75992 bytes
-rwxr-xr-xextras/source/templates/layout/lang/de/lyt-book.otpbin0 -> 1144700 bytes
-rw-r--r--extras/source/templates/layout/lang/de/lyt-brown.otpbin0 -> 59365 bytes
-rw-r--r--extras/source/templates/layout/lang/de/lyt-charglow.otpbin0 -> 85088 bytes
-rw-r--r--extras/source/templates/layout/lang/de/lyt-forest.otpbin0 -> 721934 bytes
-rwxr-xr-xextras/source/templates/layout/lang/de/lyt-frepa.otpbin0 -> 68215 bytes
-rw-r--r--extras/source/templates/layout/lang/de/lyt-glacier.otpbin0 -> 652859 bytes
-rwxr-xr-xextras/source/templates/layout/lang/de/lyt-greengradlines.otpbin0 -> 72050 bytes
-rw-r--r--extras/source/templates/layout/lang/de/lyt-keyboard.otpbin0 -> 516411 bytes
-rw-r--r--extras/source/templates/layout/lang/de/lyt-movwaves.otpbin0 -> 58336 bytes
-rw-r--r--extras/source/templates/layout/lang/de/lyt-numdark.otpbin0 -> 311234 bytes
-rw-r--r--extras/source/templates/layout/lang/de/lyt-ocean.otpbin0 -> 14038 bytes
-rwxr-xr-xextras/source/templates/layout/lang/de/lyt-organic.otpbin0 -> 64341 bytes
-rwxr-xr-xextras/source/templates/layout/lang/de/lyt-paper.otpbin0 -> 706360 bytes
-rw-r--r--extras/source/templates/layout/lang/de/lyt-rededges.otpbin0 -> 502732 bytes
-rw-r--r--extras/source/templates/layout/lang/de/lyt-roundedrect.otpbin0 -> 125420 bytes
-rw-r--r--extras/source/templates/layout/lang/de/lyt-sunrise.otpbin0 -> 115779 bytes
-rw-r--r--extras/source/templates/layout/lang/de/lyt-techpoly.otpbin0 -> 312486 bytes
-rwxr-xr-xextras/source/templates/layout/lang/de/lyt-tunnel.otpbin0 -> 52444 bytes
-rw-r--r--extras/source/templates/layout/lang/de/lyt-water.otpbin0 -> 505912 bytes
-rw-r--r--extras/source/templates/layout/lang/de/lyt-wine.otpbin0 -> 652370 bytes
-rw-r--r--extras/source/templates/layout/lang/delzip1
-rw-r--r--extras/source/templates/layout/lang/en-GB/lyt-cool.otpbin0 -> 10052 bytes
-rw-r--r--extras/source/templates/layout/lang/en-GB/lyt-darkblue.otpbin0 -> 10429 bytes
-rw-r--r--extras/source/templates/layout/lang/en-US/lyt-aqua.otpbin0 -> 32050 bytes
-rw-r--r--extras/source/templates/layout/lang/en-US/lyt-blackandwhite.otpbin0 -> 198973 bytes
-rw-r--r--extras/source/templates/layout/lang/en-US/lyt-bluegrey.otpbin0 -> 292498 bytes
-rw-r--r--extras/source/templates/layout/lang/en-US/lyt-bluelinesgrad.otpbin0 -> 47900 bytes
-rw-r--r--extras/source/templates/layout/lang/en-US/lyt-bluetitledown.otpbin0 -> 75772 bytes
-rw-r--r--extras/source/templates/layout/lang/en-US/lyt-book.otpbin0 -> 1144672 bytes
-rw-r--r--extras/source/templates/layout/lang/en-US/lyt-brown.otpbin0 -> 59337 bytes
-rw-r--r--extras/source/templates/layout/lang/en-US/lyt-charglow.otpbin0 -> 85053 bytes
-rw-r--r--extras/source/templates/layout/lang/en-US/lyt-forest.otpbin0 -> 721971 bytes
-rwxr-xr-xextras/source/templates/layout/lang/en-US/lyt-frepa.otpbin0 -> 68188 bytes
-rw-r--r--extras/source/templates/layout/lang/en-US/lyt-glacier.otpbin0 -> 654229 bytes
-rw-r--r--extras/source/templates/layout/lang/en-US/lyt-greengradlines.otpbin0 -> 71713 bytes
-rw-r--r--extras/source/templates/layout/lang/en-US/lyt-keyboard.otpbin0 -> 517689 bytes
-rwxr-xr-xextras/source/templates/layout/lang/en-US/lyt-movwaves.otpbin0 -> 56012 bytes
-rwxr-xr-xextras/source/templates/layout/lang/en-US/lyt-numdark.otpbin0 -> 327978 bytes
-rwxr-xr-xextras/source/templates/layout/lang/en-US/lyt-ocean.otpbin0 -> 14004 bytes
-rw-r--r--extras/source/templates/layout/lang/en-US/lyt-organic.otpbin0 -> 64322 bytes
-rw-r--r--extras/source/templates/layout/lang/en-US/lyt-paper.otpbin0 -> 706327 bytes
-rw-r--r--extras/source/templates/layout/lang/en-US/lyt-rededges.otpbin0 -> 502708 bytes
-rwxr-xr-xextras/source/templates/layout/lang/en-US/lyt-roundedrect.otpbin0 -> 125387 bytes
-rwxr-xr-xextras/source/templates/layout/lang/en-US/lyt-sunrise.otpbin0 -> 115754 bytes
-rwxr-xr-xextras/source/templates/layout/lang/en-US/lyt-techpoly.otpbin0 -> 312460 bytes
-rw-r--r--extras/source/templates/layout/lang/en-US/lyt-tunnel.otpbin0 -> 52416 bytes
-rw-r--r--extras/source/templates/layout/lang/en-US/lyt-water.otpbin0 -> 507283 bytes
-rw-r--r--extras/source/templates/layout/lang/en-US/lyt-wine.otpbin0 -> 652454 bytes
-rw-r--r--extras/source/templates/layout/lang/es/lyt-cool.otpbin0 -> 8464 bytes
-rw-r--r--extras/source/templates/layout/lang/es/lyt-darkblue.otpbin0 -> 8457 bytes
-rwxr-xr-xextras/source/templates/layout/lang/eu/lyt-cool.otpbin0 -> 13206 bytes
-rwxr-xr-xextras/source/templates/layout/lang/eu/lyt-darkblue.otpbin0 -> 13637 bytes
-rw-r--r--extras/source/templates/layout/lang/fr/lyt-cool.otpbin0 -> 8443 bytes
-rw-r--r--extras/source/templates/layout/lang/fr/lyt-darkblue.otpbin0 -> 8426 bytes
-rwxr-xr-xextras/source/templates/layout/lang/hu/lyt-cool.otpbin0 -> 10314 bytes
-rwxr-xr-xextras/source/templates/layout/lang/hu/lyt-darkblue.otpbin0 -> 10962 bytes
-rw-r--r--extras/source/templates/layout/lang/it/lyt-cool.otpbin0 -> 8463 bytes
-rw-r--r--extras/source/templates/layout/lang/it/lyt-darkblue.otpbin0 -> 8443 bytes
-rw-r--r--extras/source/templates/layout/lang/ja/lyt-cool.otpbin0 -> 10390 bytes
-rw-r--r--extras/source/templates/layout/lang/ja/lyt-darkblue.otpbin0 -> 10761 bytes
-rw-r--r--extras/source/templates/layout/lang/km/lyt-cool.otpbin0 -> 8957 bytes
-rw-r--r--extras/source/templates/layout/lang/km/lyt-darkblue.otpbin0 -> 8938 bytes
-rw-r--r--extras/source/templates/layout/lang/ko/lyt-cool.otpbin0 -> 9759 bytes
-rw-r--r--extras/source/templates/layout/lang/ko/lyt-darkblue.otpbin0 -> 9322 bytes
-rw-r--r--extras/source/templates/layout/lang/makefile.mk49
-rw-r--r--extras/source/templates/layout/lang/nl/lyt-cool.otpbin0 -> 10136 bytes
-rw-r--r--extras/source/templates/layout/lang/nl/lyt-darkblue.otpbin0 -> 10344 bytes
-rw-r--r--extras/source/templates/layout/lang/pl/lyt-cool.otpbin0 -> 10606 bytes
-rw-r--r--extras/source/templates/layout/lang/pl/lyt-darkblue.otpbin0 -> 10165 bytes
-rw-r--r--extras/source/templates/layout/lang/pt-BR/lyt-cool.otpbin0 -> 9249 bytes
-rw-r--r--extras/source/templates/layout/lang/pt-BR/lyt-darkblue.otpbin0 -> 9155 bytes
-rw-r--r--extras/source/templates/layout/lang/pt/lyt-cool.otpbin0 -> 12067 bytes
-rw-r--r--extras/source/templates/layout/lang/pt/lyt-darkblue.otpbin0 -> 12024 bytes
-rw-r--r--extras/source/templates/layout/lang/ru/lyt-cool.otpbin0 -> 10987 bytes
-rw-r--r--extras/source/templates/layout/lang/ru/lyt-darkblue.otpbin0 -> 11071 bytes
-rw-r--r--extras/source/templates/layout/lang/sk/lyt-cool.otpbin0 -> 9650 bytes
-rw-r--r--extras/source/templates/layout/lang/sk/lyt-darkblue.otpbin0 -> 10832 bytes
-rw-r--r--extras/source/templates/layout/lang/sl/lyt-cool.otpbin0 -> 9895 bytes
-rw-r--r--extras/source/templates/layout/lang/sl/lyt-darkblue.otpbin0 -> 9914 bytes
-rw-r--r--extras/source/templates/layout/lang/sv/lyt-cool.otpbin0 -> 8466 bytes
-rw-r--r--extras/source/templates/layout/lang/sv/lyt-darkblue.otpbin0 -> 8460 bytes
-rw-r--r--extras/source/templates/layout/lang/tr/lyt-cool.otpbin0 -> 8957 bytes
-rw-r--r--extras/source/templates/layout/lang/tr/lyt-darkblue.otpbin0 -> 8938 bytes
-rwxr-xr-xextras/source/templates/layout/lang/vi/lyt-cool.otpbin0 -> 8957 bytes
-rwxr-xr-xextras/source/templates/layout/lang/vi/lyt-darkblue.otpbin0 -> 8938 bytes
-rwxr-xr-xextras/source/templates/layout/lang/vi/lyt-darkblue_new.otpbin0 -> 16607 bytes
-rwxr-xr-xextras/source/templates/layout/lang/vi/lyt_cool_new.otpbin0 -> 16114 bytes
-rw-r--r--extras/source/templates/layout/lang/zh-CN/lyt-cool.otpbin0 -> 9439 bytes
-rw-r--r--extras/source/templates/layout/lang/zh-CN/lyt-darkblue.otpbin0 -> 9330 bytes
-rw-r--r--extras/source/templates/layout/lang/zh-TW/lyt-cool.otpbin0 -> 9837 bytes
-rw-r--r--extras/source/templates/layout/lang/zh-TW/lyt-darkblue.otpbin0 -> 9309 bytes
-rw-r--r--extras/source/templates/presnt/lang/bg/prs-novelty.otpbin0 -> 54229 bytes
-rw-r--r--extras/source/templates/presnt/lang/bg/prs-strategy.otpbin0 -> 68781 bytes
-rw-r--r--extras/source/templates/presnt/lang/cs/prs-novelty.otpbin0 -> 54784 bytes
-rw-r--r--extras/source/templates/presnt/lang/cs/prs-strategy.otpbin0 -> 69075 bytes
-rw-r--r--extras/source/templates/presnt/lang/da/prs-novelty.otpbin0 -> 25093 bytes
-rw-r--r--extras/source/templates/presnt/lang/da/prs-strategy.otpbin0 -> 66669 bytes
-rw-r--r--extras/source/templates/presnt/lang/de/prs-novelty.otpbin0 -> 25464 bytes
-rw-r--r--extras/source/templates/presnt/lang/de/prs-strategy.otpbin0 -> 66954 bytes
-rw-r--r--extras/source/templates/presnt/lang/delzip0
-rw-r--r--extras/source/templates/presnt/lang/en-GB/prs-novelty.otpbin0 -> 54731 bytes
-rw-r--r--extras/source/templates/presnt/lang/en-GB/prs-strategy.otpbin0 -> 69725 bytes
-rw-r--r--extras/source/templates/presnt/lang/en-US/prs-novelty.otpbin0 -> 25355 bytes
-rw-r--r--extras/source/templates/presnt/lang/en-US/prs-strategy.otpbin0 -> 66860 bytes
-rw-r--r--extras/source/templates/presnt/lang/es/prs-novelty.otpbin0 -> 52743 bytes
-rw-r--r--extras/source/templates/presnt/lang/es/prs-strategy.otpbin0 -> 66884 bytes
-rwxr-xr-xextras/source/templates/presnt/lang/eu/prs-novelty.otpbin0 -> 58417 bytes
-rwxr-xr-xextras/source/templates/presnt/lang/eu/prs-strategy.otpbin0 -> 70690 bytes
-rw-r--r--extras/source/templates/presnt/lang/fr/prs-novelty.otpbin0 -> 53725 bytes
-rw-r--r--extras/source/templates/presnt/lang/fr/prs-strategy.otpbin0 -> 66912 bytes
-rwxr-xr-xextras/source/templates/presnt/lang/hu/prs-novelty.otpbin0 -> 54529 bytes
-rwxr-xr-xextras/source/templates/presnt/lang/hu/prs-strategy.otpbin0 -> 68672 bytes
-rw-r--r--extras/source/templates/presnt/lang/it/prs-novelty.otpbin0 -> 52801 bytes
-rw-r--r--extras/source/templates/presnt/lang/it/prs-strategy.otpbin0 -> 66817 bytes
-rw-r--r--extras/source/templates/presnt/lang/ja/prs-novelty.otpbin0 -> 25351 bytes
-rw-r--r--extras/source/templates/presnt/lang/ja/prs-strategy.otpbin0 -> 68096 bytes
-rw-r--r--extras/source/templates/presnt/lang/km/prs-novelty.otpbin0 -> 57314 bytes
-rw-r--r--extras/source/templates/presnt/lang/km/prs-strategy.otpbin0 -> 72026 bytes
-rw-r--r--extras/source/templates/presnt/lang/ko/prs-novelty.otpbin0 -> 53586 bytes
-rw-r--r--extras/source/templates/presnt/lang/ko/prs-strategy.otpbin0 -> 67730 bytes
-rw-r--r--extras/source/templates/presnt/lang/makefile.mk49
-rw-r--r--extras/source/templates/presnt/lang/nl/prs-novelty.otpbin0 -> 54675 bytes
-rw-r--r--extras/source/templates/presnt/lang/nl/prs-strategy.otpbin0 -> 68327 bytes
-rw-r--r--extras/source/templates/presnt/lang/pl/prs-novelty.otpbin0 -> 55915 bytes
-rw-r--r--extras/source/templates/presnt/lang/pl/prs-strategy.otpbin0 -> 68238 bytes
-rw-r--r--extras/source/templates/presnt/lang/pt-BR/prs-novelty.otpbin0 -> 53726 bytes
-rw-r--r--extras/source/templates/presnt/lang/pt-BR/prs-strategy.otpbin0 -> 67814 bytes
-rw-r--r--extras/source/templates/presnt/lang/pt/prs-novelty.otpbin0 -> 55945 bytes
-rw-r--r--extras/source/templates/presnt/lang/pt/prs-strategy.otpbin0 -> 70038 bytes
-rw-r--r--extras/source/templates/presnt/lang/ru/prs-novelty.otpbin0 -> 55520 bytes
-rw-r--r--extras/source/templates/presnt/lang/ru/prs-strategy.otpbin0 -> 69043 bytes
-rw-r--r--extras/source/templates/presnt/lang/sk/prs-novelty.otpbin0 -> 13106 bytes
-rw-r--r--extras/source/templates/presnt/lang/sk/prs-strategy.otpbin0 -> 69109 bytes
-rw-r--r--extras/source/templates/presnt/lang/sl/prs-novelty.otpbin0 -> 53634 bytes
-rw-r--r--extras/source/templates/presnt/lang/sl/prs-strategy.otpbin0 -> 68143 bytes
-rw-r--r--extras/source/templates/presnt/lang/sv/prs-novelty.otpbin0 -> 52672 bytes
-rw-r--r--extras/source/templates/presnt/lang/sv/prs-strategy.otpbin0 -> 66833 bytes
-rw-r--r--extras/source/templates/presnt/lang/tr/prs-novelty.otpbin0 -> 54712 bytes
-rw-r--r--extras/source/templates/presnt/lang/tr/prs-strategy.otpbin0 -> 68733 bytes
-rwxr-xr-xextras/source/templates/presnt/lang/vi/prs-novelty.otpbin0 -> 25355 bytes
-rwxr-xr-xextras/source/templates/presnt/lang/vi/prs-novelty_new.otpbin0 -> 63417 bytes
-rwxr-xr-xextras/source/templates/presnt/lang/vi/prs-strategy.otpbin0 -> 77744 bytes
-rw-r--r--extras/source/templates/presnt/lang/zh-CN/prs-novelty.otpbin0 -> 53205 bytes
-rw-r--r--extras/source/templates/presnt/lang/zh-CN/prs-strategy.otpbin0 -> 67504 bytes
-rw-r--r--extras/source/templates/presnt/lang/zh-TW/prs-novelty.otpbin0 -> 53171 bytes
-rw-r--r--extras/source/templates/presnt/lang/zh-TW/prs-strategy.otpbin0 -> 67522 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/bg/10grey.ottbin0 -> 11474 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/bg/1simple.ottbin0 -> 11153 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/bg/2elegant.ottbin0 -> 16078 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/bg/3modern.ottbin0 -> 11655 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/bg/4classic.ottbin0 -> 11086 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/bg/5blue.ottbin0 -> 11222 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/bg/6orange.ottbin0 -> 11759 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/bg/7red.ottbin0 -> 11614 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/bg/8green.ottbin0 -> 11363 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/bg/9colorful.ottbin0 -> 11207 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/bg/aw-10grey.ottbin0 -> 11438 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/bg/aw-1simple.ottbin0 -> 11012 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/bg/aw-2elegant.ottbin0 -> 16087 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/bg/aw-3modern.ottbin0 -> 11599 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/bg/aw-4classic.ottbin0 -> 11105 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/bg/aw-5blue.ottbin0 -> 11227 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/bg/aw-6orange.ottbin0 -> 11750 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/bg/aw-7red.ottbin0 -> 11377 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/bg/aw-8green.ottbin0 -> 11362 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/bg/aw-9colorful.ottbin0 -> 11158 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/cs/10grey.ottbin0 -> 10427 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/cs/1simple.ottbin0 -> 10232 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/cs/2elegant.ottbin0 -> 14396 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/cs/3modern.ottbin0 -> 10732 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/cs/4classic.ottbin0 -> 10193 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/cs/5blue.ottbin0 -> 10238 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/cs/6orange.ottbin0 -> 10793 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/cs/7red.ottbin0 -> 10716 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/cs/8green.ottbin0 -> 10545 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/cs/9colorful.ottbin0 -> 10192 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/cs/aw-10grey.ottbin0 -> 10427 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/cs/aw-1simple.ottbin0 -> 10232 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/cs/aw-2elegant.ottbin0 -> 14396 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/cs/aw-3modern.ottbin0 -> 10732 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/cs/aw-4classic.ottbin0 -> 10193 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/cs/aw-5blue.ottbin0 -> 10238 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/cs/aw-6orange.ottbin0 -> 10793 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/cs/aw-7red.ottbin0 -> 10716 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/cs/aw-8green.ottbin0 -> 10545 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/cs/aw-9colorful.ottbin0 -> 10192 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/da/10grey.ottbin0 -> 10031 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/da/1simple.ottbin0 -> 9789 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/da/2elegant.ottbin0 -> 13979 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/da/3modern.ottbin0 -> 10306 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/da/4classic.ottbin0 -> 9776 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/da/5blue.ottbin0 -> 9854 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/da/6orange.ottbin0 -> 10329 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/da/7red.ottbin0 -> 10274 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/da/8green.ottbin0 -> 9993 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/da/9colorful.ottbin0 -> 9821 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/da/aw-10grey.ottbin0 -> 10031 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/da/aw-1simple.ottbin0 -> 9788 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/da/aw-2elegant.ottbin0 -> 13979 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/da/aw-3modern.ottbin0 -> 10306 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/da/aw-4classic.ottbin0 -> 9776 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/da/aw-5blue.ottbin0 -> 9854 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/da/aw-6orange.ottbin0 -> 10330 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/da/aw-7red.ottbin0 -> 11424 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/da/aw-8green.ottbin0 -> 9992 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/da/aw-9colorful.ottbin0 -> 9861 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/de/10grey.ottbin0 -> 10282 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/de/1simple.ottbin0 -> 10041 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/de/2elegant.ottbin0 -> 14230 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/de/3modern.ottbin0 -> 10554 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/de/4classic.ottbin0 -> 10056 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/de/5blue.ottbin0 -> 10114 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/de/6orange.ottbin0 -> 10554 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/de/7red.ottbin0 -> 10503 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/de/8green.ottbin0 -> 10238 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/de/9colorful.ottbin0 -> 10078 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/de/aw-10grey.ottbin0 -> 10282 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/de/aw-1simple.ottbin0 -> 10041 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/de/aw-2elegant.ottbin0 -> 14230 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/de/aw-3modern.ottbin0 -> 10554 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/de/aw-4classic.ottbin0 -> 10056 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/de/aw-5blue.ottbin0 -> 10114 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/de/aw-6orange.ottbin0 -> 10554 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/de/aw-7red.ottbin0 -> 10503 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/de/aw-8green.ottbin0 -> 10238 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/de/aw-9colorful.ottbin0 -> 10078 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/delzip2
-rw-r--r--extras/source/templates/wizard/agenda/lang/en-GB/10grey.ottbin0 -> 12479 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/en-GB/1simple.ottbin0 -> 12618 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/en-GB/2elegant.ottbin0 -> 17817 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/en-GB/3modern.ottbin0 -> 13030 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/en-GB/4classic.ottbin0 -> 11232 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/en-GB/5blue.ottbin0 -> 11537 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/en-GB/6orange.ottbin0 -> 12219 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/en-GB/7red.ottbin0 -> 12256 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/en-GB/8green.ottbin0 -> 11543 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/en-GB/9colorful.ottbin0 -> 11583 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/en-GB/aw-10grey.ottbin0 -> 12416 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/en-GB/aw-1simple.ottbin0 -> 12061 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/en-GB/aw-2elegant.ottbin0 -> 16831 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/en-GB/aw-3modern.ottbin0 -> 13023 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/en-GB/aw-4classic.ottbin0 -> 11787 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/en-GB/aw-5blue.ottbin0 -> 12138 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/en-GB/aw-6orange.ottbin0 -> 12773 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/en-GB/aw-7red.ottbin0 -> 12187 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/en-GB/aw-8green.ottbin0 -> 12072 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/en-GB/aw-9colorful.ottbin0 -> 12131 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/en-US/10grey.ottbin0 -> 10240 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/en-US/1simple.ottbin0 -> 10009 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/en-US/2elegant.ottbin0 -> 14214 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/en-US/3modern.ottbin0 -> 10529 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/en-US/4classic.ottbin0 -> 10011 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/en-US/5blue.ottbin0 -> 10088 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/en-US/6orange.ottbin0 -> 10529 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/en-US/7red.ottbin0 -> 10493 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/en-US/8green.ottbin0 -> 10202 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/en-US/9colorful.ottbin0 -> 10047 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/en-US/aw-10grey.ottbin0 -> 10240 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/en-US/aw-1simple.ottbin0 -> 10009 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/en-US/aw-2elegant.ottbin0 -> 14215 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/en-US/aw-3modern.ottbin0 -> 10529 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/en-US/aw-4classic.ottbin0 -> 10011 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/en-US/aw-5blue.ottbin0 -> 10087 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/en-US/aw-6orange.ottbin0 -> 10530 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/en-US/aw-7red.ottbin0 -> 12159 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/en-US/aw-8green.ottbin0 -> 10202 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/en-US/aw-9colorful.ottbin0 -> 10087 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/es/10grey.ottbin0 -> 10132 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/es/1simple.ottbin0 -> 10132 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/es/2elegant.ottbin0 -> 11890 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/es/3modern.ottbin0 -> 10348 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/es/4classic.ottbin0 -> 9747 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/es/5blue.ottbin0 -> 9809 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/es/6orange.ottbin0 -> 10466 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/es/7red.ottbin0 -> 10515 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/es/8green.ottbin0 -> 10058 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/es/9colorful.ottbin0 -> 9853 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/es/aw-10grey.ottbin0 -> 10132 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/es/aw-1simple.ottbin0 -> 9829 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/es/aw-2elegant.ottbin0 -> 11890 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/es/aw-3modern.ottbin0 -> 10701 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/es/aw-4classic.ottbin0 -> 9747 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/es/aw-5blue.ottbin0 -> 9809 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/es/aw-6orange.ottbin0 -> 10466 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/es/aw-7red.ottbin0 -> 10132 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/es/aw-8green.ottbin0 -> 10058 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/es/aw-9colorful.ottbin0 -> 9853 bytes
-rwxr-xr-xextras/source/templates/wizard/agenda/lang/eu/10grey.ottbin0 -> 14000 bytes
-rwxr-xr-xextras/source/templates/wizard/agenda/lang/eu/1simple.ottbin0 -> 13888 bytes
-rwxr-xr-xextras/source/templates/wizard/agenda/lang/eu/2elegant.ottbin0 -> 19679 bytes
-rwxr-xr-xextras/source/templates/wizard/agenda/lang/eu/3modern.ottbin0 -> 14841 bytes
-rwxr-xr-xextras/source/templates/wizard/agenda/lang/eu/4classic.ottbin0 -> 13315 bytes
-rwxr-xr-xextras/source/templates/wizard/agenda/lang/eu/5blue.ottbin0 -> 13192 bytes
-rwxr-xr-xextras/source/templates/wizard/agenda/lang/eu/6orange.ottbin0 -> 13903 bytes
-rwxr-xr-xextras/source/templates/wizard/agenda/lang/eu/7red.ottbin0 -> 13847 bytes
-rwxr-xr-xextras/source/templates/wizard/agenda/lang/eu/8green.ottbin0 -> 13568 bytes
-rwxr-xr-xextras/source/templates/wizard/agenda/lang/eu/9colorful.ottbin0 -> 13214 bytes
-rwxr-xr-xextras/source/templates/wizard/agenda/lang/eu/aw-10grey.ottbin0 -> 13957 bytes
-rwxr-xr-xextras/source/templates/wizard/agenda/lang/eu/aw-1simple.ottbin0 -> 14397 bytes
-rwxr-xr-xextras/source/templates/wizard/agenda/lang/eu/aw-2elegant.ottbin0 -> 18599 bytes
-rwxr-xr-xextras/source/templates/wizard/agenda/lang/eu/aw-3modern.ottbin0 -> 14874 bytes
-rwxr-xr-xextras/source/templates/wizard/agenda/lang/eu/aw-4classic.ottbin0 -> 13876 bytes
-rwxr-xr-xextras/source/templates/wizard/agenda/lang/eu/aw-5blue.ottbin0 -> 13765 bytes
-rwxr-xr-xextras/source/templates/wizard/agenda/lang/eu/aw-6orange.ottbin0 -> 14456 bytes
-rwxr-xr-xextras/source/templates/wizard/agenda/lang/eu/aw-7red.ottbin0 -> 14196 bytes
-rwxr-xr-xextras/source/templates/wizard/agenda/lang/eu/aw-8green.ottbin0 -> 14087 bytes
-rwxr-xr-xextras/source/templates/wizard/agenda/lang/eu/aw-9colorful.ottbin0 -> 13735 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/fr/10grey.ottbin0 -> 10184 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/fr/1simple.ottbin0 -> 9834 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/fr/2elegant.ottbin0 -> 11884 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/fr/3modern.ottbin0 -> 10422 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/fr/4classic.ottbin0 -> 9807 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/fr/5blue.ottbin0 -> 9873 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/fr/6orange.ottbin0 -> 10435 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/fr/7red.ottbin0 -> 10170 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/fr/8green.ottbin0 -> 10129 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/fr/9colorful.ottbin0 -> 9923 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/fr/aw-10grey.ottbin0 -> 10184 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/fr/aw-1simple.ottbin0 -> 9832 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/fr/aw-2elegant.ottbin0 -> 11884 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/fr/aw-3modern.ottbin0 -> 10422 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/fr/aw-4classic.ottbin0 -> 9807 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/fr/aw-5blue.ottbin0 -> 9873 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/fr/aw-6orange.ottbin0 -> 10435 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/fr/aw-7red.ottbin0 -> 10170 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/fr/aw-8green.ottbin0 -> 10129 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/fr/aw-9colorful.ottbin0 -> 9923 bytes
-rwxr-xr-xextras/source/templates/wizard/agenda/lang/hu/10grey.ottbin0 -> 12232 bytes
-rwxr-xr-xextras/source/templates/wizard/agenda/lang/hu/1simple.ottbin0 -> 11858 bytes
-rwxr-xr-xextras/source/templates/wizard/agenda/lang/hu/2elegant.ottbin0 -> 16589 bytes
-rwxr-xr-xextras/source/templates/wizard/agenda/lang/hu/3modern.ottbin0 -> 12428 bytes
-rwxr-xr-xextras/source/templates/wizard/agenda/lang/hu/4classic.ottbin0 -> 11631 bytes
-rwxr-xr-xextras/source/templates/wizard/agenda/lang/hu/5blue.ottbin0 -> 11964 bytes
-rwxr-xr-xextras/source/templates/wizard/agenda/lang/hu/6orange.ottbin0 -> 12340 bytes
-rwxr-xr-xextras/source/templates/wizard/agenda/lang/hu/7red.ottbin0 -> 12390 bytes
-rwxr-xr-xextras/source/templates/wizard/agenda/lang/hu/8green.ottbin0 -> 11918 bytes
-rwxr-xr-xextras/source/templates/wizard/agenda/lang/hu/9colorful.ottbin0 -> 11942 bytes
-rwxr-xr-xextras/source/templates/wizard/agenda/lang/hu/aw-10grey.ottbin0 -> 12232 bytes
-rwxr-xr-xextras/source/templates/wizard/agenda/lang/hu/aw-1simple.ottbin0 -> 11858 bytes
-rwxr-xr-xextras/source/templates/wizard/agenda/lang/hu/aw-2elegant.ottbin0 -> 16589 bytes
-rwxr-xr-xextras/source/templates/wizard/agenda/lang/hu/aw-3modern.ottbin0 -> 12428 bytes
-rwxr-xr-xextras/source/templates/wizard/agenda/lang/hu/aw-4classic.ottbin0 -> 11631 bytes
-rwxr-xr-xextras/source/templates/wizard/agenda/lang/hu/aw-5blue.ottbin0 -> 11964 bytes
-rwxr-xr-xextras/source/templates/wizard/agenda/lang/hu/aw-6orange.ottbin0 -> 12340 bytes
-rwxr-xr-xextras/source/templates/wizard/agenda/lang/hu/aw-7red.ottbin0 -> 12390 bytes
-rwxr-xr-xextras/source/templates/wizard/agenda/lang/hu/aw-8green.ottbin0 -> 11918 bytes
-rwxr-xr-xextras/source/templates/wizard/agenda/lang/hu/aw-9colorful.ottbin0 -> 11942 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/it/10grey.ottbin0 -> 10174 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/it/1simple.ottbin0 -> 9822 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/it/2elegant.ottbin0 -> 11869 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/it/3modern.ottbin0 -> 10363 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/it/4classic.ottbin0 -> 9739 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/it/5blue.ottbin0 -> 9814 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/it/6orange.ottbin0 -> 10441 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/it/7red.ottbin0 -> 10155 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/it/8green.ottbin0 -> 10089 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/it/9colorful.ottbin0 -> 9851 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/it/aw-10grey.ottbin0 -> 10174 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/it/aw-1simple.ottbin0 -> 9822 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/it/aw-2elegant.ottbin0 -> 11869 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/it/aw-3modern.ottbin0 -> 10363 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/it/aw-4classic.ottbin0 -> 9739 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/it/aw-5blue.ottbin0 -> 9814 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/it/aw-6orange.ottbin0 -> 10441 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/it/aw-7red.ottbin0 -> 10684 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/it/aw-8green.ottbin0 -> 10089 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/it/aw-9colorful.ottbin0 -> 9851 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/ja/10grey.ottbin0 -> 12733 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/ja/1simple.ottbin0 -> 12404 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/ja/2elegant.ottbin0 -> 14509 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/ja/3modern.ottbin0 -> 12961 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/ja/4classic.ottbin0 -> 12350 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/ja/5blue.ottbin0 -> 12366 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/ja/6orange.ottbin0 -> 13043 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/ja/7red.ottbin0 -> 12805 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/ja/8green.ottbin0 -> 12665 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/ja/9colorful.ottbin0 -> 12428 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/ja/aw-10grey.ottbin0 -> 12733 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/ja/aw-1simple.ottbin0 -> 12404 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/ja/aw-2elegant.ottbin0 -> 14509 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/ja/aw-3modern.ottbin0 -> 12961 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/ja/aw-4classic.ottbin0 -> 12350 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/ja/aw-5blue.ottbin0 -> 12366 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/ja/aw-6orange.ottbin0 -> 13043 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/ja/aw-7red.ottbin0 -> 12805 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/ja/aw-8green.ottbin0 -> 12665 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/ja/aw-9colorful.ottbin0 -> 12428 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/km/10grey.ottbin0 -> 12935 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/km/1simple.ottbin0 -> 12448 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/km/2elegant.ottbin0 -> 17523 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/km/3modern.ottbin0 -> 13146 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/km/4classic.ottbin0 -> 12522 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/km/5blue.ottbin0 -> 12777 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/km/6orange.ottbin0 -> 13284 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/km/7red.ottbin0 -> 13099 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/km/8green.ottbin0 -> 12964 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/km/9colorful.ottbin0 -> 12807 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/km/aw-10grey.ottbin0 -> 12927 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/km/aw-1simple.ottbin0 -> 12470 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/km/aw-2elegant.ottbin0 -> 17599 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/km/aw-3modern.ottbin0 -> 13225 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/km/aw-4classic.ottbin0 -> 12542 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/km/aw-5blue.ottbin0 -> 12816 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/km/aw-6orange.ottbin0 -> 13351 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/km/aw-7red.ottbin0 -> 12882 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/km/aw-8green.ottbin0 -> 12888 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/km/aw-9colorful.ottbin0 -> 12863 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/ko/10grey.ottbin0 -> 12702 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/ko/1simple.ottbin0 -> 12363 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/ko/2elegant.ottbin0 -> 14482 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/ko/3modern.ottbin0 -> 12951 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/ko/4classic.ottbin0 -> 12294 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/ko/5blue.ottbin0 -> 12362 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/ko/6orange.ottbin0 -> 13035 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/ko/7red.ottbin0 -> 10823 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/ko/8green.ottbin0 -> 12654 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/ko/9colorful.ottbin0 -> 12381 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/ko/aw-10grey.ottbin0 -> 12702 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/ko/aw-1simple.ottbin0 -> 12363 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/ko/aw-2elegant.ottbin0 -> 14482 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/ko/aw-3modern.ottbin0 -> 13538 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/ko/aw-4classic.ottbin0 -> 10263 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/ko/aw-5blue.ottbin0 -> 12362 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/ko/aw-6orange.ottbin0 -> 13035 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/ko/aw-7red.ottbin0 -> 12714 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/ko/aw-8green.ottbin0 -> 12654 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/ko/aw-9colorful.ottbin0 -> 12381 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/makefile.mk47
-rw-r--r--extras/source/templates/wizard/agenda/lang/nl/10grey.ottbin0 -> 12008 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/nl/1simple.ottbin0 -> 11796 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/nl/2elegant.ottbin0 -> 16528 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/nl/3modern.ottbin0 -> 12231 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/nl/4classic.ottbin0 -> 11684 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/nl/5blue.ottbin0 -> 11856 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/nl/6orange.ottbin0 -> 12263 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/nl/7red.ottbin0 -> 12230 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/nl/8green.ottbin0 -> 11827 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/nl/9colorful.ottbin0 -> 11872 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/nl/aw-10grey.ottbin0 -> 12008 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/nl/aw-1simple.ottbin0 -> 11796 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/nl/aw-2elegant.ottbin0 -> 16528 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/nl/aw-3modern.ottbin0 -> 12261 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/nl/aw-4classic.ottbin0 -> 11684 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/nl/aw-5blue.ottbin0 -> 11856 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/nl/aw-6orange.ottbin0 -> 12263 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/nl/aw-7red.ottbin0 -> 12260 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/nl/aw-8green.ottbin0 -> 11857 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/nl/aw-9colorful.ottbin0 -> 11872 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/pl/10grey.ottbin0 -> 11315 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/pl/1simple.ottbin0 -> 12791 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/pl/2elegant.ottbin0 -> 17591 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/pl/3modern.ottbin0 -> 11235 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/pl/4classic.ottbin0 -> 12694 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/pl/5blue.ottbin0 -> 12784 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/pl/6orange.ottbin0 -> 13261 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/pl/7red.ottbin0 -> 11278 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/pl/8green.ottbin0 -> 11109 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/pl/9colorful.ottbin0 -> 12881 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/pl/aw-10grey.ottbin0 -> 13107 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/pl/aw-1simple.ottbin0 -> 12806 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/pl/aw-2elegant.ottbin0 -> 17608 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/pl/aw-3modern.ottbin0 -> 13273 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/pl/aw-4classic.ottbin0 -> 12709 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/pl/aw-5blue.ottbin0 -> 12799 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/pl/aw-6orange.ottbin0 -> 13276 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/pl/aw-7red.ottbin0 -> 13225 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/pl/aw-8green.ottbin0 -> 12840 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/pl/aw-9colorful.ottbin0 -> 12896 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/pt-BR/10grey.ottbin0 -> 10175 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/pt-BR/1simple.ottbin0 -> 9833 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/pt-BR/2elegant.ottbin0 -> 11890 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/pt-BR/3modern.ottbin0 -> 10395 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/pt-BR/4classic.ottbin0 -> 9767 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/pt-BR/5blue.ottbin0 -> 9855 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/pt-BR/6orange.ottbin0 -> 10467 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/pt-BR/7red.ottbin0 -> 10167 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/pt-BR/8green.ottbin0 -> 10009 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/pt-BR/9colorful.ottbin0 -> 9892 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/pt-BR/aw-10grey.ottbin0 -> 10175 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/pt-BR/aw-1simple.ottbin0 -> 9833 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/pt-BR/aw-2elegant.ottbin0 -> 11890 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/pt-BR/aw-3modern.ottbin0 -> 10395 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/pt-BR/aw-4classic.ottbin0 -> 9767 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/pt-BR/aw-5blue.ottbin0 -> 9855 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/pt-BR/aw-6orange.ottbin0 -> 10467 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/pt-BR/aw-7red.ottbin0 -> 10167 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/pt-BR/aw-8green.ottbin0 -> 10009 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/pt-BR/aw-9colorful.ottbin0 -> 9892 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/pt/10grey.ottbin0 -> 12846 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/pt/1simple.ottbin0 -> 12739 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/pt/2elegant.ottbin0 -> 17215 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/pt/3modern.ottbin0 -> 13615 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/pt/4classic.ottbin0 -> 12486 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/pt/5blue.ottbin0 -> 12539 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/pt/6orange.ottbin0 -> 13032 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/pt/7red.ottbin0 -> 12998 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/pt/8green.ottbin0 -> 12685 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/pt/9colorful.ottbin0 -> 12670 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/pt/aw-10grey.ottbin0 -> 12846 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/pt/aw-1simple.ottbin0 -> 12743 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/pt/aw-2elegant.ottbin0 -> 17203 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/pt/aw-3modern.ottbin0 -> 13614 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/pt/aw-4classic.ottbin0 -> 12485 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/pt/aw-5blue.ottbin0 -> 12539 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/pt/aw-6orange.ottbin0 -> 13032 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/pt/aw-7red.ottbin0 -> 12999 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/pt/aw-8green.ottbin0 -> 12694 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/pt/aw-9colorful.ottbin0 -> 12671 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/ru/10grey.ottbin0 -> 12347 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/ru/1simple.ottbin0 -> 12120 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/ru/2elegant.ottbin0 -> 16668 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/ru/3modern.ottbin0 -> 13134 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/ru/4classic.ottbin0 -> 11954 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/ru/5blue.ottbin0 -> 12066 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/ru/6orange.ottbin0 -> 12519 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/ru/7red.ottbin0 -> 12502 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/ru/8green.ottbin0 -> 12152 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/ru/9colorful.ottbin0 -> 12217 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/ru/aw-10grey.ottbin0 -> 12347 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/ru/aw-1simple.ottbin0 -> 12120 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/ru/aw-2elegant.ottbin0 -> 16670 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/ru/aw-3modern.ottbin0 -> 13135 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/ru/aw-4classic.ottbin0 -> 11954 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/ru/aw-5blue.ottbin0 -> 12066 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/ru/aw-6orange.ottbin0 -> 12519 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/ru/aw-7red.ottbin0 -> 12501 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/ru/aw-8green.ottbin0 -> 12152 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/ru/aw-9colorful.ottbin0 -> 11078 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/sk/10grey.ottbin0 -> 11317 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/sk/1simple.ottbin0 -> 11090 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/sk/2elegant.ottbin0 -> 15913 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/sk/3modern.ottbin0 -> 11699 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/sk/4classic.ottbin0 -> 11077 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/sk/5blue.ottbin0 -> 11138 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/sk/6orange.ottbin0 -> 11662 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/sk/7red.ottbin0 -> 11532 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/sk/8green.ottbin0 -> 11419 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/sk/9colorful.ottbin0 -> 11090 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/sk/aw-10grey.ottbin0 -> 11395 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/sk/aw-1simple.ottbin0 -> 11123 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/sk/aw-2elegant.ottbin0 -> 15917 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/sk/aw-3modern.ottbin0 -> 11704 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/sk/aw-4classic.ottbin0 -> 11075 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/sk/aw-5blue.ottbin0 -> 11142 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/sk/aw-6orange.ottbin0 -> 11662 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/sk/aw-7red.ottbin0 -> 11532 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/sk/aw-8green.ottbin0 -> 11419 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/sk/aw-9colorful.ottbin0 -> 11090 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/sl/10grey.ottbin0 -> 10976 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/sl/1simple.ottbin0 -> 10450 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/sl/2elegant.ottbin0 -> 15402 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/sl/3modern.ottbin0 -> 11342 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/sl/4classic.ottbin0 -> 10612 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/sl/5blue.ottbin0 -> 10752 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/sl/6orange.ottbin0 -> 11226 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/sl/7red.ottbin0 -> 11158 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/sl/8green.ottbin0 -> 10914 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/sl/9colorful.ottbin0 -> 10717 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/sl/aw-10grey.ottbin0 -> 10946 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/sl/aw-1simple.ottbin0 -> 10616 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/sl/aw-2elegant.ottbin0 -> 15434 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/sl/aw-3modern.ottbin0 -> 11408 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/sl/aw-4classic.ottbin0 -> 10604 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/sl/aw-5blue.ottbin0 -> 10731 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/sl/aw-6orange.ottbin0 -> 11286 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/sl/aw-7red.ottbin0 -> 11003 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/sl/aw-8green.ottbin0 -> 11001 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/sl/aw-9colorful.ottbin0 -> 10737 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/sv/10grey.ottbin0 -> 10138 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/sv/1simple.ottbin0 -> 9812 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/sv/2elegant.ottbin0 -> 11839 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/sv/3modern.ottbin0 -> 10410 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/sv/4classic.ottbin0 -> 9722 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/sv/5blue.ottbin0 -> 9798 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/sv/6orange.ottbin0 -> 10389 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/sv/7red.ottbin0 -> 10179 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/sv/8green.ottbin0 -> 10103 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/sv/9colorful.ottbin0 -> 9824 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/sv/aw-10grey.ottbin0 -> 10138 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/sv/aw-1simple.ottbin0 -> 9812 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/sv/aw-2elegant.ottbin0 -> 11839 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/sv/aw-3modern.ottbin0 -> 10410 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/sv/aw-4classic.ottbin0 -> 9722 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/sv/aw-5blue.ottbin0 -> 9798 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/sv/aw-6orange.ottbin0 -> 10389 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/sv/aw-7red.ottbin0 -> 10179 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/sv/aw-8green.ottbin0 -> 10103 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/sv/aw-9colorful.ottbin0 -> 9824 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/tr/10grey.ottbin0 -> 12001 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/tr/1simple.ottbin0 -> 11939 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/tr/2elegant.ottbin0 -> 16514 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/tr/3modern.ottbin0 -> 12223 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/tr/4classic.ottbin0 -> 11486 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/tr/5blue.ottbin0 -> 11803 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/tr/6orange.ottbin0 -> 12242 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/tr/7red.ottbin0 -> 12294 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/tr/8green.ottbin0 -> 11770 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/tr/9colorful.ottbin0 -> 11806 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/tr/aw-10grey.ottbin0 -> 11998 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/tr/aw-1simple.ottbin0 -> 11748 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/tr/aw-2elegant.ottbin0 -> 16475 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/tr/aw-3modern.ottbin0 -> 12220 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/tr/aw-4classic.ottbin0 -> 11481 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/tr/aw-5blue.ottbin0 -> 11883 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/tr/aw-6orange.ottbin0 -> 12242 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/tr/aw-7red.ottbin0 -> 11772 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/tr/aw-8green.ottbin0 -> 11772 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/tr/aw-9colorful.ottbin0 -> 11853 bytes
-rwxr-xr-xextras/source/templates/wizard/agenda/lang/vi/10grey.ottbin0 -> 12525 bytes
-rwxr-xr-xextras/source/templates/wizard/agenda/lang/vi/1simple.ottbin0 -> 12597 bytes
-rwxr-xr-xextras/source/templates/wizard/agenda/lang/vi/2elegant.ottbin0 -> 17620 bytes
-rwxr-xr-xextras/source/templates/wizard/agenda/lang/vi/3modern.ottbin0 -> 12895 bytes
-rwxr-xr-xextras/source/templates/wizard/agenda/lang/vi/4classic.ottbin0 -> 12431 bytes
-rwxr-xr-xextras/source/templates/wizard/agenda/lang/vi/5blue.ottbin0 -> 12364 bytes
-rwxr-xr-xextras/source/templates/wizard/agenda/lang/vi/6orange.ottbin0 -> 12871 bytes
-rwxr-xr-xextras/source/templates/wizard/agenda/lang/vi/7red.ottbin0 -> 12743 bytes
-rwxr-xr-xextras/source/templates/wizard/agenda/lang/vi/8green.ottbin0 -> 12661 bytes
-rwxr-xr-xextras/source/templates/wizard/agenda/lang/vi/9colorful.ottbin0 -> 12297 bytes
-rwxr-xr-xextras/source/templates/wizard/agenda/lang/vi/aw-10grey.ottbin0 -> 12642 bytes
-rwxr-xr-xextras/source/templates/wizard/agenda/lang/vi/aw-1simple.ottbin0 -> 12743 bytes
-rwxr-xr-xextras/source/templates/wizard/agenda/lang/vi/aw-2elegant.ottbin0 -> 17682 bytes
-rwxr-xr-xextras/source/templates/wizard/agenda/lang/vi/aw-3modern.ottbin0 -> 13049 bytes
-rwxr-xr-xextras/source/templates/wizard/agenda/lang/vi/aw-4classic.ottbin0 -> 12502 bytes
-rwxr-xr-xextras/source/templates/wizard/agenda/lang/vi/aw-5blue.ottbin0 -> 12412 bytes
-rwxr-xr-xextras/source/templates/wizard/agenda/lang/vi/aw-6orange.ottbin0 -> 12893 bytes
-rwxr-xr-xextras/source/templates/wizard/agenda/lang/vi/aw-7red.ottbin0 -> 12858 bytes
-rwxr-xr-xextras/source/templates/wizard/agenda/lang/vi/aw-8green.ottbin0 -> 12745 bytes
-rwxr-xr-xextras/source/templates/wizard/agenda/lang/vi/aw-9colorful.ottbin0 -> 12315 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/zh-CN/10grey.ottbin0 -> 12735 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/zh-CN/1simple.ottbin0 -> 12394 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/zh-CN/2elegant.ottbin0 -> 16460 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/zh-CN/3modern.ottbin0 -> 12957 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/zh-CN/4classic.ottbin0 -> 12316 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/zh-CN/5blue.ottbin0 -> 12372 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/zh-CN/6orange.ottbin0 -> 13030 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/zh-CN/7red.ottbin0 -> 12780 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/zh-CN/8green.ottbin0 -> 12679 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/zh-CN/9colorful.ottbin0 -> 12406 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/zh-CN/aw-10grey.ottbin0 -> 12735 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/zh-CN/aw-1simple.ottbin0 -> 12394 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/zh-CN/aw-2elegant.ottbin0 -> 16534 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/zh-CN/aw-3modern.ottbin0 -> 12957 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/zh-CN/aw-4classic.ottbin0 -> 12316 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/zh-CN/aw-5blue.ottbin0 -> 12372 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/zh-CN/aw-6orange.ottbin0 -> 13030 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/zh-CN/aw-7red.ottbin0 -> 12780 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/zh-CN/aw-8green.ottbin0 -> 12679 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/zh-CN/aw-9colorful.ottbin0 -> 12406 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/zh-TW/10grey.ottbin0 -> 12720 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/zh-TW/1simple.ottbin0 -> 12380 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/zh-TW/2elegant.ottbin0 -> 16478 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/zh-TW/3modern.ottbin0 -> 12970 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/zh-TW/4classic.ottbin0 -> 12314 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/zh-TW/5blue.ottbin0 -> 12372 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/zh-TW/6orange.ottbin0 -> 13057 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/zh-TW/7red.ottbin0 -> 12743 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/zh-TW/8green.ottbin0 -> 12691 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/zh-TW/9colorful.ottbin0 -> 12408 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/zh-TW/aw-10grey.ottbin0 -> 12720 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/zh-TW/aw-1simple.ottbin0 -> 12380 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/zh-TW/aw-2elegant.ottbin0 -> 16559 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/zh-TW/aw-3modern.ottbin0 -> 12970 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/zh-TW/aw-4classic.ottbin0 -> 12314 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/zh-TW/aw-5blue.ottbin0 -> 12372 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/zh-TW/aw-6orange.ottbin0 -> 13057 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/zh-TW/aw-7red.ottbin0 -> 12743 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/zh-TW/aw-8green.ottbin0 -> 12691 bytes
-rw-r--r--extras/source/templates/wizard/agenda/lang/zh-TW/aw-9colorful.ottbin0 -> 12408 bytes
-rw-r--r--extras/source/templates/wizard/bitmap/Import_1.bmpbin0 -> 66480 bytes
-rw-r--r--extras/source/templates/wizard/bitmap/Import_3.bmpbin0 -> 66480 bytes
-rw-r--r--extras/source/templates/wizard/bitmap/Import_4.bmpbin0 -> 66480 bytes
-rw-r--r--extras/source/templates/wizard/bitmap/MS-Import_2-1.bmpbin0 -> 66480 bytes
-rw-r--r--extras/source/templates/wizard/bitmap/MS-Import_2-2.bmpbin0 -> 66480 bytes
-rw-r--r--extras/source/templates/wizard/bitmap/MS-Import_2-3.bmpbin0 -> 66480 bytes
-rw-r--r--extras/source/templates/wizard/bitmap/XML-Import_2-1.bmpbin0 -> 66480 bytes
-rw-r--r--extras/source/templates/wizard/bitmap/XML-Import_2-2.bmpbin0 -> 66480 bytes
-rw-r--r--extras/source/templates/wizard/bitmap/XML-Import_2-3.bmpbin0 -> 66480 bytes
-rw-r--r--extras/source/templates/wizard/bitmap/XML-Import_2-4.bmpbin0 -> 66480 bytes
-rw-r--r--extras/source/templates/wizard/bitmap/brasil.gifbin0 -> 6075 bytes
-rw-r--r--extras/source/templates/wizard/bitmap/cancel_down.bmpbin0 -> 416 bytes
-rw-r--r--extras/source/templates/wizard/bitmap/cancel_up.bmpbin0 -> 416 bytes
-rw-r--r--extras/source/templates/wizard/bitmap/china.gifbin0 -> 10764 bytes
-rw-r--r--extras/source/templates/wizard/bitmap/delzip0
-rw-r--r--extras/source/templates/wizard/bitmap/denmark.gifbin0 -> 12229 bytes
-rw-r--r--extras/source/templates/wizard/bitmap/down.bmpbin0 -> 644 bytes
-rw-r--r--extras/source/templates/wizard/bitmap/end.bmpbin0 -> 13190 bytes
-rw-r--r--extras/source/templates/wizard/bitmap/euro_1.bmpbin0 -> 23344 bytes
-rw-r--r--extras/source/templates/wizard/bitmap/euro_2.bmpbin0 -> 66480 bytes
-rw-r--r--extras/source/templates/wizard/bitmap/euro_3.bmpbin0 -> 66480 bytes
-rw-r--r--extras/source/templates/wizard/bitmap/finland.gifbin0 -> 9569 bytes
-rw-r--r--extras/source/templates/wizard/bitmap/france.gifbin0 -> 7934 bytes
-rw-r--r--extras/source/templates/wizard/bitmap/ftpconnected.gifbin0 -> 114 bytes
-rw-r--r--extras/source/templates/wizard/bitmap/ftpconnecting.gifbin0 -> 166 bytes
-rw-r--r--extras/source/templates/wizard/bitmap/ftperror.gifbin0 -> 123 bytes
-rw-r--r--extras/source/templates/wizard/bitmap/ftpunknown.gifbin0 -> 152 bytes
-rw-r--r--extras/source/templates/wizard/bitmap/germany.wmfbin0 -> 18306 bytes
-rw-r--r--extras/source/templates/wizard/bitmap/greece.gifbin0 -> 13597 bytes
-rw-r--r--extras/source/templates/wizard/bitmap/italia.gifbin0 -> 11213 bytes
-rw-r--r--extras/source/templates/wizard/bitmap/japan.gifbin0 -> 7283 bytes
-rw-r--r--extras/source/templates/wizard/bitmap/makefile.mk47
-rw-r--r--extras/source/templates/wizard/bitmap/maximize.bmpbin0 -> 822 bytes
-rw-r--r--extras/source/templates/wizard/bitmap/minimize.bmpbin0 -> 726 bytes
-rw-r--r--extras/source/templates/wizard/bitmap/netherlands.gifbin0 -> 8639 bytes
-rw-r--r--extras/source/templates/wizard/bitmap/okay_down.bmpbin0 -> 416 bytes
-rw-r--r--extras/source/templates/wizard/bitmap/okay_up.bmpbin0 -> 416 bytes
-rw-r--r--extras/source/templates/wizard/bitmap/polska.gifbin0 -> 7839 bytes
-rw-r--r--extras/source/templates/wizard/bitmap/portugal.gifbin0 -> 5638 bytes
-rw-r--r--extras/source/templates/wizard/bitmap/report.bmpbin0 -> 15744 bytes
-rw-r--r--extras/source/templates/wizard/bitmap/russia.gifbin0 -> 7711 bytes
-rw-r--r--extras/source/templates/wizard/bitmap/spain.gifbin0 -> 6863 bytes
-rw-r--r--extras/source/templates/wizard/bitmap/sweden.gifbin0 -> 8605 bytes
-rw-r--r--extras/source/templates/wizard/bitmap/taiwan.gifbin0 -> 4900 bytes
-rw-r--r--extras/source/templates/wizard/bitmap/turkey.gifbin0 -> 6000 bytes
-rw-r--r--extras/source/templates/wizard/bitmap/tutorial_background.gifbin0 -> 1888 bytes
-rw-r--r--extras/source/templates/wizard/bitmap/up.bmpbin0 -> 644 bytes
-rw-r--r--extras/source/templates/wizard/bitmap/usa.gifbin0 -> 7208 bytes
-rw-r--r--extras/source/templates/wizard/desktop/delzip1
-rw-r--r--extras/source/templates/wizard/desktop/lang/bg/html.stwbin0 -> 5305 bytes
-rw-r--r--extras/source/templates/wizard/desktop/lang/bg/idxexample.odtbin0 -> 21286 bytes
-rw-r--r--extras/source/templates/wizard/desktop/lang/bg/url_transfer.htm87
-rw-r--r--extras/source/templates/wizard/desktop/lang/cs/idxexample.odtbin0 -> 21272 bytes
-rw-r--r--extras/source/templates/wizard/desktop/lang/cs/url_transfer.htm83
-rw-r--r--extras/source/templates/wizard/desktop/lang/da/html.stwbin0 -> 5227 bytes
-rw-r--r--extras/source/templates/wizard/desktop/lang/da/idxexample.odtbin0 -> 21140 bytes
-rw-r--r--extras/source/templates/wizard/desktop/lang/da/url_transfer.htm81
-rw-r--r--extras/source/templates/wizard/desktop/lang/de/html.stwbin0 -> 5335 bytes
-rw-r--r--extras/source/templates/wizard/desktop/lang/de/idxexample.odtbin0 -> 21157 bytes
-rw-r--r--extras/source/templates/wizard/desktop/lang/de/url_transfer.htm85
-rw-r--r--extras/source/templates/wizard/desktop/lang/delzip2
-rw-r--r--extras/source/templates/wizard/desktop/lang/en-GB/html.stwbin0 -> 6140 bytes
-rw-r--r--extras/source/templates/wizard/desktop/lang/en-GB/idxexample.odtbin0 -> 21837 bytes
-rw-r--r--extras/source/templates/wizard/desktop/lang/en-GB/url_transfer.htm92
-rw-r--r--extras/source/templates/wizard/desktop/lang/en-US/html.stwbin0 -> 5335 bytes
-rw-r--r--extras/source/templates/wizard/desktop/lang/en-US/idxexample.odtbin0 -> 21126 bytes
-rw-r--r--extras/source/templates/wizard/desktop/lang/en-US/url_transfer.htm83
-rw-r--r--extras/source/templates/wizard/desktop/lang/es/html.stwbin0 -> 5335 bytes
-rw-r--r--extras/source/templates/wizard/desktop/lang/es/idxexample.odtbin0 -> 21146 bytes
-rw-r--r--extras/source/templates/wizard/desktop/lang/es/url_transfer.htm85
-rwxr-xr-xextras/source/templates/wizard/desktop/lang/eu/html.stwbin0 -> 5335 bytes
-rwxr-xr-xextras/source/templates/wizard/desktop/lang/eu/idxexample.odtbin0 -> 22234 bytes
-rwxr-xr-xextras/source/templates/wizard/desktop/lang/eu/url_transfer.htm80
-rw-r--r--extras/source/templates/wizard/desktop/lang/fr/html.stwbin0 -> 5335 bytes
-rw-r--r--extras/source/templates/wizard/desktop/lang/fr/idxexample.odtbin0 -> 21152 bytes
-rw-r--r--extras/source/templates/wizard/desktop/lang/fr/url_transfer.htm86
-rwxr-xr-xextras/source/templates/wizard/desktop/lang/hu/html.stwbin0 -> 5335 bytes
-rw-r--r--extras/source/templates/wizard/desktop/lang/hu/idxexample.odtbin0 -> 21196 bytes
-rwxr-xr-xextras/source/templates/wizard/desktop/lang/hu/url_transfer.htm83
-rw-r--r--extras/source/templates/wizard/desktop/lang/it/html.stwbin0 -> 5335 bytes
-rw-r--r--extras/source/templates/wizard/desktop/lang/it/idxexample.odtbin0 -> 21150 bytes
-rw-r--r--extras/source/templates/wizard/desktop/lang/it/url_transfer.htm84
-rw-r--r--extras/source/templates/wizard/desktop/lang/ja/html.stwbin0 -> 5529 bytes
-rw-r--r--extras/source/templates/wizard/desktop/lang/ja/idxexample.odtbin0 -> 24039 bytes
-rw-r--r--extras/source/templates/wizard/desktop/lang/ja/url_transfer.htm100
-rw-r--r--extras/source/templates/wizard/desktop/lang/km/html.stwbin0 -> 5335 bytes
-rw-r--r--extras/source/templates/wizard/desktop/lang/km/idxexample.odtbin0 -> 21643 bytes
-rw-r--r--extras/source/templates/wizard/desktop/lang/km/url_transfer.htm100
-rw-r--r--extras/source/templates/wizard/desktop/lang/ko/html.stwbin0 -> 5482 bytes
-rw-r--r--extras/source/templates/wizard/desktop/lang/ko/idxexample.odtbin0 -> 24086 bytes
-rw-r--r--extras/source/templates/wizard/desktop/lang/ko/url_transfer.htm96
-rw-r--r--extras/source/templates/wizard/desktop/lang/makefile.mk47
-rw-r--r--extras/source/templates/wizard/desktop/lang/nl/html.stwbin0 -> 7211 bytes
-rw-r--r--extras/source/templates/wizard/desktop/lang/nl/idxexample.odtbin0 -> 9361 bytes
-rw-r--r--extras/source/templates/wizard/desktop/lang/nl/url_transfer.htm82
-rw-r--r--extras/source/templates/wizard/desktop/lang/pl/idxexample.odtbin0 -> 13229 bytes
-rw-r--r--extras/source/templates/wizard/desktop/lang/pl/url_transfer.htm84
-rw-r--r--extras/source/templates/wizard/desktop/lang/pt-BR/html.stwbin0 -> 7141 bytes
-rw-r--r--extras/source/templates/wizard/desktop/lang/pt-BR/idxexample.odtbin0 -> 21200 bytes
-rw-r--r--extras/source/templates/wizard/desktop/lang/pt-BR/url_transfer.htm93
-rw-r--r--extras/source/templates/wizard/desktop/lang/pt/html.stwbin0 -> 8091 bytes
-rw-r--r--extras/source/templates/wizard/desktop/lang/pt/idxexample.odtbin0 -> 9339 bytes
-rw-r--r--extras/source/templates/wizard/desktop/lang/pt/url_transfer.htm83
-rw-r--r--extras/source/templates/wizard/desktop/lang/ru/idxexample.odtbin0 -> 13458 bytes
-rw-r--r--extras/source/templates/wizard/desktop/lang/ru/url_transfer.htm83
-rw-r--r--extras/source/templates/wizard/desktop/lang/sk/html.stwbin0 -> 6059 bytes
-rw-r--r--extras/source/templates/wizard/desktop/lang/sk/idxexample.odtbin0 -> 9399 bytes
-rw-r--r--extras/source/templates/wizard/desktop/lang/sk/url_transfer.htm83
-rw-r--r--extras/source/templates/wizard/desktop/lang/sl/html.stwbin0 -> 5229 bytes
-rw-r--r--extras/source/templates/wizard/desktop/lang/sl/idxexample.odtbin0 -> 21320 bytes
-rw-r--r--extras/source/templates/wizard/desktop/lang/sl/idxexample.sxwbin0 -> 20352 bytes
-rw-r--r--extras/source/templates/wizard/desktop/lang/sl/url_transfer.htm82
-rw-r--r--extras/source/templates/wizard/desktop/lang/sv/html.stwbin0 -> 5335 bytes
-rw-r--r--extras/source/templates/wizard/desktop/lang/sv/idxexample.odtbin0 -> 21170 bytes
-rw-r--r--extras/source/templates/wizard/desktop/lang/sv/url_transfer.htm83
-rwxr-xr-xextras/source/templates/wizard/desktop/lang/vi/html.stwbin0 -> 5335 bytes
-rwxr-xr-xextras/source/templates/wizard/desktop/lang/vi/idxexample.odtbin0 -> 22170 bytes
-rwxr-xr-xextras/source/templates/wizard/desktop/lang/vi/url_transfer.htm83
-rw-r--r--extras/source/templates/wizard/desktop/lang/zh-CN/html.stwbin0 -> 5877 bytes
-rw-r--r--extras/source/templates/wizard/desktop/lang/zh-CN/idxexample.odtbin0 -> 24054 bytes
-rw-r--r--extras/source/templates/wizard/desktop/lang/zh-CN/url_transfer.htm94
-rw-r--r--extras/source/templates/wizard/desktop/lang/zh-TW/html.stwbin0 -> 5930 bytes
-rw-r--r--extras/source/templates/wizard/desktop/lang/zh-TW/idxexample.odtbin0 -> 24033 bytes
-rw-r--r--extras/source/templates/wizard/desktop/lang/zh-TW/url_transfer.htm98
-rw-r--r--extras/source/templates/wizard/desktop/makefile.mk49
-rw-r--r--extras/source/templates/wizard/fax/lang/bg/bus-classic-pri_f.ottbin0 -> 13962 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/bg/bus-classic_f.ottbin0 -> 26328 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/bg/bus-modern-pri_f.ottbin0 -> 13895 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/bg/bus-modern_f.ottbin0 -> 26302 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/bg/pri-bottle_f.ottbin0 -> 48536 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/bg/pri-fax_f.ottbin0 -> 58797 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/bg/pri-lines_f.ottbin0 -> 12413 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/bg/pri-marine_f.ottbin0 -> 19615 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/cs/bus-classic-pri_f.ottbin0 -> 14002 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/cs/bus-classic_f.ottbin0 -> 26389 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/cs/bus-modern-pri_f.ottbin0 -> 13887 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/cs/bus-modern_f.ottbin0 -> 26295 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/cs/pri-bottle_f.ottbin0 -> 48469 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/cs/pri-fax_f.ottbin0 -> 58690 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/cs/pri-lines_f.ottbin0 -> 12506 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/cs/pri-marine_f.ottbin0 -> 19556 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/da/bus-classic-pri_f.ottbin0 -> 13247 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/da/bus-classic_f.ottbin0 -> 25604 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/da/bus-modern-pri_f.ottbin0 -> 13210 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/da/bus-modern_f.ottbin0 -> 25500 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/da/pri-bottle_f.ottbin0 -> 47905 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/da/pri-fax_f.ottbin0 -> 58181 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/da/pri-lines_f.ottbin0 -> 11991 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/da/pri-marine_f.ottbin0 -> 19005 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/de/bus-classic-pri_f.ottbin0 -> 16876 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/de/bus-classic_f.ottbin0 -> 29457 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/de/bus-modern-pri_f.ottbin0 -> 16793 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/de/bus-modern_f.ottbin0 -> 29437 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/de/pri-bottle_f.ottbin0 -> 50477 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/de/pri-fax_f.ottbin0 -> 60698 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/de/pri-lines_f.ottbin0 -> 14361 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/de/pri-marine_f.ottbin0 -> 21451 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/delzip1
-rw-r--r--extras/source/templates/wizard/fax/lang/en-GB/bus-classic-pri_f.ottbin0 -> 14266 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/en-GB/bus-classic_f.ottbin0 -> 26573 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/en-GB/bus-modern-pri_f.ottbin0 -> 14167 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/en-GB/bus-modern_f.ottbin0 -> 26458 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/en-GB/pri-bottle_f.ottbin0 -> 48319 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/en-GB/pri-fax_f.ottbin0 -> 58632 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/en-GB/pri-lines_f.ottbin0 -> 12445 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/en-GB/pri-marine_f.ottbin0 -> 19486 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/en-US/bus-classic-pri_f.ottbin0 -> 13433 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/en-US/bus-classic_f.ottbin0 -> 25806 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/en-US/bus-modern-pri_f.ottbin0 -> 13391 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/en-US/bus-modern_f.ottbin0 -> 25693 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/en-US/pri-bottle_f.ottbin0 -> 48122 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/en-US/pri-fax_f.ottbin0 -> 58398 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/en-US/pri-lines_f.ottbin0 -> 12192 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/en-US/pri-marine_f.ottbin0 -> 19214 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/es/bus-classic-pri_f.ottbin0 -> 13013 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/es/bus-classic_f.ottbin0 -> 13717 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/es/bus-modern-pri_f.ottbin0 -> 12972 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/es/bus-modern_f.ottbin0 -> 13752 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/es/pri-bottle_f.ottbin0 -> 47907 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/es/pri-fax_f.ottbin0 -> 58176 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/es/pri-lines_f.ottbin0 -> 11998 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/es/pri-marine_f.ottbin0 -> 19028 bytes
-rwxr-xr-xextras/source/templates/wizard/fax/lang/eu/bus-classic-pri_f.ottbin0 -> 16130 bytes
-rwxr-xr-xextras/source/templates/wizard/fax/lang/eu/bus-classic_f.ottbin0 -> 28403 bytes
-rwxr-xr-xextras/source/templates/wizard/fax/lang/eu/bus-modern-pri_f.ottbin0 -> 16032 bytes
-rwxr-xr-xextras/source/templates/wizard/fax/lang/eu/bus-modern_f.ottbin0 -> 28356 bytes
-rwxr-xr-xextras/source/templates/wizard/fax/lang/eu/pri-bottle_f.ottbin0 -> 49792 bytes
-rwxr-xr-xextras/source/templates/wizard/fax/lang/eu/pri-fax_f.ottbin0 -> 60089 bytes
-rwxr-xr-xextras/source/templates/wizard/fax/lang/eu/pri-lines_f.ottbin0 -> 13823 bytes
-rwxr-xr-xextras/source/templates/wizard/fax/lang/eu/pri-marine_f.ottbin0 -> 20942 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/fr/bus-classic-pri_f.ottbin0 -> 17369 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/fr/bus-classic_f.ottbin0 -> 17470 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/fr/bus-modern-pri_f.ottbin0 -> 17295 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/fr/bus-modern_f.ottbin0 -> 17445 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/fr/pri-bottle_f.ottbin0 -> 52227 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/fr/pri-fax_f.ottbin0 -> 62441 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/fr/pri-lines_f.ottbin0 -> 15884 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/fr/pri-marine_f.ottbin0 -> 23099 bytes
-rwxr-xr-xextras/source/templates/wizard/fax/lang/hu/bus-classic-pri_f.ottbin0 -> 15321 bytes
-rwxr-xr-xextras/source/templates/wizard/fax/lang/hu/bus-classic_f.ottbin0 -> 27827 bytes
-rwxr-xr-xextras/source/templates/wizard/fax/lang/hu/bus-modern-pri_f.ottbin0 -> 15210 bytes
-rwxr-xr-xextras/source/templates/wizard/fax/lang/hu/bus-modern_f.ottbin0 -> 27671 bytes
-rwxr-xr-xextras/source/templates/wizard/fax/lang/hu/pri-bottle_f.ottbin0 -> 48943 bytes
-rwxr-xr-xextras/source/templates/wizard/fax/lang/hu/pri-fax_f.ottbin0 -> 59204 bytes
-rwxr-xr-xextras/source/templates/wizard/fax/lang/hu/pri-lines_f.ottbin0 -> 12935 bytes
-rwxr-xr-xextras/source/templates/wizard/fax/lang/hu/pri-marine_f.ottbin0 -> 20155 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/it/bus-classic-pri_f.ottbin0 -> 15872 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/it/bus-classic_f.ottbin0 -> 16076 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/it/bus-modern-pri_f.ottbin0 -> 15969 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/it/bus-modern_f.ottbin0 -> 16295 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/it/pri-bottle_f.ottbin0 -> 50212 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/it/pri-fax_f.ottbin0 -> 60326 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/it/pri-lines_f.ottbin0 -> 13799 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/it/pri-marine_f.ottbin0 -> 21243 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/ja/bus-classic-pri_f.ottbin0 -> 13383 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/ja/bus-classic_f.ottbin0 -> 14053 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/ja/bus-modern-pri_f.ottbin0 -> 13319 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/ja/bus-modern_f.ottbin0 -> 14128 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/ja/pri-bottle_f.ottbin0 -> 48355 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/ja/pri-fax_f.ottbin0 -> 58538 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/ja/pri-lines_f.ottbin0 -> 12319 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/ja/pri-marine_f.ottbin0 -> 19373 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/km/bus-classic-pri_f.ottbin0 -> 15539 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/km/bus-classic_f.ottbin0 -> 27837 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/km/bus-modern-pri_f.ottbin0 -> 15478 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/km/bus-modern_f.ottbin0 -> 27743 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/km/pri-bottle_f.ottbin0 -> 49157 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/km/pri-fax_f.ottbin0 -> 59430 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/km/pri-lines_f.ottbin0 -> 13259 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/km/pri-marine_f.ottbin0 -> 20312 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/ko/bus-classic-pri_f.ottbin0 -> 13343 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/ko/bus-classic_f.ottbin0 -> 14054 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/ko/bus-modern-pri_f.ottbin0 -> 13289 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/ko/bus-modern_f.ottbin0 -> 13576 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/ko/pri-bottle_f.ottbin0 -> 12483 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/ko/pri-fax_f.ottbin0 -> 13120 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/ko/pri-lines_f.ottbin0 -> 12292 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/ko/pri-marine_f.ottbin0 -> 12449 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/makefile.mk49
-rw-r--r--extras/source/templates/wizard/fax/lang/nl/bus-classic-pri_f.ottbin0 -> 14349 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/nl/bus-classic_f.ottbin0 -> 26669 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/nl/bus-modern-pri_f.ottbin0 -> 14322 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/nl/bus-modern_f.ottbin0 -> 26624 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/nl/pri-bottle_f.ottbin0 -> 48410 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/nl/pri-fax_f.ottbin0 -> 58728 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/nl/pri-lines_f.ottbin0 -> 12554 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/nl/pri-marine_f.ottbin0 -> 19533 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/pl/bus-classic-pri_f.ottbin0 -> 15439 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/pl/bus-classic_f.ottbin0 -> 27785 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/pl/bus-modern-pri_f.ottbin0 -> 15409 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/pl/bus-modern_f.ottbin0 -> 27719 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/pl/pri-bottle_f.ottbin0 -> 49546 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/pl/pri-fax_f.ottbin0 -> 59823 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/pl/pri-lines_f.ottbin0 -> 12224 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/pl/pri-marine_f.ottbin0 -> 20644 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/pt-BR/bus-classic-pri_f.ottbin0 -> 15944 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/pt-BR/bus-classic_f.ottbin0 -> 16152 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/pt-BR/bus-modern-pri_f.ottbin0 -> 15899 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/pt-BR/bus-modern_f.ottbin0 -> 16225 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/pt-BR/pri-bottle_f.ottbin0 -> 50297 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/pt-BR/pri-fax_f.ottbin0 -> 60408 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/pt-BR/pri-lines_f.ottbin0 -> 13867 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/pt-BR/pri-marine_f.ottbin0 -> 21372 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/pt/bus-classic-pri_f.ottbin0 -> 15598 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/pt/bus-classic_f.ottbin0 -> 28016 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/pt/bus-modern-pri_f.ottbin0 -> 15585 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/pt/bus-modern_f.ottbin0 -> 27904 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/pt/pri-bottle_f.ottbin0 -> 49710 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/pt/pri-fax_f.ottbin0 -> 60034 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/pt/pri-lines_f.ottbin0 -> 13686 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/pt/pri-marine_f.ottbin0 -> 20846 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/ru/bus-classic-pri_f.ottbin0 -> 14856 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/ru/bus-classic_f.ottbin0 -> 27108 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/ru/bus-modern-pri_f.ottbin0 -> 14879 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/ru/bus-modern_f.ottbin0 -> 27165 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/ru/pri-bottle_f.ottbin0 -> 48761 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/ru/pri-fax_f.ottbin0 -> 59018 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/ru/pri-lines_f.ottbin0 -> 12763 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/ru/pri-marine_f.ottbin0 -> 19920 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/sk/bus-classic-pri_f.ottbin0 -> 14378 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/sk/bus-classic_f.ottbin0 -> 26780 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/sk/bus-modern-pri_f.ottbin0 -> 14281 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/sk/bus-modern_f.ottbin0 -> 26654 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/sk/pri-bottle_f.ottbin0 -> 48863 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/sk/pri-fax_f.ottbin0 -> 59103 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/sk/pri-lines_f.ottbin0 -> 12809 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/sk/pri-marine_f.ottbin0 -> 19790 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/sl/bus-classic-pri_f.ottbin0 -> 13578 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/sl/bus-classic_f.ottbin0 -> 26009 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/sl/bus-modern-pri_f.ottbin0 -> 13401 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/sl/bus-modern_f.ottbin0 -> 25879 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/sl/pri-bottle_f.ottbin0 -> 48301 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/sl/pri-fax_f.ottbin0 -> 58562 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/sl/pri-lines_f.ottbin0 -> 12202 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/sl/pri-marine_f.ottbin0 -> 19442 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/sv/bus-classic-pri_f.ottbin0 -> 13040 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/sv/bus-classic_f.ottbin0 -> 13727 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/sv/bus-modern-pri_f.ottbin0 -> 12969 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/sv/bus-modern_f.ottbin0 -> 13761 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/sv/pri-bottle_f.ottbin0 -> 47941 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/sv/pri-fax_f.ottbin0 -> 58188 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/sv/pri-lines_f.ottbin0 -> 12009 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/sv/pri-marine_f.ottbin0 -> 19049 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/tr/bus-classic-pri_f.ottbin0 -> 14762 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/tr/bus-classic_f.ottbin0 -> 27043 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/tr/bus-modern-pri_f.ottbin0 -> 14734 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/tr/bus-modern_f.ottbin0 -> 26979 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/tr/pri-bottle_f.ottbin0 -> 48657 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/tr/pri-fax_f.ottbin0 -> 58959 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/tr/pri-lines_f.ottbin0 -> 12676 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/tr/pri-marine_f.ottbin0 -> 19823 bytes
-rwxr-xr-xextras/source/templates/wizard/fax/lang/vi/bus-classic-pri_f.ottbin0 -> 27437 bytes
-rwxr-xr-xextras/source/templates/wizard/fax/lang/vi/bus-classic_f.ottbin0 -> 27438 bytes
-rwxr-xr-xextras/source/templates/wizard/fax/lang/vi/bus-modern-pri_f.ottbin0 -> 14972 bytes
-rwxr-xr-xextras/source/templates/wizard/fax/lang/vi/bus-modern_f.ottbin0 -> 27533 bytes
-rwxr-xr-xextras/source/templates/wizard/fax/lang/vi/pri-bottle_f.ottbin0 -> 49902 bytes
-rwxr-xr-xextras/source/templates/wizard/fax/lang/vi/pri-fax_f.ottbin0 -> 60112 bytes
-rwxr-xr-xextras/source/templates/wizard/fax/lang/vi/pri-lines_f.ottbin0 -> 13539 bytes
-rwxr-xr-xextras/source/templates/wizard/fax/lang/vi/pri-marine_f.ottbin0 -> 20782 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/zh-CN/bus-classic-pri_f.ottbin0 -> 13272 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/zh-CN/bus-classic_f.ottbin0 -> 13980 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/zh-CN/bus-modern-pri_f.ottbin0 -> 13219 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/zh-CN/bus-modern_f.ottbin0 -> 14028 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/zh-CN/pri-bottle_f.ottbin0 -> 48306 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/zh-CN/pri-fax_f.ottbin0 -> 58488 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/zh-CN/pri-lines_f.ottbin0 -> 12263 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/zh-CN/pri-marine_f.ottbin0 -> 19355 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/zh-TW/bus-classic-pri_f.ottbin0 -> 13489 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/zh-TW/bus-classic_f.ottbin0 -> 13990 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/zh-TW/bus-modern-pri_f.ottbin0 -> 13287 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/zh-TW/bus-modern_f.ottbin0 -> 14068 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/zh-TW/pri-bottle_f.ottbin0 -> 48327 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/zh-TW/pri-fax_f.ottbin0 -> 58507 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/zh-TW/pri-lines_f.ottbin0 -> 12286 bytes
-rw-r--r--extras/source/templates/wizard/fax/lang/zh-TW/pri-marine_f.ottbin0 -> 19364 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/bg/bus-elegant_l.ottbin0 -> 33481 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/bg/bus-modern_l.ottbin0 -> 33305 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/bg/bus-office_l.ottbin0 -> 33302 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/bg/off-elegant_l.ottbin0 -> 15115 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/bg/off-modern_l.ottbin0 -> 14690 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/bg/off-office_l.ottbin0 -> 14392 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/bg/pri-bottle_l.ottbin0 -> 48155 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/bg/pri-mail_l.ottbin0 -> 24078 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/bg/pri-marine_l.ottbin0 -> 19317 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/bg/pri-redline_l.ottbin0 -> 12133 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/cs/bus-elegant_l.ottbin0 -> 35308 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/cs/bus-modern_l.ottbin0 -> 35774 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/cs/bus-office_l.ottbin0 -> 35420 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/cs/off-elegant_l.ottbin0 -> 16796 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/cs/off-modern_l.ottbin0 -> 16474 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/cs/off-office_l.ottbin0 -> 16099 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/cs/pri-bottle_l.ottbin0 -> 48166 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/cs/pri-mail_l.ottbin0 -> 24034 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/cs/pri-marine_l.ottbin0 -> 19287 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/cs/pri-redline_l.ottbin0 -> 12291 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/da/bus-elegant_l.ottbin0 -> 34076 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/da/bus-modern_l.ottbin0 -> 34201 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/da/bus-office_l.ottbin0 -> 34097 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/da/off-elegant_l.ottbin0 -> 15647 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/da/off-modern_l.ottbin0 -> 15245 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/da/off-office_l.ottbin0 -> 14769 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/da/pri-bottle_l.ottbin0 -> 47452 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/da/pri-mail_l.ottbin0 -> 23344 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/da/pri-marine_l.ottbin0 -> 18528 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/da/pri-redline_l.ottbin0 -> 11639 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/de/bus-elegant_l.ottbin0 -> 36299 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/de/bus-modern_l.ottbin0 -> 36496 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/de/bus-office_l.ottbin0 -> 36279 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/de/off-elegant_l.ottbin0 -> 15742 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/de/off-modern_l.ottbin0 -> 15315 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/de/off-office_l.ottbin0 -> 14789 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/de/pri-bottle_l.ottbin0 -> 48191 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/de/pri-mail_l.ottbin0 -> 24168 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/de/pri-marine_l.ottbin0 -> 19306 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/de/pri-redline_l.ottbin0 -> 12473 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/delzip1
-rw-r--r--extras/source/templates/wizard/letter/lang/en-GB/bus-elegant_l.ottbin0 -> 34203 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/en-GB/bus-modern_l.ottbin0 -> 34370 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/en-GB/bus-office_l.ottbin0 -> 34188 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/en-GB/off-elegant_l.ottbin0 -> 15692 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/en-GB/off-modern_l.ottbin0 -> 15332 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/en-GB/off-office_l.ottbin0 -> 14881 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/en-GB/pri-bottle_l.ottbin0 -> 47926 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/en-GB/pri-mail_l.ottbin0 -> 23854 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/en-GB/pri-marine_l.ottbin0 -> 19125 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/en-GB/pri-redline_l.ottbin0 -> 12148 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/en-US/bus-elegant_l.ottbin0 -> 33945 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/en-US/bus-modern_l.ottbin0 -> 34270 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/en-US/bus-office_l.ottbin0 -> 34041 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/en-US/off-elegant_l.ottbin0 -> 15629 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/en-US/off-modern_l.ottbin0 -> 15341 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/en-US/off-office_l.ottbin0 -> 14731 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/en-US/pri-bottle_l.ottbin0 -> 48260 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/en-US/pri-mail_l.ottbin0 -> 24144 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/en-US/pri-marine_l.ottbin0 -> 19326 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/en-US/pri-redline_l.ottbin0 -> 12423 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/es/bus-elegant_l.ottbin0 -> 35196 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/es/bus-modern_l.ottbin0 -> 35293 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/es/bus-office_l.ottbin0 -> 35288 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/es/off-elegant_l.ottbin0 -> 15714 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/es/off-modern_l.ottbin0 -> 15514 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/es/off-office_l.ottbin0 -> 14755 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/es/pri-bottle_l.ottbin0 -> 48283 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/es/pri-mail_l.ottbin0 -> 24241 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/es/pri-marine_l.ottbin0 -> 19443 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/es/pri-redline_l.ottbin0 -> 12544 bytes
-rwxr-xr-xextras/source/templates/wizard/letter/lang/eu/bus-elegant_l.ottbin0 -> 33891 bytes
-rwxr-xr-xextras/source/templates/wizard/letter/lang/eu/bus-modern_l.ottbin0 -> 33889 bytes
-rwxr-xr-xextras/source/templates/wizard/letter/lang/eu/bus-office_l.ottbin0 -> 33857 bytes
-rwxr-xr-xextras/source/templates/wizard/letter/lang/eu/off-elegant_l.ottbin0 -> 15864 bytes
-rwxr-xr-xextras/source/templates/wizard/letter/lang/eu/off-modern_l.ottbin0 -> 15381 bytes
-rwxr-xr-xextras/source/templates/wizard/letter/lang/eu/off-office_l.ottbin0 -> 15020 bytes
-rwxr-xr-xextras/source/templates/wizard/letter/lang/eu/pri-bottle_l.ottbin0 -> 49465 bytes
-rwxr-xr-xextras/source/templates/wizard/letter/lang/eu/pri-mail_l.ottbin0 -> 25367 bytes
-rwxr-xr-xextras/source/templates/wizard/letter/lang/eu/pri-marine_l.ottbin0 -> 20630 bytes
-rwxr-xr-xextras/source/templates/wizard/letter/lang/eu/pri-redline_l.ottbin0 -> 13539 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/fr/bus-elegant_l.ottbin0 -> 35087 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/fr/bus-modern_l.ottbin0 -> 35258 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/fr/bus-office_l.ottbin0 -> 35187 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/fr/off-elegant_l.ottbin0 -> 15706 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/fr/off-modern_l.ottbin0 -> 15517 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/fr/off-office_l.ottbin0 -> 14721 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/fr/pri-bottle_l.ottbin0 -> 48247 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/fr/pri-mail_l.ottbin0 -> 24192 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/fr/pri-marine_l.ottbin0 -> 19393 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/fr/pri-redline_l.ottbin0 -> 12485 bytes
-rwxr-xr-xextras/source/templates/wizard/letter/lang/hu/bus-elegant_l.ottbin0 -> 28811 bytes
-rwxr-xr-xextras/source/templates/wizard/letter/lang/hu/bus-modern_l.ottbin0 -> 29220 bytes
-rwxr-xr-xextras/source/templates/wizard/letter/lang/hu/bus-office_l.ottbin0 -> 28943 bytes
-rwxr-xr-xextras/source/templates/wizard/letter/lang/hu/off-elegant_l.ottbin0 -> 17014 bytes
-rwxr-xr-xextras/source/templates/wizard/letter/lang/hu/off-modern_l.ottbin0 -> 16696 bytes
-rwxr-xr-xextras/source/templates/wizard/letter/lang/hu/off-office_l.ottbin0 -> 16232 bytes
-rwxr-xr-xextras/source/templates/wizard/letter/lang/hu/pri-bottle_l.ottbin0 -> 48573 bytes
-rwxr-xr-xextras/source/templates/wizard/letter/lang/hu/pri-mail_l.ottbin0 -> 24608 bytes
-rwxr-xr-xextras/source/templates/wizard/letter/lang/hu/pri-marine_l.ottbin0 -> 19848 bytes
-rwxr-xr-xextras/source/templates/wizard/letter/lang/hu/pri-redline_l.ottbin0 -> 12724 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/it/bus-elegant_l.ottbin0 -> 35132 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/it/bus-modern_l.ottbin0 -> 35272 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/it/bus-office_l.ottbin0 -> 35239 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/it/off-elegant_l.ottbin0 -> 15685 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/it/off-modern_l.ottbin0 -> 15531 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/it/off-office_l.ottbin0 -> 14763 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/it/pri-bottle_l.ottbin0 -> 48251 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/it/pri-mail_l.ottbin0 -> 24212 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/it/pri-marine_l.ottbin0 -> 19414 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/it/pri-redline_l.ottbin0 -> 12505 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/ja/bus-elegant_l.ottbin0 -> 32851 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/ja/bus-modern_l.ottbin0 -> 32811 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/ja/bus-office_l.ottbin0 -> 32866 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/ja/off-elegant_l.ottbin0 -> 13980 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/ja/off-modern_l.ottbin0 -> 13542 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/ja/off-office_l.ottbin0 -> 13078 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/ja/pri-bottle_l.ottbin0 -> 48475 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/ja/pri-mail_l.ottbin0 -> 24376 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/ja/pri-marine_l.ottbin0 -> 19693 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/ja/pri-redline_l.ottbin0 -> 12690 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/km/bus-elegant_l.ottbin0 -> 33195 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/km/bus-modern_l.ottbin0 -> 33366 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/km/bus-office_l.ottbin0 -> 33297 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/km/off-elegant_l.ottbin0 -> 15136 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/km/off-modern_l.ottbin0 -> 14766 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/km/off-office_l.ottbin0 -> 14343 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/km/pri-bottle_l.ottbin0 -> 48755 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/km/pri-mail_l.ottbin0 -> 24707 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/km/pri-marine_l.ottbin0 -> 19963 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/km/pri-redline_l.ottbin0 -> 12974 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/ko/bus-elegant_l.ottbin0 -> 33016 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/ko/bus-modern_l.ottbin0 -> 32993 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/ko/bus-office_l.ottbin0 -> 33110 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/ko/off-elegant_l.ottbin0 -> 14164 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/ko/off-modern_l.ottbin0 -> 13716 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/ko/off-office_l.ottbin0 -> 13242 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/ko/pri-bottle_l.ottbin0 -> 48425 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/ko/pri-mail_l.ottbin0 -> 24371 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/ko/pri-marine_l.ottbin0 -> 19629 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/ko/pri-redline_l.ottbin0 -> 12664 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/makefile.mk56
-rw-r--r--extras/source/templates/wizard/letter/lang/nl/bus-elegant_l.ottbin0 -> 35129 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/nl/bus-modern_l.ottbin0 -> 35296 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/nl/bus-office_l.ottbin0 -> 35304 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/nl/off-elegant_l.ottbin0 -> 15686 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/nl/off-modern_l.ottbin0 -> 15300 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/nl/off-office_l.ottbin0 -> 14769 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/nl/pri-bottle_l.ottbin0 -> 48038 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/nl/pri-mail_l.ottbin0 -> 23992 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/nl/pri-marine_l.ottbin0 -> 19194 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/nl/pri-redline_l.ottbin0 -> 12272 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/pl/bus-elegant_l.ottbin0 -> 35321 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/pl/bus-modern_l.ottbin0 -> 35491 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/pl/bus-office_l.ottbin0 -> 35400 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/pl/off-elegant_l.ottbin0 -> 15723 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/pl/off-modern_l.ottbin0 -> 15361 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/pl/off-office_l.ottbin0 -> 14779 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/pl/pri-bottle_l.ottbin0 -> 48075 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/pl/pri-mail_l.ottbin0 -> 24013 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/pl/pri-marine_l.ottbin0 -> 19287 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/pl/pri-redline_l.ottbin0 -> 12202 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/pt-BR/bus-elegant_l.ottbin0 -> 32898 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/pt-BR/bus-modern_l.ottbin0 -> 32976 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/pt-BR/bus-office_l.ottbin0 -> 33065 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/pt-BR/off-elegant_l.ottbin0 -> 13883 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/pt-BR/off-modern_l.ottbin0 -> 13540 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/pt-BR/off-office_l.ottbin0 -> 13125 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/pt-BR/pri-bottle_l.ottbin0 -> 48298 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/pt-BR/pri-mail_l.ottbin0 -> 24283 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/pt-BR/pri-marine_l.ottbin0 -> 19487 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/pt-BR/pri-redline_l.ottbin0 -> 12581 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/pt/bus-elegant_l.ottbin0 -> 34166 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/pt/bus-modern_l.ottbin0 -> 34295 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/pt/bus-office_l.ottbin0 -> 34137 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/pt/off-elegant_l.ottbin0 -> 15666 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/pt/off-modern_l.ottbin0 -> 15271 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/pt/off-office_l.ottbin0 -> 14805 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/pt/pri-bottle_l.ottbin0 -> 49425 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/pt/pri-mail_l.ottbin0 -> 25343 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/pt/pri-marine_l.ottbin0 -> 20592 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/pt/pri-redline_l.ottbin0 -> 13497 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/ru/bus-elegant_l.ottbin0 -> 32769 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/ru/bus-modern_l.ottbin0 -> 32828 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/ru/bus-office_l.ottbin0 -> 32818 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/ru/off-elegant_l.ottbin0 -> 14608 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/ru/off-modern_l.ottbin0 -> 13644 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/ru/off-office_l.ottbin0 -> 13848 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/ru/pri-bottle_l.ottbin0 -> 48536 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/ru/pri-mail_l.ottbin0 -> 24413 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/ru/pri-marine_l.ottbin0 -> 19526 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/ru/pri-redline_l.ottbin0 -> 12568 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/sk/bus-elegant_l.ottbin0 -> 32678 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/sk/bus-modern_l.ottbin0 -> 32647 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/sk/bus-office_l.ottbin0 -> 32986 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/sk/off-elegant_l.ottbin0 -> 14478 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/sk/off-modern_l.ottbin0 -> 13966 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/sk/off-office_l.ottbin0 -> 13750 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/sk/pri-bottle_l.ottbin0 -> 48272 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/sk/pri-mail_l.ottbin0 -> 24170 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/sk/pri-marine_l.ottbin0 -> 19478 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/sk/pri-redline_l.ottbin0 -> 12598 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/sl/bus-elegant_l.ottbin0 -> 19390 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/sl/bus-modern_l.ottbin0 -> 19439 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/sl/bus-office_l.ottbin0 -> 19454 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/sl/off-elegant_l.ottbin0 -> 13944 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/sl/off-modern_l.ottbin0 -> 13501 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/sl/off-office_l.ottbin0 -> 13109 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/sl/pri-bottle_l.ottbin0 -> 47978 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/sl/pri-mail_l.ottbin0 -> 23904 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/sl/pri-marine_l.ottbin0 -> 19152 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/sl/pri-redline_l.ottbin0 -> 11951 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/sv/bus-elegant_l.ottbin0 -> 35195 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/sv/bus-modern_l.ottbin0 -> 35342 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/sv/bus-office_l.ottbin0 -> 35313 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/sv/off-elegant_l.ottbin0 -> 15768 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/sv/off-modern_l.ottbin0 -> 15347 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/sv/off-office_l.ottbin0 -> 14801 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/sv/pri-bottle_l.ottbin0 -> 48237 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/sv/pri-mail_l.ottbin0 -> 24226 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/sv/pri-marine_l.ottbin0 -> 19359 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/sv/pri-redline_l.ottbin0 -> 12522 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/tr/bus-elegant_l.ottbin0 -> 32509 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/tr/bus-modern_l.ottbin0 -> 32664 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/tr/bus-office_l.ottbin0 -> 32593 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/tr/off-elegant_l.ottbin0 -> 14371 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/tr/off-modern_l.ottbin0 -> 14067 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/tr/off-office_l.ottbin0 -> 13636 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/tr/pri-bottle_l.ottbin0 -> 48166 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/tr/pri-mail_l.ottbin0 -> 24128 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/tr/pri-marine_l.ottbin0 -> 19377 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/tr/pri-redline_l.ottbin0 -> 12290 bytes
-rwxr-xr-xextras/source/templates/wizard/letter/lang/vi/bus-elegant_l.ottbin0 -> 34581 bytes
-rwxr-xr-xextras/source/templates/wizard/letter/lang/vi/bus-modern_l.ottbin0 -> 34704 bytes
-rwxr-xr-xextras/source/templates/wizard/letter/lang/vi/bus-office_l.ottbin0 -> 34605 bytes
-rwxr-xr-xextras/source/templates/wizard/letter/lang/vi/off-elegant_l.ottbin0 -> 15318 bytes
-rwxr-xr-xextras/source/templates/wizard/letter/lang/vi/off-modern_l.ottbin0 -> 14885 bytes
-rwxr-xr-xextras/source/templates/wizard/letter/lang/vi/off-office_l.ottbin0 -> 14412 bytes
-rwxr-xr-xextras/source/templates/wizard/letter/lang/vi/pri-bottle_l.ottbin0 -> 49511 bytes
-rwxr-xr-xextras/source/templates/wizard/letter/lang/vi/pri-mail_l.ottbin0 -> 25281 bytes
-rwxr-xr-xextras/source/templates/wizard/letter/lang/vi/pri-marine_l.ottbin0 -> 20477 bytes
-rwxr-xr-xextras/source/templates/wizard/letter/lang/vi/pri-redline_l.ottbin0 -> 13302 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/zh-CN/bus-elegant_l.ottbin0 -> 32964 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/zh-CN/bus-modern_l.ottbin0 -> 32935 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/zh-CN/bus-office_l.ottbin0 -> 33050 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/zh-CN/off-elegant_l.ottbin0 -> 14136 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/zh-CN/off-modern_l.ottbin0 -> 13669 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/zh-CN/off-office_l.ottbin0 -> 13239 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/zh-CN/pri-bottle_l.ottbin0 -> 48484 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/zh-CN/pri-mail_l.ottbin0 -> 24392 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/zh-CN/pri-marine_l.ottbin0 -> 19680 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/zh-CN/pri-redline_l.ottbin0 -> 12693 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/zh-TW/bus-elegant_l.ottbin0 -> 32949 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/zh-TW/bus-modern_l.ottbin0 -> 32924 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/zh-TW/bus-office_l.ottbin0 -> 33059 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/zh-TW/off-elegant_l.ottbin0 -> 14096 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/zh-TW/off-modern_l.ottbin0 -> 13615 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/zh-TW/off-office_l.ottbin0 -> 13206 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/zh-TW/pri-bottle_l.ottbin0 -> 48497 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/zh-TW/pri-mail_l.ottbin0 -> 24420 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/zh-TW/pri-marine_l.ottbin0 -> 19681 bytes
-rw-r--r--extras/source/templates/wizard/letter/lang/zh-TW/pri-redline_l.ottbin0 -> 12701 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/bg/cnt-01.ottbin0 -> 9846 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/bg/cnt-011.ottbin0 -> 9686 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/bg/cnt-012.ottbin0 -> 9640 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/bg/cnt-02.ottbin0 -> 9500 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/bg/cnt-021.ottbin0 -> 9520 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/bg/cnt-022.ottbin0 -> 9396 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/bg/cnt-03.ottbin0 -> 9951 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/bg/cnt-031.ottbin0 -> 10031 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/bg/cnt-032.ottbin0 -> 9895 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/bg/cnt-04.ottbin0 -> 10090 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/bg/cnt-041.ottbin0 -> 10224 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/bg/cnt-042.ottbin0 -> 9955 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/bg/cnt-05.ottbin0 -> 9515 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/bg/cnt-051.ottbin0 -> 9518 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/bg/cnt-052.ottbin0 -> 9561 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/bg/cnt-06.ottbin0 -> 9921 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/bg/cnt-061.ottbin0 -> 9906 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/bg/cnt-062.ottbin0 -> 9827 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/bg/cnt-default.ottbin0 -> 9657 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/bg/stl-01.ottbin0 -> 37043 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/bg/stl-02.ottbin0 -> 26176 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/bg/stl-03.ottbin0 -> 46632 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/bg/stl-04.ottbin0 -> 25021 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/bg/stl-05.ottbin0 -> 46527 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/bg/stl-06.ottbin0 -> 18351 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/bg/stl-07.ottbin0 -> 8793 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/bg/stl-08.ottbin0 -> 13368 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/bg/stl-09.ottbin0 -> 50528 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/bg/stl-default.ottbin0 -> 7693 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/cs/cnt-01.ottbin0 -> 8755 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/cs/cnt-011.ottbin0 -> 8773 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/cs/cnt-012.ottbin0 -> 8700 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/cs/cnt-02.ottbin0 -> 8648 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/cs/cnt-021.ottbin0 -> 8695 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/cs/cnt-022.ottbin0 -> 8591 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/cs/cnt-03.ottbin0 -> 8998 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/cs/cnt-031.ottbin0 -> 8994 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/cs/cnt-032.ottbin0 -> 8928 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/cs/cnt-04.ottbin0 -> 9100 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/cs/cnt-041.ottbin0 -> 9250 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/cs/cnt-042.ottbin0 -> 8949 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/cs/cnt-05.ottbin0 -> 8647 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/cs/cnt-051.ottbin0 -> 8685 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/cs/cnt-052.ottbin0 -> 8627 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/cs/cnt-06.ottbin0 -> 8911 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/cs/cnt-061.ottbin0 -> 8867 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/cs/cnt-062.ottbin0 -> 8764 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/cs/cnt-default.ottbin0 -> 8773 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/cs/stl-01.ottbin0 -> 35377 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/cs/stl-02.ottbin0 -> 25279 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/cs/stl-03.ottbin0 -> 45733 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/cs/stl-04.ottbin0 -> 23274 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/cs/stl-05.ottbin0 -> 45684 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/cs/stl-06.ottbin0 -> 16844 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/cs/stl-07.ottbin0 -> 8055 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/cs/stl-08.ottbin0 -> 10882 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/cs/stl-09.ottbin0 -> 48611 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/cs/stl-default.ottbin0 -> 6927 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/da/cnt-01.ottbin0 -> 8620 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/da/cnt-011.ottbin0 -> 8613 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/da/cnt-012.ottbin0 -> 8510 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/da/cnt-02.ottbin0 -> 8464 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/da/cnt-021.ottbin0 -> 8537 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/da/cnt-022.ottbin0 -> 8396 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/da/cnt-03.ottbin0 -> 8812 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/da/cnt-031.ottbin0 -> 8806 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/da/cnt-032.ottbin0 -> 8737 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/da/cnt-04.ottbin0 -> 8921 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/da/cnt-041.ottbin0 -> 9058 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/da/cnt-042.ottbin0 -> 8767 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/da/cnt-05.ottbin0 -> 8450 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/da/cnt-051.ottbin0 -> 8435 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/da/cnt-052.ottbin0 -> 8432 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/da/cnt-06.ottbin0 -> 8725 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/da/cnt-061.ottbin0 -> 8654 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/da/cnt-062.ottbin0 -> 8585 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/da/cnt-default.ottbin0 -> 8589 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/da/stl-01.ottbin0 -> 35087 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/da/stl-02.ottbin0 -> 24973 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/da/stl-03.ottbin0 -> 45383 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/da/stl-04.ottbin0 -> 22956 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/da/stl-05.ottbin0 -> 45354 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/da/stl-06.ottbin0 -> 16531 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/da/stl-07.ottbin0 -> 7616 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/da/stl-08.ottbin0 -> 10605 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/da/stl-09.ottbin0 -> 48279 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/da/stl-default.ottbin0 -> 6627 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/de/cnt-01.ottbin0 -> 8760 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/de/cnt-011.ottbin0 -> 8817 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/de/cnt-012.ottbin0 -> 8690 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/de/cnt-02.ottbin0 -> 8720 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/de/cnt-021.ottbin0 -> 8770 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/de/cnt-022.ottbin0 -> 8598 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/de/cnt-03.ottbin0 -> 9073 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/de/cnt-031.ottbin0 -> 9063 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/de/cnt-032.ottbin0 -> 8956 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/de/cnt-04.ottbin0 -> 9096 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/de/cnt-041.ottbin0 -> 9119 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/de/cnt-042.ottbin0 -> 8981 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/de/cnt-05.ottbin0 -> 8596 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/de/cnt-051.ottbin0 -> 8661 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/de/cnt-052.ottbin0 -> 8625 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/de/cnt-06.ottbin0 -> 8895 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/de/cnt-061.ottbin0 -> 8885 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/de/cnt-062.ottbin0 -> 8765 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/de/cnt-default.ottbin0 -> 8882 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/de/stl-01.ottbin0 -> 35301 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/de/stl-02.ottbin0 -> 25192 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/de/stl-03.ottbin0 -> 45591 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/de/stl-04.ottbin0 -> 22663 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/de/stl-05.ottbin0 -> 45398 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/de/stl-06.ottbin0 -> 16719 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/de/stl-07.ottbin0 -> 7792 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/de/stl-08.ottbin0 -> 11405 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/de/stl-09.ottbin0 -> 48416 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/de/stl-default.ottbin0 -> 6843 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/delzip2
-rw-r--r--extras/source/templates/wizard/report/lang/en-GB/cnt-01.ottbin0 -> 10277 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/en-GB/cnt-011.ottbin0 -> 10146 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/en-GB/cnt-012.ottbin0 -> 10137 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/en-GB/cnt-02.ottbin0 -> 10011 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/en-GB/cnt-021.ottbin0 -> 9997 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/en-GB/cnt-022.ottbin0 -> 9833 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/en-GB/cnt-03.ottbin0 -> 10383 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/en-GB/cnt-031.ottbin0 -> 10275 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/en-GB/cnt-032.ottbin0 -> 10174 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/en-GB/cnt-04.ottbin0 -> 10388 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/en-GB/cnt-041.ottbin0 -> 10424 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/en-GB/cnt-042.ottbin0 -> 10381 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/en-GB/cnt-05.ottbin0 -> 9725 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/en-GB/cnt-051.ottbin0 -> 9687 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/en-GB/cnt-052.ottbin0 -> 9703 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/en-GB/cnt-06.ottbin0 -> 10297 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/en-GB/cnt-061.ottbin0 -> 10196 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/en-GB/cnt-062.ottbin0 -> 10129 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/en-GB/cnt-default.ottbin0 -> 10060 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/en-GB/stl-01.ottbin0 -> 36755 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/en-GB/stl-02.ottbin0 -> 25830 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/en-GB/stl-03.ottbin0 -> 46351 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/en-GB/stl-04.ottbin0 -> 24172 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/en-GB/stl-05.ottbin0 -> 46261 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/en-GB/stl-06.ottbin0 -> 18156 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/en-GB/stl-07.ottbin0 -> 9121 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/en-GB/stl-08.ottbin0 -> 12482 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/en-GB/stl-09.ottbin0 -> 50141 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/en-GB/stl-default.ottbin0 -> 7561 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/en-US/cnt-01.ottbin0 -> 8813 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/en-US/cnt-011.ottbin0 -> 8803 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/en-US/cnt-012.ottbin0 -> 8707 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/en-US/cnt-02.ottbin0 -> 8666 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/en-US/cnt-021.ottbin0 -> 8738 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/en-US/cnt-022.ottbin0 -> 8594 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/en-US/cnt-03.ottbin0 -> 9003 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/en-US/cnt-031.ottbin0 -> 8999 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/en-US/cnt-032.ottbin0 -> 8931 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/en-US/cnt-04.ottbin0 -> 9119 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/en-US/cnt-041.ottbin0 -> 9264 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/en-US/cnt-042.ottbin0 -> 8959 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/en-US/cnt-05.ottbin0 -> 8651 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/en-US/cnt-051.ottbin0 -> 8635 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/en-US/cnt-052.ottbin0 -> 8633 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/en-US/cnt-06.ottbin0 -> 8900 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/en-US/cnt-061.ottbin0 -> 8831 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/en-US/cnt-062.ottbin0 -> 8763 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/en-US/cnt-default.ottbin0 -> 8777 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/en-US/stl-01.ottbin0 -> 35361 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/en-US/stl-02.ottbin0 -> 25203 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/en-US/stl-03.ottbin0 -> 45630 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/en-US/stl-04.ottbin0 -> 23224 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/en-US/stl-05.ottbin0 -> 45601 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/en-US/stl-06.ottbin0 -> 16824 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/en-US/stl-07.ottbin0 -> 7951 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/en-US/stl-08.ottbin0 -> 10871 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/en-US/stl-09.ottbin0 -> 48567 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/en-US/stl-default.ottbin0 -> 6857 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/es/cnt-01.ottbin0 -> 8764 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/es/cnt-011.ottbin0 -> 8824 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/es/cnt-012.ottbin0 -> 8698 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/es/cnt-02.ottbin0 -> 8727 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/es/cnt-021.ottbin0 -> 8776 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/es/cnt-022.ottbin0 -> 8611 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/es/cnt-03.ottbin0 -> 9080 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/es/cnt-031.ottbin0 -> 9067 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/es/cnt-032.ottbin0 -> 8966 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/es/cnt-04.ottbin0 -> 9104 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/es/cnt-041.ottbin0 -> 9128 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/es/cnt-042.ottbin0 -> 8998 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/es/cnt-05.ottbin0 -> 8612 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/es/cnt-051.ottbin0 -> 8664 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/es/cnt-052.ottbin0 -> 8633 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/es/cnt-06.ottbin0 -> 8887 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/es/cnt-061.ottbin0 -> 8877 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/es/cnt-062.ottbin0 -> 8766 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/es/cnt-default.ottbin0 -> 8892 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/es/stl-01.ottbin0 -> 38158 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/es/stl-02.ottbin0 -> 25281 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/es/stl-03.ottbin0 -> 47640 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/es/stl-04.ottbin0 -> 22734 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/es/stl-05.ottbin0 -> 47395 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/es/stl-06.ottbin0 -> 16709 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/es/stl-07.ottbin0 -> 7891 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/es/stl-08.ottbin0 -> 11440 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/es/stl-09.ottbin0 -> 51540 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/es/stl-default.ottbin0 -> 6941 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/eu/cnt-01.ottbin0 -> 11556 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/eu/cnt-011.ottbin0 -> 11494 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/eu/cnt-012.ottbin0 -> 11496 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/eu/cnt-02.ottbin0 -> 11432 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/eu/cnt-021.ottbin0 -> 11541 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/eu/cnt-022.ottbin0 -> 11427 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/eu/cnt-03.ottbin0 -> 11588 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/eu/cnt-031.ottbin0 -> 11591 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/eu/cnt-032.ottbin0 -> 11602 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/eu/cnt-04.ottbin0 -> 11792 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/eu/cnt-041.ottbin0 -> 11966 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/eu/cnt-042.ottbin0 -> 11725 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/eu/cnt-05.ottbin0 -> 11048 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/eu/cnt-051.ottbin0 -> 10985 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/eu/cnt-052.ottbin0 -> 11106 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/eu/cnt-06.ottbin0 -> 11808 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/eu/cnt-061.ottbin0 -> 11638 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/eu/cnt-062.ottbin0 -> 11663 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/eu/cnt-default.ottbin0 -> 11590 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/eu/stl-01.ottbin0 -> 39568 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/eu/stl-02.ottbin0 -> 27248 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/eu/stl-03.ottbin0 -> 47648 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/eu/stl-04.ottbin0 -> 25668 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/eu/stl-05.ottbin0 -> 47578 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/eu/stl-06.ottbin0 -> 19489 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/eu/stl-07.ottbin0 -> 9840 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/eu/stl-08.ottbin0 -> 13631 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/eu/stl-09.ottbin0 -> 51465 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/eu/stl-10.ottbin0 -> 38022 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/eu/stl-default.ottbin0 -> 8818 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/fr/cnt-01.ottbin0 -> 8761 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/fr/cnt-011.ottbin0 -> 8813 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/fr/cnt-012.ottbin0 -> 8699 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/fr/cnt-02.ottbin0 -> 8729 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/fr/cnt-021.ottbin0 -> 8786 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/fr/cnt-022.ottbin0 -> 8611 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/fr/cnt-03.ottbin0 -> 9076 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/fr/cnt-031.ottbin0 -> 9057 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/fr/cnt-032.ottbin0 -> 8968 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/fr/cnt-04.ottbin0 -> 9101 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/fr/cnt-041.ottbin0 -> 9116 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/fr/cnt-042.ottbin0 -> 8999 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/fr/cnt-05.ottbin0 -> 8608 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/fr/cnt-051.ottbin0 -> 8651 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/fr/cnt-052.ottbin0 -> 8633 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/fr/cnt-06.ottbin0 -> 8887 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/fr/cnt-061.ottbin0 -> 8868 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/fr/cnt-062.ottbin0 -> 8769 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/fr/cnt-default.ottbin0 -> 8888 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/fr/stl-01.ottbin0 -> 35384 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/fr/stl-02.ottbin0 -> 25300 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/fr/stl-03.ottbin0 -> 45705 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/fr/stl-04.ottbin0 -> 22729 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/fr/stl-05.ottbin0 -> 45480 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/fr/stl-06.ottbin0 -> 16730 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/fr/stl-07.ottbin0 -> 7828 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/fr/stl-08.ottbin0 -> 11422 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/fr/stl-09.ottbin0 -> 48481 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/fr/stl-default.ottbin0 -> 6912 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/hu/cnt-01.ottbin0 -> 9838 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/hu/cnt-011.ottbin0 -> 9870 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/hu/cnt-012.ottbin0 -> 9902 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/hu/cnt-02.ottbin0 -> 9612 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/hu/cnt-021.ottbin0 -> 9589 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/hu/cnt-022.ottbin0 -> 9601 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/hu/cnt-03.ottbin0 -> 10121 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/hu/cnt-031.ottbin0 -> 10136 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/hu/cnt-032.ottbin0 -> 10102 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/hu/cnt-04.ottbin0 -> 10161 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/hu/cnt-041.ottbin0 -> 10318 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/hu/cnt-042.ottbin0 -> 10170 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/hu/cnt-05.ottbin0 -> 9565 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/hu/cnt-051.ottbin0 -> 9577 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/hu/cnt-052.ottbin0 -> 9624 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/hu/cnt-06.ottbin0 -> 10151 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/hu/cnt-061.ottbin0 -> 10151 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/hu/cnt-062.ottbin0 -> 10182 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/hu/cnt-default.ottbin0 -> 9779 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/hu/stl-01.ottbin0 -> 36754 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/hu/stl-02.ottbin0 -> 26061 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/hu/stl-03.ottbin0 -> 46450 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/hu/stl-04.ottbin0 -> 24626 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/hu/stl-05.ottbin0 -> 46432 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/hu/stl-06.ottbin0 -> 19218 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/hu/stl-07.ottbin0 -> 9398 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/hu/stl-08.ottbin0 -> 11850 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/hu/stl-09.ottbin0 -> 50209 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/hu/stl-default.ottbin0 -> 7774 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/it/cnt-01.ottbin0 -> 8766 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/it/cnt-011.ottbin0 -> 8818 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/it/cnt-012.ottbin0 -> 8696 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/it/cnt-02.ottbin0 -> 8727 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/it/cnt-021.ottbin0 -> 8765 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/it/cnt-022.ottbin0 -> 8603 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/it/cnt-03.ottbin0 -> 9082 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/it/cnt-031.ottbin0 -> 9063 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/it/cnt-032.ottbin0 -> 8966 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/it/cnt-04.ottbin0 -> 9103 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/it/cnt-041.ottbin0 -> 9121 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/it/cnt-042.ottbin0 -> 8995 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/it/cnt-05.ottbin0 -> 8612 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/it/cnt-051.ottbin0 -> 8657 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/it/cnt-052.ottbin0 -> 8628 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/it/cnt-06.ottbin0 -> 8886 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/it/cnt-061.ottbin0 -> 8868 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/it/cnt-062.ottbin0 -> 8760 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/it/cnt-default.ottbin0 -> 8888 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/it/stl-01.ottbin0 -> 38086 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/it/stl-02.ottbin0 -> 25263 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/it/stl-03.ottbin0 -> 47639 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/it/stl-04.ottbin0 -> 22725 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/it/stl-05.ottbin0 -> 47385 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/it/stl-06.ottbin0 -> 16692 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/it/stl-07.ottbin0 -> 7857 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/it/stl-08.ottbin0 -> 11498 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/it/stl-09.ottbin0 -> 51470 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/it/stl-default.ottbin0 -> 6923 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ja/cnt-01.ottbin0 -> 11484 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ja/cnt-011.ottbin0 -> 11505 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ja/cnt-012.ottbin0 -> 11384 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ja/cnt-02.ottbin0 -> 11448 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ja/cnt-021.ottbin0 -> 11509 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ja/cnt-022.ottbin0 -> 11334 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ja/cnt-03.ottbin0 -> 11772 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ja/cnt-031.ottbin0 -> 11805 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ja/cnt-032.ottbin0 -> 11647 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ja/cnt-04.ottbin0 -> 11826 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ja/cnt-041.ottbin0 -> 11850 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ja/cnt-042.ottbin0 -> 11683 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ja/cnt-05.ottbin0 -> 11353 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ja/cnt-051.ottbin0 -> 11557 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ja/cnt-052.ottbin0 -> 11508 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ja/cnt-06.ottbin0 -> 11620 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ja/cnt-061.ottbin0 -> 11645 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ja/cnt-062.ottbin0 -> 11510 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ja/cnt-default.ottbin0 -> 11693 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ja/stl-01.ottbin0 -> 41044 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ja/stl-02.ottbin0 -> 28184 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ja/stl-03.ottbin0 -> 50532 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ja/stl-04.ottbin0 -> 25686 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ja/stl-05.ottbin0 -> 50380 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ja/stl-06.ottbin0 -> 19615 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ja/stl-07.ottbin0 -> 10746 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ja/stl-08.ottbin0 -> 14405 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ja/stl-09.ottbin0 -> 54354 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ja/stl-default.ottbin0 -> 9831 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/km/cnt-01.ottbin0 -> 11316 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/km/cnt-011.ottbin0 -> 11255 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/km/cnt-012.ottbin0 -> 11240 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/km/cnt-02.ottbin0 -> 11144 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/km/cnt-021.ottbin0 -> 11207 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/km/cnt-022.ottbin0 -> 11074 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/km/cnt-03.ottbin0 -> 11699 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/km/cnt-031.ottbin0 -> 11457 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/km/cnt-032.ottbin0 -> 11599 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/km/cnt-04.ottbin0 -> 11751 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/km/cnt-041.ottbin0 -> 11864 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/km/cnt-042.ottbin0 -> 11603 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/km/cnt-05.ottbin0 -> 11084 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/km/cnt-051.ottbin0 -> 10950 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/km/cnt-052.ottbin0 -> 11132 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/km/cnt-06.ottbin0 -> 11457 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/km/cnt-061.ottbin0 -> 11331 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/km/cnt-062.ottbin0 -> 11383 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/km/cnt-default.ottbin0 -> 11264 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/km/stl-01.ottbin0 -> 37328 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/km/stl-02.ottbin0 -> 26732 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/km/stl-03.ottbin0 -> 47109 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/km/stl-04.ottbin0 -> 25395 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/km/stl-05.ottbin0 -> 47104 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/km/stl-06.ottbin0 -> 19041 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/km/stl-07.ottbin0 -> 9888 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/km/stl-08.ottbin0 -> 12584 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/km/stl-09.ottbin0 -> 50780 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/km/stl-default.ottbin0 -> 8411 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ko/cnt-01.ottbin0 -> 11441 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ko/cnt-011.ottbin0 -> 11456 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ko/cnt-012.ottbin0 -> 11362 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ko/cnt-02.ottbin0 -> 11444 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ko/cnt-021.ottbin0 -> 11484 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ko/cnt-022.ottbin0 -> 11335 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ko/cnt-03.ottbin0 -> 11709 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ko/cnt-031.ottbin0 -> 11760 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ko/cnt-032.ottbin0 -> 11621 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ko/cnt-04.ottbin0 -> 11754 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ko/cnt-041.ottbin0 -> 11757 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ko/cnt-042.ottbin0 -> 11630 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ko/cnt-05.ottbin0 -> 11334 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ko/cnt-051.ottbin0 -> 11385 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ko/cnt-052.ottbin0 -> 11305 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ko/cnt-06.ottbin0 -> 11549 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ko/cnt-061.ottbin0 -> 11583 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ko/cnt-062.ottbin0 -> 11490 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ko/cnt-default.ottbin0 -> 11679 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ko/stl-01.ottbin0 -> 41018 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ko/stl-02.ottbin0 -> 28159 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ko/stl-03.ottbin0 -> 50596 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ko/stl-04.ottbin0 -> 25674 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ko/stl-05.ottbin0 -> 50372 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ko/stl-06.ottbin0 -> 19619 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ko/stl-07.ottbin0 -> 10853 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ko/stl-08.ottbin0 -> 14379 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ko/stl-09.ottbin0 -> 54368 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ko/stl-default.ottbin0 -> 9817 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/makefile.mk49
-rw-r--r--extras/source/templates/wizard/report/lang/nl/cnt-01.ottbin0 -> 10157 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/nl/cnt-011.ottbin0 -> 10260 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/nl/cnt-012.ottbin0 -> 10126 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/nl/cnt-02.ottbin0 -> 10062 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/nl/cnt-021.ottbin0 -> 10083 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/nl/cnt-022.ottbin0 -> 9928 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/nl/cnt-03.ottbin0 -> 10660 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/nl/cnt-031.ottbin0 -> 10609 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/nl/cnt-032.ottbin0 -> 10542 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/nl/cnt-04.ottbin0 -> 10602 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/nl/cnt-041.ottbin0 -> 10520 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/nl/cnt-042.ottbin0 -> 10439 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/nl/cnt-05.ottbin0 -> 9738 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/nl/cnt-051.ottbin0 -> 9748 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/nl/cnt-052.ottbin0 -> 9839 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/nl/cnt-06.ottbin0 -> 10356 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/nl/cnt-061.ottbin0 -> 10322 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/nl/cnt-062.ottbin0 -> 10236 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/nl/cnt-default.ottbin0 -> 10290 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/nl/stl-01.ottbin0 -> 36988 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/nl/stl-02.ottbin0 -> 26139 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/nl/stl-03.ottbin0 -> 47719 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/nl/stl-04.ottbin0 -> 24307 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/nl/stl-05.ottbin0 -> 47456 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/nl/stl-06.ottbin0 -> 18359 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/nl/stl-07.ottbin0 -> 9140 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/nl/stl-08.ottbin0 -> 12513 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/nl/stl-09.ottbin0 -> 51480 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/nl/stl-default.ottbin0 -> 7803 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pl/cnt-01.ottbin0 -> 9366 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pl/cnt-011.ottbin0 -> 9366 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pl/cnt-012.ottbin0 -> 9275 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pl/cnt-02.ottbin0 -> 9304 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pl/cnt-021.ottbin0 -> 9364 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pl/cnt-022.ottbin0 -> 9194 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pl/cnt-03.ottbin0 -> 10117 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pl/cnt-031.ottbin0 -> 10098 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pl/cnt-032.ottbin0 -> 10031 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pl/cnt-04.ottbin0 -> 9785 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pl/cnt-041.ottbin0 -> 9822 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pl/cnt-042.ottbin0 -> 9679 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pl/cnt-05.ottbin0 -> 9188 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pl/cnt-051.ottbin0 -> 9248 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pl/cnt-052.ottbin0 -> 9278 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pl/cnt-06.ottbin0 -> 9492 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pl/cnt-061.ottbin0 -> 9482 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pl/cnt-062.ottbin0 -> 9380 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pl/cnt-default.ottbin0 -> 9477 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pl/stl-01.ottbin0 -> 38124 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pl/stl-02.ottbin0 -> 25929 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pl/stl-03.ottbin0 -> 47641 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pl/stl-04.ottbin0 -> 22600 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pl/stl-05.ottbin0 -> 47404 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pl/stl-06.ottbin0 -> 18088 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pl/stl-07.ottbin0 -> 8434 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pl/stl-08.ottbin0 -> 11784 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pl/stl-09.ottbin0 -> 51499 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pl/stl-default.ottbin0 -> 7545 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pt-BR/cnt-01.ottbin0 -> 8767 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pt-BR/cnt-011.ottbin0 -> 8820 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pt-BR/cnt-012.ottbin0 -> 8702 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pt-BR/cnt-02.ottbin0 -> 8725 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pt-BR/cnt-021.ottbin0 -> 8768 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pt-BR/cnt-022.ottbin0 -> 8605 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pt-BR/cnt-03.ottbin0 -> 9080 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pt-BR/cnt-031.ottbin0 -> 9061 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pt-BR/cnt-032.ottbin0 -> 8969 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pt-BR/cnt-04.ottbin0 -> 9104 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pt-BR/cnt-041.ottbin0 -> 9120 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pt-BR/cnt-042.ottbin0 -> 8996 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pt-BR/cnt-05.ottbin0 -> 8623 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pt-BR/cnt-051.ottbin0 -> 8660 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pt-BR/cnt-052.ottbin0 -> 8632 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pt-BR/cnt-06.ottbin0 -> 8908 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pt-BR/cnt-061.ottbin0 -> 8892 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pt-BR/cnt-062.ottbin0 -> 8775 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pt-BR/cnt-default.ottbin0 -> 8896 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pt-BR/stl-01.ottbin0 -> 35355 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pt-BR/stl-02.ottbin0 -> 25454 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pt-BR/stl-03.ottbin0 -> 45704 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pt-BR/stl-04.ottbin0 -> 22711 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pt-BR/stl-05.ottbin0 -> 45495 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pt-BR/stl-06.ottbin0 -> 16695 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pt-BR/stl-07.ottbin0 -> 7943 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pt-BR/stl-08.ottbin0 -> 11440 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pt-BR/stl-09.ottbin0 -> 48461 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pt-BR/stl-default.ottbin0 -> 6931 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pt/cnt-01.ottbin0 -> 11246 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pt/cnt-011.ottbin0 -> 11262 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pt/cnt-012.ottbin0 -> 11183 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pt/cnt-02.ottbin0 -> 11107 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pt/cnt-021.ottbin0 -> 11112 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pt/cnt-022.ottbin0 -> 10944 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pt/cnt-03.ottbin0 -> 11683 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pt/cnt-031.ottbin0 -> 11628 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pt/cnt-032.ottbin0 -> 11475 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pt/cnt-04.ottbin0 -> 11645 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pt/cnt-041.ottbin0 -> 11749 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pt/cnt-042.ottbin0 -> 11458 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pt/cnt-05.ottbin0 -> 10753 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pt/cnt-051.ottbin0 -> 10761 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pt/cnt-052.ottbin0 -> 10814 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pt/cnt-06.ottbin0 -> 11404 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pt/cnt-061.ottbin0 -> 11450 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pt/cnt-062.ottbin0 -> 11249 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pt/cnt-default.ottbin0 -> 11240 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pt/stl-01.ottbin0 -> 38394 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pt/stl-02.ottbin0 -> 27286 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pt/stl-03.ottbin0 -> 47749 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pt/stl-04.ottbin0 -> 25528 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pt/stl-05.ottbin0 -> 47677 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pt/stl-06.ottbin0 -> 19547 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pt/stl-07.ottbin0 -> 10488 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pt/stl-08.ottbin0 -> 13932 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pt/stl-09.ottbin0 -> 51649 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/pt/stl-default.ottbin0 -> 8912 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ru/cnt-01.ottbin0 -> 9703 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ru/cnt-011.ottbin0 -> 9772 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ru/cnt-012.ottbin0 -> 9627 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ru/cnt-02.ottbin0 -> 9703 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ru/cnt-021.ottbin0 -> 9746 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ru/cnt-022.ottbin0 -> 9572 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ru/cnt-03.ottbin0 -> 10057 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ru/cnt-031.ottbin0 -> 11196 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ru/cnt-032.ottbin0 -> 9911 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ru/cnt-04.ottbin0 -> 10140 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ru/cnt-041.ottbin0 -> 10260 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ru/cnt-042.ottbin0 -> 9964 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ru/cnt-05.ottbin0 -> 9551 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ru/cnt-051.ottbin0 -> 9589 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ru/cnt-052.ottbin0 -> 9557 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ru/cnt-06.ottbin0 -> 9847 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ru/cnt-061.ottbin0 -> 9794 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ru/cnt-062.ottbin0 -> 9684 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ru/cnt-default.ottbin0 -> 9847 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ru/stl-01.ottbin0 -> 37521 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ru/stl-02.ottbin0 -> 26592 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ru/stl-03.ottbin0 -> 47036 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ru/stl-04.ottbin0 -> 24746 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ru/stl-05.ottbin0 -> 47004 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ru/stl-06.ottbin0 -> 18766 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ru/stl-07.ottbin0 -> 9731 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ru/stl-08.ottbin0 -> 13117 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ru/stl-09.ottbin0 -> 50866 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/ru/stl-default.ottbin0 -> 8152 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sk/cnt-01.ottbin0 -> 9121 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sk/cnt-011.ottbin0 -> 9224 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sk/cnt-012.ottbin0 -> 9078 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sk/cnt-02.ottbin0 -> 9204 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sk/cnt-021.ottbin0 -> 9210 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sk/cnt-022.ottbin0 -> 8971 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sk/cnt-03.ottbin0 -> 9516 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sk/cnt-031.ottbin0 -> 9509 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sk/cnt-032.ottbin0 -> 9323 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sk/cnt-04.ottbin0 -> 9533 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sk/cnt-041.ottbin0 -> 9657 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sk/cnt-042.ottbin0 -> 9315 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sk/cnt-05.ottbin0 -> 8856 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sk/cnt-051.ottbin0 -> 8875 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sk/cnt-052.ottbin0 -> 8882 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sk/cnt-06.ottbin0 -> 9044 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sk/cnt-061.ottbin0 -> 8987 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sk/cnt-062.ottbin0 -> 9029 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sk/cnt-default.ottbin0 -> 9246 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sk/stl-01.ottbin0 -> 36603 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sk/stl-02.ottbin0 -> 25860 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sk/stl-03.ottbin0 -> 46251 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sk/stl-04.ottbin0 -> 23405 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sk/stl-05.ottbin0 -> 46218 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sk/stl-06.ottbin0 -> 18890 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sk/stl-07.ottbin0 -> 8333 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sk/stl-08.ottbin0 -> 11956 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sk/stl-09.ottbin0 -> 50068 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sk/stl-default.ottbin0 -> 7493 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sl/cnt-01.ottbin0 -> 9203 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sl/cnt-011.ottbin0 -> 9374 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sl/cnt-012.ottbin0 -> 9443 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sl/cnt-02.ottbin0 -> 9192 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sl/cnt-021.ottbin0 -> 9523 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sl/cnt-022.ottbin0 -> 9356 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sl/cnt-03.ottbin0 -> 9806 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sl/cnt-031.ottbin0 -> 9801 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sl/cnt-032.ottbin0 -> 9713 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sl/cnt-04.ottbin0 -> 9741 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sl/cnt-041.ottbin0 -> 9900 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sl/cnt-042.ottbin0 -> 9480 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sl/cnt-05.ottbin0 -> 9218 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sl/cnt-051.ottbin0 -> 9085 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sl/cnt-052.ottbin0 -> 9139 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sl/cnt-06.ottbin0 -> 9739 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sl/cnt-061.ottbin0 -> 9419 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sl/cnt-062.ottbin0 -> 9273 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sl/cnt-default.ottbin0 -> 9308 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sl/stl-01.ottbin0 -> 36900 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sl/stl-02.ottbin0 -> 25891 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sl/stl-03.ottbin0 -> 46338 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sl/stl-04.ottbin0 -> 24065 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sl/stl-05.ottbin0 -> 46255 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sl/stl-06.ottbin0 -> 18084 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sl/stl-07.ottbin0 -> 8470 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sl/stl-08.ottbin0 -> 12468 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sl/stl-09.ottbin0 -> 50207 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sl/stl-default.ottbin0 -> 7460 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sv/cnt-01.ottbin0 -> 8766 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sv/cnt-011.ottbin0 -> 8820 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sv/cnt-012.ottbin0 -> 8698 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sv/cnt-02.ottbin0 -> 8726 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sv/cnt-021.ottbin0 -> 8770 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sv/cnt-022.ottbin0 -> 8605 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sv/cnt-03.ottbin0 -> 9080 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sv/cnt-031.ottbin0 -> 9063 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sv/cnt-032.ottbin0 -> 8965 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sv/cnt-04.ottbin0 -> 9103 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sv/cnt-041.ottbin0 -> 9122 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sv/cnt-042.ottbin0 -> 8996 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sv/cnt-05.ottbin0 -> 8614 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sv/cnt-051.ottbin0 -> 8660 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sv/cnt-052.ottbin0 -> 8629 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sv/cnt-06.ottbin0 -> 8897 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sv/cnt-061.ottbin0 -> 8881 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sv/cnt-062.ottbin0 -> 8771 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sv/cnt-default.ottbin0 -> 8890 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sv/stl-01.ottbin0 -> 38087 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sv/stl-02.ottbin0 -> 25254 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sv/stl-03.ottbin0 -> 47673 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sv/stl-04.ottbin0 -> 22735 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sv/stl-05.ottbin0 -> 47420 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sv/stl-06.ottbin0 -> 16708 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sv/stl-07.ottbin0 -> 7867 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sv/stl-08.ottbin0 -> 11465 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sv/stl-09.ottbin0 -> 51466 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/sv/stl-default.ottbin0 -> 6911 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/vi/cnt-01.ottbin0 -> 11124 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/vi/cnt-011.ottbin0 -> 11124 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/vi/cnt-012.ottbin0 -> 11016 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/vi/cnt-02.ottbin0 -> 10967 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/vi/cnt-021.ottbin0 -> 10940 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/vi/cnt-022.ottbin0 -> 10790 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/vi/cnt-03.ottbin0 -> 11364 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/vi/cnt-031.ottbin0 -> 11364 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/vi/cnt-032.ottbin0 -> 11267 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/vi/cnt-04.ottbin0 -> 11449 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/vi/cnt-041.ottbin0 -> 11619 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/vi/cnt-042.ottbin0 -> 11362 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/vi/cnt-05.ottbin0 -> 10812 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/vi/cnt-051.ottbin0 -> 10685 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/vi/cnt-052.ottbin0 -> 10639 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/vi/cnt-06.ottbin0 -> 11509 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/vi/cnt-061.ottbin0 -> 11528 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/vi/cnt-062.ottbin0 -> 11336 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/vi/cnt-default.ottbin0 -> 11040 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/vi/stl-01.ottbin0 -> 38294 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/vi/stl-02.ottbin0 -> 27580 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/vi/stl-03.ottbin0 -> 48111 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/vi/stl-04.ottbin0 -> 28355 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/vi/stl-05.ottbin0 -> 48212 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/vi/stl-06.ottbin0 -> 20214 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/vi/stl-07.ottbin0 -> 9935 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/vi/stl-08.ottbin0 -> 13187 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/vi/stl-09.ottbin0 -> 51976 bytes
-rwxr-xr-xextras/source/templates/wizard/report/lang/vi/stl-default.ottbin0 -> 8804 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/zh-CN/cnt-01.ottbin0 -> 11723 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/zh-CN/cnt-011.ottbin0 -> 11740 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/zh-CN/cnt-012.ottbin0 -> 11646 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/zh-CN/cnt-02.ottbin0 -> 11730 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/zh-CN/cnt-021.ottbin0 -> 11771 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/zh-CN/cnt-022.ottbin0 -> 11619 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/zh-CN/cnt-03.ottbin0 -> 11929 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/zh-CN/cnt-031.ottbin0 -> 11990 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/zh-CN/cnt-032.ottbin0 -> 11846 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/zh-CN/cnt-04.ottbin0 -> 11984 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/zh-CN/cnt-041.ottbin0 -> 11983 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/zh-CN/cnt-042.ottbin0 -> 11863 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/zh-CN/cnt-05.ottbin0 -> 11634 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/zh-CN/cnt-051.ottbin0 -> 11684 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/zh-CN/cnt-052.ottbin0 -> 11599 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/zh-CN/cnt-06.ottbin0 -> 11776 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/zh-CN/cnt-061.ottbin0 -> 11808 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/zh-CN/cnt-062.ottbin0 -> 11716 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/zh-CN/cnt-default.ottbin0 -> 11859 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/zh-CN/stl-01.ottbin0 -> 40838 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/zh-CN/stl-02.ottbin0 -> 28127 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/zh-CN/stl-03.ottbin0 -> 50561 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/zh-CN/stl-04.ottbin0 -> 25631 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/zh-CN/stl-05.ottbin0 -> 50287 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/zh-CN/stl-06.ottbin0 -> 19586 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/zh-CN/stl-07.ottbin0 -> 10742 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/zh-CN/stl-08.ottbin0 -> 14293 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/zh-CN/stl-09.ottbin0 -> 54270 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/zh-CN/stl-default.ottbin0 -> 9777 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/zh-TW/cnt-01.ottbin0 -> 11721 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/zh-TW/cnt-011.ottbin0 -> 11738 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/zh-TW/cnt-012.ottbin0 -> 11638 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/zh-TW/cnt-02.ottbin0 -> 11728 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/zh-TW/cnt-021.ottbin0 -> 11769 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/zh-TW/cnt-022.ottbin0 -> 11613 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/zh-TW/cnt-03.ottbin0 -> 11928 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/zh-TW/cnt-031.ottbin0 -> 11987 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/zh-TW/cnt-032.ottbin0 -> 11841 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/zh-TW/cnt-04.ottbin0 -> 11975 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/zh-TW/cnt-041.ottbin0 -> 11981 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/zh-TW/cnt-042.ottbin0 -> 11853 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/zh-TW/cnt-05.ottbin0 -> 11629 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/zh-TW/cnt-051.ottbin0 -> 11681 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/zh-TW/cnt-052.ottbin0 -> 11594 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/zh-TW/cnt-06.ottbin0 -> 11783 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/zh-TW/cnt-061.ottbin0 -> 11804 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/zh-TW/cnt-062.ottbin0 -> 11712 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/zh-TW/cnt-default.ottbin0 -> 11858 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/zh-TW/stl-01.ottbin0 -> 40925 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/zh-TW/stl-02.ottbin0 -> 28113 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/zh-TW/stl-03.ottbin0 -> 50478 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/zh-TW/stl-04.ottbin0 -> 25627 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/zh-TW/stl-05.ottbin0 -> 50185 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/zh-TW/stl-06.ottbin0 -> 19581 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/zh-TW/stl-07.ottbin0 -> 10588 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/zh-TW/stl-08.ottbin0 -> 14278 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/zh-TW/stl-09.ottbin0 -> 54305 bytes
-rw-r--r--extras/source/templates/wizard/report/lang/zh-TW/stl-default.ottbin0 -> 9768 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/bg/black_white.otsbin0 -> 9627 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/bg/blackberry.otsbin0 -> 9854 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/bg/default.otsbin0 -> 9500 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/bg/diner.otsbin0 -> 9522 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/bg/fall.otsbin0 -> 8860 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/bg/glacier.otsbin0 -> 9548 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/bg/green_grapes.otsbin0 -> 9634 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/bg/jeans.otsbin0 -> 9514 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/bg/marine.otsbin0 -> 8723 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/bg/millennium.otsbin0 -> 9559 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/bg/nature.otsbin0 -> 9674 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/bg/neon.otsbin0 -> 9990 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/bg/night.otsbin0 -> 9941 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/bg/nostalgic.otsbin0 -> 9267 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/bg/pastell.otsbin0 -> 9532 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/bg/pool.otsbin0 -> 9959 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/bg/pumpkin.otsbin0 -> 9728 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/bg/xos.otsbin0 -> 9301 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/cs/black_white.otsbin0 -> 8249 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/cs/blackberry.otsbin0 -> 8165 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/cs/default.otsbin0 -> 8043 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/cs/diner.otsbin0 -> 8608 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/cs/fall.otsbin0 -> 8097 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/cs/glacier.otsbin0 -> 8203 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/cs/green_grapes.otsbin0 -> 8078 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/cs/jeans.otsbin0 -> 8084 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/cs/marine.otsbin0 -> 7969 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/cs/millennium.otsbin0 -> 8207 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/cs/nature.otsbin0 -> 8126 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/cs/neon.otsbin0 -> 8438 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/cs/night.otsbin0 -> 8219 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/cs/nostalgic.otsbin0 -> 8273 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/cs/pastell.otsbin0 -> 8187 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/cs/pool.otsbin0 -> 8383 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/cs/pumpkin.otsbin0 -> 8028 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/cs/xos.otsbin0 -> 8090 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/da/black_white.otsbin0 -> 8020 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/da/blackberry.otsbin0 -> 7947 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/da/default.otsbin0 -> 7806 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/da/diner.otsbin0 -> 8413 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/da/fall.otsbin0 -> 7878 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/da/glacier.otsbin0 -> 7976 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/da/green_grapes.otsbin0 -> 7842 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/da/jeans.otsbin0 -> 7879 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/da/marine.otsbin0 -> 7721 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/da/millennium.otsbin0 -> 7993 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/da/nature.otsbin0 -> 7898 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/da/neon.otsbin0 -> 8206 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/da/night.otsbin0 -> 7990 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/da/nostalgic.otsbin0 -> 8103 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/da/pastell.otsbin0 -> 7973 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/da/pool.otsbin0 -> 8157 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/da/pumpkin.otsbin0 -> 7797 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/da/xos.otsbin0 -> 7846 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/de/black_white.otsbin0 -> 8287 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/de/blackberry.otsbin0 -> 8240 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/de/default.otsbin0 -> 8114 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/de/diner.otsbin0 -> 8821 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/de/fall.otsbin0 -> 8100 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/de/glacier.otsbin0 -> 8290 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/de/green_grapes.otsbin0 -> 8078 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/de/jeans.otsbin0 -> 8214 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/de/marine.otsbin0 -> 8040 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/de/millennium.otsbin0 -> 8327 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/de/nature.otsbin0 -> 8158 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/de/neon.otsbin0 -> 8575 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/de/night.otsbin0 -> 8325 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/de/nostalgic.otsbin0 -> 8367 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/de/pastell.otsbin0 -> 8345 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/de/pool.otsbin0 -> 8513 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/de/pumpkin.otsbin0 -> 8186 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/de/xos.otsbin0 -> 8289 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/delzip0
-rw-r--r--extras/source/templates/wizard/styles/lang/en-GB/black_white.otsbin0 -> 9710 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/en-GB/blackberry.otsbin0 -> 9774 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/en-GB/default.otsbin0 -> 9698 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/en-GB/diner.otsbin0 -> 12195 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/en-GB/fall.otsbin0 -> 9375 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/en-GB/glacier.otsbin0 -> 9857 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/en-GB/green_grapes.otsbin0 -> 9436 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/en-GB/jeans.otsbin0 -> 9713 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/en-GB/marine.otsbin0 -> 9156 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/en-GB/millennium.otsbin0 -> 9685 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/en-GB/nature.otsbin0 -> 9502 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/en-GB/neon.otsbin0 -> 10133 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/en-GB/night.otsbin0 -> 10455 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/en-GB/nostalgic.otsbin0 -> 9605 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/en-GB/pastell.otsbin0 -> 9813 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/en-GB/pool.otsbin0 -> 10222 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/en-GB/pumpkin.otsbin0 -> 9474 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/en-GB/xos.otsbin0 -> 9054 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/en-US/black_white.otsbin0 -> 8204 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/en-US/blackberry.otsbin0 -> 8150 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/en-US/default.otsbin0 -> 8018 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/en-US/diner.otsbin0 -> 8590 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/en-US/fall.otsbin0 -> 8077 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/en-US/glacier.otsbin0 -> 8185 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/en-US/green_grapes.otsbin0 -> 8055 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/en-US/jeans.otsbin0 -> 8059 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/en-US/marine.otsbin0 -> 7941 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/en-US/millennium.otsbin0 -> 8189 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/en-US/nature.otsbin0 -> 8110 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/en-US/neon.otsbin0 -> 8421 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/en-US/night.otsbin0 -> 8201 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/en-US/nostalgic.otsbin0 -> 8260 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/en-US/pastell.otsbin0 -> 8160 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/en-US/pool.otsbin0 -> 8360 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/en-US/pumpkin.otsbin0 -> 8005 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/en-US/xos.otsbin0 -> 8072 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/es/black_white.otsbin0 -> 8202 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/es/blackberry.otsbin0 -> 7934 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/es/default.otsbin0 -> 7930 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/es/diner.otsbin0 -> 8423 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/es/fall.otsbin0 -> 7886 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/es/glacier.otsbin0 -> 8083 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/es/green_grapes.otsbin0 -> 7929 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/es/jeans.otsbin0 -> 7870 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/es/marine.otsbin0 -> 7784 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/es/millennium.otsbin0 -> 8035 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/es/nature.otsbin0 -> 8012 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/es/neon.otsbin0 -> 8276 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/es/night.otsbin0 -> 8088 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/es/nostalgic.otsbin0 -> 8248 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/es/pastell.otsbin0 -> 8002 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/es/pool.otsbin0 -> 8254 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/es/pumpkin.otsbin0 -> 7928 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/es/xos.otsbin0 -> 8069 bytes
-rwxr-xr-xextras/source/templates/wizard/styles/lang/eu/black_white.otsbin0 -> 11666 bytes
-rwxr-xr-xextras/source/templates/wizard/styles/lang/eu/blackberry.otsbin0 -> 12259 bytes
-rwxr-xr-xextras/source/templates/wizard/styles/lang/eu/default.otsbin0 -> 11939 bytes
-rwxr-xr-xextras/source/templates/wizard/styles/lang/eu/diner.otsbin0 -> 14377 bytes
-rwxr-xr-xextras/source/templates/wizard/styles/lang/eu/fall.otsbin0 -> 12185 bytes
-rwxr-xr-xextras/source/templates/wizard/styles/lang/eu/glacier.otsbin0 -> 12233 bytes
-rwxr-xr-xextras/source/templates/wizard/styles/lang/eu/green_grapes.otsbin0 -> 11853 bytes
-rwxr-xr-xextras/source/templates/wizard/styles/lang/eu/jeans.otsbin0 -> 12003 bytes
-rwxr-xr-xextras/source/templates/wizard/styles/lang/eu/marine.otsbin0 -> 11705 bytes
-rwxr-xr-xextras/source/templates/wizard/styles/lang/eu/millennium.otsbin0 -> 12044 bytes
-rwxr-xr-xextras/source/templates/wizard/styles/lang/eu/nature.otsbin0 -> 12050 bytes
-rwxr-xr-xextras/source/templates/wizard/styles/lang/eu/neon.otsbin0 -> 12676 bytes
-rwxr-xr-xextras/source/templates/wizard/styles/lang/eu/night.otsbin0 -> 12630 bytes
-rwxr-xr-xextras/source/templates/wizard/styles/lang/eu/nostalgic.otsbin0 -> 10732 bytes
-rwxr-xr-xextras/source/templates/wizard/styles/lang/eu/pastell.otsbin0 -> 12021 bytes
-rwxr-xr-xextras/source/templates/wizard/styles/lang/eu/pool.otsbin0 -> 12656 bytes
-rwxr-xr-xextras/source/templates/wizard/styles/lang/eu/pumpkin.otsbin0 -> 12273 bytes
-rwxr-xr-xextras/source/templates/wizard/styles/lang/eu/xos.otsbin0 -> 11616 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/fr/black_white.otsbin0 -> 7968 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/fr/blackberry.otsbin0 -> 7954 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/fr/default.otsbin0 -> 7863 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/fr/diner.otsbin0 -> 8408 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/fr/fall.otsbin0 -> 7967 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/fr/glacier.otsbin0 -> 7996 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/fr/green_grapes.otsbin0 -> 7833 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/fr/jeans.otsbin0 -> 7954 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/fr/marine.otsbin0 -> 7842 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/fr/millennium.otsbin0 -> 8072 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/fr/nature.otsbin0 -> 7897 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/fr/neon.otsbin0 -> 8121 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/fr/night.otsbin0 -> 7969 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/fr/nostalgic.otsbin0 -> 8142 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/fr/pastell.otsbin0 -> 8022 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/fr/pool.otsbin0 -> 8136 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/fr/pumpkin.otsbin0 -> 7893 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/fr/xos.otsbin0 -> 8049 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/hu/black_white.otsbin0 -> 9996 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/hu/blackberry.otsbin0 -> 10256 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/hu/default.otsbin0 -> 10095 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/hu/diner.otsbin0 -> 12306 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/hu/fall.otsbin0 -> 9530 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/hu/glacier.otsbin0 -> 10259 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/hu/green_grapes.otsbin0 -> 9841 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/hu/jeans.otsbin0 -> 10116 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/hu/marine.otsbin0 -> 9467 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/hu/millennium.otsbin0 -> 10014 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/hu/nature.otsbin0 -> 9847 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/hu/neon.otsbin0 -> 10740 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/hu/night.otsbin0 -> 10616 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/hu/nostalgic.otsbin0 -> 9949 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/hu/pastell.otsbin0 -> 10129 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/hu/pool.otsbin0 -> 10620 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/hu/pumpkin.otsbin0 -> 9868 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/hu/xos.otsbin0 -> 9391 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/it/black_white.otsbin0 -> 8106 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/it/blackberry.otsbin0 -> 7696 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/it/default.otsbin0 -> 7921 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/it/diner.otsbin0 -> 8626 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/it/fall.otsbin0 -> 7961 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/it/glacier.otsbin0 -> 8181 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/it/green_grapes.otsbin0 -> 7611 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/it/jeans.otsbin0 -> 8080 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/it/marine.otsbin0 -> 7957 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/it/millennium.otsbin0 -> 7773 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/it/nature.otsbin0 -> 7684 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/it/neon.otsbin0 -> 8290 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/it/night.otsbin0 -> 8119 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/it/nostalgic.otsbin0 -> 8194 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/it/pastell.otsbin0 -> 7801 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/it/pool.otsbin0 -> 8325 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/it/pumpkin.otsbin0 -> 7655 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/it/xos.otsbin0 -> 8213 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/ja/black_white.otsbin0 -> 8483 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/ja/blackberry.otsbin0 -> 8308 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/ja/default.otsbin0 -> 8266 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/ja/diner.otsbin0 -> 8655 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/ja/fall.otsbin0 -> 8310 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/ja/glacier.otsbin0 -> 8458 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/ja/green_grapes.otsbin0 -> 8159 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/ja/jeans.otsbin0 -> 8414 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/ja/marine.otsbin0 -> 8160 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/ja/millennium.otsbin0 -> 8388 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/ja/nature.otsbin0 -> 8213 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/ja/neon.otsbin0 -> 8521 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/ja/night.otsbin0 -> 8455 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/ja/nostalgic.otsbin0 -> 8591 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/ja/pastell.otsbin0 -> 8443 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/ja/pool.otsbin0 -> 8579 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/ja/pumpkin.otsbin0 -> 8186 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/ja/xos.otsbin0 -> 8453 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/km/black_white.otsbin0 -> 11108 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/km/blackberry.otsbin0 -> 11416 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/km/default.otsbin0 -> 11153 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/km/diner.otsbin0 -> 12436 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/km/fall.otsbin0 -> 11223 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/km/glacier.otsbin0 -> 11499 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/km/green_grapes.otsbin0 -> 10882 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/km/jeans.otsbin0 -> 10985 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/km/marine.otsbin0 -> 11056 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/km/millennium.otsbin0 -> 11279 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/km/nature.otsbin0 -> 11016 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/km/neon.otsbin0 -> 11886 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/km/night.otsbin0 -> 11749 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/km/nostalgic.otsbin0 -> 11487 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/km/pastell.otsbin0 -> 10891 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/km/pool.otsbin0 -> 11706 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/km/pumpkin.otsbin0 -> 10942 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/km/xos.otsbin0 -> 10931 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/ko/black_white.otsbin0 -> 8461 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/ko/blackberry.otsbin0 -> 8361 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/ko/default.otsbin0 -> 8219 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/ko/diner.otsbin0 -> 8731 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/ko/fall.otsbin0 -> 8256 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/ko/glacier.otsbin0 -> 8409 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/ko/green_grapes.otsbin0 -> 8235 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/ko/jeans.otsbin0 -> 8319 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/ko/marine.otsbin0 -> 8135 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/ko/millennium.otsbin0 -> 8384 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/ko/nature.otsbin0 -> 8263 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/ko/neon.otsbin0 -> 8508 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/ko/night.otsbin0 -> 8411 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/ko/nostalgic.otsbin0 -> 8552 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/ko/pastell.otsbin0 -> 8381 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/ko/pool.otsbin0 -> 8523 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/ko/pumpkin.otsbin0 -> 8258 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/ko/xos.otsbin0 -> 8342 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/makefile.mk45
-rw-r--r--extras/source/templates/wizard/styles/lang/nl/black_white.otsbin0 -> 7867 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/nl/blackberry.otsbin0 -> 7814 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/nl/default.otsbin0 -> 7766 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/nl/diner.otsbin0 -> 8187 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/nl/fall.otsbin0 -> 7714 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/nl/glacier.otsbin0 -> 7902 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/nl/green_grapes.otsbin0 -> 7711 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/nl/jeans.otsbin0 -> 7750 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/nl/marine.otsbin0 -> 7605 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/nl/millennium.otsbin0 -> 7878 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/nl/nature.otsbin0 -> 7777 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/nl/neon.otsbin0 -> 8000 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/nl/night.otsbin0 -> 7894 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/nl/nostalgic.otsbin0 -> 7960 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/nl/pastell.otsbin0 -> 7890 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/nl/pool.otsbin0 -> 8118 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/nl/pumpkin.otsbin0 -> 7766 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/nl/xos.otsbin0 -> 7874 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/pl/black_white.otsbin0 -> 8198 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/pl/blackberry.otsbin0 -> 8017 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/pl/default.otsbin0 -> 7908 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/pl/diner.otsbin0 -> 8561 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/pl/fall.otsbin0 -> 7908 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/pl/glacier.otsbin0 -> 8021 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/pl/green_grapes.otsbin0 -> 7886 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/pl/jeans.otsbin0 -> 7853 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/pl/marine.otsbin0 -> 7787 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/pl/millennium.otsbin0 -> 7996 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/pl/nature.otsbin0 -> 7895 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/pl/neon.otsbin0 -> 8152 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/pl/night.otsbin0 -> 8025 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/pl/nostalgic.otsbin0 -> 8332 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/pl/pastell.otsbin0 -> 7997 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/pl/pool.otsbin0 -> 8371 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/pl/pumpkin.otsbin0 -> 7920 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/pl/xos.otsbin0 -> 8040 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/pt-BR/black_white.otsbin0 -> 8261 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/pt-BR/blackberry.otsbin0 -> 8243 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/pt-BR/default.otsbin0 -> 8137 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/pt-BR/diner.otsbin0 -> 8774 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/pt-BR/fall.otsbin0 -> 8213 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/pt-BR/glacier.otsbin0 -> 8299 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/pt-BR/green_grapes.otsbin0 -> 8153 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/pt-BR/jeans.otsbin0 -> 8195 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/pt-BR/marine.otsbin0 -> 8123 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/pt-BR/millennium.otsbin0 -> 8395 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/pt-BR/nature.otsbin0 -> 8223 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/pt-BR/neon.otsbin0 -> 8479 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/pt-BR/night.otsbin0 -> 8315 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/pt-BR/nostalgic.otsbin0 -> 8391 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/pt-BR/pastell.otsbin0 -> 8329 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/pt-BR/pool.otsbin0 -> 8446 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/pt-BR/pumpkin.otsbin0 -> 8203 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/pt-BR/xos.otsbin0 -> 8378 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/pt/black_white.otsbin0 -> 8017 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/pt/blackberry.otsbin0 -> 7912 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/pt/default.otsbin0 -> 7842 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/pt/diner.otsbin0 -> 8344 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/pt/fall.otsbin0 -> 8027 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/pt/glacier.otsbin0 -> 8004 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/pt/green_grapes.otsbin0 -> 7845 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/pt/jeans.otsbin0 -> 7885 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/pt/marine.otsbin0 -> 7873 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/pt/millennium.otsbin0 -> 8109 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/pt/nature.otsbin0 -> 7910 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/pt/neon.otsbin0 -> 8310 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/pt/night.otsbin0 -> 8013 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/pt/nostalgic.otsbin0 -> 8078 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/pt/pastell.otsbin0 -> 7981 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/pt/pool.otsbin0 -> 8203 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/pt/pumpkin.otsbin0 -> 7929 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/pt/xos.otsbin0 -> 8086 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/ru/black_white.otsbin0 -> 8177 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/ru/blackberry.otsbin0 -> 8031 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/ru/default.otsbin0 -> 7923 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/ru/diner.otsbin0 -> 8515 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/ru/fall.otsbin0 -> 8165 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/ru/glacier.otsbin0 -> 8063 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/ru/green_grapes.otsbin0 -> 7979 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/ru/jeans.otsbin0 -> 8076 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/ru/marine.otsbin0 -> 8054 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/ru/millennium.otsbin0 -> 8210 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/ru/nature.otsbin0 -> 8006 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/ru/neon.otsbin0 -> 8379 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/ru/night.otsbin0 -> 8075 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/ru/nostalgic.otsbin0 -> 8220 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/ru/pastell.otsbin0 -> 8108 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/ru/pool.otsbin0 -> 8229 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/ru/pumpkin.otsbin0 -> 7929 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/ru/xos.otsbin0 -> 8138 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/sk/black_white.otsbin0 -> 9208 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/sk/blackberry.otsbin0 -> 9339 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/sk/default.otsbin0 -> 9055 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/sk/diner.otsbin0 -> 11420 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/sk/fall.otsbin0 -> 8635 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/sk/glacier.otsbin0 -> 9298 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/sk/green_grapes.otsbin0 -> 9177 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/sk/jeans.otsbin0 -> 9119 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/sk/marine.otsbin0 -> 8554 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/sk/millennium.otsbin0 -> 9270 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/sk/nature.otsbin0 -> 9275 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/sk/neon.otsbin0 -> 9533 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/sk/night.otsbin0 -> 9599 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/sk/nostalgic.otsbin0 -> 9123 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/sk/pastell.otsbin0 -> 9180 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/sk/pool.otsbin0 -> 9570 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/sk/pumpkin.otsbin0 -> 9264 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/sk/xos.otsbin0 -> 8795 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/sl/black_white.otsbin0 -> 8644 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/sl/blackberry.otsbin0 -> 8499 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/sl/default.otsbin0 -> 8507 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/sl/diner.otsbin0 -> 8906 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/sl/fall.otsbin0 -> 8566 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/sl/glacier.otsbin0 -> 8590 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/sl/green_grapes.otsbin0 -> 8372 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/sl/jeans.otsbin0 -> 8391 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/sl/marine.otsbin0 -> 8497 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/sl/millennium.otsbin0 -> 8512 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/sl/nature.otsbin0 -> 8433 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/sl/neon.otsbin0 -> 8841 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/sl/night.otsbin0 -> 8615 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/sl/nostalgic.otsbin0 -> 8695 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/sl/pastell.otsbin0 -> 8581 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/sl/pool.otsbin0 -> 8802 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/sl/pumpkin.otsbin0 -> 8388 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/sl/xos.otsbin0 -> 8685 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/sv/black_white.otsbin0 -> 8182 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/sv/blackberry.otsbin0 -> 8199 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/sv/default.otsbin0 -> 8059 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/sv/diner.otsbin0 -> 8661 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/sv/fall.otsbin0 -> 8010 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/sv/glacier.otsbin0 -> 8237 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/sv/green_grapes.otsbin0 -> 8070 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/sv/jeans.otsbin0 -> 8097 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/sv/marine.otsbin0 -> 7950 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/sv/millennium.otsbin0 -> 8237 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/sv/nature.otsbin0 -> 8096 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/sv/neon.otsbin0 -> 8442 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/sv/night.otsbin0 -> 8264 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/sv/nostalgic.otsbin0 -> 8210 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/sv/pastell.otsbin0 -> 8200 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/sv/pool.otsbin0 -> 8419 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/sv/pumpkin.otsbin0 -> 8109 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/sv/xos.otsbin0 -> 8237 bytes
-rwxr-xr-xextras/source/templates/wizard/styles/lang/vi/black_white.otsbin0 -> 11371 bytes
-rwxr-xr-xextras/source/templates/wizard/styles/lang/vi/blackberry.otsbin0 -> 11347 bytes
-rwxr-xr-xextras/source/templates/wizard/styles/lang/vi/default.otsbin0 -> 11174 bytes
-rwxr-xr-xextras/source/templates/wizard/styles/lang/vi/diner.otsbin0 -> 14551 bytes
-rwxr-xr-xextras/source/templates/wizard/styles/lang/vi/fall.otsbin0 -> 10880 bytes
-rwxr-xr-xextras/source/templates/wizard/styles/lang/vi/glacier.otsbin0 -> 11410 bytes
-rwxr-xr-xextras/source/templates/wizard/styles/lang/vi/green_grapes.otsbin0 -> 11477 bytes
-rwxr-xr-xextras/source/templates/wizard/styles/lang/vi/jeans.otsbin0 -> 11891 bytes
-rwxr-xr-xextras/source/templates/wizard/styles/lang/vi/marine.otsbin0 -> 10849 bytes
-rwxr-xr-xextras/source/templates/wizard/styles/lang/vi/millennium.otsbin0 -> 10892 bytes
-rwxr-xr-xextras/source/templates/wizard/styles/lang/vi/nature.otsbin0 -> 11306 bytes
-rwxr-xr-xextras/source/templates/wizard/styles/lang/vi/neon.otsbin0 -> 11900 bytes
-rwxr-xr-xextras/source/templates/wizard/styles/lang/vi/night.otsbin0 -> 12036 bytes
-rwxr-xr-xextras/source/templates/wizard/styles/lang/vi/nostalgic.otsbin0 -> 10889 bytes
-rwxr-xr-xextras/source/templates/wizard/styles/lang/vi/pastell.otsbin0 -> 11216 bytes
-rwxr-xr-xextras/source/templates/wizard/styles/lang/vi/pool.otsbin0 -> 11498 bytes
-rwxr-xr-xextras/source/templates/wizard/styles/lang/vi/pumpkin.otsbin0 -> 11236 bytes
-rwxr-xr-xextras/source/templates/wizard/styles/lang/vi/xos.otsbin0 -> 10864 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/zh-CN/black_white.otsbin0 -> 8351 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/zh-CN/blackberry.otsbin0 -> 8199 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/zh-CN/default.otsbin0 -> 8050 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/zh-CN/diner.otsbin0 -> 8596 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/zh-CN/fall.otsbin0 -> 8099 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/zh-CN/glacier.otsbin0 -> 8258 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/zh-CN/green_grapes.otsbin0 -> 8065 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/zh-CN/jeans.otsbin0 -> 8198 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/zh-CN/marine.otsbin0 -> 7968 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/zh-CN/millennium.otsbin0 -> 8219 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/zh-CN/nature.otsbin0 -> 8160 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/zh-CN/neon.otsbin0 -> 8383 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/zh-CN/night.otsbin0 -> 8271 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/zh-CN/nostalgic.otsbin0 -> 8336 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/zh-CN/pastell.otsbin0 -> 8221 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/zh-CN/pool.otsbin0 -> 8360 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/zh-CN/pumpkin.otsbin0 -> 8141 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/zh-CN/xos.otsbin0 -> 8201 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/zh-TW/black_white.otsbin0 -> 8311 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/zh-TW/blackberry.otsbin0 -> 8109 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/zh-TW/default.otsbin0 -> 8078 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/zh-TW/diner.otsbin0 -> 8616 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/zh-TW/fall.otsbin0 -> 8096 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/zh-TW/glacier.otsbin0 -> 8234 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/zh-TW/green_grapes.otsbin0 -> 7988 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/zh-TW/jeans.otsbin0 -> 8148 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/zh-TW/marine.otsbin0 -> 7998 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/zh-TW/millennium.otsbin0 -> 8204 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/zh-TW/nature.otsbin0 -> 8097 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/zh-TW/neon.otsbin0 -> 8301 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/zh-TW/night.otsbin0 -> 8199 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/zh-TW/nostalgic.otsbin0 -> 8288 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/zh-TW/pastell.otsbin0 -> 8190 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/zh-TW/pool.otsbin0 -> 8302 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/zh-TW/pumpkin.otsbin0 -> 8026 bytes
-rw-r--r--extras/source/templates/wizard/styles/lang/zh-TW/xos.otsbin0 -> 8148 bytes
-rw-r--r--extras/source/templates/wizard/web/lang/bg/cnt-album.stwbin0 -> 12433 bytes
-rw-r--r--extras/source/templates/wizard/web/lang/bg/cnt-bilingual.stwbin0 -> 9428 bytes
-rw-r--r--extras/source/templates/wizard/web/lang/bg/cnt-chapters.stwbin0 -> 11164 bytes
-rw-r--r--extras/source/templates/wizard/web/lang/bg/cnt-empty.stwbin0 -> 7796 bytes
-rw-r--r--extras/source/templates/wizard/web/lang/bg/cnt-fixonecol.stwbin0 -> 10541 bytes
-rw-r--r--extras/source/templates/wizard/web/lang/bg/cnt-fixtwocol.stwbin0 -> 11025 bytes
-rw-r--r--extras/source/templates/wizard/web/lang/bg/cnt-formcontact.stwbin0 -> 8553 bytes
-rw-r--r--extras/source/templates/wizard/web/lang/bg/cnt-formcustomer.stwbin0 -> 8680 bytes
-rw-r--r--extras/source/templates/wizard/web/lang/bg/cnt-formfix.stwbin0 -> 8747 bytes
-rw-r--r--extras/source/templates/wizard/web/lang/bg/cnt-formvar.stwbin0 -> 8860 bytes
-rw-r--r--extras/source/templates/wizard/web/lang/bg/cnt-list.stwbin0 -> 12060 bytes
-rw-r--r--extras/source/templates/wizard/web/lang/bg/cnt-onepic.stwbin0 -> 13677 bytes
-rw-r--r--extras/source/templates/wizard/web/lang/bg/cnt-standard.stwbin0 -> 9223 bytes
-rw-r--r--extras/source/templates/wizard/web/lang/bg/cnt-twotitles.stwbin0 -> 10889 bytes
-rw-r--r--extras/source/templates/wizard/web/lang/bg/stl-banana.stwbin0 -> 9588 bytes
-rw-r--r--extras/source/templates/wizard/web/lang/bg/stl-blkjeans.stwbin0 -> 13366 bytes
-rw-r--r--extras/source/templates/wizard/web/lang/bg/stl-blue.stwbin0 -> 9525 bytes
-rw-r--r--extras/source/templates/wizard/web/lang/bg/stl-blueblock.stwbin0 -> 14050 bytes
-rw-r--r--extras/source/templates/wizard/web/lang/bg/stl-bluejeans.stwbin0 -> 14856 bytes
-rw-r--r--extras/source/templates/wizard/web/lang/bg/stl-fieryred.stwbin0 -> 13971 bytes
-rw-r--r--extras/source/templates/wizard/web/lang/bg/stl-hightech.stwbin0 -> 15868 bytes
-rw-r--r--extras/source/templates/wizard/web/lang/bg/stl-mint.stwbin0 -> 12165 bytes
-rw-r--r--extras/source/templates/wizard/web/lang/bg/stl-music.stwbin0 -> 11264 bytes
-rw-r--r--extras/source/templates/wizard/web/lang/bg/stl-nostalg.stwbin0 -> 9609 bytes
-rw-r--r--extras/source/templates/wizard/web/lang/bg/stl-orange.stwbin0 -> 9798 bytes
-rw-r--r--extras/source/templates/wizard/web/lang/bg/stl-petrol.stwbin0 -> 9726 bytes
-rw-r--r--extras/source/templates/wizard/web/lang/bg/stl-seventies.stwbin0 -> 12802 bytes
-rw-r--r--extras/source/templates/wizard/web/lang/bg/stl-standard.stwbin0 -> 13107 bytes
-rw-r--r--extras/source/templates/wizard/web/lang/bg/stl-strwbryice.stwbin0 -> 12415 bytes
-rw-r--r--extras/source/templates/wizard/web/lang/bg/stl-sun.stwbin0 -> 9615 bytes
-rw-r--r--extras/source/templates/wizard/web/lang/bg/stl-tracks.stwbin0 -> 11798 bytes
-rw-r--r--extras/source/templates/wizard/web/lang/bg/stl-turquoise.stwbin0 -> 9811 bytes
-rw-r--r--extras/source/templates/wizard/web/lang/bg/stl-wetblue.stwbin0 -> 13994 bytes
-rw-r--r--extras/source/templates/wizard/web/lang/delzip1
-rw-r--r--extras/source/templates/wizard/web/lang/makefile.mk46
-rw-r--r--extras/source/truetype/symbol/OpenSymbol.sfd107080
-rw-r--r--extras/source/truetype/symbol/opens___.ttfbin0 -> 206612 bytes
-rw-r--r--extras/source/wordbook/delzip2
-rw-r--r--extras/source/wordbook/lang/bg/soffice.dicbin0 -> 819 bytes
-rw-r--r--extras/source/wordbook/lang/cs/soffice.dicbin0 -> 819 bytes
-rw-r--r--extras/source/wordbook/lang/da/soffice.dicbin0 -> 819 bytes
-rw-r--r--extras/source/wordbook/lang/de/soffice.dicbin0 -> 1412 bytes
-rw-r--r--extras/source/wordbook/lang/delzip1
-rw-r--r--extras/source/wordbook/lang/en-GB/soffice.dicbin0 -> 819 bytes
-rw-r--r--extras/source/wordbook/lang/en-US/soffice.dicbin0 -> 819 bytes
-rw-r--r--extras/source/wordbook/lang/es/soffice.dicbin0 -> 819 bytes
-rwxr-xr-xextras/source/wordbook/lang/eu/soffice.dicbin0 -> 786 bytes
-rw-r--r--extras/source/wordbook/lang/fr/soffice.dicbin0 -> 819 bytes
-rwxr-xr-xextras/source/wordbook/lang/hu/soffice.dicbin0 -> 819 bytes
-rw-r--r--extras/source/wordbook/lang/it/soffice.dicbin0 -> 819 bytes
-rw-r--r--extras/source/wordbook/lang/makefile.mk47
-rw-r--r--extras/source/wordbook/lang/nl/soffice.dicbin0 -> 819 bytes
-rw-r--r--extras/source/wordbook/lang/pl/soffice.dicbin0 -> 819 bytes
-rw-r--r--extras/source/wordbook/lang/pt-BR/soffice.dicbin0 -> 819 bytes
-rw-r--r--extras/source/wordbook/lang/pt/soffice.dicbin0 -> 819 bytes
-rw-r--r--extras/source/wordbook/lang/ru/soffice.dicbin0 -> 819 bytes
-rw-r--r--extras/source/wordbook/lang/sk/soffice.dicbin0 -> 819 bytes
-rw-r--r--extras/source/wordbook/lang/sl/soffice.dicbin0 -> 1114 bytes
-rw-r--r--extras/source/wordbook/lang/sv/soffice.dicbin0 -> 810 bytes
-rw-r--r--extras/source/wordbook/makefile.mk57
-rw-r--r--extras/source/wordbook/oracle.dic626
-rw-r--r--extras/source/wordbook/standard.dic4
-rw-r--r--extras/unx/source/bitmaps/delzip1
-rw-r--r--extras/unx/source/bitmaps/makefile.mk47
-rw-r--r--extras/unx/source/bitmaps/psetup.xpm31
-rw-r--r--extras/unx/source/bitmaps/psetupl.xpm49
-rw-r--r--extras/unx/source/fonts/fonts.dir2
-rw-r--r--extras/unx/source/kde/applnk/.directory5
-rw-r--r--extras/unx/source/kde/applnk/SPAdmin.kdelnk23
-rw-r--r--extras/unx/source/kde/applnk/Setup.kdelnk14
-rw-r--r--extras/unx/source/kde/applnk/StarOffice.kdelnk14
-rw-r--r--extras/unx/source/kde/applnk/delzip1
-rw-r--r--extras/unx/source/kde/applnk/makefile.mk47
-rw-r--r--extras/unx/source/kde/icons/delzip1
-rw-r--r--extras/unx/source/kde/icons/htm.xpm52
-rw-r--r--extras/unx/source/kde/icons/html.xpm52
-rw-r--r--extras/unx/source/kde/icons/makefile.mk47
-rw-r--r--extras/unx/source/kde/icons/mini/delzip1
-rw-r--r--extras/unx/source/kde/icons/mini/htm.xpm36
-rw-r--r--extras/unx/source/kde/icons/mini/html.xpm36
-rw-r--r--extras/unx/source/kde/icons/mini/makefile.mk47
-rw-r--r--extras/unx/source/kde/icons/mini/psetup.xpm31
-rw-r--r--extras/unx/source/kde/icons/mini/sch.xpm36
-rw-r--r--extras/unx/source/kde/icons/mini/sda.xpm36
-rw-r--r--extras/unx/source/kde/icons/mini/sdc.xpm36
-rw-r--r--extras/unx/source/kde/icons/mini/sdd.xpm36
-rw-r--r--extras/unx/source/kde/icons/mini/sdf.xpm36
-rw-r--r--extras/unx/source/kde/icons/mini/sds.xpm36
-rw-r--r--extras/unx/source/kde/icons/mini/sdw.xpm36
-rw-r--r--extras/unx/source/kde/icons/mini/set52.xpm40
-rw-r--r--extras/unx/source/kde/icons/mini/sgl.xpm36
-rw-r--r--extras/unx/source/kde/icons/mini/smf.xpm36
-rw-r--r--extras/unx/source/kde/icons/mini/so52.xpm40
-rw-r--r--extras/unx/source/kde/icons/psetup.xpm49
-rw-r--r--extras/unx/source/kde/icons/sch.xpm52
-rw-r--r--extras/unx/source/kde/icons/sda.xpm52
-rw-r--r--extras/unx/source/kde/icons/sdc.xpm52
-rw-r--r--extras/unx/source/kde/icons/sdd.xpm52
-rw-r--r--extras/unx/source/kde/icons/sdf.xpm52
-rw-r--r--extras/unx/source/kde/icons/sds.xpm52
-rw-r--r--extras/unx/source/kde/icons/sdw.xpm52
-rw-r--r--extras/unx/source/kde/icons/set52.xpm52
-rw-r--r--extras/unx/source/kde/icons/sgl.xpm52
-rw-r--r--extras/unx/source/kde/icons/smf.xpm52
-rw-r--r--extras/unx/source/kde/icons/so52.xpm52
-rw-r--r--extras/unx/source/kde/mimelnk/application/delzip1
-rw-r--r--extras/unx/source/kde/mimelnk/application/makefile.mk47
-rw-r--r--extras/unx/source/kde/mimelnk/application/x-scalc.kdelnk10
-rw-r--r--extras/unx/source/kde/mimelnk/application/x-sda.kdelnk10
-rw-r--r--extras/unx/source/kde/mimelnk/application/x-sdf.kdelnk10
-rw-r--r--extras/unx/source/kde/mimelnk/application/x-sdraw.kdelnk10
-rw-r--r--extras/unx/source/kde/mimelnk/application/x-sds.kdelnk10
-rw-r--r--extras/unx/source/kde/mimelnk/application/x-sgl.kdelnk10
-rw-r--r--extras/unx/source/kde/mimelnk/application/x-smf.kdelnk10
-rw-r--r--extras/unx/source/kde/mimelnk/application/x-swriter.kdelnk21
-rw-r--r--extras/unx/source/kde/mimelnk/text/delzip1
-rw-r--r--extras/unx/source/kde/mimelnk/text/html.kdelnk10
-rw-r--r--extras/unx/source/kde/mimelnk/text/makefile.mk49
-rw-r--r--extras/util/target.pmk197
-rwxr-xr-xfetch_tarballs.sh162
-rw-r--r--fileaccess/prj/build.lst3
-rw-r--r--fileaccess/prj/d.lst5
-rw-r--r--fileaccess/source/FileAccess.cxx967
-rw-r--r--fileaccess/source/fileacc.xml62
-rw-r--r--fileaccess/source/makefile.mk68
-rw-r--r--filter/inc/filter.hrc66
-rw-r--r--filter/inc/filter/msfilter/countryid.hxx318
-rw-r--r--filter/inc/filter/msfilter/escherex.hxx1613
-rw-r--r--filter/inc/filter/msfilter/mscodec.hxx340
-rw-r--r--filter/inc/filter/msfilter/msdffimp.hxx861
-rw-r--r--filter/inc/filter/msfilter/msfilterdllapi.h41
-rw-r--r--filter/inc/filter/msfilter/msfiltertracer.hxx96
-rw-r--r--filter/inc/filter/msfilter/msocximex.hxx1420
-rw-r--r--filter/inc/filter/msfilter/msoleexp.hxx60
-rw-r--r--filter/inc/filter/msfilter/msvbahelper.hxx56
-rw-r--r--filter/inc/filter/msfilter/svdfppt.hxx1440
-rw-r--r--filter/inc/filter/msfilter/svxmsbas.hxx98
-rw-r--r--filter/inc/makefile.mk47
-rw-r--r--filter/inc/pch/precompiled_filter.cxx29
-rw-r--r--filter/inc/pch/precompiled_filter.hxx32
-rw-r--r--filter/prj/build.lst44
-rw-r--r--filter/prj/d.lst57
-rw-r--r--filter/qa/complex/filter/detection/typeDetection/Helper.java443
-rw-r--r--filter/qa/complex/filter/detection/typeDetection/TypeDetection.java559
-rw-r--r--filter/qa/complex/filter/detection/typeDetection/TypeDetection.props13
-rw-r--r--filter/qa/complex/filter/detection/typeDetection/files.csv117
-rw-r--r--filter/qa/complex/filter/detection/typeDetection/makefile.mk118
-rw-r--r--filter/qa/complex/filter/detection/typeDetection/preselectedFilter.csv6
-rw-r--r--filter/qa/complex/filter/detection/typeDetection/preselectedType.csv6
-rw-r--r--filter/qa/complex/filter/detection/typeDetection/serviceName.csv6
-rw-r--r--filter/qa/complex/filter/misc/FinalizedMandatoryTest.java307
-rw-r--r--filter/qa/complex/filter/misc/TypeDetection6FileFormat.java105
-rwxr-xr-xfilter/qa/complex/filter/misc/TypeDetection6FileFormat.xcu25
-rwxr-xr-xfilter/qa/complex/filter/misc/makefile.mk97
-rw-r--r--filter/source/config/cache/basecontainer.cxx638
-rw-r--r--filter/source/config/cache/basecontainer.hxx323
-rw-r--r--filter/source/config/cache/cacheitem.cxx443
-rw-r--r--filter/source/config/cache/cacheitem.hxx261
-rw-r--r--filter/source/config/cache/cacheupdatelistener.cxx246
-rw-r--r--filter/source/config/cache/cacheupdatelistener.hxx147
-rw-r--r--filter/source/config/cache/configflush.cxx168
-rw-r--r--filter/source/config/cache/configflush.hxx128
-rw-r--r--filter/source/config/cache/constant.hxx217
-rw-r--r--filter/source/config/cache/contenthandlerfactory.cxx201
-rw-r--r--filter/source/config/cache/contenthandlerfactory.hxx148
-rw-r--r--filter/source/config/cache/filtercache.cxx2536
-rw-r--r--filter/source/config/cache/filtercache.hxx1066
-rw-r--r--filter/source/config/cache/filterfactory.cxx724
-rw-r--r--filter/source/config/cache/filterfactory.hxx212
-rw-r--r--filter/source/config/cache/frameloaderfactory.cxx198
-rw-r--r--filter/source/config/cache/frameloaderfactory.hxx148
-rw-r--r--filter/source/config/cache/lateinitlistener.cxx136
-rw-r--r--filter/source/config/cache/lateinitlistener.hxx125
-rw-r--r--filter/source/config/cache/lateinitthread.cxx80
-rw-r--r--filter/source/config/cache/lateinitthread.hxx89
-rw-r--r--filter/source/config/cache/macros.hxx132
-rw-r--r--filter/source/config/cache/makefile.mk79
-rw-r--r--filter/source/config/cache/querytokenizer.cxx99
-rw-r--r--filter/source/config/cache/querytokenizer.hxx115
-rw-r--r--filter/source/config/cache/registration.cxx147
-rw-r--r--filter/source/config/cache/registration.hxx214
-rw-r--r--filter/source/config/cache/typedetection.cxx1257
-rw-r--r--filter/source/config/cache/typedetection.hxx459
-rw-r--r--filter/source/config/cache/versions.hxx36
-rw-r--r--filter/source/config/fragments/contenthandlers/com_sun_star_comp_framework_SoundHandler.xcu3
-rw-r--r--filter/source/config/fragments/contenthandlers/com_sun_star_comp_framework_oxt_handler.xcu3
-rw-r--r--filter/source/config/fragments/delzip0
-rw-r--r--filter/source/config/fragments/fcfg_base.mk51
-rw-r--r--filter/source/config/fragments/fcfg_calc.mk108
-rw-r--r--filter/source/config/fragments/fcfg_calc_bf.mk59
-rw-r--r--filter/source/config/fragments/fcfg_chart.mk48
-rw-r--r--filter/source/config/fragments/fcfg_chart_bf.mk47
-rw-r--r--filter/source/config/fragments/fcfg_database.mk45
-rw-r--r--filter/source/config/fragments/fcfg_draw.mk56
-rw-r--r--filter/source/config/fragments/fcfg_draw_bf.mk51
-rw-r--r--filter/source/config/fragments/fcfg_drawgraphics.mk117
-rw-r--r--filter/source/config/fragments/fcfg_global.mk59
-rw-r--r--filter/source/config/fragments/fcfg_global_bf.mk55
-rw-r--r--filter/source/config/fragments/fcfg_impress.mk75
-rw-r--r--filter/source/config/fragments/fcfg_impress_bf.mk66
-rw-r--r--filter/source/config/fragments/fcfg_impressgraphics.mk83
-rw-r--r--filter/source/config/fragments/fcfg_internalgraphics.mk109
-rw-r--r--filter/source/config/fragments/fcfg_math.mk55
-rw-r--r--filter/source/config/fragments/fcfg_math_bf.mk50
-rw-r--r--filter/source/config/fragments/fcfg_palm.mk44
-rw-r--r--filter/source/config/fragments/fcfg_pocketexcel.mk44
-rw-r--r--filter/source/config/fragments/fcfg_pocketword.mk44
-rw-r--r--filter/source/config/fragments/fcfg_w4w.mk260
-rw-r--r--filter/source/config/fragments/fcfg_web.mk65
-rw-r--r--filter/source/config/fragments/fcfg_web_bf.mk54
-rw-r--r--filter/source/config/fragments/fcfg_writer.mk106
-rw-r--r--filter/source/config/fragments/fcfg_writer_bf.mk63
-rw-r--r--filter/source/config/fragments/fcfg_xslt.mk55
-rw-r--r--filter/source/config/fragments/filters/Ami_Pro_1_x_3_1__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/AportisDoc_Palm_DB.xcu13
-rw-r--r--filter/source/config/fragments/filters/BMP___MS_Windows.xcu13
-rw-r--r--filter/source/config/fragments/filters/CGM___Computer_Graphics_Metafile.xcu13
-rw-r--r--filter/source/config/fragments/filters/CTOS_DEF__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/Claris_Works__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/DCA_FFT_Final_Form_Text__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/DCA_Revisable_Form_Text__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/DCA_with_Display_Write_5__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/DEC_DX__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/DEC_WPS_PLUS__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/DIF.xcu13
-rw-r--r--filter/source/config/fragments/filters/DXF___AutoCAD_Interchange.xcu13
-rw-r--r--filter/source/config/fragments/filters/DataGeneral_CEO_Write__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/DisplayWrite_2_0_4_x__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/DisplayWrite_5_x__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/DocBook_File.xcu13
-rw-r--r--filter/source/config/fragments/filters/EBCDIC__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/EMF___MS_Windows_Metafile.xcu13
-rw-r--r--filter/source/config/fragments/filters/EPS___Encapsulated_PostScript.xcu13
-rw-r--r--filter/source/config/fragments/filters/Enable__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/Frame_Maker_MIF_3_0__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/Frame_Maker_MIF_4_0__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/Frame_Maker_MIF_5_0__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/Frame_Work_III__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/Frame_Work_IV___W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/GIF___Graphics_Interchange.xcu13
-rw-r--r--filter/source/config/fragments/filters/HP_AdvanceWrite_Plus__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/HTML.xcu10
-rw-r--r--filter/source/config/fragments/filters/HTML_MasterDoc.xcu13
-rw-r--r--filter/source/config/fragments/filters/HTML_MasterDoc_ui.xcu5
-rw-r--r--filter/source/config/fragments/filters/HTML__StarCalc_.xcu10
-rw-r--r--filter/source/config/fragments/filters/HTML__StarCalc__ui.xcu6
-rw-r--r--filter/source/config/fragments/filters/HTML__StarWriter_.xcu10
-rw-r--r--filter/source/config/fragments/filters/HTML__StarWriter__ui.xcu6
-rw-r--r--filter/source/config/fragments/filters/HTML_ui.xcu6
-rw-r--r--filter/source/config/fragments/filters/ICL_Office_Power_6__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/ICL_Office_Power_7__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/Interleaf_5___6__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/Interleaf__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/JPG___JPEG.xcu13
-rw-r--r--filter/source/config/fragments/filters/Legacy_Winstar_onGO__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/Lotus.xcu13
-rw-r--r--filter/source/config/fragments/filters/Lotus_1_2_3_1_0__DOS___StarWriter_.xcu13
-rw-r--r--filter/source/config/fragments/filters/Lotus_1_2_3_1_0__WIN___StarWriter_.xcu13
-rw-r--r--filter/source/config/fragments/filters/Lotus_Manuscript__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/MASS_11_Rel__8_0_8_3__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/MASS_11_Rel__8_5_9_0__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/MET___OS_2_Metafile.xcu13
-rw-r--r--filter/source/config/fragments/filters/MS_Excel_2003_XML.xcu10
-rw-r--r--filter/source/config/fragments/filters/MS_Excel_2003_XML_ui.xcu12
-rw-r--r--filter/source/config/fragments/filters/MS_Excel_4_0.xcu13
-rw-r--r--filter/source/config/fragments/filters/MS_Excel_4_0_Vorlage_Template.xcu10
-rw-r--r--filter/source/config/fragments/filters/MS_Excel_4_0_Vorlage_Template_ui.xcu6
-rw-r--r--filter/source/config/fragments/filters/MS_Excel_4_0__StarWriter_.xcu13
-rw-r--r--filter/source/config/fragments/filters/MS_Excel_5_0_95.xcu13
-rw-r--r--filter/source/config/fragments/filters/MS_Excel_5_0_95_Vorlage_Template.xcu10
-rw-r--r--filter/source/config/fragments/filters/MS_Excel_5_0_95_Vorlage_Template_ui.xcu6
-rw-r--r--filter/source/config/fragments/filters/MS_Excel_5_0__StarWriter_.xcu13
-rw-r--r--filter/source/config/fragments/filters/MS_Excel_95.xcu13
-rw-r--r--filter/source/config/fragments/filters/MS_Excel_95_Vorlage_Template.xcu10
-rw-r--r--filter/source/config/fragments/filters/MS_Excel_95_Vorlage_Template_ui.xcu6
-rw-r--r--filter/source/config/fragments/filters/MS_Excel_95__StarWriter_.xcu13
-rw-r--r--filter/source/config/fragments/filters/MS_Excel_97.xcu13
-rw-r--r--filter/source/config/fragments/filters/MS_Excel_97_Vorlage_Template.xcu10
-rw-r--r--filter/source/config/fragments/filters/MS_Excel_97_Vorlage_Template_ui.xcu6
-rw-r--r--filter/source/config/fragments/filters/MS_MacWord_3_0__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/MS_MacWord_4_0__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/MS_MacWord_5_x__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/MS_PowerPoint_97.xcu13
-rw-r--r--filter/source/config/fragments/filters/MS_PowerPoint_97_Vorlage.xcu10
-rw-r--r--filter/source/config/fragments/filters/MS_PowerPoint_97_Vorlage_ui.xcu6
-rw-r--r--filter/source/config/fragments/filters/MS_WinWord_1_x__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/MS_WinWord_2_x__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/MS_WinWord_5.xcu13
-rw-r--r--filter/source/config/fragments/filters/MS_WinWord_6_0.xcu13
-rw-r--r--filter/source/config/fragments/filters/MS_Word_2003_XML.xcu10
-rw-r--r--filter/source/config/fragments/filters/MS_Word_2003_XML_ui.xcu12
-rw-r--r--filter/source/config/fragments/filters/MS_Word_2007_XML.xcu13
-rw-r--r--filter/source/config/fragments/filters/MS_Word_2007_XML_Template.xcu13
-rw-r--r--filter/source/config/fragments/filters/MS_Word_2007_XML_Template_ui.xcu6
-rw-r--r--filter/source/config/fragments/filters/MS_Word_2007_XML_ui.xcu6
-rw-r--r--filter/source/config/fragments/filters/MS_Word_3_x__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/MS_Word_4_x__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/MS_Word_5_x__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/MS_Word_6_x__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/MS_Word_95.xcu13
-rw-r--r--filter/source/config/fragments/filters/MS_Word_95_Vorlage.xcu10
-rw-r--r--filter/source/config/fragments/filters/MS_Word_95_Vorlage_ui.xcu6
-rw-r--r--filter/source/config/fragments/filters/MS_Word_97.xcu13
-rw-r--r--filter/source/config/fragments/filters/MS_Word_97_Vorlage.xcu10
-rw-r--r--filter/source/config/fragments/filters/MS_Word_97_Vorlage_ui.xcu6
-rw-r--r--filter/source/config/fragments/filters/MS_Works_2_0_DOS__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/MS_Works_3_0_Win__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/MS_Works_4_0_Mac__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/Mac_Write_4_x_5_0__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/Mac_Write_II__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/Mac_Write_Pro__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/MathML_XML__Math_.xcu13
-rw-r--r--filter/source/config/fragments/filters/MathType_3_x.xcu13
-rw-r--r--filter/source/config/fragments/filters/MiniCalc__Palm_.xcu13
-rw-r--r--filter/source/config/fragments/filters/MultiMate_3_3__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/MultiMate_4__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/MultiMate_Adv__3_6__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/MultiMate_Adv__II_3_7__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/NAVY_DIF__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/OfficeWriter_4_0__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/OfficeWriter_5_0__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/OfficeWriter_6_x__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/PBM___Portable_Bitmap.xcu13
-rw-r--r--filter/source/config/fragments/filters/PCT___Mac_Pict.xcu13
-rw-r--r--filter/source/config/fragments/filters/PCX___Zsoft_Paintbrush.xcu13
-rw-r--r--filter/source/config/fragments/filters/PFS_First_Choice_1_0__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/PFS_First_Choice_2_0__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/PFS_First_Choice_3_0__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/PFS_Write__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/PGM___Portable_Graymap.xcu13
-rw-r--r--filter/source/config/fragments/filters/PNG___Portable_Network_Graphic.xcu13
-rw-r--r--filter/source/config/fragments/filters/PPM___Portable_Pixelmap.xcu13
-rw-r--r--filter/source/config/fragments/filters/PSD___Adobe_Photoshop.xcu13
-rw-r--r--filter/source/config/fragments/filters/Peach_Text__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/PocketWord_File.xcu13
-rw-r--r--filter/source/config/fragments/filters/Pocket_Excel.xcu13
-rw-r--r--filter/source/config/fragments/filters/Professional_Write_1_0__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/Professional_Write_2_x__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/Professional_Write_Plus__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/QPro.xcu13
-rw-r--r--filter/source/config/fragments/filters/Q_A_Write_1_0_3_0__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/Q_A_Write_4_0__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/RAS___Sun_Rasterfile.xcu13
-rw-r--r--filter/source/config/fragments/filters/Rapid_File_1_0__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/Rapid_File_1_2__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/Rich_Text_Format.xcu13
-rw-r--r--filter/source/config/fragments/filters/Rich_Text_Format__StarCalc_.xcu13
-rw-r--r--filter/source/config/fragments/filters/SGF___StarOffice_Writer_SGF.xcu13
-rw-r--r--filter/source/config/fragments/filters/SGV___StarDraw_2_0.xcu13
-rw-r--r--filter/source/config/fragments/filters/SVM___StarView_Metafile.xcu13
-rw-r--r--filter/source/config/fragments/filters/SYLK.xcu13
-rw-r--r--filter/source/config/fragments/filters/Samna_Word_IV_IV_Plus__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/StarCalc_1_0.xcu13
-rw-r--r--filter/source/config/fragments/filters/StarCalc_3_0.xcu13
-rw-r--r--filter/source/config/fragments/filters/StarCalc_3_0_Vorlage_Template.xcu10
-rw-r--r--filter/source/config/fragments/filters/StarCalc_3_0_Vorlage_Template_ui.xcu6
-rw-r--r--filter/source/config/fragments/filters/StarCalc_4_0.xcu13
-rw-r--r--filter/source/config/fragments/filters/StarCalc_4_0_Vorlage_Template.xcu10
-rw-r--r--filter/source/config/fragments/filters/StarCalc_4_0_Vorlage_Template_ui.xcu6
-rw-r--r--filter/source/config/fragments/filters/StarCalc_5_0.xcu13
-rw-r--r--filter/source/config/fragments/filters/StarCalc_5_0_Vorlage_Template.xcu10
-rw-r--r--filter/source/config/fragments/filters/StarCalc_5_0_Vorlage_Template_ui.xcu6
-rw-r--r--filter/source/config/fragments/filters/StarChart_3_0.xcu13
-rw-r--r--filter/source/config/fragments/filters/StarChart_4_0.xcu13
-rw-r--r--filter/source/config/fragments/filters/StarChart_5_0.xcu13
-rw-r--r--filter/source/config/fragments/filters/StarDraw_3_0.xcu13
-rw-r--r--filter/source/config/fragments/filters/StarDraw_3_0_Vorlage.xcu10
-rw-r--r--filter/source/config/fragments/filters/StarDraw_3_0_Vorlage__StarImpress_.xcu10
-rw-r--r--filter/source/config/fragments/filters/StarDraw_3_0_Vorlage__StarImpress__ui.xcu6
-rw-r--r--filter/source/config/fragments/filters/StarDraw_3_0_Vorlage_ui.xcu6
-rw-r--r--filter/source/config/fragments/filters/StarDraw_3_0__StarImpress_.xcu13
-rw-r--r--filter/source/config/fragments/filters/StarDraw_5_0.xcu13
-rw-r--r--filter/source/config/fragments/filters/StarDraw_5_0_Vorlage.xcu10
-rw-r--r--filter/source/config/fragments/filters/StarDraw_5_0_Vorlage__StarImpress_.xcu10
-rw-r--r--filter/source/config/fragments/filters/StarDraw_5_0_Vorlage__StarImpress__ui.xcu6
-rw-r--r--filter/source/config/fragments/filters/StarDraw_5_0_Vorlage_ui.xcu6
-rw-r--r--filter/source/config/fragments/filters/StarDraw_5_0__StarImpress_.xcu13
-rw-r--r--filter/source/config/fragments/filters/StarImpress_4_0.xcu13
-rw-r--r--filter/source/config/fragments/filters/StarImpress_4_0_Vorlage.xcu10
-rw-r--r--filter/source/config/fragments/filters/StarImpress_4_0_Vorlage_ui.xcu6
-rw-r--r--filter/source/config/fragments/filters/StarImpress_5_0.xcu13
-rw-r--r--filter/source/config/fragments/filters/StarImpress_5_0_Vorlage.xcu10
-rw-r--r--filter/source/config/fragments/filters/StarImpress_5_0_Vorlage_ui.xcu6
-rw-r--r--filter/source/config/fragments/filters/StarImpress_5_0__packed_.xcu13
-rw-r--r--filter/source/config/fragments/filters/StarImpress_5_0__packed__ui.xcu6
-rw-r--r--filter/source/config/fragments/filters/StarMath_2_0.xcu13
-rw-r--r--filter/source/config/fragments/filters/StarMath_3_0.xcu13
-rw-r--r--filter/source/config/fragments/filters/StarMath_4_0.xcu13
-rw-r--r--filter/source/config/fragments/filters/StarMath_5_0.xcu13
-rw-r--r--filter/source/config/fragments/filters/StarOffice_XML__Base_.xcu10
-rw-r--r--filter/source/config/fragments/filters/StarOffice_XML__Base__ui.xcu5
-rw-r--r--filter/source/config/fragments/filters/StarOffice_XML__Calc_.xcu10
-rw-r--r--filter/source/config/fragments/filters/StarOffice_XML__Calc__ui.xcu6
-rw-r--r--filter/source/config/fragments/filters/StarOffice_XML__Chart_.xcu10
-rw-r--r--filter/source/config/fragments/filters/StarOffice_XML__Chart__ui.xcu6
-rw-r--r--filter/source/config/fragments/filters/StarOffice_XML__Draw_.xcu10
-rw-r--r--filter/source/config/fragments/filters/StarOffice_XML__Draw__ui.xcu6
-rw-r--r--filter/source/config/fragments/filters/StarOffice_XML__Impress_.xcu10
-rw-r--r--filter/source/config/fragments/filters/StarOffice_XML__Impress__ui.xcu6
-rw-r--r--filter/source/config/fragments/filters/StarOffice_XML__Math_.xcu10
-rw-r--r--filter/source/config/fragments/filters/StarOffice_XML__Math__ui.xcu6
-rw-r--r--filter/source/config/fragments/filters/StarOffice_XML__Writer_.xcu10
-rw-r--r--filter/source/config/fragments/filters/StarOffice_XML__Writer__ui.xcu6
-rw-r--r--filter/source/config/fragments/filters/StarWriter_1_0.xcu13
-rw-r--r--filter/source/config/fragments/filters/StarWriter_2_0.xcu13
-rw-r--r--filter/source/config/fragments/filters/StarWriter_3_0.xcu13
-rw-r--r--filter/source/config/fragments/filters/StarWriter_3_0_Vorlage_Template.xcu10
-rw-r--r--filter/source/config/fragments/filters/StarWriter_3_0_Vorlage_Template_ui.xcu6
-rw-r--r--filter/source/config/fragments/filters/StarWriter_3_0__StarWriter_GlobalDocument_.xcu13
-rw-r--r--filter/source/config/fragments/filters/StarWriter_3_0__StarWriter_Web_.xcu13
-rw-r--r--filter/source/config/fragments/filters/StarWriter_4_0.xcu13
-rw-r--r--filter/source/config/fragments/filters/StarWriter_4_0_GlobalDocument.xcu10
-rw-r--r--filter/source/config/fragments/filters/StarWriter_4_0_GlobalDocument_ui.xcu6
-rw-r--r--filter/source/config/fragments/filters/StarWriter_4_0_Vorlage_Template.xcu10
-rw-r--r--filter/source/config/fragments/filters/StarWriter_4_0_Vorlage_Template_ui.xcu6
-rw-r--r--filter/source/config/fragments/filters/StarWriter_4_0__StarWriter_GlobalDocument_.xcu13
-rw-r--r--filter/source/config/fragments/filters/StarWriter_4_0__StarWriter_Web_.xcu13
-rw-r--r--filter/source/config/fragments/filters/StarWriter_5_0.xcu13
-rw-r--r--filter/source/config/fragments/filters/StarWriter_5_0_GlobalDocument.xcu10
-rw-r--r--filter/source/config/fragments/filters/StarWriter_5_0_GlobalDocument_ui.xcu6
-rw-r--r--filter/source/config/fragments/filters/StarWriter_5_0_Vorlage_Template.xcu10
-rw-r--r--filter/source/config/fragments/filters/StarWriter_5_0_Vorlage_Template_ui.xcu6
-rw-r--r--filter/source/config/fragments/filters/StarWriter_5_0__StarWriter_GlobalDocument_.xcu13
-rw-r--r--filter/source/config/fragments/filters/StarWriter_5_0__StarWriter_Web_.xcu13
-rw-r--r--filter/source/config/fragments/filters/StarWriter_DOS.xcu13
-rw-r--r--filter/source/config/fragments/filters/StarWriter_Web_4_0_Vorlage_Template.xcu10
-rw-r--r--filter/source/config/fragments/filters/StarWriter_Web_4_0_Vorlage_Template_ui.xcu6
-rw-r--r--filter/source/config/fragments/filters/StarWriter_Web_5_0_Vorlage_Template.xcu10
-rw-r--r--filter/source/config/fragments/filters/StarWriter_Web_5_0_Vorlage_Template_ui.xcu6
-rw-r--r--filter/source/config/fragments/filters/T602Document.xcu13
-rw-r--r--filter/source/config/fragments/filters/TGA___Truevision_TARGA.xcu13
-rw-r--r--filter/source/config/fragments/filters/TIF___Tag_Image_File.xcu13
-rw-r--r--filter/source/config/fragments/filters/Text.xcu10
-rw-r--r--filter/source/config/fragments/filters/Text__StarWriter_Web_.xcu10
-rw-r--r--filter/source/config/fragments/filters/Text__StarWriter_Web__ui.xcu6
-rw-r--r--filter/source/config/fragments/filters/Text___txt___csv__StarCalc_.xcu10
-rw-r--r--filter/source/config/fragments/filters/Text___txt___csv__StarCalc__ui.xcu6
-rw-r--r--filter/source/config/fragments/filters/Text__encoded_.xcu10
-rw-r--r--filter/source/config/fragments/filters/Text__encoded___StarWriter_GlobalDocument_.xcu10
-rw-r--r--filter/source/config/fragments/filters/Text__encoded___StarWriter_GlobalDocument__ui.xcu6
-rw-r--r--filter/source/config/fragments/filters/Text__encoded___StarWriter_Web_.xcu10
-rw-r--r--filter/source/config/fragments/filters/Text__encoded___StarWriter_Web__ui.xcu6
-rw-r--r--filter/source/config/fragments/filters/Text__encoded__ui.xcu6
-rw-r--r--filter/source/config/fragments/filters/Text_ui.xcu6
-rw-r--r--filter/source/config/fragments/filters/Total_Word__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/UOF_presentation.xcu13
-rw-r--r--filter/source/config/fragments/filters/UOF_presentation_ui.xcu13
-rw-r--r--filter/source/config/fragments/filters/UOF_spreadsheet.xcu13
-rw-r--r--filter/source/config/fragments/filters/UOF_spreadsheet_ui.xcu13
-rw-r--r--filter/source/config/fragments/filters/UOF_text.xcu13
-rw-r--r--filter/source/config/fragments/filters/UOF_text_ui.xcu13
-rw-r--r--filter/source/config/fragments/filters/Uniplex_V7_V8__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/Uniplex_onGO__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/VolksWriter_3_and_4__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/VolksWriter_Deluxe__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/WITA__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/WMF___MS_Windows_Metafile.xcu13
-rw-r--r--filter/source/config/fragments/filters/Wang_II_SWP__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/Wang_PC__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/Wang_WP_Plus__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/Win_Write_3_x__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/WiziWord_3_0__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/WordPerfect.xcu13
-rw-r--r--filter/source/config/fragments/filters/WordPerfect_4_1__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/WordPerfect_4_2__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/WordPerfect_5_0__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/WordPerfect_5_1__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/WordPerfect_6_0__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/WordPerfect_6_1__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/WordPerfect_Mac_1__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/WordPerfect_Mac_2__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/WordPerfect_Mac_3__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/WordPerfect__Win__5_1_5_2__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/WordPerfect__Win__6_0__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/WordPerfect__Win__6_1__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/WordPerfect__Win__7_0__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/WordStar_2000_Rel__3_0__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/WordStar_2000_Rel__3_5__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/WordStar_3_3x__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/WordStar_3_45__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/WordStar_4_0___W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/WordStar_5_0___W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/WordStar_5_5___W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/WordStar_6_0___W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/WordStar_7_0___W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/WordStar__Win__1_x_2_0__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/WriteNow_3_0__Macintosh___W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/Writing_Assistant__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/XBM___X_Consortium.xcu13
-rw-r--r--filter/source/config/fragments/filters/XEROX_XIF_5_0__Illustrator___W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/XEROX_XIF_5_0__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/XEROX_XIF_6_0__Color_Bitmap___W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/XEROX_XIF_6_0__Res_Graphic___W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/XHTML_Calc_File.xcu13
-rw-r--r--filter/source/config/fragments/filters/XHTML_Draw_File.xcu13
-rw-r--r--filter/source/config/fragments/filters/XHTML_Impress_File.xcu13
-rw-r--r--filter/source/config/fragments/filters/XHTML_Writer_File.xcu13
-rw-r--r--filter/source/config/fragments/filters/XPM.xcu13
-rw-r--r--filter/source/config/fragments/filters/XyWrite_III___W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/XyWrite_III____W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/XyWrite_IV__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/XyWrite_Sig___Win___W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/XyWrite_Signature__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/XyWrite__Win__1_0__W4W_.xcu13
-rw-r--r--filter/source/config/fragments/filters/calc8.xcu10
-rw-r--r--filter/source/config/fragments/filters/calc8_template.xcu10
-rw-r--r--filter/source/config/fragments/filters/calc8_template_ui.xcu5
-rw-r--r--filter/source/config/fragments/filters/calc8_ui.xcu5
-rw-r--r--filter/source/config/fragments/filters/calc_HTML_WebQuery.xcu10
-rw-r--r--filter/source/config/fragments/filters/calc_HTML_WebQuery_ui.xcu6
-rw-r--r--filter/source/config/fragments/filters/calc_MS_Excel_2007_Binary.xcu10
-rw-r--r--filter/source/config/fragments/filters/calc_MS_Excel_2007_Binary_ui.xcu6
-rw-r--r--filter/source/config/fragments/filters/calc_MS_Excel_2007_XML.xcu10
-rw-r--r--filter/source/config/fragments/filters/calc_MS_Excel_2007_XML_Template.xcu10
-rw-r--r--filter/source/config/fragments/filters/calc_MS_Excel_2007_XML_Template_ui.xcu6
-rw-r--r--filter/source/config/fragments/filters/calc_MS_Excel_2007_XML_ui.xcu6
-rw-r--r--filter/source/config/fragments/filters/calc_StarOffice_XML_Calc_Template.xcu10
-rw-r--r--filter/source/config/fragments/filters/calc_StarOffice_XML_Calc_Template_ui.xcu6
-rw-r--r--filter/source/config/fragments/filters/calc_pdf_Export.xcu13
-rw-r--r--filter/source/config/fragments/filters/chart8.xcu10
-rw-r--r--filter/source/config/fragments/filters/chart8_ui.xcu5
-rw-r--r--filter/source/config/fragments/filters/dBase.xcu13
-rw-r--r--filter/source/config/fragments/filters/draw8.xcu10
-rw-r--r--filter/source/config/fragments/filters/draw8_template.xcu10
-rw-r--r--filter/source/config/fragments/filters/draw8_template_ui.xcu5
-rw-r--r--filter/source/config/fragments/filters/draw8_ui.xcu5
-rw-r--r--filter/source/config/fragments/filters/draw_PCD_Photo_CD_Base.xcu13
-rw-r--r--filter/source/config/fragments/filters/draw_PCD_Photo_CD_Base16.xcu13
-rw-r--r--filter/source/config/fragments/filters/draw_PCD_Photo_CD_Base4.xcu13
-rw-r--r--filter/source/config/fragments/filters/draw_StarOffice_XML_Draw_Template.xcu10
-rw-r--r--filter/source/config/fragments/filters/draw_StarOffice_XML_Draw_Template_ui.xcu6
-rw-r--r--filter/source/config/fragments/filters/draw_bmp_Export.xcu13
-rw-r--r--filter/source/config/fragments/filters/draw_emf_Export.xcu13
-rw-r--r--filter/source/config/fragments/filters/draw_eps_Export.xcu13
-rw-r--r--filter/source/config/fragments/filters/draw_flash_Export.xcu13
-rw-r--r--filter/source/config/fragments/filters/draw_gif_Export.xcu13
-rw-r--r--filter/source/config/fragments/filters/draw_html_Export.xcu10
-rw-r--r--filter/source/config/fragments/filters/draw_html_Export_ui.xcu6
-rw-r--r--filter/source/config/fragments/filters/draw_jpg_Export.xcu13
-rw-r--r--filter/source/config/fragments/filters/draw_met_Export.xcu13
-rw-r--r--filter/source/config/fragments/filters/draw_pbm_Export.xcu13
-rw-r--r--filter/source/config/fragments/filters/draw_pct_Export.xcu13
-rw-r--r--filter/source/config/fragments/filters/draw_pdf_Export.xcu13
-rw-r--r--filter/source/config/fragments/filters/draw_pgm_Export.xcu13
-rw-r--r--filter/source/config/fragments/filters/draw_png_Export.xcu13
-rw-r--r--filter/source/config/fragments/filters/draw_ppm_Export.xcu13
-rw-r--r--filter/source/config/fragments/filters/draw_ras_Export.xcu13
-rw-r--r--filter/source/config/fragments/filters/draw_svg_Export.xcu13
-rw-r--r--filter/source/config/fragments/filters/draw_svm_Export.xcu13
-rw-r--r--filter/source/config/fragments/filters/draw_tif_Export.xcu13
-rw-r--r--filter/source/config/fragments/filters/draw_wmf_Export.xcu13
-rw-r--r--filter/source/config/fragments/filters/draw_xpm_Export.xcu13
-rw-r--r--filter/source/config/fragments/filters/impress8.xcu10
-rw-r--r--filter/source/config/fragments/filters/impress8_draw.xcu10
-rw-r--r--filter/source/config/fragments/filters/impress8_draw_ui.xcu5
-rw-r--r--filter/source/config/fragments/filters/impress8_template.xcu10
-rw-r--r--filter/source/config/fragments/filters/impress8_template_ui.xcu5
-rw-r--r--filter/source/config/fragments/filters/impress8_ui.xcu5
-rw-r--r--filter/source/config/fragments/filters/impress_MS_PowerPoint_2007_XML.xcu10
-rw-r--r--filter/source/config/fragments/filters/impress_MS_PowerPoint_2007_XML_Template.xcu10
-rw-r--r--filter/source/config/fragments/filters/impress_MS_PowerPoint_2007_XML_Template_ui.xcu6
-rw-r--r--filter/source/config/fragments/filters/impress_MS_PowerPoint_2007_XML_ui.xcu6
-rw-r--r--filter/source/config/fragments/filters/impress_StarOffice_XML_Draw.xcu10
-rw-r--r--filter/source/config/fragments/filters/impress_StarOffice_XML_Draw_ui.xcu6
-rw-r--r--filter/source/config/fragments/filters/impress_StarOffice_XML_Impress_Template.xcu10
-rw-r--r--filter/source/config/fragments/filters/impress_StarOffice_XML_Impress_Template_ui.xcu6
-rw-r--r--filter/source/config/fragments/filters/impress_bmp_Export.xcu13
-rw-r--r--filter/source/config/fragments/filters/impress_emf_Export.xcu13
-rw-r--r--filter/source/config/fragments/filters/impress_eps_Export.xcu13
-rw-r--r--filter/source/config/fragments/filters/impress_flash_Export.xcu13
-rw-r--r--filter/source/config/fragments/filters/impress_gif_Export.xcu13
-rw-r--r--filter/source/config/fragments/filters/impress_html_Export.xcu10
-rw-r--r--filter/source/config/fragments/filters/impress_html_Export_ui.xcu6
-rw-r--r--filter/source/config/fragments/filters/impress_jpg_Export.xcu13
-rw-r--r--filter/source/config/fragments/filters/impress_met_Export.xcu13
-rw-r--r--filter/source/config/fragments/filters/impress_pbm_Export.xcu13
-rw-r--r--filter/source/config/fragments/filters/impress_pct_Export.xcu13
-rw-r--r--filter/source/config/fragments/filters/impress_pdf_Export.xcu13
-rw-r--r--filter/source/config/fragments/filters/impress_pgm_Export.xcu13
-rw-r--r--filter/source/config/fragments/filters/impress_png_Export.xcu13
-rw-r--r--filter/source/config/fragments/filters/impress_ppm_Export.xcu13
-rw-r--r--filter/source/config/fragments/filters/impress_ras_Export.xcu13
-rw-r--r--filter/source/config/fragments/filters/impress_svg_Export.xcu13
-rw-r--r--filter/source/config/fragments/filters/impress_svm_Export.xcu13
-rw-r--r--filter/source/config/fragments/filters/impress_tif_Export.xcu13
-rw-r--r--filter/source/config/fragments/filters/impress_wmf_Export.xcu13
-rw-r--r--filter/source/config/fragments/filters/impress_xpm_Export.xcu13
-rw-r--r--filter/source/config/fragments/filters/makefile.mk57
-rw-r--r--filter/source/config/fragments/filters/math8.xcu10
-rw-r--r--filter/source/config/fragments/filters/math8_ui.xcu5
-rw-r--r--filter/source/config/fragments/filters/math_pdf_Export.xcu13
-rw-r--r--filter/source/config/fragments/filters/placeware_Export.xcu13
-rw-r--r--filter/source/config/fragments/filters/writer8.xcu10
-rw-r--r--filter/source/config/fragments/filters/writer8_template.xcu10
-rw-r--r--filter/source/config/fragments/filters/writer8_template_ui.xcu5
-rw-r--r--filter/source/config/fragments/filters/writer8_ui.xcu5
-rw-r--r--filter/source/config/fragments/filters/writer_MIZI_Hwp_97.xcu13
-rw-r--r--filter/source/config/fragments/filters/writer_StarOffice_XML_Writer_Template.xcu10
-rw-r--r--filter/source/config/fragments/filters/writer_StarOffice_XML_Writer_Template_ui.xcu6
-rw-r--r--filter/source/config/fragments/filters/writer_globaldocument_StarOffice_XML_Writer.xcu10
-rw-r--r--filter/source/config/fragments/filters/writer_globaldocument_StarOffice_XML_Writer_GlobalDocument.xcu10
-rw-r--r--filter/source/config/fragments/filters/writer_globaldocument_StarOffice_XML_Writer_GlobalDocument_ui.xcu6
-rw-r--r--filter/source/config/fragments/filters/writer_globaldocument_StarOffice_XML_Writer_ui.xcu6
-rw-r--r--filter/source/config/fragments/filters/writer_globaldocument_pdf_Export.xcu13
-rw-r--r--filter/source/config/fragments/filters/writer_pdf_Export.xcu13
-rw-r--r--filter/source/config/fragments/filters/writer_web_HTML_help.xcu13
-rw-r--r--filter/source/config/fragments/filters/writer_web_StarOffice_XML_Writer.xcu10
-rw-r--r--filter/source/config/fragments/filters/writer_web_StarOffice_XML_Writer_Web_Template.xcu10
-rw-r--r--filter/source/config/fragments/filters/writer_web_StarOffice_XML_Writer_Web_Template_ui.xcu6
-rw-r--r--filter/source/config/fragments/filters/writer_web_StarOffice_XML_Writer_ui.xcu6
-rw-r--r--filter/source/config/fragments/filters/writer_web_pdf_Export.xcu13
-rw-r--r--filter/source/config/fragments/filters/writerglobal8.xcu10
-rw-r--r--filter/source/config/fragments/filters/writerglobal8_HTML.xcu13
-rw-r--r--filter/source/config/fragments/filters/writerglobal8_ui.xcu5
-rw-r--r--filter/source/config/fragments/filters/writerglobal8_writer.xcu10
-rw-r--r--filter/source/config/fragments/filters/writerglobal8_writer_ui.xcu5
-rw-r--r--filter/source/config/fragments/filters/writerweb8_writer.xcu10
-rw-r--r--filter/source/config/fragments/filters/writerweb8_writer_template.xcu10
-rw-r--r--filter/source/config/fragments/filters/writerweb8_writer_template_ui.xcu5
-rw-r--r--filter/source/config/fragments/filters/writerweb8_writer_ui.xcu5
-rw-r--r--filter/source/config/fragments/frameloaders/com_sun_star_comp_chart2_ChartFrameLoader.xcu3
-rw-r--r--filter/source/config/fragments/frameloaders/com_sun_star_frame_Bibliography.xcu3
-rw-r--r--filter/source/config/fragments/frameloaders/com_sun_star_sdb_ContentLoader.xcu3
-rw-r--r--filter/source/config/fragments/frameloaders/org_openoffice_comp_dbflt_DBContentLoader2.xcu3
-rw-r--r--filter/source/config/fragments/internalgraphicfilters/bmp_Export.xcu10
-rw-r--r--filter/source/config/fragments/internalgraphicfilters/bmp_Import.xcu10
-rw-r--r--filter/source/config/fragments/internalgraphicfilters/dxf_Import.xcu10
-rw-r--r--filter/source/config/fragments/internalgraphicfilters/emf_Export.xcu10
-rw-r--r--filter/source/config/fragments/internalgraphicfilters/emf_Import.xcu10
-rw-r--r--filter/source/config/fragments/internalgraphicfilters/eps_Export.xcu10
-rw-r--r--filter/source/config/fragments/internalgraphicfilters/eps_Import.xcu10
-rw-r--r--filter/source/config/fragments/internalgraphicfilters/gif_Export.xcu10
-rw-r--r--filter/source/config/fragments/internalgraphicfilters/gif_Import.xcu10
-rw-r--r--filter/source/config/fragments/internalgraphicfilters/jpg_Export.xcu10
-rw-r--r--filter/source/config/fragments/internalgraphicfilters/jpg_Import.xcu10
-rw-r--r--filter/source/config/fragments/internalgraphicfilters/met_Export.xcu10
-rw-r--r--filter/source/config/fragments/internalgraphicfilters/met_Import.xcu10
-rw-r--r--filter/source/config/fragments/internalgraphicfilters/pbm_Export.xcu10
-rw-r--r--filter/source/config/fragments/internalgraphicfilters/pbm_Import.xcu10
-rw-r--r--filter/source/config/fragments/internalgraphicfilters/pcd_Import_Base.xcu10
-rw-r--r--filter/source/config/fragments/internalgraphicfilters/pcd_Import_Base16.xcu10
-rw-r--r--filter/source/config/fragments/internalgraphicfilters/pcd_Import_Base4.xcu10
-rw-r--r--filter/source/config/fragments/internalgraphicfilters/pct_Export.xcu10
-rw-r--r--filter/source/config/fragments/internalgraphicfilters/pct_Import.xcu10
-rw-r--r--filter/source/config/fragments/internalgraphicfilters/pcx_Import.xcu10
-rw-r--r--filter/source/config/fragments/internalgraphicfilters/pgm_Export.xcu10
-rw-r--r--filter/source/config/fragments/internalgraphicfilters/pgm_Import.xcu10
-rw-r--r--filter/source/config/fragments/internalgraphicfilters/png_Export.xcu10
-rw-r--r--filter/source/config/fragments/internalgraphicfilters/png_Import.xcu10
-rw-r--r--filter/source/config/fragments/internalgraphicfilters/ppm_Export.xcu10
-rw-r--r--filter/source/config/fragments/internalgraphicfilters/ppm_Import.xcu10
-rw-r--r--filter/source/config/fragments/internalgraphicfilters/psd_Import.xcu10
-rw-r--r--filter/source/config/fragments/internalgraphicfilters/ras_Export.xcu10
-rw-r--r--filter/source/config/fragments/internalgraphicfilters/ras_Import.xcu10
-rw-r--r--filter/source/config/fragments/internalgraphicfilters/sgf_Import.xcu10
-rw-r--r--filter/source/config/fragments/internalgraphicfilters/sgv_Import.xcu10
-rw-r--r--filter/source/config/fragments/internalgraphicfilters/svg_Export.xcu10
-rw-r--r--filter/source/config/fragments/internalgraphicfilters/svm_Export.xcu10
-rw-r--r--filter/source/config/fragments/internalgraphicfilters/svm_Import.xcu10
-rw-r--r--filter/source/config/fragments/internalgraphicfilters/tga_Import.xcu10
-rw-r--r--filter/source/config/fragments/internalgraphicfilters/tif_Export.xcu10
-rw-r--r--filter/source/config/fragments/internalgraphicfilters/tif_Import.xcu10
-rw-r--r--filter/source/config/fragments/internalgraphicfilters/wmf_Export.xcu10
-rw-r--r--filter/source/config/fragments/internalgraphicfilters/wmf_Import.xcu10
-rw-r--r--filter/source/config/fragments/internalgraphicfilters/xbm_Import.xcu10
-rw-r--r--filter/source/config/fragments/internalgraphicfilters/xpm_Export.xcu10
-rw-r--r--filter/source/config/fragments/internalgraphicfilters/xpm_Import.xcu10
-rw-r--r--filter/source/config/fragments/langfilter.xsl37
-rw-r--r--filter/source/config/fragments/makefile.mk255
-rw-r--r--filter/source/config/fragments/packagedef.mk71
-rw-r--r--filter/source/config/fragments/types/MS_Excel_2007_Binary.xcu10
-rw-r--r--filter/source/config/fragments/types/MS_Excel_2007_XML.xcu10
-rw-r--r--filter/source/config/fragments/types/MS_Excel_2007_XML_Template.xcu10
-rw-r--r--filter/source/config/fragments/types/MS_PowerPoint_2007_XML.xcu10
-rw-r--r--filter/source/config/fragments/types/MS_PowerPoint_2007_XML_Template.xcu10
-rw-r--r--filter/source/config/fragments/types/StarBase.xcu12
-rw-r--r--filter/source/config/fragments/types/Unified_Office_Format_presentation.xcu12
-rw-r--r--filter/source/config/fragments/types/Unified_Office_Format_spreadsheet.xcu12
-rw-r--r--filter/source/config/fragments/types/Unified_Office_Format_text.xcu12
-rw-r--r--filter/source/config/fragments/types/XHTML_File.xcu12
-rw-r--r--filter/source/config/fragments/types/bmp_MS_Windows.xcu12
-rw-r--r--filter/source/config/fragments/types/calc8.xcu12
-rw-r--r--filter/source/config/fragments/types/calc8_template.xcu12
-rw-r--r--filter/source/config/fragments/types/calc_DIF.xcu12
-rw-r--r--filter/source/config/fragments/types/calc_Lotus.xcu12
-rw-r--r--filter/source/config/fragments/types/calc_MS_Excel_2003_XML.xcu12
-rw-r--r--filter/source/config/fragments/types/calc_MS_Excel_40.xcu12
-rw-r--r--filter/source/config/fragments/types/calc_MS_Excel_40_VorlageTemplate.xcu12
-rw-r--r--filter/source/config/fragments/types/calc_MS_Excel_5095.xcu12
-rw-r--r--filter/source/config/fragments/types/calc_MS_Excel_5095_VorlageTemplate.xcu12
-rw-r--r--filter/source/config/fragments/types/calc_MS_Excel_95.xcu12
-rw-r--r--filter/source/config/fragments/types/calc_MS_Excel_95_VorlageTemplate.xcu12
-rw-r--r--filter/source/config/fragments/types/calc_MS_Excel_97.xcu12
-rw-r--r--filter/source/config/fragments/types/calc_MS_Excel_97_VorlageTemplate.xcu12
-rw-r--r--filter/source/config/fragments/types/calc_MiniCalc_PalmDB_File.xcu12
-rw-r--r--filter/source/config/fragments/types/calc_Pocket_Excel_File.xcu12
-rw-r--r--filter/source/config/fragments/types/calc_QPro.xcu12
-rw-r--r--filter/source/config/fragments/types/calc_SYLK.xcu12
-rw-r--r--filter/source/config/fragments/types/calc_StarCalc_10.xcu12
-rw-r--r--filter/source/config/fragments/types/calc_StarCalc_30.xcu12
-rw-r--r--filter/source/config/fragments/types/calc_StarCalc_30_VorlageTemplate.xcu12
-rw-r--r--filter/source/config/fragments/types/calc_StarCalc_40.xcu12
-rw-r--r--filter/source/config/fragments/types/calc_StarCalc_40_VorlageTemplate.xcu12
-rw-r--r--filter/source/config/fragments/types/calc_StarCalc_50.xcu12
-rw-r--r--filter/source/config/fragments/types/calc_StarCalc_50_VorlageTemplate.xcu12
-rw-r--r--filter/source/config/fragments/types/calc_StarOffice_XML_Calc.xcu12
-rw-r--r--filter/source/config/fragments/types/calc_StarOffice_XML_Calc_Template.xcu12
-rw-r--r--filter/source/config/fragments/types/calc_Text_txt_csv_StarCalc.xcu12
-rw-r--r--filter/source/config/fragments/types/calc_dBase.xcu12
-rw-r--r--filter/source/config/fragments/types/chart8.xcu12
-rw-r--r--filter/source/config/fragments/types/chart_StarChart_30.xcu12
-rw-r--r--filter/source/config/fragments/types/chart_StarChart_40.xcu12
-rw-r--r--filter/source/config/fragments/types/chart_StarChart_50.xcu12
-rw-r--r--filter/source/config/fragments/types/chart_StarOffice_XML_Chart.xcu12
-rw-r--r--filter/source/config/fragments/types/component_Bibliography.xcu12
-rw-r--r--filter/source/config/fragments/types/component_DB.xcu12
-rw-r--r--filter/source/config/fragments/types/draw8.xcu12
-rw-r--r--filter/source/config/fragments/types/draw8_template.xcu12
-rw-r--r--filter/source/config/fragments/types/draw_StarDraw_30.xcu12
-rw-r--r--filter/source/config/fragments/types/draw_StarDraw_30_Vorlage.xcu12
-rw-r--r--filter/source/config/fragments/types/draw_StarDraw_50.xcu12
-rw-r--r--filter/source/config/fragments/types/draw_StarDraw_50_Vorlage.xcu12
-rw-r--r--filter/source/config/fragments/types/draw_StarOffice_XML_Draw.xcu12
-rw-r--r--filter/source/config/fragments/types/draw_StarOffice_XML_Draw_Template.xcu12
-rw-r--r--filter/source/config/fragments/types/dxf_AutoCAD_Interchange.xcu12
-rw-r--r--filter/source/config/fragments/types/emf_MS_Windows_Metafile.xcu12
-rw-r--r--filter/source/config/fragments/types/eps_Encapsulated_PostScript.xcu12
-rw-r--r--filter/source/config/fragments/types/gif_Graphics_Interchange.xcu12
-rw-r--r--filter/source/config/fragments/types/graphic_HTML.xcu12
-rw-r--r--filter/source/config/fragments/types/graphic_SWF.xcu12
-rw-r--r--filter/source/config/fragments/types/impress8.xcu12
-rw-r--r--filter/source/config/fragments/types/impress8_template.xcu12
-rw-r--r--filter/source/config/fragments/types/impress_CGM_Computer_Graphics_Metafile.xcu12
-rw-r--r--filter/source/config/fragments/types/impress_MS_PowerPoint_97.xcu12
-rw-r--r--filter/source/config/fragments/types/impress_MS_PowerPoint_97_Vorlage.xcu12
-rw-r--r--filter/source/config/fragments/types/impress_StarImpress_40.xcu12
-rw-r--r--filter/source/config/fragments/types/impress_StarImpress_40_Vorlage.xcu12
-rw-r--r--filter/source/config/fragments/types/impress_StarImpress_50.xcu12
-rw-r--r--filter/source/config/fragments/types/impress_StarImpress_50_Vorlage.xcu12
-rw-r--r--filter/source/config/fragments/types/impress_StarImpress_50_packed.xcu12
-rw-r--r--filter/source/config/fragments/types/impress_StarOffice_XML_Impress.xcu12
-rw-r--r--filter/source/config/fragments/types/impress_StarOffice_XML_Impress_Template.xcu12
-rw-r--r--filter/source/config/fragments/types/jpg_JPEG.xcu12
-rw-r--r--filter/source/config/fragments/types/makefile.mk54
-rw-r--r--filter/source/config/fragments/types/math8.xcu12
-rw-r--r--filter/source/config/fragments/types/math_MathML_XML_Math.xcu12
-rw-r--r--filter/source/config/fragments/types/math_MathType_3x.xcu12
-rw-r--r--filter/source/config/fragments/types/math_StarMath_20.xcu12
-rw-r--r--filter/source/config/fragments/types/math_StarMath_30.xcu12
-rw-r--r--filter/source/config/fragments/types/math_StarMath_40.xcu12
-rw-r--r--filter/source/config/fragments/types/math_StarMath_50.xcu12
-rw-r--r--filter/source/config/fragments/types/math_StarOffice_XML_Math.xcu12
-rw-r--r--filter/source/config/fragments/types/met_OS2_Metafile.xcu12
-rw-r--r--filter/source/config/fragments/types/oxt_OpenOffice_Extension.xcu12
-rw-r--r--filter/source/config/fragments/types/pbm_Portable_Bitmap.xcu12
-rw-r--r--filter/source/config/fragments/types/pcd_Photo_CD_Base.xcu12
-rw-r--r--filter/source/config/fragments/types/pcd_Photo_CD_Base16.xcu12
-rw-r--r--filter/source/config/fragments/types/pcd_Photo_CD_Base4.xcu12
-rw-r--r--filter/source/config/fragments/types/pct_Mac_Pict.xcu12
-rw-r--r--filter/source/config/fragments/types/pcx_Zsoft_Paintbrush.xcu12
-rw-r--r--filter/source/config/fragments/types/pdf_Portable_Document_Format.xcu12
-rw-r--r--filter/source/config/fragments/types/pgm_Portable_Graymap.xcu12
-rw-r--r--filter/source/config/fragments/types/png_Portable_Network_Graphic.xcu12
-rw-r--r--filter/source/config/fragments/types/ppm_Portable_Pixelmap.xcu12
-rw-r--r--filter/source/config/fragments/types/psd_Adobe_Photoshop.xcu12
-rw-r--r--filter/source/config/fragments/types/pwp_PlaceWare.xcu12
-rw-r--r--filter/source/config/fragments/types/ras_Sun_Rasterfile.xcu12
-rw-r--r--filter/source/config/fragments/types/sgf_StarOffice_Writer_SGF.xcu12
-rw-r--r--filter/source/config/fragments/types/sgv_StarDraw_20.xcu12
-rw-r--r--filter/source/config/fragments/types/svg_Scalable_Vector_Graphics.xcu12
-rw-r--r--filter/source/config/fragments/types/svm_StarView_Metafile.xcu12
-rw-r--r--filter/source/config/fragments/types/tga_Truevision_TARGA.xcu12
-rw-r--r--filter/source/config/fragments/types/tif_Tag_Image_File.xcu12
-rw-r--r--filter/source/config/fragments/types/wav_Wave_Audio_File.xcu12
-rw-r--r--filter/source/config/fragments/types/wmf_MS_Windows_Metafile.xcu12
-rw-r--r--filter/source/config/fragments/types/writer8.xcu12
-rw-r--r--filter/source/config/fragments/types/writer8_template.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_Ami_Pro_1x_31_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_AportisDoc_PalmDB_File.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_CTOS_DEF_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_Claris_Works_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_DCAFFT_Final_Form_Text_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_DCA_Revisable_Form_Text_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_DCA_with_Display_Write_5_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_DEC_DX_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_DEC_WPS_PLUS_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_DataGeneral_CEO_Write_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_DisplayWrite_20_4x_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_DisplayWrite_5x_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_DocBook_File.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_EBCDIC_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_Enable_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_Frame_Maker_MIF_30_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_Frame_Maker_MIF_40_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_Frame_Maker_MIF_50_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_Frame_Work_III_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_Frame_Work_IV_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_HP_AdvanceWrite_Plus_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_ICL_Office_Power_6_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_ICL_Office_Power_7_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_Interleaf_5_6_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_Interleaf_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_Legacy_Winstar_onGO_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_Lotus_1_2_3_10_DOS_StarWriter.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_Lotus_1_2_3_10_WIN_StarWriter.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_Lotus_Manuscript_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_MASS_11_Rel_80_83_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_MASS_11_Rel_85_90_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_MIZI_Hwp_97.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_MS_MacWord_30_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_MS_MacWord_40_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_MS_MacWord_5x_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_MS_WinWord_1x_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_MS_WinWord_2x_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_MS_WinWord_5.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_MS_WinWord_60.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_MS_Word_2003_XML.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_MS_Word_2007_XML.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_MS_Word_2007_XML_Template.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_MS_Word_3x_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_MS_Word_4x_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_MS_Word_5x_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_MS_Word_6x_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_MS_Word_95.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_MS_Word_95_Vorlage.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_MS_Word_97.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_MS_Word_97_Vorlage.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_MS_Works_20_DOS_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_MS_Works_30_Win_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_MS_Works_40_Mac_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_Mac_Write_4x_50_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_Mac_Write_II_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_Mac_Write_Pro_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_MultiMate_33_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_MultiMate_4_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_MultiMate_Adv_36_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_MultiMate_Adv_II_37_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_NAVY_DIF_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_OfficeWriter_40_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_OfficeWriter_50_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_OfficeWriter_6x_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_PFS_First_Choice_10_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_PFS_First_Choice_20_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_PFS_First_Choice_30_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_PFS_Write_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_Peach_Text_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_PocketWord_File.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_Professional_Write_10_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_Professional_Write_2x_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_Professional_Write_Plus_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_QA_Write_10_30_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_QA_Write_40_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_Rapid_File_10_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_Rapid_File_12_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_Rich_Text_Format.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_Samna_Word_IV_IV_Plus_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_StarOffice_XML_Writer.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_StarOffice_XML_Writer_Template.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_StarWriter_10.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_StarWriter_20.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_StarWriter_30.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_StarWriter_30_VorlageTemplate.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_StarWriter_40.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_StarWriter_40_VorlageTemplate.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_StarWriter_50.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_StarWriter_50_VorlageTemplate.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_StarWriter_DOS.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_T602_Document.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_Text.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_Text_encoded.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_Total_Word_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_Uniplex_V7_V8_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_Uniplex_onGO_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_VolksWriter_3_and_4_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_VolksWriter_Deluxe_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_WITA_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_Wang_II_SWP_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_Wang_PC_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_Wang_WP_Plus_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_Win_Write_3x_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_WiziWord_30_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_WordPerfect_41_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_WordPerfect_42_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_WordPerfect_50_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_WordPerfect_51_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_WordPerfect_60_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_WordPerfect_61_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_WordPerfect_Document.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_WordPerfect_Mac_1_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_WordPerfect_Mac_2_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_WordPerfect_Mac_3_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_WordPerfect_Win_51_52_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_WordPerfect_Win_60_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_WordPerfect_Win_61_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_WordPerfect_Win_70_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_WordStar_2000_Rel_30_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_WordStar_2000_Rel_35_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_WordStar_33x_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_WordStar_345_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_WordStar_40_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_WordStar_50_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_WordStar_55_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_WordStar_60_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_WordStar_70_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_WordStar_Win_1x_20_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_WriteNow_30_Macintosh_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_Writing_Assistant_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_XEROX_XIF_50_Illustrator_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_XEROX_XIF_50_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_XEROX_XIF_60_Color_Bitmap_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_XEROX_XIF_60_Res_Graphic_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_XyWrite_IIIP_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_XyWrite_III_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_XyWrite_IV_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_XyWrite_Sig_Win_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_XyWrite_Signature_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_XyWrite_Win_10_W4W.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_globaldocument_StarOffice_XML_Writer_GlobalDocument.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_globaldocument_StarWriter_40GlobalDocument.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_globaldocument_StarWriter_50GlobalDocument.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_web_HTML.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_web_HTML_help.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_web_StarOffice_XML_Writer_Web_Template.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_web_StarWriterWeb_40_VorlageTemplate.xcu12
-rw-r--r--filter/source/config/fragments/types/writer_web_StarWriterWeb_50_VorlageTemplate.xcu12
-rw-r--r--filter/source/config/fragments/types/writerglobal8.xcu12
-rw-r--r--filter/source/config/fragments/types/writerweb8_writer_template.xcu12
-rw-r--r--filter/source/config/fragments/types/xbm_X_Consortium.xcu12
-rw-r--r--filter/source/config/fragments/types/xpm_XPM.xcu12
-rw-r--r--filter/source/config/tools/Manifest.mf4
-rwxr-xr-xfilter/source/config/tools/merge/pyAltFCFGMerge591
-rw-r--r--filter/source/config/tools/split/FCFGSplit.cfg110
-rw-r--r--filter/source/config/tools/split/FCFGSplit.java565
-rw-r--r--filter/source/config/tools/split/Manifest.mf1
-rw-r--r--filter/source/config/tools/split/Splitter.java310
-rw-r--r--filter/source/config/tools/split/SplitterData.java87
-rw-r--r--filter/source/config/tools/split/makefile.mk88
-rw-r--r--filter/source/docbook/DocBookTemplate.stwbin0 -> 6688 bytes
-rw-r--r--filter/source/docbook/docbooktosoffheadings.xsl1424
-rw-r--r--filter/source/docbook/makefile.mk51
-rw-r--r--filter/source/docbook/sofftodocbookheadings.xsl1185
-rw-r--r--filter/source/filtertracer/exports.dxp3
-rw-r--r--filter/source/filtertracer/filtertracer.cxx256
-rw-r--r--filter/source/filtertracer/filtertracer.hxx186
-rw-r--r--filter/source/filtertracer/filtertraceruno.cxx110
-rw-r--r--filter/source/filtertracer/makefile.mk63
-rw-r--r--filter/source/flash/impswfdialog.cxx125
-rw-r--r--filter/source/flash/impswfdialog.hrc48
-rw-r--r--filter/source/flash/impswfdialog.hxx85
-rw-r--r--filter/source/flash/impswfdialog.src182
-rw-r--r--filter/source/flash/makefile.mk98
-rw-r--r--filter/source/flash/swfdialog.cxx283
-rw-r--r--filter/source/flash/swfdialog.hxx89
-rw-r--r--filter/source/flash/swfexporter.cxx768
-rw-r--r--filter/source/flash/swfexporter.hxx218
-rw-r--r--filter/source/flash/swffilter.cxx526
-rw-r--r--filter/source/flash/swfuno.cxx136
-rw-r--r--filter/source/flash/swfwriter.cxx640
-rw-r--r--filter/source/flash/swfwriter.hxx462
-rw-r--r--filter/source/flash/swfwriter1.cxx2126
-rw-r--r--filter/source/flash/swfwriter2.cxx692
-rw-r--r--filter/source/graphicfilter/egif/dlgegif.cxx108
-rw-r--r--filter/source/graphicfilter/egif/dlgegif.hrc36
-rw-r--r--filter/source/graphicfilter/egif/dlgegif.hxx71
-rw-r--r--filter/source/graphicfilter/egif/dlgegif.src118
-rw-r--r--filter/source/graphicfilter/egif/egif.cxx629
-rw-r--r--filter/source/graphicfilter/egif/egifstr.src39
-rw-r--r--filter/source/graphicfilter/egif/exports.map8
-rw-r--r--filter/source/graphicfilter/egif/giflzwc.cxx256
-rw-r--r--filter/source/graphicfilter/egif/giflzwc.hxx65
-rw-r--r--filter/source/graphicfilter/egif/makefile.mk78
-rw-r--r--filter/source/graphicfilter/egif/strings.hrc28
-rw-r--r--filter/source/graphicfilter/eos2met/dlgeos2.cxx179
-rw-r--r--filter/source/graphicfilter/eos2met/dlgeos2.hrc41
-rw-r--r--filter/source/graphicfilter/eos2met/dlgeos2.hxx80
-rw-r--r--filter/source/graphicfilter/eos2met/dlgeos2.src162
-rw-r--r--filter/source/graphicfilter/eos2met/eos2met.cxx2648
-rw-r--r--filter/source/graphicfilter/eos2met/eos2mstr.src38
-rw-r--r--filter/source/graphicfilter/eos2met/exports.map8
-rw-r--r--filter/source/graphicfilter/eos2met/makefile.mk74
-rw-r--r--filter/source/graphicfilter/eos2met/strings.hrc29
-rw-r--r--filter/source/graphicfilter/epbm/dlgepbm.cxx99
-rw-r--r--filter/source/graphicfilter/epbm/dlgepbm.hrc34
-rw-r--r--filter/source/graphicfilter/epbm/dlgepbm.hxx71
-rw-r--r--filter/source/graphicfilter/epbm/dlgepbm.src106
-rw-r--r--filter/source/graphicfilter/epbm/epbm.cxx272
-rw-r--r--filter/source/graphicfilter/epbm/epbmstr.src35
-rw-r--r--filter/source/graphicfilter/epbm/exports.map8
-rw-r--r--filter/source/graphicfilter/epbm/makefile.mk75
-rw-r--r--filter/source/graphicfilter/epbm/strings.hrc27
-rw-r--r--filter/source/graphicfilter/epgm/dlgepgm.cxx97
-rw-r--r--filter/source/graphicfilter/epgm/dlgepgm.hrc34
-rw-r--r--filter/source/graphicfilter/epgm/dlgepgm.hxx71
-rw-r--r--filter/source/graphicfilter/epgm/dlgepgm.src105
-rw-r--r--filter/source/graphicfilter/epgm/epgm.cxx297
-rw-r--r--filter/source/graphicfilter/epgm/epgmstr.src35
-rw-r--r--filter/source/graphicfilter/epgm/exports.map8
-rw-r--r--filter/source/graphicfilter/epgm/makefile.mk76
-rw-r--r--filter/source/graphicfilter/epgm/strings.hrc27
-rw-r--r--filter/source/graphicfilter/epict/dlgepct.cxx183
-rw-r--r--filter/source/graphicfilter/epict/dlgepct.hrc41
-rw-r--r--filter/source/graphicfilter/epict/dlgepct.hxx80
-rw-r--r--filter/source/graphicfilter/epict/dlgepct.src163
-rw-r--r--filter/source/graphicfilter/epict/epict.cxx2387
-rw-r--r--filter/source/graphicfilter/epict/epictstr.src38
-rw-r--r--filter/source/graphicfilter/epict/exports.map8
-rw-r--r--filter/source/graphicfilter/epict/makefile.mk76
-rw-r--r--filter/source/graphicfilter/epict/strings.hrc29
-rw-r--r--filter/source/graphicfilter/eppm/dlgeppm.cxx96
-rw-r--r--filter/source/graphicfilter/eppm/dlgeppm.hrc34
-rw-r--r--filter/source/graphicfilter/eppm/dlgeppm.hxx71
-rw-r--r--filter/source/graphicfilter/eppm/dlgeppm.src106
-rw-r--r--filter/source/graphicfilter/eppm/eppm.cxx305
-rw-r--r--filter/source/graphicfilter/eppm/eppmstr.src35
-rw-r--r--filter/source/graphicfilter/eppm/exports.map8
-rw-r--r--filter/source/graphicfilter/eppm/makefile.mk76
-rw-r--r--filter/source/graphicfilter/eppm/strings.hrc27
-rw-r--r--filter/source/graphicfilter/eps/dlgeps.cxx206
-rw-r--r--filter/source/graphicfilter/eps/dlgeps.hrc43
-rw-r--r--filter/source/graphicfilter/eps/dlgeps.hxx82
-rw-r--r--filter/source/graphicfilter/eps/dlgeps.src160
-rw-r--r--filter/source/graphicfilter/eps/eps.cxx2793
-rw-r--r--filter/source/graphicfilter/eps/epsstr.src70
-rw-r--r--filter/source/graphicfilter/eps/exports.map8
-rw-r--r--filter/source/graphicfilter/eps/makefile.mk79
-rw-r--r--filter/source/graphicfilter/eps/strings.hrc29
-rw-r--r--filter/source/graphicfilter/eras/eras.cxx317
-rw-r--r--filter/source/graphicfilter/eras/exports.map7
-rw-r--r--filter/source/graphicfilter/eras/makefile.mk67
-rw-r--r--filter/source/graphicfilter/etiff/etiff.cxx648
-rw-r--r--filter/source/graphicfilter/etiff/exports.map7
-rw-r--r--filter/source/graphicfilter/etiff/makefile.mk65
-rw-r--r--filter/source/graphicfilter/expm/expm.cxx302
-rw-r--r--filter/source/graphicfilter/expm/exports.map7
-rw-r--r--filter/source/graphicfilter/expm/makefile.mk66
-rw-r--r--filter/source/graphicfilter/icgm/actimpr.cxx1134
-rw-r--r--filter/source/graphicfilter/icgm/bitmap.cxx410
-rw-r--r--filter/source/graphicfilter/icgm/bitmap.hxx87
-rw-r--r--filter/source/graphicfilter/icgm/bundles.cxx288
-rw-r--r--filter/source/graphicfilter/icgm/bundles.hxx173
-rw-r--r--filter/source/graphicfilter/icgm/cgm.cxx927
-rw-r--r--filter/source/graphicfilter/icgm/cgm.hxx178
-rw-r--r--filter/source/graphicfilter/icgm/cgmres.hrc28
-rw-r--r--filter/source/graphicfilter/icgm/cgmtypes.hxx145
-rw-r--r--filter/source/graphicfilter/icgm/chart.cxx100
-rw-r--r--filter/source/graphicfilter/icgm/chart.hxx214
-rw-r--r--filter/source/graphicfilter/icgm/class0.cxx138
-rw-r--r--filter/source/graphicfilter/icgm/class1.cxx231
-rw-r--r--filter/source/graphicfilter/icgm/class2.cxx227
-rw-r--r--filter/source/graphicfilter/icgm/class3.cxx144
-rw-r--r--filter/source/graphicfilter/icgm/class4.cxx861
-rw-r--r--filter/source/graphicfilter/icgm/class5.cxx524
-rw-r--r--filter/source/graphicfilter/icgm/class7.cxx237
-rw-r--r--filter/source/graphicfilter/icgm/classx.cxx262
-rw-r--r--filter/source/graphicfilter/icgm/elements.cxx395
-rw-r--r--filter/source/graphicfilter/icgm/elements.hxx145
-rw-r--r--filter/source/graphicfilter/icgm/exports.map7
-rw-r--r--filter/source/graphicfilter/icgm/main.hxx63
-rw-r--r--filter/source/graphicfilter/icgm/makefile.mk80
-rw-r--r--filter/source/graphicfilter/icgm/outact.cxx200
-rw-r--r--filter/source/graphicfilter/icgm/outact.hxx148
-rw-r--r--filter/source/graphicfilter/idxf/dxf2mtf.cxx980
-rw-r--r--filter/source/graphicfilter/idxf/dxf2mtf.hxx128
-rw-r--r--filter/source/graphicfilter/idxf/dxfblkrd.cxx139
-rw-r--r--filter/source/graphicfilter/idxf/dxfblkrd.hxx87
-rw-r--r--filter/source/graphicfilter/idxf/dxfentrd.cxx871
-rw-r--r--filter/source/graphicfilter/idxf/dxfentrd.hxx602
-rw-r--r--filter/source/graphicfilter/idxf/dxfgrprd.cxx361
-rw-r--r--filter/source/graphicfilter/idxf/dxfgrprd.hxx155
-rw-r--r--filter/source/graphicfilter/idxf/dxfreprd.cxx385
-rw-r--r--filter/source/graphicfilter/idxf/dxfreprd.hxx138
-rw-r--r--filter/source/graphicfilter/idxf/dxftblrd.cxx348
-rw-r--r--filter/source/graphicfilter/idxf/dxftblrd.hxx183
-rw-r--r--filter/source/graphicfilter/idxf/dxfvec.cxx254
-rw-r--r--filter/source/graphicfilter/idxf/dxfvec.hxx261
-rw-r--r--filter/source/graphicfilter/idxf/exports.map7
-rw-r--r--filter/source/graphicfilter/idxf/idxf.cxx82
-rw-r--r--filter/source/graphicfilter/idxf/makefile.mk79
-rw-r--r--filter/source/graphicfilter/ieps/exports.map7
-rw-r--r--filter/source/graphicfilter/ieps/ieps.cxx771
-rw-r--r--filter/source/graphicfilter/ieps/makefile.mk66
-rw-r--r--filter/source/graphicfilter/ios2met/exports.map7
-rw-r--r--filter/source/graphicfilter/ios2met/ios2met.cxx2784
-rw-r--r--filter/source/graphicfilter/ios2met/makefile.mk68
-rw-r--r--filter/source/graphicfilter/ipbm/exports.map7
-rw-r--r--filter/source/graphicfilter/ipbm/ipbm.cxx565
-rw-r--r--filter/source/graphicfilter/ipbm/makefile.mk68
-rw-r--r--filter/source/graphicfilter/ipcd/exports.map7
-rw-r--r--filter/source/graphicfilter/ipcd/ipcd.cxx422
-rw-r--r--filter/source/graphicfilter/ipcd/makefile.mk67
-rw-r--r--filter/source/graphicfilter/ipcx/exports.map7
-rw-r--r--filter/source/graphicfilter/ipcx/ipcx.cxx458
-rw-r--r--filter/source/graphicfilter/ipcx/makefile.mk67
-rw-r--r--filter/source/graphicfilter/ipict/exports.map7
-rw-r--r--filter/source/graphicfilter/ipict/ipict.cxx1937
-rw-r--r--filter/source/graphicfilter/ipict/makefile.mk68
-rw-r--r--filter/source/graphicfilter/ipsd/exports.map7
-rw-r--r--filter/source/graphicfilter/ipsd/ipsd.cxx763
-rw-r--r--filter/source/graphicfilter/ipsd/makefile.mk67
-rw-r--r--filter/source/graphicfilter/iras/exports.map7
-rw-r--r--filter/source/graphicfilter/iras/iras.cxx383
-rw-r--r--filter/source/graphicfilter/iras/makefile.mk67
-rw-r--r--filter/source/graphicfilter/itga/exports.map7
-rw-r--r--filter/source/graphicfilter/itga/itga.cxx758
-rw-r--r--filter/source/graphicfilter/itga/makefile.mk67
-rw-r--r--filter/source/graphicfilter/itiff/ccidecom.cxx1112
-rw-r--r--filter/source/graphicfilter/itiff/ccidecom.hxx125
-rw-r--r--filter/source/graphicfilter/itiff/exports.map7
-rw-r--r--filter/source/graphicfilter/itiff/itiff.cxx1342
-rw-r--r--filter/source/graphicfilter/itiff/lzwdecom.cxx192
-rw-r--r--filter/source/graphicfilter/itiff/lzwdecom.hxx79
-rw-r--r--filter/source/graphicfilter/itiff/makefile.mk71
-rw-r--r--filter/source/msfilter/countryid.cxx342
-rw-r--r--filter/source/msfilter/escherex.cxx4951
-rw-r--r--filter/source/msfilter/eschesdo.cxx1255
-rw-r--r--filter/source/msfilter/eschesdo.hxx206
-rw-r--r--filter/source/msfilter/makefile.mk86
-rw-r--r--filter/source/msfilter/makefile.pmk30
-rw-r--r--filter/source/msfilter/mscodec.cxx534
-rw-r--r--filter/source/msfilter/msdffimp.cxx8151
-rw-r--r--filter/source/msfilter/msfiltertracer.cxx251
-rw-r--r--filter/source/msfilter/msocximex.cxx5956
-rw-r--r--filter/source/msfilter/msoleexp.cxx364
-rw-r--r--filter/source/msfilter/msvbahelper.cxx410
-rw-r--r--filter/source/msfilter/msvbasic.cxx639
-rw-r--r--filter/source/msfilter/msvbasic.hxx120
-rw-r--r--filter/source/msfilter/powerpoint/makefile.mk65
-rw-r--r--filter/source/msfilter/powerpoint/pptcom.hxx76
-rw-r--r--filter/source/msfilter/powerpoint/pptimporter.cxx163
-rw-r--r--filter/source/msfilter/powerpoint/pptimporter.hxx91
-rw-r--r--filter/source/msfilter/powerpoint/pptimporteruno.cxx110
-rw-r--r--filter/source/msfilter/powerpoint/ppttoxml.cxx91
-rw-r--r--filter/source/msfilter/powerpoint/ppttoxml.hxx51
-rw-r--r--filter/source/msfilter/svdfppt.cxx7819
-rw-r--r--filter/source/msfilter/svxmsbas.cxx502
-rw-r--r--filter/source/msfilter/svxmsbas2.cxx85
-rw-r--r--filter/source/msfilter/viscache.hxx82
-rw-r--r--filter/source/pdf/impdialog.cxx1553
-rw-r--r--filter/source/pdf/impdialog.hrc185
-rw-r--r--filter/source/pdf/impdialog.hxx406
-rw-r--r--filter/source/pdf/impdialog.src840
-rw-r--r--filter/source/pdf/makefile.mk83
-rw-r--r--filter/source/pdf/pdf.hrc29
-rw-r--r--filter/source/pdf/pdf.src66
-rw-r--r--filter/source/pdf/pdfdialog.cxx222
-rw-r--r--filter/source/pdf/pdfdialog.hxx91
-rw-r--r--filter/source/pdf/pdfexport.cxx1979
-rw-r--r--filter/source/pdf/pdfexport.hxx141
-rw-r--r--filter/source/pdf/pdffilter.cxx267
-rw-r--r--filter/source/pdf/pdffilter.hxx133
-rw-r--r--filter/source/pdf/pdfuno.cxx124
-rw-r--r--filter/source/placeware/Base64Codec.cxx207
-rw-r--r--filter/source/placeware/Base64Codec.hxx47
-rw-r--r--filter/source/placeware/exporter.cxx516
-rw-r--r--filter/source/placeware/exporter.hxx60
-rw-r--r--filter/source/placeware/exports.dxp3
-rw-r--r--filter/source/placeware/filter.cxx217
-rw-r--r--filter/source/placeware/makefile.mk67
-rw-r--r--filter/source/placeware/placeware.xml45
-rw-r--r--filter/source/placeware/tempfile.cxx189
-rw-r--r--filter/source/placeware/tempfile.hxx48
-rw-r--r--filter/source/placeware/uno.cxx110
-rw-r--r--filter/source/placeware/zip.cxx332
-rw-r--r--filter/source/placeware/zip.hxx62
-rw-r--r--filter/source/placeware/zipfile.hxx91
-rw-r--r--filter/source/svg/SOTranscoder.java45
-rw-r--r--filter/source/svg/makefile.mk83
-rw-r--r--filter/source/svg/svgexport.cxx1007
-rw-r--r--filter/source/svg/svgfilter.cxx229
-rw-r--r--filter/source/svg/svgfilter.hxx296
-rw-r--r--filter/source/svg/svgfontexport.cxx258
-rw-r--r--filter/source/svg/svgfontexport.hxx64
-rw-r--r--filter/source/svg/svgimport.cxx188
-rw-r--r--filter/source/svg/svgscript.hxx209
-rw-r--r--filter/source/svg/svguno.cxx102
-rw-r--r--filter/source/svg/svgwriter.cxx1657
-rw-r--r--filter/source/svg/svgwriter.hxx225
-rw-r--r--filter/source/t602/filterenv.cxx128
-rw-r--r--filter/source/t602/makefile.mk62
-rw-r--r--filter/source/t602/t602filter.cxx1266
-rw-r--r--filter/source/t602/t602filter.hrc45
-rw-r--r--filter/source/t602/t602filter.hxx286
-rw-r--r--filter/source/t602/t602filter.src83
-rw-r--r--filter/source/xmlfilteradaptor/XmlFilterAdaptor.cxx437
-rw-r--r--filter/source/xmlfilteradaptor/XmlFilterAdaptor.hxx184
-rw-r--r--filter/source/xmlfilteradaptor/genericfilter.cxx180
-rw-r--r--filter/source/xmlfilteradaptor/makefile.mk62
-rwxr-xr-xfilter/source/xmlfilteradaptor/streamwrap.cxx70
-rwxr-xr-xfilter/source/xmlfilteradaptor/streamwrap.hxx78
-rw-r--r--filter/source/xmlfilterdetect/fdcomp.cxx180
-rw-r--r--filter/source/xmlfilterdetect/filterdetect.cxx309
-rw-r--r--filter/source/xmlfilterdetect/filterdetect.hxx168
-rw-r--r--filter/source/xmlfilterdetect/makefile.mk60
-rw-r--r--filter/source/xslt/common/copy.xsl9
-rw-r--r--filter/source/xslt/common/math.xsl589
-rw-r--r--filter/source/xslt/common/measure_conversion.xsl387
-rw-r--r--filter/source/xslt/export/common/ooo2ms_docpr.xsl137
-rw-r--r--filter/source/xslt/export/spreadsheetml/formular.xsl640
-rw-r--r--filter/source/xslt/export/spreadsheetml/ooo2spreadsheetml.xsl417
-rw-r--r--filter/source/xslt/export/spreadsheetml/style_mapping.xsl390
-rw-r--r--filter/source/xslt/export/spreadsheetml/styles.xsl695
-rw-r--r--filter/source/xslt/export/spreadsheetml/table.xsl937
-rw-r--r--filter/source/xslt/export/uof/odf2uof_presentation.xsl3375
-rw-r--r--filter/source/xslt/export/uof/odf2uof_spreadsheet.xsl6194
-rw-r--r--filter/source/xslt/export/uof/odf2uof_text.xsl4445
-rw-r--r--filter/source/xslt/export/wordml/ooo2wordml.xsl218
-rw-r--r--filter/source/xslt/export/wordml/ooo2wordml_border.xsl153
-rw-r--r--filter/source/xslt/export/wordml/ooo2wordml_custom_draw.xsl284
-rw-r--r--filter/source/xslt/export/wordml/ooo2wordml_draw.xsl1885
-rw-r--r--filter/source/xslt/export/wordml/ooo2wordml_field.xsl733
-rw-r--r--filter/source/xslt/export/wordml/ooo2wordml_list.xsl340
-rw-r--r--filter/source/xslt/export/wordml/ooo2wordml_page.xsl401
-rw-r--r--filter/source/xslt/export/wordml/ooo2wordml_path.xsl858
-rw-r--r--filter/source/xslt/export/wordml/ooo2wordml_settings.xsl312
-rw-r--r--filter/source/xslt/export/wordml/ooo2wordml_table.xsl416
-rw-r--r--filter/source/xslt/export/wordml/ooo2wordml_text.xsl1279
-rw-r--r--filter/source/xslt/import/common/ms2ooo_docpr.xsl101
-rw-r--r--filter/source/xslt/import/spreadsheetml/spreadsheetml2ooo.xsl9173
-rw-r--r--filter/source/xslt/import/uof/uof2odf_presentation.xsl3478
-rw-r--r--filter/source/xslt/import/uof/uof2odf_spreadsheet.xsl9054
-rw-r--r--filter/source/xslt/import/uof/uof2odf_text.xsl4650
-rw-r--r--filter/source/xslt/import/wordml/wordml2ooo.xsl348
-rw-r--r--filter/source/xslt/import/wordml/wordml2ooo_custom_draw.xsl284
-rw-r--r--filter/source/xslt/import/wordml/wordml2ooo_draw.xsl2213
-rw-r--r--filter/source/xslt/import/wordml/wordml2ooo_field.xsl1587
-rw-r--r--filter/source/xslt/import/wordml/wordml2ooo_list.xsl657
-rw-r--r--filter/source/xslt/import/wordml/wordml2ooo_page.xsl387
-rw-r--r--filter/source/xslt/import/wordml/wordml2ooo_path.xsl1818
-rw-r--r--filter/source/xslt/import/wordml/wordml2ooo_props.xsl107
-rw-r--r--filter/source/xslt/import/wordml/wordml2ooo_settings.xsl69
-rw-r--r--filter/source/xslt/import/wordml/wordml2ooo_table.xsl1286
-rw-r--r--filter/source/xslt/import/wordml/wordml2ooo_text.xsl1058
-rw-r--r--filter/source/xslt/odf2xhtml/export/common/body.xsl422
-rw-r--r--filter/source/xslt/odf2xhtml/export/common/styles/style_collector.xsl828
-rw-r--r--filter/source/xslt/odf2xhtml/export/common/styles/style_mapping_css.xsl355
-rw-r--r--filter/source/xslt/odf2xhtml/export/common/table/table.xsl164
-rw-r--r--filter/source/xslt/odf2xhtml/export/common/table/table_cells.xsl279
-rw-r--r--filter/source/xslt/odf2xhtml/export/common/table/table_columns.xsl243
-rw-r--r--filter/source/xslt/odf2xhtml/export/common/table/table_rows.xsl212
-rw-r--r--filter/source/xslt/odf2xhtml/export/common/table_of_content.xsl554
-rw-r--r--filter/source/xslt/odf2xhtml/export/xhtml/body.xsl2872
-rw-r--r--filter/source/xslt/odf2xhtml/export/xhtml/header.xsl484
-rw-r--r--filter/source/xslt/odf2xhtml/export/xhtml/opendoc2xhtml.xsl183
-rw-r--r--filter/source/xslt/odf2xhtml/export/xhtml/table.xsl222
-rw-r--r--filter/source/xsltdialog/exports.dxp3
-rw-r--r--filter/source/xsltdialog/hidother.src78
-rw-r--r--filter/source/xsltdialog/makefile.mk94
-rw-r--r--filter/source/xsltdialog/typedetectionexport.cxx298
-rw-r--r--filter/source/xsltdialog/typedetectionexport.hxx53
-rw-r--r--filter/source/xsltdialog/typedetectionimport.cxx362
-rw-r--r--filter/source/xsltdialog/typedetectionimport.hxx129
-rw-r--r--filter/source/xsltdialog/xmlfileview.cxx990
-rw-r--r--filter/source/xsltdialog/xmlfileview.hrc36
-rw-r--r--filter/source/xsltdialog/xmlfileview.hxx177
-rw-r--r--filter/source/xsltdialog/xmlfileview.src64
-rw-r--r--filter/source/xsltdialog/xmlfiltercommon.hrc41
-rw-r--r--filter/source/xsltdialog/xmlfiltercommon.hxx107
-rw-r--r--filter/source/xsltdialog/xmlfilterdialogcomponent.cxx466
-rw-r--r--filter/source/xsltdialog/xmlfilterdialogstrings.hrc72
-rw-r--r--filter/source/xsltdialog/xmlfilterdialogstrings.src203
-rw-r--r--filter/source/xsltdialog/xmlfilterhelpids.hrc88
-rw-r--r--filter/source/xsltdialog/xmlfilterjar.cxx405
-rw-r--r--filter/source/xsltdialog/xmlfilterjar.hxx65
-rw-r--r--filter/source/xsltdialog/xmlfiltersettingsdialog.cxx1799
-rw-r--r--filter/source/xsltdialog/xmlfiltersettingsdialog.hrc43
-rw-r--r--filter/source/xsltdialog/xmlfiltersettingsdialog.hxx161
-rw-r--r--filter/source/xsltdialog/xmlfiltersettingsdialog.src139
-rw-r--r--filter/source/xsltdialog/xmlfiltertabdialog.cxx373
-rw-r--r--filter/source/xsltdialog/xmlfiltertabdialog.hrc33
-rw-r--r--filter/source/xsltdialog/xmlfiltertabdialog.hxx75
-rw-r--r--filter/source/xsltdialog/xmlfiltertabdialog.src65
-rw-r--r--filter/source/xsltdialog/xmlfiltertabpagebasic.cxx153
-rw-r--r--filter/source/xsltdialog/xmlfiltertabpagebasic.hrc44
-rw-r--r--filter/source/xsltdialog/xmlfiltertabpagebasic.hxx67
-rw-r--r--filter/source/xsltdialog/xmlfiltertabpagebasic.src152
-rw-r--r--filter/source/xsltdialog/xmlfiltertabpagexslt.cxx221
-rw-r--r--filter/source/xsltdialog/xmlfiltertabpagexslt.hrc48
-rw-r--r--filter/source/xsltdialog/xmlfiltertabpagexslt.hxx82
-rw-r--r--filter/source/xsltdialog/xmlfiltertabpagexslt.src176
-rw-r--r--filter/source/xsltdialog/xmlfiltertestdialog.cxx783
-rw-r--r--filter/source/xsltdialog/xmlfiltertestdialog.hrc53
-rw-r--r--filter/source/xsltdialog/xmlfiltertestdialog.hxx107
-rw-r--r--filter/source/xsltdialog/xmlfiltertestdialog.src210
-rw-r--r--filter/source/xsltfilter/Base64.java1833
-rw-r--r--filter/source/xsltfilter/Manifest3
-rw-r--r--filter/source/xsltfilter/XSLTFilter.cxx731
-rw-r--r--filter/source/xsltfilter/XSLTFilterOLEExtracter.java393
-rw-r--r--filter/source/xsltfilter/XSLTransformer.java484
-rw-r--r--filter/source/xsltfilter/fla.cxx327
-rw-r--r--filter/source/xsltfilter/fla.hxx53
-rw-r--r--filter/source/xsltfilter/makefile.mk85
-rw-r--r--filter/source/xsltvalidate/Manifest2
-rw-r--r--filter/source/xsltvalidate/XSLTValidate.java347
-rw-r--r--filter/source/xsltvalidate/makefile.mk76
-rw-r--r--formula/inc/AddressConvention.hxx39
-rw-r--r--formula/inc/formula/ExternalReferenceHelper.hxx45
-rw-r--r--formula/inc/formula/FormulaCompiler.hxx381
-rw-r--r--formula/inc/formula/FormulaOpCodeMapperObj.hxx86
-rw-r--r--formula/inc/formula/IControlReferenceHandler.hxx45
-rw-r--r--formula/inc/formula/IFunctionDescription.hxx163
-rw-r--r--formula/inc/formula/compiler.hrc406
-rw-r--r--formula/inc/formula/errorcodes.hxx122
-rw-r--r--formula/inc/formula/formdata.hxx91
-rw-r--r--formula/inc/formula/formula.hxx157
-rw-r--r--formula/inc/formula/formuladllapi.h41
-rw-r--r--formula/inc/formula/formulahelper.hxx86
-rw-r--r--formula/inc/formula/funcutl.hxx106
-rw-r--r--formula/inc/formula/grammar.hxx236
-rw-r--r--formula/inc/formula/intruref.hxx101
-rw-r--r--formula/inc/formula/opcode.hxx405
-rw-r--r--formula/inc/formula/token.hxx399
-rw-r--r--formula/inc/formula/tokenarray.hxx286
-rw-r--r--formula/inc/helpids.hrc62
-rw-r--r--formula/inc/makefile.mk47
-rw-r--r--formula/inc/pch/precompiled_formula.cxx29
-rw-r--r--formula/inc/pch/precompiled_formula.hxx36
-rw-r--r--formula/prj/build.lst9
-rw-r--r--formula/prj/d.lst37
-rw-r--r--formula/prj/for.xml14
-rw-r--r--formula/source/core/api/FormulaCompiler.cxx1859
-rw-r--r--formula/source/core/api/FormulaOpCodeMapperObj.cxx126
-rw-r--r--formula/source/core/api/makefile.mk47
-rw-r--r--formula/source/core/api/services.cxx75
-rw-r--r--formula/source/core/api/token.cxx1378
-rw-r--r--formula/source/core/inc/core_resource.hrc45
-rw-r--r--formula/source/core/inc/core_resource.hxx111
-rw-r--r--formula/source/core/resource/core_resource.cxx108
-rw-r--r--formula/source/core/resource/core_resource.src1878
-rw-r--r--formula/source/core/resource/makefile.mk48
-rw-r--r--formula/source/ui/dlg/ControlHelper.hxx193
-rw-r--r--formula/source/ui/dlg/FormulaHelper.cxx406
-rw-r--r--formula/source/ui/dlg/formdlgs.hrc80
-rw-r--r--formula/source/ui/dlg/formdlgs.src536
-rw-r--r--formula/source/ui/dlg/formula.cxx2236
-rw-r--r--formula/source/ui/dlg/funcpage.cxx265
-rw-r--r--formula/source/ui/dlg/funcpage.hxx123
-rw-r--r--formula/source/ui/dlg/funcutl.cxx1106
-rw-r--r--formula/source/ui/dlg/makefile.mk66
-rw-r--r--formula/source/ui/dlg/parawin.cxx600
-rw-r--r--formula/source/ui/dlg/parawin.hrc54
-rw-r--r--formula/source/ui/dlg/parawin.hxx174
-rw-r--r--formula/source/ui/dlg/parawin.src189
-rw-r--r--formula/source/ui/dlg/structpg.cxx227
-rw-r--r--formula/source/ui/dlg/structpg.hxx123
-rw-r--r--formula/source/ui/inc/ForResId.hrc74
-rw-r--r--formula/source/ui/inc/ModuleHelper.hxx99
-rw-r--r--formula/source/ui/resource/ModuleHelper.cxx142
-rw-r--r--formula/source/ui/resource/makefile.mk49
-rw-r--r--formula/util/hh.html190
-rw-r--r--formula/util/hidother.src54
-rw-r--r--formula/util/makefile.mk138
-rw-r--r--formula/util/makefile.pmk42
-rw-r--r--fpicker/inc/makefile.mk47
-rw-r--r--fpicker/inc/pch/precompiled_fpicker.cxx29
-rw-r--r--fpicker/inc/pch/precompiled_fpicker.hxx33
-rw-r--r--fpicker/prj/build.lst11
-rw-r--r--fpicker/prj/d.lst14
-rw-r--r--fpicker/source/aqua/AquaFilePickerDelegate.hxx57
-rw-r--r--fpicker/source/aqua/AquaFilePickerDelegate.mm123
-rw-r--r--fpicker/source/aqua/CFStringUtilities.cxx121
-rw-r--r--fpicker/source/aqua/CFStringUtilities.hxx161
-rw-r--r--fpicker/source/aqua/ControlHelper.cxx1019
-rw-r--r--fpicker/source/aqua/ControlHelper.hxx195
-rw-r--r--fpicker/source/aqua/FPServiceInfo.hxx50
-rw-r--r--fpicker/source/aqua/FPentry.cxx171
-rw-r--r--fpicker/source/aqua/FilterHelper.cxx545
-rw-r--r--fpicker/source/aqua/FilterHelper.hxx160
-rw-r--r--fpicker/source/aqua/NSString_OOoAdditions.hxx44
-rw-r--r--fpicker/source/aqua/NSString_OOoAdditions.mm77
-rw-r--r--fpicker/source/aqua/NSURL_OOoAdditions.hxx48
-rw-r--r--fpicker/source/aqua/NSURL_OOoAdditions.mm112
-rw-r--r--fpicker/source/aqua/SalAquaConstants.h63
-rw-r--r--fpicker/source/aqua/SalAquaFilePicker.cxx812
-rw-r--r--fpicker/source/aqua/SalAquaFilePicker.hxx252
-rw-r--r--fpicker/source/aqua/SalAquaFolderPicker.cxx289
-rw-r--r--fpicker/source/aqua/SalAquaFolderPicker.hxx138
-rw-r--r--fpicker/source/aqua/SalAquaPicker.cxx267
-rw-r--r--fpicker/source/aqua/SalAquaPicker.hxx106
-rw-r--r--fpicker/source/aqua/fps-aqua-ucd.txt13
-rw-r--r--fpicker/source/aqua/fps_aqua.xml78
-rw-r--r--fpicker/source/aqua/makefile.mk85
-rw-r--r--fpicker/source/aqua/resourceprovider.cxx240
-rw-r--r--fpicker/source/aqua/resourceprovider.hxx67
-rw-r--r--fpicker/source/generic/fpicker.cxx233
-rw-r--r--fpicker/source/generic/makefile.mk62
-rw-r--r--fpicker/source/office/OfficeControlAccess.cxx791
-rw-r--r--fpicker/source/office/OfficeControlAccess.hxx125
-rw-r--r--fpicker/source/office/OfficeFilePicker.cxx1186
-rw-r--r--fpicker/source/office/OfficeFilePicker.hxx230
-rw-r--r--fpicker/source/office/OfficeFilePicker.src99
-rw-r--r--fpicker/source/office/OfficeFolderPicker.cxx265
-rw-r--r--fpicker/source/office/OfficeFolderPicker.hxx122
-rw-r--r--fpicker/source/office/asyncfilepicker.cxx220
-rw-r--r--fpicker/source/office/asyncfilepicker.hxx118
-rw-r--r--fpicker/source/office/commonpicker.cxx506
-rw-r--r--fpicker/source/office/commonpicker.hxx209
-rw-r--r--fpicker/source/office/fpinteraction.cxx169
-rw-r--r--fpicker/source/office/fpinteraction.hxx92
-rw-r--r--fpicker/source/office/fps_office.cxx80
-rw-r--r--fpicker/source/office/fpsmartcontent.cxx308
-rw-r--r--fpicker/source/office/fpsmartcontent.hxx212
-rw-r--r--fpicker/source/office/iodlg.cxx3482
-rw-r--r--fpicker/source/office/iodlg.hrc107
-rw-r--r--fpicker/source/office/iodlg.hxx475
-rw-r--r--fpicker/source/office/iodlg.src318
-rw-r--r--fpicker/source/office/iodlgimp.cxx507
-rw-r--r--fpicker/source/office/iodlgimp.hxx339
-rw-r--r--fpicker/source/office/makefile.mk88
-rw-r--r--fpicker/source/office/pickercallbacks.hxx62
-rw-r--r--fpicker/source/unx/gnome/FPServiceInfo.hxx50
-rw-r--r--fpicker/source/unx/gnome/FPentry.cxx181
-rw-r--r--fpicker/source/unx/gnome/SalGtkFilePicker.cxx2066
-rw-r--r--fpicker/source/unx/gnome/SalGtkFilePicker.hxx356
-rw-r--r--fpicker/source/unx/gnome/SalGtkFolderPicker.cxx245
-rw-r--r--fpicker/source/unx/gnome/SalGtkFolderPicker.hxx135
-rw-r--r--fpicker/source/unx/gnome/SalGtkPicker.cxx253
-rw-r--r--fpicker/source/unx/gnome/SalGtkPicker.hxx121
-rw-r--r--fpicker/source/unx/gnome/eventnotification.hxx53
-rw-r--r--fpicker/source/unx/gnome/fps-gnome-ucd.txt13
-rw-r--r--fpicker/source/unx/gnome/fps_gnome.xml79
-rw-r--r--fpicker/source/unx/gnome/makefile.mk98
-rw-r--r--fpicker/source/unx/gnome/resourceprovider.cxx225
-rw-r--r--fpicker/source/unx/gnome/resourceprovider.hxx67
-rw-r--r--fpicker/source/unx/kde4/FPServiceInfo.hxx40
-rw-r--r--fpicker/source/unx/kde4/KDE4FPEntry.cxx102
-rw-r--r--fpicker/source/unx/kde4/KDE4FilePicker.cxx740
-rw-r--r--fpicker/source/unx/kde4/KDE4FilePicker.hxx171
-rw-r--r--fpicker/source/unx/kde4/fps-kde4-ucd.txt6
-rw-r--r--fpicker/source/unx/kde4/fps_kde4.xml51
-rw-r--r--fpicker/source/unx/kde4/makefile.mk82
-rw-r--r--fpicker/source/win32/filepicker/FPServiceInfo.hxx77
-rw-r--r--fpicker/source/win32/filepicker/FPentry.cxx157
-rw-r--r--fpicker/source/win32/filepicker/FileOpenDlg.cxx695
-rw-r--r--fpicker/source/win32/filepicker/FileOpenDlg.hxx327
-rw-r--r--fpicker/source/win32/filepicker/FilePicker.cxx799
-rw-r--r--fpicker/source/win32/filepicker/FilePicker.hxx255
-rw-r--r--fpicker/source/win32/filepicker/FilterContainer.cxx337
-rw-r--r--fpicker/source/win32/filepicker/FilterContainer.hxx115
-rw-r--r--fpicker/source/win32/filepicker/Fps.rc438
-rw-r--r--fpicker/source/win32/filepicker/IVistaFilePickerInternalNotify.hxx75
-rw-r--r--fpicker/source/win32/filepicker/PreviewCtrl.cxx615
-rw-r--r--fpicker/source/win32/filepicker/PreviewCtrl.hxx199
-rw-r--r--fpicker/source/win32/filepicker/SolarMutex.cxx55
-rw-r--r--fpicker/source/win32/filepicker/SolarMutex.hxx30
-rw-r--r--fpicker/source/win32/filepicker/VistaFilePicker.cxx725
-rw-r--r--fpicker/source/win32/filepicker/VistaFilePicker.hxx315
-rw-r--r--fpicker/source/win32/filepicker/VistaFilePickerEventHandler.cxx507
-rw-r--r--fpicker/source/win32/filepicker/VistaFilePickerEventHandler.hxx225
-rw-r--r--fpicker/source/win32/filepicker/VistaFilePickerImpl.cxx1212
-rw-r--r--fpicker/source/win32/filepicker/VistaFilePickerImpl.hxx353
-rw-r--r--fpicker/source/win32/filepicker/WinFileOpenImpl.cxx996
-rw-r--r--fpicker/source/win32/filepicker/WinFileOpenImpl.hxx234
-rw-r--r--fpicker/source/win32/filepicker/afxres.h2
-rw-r--r--fpicker/source/win32/filepicker/asynceventnotifier.cxx327
-rw-r--r--fpicker/source/win32/filepicker/asynceventnotifier.hxx109
-rw-r--r--fpicker/source/win32/filepicker/asyncrequests.cxx228
-rw-r--r--fpicker/source/win32/filepicker/asyncrequests.hxx227
-rw-r--r--fpicker/source/win32/filepicker/comptr.hxx222
-rw-r--r--fpicker/source/win32/filepicker/controlaccess.cxx261
-rw-r--r--fpicker/source/win32/filepicker/controlaccess.hxx80
-rw-r--r--fpicker/source/win32/filepicker/controlcommand.cxx282
-rw-r--r--fpicker/source/win32/filepicker/controlcommand.hxx143
-rw-r--r--fpicker/source/win32/filepicker/controlcommandrequest.hxx86
-rw-r--r--fpicker/source/win32/filepicker/controlcommandresult.hxx108
-rw-r--r--fpicker/source/win32/filepicker/customcontrol.cxx67
-rw-r--r--fpicker/source/win32/filepicker/customcontrol.hxx60
-rw-r--r--fpicker/source/win32/filepicker/customcontrolcontainer.cxx143
-rw-r--r--fpicker/source/win32/filepicker/customcontrolcontainer.hxx60
-rw-r--r--fpicker/source/win32/filepicker/customcontrolfactory.cxx86
-rw-r--r--fpicker/source/win32/filepicker/customcontrolfactory.hxx61
-rw-r--r--fpicker/source/win32/filepicker/dialogcustomcontrols.cxx195
-rw-r--r--fpicker/source/win32/filepicker/dialogcustomcontrols.hxx123
-rw-r--r--fpicker/source/win32/filepicker/dibpreview.cxx472
-rw-r--r--fpicker/source/win32/filepicker/dibpreview.hxx116
-rw-r--r--fpicker/source/win32/filepicker/eventnotification.hxx53
-rw-r--r--fpicker/source/win32/filepicker/filepickereventnotification.cxx84
-rw-r--r--fpicker/source/win32/filepicker/filepickereventnotification.hxx73
-rw-r--r--fpicker/source/win32/filepicker/filepickerstate.cxx717
-rw-r--r--fpicker/source/win32/filepicker/filepickerstate.hxx162
-rw-r--r--fpicker/source/win32/filepicker/fps.xml51
-rw-r--r--fpicker/source/win32/filepicker/getfilenamewrapper.cxx296
-rw-r--r--fpicker/source/win32/filepicker/getfilenamewrapper.hxx66
-rw-r--r--fpicker/source/win32/filepicker/helppopupwindow.cxx615
-rw-r--r--fpicker/source/win32/filepicker/helppopupwindow.hxx143
-rw-r--r--fpicker/source/win32/filepicker/makefile.mk84
-rw-r--r--fpicker/source/win32/filepicker/platform_vista.h87
-rw-r--r--fpicker/source/win32/filepicker/platform_xp.h55
-rw-r--r--fpicker/source/win32/filepicker/previewadapter.cxx713
-rw-r--r--fpicker/source/win32/filepicker/previewadapter.hxx107
-rw-r--r--fpicker/source/win32/filepicker/previewbase.cxx150
-rw-r--r--fpicker/source/win32/filepicker/previewbase.hxx88
-rw-r--r--fpicker/source/win32/filepicker/propmap.hxx101
-rw-r--r--fpicker/source/win32/filepicker/resource.h21
-rw-r--r--fpicker/source/win32/filepicker/shared.hxx38
-rw-r--r--fpicker/source/win32/filepicker/vistatypes.h68
-rw-r--r--fpicker/source/win32/filepicker/workbench/Test_fps.cxx387
-rw-r--r--fpicker/source/win32/filepicker/workbench/makefile.mk62
-rw-r--r--fpicker/source/win32/folderpicker/FOPServiceInfo.hxx54
-rw-r--r--fpicker/source/win32/folderpicker/FolderPicker.cxx219
-rw-r--r--fpicker/source/win32/folderpicker/FolderPicker.hxx129
-rw-r--r--fpicker/source/win32/folderpicker/FopEvtDisp.hxx45
-rw-r--r--fpicker/source/win32/folderpicker/Fopentry.cxx144
-rw-r--r--fpicker/source/win32/folderpicker/MtaFop.cxx839
-rw-r--r--fpicker/source/win32/folderpicker/MtaFop.hxx191
-rw-r--r--fpicker/source/win32/folderpicker/WinFOPImpl.cxx168
-rw-r--r--fpicker/source/win32/folderpicker/WinFOPImpl.hxx83
-rw-r--r--fpicker/source/win32/folderpicker/fop.xml40
-rw-r--r--fpicker/source/win32/folderpicker/makefile.mk51
-rw-r--r--fpicker/source/win32/folderpicker/workbench/Test_fops.cxx203
-rw-r--r--fpicker/source/win32/folderpicker/workbench/makefile.mk62
-rw-r--r--fpicker/source/win32/misc/AutoBuffer.cxx169
-rw-r--r--fpicker/source/win32/misc/AutoBuffer.hxx82
-rw-r--r--fpicker/source/win32/misc/WinImplHelper.cxx610
-rw-r--r--fpicker/source/win32/misc/WinImplHelper.hxx123
-rw-r--r--fpicker/source/win32/misc/makefile.mk57
-rw-r--r--fpicker/source/win32/misc/resourceprovider.cxx194
-rw-r--r--fpicker/source/win32/misc/resourceprovider.hxx60
-rw-r--r--fpicker/test/makefile.mk106
-rw-r--r--fpicker/test/svdem.cxx217
-rw-r--r--fpicker/util/exports.dxp3
-rw-r--r--fpicker/util/makefile.mk102
-rw-r--r--framework/dtd/accelerator.dtd44
-rw-r--r--framework/dtd/event.dtd45
-rw-r--r--framework/dtd/groupuinames.dtd35
-rw-r--r--framework/dtd/image.dtd67
-rw-r--r--framework/dtd/menubar.dtd46
-rw-r--r--framework/dtd/statusbar.dtd48
-rw-r--r--framework/dtd/toolbar.dtd67
-rw-r--r--framework/inc/acceleratorconst.h88
-rw-r--r--framework/inc/arguments.h173
-rw-r--r--framework/inc/classes/actiontriggercontainer.hxx77
-rw-r--r--framework/inc/classes/actiontriggerpropertyset.hxx133
-rw-r--r--framework/inc/classes/actiontriggerseparatorpropertyset.hxx115
-rw-r--r--framework/inc/classes/addonmenu.hxx140
-rw-r--r--framework/inc/classes/addonsoptions.hxx374
-rw-r--r--framework/inc/classes/bmkmenu.hxx81
-rw-r--r--framework/inc/classes/checkediterator.hxx345
-rw-r--r--framework/inc/classes/converter.hxx91
-rw-r--r--framework/inc/classes/droptargetlistener.hxx108
-rw-r--r--framework/inc/classes/filtercache.hxx447
-rw-r--r--framework/inc/classes/filtercachedata.hxx859
-rw-r--r--framework/inc/classes/framecontainer.hxx151
-rw-r--r--framework/inc/classes/framelistanalyzer.hxx213
-rw-r--r--framework/inc/classes/fwkresid.hxx46
-rw-r--r--framework/inc/classes/fwktabwindow.hxx135
-rwxr-xr-xframework/inc/classes/fwlresid.hxx46
-rw-r--r--framework/inc/classes/imagewrapper.hxx70
-rw-r--r--framework/inc/classes/menuextensionsupplier.hxx50
-rw-r--r--framework/inc/classes/menumanager.hxx168
-rw-r--r--framework/inc/classes/propertysethelper.hxx257
-rw-r--r--framework/inc/classes/protocolhandlercache.hxx199
-rw-r--r--framework/inc/classes/resource.hrc87
-rw-r--r--framework/inc/classes/rootactiontriggercontainer.hxx127
-rw-r--r--framework/inc/classes/servicemanager.hxx280
-rw-r--r--framework/inc/classes/sfxhelperfunctions.hxx73
-rw-r--r--framework/inc/classes/taskcreator.hxx102
-rw-r--r--framework/inc/classes/wildcard.hxx184
-rw-r--r--framework/inc/commands.h56
-rw-r--r--framework/inc/dispatch/basedispatcher.hxx391
-rw-r--r--framework/inc/dispatch/blankdispatcher.hxx129
-rw-r--r--framework/inc/dispatch/closedispatcher.hxx322
-rw-r--r--framework/inc/dispatch/createdispatcher.hxx127
-rw-r--r--framework/inc/dispatch/dispatchinformationprovider.hxx111
-rw-r--r--framework/inc/dispatch/dispatchprovider.hxx173
-rw-r--r--framework/inc/dispatch/helpagentdispatcher.hxx205
-rw-r--r--framework/inc/dispatch/interaction.hxx325
-rw-r--r--framework/inc/dispatch/interceptionhelper.hxx326
-rw-r--r--framework/inc/dispatch/mailtodispatcher.hxx145
-rw-r--r--framework/inc/dispatch/menudispatcher.hxx336
-rw-r--r--framework/inc/dispatch/oxt_handler.hxx215
-rw-r--r--framework/inc/dispatch/popupmenudispatcher.hxx199
-rw-r--r--framework/inc/dispatch/selfdispatcher.hxx112
-rw-r--r--framework/inc/dispatch/servicehandler.hxx149
-rw-r--r--framework/inc/dispatch/startmoduledispatcher.hxx197
-rw-r--r--framework/inc/dispatch/systemexec.hxx145
-rw-r--r--framework/inc/dispatchcommands.h52
-rw-r--r--framework/inc/framework.hrc85
-rw-r--r--framework/inc/general.h82
-rw-r--r--framework/inc/helper/acceleratorinfo.hxx49
-rw-r--r--framework/inc/helper/actiontriggerhelper.hxx78
-rw-r--r--framework/inc/helper/configimporter.hxx52
-rw-r--r--framework/inc/helper/dockingareadefaultacceptor.hxx111
-rw-r--r--framework/inc/helper/fixeddocumentproperties.hxx57
-rw-r--r--framework/inc/helper/imageproducer.hxx50
-rwxr-xr-xframework/inc/helper/mischelper.hxx124
-rw-r--r--framework/inc/helper/networkdomain.hxx45
-rw-r--r--framework/inc/helper/ocomponentaccess.hxx275
-rw-r--r--framework/inc/helper/ocomponentenumeration.hxx262
-rw-r--r--framework/inc/helper/oframes.hxx355
-rw-r--r--framework/inc/helper/otasksaccess.hxx254
-rw-r--r--framework/inc/helper/otasksenumeration.hxx272
-rw-r--r--framework/inc/helper/persistentwindowstate.hxx227
-rw-r--r--framework/inc/helper/propertysetcontainer.hxx97
-rw-r--r--framework/inc/helper/shareablemutex.hxx95
-rw-r--r--framework/inc/helper/statusindicator.hxx142
-rw-r--r--framework/inc/helper/statusindicatorfactory.hxx341
-rw-r--r--framework/inc/helper/tagwindowasmodified.hxx157
-rw-r--r--framework/inc/helper/timerhelper.hxx53
-rw-r--r--framework/inc/helper/titlebarupdate.hxx249
-rw-r--r--framework/inc/helper/titlehelper.hxx227
-rw-r--r--framework/inc/helper/uiconfigelementwrapperbase.hxx161
-rw-r--r--framework/inc/helper/uielementwrapperbase.hxx130
-rw-r--r--framework/inc/helper/vclstatusindicator.hxx133
-rw-r--r--framework/inc/helper/wakeupthread.hxx100
-rw-r--r--framework/inc/helpid.hrc51
-rw-r--r--framework/inc/interaction/preventduplicateinteraction.hxx271
-rw-r--r--framework/inc/interaction/quietinteraction.hxx164
-rw-r--r--framework/inc/jobs/configaccess.hxx117
-rw-r--r--framework/inc/jobs/helponstartup.hxx231
-rw-r--r--framework/inc/jobs/job.hxx247
-rw-r--r--framework/inc/jobs/jobconst.hxx73
-rw-r--r--framework/inc/jobs/jobdata.hxx285
-rw-r--r--framework/inc/jobs/jobdispatch.hxx158
-rw-r--r--framework/inc/jobs/jobexecutor.hxx129
-rw-r--r--framework/inc/jobs/jobresult.hxx147
-rw-r--r--framework/inc/jobs/joburl.hxx177
-rw-r--r--framework/inc/jobs/shelljob.hxx169
-rw-r--r--framework/inc/loadstate.h115
-rw-r--r--framework/inc/macros/debug.hxx137
-rw-r--r--framework/inc/macros/debug/assertion.hxx235
-rw-r--r--framework/inc/macros/debug/event.hxx132
-rw-r--r--framework/inc/macros/debug/filterdbg.hxx130
-rw-r--r--framework/inc/macros/debug/logmechanism.hxx102
-rw-r--r--framework/inc/macros/debug/memorymeasure.hxx223
-rw-r--r--framework/inc/macros/debug/mutex.hxx117
-rw-r--r--framework/inc/macros/debug/plugin.hxx202
-rw-r--r--framework/inc/macros/debug/registration.hxx100
-rw-r--r--framework/inc/macros/debug/targeting.hxx252
-rw-r--r--framework/inc/macros/debug/timemeasure.hxx140
-rw-r--r--framework/inc/macros/generic.hxx78
-rw-r--r--framework/inc/macros/registration.hxx224
-rw-r--r--framework/inc/macros/xinterface.hxx708
-rw-r--r--framework/inc/macros/xserviceinfo.hxx272
-rw-r--r--framework/inc/macros/xtypeprovider.hxx714
-rw-r--r--framework/inc/makefile.mk47
-rw-r--r--framework/inc/mediadescriptor.h77
-rw-r--r--framework/inc/pch/precompiled_framework.cxx29
-rw-r--r--framework/inc/pch/precompiled_framework.hxx495
-rw-r--r--framework/inc/properties.h354
-rw-r--r--framework/inc/protocols.h157
-rw-r--r--framework/inc/queries.h402
-rw-r--r--framework/inc/recording/dispatchrecorder.hxx88
-rw-r--r--framework/inc/recording/dispatchrecordersupplier.hxx137
-rw-r--r--framework/inc/services.h218
-rw-r--r--framework/inc/services/autorecovery.hxx1022
-rw-r--r--framework/inc/services/backingcomp.hxx166
-rw-r--r--framework/inc/services/contenthandlerfactory.hxx242
-rw-r--r--framework/inc/services/desktop.hxx513
-rw-r--r--framework/inc/services/detectorfactory.hxx461
-rw-r--r--framework/inc/services/dispatchhelper.hxx135
-rw-r--r--framework/inc/services/frame.hxx480
-rw-r--r--framework/inc/services/frameloaderfactory.hxx388
-rw-r--r--framework/inc/services/layoutmanager.hxx522
-rw-r--r--framework/inc/services/license.hxx123
-rw-r--r--framework/inc/services/licensedlg.hxx104
-rw-r--r--framework/inc/services/logindialog.hrc52
-rw-r--r--framework/inc/services/logindialog.hxx890
-rw-r--r--framework/inc/services/mediatypedetectionhelper.hxx151
-rw-r--r--framework/inc/services/modulemanager.hxx201
-rw-r--r--framework/inc/services/pathsettings.hxx295
-rw-r--r--framework/inc/services/pluginframe.hxx375
-rw-r--r--framework/inc/services/sessionlistener.hxx188
-rw-r--r--framework/inc/services/substitutepathvars.hxx306
-rw-r--r--framework/inc/services/tabwindowservice.hxx232
-rw-r--r--framework/inc/services/task.hxx610
-rw-r--r--framework/inc/services/taskcreatorsrv.hxx167
-rw-r--r--framework/inc/services/uriabbreviation.hxx66
-rw-r--r--framework/inc/services/urltransformer.hxx223
-rw-r--r--framework/inc/stdtypes.h213
-rw-r--r--framework/inc/tabwin/tabwindow.hxx200
-rw-r--r--framework/inc/tabwin/tabwinfactory.hxx83
-rw-r--r--framework/inc/targets.h69
-rw-r--r--framework/inc/threadhelp/fairrwlock.hxx286
-rw-r--r--framework/inc/threadhelp/gate.hxx248
-rw-r--r--framework/inc/threadhelp/igate.h73
-rw-r--r--framework/inc/threadhelp/imutex.h67
-rw-r--r--framework/inc/threadhelp/inoncopyable.h77
-rw-r--r--framework/inc/threadhelp/irwlock.h87
-rw-r--r--framework/inc/threadhelp/itransactionmanager.h149
-rw-r--r--framework/inc/threadhelp/lockhelper.hxx179
-rw-r--r--framework/inc/threadhelp/readguard.hxx204
-rw-r--r--framework/inc/threadhelp/resetableguard.hxx200
-rw-r--r--framework/inc/threadhelp/threadhelpbase.hxx96
-rw-r--r--framework/inc/threadhelp/transactionbase.hxx85
-rw-r--r--framework/inc/threadhelp/transactionguard.hxx188
-rw-r--r--framework/inc/threadhelp/transactionmanager.hxx118
-rw-r--r--framework/inc/threadhelp/writeguard.hxx264
-rw-r--r--framework/inc/uiconfiguration/globalsettings.hxx97
-rw-r--r--framework/inc/uiconfiguration/graphicnameaccess.hxx74
-rw-r--r--framework/inc/uiconfiguration/imagemanager.hxx128
-rw-r--r--framework/inc/uiconfiguration/imagetype.hxx57
-rw-r--r--framework/inc/uiconfiguration/moduleimagemanager.hxx123
-rw-r--r--framework/inc/uiconfiguration/moduleuicfgsupplier.hxx119
-rw-r--r--framework/inc/uiconfiguration/moduleuiconfigurationmanager.hxx226
-rw-r--r--framework/inc/uiconfiguration/uicategorydescription.hxx74
-rw-r--r--framework/inc/uiconfiguration/uiconfigurationmanager.hxx210
-rw-r--r--framework/inc/uiconfiguration/windowstateconfiguration.hxx131
-rw-r--r--framework/inc/uielement/addonstoolbarmanager.hxx100
-rw-r--r--framework/inc/uielement/addonstoolbarwrapper.hxx79
-rw-r--r--framework/inc/uielement/buttontoolbarcontroller.hxx111
-rw-r--r--framework/inc/uielement/comboboxtoolbarcontroller.hxx96
-rw-r--r--framework/inc/uielement/commandinfo.hxx66
-rw-r--r--framework/inc/uielement/complextoolbarcontroller.hxx110
-rw-r--r--framework/inc/uielement/constitemcontainer.hxx137
-rw-r--r--framework/inc/uielement/controlmenucontroller.hxx115
-rw-r--r--framework/inc/uielement/dropdownboxtoolbarcontroller.hxx92
-rw-r--r--framework/inc/uielement/edittoolbarcontroller.hxx92
-rw-r--r--framework/inc/uielement/fontmenucontroller.hxx93
-rw-r--r--framework/inc/uielement/fontsizemenucontroller.hxx96
-rw-r--r--framework/inc/uielement/footermenucontroller.hxx57
-rw-r--r--framework/inc/uielement/generictoolbarcontroller.hxx99
-rw-r--r--framework/inc/uielement/headermenucontroller.hxx91
-rw-r--r--framework/inc/uielement/imagebuttontoolbarcontroller.hxx70
-rw-r--r--framework/inc/uielement/itemcontainer.hxx117
-rw-r--r--framework/inc/uielement/langselectionmenucontroller.hxx115
-rw-r--r--framework/inc/uielement/langselectionstatusbarcontroller.hxx107
-rw-r--r--framework/inc/uielement/logoimagestatusbarcontroller.hxx88
-rw-r--r--framework/inc/uielement/logotextstatusbarcontroller.hxx88
-rw-r--r--framework/inc/uielement/macrosmenucontroller.hxx88
-rw-r--r--framework/inc/uielement/menubarmanager.hxx278
-rw-r--r--framework/inc/uielement/menubarmerger.hxx124
-rw-r--r--framework/inc/uielement/menubarwrapper.hxx109
-rw-r--r--framework/inc/uielement/newmenucontroller.hxx136
-rw-r--r--framework/inc/uielement/objectmenucontroller.hxx86
-rw-r--r--framework/inc/uielement/popupmenucontroller.hxx80
-rw-r--r--framework/inc/uielement/progressbarwrapper.hxx108
-rw-r--r--framework/inc/uielement/recentfilesmenucontroller.hxx121
-rw-r--r--framework/inc/uielement/rootitemcontainer.hxx156
-rw-r--r--framework/inc/uielement/simpletextstatusbarcontroller.hxx90
-rw-r--r--framework/inc/uielement/spinfieldtoolbarcontroller.hxx115
-rw-r--r--framework/inc/uielement/statusbar.hxx76
-rw-r--r--framework/inc/uielement/statusbarmanager.hxx143
-rw-r--r--framework/inc/uielement/statusbarwrapper.hxx77
-rw-r--r--framework/inc/uielement/statusindicatorinterfacewrapper.hxx82
-rw-r--r--framework/inc/uielement/togglebuttontoolbarcontroller.hxx86
-rw-r--r--framework/inc/uielement/toolbar.hxx73
-rw-r--r--framework/inc/uielement/toolbarmanager.hxx257
-rw-r--r--framework/inc/uielement/toolbarmerger.hxx160
-rw-r--r--framework/inc/uielement/toolbarsmenucontroller.hxx125
-rw-r--r--framework/inc/uielement/toolbarwrapper.hxx101
-rw-r--r--framework/inc/uielement/uicommanddescription.hxx117
-rw-r--r--framework/inc/uielement/uielementtypenames.hxx12
-rw-r--r--framework/inc/uifactory/addonstoolboxfactory.hxx88
-rwxr-xr-xframework/inc/uifactory/factoryconfiguration.hxx124
-rw-r--r--framework/inc/uifactory/menubarfactory.hxx91
-rw-r--r--framework/inc/uifactory/popupmenucontrollerfactory.hxx67
-rw-r--r--framework/inc/uifactory/statusbarcontrollerfactory.hxx62
-rw-r--r--framework/inc/uifactory/statusbarfactory.hxx67
-rw-r--r--framework/inc/uifactory/toolbarcontrollerfactory.hxx91
-rw-r--r--framework/inc/uifactory/toolboxfactory.hxx66
-rw-r--r--framework/inc/uifactory/uielementfactorymanager.hxx151
-rw-r--r--framework/inc/uifactory/windowcontentfactorymanager.hxx90
-rw-r--r--framework/inc/xml/acceleratorconfigurationreader.hxx220
-rw-r--r--framework/inc/xml/acceleratorconfigurationwriter.hxx119
-rw-r--r--framework/inc/xml/eventsconfiguration.hxx65
-rw-r--r--framework/inc/xml/eventsdocumenthandler.hxx187
-rw-r--r--framework/inc/xml/imagesconfiguration.hxx127
-rw-r--r--framework/inc/xml/imagesdocumenthandler.hxx201
-rw-r--r--framework/inc/xml/menuconfiguration.hxx125
-rw-r--r--framework/inc/xml/menudocumenthandler.hxx318
-rw-r--r--framework/inc/xml/saxnamespacefilter.hxx104
-rw-r--r--framework/inc/xml/statusbarconfiguration.hxx58
-rw-r--r--framework/inc/xml/statusbardocumenthandler.hxx184
-rw-r--r--framework/inc/xml/toolboxconfiguration.hxx38
-rw-r--r--framework/inc/xml/toolboxconfigurationdefines.hxx86
-rw-r--r--framework/inc/xml/toolboxdocumenthandler.hxx213
-rw-r--r--framework/inc/xml/xmlnamespaces.hxx65
-rw-r--r--framework/prj/build.lst23
-rw-r--r--framework/prj/d.lst52
-rw-r--r--framework/qa/complex/ModuleManager/CheckXModuleManager.java321
-rw-r--r--framework/qa/complex/ModuleManager/makefile.mk83
-rw-r--r--framework/qa/complex/XUserInputInterception/EventTest.java594
-rw-r--r--framework/qa/complex/XUserInputInterception/makefile.mk89
-rw-r--r--framework/qa/complex/accelerators/AcceleratorsConfigurationTest.java686
-rw-r--r--framework/qa/complex/accelerators/helper/KeyMapping.java168
-rw-r--r--framework/qa/complex/accelerators/helper/makefile.mk46
-rw-r--r--framework/qa/complex/accelerators/makefile.mk86
-rwxr-xr-xframework/qa/complex/api_internal/CheckAPI.java200
-rwxr-xr-xframework/qa/complex/api_internal/CheckAPI.props4
-rwxr-xr-xframework/qa/complex/api_internal/api.lst325
-rwxr-xr-xframework/qa/complex/api_internal/makefile.mk88
-rwxr-xr-xframework/qa/complex/api_internal/tests.sce3
-rwxr-xr-xframework/qa/complex/api_internal/worksforme.sce39
-rwxr-xr-xframework/qa/complex/broken_document/LoadDocument.java103
-rwxr-xr-xframework/qa/complex/broken_document/dbf.dbf.emf1
-rwxr-xr-xframework/qa/complex/broken_document/makefile.mk80
-rw-r--r--framework/qa/complex/contextMenuInterceptor/CheckContextMenuInterceptor.java287
-rw-r--r--framework/qa/complex/contextMenuInterceptor/ContextMenuInterceptor.java130
-rw-r--r--framework/qa/complex/contextMenuInterceptor/makefile.mk77
-rwxr-xr-xframework/qa/complex/desktop/DesktopTerminate.java158
-rwxr-xr-xframework/qa/complex/desktop/makefile.mk79
-rw-r--r--framework/qa/complex/dispatches/checkdispatchapi.java462
-rw-r--r--framework/qa/complex/dispatches/helper/Interceptor.java348
-rw-r--r--framework/qa/complex/dispatches/helper/makefile.mk48
-rw-r--r--framework/qa/complex/dispatches/makefile.mk92
-rwxr-xr-xframework/qa/complex/disposing/GetServiceWhileDisposingOffice.java74
-rwxr-xr-xframework/qa/complex/disposing/makefile.mk76
-rw-r--r--framework/qa/complex/framework/autosave/AutoSave.java454
-rw-r--r--framework/qa/complex/framework/autosave/ConfigHelper.java124
-rw-r--r--framework/qa/complex/framework/autosave/Protocol.java999
-rw-r--r--framework/qa/complex/framework/autosave/makefile.mk89
-rw-r--r--framework/qa/complex/framework/recovery/CrashThread.java80
-rw-r--r--framework/qa/complex/framework/recovery/KlickButtonThread.java57
-rw-r--r--framework/qa/complex/framework/recovery/RecoveryTest.java1012
-rw-r--r--framework/qa/complex/framework/recovery/RecoveryTools.java366
-rw-r--r--framework/qa/complex/framework/recovery/TimeoutThread.java41
-rwxr-xr-xframework/qa/complex/framework/recovery/makefile.mk103
-rwxr-xr-xframework/qa/complex/imageManager/CheckImageManager.java197
-rwxr-xr-xframework/qa/complex/imageManager/interfaces/_XComponent.java179
-rwxr-xr-xframework/qa/complex/imageManager/interfaces/_XImageManager.java114
-rwxr-xr-xframework/qa/complex/imageManager/interfaces/_XInitialization.java95
-rwxr-xr-xframework/qa/complex/imageManager/interfaces/_XTypeProvider.java103
-rwxr-xr-xframework/qa/complex/imageManager/interfaces/_XUIConfiguration.java85
-rwxr-xr-xframework/qa/complex/imageManager/interfaces/_XUIConfigurationPersistence.java96
-rwxr-xr-xframework/qa/complex/imageManager/interfaces/makefile.mk57
-rwxr-xr-xframework/qa/complex/imageManager/makefile.mk79
-rw-r--r--framework/qa/complex/loadAllDocuments/CheckXComponentLoader.java733
-rw-r--r--framework/qa/complex/loadAllDocuments/CheckXComponentLoader.props3
-rw-r--r--framework/qa/complex/loadAllDocuments/helper/InteractionHandler.java155
-rw-r--r--framework/qa/complex/loadAllDocuments/helper/StatusIndicator.java237
-rw-r--r--framework/qa/complex/loadAllDocuments/helper/StreamSimulator.java474
-rw-r--r--framework/qa/complex/loadAllDocuments/helper/makefile.mk48
-rw-r--r--framework/qa/complex/loadAllDocuments/makefile.mk91
-rw-r--r--framework/qa/complex/loadAllDocuments/password_check.sxwbin0 -> 5128 bytes
-rw-r--r--framework/qa/complex/loadAllDocuments/testdocuments/Calc_6.sxcbin0 -> 9547 bytes
-rw-r--r--framework/qa/complex/loadAllDocuments/testdocuments/Writer6.sxwbin0 -> 5754 bytes
-rw-r--r--framework/qa/complex/loadAllDocuments/testdocuments/draw1.sxdbin0 -> 11821 bytes
-rw-r--r--framework/qa/complex/loadAllDocuments/testdocuments/imp1.sxibin0 -> 35135 bytes
-rw-r--r--framework/qa/complex/loadAllDocuments/testdocuments/pic.gifbin0 -> 1433 bytes
-rw-r--r--framework/qa/complex/loadAllDocuments/testdocuments/pic.jpgbin0 -> 2651 bytes
-rwxr-xr-xframework/qa/complex/path_settings/PathSettingsTest.java458
-rwxr-xr-xframework/qa/complex/path_settings/makefile.mk84
-rwxr-xr-xframework/qa/complex/path_substitution/PathSubstitutionTest.java246
-rwxr-xr-xframework/qa/complex/path_substitution/makefile.mk83
-rwxr-xr-xframework/qa/complex/sequence/CheckSequenceOfEnum.java95
-rwxr-xr-xframework/qa/complex/sequence/makefile.mk98
-rw-r--r--framework/qa/unoapi/Test.java51
-rwxr-xr-xframework/qa/unoapi/framework.sce35
-rwxr-xr-xframework/qa/unoapi/knownissues.xcl59
-rwxr-xr-xframework/qa/unoapi/makefile.mk48
-rw-r--r--framework/qa/unoapi/testdocuments/Calc_Link.sxcbin0 -> 5410 bytes
-rw-r--r--framework/qa/unoapi/testdocuments/Writer_link.sxwbin0 -> 5188 bytes
-rw-r--r--framework/qa/unoapi/testdocuments/XTypeDetection.sxwbin0 -> 4995 bytes
-rwxr-xr-xframework/qa/unoapi/testdocuments/delete.cfgbin0 -> 2799 bytes
-rw-r--r--framework/source/accelerators/acceleratorcache.cxx250
-rw-r--r--framework/source/accelerators/acceleratorconfiguration.cxx1717
-rw-r--r--framework/source/accelerators/acceleratorexecute.cxx382
-rw-r--r--framework/source/accelerators/acceleratorexecute.hxx255
-rw-r--r--framework/source/accelerators/documentacceleratorconfiguration.cxx240
-rw-r--r--framework/source/accelerators/globalacceleratorconfiguration.cxx127
-rw-r--r--framework/source/accelerators/keymapping.cxx229
-rw-r--r--framework/source/accelerators/makefile.mk52
-rw-r--r--framework/source/accelerators/moduleacceleratorconfiguration.cxx175
-rw-r--r--framework/source/accelerators/presethandler.cxx937
-rw-r--r--framework/source/accelerators/storageholder.cxx637
-rw-r--r--framework/source/application/framework.cxx286
-rw-r--r--framework/source/application/login.cxx298
-rw-r--r--framework/source/application/makefile.mk45
-rw-r--r--framework/source/classes/actiontriggercontainer.cxx203
-rw-r--r--framework/source/classes/actiontriggerpropertyset.cxx478
-rw-r--r--framework/source/classes/actiontriggerseparatorpropertyset.cxx349
-rw-r--r--framework/source/classes/addonmenu.cxx456
-rw-r--r--framework/source/classes/addonsoptions.cxx1858
-rw-r--r--framework/source/classes/bmkmenu.cxx254
-rw-r--r--framework/source/classes/converter.cxx316
-rw-r--r--framework/source/classes/droptargetlistener.cxx254
-rw-r--r--framework/source/classes/framecontainer.cxx418
-rw-r--r--framework/source/classes/framelistanalyzer.cxx302
-rw-r--r--framework/source/classes/fwkresid.cxx65
-rw-r--r--framework/source/classes/fwktabwindow.cxx412
-rwxr-xr-xframework/source/classes/fwlresid.cxx65
-rw-r--r--framework/source/classes/imagewrapper.cxx120
-rw-r--r--framework/source/classes/makefile.mk69
-rw-r--r--framework/source/classes/menuextensionsupplier.cxx64
-rw-r--r--framework/source/classes/menumanager.cxx1181
-rw-r--r--framework/source/classes/propertysethelper.cxx450
-rw-r--r--framework/source/classes/protocolhandlercache.cxx361
-rw-r--r--framework/source/classes/resource.src354
-rw-r--r--framework/source/classes/rootactiontriggercontainer.cxx379
-rw-r--r--framework/source/classes/sfxhelperfunctions.cxx181
-rw-r--r--framework/source/classes/taskcreator.cxx171
-rw-r--r--framework/source/constant/containerquery.cxx42
-rw-r--r--framework/source/constant/contenthandler.cxx42
-rw-r--r--framework/source/constant/frameloader.cxx42
-rw-r--r--framework/source/constant/makefile.mk45
-rw-r--r--framework/source/dispatch/closedispatcher.cxx653
-rw-r--r--framework/source/dispatch/dispatchinformationprovider.cxx190
-rw-r--r--framework/source/dispatch/dispatchprovider.cxx795
-rw-r--r--framework/source/dispatch/helpagentdispatcher.cxx444
-rw-r--r--framework/source/dispatch/interaction.cxx209
-rw-r--r--framework/source/dispatch/interceptionhelper.cxx342
-rw-r--r--framework/source/dispatch/loaddispatcher.cxx198
-rw-r--r--framework/source/dispatch/mailtodispatcher.cxx330
-rw-r--r--framework/source/dispatch/makefile.mk63
-rw-r--r--framework/source/dispatch/menudispatcher.cxx488
-rw-r--r--framework/source/dispatch/oxt_handler.cxx298
-rw-r--r--framework/source/dispatch/popupmenudispatcher.cxx421
-rw-r--r--framework/source/dispatch/servicehandler.cxx351
-rw-r--r--framework/source/dispatch/startmoduledispatcher.cxx241
-rw-r--r--framework/source/dispatch/systemexec.cxx234
-rwxr-xr-xframework/source/dispatch/windowcommanddispatch.cxx191
-rw-r--r--framework/source/helper/acceleratorinfo.cxx71
-rw-r--r--framework/source/helper/actiontriggerhelper.cxx408
-rw-r--r--framework/source/helper/configimporter.cxx93
-rw-r--r--framework/source/helper/dockingareadefaultacceptor.cxx187
-rw-r--r--framework/source/helper/imageproducer.cxx56
-rw-r--r--framework/source/helper/makefile.mk69
-rw-r--r--framework/source/helper/mischelper.cxx239
-rw-r--r--framework/source/helper/networkdomain.cxx295
-rw-r--r--framework/source/helper/ocomponentaccess.cxx262
-rw-r--r--framework/source/helper/ocomponentenumeration.cxx237
-rw-r--r--framework/source/helper/oframes.cxx524
-rw-r--r--framework/source/helper/persistentwindowstate.cxx352
-rw-r--r--framework/source/helper/propertysetcontainer.cxx196
-rw-r--r--framework/source/helper/shareablemutex.cxx81
-rw-r--r--framework/source/helper/statusindicator.cxx152
-rw-r--r--framework/source/helper/statusindicatorfactory.cxx654
-rw-r--r--framework/source/helper/tagwindowasmodified.cxx256
-rw-r--r--framework/source/helper/titlebarupdate.cxx413
-rw-r--r--framework/source/helper/titlehelper.cxx760
-rw-r--r--framework/source/helper/uiconfigelementwrapperbase.cxx571
-rw-r--r--framework/source/helper/uielementwrapperbase.cxx282
-rw-r--r--framework/source/helper/vclstatusindicator.cxx231
-rw-r--r--framework/source/helper/wakeupthread.cxx83
-rw-r--r--framework/source/inc/accelerators/acceleratorcache.hxx187
-rw-r--r--framework/source/inc/accelerators/acceleratorconfiguration.hxx476
-rw-r--r--framework/source/inc/accelerators/documentacceleratorconfiguration.hxx124
-rw-r--r--framework/source/inc/accelerators/globalacceleratorconfiguration.hxx109
-rw-r--r--framework/source/inc/accelerators/istoragelistener.hxx64
-rw-r--r--framework/source/inc/accelerators/keymapping.hxx162
-rw-r--r--framework/source/inc/accelerators/moduleacceleratorconfiguration.hxx115
-rw-r--r--framework/source/inc/accelerators/presethandler.hxx535
-rw-r--r--framework/source/inc/accelerators/storageholder.hxx261
-rw-r--r--framework/source/inc/constant/containerquery.hxx47
-rw-r--r--framework/source/inc/constant/contenthandler.hxx47
-rw-r--r--framework/source/inc/constant/frameloader.hxx47
-rw-r--r--framework/source/inc/dispatch/loaddispatcher.hxx161
-rw-r--r--framework/source/inc/dispatch/uieventloghelper.hxx82
-rwxr-xr-xframework/source/inc/dispatch/windowcommanddispatch.hxx174
-rw-r--r--framework/source/inc/loadenv/actionlockguard.hxx209
-rw-r--r--framework/source/inc/loadenv/loadenv.hxx704
-rw-r--r--framework/source/inc/loadenv/loadenvexception.hxx197
-rw-r--r--framework/source/inc/loadenv/targethelper.hxx124
-rw-r--r--framework/source/inc/pattern/configuration.hxx176
-rw-r--r--framework/source/inc/pattern/frame.hxx130
-rw-r--r--framework/source/inc/pattern/storages.hxx102
-rw-r--r--framework/source/inc/pattern/window.hxx155
-rw-r--r--framework/source/interaction/makefile.mk49
-rw-r--r--framework/source/interaction/preventduplicateinteraction.cxx294
-rw-r--r--framework/source/interaction/quietinteraction.cxx206
-rw-r--r--framework/source/jobs/configaccess.cxx242
-rw-r--r--framework/source/jobs/helponstartup.cxx423
-rw-r--r--framework/source/jobs/job.cxx944
-rw-r--r--framework/source/jobs/jobconst.cxx74
-rw-r--r--framework/source/jobs/jobdata.cxx714
-rw-r--r--framework/source/jobs/jobdispatch.cxx475
-rw-r--r--framework/source/jobs/jobexecutor.cxx364
-rw-r--r--framework/source/jobs/jobresult.cxx261
-rw-r--r--framework/source/jobs/joburl.cxx657
-rw-r--r--framework/source/jobs/makefile.mk53
-rw-r--r--framework/source/jobs/shelljob.cxx214
-rw-r--r--framework/source/layoutmanager/layoutmanager.cxx7563
-rw-r--r--framework/source/layoutmanager/makefile.mk47
-rw-r--r--framework/source/loadenv/loadenv.cxx1911
-rw-r--r--framework/source/loadenv/makefile.mk46
-rw-r--r--framework/source/loadenv/targethelper.cxx109
-rw-r--r--framework/source/recording/dispatchrecorder.cxx493
-rw-r--r--framework/source/recording/dispatchrecordersupplier.cxx221
-rw-r--r--framework/source/recording/makefile.mk47
-rw-r--r--framework/source/register/makefile.mk50
-rw-r--r--framework/source/register/register3rdcomponents.cxx76
-rw-r--r--framework/source/register/registerlogindialog.cxx71
-rw-r--r--framework/source/register/registerservices.cxx240
-rw-r--r--framework/source/register/registertemp.cxx133
-rw-r--r--framework/source/services/autorecovery.cxx3743
-rw-r--r--framework/source/services/backingcomp.cxx874
-rw-r--r--framework/source/services/backingwindow.cxx1153
-rw-r--r--framework/source/services/backingwindow.hxx184
-rw-r--r--framework/source/services/desktop.cxx2036
-rw-r--r--framework/source/services/dispatchhelper.cxx227
-rw-r--r--framework/source/services/frame.cxx3311
-rw-r--r--framework/source/services/fwk_services.src227
-rw-r--r--framework/source/services/license.cxx631
-rw-r--r--framework/source/services/makefile.mk64
-rw-r--r--framework/source/services/mediatypedetectionhelper.cxx111
-rw-r--r--framework/source/services/menudocumenthandler.cxx903
-rw-r--r--framework/source/services/modulemanager.cxx425
-rw-r--r--framework/source/services/pathsettings.cxx1175
-rw-r--r--framework/source/services/sessionlistener.cxx368
-rw-r--r--framework/source/services/substitutepathvars.cxx1249
-rw-r--r--framework/source/services/tabwindowservice.cxx485
-rw-r--r--framework/source/services/taskcreatorsrv.cxx404
-rw-r--r--framework/source/services/uriabbreviation.cxx90
-rw-r--r--framework/source/services/urltransformer.cxx372
-rw-r--r--framework/source/tabwin/makefile.mk48
-rw-r--r--framework/source/tabwin/tabwindow.cxx976
-rw-r--r--framework/source/tabwin/tabwinfactory.cxx176
-rw-r--r--framework/source/threadhelp/lockhelper.cxx549
-rw-r--r--framework/source/threadhelp/makefile.mk45
-rw-r--r--framework/source/threadhelp/transactionmanager.cxx373
-rw-r--r--framework/source/uiconfiguration/globalsettings.cxx356
-rw-r--r--framework/source/uiconfiguration/graphicnameaccess.cxx112
-rw-r--r--framework/source/uiconfiguration/imagemanager.cxx254
-rwxr-xr-xframework/source/uiconfiguration/imagemanagerimpl.cxx1463
-rwxr-xr-xframework/source/uiconfiguration/imagemanagerimpl.hxx222
-rw-r--r--framework/source/uiconfiguration/makefile.mk54
-rw-r--r--framework/source/uiconfiguration/moduleimagemanager.cxx226
-rw-r--r--framework/source/uiconfiguration/moduleuicfgsupplier.cxx398
-rw-r--r--framework/source/uiconfiguration/moduleuiconfigurationmanager.cxx1622
-rw-r--r--framework/source/uiconfiguration/uicategorydescription.cxx476
-rw-r--r--framework/source/uiconfiguration/uiconfigurationmanager.cxx1355
-rwxr-xr-xframework/source/uiconfiguration/uiconfigurationmanagerimpl.cxx1710
-rwxr-xr-xframework/source/uiconfiguration/uiconfigurationmanagerimpl.hxx218
-rw-r--r--framework/source/uiconfiguration/windowstateconfiguration.cxx1490
-rw-r--r--framework/source/uielement/addonstoolbarmanager.cxx559
-rw-r--r--framework/source/uielement/addonstoolbarwrapper.cxx196
-rw-r--r--framework/source/uielement/buttontoolbarcontroller.cxx337
-rw-r--r--framework/source/uielement/comboboxtoolbarcontroller.cxx438
-rw-r--r--framework/source/uielement/complextoolbarcontroller.cxx390
-rw-r--r--framework/source/uielement/constitemcontainer.cxx479
-rw-r--r--framework/source/uielement/controlmenucontroller.cxx443
-rw-r--r--framework/source/uielement/dropdownboxtoolbarcontroller.cxx353
-rw-r--r--framework/source/uielement/edittoolbarcontroller.cxx268
-rw-r--r--framework/source/uielement/fontmenucontroller.cxx262
-rw-r--r--framework/source/uielement/fontsizemenucontroller.cxx363
-rw-r--r--framework/source/uielement/footermenucontroller.cxx97
-rw-r--r--framework/source/uielement/generictoolbarcontroller.cxx393
-rw-r--r--framework/source/uielement/headermenucontroller.cxx276
-rw-r--r--framework/source/uielement/imagebuttontoolbarcontroller.cxx235
-rw-r--r--framework/source/uielement/itemcontainer.cxx266
-rw-r--r--framework/source/uielement/langselectionmenucontroller.cxx378
-rw-r--r--framework/source/uielement/langselectionstatusbarcontroller.cxx440
-rw-r--r--framework/source/uielement/logoimagestatusbarcontroller.cxx177
-rw-r--r--framework/source/uielement/logotextstatusbarcontroller.cxx180
-rw-r--r--framework/source/uielement/macrosmenucontroller.cxx235
-rw-r--r--framework/source/uielement/makefile.mk87
-rw-r--r--framework/source/uielement/menubarmanager.cxx2151
-rw-r--r--framework/source/uielement/menubarmerger.cxx441
-rw-r--r--framework/source/uielement/menubarwrapper.cxx379
-rw-r--r--framework/source/uielement/newmenucontroller.cxx596
-rw-r--r--framework/source/uielement/objectmenucontroller.cxx166
-rw-r--r--framework/source/uielement/popupmenucontroller.cxx248
-rw-r--r--framework/source/uielement/progressbarwrapper.cxx365
-rw-r--r--framework/source/uielement/recentfilesmenucontroller.cxx480
-rw-r--r--framework/source/uielement/rootitemcontainer.cxx466
-rw-r--r--framework/source/uielement/simpletextstatusbarcontroller.cxx196
-rw-r--r--framework/source/uielement/spinfieldtoolbarcontroller.cxx577
-rw-r--r--framework/source/uielement/statusbar.cxx113
-rw-r--r--framework/source/uielement/statusbarmanager.cxx722
-rw-r--r--framework/source/uielement/statusbarwrapper.cxx205
-rw-r--r--framework/source/uielement/statusindicatorinterfacewrapper.cxx130
-rw-r--r--framework/source/uielement/togglebuttontoolbarcontroller.cxx322
-rw-r--r--framework/source/uielement/toolbar.cxx77
-rw-r--r--framework/source/uielement/toolbarmanager.cxx2358
-rw-r--r--framework/source/uielement/toolbarmerger.cxx714
-rw-r--r--framework/source/uielement/toolbarsmenucontroller.cxx919
-rw-r--r--framework/source/uielement/toolbarwrapper.cxx353
-rw-r--r--framework/source/uielement/uicommanddescription.cxx795
-rw-r--r--framework/source/uifactory/addonstoolboxfactory.cxx221
-rwxr-xr-xframework/source/uifactory/factoryconfiguration.cxx341
-rw-r--r--framework/source/uifactory/makefile.mk54
-rw-r--r--framework/source/uifactory/menubarfactory.cxx212
-rw-r--r--framework/source/uifactory/popupmenucontrollerfactory.cxx93
-rw-r--r--framework/source/uifactory/statusbarcontrollerfactory.cxx91
-rw-r--r--framework/source/uifactory/statusbarfactory.cxx109
-rw-r--r--framework/source/uifactory/toolbarcontrollerfactory.cxx262
-rw-r--r--framework/source/uifactory/toolboxfactory.cxx105
-rw-r--r--framework/source/uifactory/uielementfactorymanager.cxx547
-rw-r--r--framework/source/uifactory/windowcontentfactorymanager.cxx266
-rw-r--r--framework/source/unotypes/fwk.xml459
-rw-r--r--framework/source/unotypes/fwl.xml97
-rw-r--r--framework/source/unotypes/lgd.xml34
-rw-r--r--framework/source/xml/acceleratorconfigurationreader.cxx338
-rw-r--r--framework/source/xml/acceleratorconfigurationwriter.cxx156
-rw-r--r--framework/source/xml/eventsconfiguration.cxx165
-rw-r--r--framework/source/xml/eventsdocumenthandler.cxx552
-rw-r--r--framework/source/xml/imagesconfiguration.cxx238
-rw-r--r--framework/source/xml/imagesdocumenthandler.cxx851
-rw-r--r--framework/source/xml/makefile.mk58
-rw-r--r--framework/source/xml/menuconfiguration.cxx187
-rw-r--r--framework/source/xml/menudocumenthandler.cxx1022
-rw-r--r--framework/source/xml/saxnamespacefilter.cxx198
-rw-r--r--framework/source/xml/statusbarconfiguration.cxx166
-rw-r--r--framework/source/xml/statusbardocumenthandler.cxx698
-rw-r--r--framework/source/xml/toolboxconfiguration.cxx156
-rw-r--r--framework/source/xml/toolboxdocumenthandler.cxx901
-rw-r--r--framework/source/xml/xmlnamespaces.cxx191
-rw-r--r--framework/test/makefile.mk94
-rw-r--r--framework/test/test.cxx1346
-rw-r--r--framework/test/test_componentenumeration.bas78
-rw-r--r--framework/test/test_documentproperties.bas1083
-rw-r--r--framework/test/test_filterregistration.bas95
-rw-r--r--framework/test/test_statusindicatorfactory.bas69
-rw-r--r--framework/test/threadtest.cxx738
-rw-r--r--framework/test/threadtest/makefile.mk67
-rw-r--r--framework/test/threadtest/test.btm29
-rw-r--r--framework/test/threadtest/threadtest.cxx736
-rw-r--r--framework/test/typecfg/build.btm26
-rw-r--r--framework/test/typecfg/cfgview.cxx1512
-rw-r--r--framework/test/typecfg/makefile.mk73
-rw-r--r--framework/test/typecfg/typecfg.cxx249
-rw-r--r--framework/test/typecfg/xml2xcd.cxx2360
-rw-r--r--framework/uiconfig/startmodule/menubar/menubar.xml83
-rw-r--r--framework/uiconfig/startmodule/statusbar/statusbar.xml4
-rw-r--r--framework/uiconfig/startmodule/toolbar/standardbar.xml11
-rw-r--r--framework/util/guiapps/makefile.mk67
-rw-r--r--framework/util/hidother.src32
-rw-r--r--framework/util/lgd.xml34
-rw-r--r--framework/util/makefile.mk425
-rw-r--r--framework/util/makefile.pmk38
-rw-r--r--framework/util/target.pmk34
-rw-r--r--graphite/graphite-2.3.1.patch2396
-rw-r--r--graphite/graphite-2.3.1.patch.mingw159
-rw-r--r--graphite/makefile.mk175
-rw-r--r--graphite/prj/build.lst3
-rw-r--r--graphite/prj/d.lst15
-rw-r--r--guw/guw.cc686
-rw-r--r--guw/makefile5
-rwxr-xr-xhsqldb/makefile.mk83
-rw-r--r--hsqldb/patches/i103528.patch11
-rw-r--r--hsqldb/patches/i104901.patch27
-rw-r--r--hsqldb/patches/i96823.patch94
-rw-r--r--hsqldb/patches/i97032.patch10
-rwxr-xr-xhsqldb/prj/build.lst2
-rwxr-xr-xhsqldb/prj/d.lst1
-rwxr-xr-xhsqldb/version.mk6
-rw-r--r--hunspell/hunspell-1.2.8-thesfix.patch28
-rw-r--r--hunspell/hunspell-mingw.patch12
-rw-r--r--hunspell/hunspell-solaris.patch12
-rw-r--r--hunspell/hunspell-stacksmash.patch28
-rw-r--r--hunspell/hunspell-wntconfig.patch4
-rw-r--r--hunspell/makefile.mk98
-rw-r--r--hunspell/prj/build.lst3
-rw-r--r--hunspell/prj/d.lst5
-rw-r--r--hwpfilter/inc/makefile.mk47
-rw-r--r--hwpfilter/inc/pch/precompiled_hwpfilter.cxx29
-rw-r--r--hwpfilter/inc/pch/precompiled_hwpfilter.hxx32
-rw-r--r--hwpfilter/prj/build.lst5
-rw-r--r--hwpfilter/prj/d.lst5
-rw-r--r--hwpfilter/source/attributes.cxx168
-rw-r--r--hwpfilter/source/attributes.hxx74
-rw-r--r--hwpfilter/source/cspline.cpp173
-rw-r--r--hwpfilter/source/cspline.h36
-rw-r--r--hwpfilter/source/datecode.h57
-rw-r--r--hwpfilter/source/drawdef.h262
-rw-r--r--hwpfilter/source/drawing.h811
-rw-r--r--hwpfilter/source/fontmap.cpp174
-rw-r--r--hwpfilter/source/formula.cpp686
-rw-r--r--hwpfilter/source/formula.h102
-rw-r--r--hwpfilter/source/grammar.cpp1475
-rw-r--r--hwpfilter/source/grammar.h65
-rw-r--r--hwpfilter/source/hbox.cpp714
-rw-r--r--hwpfilter/source/hbox.h1041
-rw-r--r--hwpfilter/source/hcode.cpp1538
-rw-r--r--hwpfilter/source/hcode.h84
-rw-r--r--hwpfilter/source/hfont.cpp107
-rw-r--r--hwpfilter/source/hfont.h77
-rw-r--r--hwpfilter/source/hgzip.cpp337
-rw-r--r--hwpfilter/source/hgzip.h114
-rw-r--r--hwpfilter/source/himgutil.cpp169
-rw-r--r--hwpfilter/source/himgutil.h76
-rw-r--r--hwpfilter/source/hinfo.cpp221
-rw-r--r--hwpfilter/source/hinfo.h264
-rw-r--r--hwpfilter/source/hiodev.cpp365
-rw-r--r--hwpfilter/source/hiodev.h171
-rw-r--r--hwpfilter/source/hpara.cpp320
-rw-r--r--hwpfilter/source/hpara.h182
-rw-r--r--hwpfilter/source/hstream.cpp80
-rw-r--r--hwpfilter/source/hstream.h66
-rw-r--r--hwpfilter/source/hstyle.cpp153
-rw-r--r--hwpfilter/source/hstyle.h61
-rw-r--r--hwpfilter/source/htags.cpp168
-rw-r--r--hwpfilter/source/htags.h89
-rw-r--r--hwpfilter/source/hutil.cpp101
-rw-r--r--hwpfilter/source/hutil.h47
-rw-r--r--hwpfilter/source/hwpeq.cpp765
-rw-r--r--hwpfilter/source/hwpeq.h44
-rw-r--r--hwpfilter/source/hwpfile.cpp680
-rw-r--r--hwpfilter/source/hwpfile.h312
-rw-r--r--hwpfilter/source/hwplib.h244
-rw-r--r--hwpfilter/source/hwpread.cpp813
-rw-r--r--hwpfilter/source/hwpreader.cxx4949
-rw-r--r--hwpfilter/source/hwpreader.hxx401
-rw-r--r--hwpfilter/source/ksc5601.h760
-rw-r--r--hwpfilter/source/lexer.cpp2416
-rw-r--r--hwpfilter/source/list.hxx283
-rw-r--r--hwpfilter/source/makefile.mk97
-rw-r--r--hwpfilter/source/mapping.h398
-rw-r--r--hwpfilter/source/mzstring.cpp314
-rw-r--r--hwpfilter/source/mzstring.h187
-rw-r--r--hwpfilter/source/nodes.h107
-rw-r--r--hwpfilter/source/precompile.h44
-rw-r--r--hwpfilter/source/solver.cpp183
-rw-r--r--hwpfilter/source/solver.h50
-rw-r--r--hyphen/hyphen-2.4.patch169
-rw-r--r--hyphen/makefile.mk107
-rw-r--r--hyphen/prj/build.lst3
-rw-r--r--hyphen/prj/d.lst5
-rw-r--r--i18npool/inc/breakiteratorImpl.hxx152
-rw-r--r--i18npool/inc/breakiterator_cjk.hxx78
-rw-r--r--i18npool/inc/breakiterator_ctl.hxx64
-rw-r--r--i18npool/inc/breakiterator_th.hxx48
-rw-r--r--i18npool/inc/breakiterator_unicode.hxx102
-rw-r--r--i18npool/inc/bullet.h331
-rw-r--r--i18npool/inc/calendarImpl.hxx106
-rw-r--r--i18npool/inc/calendar_gregorian.hxx174
-rw-r--r--i18npool/inc/calendar_hijri.hxx84
-rw-r--r--i18npool/inc/calendar_jewish.hxx54
-rw-r--r--i18npool/inc/cclass_cjk.hxx95
-rw-r--r--i18npool/inc/cclass_unicode.hxx188
-rw-r--r--i18npool/inc/chaptercollator.hxx62
-rw-r--r--i18npool/inc/characterclassificationImpl.hxx118
-rw-r--r--i18npool/inc/chartonum.hxx61
-rw-r--r--i18npool/inc/collatorImpl.hxx118
-rw-r--r--i18npool/inc/collator_unicode.hxx85
-rw-r--r--i18npool/inc/defaultnumberingprovider.hxx106
-rw-r--r--i18npool/inc/i18npool/i18npooldllapi.h41
-rw-r--r--i18npool/inc/i18npool/lang.h520
-rw-r--r--i18npool/inc/i18npool/mslangid.hxx314
-rw-r--r--i18npool/inc/i18npool/paper.hxx147
-rw-r--r--i18npool/inc/indexentrysupplier.hxx110
-rw-r--r--i18npool/inc/indexentrysupplier_asian.hxx65
-rw-r--r--i18npool/inc/indexentrysupplier_common.hxx110
-rw-r--r--i18npool/inc/indexentrysupplier_default.hxx114
-rw-r--r--i18npool/inc/indexentrysupplier_ja_phonetic.hxx75
-rw-r--r--i18npool/inc/inputsequencechecker.hxx90
-rw-r--r--i18npool/inc/inputsequencechecker_hi.hxx55
-rw-r--r--i18npool/inc/inputsequencechecker_th.hxx52
-rw-r--r--i18npool/inc/localedata.hxx139
-rw-r--r--i18npool/inc/makefile.mk48
-rw-r--r--i18npool/inc/nativenumbersupplier.hxx91
-rw-r--r--i18npool/inc/numberformatcode.hxx81
-rw-r--r--i18npool/inc/numtochar.hxx62
-rw-r--r--i18npool/inc/numtotext_cjk.hxx77
-rw-r--r--i18npool/inc/ordinalsuffix.hxx57
-rw-r--r--i18npool/inc/pch/precompiled_i18npool.cxx29
-rw-r--r--i18npool/inc/pch/precompiled_i18npool.hxx32
-rw-r--r--i18npool/inc/scripttypedetector.hxx66
-rw-r--r--i18npool/inc/servicename.hxx86
-rw-r--r--i18npool/inc/textToPronounce_zh.hxx81
-rw-r--r--i18npool/inc/textconversion.hxx211
-rw-r--r--i18npool/inc/textconversionImpl.hxx103
-rw-r--r--i18npool/inc/texttonum.hxx59
-rw-r--r--i18npool/inc/transliterationImpl.hxx155
-rw-r--r--i18npool/inc/transliteration_Ignore.hxx188
-rw-r--r--i18npool/inc/transliteration_Numeric.hxx73
-rw-r--r--i18npool/inc/transliteration_OneToOne.hxx127
-rw-r--r--i18npool/inc/transliteration_body.hxx120
-rw-r--r--i18npool/inc/transliteration_caseignore.hxx76
-rw-r--r--i18npool/inc/transliteration_commonclass.hxx122
-rw-r--r--i18npool/inc/warnings_guard_unicode_brkiter.h48
-rw-r--r--i18npool/inc/warnings_guard_unicode_calendar.h48
-rw-r--r--i18npool/inc/warnings_guard_unicode_tblcoll.h48
-rw-r--r--i18npool/inc/wtt.h74
-rw-r--r--i18npool/inc/xdictionary.hxx96
-rw-r--r--i18npool/prj/build.lst26
-rw-r--r--i18npool/prj/d.lst48
-rw-r--r--i18npool/source/breakiterator/breakiteratorImpl.cxx601
-rw-r--r--i18npool/source/breakiterator/breakiterator_cjk.cxx186
-rw-r--r--i18npool/source/breakiterator/breakiterator_ctl.cxx145
-rw-r--r--i18npool/source/breakiterator/breakiterator_th.cxx157
-rw-r--r--i18npool/source/breakiterator/breakiterator_unicode.cxx445
-rw-r--r--i18npool/source/breakiterator/data/char_in.txt108
-rw-r--r--i18npool/source/breakiterator/data/count_word.txt125
-rw-r--r--i18npool/source/breakiterator/data/count_word_fi.txt134
-rw-r--r--i18npool/source/breakiterator/data/dict.map12
-rw-r--r--i18npool/source/breakiterator/data/dict_word.txt148
-rw-r--r--i18npool/source/breakiterator/data/dict_word_ca.txt139
-rw-r--r--i18npool/source/breakiterator/data/dict_word_fi.txt147
-rw-r--r--i18npool/source/breakiterator/data/dict_word_he.txt139
-rw-r--r--i18npool/source/breakiterator/data/dict_word_hu.txt162
-rw-r--r--i18npool/source/breakiterator/data/dict_word_nodash.txt147
-rw-r--r--i18npool/source/breakiterator/data/dict_word_prepostdash.txt157
-rw-r--r--i18npool/source/breakiterator/data/edit_word.txt142
-rw-r--r--i18npool/source/breakiterator/data/edit_word_he.txt142
-rw-r--r--i18npool/source/breakiterator/data/edit_word_hu.txt159
-rw-r--r--i18npool/source/breakiterator/data/ja.dic119817
-rw-r--r--i18npool/source/breakiterator/data/line.txt634
-rw-r--r--i18npool/source/breakiterator/data/makefile.mk84
-rw-r--r--i18npool/source/breakiterator/data/sent.txt128
-rw-r--r--i18npool/source/breakiterator/data/zh.dic251404
-rw-r--r--i18npool/source/breakiterator/gendict.cxx205
-rw-r--r--i18npool/source/breakiterator/makefile.mk100
-rw-r--r--i18npool/source/breakiterator/xdictionary.cxx402
-rw-r--r--i18npool/source/calendar/calendarImpl.cxx324
-rw-r--r--i18npool/source/calendar/calendar_gregorian.cxx1098
-rw-r--r--i18npool/source/calendar/calendar_hijri.cxx341
-rw-r--r--i18npool/source/calendar/calendar_jewish.cxx306
-rw-r--r--i18npool/source/calendar/makefile.mk53
-rw-r--r--i18npool/source/characterclassification/cclass_unicode.cxx288
-rw-r--r--i18npool/source/characterclassification/cclass_unicode_parser.cxx1067
-rw-r--r--i18npool/source/characterclassification/characterclassificationImpl.cxx236
-rw-r--r--i18npool/source/characterclassification/makefile.mk52
-rw-r--r--i18npool/source/characterclassification/scripttypedetector.cxx182
-rw-r--r--i18npool/source/collator/chaptercollator.cxx111
-rw-r--r--i18npool/source/collator/collatorImpl.cxx260
-rw-r--r--i18npool/source/collator/collator_unicode.cxx176
-rw-r--r--i18npool/source/collator/data/collator_data.map25
-rw-r--r--i18npool/source/collator/data/dz_charset.txt74
-rw-r--r--i18npool/source/collator/data/hu_charset.txt14
-rw-r--r--i18npool/source/collator/data/ja_charset.txt1446
-rw-r--r--i18npool/source/collator/data/ja_phonetic_alphanumeric_first.txt1466
-rw-r--r--i18npool/source/collator/data/ja_phonetic_alphanumeric_last.txt1466
-rw-r--r--i18npool/source/collator/data/ko_charset.txt733
-rw-r--r--i18npool/source/collator/data/ku_alphanumeric.txt9
-rw-r--r--i18npool/source/collator/data/ln_charset.txt6
-rw-r--r--i18npool/source/collator/data/makefile.mk64
-rw-r--r--i18npool/source/collator/data/my_dictionary.txt373
-rw-r--r--i18npool/source/collator/data/ne_charset.txt5
-rw-r--r--i18npool/source/collator/data/zh_TW_charset.txt1337
-rw-r--r--i18npool/source/collator/data/zh_TW_radical.txt2787
-rw-r--r--i18npool/source/collator/data/zh_TW_stroke.txt2787
-rw-r--r--i18npool/source/collator/data/zh_charset.txt2099
-rw-r--r--i18npool/source/collator/data/zh_pinyin.txt2099
-rw-r--r--i18npool/source/collator/data/zh_radical.txt2787
-rw-r--r--i18npool/source/collator/data/zh_stroke.txt2101
-rw-r--r--i18npool/source/collator/data/zh_zhuyin.txt1702
-rw-r--r--i18npool/source/collator/gencoll_rule.cxx140
-rw-r--r--i18npool/source/collator/makefile.mk73
-rw-r--r--i18npool/source/defaultnumberingprovider/defaultnumberingprovider.cxx899
-rw-r--r--i18npool/source/defaultnumberingprovider/makefile.mk49
-rw-r--r--i18npool/source/indexentry/data/index_data.map17
-rw-r--r--i18npool/source/indexentry/data/indexdata_alphanumeric.h47
-rw-r--r--i18npool/source/indexentry/data/indexdata_ja_phonetic.h120
-rw-r--r--i18npool/source/indexentry/data/indexdata_ko_dict.txt16167
-rw-r--r--i18npool/source/indexentry/data/indexdata_zh_TW_radical.txt27786
-rw-r--r--i18npool/source/indexentry/data/indexdata_zh_TW_stroke.txt27786
-rw-r--r--i18npool/source/indexentry/data/indexdata_zh_pinyin.txt20903
-rw-r--r--i18npool/source/indexentry/data/indexdata_zh_radical.txt27786
-rw-r--r--i18npool/source/indexentry/data/indexdata_zh_stroke.txt20923
-rw-r--r--i18npool/source/indexentry/data/indexdata_zh_zhuyin.txt16971
-rw-r--r--i18npool/source/indexentry/data/ko_phonetic.txt16153
-rw-r--r--i18npool/source/indexentry/data/makefile.mk67
-rw-r--r--i18npool/source/indexentry/data/zh_pinyin.txt20378
-rw-r--r--i18npool/source/indexentry/data/zh_zhuyin.txt16936
-rw-r--r--i18npool/source/indexentry/genindex_data.cxx166
-rw-r--r--i18npool/source/indexentry/indexentrysupplier.cxx209
-rw-r--r--i18npool/source/indexentry/indexentrysupplier_asian.cxx154
-rw-r--r--i18npool/source/indexentry/indexentrysupplier_common.cxx150
-rw-r--r--i18npool/source/indexentry/indexentrysupplier_default.cxx290
-rw-r--r--i18npool/source/indexentry/indexentrysupplier_ja_phonetic.cxx106
-rw-r--r--i18npool/source/indexentry/makefile.mk66
-rw-r--r--i18npool/source/inputchecker/inputsequencechecker.cxx166
-rw-r--r--i18npool/source/inputchecker/inputsequencechecker_hi.cxx148
-rw-r--r--i18npool/source/inputchecker/inputsequencechecker_th.cxx154
-rw-r--r--i18npool/source/inputchecker/makefile.mk51
-rw-r--r--i18npool/source/isolang/insys.cxx43
-rw-r--r--i18npool/source/isolang/inunx.cxx150
-rw-r--r--i18npool/source/isolang/inwnt.cxx107
-rw-r--r--i18npool/source/isolang/isolang.cxx1105
-rwxr-xr-xi18npool/source/isolang/langid.pl424
-rw-r--r--i18npool/source/isolang/lcid.awk171
-rw-r--r--i18npool/source/isolang/makefile.mk69
-rw-r--r--i18npool/source/isolang/mslangid.cxx467
-rw-r--r--i18npool/source/localedata/LocaleNode.cxx1800
-rw-r--r--i18npool/source/localedata/LocaleNode.hxx259
-rw-r--r--i18npool/source/localedata/data/af_NA.xml25
-rw-r--r--i18npool/source/localedata/data/af_ZA.xml186
-rw-r--r--i18npool/source/localedata/data/ak_GH.xml374
-rw-r--r--i18npool/source/localedata/data/am_ET.xml193
-rw-r--r--i18npool/source/localedata/data/ar_DZ.xml437
-rw-r--r--i18npool/source/localedata/data/ar_EG.xml523
-rw-r--r--i18npool/source/localedata/data/ar_LB.xml290
-rw-r--r--i18npool/source/localedata/data/ar_OM.xml357
-rw-r--r--i18npool/source/localedata/data/ar_SA.xml290
-rw-r--r--i18npool/source/localedata/data/ar_TN.xml290
-rw-r--r--i18npool/source/localedata/data/ast_ES.xml359
-rw-r--r--i18npool/source/localedata/data/az_AZ.xml339
-rw-r--r--i18npool/source/localedata/data/be_BY.xml334
-rw-r--r--i18npool/source/localedata/data/bg_BG.xml409
-rw-r--r--i18npool/source/localedata/data/bn_BD.xml178
-rw-r--r--i18npool/source/localedata/data/bn_IN.xml352
-rw-r--r--i18npool/source/localedata/data/br_FR.xml347
-rw-r--r--i18npool/source/localedata/data/bs_BA.xml460
-rw-r--r--i18npool/source/localedata/data/ca_ES.xml343
-rw-r--r--i18npool/source/localedata/data/cs_CZ.xml380
-rw-r--r--i18npool/source/localedata/data/currency-check.awk318
-rw-r--r--i18npool/source/localedata/data/cv_RU.xml341
-rw-r--r--i18npool/source/localedata/data/cy_GB.xml143
-rw-r--r--i18npool/source/localedata/data/da_DK.xml336
-rw-r--r--i18npool/source/localedata/data/de_AT.xml321
-rw-r--r--i18npool/source/localedata/data/de_CH.xml199
-rw-r--r--i18npool/source/localedata/data/de_DE.xml355
-rw-r--r--i18npool/source/localedata/data/de_LI.xml196
-rw-r--r--i18npool/source/localedata/data/de_LU.xml321
-rw-r--r--i18npool/source/localedata/data/dz_BT.xml509
-rw-r--r--i18npool/source/localedata/data/ee_GH.xml368
-rw-r--r--i18npool/source/localedata/data/el_GR.xml341
-rw-r--r--i18npool/source/localedata/data/en_AU.xml314
-rw-r--r--i18npool/source/localedata/data/en_BZ.xml65
-rw-r--r--i18npool/source/localedata/data/en_CA.xml206
-rw-r--r--i18npool/source/localedata/data/en_GB.xml240
-rw-r--r--i18npool/source/localedata/data/en_GH.xml361
-rw-r--r--i18npool/source/localedata/data/en_IE.xml79
-rw-r--r--i18npool/source/localedata/data/en_IN.xml43
-rw-r--r--i18npool/source/localedata/data/en_JM.xml314
-rw-r--r--i18npool/source/localedata/data/en_NA.xml322
-rw-r--r--i18npool/source/localedata/data/en_NZ.xml173
-rw-r--r--i18npool/source/localedata/data/en_PH.xml33
-rw-r--r--i18npool/source/localedata/data/en_TT.xml173
-rw-r--r--i18npool/source/localedata/data/en_US.xml569
-rw-r--r--i18npool/source/localedata/data/en_ZA.xml314
-rw-r--r--i18npool/source/localedata/data/en_ZW.xml173
-rw-r--r--i18npool/source/localedata/data/eo.xml349
-rw-r--r--i18npool/source/localedata/data/es_AR.xml209
-rw-r--r--i18npool/source/localedata/data/es_BO.xml220
-rw-r--r--i18npool/source/localedata/data/es_CL.xml206
-rw-r--r--i18npool/source/localedata/data/es_CO.xml199
-rw-r--r--i18npool/source/localedata/data/es_CR.xml218
-rw-r--r--i18npool/source/localedata/data/es_DO.xml243
-rw-r--r--i18npool/source/localedata/data/es_EC.xml206
-rw-r--r--i18npool/source/localedata/data/es_ES.xml349
-rw-r--r--i18npool/source/localedata/data/es_GT.xml243
-rw-r--r--i18npool/source/localedata/data/es_HN.xml36
-rw-r--r--i18npool/source/localedata/data/es_MX.xml36
-rw-r--r--i18npool/source/localedata/data/es_NI.xml58
-rw-r--r--i18npool/source/localedata/data/es_PA.xml43
-rw-r--r--i18npool/source/localedata/data/es_PE.xml243
-rw-r--r--i18npool/source/localedata/data/es_PR.xml36
-rw-r--r--i18npool/source/localedata/data/es_PY.xml36
-rw-r--r--i18npool/source/localedata/data/es_SV.xml36
-rw-r--r--i18npool/source/localedata/data/es_UY.xml58
-rw-r--r--i18npool/source/localedata/data/es_VE.xml43
-rw-r--r--i18npool/source/localedata/data/et_EE.xml341
-rw-r--r--i18npool/source/localedata/data/eu.xml356
-rw-r--r--i18npool/source/localedata/data/fa_IR.xml640
-rw-r--r--i18npool/source/localedata/data/fi_FI.xml342
-rw-r--r--i18npool/source/localedata/data/fo_FO.xml379
-rw-r--r--i18npool/source/localedata/data/fr_BE.xml206
-rw-r--r--i18npool/source/localedata/data/fr_CA.xml209
-rw-r--r--i18npool/source/localedata/data/fr_CH.xml206
-rw-r--r--i18npool/source/localedata/data/fr_FR.xml347
-rw-r--r--i18npool/source/localedata/data/fr_LU.xml203
-rw-r--r--i18npool/source/localedata/data/fr_MC.xml26
-rw-r--r--i18npool/source/localedata/data/fur_IT.xml361
-rw-r--r--i18npool/source/localedata/data/fy_NL.xml360
-rw-r--r--i18npool/source/localedata/data/ga_IE.xml186
-rw-r--r--i18npool/source/localedata/data/gl_ES.xml343
-rw-r--r--i18npool/source/localedata/data/gsc_FR.xml361
-rw-r--r--i18npool/source/localedata/data/gu_IN.xml173
-rw-r--r--i18npool/source/localedata/data/gug_PY.xml361
-rw-r--r--i18npool/source/localedata/data/ha_GH.xml371
-rw-r--r--i18npool/source/localedata/data/he_IL.xml472
-rw-r--r--i18npool/source/localedata/data/hi_IN.xml394
-rw-r--r--i18npool/source/localedata/data/hil_PH.xml362
-rw-r--r--i18npool/source/localedata/data/hr_HR.xml452
-rw-r--r--i18npool/source/localedata/data/hsb_DE.xml350
-rw-r--r--i18npool/source/localedata/data/hu_HU.xml342
-rw-r--r--i18npool/source/localedata/data/hy_AM.xml348
-rw-r--r--i18npool/source/localedata/data/ia.xml384
-rw-r--r--i18npool/source/localedata/data/id_ID.xml329
-rw-r--r--i18npool/source/localedata/data/is_IS.xml408
-rw-r--r--i18npool/source/localedata/data/it_CH.xml196
-rw-r--r--i18npool/source/localedata/data/it_IT.xml349
-rw-r--r--i18npool/source/localedata/data/ja_JP.xml591
-rw-r--r--i18npool/source/localedata/data/ka_GE.xml348
-rw-r--r--i18npool/source/localedata/data/kk_KZ.xml360
-rw-r--r--i18npool/source/localedata/data/kl_GL.xml335
-rw-r--r--i18npool/source/localedata/data/km_KH.xml440
-rw-r--r--i18npool/source/localedata/data/kn_IN.xml173
-rw-r--r--i18npool/source/localedata/data/ko_KR.xml671
-rw-r--r--i18npool/source/localedata/data/ku_TR.xml424
-rw-r--r--i18npool/source/localedata/data/ky_KG.xml334
-rw-r--r--i18npool/source/localedata/data/la_VA.xml349
-rw-r--r--i18npool/source/localedata/data/lb_LU.xml348
-rw-r--r--i18npool/source/localedata/data/lg_UG.xml361
-rw-r--r--i18npool/source/localedata/data/linkermapfile-check.awk105
-rw-r--r--i18npool/source/localedata/data/list-locales.awk75
-rw-r--r--i18npool/source/localedata/data/ln_CD.xml365
-rw-r--r--i18npool/source/localedata/data/lo_LA.xml520
-rw-r--r--i18npool/source/localedata/data/locale.dtd550
-rw-r--r--i18npool/source/localedata/data/localedata_en.map246
-rw-r--r--i18npool/source/localedata/data/localedata_es.map348
-rw-r--r--i18npool/source/localedata/data/localedata_euro.map1197
-rw-r--r--i18npool/source/localedata/data/localedata_others.map1333
-rw-r--r--i18npool/source/localedata/data/lt_LT.xml440
-rw-r--r--i18npool/source/localedata/data/ltg_LV.xml350
-rw-r--r--i18npool/source/localedata/data/lv_LV.xml417
-rw-r--r--i18npool/source/localedata/data/mai_IN.xml357
-rw-r--r--i18npool/source/localedata/data/makefile.mk516
-rw-r--r--i18npool/source/localedata/data/mk_MK.xml416
-rw-r--r--i18npool/source/localedata/data/ml_IN.xml350
-rw-r--r--i18npool/source/localedata/data/mn_MN.xml378
-rwxr-xr-xi18npool/source/localedata/data/mr_IN.xml25
-rw-r--r--i18npool/source/localedata/data/ms_MY.xml188
-rw-r--r--i18npool/source/localedata/data/mt_MT.xml362
-rw-r--r--i18npool/source/localedata/data/my_MM.xml489
-rw-r--r--i18npool/source/localedata/data/nb_NO.xml25
-rw-r--r--i18npool/source/localedata/data/ne_NP.xml416
-rw-r--r--i18npool/source/localedata/data/nl_BE.xml210
-rw-r--r--i18npool/source/localedata/data/nl_NL.xml387
-rw-r--r--i18npool/source/localedata/data/nn_NO.xml71
-rw-r--r--i18npool/source/localedata/data/no_NO.xml388
-rw-r--r--i18npool/source/localedata/data/nr_ZA.xml158
-rw-r--r--i18npool/source/localedata/data/nso_ZA.xml149
-rw-r--r--i18npool/source/localedata/data/oc_FR.xml360
-rw-r--r--i18npool/source/localedata/data/om_ET.xml358
-rw-r--r--i18npool/source/localedata/data/or_IN.xml366
-rw-r--r--i18npool/source/localedata/data/pa_IN.xml195
-rw-r--r--i18npool/source/localedata/data/pl_PL.xml346
-rw-r--r--i18npool/source/localedata/data/plt_MG.xml358
-rw-r--r--i18npool/source/localedata/data/pt_BR.xml240
-rw-r--r--i18npool/source/localedata/data/pt_PT.xml380
-rw-r--r--i18npool/source/localedata/data/ro_RO.xml391
-rw-r--r--i18npool/source/localedata/data/ru_RU.xml341
-rw-r--r--i18npool/source/localedata/data/rue_SK.xml359
-rw-r--r--i18npool/source/localedata/data/rw_RW.xml384
-rw-r--r--i18npool/source/localedata/data/sc_IT.xml358
-rw-r--r--i18npool/source/localedata/data/sg_CF.xml361
-rw-r--r--i18npool/source/localedata/data/sh_ME.xml41
-rw-r--r--i18npool/source/localedata/data/sh_RS.xml239
-rw-r--r--i18npool/source/localedata/data/sh_YU.xml41
-rw-r--r--i18npool/source/localedata/data/shs_CA.xml417
-rw-r--r--i18npool/source/localedata/data/sk_SK.xml463
-rw-r--r--i18npool/source/localedata/data/sl_SI.xml425
-rw-r--r--i18npool/source/localedata/data/so_SO.xml368
-rw-r--r--i18npool/source/localedata/data/sr_ME.xml41
-rw-r--r--i18npool/source/localedata/data/sr_RS.xml444
-rw-r--r--i18npool/source/localedata/data/sr_YU.xml41
-rw-r--r--i18npool/source/localedata/data/ss_ZA.xml143
-rw-r--r--i18npool/source/localedata/data/st_ZA.xml143
-rw-r--r--i18npool/source/localedata/data/sv_FI.xml321
-rw-r--r--i18npool/source/localedata/data/sv_SE.xml342
-rw-r--r--i18npool/source/localedata/data/sw_TZ.xml350
-rw-r--r--i18npool/source/localedata/data/ta_IN.xml173
-rw-r--r--i18npool/source/localedata/data/te_IN.xml172
-rw-r--r--i18npool/source/localedata/data/tg_TJ.xml341
-rw-r--r--i18npool/source/localedata/data/th_TH.xml674
-rw-r--r--i18npool/source/localedata/data/ti_ER.xml334
-rw-r--r--i18npool/source/localedata/data/tk_TM.xml361
-rw-r--r--i18npool/source/localedata/data/tn_ZA.xml143
-rw-r--r--i18npool/source/localedata/data/tpi_PG.xml361
-rw-r--r--i18npool/source/localedata/data/tr_TR.xml343
-rw-r--r--i18npool/source/localedata/data/ts_ZA.xml164
-rw-r--r--i18npool/source/localedata/data/ug_CN.xml364
-rw-r--r--i18npool/source/localedata/data/uk_UA.xml463
-rw-r--r--i18npool/source/localedata/data/uz_UZ.xml334
-rw-r--r--i18npool/source/localedata/data/ve_ZA.xml164
-rw-r--r--i18npool/source/localedata/data/vi_VN.xml417
-rw-r--r--i18npool/source/localedata/data/wa_BE.xml342
-rw-r--r--i18npool/source/localedata/data/xh_ZA.xml158
-rw-r--r--i18npool/source/localedata/data/zh_CN.xml521
-rw-r--r--i18npool/source/localedata/data/zh_HK.xml276
-rw-r--r--i18npool/source/localedata/data/zh_MO.xml265
-rw-r--r--i18npool/source/localedata/data/zh_SG.xml262
-rw-r--r--i18npool/source/localedata/data/zh_TW.xml450
-rw-r--r--i18npool/source/localedata/data/zu_ZA.xml143
-rw-r--r--i18npool/source/localedata/filewriter.cxx213
-rw-r--r--i18npool/source/localedata/localedata.cxx1473
-rw-r--r--i18npool/source/localedata/makefile.mk84
-rw-r--r--i18npool/source/localedata/saxparser.cxx428
-rw-r--r--i18npool/source/nativenumber/data/numberchar.h277
-rw-r--r--i18npool/source/nativenumber/makefile.mk49
-rw-r--r--i18npool/source/nativenumber/nativenumbersupplier.cxx917
-rw-r--r--i18npool/source/numberformatcode/makefile.mk49
-rw-r--r--i18npool/source/numberformatcode/numberformatcode.cxx304
-rw-r--r--i18npool/source/ordinalsuffix/makefile.mk50
-rw-r--r--i18npool/source/ordinalsuffix/ordinalsuffix.cxx117
-rw-r--r--i18npool/source/paper/makefile.mk71
-rw-r--r--i18npool/source/paper/paper.cxx510
-rw-r--r--i18npool/source/registerservices/makefile.mk46
-rw-r--r--i18npool/source/registerservices/registerservices.cxx639
-rw-r--r--i18npool/source/search/levdis.cxx779
-rw-r--r--i18npool/source/search/levdis.hxx229
-rw-r--r--i18npool/source/search/makefile.mk78
-rw-r--r--i18npool/source/search/textsearch.cxx1038
-rw-r--r--i18npool/source/search/textsearch.hxx154
-rw-r--r--i18npool/source/textconversion/data/hhc_char.dic502
-rw-r--r--i18npool/source/textconversion/data/makefile.mk68
-rw-r--r--i18npool/source/textconversion/data/stc_char.dic2835
-rw-r--r--i18npool/source/textconversion/data/stc_word.dic1150
-rw-r--r--i18npool/source/textconversion/data/textconv_dict.map23
-rw-r--r--i18npool/source/textconversion/genconv_dict.cxx483
-rw-r--r--i18npool/source/textconversion/makefile.mk59
-rw-r--r--i18npool/source/textconversion/textconversion.cxx91
-rw-r--r--i18npool/source/textconversion/textconversionImpl.cxx145
-rw-r--r--i18npool/source/textconversion/textconversion_ko.cxx343
-rw-r--r--i18npool/source/textconversion/textconversion_zh.cxx296
-rw-r--r--i18npool/source/transliteration/chartonum.cxx64
-rw-r--r--i18npool/source/transliteration/data/numberchar.h163
-rw-r--r--i18npool/source/transliteration/fullwidthToHalfwidth.cxx155
-rw-r--r--i18npool/source/transliteration/halfwidthToFullwidth.cxx135
-rw-r--r--i18npool/source/transliteration/hiraganaToKatakana.cxx61
-rw-r--r--i18npool/source/transliteration/ignoreBaFa_ja_JP.cxx59
-rw-r--r--i18npool/source/transliteration/ignoreHyuByu_ja_JP.cxx60
-rw-r--r--i18npool/source/transliteration/ignoreIandEfollowedByYa_ja_JP.cxx149
-rw-r--r--i18npool/source/transliteration/ignoreIterationMark_ja_JP.cxx157
-rw-r--r--i18npool/source/transliteration/ignoreKana.cxx71
-rw-r--r--i18npool/source/transliteration/ignoreKiKuFollowedBySa_ja_JP.cxx106
-rw-r--r--i18npool/source/transliteration/ignoreMiddleDot_ja_JP.cxx60
-rw-r--r--i18npool/source/transliteration/ignoreMinusSign_ja_JP.cxx67
-rw-r--r--i18npool/source/transliteration/ignoreProlongedSoundMark_ja_JP.cxx365
-rw-r--r--i18npool/source/transliteration/ignoreSeZe_ja_JP.cxx65
-rw-r--r--i18npool/source/transliteration/ignoreSeparator_ja_JP.cxx126
-rw-r--r--i18npool/source/transliteration/ignoreSize_ja_JP.cxx72
-rw-r--r--i18npool/source/transliteration/ignoreSpace_ja_JP.cxx67
-rw-r--r--i18npool/source/transliteration/ignoreTiJi_ja_JP.cxx70
-rw-r--r--i18npool/source/transliteration/ignoreTraditionalKana_ja_JP.cxx68
-rw-r--r--i18npool/source/transliteration/ignoreTraditionalKanji_ja_JP.cxx747
-rw-r--r--i18npool/source/transliteration/ignoreWidth.cxx72
-rw-r--r--i18npool/source/transliteration/ignoreZiZu_ja_JP.cxx68
-rw-r--r--i18npool/source/transliteration/katakanaToHiragana.cxx58
-rw-r--r--i18npool/source/transliteration/largeToSmall_ja_JP.cxx93
-rw-r--r--i18npool/source/transliteration/makefile.mk84
-rw-r--r--i18npool/source/transliteration/numtochar.cxx69
-rw-r--r--i18npool/source/transliteration/numtotext_cjk.cxx92
-rw-r--r--i18npool/source/transliteration/smallToLarge_ja_JP.cxx93
-rw-r--r--i18npool/source/transliteration/textToPronounce_zh.cxx168
-rw-r--r--i18npool/source/transliteration/texttonum.cxx64
-rw-r--r--i18npool/source/transliteration/transliterationImpl.cxx684
-rw-r--r--i18npool/source/transliteration/transliteration_Ignore.cxx220
-rw-r--r--i18npool/source/transliteration/transliteration_Numeric.cxx149
-rw-r--r--i18npool/source/transliteration/transliteration_OneToOne.cxx108
-rwxr-xr-xi18npool/source/transliteration/transliteration_body.cxx473
-rw-r--r--i18npool/source/transliteration/transliteration_caseignore.cxx172
-rw-r--r--i18npool/source/transliteration/transliteration_commonclass.cxx164
-rw-r--r--i18npool/util/makefile.mk81
-rw-r--r--i18npool/util/makefile.pmk31
-rw-r--r--i18npool/version.mk40
-rw-r--r--i18npool/xml/BreakIterator.xml82
-rw-r--r--i18npool/xml/Calendar.xml54
-rw-r--r--i18npool/xml/ChapterCollator.xml35
-rw-r--r--i18npool/xml/CharacterClassification.xml52
-rw-r--r--i18npool/xml/Collator.xml35
-rw-r--r--i18npool/xml/DefaultNumberingProvider.xml52
-rw-r--r--i18npool/xml/IndexEntrySupplier.xml53
-rw-r--r--i18npool/xml/LocaleData.xml60
-rw-r--r--i18npool/xml/NumberFormatCodeMapper.xml64
-rw-r--r--i18npool/xml/OrdinalSuffix.xml34
-rw-r--r--i18npool/xml/TextSearch.xml52
-rw-r--r--i18npool/xml/Transliteration.xml73
-rw-r--r--i18nutil/inc/i18nutil/casefolding.hxx84
-rw-r--r--i18nutil/inc/i18nutil/oneToOneMapping.hxx100
-rw-r--r--i18nutil/inc/i18nutil/unicode.hxx67
-rw-r--r--i18nutil/inc/i18nutil/widthfolding.hxx59
-rw-r--r--i18nutil/inc/i18nutil/x_rtl_ustring.h78
-rw-r--r--i18nutil/prj/build.lst3
-rw-r--r--i18nutil/prj/d.lst13
-rw-r--r--i18nutil/source/utility/casefolding.cxx167
-rw-r--r--i18nutil/source/utility/casefolding_data.h865
-rw-r--r--i18nutil/source/utility/makefile.mk78
-rw-r--r--i18nutil/source/utility/oneToOneMapping.cxx161
-rw-r--r--i18nutil/source/utility/unicode.cxx494
-rw-r--r--i18nutil/source/utility/unicode_data.h1650
-rw-r--r--i18nutil/source/utility/widthfolding.cxx301
-rw-r--r--i18nutil/source/utility/widthfolding_data.h959
-rw-r--r--icc/README39
-rw-r--r--icc/SampleICC-1.3.2.patch5146
-rw-r--r--icc/makefile.mk58
-rw-r--r--icc/makefiles.zipbin0 -> 4073 bytes
-rw-r--r--icc/prj/build.lst3
-rw-r--r--icc/prj/d.lst5
-rw-r--r--icc/source/create_sRGB_profile/Makefile.am13
-rw-r--r--icc/source/create_sRGB_profile/Makefile.in378
-rw-r--r--icc/source/create_sRGB_profile/create_sRGB_profile.cpp551
-rw-r--r--icu/Readme4
-rw-r--r--icu/createmak.cfg452
-rw-r--r--icu/createmak.pl1109
-rw-r--r--icu/icu4c-4_0_1-src.patch247
-rwxr-xr-xicu/icuversion.mk33
-rw-r--r--icu/makefile.mk267
-rw-r--r--icu/prj/build.lst4
-rw-r--r--icu/prj/d.lst36
-rw-r--r--idl/inc/attrib.hxx77
-rw-r--r--idl/inc/basobj.hxx294
-rw-r--r--idl/inc/bastype.hxx290
-rw-r--r--idl/inc/char.hxx41
-rw-r--r--idl/inc/command.hxx78
-rw-r--r--idl/inc/database.hxx182
-rw-r--r--idl/inc/globals.hxx242
-rw-r--r--idl/inc/hash.hxx125
-rw-r--r--idl/inc/lex.hxx271
-rw-r--r--idl/inc/makefile.mk47
-rw-r--r--idl/inc/module.hxx117
-rw-r--r--idl/inc/object.hxx170
-rw-r--r--idl/inc/pch/precompiled_idl.cxx29
-rw-r--r--idl/inc/pch/precompiled_idl.hxx32
-rw-r--r--idl/inc/slot.hxx279
-rw-r--r--idl/inc/types.hxx345
-rw-r--r--idl/prj/build.lst8
-rw-r--r--idl/prj/d.lst2
-rw-r--r--idl/source/cmptools/char.cxx107
-rw-r--r--idl/source/cmptools/hash.cxx331
-rw-r--r--idl/source/cmptools/lex.cxx511
-rw-r--r--idl/source/cmptools/makefile.mk47
-rw-r--r--idl/source/objects/basobj.cxx786
-rw-r--r--idl/source/objects/bastype.cxx611
-rw-r--r--idl/source/objects/makefile.mk50
-rw-r--r--idl/source/objects/module.cxx688
-rw-r--r--idl/source/objects/object.cxx1047
-rw-r--r--idl/source/objects/slot.cxx1820
-rw-r--r--idl/source/objects/types.cxx2699
-rw-r--r--idl/source/prj/command.cxx433
-rw-r--r--idl/source/prj/database.cxx1044
-rw-r--r--idl/source/prj/globals.cxx199
-rw-r--r--idl/source/prj/idldll.cxx79
-rw-r--r--idl/source/prj/makefile.mk50
-rw-r--r--idl/source/prj/svidl.cxx447
-rw-r--r--idl/source/svidl.datbin0 -> 204 bytes
-rw-r--r--idl/util/idlpch.cxx49
-rw-r--r--idl/util/makefile.mk68
-rw-r--r--idlc/inc/idlc/astarray.hxx62
-rw-r--r--idlc/inc/idlc/astattribute.hxx121
-rw-r--r--idlc/inc/idlc/astbasetype.hxx62
-rw-r--r--idlc/inc/idlc/astconstant.hxx57
-rw-r--r--idlc/inc/idlc/astconstants.hxx42
-rw-r--r--idlc/inc/idlc/astdeclaration.hxx148
-rw-r--r--idlc/inc/idlc/astenum.hxx57
-rw-r--r--idlc/inc/idlc/astexception.hxx43
-rw-r--r--idlc/inc/idlc/astexpression.hxx186
-rw-r--r--idlc/inc/idlc/astinterface.hxx143
-rw-r--r--idlc/inc/idlc/astinterfacemember.hxx53
-rw-r--r--idlc/inc/idlc/astmember.hxx57
-rw-r--r--idlc/inc/idlc/astmodule.hxx51
-rw-r--r--idlc/inc/idlc/astneeds.hxx48
-rw-r--r--idlc/inc/idlc/astobserves.hxx48
-rw-r--r--idlc/inc/idlc/astoperation.hxx76
-rw-r--r--idlc/inc/idlc/astparameter.hxx54
-rw-r--r--idlc/inc/idlc/astscope.hxx78
-rw-r--r--idlc/inc/idlc/astsequence.hxx59
-rw-r--r--idlc/inc/idlc/astservice.hxx60
-rw-r--r--idlc/inc/idlc/astservicemember.hxx53
-rw-r--r--idlc/inc/idlc/aststack.hxx56
-rw-r--r--idlc/inc/idlc/aststruct.hxx69
-rw-r--r--idlc/inc/idlc/aststructinstance.hxx56
-rw-r--r--idlc/inc/idlc/asttype.hxx45
-rw-r--r--idlc/inc/idlc/asttypedef.hxx53
-rw-r--r--idlc/inc/idlc/astunion.hxx68
-rw-r--r--idlc/inc/idlc/astunionbranch.hxx46
-rw-r--r--idlc/inc/idlc/astunionlabel.hxx52
-rw-r--r--idlc/inc/idlc/errorhandler.hxx157
-rw-r--r--idlc/inc/idlc/fehelper.hxx98
-rw-r--r--idlc/inc/idlc/idlc.hxx168
-rw-r--r--idlc/inc/idlc/idlctypes.hxx266
-rw-r--r--idlc/inc/idlc/inheritedinterface.hxx61
-rw-r--r--idlc/inc/idlc/options.hxx82
-rw-r--r--idlc/inc/makefile.mk47
-rw-r--r--idlc/inc/pch/precompiled_idlc.cxx29
-rw-r--r--idlc/inc/pch/precompiled_idlc.hxx32
-rw-r--r--idlc/prj/build.lst5
-rw-r--r--idlc/prj/d.lst7
-rw-r--r--idlc/source/astarray.cxx74
-rw-r--r--idlc/source/astconstant.cxx136
-rw-r--r--idlc/source/astdeclaration.cxx211
-rw-r--r--idlc/source/astdump.cxx454
-rw-r--r--idlc/source/astenum.cxx125
-rw-r--r--idlc/source/astexpression.cxx1266
-rw-r--r--idlc/source/astinterface.cxx427
-rw-r--r--idlc/source/astoperation.cxx153
-rw-r--r--idlc/source/astscope.cxx356
-rw-r--r--idlc/source/astservice.cxx70
-rw-r--r--idlc/source/aststack.cxx137
-rw-r--r--idlc/source/aststruct.cxx191
-rw-r--r--idlc/source/aststructinstance.cxx70
-rw-r--r--idlc/source/astunion.cxx401
-rw-r--r--idlc/source/attributeexceptions.hxx42
-rw-r--r--idlc/source/errorhandler.cxx695
-rw-r--r--idlc/source/fehelper.cxx144
-rw-r--r--idlc/source/idlc.cxx341
-rw-r--r--idlc/source/idlccompile.cxx418
-rw-r--r--idlc/source/idlcmain.cxx148
-rw-r--r--idlc/source/idlcproduce.cxx210
-rw-r--r--idlc/source/makefile.mk129
-rw-r--r--idlc/source/options.cxx371
-rw-r--r--idlc/source/parser.y3292
-rw-r--r--idlc/source/preproc/cpp.c498
-rw-r--r--idlc/source/preproc/cpp.h213
-rw-r--r--idlc/source/preproc/eval.c790
-rw-r--r--idlc/source/preproc/include.c256
-rw-r--r--idlc/source/preproc/lex.c695
-rw-r--r--idlc/source/preproc/macro.c700
-rw-r--r--idlc/source/preproc/makefile.mk75
-rw-r--r--idlc/source/preproc/nlist.c143
-rw-r--r--idlc/source/preproc/tokens.c534
-rw-r--r--idlc/source/preproc/unix.c247
-rw-r--r--idlc/source/scanner.ll523
-rw-r--r--idlc/source/wrap_parser.cxx31
-rw-r--r--idlc/source/wrap_scanner.cxx31
-rw-r--r--idlc/test/const.idl50
-rw-r--r--idlc/test/enum.idl24
-rw-r--r--idlc/test/exception.idl20
-rw-r--r--idlc/test/identifiers.idl22
-rw-r--r--idlc/test/interface.idl51
-rw-r--r--idlc/test/parser/attribute.tests223
-rw-r--r--idlc/test/parser/constant.tests295
-rw-r--r--idlc/test/parser/constructor.tests199
-rw-r--r--idlc/test/parser/interfaceinheritance.tests280
-rw-r--r--idlc/test/parser/makefile.mk55
-rw-r--r--idlc/test/parser/methodoverload.tests124
-rw-r--r--idlc/test/parser/polystruct.tests255
-rw-r--r--idlc/test/parser/published.tests708
-rw-r--r--idlc/test/parser/struct.tests55
-rw-r--r--idlc/test/parser/typedef.tests67
-rw-r--r--idlc/test/service.idl44
-rw-r--r--idlc/test/singleton.idl41
-rw-r--r--idlc/test/struct.idl107
-rw-r--r--idlc/test/typelookup.idl63
-rw-r--r--idlc/test/union.idl35
-rw-r--r--install-sh276
-rw-r--r--instsetoo_native/inc_broffice/windows/msi_templates/Binary/Banner.bmpbin0 -> 7112 bytes
-rw-r--r--instsetoo_native/inc_broffice/windows/msi_templates/Binary/Image.bmpbin0 -> 51772 bytes
-rw-r--r--instsetoo_native/inc_ooolangpack/windows/msi_templates/ActionTe.idt73
-rw-r--r--instsetoo_native/inc_ooolangpack/windows/msi_templates/AdminExe.idt13
-rw-r--r--instsetoo_native/inc_ooolangpack/windows/msi_templates/AdminUIS.idt14
-rw-r--r--instsetoo_native/inc_ooolangpack/windows/msi_templates/AdvtExec.idt19
-rw-r--r--instsetoo_native/inc_ooolangpack/windows/msi_templates/Binary.idt20
-rw-r--r--instsetoo_native/inc_ooolangpack/windows/msi_templates/Binary/Banner.bmpbin0 -> 6400 bytes
-rw-r--r--instsetoo_native/inc_ooolangpack/windows/msi_templates/Binary/Image.bmpbin0 -> 52248 bytes
-rw-r--r--instsetoo_native/inc_ooolangpack/windows/msi_templates/Binary/caution.icobin0 -> 3262 bytes
-rw-r--r--instsetoo_native/inc_ooolangpack/windows/msi_templates/Binary/dontinstall.icobin0 -> 766 bytes
-rw-r--r--instsetoo_native/inc_ooolangpack/windows/msi_templates/Binary/install.icobin0 -> 766 bytes
-rw-r--r--instsetoo_native/inc_ooolangpack/windows/msi_templates/Binary/installfirstuse.icobin0 -> 3262 bytes
-rw-r--r--instsetoo_native/inc_ooolangpack/windows/msi_templates/Binary/installpartial.icobin0 -> 766 bytes
-rw-r--r--instsetoo_native/inc_ooolangpack/windows/msi_templates/Binary/installstatemenu.icobin0 -> 3262 bytes
-rw-r--r--instsetoo_native/inc_ooolangpack/windows/msi_templates/Binary/networkinstall.icobin0 -> 3262 bytes
-rw-r--r--instsetoo_native/inc_ooolangpack/windows/msi_templates/Binary/newfolder.icobin0 -> 894 bytes
-rw-r--r--instsetoo_native/inc_ooolangpack/windows/msi_templates/Binary/openfolder.icobin0 -> 3262 bytes
-rw-r--r--instsetoo_native/inc_ooolangpack/windows/msi_templates/Binary/setup.icobin0 -> 11502 bytes
-rw-r--r--instsetoo_native/inc_ooolangpack/windows/msi_templates/Binary/setupcomplete.icobin0 -> 3262 bytes
-rw-r--r--instsetoo_native/inc_ooolangpack/windows/msi_templates/Binary/setuppartial.icobin0 -> 3262 bytes
-rw-r--r--instsetoo_native/inc_ooolangpack/windows/msi_templates/Binary/setuprepair.icobin0 -> 3262 bytes
-rw-r--r--instsetoo_native/inc_ooolangpack/windows/msi_templates/Binary/trashcan.icobin0 -> 3262 bytes
-rw-r--r--instsetoo_native/inc_ooolangpack/windows/msi_templates/Binary/up.icobin0 -> 894 bytes
-rw-r--r--instsetoo_native/inc_ooolangpack/windows/msi_templates/CheckBox.idt4
-rw-r--r--instsetoo_native/inc_ooolangpack/windows/msi_templates/Control.idt380
-rw-r--r--instsetoo_native/inc_ooolangpack/windows/msi_templates/ControlC.idt70
-rw-r--r--instsetoo_native/inc_ooolangpack/windows/msi_templates/ControlE.idt138
-rw-r--r--instsetoo_native/inc_ooolangpack/windows/msi_templates/CustomAc.idt10
-rw-r--r--instsetoo_native/inc_ooolangpack/windows/msi_templates/Dialog.idt33
-rw-r--r--instsetoo_native/inc_ooolangpack/windows/msi_templates/Error.idt133
-rw-r--r--instsetoo_native/inc_ooolangpack/windows/msi_templates/EventMap.idt19
-rw-r--r--instsetoo_native/inc_ooolangpack/windows/msi_templates/InstallE.idt74
-rw-r--r--instsetoo_native/inc_ooolangpack/windows/msi_templates/InstallU.idt30
-rw-r--r--instsetoo_native/inc_ooolangpack/windows/msi_templates/LaunchCo.idt4
-rw-r--r--instsetoo_native/inc_ooolangpack/windows/msi_templates/ListBox.idt3
-rw-r--r--instsetoo_native/inc_ooolangpack/windows/msi_templates/Property.idt56
-rw-r--r--instsetoo_native/inc_ooolangpack/windows/msi_templates/RadioBut.idt11
-rw-r--r--instsetoo_native/inc_ooolangpack/windows/msi_templates/TextStyl.idt25
-rw-r--r--instsetoo_native/inc_ooolangpack/windows/msi_templates/UIText.idt53
-rw-r--r--instsetoo_native/inc_ooolangpack/windows/msi_templates/_Validat.idt461
-rw-r--r--instsetoo_native/inc_ooolangpack/windows/msi_templates/bro_patchcodes.txt3
-rw-r--r--instsetoo_native/inc_ooolangpack/windows/msi_templates/brodev_patchcodes.txt3
-rw-r--r--instsetoo_native/inc_ooolangpack/windows/msi_templates/codes.txt152
-rw-r--r--instsetoo_native/inc_ooolangpack/windows/msi_templates/codes_broo.txt67
-rw-r--r--instsetoo_native/inc_ooolangpack/windows/msi_templates/codes_ooodev.txt152
-rw-r--r--instsetoo_native/inc_ooolangpack/windows/msi_templates/components.txt0
-rw-r--r--instsetoo_native/inc_ooolangpack/windows/msi_templates/ooo_patchcodes.txt3
-rw-r--r--instsetoo_native/inc_ooolangpack/windows/msi_templates/ooodev_patchcodes.txt3
-rw-r--r--instsetoo_native/inc_openoffice/unix/find-requires-gnome.sh7
-rw-r--r--instsetoo_native/inc_openoffice/unix/find-requires-x11.sh6
-rw-r--r--instsetoo_native/inc_openoffice/unix/makefile.mk55
-rw-r--r--instsetoo_native/inc_openoffice/windows/msi_languages/ActionTe.ulf373
-rw-r--r--instsetoo_native/inc_openoffice/windows/msi_languages/Control.ulf736
-rw-r--r--instsetoo_native/inc_openoffice/windows/msi_languages/CustomAc.ulf11
-rw-r--r--instsetoo_native/inc_openoffice/windows/msi_languages/Error.ulf391
-rw-r--r--instsetoo_native/inc_openoffice/windows/msi_languages/LaunchCo.ulf4
-rw-r--r--instsetoo_native/inc_openoffice/windows/msi_languages/Nsis.ulf41
-rw-r--r--instsetoo_native/inc_openoffice/windows/msi_languages/Property.ulf47
-rw-r--r--instsetoo_native/inc_openoffice/windows/msi_languages/RadioBut.ulf27
-rw-r--r--instsetoo_native/inc_openoffice/windows/msi_languages/SIS.ulf18
-rw-r--r--instsetoo_native/inc_openoffice/windows/msi_languages/UIText.ulf148
-rw-r--r--instsetoo_native/inc_openoffice/windows/msi_languages/makefile.mk62
-rw-r--r--instsetoo_native/inc_openoffice/windows/msi_templates/ActionTe.idt73
-rw-r--r--instsetoo_native/inc_openoffice/windows/msi_templates/AdminExe.idt13
-rw-r--r--instsetoo_native/inc_openoffice/windows/msi_templates/AdminUIS.idt14
-rw-r--r--instsetoo_native/inc_openoffice/windows/msi_templates/AdvtExec.idt19
-rw-r--r--instsetoo_native/inc_openoffice/windows/msi_templates/AppSearc.idt5
-rw-r--r--instsetoo_native/inc_openoffice/windows/msi_templates/Binary.idt20
-rw-r--r--instsetoo_native/inc_openoffice/windows/msi_templates/Binary/Banner.bmpbin0 -> 6400 bytes
-rw-r--r--instsetoo_native/inc_openoffice/windows/msi_templates/Binary/Image.bmpbin0 -> 52248 bytes
-rw-r--r--instsetoo_native/inc_openoffice/windows/msi_templates/Binary/caution.icobin0 -> 3262 bytes
-rw-r--r--instsetoo_native/inc_openoffice/windows/msi_templates/Binary/dontinstall.icobin0 -> 766 bytes
-rw-r--r--instsetoo_native/inc_openoffice/windows/msi_templates/Binary/install.icobin0 -> 766 bytes
-rw-r--r--instsetoo_native/inc_openoffice/windows/msi_templates/Binary/installfirstuse.icobin0 -> 3262 bytes
-rw-r--r--instsetoo_native/inc_openoffice/windows/msi_templates/Binary/installpartial.icobin0 -> 766 bytes
-rw-r--r--instsetoo_native/inc_openoffice/windows/msi_templates/Binary/installstatemenu.icobin0 -> 3262 bytes
-rw-r--r--instsetoo_native/inc_openoffice/windows/msi_templates/Binary/networkinstall.icobin0 -> 3262 bytes
-rw-r--r--instsetoo_native/inc_openoffice/windows/msi_templates/Binary/newfolder.icobin0 -> 894 bytes
-rw-r--r--instsetoo_native/inc_openoffice/windows/msi_templates/Binary/openfolder.icobin0 -> 3262 bytes
-rw-r--r--instsetoo_native/inc_openoffice/windows/msi_templates/Binary/setup.icobin0 -> 11502 bytes
-rw-r--r--instsetoo_native/inc_openoffice/windows/msi_templates/Binary/setupcomplete.icobin0 -> 3262 bytes
-rw-r--r--instsetoo_native/inc_openoffice/windows/msi_templates/Binary/setuppartial.icobin0 -> 3262 bytes
-rw-r--r--instsetoo_native/inc_openoffice/windows/msi_templates/Binary/setuprepair.icobin0 -> 3262 bytes
-rw-r--r--instsetoo_native/inc_openoffice/windows/msi_templates/Binary/trashcan.icobin0 -> 3262 bytes
-rw-r--r--instsetoo_native/inc_openoffice/windows/msi_templates/Binary/up.icobin0 -> 894 bytes
-rw-r--r--instsetoo_native/inc_openoffice/windows/msi_templates/CheckBox.idt6
-rw-r--r--instsetoo_native/inc_openoffice/windows/msi_templates/Control.idt395
-rw-r--r--instsetoo_native/inc_openoffice/windows/msi_templates/ControlC.idt79
-rw-r--r--instsetoo_native/inc_openoffice/windows/msi_templates/ControlE.idt152
-rw-r--r--instsetoo_native/inc_openoffice/windows/msi_templates/CustomAc.idt131
-rw-r--r--instsetoo_native/inc_openoffice/windows/msi_templates/Dialog.idt36
-rw-r--r--instsetoo_native/inc_openoffice/windows/msi_templates/Error.idt133
-rw-r--r--instsetoo_native/inc_openoffice/windows/msi_templates/EventMap.idt18
-rw-r--r--instsetoo_native/inc_openoffice/windows/msi_templates/InstallE.idt191
-rw-r--r--instsetoo_native/inc_openoffice/windows/msi_templates/InstallU.idt31
-rw-r--r--instsetoo_native/inc_openoffice/windows/msi_templates/LaunchCo.idt5
-rw-r--r--instsetoo_native/inc_openoffice/windows/msi_templates/ListBox.idt3
-rw-r--r--instsetoo_native/inc_openoffice/windows/msi_templates/Property.idt62
-rw-r--r--instsetoo_native/inc_openoffice/windows/msi_templates/RadioBut.idt12
-rw-r--r--instsetoo_native/inc_openoffice/windows/msi_templates/RegLocat.idt5
-rw-r--r--instsetoo_native/inc_openoffice/windows/msi_templates/Signatur.idt3
-rw-r--r--instsetoo_native/inc_openoffice/windows/msi_templates/TextStyl.idt25
-rw-r--r--instsetoo_native/inc_openoffice/windows/msi_templates/UIText.idt53
-rw-r--r--instsetoo_native/inc_openoffice/windows/msi_templates/_Validat.idt461
-rw-r--r--instsetoo_native/inc_openoffice/windows/msi_templates/codes.txt37
-rw-r--r--instsetoo_native/inc_openoffice/windows/msi_templates/codes_broo.txt5
-rw-r--r--instsetoo_native/inc_openoffice/windows/msi_templates/codes_broodev.txt5
-rw-r--r--instsetoo_native/inc_openoffice/windows/msi_templates/codes_ooodev.txt37
-rw-r--r--instsetoo_native/inc_openoffice/windows/msi_templates/components.txt0
-rw-r--r--instsetoo_native/inc_openoffice/windows/msi_templates/upgradecode_remove_ooo.txt121
-rw-r--r--instsetoo_native/inc_sdkoo/windows/msi_templates/ActionTe.idt73
-rw-r--r--instsetoo_native/inc_sdkoo/windows/msi_templates/AdminExe.idt13
-rw-r--r--instsetoo_native/inc_sdkoo/windows/msi_templates/AdminUIS.idt14
-rw-r--r--instsetoo_native/inc_sdkoo/windows/msi_templates/AdvtExec.idt19
-rw-r--r--instsetoo_native/inc_sdkoo/windows/msi_templates/AppSearc.idt5
-rw-r--r--instsetoo_native/inc_sdkoo/windows/msi_templates/Binary.idt20
-rw-r--r--instsetoo_native/inc_sdkoo/windows/msi_templates/Binary/Banner.bmpbin0 -> 6400 bytes
-rw-r--r--instsetoo_native/inc_sdkoo/windows/msi_templates/Binary/Image.bmpbin0 -> 154544 bytes
-rw-r--r--instsetoo_native/inc_sdkoo/windows/msi_templates/Binary/caution.icobin0 -> 3262 bytes
-rw-r--r--instsetoo_native/inc_sdkoo/windows/msi_templates/Binary/dontinstall.icobin0 -> 766 bytes
-rw-r--r--instsetoo_native/inc_sdkoo/windows/msi_templates/Binary/install.icobin0 -> 766 bytes
-rw-r--r--instsetoo_native/inc_sdkoo/windows/msi_templates/Binary/installfirstuse.icobin0 -> 3262 bytes
-rw-r--r--instsetoo_native/inc_sdkoo/windows/msi_templates/Binary/installpartial.icobin0 -> 766 bytes
-rw-r--r--instsetoo_native/inc_sdkoo/windows/msi_templates/Binary/installstatemenu.icobin0 -> 3262 bytes
-rw-r--r--instsetoo_native/inc_sdkoo/windows/msi_templates/Binary/networkinstall.icobin0 -> 3262 bytes
-rw-r--r--instsetoo_native/inc_sdkoo/windows/msi_templates/Binary/newfolder.icobin0 -> 894 bytes
-rw-r--r--instsetoo_native/inc_sdkoo/windows/msi_templates/Binary/openfolder.icobin0 -> 3262 bytes
-rw-r--r--instsetoo_native/inc_sdkoo/windows/msi_templates/Binary/setup.icobin0 -> 11502 bytes
-rw-r--r--instsetoo_native/inc_sdkoo/windows/msi_templates/Binary/setupcomplete.icobin0 -> 3262 bytes
-rw-r--r--instsetoo_native/inc_sdkoo/windows/msi_templates/Binary/setuppartial.icobin0 -> 3262 bytes
-rw-r--r--instsetoo_native/inc_sdkoo/windows/msi_templates/Binary/setuprepair.icobin0 -> 3262 bytes
-rw-r--r--instsetoo_native/inc_sdkoo/windows/msi_templates/Binary/trashcan.icobin0 -> 3262 bytes
-rw-r--r--instsetoo_native/inc_sdkoo/windows/msi_templates/Binary/up.icobin0 -> 894 bytes
-rw-r--r--instsetoo_native/inc_sdkoo/windows/msi_templates/CheckBox.idt4
-rw-r--r--instsetoo_native/inc_sdkoo/windows/msi_templates/Control.idt377
-rw-r--r--instsetoo_native/inc_sdkoo/windows/msi_templates/ControlC.idt70
-rw-r--r--instsetoo_native/inc_sdkoo/windows/msi_templates/ControlE.idt139
-rw-r--r--instsetoo_native/inc_sdkoo/windows/msi_templates/CustomAc.idt8
-rw-r--r--instsetoo_native/inc_sdkoo/windows/msi_templates/Dialog.idt33
-rw-r--r--instsetoo_native/inc_sdkoo/windows/msi_templates/Error.idt133
-rw-r--r--instsetoo_native/inc_sdkoo/windows/msi_templates/EventMap.idt18
-rw-r--r--instsetoo_native/inc_sdkoo/windows/msi_templates/InstallE.idt72
-rw-r--r--instsetoo_native/inc_sdkoo/windows/msi_templates/InstallU.idt29
-rw-r--r--instsetoo_native/inc_sdkoo/windows/msi_templates/LaunchCo.idt4
-rw-r--r--instsetoo_native/inc_sdkoo/windows/msi_templates/ListBox.idt3
-rw-r--r--instsetoo_native/inc_sdkoo/windows/msi_templates/Property.idt56
-rw-r--r--instsetoo_native/inc_sdkoo/windows/msi_templates/RadioBut.idt12
-rw-r--r--instsetoo_native/inc_sdkoo/windows/msi_templates/RegLocat.idt5
-rw-r--r--instsetoo_native/inc_sdkoo/windows/msi_templates/Signatur.idt3
-rw-r--r--instsetoo_native/inc_sdkoo/windows/msi_templates/TextStyl.idt25
-rw-r--r--instsetoo_native/inc_sdkoo/windows/msi_templates/UIText.idt53
-rw-r--r--instsetoo_native/inc_sdkoo/windows/msi_templates/_Validat.idt461
-rw-r--r--instsetoo_native/inc_sdkoo/windows/msi_templates/codes.txt36
-rw-r--r--instsetoo_native/inc_sdkoo/windows/msi_templates/components.txt0
-rw-r--r--instsetoo_native/inc_ure/windows/msi_templates/ActionTe.idt73
-rw-r--r--instsetoo_native/inc_ure/windows/msi_templates/AdminExe.idt13
-rw-r--r--instsetoo_native/inc_ure/windows/msi_templates/AdminUIS.idt14
-rw-r--r--instsetoo_native/inc_ure/windows/msi_templates/AdvtExec.idt19
-rw-r--r--instsetoo_native/inc_ure/windows/msi_templates/AppSearc.idt3
-rw-r--r--instsetoo_native/inc_ure/windows/msi_templates/Binary.idt20
-rw-r--r--instsetoo_native/inc_ure/windows/msi_templates/Binary/Banner.bmpbin0 -> 7112 bytes
-rw-r--r--instsetoo_native/inc_ure/windows/msi_templates/Binary/Image.bmpbin0 -> 52248 bytes
-rw-r--r--instsetoo_native/inc_ure/windows/msi_templates/Binary/caution.icobin0 -> 3262 bytes
-rw-r--r--instsetoo_native/inc_ure/windows/msi_templates/Binary/dontinstall.icobin0 -> 766 bytes
-rw-r--r--instsetoo_native/inc_ure/windows/msi_templates/Binary/install.icobin0 -> 766 bytes
-rw-r--r--instsetoo_native/inc_ure/windows/msi_templates/Binary/installfirstuse.icobin0 -> 3262 bytes
-rw-r--r--instsetoo_native/inc_ure/windows/msi_templates/Binary/installpartial.icobin0 -> 766 bytes
-rw-r--r--instsetoo_native/inc_ure/windows/msi_templates/Binary/installstatemenu.icobin0 -> 3262 bytes
-rw-r--r--instsetoo_native/inc_ure/windows/msi_templates/Binary/networkinstall.icobin0 -> 3262 bytes
-rw-r--r--instsetoo_native/inc_ure/windows/msi_templates/Binary/newfolder.icobin0 -> 894 bytes
-rw-r--r--instsetoo_native/inc_ure/windows/msi_templates/Binary/openfolder.icobin0 -> 3262 bytes
-rw-r--r--instsetoo_native/inc_ure/windows/msi_templates/Binary/setup.icobin0 -> 11502 bytes
-rw-r--r--instsetoo_native/inc_ure/windows/msi_templates/Binary/setupcomplete.icobin0 -> 3262 bytes
-rw-r--r--instsetoo_native/inc_ure/windows/msi_templates/Binary/setuppartial.icobin0 -> 3262 bytes
-rw-r--r--instsetoo_native/inc_ure/windows/msi_templates/Binary/setuprepair.icobin0 -> 3262 bytes
-rw-r--r--instsetoo_native/inc_ure/windows/msi_templates/Binary/trashcan.icobin0 -> 3262 bytes
-rw-r--r--instsetoo_native/inc_ure/windows/msi_templates/Binary/up.icobin0 -> 894 bytes
-rw-r--r--instsetoo_native/inc_ure/windows/msi_templates/CheckBox.idt4
-rw-r--r--instsetoo_native/inc_ure/windows/msi_templates/Control.idt377
-rw-r--r--instsetoo_native/inc_ure/windows/msi_templates/ControlC.idt70
-rw-r--r--instsetoo_native/inc_ure/windows/msi_templates/ControlE.idt139
-rw-r--r--instsetoo_native/inc_ure/windows/msi_templates/CustomAc.idt10
-rw-r--r--instsetoo_native/inc_ure/windows/msi_templates/Dialog.idt33
-rw-r--r--instsetoo_native/inc_ure/windows/msi_templates/Error.idt133
-rw-r--r--instsetoo_native/inc_ure/windows/msi_templates/EventMap.idt18
-rw-r--r--instsetoo_native/inc_ure/windows/msi_templates/InstallE.idt74
-rw-r--r--instsetoo_native/inc_ure/windows/msi_templates/InstallU.idt31
-rw-r--r--instsetoo_native/inc_ure/windows/msi_templates/LaunchCo.idt4
-rw-r--r--instsetoo_native/inc_ure/windows/msi_templates/ListBox.idt3
-rw-r--r--instsetoo_native/inc_ure/windows/msi_templates/Property.idt57
-rw-r--r--instsetoo_native/inc_ure/windows/msi_templates/RadioBut.idt12
-rw-r--r--instsetoo_native/inc_ure/windows/msi_templates/RegLocat.idt3
-rw-r--r--instsetoo_native/inc_ure/windows/msi_templates/Signatur.idt3
-rw-r--r--instsetoo_native/inc_ure/windows/msi_templates/TextStyl.idt25
-rw-r--r--instsetoo_native/inc_ure/windows/msi_templates/UIText.idt53
-rw-r--r--instsetoo_native/inc_ure/windows/msi_templates/_Validat.idt461
-rw-r--r--instsetoo_native/inc_ure/windows/msi_templates/codes.txt36
-rw-r--r--instsetoo_native/inc_ure/windows/msi_templates/components.txt0
-rw-r--r--instsetoo_native/prj/build.lst5
-rw-r--r--instsetoo_native/prj/d.lst4
-rw-r--r--instsetoo_native/res/nologoinstall.bmpbin0 -> 52244 bytes
-rw-r--r--instsetoo_native/util/makefile.mk334
-rw-r--r--instsetoo_native/util/openoffice.lst603
-rw-r--r--instsetoo_native/util/pack.lst20
-rw-r--r--instsetoo_native/util/update.xml10
-rw-r--r--io/inc/makefile.mk49
-rw-r--r--io/inc/pch/precompiled_io.cxx29
-rw-r--r--io/inc/pch/precompiled_io.hxx32
-rw-r--r--io/prj/build.lst8
-rw-r--r--io/prj/d.lst7
-rw-r--r--io/source/TextInputStream/TextInputStream.cxx537
-rw-r--r--io/source/TextInputStream/makefile.mk61
-rw-r--r--io/source/TextOutputStream/TextOutputStream.cxx335
-rw-r--r--io/source/TextOutputStream/makefile.mk62
-rw-r--r--io/source/acceptor/acc_pipe.cxx224
-rw-r--r--io/source/acceptor/acc_socket.cxx416
-rw-r--r--io/source/acceptor/acceptor.cxx383
-rw-r--r--io/source/acceptor/acceptor.hxx78
-rw-r--r--io/source/acceptor/acceptor.xml44
-rw-r--r--io/source/acceptor/makefile.mk73
-rw-r--r--io/source/connector/connector.cxx295
-rw-r--r--io/source/connector/connector.hxx144
-rw-r--r--io/source/connector/connectr.xml44
-rw-r--r--io/source/connector/ctr_pipe.cxx118
-rw-r--r--io/source/connector/ctr_socket.cxx255
-rw-r--r--io/source/connector/makefile.mk73
-rw-r--r--io/source/stm/factreg.cxx125
-rw-r--r--io/source/stm/factreg.hxx66
-rw-r--r--io/source/stm/makefile.mk77
-rw-r--r--io/source/stm/odata.cxx1664
-rw-r--r--io/source/stm/omark.cxx1015
-rw-r--r--io/source/stm/opipe.cxx492
-rw-r--r--io/source/stm/opump.cxx504
-rw-r--r--io/source/stm/stm.xml280
-rw-r--r--io/source/stm/streamhelper.cxx244
-rw-r--r--io/source/stm/streamhelper.hxx162
-rw-r--r--io/test/makefile.mk92
-rw-r--r--io/test/stm/datatest.cxx1123
-rw-r--r--io/test/stm/exports.dxp3
-rw-r--r--io/test/stm/makefile.mk99
-rw-r--r--io/test/stm/marktest.cxx677
-rw-r--r--io/test/stm/pipetest.cxx439
-rw-r--r--io/test/stm/pumptest.cxx449
-rw-r--r--io/test/stm/testfactreg.cxx216
-rw-r--r--io/test/stm/testfactreg.hxx119
-rw-r--r--io/test/testcomponent.cxx217
-rw-r--r--io/test/testconnection.cxx286
-rw-r--r--javaunohelper/com/sun/star/comp/JavaUNOHelperServices.java81
-rw-r--r--javaunohelper/com/sun/star/comp/helper/Bootstrap.java329
-rw-r--r--javaunohelper/com/sun/star/comp/helper/BootstrapException.java91
-rw-r--r--javaunohelper/com/sun/star/comp/helper/ComponentContext.java310
-rw-r--r--javaunohelper/com/sun/star/comp/helper/ComponentContextEntry.java73
-rw-r--r--javaunohelper/com/sun/star/comp/helper/RegistryServiceFactory.java168
-rw-r--r--javaunohelper/com/sun/star/comp/helper/SharedLibraryLoader.java159
-rw-r--r--javaunohelper/com/sun/star/comp/helper/UnoInfo.java115
-rw-r--r--javaunohelper/com/sun/star/comp/helper/makefile.mk54
-rw-r--r--javaunohelper/com/sun/star/comp/juhtest/SmoketestCommandEnvironment.java151
-rw-r--r--javaunohelper/com/sun/star/comp/juhtest/makefile.mk50
-rw-r--r--javaunohelper/com/sun/star/comp/makefile.mk49
-rwxr-xr-xjavaunohelper/com/sun/star/lib/uno/adapter/ByteArrayToXInputStreamAdapter.java161
-rw-r--r--javaunohelper/com/sun/star/lib/uno/adapter/InputStreamToXInputStreamAdapter.java166
-rw-r--r--javaunohelper/com/sun/star/lib/uno/adapter/OutputStreamToXOutputStreamAdapter.java87
-rw-r--r--javaunohelper/com/sun/star/lib/uno/adapter/XInputStreamToInputStreamAdapter.java207
-rwxr-xr-xjavaunohelper/com/sun/star/lib/uno/adapter/XOutputStreamToByteArrayAdapter.java121
-rw-r--r--javaunohelper/com/sun/star/lib/uno/adapter/XOutputStreamToOutputStreamAdapter.java111
-rw-r--r--javaunohelper/com/sun/star/lib/uno/adapter/makefile.mk54
-rw-r--r--javaunohelper/com/sun/star/lib/uno/helper/ComponentBase.java141
-rw-r--r--javaunohelper/com/sun/star/lib/uno/helper/Factory.java244
-rw-r--r--javaunohelper/com/sun/star/lib/uno/helper/InterfaceContainer.java856
-rw-r--r--javaunohelper/com/sun/star/lib/uno/helper/MultiTypeInterfaceContainer.java165
-rw-r--r--javaunohelper/com/sun/star/lib/uno/helper/PropertySet.java1102
-rw-r--r--javaunohelper/com/sun/star/lib/uno/helper/PropertySetMixin.java1093
-rw-r--r--javaunohelper/com/sun/star/lib/uno/helper/UnoUrl.java412
-rw-r--r--javaunohelper/com/sun/star/lib/uno/helper/WeakAdapter.java102
-rw-r--r--javaunohelper/com/sun/star/lib/uno/helper/WeakBase.java143
-rw-r--r--javaunohelper/com/sun/star/lib/uno/helper/makefile.mk49
-rw-r--r--javaunohelper/inc/makefile.mk47
-rw-r--r--javaunohelper/inc/pch/precompiled_javaunohelper.cxx29
-rw-r--r--javaunohelper/inc/pch/precompiled_javaunohelper.hxx32
-rw-r--r--javaunohelper/prj/build.lst10
-rw-r--r--javaunohelper/prj/d.lst6
-rw-r--r--javaunohelper/source/bootstrap.cxx189
-rw-r--r--javaunohelper/source/javaunohelper.cxx323
-rw-r--r--javaunohelper/source/javaunohelper.map9
-rw-r--r--javaunohelper/source/makefile.mk134
-rw-r--r--javaunohelper/source/preload.cxx158
-rw-r--r--javaunohelper/source/vm.cxx147
-rw-r--r--javaunohelper/source/vm.hxx55
-rw-r--r--javaunohelper/test/com/sun/star/comp/helper/Bootstrap_Test.java117
-rw-r--r--javaunohelper/test/com/sun/star/comp/helper/ComponentContext_Test.java99
-rw-r--r--javaunohelper/test/com/sun/star/comp/helper/RegistryServiceFactory_Test.java100
-rw-r--r--javaunohelper/test/com/sun/star/comp/helper/SharedLibraryLoader_Test.java194
-rw-r--r--javaunohelper/test/com/sun/star/comp/helper/makefile.mk52
-rw-r--r--javaunohelper/test/com/sun/star/lib/uno/helper/AWeakBase.java50
-rw-r--r--javaunohelper/test/com/sun/star/lib/uno/helper/ComponentBase_Test.java153
-rw-r--r--javaunohelper/test/com/sun/star/lib/uno/helper/Factory_Test.java207
-rw-r--r--javaunohelper/test/com/sun/star/lib/uno/helper/InterfaceContainer_Test.java992
-rw-r--r--javaunohelper/test/com/sun/star/lib/uno/helper/MultiTypeInterfaceContainer_Test.java372
-rw-r--r--javaunohelper/test/com/sun/star/lib/uno/helper/PropertySet_Test.java1693
-rw-r--r--javaunohelper/test/com/sun/star/lib/uno/helper/ProxyProvider.java165
-rw-r--r--javaunohelper/test/com/sun/star/lib/uno/helper/UnoUrlTest.java261
-rw-r--r--javaunohelper/test/com/sun/star/lib/uno/helper/WeakBase_Test.java251
-rw-r--r--javaunohelper/test/com/sun/star/lib/uno/helper/makefile.mk68
-rw-r--r--javaunohelper/util/delzip0
-rw-r--r--javaunohelper/util/makefile.mk53
-rw-r--r--javaunohelper/util/manifest3
-rw-r--r--javaunohelper/util/settings.pmk28
-rw-r--r--jfreereport/java/flute/makefile.mk73
-rw-r--r--jfreereport/java/jfreereport/makefile.mk71
-rw-r--r--jfreereport/java/libbase/makefile.mk85
-rw-r--r--jfreereport/java/libfonts/makefile.mk72
-rw-r--r--jfreereport/java/libformula/makefile.mk77
-rw-r--r--jfreereport/java/liblayout/makefile.mk71
-rw-r--r--jfreereport/java/libloader/makefile.mk71
-rw-r--r--jfreereport/java/librepository/makefile.mk71
-rw-r--r--jfreereport/java/libserializer/makefile.mk71
-rw-r--r--jfreereport/java/libxml/makefile.mk71
-rw-r--r--jfreereport/java/sac/makefile.mk83
-rw-r--r--jfreereport/nbprojects/flute/nbproject/project.xml42
-rw-r--r--jfreereport/nbprojects/jcommon-serializer/nbproject/project.xml42
-rw-r--r--jfreereport/nbprojects/jfreereport/nbproject/project.xml42
-rw-r--r--jfreereport/nbprojects/libfonts/nbproject/project.xml42
-rw-r--r--jfreereport/nbprojects/libformula/nbproject/project.xml42
-rw-r--r--jfreereport/nbprojects/liblayout/nbproject/project.xml42
-rw-r--r--jfreereport/nbprojects/libloader/nbproject/project.xml42
-rw-r--r--jfreereport/nbprojects/librepository/nbproject/project.xml42
-rw-r--r--jfreereport/nbprojects/libxml/nbproject/project.xml42
-rw-r--r--jfreereport/patches/flow-engine.patch10
-rw-r--r--jfreereport/patches/flute.patch19
-rw-r--r--jfreereport/patches/libbase.patch19
-rw-r--r--jfreereport/patches/libfonts.patch10
-rw-r--r--jfreereport/patches/libformula.patch27
-rw-r--r--jfreereport/patches/liblayout.patch10
-rw-r--r--jfreereport/patches/libloader.patch11
-rw-r--r--jfreereport/patches/librepository.patch10
-rw-r--r--jfreereport/patches/libserializer.patch10
-rw-r--r--jfreereport/patches/libxml.patch10
-rw-r--r--jfreereport/patches/sac.patch73
-rw-r--r--jfreereport/prj/build.lst13
-rw-r--r--jfreereport/prj/d.lst1
-rw-r--r--jpeg/jpeg-6b.patch113
-rw-r--r--jpeg/makefile.mk67
-rw-r--r--jpeg/prj/build.lst2
-rw-r--r--jpeg/prj/d.lst10
-rw-r--r--jurt/com/sun/star/comp/bridgefactory/BridgeFactory.java228
-rw-r--r--jurt/com/sun/star/comp/bridgefactory/makefile.mk43
-rw-r--r--jurt/com/sun/star/comp/connections/Acceptor.java170
-rw-r--r--jurt/com/sun/star/comp/connections/Connector.java151
-rw-r--r--jurt/com/sun/star/comp/connections/ConstantInstanceProvider.java139
-rw-r--r--jurt/com/sun/star/comp/connections/Implementation.java101
-rw-r--r--jurt/com/sun/star/comp/connections/PipedConnection.java283
-rw-r--r--jurt/com/sun/star/comp/connections/makefile.mk43
-rw-r--r--jurt/com/sun/star/comp/loader/FactoryHelper.java564
-rw-r--r--jurt/com/sun/star/comp/loader/JavaLoader.java483
-rw-r--r--jurt/com/sun/star/comp/loader/JavaLoaderFactory.java104
-rw-r--r--jurt/com/sun/star/comp/loader/RegistrationClassFinder.java133
-rw-r--r--jurt/com/sun/star/comp/loader/makefile.mk47
-rw-r--r--jurt/com/sun/star/comp/servicemanager/ServiceManager.java926
-rw-r--r--jurt/com/sun/star/comp/servicemanager/makefile.mk43
-rw-r--r--jurt/com/sun/star/comp/urlresolver/UrlResolver.java171
-rw-r--r--jurt/com/sun/star/comp/urlresolver/makefile.mk43
-rw-r--r--jurt/com/sun/star/lib/connections/pipe/PipeConnection.java232
-rw-r--r--jurt/com/sun/star/lib/connections/pipe/makefile.mk41
-rw-r--r--jurt/com/sun/star/lib/connections/pipe/pipeAcceptor.java146
-rw-r--r--jurt/com/sun/star/lib/connections/pipe/pipeConnector.java142
-rw-r--r--jurt/com/sun/star/lib/connections/socket/ConnectionDescriptor.java107
-rw-r--r--jurt/com/sun/star/lib/connections/socket/SocketConnection.java252
-rw-r--r--jurt/com/sun/star/lib/connections/socket/makefile.mk42
-rw-r--r--jurt/com/sun/star/lib/connections/socket/socketAcceptor.java207
-rw-r--r--jurt/com/sun/star/lib/connections/socket/socketConnector.java181
-rw-r--r--jurt/com/sun/star/lib/uno/Proxy.java40
-rw-r--r--jurt/com/sun/star/lib/uno/bridges/java_remote/BridgedObject.java49
-rw-r--r--jurt/com/sun/star/lib/uno/bridges/java_remote/ProxyFactory.java185
-rw-r--r--jurt/com/sun/star/lib/uno/bridges/java_remote/RequestHandler.java41
-rw-r--r--jurt/com/sun/star/lib/uno/bridges/java_remote/XConnectionInputStream_Adapter.java82
-rw-r--r--jurt/com/sun/star/lib/uno/bridges/java_remote/XConnectionOutputStream_Adapter.java91
-rw-r--r--jurt/com/sun/star/lib/uno/bridges/java_remote/java_remote_bridge.java711
-rw-r--r--jurt/com/sun/star/lib/uno/bridges/java_remote/makefile.mk44
-rw-r--r--jurt/com/sun/star/lib/uno/environments/java/java_environment.java311
-rw-r--r--jurt/com/sun/star/lib/uno/environments/java/makefile.mk44
-rw-r--r--jurt/com/sun/star/lib/uno/environments/remote/IProtocol.java97
-rw-r--r--jurt/com/sun/star/lib/uno/environments/remote/IReceiver.java48
-rw-r--r--jurt/com/sun/star/lib/uno/environments/remote/IThreadPool.java127
-rw-r--r--jurt/com/sun/star/lib/uno/environments/remote/JavaThreadPool.java132
-rw-r--r--jurt/com/sun/star/lib/uno/environments/remote/JavaThreadPoolFactory.java94
-rw-r--r--jurt/com/sun/star/lib/uno/environments/remote/Job.java180
-rw-r--r--jurt/com/sun/star/lib/uno/environments/remote/JobQueue.java396
-rw-r--r--jurt/com/sun/star/lib/uno/environments/remote/Message.java195
-rw-r--r--jurt/com/sun/star/lib/uno/environments/remote/NativeThreadPool.java100
-rw-r--r--jurt/com/sun/star/lib/uno/environments/remote/ThreadId.java95
-rw-r--r--jurt/com/sun/star/lib/uno/environments/remote/ThreadPoolManager.java80
-rw-r--r--jurt/com/sun/star/lib/uno/environments/remote/makefile.mk50
-rw-r--r--jurt/com/sun/star/lib/uno/environments/remote/remote_environment.java72
-rw-r--r--jurt/com/sun/star/lib/uno/makefile.mk37
-rw-r--r--jurt/com/sun/star/lib/uno/protocols/urp/Cache.java120
-rw-r--r--jurt/com/sun/star/lib/uno/protocols/urp/Marshal.java390
-rw-r--r--jurt/com/sun/star/lib/uno/protocols/urp/PendingRequests.java71
-rw-r--r--jurt/com/sun/star/lib/uno/protocols/urp/Unmarshal.java490
-rw-r--r--jurt/com/sun/star/lib/uno/protocols/urp/UrpMessage.java54
-rw-r--r--jurt/com/sun/star/lib/uno/protocols/urp/makefile.mk44
-rw-r--r--jurt/com/sun/star/lib/uno/protocols/urp/urp.java734
-rw-r--r--jurt/com/sun/star/lib/util/AsynchronousFinalizer.java102
-rw-r--r--jurt/com/sun/star/lib/util/NativeLibraryLoader.java118
-rw-r--r--jurt/com/sun/star/lib/util/StringHelper.java51
-rw-r--r--jurt/com/sun/star/lib/util/UrlToFileMapper.java161
-rw-r--r--jurt/com/sun/star/lib/util/makefile.mk42
-rw-r--r--jurt/com/sun/star/uno/AnyConverter.java543
-rw-r--r--jurt/com/sun/star/uno/Ascii.java50
-rw-r--r--jurt/com/sun/star/uno/AsciiString.java51
-rw-r--r--jurt/com/sun/star/uno/MappingException.java70
-rw-r--r--jurt/com/sun/star/uno/WeakReference.java147
-rw-r--r--jurt/com/sun/star/uno/makefile.mk52
-rw-r--r--jurt/demo/com/sun/star/demo/DemoServer.java101
-rw-r--r--jurt/demo/com/sun/star/demo/TestOffice.java193
-rw-r--r--jurt/demo/com/sun/star/demo/makefile.mk57
-rw-r--r--jurt/prj/build.lst19
-rw-r--r--jurt/prj/d.lst7
-rw-r--r--jurt/source/pipe/com_sun_star_lib_connections_pipe_PipeConnection.c566
-rw-r--r--jurt/source/pipe/makefile.mk57
-rw-r--r--jurt/source/pipe/wrapper/makefile.mk52
-rw-r--r--jurt/source/pipe/wrapper/wrapper.c99
-rw-r--r--jurt/test/com/sun/star/comp/bridgefactory/BridgeFactory_Test.java106
-rw-r--r--jurt/test/com/sun/star/comp/bridgefactory/makefile.mk36
-rw-r--r--jurt/test/com/sun/star/comp/connections/PipedConnection_Test.java147
-rw-r--r--jurt/test/com/sun/star/comp/connections/makefile.mk36
-rw-r--r--jurt/test/com/sun/star/lib/uno/bridges/java_remote/BridgedObject_Test.java73
-rw-r--r--jurt/test/com/sun/star/lib/uno/bridges/java_remote/ProxyFactory_Test.java145
-rw-r--r--jurt/test/com/sun/star/lib/uno/bridges/java_remote/java_remote_bridge_Test.java251
-rw-r--r--jurt/test/com/sun/star/lib/uno/bridges/java_remote/makefile.mk39
-rw-r--r--jurt/test/com/sun/star/lib/uno/environments/java/java_environment_Test.java66
-rw-r--r--jurt/test/com/sun/star/lib/uno/environments/java/makefile.mk36
-rw-r--r--jurt/test/com/sun/star/lib/uno/environments/remote/JavaThreadPoolFactory_Test.java56
-rw-r--r--jurt/test/com/sun/star/lib/uno/environments/remote/JobQueue_Test.java274
-rw-r--r--jurt/test/com/sun/star/lib/uno/environments/remote/TestIWorkAt.java49
-rw-r--r--jurt/test/com/sun/star/lib/uno/environments/remote/TestMessage.java89
-rw-r--r--jurt/test/com/sun/star/lib/uno/environments/remote/TestReceiver.java33
-rw-r--r--jurt/test/com/sun/star/lib/uno/environments/remote/TestWorkAt.java97
-rw-r--r--jurt/test/com/sun/star/lib/uno/environments/remote/ThreadId_Test.java63
-rw-r--r--jurt/test/com/sun/star/lib/uno/environments/remote/ThreadPool_Test.java443
-rw-r--r--jurt/test/com/sun/star/lib/uno/environments/remote/makefile.mk44
-rw-r--r--jurt/test/com/sun/star/lib/uno/protocols/urp/Cache_Test.java106
-rw-r--r--jurt/test/com/sun/star/lib/uno/protocols/urp/Marshaling_Test.java369
-rw-r--r--jurt/test/com/sun/star/lib/uno/protocols/urp/Protocol_Test.java317
-rw-r--r--jurt/test/com/sun/star/lib/uno/protocols/urp/TestBridge.java115
-rw-r--r--jurt/test/com/sun/star/lib/uno/protocols/urp/TestObject.java70
-rw-r--r--jurt/test/com/sun/star/lib/uno/protocols/urp/interfaces.idl119
-rw-r--r--jurt/test/com/sun/star/lib/uno/protocols/urp/makefile.mk42
-rw-r--r--jurt/test/com/sun/star/lib/util/NativeLibraryLoader_Test.java83
-rw-r--r--jurt/test/com/sun/star/lib/util/makefile.mk36
-rw-r--r--jurt/test/com/sun/star/uno/AnyConverter_Test.java905
-rw-r--r--jurt/test/com/sun/star/uno/UnoRuntime_EnvironmentTest.java96
-rw-r--r--jurt/test/com/sun/star/uno/WeakReference_Test.java118
-rw-r--r--jurt/test/com/sun/star/uno/makefile.mk39
-rw-r--r--jurt/test/makefile.mk39
-rw-r--r--jurt/util/delzip0
-rw-r--r--jurt/util/makefile.mk52
-rw-r--r--jurt/util/makefile.pmk32
-rw-r--r--jurt/util/manifest7
-rw-r--r--jurt/workbench/com/sun/star/comp/urlresolver/UrlResolver_Test.java95
-rw-r--r--jurt/workbench/com/sun/star/comp/urlresolver/makefile.mk53
-rw-r--r--jvmaccess/inc/jvmaccess/classpath.hxx151
-rw-r--r--jvmaccess/inc/jvmaccess/unovirtualmachine.hxx109
-rw-r--r--jvmaccess/inc/jvmaccess/virtualmachine.hxx163
-rw-r--r--jvmaccess/prj/build.lst4
-rw-r--r--jvmaccess/prj/d.lst8
-rw-r--r--jvmaccess/source/classpath.cxx174
-rw-r--r--jvmaccess/source/makefile.mk41
-rw-r--r--jvmaccess/source/unovirtualmachine.cxx96
-rw-r--r--jvmaccess/source/virtualmachine.cxx124
-rw-r--r--jvmaccess/util/cc5_solaris_sparc.map81
-rw-r--r--jvmaccess/util/gcc3.map88
-rw-r--r--jvmaccess/util/makefile.mk66
-rw-r--r--jvmaccess/util/mingw.map71
-rw-r--r--jvmaccess/util/msvc_win32_intel.map37
-rw-r--r--jvmaccess/workbench/exceptiontest1.cxx46
-rw-r--r--jvmaccess/workbench/exceptiontest2.cxx46
-rw-r--r--jvmaccess/workbench/java/TestComponent.java104
-rw-r--r--jvmaccess/workbench/java/makefile.mk43
-rw-r--r--jvmaccess/workbench/java/manifest1
-rw-r--r--jvmaccess/workbench/javainfo/javainfotest.cxx372
-rw-r--r--jvmaccess/workbench/javainfo/makefile.mk43
-rw-r--r--jvmaccess/workbench/makefile.mk51
-rw-r--r--jvmfwk/distributions/OpenOfficeorg/javavendors.xsd77
-rw-r--r--jvmfwk/distributions/OpenOfficeorg/javavendors_freebsd.xml25
-rw-r--r--jvmfwk/distributions/OpenOfficeorg/javavendors_linux.xml33
-rw-r--r--jvmfwk/distributions/OpenOfficeorg/javavendors_macosx.xml20
-rw-r--r--jvmfwk/distributions/OpenOfficeorg/javavendors_os2.xml21
-rw-r--r--jvmfwk/distributions/OpenOfficeorg/javavendors_template.xml35
-rwxr-xr-xjvmfwk/distributions/OpenOfficeorg/javavendors_unx.xml17
-rw-r--r--jvmfwk/distributions/OpenOfficeorg/javavendors_wnt.xml21
-rwxr-xr-xjvmfwk/distributions/OpenOfficeorg/makefile.mk65
-rw-r--r--jvmfwk/inc/jvmfwk/framework.h868
-rw-r--r--jvmfwk/inc/jvmfwk/vendorplugin.h265
-rw-r--r--jvmfwk/inc/makefile.mk47
-rw-r--r--jvmfwk/inc/pch/precompiled_jvmfwk.cxx29
-rw-r--r--jvmfwk/inc/pch/precompiled_jvmfwk.hxx32
-rwxr-xr-xjvmfwk/plugins/sunmajor/javaenvsetup/javaldx.cxx188
-rwxr-xr-xjvmfwk/plugins/sunmajor/javaenvsetup/makefile.mk56
-rw-r--r--jvmfwk/plugins/sunmajor/pluginlib/JREProperties.java85
-rw-r--r--jvmfwk/plugins/sunmajor/pluginlib/diagnostics.h120
-rw-r--r--jvmfwk/plugins/sunmajor/pluginlib/gnujre.cxx287
-rw-r--r--jvmfwk/plugins/sunmajor/pluginlib/gnujre.hxx55
-rw-r--r--jvmfwk/plugins/sunmajor/pluginlib/makefile.mk117
-rw-r--r--jvmfwk/plugins/sunmajor/pluginlib/otherjre.cxx130
-rw-r--r--jvmfwk/plugins/sunmajor/pluginlib/otherjre.hxx53
-rw-r--r--jvmfwk/plugins/sunmajor/pluginlib/sunjavaplugin.cxx676
-rw-r--r--jvmfwk/plugins/sunmajor/pluginlib/sunjavaplugin.map13
-rwxr-xr-xjvmfwk/plugins/sunmajor/pluginlib/sunjavapluginrc2
-rw-r--r--jvmfwk/plugins/sunmajor/pluginlib/sunjre.cxx124
-rw-r--r--jvmfwk/plugins/sunmajor/pluginlib/sunjre.hxx52
-rw-r--r--jvmfwk/plugins/sunmajor/pluginlib/sunversion.cxx427
-rw-r--r--jvmfwk/plugins/sunmajor/pluginlib/sunversion.hxx127
-rw-r--r--jvmfwk/plugins/sunmajor/pluginlib/util.cxx1267
-rw-r--r--jvmfwk/plugins/sunmajor/pluginlib/util.hxx130
-rw-r--r--jvmfwk/plugins/sunmajor/pluginlib/vendorbase.cxx276
-rw-r--r--jvmfwk/plugins/sunmajor/pluginlib/vendorbase.hxx185
-rw-r--r--jvmfwk/plugins/sunmajor/pluginlib/vendorlist.cxx91
-rw-r--r--jvmfwk/plugins/sunmajor/pluginlib/vendorlist.hxx75
-rw-r--r--jvmfwk/prj/build.lst6
-rw-r--r--jvmfwk/prj/d.lst22
-rw-r--r--jvmfwk/source/elements.cxx1241
-rw-r--r--jvmfwk/source/elements.hxx391
-rw-r--r--jvmfwk/source/framework.cxx1287
-rw-r--r--jvmfwk/source/framework.hxx128
-rw-r--r--jvmfwk/source/framework.map31
-rw-r--r--jvmfwk/source/fwkbase.cxx718
-rw-r--r--jvmfwk/source/fwkbase.hxx158
-rw-r--r--jvmfwk/source/fwkutil.cxx354
-rw-r--r--jvmfwk/source/fwkutil.hxx138
-rw-r--r--jvmfwk/source/javasettings.xsd54
-rw-r--r--jvmfwk/source/javasettings_template.xml35
-rw-r--r--jvmfwk/source/javasettingsunopkginstall.xml3
-rw-r--r--jvmfwk/source/jvmfwk3rc4
-rw-r--r--jvmfwk/source/libxmlutil.cxx184
-rw-r--r--jvmfwk/source/libxmlutil.hxx129
-rw-r--r--jvmfwk/source/makefile.mk90
-rw-r--r--jvmfwk/source/readme.txt9
-rw-r--r--l10ntools/inc/cfgmerge.hxx205
-rw-r--r--l10ntools/inc/export.hxx585
-rw-r--r--l10ntools/inc/gsicheck.hxx128
-rw-r--r--l10ntools/inc/helpmerge.hxx84
-rw-r--r--l10ntools/inc/inireader.hxx52
-rw-r--r--l10ntools/inc/l10ntools/directory.hxx54
-rw-r--r--l10ntools/inc/l10ntools/file.hxx23
-rw-r--r--l10ntools/inc/l10ntools/vosapp.hxx33
-rw-r--r--l10ntools/inc/lngmerge.hxx66
-rw-r--r--l10ntools/inc/makefile.mk47
-rw-r--r--l10ntools/inc/pch/precompiled_l10ntools.cxx29
-rw-r--r--l10ntools/inc/pch/precompiled_l10ntools.hxx32
-rw-r--r--l10ntools/inc/srciter.hxx58
-rw-r--r--l10ntools/inc/tagtest.hxx396
-rw-r--r--l10ntools/inc/tokens.h109
-rw-r--r--l10ntools/inc/treeconfig.hxx28
-rw-r--r--l10ntools/inc/utf8conv.hxx44
-rw-r--r--l10ntools/inc/wtranode.hxx118
-rw-r--r--l10ntools/inc/wtratree.hxx159
-rw-r--r--l10ntools/inc/xmlparse.hxx550
-rw-r--r--l10ntools/inc/xmlutil.hxx9
-rw-r--r--l10ntools/inc/xrmmerge.hxx158
-rwxr-xr-xl10ntools/java/jpropex/build.xml169
-rw-r--r--l10ntools/java/jpropex/java/JPropEx.java509
-rw-r--r--l10ntools/java/jpropex/java/Main.java38
-rw-r--r--l10ntools/java/jpropex/java/NoLocalizeFilter.java54
-rw-r--r--l10ntools/java/jpropex/java/OrderedHashMap.java96
-rw-r--r--l10ntools/java/jpropex/java/SdfData.java108
-rw-r--r--l10ntools/java/jpropex/java/SdfEntity.java255
-rwxr-xr-xl10ntools/java/jpropex/jpropex12
-rwxr-xr-xl10ntools/java/jpropex/jpropex.MF1
-rwxr-xr-xl10ntools/java/jpropex/makefile.mk36
-rwxr-xr-xl10ntools/java/l10nconv/build.xml229
-rwxr-xr-xl10ntools/java/l10nconv/converter.MF1
-rwxr-xr-xl10ntools/java/l10nconv/documentation/readmeConverter.sxwbin0 -> 9824 bytes
-rwxr-xr-xl10ntools/java/l10nconv/java/com/sun/star/tooling/DirtyTags/DirtyTagWrapCheck.java82
-rwxr-xr-xl10ntools/java/l10nconv/java/com/sun/star/tooling/DirtyTags/DirtyTagWrapper.java249
-rwxr-xr-xl10ntools/java/l10nconv/java/com/sun/star/tooling/DirtyTags/Tag.java246
-rwxr-xr-xl10ntools/java/l10nconv/java/com/sun/star/tooling/DirtyTags/TagPair.java307
-rwxr-xr-xl10ntools/java/l10nconv/java/com/sun/star/tooling/converter/Convert.java550
-rwxr-xr-xl10ntools/java/l10nconv/java/com/sun/star/tooling/converter/Converter.java520
-rwxr-xr-xl10ntools/java/l10nconv/java/com/sun/star/tooling/converter/ConverterException.java76
-rwxr-xr-xl10ntools/java/l10nconv/java/com/sun/star/tooling/converter/DataHandler.java146
-rwxr-xr-xl10ntools/java/l10nconv/java/com/sun/star/tooling/converter/DataReader.java76
-rwxr-xr-xl10ntools/java/l10nconv/java/com/sun/star/tooling/converter/DataWriter.java88
-rwxr-xr-xl10ntools/java/l10nconv/java/com/sun/star/tooling/converter/ExtMap.java94
-rwxr-xr-xl10ntools/java/l10nconv/java/com/sun/star/tooling/converter/FileMaker.java84
-rwxr-xr-xl10ntools/java/l10nconv/java/com/sun/star/tooling/converter/GSIReader.java247
-rwxr-xr-xl10ntools/java/l10nconv/java/com/sun/star/tooling/converter/GSIWriter.java243
-rwxr-xr-xl10ntools/java/l10nconv/java/com/sun/star/tooling/converter/GSIandSDFMerger.java164
-rwxr-xr-xl10ntools/java/l10nconv/java/com/sun/star/tooling/converter/LineErrorException.java78
-rwxr-xr-xl10ntools/java/l10nconv/java/com/sun/star/tooling/converter/OutputHandler.java225
-rwxr-xr-xl10ntools/java/l10nconv/java/com/sun/star/tooling/converter/ResTypeResolver.java68
-rwxr-xr-xl10ntools/java/l10nconv/java/com/sun/star/tooling/converter/Resolver.java95
-rwxr-xr-xl10ntools/java/l10nconv/java/com/sun/star/tooling/converter/SDFReader.java632
-rwxr-xr-xl10ntools/java/l10nconv/java/com/sun/star/tooling/converter/SDFWriter.java172
-rwxr-xr-xl10ntools/java/l10nconv/java/com/sun/star/tooling/converter/XLIFFReader.java742
-rwxr-xr-xl10ntools/java/l10nconv/java/com/sun/star/tooling/converter/XLIFFWriter.java532
-rwxr-xr-xl10ntools/java/l10nconv/java/com/sun/star/tooling/converter/dtd/xliff.dtd391
-rwxr-xr-xl10ntools/java/l10nconv/java/com/sun/star/tooling/languageResolver/LanguageResolver.java198
-rwxr-xr-xl10ntools/java/l10nconv/java/com/sun/star/tooling/languageResolver/lang.map41
-rwxr-xr-xl10ntools/java/l10nconv/makefile.mk35
-rwxr-xr-xl10ntools/java/receditor/build.xml169
-rw-r--r--l10ntools/java/receditor/java/transex3/controller/EditorController.java334
-rw-r--r--l10ntools/java/receditor/java/transex3/controller/Main.java10
-rw-r--r--l10ntools/java/receditor/java/transex3/model/ResourceFile.java77
-rw-r--r--l10ntools/java/receditor/java/transex3/model/SdfEntity.java211
-rw-r--r--l10ntools/java/receditor/java/transex3/model/SdfString.java167
-rw-r--r--l10ntools/java/receditor/java/transex3/view/Editor.java97
-rw-r--r--l10ntools/java/receditor/java/transex3/view/SdfTable.java24
-rwxr-xr-xl10ntools/java/receditor/makefile.mk35
-rwxr-xr-xl10ntools/java/receditor/receditor.MF1
-rw-r--r--l10ntools/layout/README27
-rw-r--r--l10ntools/layout/layoutparse.cxx135
-rw-r--r--l10ntools/layout/layoutparse.hxx51
-rw-r--r--l10ntools/layout/loc.sdf24
-rw-r--r--l10ntools/layout/makefile.mk77
-rw-r--r--l10ntools/layout/tralay.cxx399
-rw-r--r--l10ntools/layout/zoom.xml40
-rw-r--r--l10ntools/prj/build.lst10
-rw-r--r--l10ntools/prj/d.lst77
-rw-r--r--l10ntools/scripts/fast_merge.pl334
-rw-r--r--l10ntools/scripts/keyidGen.pl185
-rw-r--r--l10ntools/scripts/localize.pl1078
-rwxr-xr-xl10ntools/scripts/localize_old.pl1070
-rw-r--r--l10ntools/scripts/makefile.mk59
-rw-r--r--l10ntools/scripts/tool/const.py39
-rw-r--r--l10ntools/scripts/tool/l10ntool.py210
-rw-r--r--l10ntools/scripts/tool/pseudo.py184
-rw-r--r--l10ntools/scripts/tool/sdf.py170
-rw-r--r--l10ntools/scripts/tool/xhtex.py136
-rw-r--r--l10ntools/scripts/tool/xtxex.py94
-rwxr-xr-xl10ntools/scripts/xhtex38
-rwxr-xr-xl10ntools/scripts/xtxex39
-rw-r--r--l10ntools/source/cfg_yy_wrapper.c2
-rw-r--r--l10ntools/source/cfglex.l217
-rw-r--r--l10ntools/source/cfgmerge.cxx872
-rw-r--r--l10ntools/source/directory.cxx273
-rw-r--r--l10ntools/source/export.cxx2645
-rw-r--r--l10ntools/source/export2.cxx734
-rw-r--r--l10ntools/source/file.cxx55
-rw-r--r--l10ntools/source/filter/merge/FCFGMerge.cfg121
-rw-r--r--l10ntools/source/filter/merge/FCFGMerge.java128
-rw-r--r--l10ntools/source/filter/merge/Manifest.mf1
-rw-r--r--l10ntools/source/filter/merge/Merger.java361
-rw-r--r--l10ntools/source/filter/merge/makefile.mk92
-rw-r--r--l10ntools/source/filter/utils/AnalyzeStartupLog.java325
-rw-r--r--l10ntools/source/filter/utils/Cache.java2446
-rw-r--r--l10ntools/source/filter/utils/ConfigHelper.java300
-rw-r--r--l10ntools/source/filter/utils/FileHelper.java763
-rw-r--r--l10ntools/source/filter/utils/Logger.java174
-rw-r--r--l10ntools/source/filter/utils/MalformedCommandLineException.java47
-rw-r--r--l10ntools/source/filter/utils/XMLHelper.java822
-rw-r--r--l10ntools/source/filter/utils/makefile.mk53
-rw-r--r--l10ntools/source/gsicheck.cxx1174
-rw-r--r--l10ntools/source/gsiconv.cxx369
-rw-r--r--l10ntools/source/help/HelpCompiler.cxx590
-rw-r--r--l10ntools/source/help/HelpCompiler.hxx317
-rw-r--r--l10ntools/source/help/HelpFileDocument.java86
-rw-r--r--l10ntools/source/help/HelpIndexerTool.java401
-rw-r--r--l10ntools/source/help/HelpLinker.cxx1254
-rw-r--r--l10ntools/source/help/compilehelp.hxx79
-rw-r--r--l10ntools/source/help/helplinker.pmk31
-rw-r--r--l10ntools/source/help/makefile.mk116
-rw-r--r--l10ntools/source/helpex.cxx290
-rw-r--r--l10ntools/source/helpmerge.cxx716
-rw-r--r--l10ntools/source/inireader.cxx132
-rw-r--r--l10ntools/source/lngex.cxx205
-rw-r--r--l10ntools/source/lngmerge.cxx356
-rw-r--r--l10ntools/source/localize.cxx970
-rw-r--r--l10ntools/source/makefile.mk206
-rw-r--r--l10ntools/source/merge.cxx459
-rw-r--r--l10ntools/source/src_yy_wrapper.c2
-rw-r--r--l10ntools/source/srciter.cxx138
-rw-r--r--l10ntools/source/srclex.l302
-rw-r--r--l10ntools/source/tagtest.cxx1574
-rw-r--r--l10ntools/source/treeconfig.cxx128
-rw-r--r--l10ntools/source/utf8conv.cxx74
-rw-r--r--l10ntools/source/wtranode.cxx108
-rw-r--r--l10ntools/source/wtratree.cxx418
-rw-r--r--l10ntools/source/xgfconv.cxx66
-rw-r--r--l10ntools/source/xmlparse.cxx1453
-rw-r--r--l10ntools/source/xrm_yy_wrapper.c2
-rw-r--r--l10ntools/source/xrmlex.l224
-rw-r--r--l10ntools/source/xrmmerge.cxx731
-rw-r--r--l10ntools/workbench/gsicheck_errors.sdf15
-rw-r--r--l10ntools/workbench/gsicheck_errors_err-.sdf11
-rw-r--r--l10ntools/workbench/gsicheck_errors_err-l.sdf2
-rw-r--r--l10ntools/workbench/gsicheck_errors_err-s.sdf9
-rw-r--r--l10ntools/workbench/gsicheck_errors_err-t.sdf9
-rw-r--r--l10ntools/workbench/gsicheck_errors_ok-.sdf5
-rw-r--r--l10ntools/workbench/gsicheck_errors_ok-l.sdf12
-rw-r--r--l10ntools/workbench/gsicheck_errors_ok-s.sdf6
-rw-r--r--l10ntools/workbench/gsicheck_errors_ok-t.sdf6
-rw-r--r--l10ntools/workbench/gsicheckcheck.btm17
-rw-r--r--libegg/README7
-rw-r--r--libegg/inc/eggtrayicon.h35
-rw-r--r--libegg/prj/build.lst2
-rw-r--r--libegg/prj/d.lst5
-rw-r--r--libegg/source/eggtrayicon-impl.h76
-rw-r--r--libegg/source/eggtrayicon.c568
-rw-r--r--libegg/source/makefile.mk66
-rw-r--r--libtextcat/data/new_fingerprints/LICENSE30
-rw-r--r--libtextcat/data/new_fingerprints/fpdb.conf85
-rw-r--r--libtextcat/data/new_fingerprints/lm/afrikaans.lm400
-rw-r--r--libtextcat/data/new_fingerprints/lm/albanian.lm400
-rw-r--r--libtextcat/data/new_fingerprints/lm/amharic_utf.lm400
-rw-r--r--libtextcat/data/new_fingerprints/lm/arabic.lm400
-rw-r--r--libtextcat/data/new_fingerprints/lm/armenian.lm0
-rw-r--r--libtextcat/data/new_fingerprints/lm/basque.lm400
-rw-r--r--libtextcat/data/new_fingerprints/lm/belarus.lm400
-rw-r--r--libtextcat/data/new_fingerprints/lm/bosnian.lm400
-rw-r--r--libtextcat/data/new_fingerprints/lm/breton.lm400
-rw-r--r--libtextcat/data/new_fingerprints/lm/catalan.lm400
-rw-r--r--libtextcat/data/new_fingerprints/lm/chinese_simplified.lm400
-rw-r--r--libtextcat/data/new_fingerprints/lm/chinese_traditional.lm400
-rw-r--r--libtextcat/data/new_fingerprints/lm/croatian.lm400
-rw-r--r--libtextcat/data/new_fingerprints/lm/czech.lm400
-rw-r--r--libtextcat/data/new_fingerprints/lm/danish.lm400
-rw-r--r--libtextcat/data/new_fingerprints/lm/drents.lm0
-rw-r--r--libtextcat/data/new_fingerprints/lm/dutch.lm400
-rw-r--r--libtextcat/data/new_fingerprints/lm/english.lm400
-rw-r--r--libtextcat/data/new_fingerprints/lm/esperanto.lm400
-rw-r--r--libtextcat/data/new_fingerprints/lm/estonian.lm400
-rw-r--r--libtextcat/data/new_fingerprints/lm/finnish.lm400
-rw-r--r--libtextcat/data/new_fingerprints/lm/french.lm400
-rw-r--r--libtextcat/data/new_fingerprints/lm/frisian.lm400
-rw-r--r--libtextcat/data/new_fingerprints/lm/georgian.lm400
-rw-r--r--libtextcat/data/new_fingerprints/lm/german.lm400
-rw-r--r--libtextcat/data/new_fingerprints/lm/greek.lm400
-rw-r--r--libtextcat/data/new_fingerprints/lm/hebrew.lm400
-rw-r--r--libtextcat/data/new_fingerprints/lm/hindi.lm400
-rw-r--r--libtextcat/data/new_fingerprints/lm/hungarian.lm400
-rw-r--r--libtextcat/data/new_fingerprints/lm/icelandic.lm400
-rw-r--r--libtextcat/data/new_fingerprints/lm/indonesian.lm400
-rw-r--r--libtextcat/data/new_fingerprints/lm/irish_gaelic.lm400
-rw-r--r--libtextcat/data/new_fingerprints/lm/italian.lm400
-rw-r--r--libtextcat/data/new_fingerprints/lm/japanese.lm400
-rw-r--r--libtextcat/data/new_fingerprints/lm/korean.lm400
-rw-r--r--libtextcat/data/new_fingerprints/lm/latin.lm400
-rw-r--r--libtextcat/data/new_fingerprints/lm/latvian.lm400
-rw-r--r--libtextcat/data/new_fingerprints/lm/lithuanian.lm400
-rw-r--r--libtextcat/data/new_fingerprints/lm/luxembourgish.lm400
-rw-r--r--libtextcat/data/new_fingerprints/lm/malay.lm400
-rw-r--r--libtextcat/data/new_fingerprints/lm/manx_gaelic.lm400
-rw-r--r--libtextcat/data/new_fingerprints/lm/marathi.lm400
-rw-r--r--libtextcat/data/new_fingerprints/lm/middle_frisian.lm400
-rw-r--r--libtextcat/data/new_fingerprints/lm/mingo.lm400
-rw-r--r--libtextcat/data/new_fingerprints/lm/mongolian_cyrillic.lm363
-rw-r--r--libtextcat/data/new_fingerprints/lm/nepali.lm400
-rw-r--r--libtextcat/data/new_fingerprints/lm/norwegian.lm400
-rw-r--r--libtextcat/data/new_fingerprints/lm/persian.lm400
-rw-r--r--libtextcat/data/new_fingerprints/lm/polish.lm400
-rw-r--r--libtextcat/data/new_fingerprints/lm/portuguese.lm400
-rw-r--r--libtextcat/data/new_fingerprints/lm/quechua.lm400
-rw-r--r--libtextcat/data/new_fingerprints/lm/romanian.lm400
-rw-r--r--libtextcat/data/new_fingerprints/lm/romansh.lm400
-rw-r--r--libtextcat/data/new_fingerprints/lm/russian.lm400
-rw-r--r--libtextcat/data/new_fingerprints/lm/sanskrit.lm400
-rw-r--r--libtextcat/data/new_fingerprints/lm/scots.lm400
-rw-r--r--libtextcat/data/new_fingerprints/lm/scots_gaelic.lm400
-rw-r--r--libtextcat/data/new_fingerprints/lm/serbian_ascii.lm400
-rw-r--r--libtextcat/data/new_fingerprints/lm/slovak_ascii.lm400
-rw-r--r--libtextcat/data/new_fingerprints/lm/slovenian.lm400
-rw-r--r--libtextcat/data/new_fingerprints/lm/spanish.lm400
-rw-r--r--libtextcat/data/new_fingerprints/lm/swahili.lm400
-rw-r--r--libtextcat/data/new_fingerprints/lm/swedish.lm400
-rw-r--r--libtextcat/data/new_fingerprints/lm/tagalog.lm400
-rw-r--r--libtextcat/data/new_fingerprints/lm/tamil.lm400
-rw-r--r--libtextcat/data/new_fingerprints/lm/thai.lm400
-rw-r--r--libtextcat/data/new_fingerprints/lm/turkish.lm400
-rw-r--r--libtextcat/data/new_fingerprints/lm/ukrainian.lm400
-rw-r--r--libtextcat/data/new_fingerprints/lm/vietnamese.lm400
-rw-r--r--libtextcat/data/new_fingerprints/lm/welsh.lm400
-rw-r--r--libtextcat/data/new_fingerprints/lm/yiddish_utf.lm400
-rw-r--r--libtextcat/data/new_fingerprints/lm/zulu.lm400
-rw-r--r--libtextcat/libtextcat-2.2.patch4078
-rw-r--r--libtextcat/makefile.mk85
-rw-r--r--libtextcat/prj/build.lst3
-rw-r--r--libtextcat/prj/d.lst12
-rw-r--r--libwpd/libwpd-0.8.8.diff908
-rw-r--r--libwpd/makefile.mk55
-rw-r--r--libwpd/prj/build.lst3
-rw-r--r--libwpd/prj/d.lst12
-rw-r--r--libxml2/libxml2-configure.patch118
-rw-r--r--libxml2/libxml2-global-symbols.patch59
-rw-r--r--libxml2/libxml2-gnome599717.patch20
-rw-r--r--libxml2/libxml2-mingw.patch48
-rw-r--r--libxml2/makefile.mk140
-rw-r--r--libxml2/prj/build.lst3
-rw-r--r--libxml2/prj/d.lst9
-rw-r--r--libxmlsec/makefile.mk196
-rw-r--r--libxmlsec/prj/build.lst3
-rw-r--r--libxmlsec/prj/d.lst9
-rw-r--r--libxmlsec/readme.txt32
-rw-r--r--libxmlsec/xmlsec1-configure-libxml-libxslt.patch40
-rw-r--r--libxmlsec/xmlsec1-configure.patch747
-rw-r--r--libxmlsec/xmlsec1-customkeymanage.patch6065
-rw-r--r--libxmlsec/xmlsec1-mingw-keymgr-mscrypto.patch62
-rw-r--r--libxmlsec/xmlsec1-mingw32.patch257
-rw-r--r--libxmlsec/xmlsec1-noverify.patch59
-rw-r--r--libxmlsec/xmlsec1-nssdisablecallbacks.patch36
-rw-r--r--libxmlsec/xmlsec1-nssmangleciphers.patch1134
-rw-r--r--libxmlsec/xmlsec1-olderlibxml2.patch23
-rw-r--r--libxmlsec/xmlsec1-update-config-sub-and-guess.patch2314
-rw-r--r--libxslt/libxslt-configure.patch79
-rw-r--r--libxslt/libxslt-internal-symbols.patch66
-rw-r--r--libxslt/libxslt-mingw.patch36
-rw-r--r--libxslt/libxslt-win_manifest.patch11
-rw-r--r--libxslt/libxsltversion.mk33
-rw-r--r--libxslt/makefile.mk154
-rw-r--r--libxslt/prj/build.lst3
-rw-r--r--libxslt/prj/d.lst11
-rw-r--r--linguistic/inc/hyphdta.hxx146
-rw-r--r--linguistic/inc/iprcache.hxx131
-rw-r--r--linguistic/inc/lngprophelp.hxx288
-rw-r--r--linguistic/inc/lngprops.hxx62
-rw-r--r--linguistic/inc/makefile.mk47
-rw-r--r--linguistic/inc/misc.hxx269
-rw-r--r--linguistic/inc/pch/precompiled_linguistic.cxx29
-rw-r--r--linguistic/inc/pch/precompiled_linguistic.hxx32
-rw-r--r--linguistic/inc/spelldta.hxx134
-rw-r--r--linguistic/inc/thesdta.hxx84
-rw-r--r--linguistic/prj/build.lst6
-rw-r--r--linguistic/prj/d.lst10
-rw-r--r--linguistic/qa/complex/linguistic/HangulHanjaConversion.java345
-rw-r--r--linguistic/qa/complex/linguistic/makefile.mk73
-rw-r--r--linguistic/qa/complex/linguistic/testdocuments/hangulhanja.sxcbin0 -> 6366 bytes
-rw-r--r--linguistic/qa/unoapi/Test.java51
-rw-r--r--linguistic/qa/unoapi/knownissues.xcl9
-rw-r--r--linguistic/qa/unoapi/lng.sce3
-rw-r--r--linguistic/qa/unoapi/makefile.mk48
-rw-r--r--linguistic/source/convdic.cxx744
-rw-r--r--linguistic/source/convdic.hxx179
-rw-r--r--linguistic/source/convdiclist.cxx741
-rw-r--r--linguistic/source/convdiclist.hxx122
-rw-r--r--linguistic/source/convdicxml.cxx462
-rw-r--r--linguistic/source/convdicxml.hxx134
-rw-r--r--linguistic/source/defs.hxx136
-rwxr-xr-xlinguistic/source/dicimp.cxx1207
-rw-r--r--linguistic/source/dicimp.hxx238
-rw-r--r--linguistic/source/dlistimp.cxx969
-rw-r--r--linguistic/source/dlistimp.hxx151
-rw-r--r--linguistic/source/gciterator.cxx1359
-rw-r--r--linguistic/source/gciterator.hxx209
-rw-r--r--linguistic/source/grammarchecker.cxx326
-rw-r--r--linguistic/source/grammarchecker.hxx108
-rw-r--r--linguistic/source/hhconvdic.cxx169
-rw-r--r--linguistic/source/hhconvdic.hxx78
-rw-r--r--linguistic/source/hyphdsp.cxx736
-rw-r--r--linguistic/source/hyphdsp.hxx172
-rw-r--r--linguistic/source/hyphdta.cxx189
-rw-r--r--linguistic/source/iprcache.cxx284
-rw-r--r--linguistic/source/lngopt.cxx711
-rw-r--r--linguistic/source/lngopt.hxx186
-rw-r--r--linguistic/source/lngprophelp.cxx717
-rw-r--r--linguistic/source/lngreg.cxx198
-rw-r--r--linguistic/source/lngsvcmgr.cxx2042
-rw-r--r--linguistic/source/lngsvcmgr.hxx199
-rw-r--r--linguistic/source/makefile.mk111
-rw-r--r--linguistic/source/misc.cxx1009
-rw-r--r--linguistic/source/misc2.cxx300
-rw-r--r--linguistic/source/spelldsp.cxx871
-rw-r--r--linguistic/source/spelldsp.hxx163
-rw-r--r--linguistic/source/spelldta.cxx366
-rw-r--r--linguistic/source/thesdsp.cxx282
-rw-r--r--linguistic/source/thesdsp.hxx129
-rw-r--r--linguistic/source/thesdta.cxx83
-rw-r--r--linguistic/workben/exports.dxp3
-rw-r--r--linguistic/workben/makefile.mk107
-rw-r--r--linguistic/workben/sprophelp.cxx372
-rw-r--r--linguistic/workben/sprophelp.hxx172
-rw-r--r--linguistic/workben/sreg.cxx85
-rw-r--r--linguistic/workben/sspellimp.cxx512
-rw-r--r--linguistic/workben/sspellimp.hxx177
-rw-r--r--linguistic/xml/linguistic.xml51
-rw-r--r--lpsolve/lp_solve_5.5-windows.patch40
-rw-r--r--lpsolve/lp_solve_5.5.patch94
-rw-r--r--lpsolve/makefile.mk93
-rw-r--r--lpsolve/prj/build.lst3
-rw-r--r--lpsolve/prj/d.lst9
-rw-r--r--lucene/lucene.patch12
-rw-r--r--lucene/makefile.mk69
-rw-r--r--lucene/prj/build.lst3
-rw-r--r--lucene/prj/d.lst3
-rw-r--r--lucene/version.mk27
-rw-r--r--makefile.rc99
-rw-r--r--mdds/makefile.mk66
-rw-r--r--mdds/prj/build.lst3
-rw-r--r--mdds/prj/d.lst5
-rw-r--r--migrationanalysis/Read Me.odtbin0 -> 15137 bytes
-rw-r--r--migrationanalysis/no_localization1
-rw-r--r--migrationanalysis/prj/build.lst7
-rw-r--r--migrationanalysis/prj/d.lst1
-rw-r--r--migrationanalysis/src/driver_docs/CreateDriverDocs.wsf221
-rw-r--r--migrationanalysis/src/driver_docs/DocAnalysisRunMacro.vbs438
-rw-r--r--migrationanalysis/src/driver_docs/PAW/_OOoDocAnalysisExcelDriver.xlsbin0 -> 696832 bytes
-rw-r--r--migrationanalysis/src/driver_docs/PAW/_OOoDocAnalysisPPTDriver.pptbin0 -> 284672 bytes
-rw-r--r--migrationanalysis/src/driver_docs/PAW/_OOoDocAnalysisWordDriver.docbin0 -> 664064 bytes
-rw-r--r--migrationanalysis/src/driver_docs/allstrings.ulf2371
-rw-r--r--migrationanalysis/src/driver_docs/makefile.mk127
-rw-r--r--migrationanalysis/src/driver_docs/sources/AnalysisDriver.bas3646
-rw-r--r--migrationanalysis/src/driver_docs/sources/CollectedFiles.cls378
-rw-r--r--migrationanalysis/src/driver_docs/sources/CommonMigrationAnalyser.bas1119
-rw-r--r--migrationanalysis/src/driver_docs/sources/CommonPreparation.bas226
-rw-r--r--migrationanalysis/src/driver_docs/sources/DocumentAnalysis.cls342
-rw-r--r--migrationanalysis/src/driver_docs/sources/FileTypeAssociation.cls56
-rw-r--r--migrationanalysis/src/driver_docs/sources/IssueInfo.cls206
-rw-r--r--migrationanalysis/src/driver_docs/sources/LocalizeResults.bas308
-rw-r--r--migrationanalysis/src/driver_docs/sources/PrepareInfo.cls42
-rw-r--r--migrationanalysis/src/driver_docs/sources/StringDataManager.cls131
-rw-r--r--migrationanalysis/src/driver_docs/sources/Stripped_OOoDocAnalysisExcelDriver.xlsbin0 -> 31232 bytes
-rw-r--r--migrationanalysis/src/driver_docs/sources/Stripped_OOoDocAnalysisPPTDriver.pptbin0 -> 64512 bytes
-rw-r--r--migrationanalysis/src/driver_docs/sources/Stripped_OOoDocAnalysisWordDriver.docbin0 -> 38912 bytes
-rw-r--r--migrationanalysis/src/driver_docs/sources/common_res.bas284
-rw-r--r--migrationanalysis/src/driver_docs/sources/excel/ApplicationSpecific.bas164
-rw-r--r--migrationanalysis/src/driver_docs/sources/excel/MigrationAnalyser.cls2319
-rw-r--r--migrationanalysis/src/driver_docs/sources/excel/Preparation.bas51
-rw-r--r--migrationanalysis/src/driver_docs/sources/excel/SetTextBoxFont.bas50
-rw-r--r--migrationanalysis/src/driver_docs/sources/excel/ThisWorkbook.cls53
-rw-r--r--migrationanalysis/src/driver_docs/sources/excel/excel_res.bas375
-rw-r--r--migrationanalysis/src/driver_docs/sources/powerpoint/ApplicationSpecific.bas176
-rw-r--r--migrationanalysis/src/driver_docs/sources/powerpoint/Loader.bas62
-rw-r--r--migrationanalysis/src/driver_docs/sources/powerpoint/MigrationAnalyser.cls824
-rw-r--r--migrationanalysis/src/driver_docs/sources/powerpoint/Preparation.bas41
-rw-r--r--migrationanalysis/src/driver_docs/sources/powerpoint/Slide1.cls54
-rw-r--r--migrationanalysis/src/driver_docs/sources/powerpoint/powerpoint_res.bas107
-rw-r--r--migrationanalysis/src/driver_docs/sources/results_res.bas613
-rw-r--r--migrationanalysis/src/driver_docs/sources/word/ApplicationSpecific.bas156
-rw-r--r--migrationanalysis/src/driver_docs/sources/word/MigrationAnalyser.cls1522
-rw-r--r--migrationanalysis/src/driver_docs/sources/word/Preparation.bas151
-rw-r--r--migrationanalysis/src/driver_docs/sources/word/ThisDocument.cls52
-rw-r--r--migrationanalysis/src/driver_docs/sources/word/word_res.bas289
-rw-r--r--migrationanalysis/src/driver_docs/ulf2dat.pl153
-rw-r--r--migrationanalysis/src/exe/LaunchDrivers.exebin0 -> 28672 bytes
-rw-r--r--migrationanalysis/src/exe/ProAnalysisWizard.exebin0 -> 843776 bytes
-rw-r--r--migrationanalysis/src/msokill/StdAfx.cpp35
-rw-r--r--migrationanalysis/src/msokill/StdAfx.h54
-rw-r--r--migrationanalysis/src/msokill/makefile.mk83
-rw-r--r--migrationanalysis/src/msokill/msokill.cpp259
-rw-r--r--migrationanalysis/src/resources/analysis.dtd52
-rw-r--r--migrationanalysis/src/resources/makefile.mk59
-rw-r--r--migrationanalysis/src/resources/results_paw.xltbin0 -> 140800 bytes
-rw-r--r--migrationanalysis/src/wizard/Analyse.bas589
-rw-r--r--migrationanalysis/src/wizard/CollectedFiles.cls530
-rw-r--r--migrationanalysis/src/wizard/DocAnalysisWizard.exe.manifest22
-rw-r--r--migrationanalysis/src/wizard/Get Directory Dialog.bas143
-rw-r--r--migrationanalysis/src/wizard/IniSupport.bas269
-rw-r--r--migrationanalysis/src/wizard/LaunchDrivers.vbp42
-rw-r--r--migrationanalysis/src/wizard/LaunchDrivers.vbw1
-rw-r--r--migrationanalysis/src/wizard/OOo3_Analysis.icobin0 -> 295606 bytes
-rw-r--r--migrationanalysis/src/wizard/OOo_AnalysisBitmap.pngbin0 -> 8625 bytes
-rw-r--r--migrationanalysis/src/wizard/Office10Issues.bas361
-rw-r--r--migrationanalysis/src/wizard/ProAnalysisWizard.vbp65
-rw-r--r--migrationanalysis/src/wizard/RunServer.bas199
-rw-r--r--migrationanalysis/src/wizard/ScanFolders.frm157
-rw-r--r--migrationanalysis/src/wizard/SearchDocs.frm124
-rw-r--r--migrationanalysis/src/wizard/Terminate.frm81
-rw-r--r--migrationanalysis/src/wizard/Utilities.bas552
-rw-r--r--migrationanalysis/src/wizard/Wizard.DCAbin0 -> 3927 bytes
-rw-r--r--migrationanalysis/src/wizard/Wizard.Dsr79
-rw-r--r--migrationanalysis/src/wizard/Wizard.FRXbin0 -> 416643 bytes
-rw-r--r--migrationanalysis/src/wizard/Wizard.bas651
-rw-r--r--migrationanalysis/src/wizard/Wizard.frm3453
-rw-r--r--migrationanalysis/src/wizard/makefile.mk116
-rw-r--r--migrationanalysis/src/wizard/rcfooter.txt1
-rw-r--r--migrationanalysis/src/wizard/rcheader.txt17
-rw-r--r--migrationanalysis/src/wizard/rctmpl.txt126
-rw-r--r--migrationanalysis/src/wizard/res_defines.h150
-rw-r--r--migrationanalysis/src/wizard/wizard.ulf352
-rw-r--r--migrationanalysis/util/delzip1
-rw-r--r--migrationanalysis/util/makefile.mk53
-rw-r--r--more_fonts/fonts/fc_local.conf24
-rw-r--r--more_fonts/fonts/ttf_dejavu/makefile.mk61
-rw-r--r--more_fonts/fonts/ttf_gentium/makefile.mk61
-rw-r--r--more_fonts/fonts/ttf_liberation/makefile.mk60
-rw-r--r--more_fonts/prj/build.lst5
-rw-r--r--more_fonts/prj/d.lst10
-rwxr-xr-xmoz/README4
-rw-r--r--moz/extractfiles.mk459
-rw-r--r--moz/makefile.mk424
-rw-r--r--moz/patches/arm_build_fix.patch189
-rw-r--r--moz/patches/consecutive_ldap_queries.patch13
-rw-r--r--moz/patches/cygwin_paths_in_ldap_sdk.patch12
-rw-r--r--moz/patches/dtoa.patch237
-rwxr-xr-xmoz/patches/embed_manifest.patch142
-rw-r--r--moz/patches/index.txt65
-rw-r--r--moz/patches/link_fontconfig.patch11
-rw-r--r--moz/patches/no_core_abspath_in_nss.patch52
-rw-r--r--moz/patches/respect_disable_pango.patch54
-rw-r--r--moz/patches/wchart_on_msvc8.patch20
-rw-r--r--moz/prj/build.lst4
-rw-r--r--moz/prj/d.lst240
-rw-r--r--moz/seamonkey-source-1.1.14.patch6346
-rw-r--r--moz/zipped/makefile.mk213
-rw-r--r--mysqlc/prj/build.lst3
-rw-r--r--mysqlc/prj/d.lst4
-rw-r--r--mysqlc/source/DataAccess.xcu19
-rw-r--r--mysqlc/source/README65
-rw-r--r--mysqlc/source/delzip0
-rwxr-xr-xmysqlc/source/description.xml29
-rw-r--r--mysqlc/source/description/description_de.txt1
-rwxr-xr-xmysqlc/source/description/description_en-US.txt1
-rw-r--r--mysqlc/source/description/description_es.txt1
-rw-r--r--mysqlc/source/description/description_fr.txt1
-rw-r--r--mysqlc/source/description/description_hu.txt1
-rw-r--r--mysqlc/source/description/description_it.txt1
-rw-r--r--mysqlc/source/description/description_ja.txt1
-rw-r--r--mysqlc/source/description/description_ko.txt1
-rw-r--r--mysqlc/source/description/description_nl.txt1
-rw-r--r--mysqlc/source/description/description_pl.txt1
-rw-r--r--mysqlc/source/description/description_pt-BR.txt1
-rw-r--r--mysqlc/source/description/description_pt.txt1
-rw-r--r--mysqlc/source/description/description_ru.txt1
-rw-r--r--mysqlc/source/description/description_sv.txt1
-rw-r--r--mysqlc/source/description/description_zh-CN.txt1
-rw-r--r--mysqlc/source/description/description_zh-TW.txt1
-rw-r--r--mysqlc/source/exports.dxp3
-rwxr-xr-xmysqlc/source/makefile.mk335
-rw-r--r--mysqlc/source/manifest.xml8
-rw-r--r--mysqlc/source/mysqlc.map8
-rw-r--r--mysqlc/source/mysqlc.xml81
-rw-r--r--mysqlc/source/mysqlc_connection.cxx793
-rw-r--r--mysqlc/source/mysqlc_connection.hxx252
-rw-r--r--mysqlc/source/mysqlc_databasemetadata.cxx2217
-rw-r--r--mysqlc/source/mysqlc_databasemetadata.hxx245
-rw-r--r--mysqlc/source/mysqlc_driver.cxx370
-rw-r--r--mysqlc/source/mysqlc_driver.hxx120
-rw-r--r--mysqlc/source/mysqlc_general.cxx176
-rw-r--r--mysqlc/source/mysqlc_general.hxx68
-rw-r--r--mysqlc/source/mysqlc_preparedstatement.cxx944
-rw-r--r--mysqlc/source/mysqlc_preparedstatement.hxx196
-rw-r--r--mysqlc/source/mysqlc_propertyids.cxx210
-rw-r--r--mysqlc/source/mysqlc_propertyids.hxx136
-rw-r--r--mysqlc/source/mysqlc_resultset.cxx1526
-rw-r--r--mysqlc/source/mysqlc_resultset.hxx337
-rw-r--r--mysqlc/source/mysqlc_resultsetmetadata.cxx468
-rw-r--r--mysqlc/source/mysqlc_resultsetmetadata.hxx123
-rw-r--r--mysqlc/source/mysqlc_services.cxx183
-rw-r--r--mysqlc/source/mysqlc_statement.cxx531
-rw-r--r--mysqlc/source/mysqlc_statement.hxx189
-rw-r--r--mysqlc/source/mysqlc_subcomponent.hxx255
-rw-r--r--mysqlc/source/mysqlc_types.cxx792
-rw-r--r--mysqlc/source/mysqlc_types.hxx56
-rw-r--r--mysqlc/source/registry/data/org/openoffice/Office/DataAccess/Drivers.xcu103
-rw-r--r--mysqlc/version.mk38
-rw-r--r--mysqlcppconn/cppconn_config.pmk33
-rw-r--r--mysqlcppconn/makefile.mk91
-rw-r--r--mysqlcppconn/mysql-connector-cpp.patch385
-rw-r--r--mysqlcppconn/mysql_config.pmk49
-rw-r--r--mysqlcppconn/patches/default_to_protocol_tcp.patch12
-rw-r--r--mysqlcppconn/prj/build.lst3
-rw-r--r--mysqlcppconn/prj/d.lst15
-rw-r--r--mythes/makefile.mk114
-rw-r--r--mythes/mythes-1.2.0-makefile-mk.diff94
-rw-r--r--mythes/mythes-1.2.0-vanilla-th-gen-idx.patch97
-rw-r--r--mythes/prj/build.lst3
-rw-r--r--mythes/prj/d.lst7
-rw-r--r--neon/makefile.mk91
-rw-r--r--neon/neon.patch927
-rw-r--r--neon/neon_exports_unix.patch291
-rw-r--r--neon/neon_exports_win.patch297
-rwxr-xr-xneon/prj/build.lst3
-rw-r--r--neon/prj/d.lst8
-rw-r--r--neon/version.mk37
-rw-r--r--np_sdk/mozsrc/LEGAL43
-rw-r--r--np_sdk/mozsrc/LICENSE567
-rw-r--r--np_sdk/mozsrc/README2
-rw-r--r--np_sdk/mozsrc/jri.h689
-rw-r--r--np_sdk/mozsrc/jri_md.h572
-rw-r--r--np_sdk/mozsrc/jritypes.h242
-rw-r--r--np_sdk/mozsrc/makefile.mk59
-rw-r--r--np_sdk/mozsrc/npapi.h610
-rw-r--r--np_sdk/mozsrc/npunix.c505
-rw-r--r--np_sdk/mozsrc/npupp.h1292
-rw-r--r--np_sdk/mozsrc/npwin.cpp369
-rw-r--r--np_sdk/prj/build.lst3
-rw-r--r--np_sdk/prj/d.lst7
-rw-r--r--nss/makefile.mk184
-rw-r--r--nss/nss.patch191
-rwxr-xr-xnss/nss.patch.mingw167
-rw-r--r--nss/nss_macosx.patch12
-rw-r--r--nss/prj/build.lst3
-rwxr-xr-xnss/prj/d.lst31
-rwxr-xr-xnss/readme.txt75
-rw-r--r--o3tl/inc/o3tl/cow_wrapper.hxx328
-rw-r--r--o3tl/inc/o3tl/heap_ptr.hxx311
-rw-r--r--o3tl/inc/o3tl/lazy_update.hxx271
-rw-r--r--o3tl/inc/o3tl/range.hxx189
-rw-r--r--o3tl/inc/o3tl/vector_pool.hxx132
-rw-r--r--o3tl/prj/build.lst5
-rw-r--r--o3tl/prj/d.lst2
-rw-r--r--o3tl/qa/cow_wrapper_clients.cxx180
-rw-r--r--o3tl/qa/cow_wrapper_clients.hxx128
-rw-r--r--o3tl/qa/export.map34
-rw-r--r--o3tl/qa/makefile.mk77
-rw-r--r--o3tl/qa/test-cow_wrapper.cxx127
-rw-r--r--o3tl/qa/test-heap_ptr.cxx165
-rw-r--r--o3tl/qa/test-range.cxx234
-rw-r--r--o3tl/qa/test-vector_pool.cxx69
-rw-r--r--odk/cfgWin.js981
-rwxr-xr-xodk/configure.pl795
-rw-r--r--odk/docs/common/ref/idl.css130
-rw-r--r--odk/docs/cpp/ref/cpp.css127
-rw-r--r--odk/docs/images/arrow-1.gifbin0 -> 98 bytes
-rw-r--r--odk/docs/images/arrow-2.gifbin0 -> 68 bytes
-rw-r--r--odk/docs/images/arrow-3.gifbin0 -> 98 bytes
-rw-r--r--odk/docs/images/bg_table.gifbin0 -> 42 bytes
-rw-r--r--odk/docs/images/bg_table.pngbin0 -> 128 bytes
-rwxr-xr-xodk/docs/images/bg_table2.gifbin0 -> 44 bytes
-rw-r--r--odk/docs/images/bg_table2.pngbin0 -> 128 bytes
-rwxr-xr-xodk/docs/images/bg_table3.gifbin0 -> 44 bytes
-rw-r--r--odk/docs/images/bg_table3.pngbin0 -> 128 bytes
-rw-r--r--odk/docs/images/bluball.gifbin0 -> 103 bytes
-rw-r--r--odk/docs/images/nada.gifbin0 -> 49 bytes
-rw-r--r--odk/docs/images/nav_down.pngbin0 -> 224 bytes
-rw-r--r--odk/docs/images/nav_home.pngbin0 -> 471 bytes
-rw-r--r--odk/docs/images/nav_left.pngbin0 -> 223 bytes
-rw-r--r--odk/docs/images/nav_right.pngbin0 -> 225 bytes
-rw-r--r--odk/docs/images/nav_up.pngbin0 -> 211 bytes
-rw-r--r--odk/docs/images/odk-footer-logo.gifbin0 -> 850 bytes
-rw-r--r--odk/docs/images/ooo-main-app_32.pngbin0 -> 2429 bytes
-rw-r--r--odk/docs/images/orc-main-app_32.pngbin0 -> 2496 bytes
-rw-r--r--odk/docs/images/sdk_head-1.pngbin0 -> 11767 bytes
-rw-r--r--odk/docs/images/sdk_head-2.pngbin0 -> 175 bytes
-rw-r--r--odk/docs/images/sdk_line-1.gifbin0 -> 43 bytes
-rw-r--r--odk/docs/images/sdk_line-2.gifbin0 -> 113 bytes
-rw-r--r--odk/docs/install.html420
-rw-r--r--odk/docs/notsupported.html4
-rw-r--r--odk/docs/sdk_styles.css130
-rw-r--r--odk/docs/tools.html1094
-rw-r--r--odk/examples/CLI/CSharp/Spreadsheet/GeneralTableSample.cs206
-rw-r--r--odk/examples/CLI/CSharp/Spreadsheet/Makefile79
-rw-r--r--odk/examples/CLI/CSharp/Spreadsheet/SpreadsheetDocHelper.cs344
-rw-r--r--odk/examples/CLI/CSharp/Spreadsheet/SpreadsheetSample.cs1478
-rw-r--r--odk/examples/CLI/CSharp/Spreadsheet/ViewSample.cs165
-rw-r--r--odk/examples/CLI/VB.NET/WriterDemo/Makefile61
-rw-r--r--odk/examples/CLI/VB.NET/WriterDemo/WriterDemo.vb242
-rw-r--r--odk/examples/CLI/makefile.mk72
-rw-r--r--odk/examples/DevelopersGuide/Accessibility/ConnectionTask.java208
-rw-r--r--odk/examples/DevelopersGuide/Accessibility/EventHandler.java447
-rw-r--r--odk/examples/DevelopersGuide/Accessibility/EventListenerProxy.java232
-rw-r--r--odk/examples/DevelopersGuide/Accessibility/GraphicalDisplay.java189
-rw-r--r--odk/examples/DevelopersGuide/Accessibility/IAccessibleObjectDisplay.java46
-rw-r--r--odk/examples/DevelopersGuide/Accessibility/Makefile113
-rw-r--r--odk/examples/DevelopersGuide/Accessibility/MessageArea.java133
-rw-r--r--odk/examples/DevelopersGuide/Accessibility/NameProvider.java290
-rw-r--r--odk/examples/DevelopersGuide/Accessibility/RegistrationThread.java156
-rw-r--r--odk/examples/DevelopersGuide/Accessibility/SSR.java171
-rw-r--r--odk/examples/DevelopersGuide/Accessibility/TextualDisplay.java230
-rw-r--r--odk/examples/DevelopersGuide/Accessibility/makefile.mk73
-rw-r--r--odk/examples/DevelopersGuide/BasicAndDialogs/CreatingDialogs/CreatingDialogs.odtbin0 -> 8654 bytes
-rw-r--r--odk/examples/DevelopersGuide/BasicAndDialogs/CreatingDialogs/Makefile139
-rw-r--r--odk/examples/DevelopersGuide/BasicAndDialogs/CreatingDialogs/SampleDialog.java275
-rw-r--r--odk/examples/DevelopersGuide/BasicAndDialogs/FirstStepsBasic.odtbin0 -> 18560 bytes
-rw-r--r--odk/examples/DevelopersGuide/BasicAndDialogs/ToolkitControls/Makefile126
-rw-r--r--odk/examples/DevelopersGuide/BasicAndDialogs/ToolkitControls/ToolkitControls.odtbin0 -> 7793 bytes
-rw-r--r--odk/examples/DevelopersGuide/BasicAndDialogs/ToolkitControls/ToolkitControls/FileDialog.xba73
-rw-r--r--odk/examples/DevelopersGuide/BasicAndDialogs/ToolkitControls/ToolkitControls/FileDialogDlg.xdl12
-rw-r--r--odk/examples/DevelopersGuide/BasicAndDialogs/ToolkitControls/ToolkitControls/MultiPage.xba286
-rw-r--r--odk/examples/DevelopersGuide/BasicAndDialogs/ToolkitControls/ToolkitControls/MultiPageDlg.xdl75
-rw-r--r--odk/examples/DevelopersGuide/BasicAndDialogs/ToolkitControls/ToolkitControls/ProgressBar.xba76
-rw-r--r--odk/examples/DevelopersGuide/BasicAndDialogs/ToolkitControls/ToolkitControls/ProgressBarDlg.xdl11
-rw-r--r--odk/examples/DevelopersGuide/BasicAndDialogs/ToolkitControls/ToolkitControls/ScrollBar.xba86
-rw-r--r--odk/examples/DevelopersGuide/BasicAndDialogs/ToolkitControls/ToolkitControls/ScrollBarDlg.xdl13
-rw-r--r--odk/examples/DevelopersGuide/BasicAndDialogs/ToolkitControls/ToolkitControls/dialog.xlb8
-rw-r--r--odk/examples/DevelopersGuide/BasicAndDialogs/ToolkitControls/ToolkitControls/script.xlb8
-rw-r--r--odk/examples/DevelopersGuide/BasicAndDialogs/makefile.mk84
-rw-r--r--odk/examples/DevelopersGuide/Charts/AddInChart.odsbin0 -> 18045 bytes
-rw-r--r--odk/examples/DevelopersGuide/Charts/CalcHelper.java412
-rw-r--r--odk/examples/DevelopersGuide/Charts/ChartHelper.java261
-rw-r--r--odk/examples/DevelopersGuide/Charts/ChartInCalc.java424
-rw-r--r--odk/examples/DevelopersGuide/Charts/ChartInDraw.java308
-rw-r--r--odk/examples/DevelopersGuide/Charts/ChartInWriter.java178
-rw-r--r--odk/examples/DevelopersGuide/Charts/Helper.java170
-rw-r--r--odk/examples/DevelopersGuide/Charts/JavaSampleChartAddIn.java476
-rw-r--r--odk/examples/DevelopersGuide/Charts/ListenAtCalcRangeInDraw.java211
-rw-r--r--odk/examples/DevelopersGuide/Charts/Makefile198
-rw-r--r--odk/examples/DevelopersGuide/Charts/SelectionChangeListener.java219
-rw-r--r--odk/examples/DevelopersGuide/Charts/bullet.gifbin0 -> 335 bytes
-rw-r--r--odk/examples/DevelopersGuide/Charts/makefile.mk75
-rw-r--r--odk/examples/DevelopersGuide/Components/Addons/JobsAddon/Addons.xcu81
-rw-r--r--odk/examples/DevelopersGuide/Components/Addons/JobsAddon/AsyncJob.java426
-rw-r--r--odk/examples/DevelopersGuide/Components/Addons/JobsAddon/Jobs.xcu27
-rw-r--r--odk/examples/DevelopersGuide/Components/Addons/JobsAddon/Makefile136
-rw-r--r--odk/examples/DevelopersGuide/Components/Addons/ProtocolHandlerAddon_cpp/Addons.xcu220
-rw-r--r--odk/examples/DevelopersGuide/Components/Addons/ProtocolHandlerAddon_cpp/Makefile148
-rw-r--r--odk/examples/DevelopersGuide/Components/Addons/ProtocolHandlerAddon_cpp/ProtocolHandler.xcu11
-rw-r--r--odk/examples/DevelopersGuide/Components/Addons/ProtocolHandlerAddon_cpp/addon.cxx250
-rw-r--r--odk/examples/DevelopersGuide/Components/Addons/ProtocolHandlerAddon_cpp/addon.hxx125
-rw-r--r--odk/examples/DevelopersGuide/Components/Addons/ProtocolHandlerAddon_cpp/component.cxx131
-rw-r--r--odk/examples/DevelopersGuide/Components/Addons/ProtocolHandlerAddon_java/Addons.xcu220
-rw-r--r--odk/examples/DevelopersGuide/Components/Addons/ProtocolHandlerAddon_java/Makefile138
-rw-r--r--odk/examples/DevelopersGuide/Components/Addons/ProtocolHandlerAddon_java/ProtocolHandler.xcu10
-rw-r--r--odk/examples/DevelopersGuide/Components/Addons/ProtocolHandlerAddon_java/ProtocolHandlerAddon.java283
-rw-r--r--odk/examples/DevelopersGuide/Components/CppComponent/Makefile220
-rw-r--r--odk/examples/DevelopersGuide/Components/CppComponent/SimpleComponent.odtbin0 -> 8841 bytes
-rw-r--r--odk/examples/DevelopersGuide/Components/CppComponent/TestCppComponent.cxx89
-rw-r--r--odk/examples/DevelopersGuide/Components/CppComponent/service1_impl.cxx309
-rw-r--r--odk/examples/DevelopersGuide/Components/CppComponent/service2_impl.cxx225
-rw-r--r--odk/examples/DevelopersGuide/Components/CppComponent/some.idl54
-rw-r--r--odk/examples/DevelopersGuide/Components/JavaComponent/Makefile204
-rw-r--r--odk/examples/DevelopersGuide/Components/JavaComponent/SomethingA.idl46
-rw-r--r--odk/examples/DevelopersGuide/Components/JavaComponent/SomethingB.idl46
-rw-r--r--odk/examples/DevelopersGuide/Components/JavaComponent/TestComponentA.java71
-rw-r--r--odk/examples/DevelopersGuide/Components/JavaComponent/TestComponentB.java100
-rw-r--r--odk/examples/DevelopersGuide/Components/JavaComponent/TestJavaComponent.java143
-rw-r--r--odk/examples/DevelopersGuide/Components/JavaComponent/TestServiceProvider.java71
-rw-r--r--odk/examples/DevelopersGuide/Components/JavaComponent/XSomethingA.idl48
-rw-r--r--odk/examples/DevelopersGuide/Components/JavaComponent/XSomethingB.idl48
-rw-r--r--odk/examples/DevelopersGuide/Components/SimpleLicense/LicenseTest.idl50
-rw-r--r--odk/examples/DevelopersGuide/Components/SimpleLicense/LicenseTest.java171
-rw-r--r--odk/examples/DevelopersGuide/Components/SimpleLicense/Makefile170
-rw-r--r--odk/examples/DevelopersGuide/Components/SimpleLicense/description.xml12
-rw-r--r--odk/examples/DevelopersGuide/Components/SimpleLicense/registration/license_de.txt1
-rw-r--r--odk/examples/DevelopersGuide/Components/SimpleLicense/registration/license_en_US.txt1
-rw-r--r--odk/examples/DevelopersGuide/Components/Thumbs/Makefile81
-rw-r--r--odk/examples/DevelopersGuide/Components/Thumbs/org/openoffice/comp/test/ImageShrink.java158
-rw-r--r--odk/examples/DevelopersGuide/Components/Thumbs/org/openoffice/comp/test/Makefile128
-rw-r--r--odk/examples/DevelopersGuide/Components/Thumbs/org/openoffice/comp/test/Thumbs.java79
-rw-r--r--odk/examples/DevelopersGuide/Components/Thumbs/org/openoffice/test/ImageShrink.idl46
-rw-r--r--odk/examples/DevelopersGuide/Components/Thumbs/org/openoffice/test/Makefile73
-rw-r--r--odk/examples/DevelopersGuide/Components/Thumbs/org/openoffice/test/XImageShrink.idl53
-rw-r--r--odk/examples/DevelopersGuide/Components/Thumbs/org/openoffice/test/XImageShrinkFilter.idl50
-rw-r--r--odk/examples/DevelopersGuide/Components/Thumbs/thumbs.mk27
-rw-r--r--odk/examples/DevelopersGuide/Components/dialogcomponent/DialogComponent.java324
-rw-r--r--odk/examples/DevelopersGuide/Components/dialogcomponent/DialogComponent.odtbin0 -> 11902 bytes
-rw-r--r--odk/examples/DevelopersGuide/Components/dialogcomponent/Makefile177
-rw-r--r--odk/examples/DevelopersGuide/Components/dialogcomponent/TestDialogHandler.idl47
-rw-r--r--odk/examples/DevelopersGuide/Components/dialogcomponent/XTestDialogHandler.idl53
-rw-r--r--odk/examples/DevelopersGuide/Components/makefile.mk123
-rw-r--r--odk/examples/DevelopersGuide/Config/ConfigExamples.java1202
-rw-r--r--odk/examples/DevelopersGuide/Config/Makefile99
-rw-r--r--odk/examples/DevelopersGuide/Config/makefile.mk64
-rw-r--r--odk/examples/DevelopersGuide/Database/CodeSamples.java356
-rw-r--r--odk/examples/DevelopersGuide/Database/DriverSkeleton/How_to_write_my_own_driver.txt25
-rw-r--r--odk/examples/DevelopersGuide/Database/DriverSkeleton/Makefile150
-rw-r--r--odk/examples/DevelopersGuide/Database/DriverSkeleton/OSubComponent.hxx252
-rw-r--r--odk/examples/DevelopersGuide/Database/DriverSkeleton/OTypeInfo.hxx98
-rw-r--r--odk/examples/DevelopersGuide/Database/DriverSkeleton/SConnection.cxx402
-rw-r--r--odk/examples/DevelopersGuide/Database/DriverSkeleton/SConnection.hxx155
-rw-r--r--odk/examples/DevelopersGuide/Database/DriverSkeleton/SDatabaseMetaData.cxx887
-rw-r--r--odk/examples/DevelopersGuide/Database/DriverSkeleton/SDatabaseMetaData.hxx218
-rw-r--r--odk/examples/DevelopersGuide/Database/DriverSkeleton/SDriver.cxx210
-rw-r--r--odk/examples/DevelopersGuide/Database/DriverSkeleton/SDriver.hxx85
-rw-r--r--odk/examples/DevelopersGuide/Database/DriverSkeleton/SPreparedStatement.cxx388
-rw-r--r--odk/examples/DevelopersGuide/Database/DriverSkeleton/SPreparedStatement.hxx146
-rw-r--r--odk/examples/DevelopersGuide/Database/DriverSkeleton/SResultSet.cxx873
-rw-r--r--odk/examples/DevelopersGuide/Database/DriverSkeleton/SResultSet.hxx218
-rw-r--r--odk/examples/DevelopersGuide/Database/DriverSkeleton/SResultSetMetaData.cxx169
-rw-r--r--odk/examples/DevelopersGuide/Database/DriverSkeleton/SResultSetMetaData.hxx90
-rw-r--r--odk/examples/DevelopersGuide/Database/DriverSkeleton/SServices.cxx180
-rw-r--r--odk/examples/DevelopersGuide/Database/DriverSkeleton/SStatement.cxx368
-rw-r--r--odk/examples/DevelopersGuide/Database/DriverSkeleton/SStatement.hxx175
-rw-r--r--odk/examples/DevelopersGuide/Database/DriverSkeleton/propertyids.cxx182
-rw-r--r--odk/examples/DevelopersGuide/Database/DriverSkeleton/propertyids.hxx161
-rw-r--r--odk/examples/DevelopersGuide/Database/Makefile134
-rw-r--r--odk/examples/DevelopersGuide/Database/OpenQuery.java162
-rw-r--r--odk/examples/DevelopersGuide/Database/RowSet.java241
-rw-r--r--odk/examples/DevelopersGuide/Database/RowSetEventListener.java77
-rw-r--r--odk/examples/DevelopersGuide/Database/Sales.java250
-rw-r--r--odk/examples/DevelopersGuide/Database/SalesMan.java145
-rw-r--r--odk/examples/DevelopersGuide/Database/makefile.mk95
-rw-r--r--odk/examples/DevelopersGuide/Database/sdbcx.java420
-rw-r--r--odk/examples/DevelopersGuide/Drawing/ChangeOrderDemo.java115
-rw-r--r--odk/examples/DevelopersGuide/Drawing/ControlAndSelectDemo.java143
-rw-r--r--odk/examples/DevelopersGuide/Drawing/CustomShowDemo.java173
-rw-r--r--odk/examples/DevelopersGuide/Drawing/DrawViewDemo.java141
-rw-r--r--odk/examples/DevelopersGuide/Drawing/DrawingDemo.java426
-rw-r--r--odk/examples/DevelopersGuide/Drawing/FillAndLineStyleDemo.java133
-rw-r--r--odk/examples/DevelopersGuide/Drawing/GluePointDemo.java188
-rw-r--r--odk/examples/DevelopersGuide/Drawing/GraphicExportDemo.java152
-rw-r--r--odk/examples/DevelopersGuide/Drawing/Helper.java83
-rw-r--r--odk/examples/DevelopersGuide/Drawing/LayerDemo.java156
-rw-r--r--odk/examples/DevelopersGuide/Drawing/Makefile175
-rw-r--r--odk/examples/DevelopersGuide/Drawing/ObjectTransformationDemo.java133
-rw-r--r--odk/examples/DevelopersGuide/Drawing/Organigram.java191
-rw-r--r--odk/examples/DevelopersGuide/Drawing/PageHelper.java223
-rw-r--r--odk/examples/DevelopersGuide/Drawing/PresentationDemo.java239
-rw-r--r--odk/examples/DevelopersGuide/Drawing/ShapeHelper.java145
-rw-r--r--odk/examples/DevelopersGuide/Drawing/SimplePresentation.odpbin0 -> 74753 bytes
-rw-r--r--odk/examples/DevelopersGuide/Drawing/StyleDemo.java174
-rw-r--r--odk/examples/DevelopersGuide/Drawing/TextDemo.java155
-rw-r--r--odk/examples/DevelopersGuide/Drawing/makefile.mk81
-rw-r--r--odk/examples/DevelopersGuide/Extensions/DialogWithHelp/Addons.xcu58
-rw-r--r--odk/examples/DevelopersGuide/Extensions/DialogWithHelp/DialogWithHelp/Dialog1.xdl10
-rw-r--r--odk/examples/DevelopersGuide/Extensions/DialogWithHelp/DialogWithHelp/Module1.xba16
-rw-r--r--odk/examples/DevelopersGuide/Extensions/DialogWithHelp/DialogWithHelp/dialog.xlb5
-rw-r--r--odk/examples/DevelopersGuide/Extensions/DialogWithHelp/DialogWithHelp/script.xlb5
-rw-r--r--odk/examples/DevelopersGuide/Extensions/DialogWithHelp/META-INF/manifest.xml6
-rw-r--r--odk/examples/DevelopersGuide/Extensions/DialogWithHelp/Makefile118
-rw-r--r--odk/examples/DevelopersGuide/Extensions/DialogWithHelp/description.xml8
-rw-r--r--odk/examples/DevelopersGuide/Extensions/DialogWithHelp/help/de/com.foocorp.foo-ext/page1.xhp73
-rw-r--r--odk/examples/DevelopersGuide/Extensions/DialogWithHelp/help/de/com.foocorp.foo-ext/page2.xhp27
-rw-r--r--odk/examples/DevelopersGuide/Extensions/DialogWithHelp/help/de/com.foocorp.foo-ext/subfolder/anotherpage.xhp100
-rw-r--r--odk/examples/DevelopersGuide/Extensions/DialogWithHelp/help/en/com.foocorp.foo-ext/page1.xhp73
-rw-r--r--odk/examples/DevelopersGuide/Extensions/DialogWithHelp/help/en/com.foocorp.foo-ext/page2.xhp26
-rw-r--r--odk/examples/DevelopersGuide/Extensions/DialogWithHelp/help/en/com.foocorp.foo-ext/subfolder/anotherpage.xhp100
-rw-r--r--odk/examples/DevelopersGuide/FirstSteps/FirstConnection.java58
-rw-r--r--odk/examples/DevelopersGuide/FirstSteps/FirstLoadComponent.java329
-rw-r--r--odk/examples/DevelopersGuide/FirstSteps/FirstUnoContact.java58
-rw-r--r--odk/examples/DevelopersGuide/FirstSteps/HelloTextTableShape.java462
-rw-r--r--odk/examples/DevelopersGuide/FirstSteps/Makefile101
-rw-r--r--odk/examples/DevelopersGuide/FirstSteps/build_FirstUnoContact.xml64
-rw-r--r--odk/examples/DevelopersGuide/FirstSteps/makefile.mk67
-rw-r--r--odk/examples/DevelopersGuide/Forms/BooleanValidator.java85
-rw-r--r--odk/examples/DevelopersGuide/Forms/ButtonOperator.java223
-rw-r--r--odk/examples/DevelopersGuide/Forms/ComponentTreeTraversal.java91
-rw-r--r--odk/examples/DevelopersGuide/Forms/ControlLock.java219
-rw-r--r--odk/examples/DevelopersGuide/Forms/ControlValidation.java100
-rw-r--r--odk/examples/DevelopersGuide/Forms/ControlValidator.java60
-rw-r--r--odk/examples/DevelopersGuide/Forms/DataAwareness.java932
-rw-r--r--odk/examples/DevelopersGuide/Forms/DateValidator.java102
-rw-r--r--odk/examples/DevelopersGuide/Forms/DocumentBasedExample.java228
-rw-r--r--odk/examples/DevelopersGuide/Forms/DocumentHelper.java320
-rw-r--r--odk/examples/DevelopersGuide/Forms/DocumentType.java59
-rw-r--r--odk/examples/DevelopersGuide/Forms/DocumentViewHelper.java230
-rw-r--r--odk/examples/DevelopersGuide/Forms/FLTools.java270
-rw-r--r--odk/examples/DevelopersGuide/Forms/FormLayer.java294
-rw-r--r--odk/examples/DevelopersGuide/Forms/GridFieldValidator.java176
-rw-r--r--odk/examples/DevelopersGuide/Forms/HsqlDatabase.java256
-rw-r--r--odk/examples/DevelopersGuide/Forms/InteractionRequest.java76
-rw-r--r--odk/examples/DevelopersGuide/Forms/KeyGenerator.java432
-rw-r--r--odk/examples/DevelopersGuide/Forms/ListSelectionValidator.java69
-rw-r--r--odk/examples/DevelopersGuide/Forms/Makefile197
-rw-r--r--odk/examples/DevelopersGuide/Forms/NumericValidator.java89
-rw-r--r--odk/examples/DevelopersGuide/Forms/ProgrammaticScriptAssignment.odtbin0 -> 19198 bytes
-rw-r--r--odk/examples/DevelopersGuide/Forms/RowSet.java290
-rw-r--r--odk/examples/DevelopersGuide/Forms/SalesFilter.java512
-rw-r--r--odk/examples/DevelopersGuide/Forms/SingleControlValidation.java187
-rw-r--r--odk/examples/DevelopersGuide/Forms/SpreadsheetDocument.java131
-rw-r--r--odk/examples/DevelopersGuide/Forms/SpreadsheetValueBinding.java136
-rw-r--r--odk/examples/DevelopersGuide/Forms/SpreadsheetView.java76
-rw-r--r--odk/examples/DevelopersGuide/Forms/TableCellTextBinding.java210
-rw-r--r--odk/examples/DevelopersGuide/Forms/TextValidator.java89
-rw-r--r--odk/examples/DevelopersGuide/Forms/TimeValidator.java94
-rw-r--r--odk/examples/DevelopersGuide/Forms/UNO.java90
-rw-r--r--odk/examples/DevelopersGuide/Forms/URLHelper.java72
-rw-r--r--odk/examples/DevelopersGuide/Forms/ValueBinding.java88
-rw-r--r--odk/examples/DevelopersGuide/Forms/WaitForInput.java64
-rw-r--r--odk/examples/DevelopersGuide/Forms/makefile.mk97
-rw-r--r--odk/examples/DevelopersGuide/GUI/DialogDocument.java145
-rw-r--r--odk/examples/DevelopersGuide/GUI/ImageControlSample.java163
-rw-r--r--odk/examples/DevelopersGuide/GUI/Makefile142
-rw-r--r--odk/examples/DevelopersGuide/GUI/MessageBox.java245
-rw-r--r--odk/examples/DevelopersGuide/GUI/RoadmapItemStateChangeListener.java68
-rw-r--r--odk/examples/DevelopersGuide/GUI/SystemDialog.java186
-rw-r--r--odk/examples/DevelopersGuide/GUI/UnoDialogSample.java1482
-rw-r--r--odk/examples/DevelopersGuide/GUI/UnoDialogSample2.java264
-rw-r--r--odk/examples/DevelopersGuide/GUI/UnoMenu.java167
-rw-r--r--odk/examples/DevelopersGuide/GUI/UnoMenu2.java95
-rw-r--r--odk/examples/DevelopersGuide/GUI/oologo.gifbin0 -> 2563 bytes
-rw-r--r--odk/examples/DevelopersGuide/OfficeBean/Makefile89
-rw-r--r--odk/examples/DevelopersGuide/OfficeBean/OOoBeanViewer.java407
-rw-r--r--odk/examples/DevelopersGuide/OfficeBean/OfficeIconColor16.jpgbin0 -> 321 bytes
-rw-r--r--odk/examples/DevelopersGuide/OfficeBean/OfficeIconColor32.jpgbin0 -> 569 bytes
-rw-r--r--odk/examples/DevelopersGuide/OfficeBean/OfficeIconMono16.jpgbin0 -> 321 bytes
-rw-r--r--odk/examples/DevelopersGuide/OfficeBean/OfficeIconMono32.jpgbin0 -> 569 bytes
-rw-r--r--odk/examples/DevelopersGuide/OfficeBean/makefile.mk68
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/Clipboard/Clipboard.java229
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/Clipboard/ClipboardListener.java55
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/Clipboard/ClipboardOwner.java60
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/Clipboard/Makefile99
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/Clipboard/TextTransferable.java85
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/ContextMenuInterceptor.java256
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/DesktopEnvironment/CustomizeView.java298
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/DesktopEnvironment/Desk.java96
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/DesktopEnvironment/DocumentView.java430
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/DesktopEnvironment/FunctionHelper.java1060
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/DesktopEnvironment/IOnewayLink.java70
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/DesktopEnvironment/IShutdownListener.java47
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/DesktopEnvironment/Install.txt10
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/DesktopEnvironment/Interceptor.java672
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/DesktopEnvironment/JavaWindowPeerFake.java107
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/DesktopEnvironment/Makefile128
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/DesktopEnvironment/NativeView.java182
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/DesktopEnvironment/OfficeConnect.java205
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/DesktopEnvironment/OnewayExecutor.java240
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/DesktopEnvironment/StatusListener.java478
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/DesktopEnvironment/StatusView.java266
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/DesktopEnvironment/ViewContainer.java269
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/DesktopEnvironment/nativelib/unix/Makefile73
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/DesktopEnvironment/nativelib/unix/nativeview.c111
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/DesktopEnvironment/nativelib/unix/nativeview.h63
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/DesktopEnvironment/nativelib/windows/Makefile78
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/DesktopEnvironment/nativelib/windows/nativeview.c178
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/DesktopEnvironment/nativelib/windows/nativeview.def3
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/DesktopEnvironment/nativelib/windows/nativeview.h63
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/DisableCommands/DisableCommandsTest.java411
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/DisableCommands/Makefile92
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/FilterDevelopment/AsciiFilter/AsciiReplaceFilter.java733
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/FilterDevelopment/AsciiFilter/FilterOptions.java230
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/FilterDevelopment/AsciiFilter/Makefile138
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/FilterDevelopment/AsciiFilter/TypeDetection.xcu29
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/FilterDevelopment/FlatXmlFilterDetection/FlatXmlTypeDetection.xcu71
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/FilterDevelopment/FlatXmlFilterDetection/Makefile150
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/FilterDevelopment/FlatXmlFilterDetection/fdcomp.cxx109
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/FilterDevelopment/FlatXmlFilterDetection/filterdetect.cxx254
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/FilterDevelopment/FlatXmlFilterDetection/filterdetect.hxx118
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/FilterDevelopment/FlatXmlFilter_cpp/FlatXml.cxx373
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/FilterDevelopment/FlatXmlFilter_cpp/FlatXmlFilter_cpp.uno.xml59
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/FilterDevelopment/FlatXmlFilter_cpp/FlatXmlFilter_cpp.xcu86
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/FilterDevelopment/FlatXmlFilter_cpp/Makefile148
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/FilterDevelopment/FlatXmlFilter_java/FlatXml.java273
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/FilterDevelopment/FlatXmlFilter_java/FlatXmlFilter_java.xcu86
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/FilterDevelopment/FlatXmlFilter_java/Makefile141
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/Linguistic/LinguisticExamples.java368
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/Linguistic/Makefile237
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/Linguistic/OneInstanceFactory.java155
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/Linguistic/PropChgHelper.java194
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/Linguistic/PropChgHelper_Hyph.java86
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/Linguistic/PropChgHelper_Spell.java110
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/Linguistic/SampleHyphenator.java548
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/Linguistic/SampleSpellChecker.java491
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/Linguistic/SampleThesaurus.java328
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/Linguistic/XHyphenatedWord_impl.java97
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/Linguistic/XMeaning_impl.java69
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/Linguistic/XPossibleHyphens_impl.java89
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/Linguistic/XSpellAlternatives_impl.java92
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/Makefile106
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/MenuElement.java56
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/Number_Formats.java253
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/OfficeConnect.java184
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/PathSettings/Makefile92
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/PathSettings/PathSettingsTest.java168
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/PathSubstitution/Makefile92
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/PathSubstitution/PathSubstitutionTest.java119
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/TerminationTest/Makefile97
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/TerminationTest/TerminateListener.java60
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/TerminationTest/TerminationTest.java101
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/makefile.mk180
-rw-r--r--odk/examples/DevelopersGuide/ProfUNO/CppBinding/Makefile140
-rw-r--r--odk/examples/DevelopersGuide/ProfUNO/CppBinding/office_connect.cxx104
-rw-r--r--odk/examples/DevelopersGuide/ProfUNO/CppBinding/office_connect.ini2
-rw-r--r--odk/examples/DevelopersGuide/ProfUNO/CppBinding/office_connectrc2
-rw-r--r--odk/examples/DevelopersGuide/ProfUNO/CppBinding/string_samples.cxx84
-rw-r--r--odk/examples/DevelopersGuide/ProfUNO/InterprocessConn/ConnectionAwareClient.java260
-rw-r--r--odk/examples/DevelopersGuide/ProfUNO/InterprocessConn/Makefile86
-rw-r--r--odk/examples/DevelopersGuide/ProfUNO/InterprocessConn/UrlResolver.java111
-rw-r--r--odk/examples/DevelopersGuide/ProfUNO/Lifetime/Makefile113
-rw-r--r--odk/examples/DevelopersGuide/ProfUNO/Lifetime/MyUnoObject.java60
-rw-r--r--odk/examples/DevelopersGuide/ProfUNO/Lifetime/object_lifetime.cxx68
-rw-r--r--odk/examples/DevelopersGuide/ProfUNO/SimpleBootstrap_cpp/Makefile101
-rw-r--r--odk/examples/DevelopersGuide/ProfUNO/SimpleBootstrap_cpp/SimpleBootstrap_cpp.cxx102
-rw-r--r--odk/examples/DevelopersGuide/ProfUNO/SimpleBootstrap_java/Makefile91
-rw-r--r--odk/examples/DevelopersGuide/ProfUNO/SimpleBootstrap_java/SimpleBootstrap_java.java76
-rw-r--r--odk/examples/DevelopersGuide/ProfUNO/SimpleBootstrap_java/manifest.mf4
-rw-r--r--odk/examples/DevelopersGuide/ProfUNO/makefile.mk95
-rw-r--r--odk/examples/DevelopersGuide/ScriptingFramework/SayHello/META-INF/manifest.xml5
-rw-r--r--odk/examples/DevelopersGuide/ScriptingFramework/SayHello/Makefile129
-rw-r--r--odk/examples/DevelopersGuide/ScriptingFramework/SayHello/SayHello.odtbin0 -> 8874 bytes
-rw-r--r--odk/examples/DevelopersGuide/ScriptingFramework/SayHello/SayHello/SayHello.java46
-rw-r--r--odk/examples/DevelopersGuide/ScriptingFramework/SayHello/SayHello/parcel-descriptor.xml17
-rwxr-xr-xodk/examples/DevelopersGuide/ScriptingFramework/SayHello/build.xml81
-rw-r--r--odk/examples/DevelopersGuide/ScriptingFramework/ScriptSelector/META-INF/manifest.xml5
-rw-r--r--odk/examples/DevelopersGuide/ScriptingFramework/ScriptSelector/Makefile131
-rw-r--r--odk/examples/DevelopersGuide/ScriptingFramework/ScriptSelector/ScriptSelector.odtbin0 -> 8921 bytes
-rw-r--r--odk/examples/DevelopersGuide/ScriptingFramework/ScriptSelector/ScriptSelector/ScriptSelector.java397
-rw-r--r--odk/examples/DevelopersGuide/ScriptingFramework/ScriptSelector/ScriptSelector/container.gifbin0 -> 164 bytes
-rw-r--r--odk/examples/DevelopersGuide/ScriptingFramework/ScriptSelector/ScriptSelector/parcel-descriptor.xml17
-rw-r--r--odk/examples/DevelopersGuide/ScriptingFramework/ScriptSelector/ScriptSelector/script.gifbin0 -> 187 bytes
-rw-r--r--odk/examples/DevelopersGuide/ScriptingFramework/ScriptSelector/ScriptSelector/soffice.gifbin0 -> 136 bytes
-rwxr-xr-xodk/examples/DevelopersGuide/ScriptingFramework/ScriptSelector/build.xml81
-rw-r--r--odk/examples/DevelopersGuide/ScriptingFramework/makefile.mk79
-rw-r--r--odk/examples/DevelopersGuide/Spreadsheet/DataPilotReadme.txt30
-rw-r--r--odk/examples/DevelopersGuide/Spreadsheet/ExampleAddIn.java314
-rw-r--r--odk/examples/DevelopersGuide/Spreadsheet/ExampleAddIn.odsbin0 -> 8961 bytes
-rw-r--r--odk/examples/DevelopersGuide/Spreadsheet/ExampleDataPilotSource.java981
-rw-r--r--odk/examples/DevelopersGuide/Spreadsheet/GeneralTableSample.java241
-rw-r--r--odk/examples/DevelopersGuide/Spreadsheet/Makefile306
-rw-r--r--odk/examples/DevelopersGuide/Spreadsheet/SpreadsheetDocHelper.java405
-rw-r--r--odk/examples/DevelopersGuide/Spreadsheet/SpreadsheetSample.java1417
-rw-r--r--odk/examples/DevelopersGuide/Spreadsheet/ViewSample.java170
-rw-r--r--odk/examples/DevelopersGuide/Spreadsheet/XExampleAddIn.idl60
-rw-r--r--odk/examples/DevelopersGuide/Spreadsheet/makefile.mk72
-rw-r--r--odk/examples/DevelopersGuide/Text/Makefile96
-rw-r--r--odk/examples/DevelopersGuide/Text/PrintDemo.odtbin0 -> 6909 bytes
-rw-r--r--odk/examples/DevelopersGuide/Text/TextDocuments.java1792
-rw-r--r--odk/examples/DevelopersGuide/Text/TextTemplateWithUserFields.odtbin0 -> 6641 bytes
-rw-r--r--odk/examples/DevelopersGuide/Text/makefile.mk67
-rw-r--r--odk/examples/DevelopersGuide/UCB/ChildrenRetriever.java348
-rw-r--r--odk/examples/DevelopersGuide/UCB/DataStreamComposer.java258
-rw-r--r--odk/examples/DevelopersGuide/UCB/DataStreamRetriever.java233
-rw-r--r--odk/examples/DevelopersGuide/UCB/Helper.java250
-rw-r--r--odk/examples/DevelopersGuide/UCB/Makefile156
-rw-r--r--odk/examples/DevelopersGuide/UCB/MyActiveDataSink.java73
-rw-r--r--odk/examples/DevelopersGuide/UCB/MyInputStream.java190
-rw-r--r--odk/examples/DevelopersGuide/UCB/PropertiesComposer.java299
-rw-r--r--odk/examples/DevelopersGuide/UCB/PropertiesRetriever.java254
-rw-r--r--odk/examples/DevelopersGuide/UCB/ResourceCreator.java313
-rw-r--r--odk/examples/DevelopersGuide/UCB/ResourceManager.java289
-rw-r--r--odk/examples/DevelopersGuide/UCB/ResourceRemover.java180
-rw-r--r--odk/examples/DevelopersGuide/UCB/data/data.txt1
-rw-r--r--odk/examples/DevelopersGuide/UCB/makefile.mk75
-rw-r--r--odk/examples/DevelopersGuide/examples.html3032
-rw-r--r--odk/examples/OLE/activex/Makefile122
-rw-r--r--odk/examples/OLE/activex/README.txt39
-rw-r--r--odk/examples/OLE/activex/SOActiveX.cpp645
-rw-r--r--odk/examples/OLE/activex/SOActiveX.h166
-rw-r--r--odk/examples/OLE/activex/SOActiveX.rgs33
-rw-r--r--odk/examples/OLE/activex/SOComWindowPeer.cpp58
-rw-r--r--odk/examples/OLE/activex/SOComWindowPeer.h162
-rw-r--r--odk/examples/OLE/activex/SOComWindowPeer.rgs23
-rw-r--r--odk/examples/OLE/activex/StdAfx2.cpp46
-rw-r--r--odk/examples/OLE/activex/StdAfx2.h65
-rw-r--r--odk/examples/OLE/activex/example.html26
-rw-r--r--odk/examples/OLE/activex/resource.h55
-rw-r--r--odk/examples/OLE/activex/so_activex.cpp108
-rw-r--r--odk/examples/OLE/activex/so_activex.def5
-rw-r--r--odk/examples/OLE/activex/so_activex.idl138
-rw-r--r--odk/examples/OLE/activex/so_activex.rc136
-rw-r--r--odk/examples/OLE/delphi/InsertTables/Project1.dpr14
-rw-r--r--odk/examples/OLE/delphi/InsertTables/Project1.res0
-rw-r--r--odk/examples/OLE/delphi/InsertTables/SampleCode.pas393
-rw-r--r--odk/examples/OLE/delphi/InsertTables/SampleUI.dfm4
-rw-r--r--odk/examples/OLE/delphi/InsertTables/SampleUI.pas168
-rw-r--r--odk/examples/OLE/delphi/StarOffice_Delphi.sxwbin0 -> 34970 bytes
-rw-r--r--odk/examples/OLE/delphi/StarOffice_and_Delphi.pdfbin0 -> 60963 bytes
-rw-r--r--odk/examples/OLE/makefile.mk93
-rw-r--r--odk/examples/OLE/vbscript/WriterDemo.vbs172
-rw-r--r--odk/examples/OLE/vbscript/readme.txt4
-rw-r--r--odk/examples/basic/drawing/dirtree.txt20
-rw-r--r--odk/examples/basic/drawing/importexportofasciifiles.odgbin0 -> 11125 bytes
-rw-r--r--odk/examples/basic/forms_and_controls/beef.wmfbin0 -> 9856 bytes
-rw-r--r--odk/examples/basic/forms_and_controls/burger.wmfbin0 -> 84308 bytes
-rw-r--r--odk/examples/basic/forms_and_controls/burger_factory.odtbin0 -> 18934 bytes
-rw-r--r--odk/examples/basic/forms_and_controls/chicken.wmfbin0 -> 14272 bytes
-rw-r--r--odk/examples/basic/forms_and_controls/fish.wmfbin0 -> 13716 bytes
-rw-r--r--odk/examples/basic/forms_and_controls/vegetable.wmfbin0 -> 17862 bytes
-rw-r--r--odk/examples/basic/makefile.mk91
-rw-r--r--odk/examples/basic/sheet/adapting_to_euroland.odsbin0 -> 9964 bytes
-rw-r--r--odk/examples/basic/stock_quotes_updater/stock.odsbin0 -> 21540 bytes
-rw-r--r--odk/examples/basic/text/creating_an_index/index.odtbin0 -> 13160 bytes
-rw-r--r--odk/examples/basic/text/creating_an_index/indexlist.txt9
-rw-r--r--odk/examples/basic/text/modifying_text_automatically/changing_appearance.odtbin0 -> 9883 bytes
-rw-r--r--odk/examples/basic/text/modifying_text_automatically/inserting_bookmarks.odtbin0 -> 10207 bytes
-rw-r--r--odk/examples/basic/text/modifying_text_automatically/replacing_text.odtbin0 -> 10021 bytes
-rw-r--r--odk/examples/basic/text/modifying_text_automatically/using_regular_expressions.odtbin0 -> 10072 bytes
-rw-r--r--odk/examples/cpp/DocumentLoader/DocumentLoader.cxx167
-rw-r--r--odk/examples/cpp/DocumentLoader/Makefile127
-rw-r--r--odk/examples/cpp/DocumentLoader/test.odtbin0 -> 6737 bytes
-rw-r--r--odk/examples/cpp/complextoolbarcontrols/Addons.xcu170
-rw-r--r--odk/examples/cpp/complextoolbarcontrols/CalcListener.cxx39
-rw-r--r--odk/examples/cpp/complextoolbarcontrols/CalcWindowState.xcu21
-rw-r--r--odk/examples/cpp/complextoolbarcontrols/Jobs.xcu23
-rw-r--r--odk/examples/cpp/complextoolbarcontrols/ListenerHelper.cxx144
-rw-r--r--odk/examples/cpp/complextoolbarcontrols/ListenerHelper.h82
-rw-r--r--odk/examples/cpp/complextoolbarcontrols/Makefile166
-rw-r--r--odk/examples/cpp/complextoolbarcontrols/MyJob.cxx109
-rw-r--r--odk/examples/cpp/complextoolbarcontrols/MyJob.h150
-rw-r--r--odk/examples/cpp/complextoolbarcontrols/MyListener.cxx167
-rw-r--r--odk/examples/cpp/complextoolbarcontrols/MyListener.h96
-rw-r--r--odk/examples/cpp/complextoolbarcontrols/MyProtocolHandler.cxx539
-rw-r--r--odk/examples/cpp/complextoolbarcontrols/MyProtocolHandler.h141
-rw-r--r--odk/examples/cpp/complextoolbarcontrols/ProtocolHandler.xcu10
-rw-r--r--odk/examples/cpp/complextoolbarcontrols/WriterListener.cxx47
-rw-r--r--odk/examples/cpp/complextoolbarcontrols/WriterWindowState.xcu21
-rw-r--r--odk/examples/cpp/complextoolbarcontrols/exports.cxx120
-rw-r--r--odk/examples/cpp/complextoolbarcontrols/logo_big.pngbin0 -> 616 bytes
-rw-r--r--odk/examples/cpp/complextoolbarcontrols/logo_small.pngbin0 -> 585 bytes
-rw-r--r--odk/examples/cpp/counter/Makefile161
-rw-r--r--odk/examples/cpp/counter/XCountable.idl55
-rw-r--r--odk/examples/cpp/counter/counter.cxx238
-rw-r--r--odk/examples/cpp/counter/countermain.cxx122
-rw-r--r--odk/examples/cpp/makefile.mk80
-rw-r--r--odk/examples/cpp/remoteclient/Makefile160
-rw-r--r--odk/examples/cpp/remoteclient/remoteclient.cxx283
-rw-r--r--odk/examples/examples.html750
-rw-r--r--odk/examples/java/ConverterServlet/ConverterServlet.html46
-rw-r--r--odk/examples/java/ConverterServlet/ConverterServlet.java336
-rw-r--r--odk/examples/java/ConverterServlet/Makefile94
-rw-r--r--odk/examples/java/ConverterServlet/README38
-rw-r--r--odk/examples/java/ConverterServlet/web.xml23
-rw-r--r--odk/examples/java/DocumentHandling/DocumentConverter.java225
-rw-r--r--odk/examples/java/DocumentHandling/DocumentLoader.java92
-rw-r--r--odk/examples/java/DocumentHandling/DocumentPrinter.java109
-rw-r--r--odk/examples/java/DocumentHandling/DocumentSaver.java131
-rw-r--r--odk/examples/java/DocumentHandling/Makefile145
-rw-r--r--odk/examples/java/DocumentHandling/test/test1.odtbin0 -> 7999 bytes
-rw-r--r--odk/examples/java/Drawing/Makefile92
-rw-r--r--odk/examples/java/Drawing/SDraw.java272
-rw-r--r--odk/examples/java/EmbedDocument/Container1/EmbedContApp.java1024
-rw-r--r--odk/examples/java/EmbedDocument/Container1/EmbedContFrame.java108
-rw-r--r--odk/examples/java/EmbedDocument/Container1/Makefile48
-rwxr-xr-xodk/examples/java/EmbedDocument/EmbeddedObject/EditorFrame.java121
-rw-r--r--odk/examples/java/EmbedDocument/EmbeddedObject/EmbeddedObject.odtbin0 -> 9975 bytes
-rwxr-xr-xodk/examples/java/EmbedDocument/EmbeddedObject/EmbeddedObject.xcu28
-rw-r--r--odk/examples/java/EmbedDocument/EmbeddedObject/Makefile147
-rwxr-xr-xodk/examples/java/EmbedDocument/EmbeddedObject/OwnEmbeddedObject.java1124
-rwxr-xr-xodk/examples/java/EmbedDocument/EmbeddedObject/OwnEmbeddedObjectFactory.java101
-rwxr-xr-xodk/examples/java/Inspector/Addon.xcu28
-rwxr-xr-xodk/examples/java/Inspector/Addons.xcu23
-rw-r--r--odk/examples/java/Inspector/HideableMutableTreeNode.java88
-rw-r--r--odk/examples/java/Inspector/HideableTreeModel.java298
-rw-r--r--odk/examples/java/Inspector/Inspector.java461
-rw-r--r--odk/examples/java/Inspector/InspectorAddon.java228
-rw-r--r--odk/examples/java/Inspector/InspectorPane.java629
-rw-r--r--odk/examples/java/Inspector/InstanceInspector.idl52
-rw-r--r--odk/examples/java/Inspector/InstanceInspectorTest.odtbin0 -> 12272 bytes
-rw-r--r--odk/examples/java/Inspector/Introspector.java667
-rw-r--r--odk/examples/java/Inspector/Makefile195
-rw-r--r--odk/examples/java/Inspector/MethodParametersDialog.java353
-rwxr-xr-xodk/examples/java/Inspector/ObjectInspector.xcs18
-rwxr-xr-xodk/examples/java/Inspector/ObjectInspector.xcu18
-rwxr-xr-xodk/examples/java/Inspector/ProtocolHandler.xcu11
-rw-r--r--odk/examples/java/Inspector/ProtocolHandlerAddon.java283
-rw-r--r--odk/examples/java/Inspector/SourceCodeGenerator.java1766
-rw-r--r--odk/examples/java/Inspector/SwingDialogProvider.java442
-rw-r--r--odk/examples/java/Inspector/SwingTreeControlProvider.java427
-rw-r--r--odk/examples/java/Inspector/SwingTreePathProvider.java40
-rw-r--r--odk/examples/java/Inspector/SwingUnoFacetteNode.java84
-rw-r--r--odk/examples/java/Inspector/SwingUnoMethodNode.java138
-rw-r--r--odk/examples/java/Inspector/SwingUnoNode.java156
-rw-r--r--odk/examples/java/Inspector/SwingUnoPropertyNode.java96
-rw-r--r--odk/examples/java/Inspector/TDocSupplier.java168
-rw-r--r--odk/examples/java/Inspector/TestInspector.java88
-rw-r--r--odk/examples/java/Inspector/UnoFacetteNode.java85
-rw-r--r--odk/examples/java/Inspector/UnoMethodNode.java228
-rw-r--r--odk/examples/java/Inspector/UnoNode.java437
-rw-r--r--odk/examples/java/Inspector/UnoPropertyNode.java225
-rw-r--r--odk/examples/java/Inspector/UnoTreeRenderer.java135
-rw-r--r--odk/examples/java/Inspector/XDialogProvider.java65
-rw-r--r--odk/examples/java/Inspector/XInstanceInspector.idl56
-rw-r--r--odk/examples/java/Inspector/XLanguageSourceCodeGenerator.java106
-rw-r--r--odk/examples/java/Inspector/XMethodParametersDialog.java37
-rw-r--r--odk/examples/java/Inspector/XTreeControlProvider.java93
-rw-r--r--odk/examples/java/Inspector/XTreePathProvider.java25
-rw-r--r--odk/examples/java/Inspector/XUnoFacetteNode.java63
-rw-r--r--odk/examples/java/Inspector/XUnoMethodNode.java68
-rw-r--r--odk/examples/java/Inspector/XUnoNode.java84
-rw-r--r--odk/examples/java/Inspector/XUnoPropertyNode.java51
-rwxr-xr-xodk/examples/java/Inspector/images/containers_16.pngbin0 -> 233 bytes
-rwxr-xr-xodk/examples/java/Inspector/images/content_16.pngbin0 -> 370 bytes
-rwxr-xr-xodk/examples/java/Inspector/images/interfaces_16.pngbin0 -> 433 bytes
-rwxr-xr-xodk/examples/java/Inspector/images/methods_16.pngbin0 -> 380 bytes
-rwxr-xr-xodk/examples/java/Inspector/images/properties_16.pngbin0 -> 242 bytes
-rwxr-xr-xodk/examples/java/Inspector/images/services_16.pngbin0 -> 258 bytes
-rwxr-xr-xodk/examples/java/Inspector/manifest.mf3
-rw-r--r--odk/examples/java/MinimalComponent/BuildMinimalComponent.xml64
-rw-r--r--odk/examples/java/MinimalComponent/Makefile203
-rw-r--r--odk/examples/java/MinimalComponent/MinimalComponent.idl52
-rw-r--r--odk/examples/java/MinimalComponent/MinimalComponent.java171
-rw-r--r--odk/examples/java/MinimalComponent/TestMinimalComponent.java69
-rw-r--r--odk/examples/java/NotesAccess/Makefile113
-rw-r--r--odk/examples/java/NotesAccess/NotesAccess.java288
-rw-r--r--odk/examples/java/NotesAccess/Stocks.nsfbin0 -> 262144 bytes
-rw-r--r--odk/examples/java/PropertySet/Makefile134
-rw-r--r--odk/examples/java/PropertySet/PropTest.java265
-rw-r--r--odk/examples/java/PropertySet/PropertySet.odtbin0 -> 8391 bytes
-rw-r--r--odk/examples/java/Spreadsheet/CalcAddins.java304
-rw-r--r--odk/examples/java/Spreadsheet/CalcAddins.odsbin0 -> 8653 bytes
-rw-r--r--odk/examples/java/Spreadsheet/ChartTypeChange.java355
-rw-r--r--odk/examples/java/Spreadsheet/EuroAdaption.java389
-rw-r--r--odk/examples/java/Spreadsheet/Makefile213
-rw-r--r--odk/examples/java/Spreadsheet/SCalc.java412
-rw-r--r--odk/examples/java/Spreadsheet/XCalcAddins.idl100
-rw-r--r--odk/examples/java/Storage/Makefile58
-rw-r--r--odk/examples/java/Storage/StorageFunctionality.java147
-rw-r--r--odk/examples/java/Storage/StorageTest.java7
-rw-r--r--odk/examples/java/Storage/Test01.java158
-rw-r--r--odk/examples/java/Storage/Test02.java152
-rw-r--r--odk/examples/java/Storage/Test03.java209
-rw-r--r--odk/examples/java/Storage/Test04.java273
-rw-r--r--odk/examples/java/Storage/Test05.java268
-rw-r--r--odk/examples/java/Storage/Test06.java278
-rw-r--r--odk/examples/java/Storage/Test07.java137
-rw-r--r--odk/examples/java/Storage/Test08.java213
-rw-r--r--odk/examples/java/Storage/Test09.java123
-rw-r--r--odk/examples/java/Storage/TestHelper.java864
-rw-r--r--odk/examples/java/Text/BookmarkInsertion.java284
-rw-r--r--odk/examples/java/Text/GraphicsInserter.java179
-rw-r--r--odk/examples/java/Text/HardFormatting.java286
-rw-r--r--odk/examples/java/Text/Makefile136
-rw-r--r--odk/examples/java/Text/SWriter.java397
-rw-r--r--odk/examples/java/Text/StyleCreation.java226
-rw-r--r--odk/examples/java/Text/StyleInitialization.java320
-rw-r--r--odk/examples/java/Text/TextDocumentStructure.java205
-rw-r--r--odk/examples/java/Text/TextReplace.java231
-rw-r--r--odk/examples/java/Text/WriterSelector.java162
-rw-r--r--odk/examples/java/Text/oo_smiley.gifbin0 -> 46109 bytes
-rw-r--r--odk/examples/java/ToDo/Makefile166
-rw-r--r--odk/examples/java/ToDo/ToDo.idl50
-rw-r--r--odk/examples/java/ToDo/ToDo.java965
-rw-r--r--odk/examples/java/ToDo/ToDo.odsbin0 -> 13276 bytes
-rw-r--r--odk/examples/java/ToDo/XToDo.idl50
-rw-r--r--odk/examples/java/makefile.mk155
-rw-r--r--odk/inc/makefile.mk47
-rw-r--r--odk/inc/pch/precompiled_odk.cxx29
-rw-r--r--odk/inc/pch/precompiled_odk.hxx32
-rw-r--r--odk/index.html203
-rw-r--r--odk/no_localization1
-rw-r--r--odk/pack/checkbin/makefile.mk51
-rw-r--r--odk/pack/checkidl/makefile.mk51
-rw-r--r--odk/pack/checkinc/makefile.mk54
-rw-r--r--odk/pack/checkinc2/makefile.mk54
-rwxr-xr-xodk/pack/copying/addsym-macosx.sh11
-rw-r--r--odk/pack/copying/dk.mk3
-rw-r--r--odk/pack/copying/idl_chapter_refs.txt7590
-rw-r--r--odk/pack/copying/makefile.mk262
-rw-r--r--odk/pack/gendocu/java/package-list135
-rw-r--r--odk/pack/gendocu/makefile.mk122
-rw-r--r--odk/pack/gendocu/uno/package-list53
-rw-r--r--odk/pack/unzip_udk/deltree.txt0
-rw-r--r--odk/pack/unzip_udk/makefile.mk46
-rw-r--r--odk/prj/build.lst15
-rw-r--r--odk/prj/d.lst5
-rwxr-xr-xodk/setsdkenv_unix67
-rw-r--r--odk/setsdkenv_unix.csh.in313
-rw-r--r--odk/setsdkenv_unix.sh.in343
-rwxr-xr-xodk/setsdkenv_windows.bat64
-rwxr-xr-xodk/setsdkenv_windows.template183
-rwxr-xr-xodk/setsdkname.bat3
-rw-r--r--odk/settings/component.uno.def4
-rw-r--r--odk/settings/settings.mk607
-rw-r--r--odk/settings/std.mk63
-rw-r--r--odk/settings/stdtarget.mk16
-rw-r--r--odk/source/com/sun/star/lib/loader/InstallationFinder.java584
-rw-r--r--odk/source/com/sun/star/lib/loader/Loader.java385
-rw-r--r--odk/source/com/sun/star/lib/loader/WinRegKey.java200
-rw-r--r--odk/source/com/sun/star/lib/loader/WinRegKeyException.java51
-rw-r--r--odk/source/com/sun/star/lib/loader/makefile.mk56
-rw-r--r--odk/source/unoapploader/unx/makefile.mk60
-rw-r--r--odk/source/unoapploader/unx/unoapploader.c301
-rw-r--r--odk/source/unoapploader/win/makefile.mk57
-rw-r--r--odk/source/unoapploader/win/unoapploader.c423
-rw-r--r--odk/source/unowinreg/win/makefile.mk114
-rw-r--r--odk/source/unowinreg/win/unowinreg.cxx185
-rw-r--r--odk/source/unowinreg/win/unowinreg.dxp9
-rw-r--r--odk/util/check.pl485
-rw-r--r--odk/util/checkdiff.pl62
-rw-r--r--odk/util/delzip1
-rw-r--r--odk/util/makefile.mk58
-rw-r--r--odk/util/makefile.pmk224
-rw-r--r--odk/util/odk_rules.pmk193
-rw-r--r--offapi/com/sun/star/accessibility/AccessBridge.idl54
-rw-r--r--offapi/com/sun/star/accessibility/Accessible.idl56
-rw-r--r--offapi/com/sun/star/accessibility/AccessibleContext.idl67
-rw-r--r--offapi/com/sun/star/accessibility/AccessibleEventId.idl387
-rw-r--r--offapi/com/sun/star/accessibility/AccessibleEventObject.idl69
-rw-r--r--offapi/com/sun/star/accessibility/AccessibleRelation.idl68
-rw-r--r--offapi/com/sun/star/accessibility/AccessibleRelationType.idl121
-rw-r--r--offapi/com/sun/star/accessibility/AccessibleRole.idl720
-rw-r--r--offapi/com/sun/star/accessibility/AccessibleStateType.idl225
-rw-r--r--offapi/com/sun/star/accessibility/AccessibleTableModelChange.idl90
-rw-r--r--offapi/com/sun/star/accessibility/AccessibleTableModelChangeType.idl82
-rw-r--r--offapi/com/sun/star/accessibility/AccessibleTextType.idl105
-rw-r--r--offapi/com/sun/star/accessibility/IllegalAccessibleComponentStateException.idl54
-rw-r--r--offapi/com/sun/star/accessibility/TextSegment.idl85
-rw-r--r--offapi/com/sun/star/accessibility/XAccessible.idl86
-rw-r--r--offapi/com/sun/star/accessibility/XAccessibleAction.idl123
-rw-r--r--offapi/com/sun/star/accessibility/XAccessibleComponent.idl236
-rw-r--r--offapi/com/sun/star/accessibility/XAccessibleContext.idl215
-rw-r--r--offapi/com/sun/star/accessibility/XAccessibleEditableText.idl240
-rw-r--r--offapi/com/sun/star/accessibility/XAccessibleEventBroadcaster.idl64
-rw-r--r--offapi/com/sun/star/accessibility/XAccessibleEventListener.idl59
-rw-r--r--offapi/com/sun/star/accessibility/XAccessibleExtendedComponent.idl109
-rw-r--r--offapi/com/sun/star/accessibility/XAccessibleHyperlink.idl142
-rw-r--r--offapi/com/sun/star/accessibility/XAccessibleHypertext.idl118
-rw-r--r--offapi/com/sun/star/accessibility/XAccessibleImage.idl86
-rw-r--r--offapi/com/sun/star/accessibility/XAccessibleKeyBinding.idl93
-rw-r--r--offapi/com/sun/star/accessibility/XAccessibleMultiLineText.idl148
-rw-r--r--offapi/com/sun/star/accessibility/XAccessibleRelationSet.idl113
-rw-r--r--offapi/com/sun/star/accessibility/XAccessibleSelection.idl164
-rw-r--r--offapi/com/sun/star/accessibility/XAccessibleStateSet.idl109
-rw-r--r--offapi/com/sun/star/accessibility/XAccessibleTable.idl387
-rw-r--r--offapi/com/sun/star/accessibility/XAccessibleText.idl519
-rw-r--r--offapi/com/sun/star/accessibility/XAccessibleTextAttributes.idl105
-rw-r--r--offapi/com/sun/star/accessibility/XAccessibleTextMarkup.idl140
-rw-r--r--offapi/com/sun/star/accessibility/XAccessibleValue.idl106
-rw-r--r--offapi/com/sun/star/accessibility/makefile.mk80
-rw-r--r--offapi/com/sun/star/animations/AnimationAdditiveMode.idl69
-rw-r--r--offapi/com/sun/star/animations/AnimationCalcMode.idl74
-rw-r--r--offapi/com/sun/star/animations/AnimationColorSpace.idl58
-rw-r--r--offapi/com/sun/star/animations/AnimationEndSync.idl81
-rw-r--r--offapi/com/sun/star/animations/AnimationFill.idl84
-rw-r--r--offapi/com/sun/star/animations/AnimationNodeType.idl87
-rw-r--r--offapi/com/sun/star/animations/AnimationRestart.idl75
-rw-r--r--offapi/com/sun/star/animations/AnimationTransformType.idl67
-rw-r--r--offapi/com/sun/star/animations/AnimationValueType.idl57
-rw-r--r--offapi/com/sun/star/animations/Event.idl69
-rw-r--r--offapi/com/sun/star/animations/EventTrigger.idl91
-rw-r--r--offapi/com/sun/star/animations/TargetProperties.idl59
-rw-r--r--offapi/com/sun/star/animations/TimeFilterPair.idl51
-rw-r--r--offapi/com/sun/star/animations/Timing.idl53
-rw-r--r--offapi/com/sun/star/animations/TransitionSubType.idl163
-rw-r--r--offapi/com/sun/star/animations/TransitionType.idl91
-rw-r--r--offapi/com/sun/star/animations/ValuePair.idl48
-rw-r--r--offapi/com/sun/star/animations/XAnimate.idl155
-rw-r--r--offapi/com/sun/star/animations/XAnimateColor.idl74
-rw-r--r--offapi/com/sun/star/animations/XAnimateMotion.idl65
-rw-r--r--offapi/com/sun/star/animations/XAnimateSet.idl66
-rw-r--r--offapi/com/sun/star/animations/XAnimateTransform.idl79
-rw-r--r--offapi/com/sun/star/animations/XAnimationListener.idl88
-rw-r--r--offapi/com/sun/star/animations/XAnimationNode.idl261
-rw-r--r--offapi/com/sun/star/animations/XAnimationNodeSupplier.idl51
-rw-r--r--offapi/com/sun/star/animations/XAudio.idl58
-rw-r--r--offapi/com/sun/star/animations/XCommand.idl66
-rw-r--r--offapi/com/sun/star/animations/XIterateContainer.idl79
-rw-r--r--offapi/com/sun/star/animations/XTargetPropertiesCreator.idl78
-rw-r--r--offapi/com/sun/star/animations/XTimeContainer.idl132
-rw-r--r--offapi/com/sun/star/animations/XTransitionFilter.idl99
-rw-r--r--offapi/com/sun/star/animations/makefile.mk76
-rw-r--r--offapi/com/sun/star/auth/AuthenticationFailedException.idl47
-rw-r--r--offapi/com/sun/star/auth/InvalidArgumentException.idl47
-rw-r--r--offapi/com/sun/star/auth/InvalidContextException.idl47
-rw-r--r--offapi/com/sun/star/auth/InvalidCredentialException.idl47
-rw-r--r--offapi/com/sun/star/auth/InvalidPrincipalException.idl48
-rw-r--r--offapi/com/sun/star/auth/PersistenceFailureException.idl48
-rw-r--r--offapi/com/sun/star/auth/SSOExceptions.idl53
-rw-r--r--offapi/com/sun/star/auth/SSOManagerFactory.idl75
-rw-r--r--offapi/com/sun/star/auth/SSOPasswordCache.idl53
-rw-r--r--offapi/com/sun/star/auth/UnsupportedException.idl48
-rw-r--r--offapi/com/sun/star/auth/XSSOAcceptorContext.idl75
-rw-r--r--offapi/com/sun/star/auth/XSSOContext.idl77
-rw-r--r--offapi/com/sun/star/auth/XSSOInitiatorContext.idl80
-rw-r--r--offapi/com/sun/star/auth/XSSOManager.idl113
-rw-r--r--offapi/com/sun/star/auth/XSSOManagerFactory.idl60
-rw-r--r--offapi/com/sun/star/auth/XSSOPasswordCache.idl105
-rw-r--r--offapi/com/sun/star/auth/makefile.mk28
-rw-r--r--offapi/com/sun/star/awt/AccessibleButton.idl136
-rw-r--r--offapi/com/sun/star/awt/AccessibleCheckBox.idl137
-rw-r--r--offapi/com/sun/star/awt/AccessibleComboBox.idl108
-rw-r--r--offapi/com/sun/star/awt/AccessibleDropDownComboBox.idl119
-rw-r--r--offapi/com/sun/star/awt/AccessibleDropDownListBox.idl119
-rw-r--r--offapi/com/sun/star/awt/AccessibleEdit.idl135
-rw-r--r--offapi/com/sun/star/awt/AccessibleFixedText.idl114
-rw-r--r--offapi/com/sun/star/awt/AccessibleIconChoiceControl.idl115
-rw-r--r--offapi/com/sun/star/awt/AccessibleIconChoiceControlEntry.idl107
-rw-r--r--offapi/com/sun/star/awt/AccessibleList.idl138
-rw-r--r--offapi/com/sun/star/awt/AccessibleListBox.idl107
-rw-r--r--offapi/com/sun/star/awt/AccessibleListBoxList.idl52
-rw-r--r--offapi/com/sun/star/awt/AccessibleListItem.idl104
-rw-r--r--offapi/com/sun/star/awt/AccessibleMenu.idl152
-rw-r--r--offapi/com/sun/star/awt/AccessibleMenuBar.idl115
-rw-r--r--offapi/com/sun/star/awt/AccessibleMenuItem.idl141
-rw-r--r--offapi/com/sun/star/awt/AccessibleMenuSeparator.idl107
-rw-r--r--offapi/com/sun/star/awt/AccessiblePopupMenu.idl115
-rw-r--r--offapi/com/sun/star/awt/AccessibleRadioButton.idl141
-rw-r--r--offapi/com/sun/star/awt/AccessibleScrollBar.idl129
-rw-r--r--offapi/com/sun/star/awt/AccessibleStatusBar.idl98
-rw-r--r--offapi/com/sun/star/awt/AccessibleStatusBarItem.idl107
-rw-r--r--offapi/com/sun/star/awt/AccessibleTabBar.idl109
-rw-r--r--offapi/com/sun/star/awt/AccessibleTabBarPage.idl105
-rw-r--r--offapi/com/sun/star/awt/AccessibleTabBarPageList.idl108
-rw-r--r--offapi/com/sun/star/awt/AccessibleTabControl.idl113
-rw-r--r--offapi/com/sun/star/awt/AccessibleTabPage.idl117
-rw-r--r--offapi/com/sun/star/awt/AccessibleTextField.idl116
-rw-r--r--offapi/com/sun/star/awt/AccessibleToolBox.idl116
-rw-r--r--offapi/com/sun/star/awt/AccessibleToolBoxItem.idl134
-rw-r--r--offapi/com/sun/star/awt/AccessibleTreeListBox.idl115
-rw-r--r--offapi/com/sun/star/awt/AccessibleTreeListBoxEntry.idl133
-rw-r--r--offapi/com/sun/star/awt/AccessibleWindow.idl125
-rw-r--r--offapi/com/sun/star/awt/ActionEvent.idl69
-rw-r--r--offapi/com/sun/star/awt/AdjustmentEvent.idl67
-rw-r--r--offapi/com/sun/star/awt/AdjustmentType.idl72
-rw-r--r--offapi/com/sun/star/awt/AsyncCallback.idl47
-rw-r--r--offapi/com/sun/star/awt/CharSet.idl123
-rw-r--r--offapi/com/sun/star/awt/Command.idl134
-rw-r--r--offapi/com/sun/star/awt/ContainerWindowProvider.idl56
-rw-r--r--offapi/com/sun/star/awt/DeviceCapability.idl65
-rw-r--r--offapi/com/sun/star/awt/DeviceInfo.idl110
-rw-r--r--offapi/com/sun/star/awt/DialogProvider.idl59
-rw-r--r--offapi/com/sun/star/awt/DialogProvider2.idl55
-rw-r--r--offapi/com/sun/star/awt/DockingData.idl63
-rw-r--r--offapi/com/sun/star/awt/DockingEvent.idl84
-rw-r--r--offapi/com/sun/star/awt/EndDockingEvent.idl72
-rw-r--r--offapi/com/sun/star/awt/EndPopupModeEvent.idl68
-rw-r--r--offapi/com/sun/star/awt/EnhancedMouseEvent.idl63
-rw-r--r--offapi/com/sun/star/awt/FieldUnit.idl63
-rw-r--r--offapi/com/sun/star/awt/FocusChangeReason.idl93
-rw-r--r--offapi/com/sun/star/awt/FocusEvent.idl90
-rw-r--r--offapi/com/sun/star/awt/FontDescriptor.idl190
-rw-r--r--offapi/com/sun/star/awt/FontEmphasisMark.idl94
-rw-r--r--offapi/com/sun/star/awt/FontFamily.idl91
-rw-r--r--offapi/com/sun/star/awt/FontPitch.idl68
-rw-r--r--offapi/com/sun/star/awt/FontRelief.idl68
-rw-r--r--offapi/com/sun/star/awt/FontSlant.idl83
-rw-r--r--offapi/com/sun/star/awt/FontStrikeout.idl91
-rw-r--r--offapi/com/sun/star/awt/FontType.idl73
-rw-r--r--offapi/com/sun/star/awt/FontUnderline.idl163
-rw-r--r--offapi/com/sun/star/awt/FontWeight.idl109
-rw-r--r--offapi/com/sun/star/awt/FontWidth.idl109
-rw-r--r--offapi/com/sun/star/awt/Gradient.idl115
-rw-r--r--offapi/com/sun/star/awt/GradientStyle.idl83
-rw-r--r--offapi/com/sun/star/awt/ImageAlign.idl71
-rw-r--r--offapi/com/sun/star/awt/ImagePosition.idl100
-rw-r--r--offapi/com/sun/star/awt/ImageScaleMode.idl62
-rw-r--r--offapi/com/sun/star/awt/ImageStatus.idl73
-rw-r--r--offapi/com/sun/star/awt/InputEvent.idl65
-rw-r--r--offapi/com/sun/star/awt/InvalidateStyle.idl89
-rw-r--r--offapi/com/sun/star/awt/ItemEvent.idl69
-rw-r--r--offapi/com/sun/star/awt/ItemListEvent.idl76
-rw-r--r--offapi/com/sun/star/awt/Key.idl574
-rw-r--r--offapi/com/sun/star/awt/KeyEvent.idl76
-rw-r--r--offapi/com/sun/star/awt/KeyFunction.idl123
-rw-r--r--offapi/com/sun/star/awt/KeyGroup.idl85
-rw-r--r--offapi/com/sun/star/awt/KeyModifier.idl68
-rw-r--r--offapi/com/sun/star/awt/KeyStroke.idl81
-rw-r--r--offapi/com/sun/star/awt/LineEndFormat.idl66
-rw-r--r--offapi/com/sun/star/awt/MaxChildrenException.idl29
-rw-r--r--offapi/com/sun/star/awt/MenuBar.idl56
-rw-r--r--offapi/com/sun/star/awt/MenuEvent.idl57
-rw-r--r--offapi/com/sun/star/awt/MenuItemStyle.idl68
-rw-r--r--offapi/com/sun/star/awt/MenuItemType.idl68
-rwxr-xr-xoffapi/com/sun/star/awt/MenuLogo.idl70
-rw-r--r--offapi/com/sun/star/awt/MessageBoxButtons.idl97
-rw-r--r--offapi/com/sun/star/awt/MessageBoxCommand.idl69
-rw-r--r--offapi/com/sun/star/awt/MouseButton.idl65
-rw-r--r--offapi/com/sun/star/awt/MouseEvent.idl101
-rwxr-xr-xoffapi/com/sun/star/awt/MouseWheelBehavior.idl62
-rw-r--r--offapi/com/sun/star/awt/PaintEvent.idl75
-rw-r--r--offapi/com/sun/star/awt/Point.idl57
-rw-r--r--offapi/com/sun/star/awt/PopupMenu.idl55
-rw-r--r--offapi/com/sun/star/awt/PopupMenuDirection.idl92
-rw-r--r--offapi/com/sun/star/awt/PosSize.idl89
-rw-r--r--offapi/com/sun/star/awt/PrinterException.idl54
-rw-r--r--offapi/com/sun/star/awt/PushButtonType.idl71
-rw-r--r--offapi/com/sun/star/awt/RasterOperation.idl79
-rw-r--r--offapi/com/sun/star/awt/Rectangle.idl69
-rw-r--r--offapi/com/sun/star/awt/RoadmapItem.idl78
-rw-r--r--offapi/com/sun/star/awt/ScrollBarOrientation.idl59
-rw-r--r--offapi/com/sun/star/awt/Selection.idl59
-rw-r--r--offapi/com/sun/star/awt/SimpleFontMetric.idl101
-rw-r--r--offapi/com/sun/star/awt/Size.idl59
-rw-r--r--offapi/com/sun/star/awt/SpinEvent.idl57
-rw-r--r--offapi/com/sun/star/awt/Style.idl60
-rw-r--r--offapi/com/sun/star/awt/SystemDependentXWindow.idl67
-rw-r--r--offapi/com/sun/star/awt/SystemPointer.idl492
-rw-r--r--offapi/com/sun/star/awt/TabController.idl53
-rw-r--r--offapi/com/sun/star/awt/TabControllerModel.idl59
-rw-r--r--offapi/com/sun/star/awt/TextAlign.idl65
-rw-r--r--offapi/com/sun/star/awt/TextEvent.idl57
-rw-r--r--offapi/com/sun/star/awt/Toolkit.idl76
-rw-r--r--offapi/com/sun/star/awt/UnoControl.idl94
-rw-r--r--offapi/com/sun/star/awt/UnoControlButton.idl65
-rw-r--r--offapi/com/sun/star/awt/UnoControlButtonModel.idl282
-rw-r--r--offapi/com/sun/star/awt/UnoControlCheckBox.idl65
-rw-r--r--offapi/com/sun/star/awt/UnoControlCheckBoxModel.idl240
-rw-r--r--offapi/com/sun/star/awt/UnoControlComboBox.idl59
-rw-r--r--offapi/com/sun/star/awt/UnoControlComboBoxModel.idl240
-rw-r--r--offapi/com/sun/star/awt/UnoControlContainer.idl71
-rw-r--r--offapi/com/sun/star/awt/UnoControlContainerModel.idl116
-rw-r--r--offapi/com/sun/star/awt/UnoControlCurrencyField.idl73
-rw-r--r--offapi/com/sun/star/awt/UnoControlCurrencyFieldModel.idl279
-rw-r--r--offapi/com/sun/star/awt/UnoControlDateField.idl72
-rw-r--r--offapi/com/sun/star/awt/UnoControlDateFieldModel.idl291
-rw-r--r--offapi/com/sun/star/awt/UnoControlDialog.idl65
-rw-r--r--offapi/com/sun/star/awt/UnoControlDialogElement.idl97
-rw-r--r--offapi/com/sun/star/awt/UnoControlDialogModel.idl197
-rw-r--r--offapi/com/sun/star/awt/UnoControlEdit.idl71
-rw-r--r--offapi/com/sun/star/awt/UnoControlEditModel.idl291
-rw-r--r--offapi/com/sun/star/awt/UnoControlFileControl.idl56
-rw-r--r--offapi/com/sun/star/awt/UnoControlFileControlModel.idl185
-rw-r--r--offapi/com/sun/star/awt/UnoControlFixedHyperlink.idl65
-rw-r--r--offapi/com/sun/star/awt/UnoControlFixedHyperlinkModel.idl188
-rw-r--r--offapi/com/sun/star/awt/UnoControlFixedLine.idl54
-rw-r--r--offapi/com/sun/star/awt/UnoControlFixedLineModel.idl134
-rw-r--r--offapi/com/sun/star/awt/UnoControlFixedText.idl65
-rw-r--r--offapi/com/sun/star/awt/UnoControlFixedTextModel.idl182
-rw-r--r--offapi/com/sun/star/awt/UnoControlFormattedField.idl64
-rw-r--r--offapi/com/sun/star/awt/UnoControlFormattedFieldModel.idl324
-rw-r--r--offapi/com/sun/star/awt/UnoControlGroupBox.idl53
-rw-r--r--offapi/com/sun/star/awt/UnoControlGroupBoxModel.idl132
-rw-r--r--offapi/com/sun/star/awt/UnoControlImageControl.idl59
-rw-r--r--offapi/com/sun/star/awt/UnoControlImageControlModel.idl161
-rw-r--r--offapi/com/sun/star/awt/UnoControlListBox.idl74
-rw-r--r--offapi/com/sun/star/awt/UnoControlListBoxModel.idl235
-rw-r--r--offapi/com/sun/star/awt/UnoControlModel.idl105
-rw-r--r--offapi/com/sun/star/awt/UnoControlNumericField.idl73
-rw-r--r--offapi/com/sun/star/awt/UnoControlNumericFieldModel.idl267
-rw-r--r--offapi/com/sun/star/awt/UnoControlPatternField.idl73
-rw-r--r--offapi/com/sun/star/awt/UnoControlPatternFieldModel.idl226
-rw-r--r--offapi/com/sun/star/awt/UnoControlProgressBar.idl60
-rw-r--r--offapi/com/sun/star/awt/UnoControlProgressBarModel.idl134
-rw-r--r--offapi/com/sun/star/awt/UnoControlRadioButton.idl65
-rw-r--r--offapi/com/sun/star/awt/UnoControlRadioButtonModel.idl234
-rw-r--r--offapi/com/sun/star/awt/UnoControlRoadmap.idl85
-rw-r--r--offapi/com/sun/star/awt/UnoControlRoadmapModel.idl169
-rw-r--r--offapi/com/sun/star/awt/UnoControlScrollBar.idl60
-rw-r--r--offapi/com/sun/star/awt/UnoControlScrollBarModel.idl201
-rw-r--r--offapi/com/sun/star/awt/UnoControlSimpleAnimation.idl65
-rw-r--r--offapi/com/sun/star/awt/UnoControlSimpleAnimationModel.idl78
-rw-r--r--offapi/com/sun/star/awt/UnoControlSpinButton.idl63
-rw-r--r--offapi/com/sun/star/awt/UnoControlSpinButtonModel.idl183
-rw-r--r--offapi/com/sun/star/awt/UnoControlThrobber.idl65
-rw-r--r--offapi/com/sun/star/awt/UnoControlThrobberModel.idl60
-rw-r--r--offapi/com/sun/star/awt/UnoControlTimeField.idl73
-rw-r--r--offapi/com/sun/star/awt/UnoControlTimeFieldModel.idl271
-rw-r--r--offapi/com/sun/star/awt/VclContainerEvent.idl66
-rw-r--r--offapi/com/sun/star/awt/VclWindowPeerAttribute.idl156
-rw-r--r--offapi/com/sun/star/awt/VisualEffect.idl63
-rw-r--r--offapi/com/sun/star/awt/WindowAttribute.idl135
-rw-r--r--offapi/com/sun/star/awt/WindowClass.idl72
-rw-r--r--offapi/com/sun/star/awt/WindowDescriptor.idl179
-rw-r--r--offapi/com/sun/star/awt/WindowEvent.idl111
-rw-r--r--offapi/com/sun/star/awt/XActionListener.idl61
-rw-r--r--offapi/com/sun/star/awt/XActivateListener.idl78
-rw-r--r--offapi/com/sun/star/awt/XAdjustmentListener.idl61
-rw-r--r--offapi/com/sun/star/awt/XBitmap.idl73
-rw-r--r--offapi/com/sun/star/awt/XButton.idl79
-rw-r--r--offapi/com/sun/star/awt/XCallback.idl60
-rw-r--r--offapi/com/sun/star/awt/XCheckBox.idl92
-rw-r--r--offapi/com/sun/star/awt/XComboBox.idl132
-rw-r--r--offapi/com/sun/star/awt/XContainerWindowEventHandler.idl107
-rw-r--r--offapi/com/sun/star/awt/XContainerWindowProvider.idl130
-rw-r--r--offapi/com/sun/star/awt/XControl.idl146
-rw-r--r--offapi/com/sun/star/awt/XControlContainer.idl87
-rw-r--r--offapi/com/sun/star/awt/XControlModel.idl51
-rw-r--r--offapi/com/sun/star/awt/XCurrencyField.idl149
-rw-r--r--offapi/com/sun/star/awt/XDataTransferProviderAccess.idl111
-rw-r--r--offapi/com/sun/star/awt/XDateField.idl152
-rw-r--r--offapi/com/sun/star/awt/XDevice.idl127
-rw-r--r--offapi/com/sun/star/awt/XDialog.idl77
-rw-r--r--offapi/com/sun/star/awt/XDialog2.idl35
-rw-r--r--offapi/com/sun/star/awt/XDialogEventHandler.idl106
-rw-r--r--offapi/com/sun/star/awt/XDialogProvider.idl75
-rw-r--r--offapi/com/sun/star/awt/XDialogProvider2.idl138
-rw-r--r--offapi/com/sun/star/awt/XDisplayBitmap.idl54
-rw-r--r--offapi/com/sun/star/awt/XDisplayConnection.idl109
-rw-r--r--offapi/com/sun/star/awt/XDockableWindow.idl146
-rw-r--r--offapi/com/sun/star/awt/XDockableWindowListener.idl121
-rw-r--r--offapi/com/sun/star/awt/XEnhancedMouseClickHandler.idl70
-rw-r--r--offapi/com/sun/star/awt/XEventHandler.idl66
-rwxr-xr-xoffapi/com/sun/star/awt/XExtendedToolkit.idl230
-rw-r--r--offapi/com/sun/star/awt/XFileDialog.idl84
-rw-r--r--offapi/com/sun/star/awt/XFixedHyperlink.idl109
-rw-r--r--offapi/com/sun/star/awt/XFixedText.idl81
-rw-r--r--offapi/com/sun/star/awt/XFocusListener.idl74
-rw-r--r--offapi/com/sun/star/awt/XFont.idl126
-rw-r--r--offapi/com/sun/star/awt/XFont2.idl68
-rw-r--r--offapi/com/sun/star/awt/XGraphics.idl321
-rw-r--r--offapi/com/sun/star/awt/XImageButton.idl74
-rw-r--r--offapi/com/sun/star/awt/XImageConsumer.idl132
-rw-r--r--offapi/com/sun/star/awt/XImageProducer.idl91
-rw-r--r--offapi/com/sun/star/awt/XInfoPrinter.idl63
-rw-r--r--offapi/com/sun/star/awt/XItemEventBroadcaster.idl70
-rw-r--r--offapi/com/sun/star/awt/XItemList.idl286
-rw-r--r--offapi/com/sun/star/awt/XItemListListener.idl85
-rw-r--r--offapi/com/sun/star/awt/XItemListener.idl62
-rw-r--r--offapi/com/sun/star/awt/XKeyHandler.idl101
-rw-r--r--offapi/com/sun/star/awt/XKeyListener.idl67
-rw-r--r--offapi/com/sun/star/awt/XLayoutConstrains.idl73
-rw-r--r--offapi/com/sun/star/awt/XLayoutContainer.idl89
-rw-r--r--offapi/com/sun/star/awt/XLayoutFlow.idl32
-rw-r--r--offapi/com/sun/star/awt/XLayoutFlowContainer.idl27
-rw-r--r--offapi/com/sun/star/awt/XLayoutRoot.idl33
-rw-r--r--offapi/com/sun/star/awt/XLayoutUnit.idl31
-rw-r--r--offapi/com/sun/star/awt/XListBox.idl199
-rw-r--r--offapi/com/sun/star/awt/XMenu.idl142
-rw-r--r--offapi/com/sun/star/awt/XMenuBar.idl51
-rwxr-xr-xoffapi/com/sun/star/awt/XMenuBarExtended.idl69
-rw-r--r--offapi/com/sun/star/awt/XMenuExtended.idl80
-rwxr-xr-xoffapi/com/sun/star/awt/XMenuExtended2.idl112
-rw-r--r--offapi/com/sun/star/awt/XMenuListener.idl79
-rw-r--r--offapi/com/sun/star/awt/XMessageBox.idl83
-rw-r--r--offapi/com/sun/star/awt/XMessageBoxFactory.idl108
-rw-r--r--offapi/com/sun/star/awt/XMetricField.idl163
-rw-r--r--offapi/com/sun/star/awt/XMouseClickHandler.idl83
-rw-r--r--offapi/com/sun/star/awt/XMouseListener.idl88
-rw-r--r--offapi/com/sun/star/awt/XMouseMotionHandler.idl90
-rw-r--r--offapi/com/sun/star/awt/XMouseMotionListener.idl74
-rw-r--r--offapi/com/sun/star/awt/XNumericField.idl149
-rw-r--r--offapi/com/sun/star/awt/XPaintListener.idl62
-rw-r--r--offapi/com/sun/star/awt/XPatternField.idl89
-rw-r--r--offapi/com/sun/star/awt/XPointer.idl64
-rw-r--r--offapi/com/sun/star/awt/XPopupMenu.idl96
-rwxr-xr-xoffapi/com/sun/star/awt/XPopupMenuExtended.idl361
-rw-r--r--offapi/com/sun/star/awt/XPrinter.idl124
-rw-r--r--offapi/com/sun/star/awt/XPrinterPropertySet.idl109
-rw-r--r--offapi/com/sun/star/awt/XPrinterServer.idl84
-rw-r--r--offapi/com/sun/star/awt/XProgressBar.idl89
-rw-r--r--offapi/com/sun/star/awt/XProgressMonitor.idl71
-rw-r--r--offapi/com/sun/star/awt/XRadioButton.idl86
-rw-r--r--offapi/com/sun/star/awt/XRegion.idl130
-rw-r--r--offapi/com/sun/star/awt/XRequestCallback.idl64
-rw-r--r--offapi/com/sun/star/awt/XReschedule.idl60
-rw-r--r--offapi/com/sun/star/awt/XScrollBar.idl150
-rw-r--r--offapi/com/sun/star/awt/XSimpleAnimation.idl72
-rw-r--r--offapi/com/sun/star/awt/XSimpleTabController.idl172
-rw-r--r--offapi/com/sun/star/awt/XSpinField.idl98
-rw-r--r--offapi/com/sun/star/awt/XSpinListener.idl79
-rw-r--r--offapi/com/sun/star/awt/XSpinValue.idl148
-rw-r--r--offapi/com/sun/star/awt/XStyleChangeListener.idl54
-rw-r--r--offapi/com/sun/star/awt/XStyleSettings.idl239
-rw-r--r--offapi/com/sun/star/awt/XStyleSettingsSupplier.idl53
-rw-r--r--offapi/com/sun/star/awt/XSystemChildFactory.idl84
-rw-r--r--offapi/com/sun/star/awt/XSystemDependentMenuPeer.idl77
-rw-r--r--offapi/com/sun/star/awt/XSystemDependentWindowPeer.idl87
-rw-r--r--offapi/com/sun/star/awt/XTabController.idl119
-rw-r--r--offapi/com/sun/star/awt/XTabControllerModel.idl107
-rw-r--r--offapi/com/sun/star/awt/XTabListener.idl97
-rw-r--r--offapi/com/sun/star/awt/XTextArea.idl57
-rw-r--r--offapi/com/sun/star/awt/XTextComponent.idl133
-rw-r--r--offapi/com/sun/star/awt/XTextEditField.idl57
-rw-r--r--offapi/com/sun/star/awt/XTextLayoutConstrains.idl68
-rw-r--r--offapi/com/sun/star/awt/XTextListener.idl61
-rw-r--r--offapi/com/sun/star/awt/XThrobber.idl65
-rw-r--r--offapi/com/sun/star/awt/XTimeField.idl141
-rw-r--r--offapi/com/sun/star/awt/XToggleButton.idl57
-rw-r--r--offapi/com/sun/star/awt/XToolkit.idl118
-rw-r--r--offapi/com/sun/star/awt/XTopWindow.idl93
-rw-r--r--offapi/com/sun/star/awt/XTopWindow2.idl77
-rw-r--r--offapi/com/sun/star/awt/XTopWindowListener.idl101
-rw-r--r--offapi/com/sun/star/awt/XUnitConversion.idl118
-rw-r--r--offapi/com/sun/star/awt/XUnoControlContainer.idl79
-rw-r--r--offapi/com/sun/star/awt/XUserInputInterception.idl100
-rw-r--r--offapi/com/sun/star/awt/XVclContainer.idl81
-rw-r--r--offapi/com/sun/star/awt/XVclContainerListener.idl74
-rw-r--r--offapi/com/sun/star/awt/XVclContainerPeer.idl77
-rw-r--r--offapi/com/sun/star/awt/XVclWindowPeer.idl121
-rw-r--r--offapi/com/sun/star/awt/XView.idl101
-rw-r--r--offapi/com/sun/star/awt/XWindow.idl210
-rw-r--r--offapi/com/sun/star/awt/XWindow2.idl102
-rw-r--r--offapi/com/sun/star/awt/XWindowListener.idl88
-rw-r--r--offapi/com/sun/star/awt/XWindowListener2.idl61
-rw-r--r--offapi/com/sun/star/awt/XWindowPeer.idl93
-rw-r--r--offapi/com/sun/star/awt/grid/DefaultGridColumnModel.idl52
-rw-r--r--offapi/com/sun/star/awt/grid/DefaultGridDataModel.idl53
-rw-r--r--offapi/com/sun/star/awt/grid/GridColumn.idl53
-rw-r--r--offapi/com/sun/star/awt/grid/GridColumnEvent.idl63
-rw-r--r--offapi/com/sun/star/awt/grid/GridControlEvent.idl54
-rw-r--r--offapi/com/sun/star/awt/grid/GridDataEvent.idl78
-rw-r--r--offapi/com/sun/star/awt/grid/GridInvalidDataException.idl58
-rw-r--r--offapi/com/sun/star/awt/grid/GridInvalidModelException.idl57
-rw-r--r--offapi/com/sun/star/awt/grid/GridSelectionEvent.idl71
-rw-r--r--offapi/com/sun/star/awt/grid/ScrollBarMode.idl70
-rw-r--r--offapi/com/sun/star/awt/grid/SelectionEventType.idl66
-rw-r--r--offapi/com/sun/star/awt/grid/UnoControlGrid.idl82
-rw-r--r--offapi/com/sun/star/awt/grid/UnoControlGridModel.idl163
-rw-r--r--offapi/com/sun/star/awt/grid/XGridCell.idl56
-rw-r--r--offapi/com/sun/star/awt/grid/XGridCellRenderer.idl52
-rw-r--r--offapi/com/sun/star/awt/grid/XGridColumn.idl111
-rw-r--r--offapi/com/sun/star/awt/grid/XGridColumnListener.idl73
-rw-r--r--offapi/com/sun/star/awt/grid/XGridColumnModel.idl119
-rw-r--r--offapi/com/sun/star/awt/grid/XGridControl.idl70
-rw-r--r--offapi/com/sun/star/awt/grid/XGridControlListener.idl49
-rw-r--r--offapi/com/sun/star/awt/grid/XGridDataListener.idl75
-rw-r--r--offapi/com/sun/star/awt/grid/XGridDataModel.idl134
-rw-r--r--offapi/com/sun/star/awt/grid/XGridSelection.idl127
-rw-r--r--offapi/com/sun/star/awt/grid/XGridSelectionListener.idl63
-rw-r--r--offapi/com/sun/star/awt/grid/makefile.mk66
-rw-r--r--offapi/com/sun/star/awt/makefile.mk342
-rw-r--r--offapi/com/sun/star/awt/tree/ExpandVetoException.idl58
-rw-r--r--offapi/com/sun/star/awt/tree/MutableTreeDataModel.idl55
-rw-r--r--offapi/com/sun/star/awt/tree/MutableTreeNode.idl50
-rw-r--r--offapi/com/sun/star/awt/tree/TreeControl.idl97
-rw-r--r--offapi/com/sun/star/awt/tree/TreeControlModel.idl114
-rw-r--r--offapi/com/sun/star/awt/tree/TreeDataModelEvent.idl68
-rw-r--r--offapi/com/sun/star/awt/tree/TreeExpansionEvent.idl59
-rw-r--r--offapi/com/sun/star/awt/tree/XMutableTreeDataModel.idl85
-rw-r--r--offapi/com/sun/star/awt/tree/XMutableTreeNode.idl122
-rw-r--r--offapi/com/sun/star/awt/tree/XTreeControl.idl295
-rw-r--r--offapi/com/sun/star/awt/tree/XTreeDataModel.idl92
-rw-r--r--offapi/com/sun/star/awt/tree/XTreeDataModelListener.idl95
-rw-r--r--offapi/com/sun/star/awt/tree/XTreeEditListener.idl89
-rw-r--r--offapi/com/sun/star/awt/tree/XTreeExpansionListener.idl92
-rw-r--r--offapi/com/sun/star/awt/tree/XTreeNode.idl105
-rw-r--r--offapi/com/sun/star/awt/tree/makefile.mk61
-rw-r--r--offapi/com/sun/star/chart/AccessibleChartDocumentView.idl143
-rw-r--r--offapi/com/sun/star/chart/AccessibleChartElement.idl195
-rw-r--r--offapi/com/sun/star/chart/AreaDiagram.idl82
-rw-r--r--offapi/com/sun/star/chart/BarDiagram.idl138
-rw-r--r--offapi/com/sun/star/chart/BubbleDiagram.idl66
-rw-r--r--offapi/com/sun/star/chart/Chart3DBarProperties.idl59
-rw-r--r--offapi/com/sun/star/chart/ChartArea.idl76
-rw-r--r--offapi/com/sun/star/chart/ChartAxis.idl311
-rw-r--r--offapi/com/sun/star/chart/ChartAxisArrangeOrderType.idl76
-rw-r--r--offapi/com/sun/star/chart/ChartAxisAssign.idl59
-rw-r--r--offapi/com/sun/star/chart/ChartAxisLabelPosition.idl75
-rw-r--r--offapi/com/sun/star/chart/ChartAxisMarkPosition.idl67
-rw-r--r--offapi/com/sun/star/chart/ChartAxisMarks.idl70
-rw-r--r--offapi/com/sun/star/chart/ChartAxisPosition.idl73
-rw-r--r--offapi/com/sun/star/chart/ChartAxisXSupplier.idl90
-rw-r--r--offapi/com/sun/star/chart/ChartAxisYSupplier.idl89
-rw-r--r--offapi/com/sun/star/chart/ChartAxisZSupplier.idl88
-rw-r--r--offapi/com/sun/star/chart/ChartData.idl53
-rw-r--r--offapi/com/sun/star/chart/ChartDataArray.idl65
-rw-r--r--offapi/com/sun/star/chart/ChartDataCaption.idl93
-rw-r--r--offapi/com/sun/star/chart/ChartDataChangeEvent.idl85
-rw-r--r--offapi/com/sun/star/chart/ChartDataChangeType.idl88
-rw-r--r--offapi/com/sun/star/chart/ChartDataPoint.idl47
-rw-r--r--offapi/com/sun/star/chart/ChartDataPointProperties.idl173
-rw-r--r--offapi/com/sun/star/chart/ChartDataRow.idl63
-rw-r--r--offapi/com/sun/star/chart/ChartDataRowProperties.idl127
-rw-r--r--offapi/com/sun/star/chart/ChartDataRowSource.idl61
-rw-r--r--offapi/com/sun/star/chart/ChartDataValue.idl67
-rw-r--r--offapi/com/sun/star/chart/ChartDocument.idl100
-rw-r--r--offapi/com/sun/star/chart/ChartErrorCategory.idl101
-rw-r--r--offapi/com/sun/star/chart/ChartErrorIndicatorType.idl70
-rw-r--r--offapi/com/sun/star/chart/ChartGrid.idl74
-rw-r--r--offapi/com/sun/star/chart/ChartLegend.idl100
-rw-r--r--offapi/com/sun/star/chart/ChartLegendPosition.idl93
-rw-r--r--offapi/com/sun/star/chart/ChartLine.idl57
-rw-r--r--offapi/com/sun/star/chart/ChartPieSegmentProperties.idl75
-rw-r--r--offapi/com/sun/star/chart/ChartRegressionCurveType.idl98
-rw-r--r--offapi/com/sun/star/chart/ChartSeriesAddress.idl69
-rw-r--r--offapi/com/sun/star/chart/ChartSolidType.idl72
-rw-r--r--offapi/com/sun/star/chart/ChartStatistics.idl183
-rw-r--r--offapi/com/sun/star/chart/ChartSymbolType.idl139
-rw-r--r--offapi/com/sun/star/chart/ChartTableAddressSupplier.idl80
-rw-r--r--offapi/com/sun/star/chart/ChartTitle.idl98
-rw-r--r--offapi/com/sun/star/chart/ChartTwoAxisXSupplier.idl87
-rw-r--r--offapi/com/sun/star/chart/ChartTwoAxisYSupplier.idl88
-rw-r--r--offapi/com/sun/star/chart/DataLabelPlacement.idl60
-rw-r--r--offapi/com/sun/star/chart/Diagram.idl148
-rw-r--r--offapi/com/sun/star/chart/Dim3DDiagram.idl84
-rw-r--r--offapi/com/sun/star/chart/DonutDiagram.idl54
-rwxr-xr-xoffapi/com/sun/star/chart/ErrorBarStyle.idl98
-rw-r--r--offapi/com/sun/star/chart/FilledNetDiagram.idl69
-rw-r--r--offapi/com/sun/star/chart/LineDiagram.idl161
-rw-r--r--offapi/com/sun/star/chart/MissingValueTreatment.idl50
-rw-r--r--offapi/com/sun/star/chart/NetDiagram.idl65
-rw-r--r--offapi/com/sun/star/chart/PieDiagram.idl57
-rw-r--r--offapi/com/sun/star/chart/StackableDiagram.idl68
-rw-r--r--offapi/com/sun/star/chart/StockDiagram.idl151
-rw-r--r--offapi/com/sun/star/chart/X3DDefaultSetter.idl67
-rw-r--r--offapi/com/sun/star/chart/X3DDisplay.idl84
-rw-r--r--offapi/com/sun/star/chart/XAxisXSupplier.idl105
-rw-r--r--offapi/com/sun/star/chart/XAxisYSupplier.idl105
-rw-r--r--offapi/com/sun/star/chart/XAxisZSupplier.idl102
-rw-r--r--offapi/com/sun/star/chart/XChartData.idl116
-rw-r--r--offapi/com/sun/star/chart/XChartDataArray.idl114
-rw-r--r--offapi/com/sun/star/chart/XChartDataChangeEventListener.idl71
-rw-r--r--offapi/com/sun/star/chart/XChartDocument.idl180
-rwxr-xr-xoffapi/com/sun/star/chart/XComplexDescriptionAccess.idl98
-rw-r--r--offapi/com/sun/star/chart/XDiagram.idl98
-rw-r--r--offapi/com/sun/star/chart/XDiagramPositioning.idl107
-rw-r--r--offapi/com/sun/star/chart/XSecondAxisTitleSupplier.idl24
-rw-r--r--offapi/com/sun/star/chart/XStatisticDisplay.idl99
-rw-r--r--offapi/com/sun/star/chart/XTwoAxisXSupplier.idl71
-rw-r--r--offapi/com/sun/star/chart/XTwoAxisYSupplier.idl68
-rw-r--r--offapi/com/sun/star/chart/XYDiagram.idl77
-rw-r--r--offapi/com/sun/star/chart/makefile.mk119
-rw-r--r--offapi/com/sun/star/chart2/Axis.idl142
-rw-r--r--offapi/com/sun/star/chart2/AxisOrientation.idl51
-rw-r--r--offapi/com/sun/star/chart2/AxisType.idl60
-rw-r--r--offapi/com/sun/star/chart2/Break.idl46
-rw-r--r--offapi/com/sun/star/chart2/CandleStickChartType.idl119
-rw-r--r--offapi/com/sun/star/chart2/ChartDocument.idl92
-rw-r--r--offapi/com/sun/star/chart2/ChartDocumentWrapper.idl67
-rw-r--r--offapi/com/sun/star/chart2/ChartType.idl63
-rw-r--r--offapi/com/sun/star/chart2/ChartTypeManager.idl56
-rw-r--r--offapi/com/sun/star/chart2/ChartTypeTemplate.idl25
-rw-r--r--offapi/com/sun/star/chart2/CoordinateSystem.idl56
-rw-r--r--offapi/com/sun/star/chart2/CoordinateSystemType.idl36
-rw-r--r--offapi/com/sun/star/chart2/CoordinateSystemTypeID.idl17
-rw-r--r--offapi/com/sun/star/chart2/CurveStyle.idl69
-rw-r--r--offapi/com/sun/star/chart2/CustomLegendEntry.idl50
-rw-r--r--offapi/com/sun/star/chart2/DataPoint.idl74
-rw-r--r--offapi/com/sun/star/chart2/DataPointGeometry3D.idl73
-rw-r--r--offapi/com/sun/star/chart2/DataPointLabel.idl78
-rw-r--r--offapi/com/sun/star/chart2/DataPointProperties.idl328
-rw-r--r--offapi/com/sun/star/chart2/DataSeries.idl198
-rw-r--r--offapi/com/sun/star/chart2/Diagram.idl135
-rw-r--r--offapi/com/sun/star/chart2/ErrorBar.idl89
-rw-r--r--offapi/com/sun/star/chart2/ExplicitIncrementData.idl96
-rw-r--r--offapi/com/sun/star/chart2/ExplicitScaleData.idl45
-rw-r--r--offapi/com/sun/star/chart2/ExplicitSubIncrement.idl30
-rw-r--r--offapi/com/sun/star/chart2/ExponentialScaling.idl55
-rw-r--r--offapi/com/sun/star/chart2/FillBitmap.idl119
-rw-r--r--offapi/com/sun/star/chart2/FormattedString.idl44
-rw-r--r--offapi/com/sun/star/chart2/GridProperties.idl63
-rw-r--r--offapi/com/sun/star/chart2/IncrementData.idl69
-rw-r--r--offapi/com/sun/star/chart2/InterpretedData.idl62
-rw-r--r--offapi/com/sun/star/chart2/Legend.idl101
-rw-r--r--offapi/com/sun/star/chart2/LegendExpansion.idl75
-rw-r--r--offapi/com/sun/star/chart2/LegendPosition.idl71
-rw-r--r--offapi/com/sun/star/chart2/LegendSymbolStyle.idl107
-rw-r--r--offapi/com/sun/star/chart2/LightSource.idl68
-rw-r--r--offapi/com/sun/star/chart2/LinearScaling.idl56
-rw-r--r--offapi/com/sun/star/chart2/LogarithmicScaling.idl54
-rw-r--r--offapi/com/sun/star/chart2/LogicTargetModel.idl41
-rw-r--r--offapi/com/sun/star/chart2/MutableDataSequence.idl62
-rw-r--r--offapi/com/sun/star/chart2/PieChartOffsetMode.idl60
-rw-r--r--offapi/com/sun/star/chart2/PowerScaling.idl55
-rw-r--r--offapi/com/sun/star/chart2/PropertyPool.idl68
-rw-r--r--offapi/com/sun/star/chart2/RegressionCurve.idl69
-rw-r--r--offapi/com/sun/star/chart2/RegressionCurveEquation.idl65
-rw-r--r--offapi/com/sun/star/chart2/RelativePosition.idl88
-rw-r--r--offapi/com/sun/star/chart2/RelativeSize.idl84
-rw-r--r--offapi/com/sun/star/chart2/ScaleData.idl97
-rw-r--r--offapi/com/sun/star/chart2/Scaling.idl53
-rw-r--r--offapi/com/sun/star/chart2/StackingDirection.idl52
-rw-r--r--offapi/com/sun/star/chart2/StandardDiagramCreationParameters.idl59
-rw-r--r--offapi/com/sun/star/chart2/SubIncrement.idl31
-rw-r--r--offapi/com/sun/star/chart2/Symbol.idl122
-rw-r--r--offapi/com/sun/star/chart2/SymbolStyle.idl73
-rw-r--r--offapi/com/sun/star/chart2/TextAnchor.idl51
-rw-r--r--offapi/com/sun/star/chart2/TickmarkStyle.idl61
-rw-r--r--offapi/com/sun/star/chart2/Title.idl94
-rw-r--r--offapi/com/sun/star/chart2/TransparencyStyle.idl62
-rw-r--r--offapi/com/sun/star/chart2/ViewLegendEntry.idl58
-rw-r--r--offapi/com/sun/star/chart2/XAxis.idl56
-rw-r--r--offapi/com/sun/star/chart2/XChartDocument.idl141
-rw-r--r--offapi/com/sun/star/chart2/XChartShape.idl96
-rw-r--r--offapi/com/sun/star/chart2/XChartShapeContainer.idl36
-rw-r--r--offapi/com/sun/star/chart2/XChartType.idl75
-rw-r--r--offapi/com/sun/star/chart2/XChartTypeContainer.idl82
-rw-r--r--offapi/com/sun/star/chart2/XChartTypeManager.idl27
-rw-r--r--offapi/com/sun/star/chart2/XChartTypeTemplate.idl240
-rw-r--r--offapi/com/sun/star/chart2/XColorScheme.idl67
-rw-r--r--offapi/com/sun/star/chart2/XCoordinateSystem.idl73
-rw-r--r--offapi/com/sun/star/chart2/XCoordinateSystemContainer.idl80
-rw-r--r--offapi/com/sun/star/chart2/XDataInterpreter.idl107
-rw-r--r--offapi/com/sun/star/chart2/XDataSeries.idl88
-rw-r--r--offapi/com/sun/star/chart2/XDataSeriesContainer.idl82
-rw-r--r--offapi/com/sun/star/chart2/XDefaultSizeTransmitter.idl64
-rw-r--r--offapi/com/sun/star/chart2/XDiagram.idl97
-rw-r--r--offapi/com/sun/star/chart2/XDiagramProvider.idl65
-rw-r--r--offapi/com/sun/star/chart2/XFastPropertyState.idl146
-rw-r--r--offapi/com/sun/star/chart2/XFormattedString.idl35
-rw-r--r--offapi/com/sun/star/chart2/XInternalDataProvider.idl95
-rw-r--r--offapi/com/sun/star/chart2/XLabeled.idl93
-rw-r--r--offapi/com/sun/star/chart2/XLegend.idl59
-rw-r--r--offapi/com/sun/star/chart2/XLegendEntry.idl30
-rw-r--r--offapi/com/sun/star/chart2/XLegendSymbolProvider.idl35
-rw-r--r--offapi/com/sun/star/chart2/XPlotter.idl128
-rw-r--r--offapi/com/sun/star/chart2/XRegressionCurve.idl66
-rw-r--r--offapi/com/sun/star/chart2/XRegressionCurveCalculator.idl152
-rw-r--r--offapi/com/sun/star/chart2/XRegressionCurveContainer.idl81
-rw-r--r--offapi/com/sun/star/chart2/XScaling.idl32
-rw-r--r--offapi/com/sun/star/chart2/XStyleSupplier.idl75
-rw-r--r--offapi/com/sun/star/chart2/XTarget.idl33
-rw-r--r--offapi/com/sun/star/chart2/XTitle.idl61
-rw-r--r--offapi/com/sun/star/chart2/XTitled.idl64
-rw-r--r--offapi/com/sun/star/chart2/XTransformation.idl101
-rw-r--r--offapi/com/sun/star/chart2/XUndoHelper.idl90
-rw-r--r--offapi/com/sun/star/chart2/XUndoManager.idl111
-rw-r--r--offapi/com/sun/star/chart2/XUndoSupplier.idl57
-rw-r--r--offapi/com/sun/star/chart2/data/DataFilter.idl68
-rw-r--r--offapi/com/sun/star/chart2/data/DataProvider.idl69
-rw-r--r--offapi/com/sun/star/chart2/data/DataSequence.idl157
-rw-r--r--offapi/com/sun/star/chart2/data/DataSequenceRole.idl108
-rw-r--r--offapi/com/sun/star/chart2/data/DataSink.idl60
-rw-r--r--offapi/com/sun/star/chart2/data/DataSource.idl60
-rw-r--r--offapi/com/sun/star/chart2/data/HighlightedRange.idl74
-rw-r--r--offapi/com/sun/star/chart2/data/LabelOrigin.idl100
-rw-r--r--offapi/com/sun/star/chart2/data/LabeledDataSequence.idl83
-rw-r--r--offapi/com/sun/star/chart2/data/RangeHighlightListener.idl60
-rw-r--r--offapi/com/sun/star/chart2/data/RangeHighlighter.idl58
-rw-r--r--offapi/com/sun/star/chart2/data/TabularDataProviderArguments.idl161
-rw-r--r--offapi/com/sun/star/chart2/data/XDataProvider.idl164
-rw-r--r--offapi/com/sun/star/chart2/data/XDataReceiver.idl122
-rw-r--r--offapi/com/sun/star/chart2/data/XDataSequence.idl138
-rw-r--r--offapi/com/sun/star/chart2/data/XDataSink.idl78
-rw-r--r--offapi/com/sun/star/chart2/data/XDataSource.idl83
-rw-r--r--offapi/com/sun/star/chart2/data/XDatabaseDataProvider.idl224
-rw-r--r--offapi/com/sun/star/chart2/data/XLabeledDataSequence.idl80
-rw-r--r--offapi/com/sun/star/chart2/data/XNumericalDataSequence.idl60
-rw-r--r--offapi/com/sun/star/chart2/data/XRangeHighlighter.idl80
-rw-r--r--offapi/com/sun/star/chart2/data/XRangeXMLConversion.idl72
-rw-r--r--offapi/com/sun/star/chart2/data/XTextualDataSequence.idl59
-rw-r--r--offapi/com/sun/star/chart2/data/makefile.mk60
-rw-r--r--offapi/com/sun/star/chart2/makefile.mk111
-rw-r--r--offapi/com/sun/star/configuration/AccessRootElement.idl176
-rw-r--r--offapi/com/sun/star/configuration/AdministrationProvider.idl191
-rw-r--r--offapi/com/sun/star/configuration/CannotLoadConfigurationException.idl51
-rw-r--r--offapi/com/sun/star/configuration/ConfigurationAccess.idl265
-rw-r--r--offapi/com/sun/star/configuration/ConfigurationProvider.idl251
-rw-r--r--offapi/com/sun/star/configuration/ConfigurationRegistry.idl108
-rw-r--r--offapi/com/sun/star/configuration/ConfigurationUpdateAccess.idl144
-rw-r--r--offapi/com/sun/star/configuration/CorruptedConfigurationException.idl61
-rw-r--r--offapi/com/sun/star/configuration/CorruptedUIConfigurationException.idl55
-rw-r--r--offapi/com/sun/star/configuration/DefaultProvider.idl100
-rw-r--r--offapi/com/sun/star/configuration/GroupAccess.idl143
-rw-r--r--offapi/com/sun/star/configuration/GroupElement.idl89
-rw-r--r--offapi/com/sun/star/configuration/GroupUpdate.idl93
-rw-r--r--offapi/com/sun/star/configuration/HierarchyAccess.idl187
-rw-r--r--offapi/com/sun/star/configuration/HierarchyElement.idl132
-rw-r--r--offapi/com/sun/star/configuration/InstallationIncompleteException.idl51
-rw-r--r--offapi/com/sun/star/configuration/InvalidBootstrapFileException.idl53
-rw-r--r--offapi/com/sun/star/configuration/MissingBootstrapFileException.idl53
-rw-r--r--offapi/com/sun/star/configuration/PropertyHierarchy.idl104
-rw-r--r--offapi/com/sun/star/configuration/SetAccess.idl105
-rw-r--r--offapi/com/sun/star/configuration/SetElement.idl186
-rw-r--r--offapi/com/sun/star/configuration/SetUpdate.idl105
-rw-r--r--offapi/com/sun/star/configuration/SimpleSetAccess.idl122
-rw-r--r--offapi/com/sun/star/configuration/SimpleSetUpdate.idl184
-rw-r--r--offapi/com/sun/star/configuration/Update.idl45
-rw-r--r--offapi/com/sun/star/configuration/UpdateRootElement.idl110
-rw-r--r--offapi/com/sun/star/configuration/XTemplateContainer.idl80
-rw-r--r--offapi/com/sun/star/configuration/XTemplateInstance.idl70
-rw-r--r--offapi/com/sun/star/configuration/XUpdate.idl57
-rw-r--r--offapi/com/sun/star/configuration/backend/AuthenticationFailedException.idl50
-rw-r--r--offapi/com/sun/star/configuration/backend/Backend.idl100
-rw-r--r--offapi/com/sun/star/configuration/backend/BackendAccessException.idl51
-rw-r--r--offapi/com/sun/star/configuration/backend/BackendAdapter.idl94
-rw-r--r--offapi/com/sun/star/configuration/backend/BackendSetupException.idl59
-rw-r--r--offapi/com/sun/star/configuration/backend/CannotConnectException.idl59
-rw-r--r--offapi/com/sun/star/configuration/backend/ComponentChangeEvent.idl58
-rw-r--r--offapi/com/sun/star/configuration/backend/ConnectionLostException.idl54
-rw-r--r--offapi/com/sun/star/configuration/backend/CopyImporter.idl89
-rw-r--r--offapi/com/sun/star/configuration/backend/DataImporter.idl127
-rw-r--r--offapi/com/sun/star/configuration/backend/DefaultBackend.idl64
-rw-r--r--offapi/com/sun/star/configuration/backend/HierarchyBrowser.idl85
-rw-r--r--offapi/com/sun/star/configuration/backend/Importer.idl87
-rw-r--r--offapi/com/sun/star/configuration/backend/InsufficientAccessRightsException.idl60
-rw-r--r--offapi/com/sun/star/configuration/backend/InteractionHandler.idl102
-rw-r--r--offapi/com/sun/star/configuration/backend/InvalidAuthenticationMechanismException.idl51
-rw-r--r--offapi/com/sun/star/configuration/backend/Layer.idl117
-rw-r--r--offapi/com/sun/star/configuration/backend/LayerDescriber.idl41
-rw-r--r--offapi/com/sun/star/configuration/backend/LayerFilter.idl94
-rw-r--r--offapi/com/sun/star/configuration/backend/LayerUpdateMerger.idl101
-rw-r--r--offapi/com/sun/star/configuration/backend/LdapMultiLayerStratum.idl60
-rw-r--r--offapi/com/sun/star/configuration/backend/LdapSingleBackend.idl61
-rw-r--r--offapi/com/sun/star/configuration/backend/LdapSingleStratum.idl60
-rw-r--r--offapi/com/sun/star/configuration/backend/LocalDataImporter.idl111
-rw-r--r--offapi/com/sun/star/configuration/backend/LocalHierarchyBrowser.idl92
-rw-r--r--offapi/com/sun/star/configuration/backend/LocalSchemaSupplier.idl61
-rw-r--r--offapi/com/sun/star/configuration/backend/LocalSingleBackend.idl61
-rw-r--r--offapi/com/sun/star/configuration/backend/LocalSingleStratum.idl60
-rw-r--r--offapi/com/sun/star/configuration/backend/MalformedDataException.idl91
-rw-r--r--offapi/com/sun/star/configuration/backend/MergeImporter.idl77
-rw-r--r--offapi/com/sun/star/configuration/backend/MergeRecoveryRequest.idl90
-rw-r--r--offapi/com/sun/star/configuration/backend/MultiLayerStratum.idl73
-rw-r--r--offapi/com/sun/star/configuration/backend/MultiStratumBackend.idl76
-rw-r--r--offapi/com/sun/star/configuration/backend/NodeAttribute.idl101
-rw-r--r--offapi/com/sun/star/configuration/backend/OfflineBackend.idl78
-rw-r--r--offapi/com/sun/star/configuration/backend/OnlineBackend.idl65
-rw-r--r--offapi/com/sun/star/configuration/backend/PlatformBackend.idl60
-rw-r--r--offapi/com/sun/star/configuration/backend/PropertyInfo.idl69
-rw-r--r--offapi/com/sun/star/configuration/backend/Schema.idl87
-rw-r--r--offapi/com/sun/star/configuration/backend/SchemaAttribute.idl80
-rw-r--r--offapi/com/sun/star/configuration/backend/SchemaSupplier.idl60
-rw-r--r--offapi/com/sun/star/configuration/backend/SingleBackend.idl101
-rw-r--r--offapi/com/sun/star/configuration/backend/SingleBackendAdapter.idl65
-rw-r--r--offapi/com/sun/star/configuration/backend/SingleLayerStratum.idl73
-rw-r--r--offapi/com/sun/star/configuration/backend/StratumCreationException.idl62
-rw-r--r--offapi/com/sun/star/configuration/backend/SystemIntegration.idl72
-rw-r--r--offapi/com/sun/star/configuration/backend/TemplateIdentifier.idl67
-rw-r--r--offapi/com/sun/star/configuration/backend/UpdatableLayer.idl127
-rw-r--r--offapi/com/sun/star/configuration/backend/XBackend.idl206
-rw-r--r--offapi/com/sun/star/configuration/backend/XBackendChangesListener.idl65
-rw-r--r--offapi/com/sun/star/configuration/backend/XBackendChangesNotifier.idl80
-rw-r--r--offapi/com/sun/star/configuration/backend/XBackendEntities.idl142
-rw-r--r--offapi/com/sun/star/configuration/backend/XCompositeLayer.idl118
-rw-r--r--offapi/com/sun/star/configuration/backend/XLayer.idl91
-rw-r--r--offapi/com/sun/star/configuration/backend/XLayerContentDescriber.idl95
-rw-r--r--offapi/com/sun/star/configuration/backend/XLayerHandler.idl570
-rw-r--r--offapi/com/sun/star/configuration/backend/XLayerImporter.idl163
-rw-r--r--offapi/com/sun/star/configuration/backend/XMultiLayerStratum.idl347
-rw-r--r--offapi/com/sun/star/configuration/backend/XSchema.idl148
-rw-r--r--offapi/com/sun/star/configuration/backend/XSchemaHandler.idl538
-rw-r--r--offapi/com/sun/star/configuration/backend/XSchemaSupplier.idl89
-rw-r--r--offapi/com/sun/star/configuration/backend/XSingleLayerStratum.idl151
-rw-r--r--offapi/com/sun/star/configuration/backend/XUpdatableLayer.idl92
-rw-r--r--offapi/com/sun/star/configuration/backend/XUpdateHandler.idl673
-rw-r--r--offapi/com/sun/star/configuration/backend/XVersionedSchemaSupplier.idl97
-rw-r--r--offapi/com/sun/star/configuration/backend/makefile.mk103
-rw-r--r--offapi/com/sun/star/configuration/backend/xml/LayerParser.idl98
-rw-r--r--offapi/com/sun/star/configuration/backend/xml/LayerWriter.idl93
-rw-r--r--offapi/com/sun/star/configuration/backend/xml/SchemaParser.idl93
-rw-r--r--offapi/com/sun/star/configuration/backend/xml/makefile.mk43
-rw-r--r--offapi/com/sun/star/configuration/bootstrap/BootstrapContext.idl76
-rw-r--r--offapi/com/sun/star/configuration/bootstrap/makefile.mk41
-rw-r--r--offapi/com/sun/star/configuration/makefile.mk74
-rw-r--r--offapi/com/sun/star/datatransfer/DataFlavor.idl64
-rw-r--r--offapi/com/sun/star/datatransfer/DataFormatTranslator.idl78
-rw-r--r--offapi/com/sun/star/datatransfer/MimeContentTypeFactory.idl86
-rw-r--r--offapi/com/sun/star/datatransfer/UnsupportedFlavorException.idl54
-rw-r--r--offapi/com/sun/star/datatransfer/XDataFormatTranslator.idl84
-rw-r--r--offapi/com/sun/star/datatransfer/XMimeContentType.idl115
-rw-r--r--offapi/com/sun/star/datatransfer/XMimeContentTypeFactory.idl82
-rw-r--r--offapi/com/sun/star/datatransfer/XSystemTransferable.idl72
-rw-r--r--offapi/com/sun/star/datatransfer/XTransferDataAccess.idl84
-rw-r--r--offapi/com/sun/star/datatransfer/XTransferable.idl110
-rw-r--r--offapi/com/sun/star/datatransfer/XTransferableEx.idl71
-rw-r--r--offapi/com/sun/star/datatransfer/XTransferableSource.idl59
-rw-r--r--offapi/com/sun/star/datatransfer/XTransferableSupplier.idl77
-rw-r--r--offapi/com/sun/star/datatransfer/clipboard/ClipboardEvent.idl61
-rw-r--r--offapi/com/sun/star/datatransfer/clipboard/ClipboardManager.idl84
-rw-r--r--offapi/com/sun/star/datatransfer/clipboard/GenericClipboard.idl96
-rw-r--r--offapi/com/sun/star/datatransfer/clipboard/RenderingCapabilities.idl59
-rw-r--r--offapi/com/sun/star/datatransfer/clipboard/SystemClipboard.idl114
-rw-r--r--offapi/com/sun/star/datatransfer/clipboard/XClipboard.idl100
-rw-r--r--offapi/com/sun/star/datatransfer/clipboard/XClipboardEx.idl62
-rw-r--r--offapi/com/sun/star/datatransfer/clipboard/XClipboardFactory.idl75
-rw-r--r--offapi/com/sun/star/datatransfer/clipboard/XClipboardListener.idl65
-rw-r--r--offapi/com/sun/star/datatransfer/clipboard/XClipboardManager.idl114
-rw-r--r--offapi/com/sun/star/datatransfer/clipboard/XClipboardNotifier.idl70
-rw-r--r--offapi/com/sun/star/datatransfer/clipboard/XClipboardOwner.idl73
-rw-r--r--offapi/com/sun/star/datatransfer/clipboard/XFlushableClipboard.idl60
-rw-r--r--offapi/com/sun/star/datatransfer/clipboard/makefile.mk59
-rw-r--r--offapi/com/sun/star/datatransfer/dnd/DNDConstants.idl89
-rw-r--r--offapi/com/sun/star/datatransfer/dnd/DragGestureEvent.idl96
-rw-r--r--offapi/com/sun/star/datatransfer/dnd/DragSourceDragEvent.idl72
-rw-r--r--offapi/com/sun/star/datatransfer/dnd/DragSourceDropEvent.idl70
-rw-r--r--offapi/com/sun/star/datatransfer/dnd/DragSourceEvent.idl73
-rw-r--r--offapi/com/sun/star/datatransfer/dnd/DropTargetDragEnterEvent.idl69
-rw-r--r--offapi/com/sun/star/datatransfer/dnd/DropTargetDragEvent.idl97
-rw-r--r--offapi/com/sun/star/datatransfer/dnd/DropTargetDropEvent.idl106
-rw-r--r--offapi/com/sun/star/datatransfer/dnd/DropTargetEvent.idl61
-rw-r--r--offapi/com/sun/star/datatransfer/dnd/InvalidDNDOperationException.idl56
-rw-r--r--offapi/com/sun/star/datatransfer/dnd/OleDragSource.idl102
-rw-r--r--offapi/com/sun/star/datatransfer/dnd/OleDropTarget.idl94
-rw-r--r--offapi/com/sun/star/datatransfer/dnd/X11DragSource.idl97
-rw-r--r--offapi/com/sun/star/datatransfer/dnd/X11DropTarget.idl100
-rw-r--r--offapi/com/sun/star/datatransfer/dnd/XAutoscroll.idl90
-rw-r--r--offapi/com/sun/star/datatransfer/dnd/XDragGestureListener.idl70
-rw-r--r--offapi/com/sun/star/datatransfer/dnd/XDragGestureRecognizer.idl84
-rw-r--r--offapi/com/sun/star/datatransfer/dnd/XDragSource.idl139
-rw-r--r--offapi/com/sun/star/datatransfer/dnd/XDragSourceContext.idl107
-rw-r--r--offapi/com/sun/star/datatransfer/dnd/XDragSourceListener.idl114
-rw-r--r--offapi/com/sun/star/datatransfer/dnd/XDropTarget.idl130
-rw-r--r--offapi/com/sun/star/datatransfer/dnd/XDropTargetDragContext.idl91
-rw-r--r--offapi/com/sun/star/datatransfer/dnd/XDropTargetDropContext.idl96
-rw-r--r--offapi/com/sun/star/datatransfer/dnd/XDropTargetListener.idl116
-rw-r--r--offapi/com/sun/star/datatransfer/dnd/makefile.mk70
-rw-r--r--offapi/com/sun/star/datatransfer/makefile.mk59
-rw-r--r--offapi/com/sun/star/deployment/DependencyException.idl71
-rw-r--r--offapi/com/sun/star/deployment/DeploymentException.idl49
-rw-r--r--offapi/com/sun/star/deployment/ExtensionManager.idl49
-rw-r--r--offapi/com/sun/star/deployment/ExtensionRemovedException.idl50
-rw-r--r--offapi/com/sun/star/deployment/InstallException.idl57
-rw-r--r--offapi/com/sun/star/deployment/InvalidRemovedParameterException.idl62
-rw-r--r--offapi/com/sun/star/deployment/LicenseException.idl61
-rw-r--r--offapi/com/sun/star/deployment/PackageInformationProvider.idl40
-rw-r--r--offapi/com/sun/star/deployment/PackageRegistryBackend.idl70
-rw-r--r--offapi/com/sun/star/deployment/PlatformException.idl50
-rw-r--r--offapi/com/sun/star/deployment/Prerequisites.idl45
-rw-r--r--offapi/com/sun/star/deployment/UpdateInformationEntry.idl52
-rw-r--r--offapi/com/sun/star/deployment/UpdateInformationProvider.idl40
-rw-r--r--offapi/com/sun/star/deployment/VersionException.idl65
-rw-r--r--offapi/com/sun/star/deployment/XExtensionManager.idl342
-rw-r--r--offapi/com/sun/star/deployment/XPackage.idl358
-rw-r--r--offapi/com/sun/star/deployment/XPackageInformationProvider.idl70
-rw-r--r--offapi/com/sun/star/deployment/XPackageManager.idl314
-rw-r--r--offapi/com/sun/star/deployment/XPackageManagerFactory.idl100
-rw-r--r--offapi/com/sun/star/deployment/XPackageRegistry.idl122
-rw-r--r--offapi/com/sun/star/deployment/XPackageTypeInfo.idl94
-rw-r--r--offapi/com/sun/star/deployment/XUpdateInformationProvider.idl109
-rw-r--r--offapi/com/sun/star/deployment/makefile.mk64
-rw-r--r--offapi/com/sun/star/deployment/test/SmoketestCommandEnvironment.idl43
-rw-r--r--offapi/com/sun/star/deployment/test/makefile.mk41
-rw-r--r--offapi/com/sun/star/deployment/thePackageManagerFactory.idl53
-rw-r--r--offapi/com/sun/star/deployment/ui/LicenseDialog.idl61
-rw-r--r--offapi/com/sun/star/deployment/ui/PackageManagerDialog.idl74
-rw-r--r--offapi/com/sun/star/deployment/ui/UpdateRequiredDialog.idl54
-rw-r--r--offapi/com/sun/star/deployment/ui/makefile.mk43
-rw-r--r--offapi/com/sun/star/document/AmbigousFilterRequest.idl75
-rw-r--r--offapi/com/sun/star/document/BrokenPackageRequest.idl56
-rw-r--r--offapi/com/sun/star/document/ChangedByOthersRequest.idl61
-rw-r--r--offapi/com/sun/star/document/CorruptedFilterConfigurationException.idl57
-rw-r--r--offapi/com/sun/star/document/DocumentEvent.idl85
-rw-r--r--offapi/com/sun/star/document/DocumentInfo.idl272
-rwxr-xr-xoffapi/com/sun/star/document/DocumentProperties.idl64
-rw-r--r--offapi/com/sun/star/document/DocumentRevisionListPersistence.idl51
-rw-r--r--offapi/com/sun/star/document/EventDescriptor.idl68
-rw-r--r--offapi/com/sun/star/document/EventObject.idl63
-rw-r--r--offapi/com/sun/star/document/Events.idl105
-rw-r--r--offapi/com/sun/star/document/ExportFilter.idl136
-rw-r--r--offapi/com/sun/star/document/ExtendedTypeDetection.idl109
-rw-r--r--offapi/com/sun/star/document/ExtendedTypeDetectionFactory.idl154
-rw-r--r--offapi/com/sun/star/document/FilterAdapter.idl53
-rw-r--r--offapi/com/sun/star/document/FilterFactory.idl251
-rw-r--r--offapi/com/sun/star/document/FilterOptionsRequest.idl68
-rw-r--r--offapi/com/sun/star/document/HeaderFooterSettings.idl73
-rw-r--r--offapi/com/sun/star/document/ImportFilter.idl136
-rw-r--r--offapi/com/sun/star/document/LinkTarget.idl69
-rw-r--r--offapi/com/sun/star/document/LinkTargets.idl58
-rw-r--r--offapi/com/sun/star/document/LinkUpdateModes.idl61
-rw-r--r--offapi/com/sun/star/document/LockFileIgnoreRequest.idl61
-rw-r--r--offapi/com/sun/star/document/LockedDocumentRequest.idl68
-rw-r--r--offapi/com/sun/star/document/LockedOnSavingRequest.idl69
-rw-r--r--offapi/com/sun/star/document/MacroExecMode.idl132
-rw-r--r--offapi/com/sun/star/document/MediaDescriptor.idl617
-rw-r--r--offapi/com/sun/star/document/NoSuchFilterRequest.idl69
-rw-r--r--offapi/com/sun/star/document/OOXMLDocumentPropertiesImporter.idl48
-rw-r--r--offapi/com/sun/star/document/OfficeDocument.idl230
-rw-r--r--offapi/com/sun/star/document/OleEmbeddedServerRegistration.idl64
-rw-r--r--offapi/com/sun/star/document/OwnLockOnDocumentRequest.idl72
-rw-r--r--offapi/com/sun/star/document/PDFDialog.idl64
-rw-r--r--offapi/com/sun/star/document/PrinterIndependentLayout.idl66
-rw-r--r--offapi/com/sun/star/document/RedlineDisplayType.idl60
-rw-r--r--offapi/com/sun/star/document/Settings.idl291
-rw-r--r--offapi/com/sun/star/document/StandaloneDocumentInfo.idl79
-rw-r--r--offapi/com/sun/star/document/TypeDetection.idl198
-rw-r--r--offapi/com/sun/star/document/UpdateDocMode.idl75
-rw-r--r--offapi/com/sun/star/document/XActionLockable.idl88
-rw-r--r--offapi/com/sun/star/document/XBinaryStreamResolver.idl84
-rwxr-xr-xoffapi/com/sun/star/document/XCodeNameQuery.idl56
-rw-r--r--offapi/com/sun/star/document/XDocumentEventBroadcaster.idl125
-rw-r--r--offapi/com/sun/star/document/XDocumentEventListener.idl65
-rw-r--r--offapi/com/sun/star/document/XDocumentInfo.idl147
-rw-r--r--offapi/com/sun/star/document/XDocumentInfoSupplier.idl74
-rw-r--r--offapi/com/sun/star/document/XDocumentInsertable.idl72
-rw-r--r--offapi/com/sun/star/document/XDocumentLanguages.idl64
-rwxr-xr-xoffapi/com/sun/star/document/XDocumentProperties.idl460
-rw-r--r--offapi/com/sun/star/document/XDocumentPropertiesSupplier.idl70
-rw-r--r--offapi/com/sun/star/document/XDocumentRecovery.idl127
-rw-r--r--offapi/com/sun/star/document/XDocumentRevisionListPersistence.idl90
-rw-r--r--offapi/com/sun/star/document/XDocumentSubStorageSupplier.idl87
-rw-r--r--offapi/com/sun/star/document/XEmbeddedObjectResolver.idl54
-rw-r--r--offapi/com/sun/star/document/XEmbeddedObjectSupplier.idl60
-rw-r--r--offapi/com/sun/star/document/XEmbeddedObjectSupplier2.idl80
-rw-r--r--offapi/com/sun/star/document/XEmbeddedScripts.idl72
-rw-r--r--offapi/com/sun/star/document/XEventBroadcaster.idl72
-rw-r--r--offapi/com/sun/star/document/XEventListener.idl66
-rw-r--r--offapi/com/sun/star/document/XEventsSupplier.idl57
-rw-r--r--offapi/com/sun/star/document/XExporter.idl78
-rw-r--r--offapi/com/sun/star/document/XExtendedFilterDetection.idl82
-rw-r--r--offapi/com/sun/star/document/XFilter.idl88
-rw-r--r--offapi/com/sun/star/document/XFilterAdapter.idl67
-rw-r--r--offapi/com/sun/star/document/XGraphicObjectResolver.idl54
-rw-r--r--offapi/com/sun/star/document/XImporter.idl78
-rw-r--r--offapi/com/sun/star/document/XInteractionFilterOptions.idl69
-rw-r--r--offapi/com/sun/star/document/XInteractionFilterSelect.idl80
-rw-r--r--offapi/com/sun/star/document/XLinkTargetSupplier.idl65
-rw-r--r--offapi/com/sun/star/document/XMLBasicExporter.idl84
-rw-r--r--offapi/com/sun/star/document/XMLBasicImporter.idl75
-rw-r--r--offapi/com/sun/star/document/XMLOasisBasicExporter.idl84
-rw-r--r--offapi/com/sun/star/document/XMLOasisBasicImporter.idl75
-rw-r--r--offapi/com/sun/star/document/XMimeTypeInfo.idl63
-rw-r--r--offapi/com/sun/star/document/XOOXMLDocumentPropertiesImporter.idl105
-rw-r--r--offapi/com/sun/star/document/XRedlinesSupplier.idl60
-rw-r--r--offapi/com/sun/star/document/XScriptInvocationContext.idl73
-rw-r--r--offapi/com/sun/star/document/XStandaloneDocumentInfo.idl105
-rw-r--r--offapi/com/sun/star/document/XStorageBasedDocument.idl123
-rw-r--r--offapi/com/sun/star/document/XStorageChangeListener.idl70
-rw-r--r--offapi/com/sun/star/document/XTypeDetection.idl124
-rw-r--r--offapi/com/sun/star/document/XViewDataSupplier.idl76
-rw-r--r--offapi/com/sun/star/document/makefile.mk123
-rw-r--r--offapi/com/sun/star/drawing/AccessibleDrawDocumentView.idl142
-rw-r--r--offapi/com/sun/star/drawing/AccessibleGraphControl.idl83
-rw-r--r--offapi/com/sun/star/drawing/AccessibleGraphicShape.idl100
-rw-r--r--offapi/com/sun/star/drawing/AccessibleImageBullet.idl111
-rw-r--r--offapi/com/sun/star/drawing/AccessibleOLEShape.idl87
-rw-r--r--offapi/com/sun/star/drawing/AccessibleShape.idl206
-rw-r--r--offapi/com/sun/star/drawing/AccessibleSlideView.idl65
-rw-r--r--offapi/com/sun/star/drawing/AccessibleSlideViewObject.idl64
-rw-r--r--offapi/com/sun/star/drawing/Alignment.idl104
-rw-r--r--offapi/com/sun/star/drawing/AppletShape.idl98
-rw-r--r--offapi/com/sun/star/drawing/Arrangement.idl80
-rw-r--r--offapi/com/sun/star/drawing/Background.idl54
-rw-r--r--offapi/com/sun/star/drawing/BezierPoint.idl77
-rw-r--r--offapi/com/sun/star/drawing/BitmapMode.idl66
-rw-r--r--offapi/com/sun/star/drawing/BitmapTable.idl64
-rw-r--r--offapi/com/sun/star/drawing/BoundVolume.idl60
-rw-r--r--offapi/com/sun/star/drawing/CameraGeometry.idl64
-rw-r--r--offapi/com/sun/star/drawing/CaptionEscapeDirection.idl67
-rw-r--r--offapi/com/sun/star/drawing/CaptionShape.idl158
-rw-r--r--offapi/com/sun/star/drawing/CaptionType.idl66
-rw-r--r--offapi/com/sun/star/drawing/CircleKind.idl77
-rw-r--r--offapi/com/sun/star/drawing/ClosedBezierShape.idl89
-rw-r--r--offapi/com/sun/star/drawing/ColorMode.idl79
-rw-r--r--offapi/com/sun/star/drawing/ConnectionType.idl92
-rw-r--r--offapi/com/sun/star/drawing/ConnectorProperties.idl82
-rw-r--r--offapi/com/sun/star/drawing/ConnectorShape.idl152
-rw-r--r--offapi/com/sun/star/drawing/ConnectorType.idl78
-rw-r--r--offapi/com/sun/star/drawing/ControlShape.idl61
-rw-r--r--offapi/com/sun/star/drawing/CoordinateSequence.idl45
-rw-r--r--offapi/com/sun/star/drawing/CoordinateSequenceSequence.idl48
-rw-r--r--offapi/com/sun/star/drawing/CustomShape.idl116
-rw-r--r--offapi/com/sun/star/drawing/CustomShapeEngine.idl64
-rw-r--r--offapi/com/sun/star/drawing/DashStyle.idl79
-rw-r--r--offapi/com/sun/star/drawing/DashTable.idl64
-rw-r--r--offapi/com/sun/star/drawing/Defaults.idl80
-rw-r--r--offapi/com/sun/star/drawing/Direction3D.idl64
-rw-r--r--offapi/com/sun/star/drawing/DocumentSettings.idl109
-rw-r--r--offapi/com/sun/star/drawing/DoubleSequence.idl44
-rw-r--r--offapi/com/sun/star/drawing/DoubleSequenceSequence.idl48
-rw-r--r--offapi/com/sun/star/drawing/DrawPage.idl88
-rw-r--r--offapi/com/sun/star/drawing/DrawPages.idl80
-rw-r--r--offapi/com/sun/star/drawing/DrawViewMode.idl72
-rw-r--r--offapi/com/sun/star/drawing/DrawingDocument.idl54
-rw-r--r--offapi/com/sun/star/drawing/DrawingDocumentDrawView.idl203
-rw-r--r--offapi/com/sun/star/drawing/DrawingDocumentFactory.idl54
-rw-r--r--offapi/com/sun/star/drawing/EllipseShape.idl105
-rw-r--r--offapi/com/sun/star/drawing/EnhancedCustomShapeAdjustmentValue.idl58
-rw-r--r--offapi/com/sun/star/drawing/EnhancedCustomShapeExtrusion.idl176
-rw-r--r--offapi/com/sun/star/drawing/EnhancedCustomShapeGeometry.idl119
-rw-r--r--offapi/com/sun/star/drawing/EnhancedCustomShapeGluePointType.idl64
-rw-r--r--offapi/com/sun/star/drawing/EnhancedCustomShapeHandle.idl121
-rw-r--r--offapi/com/sun/star/drawing/EnhancedCustomShapeParameter.idl54
-rw-r--r--offapi/com/sun/star/drawing/EnhancedCustomShapeParameterPair.idl56
-rw-r--r--offapi/com/sun/star/drawing/EnhancedCustomShapeParameterType.idl107
-rw-r--r--offapi/com/sun/star/drawing/EnhancedCustomShapePath.idl119
-rw-r--r--offapi/com/sun/star/drawing/EnhancedCustomShapeSegment.idl54
-rw-r--r--offapi/com/sun/star/drawing/EnhancedCustomShapeSegmentCommand.idl115
-rw-r--r--offapi/com/sun/star/drawing/EnhancedCustomShapeTextFrame.idl57
-rw-r--r--offapi/com/sun/star/drawing/EnhancedCustomShapeTextPath.idl63
-rw-r--r--offapi/com/sun/star/drawing/EnhancedCustomShapeTextPathMode.idl57
-rw-r--r--offapi/com/sun/star/drawing/EscapeDirection.idl76
-rw-r--r--offapi/com/sun/star/drawing/FillProperties.idl274
-rw-r--r--offapi/com/sun/star/drawing/FillStyle.idl89
-rw-r--r--offapi/com/sun/star/drawing/FlagSequence.idl48
-rw-r--r--offapi/com/sun/star/drawing/FlagSequenceSequence.idl49
-rw-r--r--offapi/com/sun/star/drawing/GenericDrawPage.idl238
-rw-r--r--offapi/com/sun/star/drawing/GenericDrawingDocument.idl240
-rw-r--r--offapi/com/sun/star/drawing/GluePoint.idl91
-rw-r--r--offapi/com/sun/star/drawing/GluePoint2.idl89
-rw-r--r--offapi/com/sun/star/drawing/GradientTable.idl64
-rw-r--r--offapi/com/sun/star/drawing/GraphicExportFilter.idl104
-rw-r--r--offapi/com/sun/star/drawing/GraphicFilterRequest.idl56
-rw-r--r--offapi/com/sun/star/drawing/GraphicObjectShape.idl160
-rw-r--r--offapi/com/sun/star/drawing/GroupShape.idl76
-rw-r--r--offapi/com/sun/star/drawing/Hatch.idl86
-rw-r--r--offapi/com/sun/star/drawing/HatchStyle.idl70
-rw-r--r--offapi/com/sun/star/drawing/HatchTable.idl64
-rw-r--r--offapi/com/sun/star/drawing/HomogenMatrix.idl74
-rw-r--r--offapi/com/sun/star/drawing/HomogenMatrix3.idl64
-rw-r--r--offapi/com/sun/star/drawing/HomogenMatrix4.idl68
-rw-r--r--offapi/com/sun/star/drawing/HomogenMatrixLine.idl70
-rw-r--r--offapi/com/sun/star/drawing/HomogenMatrixLine3.idl59
-rw-r--r--offapi/com/sun/star/drawing/HomogenMatrixLine4.idl63
-rw-r--r--offapi/com/sun/star/drawing/HorizontalDimensioning.idl79
-rw-r--r--offapi/com/sun/star/drawing/Layer.idl106
-rw-r--r--offapi/com/sun/star/drawing/LayerManager.idl80
-rw-r--r--offapi/com/sun/star/drawing/LayerType.idl77
-rw-r--r--offapi/com/sun/star/drawing/LineDash.idl94
-rw-r--r--offapi/com/sun/star/drawing/LineEndType.idl92
-rw-r--r--offapi/com/sun/star/drawing/LineJoint.idl74
-rw-r--r--offapi/com/sun/star/drawing/LineProperties.idl161
-rw-r--r--offapi/com/sun/star/drawing/LineShape.idl82
-rw-r--r--offapi/com/sun/star/drawing/LineStyle.idl74
-rw-r--r--offapi/com/sun/star/drawing/MarkerTable.idl64
-rw-r--r--offapi/com/sun/star/drawing/MasterPage.idl77
-rw-r--r--offapi/com/sun/star/drawing/MasterPages.idl60
-rw-r--r--offapi/com/sun/star/drawing/MeasureKind.idl69
-rw-r--r--offapi/com/sun/star/drawing/MeasureProperties.idl154
-rw-r--r--offapi/com/sun/star/drawing/MeasureShape.idl94
-rw-r--r--offapi/com/sun/star/drawing/MeasureTextHorzPos.idl75
-rw-r--r--offapi/com/sun/star/drawing/MeasureTextVertPos.idl80
-rw-r--r--offapi/com/sun/star/drawing/MirrorAxis.idl63
-rw-r--r--offapi/com/sun/star/drawing/NormalsKind.idl73
-rw-r--r--offapi/com/sun/star/drawing/OLE2Shape.idl89
-rw-r--r--offapi/com/sun/star/drawing/OpenBezierShape.idl84
-rw-r--r--offapi/com/sun/star/drawing/PageShape.idl67
-rw-r--r--offapi/com/sun/star/drawing/PluginShape.idl82
-rw-r--r--offapi/com/sun/star/drawing/PointSequence.idl48
-rw-r--r--offapi/com/sun/star/drawing/PointSequenceSequence.idl48
-rw-r--r--offapi/com/sun/star/drawing/PolyLineShape.idl84
-rw-r--r--offapi/com/sun/star/drawing/PolyPolygonBezierCoords.idl66
-rw-r--r--offapi/com/sun/star/drawing/PolyPolygonBezierDescriptor.idl75
-rw-r--r--offapi/com/sun/star/drawing/PolyPolygonBezierShape.idl90
-rw-r--r--offapi/com/sun/star/drawing/PolyPolygonDescriptor.idl74
-rw-r--r--offapi/com/sun/star/drawing/PolyPolygonShape.idl92
-rw-r--r--offapi/com/sun/star/drawing/PolyPolygonShape3D.idl68
-rw-r--r--offapi/com/sun/star/drawing/PolygonFlags.idl81
-rw-r--r--offapi/com/sun/star/drawing/PolygonKind.idl112
-rw-r--r--offapi/com/sun/star/drawing/Position3D.idl70
-rw-r--r--offapi/com/sun/star/drawing/ProjectionMode.idl66
-rw-r--r--offapi/com/sun/star/drawing/RectanglePoint.idl121
-rw-r--r--offapi/com/sun/star/drawing/RectangleShape.idl90
-rw-r--r--offapi/com/sun/star/drawing/RotationDescriptor.idl77
-rw-r--r--offapi/com/sun/star/drawing/ShadeMode.idl80
-rw-r--r--offapi/com/sun/star/drawing/ShadowProperties.idl86
-rw-r--r--offapi/com/sun/star/drawing/Shape.idl210
-rw-r--r--offapi/com/sun/star/drawing/ShapeCollection.idl67
-rw-r--r--offapi/com/sun/star/drawing/Shapes.idl56
-rw-r--r--offapi/com/sun/star/drawing/SlideRenderer.idl48
-rw-r--r--offapi/com/sun/star/drawing/SlideSorter.idl160
-rw-r--r--offapi/com/sun/star/drawing/SnapObjectType.idl67
-rw-r--r--offapi/com/sun/star/drawing/Text.idl65
-rw-r--r--offapi/com/sun/star/drawing/TextAdjust.idl90
-rw-r--r--offapi/com/sun/star/drawing/TextAnimationDirection.idl73
-rw-r--r--offapi/com/sun/star/drawing/TextAnimationKind.idl84
-rw-r--r--offapi/com/sun/star/drawing/TextFitToSizeType.idl74
-rw-r--r--offapi/com/sun/star/drawing/TextHorizontalAdjust.idl73
-rw-r--r--offapi/com/sun/star/drawing/TextProperties.idl334
-rw-r--r--offapi/com/sun/star/drawing/TextShape.idl87
-rw-r--r--offapi/com/sun/star/drawing/TextVerticalAdjust.idl76
-rw-r--r--offapi/com/sun/star/drawing/TextureKind.idl67
-rw-r--r--offapi/com/sun/star/drawing/TextureKind2.idl66
-rw-r--r--offapi/com/sun/star/drawing/TextureMode.idl71
-rw-r--r--offapi/com/sun/star/drawing/TextureProjectionMode.idl76
-rw-r--r--offapi/com/sun/star/drawing/TransparencyGradientTable.idl64
-rw-r--r--offapi/com/sun/star/drawing/VerticalDimensioning.idl79
-rw-r--r--offapi/com/sun/star/drawing/XConnectableShape.idl72
-rw-r--r--offapi/com/sun/star/drawing/XConnectorShape.idl92
-rw-r--r--offapi/com/sun/star/drawing/XControlShape.idl83
-rw-r--r--offapi/com/sun/star/drawing/XCustomShapeEngine.idl87
-rw-r--r--offapi/com/sun/star/drawing/XCustomShapeHandle.idl68
-rw-r--r--offapi/com/sun/star/drawing/XDrawPage.idl52
-rw-r--r--offapi/com/sun/star/drawing/XDrawPageDuplicator.idl73
-rw-r--r--offapi/com/sun/star/drawing/XDrawPageExpander.idl74
-rw-r--r--offapi/com/sun/star/drawing/XDrawPageSummarizer.idl72
-rw-r--r--offapi/com/sun/star/drawing/XDrawPageSupplier.idl71
-rw-r--r--offapi/com/sun/star/drawing/XDrawPages.idl90
-rw-r--r--offapi/com/sun/star/drawing/XDrawPagesSupplier.idl62
-rw-r--r--offapi/com/sun/star/drawing/XDrawSubController.idl74
-rw-r--r--offapi/com/sun/star/drawing/XDrawView.idl76
-rw-r--r--offapi/com/sun/star/drawing/XEnhancedCustomShapeDefaulter.idl295
-rw-r--r--offapi/com/sun/star/drawing/XGluePointsSupplier.idl58
-rw-r--r--offapi/com/sun/star/drawing/XLayer.idl52
-rw-r--r--offapi/com/sun/star/drawing/XLayerManager.idl117
-rw-r--r--offapi/com/sun/star/drawing/XLayerSupplier.idl66
-rw-r--r--offapi/com/sun/star/drawing/XMasterPageTarget.idl74
-rw-r--r--offapi/com/sun/star/drawing/XMasterPagesSupplier.idl64
-rw-r--r--offapi/com/sun/star/drawing/XPresenterHelper.idl179
-rw-r--r--offapi/com/sun/star/drawing/XSelectionFunction.idl86
-rw-r--r--offapi/com/sun/star/drawing/XShape.idl102
-rw-r--r--offapi/com/sun/star/drawing/XShapeAligner.idl72
-rw-r--r--offapi/com/sun/star/drawing/XShapeArranger.idl121
-rw-r--r--offapi/com/sun/star/drawing/XShapeBinder.idl89
-rw-r--r--offapi/com/sun/star/drawing/XShapeCombiner.idl92
-rw-r--r--offapi/com/sun/star/drawing/XShapeDescriptor.idl61
-rw-r--r--offapi/com/sun/star/drawing/XShapeGroup.idl85
-rw-r--r--offapi/com/sun/star/drawing/XShapeGrouper.idl93
-rw-r--r--offapi/com/sun/star/drawing/XShapeMirror.idl83
-rw-r--r--offapi/com/sun/star/drawing/XShapes.idl80
-rw-r--r--offapi/com/sun/star/drawing/XSlidePreviewCache.idl143
-rw-r--r--offapi/com/sun/star/drawing/XSlideRenderer.idl112
-rw-r--r--offapi/com/sun/star/drawing/XUniversalShapeDescriptor.idl59
-rw-r--r--offapi/com/sun/star/drawing/framework/AnchorBindingMode.idl54
-rw-r--r--offapi/com/sun/star/drawing/framework/BasicPaneFactory.idl62
-rw-r--r--offapi/com/sun/star/drawing/framework/BasicToolBarFactory.idl65
-rw-r--r--offapi/com/sun/star/drawing/framework/BasicViewFactory.idl67
-rw-r--r--offapi/com/sun/star/drawing/framework/Configuration.idl58
-rw-r--r--offapi/com/sun/star/drawing/framework/ConfigurationChangeEvent.idl87
-rw-r--r--offapi/com/sun/star/drawing/framework/ConfigurationController.idl63
-rw-r--r--offapi/com/sun/star/drawing/framework/ModuleController.idl59
-rw-r--r--offapi/com/sun/star/drawing/framework/ResourceActivationMode.idl54
-rw-r--r--offapi/com/sun/star/drawing/framework/ResourceId.idl70
-rw-r--r--offapi/com/sun/star/drawing/framework/TabBarButton.idl64
-rw-r--r--offapi/com/sun/star/drawing/framework/XConfiguration.idl138
-rw-r--r--offapi/com/sun/star/drawing/framework/XConfigurationChangeListener.idl57
-rw-r--r--offapi/com/sun/star/drawing/framework/XConfigurationChangeRequest.idl68
-rw-r--r--offapi/com/sun/star/drawing/framework/XConfigurationController.idl272
-rw-r--r--offapi/com/sun/star/drawing/framework/XConfigurationControllerBroadcaster.idl91
-rw-r--r--offapi/com/sun/star/drawing/framework/XConfigurationControllerRequestQueue.idl77
-rw-r--r--offapi/com/sun/star/drawing/framework/XControllerManager.idl63
-rw-r--r--offapi/com/sun/star/drawing/framework/XModuleController.idl67
-rw-r--r--offapi/com/sun/star/drawing/framework/XPane.idl75
-rw-r--r--offapi/com/sun/star/drawing/framework/XPane2.idl76
-rw-r--r--offapi/com/sun/star/drawing/framework/XPaneBorderPainter.idl161
-rw-r--r--offapi/com/sun/star/drawing/framework/XRelocatableResource.idl56
-rw-r--r--offapi/com/sun/star/drawing/framework/XResource.idl63
-rw-r--r--offapi/com/sun/star/drawing/framework/XResourceFactory.idl92
-rw-r--r--offapi/com/sun/star/drawing/framework/XResourceFactoryManager.idl98
-rw-r--r--offapi/com/sun/star/drawing/framework/XResourceId.idl157
-rw-r--r--offapi/com/sun/star/drawing/framework/XTabBar.idl106
-rw-r--r--offapi/com/sun/star/drawing/framework/XToolBar.idl48
-rw-r--r--offapi/com/sun/star/drawing/framework/XView.idl56
-rw-r--r--offapi/com/sun/star/drawing/framework/makefile.mk75
-rw-r--r--offapi/com/sun/star/drawing/makefile.mk227
-rw-r--r--offapi/com/sun/star/drawing/modules.idl65
-rw-r--r--offapi/com/sun/star/embed/Actions.idl70
-rw-r--r--offapi/com/sun/star/embed/Aspects.idl84
-rw-r--r--offapi/com/sun/star/embed/BaseStorage.idl82
-rw-r--r--offapi/com/sun/star/embed/DocumentCloser.idl88
-rw-r--r--offapi/com/sun/star/embed/ElementModes.idl116
-rw-r--r--offapi/com/sun/star/embed/EmbedMapUnits.idl112
-rw-r--r--offapi/com/sun/star/embed/EmbedMisc.idl188
-rw-r--r--offapi/com/sun/star/embed/EmbedStates.idl99
-rw-r--r--offapi/com/sun/star/embed/EmbedUpdateModes.idl68
-rw-r--r--offapi/com/sun/star/embed/EmbedVerbs.idl84
-rw-r--r--offapi/com/sun/star/embed/EmbeddedObjectDescriptor.idl114
-rw-r--r--offapi/com/sun/star/embed/EntryInitModes.idl81
-rw-r--r--offapi/com/sun/star/embed/FileSystemStorage.idl117
-rw-r--r--offapi/com/sun/star/embed/FileSystemStorageFactory.idl109
-rw-r--r--offapi/com/sun/star/embed/InsertedObjectInfo.idl71
-rw-r--r--offapi/com/sun/star/embed/InstanceLocker.idl117
-rw-r--r--offapi/com/sun/star/embed/InvalidStorageException.idl56
-rw-r--r--offapi/com/sun/star/embed/LinkageMisuseException.idl56
-rw-r--r--offapi/com/sun/star/embed/NeedsRunningStateException.idl59
-rw-r--r--offapi/com/sun/star/embed/NoVisualAreaSizeException.idl53
-rw-r--r--offapi/com/sun/star/embed/OLESimpleStorage.idl82
-rw-r--r--offapi/com/sun/star/embed/ObjectSaveVetoException.idl55
-rw-r--r--offapi/com/sun/star/embed/StateChangeInProgressException.idl62
-rw-r--r--offapi/com/sun/star/embed/Storage.idl367
-rw-r--r--offapi/com/sun/star/embed/StorageFactory.idl126
-rw-r--r--offapi/com/sun/star/embed/StorageFormats.idl65
-rw-r--r--offapi/com/sun/star/embed/StorageStream.idl239
-rw-r--r--offapi/com/sun/star/embed/StorageWrappedTargetException.idl53
-rw-r--r--offapi/com/sun/star/embed/UnreachableStateException.idl61
-rw-r--r--offapi/com/sun/star/embed/UseBackupException.idl66
-rw-r--r--offapi/com/sun/star/embed/VerbAttributes.idl59
-rw-r--r--offapi/com/sun/star/embed/VerbDescriptor.idl76
-rw-r--r--offapi/com/sun/star/embed/VisualRepresentation.idl61
-rw-r--r--offapi/com/sun/star/embed/WrongStateException.idl53
-rw-r--r--offapi/com/sun/star/embed/XActionsApproval.idl70
-rw-r--r--offapi/com/sun/star/embed/XClassifiedObject.idl86
-rw-r--r--offapi/com/sun/star/embed/XCommonEmbedPersist.idl136
-rw-r--r--offapi/com/sun/star/embed/XComponentSupplier.idl61
-rw-r--r--offapi/com/sun/star/embed/XEmbedObjectClipboardCreator.idl122
-rw-r--r--offapi/com/sun/star/embed/XEmbedObjectCreator.idl206
-rw-r--r--offapi/com/sun/star/embed/XEmbedObjectFactory.idl134
-rw-r--r--offapi/com/sun/star/embed/XEmbedPersist.idl275
-rw-r--r--offapi/com/sun/star/embed/XEmbeddedClient.idl90
-rw-r--r--offapi/com/sun/star/embed/XEmbeddedObject.idl306
-rw-r--r--offapi/com/sun/star/embed/XEncryptionProtectedSource.idl74
-rw-r--r--offapi/com/sun/star/embed/XExtendedStorageStream.idl134
-rw-r--r--offapi/com/sun/star/embed/XHatchWindow.idl75
-rw-r--r--offapi/com/sun/star/embed/XHatchWindowController.idl83
-rw-r--r--offapi/com/sun/star/embed/XHatchWindowFactory.idl91
-rw-r--r--offapi/com/sun/star/embed/XHierarchicalStorageAccess.idl235
-rw-r--r--offapi/com/sun/star/embed/XInplaceClient.idl242
-rw-r--r--offapi/com/sun/star/embed/XInplaceObject.idl133
-rw-r--r--offapi/com/sun/star/embed/XInsertObjectDialog.idl112
-rw-r--r--offapi/com/sun/star/embed/XLinkCreator.idl116
-rw-r--r--offapi/com/sun/star/embed/XLinkFactory.idl119
-rw-r--r--offapi/com/sun/star/embed/XLinkageSupport.idl146
-rw-r--r--offapi/com/sun/star/embed/XOLESimpleStorage.idl105
-rw-r--r--offapi/com/sun/star/embed/XOptimizedStorage.idl226
-rw-r--r--offapi/com/sun/star/embed/XPackageStructureCreator.idl71
-rw-r--r--offapi/com/sun/star/embed/XPersistanceHolder.idl88
-rw-r--r--offapi/com/sun/star/embed/XRelationshipAccess.idl283
-rw-r--r--offapi/com/sun/star/embed/XStateChangeBroadcaster.idl67
-rw-r--r--offapi/com/sun/star/embed/XStateChangeListener.idl102
-rw-r--r--offapi/com/sun/star/embed/XStorage.idl661
-rw-r--r--offapi/com/sun/star/embed/XStorageRawAccess.idl235
-rw-r--r--offapi/com/sun/star/embed/XTransactedObject.idl71
-rw-r--r--offapi/com/sun/star/embed/XTransactionBroadcaster.idl68
-rw-r--r--offapi/com/sun/star/embed/XTransactionListener.idl81
-rw-r--r--offapi/com/sun/star/embed/XTransferableSupplier.idl62
-rw-r--r--offapi/com/sun/star/embed/XVisualObject.idl179
-rw-r--r--offapi/com/sun/star/embed/XWindowSupplier.idl57
-rw-r--r--offapi/com/sun/star/embed/makefile.mk116
-rw-r--r--offapi/com/sun/star/form/DataAwareControlModel.idl195
-rw-r--r--offapi/com/sun/star/form/DataSelectionType.idl58
-rw-r--r--offapi/com/sun/star/form/DatabaseDeleteEvent.idl55
-rw-r--r--offapi/com/sun/star/form/DatabaseParameterEvent.idl70
-rw-r--r--offapi/com/sun/star/form/ErrorEvent.idl60
-rw-r--r--offapi/com/sun/star/form/FormButtonType.idl77
-rw-r--r--offapi/com/sun/star/form/FormComponent.idl129
-rw-r--r--offapi/com/sun/star/form/FormComponentType.idl144
-rw-r--r--offapi/com/sun/star/form/FormComponents.idl107
-rw-r--r--offapi/com/sun/star/form/FormControlModel.idl110
-rw-r--r--offapi/com/sun/star/form/FormController.idl114
-rw-r--r--offapi/com/sun/star/form/FormControllerDispatcher.idl57
-rw-r--r--offapi/com/sun/star/form/FormSubmitEncoding.idl71
-rw-r--r--offapi/com/sun/star/form/FormSubmitMethod.idl63
-rw-r--r--offapi/com/sun/star/form/Forms.idl72
-rw-r--r--offapi/com/sun/star/form/ListSourceType.idl89
-rw-r--r--offapi/com/sun/star/form/NavigationBarMode.idl83
-rw-r--r--offapi/com/sun/star/form/PropertyBrowserController.idl147
-rw-r--r--offapi/com/sun/star/form/TabulatorCycle.idl84
-rw-r--r--offapi/com/sun/star/form/XApproveActionBroadcaster.idl81
-rw-r--r--offapi/com/sun/star/form/XApproveActionListener.idl77
-rw-r--r--offapi/com/sun/star/form/XBoundComponent.idl75
-rw-r--r--offapi/com/sun/star/form/XBoundControl.idl74
-rw-r--r--offapi/com/sun/star/form/XChangeBroadcaster.idl85
-rw-r--r--offapi/com/sun/star/form/XChangeListener.idl73
-rw-r--r--offapi/com/sun/star/form/XConfirmDeleteBroadcaster.idl86
-rw-r--r--offapi/com/sun/star/form/XConfirmDeleteListener.idl71
-rw-r--r--offapi/com/sun/star/form/XDatabaseParameterBroadcaster.idl83
-rw-r--r--offapi/com/sun/star/form/XDatabaseParameterBroadcaster2.idl79
-rw-r--r--offapi/com/sun/star/form/XDatabaseParameterListener.idl72
-rw-r--r--offapi/com/sun/star/form/XDeleteListener.idl80
-rw-r--r--offapi/com/sun/star/form/XErrorBroadcaster.idl75
-rw-r--r--offapi/com/sun/star/form/XErrorListener.idl75
-rw-r--r--offapi/com/sun/star/form/XForm.idl59
-rw-r--r--offapi/com/sun/star/form/XFormComponent.idl59
-rw-r--r--offapi/com/sun/star/form/XFormController.idl67
-rw-r--r--offapi/com/sun/star/form/XFormControllerListener.idl84
-rw-r--r--offapi/com/sun/star/form/XFormsSupplier.idl105
-rw-r--r--offapi/com/sun/star/form/XFormsSupplier2.idl68
-rw-r--r--offapi/com/sun/star/form/XGrid.idl79
-rw-r--r--offapi/com/sun/star/form/XGridColumnFactory.idl93
-rw-r--r--offapi/com/sun/star/form/XGridControl.idl69
-rw-r--r--offapi/com/sun/star/form/XGridControlListener.idl57
-rw-r--r--offapi/com/sun/star/form/XGridFieldDataSupplier.idl97
-rw-r--r--offapi/com/sun/star/form/XGridPeer.idl80
-rw-r--r--offapi/com/sun/star/form/XImageProducerSupplier.idl69
-rw-r--r--offapi/com/sun/star/form/XInsertListener.idl77
-rw-r--r--offapi/com/sun/star/form/XLoadListener.idl114
-rw-r--r--offapi/com/sun/star/form/XLoadable.idl107
-rw-r--r--offapi/com/sun/star/form/XPositioningListener.idl70
-rw-r--r--offapi/com/sun/star/form/XReset.idl85
-rw-r--r--offapi/com/sun/star/form/XResetListener.idl91
-rw-r--r--offapi/com/sun/star/form/XRestoreListener.idl74
-rw-r--r--offapi/com/sun/star/form/XSubmit.idl106
-rw-r--r--offapi/com/sun/star/form/XSubmitListener.idl79
-rw-r--r--offapi/com/sun/star/form/XUpdateBroadcaster.idl84
-rw-r--r--offapi/com/sun/star/form/XUpdateListener.idl87
-rw-r--r--offapi/com/sun/star/form/binding/BindableControlModel.idl92
-rw-r--r--offapi/com/sun/star/form/binding/BindableDataAwareControlModel.idl132
-rw-r--r--offapi/com/sun/star/form/binding/BindableDatabaseCheckBox.idl95
-rw-r--r--offapi/com/sun/star/form/binding/BindableDatabaseComboBox.idl73
-rw-r--r--offapi/com/sun/star/form/binding/BindableDatabaseDateField.idl70
-rw-r--r--offapi/com/sun/star/form/binding/BindableDatabaseFormattedField.idl69
-rw-r--r--offapi/com/sun/star/form/binding/BindableDatabaseListBox.idl81
-rw-r--r--offapi/com/sun/star/form/binding/BindableDatabaseNumericField.idl69
-rw-r--r--offapi/com/sun/star/form/binding/BindableDatabaseRadioButton.idl92
-rw-r--r--offapi/com/sun/star/form/binding/BindableDatabaseTextField.idl72
-rw-r--r--offapi/com/sun/star/form/binding/BindableDatabaseTimeField.idl70
-rw-r--r--offapi/com/sun/star/form/binding/BindableIntegerValueRange.idl75
-rw-r--r--offapi/com/sun/star/form/binding/IncompatibleTypesException.idl54
-rw-r--r--offapi/com/sun/star/form/binding/InvalidBindingStateException.idl54
-rw-r--r--offapi/com/sun/star/form/binding/ListEntryEvent.idl74
-rw-r--r--offapi/com/sun/star/form/binding/ListEntrySource.idl74
-rw-r--r--offapi/com/sun/star/form/binding/ValueBinding.idl124
-rw-r--r--offapi/com/sun/star/form/binding/XBindableValue.idl78
-rw-r--r--offapi/com/sun/star/form/binding/XListEntryListener.idl89
-rw-r--r--offapi/com/sun/star/form/binding/XListEntrySink.idl68
-rw-r--r--offapi/com/sun/star/form/binding/XListEntrySource.idl100
-rw-r--r--offapi/com/sun/star/form/binding/XValueBinding.idl104
-rw-r--r--offapi/com/sun/star/form/binding/makefile.mk69
-rw-r--r--offapi/com/sun/star/form/component/CheckBox.idl92
-rw-r--r--offapi/com/sun/star/form/component/ComboBox.idl78
-rw-r--r--offapi/com/sun/star/form/component/CommandButton.idl116
-rw-r--r--offapi/com/sun/star/form/component/CurrencyField.idl77
-rw-r--r--offapi/com/sun/star/form/component/DataForm.idl232
-rw-r--r--offapi/com/sun/star/form/component/DatabaseCheckBox.idl64
-rw-r--r--offapi/com/sun/star/form/component/DatabaseComboBox.idl96
-rw-r--r--offapi/com/sun/star/form/component/DatabaseCurrencyField.idl59
-rw-r--r--offapi/com/sun/star/form/component/DatabaseDateField.idl59
-rw-r--r--offapi/com/sun/star/form/component/DatabaseFormattedField.idl73
-rw-r--r--offapi/com/sun/star/form/component/DatabaseImageControl.idl122
-rw-r--r--offapi/com/sun/star/form/component/DatabaseListBox.idl159
-rw-r--r--offapi/com/sun/star/form/component/DatabaseNumericField.idl59
-rw-r--r--offapi/com/sun/star/form/component/DatabasePatternField.idl74
-rw-r--r--offapi/com/sun/star/form/component/DatabaseRadioButton.idl59
-rw-r--r--offapi/com/sun/star/form/component/DatabaseTextField.idl73
-rw-r--r--offapi/com/sun/star/form/component/DatabaseTimeField.idl59
-rw-r--r--offapi/com/sun/star/form/component/DateField.idl81
-rw-r--r--offapi/com/sun/star/form/component/FileControl.idl78
-rw-r--r--offapi/com/sun/star/form/component/FixedText.idl64
-rw-r--r--offapi/com/sun/star/form/component/Form.idl93
-rw-r--r--offapi/com/sun/star/form/component/FormattedField.idl72
-rw-r--r--offapi/com/sun/star/form/component/GridControl.idl210
-rw-r--r--offapi/com/sun/star/form/component/GroupBox.idl60
-rw-r--r--offapi/com/sun/star/form/component/HTMLForm.idl106
-rw-r--r--offapi/com/sun/star/form/component/HiddenControl.idl65
-rw-r--r--offapi/com/sun/star/form/component/ImageButton.idl116
-rw-r--r--offapi/com/sun/star/form/component/ListBox.idl84
-rw-r--r--offapi/com/sun/star/form/component/NavigationToolBar.idl150
-rw-r--r--offapi/com/sun/star/form/component/NumericField.idl80
-rw-r--r--offapi/com/sun/star/form/component/PatternField.idl78
-rw-r--r--offapi/com/sun/star/form/component/RadioButton.idl112
-rw-r--r--offapi/com/sun/star/form/component/RichTextControl.idl91
-rw-r--r--offapi/com/sun/star/form/component/ScrollBar.idl78
-rw-r--r--offapi/com/sun/star/form/component/SpinButton.idl78
-rw-r--r--offapi/com/sun/star/form/component/SubmitButton.idl72
-rw-r--r--offapi/com/sun/star/form/component/TextField.idl89
-rw-r--r--offapi/com/sun/star/form/component/TimeField.idl81
-rw-r--r--offapi/com/sun/star/form/component/makefile.mk83
-rw-r--r--offapi/com/sun/star/form/control/CheckBox.idl70
-rw-r--r--offapi/com/sun/star/form/control/ComboBox.idl70
-rw-r--r--offapi/com/sun/star/form/control/CommandButton.idl88
-rw-r--r--offapi/com/sun/star/form/control/CurrencyField.idl71
-rw-r--r--offapi/com/sun/star/form/control/DateField.idl71
-rw-r--r--offapi/com/sun/star/form/control/FormattedField.idl76
-rw-r--r--offapi/com/sun/star/form/control/GridControl.idl172
-rw-r--r--offapi/com/sun/star/form/control/GroupBox.idl68
-rw-r--r--offapi/com/sun/star/form/control/ImageButton.idl88
-rw-r--r--offapi/com/sun/star/form/control/ImageControl.idl74
-rw-r--r--offapi/com/sun/star/form/control/InteractionGridControl.idl85
-rw-r--r--offapi/com/sun/star/form/control/ListBox.idl86
-rw-r--r--offapi/com/sun/star/form/control/NavigationToolBar.idl57
-rw-r--r--offapi/com/sun/star/form/control/NumericField.idl71
-rw-r--r--offapi/com/sun/star/form/control/PatternField.idl71
-rw-r--r--offapi/com/sun/star/form/control/RadioButton.idl70
-rw-r--r--offapi/com/sun/star/form/control/SubmitButton.idl88
-rw-r--r--offapi/com/sun/star/form/control/TextField.idl90
-rw-r--r--offapi/com/sun/star/form/control/TimeField.idl71
-rw-r--r--offapi/com/sun/star/form/control/makefile.mk64
-rw-r--r--offapi/com/sun/star/form/inspection/ButtonNavigationHandler.idl65
-rw-r--r--offapi/com/sun/star/form/inspection/CellBindingPropertyHandler.idl68
-rw-r--r--offapi/com/sun/star/form/inspection/DefaultFormComponentInspectorModel.idl101
-rw-r--r--offapi/com/sun/star/form/inspection/EditPropertyHandler.idl69
-rw-r--r--offapi/com/sun/star/form/inspection/EventHandler.idl63
-rw-r--r--offapi/com/sun/star/form/inspection/FormComponentPropertyHandler.idl56
-rw-r--r--offapi/com/sun/star/form/inspection/SubmissionPropertyHandler.idl67
-rw-r--r--offapi/com/sun/star/form/inspection/XMLFormsPropertyHandler.idl73
-rw-r--r--offapi/com/sun/star/form/inspection/XSDValidationPropertyHandler.idl77
-rw-r--r--offapi/com/sun/star/form/inspection/makefile.mk54
-rw-r--r--offapi/com/sun/star/form/makefile.mk104
-rw-r--r--offapi/com/sun/star/form/modules.idl68
-rw-r--r--offapi/com/sun/star/form/runtime/FeatureState.idl62
-rw-r--r--offapi/com/sun/star/form/runtime/FilterEvent.idl65
-rw-r--r--offapi/com/sun/star/form/runtime/FormController.idl52
-rw-r--r--offapi/com/sun/star/form/runtime/FormFeature.idl155
-rw-r--r--offapi/com/sun/star/form/runtime/FormOperations.idl91
-rw-r--r--offapi/com/sun/star/form/runtime/XFeatureInvalidation.idl76
-rw-r--r--offapi/com/sun/star/form/runtime/XFilterController.idl181
-rw-r--r--offapi/com/sun/star/form/runtime/XFilterControllerListener.idl85
-rw-r--r--offapi/com/sun/star/form/runtime/XFormController.idl374
-rw-r--r--offapi/com/sun/star/form/runtime/XFormControllerContext.idl58
-rw-r--r--offapi/com/sun/star/form/runtime/XFormOperations.idl284
-rw-r--r--offapi/com/sun/star/form/runtime/makefile.mk56
-rw-r--r--offapi/com/sun/star/form/submission/XSubmission.idl114
-rw-r--r--offapi/com/sun/star/form/submission/XSubmissionSupplier.idl60
-rw-r--r--offapi/com/sun/star/form/submission/XSubmissionVetoListener.idl71
-rw-r--r--offapi/com/sun/star/form/submission/makefile.mk48
-rw-r--r--offapi/com/sun/star/form/validation/ValidatableBindableControlModel.idl79
-rw-r--r--offapi/com/sun/star/form/validation/ValidatableControlModel.idl97
-rw-r--r--offapi/com/sun/star/form/validation/XFormComponentValidityListener.idl63
-rw-r--r--offapi/com/sun/star/form/validation/XValidatable.idl77
-rw-r--r--offapi/com/sun/star/form/validation/XValidatableFormComponent.idl126
-rw-r--r--offapi/com/sun/star/form/validation/XValidator.idl107
-rw-r--r--offapi/com/sun/star/form/validation/XValidityConstraintListener.idl60
-rw-r--r--offapi/com/sun/star/form/validation/makefile.mk53
-rw-r--r--offapi/com/sun/star/formula/AccessibleFormulaText.idl69
-rw-r--r--offapi/com/sun/star/formula/AccessibleFormulaView.idl70
-rw-r--r--offapi/com/sun/star/formula/FormulaProperties.idl347
-rw-r--r--offapi/com/sun/star/formula/SymbolDescriptor.idl113
-rw-r--r--offapi/com/sun/star/formula/makefile.mk49
-rw-r--r--offapi/com/sun/star/frame/BorderWidths.idl68
-rw-r--r--offapi/com/sun/star/frame/CommandGroup.idl179
-rw-r--r--offapi/com/sun/star/frame/Components.idl61
-rw-r--r--offapi/com/sun/star/frame/ContentHandler.idl70
-rw-r--r--offapi/com/sun/star/frame/ContentHandlerFactory.idl111
-rw-r--r--offapi/com/sun/star/frame/ControlCommand.idl67
-rw-r--r--offapi/com/sun/star/frame/ControlEvent.idl74
-rw-r--r--offapi/com/sun/star/frame/Controller.idl130
-rw-r--r--offapi/com/sun/star/frame/Desktop.idl100
-rw-r--r--offapi/com/sun/star/frame/DesktopTask.idl109
-rw-r--r--offapi/com/sun/star/frame/DesktopTasks.idl50
-rw-r--r--offapi/com/sun/star/frame/DispatchDescriptor.idl93
-rw-r--r--offapi/com/sun/star/frame/DispatchHelper.idl67
-rw-r--r--offapi/com/sun/star/frame/DispatchInformation.idl67
-rw-r--r--offapi/com/sun/star/frame/DispatchProvider.idl86
-rw-r--r--offapi/com/sun/star/frame/DispatchRecorder.idl75
-rw-r--r--offapi/com/sun/star/frame/DispatchRecorderSupplier.idl68
-rw-r--r--offapi/com/sun/star/frame/DispatchResultEvent.idl73
-rw-r--r--offapi/com/sun/star/frame/DispatchResultState.idl59
-rw-r--r--offapi/com/sun/star/frame/DispatchStatement.idl105
-rw-r--r--offapi/com/sun/star/frame/DocumentTemplates.idl55
-rw-r--r--offapi/com/sun/star/frame/DoubleInitializationException.idl54
-rw-r--r--offapi/com/sun/star/frame/FeatureStateEvent.idl95
-rw-r--r--offapi/com/sun/star/frame/Frame.idl206
-rw-r--r--offapi/com/sun/star/frame/FrameAction.idl151
-rw-r--r--offapi/com/sun/star/frame/FrameActionEvent.idl69
-rw-r--r--offapi/com/sun/star/frame/FrameControl.idl80
-rw-r--r--offapi/com/sun/star/frame/FrameLoader.idl99
-rw-r--r--offapi/com/sun/star/frame/FrameLoaderFactory.idl110
-rw-r--r--offapi/com/sun/star/frame/FrameSearchFlag.idl130
-rw-r--r--offapi/com/sun/star/frame/FramesContainer.idl61
-rw-r--r--offapi/com/sun/star/frame/GlobalEventBroadcaster.idl66
-rw-r--r--offapi/com/sun/star/frame/IllegalArgumentIOException.idl54
-rw-r--r--offapi/com/sun/star/frame/LayoutManager.idl132
-rw-r--r--offapi/com/sun/star/frame/LayoutManagerEvents.idl133
-rw-r--r--offapi/com/sun/star/frame/MediaTypeDetectionHelper.idl61
-rw-r--r--offapi/com/sun/star/frame/ModuleManager.idl78
-rw-r--r--offapi/com/sun/star/frame/PopupMenuController.idl153
-rw-r--r--offapi/com/sun/star/frame/PopupMenuControllerFactory.idl85
-rw-r--r--offapi/com/sun/star/frame/ProtocolHandler.idl97
-rw-r--r--offapi/com/sun/star/frame/SessionManager.idl84
-rw-r--r--offapi/com/sun/star/frame/Settings.idl50
-rw-r--r--offapi/com/sun/star/frame/StatusbarController.idl142
-rw-r--r--offapi/com/sun/star/frame/StatusbarControllerFactory.idl91
-rw-r--r--offapi/com/sun/star/frame/SynchronousFrameLoader.idl99
-rw-r--r--offapi/com/sun/star/frame/Task.idl78
-rw-r--r--offapi/com/sun/star/frame/TemplateAccess.idl62
-rw-r--r--offapi/com/sun/star/frame/TerminationVetoException.idl61
-rw-r--r--offapi/com/sun/star/frame/TitleChangedEvent.idl53
-rw-r--r--offapi/com/sun/star/frame/ToolbarController.idl146
-rw-r--r--offapi/com/sun/star/frame/TransientDocumentsDocumentContentFactory.idl56
-rw-r--r--offapi/com/sun/star/frame/UnknownModuleException.idl51
-rw-r--r--offapi/com/sun/star/frame/WindowArrange.idl74
-rw-r--r--offapi/com/sun/star/frame/XBorderResizeListener.idl66
-rw-r--r--offapi/com/sun/star/frame/XBrowseHistoryRegistry.idl66
-rw-r--r--offapi/com/sun/star/frame/XComponentLoader.idl192
-rw-r--r--offapi/com/sun/star/frame/XComponentRegistry.idl60
-rw-r--r--offapi/com/sun/star/frame/XConfigManager.idl118
-rw-r--r--offapi/com/sun/star/frame/XControlNotificationListener.idl65
-rw-r--r--offapi/com/sun/star/frame/XController.idl125
-rw-r--r--offapi/com/sun/star/frame/XController2.idl81
-rw-r--r--offapi/com/sun/star/frame/XControllerBorder.idl91
-rw-r--r--offapi/com/sun/star/frame/XDesktop.idl165
-rw-r--r--offapi/com/sun/star/frame/XDesktopTask.idl69
-rw-r--r--offapi/com/sun/star/frame/XDispatch.idl164
-rw-r--r--offapi/com/sun/star/frame/XDispatchHelper.idl96
-rw-r--r--offapi/com/sun/star/frame/XDispatchInformationProvider.idl91
-rw-r--r--offapi/com/sun/star/frame/XDispatchProvider.idl109
-rw-r--r--offapi/com/sun/star/frame/XDispatchProviderInterception.idl90
-rw-r--r--offapi/com/sun/star/frame/XDispatchProviderInterceptor.idl100
-rw-r--r--offapi/com/sun/star/frame/XDispatchRecorder.idl146
-rw-r--r--offapi/com/sun/star/frame/XDispatchRecorderSupplier.idl130
-rw-r--r--offapi/com/sun/star/frame/XDispatchResultListener.idl64
-rw-r--r--offapi/com/sun/star/frame/XDocumentTemplates.idl215
-rw-r--r--offapi/com/sun/star/frame/XExtendedFilterDetection.idl65
-rw-r--r--offapi/com/sun/star/frame/XFilterDetect.idl58
-rw-r--r--offapi/com/sun/star/frame/XFrame.idl388
-rw-r--r--offapi/com/sun/star/frame/XFrameActionListener.idl70
-rw-r--r--offapi/com/sun/star/frame/XFrameLoader.idl109
-rw-r--r--offapi/com/sun/star/frame/XFrameLoaderQuery.idl82
-rw-r--r--offapi/com/sun/star/frame/XFrameSetModel.idl58
-rw-r--r--offapi/com/sun/star/frame/XFrames.idl102
-rw-r--r--offapi/com/sun/star/frame/XFramesSupplier.idl106
-rw-r--r--offapi/com/sun/star/frame/XInplaceLayout.idl67
-rw-r--r--offapi/com/sun/star/frame/XInterceptorInfo.idl73
-rw-r--r--offapi/com/sun/star/frame/XLayoutManager.idl510
-rw-r--r--offapi/com/sun/star/frame/XLayoutManagerEventBroadcaster.idl68
-rw-r--r--offapi/com/sun/star/frame/XLayoutManagerListener.idl72
-rw-r--r--offapi/com/sun/star/frame/XLoadEventListener.idl68
-rw-r--r--offapi/com/sun/star/frame/XLoadable.idl85
-rw-r--r--offapi/com/sun/star/frame/XMenuBarAcceptor.idl68
-rw-r--r--offapi/com/sun/star/frame/XMenuBarMergingAcceptor.idl82
-rw-r--r--offapi/com/sun/star/frame/XModel.idl236
-rw-r--r--offapi/com/sun/star/frame/XModel2.idl152
-rw-r--r--offapi/com/sun/star/frame/XModule.idl79
-rw-r--r--offapi/com/sun/star/frame/XModuleManager.idl115
-rw-r--r--offapi/com/sun/star/frame/XNotifyingDispatch.idl73
-rw-r--r--offapi/com/sun/star/frame/XPopupMenuController.idl81
-rw-r--r--offapi/com/sun/star/frame/XRecordableDispatch.idl114
-rw-r--r--offapi/com/sun/star/frame/XSessionManagerClient.idl106
-rw-r--r--offapi/com/sun/star/frame/XSessionManagerListener.idl103
-rw-r--r--offapi/com/sun/star/frame/XSessionManagerListener2.idl53
-rw-r--r--offapi/com/sun/star/frame/XStatusListener.idl70
-rw-r--r--offapi/com/sun/star/frame/XStatusbarController.idl172
-rw-r--r--offapi/com/sun/star/frame/XStorable.idl176
-rw-r--r--offapi/com/sun/star/frame/XStorable2.idl92
-rw-r--r--offapi/com/sun/star/frame/XSubToolbarController.idl102
-rw-r--r--offapi/com/sun/star/frame/XSynchronousDispatch.idl77
-rw-r--r--offapi/com/sun/star/frame/XSynchronousFrameLoader.idl95
-rw-r--r--offapi/com/sun/star/frame/XTask.idl73
-rw-r--r--offapi/com/sun/star/frame/XTasksSupplier.idl70
-rw-r--r--offapi/com/sun/star/frame/XTerminateListener.idl89
-rw-r--r--offapi/com/sun/star/frame/XTerminateListener2.idl69
-rw-r--r--offapi/com/sun/star/frame/XTitle.idl62
-rw-r--r--offapi/com/sun/star/frame/XTitleChangeBroadcaster.idl62
-rw-r--r--offapi/com/sun/star/frame/XTitleChangeListener.idl57
-rw-r--r--offapi/com/sun/star/frame/XToolbarController.idl110
-rw-r--r--offapi/com/sun/star/frame/XToolbarControllerListener.idl64
-rw-r--r--offapi/com/sun/star/frame/XTransientDocumentsDocumentContentFactory.idl92
-rw-r--r--offapi/com/sun/star/frame/XUIControllerRegistration.idl107
-rw-r--r--offapi/com/sun/star/frame/XUntitledNumbers.idl118
-rw-r--r--offapi/com/sun/star/frame/XUrlList.idl52
-rw-r--r--offapi/com/sun/star/frame/XWindowArranger.idl59
-rw-r--r--offapi/com/sun/star/frame/makefile.mk166
-rw-r--r--offapi/com/sun/star/frame/status/ClipboardFormats.idl63
-rw-r--r--offapi/com/sun/star/frame/status/FontHeight.idl70
-rw-r--r--offapi/com/sun/star/frame/status/ItemState.idl85
-rw-r--r--offapi/com/sun/star/frame/status/ItemStatus.idl62
-rw-r--r--offapi/com/sun/star/frame/status/LeftRightMargin.idl58
-rw-r--r--offapi/com/sun/star/frame/status/Template.idl60
-rw-r--r--offapi/com/sun/star/frame/status/UpperLowerMargin.idl58
-rw-r--r--offapi/com/sun/star/frame/status/UpperLowerMarginScale.idl70
-rw-r--r--offapi/com/sun/star/frame/status/Verb.idl72
-rw-r--r--offapi/com/sun/star/frame/status/Visibility.idl53
-rw-r--r--offapi/com/sun/star/frame/status/makefile.mk55
-rw-r--r--offapi/com/sun/star/gallery/GalleryItem.idl100
-rw-r--r--offapi/com/sun/star/gallery/GalleryItemType.idl62
-rw-r--r--offapi/com/sun/star/gallery/GalleryTheme.idl57
-rw-r--r--offapi/com/sun/star/gallery/GalleryThemeProvider.idl73
-rw-r--r--offapi/com/sun/star/gallery/XGalleryItem.idl59
-rw-r--r--offapi/com/sun/star/gallery/XGalleryTheme.idl172
-rw-r--r--offapi/com/sun/star/gallery/XGalleryThemeProvider.idl94
-rw-r--r--offapi/com/sun/star/gallery/makefile.mk51
-rw-r--r--offapi/com/sun/star/geometry/AffineMatrix2D.idl93
-rw-r--r--offapi/com/sun/star/geometry/AffineMatrix3D.idl113
-rw-r--r--offapi/com/sun/star/geometry/EllipticalArc.idl94
-rw-r--r--offapi/com/sun/star/geometry/IntegerBezierSegment2D.idl67
-rw-r--r--offapi/com/sun/star/geometry/IntegerPoint2D.idl52
-rw-r--r--offapi/com/sun/star/geometry/IntegerRectangle2D.idl79
-rw-r--r--offapi/com/sun/star/geometry/IntegerSize2D.idl51
-rw-r--r--offapi/com/sun/star/geometry/Matrix2D.idl90
-rw-r--r--offapi/com/sun/star/geometry/RealBezierSegment2D.idl67
-rw-r--r--offapi/com/sun/star/geometry/RealPoint2D.idl52
-rw-r--r--offapi/com/sun/star/geometry/RealRectangle2D.idl79
-rw-r--r--offapi/com/sun/star/geometry/RealRectangle3D.idl79
-rw-r--r--offapi/com/sun/star/geometry/RealSize2D.idl51
-rw-r--r--offapi/com/sun/star/geometry/XMapping2D.idl72
-rw-r--r--offapi/com/sun/star/geometry/makefile.mk59
-rwxr-xr-xoffapi/com/sun/star/graphic/Graphic.idl62
-rw-r--r--offapi/com/sun/star/graphic/GraphicColorMode.idl59
-rwxr-xr-xoffapi/com/sun/star/graphic/GraphicDescriptor.idl151
-rw-r--r--offapi/com/sun/star/graphic/GraphicObject.idl63
-rwxr-xr-xoffapi/com/sun/star/graphic/GraphicProvider.idl53
-rwxr-xr-xoffapi/com/sun/star/graphic/GraphicRendererVCL.idl79
-rwxr-xr-xoffapi/com/sun/star/graphic/GraphicType.idl57
-rwxr-xr-xoffapi/com/sun/star/graphic/MediaProperties.idl128
-rwxr-xr-xoffapi/com/sun/star/graphic/XGraphic.idl65
-rw-r--r--offapi/com/sun/star/graphic/XGraphicObject.idl65
-rwxr-xr-xoffapi/com/sun/star/graphic/XGraphicProvider.idl119
-rwxr-xr-xoffapi/com/sun/star/graphic/XGraphicRenderer.idl54
-rw-r--r--offapi/com/sun/star/graphic/XGraphicTransformer.idl57
-rw-r--r--offapi/com/sun/star/graphic/XPrimitive2D.idl93
-rw-r--r--offapi/com/sun/star/graphic/XPrimitive3D.idl80
-rw-r--r--offapi/com/sun/star/graphic/XPrimitiveFactory2D.idl101
-rwxr-xr-xoffapi/com/sun/star/graphic/makefile.mk62
-rw-r--r--offapi/com/sun/star/i18n/AmPmValue.idl50
-rw-r--r--offapi/com/sun/star/i18n/Boundary.idl56
-rw-r--r--offapi/com/sun/star/i18n/BreakIterator.idl59
-rw-r--r--offapi/com/sun/star/i18n/BreakType.idl56
-rw-r--r--offapi/com/sun/star/i18n/CTLScriptType.idl68
-rw-r--r--offapi/com/sun/star/i18n/Calendar.idl68
-rw-r--r--offapi/com/sun/star/i18n/CalendarDisplayCode.idl90
-rw-r--r--offapi/com/sun/star/i18n/CalendarDisplayIndex.idl58
-rw-r--r--offapi/com/sun/star/i18n/CalendarFieldIndex.idl137
-rw-r--r--offapi/com/sun/star/i18n/CalendarItem.idl60
-rw-r--r--offapi/com/sun/star/i18n/ChapterCollator.idl49
-rw-r--r--offapi/com/sun/star/i18n/CharType.idl85
-rw-r--r--offapi/com/sun/star/i18n/CharacterClassification.idl55
-rw-r--r--offapi/com/sun/star/i18n/CharacterIteratorMode.idl57
-rw-r--r--offapi/com/sun/star/i18n/Collator.idl55
-rw-r--r--offapi/com/sun/star/i18n/CollatorOptions.idl53
-rw-r--r--offapi/com/sun/star/i18n/Currency.idl84
-rw-r--r--offapi/com/sun/star/i18n/Currency2.idl68
-rw-r--r--offapi/com/sun/star/i18n/DirectionProperty.idl67
-rw-r--r--offapi/com/sun/star/i18n/ForbiddenCharacters.idl57
-rw-r--r--offapi/com/sun/star/i18n/FormatElement.idl77
-rw-r--r--offapi/com/sun/star/i18n/Implementation.idl55
-rw-r--r--offapi/com/sun/star/i18n/IndexEntrySupplier.idl53
-rw-r--r--offapi/com/sun/star/i18n/InputSequenceCheckMode.idl61
-rw-r--r--offapi/com/sun/star/i18n/InputSequenceChecker.idl55
-rw-r--r--offapi/com/sun/star/i18n/KCharacterType.idl78
-rw-r--r--offapi/com/sun/star/i18n/KNumberFormatType.idl54
-rw-r--r--offapi/com/sun/star/i18n/KNumberFormatUsage.idl63
-rw-r--r--offapi/com/sun/star/i18n/KParseTokens.idl178
-rw-r--r--offapi/com/sun/star/i18n/KParseType.idl92
-rw-r--r--offapi/com/sun/star/i18n/LanguageCountryInfo.idl63
-rw-r--r--offapi/com/sun/star/i18n/LineBreakHyphenationOptions.idl59
-rw-r--r--offapi/com/sun/star/i18n/LineBreakResults.idl57
-rw-r--r--offapi/com/sun/star/i18n/LineBreakUserOptions.idl62
-rw-r--r--offapi/com/sun/star/i18n/LocaleCalendar.idl53
-rw-r--r--offapi/com/sun/star/i18n/LocaleData.idl52
-rw-r--r--offapi/com/sun/star/i18n/LocaleDataItem.idl85
-rw-r--r--offapi/com/sun/star/i18n/LocaleItem.idl102
-rw-r--r--offapi/com/sun/star/i18n/Months.idl72
-rw-r--r--offapi/com/sun/star/i18n/MultipleCharsOutputException.idl58
-rw-r--r--offapi/com/sun/star/i18n/NativeNumberMode.idl144
-rw-r--r--offapi/com/sun/star/i18n/NativeNumberSupplier.idl53
-rw-r--r--offapi/com/sun/star/i18n/NativeNumberXmlAttributes.idl68
-rw-r--r--offapi/com/sun/star/i18n/NumberFormatCode.idl62
-rw-r--r--offapi/com/sun/star/i18n/NumberFormatIndex.idl280
-rw-r--r--offapi/com/sun/star/i18n/NumberFormatMapper.idl52
-rw-r--r--offapi/com/sun/star/i18n/OrdinalSuffix.idl59
-rw-r--r--offapi/com/sun/star/i18n/ParseResult.idl83
-rw-r--r--offapi/com/sun/star/i18n/ScriptDirection.idl60
-rw-r--r--offapi/com/sun/star/i18n/ScriptType.idl61
-rw-r--r--offapi/com/sun/star/i18n/TextConversion.idl57
-rw-r--r--offapi/com/sun/star/i18n/TextConversionOption.idl71
-rw-r--r--offapi/com/sun/star/i18n/TextConversionResult.idl67
-rw-r--r--offapi/com/sun/star/i18n/TextConversionType.idl64
-rw-r--r--offapi/com/sun/star/i18n/Transliteration.idl53
-rw-r--r--offapi/com/sun/star/i18n/TransliterationModules.idl119
-rw-r--r--offapi/com/sun/star/i18n/TransliterationModulesExtra.idl76
-rw-r--r--offapi/com/sun/star/i18n/TransliterationModulesNew.idl175
-rw-r--r--offapi/com/sun/star/i18n/TransliterationType.idl81
-rw-r--r--offapi/com/sun/star/i18n/UnicodeScript.idl136
-rw-r--r--offapi/com/sun/star/i18n/UnicodeType.idl79
-rw-r--r--offapi/com/sun/star/i18n/Weekdays.idl65
-rw-r--r--offapi/com/sun/star/i18n/WordType.idl73
-rw-r--r--offapi/com/sun/star/i18n/XBreakIterator.idl374
-rw-r--r--offapi/com/sun/star/i18n/XCalendar.idl228
-rw-r--r--offapi/com/sun/star/i18n/XCharacterClassification.idl286
-rw-r--r--offapi/com/sun/star/i18n/XCollator.idl174
-rw-r--r--offapi/com/sun/star/i18n/XExtendedCalendar.idl85
-rw-r--r--offapi/com/sun/star/i18n/XExtendedIndexEntrySupplier.idl157
-rw-r--r--offapi/com/sun/star/i18n/XExtendedInputSequenceChecker.idl64
-rw-r--r--offapi/com/sun/star/i18n/XExtendedTextConversion.idl82
-rw-r--r--offapi/com/sun/star/i18n/XExtendedTransliteration.idl105
-rw-r--r--offapi/com/sun/star/i18n/XForbiddenCharacters.idl86
-rw-r--r--offapi/com/sun/star/i18n/XIndexEntrySupplier.idl78
-rw-r--r--offapi/com/sun/star/i18n/XInputSequenceChecker.idl60
-rw-r--r--offapi/com/sun/star/i18n/XLocaleData.idl137
-rw-r--r--offapi/com/sun/star/i18n/XLocaleData2.idl62
-rw-r--r--offapi/com/sun/star/i18n/XNativeNumberSupplier.idl95
-rw-r--r--offapi/com/sun/star/i18n/XNumberFormatCode.idl97
-rw-r--r--offapi/com/sun/star/i18n/XOrdinalSuffix.idl70
-rw-r--r--offapi/com/sun/star/i18n/XScriptTypeDetector.idl91
-rw-r--r--offapi/com/sun/star/i18n/XTextConversion.idl161
-rw-r--r--offapi/com/sun/star/i18n/XTransliteration.idl331
-rw-r--r--offapi/com/sun/star/i18n/makefile.mk129
-rw-r--r--offapi/com/sun/star/i18n/reservedWords.idl80
-rw-r--r--offapi/com/sun/star/image/ImageMap.idl64
-rw-r--r--offapi/com/sun/star/image/ImageMapCircleObject.idl65
-rw-r--r--offapi/com/sun/star/image/ImageMapObject.idl84
-rw-r--r--offapi/com/sun/star/image/ImageMapPolygonObject.idl63
-rw-r--r--offapi/com/sun/star/image/ImageMapRectangleObject.idl62
-rw-r--r--offapi/com/sun/star/image/makefile.mk50
-rw-r--r--offapi/com/sun/star/inspection/DefaultHelpProvider.idl71
-rw-r--r--offapi/com/sun/star/inspection/GenericPropertyHandler.idl63
-rw-r--r--offapi/com/sun/star/inspection/InteractiveSelectionResult.idl76
-rw-r--r--offapi/com/sun/star/inspection/LineDescriptor.idl201
-rw-r--r--offapi/com/sun/star/inspection/ObjectInspector.idl111
-rw-r--r--offapi/com/sun/star/inspection/ObjectInspectorModel.idl121
-rw-r--r--offapi/com/sun/star/inspection/PropertyCategoryDescriptor.idl67
-rw-r--r--offapi/com/sun/star/inspection/PropertyControlType.idl153
-rw-r--r--offapi/com/sun/star/inspection/PropertyLineElement.idl61
-rw-r--r--offapi/com/sun/star/inspection/XHyperlinkControl.idl69
-rw-r--r--offapi/com/sun/star/inspection/XNumericControl.idl98
-rw-r--r--offapi/com/sun/star/inspection/XObjectInspector.idl133
-rw-r--r--offapi/com/sun/star/inspection/XObjectInspectorModel.idl192
-rw-r--r--offapi/com/sun/star/inspection/XObjectInspectorUI.idl187
-rw-r--r--offapi/com/sun/star/inspection/XPropertyControl.idl120
-rw-r--r--offapi/com/sun/star/inspection/XPropertyControlContext.idl60
-rw-r--r--offapi/com/sun/star/inspection/XPropertyControlFactory.idl81
-rw-r--r--offapi/com/sun/star/inspection/XPropertyControlObserver.idl75
-rw-r--r--offapi/com/sun/star/inspection/XPropertyHandler.idl471
-rw-r--r--offapi/com/sun/star/inspection/XStringListControl.idl73
-rw-r--r--offapi/com/sun/star/inspection/XStringRepresentation.idl76
-rw-r--r--offapi/com/sun/star/inspection/makefile.mk66
-rw-r--r--offapi/com/sun/star/installation/InstallationCheck.idl64
-rw-r--r--offapi/com/sun/star/installation/InstallationCheckService.idl61
-rw-r--r--offapi/com/sun/star/installation/InternetSettings.idl52
-rw-r--r--offapi/com/sun/star/installation/ProtDlgRes.idl72
-rw-r--r--offapi/com/sun/star/installation/ProtocolHandlerCheck.idl52
-rw-r--r--offapi/com/sun/star/installation/ProtocolHandlerCheckService.idl52
-rw-r--r--offapi/com/sun/star/installation/XInstallationCheck.idl114
-rw-r--r--offapi/com/sun/star/installation/XProtocolHandlerCheck.idl91
-rw-r--r--offapi/com/sun/star/installation/makefile.mk55
-rw-r--r--offapi/com/sun/star/installation/protocols.idl94
-rw-r--r--offapi/com/sun/star/ldap/LdapConnectionException.idl49
-rw-r--r--offapi/com/sun/star/ldap/LdapGenericException.idl55
-rw-r--r--offapi/com/sun/star/ldap/makefile.mk47
-rw-r--r--offapi/com/sun/star/linguistic2/ConversionDictionary.idl81
-rw-r--r--offapi/com/sun/star/linguistic2/ConversionDictionaryList.idl70
-rw-r--r--offapi/com/sun/star/linguistic2/ConversionDictionaryType.idl56
-rw-r--r--offapi/com/sun/star/linguistic2/ConversionDirection.idl57
-rw-r--r--offapi/com/sun/star/linguistic2/ConversionPropertyType.idl114
-rw-r--r--offapi/com/sun/star/linguistic2/Dictionary.idl82
-rw-r--r--offapi/com/sun/star/linguistic2/DictionaryEvent.idl83
-rw-r--r--offapi/com/sun/star/linguistic2/DictionaryEventFlags.idl86
-rw-r--r--offapi/com/sun/star/linguistic2/DictionaryList.idl64
-rw-r--r--offapi/com/sun/star/linguistic2/DictionaryListEvent.idl95
-rw-r--r--offapi/com/sun/star/linguistic2/DictionaryListEventFlags.idl102
-rw-r--r--offapi/com/sun/star/linguistic2/DictionaryType.idl71
-rw-r--r--offapi/com/sun/star/linguistic2/HangulHanjaConversionDictionary.idl60
-rw-r--r--offapi/com/sun/star/linguistic2/Hyphenator.idl67
-rw-r--r--offapi/com/sun/star/linguistic2/LanguageGuessing.idl44
-rw-r--r--offapi/com/sun/star/linguistic2/LinguProperties.idl183
-rw-r--r--offapi/com/sun/star/linguistic2/LinguServiceEvent.idl71
-rw-r--r--offapi/com/sun/star/linguistic2/LinguServiceEventFlags.idl73
-rw-r--r--offapi/com/sun/star/linguistic2/LinguServiceManager.idl60
-rw-r--r--offapi/com/sun/star/linguistic2/Proofreader.idl63
-rw-r--r--offapi/com/sun/star/linguistic2/ProofreadingIterator.idl57
-rw-r--r--offapi/com/sun/star/linguistic2/ProofreadingResult.idl99
-rw-r--r--offapi/com/sun/star/linguistic2/SingleProofreadingError.idl81
-rw-r--r--offapi/com/sun/star/linguistic2/SpellChecker.idl67
-rw-r--r--offapi/com/sun/star/linguistic2/SpellFailure.idl68
-rw-r--r--offapi/com/sun/star/linguistic2/Thesaurus.idl65
-rw-r--r--offapi/com/sun/star/linguistic2/XAvailableLocales.idl66
-rw-r--r--offapi/com/sun/star/linguistic2/XConversionDictionary.idl243
-rw-r--r--offapi/com/sun/star/linguistic2/XConversionDictionaryList.idl219
-rw-r--r--offapi/com/sun/star/linguistic2/XConversionPropertyType.idl110
-rw-r--r--offapi/com/sun/star/linguistic2/XDictionary.idl275
-rw-r--r--offapi/com/sun/star/linguistic2/XDictionary1.idl112
-rw-r--r--offapi/com/sun/star/linguistic2/XDictionaryEntry.idl97
-rw-r--r--offapi/com/sun/star/linguistic2/XDictionaryEventListener.idl72
-rw-r--r--offapi/com/sun/star/linguistic2/XDictionaryList.idl261
-rw-r--r--offapi/com/sun/star/linguistic2/XDictionaryListEventListener.idl74
-rw-r--r--offapi/com/sun/star/linguistic2/XHyphenatedWord.idl117
-rw-r--r--offapi/com/sun/star/linguistic2/XHyphenator.idl215
-rw-r--r--offapi/com/sun/star/linguistic2/XLanguageGuessing.idl203
-rw-r--r--offapi/com/sun/star/linguistic2/XLinguServiceEventBroadcaster.idl93
-rw-r--r--offapi/com/sun/star/linguistic2/XLinguServiceEventListener.idl71
-rw-r--r--offapi/com/sun/star/linguistic2/XLinguServiceManager.idl194
-rw-r--r--offapi/com/sun/star/linguistic2/XMeaning.idl72
-rw-r--r--offapi/com/sun/star/linguistic2/XPossibleHyphens.idl102
-rw-r--r--offapi/com/sun/star/linguistic2/XProofreader.idl129
-rw-r--r--offapi/com/sun/star/linguistic2/XProofreadingIterator.idl127
-rw-r--r--offapi/com/sun/star/linguistic2/XSearchableDictionary.idl71
-rw-r--r--offapi/com/sun/star/linguistic2/XSearchableDictionaryList.idl95
-rw-r--r--offapi/com/sun/star/linguistic2/XSetSpellAlternatives.idl74
-rw-r--r--offapi/com/sun/star/linguistic2/XSpellAlternatives.idl100
-rw-r--r--offapi/com/sun/star/linguistic2/XSpellChecker.idl137
-rw-r--r--offapi/com/sun/star/linguistic2/XSpellChecker1.idl81
-rw-r--r--offapi/com/sun/star/linguistic2/XSupportedLanguages.idl60
-rw-r--r--offapi/com/sun/star/linguistic2/XSupportedLocales.idl85
-rw-r--r--offapi/com/sun/star/linguistic2/XThesaurus.idl99
-rw-r--r--offapi/com/sun/star/linguistic2/makefile.mk101
-rw-r--r--offapi/com/sun/star/logging/ConsoleHandler.idl82
-rw-r--r--offapi/com/sun/star/logging/CsvLogFormatter.idl63
-rw-r--r--offapi/com/sun/star/logging/DocumentIOLogRing.idl63
-rw-r--r--offapi/com/sun/star/logging/FileHandler.idl97
-rw-r--r--offapi/com/sun/star/logging/LogLevel.idl87
-rw-r--r--offapi/com/sun/star/logging/LogRecord.idl96
-rw-r--r--offapi/com/sun/star/logging/LoggerPool.idl34
-rw-r--r--offapi/com/sun/star/logging/PlainTextFormatter.idl60
-rw-r--r--offapi/com/sun/star/logging/SimpleLogRing.idl69
-rw-r--r--offapi/com/sun/star/logging/XConsoleHandler.idl67
-rw-r--r--offapi/com/sun/star/logging/XCsvLogFormatter.idl83
-rw-r--r--offapi/com/sun/star/logging/XLogFormatter.idl88
-rw-r--r--offapi/com/sun/star/logging/XLogHandler.idl110
-rw-r--r--offapi/com/sun/star/logging/XLogger.idl148
-rw-r--r--offapi/com/sun/star/logging/XLoggerPool.idl73
-rw-r--r--offapi/com/sun/star/logging/XSimpleLogRing.idl74
-rw-r--r--offapi/com/sun/star/logging/makefile.mk55
-rw-r--r--offapi/com/sun/star/mail/MailAttachment.idl67
-rw-r--r--offapi/com/sun/star/mail/MailException.idl49
-rw-r--r--offapi/com/sun/star/mail/MailMessage.idl111
-rw-r--r--offapi/com/sun/star/mail/MailServer.idl65
-rw-r--r--offapi/com/sun/star/mail/MailServiceProvider.idl62
-rw-r--r--offapi/com/sun/star/mail/MailServiceType.idl50
-rw-r--r--offapi/com/sun/star/mail/NoMailServiceProviderException.idl52
-rw-r--r--offapi/com/sun/star/mail/NoMailTransportProviderException.idl52
-rw-r--r--offapi/com/sun/star/mail/SendMailMessageFailedException.idl68
-rw-r--r--offapi/com/sun/star/mail/XAuthenticator.idl66
-rw-r--r--offapi/com/sun/star/mail/XConnectionListener.idl73
-rw-r--r--offapi/com/sun/star/mail/XMailMessage.idl158
-rw-r--r--offapi/com/sun/star/mail/XMailServer.idl279
-rw-r--r--offapi/com/sun/star/mail/XMailService.idl229
-rw-r--r--offapi/com/sun/star/mail/XMailServiceProvider.idl70
-rw-r--r--offapi/com/sun/star/mail/XSmtpService.idl107
-rw-r--r--offapi/com/sun/star/mail/makefile.mk58
-rw-r--r--offapi/com/sun/star/makefile.mk46
-rw-r--r--offapi/com/sun/star/media/Manager.idl42
-rw-r--r--offapi/com/sun/star/media/XFrameGrabber.idl51
-rw-r--r--offapi/com/sun/star/media/XManager.idl53
-rw-r--r--offapi/com/sun/star/media/XPlayer.idl182
-rw-r--r--offapi/com/sun/star/media/XPlayerWindow.idl65
-rw-r--r--offapi/com/sun/star/media/ZoomLevel.idl94
-rw-r--r--offapi/com/sun/star/media/makefile.mk50
-rw-r--r--offapi/com/sun/star/modules.idl259
-rw-r--r--offapi/com/sun/star/mozilla/MenuMultipleChange.idl116
-rw-r--r--offapi/com/sun/star/mozilla/MenuProxy.idl63
-rw-r--r--offapi/com/sun/star/mozilla/MenuProxyListener.idl62
-rw-r--r--offapi/com/sun/star/mozilla/MenuSingleChange.idl74
-rw-r--r--offapi/com/sun/star/mozilla/MozillaBootstrap.idl62
-rw-r--r--offapi/com/sun/star/mozilla/MozillaProductType.idl64
-rw-r--r--offapi/com/sun/star/mozilla/XCloseSessionListener.idl62
-rw-r--r--offapi/com/sun/star/mozilla/XCodeProxy.idl67
-rw-r--r--offapi/com/sun/star/mozilla/XMenuProxy.idl91
-rw-r--r--offapi/com/sun/star/mozilla/XMenuProxyListener.idl89
-rw-r--r--offapi/com/sun/star/mozilla/XMozillaBootstrap.idl69
-rw-r--r--offapi/com/sun/star/mozilla/XPluginInstance.idl146
-rw-r--r--offapi/com/sun/star/mozilla/XPluginInstanceNotifySink.idl65
-rw-r--r--offapi/com/sun/star/mozilla/XPluginInstancePeer.idl170
-rw-r--r--offapi/com/sun/star/mozilla/XPluginInstanceSyncPeer.idl73
-rw-r--r--offapi/com/sun/star/mozilla/XPluginWindowPeer.idl62
-rw-r--r--offapi/com/sun/star/mozilla/XProfileDiscover.idl127
-rw-r--r--offapi/com/sun/star/mozilla/XProfileManager.idl116
-rw-r--r--offapi/com/sun/star/mozilla/XProxyRunner.idl69
-rw-r--r--offapi/com/sun/star/mozilla/XRemoteServiceManagerProvider.idl61
-rw-r--r--offapi/com/sun/star/mozilla/makefile.mk67
-rw-r--r--offapi/com/sun/star/office/XAnnotation.idl102
-rw-r--r--offapi/com/sun/star/office/XAnnotationAccess.idl72
-rw-r--r--offapi/com/sun/star/office/XAnnotationEnumeration.idl71
-rw-r--r--offapi/com/sun/star/office/makefile.mk47
-rw-r--r--offapi/com/sun/star/oooimprovement/Core.idl55
-rw-r--r--offapi/com/sun/star/oooimprovement/CoreController.idl56
-rw-r--r--offapi/com/sun/star/oooimprovement/XCore.idl59
-rw-r--r--offapi/com/sun/star/oooimprovement/XCoreController.idl57
-rw-r--r--offapi/com/sun/star/oooimprovement/makefile.mk44
-rw-r--r--offapi/com/sun/star/packages/EncryptionNotAllowedException.idl53
-rw-r--r--offapi/com/sun/star/packages/NoEncryptionException.idl53
-rw-r--r--offapi/com/sun/star/packages/NoRawFormatException.idl54
-rw-r--r--offapi/com/sun/star/packages/Package.idl126
-rw-r--r--offapi/com/sun/star/packages/PackageFolder.idl108
-rw-r--r--offapi/com/sun/star/packages/PackageFolderEnumeration.idl54
-rw-r--r--offapi/com/sun/star/packages/PackageStream.idl95
-rw-r--r--offapi/com/sun/star/packages/WrongPasswordException.idl53
-rw-r--r--offapi/com/sun/star/packages/XDataSinkEncrSupport.idl171
-rw-r--r--offapi/com/sun/star/packages/makefile.mk55
-rw-r--r--offapi/com/sun/star/packages/manifest/XManifestReader.idl56
-rw-r--r--offapi/com/sun/star/packages/manifest/XManifestWriter.idl57
-rw-r--r--offapi/com/sun/star/packages/manifest/makefile.mk47
-rw-r--r--offapi/com/sun/star/packages/zip/XZipFileAccess.idl79
-rw-r--r--offapi/com/sun/star/packages/zip/ZipConstants.idl311
-rw-r--r--offapi/com/sun/star/packages/zip/ZipEntry.idl122
-rw-r--r--offapi/com/sun/star/packages/zip/ZipException.idl60
-rw-r--r--offapi/com/sun/star/packages/zip/ZipFileAccess.idl72
-rwxr-xr-xoffapi/com/sun/star/packages/zip/ZipIOException.idl55
-rw-r--r--offapi/com/sun/star/packages/zip/makefile.mk51
-rw-r--r--offapi/com/sun/star/plugin/PluginDescription.idl56
-rw-r--r--offapi/com/sun/star/plugin/PluginException.idl57
-rw-r--r--offapi/com/sun/star/plugin/PluginManager.idl52
-rw-r--r--offapi/com/sun/star/plugin/PluginMode.idl49
-rw-r--r--offapi/com/sun/star/plugin/PluginVariable.idl57
-rw-r--r--offapi/com/sun/star/plugin/XPlugin.idl82
-rw-r--r--offapi/com/sun/star/plugin/XPluginContext.idl198
-rw-r--r--offapi/com/sun/star/plugin/XPluginManager.idl137
-rw-r--r--offapi/com/sun/star/plugin/makefile.mk53
-rw-r--r--offapi/com/sun/star/presentation/AnimationEffect.idl944
-rw-r--r--offapi/com/sun/star/presentation/AnimationSpeed.idl65
-rw-r--r--offapi/com/sun/star/presentation/ChartShape.idl62
-rw-r--r--offapi/com/sun/star/presentation/ClickAction.idl132
-rw-r--r--offapi/com/sun/star/presentation/CustomPresentation.idl68
-rw-r--r--offapi/com/sun/star/presentation/CustomPresentationAccess.idl71
-rw-r--r--offapi/com/sun/star/presentation/DateTimeShape.idl62
-rw-r--r--offapi/com/sun/star/presentation/DocumentSettings.idl120
-rw-r--r--offapi/com/sun/star/presentation/DrawPage.idl177
-rw-r--r--offapi/com/sun/star/presentation/EffectCommands.idl76
-rw-r--r--offapi/com/sun/star/presentation/EffectNodeType.idl81
-rw-r--r--offapi/com/sun/star/presentation/EffectPresetClass.idl81
-rw-r--r--offapi/com/sun/star/presentation/FadeEffect.idl388
-rw-r--r--offapi/com/sun/star/presentation/FooterShape.idl62
-rw-r--r--offapi/com/sun/star/presentation/GraphicObjectShape.idl62
-rw-r--r--offapi/com/sun/star/presentation/HandoutShape.idl62
-rw-r--r--offapi/com/sun/star/presentation/HandoutView.idl59
-rw-r--r--offapi/com/sun/star/presentation/HeaderShape.idl62
-rw-r--r--offapi/com/sun/star/presentation/NotesShape.idl62
-rw-r--r--offapi/com/sun/star/presentation/NotesView.idl59
-rw-r--r--offapi/com/sun/star/presentation/OLE2Shape.idl62
-rw-r--r--offapi/com/sun/star/presentation/OutlineView.idl109
-rw-r--r--offapi/com/sun/star/presentation/OutlinerShape.idl62
-rw-r--r--offapi/com/sun/star/presentation/PageShape.idl62
-rw-r--r--offapi/com/sun/star/presentation/ParagraphTarget.idl58
-rw-r--r--offapi/com/sun/star/presentation/Presentation.idl159
-rw-r--r--offapi/com/sun/star/presentation/Presentation2.idl65
-rw-r--r--offapi/com/sun/star/presentation/PresentationDocument.idl105
-rw-r--r--offapi/com/sun/star/presentation/PresentationRange.idl63
-rw-r--r--offapi/com/sun/star/presentation/PresentationView.idl117
-rw-r--r--offapi/com/sun/star/presentation/PreviewView.idl119
-rw-r--r--offapi/com/sun/star/presentation/Shape.idl180
-rw-r--r--offapi/com/sun/star/presentation/ShapeAnimationSubType.idl66
-rw-r--r--offapi/com/sun/star/presentation/SlideNumberShape.idl62
-rw-r--r--offapi/com/sun/star/presentation/SlidesView.idl110
-rw-r--r--offapi/com/sun/star/presentation/SubtitleShape.idl62
-rw-r--r--offapi/com/sun/star/presentation/TextAnimationType.idl63
-rw-r--r--offapi/com/sun/star/presentation/TitleTextShape.idl62
-rw-r--r--offapi/com/sun/star/presentation/XCustomPresentationSupplier.idl66
-rw-r--r--offapi/com/sun/star/presentation/XHandoutMasterSupplier.idl58
-rw-r--r--offapi/com/sun/star/presentation/XPresentation.idl72
-rw-r--r--offapi/com/sun/star/presentation/XPresentation2.idl99
-rw-r--r--offapi/com/sun/star/presentation/XPresentationPage.idl61
-rw-r--r--offapi/com/sun/star/presentation/XPresentationSupplier.idl62
-rw-r--r--offapi/com/sun/star/presentation/XShapeEventListener.idl66
-rw-r--r--offapi/com/sun/star/presentation/XSlideShow.idl378
-rw-r--r--offapi/com/sun/star/presentation/XSlideShowController.idl308
-rw-r--r--offapi/com/sun/star/presentation/XSlideShowListener.idl80
-rw-r--r--offapi/com/sun/star/presentation/XSlideShowView.idl187
-rw-r--r--offapi/com/sun/star/presentation/XTransition.idl64
-rw-r--r--offapi/com/sun/star/presentation/XTransitionFactory.idl92
-rw-r--r--offapi/com/sun/star/presentation/makefile.mk96
-rw-r--r--offapi/com/sun/star/presentation/textfield/DateTime.idl51
-rw-r--r--offapi/com/sun/star/presentation/textfield/Footer.idl51
-rw-r--r--offapi/com/sun/star/presentation/textfield/Header.idl51
-rw-r--r--offapi/com/sun/star/presentation/textfield/makefile.mk48
-rw-r--r--offapi/com/sun/star/rdf/BlankNode.idl82
-rw-r--r--offapi/com/sun/star/rdf/FileFormat.idl82
-rw-r--r--offapi/com/sun/star/rdf/Literal.idl92
-rw-r--r--offapi/com/sun/star/rdf/ParseException.idl55
-rw-r--r--offapi/com/sun/star/rdf/QueryException.idl56
-rw-r--r--offapi/com/sun/star/rdf/Repository.idl60
-rw-r--r--offapi/com/sun/star/rdf/RepositoryException.idl56
-rw-r--r--offapi/com/sun/star/rdf/Statement.idl63
-rw-r--r--offapi/com/sun/star/rdf/URI.idl102
-rw-r--r--offapi/com/sun/star/rdf/URIs.idl333
-rw-r--r--offapi/com/sun/star/rdf/XBlankNode.idl60
-rw-r--r--offapi/com/sun/star/rdf/XDocumentMetadataAccess.idl452
-rw-r--r--offapi/com/sun/star/rdf/XDocumentRepository.idl243
-rw-r--r--offapi/com/sun/star/rdf/XLiteral.idl72
-rw-r--r--offapi/com/sun/star/rdf/XMetadatable.idl106
-rw-r--r--offapi/com/sun/star/rdf/XNamedGraph.idl229
-rw-r--r--offapi/com/sun/star/rdf/XNode.idl79
-rw-r--r--offapi/com/sun/star/rdf/XQuerySelectResult.idl76
-rw-r--r--offapi/com/sun/star/rdf/XReifiedStatement.idl57
-rw-r--r--offapi/com/sun/star/rdf/XRepository.idl465
-rw-r--r--offapi/com/sun/star/rdf/XRepositorySupplier.idl63
-rw-r--r--offapi/com/sun/star/rdf/XResource.idl61
-rw-r--r--offapi/com/sun/star/rdf/XURI.idl77
-rw-r--r--offapi/com/sun/star/rdf/makefile.mk71
-rw-r--r--offapi/com/sun/star/rendering/AnimationAttributes.idl71
-rw-r--r--offapi/com/sun/star/rendering/AnimationRepeat.idl84
-rwxr-xr-xoffapi/com/sun/star/rendering/BlendMode.idl62
-rw-r--r--offapi/com/sun/star/rendering/CanvasFactory.idl58
-rw-r--r--offapi/com/sun/star/rendering/Caret.idl70
-rw-r--r--offapi/com/sun/star/rendering/ColorComponentTag.idl140
-rw-r--r--offapi/com/sun/star/rendering/ColorProfile.idl43
-rw-r--r--offapi/com/sun/star/rendering/ColorSpaceType.idl126
-rw-r--r--offapi/com/sun/star/rendering/CompositeOperation.idl158
-rw-r--r--offapi/com/sun/star/rendering/EmphasisMark.idl87
-rw-r--r--offapi/com/sun/star/rendering/FillRule.idl63
-rw-r--r--offapi/com/sun/star/rendering/FloatingPointBitmapFormat.idl67
-rw-r--r--offapi/com/sun/star/rendering/FloatingPointBitmapLayout.idl113
-rw-r--r--offapi/com/sun/star/rendering/FontInfo.idl126
-rw-r--r--offapi/com/sun/star/rendering/FontMetrics.idl107
-rw-r--r--offapi/com/sun/star/rendering/FontRequest.idl121
-rw-r--r--offapi/com/sun/star/rendering/IntegerBitmapLayout.idl127
-rw-r--r--offapi/com/sun/star/rendering/InterpolationMode.idl97
-rw-r--r--offapi/com/sun/star/rendering/Panose.idl67
-rw-r--r--offapi/com/sun/star/rendering/PanoseArmStyle.idl50
-rw-r--r--offapi/com/sun/star/rendering/PanoseContrast.idl48
-rw-r--r--offapi/com/sun/star/rendering/PanoseFamilyTypes.idl44
-rw-r--r--offapi/com/sun/star/rendering/PanoseLetterForm.idl54
-rw-r--r--offapi/com/sun/star/rendering/PanoseMidline.idl52
-rw-r--r--offapi/com/sun/star/rendering/PanoseProportion.idl48
-rw-r--r--offapi/com/sun/star/rendering/PanoseSerifStyle.idl54
-rw-r--r--offapi/com/sun/star/rendering/PanoseStrokeVariation.idl47
-rw-r--r--offapi/com/sun/star/rendering/PanoseWeight.idl50
-rw-r--r--offapi/com/sun/star/rendering/PanoseXHeight.idl46
-rw-r--r--offapi/com/sun/star/rendering/PathCapType.idl59
-rw-r--r--offapi/com/sun/star/rendering/PathJoinType.idl73
-rw-r--r--offapi/com/sun/star/rendering/RenderState.idl108
-rw-r--r--offapi/com/sun/star/rendering/RenderingIntent.idl89
-rw-r--r--offapi/com/sun/star/rendering/RepaintResult.idl58
-rw-r--r--offapi/com/sun/star/rendering/StringContext.idl68
-rw-r--r--offapi/com/sun/star/rendering/StrokeAttributes.idl154
-rw-r--r--offapi/com/sun/star/rendering/TextDirection.idl53
-rw-r--r--offapi/com/sun/star/rendering/TextHit.idl70
-rw-r--r--offapi/com/sun/star/rendering/Texture.idl156
-rw-r--r--offapi/com/sun/star/rendering/TexturingMode.idl70
-rw-r--r--offapi/com/sun/star/rendering/ViewState.idl77
-rw-r--r--offapi/com/sun/star/rendering/VolatileContentDestroyedException.idl49
-rw-r--r--offapi/com/sun/star/rendering/XAnimatedSprite.idl196
-rw-r--r--offapi/com/sun/star/rendering/XAnimation.idl123
-rw-r--r--offapi/com/sun/star/rendering/XBezierPolyPolygon2D.idl175
-rw-r--r--offapi/com/sun/star/rendering/XBitmap.idl115
-rw-r--r--offapi/com/sun/star/rendering/XBitmapCanvas.idl151
-rw-r--r--offapi/com/sun/star/rendering/XBitmapPalette.idl126
-rw-r--r--offapi/com/sun/star/rendering/XBufferController.idl134
-rw-r--r--offapi/com/sun/star/rendering/XCachedPrimitive.idl73
-rw-r--r--offapi/com/sun/star/rendering/XCanvas.idl744
-rw-r--r--offapi/com/sun/star/rendering/XCanvasFont.idl140
-rw-r--r--offapi/com/sun/star/rendering/XColorSpace.idl292
-rw-r--r--offapi/com/sun/star/rendering/XCustomSprite.idl77
-rw-r--r--offapi/com/sun/star/rendering/XGraphicDevice.idl303
-rw-r--r--offapi/com/sun/star/rendering/XHalfFloatBitmap.idl97
-rw-r--r--offapi/com/sun/star/rendering/XHalfFloatReadOnlyBitmap.idl113
-rw-r--r--offapi/com/sun/star/rendering/XIeeeDoubleBitmap.idl141
-rw-r--r--offapi/com/sun/star/rendering/XIeeeDoubleReadOnlyBitmap.idl140
-rw-r--r--offapi/com/sun/star/rendering/XIeeeFloatBitmap.idl140
-rw-r--r--offapi/com/sun/star/rendering/XIeeeFloatReadOnlyBitmap.idl139
-rw-r--r--offapi/com/sun/star/rendering/XIntegerBitmap.idl147
-rw-r--r--offapi/com/sun/star/rendering/XIntegerBitmapColorSpace.idl276
-rw-r--r--offapi/com/sun/star/rendering/XIntegerReadOnlyBitmap.idl160
-rw-r--r--offapi/com/sun/star/rendering/XLinePolyPolygon2D.idl123
-rw-r--r--offapi/com/sun/star/rendering/XParametricPolyPolygon2D.idl108
-rw-r--r--offapi/com/sun/star/rendering/XPolyPolygon2D.idl136
-rw-r--r--offapi/com/sun/star/rendering/XSimpleCanvas.idl291
-rw-r--r--offapi/com/sun/star/rendering/XSprite.idl214
-rw-r--r--offapi/com/sun/star/rendering/XSpriteCanvas.idl160
-rw-r--r--offapi/com/sun/star/rendering/XTextLayout.idl432
-rw-r--r--offapi/com/sun/star/rendering/XVolatileBitmap.idl54
-rw-r--r--offapi/com/sun/star/rendering/makefile.mk117
-rw-r--r--offapi/com/sun/star/report/Calculation.idl136
-rw-r--r--offapi/com/sun/star/report/ForceNewPage.idl69
-rw-r--r--offapi/com/sun/star/report/GroupKeepTogether.idl61
-rw-r--r--offapi/com/sun/star/report/GroupOn.idl92
-rw-r--r--offapi/com/sun/star/report/KeepTogether.idl64
-rw-r--r--offapi/com/sun/star/report/ReportPrintOption.idl67
-rw-r--r--offapi/com/sun/star/report/SectionPageBreak.idl60
-rw-r--r--offapi/com/sun/star/report/XFixedLine.idl108
-rw-r--r--offapi/com/sun/star/report/XFixedText.idl55
-rw-r--r--offapi/com/sun/star/report/XFormatCondition.idl61
-rw-r--r--offapi/com/sun/star/report/XFormattedField.idl72
-rw-r--r--offapi/com/sun/star/report/XFunction.idl90
-rw-r--r--offapi/com/sun/star/report/XFunctions.idl80
-rw-r--r--offapi/com/sun/star/report/XFunctionsSupplier.idl51
-rw-r--r--offapi/com/sun/star/report/XGroup.idl149
-rw-r--r--offapi/com/sun/star/report/XGroups.idl83
-rw-r--r--offapi/com/sun/star/report/XImageControl.idl92
-rw-r--r--offapi/com/sun/star/report/XReportComponent.idl200
-rw-r--r--offapi/com/sun/star/report/XReportControlFormat.idl613
-rw-r--r--offapi/com/sun/star/report/XReportControlModel.idl115
-rw-r--r--offapi/com/sun/star/report/XReportDefinition.idl362
-rw-r--r--offapi/com/sun/star/report/XReportEngine.idl169
-rw-r--r--offapi/com/sun/star/report/XSection.idl195
-rw-r--r--offapi/com/sun/star/report/XShape.idl96
-rw-r--r--offapi/com/sun/star/report/inspection/DataProviderHandler.idl55
-rw-r--r--offapi/com/sun/star/report/inspection/DefaultComponentInspectorModel.idl96
-rw-r--r--offapi/com/sun/star/report/inspection/ReportComponentHandler.idl55
-rw-r--r--offapi/com/sun/star/report/inspection/makefile.mk49
-rw-r--r--offapi/com/sun/star/report/makefile.mk69
-rw-r--r--offapi/com/sun/star/report/meta/XFormulaParser.idl72
-rw-r--r--offapi/com/sun/star/report/meta/XFunctionCategory.idl76
-rw-r--r--offapi/com/sun/star/report/meta/XFunctionDescription.idl87
-rw-r--r--offapi/com/sun/star/report/meta/XFunctionManager.idl74
-rw-r--r--offapi/com/sun/star/report/meta/makefile.mk49
-rw-r--r--offapi/com/sun/star/report/modules.idl45
-rw-r--r--offapi/com/sun/star/resource/MissingResourceException.idl53
-rw-r--r--offapi/com/sun/star/resource/OfficeResourceLoader.idl81
-rw-r--r--offapi/com/sun/star/resource/StringResource.idl51
-rw-r--r--offapi/com/sun/star/resource/StringResourceWithLocation.idl97
-rw-r--r--offapi/com/sun/star/resource/StringResourceWithStorage.idl92
-rw-r--r--offapi/com/sun/star/resource/XLocale.idl275
-rw-r--r--offapi/com/sun/star/resource/XResourceBundle.idl243
-rw-r--r--offapi/com/sun/star/resource/XResourceBundleLoader.idl86
-rw-r--r--offapi/com/sun/star/resource/XStringResourceManager.idl317
-rw-r--r--offapi/com/sun/star/resource/XStringResourcePersistence.idl247
-rw-r--r--offapi/com/sun/star/resource/XStringResourceResolver.idl201
-rw-r--r--offapi/com/sun/star/resource/XStringResourceSupplier.idl70
-rw-r--r--offapi/com/sun/star/resource/XStringResourceWithLocation.idl89
-rw-r--r--offapi/com/sun/star/resource/XStringResourceWithStorage.idl89
-rw-r--r--offapi/com/sun/star/resource/makefile.mk59
-rw-r--r--offapi/com/sun/star/scanner/ScanError.idl83
-rw-r--r--offapi/com/sun/star/scanner/ScannerContext.idl58
-rw-r--r--offapi/com/sun/star/scanner/ScannerException.idl61
-rw-r--r--offapi/com/sun/star/scanner/ScannerManager.idl56
-rw-r--r--offapi/com/sun/star/scanner/XScannerManager.idl107
-rw-r--r--offapi/com/sun/star/scanner/makefile.mk50
-rw-r--r--offapi/com/sun/star/script/DocumentDialogLibraryContainer.idl82
-rw-r--r--offapi/com/sun/star/script/DocumentScriptLibraryContainer.idl83
-rw-r--r--offapi/com/sun/star/script/LibraryNotLoadedException.idl55
-rw-r--r--offapi/com/sun/star/script/ModuleInfo.idl55
-rw-r--r--offapi/com/sun/star/script/ModuleSizeExceededRequest.idl55
-rw-r--r--offapi/com/sun/star/script/ModuleType.idl72
-rw-r--r--offapi/com/sun/star/script/XLibraryContainer.idl123
-rw-r--r--offapi/com/sun/star/script/XLibraryContainer2.idl99
-rw-r--r--offapi/com/sun/star/script/XLibraryContainer3.idl66
-rw-r--r--offapi/com/sun/star/script/XLibraryContainerExport.idl80
-rw-r--r--offapi/com/sun/star/script/XLibraryContainerPassword.idl143
-rw-r--r--offapi/com/sun/star/script/XPersistentLibraryContainer.idl104
-rw-r--r--offapi/com/sun/star/script/XStorageBasedLibraryContainer.idl105
-rwxr-xr-xoffapi/com/sun/star/script/browse/BrowseNode.idl62
-rwxr-xr-xoffapi/com/sun/star/script/browse/BrowseNodeFactory.idl64
-rwxr-xr-xoffapi/com/sun/star/script/browse/BrowseNodeFactoryViewTypes.idl51
-rwxr-xr-xoffapi/com/sun/star/script/browse/BrowseNodeTypes.idl56
-rwxr-xr-xoffapi/com/sun/star/script/browse/XBrowseNode.idl83
-rw-r--r--offapi/com/sun/star/script/browse/XBrowseNodeFactory.idl66
-rw-r--r--offapi/com/sun/star/script/browse/makefile.mk52
-rw-r--r--offapi/com/sun/star/script/makefile.mk58
-rwxr-xr-xoffapi/com/sun/star/script/provider/LanguageScriptProvider.idl55
-rwxr-xr-xoffapi/com/sun/star/script/provider/MasterScriptProvider.idl55
-rwxr-xr-xoffapi/com/sun/star/script/provider/MasterScriptProviderFactory.idl64
-rw-r--r--offapi/com/sun/star/script/provider/ScriptErrorRaisedException.idl59
-rw-r--r--offapi/com/sun/star/script/provider/ScriptExceptionRaisedException.idl53
-rw-r--r--offapi/com/sun/star/script/provider/ScriptFrameworkErrorException.idl59
-rw-r--r--offapi/com/sun/star/script/provider/ScriptFrameworkErrorType.idl62
-rwxr-xr-xoffapi/com/sun/star/script/provider/ScriptProvider.idl61
-rw-r--r--offapi/com/sun/star/script/provider/ScriptProviderForBasic.idl54
-rwxr-xr-xoffapi/com/sun/star/script/provider/ScriptProviderForBeanShell.idl54
-rwxr-xr-xoffapi/com/sun/star/script/provider/ScriptProviderForJava.idl54
-rwxr-xr-xoffapi/com/sun/star/script/provider/ScriptProviderForJavaScript.idl54
-rwxr-xr-xoffapi/com/sun/star/script/provider/ScriptURIHelper.idl72
-rw-r--r--offapi/com/sun/star/script/provider/XScript.idl102
-rw-r--r--offapi/com/sun/star/script/provider/XScriptContext.idl114
-rw-r--r--offapi/com/sun/star/script/provider/XScriptProvider.idl74
-rw-r--r--offapi/com/sun/star/script/provider/XScriptProviderFactory.idl72
-rw-r--r--offapi/com/sun/star/script/provider/XScriptProviderSupplier.idl64
-rw-r--r--offapi/com/sun/star/script/provider/XScriptURIHelper.idl88
-rwxr-xr-xoffapi/com/sun/star/script/provider/makefile.mk68
-rwxr-xr-xoffapi/com/sun/star/script/vba/VBAEventId.idl140
-rwxr-xr-xoffapi/com/sun/star/script/vba/VBAEventProcessor.idl49
-rwxr-xr-xoffapi/com/sun/star/script/vba/VBASpreadsheetEventProcessor.idl50
-rwxr-xr-xoffapi/com/sun/star/script/vba/VBATextEventProcessor.idl50
-rw-r--r--offapi/com/sun/star/script/vba/XVBACompatibility.idl50
-rwxr-xr-xoffapi/com/sun/star/script/vba/XVBAEventProcessor.idl106
-rw-r--r--offapi/com/sun/star/script/vba/XVBAModuleInfo.idl75
-rwxr-xr-xoffapi/com/sun/star/script/vba/makefile.mk52
-rw-r--r--offapi/com/sun/star/sdb/BooleanComparisonMode.idl74
-rw-r--r--offapi/com/sun/star/sdb/CallableStatement.idl59
-rw-r--r--offapi/com/sun/star/sdb/Column.idl59
-rw-r--r--offapi/com/sun/star/sdb/ColumnDescriptorControl.idl52
-rw-r--r--offapi/com/sun/star/sdb/ColumnDescriptorControlModel.idl94
-rw-r--r--offapi/com/sun/star/sdb/ColumnSettings.idl134
-rw-r--r--offapi/com/sun/star/sdb/CommandType.idl61
-rw-r--r--offapi/com/sun/star/sdb/Connection.idl98
-rw-r--r--offapi/com/sun/star/sdb/ContentLoader.idl103
-rw-r--r--offapi/com/sun/star/sdb/DataAccessDescriptor.idl270
-rw-r--r--offapi/com/sun/star/sdb/DataAccessDescriptorFactory.idl49
-rw-r--r--offapi/com/sun/star/sdb/DataColumn.idl76
-rw-r--r--offapi/com/sun/star/sdb/DataSettings.idl98
-rw-r--r--offapi/com/sun/star/sdb/DataSource.idl255
-rw-r--r--offapi/com/sun/star/sdb/DataSourceBrowser.idl290
-rw-r--r--offapi/com/sun/star/sdb/DatabaseAccess.idl119
-rw-r--r--offapi/com/sun/star/sdb/DatabaseAccessConnection.idl100
-rw-r--r--offapi/com/sun/star/sdb/DatabaseAccessContext.idl92
-rw-r--r--offapi/com/sun/star/sdb/DatabaseAccessDataSource.idl79
-rw-r--r--offapi/com/sun/star/sdb/DatabaseContext.idl110
-rw-r--r--offapi/com/sun/star/sdb/DatabaseDocument.idl76
-rw-r--r--offapi/com/sun/star/sdb/DatabaseEnvironment.idl72
-rw-r--r--offapi/com/sun/star/sdb/DatabaseInteractionHandler.idl71
-rw-r--r--offapi/com/sun/star/sdb/DatabaseRegistrationEvent.idl61
-rw-r--r--offapi/com/sun/star/sdb/DatasourceAdministrationDialog.idl129
-rw-r--r--offapi/com/sun/star/sdb/DefinitionContainer.idl97
-rw-r--r--offapi/com/sun/star/sdb/DefinitionContent.idl76
-rw-r--r--offapi/com/sun/star/sdb/Document.idl64
-rw-r--r--offapi/com/sun/star/sdb/DocumentContainer.idl129
-rw-r--r--offapi/com/sun/star/sdb/DocumentDataSource.idl65
-rw-r--r--offapi/com/sun/star/sdb/DocumentDefinition.idl100
-rw-r--r--offapi/com/sun/star/sdb/DocumentSaveRequest.idl70
-rw-r--r--offapi/com/sun/star/sdb/ErrorCondition.idl180
-rw-r--r--offapi/com/sun/star/sdb/ErrorMessageDialog.idl171
-rw-r--r--offapi/com/sun/star/sdb/Forms.idl55
-rw-r--r--offapi/com/sun/star/sdb/InteractionHandler.idl49
-rw-r--r--offapi/com/sun/star/sdb/OfficeDatabaseDocument.idl250
-rw-r--r--offapi/com/sun/star/sdb/OrderColumn.idl55
-rw-r--r--offapi/com/sun/star/sdb/ParametersRequest.idl78
-rw-r--r--offapi/com/sun/star/sdb/PreparedStatement.idl62
-rw-r--r--offapi/com/sun/star/sdb/Query.idl91
-rw-r--r--offapi/com/sun/star/sdb/QueryDefinition.idl88
-rw-r--r--offapi/com/sun/star/sdb/QueryDescriptor.idl106
-rw-r--r--offapi/com/sun/star/sdb/QueryDesign.idl201
-rw-r--r--offapi/com/sun/star/sdb/RelationDesign.idl93
-rw-r--r--offapi/com/sun/star/sdb/Reports.idl55
-rw-r--r--offapi/com/sun/star/sdb/ResultColumn.idl123
-rw-r--r--offapi/com/sun/star/sdb/ResultSet.idl62
-rw-r--r--offapi/com/sun/star/sdb/RowChangeAction.idl59
-rw-r--r--offapi/com/sun/star/sdb/RowChangeEvent.idl59
-rw-r--r--offapi/com/sun/star/sdb/RowSet.idl400
-rw-r--r--offapi/com/sun/star/sdb/RowSetVetoException.idl51
-rw-r--r--offapi/com/sun/star/sdb/RowsChangeEvent.idl52
-rw-r--r--offapi/com/sun/star/sdb/SQLContext.idl65
-rw-r--r--offapi/com/sun/star/sdb/SQLErrorEvent.idl55
-rw-r--r--offapi/com/sun/star/sdb/SQLFilterOperator.idl78
-rw-r--r--offapi/com/sun/star/sdb/SQLQueryComposer.idl75
-rw-r--r--offapi/com/sun/star/sdb/SingleSelectQueryAnalyzer.idl90
-rw-r--r--offapi/com/sun/star/sdb/SingleSelectQueryComposer.idl73
-rw-r--r--offapi/com/sun/star/sdb/Table.idl67
-rw-r--r--offapi/com/sun/star/sdb/TableDescriptor.idl61
-rw-r--r--offapi/com/sun/star/sdb/TableDesign.idl96
-rw-r--r--offapi/com/sun/star/sdb/XAlterQuery.idl63
-rw-r--r--offapi/com/sun/star/sdb/XBookmarksSupplier.idl68
-rw-r--r--offapi/com/sun/star/sdb/XColumn.idl304
-rw-r--r--offapi/com/sun/star/sdb/XColumnUpdate.idl230
-rw-r--r--offapi/com/sun/star/sdb/XCommandPreparation.idl81
-rw-r--r--offapi/com/sun/star/sdb/XCompletedConnection.idl72
-rw-r--r--offapi/com/sun/star/sdb/XCompletedExecution.idl63
-rw-r--r--offapi/com/sun/star/sdb/XDataAccessDescriptorFactory.idl64
-rw-r--r--offapi/com/sun/star/sdb/XDatabaseAccess.idl74
-rw-r--r--offapi/com/sun/star/sdb/XDatabaseAccessListener.idl53
-rw-r--r--offapi/com/sun/star/sdb/XDatabaseEnvironment.idl73
-rw-r--r--offapi/com/sun/star/sdb/XDatabaseRegistrations.idl159
-rw-r--r--offapi/com/sun/star/sdb/XDatabaseRegistrationsListener.idl71
-rw-r--r--offapi/com/sun/star/sdb/XDocumentDataSource.idl75
-rw-r--r--offapi/com/sun/star/sdb/XFormDocumentsSupplier.idl61
-rw-r--r--offapi/com/sun/star/sdb/XInteractionDocumentSave.idl65
-rw-r--r--offapi/com/sun/star/sdb/XInteractionSupplyParameters.idl62
-rw-r--r--offapi/com/sun/star/sdb/XOfficeDatabaseDocument.idl78
-rw-r--r--offapi/com/sun/star/sdb/XParametersSupplier.idl60
-rw-r--r--offapi/com/sun/star/sdb/XQueriesSupplier.idl63
-rw-r--r--offapi/com/sun/star/sdb/XQueryDefinitionsSupplier.idl59
-rw-r--r--offapi/com/sun/star/sdb/XReportDocumentsSupplier.idl61
-rw-r--r--offapi/com/sun/star/sdb/XResultSetAccess.idl70
-rw-r--r--offapi/com/sun/star/sdb/XRowSetApproveBroadcaster.idl66
-rw-r--r--offapi/com/sun/star/sdb/XRowSetApproveListener.idl77
-rw-r--r--offapi/com/sun/star/sdb/XRowSetChangeBroadcaster.idl63
-rw-r--r--offapi/com/sun/star/sdb/XRowSetChangeListener.idl59
-rw-r--r--offapi/com/sun/star/sdb/XRowSetSupplier.idl73
-rw-r--r--offapi/com/sun/star/sdb/XRowsChangeBroadcaster.idl66
-rw-r--r--offapi/com/sun/star/sdb/XRowsChangeListener.idl60
-rw-r--r--offapi/com/sun/star/sdb/XSQLErrorBroadcaster.idl70
-rw-r--r--offapi/com/sun/star/sdb/XSQLErrorListener.idl62
-rw-r--r--offapi/com/sun/star/sdb/XSQLQueryComposer.idl175
-rw-r--r--offapi/com/sun/star/sdb/XSQLQueryComposerFactory.idl60
-rw-r--r--offapi/com/sun/star/sdb/XSingleSelectQueryAnalyzer.idl262
-rw-r--r--offapi/com/sun/star/sdb/XSingleSelectQueryComposer.idl274
-rw-r--r--offapi/com/sun/star/sdb/XSubDocument.idl102
-rw-r--r--offapi/com/sun/star/sdb/application/CopyTableContinuation.idl69
-rw-r--r--offapi/com/sun/star/sdb/application/CopyTableOperation.idl72
-rw-r--r--offapi/com/sun/star/sdb/application/CopyTableRowEvent.idl71
-rw-r--r--offapi/com/sun/star/sdb/application/CopyTableWizard.idl231
-rw-r--r--offapi/com/sun/star/sdb/application/DatabaseObject.idl77
-rw-r--r--offapi/com/sun/star/sdb/application/DatabaseObjectContainer.idl104
-rw-r--r--offapi/com/sun/star/sdb/application/DefaultViewController.idl101
-rw-r--r--offapi/com/sun/star/sdb/application/NamedDatabaseObject.idl87
-rw-r--r--offapi/com/sun/star/sdb/application/XCopyTableListener.idl98
-rw-r--r--offapi/com/sun/star/sdb/application/XCopyTableWizard.idl153
-rw-r--r--offapi/com/sun/star/sdb/application/XDatabaseDocumentUI.idl330
-rw-r--r--offapi/com/sun/star/sdb/application/XTableUIProvider.idl123
-rw-r--r--offapi/com/sun/star/sdb/application/makefile.mk60
-rw-r--r--offapi/com/sun/star/sdb/makefile.mk147
-rw-r--r--offapi/com/sun/star/sdb/tools/CompositionType.idl89
-rw-r--r--offapi/com/sun/star/sdb/tools/XConnectionSupplier.idl67
-rw-r--r--offapi/com/sun/star/sdb/tools/XConnectionTools.idl146
-rw-r--r--offapi/com/sun/star/sdb/tools/XDataSourceMetaData.idl53
-rw-r--r--offapi/com/sun/star/sdb/tools/XIndexAlteration.idl96
-rw-r--r--offapi/com/sun/star/sdb/tools/XKeyAlteration.idl96
-rw-r--r--offapi/com/sun/star/sdb/tools/XObjectNames.idl179
-rw-r--r--offapi/com/sun/star/sdb/tools/XTableAlteration.idl115
-rw-r--r--offapi/com/sun/star/sdb/tools/XTableName.idl154
-rw-r--r--offapi/com/sun/star/sdb/tools/XTableRename.idl78
-rw-r--r--offapi/com/sun/star/sdb/tools/XViewAccess.idl88
-rw-r--r--offapi/com/sun/star/sdb/tools/makefile.mk59
-rw-r--r--offapi/com/sun/star/sdbc/BatchUpdateException.idl68
-rw-r--r--offapi/com/sun/star/sdbc/BestRowScope.idl86
-rw-r--r--offapi/com/sun/star/sdbc/BestRowType.idl83
-rw-r--r--offapi/com/sun/star/sdbc/CallableStatement.idl110
-rw-r--r--offapi/com/sun/star/sdbc/ChangeAction.idl61
-rw-r--r--offapi/com/sun/star/sdbc/ChangeEvent.idl53
-rw-r--r--offapi/com/sun/star/sdbc/ColumnSearch.idl107
-rw-r--r--offapi/com/sun/star/sdbc/ColumnType.idl83
-rw-r--r--offapi/com/sun/star/sdbc/ColumnValue.idl57
-rw-r--r--offapi/com/sun/star/sdbc/Connection.idl92
-rw-r--r--offapi/com/sun/star/sdbc/ConnectionPool.idl57
-rw-r--r--offapi/com/sun/star/sdbc/ConnectionProperties.idl71
-rw-r--r--offapi/com/sun/star/sdbc/DBASEConnectionProperties.idl66
-rw-r--r--offapi/com/sun/star/sdbc/DataTruncation.idl92
-rw-r--r--offapi/com/sun/star/sdbc/DataType.idl147
-rw-r--r--offapi/com/sun/star/sdbc/Deferrability.idl77
-rw-r--r--offapi/com/sun/star/sdbc/Driver.idl75
-rw-r--r--offapi/com/sun/star/sdbc/DriverManager.idl76
-rw-r--r--offapi/com/sun/star/sdbc/DriverPropertyInfo.idl87
-rw-r--r--offapi/com/sun/star/sdbc/FILEConnectionProperties.idl69
-rw-r--r--offapi/com/sun/star/sdbc/FLATConnectionProperties.idl86
-rw-r--r--offapi/com/sun/star/sdbc/FetchDirection.idl61
-rw-r--r--offapi/com/sun/star/sdbc/IndexType.idl103
-rw-r--r--offapi/com/sun/star/sdbc/JDBCConnectionProperties.idl119
-rw-r--r--offapi/com/sun/star/sdbc/KeyRule.idl192
-rw-r--r--offapi/com/sun/star/sdbc/ODBCConnectionProperties.idl94
-rw-r--r--offapi/com/sun/star/sdbc/PreparedStatement.idl272
-rw-r--r--offapi/com/sun/star/sdbc/ProcedureColumn.idl116
-rw-r--r--offapi/com/sun/star/sdbc/ProcedureResult.idl89
-rw-r--r--offapi/com/sun/star/sdbc/ResultSet.idl249
-rw-r--r--offapi/com/sun/star/sdbc/ResultSetConcurrency.idl58
-rw-r--r--offapi/com/sun/star/sdbc/ResultSetType.idl67
-rw-r--r--offapi/com/sun/star/sdbc/RowSet.idl188
-rw-r--r--offapi/com/sun/star/sdbc/SQLException.idl81
-rw-r--r--offapi/com/sun/star/sdbc/SQLWarning.idl55
-rw-r--r--offapi/com/sun/star/sdbc/Statement.idl233
-rw-r--r--offapi/com/sun/star/sdbc/TransactionIsolation.idl85
-rw-r--r--offapi/com/sun/star/sdbc/XArray.idl255
-rw-r--r--offapi/com/sun/star/sdbc/XBatchExecution.idl83
-rw-r--r--offapi/com/sun/star/sdbc/XBlob.idl251
-rw-r--r--offapi/com/sun/star/sdbc/XClob.idl210
-rw-r--r--offapi/com/sun/star/sdbc/XCloseable.idl59
-rw-r--r--offapi/com/sun/star/sdbc/XColumnLocate.idl76
-rw-r--r--offapi/com/sun/star/sdbc/XConnection.idl438
-rw-r--r--offapi/com/sun/star/sdbc/XDataSource.idl106
-rw-r--r--offapi/com/sun/star/sdbc/XDatabaseMetaData.idl2610
-rw-r--r--offapi/com/sun/star/sdbc/XDatabaseMetaData2.idl66
-rw-r--r--offapi/com/sun/star/sdbc/XDriver.idl182
-rw-r--r--offapi/com/sun/star/sdbc/XDriverAccess.idl64
-rw-r--r--offapi/com/sun/star/sdbc/XDriverManager.idl126
-rw-r--r--offapi/com/sun/star/sdbc/XGeneratedResultSet.idl71
-rw-r--r--offapi/com/sun/star/sdbc/XIsolatedConnection.idl85
-rw-r--r--offapi/com/sun/star/sdbc/XMultipleResults.idl117
-rw-r--r--offapi/com/sun/star/sdbc/XOutParameters.idl148
-rw-r--r--offapi/com/sun/star/sdbc/XParameters.idl458
-rw-r--r--offapi/com/sun/star/sdbc/XPooledConnection.idl80
-rw-r--r--offapi/com/sun/star/sdbc/XPreparedBatchExecution.idl86
-rw-r--r--offapi/com/sun/star/sdbc/XPreparedStatement.idl117
-rw-r--r--offapi/com/sun/star/sdbc/XRef.idl65
-rw-r--r--offapi/com/sun/star/sdbc/XResultSet.idl345
-rw-r--r--offapi/com/sun/star/sdbc/XResultSetMetaData.idl286
-rw-r--r--offapi/com/sun/star/sdbc/XResultSetMetaDataSupplier.idl73
-rw-r--r--offapi/com/sun/star/sdbc/XResultSetUpdate.idl143
-rw-r--r--offapi/com/sun/star/sdbc/XRow.idl349
-rw-r--r--offapi/com/sun/star/sdbc/XRowSet.idl86
-rw-r--r--offapi/com/sun/star/sdbc/XRowSetListener.idl73
-rw-r--r--offapi/com/sun/star/sdbc/XRowUpdate.idl269
-rw-r--r--offapi/com/sun/star/sdbc/XSQLData.idl146
-rw-r--r--offapi/com/sun/star/sdbc/XSQLInput.idl300
-rw-r--r--offapi/com/sun/star/sdbc/XSQLOutput.idl310
-rw-r--r--offapi/com/sun/star/sdbc/XStatement.idl142
-rw-r--r--offapi/com/sun/star/sdbc/XStruct.idl111
-rw-r--r--offapi/com/sun/star/sdbc/XWarningsSupplier.idl84
-rw-r--r--offapi/com/sun/star/sdbc/makefile.mk118
-rw-r--r--offapi/com/sun/star/sdbcx/CheckOption.idl61
-rw-r--r--offapi/com/sun/star/sdbcx/Column.idl125
-rw-r--r--offapi/com/sun/star/sdbcx/ColumnDescriptor.idl107
-rw-r--r--offapi/com/sun/star/sdbcx/CompareBookmark.idl69
-rw-r--r--offapi/com/sun/star/sdbcx/Container.idl101
-rw-r--r--offapi/com/sun/star/sdbcx/DatabaseDefinition.idl80
-rw-r--r--offapi/com/sun/star/sdbcx/Descriptor.idl67
-rw-r--r--offapi/com/sun/star/sdbcx/Driver.idl78
-rw-r--r--offapi/com/sun/star/sdbcx/Group.idl68
-rw-r--r--offapi/com/sun/star/sdbcx/GroupDescriptor.idl53
-rw-r--r--offapi/com/sun/star/sdbcx/Index.idl97
-rw-r--r--offapi/com/sun/star/sdbcx/IndexColumn.idl56
-rw-r--r--offapi/com/sun/star/sdbcx/IndexColumnDescriptor.idl56
-rw-r--r--offapi/com/sun/star/sdbcx/IndexDescriptor.idl73
-rw-r--r--offapi/com/sun/star/sdbcx/Key.idl93
-rw-r--r--offapi/com/sun/star/sdbcx/KeyColumn.idl54
-rw-r--r--offapi/com/sun/star/sdbcx/KeyColumnDescriptor.idl57
-rw-r--r--offapi/com/sun/star/sdbcx/KeyDescriptor.idl75
-rw-r--r--offapi/com/sun/star/sdbcx/KeyType.idl59
-rw-r--r--offapi/com/sun/star/sdbcx/PreparedStatement.idl59
-rw-r--r--offapi/com/sun/star/sdbcx/Privilege.idl91
-rw-r--r--offapi/com/sun/star/sdbcx/PrivilegeObject.idl60
-rw-r--r--offapi/com/sun/star/sdbcx/ReferenceColumn.idl57
-rw-r--r--offapi/com/sun/star/sdbcx/ResultSet.idl84
-rw-r--r--offapi/com/sun/star/sdbcx/Statement.idl64
-rw-r--r--offapi/com/sun/star/sdbcx/Table.idl134
-rw-r--r--offapi/com/sun/star/sdbcx/TableDescriptor.idl88
-rw-r--r--offapi/com/sun/star/sdbcx/User.idl68
-rw-r--r--offapi/com/sun/star/sdbcx/UserDescriptor.idl56
-rw-r--r--offapi/com/sun/star/sdbcx/View.idl108
-rw-r--r--offapi/com/sun/star/sdbcx/ViewDescriptor.idl74
-rw-r--r--offapi/com/sun/star/sdbcx/XAlterTable.idl97
-rw-r--r--offapi/com/sun/star/sdbcx/XAlterView.idl67
-rw-r--r--offapi/com/sun/star/sdbcx/XAppend.idl75
-rw-r--r--offapi/com/sun/star/sdbcx/XAuthorizable.idl110
-rw-r--r--offapi/com/sun/star/sdbcx/XColumnsSupplier.idl64
-rw-r--r--offapi/com/sun/star/sdbcx/XCreateCatalog.idl74
-rw-r--r--offapi/com/sun/star/sdbcx/XDataDefinitionSupplier.idl92
-rw-r--r--offapi/com/sun/star/sdbcx/XDataDescriptorFactory.idl58
-rw-r--r--offapi/com/sun/star/sdbcx/XDeleteRows.idl67
-rw-r--r--offapi/com/sun/star/sdbcx/XDrop.idl81
-rw-r--r--offapi/com/sun/star/sdbcx/XDropCatalog.idl76
-rw-r--r--offapi/com/sun/star/sdbcx/XGroupsSupplier.idl60
-rw-r--r--offapi/com/sun/star/sdbcx/XIndexesSupplier.idl60
-rw-r--r--offapi/com/sun/star/sdbcx/XKeysSupplier.idl60
-rw-r--r--offapi/com/sun/star/sdbcx/XRename.idl70
-rw-r--r--offapi/com/sun/star/sdbcx/XRowLocate.idl158
-rw-r--r--offapi/com/sun/star/sdbcx/XTablesSupplier.idl60
-rw-r--r--offapi/com/sun/star/sdbcx/XUser.idl59
-rw-r--r--offapi/com/sun/star/sdbcx/XUsersSupplier.idl64
-rw-r--r--offapi/com/sun/star/sdbcx/XViewsSupplier.idl60
-rw-r--r--offapi/com/sun/star/sdbcx/makefile.mk97
-rw-r--r--offapi/com/sun/star/security/CertificateCharacters.idl61
-rw-r--r--offapi/com/sun/star/security/CertificateContainer.idl46
-rw-r--r--offapi/com/sun/star/security/CertificateContainerStatus.idl64
-rw-r--r--offapi/com/sun/star/security/CertificateException.idl54
-rw-r--r--offapi/com/sun/star/security/CertificateValidity.idl133
-rw-r--r--offapi/com/sun/star/security/CryptographyException.idl55
-rw-r--r--offapi/com/sun/star/security/DocumentDigitalSignatures.idl55
-rw-r--r--offapi/com/sun/star/security/DocumentSignatureInformation.idl86
-rw-r--r--offapi/com/sun/star/security/EncryptionException.idl55
-rw-r--r--offapi/com/sun/star/security/KeyException.idl55
-rw-r--r--offapi/com/sun/star/security/KeyUsage.idl49
-rw-r--r--offapi/com/sun/star/security/NoPasswordException.idl55
-rw-r--r--offapi/com/sun/star/security/SecurityInfrastructureException.idl55
-rw-r--r--offapi/com/sun/star/security/SerialNumberAdapter.idl57
-rw-r--r--offapi/com/sun/star/security/SignatureException.idl55
-rw-r--r--offapi/com/sun/star/security/XCertificate.idl137
-rw-r--r--offapi/com/sun/star/security/XCertificateContainer.idl66
-rw-r--r--offapi/com/sun/star/security/XCertificateExtension.idl65
-rw-r--r--offapi/com/sun/star/security/XDocumentDigitalSignatures.idl153
-rw-r--r--offapi/com/sun/star/security/XSerialNumberAdapter.idl59
-rw-r--r--offapi/com/sun/star/security/makefile.mk67
-rw-r--r--offapi/com/sun/star/setup/ActionType.idl67
-rw-r--r--offapi/com/sun/star/setup/BaseAction.idl48
-rw-r--r--offapi/com/sun/star/setup/CopyFileAction.idl64
-rw-r--r--offapi/com/sun/star/setup/DeleteDirAction.idl44
-rw-r--r--offapi/com/sun/star/setup/DeleteFileAction.idl60
-rw-r--r--offapi/com/sun/star/setup/DeleteFolderAction.idl44
-rw-r--r--offapi/com/sun/star/setup/DeleteFolderItemAction.idl47
-rw-r--r--offapi/com/sun/star/setup/DownloadAction.idl50
-rw-r--r--offapi/com/sun/star/setup/FontAction.idl50
-rw-r--r--offapi/com/sun/star/setup/InstallEnvironment.idl116
-rw-r--r--offapi/com/sun/star/setup/InstallResponse.idl62
-rw-r--r--offapi/com/sun/star/setup/InstallType.idl61
-rw-r--r--offapi/com/sun/star/setup/MakeDirAction.idl47
-rw-r--r--offapi/com/sun/star/setup/MakeFolderAction.idl47
-rw-r--r--offapi/com/sun/star/setup/MakeFolderItemAction.idl56
-rw-r--r--offapi/com/sun/star/setup/MakeShortcutAction.idl53
-rw-r--r--offapi/com/sun/star/setup/MirrorEntry.idl46
-rw-r--r--offapi/com/sun/star/setup/ModuleInfo.idl70
-rw-r--r--offapi/com/sun/star/setup/ModuleState.idl46
-rw-r--r--offapi/com/sun/star/setup/OSType.idl74
-rw-r--r--offapi/com/sun/star/setup/ProductRegistration.idl93
-rw-r--r--offapi/com/sun/star/setup/ProfileItemAction.idl56
-rw-r--r--offapi/com/sun/star/setup/Setup.idl49
-rw-r--r--offapi/com/sun/star/setup/SizeInfo.idl49
-rw-r--r--offapi/com/sun/star/setup/UnzipAction.idl70
-rw-r--r--offapi/com/sun/star/setup/UpdateType.idl49
-rw-r--r--offapi/com/sun/star/setup/VersionIdentifier.idl57
-rw-r--r--offapi/com/sun/star/setup/WindowsRegistryAction.idl62
-rw-r--r--offapi/com/sun/star/setup/XSetup.idl108
-rw-r--r--offapi/com/sun/star/setup/makefile.mk74
-rw-r--r--offapi/com/sun/star/sheet/AccessibleCell.idl135
-rw-r--r--offapi/com/sun/star/sheet/AccessibleCsvCell.idl81
-rw-r--r--offapi/com/sun/star/sheet/AccessibleCsvRuler.idl80
-rw-r--r--offapi/com/sun/star/sheet/AccessibleCsvTable.idl91
-rw-r--r--offapi/com/sun/star/sheet/AccessiblePageHeaderFooterAreasView.idl148
-rw-r--r--offapi/com/sun/star/sheet/AccessibleSpreadsheet.idl157
-rw-r--r--offapi/com/sun/star/sheet/AccessibleSpreadsheetDocumentView.idl166
-rw-r--r--offapi/com/sun/star/sheet/AccessibleSpreadsheetPageView.idl183
-rw-r--r--offapi/com/sun/star/sheet/ActivationEvent.idl64
-rw-r--r--offapi/com/sun/star/sheet/AddIn.idl160
-rw-r--r--offapi/com/sun/star/sheet/AddressConvention.idl70
-rw-r--r--offapi/com/sun/star/sheet/Border.idl72
-rw-r--r--offapi/com/sun/star/sheet/CellAnnotation.idl91
-rw-r--r--offapi/com/sun/star/sheet/CellAnnotationShape.idl57
-rw-r--r--offapi/com/sun/star/sheet/CellAnnotations.idl75
-rw-r--r--offapi/com/sun/star/sheet/CellAnnotationsEnumeration.idl62
-rw-r--r--offapi/com/sun/star/sheet/CellAreaLink.idl121
-rw-r--r--offapi/com/sun/star/sheet/CellAreaLinks.idl83
-rw-r--r--offapi/com/sun/star/sheet/CellAreaLinksEnumeration.idl62
-rw-r--r--offapi/com/sun/star/sheet/CellDeleteMode.idl78
-rw-r--r--offapi/com/sun/star/sheet/CellFlags.idl114
-rw-r--r--offapi/com/sun/star/sheet/CellFormatRanges.idl79
-rw-r--r--offapi/com/sun/star/sheet/CellFormatRangesEnumeration.idl62
-rw-r--r--offapi/com/sun/star/sheet/CellInsertMode.idl78
-rw-r--r--offapi/com/sun/star/sheet/Cells.idl62
-rw-r--r--offapi/com/sun/star/sheet/CellsEnumeration.idl62
-rw-r--r--offapi/com/sun/star/sheet/ComplexReference.idl63
-rw-r--r--offapi/com/sun/star/sheet/ConditionOperator.idl108
-rw-r--r--offapi/com/sun/star/sheet/ConsolidationDescriptor.idl61
-rw-r--r--offapi/com/sun/star/sheet/DDEItemInfo.idl65
-rw-r--r--offapi/com/sun/star/sheet/DDELink.idl94
-rw-r--r--offapi/com/sun/star/sheet/DDELinkInfo.idl80
-rw-r--r--offapi/com/sun/star/sheet/DDELinkMode.idl70
-rw-r--r--offapi/com/sun/star/sheet/DDELinks.idl98
-rw-r--r--offapi/com/sun/star/sheet/DDELinksEnumeration.idl62
-rw-r--r--offapi/com/sun/star/sheet/DataImportMode.idl72
-rw-r--r--offapi/com/sun/star/sheet/DataPilotDescriptor.idl151
-rw-r--r--offapi/com/sun/star/sheet/DataPilotField.idl248
-rw-r--r--offapi/com/sun/star/sheet/DataPilotFieldAutoShowInfo.idl83
-rw-r--r--offapi/com/sun/star/sheet/DataPilotFieldFilter.idl51
-rw-r--r--offapi/com/sun/star/sheet/DataPilotFieldGroup.idl133
-rw-r--r--offapi/com/sun/star/sheet/DataPilotFieldGroupBy.idl138
-rw-r--r--offapi/com/sun/star/sheet/DataPilotFieldGroupEnumeration.idl64
-rw-r--r--offapi/com/sun/star/sheet/DataPilotFieldGroupInfo.idl164
-rw-r--r--offapi/com/sun/star/sheet/DataPilotFieldGroupItem.idl60
-rw-r--r--offapi/com/sun/star/sheet/DataPilotFieldGroups.idl127
-rw-r--r--offapi/com/sun/star/sheet/DataPilotFieldGroupsEnumeration.idl64
-rw-r--r--offapi/com/sun/star/sheet/DataPilotFieldLayoutInfo.idl66
-rw-r--r--offapi/com/sun/star/sheet/DataPilotFieldLayoutMode.idl86
-rw-r--r--offapi/com/sun/star/sheet/DataPilotFieldOrientation.idl78
-rw-r--r--offapi/com/sun/star/sheet/DataPilotFieldReference.idl91
-rw-r--r--offapi/com/sun/star/sheet/DataPilotFieldReferenceItemType.idl68
-rw-r--r--offapi/com/sun/star/sheet/DataPilotFieldReferenceType.idl175
-rw-r--r--offapi/com/sun/star/sheet/DataPilotFieldShowItemsMode.idl64
-rw-r--r--offapi/com/sun/star/sheet/DataPilotFieldSortInfo.idl74
-rw-r--r--offapi/com/sun/star/sheet/DataPilotFieldSortMode.idl81
-rw-r--r--offapi/com/sun/star/sheet/DataPilotFields.idl84
-rw-r--r--offapi/com/sun/star/sheet/DataPilotFieldsEnumeration.idl62
-rw-r--r--offapi/com/sun/star/sheet/DataPilotItem.idl90
-rw-r--r--offapi/com/sun/star/sheet/DataPilotItems.idl80
-rw-r--r--offapi/com/sun/star/sheet/DataPilotItemsEnumeration.idl62
-rw-r--r--offapi/com/sun/star/sheet/DataPilotOutputRangeType.idl72
-rw-r--r--offapi/com/sun/star/sheet/DataPilotSource.idl129
-rw-r--r--offapi/com/sun/star/sheet/DataPilotSourceDimension.idl174
-rw-r--r--offapi/com/sun/star/sheet/DataPilotSourceDimensions.idl62
-rw-r--r--offapi/com/sun/star/sheet/DataPilotSourceHierarchies.idl64
-rw-r--r--offapi/com/sun/star/sheet/DataPilotSourceHierarchy.idl72
-rw-r--r--offapi/com/sun/star/sheet/DataPilotSourceLevel.idl110
-rw-r--r--offapi/com/sun/star/sheet/DataPilotSourceLevels.idl63
-rw-r--r--offapi/com/sun/star/sheet/DataPilotSourceMember.idl99
-rw-r--r--offapi/com/sun/star/sheet/DataPilotSourceMembers.idl63
-rw-r--r--offapi/com/sun/star/sheet/DataPilotTable.idl80
-rw-r--r--offapi/com/sun/star/sheet/DataPilotTableHeaderData.idl79
-rw-r--r--offapi/com/sun/star/sheet/DataPilotTablePositionData.idl90
-rw-r--r--offapi/com/sun/star/sheet/DataPilotTablePositionType.idl78
-rw-r--r--offapi/com/sun/star/sheet/DataPilotTableResultData.idl86
-rw-r--r--offapi/com/sun/star/sheet/DataPilotTables.idl77
-rw-r--r--offapi/com/sun/star/sheet/DataPilotTablesEnumeration.idl62
-rw-r--r--offapi/com/sun/star/sheet/DataResult.idl62
-rw-r--r--offapi/com/sun/star/sheet/DataResultFlags.idl69
-rw-r--r--offapi/com/sun/star/sheet/DatabaseImportDescriptor.idl94
-rw-r--r--offapi/com/sun/star/sheet/DatabaseRange.idl172
-rw-r--r--offapi/com/sun/star/sheet/DatabaseRanges.idl83
-rw-r--r--offapi/com/sun/star/sheet/DatabaseRangesEnumeration.idl62
-rw-r--r--offapi/com/sun/star/sheet/DimensionFlags.idl74
-rw-r--r--offapi/com/sun/star/sheet/DocumentSettings.idl137
-rw-r--r--offapi/com/sun/star/sheet/ExternalDocLink.idl54
-rw-r--r--offapi/com/sun/star/sheet/ExternalDocLinks.idl52
-rw-r--r--offapi/com/sun/star/sheet/ExternalLinkInfo.idl77
-rw-r--r--offapi/com/sun/star/sheet/ExternalLinkType.idl64
-rw-r--r--offapi/com/sun/star/sheet/ExternalReference.idl96
-rw-r--r--offapi/com/sun/star/sheet/ExternalSheetCache.idl52
-rw-r--r--offapi/com/sun/star/sheet/FillDateMode.idl75
-rw-r--r--offapi/com/sun/star/sheet/FillDirection.idl73
-rw-r--r--offapi/com/sun/star/sheet/FillMode.idl93
-rw-r--r--offapi/com/sun/star/sheet/FilterConnection.idl61
-rw-r--r--offapi/com/sun/star/sheet/FilterFormulaParser.idl52
-rw-r--r--offapi/com/sun/star/sheet/FilterOperator.idl120
-rw-r--r--offapi/com/sun/star/sheet/FilterOperator2.idl161
-rw-r--r--offapi/com/sun/star/sheet/FormulaLanguage.idl70
-rw-r--r--offapi/com/sun/star/sheet/FormulaMapGroup.idl77
-rw-r--r--offapi/com/sun/star/sheet/FormulaMapGroupSpecialOffset.idl210
-rw-r--r--offapi/com/sun/star/sheet/FormulaOpCodeMapEntry.idl65
-rw-r--r--offapi/com/sun/star/sheet/FormulaParser.idl118
-rw-r--r--offapi/com/sun/star/sheet/FormulaResult.idl66
-rw-r--r--offapi/com/sun/star/sheet/FormulaToken.idl64
-rw-r--r--offapi/com/sun/star/sheet/FunctionAccess.idl95
-rw-r--r--offapi/com/sun/star/sheet/FunctionArgument.idl69
-rw-r--r--offapi/com/sun/star/sheet/FunctionCategory.idl116
-rw-r--r--offapi/com/sun/star/sheet/FunctionDescription.idl89
-rw-r--r--offapi/com/sun/star/sheet/FunctionDescriptionEnumeration.idl62
-rw-r--r--offapi/com/sun/star/sheet/FunctionDescriptions.idl91
-rw-r--r--offapi/com/sun/star/sheet/GeneralFunction.idl128
-rw-r--r--offapi/com/sun/star/sheet/GlobalSheetSettings.idl192
-rw-r--r--offapi/com/sun/star/sheet/GoalResult.idl58
-rw-r--r--offapi/com/sun/star/sheet/HeaderFooterContent.idl60
-rw-r--r--offapi/com/sun/star/sheet/LabelRange.idl61
-rw-r--r--offapi/com/sun/star/sheet/LabelRanges.idl87
-rw-r--r--offapi/com/sun/star/sheet/LabelRangesEnumeration.idl62
-rw-r--r--offapi/com/sun/star/sheet/LocalizedName.idl65
-rw-r--r--offapi/com/sun/star/sheet/MemberResult.idl68
-rw-r--r--offapi/com/sun/star/sheet/MemberResultFlags.idl77
-rw-r--r--offapi/com/sun/star/sheet/MoveDirection.idl73
-rw-r--r--offapi/com/sun/star/sheet/NamedRange.idl112
-rw-r--r--offapi/com/sun/star/sheet/NamedRangeFlag.idl72
-rw-r--r--offapi/com/sun/star/sheet/NamedRanges.idl102
-rw-r--r--offapi/com/sun/star/sheet/NamedRangesEnumeration.idl62
-rw-r--r--offapi/com/sun/star/sheet/NoConvergenceException.idl52
-rw-r--r--offapi/com/sun/star/sheet/PasteOperation.idl79
-rw-r--r--offapi/com/sun/star/sheet/RangeSelectionArguments.idl72
-rw-r--r--offapi/com/sun/star/sheet/RangeSelectionEvent.idl57
-rw-r--r--offapi/com/sun/star/sheet/RecentFunctions.idl58
-rw-r--r--offapi/com/sun/star/sheet/ReferenceFlags.idl97
-rw-r--r--offapi/com/sun/star/sheet/ResultEvent.idl63
-rw-r--r--offapi/com/sun/star/sheet/Scenario.idl122
-rw-r--r--offapi/com/sun/star/sheet/Scenarios.idl81
-rw-r--r--offapi/com/sun/star/sheet/ScenariosEnumeration.idl62
-rw-r--r--offapi/com/sun/star/sheet/Shape.idl82
-rw-r--r--offapi/com/sun/star/sheet/SheetCell.idl340
-rw-r--r--offapi/com/sun/star/sheet/SheetCellCursor.idl92
-rw-r--r--offapi/com/sun/star/sheet/SheetCellRange.idl434
-rw-r--r--offapi/com/sun/star/sheet/SheetCellRanges.idl257
-rw-r--r--offapi/com/sun/star/sheet/SheetCellRangesEnumeration.idl62
-rw-r--r--offapi/com/sun/star/sheet/SheetFilterDescriptor.idl148
-rw-r--r--offapi/com/sun/star/sheet/SheetLink.idl109
-rw-r--r--offapi/com/sun/star/sheet/SheetLinkMode.idl70
-rw-r--r--offapi/com/sun/star/sheet/SheetLinks.idl89
-rw-r--r--offapi/com/sun/star/sheet/SheetLinksEnumeration.idl62
-rw-r--r--offapi/com/sun/star/sheet/SheetRangesQuery.idl68
-rw-r--r--offapi/com/sun/star/sheet/SheetSortDescriptor.idl102
-rw-r--r--offapi/com/sun/star/sheet/SheetSortDescriptor2.idl116
-rw-r--r--offapi/com/sun/star/sheet/SingleReference.idl90
-rw-r--r--offapi/com/sun/star/sheet/Solver.idl50
-rw-r--r--offapi/com/sun/star/sheet/SolverConstraint.idl66
-rw-r--r--offapi/com/sun/star/sheet/SolverConstraintOperator.idl62
-rw-r--r--offapi/com/sun/star/sheet/Spreadsheet.idl279
-rw-r--r--offapi/com/sun/star/sheet/SpreadsheetDocument.idl288
-rw-r--r--offapi/com/sun/star/sheet/SpreadsheetDocumentSettings.idl250
-rw-r--r--offapi/com/sun/star/sheet/SpreadsheetDrawPage.idl97
-rw-r--r--offapi/com/sun/star/sheet/SpreadsheetView.idl148
-rw-r--r--offapi/com/sun/star/sheet/SpreadsheetViewPane.idl71
-rw-r--r--offapi/com/sun/star/sheet/SpreadsheetViewPanesEnumeration.idl62
-rw-r--r--offapi/com/sun/star/sheet/SpreadsheetViewSettings.idl193
-rw-r--r--offapi/com/sun/star/sheet/Spreadsheets.idl95
-rw-r--r--offapi/com/sun/star/sheet/SpreadsheetsEnumeration.idl62
-rw-r--r--offapi/com/sun/star/sheet/StatusBarFunction.idl91
-rw-r--r--offapi/com/sun/star/sheet/SubTotalColumn.idl66
-rw-r--r--offapi/com/sun/star/sheet/SubTotalDescriptor.idl150
-rw-r--r--offapi/com/sun/star/sheet/SubTotalField.idl63
-rw-r--r--offapi/com/sun/star/sheet/SubTotalFieldsEnumeration.idl62
-rw-r--r--offapi/com/sun/star/sheet/TableAutoFormat.idl141
-rw-r--r--offapi/com/sun/star/sheet/TableAutoFormatEnumeration.idl62
-rw-r--r--offapi/com/sun/star/sheet/TableAutoFormatField.idl329
-rw-r--r--offapi/com/sun/star/sheet/TableAutoFormats.idl85
-rw-r--r--offapi/com/sun/star/sheet/TableAutoFormatsEnumeration.idl62
-rw-r--r--offapi/com/sun/star/sheet/TableCellStyle.idl112
-rw-r--r--offapi/com/sun/star/sheet/TableConditionalEntry.idl70
-rw-r--r--offapi/com/sun/star/sheet/TableConditionalEntryEnumeration.idl62
-rw-r--r--offapi/com/sun/star/sheet/TableConditionalFormat.idl103
-rw-r--r--offapi/com/sun/star/sheet/TableFilterField.idl95
-rw-r--r--offapi/com/sun/star/sheet/TableFilterField2.idl103
-rw-r--r--offapi/com/sun/star/sheet/TableOperationMode.idl76
-rw-r--r--offapi/com/sun/star/sheet/TablePageBreakData.idl62
-rw-r--r--offapi/com/sun/star/sheet/TablePageStyle.idl221
-rw-r--r--offapi/com/sun/star/sheet/TableValidation.idl148
-rw-r--r--offapi/com/sun/star/sheet/TableValidationVisibility.idl67
-rw-r--r--offapi/com/sun/star/sheet/UniqueCellFormatRanges.idl80
-rw-r--r--offapi/com/sun/star/sheet/UniqueCellFormatRangesEnumeration.idl63
-rw-r--r--offapi/com/sun/star/sheet/ValidationAlertStyle.idl74
-rw-r--r--offapi/com/sun/star/sheet/ValidationType.idl96
-rw-r--r--offapi/com/sun/star/sheet/VolatileResult.idl64
-rw-r--r--offapi/com/sun/star/sheet/XActivationBroadcaster.idl85
-rw-r--r--offapi/com/sun/star/sheet/XActivationEventListener.idl74
-rw-r--r--offapi/com/sun/star/sheet/XAddIn.idl218
-rw-r--r--offapi/com/sun/star/sheet/XAreaLink.idl89
-rw-r--r--offapi/com/sun/star/sheet/XAreaLinks.idl95
-rw-r--r--offapi/com/sun/star/sheet/XArrayFormulaRange.idl69
-rw-r--r--offapi/com/sun/star/sheet/XArrayFormulaTokens.idl68
-rw-r--r--offapi/com/sun/star/sheet/XCalculatable.idl95
-rw-r--r--offapi/com/sun/star/sheet/XCellAddressable.idl66
-rw-r--r--offapi/com/sun/star/sheet/XCellFormatRangesSupplier.idl75
-rw-r--r--offapi/com/sun/star/sheet/XCellRangeAddressable.idl66
-rw-r--r--offapi/com/sun/star/sheet/XCellRangeData.idl69
-rw-r--r--offapi/com/sun/star/sheet/XCellRangeFormula.idl79
-rw-r--r--offapi/com/sun/star/sheet/XCellRangeMovement.idl131
-rw-r--r--offapi/com/sun/star/sheet/XCellRangeReferrer.idl68
-rw-r--r--offapi/com/sun/star/sheet/XCellRangesAccess.idl152
-rw-r--r--offapi/com/sun/star/sheet/XCellRangesQuery.idl172
-rw-r--r--offapi/com/sun/star/sheet/XCellSeries.idl110
-rw-r--r--offapi/com/sun/star/sheet/XCompatibilityNames.idl82
-rw-r--r--offapi/com/sun/star/sheet/XConsolidatable.idl87
-rw-r--r--offapi/com/sun/star/sheet/XConsolidationDescriptor.idl150
-rw-r--r--offapi/com/sun/star/sheet/XDDELink.idl75
-rw-r--r--offapi/com/sun/star/sheet/XDDELinkResults.idl77
-rw-r--r--offapi/com/sun/star/sheet/XDDELinks.idl92
-rw-r--r--offapi/com/sun/star/sheet/XDataPilotDataLayoutFieldSupplier.idl74
-rw-r--r--offapi/com/sun/star/sheet/XDataPilotDescriptor.idl150
-rw-r--r--offapi/com/sun/star/sheet/XDataPilotField.idl67
-rw-r--r--offapi/com/sun/star/sheet/XDataPilotFieldGrouping.idl174
-rw-r--r--offapi/com/sun/star/sheet/XDataPilotMemberResults.idl70
-rw-r--r--offapi/com/sun/star/sheet/XDataPilotResults.idl70
-rw-r--r--offapi/com/sun/star/sheet/XDataPilotTable.idl73
-rw-r--r--offapi/com/sun/star/sheet/XDataPilotTable2.idl131
-rw-r--r--offapi/com/sun/star/sheet/XDataPilotTables.idl106
-rw-r--r--offapi/com/sun/star/sheet/XDataPilotTablesSupplier.idl66
-rw-r--r--offapi/com/sun/star/sheet/XDatabaseRange.idl127
-rw-r--r--offapi/com/sun/star/sheet/XDatabaseRanges.idl72
-rw-r--r--offapi/com/sun/star/sheet/XDimensionsSupplier.idl66
-rw-r--r--offapi/com/sun/star/sheet/XDocumentAuditing.idl62
-rw-r--r--offapi/com/sun/star/sheet/XDrillDownDataSupplier.idl87
-rw-r--r--offapi/com/sun/star/sheet/XEnhancedMouseClickBroadcaster.idl91
-rw-r--r--offapi/com/sun/star/sheet/XExternalDocLink.idl98
-rw-r--r--offapi/com/sun/star/sheet/XExternalDocLinks.idl63
-rw-r--r--offapi/com/sun/star/sheet/XExternalSheetCache.idl99
-rw-r--r--offapi/com/sun/star/sheet/XExternalSheetName.idl82
-rw-r--r--offapi/com/sun/star/sheet/XFillAcrossSheet.idl60
-rw-r--r--offapi/com/sun/star/sheet/XFilterFormulaParser.idl59
-rw-r--r--offapi/com/sun/star/sheet/XFormulaOpCodeMapper.idl155
-rw-r--r--offapi/com/sun/star/sheet/XFormulaParser.idl68
-rw-r--r--offapi/com/sun/star/sheet/XFormulaQuery.idl100
-rw-r--r--offapi/com/sun/star/sheet/XFormulaTokens.idl68
-rw-r--r--offapi/com/sun/star/sheet/XFunctionAccess.idl125
-rw-r--r--offapi/com/sun/star/sheet/XFunctionDescriptions.idl83
-rw-r--r--offapi/com/sun/star/sheet/XGoalSeek.idl83
-rw-r--r--offapi/com/sun/star/sheet/XHeaderFooterContent.idl86
-rw-r--r--offapi/com/sun/star/sheet/XHierarchiesSupplier.idl68
-rw-r--r--offapi/com/sun/star/sheet/XLabelRange.idl87
-rw-r--r--offapi/com/sun/star/sheet/XLabelRanges.idl80
-rw-r--r--offapi/com/sun/star/sheet/XLevelsSupplier.idl68
-rw-r--r--offapi/com/sun/star/sheet/XMembersSupplier.idl68
-rw-r--r--offapi/com/sun/star/sheet/XMultiFormulaTokens.idl99
-rw-r--r--offapi/com/sun/star/sheet/XMultipleOperation.idl102
-rw-r--r--offapi/com/sun/star/sheet/XNamedRange.idl111
-rw-r--r--offapi/com/sun/star/sheet/XNamedRanges.idl142
-rw-r--r--offapi/com/sun/star/sheet/XPrintAreas.idl165
-rw-r--r--offapi/com/sun/star/sheet/XRangeSelection.idl94
-rw-r--r--offapi/com/sun/star/sheet/XRangeSelectionChangeListener.idl64
-rw-r--r--offapi/com/sun/star/sheet/XRangeSelectionListener.idl67
-rw-r--r--offapi/com/sun/star/sheet/XRecentFunctions.idl83
-rw-r--r--offapi/com/sun/star/sheet/XResultListener.idl64
-rw-r--r--offapi/com/sun/star/sheet/XScenario.idl93
-rw-r--r--offapi/com/sun/star/sheet/XScenarioEnhanced.idl72
-rw-r--r--offapi/com/sun/star/sheet/XScenarios.idl84
-rw-r--r--offapi/com/sun/star/sheet/XScenariosSupplier.idl64
-rw-r--r--offapi/com/sun/star/sheet/XSheetAnnotation.idl91
-rw-r--r--offapi/com/sun/star/sheet/XSheetAnnotationAnchor.idl65
-rw-r--r--offapi/com/sun/star/sheet/XSheetAnnotationShapeSupplier.idl66
-rw-r--r--offapi/com/sun/star/sheet/XSheetAnnotations.idl90
-rw-r--r--offapi/com/sun/star/sheet/XSheetAnnotationsSupplier.idl64
-rw-r--r--offapi/com/sun/star/sheet/XSheetAuditing.idl124
-rw-r--r--offapi/com/sun/star/sheet/XSheetCellCursor.idl113
-rw-r--r--offapi/com/sun/star/sheet/XSheetCellRange.idl70
-rw-r--r--offapi/com/sun/star/sheet/XSheetCellRangeContainer.idl127
-rw-r--r--offapi/com/sun/star/sheet/XSheetCellRanges.idl92
-rw-r--r--offapi/com/sun/star/sheet/XSheetCondition.idl132
-rw-r--r--offapi/com/sun/star/sheet/XSheetConditionalEntries.idl102
-rw-r--r--offapi/com/sun/star/sheet/XSheetConditionalEntry.idl69
-rw-r--r--offapi/com/sun/star/sheet/XSheetFilterDescriptor.idl71
-rw-r--r--offapi/com/sun/star/sheet/XSheetFilterDescriptor2.idl76
-rw-r--r--offapi/com/sun/star/sheet/XSheetFilterable.idl81
-rw-r--r--offapi/com/sun/star/sheet/XSheetFilterableEx.idl71
-rw-r--r--offapi/com/sun/star/sheet/XSheetLinkable.idl134
-rw-r--r--offapi/com/sun/star/sheet/XSheetOperation.idl87
-rw-r--r--offapi/com/sun/star/sheet/XSheetOutline.idl141
-rw-r--r--offapi/com/sun/star/sheet/XSheetPageBreak.idl94
-rw-r--r--offapi/com/sun/star/sheet/XSheetPastable.idl100
-rw-r--r--offapi/com/sun/star/sheet/XSolver.idl84
-rw-r--r--offapi/com/sun/star/sheet/XSolverDescription.idl65
-rw-r--r--offapi/com/sun/star/sheet/XSpreadsheet.idl76
-rw-r--r--offapi/com/sun/star/sheet/XSpreadsheetDocument.idl66
-rw-r--r--offapi/com/sun/star/sheet/XSpreadsheetView.idl69
-rw-r--r--offapi/com/sun/star/sheet/XSpreadsheets.idl93
-rw-r--r--offapi/com/sun/star/sheet/XSubTotalCalculatable.idl95
-rw-r--r--offapi/com/sun/star/sheet/XSubTotalDescriptor.idl80
-rw-r--r--offapi/com/sun/star/sheet/XSubTotalField.idl87
-rw-r--r--offapi/com/sun/star/sheet/XUniqueCellFormatRangesSupplier.idl77
-rw-r--r--offapi/com/sun/star/sheet/XUsedAreaCursor.idl78
-rw-r--r--offapi/com/sun/star/sheet/XViewFreezable.idl75
-rw-r--r--offapi/com/sun/star/sheet/XViewPane.idl89
-rw-r--r--offapi/com/sun/star/sheet/XViewPanesSupplier.idl64
-rw-r--r--offapi/com/sun/star/sheet/XViewSplitable.idl102
-rw-r--r--offapi/com/sun/star/sheet/XVolatileResult.idl73
-rw-r--r--offapi/com/sun/star/sheet/_NamedRange.idl73
-rw-r--r--offapi/com/sun/star/sheet/makefile.mk349
-rw-r--r--offapi/com/sun/star/smarttags/SmartTagAction.idl58
-rw-r--r--offapi/com/sun/star/smarttags/SmartTagRecognizer.idl60
-rw-r--r--offapi/com/sun/star/smarttags/SmartTagRecognizerMode.idl60
-rw-r--r--offapi/com/sun/star/smarttags/XSmartTagAction.idl358
-rw-r--r--offapi/com/sun/star/smarttags/XSmartTagRecognizer.idl231
-rw-r--r--offapi/com/sun/star/smarttags/makefile.mk66
-rw-r--r--offapi/com/sun/star/style/BreakType.idl131
-rw-r--r--offapi/com/sun/star/style/CaseMap.idl87
-rw-r--r--offapi/com/sun/star/style/CellStyle.idl60
-rw-r--r--offapi/com/sun/star/style/CharacterProperties.idl450
-rw-r--r--offapi/com/sun/star/style/CharacterPropertiesAsian.idl91
-rw-r--r--offapi/com/sun/star/style/CharacterPropertiesComplex.idl91
-rw-r--r--offapi/com/sun/star/style/CharacterStyle.idl86
-rw-r--r--offapi/com/sun/star/style/DropCapFormat.idl70
-rw-r--r--offapi/com/sun/star/style/GraphicLocation.idl137
-rw-r--r--offapi/com/sun/star/style/HorizontalAlignment.idl76
-rw-r--r--offapi/com/sun/star/style/LineNumberPosition.idl80
-rw-r--r--offapi/com/sun/star/style/LineSpacing.idl63
-rw-r--r--offapi/com/sun/star/style/LineSpacingMode.idl79
-rw-r--r--offapi/com/sun/star/style/NumberingAlignment.idl83
-rw-r--r--offapi/com/sun/star/style/NumberingLevel.idl121
-rw-r--r--offapi/com/sun/star/style/NumberingRule.idl68
-rw-r--r--offapi/com/sun/star/style/NumberingType.idl480
-rw-r--r--offapi/com/sun/star/style/PageProperties.idl502
-rw-r--r--offapi/com/sun/star/style/PageStyle.idl70
-rw-r--r--offapi/com/sun/star/style/PageStyleLayout.idl73
-rw-r--r--offapi/com/sun/star/style/ParagraphAdjust.idl86
-rw-r--r--offapi/com/sun/star/style/ParagraphProperties.idl463
-rw-r--r--offapi/com/sun/star/style/ParagraphPropertiesAsian.idl63
-rw-r--r--offapi/com/sun/star/style/ParagraphPropertiesComplex.idl53
-rw-r--r--offapi/com/sun/star/style/ParagraphStyle.idl163
-rw-r--r--offapi/com/sun/star/style/ParagraphStyleCategory.idl86
-rw-r--r--offapi/com/sun/star/style/Style.idl174
-rw-r--r--offapi/com/sun/star/style/StyleFamilies.idl119
-rw-r--r--offapi/com/sun/star/style/StyleFamily.idl89
-rw-r--r--offapi/com/sun/star/style/TabAlign.idl91
-rw-r--r--offapi/com/sun/star/style/TabStop.idl84
-rw-r--r--offapi/com/sun/star/style/VerticalAlignment.idl76
-rw-r--r--offapi/com/sun/star/style/XAutoStyle.idl74
-rw-r--r--offapi/com/sun/star/style/XAutoStyleFamily.idl65
-rw-r--r--offapi/com/sun/star/style/XAutoStyles.idl64
-rw-r--r--offapi/com/sun/star/style/XAutoStylesSupplier.idl66
-rw-r--r--offapi/com/sun/star/style/XDefaultsSupplier.idl62
-rw-r--r--offapi/com/sun/star/style/XStyle.idl85
-rw-r--r--offapi/com/sun/star/style/XStyleCondition.idl70
-rw-r--r--offapi/com/sun/star/style/XStyleFamiliesSupplier.idl68
-rw-r--r--offapi/com/sun/star/style/XStyleLoader.idl97
-rw-r--r--offapi/com/sun/star/style/makefile.mk87
-rw-r--r--offapi/com/sun/star/svg/XSVGPrinter.idl61
-rw-r--r--offapi/com/sun/star/svg/XSVGWriter.idl52
-rw-r--r--offapi/com/sun/star/svg/makefile.mk48
-rw-r--r--offapi/com/sun/star/sync/SyncAction.idl62
-rw-r--r--offapi/com/sun/star/sync/SyncCollector.idl49
-rw-r--r--offapi/com/sun/star/sync/SyncElement.idl72
-rw-r--r--offapi/com/sun/star/sync/SyncEvent.idl56
-rw-r--r--offapi/com/sun/star/sync/SyncInfo.idl61
-rw-r--r--offapi/com/sun/star/sync/SyncMode.idl54
-rw-r--r--offapi/com/sun/star/sync/SyncOptions.idl60
-rw-r--r--offapi/com/sun/star/sync/SyncScheme.idl56
-rw-r--r--offapi/com/sun/star/sync/SyncType.idl59
-rw-r--r--offapi/com/sun/star/sync/Synchronizer.idl49
-rw-r--r--offapi/com/sun/star/sync/XSyncCollector.idl88
-rw-r--r--offapi/com/sun/star/sync/XSynchronizer.idl61
-rw-r--r--offapi/com/sun/star/sync/makefile.mk57
-rw-r--r--offapi/com/sun/star/sync2/BadPartnershipException.idl54
-rw-r--r--offapi/com/sun/star/sync2/makefile.mk39
-rw-r--r--offapi/com/sun/star/system/ProxySettings.idl78
-rw-r--r--offapi/com/sun/star/system/SOffice52ProxySettings.idl65
-rw-r--r--offapi/com/sun/star/system/SimpleCommandMail.idl82
-rw-r--r--offapi/com/sun/star/system/SimpleMailClientFlags.idl72
-rw-r--r--offapi/com/sun/star/system/SimpleSystemMail.idl77
-rw-r--r--offapi/com/sun/star/system/SystemProxySettings.idl63
-rw-r--r--offapi/com/sun/star/system/SystemShellExecute.idl76
-rw-r--r--offapi/com/sun/star/system/SystemShellExecuteException.idl62
-rw-r--r--offapi/com/sun/star/system/SystemShellExecuteFlags.idl56
-rw-r--r--offapi/com/sun/star/system/XProxySettings.idl144
-rw-r--r--offapi/com/sun/star/system/XSimpleMailClient.idl105
-rw-r--r--offapi/com/sun/star/system/XSimpleMailClientSupplier.idl77
-rw-r--r--offapi/com/sun/star/system/XSimpleMailMessage.idl165
-rw-r--r--offapi/com/sun/star/system/XSystemShellExecute.idl94
-rw-r--r--offapi/com/sun/star/system/makefile.mk59
-rw-r--r--offapi/com/sun/star/table/AccessibleCellView.idl157
-rw-r--r--offapi/com/sun/star/table/AccessibleTableView.idl161
-rw-r--r--offapi/com/sun/star/table/BorderLine.idl82
-rw-r--r--offapi/com/sun/star/table/Cell.idl78
-rw-r--r--offapi/com/sun/star/table/CellAddress.idl66
-rw-r--r--offapi/com/sun/star/table/CellContentType.idl72
-rw-r--r--offapi/com/sun/star/table/CellCursor.idl61
-rw-r--r--offapi/com/sun/star/table/CellHoriJustify.idl84
-rw-r--r--offapi/com/sun/star/table/CellOrientation.idl73
-rw-r--r--offapi/com/sun/star/table/CellProperties.idl265
-rw-r--r--offapi/com/sun/star/table/CellRange.idl68
-rw-r--r--offapi/com/sun/star/table/CellRangeAddress.idl78
-rw-r--r--offapi/com/sun/star/table/CellRangeListSource.idl93
-rw-r--r--offapi/com/sun/star/table/CellValueBinding.idl106
-rw-r--r--offapi/com/sun/star/table/CellVertJustify.idl72
-rw-r--r--offapi/com/sun/star/table/ListPositionCellBinding.idl61
-rw-r--r--offapi/com/sun/star/table/ShadowFormat.idl80
-rw-r--r--offapi/com/sun/star/table/ShadowLocation.idl78
-rw-r--r--offapi/com/sun/star/table/TableBorder.idl154
-rw-r--r--offapi/com/sun/star/table/TableBorderDistances.idl109
-rw-r--r--offapi/com/sun/star/table/TableChart.idl83
-rw-r--r--offapi/com/sun/star/table/TableCharts.idl82
-rw-r--r--offapi/com/sun/star/table/TableChartsEnumeration.idl62
-rw-r--r--offapi/com/sun/star/table/TableColumn.idl112
-rw-r--r--offapi/com/sun/star/table/TableColumns.idl85
-rw-r--r--offapi/com/sun/star/table/TableColumnsEnumeration.idl62
-rw-r--r--offapi/com/sun/star/table/TableOrientation.idl60
-rw-r--r--offapi/com/sun/star/table/TableRow.idl100
-rw-r--r--offapi/com/sun/star/table/TableRows.idl72
-rw-r--r--offapi/com/sun/star/table/TableRowsEnumeration.idl62
-rw-r--r--offapi/com/sun/star/table/TableSortDescriptor.idl104
-rw-r--r--offapi/com/sun/star/table/TableSortDescriptor2.idl87
-rw-r--r--offapi/com/sun/star/table/TableSortField.idl107
-rw-r--r--offapi/com/sun/star/table/TableSortFieldType.idl65
-rw-r--r--offapi/com/sun/star/table/XAutoFormattable.idl69
-rw-r--r--offapi/com/sun/star/table/XCell.idl116
-rw-r--r--offapi/com/sun/star/table/XCellCursor.idl100
-rw-r--r--offapi/com/sun/star/table/XCellRange.idl135
-rw-r--r--offapi/com/sun/star/table/XColumnRowRange.idl79
-rw-r--r--offapi/com/sun/star/table/XMergeableCell.idl76
-rw-r--r--offapi/com/sun/star/table/XMergeableCellRange.idl97
-rw-r--r--offapi/com/sun/star/table/XTable.idl147
-rw-r--r--offapi/com/sun/star/table/XTableChart.idl100
-rw-r--r--offapi/com/sun/star/table/XTableCharts.idl102
-rw-r--r--offapi/com/sun/star/table/XTableChartsSupplier.idl65
-rw-r--r--offapi/com/sun/star/table/XTableColumns.idl85
-rw-r--r--offapi/com/sun/star/table/XTableRows.idl84
-rw-r--r--offapi/com/sun/star/table/makefile.mk92
-rw-r--r--offapi/com/sun/star/task/AsyncJob.idl66
-rw-r--r--offapi/com/sun/star/task/ClassifiedInteractionRequest.idl63
-rw-r--r--offapi/com/sun/star/task/DocumentMSPasswordRequest.idl64
-rwxr-xr-xoffapi/com/sun/star/task/DocumentMSPasswordRequest2.idl68
-rw-r--r--offapi/com/sun/star/task/DocumentMacroConfirmationRequest.idl79
-rw-r--r--offapi/com/sun/star/task/DocumentPasswordRequest.idl63
-rwxr-xr-xoffapi/com/sun/star/task/DocumentPasswordRequest2.idl67
-rw-r--r--offapi/com/sun/star/task/ErrorCodeIOException.idl56
-rw-r--r--offapi/com/sun/star/task/ErrorCodeRequest.idl56
-rw-r--r--offapi/com/sun/star/task/FutureDocumentVersionProductUpdateRequest.idl65
-rw-r--r--offapi/com/sun/star/task/InteractionClassification.idl86
-rw-r--r--offapi/com/sun/star/task/InteractionHandler.idl187
-rw-r--r--offapi/com/sun/star/task/InteractionRequestStringResolver.idl46
-rw-r--r--offapi/com/sun/star/task/Job.idl66
-rw-r--r--offapi/com/sun/star/task/JobExecutor.idl63
-rw-r--r--offapi/com/sun/star/task/MasterPasswordRequest.idl58
-rw-r--r--offapi/com/sun/star/task/NoMasterException.idl59
-rw-r--r--offapi/com/sun/star/task/OfficeRestartManager.idl53
-rw-r--r--offapi/com/sun/star/task/PasswordContainer.idl82
-rw-r--r--offapi/com/sun/star/task/PasswordContainerInteractionHandler.idl57
-rw-r--r--offapi/com/sun/star/task/PasswordRequest.idl67
-rw-r--r--offapi/com/sun/star/task/PasswordRequestMode.idl79
-rw-r--r--offapi/com/sun/star/task/UnsupportedOverwriteRequest.idl63
-rw-r--r--offapi/com/sun/star/task/UrlRecord.idl54
-rw-r--r--offapi/com/sun/star/task/UserRecord.idl50
-rw-r--r--offapi/com/sun/star/task/XAbortChannel.idl49
-rw-r--r--offapi/com/sun/star/task/XAsyncJob.idl92
-rw-r--r--offapi/com/sun/star/task/XInteractionApprove.idl52
-rw-r--r--offapi/com/sun/star/task/XInteractionAskLater.idl51
-rw-r--r--offapi/com/sun/star/task/XInteractionDisapprove.idl52
-rw-r--r--offapi/com/sun/star/task/XInteractionPassword.idl66
-rw-r--r--offapi/com/sun/star/task/XInteractionPassword2.idl80
-rw-r--r--offapi/com/sun/star/task/XInteractionRequestStringResolver.idl82
-rw-r--r--offapi/com/sun/star/task/XJob.idl96
-rw-r--r--offapi/com/sun/star/task/XJobExecutor.idl74
-rw-r--r--offapi/com/sun/star/task/XJobListener.idl73
-rw-r--r--offapi/com/sun/star/task/XMasterPasswordHandling.idl112
-rw-r--r--offapi/com/sun/star/task/XMasterPasswordHandling2.idl70
-rw-r--r--offapi/com/sun/star/task/XPasswordContainer.idl147
-rw-r--r--offapi/com/sun/star/task/XRestartManager.idl99
-rw-r--r--offapi/com/sun/star/task/XStatusIndicator.idl130
-rw-r--r--offapi/com/sun/star/task/XStatusIndicatorFactory.idl65
-rw-r--r--offapi/com/sun/star/task/XStatusIndicatorSupplier.idl61
-rw-r--r--offapi/com/sun/star/task/XUrlContainer.idl91
-rwxr-xr-xoffapi/com/sun/star/task/makefile.mk90
-rw-r--r--offapi/com/sun/star/text/AccessibleEndnoteView.idl138
-rw-r--r--offapi/com/sun/star/text/AccessibleFootnoteView.idl138
-rw-r--r--offapi/com/sun/star/text/AccessibleHeaderFooterView.idl143
-rw-r--r--offapi/com/sun/star/text/AccessiblePageView.idl214
-rw-r--r--offapi/com/sun/star/text/AccessibleParagraphView.idl212
-rw-r--r--offapi/com/sun/star/text/AccessibleTextDocumentPageView.idl116
-rw-r--r--offapi/com/sun/star/text/AccessibleTextDocumentView.idl218
-rw-r--r--offapi/com/sun/star/text/AccessibleTextEmbeddedObject.idl136
-rw-r--r--offapi/com/sun/star/text/AccessibleTextFrameView.idl149
-rw-r--r--offapi/com/sun/star/text/AccessibleTextGraphicObject.idl130
-rw-r--r--offapi/com/sun/star/text/AdvancedTextDocument.idl162
-rw-r--r--offapi/com/sun/star/text/AuthorDisplayFormat.idl72
-rw-r--r--offapi/com/sun/star/text/AutoTextContainer.idl61
-rw-r--r--offapi/com/sun/star/text/AutoTextEntry.idl68
-rw-r--r--offapi/com/sun/star/text/AutoTextGroup.idl72
-rw-r--r--offapi/com/sun/star/text/BaseFrame.idl118
-rw-r--r--offapi/com/sun/star/text/BaseFrameProperties.idl380
-rw-r--r--offapi/com/sun/star/text/BaseIndex.idl188
-rw-r--r--offapi/com/sun/star/text/BaseIndexMark.idl61
-rw-r--r--offapi/com/sun/star/text/Bibliography.idl62
-rw-r--r--offapi/com/sun/star/text/BibliographyDataField.idl208
-rw-r--r--offapi/com/sun/star/text/BibliographyDataType.idl157
-rw-r--r--offapi/com/sun/star/text/Bookmark.idl66
-rw-r--r--offapi/com/sun/star/text/Bookmarks.idl69
-rw-r--r--offapi/com/sun/star/text/Cell.idl119
-rw-r--r--offapi/com/sun/star/text/CellProperties.idl176
-rw-r--r--offapi/com/sun/star/text/CellRange.idl160
-rw-r--r--offapi/com/sun/star/text/ChainedTextFrame.idl73
-rw-r--r--offapi/com/sun/star/text/ChapterFormat.idl84
-rw-r--r--offapi/com/sun/star/text/ChapterNumberingRule.idl87
-rw-r--r--offapi/com/sun/star/text/CharacterCompressionType.idl61
-rw-r--r--offapi/com/sun/star/text/ContentIndex.idl74
-rw-r--r--offapi/com/sun/star/text/ContentIndexMark.idl65
-rw-r--r--offapi/com/sun/star/text/ControlCharacter.idl94
-rw-r--r--offapi/com/sun/star/text/DateDisplayFormat.idl96
-rw-r--r--offapi/com/sun/star/text/DefaultNumberingProvider.idl50
-rw-r--r--offapi/com/sun/star/text/Defaults.idl89
-rw-r--r--offapi/com/sun/star/text/DependentTextField.idl68
-rw-r--r--offapi/com/sun/star/text/DocumentIndex.idl102
-rw-r--r--offapi/com/sun/star/text/DocumentIndexFormat.idl86
-rw-r--r--offapi/com/sun/star/text/DocumentIndexLevelFormat.idl156
-rw-r--r--offapi/com/sun/star/text/DocumentIndexMark.idl73
-rw-r--r--offapi/com/sun/star/text/DocumentIndexMarkAsian.idl70
-rw-r--r--offapi/com/sun/star/text/DocumentIndexParagraphStyles.idl63
-rw-r--r--offapi/com/sun/star/text/DocumentIndexes.idl73
-rw-r--r--offapi/com/sun/star/text/DocumentSettings.idl204
-rw-r--r--offapi/com/sun/star/text/DocumentStatistic.idl73
-rw-r--r--offapi/com/sun/star/text/Endnote.idl52
-rw-r--r--offapi/com/sun/star/text/EndnoteSettings.idl52
-rw-r--r--offapi/com/sun/star/text/FilenameDisplayFormat.idl77
-rw-r--r--offapi/com/sun/star/text/FontEmphasis.idl85
-rw-r--r--offapi/com/sun/star/text/FontRelief.idl60
-rw-r--r--offapi/com/sun/star/text/Footnote.idl71
-rw-r--r--offapi/com/sun/star/text/FootnoteNumbering.idl70
-rw-r--r--offapi/com/sun/star/text/FootnoteSettings.idl139
-rw-r--r--offapi/com/sun/star/text/Footnotes.idl60
-rw-r--r--offapi/com/sun/star/text/GenericTextDocument.idl273
-rw-r--r--offapi/com/sun/star/text/GlobalDocument.idl52
-rw-r--r--offapi/com/sun/star/text/GlobalSettings.idl64
-rw-r--r--offapi/com/sun/star/text/GraphicCrop.idl88
-rw-r--r--offapi/com/sun/star/text/HoriOrientation.idl112
-rw-r--r--offapi/com/sun/star/text/HoriOrientationFormat.idl87
-rw-r--r--offapi/com/sun/star/text/HorizontalAdjust.idl69
-rw-r--r--offapi/com/sun/star/text/HypertextDocument.idl81
-rw-r--r--offapi/com/sun/star/text/IllustrationsIndex.idl61
-rwxr-xr-xoffapi/com/sun/star/text/InContentMetadata.idl88
-rw-r--r--offapi/com/sun/star/text/InvalidTextContentException.idl66
-rw-r--r--offapi/com/sun/star/text/LabelFollow.idl66
-rw-r--r--offapi/com/sun/star/text/LineNumberingProperties.idl117
-rw-r--r--offapi/com/sun/star/text/LineNumberingSettings.idl111
-rw-r--r--offapi/com/sun/star/text/MailMerge.idl412
-rw-r--r--offapi/com/sun/star/text/MailMergeEvent.idl67
-rw-r--r--offapi/com/sun/star/text/MailMergeType.idl67
-rw-r--r--offapi/com/sun/star/text/NotePrintMode.idl78
-rw-r--r--offapi/com/sun/star/text/NumberingLevel.idl267
-rw-r--r--offapi/com/sun/star/text/NumberingRules.idl107
-rw-r--r--offapi/com/sun/star/text/NumberingStyle.idl59
-rw-r--r--offapi/com/sun/star/text/ObjectIndex.idl82
-rw-r--r--offapi/com/sun/star/text/PageFootnoteInfo.idl106
-rw-r--r--offapi/com/sun/star/text/PageNumberType.idl65
-rw-r--r--offapi/com/sun/star/text/PagePrintSettings.idl112
-rw-r--r--offapi/com/sun/star/text/Paragraph.idl154
-rw-r--r--offapi/com/sun/star/text/ParagraphEnumeration.idl60
-rw-r--r--offapi/com/sun/star/text/ParagraphVertAlign.idl69
-rw-r--r--offapi/com/sun/star/text/PlaceholderType.idl83
-rw-r--r--offapi/com/sun/star/text/PositionAndSpaceMode.idl61
-rw-r--r--offapi/com/sun/star/text/PositionLayoutDir.idl64
-rw-r--r--offapi/com/sun/star/text/PrintPreviewSettings.idl80
-rw-r--r--offapi/com/sun/star/text/PrintSettings.idl154
-rw-r--r--offapi/com/sun/star/text/RedlinePortion.idl98
-rw-r--r--offapi/com/sun/star/text/ReferenceFieldPart.idl136
-rw-r--r--offapi/com/sun/star/text/ReferenceFieldSource.idl69
-rw-r--r--offapi/com/sun/star/text/ReferenceMark.idl57
-rw-r--r--offapi/com/sun/star/text/ReferenceMarks.idl57
-rw-r--r--offapi/com/sun/star/text/RelOrientation.idl121
-rw-r--r--offapi/com/sun/star/text/RubyAdjust.idl67
-rw-r--r--offapi/com/sun/star/text/SectionFileLink.idl76
-rw-r--r--offapi/com/sun/star/text/SetVariableType.idl72
-rw-r--r--offapi/com/sun/star/text/Shape.idl242
-rw-r--r--offapi/com/sun/star/text/SizeType.idl75
-rw-r--r--offapi/com/sun/star/text/TableColumnSeparator.idl86
-rw-r--r--offapi/com/sun/star/text/TableColumns.idl71
-rw-r--r--offapi/com/sun/star/text/TableIndex.idl71
-rw-r--r--offapi/com/sun/star/text/TableRows.idl67
-rw-r--r--offapi/com/sun/star/text/TemplateDisplayFormat.idl91
-rw-r--r--offapi/com/sun/star/text/Text.idl149
-rw-r--r--offapi/com/sun/star/text/TextColumn.idl78
-rw-r--r--offapi/com/sun/star/text/TextColumnSequence.idl47
-rw-r--r--offapi/com/sun/star/text/TextColumns.idl93
-rw-r--r--offapi/com/sun/star/text/TextContent.idl98
-rw-r--r--offapi/com/sun/star/text/TextContentAnchorType.idl98
-rw-r--r--offapi/com/sun/star/text/TextContentCollection.idl71
-rw-r--r--offapi/com/sun/star/text/TextCursor.idl136
-rw-r--r--offapi/com/sun/star/text/TextDocument.idl52
-rw-r--r--offapi/com/sun/star/text/TextDocumentView.idl120
-rw-r--r--offapi/com/sun/star/text/TextEmbeddedObject.idl85
-rw-r--r--offapi/com/sun/star/text/TextEmbeddedObjects.idl71
-rw-r--r--offapi/com/sun/star/text/TextField.idl98
-rw-r--r--offapi/com/sun/star/text/TextFieldEnumeration.idl55
-rw-r--r--offapi/com/sun/star/text/TextFieldMaster.idl74
-rw-r--r--offapi/com/sun/star/text/TextFieldMasters.idl62
-rw-r--r--offapi/com/sun/star/text/TextFields.idl69
-rwxr-xr-xoffapi/com/sun/star/text/TextFrame.idl172
-rw-r--r--offapi/com/sun/star/text/TextFrames.idl86
-rw-r--r--offapi/com/sun/star/text/TextGraphicObject.idl179
-rw-r--r--offapi/com/sun/star/text/TextGraphicObjects.idl72
-rw-r--r--offapi/com/sun/star/text/TextGridMode.idl62
-rw-r--r--offapi/com/sun/star/text/TextLayoutCursor.idl63
-rw-r--r--offapi/com/sun/star/text/TextMarkupDescriptor.idl70
-rw-r--r--offapi/com/sun/star/text/TextMarkupType.idl70
-rw-r--r--offapi/com/sun/star/text/TextPageStyle.idl200
-rw-r--r--offapi/com/sun/star/text/TextPortion.idl178
-rw-r--r--offapi/com/sun/star/text/TextPortionEnumeration.idl56
-rw-r--r--offapi/com/sun/star/text/TextRange.idl112
-rw-r--r--offapi/com/sun/star/text/TextRangeContentProperties.idl133
-rw-r--r--offapi/com/sun/star/text/TextRanges.idl55
-rw-r--r--offapi/com/sun/star/text/TextSection.idl254
-rw-r--r--offapi/com/sun/star/text/TextSections.idl62
-rw-r--r--offapi/com/sun/star/text/TextSortDescriptor.idl143
-rw-r--r--offapi/com/sun/star/text/TextSortDescriptor2.idl77
-rw-r--r--offapi/com/sun/star/text/TextSortable.idl67
-rw-r--r--offapi/com/sun/star/text/TextTable.idl295
-rw-r--r--offapi/com/sun/star/text/TextTableCursor.idl90
-rw-r--r--offapi/com/sun/star/text/TextTableRow.idl126
-rw-r--r--offapi/com/sun/star/text/TextTables.idl62
-rw-r--r--offapi/com/sun/star/text/TextViewCursor.idl64
-rw-r--r--offapi/com/sun/star/text/TimeDisplayFormat.idl91
-rw-r--r--offapi/com/sun/star/text/UserDataPart.idl154
-rw-r--r--offapi/com/sun/star/text/UserDefinedIndex.idl89
-rw-r--r--offapi/com/sun/star/text/UserFieldFormat.idl70
-rw-r--r--offapi/com/sun/star/text/UserIndex.idl84
-rw-r--r--offapi/com/sun/star/text/UserIndexMark.idl63
-rw-r--r--offapi/com/sun/star/text/VertOrientation.idl121
-rw-r--r--offapi/com/sun/star/text/VertOrientationFormat.idl77
-rw-r--r--offapi/com/sun/star/text/ViewSettings.idl362
-rw-r--r--offapi/com/sun/star/text/WebDocument.idl52
-rw-r--r--offapi/com/sun/star/text/WrapInfluenceOnPosition.idl70
-rw-r--r--offapi/com/sun/star/text/WrapTextMode.idl91
-rw-r--r--offapi/com/sun/star/text/WritingMode.idl77
-rw-r--r--offapi/com/sun/star/text/WritingMode2.idl100
-rw-r--r--offapi/com/sun/star/text/XAutoTextContainer.idl107
-rw-r--r--offapi/com/sun/star/text/XAutoTextEntry.idl78
-rw-r--r--offapi/com/sun/star/text/XAutoTextGroup.idl121
-rw-r--r--offapi/com/sun/star/text/XBookmarkInsertTool.idl69
-rw-r--r--offapi/com/sun/star/text/XBookmarksSupplier.idl66
-rw-r--r--offapi/com/sun/star/text/XChapterNumberingSupplier.idl69
-rw-r--r--offapi/com/sun/star/text/XDefaultNumberingProvider.idl79
-rw-r--r--offapi/com/sun/star/text/XDependentTextField.idl101
-rw-r--r--offapi/com/sun/star/text/XDocumentIndex.idl82
-rw-r--r--offapi/com/sun/star/text/XDocumentIndexMark.idl76
-rw-r--r--offapi/com/sun/star/text/XDocumentIndexesSupplier.idl69
-rw-r--r--offapi/com/sun/star/text/XEndnotesSettingsSupplier.idl68
-rw-r--r--offapi/com/sun/star/text/XEndnotesSupplier.idl80
-rw-r--r--offapi/com/sun/star/text/XFlatParagraph.idl201
-rw-r--r--offapi/com/sun/star/text/XFlatParagraphIterator.idl118
-rw-r--r--offapi/com/sun/star/text/XFlatParagraphIteratorProvider.idl87
-rw-r--r--offapi/com/sun/star/text/XFootnote.idl71
-rw-r--r--offapi/com/sun/star/text/XFootnotesSettingsSupplier.idl66
-rw-r--r--offapi/com/sun/star/text/XFootnotesSupplier.idl76
-rw-r--r--offapi/com/sun/star/text/XFormField.idl20
-rw-r--r--offapi/com/sun/star/text/XHeaderFooter.idl73
-rw-r--r--offapi/com/sun/star/text/XHeaderFooterPageStyle.idl74
-rw-r--r--offapi/com/sun/star/text/XLineNumberingProperties.idl60
-rw-r--r--offapi/com/sun/star/text/XLineNumberingSupplier.idl77
-rw-r--r--offapi/com/sun/star/text/XMailMergeBroadcaster.idl83
-rw-r--r--offapi/com/sun/star/text/XMailMergeListener.idl72
-rw-r--r--offapi/com/sun/star/text/XModule.idl53
-rw-r--r--offapi/com/sun/star/text/XMultiTextMarkup.idl79
-rw-r--r--offapi/com/sun/star/text/XNumberingFormatter.idl65
-rw-r--r--offapi/com/sun/star/text/XNumberingRulesSupplier.idl62
-rw-r--r--offapi/com/sun/star/text/XNumberingTypeInfo.idl63
-rw-r--r--offapi/com/sun/star/text/XPageCursor.idl115
-rw-r--r--offapi/com/sun/star/text/XPagePrintable.idl96
-rw-r--r--offapi/com/sun/star/text/XParagraphAppend.idl94
-rw-r--r--offapi/com/sun/star/text/XParagraphCursor.idl105
-rw-r--r--offapi/com/sun/star/text/XRedline.idl73
-rw-r--r--offapi/com/sun/star/text/XReferenceMarksSupplier.idl72
-rw-r--r--offapi/com/sun/star/text/XRelativeTextContentInsert.idl86
-rw-r--r--offapi/com/sun/star/text/XRelativeTextContentRemove.idl82
-rw-r--r--offapi/com/sun/star/text/XRubySelection.idl75
-rw-r--r--offapi/com/sun/star/text/XSentenceCursor.idl105
-rw-r--r--offapi/com/sun/star/text/XSimpleText.idl151
-rw-r--r--offapi/com/sun/star/text/XText.idl105
-rw-r--r--offapi/com/sun/star/text/XTextAppend.idl60
-rw-r--r--offapi/com/sun/star/text/XTextAppendAndConvert.idl61
-rw-r--r--offapi/com/sun/star/text/XTextColumns.idl115
-rw-r--r--offapi/com/sun/star/text/XTextContent.idl100
-rw-r--r--offapi/com/sun/star/text/XTextContentAppend.idl88
-rw-r--r--offapi/com/sun/star/text/XTextConvert.idl117
-rw-r--r--offapi/com/sun/star/text/XTextCopy.idl59
-rw-r--r--offapi/com/sun/star/text/XTextCursor.idl134
-rw-r--r--offapi/com/sun/star/text/XTextDocument.idl76
-rw-r--r--offapi/com/sun/star/text/XTextEmbeddedObject.idl77
-rw-r--r--offapi/com/sun/star/text/XTextEmbeddedObjectsSupplier.idl65
-rw-r--r--offapi/com/sun/star/text/XTextField.idl69
-rw-r--r--offapi/com/sun/star/text/XTextFieldsSupplier.idl80
-rw-r--r--offapi/com/sun/star/text/XTextFrame.idl66
-rw-r--r--offapi/com/sun/star/text/XTextFramesSupplier.idl64
-rw-r--r--offapi/com/sun/star/text/XTextGraphicObjectsSupplier.idl65
-rw-r--r--offapi/com/sun/star/text/XTextMarkup.idl90
-rw-r--r--offapi/com/sun/star/text/XTextPortionAppend.idl86
-rw-r--r--offapi/com/sun/star/text/XTextRange.idl104
-rw-r--r--offapi/com/sun/star/text/XTextRangeCompare.idl94
-rw-r--r--offapi/com/sun/star/text/XTextRangeMover.idl73
-rw-r--r--offapi/com/sun/star/text/XTextSection.idl68
-rw-r--r--offapi/com/sun/star/text/XTextSectionsSupplier.idl64
-rw-r--r--offapi/com/sun/star/text/XTextShapesSupplier.idl65
-rw-r--r--offapi/com/sun/star/text/XTextTable.idl143
-rw-r--r--offapi/com/sun/star/text/XTextTableCursor.idl179
-rw-r--r--offapi/com/sun/star/text/XTextTablesSupplier.idl64
-rw-r--r--offapi/com/sun/star/text/XTextViewCursor.idl80
-rw-r--r--offapi/com/sun/star/text/XTextViewCursorSupplier.idl71
-rw-r--r--offapi/com/sun/star/text/XWordCursor.idl113
-rw-r--r--offapi/com/sun/star/text/fieldmaster/Bibliography.idl100
-rw-r--r--offapi/com/sun/star/text/fieldmaster/DDE.idl73
-rw-r--r--offapi/com/sun/star/text/fieldmaster/Database.idl96
-rw-r--r--offapi/com/sun/star/text/fieldmaster/SetExpression.idl67
-rw-r--r--offapi/com/sun/star/text/fieldmaster/User.idl65
-rw-r--r--offapi/com/sun/star/text/fieldmaster/makefile.mk50
-rw-r--r--offapi/com/sun/star/text/makefile.mk278
-rw-r--r--offapi/com/sun/star/text/textfield/Annotation.idl65
-rw-r--r--offapi/com/sun/star/text/textfield/Author.idl74
-rw-r--r--offapi/com/sun/star/text/textfield/Bibliography.idl58
-rw-r--r--offapi/com/sun/star/text/textfield/Chapter.idl60
-rw-r--r--offapi/com/sun/star/text/textfield/CharacterCount.idl57
-rw-r--r--offapi/com/sun/star/text/textfield/CombinedCharacters.idl55
-rw-r--r--offapi/com/sun/star/text/textfield/ConditionalText.idl70
-rw-r--r--offapi/com/sun/star/text/textfield/DDE.idl54
-rw-r--r--offapi/com/sun/star/text/textfield/Database.idl69
-rw-r--r--offapi/com/sun/star/text/textfield/DatabaseName.idl81
-rw-r--r--offapi/com/sun/star/text/textfield/DatabaseNextSet.idl85
-rw-r--r--offapi/com/sun/star/text/textfield/DatabaseNumberOfSet.idl90
-rw-r--r--offapi/com/sun/star/text/textfield/DatabaseSetNumber.idl91
-rw-r--r--offapi/com/sun/star/text/textfield/DateTime.idl98
-rw-r--r--offapi/com/sun/star/text/textfield/DropDown.idl70
-rw-r--r--offapi/com/sun/star/text/textfield/EmbeddedObjectCount.idl57
-rw-r--r--offapi/com/sun/star/text/textfield/ExtendedUser.idl67
-rw-r--r--offapi/com/sun/star/text/textfield/FileName.idl63
-rw-r--r--offapi/com/sun/star/text/textfield/GetExpression.idl85
-rw-r--r--offapi/com/sun/star/text/textfield/GetReference.idl74
-rw-r--r--offapi/com/sun/star/text/textfield/GraphicObjectCount.idl57
-rw-r--r--offapi/com/sun/star/text/textfield/HiddenParagraph.idl60
-rw-r--r--offapi/com/sun/star/text/textfield/HiddenText.idl64
-rw-r--r--offapi/com/sun/star/text/textfield/Input.idl73
-rw-r--r--offapi/com/sun/star/text/textfield/InputUser.idl63
-rw-r--r--offapi/com/sun/star/text/textfield/JumpEdit.idl62
-rw-r--r--offapi/com/sun/star/text/textfield/Macro.idl61
-rwxr-xr-xoffapi/com/sun/star/text/textfield/MetadataField.idl111
-rw-r--r--offapi/com/sun/star/text/textfield/PageCount.idl57
-rw-r--r--offapi/com/sun/star/text/textfield/PageNumber.idl70
-rw-r--r--offapi/com/sun/star/text/textfield/ParagraphCount.idl57
-rw-r--r--offapi/com/sun/star/text/textfield/ReferencePageGet.idl58
-rw-r--r--offapi/com/sun/star/text/textfield/ReferencePageSet.idl59
-rw-r--r--offapi/com/sun/star/text/textfield/Script.idl62
-rw-r--r--offapi/com/sun/star/text/textfield/SetExpression.idl101
-rw-r--r--offapi/com/sun/star/text/textfield/TableCount.idl57
-rw-r--r--offapi/com/sun/star/text/textfield/TableFormula.idl68
-rw-r--r--offapi/com/sun/star/text/textfield/TemplateName.idl57
-rw-r--r--offapi/com/sun/star/text/textfield/URL.idl70
-rw-r--r--offapi/com/sun/star/text/textfield/User.idl72
-rw-r--r--offapi/com/sun/star/text/textfield/WordCount.idl57
-rw-r--r--offapi/com/sun/star/text/textfield/docinfo/ChangeAuthor.idl66
-rw-r--r--offapi/com/sun/star/text/textfield/docinfo/ChangeDateTime.idl83
-rw-r--r--offapi/com/sun/star/text/textfield/docinfo/CreateAuthor.idl66
-rw-r--r--offapi/com/sun/star/text/textfield/docinfo/CreateDateTime.idl83
-rw-r--r--offapi/com/sun/star/text/textfield/docinfo/Custom.idl70
-rw-r--r--offapi/com/sun/star/text/textfield/docinfo/Description.idl65
-rw-r--r--offapi/com/sun/star/text/textfield/docinfo/EditTime.idl78
-rw-r--r--offapi/com/sun/star/text/textfield/docinfo/Info0.idl65
-rw-r--r--offapi/com/sun/star/text/textfield/docinfo/Info1.idl65
-rw-r--r--offapi/com/sun/star/text/textfield/docinfo/Info2.idl65
-rw-r--r--offapi/com/sun/star/text/textfield/docinfo/Info3.idl65
-rw-r--r--offapi/com/sun/star/text/textfield/docinfo/Keywords.idl65
-rw-r--r--offapi/com/sun/star/text/textfield/docinfo/PrintAuthor.idl66
-rw-r--r--offapi/com/sun/star/text/textfield/docinfo/PrintDateTime.idl83
-rw-r--r--offapi/com/sun/star/text/textfield/docinfo/Revision.idl65
-rw-r--r--offapi/com/sun/star/text/textfield/docinfo/Subject.idl65
-rw-r--r--offapi/com/sun/star/text/textfield/docinfo/Title.idl65
-rw-r--r--offapi/com/sun/star/text/textfield/docinfo/makefile.mk63
-rw-r--r--offapi/com/sun/star/text/textfield/makefile.mk86
-rw-r--r--offapi/com/sun/star/ucb/AlreadyInitializedException.idl54
-rw-r--r--offapi/com/sun/star/ucb/AnyCompareFactory.idl57
-rw-r--r--offapi/com/sun/star/ucb/AuthenticationRequest.idl114
-rw-r--r--offapi/com/sun/star/ucb/CHAOSProgressStart.idl69
-rw-r--r--offapi/com/sun/star/ucb/CachedContentResultSet.idl84
-rw-r--r--offapi/com/sun/star/ucb/CachedContentResultSetFactory.idl55
-rw-r--r--offapi/com/sun/star/ucb/CachedContentResultSetStub.idl76
-rw-r--r--offapi/com/sun/star/ucb/CachedContentResultSetStubFactory.idl55
-rw-r--r--offapi/com/sun/star/ucb/CachedDynamicResultSet.idl83
-rw-r--r--offapi/com/sun/star/ucb/CachedDynamicResultSetFactory.idl56
-rw-r--r--offapi/com/sun/star/ucb/CachedDynamicResultSetStub.idl84
-rw-r--r--offapi/com/sun/star/ucb/CachedDynamicResultSetStubFactory.idl56
-rwxr-xr-xoffapi/com/sun/star/ucb/CertificateValidationRequest.idl65
-rw-r--r--offapi/com/sun/star/ucb/Command.idl70
-rw-r--r--offapi/com/sun/star/ucb/CommandAbortedException.idl55
-rw-r--r--offapi/com/sun/star/ucb/CommandEnvironment.idl64
-rw-r--r--offapi/com/sun/star/ucb/CommandFailedException.idl65
-rw-r--r--offapi/com/sun/star/ucb/CommandInfo.idl68
-rw-r--r--offapi/com/sun/star/ucb/CommandInfoChange.idl58
-rw-r--r--offapi/com/sun/star/ucb/CommandInfoChangeEvent.idl71
-rw-r--r--offapi/com/sun/star/ucb/ConnectionMode.idl59
-rw-r--r--offapi/com/sun/star/ucb/Content.idl756
-rw-r--r--offapi/com/sun/star/ucb/ContentAction.idl161
-rw-r--r--offapi/com/sun/star/ucb/ContentCreationError.idl75
-rw-r--r--offapi/com/sun/star/ucb/ContentCreationException.idl60
-rw-r--r--offapi/com/sun/star/ucb/ContentEvent.idl114
-rw-r--r--offapi/com/sun/star/ucb/ContentInfo.idl108
-rw-r--r--offapi/com/sun/star/ucb/ContentInfoAttribute.idl78
-rw-r--r--offapi/com/sun/star/ucb/ContentProvider.idl88
-rw-r--r--offapi/com/sun/star/ucb/ContentProviderInfo.idl62
-rw-r--r--offapi/com/sun/star/ucb/ContentProviderProxy.idl95
-rw-r--r--offapi/com/sun/star/ucb/ContentProviderProxyFactory.idl55
-rw-r--r--offapi/com/sun/star/ucb/ContentResultSet.idl233
-rw-r--r--offapi/com/sun/star/ucb/ContentResultSetCapability.idl53
-rw-r--r--offapi/com/sun/star/ucb/ContentTransmitter.idl60
-rw-r--r--offapi/com/sun/star/ucb/Cookie.idl89
-rw-r--r--offapi/com/sun/star/ucb/CookiePolicy.idl61
-rw-r--r--offapi/com/sun/star/ucb/CookieRequest.idl56
-rw-r--r--offapi/com/sun/star/ucb/CrossReference.idl61
-rw-r--r--offapi/com/sun/star/ucb/DefaultHierarchyDataSource.idl64
-rw-r--r--offapi/com/sun/star/ucb/DocumentHeaderField.idl57
-rw-r--r--offapi/com/sun/star/ucb/DocumentStoreMode.idl59
-rw-r--r--offapi/com/sun/star/ucb/DuplicateCommandIdentifierException.idl60
-rw-r--r--offapi/com/sun/star/ucb/DuplicateProviderException.idl55
-rw-r--r--offapi/com/sun/star/ucb/DynamicResultSet.idl62
-rw-r--r--offapi/com/sun/star/ucb/Error.idl444
-rw-r--r--offapi/com/sun/star/ucb/ExpandContentProvider.idl55
-rw-r--r--offapi/com/sun/star/ucb/ExportStreamInfo.idl61
-rw-r--r--offapi/com/sun/star/ucb/FTPContent.idl233
-rw-r--r--offapi/com/sun/star/ucb/FTPContentProvider.idl69
-rw-r--r--offapi/com/sun/star/ucb/FetchError.idl71
-rw-r--r--offapi/com/sun/star/ucb/FetchResult.idl86
-rw-r--r--offapi/com/sun/star/ucb/FileContent.idl268
-rw-r--r--offapi/com/sun/star/ucb/FileContentProvider.idl115
-rw-r--r--offapi/com/sun/star/ucb/FileSystemNotation.idl70
-rw-r--r--offapi/com/sun/star/ucb/FolderList.idl64
-rw-r--r--offapi/com/sun/star/ucb/FolderListCommand.idl62
-rw-r--r--offapi/com/sun/star/ucb/FolderListEntry.idl78
-rw-r--r--offapi/com/sun/star/ucb/GIOContentProvider.idl15
-rw-r--r--offapi/com/sun/star/ucb/GlobalTransferCommandArgument.idl84
-rw-r--r--offapi/com/sun/star/ucb/GnomeVFSContentProvider.idl21
-rw-r--r--offapi/com/sun/star/ucb/GnomeVFSDocumentContent.idl97
-rw-r--r--offapi/com/sun/star/ucb/GnomeVFSFolderContent.idl109
-rw-r--r--offapi/com/sun/star/ucb/HandleCookiesRequest.idl73
-rw-r--r--offapi/com/sun/star/ucb/HelpContent.idl215
-rw-r--r--offapi/com/sun/star/ucb/HelpContentProvider.idl66
-rw-r--r--offapi/com/sun/star/ucb/HierarchyContentProvider.idl112
-rw-r--r--offapi/com/sun/star/ucb/HierarchyDataReadAccess.idl171
-rw-r--r--offapi/com/sun/star/ucb/HierarchyDataReadWriteAccess.idl105
-rw-r--r--offapi/com/sun/star/ucb/HierarchyDataSource.idl119
-rw-r--r--offapi/com/sun/star/ucb/HierarchyFolderContent.idl228
-rw-r--r--offapi/com/sun/star/ucb/HierarchyLinkContent.idl191
-rw-r--r--offapi/com/sun/star/ucb/HierarchyRootFolderContent.idl226
-rw-r--r--offapi/com/sun/star/ucb/IOErrorCode.idl233
-rw-r--r--offapi/com/sun/star/ucb/IllegalIdentifierException.idl55
-rw-r--r--offapi/com/sun/star/ucb/InsertCommandArgument.idl72
-rw-r--r--offapi/com/sun/star/ucb/InteractiveAppException.idl60
-rw-r--r--offapi/com/sun/star/ucb/InteractiveAugmentedIOException.idl57
-rw-r--r--offapi/com/sun/star/ucb/InteractiveBadTransferURLException.idl53
-rw-r--r--offapi/com/sun/star/ucb/InteractiveCHAOSException.idl68
-rw-r--r--offapi/com/sun/star/ucb/InteractiveFileIOException.idl63
-rw-r--r--offapi/com/sun/star/ucb/InteractiveIOException.idl58
-rw-r--r--offapi/com/sun/star/ucb/InteractiveLockingException.idl58
-rw-r--r--offapi/com/sun/star/ucb/InteractiveLockingLockExpiredException.idl53
-rw-r--r--offapi/com/sun/star/ucb/InteractiveLockingLockedException.idl59
-rw-r--r--offapi/com/sun/star/ucb/InteractiveLockingNotLockedException.idl56
-rw-r--r--offapi/com/sun/star/ucb/InteractiveNetworkConnectException.idl55
-rw-r--r--offapi/com/sun/star/ucb/InteractiveNetworkException.idl52
-rw-r--r--offapi/com/sun/star/ucb/InteractiveNetworkGeneralException.idl50
-rw-r--r--offapi/com/sun/star/ucb/InteractiveNetworkOffLineException.idl50
-rw-r--r--offapi/com/sun/star/ucb/InteractiveNetworkReadException.idl56
-rw-r--r--offapi/com/sun/star/ucb/InteractiveNetworkResolveNameException.idl55
-rw-r--r--offapi/com/sun/star/ucb/InteractiveNetworkWriteException.idl56
-rw-r--r--offapi/com/sun/star/ucb/InteractiveWrongMediumException.idl55
-rw-r--r--offapi/com/sun/star/ucb/Link.idl56
-rw-r--r--offapi/com/sun/star/ucb/ListAction.idl122
-rw-r--r--offapi/com/sun/star/ucb/ListActionType.idl191
-rw-r--r--offapi/com/sun/star/ucb/ListEvent.idl60
-rw-r--r--offapi/com/sun/star/ucb/ListenerAlreadySetException.idl54
-rw-r--r--offapi/com/sun/star/ucb/Lock.idl83
-rw-r--r--offapi/com/sun/star/ucb/LockDepth.idl61
-rw-r--r--offapi/com/sun/star/ucb/LockEntry.idl61
-rw-r--r--offapi/com/sun/star/ucb/LockScope.idl57
-rw-r--r--offapi/com/sun/star/ucb/LockType.idl63
-rw-r--r--offapi/com/sun/star/ucb/MissingInputStreamException.idl59
-rw-r--r--offapi/com/sun/star/ucb/MissingPropertiesException.idl62
-rw-r--r--offapi/com/sun/star/ucb/NameClash.idl78
-rw-r--r--offapi/com/sun/star/ucb/NameClashException.idl53
-rw-r--r--offapi/com/sun/star/ucb/NameClashResolveRequest.idl83
-rw-r--r--offapi/com/sun/star/ucb/NumberedSortingInfo.idl58
-rw-r--r--offapi/com/sun/star/ucb/ODMAContent.idl211
-rw-r--r--offapi/com/sun/star/ucb/ODMAContentProvider.idl90
-rw-r--r--offapi/com/sun/star/ucb/OpenCommandArgument.idl93
-rw-r--r--offapi/com/sun/star/ucb/OpenCommandArgument2.idl67
-rw-r--r--offapi/com/sun/star/ucb/OpenMode.idl94
-rw-r--r--offapi/com/sun/star/ucb/OutgoingMessageState.idl88
-rw-r--r--offapi/com/sun/star/ucb/PackageContentProvider.idl132
-rw-r--r--offapi/com/sun/star/ucb/PackageFolderContent.idl256
-rw-r--r--offapi/com/sun/star/ucb/PackageStreamContent.idl206
-rw-r--r--offapi/com/sun/star/ucb/PersistentPropertySet.idl78
-rw-r--r--offapi/com/sun/star/ucb/PostCommandArgument.idl63
-rw-r--r--offapi/com/sun/star/ucb/PostCommandArgument2.idl62
-rw-r--r--offapi/com/sun/star/ucb/Priority.idl74
-rw-r--r--offapi/com/sun/star/ucb/PropertiesManager.idl59
-rw-r--r--offapi/com/sun/star/ucb/PropertySetRegistry.idl62
-rw-r--r--offapi/com/sun/star/ucb/PropertyValueInfo.idl60
-rw-r--r--offapi/com/sun/star/ucb/PropertyValueState.idl71
-rw-r--r--offapi/com/sun/star/ucb/RecipientInfo.idl129
-rw-r--r--offapi/com/sun/star/ucb/RememberAuthentication.idl63
-rw-r--r--offapi/com/sun/star/ucb/RemoteAccessContentProvider.idl75
-rw-r--r--offapi/com/sun/star/ucb/RemoteContentProviderAcceptor.idl62
-rw-r--r--offapi/com/sun/star/ucb/RemoteContentProviderChangeAction.idl58
-rw-r--r--offapi/com/sun/star/ucb/RemoteContentProviderChangeEvent.idl65
-rw-r--r--offapi/com/sun/star/ucb/RemoteProxyContentProvider.idl77
-rw-r--r--offapi/com/sun/star/ucb/ResultSetException.idl54
-rw-r--r--offapi/com/sun/star/ucb/Rule.idl91
-rw-r--r--offapi/com/sun/star/ucb/RuleAction.idl112
-rw-r--r--offapi/com/sun/star/ucb/RuleOperator.idl92
-rw-r--r--offapi/com/sun/star/ucb/RuleSet.idl65
-rw-r--r--offapi/com/sun/star/ucb/RuleTerm.idl79
-rw-r--r--offapi/com/sun/star/ucb/SearchCommandArgument.idl69
-rw-r--r--offapi/com/sun/star/ucb/SearchCriterium.idl56
-rw-r--r--offapi/com/sun/star/ucb/SearchInfo.idl90
-rw-r--r--offapi/com/sun/star/ucb/SearchRecursion.idl64
-rw-r--r--offapi/com/sun/star/ucb/SendInfo.idl59
-rw-r--r--offapi/com/sun/star/ucb/SendMediaTypes.idl58
-rw-r--r--offapi/com/sun/star/ucb/ServiceNotFoundException.idl50
-rw-r--r--offapi/com/sun/star/ucb/SimpleFileAccess.idl56
-rw-r--r--offapi/com/sun/star/ucb/SortedDynamicResultSetFactory.idl56
-rw-r--r--offapi/com/sun/star/ucb/SortingInfo.idl56
-rw-r--r--offapi/com/sun/star/ucb/Store.idl54
-rw-r--r--offapi/com/sun/star/ucb/SynchronizePolicy.idl64
-rw-r--r--offapi/com/sun/star/ucb/TransferCommandOperation.idl59
-rw-r--r--offapi/com/sun/star/ucb/TransferInfo.idl87
-rw-r--r--offapi/com/sun/star/ucb/TransferResult.idl60
-rw-r--r--offapi/com/sun/star/ucb/TransientDocumentsContentProvider.idl158
-rw-r--r--offapi/com/sun/star/ucb/TransientDocumentsDocumentContent.idl230
-rw-r--r--offapi/com/sun/star/ucb/TransientDocumentsFolderContent.idl240
-rw-r--r--offapi/com/sun/star/ucb/TransientDocumentsRootContent.idl190
-rw-r--r--offapi/com/sun/star/ucb/TransientDocumentsStreamContent.idl197
-rw-r--r--offapi/com/sun/star/ucb/URLAuthenticationRequest.idl57
-rw-r--r--offapi/com/sun/star/ucb/UniversalContentBroker.idl200
-rw-r--r--offapi/com/sun/star/ucb/UnsupportedCommandException.idl55
-rw-r--r--offapi/com/sun/star/ucb/UnsupportedDataSinkException.idl65
-rw-r--r--offapi/com/sun/star/ucb/UnsupportedNameClashException.idl73
-rw-r--r--offapi/com/sun/star/ucb/UnsupportedOpenModeException.idl62
-rw-r--r--offapi/com/sun/star/ucb/VerificationMode.idl64
-rw-r--r--offapi/com/sun/star/ucb/WebDAVContentProvider.idl117
-rw-r--r--offapi/com/sun/star/ucb/WebDAVDocumentContent.idl211
-rw-r--r--offapi/com/sun/star/ucb/WebDAVFolderContent.idl243
-rw-r--r--offapi/com/sun/star/ucb/WelcomeDynamicResultSetStruct.idl66
-rw-r--r--offapi/com/sun/star/ucb/XAnyCompare.idl74
-rw-r--r--offapi/com/sun/star/ucb/XAnyCompareFactory.idl69
-rw-r--r--offapi/com/sun/star/ucb/XCachedContentResultSetFactory.idl76
-rw-r--r--offapi/com/sun/star/ucb/XCachedContentResultSetStubFactory.idl66
-rw-r--r--offapi/com/sun/star/ucb/XCachedDynamicResultSetFactory.idl86
-rw-r--r--offapi/com/sun/star/ucb/XCachedDynamicResultSetStubFactory.idl127
-rw-r--r--offapi/com/sun/star/ucb/XCommandEnvironment.idl83
-rw-r--r--offapi/com/sun/star/ucb/XCommandInfo.idl123
-rw-r--r--offapi/com/sun/star/ucb/XCommandInfoChangeListener.idl66
-rw-r--r--offapi/com/sun/star/ucb/XCommandInfoChangeNotifier.idl74
-rw-r--r--offapi/com/sun/star/ucb/XCommandProcessor.idl153
-rw-r--r--offapi/com/sun/star/ucb/XCommandProcessor2.idl69
-rw-r--r--offapi/com/sun/star/ucb/XContent.idl103
-rw-r--r--offapi/com/sun/star/ucb/XContentAccess.idl90
-rw-r--r--offapi/com/sun/star/ucb/XContentCreator.idl97
-rw-r--r--offapi/com/sun/star/ucb/XContentEventListener.idl65
-rw-r--r--offapi/com/sun/star/ucb/XContentIdentifier.idl88
-rw-r--r--offapi/com/sun/star/ucb/XContentIdentifierFactory.idl69
-rw-r--r--offapi/com/sun/star/ucb/XContentIdentifierMapping.idl125
-rw-r--r--offapi/com/sun/star/ucb/XContentProvider.idl103
-rw-r--r--offapi/com/sun/star/ucb/XContentProviderFactory.idl68
-rw-r--r--offapi/com/sun/star/ucb/XContentProviderManager.idl184
-rw-r--r--offapi/com/sun/star/ucb/XContentProviderSupplier.idl64
-rw-r--r--offapi/com/sun/star/ucb/XContentTransmitter.idl65
-rw-r--r--offapi/com/sun/star/ucb/XDataContainer.idl104
-rw-r--r--offapi/com/sun/star/ucb/XDynamicResultSet.idl207
-rw-r--r--offapi/com/sun/star/ucb/XDynamicResultSetListener.idl80
-rw-r--r--offapi/com/sun/star/ucb/XFetchProvider.idl76
-rw-r--r--offapi/com/sun/star/ucb/XFetchProviderForContentAccess.idl125
-rw-r--r--offapi/com/sun/star/ucb/XFileIdentifierConverter.idl100
-rw-r--r--offapi/com/sun/star/ucb/XInteractionCookieHandling.idl90
-rw-r--r--offapi/com/sun/star/ucb/XInteractionHandlerSupplier.idl65
-rw-r--r--offapi/com/sun/star/ucb/XInteractionReplaceExistingData.idl57
-rw-r--r--offapi/com/sun/star/ucb/XInteractionSupplyAuthentication.idl177
-rw-r--r--offapi/com/sun/star/ucb/XInteractionSupplyAuthentication2.idl78
-rw-r--r--offapi/com/sun/star/ucb/XInteractionSupplyName.idl63
-rw-r--r--offapi/com/sun/star/ucb/XParameterizedContentProvider.idl118
-rw-r--r--offapi/com/sun/star/ucb/XPersistentPropertySet.idl71
-rw-r--r--offapi/com/sun/star/ucb/XProgressHandler.idl83
-rw-r--r--offapi/com/sun/star/ucb/XPropertyMatcher.idl74
-rw-r--r--offapi/com/sun/star/ucb/XPropertyMatcherFactory.idl68
-rw-r--r--offapi/com/sun/star/ucb/XPropertySetRegistry.idl80
-rw-r--r--offapi/com/sun/star/ucb/XPropertySetRegistryFactory.idl68
-rw-r--r--offapi/com/sun/star/ucb/XRecycler.idl77
-rw-r--r--offapi/com/sun/star/ucb/XRemoteContentProviderAcceptor.idl105
-rw-r--r--offapi/com/sun/star/ucb/XRemoteContentProviderActivator.idl74
-rw-r--r--offapi/com/sun/star/ucb/XRemoteContentProviderChangeListener.idl64
-rw-r--r--offapi/com/sun/star/ucb/XRemoteContentProviderChangeNotifier.idl74
-rw-r--r--offapi/com/sun/star/ucb/XRemoteContentProviderConnectionControl.idl79
-rw-r--r--offapi/com/sun/star/ucb/XRemoteContentProviderDistributor.idl106
-rw-r--r--offapi/com/sun/star/ucb/XRemoteContentProviderDoneListener.idl64
-rw-r--r--offapi/com/sun/star/ucb/XRemoteContentProviderSupplier.idl69
-rw-r--r--offapi/com/sun/star/ucb/XSimpleFileAccess.idl292
-rw-r--r--offapi/com/sun/star/ucb/XSimpleFileAccess2.idl74
-rw-r--r--offapi/com/sun/star/ucb/XSimpleFileAccess3.idl83
-rw-r--r--offapi/com/sun/star/ucb/XSortedDynamicResultSetFactory.idl81
-rw-r--r--offapi/com/sun/star/ucb/XSourceInitialization.idl77
-rw-r--r--offapi/com/sun/star/ucb/XWebDAVCommandEnvironment.idl77
-rw-r--r--offapi/com/sun/star/ucb/makefile.mk274
-rw-r--r--offapi/com/sun/star/ucb/smart/makefile.mk49
-rw-r--r--offapi/com/sun/star/ui/ActionTrigger.idl68
-rw-r--r--offapi/com/sun/star/ui/ActionTriggerContainer.idl97
-rw-r--r--offapi/com/sun/star/ui/ActionTriggerSeparator.idl45
-rw-r--r--offapi/com/sun/star/ui/ActionTriggerSeparatorType.idl52
-rw-r--r--offapi/com/sun/star/ui/ConfigurableUIElement.idl128
-rw-r--r--offapi/com/sun/star/ui/ConfigurationEvent.idl59
-rw-r--r--offapi/com/sun/star/ui/ContextMenuExecuteEvent.idl66
-rw-r--r--offapi/com/sun/star/ui/ContextMenuInterceptorAction.idl58
-rw-r--r--offapi/com/sun/star/ui/DockingArea.idl76
-rw-r--r--offapi/com/sun/star/ui/GlobalAcceleratorConfiguration.idl50
-rw-r--r--offapi/com/sun/star/ui/ImageType.idl64
-rw-r--r--offapi/com/sun/star/ui/ItemDescriptor.idl102
-rw-r--r--offapi/com/sun/star/ui/ItemStyle.idl158
-rw-r--r--offapi/com/sun/star/ui/ItemType.idl59
-rw-r--r--offapi/com/sun/star/ui/ModuleUICategoryDescription.idl77
-rw-r--r--offapi/com/sun/star/ui/ModuleUICommandDescription.idl84
-rw-r--r--offapi/com/sun/star/ui/ModuleUIConfigurationManager.idl117
-rw-r--r--offapi/com/sun/star/ui/ModuleUIConfigurationManagerSupplier.idl66
-rw-r--r--offapi/com/sun/star/ui/ModuleWindowStateConfiguration.idl98
-rw-r--r--offapi/com/sun/star/ui/UICategoryDescription.idl77
-rw-r--r--offapi/com/sun/star/ui/UICommandDescription.idl71
-rw-r--r--offapi/com/sun/star/ui/UIConfigurationManager.idl94
-rw-r--r--offapi/com/sun/star/ui/UIElement.idl112
-rw-r--r--offapi/com/sun/star/ui/UIElementFactory.idl67
-rw-r--r--offapi/com/sun/star/ui/UIElementFactoryManager.idl76
-rw-r--r--offapi/com/sun/star/ui/UIElementSettings.idl94
-rw-r--r--offapi/com/sun/star/ui/UIElementType.idl88
-rw-r--r--offapi/com/sun/star/ui/WindowContentFactory.idl59
-rw-r--r--offapi/com/sun/star/ui/WindowStateConfiguration.idl74
-rw-r--r--offapi/com/sun/star/ui/XAcceleratorConfiguration.idl304
-rw-r--r--offapi/com/sun/star/ui/XContextMenuInterception.idl57
-rw-r--r--offapi/com/sun/star/ui/XContextMenuInterceptor.idl57
-rw-r--r--offapi/com/sun/star/ui/XDockingAreaAcceptor.idl119
-rw-r--r--offapi/com/sun/star/ui/XImageManager.idl256
-rw-r--r--offapi/com/sun/star/ui/XModuleUIConfigurationManager.idl113
-rw-r--r--offapi/com/sun/star/ui/XModuleUIConfigurationManagerSupplier.idl71
-rw-r--r--offapi/com/sun/star/ui/XToolPanel.idl64
-rw-r--r--offapi/com/sun/star/ui/XUIConfiguration.idl85
-rw-r--r--offapi/com/sun/star/ui/XUIConfigurationListener.idl87
-rw-r--r--offapi/com/sun/star/ui/XUIConfigurationManager.idl274
-rw-r--r--offapi/com/sun/star/ui/XUIConfigurationManagerSupplier.idl61
-rw-r--r--offapi/com/sun/star/ui/XUIConfigurationPersistence.idl105
-rw-r--r--offapi/com/sun/star/ui/XUIConfigurationStorage.idl86
-rw-r--r--offapi/com/sun/star/ui/XUIElement.idl97
-rw-r--r--offapi/com/sun/star/ui/XUIElementFactory.idl130
-rw-r--r--offapi/com/sun/star/ui/XUIElementFactoryRegistration.idl182
-rw-r--r--offapi/com/sun/star/ui/XUIElementSettings.idl102
-rw-r--r--offapi/com/sun/star/ui/XUIFunctionListener.idl64
-rw-r--r--offapi/com/sun/star/ui/dialogs/CommonFilePickerElementIds.idl86
-rw-r--r--offapi/com/sun/star/ui/dialogs/ControlActions.idl111
-rw-r--r--offapi/com/sun/star/ui/dialogs/DialogClosedEvent.idl65
-rw-r--r--offapi/com/sun/star/ui/dialogs/ExecutableDialogException.idl54
-rw-r--r--offapi/com/sun/star/ui/dialogs/ExecutableDialogResults.idl58
-rw-r--r--offapi/com/sun/star/ui/dialogs/ExtendedFilePickerElementIds.idl127
-rw-r--r--offapi/com/sun/star/ui/dialogs/FilePicker.idl165
-rw-r--r--offapi/com/sun/star/ui/dialogs/FilePickerEvent.idl62
-rw-r--r--offapi/com/sun/star/ui/dialogs/FilePreviewImageFormats.idl53
-rw-r--r--offapi/com/sun/star/ui/dialogs/FilterOptionsDialog.idl89
-rw-r--r--offapi/com/sun/star/ui/dialogs/FolderPicker.idl88
-rw-r--r--offapi/com/sun/star/ui/dialogs/ListboxControlActions.idl91
-rw-r--r--offapi/com/sun/star/ui/dialogs/TemplateDescription.idl143
-rw-r--r--offapi/com/sun/star/ui/dialogs/Wizard.idl75
-rw-r--r--offapi/com/sun/star/ui/dialogs/WizardButton.idl60
-rw-r--r--offapi/com/sun/star/ui/dialogs/WizardTravelType.idl54
-rw-r--r--offapi/com/sun/star/ui/dialogs/XAsynchronousExecutableDialog.idl72
-rw-r--r--offapi/com/sun/star/ui/dialogs/XControlAccess.idl105
-rw-r--r--offapi/com/sun/star/ui/dialogs/XControlInformation.idl111
-rw-r--r--offapi/com/sun/star/ui/dialogs/XDialogClosedListener.idl68
-rw-r--r--offapi/com/sun/star/ui/dialogs/XExecutableDialog.idl75
-rw-r--r--offapi/com/sun/star/ui/dialogs/XFilePicker.idl145
-rw-r--r--offapi/com/sun/star/ui/dialogs/XFilePicker2.idl75
-rw-r--r--offapi/com/sun/star/ui/dialogs/XFilePickerControlAccess.idl153
-rw-r--r--offapi/com/sun/star/ui/dialogs/XFilePickerListener.idl120
-rw-r--r--offapi/com/sun/star/ui/dialogs/XFilePickerNotifier.idl75
-rw-r--r--offapi/com/sun/star/ui/dialogs/XFilePreview.idl144
-rw-r--r--offapi/com/sun/star/ui/dialogs/XFilterGroupManager.idl80
-rw-r--r--offapi/com/sun/star/ui/dialogs/XFilterManager.idl97
-rw-r--r--offapi/com/sun/star/ui/dialogs/XFolderPicker.idl100
-rw-r--r--offapi/com/sun/star/ui/dialogs/XWizard.idl228
-rw-r--r--offapi/com/sun/star/ui/dialogs/XWizardController.idl85
-rw-r--r--offapi/com/sun/star/ui/dialogs/XWizardPage.idl86
-rw-r--r--offapi/com/sun/star/ui/dialogs/makefile.mk79
-rw-r--r--offapi/com/sun/star/ui/makefile.mk93
-rw-r--r--offapi/com/sun/star/util/AliasProgrammaticPair.idl56
-rw-r--r--offapi/com/sun/star/util/AtomClassRequest.idl61
-rw-r--r--offapi/com/sun/star/util/AtomDescription.idl60
-rw-r--r--offapi/com/sun/star/util/CellProtection.idl66
-rw-r--r--offapi/com/sun/star/util/ChangesEvent.idl77
-rw-r--r--offapi/com/sun/star/util/ChangesSet.idl61
-rw-r--r--offapi/com/sun/star/util/CloseVetoException.idl52
-rw-r--r--offapi/com/sun/star/util/Color.idl52
-rw-r--r--offapi/com/sun/star/util/DataEditorEvent.idl55
-rw-r--r--offapi/com/sun/star/util/DataEditorEventType.idl51
-rw-r--r--offapi/com/sun/star/util/Date.idl63
-rw-r--r--offapi/com/sun/star/util/DateTime.idl87
-rw-r--r--offapi/com/sun/star/util/DateTimeRange.idl116
-rw-r--r--offapi/com/sun/star/util/DiskFullException.idl51
-rw-r--r--offapi/com/sun/star/util/Duration.idl101
-rw-r--r--offapi/com/sun/star/util/ElementChange.idl65
-rw-r--r--offapi/com/sun/star/util/Endianness.idl64
-rw-r--r--offapi/com/sun/star/util/FileIOException.idl50
-rw-r--r--offapi/com/sun/star/util/InvalidStateException.idl50
-rw-r--r--offapi/com/sun/star/util/JobManager.idl46
-rw-r--r--offapi/com/sun/star/util/Language.idl44
-rw-r--r--offapi/com/sun/star/util/MalformedNumberFormatException.idl60
-rw-r--r--offapi/com/sun/star/util/MeasureUnit.idl106
-rw-r--r--offapi/com/sun/star/util/ModeChangeEvent.idl63
-rw-r--r--offapi/com/sun/star/util/NotNumericException.idl51
-rw-r--r--offapi/com/sun/star/util/NumberFormat.idl126
-rw-r--r--offapi/com/sun/star/util/NumberFormatProperties.idl81
-rw-r--r--offapi/com/sun/star/util/NumberFormatSettings.idl88
-rw-r--r--offapi/com/sun/star/util/NumberFormats.idl64
-rw-r--r--offapi/com/sun/star/util/NumberFormatsSupplier.idl77
-rw-r--r--offapi/com/sun/star/util/NumberFormatter.idl69
-rw-r--r--offapi/com/sun/star/util/OfficeInstallationDirectories.idl79
-rw-r--r--offapi/com/sun/star/util/PathSettings.idl173
-rw-r--r--offapi/com/sun/star/util/PathSubstitution.idl108
-rw-r--r--offapi/com/sun/star/util/ReplaceDescriptor.idl59
-rw-r--r--offapi/com/sun/star/util/RevisionTag.idl71
-rw-r--r--offapi/com/sun/star/util/SearchDescriptor.idl140
-rw-r--r--offapi/com/sun/star/util/SortDescriptor.idl111
-rw-r--r--offapi/com/sun/star/util/SortDescriptor2.idl57
-rw-r--r--offapi/com/sun/star/util/SortField.idl67
-rw-r--r--offapi/com/sun/star/util/SortFieldType.idl64
-rw-r--r--offapi/com/sun/star/util/Sortable.idl67
-rw-r--r--offapi/com/sun/star/util/TextSearch.idl53
-rw-r--r--offapi/com/sun/star/util/Time.idl66
-rw-r--r--offapi/com/sun/star/util/TriState.idl66
-rw-r--r--offapi/com/sun/star/util/URL.idl131
-rw-r--r--offapi/com/sun/star/util/URLTransformer.idl54
-rw-r--r--offapi/com/sun/star/util/UriAbbreviation.idl48
-rw-r--r--offapi/com/sun/star/util/VetoException.idl54
-rw-r--r--offapi/com/sun/star/util/XArchiver.idl80
-rw-r--r--offapi/com/sun/star/util/XAtomServer.idl146
-rw-r--r--offapi/com/sun/star/util/XBroadcaster.idl84
-rw-r--r--offapi/com/sun/star/util/XCancelManager.idl67
-rw-r--r--offapi/com/sun/star/util/XCancellable.idl58
-rw-r--r--offapi/com/sun/star/util/XChainable.idl83
-rw-r--r--offapi/com/sun/star/util/XChangesBatch.idl86
-rw-r--r--offapi/com/sun/star/util/XChangesListener.idl64
-rw-r--r--offapi/com/sun/star/util/XChangesNotifier.idl64
-rw-r--r--offapi/com/sun/star/util/XChangesSet.idl73
-rw-r--r--offapi/com/sun/star/util/XCloneable.idl56
-rw-r--r--offapi/com/sun/star/util/XCloseBroadcaster.idl80
-rw-r--r--offapi/com/sun/star/util/XCloseListener.idl139
-rw-r--r--offapi/com/sun/star/util/XCloseable.idl135
-rw-r--r--offapi/com/sun/star/util/XDataEditor.idl76
-rw-r--r--offapi/com/sun/star/util/XDataEditorListener.idl56
-rw-r--r--offapi/com/sun/star/util/XFlushListener.idl60
-rw-r--r--offapi/com/sun/star/util/XFlushable.idl70
-rw-r--r--offapi/com/sun/star/util/XImportable.idl71
-rw-r--r--offapi/com/sun/star/util/XIndent.idl60
-rw-r--r--offapi/com/sun/star/util/XJobManager.idl65
-rw-r--r--offapi/com/sun/star/util/XLinkUpdate.idl59
-rw-r--r--offapi/com/sun/star/util/XLocalizedAliases.idl117
-rw-r--r--offapi/com/sun/star/util/XMergeable.idl63
-rw-r--r--offapi/com/sun/star/util/XModeChangeApproveListener.idl74
-rw-r--r--offapi/com/sun/star/util/XModeChangeBroadcaster.idl97
-rw-r--r--offapi/com/sun/star/util/XModeChangeListener.idl63
-rw-r--r--offapi/com/sun/star/util/XModeSelector.idl78
-rw-r--r--offapi/com/sun/star/util/XModifiable.idl74
-rw-r--r--offapi/com/sun/star/util/XModifiable2.idl88
-rw-r--r--offapi/com/sun/star/util/XModifyBroadcaster.idl69
-rw-r--r--offapi/com/sun/star/util/XModifyListener.idl66
-rw-r--r--offapi/com/sun/star/util/XNumberFormatPreviewer.idl137
-rw-r--r--offapi/com/sun/star/util/XNumberFormatTypes.idl111
-rw-r--r--offapi/com/sun/star/util/XNumberFormats.idl136
-rw-r--r--offapi/com/sun/star/util/XNumberFormatsSupplier.idl75
-rw-r--r--offapi/com/sun/star/util/XNumberFormatter.idl149
-rw-r--r--offapi/com/sun/star/util/XOfficeInstallationDirectories.idl114
-rw-r--r--offapi/com/sun/star/util/XPropertyReplace.idl101
-rw-r--r--offapi/com/sun/star/util/XProtectable.idl72
-rw-r--r--offapi/com/sun/star/util/XRefreshListener.idl60
-rw-r--r--offapi/com/sun/star/util/XRefreshable.idl70
-rw-r--r--offapi/com/sun/star/util/XReplaceDescriptor.idl62
-rw-r--r--offapi/com/sun/star/util/XReplaceable.idl80
-rw-r--r--offapi/com/sun/star/util/XSearchDescriptor.idl62
-rw-r--r--offapi/com/sun/star/util/XSearchable.idl112
-rw-r--r--offapi/com/sun/star/util/XSimpleErrorHandler.idl54
-rw-r--r--offapi/com/sun/star/util/XSortable.idl113
-rw-r--r--offapi/com/sun/star/util/XStringAbbreviation.idl83
-rw-r--r--offapi/com/sun/star/util/XStringEscape.idl83
-rw-r--r--offapi/com/sun/star/util/XStringMapping.idl55
-rw-r--r--offapi/com/sun/star/util/XStringSubstitution.idl134
-rw-r--r--offapi/com/sun/star/util/XStringWidth.idl63
-rw-r--r--offapi/com/sun/star/util/XTextSearch.idl190
-rw-r--r--offapi/com/sun/star/util/XTimeStamped.idl73
-rw-r--r--offapi/com/sun/star/util/XURLTransformer.idl146
-rw-r--r--offapi/com/sun/star/util/XUniqueIDFactory.idl51
-rw-r--r--offapi/com/sun/star/util/XUpdatable.idl58
-rw-r--r--offapi/com/sun/star/util/makefile.mk152
-rw-r--r--offapi/com/sun/star/view/DocumentZoomType.idl72
-rw-r--r--offapi/com/sun/star/view/DuplexMode.idl66
-rw-r--r--offapi/com/sun/star/view/OfficeDocumentView.idl80
-rw-r--r--offapi/com/sun/star/view/PaperFormat.idl92
-rw-r--r--offapi/com/sun/star/view/PaperOrientation.idl57
-rw-r--r--offapi/com/sun/star/view/PrintJobEvent.idl62
-rw-r--r--offapi/com/sun/star/view/PrintOptions.idl98
-rw-r--r--offapi/com/sun/star/view/PrintSettings.idl111
-rw-r--r--offapi/com/sun/star/view/PrintableState.idl78
-rw-r--r--offapi/com/sun/star/view/PrintableStateEvent.idl60
-rw-r--r--offapi/com/sun/star/view/PrinterDescriptor.idl117
-rw-r--r--offapi/com/sun/star/view/RenderDescriptor.idl59
-rw-r--r--offapi/com/sun/star/view/RenderOptions.idl112
-rw-r--r--offapi/com/sun/star/view/SelectionType.idl72
-rw-r--r--offapi/com/sun/star/view/ViewSettings.idl76
-rw-r--r--offapi/com/sun/star/view/XControlAccess.idl71
-rw-r--r--offapi/com/sun/star/view/XFormLayerAccess.idl109
-rw-r--r--offapi/com/sun/star/view/XLineCursor.idl83
-rw-r--r--offapi/com/sun/star/view/XMultiSelectionSupplier.idl131
-rw-r--r--offapi/com/sun/star/view/XPrintJob.idl77
-rw-r--r--offapi/com/sun/star/view/XPrintJobBroadcaster.idl66
-rw-r--r--offapi/com/sun/star/view/XPrintJobListener.idl64
-rw-r--r--offapi/com/sun/star/view/XPrintPreview.idl57
-rw-r--r--offapi/com/sun/star/view/XPrintSettingsSupplier.idl65
-rw-r--r--offapi/com/sun/star/view/XPrintable.idl91
-rw-r--r--offapi/com/sun/star/view/XPrintableBroadcaster.idl64
-rw-r--r--offapi/com/sun/star/view/XPrintableListener.idl66
-rw-r--r--offapi/com/sun/star/view/XRenderable.idl110
-rw-r--r--offapi/com/sun/star/view/XScreenCursor.idl61
-rw-r--r--offapi/com/sun/star/view/XSelectionChangeListener.idl67
-rw-r--r--offapi/com/sun/star/view/XSelectionSupplier.idl89
-rw-r--r--offapi/com/sun/star/view/XViewCursor.idl116
-rw-r--r--offapi/com/sun/star/view/XViewSettingsSupplier.idl64
-rw-r--r--offapi/com/sun/star/view/makefile.mk78
-rw-r--r--offapi/com/sun/star/xforms/Binding.idl94
-rw-r--r--offapi/com/sun/star/xforms/InvalidDataOnSubmitException.idl57
-rw-r--r--offapi/com/sun/star/xforms/XDataTypeRepository.idl120
-rw-r--r--offapi/com/sun/star/xforms/XFormsEvent.idl43
-rw-r--r--offapi/com/sun/star/xforms/XFormsSupplier.idl65
-rw-r--r--offapi/com/sun/star/xforms/XFormsUIHelper1.idl165
-rw-r--r--offapi/com/sun/star/xforms/XModel.idl238
-rw-r--r--offapi/com/sun/star/xforms/XSubmission.idl76
-rw-r--r--offapi/com/sun/star/xforms/makefile.mk55
-rw-r--r--offapi/com/sun/star/xml/Attribute.idl61
-rw-r--r--offapi/com/sun/star/xml/AttributeContainer.idl56
-rw-r--r--offapi/com/sun/star/xml/AttributeData.idl65
-rw-r--r--offapi/com/sun/star/xml/ExportFilter.idl65
-rw-r--r--offapi/com/sun/star/xml/FastAttribute.idl56
-rw-r--r--offapi/com/sun/star/xml/ImportFilter.idl49
-rw-r--r--offapi/com/sun/star/xml/NamespaceContainer.idl52
-rw-r--r--offapi/com/sun/star/xml/ParaUserDefinedAttributesSupplier.idl62
-rw-r--r--offapi/com/sun/star/xml/TextUserDefinedAttributesSupplier.idl62
-rw-r--r--offapi/com/sun/star/xml/UserDefinedAttributeSupplier.idl71
-rw-r--r--offapi/com/sun/star/xml/UserDefinedAttributesSupplier.idl62
-rw-r--r--offapi/com/sun/star/xml/XExportFilter.idl77
-rw-r--r--offapi/com/sun/star/xml/XImportFilter.idl81
-rw-r--r--offapi/com/sun/star/xml/XMLExportFilter.idl60
-rw-r--r--offapi/com/sun/star/xml/XMLImportFilter.idl64
-rw-r--r--offapi/com/sun/star/xml/crypto/SEInitializer.idl56
-rw-r--r--offapi/com/sun/star/xml/crypto/SecurityEnvironment.idl60
-rw-r--r--offapi/com/sun/star/xml/crypto/SecurityOperationStatus.idl150
-rw-r--r--offapi/com/sun/star/xml/crypto/XMLEncryption.idl57
-rw-r--r--offapi/com/sun/star/xml/crypto/XMLEncryptionException.idl55
-rw-r--r--offapi/com/sun/star/xml/crypto/XMLEncryptionTemplate.idl58
-rw-r--r--offapi/com/sun/star/xml/crypto/XMLSecurityContext.idl58
-rw-r--r--offapi/com/sun/star/xml/crypto/XMLSignature.idl58
-rw-r--r--offapi/com/sun/star/xml/crypto/XMLSignatureException.idl55
-rw-r--r--offapi/com/sun/star/xml/crypto/XMLSignatureTemplate.idl58
-rw-r--r--offapi/com/sun/star/xml/crypto/XSEInitializer.idl68
-rw-r--r--offapi/com/sun/star/xml/crypto/XSecurityEnvironment.idl122
-rw-r--r--offapi/com/sun/star/xml/crypto/XUriBinding.idl72
-rw-r--r--offapi/com/sun/star/xml/crypto/XXMLEncryption.idl87
-rw-r--r--offapi/com/sun/star/xml/crypto/XXMLEncryptionTemplate.idl97
-rw-r--r--offapi/com/sun/star/xml/crypto/XXMLSecurityContext.idl87
-rw-r--r--offapi/com/sun/star/xml/crypto/XXMLSecurityTemplate.idl89
-rw-r--r--offapi/com/sun/star/xml/crypto/XXMLSignature.idl88
-rw-r--r--offapi/com/sun/star/xml/crypto/XXMLSignatureTemplate.idl85
-rw-r--r--offapi/com/sun/star/xml/crypto/makefile.mk66
-rw-r--r--offapi/com/sun/star/xml/crypto/sax/Decryptor.idl66
-rw-r--r--offapi/com/sun/star/xml/crypto/sax/Encryptor.idl68
-rw-r--r--offapi/com/sun/star/xml/crypto/sax/SAXEventKeeper.idl64
-rw-r--r--offapi/com/sun/star/xml/crypto/sax/SignatureCreator.idl67
-rw-r--r--offapi/com/sun/star/xml/crypto/sax/SignatureVerifier.idl68
-rw-r--r--offapi/com/sun/star/xml/crypto/sax/XBlockerMonitor.idl60
-rw-r--r--offapi/com/sun/star/xml/crypto/sax/XDecryptionResultBroadcaster.idl75
-rw-r--r--offapi/com/sun/star/xml/crypto/sax/XDecryptionResultListener.idl64
-rw-r--r--offapi/com/sun/star/xml/crypto/sax/XElementStackKeeper.idl94
-rw-r--r--offapi/com/sun/star/xml/crypto/sax/XEncryptionResultBroadcaster.idl75
-rw-r--r--offapi/com/sun/star/xml/crypto/sax/XEncryptionResultListener.idl64
-rw-r--r--offapi/com/sun/star/xml/crypto/sax/XKeyCollector.idl61
-rw-r--r--offapi/com/sun/star/xml/crypto/sax/XMissionTaker.idl60
-rw-r--r--offapi/com/sun/star/xml/crypto/sax/XReferenceCollector.idl70
-rw-r--r--offapi/com/sun/star/xml/crypto/sax/XReferenceResolvedBroadcaster.idl82
-rw-r--r--offapi/com/sun/star/xml/crypto/sax/XReferenceResolvedListener.idl61
-rw-r--r--offapi/com/sun/star/xml/crypto/sax/XSAXEventKeeper.idl147
-rw-r--r--offapi/com/sun/star/xml/crypto/sax/XSAXEventKeeperStatusChangeBroadcaster.idl76
-rw-r--r--offapi/com/sun/star/xml/crypto/sax/XSAXEventKeeperStatusChangeListener.idl78
-rw-r--r--offapi/com/sun/star/xml/crypto/sax/XSecurityController.idl55
-rw-r--r--offapi/com/sun/star/xml/crypto/sax/XSecuritySAXEventKeeper.idl133
-rw-r--r--offapi/com/sun/star/xml/crypto/sax/XSignatureCreationResultBroadcaster.idl76
-rw-r--r--offapi/com/sun/star/xml/crypto/sax/XSignatureCreationResultListener.idl64
-rw-r--r--offapi/com/sun/star/xml/crypto/sax/XSignatureVerifyResultBroadcaster.idl76
-rw-r--r--offapi/com/sun/star/xml/crypto/sax/XSignatureVerifyResultListener.idl64
-rw-r--r--offapi/com/sun/star/xml/crypto/sax/makefile.mk72
-rw-r--r--offapi/com/sun/star/xml/csax/XCompressedDocumentHandler.idl96
-rw-r--r--offapi/com/sun/star/xml/csax/makefile.mk48
-rw-r--r--offapi/com/sun/star/xml/dom/DOMException.idl54
-rw-r--r--offapi/com/sun/star/xml/dom/DOMExceptionType.idl54
-rw-r--r--offapi/com/sun/star/xml/dom/DocumentBuilder.idl14
-rw-r--r--offapi/com/sun/star/xml/dom/NodeType.idl51
-rw-r--r--offapi/com/sun/star/xml/dom/SAXDocumentBuilder.idl19
-rw-r--r--offapi/com/sun/star/xml/dom/SAXDocumentBuilderState.idl44
-rw-r--r--offapi/com/sun/star/xml/dom/XAttr.idl73
-rw-r--r--offapi/com/sun/star/xml/dom/XCDATASection.idl42
-rw-r--r--offapi/com/sun/star/xml/dom/XCharacterData.idl112
-rw-r--r--offapi/com/sun/star/xml/dom/XComment.idl43
-rw-r--r--offapi/com/sun/star/xml/dom/XDOMImplementation.idl88
-rw-r--r--offapi/com/sun/star/xml/dom/XDocument.idl195
-rw-r--r--offapi/com/sun/star/xml/dom/XDocumentBuilder.idl126
-rw-r--r--offapi/com/sun/star/xml/dom/XDocumentFragment.idl42
-rw-r--r--offapi/com/sun/star/xml/dom/XDocumentType.idl78
-rw-r--r--offapi/com/sun/star/xml/dom/XElement.idl156
-rw-r--r--offapi/com/sun/star/xml/dom/XEntity.idl57
-rw-r--r--offapi/com/sun/star/xml/dom/XEntityReference.idl42
-rw-r--r--offapi/com/sun/star/xml/dom/XNamedNodeMap.idl104
-rw-r--r--offapi/com/sun/star/xml/dom/XNode.idl282
-rw-r--r--offapi/com/sun/star/xml/dom/XNodeList.idl53
-rw-r--r--offapi/com/sun/star/xml/dom/XNotation.idl52
-rw-r--r--offapi/com/sun/star/xml/dom/XProcessingInstruction.idl61
-rw-r--r--offapi/com/sun/star/xml/dom/XSAXDocumentBuilder.idl65
-rw-r--r--offapi/com/sun/star/xml/dom/XText.idl49
-rw-r--r--offapi/com/sun/star/xml/dom/events/AttrChangeType.idl42
-rw-r--r--offapi/com/sun/star/xml/dom/events/EventException.idl43
-rw-r--r--offapi/com/sun/star/xml/dom/events/EventType.idl174
-rw-r--r--offapi/com/sun/star/xml/dom/events/PhaseType.idl40
-rw-r--r--offapi/com/sun/star/xml/dom/events/XDocumentEvent.idl42
-rw-r--r--offapi/com/sun/star/xml/dom/events/XEvent.idl66
-rw-r--r--offapi/com/sun/star/xml/dom/events/XEventListener.idl42
-rw-r--r--offapi/com/sun/star/xml/dom/events/XEventTarget.idl55
-rw-r--r--offapi/com/sun/star/xml/dom/events/XMouseEvent.idl69
-rw-r--r--offapi/com/sun/star/xml/dom/events/XMutationEvent.idl60
-rw-r--r--offapi/com/sun/star/xml/dom/events/XUIEvent.idl49
-rw-r--r--offapi/com/sun/star/xml/dom/events/makefile.mk62
-rw-r--r--offapi/com/sun/star/xml/dom/makefile.mk75
-rw-r--r--offapi/com/sun/star/xml/dom/views/XAbstractView.idl41
-rw-r--r--offapi/com/sun/star/xml/dom/views/XDocumentView.idl39
-rw-r--r--offapi/com/sun/star/xml/dom/views/makefile.mk53
-rw-r--r--offapi/com/sun/star/xml/input/SaxDocumentHandler.idl56
-rw-r--r--offapi/com/sun/star/xml/input/XAttributes.idl127
-rw-r--r--offapi/com/sun/star/xml/input/XElement.idl120
-rw-r--r--offapi/com/sun/star/xml/input/XNamespaceMapping.idl65
-rw-r--r--offapi/com/sun/star/xml/input/XRoot.idl97
-rw-r--r--offapi/com/sun/star/xml/input/makefile.mk51
-rw-r--r--offapi/com/sun/star/xml/makefile.mk60
-rw-r--r--offapi/com/sun/star/xml/sax/FastShapeContextHandler.idl45
-rw-r--r--offapi/com/sun/star/xml/sax/FastToken.idl59
-rw-r--r--offapi/com/sun/star/xml/sax/FastTokenHandler.idl43
-rw-r--r--offapi/com/sun/star/xml/sax/InputSource.idl88
-rw-r--r--offapi/com/sun/star/xml/sax/SAXException.idl66
-rw-r--r--offapi/com/sun/star/xml/sax/SAXInvalidCharacterException.idl54
-rw-r--r--offapi/com/sun/star/xml/sax/SAXParseException.idl78
-rw-r--r--offapi/com/sun/star/xml/sax/XAttributeList.idl102
-rw-r--r--offapi/com/sun/star/xml/sax/XDTDHandler.idl79
-rw-r--r--offapi/com/sun/star/xml/sax/XDocumentHandler.idl125
-rw-r--r--offapi/com/sun/star/xml/sax/XEntityResolver.idl71
-rw-r--r--offapi/com/sun/star/xml/sax/XErrorHandler.idl84
-rw-r--r--offapi/com/sun/star/xml/sax/XExtendedDocumentHandler.idl95
-rw-r--r--offapi/com/sun/star/xml/sax/XFastAttributeList.idl180
-rw-r--r--offapi/com/sun/star/xml/sax/XFastContextHandler.idl161
-rw-r--r--offapi/com/sun/star/xml/sax/XFastDocumentHandler.idl89
-rw-r--r--offapi/com/sun/star/xml/sax/XFastParser.idl196
-rw-r--r--offapi/com/sun/star/xml/sax/XFastSAXSerializable.idl99
-rw-r--r--offapi/com/sun/star/xml/sax/XFastSerializer.idl191
-rw-r--r--offapi/com/sun/star/xml/sax/XFastShapeContextHandler.idl62
-rw-r--r--offapi/com/sun/star/xml/sax/XFastTokenHandler.idl93
-rw-r--r--offapi/com/sun/star/xml/sax/XLocator.idl77
-rw-r--r--offapi/com/sun/star/xml/sax/XParser.idl126
-rw-r--r--offapi/com/sun/star/xml/sax/XSAXSerializable.idl82
-rw-r--r--offapi/com/sun/star/xml/sax/makefile.mk69
-rw-r--r--offapi/com/sun/star/xml/wrapper/XMLDocumentWrapper.idl58
-rw-r--r--offapi/com/sun/star/xml/wrapper/XMLElementWrapper.idl60
-rw-r--r--offapi/com/sun/star/xml/wrapper/XXMLDocumentWrapper.idl176
-rw-r--r--offapi/com/sun/star/xml/wrapper/XXMLElementWrapper.idl55
-rw-r--r--offapi/com/sun/star/xml/wrapper/makefile.mk51
-rw-r--r--offapi/com/sun/star/xml/xpath/Libxml2ExtensionHandle.idl49
-rw-r--r--offapi/com/sun/star/xml/xpath/XPathAPI.idl14
-rw-r--r--offapi/com/sun/star/xml/xpath/XPathException.idl50
-rw-r--r--offapi/com/sun/star/xml/xpath/XPathExtension.idl14
-rw-r--r--offapi/com/sun/star/xml/xpath/XPathObjectType.idl51
-rw-r--r--offapi/com/sun/star/xml/xpath/XXPathAPI.idl207
-rw-r--r--offapi/com/sun/star/xml/xpath/XXPathExtension.idl47
-rw-r--r--offapi/com/sun/star/xml/xpath/XXPathObject.idl102
-rw-r--r--offapi/com/sun/star/xml/xpath/makefile.mk60
-rw-r--r--offapi/com/sun/star/xsd/Boolean.idl53
-rw-r--r--offapi/com/sun/star/xsd/DataTypeClass.idl125
-rw-r--r--offapi/com/sun/star/xsd/Date.idl75
-rw-r--r--offapi/com/sun/star/xsd/DateTime.idl75
-rw-r--r--offapi/com/sun/star/xsd/Day.idl73
-rw-r--r--offapi/com/sun/star/xsd/Decimal.idl90
-rw-r--r--offapi/com/sun/star/xsd/Month.idl73
-rw-r--r--offapi/com/sun/star/xsd/String.idl73
-rw-r--r--offapi/com/sun/star/xsd/Time.idl75
-rw-r--r--offapi/com/sun/star/xsd/WhiteSpaceTreatment.idl59
-rw-r--r--offapi/com/sun/star/xsd/XDataType.idl102
-rw-r--r--offapi/com/sun/star/xsd/Year.idl73
-rw-r--r--offapi/com/sun/star/xsd/makefile.mk58
-rw-r--r--offapi/drafts/com/sun/star/form/IncompatibleTypesException.idl57
-rw-r--r--offapi/drafts/com/sun/star/form/ListEntryEvent.idl77
-rw-r--r--offapi/drafts/com/sun/star/form/XBindableValue.idl81
-rw-r--r--offapi/drafts/com/sun/star/form/XListEntryListener.idl92
-rw-r--r--offapi/drafts/com/sun/star/form/XListEntrySink.idl71
-rw-r--r--offapi/drafts/com/sun/star/form/XListEntrySource.idl103
-rw-r--r--offapi/drafts/com/sun/star/form/XValueBinding.idl101
-rw-r--r--offapi/drafts/com/sun/star/form/makefile.mk52
-rw-r--r--offapi/prj/build.lst109
-rw-r--r--offapi/prj/d.lst230
-rw-r--r--offapi/type_reference/typelibrary_history.txt160
-rw-r--r--offapi/type_reference/types.rdbbin0 -> 7307264 bytes
-rwxr-xr-xoffapi/util/checknewapi.pl198
-rw-r--r--offapi/util/makefile.mk188
-rw-r--r--offapi/util/makefile.pmk34
-rw-r--r--offapi/util/regfilter.sed2
-rw-r--r--offapi/util/target.pmk33
-rw-r--r--officecfg/prj/build.lst17
-rw-r--r--officecfg/prj/d.lst69
-rw-r--r--officecfg/registry/component-schema.dtd152
-rw-r--r--officecfg/registry/component-update.dtd120
-rw-r--r--officecfg/registry/data.dtd40
-rw-r--r--officecfg/registry/data/org/openoffice/FirstStartWizard.xcu56
-rw-r--r--officecfg/registry/data/org/openoffice/Inet.xcu407
-rw-r--r--officecfg/registry/data/org/openoffice/Interaction.xcu56
-rw-r--r--officecfg/registry/data/org/openoffice/Langpack.xcu.tmpl36
-rwxr-xr-xofficecfg/registry/data/org/openoffice/Office/Accelerators.xcu5833
-rw-r--r--officecfg/registry/data/org/openoffice/Office/Calc.xcu223
-rwxr-xr-xofficecfg/registry/data/org/openoffice/Office/Canvas.xcu80
-rw-r--r--officecfg/registry/data/org/openoffice/Office/Common.xcu713
-rw-r--r--officecfg/registry/data/org/openoffice/Office/Compatibility.xcu47
-rw-r--r--officecfg/registry/data/org/openoffice/Office/DataAccess.xcu730
-rw-r--r--officecfg/registry/data/org/openoffice/Office/Embedding.xcu333
-rw-r--r--officecfg/registry/data/org/openoffice/Office/ExtensionManager.xcu36
-rwxr-xr-xofficecfg/registry/data/org/openoffice/Office/FormWizard.xcu155
-rw-r--r--officecfg/registry/data/org/openoffice/Office/Histories.xcu55
-rw-r--r--officecfg/registry/data/org/openoffice/Office/Impress.xcu166
-rw-r--r--officecfg/registry/data/org/openoffice/Office/Jobs.xcu48
-rw-r--r--officecfg/registry/data/org/openoffice/Office/Labels.xcu13808
-rw-r--r--officecfg/registry/data/org/openoffice/Office/Linguistic.xcu35
-rw-r--r--officecfg/registry/data/org/openoffice/Office/Logging.xcu32
-rwxr-xr-xofficecfg/registry/data/org/openoffice/Office/Math.xcu1001
-rw-r--r--officecfg/registry/data/org/openoffice/Office/Paths.xcu241
-rw-r--r--officecfg/registry/data/org/openoffice/Office/ProtocolHandler.xcu72
-rw-r--r--officecfg/registry/data/org/openoffice/Office/Recovery.xcu42
-rw-r--r--officecfg/registry/data/org/openoffice/Office/SFX.xcu56
-rw-r--r--officecfg/registry/data/org/openoffice/Office/Scripting.xcu47
-rw-r--r--officecfg/registry/data/org/openoffice/Office/Security.xcu477
-rw-r--r--officecfg/registry/data/org/openoffice/Office/TableWizard.xcu9751
-rw-r--r--officecfg/registry/data/org/openoffice/Office/TypeDetection.xcu41
-rw-r--r--officecfg/registry/data/org/openoffice/Office/UI.xcu567
-rw-r--r--officecfg/registry/data/org/openoffice/Office/UI/BaseWindowState.xcu113
-rw-r--r--officecfg/registry/data/org/openoffice/Office/UI/BasicIDECommands.xcu10
-rw-r--r--officecfg/registry/data/org/openoffice/Office/UI/BasicIDEWindowState.xcu152
-rw-r--r--officecfg/registry/data/org/openoffice/Office/UI/BibliographyCommands.xcu64
-rw-r--r--officecfg/registry/data/org/openoffice/Office/UI/CalcCommands.xcu1605
-rw-r--r--officecfg/registry/data/org/openoffice/Office/UI/CalcWindowState.xcu575
-rw-r--r--officecfg/registry/data/org/openoffice/Office/UI/ChartCommands.xcu709
-rw-r--r--officecfg/registry/data/org/openoffice/Office/UI/ChartWindowState.xcu162
-rw-r--r--officecfg/registry/data/org/openoffice/Office/UI/Controller.xcu500
-rw-r--r--officecfg/registry/data/org/openoffice/Office/UI/DbBrowserWindowState.xcu37
-rw-r--r--officecfg/registry/data/org/openoffice/Office/UI/DbQueryWindowState.xcu71
-rw-r--r--officecfg/registry/data/org/openoffice/Office/UI/DbRelationWindowState.xcu32
-rw-r--r--officecfg/registry/data/org/openoffice/Office/UI/DbTableDataWindowState.xcu37
-rw-r--r--officecfg/registry/data/org/openoffice/Office/UI/DbTableWindowState.xcu32
-rw-r--r--officecfg/registry/data/org/openoffice/Office/UI/DbuCommands.xcu526
-rw-r--r--officecfg/registry/data/org/openoffice/Office/UI/DrawImpressCommands.xcu2125
-rw-r--r--officecfg/registry/data/org/openoffice/Office/UI/DrawWindowState.xcu745
-rw-r--r--officecfg/registry/data/org/openoffice/Office/UI/Effects.xcu2149
-rw-r--r--officecfg/registry/data/org/openoffice/Office/UI/Factories.xcu104
-rw-r--r--officecfg/registry/data/org/openoffice/Office/UI/GenericCategories.xcu190
-rwxr-xr-xofficecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu5470
-rw-r--r--officecfg/registry/data/org/openoffice/Office/UI/ImpressWindowState.xcu895
-rw-r--r--officecfg/registry/data/org/openoffice/Office/UI/MathCommands.xcu174
-rw-r--r--officecfg/registry/data/org/openoffice/Office/UI/MathWindowState.xcu101
-rw-r--r--officecfg/registry/data/org/openoffice/Office/UI/StartModuleCommands.xcu246
-rw-r--r--officecfg/registry/data/org/openoffice/Office/UI/StartModuleWindowState.xcu53
-rw-r--r--officecfg/registry/data/org/openoffice/Office/UI/WriterCommands.xcu2279
-rw-r--r--officecfg/registry/data/org/openoffice/Office/UI/WriterFormWindowState.xcu700
-rw-r--r--officecfg/registry/data/org/openoffice/Office/UI/WriterGlobalWindowState.xcu654
-rw-r--r--officecfg/registry/data/org/openoffice/Office/UI/WriterReportWindowState.xcu700
-rw-r--r--officecfg/registry/data/org/openoffice/Office/UI/WriterWebWindowState.xcu601
-rw-r--r--officecfg/registry/data/org/openoffice/Office/UI/WriterWindowState.xcu660
-rw-r--r--officecfg/registry/data/org/openoffice/Office/UI/XFormsWindowState.xcu711
-rw-r--r--officecfg/registry/data/org/openoffice/Office/UI/makefile.mk79
-rw-r--r--officecfg/registry/data/org/openoffice/Office/Views.xcu37
-rw-r--r--officecfg/registry/data/org/openoffice/Office/WebWizard.xcu1542
-rw-r--r--officecfg/registry/data/org/openoffice/Office/Writer.xcu714
-rw-r--r--officecfg/registry/data/org/openoffice/Office/makefile.mk116
-rw-r--r--officecfg/registry/data/org/openoffice/Setup.xcu960
-rw-r--r--officecfg/registry/data/org/openoffice/System.xcu45
-rw-r--r--officecfg/registry/data/org/openoffice/TypeDetection/UISort.xcu67
-rw-r--r--officecfg/registry/data/org/openoffice/TypeDetection/makefile.mk51
-rw-r--r--officecfg/registry/data/org/openoffice/UserProfile.xcu45
-rw-r--r--officecfg/registry/data/org/openoffice/VCL.xcu8292
-rwxr-xr-xofficecfg/registry/data/org/openoffice/makefile.mk70
-rw-r--r--officecfg/registry/data/org/openoffice/ucb/Configuration.xcu206
-rw-r--r--officecfg/registry/data/org/openoffice/ucb/makefile.mk45
-rw-r--r--officecfg/registry/makefile.mk44
-rw-r--r--officecfg/registry/schema/makefile.mk46
-rw-r--r--officecfg/registry/schema/oo-ad-ldap.xcd.sample153
-rw-r--r--officecfg/registry/schema/oo-common-ad.ldf119
-rw-r--r--officecfg/registry/schema/oo-common.conf22
-rw-r--r--officecfg/registry/schema/oo-common.ldif20
-rw-r--r--officecfg/registry/schema/oo-ldap-attr-map.properties49
-rw-r--r--officecfg/registry/schema/oo-ldap.xcd.sample156
-rw-r--r--officecfg/registry/schema/oo-org-map.properties22
-rw-r--r--officecfg/registry/schema/org/openoffice/FirstStartWizard.xcs69
-rw-r--r--officecfg/registry/schema/org/openoffice/Inet.xcs396
-rw-r--r--officecfg/registry/schema/org/openoffice/Interaction.xcs86
-rw-r--r--officecfg/registry/schema/org/openoffice/LDAP.xcs64
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/Accelerators.xcs81
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/Addons.xcs322
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/Calc.xcs1524
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/CalcAddIns.xcs77
-rwxr-xr-xofficecfg/registry/schema/org/openoffice/Office/Canvas.xcs126
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/Chart.xcs54
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/Commands.xcs68
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/Common.xcs6579
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/Compatibility.xcs113
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/DataAccess.xcs1115
-rwxr-xr-xofficecfg/registry/schema/org/openoffice/Office/DataAccess/Drivers.xcs97
-rwxr-xr-xofficecfg/registry/schema/org/openoffice/Office/DataAccess/makefile.mk42
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/Draw.xcs1126
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/Embedding.xcs154
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/Events.xcs57
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/ExtendedColorScheme.xcs119
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/ExtensionManager.xcs53
-rwxr-xr-xofficecfg/registry/schema/org/openoffice/Office/FormWizard.xcs67
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/Histories.xcs102
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/Impress.xcs1520
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/Java.xcs402
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/Jobs.xcs89
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/Labels.xcs76
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/Linguistic.xcs633
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/Logging.xcs115
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/Math.xcs1258
-rwxr-xr-xofficecfg/registry/schema/org/openoffice/Office/OOoImprovement/Settings.xcs98
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/OOoImprovement/makefile.mk42
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/OptionsDialog.xcs293
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/Paths.xcs99
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/ProtocolHandler.xcs60
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/Recovery.xcs163
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/SFX.xcs56
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/Scripting.xcs75
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/Security.xcs70
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/Substitution.xcs96
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/TabBrowse.xcs61
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/TableWizard.xcs128
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/TypeDetection.xcs160
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/UI.xcs700
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/UI/BaseWindowState.xcs49
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/UI/BasicIDECommands.xcs54
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/UI/BasicIDEWindowState.xcs49
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/UI/BibliographyCommands.xcs54
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/UI/BibliographyWindowState.xcs49
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/UI/CalcCommands.xcs54
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/UI/CalcWindowState.xcs49
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/UI/Category.xcs46
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/UI/ChartCommands.xcs54
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/UI/ChartWindowState.xcs49
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/UI/Commands.xcs63
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/UI/Controller.xcs83
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/UI/DbBrowserWindowState.xcs49
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/UI/DbQueryWindowState.xcs49
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/UI/DbRelationWindowState.xcs49
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/UI/DbTableDataWindowState.xcs49
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/UI/DbTableWindowState.xcs49
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/UI/DbuCommands.xcs54
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/UI/DrawImpressCommands.xcs54
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/UI/DrawWindowState.xcs49
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/UI/Effects.xcs114
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/UI/Factories.xcs72
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/UI/GenericCategories.xcs49
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/UI/GenericCommands.xcs54
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/UI/GlobalSettings.xcs78
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/UI/ImpressWindowState.xcs49
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/UI/MathCommands.xcs54
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/UI/MathWindowState.xcs49
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/UI/StartModuleCommands.xcs54
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/UI/StartModuleWindowState.xcs50
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/UI/WindowContentFactories.xcs72
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/UI/WindowState.xcs145
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/UI/WriterCommands.xcs54
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/UI/WriterFormWindowState.xcs49
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/UI/WriterGlobalWindowState.xcs49
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/UI/WriterReportWindowState.xcs49
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/UI/WriterWebWindowState.xcs49
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/UI/WriterWindowState.xcs49
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/UI/XFormsWindowState.xcs49
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/UI/makefile.mk80
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/Views.xcs135
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/WebWizard.xcs547
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/Writer.xcs7035
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/WriterWeb.xcs1061
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/makefile.mk82
-rw-r--r--officecfg/registry/schema/org/openoffice/Setup.xcs477
-rw-r--r--officecfg/registry/schema/org/openoffice/System.xcs63
-rw-r--r--officecfg/registry/schema/org/openoffice/TypeDetection/Filter.xcs79
-rw-r--r--officecfg/registry/schema/org/openoffice/TypeDetection/GraphicFilter.xcs62
-rw-r--r--officecfg/registry/schema/org/openoffice/TypeDetection/Misc.xcs69
-rw-r--r--officecfg/registry/schema/org/openoffice/TypeDetection/Types.xcs83
-rw-r--r--officecfg/registry/schema/org/openoffice/TypeDetection/UISort.xcs54
-rw-r--r--officecfg/registry/schema/org/openoffice/TypeDetection/makefile.mk46
-rw-r--r--officecfg/registry/schema/org/openoffice/UserProfile.xcs284
-rw-r--r--officecfg/registry/schema/org/openoffice/VCL.xcs115
-rw-r--r--officecfg/registry/schema/org/openoffice/makefile.mk49
-rw-r--r--officecfg/registry/schema/org/openoffice/ucb/Configuration.xcs94
-rw-r--r--officecfg/registry/schema/org/openoffice/ucb/Hierarchy.xcs81
-rw-r--r--officecfg/registry/schema/org/openoffice/ucb/InteractionHandler.xcs53
-rw-r--r--officecfg/registry/schema/org/openoffice/ucb/Store.xcs93
-rw-r--r--officecfg/registry/schema/org/openoffice/ucb/makefile.mk45
-rw-r--r--officecfg/util/alllang.xsl345
-rw-r--r--officecfg/util/component-conf.gen88
-rw-r--r--officecfg/util/component-ldif.gen85
-rw-r--r--officecfg/util/component-map.gen97
-rw-r--r--officecfg/util/data_val.xsl300
-rw-r--r--officecfg/util/delcomment.sed1
-rw-r--r--officecfg/util/makefile.mk49
-rw-r--r--officecfg/util/makefile.pmk34
-rw-r--r--officecfg/util/resource.xsl79
-rw-r--r--officecfg/util/sanity.xsl61
-rw-r--r--officecfg/util/schema_trim.xsl85
-rw-r--r--officecfg/util/schema_val.xsl132
-rw-r--r--officecfg/util/template.gen34
-rw-r--r--offuh/prj/build.lst4
-rw-r--r--offuh/prj/d.lst379
-rw-r--r--offuh/source/makefile.mk44
-rwxr-xr-xooo.lst75
-rw-r--r--ooo_custom_images/README.txt59
-rwxr-xr-xooo_custom_images/broffice/introabout/about.pngbin0 -> 7923 bytes
-rwxr-xr-xooo_custom_images/broffice/introabout/intro.pngbin0 -> 14012 bytes
-rw-r--r--ooo_custom_images/c04/svx/res/ooointro.bmpbin0 -> 377576 bytes
-rw-r--r--ooo_custom_images/classic/classic_images.tar.gzbin0 -> 1723339 bytes
-rwxr-xr-xooo_custom_images/dev/introabout/intro.pngbin0 -> 30991 bytes
-rwxr-xr-xooo_custom_images/dev_broffice/introabout/intro.pngbin0 -> 16596 bytes
-rwxr-xr-xooo_custom_images/dev_nologo/introabout/intro.pngbin0 -> 26740 bytes
-rw-r--r--ooo_custom_images/dev_nologo_broffice/introabout/intro.pngbin0 -> 12219 bytes
-rw-r--r--ooo_custom_images/industrial/README33
-rw-r--r--ooo_custom_images/industrial/TODO70
-rw-r--r--ooo_custom_images/industrial/dbaccess/res/bookmark_sx.pngbin0 -> 325 bytes
-rw-r--r--ooo_custom_images/industrial/dbaccess/res/bookmarkcontainer_sx.pngbin0 -> 319 bytes
-rw-r--r--ooo_custom_images/industrial/dbaccess/res/db.pngbin0 -> 466 bytes
-rw-r--r--ooo_custom_images/industrial/dbaccess/res/db_deleted.pngbin0 -> 619 bytes
-rw-r--r--ooo_custom_images/industrial/dbaccess/res/db_modified.pngbin0 -> 596 bytes
-rw-r--r--ooo_custom_images/industrial/dbaccess/res/db_new.pngbin0 -> 458 bytes
-rw-r--r--ooo_custom_images/industrial/dbaccess/res/docedit_sc.pngbin0 -> 419 bytes
-rw-r--r--ooo_custom_images/industrial/dbaccess/res/docopen_sc.pngbin0 -> 490 bytes
-rw-r--r--ooo_custom_images/industrial/dbaccess/res/exerror.pngbin0 -> 529 bytes
-rw-r--r--ooo_custom_images/industrial/dbaccess/res/exinfo.pngbin0 -> 395 bytes
-rw-r--r--ooo_custom_images/industrial/dbaccess/res/exwarning.pngbin0 -> 570 bytes
-rw-r--r--ooo_custom_images/industrial/dbaccess/res/formnew_sc.pngbin0 -> 270 bytes
-rw-r--r--ooo_custom_images/industrial/dbaccess/res/forms_32.pngbin0 -> 650 bytes
-rw-r--r--ooo_custom_images/industrial/dbaccess/res/lc010.pngbin0 -> 969 bytes
-rw-r--r--ooo_custom_images/industrial/dbaccess/res/lc011.pngbin0 -> 917 bytes
-rw-r--r--ooo_custom_images/industrial/dbaccess/res/lc012.pngbin0 -> 929 bytes
-rw-r--r--ooo_custom_images/industrial/dbaccess/res/lc013.pngbin0 -> 804 bytes
-rw-r--r--ooo_custom_images/industrial/dbaccess/res/lc014.pngbin0 -> 697 bytes
-rw-r--r--ooo_custom_images/industrial/dbaccess/res/lc021.pngbin0 -> 811 bytes
-rw-r--r--ooo_custom_images/industrial/dbaccess/res/lc023.pngbin0 -> 464 bytes
-rw-r--r--ooo_custom_images/industrial/dbaccess/res/lc05621.pngbin0 -> 159 bytes
-rw-r--r--ooo_custom_images/industrial/dbaccess/res/lc09.pngbin0 -> 925 bytes
-rw-r--r--ooo_custom_images/industrial/dbaccess/res/lc12252.pngbin0 -> 485 bytes
-rw-r--r--ooo_custom_images/industrial/dbaccess/res/linkdrop_sc.pngbin0 -> 360 bytes
-rw-r--r--ooo_custom_images/industrial/dbaccess/res/linkedit_sc.pngbin0 -> 372 bytes
-rw-r--r--ooo_custom_images/industrial/dbaccess/res/linknew_sc.pngbin0 -> 474 bytes
-rw-r--r--ooo_custom_images/industrial/dbaccess/res/queries_32.pngbin0 -> 789 bytes
-rw-r--r--ooo_custom_images/industrial/dbaccess/res/querydrop_sc.pngbin0 -> 307 bytes
-rw-r--r--ooo_custom_images/industrial/dbaccess/res/queryeditdesign_sc.pngbin0 -> 344 bytes
-rw-r--r--ooo_custom_images/industrial/dbaccess/res/queryeditsql_sc.pngbin0 -> 224 bytes
-rw-r--r--ooo_custom_images/industrial/dbaccess/res/querynewdesign_sc.pngbin0 -> 479 bytes
-rw-r--r--ooo_custom_images/industrial/dbaccess/res/querynewsql_sc.pngbin0 -> 395 bytes
-rw-r--r--ooo_custom_images/industrial/dbaccess/res/rename_sc.pngbin0 -> 125 bytes
-rw-r--r--ooo_custom_images/industrial/dbaccess/res/reports_32.pngbin0 -> 967 bytes
-rw-r--r--ooo_custom_images/industrial/dbaccess/res/sc010.pngbin0 -> 419 bytes
-rw-r--r--ooo_custom_images/industrial/dbaccess/res/sc011.pngbin0 -> 474 bytes
-rw-r--r--ooo_custom_images/industrial/dbaccess/res/sc012.pngbin0 -> 372 bytes
-rw-r--r--ooo_custom_images/industrial/dbaccess/res/sc013.pngbin0 -> 360 bytes
-rw-r--r--ooo_custom_images/industrial/dbaccess/res/sc014.pngbin0 -> 270 bytes
-rw-r--r--ooo_custom_images/industrial/dbaccess/res/sc021.pngbin0 -> 344 bytes
-rw-r--r--ooo_custom_images/industrial/dbaccess/res/sc023.pngbin0 -> 224 bytes
-rw-r--r--ooo_custom_images/industrial/dbaccess/res/sc05621.pngbin0 -> 154 bytes
-rw-r--r--ooo_custom_images/industrial/dbaccess/res/sc09.pngbin0 -> 490 bytes
-rw-r--r--ooo_custom_images/industrial/dbaccess/res/sc12252.pngbin0 -> 440 bytes
-rw-r--r--ooo_custom_images/industrial/dbaccess/res/tabledrop_sc.pngbin0 -> 280 bytes
-rw-r--r--ooo_custom_images/industrial/dbaccess/res/tableedit_sc.pngbin0 -> 313 bytes
-rw-r--r--ooo_custom_images/industrial/dbaccess/res/tablenew_sc.pngbin0 -> 499 bytes
-rw-r--r--ooo_custom_images/industrial/dbaccess/res/tables_32.pngbin0 -> 906 bytes
-rw-r--r--ooo_custom_images/industrial/duplicates39
-rw-r--r--ooo_custom_images/industrial/fpicker/res/fp011.pngbin0 -> 413 bytes
-rw-r--r--ooo_custom_images/industrial/fpicker/res/fp014.pngbin0 -> 555 bytes
-rw-r--r--ooo_custom_images/industrial/lc10713.pngbin0 -> 195 bytes
-rw-r--r--ooo_custom_images/industrial/missing53
-rw-r--r--ooo_custom_images/industrial/res/adrbook.pngbin0 -> 477 bytes
-rw-r--r--ooo_custom_images/industrial/res/baswatr.pngbin0 -> 492 bytes
-rw-r--r--ooo_custom_images/industrial/res/browse.pngbin0 -> 511 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/ar/lc_bold.pngbin0 -> 412 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/ar/lc_italic.pngbin0 -> 411 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/ar/lc_underline.pngbin0 -> 433 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/ar/sc_bold.pngbin0 -> 254 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/ar/sc_italic.pngbin0 -> 263 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/ar/sc_underline.pngbin0 -> 280 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/ca/lc_bold.pngbin0 -> 412 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/ca/lc_italic.pngbin0 -> 410 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/ca/lc_underline.pngbin0 -> 434 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/ca/lc_underlinedouble.pngbin0 -> 428 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/ca/sc_bold.pngbin0 -> 254 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/ca/sc_italic.pngbin0 -> 263 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/ca/sc_underline.pngbin0 -> 279 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/ca/sc_underlinedouble.pngbin0 -> 269 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/cs/lc_bold.pngbin0 -> 412 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/cs/lc_italic.pngbin0 -> 409 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/cs/lc_underline.pngbin0 -> 434 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/cs/lc_underlinedouble.pngbin0 -> 421 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/cs/sc_bold.pngbin0 -> 254 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/cs/sc_italic.pngbin0 -> 263 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/cs/sc_underline.pngbin0 -> 280 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/cs/sc_underlinedouble.pngbin0 -> 269 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/de/lc_bold.pngbin0 -> 412 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/de/lc_italic.pngbin0 -> 410 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/de/lc_underline.pngbin0 -> 437 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/de/lc_underlinedouble.pngbin0 -> 422 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/de/sc_bold.pngbin0 -> 254 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/de/sc_italic.pngbin0 -> 263 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/de/sc_underline.pngbin0 -> 281 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/de/sc_underlinedouble.pngbin0 -> 269 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/en-GB/lc_bold.pngbin0 -> 412 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/en-GB/lc_italic.pngbin0 -> 410 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/en-GB/lc_underline.pngbin0 -> 433 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/en-GB/lc_underlinedouble.pngbin0 -> 422 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/en-GB/sc_bold.pngbin0 -> 254 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/en-GB/sc_italic.pngbin0 -> 263 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/en-GB/sc_underline.pngbin0 -> 280 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/en-GB/sc_underlinedouble.pngbin0 -> 269 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/es/lc_bold.pngbin0 -> 412 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/es/lc_italic.pngbin0 -> 411 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/es/lc_underline.pngbin0 -> 434 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/es/lc_underlinedouble.pngbin0 -> 428 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/es/sc_bold.pngbin0 -> 254 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/es/sc_italic.pngbin0 -> 263 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/es/sc_underline.pngbin0 -> 280 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/es/sc_underlinedouble.pngbin0 -> 269 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/fr/lc_bold.pngbin0 -> 412 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/fr/lc_italic.pngbin0 -> 409 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/fr/lc_underline.pngbin0 -> 434 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/fr/lc_underlinedouble.pngbin0 -> 428 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/fr/sc_bold.pngbin0 -> 254 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/fr/sc_italic.pngbin0 -> 263 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/fr/sc_underline.pngbin0 -> 280 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/fr/sc_underlinedouble.pngbin0 -> 269 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/frobnicate-icons.php41
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/hu/lc_bold.pngbin0 -> 412 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/hu/lc_italic.pngbin0 -> 410 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/hu/lc_underline.pngbin0 -> 433 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/hu/lc_underlinedouble.pngbin0 -> 428 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/hu/sc_bold.pngbin0 -> 254 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/hu/sc_italic.pngbin0 -> 263 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/hu/sc_underline.pngbin0 -> 280 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/hu/sc_underlinedouble.pngbin0 -> 269 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/it/lc_bold.pngbin0 -> 413 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/it/lc_italic.pngbin0 -> 410 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/it/lc_underline.pngbin0 -> 433 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/it/lc_underlinedouble.pngbin0 -> 422 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/it/sc_bold.pngbin0 -> 254 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/it/sc_italic.pngbin0 -> 263 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/it/sc_underline.pngbin0 -> 280 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/it/sc_underlinedouble.pngbin0 -> 269 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/ja/lc_bold.pngbin0 -> 412 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/ja/lc_italic.pngbin0 -> 410 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/ja/lc_underline.pngbin0 -> 433 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/ja/lc_underlinedouble.pngbin0 -> 422 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/ja/sc_bold.pngbin0 -> 254 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/ja/sc_italic.pngbin0 -> 263 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/ja/sc_underline.pngbin0 -> 280 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/ja/sc_underlinedouble.pngbin0 -> 269 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/km/lc_bold.pngbin0 -> 412 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/km/lc_italic.pngbin0 -> 411 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/km/lc_underline.pngbin0 -> 433 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/km/lc_underlinedouble.pngbin0 -> 422 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/km/sc_bold.pngbin0 -> 254 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/km/sc_italic.pngbin0 -> 263 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/km/sc_underline.pngbin0 -> 280 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/km/sc_underlinedouble.pngbin0 -> 269 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/ko/lc_bold.pngbin0 -> 412 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/ko/lc_charfontname.pngbin0 -> 535 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/ko/lc_color.pngbin0 -> 713 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/ko/lc_drawtext.pngbin0 -> 488 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/ko/lc_fontcolor.pngbin0 -> 712 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/ko/lc_fontheight.pngbin0 -> 415 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/ko/lc_italic.pngbin0 -> 411 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/ko/lc_ordercrit.pngbin0 -> 380 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/ko/lc_outlinefont.pngbin0 -> 539 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/ko/lc_shadowed.pngbin0 -> 435 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/ko/lc_sortdown.pngbin0 -> 195 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/ko/lc_sortup.pngbin0 -> 196 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/ko/lc_strikeout.pngbin0 -> 432 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/ko/lc_text.pngbin0 -> 489 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/ko/lc_text_marquee.pngbin0 -> 553 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/ko/lc_textdirectionlefttoright.pngbin0 -> 569 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/ko/lc_textdirectiontoptobottom.pngbin0 -> 561 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/ko/lc_texttoolbox.pngbin0 -> 490 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/ko/lc_underline.pngbin0 -> 434 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/ko/lc_underlinedouble.pngbin0 -> 422 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/ko/lc_verticaltext.pngbin0 -> 477 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/ko/sc_bold.pngbin0 -> 254 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/ko/sc_charfontname.pngbin0 -> 438 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/ko/sc_color.pngbin0 -> 437 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/ko/sc_drawtext.pngbin0 -> 307 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/ko/sc_fontcolor.pngbin0 -> 438 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/ko/sc_fontheight.pngbin0 -> 286 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/ko/sc_italic.pngbin0 -> 263 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/ko/sc_ordercrit.pngbin0 -> 287 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/ko/sc_outlinefont.pngbin0 -> 250 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/ko/sc_shadowed.pngbin0 -> 301 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/ko/sc_sortdown.pngbin0 -> 185 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/ko/sc_sortup.pngbin0 -> 184 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/ko/sc_strikeout.pngbin0 -> 269 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/ko/sc_text.pngbin0 -> 307 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/ko/sc_text_marquee.pngbin0 -> 426 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/ko/sc_textdirectionlefttoright.pngbin0 -> 354 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/ko/sc_textdirectiontoptobottom.pngbin0 -> 359 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/ko/sc_texttoolbox.pngbin0 -> 307 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/ko/sc_underline.pngbin0 -> 280 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/ko/sc_underlinedouble.pngbin0 -> 269 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/ko/sc_verticaltext.pngbin0 -> 292 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_absoluterecord.pngbin0 -> 522 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_addbookmark.pngbin0 -> 536 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_adddatefield.pngbin0 -> 405 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_adddirect.pngbin0 -> 695 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_addfield.pngbin0 -> 452 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_addtable.pngbin0 -> 416 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_addwatch.pngbin0 -> 443 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_adjust.pngbin0 -> 905 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_adjust.xcf.bz2bin0 -> 2722 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_advancedmode.pngbin0 -> 675 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_alignblock.pngbin0 -> 333 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_alignbottom.pngbin0 -> 283 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_aligncenter.pngbin0 -> 541 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_aligndown.pngbin0 -> 472 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_alignhorizontalcenter.pngbin0 -> 333 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_alignleft.pngbin0 -> 338 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_alignmiddle.pngbin0 -> 553 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_alignright.pngbin0 -> 331 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_aligntop.pngbin0 -> 292 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_alignup.pngbin0 -> 511 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_alignvcenter.pngbin0 -> 326 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_alignverticalcenter.pngbin0 -> 326 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_animationeffects.pngbin0 -> 377 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_animationmode.pngbin0 -> 1307 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_animationobjects.pngbin0 -> 1140 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_apply.pngbin0 -> 1435 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_arc.pngbin0 -> 319 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_arrowshapes.chevron.pngbin0 -> 517 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_arrowshapes.chevron.svg109
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_arrowshapes.circular-arrow.pngbin0 -> 600 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_arrowshapes.circular-arrow.svg99
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_arrowshapes.corner-right-arrow.pngbin0 -> 467 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_arrowshapes.corner-right-arrow.svg99
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_arrowshapes.down-arrow-callout.pngbin0 -> 467 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_arrowshapes.down-arrow-callout.svg109
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_arrowshapes.down-arrow.pngbin0 -> 473 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_arrowshapes.down-arrow.png.pngbin0 -> 408 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_arrowshapes.down-arrow.png.svg114
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_arrowshapes.down-arrow.svg119
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_arrowshapes.left-arrow-callout.pngbin0 -> 440 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_arrowshapes.left-arrow-callout.svg119
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_arrowshapes.left-arrow.pngbin0 -> 441 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_arrowshapes.left-arrow.svg125
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_arrowshapes.left-right-arrow-callout.pngbin0 -> 506 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_arrowshapes.left-right-arrow-callout.svg181
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_arrowshapes.left-right-arrow.pngbin0 -> 512 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_arrowshapes.left-right-arrow.svg139
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_arrowshapes.notched-left-arrow.pngbin0 -> 521 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_arrowshapes.notched-left-arrow.svg125
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_arrowshapes.notched-right-arrow.pngbin0 -> 512 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_arrowshapes.notched-right-arrow.svg125
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_arrowshapes.pentagon-right.pngbin0 -> 393 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_arrowshapes.pentagon-right.svg117
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_arrowshapes.pentagon-right.xcf.bz2bin0 -> 1213 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_arrowshapes.pngbin0 -> 512 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_arrowshapes.quad-arrow-callout.pngbin0 -> 706 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_arrowshapes.quad-arrow-callout.svg119
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_arrowshapes.quad-arrow.pngbin0 -> 687 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_arrowshapes.quad-arrow.svg119
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_arrowshapes.right-arrow-callout.pngbin0 -> 489 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_arrowshapes.right-arrow-callout.svg119
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_arrowshapes.right-arrow.pngbin0 -> 472 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_arrowshapes.right-arrow.svg125
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_arrowshapes.s-sharped-arrow.pngbin0 -> 549 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_arrowshapes.s-sharped-arrow.svg129
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_arrowshapes.split-arrow.pngbin0 -> 572 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_arrowshapes.split-arrow.svg129
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_arrowshapes.split-round-arrow.pngbin0 -> 615 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_arrowshapes.split-round-arrow.svg119
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_arrowshapes.striped-right-arrow.pngbin0 -> 545 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_arrowshapes.striped-right-arrow.svg170
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_arrowshapes.up-arrow-callout.pngbin0 -> 396 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_arrowshapes.up-arrow-callout.svg175
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_arrowshapes.up-arrow.pngbin0 -> 473 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_arrowshapes.up-arrow.svg119
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_arrowshapes.up-down-arrow-callout.pngbin0 -> 524 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_arrowshapes.up-down-arrow-callout.svg182
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_arrowshapes.up-down-arrow.pngbin0 -> 526 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_arrowshapes.up-down-arrow.svg139
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_arrowshapes.up-right-arrow-callout.pngbin0 -> 610 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_arrowshapes.up-right-arrow-callout.svg165
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_arrowshapes.up-right-arrow.pngbin0 -> 569 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_arrowshapes.up-right-arrow.svg109
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_arrowshapes.up-right-down-arrow.pngbin0 -> 575 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_arrowshapes.up-right-down-arrow.svg104
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_arrowstoolbox.pngbin0 -> 191 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_autocontrolfocus.pngbin0 -> 250 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_autofilter.pngbin0 -> 277 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_autoformat.pngbin0 -> 892 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_autosum.pngbin0 -> 299 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_avmediaplayer.pngbin0 -> 907 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_backcolor.pngbin0 -> 694 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_backgroundcolor.pngbin0 -> 762 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_backgroundpatterncontroller.pngbin0 -> 1153 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_backgroundpatterncontroller.xcf.bz2bin0 -> 2494 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_backward.pngbin0 -> 481 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_basicshapes.block-arc.pngbin0 -> 511 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_basicshapes.block-arc.svg99
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_basicshapes.can.pngbin0 -> 532 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_basicshapes.can.svg147
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_basicshapes.circle-pie.pngbin0 -> 558 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_basicshapes.circle-pie.svg139
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_basicshapes.circle.pngbin0 -> 612 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_basicshapes.circle.svg138
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_basicshapes.cross.pngbin0 -> 341 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_basicshapes.cross.svg107
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_basicshapes.cube.pngbin0 -> 383 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_basicshapes.cube.svg204
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_basicshapes.diamond.pngbin0 -> 419 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_basicshapes.diamond.svg202
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_basicshapes.ellipse.pngbin0 -> 506 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_basicshapes.ellipse.svg138
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_basicshapes.frame.pngbin0 -> 297 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_basicshapes.frame.svg203
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_basicshapes.hexagon.pngbin0 -> 501 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_basicshapes.hexagon.svg213
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_basicshapes.isosceles-triangle.pngbin0 -> 456 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_basicshapes.isosceles-triangle.svg222
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_basicshapes.octagon.pngbin0 -> 481 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_basicshapes.octagon.svg193
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_basicshapes.paper.pngbin0 -> 327 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_basicshapes.paper.svg203
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_basicshapes.parallelogram.pngbin0 -> 410 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_basicshapes.parallelogram.svg222
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_basicshapes.pentagon.pngbin0 -> 543 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_basicshapes.pentagon.svg223
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_basicshapes.pngbin0 -> 419 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_basicshapes.quadrat.pngbin0 -> 272 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_basicshapes.quadrat.svg119
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_basicshapes.rectangle.pngbin0 -> 252 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_basicshapes.rectangle.svg119
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_basicshapes.right-triangle.pngbin0 -> 383 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_basicshapes.right-triangle.svg119
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_basicshapes.ring.pngbin0 -> 760 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_basicshapes.ring.svg136
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_basicshapes.round-quadrat.pngbin0 -> 338 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_basicshapes.round-quadrat.svg141
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_basicshapes.round-rectangle.pngbin0 -> 348 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_basicshapes.round-rectangle.svg141
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_basicshapes.trapezoid.pngbin0 -> 393 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_basicshapes.trapezoid.svg139
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_basicstepinto.pngbin0 -> 624 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_basicstepout.pngbin0 -> 642 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_basicstepover.pngbin0 -> 641 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_basicstop.pngbin0 -> 1302 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_beforeobject.pngbin0 -> 690 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_behindobject.pngbin0 -> 879 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_bezier_unfilled.pngbin0 -> 263 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_bezierappend.pngbin0 -> 333 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_bezierclose.pngbin0 -> 341 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_bezierconvert.pngbin0 -> 487 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_beziercutline.pngbin0 -> 580 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_bezierdelete.pngbin0 -> 583 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_bezieredge.pngbin0 -> 315 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_beziereliminatepoints.pngbin0 -> 634 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_bezierfill.pngbin0 -> 649 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_bezierinsert.pngbin0 -> 334 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_beziermove.pngbin0 -> 504 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_beziersmooth.pngbin0 -> 300 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_beziersymmetric.pngbin0 -> 283 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_bighandles.pngbin0 -> 313 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_bmpmask.pngbin0 -> 520 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_bold.pngbin0 -> 412 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_bringtofront.pngbin0 -> 572 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_browsebackward.pngbin0 -> 410 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_browseforward.pngbin0 -> 390 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_browseview.pngbin0 -> 1235 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_bullet.pngbin0 -> 558 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_bulletsandnumberingdialog.pngbin0 -> 377 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_calloutshapes.cloud-callout.pngbin0 -> 661 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_calloutshapes.cloud-callout.svg139
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_calloutshapes.line-callout-1.pngbin0 -> 334 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_calloutshapes.line-callout-1.svg124
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_calloutshapes.line-callout-2.pngbin0 -> 334 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_calloutshapes.line-callout-2.svg124
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_calloutshapes.line-callout-3.pngbin0 -> 274 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_calloutshapes.line-callout-3.svg124
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_calloutshapes.pngbin0 -> 442 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_calloutshapes.rectangular-callout.pngbin0 -> 402 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_calloutshapes.rectangular-callout.svg129
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_calloutshapes.round-callout.pngbin0 -> 618 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_calloutshapes.round-callout.svg147
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_calloutshapes.round-rectangular-callout.pngbin0 -> 447 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_calloutshapes.svg129
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_cancel.pngbin0 -> 1119 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_cellvertbottom.pngbin0 -> 225 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_cellvertcenter.pngbin0 -> 256 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_cellverttop.pngbin0 -> 236 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_centerpara.pngbin0 -> 332 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_chainframes.pngbin0 -> 405 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_changebezier.pngbin0 -> 452 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_changepolygon.pngbin0 -> 452 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_charfontname.pngbin0 -> 535 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_checkbox.pngbin0 -> 187 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_choosecontrols.pngbin0 -> 446 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_choosemacro.pngbin0 -> 257 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_choosepolygon.pngbin0 -> 638 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_circle.pngbin0 -> 817 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_circle_unfilled.pngbin0 -> 427 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_circlearc.pngbin0 -> 418 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_circlecut.pngbin0 -> 836 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_circlecut_unfilled.pngbin0 -> 453 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_circlepie.pngbin0 -> 807 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_circlepie_unfilled.pngbin0 -> 371 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_clickchangerotation.pngbin0 -> 600 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_closedoc.pngbin0 -> 159 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_closedocs.pngbin0 -> 520 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_closedocs.xcf.bz2bin0 -> 1308 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_closewin.pngbin0 -> 375 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_color.pngbin0 -> 711 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_colorsettings.pngbin0 -> 443 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_combobox.pngbin0 -> 268 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_commontaskbarvisible.pngbin0 -> 828 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_compilebasic.pngbin0 -> 521 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_cone.pngbin0 -> 793 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_config.pngbin0 -> 442 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_connector.pngbin0 -> 267 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_connectorarrowend.pngbin0 -> 280 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_connectorarrows.pngbin0 -> 259 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_connectorarrowstart.pngbin0 -> 285 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_connectorcircleend.pngbin0 -> 288 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_connectorcircles.pngbin0 -> 258 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_connectorcirclestart.pngbin0 -> 296 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_connectorcurve.pngbin0 -> 361 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_connectorcurvearrowend.pngbin0 -> 368 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_connectorcurvearrows.pngbin0 -> 354 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_connectorcurvearrowstart.pngbin0 -> 373 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_connectorcurvecircleend.pngbin0 -> 364 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_connectorcurvecircles.pngbin0 -> 336 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_connectorcurvecirclestart.pngbin0 -> 370 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_connectorline.pngbin0 -> 229 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_connectorlinearrowend.pngbin0 -> 270 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_connectorlinearrows.pngbin0 -> 272 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_connectorlinearrowstart.pngbin0 -> 264 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_connectorlinecircleend.pngbin0 -> 253 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_connectorlinecircles.pngbin0 -> 234 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_connectorlinecirclestart.pngbin0 -> 248 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_connectorlines.pngbin0 -> 271 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_connectorlinesarrowend.pngbin0 -> 274 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_connectorlinesarrows.pngbin0 -> 254 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_connectorlinesarrowstart.pngbin0 -> 281 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_connectorlinescircleend.pngbin0 -> 287 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_connectorlinescircles.pngbin0 -> 265 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_connectorlinescirclestart.pngbin0 -> 290 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_connectortoolbox.pngbin0 -> 268 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_contourdialog.pngbin0 -> 487 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_controlcodes.pngbin0 -> 312 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_controlproperties.pngbin0 -> 611 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_convertinto3d.pngbin0 -> 702 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_convertinto3dlathe.pngbin0 -> 931 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_convertinto3dlathefast.pngbin0 -> 808 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_copy.pngbin0 -> 345 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_crookrotate.pngbin0 -> 577 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_crookslant.pngbin0 -> 559 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_cube.pngbin0 -> 544 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_currencyfield.pngbin0 -> 361 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_customanimation.pngbin0 -> 1142 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_cut.pngbin0 -> 649 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_cylinder.pngbin0 -> 694 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_cyramid.pngbin0 -> 959 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_datadatapilotrun.pngbin0 -> 570 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_datafilterautofilter.pngbin0 -> 274 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_datafilterspecialfilter.pngbin0 -> 441 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_datafilterstandardfilter.pngbin0 -> 350 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_dataincolumns.pngbin0 -> 321 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_datainrows.pngbin0 -> 294 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_datefield.pngbin0 -> 406 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_dbchangedesignmode.pngbin0 -> 430 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_dbclearquery.pngbin0 -> 704 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_dbdistinctvalues.pngbin0 -> 607 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_dbformdelete.pngbin0 -> 619 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_dbformedit.pngbin0 -> 833 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_dbformopen.pngbin0 -> 775 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_dbformrename.pngbin0 -> 586 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_dbnewform.pngbin0 -> 775 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_dbnewformautopilot.pngbin0 -> 848 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_dbnewquery.pngbin0 -> 975 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_dbnewqueryautopilot.pngbin0 -> 978 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_dbnewquerysql.pngbin0 -> 590 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_dbnewreport.pngbin0 -> 959 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_dbnewreportautopilot.pngbin0 -> 1002 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_dbnewtable.pngbin0 -> 732 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_dbnewtableautopilot.pngbin0 -> 862 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_dbquerydelete.pngbin0 -> 762 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_dbqueryedit.pngbin0 -> 947 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_dbqueryopen.pngbin0 -> 781 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_dbqueryrename.pngbin0 -> 717 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_dbreportdelete.pngbin0 -> 803 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_dbreportedit.pngbin0 -> 961 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_dbreportopen.pngbin0 -> 832 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_dbreportrename.pngbin0 -> 702 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_dbtabledelete.pngbin0 -> 660 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_dbtableedit.pngbin0 -> 838 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_dbtableopen.pngbin0 -> 645 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_dbtablerename.pngbin0 -> 674 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_dbviewaliases.pngbin0 -> 399 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_dbviewfunctions.pngbin0 -> 682 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_dbviewtablenames.pngbin0 -> 364 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_decrementindent.pngbin0 -> 388 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_decrementlevel.pngbin0 -> 390 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_decrementsublevels.pngbin0 -> 412 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_defaultbullet.pngbin0 -> 360 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_defaultnumbering.pngbin0 -> 363 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_definename.pngbin0 -> 474 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_delete.pngbin0 -> 1228 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_deletecolumns.pngbin0 -> 367 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_deleterecord.pngbin0 -> 224 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_deleterows.pngbin0 -> 404 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_designerdialog.pngbin0 -> 975 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_dia.pngbin0 -> 377 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_diaauto.pngbin0 -> 377 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_diaeffect.pngbin0 -> 377 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_diagramdata.pngbin0 -> 939 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_diagramtype.pngbin0 -> 631 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_diaspeed.pngbin0 -> 377 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_diatime.pngbin0 -> 377 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_doubleclicktextedit.pngbin0 -> 851 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_draw.pngbin0 -> 882 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_draw.xcf.bz2bin0 -> 2832 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_drawcaption.pngbin0 -> 542 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_drawchart.pngbin0 -> 646 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_drawselect.pngbin0 -> 377 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_drawtext.pngbin0 -> 490 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_dsbdocumentdatasource.pngbin0 -> 485 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_dsbeditdoc.pngbin0 -> 971 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_dsbformletter.pngbin0 -> 341 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_dsbinsertcolumns.pngbin0 -> 499 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_dsbinsertcontent.pngbin0 -> 520 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_dsbrowserexplorer.pngbin0 -> 595 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_duplicatepage.pngbin0 -> 576 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_edit.pngbin0 -> 280 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_editdoc.pngbin0 -> 970 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_editglossary.pngbin0 -> 543 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_editheaderandfooter.pngbin0 -> 438 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_ellipse.pngbin0 -> 904 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_ellipse_unfilled.pngbin0 -> 375 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_ellipsecut.pngbin0 -> 828 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_ellipsecut_unfilled.pngbin0 -> 341 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_ellipsetoolbox.pngbin0 -> 904 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_entergroup.pngbin0 -> 418 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_entirecolumn.pngbin0 -> 236 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_entirerow.pngbin0 -> 241 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_euroconverter.pngbin0 -> 451 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_expandpage.pngbin0 -> 469 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_exportdirecttopdf.pngbin0 -> 960 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_exportto.pngbin0 -> 1301 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_extendedhelp.pngbin0 -> 493 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_extrusionlightingfloater.pngbin0 -> 1087 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_extrusiontoggle.pngbin0 -> 702 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_filecontrol.pngbin0 -> 1191 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_filldraft.pngbin0 -> 523 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_fillshadow.pngbin0 -> 345 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_fillstyle.pngbin0 -> 977 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_filtercrit.pngbin0 -> 352 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_firstpage.pngbin0 -> 748 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_firstrecord.pngbin0 -> 204 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_fliphorizontal.pngbin0 -> 576 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_flipvertical.pngbin0 -> 588 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_flowchartshapes.flowchart-alternate-process.pngbin0 -> 338 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_flowchartshapes.flowchart-card.pngbin0 -> 357 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_flowchartshapes.flowchart-card.svg179
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_flowchartshapes.flowchart-collate.pngbin0 -> 544 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_flowchartshapes.flowchart-collate.svg194
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_flowchartshapes.flowchart-connector.pngbin0 -> 613 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_flowchartshapes.flowchart-connector.svg138
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_flowchartshapes.flowchart-data.pngbin0 -> 467 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_flowchartshapes.flowchart-data.svg253
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_flowchartshapes.flowchart-decision.pngbin0 -> 444 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_flowchartshapes.flowchart-delay.pngbin0 -> 490 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_flowchartshapes.flowchart-delay.svg199
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_flowchartshapes.flowchart-direct-access-storage.pngbin0 -> 547 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_flowchartshapes.flowchart-direct-access-storage.svg157
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_flowchartshapes.flowchart-display.pngbin0 -> 500 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_flowchartshapes.flowchart-display.svg152
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_flowchartshapes.flowchart-document.pngbin0 -> 405 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_flowchartshapes.flowchart-document.svg110
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_flowchartshapes.flowchart-extract.pngbin0 -> 456 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_flowchartshapes.flowchart-internal-storage.pngbin0 -> 332 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_flowchartshapes.flowchart-internal-storage.svg131
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_flowchartshapes.flowchart-magnetic-disk.pngbin0 -> 532 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_flowchartshapes.flowchart-manual-input.pngbin0 -> 386 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_flowchartshapes.flowchart-manual-input.svg120
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_flowchartshapes.flowchart-manual-operation.pngbin0 -> 479 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_flowchartshapes.flowchart-manual-operation.svg246
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_flowchartshapes.flowchart-merge.pngbin0 -> 497 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_flowchartshapes.flowchart-merge.svg222
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_flowchartshapes.flowchart-multidocument.pngbin0 -> 410 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_flowchartshapes.flowchart-multidocument.svg138
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_flowchartshapes.flowchart-off-page-connector.pngbin0 -> 382 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_flowchartshapes.flowchart-off-page-connector.svg118
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_flowchartshapes.flowchart-or.pngbin0 -> 649 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_flowchartshapes.flowchart-or.svg142
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_flowchartshapes.flowchart-predefined-process.pngbin0 -> 322 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_flowchartshapes.flowchart-predefined-process.svg136
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_flowchartshapes.flowchart-preparation.pngbin0 -> 502 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_flowchartshapes.flowchart-process.pngbin0 -> 240 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_flowchartshapes.flowchart-process.svg126
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_flowchartshapes.flowchart-punched-tape.pngbin0 -> 548 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_flowchartshapes.flowchart-punched-tape.svg130
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_flowchartshapes.flowchart-sequential-access.pngbin0 -> 599 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_flowchartshapes.flowchart-sequential-access.svg130
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_flowchartshapes.flowchart-sort.pngbin0 -> 453 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_flowchartshapes.flowchart-sort.svg207
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_flowchartshapes.flowchart-stored-data.pngbin0 -> 454 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_flowchartshapes.flowchart-stored-data.svg120
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_flowchartshapes.flowchart-summing-junction.pngbin0 -> 680 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_flowchartshapes.flowchart-summing-junction.svg142
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_flowchartshapes.flowchart-terminator.pngbin0 -> 426 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_flowchartshapes.flowchart-terminator.svg120
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_flowchartshapes.pngbin0 -> 332 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_flowchartshapes.svg131
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_fontcolor.pngbin0 -> 712 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_fontdialog.pngbin0 -> 811 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_fontheight.pngbin0 -> 415 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_fontwork.pngbin0 -> 1056 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_fontworkgalleryfloater.pngbin0 -> 623 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_fontworkshapetype.fontwork-arch-down-curve.pngbin0 -> 510 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_fontworkshapetype.fontwork-arch-down-curve.svg99
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_fontworkshapetype.fontwork-arch-down-pour.pngbin0 -> 512 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_fontworkshapetype.fontwork-arch-down-pour.svg99
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_fontworkshapetype.fontwork-arch-left-curve.pngbin0 -> 514 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_fontworkshapetype.fontwork-arch-left-curve.svg99
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_fontworkshapetype.fontwork-arch-left-pour.pngbin0 -> 533 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_fontworkshapetype.fontwork-arch-left-pour.svg99
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_fontworkshapetype.fontwork-arch-right-curve.pngbin0 -> 515 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_fontworkshapetype.fontwork-arch-right-curve.svg99
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_fontworkshapetype.fontwork-arch-right-pour.pngbin0 -> 560 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_fontworkshapetype.fontwork-arch-right-pour.svg99
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_fontworkshapetype.fontwork-arch-up-curve.pngbin0 -> 508 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_fontworkshapetype.fontwork-arch-up-curve.svg99
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_fontworkshapetype.fontwork-arch-up-pour.pngbin0 -> 511 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_fontworkshapetype.fontwork-arch-up-pour.svg99
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_fontworkshapetype.fontwork-chevron-down.pngbin0 -> 521 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_fontworkshapetype.fontwork-chevron-down.svg109
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_fontworkshapetype.fontwork-chevron-up.pngbin0 -> 529 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_fontworkshapetype.fontwork-chevron-up.svg109
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_fontworkshapetype.fontwork-circle-curve.pngbin0 -> 760 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_fontworkshapetype.fontwork-circle-pour.pngbin0 -> 753 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_fontworkshapetype.fontwork-circle-pour.svg138
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_fontworkshapetype.fontwork-curve-down.pngbin0 -> 527 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_fontworkshapetype.fontwork-curve-down.svg109
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_fontworkshapetype.fontwork-curve-up.pngbin0 -> 532 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_fontworkshapetype.fontwork-curve-up.svg109
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_fontworkshapetype.fontwork-fade-down.pngbin0 -> 480 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_fontworkshapetype.fontwork-fade-down.svg246
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_fontworkshapetype.fontwork-fade-left.pngbin0 -> 485 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_fontworkshapetype.fontwork-fade-left.svg243
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_fontworkshapetype.fontwork-fade-right.pngbin0 -> 504 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_fontworkshapetype.fontwork-fade-right.svg243
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_fontworkshapetype.fontwork-fade-up-and-left.pngbin0 -> 499 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_fontworkshapetype.fontwork-fade-up-and-left.svg243
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_fontworkshapetype.fontwork-fade-up-and-right.pngbin0 -> 480 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_fontworkshapetype.fontwork-fade-up-and-right.svg243
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_fontworkshapetype.fontwork-fade-up.pngbin0 -> 477 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_fontworkshapetype.fontwork-fade-up.svg243
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_fontworkshapetype.fontwork-inflate.pngbin0 -> 475 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_fontworkshapetype.fontwork-inflate.svg129
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_fontworkshapetype.fontwork-open-circle-curve.pngbin0 -> 736 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_fontworkshapetype.fontwork-open-circle-curve.svg137
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_fontworkshapetype.fontwork-open-circle-pour.pngbin0 -> 723 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_fontworkshapetype.fontwork-open-circle-pour.svg139
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_fontworkshapetype.fontwork-plain-text.pngbin0 -> 208 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_fontworkshapetype.fontwork-plain-text.svg259
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_fontworkshapetype.fontwork-slant-down.pngbin0 -> 518 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_fontworkshapetype.fontwork-slant-down.svg243
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_fontworkshapetype.fontwork-slant-up.pngbin0 -> 508 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_fontworkshapetype.fontwork-slant-up.svg243
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_fontworkshapetype.fontwork-stop.pngbin0 -> 481 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_fontworkshapetype.fontwork-triangle-down.pngbin0 -> 497 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_fontworkshapetype.fontwork-triangle-up.pngbin0 -> 456 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_fontworkshapetype.fontwork-wave.pngbin0 -> 548 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_fontworkshapetypes.pngbin0 -> 485 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_formatarea.pngbin0 -> 1110 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_formatgroup.pngbin0 -> 391 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_formatline.pngbin0 -> 974 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_formatpaintbrush.pngbin0 -> 892 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_formattedfield.pngbin0 -> 257 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_formatungroup.pngbin0 -> 329 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_formdesigntools.pngbin0 -> 322 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_formelcursor.pngbin0 -> 250 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_formfilter.pngbin0 -> 523 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_formfiltered.pngbin0 -> 513 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_formfilterexecute.pngbin0 -> 350 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_formfilternavigator.pngbin0 -> 645 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_formproperties.pngbin0 -> 905 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_forward.pngbin0 -> 518 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_framedialog.pngbin0 -> 425 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_framelinecolor.pngbin0 -> 492 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_freeline.pngbin0 -> 908 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_freeline_unfilled.pngbin0 -> 558 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_fullscreen.pngbin0 -> 612 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_gallery.pngbin0 -> 968 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_glueeditmode.pngbin0 -> 967 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_glueescapedirectionbottom.pngbin0 -> 242 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_glueescapedirectionleft.pngbin0 -> 222 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_glueescapedirectionright.pngbin0 -> 222 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_glueescapedirectiontop.pngbin0 -> 247 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_gluehorzaligncenter.pngbin0 -> 185 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_gluehorzalignleft.pngbin0 -> 190 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_gluehorzalignright.pngbin0 -> 193 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_glueinsertpoint.pngbin0 -> 410 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_gluepercent.pngbin0 -> 637 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_gluevertalignbottom.pngbin0 -> 186 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_gluevertaligncenter.pngbin0 -> 169 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_gluevertaligntop.pngbin0 -> 186 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_goalseekdialog.pngbin0 -> 561 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_gotoendofdoc.pngbin0 -> 754 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_gotostartofdoc.pngbin0 -> 748 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_grafattrcrop.pngbin0 -> 292 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_grafblue.pngbin0 -> 447 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_grafcontrast.pngbin0 -> 493 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_grafgamma.pngbin0 -> 350 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_grafgreen.pngbin0 -> 431 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_grafinvert.pngbin0 -> 244 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_grafluminance.pngbin0 -> 503 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_grafmode.pngbin0 -> 805 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_grafmode.xcf.bz2bin0 -> 1667 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_grafred.pngbin0 -> 443 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_graftransparence.pngbin0 -> 781 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_graphic.pngbin0 -> 479 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_graphicdraft.pngbin0 -> 506 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_graphicfilterinvert.pngbin0 -> 244 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_graphicfiltermosaic.pngbin0 -> 256 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_graphicfilterpopart.pngbin0 -> 688 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_graphicfilterposter.pngbin0 -> 770 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_graphicfilterrelief.pngbin0 -> 261 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_graphicfilterremovenoise.pngbin0 -> 886 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_graphicfiltersepia.pngbin0 -> 1022 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_graphicfiltersharpen.pngbin0 -> 1020 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_graphicfiltersmooth.pngbin0 -> 344 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_graphicfiltersobel.pngbin0 -> 492 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_graphicfiltersolarize.pngbin0 -> 723 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_graphicfiltertoolbox.pngbin0 -> 854 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_grid.pngbin0 -> 331 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_griduse.pngbin0 -> 447 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_gridvisible.pngbin0 -> 88 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_group.pngbin0 -> 390 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_groupbox.pngbin0 -> 137 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_grow.pngbin0 -> 426 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_halfsphere.pngbin0 -> 878 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_handlesdraft.pngbin0 -> 313 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_help.pngbin0 -> 1446 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_helpbookmark.pngbin0 -> 1034 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_helperdialog.pngbin0 -> 902 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_helpindex.pngbin0 -> 1501 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_helplinesmove.pngbin0 -> 191 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_helplinesuse.pngbin0 -> 410 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_helplinesvisible.pngbin0 -> 216 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_helpmenu.pngbin0 -> 652 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_helpsearch.pngbin0 -> 1001 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_helpzoomin.pngbin0 -> 578 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_helpzoomout.pngbin0 -> 579 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_hfixedline.pngbin0 -> 129 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_hideslide.pngbin0 -> 392 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_hscrollbar.pngbin0 -> 191 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_hyperlinkdialog.pngbin0 -> 1300 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_hyphenate.pngbin0 -> 673 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_hyphenation.pngbin0 -> 673 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_imagebutton.pngbin0 -> 379 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_imagecontrol.pngbin0 -> 860 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_imagemapdialog.pngbin0 -> 620 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_importfromfile.pngbin0 -> 812 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_incrementindent.pngbin0 -> 377 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_incrementlevel.pngbin0 -> 410 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_incrementsublevels.pngbin0 -> 415 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_inscellsctrl.pngbin0 -> 448 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_insertannotation.pngbin0 -> 1220 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_insertapplet.pngbin0 -> 926 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_insertauthorfield.pngbin0 -> 1033 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_insertavmedia.pngbin0 -> 695 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_insertbookmark.pngbin0 -> 536 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_insertcaptiondialog.pngbin0 -> 486 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_insertcellsdown.pngbin0 -> 418 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_insertcellsright.pngbin0 -> 402 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_insertcolumns.pngbin0 -> 435 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_insertctrl.pngbin0 -> 724 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_insertcurrencyfield.pngbin0 -> 357 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_insertdatefield.pngbin0 -> 405 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_insertdoc.pngbin0 -> 985 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_insertdraw.pngbin0 -> 946 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_insertedit.pngbin0 -> 280 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_insertendnote.pngbin0 -> 533 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_insertfield.pngbin0 -> 499 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_insertfieldctrl.pngbin0 -> 724 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_insertfilecontrol.pngbin0 -> 1191 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_insertfixedtext.pngbin0 -> 258 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_insertfootnote.pngbin0 -> 596 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_insertformattedfield.pngbin0 -> 257 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_insertformula.pngbin0 -> 683 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_insertframe.pngbin0 -> 258 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_insertframeinteract.pngbin0 -> 199 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_insertframeinteractnocolumns.pngbin0 -> 216 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_insertgraphic.pngbin0 -> 480 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_inserthyperlink.pngbin0 -> 1115 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_insertimagecontrol.pngbin0 -> 860 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_insertindexesentry.pngbin0 -> 391 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_insertlistbox.pngbin0 -> 315 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_insertmath.pngbin0 -> 411 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_insertneutralparagraph.pngbin0 -> 417 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_insertnumericfield.pngbin0 -> 205 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_insertobjctrl.pngbin0 -> 872 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_insertobject.pngbin0 -> 873 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_insertobjectchart.pngbin0 -> 647 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_insertobjectdialog.pngbin0 -> 874 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_insertobjectfloatingframe.pngbin0 -> 289 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_insertobjectstarmath.pngbin0 -> 411 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_insertpage.pngbin0 -> 644 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_insertpagecountfield.pngbin0 -> 928 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_insertpagenumberfield.pngbin0 -> 840 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_insertpatternfield.pngbin0 -> 646 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_insertplugin.pngbin0 -> 547 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_insertpushbutton.pngbin0 -> 194 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_insertreferencefield.pngbin0 -> 569 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_insertrows.pngbin0 -> 405 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_insertsection.pngbin0 -> 638 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_insertsound.pngbin0 -> 407 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_insertspreadsheet.pngbin0 -> 331 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_insertsymbol.pngbin0 -> 558 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_inserttable.pngbin0 -> 331 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_inserttextframe.pngbin0 -> 255 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_inserttimefield.pngbin0 -> 622 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_inserttitlefield.pngbin0 -> 342 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_inserttopicfield.pngbin0 -> 765 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_insertvideo.pngbin0 -> 314 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_insobjctrl.pngbin0 -> 873 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_interactivegradient.pngbin0 -> 632 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_interactivetransparence.pngbin0 -> 780 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_italic.pngbin0 -> 410 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_justifypara.pngbin0 -> 332 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_label.pngbin0 -> 260 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_lastpage.pngbin0 -> 754 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_lastrecord.pngbin0 -> 196 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_leaveallgroups.pngbin0 -> 426 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_leavegroup.pngbin0 -> 426 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_leftpara.pngbin0 -> 335 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_line.pngbin0 -> 149 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_line_diagonal.pngbin0 -> 194 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_linearrowcircle.pngbin0 -> 252 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_linearrowend.pngbin0 -> 191 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_linearrows.pngbin0 -> 238 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_linearrowsquare.pngbin0 -> 234 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_linearrowstart.pngbin0 -> 190 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_linecirclearrow.pngbin0 -> 254 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_linedraft.pngbin0 -> 324 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_lineendstyle.pngbin0 -> 437 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_linesquarearrow.pngbin0 -> 234 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_linestyle.pngbin0 -> 269 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_linetoolbox.pngbin0 -> 908 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_linewidth.pngbin0 -> 975 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_listbox.pngbin0 -> 316 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_loadbasic.pngbin0 -> 1099 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_macrorecorder.pngbin0 -> 715 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_managebreakpoints.pngbin0 -> 968 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_matchgroup.pngbin0 -> 650 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_measureline.pngbin0 -> 292 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_mergecells.pngbin0 -> 214 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_mergedialog.pngbin0 -> 1013 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_mergedialog.xcf.bz2bin0 -> 2235 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_mirror.pngbin0 -> 1033 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_modifypage.pngbin0 -> 794 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_moduledialog.pngbin0 -> 410 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_morecontrols.pngbin0 -> 533 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_movedown.pngbin0 -> 411 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_movedownsubitems.pngbin0 -> 439 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_moveup.pngbin0 -> 509 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_moveupsubitems.pngbin0 -> 443 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_navigationbar.pngbin0 -> 221 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_navigator.pngbin0 -> 584 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_newarrangement.pngbin0 -> 474 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_newdoc.pngbin0 -> 1042 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_newrecord.pngbin0 -> 436 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_nextpage.pngbin0 -> 595 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_nextrecord.pngbin0 -> 165 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_no.pngbin0 -> 1479 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_numberformatcurrency.pngbin0 -> 356 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_numberformatdate.pngbin0 -> 405 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_numberformatdecdecimals.pngbin0 -> 240 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_numberformatincdecimals.pngbin0 -> 202 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_numberformatpercent.pngbin0 -> 178 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_numberformatscientific.pngbin0 -> 703 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_numberformatstandard.pngbin0 -> 286 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_numberingstart.pngbin0 -> 620 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_numericfield.pngbin0 -> 205 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_objectalign.pngbin0 -> 480 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_objectalignleft.pngbin0 -> 478 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_objectalignright.pngbin0 -> 446 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_objectcatalog.pngbin0 -> 433 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_objectposition.pngbin0 -> 292 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_objectposition.svg162
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_objects3dtoolbox.pngbin0 -> 545 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_ok.pngbin0 -> 1015 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_open.pngbin0 -> 1031 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_openreadonly.pngbin0 -> 909 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_openurl.pngbin0 -> 1415 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_optimizetable.pngbin0 -> 832 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_ordercrit.pngbin0 -> 380 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_outlinebullet.pngbin0 -> 360 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_outlinecollapse.pngbin0 -> 284 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_outlinecollapseall.pngbin0 -> 207 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_outlinedown.pngbin0 -> 411 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_outlineexpand.pngbin0 -> 307 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_outlineexpandall.pngbin0 -> 415 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_outlinefont.pngbin0 -> 539 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_outlineformat.pngbin0 -> 457 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_outlineleft.pngbin0 -> 410 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_outlineright.pngbin0 -> 390 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_outlineup.pngbin0 -> 509 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_pagedown.pngbin0 -> 595 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_pageup.pngbin0 -> 579 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_paragraphdialog.pngbin0 -> 497 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_paralefttoright.pngbin0 -> 376 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_pararighttoleft.pngbin0 -> 383 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_paraspacedecrease.pngbin0 -> 526 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_paraspaceincrease.pngbin0 -> 509 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_paste.pngbin0 -> 730 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_patternfield.pngbin0 -> 648 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_pickthrough.pngbin0 -> 563 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_pie.pngbin0 -> 812 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_pie_unfilled.pngbin0 -> 337 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_pluginsactive.pngbin0 -> 550 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_polygon.pngbin0 -> 553 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_polygon_diagonal.pngbin0 -> 376 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_polygon_diagonal_unfilled.pngbin0 -> 122 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_polygon_unfilled.pngbin0 -> 163 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_presentation.pngbin0 -> 795 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_presentationlayout.pngbin0 -> 814 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_previewprintoptions.pngbin0 -> 1075 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_previewzoom.pngbin0 -> 572 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_previouspage.pngbin0 -> 579 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_prevrecord.pngbin0 -> 162 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_print.pngbin0 -> 941 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_printdefault.pngbin0 -> 941 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_printersetup.pngbin0 -> 883 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_printlayout.pngbin0 -> 862 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_printpagepreview.pngbin0 -> 945 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_printpreview.pngbin0 -> 978 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_progressbar.pngbin0 -> 180 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_pushbutton.pngbin0 -> 194 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_quickedit.pngbin0 -> 375 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_quit.pngbin0 -> 766 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_radiobutton.pngbin0 -> 261 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_recsave.pngbin0 -> 953 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_recsearch.pngbin0 -> 1000 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_rect.pngbin0 -> 360 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_rect_rounded.pngbin0 -> 482 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_rect_rounded_unfilled.pngbin0 -> 163 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_rect_unfilled.pngbin0 -> 100 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_rectangletoolbox.pngbin0 -> 360 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_recundo.pngbin0 -> 584 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_redo.pngbin0 -> 573 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_refresh.pngbin0 -> 916 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_rehearsetimings.pngbin0 -> 916 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_reload.pngbin0 -> 1245 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_removebullets.pngbin0 -> 323 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_removefilter.pngbin0 -> 649 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_removefiltersort.pngbin0 -> 421 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_repeat.pngbin0 -> 501 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_reverseorder.pngbin0 -> 418 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_rightpara.pngbin0 -> 332 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_runbasic.pngbin0 -> 540 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_save.pngbin0 -> 934 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_saveas.pngbin0 -> 1184 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_saveastemplate.pngbin0 -> 1118 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_savebasicas.pngbin0 -> 1184 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_sbabrwinsert.pngbin0 -> 499 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_sbaexecutesql.pngbin0 -> 949 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_sbanativesql.pngbin0 -> 341 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_scaletext.pngbin0 -> 793 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_scrollbar.pngbin0 -> 199 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_searchdialog.pngbin0 -> 1000 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_selectall.pngbin0 -> 635 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_selectmode.pngbin0 -> 377 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_selectobject.pngbin0 -> 377 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_selecttable.pngbin0 -> 220 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_sendfax.pngbin0 -> 1070 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_sendmail.pngbin0 -> 301 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_sendtoback.pngbin0 -> 513 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_setborderstyle.pngbin0 -> 285 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_setdocumentproperties.pngbin0 -> 1041 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_setobjecttobackground.pngbin0 -> 795 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_setobjecttoforeground.pngbin0 -> 947 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_shadowcursor.pngbin0 -> 268 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_shadowed.pngbin0 -> 435 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_shear.pngbin0 -> 544 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_shell3d.pngbin0 -> 852 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_showbookview.pngbin0 -> 402 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_showbrowser.pngbin0 -> 611 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_showfmexplorer.pngbin0 -> 847 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_showmultiplepages.pngbin0 -> 272 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_showpropbrowser.pngbin0 -> 904 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_showtwopages.pngbin0 -> 300 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_shrink.pngbin0 -> 371 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_snapborder.pngbin0 -> 854 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_snapframe.pngbin0 -> 669 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_snappoints.pngbin0 -> 618 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_solidcreate.pngbin0 -> 847 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_sortascending.pngbin0 -> 196 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_sortdescending.pngbin0 -> 195 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_sortdown.pngbin0 -> 195 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_sortup.pngbin0 -> 196 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_sourceview.pngbin0 -> 1073 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_spacepara1.pngbin0 -> 291 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_spacepara15.pngbin0 -> 291 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_spacepara2.pngbin0 -> 289 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_spelldialog.pngbin0 -> 557 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_spelling.pngbin0 -> 556 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_spellonline.pngbin0 -> 618 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_sphere.pngbin0 -> 1111 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_splitcell.pngbin0 -> 232 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_square.pngbin0 -> 281 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_square_rounded.pngbin0 -> 494 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_square_rounded_unfilled.pngbin0 -> 166 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_square_unfilled.pngbin0 -> 103 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_starchartdialog.pngbin0 -> 646 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_starshapes.bang.pngbin0 -> 756 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_starshapes.bang.svg223
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_starshapes.concave-star6.pngbin0 -> 656 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_starshapes.concave-star6.svg275
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_starshapes.doorplate.pngbin0 -> 485 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_starshapes.doorplate.svg243
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_starshapes.horizontal-scroll.pngbin0 -> 405 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_starshapes.horizontal-scroll.svg169
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_starshapes.pngbin0 -> 596 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_starshapes.signet.pngbin0 -> 652 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_starshapes.signet.svg175
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_starshapes.star12.pngbin0 -> 625 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_starshapes.star12.svg294
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_starshapes.star24.pngbin0 -> 734 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_starshapes.star24.svg294
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_starshapes.star4.pngbin0 -> 500 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_starshapes.star4.svg276
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_starshapes.star5.pngbin0 -> 597 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_starshapes.star5.svg276
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_starshapes.star6.pngbin0 -> 652 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_starshapes.star6.svg276
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_starshapes.star8.pngbin0 -> 594 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_starshapes.star8.svg294
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_starshapes.vertical-scroll.pngbin0 -> 408 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_starshapes.vertical-scroll.svg154
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_strikeout.pngbin0 -> 432 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_styleapply.pngbin0 -> 1109 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_stylenewbyexample.pngbin0 -> 292 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_styleupdatebyexample.pngbin0 -> 220 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_subscript.pngbin0 -> 413 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_superscript.pngbin0 -> 408 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_switchcontroldesignmode.pngbin0 -> 691 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_switchxformsdesignmode.pngbin0 -> 689 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_symbolcatalogue.pngbin0 -> 558 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_symbolshapes.brace-pair.pngbin0 -> 553 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_symbolshapes.brace-pair.svg229
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_symbolshapes.bracket-pair.pngbin0 -> 338 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_symbolshapes.bracket-pair.svg224
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_symbolshapes.cloud.pngbin0 -> 626 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_symbolshapes.cloud.svg147
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_symbolshapes.diamond-bevel.pngbin0 -> 496 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_symbolshapes.diamond-bevel.svg198
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_symbolshapes.flower.pngbin0 -> 792 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_symbolshapes.flower.svg193
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_symbolshapes.forbidden.pngbin0 -> 856 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_symbolshapes.forbidden.svg354
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_symbolshapes.heart.pngbin0 -> 614 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_symbolshapes.heart.svg194
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_symbolshapes.left-brace.pngbin0 -> 367 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_symbolshapes.left-brace.svg219
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_symbolshapes.left-bracket.pngbin0 -> 233 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_symbolshapes.left-bracket.svg206
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_symbolshapes.lightning.pngbin0 -> 636 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_symbolshapes.lightning.svg204
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_symbolshapes.moon.pngbin0 -> 559 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_symbolshapes.moon.svg211
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_symbolshapes.octagon-bevel.pngbin0 -> 625 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_symbolshapes.octagon-bevel.svg192
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_symbolshapes.pngbin0 -> 682 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_symbolshapes.puzzle.pngbin0 -> 750 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_symbolshapes.puzzle.svg194
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_symbolshapes.quad-bevel.pngbin0 -> 351 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_symbolshapes.quad-bevel.svg123
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_symbolshapes.right-brace.pngbin0 -> 373 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_symbolshapes.right-brace.svg219
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_symbolshapes.right-bracket.pngbin0 -> 229 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_symbolshapes.right-bracket.svg206
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_symbolshapes.smiley.pngbin0 -> 682 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_symbolshapes.sun.pngbin0 -> 625 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_symbolshapes.sun.svg340
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/lc_symbolshapes.svg230
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_tabdialog.pngbin0 -> 380 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_tablemodefix.pngbin0 -> 471 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_tablemodefixprop.pngbin0 -> 466 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_tablemodevariable.pngbin0 -> 503 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_tablesort.pngbin0 -> 196 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_testmode.pngbin0 -> 751 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_text.pngbin0 -> 489 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_text_marquee.pngbin0 -> 553 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_textdirectionlefttoright.pngbin0 -> 570 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_textdirectiontoptobottom.pngbin0 -> 562 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_textdraft.pngbin0 -> 273 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_textfittosizetool.pngbin0 -> 248 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_texttoolbox.pngbin0 -> 489 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_thesaurus.pngbin0 -> 672 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_thesaurusdialog.pngbin0 -> 671 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_timefield.pngbin0 -> 623 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_toggleanchortype.pngbin0 -> 513 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_toggleaxisdescr.pngbin0 -> 205 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_toggleaxistitle.pngbin0 -> 258 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_togglebreakpoint.pngbin0 -> 797 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_togglegridhorizontal.pngbin0 -> 255 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_togglegridvertical.pngbin0 -> 243 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_togglelegend.pngbin0 -> 478 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_togglemergecells.pngbin0 -> 684 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_toggleobjectbeziermode.pngbin0 -> 240 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_toggleobjectrotatemode.pngbin0 -> 675 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_toggletitle.pngbin0 -> 308 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_torus.pngbin0 -> 1063 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_transformdialog.pngbin0 -> 207 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_underline.pngbin0 -> 433 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_underlinedouble.pngbin0 -> 422 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_undo.pngbin0 -> 522 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_ungroup.pngbin0 -> 328 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_unhainframes.pngbin0 -> 806 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_usewizards.pngbin0 -> 980 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_verticalcaption.pngbin0 -> 600 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_verticaltext.pngbin0 -> 477 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_verticaltextfittosizetool.pngbin0 -> 251 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_vfixedline.pngbin0 -> 109 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_view100.pngbin0 -> 581 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_viewdatasourcebrowser.pngbin0 -> 939 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_viewformasgrid.pngbin0 -> 379 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_vscrollbar.pngbin0 -> 199 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_window3d.pngbin0 -> 993 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_wrapcontour.pngbin0 -> 333 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_wrapideal.pngbin0 -> 242 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_wrapleft.pngbin0 -> 221 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_wrapoff.pngbin0 -> 222 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_wrapon.pngbin0 -> 227 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_wrapright.pngbin0 -> 225 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_wrapthrough.pngbin0 -> 243 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_xlinecolor.pngbin0 -> 975 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_xlinestyle.pngbin0 -> 976 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_yes.pngbin0 -> 1443 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_zoom.pngbin0 -> 572 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_zoom100percent.pngbin0 -> 580 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_zoomin.pngbin0 -> 579 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_zoomminus.pngbin0 -> 578 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_zoomnext.pngbin0 -> 1097 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_zoomobjects.pngbin0 -> 587 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_zoomoptimal.pngbin0 -> 586 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_zoomout.pngbin0 -> 578 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_zoompage.pngbin0 -> 1110 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_zoompagewidth.pngbin0 -> 1107 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_zoompanning.pngbin0 -> 1291 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_zoomplus.pngbin0 -> 579 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_zoomprevious.pngbin0 -> 1038 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/lc_zoomtoolbox.pngbin0 -> 574 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/nl/lc_bold.pngbin0 -> 412 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/nl/lc_italic.pngbin0 -> 411 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/nl/lc_underline.pngbin0 -> 431 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/nl/lc_underlinedouble.pngbin0 -> 428 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/nl/sc_bold.pngbin0 -> 254 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/nl/sc_italic.pngbin0 -> 263 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/nl/sc_underline.pngbin0 -> 280 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/nl/sc_underlinedouble.pngbin0 -> 269 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/pl/lc_bold.pngbin0 -> 412 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/pl/lc_italic.pngbin0 -> 410 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/pl/lc_underline.pngbin0 -> 433 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/pl/lc_underlinedouble.pngbin0 -> 422 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/pl/sc_bold.pngbin0 -> 254 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/pl/sc_italic.pngbin0 -> 263 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/pl/sc_underline.pngbin0 -> 280 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/pl/sc_underlinedouble.pngbin0 -> 269 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/pt-BR/lc_bold.pngbin0 -> 413 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/pt-BR/lc_italic.pngbin0 -> 411 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/pt-BR/lc_underline.pngbin0 -> 433 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/pt-BR/lc_underlinedouble.pngbin0 -> 422 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/pt-BR/sc_bold.pngbin0 -> 254 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/pt-BR/sc_italic.pngbin0 -> 263 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/pt-BR/sc_underline.pngbin0 -> 280 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/pt-BR/sc_underlinedouble.pngbin0 -> 269 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/pt/lc_bold.pngbin0 -> 412 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/pt/lc_italic.pngbin0 -> 410 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/pt/lc_underline.pngbin0 -> 433 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/pt/lc_underlinedouble.pngbin0 -> 428 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/pt/sc_bold.pngbin0 -> 254 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/pt/sc_italic.pngbin0 -> 263 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/pt/sc_underline.pngbin0 -> 279 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/pt/sc_underlinedouble.pngbin0 -> 269 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/ru/lc_bold.pngbin0 -> 412 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/ru/lc_italic.pngbin0 -> 410 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/ru/lc_underline.pngbin0 -> 433 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/ru/lc_underlinedouble.pngbin0 -> 428 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/ru/sc_bold.pngbin0 -> 254 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/ru/sc_italic.pngbin0 -> 263 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/ru/sc_underline.pngbin0 -> 280 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/ru/sc_underlinedouble.pngbin0 -> 269 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_absoluterecord.pngbin0 -> 327 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_addbookmark.pngbin0 -> 477 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_adddatefield.pngbin0 -> 288 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_adddirect.pngbin0 -> 270 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_addfield.pngbin0 -> 295 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_addtable.pngbin0 -> 317 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_addwatch.pngbin0 -> 153 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_adjust.pngbin0 -> 711 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_advancedmode.pngbin0 -> 339 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_alignblock.pngbin0 -> 217 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_alignbottom.pngbin0 -> 172 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_aligncenter.pngbin0 -> 254 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_aligndown.pngbin0 -> 244 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_alignhorizontalcenter.pngbin0 -> 215 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_alignleft.pngbin0 -> 216 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_alignmiddle.pngbin0 -> 235 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_alignright.pngbin0 -> 218 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_aligntop.pngbin0 -> 175 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_alignup.pngbin0 -> 245 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_alignvcenter.pngbin0 -> 178 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_alignverticalcenter.pngbin0 -> 178 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_animationeffects.pngbin0 -> 205 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_animationmode.pngbin0 -> 702 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_animationobjects.pngbin0 -> 442 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_apply.pngbin0 -> 928 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_arc.pngbin0 -> 217 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_arrowshapes.chevron.pngbin0 -> 349 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_arrowshapes.circular-arrow.pngbin0 -> 362 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_arrowshapes.corner-right-arrow.pngbin0 -> 320 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_arrowshapes.down-arrow-callout.pngbin0 -> 333 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_arrowshapes.down-arrow.pngbin0 -> 315 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_arrowshapes.down-arrow.png.pngbin0 -> 292 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_arrowshapes.left-arrow-callout.pngbin0 -> 332 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_arrowshapes.left-arrow.pngbin0 -> 304 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_arrowshapes.left-right-arrow-callout.pngbin0 -> 323 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_arrowshapes.left-right-arrow.pngbin0 -> 328 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_arrowshapes.notched-left-arrow.pngbin0 -> 330 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_arrowshapes.notched-right-arrow.pngbin0 -> 334 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_arrowshapes.pentagon-right.pngbin0 -> 297 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_arrowshapes.pngbin0 -> 328 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_arrowshapes.quad-arrow-callout.pngbin0 -> 430 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_arrowshapes.quad-arrow.pngbin0 -> 421 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_arrowshapes.right-arrow-callout.pngbin0 -> 348 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_arrowshapes.right-arrow.pngbin0 -> 319 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_arrowshapes.s-sharped-arrow.pngbin0 -> 365 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_arrowshapes.split-arrow.pngbin0 -> 397 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_arrowshapes.split-round-arrow.pngbin0 -> 377 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_arrowshapes.striped-right-arrow.pngbin0 -> 368 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_arrowshapes.up-arrow-callout.pngbin0 -> 284 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_arrowshapes.up-arrow.pngbin0 -> 317 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_arrowshapes.up-down-arrow-callout.pngbin0 -> 349 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_arrowshapes.up-down-arrow.pngbin0 -> 334 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_arrowshapes.up-right-arrow-callout.pngbin0 -> 408 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_arrowshapes.up-right-arrow.pngbin0 -> 374 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_arrowshapes.up-right-down-arrow.pngbin0 -> 381 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_arrowstoolbox.pngbin0 -> 124 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_autocontrolfocus.pngbin0 -> 198 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_autofilter.pngbin0 -> 196 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_autoformat.pngbin0 -> 554 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_autosum.pngbin0 -> 124 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_avmediaplayer.pngbin0 -> 348 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_backcolor.pngbin0 -> 414 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_backgroundcolor.pngbin0 -> 456 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_backgroundpatterncontroller.pngbin0 -> 845 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_backward.pngbin0 -> 311 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_basicshapes.block-arc.pngbin0 -> 334 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_basicshapes.can.pngbin0 -> 340 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_basicshapes.circle-pie.pngbin0 -> 348 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_basicshapes.circle.pngbin0 -> 373 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_basicshapes.cross.pngbin0 -> 304 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_basicshapes.cube.pngbin0 -> 298 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_basicshapes.diamond.pngbin0 -> 291 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_basicshapes.ellipse.pngbin0 -> 316 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_basicshapes.frame.pngbin0 -> 254 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_basicshapes.hexagon.pngbin0 -> 336 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_basicshapes.isosceles-triangle.pngbin0 -> 312 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_basicshapes.octagon.pngbin0 -> 323 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_basicshapes.paper.pngbin0 -> 261 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_basicshapes.parallelogram.pngbin0 -> 290 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_basicshapes.pentagon.pngbin0 -> 368 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_basicshapes.pngbin0 -> 291 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_basicshapes.quadrat.pngbin0 -> 236 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_basicshapes.rectangle.pngbin0 -> 202 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_basicshapes.right-triangle.pngbin0 -> 267 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_basicshapes.ring.pngbin0 -> 450 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_basicshapes.round-quadrat.pngbin0 -> 256 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_basicshapes.round-rectangle.pngbin0 -> 259 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_basicshapes.trapezoid.pngbin0 -> 247 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_basicstepinto.pngbin0 -> 257 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_basicstepout.pngbin0 -> 259 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_basicstepover.pngbin0 -> 260 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_basicstop.pngbin0 -> 590 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_beforeobject.pngbin0 -> 485 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_behindobject.pngbin0 -> 528 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_bezier_unfilled.pngbin0 -> 175 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_bezierappend.pngbin0 -> 468 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_bezierclose.pngbin0 -> 228 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_bezierconvert.pngbin0 -> 174 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_beziercutline.pngbin0 -> 193 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_bezierdelete.pngbin0 -> 386 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_bezieredge.pngbin0 -> 220 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_beziereliminatepoints.pngbin0 -> 354 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_bezierfill.pngbin0 -> 331 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_bezierinsert.pngbin0 -> 197 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_beziermove.pngbin0 -> 184 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_beziersmooth.pngbin0 -> 174 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_beziersymmetric.pngbin0 -> 174 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_bighandles.pngbin0 -> 219 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_bmpmask.pngbin0 -> 286 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_bold.pngbin0 -> 254 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_bringtofront.pngbin0 -> 380 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_browsebackward.pngbin0 -> 233 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_browseforward.pngbin0 -> 242 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_browseview.pngbin0 -> 624 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_bullet.pngbin0 -> 285 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_bulletsandnumberingdialog.pngbin0 -> 256 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_calloutshapes.cloud-callout.pngbin0 -> 408 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_calloutshapes.line-callout-1.pngbin0 -> 242 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_calloutshapes.line-callout-2.pngbin0 -> 242 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_calloutshapes.line-callout-3.pngbin0 -> 214 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_calloutshapes.pngbin0 -> 324 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_calloutshapes.rectangular-callout.pngbin0 -> 295 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_calloutshapes.round-callout.pngbin0 -> 380 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_calloutshapes.round-rectangular-callout.pngbin0 -> 324 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_cancel.pngbin0 -> 794 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_cellvertbottom.pngbin0 -> 193 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_cellvertcenter.pngbin0 -> 197 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_cellverttop.pngbin0 -> 201 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_centerpara.pngbin0 -> 215 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_chainframes.pngbin0 -> 273 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_changebezier.pngbin0 -> 231 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_changepolygon.pngbin0 -> 255 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_charfontname.pngbin0 -> 438 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_checkbox.pngbin0 -> 183 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_choosecontrols.pngbin0 -> 307 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_choosemacro.pngbin0 -> 204 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_choosepolygon.pngbin0 -> 373 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_circle.pngbin0 -> 489 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_circle_unfilled.pngbin0 -> 290 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_circlearc.pngbin0 -> 250 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_circlecut.pngbin0 -> 429 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_circlecut_unfilled.pngbin0 -> 283 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_circlepie.pngbin0 -> 421 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_circlepie_unfilled.pngbin0 -> 261 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_clickchangerotation.pngbin0 -> 400 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_closedoc.pngbin0 -> 153 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_closedocs.pngbin0 -> 831 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_closewin.pngbin0 -> 263 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_color.pngbin0 -> 437 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_colorsettings.pngbin0 -> 328 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_combobox.pngbin0 -> 185 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_commontaskbarvisible.pngbin0 -> 524 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_compilebasic.pngbin0 -> 292 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_cone.pngbin0 -> 535 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_config.pngbin0 -> 267 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_connector.pngbin0 -> 121 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_connectorarrowend.pngbin0 -> 138 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_connectorarrows.pngbin0 -> 133 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_connectorarrowstart.pngbin0 -> 134 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_connectorcircleend.pngbin0 -> 141 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_connectorcircles.pngbin0 -> 138 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_connectorcirclestart.pngbin0 -> 142 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_connectorcurve.pngbin0 -> 155 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_connectorcurvearrowend.pngbin0 -> 164 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_connectorcurvearrows.pngbin0 -> 159 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_connectorcurvearrowstart.pngbin0 -> 167 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_connectorcurvecircleend.pngbin0 -> 150 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_connectorcurvecircles.pngbin0 -> 137 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_connectorcurvecirclestart.pngbin0 -> 152 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_connectorline.pngbin0 -> 109 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_connectorlinearrowend.pngbin0 -> 129 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_connectorlinearrows.pngbin0 -> 125 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_connectorlinearrowstart.pngbin0 -> 131 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_connectorlinecircleend.pngbin0 -> 118 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_connectorlinecircles.pngbin0 -> 103 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_connectorlinecirclestart.pngbin0 -> 117 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_connectorlines.pngbin0 -> 119 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_connectorlinesarrowend.pngbin0 -> 137 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_connectorlinesarrows.pngbin0 -> 138 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_connectorlinesarrowstart.pngbin0 -> 140 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_connectorlinescircleend.pngbin0 -> 139 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_connectorlinescircles.pngbin0 -> 136 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_connectorlinescirclestart.pngbin0 -> 142 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_connectortoolbox.pngbin0 -> 121 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_contourdialog.pngbin0 -> 373 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_controlcodes.pngbin0 -> 326 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_controlproperties.pngbin0 -> 329 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_convertinto3d.pngbin0 -> 356 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_convertinto3dlathe.pngbin0 -> 575 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_convertinto3dlathefast.pngbin0 -> 559 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_copy.pngbin0 -> 168 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_crookrotate.pngbin0 -> 326 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_crookslant.pngbin0 -> 225 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_cube.pngbin0 -> 275 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_currencyfield.pngbin0 -> 224 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_customanimation.pngbin0 -> 442 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_cut.pngbin0 -> 275 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_cylinder.pngbin0 -> 384 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_cyramid.pngbin0 -> 269 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_datadatapilotrun.pngbin0 -> 204 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_datafilterautofilter.pngbin0 -> 196 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_datafilterspecialfilter.pngbin0 -> 329 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_datafilterstandardfilter.pngbin0 -> 248 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_dataincolumns.pngbin0 -> 226 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_datainrows.pngbin0 -> 198 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_datefield.pngbin0 -> 288 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_dbchangedesignmode.pngbin0 -> 268 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_dbclearquery.pngbin0 -> 483 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_dbdistinctvalues.pngbin0 -> 295 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_dbformdelete.pngbin0 -> 297 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_dbformedit.pngbin0 -> 362 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_dbformopen.pngbin0 -> 439 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_dbformrename.pngbin0 -> 259 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_dbnewform.pngbin0 -> 418 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_dbnewformautopilot.pngbin0 -> 479 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_dbnewquery.pngbin0 -> 601 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_dbnewqueryautopilot.pngbin0 -> 571 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_dbnewquerysql.pngbin0 -> 394 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_dbnewreport.pngbin0 -> 532 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_dbnewreportautopilot.pngbin0 -> 576 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_dbnewtable.pngbin0 -> 322 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_dbnewtableautopilot.pngbin0 -> 415 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_dbquerydelete.pngbin0 -> 429 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_dbqueryedit.pngbin0 -> 488 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_dbqueryopen.pngbin0 -> 531 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_dbqueryrename.pngbin0 -> 369 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_dbreportdelete.pngbin0 -> 468 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_dbreportedit.pngbin0 -> 479 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_dbreportopen.pngbin0 -> 449 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_dbreportrename.pngbin0 -> 364 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_dbtabledelete.pngbin0 -> 222 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_dbtableedit.pngbin0 -> 269 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_dbtableopen.pngbin0 -> 391 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_dbtablerename.pngbin0 -> 240 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_dbviewaliases.pngbin0 -> 163 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_dbviewfunctions.pngbin0 -> 319 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_dbviewtablenames.pngbin0 -> 281 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_decrementindent.pngbin0 -> 258 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_decrementlevel.pngbin0 -> 230 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_decrementsublevels.pngbin0 -> 255 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_defaultbullet.pngbin0 -> 230 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_defaultnumbering.pngbin0 -> 249 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_definename.pngbin0 -> 240 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_delete.pngbin0 -> 715 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_deletecolumns.pngbin0 -> 262 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_deleterecord.pngbin0 -> 173 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_deleterows.pngbin0 -> 244 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_designerdialog.pngbin0 -> 310 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_dia.pngbin0 -> 205 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_diaauto.pngbin0 -> 205 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_diaeffect.pngbin0 -> 205 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_diagramdata.pngbin0 -> 464 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_diagramtype.pngbin0 -> 316 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_diaspeed.pngbin0 -> 205 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_diatime.pngbin0 -> 205 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_doubleclicktextedit.pngbin0 -> 387 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_draw.pngbin0 -> 763 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_drawcaption.pngbin0 -> 308 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_drawchart.pngbin0 -> 316 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_drawselect.pngbin0 -> 138 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_drawtext.pngbin0 -> 307 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_dsbdocumentdatasource.pngbin0 -> 440 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_dsbeditdoc.pngbin0 -> 419 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_dsbformletter.pngbin0 -> 477 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_dsbinsertcolumns.pngbin0 -> 330 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_dsbinsertcontent.pngbin0 -> 323 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_dsbrowserexplorer.pngbin0 -> 563 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_duplicatepage.pngbin0 -> 341 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_edit.pngbin0 -> 180 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_editdoc.pngbin0 -> 419 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_editglossary.pngbin0 -> 149 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_editheaderandfooter.pngbin0 -> 279 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_ellipse.pngbin0 -> 425 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_ellipse_unfilled.pngbin0 -> 253 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_ellipsecut.pngbin0 -> 379 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_ellipsecut_unfilled.pngbin0 -> 236 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_ellipsetoolbox.pngbin0 -> 425 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_entergroup.pngbin0 -> 262 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_entirecolumn.pngbin0 -> 118 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_entirerow.pngbin0 -> 122 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_euroconverter.pngbin0 -> 221 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_expandpage.pngbin0 -> 396 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_exportdirecttopdf.pngbin0 -> 374 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_exportto.pngbin0 -> 737 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_extendedhelp.pngbin0 -> 310 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_extrusionlightingfloater.pngbin0 -> 528 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_extrusiontoggle.pngbin0 -> 356 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_filecontrol.pngbin0 -> 683 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_filldraft.pngbin0 -> 319 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_fillshadow.pngbin0 -> 147 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_fillstyle.pngbin0 -> 425 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_filtercrit.pngbin0 -> 249 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_firstpage.pngbin0 -> 297 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_firstrecord.pngbin0 -> 103 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_fliphorizontal.pngbin0 -> 395 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_flipvertical.pngbin0 -> 391 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_flowchartshapes.flowchart-alternate-process.pngbin0 -> 206 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_flowchartshapes.flowchart-card.pngbin0 -> 276 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_flowchartshapes.flowchart-collate.pngbin0 -> 363 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_flowchartshapes.flowchart-connector.pngbin0 -> 393 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_flowchartshapes.flowchart-data.pngbin0 -> 337 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_flowchartshapes.flowchart-decision.pngbin0 -> 323 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_flowchartshapes.flowchart-delay.pngbin0 -> 327 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_flowchartshapes.flowchart-direct-access-storage.pngbin0 -> 366 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_flowchartshapes.flowchart-display.pngbin0 -> 342 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_flowchartshapes.flowchart-document.pngbin0 -> 294 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_flowchartshapes.flowchart-extract.pngbin0 -> 307 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_flowchartshapes.flowchart-internal-storage.pngbin0 -> 250 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_flowchartshapes.flowchart-magnetic-disk.pngbin0 -> 372 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_flowchartshapes.flowchart-manual-input.pngbin0 -> 287 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_flowchartshapes.flowchart-manual-operation.pngbin0 -> 334 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_flowchartshapes.flowchart-merge.pngbin0 -> 318 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_flowchartshapes.flowchart-multidocument.pngbin0 -> 299 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_flowchartshapes.flowchart-off-page-connector.pngbin0 -> 271 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_flowchartshapes.flowchart-or.pngbin0 -> 419 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_flowchartshapes.flowchart-predefined-process.pngbin0 -> 252 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_flowchartshapes.flowchart-preparation.pngbin0 -> 349 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_flowchartshapes.flowchart-process.pngbin0 -> 206 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_flowchartshapes.flowchart-punched-tape.pngbin0 -> 356 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_flowchartshapes.flowchart-sequential-access.pngbin0 -> 388 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_flowchartshapes.flowchart-sort.pngbin0 -> 323 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_flowchartshapes.flowchart-stored-data.pngbin0 -> 321 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_flowchartshapes.flowchart-summing-junction.pngbin0 -> 432 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_flowchartshapes.flowchart-terminator.pngbin0 -> 311 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_flowchartshapes.pngbin0 -> 250 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_fontcolor.pngbin0 -> 437 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_fontdialog.pngbin0 -> 270 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_fontheight.pngbin0 -> 285 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_fontwork.pngbin0 -> 603 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_fontworkgalleryfloater.pngbin0 -> 170 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_fontworkshapetype.fontwork-arch-down-curve.pngbin0 -> 316 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_fontworkshapetype.fontwork-arch-down-pour.pngbin0 -> 329 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_fontworkshapetype.fontwork-arch-left-curve.pngbin0 -> 317 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_fontworkshapetype.fontwork-arch-left-pour.pngbin0 -> 341 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_fontworkshapetype.fontwork-arch-right-curve.pngbin0 -> 331 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_fontworkshapetype.fontwork-arch-right-pour.pngbin0 -> 344 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_fontworkshapetype.fontwork-arch-up-curve.pngbin0 -> 327 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_fontworkshapetype.fontwork-arch-up-pour.pngbin0 -> 334 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_fontworkshapetype.fontwork-chevron-down.pngbin0 -> 342 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_fontworkshapetype.fontwork-chevron-up.pngbin0 -> 345 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_fontworkshapetype.fontwork-circle-curve.pngbin0 -> 450 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_fontworkshapetype.fontwork-circle-pour.pngbin0 -> 454 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_fontworkshapetype.fontwork-curve-down.pngbin0 -> 363 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_fontworkshapetype.fontwork-curve-up.pngbin0 -> 361 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_fontworkshapetype.fontwork-fade-down.pngbin0 -> 334 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_fontworkshapetype.fontwork-fade-left.pngbin0 -> 344 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_fontworkshapetype.fontwork-fade-right.pngbin0 -> 362 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_fontworkshapetype.fontwork-fade-up-and-left.pngbin0 -> 339 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_fontworkshapetype.fontwork-fade-up-and-right.pngbin0 -> 339 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_fontworkshapetype.fontwork-fade-up.pngbin0 -> 332 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_fontworkshapetype.fontwork-inflate.pngbin0 -> 322 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_fontworkshapetype.fontwork-open-circle-curve.pngbin0 -> 443 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_fontworkshapetype.fontwork-open-circle-pour.pngbin0 -> 447 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_fontworkshapetype.fontwork-plain-text.pngbin0 -> 185 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_fontworkshapetype.fontwork-slant-down.pngbin0 -> 341 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_fontworkshapetype.fontwork-slant-up.pngbin0 -> 344 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_fontworkshapetype.fontwork-stop.pngbin0 -> 322 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_fontworkshapetype.fontwork-triangle-down.pngbin0 -> 318 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_fontworkshapetype.fontwork-triangle-up.pngbin0 -> 307 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_fontworkshapetype.fontwork-wave.pngbin0 -> 356 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_fontworkshapetypes.pngbin0 -> 283 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_formatarea.pngbin0 -> 501 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_formatgroup.pngbin0 -> 240 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_formatline.pngbin0 -> 425 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_formatpaintbrush.pngbin0 -> 465 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_formattedfield.pngbin0 -> 167 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_formatungroup.pngbin0 -> 202 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_formdesigntools.pngbin0 -> 245 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_formelcursor.pngbin0 -> 125 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_formfilter.pngbin0 -> 320 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_formfiltered.pngbin0 -> 290 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_formfilterexecute.pngbin0 -> 249 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_formfilternavigator.pngbin0 -> 417 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_formproperties.pngbin0 -> 466 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_forward.pngbin0 -> 359 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_framedialog.pngbin0 -> 301 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_framelinecolor.pngbin0 -> 431 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_freeline.pngbin0 -> 408 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_freeline_unfilled.pngbin0 -> 239 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_fullscreen.pngbin0 -> 415 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_gallery.pngbin0 -> 513 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_glueeditmode.pngbin0 -> 551 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_glueescapedirectionbottom.pngbin0 -> 179 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_glueescapedirectionleft.pngbin0 -> 160 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_glueescapedirectionright.pngbin0 -> 153 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_glueescapedirectiontop.pngbin0 -> 180 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_gluehorzaligncenter.pngbin0 -> 164 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_gluehorzalignleft.pngbin0 -> 167 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_gluehorzalignright.pngbin0 -> 169 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_glueinsertpoint.pngbin0 -> 243 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_gluepercent.pngbin0 -> 400 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_gluevertalignbottom.pngbin0 -> 162 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_gluevertaligncenter.pngbin0 -> 147 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_gluevertaligntop.pngbin0 -> 167 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_goalseekdialog.pngbin0 -> 274 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_gotoendofdoc.pngbin0 -> 298 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_gotostartofdoc.pngbin0 -> 297 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_grafattrcrop.pngbin0 -> 144 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_grafblue.pngbin0 -> 335 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_grafcontrast.pngbin0 -> 327 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_grafgamma.pngbin0 -> 170 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_grafgreen.pngbin0 -> 331 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_grafinvert.pngbin0 -> 155 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_grafluminance.pngbin0 -> 177 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_grafmode.pngbin0 -> 579 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_grafred.pngbin0 -> 328 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_graftransparence.pngbin0 -> 461 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_graphic.pngbin0 -> 279 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_graphicdraft.pngbin0 -> 404 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_graphicfilterinvert.pngbin0 -> 155 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_graphicfiltermosaic.pngbin0 -> 146 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_graphicfilterpopart.pngbin0 -> 479 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_graphicfilterposter.pngbin0 -> 458 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_graphicfilterrelief.pngbin0 -> 174 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_graphicfilterremovenoise.pngbin0 -> 481 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_graphicfiltersepia.pngbin0 -> 670 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_graphicfiltersharpen.pngbin0 -> 518 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_graphicfiltersmooth.pngbin0 -> 280 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_graphicfiltersobel.pngbin0 -> 304 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_graphicfiltersolarize.pngbin0 -> 522 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_graphicfiltertoolbox.pngbin0 -> 580 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_grid.pngbin0 -> 147 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_griduse.pngbin0 -> 283 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_gridvisible.pngbin0 -> 289 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_group.pngbin0 -> 239 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_groupbox.pngbin0 -> 133 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_grow.pngbin0 -> 263 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_halfsphere.pngbin0 -> 613 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_handlesdraft.pngbin0 -> 212 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_help.pngbin0 -> 950 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_helpbookmark.pngbin0 -> 364 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_helperdialog.pngbin0 -> 528 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_helpindex.pngbin0 -> 758 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_helplinesmove.pngbin0 -> 194 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_helplinesuse.pngbin0 -> 263 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_helplinesvisible.pngbin0 -> 100 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_helpmenu.pngbin0 -> 275 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_helpsearch.pngbin0 -> 398 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_helpzoomin.pngbin0 -> 307 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_helpzoomout.pngbin0 -> 300 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_hfixedline.pngbin0 -> 122 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_hideslide.pngbin0 -> 293 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_hscrollbar.pngbin0 -> 189 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_hyperlinkdialog.pngbin0 -> 737 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_hyphenate.pngbin0 -> 368 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_hyphenation.pngbin0 -> 368 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_imagebutton.pngbin0 -> 327 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_imagecontrol.pngbin0 -> 430 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_imagemapdialog.pngbin0 -> 286 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_importfromfile.pngbin0 -> 551 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_incrementindent.pngbin0 -> 254 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_incrementlevel.pngbin0 -> 235 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_incrementsublevels.pngbin0 -> 235 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_inscellsctrl.pngbin0 -> 272 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_insertannotation.pngbin0 -> 221 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_insertapplet.pngbin0 -> 600 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_insertauthorfield.pngbin0 -> 686 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_insertavmedia.pngbin0 -> 462 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_insertbookmark.pngbin0 -> 477 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_insertcaptiondialog.pngbin0 -> 260 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_insertcellsdown.pngbin0 -> 259 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_insertcellsright.pngbin0 -> 255 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_insertcolumns.pngbin0 -> 307 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_insertctrl.pngbin0 -> 421 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_insertcurrencyfield.pngbin0 -> 224 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_insertdatefield.pngbin0 -> 288 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_insertdoc.pngbin0 -> 394 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_insertdraw.pngbin0 -> 523 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_insertedit.pngbin0 -> 179 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_insertendnote.pngbin0 -> 300 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_insertfield.pngbin0 -> 330 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_insertfieldctrl.pngbin0 -> 421 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_insertfilecontrol.pngbin0 -> 684 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_insertfixedtext.pngbin0 -> 251 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_insertfootnote.pngbin0 -> 359 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_insertformattedfield.pngbin0 -> 167 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_insertformula.pngbin0 -> 319 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_insertframe.pngbin0 -> 189 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_insertframeinteract.pngbin0 -> 166 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_insertframeinteractnocolumns.pngbin0 -> 177 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_insertgraphic.pngbin0 -> 280 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_inserthyperlink.pngbin0 -> 700 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_insertimagecontrol.pngbin0 -> 429 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_insertindexesentry.pngbin0 -> 269 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_insertlistbox.pngbin0 -> 221 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_insertmath.pngbin0 -> 267 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_insertneutralparagraph.pngbin0 -> 316 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_insertnumericfield.pngbin0 -> 169 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_insertobjctrl.pngbin0 -> 596 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_insertobject.pngbin0 -> 596 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_insertobjectchart.pngbin0 -> 316 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_insertobjectdialog.pngbin0 -> 596 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_insertobjectfloatingframe.pngbin0 -> 205 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_insertobjectstarmath.pngbin0 -> 268 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_insertpage.pngbin0 -> 490 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_insertpagecountfield.pngbin0 -> 327 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_insertpagenumberfield.pngbin0 -> 402 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_insertpatternfield.pngbin0 -> 571 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_insertplugin.pngbin0 -> 348 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_insertpushbutton.pngbin0 -> 183 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_insertreferencefield.pngbin0 -> 350 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_insertrows.pngbin0 -> 301 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_insertsection.pngbin0 -> 377 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_insertsound.pngbin0 -> 295 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_insertspreadsheet.pngbin0 -> 147 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_insertsymbol.pngbin0 -> 285 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_inserttable.pngbin0 -> 147 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_inserttextframe.pngbin0 -> 188 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_inserttimefield.pngbin0 -> 345 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_inserttitlefield.pngbin0 -> 240 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_inserttopicfield.pngbin0 -> 371 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_insertvideo.pngbin0 -> 205 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_insobjctrl.pngbin0 -> 596 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_interactivegradient.pngbin0 -> 372 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_interactivetransparence.pngbin0 -> 464 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_italic.pngbin0 -> 263 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_justifypara.pngbin0 -> 217 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_label.pngbin0 -> 251 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_lastpage.pngbin0 -> 298 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_lastrecord.pngbin0 -> 107 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_leaveallgroups.pngbin0 -> 294 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_leavegroup.pngbin0 -> 294 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_leftpara.pngbin0 -> 216 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_line.pngbin0 -> 88 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_line_diagonal.pngbin0 -> 87 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_linearrowcircle.pngbin0 -> 150 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_linearrowend.pngbin0 -> 118 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_linearrows.pngbin0 -> 138 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_linearrowsquare.pngbin0 -> 127 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_linearrowstart.pngbin0 -> 119 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_linecirclearrow.pngbin0 -> 151 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_linedraft.pngbin0 -> 283 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_lineendstyle.pngbin0 -> 131 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_linesquarearrow.pngbin0 -> 127 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_linestyle.pngbin0 -> 154 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_linetoolbox.pngbin0 -> 408 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_linewidth.pngbin0 -> 425 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_listbox.pngbin0 -> 221 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_loadbasic.pngbin0 -> 426 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_macrorecorder.pngbin0 -> 307 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_managebreakpoints.pngbin0 -> 546 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_matchgroup.pngbin0 -> 273 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_measureline.pngbin0 -> 142 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_mergecells.pngbin0 -> 113 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_mergedialog.pngbin0 -> 673 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_mirror.pngbin0 -> 659 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_modifypage.pngbin0 -> 452 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_moduledialog.pngbin0 -> 364 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_morecontrols.pngbin0 -> 359 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_movedown.pngbin0 -> 240 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_movedownsubitems.pngbin0 -> 292 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_moveup.pngbin0 -> 236 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_moveupsubitems.pngbin0 -> 300 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_navigationbar.pngbin0 -> 150 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_navigator.pngbin0 -> 411 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_newarrangement.pngbin0 -> 216 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_newdoc.pngbin0 -> 411 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_newrecord.pngbin0 -> 364 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_nextpage.pngbin0 -> 376 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_nextrecord.pngbin0 -> 100 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_no.pngbin0 -> 958 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_numberformatcurrency.pngbin0 -> 224 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_numberformatdate.pngbin0 -> 288 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_numberformatdecdecimals.pngbin0 -> 141 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_numberformatincdecimals.pngbin0 -> 127 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_numberformatpercent.pngbin0 -> 175 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_numberformatscientific.pngbin0 -> 199 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_numberformatstandard.pngbin0 -> 264 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_numberingstart.pngbin0 -> 357 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_numericfield.pngbin0 -> 169 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_objectalign.pngbin0 -> 243 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_objectalignleft.pngbin0 -> 243 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_objectalignright.pngbin0 -> 245 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_objectcatalog.pngbin0 -> 257 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_objectposition.pngbin0 -> 251 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_objects3dtoolbox.pngbin0 -> 277 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_ok.pngbin0 -> 596 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_open.pngbin0 -> 390 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_openreadonly.pngbin0 -> 467 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_openurl.pngbin0 -> 816 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_optimizetable.pngbin0 -> 342 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_ordercrit.pngbin0 -> 287 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_outlinebullet.pngbin0 -> 230 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_outlinecollapse.pngbin0 -> 184 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_outlinecollapseall.pngbin0 -> 159 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_outlinedown.pngbin0 -> 240 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_outlineexpand.pngbin0 -> 154 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_outlineexpandall.pngbin0 -> 120 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_outlinefont.pngbin0 -> 250 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_outlineformat.pngbin0 -> 302 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_outlineleft.pngbin0 -> 233 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_outlineright.pngbin0 -> 242 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_outlineup.pngbin0 -> 236 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_pagedown.pngbin0 -> 376 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_pageup.pngbin0 -> 380 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_paragraphdialog.pngbin0 -> 257 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_paralefttoright.pngbin0 -> 353 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_pararighttoleft.pngbin0 -> 352 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_paraspacedecrease.pngbin0 -> 319 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_paraspaceincrease.pngbin0 -> 313 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_paste.pngbin0 -> 382 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_patternfield.pngbin0 -> 571 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_pickthrough.pngbin0 -> 220 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_pie.pngbin0 -> 346 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_pie_unfilled.pngbin0 -> 232 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_pluginsactive.pngbin0 -> 348 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_polygon.pngbin0 -> 411 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_polygon_diagonal.pngbin0 -> 284 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_polygon_diagonal_unfilled.pngbin0 -> 119 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_polygon_unfilled.pngbin0 -> 132 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_presentation.pngbin0 -> 325 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_presentationlayout.pngbin0 -> 393 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_previewprintoptions.pngbin0 -> 589 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_previewzoom.pngbin0 -> 290 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_previouspage.pngbin0 -> 380 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_prevrecord.pngbin0 -> 98 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_print.pngbin0 -> 465 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_printdefault.pngbin0 -> 465 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_printersetup.pngbin0 -> 410 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_printlayout.pngbin0 -> 498 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_printpagepreview.pngbin0 -> 505 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_printpreview.pngbin0 -> 624 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_progressbar.pngbin0 -> 162 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_pushbutton.pngbin0 -> 183 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_quickedit.pngbin0 -> 135 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_quit.pngbin0 -> 414 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_radiobutton.pngbin0 -> 258 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_recsave.pngbin0 -> 487 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_recsearch.pngbin0 -> 398 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_rect.pngbin0 -> 190 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_rect_rounded.pngbin0 -> 260 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_rect_rounded_unfilled.pngbin0 -> 131 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_rect_unfilled.pngbin0 -> 90 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_rectangletoolbox.pngbin0 -> 190 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_recundo.pngbin0 -> 329 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_redo.pngbin0 -> 338 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_refresh.pngbin0 -> 539 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_rehearsetimings.pngbin0 -> 447 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_reload.pngbin0 -> 621 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_removebullets.pngbin0 -> 213 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_removefilter.pngbin0 -> 293 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_removefiltersort.pngbin0 -> 292 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_repeat.pngbin0 -> 198 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_reverseorder.pngbin0 -> 223 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_rightpara.pngbin0 -> 218 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_runbasic.pngbin0 -> 334 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_save.pngbin0 -> 489 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_saveas.pngbin0 -> 599 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_saveastemplate.pngbin0 -> 502 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_savebasicas.pngbin0 -> 599 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_sbabrwinsert.pngbin0 -> 330 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_sbaexecutesql.pngbin0 -> 402 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_sbanativesql.pngbin0 -> 173 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_scaletext.pngbin0 -> 234 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_scrollbar.pngbin0 -> 191 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_searchdialog.pngbin0 -> 398 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_selectall.pngbin0 -> 312 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_selectmode.pngbin0 -> 139 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_selectobject.pngbin0 -> 139 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_selecttable.pngbin0 -> 108 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_sendfax.pngbin0 -> 435 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_sendmail.pngbin0 -> 323 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_sendtoback.pngbin0 -> 240 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_setborderstyle.pngbin0 -> 172 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_setdocumentproperties.pngbin0 -> 399 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_setobjecttobackground.pngbin0 -> 473 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_setobjecttoforeground.pngbin0 -> 607 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_shadowcursor.pngbin0 -> 263 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_shadowed.pngbin0 -> 301 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_shear.pngbin0 -> 491 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_shell3d.pngbin0 -> 583 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_showbookview.pngbin0 -> 247 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_showbrowser.pngbin0 -> 329 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_showfmexplorer.pngbin0 -> 533 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_showmultiplepages.pngbin0 -> 147 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_showpropbrowser.pngbin0 -> 466 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_showtwopages.pngbin0 -> 210 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_shrink.pngbin0 -> 244 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_snapborder.pngbin0 -> 397 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_snapframe.pngbin0 -> 442 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_snappoints.pngbin0 -> 423 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_solidcreate.pngbin0 -> 466 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_sortascending.pngbin0 -> 184 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_sortdescending.pngbin0 -> 185 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_sortdown.pngbin0 -> 185 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_sortup.pngbin0 -> 184 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_sourceview.pngbin0 -> 501 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_spacepara1.pngbin0 -> 202 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_spacepara15.pngbin0 -> 203 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_spacepara2.pngbin0 -> 203 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_spelldialog.pngbin0 -> 195 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_spelling.pngbin0 -> 195 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_spellonline.pngbin0 -> 242 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_sphere.pngbin0 -> 732 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_splitcell.pngbin0 -> 137 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_square.pngbin0 -> 226 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_square_rounded.pngbin0 -> 301 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_square_rounded_unfilled.pngbin0 -> 155 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_square_unfilled.pngbin0 -> 92 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_starchartdialog.pngbin0 -> 316 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_starshapes.bang.pngbin0 -> 434 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_starshapes.concave-star6.pngbin0 -> 414 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_starshapes.doorplate.pngbin0 -> 341 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_starshapes.horizontal-scroll.pngbin0 -> 308 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_starshapes.pngbin0 -> 378 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_starshapes.signet.pngbin0 -> 395 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_starshapes.star12.pngbin0 -> 396 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_starshapes.star24.pngbin0 -> 453 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_starshapes.star4.pngbin0 -> 311 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_starshapes.star5.pngbin0 -> 378 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_starshapes.star6.pngbin0 -> 399 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_starshapes.star8.pngbin0 -> 395 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_starshapes.vertical-scroll.pngbin0 -> 309 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_strikeout.pngbin0 -> 268 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_styleapply.pngbin0 -> 501 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_stylenewbyexample.pngbin0 -> 110 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_styleupdatebyexample.pngbin0 -> 126 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_stylewatercanmode.pngbin0 -> 448 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_subscript.pngbin0 -> 274 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_superscript.pngbin0 -> 274 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_switchcontroldesignmode.pngbin0 -> 588 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_switchxformsdesignmode.pngbin0 -> 589 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_symbolcatalogue.pngbin0 -> 424 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_symbolshapes.brace-pair.pngbin0 -> 384 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_symbolshapes.bracket-pair.pngbin0 -> 245 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_symbolshapes.cloud.pngbin0 -> 385 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_symbolshapes.diamond-bevel.pngbin0 -> 326 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_symbolshapes.flower.pngbin0 -> 459 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_symbolshapes.forbidden.pngbin0 -> 494 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_symbolshapes.heart.pngbin0 -> 400 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_symbolshapes.left-brace.pngbin0 -> 266 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_symbolshapes.left-bracket.pngbin0 -> 172 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_symbolshapes.lightning.pngbin0 -> 383 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_symbolshapes.moon.pngbin0 -> 346 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_symbolshapes.octagon-bevel.pngbin0 -> 397 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_symbolshapes.pngbin0 -> 443 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_symbolshapes.puzzle.pngbin0 -> 468 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_symbolshapes.quad-bevel.pngbin0 -> 275 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_symbolshapes.right-brace.pngbin0 -> 257 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_symbolshapes.right-bracket.pngbin0 -> 168 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_symbolshapes.smiley.pngbin0 -> 443 bytes
-rwxr-xr-xooo_custom_images/industrial/res/commandimagelist/sc_symbolshapes.sun.pngbin0 -> 383 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_tabdialog.pngbin0 -> 294 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_tablemodefix.pngbin0 -> 171 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_tablemodefixprop.pngbin0 -> 169 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_tablemodevariable.pngbin0 -> 182 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_tablesort.pngbin0 -> 184 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_testmode.pngbin0 -> 383 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_text.pngbin0 -> 307 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_text_marquee.pngbin0 -> 415 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_textdirectionlefttoright.pngbin0 -> 354 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_textdirectiontoptobottom.pngbin0 -> 359 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_textdraft.pngbin0 -> 202 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_textfittosizetool.pngbin0 -> 194 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_texttoolbox.pngbin0 -> 307 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_thesaurus.pngbin0 -> 235 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_thesaurusdialog.pngbin0 -> 235 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_timefield.pngbin0 -> 345 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_toggleanchortype.pngbin0 -> 260 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_toggleaxisdescr.pngbin0 -> 96 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_toggleaxistitle.pngbin0 -> 231 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_togglebreakpoint.pngbin0 -> 397 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_togglegridhorizontal.pngbin0 -> 104 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_togglegridvertical.pngbin0 -> 105 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_togglelegend.pngbin0 -> 303 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_togglemergecells.pngbin0 -> 475 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_toggleobjectbeziermode.pngbin0 -> 133 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_toggleobjectrotatemode.pngbin0 -> 339 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_toggletitle.pngbin0 -> 257 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_torus.pngbin0 -> 536 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_transformdialog.pngbin0 -> 188 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_underline.pngbin0 -> 280 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_underlinedouble.pngbin0 -> 269 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_undo.pngbin0 -> 340 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_ungroup.pngbin0 -> 202 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_unhainframes.pngbin0 -> 559 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_usewizards.pngbin0 -> 492 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_verticalcaption.pngbin0 -> 326 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_verticaltext.pngbin0 -> 292 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_verticaltextfittosizetool.pngbin0 -> 182 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_vfixedline.pngbin0 -> 121 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_view100.pngbin0 -> 295 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_viewdatasourcebrowser.pngbin0 -> 464 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_viewformasgrid.pngbin0 -> 290 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_vscrollbar.pngbin0 -> 190 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_window3d.pngbin0 -> 490 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_wrapcontour.pngbin0 -> 213 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_wrapideal.pngbin0 -> 167 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_wrapleft.pngbin0 -> 157 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_wrapoff.pngbin0 -> 150 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_wrapon.pngbin0 -> 159 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_wrapright.pngbin0 -> 157 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_wrapthrough.pngbin0 -> 176 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_xlinecolor.pngbin0 -> 425 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_xlinestyle.pngbin0 -> 425 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_yes.pngbin0 -> 948 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_zoom.pngbin0 -> 291 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_zoom100percent.pngbin0 -> 296 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_zoomin.pngbin0 -> 307 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_zoomminus.pngbin0 -> 300 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_zoomnext.pngbin0 -> 477 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_zoomobjects.pngbin0 -> 303 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_zoomoptimal.pngbin0 -> 303 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_zoomout.pngbin0 -> 300 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_zoompage.pngbin0 -> 346 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_zoompagewidth.pngbin0 -> 346 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_zoompanning.pngbin0 -> 656 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_zoomplus.pngbin0 -> 307 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_zoomprevious.pngbin0 -> 488 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sc_zoomtoolbox.pngbin0 -> 290 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sk/lc_bold.pngbin0 -> 412 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sk/lc_italic.pngbin0 -> 410 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sk/lc_underline.pngbin0 -> 433 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sk/lc_underlinedouble.pngbin0 -> 428 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sk/sc_bold.pngbin0 -> 254 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sk/sc_italic.pngbin0 -> 263 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sk/sc_underline.pngbin0 -> 279 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sk/sc_underlinedouble.pngbin0 -> 269 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sl/lc_bold.pngbin0 -> 412 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sl/lc_italic.pngbin0 -> 410 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sl/lc_underline.pngbin0 -> 434 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sl/lc_underlinedouble.pngbin0 -> 422 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sl/sc_bold.pngbin0 -> 254 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sl/sc_italic.pngbin0 -> 263 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sl/sc_underline.pngbin0 -> 280 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/sl/sc_underlinedouble.pngbin0 -> 269 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/tr/lc_bold.pngbin0 -> 412 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/tr/lc_italic.pngbin0 -> 411 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/tr/lc_underline.pngbin0 -> 431 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/tr/lc_underlinedouble.pngbin0 -> 422 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/tr/sc_bold.pngbin0 -> 254 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/tr/sc_italic.pngbin0 -> 263 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/tr/sc_underline.pngbin0 -> 280 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/tr/sc_underlinedouble.pngbin0 -> 269 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/zh-CN/lc_bold.pngbin0 -> 412 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/zh-CN/lc_italic.pngbin0 -> 411 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/zh-CN/lc_underline.pngbin0 -> 434 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/zh-CN/lc_underlinedouble.pngbin0 -> 422 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/zh-CN/sc_bold.pngbin0 -> 254 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/zh-CN/sc_italic.pngbin0 -> 263 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/zh-CN/sc_underline.pngbin0 -> 280 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/zh-CN/sc_underlinedouble.pngbin0 -> 269 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/zh-TW/lc_bold.pngbin0 -> 412 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/zh-TW/lc_italic.pngbin0 -> 410 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/zh-TW/lc_underline.pngbin0 -> 433 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/zh-TW/lc_underlinedouble.pngbin0 -> 422 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/zh-TW/sc_bold.pngbin0 -> 254 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/zh-TW/sc_italic.pngbin0 -> 263 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/zh-TW/sc_underline.pngbin0 -> 280 bytes
-rw-r--r--ooo_custom_images/industrial/res/commandimagelist/zh-TW/sc_underlinedouble.pngbin0 -> 269 bytes
-rw-r--r--ooo_custom_images/industrial/res/fileopen.pngbin0 -> 328 bytes
-rw-r--r--ooo_custom_images/industrial/res/foldercl.pngbin0 -> 326 bytes
-rw-r--r--ooo_custom_images/industrial/res/folderop.pngbin0 -> 390 bytes
-rw-r--r--ooo_custom_images/industrial/res/fp010.pngbin0 -> 383 bytes
-rw-r--r--ooo_custom_images/industrial/res/fp015.pngbin0 -> 555 bytes
-rw-r--r--ooo_custom_images/industrial/res/hldocntp.pngbin0 -> 911 bytes
-rw-r--r--ooo_custom_images/industrial/res/hldoctp.pngbin0 -> 792 bytes
-rw-r--r--ooo_custom_images/industrial/res/hlinettp.pngbin0 -> 1934 bytes
-rw-r--r--ooo_custom_images/industrial/res/hlmailtp.pngbin0 -> 1188 bytes
-rw-r--r--ooo_custom_images/industrial/res/im30819.pngbin0 -> 562 bytes
-rw-r--r--ooo_custom_images/industrial/res/im30820.pngbin0 -> 330 bytes
-rw-r--r--ooo_custom_images/industrial/res/im30821.pngbin0 -> 456 bytes
-rw-r--r--ooo_custom_images/industrial/res/im30826.pngbin0 -> 394 bytes
-rw-r--r--ooo_custom_images/industrial/res/lc05303.pngbin0 -> 766 bytes
-rw-r--r--ooo_custom_images/industrial/res/lc05501.pngbin0 -> 1031 bytes
-rw-r--r--ooo_custom_images/industrial/res/lc05502.pngbin0 -> 1184 bytes
-rw-r--r--ooo_custom_images/industrial/res/lc05504.pngbin0 -> 941 bytes
-rw-r--r--ooo_custom_images/industrial/res/lc05505.pngbin0 -> 934 bytes
-rw-r--r--ooo_custom_images/industrial/res/lc05508.pngbin0 -> 1245 bytes
-rw-r--r--ooo_custom_images/industrial/res/lc05509.pngbin0 -> 941 bytes
-rw-r--r--ooo_custom_images/industrial/res/lc05539.pngbin0 -> 975 bytes
-rw-r--r--ooo_custom_images/industrial/res/lc05555.pngbin0 -> 292 bytes
-rw-r--r--ooo_custom_images/industrial/res/lc05556.pngbin0 -> 220 bytes
-rw-r--r--ooo_custom_images/industrial/res/lc05596.pngbin0 -> 1415 bytes
-rw-r--r--ooo_custom_images/industrial/res/lc05678.pngbin0 -> 1300 bytes
-rw-r--r--ooo_custom_images/industrial/res/lc05700.pngbin0 -> 573 bytes
-rw-r--r--ooo_custom_images/industrial/res/lc05701.pngbin0 -> 522 bytes
-rw-r--r--ooo_custom_images/industrial/res/lc05710.pngbin0 -> 649 bytes
-rw-r--r--ooo_custom_images/industrial/res/lc05711.pngbin0 -> 346 bytes
-rw-r--r--ooo_custom_images/industrial/res/lc05961.pngbin0 -> 1001 bytes
-rw-r--r--ooo_custom_images/industrial/res/lc06300.pngbin0 -> 390 bytes
-rw-r--r--ooo_custom_images/industrial/res/lc06301.pngbin0 -> 410 bytes
-rw-r--r--ooo_custom_images/industrial/res/lc06302.pngbin0 -> 1302 bytes
-rw-r--r--ooo_custom_images/industrial/res/lc06303.pngbin0 -> 639 bytes
-rw-r--r--ooo_custom_images/industrial/res/lc06312.pngbin0 -> 970 bytes
-rw-r--r--ooo_custom_images/industrial/res/lc10107.pngbin0 -> 360 bytes
-rw-r--r--ooo_custom_images/industrial/res/lc10113.pngbin0 -> 812 bytes
-rw-r--r--ooo_custom_images/industrial/res/lc10243.pngbin0 -> 557 bytes
-rw-r--r--ooo_custom_images/industrial/res/lc10366.pngbin0 -> 584 bytes
-rw-r--r--ooo_custom_images/industrial/res/lc10375.pngbin0 -> 268 bytes
-rw-r--r--ooo_custom_images/industrial/res/lc10376.pngbin0 -> 320 bytes
-rw-r--r--ooo_custom_images/industrial/res/lc10711.pngbin0 -> 421 bytes
-rw-r--r--ooo_custom_images/industrial/res/lc10715.pngbin0 -> 352 bytes
-rw-r--r--ooo_custom_images/industrial/res/lc10716.pngbin0 -> 274 bytes
-rw-r--r--ooo_custom_images/industrial/res/lc10851.pngbin0 -> 395 bytes
-rw-r--r--ooo_custom_images/industrial/res/lc10853.pngbin0 -> 1474 bytes
-rw-r--r--ooo_custom_images/industrial/res/lc10854.pngbin0 -> 764 bytes
-rw-r--r--ooo_custom_images/industrial/res/lc10863.pngbin0 -> 504 bytes
-rw-r--r--ooo_custom_images/industrial/res/lc10864.pngbin0 -> 493 bytes
-rw-r--r--ooo_custom_images/industrial/res/lc10865.pngbin0 -> 442 bytes
-rw-r--r--ooo_custom_images/industrial/res/lc10866.pngbin0 -> 432 bytes
-rw-r--r--ooo_custom_images/industrial/res/lc10867.pngbin0 -> 447 bytes
-rw-r--r--ooo_custom_images/industrial/res/lc10868.pngbin0 -> 350 bytes
-rw-r--r--ooo_custom_images/industrial/res/lc10869.pngbin0 -> 780 bytes
-rw-r--r--ooo_custom_images/industrial/res/lc10907.pngbin0 -> 569 bytes
-rw-r--r--ooo_custom_images/industrial/res/lc10908.pngbin0 -> 562 bytes
-rw-r--r--ooo_custom_images/industrial/res/lc10937.pngbin0 -> 623 bytes
-rw-r--r--ooo_custom_images/industrial/res/lc12201.pngbin0 -> 523 bytes
-rw-r--r--ooo_custom_images/industrial/res/lc12203.pngbin0 -> 340 bytes
-rw-r--r--ooo_custom_images/industrial/res/lc12231.pngbin0 -> 704 bytes
-rw-r--r--ooo_custom_images/industrial/res/lc12235.pngbin0 -> 679 bytes
-rw-r--r--ooo_custom_images/industrial/res/lc12236.pngbin0 -> 364 bytes
-rw-r--r--ooo_custom_images/industrial/res/lc12237.pngbin0 -> 398 bytes
-rw-r--r--ooo_custom_images/industrial/res/lc12238.pngbin0 -> 607 bytes
-rw-r--r--ooo_custom_images/industrial/res/lo03123.pngbin0 -> 1356 bytes
-rw-r--r--ooo_custom_images/industrial/res/lo03126.pngbin0 -> 1519 bytes
-rw-r--r--ooo_custom_images/industrial/res/lo03127.pngbin0 -> 1519 bytes
-rw-r--r--ooo_custom_images/industrial/res/lo03129.pngbin0 -> 1695 bytes
-rw-r--r--ooo_custom_images/industrial/res/lo03130.pngbin0 -> 1358 bytes
-rw-r--r--ooo_custom_images/industrial/res/lo03139.pngbin0 -> 1392 bytes
-rw-r--r--ooo_custom_images/industrial/res/lo03144.pngbin0 -> 768 bytes
-rw-r--r--ooo_custom_images/industrial/res/lo03162.pngbin0 -> 1257 bytes
-rw-r--r--ooo_custom_images/industrial/res/lo03163.pngbin0 -> 553 bytes
-rw-r--r--ooo_custom_images/industrial/res/lo03216.pngbin0 -> 1534 bytes
-rw-r--r--ooo_custom_images/industrial/res/lo03226.pngbin0 -> 1004 bytes
-rw-r--r--ooo_custom_images/industrial/res/lo03227.pngbin0 -> 1606 bytes
-rw-r--r--ooo_custom_images/industrial/res/lo03228.pngbin0 -> 1608 bytes
-rw-r--r--ooo_custom_images/industrial/res/lo03242.pngbin0 -> 772 bytes
-rw-r--r--ooo_custom_images/industrial/res/lx03123.pngbin0 -> 1357 bytes
-rw-r--r--ooo_custom_images/industrial/res/lx03125.pngbin0 -> 1230 bytes
-rw-r--r--ooo_custom_images/industrial/res/lx03126.pngbin0 -> 1519 bytes
-rw-r--r--ooo_custom_images/industrial/res/lx03127.pngbin0 -> 1519 bytes
-rw-r--r--ooo_custom_images/industrial/res/lx03128.pngbin0 -> 1186 bytes
-rw-r--r--ooo_custom_images/industrial/res/lx03129.pngbin0 -> 1695 bytes
-rw-r--r--ooo_custom_images/industrial/res/lx03130.pngbin0 -> 1357 bytes
-rw-r--r--ooo_custom_images/industrial/res/lx03131.pngbin0 -> 1498 bytes
-rw-r--r--ooo_custom_images/industrial/res/lx03132.pngbin0 -> 1498 bytes
-rw-r--r--ooo_custom_images/industrial/res/lx03137.pngbin0 -> 1087 bytes
-rw-r--r--ooo_custom_images/industrial/res/lx03139.pngbin0 -> 1391 bytes
-rw-r--r--ooo_custom_images/industrial/res/lx03140.pngbin0 -> 1190 bytes
-rw-r--r--ooo_custom_images/industrial/res/lx03141.pngbin0 -> 805 bytes
-rw-r--r--ooo_custom_images/industrial/res/lx03144.pngbin0 -> 767 bytes
-rw-r--r--ooo_custom_images/industrial/res/lx03145.pngbin0 -> 768 bytes
-rw-r--r--ooo_custom_images/industrial/res/lx03150.pngbin0 -> 647 bytes
-rw-r--r--ooo_custom_images/industrial/res/lx03158.pngbin0 -> 1099 bytes
-rw-r--r--ooo_custom_images/industrial/res/lx03160.pngbin0 -> 1481 bytes
-rw-r--r--ooo_custom_images/industrial/res/lx03161.pngbin0 -> 1291 bytes
-rw-r--r--ooo_custom_images/industrial/res/lx03162.pngbin0 -> 1255 bytes
-rw-r--r--ooo_custom_images/industrial/res/lx03163.pngbin0 -> 1257 bytes
-rw-r--r--ooo_custom_images/industrial/res/lx03189.pngbin0 -> 805 bytes
-rw-r--r--ooo_custom_images/industrial/res/lx03216.pngbin0 -> 1534 bytes
-rw-r--r--ooo_custom_images/industrial/res/lx03219.pngbin0 -> 1121 bytes
-rw-r--r--ooo_custom_images/industrial/res/lx03226.pngbin0 -> 646 bytes
-rw-r--r--ooo_custom_images/industrial/res/lx03227.pngbin0 -> 1604 bytes
-rw-r--r--ooo_custom_images/industrial/res/lx03228.pngbin0 -> 1608 bytes
-rw-r--r--ooo_custom_images/industrial/res/lx03241.pngbin0 -> 1357 bytes
-rw-r--r--ooo_custom_images/industrial/res/lx03242.pngbin0 -> 1039 bytes
-rw-r--r--ooo_custom_images/industrial/res/lx03243.pngbin0 -> 1389 bytes
-rw-r--r--ooo_custom_images/industrial/res/lx03244.pngbin0 -> 1386 bytes
-rw-r--r--ooo_custom_images/industrial/res/lx03245.pngbin0 -> 1695 bytes
-rw-r--r--ooo_custom_images/industrial/res/lx03246.pngbin0 -> 1608 bytes
-rw-r--r--ooo_custom_images/industrial/res/lx03247.pngbin0 -> 767 bytes
-rw-r--r--ooo_custom_images/industrial/res/lx03248.pngbin0 -> 647 bytes
-rw-r--r--ooo_custom_images/industrial/res/lx03249.pngbin0 -> 1358 bytes
-rw-r--r--ooo_custom_images/industrial/res/lx03250.pngbin0 -> 1519 bytes
-rw-r--r--ooo_custom_images/industrial/res/lx03251.pngbin0 -> 1256 bytes
-rw-r--r--ooo_custom_images/industrial/res/lx03252.pngbin0 -> 1603 bytes
-rw-r--r--ooo_custom_images/industrial/res/lx03253.pngbin0 -> 1357 bytes
-rw-r--r--ooo_custom_images/industrial/res/lx03254.pngbin0 -> 1520 bytes
-rw-r--r--ooo_custom_images/industrial/res/lx03255.pngbin0 -> 557 bytes
-rw-r--r--ooo_custom_images/industrial/res/newdoc.pngbin0 -> 555 bytes
-rw-r--r--ooo_custom_images/industrial/res/sc05303.pngbin0 -> 414 bytes
-rw-r--r--ooo_custom_images/industrial/res/sc05500.pngbin0 -> 410 bytes
-rw-r--r--ooo_custom_images/industrial/res/sc05501.pngbin0 -> 390 bytes
-rw-r--r--ooo_custom_images/industrial/res/sc05502.pngbin0 -> 599 bytes
-rw-r--r--ooo_custom_images/industrial/res/sc05504.pngbin0 -> 465 bytes
-rw-r--r--ooo_custom_images/industrial/res/sc05505.pngbin0 -> 489 bytes
-rw-r--r--ooo_custom_images/industrial/res/sc05508.pngbin0 -> 621 bytes
-rw-r--r--ooo_custom_images/industrial/res/sc05509.pngbin0 -> 465 bytes
-rw-r--r--ooo_custom_images/industrial/res/sc05539.pngbin0 -> 310 bytes
-rw-r--r--ooo_custom_images/industrial/res/sc05554.pngbin0 -> 501 bytes
-rw-r--r--ooo_custom_images/industrial/res/sc05555.pngbin0 -> 110 bytes
-rw-r--r--ooo_custom_images/industrial/res/sc05556.pngbin0 -> 126 bytes
-rw-r--r--ooo_custom_images/industrial/res/sc05596.pngbin0 -> 816 bytes
-rw-r--r--ooo_custom_images/industrial/res/sc05678.pngbin0 -> 737 bytes
-rw-r--r--ooo_custom_images/industrial/res/sc05710.pngbin0 -> 275 bytes
-rw-r--r--ooo_custom_images/industrial/res/sc05711.pngbin0 -> 168 bytes
-rw-r--r--ooo_custom_images/industrial/res/sc05961.pngbin0 -> 398 bytes
-rw-r--r--ooo_custom_images/industrial/res/sc06300.pngbin0 -> 242 bytes
-rw-r--r--ooo_custom_images/industrial/res/sc06301.pngbin0 -> 233 bytes
-rw-r--r--ooo_custom_images/industrial/res/sc06302.pngbin0 -> 590 bytes
-rw-r--r--ooo_custom_images/industrial/res/sc06303.pngbin0 -> 413 bytes
-rw-r--r--ooo_custom_images/industrial/res/sc06312.pngbin0 -> 419 bytes
-rw-r--r--ooo_custom_images/industrial/res/sc06331.pngbin0 -> 555 bytes
-rw-r--r--ooo_custom_images/industrial/res/sc06694.pngbin0 -> 513 bytes
-rw-r--r--ooo_custom_images/industrial/res/sc10108.pngbin0 -> 260 bytes
-rw-r--r--ooo_custom_images/industrial/res/sc10113.pngbin0 -> 346 bytes
-rw-r--r--ooo_custom_images/industrial/res/sc10116.pngbin0 -> 379 bytes
-rw-r--r--ooo_custom_images/industrial/res/sc10243.pngbin0 -> 195 bytes
-rw-r--r--ooo_custom_images/industrial/res/sc10366.pngbin0 -> 411 bytes
-rw-r--r--ooo_custom_images/industrial/res/sc10375.pngbin0 -> 225 bytes
-rw-r--r--ooo_custom_images/industrial/res/sc10376.pngbin0 -> 245 bytes
-rw-r--r--ooo_custom_images/industrial/res/sc10711.pngbin0 -> 293 bytes
-rw-r--r--ooo_custom_images/industrial/res/sc10715.pngbin0 -> 249 bytes
-rw-r--r--ooo_custom_images/industrial/res/sc10716.pngbin0 -> 197 bytes
-rw-r--r--ooo_custom_images/industrial/res/sc10851.pngbin0 -> 257 bytes
-rw-r--r--ooo_custom_images/industrial/res/sc10853.pngbin0 -> 677 bytes
-rw-r--r--ooo_custom_images/industrial/res/sc10854.pngbin0 -> 373 bytes
-rw-r--r--ooo_custom_images/industrial/res/sc10863.pngbin0 -> 176 bytes
-rw-r--r--ooo_custom_images/industrial/res/sc10864.pngbin0 -> 327 bytes
-rw-r--r--ooo_custom_images/industrial/res/sc10865.pngbin0 -> 325 bytes
-rw-r--r--ooo_custom_images/industrial/res/sc10866.pngbin0 -> 329 bytes
-rw-r--r--ooo_custom_images/industrial/res/sc10867.pngbin0 -> 333 bytes
-rw-r--r--ooo_custom_images/industrial/res/sc10868.pngbin0 -> 170 bytes
-rw-r--r--ooo_custom_images/industrial/res/sc10869.pngbin0 -> 461 bytes
-rw-r--r--ooo_custom_images/industrial/res/sc10907.pngbin0 -> 354 bytes
-rw-r--r--ooo_custom_images/industrial/res/sc10908.pngbin0 -> 359 bytes
-rw-r--r--ooo_custom_images/industrial/res/sc10937.pngbin0 -> 345 bytes
-rw-r--r--ooo_custom_images/industrial/res/sc12201.pngbin0 -> 324 bytes
-rw-r--r--ooo_custom_images/industrial/res/sc12203.pngbin0 -> 477 bytes
-rw-r--r--ooo_custom_images/industrial/res/sc12231.pngbin0 -> 483 bytes
-rw-r--r--ooo_custom_images/industrial/res/sc12235.pngbin0 -> 319 bytes
-rw-r--r--ooo_custom_images/industrial/res/sc12236.pngbin0 -> 281 bytes
-rw-r--r--ooo_custom_images/industrial/res/sc12237.pngbin0 -> 163 bytes
-rw-r--r--ooo_custom_images/industrial/res/sc12238.pngbin0 -> 296 bytes
-rw-r--r--ooo_custom_images/industrial/res/sco206.pngbin0 -> 257 bytes
-rw-r--r--ooo_custom_images/industrial/res/script.pngbin0 -> 204 bytes
-rw-r--r--ooo_custom_images/industrial/res/so03123.pngbin0 -> 387 bytes
-rw-r--r--ooo_custom_images/industrial/res/so03126.pngbin0 -> 515 bytes
-rw-r--r--ooo_custom_images/industrial/res/so03127.pngbin0 -> 515 bytes
-rw-r--r--ooo_custom_images/industrial/res/so03129.pngbin0 -> 465 bytes
-rw-r--r--ooo_custom_images/industrial/res/so03130.pngbin0 -> 387 bytes
-rw-r--r--ooo_custom_images/industrial/res/so03139.pngbin0 -> 473 bytes
-rw-r--r--ooo_custom_images/industrial/res/so03144.pngbin0 -> 361 bytes
-rw-r--r--ooo_custom_images/industrial/res/so03162.pngbin0 -> 394 bytes
-rw-r--r--ooo_custom_images/industrial/res/so03163.pngbin0 -> 243 bytes
-rw-r--r--ooo_custom_images/industrial/res/so03216.pngbin0 -> 426 bytes
-rw-r--r--ooo_custom_images/industrial/res/so03226.pngbin0 -> 312 bytes
-rw-r--r--ooo_custom_images/industrial/res/so03227.pngbin0 -> 450 bytes
-rw-r--r--ooo_custom_images/industrial/res/so03228.pngbin0 -> 450 bytes
-rw-r--r--ooo_custom_images/industrial/res/so03242.pngbin0 -> 410 bytes
-rw-r--r--ooo_custom_images/industrial/res/sx03123.pngbin0 -> 387 bytes
-rw-r--r--ooo_custom_images/industrial/res/sx03125.pngbin0 -> 443 bytes
-rw-r--r--ooo_custom_images/industrial/res/sx03126.pngbin0 -> 515 bytes
-rw-r--r--ooo_custom_images/industrial/res/sx03127.pngbin0 -> 515 bytes
-rw-r--r--ooo_custom_images/industrial/res/sx03128.pngbin0 -> 560 bytes
-rw-r--r--ooo_custom_images/industrial/res/sx03129.pngbin0 -> 466 bytes
-rw-r--r--ooo_custom_images/industrial/res/sx03130.pngbin0 -> 387 bytes
-rw-r--r--ooo_custom_images/industrial/res/sx03131.pngbin0 -> 493 bytes
-rw-r--r--ooo_custom_images/industrial/res/sx03132.pngbin0 -> 493 bytes
-rw-r--r--ooo_custom_images/industrial/res/sx03137.pngbin0 -> 487 bytes
-rw-r--r--ooo_custom_images/industrial/res/sx03139.pngbin0 -> 473 bytes
-rw-r--r--ooo_custom_images/industrial/res/sx03140.pngbin0 -> 439 bytes
-rw-r--r--ooo_custom_images/industrial/res/sx03141.pngbin0 -> 328 bytes
-rw-r--r--ooo_custom_images/industrial/res/sx03144.pngbin0 -> 360 bytes
-rw-r--r--ooo_custom_images/industrial/res/sx03145.pngbin0 -> 360 bytes
-rw-r--r--ooo_custom_images/industrial/res/sx03150.pngbin0 -> 270 bytes
-rw-r--r--ooo_custom_images/industrial/res/sx03158.pngbin0 -> 401 bytes
-rw-r--r--ooo_custom_images/industrial/res/sx03160.pngbin0 -> 413 bytes
-rw-r--r--ooo_custom_images/industrial/res/sx03161.pngbin0 -> 329 bytes
-rw-r--r--ooo_custom_images/industrial/res/sx03162.pngbin0 -> 394 bytes
-rw-r--r--ooo_custom_images/industrial/res/sx03163.pngbin0 -> 394 bytes
-rw-r--r--ooo_custom_images/industrial/res/sx03187.pngbin0 -> 270 bytes
-rw-r--r--ooo_custom_images/industrial/res/sx03188.pngbin0 -> 238 bytes
-rw-r--r--ooo_custom_images/industrial/res/sx03189.pngbin0 -> 326 bytes
-rw-r--r--ooo_custom_images/industrial/res/sx03201.pngbin0 -> 257 bytes
-rw-r--r--ooo_custom_images/industrial/res/sx03202.pngbin0 -> 210 bytes
-rw-r--r--ooo_custom_images/industrial/res/sx03216.pngbin0 -> 419 bytes
-rw-r--r--ooo_custom_images/industrial/res/sx03219.pngbin0 -> 472 bytes
-rw-r--r--ooo_custom_images/industrial/res/sx03226.pngbin0 -> 270 bytes
-rw-r--r--ooo_custom_images/industrial/res/sx03227.pngbin0 -> 450 bytes
-rw-r--r--ooo_custom_images/industrial/res/sx03228.pngbin0 -> 450 bytes
-rw-r--r--ooo_custom_images/industrial/res/sx03241.pngbin0 -> 387 bytes
-rw-r--r--ooo_custom_images/industrial/res/sx03242.pngbin0 -> 410 bytes
-rw-r--r--ooo_custom_images/industrial/res/sx03243.pngbin0 -> 334 bytes
-rw-r--r--ooo_custom_images/industrial/res/sx03244.pngbin0 -> 334 bytes
-rw-r--r--ooo_custom_images/industrial/res/sx03245.pngbin0 -> 464 bytes
-rw-r--r--ooo_custom_images/industrial/res/sx03246.pngbin0 -> 450 bytes
-rw-r--r--ooo_custom_images/industrial/res/sx03247.pngbin0 -> 360 bytes
-rw-r--r--ooo_custom_images/industrial/res/sx03248.pngbin0 -> 270 bytes
-rw-r--r--ooo_custom_images/industrial/res/sx03249.pngbin0 -> 387 bytes
-rw-r--r--ooo_custom_images/industrial/res/sx03250.pngbin0 -> 515 bytes
-rw-r--r--ooo_custom_images/industrial/res/sx03251.pngbin0 -> 394 bytes
-rw-r--r--ooo_custom_images/industrial/res/sx03252.pngbin0 -> 450 bytes
-rw-r--r--ooo_custom_images/industrial/res/sx03253.pngbin0 -> 387 bytes
-rw-r--r--ooo_custom_images/industrial/res/sx03254.pngbin0 -> 515 bytes
-rw-r--r--ooo_custom_images/industrial/res/sx03255.pngbin0 -> 243 bytes
-rw-r--r--ooo_custom_images/industrial/res/sx10768.pngbin0 -> 191 bytes
-rw-r--r--ooo_custom_images/industrial/res/target.pngbin0 -> 372 bytes
-rw-r--r--ooo_custom_images/industrial/sc/res/date.pngbin0 -> 288 bytes
-rw-r--r--ooo_custom_images/industrial/sc/res/dropcopy.pngbin0 -> 353 bytes
-rw-r--r--ooo_custom_images/industrial/sc/res/droplink.pngbin0 -> 242 bytes
-rw-r--r--ooo_custom_images/industrial/sc/res/dropurl.pngbin0 -> 699 bytes
-rw-r--r--ooo_custom_images/industrial/sc/res/file.pngbin0 -> 391 bytes
-rw-r--r--ooo_custom_images/industrial/sc/res/imglst/apptbx/lc26047.pngbin0 -> 679 bytes
-rw-r--r--ooo_custom_images/industrial/sc/res/imglst/apptbx/lc26048.pngbin0 -> 299 bytes
-rw-r--r--ooo_custom_images/industrial/sc/res/imglst/apptbx/lc26049.pngbin0 -> 145 bytes
-rw-r--r--ooo_custom_images/industrial/sc/res/imglst/apptbx/lc26050.pngbin0 -> 959 bytes
-rw-r--r--ooo_custom_images/industrial/sc/res/imglst/apptbx/lc26051.pngbin0 -> 683 bytes
-rw-r--r--ooo_custom_images/industrial/sc/res/imglst/apptbx/sc26047.pngbin0 -> 319 bytes
-rw-r--r--ooo_custom_images/industrial/sc/res/imglst/apptbx/sc26048.pngbin0 -> 124 bytes
-rw-r--r--ooo_custom_images/industrial/sc/res/imglst/apptbx/sc26049.pngbin0 -> 92 bytes
-rw-r--r--ooo_custom_images/industrial/sc/res/imglst/apptbx/sc26050.pngbin0 -> 666 bytes
-rw-r--r--ooo_custom_images/industrial/sc/res/imglst/apptbx/sc26051.pngbin0 -> 527 bytes
-rw-r--r--ooo_custom_images/industrial/sc/res/imglst/navipi/na010.pngbin0 -> 270 bytes
-rw-r--r--ooo_custom_images/industrial/sc/res/imglst/navipi/na011.pngbin0 -> 292 bytes
-rw-r--r--ooo_custom_images/industrial/sc/res/imglst/navipi/na05.pngbin0 -> 384 bytes
-rw-r--r--ooo_custom_images/industrial/sc/res/imglst/navipi/na06.pngbin0 -> 385 bytes
-rw-r--r--ooo_custom_images/industrial/sc/res/imglst/navipi/na07.pngbin0 -> 274 bytes
-rw-r--r--ooo_custom_images/industrial/sc/res/imglst/navipi/na09.pngbin0 -> 570 bytes
-rw-r--r--ooo_custom_images/industrial/sc/res/imglst/navipi/nc01.pngbin0 -> 147 bytes
-rw-r--r--ooo_custom_images/industrial/sc/res/imglst/navipi/nc02.pngbin0 -> 241 bytes
-rw-r--r--ooo_custom_images/industrial/sc/res/imglst/navipi/nc03.pngbin0 -> 275 bytes
-rw-r--r--ooo_custom_images/industrial/sc/res/imglst/navipi/nc04.pngbin0 -> 279 bytes
-rw-r--r--ooo_custom_images/industrial/sc/res/imglst/navipi/nc05.pngbin0 -> 316 bytes
-rw-r--r--ooo_custom_images/industrial/sc/res/imglst/navipi/nc06.pngbin0 -> 221 bytes
-rw-r--r--ooo_custom_images/industrial/sc/res/imglst/navipi/nc07.pngbin0 -> 242 bytes
-rw-r--r--ooo_custom_images/industrial/sc/res/imglst/navipi/nc08.pngbin0 -> 523 bytes
-rw-r--r--ooo_custom_images/industrial/sc/res/page.pngbin0 -> 402 bytes
-rw-r--r--ooo_custom_images/industrial/sc/res/pages.pngbin0 -> 327 bytes
-rw-r--r--ooo_custom_images/industrial/sc/res/sf01.pngbin0 -> 333 bytes
-rw-r--r--ooo_custom_images/industrial/sc/res/sf02.pngbin0 -> 215 bytes
-rw-r--r--ooo_custom_images/industrial/sc/res/table.pngbin0 -> 147 bytes
-rw-r--r--ooo_custom_images/industrial/sc/res/text.pngbin0 -> 438 bytes
-rw-r--r--ooo_custom_images/industrial/sc/res/time.pngbin0 -> 345 bytes
-rw-r--r--ooo_custom_images/industrial/sc10713.pngbin0 -> 185 bytes
-rw-r--r--ooo_custom_images/industrial/sd/res/dlgass1.pngbin0 -> 19531 bytes
-rw-r--r--ooo_custom_images/industrial/sd/res/dlgass2.pngbin0 -> 18743 bytes
-rw-r--r--ooo_custom_images/industrial/sd/res/dlgass3.pngbin0 -> 17881 bytes
-rw-r--r--ooo_custom_images/industrial/sd/res/dlgass4.pngbin0 -> 17873 bytes
-rw-r--r--ooo_custom_images/industrial/sd/res/dlgass5.pngbin0 -> 17657 bytes
-rw-r--r--ooo_custom_images/industrial/sd/res/extras.pngbin0 -> 280 bytes
-rw-r--r--ooo_custom_images/industrial/sd/res/graphic.pngbin0 -> 279 bytes
-rw-r--r--ooo_custom_images/industrial/sd/res/imagelst/nv010.pngbin0 -> 699 bytes
-rw-r--r--ooo_custom_images/industrial/sd/res/imagelst/nv02.pngbin0 -> 239 bytes
-rw-r--r--ooo_custom_images/industrial/sd/res/imagelst/nv03.pngbin0 -> 300 bytes
-rw-r--r--ooo_custom_images/industrial/sd/res/imagelst/nv04.pngbin0 -> 307 bytes
-rw-r--r--ooo_custom_images/industrial/sd/res/imagelst/nv05.pngbin0 -> 301 bytes
-rw-r--r--ooo_custom_images/industrial/sd/res/imagelst/nv06.pngbin0 -> 304 bytes
-rw-r--r--ooo_custom_images/industrial/sd/res/imagelst/nv08.pngbin0 -> 279 bytes
-rw-r--r--ooo_custom_images/industrial/sd/res/imagelst/nv09.pngbin0 -> 242 bytes
-rw-r--r--ooo_custom_images/industrial/sd/res/imagelst/sc27036.pngbin0 -> 231 bytes
-rw-r--r--ooo_custom_images/industrial/sd/res/imagelst/sf01.pngbin0 -> 257 bytes
-rw-r--r--ooo_custom_images/industrial/sd/res/imagelst/sf02.pngbin0 -> 428 bytes
-rw-r--r--ooo_custom_images/industrial/sd/res/objekt.pngbin0 -> 745 bytes
-rw-r--r--ooo_custom_images/industrial/sd/res/ole.pngbin0 -> 316 bytes
-rw-r--r--ooo_custom_images/industrial/sd/res/page.pngbin0 -> 270 bytes
-rw-r--r--ooo_custom_images/industrial/sd/res/pageobjs.pngbin0 -> 417 bytes
-rw-r--r--ooo_custom_images/industrial/sd/res/pipette.pngbin0 -> 286 bytes
-rw-r--r--ooo_custom_images/industrial/sd/res/text.pngbin0 -> 482 bytes
-rw-r--r--ooo_custom_images/industrial/sfx2/res/doccl.pngbin0 -> 410 bytes
-rw-r--r--ooo_custom_images/industrial/sfx2/res/favourite.pngbin0 -> 364 bytes
-rw-r--r--ooo_custom_images/industrial/sfx2/res/favourite_big.pngbin0 -> 1033 bytes
-rw-r--r--ooo_custom_images/industrial/sfx2/res/hlpbookclosed.pngbin0 -> 625 bytes
-rw-r--r--ooo_custom_images/industrial/sfx2/res/hlpbookopen.pngbin0 -> 691 bytes
-rw-r--r--ooo_custom_images/industrial/sfx2/res/hlpdoc.pngbin0 -> 457 bytes
-rw-r--r--ooo_custom_images/industrial/sfx2/res/indexoff_big.pngbin0 -> 643 bytes
-rw-r--r--ooo_custom_images/industrial/sfx2/res/indexoff_small.pngbin0 -> 371 bytes
-rw-r--r--ooo_custom_images/industrial/sfx2/res/indexon_big.pngbin0 -> 666 bytes
-rw-r--r--ooo_custom_images/industrial/sfx2/res/indexon_small.pngbin0 -> 368 bytes
-rw-r--r--ooo_custom_images/industrial/sfx2/res/ln02.pngbin0 -> 805 bytes
-rw-r--r--ooo_custom_images/industrial/sfx2/res/ln03.pngbin0 -> 805 bytes
-rw-r--r--ooo_custom_images/industrial/sfx2/res/ln04.pngbin0 -> 805 bytes
-rw-r--r--ooo_custom_images/industrial/sfx2/res/ln045.pngbin0 -> 1229 bytes
-rw-r--r--ooo_custom_images/industrial/sfx2/res/ln047.pngbin0 -> 1293 bytes
-rw-r--r--ooo_custom_images/industrial/sfx2/res/ln05.pngbin0 -> 804 bytes
-rw-r--r--ooo_custom_images/industrial/sfx2/res/ln052.pngbin0 -> 1191 bytes
-rw-r--r--ooo_custom_images/industrial/sfx2/res/ln057.pngbin0 -> 1122 bytes
-rw-r--r--ooo_custom_images/industrial/sfx2/res/ln075.pngbin0 -> 1099 bytes
-rw-r--r--ooo_custom_images/industrial/sfx2/res/ln078.pngbin0 -> 1499 bytes
-rw-r--r--ooo_custom_images/industrial/sfx2/res/ln095.pngbin0 -> 647 bytes
-rw-r--r--ooo_custom_images/industrial/starmath/res/lc30257.pngbin0 -> 671 bytes
-rw-r--r--ooo_custom_images/industrial/starmath/res/lc30258.pngbin0 -> 670 bytes
-rw-r--r--ooo_custom_images/industrial/starmath/res/lc30261.pngbin0 -> 300 bytes
-rw-r--r--ooo_custom_images/industrial/starmath/res/lc30264.pngbin0 -> 581 bytes
-rw-r--r--ooo_custom_images/industrial/starmath/res/lc30266.pngbin0 -> 578 bytes
-rw-r--r--ooo_custom_images/industrial/starmath/res/lc30267.pngbin0 -> 578 bytes
-rw-r--r--ooo_custom_images/industrial/starmath/res/lc30268.pngbin0 -> 870 bytes
-rw-r--r--ooo_custom_images/industrial/starmath/res/lc30269.pngbin0 -> 587 bytes
-rw-r--r--ooo_custom_images/industrial/starmath/res/lc30270.pngbin0 -> 659 bytes
-rw-r--r--ooo_custom_images/industrial/starmath/res/lc30271.pngbin0 -> 250 bytes
-rw-r--r--ooo_custom_images/industrial/starmath/res/lc30306.pngbin0 -> 535 bytes
-rw-r--r--ooo_custom_images/industrial/starmath/res/lc30307.pngbin0 -> 415 bytes
-rw-r--r--ooo_custom_images/industrial/starmath/res/lc30308.pngbin0 -> 351 bytes
-rw-r--r--ooo_custom_images/industrial/starmath/res/lc30309.pngbin0 -> 365 bytes
-rw-r--r--ooo_custom_images/industrial/starmath/res/sc30257.pngbin0 -> 530 bytes
-rw-r--r--ooo_custom_images/industrial/starmath/res/sc30258.pngbin0 -> 532 bytes
-rw-r--r--ooo_custom_images/industrial/starmath/res/sc30261.pngbin0 -> 124 bytes
-rw-r--r--ooo_custom_images/industrial/starmath/res/sc30264.pngbin0 -> 296 bytes
-rw-r--r--ooo_custom_images/industrial/starmath/res/sc30266.pngbin0 -> 307 bytes
-rw-r--r--ooo_custom_images/industrial/starmath/res/sc30267.pngbin0 -> 300 bytes
-rw-r--r--ooo_custom_images/industrial/starmath/res/sc30268.pngbin0 -> 253 bytes
-rw-r--r--ooo_custom_images/industrial/starmath/res/sc30269.pngbin0 -> 303 bytes
-rw-r--r--ooo_custom_images/industrial/starmath/res/sc30270.pngbin0 -> 283 bytes
-rw-r--r--ooo_custom_images/industrial/starmath/res/sc30271.pngbin0 -> 125 bytes
-rw-r--r--ooo_custom_images/industrial/starmath/res/sc30306.pngbin0 -> 438 bytes
-rw-r--r--ooo_custom_images/industrial/starmath/res/sc30307.pngbin0 -> 285 bytes
-rw-r--r--ooo_custom_images/industrial/starmath/res/sc30308.pngbin0 -> 253 bytes
-rw-r--r--ooo_custom_images/industrial/starmath/res/sc30309.pngbin0 -> 220 bytes
-rw-r--r--ooo_custom_images/industrial/svtools/res/back_large.pngbin0 -> 410 bytes
-rw-r--r--ooo_custom_images/industrial/svtools/res/back_small.pngbin0 -> 233 bytes
-rw-r--r--ooo_custom_images/industrial/svtools/res/folder.pngbin0 -> 327 bytes
-rw-r--r--ooo_custom_images/industrial/svtools/res/fp011.pngbin0 -> 475 bytes
-rw-r--r--ooo_custom_images/industrial/svtools/res/helpagent.pngbin0 -> 6600 bytes
-rw-r--r--ooo_custom_images/industrial/svtools/res/info_large.pngbin0 -> 377 bytes
-rw-r--r--ooo_custom_images/industrial/svtools/res/info_small.pngbin0 -> 248 bytes
-rw-r--r--ooo_custom_images/industrial/svtools/res/my_docs.pngbin0 -> 1445 bytes
-rw-r--r--ooo_custom_images/industrial/svtools/res/new_doc.pngbin0 -> 863 bytes
-rw-r--r--ooo_custom_images/industrial/svtools/res/preview_large.pngbin0 -> 457 bytes
-rw-r--r--ooo_custom_images/industrial/svtools/res/preview_small.pngbin0 -> 271 bytes
-rw-r--r--ooo_custom_images/industrial/svtools/res/samples.pngbin0 -> 1404 bytes
-rw-r--r--ooo_custom_images/industrial/svtools/res/template.pngbin0 -> 1212 bytes
-rw-r--r--ooo_custom_images/industrial/svtools/res/up_large.pngbin0 -> 769 bytes
-rw-r--r--ooo_custom_images/industrial/svtools/res/up_small.pngbin0 -> 383 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/3dgeo.pngbin0 -> 330 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/3dlight.pngbin0 -> 411 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/3drepres.pngbin0 -> 497 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/3dtextur.pngbin0 -> 180 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/apply.pngbin0 -> 211 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/cd01.pngbin0 -> 211 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/cd015.pngbin0 -> 373 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/cd016.pngbin0 -> 184 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/cd017.pngbin0 -> 197 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/cd018.pngbin0 -> 386 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/cd02.pngbin0 -> 679 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/cd020.pngbin0 -> 340 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/cd021.pngbin0 -> 338 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/cd025.pngbin0 -> 434 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/cd026.pngbin0 -> 286 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/cd05.pngbin0 -> 138 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/cd06.pngbin0 -> 190 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/cd07.pngbin0 -> 491 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/cd08.pngbin0 -> 411 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/color.pngbin0 -> 424 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/colordlg.pngbin0 -> 305 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/convrt3d.pngbin0 -> 702 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/doublesi.pngbin0 -> 157 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/filter3d.pngbin0 -> 196 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/galdefs.pngbin0 -> 257 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/galicon.pngbin0 -> 147 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/galimps.pngbin0 -> 257 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/gallist.pngbin0 -> 211 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/galnors.pngbin0 -> 257 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/galrdos.pngbin0 -> 257 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/id01.pngbin0 -> 211 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/id016.pngbin0 -> 324 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/id018.pngbin0 -> 204 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/id019.pngbin0 -> 421 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/id02.pngbin0 -> 390 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/id03.pngbin0 -> 599 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/id030.pngbin0 -> 373 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/id031.pngbin0 -> 184 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/id032.pngbin0 -> 197 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/id033.pngbin0 -> 386 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/id04.pngbin0 -> 139 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/id040.pngbin0 -> 340 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/id041.pngbin0 -> 338 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/id05.pngbin0 -> 190 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/id06.pngbin0 -> 491 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/id07.pngbin0 -> 411 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/id08.pngbin0 -> 408 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/invert3d.pngbin0 -> 182 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/lght2sid.pngbin0 -> 183 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/light.pngbin0 -> 439 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/lighton.pngbin0 -> 592 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/material.pngbin0 -> 581 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/modula3d.pngbin0 -> 534 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/normflat.pngbin0 -> 137 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/normobjs.pngbin0 -> 322 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/normsphe.pngbin0 -> 248 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/objspc3d.pngbin0 -> 290 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/parallel.pngbin0 -> 129 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/persp3d.pngbin0 -> 194 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/reload.pngbin0 -> 621 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/replac3d.pngbin0 -> 409 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/rotate3d.pngbin0 -> 808 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/shadow3d.pngbin0 -> 147 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/sphere3d.pngbin0 -> 334 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/tr10416.pngbin0 -> 2092 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/tr10432.pngbin0 -> 1496 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/tr10433.pngbin0 -> 1254 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/tr10434.pngbin0 -> 1357 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/tr10435.pngbin0 -> 1519 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/tr10436.pngbin0 -> 768 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/tr10437.pngbin0 -> 1186 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/tr10439.pngbin0 -> 1391 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/tr10447.pngbin0 -> 1604 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/tr10450.pngbin0 -> 1241 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/tr10452.pngbin0 -> 1109 bytes
-rw-r--r--ooo_custom_images/industrial/svx/res/tr10921.pngbin0 -> 1340 bytes
-rw-r--r--ooo_custom_images/industrial/sw/imglst/lc20556.pngbin0 -> 681 bytes
-rw-r--r--ooo_custom_images/industrial/sw/imglst/lc20557.pngbin0 -> 959 bytes
-rw-r--r--ooo_custom_images/industrial/sw/imglst/lc20558.pngbin0 -> 683 bytes
-rw-r--r--ooo_custom_images/industrial/sw/imglst/nc20000.pngbin0 -> 306 bytes
-rw-r--r--ooo_custom_images/industrial/sw/imglst/nc20001.pngbin0 -> 147 bytes
-rw-r--r--ooo_custom_images/industrial/sw/imglst/nc20002.pngbin0 -> 193 bytes
-rw-r--r--ooo_custom_images/industrial/sw/imglst/nc20003.pngbin0 -> 279 bytes
-rw-r--r--ooo_custom_images/industrial/sw/imglst/nc20004.pngbin0 -> 316 bytes
-rw-r--r--ooo_custom_images/industrial/sw/imglst/nc20005.pngbin0 -> 477 bytes
-rw-r--r--ooo_custom_images/industrial/sw/imglst/nc20006.pngbin0 -> 291 bytes
-rw-r--r--ooo_custom_images/industrial/sw/imglst/nc20007.pngbin0 -> 257 bytes
-rw-r--r--ooo_custom_images/industrial/sw/imglst/nc20008.pngbin0 -> 312 bytes
-rw-r--r--ooo_custom_images/industrial/sw/imglst/nc20009.pngbin0 -> 308 bytes
-rw-r--r--ooo_custom_images/industrial/sw/imglst/nc20010.pngbin0 -> 221 bytes
-rw-r--r--ooo_custom_images/industrial/sw/imglst/nc20011.pngbin0 -> 523 bytes
-rw-r--r--ooo_custom_images/industrial/sw/imglst/sc20171.pngbin0 -> 222 bytes
-rw-r--r--ooo_custom_images/industrial/sw/imglst/sc20172.pngbin0 -> 225 bytes
-rw-r--r--ooo_custom_images/industrial/sw/imglst/sc20173.pngbin0 -> 224 bytes
-rw-r--r--ooo_custom_images/industrial/sw/imglst/sc20174.pngbin0 -> 228 bytes
-rw-r--r--ooo_custom_images/industrial/sw/imglst/sc20175.pngbin0 -> 385 bytes
-rw-r--r--ooo_custom_images/industrial/sw/imglst/sc20177.pngbin0 -> 215 bytes
-rw-r--r--ooo_custom_images/industrial/sw/imglst/sc20179.pngbin0 -> 222 bytes
-rw-r--r--ooo_custom_images/industrial/sw/imglst/sc20182.pngbin0 -> 350 bytes
-rw-r--r--ooo_custom_images/industrial/sw/imglst/sc20183.pngbin0 -> 191 bytes
-rw-r--r--ooo_custom_images/industrial/sw/imglst/sc20186.pngbin0 -> 384 bytes
-rw-r--r--ooo_custom_images/industrial/sw/imglst/sc20233.pngbin0 -> 292 bytes
-rw-r--r--ooo_custom_images/industrial/sw/imglst/sc20234.pngbin0 -> 269 bytes
-rw-r--r--ooo_custom_images/industrial/sw/imglst/sc20235.pngbin0 -> 700 bytes
-rw-r--r--ooo_custom_images/industrial/sw/imglst/sc20236.pngbin0 -> 221 bytes
-rw-r--r--ooo_custom_images/industrial/sw/imglst/sc20238.pngbin0 -> 242 bytes
-rw-r--r--ooo_custom_images/industrial/sw/imglst/sc20239.pngbin0 -> 353 bytes
-rw-r--r--ooo_custom_images/industrial/sw/imglst/sc20244.pngbin0 -> 526 bytes
-rw-r--r--ooo_custom_images/industrial/sw/imglst/sc20245.pngbin0 -> 442 bytes
-rw-r--r--ooo_custom_images/industrial/sw/imglst/sc20246.pngbin0 -> 270 bytes
-rw-r--r--ooo_custom_images/industrial/sw/imglst/sc20247.pngbin0 -> 316 bytes
-rw-r--r--ooo_custom_images/industrial/sw/imglst/sc20248.pngbin0 -> 310 bytes
-rw-r--r--ooo_custom_images/industrial/sw/imglst/sc20249.pngbin0 -> 432 bytes
-rw-r--r--ooo_custom_images/industrial/sw/imglst/sc20556.pngbin0 -> 318 bytes
-rw-r--r--ooo_custom_images/industrial/sw/imglst/sc20557.pngbin0 -> 667 bytes
-rw-r--r--ooo_custom_images/industrial/sw/imglst/sc20558.pngbin0 -> 527 bytes
-rw-r--r--ooo_custom_images/industrial/sw/imglst/sf01.pngbin0 -> 215 bytes
-rw-r--r--ooo_custom_images/industrial/sw/imglst/sf02.pngbin0 -> 252 bytes
-rw-r--r--ooo_custom_images/industrial/sw/imglst/sf03.pngbin0 -> 223 bytes
-rw-r--r--ooo_custom_images/industrial/sw/imglst/sf04.pngbin0 -> 216 bytes
-rw-r--r--ooo_custom_images/industrial/sw/imglst/sf05.pngbin0 -> 217 bytes
-rw-r--r--ooo_custom_images/industrial/sw/imglst/sr20000.pngbin0 -> 190 bytes
-rw-r--r--ooo_custom_images/industrial/sw/imglst/sr20001.pngbin0 -> 181 bytes
-rw-r--r--ooo_custom_images/industrial/sw/imglst/sr20002.pngbin0 -> 147 bytes
-rw-r--r--ooo_custom_images/industrial/sw/imglst/sr20003.pngbin0 -> 205 bytes
-rw-r--r--ooo_custom_images/industrial/sw/imglst/sr20004.pngbin0 -> 383 bytes
-rw-r--r--ooo_custom_images/industrial/sw/imglst/sr20005.pngbin0 -> 523 bytes
-rw-r--r--ooo_custom_images/industrial/sw/imglst/sr20006.pngbin0 -> 267 bytes
-rw-r--r--ooo_custom_images/industrial/sw/imglst/sr20007.pngbin0 -> 291 bytes
-rw-r--r--ooo_custom_images/industrial/sw/imglst/sr20008.pngbin0 -> 477 bytes
-rw-r--r--ooo_custom_images/industrial/sw/imglst/sr20009.pngbin0 -> 279 bytes
-rw-r--r--ooo_custom_images/industrial/sw/imglst/sr20010.pngbin0 -> 316 bytes
-rw-r--r--ooo_custom_images/industrial/sw/imglst/sr20011.pngbin0 -> 306 bytes
-rw-r--r--ooo_custom_images/industrial/sw/imglst/sr20013.pngbin0 -> 359 bytes
-rw-r--r--ooo_custom_images/industrial/sw/imglst/sr20014.pngbin0 -> 191 bytes
-rw-r--r--ooo_custom_images/industrial/sw/imglst/sr20015.pngbin0 -> 221 bytes
-rw-r--r--ooo_custom_images/industrial/sw/imglst/sr20016.pngbin0 -> 399 bytes
-rw-r--r--ooo_custom_images/industrial/sw/imglst/sr20017.pngbin0 -> 269 bytes
-rw-r--r--ooo_custom_images/industrial/sw/imglst/sr20018.pngbin0 -> 346 bytes
-rw-r--r--ooo_custom_images/industrial/sw/imglst/sr20019.pngbin0 -> 353 bytes
-rw-r--r--ooo_custom_images/industrial/vcl/source/src/msgbox.pngbin0 -> 7529 bytes
-rwxr-xr-xooo_custom_images/nologo/introabout/intro.pngbin0 -> 24288 bytes
-rw-r--r--ooo_custom_images/nologo_broffice/delzip0
-rw-r--r--ooo_custom_images/nologo_broffice/framework/res/backing.pngbin0 -> 12535 bytes
-rw-r--r--ooo_custom_images/nologo_broffice/framework/res/backing_hc.pngbin0 -> 6315 bytes
-rw-r--r--ooo_custom_images/nologo_broffice/framework/res/backing_right.pngbin0 -> 9942 bytes
-rw-r--r--ooo_custom_images/nologo_broffice/framework/res/backing_right_hc.pngbin0 -> 4658 bytes
-rw-r--r--ooo_custom_images/nologo_broffice/introabout/intro.pngbin0 -> 9412 bytes
-rwxr-xr-xooo_custom_images/nologo_broffice/makefile.mk20
-rw-r--r--ooo_custom_images/prj/build.lst4
-rw-r--r--ooo_custom_images/prj/d.lst2
-rw-r--r--ooo_custom_images/settings.pmk13
-rw-r--r--ooo_custom_images/tango/dbaccess/res/bookmark_sx.pngbin0 -> 317 bytes
-rw-r--r--ooo_custom_images/tango/dbaccess/res/bookmarkcontainer_sx.pngbin0 -> 311 bytes
-rw-r--r--ooo_custom_images/tango/dbaccess/res/db.pngbin0 -> 486 bytes
-rw-r--r--ooo_custom_images/tango/dbaccess/res/db.xcf.bz2bin0 -> 1664 bytes
-rw-r--r--ooo_custom_images/tango/dbaccess/res/db_deleted.pngbin0 -> 586 bytes
-rw-r--r--ooo_custom_images/tango/dbaccess/res/db_deleted.xcf.bz2bin0 -> 1465 bytes
-rw-r--r--ooo_custom_images/tango/dbaccess/res/db_modified.pngbin0 -> 509 bytes
-rw-r--r--ooo_custom_images/tango/dbaccess/res/db_modified.xcf.bz2bin0 -> 1544 bytes
-rw-r--r--ooo_custom_images/tango/dbaccess/res/db_new.pngbin0 -> 440 bytes
-rw-r--r--ooo_custom_images/tango/dbaccess/res/docedit_sc.pngbin0 -> 350 bytes
-rw-r--r--ooo_custom_images/tango/dbaccess/res/docopen_sc.pngbin0 -> 442 bytes
-rw-r--r--ooo_custom_images/tango/dbaccess/res/exerror.pngbin0 -> 588 bytes
-rw-r--r--ooo_custom_images/tango/dbaccess/res/exinfo.pngbin0 -> 680 bytes
-rw-r--r--ooo_custom_images/tango/dbaccess/res/exwarning.pngbin0 -> 427 bytes
-rw-r--r--ooo_custom_images/tango/dbaccess/res/formnew_sc.pngbin0 -> 329 bytes
-rw-r--r--ooo_custom_images/tango/dbaccess/res/forms_32.pngbin0 -> 675 bytes
-rw-r--r--ooo_custom_images/tango/dbaccess/res/forms_32.xcf.bz2bin0 -> 1437 bytes
-rw-r--r--ooo_custom_images/tango/dbaccess/res/lc010.pngbin0 -> 537 bytes
-rw-r--r--ooo_custom_images/tango/dbaccess/res/lc011.pngbin0 -> 816 bytes
-rw-r--r--ooo_custom_images/tango/dbaccess/res/lc011.xcf.bz2bin0 -> 1799 bytes
-rw-r--r--ooo_custom_images/tango/dbaccess/res/lc012.pngbin0 -> 969 bytes
-rw-r--r--ooo_custom_images/tango/dbaccess/res/lc012.xcf.bz2bin0 -> 2508 bytes
-rw-r--r--ooo_custom_images/tango/dbaccess/res/lc013.pngbin0 -> 788 bytes
-rw-r--r--ooo_custom_images/tango/dbaccess/res/lc013.xcf.bz2bin0 -> 2381 bytes
-rw-r--r--ooo_custom_images/tango/dbaccess/res/lc014.pngbin0 -> 334 bytes
-rw-r--r--ooo_custom_images/tango/dbaccess/res/lc014.svg2101
-rw-r--r--ooo_custom_images/tango/dbaccess/res/lc021.pngbin0 -> 565 bytes
-rw-r--r--ooo_custom_images/tango/dbaccess/res/lc021.xcf.bz2bin0 -> 1797 bytes
-rw-r--r--ooo_custom_images/tango/dbaccess/res/lc023.pngbin0 -> 531 bytes
-rw-r--r--ooo_custom_images/tango/dbaccess/res/lc05621.pngbin0 -> 394 bytes
-rw-r--r--ooo_custom_images/tango/dbaccess/res/lc05621.xcf.bz2bin0 -> 1027 bytes
-rw-r--r--ooo_custom_images/tango/dbaccess/res/lc09.pngbin0 -> 822 bytes
-rw-r--r--ooo_custom_images/tango/dbaccess/res/lc12252.pngbin0 -> 604 bytes
-rw-r--r--ooo_custom_images/tango/dbaccess/res/linkdrop_sc.pngbin0 -> 392 bytes
-rw-r--r--ooo_custom_images/tango/dbaccess/res/linkdrop_sc.xcf.bz2bin0 -> 977 bytes
-rw-r--r--ooo_custom_images/tango/dbaccess/res/linkedit_sc.pngbin0 -> 389 bytes
-rw-r--r--ooo_custom_images/tango/dbaccess/res/linkedit_sc.xcf.bz2bin0 -> 1508 bytes
-rw-r--r--ooo_custom_images/tango/dbaccess/res/linknew_sc.pngbin0 -> 436 bytes
-rw-r--r--ooo_custom_images/tango/dbaccess/res/linknew_sc.xcf.bz2bin0 -> 1752 bytes
-rw-r--r--ooo_custom_images/tango/dbaccess/res/queries_32.pngbin0 -> 789 bytes
-rw-r--r--ooo_custom_images/tango/dbaccess/res/querydrop_sc.pngbin0 -> 243 bytes
-rw-r--r--ooo_custom_images/tango/dbaccess/res/querydrop_sc.xcf.bz2bin0 -> 936 bytes
-rw-r--r--ooo_custom_images/tango/dbaccess/res/queryeditdesign_sc.pngbin0 -> 244 bytes
-rw-r--r--ooo_custom_images/tango/dbaccess/res/queryeditdesign_sc.xcf.bz2bin0 -> 1443 bytes
-rw-r--r--ooo_custom_images/tango/dbaccess/res/queryeditsql_sc.pngbin0 -> 364 bytes
-rw-r--r--ooo_custom_images/tango/dbaccess/res/queryeditsql_sc.xcf.bz2bin0 -> 1398 bytes
-rw-r--r--ooo_custom_images/tango/dbaccess/res/querynewdesign_sc.pngbin0 -> 360 bytes
-rw-r--r--ooo_custom_images/tango/dbaccess/res/querynewdesign_sc.xcf.bz2bin0 -> 1728 bytes
-rw-r--r--ooo_custom_images/tango/dbaccess/res/querynewsql_sc.pngbin0 -> 447 bytes
-rw-r--r--ooo_custom_images/tango/dbaccess/res/querynewsql_sc.xcf.bz2bin0 -> 1040 bytes
-rw-r--r--ooo_custom_images/tango/dbaccess/res/rename_sc.pngbin0 -> 137 bytes
-rw-r--r--ooo_custom_images/tango/dbaccess/res/reports_32.pngbin0 -> 968 bytes
-rw-r--r--ooo_custom_images/tango/dbaccess/res/sc010.pngbin0 -> 350 bytes
-rw-r--r--ooo_custom_images/tango/dbaccess/res/sc011.pngbin0 -> 436 bytes
-rw-r--r--ooo_custom_images/tango/dbaccess/res/sc012.pngbin0 -> 389 bytes
-rw-r--r--ooo_custom_images/tango/dbaccess/res/sc013.pngbin0 -> 393 bytes
-rw-r--r--ooo_custom_images/tango/dbaccess/res/sc014.pngbin0 -> 330 bytes
-rw-r--r--ooo_custom_images/tango/dbaccess/res/sc021.pngbin0 -> 244 bytes
-rw-r--r--ooo_custom_images/tango/dbaccess/res/sc023.pngbin0 -> 364 bytes
-rw-r--r--ooo_custom_images/tango/dbaccess/res/sc05621.pngbin0 -> 252 bytes
-rw-r--r--ooo_custom_images/tango/dbaccess/res/sc05621.xcf.bz2bin0 -> 765 bytes
-rw-r--r--ooo_custom_images/tango/dbaccess/res/sc09.pngbin0 -> 442 bytes
-rw-r--r--ooo_custom_images/tango/dbaccess/res/sc12252.pngbin0 -> 526 bytes
-rw-r--r--ooo_custom_images/tango/dbaccess/res/sc12252.xcf.bz2bin0 -> 1185 bytes
-rw-r--r--ooo_custom_images/tango/dbaccess/res/tabledrop_sc.pngbin0 -> 295 bytes
-rw-r--r--ooo_custom_images/tango/dbaccess/res/tabledrop_sc.xcf.bz2bin0 -> 1725 bytes
-rw-r--r--ooo_custom_images/tango/dbaccess/res/tableedit_sc.pngbin0 -> 314 bytes
-rw-r--r--ooo_custom_images/tango/dbaccess/res/tableedit_sc.xcf.bz2bin0 -> 1717 bytes
-rw-r--r--ooo_custom_images/tango/dbaccess/res/tablenew_sc.pngbin0 -> 408 bytes
-rw-r--r--ooo_custom_images/tango/dbaccess/res/tablenew_sc.xcf.bz2bin0 -> 1718 bytes
-rw-r--r--ooo_custom_images/tango/dbaccess/res/tables_32.pngbin0 -> 776 bytes
-rw-r--r--ooo_custom_images/tango/dbaccess/res/tables_32.xcf.bz2bin0 -> 2159 bytes
-rw-r--r--ooo_custom_images/tango/fpicker/res/fp011.pngbin0 -> 473 bytes
-rw-r--r--ooo_custom_images/tango/fpicker/res/fp014.pngbin0 -> 510 bytes
-rw-r--r--ooo_custom_images/tango/lc10713.pngbin0 -> 180 bytes
-rw-r--r--ooo_custom_images/tango/res/adrbook.pngbin0 -> 652 bytes
-rw-r--r--ooo_custom_images/tango/res/baswatr.pngbin0 -> 478 bytes
-rw-r--r--ooo_custom_images/tango/res/baswatr.xcf.bz2bin0 -> 1091 bytes
-rw-r--r--ooo_custom_images/tango/res/browse.pngbin0 -> 645 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/ar/lc_bold.pngbin0 -> 781 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/ar/lc_italic.pngbin0 -> 639 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/ar/lc_underline.pngbin0 -> 720 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/ar/lc_underlinedouble.pngbin0 -> 645 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/ar/sc_bold.pngbin0 -> 382 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/ar/sc_italic.pngbin0 -> 365 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/ar/sc_underline.pngbin0 -> 366 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/ar/sc_underlinedouble.pngbin0 -> 361 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/ca/lc_bold.pngbin0 -> 781 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/ca/lc_italic.pngbin0 -> 639 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/ca/lc_underline.pngbin0 -> 720 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/ca/lc_underlinedouble.pngbin0 -> 645 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/ca/sc_bold.pngbin0 -> 382 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/ca/sc_italic.pngbin0 -> 365 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/ca/sc_underline.pngbin0 -> 366 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/ca/sc_underlinedouble.pngbin0 -> 361 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/cs/lc_bold.pngbin0 -> 781 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/cs/lc_italic.pngbin0 -> 639 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/cs/lc_underline.pngbin0 -> 720 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/cs/lc_underlinedouble.pngbin0 -> 645 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/cs/sc_bold.pngbin0 -> 382 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/cs/sc_italic.pngbin0 -> 365 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/cs/sc_underline.pngbin0 -> 366 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/cs/sc_underlinedouble.pngbin0 -> 361 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/de/lc_bold.pngbin0 -> 781 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/de/lc_italic.pngbin0 -> 639 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/de/lc_underline.pngbin0 -> 720 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/de/lc_underlinedouble.pngbin0 -> 645 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/de/sc_bold.pngbin0 -> 382 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/de/sc_italic.pngbin0 -> 365 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/de/sc_underline.pngbin0 -> 366 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/de/sc_underlinedouble.pngbin0 -> 361 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/en-GB/lc_bold.pngbin0 -> 781 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/en-GB/lc_italic.pngbin0 -> 639 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/en-GB/lc_underline.pngbin0 -> 720 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/en-GB/lc_underlinedouble.pngbin0 -> 645 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/en-GB/sc_bold.pngbin0 -> 382 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/en-GB/sc_italic.pngbin0 -> 365 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/en-GB/sc_underline.pngbin0 -> 366 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/en-GB/sc_underlinedouble.pngbin0 -> 361 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/es/lc_bold.pngbin0 -> 781 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/es/lc_italic.pngbin0 -> 639 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/es/lc_underline.pngbin0 -> 720 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/es/lc_underlinedouble.pngbin0 -> 645 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/es/sc_bold.pngbin0 -> 382 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/es/sc_italic.pngbin0 -> 365 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/es/sc_underline.pngbin0 -> 366 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/es/sc_underlinedouble.pngbin0 -> 361 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/fr/lc_bold.pngbin0 -> 781 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/fr/lc_italic.pngbin0 -> 639 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/fr/lc_underline.pngbin0 -> 720 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/fr/lc_underlinedouble.pngbin0 -> 645 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/fr/sc_bold.pngbin0 -> 382 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/fr/sc_italic.pngbin0 -> 365 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/fr/sc_underline.pngbin0 -> 366 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/fr/sc_underlinedouble.pngbin0 -> 361 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/hu/lc_bold.pngbin0 -> 781 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/hu/lc_italic.pngbin0 -> 639 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/hu/lc_underline.pngbin0 -> 720 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/hu/lc_underlinedouble.pngbin0 -> 645 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/hu/sc_bold.pngbin0 -> 382 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/hu/sc_italic.pngbin0 -> 365 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/hu/sc_underline.pngbin0 -> 366 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/hu/sc_underlinedouble.pngbin0 -> 361 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/it/lc_bold.pngbin0 -> 781 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/it/lc_italic.pngbin0 -> 639 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/it/lc_underline.pngbin0 -> 720 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/it/lc_underlinedouble.pngbin0 -> 645 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/it/sc_bold.pngbin0 -> 382 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/it/sc_italic.pngbin0 -> 365 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/it/sc_underline.pngbin0 -> 366 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/it/sc_underlinedouble.pngbin0 -> 361 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/ja/lc_bold.pngbin0 -> 781 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/ja/lc_italic.pngbin0 -> 639 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/ja/lc_underline.pngbin0 -> 720 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/ja/lc_underlinedouble.pngbin0 -> 645 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/ja/sc_bold.pngbin0 -> 382 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/ja/sc_italic.pngbin0 -> 365 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/ja/sc_underline.pngbin0 -> 366 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/ja/sc_underlinedouble.pngbin0 -> 361 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/km/lc_bold.pngbin0 -> 781 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/km/lc_italic.pngbin0 -> 639 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/km/lc_underline.pngbin0 -> 720 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/km/lc_underlinedouble.pngbin0 -> 645 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/km/sc_bold.pngbin0 -> 382 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/km/sc_italic.pngbin0 -> 365 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/km/sc_underline.pngbin0 -> 366 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/km/sc_underlinedouble.pngbin0 -> 361 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/ko/lc_bold.pngbin0 -> 781 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/ko/lc_italic.pngbin0 -> 639 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/ko/lc_underline.pngbin0 -> 720 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/ko/lc_underlinedouble.pngbin0 -> 645 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/ko/sc_bold.pngbin0 -> 382 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/ko/sc_italic.pngbin0 -> 365 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/ko/sc_underline.pngbin0 -> 366 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/ko/sc_underlinedouble.pngbin0 -> 361 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_absoluterecord.pngbin0 -> 497 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_absoluterecord.xcf.bz2bin0 -> 938 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_addbookmark.pngbin0 -> 646 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_addbookmark.xcf.bz2bin0 -> 1387 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_adddatefield.pngbin0 -> 482 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_adddatefield.xcf.bz2bin0 -> 1196 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_adddirect.pngbin0 -> 385 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_adddirect.xcf.bz2bin0 -> 1769 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_adddirect32.pngbin0 -> 422 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_addfield.pngbin0 -> 496 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_addfield.xcf.bz2bin0 -> 1266 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_addtable.pngbin0 -> 546 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_addtable.xcf.bz2bin0 -> 1467 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_addwatch.pngbin0 -> 449 bytes
-rwxr-xr-xooo_custom_images/tango/res/commandimagelist/lc_adjust.pngbin0 -> 999 bytes
-rwxr-xr-xooo_custom_images/tango/res/commandimagelist/lc_adjust.xcf.bz2bin0 -> 1974 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_advancedmode.pngbin0 -> 658 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_alignblock.pngbin0 -> 489 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_alignblock.xcf.bz2bin0 -> 1143 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_alignbottom.pngbin0 -> 439 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_alignbottom.xcf.bz2bin0 -> 1045 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_aligncenter.pngbin0 -> 541 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_aligndown.pngbin0 -> 472 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_alignhorizontalcenter.pngbin0 -> 516 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_alignhorizontalcenter.xcf.bz2bin0 -> 1183 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_alignleft.pngbin0 -> 502 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_alignleft.xcf.bz2bin0 -> 1188 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_alignmiddle.pngbin0 -> 553 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_alignright.pngbin0 -> 502 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_alignright.xcf.bz2bin0 -> 1169 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_aligntop.pngbin0 -> 464 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_aligntop.xcf.bz2bin0 -> 1057 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_alignup.pngbin0 -> 509 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_alignvcenter.pngbin0 -> 454 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_alignvcenter.xcf.bz2bin0 -> 1130 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_alignverticalcenter.pngbin0 -> 454 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_animationeffects.pngbin0 -> 459 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_animationmode.pngbin0 -> 925 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_animationobjects.pngbin0 -> 1159 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_apply.pngbin0 -> 1435 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_arc.pngbin0 -> 319 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_arrowshapes.chevron.pngbin0 -> 793 bytes
-rwxr-xr-xooo_custom_images/tango/res/commandimagelist/lc_arrowshapes.chevron.svg182
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_arrowshapes.circular-arrow.pngbin0 -> 1030 bytes
-rwxr-xr-xooo_custom_images/tango/res/commandimagelist/lc_arrowshapes.circular-arrow.svg124
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_autoformat.pngbin0 -> 862 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_backcolor.pngbin0 -> 851 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_backgroundcolor.pngbin0 -> 808 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_bold.pngbin0 -> 781 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_bold.xcf.bz2bin0 -> 1789 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_cancel.pngbin0 -> 1119 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_centerpara.pngbin0 -> 516 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_charfontname.pngbin0 -> 868 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_charfontname.xcf.bz2bin0 -> 1761 bytes
-rwxr-xr-xooo_custom_images/tango/res/commandimagelist/lc_closewin.pngbin0 -> 418 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_color.pngbin0 -> 1016 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_commontaskbarvisible.pngbin0 -> 862 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_copy.pngbin0 -> 564 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_copy.xcf.bz2bin0 -> 1730 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_customanimation.pngbin0 -> 1158 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_cut.pngbin0 -> 669 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_cut.xcf.bz2bin0 -> 2928 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_decrementindent.pngbin0 -> 559 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_decrementindent.xcf.bz2bin0 -> 1359 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_defaultbullet.pngbin0 -> 554 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_defaultbullet.xcf.bz2bin0 -> 1317 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_defaultnumbering.pngbin0 -> 574 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_defaultnumbering.xcf.bz2bin0 -> 1643 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_delete.pngbin0 -> 984 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_delete.xcf.bz2bin0 -> 1915 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_designerdialog.pngbin0 -> 390 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_dia.pngbin0 -> 459 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_diaauto.pngbin0 -> 460 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_diaeffect.pngbin0 -> 460 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_diagramtype.pngbin0 -> 708 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_diaspeed.pngbin0 -> 460 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_diatime.pngbin0 -> 460 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_drawchart.pngbin0 -> 1076 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_duplicatepage.pngbin0 -> 588 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_editdoc.pngbin0 -> 608 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_editdoc.xcf.bz2bin0 -> 1729 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_editheaderandfooter.pngbin0 -> 514 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_editheaderandfooter.xcf.bz2bin0 -> 2187 bytes
-rwxr-xr-xooo_custom_images/tango/res/commandimagelist/lc_ellipse.pngbin0 -> 903 bytes
-rwxr-xr-xooo_custom_images/tango/res/commandimagelist/lc_ellipsecut.pngbin0 -> 828 bytes
-rwxr-xr-xooo_custom_images/tango/res/commandimagelist/lc_ellipsetoolbox.pngbin0 -> 903 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_expandpage.pngbin0 -> 665 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_exportdirecttopdf.pngbin0 -> 819 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_exportdirecttopdf.xcf.bz2bin0 -> 2270 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_exportto.pngbin0 -> 731 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_exportto.xcf.bz2bin0 -> 1627 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_extendedhelp.pngbin0 -> 467 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_extendedhelp.xcf.bz2bin0 -> 1170 bytes
-rwxr-xr-xooo_custom_images/tango/res/commandimagelist/lc_extrusionlightingfloater.pngbin0 -> 1087 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_fillstyle.pngbin0 -> 887 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_fontcolor-alt.pngbin0 -> 937 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_fontcolor-alt.xcf.bz2bin0 -> 2259 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_fontcolor.pngbin0 -> 1017 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_fontcolor.xcf.bz2bin0 -> 3353 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_fontheight.pngbin0 -> 730 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_fontheight.xcf.bz2bin0 -> 1625 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_formatarea.pngbin0 -> 1157 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_formatline.pngbin0 -> 887 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_formatpaintbrush.pngbin0 -> 915 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_formatpaintbrush.xcf.bz2bin0 -> 1773 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_formfiltered.pngbin0 -> 467 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_formfiltered.xcf.bz2bin0 -> 2034 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_gallery.pngbin0 -> 511 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_gallery.xcf.bz2bin0 -> 1627 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_goalseekdialog.pngbin0 -> 599 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_goalseekdialog.xcf.bz2bin0 -> 1285 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_graphicdraft.pngbin0 -> 829 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_grow.pngbin0 -> 719 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_grow.xcf.bz2bin0 -> 1634 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_help.pngbin0 -> 1446 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_helpindex.pngbin0 -> 1465 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_helpindex.xcf.bz2bin0 -> 2671 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_hyperlinkdialog.pngbin0 -> 1219 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_hyperlinkdialog.xcf.bz2bin0 -> 2588 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_importfromfile.pngbin0 -> 858 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_incrementindent.pngbin0 -> 563 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_incrementindent.xcf.bz2bin0 -> 1317 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_insertannotation.pngbin0 -> 563 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_insertannotation.xcf.bz2bin0 -> 1481 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_insertapplet.pngbin0 -> 892 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_insertapplet.xcf.bz2bin0 -> 1422 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_insertavmedia.pngbin0 -> 1299 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_insertavmedia.xcf.bz2bin0 -> 2762 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_insertbookmark.pngbin0 -> 646 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_insertdraw.pngbin0 -> 1288 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_insertdraw.xcf.bz2bin0 -> 2781 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_insertendnote.pngbin0 -> 529 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_insertendnote.xcf.bz2bin0 -> 2289 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_insertobjectchart.pngbin0 -> 1076 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_insertpage.pngbin0 -> 1057 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_insertpage.xcf.bz2bin0 -> 2191 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_insertspreadsheet.pngbin0 -> 422 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_insertspreadsheet.xcf.bz2bin0 -> 1105 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_insertsymbol.pngbin0 -> 674 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_inserttable.pngbin0 -> 438 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_inserttable.xcf.bz2bin0 -> 1133 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_italic.pngbin0 -> 639 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_italic.xcf.bz2bin0 -> 1497 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_justifypara.pngbin0 -> 488 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_leftpara.pngbin0 -> 502 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_linewidth.pngbin0 -> 888 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_mergecells.pngbin0 -> 591 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_mergecells.xcf.bz2bin0 -> 1500 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_mirror.pngbin0 -> 973 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_navigator.pngbin0 -> 684 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_newdoc.pngbin0 -> 764 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_newdoc.xcf.bz2bin0 -> 1452 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_no.pngbin0 -> 1479 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_numberformatcurrency.pngbin0 -> 427 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_numberformatcurrency.xcf.bz2bin0 -> 1102 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_numberformatdate.pngbin0 -> 601 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_numberformatdate.xcf.bz2bin0 -> 1569 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_ok.pngbin0 -> 1015 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_open.pngbin0 -> 731 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_open.xcf.bz2bin0 -> 1963 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_openurl.pngbin0 -> 1456 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_openurl.xcf.bz2bin0 -> 3057 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_outlinebullet.pngbin0 -> 555 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_overline.pngbin0 -> 822 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_paste.pngbin0 -> 875 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_paste.xcf.bz2bin0 -> 2745 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_presentation.pngbin0 -> 932 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_presentation.svg909
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_presentationlayout.pngbin0 -> 819 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_presentationlayout.xcf.bz2bin0 -> 1824 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_print.pngbin0 -> 678 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_print.xcf.bz2bin0 -> 2534 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_printdefault.pngbin0 -> 677 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_printersetup.pngbin0 -> 899 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_printersetup.xcf.bz2bin0 -> 2536 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_printpagepreview.pngbin0 -> 775 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_printpagepreview.xcf.bz2bin0 -> 3301 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_printpreview.pngbin0 -> 1021 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_printpreview.xcf.bz2bin0 -> 2593 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_quit.pngbin0 -> 732 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_quit.xcf.bz2bin0 -> 1746 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_recundo.pngbin0 -> 914 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_recundo.xcf.bz2bin0 -> 1944 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_redo.pngbin0 -> 671 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_reload.pngbin0 -> 1249 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_reload.xcf.bz2bin0 -> 2606 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_rightpara.pngbin0 -> 502 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_save.pngbin0 -> 790 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_save.xcf.bz2bin0 -> 1678 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_saveas.pngbin0 -> 921 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_saveas.xcf.bz2bin0 -> 2126 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_saveastemplate.pngbin0 -> 912 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_saveastemplate.xcf.bz2bin0 -> 2335 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_searchdialog.pngbin0 -> 848 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_searchdialog.xcf.bz2bin0 -> 2235 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_selectall.pngbin0 -> 568 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_selectall.xcf.bz2bin0 -> 2318 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_sendmail.pngbin0 -> 782 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_sendmail.xcf.bz2bin0 -> 1506 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_setborderstyle.pngbin0 -> 599 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_setborderstyle.xcf.bz2bin0 -> 1389 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_setdocumentproperties.pngbin0 -> 812 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_setdocumentproperties.xcf.bz2bin0 -> 1805 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_shrink.pngbin0 -> 713 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_shrink.xcf.bz2bin0 -> 1618 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_sortascending.pngbin0 -> 204 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_sortdescending.pngbin0 -> 180 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_sortdown.pngbin0 -> 180 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_sortup.pngbin0 -> 204 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_spelldialog.pngbin0 -> 401 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_spelling.pngbin0 -> 401 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_spelling.xcf.bz2bin0 -> 1352 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_spellonline.pngbin0 -> 415 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_spellonline.xcf.bz2bin0 -> 1397 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_styleapply.pngbin0 -> 1157 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_styleapply.xcf.bz2bin0 -> 2078 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_subscript.pngbin0 -> 741 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_subscript.xcf.bz2bin0 -> 1760 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_superscript.pngbin0 -> 735 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_superscript.xcf.bz2bin0 -> 1743 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_symbolcatalogue.pngbin0 -> 675 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_textdirectionlefttoright.pngbin0 -> 750 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_textdirectionlefttoright.xcf.bz2bin0 -> 1709 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_textdirectiontoptobottom.pngbin0 -> 777 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_textdirectiontoptobottom.xcf.bz2bin0 -> 1833 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_togglemergecells.pngbin0 -> 588 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_underline.pngbin0 -> 720 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_underline.xcf.bz2bin0 -> 1549 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_underlinedouble.pngbin0 -> 645 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_underlinedouble.xcf.bz2bin0 -> 1585 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_undo.pngbin0 -> 857 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_viewdatasourcebrowser.pngbin0 -> 833 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_xlinecolor.pngbin0 -> 887 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_xlinestyle.pngbin0 -> 887 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_xlinestyle.xcf.bz2bin0 -> 1843 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_yes.pngbin0 -> 1443 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_zoom.pngbin0 -> 1126 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_zoom.xcf.bz2bin0 -> 1707 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_zoom100percent.pngbin0 -> 1076 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_zoom100percent.xcf.bz2bin0 -> 2560 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_zoomin.pngbin0 -> 1064 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_zoomin.xcf.bz2bin0 -> 2273 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_zoomminus.pngbin0 -> 1055 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_zoomobjects.pngbin0 -> 1215 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_zoomobjects.xcf.bz2bin0 -> 2650 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_zoomoptimal.pngbin0 -> 1152 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_zoomoptimal.xcf.bz2bin0 -> 2469 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_zoomout.pngbin0 -> 1056 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_zoomout.xcf.bz2bin0 -> 2315 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_zoompage.pngbin0 -> 1209 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_zoompage.xcf.bz2bin0 -> 3453 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_zoompagewidth.pngbin0 -> 1197 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_zoompagewidth.xcf.bz2bin0 -> 3720 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_zoompanning.pngbin0 -> 1032 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_zoomplus.pngbin0 -> 1064 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/lc_zoomtoolbox.pngbin0 -> 1126 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/nl/lc_bold.pngbin0 -> 781 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/nl/lc_italic.pngbin0 -> 639 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/nl/lc_underline.pngbin0 -> 720 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/nl/lc_underlinedouble.pngbin0 -> 645 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/nl/sc_bold.pngbin0 -> 382 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/nl/sc_italic.pngbin0 -> 365 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/nl/sc_underline.pngbin0 -> 366 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/nl/sc_underlinedouble.pngbin0 -> 361 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/pl/lc_bold.pngbin0 -> 781 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/pl/lc_italic.pngbin0 -> 639 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/pl/lc_underline.pngbin0 -> 720 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/pl/lc_underlinedouble.pngbin0 -> 645 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/pl/sc_bold.pngbin0 -> 382 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/pl/sc_italic.pngbin0 -> 365 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/pl/sc_underline.pngbin0 -> 366 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/pl/sc_underlinedouble.pngbin0 -> 361 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/pt-BR/lc_bold.pngbin0 -> 781 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/pt-BR/lc_italic.pngbin0 -> 639 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/pt-BR/lc_underline.pngbin0 -> 720 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/pt-BR/lc_underlinedouble.pngbin0 -> 645 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/pt-BR/sc_bold.pngbin0 -> 382 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/pt-BR/sc_italic.pngbin0 -> 365 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/pt-BR/sc_underline.pngbin0 -> 366 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/pt-BR/sc_underlinedouble.pngbin0 -> 361 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/pt/lc_bold.pngbin0 -> 781 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/pt/lc_italic.pngbin0 -> 639 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/pt/lc_underline.pngbin0 -> 720 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/pt/lc_underlinedouble.pngbin0 -> 645 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/pt/sc_bold.pngbin0 -> 382 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/pt/sc_italic.pngbin0 -> 365 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/pt/sc_underline.pngbin0 -> 366 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/pt/sc_underlinedouble.pngbin0 -> 361 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/ru/lc_bold.pngbin0 -> 781 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/ru/lc_italic.pngbin0 -> 639 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/ru/lc_underline.pngbin0 -> 720 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/ru/lc_underlinedouble.pngbin0 -> 645 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/ru/sc_bold.pngbin0 -> 382 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/ru/sc_italic.pngbin0 -> 365 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/ru/sc_underline.pngbin0 -> 366 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/ru/sc_underlinedouble.pngbin0 -> 361 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_adddirect.pngbin0 -> 297 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_adddirect.xcf.bz2bin0 -> 1412 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_alignblock.pngbin0 -> 232 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_alignblock.xcf.bz2bin0 -> 849 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_alignhorizontalcenter.pngbin0 -> 246 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_alignhorizontalcenter.xcf.bz2bin0 -> 871 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_alignleft.pngbin0 -> 249 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_alignleft.xcf.bz2bin0 -> 868 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_alignright.pngbin0 -> 248 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_alignright.xcf.bz2bin0 -> 868 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_animationobjects.pngbin0 -> 385 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_apply.pngbin0 -> 928 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_autoformat.pngbin0 -> 620 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_backcolor.pngbin0 -> 490 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_backgroundcolor.pngbin0 -> 461 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_bold.pngbin0 -> 382 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_bulletsandnumberingdialog.pngbin0 -> 284 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_bulletsandnumberingdialog.xcf.bz2bin0 -> 995 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_cancel.pngbin0 -> 794 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_centerpara.pngbin0 -> 246 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_charfontname.pngbin0 -> 484 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_charfontname.xcf.bz2bin0 -> 1313 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_choosemacro.pngbin0 -> 240 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_choosemacro.xcf.bz2bin0 -> 673 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_closewin.pngbin0 -> 250 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_color.pngbin0 -> 790 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_commontaskbarvisible.pngbin0 -> 620 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_copy.pngbin0 -> 336 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_customanimation.pngbin0 -> 384 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_cut.pngbin0 -> 622 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_decrementindent.pngbin0 -> 288 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_decrementindent.xcf.bz2bin0 -> 923 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_defaultbullet.pngbin0 -> 282 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_defaultbullet.xcf.bz2bin0 -> 956 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_defaultnumbering.pngbin0 -> 290 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_defaultnumbering.xcf.bz2bin0 -> 987 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_delete.pngbin0 -> 453 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_delete.xcf.bz2bin0 -> 1033 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_deletecolumns.pngbin0 -> 319 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_deletecolumns.xcf.bz2bin0 -> 1482 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_deleterows.pngbin0 -> 330 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_deleterows.xcf.bz2bin0 -> 1357 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_designerdialog.pngbin0 -> 245 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_diagramtype.pngbin0 -> 558 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_drawchart.pngbin0 -> 565 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_drawchart.xcf.bz2bin0 -> 1847 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_duplicatepage.pngbin0 -> 485 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_editdoc.pngbin0 -> 296 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_editdoc.xcf.bz2bin0 -> 1081 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_editheaderandfooter.pngbin0 -> 303 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_editheaderandfooter.xcf.bz2bin0 -> 1292 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_expandpage.pngbin0 -> 453 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_expandpage.xcf.bz2bin0 -> 1041 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_exportdirecttopdf.pngbin0 -> 432 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_exportdirecttopdf.xcf.bz2bin0 -> 1639 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_exportto.pngbin0 -> 405 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_exportto.xcf.bz2bin0 -> 1326 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_extendedhelp.pngbin0 -> 308 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_extendedhelp.xcf.bz2bin0 -> 850 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_fillstyle.pngbin0 -> 608 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_fontcolor.pngbin0 -> 790 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_fontcolor.xcf.bz2bin0 -> 2948 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_fontdialog.pngbin0 -> 288 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_fontdialog.xcf.bz2bin0 -> 928 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_fontheight.pngbin0 -> 400 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_fontheight.xcf.bz2bin0 -> 1209 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_formatarea.pngbin0 -> 485 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_formatline.pngbin0 -> 609 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_formatpaintbrush.pngbin0 -> 630 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_formatpaintbrush.xcf.bz2bin0 -> 1189 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_formfiltered.pngbin0 -> 274 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_formfiltered.xcf.bz2bin0 -> 880 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_framedialog.pngbin0 -> 298 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_framedialog.xcf.bz2bin0 -> 1233 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_gallery.pngbin0 -> 286 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_goalseekdialog.pngbin0 -> 352 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_goalseekdialog.xcf.bz2bin0 -> 1025 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_graphicdraft.pngbin0 -> 583 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_grow.pngbin0 -> 409 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_grow.xcf.bz2bin0 -> 1210 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_help.pngbin0 -> 950 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_helpindex.pngbin0 -> 774 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_helpindex.xcf.bz2bin0 -> 1519 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_hyperlinkdialog.pngbin0 -> 729 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_hyperlinkdialog.xcf.bz2bin0 -> 1825 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_importfromfile.pngbin0 -> 612 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_incrementindent.pngbin0 -> 288 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_incrementindent.xcf.bz2bin0 -> 935 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_insertannotation.pngbin0 -> 386 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_insertapplet.pngbin0 -> 538 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_insertapplet.xcf.bz2bin0 -> 951 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_insertavmedia.pngbin0 -> 460 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_insertavmedia.xcf.bz2bin0 -> 1173 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_insertbookmark.pngbin0 -> 366 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_insertbookmark.xcf.bz2bin0 -> 893 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_insertcellsright.pngbin0 -> 292 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_insertcellsright.xcf.bz2bin0 -> 1338 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_insertcolumns.pngbin0 -> 277 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_insertcolumns.xcf.bz2bin0 -> 1442 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_insertdraw.pngbin0 -> 731 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_insertdraw.xcf.bz2bin0 -> 1601 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_insertendnote.pngbin0 -> 288 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_insertendnote.xcf.bz2bin0 -> 1200 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_insertgraphic.pngbin0 -> 347 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_inserthyperlink.pngbin0 -> 776 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_insertimagecontrol.pngbin0 -> 438 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_insertimagecontrol.xcf.bz2bin0 -> 1419 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_insertobjctrl.pngbin0 -> 363 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_insertobject.pngbin0 -> 363 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_insertobject.xcf.bz2bin0 -> 1319 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_insertobjectchart.pngbin0 -> 566 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_insertobjectdialog.pngbin0 -> 363 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_insertobjectfloatingframe.pngbin0 -> 276 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_insertobjectfloatingframe.xcf.bz2bin0 -> 795 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_insertobjectstarmath.pngbin0 -> 361 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_insertobjectstarmath.xcf.bz2bin0 -> 1170 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_insertpage.pngbin0 -> 546 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_insertpage.xcf.bz2bin0 -> 1790 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_insertpagecountfield.pngbin0 -> 350 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_insertpagecountfield.xcf.bz2bin0 -> 1156 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_insertpagenumberfield.pngbin0 -> 373 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_insertpagenumberfield.xcf.bz2bin0 -> 1176 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_insertplugin.pngbin0 -> 312 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_insertplugin.xcf.bz2bin0 -> 775 bytes
-rwxr-xr-xooo_custom_images/tango/res/commandimagelist/sc_insertpushbutton.pngbin0 -> 183 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_insertreferencefield.pngbin0 -> 288 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_insertreferencefield.xcf.bz2bin0 -> 1012 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_insertrows.pngbin0 -> 285 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_insertrows.xcf.bz2bin0 -> 1334 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_insertsection.pngbin0 -> 258 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_insertsection.xcf.bz2bin0 -> 979 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_insertsound.pngbin0 -> 217 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_insertsound.xcf.bz2bin0 -> 878 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_insertspreadsheet.pngbin0 -> 264 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_insertspreadsheet.xcf.bz2bin0 -> 715 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_insertsymbol.pngbin0 -> 256 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_inserttable.pngbin0 -> 280 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_inserttextframe.pngbin0 -> 278 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_inserttextframe.xcf.bz2bin0 -> 1015 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_inserttimefield.pngbin0 -> 714 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_inserttimefield.xcf.bz2bin0 -> 1318 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_inserttitlefield.pngbin0 -> 362 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_inserttitlefield.xcf.bz2bin0 -> 1148 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_inserttopicfield.pngbin0 -> 335 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_inserttopicfield.xcf.bz2bin0 -> 977 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_insertvideo.pngbin0 -> 286 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_insertvideo.xcf.bz2bin0 -> 762 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_italic.pngbin0 -> 365 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_justifypara.pngbin0 -> 232 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_leftpara.pngbin0 -> 249 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_linewidth.pngbin0 -> 608 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_macrorecorder.pngbin0 -> 308 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_mergecells.pngbin0 -> 346 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_mergecells.xcf.bz2bin0 -> 996 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_mirror.pngbin0 -> 467 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_modifypage.pngbin0 -> 403 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_modifypage.xcf.bz2bin0 -> 1008 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_moduledialog.pngbin0 -> 336 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_moduledialog.xcf.bz2bin0 -> 1209 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_navigator.pngbin0 -> 355 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_newdoc.pngbin0 -> 308 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_no.pngbin0 -> 958 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_numberformatcurrency.pngbin0 -> 216 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_numberformatcurrency.xcf.bz2bin0 -> 679 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_numberformatdate.pngbin0 -> 319 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_numberformatdate.xcf.bz2bin0 -> 1038 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_ok.pngbin0 -> 596 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_open.pngbin0 -> 317 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_openurl.pngbin0 -> 908 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_openurl.xcf.bz2bin0 -> 2234 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_overline.pngbin0 -> 564 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_paragraphdialog.pngbin0 -> 268 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_paragraphdialog.xcf.bz2bin0 -> 902 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_paste.pngbin0 -> 471 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_presentation.pngbin0 -> 589 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_presentation.svg888
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_presentationlayout.pngbin0 -> 439 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_presentationlayout.xcf.bz2bin0 -> 1689 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_previewprintoptions.pngbin0 -> 452 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_previewprintoptions.xcf.bz2bin0 -> 1356 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_print.pngbin0 -> 382 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_print.xcf.bz2bin0 -> 813 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_printdefault.pngbin0 -> 382 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_printersetup.pngbin0 -> 453 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_printersetup.xcf.bz2bin0 -> 1823 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_printpagepreview.pngbin0 -> 402 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_printpagepreview.xcf.bz2bin0 -> 1600 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_printpreview.pngbin0 -> 447 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_printpreview.xcf.bz2bin0 -> 1259 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_quit.pngbin0 -> 374 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_quit.xcf.bz2bin0 -> 793 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_recundo.pngbin0 -> 473 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_recundo.xcf.bz2bin0 -> 1177 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_redo.pngbin0 -> 414 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_reload.pngbin0 -> 601 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_reload.xcf.bz2bin0 -> 2035 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_rightpara.pngbin0 -> 247 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_save.pngbin0 -> 379 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_save.xcf.bz2bin0 -> 865 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_saveas.pngbin0 -> 438 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_saveas.xcf.bz2bin0 -> 1378 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_saveastemplate.pngbin0 -> 467 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_saveastemplate.xcf.bz2bin0 -> 1327 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_searchdialog.pngbin0 -> 576 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_selectall.pngbin0 -> 338 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_selectall.xcf.bz2bin0 -> 1284 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_sendmail.pngbin0 -> 355 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_sendmail.xcf.bz2bin0 -> 875 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_setborderstyle.pngbin0 -> 391 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_setborderstyle.xcf.bz2bin0 -> 892 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_setdocumentproperties.pngbin0 -> 343 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_setdocumentproperties.xcf.bz2bin0 -> 1267 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_shrink.pngbin0 -> 407 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_shrink.xcf.bz2bin0 -> 1215 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_sortascending.pngbin0 -> 173 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_sortdescending.pngbin0 -> 172 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_sortdown.pngbin0 -> 172 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_sortup.pngbin0 -> 173 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_spacepara1.pngbin0 -> 243 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_spacepara1.xcf.bz2bin0 -> 841 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_spacepara15.pngbin0 -> 244 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_spacepara15.xcf.bz2bin0 -> 849 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_spacepara2.pngbin0 -> 246 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_spacepara2.xcf.bz2bin0 -> 848 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_spelldialog.pngbin0 -> 267 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_spelling.pngbin0 -> 267 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_spellonline.pngbin0 -> 283 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_starchartdialog.pngbin0 -> 564 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_styleapply.pngbin0 -> 485 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_styleapply.xcf.bz2bin0 -> 1414 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_stylewatercanmode.pngbin0 -> 487 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_subscript.pngbin0 -> 382 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_subscript.xcf.bz2bin0 -> 1274 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_superscript.pngbin0 -> 404 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_superscript.xcf.bz2bin0 -> 1282 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_symbolcatalogue.pngbin0 -> 256 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_textdirectionlefttoright.pngbin0 -> 421 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_textdirectionlefttoright.xcf.bz2bin0 -> 1387 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_textdirectiontoptobottom.pngbin0 -> 430 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_textdirectiontoptobottom.xcf.bz2bin0 -> 1459 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_togglemergecells.pngbin0 -> 346 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_underline.pngbin0 -> 366 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_underlinedouble.pngbin0 -> 361 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_undo.pngbin0 -> 456 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_viewdatasourcebrowser.pngbin0 -> 435 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_xlinecolor.pngbin0 -> 608 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_xlinestyle.pngbin0 -> 608 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_xlinestyle.xcf.bz2bin0 -> 1356 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_yes.pngbin0 -> 948 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_zoom.pngbin0 -> 791 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_zoom.xcf.bz2bin0 -> 1345 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_zoompanning.pngbin0 -> 502 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sc_zoomtoolbox.pngbin0 -> 791 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sk/lc_bold.pngbin0 -> 781 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sk/lc_italic.pngbin0 -> 639 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sk/lc_underline.pngbin0 -> 720 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sk/lc_underlinedouble.pngbin0 -> 645 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sk/sc_bold.pngbin0 -> 382 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sk/sc_italic.pngbin0 -> 365 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sk/sc_underline.pngbin0 -> 366 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sk/sc_underlinedouble.pngbin0 -> 361 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sl/lc_bold.pngbin0 -> 781 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sl/lc_italic.pngbin0 -> 639 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sl/lc_underline.pngbin0 -> 720 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sl/lc_underlinedouble.pngbin0 -> 645 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sl/sc_bold.pngbin0 -> 382 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sl/sc_italic.pngbin0 -> 365 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sl/sc_underline.pngbin0 -> 366 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/sl/sc_underlinedouble.pngbin0 -> 361 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/tr/lc_bold.pngbin0 -> 781 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/tr/lc_italic.pngbin0 -> 639 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/tr/lc_underline.pngbin0 -> 720 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/tr/lc_underlinedouble.pngbin0 -> 645 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/tr/sc_bold.pngbin0 -> 382 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/tr/sc_italic.pngbin0 -> 365 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/tr/sc_underline.pngbin0 -> 366 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/tr/sc_underlinedouble.pngbin0 -> 361 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/zh-CN/lc_bold.pngbin0 -> 781 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/zh-CN/lc_italic.pngbin0 -> 639 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/zh-CN/lc_underline.pngbin0 -> 720 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/zh-CN/lc_underlinedouble.pngbin0 -> 645 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/zh-CN/sc_bold.pngbin0 -> 382 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/zh-CN/sc_italic.pngbin0 -> 365 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/zh-CN/sc_underline.pngbin0 -> 366 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/zh-CN/sc_underlinedouble.pngbin0 -> 361 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/zh-TW/lc_bold.pngbin0 -> 781 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/zh-TW/lc_italic.pngbin0 -> 639 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/zh-TW/lc_underline.pngbin0 -> 720 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/zh-TW/lc_underlinedouble.pngbin0 -> 645 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/zh-TW/sc_bold.pngbin0 -> 382 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/zh-TW/sc_italic.pngbin0 -> 365 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/zh-TW/sc_underline.pngbin0 -> 366 bytes
-rw-r--r--ooo_custom_images/tango/res/commandimagelist/zh-TW/sc_underlinedouble.pngbin0 -> 361 bytes
-rw-r--r--ooo_custom_images/tango/res/fileopen.pngbin0 -> 360 bytes
-rw-r--r--ooo_custom_images/tango/res/foldercl.pngbin0 -> 405 bytes
-rw-r--r--ooo_custom_images/tango/res/folderop.pngbin0 -> 327 bytes
-rw-r--r--ooo_custom_images/tango/res/fp010.pngbin0 -> 435 bytes
-rw-r--r--ooo_custom_images/tango/res/fp015.pngbin0 -> 510 bytes
-rw-r--r--ooo_custom_images/tango/res/hldocntp.pngbin0 -> 1074 bytes
-rw-r--r--ooo_custom_images/tango/res/hldocntp.xcfbin0 -> 4603 bytes
-rw-r--r--ooo_custom_images/tango/res/hldoctp.pngbin0 -> 933 bytes
-rw-r--r--ooo_custom_images/tango/res/hldoctp.xcfbin0 -> 5530 bytes
-rw-r--r--ooo_custom_images/tango/res/hlinettp.pngbin0 -> 1655 bytes
-rw-r--r--ooo_custom_images/tango/res/hlmailtp.pngbin0 -> 1201 bytes
-rw-r--r--ooo_custom_images/tango/res/hlmailtp.xcf.bz2bin0 -> 2273 bytes
-rw-r--r--ooo_custom_images/tango/res/im30819.pngbin0 -> 622 bytes
-rw-r--r--ooo_custom_images/tango/res/im30819.xcf.bz2bin0 -> 1207 bytes
-rw-r--r--ooo_custom_images/tango/res/im30820.pngbin0 -> 367 bytes
-rw-r--r--ooo_custom_images/tango/res/im30821.pngbin0 -> 367 bytes
-rw-r--r--ooo_custom_images/tango/res/im30826.pngbin0 -> 301 bytes
-rw-r--r--ooo_custom_images/tango/res/lc05303.pngbin0 -> 760 bytes
-rw-r--r--ooo_custom_images/tango/res/lc05501.pngbin0 -> 561 bytes
-rw-r--r--ooo_custom_images/tango/res/lc05502.pngbin0 -> 875 bytes
-rw-r--r--ooo_custom_images/tango/res/lc05504.pngbin0 -> 738 bytes
-rw-r--r--ooo_custom_images/tango/res/lc05505.pngbin0 -> 707 bytes
-rw-r--r--ooo_custom_images/tango/res/lc05508.pngbin0 -> 1074 bytes
-rw-r--r--ooo_custom_images/tango/res/lc05509.pngbin0 -> 738 bytes
-rw-r--r--ooo_custom_images/tango/res/lc05539.pngbin0 -> 390 bytes
-rw-r--r--ooo_custom_images/tango/res/lc05555.pngbin0 -> 161 bytes
-rw-r--r--ooo_custom_images/tango/res/lc05556.pngbin0 -> 331 bytes
-rw-r--r--ooo_custom_images/tango/res/lc05596.pngbin0 -> 1184 bytes
-rw-r--r--ooo_custom_images/tango/res/lc05678.pngbin0 -> 1023 bytes
-rw-r--r--ooo_custom_images/tango/res/lc05700.pngbin0 -> 731 bytes
-rw-r--r--ooo_custom_images/tango/res/lc05701.pngbin0 -> 836 bytes
-rw-r--r--ooo_custom_images/tango/res/lc05710.pngbin0 -> 904 bytes
-rw-r--r--ooo_custom_images/tango/res/lc05711.pngbin0 -> 637 bytes
-rw-r--r--ooo_custom_images/tango/res/lc05961.pngbin0 -> 945 bytes
-rw-r--r--ooo_custom_images/tango/res/lc06300.pngbin0 -> 840 bytes
-rw-r--r--ooo_custom_images/tango/res/lc06301.pngbin0 -> 829 bytes
-rw-r--r--ooo_custom_images/tango/res/lc06302.pngbin0 -> 1143 bytes
-rw-r--r--ooo_custom_images/tango/res/lc06303.pngbin0 -> 747 bytes
-rw-r--r--ooo_custom_images/tango/res/lc06312.pngbin0 -> 539 bytes
-rw-r--r--ooo_custom_images/tango/res/lc10107.pngbin0 -> 413 bytes
-rw-r--r--ooo_custom_images/tango/res/lc10113.pngbin0 -> 859 bytes
-rw-r--r--ooo_custom_images/tango/res/lc10243.pngbin0 -> 641 bytes
-rw-r--r--ooo_custom_images/tango/res/lc10366.pngbin0 -> 684 bytes
-rw-r--r--ooo_custom_images/tango/res/lc10366.xcf.bz2bin0 -> 1901 bytes
-rw-r--r--ooo_custom_images/tango/res/lc10375.pngbin0 -> 426 bytes
-rw-r--r--ooo_custom_images/tango/res/lc10376.pngbin0 -> 489 bytes
-rw-r--r--ooo_custom_images/tango/res/lc10711.pngbin0 -> 682 bytes
-rw-r--r--ooo_custom_images/tango/res/lc10715.pngbin0 -> 541 bytes
-rw-r--r--ooo_custom_images/tango/res/lc10716.pngbin0 -> 633 bytes
-rw-r--r--ooo_custom_images/tango/res/lc10851.pngbin0 -> 590 bytes
-rw-r--r--ooo_custom_images/tango/res/lc10853.pngbin0 -> 1472 bytes
-rw-r--r--ooo_custom_images/tango/res/lc10854.pngbin0 -> 810 bytes
-rw-r--r--ooo_custom_images/tango/res/lc10863.pngbin0 -> 960 bytes
-rw-r--r--ooo_custom_images/tango/res/lc10863.xcf.bz2bin0 -> 1720 bytes
-rw-r--r--ooo_custom_images/tango/res/lc10864.pngbin0 -> 955 bytes
-rw-r--r--ooo_custom_images/tango/res/lc10864.xcf.bz2bin0 -> 1549 bytes
-rw-r--r--ooo_custom_images/tango/res/lc10865.pngbin0 -> 512 bytes
-rw-r--r--ooo_custom_images/tango/res/lc10865.xcf.bz2bin0 -> 1309 bytes
-rw-r--r--ooo_custom_images/tango/res/lc10866.pngbin0 -> 544 bytes
-rw-r--r--ooo_custom_images/tango/res/lc10867.pngbin0 -> 552 bytes
-rw-r--r--ooo_custom_images/tango/res/lc10868.pngbin0 -> 508 bytes
-rw-r--r--ooo_custom_images/tango/res/lc10869.pngbin0 -> 1098 bytes
-rw-r--r--ooo_custom_images/tango/res/lc10907.pngbin0 -> 568 bytes
-rw-r--r--ooo_custom_images/tango/res/lc10908.pngbin0 -> 553 bytes
-rw-r--r--ooo_custom_images/tango/res/lc10937.pngbin0 -> 1350 bytes
-rw-r--r--ooo_custom_images/tango/res/lc10937.xcf.bz2bin0 -> 3162 bytes
-rw-r--r--ooo_custom_images/tango/res/lc12201.pngbin0 -> 532 bytes
-rw-r--r--ooo_custom_images/tango/res/lc12203.pngbin0 -> 867 bytes
-rw-r--r--ooo_custom_images/tango/res/lc12231.pngbin0 -> 720 bytes
-rw-r--r--ooo_custom_images/tango/res/lc12235.pngbin0 -> 681 bytes
-rw-r--r--ooo_custom_images/tango/res/lc12236.pngbin0 -> 444 bytes
-rw-r--r--ooo_custom_images/tango/res/lc12237.pngbin0 -> 449 bytes
-rw-r--r--ooo_custom_images/tango/res/lc12238.pngbin0 -> 633 bytes
-rw-r--r--ooo_custom_images/tango/res/lo03123.pngbin0 -> 903 bytes
-rw-r--r--ooo_custom_images/tango/res/lo03123.svg1055
-rw-r--r--ooo_custom_images/tango/res/lo03126.pngbin0 -> 1086 bytes
-rw-r--r--ooo_custom_images/tango/res/lo03126.svg1056
-rw-r--r--ooo_custom_images/tango/res/lo03127.pngbin0 -> 1087 bytes
-rw-r--r--ooo_custom_images/tango/res/lo03129.pngbin0 -> 1837 bytes
-rw-r--r--ooo_custom_images/tango/res/lo03129.xcf.bz2bin0 -> 3757 bytes
-rw-r--r--ooo_custom_images/tango/res/lo03130.pngbin0 -> 1094 bytes
-rw-r--r--ooo_custom_images/tango/res/lo03139.pngbin0 -> 1178 bytes
-rw-r--r--ooo_custom_images/tango/res/lo03139.svg2867
-rw-r--r--ooo_custom_images/tango/res/lo03144.pngbin0 -> 502 bytes
-rw-r--r--ooo_custom_images/tango/res/lo03144.svg2225
-rw-r--r--ooo_custom_images/tango/res/lo03162.pngbin0 -> 820 bytes
-rw-r--r--ooo_custom_images/tango/res/lo03162.svg1350
-rw-r--r--ooo_custom_images/tango/res/lo03163.pngbin0 -> 585 bytes
-rw-r--r--ooo_custom_images/tango/res/lo03163.svg586
-rw-r--r--ooo_custom_images/tango/res/lo03216.pngbin0 -> 732 bytes
-rw-r--r--ooo_custom_images/tango/res/lo03216.svg2135
-rw-r--r--ooo_custom_images/tango/res/lo03226.pngbin0 -> 919 bytes
-rw-r--r--ooo_custom_images/tango/res/lo03226.svg2348
-rw-r--r--ooo_custom_images/tango/res/lo03227.pngbin0 -> 1266 bytes
-rw-r--r--ooo_custom_images/tango/res/lo03227.svg1381
-rw-r--r--ooo_custom_images/tango/res/lo03228.pngbin0 -> 1266 bytes
-rw-r--r--ooo_custom_images/tango/res/lo03242.pngbin0 -> 534 bytes
-rw-r--r--ooo_custom_images/tango/res/lo03242.svg2381
-rw-r--r--ooo_custom_images/tango/res/lx03123.pngbin0 -> 1094 bytes
-rw-r--r--ooo_custom_images/tango/res/lx03125.pngbin0 -> 1019 bytes
-rw-r--r--ooo_custom_images/tango/res/lx03126.pngbin0 -> 1089 bytes
-rw-r--r--ooo_custom_images/tango/res/lx03127.pngbin0 -> 1087 bytes
-rw-r--r--ooo_custom_images/tango/res/lx03128.pngbin0 -> 1003 bytes
-rw-r--r--ooo_custom_images/tango/res/lx03128.svg1054
-rw-r--r--ooo_custom_images/tango/res/lx03129.pngbin0 -> 1837 bytes
-rw-r--r--ooo_custom_images/tango/res/lx03130.pngbin0 -> 1093 bytes
-rw-r--r--ooo_custom_images/tango/res/lx03131.pngbin0 -> 1086 bytes
-rw-r--r--ooo_custom_images/tango/res/lx03132.pngbin0 -> 1086 bytes
-rw-r--r--ooo_custom_images/tango/res/lx03137.pngbin0 -> 1165 bytes
-rw-r--r--ooo_custom_images/tango/res/lx03137.svg520
-rw-r--r--ooo_custom_images/tango/res/lx03139.pngbin0 -> 972 bytes
-rw-r--r--ooo_custom_images/tango/res/lx03140.pngbin0 -> 1020 bytes
-rw-r--r--ooo_custom_images/tango/res/lx03140.svg658
-rw-r--r--ooo_custom_images/tango/res/lx03141.pngbin0 -> 942 bytes
-rw-r--r--ooo_custom_images/tango/res/lx03141.svg606
-rw-r--r--ooo_custom_images/tango/res/lx03144.pngbin0 -> 502 bytes
-rw-r--r--ooo_custom_images/tango/res/lx03145.pngbin0 -> 501 bytes
-rw-r--r--ooo_custom_images/tango/res/lx03150.pngbin0 -> 421 bytes
-rw-r--r--ooo_custom_images/tango/res/lx03158.pngbin0 -> 1019 bytes
-rw-r--r--ooo_custom_images/tango/res/lx03160.pngbin0 -> 1267 bytes
-rw-r--r--ooo_custom_images/tango/res/lx03161.pngbin0 -> 820 bytes
-rw-r--r--ooo_custom_images/tango/res/lx03162.pngbin0 -> 821 bytes
-rw-r--r--ooo_custom_images/tango/res/lx03163.pngbin0 -> 802 bytes
-rw-r--r--ooo_custom_images/tango/res/lx03189.pngbin0 -> 941 bytes
-rw-r--r--ooo_custom_images/tango/res/lx03216.pngbin0 -> 904 bytes
-rw-r--r--ooo_custom_images/tango/res/lx03216.svg566
-rw-r--r--ooo_custom_images/tango/res/lx03219.pngbin0 -> 1166 bytes
-rw-r--r--ooo_custom_images/tango/res/lx03226.pngbin0 -> 421 bytes
-rw-r--r--ooo_custom_images/tango/res/lx03227.pngbin0 -> 1267 bytes
-rw-r--r--ooo_custom_images/tango/res/lx03228.pngbin0 -> 1267 bytes
-rw-r--r--ooo_custom_images/tango/res/lx03241.pngbin0 -> 1095 bytes
-rw-r--r--ooo_custom_images/tango/res/lx03242.pngbin0 -> 429 bytes
-rw-r--r--ooo_custom_images/tango/res/lx03242.svg2291
-rw-r--r--ooo_custom_images/tango/res/lx03243.pngbin0 -> 1094 bytes
-rw-r--r--ooo_custom_images/tango/res/lx03244.pngbin0 -> 1095 bytes
-rw-r--r--ooo_custom_images/tango/res/lx03245.pngbin0 -> 1836 bytes
-rw-r--r--ooo_custom_images/tango/res/lx03246.pngbin0 -> 1268 bytes
-rw-r--r--ooo_custom_images/tango/res/lx03247.pngbin0 -> 502 bytes
-rw-r--r--ooo_custom_images/tango/res/lx03248.pngbin0 -> 421 bytes
-rw-r--r--ooo_custom_images/tango/res/lx03249.pngbin0 -> 905 bytes
-rw-r--r--ooo_custom_images/tango/res/lx03250.pngbin0 -> 1089 bytes
-rw-r--r--ooo_custom_images/tango/res/lx03251.pngbin0 -> 820 bytes
-rw-r--r--ooo_custom_images/tango/res/lx03252.pngbin0 -> 1267 bytes
-rw-r--r--ooo_custom_images/tango/res/lx03253.pngbin0 -> 906 bytes
-rw-r--r--ooo_custom_images/tango/res/lx03254.pngbin0 -> 1089 bytes
-rw-r--r--ooo_custom_images/tango/res/lx03255.pngbin0 -> 585 bytes
-rw-r--r--ooo_custom_images/tango/res/newdoc.pngbin0 -> 509 bytes
-rw-r--r--ooo_custom_images/tango/res/sc05303.pngbin0 -> 434 bytes
-rw-r--r--ooo_custom_images/tango/res/sc05500.pngbin0 -> 366 bytes
-rw-r--r--ooo_custom_images/tango/res/sc05500.xcf.bz2bin0 -> 1222 bytes
-rw-r--r--ooo_custom_images/tango/res/sc05501.pngbin0 -> 361 bytes
-rw-r--r--ooo_custom_images/tango/res/sc05502.pngbin0 -> 430 bytes
-rw-r--r--ooo_custom_images/tango/res/sc05504.pngbin0 -> 434 bytes
-rw-r--r--ooo_custom_images/tango/res/sc05505.pngbin0 -> 343 bytes
-rw-r--r--ooo_custom_images/tango/res/sc05508.pngbin0 -> 481 bytes
-rw-r--r--ooo_custom_images/tango/res/sc05508.xcf.bz2bin0 -> 1261 bytes
-rw-r--r--ooo_custom_images/tango/res/sc05509.pngbin0 -> 434 bytes
-rw-r--r--ooo_custom_images/tango/res/sc05539.pngbin0 -> 182 bytes
-rw-r--r--ooo_custom_images/tango/res/sc05554.pngbin0 -> 670 bytes
-rw-r--r--ooo_custom_images/tango/res/sc05555.pngbin0 -> 125 bytes
-rw-r--r--ooo_custom_images/tango/res/sc05556.pngbin0 -> 122 bytes
-rw-r--r--ooo_custom_images/tango/res/sc05596.pngbin0 -> 879 bytes
-rw-r--r--ooo_custom_images/tango/res/sc05596.svg1412
-rw-r--r--ooo_custom_images/tango/res/sc05678.pngbin0 -> 394 bytes
-rw-r--r--ooo_custom_images/tango/res/sc05710.pngbin0 -> 621 bytes
-rw-r--r--ooo_custom_images/tango/res/sc05711.pngbin0 -> 146 bytes
-rw-r--r--ooo_custom_images/tango/res/sc05961.pngbin0 -> 463 bytes
-rw-r--r--ooo_custom_images/tango/res/sc06300.pngbin0 -> 569 bytes
-rw-r--r--ooo_custom_images/tango/res/sc06301.pngbin0 -> 563 bytes
-rw-r--r--ooo_custom_images/tango/res/sc06302.pngbin0 -> 676 bytes
-rw-r--r--ooo_custom_images/tango/res/sc06303.pngbin0 -> 476 bytes
-rw-r--r--ooo_custom_images/tango/res/sc06312.pngbin0 -> 350 bytes
-rw-r--r--ooo_custom_images/tango/res/sc06312.xcf.bz2bin0 -> 1312 bytes
-rw-r--r--ooo_custom_images/tango/res/sc06331.pngbin0 -> 510 bytes
-rw-r--r--ooo_custom_images/tango/res/sc06694.pngbin0 -> 366 bytes
-rw-r--r--ooo_custom_images/tango/res/sc10108.pngbin0 -> 260 bytes
-rw-r--r--ooo_custom_images/tango/res/sc10113.pngbin0 -> 344 bytes
-rw-r--r--ooo_custom_images/tango/res/sc10116.pngbin0 -> 379 bytes
-rw-r--r--ooo_custom_images/tango/res/sc10243.pngbin0 -> 335 bytes
-rw-r--r--ooo_custom_images/tango/res/sc10366.pngbin0 -> 356 bytes
-rw-r--r--ooo_custom_images/tango/res/sc10375.pngbin0 -> 225 bytes
-rw-r--r--ooo_custom_images/tango/res/sc10376.pngbin0 -> 251 bytes
-rw-r--r--ooo_custom_images/tango/res/sc10711.pngbin0 -> 335 bytes
-rw-r--r--ooo_custom_images/tango/res/sc10715.pngbin0 -> 381 bytes
-rw-r--r--ooo_custom_images/tango/res/sc10716.pngbin0 -> 320 bytes
-rw-r--r--ooo_custom_images/tango/res/sc10851.pngbin0 -> 340 bytes
-rw-r--r--ooo_custom_images/tango/res/sc10853.pngbin0 -> 883 bytes
-rw-r--r--ooo_custom_images/tango/res/sc10854.pngbin0 -> 633 bytes
-rw-r--r--ooo_custom_images/tango/res/sc10863.pngbin0 -> 340 bytes
-rw-r--r--ooo_custom_images/tango/res/sc10864.pngbin0 -> 483 bytes
-rw-r--r--ooo_custom_images/tango/res/sc10864.xcf.bz2bin0 -> 1095 bytes
-rw-r--r--ooo_custom_images/tango/res/sc10865.pngbin0 -> 315 bytes
-rw-r--r--ooo_custom_images/tango/res/sc10866.pngbin0 -> 321 bytes
-rw-r--r--ooo_custom_images/tango/res/sc10867.pngbin0 -> 317 bytes
-rw-r--r--ooo_custom_images/tango/res/sc10868.pngbin0 -> 318 bytes
-rw-r--r--ooo_custom_images/tango/res/sc10869.pngbin0 -> 613 bytes
-rw-r--r--ooo_custom_images/tango/res/sc10869.xcf.bz2bin0 -> 1036 bytes
-rw-r--r--ooo_custom_images/tango/res/sc10907.pngbin0 -> 350 bytes
-rw-r--r--ooo_custom_images/tango/res/sc10908.pngbin0 -> 367 bytes
-rw-r--r--ooo_custom_images/tango/res/sc10937.pngbin0 -> 714 bytes
-rw-r--r--ooo_custom_images/tango/res/sc10937.xcf.bz2bin0 -> 1326 bytes
-rw-r--r--ooo_custom_images/tango/res/sc12201.pngbin0 -> 327 bytes
-rw-r--r--ooo_custom_images/tango/res/sc12203.pngbin0 -> 324 bytes
-rw-r--r--ooo_custom_images/tango/res/sc12203.xcf.bz2bin0 -> 885 bytes
-rw-r--r--ooo_custom_images/tango/res/sc12231.pngbin0 -> 400 bytes
-rw-r--r--ooo_custom_images/tango/res/sc12231.xcf.bz2bin0 -> 1282 bytes
-rw-r--r--ooo_custom_images/tango/res/sc12235.pngbin0 -> 317 bytes
-rw-r--r--ooo_custom_images/tango/res/sc12236.pngbin0 -> 240 bytes
-rw-r--r--ooo_custom_images/tango/res/sc12237.pngbin0 -> 209 bytes
-rw-r--r--ooo_custom_images/tango/res/sc12238.pngbin0 -> 361 bytes
-rw-r--r--ooo_custom_images/tango/res/sch06694.pngbin0 -> 366 bytes
-rw-r--r--ooo_custom_images/tango/res/sco206.pngbin0 -> 242 bytes
-rw-r--r--ooo_custom_images/tango/res/script.pngbin0 -> 233 bytes
-rw-r--r--ooo_custom_images/tango/res/so03123.pngbin0 -> 299 bytes
-rw-r--r--ooo_custom_images/tango/res/so03126.pngbin0 -> 535 bytes
-rw-r--r--ooo_custom_images/tango/res/so03127.pngbin0 -> 535 bytes
-rw-r--r--ooo_custom_images/tango/res/so03129.pngbin0 -> 499 bytes
-rw-r--r--ooo_custom_images/tango/res/so03130.pngbin0 -> 298 bytes
-rw-r--r--ooo_custom_images/tango/res/so03139.pngbin0 -> 423 bytes
-rw-r--r--ooo_custom_images/tango/res/so03139.xcf.bz2bin0 -> 1135 bytes
-rw-r--r--ooo_custom_images/tango/res/so03144.pngbin0 -> 346 bytes
-rw-r--r--ooo_custom_images/tango/res/so03162.pngbin0 -> 321 bytes
-rw-r--r--ooo_custom_images/tango/res/so03163.pngbin0 -> 189 bytes
-rw-r--r--ooo_custom_images/tango/res/so03163.xcf.bz2bin0 -> 660 bytes
-rw-r--r--ooo_custom_images/tango/res/so03216.pngbin0 -> 325 bytes
-rw-r--r--ooo_custom_images/tango/res/so03216.xcf.bz2bin0 -> 1301 bytes
-rw-r--r--ooo_custom_images/tango/res/so03226.pngbin0 -> 313 bytes
-rw-r--r--ooo_custom_images/tango/res/so03226.xcf.bz2bin0 -> 1167 bytes
-rw-r--r--ooo_custom_images/tango/res/so03227.pngbin0 -> 334 bytes
-rw-r--r--ooo_custom_images/tango/res/so03227.xcf.bz2bin0 -> 945 bytes
-rw-r--r--ooo_custom_images/tango/res/so03228.pngbin0 -> 334 bytes
-rw-r--r--ooo_custom_images/tango/res/so03242.pngbin0 -> 374 bytes
-rw-r--r--ooo_custom_images/tango/res/so03242.xcf.bz2bin0 -> 1136 bytes
-rw-r--r--ooo_custom_images/tango/res/sx03123.pngbin0 -> 299 bytes
-rw-r--r--ooo_custom_images/tango/res/sx03125.pngbin0 -> 504 bytes
-rw-r--r--ooo_custom_images/tango/res/sx03126.pngbin0 -> 535 bytes
-rw-r--r--ooo_custom_images/tango/res/sx03127.pngbin0 -> 535 bytes
-rw-r--r--ooo_custom_images/tango/res/sx03128.pngbin0 -> 341 bytes
-rw-r--r--ooo_custom_images/tango/res/sx03128.xcf.bz2bin0 -> 1265 bytes
-rw-r--r--ooo_custom_images/tango/res/sx03129.pngbin0 -> 486 bytes
-rw-r--r--ooo_custom_images/tango/res/sx03130.pngbin0 -> 298 bytes
-rw-r--r--ooo_custom_images/tango/res/sx03131.pngbin0 -> 535 bytes
-rw-r--r--ooo_custom_images/tango/res/sx03132.pngbin0 -> 535 bytes
-rw-r--r--ooo_custom_images/tango/res/sx03137.pngbin0 -> 406 bytes
-rw-r--r--ooo_custom_images/tango/res/sx03139.pngbin0 -> 424 bytes
-rw-r--r--ooo_custom_images/tango/res/sx03140.pngbin0 -> 503 bytes
-rw-r--r--ooo_custom_images/tango/res/sx03141.pngbin0 -> 361 bytes
-rw-r--r--ooo_custom_images/tango/res/sx03144.pngbin0 -> 346 bytes
-rw-r--r--ooo_custom_images/tango/res/sx03145.pngbin0 -> 346 bytes
-rw-r--r--ooo_custom_images/tango/res/sx03150.pngbin0 -> 330 bytes
-rw-r--r--ooo_custom_images/tango/res/sx03158.pngbin0 -> 503 bytes
-rw-r--r--ooo_custom_images/tango/res/sx03160.pngbin0 -> 334 bytes
-rw-r--r--ooo_custom_images/tango/res/sx03161.pngbin0 -> 321 bytes
-rw-r--r--ooo_custom_images/tango/res/sx03162.pngbin0 -> 321 bytes
-rw-r--r--ooo_custom_images/tango/res/sx03163.pngbin0 -> 320 bytes
-rw-r--r--ooo_custom_images/tango/res/sx03187.pngbin0 -> 238 bytes
-rw-r--r--ooo_custom_images/tango/res/sx03188.pngbin0 -> 204 bytes
-rw-r--r--ooo_custom_images/tango/res/sx03189.pngbin0 -> 361 bytes
-rw-r--r--ooo_custom_images/tango/res/sx03201.pngbin0 -> 175 bytes
-rw-r--r--ooo_custom_images/tango/res/sx03201.xcf.bz2bin0 -> 725 bytes
-rw-r--r--ooo_custom_images/tango/res/sx03202.pngbin0 -> 151 bytes
-rw-r--r--ooo_custom_images/tango/res/sx03202.xcf.bz2bin0 -> 654 bytes
-rw-r--r--ooo_custom_images/tango/res/sx03216.pngbin0 -> 308 bytes
-rw-r--r--ooo_custom_images/tango/res/sx03216.xcf.bz2bin0 -> 891 bytes
-rw-r--r--ooo_custom_images/tango/res/sx03219.pngbin0 -> 405 bytes
-rw-r--r--ooo_custom_images/tango/res/sx03226.pngbin0 -> 330 bytes
-rw-r--r--ooo_custom_images/tango/res/sx03227.pngbin0 -> 334 bytes
-rw-r--r--ooo_custom_images/tango/res/sx03228.pngbin0 -> 334 bytes
-rw-r--r--ooo_custom_images/tango/res/sx03241.pngbin0 -> 299 bytes
-rw-r--r--ooo_custom_images/tango/res/sx03242.pngbin0 -> 374 bytes
-rw-r--r--ooo_custom_images/tango/res/sx03243.pngbin0 -> 299 bytes
-rw-r--r--ooo_custom_images/tango/res/sx03244.pngbin0 -> 299 bytes
-rw-r--r--ooo_custom_images/tango/res/sx03245.pngbin0 -> 435 bytes
-rw-r--r--ooo_custom_images/tango/res/sx03245.xcf.bz2bin0 -> 1207 bytes
-rw-r--r--ooo_custom_images/tango/res/sx03246.pngbin0 -> 334 bytes
-rw-r--r--ooo_custom_images/tango/res/sx03247.pngbin0 -> 346 bytes
-rw-r--r--ooo_custom_images/tango/res/sx03248.pngbin0 -> 330 bytes
-rw-r--r--ooo_custom_images/tango/res/sx03249.pngbin0 -> 298 bytes
-rw-r--r--ooo_custom_images/tango/res/sx03250.pngbin0 -> 535 bytes
-rw-r--r--ooo_custom_images/tango/res/sx03251.pngbin0 -> 321 bytes
-rw-r--r--ooo_custom_images/tango/res/sx03252.pngbin0 -> 334 bytes
-rw-r--r--ooo_custom_images/tango/res/sx03253.pngbin0 -> 299 bytes
-rw-r--r--ooo_custom_images/tango/res/sx03254.pngbin0 -> 535 bytes
-rw-r--r--ooo_custom_images/tango/res/sx03255.pngbin0 -> 189 bytes
-rw-r--r--ooo_custom_images/tango/res/sx10768.pngbin0 -> 191 bytes
-rw-r--r--ooo_custom_images/tango/res/target.pngbin0 -> 633 bytes
-rw-r--r--ooo_custom_images/tango/sc/res/date.pngbin0 -> 165 bytes
-rw-r--r--ooo_custom_images/tango/sc/res/dropcopy.pngbin0 -> 356 bytes
-rw-r--r--ooo_custom_images/tango/sc/res/dropcopy.xcf.bz2bin0 -> 1257 bytes
-rw-r--r--ooo_custom_images/tango/sc/res/droplink.pngbin0 -> 257 bytes
-rw-r--r--ooo_custom_images/tango/sc/res/dropurl.pngbin0 -> 776 bytes
-rw-r--r--ooo_custom_images/tango/sc/res/dropurl.xcf.bz2bin0 -> 1832 bytes
-rw-r--r--ooo_custom_images/tango/sc/res/file.pngbin0 -> 361 bytes
-rw-r--r--ooo_custom_images/tango/sc/res/page.pngbin0 -> 311 bytes
-rw-r--r--ooo_custom_images/tango/sc/res/page.xcf.bz2bin0 -> 1010 bytes
-rw-r--r--ooo_custom_images/tango/sc/res/pages.pngbin0 -> 352 bytes
-rw-r--r--ooo_custom_images/tango/sc/res/pages.xcf.bz2bin0 -> 1130 bytes
-rw-r--r--ooo_custom_images/tango/sc/res/sf01.pngbin0 -> 325 bytes
-rw-r--r--ooo_custom_images/tango/sc/res/sf02.pngbin0 -> 358 bytes
-rw-r--r--ooo_custom_images/tango/sc/res/table.pngbin0 -> 111 bytes
-rw-r--r--ooo_custom_images/tango/sc/res/text.pngbin0 -> 456 bytes
-rw-r--r--ooo_custom_images/tango/sc/res/time.pngbin0 -> 715 bytes
-rw-r--r--ooo_custom_images/tango/sc10713.pngbin0 -> 172 bytes
-rw-r--r--ooo_custom_images/tango/sch/res/lc10242.pngbin0 -> 959 bytes
-rw-r--r--ooo_custom_images/tango/sch/res/lc10242.xcf.bz2bin0 -> 2028 bytes
-rw-r--r--ooo_custom_images/tango/sch/res/lc30514.pngbin0 -> 833 bytes
-rw-r--r--ooo_custom_images/tango/sch/res/lc30514.xcf.bz2bin0 -> 1381 bytes
-rw-r--r--ooo_custom_images/tango/sch/res/lc30528.pngbin0 -> 708 bytes
-rw-r--r--ooo_custom_images/tango/sch/res/lc30528.xcf.bz2bin0 -> 1801 bytes
-rw-r--r--ooo_custom_images/tango/sch/res/lc30529.pngbin0 -> 309 bytes
-rw-r--r--ooo_custom_images/tango/sch/res/lc30530.pngbin0 -> 596 bytes
-rw-r--r--ooo_custom_images/tango/sch/res/lc30530.xcf.bz2bin0 -> 1426 bytes
-rw-r--r--ooo_custom_images/tango/sch/res/lc30531.pngbin0 -> 248 bytes
-rw-r--r--ooo_custom_images/tango/sch/res/lc30532.pngbin0 -> 196 bytes
-rw-r--r--ooo_custom_images/tango/sch/res/lc30533.pngbin0 -> 268 bytes
-rw-r--r--ooo_custom_images/tango/sch/res/lc30534.pngbin0 -> 289 bytes
-rw-r--r--ooo_custom_images/tango/sch/res/lc30535.pngbin0 -> 272 bytes
-rw-r--r--ooo_custom_images/tango/sch/res/lc30535.xcf.bz2bin0 -> 922 bytes
-rw-r--r--ooo_custom_images/tango/sch/res/lc30536.pngbin0 -> 302 bytes
-rw-r--r--ooo_custom_images/tango/sch/res/lc30536.xcf.bz2bin0 -> 997 bytes
-rw-r--r--ooo_custom_images/tango/sch/res/lc30539.pngbin0 -> 474 bytes
-rw-r--r--ooo_custom_images/tango/sch/res/lc30586.pngbin0 -> 954 bytes
-rw-r--r--ooo_custom_images/tango/sch/res/lc30586.xcf.bz2bin0 -> 1608 bytes
-rw-r--r--ooo_custom_images/tango/sch/res/sc10242.pngbin0 -> 660 bytes
-rw-r--r--ooo_custom_images/tango/sch/res/sc10242.xcf.bz2bin0 -> 1973 bytes
-rw-r--r--ooo_custom_images/tango/sch/res/sc30514.pngbin0 -> 435 bytes
-rw-r--r--ooo_custom_images/tango/sch/res/sc30528.pngbin0 -> 558 bytes
-rw-r--r--ooo_custom_images/tango/sch/res/sc30529.pngbin0 -> 267 bytes
-rw-r--r--ooo_custom_images/tango/sch/res/sc30530.pngbin0 -> 425 bytes
-rw-r--r--ooo_custom_images/tango/sch/res/sc30531.pngbin0 -> 234 bytes
-rw-r--r--ooo_custom_images/tango/sch/res/sc30532.pngbin0 -> 97 bytes
-rw-r--r--ooo_custom_images/tango/sch/res/sc30533.pngbin0 -> 137 bytes
-rw-r--r--ooo_custom_images/tango/sch/res/sc30534.pngbin0 -> 165 bytes
-rw-r--r--ooo_custom_images/tango/sch/res/sc30535.pngbin0 -> 160 bytes
-rw-r--r--ooo_custom_images/tango/sch/res/sc30536.pngbin0 -> 195 bytes
-rw-r--r--ooo_custom_images/tango/sch/res/sc30539.pngbin0 -> 216 bytes
-rw-r--r--ooo_custom_images/tango/sch/res/sc30586.pngbin0 -> 625 bytes
-rw-r--r--ooo_custom_images/tango/sch/res/sc30586.xcf.bz2bin0 -> 1248 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/apply.pngbin0 -> 199 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/dlgass1.pngbin0 -> 18518 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/dlgass2.pngbin0 -> 16656 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/dlgass3.pngbin0 -> 17043 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/dlgass4.pngbin0 -> 15465 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/dlgass5.pngbin0 -> 17526 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/extras.pngbin0 -> 688 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/fadeout.pngbin0 -> 214 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/graphic.pngbin0 -> 268 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc05928.pngbin0 -> 862 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc10245.pngbin0 -> 670 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc10299.pngbin0 -> 401 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27008.pngbin0 -> 782 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27014.pngbin0 -> 799 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27015.pngbin0 -> 858 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27017.pngbin0 -> 1032 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27019.pngbin0 -> 675 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27022.pngbin0 -> 572 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27028.pngbin0 -> 293 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27031.pngbin0 -> 516 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27032.pngbin0 -> 479 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27036.pngbin0 -> 506 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27037.pngbin0 -> 558 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27046.pngbin0 -> 673 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27051.pngbin0 -> 369 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27054.pngbin0 -> 459 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27055.pngbin0 -> 459 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27056.pngbin0 -> 460 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27057.pngbin0 -> 459 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27058.pngbin0 -> 293 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27059.pngbin0 -> 925 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27060.pngbin0 -> 460 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27062.pngbin0 -> 1158 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27063.pngbin0 -> 459 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27064.pngbin0 -> 587 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27085.pngbin0 -> 973 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27090.pngbin0 -> 944 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27091.pngbin0 -> 760 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27095.pngbin0 -> 658 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27098.pngbin0 -> 1221 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27099.pngbin0 -> 1222 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27106.pngbin0 -> 412 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27107.pngbin0 -> 736 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27116.pngbin0 -> 878 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27117.pngbin0 -> 418 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27119.pngbin0 -> 310 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27120.pngbin0 -> 365 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27121.pngbin0 -> 372 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27122.pngbin0 -> 297 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27123.pngbin0 -> 328 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27124.pngbin0 -> 308 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27125.pngbin0 -> 274 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27126.pngbin0 -> 333 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27127.pngbin0 -> 370 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27128.pngbin0 -> 405 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27129.pngbin0 -> 284 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27130.pngbin0 -> 315 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27131.pngbin0 -> 296 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27132.pngbin0 -> 394 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27133.pngbin0 -> 407 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27134.pngbin0 -> 434 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27135.pngbin0 -> 442 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27136.pngbin0 -> 391 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27137.pngbin0 -> 417 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27138.pngbin0 -> 401 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27139.pngbin0 -> 340 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27140.pngbin0 -> 357 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27141.pngbin0 -> 405 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27142.pngbin0 -> 408 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27143.pngbin0 -> 373 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27144.pngbin0 -> 384 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27145.pngbin0 -> 401 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27146.pngbin0 -> 818 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27147.pngbin0 -> 869 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27148.pngbin0 -> 686 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27149.pngbin0 -> 589 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27150.pngbin0 -> 313 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27151.pngbin0 -> 787 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27152.pngbin0 -> 254 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27153.pngbin0 -> 196 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27154.pngbin0 -> 548 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27155.pngbin0 -> 801 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27155.xcf.bz2bin0 -> 1972 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27156.pngbin0 -> 715 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27156.xcf.bz2bin0 -> 1878 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27157.pngbin0 -> 757 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27157.xcf.bz2bin0 -> 2190 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27158.pngbin0 -> 168 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27159.pngbin0 -> 369 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27159.xcf.bz2bin0 -> 1150 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27168.pngbin0 -> 401 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27168.xcf.bz2bin0 -> 1121 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27169.pngbin0 -> 567 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27169.xcf.bz2bin0 -> 1678 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27170.pngbin0 -> 644 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27171.pngbin0 -> 202 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27172.pngbin0 -> 204 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27173.pngbin0 -> 202 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27174.pngbin0 -> 199 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27175.pngbin0 -> 178 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27176.pngbin0 -> 177 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27177.pngbin0 -> 178 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27178.pngbin0 -> 160 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27285.pngbin0 -> 561 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27285.xcf.bz2bin0 -> 1506 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27286.pngbin0 -> 549 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27286.xcf.bz2bin0 -> 1518 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27295.pngbin0 -> 503 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27296.pngbin0 -> 503 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27297.pngbin0 -> 1058 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27298.pngbin0 -> 833 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27299.pngbin0 -> 826 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27300.pngbin0 -> 644 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27300.xcf.bz2bin0 -> 2611 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27301.pngbin0 -> 1017 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27302.pngbin0 -> 329 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27302.xcf.bz2bin0 -> 1397 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27303.pngbin0 -> 831 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27303.xcf.bz2bin0 -> 2159 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27305.pngbin0 -> 384 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27305.xcf.bz2bin0 -> 1285 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27306.pngbin0 -> 422 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27306.xcf.bz2bin0 -> 1332 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27307.pngbin0 -> 423 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27308.pngbin0 -> 349 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27308.xcf.bz2bin0 -> 1271 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27309.pngbin0 -> 401 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27309.xcf.bz2bin0 -> 1322 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27310.pngbin0 -> 399 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27310.xcf.bz2bin0 -> 1334 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27311.pngbin0 -> 969 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27311.xcf.bz2bin0 -> 2666 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27312.pngbin0 -> 1021 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27312.xcf.bz2bin0 -> 1917 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27313.pngbin0 -> 964 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27313.xcf.bz2bin0 -> 3292 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27314.pngbin0 -> 591 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27314.xcf.bz2bin0 -> 1500 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27315.pngbin0 -> 580 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27315.xcf.bz2bin0 -> 1497 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27316.pngbin0 -> 568 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27316.xcf.bz2bin0 -> 1509 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27317.pngbin0 -> 620 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27317.xcf.bz2bin0 -> 1484 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27318.pngbin0 -> 1076 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27318.xcf.bz2bin0 -> 2017 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27322.pngbin0 -> 88 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27324.pngbin0 -> 215 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27326.pngbin0 -> 834 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27326.xcf.bz2bin0 -> 2007 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27328.pngbin0 -> 887 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27328.xcf.bz2bin0 -> 1718 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27340.pngbin0 -> 827 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27340.xcf.bz2bin0 -> 1526 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27342.pngbin0 -> 586 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27343.pngbin0 -> 664 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27343.xcf.bz2bin0 -> 2287 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27345.pngbin0 -> 539 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27345.xcf.bz2bin0 -> 1371 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27346.pngbin0 -> 592 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27346.xcf.bz2bin0 -> 1439 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27347.pngbin0 -> 597 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/lc27347.xcf.bz2bin0 -> 1449 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/nv01.pngbin0 -> 386 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/nv01.xcf.bz2bin0 -> 1265 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/nv010.pngbin0 -> 821 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/nv010.xcf.bz2bin0 -> 1938 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/nv02.pngbin0 -> 202 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/nv02.xcf.bz2bin0 -> 898 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/nv03.pngbin0 -> 298 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/nv04.pngbin0 -> 297 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/nv05.pngbin0 -> 300 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/nv06.pngbin0 -> 300 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/nv06.xcf.bz2bin0 -> 835 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/nv08.pngbin0 -> 343 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/nv08.xcf.bz2bin0 -> 1128 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/nv09.pngbin0 -> 257 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc05928.pngbin0 -> 620 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc05928.xcf.bz2bin0 -> 2270 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc10245.pngbin0 -> 235 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc10299.pngbin0 -> 275 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc10299.xcf.bz2bin0 -> 831 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27008.pngbin0 -> 414 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27008.xcf.bz2bin0 -> 1262 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27014.pngbin0 -> 506 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27014.xcf.bz2bin0 -> 1911 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27015.pngbin0 -> 612 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27015.xcf.bz2bin0 -> 1880 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27017.pngbin0 -> 498 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27017.xcf.bz2bin0 -> 2230 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27019.pngbin0 -> 256 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27019.xcf.bz2bin0 -> 824 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27022.pngbin0 -> 380 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27028.pngbin0 -> 147 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27028.xcf.bz2bin0 -> 589 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27031.pngbin0 -> 358 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27032.pngbin0 -> 311 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27036.pngbin0 -> 255 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27036.xcf.bz2bin0 -> 1610 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27037.pngbin0 -> 256 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27037.xcf.bz2bin0 -> 1022 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27046.pngbin0 -> 333 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27046.xcf.bz2bin0 -> 1129 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27051.pngbin0 -> 181 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27054.pngbin0 -> 164 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27054.xcf.bz2bin0 -> 684 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27055.pngbin0 -> 164 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27056.pngbin0 -> 164 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27057.pngbin0 -> 164 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27058.pngbin0 -> 147 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27059.pngbin0 -> 598 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27059.xcf.bz2bin0 -> 2115 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27060.pngbin0 -> 164 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27062.pngbin0 -> 384 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27063.pngbin0 -> 164 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27064.pngbin0 -> 485 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27064.xcf.bz2bin0 -> 1844 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27085.pngbin0 -> 467 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27085.xcf.bz2bin0 -> 1402 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27090.pngbin0 -> 447 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27090.xcf.bz2bin0 -> 1147 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27091.pngbin0 -> 280 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27091.xcf.bz2bin0 -> 897 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27095.pngbin0 -> 433 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27098.pngbin0 -> 501 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27098.xcf.bz2bin0 -> 1694 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27099.pngbin0 -> 583 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27099.xcf.bz2bin0 -> 1891 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27106.pngbin0 -> 483 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27106.xcf.bz2bin0 -> 852 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27107.pngbin0 -> 593 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27107.xcf.bz2bin0 -> 1476 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27116.pngbin0 -> 530 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27117.pngbin0 -> 223 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27119.pngbin0 -> 168 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27120.pngbin0 -> 174 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27121.pngbin0 -> 172 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27122.pngbin0 -> 180 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27123.pngbin0 -> 178 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27124.pngbin0 -> 173 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27125.pngbin0 -> 119 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27126.pngbin0 -> 177 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27127.pngbin0 -> 182 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27128.pngbin0 -> 183 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27129.pngbin0 -> 128 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27130.pngbin0 -> 167 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27131.pngbin0 -> 156 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27132.pngbin0 -> 189 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27133.pngbin0 -> 211 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27134.pngbin0 -> 209 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27135.pngbin0 -> 203 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27136.pngbin0 -> 189 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27137.pngbin0 -> 193 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27138.pngbin0 -> 173 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27139.pngbin0 -> 165 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27140.pngbin0 -> 184 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27141.pngbin0 -> 185 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27142.pngbin0 -> 186 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27143.pngbin0 -> 190 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27144.pngbin0 -> 192 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27145.pngbin0 -> 192 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27146.pngbin0 -> 580 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27147.pngbin0 -> 294 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27148.pngbin0 -> 381 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27148.xcf.bz2bin0 -> 1381 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27149.pngbin0 -> 358 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27149.xcf.bz2bin0 -> 1299 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27150.pngbin0 -> 217 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27151.pngbin0 -> 369 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27151.xcf.bz2bin0 -> 1059 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27152.pngbin0 -> 251 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27153.pngbin0 -> 194 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27154.pngbin0 -> 268 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27155.pngbin0 -> 395 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27155.xcf.bz2bin0 -> 1176 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27156.pngbin0 -> 352 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27156.xcf.bz2bin0 -> 1212 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27157.pngbin0 -> 378 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27157.xcf.bz2bin0 -> 1331 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27158.pngbin0 -> 141 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27159.pngbin0 -> 255 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27168.pngbin0 -> 224 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27169.pngbin0 -> 262 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27169.xcf.bz2bin0 -> 1189 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27170.pngbin0 -> 404 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27171.pngbin0 -> 121 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27172.pngbin0 -> 143 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27173.pngbin0 -> 121 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27174.pngbin0 -> 179 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27175.pngbin0 -> 189 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27176.pngbin0 -> 188 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27177.pngbin0 -> 160 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27178.pngbin0 -> 161 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27285.pngbin0 -> 267 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27285.xcf.bz2bin0 -> 943 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27286.pngbin0 -> 256 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27295.pngbin0 -> 317 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27296.pngbin0 -> 317 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27297.pngbin0 -> 732 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27298.pngbin0 -> 384 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27299.pngbin0 -> 536 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27300.pngbin0 -> 269 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27301.pngbin0 -> 551 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27302.pngbin0 -> 243 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27303.pngbin0 -> 400 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27305.pngbin0 -> 163 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27306.pngbin0 -> 167 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27307.pngbin0 -> 169 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27308.pngbin0 -> 147 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27309.pngbin0 -> 167 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27310.pngbin0 -> 162 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27311.pngbin0 -> 583 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27312.pngbin0 -> 536 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27313.pngbin0 -> 613 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27314.pngbin0 -> 160 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27315.pngbin0 -> 153 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27316.pngbin0 -> 180 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27317.pngbin0 -> 178 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27318.pngbin0 -> 316 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27322.pngbin0 -> 288 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27324.pngbin0 -> 92 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27326.pngbin0 -> 485 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27328.pngbin0 -> 535 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27340.pngbin0 -> 368 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27342.pngbin0 -> 341 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27343.pngbin0 -> 395 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27345.pngbin0 -> 294 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27346.pngbin0 -> 313 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sc27347.pngbin0 -> 318 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sf01.pngbin0 -> 255 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/imagelst/sf02.pngbin0 -> 427 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/invisibl.pngbin0 -> 178 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/objekt.pngbin0 -> 638 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/ole.pngbin0 -> 558 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/page.pngbin0 -> 330 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/pageobjs.pngbin0 -> 334 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/pipette.pngbin0 -> 277 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/playfull.pngbin0 -> 510 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/preview.pngbin0 -> 328 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/reihe.pngbin0 -> 202 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/sound.pngbin0 -> 289 bytes
-rw-r--r--ooo_custom_images/tango/sd/res/text.pngbin0 -> 399 bytes
-rw-r--r--ooo_custom_images/tango/svtools/res/back_large.pngbin0 -> 614 bytes
-rw-r--r--ooo_custom_images/tango/svtools/res/back_large.xcf.bz2bin0 -> 1332 bytes
-rw-r--r--ooo_custom_images/tango/svtools/res/back_small.pngbin0 -> 411 bytes
-rw-r--r--ooo_custom_images/tango/svtools/res/folder.pngbin0 -> 405 bytes
-rw-r--r--ooo_custom_images/tango/svtools/res/fp011.pngbin0 -> 530 bytes
-rw-r--r--ooo_custom_images/tango/svtools/res/fp011.xcf.bz2bin0 -> 1343 bytes
-rw-r--r--ooo_custom_images/tango/svtools/res/helpagent.pngbin0 -> 5352 bytes
-rw-r--r--ooo_custom_images/tango/svtools/res/helpagent.svg1209
-rw-r--r--ooo_custom_images/tango/svtools/res/info_large.pngbin0 -> 291 bytes
-rw-r--r--ooo_custom_images/tango/svtools/res/info_large.xcf.bz2bin0 -> 913 bytes
-rw-r--r--ooo_custom_images/tango/svtools/res/info_small.pngbin0 -> 169 bytes
-rw-r--r--ooo_custom_images/tango/svtools/res/info_small.xcf.bz2bin0 -> 672 bytes
-rw-r--r--ooo_custom_images/tango/svtools/res/my_docs.pngbin0 -> 1300 bytes
-rw-r--r--ooo_custom_images/tango/svtools/res/my_docs.xcf.bz2bin0 -> 3020 bytes
-rw-r--r--ooo_custom_images/tango/svtools/res/new_doc.pngbin0 -> 555 bytes
-rw-r--r--ooo_custom_images/tango/svtools/res/new_doc.xcf.bz2bin0 -> 1554 bytes
-rw-r--r--ooo_custom_images/tango/svtools/res/preview_large.pngbin0 -> 329 bytes
-rw-r--r--ooo_custom_images/tango/svtools/res/preview_large.xcf.bz2bin0 -> 980 bytes
-rw-r--r--ooo_custom_images/tango/svtools/res/preview_small.pngbin0 -> 223 bytes
-rw-r--r--ooo_custom_images/tango/svtools/res/preview_small.xcf.bz2bin0 -> 740 bytes
-rw-r--r--ooo_custom_images/tango/svtools/res/samples.pngbin0 -> 1196 bytes
-rw-r--r--ooo_custom_images/tango/svtools/res/samples.xcf.bz2bin0 -> 2643 bytes
-rw-r--r--ooo_custom_images/tango/svtools/res/template.pngbin0 -> 1223 bytes
-rw-r--r--ooo_custom_images/tango/svtools/res/template.xcf.bz2bin0 -> 3114 bytes
-rw-r--r--ooo_custom_images/tango/svtools/res/up_large.pngbin0 -> 649 bytes
-rw-r--r--ooo_custom_images/tango/svtools/res/up_large.xcf.bz2bin0 -> 1318 bytes
-rw-r--r--ooo_custom_images/tango/svtools/res/up_small.pngbin0 -> 431 bytes
-rw-r--r--ooo_custom_images/tango/svtools/res/up_small.xcf.bz2bin0 -> 966 bytes
-rw-r--r--ooo_custom_images/tango/vcl/source/src/msgbox.pngbin0 -> 5879 bytes
-rw-r--r--ooo_custom_images/tango/vcl/source/src/msgbox.xcf.bz2bin0 -> 7553 bytes
-rw-r--r--ooo_custom_images/tango/vcl/source/src/question.svg387
-rw-r--r--ooo_custom_images/target.pmk16
-rw-r--r--oovbaapi/genconstidl/ApiSymbols.dtd114
-rw-r--r--oovbaapi/genconstidl/access.api41368
-rw-r--r--oovbaapi/genconstidl/adodb.api6604
-rw-r--r--oovbaapi/genconstidl/api-to-idl.pl212
-rw-r--r--oovbaapi/genconstidl/dao.api6313
-rw-r--r--oovbaapi/genconstidl/excel.api109247
-rw-r--r--oovbaapi/genconstidl/makefile.mk67
-rw-r--r--oovbaapi/genconstidl/msforms.api11840
-rw-r--r--oovbaapi/genconstidl/oovbaconsts.xsl88
-rw-r--r--oovbaapi/genconstidl/powerpoint.api48000
-rw-r--r--oovbaapi/genconstidl/stdole.api233
-rw-r--r--oovbaapi/genconstidl/vba.api5697
-rw-r--r--oovbaapi/genconstidl/word.api99016
-rw-r--r--oovbaapi/ooo/vba/ControlProvider.idl51
-rw-r--r--oovbaapi/ooo/vba/XApplicationBase.idl63
-rw-r--r--oovbaapi/ooo/vba/XAssistant.idl57
-rw-r--r--oovbaapi/ooo/vba/XCollection.idl61
-rw-r--r--oovbaapi/ooo/vba/XCommandBar.idl59
-rw-r--r--oovbaapi/ooo/vba/XCommandBarButton.idl44
-rw-r--r--oovbaapi/ooo/vba/XCommandBarControl.idl59
-rw-r--r--oovbaapi/ooo/vba/XCommandBarControls.idl53
-rw-r--r--oovbaapi/ooo/vba/XCommandBarPopup.idl44
-rw-r--r--oovbaapi/ooo/vba/XCommandBars.idl53
-rw-r--r--oovbaapi/ooo/vba/XControlProvider.idl61
-rw-r--r--oovbaapi/ooo/vba/XDialogBase.idl55
-rw-r--r--oovbaapi/ooo/vba/XDialogsBase.idl57
-rw-r--r--oovbaapi/ooo/vba/XDocumentBase.idl62
-rw-r--r--oovbaapi/ooo/vba/XDocumentProperties.idl68
-rw-r--r--oovbaapi/ooo/vba/XDocumentProperty.idl103
-rw-r--r--oovbaapi/ooo/vba/XDocumentsBase.idl52
-rw-r--r--oovbaapi/ooo/vba/XErrObject.idl55
-rw-r--r--oovbaapi/ooo/vba/XFontBase.idl68
-rw-r--r--oovbaapi/ooo/vba/XGlobalsBase.idl50
-rw-r--r--oovbaapi/ooo/vba/XHelperInterface.idl68
-rw-r--r--oovbaapi/ooo/vba/XPageSetupBase.idl64
-rw-r--r--oovbaapi/ooo/vba/XPropValue.idl52
-rwxr-xr-xoovbaapi/ooo/vba/XVBAAppService.idl72
-rwxr-xr-xoovbaapi/ooo/vba/XVBADocService.idl72
-rw-r--r--oovbaapi/ooo/vba/XVBAToOOEventDescGen.idl46
-rw-r--r--oovbaapi/ooo/vba/XWindowBase.idl54
-rw-r--r--oovbaapi/ooo/vba/constants/makefile.mk61
-rw-r--r--oovbaapi/ooo/vba/excel/Globals.idl45
-rw-r--r--oovbaapi/ooo/vba/excel/Hyperlink.idl46
-rw-r--r--oovbaapi/ooo/vba/excel/Range.idl46
-rwxr-xr-xoovbaapi/ooo/vba/excel/SheetObject.idl131
-rwxr-xr-xoovbaapi/ooo/vba/excel/SheetObjects.idl150
-rw-r--r--oovbaapi/ooo/vba/excel/TextFrame.idl45
-rw-r--r--oovbaapi/ooo/vba/excel/Window.idl46
-rw-r--r--oovbaapi/ooo/vba/excel/Workbook.idl46
-rw-r--r--oovbaapi/ooo/vba/excel/Worksheet.idl50
-rw-r--r--oovbaapi/ooo/vba/excel/XApplication.idl102
-rw-r--r--oovbaapi/ooo/vba/excel/XAxes.idl56
-rw-r--r--oovbaapi/ooo/vba/excel/XAxis.idl259
-rw-r--r--oovbaapi/ooo/vba/excel/XAxisTitle.idl49
-rw-r--r--oovbaapi/ooo/vba/excel/XBorder.idl59
-rw-r--r--oovbaapi/ooo/vba/excel/XBorders.idl59
-rw-r--r--oovbaapi/ooo/vba/excel/XCharacters.idl62
-rw-r--r--oovbaapi/ooo/vba/excel/XChart.idl87
-rw-r--r--oovbaapi/ooo/vba/excel/XChartObject.idl61
-rw-r--r--oovbaapi/ooo/vba/excel/XChartObjects.idl60
-rw-r--r--oovbaapi/ooo/vba/excel/XChartTitle.idl50
-rw-r--r--oovbaapi/ooo/vba/excel/XCharts.idl60
-rw-r--r--oovbaapi/ooo/vba/excel/XComment.idl59
-rw-r--r--oovbaapi/ooo/vba/excel/XComments.idl55
-rw-r--r--oovbaapi/ooo/vba/excel/XDataLabel.idl59
-rw-r--r--oovbaapi/ooo/vba/excel/XDataLabels.idl56
-rw-r--r--oovbaapi/ooo/vba/excel/XDialog.idl52
-rw-r--r--oovbaapi/ooo/vba/excel/XDialogs.idl51
-rw-r--r--oovbaapi/ooo/vba/excel/XFont.idl59
-rw-r--r--oovbaapi/ooo/vba/excel/XFormat.idl135
-rw-r--r--oovbaapi/ooo/vba/excel/XFormatCondition.idl81
-rw-r--r--oovbaapi/ooo/vba/excel/XFormatConditions.idl68
-rw-r--r--oovbaapi/ooo/vba/excel/XGlobals.idl90
-rw-r--r--oovbaapi/ooo/vba/excel/XHPageBreak.idl52
-rw-r--r--oovbaapi/ooo/vba/excel/XHPageBreaks.idl67
-rw-r--r--oovbaapi/ooo/vba/excel/XHyperlink.idl64
-rwxr-xr-xoovbaapi/ooo/vba/excel/XHyperlinks.idl70
-rw-r--r--oovbaapi/ooo/vba/excel/XInterior.idl62
-rw-r--r--oovbaapi/ooo/vba/excel/XName.idl66
-rw-r--r--oovbaapi/ooo/vba/excel/XNames.idl54
-rw-r--r--oovbaapi/ooo/vba/excel/XOLEObject.idl63
-rw-r--r--oovbaapi/ooo/vba/excel/XOLEObjects.idl51
-rw-r--r--oovbaapi/ooo/vba/excel/XOutline.idl61
-rw-r--r--oovbaapi/ooo/vba/excel/XPageBreak.idl70
-rw-r--r--oovbaapi/ooo/vba/excel/XPageSetup.idl77
-rw-r--r--oovbaapi/ooo/vba/excel/XPane.idl54
-rw-r--r--oovbaapi/ooo/vba/excel/XPivotCache.idl57
-rw-r--r--oovbaapi/ooo/vba/excel/XPivotTable.idl61
-rw-r--r--oovbaapi/ooo/vba/excel/XPivotTables.idl59
-rw-r--r--oovbaapi/ooo/vba/excel/XRange.idl177
-rw-r--r--oovbaapi/ooo/vba/excel/XSeries.idl60
-rw-r--r--oovbaapi/ooo/vba/excel/XSeriesCollection.idl57
-rw-r--r--oovbaapi/ooo/vba/excel/XStyle.idl99
-rw-r--r--oovbaapi/ooo/vba/excel/XStyles.idl68
-rw-r--r--oovbaapi/ooo/vba/excel/XTextFrame.idl39
-rw-r--r--oovbaapi/ooo/vba/excel/XTitle.idl116
-rw-r--r--oovbaapi/ooo/vba/excel/XVPageBreak.idl51
-rw-r--r--oovbaapi/ooo/vba/excel/XVPageBreaks.idl68
-rw-r--r--oovbaapi/ooo/vba/excel/XValidation.idl68
-rw-r--r--oovbaapi/ooo/vba/excel/XWindow.idl95
-rw-r--r--oovbaapi/ooo/vba/excel/XWindows.idl56
-rw-r--r--oovbaapi/ooo/vba/excel/XWorkbook.idl69
-rw-r--r--oovbaapi/ooo/vba/excel/XWorkbooks.idl55
-rw-r--r--oovbaapi/ooo/vba/excel/XWorksheet.idl132
-rw-r--r--oovbaapi/ooo/vba/excel/XWorksheetFunction.idl65
-rw-r--r--oovbaapi/ooo/vba/excel/XWorksheets.idl56
-rw-r--r--oovbaapi/ooo/vba/excel/XlBuildInDialog.idl277
-rw-r--r--oovbaapi/ooo/vba/excel/makefile.mk110
-rw-r--r--oovbaapi/ooo/vba/makefile.mk68
-rw-r--r--oovbaapi/ooo/vba/msforms/MSFormReturnTypes.idl51
-rw-r--r--oovbaapi/ooo/vba/msforms/XButton.idl49
-rw-r--r--oovbaapi/ooo/vba/msforms/XColorFormat.idl43
-rw-r--r--oovbaapi/ooo/vba/msforms/XComboBox.idl58
-rw-r--r--oovbaapi/ooo/vba/msforms/XControl.idl74
-rw-r--r--oovbaapi/ooo/vba/msforms/XControls.idl55
-rw-r--r--oovbaapi/ooo/vba/msforms/XFillFormat.idl50
-rw-r--r--oovbaapi/ooo/vba/msforms/XGroupBox.idl48
-rw-r--r--oovbaapi/ooo/vba/msforms/XImage.idl48
-rw-r--r--oovbaapi/ooo/vba/msforms/XLabel.idl50
-rw-r--r--oovbaapi/ooo/vba/msforms/XLineFormat.idl57
-rw-r--r--oovbaapi/ooo/vba/msforms/XListBox.idl59
-rw-r--r--oovbaapi/ooo/vba/msforms/XMultiPage.idl50
-rw-r--r--oovbaapi/ooo/vba/msforms/XPages.idl53
-rw-r--r--oovbaapi/ooo/vba/msforms/XPictureFormat.idl45
-rw-r--r--oovbaapi/ooo/vba/msforms/XProgressBar.idl49
-rw-r--r--oovbaapi/ooo/vba/msforms/XRadioButton.idl50
-rw-r--r--oovbaapi/ooo/vba/msforms/XScrollBar.idl53
-rw-r--r--oovbaapi/ooo/vba/msforms/XShape.idl81
-rw-r--r--oovbaapi/ooo/vba/msforms/XShapeRange.idl71
-rw-r--r--oovbaapi/ooo/vba/msforms/XShapes.idl56
-rw-r--r--oovbaapi/ooo/vba/msforms/XSpinButton.idl51
-rw-r--r--oovbaapi/ooo/vba/msforms/XTextBox.idl52
-rw-r--r--oovbaapi/ooo/vba/msforms/XTextBoxShape.idl53
-rw-r--r--oovbaapi/ooo/vba/msforms/XTextFrame.idl47
-rw-r--r--oovbaapi/ooo/vba/msforms/XToggleButton.idl52
-rw-r--r--oovbaapi/ooo/vba/msforms/XUserForm.idl50
-rw-r--r--oovbaapi/ooo/vba/msforms/makefile.mk69
-rw-r--r--oovbaapi/ooo/vba/word/XAddin.idl58
-rw-r--r--oovbaapi/ooo/vba/word/XAddins.idl52
-rw-r--r--oovbaapi/ooo/vba/word/XApplication.idl67
-rw-r--r--oovbaapi/ooo/vba/word/XAutoTextEntries.idl52
-rw-r--r--oovbaapi/ooo/vba/word/XAutoTextEntry.idl56
-rw-r--r--oovbaapi/ooo/vba/word/XBookmark.idl58
-rw-r--r--oovbaapi/ooo/vba/word/XBookmarks.idl58
-rw-r--r--oovbaapi/ooo/vba/word/XBorder.idl56
-rw-r--r--oovbaapi/ooo/vba/word/XBorders.idl56
-rw-r--r--oovbaapi/ooo/vba/word/XDialog.idl52
-rw-r--r--oovbaapi/ooo/vba/word/XDialogs.idl51
-rw-r--r--oovbaapi/ooo/vba/word/XDocument.idl72
-rw-r--r--oovbaapi/ooo/vba/word/XDocuments.idl55
-rw-r--r--oovbaapi/ooo/vba/word/XField.idl44
-rw-r--r--oovbaapi/ooo/vba/word/XFields.idl54
-rw-r--r--oovbaapi/ooo/vba/word/XFind.idl84
-rw-r--r--oovbaapi/ooo/vba/word/XFont.idl55
-rw-r--r--oovbaapi/ooo/vba/word/XGlobals.idl59
-rw-r--r--oovbaapi/ooo/vba/word/XHeaderFooter.idl56
-rw-r--r--oovbaapi/ooo/vba/word/XOptions.idl65
-rw-r--r--oovbaapi/ooo/vba/word/XPageSetup.idl60
-rw-r--r--oovbaapi/ooo/vba/word/XPane.idl52
-rw-r--r--oovbaapi/ooo/vba/word/XPanes.idl52
-rw-r--r--oovbaapi/ooo/vba/word/XParagraph.idl52
-rw-r--r--oovbaapi/ooo/vba/word/XParagraphFormat.idl67
-rw-r--r--oovbaapi/ooo/vba/word/XParagraphs.idl52
-rw-r--r--oovbaapi/ooo/vba/word/XRange.idl75
-rw-r--r--oovbaapi/ooo/vba/word/XReplacement.idl51
-rw-r--r--oovbaapi/ooo/vba/word/XSection.idl55
-rw-r--r--oovbaapi/ooo/vba/word/XSections.idl54
-rw-r--r--oovbaapi/ooo/vba/word/XSelection.idl86
-rw-r--r--oovbaapi/ooo/vba/word/XStyle.idl55
-rw-r--r--oovbaapi/ooo/vba/word/XStyles.idl52
-rw-r--r--oovbaapi/ooo/vba/word/XSystem.idl53
-rw-r--r--oovbaapi/ooo/vba/word/XTable.idl78
-rw-r--r--oovbaapi/ooo/vba/word/XTables.idl71
-rw-r--r--oovbaapi/ooo/vba/word/XTemplate.idl53
-rw-r--r--oovbaapi/ooo/vba/word/XVariable.idl57
-rw-r--r--oovbaapi/ooo/vba/word/XVariables.idl54
-rw-r--r--oovbaapi/ooo/vba/word/XView.idl54
-rw-r--r--oovbaapi/ooo/vba/word/XWindow.idl59
-rw-r--r--oovbaapi/ooo/vba/word/XWrapFormat.idl45
-rw-r--r--oovbaapi/ooo/vba/word/makefile.mk86
-rw-r--r--oovbaapi/prj/build.lst9
-rw-r--r--oovbaapi/prj/d.lst15
-rw-r--r--oovbaapi/util/makefile.mk51
-rw-r--r--oovbaapi/util/makefile.pmk34
-rwxr-xr-xoowintool391
-rw-r--r--oox/inc/oox/core/binarycodec.hxx292
-rw-r--r--oox/inc/oox/core/binaryfilterbase.hxx62
-rw-r--r--oox/inc/oox/core/contexthandler.hxx117
-rw-r--r--oox/inc/oox/core/contexthandler2.hxx253
-rw-r--r--oox/inc/oox/core/fasttokenhandler.hxx65
-rw-r--r--oox/inc/oox/core/filterbase.hxx291
-rw-r--r--oox/inc/oox/core/filterdetect.hxx166
-rw-r--r--oox/inc/oox/core/fragmenthandler.hxx137
-rw-r--r--oox/inc/oox/core/fragmenthandler2.hxx115
-rw-r--r--oox/inc/oox/core/recordparser.hxx98
-rw-r--r--oox/inc/oox/core/relations.hxx102
-rw-r--r--oox/inc/oox/core/relationshandler.hxx61
-rw-r--r--oox/inc/oox/core/xmlfilterbase.hxx225
-rw-r--r--oox/inc/oox/dllapi.h39
-rw-r--r--oox/inc/oox/drawingml/chart/axiscontext.hxx127
-rw-r--r--oox/inc/oox/drawingml/chart/axisconverter.hxx71
-rw-r--r--oox/inc/oox/drawingml/chart/axismodel.hxx112
-rw-r--r--oox/inc/oox/drawingml/chart/chartcontextbase.hxx102
-rw-r--r--oox/inc/oox/drawingml/chart/chartconverter.hxx111
-rw-r--r--oox/inc/oox/drawingml/chart/chartdrawingfragment.hxx122
-rw-r--r--oox/inc/oox/drawingml/chart/chartspaceconverter.hxx64
-rw-r--r--oox/inc/oox/drawingml/chart/chartspacefragment.hxx62
-rw-r--r--oox/inc/oox/drawingml/chart/chartspacemodel.hxx78
-rw-r--r--oox/inc/oox/drawingml/chart/converterbase.hxx158
-rw-r--r--oox/inc/oox/drawingml/chart/datasourcecontext.hxx101
-rw-r--r--oox/inc/oox/drawingml/chart/datasourceconverter.hxx78
-rw-r--r--oox/inc/oox/drawingml/chart/datasourcemodel.hxx72
-rw-r--r--oox/inc/oox/drawingml/chart/modelbase.hxx141
-rw-r--r--oox/inc/oox/drawingml/chart/objectformatter.hxx173
-rw-r--r--oox/inc/oox/drawingml/chart/plotareacontext.hxx90
-rw-r--r--oox/inc/oox/drawingml/chart/plotareaconverter.hxx110
-rw-r--r--oox/inc/oox/drawingml/chart/plotareamodel.hxx94
-rw-r--r--oox/inc/oox/drawingml/chart/seriescontext.hxx273
-rw-r--r--oox/inc/oox/drawingml/chart/seriesconverter.hxx174
-rw-r--r--oox/inc/oox/drawingml/chart/seriesmodel.hxx244
-rw-r--r--oox/inc/oox/drawingml/chart/titlecontext.hxx90
-rw-r--r--oox/inc/oox/drawingml/chart/titleconverter.hxx113
-rw-r--r--oox/inc/oox/drawingml/chart/titlemodel.hxx96
-rw-r--r--oox/inc/oox/drawingml/chart/typegroupcontext.hxx171
-rw-r--r--oox/inc/oox/drawingml/chart/typegroupconverter.hxx205
-rw-r--r--oox/inc/oox/drawingml/chart/typegroupmodel.hxx103
-rw-r--r--oox/inc/oox/drawingml/clrscheme.hxx68
-rw-r--r--oox/inc/oox/drawingml/clrschemecontext.hxx68
-rw-r--r--oox/inc/oox/drawingml/color.hxx150
-rw-r--r--oox/inc/oox/drawingml/colorchoicecontext.hxx87
-rw-r--r--oox/inc/oox/drawingml/connectorshapecontext.hxx46
-rw-r--r--oox/inc/oox/drawingml/customshapegeometry.hxx77
-rw-r--r--oox/inc/oox/drawingml/customshapeproperties.hxx161
-rw-r--r--oox/inc/oox/drawingml/diagram/datamodelcontext.hxx54
-rw-r--r--oox/inc/oox/drawingml/diagram/diagram.hxx256
-rw-r--r--oox/inc/oox/drawingml/diagram/diagramfragmenthandler.hxx100
-rw-r--r--oox/inc/oox/drawingml/diagram/diagramlayoutatoms.hxx209
-rw-r--r--oox/inc/oox/drawingml/drawingmltypes.hxx188
-rw-r--r--oox/inc/oox/drawingml/embeddedwavaudiofile.hxx57
-rw-r--r--oox/inc/oox/drawingml/fillproperties.hxx204
-rw-r--r--oox/inc/oox/drawingml/fillpropertiesgroupcontext.hxx215
-rw-r--r--oox/inc/oox/drawingml/graphicshapecontext.hxx116
-rw-r--r--oox/inc/oox/drawingml/guidcontext.hxx49
-rw-r--r--oox/inc/oox/drawingml/lineproperties.hxx127
-rw-r--r--oox/inc/oox/drawingml/linepropertiescontext.hxx57
-rw-r--r--oox/inc/oox/drawingml/objectdefaultcontext.hxx49
-rw-r--r--oox/inc/oox/drawingml/shape.hxx218
-rw-r--r--oox/inc/oox/drawingml/shapecontext.hxx58
-rw-r--r--oox/inc/oox/drawingml/shapegroupcontext.hxx51
-rw-r--r--oox/inc/oox/drawingml/shapepropertiescontext.hxx49
-rw-r--r--oox/inc/oox/drawingml/shapestylecontext.hxx51
-rw-r--r--oox/inc/oox/drawingml/spdefcontext.hxx48
-rw-r--r--oox/inc/oox/drawingml/table/tablebackgroundstylecontext.hxx53
-rw-r--r--oox/inc/oox/drawingml/table/tablecell.hxx121
-rw-r--r--oox/inc/oox/drawingml/table/tablecellcontext.hxx54
-rw-r--r--oox/inc/oox/drawingml/table/tablecontext.hxx54
-rw-r--r--oox/inc/oox/drawingml/table/tablepartstylecontext.hxx53
-rw-r--r--oox/inc/oox/drawingml/table/tableproperties.hxx87
-rw-r--r--oox/inc/oox/drawingml/table/tablerow.hxx55
-rw-r--r--oox/inc/oox/drawingml/table/tablerowcontext.hxx55
-rw-r--r--oox/inc/oox/drawingml/table/tablestyle.hxx91
-rw-r--r--oox/inc/oox/drawingml/table/tablestylecellstylecontext.hxx54
-rw-r--r--oox/inc/oox/drawingml/table/tablestylecontext.hxx55
-rw-r--r--oox/inc/oox/drawingml/table/tablestylelist.hxx60
-rw-r--r--oox/inc/oox/drawingml/table/tablestylelistfragmenthandler.hxx63
-rw-r--r--oox/inc/oox/drawingml/table/tablestylepart.hxx79
-rw-r--r--oox/inc/oox/drawingml/table/tablestyletextstylecontext.hxx55
-rw-r--r--oox/inc/oox/drawingml/textbody.hxx77
-rw-r--r--oox/inc/oox/drawingml/textbodycontext.hxx69
-rw-r--r--oox/inc/oox/drawingml/textbodyproperties.hxx56
-rw-r--r--oox/inc/oox/drawingml/textbodypropertiescontext.hxx53
-rw-r--r--oox/inc/oox/drawingml/textcharacterproperties.hxx89
-rw-r--r--oox/inc/oox/drawingml/textcharacterpropertiescontext.hxx54
-rw-r--r--oox/inc/oox/drawingml/textfield.hxx68
-rw-r--r--oox/inc/oox/drawingml/textfieldcontext.hxx58
-rw-r--r--oox/inc/oox/drawingml/textfont.hxx80
-rw-r--r--oox/inc/oox/drawingml/textliststyle.hxx67
-rw-r--r--oox/inc/oox/drawingml/textliststylecontext.hxx51
-rw-r--r--oox/inc/oox/drawingml/textparagraph.hxx80
-rw-r--r--oox/inc/oox/drawingml/textparagraphproperties.hxx133
-rw-r--r--oox/inc/oox/drawingml/textparagraphpropertiescontext.hxx64
-rw-r--r--oox/inc/oox/drawingml/textrun.hxx68
-rw-r--r--oox/inc/oox/drawingml/textspacing.hxx81
-rw-r--r--oox/inc/oox/drawingml/theme.hxx116
-rw-r--r--oox/inc/oox/drawingml/themeelementscontext.hxx58
-rw-r--r--oox/inc/oox/drawingml/themefragmenthandler.hxx61
-rw-r--r--oox/inc/oox/drawingml/transform2dcontext.hxx58
-rw-r--r--oox/inc/oox/dump/biffdumper.hxx569
-rw-r--r--oox/inc/oox/dump/dffdumper.hxx82
-rw-r--r--oox/inc/oox/dump/dumperbase.hxx1979
-rw-r--r--oox/inc/oox/dump/oledumper.hxx935
-rw-r--r--oox/inc/oox/dump/pptxdumper.hxx78
-rw-r--r--oox/inc/oox/dump/xlsbdumper.hxx259
-rw-r--r--oox/inc/oox/export/drawingml.hxx115
-rw-r--r--oox/inc/oox/export/shapes.hxx162
-rw-r--r--oox/inc/oox/export/utils.hxx70
-rw-r--r--oox/inc/oox/export/vmlexport.hxx115
-rw-r--r--oox/inc/oox/helper/attributelist.hxx192
-rw-r--r--oox/inc/oox/helper/binaryinputstream.hxx291
-rw-r--r--oox/inc/oox/helper/binaryoutputstream.hxx161
-rw-r--r--oox/inc/oox/helper/binarystreambase.hxx147
-rw-r--r--oox/inc/oox/helper/containerhelper.hxx702
-rw-r--r--oox/inc/oox/helper/graphichelper.hxx175
-rw-r--r--oox/inc/oox/helper/helper.hxx325
-rw-r--r--oox/inc/oox/helper/modelobjecthelper.hxx94
-rw-r--r--oox/inc/oox/helper/progressbar.hxx145
-rw-r--r--oox/inc/oox/helper/propertymap.hxx106
-rw-r--r--oox/inc/oox/helper/propertyset.hxx170
-rw-r--r--oox/inc/oox/helper/recordinputstream.hxx58
-rw-r--r--oox/inc/oox/helper/storagebase.hxx195
-rwxr-xr-xoox/inc/oox/helper/textinputstream.hxx58
-rw-r--r--oox/inc/oox/helper/zipstorage.hxx95
-rwxr-xr-xoox/inc/oox/ole/axbinaryreader.hxx296
-rw-r--r--oox/inc/oox/ole/axcontrol.hxx836
-rw-r--r--oox/inc/oox/ole/axcontrolfragment.hxx81
-rw-r--r--oox/inc/oox/ole/olehelper.hxx143
-rw-r--r--oox/inc/oox/ole/oleobjecthelper.hxx86
-rwxr-xr-xoox/inc/oox/ole/olestorage.hxx116
-rwxr-xr-xoox/inc/oox/ole/vbacontrol.hxx209
-rwxr-xr-xoox/inc/oox/ole/vbahelper.hxx110
-rw-r--r--oox/inc/oox/ole/vbainputstream.hxx72
-rwxr-xr-xoox/inc/oox/ole/vbamodule.hxx96
-rwxr-xr-xoox/inc/oox/ole/vbaproject.hxx138
-rw-r--r--oox/inc/oox/ppt/animationspersist.hxx132
-rw-r--r--oox/inc/oox/ppt/backgroundproperties.hxx50
-rw-r--r--oox/inc/oox/ppt/headerfooter.hxx51
-rw-r--r--oox/inc/oox/ppt/layoutfragmenthandler.hxx49
-rw-r--r--oox/inc/oox/ppt/pptimport.hxx89
-rw-r--r--oox/inc/oox/ppt/pptshape.hxx72
-rw-r--r--oox/inc/oox/ppt/pptshapecontext.hxx46
-rw-r--r--oox/inc/oox/ppt/pptshapegroupcontext.hxx58
-rw-r--r--oox/inc/oox/ppt/pptshapepropertiescontext.hxx46
-rw-r--r--oox/inc/oox/ppt/presentationfragmenthandler.hxx72
-rw-r--r--oox/inc/oox/ppt/slidefragmenthandler.hxx62
-rw-r--r--oox/inc/oox/ppt/slidemastertextstylescontext.hxx51
-rw-r--r--oox/inc/oox/ppt/slidepersist.hxx153
-rw-r--r--oox/inc/oox/ppt/slidetimingcontext.hxx57
-rw-r--r--oox/inc/oox/ppt/slidetransition.hxx75
-rw-r--r--oox/inc/oox/ppt/slidetransitioncontext.hxx60
-rw-r--r--oox/inc/oox/ppt/soundactioncontext.hxx61
-rw-r--r--oox/inc/oox/ppt/timenode.hxx134
-rw-r--r--oox/inc/oox/ppt/timenodelistcontext.hxx74
-rw-r--r--oox/inc/oox/token/propertylist.hxx50
-rw-r--r--oox/inc/oox/token/tokenmap.hxx81
-rw-r--r--oox/inc/oox/vml/vmldrawing.hxx179
-rw-r--r--oox/inc/oox/vml/vmldrawingfragment.hxx66
-rw-r--r--oox/inc/oox/vml/vmlformatting.hxx190
-rw-r--r--oox/inc/oox/vml/vmlinputstream.hxx69
-rw-r--r--oox/inc/oox/vml/vmlshape.hxx330
-rw-r--r--oox/inc/oox/vml/vmlshapecontainer.hxx139
-rw-r--r--oox/inc/oox/vml/vmlshapecontext.hxx148
-rw-r--r--oox/inc/oox/xls/addressconverter.hxx692
-rw-r--r--oox/inc/oox/xls/autofiltercontext.hxx158
-rw-r--r--oox/inc/oox/xls/biffcodec.hxx185
-rw-r--r--oox/inc/oox/xls/biffdetector.hxx97
-rw-r--r--oox/inc/oox/xls/biffhelper.hxx608
-rw-r--r--oox/inc/oox/xls/biffinputstream.hxx447
-rw-r--r--oox/inc/oox/xls/biffoutputstream.hxx165
-rw-r--r--oox/inc/oox/xls/chartsheetfragment.hxx88
-rw-r--r--oox/inc/oox/xls/commentsbuffer.hxx102
-rw-r--r--oox/inc/oox/xls/commentsfragment.hxx74
-rw-r--r--oox/inc/oox/xls/condformatbuffer.hxx195
-rw-r--r--oox/inc/oox/xls/condformatcontext.hxx65
-rw-r--r--oox/inc/oox/xls/connectionsfragment.hxx65
-rw-r--r--oox/inc/oox/xls/defnamesbuffer.hxx221
-rw-r--r--oox/inc/oox/xls/drawingfragment.hxx206
-rw-r--r--oox/inc/oox/xls/excelchartconverter.hxx62
-rw-r--r--oox/inc/oox/xls/excelfilter.hxx101
-rw-r--r--oox/inc/oox/xls/excelhandlers.hxx386
-rw-r--r--oox/inc/oox/xls/externallinkbuffer.hxx401
-rw-r--r--oox/inc/oox/xls/externallinkfragment.hxx159
-rw-r--r--oox/inc/oox/xls/formulabase.hxx936
-rw-r--r--oox/inc/oox/xls/formulaparser.hxx170
-rw-r--r--oox/inc/oox/xls/numberformatsbuffer.hxx140
-rw-r--r--oox/inc/oox/xls/ooxformulaparser.hxx112
-rw-r--r--oox/inc/oox/xls/pagesettings.hxx220
-rw-r--r--oox/inc/oox/xls/pivotcachebuffer.hxx511
-rw-r--r--oox/inc/oox/xls/pivotcachefragment.hxx156
-rw-r--r--oox/inc/oox/xls/pivottablebuffer.hxx449
-rw-r--r--oox/inc/oox/xls/pivottablefragment.hxx118
-rw-r--r--oox/inc/oox/xls/querytablefragment.hxx57
-rw-r--r--oox/inc/oox/xls/richstring.hxx295
-rw-r--r--oox/inc/oox/xls/richstringcontext.hxx74
-rw-r--r--oox/inc/oox/xls/scenariobuffer.hxx155
-rw-r--r--oox/inc/oox/xls/scenariocontext.hxx81
-rw-r--r--oox/inc/oox/xls/sharedformulabuffer.hxx112
-rw-r--r--oox/inc/oox/xls/sharedstringsbuffer.hxx70
-rw-r--r--oox/inc/oox/xls/sharedstringsfragment.hxx64
-rw-r--r--oox/inc/oox/xls/sheetdatacontext.hxx174
-rw-r--r--oox/inc/oox/xls/stylesbuffer.hxx1078
-rw-r--r--oox/inc/oox/xls/stylesfragment.hxx160
-rw-r--r--oox/inc/oox/xls/tablebuffer.hxx135
-rw-r--r--oox/inc/oox/xls/tablefragment.hxx66
-rw-r--r--oox/inc/oox/xls/themebuffer.hxx64
-rw-r--r--oox/inc/oox/xls/unitconverter.hxx124
-rw-r--r--oox/inc/oox/xls/viewsettings.hxx231
-rw-r--r--oox/inc/oox/xls/webquerybuffer.hxx127
-rw-r--r--oox/inc/oox/xls/workbookfragment.hxx103
-rw-r--r--oox/inc/oox/xls/workbookhelper.hxx334
-rw-r--r--oox/inc/oox/xls/workbooksettings.hxx165
-rw-r--r--oox/inc/oox/xls/worksheetbuffer.hxx133
-rw-r--r--oox/inc/oox/xls/worksheetfragment.hxx197
-rw-r--r--oox/inc/oox/xls/worksheethelper.hxx471
-rw-r--r--oox/inc/oox/xls/worksheetsettings.hxx143
-rw-r--r--oox/prj/build.lst18
-rw-r--r--oox/prj/d.lst42
-rw-r--r--oox/source/core/binarycodec.cxx390
-rw-r--r--oox/source/core/binaryfilterbase.cxx67
-rw-r--r--oox/source/core/contexthandler.cxx153
-rw-r--r--oox/source/core/contexthandler2.cxx274
-rw-r--r--oox/source/core/facreg.cxx176
-rw-r--r--oox/source/core/fasttokenhandler.cxx92
-rw-r--r--oox/source/core/filterbase.cxx572
-rw-r--r--oox/source/core/filterdetect.cxx657
-rw-r--r--oox/source/core/fragmenthandler.cxx142
-rw-r--r--oox/source/core/fragmenthandler2.cxx152
-rw-r--r--oox/source/core/makefile.mk65
-rw-r--r--oox/source/core/recordparser.cxx351
-rw-r--r--oox/source/core/relations.cxx146
-rw-r--r--oox/source/core/relationshandler.cxx109
-rw-r--r--oox/source/core/xmlfilterbase.cxx539
-rw-r--r--oox/source/docprop/docprophandler.cxx693
-rw-r--r--oox/source/docprop/docprophandler.hxx92
-rw-r--r--oox/source/docprop/makefile.mk49
-rw-r--r--oox/source/docprop/ooxmldocpropimport.cxx227
-rw-r--r--oox/source/docprop/ooxmldocpropimport.hxx71
-rw-r--r--oox/source/drawingml/chart/axiscontext.cxx318
-rw-r--r--oox/source/drawingml/chart/axisconverter.cxx333
-rw-r--r--oox/source/drawingml/chart/axismodel.cxx81
-rw-r--r--oox/source/drawingml/chart/chartcontextbase.cxx120
-rw-r--r--oox/source/drawingml/chart/chartconverter.cxx93
-rw-r--r--oox/source/drawingml/chart/chartdrawingfragment.cxx235
-rw-r--r--oox/source/drawingml/chart/chartspaceconverter.cxx209
-rw-r--r--oox/source/drawingml/chart/chartspacefragment.cxx127
-rw-r--r--oox/source/drawingml/chart/chartspacemodel.cxx54
-rw-r--r--oox/source/drawingml/chart/converterbase.cxx422
-rw-r--r--oox/source/drawingml/chart/datasourcecontext.cxx231
-rw-r--r--oox/source/drawingml/chart/datasourceconverter.cxx92
-rw-r--r--oox/source/drawingml/chart/datasourcemodel.cxx60
-rw-r--r--oox/source/drawingml/chart/makefile.mk74
-rw-r--r--oox/source/drawingml/chart/modelbase.cxx76
-rw-r--r--oox/source/drawingml/chart/objectformatter.cxx1214
-rw-r--r--oox/source/drawingml/chart/plotareacontext.cxx185
-rw-r--r--oox/source/drawingml/chart/plotareaconverter.cxx455
-rw-r--r--oox/source/drawingml/chart/plotareamodel.cxx72
-rw-r--r--oox/source/drawingml/chart/seriescontext.cxx760
-rw-r--r--oox/source/drawingml/chart/seriesconverter.cxx624
-rw-r--r--oox/source/drawingml/chart/seriesmodel.cxx157
-rw-r--r--oox/source/drawingml/chart/titlecontext.cxx163
-rw-r--r--oox/source/drawingml/chart/titleconverter.cxx273
-rw-r--r--oox/source/drawingml/chart/titlemodel.cxx72
-rw-r--r--oox/source/drawingml/chart/typegroupcontext.cxx402
-rw-r--r--oox/source/drawingml/chart/typegroupconverter.cxx573
-rw-r--r--oox/source/drawingml/chart/typegroupmodel.cxx83
-rw-r--r--oox/source/drawingml/clrscheme.cxx82
-rw-r--r--oox/source/drawingml/clrschemecontext.cxx107
-rw-r--r--oox/source/drawingml/color.cxx670
-rw-r--r--oox/source/drawingml/colorchoicecontext.cxx161
-rw-r--r--oox/source/drawingml/connectorshapecontext.cxx81
-rw-r--r--oox/source/drawingml/customshapegeometry.cxx2068
-rw-r--r--oox/source/drawingml/customshapeproperties.cxx271
-rw-r--r--oox/source/drawingml/diagram/datamodelcontext.cxx337
-rw-r--r--oox/source/drawingml/diagram/diagram.cxx299
-rw-r--r--oox/source/drawingml/diagram/diagramdefinitioncontext.cxx117
-rw-r--r--oox/source/drawingml/diagram/diagramdefinitioncontext.hxx51
-rw-r--r--oox/source/drawingml/diagram/diagramfragmenthandler.cxx224
-rw-r--r--oox/source/drawingml/diagram/diagramlayoutatoms.cxx141
-rw-r--r--oox/source/drawingml/diagram/layoutnodecontext.cxx357
-rw-r--r--oox/source/drawingml/diagram/layoutnodecontext.hxx52
-rw-r--r--oox/source/drawingml/diagram/makefile.mk53
-rw-r--r--oox/source/drawingml/drawingmltypes.cxx295
-rw-r--r--oox/source/drawingml/embeddedwavaudiofile.cxx56
-rw-r--r--oox/source/drawingml/fillproperties.cxx469
-rw-r--r--oox/source/drawingml/fillpropertiesgroupcontext.cxx301
-rw-r--r--oox/source/drawingml/graphicshapecontext.cxx427
-rw-r--r--oox/source/drawingml/guidcontext.cxx50
-rw-r--r--oox/source/drawingml/hyperlinkcontext.cxx181
-rw-r--r--oox/source/drawingml/hyperlinkcontext.hxx58
-rw-r--r--oox/source/drawingml/lineproperties.cxx478
-rw-r--r--oox/source/drawingml/linepropertiescontext.cxx108
-rw-r--r--oox/source/drawingml/makefile.mk91
-rw-r--r--oox/source/drawingml/objectdefaultcontext.cxx61
-rw-r--r--oox/source/drawingml/shape.cxx541
-rw-r--r--oox/source/drawingml/shapecontext.cxx129
-rw-r--r--oox/source/drawingml/shapegroupcontext.cxx121
-rw-r--r--oox/source/drawingml/shapepropertiescontext.cxx121
-rw-r--r--oox/source/drawingml/shapestylecontext.cxx88
-rw-r--r--oox/source/drawingml/spdefcontext.cxx78
-rw-r--r--oox/source/drawingml/table/makefile.mk62
-rw-r--r--oox/source/drawingml/table/tablebackgroundstylecontext.cxx92
-rw-r--r--oox/source/drawingml/table/tablecell.cxx366
-rw-r--r--oox/source/drawingml/table/tablecellcontext.cxx127
-rw-r--r--oox/source/drawingml/table/tablecontext.cxx109
-rw-r--r--oox/source/drawingml/table/tablepartstylecontext.cxx77
-rw-r--r--oox/source/drawingml/table/tableproperties.cxx180
-rw-r--r--oox/source/drawingml/table/tablerow.cxx55
-rw-r--r--oox/source/drawingml/table/tablerowcontext.cxx80
-rw-r--r--oox/source/drawingml/table/tablestyle.cxx40
-rw-r--r--oox/source/drawingml/table/tablestylecellstylecontext.cxx126
-rw-r--r--oox/source/drawingml/table/tablestylecontext.cxx117
-rw-r--r--oox/source/drawingml/table/tablestylelist.cxx41
-rw-r--r--oox/source/drawingml/table/tablestylelistfragmenthandler.cxx84
-rw-r--r--oox/source/drawingml/table/tablestylepart.cxx49
-rw-r--r--oox/source/drawingml/table/tablestyletextstylecontext.cxx109
-rw-r--r--oox/source/drawingml/textbody.cxx72
-rw-r--r--oox/source/drawingml/textbodycontext.cxx214
-rw-r--r--oox/source/drawingml/textbodyproperties.cxx55
-rw-r--r--oox/source/drawingml/textbodypropertiescontext.cxx190
-rw-r--r--oox/source/drawingml/textcharacterproperties.cxx170
-rw-r--r--oox/source/drawingml/textcharacterpropertiescontext.cxx179
-rw-r--r--oox/source/drawingml/textfield.cxx195
-rw-r--r--oox/source/drawingml/textfieldcontext.cxx91
-rw-r--r--oox/source/drawingml/textfont.cxx104
-rw-r--r--oox/source/drawingml/textliststyle.cxx79
-rw-r--r--oox/source/drawingml/textliststylecontext.cxx112
-rw-r--r--oox/source/drawingml/textparagraph.cxx130
-rw-r--r--oox/source/drawingml/textparagraphproperties.cxx426
-rw-r--r--oox/source/drawingml/textparagraphpropertiescontext.cxx286
-rw-r--r--oox/source/drawingml/textrun.cxx121
-rw-r--r--oox/source/drawingml/textspacingcontext.cxx78
-rw-r--r--oox/source/drawingml/textspacingcontext.hxx57
-rw-r--r--oox/source/drawingml/texttabstoplistcontext.cxx97
-rw-r--r--oox/source/drawingml/texttabstoplistcontext.hxx58
-rw-r--r--oox/source/drawingml/theme.cxx109
-rw-r--r--oox/source/drawingml/themeelementscontext.cxx243
-rw-r--r--oox/source/drawingml/themefragmenthandler.cxx87
-rw-r--r--oox/source/drawingml/transform2dcontext.cxx81
-rw-r--r--oox/source/dump/biffdumper.cxx4371
-rw-r--r--oox/source/dump/biffdumper.ini2238
-rw-r--r--oox/source/dump/dffdumper.cxx323
-rw-r--r--oox/source/dump/dffdumper.ini651
-rw-r--r--oox/source/dump/dumperbase.cxx3215
-rw-r--r--oox/source/dump/dumperbase.ini396
-rw-r--r--oox/source/dump/makefile.mk53
-rw-r--r--oox/source/dump/oledumper.cxx2315
-rw-r--r--oox/source/dump/oledumper.ini888
-rw-r--r--oox/source/dump/pptxdumper.cxx147
-rw-r--r--oox/source/dump/pptxdumper.ini19
-rw-r--r--oox/source/dump/xlsbdumper.cxx2272
-rw-r--r--oox/source/dump/xlsbdumper.ini1079
-rw-r--r--oox/source/export/README2
-rw-r--r--oox/source/export/drawingml.cxx1394
-rw-r--r--oox/source/export/makefile.mk27
-rw-r--r--oox/source/export/preset-definitions-to-shape-types.pl1242
-rw-r--r--oox/source/export/presetShapeDefinitions.xml19915
-rw-r--r--oox/source/export/presetTextWarpDefinitions.xml1885
-rw-r--r--oox/source/export/shapes.cxx995
-rw-r--r--oox/source/export/vmlexport.cxx837
-rw-r--r--oox/source/helper/attributelist.cxx317
-rw-r--r--oox/source/helper/binaryinputstream.cxx333
-rw-r--r--oox/source/helper/binaryoutputstream.cxx137
-rw-r--r--oox/source/helper/binarystreambase.cxx161
-rw-r--r--oox/source/helper/containerhelper.cxx224
-rw-r--r--oox/source/helper/graphichelper.cxx358
-rw-r--r--oox/source/helper/makefile.mk61
-rw-r--r--oox/source/helper/modelobjecthelper.cxx91
-rw-r--r--oox/source/helper/progressbar.cxx185
-rw-r--r--oox/source/helper/propertymap.cxx307
-rw-r--r--oox/source/helper/propertyset.cxx185
-rw-r--r--oox/source/helper/recordinputstream.cxx71
-rw-r--r--oox/source/helper/storagebase.cxx274
-rwxr-xr-xoox/source/helper/textinputstream.cxx128
-rw-r--r--oox/source/helper/zipstorage.cxx211
-rwxr-xr-xoox/source/ole/axbinaryreader.cxx343
-rw-r--r--oox/source/ole/axcontrol.cxx1750
-rw-r--r--oox/source/ole/axcontrolfragment.cxx156
-rw-r--r--oox/source/ole/makefile.mk59
-rw-r--r--oox/source/ole/olehelper.cxx300
-rw-r--r--oox/source/ole/oleobjecthelper.cxx141
-rwxr-xr-xoox/source/ole/olestorage.cxx423
-rwxr-xr-xoox/source/ole/vbacontrol.cxx845
-rwxr-xr-xoox/source/ole/vbahelper.cxx85
-rw-r--r--oox/source/ole/vbainputstream.cxx185
-rwxr-xr-xoox/source/ole/vbamodule.cxx235
-rwxr-xr-xoox/source/ole/vbaproject.cxx453
-rw-r--r--oox/source/ppt/animationspersist.cxx202
-rw-r--r--oox/source/ppt/animationtypes.cxx74
-rw-r--r--oox/source/ppt/animationtypes.hxx47
-rw-r--r--oox/source/ppt/animvariantcontext.cxx124
-rw-r--r--oox/source/ppt/animvariantcontext.hxx60
-rw-r--r--oox/source/ppt/backgroundproperties.cxx65
-rw-r--r--oox/source/ppt/buildlistcontext.cxx113
-rw-r--r--oox/source/ppt/buildlistcontext.hxx64
-rw-r--r--oox/source/ppt/commonbehaviorcontext.cxx180
-rw-r--r--oox/source/ppt/commonbehaviorcontext.hxx82
-rw-r--r--oox/source/ppt/commontimenodecontext.cxx710
-rw-r--r--oox/source/ppt/commontimenodecontext.hxx62
-rw-r--r--oox/source/ppt/conditioncontext.cxx214
-rw-r--r--oox/source/ppt/conditioncontext.hxx84
-rw-r--r--oox/source/ppt/customshowlistcontext.cxx121
-rw-r--r--oox/source/ppt/customshowlistcontext.hxx63
-rw-r--r--oox/source/ppt/headerfootercontext.cxx66
-rw-r--r--oox/source/ppt/headerfootercontext.hxx50
-rw-r--r--oox/source/ppt/layoutfragmenthandler.cxx88
-rw-r--r--oox/source/ppt/makefile.mk76
-rw-r--r--oox/source/ppt/pptfilterhelpers.cxx140
-rw-r--r--oox/source/ppt/pptfilterhelpers.hxx104
-rw-r--r--oox/source/ppt/pptimport.cxx188
-rw-r--r--oox/source/ppt/pptshape.cxx281
-rw-r--r--oox/source/ppt/pptshapecontext.cxx219
-rw-r--r--oox/source/ppt/pptshapegroupcontext.cxx123
-rw-r--r--oox/source/ppt/pptshapepropertiescontext.cxx86
-rw-r--r--oox/source/ppt/presentationfragmenthandler.cxx392
-rw-r--r--oox/source/ppt/slidefragmenthandler.cxx201
-rw-r--r--oox/source/ppt/slidemastertextstylescontext.cxx90
-rw-r--r--oox/source/ppt/slidepersist.cxx314
-rw-r--r--oox/source/ppt/slidetimingcontext.cxx103
-rw-r--r--oox/source/ppt/slidetransition.cxx419
-rw-r--r--oox/source/ppt/slidetransitioncontext.cxx203
-rw-r--r--oox/source/ppt/soundactioncontext.cxx137
-rw-r--r--oox/source/ppt/timeanimvaluecontext.cxx102
-rw-r--r--oox/source/ppt/timeanimvaluecontext.hxx64
-rw-r--r--oox/source/ppt/timenode.cxx630
-rw-r--r--oox/source/ppt/timenodelistcontext.cxx1165
-rw-r--r--oox/source/ppt/timetargetelementcontext.cxx176
-rw-r--r--oox/source/ppt/timetargetelementcontext.hxx53
-rw-r--r--oox/source/shape/FastTokenHandlerService.cxx116
-rw-r--r--oox/source/shape/FastTokenHandlerService.hxx81
-rw-r--r--oox/source/shape/ShapeContextHandler.cxx373
-rw-r--r--oox/source/shape/ShapeContextHandler.hxx191
-rw-r--r--oox/source/shape/ShapeFilterBase.cxx74
-rw-r--r--oox/source/shape/ShapeFilterBase.hxx78
-rw-r--r--oox/source/shape/makefile.mk50
-rw-r--r--oox/source/token/gennamespaces.pl66
-rw-r--r--oox/source/token/genproperties.pl46
-rw-r--r--oox/source/token/gentoken.pl61
-rw-r--r--oox/source/token/makefile.mk78
-rw-r--r--oox/source/token/namespaces.txt49
-rw-r--r--oox/source/token/parsexsd.pl48
-rw-r--r--oox/source/token/properties.txt461
-rw-r--r--oox/source/token/propertylist.cxx56
-rw-r--r--oox/source/token/tokenmap.cxx114
-rw-r--r--oox/source/token/tokens.txt5665
-rw-r--r--oox/source/vml/makefile.mk54
-rw-r--r--oox/source/vml/vmldrawing.cxx167
-rw-r--r--oox/source/vml/vmldrawingfragment.cxx93
-rw-r--r--oox/source/vml/vmlformatting.cxx603
-rw-r--r--oox/source/vml/vmlinputstream.cxx280
-rw-r--r--oox/source/vml/vmlshape.cxx555
-rw-r--r--oox/source/vml/vmlshapecontainer.cxx133
-rw-r--r--oox/source/vml/vmlshapecontext.cxx330
-rw-r--r--oox/source/xls/addressconverter.cxx784
-rw-r--r--oox/source/xls/autofiltercontext.cxx775
-rw-r--r--oox/source/xls/biffcodec.cxx334
-rw-r--r--oox/source/xls/biffdetector.cxx233
-rw-r--r--oox/source/xls/biffhelper.cxx287
-rw-r--r--oox/source/xls/biffinputstream.cxx631
-rw-r--r--oox/source/xls/biffoutputstream.cxx208
-rw-r--r--oox/source/xls/chartsheetfragment.cxx292
-rw-r--r--oox/source/xls/commentsbuffer.cxx157
-rw-r--r--oox/source/xls/commentsfragment.cxx153
-rw-r--r--oox/source/xls/condformatbuffer.cxx787
-rw-r--r--oox/source/xls/condformatcontext.cxx107
-rw-r--r--oox/source/xls/connectionsfragment.cxx113
-rw-r--r--oox/source/xls/defnamesbuffer.cxx712
-rw-r--r--oox/source/xls/drawingfragment.cxx680
-rw-r--r--oox/source/xls/excelchartconverter.cxx125
-rw-r--r--oox/source/xls/excelfilter.cxx244
-rw-r--r--oox/source/xls/excelhandlers.cxx259
-rw-r--r--oox/source/xls/externallinkbuffer.cxx1143
-rw-r--r--oox/source/xls/externallinkfragment.cxx551
-rw-r--r--oox/source/xls/formulabase.cxx1750
-rw-r--r--oox/source/xls/formulaparser.cxx2861
-rw-r--r--oox/source/xls/makefile.mk100
-rw-r--r--oox/source/xls/numberformatsbuffer.cxx2123
-rw-r--r--oox/source/xls/ooxformulaparser.cxx225
-rw-r--r--oox/source/xls/pagesettings.cxx1255
-rw-r--r--oox/source/xls/pivotcachebuffer.cxx1548
-rw-r--r--oox/source/xls/pivotcachefragment.cxx465
-rw-r--r--oox/source/xls/pivottablebuffer.cxx1553
-rw-r--r--oox/source/xls/pivottablefragment.cxx317
-rw-r--r--oox/source/xls/querytablefragment.cxx56
-rw-r--r--oox/source/xls/richstring.cxx613
-rw-r--r--oox/source/xls/richstringcontext.cxx95
-rw-r--r--oox/source/xls/scenariobuffer.cxx306
-rw-r--r--oox/source/xls/scenariocontext.cxx124
-rw-r--r--oox/source/xls/sharedformulabuffer.cxx215
-rw-r--r--oox/source/xls/sharedstringsbuffer.cxx84
-rw-r--r--oox/source/xls/sharedstringsfragment.cxx104
-rw-r--r--oox/source/xls/sheetdatacontext.cxx992
-rw-r--r--oox/source/xls/stylesbuffer.cxx3447
-rw-r--r--oox/source/xls/stylesfragment.cxx331
-rw-r--r--oox/source/xls/tablebuffer.cxx173
-rw-r--r--oox/source/xls/tablefragment.cxx86
-rw-r--r--oox/source/xls/themebuffer.cxx122
-rw-r--r--oox/source/xls/unitconverter.cxx258
-rw-r--r--oox/source/xls/viewsettings.cxx832
-rw-r--r--oox/source/xls/webquerybuffer.cxx199
-rw-r--r--oox/source/xls/workbookfragment.cxx738
-rw-r--r--oox/source/xls/workbookhelper.cxx1005
-rw-r--r--oox/source/xls/workbooksettings.cxx370
-rw-r--r--oox/source/xls/worksheetbuffer.cxx261
-rw-r--r--oox/source/xls/worksheetfragment.cxx1202
-rw-r--r--oox/source/xls/worksheethelper.cxx2211
-rw-r--r--oox/source/xls/worksheetsettings.cxx338
-rw-r--r--oox/util/makefile.mk96
-rw-r--r--oox/util/makefile.pmk30
-rw-r--r--oox/workben/ooxml-export-notes.txt220
-rw-r--r--openssl/makefile.mk173
-rw-r--r--openssl/openssl.patch134
-rw-r--r--openssl/openssllnx.patch3805
-rw-r--r--openssl/opensslmacosx.patch3751
-rwxr-xr-xopenssl/opensslmingw.patch109
-rw-r--r--openssl/opensslsol.patch3831
-rw-r--r--openssl/prj/build.lst3
-rw-r--r--openssl/prj/d.lst11
-rw-r--r--openssl/version.mk33
-rw-r--r--packimages/pack/image-sort.lst342
-rw-r--r--packimages/pack/makefile.mk109
-rw-r--r--packimages/prj/build.lst3
-rw-r--r--packimages/prj/d.lst2
-rw-r--r--padmin/prj/build.lst3
-rw-r--r--padmin/prj/d.lst8
-rw-r--r--padmin/source/adddlg.cxx1128
-rw-r--r--padmin/source/adddlg.hxx248
-rw-r--r--padmin/source/cmddlg.cxx551
-rw-r--r--padmin/source/cmddlg.hxx122
-rw-r--r--padmin/source/desktopcontext.cxx59
-rw-r--r--padmin/source/desktopcontext.hxx52
-rw-r--r--padmin/source/fontentry.cxx668
-rw-r--r--padmin/source/fontentry.hxx137
-rw-r--r--padmin/source/helper.cxx327
-rw-r--r--padmin/source/helper.hxx126
-rw-r--r--padmin/source/makefile.mk115
-rw-r--r--padmin/source/newppdlg.cxx226
-rw-r--r--padmin/source/newppdlg.hxx76
-rw-r--r--padmin/source/padialog.cxx755
-rw-r--r--padmin/source/padialog.hrc285
-rw-r--r--padmin/source/padialog.hxx120
-rw-r--r--padmin/source/padialog.src1153
-rw-r--r--padmin/source/pamain.cxx176
-rw-r--r--padmin/source/progress.cxx103
-rw-r--r--padmin/source/progress.hxx66
-rw-r--r--padmin/source/prtsetup.cxx817
-rw-r--r--padmin/source/prtsetup.hxx213
-rw-r--r--padmin/source/psetupl.xpm76
-rw-r--r--padmin/source/rtsetup.hrc120
-rw-r--r--padmin/source/rtsetup.src568
-rw-r--r--padmin/source/spadmin.sh76
-rw-r--r--padmin/source/titlectrl.cxx102
-rw-r--r--padmin/source/titlectrl.hxx66
-rw-r--r--postprocess/checkdeliver/checkdeliver.pl306
-rw-r--r--postprocess/checkdeliver/makefile.mk43
-rw-r--r--postprocess/checkxml/checkxml.pl140
-rw-r--r--postprocess/checkxml/makefile.mk42
-rw-r--r--postprocess/packconfig/macosx/macosx_menubar_modification.xsl26
-rw-r--r--postprocess/packconfig/makefile.mk42
-rwxr-xr-xpostprocess/packconfig/packconfig.pl291
-rw-r--r--postprocess/packregistry/makefile.mk542
-rw-r--r--postprocess/prj/build.lst8
-rw-r--r--postprocess/prj/d.lst3
-rwxr-xr-xpostprocess/rebase/coffbase.txt402
-rwxr-xr-xpostprocess/rebase/makefile.mk59
-rw-r--r--postprocess/rebase/no_rebase.txt33
-rwxr-xr-xpostprocess/rebase/rebase.pl302
-rw-r--r--postprocess/signing/makefile.mk60
-rw-r--r--postprocess/signing/no_signing.txt13
-rw-r--r--postprocess/signing/signing.pl273
-rw-r--r--psprint_config/configuration/delzip0
-rw-r--r--psprint_config/configuration/makefile.mk11
-rw-r--r--psprint_config/configuration/ppds/ADISTILL.PS416
-rw-r--r--psprint_config/configuration/ppds/APLW3101.PS385
-rw-r--r--psprint_config/configuration/ppds/APLW3201.PS496
-rw-r--r--psprint_config/configuration/ppds/APLW3601.PS666
-rw-r--r--psprint_config/configuration/ppds/APLW6101.PS597
-rw-r--r--psprint_config/configuration/ppds/APLW8101.PS885
-rw-r--r--psprint_config/configuration/ppds/APLW81F1.PS885
-rw-r--r--psprint_config/configuration/ppds/APLWBGR1.PS1081
-rw-r--r--psprint_config/configuration/ppds/APLWCOB1.PS565
-rw-r--r--psprint_config/configuration/ppds/APLWCSB1.PS580
-rw-r--r--psprint_config/configuration/ppds/APLWGRF1.PS747
-rw-r--r--psprint_config/configuration/ppds/APLWGRI1.PS746
-rw-r--r--psprint_config/configuration/ppds/APLWGRJ1.PS709
-rw-r--r--psprint_config/configuration/ppds/APLWIIF2.PS428
-rw-r--r--psprint_config/configuration/ppds/APLWIIG2.PS440
-rw-r--r--psprint_config/configuration/ppds/APLWLOT1.PS563
-rw-r--r--psprint_config/configuration/ppds/APL_IIF1.PS520
-rw-r--r--psprint_config/configuration/ppds/APL_IIG1.PS483
-rw-r--r--psprint_config/configuration/ppds/APL_NTR1.PS416
-rw-r--r--psprint_config/configuration/ppds/APNT518_.PS351
-rw-r--r--psprint_config/configuration/ppds/APNTX501.PS351
-rw-r--r--psprint_config/configuration/ppds/APNTXJ1_.PS412
-rw-r--r--psprint_config/configuration/ppds/APPL_230.PS350
-rw-r--r--psprint_config/configuration/ppds/APPL_380.PS329
-rw-r--r--psprint_config/configuration/ppds/APPL_422.PS330
-rw-r--r--psprint_config/configuration/ppds/APTOLLD1.PS660
-rw-r--r--psprint_config/configuration/ppds/APTOLLW1.PS656
-rw-r--r--psprint_config/configuration/ppds/CAECOGR1.PS591
-rw-r--r--psprint_config/configuration/ppds/DC1152_1.PS476
-rw-r--r--psprint_config/configuration/ppds/EFAX3010.PS1698
-rw-r--r--psprint_config/configuration/ppds/EFAX4010.PS1976
-rw-r--r--psprint_config/configuration/ppds/EFAX5010.PS2190
-rw-r--r--psprint_config/configuration/ppds/EFAX7010.PS1698
-rw-r--r--psprint_config/configuration/ppds/EFMX3010.PS1669
-rw-r--r--psprint_config/configuration/ppds/EFMX5010.PS2183
-rw-r--r--psprint_config/configuration/ppds/EFMX7010.PS1669
-rw-r--r--psprint_config/configuration/ppds/EFXJK1F3.PS1945
-rw-r--r--psprint_config/configuration/ppds/EFXJK2F3.PS2479
-rw-r--r--psprint_config/configuration/ppds/EFXJK303.PS1075
-rw-r--r--psprint_config/configuration/ppds/EFXJK3F3.PS1135
-rw-r--r--psprint_config/configuration/ppds/EP_08001.PS671
-rw-r--r--psprint_config/configuration/ppds/EP_15201.PS917
-rw-r--r--psprint_config/configuration/ppds/EP_30001.PS916
-rw-r--r--psprint_config/configuration/ppds/EP_50001.PS876
-rw-r--r--psprint_config/configuration/ppds/EP_82F21.PS952
-rw-r--r--psprint_config/configuration/ppds/EP_82F51.PS1051
-rw-r--r--psprint_config/configuration/ppds/EP_P0701.PS1356
-rw-r--r--psprint_config/configuration/ppds/EP_P1201.PS713
-rw-r--r--psprint_config/configuration/ppds/EP_STPH1.PS640
-rw-r--r--psprint_config/configuration/ppds/GENERIC.PS2
-rw-r--r--psprint_config/configuration/ppds/HP1200C1.PS585
-rw-r--r--psprint_config/configuration/ppds/HP2500C1.PS1099
-rw-r--r--psprint_config/configuration/ppds/HP3SI52_.PS435
-rw-r--r--psprint_config/configuration/ppds/HP3SIL21.PS588
-rw-r--r--psprint_config/configuration/ppds/HP4M3_V1.PS540
-rw-r--r--psprint_config/configuration/ppds/HP4M6_V1.PS540
-rw-r--r--psprint_config/configuration/ppds/HP4ML_V1.PS486
-rw-r--r--psprint_config/configuration/ppds/HP4MP3_1.PS428
-rw-r--r--psprint_config/configuration/ppds/HP4MP6_1.PS432
-rw-r--r--psprint_config/configuration/ppds/HP4PLUS3.PS306
-rw-r--r--psprint_config/configuration/ppds/HP4PLUS6.PS313
-rw-r--r--psprint_config/configuration/ppds/HP4SI3_1.PS751
-rw-r--r--psprint_config/configuration/ppds/HP4SI6_1.PS753
-rw-r--r--psprint_config/configuration/ppds/HPIID52_.PS406
-rw-r--r--psprint_config/configuration/ppds/HPIII52_.PS381
-rw-r--r--psprint_config/configuration/ppds/HPIIP52_.PS374
-rw-r--r--psprint_config/configuration/ppds/HPLJ3D1_.PS563
-rw-r--r--psprint_config/configuration/ppds/HPLJ3P1_.PS462
-rw-r--r--psprint_config/configuration/ppds/HPLJ4MV1.PS793
-rw-r--r--psprint_config/configuration/ppds/HPLJ5M_4.PS695
-rw-r--r--psprint_config/configuration/ppds/HPLJ5P_1.PS541
-rw-r--r--psprint_config/configuration/ppds/HPLJ5SI1.PS953
-rw-r--r--psprint_config/configuration/ppds/HPLJ5SIM.PS1006
-rw-r--r--psprint_config/configuration/ppds/HPLJ__31.PS407
-rw-r--r--psprint_config/configuration/ppds/HP_3D52_.PS430
-rw-r--r--psprint_config/configuration/ppds/HP_3P52_.PS382
-rw-r--r--psprint_config/configuration/ppds/HP__CLJ1.PS689
-rw-r--r--psprint_config/configuration/ppds/KD8650P1.PS946
-rw-r--r--psprint_config/configuration/ppds/KD92P001.PS1127
-rw-r--r--psprint_config/configuration/ppds/KDH00001.PS1533
-rw-r--r--psprint_config/configuration/ppds/KDH00002.PS1554
-rw-r--r--psprint_config/configuration/ppds/L10__425.PS424
-rw-r--r--psprint_config/configuration/ppds/L20__471.PS566
-rw-r--r--psprint_config/configuration/ppds/L20__493.PS564
-rw-r--r--psprint_config/configuration/ppds/L30__471.PS593
-rw-r--r--psprint_config/configuration/ppds/L30__493.PS592
-rw-r--r--psprint_config/configuration/ppds/L333_523.PS723
-rw-r--r--psprint_config/configuration/ppds/L33__523.PS487
-rw-r--r--psprint_config/configuration/ppds/L50__493.PS564
-rw-r--r--psprint_config/configuration/ppds/L533_523.PS632
-rw-r--r--psprint_config/configuration/ppds/L53__523.PS448
-rw-r--r--psprint_config/configuration/ppds/LEX4039P.PS673
-rw-r--r--psprint_config/configuration/ppds/LEX4079P.PS641
-rw-r--r--psprint_config/configuration/ppds/LEXOPTR_.PS741
-rw-r--r--psprint_config/configuration/ppds/LHCFLRJ5.PS2034
-rw-r--r--psprint_config/configuration/ppds/LHCOFLC5.PS1866
-rw-r--r--psprint_config/configuration/ppds/LHCOFLR5.PS1814
-rw-r--r--psprint_config/configuration/ppds/LHGUBEH3.PS1568
-rw-r--r--psprint_config/configuration/ppds/LHGUBHJ4.PS3358
-rw-r--r--psprint_config/configuration/ppds/LHHERHJ4.PS3680
-rw-r--r--psprint_config/configuration/ppds/LHHERIJ4.PS3672
-rw-r--r--psprint_config/configuration/ppds/LHHERKH3.PS1729
-rw-r--r--psprint_config/configuration/ppds/LHHERKI4.PS3468
-rw-r--r--psprint_config/configuration/ppds/LHHKPHJ7.PS3328
-rw-r--r--psprint_config/configuration/ppds/LHHKPIJ7.PS3136
-rw-r--r--psprint_config/configuration/ppds/LHHRKPH7.PS3108
-rw-r--r--psprint_config/configuration/ppds/LHHRKPI7.PS2916
-rw-r--r--psprint_config/configuration/ppds/LHQUSHJ4.PS3074
-rw-r--r--psprint_config/configuration/ppds/LHQUSIJ4.PS3204
-rw-r--r--psprint_config/configuration/ppds/LHQUSRH3.PS1426
-rw-r--r--psprint_config/configuration/ppds/LHQUSRI3.PS1491
-rw-r--r--psprint_config/configuration/ppds/LHSIGHJ4.PS3750
-rw-r--r--psprint_config/configuration/ppds/LHSIGIJ4.PS4192
-rw-r--r--psprint_config/configuration/ppds/LHSIGNH3.PS1764
-rw-r--r--psprint_config/configuration/ppds/LHSIGNI3.PS1985
-rw-r--r--psprint_config/configuration/ppds/LOPC1200.PS810
-rw-r--r--psprint_config/configuration/ppds/LOPC40.PS713
-rw-r--r--psprint_config/configuration/ppds/LOPC45.PS774
-rw-r--r--psprint_config/configuration/ppds/LOPE310.PS659
-rw-r--r--psprint_config/configuration/ppds/LOPM410.PS726
-rw-r--r--psprint_config/configuration/ppds/LOPS1255.PS1122
-rw-r--r--psprint_config/configuration/ppds/LOPS1625.PS1122
-rw-r--r--psprint_config/configuration/ppds/LOPS1855.PS1122
-rw-r--r--psprint_config/configuration/ppds/LOPS2455.PS1121
-rw-r--r--psprint_config/configuration/ppds/LOPS3455.PS1122
-rw-r--r--psprint_config/configuration/ppds/LOPT610.PS1113
-rw-r--r--psprint_config/configuration/ppds/LOPT612.PS1114
-rw-r--r--psprint_config/configuration/ppds/LOPT614.PS1109
-rw-r--r--psprint_config/configuration/ppds/LOPT616.PS1113
-rw-r--r--psprint_config/configuration/ppds/LOPTRAC.PS546
-rw-r--r--psprint_config/configuration/ppds/LOPTRAEP.PS693
-rw-r--r--psprint_config/configuration/ppds/LOPTRAK.PS752
-rw-r--r--psprint_config/configuration/ppds/LOPTRAN.PS1001
-rw-r--r--psprint_config/configuration/ppds/LOPTRAP.PS759
-rw-r--r--psprint_config/configuration/ppds/LOPTRAS.PS1141
-rw-r--r--psprint_config/configuration/ppds/LOPTRASC.PS714
-rw-r--r--psprint_config/configuration/ppds/LOPW810.PS1018
-rw-r--r--psprint_config/configuration/ppds/LOS1255P.PS1205
-rw-r--r--psprint_config/configuration/ppds/LOS1625P.PS1198
-rw-r--r--psprint_config/configuration/ppds/LOS1855P.PS1198
-rw-r--r--psprint_config/configuration/ppds/LOS2455P.PS1196
-rw-r--r--psprint_config/configuration/ppds/LOS3455P.PS1197
-rw-r--r--psprint_config/configuration/ppds/LWNT_518.PS345
-rw-r--r--psprint_config/configuration/ppds/SGENPRT.PS589
-rw-r--r--psprint_config/configuration/ppds/SGENT42.PS29
-rw-r--r--psprint_config/configuration/ppds/SNSPREC1.PS760
-rw-r--r--psprint_config/configuration/ppds/TK300PJ1.PS1284
-rw-r--r--psprint_config/configuration/ppds/TK300XJ1.PS1309
-rw-r--r--psprint_config/configuration/ppds/TK350171.PS551
-rw-r--r--psprint_config/configuration/ppds/TK350172.PS563
-rw-r--r--psprint_config/configuration/ppds/TK350691.PS1
-rw-r--r--psprint_config/configuration/ppds/TK350692.PS597
-rw-r--r--psprint_config/configuration/ppds/TK350PJ2.PS590
-rw-r--r--psprint_config/configuration/ppds/TK360J21.PS923
-rw-r--r--psprint_config/configuration/ppds/TK360J51.PS986
-rw-r--r--psprint_config/configuration/ppds/TK360J71.PS1030
-rw-r--r--psprint_config/configuration/ppds/TK450PJ1.PS1134
-rw-r--r--psprint_config/configuration/ppds/TK550171.PS692
-rw-r--r--psprint_config/configuration/ppds/TK550391.PS780
-rw-r--r--psprint_config/configuration/ppds/TK550PJ1.PS828
-rw-r--r--psprint_config/configuration/ppds/TKP350J2.PS599
-rw-r--r--psprint_config/configuration/ppds/TKP360P1.PS863
-rw-r--r--psprint_config/configuration/ppds/TKP380J1.PS1350
-rw-r--r--psprint_config/configuration/ppds/TKP380P1.PS1351
-rw-r--r--psprint_config/configuration/ppds/TKP450J1.PS1103
-rw-r--r--psprint_config/configuration/ppds/TKP450P1.PS1089
-rw-r--r--psprint_config/configuration/ppds/TKP550J1.PS760
-rw-r--r--psprint_config/configuration/ppds/TKP600J1.PS1459
-rw-r--r--psprint_config/configuration/ppds/TKPH3801.PS1271
-rw-r--r--psprint_config/configuration/ppds/TKPH4501.PS1060
-rw-r--r--psprint_config/configuration/ppds/TKPH6001.PS1401
-rw-r--r--psprint_config/configuration/ppds/XRD61354.PS789
-rw-r--r--psprint_config/configuration/ppds/XRD61801.PS789
-rw-r--r--psprint_config/configuration/ppds/XRN17000.PS1267
-rw-r--r--psprint_config/configuration/ppds/XRN24320.PS1696
-rw-r--r--psprint_config/configuration/ppds/XR_DC230.PS1178
-rw-r--r--psprint_config/configuration/ppds/delzip0
-rw-r--r--psprint_config/configuration/ppds/makefile.mk46
-rw-r--r--psprint_config/configuration/psprint.conf114
-rw-r--r--psprint_config/prj/build.lst4
-rw-r--r--psprint_config/prj/d.lst4
-rw-r--r--python/Python-2.6.1-mingw.patch1269
-rw-r--r--python/Python-2.6.1.patch232
-rw-r--r--python/Python-ssl.patch210
-rw-r--r--python/makefile.mk157
-rw-r--r--python/prj/build.lst3
-rw-r--r--python/prj/d.lst109
-rw-r--r--python/pyversion.mk26
-rw-r--r--pyuno/demo/Addons.xcu21
-rw-r--r--pyuno/demo/biblioaccess.py35
-rw-r--r--pyuno/demo/hello_world_comp.py40
-rw-r--r--pyuno/demo/makefile.mk229
-rw-r--r--pyuno/demo/ooextract.py109
-rw-r--r--pyuno/demo/pyunoenv.bat6
-rw-r--r--pyuno/demo/pyunoenv.tcsh25
-rw-r--r--pyuno/demo/swriter.py105
-rw-r--r--pyuno/demo/swritercomp.py112
-rw-r--r--pyuno/demo/swritercompclient.py13
-rw-r--r--pyuno/doc/modes.sxdbin0 -> 7181 bytes
-rw-r--r--pyuno/inc/pyuno/pyuno.hxx296
-rw-r--r--pyuno/prj/build.lst5
-rw-r--r--pyuno/prj/d.lst27
-rw-r--r--pyuno/source/loader/makefile.mk112
-rw-r--r--pyuno/source/loader/pythonloader.py151
-rw-r--r--pyuno/source/loader/pyuno_loader.cxx248
-rw-r--r--pyuno/source/module/makefile.mk165
-rw-r--r--pyuno/source/module/pyuno4
-rw-r--r--pyuno/source/module/pyuno.cxx744
-rwxr-xr-xpyuno/source/module/pyuno.flt14
-rw-r--r--pyuno/source/module/pyuno_adapter.cxx437
-rw-r--r--pyuno/source/module/pyuno_callable.cxx273
-rw-r--r--pyuno/source/module/pyuno_dlopenwrapper.c60
-rw-r--r--pyuno/source/module/pyuno_except.cxx251
-rw-r--r--pyuno/source/module/pyuno_gc.cxx117
-rw-r--r--pyuno/source/module/pyuno_impl.hxx293
-rw-r--r--pyuno/source/module/pyuno_module.cxx717
-rw-r--r--pyuno/source/module/pyuno_runtime.cxx1058
-rw-r--r--pyuno/source/module/pyuno_type.cxx431
-rw-r--r--pyuno/source/module/pyuno_util.cxx249
-rw-r--r--pyuno/source/module/uno.py352
-rw-r--r--pyuno/source/module/unohelper.py304
-rwxr-xr-xpyuno/zipcore/makefile.mk132
-rw-r--r--pyuno/zipcore/python.cxx303
-rw-r--r--pyuno/zipcore/python.sh65
-rw-r--r--pyuno/zipcore/pyversion.inc28
-rwxr-xr-xqadevOOo/build.xml52
-rwxr-xr-xqadevOOo/makefile.mk51
-rw-r--r--qadevOOo/objdsc/acceptor.uno/com.sun.star.comp.io.Acceptor.csv2
-rw-r--r--qadevOOo/objdsc/acceptor/com.sun.star.comp.io.Acceptor.csv2
-rw-r--r--qadevOOo/objdsc/adabas/com.sun.star.comp.sdbcx.adabas.ODriver.csv5
-rw-r--r--qadevOOo/objdsc/ado/com.sun.star.comp.sdbc.ado.ODriver.csv5
-rw-r--r--qadevOOo/objdsc/basctl/com.sun.star.comp.basctl.AccessibleShape.csv23
-rw-r--r--qadevOOo/objdsc/basctl/com.sun.star.comp.basctl.AccessibleWindow.csv24
-rw-r--r--qadevOOo/objdsc/brdgfctr/com.sun.star.comp.remotebridges.BridgeFactory.csv6
-rw-r--r--qadevOOo/objdsc/bridgefac.uno/com.sun.star.comp.remotebridges.BridgeFactory.csv6
-rw-r--r--qadevOOo/objdsc/cached/com.sun.star.comp.ucb.CachedContentResultSetFactory.csv1
-rw-r--r--qadevOOo/objdsc/cached/com.sun.star.comp.ucb.CachedContentResultSetStubFactory.csv1
-rw-r--r--qadevOOo/objdsc/cached/com.sun.star.comp.ucb.CachedDynamicResultSetFactory.csv1
-rw-r--r--qadevOOo/objdsc/cached/com.sun.star.comp.ucb.CachedDynamicResultSetStubFactory.csv2
-rw-r--r--qadevOOo/objdsc/cfgmgr2/com.sun.star.comp.configuration.AdministrationProvider.csv6
-rw-r--r--qadevOOo/objdsc/cfgmgr2/com.sun.star.comp.configuration.ConfigurationProvider.csv6
-rw-r--r--qadevOOo/objdsc/cfgmgr2/com.sun.star.comp.configuration.ConfigurationProviderWrapper.csv6
-rw-r--r--qadevOOo/objdsc/cfgmgr2/com.sun.star.comp.configuration.OConfigurationRegistry.csv11
-rw-r--r--qadevOOo/objdsc/cfgmgr2/com.sun.star.comp.configuration.OInnerGroupInfoAccess.csv61
-rw-r--r--qadevOOo/objdsc/cfgmgr2/com.sun.star.comp.configuration.OInnerGroupUpdateAccess.csv72
-rw-r--r--qadevOOo/objdsc/cfgmgr2/com.sun.star.comp.configuration.OInnerSetInfoAccess.csv61
-rw-r--r--qadevOOo/objdsc/cfgmgr2/com.sun.star.comp.configuration.OInnerTreeSetUpdateAccess.csv72
-rw-r--r--qadevOOo/objdsc/cfgmgr2/com.sun.star.comp.configuration.OInnerValueSetUpdateAccess.csv72
-rw-r--r--qadevOOo/objdsc/cfgmgr2/com.sun.star.comp.configuration.ORootElementGroupInfoAccess.csv61
-rw-r--r--qadevOOo/objdsc/cfgmgr2/com.sun.star.comp.configuration.ORootElementGroupUpdateAccess.csv72
-rw-r--r--qadevOOo/objdsc/cfgmgr2/com.sun.star.comp.configuration.ORootElementSetInfoAccess.csv61
-rw-r--r--qadevOOo/objdsc/cfgmgr2/com.sun.star.comp.configuration.ORootElementTreeSetUpdateAccess.csv72
-rw-r--r--qadevOOo/objdsc/cfgmgr2/com.sun.star.comp.configuration.ORootElementValueSetUpdateAccess.csv72
-rw-r--r--qadevOOo/objdsc/cfgmgr2/com.sun.star.comp.configuration.OSetElementGroupInfoAccess.csv61
-rw-r--r--qadevOOo/objdsc/cfgmgr2/com.sun.star.comp.configuration.OSetElementGroupUpdateAccess.csv72
-rw-r--r--qadevOOo/objdsc/cfgmgr2/com.sun.star.comp.configuration.OSetElementSetInfoAccess.csv61
-rw-r--r--qadevOOo/objdsc/cfgmgr2/com.sun.star.comp.configuration.OSetElementTreeSetUpdateAccess.csv72
-rw-r--r--qadevOOo/objdsc/cfgmgr2/com.sun.star.comp.configuration.OSetElementValueSetUpdateAccess.csv72
-rw-r--r--qadevOOo/objdsc/cfgmgr2/com.sun.star.comp.configuration.backend.CopyImporter.csv5
-rw-r--r--qadevOOo/objdsc/cfgmgr2/com.sun.star.comp.configuration.backend.LayerUpdateMerger.csv18
-rw-r--r--qadevOOo/objdsc/cfgmgr2/com.sun.star.comp.configuration.backend.LocalDataImporter.csv1
-rw-r--r--qadevOOo/objdsc/cfgmgr2/com.sun.star.comp.configuration.backend.LocalHierarchyBrowser.csv1
-rw-r--r--qadevOOo/objdsc/cfgmgr2/com.sun.star.comp.configuration.backend.LocalSchemaSupplier.csv1
-rw-r--r--qadevOOo/objdsc/cfgmgr2/com.sun.star.comp.configuration.backend.LocalSingleBackend.csv11
-rw-r--r--qadevOOo/objdsc/cfgmgr2/com.sun.star.comp.configuration.backend.LocalSingleStratum.csv6
-rw-r--r--qadevOOo/objdsc/cfgmgr2/com.sun.star.comp.configuration.backend.MergeImporter.csv5
-rw-r--r--qadevOOo/objdsc/cfgmgr2/com.sun.star.comp.configuration.backend.MultiStratumBackend.csv10
-rw-r--r--qadevOOo/objdsc/cfgmgr2/com.sun.star.comp.configuration.backend.SingleBackendAdapter.csv10
-rw-r--r--qadevOOo/objdsc/cfgmgr2/com.sun.star.comp.configuration.backend.xml.LayerParser.csv4
-rw-r--r--qadevOOo/objdsc/cfgmgr2/com.sun.star.comp.configuration.backend.xml.LayerWriter.csv16
-rw-r--r--qadevOOo/objdsc/cfgmgr2/com.sun.star.comp.configuration.backend.xml.SchemaParser.csv6
-rw-r--r--qadevOOo/objdsc/cfgmgr2/com.sun.star.comp.configuration.bootstrap.BootstrapContext.csv2
-rw-r--r--qadevOOo/objdsc/cmdmail/com.sun.star.comp.system.SimpleCommandMail.csv6
-rw-r--r--qadevOOo/objdsc/configmgr/com.sun.star.comp.configuration.ConfigurationProvider.csv45
-rw-r--r--qadevOOo/objdsc/configmgr/com.sun.star.comp.configuration.DefaultProvider.csv33
-rw-r--r--qadevOOo/objdsc/connector.uno/com.sun.star.comp.io.Connector.csv1
-rw-r--r--qadevOOo/objdsc/connectr/com.sun.star.comp.io.Connector.csv1
-rw-r--r--qadevOOo/objdsc/corefl/com.sun.star.comp.stoc.CoreReflection.csv5
-rw-r--r--qadevOOo/objdsc/corereflection.uno/com.sun.star.comp.stoc.CoreReflection.csv5
-rw-r--r--qadevOOo/objdsc/cpld/com.sun.star.comp.stoc.DLLComponentLoader.csv5
-rw-r--r--qadevOOo/objdsc/dbaccess/com.sun.star.comp.dba.OCommandDefinition.csv13
-rw-r--r--qadevOOo/objdsc/dbaccess/com.sun.star.comp.dba.ODatabaseContext.csv13
-rw-r--r--qadevOOo/objdsc/dbaccess/com.sun.star.comp.dba.ODatabaseSource.csv29
-rw-r--r--qadevOOo/objdsc/dbaccess/com.sun.star.comp.dba.ORowSet.csv154
-rw-r--r--qadevOOo/objdsc/dbaccess/com.sun.star.comp.dbu.OInteractionHandler.csv1
-rw-r--r--qadevOOo/objdsc/dbaccess/com.sun.star.comp.dbu.SbaXGridControl.csv63
-rwxr-xr-xqadevOOo/objdsc/dbaccess/org.openoffice.comp.dba.OSingleSelectQueryComposer.csv24
-rw-r--r--qadevOOo/objdsc/dbaccess/org.openoffice.comp.dbu.ConnectionLineAccessibility.csv13
-rw-r--r--qadevOOo/objdsc/dbaccess/org.openoffice.comp.dbu.DBContentLoader.csv5
-rw-r--r--qadevOOo/objdsc/dbaccess/org.openoffice.comp.dbu.JoinViewAccessibility.csv13
-rw-r--r--qadevOOo/objdsc/dbaccess/org.openoffice.comp.dbu.ODatasourceAdministrationDialog.csv12
-rw-r--r--qadevOOo/objdsc/dbaccess/org.openoffice.comp.dbu.ODatasourceBrowser.csv40
-rw-r--r--qadevOOo/objdsc/dbaccess/org.openoffice.comp.dbu.OQueryDesign.csv11
-rw-r--r--qadevOOo/objdsc/dbaccess/org.openoffice.comp.dbu.OSQLMessageDialog.csv13
-rw-r--r--qadevOOo/objdsc/dbaccess/org.openoffice.comp.dbu.TableWindowAccessibility.csv13
-rw-r--r--qadevOOo/objdsc/dbpool/com.sun.star.comp.sdbc.OConnectionPool.csv4
-rw-r--r--qadevOOo/objdsc/defreg/com.sun.star.comp.stoc.NestedRegistry.csv9
-rw-r--r--qadevOOo/objdsc/dnd/com.sun.star.comp.datatransfer.dnd.OleDragAndDrop.csv18
-rw-r--r--qadevOOo/objdsc/dtrans/com.sun.star.comp.datatransfer.generic.csv19
-rw-r--r--qadevOOo/objdsc/dtransX11/com.sun.star.comp.datatransfer.X11.csv25
-rw-r--r--qadevOOo/objdsc/dynamicloader/com.sun.star.loader.Dynamic.csv5
-rw-r--r--qadevOOo/objdsc/file/com.sun.star.comp.sdbc.dbase.ODriver.csv9
-rw-r--r--qadevOOo/objdsc/file/com.sun.star.comp.sdbc.evoab.OEvoabDriver.csv9
-rw-r--r--qadevOOo/objdsc/file/com.sun.star.comp.sdbc.flat.ODriver.csv9
-rw-r--r--qadevOOo/objdsc/file/com.sun.star.sdbc.driver.calc.ODriver.csv9
-rw-r--r--qadevOOo/objdsc/file/com.sun.star.sdbc.driver.file.Driver.csv9
-rw-r--r--qadevOOo/objdsc/fileacc/com.sun.star.comp.ucb.SimpleFileAccess.csv17
-rw-r--r--qadevOOo/objdsc/fop/com.sun.star.comp.ui.dialogs.FolderPicker.csv12
-rw-r--r--qadevOOo/objdsc/forms/com.sun.star.comp.form.ONavigationBarControl.csv36
-rw-r--r--qadevOOo/objdsc/forms/com.sun.star.comp.form.ONavigationBarModel.csv60
-rw-r--r--qadevOOo/objdsc/forms/com.sun.star.comp.forms.OButtonControl.csv49
-rw-r--r--qadevOOo/objdsc/forms/com.sun.star.comp.forms.OButtonModel.csv78
-rw-r--r--qadevOOo/objdsc/forms/com.sun.star.comp.forms.OCheckBoxControl.csv47
-rw-r--r--qadevOOo/objdsc/forms/com.sun.star.comp.forms.OCheckBoxModel.csv95
-rw-r--r--qadevOOo/objdsc/forms/com.sun.star.comp.forms.OComboBoxControl.csv67
-rw-r--r--qadevOOo/objdsc/forms/com.sun.star.comp.forms.OComboBoxModel.csv97
-rw-r--r--qadevOOo/objdsc/forms/com.sun.star.comp.forms.OCurrencyControl.csv78
-rw-r--r--qadevOOo/objdsc/forms/com.sun.star.comp.forms.OCurrencyModel.csv97
-rw-r--r--qadevOOo/objdsc/forms/com.sun.star.comp.forms.ODatabaseForm.csv225
-rw-r--r--qadevOOo/objdsc/forms/com.sun.star.comp.forms.ODateControl.csv78
-rw-r--r--qadevOOo/objdsc/forms/com.sun.star.comp.forms.ODateModel.csv98
-rw-r--r--qadevOOo/objdsc/forms/com.sun.star.comp.forms.OEditControl.csv57
-rw-r--r--qadevOOo/objdsc/forms/com.sun.star.comp.forms.OEditModel.csv235
-rw-r--r--qadevOOo/objdsc/forms/com.sun.star.comp.forms.OFileControlModel.csv67
-rw-r--r--qadevOOo/objdsc/forms/com.sun.star.comp.forms.OFixedTextModel.csv63
-rw-r--r--qadevOOo/objdsc/forms/com.sun.star.comp.forms.OFormattedControl.csv62
-rw-r--r--qadevOOo/objdsc/forms/com.sun.star.comp.forms.OFormattedFieldWrapper.csv101
-rw-r--r--qadevOOo/objdsc/forms/com.sun.star.comp.forms.OFormsCollection.csv27
-rw-r--r--qadevOOo/objdsc/forms/com.sun.star.comp.forms.OGridControlModel.csv90
-rw-r--r--qadevOOo/objdsc/forms/com.sun.star.comp.forms.OGroupBoxControl.csv36
-rw-r--r--qadevOOo/objdsc/forms/com.sun.star.comp.forms.OGroupBoxModel.csv57
-rw-r--r--qadevOOo/objdsc/forms/com.sun.star.comp.forms.OHiddenModel.csv23
-rw-r--r--qadevOOo/objdsc/forms/com.sun.star.comp.forms.OImageButtonControl.csv45
-rw-r--r--qadevOOo/objdsc/forms/com.sun.star.comp.forms.OImageButtonModel.csv63
-rw-r--r--qadevOOo/objdsc/forms/com.sun.star.comp.forms.OImageControlControl.csv41
-rw-r--r--qadevOOo/objdsc/forms/com.sun.star.comp.forms.OImageControlModel.csv75
-rw-r--r--qadevOOo/objdsc/forms/com.sun.star.comp.forms.OListBoxControl.csv67
-rw-r--r--qadevOOo/objdsc/forms/com.sun.star.comp.forms.OListBoxModel.csv95
-rw-r--r--qadevOOo/objdsc/forms/com.sun.star.comp.forms.ONumericControl.csv78
-rw-r--r--qadevOOo/objdsc/forms/com.sun.star.comp.forms.ONumericModel.csv97
-rw-r--r--qadevOOo/objdsc/forms/com.sun.star.comp.forms.OPatternControl.csv68
-rw-r--r--qadevOOo/objdsc/forms/com.sun.star.comp.forms.OPatternModel.csv84
-rw-r--r--qadevOOo/objdsc/forms/com.sun.star.comp.forms.ORadioButtonControl.csv46
-rw-r--r--qadevOOo/objdsc/forms/com.sun.star.comp.forms.ORadioButtonModel.csv95
-rw-r--r--qadevOOo/objdsc/forms/com.sun.star.comp.forms.OScrollBarModel.csv69
-rw-r--r--qadevOOo/objdsc/forms/com.sun.star.comp.forms.OSpinButtonModel.csv66
-rw-r--r--qadevOOo/objdsc/forms/com.sun.star.comp.forms.OTimeControl.csv76
-rw-r--r--qadevOOo/objdsc/forms/com.sun.star.comp.forms.OTimeModel.csv96
-rw-r--r--qadevOOo/objdsc/fps/com.sun.star.comp.ui.dialogs.FilePicker.csv36
-rw-r--r--qadevOOo/objdsc/ftransl/com.sun.star.comp.datatransfer.DataFormatTranslator.csv7
-rwxr-xr-xqadevOOo/objdsc/fwk/com.sun.star.comp.framework.ControlMenuController.csv5
-rw-r--r--qadevOOo/objdsc/fwk/com.sun.star.comp.framework.Desktop.csv37
-rw-r--r--qadevOOo/objdsc/fwk/com.sun.star.comp.framework.DispatchRecorder.csv10
-rw-r--r--qadevOOo/objdsc/fwk/com.sun.star.comp.framework.DispatchRecorderSupplier.csv3
-rwxr-xr-xqadevOOo/objdsc/fwk/com.sun.star.comp.framework.FontMenuController.csv5
-rwxr-xr-xqadevOOo/objdsc/fwk/com.sun.star.comp.framework.FontSizeMenuController.csv5
-rwxr-xr-xqadevOOo/objdsc/fwk/com.sun.star.comp.framework.FooterMenuController.csv5
-rw-r--r--qadevOOo/objdsc/fwk/com.sun.star.comp.framework.Frame.csv30
-rwxr-xr-xqadevOOo/objdsc/fwk/com.sun.star.comp.framework.HeaderMenuController.csv5
-rw-r--r--qadevOOo/objdsc/fwk/com.sun.star.comp.framework.JobExecutor.csv1
-rw-r--r--qadevOOo/objdsc/fwk/com.sun.star.comp.framework.JobHandler.csv3
-rwxr-xr-xqadevOOo/objdsc/fwk/com.sun.star.comp.framework.LayoutManager.csv30
-rwxr-xr-xqadevOOo/objdsc/fwk/com.sun.star.comp.framework.MacrosMenuController.csv5
-rw-r--r--qadevOOo/objdsc/fwk/com.sun.star.comp.framework.MailToDispatcher.csv3
-rwxr-xr-xqadevOOo/objdsc/fwk/com.sun.star.comp.framework.MenuBarFactory.csv1
-rwxr-xr-xqadevOOo/objdsc/fwk/com.sun.star.comp.framework.ModuleManager.csv6
-rwxr-xr-xqadevOOo/objdsc/fwk/com.sun.star.comp.framework.ModuleUIConfigurationManager.csv21
-rwxr-xr-xqadevOOo/objdsc/fwk/com.sun.star.comp.framework.ModuleUIConfigurationManagerSupplier.csv1
-rwxr-xr-xqadevOOo/objdsc/fwk/com.sun.star.comp.framework.ObjectMenuController.csv5
-rwxr-xr-xqadevOOo/objdsc/fwk/com.sun.star.comp.framework.PopupMenuControllerFactory.csv6
-rw-r--r--qadevOOo/objdsc/fwk/com.sun.star.comp.framework.ServiceHandler.csv3
-rw-r--r--qadevOOo/objdsc/fwk/com.sun.star.comp.framework.SoundHandler.csv4
-rwxr-xr-xqadevOOo/objdsc/fwk/com.sun.star.comp.framework.StatusBarControllerFactory.csv6
-rwxr-xr-xqadevOOo/objdsc/fwk/com.sun.star.comp.framework.ToolBarsMenuController.csv5
-rwxr-xr-xqadevOOo/objdsc/fwk/com.sun.star.comp.framework.UICategoryDescription.csv5
-rwxr-xr-xqadevOOo/objdsc/fwk/com.sun.star.comp.framework.UICommandDescription.csv5
-rwxr-xr-xqadevOOo/objdsc/fwk/com.sun.star.comp.framework.UIConfigurationManager.csv23
-rwxr-xr-xqadevOOo/objdsc/fwk/com.sun.star.comp.framework.UIElementFactoryManager.csv5
-rw-r--r--qadevOOo/objdsc/fwk/com.sun.star.comp.framework.URLTransformer.csv4
-rw-r--r--qadevOOo/objdsc/fwl/com.sun.star.comp.framework.ContentHandlerFactory.csv10
-rw-r--r--qadevOOo/objdsc/fwl/com.sun.star.comp.framework.FilterFactory.csv16
-rw-r--r--qadevOOo/objdsc/fwl/com.sun.star.comp.framework.FrameLoaderFactory.csv10
-rw-r--r--qadevOOo/objdsc/fwl/com.sun.star.comp.framework.PathSettings.csv39
-rw-r--r--qadevOOo/objdsc/fwl/com.sun.star.comp.framework.SubstituteVariables.csv3
-rw-r--r--qadevOOo/objdsc/fwl/com.sun.star.comp.framework.TypeDetection.csv15
-rw-r--r--qadevOOo/objdsc/i18n/com.sun.star.i18n.BreakIterator.csv23
-rw-r--r--qadevOOo/objdsc/i18n/com.sun.star.i18n.CalendarImpl.csv24
-rw-r--r--qadevOOo/objdsc/i18n/com.sun.star.i18n.ChapterCollator.csv10
-rw-r--r--qadevOOo/objdsc/i18n/com.sun.star.i18n.CharacterClassification.csv13
-rw-r--r--qadevOOo/objdsc/i18n/com.sun.star.i18n.Collator.csv10
-rw-r--r--qadevOOo/objdsc/i18n/com.sun.star.i18n.IndexEntrySupplier.csv12
-rw-r--r--qadevOOo/objdsc/i18n/com.sun.star.i18n.LocaleData.csv15
-rw-r--r--qadevOOo/objdsc/i18n/com.sun.star.i18n.NumberFormatCodeMapper.csv7
-rw-r--r--qadevOOo/objdsc/i18n/com.sun.star.i18n.Transliteration.csv19
-rw-r--r--qadevOOo/objdsc/i18n/com.sun.star.util.TextSearch.csv3
-rw-r--r--qadevOOo/objdsc/implreg.uno/com.sun.star.comp.stoc.ImplementationRegistration.csv4
-rw-r--r--qadevOOo/objdsc/impreg/com.sun.star.comp.stoc.ImplementationRegistration.csv4
-rw-r--r--qadevOOo/objdsc/insp/com.sun.star.comp.stoc.Introspection.csv1
-rw-r--r--qadevOOo/objdsc/introspection.uno/com.sun.star.comp.stoc.Introspection.csv1
-rw-r--r--qadevOOo/objdsc/inv/com.sun.star.comp.stoc.Invocation.csv2
-rw-r--r--qadevOOo/objdsc/invadp/com.sun.star.comp.stoc.InvocationAdapterFactory.csv2
-rw-r--r--qadevOOo/objdsc/invocadapt.uno/com.sun.star.comp.stoc.InvocationAdapterFactory.csv2
-rw-r--r--qadevOOo/objdsc/invocation.uno/com.sun.star.comp.stoc.Invocation.csv2
-rw-r--r--qadevOOo/objdsc/javaloader.uno/com.sun.star.comp.stoc.JavaComponentLoader.csv5
-rw-r--r--qadevOOo/objdsc/javaloader/com.sun.star.comp.stoc.JavaComponentLoader.csv5
-rw-r--r--qadevOOo/objdsc/javavm.uno/com.sun.star.comp.stoc.JavaVirtualMachine.csv6
-rw-r--r--qadevOOo/objdsc/jdbc/com.sun.star.comp.sdbc.JDBCDriver.csv5
-rw-r--r--qadevOOo/objdsc/jen/com.sun.star.comp.stoc.JavaVirtualMachine.csv6
-rw-r--r--qadevOOo/objdsc/lng/com.sun.star.lingu2.DicList.csv18
-rw-r--r--qadevOOo/objdsc/lng/com.sun.star.lingu2.LinguProps.csv34
-rw-r--r--qadevOOo/objdsc/lng/com.sun.star.lingu2.LngSvcMgr.csv15
-rw-r--r--qadevOOo/objdsc/lnn/com.sun.star.lingu2.Hyphenator.csv15
-rw-r--r--qadevOOo/objdsc/lnn/com.sun.star.lingu2.SpellChecker.csv14
-rw-r--r--qadevOOo/objdsc/lnn/com.sun.star.lingu2.Thesaurus.csv11
-rw-r--r--qadevOOo/objdsc/mcnttype/com.sun.star.comp.datatransfer.MimeContentTypeFactory.csv6
-rw-r--r--qadevOOo/objdsc/mozab/com.sun.star.comp.sdbc.MozabDriver.csv5
-rw-r--r--qadevOOo/objdsc/namingservice.uno/com.sun.star.comp.stoc.NamingService.csv3
-rw-r--r--qadevOOo/objdsc/namingservice/com.sun.star.comp.stoc.NamingService.csv3
-rw-r--r--qadevOOo/objdsc/nestedreg.uno/com.sun.star.comp.stoc.NestedRegistry.csv9
-rw-r--r--qadevOOo/objdsc/odbc/com.sun.star.comp.sdbc.ODBCDriver.csv5
-rw-r--r--qadevOOo/objdsc/odbc/org.openoffice.comp.drivers.MySQL.Driver.csv9
-rw-r--r--qadevOOo/objdsc/pcr/com.sun.star.comp.extensions.ButtonNavigationHandler.csv19
-rw-r--r--qadevOOo/objdsc/pcr/com.sun.star.comp.extensions.CellBindingPropertyHandler.csv19
-rw-r--r--qadevOOo/objdsc/pcr/com.sun.star.comp.extensions.DefaultFormComponentInspectorModel.csv7
-rw-r--r--qadevOOo/objdsc/pcr/com.sun.star.comp.extensions.EFormsPropertyHandler.csv19
-rw-r--r--qadevOOo/objdsc/pcr/com.sun.star.comp.extensions.EditPropertyHandler.csv19
-rw-r--r--qadevOOo/objdsc/pcr/com.sun.star.comp.extensions.EventHandler.csv19
-rw-r--r--qadevOOo/objdsc/pcr/com.sun.star.comp.extensions.FormComponentPropertyHandler.csv19
-rwxr-xr-xqadevOOo/objdsc/pcr/com.sun.star.comp.extensions.GenericPropertyHandler.csv19
-rw-r--r--qadevOOo/objdsc/pcr/com.sun.star.comp.extensions.XSDValidationPropertyHandler.csv19
-rw-r--r--qadevOOo/objdsc/pcr/org.openoffice.comp.extensions.FormController.csv27
-rwxr-xr-xqadevOOo/objdsc/pcr/org.openoffice.comp.extensions.ObjectInspector.csv13
-rw-r--r--qadevOOo/objdsc/pcr/org.openoffice.comp.extensions.ObjectInspectorModel.csv7
-rw-r--r--qadevOOo/objdsc/proxyfac.uno/com.sun.star.comp.stoc.ProxyFactory.csv1
-rw-r--r--qadevOOo/objdsc/proxyfac/com.sun.star.comp.stoc.ProxyFactory.csv1
-rw-r--r--qadevOOo/objdsc/proxyset/com.sun.star.comp.system.SystemProxySettings.csv17
-rwxr-xr-xqadevOOo/objdsc/qadevOOo/bogus.SelfTest.csv7
-rw-r--r--qadevOOo/objdsc/rdbtdp/com.sun.star.comp.stoc.RegistryTypeDescriptionProvider.csv6
-rw-r--r--qadevOOo/objdsc/regtypeprov.uno/com.sun.star.comp.stoc.RegistryTypeDescriptionProvider.csv6
-rw-r--r--qadevOOo/objdsc/remotebridge.uno/com.sun.star.comp.remotebridges.Bridge.various.csv7
-rw-r--r--qadevOOo/objdsc/remotebridge/com.sun.star.comp.remotebridges.Bridge.various.csv7
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.Calc.XMLContentExporter.csv6
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.Calc.XMLContentImporter.csv14
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.Calc.XMLExporter.csv6
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.Calc.XMLImporter.csv14
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.Calc.XMLMetaExporter.csv6
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.Calc.XMLMetaImporter.csv14
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.Calc.XMLSettingsExporter.csv6
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.Calc.XMLSettingsImporter.csv14
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.Calc.XMLStylesExporter.csv6
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.Calc.XMLStylesImporter.csv14
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScAnnotationObj.csv17
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScAnnotationShapeObj.csv244
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScAnnotationsObj.csv7
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScAreaLinkObj.csv19
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScAreaLinksObj.csv7
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScAutoFormatFieldObj.csv50
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScAutoFormatObj.csv20
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScAutoFormatsObj.csv11
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScCellCursorObj.csv239
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScCellFieldObj.csv16
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScCellFieldsObj.csv6
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScCellFormatsEnumeration.csv2
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScCellFormatsObj.csv5
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScCellObj.csv223
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScCellRangeObj.csv226
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScCellRangesObj.csv206
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScCellSearchObj.csv21
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScCellTextCursor.csv180
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScCellsEnumeration.csv2
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScCellsObj.csv3
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScChartObj.csv9
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScChartsObj.csv10
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScConsolidationDescriptor.csv12
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScDDELinkObj.csv8
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScDDELinksObj.csv8
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScDataPilotFieldGroupItemObj.csv2
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScDataPilotFieldGroupObj.csv10
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScDataPilotFieldGroupsObj.csv8
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScDataPilotFieldObj.csv28
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScDataPilotFieldsObj.csv8
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScDataPilotItemObj.csv11
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScDataPilotItemsObj.csv8
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScDataPilotTableObj.csv20
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScDataPilotTablesObj.csv11
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScDatabaseRangeObj.csv28
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScDatabaseRangesObj.csv10
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScDocumentConfiguration.csv49
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScDrawPageObj.csv11
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScDrawPagesObj.csv8
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScFilterDescriptorBase.csv18
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScFunctionListObj.csv9
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScHeaderFieldObj.csv16
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScHeaderFieldsObj.csv6
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScHeaderFooterContentObj.csv3
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScHeaderFooterTextCursor.csv180
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScHeaderFooterTextObj.csv21
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScIndexEnumeration_CellAnnotationsEnumeration.csv2
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScIndexEnumeration_CellAreaLinksEnumeration.csv2
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScIndexEnumeration_DDELinksEnumeration.csv2
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScIndexEnumeration_DataPilotFieldsEnumeration.csv2
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScIndexEnumeration_DataPilotItemsEnumeration.csv2
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScIndexEnumeration_DataPilotTablesEnumeration.csv2
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScIndexEnumeration_DatabaseRangesEnumeration.csv2
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScIndexEnumeration_FunctionDescriptionEnumeration.csv2
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScIndexEnumeration_LabelRangesEnumeration.csv2
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScIndexEnumeration_NamedRangesEnumeration.csv2
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScIndexEnumeration_ScenariosEnumeration.csv2
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScIndexEnumeration_SheetCellRangesEnumeration.csv2
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScIndexEnumeration_SheetLinksEnumeration.csv2
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScIndexEnumeration_SpreadsheetViewPanesEnumeration.csv2
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScIndexEnumeration_SpreadsheetsEnumeration.csv2
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScIndexEnumeration_SubTotalFieldsEnumeration.csv2
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScIndexEnumeration_TableAutoFormatEnumeration.csv2
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScIndexEnumeration_TableChartsEnumeration.csv2
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScIndexEnumeration_TableColumnsEnumeration.csv2
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScIndexEnumeration_TableConditionalEntryEnumeration.csv2
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScIndexEnumeration_TableRowsEnumeration.csv2
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScIndexEnumeration_TextFieldEnumeration.csv2
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScLabelRangeObj.csv4
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScLabelRangesObj.csv7
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScModelObj.csv94
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScNamedRangeObj.csv9
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScNamedRangesObj.csv12
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScPageObj.csv11
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScRecentFunctionsObj.csv3
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScScenariosObj.csv10
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScShapeObj.csv29
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScSheetLinkObj.csv15
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScSheetLinksObj.csv8
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScSpreadsheetSettings.csv25
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScSpreadsheetSettingsObj.csv24
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScStyleFamiliesObj.csv7
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScStyleFamilyObj.csv10
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScStyleObj.csv27
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScSubTotalDescriptorBase.csv22
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScSubTotalFieldObj.csv4
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScTabViewObj.csv86
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScTableColumnObj.csv16
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScTableColumnsObj.csv10
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScTableConditionalEntry.csv10
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScTableConditionalFormat.csv11
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScTableRowObj.csv14
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScTableRowsObj.csv7
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScTableSheetObj.csv293
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScTableSheetsObj.csv14
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScTableValidationObj.csv25
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScUniqueCellFormatsEnumeration.csv2
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScUniqueCellFormatsObj.csv5
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.office.ScViewPaneObj.csv11
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.unknown.AccessibleEditableTextPara_HeaderFooter.csv52
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.unknown.AccessibleEditableTextPara_PreviewCell.csv52
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.unknown.AccessibleEditableTextPara_PreviewNote.csv52
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.unknown.ScAccessibleCell.csv40
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.unknown.ScAccessibleCsvCell.csv36
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.unknown.ScAccessibleCsvGrid.csv45
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.unknown.ScAccessibleCsvRuler.csv36
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.unknown.ScAccessibleDocument.csv28
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.unknown.ScAccessibleDocumentPagePreview.csv21
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.unknown.ScAccessiblePageHeader.csv21
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.unknown.ScAccessiblePageHeaderArea.csv21
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.unknown.ScAccessiblePreviewCell.csv32
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.unknown.ScAccessiblePreviewHeaderCell.csv32
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.unknown.ScAccessiblePreviewTable.csv47
-rw-r--r--qadevOOo/objdsc/sc/com.sun.star.comp.unknown.ScAccessibleSpreadsheet.csv47
-rw-r--r--qadevOOo/objdsc/sch/com.sun.star.comp.chart.AccAxis.csv25
-rw-r--r--qadevOOo/objdsc/sch/com.sun.star.comp.chart.AccDataPoint.csv25
-rw-r--r--qadevOOo/objdsc/sch/com.sun.star.comp.chart.AccDataSeries.csv25
-rw-r--r--qadevOOo/objdsc/sch/com.sun.star.comp.chart.AccDiagram.csv25
-rw-r--r--qadevOOo/objdsc/sch/com.sun.star.comp.chart.AccFloor.csv25
-rw-r--r--qadevOOo/objdsc/sch/com.sun.star.comp.chart.AccGrid.csv25
-rw-r--r--qadevOOo/objdsc/sch/com.sun.star.comp.chart.AccLegend.csv25
-rw-r--r--qadevOOo/objdsc/sch/com.sun.star.comp.chart.AccLegendEntry.csv25
-rw-r--r--qadevOOo/objdsc/sch/com.sun.star.comp.chart.AccStatisticsObject.csv25
-rw-r--r--qadevOOo/objdsc/sch/com.sun.star.comp.chart.AccTitle.csv25
-rw-r--r--qadevOOo/objdsc/sch/com.sun.star.comp.chart.AccWall.csv25
-rw-r--r--qadevOOo/objdsc/sch/com.sun.star.comp.chart.AccessibleDocumentView.csv22
-rw-r--r--qadevOOo/objdsc/sch/com.sun.star.comp.office.AccArea.csv25
-rw-r--r--qadevOOo/objdsc/sch/com.sun.star.comp.office.ChXChartAxis.csv92
-rw-r--r--qadevOOo/objdsc/sch/com.sun.star.comp.office.ChXChartData.csv4
-rw-r--r--qadevOOo/objdsc/sch/com.sun.star.comp.office.ChXChartDataArray.csv10
-rw-r--r--qadevOOo/objdsc/sch/com.sun.star.comp.office.ChXChartDocument.csv37
-rw-r--r--qadevOOo/objdsc/sch/com.sun.star.comp.office.ChXChartView.csv10
-rw-r--r--qadevOOo/objdsc/sch/com.sun.star.comp.office.ChXDataPoint.csv97
-rw-r--r--qadevOOo/objdsc/sch/com.sun.star.comp.office.ChXDataRow.csv109
-rw-r--r--qadevOOo/objdsc/sch/com.sun.star.comp.office.ChXDiagram.csv80
-rw-r--r--qadevOOo/objdsc/sch/com.sun.star.comp.office.ChartArea.csv43
-rw-r--r--qadevOOo/objdsc/sch/com.sun.star.comp.office.ChartGrid.csv21
-rw-r--r--qadevOOo/objdsc/sch/com.sun.star.comp.office.ChartLegend.csv113
-rw-r--r--qadevOOo/objdsc/sch/com.sun.star.comp.office.ChartLine.csv21
-rw-r--r--qadevOOo/objdsc/sch/com.sun.star.comp.office.ChartTitle.csv79
-rw-r--r--qadevOOo/objdsc/sd/com.sun.star.comp.office.SdDocLinkTargets.csv5
-rw-r--r--qadevOOo/objdsc/sd/com.sun.star.comp.office.SdDrawPage.csv37
-rw-r--r--qadevOOo/objdsc/sd/com.sun.star.comp.office.SdDrawPagesAccess.csv8
-rw-r--r--qadevOOo/objdsc/sd/com.sun.star.comp.office.SdGenericDrawPage.csv34
-rw-r--r--qadevOOo/objdsc/sd/com.sun.star.comp.office.SdLayer.csv11
-rw-r--r--qadevOOo/objdsc/sd/com.sun.star.comp.office.SdLayerManager.csv11
-rw-r--r--qadevOOo/objdsc/sd/com.sun.star.comp.office.SdMasterPage.csv34
-rw-r--r--qadevOOo/objdsc/sd/com.sun.star.comp.office.SdMasterPagesAccess.csv6
-rw-r--r--qadevOOo/objdsc/sd/com.sun.star.comp.office.SdPageLinkTargets.csv5
-rw-r--r--qadevOOo/objdsc/sd/com.sun.star.comp.office.SdXCustomPresentation.csv9
-rw-r--r--qadevOOo/objdsc/sd/com.sun.star.comp.office.SdXCustomPresentationAccess.csv10
-rw-r--r--qadevOOo/objdsc/sd/com.sun.star.comp.office.SdXImpressDocument.csv60
-rw-r--r--qadevOOo/objdsc/sd/com.sun.star.comp.office.SdXPresentation.csv22
-rw-r--r--qadevOOo/objdsc/sd/com.sun.star.comp.office.SdXShape.csv29
-rw-r--r--qadevOOo/objdsc/sd/com.sun.star.comp.unknown.AccessibleDrawDocumentView.csv22
-rw-r--r--qadevOOo/objdsc/sd/com.sun.star.comp.unknown.AccessibleOutlineView.csv13
-rw-r--r--qadevOOo/objdsc/sd/com.sun.star.comp.unknown.AccessibleSlideView.csv22
-rw-r--r--qadevOOo/objdsc/sd/com.sun.star.comp.unknown.DrawController_DrawView.csv58
-rw-r--r--qadevOOo/objdsc/sd/com.sun.star.comp.unknown.DrawController_HandoutView.csv58
-rw-r--r--qadevOOo/objdsc/sd/com.sun.star.comp.unknown.DrawController_NotesView.csv58
-rw-r--r--qadevOOo/objdsc/sd/com.sun.star.comp.unknown.DrawController_OutlineView.csv58
-rw-r--r--qadevOOo/objdsc/sd/com.sun.star.comp.unknown.DrawController_PresentationView.csv58
-rw-r--r--qadevOOo/objdsc/servicemgr.uno/com.sun.star.comp.stoc.OServiceManager.csv28
-rw-r--r--qadevOOo/objdsc/sfx/com.sun.star.comp.office.FrameLoader.csv5
-rw-r--r--qadevOOo/objdsc/sfx/com.sun.star.comp.sfx2.AppDispatchProvider.csv3
-rw-r--r--qadevOOo/objdsc/sfx/com.sun.star.comp.sfx2.DocumentTemplates.csv9
-rw-r--r--qadevOOo/objdsc/sfx/com.sun.star.comp.sfx2.SfxMacroLoader.csv3
-rw-r--r--qadevOOo/objdsc/sfx/com.sun.star.comp.sfx2.StandaloneDocumentInfo.csv46
-rw-r--r--qadevOOo/objdsc/shlibloader.uno/com.sun.star.comp.stoc.DLLComponentLoader.csv5
-rw-r--r--qadevOOo/objdsc/simplereg.uno/com.sun.star.comp.stoc.SimpleRegistry.csv8
-rw-r--r--qadevOOo/objdsc/simreg/com.sun.star.comp.stoc.SimpleRegistry.csv8
-rw-r--r--qadevOOo/objdsc/sm/com.sun.star.comp.Math.XMLExporter.csv6
-rw-r--r--qadevOOo/objdsc/sm/com.sun.star.comp.Math.XMLImporter.csv14
-rw-r--r--qadevOOo/objdsc/sm/com.sun.star.comp.Math.XMLMetaExporter.csv6
-rw-r--r--qadevOOo/objdsc/sm/com.sun.star.comp.Math.XMLMetaImporter.csv14
-rw-r--r--qadevOOo/objdsc/sm/com.sun.star.comp.Math.XMLSettingsExporter.csv6
-rw-r--r--qadevOOo/objdsc/sm/com.sun.star.comp.Math.XMLSettingsImporter.csv14
-rw-r--r--qadevOOo/objdsc/sm/com.sun.star.comp.unknown.SmEditAccessible.csv22
-rw-r--r--qadevOOo/objdsc/sm/com.sun.star.comp.unknown.SmGraphicAccessible.csv39
-rw-r--r--qadevOOo/objdsc/sm/math.SmModel.csv55
-rw-r--r--qadevOOo/objdsc/smgr/com.sun.star.comp.stoc.OServiceManager.csv28
-rw-r--r--qadevOOo/objdsc/smplmail/com.sun.star.comp.system.SimpleSystemMail.csv6
-rw-r--r--qadevOOo/objdsc/srtrs/com.sun.star.comp.ucb.SortedDynamicResultSetFactory.csv1
-rw-r--r--qadevOOo/objdsc/stm/com.sun.star.comp.io.stm.DataInputStream.csv20
-rw-r--r--qadevOOo/objdsc/stm/com.sun.star.comp.io.stm.DataOutputStream.csv14
-rw-r--r--qadevOOo/objdsc/stm/com.sun.star.comp.io.stm.MarkableInputStream.csv16
-rw-r--r--qadevOOo/objdsc/stm/com.sun.star.comp.io.stm.MarkableOutputStream.csv14
-rw-r--r--qadevOOo/objdsc/stm/com.sun.star.comp.io.stm.ObjectInputStream.csv26
-rw-r--r--qadevOOo/objdsc/stm/com.sun.star.comp.io.stm.ObjectOutputStream.csv19
-rw-r--r--qadevOOo/objdsc/stm/com.sun.star.comp.io.stm.Pipe.csv8
-rw-r--r--qadevOOo/objdsc/stm/com.sun.star.comp.stoc.Pump.csv8
-rw-r--r--qadevOOo/objdsc/streams.uno/com.sun.star.comp.io.stm.DataInputStream.csv20
-rw-r--r--qadevOOo/objdsc/streams.uno/com.sun.star.comp.io.stm.DataOutputStream.csv14
-rw-r--r--qadevOOo/objdsc/streams.uno/com.sun.star.comp.io.stm.MarkableInputStream.csv16
-rw-r--r--qadevOOo/objdsc/streams.uno/com.sun.star.comp.io.stm.MarkableOutputStream.csv14
-rw-r--r--qadevOOo/objdsc/streams.uno/com.sun.star.comp.io.stm.ObjectInputStream.csv26
-rw-r--r--qadevOOo/objdsc/streams.uno/com.sun.star.comp.io.stm.ObjectOutputStream.csv19
-rw-r--r--qadevOOo/objdsc/streams.uno/com.sun.star.comp.io.stm.Pipe.csv8
-rw-r--r--qadevOOo/objdsc/streams.uno/com.sun.star.comp.stoc.Pump.csv8
-rw-r--r--qadevOOo/objdsc/svtools/com.sun.star.comp.svtools.AccessibleBrowseBox.csv12
-rw-r--r--qadevOOo/objdsc/svtools/com.sun.star.comp.svtools.AccessibleBrowseBoxHeaderBar.csv12
-rw-r--r--qadevOOo/objdsc/svtools/com.sun.star.comp.svtools.AccessibleBrowseBoxHeaderCell.csv12
-rw-r--r--qadevOOo/objdsc/svtools/com.sun.star.comp.svtools.AccessibleBrowseBoxTable.csv12
-rw-r--r--qadevOOo/objdsc/svtools/com.sun.star.comp.svtools.AccessibleBrowseBoxTableCell.csv12
-rw-r--r--qadevOOo/objdsc/svtools/com.sun.star.comp.svtools.AccessibleIconChoiceCtrl.csv28
-rw-r--r--qadevOOo/objdsc/svtools/com.sun.star.comp.svtools.AccessibleIconChoiceCtrlEntry.csv38
-rw-r--r--qadevOOo/objdsc/svtools/com.sun.star.comp.svtools.AccessibleTabBar.csv24
-rw-r--r--qadevOOo/objdsc/svtools/com.sun.star.comp.svtools.AccessibleTabBarPage.csv24
-rw-r--r--qadevOOo/objdsc/svtools/com.sun.star.comp.svtools.AccessibleTabBarPageList.csv31
-rw-r--r--qadevOOo/objdsc/svtools/com.sun.star.comp.svtools.AccessibleTreeListBox.csv28
-rw-r--r--qadevOOo/objdsc/svtools/com.sun.star.comp.svtools.AccessibleTreeListBoxEntry.csv49
-rw-r--r--qadevOOo/objdsc/svx/com.sun.star.comp.Draw.GraphicExporter.csv5
-rw-r--r--qadevOOo/objdsc/svx/com.sun.star.comp.office.SvxDrawPage.csv37
-rw-r--r--qadevOOo/objdsc/svx/com.sun.star.comp.office.SvxGraphicObject.csv212
-rw-r--r--qadevOOo/objdsc/svx/com.sun.star.comp.office.SvxShape.csv236
-rw-r--r--qadevOOo/objdsc/svx/com.sun.star.comp.office.SvxShapeCircle.csv238
-rw-r--r--qadevOOo/objdsc/svx/com.sun.star.comp.office.SvxShapeCollection.csv6
-rw-r--r--qadevOOo/objdsc/svx/com.sun.star.comp.office.SvxShapeConnector.csv227
-rw-r--r--qadevOOo/objdsc/svx/com.sun.star.comp.office.SvxShapeControl.csv31
-rw-r--r--qadevOOo/objdsc/svx/com.sun.star.comp.office.SvxShapeDimensioning.csv233
-rw-r--r--qadevOOo/objdsc/svx/com.sun.star.comp.office.SvxShapeGroup.csv37
-rw-r--r--qadevOOo/objdsc/svx/com.sun.star.comp.office.SvxShapePolyPolygon.csv238
-rw-r--r--qadevOOo/objdsc/svx/com.sun.star.comp.office.SvxShapePolyPolygonBezier.csv238
-rw-r--r--qadevOOo/objdsc/svx/com.sun.star.comp.office.SvxUnoNumberingRules.csv16
-rw-r--r--qadevOOo/objdsc/svx/com.sun.star.comp.office.SvxUnoText.csv21
-rw-r--r--qadevOOo/objdsc/svx/com.sun.star.comp.office.SvxUnoTextContent.csv205
-rw-r--r--qadevOOo/objdsc/svx/com.sun.star.comp.office.SvxUnoTextContentEnum.csv2
-rw-r--r--qadevOOo/objdsc/svx/com.sun.star.comp.office.SvxUnoTextCursor.csv180
-rw-r--r--qadevOOo/objdsc/svx/com.sun.star.comp.office.SvxUnoTextField.csv16
-rw-r--r--qadevOOo/objdsc/svx/com.sun.star.comp.office.SvxUnoTextRange.csv147
-rw-r--r--qadevOOo/objdsc/svx/com.sun.star.comp.office.SvxUnoTextRangeEnumeration.csv2
-rw-r--r--qadevOOo/objdsc/svx/com.sun.star.comp.ui.SvxGraphCtrlAccessibleContext.csv29
-rw-r--r--qadevOOo/objdsc/svx/com.sun.star.comp.unknown.AccessibleControlShape.csv25
-rw-r--r--qadevOOo/objdsc/svx/com.sun.star.comp.unknown.AccessibleEditableTextPara.csv53
-rw-r--r--qadevOOo/objdsc/svx/com.sun.star.comp.unknown.AccessibleGraphicShape.csv25
-rw-r--r--qadevOOo/objdsc/svx/com.sun.star.comp.unknown.AccessibleImageBullet.csv13
-rw-r--r--qadevOOo/objdsc/svx/com.sun.star.comp.unknown.AccessibleOLEShape.csv25
-rw-r--r--qadevOOo/objdsc/svx/com.sun.star.comp.unknown.AccessiblePageShape.csv25
-rw-r--r--qadevOOo/objdsc/svx/com.sun.star.comp.unknown.AccessiblePresentationGraphicShape.csv25
-rw-r--r--qadevOOo/objdsc/svx/com.sun.star.comp.unknown.AccessiblePresentationOLEShape.csv25
-rw-r--r--qadevOOo/objdsc/svx/com.sun.star.comp.unknown.AccessiblePresentationShape.csv25
-rw-r--r--qadevOOo/objdsc/svx/com.sun.star.comp.unknown.AccessibleShape.csv25
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.Writer.DocumentSettings.csv65
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.Writer.SwAccessibleDocumentPageView.csv22
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.Writer.SwAccessibleDocumentView.csv29
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.Writer.SwAccessibleEndnoteView.csv22
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.Writer.SwAccessibleFooterView.csv22
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.Writer.SwAccessibleFootnoteView.csv22
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.Writer.SwAccessibleHeaderView.csv22
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.Writer.SwAccessiblePageView.csv22
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.Writer.SwAccessibleParagraphView.csv53
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.Writer.SwAccessibleTableCellView.csv33
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.Writer.SwAccessibleTableView.csv48
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.Writer.SwAccessibleTextEmbeddedObject.csv25
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.Writer.SwAccessibleTextFrameView.csv22
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.Writer.SwAccessibleTextGraphicObject.csv25
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.Writer.XMLContentExporter.csv6
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.Writer.XMLContentImporter.csv14
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.Writer.XMLExporter.csv6
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.Writer.XMLImporter.csv14
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.Writer.XMLMetaExporter.csv6
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.Writer.XMLMetaImporter.csv14
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.Writer.XMLSettingsExporter.csv6
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.Writer.XMLSettingsImporter.csv14
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.Writer.XMLStylesExporter.csv6
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.Writer.XMLStylesImporter.csv14
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXAutoTextContainer.csv9
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXAutoTextEntry.csv12
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXAutoTextGroup.csv13
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXBodyText.csv21
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXBookmark.csv10
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXBookmarks.csv7
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXCell.csv26
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXCellRange.csv148
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXChapterNumbering.csv16
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXDocumentIndex.csv42
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXDocumentIndexMark.csv12
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXDocumentIndexes.csv7
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXDrawPage.csv34
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXEndnoteProperties.csv11
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXFieldEnumeration.csv2
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXFieldMaster.csv10
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXFootnote.csv19
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXFootnoteProperties.csv11
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXFootnoteText.csv21
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXFootnotes.csv4
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXFrames.csv9
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXHeadFootText.csv21
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXLineNumberingProperties.csv10
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXMailMerge.csv36
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXModule.csv2
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXNumberingRules.csv16
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXParagraph.csv205
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXParagraphEnumeration.csv2
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXPrintSettings.csv13
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXPropertySet.csv7
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXPropertySetInfo.csv3
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXReferenceMark.csv7
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXReferenceMarks.csv7
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXShape.csv26
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXStyleFamilies.csv7
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXStyleFamily.csv10
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXTableCellText.csv21
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXTableColumns.csv6
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXTableRows.csv6
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXTextColumns.csv12
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXTextCursor.csv180
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXTextDefaults.csv137
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXTextDocument.csv87
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXTextEmbeddedObject.csv73
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXTextEmbeddedObjects.csv7
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXTextField.csv16
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXTextFieldMasters.csv5
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXTextFieldTypes.csv6
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXTextFrame.csv78
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXTextFrameText.csv21
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXTextGraphicObject.csv90
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXTextGraphicObjects.csv7
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXTextPortion.csv155
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXTextPortionEnumeration.csv2
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXTextRange.csv147
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXTextRanges.csv4
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXTextSearch.csv19
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXTextSection.csv52
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXTextSections.csv7
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXTextTable.csv59
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXTextTableCursor.csv142
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXTextTableRow.csv16
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXTextTables.csv7
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXTextView.csv11
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXTextViewCursor.csv190
-rw-r--r--qadevOOo/objdsc/sw/com.sun.star.comp.office.SwXViewSettings.csv37
-rwxr-xr-xqadevOOo/objdsc/sw/com.sun.star.style.CharacterStyle.csv105
-rwxr-xr-xqadevOOo/objdsc/sw/com.sun.star.style.ConditionalParagraphStyle.csv95
-rwxr-xr-xqadevOOo/objdsc/sw/com.sun.star.style.PageStyle.csv125
-rwxr-xr-xqadevOOo/objdsc/sw/com.sun.star.style.ParagraphStyle.csv95
-rw-r--r--qadevOOo/objdsc/sysdtrans/com.sun.star.comp.datatransfer.SystemClipboard.csv16
-rwxr-xr-xqadevOOo/objdsc/sysmgr1/com.sun.star.comp.configuration.backend.SystemIntegration.csv5
-rw-r--r--qadevOOo/objdsc/syssh/com.sun.star.comp.system.SystemShellExecute.csv6
-rw-r--r--qadevOOo/objdsc/tcv/com.sun.star.comp.stoc.TypeConverter.csv2
-rw-r--r--qadevOOo/objdsc/tdmgr/com.sun.star.comp.stoc.TypeDescriptionManager.csv12
-rw-r--r--qadevOOo/objdsc/text/com.sun.star.text.DefaultNumberingProvider.csv2
-rw-r--r--qadevOOo/objdsc/toolkit/com.sun.star.awt.TabController.csv9
-rw-r--r--qadevOOo/objdsc/toolkit/com.sun.star.awt.TabControllerModel.csv11
-rw-r--r--qadevOOo/objdsc/toolkit/com.sun.star.awt.Toolkit.csv12
-rw-r--r--qadevOOo/objdsc/toolkit/com.sun.star.awt.UnoControlButton.csv43
-rw-r--r--qadevOOo/objdsc/toolkit/com.sun.star.awt.UnoControlButtonModel.csv55
-rw-r--r--qadevOOo/objdsc/toolkit/com.sun.star.awt.UnoControlCheckBox.csv45
-rw-r--r--qadevOOo/objdsc/toolkit/com.sun.star.awt.UnoControlCheckBoxModel.csv50
-rw-r--r--qadevOOo/objdsc/toolkit/com.sun.star.awt.UnoControlComboBox.csv65
-rw-r--r--qadevOOo/objdsc/toolkit/com.sun.star.awt.UnoControlComboBoxModel.csv51
-rw-r--r--qadevOOo/objdsc/toolkit/com.sun.star.awt.UnoControlContainer.csv47
-rw-r--r--qadevOOo/objdsc/toolkit/com.sun.star.awt.UnoControlContainerModel.csv37
-rw-r--r--qadevOOo/objdsc/toolkit/com.sun.star.awt.UnoControlCurrencyField.csv76
-rw-r--r--qadevOOo/objdsc/toolkit/com.sun.star.awt.UnoControlCurrencyFieldModel.csv56
-rw-r--r--qadevOOo/objdsc/toolkit/com.sun.star.awt.UnoControlDateField.csv76
-rw-r--r--qadevOOo/objdsc/toolkit/com.sun.star.awt.UnoControlDateFieldModel.csv55
-rw-r--r--qadevOOo/objdsc/toolkit/com.sun.star.awt.UnoControlDialog.csv56
-rw-r--r--qadevOOo/objdsc/toolkit/com.sun.star.awt.UnoControlDialogModel.csv55
-rw-r--r--qadevOOo/objdsc/toolkit/com.sun.star.awt.UnoControlEdit.csv53
-rw-r--r--qadevOOo/objdsc/toolkit/com.sun.star.awt.UnoControlEditModel.csv53
-rw-r--r--qadevOOo/objdsc/toolkit/com.sun.star.awt.UnoControlFileControl.csv53
-rw-r--r--qadevOOo/objdsc/toolkit/com.sun.star.awt.UnoControlFileControlModel.csv45
-rw-r--r--qadevOOo/objdsc/toolkit/com.sun.star.awt.UnoControlFixedLineModel.csv40
-rw-r--r--qadevOOo/objdsc/toolkit/com.sun.star.awt.UnoControlFixedText.csv43
-rw-r--r--qadevOOo/objdsc/toolkit/com.sun.star.awt.UnoControlFixedTextModel.csv45
-rw-r--r--qadevOOo/objdsc/toolkit/com.sun.star.awt.UnoControlFormattedField.csv60
-rw-r--r--qadevOOo/objdsc/toolkit/com.sun.star.awt.UnoControlFormattedFieldModel.csv58
-rw-r--r--qadevOOo/objdsc/toolkit/com.sun.star.awt.UnoControlGroupBox.csv36
-rw-r--r--qadevOOo/objdsc/toolkit/com.sun.star.awt.UnoControlGroupBoxModel.csv39
-rw-r--r--qadevOOo/objdsc/toolkit/com.sun.star.awt.UnoControlImageControl.csv39
-rw-r--r--qadevOOo/objdsc/toolkit/com.sun.star.awt.UnoControlImageControlModel.csv40
-rw-r--r--qadevOOo/objdsc/toolkit/com.sun.star.awt.UnoControlListBox.csv63
-rw-r--r--qadevOOo/objdsc/toolkit/com.sun.star.awt.UnoControlListBoxModel.csv49
-rw-r--r--qadevOOo/objdsc/toolkit/com.sun.star.awt.UnoControlNumericField.csv76
-rw-r--r--qadevOOo/objdsc/toolkit/com.sun.star.awt.UnoControlNumericFieldModel.csv54
-rw-r--r--qadevOOo/objdsc/toolkit/com.sun.star.awt.UnoControlPatternField.csv66
-rw-r--r--qadevOOo/objdsc/toolkit/com.sun.star.awt.UnoControlPatternFieldModel.csv49
-rw-r--r--qadevOOo/objdsc/toolkit/com.sun.star.awt.UnoControlProgressBarModel.csv40
-rw-r--r--qadevOOo/objdsc/toolkit/com.sun.star.awt.UnoControlRadioButton.csv44
-rw-r--r--qadevOOo/objdsc/toolkit/com.sun.star.awt.UnoControlRadioButtonModel.csv49
-rw-r--r--qadevOOo/objdsc/toolkit/com.sun.star.awt.UnoControlScrollBarModel.csv47
-rw-r--r--qadevOOo/objdsc/toolkit/com.sun.star.awt.UnoControlTimeField.csv74
-rw-r--r--qadevOOo/objdsc/toolkit/com.sun.star.awt.UnoControlTimeFieldModel.csv53
-rw-r--r--qadevOOo/objdsc/toolkit/com.sun.star.comp.toolkit.AccessibleButton.csv49
-rw-r--r--qadevOOo/objdsc/toolkit/com.sun.star.comp.toolkit.AccessibleCheckBox.csv49
-rw-r--r--qadevOOo/objdsc/toolkit/com.sun.star.comp.toolkit.AccessibleComboBox.csv24
-rw-r--r--qadevOOo/objdsc/toolkit/com.sun.star.comp.toolkit.AccessibleDropDownComboBox.csv28
-rw-r--r--qadevOOo/objdsc/toolkit/com.sun.star.comp.toolkit.AccessibleDropDownListBox.csv28
-rw-r--r--qadevOOo/objdsc/toolkit/com.sun.star.comp.toolkit.AccessibleEdit.csv48
-rw-r--r--qadevOOo/objdsc/toolkit/com.sun.star.comp.toolkit.AccessibleFixedText.csv41
-rw-r--r--qadevOOo/objdsc/toolkit/com.sun.star.comp.toolkit.AccessibleList.csv32
-rw-r--r--qadevOOo/objdsc/toolkit/com.sun.star.comp.toolkit.AccessibleListBox.csv24
-rw-r--r--qadevOOo/objdsc/toolkit/com.sun.star.comp.toolkit.AccessibleListItem.csv38
-rw-r--r--qadevOOo/objdsc/toolkit/com.sun.star.comp.toolkit.AccessibleMenu.csv56
-rw-r--r--qadevOOo/objdsc/toolkit/com.sun.star.comp.toolkit.AccessibleMenuBar.csv31
-rw-r--r--qadevOOo/objdsc/toolkit/com.sun.star.comp.toolkit.AccessibleMenuItem.csv49
-rw-r--r--qadevOOo/objdsc/toolkit/com.sun.star.comp.toolkit.AccessibleMenuSeparator.csv24
-rw-r--r--qadevOOo/objdsc/toolkit/com.sun.star.comp.toolkit.AccessiblePopupMenu.csv31
-rw-r--r--qadevOOo/objdsc/toolkit/com.sun.star.comp.toolkit.AccessibleRadioButton.csv49
-rw-r--r--qadevOOo/objdsc/toolkit/com.sun.star.comp.toolkit.AccessibleScrollBar.csv32
-rw-r--r--qadevOOo/objdsc/toolkit/com.sun.star.comp.toolkit.AccessibleStatusBar.csv24
-rw-r--r--qadevOOo/objdsc/toolkit/com.sun.star.comp.toolkit.AccessibleStatusBarItem.csv41
-rw-r--r--qadevOOo/objdsc/toolkit/com.sun.star.comp.toolkit.AccessibleTabControl.csv31
-rw-r--r--qadevOOo/objdsc/toolkit/com.sun.star.comp.toolkit.AccessibleTabPage.csv41
-rw-r--r--qadevOOo/objdsc/toolkit/com.sun.star.comp.toolkit.AccessibleToolBox.csv24
-rw-r--r--qadevOOo/objdsc/toolkit/com.sun.star.comp.toolkit.AccessibleToolBoxItem.csv49
-rw-r--r--qadevOOo/objdsc/toolkit/com.sun.star.comp.toolkit.AccessibleWindow.csv24
-rw-r--r--qadevOOo/objdsc/toolkit/com.sun.star.comp.toolkit.UnoSimpleAnimationControl.csv36
-rw-r--r--qadevOOo/objdsc/toolkit/com.sun.star.comp.toolkit.UnoSimpleAnimationControlModel.csv29
-rw-r--r--qadevOOo/objdsc/toolkit/com.sun.star.comp.toolkit.UnoSpinButtonControl.csv49
-rw-r--r--qadevOOo/objdsc/toolkit/com.sun.star.comp.toolkit.UnoSpinButtonControlModel.csv44
-rwxr-xr-xqadevOOo/objdsc/toolkit/com.sun.star.comp.toolkit.UnoThrobberControl.csv36
-rwxr-xr-xqadevOOo/objdsc/toolkit/com.sun.star.comp.toolkit.UnoThrobberControlModel.csv29
-rwxr-xr-xqadevOOo/objdsc/toolkit/stardiv.Toolkit.UnoTreeControl.csv28
-rwxr-xr-xqadevOOo/objdsc/toolkit/stardiv.Toolkit.UnoTreeModel.csv37
-rw-r--r--qadevOOo/objdsc/toolkit/stardiv.toolkit.UnoScrollBarControl.csv51
-rwxr-xr-xqadevOOo/objdsc/toolkit/toolkit.MutableTreeDataModel.csv8
-rwxr-xr-xqadevOOo/objdsc/toolkit/toolkit.MutableTreeNode.csv18
-rw-r--r--qadevOOo/objdsc/typeconverter.uno/com.sun.star.comp.stoc.TypeConverter.csv2
-rw-r--r--qadevOOo/objdsc/typemgr.uno/com.sun.star.comp.stoc.TypeDescriptionManager.csv12
-rw-r--r--qadevOOo/objdsc/ucb/com.sun.star.comp.ucb.UcbContentProviderProxyFactory.csv1
-rw-r--r--qadevOOo/objdsc/ucb/com.sun.star.comp.ucb.UcbPropertiesManager.csv3
-rw-r--r--qadevOOo/objdsc/ucb/com.sun.star.comp.ucb.UcbStore.csv1
-rw-r--r--qadevOOo/objdsc/ucb/com.sun.star.comp.ucb.UniversalContentBroker.csv15
-rw-r--r--qadevOOo/objdsc/ucpchelp/com.sun.star.comp.unknown.CHelpContentProvider.csv2
-rw-r--r--qadevOOo/objdsc/ucpdav/com.sun.star.comp.ucb.WebDAVContentProvider.csv2
-rw-r--r--qadevOOo/objdsc/ucpfile/com.sun.star.comp.ucb.FileProvider.csv13
-rw-r--r--qadevOOo/objdsc/ucpftp/com.sun.star.comp.ucb.FTPContentProvider.csv2
-rw-r--r--qadevOOo/objdsc/ucphier/com.sun.star.comp.ucb.HierarchyContentProvider.csv2
-rw-r--r--qadevOOo/objdsc/ucphier/com.sun.star.comp.ucb.HierarchyDataSource.csv6
-rw-r--r--qadevOOo/objdsc/ucppkg/com.sun.star.comp.ucb.PackageContentProvider.csv2
-rw-r--r--qadevOOo/objdsc/ucprmt/com.sun.star.comp.ucb.ucp.remote.ContentProvider.csv5
-rw-r--r--qadevOOo/objdsc/ucprmt/com.sun.star.comp.ucb.ucp.remote.ProviderAcceptor.csv3
-rw-r--r--qadevOOo/objdsc/ucprmt/com.sun.star.comp.ucb.ucp.remote.ProxyProvider.csv5
-rw-r--r--qadevOOo/objdsc/uui/com.sun.star.comp.uui.UUIInteractionHandler.csv2
-rw-r--r--qadevOOo/objdsc/uuresolver.uno/com.sun.star.comp.bridge.UnoUrlResolver.csv1
-rw-r--r--qadevOOo/objdsc/uuresolver/com.sun.star.comp.bridge.UnoUrlResolver.csv1
-rw-r--r--qadevOOo/objdsc/xmloff/com.sun.star.comp.Chart.XMLContentExporter.csv6
-rw-r--r--qadevOOo/objdsc/xmloff/com.sun.star.comp.Chart.XMLContentImporter.csv14
-rw-r--r--qadevOOo/objdsc/xmloff/com.sun.star.comp.Chart.XMLExporter.csv6
-rw-r--r--qadevOOo/objdsc/xmloff/com.sun.star.comp.Chart.XMLImporter.csv14
-rw-r--r--qadevOOo/objdsc/xmloff/com.sun.star.comp.Chart.XMLStylesExporter.csv6
-rw-r--r--qadevOOo/objdsc/xmloff/com.sun.star.comp.Chart.XMLStylesImporter.csv14
-rw-r--r--qadevOOo/objdsc/xmloff/com.sun.star.comp.Draw.XMLContentExporter.csv6
-rw-r--r--qadevOOo/objdsc/xmloff/com.sun.star.comp.Draw.XMLContentImporter.csv14
-rw-r--r--qadevOOo/objdsc/xmloff/com.sun.star.comp.Draw.XMLExporter.csv6
-rw-r--r--qadevOOo/objdsc/xmloff/com.sun.star.comp.Draw.XMLImporter.csv14
-rw-r--r--qadevOOo/objdsc/xmloff/com.sun.star.comp.Draw.XMLMetaExporter.csv6
-rw-r--r--qadevOOo/objdsc/xmloff/com.sun.star.comp.Draw.XMLMetaImporter.csv14
-rw-r--r--qadevOOo/objdsc/xmloff/com.sun.star.comp.Draw.XMLSettingsExporter.csv6
-rw-r--r--qadevOOo/objdsc/xmloff/com.sun.star.comp.Draw.XMLSettingsImporter.csv14
-rw-r--r--qadevOOo/objdsc/xmloff/com.sun.star.comp.Draw.XMLStylesExporter.csv6
-rw-r--r--qadevOOo/objdsc/xmloff/com.sun.star.comp.Draw.XMLStylesImporter.csv14
-rw-r--r--qadevOOo/objdsc/xmloff/com.sun.star.comp.Impress.XMLContentExporter.csv6
-rw-r--r--qadevOOo/objdsc/xmloff/com.sun.star.comp.Impress.XMLContentImporter.csv14
-rw-r--r--qadevOOo/objdsc/xmloff/com.sun.star.comp.Impress.XMLExporter.csv6
-rw-r--r--qadevOOo/objdsc/xmloff/com.sun.star.comp.Impress.XMLImporter.csv14
-rw-r--r--qadevOOo/objdsc/xmloff/com.sun.star.comp.Impress.XMLMetaExporter.csv6
-rw-r--r--qadevOOo/objdsc/xmloff/com.sun.star.comp.Impress.XMLMetaImporter.csv14
-rw-r--r--qadevOOo/objdsc/xmloff/com.sun.star.comp.Impress.XMLSettingsExporter.csv6
-rw-r--r--qadevOOo/objdsc/xmloff/com.sun.star.comp.Impress.XMLSettingsImporter.csv14
-rw-r--r--qadevOOo/objdsc/xmloff/com.sun.star.comp.Impress.XMLStylesExporter.csv6
-rw-r--r--qadevOOo/objdsc/xmloff/com.sun.star.comp.Impress.XMLStylesImporter.csv14
-rw-r--r--qadevOOo/prj/build.lst5
-rw-r--r--qadevOOo/prj/d.lst1
-rw-r--r--qadevOOo/qa/unoapi/Test.java51
-rwxr-xr-xqadevOOo/qa/unoapi/knownissues.xcl1
-rwxr-xr-xqadevOOo/qa/unoapi/makefile.mk48
-rwxr-xr-xqadevOOo/qa/unoapi/qadevOOo.sce1
-rw-r--r--qadevOOo/runner/base/TestBase.java39
-rw-r--r--qadevOOo/runner/base/basic_fat.java457
-rw-r--r--qadevOOo/runner/base/java_cmp.java83
-rw-r--r--qadevOOo/runner/base/java_complex.java170
-rw-r--r--qadevOOo/runner/base/java_fat.java602
-rw-r--r--qadevOOo/runner/base/java_fat_service.java267
-rw-r--r--qadevOOo/runner/base/makefile.mk52
-rw-r--r--qadevOOo/runner/basicrunner/BasicException.java42
-rw-r--r--qadevOOo/runner/basicrunner/BasicHandler.java612
-rw-r--r--qadevOOo/runner/basicrunner/BasicHandlerProvider.java153
-rw-r--r--qadevOOo/runner/basicrunner/BasicIfcTest.java169
-rw-r--r--qadevOOo/runner/basicrunner/BasicTestCase.java178
-rw-r--r--qadevOOo/runner/basicrunner/basichelper/AttributeList.java138
-rw-r--r--qadevOOo/runner/basicrunner/basichelper/Connector.java272
-rw-r--r--qadevOOo/runner/basicrunner/basichelper/DispatchProviderInterceptor.java194
-rw-r--r--qadevOOo/runner/basicrunner/basichelper/DocumentHandler.java344
-rw-r--r--qadevOOo/runner/basicrunner/basichelper/Filter.java269
-rw-r--r--qadevOOo/runner/basicrunner/basichelper/ThreadRunner.java254
-rw-r--r--qadevOOo/runner/basicrunner/basichelper/makefile.mk47
-rw-r--r--qadevOOo/runner/basicrunner/makefile.mk46
-rw-r--r--qadevOOo/runner/complexlib/Assurance.java407
-rw-r--r--qadevOOo/runner/complexlib/ComplexTestCase.java315
-rw-r--r--qadevOOo/runner/complexlib/MethodThread.java112
-rw-r--r--qadevOOo/runner/complexlib/ShowTargets.java138
-rw-r--r--qadevOOo/runner/complexlib/makefile.mk49
-rw-r--r--qadevOOo/runner/convwatch/Basename.java61
-rw-r--r--qadevOOo/runner/convwatch/BorderRemover.java319
-rw-r--r--qadevOOo/runner/convwatch/BuildID.java163
-rw-r--r--qadevOOo/runner/convwatch/ConvWatch.java432
-rw-r--r--qadevOOo/runner/convwatch/ConvWatchCancelException.java38
-rw-r--r--qadevOOo/runner/convwatch/ConvWatchException.java37
-rw-r--r--qadevOOo/runner/convwatch/ConvWatchStarter.java445
-rw-r--r--qadevOOo/runner/convwatch/CrashLoopTest.java57
-rw-r--r--qadevOOo/runner/convwatch/DB.java541
-rw-r--r--qadevOOo/runner/convwatch/DBHelper.java316
-rwxr-xr-xqadevOOo/runner/convwatch/DateHelper.java58
-rw-r--r--qadevOOo/runner/convwatch/DirectoryHelper.java156
-rw-r--r--qadevOOo/runner/convwatch/DocumentConverter.java277
-rw-r--r--qadevOOo/runner/convwatch/EnhancedComplexTestCase.java130
-rw-r--r--qadevOOo/runner/convwatch/FileHelper.java405
-rw-r--r--qadevOOo/runner/convwatch/FilenameHelper.java398
-rw-r--r--qadevOOo/runner/convwatch/GfxCompare.java196
-rw-r--r--qadevOOo/runner/convwatch/GlobalLogWriter.java57
-rw-r--r--qadevOOo/runner/convwatch/GraphicalDifferenceCheck.java410
-rw-r--r--qadevOOo/runner/convwatch/GraphicalTestArguments.java744
-rw-r--r--qadevOOo/runner/convwatch/HTMLOutputter.java418
-rw-r--r--qadevOOo/runner/convwatch/INIOutputter.java207
-rw-r--r--qadevOOo/runner/convwatch/ImageHelper.java116
-rw-r--r--qadevOOo/runner/convwatch/IniFile.java452
-rw-r--r--qadevOOo/runner/convwatch/LISTOutputter.java104
-rw-r--r--qadevOOo/runner/convwatch/MSOfficePrint.java870
-rw-r--r--qadevOOo/runner/convwatch/NameHelper.java89
-rw-r--r--qadevOOo/runner/convwatch/OSHelper.java84
-rw-r--r--qadevOOo/runner/convwatch/OfficePrint.java1377
-rw-r--r--qadevOOo/runner/convwatch/PRNCompare.java805
-rw-r--r--qadevOOo/runner/convwatch/PerformanceContainer.java250
-rw-r--r--qadevOOo/runner/convwatch/PixelCounter.java206
-rw-r--r--qadevOOo/runner/convwatch/PropertyName.java67
-rw-r--r--qadevOOo/runner/convwatch/ReferenceBuilder.java304
-rwxr-xr-xqadevOOo/runner/convwatch/ReportDesignerTest.java694
-rw-r--r--qadevOOo/runner/convwatch/SimpleFileSemaphore.java189
-rw-r--r--qadevOOo/runner/convwatch/StatusHelper.java108
-rw-r--r--qadevOOo/runner/convwatch/StringHelper.java103
-rwxr-xr-xqadevOOo/runner/convwatch/TimeHelper.java44
-rw-r--r--qadevOOo/runner/convwatch/TriState.java76
-rw-r--r--qadevOOo/runner/convwatch/ValueNotFoundException.java36
-rw-r--r--qadevOOo/runner/convwatch/makefile.mk86
-rw-r--r--qadevOOo/runner/graphical/BuildID.java226
-rw-r--r--qadevOOo/runner/graphical/DateHelper.java58
-rw-r--r--qadevOOo/runner/graphical/DirectoryHelper.java160
-rw-r--r--qadevOOo/runner/graphical/EnhancedComplexTestCase.java519
-rw-r--r--qadevOOo/runner/graphical/FileHelper.java767
-rw-r--r--qadevOOo/runner/graphical/GlobalLogWriter.java72
-rw-r--r--qadevOOo/runner/graphical/GraphicalComparator.java31
-rw-r--r--qadevOOo/runner/graphical/HTMLResult.java212
-rw-r--r--qadevOOo/runner/graphical/IDocument.java46
-rw-r--r--qadevOOo/runner/graphical/IOffice.java63
-rw-r--r--qadevOOo/runner/graphical/ImageHelper.java120
-rw-r--r--qadevOOo/runner/graphical/IniFile.java693
-rw-r--r--qadevOOo/runner/graphical/JPEGComparator.java816
-rw-r--r--qadevOOo/runner/graphical/JPEGCreator.java475
-rw-r--r--qadevOOo/runner/graphical/JPEGEvaluator.java163
-rw-r--r--qadevOOo/runner/graphical/MSOfficePostscriptCreator.java1004
-rw-r--r--qadevOOo/runner/graphical/Office.java170
-rw-r--r--qadevOOo/runner/graphical/OfficeException.java45
-rw-r--r--qadevOOo/runner/graphical/OpenOfficeDatabaseReportExtractor.java560
-rw-r--r--qadevOOo/runner/graphical/OpenOfficePostscriptCreator.java1427
-rw-r--r--qadevOOo/runner/graphical/ParameterHelper.java433
-rw-r--r--qadevOOo/runner/graphical/PerformanceContainer.java271
-rw-r--r--qadevOOo/runner/graphical/PixelCounter.java247
-rw-r--r--qadevOOo/runner/graphical/PostscriptCreator.java137
-rw-r--r--qadevOOo/runner/graphical/PropertyName.java73
-rw-r--r--qadevOOo/runner/graphical/TimeHelper.java91
-rw-r--r--qadevOOo/runner/graphical/Tolerance.java23
-rw-r--r--qadevOOo/runner/graphical/WrongEnvironmentException.java42
-rw-r--r--qadevOOo/runner/graphical/WrongSuffixException.java42
-rw-r--r--qadevOOo/runner/graphical/makefile.mk76
-rw-r--r--qadevOOo/runner/helper/APIDescGetter.java985
-rw-r--r--qadevOOo/runner/helper/AppProvider.java55
-rw-r--r--qadevOOo/runner/helper/BuildEnvTools.java195
-rw-r--r--qadevOOo/runner/helper/CfgParser.java192
-rw-r--r--qadevOOo/runner/helper/ClParser.java193
-rw-r--r--qadevOOo/runner/helper/ComplexDescGetter.java194
-rw-r--r--qadevOOo/runner/helper/ConfigHelper.java348
-rw-r--r--qadevOOo/runner/helper/ConfigurationRead.java141
-rw-r--r--qadevOOo/runner/helper/ContextMenuInterceptor.java140
-rw-r--r--qadevOOo/runner/helper/CwsDataExchangeImpl.java157
-rw-r--r--qadevOOo/runner/helper/FileTools.java160
-rw-r--r--qadevOOo/runner/helper/InetTools.java88
-rw-r--r--qadevOOo/runner/helper/LoggingThread.java96
-rw-r--r--qadevOOo/runner/helper/OSHelper.java88
-rw-r--r--qadevOOo/runner/helper/ObjectInspectorModelImpl.java145
-rw-r--r--qadevOOo/runner/helper/OfficeProvider.java833
-rw-r--r--qadevOOo/runner/helper/OfficeWatcher.java132
-rw-r--r--qadevOOo/runner/helper/ParameterNotFoundException.java39
-rw-r--r--qadevOOo/runner/helper/ProcessHandler.java824
-rw-r--r--qadevOOo/runner/helper/PropertyHandlerFactroy.java49
-rw-r--r--qadevOOo/runner/helper/PropertyHandlerImpl.java258
-rwxr-xr-xqadevOOo/runner/helper/PropertyHelper.java81
-rw-r--r--qadevOOo/runner/helper/SimpleMailSender.java171
-rw-r--r--qadevOOo/runner/helper/StreamSimulator.java533
-rw-r--r--qadevOOo/runner/helper/StringHelper.java125
-rw-r--r--qadevOOo/runner/helper/URLHelper.java292
-rw-r--r--qadevOOo/runner/helper/UnoProvider.java165
-rw-r--r--qadevOOo/runner/helper/WindowListener.java78
-rw-r--r--qadevOOo/runner/helper/makefile.mk65
-rw-r--r--qadevOOo/runner/lib/DynamicClassLoader.java94
-rw-r--r--qadevOOo/runner/lib/ExceptionStatus.java48
-rw-r--r--qadevOOo/runner/lib/MultiMethodTest.java511
-rw-r--r--qadevOOo/runner/lib/MultiPropertyTest.java608
-rw-r--r--qadevOOo/runner/lib/Parameters.java233
-rw-r--r--qadevOOo/runner/lib/SimpleStatus.java149
-rw-r--r--qadevOOo/runner/lib/Status.java173
-rw-r--r--qadevOOo/runner/lib/StatusException.java81
-rw-r--r--qadevOOo/runner/lib/TestCase.java182
-rw-r--r--qadevOOo/runner/lib/TestEnvironment.java153
-rw-r--r--qadevOOo/runner/lib/TestParameters.java343
-rw-r--r--qadevOOo/runner/lib/TestResult.java106
-rw-r--r--qadevOOo/runner/lib/makefile.mk58
-rw-r--r--qadevOOo/runner/makefile.mk60
-rw-r--r--qadevOOo/runner/manifest3
-rw-r--r--qadevOOo/runner/org/openoffice/Runner.java261
-rw-r--r--qadevOOo/runner/org/openoffice/RunnerService.java397
-rw-r--r--qadevOOo/runner/org/openoffice/makefile.mk46
-rw-r--r--qadevOOo/runner/share/ComplexTest.java39
-rw-r--r--qadevOOo/runner/share/CwsDataExchange.java51
-rw-r--r--qadevOOo/runner/share/DescEntry.java97
-rw-r--r--qadevOOo/runner/share/DescGetter.java197
-rw-r--r--qadevOOo/runner/share/LogWriter.java68
-rw-r--r--qadevOOo/runner/share/Watcher.java42
-rw-r--r--qadevOOo/runner/share/makefile.mk52
-rw-r--r--qadevOOo/runner/stats/ComplexDataBaseOutProducer.java181
-rw-r--r--qadevOOo/runner/stats/DataBaseOutProducer.java207
-rw-r--r--qadevOOo/runner/stats/FatDataBaseOutProducer.java147
-rw-r--r--qadevOOo/runner/stats/FileLogWriter.java141
-rw-r--r--qadevOOo/runner/stats/InternalLogWriter.java124
-rw-r--r--qadevOOo/runner/stats/OutProducerFactory.java137
-rw-r--r--qadevOOo/runner/stats/SQLExecution.java337
-rw-r--r--qadevOOo/runner/stats/SimpleFileOutProducer.java114
-rw-r--r--qadevOOo/runner/stats/SimpleLogWriter.java111
-rw-r--r--qadevOOo/runner/stats/SimpleOutProducer.java77
-rw-r--r--qadevOOo/runner/stats/Summarizer.java114
-rw-r--r--qadevOOo/runner/stats/makefile.mk59
-rw-r--r--qadevOOo/runner/util/AccessibilityTools.java461
-rw-r--r--qadevOOo/runner/util/BasicMacroTools.java261
-rw-r--r--qadevOOo/runner/util/BookmarkDsc.java84
-rw-r--r--qadevOOo/runner/util/CalcTools.java160
-rw-r--r--qadevOOo/runner/util/ControlDsc.java80
-rw-r--r--qadevOOo/runner/util/DBTools.java824
-rw-r--r--qadevOOo/runner/util/DefaultDsc.java81
-rw-r--r--qadevOOo/runner/util/DesktopTools.java515
-rw-r--r--qadevOOo/runner/util/DrawTools.java162
-rw-r--r--qadevOOo/runner/util/DynamicClassLoader.java123
-rw-r--r--qadevOOo/runner/util/FootnoteDsc.java84
-rw-r--r--qadevOOo/runner/util/FormTools.java349
-rw-r--r--qadevOOo/runner/util/FrameDsc.java126
-rw-r--r--qadevOOo/runner/util/InstCreator.java122
-rw-r--r--qadevOOo/runner/util/InstDescr.java53
-rw-r--r--qadevOOo/runner/util/ParagraphDsc.java85
-rw-r--r--qadevOOo/runner/util/PropertyName.java169
-rw-r--r--qadevOOo/runner/util/ReferenceMarkDsc.java84
-rw-r--r--qadevOOo/runner/util/RegistryTools.java370
-rw-r--r--qadevOOo/runner/util/SOfficeFactory.java629
-rw-r--r--qadevOOo/runner/util/ShapeDsc.java101
-rw-r--r--qadevOOo/runner/util/StyleFamilyDsc.java80
-rw-r--r--qadevOOo/runner/util/SysUtils.java153
-rw-r--r--qadevOOo/runner/util/TableDsc.java96
-rw-r--r--qadevOOo/runner/util/TextSectionDsc.java84
-rw-r--r--qadevOOo/runner/util/UITools.java814
-rw-r--r--qadevOOo/runner/util/ValueChanger.java994
-rw-r--r--qadevOOo/runner/util/ValueComparer.java266
-rw-r--r--qadevOOo/runner/util/WaitUnreachable.java127
-rw-r--r--qadevOOo/runner/util/WriterTools.java121
-rw-r--r--qadevOOo/runner/util/XInstCreator.java38
-rw-r--r--qadevOOo/runner/util/XLayerHandlerImpl.java119
-rw-r--r--qadevOOo/runner/util/XLayerImpl.java45
-rw-r--r--qadevOOo/runner/util/XMLTools.java939
-rw-r--r--qadevOOo/runner/util/XSchemaHandlerImpl.java137
-rw-r--r--qadevOOo/runner/util/compare/DocComparator.java52
-rw-r--r--qadevOOo/runner/util/compare/DocComparatorFactory.java64
-rw-r--r--qadevOOo/runner/util/compare/GraphicalComparator.java260
-rw-r--r--qadevOOo/runner/util/compare/PDFComparator.java62
-rw-r--r--qadevOOo/runner/util/compare/XMLComparator.java58
-rw-r--r--qadevOOo/runner/util/compare/makefile.mk54
-rw-r--r--qadevOOo/runner/util/db/DataSource.java163
-rw-r--r--qadevOOo/runner/util/db/DataSourceDescriptor.java74
-rw-r--r--qadevOOo/runner/util/db/DatabaseDocument.java90
-rw-r--r--qadevOOo/runner/util/dbg.java347
-rw-r--r--qadevOOo/runner/util/makefile.mk87
-rw-r--r--qadevOOo/runner/util/utils.java1020
-rw-r--r--qadevOOo/testdocs/10test.csv19
-rw-r--r--qadevOOo/testdocs/BasicBridge.sxwbin0 -> 27011 bytes
-rw-r--r--qadevOOo/testdocs/BasicDB/DBTest.dbfbin0 -> 1575 bytes
-rw-r--r--qadevOOo/testdocs/Calc_Link.sxcbin0 -> 5410 bytes
-rw-r--r--qadevOOo/testdocs/ChXChartObject.sdsbin0 -> 52736 bytes
-rw-r--r--qadevOOo/testdocs/FiexdTextDialog.sxwbin0 -> 8259 bytes
-rw-r--r--qadevOOo/testdocs/FixedTextDialog.sxwbin0 -> 8259 bytes
-rw-r--r--qadevOOo/testdocs/Iterator.sxwbin0 -> 5627 bytes
-rw-r--r--qadevOOo/testdocs/JAJPIterator.sxwbin0 -> 5853 bytes
-rw-r--r--qadevOOo/testdocs/MailMerge.sxwbin0 -> 5391 bytes
-rw-r--r--qadevOOo/testdocs/ORowSet.dbfbin0 -> 39449 bytes
-rw-r--r--qadevOOo/testdocs/RunnerStart.sxwbin0 -> 8224 bytes
-rw-r--r--qadevOOo/testdocs/ScAnnotationShapeObj.sxcbin0 -> 6542 bytes
-rw-r--r--qadevOOo/testdocs/ScDDELinksObj.sdcbin0 -> 17408 bytes
-rw-r--r--qadevOOo/testdocs/ScSheetLinksObj.sdcbin0 -> 16896 bytes
-rw-r--r--qadevOOo/testdocs/SfxStandaloneDocInfoObject.sdwbin0 -> 8192 bytes
-rw-r--r--qadevOOo/testdocs/SvxShape.sdabin0 -> 39424 bytes
-rw-r--r--qadevOOo/testdocs/SvxShape.sxdbin0 -> 6344 bytes
-rw-r--r--qadevOOo/testdocs/SwOLE.sxwbin0 -> 8603 bytes
-rw-r--r--qadevOOo/testdocs/SwXTextEmbeddedObject.sdwbin0 -> 180736 bytes
-rw-r--r--qadevOOo/testdocs/SwXTextEmbeddedObject.sxwbin0 -> 24763 bytes
-rw-r--r--qadevOOo/testdocs/SwXTextSection.sdwbin0 -> 8704 bytes
-rw-r--r--qadevOOo/testdocs/TestDB/testDB.dbfbin0 -> 949 bytes
-rw-r--r--qadevOOo/testdocs/TestDB/testDB.dbtbin0 -> 512 bytes
-rw-r--r--qadevOOo/testdocs/TransparencyCalcChart.sxcbin0 -> 8755 bytes
-rw-r--r--qadevOOo/testdocs/TransparencyChart.sxsbin0 -> 10846 bytes
-rw-r--r--qadevOOo/testdocs/TwoShapes.sxibin0 -> 7283 bytes
-rw-r--r--qadevOOo/testdocs/Writer_link.sxwbin0 -> 5188 bytes
-rw-r--r--qadevOOo/testdocs/XDocumentInsertable.sxwbin0 -> 4914 bytes
-rw-r--r--qadevOOo/testdocs/XPageCursor.sdwbin0 -> 16896 bytes
-rw-r--r--qadevOOo/testdocs/XSimpleFileAccess/XSimpleFileAccess.txt1
-rw-r--r--qadevOOo/testdocs/XSimpleFileAccess/XSimpleFileAccess2.txt1
-rw-r--r--qadevOOo/testdocs/XSimpleFileAccessBASIC/File1.txt1
-rw-r--r--qadevOOo/testdocs/XSimpleFileAccessBASIC/File2.txt1
-rw-r--r--qadevOOo/testdocs/XSimpleRegistry.rdbbin0 -> 8192 bytes
-rw-r--r--qadevOOo/testdocs/XTypeDetection.sxwbin0 -> 4995 bytes
-rw-r--r--qadevOOo/testdocs/ZHCNIterator.sxwbin0 -> 5883 bytes
-rw-r--r--qadevOOo/testdocs/ZHTWIterator.sxwbin0 -> 6247 bytes
-rw-r--r--qadevOOo/testdocs/_BasicBridge.sxwbin0 -> 25191 bytes
-rw-r--r--qadevOOo/testdocs/backend/org/openoffice/JavaSystemBackend.java259
-rw-r--r--qadevOOo/testdocs/backend/org/openoffice/makefile.mk64
-rw-r--r--qadevOOo/testdocs/backend/org/openoffice/manifest1
-rw-r--r--qadevOOo/testdocs/basDialog.odtbin0 -> 9950 bytes
-rw-r--r--qadevOOo/testdocs/calcshapes.sxcbin0 -> 13030 bytes
-rw-r--r--qadevOOo/testdocs/chinese.sxwbin0 -> 5757 bytes
-rw-r--r--qadevOOo/testdocs/crazy-blue.jpgbin0 -> 4451 bytes
-rwxr-xr-xqadevOOo/testdocs/delete.cfgbin0 -> 2799 bytes
-rw-r--r--qadevOOo/testdocs/emptyChart.sdsbin0 -> 44544 bytes
-rw-r--r--qadevOOo/testdocs/filter.sxwbin0 -> 14359 bytes
-rw-r--r--qadevOOo/testdocs/ok.wavbin0 -> 4454 bytes
-rw-r--r--qadevOOo/testdocs/poliball.gifbin0 -> 945 bytes
-rw-r--r--qadevOOo/testdocs/qadevlibs/JobExecutor.jarbin0 -> 3912 bytes
-rw-r--r--qadevOOo/testdocs/qadevlibs/MyPersistObjectImpl.jarbin0 -> 4346 bytes
-rw-r--r--qadevOOo/testdocs/qadevlibs/source/com/sun/star/cmp/MyPersistObject.java356
-rw-r--r--qadevOOo/testdocs/qadevlibs/source/com/sun/star/cmp/makefile.mk64
-rw-r--r--qadevOOo/testdocs/qadevlibs/source/com/sun/star/cmp/manifest1
-rw-r--r--qadevOOo/testdocs/qadevlibs/source/test/Job.java128
-rw-r--r--qadevOOo/testdocs/qadevlibs/source/test/makefile.mk64
-rw-r--r--qadevOOo/testdocs/qadevlibs/source/test/manifest2
-rw-r--r--qadevOOo/testdocs/report.stwbin0 -> 11186 bytes
-rw-r--r--qadevOOo/testdocs/report2.stwbin0 -> 11000 bytes
-rw-r--r--qadevOOo/testdocs/sForm.sxwbin0 -> 5568 bytes
-rw-r--r--qadevOOo/testdocs/setexpression.sxwbin0 -> 6364 bytes
-rw-r--r--qadevOOo/testdocs/small_submit_test.sdwbin0 -> 18944 bytes
-rw-r--r--qadevOOo/testdocs/space-metal.jpgbin0 -> 4313 bytes
-rw-r--r--qadevOOo/tests/basic/ifc/accessibility/XAccessible/accessibility_XAccessible.xba64
-rw-r--r--qadevOOo/tests/basic/ifc/accessibility/XAccessible/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/accessibility/XAccessibleAction/accessibility_XAccessibleAction.xba99
-rw-r--r--qadevOOo/tests/basic/ifc/accessibility/XAccessibleAction/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/accessibility/XAccessibleComponent/accessibility_XAccessibleComponent.xba247
-rw-r--r--qadevOOo/tests/basic/ifc/accessibility/XAccessibleComponent/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/accessibility/XAccessibleContext/accessibility_XAccessibleContext.xba156
-rw-r--r--qadevOOo/tests/basic/ifc/accessibility/XAccessibleContext/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/accessibility/XAccessibleEditableText/accessibility_XAccessibleEditableText.xba181
-rw-r--r--qadevOOo/tests/basic/ifc/accessibility/XAccessibleEditableText/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/accessibility/XAccessibleEventBroadcaster/accessibility_XAccessibleEventBroadcaster.xba149
-rw-r--r--qadevOOo/tests/basic/ifc/accessibility/XAccessibleEventBroadcaster/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/accessibility/XAccessibleExtendedComponent/accessibility_XAccessibleExtendedComponent.xba86
-rw-r--r--qadevOOo/tests/basic/ifc/accessibility/XAccessibleExtendedComponent/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/accessibility/XAccessibleImage/accessibility_XAccessibleImage.xba79
-rw-r--r--qadevOOo/tests/basic/ifc/accessibility/XAccessibleImage/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/accessibility/XAccessibleSelection/accessibility_XAccessibleSelection.xba259
-rw-r--r--qadevOOo/tests/basic/ifc/accessibility/XAccessibleSelection/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/accessibility/XAccessibleTable/accessibility_XAccessibleTable.xba291
-rw-r--r--qadevOOo/tests/basic/ifc/accessibility/XAccessibleTable/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/accessibility/XAccessibleText/accessibility_XAccessibleText.xba197
-rw-r--r--qadevOOo/tests/basic/ifc/accessibility/XAccessibleText/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/accessibility/XAccessibleValue/accessibility_XAccessibleValue.xba119
-rw-r--r--qadevOOo/tests/basic/ifc/accessibility/XAccessibleValue/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/awt/UnoControlButtonModel/awt_UnoControlButtonModel.xba84
-rw-r--r--qadevOOo/tests/basic/ifc/awt/UnoControlButtonModel/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/awt/UnoControlCheckBoxModel/awt_UnoControlCheckBoxModel.xba80
-rw-r--r--qadevOOo/tests/basic/ifc/awt/UnoControlCheckBoxModel/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/awt/UnoControlComboBoxModel/awt_UnoControlComboBoxModel.xba95
-rw-r--r--qadevOOo/tests/basic/ifc/awt/UnoControlComboBoxModel/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/awt/UnoControlContainerModel/awt_UnoControlContainerModel.xba65
-rw-r--r--qadevOOo/tests/basic/ifc/awt/UnoControlContainerModel/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/awt/UnoControlCurrencyFieldModel/awt_UnoControlCurrencyFieldModel.xba134
-rw-r--r--qadevOOo/tests/basic/ifc/awt/UnoControlCurrencyFieldModel/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/awt/UnoControlDateFieldModel/awt_UnoControlDateFieldModel.xba93
-rw-r--r--qadevOOo/tests/basic/ifc/awt/UnoControlDateFieldModel/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/awt/UnoControlDialogElement/awt_UnoControlDialogElement.xba66
-rw-r--r--qadevOOo/tests/basic/ifc/awt/UnoControlDialogElement/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/awt/UnoControlDialogModel/awt_UnoControlDialogModel.xba82
-rw-r--r--qadevOOo/tests/basic/ifc/awt/UnoControlDialogModel/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/awt/UnoControlEditModel/awt_UnoControlEditModel.xba96
-rw-r--r--qadevOOo/tests/basic/ifc/awt/UnoControlEditModel/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/awt/UnoControlFileControlModel/awt_UnoControlFileControlModel.xba82
-rw-r--r--qadevOOo/tests/basic/ifc/awt/UnoControlFileControlModel/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/awt/UnoControlFixedLineModel/awt_UnoControlFixedLineModel.xba78
-rw-r--r--qadevOOo/tests/basic/ifc/awt/UnoControlFixedLineModel/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/awt/UnoControlFixedTextModel/awt_UnoControlFixedTextModel.xba82
-rw-r--r--qadevOOo/tests/basic/ifc/awt/UnoControlFixedTextModel/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/awt/UnoControlFormattedFieldModel/awt_UnoControlFormattedFieldModel.xba141
-rw-r--r--qadevOOo/tests/basic/ifc/awt/UnoControlFormattedFieldModel/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/awt/UnoControlGroupBoxModel/awt_UnoControlGroupBoxModel.xba74
-rw-r--r--qadevOOo/tests/basic/ifc/awt/UnoControlGroupBoxModel/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/awt/UnoControlImageControlModel/awt_UnoControlImageControlModel.xba72
-rw-r--r--qadevOOo/tests/basic/ifc/awt/UnoControlImageControlModel/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/awt/UnoControlListBoxModel/awt_UnoControlListBoxModel.xba90
-rw-r--r--qadevOOo/tests/basic/ifc/awt/UnoControlListBoxModel/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/awt/UnoControlModel/awt_UnoControlModel.xba59
-rw-r--r--qadevOOo/tests/basic/ifc/awt/UnoControlModel/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/awt/UnoControlNumericFieldModel/awt_UnoControlNumericFieldModel.xba132
-rw-r--r--qadevOOo/tests/basic/ifc/awt/UnoControlNumericFieldModel/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/awt/UnoControlPatternFieldModel/awt_UnoControlPatternFieldModel.xba90
-rw-r--r--qadevOOo/tests/basic/ifc/awt/UnoControlPatternFieldModel/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/awt/UnoControlProgressBarModel/awt_UnoControlProgressBarModel.xba74
-rw-r--r--qadevOOo/tests/basic/ifc/awt/UnoControlProgressBarModel/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/awt/UnoControlRadioButtonModel/awt_UnoControlRadioButtonModel.xba78
-rw-r--r--qadevOOo/tests/basic/ifc/awt/UnoControlRadioButtonModel/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/awt/UnoControlScrollBarModel/awt_UnoControlScrollBarModel.xba76
-rw-r--r--qadevOOo/tests/basic/ifc/awt/UnoControlScrollBarModel/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/awt/UnoControlTimeFieldModel/awt_UnoControlTimeFieldModel.xba91
-rw-r--r--qadevOOo/tests/basic/ifc/awt/UnoControlTimeFieldModel/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/awt/XButton/awt_XButton.xba92
-rw-r--r--qadevOOo/tests/basic/ifc/awt/XButton/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/awt/XCheckBox/awt_XCheckBox.xba107
-rw-r--r--qadevOOo/tests/basic/ifc/awt/XCheckBox/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/awt/XComboBox/awt_XComboBox.xba146
-rw-r--r--qadevOOo/tests/basic/ifc/awt/XComboBox/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/awt/XControl/awt_XControl.xba123
-rw-r--r--qadevOOo/tests/basic/ifc/awt/XControl/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/awt/XControlContainer/awt_XControlContainer.xba104
-rw-r--r--qadevOOo/tests/basic/ifc/awt/XControlContainer/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/awt/XCurrencyField/awt_XCurrencyField.xba144
-rw-r--r--qadevOOo/tests/basic/ifc/awt/XCurrencyField/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/awt/XDataTransferProviderAccess/awt_XDataTransferProviderAccess.xba117
-rw-r--r--qadevOOo/tests/basic/ifc/awt/XDataTransferProviderAccess/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/awt/XDateField/awt_XDateField.xba123
-rw-r--r--qadevOOo/tests/basic/ifc/awt/XDateField/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/awt/XDialog/awt_XDialog.xba73
-rw-r--r--qadevOOo/tests/basic/ifc/awt/XDialog/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/awt/XFixedText/awt_XFixedText.xba87
-rw-r--r--qadevOOo/tests/basic/ifc/awt/XFixedText/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/awt/XItemListener/awt_XItemListener.xba82
-rw-r--r--qadevOOo/tests/basic/ifc/awt/XItemListener/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/awt/XLayoutConstrains/awt_XLayoutConstrains.xba75
-rw-r--r--qadevOOo/tests/basic/ifc/awt/XLayoutConstrains/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/awt/XListBox/awt_XListBox.xba239
-rw-r--r--qadevOOo/tests/basic/ifc/awt/XListBox/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/awt/XNumericField/awt_XNumericField.xba157
-rw-r--r--qadevOOo/tests/basic/ifc/awt/XNumericField/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/awt/XPatternField/awt_XPatternField.xba99
-rw-r--r--qadevOOo/tests/basic/ifc/awt/XPatternField/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/awt/XRadioButton/awt_XRadioButton.xba98
-rw-r--r--qadevOOo/tests/basic/ifc/awt/XRadioButton/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/awt/XSpinField/awt_XSpinField.xba126
-rw-r--r--qadevOOo/tests/basic/ifc/awt/XSpinField/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/awt/XTabController/awt_XTabController.xba116
-rw-r--r--qadevOOo/tests/basic/ifc/awt/XTabController/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/awt/XTabControllerModel/awt_XTabControllerModel.xba117
-rw-r--r--qadevOOo/tests/basic/ifc/awt/XTabControllerModel/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/awt/XTextComponent/awt_XTextComponent.xba191
-rw-r--r--qadevOOo/tests/basic/ifc/awt/XTextComponent/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/awt/XTextLayoutConstrains/awt_XTextLayoutConstrains.xba70
-rw-r--r--qadevOOo/tests/basic/ifc/awt/XTextLayoutConstrains/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/awt/XTextListener/awt_XTextListener.xba62
-rw-r--r--qadevOOo/tests/basic/ifc/awt/XTextListener/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/awt/XTimeField/awt_XTimeField.xba145
-rw-r--r--qadevOOo/tests/basic/ifc/awt/XTimeField/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/awt/XToolkit/awt_XToolkit.xba168
-rw-r--r--qadevOOo/tests/basic/ifc/awt/XToolkit/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/awt/XTopWindow/awt_XTopWindow.xba138
-rw-r--r--qadevOOo/tests/basic/ifc/awt/XTopWindow/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/awt/XView/awt_XView.xba92
-rw-r--r--qadevOOo/tests/basic/ifc/awt/XView/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/awt/XWindow/awt_XWindow.xba482
-rw-r--r--qadevOOo/tests/basic/ifc/awt/XWindow/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/beans/XExactName/beans_XExactName.xba85
-rw-r--r--qadevOOo/tests/basic/ifc/beans/XExactName/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/beans/XFastPropertySet/beans_XFastPropertySet.xba122
-rw-r--r--qadevOOo/tests/basic/ifc/beans/XFastPropertySet/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/beans/XIntrospection/beans_XIntrospection.xba61
-rw-r--r--qadevOOo/tests/basic/ifc/beans/XIntrospection/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/beans/XMultiPropertySet/beans_XMultiPropertySet.xba261
-rw-r--r--qadevOOo/tests/basic/ifc/beans/XMultiPropertySet/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/beans/XMultiPropertyStates/beans_XMultiPropertyStates.xba183
-rw-r--r--qadevOOo/tests/basic/ifc/beans/XMultiPropertyStates/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/beans/XProperty/beans_XProperty.xba58
-rw-r--r--qadevOOo/tests/basic/ifc/beans/XProperty/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/beans/XPropertySet/beans_XPropertySet.xba357
-rw-r--r--qadevOOo/tests/basic/ifc/beans/XPropertySet/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/beans/XPropertySetInfo/beans_XPropertySetInfo.xba74
-rw-r--r--qadevOOo/tests/basic/ifc/beans/XPropertySetInfo/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/beans/XPropertyState/beans_XPropertyState.xba178
-rw-r--r--qadevOOo/tests/basic/ifc/beans/XPropertyState/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/bridge/XBridge/bridge_XBridge.xba88
-rw-r--r--qadevOOo/tests/basic/ifc/bridge/XBridge/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/bridge/XBridgeFactory/bridge_XBridgeFactory.xba123
-rw-r--r--qadevOOo/tests/basic/ifc/bridge/XBridgeFactory/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/bridge/XUnoUrlResolver/bridge_XUnoUrlResolver.xba62
-rw-r--r--qadevOOo/tests/basic/ifc/bridge/XUnoUrlResolver/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/chart/BarDiagram/chart_BarDiagram.xba101
-rw-r--r--qadevOOo/tests/basic/ifc/chart/BarDiagram/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/chart/Chart3DBarProperties/chart_Chart3DBarProperties.xba56
-rw-r--r--qadevOOo/tests/basic/ifc/chart/Chart3DBarProperties/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/chart/ChartAxis/chart_ChartAxis.xba105
-rw-r--r--qadevOOo/tests/basic/ifc/chart/ChartAxis/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/chart/ChartAxisXSupplier/chart_ChartAxisXSupplier.xba68
-rw-r--r--qadevOOo/tests/basic/ifc/chart/ChartAxisXSupplier/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/chart/ChartAxisYSupplier/chart_ChartAxisYSupplier.xba67
-rw-r--r--qadevOOo/tests/basic/ifc/chart/ChartAxisYSupplier/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/chart/ChartAxisZSupplier/chart_ChartAxisZSupplier.xba68
-rw-r--r--qadevOOo/tests/basic/ifc/chart/ChartAxisZSupplier/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/chart/ChartDataPointProperties/chart_ChartDataPointProperties.xba72
-rw-r--r--qadevOOo/tests/basic/ifc/chart/ChartDataPointProperties/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/chart/ChartDataRowProperties/chart_ChartDataRowProperties.xba62
-rw-r--r--qadevOOo/tests/basic/ifc/chart/ChartDataRowProperties/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/chart/ChartDocument/chart_ChartDocument.xba60
-rw-r--r--qadevOOo/tests/basic/ifc/chart/ChartDocument/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/chart/ChartLegend/chart_ChartLegend.xba56
-rw-r--r--qadevOOo/tests/basic/ifc/chart/ChartLegend/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/chart/ChartStatistics/chart_ChartStatistics.xba70
-rw-r--r--qadevOOo/tests/basic/ifc/chart/ChartStatistics/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/chart/ChartTableAddressSupplier/chart_ChartTableAddressSupplier.xba62
-rw-r--r--qadevOOo/tests/basic/ifc/chart/ChartTableAddressSupplier/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/chart/ChartTitle/chart_ChartTitle.xba58
-rw-r--r--qadevOOo/tests/basic/ifc/chart/ChartTitle/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/chart/ChartTwoAxisXSupplier/chart_ChartTwoAxisXSupplier.xba58
-rw-r--r--qadevOOo/tests/basic/ifc/chart/ChartTwoAxisXSupplier/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/chart/ChartTwoAxisYSupplier/chart_ChartTwoAxisYSupplier.xba58
-rw-r--r--qadevOOo/tests/basic/ifc/chart/ChartTwoAxisYSupplier/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/chart/Diagram/chart_Diagram.xba65
-rw-r--r--qadevOOo/tests/basic/ifc/chart/Diagram/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/chart/Dim3DDiagram/chart_Dim3DDiagram.xba56
-rw-r--r--qadevOOo/tests/basic/ifc/chart/Dim3DDiagram/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/chart/LineDiagram/chart_LineDiagram.xba107
-rw-r--r--qadevOOo/tests/basic/ifc/chart/LineDiagram/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/chart/StackableDiagram/chart_StackableDiagram.xba79
-rw-r--r--qadevOOo/tests/basic/ifc/chart/StackableDiagram/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/chart/StockDiagram/chart_StockDiagram.xba78
-rw-r--r--qadevOOo/tests/basic/ifc/chart/StockDiagram/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/chart/X3DDisplay/chart_X3DDisplay.xba61
-rw-r--r--qadevOOo/tests/basic/ifc/chart/X3DDisplay/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/chart/XAxisXSupplier/chart_XAxisXSupplier.xba69
-rw-r--r--qadevOOo/tests/basic/ifc/chart/XAxisXSupplier/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/chart/XAxisYSupplier/chart_XAxisYSupplier.xba69
-rw-r--r--qadevOOo/tests/basic/ifc/chart/XAxisYSupplier/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/chart/XAxisZSupplier/chart_XAxisZSupplier.xba69
-rw-r--r--qadevOOo/tests/basic/ifc/chart/XAxisZSupplier/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/chart/XChartData/chart_XChartData.xba130
-rw-r--r--qadevOOo/tests/basic/ifc/chart/XChartData/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/chart/XChartDataArray/chart_XChartDataArray.xba179
-rw-r--r--qadevOOo/tests/basic/ifc/chart/XChartDataArray/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/chart/XChartDocument/chart_XChartDocument.xba129
-rw-r--r--qadevOOo/tests/basic/ifc/chart/XChartDocument/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/chart/XDiagram/chart_XDiagram.xba73
-rw-r--r--qadevOOo/tests/basic/ifc/chart/XDiagram/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/chart/XStatisticDisplay/chart_XStatisticDisplay.xba74
-rw-r--r--qadevOOo/tests/basic/ifc/chart/XStatisticDisplay/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/chart/XTwoAxisXSupplier/chart_XTwoAxisXSupplier.xba61
-rw-r--r--qadevOOo/tests/basic/ifc/chart/XTwoAxisXSupplier/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/chart/XTwoAxisYSupplier/chart_XTwoAxisYSupplier.xba61
-rw-r--r--qadevOOo/tests/basic/ifc/chart/XTwoAxisYSupplier/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/connection/XAcceptor/connection_XAcceptor.xba132
-rw-r--r--qadevOOo/tests/basic/ifc/connection/XAcceptor/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/connection/XConnector/connection_XConnector.xba70
-rw-r--r--qadevOOo/tests/basic/ifc/connection/XConnector/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/container/XChild/container_XChild.xba79
-rw-r--r--qadevOOo/tests/basic/ifc/container/XChild/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/container/XContainer/container_XContainer.xba228
-rw-r--r--qadevOOo/tests/basic/ifc/container/XContainer/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/container/XContentEnumerationAccess/container_XContentEnumerationAccess.xba65
-rw-r--r--qadevOOo/tests/basic/ifc/container/XContentEnumerationAccess/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/container/XElementAccess/container_XElementAccess.xba67
-rw-r--r--qadevOOo/tests/basic/ifc/container/XElementAccess/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/container/XEnumeration/container_XEnumeration.xba64
-rw-r--r--qadevOOo/tests/basic/ifc/container/XEnumeration/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/container/XEnumerationAccess/container_XEnumerationAccess.xba64
-rw-r--r--qadevOOo/tests/basic/ifc/container/XEnumerationAccess/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/container/XHierarchicalName/container_XHierarchicalName.xba97
-rw-r--r--qadevOOo/tests/basic/ifc/container/XHierarchicalName/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/container/XHierarchicalNameAccess/container_XHierarchicalNameAccess.xba79
-rw-r--r--qadevOOo/tests/basic/ifc/container/XHierarchicalNameAccess/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/container/XIndexAccess/container_XIndexAccess.xba73
-rw-r--r--qadevOOo/tests/basic/ifc/container/XIndexAccess/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/container/XIndexContainer/container_XIndexContainer.xba82
-rw-r--r--qadevOOo/tests/basic/ifc/container/XIndexContainer/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/container/XIndexReplace/container_XIndexReplace.xba84
-rw-r--r--qadevOOo/tests/basic/ifc/container/XIndexReplace/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/container/XNameAccess/container_XNameAccess.xba81
-rw-r--r--qadevOOo/tests/basic/ifc/container/XNameAccess/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/container/XNameContainer/container_XNameContainer.xba79
-rw-r--r--qadevOOo/tests/basic/ifc/container/XNameContainer/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/container/XNameReplace/container_XNameReplace.xba116
-rw-r--r--qadevOOo/tests/basic/ifc/container/XNameReplace/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/container/XNamed/container_XNamed.xba111
-rw-r--r--qadevOOo/tests/basic/ifc/container/XNamed/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/container/XSet/container_XSet.xba78
-rw-r--r--qadevOOo/tests/basic/ifc/container/XSet/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/datatransfer/XDataFormatTranslator/datatransfer_XDataFormatTranslator.xba95
-rw-r--r--qadevOOo/tests/basic/ifc/datatransfer/XDataFormatTranslator/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/datatransfer/XMimeContentTypeFactory/datatransfer_XMimeContentTypeFactory.xba63
-rw-r--r--qadevOOo/tests/basic/ifc/datatransfer/XMimeContentTypeFactory/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/datatransfer/clipboard/XClipboard/datatransfer_clipboard_XClipboard.xba105
-rw-r--r--qadevOOo/tests/basic/ifc/datatransfer/clipboard/XClipboard/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/datatransfer/clipboard/XClipboardEx/datatransfer_clipboard_XClipboardEx.xba63
-rw-r--r--qadevOOo/tests/basic/ifc/datatransfer/clipboard/XClipboardEx/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/datatransfer/clipboard/XClipboardNotifier/datatransfer_clipboard_XClipboardNotifier.xba133
-rw-r--r--qadevOOo/tests/basic/ifc/datatransfer/clipboard/XClipboardNotifier/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/datatransfer/clipboard/XFlushableClipboard/datatransfer_clipboard_XFlushableClipboard.xba67
-rw-r--r--qadevOOo/tests/basic/ifc/datatransfer/clipboard/XFlushableClipboard/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/document/DocumentInfo/document_DocumentInfo.xba206
-rw-r--r--qadevOOo/tests/basic/ifc/document/DocumentInfo/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/document/OfficeDocument/document_OfficeDocument.xba55
-rw-r--r--qadevOOo/tests/basic/ifc/document/OfficeDocument/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/document/XActionLockable/document_XActionLockable.xba85
-rw-r--r--qadevOOo/tests/basic/ifc/document/XActionLockable/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/document/XDocumentInfo/document_XDocumentInfo.xba94
-rw-r--r--qadevOOo/tests/basic/ifc/document/XDocumentInfo/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/document/XDocumentInfoSupplier/document_XDocumentInfoSupplier.xba61
-rw-r--r--qadevOOo/tests/basic/ifc/document/XDocumentInfoSupplier/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/document/XDocumentInsertable/document_XDocumentInsertable.xba64
-rw-r--r--qadevOOo/tests/basic/ifc/document/XDocumentInsertable/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/document/XEmbeddedObjectSupplier/document_XEmbeddedObjectSupplier.xba64
-rw-r--r--qadevOOo/tests/basic/ifc/document/XEmbeddedObjectSupplier/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/document/XEventsSupplier/document_XEventsSupplier.xba58
-rw-r--r--qadevOOo/tests/basic/ifc/document/XEventsSupplier/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/document/XExporter/document_XExporter.xba71
-rw-r--r--qadevOOo/tests/basic/ifc/document/XExporter/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/document/XFilter/document_XFilter.xba89
-rw-r--r--qadevOOo/tests/basic/ifc/document/XFilter/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/document/XImporter/document_XImporter.xba71
-rw-r--r--qadevOOo/tests/basic/ifc/document/XImporter/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/document/XLinkTargetSupplier/document_XLinkTargetSupplier.xba61
-rw-r--r--qadevOOo/tests/basic/ifc/document/XLinkTargetSupplier/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/document/XMimeTypeInfo/document_XMimeTypeInfo.xba67
-rw-r--r--qadevOOo/tests/basic/ifc/document/XMimeTypeInfo/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/document/XStandaloneDocumentInfo/document_XStandaloneDocumentInfo.xba85
-rw-r--r--qadevOOo/tests/basic/ifc/document/XStandaloneDocumentInfo/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/document/XTypeDetection/document_XTypeDetection.xba79
-rw-r--r--qadevOOo/tests/basic/ifc/document/XTypeDetection/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/document/XViewDataSupplier/document_XViewDataSupplier.xba62
-rw-r--r--qadevOOo/tests/basic/ifc/document/XViewDataSupplier/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/ConnectorProperties/drawing_ConnectorProperties.xba75
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/ConnectorProperties/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/ConnectorShape/drawing_ConnectorShape.xba74
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/ConnectorShape/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/DrawingDocument/drawing_DrawingDocument.xba62
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/DrawingDocument/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/DrawingDocumentDrawView/drawing_DrawingDocumentDrawView.xba73
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/DrawingDocumentDrawView/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/EllipseShape/drawing_EllipseShape.xba71
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/EllipseShape/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/FillProperties/drawing_FillProperties.xba121
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/FillProperties/drawing__FillProperties.xba121
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/FillProperties/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/GenericDrawPage/drawing_GenericDrawPage.xba71
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/GenericDrawPage/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/GraphicObjectShape/drawing_GraphicObjectShape.xba82
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/GraphicObjectShape/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/Layer/drawing_Layer.xba62
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/Layer/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/LineProperties/drawing_LineProperties.xba92
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/LineProperties/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/MeasureProperties/drawing_MeasureProperties.xba120
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/MeasureProperties/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/MeasureShape/drawing_MeasureShape.xba61
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/MeasureShape/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/PolyPolygonBezierDescriptor/drawing_PolyPolygonBezierDescriptor.xba60
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/PolyPolygonBezierDescriptor/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/PolyPolygonDescriptor/drawing_PolyPolygonDescriptor.xba60
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/PolyPolygonDescriptor/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/RotationDescriptor/drawing_RotationDescriptor.xba64
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/RotationDescriptor/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/ShadowProperties/drawing_ShadowProperties.xba64
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/ShadowProperties/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/Shape/drawing_Shape.xba93
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/Shape/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/TextProperties/drawing_TextProperties.xba104
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/TextProperties/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/TextShape/drawing_TextShape.xba56
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/TextShape/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/XControlShape/drawing_XControlShape.xba82
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/XControlShape/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/XDrawPageDuplicator/drawing_XDrawPageDuplicator.xba74
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/XDrawPageDuplicator/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/XDrawPageExpander/drawing_XDrawPageExpander.xba64
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/XDrawPageExpander/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/XDrawPageSummarizer/drawing_XDrawPageSummarizer.xba63
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/XDrawPageSummarizer/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/XDrawPageSupplier/drawing_XDrawPageSupplier.xba57
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/XDrawPageSupplier/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/XDrawPages/drawing_XDrawPages.xba71
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/XDrawPages/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/XDrawPagesSupplier/drawing_XDrawPagesSupplier.xba60
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/XDrawPagesSupplier/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/XDrawView/drawing_XDrawView.xba89
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/XDrawView/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/XGluePointsSupplier/drawing_XGluePointsSupplier.xba69
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/XGluePointsSupplier/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/XLayerManager/drawing_XLayerManager.xba94
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/XLayerManager/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/XLayerSupplier/drawing_XLayerSupplier.xba62
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/XLayerSupplier/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/XMasterPageTarget/drawing_XMasterPageTarget.xba74
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/XMasterPageTarget/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/XMasterPagesSupplier/drawing_XMasterPagesSupplier.xba61
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/XMasterPagesSupplier/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/XShape/drawing_XShape.xba133
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/XShape/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/XShapeBinder/drawing_XShapeBinder.xba94
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/XShapeBinder/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/XShapeCombiner/drawing_XShapeCombiner.xba86
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/XShapeCombiner/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/XShapeDescriptor/drawing_XShapeDescriptor.xba90
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/XShapeDescriptor/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/XShapeGroup/drawing_XShapeGroup.xba67
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/XShapeGroup/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/XShapeGrouper/drawing_XShapeGrouper.xba78
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/XShapeGrouper/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/XShapes/drawing_XShapes.xba82
-rw-r--r--qadevOOo/tests/basic/ifc/drawing/XShapes/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/form/DataAwareControlModel/form_DataAwareControlModel.xba60
-rw-r--r--qadevOOo/tests/basic/ifc/form/DataAwareControlModel/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/form/FormComponent/form_FormComponent.xba56
-rw-r--r--qadevOOo/tests/basic/ifc/form/FormComponent/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/form/FormControlModel/form_FormControlModel.xba60
-rw-r--r--qadevOOo/tests/basic/ifc/form/FormControlModel/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/form/XApproveActionBroadcaster/form_XApproveActionBroadcaster.xba99
-rw-r--r--qadevOOo/tests/basic/ifc/form/XApproveActionBroadcaster/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/form/XBoundComponent/form_XBoundComponent.xba79
-rw-r--r--qadevOOo/tests/basic/ifc/form/XBoundComponent/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/form/XBoundControl/form_XBoundControl.xba70
-rw-r--r--qadevOOo/tests/basic/ifc/form/XBoundControl/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/form/XChangeBroadcaster/form_XChangeBroadcaster.xba103
-rw-r--r--qadevOOo/tests/basic/ifc/form/XChangeBroadcaster/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/form/XFormController/form_XFormController.xba123
-rw-r--r--qadevOOo/tests/basic/ifc/form/XFormController/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/form/XFormsSupplier/form_XFormsSupplier.xba57
-rw-r--r--qadevOOo/tests/basic/ifc/form/XFormsSupplier/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/form/XGrid/form_XGrid.xba73
-rw-r--r--qadevOOo/tests/basic/ifc/form/XGrid/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/form/XGridColumnFactory/form_XGridColumnFactory.xba65
-rw-r--r--qadevOOo/tests/basic/ifc/form/XGridColumnFactory/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/form/XGridFieldDataSupplier/form_XGridFieldDataSupplier.xba91
-rw-r--r--qadevOOo/tests/basic/ifc/form/XGridFieldDataSupplier/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/form/XImageProducerSupplier/form_XImageProducerSupplier.xba62
-rw-r--r--qadevOOo/tests/basic/ifc/form/XImageProducerSupplier/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/form/XLoadListener/form_XLoadListener.xba79
-rw-r--r--qadevOOo/tests/basic/ifc/form/XLoadListener/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/form/XLoadable/form_XLoadable.xba139
-rw-r--r--qadevOOo/tests/basic/ifc/form/XLoadable/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/form/XReset/form_XReset.xba116
-rw-r--r--qadevOOo/tests/basic/ifc/form/XReset/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/form/XSubmit/form_XSubmit.xba107
-rw-r--r--qadevOOo/tests/basic/ifc/form/XSubmit/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/form/XUpdateBroadcaster/form_XUpdateBroadcaster.xba172
-rw-r--r--qadevOOo/tests/basic/ifc/form/XUpdateBroadcaster/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/form/component/CheckBox/form_component_CheckBox.xba61
-rw-r--r--qadevOOo/tests/basic/ifc/form/component/CheckBox/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/form/component/ComboBox/form_component_ComboBox.xba59
-rw-r--r--qadevOOo/tests/basic/ifc/form/component/ComboBox/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/form/component/CommandButton/form_component_CommandButton.xba78
-rw-r--r--qadevOOo/tests/basic/ifc/form/component/CommandButton/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/form/component/CurrencyField/form_component_CurrencyField.xba71
-rw-r--r--qadevOOo/tests/basic/ifc/form/component/CurrencyField/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/form/component/DataForm/form_component_DataForm.xba89
-rw-r--r--qadevOOo/tests/basic/ifc/form/component/DataForm/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/form/component/DatabaseComboBox/form_component_DatabaseComboBox.xba63
-rw-r--r--qadevOOo/tests/basic/ifc/form/component/DatabaseComboBox/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/form/component/DatabaseFormattedField/form_component_DatabaseFormattedField.xba59
-rw-r--r--qadevOOo/tests/basic/ifc/form/component/DatabaseFormattedField/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/form/component/DatabaseImageControl/form_component_DatabaseImageControl.xba59
-rw-r--r--qadevOOo/tests/basic/ifc/form/component/DatabaseImageControl/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/form/component/DatabaseListBox/form_component_DatabaseListBox.xba76
-rw-r--r--qadevOOo/tests/basic/ifc/form/component/DatabaseListBox/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/form/component/DatabasePatternField/form_component_DatabasePatternField.xba59
-rw-r--r--qadevOOo/tests/basic/ifc/form/component/DatabasePatternField/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/form/component/DatabaseTextField/form_component_DatabaseTextField.xba59
-rw-r--r--qadevOOo/tests/basic/ifc/form/component/DatabaseTextField/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/form/component/DateField/form_component_DateField.xba71
-rw-r--r--qadevOOo/tests/basic/ifc/form/component/DateField/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/form/component/FileControl/form_component_FileControl.xba59
-rw-r--r--qadevOOo/tests/basic/ifc/form/component/FileControl/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/form/component/GridControl/form_component_GridControl.xba69
-rw-r--r--qadevOOo/tests/basic/ifc/form/component/GridControl/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/form/component/HTMLForm/form_component_HTMLForm.xba83
-rw-r--r--qadevOOo/tests/basic/ifc/form/component/HTMLForm/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/form/component/HiddenControl/form_component_HiddenControl.xba59
-rw-r--r--qadevOOo/tests/basic/ifc/form/component/HiddenControl/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/form/component/ImageButton/form_component_ImageButton.xba72
-rw-r--r--qadevOOo/tests/basic/ifc/form/component/ImageButton/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/form/component/ListBox/form_component_ListBox.xba80
-rw-r--r--qadevOOo/tests/basic/ifc/form/component/ListBox/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/form/component/NumericField/form_component_NumericField.xba74
-rw-r--r--qadevOOo/tests/basic/ifc/form/component/NumericField/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/form/component/PatternField/form_component_PatternField.xba59
-rw-r--r--qadevOOo/tests/basic/ifc/form/component/PatternField/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/form/component/RadioButton/form_component_RadioButton.xba61
-rw-r--r--qadevOOo/tests/basic/ifc/form/component/RadioButton/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/form/component/TextField/form_component_TextField.xba59
-rw-r--r--qadevOOo/tests/basic/ifc/form/component/TextField/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/form/component/TimeField/form_component_TimeField.xba71
-rw-r--r--qadevOOo/tests/basic/ifc/form/component/TimeField/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/formula/FormulaProperties/formula_FormulaProperties.xba170
-rw-r--r--qadevOOo/tests/basic/ifc/formula/FormulaProperties/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/frame/Frame/frame_Frame.xba61
-rw-r--r--qadevOOo/tests/basic/ifc/frame/Frame/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/frame/XComponentLoader/frame_XComponentLoader.xba109
-rw-r--r--qadevOOo/tests/basic/ifc/frame/XComponentLoader/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/frame/XController/frame_XController.xba134
-rw-r--r--qadevOOo/tests/basic/ifc/frame/XController/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/frame/XDesktop/frame_XDesktop.xba97
-rw-r--r--qadevOOo/tests/basic/ifc/frame/XDesktop/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/frame/XDispatch/frame_XDispatch.xba120
-rw-r--r--qadevOOo/tests/basic/ifc/frame/XDispatch/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/frame/XDispatchProvider/frame_XDispatchProvider.xba110
-rw-r--r--qadevOOo/tests/basic/ifc/frame/XDispatchProvider/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/frame/XDispatchProviderInterception/frame_XDispatchProviderInterception.xba71
-rw-r--r--qadevOOo/tests/basic/ifc/frame/XDispatchProviderInterception/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/frame/XDispatchRecorder/frame_XDispatchRecorder.xba154
-rw-r--r--qadevOOo/tests/basic/ifc/frame/XDispatchRecorder/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/frame/XDispatchRecorderSupplier/frame_XDispatchRecorderSupplier.xba109
-rw-r--r--qadevOOo/tests/basic/ifc/frame/XDispatchRecorderSupplier/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/frame/XDocumentTemplates/frame_XDocumentTemplates.xba191
-rw-r--r--qadevOOo/tests/basic/ifc/frame/XDocumentTemplates/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/frame/XFrame/frame_XFrame.xba347
-rw-r--r--qadevOOo/tests/basic/ifc/frame/XFrame/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/frame/XFrameLoader/frame_XFrameLoader.xba127
-rw-r--r--qadevOOo/tests/basic/ifc/frame/XFrameLoader/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/frame/XFramesSupplier/frame_XFramesSupplier.xba129
-rw-r--r--qadevOOo/tests/basic/ifc/frame/XFramesSupplier/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/frame/XModel/frame_XModel.xba145
-rw-r--r--qadevOOo/tests/basic/ifc/frame/XModel/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/frame/XStorable/frame_XStorable.xba116
-rw-r--r--qadevOOo/tests/basic/ifc/frame/XStorable/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/frame/XSynchronousFrameLoader/frame_XSynchronousFrameLoader.xba87
-rw-r--r--qadevOOo/tests/basic/ifc/frame/XSynchronousFrameLoader/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/i18n/XBreakIterator/i18n_XBreakIterator.xba408
-rw-r--r--qadevOOo/tests/basic/ifc/i18n/XBreakIterator/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/i18n/XCalendar/i18n_XCalendar.xba306
-rw-r--r--qadevOOo/tests/basic/ifc/i18n/XCalendar/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/i18n/XCharacterClassification/i18n_XCharacterClassification.xba223
-rw-r--r--qadevOOo/tests/basic/ifc/i18n/XCharacterClassification/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/i18n/XCollator/i18n_XCollator.xba133
-rw-r--r--qadevOOo/tests/basic/ifc/i18n/XCollator/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/i18n/XIndexEntrySupplier/i18n_XIndexEntrySupplier.xba84
-rw-r--r--qadevOOo/tests/basic/ifc/i18n/XIndexEntrySupplier/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/i18n/XLocaleData/i18n_XLocaleData.xba245
-rw-r--r--qadevOOo/tests/basic/ifc/i18n/XLocaleData/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/i18n/XNumberFormatCode/i18n_XNumberFormatCode.xba78
-rw-r--r--qadevOOo/tests/basic/ifc/i18n/XNumberFormatCode/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/i18n/XTransliteration/i18n_XTransliteration.xba282
-rw-r--r--qadevOOo/tests/basic/ifc/i18n/XTransliteration/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/io/XActiveDataControl/io_XActiveDataControl.xba204
-rw-r--r--qadevOOo/tests/basic/ifc/io/XActiveDataControl/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/io/XActiveDataSink/io_XActiveDataSink.xba112
-rw-r--r--qadevOOo/tests/basic/ifc/io/XActiveDataSink/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/io/XActiveDataSource/io_XActiveDataSource.xba68
-rw-r--r--qadevOOo/tests/basic/ifc/io/XActiveDataSource/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/io/XConnectable/io_XConnectable.xba77
-rw-r--r--qadevOOo/tests/basic/ifc/io/XConnectable/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/io/XDataInputStream/io_XDataInputStream.xba170
-rw-r--r--qadevOOo/tests/basic/ifc/io/XDataInputStream/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/io/XDataOutputStream/io_XDataOutputStream.xba173
-rw-r--r--qadevOOo/tests/basic/ifc/io/XDataOutputStream/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/io/XInputStream/io_XInputStream.xba115
-rw-r--r--qadevOOo/tests/basic/ifc/io/XInputStream/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/io/XMarkableStream/io_XMarkableStream.xba253
-rw-r--r--qadevOOo/tests/basic/ifc/io/XMarkableStream/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/io/XObjectInputStream/io_XObjectInputStream.xba79
-rw-r--r--qadevOOo/tests/basic/ifc/io/XObjectInputStream/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/io/XObjectOutputStream/io_XObjectOutputStream.xba75
-rw-r--r--qadevOOo/tests/basic/ifc/io/XObjectOutputStream/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/io/XOutputStream/io_XOutputStream.xba88
-rw-r--r--qadevOOo/tests/basic/ifc/io/XOutputStream/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/io/XPersistObject/io_XPersistObject.xba130
-rw-r--r--qadevOOo/tests/basic/ifc/io/XPersistObject/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/java/XJavaVM/javajava_XJavaVM.xba79
-rw-r--r--qadevOOo/tests/basic/ifc/java/XJavaVM/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/lang/ServiceManager/lang_ServiceManager.xba61
-rw-r--r--qadevOOo/tests/basic/ifc/lang/ServiceManager/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/lang/XComponent/lang_XComponent.xba112
-rw-r--r--qadevOOo/tests/basic/ifc/lang/XComponent/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/lang/XEventListener/lang_XEventListener.xba64
-rw-r--r--qadevOOo/tests/basic/ifc/lang/XEventListener/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/lang/XInitialization/lang_XInitialization.xba86
-rw-r--r--qadevOOo/tests/basic/ifc/lang/XInitialization/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/lang/XMultiComponentFactory/lang_XMultiComponentFactory.xba91
-rw-r--r--qadevOOo/tests/basic/ifc/lang/XMultiComponentFactory/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/lang/XMultiServiceFactory/lang_XMultiServiceFactory.xba99
-rw-r--r--qadevOOo/tests/basic/ifc/lang/XMultiServiceFactory/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/lang/XServiceDisplayName/lang_XServiceDisplayName.xba65
-rw-r--r--qadevOOo/tests/basic/ifc/lang/XServiceDisplayName/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/lang/XServiceInfo/lang_XServiceInfo.xba67
-rw-r--r--qadevOOo/tests/basic/ifc/lang/XServiceInfo/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/lang/XSingleServiceFactory/lang_XSingleServiceFactory.xba106
-rw-r--r--qadevOOo/tests/basic/ifc/lang/XSingleServiceFactory/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/lang/XTypeProvider/lang_XTypeProvider.xba88
-rw-r--r--qadevOOo/tests/basic/ifc/lang/XTypeProvider/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/linguistic2/LinguProperties/linguistic2_LinguProperties.xba92
-rw-r--r--qadevOOo/tests/basic/ifc/linguistic2/LinguProperties/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/linguistic2/XDictionaryList/linguistic2_XDictionaryList.xba191
-rw-r--r--qadevOOo/tests/basic/ifc/linguistic2/XDictionaryList/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/linguistic2/XHyphenator/linguistic2_XHyphenator.xba85
-rw-r--r--qadevOOo/tests/basic/ifc/linguistic2/XHyphenator/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/linguistic2/XLinguServiceEventBroadcaster/linguistic2_XLinguServiceEventBroadcaster.xba77
-rw-r--r--qadevOOo/tests/basic/ifc/linguistic2/XLinguServiceEventBroadcaster/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/linguistic2/XLinguServiceManager/linguistic2_XLinguServiceManager.xba138
-rw-r--r--qadevOOo/tests/basic/ifc/linguistic2/XLinguServiceManager/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/linguistic2/XSearchableDictionaryList/linguistic2_XSearchableDictionaryList.xba67
-rw-r--r--qadevOOo/tests/basic/ifc/linguistic2/XSearchableDictionaryList/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/linguistic2/XSpellChecker/linguistic2_XSpellChecker.xba78
-rw-r--r--qadevOOo/tests/basic/ifc/linguistic2/XSpellChecker/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/linguistic2/XSupportedLocales/linguistic2_XSupportedLocales.xba78
-rw-r--r--qadevOOo/tests/basic/ifc/linguistic2/XSupportedLocales/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/linguistic2/XThesaurus/linguistic2_XThesaurus.xba69
-rw-r--r--qadevOOo/tests/basic/ifc/linguistic2/XThesaurus/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/loader/XImplementationLoader/loader_XImplementationLoader.xba94
-rw-r--r--qadevOOo/tests/basic/ifc/loader/XImplementationLoader/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/presentation/OutlineView/presentation_OutlineView.xba59
-rw-r--r--qadevOOo/tests/basic/ifc/presentation/OutlineView/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/presentation/Presentation/presentation_Presentation.xba85
-rw-r--r--qadevOOo/tests/basic/ifc/presentation/Presentation/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/presentation/PresentationView/presentation_PresentationView.xba61
-rw-r--r--qadevOOo/tests/basic/ifc/presentation/PresentationView/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/presentation/PreviewView/presentation_PreviewView.xba64
-rw-r--r--qadevOOo/tests/basic/ifc/presentation/PreviewView/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/presentation/XCustomPresentationSupplier/presentation_XCustomPresentationSupplier.xba62
-rw-r--r--qadevOOo/tests/basic/ifc/presentation/XCustomPresentationSupplier/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/presentation/XPresentation/presentation_XPresentation.xba68
-rw-r--r--qadevOOo/tests/basic/ifc/presentation/XPresentation/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/presentation/XPresentationSupplier/presentation_XPresentationSupplier.xba61
-rw-r--r--qadevOOo/tests/basic/ifc/presentation/XPresentationSupplier/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/reflection/XIdlReflection/reflection_XIdlReflection.xba68
-rw-r--r--qadevOOo/tests/basic/ifc/reflection/XIdlReflection/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/reflection/XProxyFactory/reflection_XProxyFactory.xba59
-rw-r--r--qadevOOo/tests/basic/ifc/reflection/XProxyFactory/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/registry/XImplementationRegistration/registry_XImplementationRegistration.xba168
-rw-r--r--qadevOOo/tests/basic/ifc/registry/XImplementationRegistration/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/registry/XSimpleRegistry/registry_XSimpleRegistry.xba132
-rw-r--r--qadevOOo/tests/basic/ifc/registry/XSimpleRegistry/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/script/XEventAttacherManager/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/script/XEventAttacherManager/script_XEventAttacherManager.xba160
-rw-r--r--qadevOOo/tests/basic/ifc/script/XInvocationAdapterFactory/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/script/XInvocationAdapterFactory/script_XInvocationAdapterFactory.xba81
-rw-r--r--qadevOOo/tests/basic/ifc/script/XInvocationAdapterFactory2/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/script/XInvocationAdapterFactory2/script_XInvocationAdapterFactory2.xba80
-rw-r--r--qadevOOo/tests/basic/ifc/script/XTypeConverter/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/script/XTypeConverter/script_XTypeConverter.xba109
-rw-r--r--qadevOOo/tests/basic/ifc/sdb/DataAccessDescriptor/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sdb/DataAccessDescriptor/sdb_DataAccessDescriptor.xba81
-rw-r--r--qadevOOo/tests/basic/ifc/sdb/DataSource/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sdb/DataSource/sdb_DataSource.xba111
-rw-r--r--qadevOOo/tests/basic/ifc/sdb/DatasourceAdministrationDialog/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sdb/DatasourceAdministrationDialog/sdb_DatasourceAdministrationDialog.xba59
-rw-r--r--qadevOOo/tests/basic/ifc/sdb/ErrorMessageDialog/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sdb/ErrorMessageDialog/sdb_ErrorMessageDialog.xba74
-rw-r--r--qadevOOo/tests/basic/ifc/sdb/QueryDefinition/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sdb/QueryDefinition/sdb_QueryDefinition.xba66
-rw-r--r--qadevOOo/tests/basic/ifc/sdb/RowSet/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sdb/RowSet/sdb_RowSet.xba100
-rw-r--r--qadevOOo/tests/basic/ifc/sdb/XBookmarksSupplier/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sdb/XBookmarksSupplier/sdb_XBookmarksSupplier.xba63
-rw-r--r--qadevOOo/tests/basic/ifc/sdb/XCompletedConnection/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sdb/XCompletedConnection/sdb_XCompletedConnection.xba64
-rw-r--r--qadevOOo/tests/basic/ifc/sdb/XQueryDefinitionsSupplier/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sdb/XQueryDefinitionsSupplier/sdb_XQueryDefinitionsSupplier.xba61
-rw-r--r--qadevOOo/tests/basic/ifc/sdb/XResultSetAccess/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sdb/XResultSetAccess/sdb_XResultSetAccess.xba60
-rw-r--r--qadevOOo/tests/basic/ifc/sdb/XRowSetApproveBroadcaster/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sdb/XRowSetApproveBroadcaster/sdb_XRowSetApproveBroadcaster.xba214
-rw-r--r--qadevOOo/tests/basic/ifc/sdbc/ResultSet/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sdbc/ResultSet/sdbc_ResultSet.xba64
-rw-r--r--qadevOOo/tests/basic/ifc/sdbc/RowSet/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sdbc/RowSet/sdbc_RowSet.xba78
-rw-r--r--qadevOOo/tests/basic/ifc/sdbc/XCloseable/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sdbc/XCloseable/sdbc_XCloseable.xba79
-rw-r--r--qadevOOo/tests/basic/ifc/sdbc/XColumnLocate/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sdbc/XColumnLocate/sdbc_XColumnLocate.xba71
-rw-r--r--qadevOOo/tests/basic/ifc/sdbc/XDataSource/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sdbc/XDataSource/sdbc_XDataSource.xba74
-rw-r--r--qadevOOo/tests/basic/ifc/sdbc/XDriver/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sdbc/XDriver/sdbc_XDriver.xba104
-rw-r--r--qadevOOo/tests/basic/ifc/sdbc/XDriverManager/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sdbc/XDriverManager/sdbc_XDriverManager.xba86
-rw-r--r--qadevOOo/tests/basic/ifc/sdbc/XIsolatedConnection/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sdbc/XIsolatedConnection/sdbc_XIsolatedConnection.xba76
-rw-r--r--qadevOOo/tests/basic/ifc/sdbc/XParameters/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sdbc/XParameters/sdbc_XParameters.xba211
-rw-r--r--qadevOOo/tests/basic/ifc/sdbc/XResultSet/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sdbc/XResultSet/sdbc_XResultSet.xba311
-rw-r--r--qadevOOo/tests/basic/ifc/sdbc/XResultSetMetaDataSupplier/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sdbc/XResultSetMetaDataSupplier/sdbc_XResultSetMetaDataSupplier.xba61
-rw-r--r--qadevOOo/tests/basic/ifc/sdbc/XResultSetUpdate/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sdbc/XResultSetUpdate/sdbc_XResultSetUpdate.xba138
-rw-r--r--qadevOOo/tests/basic/ifc/sdbc/XRow/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sdbc/XRow/sdbc_XRow.xba317
-rw-r--r--qadevOOo/tests/basic/ifc/sdbc/XRowSet/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sdbc/XRowSet/sdbc_XRowSet.xba107
-rw-r--r--qadevOOo/tests/basic/ifc/sdbc/XRowUpdate/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sdbc/XRowUpdate/sdbc_XRowUpdate.xba514
-rw-r--r--qadevOOo/tests/basic/ifc/sdbc/XWarningsSupplier/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sdbc/XWarningsSupplier/sdbc_XWarningsSupplier.xba64
-rw-r--r--qadevOOo/tests/basic/ifc/sdbcx/ResultSet/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sdbcx/ResultSet/sdbcx_ResultSet.xba58
-rw-r--r--qadevOOo/tests/basic/ifc/sdbcx/XColumnsSupplier/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sdbcx/XColumnsSupplier/sdbcx_XColumnsSupplier.xba67
-rw-r--r--qadevOOo/tests/basic/ifc/sdbcx/XDataDefinitionSupplier/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sdbcx/XDataDefinitionSupplier/sdbcx_XDataDefinitionSupplier.xba74
-rw-r--r--qadevOOo/tests/basic/ifc/sdbcx/XDeleteRows/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sdbcx/XDeleteRows/sdbcx_XDeleteRows.xba84
-rw-r--r--qadevOOo/tests/basic/ifc/sdbcx/XRowLocate/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sdbcx/XRowLocate/sdbcx_XRowLocate.xba128
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/CellAreaLink/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/CellAreaLink/sheet_CellAreaLink.xba65
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/DataPilotField/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/DataPilotField/sheet_DataPilotField.xba57
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/DatabaseRange/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/DatabaseRange/sheet_DatabaseRange.xba68
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/GlobalSheetSettings/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/GlobalSheetSettings/sheet_GlobalSheetSettings.xba90
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/SheetCell/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/SheetCell/sheet_SheetCell.xba66
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/SheetCellRange/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/SheetCellRange/sheet_SheetCellRange.xba65
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/SheetCellRanges/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/SheetCellRanges/sheet_SheetCellRanges.xba58
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/SheetFilterDescriptor/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/SheetFilterDescriptor/sheet_SheetFilterDescriptor.xba72
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/SheetLink/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/SheetLink/sheet_SheetLink.xba70
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/Spreadsheet/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/Spreadsheet/sheet_Spreadsheet.xba70
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/SpreadsheetDocument/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/SpreadsheetDocument/sheet_SpreadsheetDocument.xba70
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/SpreadsheetDocumentSettings/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/SpreadsheetDocumentSettings/sheet_SpreadsheetDocumentSettings.xba75
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/SpreadsheetViewSettings/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/SpreadsheetViewSettings/sheet_SpreadsheetViewSettings.xba96
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/SubTotalDescriptor/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/SubTotalDescriptor/sheet_SubTotalDescriptor.xba70
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/TableAutoFormat/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/TableAutoFormat/sheet_TableAutoFormat.xba66
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/TableAutoFormatField/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/TableAutoFormatField/sheet_TableAutoFormatField.xba163
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/TableValidation/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/TableValidation/sheet_TableValidation.xba72
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XAreaLink/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XAreaLink/sheet_XAreaLink.xba111
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XAreaLinks/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XAreaLinks/sheet_XAreaLinks.xba85
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XArrayFormulaRange/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XArrayFormulaRange/sheet_XArrayFormulaRange.xba85
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XCellAddressable/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XCellAddressable/sheet_XCellAddressable.xba63
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XCellRangeAddressable/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XCellRangeAddressable/sheet_XCellRangeAddressable.xba67
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XCellRangeData/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XCellRangeData/sheet_XCellRangeData.xba72
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XCellRangeMovement/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XCellRangeMovement/sheet_XCellRangeMovement.xba167
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XCellRangeReferrer/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XCellRangeReferrer/sheet_XCellRangeReferrer.xba92
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XCellSeries/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XCellSeries/sheet_XCellSeries.xba126
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XConsolidationDescriptor/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XConsolidationDescriptor/sheet_XConsolidationDescriptor.xba144
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XDDELink/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XDDELink/sheet_XDDELink.xba84
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XDataPilotDescriptor/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XDataPilotDescriptor/sheet_XDataPilotDescriptor.xba143
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XDataPilotTable/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XDataPilotTable/sheet_XDataPilotTable.xba92
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XDataPilotTables/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XDataPilotTables/sheet_XDataPilotTables.xba88
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XDataPilotTablesSupplier/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XDataPilotTablesSupplier/sheet_XDataPilotTablesSupplier.xba60
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XDatabaseRange/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XDatabaseRange/sheet_XDatabaseRange.xba106
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XDatabaseRanges/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XDatabaseRanges/sheet_XDatabaseRanges.xba76
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XFunctionDescriptions/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XFunctionDescriptions/sheet_XFunctionDescriptions.xba78
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XHeaderFooterContent/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XHeaderFooterContent/sheet_XHeaderFooterContent.xba94
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XLabelRange/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XLabelRange/sheet_XLabelRange.xba116
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XLabelRanges/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XLabelRanges/sheet_XLabelRanges.xba88
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XNamedRange/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XNamedRange/sheet_XNamedRange.xba110
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XNamedRanges/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XNamedRanges/sheet_XNamedRanges.xba131
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XRecentFunctions/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XRecentFunctions/sheet_XRecentFunctions.xba110
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XScenarios/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XScenarios/sheet_XScenarios.xba80
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XScenariosSupplier/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XScenariosSupplier/sheet_XScenariosSupplier.xba61
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XSheetAnnotation/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XSheetAnnotation/sheet_XSheetAnnotation.xba92
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XSheetAnnotations/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XSheetAnnotations/sheet_XSheetAnnotations.xba75
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XSheetAnnotationsSupplier/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XSheetAnnotationsSupplier/sheet_XSheetAnnotationsSupplier.xba60
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XSheetCellCursor/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XSheetCellCursor/sheet_XSheetCellCursor.xba135
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XSheetCellRange/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XSheetCellRange/sheet_XSheetCellRange.xba63
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XSheetCellRangeContainer/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XSheetCellRangeContainer/sheet_XSheetCellRangeContainer.xba90
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XSheetCellRanges/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XSheetCellRanges/sheet_XSheetCellRanges.xba81
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XSheetCondition/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XSheetCondition/sheet_XSheetCondition.xba103
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XSheetConditionalEntries/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XSheetConditionalEntries/sheet_XSheetConditionalEntries.xba78
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XSheetConditionalEntry/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XSheetConditionalEntry/sheet_XSheetConditionalEntry.xba70
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XSheetFilterDescriptor/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XSheetFilterDescriptor/sheet_XSheetFilterDescriptor.xba77
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XSheetOperation/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XSheetOperation/sheet_XSheetOperation.xba70
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XSheetPageBreak/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XSheetPageBreak/sheet_XSheetPageBreak.xba103
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XSpreadsheet/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XSpreadsheet/sheet_XSpreadsheet.xba66
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XSpreadsheetDocument/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XSpreadsheetDocument/sheet_XSpreadsheetDocument.xba63
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XSpreadsheetView/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XSpreadsheetView/sheet_XSpreadsheetView.xba95
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XSpreadsheets/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XSpreadsheets/sheet_XSpreadsheets.xba130
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XSubTotalDescriptor/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XSubTotalDescriptor/sheet_XSubTotalDescriptor.xba79
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XSubTotalField/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XSubTotalField/sheet_XSubTotalField.xba87
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XUsedAreaCursor/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XUsedAreaCursor/sheet_XUsedAreaCursor.xba86
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XViewFreezable/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XViewFreezable/sheet_XViewFreezable.xba75
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XViewPane/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XViewPane/sheet_XViewPane.xba87
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XViewSplitable/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/sheet/XViewSplitable/sheet_XViewSplitable.xba133
-rw-r--r--qadevOOo/tests/basic/ifc/style/CharacterProperties/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/style/CharacterProperties/style_CharacterProperties.xba292
-rw-r--r--qadevOOo/tests/basic/ifc/style/CharacterPropertiesAsian/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/style/CharacterPropertiesAsian/style_CharacterPropertiesAsian.xba100
-rw-r--r--qadevOOo/tests/basic/ifc/style/CharacterPropertiesComplex/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/style/CharacterPropertiesComplex/style_CharacterPropertiesComplex.xba94
-rw-r--r--qadevOOo/tests/basic/ifc/style/ParagraphProperties/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/style/ParagraphProperties/style_ParagraphProperties.xba212
-rw-r--r--qadevOOo/tests/basic/ifc/style/ParagraphPropertiesAsian/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/style/ParagraphPropertiesAsian/style_ParagraphPropertiesAsian.xba63
-rw-r--r--qadevOOo/tests/basic/ifc/style/ParagraphPropertiesComplex/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/style/ParagraphPropertiesComplex/style_ParagraphPropertiesComplex.xba58
-rw-r--r--qadevOOo/tests/basic/ifc/style/Style/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/style/Style/style_Style.xba62
-rw-r--r--qadevOOo/tests/basic/ifc/style/XStyle/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/style/XStyle/style_XStyle.xba90
-rw-r--r--qadevOOo/tests/basic/ifc/style/XStyleFamiliesSupplier/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/style/XStyleFamiliesSupplier/style_XStyleFamiliesSupplier.xba62
-rw-r--r--qadevOOo/tests/basic/ifc/system/XProxySettings/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/system/XProxySettings/system_XProxySettings.xba114
-rw-r--r--qadevOOo/tests/basic/ifc/system/XSimpleMailClientSupplier/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/system/XSimpleMailClientSupplier/system_XSimpleMailClientSupplier.xba65
-rw-r--r--qadevOOo/tests/basic/ifc/system/XSystemShellExecute/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/system/XSystemShellExecute/system_XSystemShellExecute.xba105
-rw-r--r--qadevOOo/tests/basic/ifc/table/CellProperties/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/table/CellProperties/table_CellProperties.xba109
-rw-r--r--qadevOOo/tests/basic/ifc/table/TableColumn/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/table/TableColumn/table_TableColumn.xba64
-rw-r--r--qadevOOo/tests/basic/ifc/table/TableRow/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/table/TableRow/table_TableRow.xba62
-rw-r--r--qadevOOo/tests/basic/ifc/table/XAutoFormattable/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/table/XAutoFormattable/table_XAutoFormattable.xba67
-rw-r--r--qadevOOo/tests/basic/ifc/table/XCell/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/table/XCell/table_XCell.xba100
-rw-r--r--qadevOOo/tests/basic/ifc/table/XCellCursor/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/table/XCellCursor/table_XCellCursor.xba144
-rw-r--r--qadevOOo/tests/basic/ifc/table/XCellRange/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/table/XCellRange/table_XCellRange.xba142
-rw-r--r--qadevOOo/tests/basic/ifc/table/XColumnRowRange/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/table/XColumnRowRange/table_XColumnRowRange.xba71
-rw-r--r--qadevOOo/tests/basic/ifc/table/XTableChart/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/table/XTableChart/table_XTableChart.xba106
-rw-r--r--qadevOOo/tests/basic/ifc/table/XTableCharts/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/table/XTableCharts/table_XTableCharts.xba99
-rw-r--r--qadevOOo/tests/basic/ifc/table/XTableChartsSupplier/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/table/XTableChartsSupplier/table_XTableChartsSupplier.xba59
-rw-r--r--qadevOOo/tests/basic/ifc/table/XTableColumns/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/table/XTableColumns/table_XTableColumns.xba87
-rw-r--r--qadevOOo/tests/basic/ifc/table/XTableRows/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/table/XTableRows/table_XTableRows.xba88
-rw-r--r--qadevOOo/tests/basic/ifc/task/XInteractionHandler/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/task/XInteractionHandler/task_XInteractionHandler.xba79
-rw-r--r--qadevOOo/tests/basic/ifc/task/XJob/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/task/XJob/task_XJob.xba88
-rw-r--r--qadevOOo/tests/basic/ifc/task/XStatusIndicatorFactory/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/task/XStatusIndicatorFactory/task_XStatusIndicatorFactory.xba77
-rw-r--r--qadevOOo/tests/basic/ifc/text/BaseFrame/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/text/BaseFrame/text_BaseFrame.xba63
-rw-r--r--qadevOOo/tests/basic/ifc/text/BaseFrameProperties/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/text/BaseFrameProperties/text_BaseFrameProperties.xba183
-rw-r--r--qadevOOo/tests/basic/ifc/text/BaseIndex/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/text/BaseIndex/text_BaseIndex.xba102
-rw-r--r--qadevOOo/tests/basic/ifc/text/BaseIndexMark/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/text/BaseIndexMark/text_BaseIndexMark.xba56
-rw-r--r--qadevOOo/tests/basic/ifc/text/CellProperties/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/text/CellProperties/text_CellProperties.xba109
-rw-r--r--qadevOOo/tests/basic/ifc/text/CellRange/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/text/CellRange/text_CellRange.xba74
-rw-r--r--qadevOOo/tests/basic/ifc/text/Defaults/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/text/Defaults/text_Defaults.xba56
-rw-r--r--qadevOOo/tests/basic/ifc/text/DocumentIndex/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/text/DocumentIndex/text_DocumentIndex.xba66
-rw-r--r--qadevOOo/tests/basic/ifc/text/DocumentIndexMark/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/text/DocumentIndexMark/text_DocumentIndexMark.xba60
-rw-r--r--qadevOOo/tests/basic/ifc/text/Footnote/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/text/Footnote/text_Footnote.xba56
-rw-r--r--qadevOOo/tests/basic/ifc/text/FootnoteSettings/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/text/FootnoteSettings/text_FootnoteSettings.xba90
-rw-r--r--qadevOOo/tests/basic/ifc/text/LineNumberingProperties/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/text/LineNumberingProperties/text_LineNumberingProperties.xba80
-rw-r--r--qadevOOo/tests/basic/ifc/text/MailMerge/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/text/MailMerge/text_MailMerge.xba94
-rw-r--r--qadevOOo/tests/basic/ifc/text/NumberingRules/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/text/NumberingRules/text_NumberingRules.xba62
-rw-r--r--qadevOOo/tests/basic/ifc/text/PrintSettings/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/text/PrintSettings/text_PrintSettings.xba83
-rw-r--r--qadevOOo/tests/basic/ifc/text/Text/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/text/Text/text_Text.xba56
-rw-r--r--qadevOOo/tests/basic/ifc/text/TextColumns/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/text/TextColumns/text_TextColumns.xba75
-rw-r--r--qadevOOo/tests/basic/ifc/text/TextContent/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/text/TextContent/text_TextContent.xba78
-rw-r--r--qadevOOo/tests/basic/ifc/text/TextDocument/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/text/TextDocument/text_TextDocument.xba70
-rw-r--r--qadevOOo/tests/basic/ifc/text/TextFieldMaster/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/text/TextFieldMaster/text_TextFieldMaster.xba57
-rw-r--r--qadevOOo/tests/basic/ifc/text/TextFrame/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/text/TextFrame/text_TextFrame.xba75
-rw-r--r--qadevOOo/tests/basic/ifc/text/TextGraphicObject/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/text/TextGraphicObject/text_TextGraphicObject.xba207
-rw-r--r--qadevOOo/tests/basic/ifc/text/TextPortion/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/text/TextPortion/text_TextPortion.xba66
-rw-r--r--qadevOOo/tests/basic/ifc/text/TextSection/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/text/TextSection/text_TextSection.xba139
-rw-r--r--qadevOOo/tests/basic/ifc/text/TextTable/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/text/TextTable/text_TextTable.xba128
-rw-r--r--qadevOOo/tests/basic/ifc/text/TextTableRow/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/text/TextTableRow/text_TextTableRow.xba75
-rw-r--r--qadevOOo/tests/basic/ifc/text/ViewSettings/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/text/ViewSettings/text_ViewSettings.xba114
-rw-r--r--qadevOOo/tests/basic/ifc/text/XAutoTextContainer/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/text/XAutoTextContainer/text_XAutoTextContainer.xba95
-rw-r--r--qadevOOo/tests/basic/ifc/text/XAutoTextEntry/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/text/XAutoTextEntry/text_XAutoTextEntry.xba66
-rw-r--r--qadevOOo/tests/basic/ifc/text/XAutoTextGroup/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/text/XAutoTextGroup/text_XAutoTextGroup.xba100
-rw-r--r--qadevOOo/tests/basic/ifc/text/XChapterNumberingSupplier/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/text/XChapterNumberingSupplier/text_XChapterNumberingSupplier.xba60
-rw-r--r--qadevOOo/tests/basic/ifc/text/XDefaultNumberingProvider/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/text/XDefaultNumberingProvider/text_XDefaultNumberingProvider.xba119
-rw-r--r--qadevOOo/tests/basic/ifc/text/XDocumentIndex/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/text/XDocumentIndex/text_XDocumentIndex.xba65
-rw-r--r--qadevOOo/tests/basic/ifc/text/XEndnotesSupplier/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/text/XEndnotesSupplier/text_XEndnotesSupplier.xba64
-rw-r--r--qadevOOo/tests/basic/ifc/text/XFootnote/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/text/XFootnote/text_XFootnote.xba68
-rw-r--r--qadevOOo/tests/basic/ifc/text/XFootnotesSupplier/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/text/XFootnotesSupplier/text_XFootnotesSupplier.xba64
-rw-r--r--qadevOOo/tests/basic/ifc/text/XLineNumberingSupplier/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/text/XLineNumberingSupplier/text_XLineNumberingSupplier.xba67
-rw-r--r--qadevOOo/tests/basic/ifc/text/XMailMergeBroadcaster/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/text/XMailMergeBroadcaster/text_XMailMergeBroadcaster.xba106
-rw-r--r--qadevOOo/tests/basic/ifc/text/XPageCursor/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/text/XPageCursor/text_XPageCursor.xba123
-rw-r--r--qadevOOo/tests/basic/ifc/text/XPagePrintable/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/text/XPagePrintable/text_XPagePrintable.xba98
-rw-r--r--qadevOOo/tests/basic/ifc/text/XParagraphCursor/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/text/XParagraphCursor/text_XParagraphCursor.xba121
-rw-r--r--qadevOOo/tests/basic/ifc/text/XReferenceMarksSupplier/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/text/XReferenceMarksSupplier/text_XReferenceMarksSupplier.xba59
-rw-r--r--qadevOOo/tests/basic/ifc/text/XRelativeTextContentInsert/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/text/XRelativeTextContentInsert/text_XRelativeTextContentInsert.xba164
-rw-r--r--qadevOOo/tests/basic/ifc/text/XSentenceCursor/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/text/XSentenceCursor/text_XSentenceCursor.xba105
-rw-r--r--qadevOOo/tests/basic/ifc/text/XSimpleText/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/text/XSimpleText/text_XSimpleText.xba113
-rw-r--r--qadevOOo/tests/basic/ifc/text/XText/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/text/XText/text_XText.xba153
-rw-r--r--qadevOOo/tests/basic/ifc/text/XTextColumns/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/text/XTextColumns/text_XTextColumns.xba119
-rw-r--r--qadevOOo/tests/basic/ifc/text/XTextContent/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/text/XTextContent/text_XTextContent.xba83
-rw-r--r--qadevOOo/tests/basic/ifc/text/XTextCursor/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/text/XTextCursor/text_XTextCursor.xba134
-rw-r--r--qadevOOo/tests/basic/ifc/text/XTextDocument/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/text/XTextDocument/text_XTextDocument.xba65
-rw-r--r--qadevOOo/tests/basic/ifc/text/XTextEmbeddedObjectsSupplier/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/text/XTextEmbeddedObjectsSupplier/text_XTextEmbeddedObjectsSupplier.xba59
-rw-r--r--qadevOOo/tests/basic/ifc/text/XTextField/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/text/XTextField/text_XTextField.xba67
-rw-r--r--qadevOOo/tests/basic/ifc/text/XTextFrame/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/text/XTextFrame/text_XTextFrame.xba70
-rw-r--r--qadevOOo/tests/basic/ifc/text/XTextGraphicObjectsSupplier/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/text/XTextGraphicObjectsSupplier/text_XTextGraphicObjectsSupplier.xba59
-rw-r--r--qadevOOo/tests/basic/ifc/text/XTextRange/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/text/XTextRange/text_XTextRange.xba86
-rw-r--r--qadevOOo/tests/basic/ifc/text/XTextRangeCompare/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/text/XTextRangeCompare/text_XTextRangeCompare.xba98
-rw-r--r--qadevOOo/tests/basic/ifc/text/XTextRangeMover/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/text/XTextRangeMover/text_XTextRangeMover.xba71
-rw-r--r--qadevOOo/tests/basic/ifc/text/XTextSection/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/text/XTextSection/text_XTextSection.xba106
-rw-r--r--qadevOOo/tests/basic/ifc/text/XTextTable/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/text/XTextTable/text_XTextTable.xba140
-rw-r--r--qadevOOo/tests/basic/ifc/text/XTextTableCursor/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/text/XTextTableCursor/text_XTextTableCursor.xba142
-rw-r--r--qadevOOo/tests/basic/ifc/text/XTextTablesSupplier/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/text/XTextTablesSupplier/text_XTextTablesSupplier.xba59
-rw-r--r--qadevOOo/tests/basic/ifc/text/XTextViewCursorSupplier/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/text/XTextViewCursorSupplier/text_XTextViewCursorSupplier.xba61
-rw-r--r--qadevOOo/tests/basic/ifc/text/XWordCursor/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/text/XWordCursor/text_XWordCursor.xba99
-rw-r--r--qadevOOo/tests/basic/ifc/ucb/XCachedContentResultSetFactory/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/ucb/XCachedContentResultSetFactory/ucb_XCachedContentResultSetFactory.xba91
-rw-r--r--qadevOOo/tests/basic/ifc/ucb/XCachedContentResultSetStubFactory/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/ucb/XCachedContentResultSetStubFactory/ucb_XCachedContentResultSetStubFactory.xba91
-rw-r--r--qadevOOo/tests/basic/ifc/ucb/XCachedDynamicResultSetFactory/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/ucb/XCachedDynamicResultSetFactory/ucb_XCachedDynamicResultSetFactory.xba97
-rw-r--r--qadevOOo/tests/basic/ifc/ucb/XCachedDynamicResultSetStubFactory/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/ucb/XCachedDynamicResultSetStubFactory/ucb_XCachedDynamicResultSetStubFactory.xba125
-rw-r--r--qadevOOo/tests/basic/ifc/ucb/XCommandProcessor/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/ucb/XCommandProcessor/ucb_XCommandProcessor.xba85
-rw-r--r--qadevOOo/tests/basic/ifc/ucb/XContentIdentifierFactory/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/ucb/XContentIdentifierFactory/ucb_XContentIdentifierFactory.xba77
-rw-r--r--qadevOOo/tests/basic/ifc/ucb/XContentProvider/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/ucb/XContentProvider/ucb_XContentProvider.xba95
-rw-r--r--qadevOOo/tests/basic/ifc/ucb/XContentProviderFactory/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/ucb/XContentProviderFactory/ucb_XContentProviderFactory.xba61
-rw-r--r--qadevOOo/tests/basic/ifc/ucb/XContentProviderManager/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/ucb/XContentProviderManager/ucb_XContentProviderManager.xba115
-rw-r--r--qadevOOo/tests/basic/ifc/ucb/XDataContainer/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/ucb/XDataContainer/ucb_XDataContainer.xba155
-rw-r--r--qadevOOo/tests/basic/ifc/ucb/XFileIdentifierConverter/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/ucb/XFileIdentifierConverter/ucb_XFileIdentifierConverter.xba90
-rw-r--r--qadevOOo/tests/basic/ifc/ucb/XPropertyMatcherFactory/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/ucb/XPropertyMatcherFactory/ucb_XPropertyMatcherFactory.xba71
-rw-r--r--qadevOOo/tests/basic/ifc/ucb/XPropertySetRegistryFactory/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/ucb/XPropertySetRegistryFactory/ucb_XPropertySetRegistryFactory.xba62
-rw-r--r--qadevOOo/tests/basic/ifc/ucb/XSimpleFileAccess/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/ucb/XSimpleFileAccess/ucb_XSimpleFileAccess.xba242
-rw-r--r--qadevOOo/tests/basic/ifc/ucb/XSimpleFileAccess2/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/ucb/XSimpleFileAccess2/ucb_XSimpleFileAccess2.xba77
-rw-r--r--qadevOOo/tests/basic/ifc/ucb/XSortedDynamicResultSetFactory/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/ucb/XSortedDynamicResultSetFactory/ucb_XSortedDynamicResultSetFactory.xba111
-rw-r--r--qadevOOo/tests/basic/ifc/ui/dialogs/FilePicker/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/ui/dialogs/FilePicker/ui_dialogs_FilePicker.xba55
-rw-r--r--qadevOOo/tests/basic/ifc/ui/dialogs/XExecutableDialog/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/ui/dialogs/XExecutableDialog/ui_dialogs_XExecutableDialog.xba68
-rw-r--r--qadevOOo/tests/basic/ifc/ui/dialogs/XFilePicker/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/ui/dialogs/XFilePicker/ui_dialogs_XFilePicker.xba93
-rw-r--r--qadevOOo/tests/basic/ifc/ui/dialogs/XFilePickerControlAccess/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/ui/dialogs/XFilePickerControlAccess/ui_dialogs_XFilePickerControlAccess.xba102
-rw-r--r--qadevOOo/tests/basic/ifc/ui/dialogs/XFilePickerNotifier/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/ui/dialogs/XFilePickerNotifier/ui_dialogs_XFilePickerNotifier.xba93
-rw-r--r--qadevOOo/tests/basic/ifc/ui/dialogs/XFilePreview/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/ui/dialogs/XFilePreview/ui_dialogs_XFilePreview.xba112
-rw-r--r--qadevOOo/tests/basic/ifc/ui/dialogs/XFilterManager/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/ui/dialogs/XFilterManager/ui_dialogs_XFilterManager.xba73
-rw-r--r--qadevOOo/tests/basic/ifc/ui/dialogs/XFolderPicker/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/ui/dialogs/XFolderPicker/ui_dialogs_XFolderPicker.xba82
-rw-r--r--qadevOOo/tests/basic/ifc/uno/XNamingService/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/uno/XNamingService/uno_XNamingService.xba92
-rw-r--r--qadevOOo/tests/basic/ifc/util/PathSettings/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/util/PathSettings/util_PathSettings.xba151
-rw-r--r--qadevOOo/tests/basic/ifc/util/SearchDescriptor/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/util/SearchDescriptor/util_SearchDescriptor.xba74
-rw-r--r--qadevOOo/tests/basic/ifc/util/XCancellable/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/util/XCancellable/util_XCancellable.xba58
-rw-r--r--qadevOOo/tests/basic/ifc/util/XCloneable/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/util/XCloneable/util_XCloneable.xba66
-rw-r--r--qadevOOo/tests/basic/ifc/util/XFlushable/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/util/XFlushable/util_XFlushable.xba98
-rw-r--r--qadevOOo/tests/basic/ifc/util/XMergeable/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/util/XMergeable/util_XMergeable.xba71
-rw-r--r--qadevOOo/tests/basic/ifc/util/XModeSelector/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/util/XModeSelector/util_XModeSelector.xba84
-rw-r--r--qadevOOo/tests/basic/ifc/util/XModifyBroadcaster/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/util/XModifyBroadcaster/util_XModifyBroadcaster.xba82
-rw-r--r--qadevOOo/tests/basic/ifc/util/XNumberFormatsSupplier/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/util/XNumberFormatsSupplier/util_XNumberFormatsSupplier.xba71
-rw-r--r--qadevOOo/tests/basic/ifc/util/XRefreshable/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/util/XRefreshable/util_XRefreshable.xba106
-rw-r--r--qadevOOo/tests/basic/ifc/util/XReplaceDescriptor/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/util/XReplaceDescriptor/util_XReplaceDescriptor.xba68
-rw-r--r--qadevOOo/tests/basic/ifc/util/XReplaceable/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/util/XReplaceable/util_XReplaceable.xba93
-rw-r--r--qadevOOo/tests/basic/ifc/util/XSearchDescriptor/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/util/XSearchDescriptor/util_XSearchDescriptor.xba70
-rw-r--r--qadevOOo/tests/basic/ifc/util/XSearchable/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/util/XSearchable/util_XSearchable.xba111
-rw-r--r--qadevOOo/tests/basic/ifc/util/XSortable/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/util/XSortable/util_XSortable.xba80
-rw-r--r--qadevOOo/tests/basic/ifc/util/XStringEscape/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/util/XStringEscape/util_XStringEscape.xba71
-rw-r--r--qadevOOo/tests/basic/ifc/util/XTextSearch/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/util/XTextSearch/util_XTextSearch.xba104
-rw-r--r--qadevOOo/tests/basic/ifc/view/XControlAccess/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/view/XControlAccess/view_XControlAccess.xba68
-rw-r--r--qadevOOo/tests/basic/ifc/view/XPrintSettingsSupplier/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/view/XPrintSettingsSupplier/view_XPrintSettingsSupplier.xba59
-rw-r--r--qadevOOo/tests/basic/ifc/view/XPrintable/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/view/XPrintable/view_XPrintable.xba119
-rw-r--r--qadevOOo/tests/basic/ifc/view/XScreenCursor/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/view/XScreenCursor/view_XScreenCursor.xba69
-rw-r--r--qadevOOo/tests/basic/ifc/view/XSelectionSupplier/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/view/XSelectionSupplier/view_XSelectionSupplier.xba146
-rw-r--r--qadevOOo/tests/basic/ifc/view/XViewSettingsSupplier/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/view/XViewSettingsSupplier/view_XViewSettingsSupplier.xba60
-rw-r--r--qadevOOo/tests/basic/ifc/xml/UserDefinedAttributeSupplier/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/xml/UserDefinedAttributeSupplier/xml_UserDefinedAttributeSupplier.xba72
-rw-r--r--qadevOOo/tests/basic/ifc/xml/sax/XDocumentHandler/script.xlb5
-rw-r--r--qadevOOo/tests/basic/ifc/xml/sax/XDocumentHandler/xml_sax_XDocumentHandler.xba137
-rw-r--r--qadevOOo/tests/basic/mod/acceptor.uno/Acceptor/acceptor_uno_Acceptor.xba49
-rw-r--r--qadevOOo/tests/basic/mod/acceptor.uno/Acceptor/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/acceptor/Acceptor/acceptor_Acceptor.xba49
-rw-r--r--qadevOOo/tests/basic/mod/acceptor/Acceptor/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/adabas/ODriver/adabas_ODriver.xba69
-rw-r--r--qadevOOo/tests/basic/mod/adabas/ODriver/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/ado/ODriver/ado_ODriver.xba67
-rw-r--r--qadevOOo/tests/basic/mod/ado/ODriver/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/brdgfctr/BridgeFactory/brdgfctr_BridgeFactory.xba70
-rw-r--r--qadevOOo/tests/basic/mod/brdgfctr/BridgeFactory/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/bridgefac.uno/BridgeFactory/bridgefac_uno_BridgeFactory.xba70
-rw-r--r--qadevOOo/tests/basic/mod/bridgefac.uno/BridgeFactory/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/cached/CachedContentResultSetFactory/cached_CachedContentResultSetFactory.xba100
-rw-r--r--qadevOOo/tests/basic/mod/cached/CachedContentResultSetFactory/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/cached/CachedContentResultSetStubFactory/cached_CachedContentResultSetStubFactory.xba94
-rw-r--r--qadevOOo/tests/basic/mod/cached/CachedContentResultSetStubFactory/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/cached/CachedDynamicResultSetFactory/cached_CachedDynamicResultSetFactory.xba96
-rw-r--r--qadevOOo/tests/basic/mod/cached/CachedDynamicResultSetFactory/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/cached/CachedDynamicResultSetStubFactory/cached_CachedDynamicResultSetStubFactory.xba94
-rw-r--r--qadevOOo/tests/basic/mod/cached/CachedDynamicResultSetStubFactory/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/cmdmail/SimpleCommandMail/cmdmail_SimpleCommandMail.xba56
-rw-r--r--qadevOOo/tests/basic/mod/cmdmail/SimpleCommandMail/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/cnt/ChaosContentProvider/cnt_ChaosContentProvider.xba59
-rw-r--r--qadevOOo/tests/basic/mod/cnt/ChaosContentProvider/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/cnt/CntUnoDataContainer/cnt_CntUnoDataContainer.xba94
-rw-r--r--qadevOOo/tests/basic/mod/cnt/CntUnoDataContainer/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/cnt/PropertyMatcherFactory/cnt_PropertyMatcherFactory.xba49
-rw-r--r--qadevOOo/tests/basic/mod/cnt/PropertyMatcherFactory/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/connector.uno/Connector/connector_uno_Connector.xba49
-rw-r--r--qadevOOo/tests/basic/mod/connector.uno/Connector/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/connectr/Connector/connectr_Connector.xba49
-rw-r--r--qadevOOo/tests/basic/mod/connectr/Connector/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/corefl/CoreReflection/corefl_CoreReflection.xba57
-rw-r--r--qadevOOo/tests/basic/mod/corefl/CoreReflection/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/corereflection.uno/CoreReflection/corereflection_uno_CoreReflection.xba57
-rw-r--r--qadevOOo/tests/basic/mod/corereflection.uno/CoreReflection/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/cpld/DLLComponentLoader/cpld_DLLComponentLoader.xba59
-rw-r--r--qadevOOo/tests/basic/mod/cpld/DLLComponentLoader/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/dbaccess/ConnectionLineAccessibility/dbaccess_ConnectionLineAccessibility.xba147
-rw-r--r--qadevOOo/tests/basic/mod/dbaccess/ConnectionLineAccessibility/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/dbaccess/DBContentLoader/dbaccess_DBContentLoader.xba63
-rw-r--r--qadevOOo/tests/basic/mod/dbaccess/DBContentLoader/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/dbaccess/JoinViewAccessibility/dbaccess_JoinViewAccessibility.xba148
-rw-r--r--qadevOOo/tests/basic/mod/dbaccess/JoinViewAccessibility/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/dbaccess/OCommandDefinition/dbaccess_OCommandDefinition.xba56
-rw-r--r--qadevOOo/tests/basic/mod/dbaccess/OCommandDefinition/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/dbaccess/ODatabaseContext/dbaccess_ODatabaseContext.xba56
-rw-r--r--qadevOOo/tests/basic/mod/dbaccess/ODatabaseContext/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/dbaccess/ODatabaseSource/dbaccess_ODatabaseSource.xba88
-rw-r--r--qadevOOo/tests/basic/mod/dbaccess/ODatabaseSource/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/dbaccess/ODatasourceAdministrationDialog/dbaccess_ODatasourceAdministrationDialog.xba67
-rw-r--r--qadevOOo/tests/basic/mod/dbaccess/ODatasourceAdministrationDialog/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/dbaccess/ODatasourceBrowser/dbaccess_ODatasourceBrowser.xba142
-rw-r--r--qadevOOo/tests/basic/mod/dbaccess/ODatasourceBrowser/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/dbaccess/OInteractionHandler/dbaccess_OInteractionHandler.xba56
-rw-r--r--qadevOOo/tests/basic/mod/dbaccess/OInteractionHandler/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/dbaccess/ORowSet/dbaccess_ORowSet.xba176
-rw-r--r--qadevOOo/tests/basic/mod/dbaccess/ORowSet/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/dbaccess/OSQLMessageDialog/dbaccess_OSQLMessageDialog.xba56
-rw-r--r--qadevOOo/tests/basic/mod/dbaccess/OSQLMessageDialog/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/dbaccess/SbaXGridControl/dbaccess_SbaXGridControl.xba222
-rw-r--r--qadevOOo/tests/basic/mod/dbaccess/SbaXGridControl/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/dbaccess/TableWindowAccessibility/dbaccess_TableWindowAccessibility.xba147
-rw-r--r--qadevOOo/tests/basic/mod/dbaccess/TableWindowAccessibility/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/dbpool/OConnectionPool/dbpool_OConnectionPool.xba55
-rw-r--r--qadevOOo/tests/basic/mod/dbpool/OConnectionPool/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/defreg/NestedRegistry/defreg_NestedRegistry.xba94
-rw-r--r--qadevOOo/tests/basic/mod/defreg/NestedRegistry/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/dtrans/generic/dtrans_generic.xba58
-rw-r--r--qadevOOo/tests/basic/mod/dtrans/generic/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/dynamicloader.uno/Dynamic/dynamicloader_uno_Dynamic.xba64
-rw-r--r--qadevOOo/tests/basic/mod/dynamicloader.uno/Dynamic/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/dynamicloader/Dynamic/dynamicloader_Dynamic.xba64
-rw-r--r--qadevOOo/tests/basic/mod/dynamicloader/Dynamic/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/file/calc/ODriver/file_calc_ODriver.xba67
-rw-r--r--qadevOOo/tests/basic/mod/file/calc/ODriver/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/file/dbase/ODriver/file_dbase_ODriver.xba67
-rw-r--r--qadevOOo/tests/basic/mod/file/dbase/ODriver/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/file/flat/ODriver/file_flat_ODriver.xba67
-rw-r--r--qadevOOo/tests/basic/mod/file/flat/ODriver/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/fileacc/SimpleFileAccess/fileacc_SimpleFileAccess.xba49
-rw-r--r--qadevOOo/tests/basic/mod/fileacc/SimpleFileAccess/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/fop/FolderPicker/fop_FolderPicker.xba56
-rw-r--r--qadevOOo/tests/basic/mod/fop/FolderPicker/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/forms/OButtonControl/forms_OButtonControl.xba107
-rw-r--r--qadevOOo/tests/basic/mod/forms/OButtonControl/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/forms/OButtonModel/forms_OButtonModel.xba72
-rw-r--r--qadevOOo/tests/basic/mod/forms/OButtonModel/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/forms/OCheckBoxControl/forms_OCheckBoxControl.xba127
-rw-r--r--qadevOOo/tests/basic/mod/forms/OCheckBoxControl/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/forms/OCheckBoxModel/forms_OCheckBoxModel.xba71
-rw-r--r--qadevOOo/tests/basic/mod/forms/OCheckBoxModel/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/forms/OComboBoxControl/forms_OComboBoxControl.xba108
-rw-r--r--qadevOOo/tests/basic/mod/forms/OComboBoxControl/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/forms/OComboBoxModel/forms_OComboBoxModel.xba131
-rw-r--r--qadevOOo/tests/basic/mod/forms/OComboBoxModel/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/forms/OCurrencyControl/forms_OCurrencyControl.xba106
-rw-r--r--qadevOOo/tests/basic/mod/forms/OCurrencyControl/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/forms/OCurrencyModel/forms_OCurrencyModel.xba137
-rw-r--r--qadevOOo/tests/basic/mod/forms/OCurrencyModel/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/forms/ODatabaseForm/forms_ODatabaseForm.xba212
-rw-r--r--qadevOOo/tests/basic/mod/forms/ODatabaseForm/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/forms/ODateControl/forms_ODateControl.xba107
-rw-r--r--qadevOOo/tests/basic/mod/forms/ODateControl/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/forms/ODateModel/forms_ODateModel.xba140
-rw-r--r--qadevOOo/tests/basic/mod/forms/ODateModel/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/forms/OEditControl/forms_OEditControl.xba106
-rw-r--r--qadevOOo/tests/basic/mod/forms/OEditControl/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/forms/OEditModel/forms_OEditModel.xba128
-rw-r--r--qadevOOo/tests/basic/mod/forms/OEditModel/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/forms/OFileControlModel/forms_OFileControlModel.xba76
-rw-r--r--qadevOOo/tests/basic/mod/forms/OFileControlModel/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/forms/OFixedTextModel/forms_OFixedTextModel.xba74
-rw-r--r--qadevOOo/tests/basic/mod/forms/OFixedTextModel/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/forms/OFormattedControl/forms_OFormattedControl.xba107
-rw-r--r--qadevOOo/tests/basic/mod/forms/OFormattedControl/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/forms/OFormattedFieldWrapper/forms_OFormattedFieldWrapper.xba166
-rw-r--r--qadevOOo/tests/basic/mod/forms/OFormattedFieldWrapper/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/forms/OFormsCollection/forms_OFormsCollection.xba97
-rw-r--r--qadevOOo/tests/basic/mod/forms/OFormsCollection/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/forms/OGridControlModel/forms_OGridControlModel.xba123
-rw-r--r--qadevOOo/tests/basic/mod/forms/OGridControlModel/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/forms/OGroupBoxControl/forms_OGroupBoxControl.xba104
-rw-r--r--qadevOOo/tests/basic/mod/forms/OGroupBoxControl/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/forms/OGroupBoxModel/forms_OGroupBoxModel.xba75
-rw-r--r--qadevOOo/tests/basic/mod/forms/OGroupBoxModel/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/forms/OHiddenModel/forms_OHiddenModel.xba101
-rw-r--r--qadevOOo/tests/basic/mod/forms/OHiddenModel/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/forms/OImageButtonControl/forms_OImageButtonControl.xba105
-rw-r--r--qadevOOo/tests/basic/mod/forms/OImageButtonControl/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/forms/OImageButtonModel/forms_OImageButtonModel.xba74
-rw-r--r--qadevOOo/tests/basic/mod/forms/OImageButtonModel/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/forms/OImageControlControl/forms_OImageControlControl.xba108
-rw-r--r--qadevOOo/tests/basic/mod/forms/OImageControlControl/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/forms/OImageControlModel/forms_OImageControlModel.xba75
-rw-r--r--qadevOOo/tests/basic/mod/forms/OImageControlModel/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/forms/OListBoxControl/forms_OListBoxControl.xba121
-rw-r--r--qadevOOo/tests/basic/mod/forms/OListBoxControl/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/forms/OListBoxModel/forms_OListBoxModel.xba158
-rw-r--r--qadevOOo/tests/basic/mod/forms/OListBoxModel/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/forms/ONumericControl/forms_ONumericControl.xba106
-rw-r--r--qadevOOo/tests/basic/mod/forms/ONumericControl/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/forms/ONumericModel/forms_ONumericModel.xba127
-rw-r--r--qadevOOo/tests/basic/mod/forms/ONumericModel/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/forms/OPatternControl/forms_OPatternControl.xba104
-rw-r--r--qadevOOo/tests/basic/mod/forms/OPatternControl/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/forms/OPatternModel/forms_OPatternModel.xba128
-rw-r--r--qadevOOo/tests/basic/mod/forms/OPatternModel/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/forms/ORadioButtonControl/forms_ORadioButtonControl.xba105
-rw-r--r--qadevOOo/tests/basic/mod/forms/ORadioButtonControl/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/forms/ORadioButtonModel/forms_ORadioButtonModel.xba132
-rw-r--r--qadevOOo/tests/basic/mod/forms/ORadioButtonModel/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/forms/OTimeControl/forms_OTimeControl.xba106
-rw-r--r--qadevOOo/tests/basic/mod/forms/OTimeControl/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/forms/OTimeModel/forms_OTimeModel.xba182
-rw-r--r--qadevOOo/tests/basic/mod/forms/OTimeModel/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/fps/FilePicker/fps_FilePicker.xba80
-rw-r--r--qadevOOo/tests/basic/mod/fps/FilePicker/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/ftransl/DataFormatTranslator/ftransl_DataFormatTranslator.xba53
-rw-r--r--qadevOOo/tests/basic/mod/ftransl/DataFormatTranslator/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/fwk/Desktop/fwk_Desktop.xba66
-rw-r--r--qadevOOo/tests/basic/mod/fwk/Desktop/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/fwk/DispatchRecorder/fwk_DispatchRecorder.xba76
-rw-r--r--qadevOOo/tests/basic/mod/fwk/DispatchRecorder/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/fwk/DispatchRecorderSupplier/fwk_DispatchRecorderSupplier.xba53
-rw-r--r--qadevOOo/tests/basic/mod/fwk/DispatchRecorderSupplier/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/fwk/DocumentProperties/fwk_DocumentProperties.xba60
-rw-r--r--qadevOOo/tests/basic/mod/fwk/DocumentProperties/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/fwk/Frame/fwk_Frame.xba64
-rw-r--r--qadevOOo/tests/basic/mod/fwk/Frame/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/fwk/JobHandler/fwk_JobHandler.xba59
-rw-r--r--qadevOOo/tests/basic/mod/fwk/JobHandler/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/fwl/FilterFactory/fwl_FilterFactory.xba94
-rw-r--r--qadevOOo/tests/basic/mod/fwl/FilterFactory/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/fwl/FrameLoaderFactory/fwl_FrameLoaderFactory.xba65
-rw-r--r--qadevOOo/tests/basic/mod/fwl/FrameLoaderFactory/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/fwl/PathSettings/fwl_PathSettings.xba55
-rw-r--r--qadevOOo/tests/basic/mod/fwl/PathSettings/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/fwl/TypeDetection/fwl_TypeDetection.xba55
-rw-r--r--qadevOOo/tests/basic/mod/fwl/TypeDetection/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/i18n/BreakIterator/i18n_BreakIterator.xba72
-rw-r--r--qadevOOo/tests/basic/mod/i18n/BreakIterator/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/i18n/CalendarImpl/i18n_CalendarImpl.xba55
-rw-r--r--qadevOOo/tests/basic/mod/i18n/CalendarImpl/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/i18n/ChapterCollator/i18n_ChapterCollator.xba70
-rw-r--r--qadevOOo/tests/basic/mod/i18n/ChapterCollator/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/i18n/CharacterClassification/i18n_CharacterClassification.xba56
-rw-r--r--qadevOOo/tests/basic/mod/i18n/CharacterClassification/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/i18n/Collator/i18n_Collator.xba70
-rw-r--r--qadevOOo/tests/basic/mod/i18n/Collator/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/i18n/IndexEntrySupplier/i18n_IndexEntrySupplier.xba71
-rw-r--r--qadevOOo/tests/basic/mod/i18n/IndexEntrySupplier/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/i18n/LocaleData/i18n_LocaleData.xba55
-rw-r--r--qadevOOo/tests/basic/mod/i18n/LocaleData/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/i18n/NumberFormatCodeMapper/i18n_NumberFormatCodeMapper.xba56
-rw-r--r--qadevOOo/tests/basic/mod/i18n/NumberFormatCodeMapper/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/i18n/TextSearch/i18n_TextSearch.xba59
-rw-r--r--qadevOOo/tests/basic/mod/i18n/TextSearch/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/i18n/Transliteration/i18n_Transliteration.xba71
-rw-r--r--qadevOOo/tests/basic/mod/i18n/Transliteration/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/implreg.uno/ImplementationRegistration/implreg_uno_ImplementationRegistration.xba53
-rw-r--r--qadevOOo/tests/basic/mod/implreg.uno/ImplementationRegistration/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/impreg/ImplementationRegistration/impreg_ImplementationRegistration.xba53
-rw-r--r--qadevOOo/tests/basic/mod/impreg/ImplementationRegistration/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/insp/Introspection/insp_Introspection.xba53
-rw-r--r--qadevOOo/tests/basic/mod/insp/Introspection/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/introspection.uno/Introspection/introspection_uno_Introspection.xba53
-rw-r--r--qadevOOo/tests/basic/mod/introspection.uno/Introspection/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/inv/Invocation/inv_Invocation.xba66
-rw-r--r--qadevOOo/tests/basic/mod/inv/Invocation/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/invadp/InvocationAdapterFactory/invadp_InvocationAdapterFactory.xba56
-rw-r--r--qadevOOo/tests/basic/mod/invadp/InvocationAdapterFactory/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/invocadapt.uno/InvocationAdapterFactory/invocadapt_uno_InvocationAdapterFactory.xba56
-rw-r--r--qadevOOo/tests/basic/mod/invocadapt.uno/InvocationAdapterFactory/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/invocation.uno/Invocation/invocation_uno_Invocation.xba66
-rw-r--r--qadevOOo/tests/basic/mod/invocation.uno/Invocation/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/javaloader.uno/JavaComponentLoader/javaloader_uno_JavaComponentLoader.xba59
-rw-r--r--qadevOOo/tests/basic/mod/javaloader.uno/JavaComponentLoader/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/javaloader/JavaComponentLoader/javaloader_JavaComponentLoader.xba59
-rw-r--r--qadevOOo/tests/basic/mod/javaloader/JavaComponentLoader/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/javavm.uno/JavaVirtualMachine/javavm_uno_JavaVirtualMachine.xba72
-rw-r--r--qadevOOo/tests/basic/mod/javavm.uno/JavaVirtualMachine/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/jdbc/JDBCDriver/jdbc_JDBCDriver.xba71
-rw-r--r--qadevOOo/tests/basic/mod/jdbc/JDBCDriver/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/jen/JavaVirtualMachine/jen_JavaVirtualMachine.xba72
-rw-r--r--qadevOOo/tests/basic/mod/jen/JavaVirtualMachine/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/lng/DicList/lng_DicList.xba89
-rw-r--r--qadevOOo/tests/basic/mod/lng/DicList/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/lng/LinguProps/lng_LinguProps.xba59
-rw-r--r--qadevOOo/tests/basic/mod/lng/LinguProps/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/lng/LngSvcMgr/lng_LngSvcMgr.xba59
-rw-r--r--qadevOOo/tests/basic/mod/lng/LngSvcMgr/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/lnn/Hyphenator/lnn_Hyphenator.xba62
-rw-r--r--qadevOOo/tests/basic/mod/lnn/Hyphenator/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/lnn/SpellChecker/lnn_SpellChecker.xba62
-rw-r--r--qadevOOo/tests/basic/mod/lnn/SpellChecker/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/lnn/Thesaurus/lnn_Thesaurus.xba62
-rw-r--r--qadevOOo/tests/basic/mod/lnn/Thesaurus/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/mcnttype/MimeContentTypeFactory/mcnttype_MimeContentTypeFactory.xba53
-rw-r--r--qadevOOo/tests/basic/mod/mcnttype/MimeContentTypeFactory/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/mozab/MozabDriver/mozab_MozabDriver.xba67
-rw-r--r--qadevOOo/tests/basic/mod/mozab/MozabDriver/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/namingservice.uno/NamingService/namingservice_uno_NamingService.xba60
-rw-r--r--qadevOOo/tests/basic/mod/namingservice.uno/NamingService/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/namingservice/NamingService/namingservice_NamingService.xba60
-rw-r--r--qadevOOo/tests/basic/mod/namingservice/NamingService/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/nestedreg.uno/NestedRegistry/nestedreg_uno_NestedRegistry.xba94
-rw-r--r--qadevOOo/tests/basic/mod/nestedreg.uno/NestedRegistry/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/odbc/ODBCDriver/odbc_ODBCDriver.xba67
-rw-r--r--qadevOOo/tests/basic/mod/odbc/ODBCDriver/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/proxyfac.uno/ProxyFactory/proxyfac_ProxyFactory.xba53
-rw-r--r--qadevOOo/tests/basic/mod/proxyfac.uno/ProxyFactory/proxyfac_uno_ProxyFactory.xba53
-rw-r--r--qadevOOo/tests/basic/mod/proxyfac.uno/ProxyFactory/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/proxyfac/ProxyFactory/proxyfac_ProxyFactory.xba53
-rw-r--r--qadevOOo/tests/basic/mod/proxyfac/ProxyFactory/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/proxyset/SOffice52ProxySettings/proxyset_SOffice52ProxySettings.xba53
-rw-r--r--qadevOOo/tests/basic/mod/proxyset/SOffice52ProxySettings/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/proxyset/SystemProxySettings/proxyset_SystemProxySettings.xba53
-rw-r--r--qadevOOo/tests/basic/mod/proxyset/SystemProxySettings/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/rdbtdp/RegistryTypeDescriptionProvider/rdbtdp_RegistryTypeDescriptionProvider.xba70
-rw-r--r--qadevOOo/tests/basic/mod/rdbtdp/RegistryTypeDescriptionProvider/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/regtypeprov.uno/RegistryTypeDescriptionProvider/regtypeprov_uno_RegistryTypeDescriptionProvider.xba70
-rw-r--r--qadevOOo/tests/basic/mod/regtypeprov.uno/RegistryTypeDescriptionProvider/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/remotebridge.uno/various/remotebridge_uno_various.xba95
-rw-r--r--qadevOOo/tests/basic/mod/remotebridge.uno/various/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/remotebridge/various/remotebridge_various.xba98
-rw-r--r--qadevOOo/tests/basic/mod/remotebridge/various/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/AccessibleEditableTextPara_HeaderFooter/sc_AccessibleEditableTextPara_HeaderFooter.xba99
-rw-r--r--qadevOOo/tests/basic/mod/sc/AccessibleEditableTextPara_HeaderFooter/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/AccessibleEditableTextPara_PreviewCell/sc_AccessibleEditableTextPara_PreviewCell.xba109
-rw-r--r--qadevOOo/tests/basic/mod/sc/AccessibleEditableTextPara_PreviewCell/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScAccessibleCell/sc_ScAccessibleCell.xba69
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScAccessibleCell/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScAccessibleCsvCell/sc_ScAccessibleCsvCell.xba86
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScAccessibleCsvCell/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScAccessibleCsvGrid/sc_ScAccessibleCsvGrid.xba80
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScAccessibleCsvGrid/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScAccessibleCsvRuler/sc_ScAccessibleCsvRuler.xba87
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScAccessibleCsvRuler/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScAccessibleDocument/sc_ScAccessibleDocument.xba68
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScAccessibleDocument/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScAccessibleDocumentPagePreview/sc_ScAccessibleDocumentPagePreview.xba91
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScAccessibleDocumentPagePreview/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScAccessiblePageHeader/sc_ScAccessiblePageHeader.xba100
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScAccessiblePageHeader/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScAccessiblePageHeaderArea/sc_ScAccessiblePageHeaderArea.xba86
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScAccessiblePageHeaderArea/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScAccessiblePreviewCell/sc_ScAccessiblePreviewCell.xba85
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScAccessiblePreviewCell/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScAccessiblePreviewHeaderCell/sc_ScAccessiblePreviewHeaderCell.xba87
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScAccessiblePreviewHeaderCell/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScAccessiblePreviewTable/sc_ScAccessiblePreviewTable.xba85
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScAccessiblePreviewTable/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScAccessibleSpreadsheet/sc_ScAccessibleSpreadsheet.xba79
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScAccessibleSpreadsheet/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScAnnotationObj/sc_ScAnnotationObj.xba63
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScAnnotationObj/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScAnnotationsObj/sc_ScAnnotationsObj.xba71
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScAnnotationsObj/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScAreaLinkObj/sc_ScAreaLinkObj.xba65
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScAreaLinkObj/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScAreaLinksObj/sc_ScAreaLinksObj.xba65
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScAreaLinksObj/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScAutoFormatFieldObj/sc_ScAutoFormatFieldObj.xba64
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScAutoFormatFieldObj/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScAutoFormatObj/sc_ScAutoFormatObj.xba79
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScAutoFormatObj/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScAutoFormatsObj/sc_ScAutoFormatsObj.xba76
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScAutoFormatsObj/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScCellCursorObj/sc_ScCellCursorObj.xba145
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScCellCursorObj/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScCellFieldObj/sc_ScCellFieldObj.xba86
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScCellFieldObj/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScCellFieldsObj/sc_ScCellFieldsObj.xba86
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScCellFieldsObj/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScCellFormatsEnumeration/sc_ScCellFormatsEnumeration.xba62
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScCellFormatsEnumeration/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScCellFormatsObj/sc_ScCellFormatsObj.xba60
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScCellFormatsObj/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScCellObj/sc_ScCellObj.xba68
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScCellObj/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScCellRangeObj/sc_ScCellRangeObj.xba135
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScCellRangeObj/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScCellRangesObj/sc_ScCellRangesObj.xba78
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScCellRangesObj/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScCellSearchObj/sc_ScCellSearchObj.xba57
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScCellSearchObj/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScCellTextCursor/sc_ScCellTextCursor.xba72
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScCellTextCursor/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScCellsEnumeration/sc_ScCellsEnumeration.xba71
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScCellsEnumeration/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScCellsObj/sc_ScCellsObj.xba74
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScCellsObj/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScChartObj/sc_ScChartObj.xba98
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScChartObj/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScChartsObj/sc_ScChartsObj.xba95
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScChartsObj/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScConsolidationDescriptor/sc_ScConsolidationDescriptor.xba62
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScConsolidationDescriptor/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScDDELinkObj/sc_ScDDELinkObj.xba91
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScDDELinkObj/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScDDELinksObj/sc_ScDDELinksObj.xba79
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScDDELinksObj/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScDataPilotFieldObj/sc_ScDataPilotFieldObj.xba100
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScDataPilotFieldObj/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScDataPilotFieldsObj/sc_ScDataPilotFieldsObj.xba94
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScDataPilotFieldsObj/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScDataPilotTableObj/sc_ScDataPilotTableObj.xba122
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScDataPilotTableObj/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScDataPilotTablesObj/sc_ScDataPilotTablesObj.xba91
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScDataPilotTablesObj/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScDatabaseRangeObj/sc_ScDatabaseRangeObj.xba75
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScDatabaseRangeObj/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScDatabaseRangesObj/sc_ScDatabaseRangesObj.xba74
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScDatabaseRangesObj/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScDrawPageObj/sc_ScDrawPageObj.xba103
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScDrawPageObj/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScDrawPagesObj/sc_ScDrawPagesObj.xba55
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScDrawPagesObj/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScFilterDescriptorBase/sc_ScFilterDescriptorBase.xba64
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScFilterDescriptorBase/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScFunctionListObj/sc_ScFunctionListObj.xba59
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScFunctionListObj/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScHeaderFieldObj/sc_ScHeaderFieldObj.xba86
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScHeaderFieldObj/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScHeaderFieldsObj/sc_ScHeaderFieldsObj.xba70
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScHeaderFieldsObj/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScHeaderFooterContentObj/sc_ScHeaderFooterContentObj.xba82
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScHeaderFooterContentObj/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScHeaderFooterTextCursor/sc_ScHeaderFooterTextCursor.xba77
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScHeaderFooterTextCursor/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScHeaderFooterTextObj/sc_ScHeaderFooterTextObj.xba80
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScHeaderFooterTextObj/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScIndexEnumeration_CellAnnotationsEnumeration/sc_ScIndexEnumeration_CellAnnotationsEnumeration.xba85
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScIndexEnumeration_CellAnnotationsEnumeration/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScIndexEnumeration_CellAreaLinksEnumeration/sc_ScIndexEnumeration_CellAreaLinksEnumeration.xba63
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScIndexEnumeration_CellAreaLinksEnumeration/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScIndexEnumeration_DDELinksEnumeration/sc_ScIndexEnumeration_DDELinksEnumeration.xba79
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScIndexEnumeration_DDELinksEnumeration/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScIndexEnumeration_DataPilotFieldsEnumeration/sc_ScIndexEnumeration_DataPilotFieldsEnumeration.xba90
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScIndexEnumeration_DataPilotFieldsEnumeration/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScIndexEnumeration_DataPilotTablesEnumeration/sc_ScIndexEnumeration_DataPilotTablesEnumeration.xba89
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScIndexEnumeration_DataPilotTablesEnumeration/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScIndexEnumeration_DatabaseRangesEnumeration/sc_ScIndexEnumeration_DatabaseRangesEnumeration.xba70
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScIndexEnumeration_DatabaseRangesEnumeration/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScIndexEnumeration_FunctionDescriptionEnumeration/sc_ScIndexEnumeration_FunctionDescriptionEnumeration.xba59
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScIndexEnumeration_FunctionDescriptionEnumeration/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScIndexEnumeration_LabelRangesEnumeration/sc_ScIndexEnumeration_LabelRangesEnumeration.xba78
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScIndexEnumeration_LabelRangesEnumeration/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScIndexEnumeration_NamedRangesEnumeration/sc_ScIndexEnumeration_NamedRangesEnumeration.xba70
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScIndexEnumeration_NamedRangesEnumeration/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScIndexEnumeration_ScenariosEnumeration/sc_ScIndexEnumeration_ScenariosEnumeration.xba80
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScIndexEnumeration_ScenariosEnumeration/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScIndexEnumeration_SheetCellRangesEnumeration/sc_ScIndexEnumeration_SheetCellRangesEnumeration.xba72
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScIndexEnumeration_SheetCellRangesEnumeration/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScIndexEnumeration_SheetLinksEnumeration/sc_ScIndexEnumeration_SheetLinksEnumeration.xba64
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScIndexEnumeration_SheetLinksEnumeration/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScIndexEnumeration_SpreadsheetViewPanesEnumeration/sc_ScIndexEnumeration_SpreadsheetViewPanesEnumeration.xba64
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScIndexEnumeration_SpreadsheetViewPanesEnumeration/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScIndexEnumeration_SpreadsheetsEnumeration/sc_ScIndexEnumeration_SpreadsheetsEnumeration.xba59
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScIndexEnumeration_SpreadsheetsEnumeration/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScIndexEnumeration_SubTotalFieldsEnumeration/sc_ScIndexEnumeration_SubTotalFieldsEnumeration.xba69
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScIndexEnumeration_SubTotalFieldsEnumeration/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScIndexEnumeration_TableAutoFormatEnumeration/sc_ScIndexEnumeration_TableAutoFormatEnumeration.xba59
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScIndexEnumeration_TableAutoFormatEnumeration/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScIndexEnumeration_TableChartsEnumeration/sc_ScIndexEnumeration_TableChartsEnumeration.xba95
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScIndexEnumeration_TableChartsEnumeration/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScIndexEnumeration_TableColumnsEnumeration/sc_ScIndexEnumeration_TableColumnsEnumeration.xba59
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScIndexEnumeration_TableColumnsEnumeration/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScIndexEnumeration_TableConditionalEntryEnumeration/sc_ScIndexEnumeration_TableConditionalEntryEnumeration.xba106
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScIndexEnumeration_TableConditionalEntryEnumeration/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScIndexEnumeration_TableRowsEnumeration/sc_ScIndexEnumeration_TableRowsEnumeration.xba59
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScIndexEnumeration_TableRowsEnumeration/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScIndexEnumeration_TextFieldEnumeration/sc_ScIndexEnumeration_TextFieldEnumeration.xba71
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScIndexEnumeration_TextFieldEnumeration/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScLabelRangeObj/sc_ScLabelRangeObj.xba77
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScLabelRangeObj/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScLabelRangesObj/sc_ScLabelRangesObj.xba77
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScLabelRangesObj/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScModelObj/sc_ScModelObj.xba73
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScModelObj/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScNamedRangeObj/sc_ScNamedRangeObj.xba82
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScNamedRangeObj/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScNamedRangesObj/sc_ScNamedRangesObj.xba69
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScNamedRangesObj/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScPageObj/sc_ScPageObj.xba106
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScPageObj/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScRecentFunctionsObj/sc_ScRecentFunctionsObj.xba61
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScRecentFunctionsObj/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScScenariosObj/sc_ScScenariosObj.xba75
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScScenariosObj/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScSheetLinkObj/sc_ScSheetLinkObj.xba68
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScSheetLinkObj/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScSheetLinksObj/sc_ScSheetLinksObj.xba62
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScSheetLinksObj/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScSpreadsheetSettings/sc_ScSpreadsheetSettings.xba61
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScSpreadsheetSettings/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScSpreadsheetSettingsObj/sc_ScSpreadsheetSettingsObj.xba56
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScSpreadsheetSettingsObj/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScStyleFamiliesObj/sc_ScStyleFamiliesObj.xba62
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScStyleFamiliesObj/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScStyleFamilyObj/sc_ScStyleFamilyObj.xba84
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScStyleFamilyObj/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScStyleObj/sc_ScStyleObj.xba77
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScStyleObj/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScSubTotalDescriptorBase/sc_ScSubTotalDescriptorBase.xba61
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScSubTotalDescriptorBase/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScSubTotalFieldObj/sc_ScSubTotalFieldObj.xba66
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScSubTotalFieldObj/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScTabViewObj/sc_ScTabViewObj.xba64
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScTabViewObj/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScTableColumnObj/sc_ScTableColumnObj.xba69
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScTableColumnObj/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScTableColumnsObj/sc_ScTableColumnsObj.xba62
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScTableColumnsObj/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScTableConditionalEntry/sc_ScTableConditionalEntry.xba103
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScTableConditionalEntry/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScTableConditionalFormat/sc_ScTableConditionalFormat.xba104
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScTableConditionalFormat/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScTableRowObj/sc_ScTableRowObj.xba64
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScTableRowObj/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScTableRowsObj/sc_ScTableRowsObj.xba62
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScTableRowsObj/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScTableSheetObj/sc_ScTableSheetObj.xba123
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScTableSheetObj/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScTableSheetsObj/sc_ScTableSheetsObj.xba78
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScTableSheetsObj/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScTableValidationObj/sc_ScTableValidationObj.xba60
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScTableValidationObj/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScViewPaneObj/sc_ScViewPaneObj.xba69
-rw-r--r--qadevOOo/tests/basic/mod/sc/ScViewPaneObj/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/XMLContentExporter/sc_XMLContentExporter.xba124
-rw-r--r--qadevOOo/tests/basic/mod/sc/XMLContentExporter/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/XMLContentImporter/sc_XMLContentImporter.xba92
-rw-r--r--qadevOOo/tests/basic/mod/sc/XMLContentImporter/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/XMLExporter/sc_XMLExporter.xba122
-rw-r--r--qadevOOo/tests/basic/mod/sc/XMLExporter/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/XMLImporter/sc_XMLImporter.xba92
-rw-r--r--qadevOOo/tests/basic/mod/sc/XMLImporter/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/XMLMetaExporter/sc_XMLMetaExporter.xba110
-rw-r--r--qadevOOo/tests/basic/mod/sc/XMLMetaExporter/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/XMLMetaImporter/sc_XMLMetaImporter.xba93
-rw-r--r--qadevOOo/tests/basic/mod/sc/XMLMetaImporter/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/XMLSettingsExporter/sc_XMLSettingsExporter.xba118
-rw-r--r--qadevOOo/tests/basic/mod/sc/XMLSettingsExporter/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/XMLSettingsImporter/sc_XMLSettingsImporter.xba99
-rw-r--r--qadevOOo/tests/basic/mod/sc/XMLSettingsImporter/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/XMLStylesExporter/sc_XMLStylesExporter.xba110
-rw-r--r--qadevOOo/tests/basic/mod/sc/XMLStylesExporter/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sc/XMLStylesImporter/sc_XMLStylesImporter.xba100
-rw-r--r--qadevOOo/tests/basic/mod/sc/XMLStylesImporter/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sch/AccArea/sch_AccArea.xba72
-rw-r--r--qadevOOo/tests/basic/mod/sch/AccArea/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sch/AccAxis/sch_AccAxis.xba71
-rw-r--r--qadevOOo/tests/basic/mod/sch/AccAxis/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sch/AccDataPoint/sch_AccDataPoint.xba68
-rw-r--r--qadevOOo/tests/basic/mod/sch/AccDataPoint/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sch/AccDataSeries/sch_AccDataSeries.xba67
-rw-r--r--qadevOOo/tests/basic/mod/sch/AccDataSeries/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sch/AccDiagram/sch_AccDiagram.xba67
-rw-r--r--qadevOOo/tests/basic/mod/sch/AccDiagram/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sch/AccFloor/sch_AccFloor.xba70
-rw-r--r--qadevOOo/tests/basic/mod/sch/AccFloor/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sch/AccGrid/sch_AccGrid.xba67
-rw-r--r--qadevOOo/tests/basic/mod/sch/AccGrid/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sch/AccLegend/sch_AccLegend.xba66
-rw-r--r--qadevOOo/tests/basic/mod/sch/AccLegend/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sch/AccLegendEntry/sch_AccLegendEntry.xba67
-rw-r--r--qadevOOo/tests/basic/mod/sch/AccLegendEntry/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sch/AccStatisticsObject/sch_AccStatisticsObject.xba71
-rw-r--r--qadevOOo/tests/basic/mod/sch/AccStatisticsObject/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sch/AccTitle/sch_AccTitle.xba67
-rw-r--r--qadevOOo/tests/basic/mod/sch/AccTitle/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sch/AccWall/sch_AccWall.xba66
-rw-r--r--qadevOOo/tests/basic/mod/sch/AccWall/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sch/AccessibleDocumentView/sch_AccessibleDocumentView.xba72
-rw-r--r--qadevOOo/tests/basic/mod/sch/AccessibleDocumentView/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sch/ChXChartAxis/sch_ChXChartAxis.xba57
-rw-r--r--qadevOOo/tests/basic/mod/sch/ChXChartAxis/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sch/ChXChartData/sch_ChXChartData.xba68
-rw-r--r--qadevOOo/tests/basic/mod/sch/ChXChartData/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sch/ChXChartDataArray/sch_ChXChartDataArray.xba74
-rw-r--r--qadevOOo/tests/basic/mod/sch/ChXChartDataArray/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sch/ChXChartDocument/sch_ChXChartDocument.xba89
-rw-r--r--qadevOOo/tests/basic/mod/sch/ChXChartDocument/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sch/ChXChartView/sch_ChXChartView.xba64
-rw-r--r--qadevOOo/tests/basic/mod/sch/ChXChartView/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sch/ChXDataPoint/sch_ChXDataPoint.xba72
-rw-r--r--qadevOOo/tests/basic/mod/sch/ChXDataPoint/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sch/ChXDataRow/sch_ChXDataRow.xba71
-rw-r--r--qadevOOo/tests/basic/mod/sch/ChXDataRow/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sch/ChXDiagram/sch_ChXDiagram.xba143
-rw-r--r--qadevOOo/tests/basic/mod/sch/ChXDiagram/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sch/ChartArea/sch_ChartArea.xba72
-rw-r--r--qadevOOo/tests/basic/mod/sch/ChartArea/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sch/ChartGrid/sch_ChartGrid.xba58
-rw-r--r--qadevOOo/tests/basic/mod/sch/ChartGrid/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sch/ChartLegend/sch_ChartLegend.xba83
-rw-r--r--qadevOOo/tests/basic/mod/sch/ChartLegend/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sch/ChartLine/sch_ChartLine.xba58
-rw-r--r--qadevOOo/tests/basic/mod/sch/ChartLine/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sch/ChartTitle/sch_ChartTitle.xba92
-rw-r--r--qadevOOo/tests/basic/mod/sch/ChartTitle/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sd/AccessibleDrawDocumentView/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sd/AccessibleDrawDocumentView/sd_AccessibleDrawDocumentView.xba82
-rw-r--r--qadevOOo/tests/basic/mod/sd/AccessibleOutlineView/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sd/AccessibleOutlineView/sd_AccessibleOutlineView.xba136
-rw-r--r--qadevOOo/tests/basic/mod/sd/AccessibleSlideView/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sd/AccessibleSlideView/sd_AccessibleSlideView.xba113
-rw-r--r--qadevOOo/tests/basic/mod/sd/SdDocLinkTargets/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sd/SdDocLinkTargets/sd_SdDocLinkTargets.xba54
-rw-r--r--qadevOOo/tests/basic/mod/sd/SdDrawPage/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sd/SdDrawPage/sd_SdDrawPage.xba107
-rw-r--r--qadevOOo/tests/basic/mod/sd/SdDrawPagesAccess/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sd/SdDrawPagesAccess/sd_SdDrawPagesAccess.xba61
-rw-r--r--qadevOOo/tests/basic/mod/sd/SdGenericDrawPage/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sd/SdGenericDrawPage/sd_SdGenericDrawPage.xba109
-rw-r--r--qadevOOo/tests/basic/mod/sd/SdLayer/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sd/SdLayer/sd_SdLayer.xba58
-rw-r--r--qadevOOo/tests/basic/mod/sd/SdLayerManager/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sd/SdLayerManager/sd_SdLayerManager.xba59
-rw-r--r--qadevOOo/tests/basic/mod/sd/SdMasterPage/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sd/SdMasterPage/sd_SdMasterPage.xba110
-rw-r--r--qadevOOo/tests/basic/mod/sd/SdMasterPagesAccess/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sd/SdMasterPagesAccess/sd_SdMasterPagesAccess.xba58
-rw-r--r--qadevOOo/tests/basic/mod/sd/SdPageLinkTargets/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sd/SdPageLinkTargets/sd_SdPageLinkTargets.xba79
-rw-r--r--qadevOOo/tests/basic/mod/sd/SdUnoDrawView/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sd/SdUnoDrawView/sd_SdUnoDrawView.xba123
-rw-r--r--qadevOOo/tests/basic/mod/sd/SdUnoOutlineView/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sd/SdUnoOutlineView/sd_SdUnoOutlineView.xba130
-rw-r--r--qadevOOo/tests/basic/mod/sd/SdUnoPresView/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sd/SdUnoPresView/sd_SdUnoPresView.xba137
-rw-r--r--qadevOOo/tests/basic/mod/sd/SdXCustomPresentation/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sd/SdXCustomPresentation/sd_SdXCustomPresentation.xba84
-rw-r--r--qadevOOo/tests/basic/mod/sd/SdXCustomPresentationAccess/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sd/SdXCustomPresentationAccess/sd_SdXCustomPresentationAccess.xba77
-rw-r--r--qadevOOo/tests/basic/mod/sd/SdXImpressDocument/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sd/SdXImpressDocument/sd_SdXImpressDocument.xba100
-rw-r--r--qadevOOo/tests/basic/mod/sd/SdXPresentation/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sd/SdXPresentation/sd_SdXPresentation.xba63
-rw-r--r--qadevOOo/tests/basic/mod/sd/SdXShape/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sd/SdXShape/sd_SdXShape.xba98
-rw-r--r--qadevOOo/tests/basic/mod/servicemgr.uno/OServiceManager/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/servicemgr.uno/OServiceManager/servicemgr_uno_OServiceManager.xba79
-rw-r--r--qadevOOo/tests/basic/mod/sfx/DocumentTemplates/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sfx/DocumentTemplates/sfx_DocumentTemplates.xba64
-rw-r--r--qadevOOo/tests/basic/mod/sfx/FrameLoader/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sfx/FrameLoader/sfx_FrameLoader.xba72
-rw-r--r--qadevOOo/tests/basic/mod/sfx/SfxMacroLoader/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sfx/SfxMacroLoader/sfx_SfxMacroLoader.xba62
-rw-r--r--qadevOOo/tests/basic/mod/sfx/StandaloneDocumentInfo/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sfx/StandaloneDocumentInfo/sfx_StandaloneDocumentInfo.xba77
-rw-r--r--qadevOOo/tests/basic/mod/shlibloader.uno/DLLComponentLoader/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/shlibloader.uno/DLLComponentLoader/shlibloader_uno_DLLComponentLoader.xba59
-rw-r--r--qadevOOo/tests/basic/mod/simplereg.uno/SimpleRegistry/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/simplereg.uno/SimpleRegistry/simplereg_uno_SimpleRegistry.xba53
-rw-r--r--qadevOOo/tests/basic/mod/simreg/SimpleRegistry/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/simreg/SimpleRegistry/simreg_SimpleRegistry.xba53
-rw-r--r--qadevOOo/tests/basic/mod/sm/SmEditAccessible/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sm/SmEditAccessible/sm_SmEditAccessible.xba78
-rw-r--r--qadevOOo/tests/basic/mod/sm/SmGraphicAccessible/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sm/SmGraphicAccessible/sm_SmGraphicAccessible.xba79
-rw-r--r--qadevOOo/tests/basic/mod/sm/SmModel/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sm/SmModel/sm_SmModel.xba54
-rw-r--r--qadevOOo/tests/basic/mod/sm/XMLExporter/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sm/XMLExporter/sm_XMLExporter.xba109
-rw-r--r--qadevOOo/tests/basic/mod/sm/XMLImporter/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sm/XMLImporter/sm_XMLImporter.xba85
-rw-r--r--qadevOOo/tests/basic/mod/sm/XMLMetaExporter/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sm/XMLMetaExporter/sm_XMLMetaExporter.xba111
-rw-r--r--qadevOOo/tests/basic/mod/sm/XMLMetaImporter/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sm/XMLMetaImporter/sm_XMLMetaImporter.xba113
-rw-r--r--qadevOOo/tests/basic/mod/sm/XMLSettingsExporter/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sm/XMLSettingsExporter/sm_XMLSettingsExporter.xba107
-rw-r--r--qadevOOo/tests/basic/mod/sm/XMLSettingsImporter/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sm/XMLSettingsImporter/sm_XMLSettingsImporter.xba98
-rw-r--r--qadevOOo/tests/basic/mod/smgr/OServiceManager/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/smgr/OServiceManager/smgr_OServiceManager.xba79
-rw-r--r--qadevOOo/tests/basic/mod/smplmail/SimpleSystemMail/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/smplmail/SimpleSystemMail/smplmail_SimpleSystemMail.xba62
-rw-r--r--qadevOOo/tests/basic/mod/srtrs/SortedDynamicResultSetFactory/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/srtrs/SortedDynamicResultSetFactory/srtrs_SortedDynamicResultSetFactory.xba56
-rw-r--r--qadevOOo/tests/basic/mod/stm/DataInputStream/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/stm/DataInputStream/stm_DataInputStream.xba131
-rw-r--r--qadevOOo/tests/basic/mod/stm/DataOutputStream/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/stm/DataOutputStream/stm_DataOutputStream.xba115
-rw-r--r--qadevOOo/tests/basic/mod/stm/MarkableInputStream/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/stm/MarkableInputStream/stm_MarkableInputStream.xba125
-rw-r--r--qadevOOo/tests/basic/mod/stm/MarkableOutputStream/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/stm/MarkableOutputStream/stm_MarkableOutputStream.xba127
-rw-r--r--qadevOOo/tests/basic/mod/stm/ObjectInputStream/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/stm/ObjectInputStream/stm_ObjectInputStream.xba109
-rw-r--r--qadevOOo/tests/basic/mod/stm/ObjectOutputStream/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/stm/ObjectOutputStream/stm_ObjectOutputStream.xba104
-rw-r--r--qadevOOo/tests/basic/mod/stm/Pipe/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/stm/Pipe/stm_Pipe.xba81
-rw-r--r--qadevOOo/tests/basic/mod/stm/Pump/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/stm/Pump/stm_Pump.xba92
-rw-r--r--qadevOOo/tests/basic/mod/streams.uno/DataInputStream/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/streams.uno/DataInputStream/streams_uno_DataInputStream.xba131
-rw-r--r--qadevOOo/tests/basic/mod/streams.uno/DataOutputStream/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/streams.uno/DataOutputStream/streams_uno_DataOutputStream.xba115
-rw-r--r--qadevOOo/tests/basic/mod/streams.uno/MarkableInputStream/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/streams.uno/MarkableInputStream/streams_uno_MarkableInputStream.xba125
-rw-r--r--qadevOOo/tests/basic/mod/streams.uno/MarkableOutputStream/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/streams.uno/MarkableOutputStream/streams_uno_MarkableOutputStream.xba127
-rw-r--r--qadevOOo/tests/basic/mod/streams.uno/ObjectInputStream/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/streams.uno/ObjectInputStream/streams_uno_ObjectInputStream.xba109
-rw-r--r--qadevOOo/tests/basic/mod/streams.uno/ObjectOutputStream/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/streams.uno/ObjectOutputStream/streams_uno_ObjectOutputStream.xba104
-rw-r--r--qadevOOo/tests/basic/mod/streams.uno/Pipe/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/streams.uno/Pipe/streams_uno_Pipe.xba81
-rw-r--r--qadevOOo/tests/basic/mod/streams.uno/Pump/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/streams.uno/Pump/streams_uno_Pump.xba92
-rw-r--r--qadevOOo/tests/basic/mod/svtools/AccessibleBrowseBox/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/svtools/AccessibleBrowseBox/svtools_AccessibleBrowseBox.xba115
-rw-r--r--qadevOOo/tests/basic/mod/svtools/AccessibleBrowseBoxHeaderBar/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/svtools/AccessibleBrowseBoxHeaderBar/svtools_AccessibleBrowseBoxHeaderBar.xba85
-rw-r--r--qadevOOo/tests/basic/mod/svtools/AccessibleBrowseBoxHeaderCell/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/svtools/AccessibleBrowseBoxHeaderCell/svtools_AccessibleBrowseBoxHeaderCell.xba98
-rw-r--r--qadevOOo/tests/basic/mod/svtools/AccessibleBrowseBoxTable/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/svtools/AccessibleBrowseBoxTable/svtools_AccessibleBrowseBoxTable.xba81
-rw-r--r--qadevOOo/tests/basic/mod/svtools/AccessibleBrowseBoxTableCell/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/svtools/AccessibleBrowseBoxTableCell/svtools_AccessibleBrowseBoxTableCell.xba98
-rw-r--r--qadevOOo/tests/basic/mod/svtools/AccessibleIconChoiceCtrl/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/svtools/AccessibleIconChoiceCtrl/svtools_AccessibleIconChoiceCtrl.xba98
-rw-r--r--qadevOOo/tests/basic/mod/svtools/AccessibleIconChoiceCtrlEntry/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/svtools/AccessibleIconChoiceCtrlEntry/svtools_AccessibleIconChoiceCtrlEntry.xba97
-rw-r--r--qadevOOo/tests/basic/mod/svtools/AccessibleTabBarPage/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/svtools/AccessibleTabBarPage/svtools_AccessibleTabBarPage.xba66
-rw-r--r--qadevOOo/tests/basic/mod/svtools/AccessibleTabBarPageList/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/svtools/AccessibleTabBarPageList/svtools_AccessibleTabBarPageList.xba75
-rw-r--r--qadevOOo/tests/basic/mod/svtools/AccessibleTreeListBox/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/svtools/AccessibleTreeListBox/svtools_AccessibleTreeListBox.xba87
-rw-r--r--qadevOOo/tests/basic/mod/svtools/AccessibleTreeListBoxEntry/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/svtools/AccessibleTreeListBoxEntry/svtools_AccessibleTreeListBoxEntry.xba93
-rw-r--r--qadevOOo/tests/basic/mod/svx/AccessibleControlShape/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/svx/AccessibleControlShape/svx_AccessibleControlShape.xba89
-rw-r--r--qadevOOo/tests/basic/mod/svx/AccessibleEditableTextPara/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/svx/AccessibleEditableTextPara/svx_AccessibleEditableTextPara.xba108
-rw-r--r--qadevOOo/tests/basic/mod/svx/AccessibleGraphicShape/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/svx/AccessibleGraphicShape/svx_AccessibleGraphicShape.xba83
-rw-r--r--qadevOOo/tests/basic/mod/svx/AccessibleOLEShape/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/svx/AccessibleOLEShape/svx_AccessibleOLEShape.xba83
-rw-r--r--qadevOOo/tests/basic/mod/svx/AccessiblePageShape/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/svx/AccessiblePageShape/svx_AccessiblePageShape.xba86
-rw-r--r--qadevOOo/tests/basic/mod/svx/AccessiblePresentationGraphicShape/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/svx/AccessiblePresentationGraphicShape/svx_AccessiblePresentationGraphicShape.xba86
-rw-r--r--qadevOOo/tests/basic/mod/svx/AccessiblePresentationOLEShape/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/svx/AccessiblePresentationOLEShape/svx_AccessiblePresentationOLEShape.xba85
-rw-r--r--qadevOOo/tests/basic/mod/svx/AccessiblePresentationShape/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/svx/AccessiblePresentationShape/svx_AccessiblePresentationShape.xba87
-rw-r--r--qadevOOo/tests/basic/mod/svx/AccessibleShape/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/svx/AccessibleShape/svx_AccessibleShape.xba83
-rw-r--r--qadevOOo/tests/basic/mod/svx/GraphicExporter/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/svx/GraphicExporter/svx_GraphicExporter.xba109
-rw-r--r--qadevOOo/tests/basic/mod/svx/SvxDrawPage/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/svx/SvxDrawPage/svx_SvxDrawPage.xba125
-rw-r--r--qadevOOo/tests/basic/mod/svx/SvxGraphCtrlAccessibleContext/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/svx/SvxGraphCtrlAccessibleContext/svx_SvxGraphCtrlAccessibleContext.xba102
-rw-r--r--qadevOOo/tests/basic/mod/svx/SvxGraphicObject/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/svx/SvxGraphicObject/svx_SvxGraphicObject.xba102
-rw-r--r--qadevOOo/tests/basic/mod/svx/SvxShape/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/svx/SvxShape/svx_SvxShape.xba80
-rw-r--r--qadevOOo/tests/basic/mod/svx/SvxShapeCircle/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/svx/SvxShapeCircle/svx_SvxShapeCircle.xba102
-rw-r--r--qadevOOo/tests/basic/mod/svx/SvxShapeCollection/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/svx/SvxShapeCollection/svx_SvxShapeCollection.xba68
-rw-r--r--qadevOOo/tests/basic/mod/svx/SvxShapeConnector/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/svx/SvxShapeConnector/svx_SvxShapeConnector.xba78
-rw-r--r--qadevOOo/tests/basic/mod/svx/SvxShapeControl/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/svx/SvxShapeControl/svx_SvxShapeControl.xba108
-rw-r--r--qadevOOo/tests/basic/mod/svx/SvxShapeDimensioning/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/svx/SvxShapeDimensioning/svx_SvxShapeDimensioning.xba98
-rw-r--r--qadevOOo/tests/basic/mod/svx/SvxShapeGroup/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/svx/SvxShapeGroup/svx_SvxShapeGroup.xba102
-rw-r--r--qadevOOo/tests/basic/mod/svx/SvxShapePolyPolygon/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/svx/SvxShapePolyPolygon/svx_SvxShapePolyPolygon.xba107
-rw-r--r--qadevOOo/tests/basic/mod/svx/SvxShapePolyPolygonBezier/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/svx/SvxShapePolyPolygonBezier/svx_SvxShapePolyPolygonBezier.xba121
-rw-r--r--qadevOOo/tests/basic/mod/svx/SvxUnoNumberingRules/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/svx/SvxUnoNumberingRules/svx_SvxUnoNumberingRules.xba58
-rw-r--r--qadevOOo/tests/basic/mod/svx/SvxUnoText/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/svx/SvxUnoText/svx_SvxUnoText.xba91
-rw-r--r--qadevOOo/tests/basic/mod/svx/SvxUnoTextContent/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/svx/SvxUnoTextContent/svx_SvxUnoTextContent.xba90
-rw-r--r--qadevOOo/tests/basic/mod/svx/SvxUnoTextContentEnum/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/svx/SvxUnoTextContentEnum/svx_SvxUnoTextContentEnum.xba81
-rw-r--r--qadevOOo/tests/basic/mod/svx/SvxUnoTextCursor/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/svx/SvxUnoTextCursor/svx_SvxUnoTextCursor.xba85
-rw-r--r--qadevOOo/tests/basic/mod/svx/SvxUnoTextField/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/svx/SvxUnoTextField/svx_SvxUnoTextField.xba94
-rw-r--r--qadevOOo/tests/basic/mod/svx/SvxUnoTextRange/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/svx/SvxUnoTextRange/svx_SvxUnoTextRange.xba80
-rw-r--r--qadevOOo/tests/basic/mod/svx/SvxUnoTextRangeEnumeration/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/svx/SvxUnoTextRangeEnumeration/svx_SvxUnoTextRangeEnumeration.xba81
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwAccessibleDocumentPageView/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwAccessibleDocumentPageView/sw_SwAccessibleDocumentPageView.xba110
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwAccessibleDocumentView/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwAccessibleDocumentView/sw_SwAccessibleDocumentView.xba76
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwAccessibleEndnoteView/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwAccessibleEndnoteView/sw_SwAccessibleEndnoteView.xba86
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwAccessibleFooterView/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwAccessibleFooterView/sw_SwAccessibleFooterView.xba76
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwAccessibleFootnoteView/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwAccessibleFootnoteView/sw_SwAccessibleFootnoteView.xba86
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwAccessibleHeaderView/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwAccessibleHeaderView/sw_SwAccessibleHeaderView.xba80
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwAccessiblePageView/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwAccessiblePageView/sw_SwAccessiblePageView.xba114
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwAccessibleParagraphView/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwAccessibleParagraphView/sw_SwAccessibleParagraphView.xba85
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwAccessibleTableCellView/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwAccessibleTableCellView/sw_SwAccessibleTableCellView.xba73
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwAccessibleTableView/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwAccessibleTableView/sw_SwAccessibleTableView.xba84
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwAccessibleTextEmbeddedObject/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwAccessibleTextEmbeddedObject/sw_SwAccessibleTextEmbeddedObject.xba75
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwAccessibleTextFrameView/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwAccessibleTextFrameView/sw_SwAccessibleTextFrameView.xba91
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwAccessibleTextGraphicObject/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwAccessibleTextGraphicObject/sw_SwAccessibleTextGraphicObject.xba86
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXAutoTextContainer/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXAutoTextContainer/sw_SwXAutoTextContainer.xba59
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXAutoTextEntry/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXAutoTextEntry/sw_SwXAutoTextEntry.xba108
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXAutoTextGroup/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXAutoTextGroup/sw_SwXAutoTextGroup.xba83
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXBodyText/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXBodyText/sw_SwXBodyText.xba70
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXBookmark/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXBookmark/sw_SwXBookmark.xba104
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXBookmarks/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXBookmarks/sw_SwXBookmarks.xba92
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXCell/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXCell/sw_SwXCell.xba79
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXCellRange/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXCellRange/sw_SwXCellRange.xba77
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXChapterNumbering/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXChapterNumbering/sw_SwXChapterNumbering.xba70
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXDocumentIndex/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXDocumentIndex/sw_SwXDocumentIndex.xba107
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXDocumentIndexMark/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXDocumentIndexMark/sw_SwXDocumentIndexMark.xba82
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXDocumentIndexes/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXDocumentIndexes/sw_SwXDocumentIndexes.xba70
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXDrawPage/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXDrawPage/sw_SwXDrawPage.xba86
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXEndnoteProperties/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXEndnoteProperties/sw_SwXEndnoteProperties.xba66
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXFieldEnumeration/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXFieldEnumeration/sw_SwXFieldEnumeration.xba72
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXFieldMaster/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXFieldMaster/sw_SwXFieldMaster.xba54
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXFootnote/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXFootnote/sw_SwXFootnote.xba85
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXFootnoteProperties/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXFootnoteProperties/sw_SwXFootnoteProperties.xba64
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXFootnoteText/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXFootnoteText/sw_SwXFootnoteText.xba76
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXFootnotes/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXFootnotes/sw_SwXFootnotes.xba66
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXFrames/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXFrames/sw_SwXFrames.xba81
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXHeadFootText/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXHeadFootText/sw_SwXHeadFootText.xba87
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXLineNumberingProperties/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXLineNumberingProperties/sw_SwXLineNumberingProperties.xba66
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXMailMerge/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXMailMerge/sw_SwXMailMerge.xba155
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXModule/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXModule/sw_SwXModule.xba50
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXNumberingRules/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXNumberingRules/sw_SwXNumberingRules.xba75
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXParagraph/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXParagraph/sw_SwXParagraph.xba101
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXParagraphEnumeration/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXParagraphEnumeration/sw_SwXParagraphEnumeration.xba71
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXPrintSettings/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXPrintSettings/sw_SwXPrintSettings.xba60
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXPropertySet/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXPropertySet/sw_SwXPropertySet.xba51
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXPropertySetInfo/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXPropertySetInfo/sw_SwXPropertySetInfo.xba51
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXReferenceMark/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXReferenceMark/sw_SwXReferenceMark.xba92
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXReferenceMarks/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXReferenceMarks/sw_SwXReferenceMarks.xba85
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXShape/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXShape/sw_SwXShape.xba92
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXStyle/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXStyle/sw_SwXStyle.xba104
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXStyleFamilies/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXStyleFamilies/sw_SwXStyleFamilies.xba57
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXStyleFamily/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXStyleFamily/sw_SwXStyleFamily.xba78
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXTableCellText/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXTableCellText/sw_SwXTableCellText.xba75
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXTableColumns/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXTableColumns/sw_SwXTableColumns.xba84
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXTableRows/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXTableRows/sw_SwXTableRows.xba87
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXTextColumns/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXTextColumns/sw_SwXTextColumns.xba70
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXTextCursor/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXTextCursor/sw_SwXTextCursor.xba67
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXTextDefaults/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXTextDefaults/sw_SwXTextDefaults.xba75
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXTextDocument/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXTextDocument/sw_SwXTextDocument.xba98
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXTextEmbeddedObject/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXTextEmbeddedObject/sw_SwXTextEmbeddedObject.xba68
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXTextEmbeddedObjects/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXTextEmbeddedObjects/sw_SwXTextEmbeddedObjects.xba54
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXTextField/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXTextField/sw_SwXTextField.xba93
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXTextFieldMasters/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXTextFieldMasters/sw_SwXTextFieldMasters.xba76
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXTextFieldTypes/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXTextFieldTypes/sw_SwXTextFieldTypes.xba71
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXTextFrame/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXTextFrame/sw_SwXTextFrame.xba120
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXTextFrameText/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXTextFrameText/sw_SwXTextFrameText.xba83
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXTextGraphicObject/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXTextGraphicObject/sw_SwXTextGraphicObject.xba89
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXTextGraphicObjects/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXTextGraphicObjects/sw_SwXTextGraphicObjects.xba64
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXTextPortion/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXTextPortion/sw_SwXTextPortion.xba74
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXTextPortionEnumeration/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXTextPortionEnumeration/sw_SwXTextPortionEnumeration.xba67
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXTextRange/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXTextRange/sw_SwXTextRange.xba57
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXTextRanges/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXTextRanges/sw_SwXTextRanges.xba79
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXTextSearch/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXTextSearch/sw_SwXTextSearch.xba58
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXTextSection/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXTextSection/sw_SwXTextSection.xba103
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXTextSections/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXTextSections/sw_SwXTextSections.xba77
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXTextTable/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXTextTable/sw_SwXTextTable.xba148
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXTextTableCursor/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXTextTableCursor/sw_SwXTextTableCursor.xba64
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXTextTableRow/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXTextTableRow/sw_SwXTextTableRow.xba64
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXTextTables/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXTextTables/sw_SwXTextTables.xba77
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXTextView/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXTextView/sw_SwXTextView.xba120
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXTextViewCursor/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXTextViewCursor/sw_SwXTextViewCursor.xba67
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXViewSettings/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/SwXViewSettings/sw_SwXViewSettings.xba58
-rw-r--r--qadevOOo/tests/basic/mod/sw/XMLContentExporter/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/XMLContentExporter/sw_XMLContentExporter.xba119
-rw-r--r--qadevOOo/tests/basic/mod/sw/XMLContentImporter/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/XMLContentImporter/sw_XMLContentImporter.xba90
-rw-r--r--qadevOOo/tests/basic/mod/sw/XMLExporter/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/XMLExporter/sw_XMLExporter.xba121
-rw-r--r--qadevOOo/tests/basic/mod/sw/XMLImporter/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/XMLImporter/sw_XMLImporter.xba91
-rw-r--r--qadevOOo/tests/basic/mod/sw/XMLMetaExporter/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/XMLMetaExporter/sw_XMLMetaExporter.xba111
-rw-r--r--qadevOOo/tests/basic/mod/sw/XMLMetaImporter/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/XMLMetaImporter/sw_XMLMetaImporter.xba92
-rw-r--r--qadevOOo/tests/basic/mod/sw/XMLSettingsExporter/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/XMLSettingsExporter/sw_XMLSettingsExporter.xba113
-rw-r--r--qadevOOo/tests/basic/mod/sw/XMLSettingsImporter/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/XMLSettingsImporter/sw_XMLSettingsImporter.xba110
-rw-r--r--qadevOOo/tests/basic/mod/sw/XMLStylesExporter/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/XMLStylesExporter/sw_XMLStylesExporter.xba106
-rw-r--r--qadevOOo/tests/basic/mod/sw/XMLStylesImporter/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sw/XMLStylesImporter/sw_XMLStylesImporter.xba93
-rw-r--r--qadevOOo/tests/basic/mod/sysdtrans/SystemClipboard/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/sysdtrans/SystemClipboard/sysdtrans_SystemClipboard.xba86
-rw-r--r--qadevOOo/tests/basic/mod/syssh/SystemShellExecute/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/syssh/SystemShellExecute/syssh_SystemShellExecute.xba53
-rw-r--r--qadevOOo/tests/basic/mod/tcv/TypeConverter/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/tcv/TypeConverter/tcv_TypeConverter.xba53
-rw-r--r--qadevOOo/tests/basic/mod/tdmgr/TypeDescriptionManager/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/tdmgr/TypeDescriptionManager/tdmgr_TypeDescriptionManager.xba59
-rw-r--r--qadevOOo/tests/basic/mod/text/DefaultNumberingProvider/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/text/DefaultNumberingProvider/text_DefaultNumberingProvider.xba53
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/AccessibleButton/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/AccessibleButton/toolkit_AccessibleButton.xba90
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/AccessibleCheckBox/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/AccessibleCheckBox/toolkit_AccessibleCheckBox.xba89
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/AccessibleComboBox/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/AccessibleComboBox/toolkit_AccessibleComboBox.xba92
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/AccessibleDropDownComboBox/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/AccessibleDropDownComboBox/toolkit_AccessibleDropDownComboBox.xba65
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/AccessibleDropDownListBox/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/AccessibleDropDownListBox/toolkit_AccessibleDropDownListBox.xba70
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/AccessibleEdit/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/AccessibleEdit/toolkit_AccessibleEdit.xba111
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/AccessibleFixedText/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/AccessibleFixedText/toolkit_AccessibleFixedText.xba97
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/AccessibleList/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/AccessibleList/toolkit_AccessibleList.xba122
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/AccessibleListBox/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/AccessibleListBox/toolkit_AccessibleListBox.xba99
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/AccessibleListItem/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/AccessibleListItem/toolkit_AccessibleListItem.xba107
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/AccessibleMenu/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/AccessibleMenu/toolkit_AccessibleMenu.xba86
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/AccessibleMenuBar/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/AccessibleMenuBar/toolkit_AccessibleMenuBar.xba75
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/AccessibleMenuItem/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/AccessibleMenuItem/toolkit_AccessibleMenuItem.xba82
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/AccessibleMenuSeparator/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/AccessibleMenuSeparator/toolkit_AccessibleMenuSeparator.xba77
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/AccessibleRadioButton/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/AccessibleRadioButton/toolkit_AccessibleRadioButton.xba102
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/AccessibleScrollBar/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/AccessibleScrollBar/toolkit_AccessibleScrollBar.xba78
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/AccessibleStatusBar/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/AccessibleStatusBar/toolkit_AccessibleStatusBar.xba73
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/AccessibleStatusBarItem/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/AccessibleStatusBarItem/toolkit_AccessibleStatusBarItem.xba91
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/AccessibleTabControl/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/AccessibleTabControl/toolkit_AccessibleTabControl.xba101
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/AccessibleTabPage/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/AccessibleTabPage/toolkit_AccessibleTabPage.xba106
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/AccessibleToolBox/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/AccessibleToolBox/toolkit_AccessibleToolBox.xba79
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/AccessibleToolBoxItem/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/AccessibleToolBoxItem/toolkit_AccessibleToolBoxItem.xba79
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/TabController/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/TabController/toolkit_TabController.xba75
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/TabControllerModel/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/TabControllerModel/toolkit_TabControllerModel.xba74
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/Toolkit/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/Toolkit/toolkit_Toolkit.xba65
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlButton/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlButton/toolkit_UnoControlButton.xba111
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlButtonModel/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlButtonModel/toolkit_UnoControlButtonModel.xba57
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlCheckBox/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlCheckBox/toolkit_UnoControlCheckBox.xba119
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlCheckBoxModel/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlCheckBoxModel/toolkit_UnoControlCheckBoxModel.xba56
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlComboBox/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlComboBox/toolkit_UnoControlComboBox.xba103
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlComboBoxModel/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlComboBoxModel/toolkit_UnoControlComboBoxModel.xba56
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlContainer/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlContainer/toolkit_UnoControlContainer.xba113
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlContainerModel/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlContainerModel/toolkit_UnoControlContainerModel.xba57
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlCurrencyField/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlCurrencyField/toolkit_UnoControlCurrencyField.xba105
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlCurrencyFieldModel/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlCurrencyFieldModel/toolkit_UnoControlCurrencyFieldModel.xba57
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlDateField/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlDateField/toolkit_UnoControlDateField.xba102
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlDateFieldModel/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlDateFieldModel/toolkit_UnoControlDateFieldModel.xba57
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlDialog/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlDialog/toolkit_UnoControlDialog.xba108
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlDialogModel/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlDialogModel/toolkit_UnoControlDialogModel.xba57
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlEdit/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlEdit/toolkit_UnoControlEdit.xba101
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlEditModel/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlEditModel/toolkit_UnoControlEditModel.xba57
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlFileControl/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlFileControl/toolkit_UnoControlFileControl.xba103
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlFileControlModel/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlFileControlModel/toolkit_UnoControlFileControlModel.xba57
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlFixedLineModel/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlFixedLineModel/toolkit_UnoControlFixedLineModel.xba57
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlFixedText/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlFixedText/toolkit_UnoControlFixedText.xba102
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlFixedTextModel/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlFixedTextModel/toolkit_UnoControlFixedTextModel.xba57
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlFormattedField/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlFormattedField/toolkit_UnoControlFormattedField.xba100
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlFormattedFieldModel/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlFormattedFieldModel/toolkit_UnoControlFormattedFieldModel.xba57
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlGroupBox/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlGroupBox/toolkit_UnoControlGroupBox.xba102
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlGroupBoxModel/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlGroupBoxModel/toolkit_UnoControlGroupBoxModel.xba57
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlImageControl/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlImageControl/toolkit_UnoControlImageControl.xba99
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlImageControlModel/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlImageControlModel/toolkit_UnoControlImageControlModel.xba57
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlListBox/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlListBox/toolkit_UnoControlListBox.xba120
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlListBoxModel/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlListBoxModel/toolkit_UnoControlListBoxModel.xba57
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlNumericField/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlNumericField/toolkit_UnoControlNumericField.xba101
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlNumericFieldModel/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlNumericFieldModel/toolkit_UnoControlNumericFieldModel.xba57
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlPatternField/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlPatternField/toolkit_UnoControlPatternField.xba101
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlPatternFieldModel/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlPatternFieldModel/toolkit_UnoControlPatternFieldModel.xba57
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlProgressBarModel/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlProgressBarModel/toolkit_UnoControlProgressBarModel.xba57
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlRadioButton/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlRadioButton/toolkit_UnoControlRadioButton.xba101
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlRadioButtonModel/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlRadioButtonModel/toolkit_UnoControlRadioButtonModel.xba57
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlScrollBarModel/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlScrollBarModel/toolkit_UnoControlScrollBarModel.xba57
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlTimeField/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlTimeField/toolkit_UnoControlTimeField.xba101
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlTimeFieldModel/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/toolkit/UnoControlTimeFieldModel/toolkit_UnoControlTimeFieldModel.xba59
-rw-r--r--qadevOOo/tests/basic/mod/typeconverter.uno/TypeConverter/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/typeconverter.uno/TypeConverter/typeconverter_uno_TypeConverter.xba53
-rw-r--r--qadevOOo/tests/basic/mod/typemgr.uno/TypeDescriptionManager/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/typemgr.uno/TypeDescriptionManager/typemgr_uno_TypeDescriptionManager.xba59
-rw-r--r--qadevOOo/tests/basic/mod/ucb/UcbContentProviderProxyFactory/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/ucb/UcbContentProviderProxyFactory/ucb_UcbContentProviderProxyFactory.xba53
-rw-r--r--qadevOOo/tests/basic/mod/ucb/UcbPropertiesManager/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/ucb/UcbPropertiesManager/ucb_UcbPropertiesManager.xba53
-rw-r--r--qadevOOo/tests/basic/mod/ucb/UcbStore/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/ucb/UcbStore/ucb_UcbStore.xba53
-rw-r--r--qadevOOo/tests/basic/mod/ucb/UniversalContentBroker/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/ucb/UniversalContentBroker/ucb_UniversalContentBroker.xba80
-rw-r--r--qadevOOo/tests/basic/mod/ucpdav/WebDAVContentProvider/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/ucpdav/WebDAVContentProvider/ucpdav_WebDAVContentProvider.xba69
-rw-r--r--qadevOOo/tests/basic/mod/ucpfile/FileProvider/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/ucpfile/FileProvider/ucpfile_FileProvider.xba73
-rw-r--r--qadevOOo/tests/basic/mod/ucphier/HierarchyContentProvider/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/ucphier/HierarchyContentProvider/ucphier_HierarchyContentProvider.xba65
-rw-r--r--qadevOOo/tests/basic/mod/ucphier/HierarchyDataSource/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/ucphier/HierarchyDataSource/ucphier_HierarchyDataSource.xba71
-rw-r--r--qadevOOo/tests/basic/mod/ucppkg/PackageContentProvider/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/ucppkg/PackageContentProvider/ucppkg_PackageContentProvider.xba65
-rw-r--r--qadevOOo/tests/basic/mod/uui/UUIInteractionHandler/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/uui/UUIInteractionHandler/uui_UUIInteractionHandler.xba53
-rw-r--r--qadevOOo/tests/basic/mod/uuresolver.uno/UnoUrlResolver/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/uuresolver.uno/UnoUrlResolver/uuresolver_uno_UnoUrlResolver.xba53
-rw-r--r--qadevOOo/tests/basic/mod/uuresolver/UnoUrlResolver/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/uuresolver/UnoUrlResolver/uuresolver_UnoUrlResolver.xba53
-rw-r--r--qadevOOo/tests/basic/mod/xmloff/Chart/XMLContentExporter/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/xmloff/Chart/XMLContentExporter/xmloff_Chart_XMLContentExporter.xba111
-rw-r--r--qadevOOo/tests/basic/mod/xmloff/Chart/XMLContentImporter/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/xmloff/Chart/XMLContentImporter/xmloff_Chart_XMLContentImporter.xba101
-rw-r--r--qadevOOo/tests/basic/mod/xmloff/Chart/XMLExporter/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/xmloff/Chart/XMLExporter/xmloff_Chart_XMLExporter.xba112
-rw-r--r--qadevOOo/tests/basic/mod/xmloff/Chart/XMLImporter/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/xmloff/Chart/XMLImporter/xmloff_Chart_XMLImporter.xba101
-rw-r--r--qadevOOo/tests/basic/mod/xmloff/Chart/XMLStylesExporter/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/xmloff/Chart/XMLStylesExporter/xmloff_Chart_XMLStylesExporter.xba99
-rw-r--r--qadevOOo/tests/basic/mod/xmloff/Chart/XMLStylesImporter/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/xmloff/Chart/XMLStylesImporter/xmloff_Chart_XMLStylesImporter.xba87
-rw-r--r--qadevOOo/tests/basic/mod/xmloff/Draw/XMLContentExporter/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/xmloff/Draw/XMLContentExporter/xmloff_Draw_XMLContentExporter.xba115
-rw-r--r--qadevOOo/tests/basic/mod/xmloff/Draw/XMLContentImporter/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/xmloff/Draw/XMLContentImporter/xmloff_Draw_XMLContentImporter.xba115
-rw-r--r--qadevOOo/tests/basic/mod/xmloff/Draw/XMLExporter/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/xmloff/Draw/XMLExporter/xmloff_Draw_XMLExporter.xba110
-rw-r--r--qadevOOo/tests/basic/mod/xmloff/Draw/XMLImporter/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/xmloff/Draw/XMLImporter/xmloff_Draw_XMLImporter.xba115
-rw-r--r--qadevOOo/tests/basic/mod/xmloff/Draw/XMLMetaExporter/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/xmloff/Draw/XMLMetaExporter/xmloff_Draw_XMLMetaExporter.xba111
-rw-r--r--qadevOOo/tests/basic/mod/xmloff/Draw/XMLMetaImporter/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/xmloff/Draw/XMLMetaImporter/xmloff_Draw_XMLMetaImporter.xba94
-rw-r--r--qadevOOo/tests/basic/mod/xmloff/Draw/XMLSettingsExporter/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/xmloff/Draw/XMLSettingsExporter/xmloff_Draw_XMLSettingsExporter.xba119
-rw-r--r--qadevOOo/tests/basic/mod/xmloff/Draw/XMLSettingsImporter/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/xmloff/Draw/XMLSettingsImporter/xmloff_Draw_XMLSettingsImporter.xba95
-rw-r--r--qadevOOo/tests/basic/mod/xmloff/Draw/XMLStylesExporter/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/xmloff/Draw/XMLStylesExporter/xmloff_Draw_XMLStylesExporter.xba116
-rw-r--r--qadevOOo/tests/basic/mod/xmloff/Draw/XMLStylesImporter/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/xmloff/Draw/XMLStylesImporter/xmloff_Draw_XMLStylesImporter.xba93
-rw-r--r--qadevOOo/tests/basic/mod/xmloff/Impress/XMLContentExporter/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/xmloff/Impress/XMLContentExporter/xmloff_Impress_XMLContentExporter.xba112
-rw-r--r--qadevOOo/tests/basic/mod/xmloff/Impress/XMLContentImporter/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/xmloff/Impress/XMLContentImporter/xmloff_Impress_XMLContentImporter.xba128
-rw-r--r--qadevOOo/tests/basic/mod/xmloff/Impress/XMLExporter/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/xmloff/Impress/XMLExporter/xmloff_Impress_XMLExporter.xba112
-rw-r--r--qadevOOo/tests/basic/mod/xmloff/Impress/XMLImporter/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/xmloff/Impress/XMLImporter/xmloff_Impress_XMLImporter.xba90
-rw-r--r--qadevOOo/tests/basic/mod/xmloff/Impress/XMLMetaExporter/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/xmloff/Impress/XMLMetaExporter/xmloff_Impress_XMLMetaExporter.xba111
-rw-r--r--qadevOOo/tests/basic/mod/xmloff/Impress/XMLMetaImporter/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/xmloff/Impress/XMLMetaImporter/xmloff_Impress_XMLMetaImporter.xba93
-rw-r--r--qadevOOo/tests/basic/mod/xmloff/Impress/XMLSettingsExporter/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/xmloff/Impress/XMLSettingsExporter/xmloff_Impress_XMLSettingsExporter.xba123
-rw-r--r--qadevOOo/tests/basic/mod/xmloff/Impress/XMLSettingsImporter/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/xmloff/Impress/XMLSettingsImporter/xmloff_Impress_XMLSettingsImporter.xba95
-rw-r--r--qadevOOo/tests/basic/mod/xmloff/Impress/XMLStylesExporter/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/xmloff/Impress/XMLStylesExporter/xmloff_Impress_XMLStylesExporter.xba113
-rw-r--r--qadevOOo/tests/basic/mod/xmloff/Impress/XMLStylesImporter/script.xlb5
-rw-r--r--qadevOOo/tests/basic/mod/xmloff/Impress/XMLStylesImporter/xmloff_Impress_XMLStylesImporter.xba95
-rw-r--r--qadevOOo/tests/java/complex/unoapi/CheckModuleAPI.java654
-rw-r--r--qadevOOo/tests/java/ifc/accessibility/_XAccessible.java57
-rw-r--r--qadevOOo/tests/java/ifc/accessibility/_XAccessibleAction.java167
-rw-r--r--qadevOOo/tests/java/ifc/accessibility/_XAccessibleComponent.java651
-rw-r--r--qadevOOo/tests/java/ifc/accessibility/_XAccessibleContext.java354
-rw-r--r--qadevOOo/tests/java/ifc/accessibility/_XAccessibleEditableText.java542
-rw-r--r--qadevOOo/tests/java/ifc/accessibility/_XAccessibleEventBroadcaster.java212
-rw-r--r--qadevOOo/tests/java/ifc/accessibility/_XAccessibleExtendedComponent.java123
-rw-r--r--qadevOOo/tests/java/ifc/accessibility/_XAccessibleImage.java74
-rw-r--r--qadevOOo/tests/java/ifc/accessibility/_XAccessibleSelection.java600
-rw-r--r--qadevOOo/tests/java/ifc/accessibility/_XAccessibleTable.java1010
-rw-r--r--qadevOOo/tests/java/ifc/accessibility/_XAccessibleText.java1195
-rw-r--r--qadevOOo/tests/java/ifc/accessibility/_XAccessibleValue.java351
-rw-r--r--qadevOOo/tests/java/ifc/awt/_UnoControlButtonModel.java122
-rw-r--r--qadevOOo/tests/java/ifc/awt/_UnoControlCheckBoxModel.java109
-rw-r--r--qadevOOo/tests/java/ifc/awt/_UnoControlComboBoxModel.java138
-rw-r--r--qadevOOo/tests/java/ifc/awt/_UnoControlContainerModel.java72
-rw-r--r--qadevOOo/tests/java/ifc/awt/_UnoControlCurrencyFieldModel.java133
-rw-r--r--qadevOOo/tests/java/ifc/awt/_UnoControlDateFieldModel.java173
-rw-r--r--qadevOOo/tests/java/ifc/awt/_UnoControlDialogElement.java35
-rw-r--r--qadevOOo/tests/java/ifc/awt/_UnoControlDialogModel.java87
-rw-r--r--qadevOOo/tests/java/ifc/awt/_UnoControlEditModel.java130
-rw-r--r--qadevOOo/tests/java/ifc/awt/_UnoControlFileControlModel.java117
-rw-r--r--qadevOOo/tests/java/ifc/awt/_UnoControlFixedLineModel.java76
-rw-r--r--qadevOOo/tests/java/ifc/awt/_UnoControlFixedTextModel.java111
-rw-r--r--qadevOOo/tests/java/ifc/awt/_UnoControlFormattedFieldModel.java251
-rw-r--r--qadevOOo/tests/java/ifc/awt/_UnoControlGroupBoxModel.java85
-rw-r--r--qadevOOo/tests/java/ifc/awt/_UnoControlImageControlModel.java109
-rw-r--r--qadevOOo/tests/java/ifc/awt/_UnoControlListBoxModel.java126
-rw-r--r--qadevOOo/tests/java/ifc/awt/_UnoControlModel.java35
-rw-r--r--qadevOOo/tests/java/ifc/awt/_UnoControlNumericFieldModel.java133
-rw-r--r--qadevOOo/tests/java/ifc/awt/_UnoControlPatternFieldModel.java116
-rw-r--r--qadevOOo/tests/java/ifc/awt/_UnoControlProgressBarModel.java90
-rw-r--r--qadevOOo/tests/java/ifc/awt/_UnoControlRadioButtonModel.java108
-rw-r--r--qadevOOo/tests/java/ifc/awt/_UnoControlScrollBarModel.java115
-rw-r--r--qadevOOo/tests/java/ifc/awt/_UnoControlSpinButtonModel.java71
-rw-r--r--qadevOOo/tests/java/ifc/awt/_UnoControlTimeFieldModel.java137
-rw-r--r--qadevOOo/tests/java/ifc/awt/_XButton.java118
-rw-r--r--qadevOOo/tests/java/ifc/awt/_XCheckBox.java150
-rw-r--r--qadevOOo/tests/java/ifc/awt/_XComboBox.java285
-rw-r--r--qadevOOo/tests/java/ifc/awt/_XControl.java222
-rw-r--r--qadevOOo/tests/java/ifc/awt/_XControlContainer.java142
-rw-r--r--qadevOOo/tests/java/ifc/awt/_XCurrencyField.java308
-rw-r--r--qadevOOo/tests/java/ifc/awt/_XDataTransferProviderAccess.java135
-rw-r--r--qadevOOo/tests/java/ifc/awt/_XDateField.java340
-rw-r--r--qadevOOo/tests/java/ifc/awt/_XDialog.java158
-rw-r--r--qadevOOo/tests/java/ifc/awt/_XFixedText.java120
-rw-r--r--qadevOOo/tests/java/ifc/awt/_XImageConsumer.java144
-rw-r--r--qadevOOo/tests/java/ifc/awt/_XImageProducer.java165
-rw-r--r--qadevOOo/tests/java/ifc/awt/_XItemListener.java119
-rw-r--r--qadevOOo/tests/java/ifc/awt/_XLayoutConstrains.java77
-rw-r--r--qadevOOo/tests/java/ifc/awt/_XListBox.java513
-rw-r--r--qadevOOo/tests/java/ifc/awt/_XMessageBoxFactory.java110
-rw-r--r--qadevOOo/tests/java/ifc/awt/_XNumericField.java311
-rw-r--r--qadevOOo/tests/java/ifc/awt/_XPatternField.java176
-rw-r--r--qadevOOo/tests/java/ifc/awt/_XRadioButton.java151
-rw-r--r--qadevOOo/tests/java/ifc/awt/_XScrollBar.java228
-rw-r--r--qadevOOo/tests/java/ifc/awt/_XSpinField.java216
-rw-r--r--qadevOOo/tests/java/ifc/awt/_XSpinValue.java220
-rw-r--r--qadevOOo/tests/java/ifc/awt/_XSystemChildFactory.java40
-rw-r--r--qadevOOo/tests/java/ifc/awt/_XTabController.java168
-rw-r--r--qadevOOo/tests/java/ifc/awt/_XTabControllerModel.java166
-rw-r--r--qadevOOo/tests/java/ifc/awt/_XTextComponent.java270
-rw-r--r--qadevOOo/tests/java/ifc/awt/_XTextLayoutConstrains.java80
-rw-r--r--qadevOOo/tests/java/ifc/awt/_XTextListener.java128
-rw-r--r--qadevOOo/tests/java/ifc/awt/_XTimeField.java295
-rw-r--r--qadevOOo/tests/java/ifc/awt/_XToolkit.java156
-rw-r--r--qadevOOo/tests/java/ifc/awt/_XTopWindow.java206
-rw-r--r--qadevOOo/tests/java/ifc/awt/_XUnoControlContainer.java181
-rw-r--r--qadevOOo/tests/java/ifc/awt/_XUserInputInterception.java539
-rw-r--r--qadevOOo/tests/java/ifc/awt/_XView.java143
-rw-r--r--qadevOOo/tests/java/ifc/awt/_XWindow.java624
-rw-r--r--qadevOOo/tests/java/ifc/awt/tree/_TreeControlModel.java37
-rw-r--r--qadevOOo/tests/java/ifc/awt/tree/_XMutableTreeDataModel.java99
-rw-r--r--qadevOOo/tests/java/ifc/awt/tree/_XMutableTreeNode.java295
-rw-r--r--qadevOOo/tests/java/ifc/awt/tree/_XTreeControl.java671
-rw-r--r--qadevOOo/tests/java/ifc/awt/tree/_XTreeDataModel.java183
-rw-r--r--qadevOOo/tests/java/ifc/awt/tree/_XTreeNode.java261
-rw-r--r--qadevOOo/tests/java/ifc/beans/_XExactName.java94
-rw-r--r--qadevOOo/tests/java/ifc/beans/_XFastPropertySet.java235
-rw-r--r--qadevOOo/tests/java/ifc/beans/_XHierarchicalPropertySet.java161
-rw-r--r--qadevOOo/tests/java/ifc/beans/_XIntrospection.java62
-rw-r--r--qadevOOo/tests/java/ifc/beans/_XMultiHierarchicalPropertySet.java157
-rw-r--r--qadevOOo/tests/java/ifc/beans/_XMultiPropertySet.java378
-rw-r--r--qadevOOo/tests/java/ifc/beans/_XMultiPropertyStates.java235
-rw-r--r--qadevOOo/tests/java/ifc/beans/_XProperty.java44
-rw-r--r--qadevOOo/tests/java/ifc/beans/_XPropertyAccess.java236
-rw-r--r--qadevOOo/tests/java/ifc/beans/_XPropertyContainer.java309
-rw-r--r--qadevOOo/tests/java/ifc/beans/_XPropertySet.java674
-rw-r--r--qadevOOo/tests/java/ifc/beans/_XPropertySetInfo.java126
-rw-r--r--qadevOOo/tests/java/ifc/beans/_XPropertyState.java274
-rw-r--r--qadevOOo/tests/java/ifc/beans/_XPropertyWithState.java113
-rw-r--r--qadevOOo/tests/java/ifc/beans/_XTolerantMultiPropertySet.java346
-rw-r--r--qadevOOo/tests/java/ifc/bridge/_XBridge.java148
-rw-r--r--qadevOOo/tests/java/ifc/bridge/_XBridgeFactory.java233
-rw-r--r--qadevOOo/tests/java/ifc/bridge/_XUnoUrlResolver.java207
-rw-r--r--qadevOOo/tests/java/ifc/chart/_BarDiagram.java159
-rw-r--r--qadevOOo/tests/java/ifc/chart/_Chart3DBarProperties.java132
-rw-r--r--qadevOOo/tests/java/ifc/chart/_ChartAxis.java196
-rw-r--r--qadevOOo/tests/java/ifc/chart/_ChartAxisXSupplier.java141
-rw-r--r--qadevOOo/tests/java/ifc/chart/_ChartAxisYSupplier.java167
-rw-r--r--qadevOOo/tests/java/ifc/chart/_ChartAxisZSupplier.java204
-rw-r--r--qadevOOo/tests/java/ifc/chart/_ChartDataPointProperties.java115
-rw-r--r--qadevOOo/tests/java/ifc/chart/_ChartDataRowProperties.java63
-rw-r--r--qadevOOo/tests/java/ifc/chart/_ChartDocument.java44
-rw-r--r--qadevOOo/tests/java/ifc/chart/_ChartLegend.java42
-rw-r--r--qadevOOo/tests/java/ifc/chart/_ChartStatistics.java74
-rw-r--r--qadevOOo/tests/java/ifc/chart/_ChartTableAddressSupplier.java67
-rw-r--r--qadevOOo/tests/java/ifc/chart/_ChartTitle.java57
-rw-r--r--qadevOOo/tests/java/ifc/chart/_ChartTwoAxisXSupplier.java108
-rw-r--r--qadevOOo/tests/java/ifc/chart/_ChartTwoAxisYSupplier.java108
-rw-r--r--qadevOOo/tests/java/ifc/chart/_Diagram.java68
-rw-r--r--qadevOOo/tests/java/ifc/chart/_Dim3DDiagram.java67
-rw-r--r--qadevOOo/tests/java/ifc/chart/_LineDiagram.java194
-rw-r--r--qadevOOo/tests/java/ifc/chart/_StackableDiagram.java89
-rw-r--r--qadevOOo/tests/java/ifc/chart/_StockDiagram.java87
-rw-r--r--qadevOOo/tests/java/ifc/chart/_X3DDisplay.java77
-rw-r--r--qadevOOo/tests/java/ifc/chart/_XAxisXSupplier.java106
-rw-r--r--qadevOOo/tests/java/ifc/chart/_XAxisYSupplier.java109
-rw-r--r--qadevOOo/tests/java/ifc/chart/_XAxisZSupplier.java109
-rw-r--r--qadevOOo/tests/java/ifc/chart/_XChartData.java184
-rw-r--r--qadevOOo/tests/java/ifc/chart/_XChartDataArray.java233
-rw-r--r--qadevOOo/tests/java/ifc/chart/_XChartDocument.java164
-rw-r--r--qadevOOo/tests/java/ifc/chart/_XDiagram.java156
-rw-r--r--qadevOOo/tests/java/ifc/chart/_XStatisticDisplay.java91
-rw-r--r--qadevOOo/tests/java/ifc/chart/_XTwoAxisXSupplier.java63
-rw-r--r--qadevOOo/tests/java/ifc/chart/_XTwoAxisYSupplier.java71
-rw-r--r--qadevOOo/tests/java/ifc/configuration/_XTemplateContainer.java50
-rw-r--r--qadevOOo/tests/java/ifc/configuration/_XTemplateInstance.java50
-rw-r--r--qadevOOo/tests/java/ifc/configuration/backend/_XBackend.java265
-rw-r--r--qadevOOo/tests/java/ifc/configuration/backend/_XBackendEntities.java181
-rw-r--r--qadevOOo/tests/java/ifc/configuration/backend/_XLayer.java90
-rw-r--r--qadevOOo/tests/java/ifc/configuration/backend/_XLayerHandler.java266
-rw-r--r--qadevOOo/tests/java/ifc/configuration/backend/_XLayerImporter.java166
-rw-r--r--qadevOOo/tests/java/ifc/configuration/backend/_XMultiLayerStratum.java316
-rw-r--r--qadevOOo/tests/java/ifc/configuration/backend/_XSchema.java263
-rw-r--r--qadevOOo/tests/java/ifc/configuration/backend/_XSchemaSupplier.java118
-rw-r--r--qadevOOo/tests/java/ifc/configuration/backend/_XSingleLayerStratum.java152
-rw-r--r--qadevOOo/tests/java/ifc/configuration/backend/_XUpdateHandler.java260
-rw-r--r--qadevOOo/tests/java/ifc/connection/_XAcceptor.java323
-rw-r--r--qadevOOo/tests/java/ifc/connection/_XConnector.java198
-rw-r--r--qadevOOo/tests/java/ifc/container/_XChild.java100
-rw-r--r--qadevOOo/tests/java/ifc/container/_XContainer.java370
-rw-r--r--qadevOOo/tests/java/ifc/container/_XContainerQuery.java162
-rw-r--r--qadevOOo/tests/java/ifc/container/_XContentEnumerationAccess.java95
-rw-r--r--qadevOOo/tests/java/ifc/container/_XElementAccess.java69
-rw-r--r--qadevOOo/tests/java/ifc/container/_XEnumeration.java137
-rw-r--r--qadevOOo/tests/java/ifc/container/_XEnumerationAccess.java57
-rw-r--r--qadevOOo/tests/java/ifc/container/_XHierarchicalName.java80
-rw-r--r--qadevOOo/tests/java/ifc/container/_XHierarchicalNameAccess.java92
-rw-r--r--qadevOOo/tests/java/ifc/container/_XIndexAccess.java158
-rw-r--r--qadevOOo/tests/java/ifc/container/_XIndexContainer.java210
-rw-r--r--qadevOOo/tests/java/ifc/container/_XIndexReplace.java211
-rw-r--r--qadevOOo/tests/java/ifc/container/_XNameAccess.java164
-rw-r--r--qadevOOo/tests/java/ifc/container/_XNameContainer.java259
-rw-r--r--qadevOOo/tests/java/ifc/container/_XNameReplace.java226
-rw-r--r--qadevOOo/tests/java/ifc/container/_XNamed.java165
-rw-r--r--qadevOOo/tests/java/ifc/container/_XSet.java150
-rw-r--r--qadevOOo/tests/java/ifc/datatransfer/_XDataFormatTranslator.java77
-rw-r--r--qadevOOo/tests/java/ifc/datatransfer/_XMimeContentTypeFactory.java95
-rw-r--r--qadevOOo/tests/java/ifc/datatransfer/clipboard/_XClipboard.java146
-rw-r--r--qadevOOo/tests/java/ifc/datatransfer/clipboard/_XClipboardEx.java55
-rw-r--r--qadevOOo/tests/java/ifc/datatransfer/clipboard/_XClipboardNotifier.java175
-rw-r--r--qadevOOo/tests/java/ifc/datatransfer/clipboard/_XFlushableClipboard.java56
-rw-r--r--qadevOOo/tests/java/ifc/document/_DocumentInfo.java151
-rw-r--r--qadevOOo/tests/java/ifc/document/_ExportFilter.java51
-rw-r--r--qadevOOo/tests/java/ifc/document/_ImportFilter.java52
-rw-r--r--qadevOOo/tests/java/ifc/document/_LinkTarget.java75
-rw-r--r--qadevOOo/tests/java/ifc/document/_OfficeDocument.java45
-rw-r--r--qadevOOo/tests/java/ifc/document/_Settings.java174
-rw-r--r--qadevOOo/tests/java/ifc/document/_XActionLockable.java109
-rw-r--r--qadevOOo/tests/java/ifc/document/_XDocumentInfo.java224
-rw-r--r--qadevOOo/tests/java/ifc/document/_XDocumentInfoSupplier.java56
-rw-r--r--qadevOOo/tests/java/ifc/document/_XDocumentInsertable.java198
-rw-r--r--qadevOOo/tests/java/ifc/document/_XEmbeddedObjectSupplier.java56
-rw-r--r--qadevOOo/tests/java/ifc/document/_XEventBroadcaster.java83
-rw-r--r--qadevOOo/tests/java/ifc/document/_XEventsSupplier.java60
-rw-r--r--qadevOOo/tests/java/ifc/document/_XExporter.java90
-rw-r--r--qadevOOo/tests/java/ifc/document/_XFilter.java183
-rw-r--r--qadevOOo/tests/java/ifc/document/_XImporter.java77
-rw-r--r--qadevOOo/tests/java/ifc/document/_XLinkTargetSupplier.java59
-rw-r--r--qadevOOo/tests/java/ifc/document/_XMimeTypeInfo.java91
-rw-r--r--qadevOOo/tests/java/ifc/document/_XStandaloneDocumentInfo.java131
-rw-r--r--qadevOOo/tests/java/ifc/document/_XTypeDetection.java123
-rw-r--r--qadevOOo/tests/java/ifc/document/_XViewDataSupplier.java123
-rw-r--r--qadevOOo/tests/java/ifc/drawing/_AreaShapeDescriptor.java115
-rw-r--r--qadevOOo/tests/java/ifc/drawing/_CaptionShape.java35
-rw-r--r--qadevOOo/tests/java/ifc/drawing/_ConnectorProperties.java48
-rw-r--r--qadevOOo/tests/java/ifc/drawing/_ConnectorShape.java78
-rw-r--r--qadevOOo/tests/java/ifc/drawing/_ConnectorShapeDescriptor.java43
-rw-r--r--qadevOOo/tests/java/ifc/drawing/_DimensioningShapeDescriptor.java48
-rw-r--r--qadevOOo/tests/java/ifc/drawing/_DrawingDocument.java45
-rw-r--r--qadevOOo/tests/java/ifc/drawing/_DrawingDocumentDrawView.java177
-rw-r--r--qadevOOo/tests/java/ifc/drawing/_EllipseShape.java46
-rw-r--r--qadevOOo/tests/java/ifc/drawing/_EllipseShapeDescriptor.java36
-rw-r--r--qadevOOo/tests/java/ifc/drawing/_FillProperties.java219
-rw-r--r--qadevOOo/tests/java/ifc/drawing/_GenericDrawPage.java96
-rw-r--r--qadevOOo/tests/java/ifc/drawing/_GenericDrawingDocument.java34
-rw-r--r--qadevOOo/tests/java/ifc/drawing/_GraphicObjectShape.java177
-rw-r--r--qadevOOo/tests/java/ifc/drawing/_GraphicObjectShapeDescriptor.java71
-rw-r--r--qadevOOo/tests/java/ifc/drawing/_Layer.java47
-rw-r--r--qadevOOo/tests/java/ifc/drawing/_LineProperties.java86
-rw-r--r--qadevOOo/tests/java/ifc/drawing/_LineShapeDescriptor.java150
-rw-r--r--qadevOOo/tests/java/ifc/drawing/_MeasureProperties.java60
-rw-r--r--qadevOOo/tests/java/ifc/drawing/_MeasureShape.java46
-rw-r--r--qadevOOo/tests/java/ifc/drawing/_PolyPolygonBezierDescriptor.java47
-rw-r--r--qadevOOo/tests/java/ifc/drawing/_PolyPolygonDescriptor.java47
-rw-r--r--qadevOOo/tests/java/ifc/drawing/_RotationDescriptor.java102
-rw-r--r--qadevOOo/tests/java/ifc/drawing/_ShadowDescriptor.java43
-rw-r--r--qadevOOo/tests/java/ifc/drawing/_ShadowProperties.java48
-rw-r--r--qadevOOo/tests/java/ifc/drawing/_Shape.java158
-rw-r--r--qadevOOo/tests/java/ifc/drawing/_ShapeDescriptor.java147
-rw-r--r--qadevOOo/tests/java/ifc/drawing/_Text.java72
-rw-r--r--qadevOOo/tests/java/ifc/drawing/_TextProperties.java67
-rw-r--r--qadevOOo/tests/java/ifc/drawing/_TextShape.java44
-rw-r--r--qadevOOo/tests/java/ifc/drawing/_TextShapeDescriptor.java36
-rw-r--r--qadevOOo/tests/java/ifc/drawing/_XConnectorShape.java147
-rw-r--r--qadevOOo/tests/java/ifc/drawing/_XControlShape.java106
-rw-r--r--qadevOOo/tests/java/ifc/drawing/_XDrawPageDuplicator.java91
-rw-r--r--qadevOOo/tests/java/ifc/drawing/_XDrawPageExpander.java74
-rw-r--r--qadevOOo/tests/java/ifc/drawing/_XDrawPageSummarizer.java74
-rw-r--r--qadevOOo/tests/java/ifc/drawing/_XDrawPageSupplier.java44
-rw-r--r--qadevOOo/tests/java/ifc/drawing/_XDrawPages.java94
-rw-r--r--qadevOOo/tests/java/ifc/drawing/_XDrawPagesSupplier.java64
-rw-r--r--qadevOOo/tests/java/ifc/drawing/_XDrawView.java113
-rw-r--r--qadevOOo/tests/java/ifc/drawing/_XGluePointsSupplier.java64
-rw-r--r--qadevOOo/tests/java/ifc/drawing/_XLayerManager.java166
-rw-r--r--qadevOOo/tests/java/ifc/drawing/_XLayerSupplier.java70
-rw-r--r--qadevOOo/tests/java/ifc/drawing/_XMasterPageTarget.java108
-rw-r--r--qadevOOo/tests/java/ifc/drawing/_XMasterPagesSupplier.java63
-rw-r--r--qadevOOo/tests/java/ifc/drawing/_XShape.java196
-rw-r--r--qadevOOo/tests/java/ifc/drawing/_XShapeBinder.java109
-rw-r--r--qadevOOo/tests/java/ifc/drawing/_XShapeCombiner.java110
-rw-r--r--qadevOOo/tests/java/ifc/drawing/_XShapeDescriptor.java97
-rw-r--r--qadevOOo/tests/java/ifc/drawing/_XShapeGroup.java70
-rw-r--r--qadevOOo/tests/java/ifc/drawing/_XShapeGrouper.java110
-rw-r--r--qadevOOo/tests/java/ifc/drawing/_XShapes.java109
-rw-r--r--qadevOOo/tests/java/ifc/form/_DataAwareControlModel.java168
-rw-r--r--qadevOOo/tests/java/ifc/form/_FormComponent.java43
-rw-r--r--qadevOOo/tests/java/ifc/form/_FormControlModel.java45
-rw-r--r--qadevOOo/tests/java/ifc/form/_XApproveActionBroadcaster.java110
-rw-r--r--qadevOOo/tests/java/ifc/form/_XBoundComponent.java58
-rw-r--r--qadevOOo/tests/java/ifc/form/_XBoundControl.java82
-rw-r--r--qadevOOo/tests/java/ifc/form/_XChangeBroadcaster.java200
-rw-r--r--qadevOOo/tests/java/ifc/form/_XConfirmDeleteBroadcaster.java75
-rwxr-xr-xqadevOOo/tests/java/ifc/form/_XDatabaseParameterBroadcaster.java100
-rw-r--r--qadevOOo/tests/java/ifc/form/_XFormController.java173
-rw-r--r--qadevOOo/tests/java/ifc/form/_XFormsSupplier.java44
-rw-r--r--qadevOOo/tests/java/ifc/form/_XGrid.java83
-rw-r--r--qadevOOo/tests/java/ifc/form/_XGridColumnFactory.java80
-rw-r--r--qadevOOo/tests/java/ifc/form/_XGridFieldDataSupplier.java68
-rw-r--r--qadevOOo/tests/java/ifc/form/_XImageProducerSupplier.java61
-rw-r--r--qadevOOo/tests/java/ifc/form/_XLoadListener.java94
-rw-r--r--qadevOOo/tests/java/ifc/form/_XLoadable.java247
-rw-r--r--qadevOOo/tests/java/ifc/form/_XReset.java194
-rw-r--r--qadevOOo/tests/java/ifc/form/_XSubmit.java191
-rw-r--r--qadevOOo/tests/java/ifc/form/_XUpdateBroadcaster.java248
-rw-r--r--qadevOOo/tests/java/ifc/form/binding/_BindableDatabaseCheckBox.java36
-rw-r--r--qadevOOo/tests/java/ifc/form/binding/_BindableDatabaseRadioButton.java36
-rw-r--r--qadevOOo/tests/java/ifc/form/binding/_XBindableValue.java122
-rw-r--r--qadevOOo/tests/java/ifc/form/component/_CheckBox.java44
-rw-r--r--qadevOOo/tests/java/ifc/form/component/_ComboBox.java43
-rw-r--r--qadevOOo/tests/java/ifc/form/component/_CommandButton.java45
-rw-r--r--qadevOOo/tests/java/ifc/form/component/_CurrencyField.java58
-rw-r--r--qadevOOo/tests/java/ifc/form/component/_DataForm.java89
-rw-r--r--qadevOOo/tests/java/ifc/form/component/_DatabaseComboBox.java46
-rw-r--r--qadevOOo/tests/java/ifc/form/component/_DatabaseForm.java93
-rw-r--r--qadevOOo/tests/java/ifc/form/component/_DatabaseFormattedField.java44
-rw-r--r--qadevOOo/tests/java/ifc/form/component/_DatabaseImageControl.java44
-rw-r--r--qadevOOo/tests/java/ifc/form/component/_DatabaseListBox.java46
-rw-r--r--qadevOOo/tests/java/ifc/form/component/_DatabasePatternField.java45
-rw-r--r--qadevOOo/tests/java/ifc/form/component/_DatabaseTextField.java45
-rw-r--r--qadevOOo/tests/java/ifc/form/component/_DateField.java55
-rw-r--r--qadevOOo/tests/java/ifc/form/component/_FileControl.java44
-rw-r--r--qadevOOo/tests/java/ifc/form/component/_FormattedField.java35
-rw-r--r--qadevOOo/tests/java/ifc/form/component/_GridControl.java101
-rw-r--r--qadevOOo/tests/java/ifc/form/component/_HTMLForm.java47
-rw-r--r--qadevOOo/tests/java/ifc/form/component/_HiddenControl.java44
-rw-r--r--qadevOOo/tests/java/ifc/form/component/_ImageButton.java46
-rw-r--r--qadevOOo/tests/java/ifc/form/component/_ListBox.java46
-rw-r--r--qadevOOo/tests/java/ifc/form/component/_NavigationToolBar.java52
-rw-r--r--qadevOOo/tests/java/ifc/form/component/_NumericField.java57
-rw-r--r--qadevOOo/tests/java/ifc/form/component/_PatternField.java44
-rw-r--r--qadevOOo/tests/java/ifc/form/component/_RadioButton.java46
-rw-r--r--qadevOOo/tests/java/ifc/form/component/_RichTextControl.java34
-rw-r--r--qadevOOo/tests/java/ifc/form/component/_ScrollBar.java34
-rw-r--r--qadevOOo/tests/java/ifc/form/component/_SpinButton.java34
-rw-r--r--qadevOOo/tests/java/ifc/form/component/_TextField.java44
-rw-r--r--qadevOOo/tests/java/ifc/form/component/_TimeField.java57
-rw-r--r--qadevOOo/tests/java/ifc/form/submission/_XSubmission.java192
-rw-r--r--qadevOOo/tests/java/ifc/form/submission/_XSubmissionSupplier.java81
-rw-r--r--qadevOOo/tests/java/ifc/form/validation/_XValidatable.java85
-rw-r--r--qadevOOo/tests/java/ifc/form/validation/_XValidatableFormComponent.java247
-rw-r--r--qadevOOo/tests/java/ifc/form/validation/_XValidityConstraintListener.java90
-rw-r--r--qadevOOo/tests/java/ifc/formula/_FormulaProperties.java99
-rw-r--r--qadevOOo/tests/java/ifc/frame/_Desktop.java54
-rw-r--r--qadevOOo/tests/java/ifc/frame/_Frame.java35
-rw-r--r--qadevOOo/tests/java/ifc/frame/_FrameLoader.java45
-rw-r--r--qadevOOo/tests/java/ifc/frame/_SynchronousFrameLoader.java45
-rw-r--r--qadevOOo/tests/java/ifc/frame/_XComponentLoader.java157
-rw-r--r--qadevOOo/tests/java/ifc/frame/_XController.java226
-rw-r--r--qadevOOo/tests/java/ifc/frame/_XDesktop.java130
-rw-r--r--qadevOOo/tests/java/ifc/frame/_XDispatch.java243
-rw-r--r--qadevOOo/tests/java/ifc/frame/_XDispatchProvider.java167
-rw-r--r--qadevOOo/tests/java/ifc/frame/_XDispatchProviderInterception.java142
-rw-r--r--qadevOOo/tests/java/ifc/frame/_XDispatchRecorder.java224
-rw-r--r--qadevOOo/tests/java/ifc/frame/_XDispatchRecorderSupplier.java245
-rw-r--r--qadevOOo/tests/java/ifc/frame/_XDocumentTemplates.java276
-rw-r--r--qadevOOo/tests/java/ifc/frame/_XFrame.java583
-rw-r--r--qadevOOo/tests/java/ifc/frame/_XFrameActionListener.java44
-rw-r--r--qadevOOo/tests/java/ifc/frame/_XFrameLoader.java210
-rw-r--r--qadevOOo/tests/java/ifc/frame/_XFramesSupplier.java211
-rw-r--r--qadevOOo/tests/java/ifc/frame/_XInplaceLayout.java48
-rw-r--r--qadevOOo/tests/java/ifc/frame/_XLayoutManager.java198
-rw-r--r--qadevOOo/tests/java/ifc/frame/_XModel.java258
-rwxr-xr-xqadevOOo/tests/java/ifc/frame/_XModuleManager.java163
-rw-r--r--qadevOOo/tests/java/ifc/frame/_XNotifyingDispatch.java131
-rw-r--r--qadevOOo/tests/java/ifc/frame/_XPopupMenuController.java139
-rw-r--r--qadevOOo/tests/java/ifc/frame/_XStatusListener.java48
-rw-r--r--qadevOOo/tests/java/ifc/frame/_XStorable.java228
-rw-r--r--qadevOOo/tests/java/ifc/frame/_XSynchronousFrameLoader.java183
-rw-r--r--qadevOOo/tests/java/ifc/frame/_XTasksSupplier.java100
-rw-r--r--qadevOOo/tests/java/ifc/frame/_XUIControllerRegistration.java63
-rw-r--r--qadevOOo/tests/java/ifc/i18n/_XBreakIterator.java681
-rw-r--r--qadevOOo/tests/java/ifc/i18n/_XCalendar.java561
-rw-r--r--qadevOOo/tests/java/ifc/i18n/_XCharacterClassification.java416
-rw-r--r--qadevOOo/tests/java/ifc/i18n/_XCollator.java430
-rw-r--r--qadevOOo/tests/java/ifc/i18n/_XExtendedCalendar.java138
-rwxr-xr-xqadevOOo/tests/java/ifc/i18n/_XExtendedIndexEntrySupplier.java336
-rw-r--r--qadevOOo/tests/java/ifc/i18n/_XExtendedTransliteration.java95
-rw-r--r--qadevOOo/tests/java/ifc/i18n/_XIndexEntrySupplier.java107
-rw-r--r--qadevOOo/tests/java/ifc/i18n/_XLocaleData.java497
-rw-r--r--qadevOOo/tests/java/ifc/i18n/_XNumberFormatCode.java163
-rw-r--r--qadevOOo/tests/java/ifc/i18n/_XTransliteration.java456
-rw-r--r--qadevOOo/tests/java/ifc/inspection/_XObjectInspector.java157
-rw-r--r--qadevOOo/tests/java/ifc/inspection/_XObjectInspectorModel.java160
-rw-r--r--qadevOOo/tests/java/ifc/io/_XActiveDataControl.java249
-rw-r--r--qadevOOo/tests/java/ifc/io/_XActiveDataSink.java111
-rw-r--r--qadevOOo/tests/java/ifc/io/_XActiveDataSource.java104
-rw-r--r--qadevOOo/tests/java/ifc/io/_XConnectable.java132
-rw-r--r--qadevOOo/tests/java/ifc/io/_XDataInputStream.java421
-rw-r--r--qadevOOo/tests/java/ifc/io/_XDataOutputStream.java282
-rw-r--r--qadevOOo/tests/java/ifc/io/_XInputStream.java247
-rw-r--r--qadevOOo/tests/java/ifc/io/_XMarkableStream.java197
-rw-r--r--qadevOOo/tests/java/ifc/io/_XObjectInputStream.java174
-rw-r--r--qadevOOo/tests/java/ifc/io/_XObjectOutputStream.java95
-rw-r--r--qadevOOo/tests/java/ifc/io/_XOutputStream.java173
-rw-r--r--qadevOOo/tests/java/ifc/io/_XPersistObject.java269
-rw-r--r--qadevOOo/tests/java/ifc/java/_XJavaThreadRegister_11.java70
-rw-r--r--qadevOOo/tests/java/ifc/java/_XJavaVM.java70
-rw-r--r--qadevOOo/tests/java/ifc/lang/_ServiceManager.java60
-rw-r--r--qadevOOo/tests/java/ifc/lang/_XComponent.java181
-rw-r--r--qadevOOo/tests/java/ifc/lang/_XEventListener.java62
-rw-r--r--qadevOOo/tests/java/ifc/lang/_XInitialization.java110
-rw-r--r--qadevOOo/tests/java/ifc/lang/_XLocalizable.java72
-rw-r--r--qadevOOo/tests/java/ifc/lang/_XMain.java72
-rw-r--r--qadevOOo/tests/java/ifc/lang/_XMultiComponentFactory.java128
-rw-r--r--qadevOOo/tests/java/ifc/lang/_XMultiServiceFactory.java197
-rw-r--r--qadevOOo/tests/java/ifc/lang/_XServiceDisplayName.java59
-rw-r--r--qadevOOo/tests/java/ifc/lang/_XServiceInfo.java97
-rw-r--r--qadevOOo/tests/java/ifc/lang/_XSingleServiceFactory.java168
-rw-r--r--qadevOOo/tests/java/ifc/lang/_XTypeProvider.java93
-rw-r--r--qadevOOo/tests/java/ifc/linguistic2/_LinguProperties.java61
-rw-r--r--qadevOOo/tests/java/ifc/linguistic2/_XAvailableLocales.java58
-rw-r--r--qadevOOo/tests/java/ifc/linguistic2/_XDictionaryList.java295
-rw-r--r--qadevOOo/tests/java/ifc/linguistic2/_XHyphenator.java111
-rw-r--r--qadevOOo/tests/java/ifc/linguistic2/_XLinguServiceEventBroadcaster.java94
-rw-r--r--qadevOOo/tests/java/ifc/linguistic2/_XLinguServiceManager.java185
-rw-r--r--qadevOOo/tests/java/ifc/linguistic2/_XSearchableDictionaryList.java73
-rw-r--r--qadevOOo/tests/java/ifc/linguistic2/_XSpellChecker.java116
-rw-r--r--qadevOOo/tests/java/ifc/linguistic2/_XSupportedLocales.java89
-rw-r--r--qadevOOo/tests/java/ifc/linguistic2/_XThesaurus.java72
-rw-r--r--qadevOOo/tests/java/ifc/loader/_XImplementationLoader.java188
-rw-r--r--qadevOOo/tests/java/ifc/presentation/_OutlineView.java36
-rw-r--r--qadevOOo/tests/java/ifc/presentation/_Presentation.java91
-rw-r--r--qadevOOo/tests/java/ifc/presentation/_PresentationView.java56
-rw-r--r--qadevOOo/tests/java/ifc/presentation/_PreviewView.java39
-rw-r--r--qadevOOo/tests/java/ifc/presentation/_SlidesView.java34
-rw-r--r--qadevOOo/tests/java/ifc/presentation/_XCustomPresentationSupplier.java58
-rw-r--r--qadevOOo/tests/java/ifc/presentation/_XPresentation.java83
-rw-r--r--qadevOOo/tests/java/ifc/presentation/_XPresentationSupplier.java58
-rwxr-xr-xqadevOOo/tests/java/ifc/qadevooo/_SelfTest.java83
-rw-r--r--qadevOOo/tests/java/ifc/reflection/_XIdlReflection.java107
-rw-r--r--qadevOOo/tests/java/ifc/reflection/_XProxyFactory.java97
-rw-r--r--qadevOOo/tests/java/ifc/reflection/_XTypeDescriptionEnumerationAccess.java95
-rw-r--r--qadevOOo/tests/java/ifc/registry/_XImplementationRegistration.java198
-rw-r--r--qadevOOo/tests/java/ifc/registry/_XSimpleRegistry.java414
-rw-r--r--qadevOOo/tests/java/ifc/script/_XEventAttacherManager.java498
-rw-r--r--qadevOOo/tests/java/ifc/script/_XInvocationAdapterFactory.java112
-rw-r--r--qadevOOo/tests/java/ifc/script/_XInvocationAdapterFactory2.java114
-rw-r--r--qadevOOo/tests/java/ifc/script/_XTypeConverter.java131
-rw-r--r--qadevOOo/tests/java/ifc/sdb/_DataAccessDescriptor.java125
-rw-r--r--qadevOOo/tests/java/ifc/sdb/_DataSource.java171
-rw-r--r--qadevOOo/tests/java/ifc/sdb/_DatasourceAdministrationDialog.java45
-rw-r--r--qadevOOo/tests/java/ifc/sdb/_ErrorMessageDialog.java69
-rw-r--r--qadevOOo/tests/java/ifc/sdb/_QueryDefinition.java55
-rw-r--r--qadevOOo/tests/java/ifc/sdb/_RowSet.java149
-rw-r--r--qadevOOo/tests/java/ifc/sdb/_SingleSelectQueryComposer.java50
-rw-r--r--qadevOOo/tests/java/ifc/sdb/_XBookmarksSupplier.java60
-rw-r--r--qadevOOo/tests/java/ifc/sdb/_XCompletedConnection.java84
-rwxr-xr-xqadevOOo/tests/java/ifc/sdb/_XCompletedExecution.java84
-rw-r--r--qadevOOo/tests/java/ifc/sdb/_XFormDocumentsSupplier.java64
-rw-r--r--qadevOOo/tests/java/ifc/sdb/_XParametersSupplier.java61
-rw-r--r--qadevOOo/tests/java/ifc/sdb/_XQueryDefinitionsSupplier.java69
-rw-r--r--qadevOOo/tests/java/ifc/sdb/_XReportDocumentsSupplier.java64
-rw-r--r--qadevOOo/tests/java/ifc/sdb/_XResultSetAccess.java69
-rw-r--r--qadevOOo/tests/java/ifc/sdb/_XRowSetApproveBroadcaster.java214
-rw-r--r--qadevOOo/tests/java/ifc/sdb/_XSQLErrorBroadcaster.java38
-rw-r--r--qadevOOo/tests/java/ifc/sdb/_XSingleSelectQueryAnalyzer.java299
-rw-r--r--qadevOOo/tests/java/ifc/sdb/_XSingleSelectQueryComposer.java396
-rw-r--r--qadevOOo/tests/java/ifc/sdbc/_ResultSet.java49
-rw-r--r--qadevOOo/tests/java/ifc/sdbc/_RowSet.java81
-rw-r--r--qadevOOo/tests/java/ifc/sdbc/_XCloseable.java94
-rw-r--r--qadevOOo/tests/java/ifc/sdbc/_XColumnLocate.java85
-rw-r--r--qadevOOo/tests/java/ifc/sdbc/_XDataSource.java114
-rw-r--r--qadevOOo/tests/java/ifc/sdbc/_XDriver.java213
-rw-r--r--qadevOOo/tests/java/ifc/sdbc/_XDriverManager.java160
-rw-r--r--qadevOOo/tests/java/ifc/sdbc/_XIsolatedConnection.java123
-rw-r--r--qadevOOo/tests/java/ifc/sdbc/_XParameters.java574
-rw-r--r--qadevOOo/tests/java/ifc/sdbc/_XResultSet.java505
-rw-r--r--qadevOOo/tests/java/ifc/sdbc/_XResultSetMetaDataSupplier.java69
-rw-r--r--qadevOOo/tests/java/ifc/sdbc/_XResultSetUpdate.java263
-rw-r--r--qadevOOo/tests/java/ifc/sdbc/_XRow.java544
-rw-r--r--qadevOOo/tests/java/ifc/sdbc/_XRowSet.java193
-rw-r--r--qadevOOo/tests/java/ifc/sdbc/_XRowUpdate.java695
-rw-r--r--qadevOOo/tests/java/ifc/sdbc/_XWarningsSupplier.java139
-rw-r--r--qadevOOo/tests/java/ifc/sdbcx/_ResultSet.java45
-rw-r--r--qadevOOo/tests/java/ifc/sdbcx/_XColumnsSupplier.java79
-rw-r--r--qadevOOo/tests/java/ifc/sdbcx/_XCreateCatalog.java50
-rw-r--r--qadevOOo/tests/java/ifc/sdbcx/_XDataDefinitionSupplier.java179
-rw-r--r--qadevOOo/tests/java/ifc/sdbcx/_XDeleteRows.java94
-rw-r--r--qadevOOo/tests/java/ifc/sdbcx/_XDropCatalog.java50
-rw-r--r--qadevOOo/tests/java/ifc/sdbcx/_XRowLocate.java234
-rw-r--r--qadevOOo/tests/java/ifc/sdbcx/_XTablesSupplier.java81
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_CellAreaLink.java48
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_DataPilotField.java169
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_DataPilotItem.java33
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_DatabaseImportDescriptor.java108
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_DatabaseRange.java48
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_DocumentSettings.java39
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_FunctionDescription.java156
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_GlobalSheetSettings.java56
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_Scenario.java41
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_Shape.java62
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_SheetCell.java38
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_SheetCellRange.java44
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_SheetCellRanges.java33
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_SheetFilterDescriptor.java52
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_SheetLink.java84
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_SheetSortDescriptor.java148
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_Spreadsheet.java63
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_SpreadsheetDocument.java50
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_SpreadsheetDocumentSettings.java150
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_SpreadsheetViewSettings.java75
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_SubTotalDescriptor.java49
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_TableAutoFormat.java49
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_TableAutoFormatField.java130
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_TableValidation.java52
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XActivationBroadcaster.java105
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XAreaLink.java159
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XAreaLinks.java107
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XArrayFormulaRange.java182
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XCalculatable.java105
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XCellAddressable.java59
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XCellFormatRangesSupplier.java92
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XCellRangeAddressable.java57
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XCellRangeData.java85
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XCellRangeFormula.java71
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XCellRangeMovement.java246
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XCellRangeReferrer.java103
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XCellRangesQuery.java307
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XCellSeries.java244
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XConsolidatable.java56
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XConsolidationDescriptor.java264
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XDDELink.java111
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XDataPilotDescriptor.java429
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XDataPilotField.java70
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XDataPilotFieldGrouping.java73
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XDataPilotTable.java105
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XDataPilotTable2.java576
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XDataPilotTables.java157
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XDataPilotTablesSupplier.java59
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XDatabaseRange.java244
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XDatabaseRanges.java121
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XDocumentAuditing.java228
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XEnhancedMouseClickBroadcaster.java163
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XFormulaQuery.java201
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XFunctionDescriptions.java131
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XGoalSeek.java112
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XHeaderFooterContent.java82
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XLabelRange.java109
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XLabelRanges.java97
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XMultipleOperation.java182
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XNamedRange.java209
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XNamedRanges.java327
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XPrintAreas.java158
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XRangeSelection.java380
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XRecentFunctions.java168
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XScenario.java100
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XScenarioEnhanced.java93
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XScenarios.java88
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XScenariosSupplier.java56
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XSheetAnnotation.java141
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XSheetAnnotationAnchor.java132
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XSheetAnnotationShapeSupplier.java43
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XSheetAnnotations.java90
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XSheetAnnotationsSupplier.java58
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XSheetAuditing.java206
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XSheetCellCursor.java403
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XSheetCellRange.java57
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XSheetCellRangeContainer.java205
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XSheetCellRanges.java89
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XSheetCondition.java158
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XSheetConditionalEntries.java137
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XSheetConditionalEntry.java75
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XSheetFilterDescriptor.java82
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XSheetFilterable.java135
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XSheetFilterableEx.java99
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XSheetLinkable.java112
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XSheetOperation.java104
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XSheetOutline.java145
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XSheetPageBreak.java93
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XSpreadsheet.java90
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XSpreadsheetDocument.java59
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XSpreadsheetView.java92
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XSpreadsheets.java184
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XSubTotalCalculatable.java125
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XSubTotalDescriptor.java77
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XSubTotalField.java115
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XUniqueCellFormatRangesSupplier.java83
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XUsedAreaCursor.java138
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XViewFreezable.java78
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XViewPane.java133
-rw-r--r--qadevOOo/tests/java/ifc/sheet/_XViewSplitable.java136
-rw-r--r--qadevOOo/tests/java/ifc/style/_CharacterProperties.java544
-rw-r--r--qadevOOo/tests/java/ifc/style/_CharacterPropertiesAsian.java77
-rw-r--r--qadevOOo/tests/java/ifc/style/_CharacterPropertiesComplex.java69
-rwxr-xr-xqadevOOo/tests/java/ifc/style/_CharacterStyle.java50
-rwxr-xr-xqadevOOo/tests/java/ifc/style/_PageProperties.java125
-rwxr-xr-xqadevOOo/tests/java/ifc/style/_PageStyle.java56
-rw-r--r--qadevOOo/tests/java/ifc/style/_ParagraphProperties.java507
-rw-r--r--qadevOOo/tests/java/ifc/style/_ParagraphPropertiesAsian.java86
-rw-r--r--qadevOOo/tests/java/ifc/style/_ParagraphPropertiesComplex.java55
-rw-r--r--qadevOOo/tests/java/ifc/style/_ParagraphStyle.java36
-rw-r--r--qadevOOo/tests/java/ifc/style/_Style.java54
-rw-r--r--qadevOOo/tests/java/ifc/style/_XStyle.java117
-rw-r--r--qadevOOo/tests/java/ifc/style/_XStyleFamiliesSupplier.java55
-rw-r--r--qadevOOo/tests/java/ifc/system/_XProxySettings.java305
-rw-r--r--qadevOOo/tests/java/ifc/system/_XSimpleMailClientSupplier.java77
-rw-r--r--qadevOOo/tests/java/ifc/system/_XSystemShellExecute.java130
-rw-r--r--qadevOOo/tests/java/ifc/table/_CellProperties.java110
-rw-r--r--qadevOOo/tests/java/ifc/table/_TableColumn.java74
-rw-r--r--qadevOOo/tests/java/ifc/table/_TableRow.java47
-rw-r--r--qadevOOo/tests/java/ifc/table/_XAutoFormattable.java134
-rw-r--r--qadevOOo/tests/java/ifc/table/_XCell.java167
-rw-r--r--qadevOOo/tests/java/ifc/table/_XCellCursor.java247
-rw-r--r--qadevOOo/tests/java/ifc/table/_XCellRange.java151
-rw-r--r--qadevOOo/tests/java/ifc/table/_XColumnRowRange.java66
-rw-r--r--qadevOOo/tests/java/ifc/table/_XTableChart.java125
-rw-r--r--qadevOOo/tests/java/ifc/table/_XTableCharts.java94
-rw-r--r--qadevOOo/tests/java/ifc/table/_XTableChartsSupplier.java60
-rw-r--r--qadevOOo/tests/java/ifc/table/_XTableColumns.java399
-rw-r--r--qadevOOo/tests/java/ifc/table/_XTableRows.java138
-rw-r--r--qadevOOo/tests/java/ifc/task/_XInteractionHandler.java151
-rw-r--r--qadevOOo/tests/java/ifc/task/_XJob.java98
-rw-r--r--qadevOOo/tests/java/ifc/task/_XJobExecutor.java79
-rw-r--r--qadevOOo/tests/java/ifc/task/_XStatusIndicatorFactory.java78
-rw-r--r--qadevOOo/tests/java/ifc/text/_BaseFrame.java124
-rw-r--r--qadevOOo/tests/java/ifc/text/_BaseFrameProperties.java45
-rw-r--r--qadevOOo/tests/java/ifc/text/_BaseIndex.java204
-rw-r--r--qadevOOo/tests/java/ifc/text/_BaseIndexMark.java45
-rw-r--r--qadevOOo/tests/java/ifc/text/_CellProperties.java155
-rw-r--r--qadevOOo/tests/java/ifc/text/_CellRange.java101
-rw-r--r--qadevOOo/tests/java/ifc/text/_Defaults.java41
-rw-r--r--qadevOOo/tests/java/ifc/text/_DocumentIndex.java54
-rw-r--r--qadevOOo/tests/java/ifc/text/_DocumentIndexMark.java47
-rw-r--r--qadevOOo/tests/java/ifc/text/_DocumentSettings.java35
-rw-r--r--qadevOOo/tests/java/ifc/text/_Footnote.java56
-rw-r--r--qadevOOo/tests/java/ifc/text/_FootnoteSettings.java104
-rw-r--r--qadevOOo/tests/java/ifc/text/_GenericTextDocument.java48
-rw-r--r--qadevOOo/tests/java/ifc/text/_LineNumberingProperties.java63
-rw-r--r--qadevOOo/tests/java/ifc/text/_MailMerge.java174
-rw-r--r--qadevOOo/tests/java/ifc/text/_NumberingLevel.java174
-rw-r--r--qadevOOo/tests/java/ifc/text/_NumberingRules.java48
-rw-r--r--qadevOOo/tests/java/ifc/text/_PrintPreviewSettings.java35
-rw-r--r--qadevOOo/tests/java/ifc/text/_PrintSettings.java56
-rw-r--r--qadevOOo/tests/java/ifc/text/_Text.java35
-rw-r--r--qadevOOo/tests/java/ifc/text/_TextColumns.java73
-rw-r--r--qadevOOo/tests/java/ifc/text/_TextContent.java46
-rw-r--r--qadevOOo/tests/java/ifc/text/_TextDocument.java48
-rw-r--r--qadevOOo/tests/java/ifc/text/_TextEmbeddedObject.java68
-rw-r--r--qadevOOo/tests/java/ifc/text/_TextFieldMaster.java46
-rw-r--r--qadevOOo/tests/java/ifc/text/_TextFrame.java69
-rw-r--r--qadevOOo/tests/java/ifc/text/_TextGraphicObject.java171
-rw-r--r--qadevOOo/tests/java/ifc/text/_TextPortion.java57
-rw-r--r--qadevOOo/tests/java/ifc/text/_TextSection.java148
-rw-r--r--qadevOOo/tests/java/ifc/text/_TextTable.java118
-rw-r--r--qadevOOo/tests/java/ifc/text/_TextTableRow.java52
-rw-r--r--qadevOOo/tests/java/ifc/text/_ViewSettings.java71
-rw-r--r--qadevOOo/tests/java/ifc/text/_XAutoTextContainer.java141
-rw-r--r--qadevOOo/tests/java/ifc/text/_XAutoTextEntry.java78
-rw-r--r--qadevOOo/tests/java/ifc/text/_XAutoTextGroup.java308
-rw-r--r--qadevOOo/tests/java/ifc/text/_XBookmarksSupplier.java64
-rw-r--r--qadevOOo/tests/java/ifc/text/_XChapterNumberingSupplier.java63
-rw-r--r--qadevOOo/tests/java/ifc/text/_XDefaultNumberingProvider.java74
-rw-r--r--qadevOOo/tests/java/ifc/text/_XDocumentIndex.java129
-rw-r--r--qadevOOo/tests/java/ifc/text/_XDocumentIndexesSupplier.java63
-rw-r--r--qadevOOo/tests/java/ifc/text/_XEndnotesSupplier.java81
-rw-r--r--qadevOOo/tests/java/ifc/text/_XFootnote.java116
-rw-r--r--qadevOOo/tests/java/ifc/text/_XFootnotesSettingsSupplier.java63
-rw-r--r--qadevOOo/tests/java/ifc/text/_XFootnotesSupplier.java82
-rw-r--r--qadevOOo/tests/java/ifc/text/_XLineNumberingProperties.java61
-rw-r--r--qadevOOo/tests/java/ifc/text/_XLineNumberingSupplier.java64
-rw-r--r--qadevOOo/tests/java/ifc/text/_XMailMergeBroadcaster.java162
-rw-r--r--qadevOOo/tests/java/ifc/text/_XPageCursor.java171
-rw-r--r--qadevOOo/tests/java/ifc/text/_XPagePrintable.java161
-rw-r--r--qadevOOo/tests/java/ifc/text/_XParagraphCursor.java140
-rw-r--r--qadevOOo/tests/java/ifc/text/_XReferenceMarksSupplier.java66
-rw-r--r--qadevOOo/tests/java/ifc/text/_XRelativeTextContentInsert.java136
-rw-r--r--qadevOOo/tests/java/ifc/text/_XSentenceCursor.java127
-rw-r--r--qadevOOo/tests/java/ifc/text/_XSimpleText.java136
-rw-r--r--qadevOOo/tests/java/ifc/text/_XText.java170
-rw-r--r--qadevOOo/tests/java/ifc/text/_XTextColumns.java114
-rw-r--r--qadevOOo/tests/java/ifc/text/_XTextContent.java117
-rw-r--r--qadevOOo/tests/java/ifc/text/_XTextCursor.java242
-rw-r--r--qadevOOo/tests/java/ifc/text/_XTextDocument.java71
-rw-r--r--qadevOOo/tests/java/ifc/text/_XTextEmbeddedObject.java60
-rw-r--r--qadevOOo/tests/java/ifc/text/_XTextEmbeddedObjectsSupplier.java61
-rw-r--r--qadevOOo/tests/java/ifc/text/_XTextField.java66
-rwxr-xr-xqadevOOo/tests/java/ifc/text/_XTextFieldsSupplier.java191
-rw-r--r--qadevOOo/tests/java/ifc/text/_XTextFrame.java68
-rw-r--r--qadevOOo/tests/java/ifc/text/_XTextFramesSupplier.java64
-rw-r--r--qadevOOo/tests/java/ifc/text/_XTextGraphicObjectsSupplier.java67
-rw-r--r--qadevOOo/tests/java/ifc/text/_XTextRange.java184
-rw-r--r--qadevOOo/tests/java/ifc/text/_XTextRangeCompare.java189
-rw-r--r--qadevOOo/tests/java/ifc/text/_XTextRangeMover.java97
-rw-r--r--qadevOOo/tests/java/ifc/text/_XTextSection.java77
-rw-r--r--qadevOOo/tests/java/ifc/text/_XTextSectionsSupplier.java75
-rw-r--r--qadevOOo/tests/java/ifc/text/_XTextTable.java181
-rw-r--r--qadevOOo/tests/java/ifc/text/_XTextTableCursor.java294
-rw-r--r--qadevOOo/tests/java/ifc/text/_XTextTablesSupplier.java66
-rw-r--r--qadevOOo/tests/java/ifc/text/_XTextViewCursorSupplier.java62
-rw-r--r--qadevOOo/tests/java/ifc/text/_XWordCursor.java132
-rw-r--r--qadevOOo/tests/java/ifc/ucb/_XCachedContentResultSetFactory.java114
-rw-r--r--qadevOOo/tests/java/ifc/ucb/_XCachedContentResultSetStubFactory.java112
-rw-r--r--qadevOOo/tests/java/ifc/ucb/_XCachedDynamicResultSetFactory.java122
-rw-r--r--qadevOOo/tests/java/ifc/ucb/_XCachedDynamicResultSetStubFactory.java192
-rw-r--r--qadevOOo/tests/java/ifc/ucb/_XCommandProcessor.java249
-rw-r--r--qadevOOo/tests/java/ifc/ucb/_XCommandProcessor2.java50
-rw-r--r--qadevOOo/tests/java/ifc/ucb/_XContentIdentifierFactory.java77
-rw-r--r--qadevOOo/tests/java/ifc/ucb/_XContentProvider.java138
-rw-r--r--qadevOOo/tests/java/ifc/ucb/_XContentProviderFactory.java60
-rw-r--r--qadevOOo/tests/java/ifc/ucb/_XContentProviderManager.java278
-rw-r--r--qadevOOo/tests/java/ifc/ucb/_XDataContainer.java136
-rw-r--r--qadevOOo/tests/java/ifc/ucb/_XFileIdentifierConverter.java100
-rw-r--r--qadevOOo/tests/java/ifc/ucb/_XParameterizedContentProvider.java93
-rw-r--r--qadevOOo/tests/java/ifc/ucb/_XPropertyMatcherFactory.java71
-rw-r--r--qadevOOo/tests/java/ifc/ucb/_XPropertySetRegistryFactory.java59
-rw-r--r--qadevOOo/tests/java/ifc/ucb/_XRemoteContentProviderAcceptor.java100
-rw-r--r--qadevOOo/tests/java/ifc/ucb/_XRemoteContentProviderActivator.java79
-rw-r--r--qadevOOo/tests/java/ifc/ucb/_XSimpleFileAccess.java542
-rw-r--r--qadevOOo/tests/java/ifc/ucb/_XSimpleFileAccess2.java92
-rw-r--r--qadevOOo/tests/java/ifc/ucb/_XSortedDynamicResultSetFactory.java162
-rw-r--r--qadevOOo/tests/java/ifc/ui/_XContextMenuInterception.java212
-rwxr-xr-xqadevOOo/tests/java/ifc/ui/_XModuleUIConfigurationManager.java81
-rwxr-xr-xqadevOOo/tests/java/ifc/ui/_XModuleUIConfigurationManagerSupplier.java64
-rwxr-xr-xqadevOOo/tests/java/ifc/ui/_XUIConfiguration.java102
-rwxr-xr-xqadevOOo/tests/java/ifc/ui/_XUIConfigurationListener.java53
-rwxr-xr-xqadevOOo/tests/java/ifc/ui/_XUIConfigurationManager.java363
-rwxr-xr-xqadevOOo/tests/java/ifc/ui/_XUIConfigurationPersistence.java83
-rwxr-xr-xqadevOOo/tests/java/ifc/ui/_XUIConfigurationStorage.java76
-rwxr-xr-xqadevOOo/tests/java/ifc/ui/_XUIElementFactory.java56
-rwxr-xr-xqadevOOo/tests/java/ifc/ui/_XUIElementFactoryRegistration.java83
-rw-r--r--qadevOOo/tests/java/ifc/ui/dialogs/_FilePicker.java36
-rw-r--r--qadevOOo/tests/java/ifc/ui/dialogs/_XControlAccess.java142
-rw-r--r--qadevOOo/tests/java/ifc/ui/dialogs/_XControlInformation.java192
-rw-r--r--qadevOOo/tests/java/ifc/ui/dialogs/_XExecutableDialog.java195
-rw-r--r--qadevOOo/tests/java/ifc/ui/dialogs/_XFilePicker.java160
-rw-r--r--qadevOOo/tests/java/ifc/ui/dialogs/_XFilePickerControlAccess.java202
-rw-r--r--qadevOOo/tests/java/ifc/ui/dialogs/_XFilePickerNotifier.java290
-rw-r--r--qadevOOo/tests/java/ifc/ui/dialogs/_XFilePreview.java122
-rw-r--r--qadevOOo/tests/java/ifc/ui/dialogs/_XFilterGroupManager.java64
-rw-r--r--qadevOOo/tests/java/ifc/ui/dialogs/_XFilterManager.java106
-rw-r--r--qadevOOo/tests/java/ifc/ui/dialogs/_XFolderPicker.java115
-rw-r--r--qadevOOo/tests/java/ifc/uno/_XComponentContext.java81
-rw-r--r--qadevOOo/tests/java/ifc/uno/_XNamingService.java155
-rw-r--r--qadevOOo/tests/java/ifc/util/_PathSettings.java89
-rw-r--r--qadevOOo/tests/java/ifc/util/_SearchDescriptor.java53
-rw-r--r--qadevOOo/tests/java/ifc/util/_XCancellable.java65
-rw-r--r--qadevOOo/tests/java/ifc/util/_XChangesBatch.java172
-rw-r--r--qadevOOo/tests/java/ifc/util/_XChangesNotifier.java222
-rw-r--r--qadevOOo/tests/java/ifc/util/_XCloneable.java112
-rw-r--r--qadevOOo/tests/java/ifc/util/_XFlushable.java111
-rw-r--r--qadevOOo/tests/java/ifc/util/_XImportable.java202
-rw-r--r--qadevOOo/tests/java/ifc/util/_XIndent.java98
-rw-r--r--qadevOOo/tests/java/ifc/util/_XMergeable.java74
-rw-r--r--qadevOOo/tests/java/ifc/util/_XModeSelector.java104
-rw-r--r--qadevOOo/tests/java/ifc/util/_XModifiable.java57
-rw-r--r--qadevOOo/tests/java/ifc/util/_XModifyBroadcaster.java86
-rw-r--r--qadevOOo/tests/java/ifc/util/_XNumberFormatsSupplier.java98
-rw-r--r--qadevOOo/tests/java/ifc/util/_XNumberFormatter.java128
-rw-r--r--qadevOOo/tests/java/ifc/util/_XProtectable.java84
-rw-r--r--qadevOOo/tests/java/ifc/util/_XRefreshable.java119
-rw-r--r--qadevOOo/tests/java/ifc/util/_XReplaceDescriptor.java75
-rw-r--r--qadevOOo/tests/java/ifc/util/_XReplaceable.java147
-rw-r--r--qadevOOo/tests/java/ifc/util/_XSearchDescriptor.java87
-rw-r--r--qadevOOo/tests/java/ifc/util/_XSearchable.java185
-rw-r--r--qadevOOo/tests/java/ifc/util/_XSortable.java238
-rw-r--r--qadevOOo/tests/java/ifc/util/_XStringEscape.java64
-rw-r--r--qadevOOo/tests/java/ifc/util/_XStringSubstitution.java101
-rw-r--r--qadevOOo/tests/java/ifc/util/_XTextSearch.java119
-rw-r--r--qadevOOo/tests/java/ifc/util/_XURLTransformer.java471
-rw-r--r--qadevOOo/tests/java/ifc/view/_XControlAccess.java124
-rw-r--r--qadevOOo/tests/java/ifc/view/_XFormLayerAccess.java158
-rw-r--r--qadevOOo/tests/java/ifc/view/_XMultiSelectionSupplier.java427
-rw-r--r--qadevOOo/tests/java/ifc/view/_XPrintJobBroadcaster.java150
-rw-r--r--qadevOOo/tests/java/ifc/view/_XPrintSettingsSupplier.java62
-rw-r--r--qadevOOo/tests/java/ifc/view/_XPrintable.java196
-rw-r--r--qadevOOo/tests/java/ifc/view/_XScreenCursor.java87
-rw-r--r--qadevOOo/tests/java/ifc/view/_XSelectionSupplier.java208
-rw-r--r--qadevOOo/tests/java/ifc/view/_XViewSettingsSupplier.java62
-rw-r--r--qadevOOo/tests/java/ifc/xml/_UserDefinedAttributeSupplier.java72
-rw-r--r--qadevOOo/tests/java/ifc/xml/sax/_XDocumentHandler.java408
-rw-r--r--qadevOOo/tests/java/mod/_acceptor.uno/Acceptor.java122
-rw-r--r--qadevOOo/tests/java/mod/_acceptor/Acceptor.java127
-rw-r--r--qadevOOo/tests/java/mod/_acceptor/package.html6
-rw-r--r--qadevOOo/tests/java/mod/_adabas/ODriver.java121
-rw-r--r--qadevOOo/tests/java/mod/_ado/ODriver.java105
-rw-r--r--qadevOOo/tests/java/mod/_basctl/AccessibleShape.java155
-rw-r--r--qadevOOo/tests/java/mod/_brdgfctr/BridgeFactory.java118
-rw-r--r--qadevOOo/tests/java/mod/_brdgfctr/package.html6
-rw-r--r--qadevOOo/tests/java/mod/_bridgefac.uno/BridgeFactory.java116
-rw-r--r--qadevOOo/tests/java/mod/_bridgefac.uno/package.html6
-rw-r--r--qadevOOo/tests/java/mod/_cached/CachedContentResultSetFactory.java186
-rw-r--r--qadevOOo/tests/java/mod/_cached/CachedContentResultSetStubFactory.java176
-rw-r--r--qadevOOo/tests/java/mod/_cached/CachedDynamicResultSetFactory.java183
-rw-r--r--qadevOOo/tests/java/mod/_cached/CachedDynamicResultSetStubFactory.java169
-rw-r--r--qadevOOo/tests/java/mod/_cmdmail/SimpleCommandMail.java71
-rw-r--r--qadevOOo/tests/java/mod/_cnt/ChaosContentProvider.java110
-rw-r--r--qadevOOo/tests/java/mod/_cnt/CntUnoDataContainer.java131
-rw-r--r--qadevOOo/tests/java/mod/_cnt/PropertyMatcherFactory.java86
-rw-r--r--qadevOOo/tests/java/mod/_configmgr/ConfigurationProvider.java57
-rw-r--r--qadevOOo/tests/java/mod/_configmgr/DefaultProvider.java54
-rw-r--r--qadevOOo/tests/java/mod/_configmgr/ProviderTestEnvironment.java51
-rw-r--r--qadevOOo/tests/java/mod/_connector.uno/Connector.java122
-rw-r--r--qadevOOo/tests/java/mod/_connector.uno/package.html6
-rw-r--r--qadevOOo/tests/java/mod/_connectr/Connector.java125
-rw-r--r--qadevOOo/tests/java/mod/_connectr/package.html6
-rw-r--r--qadevOOo/tests/java/mod/_corefl/CoreReflection.java87
-rw-r--r--qadevOOo/tests/java/mod/_corefl/package.html6
-rw-r--r--qadevOOo/tests/java/mod/_corereflection.uno/CoreReflection.java83
-rw-r--r--qadevOOo/tests/java/mod/_corereflection.uno/package.html6
-rw-r--r--qadevOOo/tests/java/mod/_cpld/DLLComponentLoader.java117
-rw-r--r--qadevOOo/tests/java/mod/_cpld/package.html6
-rw-r--r--qadevOOo/tests/java/mod/_dbaccess/ConnectionLineAccessibility.java421
-rw-r--r--qadevOOo/tests/java/mod/_dbaccess/DBContentLoader.java110
-rw-r--r--qadevOOo/tests/java/mod/_dbaccess/JoinViewAccessibility.java392
-rw-r--r--qadevOOo/tests/java/mod/_dbaccess/OCommandDefinition.java91
-rw-r--r--qadevOOo/tests/java/mod/_dbaccess/ODatabaseContext.java149
-rw-r--r--qadevOOo/tests/java/mod/_dbaccess/ODatabaseSource.java245
-rw-r--r--qadevOOo/tests/java/mod/_dbaccess/ODatasourceAdministrationDialog.java100
-rw-r--r--qadevOOo/tests/java/mod/_dbaccess/ODatasourceBrowser.java332
-rw-r--r--qadevOOo/tests/java/mod/_dbaccess/OInteractionHandler.java117
-rw-r--r--qadevOOo/tests/java/mod/_dbaccess/OQueryDesign.java325
-rw-r--r--qadevOOo/tests/java/mod/_dbaccess/ORowSet.java644
-rw-r--r--qadevOOo/tests/java/mod/_dbaccess/OSQLMessageDialog.java157
-rw-r--r--qadevOOo/tests/java/mod/_dbaccess/OSingleSelectQueryComposer.java283
-rw-r--r--qadevOOo/tests/java/mod/_dbaccess/SbaXGridControl.java485
-rw-r--r--qadevOOo/tests/java/mod/_dbaccess/TableWindowAccessibility.java380
-rw-r--r--qadevOOo/tests/java/mod/_dbaccess/package.html6
-rw-r--r--qadevOOo/tests/java/mod/_dbpool/OConnectionPool.java114
-rw-r--r--qadevOOo/tests/java/mod/_defreg/NestedRegistry.java202
-rw-r--r--qadevOOo/tests/java/mod/_defreg/package.html6
-rw-r--r--qadevOOo/tests/java/mod/_dtrans/generic.java77
-rw-r--r--qadevOOo/tests/java/mod/_dynamicloader/Dynamic.java101
-rw-r--r--qadevOOo/tests/java/mod/_file/calc/ODriver.java112
-rw-r--r--qadevOOo/tests/java/mod/_file/dbase/ODriver.java109
-rw-r--r--qadevOOo/tests/java/mod/_file/flat/ODriver.java107
-rw-r--r--qadevOOo/tests/java/mod/_fileacc/SimpleFileAccess.java86
-rw-r--r--qadevOOo/tests/java/mod/_fileacc/package.html6
-rw-r--r--qadevOOo/tests/java/mod/_fop/FolderPicker.java102
-rw-r--r--qadevOOo/tests/java/mod/_forms/GenericModelTest.java565
-rw-r--r--qadevOOo/tests/java/mod/_forms/OButtonControl.java223
-rw-r--r--qadevOOo/tests/java/mod/_forms/OButtonModel.java134
-rw-r--r--qadevOOo/tests/java/mod/_forms/OCheckBoxControl.java237
-rw-r--r--qadevOOo/tests/java/mod/_forms/OCheckBoxModel.java149
-rw-r--r--qadevOOo/tests/java/mod/_forms/OComboBoxControl.java244
-rw-r--r--qadevOOo/tests/java/mod/_forms/OComboBoxModel.java164
-rw-r--r--qadevOOo/tests/java/mod/_forms/OCurrencyControl.java251
-rw-r--r--qadevOOo/tests/java/mod/_forms/OCurrencyModel.java159
-rw-r--r--qadevOOo/tests/java/mod/_forms/ODatabaseForm.java901
-rw-r--r--qadevOOo/tests/java/mod/_forms/ODateControl.java243
-rw-r--r--qadevOOo/tests/java/mod/_forms/ODateModel.java178
-rw-r--r--qadevOOo/tests/java/mod/_forms/OEditControl.java261
-rw-r--r--qadevOOo/tests/java/mod/_forms/OEditModel.java170
-rw-r--r--qadevOOo/tests/java/mod/_forms/OFileControlModel.java210
-rw-r--r--qadevOOo/tests/java/mod/_forms/OFixedTextModel.java128
-rw-r--r--qadevOOo/tests/java/mod/_forms/OFormattedControl.java240
-rw-r--r--qadevOOo/tests/java/mod/_forms/OFormattedFieldWrapper.java162
-rw-r--r--qadevOOo/tests/java/mod/_forms/OFormsCollection.java184
-rw-r--r--qadevOOo/tests/java/mod/_forms/OGridControlModel.java431
-rw-r--r--qadevOOo/tests/java/mod/_forms/OGroupBoxControl.java214
-rw-r--r--qadevOOo/tests/java/mod/_forms/OGroupBoxModel.java128
-rw-r--r--qadevOOo/tests/java/mod/_forms/OHiddenModel.java203
-rw-r--r--qadevOOo/tests/java/mod/_forms/OImageButtonControl.java219
-rw-r--r--qadevOOo/tests/java/mod/_forms/OImageButtonModel.java132
-rw-r--r--qadevOOo/tests/java/mod/_forms/OImageControlControl.java220
-rw-r--r--qadevOOo/tests/java/mod/_forms/OImageControlModel.java161
-rw-r--r--qadevOOo/tests/java/mod/_forms/OListBoxControl.java180
-rw-r--r--qadevOOo/tests/java/mod/_forms/OListBoxModel.java236
-rw-r--r--qadevOOo/tests/java/mod/_forms/ONavigationBarControl.java180
-rw-r--r--qadevOOo/tests/java/mod/_forms/ONavigationBarModel.java81
-rw-r--r--qadevOOo/tests/java/mod/_forms/ONumericControl.java245
-rw-r--r--qadevOOo/tests/java/mod/_forms/ONumericModel.java160
-rw-r--r--qadevOOo/tests/java/mod/_forms/OPatternControl.java243
-rw-r--r--qadevOOo/tests/java/mod/_forms/OPatternModel.java166
-rw-r--r--qadevOOo/tests/java/mod/_forms/ORadioButtonControl.java222
-rw-r--r--qadevOOo/tests/java/mod/_forms/ORadioButtonModel.java173
-rw-r--r--qadevOOo/tests/java/mod/_forms/OScrollBarModel.java99
-rw-r--r--qadevOOo/tests/java/mod/_forms/OSpinButtonModel.java102
-rw-r--r--qadevOOo/tests/java/mod/_forms/OTimeControl.java258
-rw-r--r--qadevOOo/tests/java/mod/_forms/OTimeModel.java237
-rw-r--r--qadevOOo/tests/java/mod/_forms/package.html6
-rw-r--r--qadevOOo/tests/java/mod/_fps/FilePicker.java133
-rw-r--r--qadevOOo/tests/java/mod/_ftransl/DataFormatTranslator.java91
-rwxr-xr-xqadevOOo/tests/java/mod/_fwk/ControlMenuController.java110
-rw-r--r--qadevOOo/tests/java/mod/_fwk/Desktop.java137
-rw-r--r--qadevOOo/tests/java/mod/_fwk/DispatchRecorder.java174
-rw-r--r--qadevOOo/tests/java/mod/_fwk/DispatchRecorderSupplier.java74
-rw-r--r--qadevOOo/tests/java/mod/_fwk/DocumentProperties.java130
-rwxr-xr-xqadevOOo/tests/java/mod/_fwk/FontMenuController.java60
-rwxr-xr-xqadevOOo/tests/java/mod/_fwk/FontSizeMenuController.java60
-rwxr-xr-xqadevOOo/tests/java/mod/_fwk/FooterMenuController.java60
-rwxr-xr-xqadevOOo/tests/java/mod/_fwk/FormatMenuController.java60
-rw-r--r--qadevOOo/tests/java/mod/_fwk/Frame.java119
-rwxr-xr-xqadevOOo/tests/java/mod/_fwk/HeaderMenuController.java60
-rw-r--r--qadevOOo/tests/java/mod/_fwk/JobExecutor.java317
-rw-r--r--qadevOOo/tests/java/mod/_fwk/JobHandler.java91
-rwxr-xr-xqadevOOo/tests/java/mod/_fwk/LayoutManager.java124
-rwxr-xr-xqadevOOo/tests/java/mod/_fwk/MacrosMenuController.java60
-rw-r--r--qadevOOo/tests/java/mod/_fwk/MailToDispatcher.java80
-rwxr-xr-xqadevOOo/tests/java/mod/_fwk/MenuBarFactory.java58
-rwxr-xr-xqadevOOo/tests/java/mod/_fwk/ModuleManager.java281
-rwxr-xr-xqadevOOo/tests/java/mod/_fwk/ModuleUIConfigurationManager.java245
-rwxr-xr-xqadevOOo/tests/java/mod/_fwk/ModuleUIConfigurationManagerSupplier.java60
-rwxr-xr-xqadevOOo/tests/java/mod/_fwk/ObjectMenuController.java97
-rwxr-xr-xqadevOOo/tests/java/mod/_fwk/PopupMenuControllerFactory.java124
-rw-r--r--qadevOOo/tests/java/mod/_fwk/ServiceHandler.java80
-rw-r--r--qadevOOo/tests/java/mod/_fwk/SoundHandler.java81
-rw-r--r--qadevOOo/tests/java/mod/_fwk/StatusBarControllerFactory.java74
-rw-r--r--qadevOOo/tests/java/mod/_fwk/ToolBarsMenuController.java60
-rw-r--r--qadevOOo/tests/java/mod/_fwk/UICategoryDescription.java60
-rwxr-xr-xqadevOOo/tests/java/mod/_fwk/UICommandDescription.java61
-rwxr-xr-xqadevOOo/tests/java/mod/_fwk/UIConfigurationManager.java205
-rwxr-xr-xqadevOOo/tests/java/mod/_fwk/UIElementFactoryManager.java101
-rw-r--r--qadevOOo/tests/java/mod/_fwk/URLTransformer.java73
-rw-r--r--qadevOOo/tests/java/mod/_fwl/ContentHandlerFactory.java115
-rw-r--r--qadevOOo/tests/java/mod/_fwl/FilterFactory.java205
-rw-r--r--qadevOOo/tests/java/mod/_fwl/FrameLoaderFactory.java113
-rw-r--r--qadevOOo/tests/java/mod/_fwl/PathSettings.java161
-rw-r--r--qadevOOo/tests/java/mod/_fwl/SubstituteVariables.java94
-rw-r--r--qadevOOo/tests/java/mod/_fwl/TypeDetection.java187
-rw-r--r--qadevOOo/tests/java/mod/_i18n/BreakIterator.java123
-rw-r--r--qadevOOo/tests/java/mod/_i18n/CalendarImpl.java80
-rw-r--r--qadevOOo/tests/java/mod/_i18n/ChapterCollator.java84
-rw-r--r--qadevOOo/tests/java/mod/_i18n/CharacterClassification.java87
-rw-r--r--qadevOOo/tests/java/mod/_i18n/Collator.java81
-rw-r--r--qadevOOo/tests/java/mod/_i18n/IndexEntrySupplier.java86
-rw-r--r--qadevOOo/tests/java/mod/_i18n/LocaleData.java85
-rw-r--r--qadevOOo/tests/java/mod/_i18n/NumberFormatCodeMapper.java91
-rw-r--r--qadevOOo/tests/java/mod/_i18n/TextSearch.java81
-rw-r--r--qadevOOo/tests/java/mod/_i18n/Transliteration.java81
-rw-r--r--qadevOOo/tests/java/mod/_implreg.uno/ImplementationRegistration.java81
-rw-r--r--qadevOOo/tests/java/mod/_implreg.uno/package.html6
-rw-r--r--qadevOOo/tests/java/mod/_impreg/ImplementationRegistration.java86
-rw-r--r--qadevOOo/tests/java/mod/_impreg/package.html6
-rw-r--r--qadevOOo/tests/java/mod/_insp/Introspection.java81
-rw-r--r--qadevOOo/tests/java/mod/_insp/package.html6
-rw-r--r--qadevOOo/tests/java/mod/_introspection.uno/Introspection.java76
-rw-r--r--qadevOOo/tests/java/mod/_introspection.uno/package.html6
-rw-r--r--qadevOOo/tests/java/mod/_inv/Invocation.java106
-rw-r--r--qadevOOo/tests/java/mod/_inv/package.html6
-rw-r--r--qadevOOo/tests/java/mod/_invadp/InvocationAdapterFactory.java75
-rw-r--r--qadevOOo/tests/java/mod/_invadp/package.html6
-rw-r--r--qadevOOo/tests/java/mod/_invocadapt.uno/InvocationAdapterFactory.java74
-rw-r--r--qadevOOo/tests/java/mod/_invocadapt.uno/package.html6
-rw-r--r--qadevOOo/tests/java/mod/_invocation.uno/Invocation.java104
-rw-r--r--qadevOOo/tests/java/mod/_invocation.uno/package.html6
-rw-r--r--qadevOOo/tests/java/mod/_javaloader.uno/JavaComponentLoader.java96
-rw-r--r--qadevOOo/tests/java/mod/_javaloader/JavaComponentLoader.java101
-rw-r--r--qadevOOo/tests/java/mod/_javavm.uno/JavaVirtualMachine.java75
-rw-r--r--qadevOOo/tests/java/mod/_javavm.uno/package.html6
-rw-r--r--qadevOOo/tests/java/mod/_jdbc/JDBCDriver.java123
-rw-r--r--qadevOOo/tests/java/mod/_jen/JavaVirtualMachine.java77
-rw-r--r--qadevOOo/tests/java/mod/_jen/package.html6
-rw-r--r--qadevOOo/tests/java/mod/_lng/DicList.java113
-rw-r--r--qadevOOo/tests/java/mod/_lng/LinguProps.java98
-rw-r--r--qadevOOo/tests/java/mod/_lng/LngSvcMgr.java92
-rw-r--r--qadevOOo/tests/java/mod/_lnn/Hyphenator.java111
-rw-r--r--qadevOOo/tests/java/mod/_lnn/SpellChecker.java109
-rw-r--r--qadevOOo/tests/java/mod/_lnn/Thesaurus.java98
-rw-r--r--qadevOOo/tests/java/mod/_mcnttype/MimeContentTypeFactory.java90
-rw-r--r--qadevOOo/tests/java/mod/_mozab/MozabDriver.java104
-rw-r--r--qadevOOo/tests/java/mod/_namingservice.uno/NamingService.java99
-rw-r--r--qadevOOo/tests/java/mod/_namingservice/NamingService.java102
-rw-r--r--qadevOOo/tests/java/mod/_namingservice/package.html6
-rw-r--r--qadevOOo/tests/java/mod/_nestedreg.uno/NestedRegistry.java198
-rw-r--r--qadevOOo/tests/java/mod/_nestedreg.uno/package.html6
-rw-r--r--qadevOOo/tests/java/mod/_odbc/ODBCDriver.java101
-rw-r--r--qadevOOo/tests/java/mod/_pcr/ObjectInspector.java215
-rw-r--r--qadevOOo/tests/java/mod/_pcr/ObjectInspectorModel.java174
-rw-r--r--qadevOOo/tests/java/mod/_proxyfac.uno/ProxyFactory.java76
-rw-r--r--qadevOOo/tests/java/mod/_proxyfac/ProxyFactory.java78
-rw-r--r--qadevOOo/tests/java/mod/_proxyfac/package.html6
-rw-r--r--qadevOOo/tests/java/mod/_proxyset/SOffice52ProxySettings.java144
-rw-r--r--qadevOOo/tests/java/mod/_proxyset/SystemProxySettings.java145
-rwxr-xr-xqadevOOo/tests/java/mod/_qadevOOo/SelfTest.java92
-rw-r--r--qadevOOo/tests/java/mod/_rdbtdp/RegistryTypeDescriptionProvider.java131
-rw-r--r--qadevOOo/tests/java/mod/_rdbtdp/package.html6
-rw-r--r--qadevOOo/tests/java/mod/_regtypeprov.uno/RegistryTypeDescriptionProvider.java126
-rw-r--r--qadevOOo/tests/java/mod/_remotebridge.uno/various.java309
-rw-r--r--qadevOOo/tests/java/mod/_remotebridge/package.html6
-rw-r--r--qadevOOo/tests/java/mod/_remotebridge/various.java305
-rw-r--r--qadevOOo/tests/java/mod/_sc/AccessibleEditableTextPara_HeaderFooter.java220
-rw-r--r--qadevOOo/tests/java/mod/_sc/AccessibleEditableTextPara_PreviewCell.java193
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScAccessibleCell.java200
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScAccessibleCsvCell.java208
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScAccessibleCsvGrid.java202
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScAccessibleCsvRuler.java229
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScAccessibleDocument.java172
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScAccessibleDocumentPagePreview.java242
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScAccessiblePageHeader.java282
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScAccessiblePageHeaderArea.java233
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScAccessiblePreviewCell.java208
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScAccessiblePreviewHeaderCell.java293
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScAccessiblePreviewTable.java222
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScAccessibleSpreadsheet.java168
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScAnnotationObj.java178
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScAnnotationShapeObj.java213
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScAnnotationTextCursor.java152
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScAnnotationsObj.java175
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScAreaLinkObj.java152
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScAreaLinksObj.java150
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScAutoFormatFieldObj.java106
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScAutoFormatObj.java109
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScAutoFormatsObj.java158
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScCellCursorObj.java326
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScCellFieldObj.java196
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScCellFieldsObj.java167
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScCellFormatsEnumeration.java157
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScCellFormatsObj.java141
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScCellObj.java216
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScCellRangeObj.java312
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScCellRangesObj.java264
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScCellSearchObj.java151
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScCellTextCursor.java195
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScCellsEnumeration.java172
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScCellsObj.java167
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScChartObj.java289
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScChartsObj.java273
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScConsolidationDescriptor.java116
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScDDELinkObj.java245
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScDDELinksObj.java208
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScDataPilotFieldGroupItemObj.java371
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScDataPilotFieldGroupObj.java369
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScDataPilotFieldGroupsObj.java367
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScDataPilotFieldObj.java396
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScDataPilotFieldsObj.java183
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScDataPilotItemObj.java414
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScDataPilotItemsObj.java402
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScDataPilotTableObj.java355
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScDataPilotTablesObj.java195
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScDatabaseRangeObj.java258
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScDatabaseRangesObj.java154
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScDocumentConfiguration.java90
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScDrawPageObj.java162
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScDrawPagesObj.java135
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScFilterDescriptorBase.java159
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScFunctionDescriptionObj.java118
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScFunctionListObj.java130
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScHeaderFieldObj.java241
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScHeaderFieldsObj.java221
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScHeaderFooterContentObj.java190
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScHeaderFooterTextCursor.java228
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScHeaderFooterTextObj.java278
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScImportDescriptorBase.java149
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScIndexEnumeration_CellAnnotationsEnumeration.java138
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScIndexEnumeration_CellAreaLinksEnumeration.java131
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScIndexEnumeration_DDELinksEnumeration.java187
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScIndexEnumeration_DataPilotFieldsEnumeration.java165
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScIndexEnumeration_DataPilotItemsEnumeration.java408
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScIndexEnumeration_DataPilotTablesEnumeration.java166
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScIndexEnumeration_DatabaseRangesEnumeration.java134
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScIndexEnumeration_FunctionDescriptionEnumeration.java113
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScIndexEnumeration_LabelRangesEnumeration.java126
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScIndexEnumeration_NamedRangesEnumeration.java133
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScIndexEnumeration_ScenariosEnumeration.java145
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScIndexEnumeration_SheetCellRangesEnumeration.java167
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScIndexEnumeration_SheetLinksEnumeration.java148
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScIndexEnumeration_SpreadsheetViewPanesEnumeration.java116
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScIndexEnumeration_SpreadsheetsEnumeration.java97
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScIndexEnumeration_SubTotalFieldsEnumeration.java141
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScIndexEnumeration_TableAutoFormatEnumeration.java105
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScIndexEnumeration_TableChartsEnumeration.java238
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScIndexEnumeration_TableColumnsEnumeration.java129
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScIndexEnumeration_TableConditionalEntryEnumeration.java207
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScIndexEnumeration_TableRowsEnumeration.java128
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScIndexEnumeration_TextFieldEnumeration.java166
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScLabelRangeObj.java154
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScLabelRangesObj.java147
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScModelObj.java232
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScNamedRangeObj.java177
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScNamedRangesObj.java178
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScRecentFunctionsObj.java133
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScScenariosObj.java174
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScShapeObj.java117
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScSheetLinkObj.java193
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScSheetLinksObj.java167
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScSortDescriptorBase.java151
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScSpreadsheetSettings.java84
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScSpreadsheetSettingsObj.java110
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScStyleFamiliesObj.java121
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScStyleFamilyObj.java216
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScStyleObj.java270
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScSubTotalDescriptorBase.java154
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScSubTotalFieldObj.java169
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScTabViewObj.java283
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScTableColumnObj.java176
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScTableColumnsObj.java153
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScTableConditionalEntry.java230
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScTableConditionalFormat.java208
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScTableRowObj.java161
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScTableRowsObj.java148
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScTableSheetObj.java421
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScTableSheetsObj.java171
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScTableValidationObj.java164
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScUniqueCellFormatsEnumeration.java145
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScUniqueCellFormatsObj.java139
-rw-r--r--qadevOOo/tests/java/mod/_sc/ScViewPaneObj.java209
-rw-r--r--qadevOOo/tests/java/mod/_sc/XMLContentExporter.java216
-rw-r--r--qadevOOo/tests/java/mod/_sc/XMLContentImporter.java198
-rw-r--r--qadevOOo/tests/java/mod/_sc/XMLExporter.java224
-rw-r--r--qadevOOo/tests/java/mod/_sc/XMLImporter.java195
-rw-r--r--qadevOOo/tests/java/mod/_sc/XMLMetaExporter.java205
-rw-r--r--qadevOOo/tests/java/mod/_sc/XMLMetaImporter.java197
-rw-r--r--qadevOOo/tests/java/mod/_sc/XMLSettingsExporter.java206
-rw-r--r--qadevOOo/tests/java/mod/_sc/XMLSettingsImporter.java219
-rw-r--r--qadevOOo/tests/java/mod/_sc/XMLStylesExporter.java211
-rw-r--r--qadevOOo/tests/java/mod/_sc/XMLStylesImporter.java215
-rw-r--r--qadevOOo/tests/java/mod/_sc/package.html6
-rw-r--r--qadevOOo/tests/java/mod/_sch/AccArea.java121
-rw-r--r--qadevOOo/tests/java/mod/_sch/AccAxis.java119
-rw-r--r--qadevOOo/tests/java/mod/_sch/AccDataPoint.java120
-rw-r--r--qadevOOo/tests/java/mod/_sch/AccDataSeries.java120
-rw-r--r--qadevOOo/tests/java/mod/_sch/AccDiagram.java120
-rw-r--r--qadevOOo/tests/java/mod/_sch/AccFloor.java145
-rw-r--r--qadevOOo/tests/java/mod/_sch/AccGrid.java121
-rw-r--r--qadevOOo/tests/java/mod/_sch/AccLegend.java119
-rw-r--r--qadevOOo/tests/java/mod/_sch/AccLegendEntry.java119
-rw-r--r--qadevOOo/tests/java/mod/_sch/AccStatisticsObject.java124
-rw-r--r--qadevOOo/tests/java/mod/_sch/AccTitle.java119
-rw-r--r--qadevOOo/tests/java/mod/_sch/AccWall.java144
-rw-r--r--qadevOOo/tests/java/mod/_sch/AccessibleDocumentView.java133
-rw-r--r--qadevOOo/tests/java/mod/_sch/ChXChartAxis.java130
-rw-r--r--qadevOOo/tests/java/mod/_sch/ChXChartData.java102
-rw-r--r--qadevOOo/tests/java/mod/_sch/ChXChartDataArray.java106
-rw-r--r--qadevOOo/tests/java/mod/_sch/ChXChartDocument.java172
-rw-r--r--qadevOOo/tests/java/mod/_sch/ChXChartView.java147
-rw-r--r--qadevOOo/tests/java/mod/_sch/ChXDataPoint.java162
-rw-r--r--qadevOOo/tests/java/mod/_sch/ChXDataRow.java169
-rw-r--r--qadevOOo/tests/java/mod/_sch/ChXDiagram.java413
-rw-r--r--qadevOOo/tests/java/mod/_sch/ChartArea.java122
-rw-r--r--qadevOOo/tests/java/mod/_sch/ChartGrid.java122
-rw-r--r--qadevOOo/tests/java/mod/_sch/ChartLegend.java142
-rw-r--r--qadevOOo/tests/java/mod/_sch/ChartLine.java150
-rw-r--r--qadevOOo/tests/java/mod/_sch/ChartTitle.java120
-rw-r--r--qadevOOo/tests/java/mod/_sd/AccessibleDrawDocumentView.java183
-rw-r--r--qadevOOo/tests/java/mod/_sd/AccessibleOutlineView.java182
-rw-r--r--qadevOOo/tests/java/mod/_sd/AccessibleSlideView.java191
-rw-r--r--qadevOOo/tests/java/mod/_sd/DrawController_DrawView.java303
-rw-r--r--qadevOOo/tests/java/mod/_sd/DrawController_HandoutView.java337
-rw-r--r--qadevOOo/tests/java/mod/_sd/DrawController_NotesView.java334
-rw-r--r--qadevOOo/tests/java/mod/_sd/DrawController_OutlineView.java334
-rw-r--r--qadevOOo/tests/java/mod/_sd/DrawController_PresentationView.java334
-rw-r--r--qadevOOo/tests/java/mod/_sd/SdDocLinkTargets.java111
-rw-r--r--qadevOOo/tests/java/mod/_sd/SdDrawPage.java216
-rw-r--r--qadevOOo/tests/java/mod/_sd/SdDrawPagesAccess.java129
-rw-r--r--qadevOOo/tests/java/mod/_sd/SdGenericDrawPage.java189
-rw-r--r--qadevOOo/tests/java/mod/_sd/SdLayer.java139
-rw-r--r--qadevOOo/tests/java/mod/_sd/SdLayerManager.java171
-rw-r--r--qadevOOo/tests/java/mod/_sd/SdMasterPage.java194
-rw-r--r--qadevOOo/tests/java/mod/_sd/SdMasterPagesAccess.java122
-rw-r--r--qadevOOo/tests/java/mod/_sd/SdPageLinkTargets.java153
-rw-r--r--qadevOOo/tests/java/mod/_sd/SdUnoDrawView.java299
-rw-r--r--qadevOOo/tests/java/mod/_sd/SdUnoOutlineView.java246
-rw-r--r--qadevOOo/tests/java/mod/_sd/SdUnoPresView.java301
-rw-r--r--qadevOOo/tests/java/mod/_sd/SdUnoSlideView.java222
-rw-r--r--qadevOOo/tests/java/mod/_sd/SdXCustomPresentation.java243
-rw-r--r--qadevOOo/tests/java/mod/_sd/SdXCustomPresentationAccess.java212
-rw-r--r--qadevOOo/tests/java/mod/_sd/SdXImpressDocument.java199
-rw-r--r--qadevOOo/tests/java/mod/_sd/SdXPresentation.java164
-rw-r--r--qadevOOo/tests/java/mod/_sd/SdXShape.java219
-rw-r--r--qadevOOo/tests/java/mod/_sd/package.html6
-rw-r--r--qadevOOo/tests/java/mod/_servicemgr.uno/OServiceManager.java169
-rw-r--r--qadevOOo/tests/java/mod/_servicemgr.uno/package.html6
-rw-r--r--qadevOOo/tests/java/mod/_sfx/AppDispatchProvider.java104
-rw-r--r--qadevOOo/tests/java/mod/_sfx/DocumentTemplates.java97
-rw-r--r--qadevOOo/tests/java/mod/_sfx/FrameLoader.java103
-rw-r--r--qadevOOo/tests/java/mod/_sfx/SfxMacroLoader.java107
-rw-r--r--qadevOOo/tests/java/mod/_sfx/StandaloneDocumentInfo.java133
-rw-r--r--qadevOOo/tests/java/mod/_shlibloader.uno/DLLComponentLoader.java117
-rw-r--r--qadevOOo/tests/java/mod/_shlibloader.uno/package.html6
-rw-r--r--qadevOOo/tests/java/mod/_simplereg.uno/SimpleRegistry.java163
-rw-r--r--qadevOOo/tests/java/mod/_simplereg.uno/package.html6
-rw-r--r--qadevOOo/tests/java/mod/_simreg/SimpleRegistry.java167
-rw-r--r--qadevOOo/tests/java/mod/_simreg/package.html6
-rw-r--r--qadevOOo/tests/java/mod/_sm/SmEditAccessible.java178
-rw-r--r--qadevOOo/tests/java/mod/_sm/SmGraphicAccessible.java182
-rw-r--r--qadevOOo/tests/java/mod/_sm/SmModel.java100
-rw-r--r--qadevOOo/tests/java/mod/_sm/XMLExporter.java197
-rw-r--r--qadevOOo/tests/java/mod/_sm/XMLImporter.java170
-rw-r--r--qadevOOo/tests/java/mod/_sm/XMLMetaExporter.java198
-rw-r--r--qadevOOo/tests/java/mod/_sm/XMLMetaImporter.java198
-rw-r--r--qadevOOo/tests/java/mod/_sm/XMLSettingsExporter.java198
-rw-r--r--qadevOOo/tests/java/mod/_sm/XMLSettingsImporter.java180
-rw-r--r--qadevOOo/tests/java/mod/_smgr/OServiceManager.java171
-rw-r--r--qadevOOo/tests/java/mod/_smgr/package.html6
-rw-r--r--qadevOOo/tests/java/mod/_smplmail/SimpleSystemMail.java121
-rw-r--r--qadevOOo/tests/java/mod/_srtrs/SortedDynamicResultSetFactory.java83
-rw-r--r--qadevOOo/tests/java/mod/_stm/DataInputStream.java197
-rw-r--r--qadevOOo/tests/java/mod/_stm/DataOutputStream.java182
-rw-r--r--qadevOOo/tests/java/mod/_stm/MarkableInputStream.java147
-rw-r--r--qadevOOo/tests/java/mod/_stm/MarkableOutputStream.java207
-rw-r--r--qadevOOo/tests/java/mod/_stm/ObjectInputStream.java299
-rw-r--r--qadevOOo/tests/java/mod/_stm/ObjectOutputStream.java320
-rw-r--r--qadevOOo/tests/java/mod/_stm/Pipe.java115
-rw-r--r--qadevOOo/tests/java/mod/_stm/Pump.java190
-rw-r--r--qadevOOo/tests/java/mod/_stm/package.html6
-rw-r--r--qadevOOo/tests/java/mod/_streams.uno/DataInputStream.java194
-rw-r--r--qadevOOo/tests/java/mod/_streams.uno/DataOutputStream.java179
-rw-r--r--qadevOOo/tests/java/mod/_streams.uno/MarkableInputStream.java144
-rw-r--r--qadevOOo/tests/java/mod/_streams.uno/MarkableOutputStream.java204
-rw-r--r--qadevOOo/tests/java/mod/_streams.uno/ObjectInputStream.java296
-rw-r--r--qadevOOo/tests/java/mod/_streams.uno/ObjectOutputStream.java317
-rw-r--r--qadevOOo/tests/java/mod/_streams.uno/Pipe.java111
-rw-r--r--qadevOOo/tests/java/mod/_streams.uno/Pump.java187
-rw-r--r--qadevOOo/tests/java/mod/_streams.uno/package.html6
-rw-r--r--qadevOOo/tests/java/mod/_svtools/AccessibleBrowseBox.java202
-rw-r--r--qadevOOo/tests/java/mod/_svtools/AccessibleBrowseBoxHeaderBar.java255
-rw-r--r--qadevOOo/tests/java/mod/_svtools/AccessibleBrowseBoxHeaderCell.java240
-rw-r--r--qadevOOo/tests/java/mod/_svtools/AccessibleBrowseBoxTable.java238
-rw-r--r--qadevOOo/tests/java/mod/_svtools/AccessibleBrowseBoxTableCell.java226
-rw-r--r--qadevOOo/tests/java/mod/_svtools/AccessibleIconChoiceCtrl.java287
-rw-r--r--qadevOOo/tests/java/mod/_svtools/AccessibleIconChoiceCtrlEntry.java264
-rw-r--r--qadevOOo/tests/java/mod/_svtools/AccessibleTabBar.java162
-rw-r--r--qadevOOo/tests/java/mod/_svtools/AccessibleTabBarPage.java194
-rw-r--r--qadevOOo/tests/java/mod/_svtools/AccessibleTabBarPageList.java209
-rw-r--r--qadevOOo/tests/java/mod/_svtools/AccessibleTreeListBox.java249
-rw-r--r--qadevOOo/tests/java/mod/_svtools/AccessibleTreeListBoxEntry.java295
-rw-r--r--qadevOOo/tests/java/mod/_svx/AccessibleControlShape.java125
-rw-r--r--qadevOOo/tests/java/mod/_svx/AccessibleEditableTextPara.java162
-rw-r--r--qadevOOo/tests/java/mod/_svx/AccessibleGraphicShape.java129
-rw-r--r--qadevOOo/tests/java/mod/_svx/AccessibleOLEShape.java151
-rw-r--r--qadevOOo/tests/java/mod/_svx/AccessiblePageShape.java141
-rw-r--r--qadevOOo/tests/java/mod/_svx/AccessiblePresentationGraphicShape.java149
-rw-r--r--qadevOOo/tests/java/mod/_svx/AccessiblePresentationOLEShape.java158
-rw-r--r--qadevOOo/tests/java/mod/_svx/AccessiblePresentationShape.java147
-rw-r--r--qadevOOo/tests/java/mod/_svx/AccessibleShape.java128
-rw-r--r--qadevOOo/tests/java/mod/_svx/GraphicExporter.java237
-rw-r--r--qadevOOo/tests/java/mod/_svx/SvxDrawPage.java224
-rw-r--r--qadevOOo/tests/java/mod/_svx/SvxGraphCtrlAccessibleContext.java251
-rw-r--r--qadevOOo/tests/java/mod/_svx/SvxGraphicObject.java263
-rw-r--r--qadevOOo/tests/java/mod/_svx/SvxShape.java227
-rw-r--r--qadevOOo/tests/java/mod/_svx/SvxShapeCircle.java247
-rw-r--r--qadevOOo/tests/java/mod/_svx/SvxShapeCollection.java148
-rw-r--r--qadevOOo/tests/java/mod/_svx/SvxShapeConnector.java204
-rw-r--r--qadevOOo/tests/java/mod/_svx/SvxShapeControl.java158
-rw-r--r--qadevOOo/tests/java/mod/_svx/SvxShapeDimensioning.java169
-rw-r--r--qadevOOo/tests/java/mod/_svx/SvxShapeGroup.java195
-rw-r--r--qadevOOo/tests/java/mod/_svx/SvxShapePolyPolygon.java265
-rw-r--r--qadevOOo/tests/java/mod/_svx/SvxShapePolyPolygonBezier.java278
-rw-r--r--qadevOOo/tests/java/mod/_svx/SvxUnoNumberingRules.java94
-rw-r--r--qadevOOo/tests/java/mod/_svx/SvxUnoText.java170
-rw-r--r--qadevOOo/tests/java/mod/_svx/SvxUnoTextContent.java150
-rw-r--r--qadevOOo/tests/java/mod/_svx/SvxUnoTextContentEnum.java152
-rw-r--r--qadevOOo/tests/java/mod/_svx/SvxUnoTextCursor.java144
-rw-r--r--qadevOOo/tests/java/mod/_svx/SvxUnoTextField.java161
-rw-r--r--qadevOOo/tests/java/mod/_svx/SvxUnoTextRange.java156
-rw-r--r--qadevOOo/tests/java/mod/_svx/SvxUnoTextRangeEnumeration.java157
-rw-r--r--qadevOOo/tests/java/mod/_svx/package.html6
-rwxr-xr-xqadevOOo/tests/java/mod/_sw/CharacterStyle.java207
-rwxr-xr-xqadevOOo/tests/java/mod/_sw/ConditionalParagraphStyle.java201
-rw-r--r--qadevOOo/tests/java/mod/_sw/DocumentSettings.java85
-rwxr-xr-xqadevOOo/tests/java/mod/_sw/PageStyle.java201
-rwxr-xr-xqadevOOo/tests/java/mod/_sw/ParagraphStyle.java192
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwAccessibleDocumentPageView.java200
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwAccessibleDocumentView.java187
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwAccessibleEndnoteView.java195
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwAccessibleFooterView.java200
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwAccessibleFootnoteView.java195
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwAccessibleHeaderView.java188
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwAccessiblePageView.java286
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwAccessibleParagraphView.java139
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwAccessibleTableCellView.java154
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwAccessibleTableView.java174
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwAccessibleTextEmbeddedObject.java156
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwAccessibleTextFrameView.java187
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwAccessibleTextGraphicObject.java177
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwXAutoTextContainer.java89
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwXAutoTextEntry.java217
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwXAutoTextGroup.java178
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwXBodyText.java148
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwXBookmark.java121
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwXBookmarks.java119
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwXCell.java135
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwXCellRange.java169
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwXChapterNumbering.java123
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwXDocumentIndex.java144
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwXDocumentIndexMark.java145
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwXDocumentIndexes.java135
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwXDrawPage.java164
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwXEndnoteProperties.java134
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwXFieldEnumeration.java176
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwXFieldMaster.java111
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwXFootnote.java158
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwXFootnoteProperties.java132
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwXFootnoteText.java176
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwXFootnotes.java134
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwXFrames.java143
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwXHeadFootText.java198
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwXLineNumberingProperties.java119
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwXMailMerge.java439
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwXModule.java90
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwXNumberingRules.java178
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwXParagraph.java279
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwXParagraphEnumeration.java154
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwXPrintSettings.java110
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwXPropertySet.java85
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwXPropertySetInfo.java97
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwXReferenceMark.java142
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwXReferenceMarks.java164
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwXShape.java133
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwXStyle.java248
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwXStyleFamilies.java111
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwXStyleFamily.java197
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwXTableCellText.java172
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwXTableColumns.java136
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwXTableRows.java128
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwXTextColumns.java184
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwXTextCursor.java316
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwXTextDefaults.java123
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwXTextDocument.java268
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwXTextEmbeddedObject.java173
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwXTextEmbeddedObjects.java137
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwXTextField.java168
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwXTextFieldMasters.java140
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwXTextFieldTypes.java140
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwXTextFrame.java159
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwXTextFrameText.java156
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwXTextGraphicObject.java207
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwXTextGraphicObjects.java165
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwXTextPortion.java187
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwXTextPortionEnumeration.java161
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwXTextRange.java99
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwXTextRanges.java129
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwXTextSearch.java131
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwXTextSection.java187
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwXTextSections.java152
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwXTextTable.java261
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwXTextTableCursor.java124
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwXTextTableRow.java127
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwXTextTables.java154
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwXTextView.java297
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwXTextViewCursor.java122
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwXViewSettings.java112
-rw-r--r--qadevOOo/tests/java/mod/_sw/XMLContentExporter.java196
-rw-r--r--qadevOOo/tests/java/mod/_sw/XMLContentImporter.java178
-rw-r--r--qadevOOo/tests/java/mod/_sw/XMLExporter.java199
-rw-r--r--qadevOOo/tests/java/mod/_sw/XMLImporter.java171
-rw-r--r--qadevOOo/tests/java/mod/_sw/XMLMetaExporter.java200
-rw-r--r--qadevOOo/tests/java/mod/_sw/XMLMetaImporter.java189
-rw-r--r--qadevOOo/tests/java/mod/_sw/XMLSettingsExporter.java209
-rw-r--r--qadevOOo/tests/java/mod/_sw/XMLSettingsImporter.java208
-rw-r--r--qadevOOo/tests/java/mod/_sw/XMLStylesExporter.java203
-rw-r--r--qadevOOo/tests/java/mod/_sw/XMLStylesImporter.java188
-rw-r--r--qadevOOo/tests/java/mod/_sw/package.html6
-rw-r--r--qadevOOo/tests/java/mod/_sysdtrans/SystemClipboard.java60
-rw-r--r--qadevOOo/tests/java/mod/_sysdtrans/package.html6
-rw-r--r--qadevOOo/tests/java/mod/_syssh/SystemShellExecute.java60
-rw-r--r--qadevOOo/tests/java/mod/_tcv/TypeConverter.java71
-rw-r--r--qadevOOo/tests/java/mod/_tcv/package.html6
-rw-r--r--qadevOOo/tests/java/mod/_tdmgr/TypeDescriptionManager.java89
-rw-r--r--qadevOOo/tests/java/mod/_tdmgr/package.html6
-rw-r--r--qadevOOo/tests/java/mod/_text/DefaultNumberingProvider.java83
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/AccessibleButton.java246
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/AccessibleCheckBox.java261
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/AccessibleComboBox.java246
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/AccessibleDropDownComboBox.java139
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/AccessibleDropDownListBox.java154
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/AccessibleEdit.java235
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/AccessibleFixedText.java209
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/AccessibleList.java237
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/AccessibleListBox.java250
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/AccessibleListItem.java241
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/AccessibleMenu.java196
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/AccessibleMenuBar.java156
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/AccessibleMenuItem.java203
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/AccessibleMenuSeparator.java170
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/AccessiblePopupMenu.java230
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/AccessibleRadioButton.java310
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/AccessibleScrollBar.java186
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/AccessibleStatusBar.java182
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/AccessibleStatusBarItem.java197
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/AccessibleTabControl.java282
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/AccessibleTabPage.java292
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/AccessibleToolBox.java188
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/AccessibleToolBoxItem.java207
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/AccessibleWindow.java207
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/MutableTreeDataModel.java105
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/MutableTreeNode.java191
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/TabController.java143
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/TabControllerModel.java105
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/Toolkit.java142
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/UnoControlButton.java156
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/UnoControlButtonModel.java87
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/UnoControlCheckBox.java164
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/UnoControlCheckBoxModel.java87
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/UnoControlComboBox.java160
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/UnoControlComboBoxModel.java84
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/UnoControlContainer.java252
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/UnoControlContainerModel.java66
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/UnoControlCurrencyField.java162
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/UnoControlCurrencyFieldModel.java85
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/UnoControlDateField.java166
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/UnoControlDateFieldModel.java84
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/UnoControlDialog.java254
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/UnoControlDialogModel.java189
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/UnoControlEdit.java161
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/UnoControlEditModel.java84
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/UnoControlFileControl.java162
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/UnoControlFileControlModel.java84
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/UnoControlFixedLineModel.java97
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/UnoControlFixedText.java152
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/UnoControlFixedTextModel.java84
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/UnoControlFormattedField.java167
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/UnoControlFormattedFieldModel.java85
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/UnoControlGroupBox.java151
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/UnoControlGroupBoxModel.java84
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/UnoControlImageControl.java160
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/UnoControlImageControlModel.java62
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/UnoControlListBox.java161
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/UnoControlListBoxModel.java84
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/UnoControlNumericField.java171
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/UnoControlNumericFieldModel.java84
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/UnoControlPatternField.java162
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/UnoControlPatternFieldModel.java62
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/UnoControlProgressBarModel.java94
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/UnoControlRadioButton.java152
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/UnoControlRadioButtonModel.java62
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/UnoControlScrollBarModel.java97
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/UnoControlTimeField.java162
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/UnoControlTimeFieldModel.java62
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/UnoScrollBarControl.java179
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/UnoSpinButtonControl.java149
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/UnoSpinButtonControlModel.java69
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/UnoTreeControl.java303
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/UnoTreeModel.java84
-rw-r--r--qadevOOo/tests/java/mod/_toolkit/package.html6
-rw-r--r--qadevOOo/tests/java/mod/_typeconverter.uno/TypeConverter.java66
-rw-r--r--qadevOOo/tests/java/mod/_typeconverter.uno/package.html6
-rw-r--r--qadevOOo/tests/java/mod/_typemgr.uno/TypeDescriptionManager.java84
-rw-r--r--qadevOOo/tests/java/mod/_typemgr.uno/package.html6
-rw-r--r--qadevOOo/tests/java/mod/_ucb/UcbContentProviderProxyFactory.java77
-rw-r--r--qadevOOo/tests/java/mod/_ucb/UcbPropertiesManager.java68
-rw-r--r--qadevOOo/tests/java/mod/_ucb/UcbStore.java77
-rw-r--r--qadevOOo/tests/java/mod/_ucb/UniversalContentBroker.java88
-rw-r--r--qadevOOo/tests/java/mod/_ucpchelp/CHelpContentProvider.java82
-rw-r--r--qadevOOo/tests/java/mod/_ucpdav/WebDAVContentProvider.java90
-rw-r--r--qadevOOo/tests/java/mod/_ucpfile/FileProvider.java80
-rw-r--r--qadevOOo/tests/java/mod/_ucpftp/FTPContentProvider.java81
-rw-r--r--qadevOOo/tests/java/mod/_ucphier/HierarchyContentProvider.java80
-rw-r--r--qadevOOo/tests/java/mod/_ucphier/HierarchyDataSource.java68
-rw-r--r--qadevOOo/tests/java/mod/_ucppkg/PackageContentProvider.java83
-rw-r--r--qadevOOo/tests/java/mod/_ucprmt/ContentProvider.java118
-rw-r--r--qadevOOo/tests/java/mod/_ucprmt/ProviderAcceptor.java72
-rw-r--r--qadevOOo/tests/java/mod/_ucprmt/ProxyProvider.java81
-rw-r--r--qadevOOo/tests/java/mod/_uui/UUIInteractionHandler.java82
-rw-r--r--qadevOOo/tests/java/mod/_uuresolver.uno/UnoUrlResolver.java68
-rw-r--r--qadevOOo/tests/java/mod/_uuresolver.uno/package.html6
-rw-r--r--qadevOOo/tests/java/mod/_uuresolver/UnoUrlResolver.java81
-rw-r--r--qadevOOo/tests/java/mod/_uuresolver/package.html6
-rw-r--r--qadevOOo/tests/java/mod/_xmloff/Chart/XMLContentExporter.java201
-rw-r--r--qadevOOo/tests/java/mod/_xmloff/Chart/XMLContentImporter.java206
-rw-r--r--qadevOOo/tests/java/mod/_xmloff/Chart/XMLExporter.java204
-rw-r--r--qadevOOo/tests/java/mod/_xmloff/Chart/XMLImporter.java204
-rw-r--r--qadevOOo/tests/java/mod/_xmloff/Chart/XMLStylesExporter.java191
-rw-r--r--qadevOOo/tests/java/mod/_xmloff/Chart/XMLStylesImporter.java185
-rw-r--r--qadevOOo/tests/java/mod/_xmloff/Draw/XMLContentExporter.java215
-rw-r--r--qadevOOo/tests/java/mod/_xmloff/Draw/XMLContentImporter.java211
-rw-r--r--qadevOOo/tests/java/mod/_xmloff/Draw/XMLExporter.java215
-rw-r--r--qadevOOo/tests/java/mod/_xmloff/Draw/XMLImporter.java211
-rw-r--r--qadevOOo/tests/java/mod/_xmloff/Draw/XMLMetaExporter.java205
-rw-r--r--qadevOOo/tests/java/mod/_xmloff/Draw/XMLMetaImporter.java189
-rw-r--r--qadevOOo/tests/java/mod/_xmloff/Draw/XMLSettingsExporter.java211
-rw-r--r--qadevOOo/tests/java/mod/_xmloff/Draw/XMLSettingsImporter.java199
-rw-r--r--qadevOOo/tests/java/mod/_xmloff/Draw/XMLStylesExporter.java214
-rw-r--r--qadevOOo/tests/java/mod/_xmloff/Draw/XMLStylesImporter.java197
-rw-r--r--qadevOOo/tests/java/mod/_xmloff/Impress/XMLContentExporter.java207
-rw-r--r--qadevOOo/tests/java/mod/_xmloff/Impress/XMLContentImporter.java221
-rw-r--r--qadevOOo/tests/java/mod/_xmloff/Impress/XMLExporter.java210
-rw-r--r--qadevOOo/tests/java/mod/_xmloff/Impress/XMLImporter.java180
-rw-r--r--qadevOOo/tests/java/mod/_xmloff/Impress/XMLMetaExporter.java206
-rw-r--r--qadevOOo/tests/java/mod/_xmloff/Impress/XMLMetaImporter.java189
-rw-r--r--qadevOOo/tests/java/mod/_xmloff/Impress/XMLSettingsExporter.java219
-rw-r--r--qadevOOo/tests/java/mod/_xmloff/Impress/XMLSettingsImporter.java213
-rw-r--r--qadevOOo/tests/java/mod/_xmloff/Impress/XMLStylesExporter.java209
-rw-r--r--qadevOOo/tests/java/mod/_xmloff/Impress/XMLStylesImporter.java202
-rw-r--r--rdbmaker/inc/codemaker/dependency.hxx170
-rw-r--r--rdbmaker/inc/codemaker/global.hxx138
-rw-r--r--rdbmaker/inc/codemaker/options.hxx98
-rw-r--r--rdbmaker/inc/codemaker/registry.hxx208
-rw-r--r--rdbmaker/inc/codemaker/typemanager.hxx172
-rw-r--r--rdbmaker/prj/build.lst6
-rw-r--r--rdbmaker/prj/d.lst4
-rw-r--r--rdbmaker/source/codemaker/dependency.cxx301
-rw-r--r--rdbmaker/source/codemaker/global.cxx171
-rw-r--r--rdbmaker/source/codemaker/makefile.mk55
-rw-r--r--rdbmaker/source/codemaker/options.cxx67
-rw-r--r--rdbmaker/source/codemaker/typemanager.cxx273
-rw-r--r--rdbmaker/source/rdbmaker/makefile.mk63
-rw-r--r--rdbmaker/source/rdbmaker/rdbmaker.cxx508
-rw-r--r--rdbmaker/source/rdbmaker/rdboptions.cxx381
-rw-r--r--rdbmaker/source/rdbmaker/rdboptions.hxx57
-rw-r--r--rdbmaker/source/rdbmaker/rdbtype.cxx195
-rw-r--r--rdbmaker/source/rdbmaker/rdbtype.hxx52
-rw-r--r--rdbmaker/source/rdbmaker/specialtypemanager.cxx101
-rw-r--r--rdbmaker/source/rdbmaker/specialtypemanager.hxx71
-rw-r--r--rdbmaker/source/rdbmaker/typeblop.cxx535
-rwxr-xr-xreadlicense_oo/docs/readme.dtd33
-rw-r--r--readlicense_oo/docs/readme.xsl173
-rw-r--r--readlicense_oo/docs/readme/eval.xsl91
-rwxr-xr-xreadlicense_oo/docs/readme/makefile.mk44
-rwxr-xr-xreadlicense_oo/docs/readme/readme.xrm309
-rw-r--r--readlicense_oo/html/THIRDPARTYLICENSEREADME.html9925
-rw-r--r--readlicense_oo/html/makefile.mk47
-rwxr-xr-xreadlicense_oo/makefile.mk48
-rw-r--r--readlicense_oo/prj/build.lst6
-rw-r--r--readlicense_oo/prj/d.lst35
-rw-r--r--readlicense_oo/source/license/license_en-US.html875
-rw-r--r--readlicense_oo/source/license/license_en-US.rtf374
-rw-r--r--readlicense_oo/source/license/license_en-US.txt858
-rwxr-xr-xreadlicense_oo/util/makefile.pmk86
-rw-r--r--redland/LICENSE.txt11
-rw-r--r--redland/README38
-rw-r--r--redland/prj/build.lst5
-rw-r--r--redland/prj/d.lst19
-rw-r--r--redland/raptor/makefile.mk164
-rw-r--r--redland/raptor/raptor-1.4.18.patch.autotools46
-rw-r--r--redland/raptor/raptor-1.4.18.patch.dmake124
-rw-r--r--redland/raptor/raptor-1.4.18.patch.legal18
-rw-r--r--redland/raptor/raptor-1.4.18.patch.mingw30
-rw-r--r--redland/raptor/raptor-1.4.18.patch.ooo_build43
-rw-r--r--redland/raptor/raptor-1.4.18.patch.win3278
-rw-r--r--redland/raptor/raptor2.map294
-rw-r--r--redland/rasqal/makefile.mk159
-rw-r--r--redland/rasqal/rasqal-0.9.16.patch.autotools38
-rw-r--r--redland/rasqal/rasqal-0.9.16.patch.dmake98
-rw-r--r--redland/rasqal/rasqal-0.9.16.patch.legal18
-rw-r--r--redland/rasqal/rasqal-0.9.16.patch.ooo_build56
-rw-r--r--redland/rasqal/rasqal-0.9.16.patch.win3243
-rw-r--r--redland/rasqal/rasqal2.map194
-rw-r--r--redland/redland/makefile.mk160
-rw-r--r--redland/redland/redland-1.0.8.patch.autotools58
-rw-r--r--redland/redland/redland-1.0.8.patch.dmake115
-rw-r--r--redland/redland/redland-1.0.8.patch.legal54
-rw-r--r--redland/redland/redland-1.0.8.patch.ooo_build22
-rw-r--r--redland/redland/redland-1.0.8.patch.win32154
-rw-r--r--redland/redland/redland2.map316
-rw-r--r--redland/redlandversion.mk32
-rw-r--r--regexp/inc/makefile.mk47
-rw-r--r--regexp/inc/pch/precompiled_regexp.cxx29
-rw-r--r--regexp/inc/pch/precompiled_regexp.hxx32
-rw-r--r--regexp/orig/regex.c5880
-rw-r--r--regexp/orig/regex.h542
-rw-r--r--regexp/prj/build.lst4
-rw-r--r--regexp/prj/d.lst8
-rw-r--r--regexp/source/makefile.mk70
-rw-r--r--regexp/source/reclass.cxx2947
-rw-r--r--regexp/source/reclass.hxx395
-rw-r--r--registry/inc/makefile.mk47
-rw-r--r--registry/inc/pch/precompiled_registry.cxx29
-rw-r--r--registry/inc/pch/precompiled_registry.hxx32
-rw-r--r--registry/inc/registry/reader.h610
-rw-r--r--registry/inc/registry/reader.hxx632
-rw-r--r--registry/inc/registry/reflread.hxx519
-rw-r--r--registry/inc/registry/refltype.hxx86
-rw-r--r--registry/inc/registry/reflwrit.hxx355
-rw-r--r--registry/inc/registry/registry.h477
-rw-r--r--registry/inc/registry/registry.hxx1258
-rw-r--r--registry/inc/registry/regtype.h179
-rw-r--r--registry/inc/registry/types.h340
-rw-r--r--registry/inc/registry/version.h77
-rw-r--r--registry/inc/registry/writer.h269
-rw-r--r--registry/inc/registry/writer.hxx303
-rw-r--r--registry/prj/build.lst7
-rw-r--r--registry/prj/d.lst19
-rw-r--r--registry/source/keyimpl.cxx1078
-rw-r--r--registry/source/keyimpl.hxx151
-rw-r--r--registry/source/makefile.mk53
-rw-r--r--registry/source/reflcnst.hxx295
-rw-r--r--registry/source/reflread.cxx1774
-rw-r--r--registry/source/reflwrit.cxx1491
-rw-r--r--registry/source/regimpl.cxx1760
-rw-r--r--registry/source/regimpl.hxx184
-rw-r--r--registry/source/registry.cxx632
-rw-r--r--registry/source/regkey.cxx1022
-rw-r--r--registry/source/regkey.hxx80
-rw-r--r--registry/test/makefile.mk90
-rw-r--r--registry/test/regcompare/makefile.mk107
-rw-r--r--registry/test/regcompare/other1.idl1
-rw-r--r--registry/test/regcompare/other2.idl1
-rw-r--r--registry/test/regcompare/pe.idl1
-rw-r--r--registry/test/regcompare/psa.idl1
-rw-r--r--registry/test/regcompare/psb.idl1
-rw-r--r--registry/test/regcompare/ue.idl1
-rw-r--r--registry/test/regcompare/usa.idl1
-rw-r--r--registry/test/regcompare/usb.idl1
-rw-r--r--registry/test/regdiagnose.h44
-rw-r--r--registry/test/testmerge.cxx422
-rw-r--r--registry/test/testregcpp.cxx707
-rw-r--r--registry/tools/checksingleton.cxx483
-rw-r--r--registry/tools/makefile.mk80
-rw-r--r--registry/tools/regcompare.cxx2399
-rw-r--r--registry/tools/regmerge.cxx282
-rw-r--r--registry/tools/regview.cxx161
-rw-r--r--registry/util/makefile.mk76
-rw-r--r--registry/util/reg.map88
-rw-r--r--registry/version.mk39
-rw-r--r--registry/workben/makefile.mk86
-rw-r--r--registry/workben/regspeed.cxx271
-rw-r--r--registry/workben/regtest.cxx340
-rw-r--r--registry/workben/test.cxx54
-rw-r--r--remotebridges/examples/exports.dxp3
-rw-r--r--remotebridges/examples/makefile.mk62
-rw-r--r--remotebridges/examples/officeclient.cxx333
-rw-r--r--remotebridges/prj/build.lst6
-rw-r--r--remotebridges/prj/d.lst17
-rw-r--r--remotebridges/source/bridge/bridge_connection.cxx139
-rw-r--r--remotebridges/source/bridge/bridge_connection.hxx57
-rw-r--r--remotebridges/source/bridge/bridge_provider.cxx179
-rw-r--r--remotebridges/source/bridge/makefile.mk64
-rw-r--r--remotebridges/source/bridge/remote_bridge.cxx476
-rw-r--r--remotebridges/source/bridge/remote_bridge.hxx147
-rw-r--r--remotebridges/source/bridge/remotebridge.xml47
-rw-r--r--remotebridges/source/dynamicloader/dynamicloader.cxx431
-rw-r--r--remotebridges/source/dynamicloader/dynamicloader.xml36
-rwxr-xr-xremotebridges/source/dynamicloader/makefile.mk69
-rw-r--r--remotebridges/source/factory/brdgfctr.xml44
-rw-r--r--remotebridges/source/factory/bridgefactory.cxx499
-rw-r--r--remotebridges/source/factory/bridgeimpl.cxx270
-rw-r--r--remotebridges/source/factory/bridgeimpl.hxx106
-rw-r--r--remotebridges/source/factory/makefile.mk66
-rw-r--r--remotebridges/source/unourl_resolver/makefile.mk64
-rw-r--r--remotebridges/source/unourl_resolver/unourl_resolver.cxx253
-rw-r--r--remotebridges/source/unourl_resolver/uuresolver.xml38
-rw-r--r--reportbuilder/java/com/sun/star/report/DataRow.java46
-rw-r--r--reportbuilder/java/com/sun/star/report/DataSource.java48
-rw-r--r--reportbuilder/java/com/sun/star/report/DataSourceException.java94
-rw-r--r--reportbuilder/java/com/sun/star/report/DataSourceFactory.java43
-rw-r--r--reportbuilder/java/com/sun/star/report/ImageService.java70
-rw-r--r--reportbuilder/java/com/sun/star/report/InputRepository.java88
-rw-r--r--reportbuilder/java/com/sun/star/report/JobDefinitionException.java64
-rw-r--r--reportbuilder/java/com/sun/star/report/JobProgressIndicator.java79
-rw-r--r--reportbuilder/java/com/sun/star/report/JobProperties.java45
-rw-r--r--reportbuilder/java/com/sun/star/report/OfficeToken.java65
-rw-r--r--reportbuilder/java/com/sun/star/report/OutputRepository.java71
-rw-r--r--reportbuilder/java/com/sun/star/report/ParameterMap.java68
-rw-r--r--reportbuilder/java/com/sun/star/report/ReportAddIn.java45
-rw-r--r--reportbuilder/java/com/sun/star/report/ReportEngine.java56
-rw-r--r--reportbuilder/java/com/sun/star/report/ReportEngineMetaData.java59
-rw-r--r--reportbuilder/java/com/sun/star/report/ReportEngineParameterNames.java55
-rw-r--r--reportbuilder/java/com/sun/star/report/ReportExecutionException.java86
-rw-r--r--reportbuilder/java/com/sun/star/report/ReportExpression.java51
-rw-r--r--reportbuilder/java/com/sun/star/report/ReportExpressionMetaData.java47
-rw-r--r--reportbuilder/java/com/sun/star/report/ReportFunction.java44
-rw-r--r--reportbuilder/java/com/sun/star/report/ReportJob.java91
-rw-r--r--reportbuilder/java/com/sun/star/report/ReportJobDefinition.java57
-rw-r--r--reportbuilder/java/com/sun/star/report/ReportJobFactory.java41
-rw-r--r--reportbuilder/java/com/sun/star/report/SDBCReportData.java381
-rw-r--r--reportbuilder/java/com/sun/star/report/SDBCReportDataFactory.java591
-rw-r--r--reportbuilder/java/com/sun/star/report/SOImageService.java189
-rw-r--r--reportbuilder/java/com/sun/star/report/StorageRepository.java353
-rw-r--r--reportbuilder/java/com/sun/star/report/function/metadata/Author-Function.properties30
-rw-r--r--reportbuilder/java/com/sun/star/report/function/metadata/Author-Function_en_US.properties30
-rw-r--r--reportbuilder/java/com/sun/star/report/function/metadata/AuthorFunction.java61
-rw-r--r--reportbuilder/java/com/sun/star/report/function/metadata/AuthorFunctionDescription.java70
-rw-r--r--reportbuilder/java/com/sun/star/report/function/metadata/MetaDataFunctionCategory.java46
-rw-r--r--reportbuilder/java/com/sun/star/report/function/metadata/Title-Function.properties30
-rw-r--r--reportbuilder/java/com/sun/star/report/function/metadata/Title-Function_en_US.properties30
-rw-r--r--reportbuilder/java/com/sun/star/report/function/metadata/TitleFunction.java65
-rw-r--r--reportbuilder/java/com/sun/star/report/function/metadata/TitleFunctionDescription.java70
-rw-r--r--reportbuilder/java/com/sun/star/report/function/metadata/category.properties30
-rw-r--r--reportbuilder/java/com/sun/star/report/function/metadata/category_en_US.properties30
-rw-r--r--reportbuilder/java/com/sun/star/report/function/metadata/makefile.mk64
-rw-r--r--reportbuilder/java/com/sun/star/report/makefile.mk74
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/DefaultNameGenerator.java156
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/Manifest.mf7
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/OfficeNamespaces.java72
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/PentahoFormulaContext.java97
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/PentahoReportAddIn.java60
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/PentahoReportEngine.java72
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/PentahoReportEngineMetaData.java147
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/PentahoReportJob.java419
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/SOFormulaOpCodeMapper.java153
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/SOFormulaParser.java446
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/SOFunctionManager.java172
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/SOReportJobFactory.java448
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/StarFunctionCategory.java161
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/StarFunctionDescription.java194
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/StarReportData.java168
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/StarReportDataFactory.java125
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/StarReportModule.java56
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/configuration.properties156
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/expressions/SumExpression.java56
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/expressions/SumExpressionMetaData.java78
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/AbstractReportElementLayoutController.java269
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/FixedTextLayoutController.java85
-rwxr-xr-xreportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/FormatValueUtility.java222
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/FormattedTextLayoutController.java229
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/ImageElementContext.java90
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/ImageElementLayoutController.java325
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/ObjectOleLayoutController.java124
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/OfficeDetailLayoutController.java159
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/OfficeGroupInstanceSectionLayoutController.java153
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/OfficeGroupLayoutController.java204
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/OfficeGroupSectionLayoutController.java109
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/OfficePageSectionLayoutController.java30
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/OfficeRepeatingStructureLayoutController.java43
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/OfficeReportLayoutController.java270
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/OfficeTableLayoutController.java79
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/OfficeTableTemplateLayoutController.java189
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/TableCellLayoutController.java214
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/VariablesCollection.java97
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/layoutprocessor/VariablesDeclarationLayoutController.java191
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/loader/InputRepositoryLoader.java172
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/loader/InputRepositoryResourceData.java85
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/loader/InputResourceKey.java63
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/makefile.mk135
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/model/DataStyle.java55
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/model/FixedTextElement.java52
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/model/FontFaceDeclsSection.java74
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/model/FontFaceElement.java55
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/model/FormatCondition.java67
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/model/FormattedTextElement.java58
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/model/ImageElement.java87
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/model/ObjectOleElement.java88
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/model/OfficeDetailSection.java43
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/model/OfficeDocument.java73
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/model/OfficeGroup.java94
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/model/OfficeGroupInstanceSection.java16
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/model/OfficeGroupSection.java54
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/model/OfficeMasterPage.java66
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/model/OfficeMasterStyles.java83
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/model/OfficeReport.java148
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/model/OfficeStyle.java130
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/model/OfficeStyles.java198
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/model/OfficeStylesCollection.java123
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/model/OfficeTableSection.java42
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/model/PageLayout.java68
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/model/PageSection.java60
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/model/RawText.java46
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/model/ReportElement.java110
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/model/TableCellElement.java43
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/model/VariablesDeclarationSection.java52
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/module.properties45
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/oasis-datastyle.css5
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/oasis-draw.css5
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/oasis-form.css5
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/oasis-style.css10
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/oasis-table.css37
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/oasis-text.css9
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/output/ImageProducer.java498
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/output/OfficeDocumentReportTarget.java1671
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/output/OleProducer.java139
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/output/StyleUtilities.java615
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/output/StylesWriter.java390
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/output/chart/ChartRawReportProcessor.java106
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/output/chart/ChartRawReportTarget.java286
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/output/spreadsheet/SpreadsheetRawReportProcessor.java121
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/output/spreadsheet/SpreadsheetRawReportTarget.java968
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/output/text/MasterPageFactory.java417
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/output/text/PageBreakDefinition.java49
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/output/text/PageContext.java228
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/output/text/TextRawReportProcessor.java116
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/output/text/TextRawReportTarget.java1466
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/output/text/VariablesDeclarations.java108
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/parser/AttributeSpecification.java57
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/parser/ElementReadHandler.java91
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/parser/OfficeDocumentXmlResourceFactory.java51
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/parser/OfficeParserUtil.java191
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/parser/OfficeStylesXmlResourceFactory.java59
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/parser/StarStyleXmlFactoryModule.java62
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/parser/StarXmlFactoryModule.java62
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/parser/StyleMapper.java38
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/parser/chart/ChartReadHandler.java115
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/parser/data/DataStyleReadHandler.java130
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/parser/draw/ObjectOleReadHandler.java85
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/parser/office/BodyReadHandler.java91
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/parser/office/DocumentContentReadHandler.java236
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/parser/office/DocumentStylesReadHandler.java106
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/parser/office/FontFaceDeclsReadHandler.java117
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/parser/office/MasterStylesReadHandler.java125
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/parser/rpt-schema-v1.0-os.xsd414
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/ConditionalPrintExpressionReadHandler.java81
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/DetailRootTableReadHandler.java38
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/FixedContentReadHandler.java98
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/FormatConditionReadHandler.java100
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/FormattedTextReadHandler.java118
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/FunctionReadHandler.java116
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/GroupReadHandler.java182
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/GroupSectionReadHandler.java38
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/ImageReadHandler.java141
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/MasterDetailReadHandler.java109
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/ReportElementReadHandler.java109
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/ReportReadHandler.java239
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/RootTableReadHandler.java105
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/parser/rpt/SubDocumentReadHandler.java137
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/parser/selectors.properties113
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/parser/style-mapping.txt8
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/parser/style/FontFaceReadHandler.java56
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/parser/style/MasterPageReadHandler.java106
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/parser/style/OfficeStyleReadHandler.java105
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/parser/style/OfficeStylesReadHandler.java143
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/parser/style/PageLayoutReadHandler.java104
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/parser/style/StyleDefinitionReadHandler.java99
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/OneOfConstantsMapper.java77
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/draw/TextAreaVerticalAlignMapper.java45
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/fo/BackgroundColorMapper.java50
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/fo/BorderRightMapper.java55
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/fo/ColorMapper.java52
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/fo/FontSizeMapper.java46
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/fo/FontStyleMapper.java46
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/fo/FontWeightMapper.java46
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/fo/TextAlignMapper.java47
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/style/FontFamilyGenericMapper.java65
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/style/FontFamilyMapper.java65
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/style/FontNameMapper.java49
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/style/FontPitchMapper.java43
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/style/FontReliefMapper.java46
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/style/TextEmphasizeMapper.java45
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/style/TextUnderlineColorMapper.java54
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/style/TextUnderlineStyleMapper.java49
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/style/TextUnderlineWidthMapper.java76
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/style/TextUnderlineWordMode.java43
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/style/VerticalAlignMapper.java47
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/table/ColumnWidthMapper.java53
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/parser/stylemapper/table/RowHeightMapper.java53
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/parser/table/CoveredCellReadHandler.java54
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/parser/table/TableCellReadHandler.java46
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/parser/table/TableColumnReadHandler.java53
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/parser/table/TableColumnsReadHandler.java103
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/parser/table/TableReadHandler.java145
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/parser/table/TableRowReadHandler.java126
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/parser/table/TableRowsReadHandler.java102
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/parser/text/NoCDATATextContentReadHandler.java168
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/parser/text/TextContentReadHandler.java70
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/parser/xlink/XLinkReadHandler.java97
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/smil.css5
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/star-office.css5
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/star-report.css73
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/star-rpt.css5
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/styles/LengthCalculator.java110
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/styles/StyleMapper.java96
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/styles/StyleMapperKey.java118
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/styles/StyleMapperXmlFactoryModule.java70
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/styles/StyleMapperXmlResourceFactory.java56
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/styles/StyleMappingDocumentReadHandler.java107
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/styles/StyleMappingReadHandler.java101
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/styles/StyleMappingRule.java64
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/styles/stylemapper.xml168
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/styles/stylemapper.xsd91
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/svg.css5
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/xsl-fo.css5
-rw-r--r--reportbuilder/java/com/sun/star/report/util/DefaultJobProperties.java80
-rw-r--r--reportbuilder/java/com/sun/star/report/util/DefaultParameterMap.java123
-rw-r--r--reportbuilder/java/com/sun/star/report/util/DefaultReportJobDefinition.java116
-rw-r--r--reportbuilder/java/com/sun/star/report/util/ManifestWriter.java123
-rw-r--r--reportbuilder/java/com/sun/star/report/util/ReportUtil.java46
-rw-r--r--reportbuilder/java/com/sun/star/report/util/makefile.mk45
-rw-r--r--reportbuilder/java/jfreereport.properties30
-rw-r--r--reportbuilder/java/libformula.properties43
-rw-r--r--reportbuilder/java/loader.properties31
-rw-r--r--reportbuilder/java/makefile.mk45
-rw-r--r--reportbuilder/license/THIRDPARTYREADMELICENSE.html768
-rw-r--r--reportbuilder/license/readme_en-US.html30
-rw-r--r--reportbuilder/license/readme_en-US.txt34
-rw-r--r--reportbuilder/prj/build.lst16
-rw-r--r--reportbuilder/prj/d.lst12
-rw-r--r--reportbuilder/prj/rpt.xml14
-rw-r--r--reportbuilder/registry/data/org/openoffice/Office/Accelerators.xcu156
-rw-r--r--reportbuilder/registry/data/org/openoffice/Office/DataAccess.xcu44
-rw-r--r--reportbuilder/registry/data/org/openoffice/Office/Embedding.xcu71
-rw-r--r--reportbuilder/registry/data/org/openoffice/Office/ExtendedColorScheme.xcu195
-rw-r--r--reportbuilder/registry/data/org/openoffice/Office/Paths.xcu39
-rw-r--r--reportbuilder/registry/data/org/openoffice/Office/ReportDesign.xcu34
-rw-r--r--reportbuilder/registry/data/org/openoffice/Office/UI/Controller.xcu167
-rw-r--r--reportbuilder/registry/data/org/openoffice/Office/UI/DbReportWindowState.xcu154
-rw-r--r--reportbuilder/registry/data/org/openoffice/Office/UI/ReportCommands.xcu403
-rw-r--r--reportbuilder/registry/data/org/openoffice/Office/UI/makefile.mk48
-rw-r--r--reportbuilder/registry/data/org/openoffice/Office/makefile.mk68
-rw-r--r--reportbuilder/registry/data/org/openoffice/Setup.xcu54
-rw-r--r--reportbuilder/registry/data/org/openoffice/TypeDetection/Filter.xcu76
-rw-r--r--reportbuilder/registry/data/org/openoffice/TypeDetection/Types.xcu81
-rw-r--r--reportbuilder/registry/data/org/openoffice/TypeDetection/makefile.mk55
-rw-r--r--reportbuilder/registry/data/org/openoffice/makefile.mk50
-rw-r--r--reportbuilder/registry/schema/org/openoffice/Office/ReportDesign.xcs71
-rw-r--r--reportbuilder/registry/schema/org/openoffice/Office/UI/DbReportWindowState.xcs48
-rw-r--r--reportbuilder/registry/schema/org/openoffice/Office/UI/ReportCommands.xcs53
-rw-r--r--reportbuilder/registry/schema/org/openoffice/Office/UI/makefile.mk58
-rw-r--r--reportbuilder/registry/schema/org/openoffice/Office/makefile.mk46
-rw-r--r--reportbuilder/template/delzip0
-rw-r--r--reportbuilder/template/en-US/wizard/report/default.otrbin0 -> 2561 bytes
-rw-r--r--reportbuilder/template/en-US/wizard/report/makefile.mk69
-rw-r--r--reportbuilder/template/makefile.mk122
-rw-r--r--reportbuilder/template/manifest.xml3
-rw-r--r--reportbuilder/template/post.xml8
-rw-r--r--reportbuilder/template/pre.xml6
-rw-r--r--reportbuilder/template/registry/data/org/openoffice/Office/Paths.xcu40
-rw-r--r--reportbuilder/template/registry/data/org/openoffice/Office/makefile.mk49
-rw-r--r--reportbuilder/template/wizard/report/default.odr1
-rw-r--r--reportbuilder/template/wizard/report/finance.odr1
-rw-r--r--reportbuilder/template/wizard/report/finance_2.odr1
-rw-r--r--reportbuilder/template/wizard/report/makefile.mk69
-rw-r--r--reportbuilder/template/wizard/report/yellow.odr1
-rwxr-xr-xreportbuilder/util/component.txt1
-rw-r--r--reportbuilder/util/delzip1
-rwxr-xr-xreportbuilder/util/description.xml30
-rw-r--r--reportbuilder/util/hidother.src146
-rwxr-xr-xreportbuilder/util/makefile.mk155
-rw-r--r--reportbuilder/util/makefile.pmk66
-rw-r--r--reportbuilder/util/manifest.xml5
-rw-r--r--reportbuilder/util/target.pmk34
-rw-r--r--reportdesign/images/em42.pngbin0 -> 1965 bytes
-rw-r--r--reportdesign/images/em42_hc.pngbin0 -> 1160 bytes
-rw-r--r--reportdesign/inc/ModuleHelper.hxx100
-rw-r--r--reportdesign/inc/PropertyForward.hxx92
-rw-r--r--reportdesign/inc/ReportDefinition.hxx395
-rw-r--r--reportdesign/inc/ReportHelperDefines.hxx195
-rw-r--r--reportdesign/inc/ReportVisitor.hxx67
-rw-r--r--reportdesign/inc/RptDef.hxx120
-rw-r--r--reportdesign/inc/RptModel.hxx103
-rw-r--r--reportdesign/inc/RptObject.hxx286
-rw-r--r--reportdesign/inc/RptPage.hxx98
-rw-r--r--reportdesign/inc/RptResId.hrc298
-rw-r--r--reportdesign/inc/UndoActions.hxx300
-rw-r--r--reportdesign/inc/UndoEnv.hxx150
-rw-r--r--reportdesign/inc/conditionalexpression.hxx123
-rw-r--r--reportdesign/inc/dllapi.h41
-rw-r--r--reportdesign/inc/helpids.hrc130
-rw-r--r--reportdesign/inc/makefile.mk47
-rw-r--r--reportdesign/inc/pch/precompiled_reportdesign.cxx29
-rw-r--r--reportdesign/inc/pch/precompiled_reportdesign.hxx45
-rw-r--r--reportdesign/inc/reportformula.hxx134
-rw-r--r--reportdesign/inc/rptui_slotid.hrc212
-rw-r--r--reportdesign/prj/build.lst15
-rw-r--r--reportdesign/prj/d.lst21
-rw-r--r--reportdesign/prj/rpt.xml14
-rwxr-xr-xreportdesign/qa/complex/RPTCalcTests.odbbin0 -> 6715 bytes
-rwxr-xr-xreportdesign/qa/complex/RPTWriterTests.odbbin0 -> 5886 bytes
-rwxr-xr-xreportdesign/qa/complex/ReportDesignerTest.java608
-rwxr-xr-xreportdesign/qa/complex/makefile.mk58
-rw-r--r--reportdesign/qa/complex/mysql-connector-exists.pl9
-rwxr-xr-xreportdesign/qa/complex/runner.props22
-rw-r--r--reportdesign/source/core/api/FixedLine.cxx585
-rw-r--r--reportdesign/source/core/api/FixedText.cxx347
-rw-r--r--reportdesign/source/core/api/FormatCondition.cxx166
-rw-r--r--reportdesign/source/core/api/FormattedField.cxx387
-rw-r--r--reportdesign/source/core/api/Function.cxx222
-rw-r--r--reportdesign/source/core/api/Functions.cxx204
-rw-r--r--reportdesign/source/core/api/Group.cxx357
-rw-r--r--reportdesign/source/core/api/Groups.cxx217
-rw-r--r--reportdesign/source/core/api/ImageControl.cxx505
-rw-r--r--reportdesign/source/core/api/ReportComponent.cxx153
-rw-r--r--reportdesign/source/core/api/ReportControlModel.cxx158
-rw-r--r--reportdesign/source/core/api/ReportDefinition.cxx2939
-rw-r--r--reportdesign/source/core/api/ReportEngineJFree.cxx426
-rw-r--r--reportdesign/source/core/api/ReportVisitor.cxx93
-rw-r--r--reportdesign/source/core/api/Section.cxx723
-rw-r--r--reportdesign/source/core/api/Shape.cxx522
-rw-r--r--reportdesign/source/core/api/Tools.cxx77
-rw-r--r--reportdesign/source/core/api/makefile.mk63
-rw-r--r--reportdesign/source/core/api/services.cxx99
-rw-r--r--reportdesign/source/core/inc/FixedLine.hxx175
-rw-r--r--reportdesign/source/core/inc/FixedText.hxx160
-rw-r--r--reportdesign/source/core/inc/FormatCondition.hxx117
-rw-r--r--reportdesign/source/core/inc/FormattedField.hxx167
-rw-r--r--reportdesign/source/core/inc/Function.hxx129
-rw-r--r--reportdesign/source/core/inc/Functions.hxx105
-rw-r--r--reportdesign/source/core/inc/Group.hxx163
-rw-r--r--reportdesign/source/core/inc/Groups.hxx108
-rw-r--r--reportdesign/source/core/inc/ImageControl.hxx164
-rw-r--r--reportdesign/source/core/inc/ReportComponent.hxx88
-rw-r--r--reportdesign/source/core/inc/ReportControlModel.hxx137
-rw-r--r--reportdesign/source/core/inc/ReportDrawPage.hxx50
-rw-r--r--reportdesign/source/core/inc/ReportEngineJFree.hxx138
-rw-r--r--reportdesign/source/core/inc/ReportHelperImpl.hxx1291
-rw-r--r--reportdesign/source/core/inc/ReportUndoFactory.hxx85
-rw-r--r--reportdesign/source/core/inc/RptObjectListener.hxx63
-rw-r--r--reportdesign/source/core/inc/Section.hxx208
-rw-r--r--reportdesign/source/core/inc/Shape.hxx182
-rw-r--r--reportdesign/source/core/inc/Tools.hxx183
-rw-r--r--reportdesign/source/core/inc/conditionupdater.hxx75
-rw-r--r--reportdesign/source/core/inc/core_resource.hrc59
-rw-r--r--reportdesign/source/core/inc/core_resource.hxx78
-rw-r--r--reportdesign/source/core/misc/conditionalexpression.cxx204
-rw-r--r--reportdesign/source/core/misc/conditionupdater.cxx135
-rw-r--r--reportdesign/source/core/misc/makefile.mk46
-rw-r--r--reportdesign/source/core/misc/reportformula.cxx183
-rw-r--r--reportdesign/source/core/resource/core_resource.cxx90
-rw-r--r--reportdesign/source/core/resource/makefile.mk48
-rw-r--r--reportdesign/source/core/resource/strings.src95
-rw-r--r--reportdesign/source/core/sdr/ModuleHelper.cxx141
-rw-r--r--reportdesign/source/core/sdr/PropertyForward.cxx205
-rw-r--r--reportdesign/source/core/sdr/ReportDrawPage.cxx156
-rw-r--r--reportdesign/source/core/sdr/ReportUndoFactory.cxx181
-rw-r--r--reportdesign/source/core/sdr/RptModel.cxx233
-rw-r--r--reportdesign/source/core/sdr/RptObject.cxx1256
-rw-r--r--reportdesign/source/core/sdr/RptObjectListener.cxx95
-rw-r--r--reportdesign/source/core/sdr/RptPage.cxx251
-rw-r--r--reportdesign/source/core/sdr/UndoActions.cxx449
-rw-r--r--reportdesign/source/core/sdr/UndoEnv.cxx629
-rw-r--r--reportdesign/source/core/sdr/formatnormalizer.cxx279
-rw-r--r--reportdesign/source/core/sdr/formatnormalizer.hxx94
-rw-r--r--reportdesign/source/core/sdr/makefile.mk52
-rw-r--r--reportdesign/source/filter/xml/dbloader2.cxx125
-rw-r--r--reportdesign/source/filter/xml/dbloader2.hxx102
-rw-r--r--reportdesign/source/filter/xml/makefile.mk70
-rw-r--r--reportdesign/source/filter/xml/xmlAutoStyle.cxx99
-rw-r--r--reportdesign/source/filter/xml/xmlAutoStyle.hxx61
-rw-r--r--reportdesign/source/filter/xml/xmlCell.cxx293
-rw-r--r--reportdesign/source/filter/xml/xmlCell.hxx74
-rw-r--r--reportdesign/source/filter/xml/xmlColumn.cxx190
-rw-r--r--reportdesign/source/filter/xml/xmlColumn.hxx64
-rw-r--r--reportdesign/source/filter/xml/xmlComponent.cxx117
-rw-r--r--reportdesign/source/filter/xml/xmlComponent.hxx60
-rw-r--r--reportdesign/source/filter/xml/xmlCondPrtExpr.cxx103
-rw-r--r--reportdesign/source/filter/xml/xmlCondPrtExpr.hxx58
-rw-r--r--reportdesign/source/filter/xml/xmlControlProperty.cxx360
-rw-r--r--reportdesign/source/filter/xml/xmlControlProperty.hxx86
-rw-r--r--reportdesign/source/filter/xml/xmlEnums.hxx179
-rw-r--r--reportdesign/source/filter/xml/xmlExport.cxx1672
-rw-r--r--reportdesign/source/filter/xml/xmlExport.hxx281
-rw-r--r--reportdesign/source/filter/xml/xmlExportDocumentHandler.cxx455
-rw-r--r--reportdesign/source/filter/xml/xmlExportDocumentHandler.hxx105
-rw-r--r--reportdesign/source/filter/xml/xmlFixedContent.cxx241
-rw-r--r--reportdesign/source/filter/xml/xmlFixedContent.hxx71
-rw-r--r--reportdesign/source/filter/xml/xmlFormatCondition.cxx118
-rw-r--r--reportdesign/source/filter/xml/xmlFormatCondition.hxx57
-rw-r--r--reportdesign/source/filter/xml/xmlFormattedField.cxx105
-rw-r--r--reportdesign/source/filter/xml/xmlFormattedField.hxx55
-rw-r--r--reportdesign/source/filter/xml/xmlFunction.cxx141
-rw-r--r--reportdesign/source/filter/xml/xmlFunction.hxx67
-rw-r--r--reportdesign/source/filter/xml/xmlGroup.cxx279
-rw-r--r--reportdesign/source/filter/xml/xmlGroup.hxx66
-rw-r--r--reportdesign/source/filter/xml/xmlHelper.cxx418
-rw-r--r--reportdesign/source/filter/xml/xmlHelper.hxx93
-rw-r--r--reportdesign/source/filter/xml/xmlImage.cxx130
-rw-r--r--reportdesign/source/filter/xml/xmlImage.hxx55
-rw-r--r--reportdesign/source/filter/xml/xmlImportDocumentHandler.cxx397
-rw-r--r--reportdesign/source/filter/xml/xmlImportDocumentHandler.hxx105
-rw-r--r--reportdesign/source/filter/xml/xmlMasterFields.cxx121
-rw-r--r--reportdesign/source/filter/xml/xmlMasterFields.hxx57
-rw-r--r--reportdesign/source/filter/xml/xmlPropertyHandler.cxx57
-rw-r--r--reportdesign/source/filter/xml/xmlPropertyHandler.hxx49
-rw-r--r--reportdesign/source/filter/xml/xmlReport.cxx236
-rw-r--r--reportdesign/source/filter/xml/xmlReport.hxx70
-rw-r--r--reportdesign/source/filter/xml/xmlReportElement.cxx143
-rw-r--r--reportdesign/source/filter/xml/xmlReportElement.hxx58
-rw-r--r--reportdesign/source/filter/xml/xmlReportElementBase.cxx115
-rw-r--r--reportdesign/source/filter/xml/xmlReportElementBase.hxx76
-rw-r--r--reportdesign/source/filter/xml/xmlRow.cxx184
-rw-r--r--reportdesign/source/filter/xml/xmlRow.hxx63
-rw-r--r--reportdesign/source/filter/xml/xmlSection.cxx158
-rw-r--r--reportdesign/source/filter/xml/xmlSection.hxx64
-rw-r--r--reportdesign/source/filter/xml/xmlStyleImport.cxx459
-rw-r--r--reportdesign/source/filter/xml/xmlStyleImport.hxx166
-rw-r--r--reportdesign/source/filter/xml/xmlSubDocument.cxx164
-rw-r--r--reportdesign/source/filter/xml/xmlSubDocument.hxx71
-rw-r--r--reportdesign/source/filter/xml/xmlTable.cxx323
-rw-r--r--reportdesign/source/filter/xml/xmlTable.hxx99
-rw-r--r--reportdesign/source/filter/xml/xmlfilter.cxx1137
-rw-r--r--reportdesign/source/filter/xml/xmlfilter.hxx247
-rw-r--r--reportdesign/source/filter/xml/xmlservices.cxx101
-rw-r--r--reportdesign/source/inc/GroupProperties.hxx54
-rw-r--r--reportdesign/source/inc/constasciistring.hxx61
-rw-r--r--reportdesign/source/inc/corestrings.hrc41
-rw-r--r--reportdesign/source/inc/stringconstants.hrc288
-rw-r--r--reportdesign/source/inc/uistrings.hrc78
-rw-r--r--reportdesign/source/inc/xmlstrings.hrc56
-rw-r--r--reportdesign/source/shared/corestrings.cxx35
-rw-r--r--reportdesign/source/shared/makefile.mk67
-rw-r--r--reportdesign/source/shared/stringconstants.cxx276
-rw-r--r--reportdesign/source/shared/uistrings.cxx69
-rw-r--r--reportdesign/source/shared/xmlstrings.cxx45
-rw-r--r--reportdesign/source/ui/dlg/AddField.cxx574
-rw-r--r--reportdesign/source/ui/dlg/CondFormat.cxx625
-rw-r--r--reportdesign/source/ui/dlg/CondFormat.hrc87
-rw-r--r--reportdesign/source/ui/dlg/CondFormat.src445
-rw-r--r--reportdesign/source/ui/dlg/Condition.cxx740
-rw-r--r--reportdesign/source/ui/dlg/Condition.hxx198
-rw-r--r--reportdesign/source/ui/dlg/DateTime.cxx273
-rw-r--r--reportdesign/source/ui/dlg/DateTime.hrc55
-rw-r--r--reportdesign/source/ui/dlg/DateTime.src128
-rw-r--r--reportdesign/source/ui/dlg/Formula.cxx273
-rw-r--r--reportdesign/source/ui/dlg/GroupExchange.cxx76
-rw-r--r--reportdesign/source/ui/dlg/GroupExchange.hxx53
-rw-r--r--reportdesign/source/ui/dlg/GroupsSorting.cxx1562
-rw-r--r--reportdesign/source/ui/dlg/GroupsSorting.hrc79
-rw-r--r--reportdesign/source/ui/dlg/GroupsSorting.src496
-rw-r--r--reportdesign/source/ui/dlg/Navigator.cxx986
-rw-r--r--reportdesign/source/ui/dlg/Navigator.src187
-rw-r--r--reportdesign/source/ui/dlg/PageNumber.cxx162
-rw-r--r--reportdesign/source/ui/dlg/PageNumber.hrc59
-rw-r--r--reportdesign/source/ui/dlg/PageNumber.src164
-rw-r--r--reportdesign/source/ui/dlg/dlgpage.cxx93
-rw-r--r--reportdesign/source/ui/dlg/dlgpage.src304
-rw-r--r--reportdesign/source/ui/dlg/makefile.mk77
-rw-r--r--reportdesign/source/ui/inc/AddField.hxx143
-rw-r--r--reportdesign/source/ui/inc/ColorChanger.hxx70
-rw-r--r--reportdesign/source/ui/inc/ColorListener.hxx84
-rw-r--r--reportdesign/source/ui/inc/ColumnInfo.hxx57
-rw-r--r--reportdesign/source/ui/inc/CondFormat.hxx186
-rw-r--r--reportdesign/source/ui/inc/DataProviderHandler.hxx129
-rw-r--r--reportdesign/source/ui/inc/DateTime.hxx109
-rw-r--r--reportdesign/source/ui/inc/DefaultInspection.hxx111
-rw-r--r--reportdesign/source/ui/inc/DesignView.hxx298
-rw-r--r--reportdesign/source/ui/inc/EndMarker.hxx53
-rw-r--r--reportdesign/source/ui/inc/FixedTextColor.hxx73
-rw-r--r--reportdesign/source/ui/inc/FormattedFieldBeautifier.hxx70
-rw-r--r--reportdesign/source/ui/inc/Formula.hxx112
-rw-r--r--reportdesign/source/ui/inc/FunctionHelper.hxx112
-rw-r--r--reportdesign/source/ui/inc/GeometryHandler.hxx321
-rw-r--r--reportdesign/source/ui/inc/GroupsSorting.hxx204
-rw-r--r--reportdesign/source/ui/inc/IReportControllerObserver.hxx54
-rw-r--r--reportdesign/source/ui/inc/InsertFunctions.hxx46
-rw-r--r--reportdesign/source/ui/inc/MarkedSection.hxx60
-rw-r--r--reportdesign/source/ui/inc/Navigator.hxx55
-rw-r--r--reportdesign/source/ui/inc/PageNumber.hxx88
-rw-r--r--reportdesign/source/ui/inc/ReportComponentHandler.hxx115
-rw-r--r--reportdesign/source/ui/inc/ReportController.hxx487
-rw-r--r--reportdesign/source/ui/inc/ReportControllerObserver.hxx132
-rw-r--r--reportdesign/source/ui/inc/ReportDefines.hxx39
-rw-r--r--reportdesign/source/ui/inc/ReportRuler.hxx63
-rw-r--r--reportdesign/source/ui/inc/ReportSection.hxx173
-rw-r--r--reportdesign/source/ui/inc/ReportWindow.hxx238
-rw-r--r--reportdesign/source/ui/inc/ScrollHelper.hxx229
-rw-r--r--reportdesign/source/ui/inc/SectionView.hxx77
-rw-r--r--reportdesign/source/ui/inc/SectionWindow.hxx140
-rw-r--r--reportdesign/source/ui/inc/StartMarker.hxx88
-rw-r--r--reportdesign/source/ui/inc/UITools.hxx189
-rw-r--r--reportdesign/source/ui/inc/Undo.hxx153
-rw-r--r--reportdesign/source/ui/inc/ViewsWindow.hxx361
-rw-r--r--reportdesign/source/ui/inc/dlgedclip.hxx86
-rw-r--r--reportdesign/source/ui/inc/dlgedfac.hxx50
-rw-r--r--reportdesign/source/ui/inc/dlgedfunc.hxx160
-rw-r--r--reportdesign/source/ui/inc/dlgpage.hxx54
-rw-r--r--reportdesign/source/ui/inc/metadata.hxx162
-rw-r--r--reportdesign/source/ui/inc/propbrw.hxx118
-rw-r--r--reportdesign/source/ui/inc/statusbarcontroller.hxx92
-rw-r--r--reportdesign/source/ui/inc/toolboxcontroller.hxx91
-rw-r--r--reportdesign/source/ui/inspection/DataProviderHandler.cxx565
-rw-r--r--reportdesign/source/ui/inspection/DefaultInspection.cxx281
-rw-r--r--reportdesign/source/ui/inspection/GeometryHandler.cxx2246
-rw-r--r--reportdesign/source/ui/inspection/ReportComponentHandler.cxx232
-rw-r--r--reportdesign/source/ui/inspection/inspection.src394
-rw-r--r--reportdesign/source/ui/inspection/makefile.mk53
-rw-r--r--reportdesign/source/ui/inspection/metadata.cxx339
-rw-r--r--reportdesign/source/ui/misc/ColorListener.cxx97
-rw-r--r--reportdesign/source/ui/misc/FunctionHelper.cxx257
-rw-r--r--reportdesign/source/ui/misc/UITools.cxx1084
-rw-r--r--reportdesign/source/ui/misc/Undo.cxx416
-rw-r--r--reportdesign/source/ui/misc/makefile.mk62
-rw-r--r--reportdesign/source/ui/misc/rptuiservices.cxx89
-rw-r--r--reportdesign/source/ui/misc/statusbarcontroller.cxx230
-rw-r--r--reportdesign/source/ui/misc/toolboxcontroller.cxx360
-rw-r--r--reportdesign/source/ui/report/DesignView.cxx787
-rw-r--r--reportdesign/source/ui/report/EndMarker.cxx104
-rw-r--r--reportdesign/source/ui/report/FixedTextColor.cxx283
-rw-r--r--reportdesign/source/ui/report/FormattedFieldBeautifier.cxx203
-rw-r--r--reportdesign/source/ui/report/ReportController.cxx4402
-rw-r--r--reportdesign/source/ui/report/ReportControllerObserver.cxx462
-rw-r--r--reportdesign/source/ui/report/ReportRuler.cxx63
-rw-r--r--reportdesign/source/ui/report/ReportSection.cxx878
-rw-r--r--reportdesign/source/ui/report/ReportWindow.cxx444
-rw-r--r--reportdesign/source/ui/report/ScrollHelper.cxx416
-rw-r--r--reportdesign/source/ui/report/SectionView.cxx274
-rw-r--r--reportdesign/source/ui/report/SectionWindow.cxx418
-rw-r--r--reportdesign/source/ui/report/StartMarker.cxx324
-rw-r--r--reportdesign/source/ui/report/ViewsWindow.cxx1869
-rw-r--r--reportdesign/source/ui/report/dlgedclip.cxx107
-rw-r--r--reportdesign/source/ui/report/dlgedfac.cxx113
-rw-r--r--reportdesign/source/ui/report/dlgedfunc.cxx1119
-rw-r--r--reportdesign/source/ui/report/makefile.mk72
-rw-r--r--reportdesign/source/ui/report/propbrw.cxx619
-rw-r--r--reportdesign/source/ui/report/report.src700
-rw-r--r--reportdesign/uiconfig/dbreport/menubar/menubar.xml422
-rw-r--r--reportdesign/uiconfig/dbreport/statusbar/statusbar.xml6
-rw-r--r--reportdesign/uiconfig/dbreport/toolbar/Formatting.xml23
-rw-r--r--reportdesign/uiconfig/dbreport/toolbar/alignmentbar.xml11
-rw-r--r--reportdesign/uiconfig/dbreport/toolbar/arrowshapes.xml34
-rw-r--r--reportdesign/uiconfig/dbreport/toolbar/basicshapes.xml29
-rw-r--r--reportdesign/uiconfig/dbreport/toolbar/calloutshapes.xml11
-rw-r--r--reportdesign/uiconfig/dbreport/toolbar/drawbar.xml10
-rw-r--r--reportdesign/uiconfig/dbreport/toolbar/flowchartshapes.xml36
-rw-r--r--reportdesign/uiconfig/dbreport/toolbar/reportcontrols.xml19
-rw-r--r--reportdesign/uiconfig/dbreport/toolbar/resizebar.xml9
-rw-r--r--reportdesign/uiconfig/dbreport/toolbar/sectionalignmentbar.xml9
-rwxr-xr-xreportdesign/uiconfig/dbreport/toolbar/sectionshrinkbar.xml7
-rw-r--r--reportdesign/uiconfig/dbreport/toolbar/starshapes.xml17
-rw-r--r--reportdesign/uiconfig/dbreport/toolbar/symbolshapes.xml24
-rw-r--r--reportdesign/uiconfig/dbreport/toolbar/toolbar.xml22
-rw-r--r--reportdesign/util/dll.pmk31
-rw-r--r--reportdesign/util/hidother.src171
-rw-r--r--reportdesign/util/makefile.mk233
-rwxr-xr-xrhino/README12
-rwxr-xr-xrhino/makefile.mk68
-rw-r--r--rhino/prj/build.lst3
-rw-r--r--rhino/prj/d.lst1
-rw-r--r--rhino/rhino1_5R5-find_swing.patch20
-rw-r--r--rhino/rhino1_5R5.patch1205
-rw-r--r--ridljar/com/makefile.mk64
-rw-r--r--ridljar/com/sun/star/lib/uno/typedesc/FieldDescription.java76
-rw-r--r--ridljar/com/sun/star/lib/uno/typedesc/MemberDescriptionHelper.java64
-rw-r--r--ridljar/com/sun/star/lib/uno/typedesc/MethodDescription.java111
-rw-r--r--ridljar/com/sun/star/lib/uno/typedesc/TypeDescription.java721
-rw-r--r--ridljar/com/sun/star/lib/uno/typeinfo/AttributeTypeInfo.java95
-rw-r--r--ridljar/com/sun/star/lib/uno/typeinfo/ConstantTypeInfo.java40
-rw-r--r--ridljar/com/sun/star/lib/uno/typeinfo/MemberTypeInfo.java105
-rw-r--r--ridljar/com/sun/star/lib/uno/typeinfo/MethodTypeInfo.java98
-rw-r--r--ridljar/com/sun/star/lib/uno/typeinfo/ParameterTypeInfo.java114
-rw-r--r--ridljar/com/sun/star/lib/uno/typeinfo/TypeInfo.java85
-rw-r--r--ridljar/com/sun/star/lib/util/DisposeListener.java43
-rw-r--r--ridljar/com/sun/star/lib/util/DisposeNotifier.java53
-rw-r--r--ridljar/com/sun/star/lib/util/WeakMap.java311
-rw-r--r--ridljar/com/sun/star/uno/Any.java140
-rw-r--r--ridljar/com/sun/star/uno/Enum.java61
-rw-r--r--ridljar/com/sun/star/uno/IBridge.java99
-rw-r--r--ridljar/com/sun/star/uno/IEnvironment.java152
-rw-r--r--ridljar/com/sun/star/uno/IFieldDescription.java55
-rw-r--r--ridljar/com/sun/star/uno/IMapping.java49
-rw-r--r--ridljar/com/sun/star/uno/IMemberDescription.java75
-rw-r--r--ridljar/com/sun/star/uno/IMethodDescription.java88
-rw-r--r--ridljar/com/sun/star/uno/IQueryInterface.java69
-rw-r--r--ridljar/com/sun/star/uno/ITypeDescription.java188
-rw-r--r--ridljar/com/sun/star/uno/Type.java652
-rw-r--r--ridljar/com/sun/star/uno/Union.java52
-rw-r--r--ridljar/com/sun/star/uno/UnoRuntime.java696
-rw-r--r--ridljar/javamaker/makefile.mk46
-rw-r--r--ridljar/prj/build.lst6
-rw-r--r--ridljar/prj/d.lst4
-rw-r--r--ridljar/source/unoloader/com/sun/star/lib/unoloader/UnoClassLoader.java214
-rw-r--r--ridljar/source/unoloader/com/sun/star/lib/unoloader/UnoLoader.java94
-rw-r--r--ridljar/source/unoloader/com/sun/star/lib/unoloader/makefile.mk60
-rw-r--r--ridljar/source/unoloader/com/sun/star/lib/unoloader/manifest1
-rw-r--r--ridljar/source/unoloader/delzip0
-rw-r--r--ridljar/source/unoloader/makefile.mk39
-rw-r--r--ridljar/test/com/sun/star/lib/uno/typedesc/TypeDescription_Test.java310
-rw-r--r--ridljar/test/com/sun/star/lib/uno/typedesc/makefile.mk35
-rw-r--r--ridljar/test/com/sun/star/lib/util/WeakMap_Test.java86
-rw-r--r--ridljar/test/com/sun/star/lib/util/makefile.mk36
-rw-r--r--ridljar/test/com/sun/star/uno/Any_Test.java58
-rw-r--r--ridljar/test/com/sun/star/uno/Type_Test.java111
-rw-r--r--ridljar/test/com/sun/star/uno/UnoRuntime_Test.java216
-rw-r--r--ridljar/test/com/sun/star/uno/makefile.mk38
-rw-r--r--ridljar/test/makefile.mk35
-rw-r--r--ridljar/util/delzip0
-rw-r--r--ridljar/util/makefile.mk52
-rw-r--r--rsc/doku/feinkonz.43/rsc.doc4096
-rw-r--r--rsc/doku/feinkonz.43/rscerror.doc2119
-rw-r--r--rsc/doku/feinkonz.43/rscinst.doc4138
-rw-r--r--rsc/doku/schriftw.16/change.doc1105
-rw-r--r--rsc/inc/pch/precompiled_rsc.cxx29
-rw-r--r--rsc/inc/pch/precompiled_rsc.hxx32
-rw-r--r--rsc/inc/rscall.h112
-rw-r--r--rsc/inc/rscarray.hxx136
-rw-r--r--rsc/inc/rscclass.hxx139
-rw-r--r--rsc/inc/rscclobj.hxx112
-rw-r--r--rsc/inc/rscconst.hxx110
-rw-r--r--rsc/inc/rsccont.hxx153
-rw-r--r--rsc/inc/rscdb.hxx359
-rw-r--r--rsc/inc/rscdef.hxx274
-rw-r--r--rsc/inc/rscerror.h162
-rw-r--r--rsc/inc/rscflag.hxx106
-rw-r--r--rsc/inc/rschash.hxx54
-rw-r--r--rsc/inc/rscinst.hxx244
-rw-r--r--rsc/inc/rsckey.hxx61
-rw-r--r--rsc/inc/rsclst.hxx67
-rw-r--r--rsc/inc/rscmgr.hxx80
-rw-r--r--rsc/inc/rscpar.hxx92
-rw-r--r--rsc/inc/rscrange.hxx209
-rw-r--r--rsc/inc/rscrsc.hxx138
-rw-r--r--rsc/inc/rscsfx.hxx62
-rw-r--r--rsc/inc/rscstr.hxx79
-rw-r--r--rsc/inc/rsctools.hxx220
-rw-r--r--rsc/inc/rsctop.hxx247
-rw-r--r--rsc/inc/rsctree.hxx118
-rw-r--r--rsc/inc/vclrsc.hxx345
-rw-r--r--rsc/prj/build.lst9
-rw-r--r--rsc/prj/d.lst9
-rw-r--r--rsc/source/misc/makefile.mk45
-rw-r--r--rsc/source/misc/rscdbl.cxx119
-rw-r--r--rsc/source/misc/rsclst.cxx51
-rw-r--r--rsc/source/parser/erscerr.cxx516
-rw-r--r--rsc/source/parser/makefile.mk67
-rw-r--r--rsc/source/parser/rscdb.cxx1114
-rw-r--r--rsc/source/parser/rscibas.cxx711
-rw-r--r--rsc/source/parser/rscicpx.cxx2389
-rw-r--r--rsc/source/parser/rscinit.cxx941
-rw-r--r--rsc/source/parser/rsckey.cxx214
-rw-r--r--rsc/source/parser/rsclex.cxx442
-rw-r--r--rsc/source/parser/rsclex.hxx128
-rw-r--r--rsc/source/parser/rscpar.cxx239
-rw-r--r--rsc/source/parser/rscyacc.cxx271
-rw-r--r--rsc/source/parser/rscyacc.y1118
-rw-r--r--rsc/source/prj/gui.cxx126
-rw-r--r--rsc/source/prj/makefile.mk79
-rw-r--r--rsc/source/prj/start.cxx483
-rw-r--r--rsc/source/res/makefile.mk61
-rw-r--r--rsc/source/res/rscall.cxx64
-rw-r--r--rsc/source/res/rscarray.cxx728
-rw-r--r--rsc/source/res/rscclass.cxx1261
-rw-r--r--rsc/source/res/rscclobj.cxx227
-rw-r--r--rsc/source/res/rscconst.cxx415
-rw-r--r--rsc/source/res/rsccont.cxx1179
-rw-r--r--rsc/source/res/rscflag.cxx490
-rw-r--r--rsc/source/res/rscmgr.cxx717
-rw-r--r--rsc/source/res/rscrange.cxx850
-rw-r--r--rsc/source/res/rscstr.cxx401
-rw-r--r--rsc/source/res/rsctop.cxx994
-rw-r--r--rsc/source/rsc/makefile.mk41
-rw-r--r--rsc/source/rsc/rsc.cxx1386
-rw-r--r--rsc/source/rscpp/cpp.h415
-rw-r--r--rsc/source/rscpp/cpp1.c616
-rw-r--r--rsc/source/rscpp/cpp2.c625
-rw-r--r--rsc/source/rscpp/cpp3.c601
-rw-r--r--rsc/source/rscpp/cpp4.c635
-rw-r--r--rsc/source/rscpp/cpp5.c929
-rw-r--r--rsc/source/rscpp/cpp6.c1148
-rw-r--r--rsc/source/rscpp/cppdef.h346
-rw-r--r--rsc/source/rscpp/cppmain.c45
-rw-r--r--rsc/source/rscpp/makefile.mk92
-rw-r--r--rsc/source/tools/makefile.mk45
-rw-r--r--rsc/source/tools/rscchar.cxx196
-rw-r--r--rsc/source/tools/rscdef.cxx1401
-rw-r--r--rsc/source/tools/rschash.cxx68
-rw-r--r--rsc/source/tools/rsctools.cxx492
-rw-r--r--rsc/source/tools/rsctree.cxx546
-rw-r--r--sal/cpprt/makefile.mk71
-rw-r--r--sal/cpprt/operators_new_delete.cxx251
-rw-r--r--sal/cppunittester/cppunittester.cxx65
-rw-r--r--sal/cppunittester/makefile.mk45
-rw-r--r--sal/inc/internal/once.h79
-rw-r--r--sal/inc/makefile.mk47
-rw-r--r--sal/inc/osl/conditn.h92
-rw-r--r--sal/inc/osl/conditn.hxx128
-rw-r--r--sal/inc/osl/diagnose.h160
-rw-r--r--sal/inc/osl/diagnose.hxx205
-rw-r--r--sal/inc/osl/doublecheckedlocking.h81
-rw-r--r--sal/inc/osl/endian.h235
-rw-r--r--sal/inc/osl/file.h1593
-rw-r--r--sal/inc/osl/file.hxx1953
-rw-r--r--sal/inc/osl/getglobalmutex.hxx50
-rw-r--r--sal/inc/osl/interlck.h57
-rw-r--r--sal/inc/osl/module.h211
-rw-r--r--sal/inc/osl/module.hxx158
-rw-r--r--sal/inc/osl/mutex.h77
-rw-r--r--sal/inc/osl/mutex.hxx253
-rw-r--r--sal/inc/osl/nlsupport.h60
-rw-r--r--sal/inc/osl/pipe.h102
-rw-r--r--sal/inc/osl/pipe.hxx212
-rw-r--r--sal/inc/osl/pipe_decl.hxx235
-rw-r--r--sal/inc/osl/process.h428
-rw-r--r--sal/inc/osl/profile.h140
-rw-r--r--sal/inc/osl/profile.hxx204
-rw-r--r--sal/inc/osl/security.h158
-rw-r--r--sal/inc/osl/security.hxx110
-rw-r--r--sal/inc/osl/security_decl.hxx117
-rw-r--r--sal/inc/osl/semaphor.h95
-rw-r--r--sal/inc/osl/semaphor.hxx126
-rw-r--r--sal/inc/osl/signal.h114
-rw-r--r--sal/inc/osl/socket.h891
-rw-r--r--sal/inc/osl/socket.hxx565
-rw-r--r--sal/inc/osl/socket_decl.hxx722
-rw-r--r--sal/inc/osl/thread.h191
-rw-r--r--sal/inc/osl/thread.hxx233
-rw-r--r--sal/inc/osl/time.h160
-rw-r--r--sal/inc/osl/util.h53
-rw-r--r--sal/inc/pch/precompiled_sal.cxx29
-rw-r--r--sal/inc/pch/precompiled_sal.hxx32
-rw-r--r--sal/inc/rtl/alloc.h266
-rw-r--r--sal/inc/rtl/allocator.hxx192
-rw-r--r--sal/inc/rtl/bootstrap.h233
-rw-r--r--sal/inc/rtl/bootstrap.hxx234
-rw-r--r--sal/inc/rtl/byteseq.h322
-rw-r--r--sal/inc/rtl/byteseq.hxx143
-rw-r--r--sal/inc/rtl/cipher.h319
-rw-r--r--sal/inc/rtl/crc.h66
-rw-r--r--sal/inc/rtl/digest.h639
-rw-r--r--sal/inc/rtl/instance.hxx472
-rw-r--r--sal/inc/rtl/locale.h140
-rw-r--r--sal/inc/rtl/locale.hxx266
-rw-r--r--sal/inc/rtl/logfile.h134
-rw-r--r--sal/inc/rtl/logfile.hxx205
-rw-r--r--sal/inc/rtl/malformeduriexception.hxx74
-rw-r--r--sal/inc/rtl/math.h474
-rw-r--r--sal/inc/rtl/math.hxx432
-rw-r--r--sal/inc/rtl/memory.h51
-rw-r--r--sal/inc/rtl/process.h82
-rw-r--r--sal/inc/rtl/random.h114
-rw-r--r--sal/inc/rtl/ref.hxx242
-rw-r--r--sal/inc/rtl/strbuf.h119
-rw-r--r--sal/inc/rtl/strbuf.hxx665
-rw-r--r--sal/inc/rtl/string.h1193
-rw-r--r--sal/inc/rtl/string.hxx941
-rw-r--r--sal/inc/rtl/tencinfo.h276
-rw-r--r--sal/inc/rtl/textcvt.h180
-rw-r--r--sal/inc/rtl/textenc.h279
-rw-r--r--sal/inc/rtl/tres.h106
-rw-r--r--sal/inc/rtl/tres.hxx112
-rw-r--r--sal/inc/rtl/unload.h315
-rw-r--r--sal/inc/rtl/uri.h354
-rw-r--r--sal/inc/rtl/uri.hxx154
-rw-r--r--sal/inc/rtl/ustrbuf.h165
-rw-r--r--sal/inc/rtl/ustrbuf.hxx774
-rw-r--r--sal/inc/rtl/ustring.h1660
-rw-r--r--sal/inc/rtl/ustring.hxx1540
-rw-r--r--sal/inc/rtl/uuid.h209
-rw-r--r--sal/inc/sal/alloca.h66
-rw-r--r--sal/inc/sal/config.h152
-rw-r--r--sal/inc/sal/macros.h51
-rw-r--r--sal/inc/sal/main.h152
-rw-r--r--sal/inc/sal/mathconf.h147
-rw-r--r--sal/inc/sal/types.h435
-rw-r--r--sal/inc/systools/win32/AutoSystoolInit.hxx62
-rw-r--r--sal/inc/systools/win32/StrConvert.h132
-rw-r--r--sal/inc/systools/win32/SyncObjects.hxx110
-rw-r--r--sal/inc/systools/win32/advapi9x.h209
-rw-r--r--sal/inc/systools/win32/comdlg9x.h80
-rw-r--r--sal/inc/systools/win32/comptr.hxx233
-rw-r--r--sal/inc/systools/win32/comtools.hxx194
-rw-r--r--sal/inc/systools/win32/kernel9x.h383
-rw-r--r--sal/inc/systools/win32/mpr9x.h72
-rw-r--r--sal/inc/systools/win32/shell9x.h101
-rw-r--r--sal/inc/systools/win32/snprintf.h80
-rw-r--r--sal/inc/systools/win32/user9x.h192
-rw-r--r--sal/inc/systools/win32/uwinapi.h121
-rw-r--r--sal/osl/all/debugbase.cxx161
-rw-r--r--sal/osl/all/filepath.c123
-rw-r--r--sal/osl/all/loadmodulerelative.cxx71
-rw-r--r--sal/osl/all/makefile.mk76
-rwxr-xr-xsal/osl/all/utility.cxx103
-rw-r--r--sal/osl/os2/conditn.c124
-rw-r--r--sal/osl/os2/debug.c2152
-rw-r--r--sal/osl/os2/diagnose.c178
-rw-r--r--sal/osl/os2/dllentry.c75
-rw-r--r--sal/osl/os2/except.c1059
-rw-r--r--sal/osl/os2/file.cxx3129
-rw-r--r--sal/osl/os2/file_error_transl.cxx252
-rw-r--r--sal/osl/os2/file_error_transl.h70
-rw-r--r--sal/osl/os2/file_path_helper.cxx377
-rw-r--r--sal/osl/os2/file_path_helper.h292
-rw-r--r--sal/osl/os2/file_path_helper.hxx296
-rw-r--r--sal/osl/os2/file_url.cxx1626
-rw-r--r--sal/osl/os2/file_url.h183
-rw-r--r--sal/osl/os2/helpers/debug.h1779
-rw-r--r--sal/osl/os2/helpers/dosh.h49
-rw-r--r--sal/osl/os2/helpers/except.h255
-rw-r--r--sal/osl/os2/helpers/setup.h147
-rw-r--r--sal/osl/os2/interlck.c51
-rw-r--r--sal/osl/os2/libutil.c52
-rw-r--r--sal/osl/os2/makefile.mk118
-rw-r--r--sal/osl/os2/module.c281
-rw-r--r--sal/osl/os2/mutex.c167
-rw-r--r--sal/osl/os2/nlsupport.c445
-rw-r--r--sal/osl/os2/path_helper.cxx116
-rw-r--r--sal/osl/os2/path_helper.h70
-rw-r--r--sal/osl/os2/path_helper.hxx73
-rw-r--r--sal/osl/os2/pipe.cxx555
-rw-r--r--sal/osl/os2/pipeimpl.cxx755
-rw-r--r--sal/osl/os2/pipeimpl.h82
-rw-r--r--sal/osl/os2/process.c1013
-rw-r--r--sal/osl/os2/process_impl.cxx371
-rw-r--r--sal/osl/os2/procimpl.h52
-rw-r--r--sal/osl/os2/profile.c2295
-rw-r--r--sal/osl/os2/salinit.cxx120
-rw-r--r--sal/osl/os2/secimpl.h50
-rw-r--r--sal/osl/os2/security.c317
-rw-r--r--sal/osl/os2/semaphor.c190
-rw-r--r--sal/osl/os2/signal.c249
-rw-r--r--sal/osl/os2/socket.c3097
-rw-r--r--sal/osl/os2/sockimpl.h80
-rw-r--r--sal/osl/os2/system.h514
-rw-r--r--sal/osl/os2/tempfile.c359
-rw-r--r--sal/osl/os2/thread.c772
-rw-r--r--sal/osl/os2/time.c269
-rw-r--r--sal/osl/os2/util.c37
-rw-r--r--sal/osl/os2/uunxapi.cxx86
-rw-r--r--sal/osl/os2/uunxapi.h86
-rw-r--r--sal/osl/os2/uunxapi.hxx106
-rw-r--r--sal/osl/unx/asm/interlck_sparc.s267
-rw-r--r--sal/osl/unx/asm/interlck_x86.s92
-rwxr-xr-xsal/osl/unx/backtrace.c359
-rwxr-xr-xsal/osl/unx/backtrace.h99
-rw-r--r--sal/osl/unx/conditn.c350
-rw-r--r--sal/osl/unx/diagnose.c332
-rw-r--r--sal/osl/unx/file.cxx1397
-rw-r--r--sal/osl/unx/file_error_transl.cxx255
-rw-r--r--sal/osl/unx/file_error_transl.h70
-rw-r--r--sal/osl/unx/file_impl.hxx54
-rw-r--r--sal/osl/unx/file_misc.cxx1101
-rw-r--r--sal/osl/unx/file_path_helper.cxx350
-rw-r--r--sal/osl/unx/file_path_helper.h247
-rw-r--r--sal/osl/unx/file_path_helper.hxx247
-rw-r--r--sal/osl/unx/file_stat.cxx492
-rw-r--r--sal/osl/unx/file_url.cxx962
-rw-r--r--sal/osl/unx/file_url.h69
-rw-r--r--sal/osl/unx/file_volume.cxx1155
-rw-r--r--sal/osl/unx/interlck.c170
-rw-r--r--sal/osl/unx/makefile.mk189
-rw-r--r--sal/osl/unx/module.c242
-rw-r--r--sal/osl/unx/mutex.c221
-rw-r--r--sal/osl/unx/nlsupport.c949
-rw-r--r--sal/osl/unx/osxlocale.cxx129
-rw-r--r--sal/osl/unx/pipe.c592
-rw-r--r--sal/osl/unx/process.c1536
-rw-r--r--sal/osl/unx/process_impl.cxx412
-rw-r--r--sal/osl/unx/procimpl.h50
-rw-r--r--sal/osl/unx/profile.c2221
-rw-r--r--sal/osl/unx/salinit.cxx43
-rw-r--r--sal/osl/unx/secimpl.h47
-rw-r--r--sal/osl/unx/security.c862
-rw-r--r--sal/osl/unx/semaphor.c314
-rw-r--r--sal/osl/unx/signal.c1093
-rw-r--r--sal/osl/unx/socket.c3062
-rw-r--r--sal/osl/unx/sockimpl.h78
-rw-r--r--sal/osl/unx/system.c599
-rw-r--r--sal/osl/unx/system.h495
-rw-r--r--sal/osl/unx/tempfile.c370
-rw-r--r--sal/osl/unx/thread.c1035
-rw-r--r--sal/osl/unx/time.c269
-rw-r--r--sal/osl/unx/util.c350
-rw-r--r--sal/osl/unx/uunxapi.cxx130
-rw-r--r--sal/osl/unx/uunxapi.h86
-rw-r--r--sal/osl/unx/uunxapi.hxx98
-rw-r--r--sal/osl/w32/MAKEFILE.MK118
-rw-r--r--sal/osl/w32/conditn.c141
-rw-r--r--sal/osl/w32/diagnose.c188
-rw-r--r--sal/osl/w32/dllentry.c370
-rw-r--r--sal/osl/w32/file.cxx1194
-rw-r--r--sal/osl/w32/file_dirvol.cxx1867
-rw-r--r--sal/osl/w32/file_error.c151
-rw-r--r--sal/osl/w32/file_error.h51
-rw-r--r--sal/osl/w32/file_url.cxx1143
-rw-r--r--sal/osl/w32/file_url.h96
-rw-r--r--sal/osl/w32/interlck.c142
-rw-r--r--sal/osl/w32/libutil.c54
-rw-r--r--sal/osl/w32/module.cxx480
-rw-r--r--sal/osl/w32/mutex.c206
-rw-r--r--sal/osl/w32/nlsupport.c231
-rw-r--r--sal/osl/w32/path_helper.cxx118
-rw-r--r--sal/osl/w32/path_helper.h70
-rw-r--r--sal/osl/w32/path_helper.hxx118
-rw-r--r--sal/osl/w32/pipe.c636
-rw-r--r--sal/osl/w32/pipeimpl.cxx785
-rw-r--r--sal/osl/w32/pipeimpl.h88
-rw-r--r--sal/osl/w32/process.cxx620
-rw-r--r--sal/osl/w32/procimpl.cxx606
-rw-r--r--sal/osl/w32/procimpl.h47
-rw-r--r--sal/osl/w32/profile.cxx2707
-rw-r--r--sal/osl/w32/salinit.cxx102
-rw-r--r--sal/osl/w32/secimpl.h54
-rw-r--r--sal/osl/w32/security.c991
-rw-r--r--sal/osl/w32/semaphor.c111
-rw-r--r--sal/osl/w32/signal.cxx436
-rw-r--r--sal/osl/w32/socket.cxx2190
-rw-r--r--sal/osl/w32/sockimpl.h108
-rw-r--r--sal/osl/w32/system.h126
-rw-r--r--sal/osl/w32/tempfile.cxx274
-rw-r--r--sal/osl/w32/thread.c593
-rw-r--r--sal/osl/w32/time.c216
-rw-r--r--sal/osl/w32/util.c37
-rw-r--r--sal/prj/build.lst21
-rw-r--r--sal/prj/d.lst38
-rw-r--r--sal/qa/ByteSequence/ByteSequence.cxx194
-rw-r--r--sal/qa/ByteSequence/makefile.mk55
-rw-r--r--sal/qa/OStringBuffer/makefile.mk80
-rw-r--r--sal/qa/OStringBuffer/rtl_OStringBuffer.cxx18442
-rw-r--r--sal/qa/OStringBuffer/rtl_String_Const.h556
-rw-r--r--sal/qa/OStringBuffer/rtl_String_Utils.cxx615
-rw-r--r--sal/qa/OStringBuffer/rtl_String_Utils.hxx138
-rw-r--r--sal/qa/OStringBuffer/rtl_String_Utils_Const.h74
-rw-r--r--sal/qa/buildall.pl507
-rwxr-xr-xsal/qa/export.map34
-rwxr-xr-xsal/qa/helper/gcov/build_coverage23
-rw-r--r--sal/qa/helper/gcov/deprecated.txt213
-rwxr-xr-xsal/qa/helper/gcov/gcov_all15
-rwxr-xr-xsal/qa/helper/gcov/gcov_filter.pl427
-rw-r--r--sal/qa/helper/gcov/gcov_result.pl232
-rw-r--r--sal/qa/helper/gcov/gcov_resultcompare.pl151
-rw-r--r--sal/qa/helper/gcov/gcov_resultinterpreter.pl172
-rwxr-xr-xsal/qa/helper/gcov/gcov_run.sh64
-rw-r--r--sal/qa/helper/gcov/readme.txt13
-rwxr-xr-xsal/qa/helper/gcov/statistics20
-rw-r--r--sal/qa/inc/stringhelper.hxx16
-rw-r--r--sal/qa/inc/valueequal.hxx133
-rw-r--r--sal/qa/libs2test.txt86
-rw-r--r--sal/qa/makefile.mk62
-rw-r--r--sal/qa/osl/condition/makefile.mk60
-rw-r--r--sal/qa/osl/condition/osl_Condition.cxx384
-rw-r--r--sal/qa/osl/condition/osl_Condition_Const.h72
-rw-r--r--sal/qa/osl/file/makefile.mk85
-rw-r--r--sal/qa/osl/file/osl_File.cxx6856
-rw-r--r--sal/qa/osl/file/osl_File_Const.h242
-rw-r--r--sal/qa/osl/file/osl_old_test_file.cxx273
-rwxr-xr-xsal/qa/osl/file/test_cpy_wrt_file.cxx111
-rw-r--r--sal/qa/osl/module/export_dll.map34
-rw-r--r--sal/qa/osl/module/makefile.mk79
-rw-r--r--sal/qa/osl/module/osl_Module.cxx522
-rw-r--r--sal/qa/osl/module/osl_Module_Const.h66
-rw-r--r--sal/qa/osl/module/osl_Module_DLL.cxx43
-rwxr-xr-xsal/qa/osl/mutex/makefile.mk73
-rwxr-xr-xsal/qa/osl/mutex/osl_Mutex.cxx949
-rwxr-xr-xsal/qa/osl/mutex/osl_Mutex_Const.h56
-rw-r--r--sal/qa/osl/pipe/makefile.mk70
-rw-r--r--sal/qa/osl/pipe/osl_Pipe.cxx1059
-rwxr-xr-xsal/qa/osl/process/batch.bat2
-rw-r--r--sal/qa/osl/process/export.exp1
-rw-r--r--sal/qa/osl/process/makefile.mk110
-rw-r--r--sal/qa/osl/process/osl_Thread.cxx2344
-rw-r--r--sal/qa/osl/process/osl_Thread.xsce1
-rw-r--r--sal/qa/osl/process/osl_process.cxx684
-rw-r--r--sal/qa/osl/process/osl_process_child.cxx131
-rw-r--r--sal/qa/osl/profile/makefile.mk73
-rw-r--r--sal/qa/osl/profile/osl_old_testprofile.cxx99
-rwxr-xr-xsal/qa/osl/security/makefile.mk64
-rwxr-xr-xsal/qa/osl/security/osl_Security.cxx678
-rwxr-xr-xsal/qa/osl/security/osl_Security_Const.h80
-rwxr-xr-xsal/qa/osl/socket/export.exp1
-rwxr-xr-xsal/qa/osl/socket/makefile.mk223
-rw-r--r--sal/qa/osl/socket/osl_AcceptorSocket.cxx302
-rw-r--r--sal/qa/osl/socket/osl_ConnectorSocket.cxx264
-rw-r--r--sal/qa/osl/socket/osl_ConnectorSocket.xsce1
-rw-r--r--sal/qa/osl/socket/osl_DatagramSocket.cxx316
-rwxr-xr-xsal/qa/osl/socket/osl_Socket.cxx3723
-rw-r--r--sal/qa/osl/socket/osl_Socket.xsce5
-rw-r--r--sal/qa/osl/socket/osl_Socket2.cxx1468
-rw-r--r--sal/qa/osl/socket/osl_Socket2.xsce2
-rw-r--r--sal/qa/osl/socket/osl_SocketAddr.cxx895
-rw-r--r--sal/qa/osl/socket/osl_SocketAddr.xsce0
-rw-r--r--sal/qa/osl/socket/osl_SocketOld.xsce14
-rwxr-xr-xsal/qa/osl/socket/osl_Socket_Const.h196
-rw-r--r--sal/qa/osl/socket/osl_Socket_Const_orig.h200
-rw-r--r--sal/qa/osl/socket/osl_Socket_tests.cxx88
-rw-r--r--sal/qa/osl/socket/osl_Socket_tests.xsce1
-rw-r--r--sal/qa/osl/socket/osl_StreamSocket.cxx1506
-rw-r--r--sal/qa/osl/socket/osl_StreamSocket.xsce4
-rw-r--r--sal/qa/osl/socket/sockethelper.cxx401
-rw-r--r--sal/qa/osl/socket/sockethelper.hxx165
-rw-r--r--sal/qa/osl/thread/makefile.mk52
-rw-r--r--sal/qa/osl/thread/test_thread.cxx89
-rw-r--r--sal/qa/osl/thread/version.map34
-rwxr-xr-xsal/qa/rtl/alloc/jobfile.txt8
-rwxr-xr-xsal/qa/rtl/alloc/makefile.mk70
-rwxr-xr-xsal/qa/rtl/alloc/rtl_alloc.cxx179
-rw-r--r--sal/qa/rtl/bootstrap/bootstrap_process.cxx118
-rw-r--r--sal/qa/rtl/bootstrap/makefile.mk90
-rw-r--r--sal/qa/rtl/bootstrap/rtl_Bootstrap.cxx1040
-rw-r--r--sal/qa/rtl/bootstrap/rtl_Bootstrap.xsce7
-rw-r--r--sal/qa/rtl/cipher/makefile.mk70
-rw-r--r--sal/qa/rtl/cipher/rtl_cipher.cxx717
-rwxr-xr-xsal/qa/rtl/crc32/jobfile.txt5
-rwxr-xr-xsal/qa/rtl/crc32/makefile.mk70
-rwxr-xr-xsal/qa/rtl/crc32/rtl_crc32.cxx181
-rw-r--r--sal/qa/rtl/digest/makefile.mk66
-rw-r--r--sal/qa/rtl/digest/rtl_digest.cxx1451
-rw-r--r--sal/qa/rtl/doublelock/makefile.mk72
-rw-r--r--sal/qa/rtl/doublelock/rtl_doublelocking.cxx260
-rw-r--r--sal/qa/rtl/locale/makefile.mk71
-rw-r--r--sal/qa/rtl/locale/rtl_locale.cxx343
-rw-r--r--sal/qa/rtl/logfile/makefile.mk63
-rw-r--r--sal/qa/rtl/logfile/rtl_logfile.cxx260
-rw-r--r--sal/qa/rtl/math/export.exp1
-rw-r--r--sal/qa/rtl/math/makefile.mk97
-rw-r--r--sal/qa/rtl/math/rtl_math.cxx626
-rw-r--r--sal/qa/rtl/math/rtl_old_testint64.cxx122
-rw-r--r--sal/qa/rtl/math/test_rtl_math.cxx674
-rw-r--r--sal/qa/rtl/ostring/joblist.txt10
-rw-r--r--sal/qa/rtl/ostring/makefile.mk93
-rw-r--r--sal/qa/rtl/ostring/rtl_OString2.cxx568
-rw-r--r--sal/qa/rtl/ostring/rtl_str.cxx890
-rw-r--r--sal/qa/rtl/ostring/rtl_str.xsce26
-rw-r--r--sal/qa/rtl/ostring/rtl_string.cxx183
-rw-r--r--sal/qa/rtl/ostring/rtl_string.xsce1
-rw-r--r--sal/qa/rtl/oustring/joblist.txt10
-rw-r--r--sal/qa/rtl/oustring/makefile.mk82
-rw-r--r--sal/qa/rtl/oustring/rtl_OUString2.cxx1280
-rw-r--r--sal/qa/rtl/oustring/rtl_ustr.cxx1424
-rw-r--r--sal/qa/rtl/oustring/rtl_ustr.xsce33
-rw-r--r--sal/qa/rtl/oustringbuffer/makefile.mk70
-rw-r--r--sal/qa/rtl/oustringbuffer/rtl_OUStringBuffer2.cxx101
-rw-r--r--sal/qa/rtl/process/child_process.cxx71
-rw-r--r--sal/qa/rtl/process/child_process_id.cxx63
-rw-r--r--sal/qa/rtl/process/makefile.mk93
-rw-r--r--sal/qa/rtl/process/rtl_Process.cxx296
-rw-r--r--sal/qa/rtl/process/rtl_Process_Const.h26
-rw-r--r--sal/qa/rtl/random/makefile.add19
-rw-r--r--sal/qa/rtl/random/makefile.mk66
-rw-r--r--sal/qa/rtl/random/random.txt5
-rw-r--r--sal/qa/rtl/random/rtl_random.cxx412
-rw-r--r--sal/qa/rtl/strings/makefile.mk55
-rw-r--r--sal/qa/rtl/strings/test_oustring_compare.cxx67
-rw-r--r--sal/qa/rtl/strings/test_oustring_convert.cxx184
-rw-r--r--sal/qa/rtl/strings/test_oustring_endswith.cxx121
-rw-r--r--sal/qa/rtl/strings/test_oustring_noadditional.cxx33
-rw-r--r--sal/qa/rtl/strings/test_oustringbuffer_utf32.cxx130
-rw-r--r--sal/qa/rtl/textenc/makefile.mk75
-rw-r--r--sal/qa/rtl/textenc/rtl_tencinfo.cxx1901
-rw-r--r--sal/qa/rtl/textenc/rtl_textcvt.cxx2901
-rw-r--r--sal/qa/rtl/uri/makefile.mk75
-rw-r--r--sal/qa/rtl/uri/rtl_Uri.cxx297
-rw-r--r--sal/qa/rtl/uri/rtl_testuri.cxx545
-rw-r--r--sal/qa/rtl/uuid/makefile.mk68
-rw-r--r--sal/qa/rtl/uuid/rtl_Uuid.cxx228
-rw-r--r--sal/qa/rtl_strings/export.exp1
-rw-r--r--sal/qa/rtl_strings/makefile.mk153
-rw-r--r--sal/qa/rtl_strings/readme.txt20
-rw-r--r--sal/qa/rtl_strings/rtl_OString.cxx3605
-rw-r--r--sal/qa/rtl_strings/rtl_OUString.cxx3858
-rw-r--r--sal/qa/rtl_strings/rtl_OUStringBuffer.cxx1823
-rw-r--r--sal/qa/rtl_strings/rtl_String_Const.h885
-rw-r--r--sal/qa/rtl_strings/rtl_String_Utils.cxx593
-rw-r--r--sal/qa/rtl_strings/rtl_String_Utils.hxx137
-rw-r--r--sal/qa/rtl_strings/rtl_String_Utils_Const.h74
-rw-r--r--sal/qa/rtl_strings/rtl_old_testostring.cxx266
-rw-r--r--sal/qa/rtl_strings/rtl_old_testowstring.cxx421
-rw-r--r--sal/qa/rtl_strings/rtl_old_teststrbuf.cxx269
-rw-r--r--sal/qa/sal/makefile.mk50
-rw-r--r--sal/qa/sal/test_types.cxx81
-rw-r--r--sal/qa/sal/version.map34
-rw-r--r--sal/qa/systools/makefile.mk70
-rw-r--r--sal/qa/systools/test_comtools.cxx250
-rw-r--r--sal/qa/testHelperFunctions/makefile.mk63
-rw-r--r--sal/qa/testHelperFunctions/testHelperFunctions.cxx454
-rw-r--r--sal/qa/testHelperFunctions/testHelperFunctions2.cxx61
-rw-r--r--sal/rtl/source/alloc.c1541
-rw-r--r--sal/rtl/source/alloc_arena.c1396
-rw-r--r--sal/rtl/source/alloc_arena.h137
-rw-r--r--sal/rtl/source/alloc_cache.c1721
-rw-r--r--sal/rtl/source/alloc_cache.h182
-rw-r--r--sal/rtl/source/alloc_global.c357
-rw-r--r--sal/rtl/source/alloc_impl.h247
-rw-r--r--sal/rtl/source/bootstrap.cxx1059
-rw-r--r--sal/rtl/source/byteseq.c254
-rw-r--r--sal/rtl/source/cipher.c1363
-rw-r--r--sal/rtl/source/cmdargs.cxx109
-rw-r--r--sal/rtl/source/crc.c164
-rw-r--r--sal/rtl/source/debugprint.cxx58
-rw-r--r--sal/rtl/source/digest.c2118
-rw-r--r--sal/rtl/source/gen_makefile.cxx41
-rw-r--r--sal/rtl/source/hash.cxx113
-rw-r--r--sal/rtl/source/hash.h21
-rw-r--r--sal/rtl/source/locale.c362
-rw-r--r--sal/rtl/source/logfile.cxx254
-rw-r--r--sal/rtl/source/macro.hxx110
-rw-r--r--sal/rtl/source/makefile.mk198
-rw-r--r--sal/rtl/source/math.cxx1265
-rw-r--r--sal/rtl/source/memory.c62
-rwxr-xr-xsal/rtl/source/memory_fini.cxx54
-rw-r--r--sal/rtl/source/random.c338
-rw-r--r--sal/rtl/source/rtl_process.c49
-rw-r--r--sal/rtl/source/strbuf.c147
-rw-r--r--sal/rtl/source/strimp.c58
-rw-r--r--sal/rtl/source/strimp.h64
-rw-r--r--sal/rtl/source/string.c320
-rw-r--r--sal/rtl/source/strtmpl.c1567
-rw-r--r--sal/rtl/source/surrogates.h50
-rw-r--r--sal/rtl/source/tres.c686
-rw-r--r--sal/rtl/source/unload.cxx417
-rw-r--r--sal/rtl/source/uri.cxx799
-rw-r--r--sal/rtl/source/ustrbuf.c208
-rw-r--r--sal/rtl/source/ustring.c934
-rw-r--r--sal/rtl/source/uuid.cxx180
-rw-r--r--sal/systools/win32/kill/kill.cxx443
-rw-r--r--sal/systools/win32/kill/makefile.mk64
-rw-r--r--sal/systools/win32/onlineupdate/makefile.mk82
-rw-r--r--sal/systools/win32/onlineupdate/onlinecheck.cxx82
-rw-r--r--sal/systools/win32/onlineupdate/onlinecheck.dxp28
-rw-r--r--sal/systools/win32/uwinapi/CheckTokenMembership.cpp34
-rw-r--r--sal/systools/win32/uwinapi/CommandLineToArgvW.cpp172
-rw-r--r--sal/systools/win32/uwinapi/CopyFileExA.cpp167
-rw-r--r--sal/systools/win32/uwinapi/CopyFileExW.cpp40
-rw-r--r--sal/systools/win32/uwinapi/DeleteVolumeMountPointA.cpp33
-rw-r--r--sal/systools/win32/uwinapi/DeleteVolumeMountPointW.cpp33
-rw-r--r--sal/systools/win32/uwinapi/DllGetVersion.cpp73
-rw-r--r--sal/systools/win32/uwinapi/DllMain.cpp235
-rw-r--r--sal/systools/win32/uwinapi/DrawStateW.cpp74
-rw-r--r--sal/systools/win32/uwinapi/EnumProcesses.cpp41
-rw-r--r--sal/systools/win32/uwinapi/FindFirstVolumeA.cpp30
-rw-r--r--sal/systools/win32/uwinapi/FindFirstVolumeMountPointA.cpp51
-rw-r--r--sal/systools/win32/uwinapi/FindFirstVolumeMountPointW.cpp32
-rw-r--r--sal/systools/win32/uwinapi/FindFirstVolumeW.cpp30
-rw-r--r--sal/systools/win32/uwinapi/FindNextVolumeA.cpp30
-rw-r--r--sal/systools/win32/uwinapi/FindNextVolumeMountPointA.cpp30
-rw-r--r--sal/systools/win32/uwinapi/FindNextVolumeMountPointW.cpp30
-rw-r--r--sal/systools/win32/uwinapi/FindNextVolumeW.cpp30
-rw-r--r--sal/systools/win32/uwinapi/FindVolumeClose.cpp30
-rw-r--r--sal/systools/win32/uwinapi/FindVolumeMountPointClose.cpp30
-rw-r--r--sal/systools/win32/uwinapi/GetDiskFreeSpaceExA.cpp59
-rw-r--r--sal/systools/win32/uwinapi/GetDiskFreeSpaceExW.cpp41
-rw-r--r--sal/systools/win32/uwinapi/GetLogicalDriveStringsW.cpp41
-rw-r--r--sal/systools/win32/uwinapi/GetLongPathName.cpp113
-rw-r--r--sal/systools/win32/uwinapi/GetLongPathNameA.cpp31
-rw-r--r--sal/systools/win32/uwinapi/GetLongPathNameW.cpp63
-rw-r--r--sal/systools/win32/uwinapi/GetModuleFileNameExA.cpp53
-rw-r--r--sal/systools/win32/uwinapi/GetModuleFileNameExW.cpp18
-rw-r--r--sal/systools/win32/uwinapi/GetProcessId.cpp164
-rw-r--r--sal/systools/win32/uwinapi/GetUserDefaultUILanguage.cpp34
-rw-r--r--sal/systools/win32/uwinapi/GetUserDomainA.cpp46
-rw-r--r--sal/systools/win32/uwinapi/GetUserDomainW.cpp47
-rw-r--r--sal/systools/win32/uwinapi/GetUserDomain_NT.cpp30
-rw-r--r--sal/systools/win32/uwinapi/GetUserDomain_WINDOWS.cpp79
-rw-r--r--sal/systools/win32/uwinapi/GetVolumeNameForVolumeMountPointA.cpp30
-rw-r--r--sal/systools/win32/uwinapi/GetVolumeNameForVolumeMountPointW.cpp30
-rw-r--r--sal/systools/win32/uwinapi/GetVolumePathNameA.cpp30
-rw-r--r--sal/systools/win32/uwinapi/GetVolumePathNameW.cpp30
-rw-r--r--sal/systools/win32/uwinapi/MCIWndCreateW.cpp42
-rw-r--r--sal/systools/win32/uwinapi/MoveFileExA.cpp97
-rw-r--r--sal/systools/win32/uwinapi/MoveFileExW.cpp38
-rw-r--r--sal/systools/win32/uwinapi/PathAddBackslashW.cpp42
-rw-r--r--sal/systools/win32/uwinapi/PathCompactPathExW.cpp46
-rw-r--r--sal/systools/win32/uwinapi/PathFileExistsW.cpp40
-rw-r--r--sal/systools/win32/uwinapi/PathFindExtensionW.cpp52
-rw-r--r--sal/systools/win32/uwinapi/PathFindFileNameW.cpp51
-rw-r--r--sal/systools/win32/uwinapi/PathIsFileSpecW.cpp40
-rw-r--r--sal/systools/win32/uwinapi/PathIsUNCW.cpp40
-rw-r--r--sal/systools/win32/uwinapi/PathRemoveExtensionW.cpp41
-rw-r--r--sal/systools/win32/uwinapi/PathRemoveFileSpecW.cpp42
-rw-r--r--sal/systools/win32/uwinapi/PathSetDlgItemPathW.cpp42
-rw-r--r--sal/systools/win32/uwinapi/PathStripToRootW.cpp42
-rw-r--r--sal/systools/win32/uwinapi/ResolveThunk.cpp64
-rw-r--r--sal/systools/win32/uwinapi/ResolveUnicows.cpp510
-rw-r--r--sal/systools/win32/uwinapi/SHCreateItemFromParsingName.cpp33
-rw-r--r--sal/systools/win32/uwinapi/SHILCreateFromPathW.cpp32
-rw-r--r--sal/systools/win32/uwinapi/SetVolumeMountPointA.cpp30
-rw-r--r--sal/systools/win32/uwinapi/SetVolumeMountPointW.cpp30
-rw-r--r--sal/systools/win32/uwinapi/Uwinapi.def22
-rw-r--r--sal/systools/win32/uwinapi/Uwinapi.h137
-rw-r--r--sal/systools/win32/uwinapi/macros.h232
-rw-r--r--sal/systools/win32/uwinapi/makefile.mk167
-rw-r--r--sal/systools/win32/uwinapi/snprintf.c10
-rw-r--r--sal/systools/win32/uwinapi/sntprintf.c118
-rw-r--r--sal/systools/win32/uwinapi/snwprintf.c5
-rw-r--r--sal/systools/win32/uwinapi/toolhelp.cpp57
-rw-r--r--sal/systools/win32/uwinapi/unicows.dxp546
-rw-r--r--sal/systools/win32/uwinapi/unicows_mingw.dxp544
-rw-r--r--sal/systools/win32/uwinapi/uwinapi.dxp86
-rw-r--r--sal/systools/win32/uwinapi/uwinapi_mingw.dxp90
-rw-r--r--sal/systools/win32/uwinapi/win95sys.h348
-rw-r--r--sal/test/bootstrap65
-rwxr-xr-xsal/test/bootstrap.bat62
-rwxr-xr-xsal/test/bootstrap.pl260
-rw-r--r--sal/test/bootstraptest.ini11
-rw-r--r--sal/test/makefile.mk152
-rw-r--r--sal/test/test_salmain.cxx42
-rw-r--r--sal/test/test_salmainwithargs.cxx42
-rw-r--r--sal/test/testbootstrap.cxx134
-rw-r--r--sal/test/testbootstrap.ini4
-rw-r--r--sal/test/unloading/exports.dxp4
-rw-r--r--sal/test/unloading/makefile.mk126
-rw-r--r--sal/test/unloading/readme.txt14
-rw-r--r--sal/test/unloading/samplelib1.cxx269
-rw-r--r--sal/test/unloading/samplelib1.xml41
-rw-r--r--sal/test/unloading/samplelib2.cxx236
-rw-r--r--sal/test/unloading/unloadTest.cxx656
-rw-r--r--sal/textenc/context.c47
-rw-r--r--sal/textenc/context.h52
-rw-r--r--sal/textenc/convertadobe.tab328
-rw-r--r--sal/textenc/convertbig5hkscs.c493
-rw-r--r--sal/textenc/convertbig5hkscs.h81
-rw-r--r--sal/textenc/convertbig5hkscs.tab72
-rw-r--r--sal/textenc/converter.c164
-rw-r--r--sal/textenc/converter.h66
-rw-r--r--sal/textenc/converteuctw.c452
-rw-r--r--sal/textenc/converteuctw.h78
-rw-r--r--sal/textenc/converteuctw.tab69
-rw-r--r--sal/textenc/convertgb18030.c468
-rw-r--r--sal/textenc/convertgb18030.h92
-rw-r--r--sal/textenc/convertgb18030.tab69
-rw-r--r--sal/textenc/convertiscii.tab112
-rw-r--r--sal/textenc/convertiso2022cn.c862
-rw-r--r--sal/textenc/convertiso2022cn.h84
-rw-r--r--sal/textenc/convertiso2022cn.tab77
-rw-r--r--sal/textenc/convertiso2022jp.c569
-rw-r--r--sal/textenc/convertiso2022jp.h78
-rw-r--r--sal/textenc/convertiso2022jp.tab68
-rw-r--r--sal/textenc/convertiso2022kr.c527
-rw-r--r--sal/textenc/convertiso2022kr.h78
-rw-r--r--sal/textenc/convertiso2022kr.tab68
-rw-r--r--sal/textenc/convertsinglebytetobmpunicode.cxx211
-rw-r--r--sal/textenc/convertsinglebytetobmpunicode.hxx126
-rw-r--r--sal/textenc/generate/big5hkscs2001.pl806
-rw-r--r--sal/textenc/generate/big5hkscs2001.tab8824
-rw-r--r--sal/textenc/generate/cns116431992.pl856
-rw-r--r--sal/textenc/generate/cns116431992.tab22869
-rw-r--r--sal/textenc/generate/gb180302000.pl309
-rw-r--r--sal/textenc/generate/gb180302000.tab9038
-rw-r--r--sal/textenc/gettextencodingdata.h46
-rw-r--r--sal/textenc/makefile.mk87
-rw-r--r--sal/textenc/tcvtarb1.tab936
-rw-r--r--sal/textenc/tcvtbyte.c810
-rw-r--r--sal/textenc/tcvteas1.tab436
-rw-r--r--sal/textenc/tcvtest1.tab4584
-rw-r--r--sal/textenc/tcvtjp1.tab1556
-rw-r--r--sal/textenc/tcvtjp2.tab3964
-rw-r--r--sal/textenc/tcvtjp3.tab2914
-rw-r--r--sal/textenc/tcvtjp4.tab3585
-rw-r--r--sal/textenc/tcvtjp5.tab3350
-rw-r--r--sal/textenc/tcvtjp6.tab2660
-rw-r--r--sal/textenc/tcvtkr1.tab3323
-rw-r--r--sal/textenc/tcvtkr2.tab5415
-rw-r--r--sal/textenc/tcvtkr4.tab3503
-rw-r--r--sal/textenc/tcvtkr5.tab5415
-rw-r--r--sal/textenc/tcvtkr6.tab1238
-rw-r--r--sal/textenc/tcvtlat1.tab1775
-rw-r--r--sal/textenc/tcvtmb.c693
-rw-r--r--sal/textenc/tcvtscn1.tab3860
-rw-r--r--sal/textenc/tcvtscn2.tab4463
-rw-r--r--sal/textenc/tcvtscn3.tab1502
-rw-r--r--sal/textenc/tcvtscn4.tab3070
-rw-r--r--sal/textenc/tcvtscn5.tab3235
-rw-r--r--sal/textenc/tcvtscn6.tab2956
-rw-r--r--sal/textenc/tcvtsym1.tab47
-rw-r--r--sal/textenc/tcvttcn1.tab2894
-rw-r--r--sal/textenc/tcvttcn2.tab3715
-rw-r--r--sal/textenc/tcvttcn6.tab1733
-rw-r--r--sal/textenc/tcvtuni1.tab100
-rw-r--r--sal/textenc/tcvtutf7.c588
-rw-r--r--sal/textenc/tcvtutf8.c419
-rw-r--r--sal/textenc/tenchelp.c213
-rw-r--r--sal/textenc/tenchelp.h297
-rw-r--r--sal/textenc/tencinfo.c1154
-rw-r--r--sal/textenc/textcvt.c264
-rw-r--r--sal/textenc/textenc.cxx226
-rw-r--r--sal/textenc/unichars.c136
-rw-r--r--sal/textenc/unichars.h62
-rw-r--r--sal/typesconfig/makefile.mk61
-rw-r--r--sal/typesconfig/typesconfig.c490
-rw-r--r--sal/unosdk.mk47
-rw-r--r--sal/util/makefile.mk241
-rwxr-xr-xsal/util/sal.map613
-rw-r--r--sal/util/salalloc.list7
-rw-r--r--sal/util/salalloc.map10
-rw-r--r--sal/version.mk40
-rw-r--r--sal/workben/clipboardwben/testcopy/StdAfx.cpp8
-rw-r--r--sal/workben/clipboardwben/testcopy/StdAfx.h32
-rw-r--r--sal/workben/clipboardwben/testcopy/TestWin32.icobin0 -> 1590 bytes
-rw-r--r--sal/workben/clipboardwben/testcopy/XTDataObject.cxx470
-rw-r--r--sal/workben/clipboardwben/testcopy/XTDataObject.hxx132
-rw-r--r--sal/workben/clipboardwben/testcopy/cbcpytest.cxx402
-rw-r--r--sal/workben/clipboardwben/testcopy/cbcpytest.rc122
-rw-r--r--sal/workben/clipboardwben/testcopy/makefile.mk67
-rw-r--r--sal/workben/clipboardwben/testcopy/resource.h31
-rw-r--r--sal/workben/clipboardwben/testcopy/small.icobin0 -> 318 bytes
-rw-r--r--sal/workben/clipboardwben/testpaste/StdAfx.cpp8
-rw-r--r--sal/workben/clipboardwben/testpaste/StdAfx.h32
-rw-r--r--sal/workben/clipboardwben/testpaste/TestWin32.icobin0 -> 1590 bytes
-rw-r--r--sal/workben/clipboardwben/testpaste/cbptest.cxx428
-rw-r--r--sal/workben/clipboardwben/testpaste/cbptest.rc120
-rw-r--r--sal/workben/clipboardwben/testpaste/makefile.mk67
-rw-r--r--sal/workben/clipboardwben/testpaste/resource.h28
-rw-r--r--sal/workben/clipboardwben/testpaste/small.icobin0 -> 318 bytes
-rw-r--r--sal/workben/clipboardwben/testviewer/StdAfx.cpp8
-rw-r--r--sal/workben/clipboardwben/testviewer/StdAfx.h32
-rw-r--r--sal/workben/clipboardwben/testviewer/TestWin32.icobin0 -> 1590 bytes
-rw-r--r--sal/workben/clipboardwben/testviewer/cbvtest.cxx351
-rw-r--r--sal/workben/clipboardwben/testviewer/cbvtest.rc127
-rw-r--r--sal/workben/clipboardwben/testviewer/makefile.mk67
-rw-r--r--sal/workben/clipboardwben/testviewer/resource.h32
-rw-r--r--sal/workben/clipboardwben/testviewer/small.icobin0 -> 318 bytes
-rw-r--r--sal/workben/export.exp1
-rw-r--r--sal/workben/getlocaleinfotest.cxx50
-rw-r--r--sal/workben/makefile.mk386
-rw-r--r--sal/workben/saldyntest.c52
-rw-r--r--sal/workben/salstattest.c56
-rw-r--r--sal/workben/t_cipher.c396
-rw-r--r--sal/workben/t_digest.c378
-rw-r--r--sal/workben/t_ojp_exe.cxx55
-rw-r--r--sal/workben/t_osl_getVolInfo.cxx132
-rw-r--r--sal/workben/t_osl_joinProcess.cxx228
-rw-r--r--sal/workben/t_random.c65
-rw-r--r--sal/workben/t_readline.c58
-rw-r--r--sal/workben/test.cxx66
-rw-r--r--sal/workben/testfile.cxx2786
-rw-r--r--sal/workben/testpip2.cxx97
-rw-r--r--sal/workben/testpipe.cxx168
-rw-r--r--sal/workben/testproc.cxx77
-rw-r--r--sal/workben/tgetpwnam.cxx248
-rw-r--r--salhelper/inc/salhelper/condition.hxx124
-rw-r--r--salhelper/inc/salhelper/dynload.hxx206
-rw-r--r--salhelper/inc/salhelper/future.hxx120
-rw-r--r--salhelper/inc/salhelper/futurequeue.hxx108
-rw-r--r--salhelper/inc/salhelper/monitor.hxx288
-rw-r--r--salhelper/inc/salhelper/queue.hxx186
-rw-r--r--salhelper/inc/salhelper/refobj.hxx110
-rwxr-xr-xsalhelper/inc/salhelper/simplereferenceobject.hxx136
-rw-r--r--salhelper/inc/salhelper/singletonref.hxx210
-rw-r--r--salhelper/prj/build.lst3
-rw-r--r--salhelper/prj/d.lst21
-rw-r--r--salhelper/qa/makefile.mk52
-rw-r--r--salhelper/qa/test_api.cxx250
-rwxr-xr-xsalhelper/qa/version.map6
-rw-r--r--salhelper/source/condition.cxx142
-rw-r--r--salhelper/source/dynload.cxx110
-rw-r--r--salhelper/source/gcc3.map73
-rw-r--r--salhelper/source/gcc3os2.map73
-rw-r--r--salhelper/source/makefile.mk82
-rw-r--r--salhelper/source/msci.map38
-rwxr-xr-xsalhelper/source/simplereferenceobject.cxx74
-rw-r--r--salhelper/source/sols.map76
-rw-r--r--salhelper/test/Symbols/loader.cxx37
-rw-r--r--salhelper/test/Symbols/makefile.mk97
-rw-r--r--salhelper/test/Symbols/samplelib.cxx37
-rw-r--r--salhelper/test/Symbols/samplelib.hxx22
-rw-r--r--salhelper/test/dynamicloader/loader.cxx37
-rw-r--r--salhelper/test/dynamicloader/makefile.mk117
-rw-r--r--salhelper/test/dynamicloader/samplelib.cxx37
-rw-r--r--salhelper/test/dynamicloader/samplelib.hxx22
-rw-r--r--salhelper/test/rtti/exports.dxp8
-rw-r--r--salhelper/test/rtti/makefile.mk107
-rw-r--r--salhelper/test/rtti/rttitest.cxx29
-rw-r--r--salhelper/test/rtti/samplelibrtti.cxx39
-rw-r--r--salhelper/test/rtti/samplelibrtti.hxx28
-rw-r--r--salhelper/test/rtti/sols.map34
-rw-r--r--salhelper/version.mk44
-rw-r--r--sane/inc/sane.h213
-rw-r--r--sane/prj/build.lst3
-rw-r--r--sane/prj/d.lst3
-rw-r--r--sax/inc/sax/dllapi.h39
-rw-r--r--sax/inc/sax/fastattribs.hxx91
-rw-r--r--sax/inc/sax/fshelper.hxx118
-rw-r--r--sax/inc/sax/parser/saxparser.hxx150
-rw-r--r--sax/inc/sax/tools/attributemap.hxx70
-rw-r--r--sax/inc/sax/tools/converter.hxx208
-rw-r--r--sax/inc/sax/tools/saxobject.hxx50
-rw-r--r--sax/inc/sax/tools/tokenmap.hxx65
-rw-r--r--sax/inc/xml2utf.hxx147
-rw-r--r--sax/prj/build.lst6
-rw-r--r--sax/prj/d.lst13
-rw-r--r--sax/qa/cppunit/makefile.mk71
-rw-r--r--sax/qa/cppunit/test_converter.cxx244
-rw-r--r--sax/qa/cppunit/version.map34
-rw-r--r--sax/source/expatwrap/attrlistimpl.cxx168
-rw-r--r--sax/source/expatwrap/attrlistimpl.hxx85
-rw-r--r--sax/source/expatwrap/factory.hxx34
-rw-r--r--sax/source/expatwrap/makefile.mk76
-rw-r--r--sax/source/expatwrap/sax_expat.cxx1107
-rw-r--r--sax/source/expatwrap/saxwriter.cxx1454
-rw-r--r--sax/source/expatwrap/xml2utf.cxx570
-rw-r--r--sax/source/fastparser/facreg.cxx106
-rw-r--r--sax/source/fastparser/fastparser.cxx953
-rw-r--r--sax/source/fastparser/fastparser.hxx164
-rw-r--r--sax/source/fastparser/makefile.mk74
-rw-r--r--sax/source/tools/converter.cxx2098
-rw-r--r--sax/source/tools/fastattribs.cxx168
-rw-r--r--sax/source/tools/fastserializer.cxx401
-rw-r--r--sax/source/tools/fastserializer.hxx161
-rw-r--r--sax/source/tools/fshelper.cxx201
-rw-r--r--sax/source/tools/makefile.mk67
-rw-r--r--sax/test/makefile.mk62
-rw-r--r--sax/test/sax/exports.dxp3
-rw-r--r--sax/test/sax/factory.hxx89
-rw-r--r--sax/test/sax/makefile.mk61
-rw-r--r--sax/test/sax/testsax.cxx870
-rw-r--r--sax/test/sax/testwriter.cxx698
-rw-r--r--sax/test/saxdemo.cxx651
-rw-r--r--sax/test/testcomponent.cxx230
-rw-r--r--sax/util/makefile.mk68
-rw-r--r--sax/util/makefile.pmk30
-rw-r--r--saxon/makefile.mk69
-rw-r--r--saxon/prj/build.lst2
-rw-r--r--saxon/prj/d.lst1
-rw-r--r--saxon/saxon-9.0.0.7-bj.patch1031
-rw-r--r--sc/addin/datefunc/dfa.cl729
-rw-r--r--sc/addin/datefunc/dfa.src178
-rw-r--r--sc/addin/datefunc/makefile.mk145
-rw-r--r--sc/addin/inc/addin.h147
-rw-r--r--sc/addin/inc/dfa.hrc61
-rw-r--r--sc/addin/inc/rot13.hrc35
-rw-r--r--sc/addin/makefile.mk45
-rw-r--r--sc/addin/rot13/exports.map11
-rw-r--r--sc/addin/rot13/makefile.mk88
-rw-r--r--sc/addin/rot13/rot13.cl158
-rw-r--r--sc/addin/rot13/rot13.src58
-rw-r--r--sc/addin/util/cl2c.pl238
-rw-r--r--sc/addin/util/makefile.mk47
-rw-r--r--sc/inc/AccessibleFilterMenu.hxx191
-rw-r--r--sc/inc/AccessibleFilterMenuItem.hxx121
-rw-r--r--sc/inc/AccessibleFilterTopWindow.hxx98
-rw-r--r--sc/inc/AccessibleGlobal.hxx69
-rw-r--r--sc/inc/ViewSettingsSequenceDefines.hxx108
-rw-r--r--sc/inc/addincfg.hxx55
-rw-r--r--sc/inc/addincol.hxx246
-rw-r--r--sc/inc/address.hxx826
-rw-r--r--sc/inc/addruno.hxx110
-rw-r--r--sc/inc/afmtuno.hxx310
-rw-r--r--sc/inc/appluno.hxx211
-rw-r--r--sc/inc/appoptio.hxx149
-rw-r--r--sc/inc/arealink.hxx93
-rw-r--r--sc/inc/attarray.hxx242
-rw-r--r--sc/inc/attrib.hxx402
-rw-r--r--sc/inc/autoform.hxx282
-rw-r--r--sc/inc/autonamecache.hxx58
-rw-r--r--sc/inc/bigrange.hxx273
-rw-r--r--sc/inc/brdcst.hxx70
-rw-r--r--sc/inc/callform.hxx124
-rw-r--r--sc/inc/cell.hxx506
-rw-r--r--sc/inc/cellform.hxx65
-rw-r--r--sc/inc/cellsuno.hxx1569
-rw-r--r--sc/inc/cfgids.hxx41
-rw-r--r--sc/inc/chart2uno.hxx698
-rw-r--r--sc/inc/chartarr.hxx127
-rw-r--r--sc/inc/charthelper.hxx54
-rw-r--r--sc/inc/chartlis.hxx218
-rw-r--r--sc/inc/chartlock.hxx86
-rw-r--r--sc/inc/chartpos.hxx170
-rw-r--r--sc/inc/chartuno.hxx204
-rw-r--r--sc/inc/chgtrack.hxx1370
-rw-r--r--sc/inc/chgviset.hxx149
-rw-r--r--sc/inc/clipparam.hxx88
-rw-r--r--sc/inc/collect.hxx204
-rw-r--r--sc/inc/column.hxx443
-rw-r--r--sc/inc/compiler.hxx539
-rw-r--r--sc/inc/compressedarray.hxx669
-rw-r--r--sc/inc/conditio.hxx301
-rw-r--r--sc/inc/confuno.hxx107
-rw-r--r--sc/inc/consoli.hxx134
-rw-r--r--sc/inc/convuno.hxx218
-rw-r--r--sc/inc/cursuno.hxx110
-rw-r--r--sc/inc/dapiuno.hxx991
-rw-r--r--sc/inc/datauno.hxx665
-rw-r--r--sc/inc/dbcolect.hxx242
-rw-r--r--sc/inc/dbdocutl.hxx52
-rw-r--r--sc/inc/dbtoken.hxx54
-rw-r--r--sc/inc/defltuno.hxx130
-rw-r--r--sc/inc/detdata.hxx106
-rw-r--r--sc/inc/detfunc.hxx166
-rw-r--r--sc/inc/dispuno.hxx151
-rw-r--r--sc/inc/dociter.hxx535
-rw-r--r--sc/inc/docoptio.hxx216
-rw-r--r--sc/inc/docpool.hxx83
-rw-r--r--sc/inc/document.hxx1871
-rw-r--r--sc/inc/docuno.hxx860
-rw-r--r--sc/inc/dpcachetable.hxx249
-rw-r--r--sc/inc/dpdimsave.hxx202
-rwxr-xr-xsc/inc/dpglobal.hxx209
-rw-r--r--sc/inc/dpgroup.hxx265
-rw-r--r--sc/inc/dpobject.hxx300
-rw-r--r--sc/inc/dpoutput.hxx174
-rw-r--r--sc/inc/dpoutputgeometry.hxx77
-rw-r--r--sc/inc/dpsave.hxx286
-rw-r--r--sc/inc/dpsdbtab.hxx97
-rw-r--r--sc/inc/dpshttab.hxx110
-rw-r--r--sc/inc/dptabdat.hxx211
-rw-r--r--sc/inc/dptablecache.hxx122
-rw-r--r--sc/inc/dptabres.hxx738
-rw-r--r--sc/inc/dptabsrc.hxx875
-rw-r--r--sc/inc/drawattr.hxx65
-rw-r--r--sc/inc/drawpage.hxx52
-rw-r--r--sc/inc/drdefuno.hxx52
-rw-r--r--sc/inc/drwlayer.hxx233
-rw-r--r--sc/inc/editsrc.hxx193
-rw-r--r--sc/inc/editutil.hxx264
-rwxr-xr-xsc/inc/eventuno.hxx91
-rw-r--r--sc/inc/externalrefmgr.hxx758
-rw-r--r--sc/inc/fielduno.hxx454
-rw-r--r--sc/inc/fillinfo.hxx153
-rw-r--r--sc/inc/filter.hxx145
-rw-r--r--sc/inc/filtopt.hxx62
-rw-r--r--sc/inc/filtuno.hxx111
-rw-r--r--sc/inc/fmtuno.hxx332
-rw-r--r--sc/inc/forbiuno.hxx55
-rw-r--r--sc/inc/formulaparserpool.hxx67
-rw-r--r--sc/inc/formularesult.hxx615
-rw-r--r--sc/inc/funcdesc.hxx180
-rw-r--r--sc/inc/funcuno.hxx148
-rw-r--r--sc/inc/global.hxx894
-rw-r--r--sc/inc/globstr.hrc583
-rw-r--r--sc/inc/hints.hxx185
-rw-r--r--sc/inc/inputopt.hxx105
-rw-r--r--sc/inc/linkuno.hxx634
-rw-r--r--sc/inc/listenercalls.hxx79
-rw-r--r--sc/inc/lookupcache.hxx257
-rw-r--r--sc/inc/makefile.mk48
-rw-r--r--sc/inc/markarr.hxx87
-rw-r--r--sc/inc/markdata.hxx121
-rw-r--r--sc/inc/miscuno.hxx313
-rw-r--r--sc/inc/mutexhlp.hxx46
-rw-r--r--sc/inc/nameuno.hxx351
-rw-r--r--sc/inc/navicfg.hxx58
-rw-r--r--sc/inc/notesuno.hxx321
-rw-r--r--sc/inc/olinetab.hxx179
-rw-r--r--sc/inc/optuno.hxx93
-rw-r--r--sc/inc/optutil.hxx77
-rw-r--r--sc/inc/pagepar.hxx86
-rw-r--r--sc/inc/pageuno.hxx56
-rw-r--r--sc/inc/paramisc.hxx77
-rw-r--r--sc/inc/patattr.hxx193
-rwxr-xr-xsc/inc/pch/precompiled_sc.cxx28
-rw-r--r--sc/inc/pch/precompiled_sc.hxx245
-rw-r--r--sc/inc/pivot.hxx199
-rw-r--r--sc/inc/postit.hxx263
-rw-r--r--sc/inc/printopt.hxx99
-rw-r--r--sc/inc/prnsave.hxx81
-rw-r--r--sc/inc/progress.hxx159
-rw-r--r--sc/inc/queryparam.hxx142
-rw-r--r--sc/inc/rangelst.hxx117
-rw-r--r--sc/inc/rangenam.hxx224
-rw-r--r--sc/inc/rangeseq.hxx114
-rw-r--r--sc/inc/rangeutl.hxx321
-rw-r--r--sc/inc/rechead.hxx170
-rw-r--r--sc/inc/recursionhelper.hxx159
-rw-r--r--sc/inc/refdata.hxx213
-rw-r--r--sc/inc/reffind.hxx68
-rw-r--r--sc/inc/refreshtimer.hxx158
-rw-r--r--sc/inc/reftokenhelper.hxx80
-rw-r--r--sc/inc/sc.hrc1658
-rw-r--r--sc/inc/scabstdlg.hxx502
-rw-r--r--sc/inc/scdll.hxx79
-rw-r--r--sc/inc/scdllapi.h13
-rw-r--r--sc/inc/scerrors.hxx76
-rw-r--r--sc/inc/scextopt.hxx131
-rw-r--r--sc/inc/scfuncs.hrc332
-rw-r--r--sc/inc/scitems.hxx195
-rw-r--r--sc/inc/scmatrix.hxx443
-rw-r--r--sc/inc/scmod.hxx296
-rw-r--r--sc/inc/scresid.hxx45
-rw-r--r--sc/inc/scwarngs.hxx36
-rw-r--r--sc/inc/segmenttree.hxx172
-rw-r--r--sc/inc/servuno.hxx118
-rw-r--r--sc/inc/shapeuno.hxx242
-rw-r--r--sc/inc/sheetdata.hxx185
-rw-r--r--sc/inc/sheetevents.hxx67
-rw-r--r--sc/inc/shellids.hxx55
-rw-r--r--sc/inc/sortparam.hxx81
-rw-r--r--sc/inc/srchuno.hxx129
-rw-r--r--sc/inc/stlpool.hxx86
-rw-r--r--sc/inc/stlsheet.hxx91
-rw-r--r--sc/inc/stringutil.hxx56
-rw-r--r--sc/inc/strload.hxx51
-rw-r--r--sc/inc/styleuno.hxx378
-rw-r--r--sc/inc/subtotal.hxx57
-rw-r--r--sc/inc/tabbgcolor.hxx54
-rw-r--r--sc/inc/table.hxx927
-rw-r--r--sc/inc/tablink.hxx121
-rw-r--r--sc/inc/tabopparams.hxx104
-rw-r--r--sc/inc/tabprotection.hxx177
-rw-r--r--sc/inc/targuno.hxx206
-rw-r--r--sc/inc/textuno.hxx418
-rw-r--r--sc/inc/token.hxx507
-rw-r--r--sc/inc/tokenarray.hxx97
-rw-r--r--sc/inc/tokenuno.hxx158
-rw-r--r--sc/inc/unitconv.hxx73
-rw-r--r--sc/inc/unoguard.hxx42
-rw-r--r--sc/inc/unonames.hxx645
-rw-r--r--sc/inc/unoreflist.hxx84
-rw-r--r--sc/inc/unowids.hxx96
-rw-r--r--sc/inc/userdat.hxx118
-rw-r--r--sc/inc/userlist.hxx91
-rw-r--r--sc/inc/validat.hxx213
-rw-r--r--sc/inc/viewopti.hxx179
-rw-r--r--sc/inc/viewuno.hxx396
-rw-r--r--sc/inc/waitoff.hxx46
-rw-r--r--sc/inc/warnpassword.hxx48
-rw-r--r--sc/inc/xmlwrap.hxx85
-rw-r--r--sc/inc/zforauto.hxx72
-rwxr-xr-xsc/prj/build.lst50
-rw-r--r--sc/prj/d.lst34
-rwxr-xr-xsc/qa/complex/calcPreview/ViewForwarder.java1057
-rwxr-xr-xsc/qa/complex/calcPreview/makefile.mk93
-rwxr-xr-xsc/qa/complex/calcPreview/test_documents/calcshapes.sxcbin0 -> 13030 bytes
-rwxr-xr-xsc/qa/complex/cellRanges/CheckXCellRangesQuery.java229
-rwxr-xr-xsc/qa/complex/cellRanges/makefile.mk77
-rw-r--r--sc/qa/complex/dataPilot/CheckDataPilot.java329
-rw-r--r--sc/qa/complex/dataPilot/interfaceTests/beans/_XPropertySet.java631
-rw-r--r--sc/qa/complex/dataPilot/interfaceTests/beans/makefile.mk46
-rw-r--r--sc/qa/complex/dataPilot/interfaceTests/container/_XNamed.java147
-rw-r--r--sc/qa/complex/dataPilot/interfaceTests/container/makefile.mk46
-rw-r--r--sc/qa/complex/dataPilot/interfaceTests/sheet/_XDataPilotDescriptor.java449
-rw-r--r--sc/qa/complex/dataPilot/interfaceTests/sheet/_XDataPilotTable.java133
-rw-r--r--sc/qa/complex/dataPilot/interfaceTests/sheet/makefile.mk46
-rw-r--r--sc/qa/complex/dataPilot/makefile.mk58
-rw-r--r--sc/qa/complex/sc/CalcRTL.java567
-rw-r--r--sc/qa/complex/sc/makefile.mk57
-rw-r--r--sc/qa/unoapi/Test.java51
-rw-r--r--sc/qa/unoapi/knownissues.xcl199
-rw-r--r--sc/qa/unoapi/makefile.mk48
-rw-r--r--sc/qa/unoapi/sc.sce125
-rw-r--r--sc/qa/unoapi/testdocuments/10test.csv19
-rw-r--r--sc/qa/unoapi/testdocuments/ScAnnotationShapeObj.sxcbin0 -> 6542 bytes
-rw-r--r--sc/qa/unoapi/testdocuments/ScDDELinksObj.sdcbin0 -> 17408 bytes
-rw-r--r--sc/qa/unoapi/testdocuments/ScSheetLinksObj.sdcbin0 -> 16896 bytes
-rw-r--r--sc/qa/unoapi/testdocuments/calcshapes.sxcbin0 -> 13030 bytes
-rw-r--r--sc/qa/unoapi/testdocuments/crazy-blue.jpgbin0 -> 4451 bytes
-rw-r--r--sc/qa/unoapi/testdocuments/space-metal.jpgbin0 -> 4313 bytes
-rw-r--r--sc/sdi/app.sdi93
-rw-r--r--sc/sdi/auditsh.sdi41
-rw-r--r--sc/sdi/cellsh.sdi422
-rw-r--r--sc/sdi/chartsh.sdi31
-rw-r--r--sc/sdi/docsh.sdi123
-rw-r--r--sc/sdi/drawsh.sdi239
-rw-r--r--sc/sdi/drformsh.sdi31
-rw-r--r--sc/sdi/drtxtob.sdi148
-rw-r--r--sc/sdi/editsh.sdi109
-rw-r--r--sc/sdi/formatsh.sdi149
-rw-r--r--sc/sdi/graphsh.sdi152
-rw-r--r--sc/sdi/makefile.mk75
-rw-r--r--sc/sdi/mediash.sdi41
-rw-r--r--sc/sdi/oleobjsh.sdi31
-rw-r--r--sc/sdi/pgbrksh.sdi31
-rw-r--r--sc/sdi/pivotsh.sdi39
-rw-r--r--sc/sdi/prevwsh.sdi169
-rw-r--r--sc/sdi/scalc.sdi7828
-rw-r--r--sc/sdi/scslots.hrc33
-rw-r--r--sc/sdi/scslots.sdi78
-rw-r--r--sc/sdi/tabpopsh.sdi31
-rw-r--r--sc/sdi/tabvwsh.sdi286
-rw-r--r--sc/source/core/data/attarray.cxx2611
-rw-r--r--sc/source/core/data/attrib.cxx1328
-rw-r--r--sc/source/core/data/autonamecache.cxx109
-rw-r--r--sc/source/core/data/bcaslot.cxx937
-rw-r--r--sc/source/core/data/cell.cxx2037
-rw-r--r--sc/source/core/data/cell2.cxx1627
-rw-r--r--sc/source/core/data/clipparam.cxx200
-rw-r--r--sc/source/core/data/column.cxx2160
-rw-r--r--sc/source/core/data/column2.cxx1866
-rw-r--r--sc/source/core/data/column3.cxx2001
-rw-r--r--sc/source/core/data/compressedarray.cxx906
-rw-r--r--sc/source/core/data/conditio.cxx1603
-rw-r--r--sc/source/core/data/dbdocutl.cxx197
-rw-r--r--sc/source/core/data/dociter.cxx2158
-rw-r--r--sc/source/core/data/docpool.cxx1059
-rw-r--r--sc/source/core/data/documen2.cxx1300
-rw-r--r--sc/source/core/data/documen3.cxx2128
-rw-r--r--sc/source/core/data/documen4.cxx1198
-rw-r--r--sc/source/core/data/documen5.cxx794
-rw-r--r--sc/source/core/data/documen6.cxx184
-rw-r--r--sc/source/core/data/documen7.cxx534
-rw-r--r--sc/source/core/data/documen8.cxx1625
-rw-r--r--sc/source/core/data/documen9.cxx820
-rw-r--r--sc/source/core/data/document.cxx5266
-rw-r--r--sc/source/core/data/dpcachetable.cxx468
-rw-r--r--sc/source/core/data/dpdimsave.cxx584
-rwxr-xr-xsc/source/core/data/dpglobal.cxx150
-rw-r--r--sc/source/core/data/dpgroup.cxx1589
-rw-r--r--sc/source/core/data/dpobject.cxx2642
-rwxr-xr-xsc/source/core/data/dpoutput.cxx2060
-rw-r--r--sc/source/core/data/dpoutputgeometry.cxx214
-rw-r--r--sc/source/core/data/dpsave.cxx1480
-rw-r--r--sc/source/core/data/dpsdbtab.cxx312
-rwxr-xr-xsc/source/core/data/dpshttab.cxx315
-rwxr-xr-xsc/source/core/data/dptabdat.cxx329
-rwxr-xr-xsc/source/core/data/dptablecache.cxx1125
-rwxr-xr-xsc/source/core/data/dptabres.cxx4109
-rw-r--r--sc/source/core/data/dptabsrc.cxx2927
-rw-r--r--sc/source/core/data/drawpage.cxx65
-rw-r--r--sc/source/core/data/drwlayer.cxx2107
-rw-r--r--sc/source/core/data/fillinfo.cxx1079
-rw-r--r--sc/source/core/data/global.cxx1992
-rw-r--r--sc/source/core/data/global2.cxx915
-rw-r--r--sc/source/core/data/globalx.cxx171
-rw-r--r--sc/source/core/data/makefile.mk179
-rw-r--r--sc/source/core/data/markarr.cxx410
-rw-r--r--sc/source/core/data/markdata.cxx608
-rw-r--r--sc/source/core/data/olinetab.cxx806
-rw-r--r--sc/source/core/data/pagepar.cxx122
-rw-r--r--sc/source/core/data/patattr.cxx1347
-rw-r--r--sc/source/core/data/pivot2.cxx115
-rw-r--r--sc/source/core/data/poolhelp.cxx128
-rw-r--r--sc/source/core/data/postit.cxx920
-rw-r--r--sc/source/core/data/scdpoutputimpl.cxx187
-rwxr-xr-xsc/source/core/data/scdpoutputimpl.hxx79
-rw-r--r--sc/source/core/data/segmenttree.cxx582
-rw-r--r--sc/source/core/data/sheetevents.cxx172
-rw-r--r--sc/source/core/data/sortparam.cxx263
-rw-r--r--sc/source/core/data/stlpool.cxx641
-rw-r--r--sc/source/core/data/stlsheet.cxx346
-rw-r--r--sc/source/core/data/tabbgcolor.cxx62
-rw-r--r--sc/source/core/data/table1.cxx1709
-rw-r--r--sc/source/core/data/table2.cxx3192
-rw-r--r--sc/source/core/data/table3.cxx1957
-rw-r--r--sc/source/core/data/table4.cxx1990
-rw-r--r--sc/source/core/data/table5.cxx1195
-rw-r--r--sc/source/core/data/table6.cxx690
-rw-r--r--sc/source/core/data/tabprotection.cxx429
-rw-r--r--sc/source/core/data/userdat.cxx127
-rw-r--r--sc/source/core/data/validat.cxx996
-rw-r--r--sc/source/core/inc/addinhelpid.hxx60
-rw-r--r--sc/source/core/inc/addinlis.hxx98
-rw-r--r--sc/source/core/inc/adiasync.hxx92
-rw-r--r--sc/source/core/inc/bcaslot.hxx306
-rw-r--r--sc/source/core/inc/cellkeytranslator.hxx91
-rw-r--r--sc/source/core/inc/core_pch.hxx248
-rw-r--r--sc/source/core/inc/ddelink.hxx99
-rw-r--r--sc/source/core/inc/doubleref.hxx193
-rw-r--r--sc/source/core/inc/interpre.hxx905
-rw-r--r--sc/source/core/inc/jumpmatrix.hxx222
-rw-r--r--sc/source/core/inc/makefile.mk26
-rw-r--r--sc/source/core/inc/parclass.hxx180
-rw-r--r--sc/source/core/inc/poolhelp.hxx74
-rw-r--r--sc/source/core/inc/refupdat.hxx100
-rw-r--r--sc/source/core/inc/scrdata.hxx49
-rw-r--r--sc/source/core/src/compiler.src79
-rw-r--r--sc/source/core/src/makefile.mk48
-rw-r--r--sc/source/core/tool/addincfg.cxx72
-rw-r--r--sc/source/core/tool/addincol.cxx1802
-rw-r--r--sc/source/core/tool/addinhelpid.cxx217
-rw-r--r--sc/source/core/tool/addinlis.cxx190
-rw-r--r--sc/source/core/tool/address.cxx2029
-rw-r--r--sc/source/core/tool/adiasync.cxx187
-rw-r--r--sc/source/core/tool/appoptio.cxx745
-rw-r--r--sc/source/core/tool/autoform.cxx1200
-rw-r--r--sc/source/core/tool/callform.cxx469
-rw-r--r--sc/source/core/tool/cellform.cxx216
-rw-r--r--sc/source/core/tool/cellkeytranslator.cxx232
-rw-r--r--sc/source/core/tool/cellkeywords.inl181
-rw-r--r--sc/source/core/tool/chartarr.cxx615
-rw-r--r--sc/source/core/tool/charthelper.cxx298
-rw-r--r--sc/source/core/tool/chartlis.cxx736
-rw-r--r--sc/source/core/tool/chartlock.cxx195
-rw-r--r--sc/source/core/tool/chartpos.cxx646
-rw-r--r--sc/source/core/tool/chgtrack.cxx4869
-rw-r--r--sc/source/core/tool/chgviset.cxx178
-rw-r--r--sc/source/core/tool/collect.cxx522
-rw-r--r--sc/source/core/tool/compiler.cxx5484
-rw-r--r--sc/source/core/tool/consoli.cxx858
-rw-r--r--sc/source/core/tool/dbcolect.cxx891
-rw-r--r--sc/source/core/tool/ddelink.cxx279
-rw-r--r--sc/source/core/tool/detdata.cxx118
-rw-r--r--sc/source/core/tool/detfunc.cxx1712
-rw-r--r--sc/source/core/tool/docoptio.cxx442
-rw-r--r--sc/source/core/tool/doubleref.cxx565
-rw-r--r--sc/source/core/tool/editutil.cxx778
-rw-r--r--sc/source/core/tool/filtopt.cxx120
-rw-r--r--sc/source/core/tool/formulaparserpool.cxx168
-rw-r--r--sc/source/core/tool/hints.cxx162
-rw-r--r--sc/source/core/tool/inputopt.cxx274
-rw-r--r--sc/source/core/tool/interpr1.cxx7460
-rw-r--r--sc/source/core/tool/interpr2.cxx3032
-rw-r--r--sc/source/core/tool/interpr3.cxx4244
-rw-r--r--sc/source/core/tool/interpr4.cxx3979
-rw-r--r--sc/source/core/tool/interpr5.cxx2815
-rw-r--r--sc/source/core/tool/interpr6.cxx199
-rw-r--r--sc/source/core/tool/lookupcache.cxx126
-rw-r--r--sc/source/core/tool/makefile.mk167
-rw-r--r--sc/source/core/tool/navicfg.cxx80
-rw-r--r--sc/source/core/tool/odffmap.cxx149
-rw-r--r--sc/source/core/tool/optutil.cxx79
-rw-r--r--sc/source/core/tool/parclass.cxx578
-rw-r--r--sc/source/core/tool/printopt.cxx211
-rw-r--r--sc/source/core/tool/prnsave.cxx135
-rw-r--r--sc/source/core/tool/progress.cxx198
-rw-r--r--sc/source/core/tool/queryparam.cxx369
-rw-r--r--sc/source/core/tool/rangelst.cxx703
-rw-r--r--sc/source/core/tool/rangenam.cxx824
-rw-r--r--sc/source/core/tool/rangeseq.cxx476
-rw-r--r--sc/source/core/tool/rangeutl.cxx1054
-rw-r--r--sc/source/core/tool/rechead.cxx173
-rw-r--r--sc/source/core/tool/refdata.cxx372
-rw-r--r--sc/source/core/tool/reffind.cxx168
-rw-r--r--sc/source/core/tool/refreshtimer.cxx81
-rw-r--r--sc/source/core/tool/reftokenhelper.cxx479
-rw-r--r--sc/source/core/tool/refupdat.cxx939
-rw-r--r--sc/source/core/tool/scmatrix.cxx859
-rw-r--r--sc/source/core/tool/stringutil.cxx131
-rw-r--r--sc/source/core/tool/subtotal.cxx81
-rw-r--r--sc/source/core/tool/token.cxx1836
-rw-r--r--sc/source/core/tool/unitconv.cxx178
-rw-r--r--sc/source/core/tool/userlist.cxx297
-rw-r--r--sc/source/core/tool/viewopti.cxx754
-rw-r--r--sc/source/core/tool/zforauto.cxx106
-rw-r--r--sc/source/filter/dif/difexp.cxx317
-rw-r--r--sc/source/filter/dif/difimp.cxx1008
-rw-r--r--sc/source/filter/dif/makefile.mk54
-rw-r--r--sc/source/filter/excel/colrowst.cxx318
-rw-r--r--sc/source/filter/excel/excdoc.cxx832
-rw-r--r--sc/source/filter/excel/excel.cxx304
-rw-r--r--sc/source/filter/excel/excform.cxx2013
-rw-r--r--sc/source/filter/excel/excform8.cxx1596
-rw-r--r--sc/source/filter/excel/excimp8.cxx727
-rw-r--r--sc/source/filter/excel/excrecds.cxx1051
-rw-r--r--sc/source/filter/excel/exctools.cxx434
-rw-r--r--sc/source/filter/excel/expop2.cxx219
-rw-r--r--sc/source/filter/excel/fontbuff.cxx163
-rw-r--r--sc/source/filter/excel/frmbase.cxx282
-rw-r--r--sc/source/filter/excel/impop.cxx1334
-rw-r--r--sc/source/filter/excel/makefile.mk160
-rw-r--r--sc/source/filter/excel/namebuff.cxx344
-rw-r--r--sc/source/filter/excel/ooxml-export-TODO.txt148
-rw-r--r--sc/source/filter/excel/read.cxx1243
-rw-r--r--sc/source/filter/excel/tokstack.cxx888
-rw-r--r--sc/source/filter/excel/xechart.cxx3303
-rw-r--r--sc/source/filter/excel/xecontent.cxx1462
-rw-r--r--sc/source/filter/excel/xeescher.cxx1284
-rw-r--r--sc/source/filter/excel/xeformula.cxx2646
-rw-r--r--sc/source/filter/excel/xehelper.cxx1144
-rw-r--r--sc/source/filter/excel/xelink.cxx2371
-rw-r--r--sc/source/filter/excel/xename.cxx791
-rw-r--r--sc/source/filter/excel/xepage.cxx414
-rw-r--r--sc/source/filter/excel/xepivot.cxx1810
-rw-r--r--sc/source/filter/excel/xerecord.cxx302
-rw-r--r--sc/source/filter/excel/xeroot.cxx269
-rw-r--r--sc/source/filter/excel/xestream.cxx1034
-rw-r--r--sc/source/filter/excel/xestring.cxx656
-rw-r--r--sc/source/filter/excel/xestyle.cxx2903
-rw-r--r--sc/source/filter/excel/xetable.cxx2579
-rw-r--r--sc/source/filter/excel/xeview.cxx538
-rwxr-xr-xsc/source/filter/excel/xichart.cxx4147
-rw-r--r--sc/source/filter/excel/xicontent.cxx1319
-rw-r--r--sc/source/filter/excel/xiescher.cxx4120
-rw-r--r--sc/source/filter/excel/xiformula.cxx127
-rw-r--r--sc/source/filter/excel/xihelper.cxx918
-rw-r--r--sc/source/filter/excel/xilink.cxx807
-rw-r--r--sc/source/filter/excel/xiname.cxx264
-rw-r--r--sc/source/filter/excel/xipage.cxx390
-rw-r--r--sc/source/filter/excel/xipivot.cxx1638
-rw-r--r--sc/source/filter/excel/xiroot.cxx299
-rw-r--r--sc/source/filter/excel/xistream.cxx1102
-rw-r--r--sc/source/filter/excel/xistring.cxx213
-rw-r--r--sc/source/filter/excel/xistyle.cxx1823
-rw-r--r--sc/source/filter/excel/xiview.cxx304
-rw-r--r--sc/source/filter/excel/xladdress.cxx161
-rwxr-xr-xsc/source/filter/excel/xlchart.cxx1328
-rw-r--r--sc/source/filter/excel/xlescher.cxx379
-rw-r--r--sc/source/filter/excel/xlformula.cxx786
-rw-r--r--sc/source/filter/excel/xlpage.cxx248
-rw-r--r--sc/source/filter/excel/xlpivot.cxx1031
-rw-r--r--sc/source/filter/excel/xlroot.cxx419
-rw-r--r--sc/source/filter/excel/xlstyle.cxx1771
-rw-r--r--sc/source/filter/excel/xltools.cxx736
-rw-r--r--sc/source/filter/excel/xltracer.cxx270
-rw-r--r--sc/source/filter/excel/xlview.cxx115
-rw-r--r--sc/source/filter/ftools/fapihelper.cxx412
-rw-r--r--sc/source/filter/ftools/fprogressbar.cxx260
-rw-r--r--sc/source/filter/ftools/ftools.cxx406
-rw-r--r--sc/source/filter/ftools/makefile.mk58
-rw-r--r--sc/source/filter/html/htmlexp.cxx1341
-rw-r--r--sc/source/filter/html/htmlexp2.cxx249
-rw-r--r--sc/source/filter/html/htmlimp.cxx260
-rw-r--r--sc/source/filter/html/htmlpars.cxx3069
-rw-r--r--sc/source/filter/html/makefile.mk62
-rw-r--r--sc/source/filter/inc/XclExpChangeTrack.hxx641
-rw-r--r--sc/source/filter/inc/XclImpChangeTrack.hxx202
-rw-r--r--sc/source/filter/inc/biff.hxx64
-rw-r--r--sc/source/filter/inc/colrowst.hxx80
-rw-r--r--sc/source/filter/inc/decl.h44
-rw-r--r--sc/source/filter/inc/dif.hxx227
-rw-r--r--sc/source/filter/inc/eeimport.hxx68
-rw-r--r--sc/source/filter/inc/eeparser.hxx153
-rw-r--r--sc/source/filter/inc/excdefs.hxx106
-rw-r--r--sc/source/filter/inc/excdoc.hxx120
-rw-r--r--sc/source/filter/inc/excform.hxx160
-rw-r--r--sc/source/filter/inc/excimp8.hxx165
-rw-r--r--sc/source/filter/inc/excrecds.hxx506
-rw-r--r--sc/source/filter/inc/excscen.hxx147
-rw-r--r--sc/source/filter/inc/exp_op.hxx147
-rw-r--r--sc/source/filter/inc/expbase.hxx82
-rw-r--r--sc/source/filter/inc/fapihelper.hxx352
-rw-r--r--sc/source/filter/inc/filt_pch.hxx321
-rw-r--r--sc/source/filter/inc/fkttab.h46
-rw-r--r--sc/source/filter/inc/flttypes.hxx51
-rw-r--r--sc/source/filter/inc/formel.hxx296
-rw-r--r--sc/source/filter/inc/fprogressbar.hxx243
-rw-r--r--sc/source/filter/inc/ftools.hxx544
-rw-r--r--sc/source/filter/inc/funktion.h50
-rw-r--r--sc/source/filter/inc/htmlexp.hxx174
-rw-r--r--sc/source/filter/inc/htmlimp.hxx52
-rw-r--r--sc/source/filter/inc/htmlpars.hxx638
-rw-r--r--sc/source/filter/inc/imp_op.hxx205
-rw-r--r--sc/source/filter/inc/lotattr.hxx153
-rw-r--r--sc/source/filter/inc/lotfntbf.hxx111
-rw-r--r--sc/source/filter/inc/lotform.hxx132
-rw-r--r--sc/source/filter/inc/lotimpop.hxx169
-rw-r--r--sc/source/filter/inc/lotrange.hxx167
-rw-r--r--sc/source/filter/inc/makefile.mk26
-rw-r--r--sc/source/filter/inc/namebuff.hxx356
-rw-r--r--sc/source/filter/inc/op.h70
-rw-r--r--sc/source/filter/inc/optab.h52
-rw-r--r--sc/source/filter/inc/otlnbuff.hxx78
-rw-r--r--sc/source/filter/inc/qpro.hxx59
-rw-r--r--sc/source/filter/inc/qproform.hxx86
-rw-r--r--sc/source/filter/inc/qprostyle.hxx69
-rw-r--r--sc/source/filter/inc/root.hxx119
-rw-r--r--sc/source/filter/inc/rtfexp.hxx52
-rw-r--r--sc/source/filter/inc/rtfimp.hxx41
-rw-r--r--sc/source/filter/inc/rtfparse.hxx89
-rw-r--r--sc/source/filter/inc/scflt.hxx764
-rw-r--r--sc/source/filter/inc/scfobj.hxx45
-rw-r--r--sc/source/filter/inc/scmem.h37
-rw-r--r--sc/source/filter/inc/tokstack.hxx408
-rw-r--r--sc/source/filter/inc/tool.h164
-rw-r--r--sc/source/filter/inc/xcl97dum.hxx90
-rw-r--r--sc/source/filter/inc/xcl97esc.hxx201
-rw-r--r--sc/source/filter/inc/xcl97rec.hxx592
-rw-r--r--sc/source/filter/inc/xechart.hxx1275
-rw-r--r--sc/source/filter/inc/xecontent.hxx352
-rw-r--r--sc/source/filter/inc/xeescher.hxx435
-rw-r--r--sc/source/filter/inc/xeformula.hxx97
-rw-r--r--sc/source/filter/inc/xehelper.hxx451
-rw-r--r--sc/source/filter/inc/xelink.hxx221
-rw-r--r--sc/source/filter/inc/xename.hxx91
-rw-r--r--sc/source/filter/inc/xepage.hxx137
-rw-r--r--sc/source/filter/inc/xepivot.hxx486
-rw-r--r--sc/source/filter/inc/xerecord.hxx419
-rw-r--r--sc/source/filter/inc/xeroot.hxx175
-rw-r--r--sc/source/filter/inc/xestream.hxx355
-rw-r--r--sc/source/filter/inc/xestring.hxx350
-rw-r--r--sc/source/filter/inc/xestyle.hxx781
-rw-r--r--sc/source/filter/inc/xetable.hxx1089
-rw-r--r--sc/source/filter/inc/xeview.hxx180
-rw-r--r--sc/source/filter/inc/xichart.hxx1514
-rw-r--r--sc/source/filter/inc/xicontent.hxx311
-rw-r--r--sc/source/filter/inc/xiescher.hxx1275
-rw-r--r--sc/source/filter/inc/xiformula.hxx68
-rw-r--r--sc/source/filter/inc/xihelper.hxx369
-rw-r--r--sc/source/filter/inc/xilink.hxx210
-rw-r--r--sc/source/filter/inc/xiname.hxx100
-rw-r--r--sc/source/filter/inc/xipage.hxx82
-rw-r--r--sc/source/filter/inc/xipivot.hxx457
-rw-r--r--sc/source/filter/inc/xiroot.hxx219
-rw-r--r--sc/source/filter/inc/xistream.hxx529
-rw-r--r--sc/source/filter/inc/xistring.hxx121
-rw-r--r--sc/source/filter/inc/xistyle.hxx679
-rw-r--r--sc/source/filter/inc/xiview.hxx95
-rw-r--r--sc/source/filter/inc/xladdress.hxx197
-rwxr-xr-xsc/source/filter/inc/xlchart.hxx1486
-rw-r--r--sc/source/filter/inc/xlconst.hxx277
-rw-r--r--sc/source/filter/inc/xlcontent.hxx194
-rw-r--r--sc/source/filter/inc/xlescher.hxx450
-rw-r--r--sc/source/filter/inc/xlformula.hxx569
-rw-r--r--sc/source/filter/inc/xllink.hxx93
-rw-r--r--sc/source/filter/inc/xlname.hxx75
-rw-r--r--sc/source/filter/inc/xlpage.hxx156
-rw-r--r--sc/source/filter/inc/xlpivot.hxx817
-rw-r--r--sc/source/filter/inc/xlroot.hxx289
-rw-r--r--sc/source/filter/inc/xlstream.hxx53
-rw-r--r--sc/source/filter/inc/xlstring.hxx97
-rw-r--r--sc/source/filter/inc/xlstyle.hxx619
-rw-r--r--sc/source/filter/inc/xltable.hxx202
-rw-r--r--sc/source/filter/inc/xltools.hxx267
-rw-r--r--sc/source/filter/inc/xltracer.hxx148
-rw-r--r--sc/source/filter/inc/xlview.hxx178
-rw-r--r--sc/source/filter/lotus/expop.cxx412
-rw-r--r--sc/source/filter/lotus/export.cxx58
-rw-r--r--sc/source/filter/lotus/filter.cxx248
-rw-r--r--sc/source/filter/lotus/lotattr.cxx299
-rw-r--r--sc/source/filter/lotus/lotform.cxx2074
-rw-r--r--sc/source/filter/lotus/lotimpop.cxx473
-rw-r--r--sc/source/filter/lotus/lotread.cxx324
-rw-r--r--sc/source/filter/lotus/lotus.cxx102
-rw-r--r--sc/source/filter/lotus/makefile.mk69
-rw-r--r--sc/source/filter/lotus/memory.cxx139
-rw-r--r--sc/source/filter/lotus/op.cxx684
-rw-r--r--sc/source/filter/lotus/optab.cxx248
-rw-r--r--sc/source/filter/lotus/tool.cxx651
-rw-r--r--sc/source/filter/qpro/biff.cxx104
-rw-r--r--sc/source/filter/qpro/makefile.mk57
-rw-r--r--sc/source/filter/qpro/qpro.cxx230
-rw-r--r--sc/source/filter/qpro/qproform.cxx745
-rw-r--r--sc/source/filter/qpro/qprostyle.cxx167
-rw-r--r--sc/source/filter/rtf/eeimpars.cxx636
-rw-r--r--sc/source/filter/rtf/expbase.cxx107
-rw-r--r--sc/source/filter/rtf/makefile.mk59
-rw-r--r--sc/source/filter/rtf/rtfexp.cxx305
-rw-r--r--sc/source/filter/rtf/rtfimp.cxx75
-rw-r--r--sc/source/filter/rtf/rtfparse.cxx420
-rw-r--r--sc/source/filter/starcalc/makefile.mk56
-rw-r--r--sc/source/filter/starcalc/scflt.cxx2511
-rw-r--r--sc/source/filter/starcalc/scfobj.cxx104
-rw-r--r--sc/source/filter/xcl97/XclExpChangeTrack.cxx1248
-rw-r--r--sc/source/filter/xcl97/XclImpChangeTrack.cxx502
-rw-r--r--sc/source/filter/xcl97/makefile.mk62
-rw-r--r--sc/source/filter/xcl97/xcl97dum.cxx163
-rw-r--r--sc/source/filter/xcl97/xcl97esc.cxx512
-rw-r--r--sc/source/filter/xcl97/xcl97rec.cxx1448
-rw-r--r--sc/source/filter/xml/XMLCalculationSettingsContext.cxx273
-rw-r--r--sc/source/filter/xml/XMLCalculationSettingsContext.hxx111
-rw-r--r--sc/source/filter/xml/XMLCellRangeSourceContext.cxx133
-rw-r--r--sc/source/filter/xml/XMLCellRangeSourceContext.hxx80
-rw-r--r--sc/source/filter/xml/XMLChangeTrackingExportHelper.cxx817
-rw-r--r--sc/source/filter/xml/XMLChangeTrackingExportHelper.hxx98
-rw-r--r--sc/source/filter/xml/XMLChangeTrackingImportHelper.cxx935
-rw-r--r--sc/source/filter/xml/XMLChangeTrackingImportHelper.hxx249
-rwxr-xr-xsc/source/filter/xml/XMLCodeNameProvider.cxx204
-rwxr-xr-xsc/source/filter/xml/XMLCodeNameProvider.hxx70
-rw-r--r--sc/source/filter/xml/XMLColumnRowGroupExport.cxx187
-rw-r--r--sc/source/filter/xml/XMLColumnRowGroupExport.hxx73
-rw-r--r--sc/source/filter/xml/XMLConsolidationContext.cxx160
-rw-r--r--sc/source/filter/xml/XMLConsolidationContext.hxx73
-rw-r--r--sc/source/filter/xml/XMLConverter.cxx670
-rw-r--r--sc/source/filter/xml/XMLConverter.hxx177
-rw-r--r--sc/source/filter/xml/XMLDDELinksContext.cxx490
-rw-r--r--sc/source/filter/xml/XMLDDELinksContext.hxx230
-rw-r--r--sc/source/filter/xml/XMLDetectiveContext.cxx265
-rw-r--r--sc/source/filter/xml/XMLDetectiveContext.hxx175
-rw-r--r--sc/source/filter/xml/XMLEmptyContext.cxx63
-rw-r--r--sc/source/filter/xml/XMLEmptyContext.hxx57
-rw-r--r--sc/source/filter/xml/XMLExportDDELinks.cxx221
-rw-r--r--sc/source/filter/xml/XMLExportDDELinks.hxx52
-rw-r--r--sc/source/filter/xml/XMLExportDataPilot.cxx898
-rw-r--r--sc/source/filter/xml/XMLExportDataPilot.hxx80
-rw-r--r--sc/source/filter/xml/XMLExportDatabaseRanges.cxx699
-rw-r--r--sc/source/filter/xml/XMLExportDatabaseRanges.hxx62
-rw-r--r--sc/source/filter/xml/XMLExportIterator.cxx892
-rw-r--r--sc/source/filter/xml/XMLExportIterator.hxx413
-rw-r--r--sc/source/filter/xml/XMLExportSharedData.cxx163
-rw-r--r--sc/source/filter/xml/XMLExportSharedData.hxx90
-rw-r--r--sc/source/filter/xml/XMLStylesExportHelper.cxx1267
-rw-r--r--sc/source/filter/xml/XMLStylesExportHelper.hxx294
-rw-r--r--sc/source/filter/xml/XMLStylesImportHelper.cxx587
-rw-r--r--sc/source/filter/xml/XMLStylesImportHelper.hxx195
-rw-r--r--sc/source/filter/xml/XMLTableHeaderFooterContext.cxx268
-rw-r--r--sc/source/filter/xml/XMLTableHeaderFooterContext.hxx114
-rw-r--r--sc/source/filter/xml/XMLTableMasterPageExport.cxx178
-rw-r--r--sc/source/filter/xml/XMLTableMasterPageExport.hxx66
-rw-r--r--sc/source/filter/xml/XMLTableShapeImportHelper.cxx215
-rw-r--r--sc/source/filter/xml/XMLTableShapeImportHelper.hxx62
-rw-r--r--sc/source/filter/xml/XMLTableShapeResizer.cxx385
-rw-r--r--sc/source/filter/xml/XMLTableShapeResizer.hxx81
-rw-r--r--sc/source/filter/xml/XMLTableShapesContext.cxx87
-rw-r--r--sc/source/filter/xml/XMLTableShapesContext.hxx55
-rw-r--r--sc/source/filter/xml/XMLTableSourceContext.cxx146
-rw-r--r--sc/source/filter/xml/XMLTableSourceContext.hxx63
-rw-r--r--sc/source/filter/xml/XMLTextPContext.cxx224
-rw-r--r--sc/source/filter/xml/XMLTextPContext.hxx72
-rw-r--r--sc/source/filter/xml/XMLTrackedChangesContext.cxx2025
-rw-r--r--sc/source/filter/xml/XMLTrackedChangesContext.hxx62
-rw-r--r--sc/source/filter/xml/makefile.mk109
-rw-r--r--sc/source/filter/xml/sheetdata.cxx283
-rw-r--r--sc/source/filter/xml/xmlannoi.cxx220
-rw-r--r--sc/source/filter/xml/xmlannoi.hxx122
-rw-r--r--sc/source/filter/xml/xmlbodyi.cxx338
-rw-r--r--sc/source/filter/xml/xmlbodyi.hxx61
-rw-r--r--sc/source/filter/xml/xmlcelli.cxx1127
-rw-r--r--sc/source/filter/xml/xmlcelli.hxx130
-rw-r--r--sc/source/filter/xml/xmlcoli.cxx333
-rw-r--r--sc/source/filter/xml/xmlcoli.hxx93
-rw-r--r--sc/source/filter/xml/xmlconti.cxx107
-rw-r--r--sc/source/filter/xml/xmlconti.hxx63
-rw-r--r--sc/source/filter/xml/xmlcvali.cxx696
-rw-r--r--sc/source/filter/xml/xmlcvali.hxx61
-rw-r--r--sc/source/filter/xml/xmldpimp.cxx1835
-rw-r--r--sc/source/filter/xml/xmldpimp.hxx693
-rw-r--r--sc/source/filter/xml/xmldrani.cxx991
-rw-r--r--sc/source/filter/xml/xmldrani.hxx362
-rw-r--r--sc/source/filter/xml/xmlexprt.cxx4611
-rw-r--r--sc/source/filter/xml/xmlexprt.hxx293
-rw-r--r--sc/source/filter/xml/xmlexternaltabi.cxx437
-rw-r--r--sc/source/filter/xml/xmlexternaltabi.hxx176
-rw-r--r--sc/source/filter/xml/xmlfilti.cxx785
-rw-r--r--sc/source/filter/xml/xmlfilti.hxx310
-rw-r--r--sc/source/filter/xml/xmlfonte.cxx152
-rw-r--r--sc/source/filter/xml/xmlimprt.cxx3048
-rw-r--r--sc/source/filter/xml/xmlimprt.hxx1048
-rw-r--r--sc/source/filter/xml/xmllabri.cxx145
-rw-r--r--sc/source/filter/xml/xmllabri.hxx90
-rw-r--r--sc/source/filter/xml/xmlnexpi.cxx250
-rw-r--r--sc/source/filter/xml/xmlnexpi.hxx101
-rw-r--r--sc/source/filter/xml/xmlrowi.cxx360
-rw-r--r--sc/source/filter/xml/xmlrowi.hxx93
-rw-r--r--sc/source/filter/xml/xmlsceni.cxx173
-rw-r--r--sc/source/filter/xml/xmlsceni.hxx70
-rw-r--r--sc/source/filter/xml/xmlsorti.cxx279
-rw-r--r--sc/source/filter/xml/xmlsorti.hxx106
-rw-r--r--sc/source/filter/xml/xmlstyle.cxx1876
-rw-r--r--sc/source/filter/xml/xmlstyle.hxx349
-rw-r--r--sc/source/filter/xml/xmlstyli.cxx1087
-rw-r--r--sc/source/filter/xml/xmlstyli.hxx329
-rw-r--r--sc/source/filter/xml/xmlsubti.cxx833
-rw-r--r--sc/source/filter/xml/xmlsubti.hxx193
-rw-r--r--sc/source/filter/xml/xmltabi.cxx422
-rw-r--r--sc/source/filter/xml/xmltabi.hxx78
-rw-r--r--sc/source/filter/xml/xmlwrap.cxx1024
-rw-r--r--sc/source/ui/Accessibility/AccessibilityHints.cxx112
-rw-r--r--sc/source/ui/Accessibility/AccessibleCell.cxx459
-rw-r--r--sc/source/ui/Accessibility/AccessibleCellBase.cxx345
-rw-r--r--sc/source/ui/Accessibility/AccessibleContextBase.cxx628
-rw-r--r--sc/source/ui/Accessibility/AccessibleCsvControl.cxx1680
-rw-r--r--sc/source/ui/Accessibility/AccessibleDataPilotControl.cxx739
-rw-r--r--sc/source/ui/Accessibility/AccessibleDocument.cxx2120
-rw-r--r--sc/source/ui/Accessibility/AccessibleDocumentBase.cxx51
-rw-r--r--sc/source/ui/Accessibility/AccessibleDocumentPagePreview.cxx1942
-rw-r--r--sc/source/ui/Accessibility/AccessibleEditObject.cxx358
-rw-r--r--sc/source/ui/Accessibility/AccessibleFilterMenu.cxx398
-rw-r--r--sc/source/ui/Accessibility/AccessibleFilterMenuItem.cxx205
-rw-r--r--sc/source/ui/Accessibility/AccessibleFilterTopWindow.cxx127
-rw-r--r--sc/source/ui/Accessibility/AccessibleGlobal.cxx95
-rw-r--r--sc/source/ui/Accessibility/AccessiblePageHeader.cxx441
-rw-r--r--sc/source/ui/Accessibility/AccessiblePageHeaderArea.cxx330
-rw-r--r--sc/source/ui/Accessibility/AccessiblePreviewCell.cxx316
-rw-r--r--sc/source/ui/Accessibility/AccessiblePreviewHeaderCell.cxx443
-rw-r--r--sc/source/ui/Accessibility/AccessiblePreviewTable.cxx769
-rw-r--r--sc/source/ui/Accessibility/AccessibleSpreadsheet.cxx999
-rw-r--r--sc/source/ui/Accessibility/AccessibleTableBase.cxx495
-rw-r--r--sc/source/ui/Accessibility/AccessibleText.cxx1911
-rw-r--r--sc/source/ui/Accessibility/DrawModelBroadcaster.cxx92
-rw-r--r--sc/source/ui/Accessibility/makefile.mk94
-rw-r--r--sc/source/ui/app/client.cxx256
-rw-r--r--sc/source/ui/app/drwtrans.cxx804
-rw-r--r--sc/source/ui/app/inputhdl.cxx3826
-rw-r--r--sc/source/ui/app/inputwin.cxx1819
-rw-r--r--sc/source/ui/app/lnktrans.cxx97
-rw-r--r--sc/source/ui/app/makefile.mk75
-rw-r--r--sc/source/ui/app/msgpool.cxx123
-rw-r--r--sc/source/ui/app/rfindlst.cxx67
-rw-r--r--sc/source/ui/app/scdll.cxx419
-rw-r--r--sc/source/ui/app/scmod.cxx2276
-rw-r--r--sc/source/ui/app/scmod2.cxx107
-rw-r--r--sc/source/ui/app/seltrans.cxx449
-rw-r--r--sc/source/ui/app/template.cxx79
-rw-r--r--sc/source/ui/app/transobj.cxx867
-rw-r--r--sc/source/ui/app/typemap.cxx135
-rw-r--r--sc/source/ui/app/uiitems.cxx737
-rw-r--r--sc/source/ui/app/wtcdummy.cxx65
-rw-r--r--sc/source/ui/attrdlg/attrdlg.cxx158
-rw-r--r--sc/source/ui/attrdlg/condfrmt.cxx829
-rw-r--r--sc/source/ui/attrdlg/makefile.mk63
-rw-r--r--sc/source/ui/attrdlg/scabstdlg.cxx56
-rw-r--r--sc/source/ui/attrdlg/scdlgfact.cxx1600
-rw-r--r--sc/source/ui/attrdlg/scdlgfact.hxx593
-rw-r--r--sc/source/ui/attrdlg/scuiexp.cxx55
-rw-r--r--sc/source/ui/attrdlg/tabpages.cxx250
-rw-r--r--sc/source/ui/cctrl/cbuttonw.cxx178
-rw-r--r--sc/source/ui/cctrl/dpcontrol.cxx1422
-rw-r--r--sc/source/ui/cctrl/dpcontrol.src79
-rw-r--r--sc/source/ui/cctrl/editfield.cxx84
-rw-r--r--sc/source/ui/cctrl/makefile.mk71
-rw-r--r--sc/source/ui/cctrl/popmenu.cxx48
-rw-r--r--sc/source/ui/cctrl/tbinsert.cxx232
-rw-r--r--sc/source/ui/cctrl/tbzoomsliderctrl.cxx540
-rw-r--r--sc/source/ui/dbgui/asciiopt.cxx480
-rw-r--r--sc/source/ui/dbgui/asciiopt.hrc71
-rw-r--r--sc/source/ui/dbgui/asciiopt.src305
-rw-r--r--sc/source/ui/dbgui/consdlg.cxx655
-rw-r--r--sc/source/ui/dbgui/consdlg.hrc61
-rw-r--r--sc/source/ui/dbgui/consdlg.src217
-rw-r--r--sc/source/ui/dbgui/csvcontrol.cxx337
-rw-r--r--sc/source/ui/dbgui/csvgrid.cxx1355
-rw-r--r--sc/source/ui/dbgui/csvruler.cxx682
-rw-r--r--sc/source/ui/dbgui/csvsplits.cxx120
-rw-r--r--sc/source/ui/dbgui/csvtablebox.cxx464
-rw-r--r--sc/source/ui/dbgui/dapidata.cxx229
-rw-r--r--sc/source/ui/dbgui/dapitype.cxx142
-rw-r--r--sc/source/ui/dbgui/dapitype.hrc53
-rw-r--r--sc/source/ui/dbgui/dapitype.src308
-rw-r--r--sc/source/ui/dbgui/dbnamdlg.cxx721
-rw-r--r--sc/source/ui/dbgui/dpgroupdlg.cxx360
-rw-r--r--sc/source/ui/dbgui/dpgroupdlg.hrc64
-rw-r--r--sc/source/ui/dbgui/dpgroupdlg.src270
-rw-r--r--sc/source/ui/dbgui/expftext.cxx95
-rw-r--r--sc/source/ui/dbgui/fieldwnd.cxx776
-rw-r--r--sc/source/ui/dbgui/filtdlg.cxx1186
-rw-r--r--sc/source/ui/dbgui/foptmgr.cxx337
-rw-r--r--sc/source/ui/dbgui/imoptdlg.cxx90
-rw-r--r--sc/source/ui/dbgui/imoptdlg.hrc44
-rw-r--r--sc/source/ui/dbgui/imoptdlg.src141
-rw-r--r--sc/source/ui/dbgui/makefile.mk122
-rw-r--r--sc/source/ui/dbgui/outline.src51
-rw-r--r--sc/source/ui/dbgui/pfiltdlg.cxx620
-rw-r--r--sc/source/ui/dbgui/pivot.hrc81
-rw-r--r--sc/source/ui/dbgui/pivot.src328
-rw-r--r--sc/source/ui/dbgui/pvfundlg.cxx790
-rw-r--r--sc/source/ui/dbgui/pvfundlg.hrc83
-rw-r--r--sc/source/ui/dbgui/pvfundlg.src515
-rw-r--r--sc/source/ui/dbgui/pvglob.hxx42
-rw-r--r--sc/source/ui/dbgui/pvlaydlg.cxx1823
-rw-r--r--sc/source/ui/dbgui/scendlg.cxx243
-rw-r--r--sc/source/ui/dbgui/scendlg.hrc57
-rw-r--r--sc/source/ui/dbgui/scendlg.src195
-rw-r--r--sc/source/ui/dbgui/scuiasciiopt.cxx723
-rw-r--r--sc/source/ui/dbgui/scuiimoptdlg.cxx316
-rw-r--r--sc/source/ui/dbgui/sfiltdlg.cxx530
-rw-r--r--sc/source/ui/dbgui/sortdlg.cxx107
-rw-r--r--sc/source/ui/dbgui/subtdlg.cxx69
-rw-r--r--sc/source/ui/dbgui/textimportoptions.cxx121
-rw-r--r--sc/source/ui/dbgui/textimportoptions.src110
-rw-r--r--sc/source/ui/dbgui/tpsort.cxx1080
-rw-r--r--sc/source/ui/dbgui/tpsubt.cxx686
-rw-r--r--sc/source/ui/dbgui/validate.cxx1021
-rw-r--r--sc/source/ui/dbgui/validate.src407
-rw-r--r--sc/source/ui/docshell/arealink.cxx530
-rw-r--r--sc/source/ui/docshell/autostyl.cxx244
-rw-r--r--sc/source/ui/docshell/dbdocfun.cxx1503
-rw-r--r--sc/source/ui/docshell/dbdocimp.cxx720
-rw-r--r--sc/source/ui/docshell/docfunc.cxx4881
-rw-r--r--sc/source/ui/docshell/docsh.cxx2948
-rw-r--r--sc/source/ui/docshell/docsh2.cxx263
-rw-r--r--sc/source/ui/docshell/docsh3.cxx1409
-rw-r--r--sc/source/ui/docshell/docsh4.cxx2734
-rw-r--r--sc/source/ui/docshell/docsh5.cxx995
-rw-r--r--sc/source/ui/docshell/docsh6.cxx469
-rw-r--r--sc/source/ui/docshell/docsh7.cxx45
-rw-r--r--sc/source/ui/docshell/docsh8.cxx1098
-rw-r--r--sc/source/ui/docshell/docshimp.hxx57
-rw-r--r--sc/source/ui/docshell/editable.cxx162
-rw-r--r--sc/source/ui/docshell/externalrefmgr.cxx2455
-rw-r--r--sc/source/ui/docshell/hiranges.cxx53
-rw-r--r--sc/source/ui/docshell/impex.cxx2094
-rw-r--r--sc/source/ui/docshell/makefile.mk139
-rw-r--r--sc/source/ui/docshell/olinefun.cxx790
-rw-r--r--sc/source/ui/docshell/pagedata.cxx139
-rw-r--r--sc/source/ui/docshell/pntlock.cxx61
-rw-r--r--sc/source/ui/docshell/servobj.cxx273
-rw-r--r--sc/source/ui/docshell/sizedev.cxx77
-rw-r--r--sc/source/ui/docshell/tablink.cxx621
-rw-r--r--sc/source/ui/docshell/tpstat.cxx101
-rw-r--r--sc/source/ui/docshell/tpstat.hrc36
-rw-r--r--sc/source/ui/docshell/tpstat.src112
-rw-r--r--sc/source/ui/drawfunc/chartsh.cxx83
-rw-r--r--sc/source/ui/drawfunc/drawsh.cxx503
-rw-r--r--sc/source/ui/drawfunc/drawsh2.cxx399
-rw-r--r--sc/source/ui/drawfunc/drawsh4.cxx115
-rw-r--r--sc/source/ui/drawfunc/drawsh5.cxx760
-rw-r--r--sc/source/ui/drawfunc/drformsh.cxx83
-rw-r--r--sc/source/ui/drawfunc/drformsh.src250
-rw-r--r--sc/source/ui/drawfunc/drtxtob.cxx1095
-rw-r--r--sc/source/ui/drawfunc/drtxtob1.cxx156
-rw-r--r--sc/source/ui/drawfunc/drtxtob2.cxx299
-rw-r--r--sc/source/ui/drawfunc/fuconarc.cxx234
-rw-r--r--sc/source/ui/drawfunc/fuconcustomshape.cxx288
-rw-r--r--sc/source/ui/drawfunc/fuconpol.cxx355
-rw-r--r--sc/source/ui/drawfunc/fuconrec.cxx315
-rw-r--r--sc/source/ui/drawfunc/fuconstr.cxx335
-rw-r--r--sc/source/ui/drawfunc/fuconuno.cxx190
-rw-r--r--sc/source/ui/drawfunc/fudraw.cxx863
-rw-r--r--sc/source/ui/drawfunc/fuins1.cxx447
-rw-r--r--sc/source/ui/drawfunc/fuins2.cxx849
-rw-r--r--sc/source/ui/drawfunc/fumark.cxx290
-rw-r--r--sc/source/ui/drawfunc/fupoor.cxx385
-rw-r--r--sc/source/ui/drawfunc/fusel.cxx649
-rw-r--r--sc/source/ui/drawfunc/fusel2.cxx185
-rw-r--r--sc/source/ui/drawfunc/futext.cxx882
-rw-r--r--sc/source/ui/drawfunc/futext2.cxx307
-rw-r--r--sc/source/ui/drawfunc/futext3.cxx249
-rw-r--r--sc/source/ui/drawfunc/graphsh.cxx148
-rw-r--r--sc/source/ui/drawfunc/makefile.mk88
-rw-r--r--sc/source/ui/drawfunc/mediash.cxx143
-rw-r--r--sc/source/ui/drawfunc/objdraw.src1547
-rw-r--r--sc/source/ui/drawfunc/oleobjsh.cxx83
-rw-r--r--sc/source/ui/formdlg/dwfunctr.cxx1182
-rw-r--r--sc/source/ui/formdlg/dwfunctr.hrc37
-rw-r--r--sc/source/ui/formdlg/dwfunctr.src155
-rw-r--r--sc/source/ui/formdlg/formdata.cxx61
-rw-r--r--sc/source/ui/formdlg/formdlgs.src29
-rw-r--r--sc/source/ui/formdlg/formula.cxx667
-rw-r--r--sc/source/ui/formdlg/makefile.mk55
-rw-r--r--sc/source/ui/formdlg/privsplt.cxx422
-rw-r--r--sc/source/ui/inc/AccessibilityHints.hxx97
-rw-r--r--sc/source/ui/inc/AccessibleCell.hxx173
-rw-r--r--sc/source/ui/inc/AccessibleCellBase.hxx153
-rw-r--r--sc/source/ui/inc/AccessibleContextBase.hxx344
-rw-r--r--sc/source/ui/inc/AccessibleCsvControl.hxx666
-rw-r--r--sc/source/ui/inc/AccessibleDataPilotControl.hxx145
-rw-r--r--sc/source/ui/inc/AccessibleDocument.hxx328
-rw-r--r--sc/source/ui/inc/AccessibleDocumentBase.hxx50
-rw-r--r--sc/source/ui/inc/AccessibleDocumentPagePreview.hxx159
-rw-r--r--sc/source/ui/inc/AccessibleEditObject.hxx178
-rw-r--r--sc/source/ui/inc/AccessiblePageHeader.hxx111
-rw-r--r--sc/source/ui/inc/AccessiblePageHeaderArea.hxx138
-rw-r--r--sc/source/ui/inc/AccessiblePreviewCell.hxx121
-rw-r--r--sc/source/ui/inc/AccessiblePreviewHeaderCell.hxx152
-rw-r--r--sc/source/ui/inc/AccessiblePreviewTable.hxx182
-rw-r--r--sc/source/ui/inc/AccessibleSpreadsheet.hxx289
-rw-r--r--sc/source/ui/inc/AccessibleTableBase.hxx298
-rw-r--r--sc/source/ui/inc/AccessibleText.hxx359
-rw-r--r--sc/source/ui/inc/ChartRangeSelectionListener.hxx79
-rw-r--r--sc/source/ui/inc/DrawModelBroadcaster.hxx59
-rw-r--r--sc/source/ui/inc/IAnyRefDialog.hxx64
-rw-r--r--sc/source/ui/inc/ScDevChart.hxx84
-rw-r--r--sc/source/ui/inc/acredlin.hrc75
-rw-r--r--sc/source/ui/inc/acredlin.hxx264
-rw-r--r--sc/source/ui/inc/anyrefdg.hxx281
-rw-r--r--sc/source/ui/inc/areasave.hxx84
-rw-r--r--sc/source/ui/inc/areasdlg.hxx108
-rw-r--r--sc/source/ui/inc/asciiopt.hxx211
-rw-r--r--sc/source/ui/inc/attrdlg.hrc51
-rw-r--r--sc/source/ui/inc/attrdlg.hxx69
-rw-r--r--sc/source/ui/inc/auditsh.hxx59
-rw-r--r--sc/source/ui/inc/autofmt.hxx210
-rw-r--r--sc/source/ui/inc/autostyl.hxx68
-rw-r--r--sc/source/ui/inc/cbutton.hxx84
-rw-r--r--sc/source/ui/inc/cellsh.hxx106
-rw-r--r--sc/source/ui/inc/chartsh.hxx52
-rw-r--r--sc/source/ui/inc/client.hxx64
-rw-r--r--sc/source/ui/inc/colrowba.hxx110
-rw-r--r--sc/source/ui/inc/condfrmt.hrc73
-rw-r--r--sc/source/ui/inc/condfrmt.hxx155
-rw-r--r--sc/source/ui/inc/conflictsdlg.hrc43
-rw-r--r--sc/source/ui/inc/conflictsdlg.hxx216
-rw-r--r--sc/source/ui/inc/consdlg.hxx136
-rw-r--r--sc/source/ui/inc/content.hxx169
-rw-r--r--sc/source/ui/inc/corodlg.hxx81
-rw-r--r--sc/source/ui/inc/crdlg.hxx66
-rw-r--r--sc/source/ui/inc/crnrdlg.hrc46
-rw-r--r--sc/source/ui/inc/crnrdlg.hxx112
-rw-r--r--sc/source/ui/inc/csvcontrol.hxx432
-rw-r--r--sc/source/ui/inc/csvgrid.hxx358
-rw-r--r--sc/source/ui/inc/csvruler.hxx200
-rw-r--r--sc/source/ui/inc/csvsplits.hxx103
-rw-r--r--sc/source/ui/inc/csvtablebox.hxx161
-rw-r--r--sc/source/ui/inc/dapidata.hxx72
-rw-r--r--sc/source/ui/inc/dapitype.hxx95
-rw-r--r--sc/source/ui/inc/dbdocfun.hxx124
-rw-r--r--sc/source/ui/inc/dbfunc.hxx136
-rw-r--r--sc/source/ui/inc/dbnamdlg.hrc51
-rw-r--r--sc/source/ui/inc/dbnamdlg.hxx127
-rw-r--r--sc/source/ui/inc/delcldlg.hxx64
-rw-r--r--sc/source/ui/inc/delcodlg.hxx74
-rw-r--r--sc/source/ui/inc/docfunc.hxx189
-rw-r--r--sc/source/ui/inc/docsh.hxx468
-rw-r--r--sc/source/ui/inc/dpcontrol.hrc40
-rw-r--r--sc/source/ui/inc/dpcontrol.hxx363
-rw-r--r--sc/source/ui/inc/dpgroupdlg.hxx172
-rw-r--r--sc/source/ui/inc/drawsh.hxx94
-rw-r--r--sc/source/ui/inc/drawutil.hxx51
-rw-r--r--sc/source/ui/inc/drawview.hxx151
-rw-r--r--sc/source/ui/inc/drformsh.hxx55
-rw-r--r--sc/source/ui/inc/drtxtob.hxx89
-rw-r--r--sc/source/ui/inc/drwtrans.hxx110
-rw-r--r--sc/source/ui/inc/dwfunctr.hxx158
-rw-r--r--sc/source/ui/inc/editable.hxx86
-rw-r--r--sc/source/ui/inc/editfield.hxx50
-rw-r--r--sc/source/ui/inc/editsh.hxx86
-rw-r--r--sc/source/ui/inc/expftext.hxx45
-rwxr-xr-xsc/source/ui/inc/fieldwnd.hxx220
-rw-r--r--sc/source/ui/inc/filldlg.hxx144
-rw-r--r--sc/source/ui/inc/filtdlg.hxx267
-rw-r--r--sc/source/ui/inc/filter.hrc82
-rw-r--r--sc/source/ui/inc/foptmgr.hxx121
-rw-r--r--sc/source/ui/inc/formatsh.hxx79
-rw-r--r--sc/source/ui/inc/formdata.hxx66
-rw-r--r--sc/source/ui/inc/formula.hxx138
-rw-r--r--sc/source/ui/inc/fuconarc.hxx62
-rw-r--r--sc/source/ui/inc/fuconcustomshape.hxx61
-rw-r--r--sc/source/ui/inc/fuconpol.hxx63
-rw-r--r--sc/source/ui/inc/fuconrec.hxx62
-rw-r--r--sc/source/ui/inc/fuconstr.hxx67
-rw-r--r--sc/source/ui/inc/fuconuno.hxx67
-rw-r--r--sc/source/ui/inc/fudraw.hxx77
-rw-r--r--sc/source/ui/inc/fuedipo.hxx60
-rw-r--r--sc/source/ui/inc/fuinsert.hxx85
-rw-r--r--sc/source/ui/inc/fumark.hxx74
-rw-r--r--sc/source/ui/inc/funcpage.hxx128
-rw-r--r--sc/source/ui/inc/funcutl.hxx198
-rw-r--r--sc/source/ui/inc/fupoor.hxx136
-rw-r--r--sc/source/ui/inc/fusel.hxx81
-rw-r--r--sc/source/ui/inc/futext.hxx81
-rw-r--r--sc/source/ui/inc/graphsh.hxx57
-rw-r--r--sc/source/ui/inc/gridmerg.hxx64
-rw-r--r--sc/source/ui/inc/gridwin.hxx426
-rw-r--r--sc/source/ui/inc/groupdlg.hxx61
-rw-r--r--sc/source/ui/inc/hdrcont.hxx141
-rw-r--r--sc/source/ui/inc/hfedtdlg.hxx56
-rw-r--r--sc/source/ui/inc/highred.hrc71
-rw-r--r--sc/source/ui/inc/highred.hxx124
-rw-r--r--sc/source/ui/inc/hintwin.hxx54
-rw-r--r--sc/source/ui/inc/hiranges.hxx64
-rw-r--r--sc/source/ui/inc/imoptdlg.hxx108
-rw-r--r--sc/source/ui/inc/impex.hxx191
-rw-r--r--sc/source/ui/inc/inputhdl.hxx296
-rw-r--r--sc/source/ui/inc/inputwin.hxx228
-rw-r--r--sc/source/ui/inc/inscldlg.hxx62
-rw-r--r--sc/source/ui/inc/inscodlg.hxx122
-rw-r--r--sc/source/ui/inc/instbdlg.hrc52
-rw-r--r--sc/source/ui/inc/instbdlg.hxx136
-rw-r--r--sc/source/ui/inc/invmerge.hxx61
-rw-r--r--sc/source/ui/inc/lbseldlg.hxx70
-rw-r--r--sc/source/ui/inc/linkarea.hrc42
-rw-r--r--sc/source/ui/inc/linkarea.hxx106
-rw-r--r--sc/source/ui/inc/lnktrans.hxx53
-rw-r--r--sc/source/ui/inc/makefile.mk26
-rw-r--r--sc/source/ui/inc/mediash.hxx54
-rw-r--r--sc/source/ui/inc/miscdlgs.hrc188
-rw-r--r--sc/source/ui/inc/msgpool.hxx78
-rw-r--r--sc/source/ui/inc/mtrindlg.hxx76
-rw-r--r--sc/source/ui/inc/mvtabdlg.hxx79
-rw-r--r--sc/source/ui/inc/namecrea.hxx59
-rw-r--r--sc/source/ui/inc/namedlg.hrc52
-rw-r--r--sc/source/ui/inc/namedlg.hxx123
-rw-r--r--sc/source/ui/inc/namepast.hxx62
-rw-r--r--sc/source/ui/inc/navcitem.hxx55
-rw-r--r--sc/source/ui/inc/navipi.hxx366
-rw-r--r--sc/source/ui/inc/navsett.hxx59
-rw-r--r--sc/source/ui/inc/notemark.hxx80
-rw-r--r--sc/source/ui/inc/oleobjsh.hxx52
-rw-r--r--sc/source/ui/inc/olinefun.hxx68
-rw-r--r--sc/source/ui/inc/olinewin.hxx244
-rw-r--r--sc/source/ui/inc/opredlin.hrc38
-rw-r--r--sc/source/ui/inc/opredlin.hxx86
-rw-r--r--sc/source/ui/inc/optdlg.hrc192
-rw-r--r--sc/source/ui/inc/optload.hrc40
-rw-r--r--sc/source/ui/inc/optload.hxx68
-rw-r--r--sc/source/ui/inc/optsolver.hrc98
-rw-r--r--sc/source/ui/inc/optsolver.hxx264
-rw-r--r--sc/source/ui/inc/output.hxx272
-rw-r--r--sc/source/ui/inc/pagedata.hxx95
-rw-r--r--sc/source/ui/inc/parawin.hxx171
-rw-r--r--sc/source/ui/inc/pfiltdlg.hxx145
-rw-r--r--sc/source/ui/inc/pfuncache.hxx125
-rw-r--r--sc/source/ui/inc/pgbrksh.hxx53
-rw-r--r--sc/source/ui/inc/pivotsh.hxx61
-rw-r--r--sc/source/ui/inc/pntlock.hxx67
-rw-r--r--sc/source/ui/inc/popmenu.hxx53
-rw-r--r--sc/source/ui/inc/preview.hxx168
-rw-r--r--sc/source/ui/inc/prevloc.hxx157
-rw-r--r--sc/source/ui/inc/prevwsh.hxx137
-rw-r--r--sc/source/ui/inc/printfun.hxx368
-rw-r--r--sc/source/ui/inc/privsplt.hxx86
-rw-r--r--sc/source/ui/inc/protectiondlg.hrc44
-rw-r--r--sc/source/ui/inc/protectiondlg.hxx82
-rw-r--r--sc/source/ui/inc/pvfundlg.hxx244
-rw-r--r--sc/source/ui/inc/pvlaydlg.hxx239
-rw-r--r--sc/source/ui/inc/redcom.hxx70
-rw-r--r--sc/source/ui/inc/reffact.hxx122
-rw-r--r--sc/source/ui/inc/refundo.hxx69
-rw-r--r--sc/source/ui/inc/retypepassdlg.hrc71
-rw-r--r--sc/source/ui/inc/retypepassdlg.hxx174
-rw-r--r--sc/source/ui/inc/rfindlst.hxx75
-rw-r--r--sc/source/ui/inc/scendlg.hxx80
-rw-r--r--sc/source/ui/inc/scui_def.hxx57
-rw-r--r--sc/source/ui/inc/scuiasciiopt.hxx147
-rw-r--r--sc/source/ui/inc/scuiautofmt.hxx88
-rw-r--r--sc/source/ui/inc/scuiimoptdlg.hxx78
-rw-r--r--sc/source/ui/inc/scuitphfedit.hxx165
-rw-r--r--sc/source/ui/inc/select.hxx127
-rw-r--r--sc/source/ui/inc/selectionstate.hxx79
-rw-r--r--sc/source/ui/inc/seltrans.hxx81
-rw-r--r--sc/source/ui/inc/servobj.hxx76
-rw-r--r--sc/source/ui/inc/sharedocdlg.hrc44
-rw-r--r--sc/source/ui/inc/sharedocdlg.hxx76
-rw-r--r--sc/source/ui/inc/shtabdlg.hxx75
-rw-r--r--sc/source/ui/inc/simpref.hrc37
-rw-r--r--sc/source/ui/inc/simpref.hxx122
-rw-r--r--sc/source/ui/inc/sizedev.hxx55
-rw-r--r--sc/source/ui/inc/solveroptions.hrc47
-rw-r--r--sc/source/ui/inc/solveroptions.hxx123
-rw-r--r--sc/source/ui/inc/solverutil.hxx50
-rw-r--r--sc/source/ui/inc/solvrdlg.hrc46
-rw-r--r--sc/source/ui/inc/solvrdlg.hxx109
-rw-r--r--sc/source/ui/inc/sortdlg.hrc90
-rw-r--r--sc/source/ui/inc/sortdlg.hxx87
-rw-r--r--sc/source/ui/inc/spelldialog.hxx103
-rw-r--r--sc/source/ui/inc/spelleng.hxx169
-rw-r--r--sc/source/ui/inc/spellparam.hxx87
-rw-r--r--sc/source/ui/inc/strindlg.hxx66
-rw-r--r--sc/source/ui/inc/styledlg.hrc39
-rw-r--r--sc/source/ui/inc/styledlg.hxx59
-rw-r--r--sc/source/ui/inc/submenu.hrc68
-rw-r--r--sc/source/ui/inc/subtdlg.hrc64
-rw-r--r--sc/source/ui/inc/subtdlg.hxx56
-rw-r--r--sc/source/ui/inc/tabbgcolordlg.hxx78
-rw-r--r--sc/source/ui/inc/tabcont.hxx87
-rw-r--r--sc/source/ui/inc/tabopdlg.hrc50
-rw-r--r--sc/source/ui/inc/tabopdlg.hxx114
-rw-r--r--sc/source/ui/inc/tabpages.hxx83
-rw-r--r--sc/source/ui/inc/tabpopsh.hxx53
-rw-r--r--sc/source/ui/inc/tabsplit.hxx60
-rw-r--r--sc/source/ui/inc/tabview.hxx533
-rw-r--r--sc/source/ui/inc/tabvwsh.hxx442
-rw-r--r--sc/source/ui/inc/target.hxx52
-rw-r--r--sc/source/ui/inc/tbinsert.hrc32
-rw-r--r--sc/source/ui/inc/tbinsert.hxx88
-rw-r--r--sc/source/ui/inc/tbzoomsliderctrl.hxx87
-rw-r--r--sc/source/ui/inc/textdlgs.hxx72
-rw-r--r--sc/source/ui/inc/textimportoptions.hrc42
-rw-r--r--sc/source/ui/inc/textimportoptions.hxx76
-rw-r--r--sc/source/ui/inc/tpcalc.hxx102
-rw-r--r--sc/source/ui/inc/tphf.hxx103
-rw-r--r--sc/source/ui/inc/tphfedit.hxx239
-rw-r--r--sc/source/ui/inc/tpprint.hxx56
-rw-r--r--sc/source/ui/inc/tpsort.hxx222
-rw-r--r--sc/source/ui/inc/tpstat.hxx65
-rw-r--r--sc/source/ui/inc/tpsubt.hxx188
-rw-r--r--sc/source/ui/inc/tptable.hxx115
-rw-r--r--sc/source/ui/inc/tpusrlst.hxx117
-rw-r--r--sc/source/ui/inc/tpview.hxx171
-rw-r--r--sc/source/ui/inc/transobj.hxx115
-rw-r--r--sc/source/ui/inc/ui_pch.hxx332
-rw-r--r--sc/source/ui/inc/uiitems.hxx378
-rw-r--r--sc/source/ui/inc/undobase.hxx171
-rw-r--r--sc/source/ui/inc/undoblk.hxx988
-rw-r--r--sc/source/ui/inc/undocell.hxx366
-rw-r--r--sc/source/ui/inc/undodat.hxx535
-rw-r--r--sc/source/ui/inc/undodraw.hxx63
-rw-r--r--sc/source/ui/inc/undoolk.hxx44
-rw-r--r--sc/source/ui/inc/undostyl.hxx117
-rw-r--r--sc/source/ui/inc/undotab.hxx543
-rw-r--r--sc/source/ui/inc/undoutil.hxx66
-rw-r--r--sc/source/ui/inc/validate.hrc88
-rw-r--r--sc/source/ui/inc/validate.hxx347
-rw-r--r--sc/source/ui/inc/viewdata.hxx557
-rw-r--r--sc/source/ui/inc/viewfunc.hxx369
-rw-r--r--sc/source/ui/inc/viewutil.hxx116
-rw-r--r--sc/source/ui/inc/warnbox.hxx74
-rw-r--r--sc/source/ui/miscdlgs/acredlin.cxx2139
-rw-r--r--sc/source/ui/miscdlgs/acredlin.src258
-rw-r--r--sc/source/ui/miscdlgs/anyrefdg.cxx1011
-rw-r--r--sc/source/ui/miscdlgs/autofmt.cxx979
-rw-r--r--sc/source/ui/miscdlgs/conflictsdlg.cxx894
-rw-r--r--sc/source/ui/miscdlgs/conflictsdlg.src109
-rw-r--r--sc/source/ui/miscdlgs/crdlg.cxx87
-rw-r--r--sc/source/ui/miscdlgs/crnrdlg.cxx1172
-rw-r--r--sc/source/ui/miscdlgs/delcldlg.cxx120
-rw-r--r--sc/source/ui/miscdlgs/delcodlg.cxx180
-rw-r--r--sc/source/ui/miscdlgs/filldlg.cxx375
-rw-r--r--sc/source/ui/miscdlgs/groupdlg.cxx83
-rw-r--r--sc/source/ui/miscdlgs/highred.cxx301
-rw-r--r--sc/source/ui/miscdlgs/highred.src133
-rw-r--r--sc/source/ui/miscdlgs/inscldlg.cxx120
-rw-r--r--sc/source/ui/miscdlgs/inscodlg.cxx372
-rw-r--r--sc/source/ui/miscdlgs/instbdlg.cxx433
-rw-r--r--sc/source/ui/miscdlgs/instbdlg.src184
-rw-r--r--sc/source/ui/miscdlgs/lbseldlg.cxx108
-rw-r--r--sc/source/ui/miscdlgs/linkarea.cxx366
-rw-r--r--sc/source/ui/miscdlgs/linkarea.src120
-rw-r--r--sc/source/ui/miscdlgs/makefile.mk127
-rw-r--r--sc/source/ui/miscdlgs/mtrindlg.cxx186
-rw-r--r--sc/source/ui/miscdlgs/mvtabdlg.cxx205
-rw-r--r--sc/source/ui/miscdlgs/namecrea.cxx79
-rw-r--r--sc/source/ui/miscdlgs/namepast.cxx133
-rw-r--r--sc/source/ui/miscdlgs/optsolver.cxx1066
-rw-r--r--sc/source/ui/miscdlgs/protectiondlg.cxx161
-rw-r--r--sc/source/ui/miscdlgs/protectiondlg.src127
-rw-r--r--sc/source/ui/miscdlgs/redcom.cxx186
-rw-r--r--sc/source/ui/miscdlgs/retypepassdlg.cxx544
-rw-r--r--sc/source/ui/miscdlgs/retypepassdlg.src313
-rw-r--r--sc/source/ui/miscdlgs/scuiautofmt.cxx476
-rw-r--r--sc/source/ui/miscdlgs/sharedocdlg.cxx235
-rw-r--r--sc/source/ui/miscdlgs/sharedocdlg.src110
-rw-r--r--sc/source/ui/miscdlgs/shtabdlg.cxx111
-rw-r--r--sc/source/ui/miscdlgs/simpref.cxx257
-rw-r--r--sc/source/ui/miscdlgs/solveroptions.cxx492
-rw-r--r--sc/source/ui/miscdlgs/solverutil.cxx229
-rw-r--r--sc/source/ui/miscdlgs/solvrdlg.cxx313
-rw-r--r--sc/source/ui/miscdlgs/strindlg.cxx107
-rw-r--r--sc/source/ui/miscdlgs/tabbgcolordlg.cxx198
-rw-r--r--sc/source/ui/miscdlgs/tabopdlg.cxx371
-rw-r--r--sc/source/ui/miscdlgs/textdlgs.cxx140
-rw-r--r--sc/source/ui/miscdlgs/warnbox.cxx91
-rw-r--r--sc/source/ui/namedlg/makefile.mk51
-rw-r--r--sc/source/ui/namedlg/namedlg.cxx649
-rw-r--r--sc/source/ui/navipi/content.cxx1526
-rw-r--r--sc/source/ui/navipi/makefile.mk57
-rw-r--r--sc/source/ui/navipi/navcitem.cxx127
-rw-r--r--sc/source/ui/navipi/navipi.cxx1565
-rw-r--r--sc/source/ui/navipi/navipi.hrc63
-rw-r--r--sc/source/ui/navipi/navipi.src414
-rw-r--r--sc/source/ui/navipi/scenwnd.cxx309
-rw-r--r--sc/source/ui/optdlg/makefile.mk59
-rw-r--r--sc/source/ui/optdlg/opredlin.cxx289
-rw-r--r--sc/source/ui/optdlg/tpcalc.cxx305
-rw-r--r--sc/source/ui/optdlg/tpprint.cxx144
-rw-r--r--sc/source/ui/optdlg/tpusrlst.cxx839
-rw-r--r--sc/source/ui/optdlg/tpview.cxx745
-rw-r--r--sc/source/ui/pagedlg/areasdlg.cxx906
-rw-r--r--sc/source/ui/pagedlg/hfedtdlg.cxx186
-rw-r--r--sc/source/ui/pagedlg/hfedtdlg.hrc64
-rw-r--r--sc/source/ui/pagedlg/hfedtdlg.src829
-rw-r--r--sc/source/ui/pagedlg/makefile.mk74
-rw-r--r--sc/source/ui/pagedlg/pagedlg.hrc103
-rw-r--r--sc/source/ui/pagedlg/pagedlg.src416
-rw-r--r--sc/source/ui/pagedlg/scuitphfedit.cxx1001
-rw-r--r--sc/source/ui/pagedlg/tphf.cxx331
-rw-r--r--sc/source/ui/pagedlg/tphf.src64
-rw-r--r--sc/source/ui/pagedlg/tphfedit.cxx874
-rw-r--r--sc/source/ui/pagedlg/tptable.cxx570
-rw-r--r--sc/source/ui/src/attrdlg.src203
-rw-r--r--sc/source/ui/src/autofmt.src271
-rw-r--r--sc/source/ui/src/condfrmt.src398
-rw-r--r--sc/source/ui/src/crnrdlg.src166
-rw-r--r--sc/source/ui/src/dbnamdlg.src198
-rw-r--r--sc/source/ui/src/filter.src820
-rw-r--r--sc/source/ui/src/globstr.src1742
-rw-r--r--sc/source/ui/src/hdrcont.src256
-rw-r--r--sc/source/ui/src/makefile.mk77
-rw-r--r--sc/source/ui/src/miscdlgs.src1463
-rw-r--r--sc/source/ui/src/namedlg.src165
-rw-r--r--sc/source/ui/src/opredlin.src136
-rw-r--r--sc/source/ui/src/optdlg.src722
-rw-r--r--sc/source/ui/src/optsolver.src540
-rw-r--r--sc/source/ui/src/popup.src544
-rw-r--r--sc/source/ui/src/pseudo.src62
-rw-r--r--sc/source/ui/src/sc.src49
-rw-r--r--sc/source/ui/src/scerrors.src170
-rw-r--r--sc/source/ui/src/scfuncs.src9043
-rw-r--r--sc/source/ui/src/scstring.src771
-rw-r--r--sc/source/ui/src/scwarngs.src83
-rw-r--r--sc/source/ui/src/simpref.src105
-rw-r--r--sc/source/ui/src/solveroptions.src189
-rw-r--r--sc/source/ui/src/solvrdlg.src135
-rw-r--r--sc/source/ui/src/sortdlg.src348
-rw-r--r--sc/source/ui/src/subtdlg.src291
-rw-r--r--sc/source/ui/src/tabopdlg.src142
-rw-r--r--sc/source/ui/src/textdlgs.src197
-rw-r--r--sc/source/ui/src/toolbox.src299
-rw-r--r--sc/source/ui/styleui/makefile.mk57
-rw-r--r--sc/source/ui/styleui/scstyles.src70
-rw-r--r--sc/source/ui/styleui/styledlg.cxx234
-rw-r--r--sc/source/ui/styleui/styledlg.src172
-rw-r--r--sc/source/ui/styleui/template.curbin0 -> 326 bytes
-rw-r--r--sc/source/ui/undo/areasave.cxx230
-rw-r--r--sc/source/ui/undo/makefile.mk85
-rw-r--r--sc/source/ui/undo/refundo.cxx214
-rw-r--r--sc/source/ui/undo/target.cxx45
-rw-r--r--sc/source/ui/undo/undobase.cxx539
-rw-r--r--sc/source/ui/undo/undoblk.cxx2253
-rw-r--r--sc/source/ui/undo/undoblk2.cxx215
-rw-r--r--sc/source/ui/undo/undoblk3.cxx2127
-rw-r--r--sc/source/ui/undo/undocell.cxx1129
-rw-r--r--sc/source/ui/undo/undodat.cxx2193
-rw-r--r--sc/source/ui/undo/undodraw.cxx269
-rw-r--r--sc/source/ui/undo/undoolk.cxx102
-rw-r--r--sc/source/ui/undo/undostyl.cxx311
-rw-r--r--sc/source/ui/undo/undotab.cxx1725
-rw-r--r--sc/source/ui/undo/undoutil.cxx133
-rw-r--r--sc/source/ui/unoobj/ChartRangeSelectionListener.cxx95
-rw-r--r--sc/source/ui/unoobj/addruno.cxx315
-rw-r--r--sc/source/ui/unoobj/afmtuno.cxx882
-rw-r--r--sc/source/ui/unoobj/appluno.cxx1086
-rw-r--r--sc/source/ui/unoobj/celllistsource.cxx449
-rw-r--r--sc/source/ui/unoobj/celllistsource.hxx175
-rw-r--r--sc/source/ui/unoobj/cellsuno.cxx9842
-rw-r--r--sc/source/ui/unoobj/cellvaluebinding.cxx663
-rw-r--r--sc/source/ui/unoobj/cellvaluebinding.hxx171
-rw-r--r--sc/source/ui/unoobj/chart2uno.cxx3914
-rw-r--r--sc/source/ui/unoobj/chartuno.cxx817
-rw-r--r--sc/source/ui/unoobj/confuno.cxx488
-rw-r--r--sc/source/ui/unoobj/convuno.cxx64
-rw-r--r--sc/source/ui/unoobj/cursuno.cxx510
-rwxr-xr-xsc/source/ui/unoobj/dapiuno.cxx3554
-rw-r--r--sc/source/ui/unoobj/datauno.cxx2371
-rw-r--r--sc/source/ui/unoobj/defltuno.cxx387
-rw-r--r--sc/source/ui/unoobj/detreg.cxx111
-rw-r--r--sc/source/ui/unoobj/dispuno.cxx415
-rw-r--r--sc/source/ui/unoobj/docuno.cxx3788
-rw-r--r--sc/source/ui/unoobj/drdefuno.cxx83
-rw-r--r--sc/source/ui/unoobj/editsrc.cxx373
-rwxr-xr-xsc/source/ui/unoobj/eventuno.cxx201
-rw-r--r--sc/source/ui/unoobj/fielduno.cxx1549
-rw-r--r--sc/source/ui/unoobj/filtuno.cxx317
-rw-r--r--sc/source/ui/unoobj/fmtuno.cxx1066
-rw-r--r--sc/source/ui/unoobj/forbiuno.cxx93
-rw-r--r--sc/source/ui/unoobj/funcuno.cxx745
-rw-r--r--sc/source/ui/unoobj/linkuno.cxx1821
-rw-r--r--sc/source/ui/unoobj/listenercalls.cxx89
-rw-r--r--sc/source/ui/unoobj/makefile.mk120
-rw-r--r--sc/source/ui/unoobj/miscuno.cxx424
-rw-r--r--sc/source/ui/unoobj/nameuno.cxx1131
-rw-r--r--sc/source/ui/unoobj/notesuno.cxx729
-rw-r--r--sc/source/ui/unoobj/optuno.cxx237
-rw-r--r--sc/source/ui/unoobj/pageuno.cxx78
-rwxr-xr-xsc/source/ui/unoobj/scdetect.cxx918
-rw-r--r--sc/source/ui/unoobj/scdetect.hxx95
-rw-r--r--sc/source/ui/unoobj/servuno.cxx598
-rw-r--r--sc/source/ui/unoobj/shapeuno.cxx1521
-rw-r--r--sc/source/ui/unoobj/srchuno.cxx276
-rw-r--r--sc/source/ui/unoobj/styleuno.cxx2140
-rw-r--r--sc/source/ui/unoobj/targuno.cxx318
-rw-r--r--sc/source/ui/unoobj/textuno.cxx1152
-rw-r--r--sc/source/ui/unoobj/tokenuno.cxx467
-rw-r--r--sc/source/ui/unoobj/unodoc.cxx67
-rw-r--r--sc/source/ui/unoobj/unoguard.cxx47
-rw-r--r--sc/source/ui/unoobj/unoreflist.cxx73
-rw-r--r--sc/source/ui/unoobj/viewuno.cxx2358
-rw-r--r--sc/source/ui/unoobj/warnpassword.cxx95
-rw-r--r--sc/source/ui/vba/excelvbahelper.cxx268
-rw-r--r--sc/source/ui/vba/excelvbahelper.hxx67
-rw-r--r--sc/source/ui/vba/helperdecl.hxx53
-rw-r--r--sc/source/ui/vba/makefile.mk124
-rw-r--r--sc/source/ui/vba/service.cxx134
-rw-r--r--sc/source/ui/vba/testvba/README37
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/ApplicationRunTest.xlsbin0 -> 25088 bytes
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/AutoFilter.xlsbin0 -> 54272 bytes
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/CalcFont.xlsbin0 -> 73728 bytes
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/CalcZoom.xlsbin0 -> 62976 bytes
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/FinancialFuncTests.xlsbin0 -> 71168 bytes
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/FinancialFuncs.xlsbin0 -> 47104 bytes
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/MiscOperatorTests.xlsbin0 -> 66048 bytes
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/MiscRangeTests.xlsbin0 -> 126976 bytes
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/PageBreaks.xlsbin0 -> 63488 bytes
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/Ranges-2.xlsbin0 -> 2209280 bytes
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/Ranges-3.xlsbin0 -> 54784 bytes
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/Ranges.xlsbin0 -> 2236416 bytes
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/Shapes.xlsbin0 -> 74240 bytes
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/StrConv-test.xlsbin0 -> 65024 bytes
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/Template.xlsbin0 -> 65024 bytes
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/TestAddress.xlsbin0 -> 84480 bytes
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/TestCalc_Rangetest.xlsbin0 -> 67584 bytes
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/TestCalc_Rangetest2.xlsbin0 -> 71680 bytes
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/TestIntersection.xlsbin0 -> 81408 bytes
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/TestUnion.xlsbin0 -> 72192 bytes
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/VariantTest.xlsbin0 -> 68608 bytes
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/Window.xlsbin0 -> 87040 bytes
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/bytearraystring.xlsbin0 -> 58880 bytes
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/dateserial.xlsbin0 -> 57344 bytes
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/datevalue.xlsbin0 -> 61952 bytes
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/format.xlsbin0 -> 102400 bytes
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/logs/excel/AutoFilter.log20
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/logs/excel/MiscRangeTests.log45
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/logs/excel/Ranges-2.log68
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/logs/excel/Ranges-3.log8
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/logs/excel/Ranges.log280
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/logs/excel/TestAddress.log62
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/logs/excel/TestCalc_Rangetest.log60
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/logs/excel/TestCalc_Rangetest2.log64
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/logs/format.log36
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/logs/unix/AutoFilter.log20
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/logs/unix/CalcFont.log17
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/logs/unix/CalcZoom.log18
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/logs/unix/FinancialFuncTests.log31
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/logs/unix/MiscOperatorTests.log30
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/logs/unix/MiscRangeTests.log45
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/logs/unix/PageBreaks.log10
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/logs/unix/Ranges-2.log68
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/logs/unix/Ranges-3.log8
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/logs/unix/Ranges.log280
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/logs/unix/Shapes.log77
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/logs/unix/StrConv-test.log9
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/logs/unix/Template.log14
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/logs/unix/TestAddress.log67
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/logs/unix/TestCalc_Rangetest.log60
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/logs/unix/TestCalc_Rangetest2.log65
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/logs/unix/TestIntersection.log26
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/logs/unix/TestUnion.log17
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/logs/unix/VariantTest.log47
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/logs/unix/Window.log46
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/logs/unix/bytearraystring.log8
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/logs/unix/dateserial.log9
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/logs/unix/datevalue.log8
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/logs/unix/format.log36
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/logs/unix/pagesetup.log77
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/logs/unix/partition.log11
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/logs/unix/range-4.log16
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/logs/unix/replace.log14
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/logs/unix/stringplusdouble.log62
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/logs/unix/window2.log41
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/logs/win/AutoFilter.log20
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/logs/win/CalcFont.log17
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/logs/win/MiscOperatorTests.log29
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/logs/win/MiscRangeTests.log45
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/logs/win/PageBreaks.log10
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/logs/win/Ranges-2.log68
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/logs/win/Ranges-3.log8
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/logs/win/Ranges.log280
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/logs/win/Shapes.log77
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/logs/win/StrConv-test.log9
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/logs/win/Template.log14
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/logs/win/TestAddress.log67
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/logs/win/TestCalc_Rangetest.log60
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/logs/win/TestCalc_Rangetest2.log65
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/logs/win/TestIntersection.log26
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/logs/win/TestUnion.log17
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/logs/win/VariantTest.log47
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/logs/win/Window.log46
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/logs/win/bytearraystring.log8
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/logs/win/dateserial.log9
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/logs/win/datevalue.log8
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/logs/win/format.log36
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/logs/win/pagesetup.log87
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/logs/win/partition.log11
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/logs/win/range-4.log16
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/logs/win/replace.log14
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/logs/win/stringplusdouble.log62
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/logs/win/window2.log41
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/notwork/error.xlsbin0 -> 38400 bytes
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/notwork/imagecontrols.xlsbin0 -> 2415104 bytes
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/notwork/keyword.xlsbin0 -> 50688 bytes
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/notwork/objectmodule.xlsbin0 -> 62464 bytes
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/notwork/stringtodouble.odsbin0 -> 13260 bytes
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/partition.xlsbin0 -> 65536 bytes
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/range-4.xlsbin0 -> 2192384 bytes
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/replace.xlsbin0 -> 64512 bytes
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/stringplusdouble.xlsbin0 -> 75264 bytes
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments-ooo-build/window2.xlsbin0 -> 72192 bytes
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments/ApplicationRunTest.xlsbin0 -> 25088 bytes
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments/AutoFilter.xlsbin0 -> 54272 bytes
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments/CalcFont.xlsbin0 -> 73728 bytes
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments/FinancialFuncs.xlsbin0 -> 47104 bytes
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments/MiscRangeTests.xlsbin0 -> 126976 bytes
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments/PageBreaks.xlsbin0 -> 63488 bytes
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments/Ranges-2.xlsbin0 -> 2209280 bytes
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments/Ranges-3.xlsbin0 -> 54784 bytes
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments/Ranges.xlsbin0 -> 2236416 bytes
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments/Shapes.xlsbin0 -> 74240 bytes
-rwxr-xr-xsc/source/ui/vba/testvba/TestDocuments/StrConv-test.xlsbin0 -> 65024 bytes
-rwxr-xr-xsc/source/ui/vba/testvba/TestDocuments/Template.xlsbin0 -> 65024 bytes
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments/TestAddress.xlsbin0 -> 84480 bytes
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments/TestCalc_Rangetest.xlsbin0 -> 67584 bytes
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments/TestCalc_Rangetest2.xlsbin0 -> 71680 bytes
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments/TestIntersection.xlsbin0 -> 81408 bytes
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments/TestUnion.xlsbin0 -> 72192 bytes
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments/Window.xlsbin0 -> 87040 bytes
-rwxr-xr-xsc/source/ui/vba/testvba/TestDocuments/bytearraystring.xlsbin0 -> 58880 bytes
-rwxr-xr-xsc/source/ui/vba/testvba/TestDocuments/dateserial.xlsbin0 -> 57344 bytes
-rwxr-xr-xsc/source/ui/vba/testvba/TestDocuments/datevalue.xlsbin0 -> 61952 bytes
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments/format.xlsbin0 -> 102400 bytes
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments/logs/excel/AutoFilter.log20
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments/logs/excel/MiscRangeTests.log45
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments/logs/excel/Ranges-2.log68
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments/logs/excel/Ranges-3.log8
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments/logs/excel/Ranges.log280
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments/logs/excel/TestAddress.log62
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments/logs/excel/TestCalc_Rangetest.log60
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments/logs/excel/TestCalc_Rangetest2.log64
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments/logs/unix/AutoFilter.log20
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments/logs/unix/CalcFont.log17
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments/logs/unix/MiscRangeTests.log45
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments/logs/unix/PageBreaks.log10
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments/logs/unix/Ranges-2.log68
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments/logs/unix/Ranges-3.log8
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments/logs/unix/Ranges.log280
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments/logs/unix/Shapes.log77
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments/logs/unix/StrConv-test.log9
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments/logs/unix/Template.log14
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments/logs/unix/TestAddress.log67
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments/logs/unix/TestCalc_Rangetest.log60
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments/logs/unix/TestCalc_Rangetest2.log65
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments/logs/unix/TestIntersection.log26
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments/logs/unix/TestUnion.log17
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments/logs/unix/Window.log46
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments/logs/unix/bytearraystring.log8
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments/logs/unix/dateserial.log9
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments/logs/unix/datevalue.log8
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments/logs/unix/format.log36
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments/logs/unix/pagesetup.log77
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments/logs/unix/partition.log11
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments/logs/unix/range-4.log16
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments/logs/unix/replace.log14
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments/logs/unix/stringplusdouble.log62
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments/logs/unix/window2.log41
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments/logs/win/AutoFilter.log20
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments/logs/win/MiscRangeTests.log45
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments/logs/win/Ranges-2.log68
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments/logs/win/Ranges-3.log8
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments/logs/win/Ranges.log280
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments/logs/win/Shapes.log77
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments/logs/win/TestAddress.log62
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments/logs/win/TestCalc_Rangetest.log60
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments/logs/win/TestCalc_Rangetest2.log65
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments/logs/win/pagesetup.log87
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments/logs/win/replace.log14
-rwxr-xr-xsc/source/ui/vba/testvba/TestDocuments/pagesetup.xlsbin0 -> 72704 bytes
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments/partition.xlsbin0 -> 65536 bytes
-rwxr-xr-xsc/source/ui/vba/testvba/TestDocuments/range-4.xlsbin0 -> 2192384 bytes
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments/replace.xlsbin0 -> 64512 bytes
-rw-r--r--sc/source/ui/vba/testvba/TestDocuments/stringplusdouble.xlsbin0 -> 75264 bytes
-rwxr-xr-xsc/source/ui/vba/testvba/TestDocuments/window2.xlsbin0 -> 72192 bytes
-rw-r--r--sc/source/ui/vba/testvba/launchTest.pl45
-rw-r--r--sc/source/ui/vba/testvba/makefile.mk69
-rwxr-xr-xsc/source/ui/vba/testvba/runTests.pl121
-rw-r--r--sc/source/ui/vba/testvba/testResult.pl171
-rwxr-xr-xsc/source/ui/vba/testvba/testResults.pl163
-rwxr-xr-xsc/source/ui/vba/testvba/testclientbin0 -> 50595 bytes
-rw-r--r--sc/source/ui/vba/testvba/testvba.cxx309
-rwxr-xr-xsc/source/ui/vba/testvba/timestampsClean.pl73
-rw-r--r--sc/source/ui/vba/vbaapplication.cxx1184
-rw-r--r--sc/source/ui/vba/vbaapplication.hxx123
-rw-r--r--sc/source/ui/vba/vbaassistant.cxx132
-rw-r--r--sc/source/ui/vba/vbaassistant.hxx70
-rw-r--r--sc/source/ui/vba/vbaaxes.cxx203
-rw-r--r--sc/source/ui/vba/vbaaxes.hxx51
-rw-r--r--sc/source/ui/vba/vbaaxis.cxx670
-rw-r--r--sc/source/ui/vba/vbaaxis.hxx98
-rw-r--r--sc/source/ui/vba/vbaaxistitle.cxx58
-rw-r--r--sc/source/ui/vba/vbaaxistitle.hxx44
-rw-r--r--sc/source/ui/vba/vbaborders.cxx574
-rw-r--r--sc/source/ui/vba/vbaborders.hxx76
-rw-r--r--sc/source/ui/vba/vbacharacters.cxx136
-rw-r--r--sc/source/ui/vba/vbacharacters.hxx75
-rw-r--r--sc/source/ui/vba/vbachart.cxx1253
-rw-r--r--sc/source/ui/vba/vbachart.hxx114
-rw-r--r--sc/source/ui/vba/vbachartobject.cxx210
-rw-r--r--sc/source/ui/vba/vbachartobject.hxx80
-rw-r--r--sc/source/ui/vba/vbachartobjects.cxx194
-rw-r--r--sc/source/ui/vba/vbachartobjects.hxx75
-rw-r--r--sc/source/ui/vba/vbacharts.cxx120
-rw-r--r--sc/source/ui/vba/vbacharts.hxx60
-rw-r--r--sc/source/ui/vba/vbacharttitle.cxx58
-rw-r--r--sc/source/ui/vba/vbacharttitle.hxx44
-rw-r--r--sc/source/ui/vba/vbacomment.cxx239
-rw-r--r--sc/source/ui/vba/vbacomment.hxx81
-rw-r--r--sc/source/ui/vba/vbacomments.cxx116
-rw-r--r--sc/source/ui/vba/vbacomments.hxx65
-rw-r--r--sc/source/ui/vba/vbacondition.cxx175
-rw-r--r--sc/source/ui/vba/vbacondition.hxx54
-rw-r--r--sc/source/ui/vba/vbadialog.cxx88
-rw-r--r--sc/source/ui/vba/vbadialog.hxx50
-rw-r--r--sc/source/ui/vba/vbadialogs.cxx68
-rw-r--r--sc/source/ui/vba/vbadialogs.hxx55
-rwxr-xr-xsc/source/ui/vba/vbaeventshelper.cxx753
-rwxr-xr-xsc/source/ui/vba/vbaeventshelper.hxx88
-rw-r--r--sc/source/ui/vba/vbafont.cxx501
-rw-r--r--sc/source/ui/vba/vbafont.hxx90
-rw-r--r--sc/source/ui/vba/vbaformat.cxx843
-rw-r--r--sc/source/ui/vba/vbaformat.hxx108
-rw-r--r--sc/source/ui/vba/vbaformatcondition.cxx176
-rw-r--r--sc/source/ui/vba/vbaformatcondition.hxx70
-rw-r--r--sc/source/ui/vba/vbaformatconditions.cxx301
-rw-r--r--sc/source/ui/vba/vbaformatconditions.hxx65
-rw-r--r--sc/source/ui/vba/vbaglobals.cxx304
-rw-r--r--sc/source/ui/vba/vbaglobals.hxx95
-rw-r--r--sc/source/ui/vba/vbahelper.cxx758
-rw-r--r--sc/source/ui/vba/vbahyperlink.cxx246
-rw-r--r--sc/source/ui/vba/vbahyperlink.hxx88
-rwxr-xr-xsc/source/ui/vba/vbahyperlinks.cxx293
-rwxr-xr-xsc/source/ui/vba/vbahyperlinks.hxx150
-rw-r--r--sc/source/ui/vba/vbainterior.cxx417
-rw-r--r--sc/source/ui/vba/vbainterior.hxx88
-rw-r--r--sc/source/ui/vba/vbaname.cxx269
-rw-r--r--sc/source/ui/vba/vbaname.hxx84
-rw-r--r--sc/source/ui/vba/vbanames.cxx206
-rw-r--r--sc/source/ui/vba/vbanames.hxx82
-rw-r--r--sc/source/ui/vba/vbaoleobject.cxx164
-rw-r--r--sc/source/ui/vba/vbaoleobject.hxx67
-rw-r--r--sc/source/ui/vba/vbaoleobjects.cxx185
-rw-r--r--sc/source/ui/vba/vbaoleobjects.hxx57
-rw-r--r--sc/source/ui/vba/vbaoutline.cxx65
-rw-r--r--sc/source/ui/vba/vbaoutline.hxx52
-rw-r--r--sc/source/ui/vba/vbapagebreak.cxx172
-rw-r--r--sc/source/ui/vba/vbapagebreak.hxx103
-rw-r--r--sc/source/ui/vba/vbapagebreaks.cxx327
-rw-r--r--sc/source/ui/vba/vbapagebreaks.hxx97
-rw-r--r--sc/source/ui/vba/vbapagesetup.cxx626
-rw-r--r--sc/source/ui/vba/vbapagesetup.hxx90
-rw-r--r--sc/source/ui/vba/vbapalette.cxx111
-rw-r--r--sc/source/ui/vba/vbapalette.hxx54
-rw-r--r--sc/source/ui/vba/vbapane.cxx206
-rw-r--r--sc/source/ui/vba/vbapane.hxx67
-rw-r--r--sc/source/ui/vba/vbapivotcache.cxx60
-rw-r--r--sc/source/ui/vba/vbapivotcache.hxx49
-rw-r--r--sc/source/ui/vba/vbapivottable.cxx63
-rw-r--r--sc/source/ui/vba/vbapivottable.hxx49
-rw-r--r--sc/source/ui/vba/vbapivottables.cxx94
-rw-r--r--sc/source/ui/vba/vbapivottables.hxx65
-rw-r--r--sc/source/ui/vba/vbapropvalue.cxx45
-rw-r--r--sc/source/ui/vba/vbapropvalue.hxx57
-rwxr-xr-xsc/source/ui/vba/vbarange.cxx5671
-rw-r--r--sc/source/ui/vba/vbarange.hxx298
-rw-r--r--sc/source/ui/vba/vbaseriescollection.cxx80
-rw-r--r--sc/source/ui/vba/vbaseriescollection.hxx54
-rwxr-xr-xsc/source/ui/vba/vbasheetobject.cxx517
-rwxr-xr-xsc/source/ui/vba/vbasheetobject.hxx220
-rwxr-xr-xsc/source/ui/vba/vbasheetobjects.cxx534
-rwxr-xr-xsc/source/ui/vba/vbasheetobjects.hxx113
-rw-r--r--sc/source/ui/vba/vbastyle.cxx186
-rw-r--r--sc/source/ui/vba/vbastyle.hxx96
-rw-r--r--sc/source/ui/vba/vbastyles.cxx182
-rw-r--r--sc/source/ui/vba/vbastyles.hxx57
-rw-r--r--sc/source/ui/vba/vbatextboxshape.cxx66
-rw-r--r--sc/source/ui/vba/vbatextboxshape.hxx50
-rw-r--r--sc/source/ui/vba/vbatextframe.cxx78
-rw-r--r--sc/source/ui/vba/vbatextframe.hxx49
-rw-r--r--sc/source/ui/vba/vbatitle.hxx163
-rw-r--r--sc/source/ui/vba/vbavalidation.cxx333
-rw-r--r--sc/source/ui/vba/vbavalidation.hxx71
-rw-r--r--sc/source/ui/vba/vbawindow.cxx858
-rw-r--r--sc/source/ui/vba/vbawindow.hxx123
-rw-r--r--sc/source/ui/vba/vbawindows.cxx260
-rw-r--r--sc/source/ui/vba/vbawindows.hxx64
-rw-r--r--sc/source/ui/vba/vbaworkbook.cxx363
-rw-r--r--sc/source/ui/vba/vbaworkbook.hxx80
-rw-r--r--sc/source/ui/vba/vbaworkbooks.cxx367
-rw-r--r--sc/source/ui/vba/vbaworkbooks.hxx71
-rw-r--r--sc/source/ui/vba/vbaworksheet.cxx1019
-rw-r--r--sc/source/ui/vba/vbaworksheet.hxx174
-rw-r--r--sc/source/ui/vba/vbaworksheets.cxx501
-rw-r--r--sc/source/ui/vba/vbaworksheets.hxx83
-rw-r--r--sc/source/ui/vba/vbawsfunction.cxx259
-rw-r--r--sc/source/ui/vba/vbawsfunction.hxx57
-rw-r--r--sc/source/ui/view/auditsh.cxx155
-rw-r--r--sc/source/ui/view/cellsh.cxx1005
-rw-r--r--sc/source/ui/view/cellsh1.cxx2206
-rw-r--r--sc/source/ui/view/cellsh2.cxx1432
-rw-r--r--sc/source/ui/view/cellsh3.cxx966
-rw-r--r--sc/source/ui/view/cellsh4.cxx382
-rw-r--r--sc/source/ui/view/colrowba.cxx419
-rw-r--r--sc/source/ui/view/dbfunc.cxx509
-rw-r--r--sc/source/ui/view/dbfunc2.cxx77
-rwxr-xr-xsc/source/ui/view/dbfunc3.cxx2375
-rw-r--r--sc/source/ui/view/dbfunc4.cxx102
-rw-r--r--sc/source/ui/view/drawattr.cxx82
-rw-r--r--sc/source/ui/view/drawutil.cxx116
-rw-r--r--sc/source/ui/view/drawvie2.cxx62
-rw-r--r--sc/source/ui/view/drawvie3.cxx182
-rw-r--r--sc/source/ui/view/drawvie4.cxx394
-rw-r--r--sc/source/ui/view/drawview.cxx849
-rw-r--r--sc/source/ui/view/editsh.cxx1206
-rw-r--r--sc/source/ui/view/formatsh.cxx2168
-rw-r--r--sc/source/ui/view/galwrap.cxx79
-rw-r--r--sc/source/ui/view/gridmerg.cxx174
-rw-r--r--sc/source/ui/view/gridwin.cxx5706
-rw-r--r--sc/source/ui/view/gridwin2.cxx1061
-rw-r--r--sc/source/ui/view/gridwin3.cxx443
-rw-r--r--sc/source/ui/view/gridwin4.cxx2069
-rw-r--r--sc/source/ui/view/gridwin5.cxx439
-rw-r--r--sc/source/ui/view/hdrcont.cxx1046
-rw-r--r--sc/source/ui/view/hintwin.cxx108
-rw-r--r--sc/source/ui/view/imapwrap.cxx76
-rw-r--r--sc/source/ui/view/invmerge.cxx192
-rw-r--r--sc/source/ui/view/makefile.mk173
-rw-r--r--sc/source/ui/view/notemark.cxx200
-rw-r--r--sc/source/ui/view/olinewin.cxx1045
-rw-r--r--sc/source/ui/view/olkact.cxx282
-rw-r--r--sc/source/ui/view/output.cxx2476
-rw-r--r--sc/source/ui/view/output2.cxx3696
-rw-r--r--sc/source/ui/view/output3.cxx276
-rw-r--r--sc/source/ui/view/pfuncache.cxx198
-rw-r--r--sc/source/ui/view/pgbrksh.cxx85
-rw-r--r--sc/source/ui/view/pivotsh.cxx204
-rw-r--r--sc/source/ui/view/preview.cxx1603
-rw-r--r--sc/source/ui/view/prevloc.cxx792
-rw-r--r--sc/source/ui/view/prevwsh.cxx1241
-rw-r--r--sc/source/ui/view/prevwsh2.cxx357
-rw-r--r--sc/source/ui/view/printfun.cxx3202
-rw-r--r--sc/source/ui/view/reffact.cxx434
-rw-r--r--sc/source/ui/view/scextopt.cxx224
-rw-r--r--sc/source/ui/view/select.cxx891
-rw-r--r--sc/source/ui/view/selectionstate.cxx89
-rw-r--r--sc/source/ui/view/spelldialog.cxx279
-rw-r--r--sc/source/ui/view/spelleng.cxx458
-rw-r--r--sc/source/ui/view/tabcont.cxx638
-rw-r--r--sc/source/ui/view/tabpopsh.cxx72
-rw-r--r--sc/source/ui/view/tabsplit.cxx105
-rw-r--r--sc/source/ui/view/tabview.cxx2535
-rw-r--r--sc/source/ui/view/tabview2.cxx982
-rw-r--r--sc/source/ui/view/tabview3.cxx2790
-rw-r--r--sc/source/ui/view/tabview4.cxx573
-rw-r--r--sc/source/ui/view/tabview5.cxx722
-rw-r--r--sc/source/ui/view/tabvwsh.cxx117
-rw-r--r--sc/source/ui/view/tabvwsh2.cxx481
-rw-r--r--sc/source/ui/view/tabvwsh3.cxx1234
-rw-r--r--sc/source/ui/view/tabvwsh4.cxx2114
-rw-r--r--sc/source/ui/view/tabvwsh5.cxx428
-rw-r--r--sc/source/ui/view/tabvwsh8.cxx104
-rw-r--r--sc/source/ui/view/tabvwsh9.cxx295
-rw-r--r--sc/source/ui/view/tabvwsha.cxx890
-rw-r--r--sc/source/ui/view/tabvwshb.cxx500
-rw-r--r--sc/source/ui/view/tabvwshc.cxx327
-rw-r--r--sc/source/ui/view/tabvwshd.cxx100
-rw-r--r--sc/source/ui/view/tabvwshe.cxx341
-rw-r--r--sc/source/ui/view/tabvwshf.cxx964
-rw-r--r--sc/source/ui/view/tabvwshg.cxx140
-rw-r--r--sc/source/ui/view/tabvwshh.cxx293
-rw-r--r--sc/source/ui/view/viewdata.cxx3179
-rw-r--r--sc/source/ui/view/viewfun2.cxx3145
-rw-r--r--sc/source/ui/view/viewfun3.cxx1789
-rw-r--r--sc/source/ui/view/viewfun4.cxx846
-rw-r--r--sc/source/ui/view/viewfun5.cxx749
-rw-r--r--sc/source/ui/view/viewfun6.cxx197
-rw-r--r--sc/source/ui/view/viewfun7.cxx454
-rw-r--r--sc/source/ui/view/viewfunc.cxx3018
-rw-r--r--sc/source/ui/view/viewutil.cxx640
-rw-r--r--sc/source/ui/view/waitoff.cxx70
-rw-r--r--sc/uiconfig/layout/delzip1
-rw-r--r--sc/uiconfig/layout/insert-sheet.xml57
-rw-r--r--sc/uiconfig/layout/makefile.mk59
-rw-r--r--sc/uiconfig/layout/move-copy-sheet.xml21
-rw-r--r--sc/uiconfig/layout/sort-options.xml40
-rw-r--r--sc/uiconfig/layout/string-input.xml16
-rw-r--r--sc/uiconfig/scalc/menubar/menubar.xml449
-rw-r--r--sc/uiconfig/scalc/statusbar/statusbar.xml13
-rw-r--r--sc/uiconfig/scalc/toolbar/alignmentbar.xml11
-rw-r--r--sc/uiconfig/scalc/toolbar/arrowshapes.xml34
-rw-r--r--sc/uiconfig/scalc/toolbar/basicshapes.xml29
-rw-r--r--sc/uiconfig/scalc/toolbar/calloutshapes.xml11
-rw-r--r--sc/uiconfig/scalc/toolbar/colorbar.xml15
-rw-r--r--sc/uiconfig/scalc/toolbar/drawbar.xml34
-rw-r--r--sc/uiconfig/scalc/toolbar/drawobjectbar.xml30
-rw-r--r--sc/uiconfig/scalc/toolbar/extrusionobjectbar.xml16
-rw-r--r--sc/uiconfig/scalc/toolbar/findbar.xml8
-rw-r--r--sc/uiconfig/scalc/toolbar/flowchartshapes.xml36
-rw-r--r--sc/uiconfig/scalc/toolbar/fontworkobjectbar.xml11
-rw-r--r--sc/uiconfig/scalc/toolbar/fontworkshapetype.xml38
-rw-r--r--sc/uiconfig/scalc/toolbar/formatobjectbar.xml53
-rw-r--r--sc/uiconfig/scalc/toolbar/formcontrols.xml29
-rw-r--r--sc/uiconfig/scalc/toolbar/formdesign.xml32
-rw-r--r--sc/uiconfig/scalc/toolbar/formsfilterbar.xml7
-rw-r--r--sc/uiconfig/scalc/toolbar/formsnavigationbar.xml33
-rw-r--r--sc/uiconfig/scalc/toolbar/formtextobjectbar.xml28
-rw-r--r--sc/uiconfig/scalc/toolbar/fullscreenbar.xml5
-rw-r--r--sc/uiconfig/scalc/toolbar/graffilterbar.xml17
-rw-r--r--sc/uiconfig/scalc/toolbar/graphicobjectbar.xml32
-rw-r--r--sc/uiconfig/scalc/toolbar/insertbar.xml13
-rw-r--r--sc/uiconfig/scalc/toolbar/insertcellsbar.xml8
-rw-r--r--sc/uiconfig/scalc/toolbar/mediaobjectbar.xml7
-rw-r--r--sc/uiconfig/scalc/toolbar/moreformcontrols.xml20
-rw-r--r--sc/uiconfig/scalc/toolbar/previewbar.xml22
-rw-r--r--sc/uiconfig/scalc/toolbar/standardbar.xml44
-rw-r--r--sc/uiconfig/scalc/toolbar/starshapes.xml17
-rw-r--r--sc/uiconfig/scalc/toolbar/symbolshapes.xml24
-rw-r--r--sc/uiconfig/scalc/toolbar/textobjectbar.xml35
-rw-r--r--sc/uiconfig/scalc/toolbar/toolbar.xml23
-rw-r--r--sc/uiconfig/scalc/toolbar/viewerbar.xml18
-rw-r--r--sc/util/createExtPackage.pl67
-rw-r--r--sc/util/hidother.src504
-rw-r--r--sc/util/makefile.mk344
-rw-r--r--sc/util/makefile.pmk32
-rw-r--r--sc/util/sc.flt136
-rw-r--r--sc/util/sc.r777
-rw-r--r--sc/util/scfilt.map6
-rw-r--r--sc/util/scui.map6
-rw-r--r--sc/workben/addin.cxx595
-rw-r--r--sc/workben/addin.hxx102
-rw-r--r--sc/workben/celltrans/keywords_utf16.txtbin0 -> 1830 bytes
-rwxr-xr-xsc/workben/celltrans/parse.py209
-rw-r--r--sc/workben/makefile.mk96
-rw-r--r--sc/workben/map.idl37
-rw-r--r--sc/workben/result.cxx133
-rw-r--r--sc/workben/result.hxx75
-rw-r--r--sc/workben/test.cxx2041
-rw-r--r--sc/workben/testadd.idl67
-rw-r--r--sc/xml/AccessibleEditableTextPara_HeaderFooter.xml30
-rw-r--r--sc/xml/AccessibleEditableTextPara_PreviewCell.xml29
-rw-r--r--sc/xml/AccessibleEditableTextPara_PreviewNote.xml29
-rw-r--r--sc/xml/ScAccessibleCell.xml30
-rw-r--r--sc/xml/ScAccessibleCsvCell.xml28
-rw-r--r--sc/xml/ScAccessibleCsvGrid.xml29
-rw-r--r--sc/xml/ScAccessibleCsvRuler.xml28
-rw-r--r--sc/xml/ScAccessibleDocument.xml28
-rw-r--r--sc/xml/ScAccessibleDocumentPagePreview.xml27
-rw-r--r--sc/xml/ScAccessiblePageHeader.xml27
-rw-r--r--sc/xml/ScAccessiblePageHeaderArea.xml27
-rw-r--r--sc/xml/ScAccessiblePreviewCell.xml28
-rw-r--r--sc/xml/ScAccessiblePreviewHeaderCell.xml28
-rw-r--r--sc/xml/ScAccessiblePreviewTable.xml27
-rw-r--r--sc/xml/ScAccessibleSpreadsheet.xml28
-rw-r--r--sc/xml/ScAnnotationObj.xml203
-rw-r--r--sc/xml/ScAnnotationShapeObj.xml203
-rw-r--r--sc/xml/ScAnnotationsObj.xml295
-rw-r--r--sc/xml/ScAreaLinkObj.xml108
-rw-r--r--sc/xml/ScAreaLinksObj.xml108
-rw-r--r--sc/xml/ScAutoFormatFieldObj.xml135
-rw-r--r--sc/xml/ScAutoFormatObj.xml135
-rw-r--r--sc/xml/ScAutoFormatsObj.xml135
-rw-r--r--sc/xml/ScCellCursorObj.xml200
-rw-r--r--sc/xml/ScCellFieldObj.xml205
-rw-r--r--sc/xml/ScCellFieldsObj.xml205
-rw-r--r--sc/xml/ScCellFormatsEnumeration.xml317
-rw-r--r--sc/xml/ScCellFormatsObj.xml317
-rw-r--r--sc/xml/ScCellObj.xml317
-rw-r--r--sc/xml/ScCellRangeObj.xml317
-rw-r--r--sc/xml/ScCellRangesObj.xml317
-rw-r--r--sc/xml/ScCellSearchObj.xml103
-rw-r--r--sc/xml/ScCellTextCursor.xml121
-rw-r--r--sc/xml/ScCellsEnumeration.xml317
-rw-r--r--sc/xml/ScCellsObj.xml317
-rw-r--r--sc/xml/ScChartObj.xml111
-rw-r--r--sc/xml/ScChartsObj.xml111
-rw-r--r--sc/xml/ScConsolidationDescriptor.xml219
-rw-r--r--sc/xml/ScDDELinkObj.xml108
-rw-r--r--sc/xml/ScDDELinksObj.xml108
-rw-r--r--sc/xml/ScDataPilotFieldGroupItemObj.xml123
-rw-r--r--sc/xml/ScDataPilotFieldGroupObj.xml123
-rw-r--r--sc/xml/ScDataPilotFieldGroupsObj.xml123
-rw-r--r--sc/xml/ScDataPilotFieldObj.xml123
-rw-r--r--sc/xml/ScDataPilotFieldsObj.xml123
-rw-r--r--sc/xml/ScDataPilotItemObj.xml123
-rw-r--r--sc/xml/ScDataPilotItemsObj.xml123
-rw-r--r--sc/xml/ScDataPilotTableObj.xml124
-rw-r--r--sc/xml/ScDataPilotTablesObj.xml123
-rw-r--r--sc/xml/ScDatabaseRangeObj.xml219
-rw-r--r--sc/xml/ScDatabaseRangesObj.xml219
-rw-r--r--sc/xml/ScDocumentConfiguration.xml295
-rw-r--r--sc/xml/ScDrawPageObj.xml295
-rw-r--r--sc/xml/ScDrawPagesObj.xml295
-rw-r--r--sc/xml/ScFilterDescriptorBase.xml219
-rw-r--r--sc/xml/ScFunctionListObj.xml114
-rw-r--r--sc/xml/ScHeaderFieldObj.xml205
-rw-r--r--sc/xml/ScHeaderFieldsObj.xml205
-rw-r--r--sc/xml/ScHeaderFooterContentObj.xml121
-rw-r--r--sc/xml/ScHeaderFooterTextCursor.xml121
-rw-r--r--sc/xml/ScHeaderFooterTextObj.xml121
-rw-r--r--sc/xml/ScIndexEnumeration_CellAnnotationsEnumeration.xml61
-rw-r--r--sc/xml/ScIndexEnumeration_CellAreaLinksEnumeration.xml61
-rw-r--r--sc/xml/ScIndexEnumeration_DDELinksEnumeration.xml61
-rw-r--r--sc/xml/ScIndexEnumeration_DataPilotFieldsEnumeration.xml61
-rw-r--r--sc/xml/ScIndexEnumeration_DataPilotItemsEnumeration.xml61
-rw-r--r--sc/xml/ScIndexEnumeration_DataPilotTablesEnumeration.xml61
-rw-r--r--sc/xml/ScIndexEnumeration_DatabaseRangesEnumeration.xml61
-rw-r--r--sc/xml/ScIndexEnumeration_FunctionDescriptionEnumeration.xml61
-rw-r--r--sc/xml/ScIndexEnumeration_LabelRangesEnumeration.xml61
-rw-r--r--sc/xml/ScIndexEnumeration_NamedRangesEnumeration.xml61
-rw-r--r--sc/xml/ScIndexEnumeration_ScenariosEnumeration.xml61
-rw-r--r--sc/xml/ScIndexEnumeration_SheetCellRangesEnumeration.xml61
-rw-r--r--sc/xml/ScIndexEnumeration_SheetLinksEnumeration.xml61
-rw-r--r--sc/xml/ScIndexEnumeration_SpreadsheetViewPanesEnumeration.xml61
-rw-r--r--sc/xml/ScIndexEnumeration_SpreadsheetsEnumeration.xml61
-rw-r--r--sc/xml/ScIndexEnumeration_SubTotalFieldsEnumeration.xml61
-rw-r--r--sc/xml/ScIndexEnumeration_TableAutoFormatEnumeration.xml61
-rw-r--r--sc/xml/ScIndexEnumeration_TableChartsEnumeration.xml61
-rw-r--r--sc/xml/ScIndexEnumeration_TableColumnsEnumeration.xml61
-rw-r--r--sc/xml/ScIndexEnumeration_TableConditionalEntryEnumeration.xml61
-rw-r--r--sc/xml/ScIndexEnumeration_TableRowsEnumeration.xml61
-rw-r--r--sc/xml/ScIndexEnumeration_TextFieldEnumeration.xml61
-rw-r--r--sc/xml/ScLabelRangeObj.xml217
-rw-r--r--sc/xml/ScLabelRangesObj.xml217
-rw-r--r--sc/xml/ScModelObj.xml295
-rw-r--r--sc/xml/ScNamedRangeObj.xml217
-rw-r--r--sc/xml/ScNamedRangesObj.xml217
-rw-r--r--sc/xml/ScPageObj.xml295
-rw-r--r--sc/xml/ScRecentFunctionsObj.xml114
-rw-r--r--sc/xml/ScScenariosObj.xml295
-rw-r--r--sc/xml/ScShapeObj.xml34
-rw-r--r--sc/xml/ScSheetLinkObj.xml108
-rw-r--r--sc/xml/ScSheetLinksObj.xml108
-rw-r--r--sc/xml/ScSpreadsheetSettings.xml114
-rw-r--r--sc/xml/ScSpreadsheetSettingsObj.xml296
-rw-r--r--sc/xml/ScStyleFamiliesObj.xml135
-rw-r--r--sc/xml/ScStyleFamilyObj.xml134
-rw-r--r--sc/xml/ScStyleObj.xml134
-rw-r--r--sc/xml/ScSubTotalDescriptorBase.xml219
-rw-r--r--sc/xml/ScSubTotalFieldObj.xml219
-rw-r--r--sc/xml/ScTabViewObj.xml250
-rw-r--r--sc/xml/ScTableColumnObj.xml317
-rw-r--r--sc/xml/ScTableColumnsObj.xml295
-rw-r--r--sc/xml/ScTableConditionalEntry.xml73
-rw-r--r--sc/xml/ScTableConditionalFormat.xml73
-rw-r--r--sc/xml/ScTableRowObj.xml317
-rw-r--r--sc/xml/ScTableRowsObj.xml295
-rw-r--r--sc/xml/ScTableSheetObj.xml317
-rw-r--r--sc/xml/ScTableSheetsObj.xml295
-rw-r--r--sc/xml/ScTableValidationObj.xml73
-rw-r--r--sc/xml/ScUniqueCellFormatsEnumeration.xml317
-rw-r--r--sc/xml/ScUniqueCellFormatsObj.xml317
-rw-r--r--sc/xml/ScViewPaneObj.xml250
-rw-r--r--sc/xml/ScXMLExport.xml116
-rw-r--r--sc/xml/ScXMLImport.xml116
-rw-r--r--scaddins/prj/build.lst4
-rw-r--r--scaddins/prj/d.lst9
-rw-r--r--scaddins/source/analysis/analysis.cxx1312
-rw-r--r--scaddins/source/analysis/analysis.hrc330
-rw-r--r--scaddins/source/analysis/analysis.hxx241
-rw-r--r--scaddins/source/analysis/analysis.src3604
-rw-r--r--scaddins/source/analysis/analysis_deffuncnames.src874
-rw-r--r--scaddins/source/analysis/analysis_funcnames.src548
-rw-r--r--scaddins/source/analysis/analysisadd.idl599
-rw-r--r--scaddins/source/analysis/analysisdefs.hxx55
-rw-r--r--scaddins/source/analysis/analysishelper.cxx2988
-rw-r--r--scaddins/source/analysis/analysishelper.hxx1105
-rw-r--r--scaddins/source/analysis/bessel.cxx500
-rw-r--r--scaddins/source/analysis/bessel.hxx60
-rw-r--r--scaddins/source/analysis/financial.cxx667
-rw-r--r--scaddins/source/analysis/makefile.mk135
-rw-r--r--scaddins/source/datefunc/dateadd.idl118
-rw-r--r--scaddins/source/datefunc/datefunc.cxx1000
-rw-r--r--scaddins/source/datefunc/datefunc.def7
-rw-r--r--scaddins/source/datefunc/datefunc.hrc75
-rw-r--r--scaddins/source/datefunc/datefunc.hxx428
-rw-r--r--scaddins/source/datefunc/datefunc.src348
-rw-r--r--scaddins/source/datefunc/makefile.mk121
-rw-r--r--scaddins/source/datefunc/msdev.mk116
-rw-r--r--sccomp/prj/build.lst4
-rw-r--r--sccomp/prj/d.lst9
-rw-r--r--sccomp/source/solver/makefile.mk77
-rw-r--r--sccomp/source/solver/solver.cxx657
-rw-r--r--sccomp/source/solver/solver.hrc45
-rw-r--r--sccomp/source/solver/solver.hxx127
-rw-r--r--sccomp/source/solver/solver.src76
-rw-r--r--scp2/inc/macros.inc598
-rw-r--r--scp2/macros/macro.pl294
-rw-r--r--scp2/macros/makefile.mk49
-rw-r--r--scp2/prj/build.lst28
-rw-r--r--scp2/prj/d.lst27
-rw-r--r--scp2/source/activex/file_activex.scp60
-rw-r--r--scp2/source/activex/makefile.mk56
-rw-r--r--scp2/source/activex/module_activex.scp38
-rw-r--r--scp2/source/activex/module_activex.ulf35
-rw-r--r--scp2/source/base/file_base.scp87
-rw-r--r--scp2/source/base/folderitem_base.scp41
-rw-r--r--scp2/source/base/folderitem_base.ulf30
-rw-r--r--scp2/source/base/makefile.mk62
-rw-r--r--scp2/source/base/module_base.scp96
-rw-r--r--scp2/source/base/module_base.ulf47
-rwxr-xr-xscp2/source/base/registryitem_base.scp163
-rw-r--r--scp2/source/base/registryitem_base.ulf29
-rw-r--r--scp2/source/binfilter/file_binfilter.scp74
-rw-r--r--scp2/source/binfilter/makefile.mk52
-rw-r--r--scp2/source/binfilter/module_binfilter.scp77
-rw-r--r--scp2/source/binfilter/module_binfilter.ulf32
-rw-r--r--scp2/source/binfilter/registryitem_binfilter.scp931
-rw-r--r--scp2/source/binfilter/registryitem_binfilter.ulf53
-rw-r--r--scp2/source/calc/file_calc.scp94
-rw-r--r--scp2/source/calc/folderitem_calc.scp41
-rw-r--r--scp2/source/calc/folderitem_calc.ulf32
-rw-r--r--scp2/source/calc/makefile.mk61
-rw-r--r--scp2/source/calc/module_calc.scp101
-rw-r--r--scp2/source/calc/module_calc.ulf50
-rw-r--r--scp2/source/calc/registryitem_calc.scp1120
-rw-r--r--scp2/source/calc/registryitem_calc.ulf54
-rw-r--r--scp2/source/canvas/cairocanvas.scp41
-rw-r--r--scp2/source/canvas/canvascommons.scp40
-rw-r--r--scp2/source/canvas/directxcanvas.scp36
-rw-r--r--scp2/source/canvas/makefile.mk64
-rw-r--r--scp2/source/canvas/vclcanvas.scp30
-rw-r--r--scp2/source/crashrep/file_crashrep.scp64
-rw-r--r--scp2/source/crashrep/makefile.mk50
-rw-r--r--scp2/source/draw/file_draw.scp64
-rw-r--r--scp2/source/draw/folderitem_draw.scp41
-rw-r--r--scp2/source/draw/folderitem_draw.ulf34
-rw-r--r--scp2/source/draw/makefile.mk58
-rw-r--r--scp2/source/draw/module_draw.scp79
-rw-r--r--scp2/source/draw/module_draw.ulf47
-rw-r--r--scp2/source/draw/registryitem_draw.scp927
-rw-r--r--scp2/source/draw/registryitem_draw.ulf42
-rw-r--r--scp2/source/gnome/file_gnome.scp69
-rw-r--r--scp2/source/gnome/makefile.mk71
-rw-r--r--scp2/source/gnome/module_gnome.scp58
-rw-r--r--scp2/source/gnome/module_gnome.ulf33
-rw-r--r--scp2/source/graphicfilter/file_graphicfilter.scp40
-rw-r--r--scp2/source/graphicfilter/makefile.mk50
-rw-r--r--scp2/source/graphicfilter/module_graphicfilter.scp38
-rw-r--r--scp2/source/graphicfilter/module_graphicfilter.ulf119
-rw-r--r--scp2/source/impress/file_impress.scp91
-rw-r--r--scp2/source/impress/folderitem_impress.scp41
-rw-r--r--scp2/source/impress/folderitem_impress.ulf34
-rw-r--r--scp2/source/impress/makefile.mk65
-rw-r--r--scp2/source/impress/module_impress.scp89
-rw-r--r--scp2/source/impress/module_impress.ulf48
-rw-r--r--scp2/source/impress/module_ogltrans.scp63
-rw-r--r--scp2/source/impress/module_ogltrans.ulf34
-rw-r--r--scp2/source/impress/registryitem_impress.scp984
-rw-r--r--scp2/source/impress/registryitem_impress.ulf60
-rw-r--r--scp2/source/javafilter/file_javafilter.scp81
-rw-r--r--scp2/source/javafilter/makefile.mk59
-rw-r--r--scp2/source/javafilter/module_javafilter.scp123
-rw-r--r--scp2/source/javafilter/module_javafilter.ulf68
-rw-r--r--scp2/source/javafilter/registryitem_javafilter.scp437
-rw-r--r--scp2/source/javafilter/registryitem_javafilter.ulf59
-rw-r--r--scp2/source/kde/file_kde.scp49
-rw-r--r--scp2/source/kde/makefile.mk62
-rw-r--r--scp2/source/kde/module_kde.scp50
-rw-r--r--scp2/source/kde/module_kde.ulf33
-rw-r--r--scp2/source/layout/layout.scp62
-rw-r--r--scp2/source/layout/makefile.mk50
-rw-r--r--scp2/source/math/file_math.scp80
-rw-r--r--scp2/source/math/folderitem_math.scp41
-rw-r--r--scp2/source/math/folderitem_math.ulf31
-rw-r--r--scp2/source/math/makefile.mk57
-rw-r--r--scp2/source/math/module_math.scp80
-rw-r--r--scp2/source/math/module_math.ulf47
-rw-r--r--scp2/source/math/registryitem_math.scp681
-rw-r--r--scp2/source/math/registryitem_math.ulf36
-rwxr-xr-xscp2/source/mkopenwith.btm52
-rw-r--r--scp2/source/onlineupdate/file_onlineupdate.scp46
-rw-r--r--scp2/source/onlineupdate/makefile.mk51
-rw-r--r--scp2/source/onlineupdate/module_onlineupdate.scp38
-rw-r--r--scp2/source/onlineupdate/module_onlineupdate.ulf33
-rw-r--r--scp2/source/ooo/common_brand.scp1490
-rw-r--r--scp2/source/ooo/common_brand_readme.scp126
-rw-r--r--scp2/source/ooo/datacarrier_ooo.scp34
-rw-r--r--scp2/source/ooo/directory_ooo.scp1331
-rw-r--r--scp2/source/ooo/directory_ooo.ulf54
-rwxr-xr-xscp2/source/ooo/directory_ooo_macosx.scp45
-rw-r--r--scp2/source/ooo/file_extra_ooo.scp445
-rw-r--r--scp2/source/ooo/file_font_ooo.scp150
-rw-r--r--scp2/source/ooo/file_improvement.scp41
-rw-r--r--scp2/source/ooo/file_jre_ooo.scp49
-rw-r--r--scp2/source/ooo/file_library_ooo.scp1818
-rw-r--r--scp2/source/ooo/file_ooo.scp2166
-rw-r--r--scp2/source/ooo/file_resource_ooo.scp140
-rw-r--r--scp2/source/ooo/folder_ooo.scp33
-rw-r--r--scp2/source/ooo/folderitem_ooo.scp56
-rw-r--r--scp2/source/ooo/folderitem_ooo.ulf35
-rw-r--r--scp2/source/ooo/installation_ooo.scp49
-rw-r--r--scp2/source/ooo/makefile.mk317
-rwxr-xr-xscp2/source/ooo/mergemodules_ooo.scp56
-rw-r--r--scp2/source/ooo/module_headless.scp27
-rw-r--r--scp2/source/ooo/module_headless.ulf32
-rw-r--r--scp2/source/ooo/module_hidden_ooo.scp811
-rw-r--r--scp2/source/ooo/module_improvement.scp42
-rw-r--r--scp2/source/ooo/module_java.scp100
-rw-r--r--scp2/source/ooo/module_java.ulf32
-rwxr-xr-xscp2/source/ooo/module_lang_template.scp138
-rw-r--r--scp2/source/ooo/module_langpack.scp38
-rw-r--r--scp2/source/ooo/module_langpack.ulf692
-rw-r--r--scp2/source/ooo/module_ooo.scp409
-rw-r--r--scp2/source/ooo/module_ooo.ulf242
-rw-r--r--scp2/source/ooo/module_systemint.scp50
-rw-r--r--scp2/source/ooo/module_systemint.ulf32
-rw-r--r--scp2/source/ooo/ooo_brand.scp55
-rw-r--r--scp2/source/ooo/profile_ooo.scp52
-rw-r--r--scp2/source/ooo/profileitem_ooo.scp463
-rw-r--r--scp2/source/ooo/registryitem_ooo.scp676
-rw-r--r--scp2/source/ooo/registryitem_ooo.ulf41
-rw-r--r--scp2/source/ooo/scpaction_ooo.scp380
-rw-r--r--scp2/source/ooo/shortcut_ooo.scp97
-rw-r--r--scp2/source/ooo/starregistry_ooo.scp34
-rwxr-xr-xscp2/source/ooo/ure.scp1277
-rwxr-xr-xscp2/source/ooo/ure_into_ooo.scp67
-rwxr-xr-xscp2/source/ooo/ure_standalone.scp109
-rw-r--r--scp2/source/ooo/vc_redist.scp52
-rwxr-xr-xscp2/source/ooo/windowscustomaction_ooo.scp506
-rw-r--r--scp2/source/python/file_python.scp314
-rw-r--r--scp2/source/python/makefile.mk63
-rw-r--r--scp2/source/python/module_python.scp39
-rw-r--r--scp2/source/python/module_python.ulf32
-rw-r--r--scp2/source/python/module_python_mailmerge.scp36
-rwxr-xr-xscp2/source/python/module_python_mailmerge.ulf32
-rw-r--r--scp2/source/python/profileitem_python.scp94
-rw-r--r--scp2/source/quickstart/file_quickstart.scp35
-rw-r--r--scp2/source/quickstart/folderitem_quickstart.scp35
-rw-r--r--scp2/source/quickstart/makefile.mk53
-rw-r--r--scp2/source/quickstart/module_quickstart.scp36
-rw-r--r--scp2/source/quickstart/module_quickstart.ulf35
-rw-r--r--scp2/source/quickstart/registryitem_quickstart.scp36
-rw-r--r--scp2/source/sdkoo/makefile.mk46
-rw-r--r--scp2/source/sdkoo/module_sdkoo.scp37
-rw-r--r--scp2/source/sdkoo/module_sdkoo.ulf32
-rw-r--r--scp2/source/sdkoo/sdkoo.scp253
-rwxr-xr-xscp2/source/supported_extensions.txt80
-rwxr-xr-xscp2/source/templates/makefile.mk52
-rwxr-xr-xscp2/source/templates/module_langpack.sct34
-rwxr-xr-xscp2/source/templates/module_langpack_base.sct37
-rw-r--r--scp2/source/templates/module_langpack_binfilter.sct38
-rwxr-xr-xscp2/source/templates/module_langpack_calc.sct37
-rwxr-xr-xscp2/source/templates/module_langpack_draw.sct37
-rwxr-xr-xscp2/source/templates/module_langpack_impress.sct37
-rwxr-xr-xscp2/source/templates/module_langpack_math.sct37
-rwxr-xr-xscp2/source/templates/module_langpack_onlineupdate.sct37
-rwxr-xr-xscp2/source/templates/module_langpack_root.sct83
-rwxr-xr-xscp2/source/templates/module_langpack_writer.sct37
-rwxr-xr-xscp2/source/templates/modules.pl185
-rw-r--r--scp2/source/testtool/file_testtool.scp78
-rw-r--r--scp2/source/testtool/makefile.mk50
-rw-r--r--scp2/source/testtool/module_testtool.scp38
-rw-r--r--scp2/source/testtool/module_testtool.ulf32
-rwxr-xr-xscp2/source/winexplorerext/file_winexplorerext.scp112
-rwxr-xr-xscp2/source/winexplorerext/makefile.mk61
-rwxr-xr-xscp2/source/winexplorerext/module_winexplorerext.scp57
-rw-r--r--scp2/source/winexplorerext/module_winexplorerext.ulf35
-rw-r--r--scp2/source/winexplorerext/registryitem_winexplorerext.scp230
-rw-r--r--scp2/source/writer/file_writer.scp101
-rw-r--r--scp2/source/writer/folderitem_writer.scp41
-rw-r--r--scp2/source/writer/folderitem_writer.ulf35
-rw-r--r--scp2/source/writer/makefile.mk58
-rw-r--r--scp2/source/writer/module_writer.scp106
-rw-r--r--scp2/source/writer/module_writer.ulf50
-rw-r--r--scp2/source/writer/registryitem_writer.scp1498
-rw-r--r--scp2/source/writer/registryitem_writer.ulf66
-rw-r--r--scp2/source/xsltfilter/file_xsltfilter.scp85
-rw-r--r--scp2/source/xsltfilter/makefile.mk51
-rw-r--r--scp2/source/xsltfilter/module_xsltfilter.scp50
-rw-r--r--scp2/source/xsltfilter/module_xsltfilter.ulf35
-rw-r--r--scp2/util/makefile.mk362
-rw-r--r--scripting/README67
-rw-r--r--scripting/examples/basic/InsertColouredText.xba124
-rw-r--r--scripting/examples/basic/InsertColouredTextDialog.xdl17
-rw-r--r--scripting/examples/basic/SearchAndReplace.xba109
-rw-r--r--scripting/examples/basic/SearchAndReplaceDialog.xdl13
-rw-r--r--scripting/examples/basic/dialog.xlb6
-rw-r--r--scripting/examples/basic/script.xlb6
-rw-r--r--scripting/examples/beanshell/Capitalise/capitalise.bsh94
-rwxr-xr-xscripting/examples/beanshell/Capitalise/parcel-descriptor.xml16
-rw-r--r--scripting/examples/beanshell/HelloWorld/helloworld.bsh17
-rwxr-xr-xscripting/examples/beanshell/HelloWorld/parcel-descriptor.xml16
-rw-r--r--scripting/examples/beanshell/Highlight/ButtonPressHandler.bsh106
-rw-r--r--scripting/examples/beanshell/Highlight/ShowDialog.bsh124
-rw-r--r--scripting/examples/beanshell/Highlight/highlighter.bsh149
-rwxr-xr-xscripting/examples/beanshell/Highlight/parcel-descriptor.xml25
-rwxr-xr-xscripting/examples/beanshell/InteractiveBeanShell/interactive.bsh4
-rw-r--r--scripting/examples/beanshell/InteractiveBeanShell/parcel-descriptor.xml16
-rw-r--r--scripting/examples/beanshell/MemoryUsage/memusage.bsh120
-rw-r--r--scripting/examples/beanshell/MemoryUsage/parcel-descriptor.xml16
-rwxr-xr-xscripting/examples/beanshell/WordCount/parcel-descriptor.xml16
-rw-r--r--scripting/examples/beanshell/WordCount/wordcount.bsh64
-rw-r--r--scripting/examples/delzip1
-rw-r--r--scripting/examples/java/HelloWorld/HelloWorld.java22
-rw-r--r--scripting/examples/java/HelloWorld/parcel-descriptor.xml16
-rw-r--r--scripting/examples/java/Highlight/HighlightText.java223
-rwxr-xr-xscripting/examples/java/Highlight/parcel-descriptor.xml17
-rw-r--r--scripting/examples/java/MemoryUsage/MemoryUsage.java141
-rw-r--r--scripting/examples/java/MemoryUsage/parcel-descriptor.xml16
-rw-r--r--scripting/examples/java/Newsgroup/MimeConfiguration.java219
-rw-r--r--scripting/examples/java/Newsgroup/NewsGroup.java23
-rw-r--r--scripting/examples/java/Newsgroup/OfficeAttachment.java307
-rw-r--r--scripting/examples/java/Newsgroup/PostNewsgroup.java625
-rw-r--r--scripting/examples/java/Newsgroup/Sender.java126
-rw-r--r--scripting/examples/java/Newsgroup/StatusWindow.java138
-rw-r--r--scripting/examples/java/Newsgroup/SubscribedNewsgroups.java373
-rwxr-xr-xscripting/examples/java/build.xml139
-rw-r--r--scripting/examples/java/debugger/DebugRunner.java71
-rw-r--r--scripting/examples/java/debugger/OOBeanShellDebugger.java374
-rw-r--r--scripting/examples/java/debugger/OORhinoDebugger.java75
-rw-r--r--scripting/examples/java/debugger/OOScriptDebugger.java7
-rw-r--r--scripting/examples/java/debugger/parcel-descriptor.xml18
-rwxr-xr-xscripting/examples/java/makefile.mk38
-rw-r--r--scripting/examples/java/selector/ScriptSelector.java498
-rw-r--r--scripting/examples/java/selector/container.gifbin0 -> 164 bytes
-rw-r--r--scripting/examples/java/selector/parcel-descriptor.xml17
-rw-r--r--scripting/examples/java/selector/script.gifbin0 -> 187 bytes
-rw-r--r--scripting/examples/java/selector/soffice.gifbin0 -> 136 bytes
-rw-r--r--scripting/examples/javascript/ExportSheetsToHTML/exportsheetstohtml.js71
-rwxr-xr-xscripting/examples/javascript/ExportSheetsToHTML/parcel-descriptor.xml16
-rw-r--r--scripting/examples/javascript/HelloWorld/helloworld.js16
-rwxr-xr-xscripting/examples/javascript/HelloWorld/parcel-descriptor.xml16
-rw-r--r--scripting/examples/javascript/Highlight/ButtonPressHandler.js105
-rw-r--r--scripting/examples/javascript/Highlight/ShowDialog.js115
-rw-r--r--scripting/examples/javascript/Highlight/parcel-descriptor.xml25
-rwxr-xr-xscripting/examples/makefile.mk58
-rw-r--r--scripting/examples/python/Capitalise.py61
-rw-r--r--scripting/examples/python/HelloWorld.py13
-rw-r--r--scripting/examples/python/pythonSamples/TableSample.py96
-rw-r--r--scripting/inc/makefile.mk47
-rw-r--r--scripting/inc/pch/precompiled_scripting.cxx29
-rw-r--r--scripting/inc/pch/precompiled_scripting.hxx32
-rw-r--r--scripting/java/Framework/com/sun/star/script/framework/security/SecurityDialog.java546
-rw-r--r--scripting/java/build.env3
-rwxr-xr-xscripting/java/build.xml285
-rw-r--r--scripting/java/com/sun/star/script/framework/browse/DialogFactory.java423
-rw-r--r--scripting/java/com/sun/star/script/framework/browse/ParcelBrowseNode.java376
-rw-r--r--scripting/java/com/sun/star/script/framework/browse/PkgProviderBrowseNode.java65
-rw-r--r--scripting/java/com/sun/star/script/framework/browse/ProviderBrowseNode.java291
-rw-r--r--scripting/java/com/sun/star/script/framework/browse/ScriptBrowseNode.java335
-rw-r--r--scripting/java/com/sun/star/script/framework/container/DeployedUnoPackagesDB.java231
-rw-r--r--scripting/java/com/sun/star/script/framework/container/Parcel.java308
-rw-r--r--scripting/java/com/sun/star/script/framework/container/ParcelContainer.java746
-rw-r--r--scripting/java/com/sun/star/script/framework/container/ParcelDescriptor.java450
-rw-r--r--scripting/java/com/sun/star/script/framework/container/ParsedScriptUri.java36
-rw-r--r--scripting/java/com/sun/star/script/framework/container/ScriptEntry.java128
-rw-r--r--scripting/java/com/sun/star/script/framework/container/ScriptMetaData.java410
-rw-r--r--scripting/java/com/sun/star/script/framework/container/UnoPkgContainer.java438
-rw-r--r--scripting/java/com/sun/star/script/framework/container/XMLParser.java38
-rw-r--r--scripting/java/com/sun/star/script/framework/container/XMLParserFactory.java180
-rw-r--r--scripting/java/com/sun/star/script/framework/io/UCBStreamHandler.java281
-rw-r--r--scripting/java/com/sun/star/script/framework/io/XInputStreamImpl.java119
-rw-r--r--scripting/java/com/sun/star/script/framework/io/XInputStreamWrapper.java102
-rw-r--r--scripting/java/com/sun/star/script/framework/io/XOutputStreamWrapper.java128
-rw-r--r--scripting/java/com/sun/star/script/framework/io/XStorageHelper.java278
-rw-r--r--scripting/java/com/sun/star/script/framework/log/LogUtils.java68
-rwxr-xr-xscripting/java/com/sun/star/script/framework/provider/ClassLoaderFactory.java74
-rw-r--r--scripting/java/com/sun/star/script/framework/provider/EditorScriptContext.java100
-rwxr-xr-xscripting/java/com/sun/star/script/framework/provider/NoSuitableClassLoaderException.java53
-rw-r--r--scripting/java/com/sun/star/script/framework/provider/PathUtils.java87
-rw-r--r--scripting/java/com/sun/star/script/framework/provider/ScriptContext.java165
-rw-r--r--scripting/java/com/sun/star/script/framework/provider/ScriptEditor.java13
-rwxr-xr-xscripting/java/com/sun/star/script/framework/provider/ScriptProvider.java745
-rwxr-xr-xscripting/java/com/sun/star/script/framework/provider/beanshell/PlainSourceView.java247
-rw-r--r--scripting/java/com/sun/star/script/framework/provider/beanshell/ScriptEditorForBeanShell.java412
-rwxr-xr-xscripting/java/com/sun/star/script/framework/provider/beanshell/ScriptProviderForBeanShell.java418
-rw-r--r--scripting/java/com/sun/star/script/framework/provider/beanshell/ScriptSourceModel.java141
-rw-r--r--scripting/java/com/sun/star/script/framework/provider/beanshell/ScriptSourceView.java35
-rw-r--r--scripting/java/com/sun/star/script/framework/provider/beanshell/template.bsh48
-rwxr-xr-xscripting/java/com/sun/star/script/framework/provider/java/Resolver.java50
-rwxr-xr-xscripting/java/com/sun/star/script/framework/provider/java/ScriptDescriptor.java212
-rwxr-xr-xscripting/java/com/sun/star/script/framework/provider/java/ScriptProviderForJava.java399
-rwxr-xr-xscripting/java/com/sun/star/script/framework/provider/java/ScriptProxy.java92
-rwxr-xr-xscripting/java/com/sun/star/script/framework/provider/java/StrictResolver.java128
-rw-r--r--scripting/java/com/sun/star/script/framework/provider/javascript/ScriptEditorForJavaScript.java376
-rwxr-xr-xscripting/java/com/sun/star/script/framework/provider/javascript/ScriptProviderForJavaScript.java392
-rw-r--r--scripting/java/com/sun/star/script/framework/provider/javascript/template.js37
-rwxr-xr-xscripting/java/makefile.mk38
-rw-r--r--scripting/java/manifest.mf26
-rw-r--r--scripting/java/org/openoffice/idesupport/CommandLineTools.java350
-rw-r--r--scripting/java/org/openoffice/idesupport/ExtensionFinder.java60
-rw-r--r--scripting/java/org/openoffice/idesupport/JavaFinder.java227
-rw-r--r--scripting/java/org/openoffice/idesupport/LocalOffice.java109
-rw-r--r--scripting/java/org/openoffice/idesupport/MethodFinder.java8
-rw-r--r--scripting/java/org/openoffice/idesupport/OfficeDocument.java120
-rw-r--r--scripting/java/org/openoffice/idesupport/OfficeInstallation.java110
-rw-r--r--scripting/java/org/openoffice/idesupport/SVersionRCFile.java237
-rw-r--r--scripting/java/org/openoffice/idesupport/filter/AllFilesFilter.java47
-rw-r--r--scripting/java/org/openoffice/idesupport/filter/BinaryOnlyFilter.java58
-rw-r--r--scripting/java/org/openoffice/idesupport/filter/ExceptParcelFilter.java59
-rw-r--r--scripting/java/org/openoffice/idesupport/filter/FileFilter.java32
-rw-r--r--scripting/java/org/openoffice/idesupport/localoffice/LocalOfficeImpl.java154
-rw-r--r--scripting/java/org/openoffice/idesupport/ui/ConfigurePanel.java236
-rw-r--r--scripting/java/org/openoffice/idesupport/ui/MethodPanel.java186
-rw-r--r--scripting/java/org/openoffice/idesupport/ui/ScriptPanel.java206
-rw-r--r--scripting/java/org/openoffice/idesupport/ui/add.gifbin0 -> 103 bytes
-rw-r--r--scripting/java/org/openoffice/idesupport/xml/Manifest.java171
-rw-r--r--scripting/java/org/openoffice/idesupport/zip/ParcelZipper.java600
-rw-r--r--scripting/java/org/openoffice/netbeans/editor/JavaKit.java248
-rw-r--r--scripting/java/org/openoffice/netbeans/editor/NetBeansSourceView.java209
-rw-r--r--scripting/java/org/openoffice/netbeans/editor/OOo.jcb5
-rw-r--r--scripting/java/org/openoffice/netbeans/editor/OOo.jcs21
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/Bundle.properties0
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/Bundle_en_US.properties0
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/actions/BuildParcelAction.java69
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/actions/CompileParcelAction.java44
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/actions/ConfigureParcelAction.java70
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/actions/DeployParcelAction.java244
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/actions/MountDocumentAction.java85
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/actions/MountParcelAction.java84
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/actions/OfficeDocumentCookie.java42
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/actions/OfficeDocumentSupport.java143
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/actions/ParcelCookie.java42
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/actions/ParcelDescriptorEditorSupport.java141
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/actions/ParcelDescriptorParserCookie.java42
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/actions/ParcelDescriptorParserSupport.java121
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/actions/ParcelFolderCookie.java42
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/actions/ParcelFolderSupport.java257
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/actions/ParcelSupport.java191
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/filesystem/Bundle.properties44
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/filesystem/Bundle_en_US.properties0
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/filesystem/OpenOfficeDocFileSystem.java1192
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/filesystem/OpenOfficeDocFileSystemBeanInfo.java125
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/loader/Bundle.properties13
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/loader/OfficeDocumentDataLoader.java112
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/loader/OfficeDocumentDataLoaderBeanInfo.java72
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/loader/OfficeDocumentDataNode.java120
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/loader/OfficeDocumentDataObject.java58
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/loader/ParcelContentsFolder.java137
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/loader/ParcelContentsFolderDataLoader.java82
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/loader/ParcelContentsFolderDataLoaderBeanInfo.java76
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/loader/ParcelDataLoader.java89
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/loader/ParcelDataLoaderBeanInfo.java76
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/loader/ParcelDataNode.java114
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/loader/ParcelDataObject.java77
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/loader/ParcelDescriptorDataLoader.java91
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/loader/ParcelDescriptorDataLoaderBeanInfo.java76
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/loader/ParcelDescriptorDataNode.java81
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/loader/ParcelDescriptorDataObject.java83
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/loader/ParcelFolder.java303
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/loader/ParcelFolderDataLoader.java112
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/loader/ParcelFolderDataLoaderBeanInfo.java76
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/nodes/OfficeDocumentChildren.java147
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/nodes/ParcelDescriptorChildren.java91
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/nodes/ScriptNode.java209
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/options/Bundle.properties14
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/options/OfficeSettings.java133
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/options/OfficeSettingsBeanInfo.java147
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/options/OfficeSettingsIcon.gifbin0 -> 145 bytes
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/options/OfficeSettingsIcon32.gifbin0 -> 253 bytes
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/resources/AppStorage.html11
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/resources/AppStorage.settings7
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/resources/Bundle.properties24
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/resources/EmptyParcel.html11
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/resources/OfficeIcon.gifbin0 -> 588 bytes
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/resources/OfficeIcon32.gifbin0 -> 759 bytes
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/resources/OfficeSettings.settings9
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/resources/OpenOfficeDocFileSystem.html11
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/resources/OpenOfficeDocFileSystem.settings7
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/resources/OpenOfficeDocFileSystemIcon.pngbin0 -> 702 bytes
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/resources/OpenOfficeDocFileSystemIcon32.pngbin0 -> 1533 bytes
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/resources/ParcelIcon.gifbin0 -> 576 bytes
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/resources/ScriptParcel.html11
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/resources/ScriptParcelDescriptor.html11
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/resources/layer.xml98
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/resources/mime-resolver.xml16
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/resources/office-scripting.url1
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/resources/templates/Empty.bsh_24
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/resources/templates/Empty.java_27
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/resources/templates/EmptyParcelDescriptor.xml_4
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/resources/templates/HelloWorld.java_41
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/resources/templates/ParcelDescriptor.xml_8
-rwxr-xr-xscripting/java/org/openoffice/netbeans/modules/office/resources/webLink.gifbin0 -> 969 bytes
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/utils/FrameworkJarChecker.java140
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/utils/ManifestParser.java97
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/utils/NagDialog.java127
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/utils/OfficeModule.java68
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/utils/PackageRemover.java106
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/utils/ZipMounter.java92
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/wizard/Bundle.properties27
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/wizard/Bundle_en_US.properties0
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/wizard/InstallationPathDescriptor.java72
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/wizard/InstallationPathIterator.java136
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/wizard/JavaScriptIterator.java250
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/wizard/ParcelContentsIterator.java254
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/wizard/ParcelPropertiesPanel.java117
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/wizard/ParcelPropertiesVisualPanel.form74
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/wizard/ParcelPropertiesVisualPanel.java157
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/wizard/SelectPathPanel.java123
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/wizard/SelectPathVisualPanel.form82
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/wizard/SelectPathVisualPanel.java196
-rwxr-xr-xscripting/prj/build.lst14
-rw-r--r--scripting/prj/d.lst17
-rw-r--r--scripting/source/basprov/baslibnode.cxx148
-rw-r--r--scripting/source/basprov/baslibnode.hxx87
-rw-r--r--scripting/source/basprov/basmethnode.cxx358
-rw-r--r--scripting/source/basprov/basmethnode.hxx132
-rw-r--r--scripting/source/basprov/basmodnode.cxx153
-rw-r--r--scripting/source/basprov/basmodnode.hxx81
-rw-r--r--scripting/source/basprov/basprov.cxx606
-rw-r--r--scripting/source/basprov/basprov.hxx115
-rw-r--r--scripting/source/basprov/basprov.xml50
-rw-r--r--scripting/source/basprov/basscript.cxx226
-rw-r--r--scripting/source/basprov/basscript.hxx89
-rw-r--r--scripting/source/basprov/makefile.mk73
-rw-r--r--scripting/source/dlgprov/dlgevtatt.cxx679
-rw-r--r--scripting/source/dlgprov/dlgevtatt.hxx164
-rw-r--r--scripting/source/dlgprov/dlgprov.cxx870
-rw-r--r--scripting/source/dlgprov/dlgprov.hxx157
-rw-r--r--scripting/source/dlgprov/dlgprov.xml58
-rw-r--r--scripting/source/dlgprov/makefile.mk82
-rw-r--r--scripting/source/inc/bcholder.hxx70
-rw-r--r--scripting/source/inc/util/MiscUtils.hxx177
-rw-r--r--scripting/source/inc/util/scriptingconstants.hxx79
-rw-r--r--scripting/source/inc/util/util.hxx49
-rw-r--r--scripting/source/protocolhandler/exports.dxp3
-rw-r--r--scripting/source/protocolhandler/makefile.mk63
-rwxr-xr-xscripting/source/protocolhandler/protocolhandler.xml30
-rw-r--r--scripting/source/protocolhandler/scripthandler.cxx601
-rw-r--r--scripting/source/protocolhandler/scripthandler.hxx151
-rw-r--r--scripting/source/provider/ActiveMSPList.cxx324
-rw-r--r--scripting/source/provider/ActiveMSPList.hxx114
-rw-r--r--scripting/source/provider/BrowseNodeFactoryImpl.cxx797
-rw-r--r--scripting/source/provider/BrowseNodeFactoryImpl.hxx88
-rwxr-xr-xscripting/source/provider/MasterScriptProvider.cxx1037
-rw-r--r--scripting/source/provider/MasterScriptProvider.hxx157
-rw-r--r--scripting/source/provider/MasterScriptProviderFactory.cxx153
-rw-r--r--scripting/source/provider/MasterScriptProviderFactory.hxx85
-rw-r--r--scripting/source/provider/ProviderCache.cxx222
-rw-r--r--scripting/source/provider/ProviderCache.hxx108
-rw-r--r--scripting/source/provider/ScriptImpl.cxx122
-rw-r--r--scripting/source/provider/ScriptImpl.hxx113
-rwxr-xr-xscripting/source/provider/ScriptingContext.cxx116
-rw-r--r--scripting/source/provider/ScriptingContext.hxx91
-rw-r--r--scripting/source/provider/URIHelper.cxx322
-rw-r--r--scripting/source/provider/URIHelper.hxx108
-rw-r--r--scripting/source/provider/exports.dxp3
-rw-r--r--scripting/source/provider/makefile.mk53
-rwxr-xr-xscripting/source/provider/provider.xml34
-rw-r--r--scripting/source/pyprov/mailmerge.py440
-rw-r--r--scripting/source/pyprov/makefile.mk49
-rw-r--r--scripting/source/pyprov/officehelper.py93
-rw-r--r--scripting/source/pyprov/pythonscript.py984
-rw-r--r--scripting/source/runtimemgr/ScriptExecDialog.hrc28
-rw-r--r--scripting/source/runtimemgr/ScriptExecDialog.src36
-rw-r--r--scripting/source/runtimemgr/ScriptNameResolverImpl.cxx660
-rw-r--r--scripting/source/runtimemgr/ScriptNameResolverImpl.hxx110
-rwxr-xr-xscripting/source/runtimemgr/ScriptRuntimeManager.cxx566
-rw-r--r--scripting/source/runtimemgr/ScriptRuntimeManager.hxx149
-rw-r--r--scripting/source/runtimemgr/StorageBridge.cxx152
-rw-r--r--scripting/source/runtimemgr/StorageBridge.hxx85
-rw-r--r--scripting/source/runtimemgr/StorageBridgeFactory.cxx69
-rw-r--r--scripting/source/runtimemgr/StorageBridgeFactory.hxx58
-rw-r--r--scripting/source/runtimemgr/exports.dxp3
-rw-r--r--scripting/source/runtimemgr/makefile.mk48
-rwxr-xr-xscripting/source/runtimemgr/runtimemgr.xml47
-rw-r--r--scripting/source/storage/ScriptData.hxx91
-rw-r--r--scripting/source/storage/ScriptElement.cxx161
-rw-r--r--scripting/source/storage/ScriptElement.hxx61
-rw-r--r--scripting/source/storage/ScriptInfo.cxx373
-rw-r--r--scripting/source/storage/ScriptInfo.hxx75
-rw-r--r--scripting/source/storage/ScriptInfoImpl.hxx93
-rw-r--r--scripting/source/storage/ScriptMetadataImporter.cxx532
-rw-r--r--scripting/source/storage/ScriptMetadataImporter.hxx251
-rwxr-xr-xscripting/source/storage/ScriptSecurityManager.cxx605
-rwxr-xr-xscripting/source/storage/ScriptSecurityManager.hxx99
-rw-r--r--scripting/source/storage/ScriptStorage.cxx895
-rw-r--r--scripting/source/storage/ScriptStorage.hxx205
-rw-r--r--scripting/source/storage/ScriptStorageManager.cxx573
-rw-r--r--scripting/source/storage/ScriptStorageManager.hxx225
-rw-r--r--scripting/source/storage/ScriptURI.cxx227
-rw-r--r--scripting/source/storage/ScriptURI.hxx120
-rw-r--r--scripting/source/storage/XMLElement.cxx169
-rw-r--r--scripting/source/storage/XMLElement.hxx140
-rw-r--r--scripting/source/storage/exports.dxp3
-rw-r--r--scripting/source/storage/makefile.mk53
-rw-r--r--scripting/source/storage/storage.xml47
-rw-r--r--scripting/source/stringresource/makefile.mk62
-rw-r--r--scripting/source/stringresource/stringresource.cxx3097
-rw-r--r--scripting/source/stringresource/stringresource.hxx691
-rw-r--r--scripting/source/stringresource/stringresource.xml36
-rw-r--r--scripting/source/vbaevents/eventhelper.cxx1045
-rw-r--r--scripting/source/vbaevents/makefile.mk93
-rwxr-xr-xscripting/source/vbaevents/service.cxx131
-rwxr-xr-xscripting/source/vbaevents/vbaevents.xml26
-rwxr-xr-xscripting/util/ant.pmk55
-rw-r--r--scripting/util/exports.dxp3
-rw-r--r--scripting/util/makefile.mk67
-rwxr-xr-xscripting/util/makefile.pmk43
-rwxr-xr-xscripting/util/target.pmk28
-rw-r--r--scripting/workben/bindings/EditDebug.xdl36
-rw-r--r--scripting/workben/bindings/EventsBinding.xdl61
-rw-r--r--scripting/workben/bindings/HelpBinding.xdl30
-rw-r--r--scripting/workben/bindings/Highlight.xdl14
-rw-r--r--scripting/workben/bindings/KeyBinding.xdl59
-rw-r--r--scripting/workben/bindings/MacroEditor.xdl10
-rw-r--r--scripting/workben/bindings/MenuBinding.xdl65
-rw-r--r--scripting/workben/bindings/ScriptBinding.xba2093
-rw-r--r--scripting/workben/bindings/calckeybinding.xml94
-rw-r--r--scripting/workben/bindings/calcmenubar.xml319
-rw-r--r--scripting/workben/bindings/dialog.xlb6
-rw-r--r--scripting/workben/bindings/drawkeybinding.xml58
-rw-r--r--scripting/workben/bindings/drawmenubar.xml354
-rw-r--r--scripting/workben/bindings/eventbindings.xml4
-rw-r--r--scripting/workben/bindings/impresskeybinding.xml62
-rw-r--r--scripting/workben/bindings/impressmenubar.xml328
-rw-r--r--scripting/workben/bindings/manifest.xml14
-rw-r--r--scripting/workben/bindings/script.xlb4
-rw-r--r--scripting/workben/bindings/writerkeybinding.xml101
-rw-r--r--scripting/workben/bindings/writermenubar.xml281
-rwxr-xr-xscripting/workben/build.xml397
-rw-r--r--scripting/workben/data/ExampleSpreadSheetLatest.sxcbin0 -> 14635 bytes
-rw-r--r--scripting/workben/data/doc_with_beanshell_scripts.sxwbin0 -> 7044 bytes
-rw-r--r--scripting/workben/data/doc_with_one_script.sxwbin0 -> 6286 bytes
-rw-r--r--scripting/workben/data/doc_with_two_scripts.sxwbin0 -> 6308 bytes
-rw-r--r--scripting/workben/data/objdsc/drafts.com.sun.star.script.framework.protocolhandler.Dispatch.csv5
-rw-r--r--scripting/workben/data/objdsc/drafts.com.sun.star.script.framework.provider.Function.csv1
-rw-r--r--scripting/workben/data/objdsc/drafts.com.sun.star.script.framework.provider.FunctionProvider.csv1
-rwxr-xr-xscripting/workben/data/objdsc/drafts.com.sun.star.script.framework.runtime.ScriptRuntimeManager.csv2
-rw-r--r--scripting/workben/data/objdsc/drafts.com.sun.star.script.framework.storage.ScriptInfo.csv8
-rw-r--r--scripting/workben/data/objdsc/drafts.com.sun.star.script.framework.storage.ScriptStorage.csv4
-rw-r--r--scripting/workben/data/objdsc/drafts.com.sun.star.script.framework.storage.ScriptStorageManager.csv6
-rw-r--r--scripting/workben/data/script_in_class_file.sxwbin0 -> 6976 bytes
-rw-r--r--scripting/workben/data/script_in_jar_file.sxwbin0 -> 8081 bytes
-rw-r--r--scripting/workben/data/share_scripts.zipbin0 -> 2248 bytes
-rw-r--r--scripting/workben/data/testdata/Function.csv4
-rw-r--r--scripting/workben/data/testdata/FunctionProvider.csv1
-rw-r--r--scripting/workben/data/testdata/ScriptInfo.csv8
-rw-r--r--scripting/workben/data/testdata/ScriptRuntimeManager.csv8
-rw-r--r--scripting/workben/data/testdata/ScriptStorage.csv4
-rw-r--r--scripting/workben/data/testdata/ScriptStorageManager.csv18
-rw-r--r--scripting/workben/data/user_scripts.zipbin0 -> 6890 bytes
-rw-r--r--scripting/workben/data/xscriptcontext_test_document.sxwbin0 -> 6580 bytes
-rw-r--r--scripting/workben/ifc/scripting/ScriptingUtils.java124
-rw-r--r--scripting/workben/ifc/scripting/SecurityDialogUtil.java176
-rw-r--r--scripting/workben/ifc/scripting/_XFunction.java169
-rw-r--r--scripting/workben/ifc/scripting/_XFunctionProvider.java101
-rw-r--r--scripting/workben/ifc/scripting/_XScriptInfo.java331
-rw-r--r--scripting/workben/ifc/scripting/_XScriptInfoAccess.java228
-rw-r--r--scripting/workben/ifc/scripting/_XScriptInvocation.java232
-rw-r--r--scripting/workben/ifc/scripting/_XScriptNameResolver.java186
-rw-r--r--scripting/workben/ifc/scripting/_XScriptSecurity.java409
-rw-r--r--scripting/workben/ifc/scripting/_XScriptStorageManager.java267
-rw-r--r--scripting/workben/ifc/scripting/_XScriptStorageRefresh.java90
-rw-r--r--scripting/workben/ifc/scripting/makefile.mk40
-rw-r--r--scripting/workben/installer/Banner.java30
-rw-r--r--scripting/workben/installer/ExceptionTraceHelper.java64
-rw-r--r--scripting/workben/installer/ExecCmd.java100
-rw-r--r--scripting/workben/installer/FileUpdater.java232
-rw-r--r--scripting/workben/installer/Final.java136
-rw-r--r--scripting/workben/installer/IdeFinal.java125
-rw-r--r--scripting/workben/installer/IdeUpdater.java172
-rw-r--r--scripting/workben/installer/IdeVersion.java349
-rw-r--r--scripting/workben/installer/IdeWelcome.java79
-rw-r--r--scripting/workben/installer/InstUtil.java463
-rw-r--r--scripting/workben/installer/InstallListener.java6
-rw-r--r--scripting/workben/installer/InstallWizard.java389
-rw-r--r--scripting/workben/installer/InstallationEvent.java22
-rw-r--r--scripting/workben/installer/LogStream.java54
-rw-r--r--scripting/workben/installer/NavPanel.java113
-rw-r--r--scripting/workben/installer/Navigation.java58
-rw-r--r--scripting/workben/installer/ProtocolHandler.xcu10
-rw-r--r--scripting/workben/installer/Register.java144
-rw-r--r--scripting/workben/installer/Scripting.BeanShell.xcu11
-rwxr-xr-xscripting/workben/installer/Scripting.JavaScript.xcu11
-rw-r--r--scripting/workben/installer/Scripting.xcs57
-rw-r--r--scripting/workben/installer/Version.java339
-rw-r--r--scripting/workben/installer/Welcome.java156
-rw-r--r--scripting/workben/installer/XmlUpdater.java427
-rw-r--r--scripting/workben/installer/ZipData.java103
-rw-r--r--scripting/workben/installer/sidebar.jpgbin0 -> 8393 bytes
-rwxr-xr-xscripting/workben/makefile.mk35
-rw-r--r--scripting/workben/mod/_scripting/Dispatch.java108
-rw-r--r--scripting/workben/mod/_scripting/Function.java95
-rw-r--r--scripting/workben/mod/_scripting/FunctionProvider.java82
-rw-r--r--scripting/workben/mod/_scripting/ScriptInfo.java108
-rw-r--r--scripting/workben/mod/_scripting/ScriptRuntimeManager.java65
-rw-r--r--scripting/workben/mod/_scripting/ScriptStorage.java103
-rw-r--r--scripting/workben/mod/_scripting/ScriptStorageManager.java82
-rw-r--r--scripting/workben/mod/_scripting/TestDataLoader.java123
-rw-r--r--scripting/workben/mod/_scripting/makefile.mk40
-rw-r--r--sd/inc/CustomAnimationCloner.hxx42
-rw-r--r--sd/inc/CustomAnimationEffect.hxx476
-rw-r--r--sd/inc/CustomAnimationPreset.hxx155
-rw-r--r--sd/inc/EffectMigration.hxx83
-rwxr-xr-xsd/inc/FactoryIds.hxx51
-rwxr-xr-xsd/inc/Outliner.hxx553
-rwxr-xr-xsd/inc/OutlinerIterator.hxx370
-rw-r--r--sd/inc/SdShapeTypes.hxx83
-rw-r--r--sd/inc/TransitionPreset.hxx95
-rw-r--r--sd/inc/animations.hxx30
-rw-r--r--sd/inc/anmdef.hxx41
-rw-r--r--sd/inc/anminfo.hxx89
-rwxr-xr-xsd/inc/app.hrc466
-rw-r--r--sd/inc/app.hxx29
-rwxr-xr-xsd/inc/cusshow.hxx79
-rw-r--r--sd/inc/diadef.h42
-rwxr-xr-xsd/inc/drawdoc.hxx691
-rw-r--r--sd/inc/eetext.hxx34
-rw-r--r--sd/inc/fadedef.h44
-rwxr-xr-xsd/inc/glob.hrc158
-rwxr-xr-xsd/inc/glob.hxx99
-rw-r--r--sd/inc/helper/simplereferencecomponent.hxx115
-rw-r--r--sd/inc/helpids.h281
-rw-r--r--sd/inc/imapinfo.hxx71
-rw-r--r--sd/inc/makefile.mk48
-rw-r--r--sd/inc/misc.hxx36
-rw-r--r--sd/inc/misc/scopelock.hxx58
-rw-r--r--sd/inc/movedef.hxx42
-rw-r--r--sd/inc/pch/precompiled_sd.cxx29
-rw-r--r--sd/inc/pch/precompiled_sd.hxx916
-rw-r--r--sd/inc/pglink.hxx63
-rwxr-xr-xsd/inc/pres.hxx141
-rw-r--r--sd/inc/prlayout.hxx56
-rw-r--r--sd/inc/resltn.hxx52
-rw-r--r--sd/inc/sd_primitivetypes2d.hxx49
-rwxr-xr-xsd/inc/sdabstdlg.hxx225
-rw-r--r--sd/inc/sdattr.hrc245
-rw-r--r--sd/inc/sdattr.hxx175
-rw-r--r--sd/inc/sdcgmfilter.hxx50
-rw-r--r--sd/inc/sddll.hxx79
-rw-r--r--sd/inc/sddllapi.h40
-rw-r--r--sd/inc/sdenumdef.hxx38
-rw-r--r--sd/inc/sderror.hxx65
-rw-r--r--sd/inc/sdfilter.hxx79
-rw-r--r--sd/inc/sdgrffilter.hxx56
-rw-r--r--sd/inc/sdhtmlfilter.hxx54
-rw-r--r--sd/inc/sdiocmpt.hxx76
-rwxr-xr-xsd/inc/sdmod.hxx218
-rw-r--r--sd/inc/sdobjfac.hxx59
-rwxr-xr-xsd/inc/sdpage.hxx413
-rw-r--r--sd/inc/sdpptwrp.hxx56
-rw-r--r--sd/inc/sdresid.hxx42
-rw-r--r--sd/inc/sduiks.hrc73
-rw-r--r--sd/inc/sdundo.hxx53
-rw-r--r--sd/inc/sdxmlwrp.hxx63
-rwxr-xr-xsd/inc/shapelist.hxx88
-rw-r--r--sd/inc/stlfamily.hxx126
-rwxr-xr-xsd/inc/stlpool.hxx151
-rw-r--r--sd/inc/stlsheet.hxx161
-rw-r--r--sd/inc/strmname.h50
-rwxr-xr-xsd/inc/textapi.hxx69
-rw-r--r--sd/inc/undo/undofactory.hxx50
-rw-r--r--sd/inc/undo/undomanager.hxx81
-rw-r--r--sd/inc/undo/undoobjects.hxx202
-rw-r--r--sd/inc/undoanim.hxx95
-rw-r--r--sd/prj/build.lst48
-rwxr-xr-xsd/prj/d.lst57
-rw-r--r--sd/prj/struct.txt54
-rw-r--r--sd/qa/unoapi/Test.java51
-rw-r--r--sd/qa/unoapi/knownissues.xcl56
-rw-r--r--sd/qa/unoapi/makefile.mk48
-rw-r--r--sd/qa/unoapi/sd.sce23
-rw-r--r--sd/res/buttons/glas-blue.zipbin0 -> 22010 bytes
-rw-r--r--sd/res/buttons/glas-green.zipbin0 -> 25032 bytes
-rw-r--r--sd/res/buttons/glas-red.zipbin0 -> 24325 bytes
-rw-r--r--sd/res/buttons/round-gorilla.zipbin0 -> 19208 bytes
-rw-r--r--sd/res/buttons/round-white.zipbin0 -> 10533 bytes
-rw-r--r--sd/res/buttons/simple.zipbin0 -> 4046 bytes
-rw-r--r--sd/res/buttons/square-blue.zipbin0 -> 15123 bytes
-rw-r--r--sd/res/buttons/square-gray.zipbin0 -> 8919 bytes
-rw-r--r--sd/res/buttons/square-green.zipbin0 -> 15750 bytes
-rw-r--r--sd/res/buttons/square-red.zipbin0 -> 15319 bytes
-rw-r--r--sd/res/buttons/square-yellow.zipbin0 -> 15185 bytes
-rw-r--r--sd/res/webview/common.inc110
-rw-r--r--sd/res/webview/common.pl48
-rw-r--r--sd/res/webview/edit.asp9
-rw-r--r--sd/res/webview/edit.pl18
-rw-r--r--sd/res/webview/editpic.asp58
-rw-r--r--sd/res/webview/editpic.pl40
-rw-r--r--sd/res/webview/index.pl17
-rw-r--r--sd/res/webview/poll.asp36
-rw-r--r--sd/res/webview/poll.pl32
-rw-r--r--sd/res/webview/savepic.asp39
-rw-r--r--sd/res/webview/savepic.pl41
-rw-r--r--sd/res/webview/show.asp42
-rw-r--r--sd/res/webview/show.pl39
-rw-r--r--sd/res/webview/webview.asp28
-rw-r--r--sd/res/webview/webview.pl21
-rw-r--r--sd/sdi/SlideSorterController.sdi327
-rw-r--r--sd/sdi/ToolPanelViewShell.sdi307
-rwxr-xr-xsd/sdi/ViewShellBase.sdi357
-rw-r--r--sd/sdi/_docsh.sdi84
-rwxr-xr-xsd/sdi/_drvwsh.sdi2521
-rw-r--r--sd/sdi/app.sdi84
-rw-r--r--sd/sdi/docshell.sdi38
-rw-r--r--sd/sdi/drbezob.sdi64
-rw-r--r--sd/sdi/drgrfob.sdi121
-rwxr-xr-xsd/sdi/drtxtob.sdi212
-rw-r--r--sd/sdi/drviewsh.sdi237
-rw-r--r--sd/sdi/grdocsh.sdi38
-rw-r--r--sd/sdi/grviewsh.sdi90
-rwxr-xr-xsd/sdi/makefile.mk97
-rw-r--r--sd/sdi/mediaob.sdi8
-rwxr-xr-xsd/sdi/outlnvsh.sdi532
-rw-r--r--sd/sdi/sdgslots.sdi105
-rw-r--r--sd/sdi/sdnew.sdi77
-rwxr-xr-xsd/sdi/sdraw.sdi6958
-rw-r--r--sd/sdi/sdslots.hrc33
-rwxr-xr-xsd/sdi/sdslots.sdi108
-rw-r--r--sd/sdi/tables.sdi153
-rw-r--r--sd/source/core/CustomAnimationCloner.cxx350
-rwxr-xr-xsd/source/core/CustomAnimationEffect.cxx3834
-rw-r--r--sd/source/core/CustomAnimationPreset.cxx672
-rw-r--r--sd/source/core/EffectMigration.cxx1344
-rw-r--r--sd/source/core/PageListWatcher.cxx223
-rw-r--r--sd/source/core/PageListWatcher.hxx99
-rw-r--r--sd/source/core/TransitionPreset.cxx258
-rw-r--r--sd/source/core/anminfo.cxx152
-rw-r--r--sd/source/core/annotations/Annotation.cxx445
-rw-r--r--sd/source/core/annotations/AnnotationAccess.cxx59
-rw-r--r--sd/source/core/annotations/AnnotationEnumeration.cxx93
-rw-r--r--sd/source/core/annotations/makefile.mk49
-rwxr-xr-xsd/source/core/cusshow.cxx136
-rw-r--r--sd/source/core/drawdoc.cxx1077
-rwxr-xr-xsd/source/core/drawdoc2.cxx1624
-rw-r--r--sd/source/core/drawdoc3.cxx2055
-rwxr-xr-xsd/source/core/drawdoc4.cxx1508
-rw-r--r--sd/source/core/drawdoc_animations.cxx64
-rwxr-xr-xsd/source/core/glob.src426
-rw-r--r--sd/source/core/makefile.mk78
-rw-r--r--sd/source/core/pglink.cxx147
-rw-r--r--sd/source/core/sdattr.cxx154
-rw-r--r--sd/source/core/sdiocmpt.cxx136
-rw-r--r--sd/source/core/sdobjfac.cxx79
-rwxr-xr-xsd/source/core/sdpage.cxx3151
-rw-r--r--sd/source/core/sdpage2.cxx648
-rw-r--r--sd/source/core/sdpage_animations.cxx163
-rwxr-xr-xsd/source/core/shapelist.cxx213
-rw-r--r--sd/source/core/stlfamily.cxx603
-rwxr-xr-xsd/source/core/stlpool.cxx1441
-rw-r--r--sd/source/core/stlsheet.cxx1448
-rw-r--r--sd/source/core/text/makefile.mk48
-rwxr-xr-xsd/source/core/text/textapi.cxx296
-rw-r--r--sd/source/core/typemap.cxx136
-rw-r--r--sd/source/core/undo/makefile.mk50
-rw-r--r--sd/source/core/undo/undofactory.cxx65
-rw-r--r--sd/source/core/undo/undomanager.cxx109
-rw-r--r--sd/source/core/undo/undoobjects.cxx447
-rw-r--r--sd/source/core/undoanim.cxx296
-rw-r--r--sd/source/filter/cgm/makefile.mk43
-rw-r--r--sd/source/filter/cgm/sdcgmfilter.cxx159
-rw-r--r--sd/source/filter/eppt/eppt.cxx2502
-rwxr-xr-xsd/source/filter/eppt/eppt.hxx848
-rw-r--r--sd/source/filter/eppt/epptdef.hxx263
-rwxr-xr-xsd/source/filter/eppt/epptso.cxx5837
-rw-r--r--sd/source/filter/eppt/escherex.cxx294
-rw-r--r--sd/source/filter/eppt/escherex.hxx77
-rw-r--r--sd/source/filter/eppt/makefile.mk52
-rw-r--r--sd/source/filter/eppt/pptexanimations.cxx2191
-rw-r--r--sd/source/filter/eppt/pptexanimations.hxx137
-rw-r--r--sd/source/filter/eppt/pptexsoundcollection.cxx229
-rw-r--r--sd/source/filter/eppt/pptexsoundcollection.hxx83
-rw-r--r--sd/source/filter/grf/makefile.mk44
-rw-r--r--sd/source/filter/grf/sdgrffilter.cxx558
-rw-r--r--sd/source/filter/html/HtmlOptionsDialog.cxx287
-rw-r--r--sd/source/filter/html/buttonset.cxx309
-rw-r--r--sd/source/filter/html/buttonset.hxx53
-rwxr-xr-xsd/source/filter/html/htmlattr.cxx102
-rwxr-xr-xsd/source/filter/html/htmlattr.hxx51
-rwxr-xr-xsd/source/filter/html/htmlex.cxx3392
-rwxr-xr-xsd/source/filter/html/htmlex.hxx239
-rw-r--r--sd/source/filter/html/makefile.mk68
-rwxr-xr-xsd/source/filter/html/pubdlg.cxx1756
-rw-r--r--sd/source/filter/html/pubdlg.src817
-rw-r--r--sd/source/filter/html/sdhtmlfilter.cxx86
-rw-r--r--sd/source/filter/makefile.mk55
-rw-r--r--sd/source/filter/ppt/makefile.mk57
-rwxr-xr-xsd/source/filter/ppt/ppt97animations.cxx799
-rwxr-xr-xsd/source/filter/ppt/ppt97animations.hxx159
-rw-r--r--sd/source/filter/ppt/pptanimations.hxx559
-rwxr-xr-xsd/source/filter/ppt/pptatom.cpp119
-rwxr-xr-xsd/source/filter/ppt/pptatom.hxx141
-rwxr-xr-xsd/source/filter/ppt/pptin.cxx2762
-rw-r--r--sd/source/filter/ppt/pptin.hxx105
-rwxr-xr-xsd/source/filter/ppt/pptinanimations.cxx3890
-rwxr-xr-xsd/source/filter/ppt/pptinanimations.hxx131
-rwxr-xr-xsd/source/filter/ppt/propread.cxx733
-rw-r--r--sd/source/filter/ppt/propread.hxx191
-rw-r--r--sd/source/filter/sdfilter.cxx133
-rw-r--r--sd/source/filter/sdpptwrp.cxx199
-rw-r--r--sd/source/filter/xml/makefile.mk47
-rw-r--r--sd/source/filter/xml/sdtransform.cxx376
-rw-r--r--sd/source/filter/xml/sdxmlwrp.cxx1113
-rw-r--r--sd/source/helper/makefile.mk47
-rw-r--r--sd/source/helper/simplereferencecomponent.cxx140
-rw-r--r--sd/source/ui/accessibility/AccessibleDocumentViewBase.cxx842
-rw-r--r--sd/source/ui/accessibility/AccessibleDrawDocumentView.cxx742
-rw-r--r--sd/source/ui/accessibility/AccessibleOutlineEditSource.cxx225
-rw-r--r--sd/source/ui/accessibility/AccessibleOutlineView.cxx288
-rw-r--r--sd/source/ui/accessibility/AccessiblePageShape.cxx377
-rw-r--r--sd/source/ui/accessibility/AccessiblePresentationGraphicShape.cxx127
-rw-r--r--sd/source/ui/accessibility/AccessiblePresentationOLEShape.cxx148
-rw-r--r--sd/source/ui/accessibility/AccessiblePresentationShape.cxx180
-rw-r--r--sd/source/ui/accessibility/AccessibleScrollPanel.cxx151
-rwxr-xr-xsd/source/ui/accessibility/AccessibleSlideSorterObject.cxx580
-rwxr-xr-xsd/source/ui/accessibility/AccessibleSlideSorterView.cxx1081
-rwxr-xr-xsd/source/ui/accessibility/AccessibleTreeNode.cxx722
-rwxr-xr-xsd/source/ui/accessibility/AccessibleViewForwarder.cxx172
-rw-r--r--sd/source/ui/accessibility/SdShapeTypes.cxx147
-rw-r--r--sd/source/ui/accessibility/accessibility.hrc53
-rw-r--r--sd/source/ui/accessibility/accessibility.src115
-rwxr-xr-xsd/source/ui/accessibility/makefile.mk71
-rw-r--r--sd/source/ui/animations/CustomAnimation.hrc144
-rw-r--r--sd/source/ui/animations/CustomAnimation.src495
-rwxr-xr-xsd/source/ui/animations/CustomAnimationCreateDialog.cxx713
-rw-r--r--sd/source/ui/animations/CustomAnimationCreateDialog.hrc38
-rw-r--r--sd/source/ui/animations/CustomAnimationCreateDialog.hxx85
-rw-r--r--sd/source/ui/animations/CustomAnimationCreateDialog.src144
-rw-r--r--sd/source/ui/animations/CustomAnimationDialog.cxx2638
-rw-r--r--sd/source/ui/animations/CustomAnimationDialog.hrc89
-rw-r--r--sd/source/ui/animations/CustomAnimationDialog.hxx186
-rw-r--r--sd/source/ui/animations/CustomAnimationDialog.src653
-rw-r--r--sd/source/ui/animations/CustomAnimationList.cxx1018
-rw-r--r--sd/source/ui/animations/CustomAnimationList.hxx129
-rw-r--r--sd/source/ui/animations/CustomAnimationPane.cxx2489
-rw-r--r--sd/source/ui/animations/CustomAnimationPane.hrc60
-rw-r--r--sd/source/ui/animations/CustomAnimationPane.hxx190
-rw-r--r--sd/source/ui/animations/CustomAnimationPane.src225
-rw-r--r--sd/source/ui/animations/DialogListBox.cxx340
-rw-r--r--sd/source/ui/animations/STLPropertySet.cxx124
-rw-r--r--sd/source/ui/animations/STLPropertySet.hxx86
-rw-r--r--sd/source/ui/animations/SlideTransitionPane.cxx1321
-rw-r--r--sd/source/ui/animations/SlideTransitionPane.hrc68
-rw-r--r--sd/source/ui/animations/SlideTransitionPane.hxx151
-rw-r--r--sd/source/ui/animations/SlideTransitionPane.src220
-rwxr-xr-xsd/source/ui/animations/makefile.mk65
-rw-r--r--sd/source/ui/animations/motionpathtag.cxx1327
-rw-r--r--sd/source/ui/animations/motionpathtag.hxx133
-rwxr-xr-xsd/source/ui/annotations/annotationmanager.cxx1273
-rwxr-xr-xsd/source/ui/annotations/annotationmanagerimpl.hxx144
-rw-r--r--sd/source/ui/annotations/annotations.hrc65
-rw-r--r--sd/source/ui/annotations/annotations.src209
-rw-r--r--sd/source/ui/annotations/annotationtag.cxx790
-rw-r--r--sd/source/ui/annotations/annotationtag.hxx107
-rwxr-xr-xsd/source/ui/annotations/annotationwindow.cxx848
-rwxr-xr-xsd/source/ui/annotations/annotationwindow.hxx175
-rw-r--r--sd/source/ui/annotations/makefile.mk56
-rw-r--r--sd/source/ui/app/_app.hrc42
-rw-r--r--sd/source/ui/app/accel_tmpl.src117
-rw-r--r--sd/source/ui/app/accelids_tmpl.src54
-rw-r--r--sd/source/ui/app/app.img120
-rw-r--r--sd/source/ui/app/app.src35
-rwxr-xr-xsd/source/ui/app/makefile.mk113
-rw-r--r--sd/source/ui/app/menu_tmpl.src40
-rwxr-xr-xsd/source/ui/app/menuids2_tmpl.src987
-rw-r--r--sd/source/ui/app/menuids3_tmpl.src246
-rw-r--r--sd/source/ui/app/menuids4_tmpl.src79
-rw-r--r--sd/source/ui/app/menuids_tmpl.src1305
-rw-r--r--sd/source/ui/app/menuportal_tmpl.src387
-rwxr-xr-xsd/source/ui/app/optsitem.cxx1588
-rw-r--r--sd/source/ui/app/popup.src553
-rw-r--r--sd/source/ui/app/popup2_tmpl.src872
-rwxr-xr-xsd/source/ui/app/res_bmp.src495
-rw-r--r--sd/source/ui/app/sddll.cxx151
-rwxr-xr-xsd/source/ui/app/sddll1.cxx134
-rwxr-xr-xsd/source/ui/app/sddll2.cxx212
-rwxr-xr-xsd/source/ui/app/sdmod.cxx338
-rwxr-xr-xsd/source/ui/app/sdmod1.cxx1065
-rwxr-xr-xsd/source/ui/app/sdmod2.cxx835
-rw-r--r--sd/source/ui/app/sdpopup.cxx338
-rw-r--r--sd/source/ui/app/sdresid.cxx46
-rw-r--r--sd/source/ui/app/sdstring.src52
-rw-r--r--sd/source/ui/app/sdxfer.cxx881
-rwxr-xr-xsd/source/ui/app/strings.src1261
-rw-r--r--sd/source/ui/app/tbx_ww.src1124
-rw-r--r--sd/source/ui/app/tbxids_tmpl.src536
-rw-r--r--sd/source/ui/app/tbxww.cxx472
-rw-r--r--sd/source/ui/app/tmplctrl.cxx160
-rw-r--r--sd/source/ui/app/toolbox.src786
-rw-r--r--sd/source/ui/app/toolbox2_tmpl.src885
-rwxr-xr-xsd/source/ui/controller/makefile.mk54
-rw-r--r--sd/source/ui/controller/slidelayoutcontroller.cxx419
-rw-r--r--sd/source/ui/controller/slidelayoutcontroller.hxx54
-rw-r--r--sd/source/ui/dlg/AnimationChildWindow.cxx81
-rw-r--r--sd/source/ui/dlg/LayerDialog.src59
-rw-r--r--sd/source/ui/dlg/LayerDialogChildWindow.cxx84
-rwxr-xr-xsd/source/ui/dlg/LayerDialogContent.cxx106
-rw-r--r--sd/source/ui/dlg/LayerTabBar.cxx383
-rw-r--r--sd/source/ui/dlg/NavigatorChildWindow.cxx54
-rwxr-xr-xsd/source/ui/dlg/PaneChildWindows.cxx234
-rwxr-xr-xsd/source/ui/dlg/PaneDockingWindow.cxx81
-rwxr-xr-xsd/source/ui/dlg/PaneDockingWindow.src76
-rwxr-xr-xsd/source/ui/dlg/PaneShells.cxx139
-rwxr-xr-xsd/source/ui/dlg/SpellDialogChildWindow.cxx213
-rw-r--r--sd/source/ui/dlg/TemplateScanner.cxx493
-rwxr-xr-xsd/source/ui/dlg/animobjs.cxx1312
-rw-r--r--sd/source/ui/dlg/animobjs.src356
-rw-r--r--sd/source/ui/dlg/assclass.cxx220
-rw-r--r--sd/source/ui/dlg/brkdlg.cxx187
-rw-r--r--sd/source/ui/dlg/brkdlg.src96
-rw-r--r--sd/source/ui/dlg/celltempl.cxx120
-rw-r--r--sd/source/ui/dlg/celltempl.src78
-rw-r--r--sd/source/ui/dlg/copydlg.cxx357
-rw-r--r--sd/source/ui/dlg/copydlg.src308
-rwxr-xr-xsd/source/ui/dlg/custsdlg.cxx560
-rw-r--r--sd/source/ui/dlg/custsdlg.src190
-rw-r--r--sd/source/ui/dlg/diactrl.cxx179
-rw-r--r--sd/source/ui/dlg/dlg_char.src129
-rwxr-xr-xsd/source/ui/dlg/dlgass.cxx2041
-rw-r--r--sd/source/ui/dlg/dlgass.src570
-rwxr-xr-xsd/source/ui/dlg/dlgassim.cxx209
-rwxr-xr-xsd/source/ui/dlg/dlgassim.hxx70
-rw-r--r--sd/source/ui/dlg/dlgchar.cxx93
-rwxr-xr-xsd/source/ui/dlg/dlgctrls.cxx122
-rw-r--r--sd/source/ui/dlg/dlgfield.cxx366
-rw-r--r--sd/source/ui/dlg/dlgfield.src127
-rw-r--r--sd/source/ui/dlg/dlgolbul.cxx242
-rw-r--r--sd/source/ui/dlg/dlgolbul.src70
-rw-r--r--sd/source/ui/dlg/dlgpage.cxx118
-rw-r--r--sd/source/ui/dlg/dlgpage.src119
-rwxr-xr-xsd/source/ui/dlg/dlgsnap.cxx235
-rw-r--r--sd/source/ui/dlg/dlgsnap.src206
-rwxr-xr-xsd/source/ui/dlg/docprev.cxx305
-rwxr-xr-xsd/source/ui/dlg/filedlg.cxx368
-rw-r--r--sd/source/ui/dlg/gluectrl.cxx236
-rwxr-xr-xsd/source/ui/dlg/headerfooterdlg.cxx942
-rw-r--r--sd/source/ui/dlg/headerfooterdlg.src303
-rw-r--r--sd/source/ui/dlg/ins_paste.cxx66
-rw-r--r--sd/source/ui/dlg/ins_paste.src98
-rwxr-xr-xsd/source/ui/dlg/inspagob.cxx188
-rw-r--r--sd/source/ui/dlg/inspagob.src117
-rw-r--r--sd/source/ui/dlg/layeroptionsdlg.cxx85
-rw-r--r--sd/source/ui/dlg/layeroptionsdlg.src183
-rwxr-xr-xsd/source/ui/dlg/makefile.mk193
-rw-r--r--sd/source/ui/dlg/masterlayoutdlg.cxx179
-rw-r--r--sd/source/ui/dlg/masterlayoutdlg.src110
-rw-r--r--sd/source/ui/dlg/morphdlg.cxx166
-rw-r--r--sd/source/ui/dlg/morphdlg.src137
-rw-r--r--sd/source/ui/dlg/navigatr.cxx1000
-rw-r--r--sd/source/ui/dlg/navigatr.src161
-rw-r--r--sd/source/ui/dlg/paragr.cxx192
-rw-r--r--sd/source/ui/dlg/paragr.src173
-rw-r--r--sd/source/ui/dlg/present.cxx319
-rw-r--r--sd/source/ui/dlg/present.src277
-rw-r--r--sd/source/ui/dlg/prltempl.cxx357
-rw-r--r--sd/source/ui/dlg/prltempl.src195
-rwxr-xr-xsd/source/ui/dlg/prntopts.cxx311
-rw-r--r--sd/source/ui/dlg/prntopts.src232
-rw-r--r--sd/source/ui/dlg/sdabstdlg.cxx53
-rwxr-xr-xsd/source/ui/dlg/sddlgfact.cxx564
-rwxr-xr-xsd/source/ui/dlg/sddlgfact.hxx300
-rw-r--r--sd/source/ui/dlg/sdpreslt.cxx357
-rw-r--r--sd/source/ui/dlg/sdpreslt.src124
-rwxr-xr-xsd/source/ui/dlg/sdtreelb.cxx1460
-rw-r--r--sd/source/ui/dlg/sduiexp.cxx55
-rw-r--r--sd/source/ui/dlg/tabtempl.cxx223
-rw-r--r--sd/source/ui/dlg/tabtempl.src193
-rwxr-xr-xsd/source/ui/dlg/tpaction.cxx925
-rw-r--r--sd/source/ui/dlg/tpaction.src196
-rw-r--r--sd/source/ui/dlg/tpoption.cxx858
-rw-r--r--sd/source/ui/dlg/tpoption.src360
-rw-r--r--sd/source/ui/dlg/unchss.cxx178
-rw-r--r--sd/source/ui/dlg/vectdlg.cxx400
-rw-r--r--sd/source/ui/dlg/vectdlg.src245
-rw-r--r--sd/source/ui/docshell/docshel2.cxx509
-rw-r--r--sd/source/ui/docshell/docshel3.cxx259
-rwxr-xr-xsd/source/ui/docshell/docshel4.cxx1029
-rwxr-xr-xsd/source/ui/docshell/docshell.cxx608
-rw-r--r--sd/source/ui/docshell/grdocsh.cxx90
-rw-r--r--sd/source/ui/docshell/makefile.mk56
-rw-r--r--sd/source/ui/docshell/sdclient.cxx233
-rw-r--r--sd/source/ui/framework/configuration/ChangeRequestQueue.cxx38
-rw-r--r--sd/source/ui/framework/configuration/ChangeRequestQueue.hxx55
-rw-r--r--sd/source/ui/framework/configuration/ChangeRequestQueueProcessor.cxx236
-rw-r--r--sd/source/ui/framework/configuration/ChangeRequestQueueProcessor.hxx136
-rw-r--r--sd/source/ui/framework/configuration/Configuration.cxx420
-rwxr-xr-xsd/source/ui/framework/configuration/ConfigurationClassifier.cxx238
-rw-r--r--sd/source/ui/framework/configuration/ConfigurationClassifier.hxx183
-rwxr-xr-xsd/source/ui/framework/configuration/ConfigurationController.cxx726
-rwxr-xr-xsd/source/ui/framework/configuration/ConfigurationControllerBroadcaster.cxx231
-rw-r--r--sd/source/ui/framework/configuration/ConfigurationControllerBroadcaster.hxx151
-rwxr-xr-xsd/source/ui/framework/configuration/ConfigurationControllerResourceManager.cxx352
-rw-r--r--sd/source/ui/framework/configuration/ConfigurationControllerResourceManager.hxx145
-rwxr-xr-xsd/source/ui/framework/configuration/ConfigurationTracer.cxx83
-rwxr-xr-xsd/source/ui/framework/configuration/ConfigurationTracer.hxx57
-rwxr-xr-xsd/source/ui/framework/configuration/ConfigurationUpdater.cxx468
-rwxr-xr-xsd/source/ui/framework/configuration/ConfigurationUpdater.hxx215
-rw-r--r--sd/source/ui/framework/configuration/GenericConfigurationChangeRequest.cxx104
-rw-r--r--sd/source/ui/framework/configuration/GenericConfigurationChangeRequest.hxx123
-rw-r--r--sd/source/ui/framework/configuration/ResourceFactoryManager.cxx230
-rw-r--r--sd/source/ui/framework/configuration/ResourceFactoryManager.hxx128
-rwxr-xr-xsd/source/ui/framework/configuration/ResourceId.cxx626
-rw-r--r--sd/source/ui/framework/configuration/UpdateRequest.cxx86
-rw-r--r--sd/source/ui/framework/configuration/UpdateRequest.hxx93
-rw-r--r--sd/source/ui/framework/configuration/makefile.mk63
-rwxr-xr-xsd/source/ui/framework/factories/BasicPaneFactory.cxx568
-rwxr-xr-xsd/source/ui/framework/factories/BasicPaneFactory.hxx168
-rwxr-xr-xsd/source/ui/framework/factories/BasicToolBarFactory.cxx245
-rwxr-xr-xsd/source/ui/framework/factories/BasicToolBarFactory.hxx118
-rwxr-xr-xsd/source/ui/framework/factories/BasicViewFactory.cxx614
-rwxr-xr-xsd/source/ui/framework/factories/BasicViewFactory.hxx156
-rwxr-xr-xsd/source/ui/framework/factories/ChildWindowPane.cxx251
-rw-r--r--sd/source/ui/framework/factories/ChildWindowPane.hxx132
-rw-r--r--sd/source/ui/framework/factories/FrameWindowPane.cxx62
-rw-r--r--sd/source/ui/framework/factories/FrameWindowPane.hxx63
-rw-r--r--sd/source/ui/framework/factories/FullScreenPane.cxx294
-rw-r--r--sd/source/ui/framework/factories/FullScreenPane.hxx105
-rw-r--r--sd/source/ui/framework/factories/Pane.cxx267
-rwxr-xr-xsd/source/ui/framework/factories/PresentationFactory.cxx323
-rwxr-xr-xsd/source/ui/framework/factories/TaskPanelFactory.cxx323
-rwxr-xr-xsd/source/ui/framework/factories/TaskPanelFactory.hxx96
-rwxr-xr-xsd/source/ui/framework/factories/ViewShellWrapper.cxx269
-rw-r--r--sd/source/ui/framework/factories/makefile.mk60
-rw-r--r--sd/source/ui/framework/module/CenterViewFocusModule.cxx195
-rw-r--r--sd/source/ui/framework/module/CenterViewFocusModule.hxx112
-rw-r--r--sd/source/ui/framework/module/DrawModule.cxx56
-rwxr-xr-xsd/source/ui/framework/module/ImpressModule.cxx63
-rwxr-xr-xsd/source/ui/framework/module/ModuleController.cxx341
-rwxr-xr-xsd/source/ui/framework/module/PresentationModule.cxx47
-rwxr-xr-xsd/source/ui/framework/module/ReadOnlyModeObserver.cxx220
-rwxr-xr-xsd/source/ui/framework/module/ReadOnlyModeObserver.hxx139
-rwxr-xr-xsd/source/ui/framework/module/ResourceManager.cxx294
-rwxr-xr-xsd/source/ui/framework/module/ResourceManager.hxx133
-rw-r--r--sd/source/ui/framework/module/ShellStackGuard.cxx192
-rw-r--r--sd/source/ui/framework/module/ShellStackGuard.hxx116
-rw-r--r--sd/source/ui/framework/module/SlideSorterModule.cxx155
-rw-r--r--sd/source/ui/framework/module/SlideSorterModule.hxx69
-rw-r--r--sd/source/ui/framework/module/ToolBarModule.cxx234
-rw-r--r--sd/source/ui/framework/module/ToolBarModule.hxx102
-rw-r--r--sd/source/ui/framework/module/ToolPanelModule.cxx165
-rw-r--r--sd/source/ui/framework/module/ToolPanelModule.hxx49
-rw-r--r--sd/source/ui/framework/module/ViewTabBarModule.cxx220
-rw-r--r--sd/source/ui/framework/module/ViewTabBarModule.hxx107
-rwxr-xr-xsd/source/ui/framework/module/makefile.mk62
-rwxr-xr-xsd/source/ui/framework/tools/FrameworkHelper.cxx1219
-rw-r--r--sd/source/ui/framework/tools/makefile.mk51
-rw-r--r--sd/source/ui/func/bulmaper.cxx191
-rw-r--r--sd/source/ui/func/fuarea.cxx117
-rw-r--r--sd/source/ui/func/fubullet.cxx360
-rw-r--r--sd/source/ui/func/fuchar.cxx147
-rw-r--r--sd/source/ui/func/fucon3d.cxx531
-rw-r--r--sd/source/ui/func/fuconarc.cxx339
-rw-r--r--sd/source/ui/func/fuconbez.cxx538
-rw-r--r--sd/source/ui/func/fuconcs.cxx344
-rw-r--r--sd/source/ui/func/fuconnct.cxx91
-rw-r--r--sd/source/ui/func/fuconrec.cxx1024
-rwxr-xr-xsd/source/ui/func/fuconstr.cxx420
-rw-r--r--sd/source/ui/func/fuconuno.cxx221
-rw-r--r--sd/source/ui/func/fucopy.cxx315
-rw-r--r--sd/source/ui/func/fucushow.cxx99
-rwxr-xr-xsd/source/ui/func/fudraw.cxx1142
-rw-r--r--sd/source/ui/func/fudspord.cxx194
-rw-r--r--sd/source/ui/func/fuediglu.cxx464
-rw-r--r--sd/source/ui/func/fuexpand.cxx275
-rw-r--r--sd/source/ui/func/fuformatpaintbrush.cxx295
-rw-r--r--sd/source/ui/func/fuhhconv.cxx290
-rwxr-xr-xsd/source/ui/func/fuinsert.cxx780
-rw-r--r--sd/source/ui/func/fuinsfil.cxx824
-rw-r--r--sd/source/ui/func/fuline.cxx130
-rw-r--r--sd/source/ui/func/fulinend.cxx183
-rw-r--r--sd/source/ui/func/fulink.cxx92
-rw-r--r--sd/source/ui/func/fumeasur.cxx92
-rw-r--r--sd/source/ui/func/fumorph.cxx513
-rw-r--r--sd/source/ui/func/fuoaprms.cxx839
-rw-r--r--sd/source/ui/func/fuolbull.cxx146
-rw-r--r--sd/source/ui/func/fuoltext.cxx361
-rwxr-xr-xsd/source/ui/func/fuoutl.cxx94
-rwxr-xr-xsd/source/ui/func/fupage.cxx632
-rw-r--r--sd/source/ui/func/fuparagr.cxx187
-rwxr-xr-xsd/source/ui/func/fupoor.cxx1277
-rw-r--r--sd/source/ui/func/fuprlout.cxx287
-rw-r--r--sd/source/ui/func/fuprobjs.cxx179
-rw-r--r--sd/source/ui/func/fuscale.cxx216
-rwxr-xr-xsd/source/ui/func/fusearch.cxx178
-rw-r--r--sd/source/ui/func/fusel.cxx1498
-rw-r--r--sd/source/ui/func/fusldlg.cxx265
-rwxr-xr-xsd/source/ui/func/fusnapln.cxx219
-rw-r--r--sd/source/ui/func/fusumry.cxx243
-rw-r--r--sd/source/ui/func/futempl.cxx733
-rwxr-xr-xsd/source/ui/func/futext.cxx1550
-rw-r--r--sd/source/ui/func/futhes.cxx170
-rwxr-xr-xsd/source/ui/func/futransf.cxx139
-rw-r--r--sd/source/ui/func/futxtatt.cxx105
-rw-r--r--sd/source/ui/func/fuvect.cxx116
-rw-r--r--sd/source/ui/func/fuzoom.cxx262
-rwxr-xr-xsd/source/ui/func/makefile.mk185
-rw-r--r--sd/source/ui/func/sdundo.cxx36
-rwxr-xr-xsd/source/ui/func/sdundogr.cxx118
-rwxr-xr-xsd/source/ui/func/smarttag.cxx479
-rw-r--r--sd/source/ui/func/undoback.cxx98
-rw-r--r--sd/source/ui/func/undoheaderfooter.cxx65
-rw-r--r--sd/source/ui/func/undolayer.cxx90
-rw-r--r--sd/source/ui/func/undopage.cxx140
-rw-r--r--sd/source/ui/func/unmovss.cxx108
-rwxr-xr-xsd/source/ui/func/unoaprms.cxx141
-rw-r--r--sd/source/ui/func/unprlout.cxx119
-rw-r--r--sd/source/ui/inc/3dchld.hxx50
-rw-r--r--sd/source/ui/inc/AccessibleDocumentViewBase.hxx372
-rw-r--r--sd/source/ui/inc/AccessibleDrawDocumentView.hxx173
-rw-r--r--sd/source/ui/inc/AccessibleOutlineEditSource.hxx104
-rw-r--r--sd/source/ui/inc/AccessibleOutlineView.hxx161
-rw-r--r--sd/source/ui/inc/AccessiblePageShape.hxx178
-rw-r--r--sd/source/ui/inc/AccessiblePresentationGraphicShape.hxx71
-rw-r--r--sd/source/ui/inc/AccessiblePresentationOLEShape.hxx71
-rw-r--r--sd/source/ui/inc/AccessiblePresentationShape.hxx82
-rw-r--r--sd/source/ui/inc/AccessibleScrollPanel.hxx80
-rw-r--r--sd/source/ui/inc/AccessibleSlideSorterObject.hxx249
-rw-r--r--sd/source/ui/inc/AccessibleSlideSorterView.hxx326
-rw-r--r--sd/source/ui/inc/AccessibleSlideView.hxx280
-rw-r--r--sd/source/ui/inc/AccessibleTreeNode.hxx318
-rwxr-xr-xsd/source/ui/inc/AccessibleViewForwarder.hxx136
-rw-r--r--sd/source/ui/inc/AnimationChildWindow.hxx55
-rw-r--r--sd/source/ui/inc/BezierObjectBar.hxx60
-rw-r--r--sd/source/ui/inc/BreakDlg.hxx96
-rw-r--r--sd/source/ui/inc/Client.hxx75
-rw-r--r--sd/source/ui/inc/ClientView.hxx65
-rw-r--r--sd/source/ui/inc/CustomAnimation.hxx43
-rw-r--r--sd/source/ui/inc/DialogListBox.hxx75
-rw-r--r--sd/source/ui/inc/DocumentRenderer.hxx82
-rwxr-xr-xsd/source/ui/inc/DrawController.hxx339
-rwxr-xr-xsd/source/ui/inc/DrawDocShell.hxx241
-rwxr-xr-xsd/source/ui/inc/DrawSubController.hxx57
-rwxr-xr-xsd/source/ui/inc/DrawViewShell.hxx498
-rw-r--r--sd/source/ui/inc/EventMultiplexer.hxx222
-rw-r--r--sd/source/ui/inc/FormShellManager.hxx143
-rw-r--r--sd/source/ui/inc/FrameView.hxx237
-rw-r--r--sd/source/ui/inc/GraphicDocShell.hxx79
-rw-r--r--sd/source/ui/inc/GraphicObjectBar.hxx66
-rwxr-xr-xsd/source/ui/inc/GraphicViewShell.hxx85
-rw-r--r--sd/source/ui/inc/GraphicViewShellBase.hxx62
-rw-r--r--sd/source/ui/inc/ImpressViewShellBase.hxx62
-rw-r--r--sd/source/ui/inc/LayerDialog.hrc29
-rw-r--r--sd/source/ui/inc/LayerDialogChildWindow.hxx54
-rwxr-xr-xsd/source/ui/inc/LayerDialogContent.hxx64
-rw-r--r--sd/source/ui/inc/LayerTabBar.hxx93
-rwxr-xr-xsd/source/ui/inc/MasterPageObserver.hxx134
-rw-r--r--sd/source/ui/inc/MediaObjectBar.hxx61
-rw-r--r--sd/source/ui/inc/MutexOwner.hxx47
-rw-r--r--sd/source/ui/inc/NavigatorChildWindow.hxx59
-rw-r--r--sd/source/ui/inc/NotesChildWindow.hrc30
-rw-r--r--sd/source/ui/inc/NotesChildWindow.hxx55
-rw-r--r--sd/source/ui/inc/OutlineBulletDlg.hxx71
-rwxr-xr-xsd/source/ui/inc/OutlineView.hxx264
-rwxr-xr-xsd/source/ui/inc/OutlineViewShell.hxx183
-rw-r--r--sd/source/ui/inc/OutlineViewShellBase.hxx55
-rw-r--r--sd/source/ui/inc/OutlinerIteratorImpl.hxx272
-rwxr-xr-xsd/source/ui/inc/PaneChildWindows.hxx100
-rwxr-xr-xsd/source/ui/inc/PaneDockingWindow.hrc30
-rwxr-xr-xsd/source/ui/inc/PaneDockingWindow.hxx72
-rwxr-xr-xsd/source/ui/inc/PaneShells.hxx90
-rw-r--r--sd/source/ui/inc/PresentationViewShell.hxx75
-rw-r--r--sd/source/ui/inc/PresentationViewShellBase.hxx58
-rw-r--r--sd/source/ui/inc/PreviewRenderer.hxx168
-rw-r--r--sd/source/ui/inc/Ruler.hxx82
-rwxr-xr-xsd/source/ui/inc/SdUnoDrawView.hxx153
-rwxr-xr-xsd/source/ui/inc/SdUnoOutlineView.hxx127
-rwxr-xr-xsd/source/ui/inc/SdUnoSlideView.hxx142
-rw-r--r--sd/source/ui/inc/ShellFactory.hxx73
-rw-r--r--sd/source/ui/inc/SlideSorter.hxx270
-rw-r--r--sd/source/ui/inc/SlideSorterChildWindow.hrc30
-rw-r--r--sd/source/ui/inc/SlideSorterChildWindow.hxx58
-rwxr-xr-xsd/source/ui/inc/SlideSorterViewShell.hxx218
-rw-r--r--sd/source/ui/inc/SlideSorterViewShellBase.hxx55
-rwxr-xr-xsd/source/ui/inc/SlideView.hxx144
-rw-r--r--sd/source/ui/inc/SlideViewShell.hxx179
-rwxr-xr-xsd/source/ui/inc/SpellDialogChildWindow.hxx95
-rw-r--r--sd/source/ui/inc/TabControl.hxx122
-rw-r--r--sd/source/ui/inc/TemplateScanner.hxx220
-rw-r--r--sd/source/ui/inc/TextLogger.hxx62
-rw-r--r--sd/source/ui/inc/TextObjectBar.hxx69
-rwxr-xr-xsd/source/ui/inc/ToolBarManager.hxx283
-rw-r--r--sd/source/ui/inc/UpdateLockManager.hxx92
-rwxr-xr-xsd/source/ui/inc/View.hxx261
-rw-r--r--sd/source/ui/inc/ViewClipboard.hxx93
-rwxr-xr-xsd/source/ui/inc/ViewShell.hxx601
-rwxr-xr-xsd/source/ui/inc/ViewShellBase.hxx287
-rw-r--r--sd/source/ui/inc/ViewShellHint.hxx68
-rwxr-xr-xsd/source/ui/inc/ViewShellImplementation.hxx166
-rwxr-xr-xsd/source/ui/inc/ViewShellManager.hxx212
-rw-r--r--sd/source/ui/inc/ViewTabBar.hxx210
-rw-r--r--sd/source/ui/inc/ViewTabControl.hxx120
-rwxr-xr-xsd/source/ui/inc/Window.hxx216
-rw-r--r--sd/source/ui/inc/WindowUpdater.hxx152
-rw-r--r--sd/source/ui/inc/animobjs.hrc49
-rwxr-xr-xsd/source/ui/inc/animobjs.hxx202
-rwxr-xr-xsd/source/ui/inc/annotationmanager.hxx59
-rw-r--r--sd/source/ui/inc/assclass.hxx86
-rwxr-xr-xsd/source/ui/inc/bmcache.hxx52
-rw-r--r--sd/source/ui/inc/brkdlg.hrc34
-rw-r--r--sd/source/ui/inc/bulmaper.hxx49
-rw-r--r--sd/source/ui/inc/celltempl.hrc29
-rw-r--r--sd/source/ui/inc/celltempl.hxx59
-rw-r--r--sd/source/ui/inc/cfgids.hxx75
-rw-r--r--sd/source/ui/inc/copydlg.hrc51
-rw-r--r--sd/source/ui/inc/copydlg.hxx105
-rw-r--r--sd/source/ui/inc/custsdlg.hrc47
-rw-r--r--sd/source/ui/inc/custsdlg.hxx116
-rw-r--r--sd/source/ui/inc/diactrl.hxx80
-rw-r--r--sd/source/ui/inc/dialogs.hrc36
-rw-r--r--sd/source/ui/inc/dlg_char.hrc28
-rw-r--r--sd/source/ui/inc/dlg_char.hxx61
-rw-r--r--sd/source/ui/inc/dlgass.hrc88
-rwxr-xr-xsd/source/ui/inc/dlgass.hxx77
-rwxr-xr-xsd/source/ui/inc/dlgctrls.hxx62
-rw-r--r--sd/source/ui/inc/dlgfield.hrc37
-rw-r--r--sd/source/ui/inc/dlgfield.hxx89
-rw-r--r--sd/source/ui/inc/dlgolbul.hrc27
-rw-r--r--sd/source/ui/inc/dlgpage.hrc27
-rw-r--r--sd/source/ui/inc/dlgpage.hxx68
-rw-r--r--sd/source/ui/inc/dlgsnap.hrc44
-rw-r--r--sd/source/ui/inc/dlgsnap.hxx101
-rwxr-xr-xsd/source/ui/inc/docprev.hxx88
-rw-r--r--sd/source/ui/inc/drawview.hxx93
-rw-r--r--sd/source/ui/inc/enumdlg.hrc42
-rwxr-xr-xsd/source/ui/inc/filedlg.hxx72
-rw-r--r--sd/source/ui/inc/fontwork.hrc45
-rw-r--r--sd/source/ui/inc/framework/Configuration.hxx207
-rw-r--r--sd/source/ui/inc/framework/ConfigurationController.hxx231
-rw-r--r--sd/source/ui/inc/framework/DrawModule.hxx48
-rwxr-xr-xsd/source/ui/inc/framework/FrameworkHelper.hxx421
-rw-r--r--sd/source/ui/inc/framework/ImpressModule.hxx47
-rw-r--r--sd/source/ui/inc/framework/ModuleController.hxx148
-rw-r--r--sd/source/ui/inc/framework/Pane.hxx175
-rwxr-xr-xsd/source/ui/inc/framework/PresentationFactory.hxx116
-rw-r--r--sd/source/ui/inc/framework/PresentationModule.hxx47
-rwxr-xr-xsd/source/ui/inc/framework/ResourceId.hxx244
-rwxr-xr-xsd/source/ui/inc/framework/ViewShellWrapper.hxx148
-rw-r--r--sd/source/ui/inc/fuarea.hxx59
-rw-r--r--sd/source/ui/inc/fubullet.hxx65
-rw-r--r--sd/source/ui/inc/fuchar.hxx60
-rw-r--r--sd/source/ui/inc/fucon3d.hxx77
-rw-r--r--sd/source/ui/inc/fuconarc.hxx70
-rw-r--r--sd/source/ui/inc/fuconbez.hxx85
-rw-r--r--sd/source/ui/inc/fuconcs.hxx87
-rw-r--r--sd/source/ui/inc/fuconnct.hxx57
-rw-r--r--sd/source/ui/inc/fuconrec.hxx84
-rwxr-xr-xsd/source/ui/inc/fuconstr.hxx87
-rw-r--r--sd/source/ui/inc/fuconuno.hxx81
-rw-r--r--sd/source/ui/inc/fucopy.hxx58
-rw-r--r--sd/source/ui/inc/fucushow.hxx55
-rwxr-xr-xsd/source/ui/inc/fudraw.hxx102
-rw-r--r--sd/source/ui/inc/fudspord.hxx82
-rw-r--r--sd/source/ui/inc/fuediglu.hxx74
-rw-r--r--sd/source/ui/inc/fuexpand.hxx56
-rw-r--r--sd/source/ui/inc/fuformatpaintbrush.hxx76
-rw-r--r--sd/source/ui/inc/fugrid.hxx59
-rw-r--r--sd/source/ui/inc/fuhhconv.hxx75
-rw-r--r--sd/source/ui/inc/fuinsert.hxx119
-rw-r--r--sd/source/ui/inc/fuinsfil.hxx70
-rw-r--r--sd/source/ui/inc/fuline.hxx60
-rw-r--r--sd/source/ui/inc/fulinend.hxx60
-rw-r--r--sd/source/ui/inc/fulink.hxx58
-rw-r--r--sd/source/ui/inc/fumeasur.hxx57
-rw-r--r--sd/source/ui/inc/fumorph.hxx80
-rw-r--r--sd/source/ui/inc/fuoaprms.hxx60
-rw-r--r--sd/source/ui/inc/fuolbull.hxx68
-rw-r--r--sd/source/ui/inc/fuoltext.hxx85
-rwxr-xr-xsd/source/ui/inc/fuoutl.hxx76
-rwxr-xr-xsd/source/ui/inc/fupage.hxx81
-rw-r--r--sd/source/ui/inc/fuparagr.hxx59
-rwxr-xr-xsd/source/ui/inc/fupoor.hxx212
-rw-r--r--sd/source/ui/inc/fuprlout.hxx64
-rw-r--r--sd/source/ui/inc/fuprobjs.hxx64
-rw-r--r--sd/source/ui/inc/fuscale.hxx56
-rw-r--r--sd/source/ui/inc/fusearch.hxx72
-rw-r--r--sd/source/ui/inc/fusel.hxx112
-rw-r--r--sd/source/ui/inc/fusldlg.hxx55
-rw-r--r--sd/source/ui/inc/fuslhide.hxx63
-rw-r--r--sd/source/ui/inc/fuslid.hxx77
-rw-r--r--sd/source/ui/inc/fuslsel.hxx120
-rw-r--r--sd/source/ui/inc/fusnapln.hxx58
-rw-r--r--sd/source/ui/inc/fusumry.hxx56
-rw-r--r--sd/source/ui/inc/futempl.hxx59
-rw-r--r--sd/source/ui/inc/futext.hxx116
-rw-r--r--sd/source/ui/inc/futhes.hxx57
-rwxr-xr-xsd/source/ui/inc/futransf.hxx59
-rw-r--r--sd/source/ui/inc/futxtatt.hxx56
-rw-r--r--sd/source/ui/inc/fuvect.hxx57
-rw-r--r--sd/source/ui/inc/fuzoom.hxx79
-rw-r--r--sd/source/ui/inc/gluectrl.hxx76
-rw-r--r--sd/source/ui/inc/headerfooterdlg.hrc55
-rwxr-xr-xsd/source/ui/inc/headerfooterdlg.hxx85
-rw-r--r--sd/source/ui/inc/ins_paste.hrc36
-rw-r--r--sd/source/ui/inc/ins_paste.hxx59
-rw-r--r--sd/source/ui/inc/inspagob.hrc33
-rw-r--r--sd/source/ui/inc/inspagob.hxx71
-rw-r--r--sd/source/ui/inc/layeroptionsdlg.hrc44
-rw-r--r--sd/source/ui/inc/layeroptionsdlg.hxx67
-rw-r--r--sd/source/ui/inc/masterlayoutdlg.hrc36
-rw-r--r--sd/source/ui/inc/masterlayoutdlg.hxx78
-rw-r--r--sd/source/ui/inc/morphdlg.hrc35
-rw-r--r--sd/source/ui/inc/morphdlg.hxx81
-rw-r--r--sd/source/ui/inc/navigatr.hrc43
-rw-r--r--sd/source/ui/inc/navigatr.hxx207
-rw-r--r--sd/source/ui/inc/optdlg.hrc34
-rw-r--r--sd/source/ui/inc/optdlg.hxx57
-rwxr-xr-xsd/source/ui/inc/optsitem.hxx679
-rw-r--r--sd/source/ui/inc/packgdlg.hrc46
-rw-r--r--sd/source/ui/inc/paragr.hrc33
-rw-r--r--sd/source/ui/inc/paragr.hxx53
-rw-r--r--sd/source/ui/inc/pgjump.hxx43
-rw-r--r--sd/source/ui/inc/present.hrc67
-rw-r--r--sd/source/ui/inc/present.hxx114
-rw-r--r--sd/source/ui/inc/preview.hrc28
-rw-r--r--sd/source/ui/inc/prltempl.hrc31
-rw-r--r--sd/source/ui/inc/prltempl.hxx101
-rw-r--r--sd/source/ui/inc/prntopts.hrc56
-rwxr-xr-xsd/source/ui/inc/prntopts.hxx109
-rw-r--r--sd/source/ui/inc/pubdlg.hrc153
-rw-r--r--sd/source/ui/inc/pubdlg.hxx235
-rwxr-xr-xsd/source/ui/inc/res_bmp.hrc341
-rw-r--r--sd/source/ui/inc/sdpopup.hxx61
-rw-r--r--sd/source/ui/inc/sdpreslt.hrc36
-rw-r--r--sd/source/ui/inc/sdpreslt.hxx89
-rw-r--r--sd/source/ui/inc/sdstring.hrc35
-rwxr-xr-xsd/source/ui/inc/sdtreelb.hxx271
-rwxr-xr-xsd/source/ui/inc/sdundogr.hxx55
-rw-r--r--sd/source/ui/inc/sdxfer.hxx138
-rwxr-xr-xsd/source/ui/inc/slideshow.hxx232
-rwxr-xr-xsd/source/ui/inc/smarttag.hxx188
-rw-r--r--sd/source/ui/inc/sprite.hxx88
-rwxr-xr-xsd/source/ui/inc/strings.hrc512
-rw-r--r--sd/source/ui/inc/tabtempl.hrc30
-rw-r--r--sd/source/ui/inc/tabtempl.hxx86
-rwxr-xr-xsd/source/ui/inc/taskpane/ControlContainer.hxx211
-rwxr-xr-xsd/source/ui/inc/taskpane/ILayoutableWindow.hxx102
-rw-r--r--sd/source/ui/inc/taskpane/PanelId.hxx62
-rwxr-xr-xsd/source/ui/inc/taskpane/ScrollPanel.hxx189
-rwxr-xr-xsd/source/ui/inc/taskpane/SlideSorterCacheDisplay.hxx201
-rwxr-xr-xsd/source/ui/inc/taskpane/SubToolPanel.hxx135
-rwxr-xr-xsd/source/ui/inc/taskpane/TaskPaneControlFactory.hxx98
-rwxr-xr-xsd/source/ui/inc/taskpane/TaskPaneTreeNode.hxx214
-rwxr-xr-xsd/source/ui/inc/taskpane/TitleBar.hxx169
-rwxr-xr-xsd/source/ui/inc/taskpane/TitledControl.hxx181
-rw-r--r--sd/source/ui/inc/taskpane/ToolPanelViewShell.hxx175
-rw-r--r--sd/source/ui/inc/tbx_ww.hrc29
-rw-r--r--sd/source/ui/inc/tbx_ww.hxx89
-rw-r--r--sd/source/ui/inc/tmplctrl.hxx53
-rw-r--r--sd/source/ui/inc/tools/AsynchronousCall.hxx92
-rw-r--r--sd/source/ui/inc/tools/AsynchronousTask.hxx55
-rw-r--r--sd/source/ui/inc/tools/ConfigurationAccess.hxx152
-rw-r--r--sd/source/ui/inc/tools/IconCache.hxx79
-rw-r--r--sd/source/ui/inc/tools/IdleDetection.hxx91
-rwxr-xr-xsd/source/ui/inc/tools/PropertySet.hxx150
-rwxr-xr-xsd/source/ui/inc/tools/SdGlobalResourceContainer.hxx108
-rwxr-xr-xsd/source/ui/inc/tools/SlotStateListener.hxx160
-rw-r--r--sd/source/ui/inc/tools/TimerBasedTaskExecution.hxx99
-rw-r--r--sd/source/ui/inc/tpaction.hrc51
-rwxr-xr-xsd/source/ui/inc/tpaction.hxx141
-rw-r--r--sd/source/ui/inc/tpoption.hrc95
-rw-r--r--sd/source/ui/inc/tpoption.hxx201
-rw-r--r--sd/source/ui/inc/unchss.hxx59
-rw-r--r--sd/source/ui/inc/undoback.hxx66
-rw-r--r--sd/source/ui/inc/undoheaderfooter.hxx57
-rw-r--r--sd/source/ui/inc/undolayer.hxx67
-rw-r--r--sd/source/ui/inc/undopage.hxx180
-rw-r--r--sd/source/ui/inc/unmodpg.hxx91
-rw-r--r--sd/source/ui/inc/unmovss.hxx54
-rwxr-xr-xsd/source/ui/inc/unoaprms.hxx149
-rw-r--r--sd/source/ui/inc/unokywds.hxx215
-rw-r--r--sd/source/ui/inc/unomodel.hxx354
-rw-r--r--sd/source/ui/inc/unoprnms.hxx100
-rwxr-xr-xsd/source/ui/inc/unosrch.hxx149
-rw-r--r--sd/source/ui/inc/unprlout.hxx65
-rw-r--r--sd/source/ui/inc/unslsel.hxx50
-rw-r--r--sd/source/ui/inc/vectdlg.hrc53
-rw-r--r--sd/source/ui/inc/vectdlg.hxx107
-rwxr-xr-xsd/source/ui/inc/view/viewoverlaymanager.hxx71
-rwxr-xr-xsd/source/ui/inc/zoomlist.hxx61
-rwxr-xr-xsd/source/ui/notes/EditWindow.cxx883
-rwxr-xr-xsd/source/ui/notes/EditWindow.hxx128
-rwxr-xr-xsd/source/ui/notes/NotesChildWindow.cxx63
-rwxr-xr-xsd/source/ui/notes/NotesChildWindow.src45
-rwxr-xr-xsd/source/ui/notes/NotesDockingWindow.cxx114
-rwxr-xr-xsd/source/ui/notes/NotesDockingWindow.hxx56
-rwxr-xr-xsd/source/ui/notes/TextLogger.cxx129
-rwxr-xr-xsd/source/ui/notes/makefile.mk60
-rw-r--r--sd/source/ui/presenter/CanvasUpdateRequester.cxx127
-rw-r--r--sd/source/ui/presenter/CanvasUpdateRequester.hxx80
-rwxr-xr-xsd/source/ui/presenter/PresenterCanvas.cxx1228
-rw-r--r--sd/source/ui/presenter/PresenterCanvas.hxx444
-rw-r--r--sd/source/ui/presenter/PresenterCanvasFactory.cxx307
-rw-r--r--sd/source/ui/presenter/PresenterHelper.cxx343
-rw-r--r--sd/source/ui/presenter/PresenterHelper.hxx120
-rw-r--r--sd/source/ui/presenter/PresenterPreviewCache.cxx515
-rw-r--r--sd/source/ui/presenter/PresenterPreviewCache.hxx122
-rwxr-xr-xsd/source/ui/presenter/PresenterTextView.cxx645
-rw-r--r--sd/source/ui/presenter/PresenterTextView.hxx89
-rw-r--r--sd/source/ui/presenter/SlideRenderer.cxx272
-rw-r--r--sd/source/ui/presenter/SlideRenderer.hxx108
-rw-r--r--sd/source/ui/presenter/makefile.mk56
-rwxr-xr-xsd/source/ui/slideshow/PaneHider.cxx117
-rw-r--r--sd/source/ui/slideshow/PaneHider.hxx73
-rw-r--r--sd/source/ui/slideshow/SlideShowRestarter.cxx184
-rw-r--r--sd/source/ui/slideshow/SlideShowRestarter.hxx91
-rw-r--r--sd/source/ui/slideshow/makefile.mk66
-rw-r--r--sd/source/ui/slideshow/showwin.cxx745
-rw-r--r--sd/source/ui/slideshow/showwindow.hxx144
-rwxr-xr-xsd/source/ui/slideshow/slideshow.cxx1261
-rw-r--r--sd/source/ui/slideshow/slideshow.hrc61
-rw-r--r--sd/source/ui/slideshow/slideshow.src221
-rwxr-xr-xsd/source/ui/slideshow/slideshowimpl.cxx4045
-rwxr-xr-xsd/source/ui/slideshow/slideshowimpl.hxx434
-rw-r--r--sd/source/ui/slideshow/slideshowviewimpl.cxx685
-rw-r--r--sd/source/ui/slideshow/slideshowviewimpl.hxx286
-rwxr-xr-xsd/source/ui/slidesorter/cache/SlsBitmapCache.cxx631
-rwxr-xr-xsd/source/ui/slidesorter/cache/SlsBitmapCache.hxx211
-rw-r--r--sd/source/ui/slidesorter/cache/SlsBitmapCompressor.cxx273
-rw-r--r--sd/source/ui/slidesorter/cache/SlsBitmapCompressor.hxx160
-rw-r--r--sd/source/ui/slidesorter/cache/SlsBitmapFactory.cxx81
-rw-r--r--sd/source/ui/slidesorter/cache/SlsBitmapFactory.hxx65
-rw-r--r--sd/source/ui/slidesorter/cache/SlsCacheCompactor.cxx236
-rw-r--r--sd/source/ui/slidesorter/cache/SlsCacheCompactor.hxx100
-rw-r--r--sd/source/ui/slidesorter/cache/SlsCacheConfiguration.cxx181
-rw-r--r--sd/source/ui/slidesorter/cache/SlsCacheConfiguration.hxx74
-rwxr-xr-xsd/source/ui/slidesorter/cache/SlsGenericPageCache.cxx310
-rwxr-xr-xsd/source/ui/slidesorter/cache/SlsGenericPageCache.hxx146
-rwxr-xr-xsd/source/ui/slidesorter/cache/SlsPageCache.cxx124
-rw-r--r--sd/source/ui/slidesorter/cache/SlsPageCacheManager.cxx446
-rwxr-xr-xsd/source/ui/slidesorter/cache/SlsQueueProcessor.cxx254
-rw-r--r--sd/source/ui/slidesorter/cache/SlsQueueProcessor.hxx138
-rw-r--r--sd/source/ui/slidesorter/cache/SlsQueueProcessorThread.hxx365
-rw-r--r--sd/source/ui/slidesorter/cache/SlsRequestFactory.cxx78
-rw-r--r--sd/source/ui/slidesorter/cache/SlsRequestFactory.hxx48
-rw-r--r--sd/source/ui/slidesorter/cache/SlsRequestPriorityClass.hxx55
-rw-r--r--sd/source/ui/slidesorter/cache/SlsRequestQueue.cxx291
-rw-r--r--sd/source/ui/slidesorter/cache/SlsRequestQueue.hxx133
-rwxr-xr-xsd/source/ui/slidesorter/cache/makefile.mk64
-rwxr-xr-xsd/source/ui/slidesorter/controller/SlideSorterController.cxx1000
-rw-r--r--sd/source/ui/slidesorter/controller/SlsAnimator.cxx232
-rw-r--r--sd/source/ui/slidesorter/controller/SlsClipboard.cxx778
-rw-r--r--sd/source/ui/slidesorter/controller/SlsCommand.hxx45
-rwxr-xr-xsd/source/ui/slidesorter/controller/SlsCurrentSlideManager.cxx256
-rwxr-xr-xsd/source/ui/slidesorter/controller/SlsFocusManager.cxx362
-rw-r--r--sd/source/ui/slidesorter/controller/SlsHideSlideFunction.cxx169
-rw-r--r--sd/source/ui/slidesorter/controller/SlsHideSlideFunction.hxx73
-rwxr-xr-xsd/source/ui/slidesorter/controller/SlsListener.cxx599
-rw-r--r--sd/source/ui/slidesorter/controller/SlsListener.hxx185
-rw-r--r--sd/source/ui/slidesorter/controller/SlsPageObjectFactory.cxx100
-rwxr-xr-xsd/source/ui/slidesorter/controller/SlsPageSelector.cxx324
-rw-r--r--sd/source/ui/slidesorter/controller/SlsProperties.cxx233
-rwxr-xr-xsd/source/ui/slidesorter/controller/SlsScrollBarManager.cxx631
-rwxr-xr-xsd/source/ui/slidesorter/controller/SlsSelectionCommand.cxx85
-rwxr-xr-xsd/source/ui/slidesorter/controller/SlsSelectionCommand.hxx95
-rwxr-xr-xsd/source/ui/slidesorter/controller/SlsSelectionFunction.cxx1317
-rwxr-xr-xsd/source/ui/slidesorter/controller/SlsSelectionManager.cxx662
-rwxr-xr-xsd/source/ui/slidesorter/controller/SlsSlideFunction.cxx80
-rwxr-xr-xsd/source/ui/slidesorter/controller/SlsSlotManager.cxx1134
-rw-r--r--sd/source/ui/slidesorter/controller/SlsTransferable.cxx92
-rw-r--r--sd/source/ui/slidesorter/controller/SlsTransferable.hxx70
-rw-r--r--sd/source/ui/slidesorter/controller/makefile.mk71
-rw-r--r--sd/source/ui/slidesorter/inc/cache/SlsCacheContext.hxx106
-rwxr-xr-xsd/source/ui/slidesorter/inc/cache/SlsPageCache.hxx148
-rw-r--r--sd/source/ui/slidesorter/inc/cache/SlsPageCacheManager.hxx177
-rwxr-xr-xsd/source/ui/slidesorter/inc/controller/SlideSorterController.hxx337
-rw-r--r--sd/source/ui/slidesorter/inc/controller/SlsAnimator.hxx96
-rw-r--r--sd/source/ui/slidesorter/inc/controller/SlsClipboard.hxx216
-rw-r--r--sd/source/ui/slidesorter/inc/controller/SlsCurrentSlideManager.hxx105
-rw-r--r--sd/source/ui/slidesorter/inc/controller/SlsFocusManager.hxx236
-rw-r--r--sd/source/ui/slidesorter/inc/controller/SlsPageObjectFactory.hxx97
-rwxr-xr-xsd/source/ui/slidesorter/inc/controller/SlsPageSelector.hxx181
-rw-r--r--sd/source/ui/slidesorter/inc/controller/SlsProperties.hxx128
-rwxr-xr-xsd/source/ui/slidesorter/inc/controller/SlsScrollBarManager.hxx249
-rwxr-xr-xsd/source/ui/slidesorter/inc/controller/SlsSelectionFunction.hxx204
-rw-r--r--sd/source/ui/slidesorter/inc/controller/SlsSelectionManager.hxx211
-rwxr-xr-xsd/source/ui/slidesorter/inc/controller/SlsSlideFunction.hxx73
-rwxr-xr-xsd/source/ui/slidesorter/inc/controller/SlsSlotManager.hxx102
-rwxr-xr-xsd/source/ui/slidesorter/inc/model/SlideSorterModel.hxx201
-rw-r--r--sd/source/ui/slidesorter/inc/model/SlsEnumeration.hxx53
-rwxr-xr-xsd/source/ui/slidesorter/inc/model/SlsPageDescriptor.hxx215
-rw-r--r--sd/source/ui/slidesorter/inc/model/SlsPageEnumeration.hxx127
-rw-r--r--sd/source/ui/slidesorter/inc/model/SlsPageEnumerationProvider.hxx60
-rw-r--r--sd/source/ui/slidesorter/inc/model/SlsSharedPageDescriptor.hxx41
-rwxr-xr-xsd/source/ui/slidesorter/inc/view/SlideSorterView.hxx307
-rw-r--r--sd/source/ui/slidesorter/inc/view/SlsFontProvider.hxx94
-rwxr-xr-xsd/source/ui/slidesorter/inc/view/SlsLayouter.hxx382
-rw-r--r--sd/source/ui/slidesorter/inc/view/SlsPageObject.hxx65
-rwxr-xr-xsd/source/ui/slidesorter/inc/view/SlsPageObjectViewContact.hxx89
-rw-r--r--sd/source/ui/slidesorter/inc/view/SlsPageObjectViewObjectContact.hxx225
-rw-r--r--sd/source/ui/slidesorter/inc/view/SlsViewOverlay.hxx273
-rw-r--r--sd/source/ui/slidesorter/makefile.mk58
-rwxr-xr-xsd/source/ui/slidesorter/model/SlideSorterModel.cxx442
-rwxr-xr-xsd/source/ui/slidesorter/model/SlsPageDescriptor.cxx281
-rw-r--r--sd/source/ui/slidesorter/model/SlsPageEnumeration.cxx284
-rw-r--r--sd/source/ui/slidesorter/model/SlsPageEnumerationProvider.cxx110
-rw-r--r--sd/source/ui/slidesorter/model/makefile.mk56
-rw-r--r--sd/source/ui/slidesorter/shell/SlideSorter.cxx651
-rw-r--r--sd/source/ui/slidesorter/shell/SlideSorterChildWindow.cxx66
-rw-r--r--sd/source/ui/slidesorter/shell/SlideSorterChildWindow.src52
-rwxr-xr-xsd/source/ui/slidesorter/shell/SlideSorterService.cxx648
-rwxr-xr-xsd/source/ui/slidesorter/shell/SlideSorterService.hxx216
-rwxr-xr-xsd/source/ui/slidesorter/shell/SlideSorterViewShell.cxx778
-rw-r--r--sd/source/ui/slidesorter/shell/makefile.mk55
-rwxr-xr-xsd/source/ui/slidesorter/view/SlideSorterView.cxx821
-rw-r--r--sd/source/ui/slidesorter/view/SlsFontProvider.cxx132
-rwxr-xr-xsd/source/ui/slidesorter/view/SlsLayouter.cxx758
-rw-r--r--sd/source/ui/slidesorter/view/SlsPageObject.cxx80
-rwxr-xr-xsd/source/ui/slidesorter/view/SlsPageObjectViewContact.cxx125
-rwxr-xr-xsd/source/ui/slidesorter/view/SlsPageObjectViewObjectContact.cxx1403
-rw-r--r--sd/source/ui/slidesorter/view/SlsViewCacheContext.cxx167
-rw-r--r--sd/source/ui/slidesorter/view/SlsViewCacheContext.hxx70
-rw-r--r--sd/source/ui/slidesorter/view/SlsViewOverlay.cxx606
-rw-r--r--sd/source/ui/slidesorter/view/makefile.mk61
-rwxr-xr-xsd/source/ui/table/TableDesignPane.cxx951
-rw-r--r--sd/source/ui/table/TableDesignPane.hrc50
-rw-r--r--sd/source/ui/table/TableDesignPane.hxx126
-rw-r--r--sd/source/ui/table/TableDesignPane.src154
-rw-r--r--sd/source/ui/table/makefile.mk56
-rwxr-xr-xsd/source/ui/table/tablefunction.cxx270
-rw-r--r--sd/source/ui/table/tableobjectbar.cxx234
-rw-r--r--sd/source/ui/table/tableobjectbar.hxx64
-rw-r--r--sd/source/ui/toolpanel/ConstrainedIterator.cxx267
-rw-r--r--sd/source/ui/toolpanel/ConstrainedIterator.hxx104
-rw-r--r--sd/source/ui/toolpanel/ControlContainer.cxx500
-rw-r--r--sd/source/ui/toolpanel/ControlContainerDescriptor.hxx139
-rw-r--r--sd/source/ui/toolpanel/ControlList.hxx59
-rwxr-xr-xsd/source/ui/toolpanel/LayoutMenu.cxx1012
-rwxr-xr-xsd/source/ui/toolpanel/LayoutMenu.hxx239
-rw-r--r--sd/source/ui/toolpanel/MethodGuard.hxx67
-rwxr-xr-xsd/source/ui/toolpanel/ScrollPanel.cxx834
-rwxr-xr-xsd/source/ui/toolpanel/SlideSorterCacheDisplay.cxx372
-rwxr-xr-xsd/source/ui/toolpanel/SubToolPanel.cxx419
-rwxr-xr-xsd/source/ui/toolpanel/TaskPaneControlFactory.cxx57
-rw-r--r--sd/source/ui/toolpanel/TaskPaneFocusManager.cxx325
-rw-r--r--sd/source/ui/toolpanel/TaskPaneFocusManager.hxx135
-rwxr-xr-xsd/source/ui/toolpanel/TaskPaneShellManager.cxx183
-rwxr-xr-xsd/source/ui/toolpanel/TaskPaneShellManager.hxx121
-rwxr-xr-xsd/source/ui/toolpanel/TaskPaneTreeNode.cxx292
-rwxr-xr-xsd/source/ui/toolpanel/TestMenu.cxx318
-rwxr-xr-xsd/source/ui/toolpanel/TestMenu.hxx84
-rwxr-xr-xsd/source/ui/toolpanel/TestPanel.cxx174
-rwxr-xr-xsd/source/ui/toolpanel/TestPanel.hxx57
-rwxr-xr-xsd/source/ui/toolpanel/TitleBar.cxx585
-rwxr-xr-xsd/source/ui/toolpanel/TitledControl.cxx432
-rwxr-xr-xsd/source/ui/toolpanel/ToolPanel.cxx113
-rw-r--r--sd/source/ui/toolpanel/ToolPanel.hxx80
-rw-r--r--sd/source/ui/toolpanel/ToolPanelDescriptor.hxx89
-rw-r--r--sd/source/ui/toolpanel/ToolPanelFactory.cxx255
-rw-r--r--sd/source/ui/toolpanel/ToolPanelUIElement.cxx134
-rw-r--r--sd/source/ui/toolpanel/ToolPanelUIElement.hxx87
-rwxr-xr-xsd/source/ui/toolpanel/ToolPanelViewShell.cxx913
-rw-r--r--sd/source/ui/toolpanel/controls/AllMasterPagesSelector.cxx208
-rw-r--r--sd/source/ui/toolpanel/controls/AllMasterPagesSelector.hxx94
-rwxr-xr-xsd/source/ui/toolpanel/controls/AnimationSchemesPanel.cxx170
-rwxr-xr-xsd/source/ui/toolpanel/controls/AnimationSchemesPanel.hxx138
-rw-r--r--sd/source/ui/toolpanel/controls/CurrentMasterPagesSelector.cxx343
-rw-r--r--sd/source/ui/toolpanel/controls/CurrentMasterPagesSelector.hxx83
-rwxr-xr-xsd/source/ui/toolpanel/controls/CustomAnimationPanel.cxx113
-rwxr-xr-xsd/source/ui/toolpanel/controls/CustomAnimationPanel.hxx81
-rwxr-xr-xsd/source/ui/toolpanel/controls/DocumentHelper.cxx585
-rw-r--r--sd/source/ui/toolpanel/controls/DocumentHelper.hxx116
-rwxr-xr-xsd/source/ui/toolpanel/controls/MasterPageContainer.cxx1220
-rwxr-xr-xsd/source/ui/toolpanel/controls/MasterPageContainer.hxx220
-rw-r--r--sd/source/ui/toolpanel/controls/MasterPageContainerFiller.cxx199
-rw-r--r--sd/source/ui/toolpanel/controls/MasterPageContainerFiller.hxx95
-rwxr-xr-xsd/source/ui/toolpanel/controls/MasterPageContainerProviders.cxx429
-rwxr-xr-xsd/source/ui/toolpanel/controls/MasterPageContainerProviders.hxx189
-rw-r--r--sd/source/ui/toolpanel/controls/MasterPageContainerQueue.cxx304
-rw-r--r--sd/source/ui/toolpanel/controls/MasterPageContainerQueue.hxx136
-rwxr-xr-xsd/source/ui/toolpanel/controls/MasterPageDescriptor.cxx423
-rwxr-xr-xsd/source/ui/toolpanel/controls/MasterPageDescriptor.hxx240
-rwxr-xr-xsd/source/ui/toolpanel/controls/MasterPageObserver.cxx426
-rwxr-xr-xsd/source/ui/toolpanel/controls/MasterPagesPanel.cxx157
-rwxr-xr-xsd/source/ui/toolpanel/controls/MasterPagesPanel.hxx72
-rwxr-xr-xsd/source/ui/toolpanel/controls/MasterPagesSelector.cxx854
-rwxr-xr-xsd/source/ui/toolpanel/controls/MasterPagesSelector.hxx235
-rw-r--r--sd/source/ui/toolpanel/controls/PreviewValueSet.cxx240
-rw-r--r--sd/source/ui/toolpanel/controls/PreviewValueSet.hxx96
-rw-r--r--sd/source/ui/toolpanel/controls/RecentMasterPagesSelector.cxx159
-rw-r--r--sd/source/ui/toolpanel/controls/RecentMasterPagesSelector.hxx76
-rw-r--r--sd/source/ui/toolpanel/controls/RecentlyUsedMasterPages.cxx501
-rw-r--r--sd/source/ui/toolpanel/controls/RecentlyUsedMasterPages.hxx128
-rwxr-xr-xsd/source/ui/toolpanel/controls/SlideTransitionPanel.cxx116
-rwxr-xr-xsd/source/ui/toolpanel/controls/SlideTransitionPanel.hxx81
-rwxr-xr-xsd/source/ui/toolpanel/controls/TableDesignPanel.cxx110
-rwxr-xr-xsd/source/ui/toolpanel/controls/TableDesignPanel.hxx81
-rwxr-xr-xsd/source/ui/toolpanel/controls/makefile.mk67
-rwxr-xr-xsd/source/ui/toolpanel/makefile.mk70
-rw-r--r--sd/source/ui/tools/AsynchronousCall.cxx82
-rwxr-xr-xsd/source/ui/tools/ConfigurationAccess.cxx230
-rw-r--r--sd/source/ui/tools/EventMultiplexer.cxx823
-rw-r--r--sd/source/ui/tools/IconCache.cxx133
-rw-r--r--sd/source/ui/tools/IdleDetection.cxx127
-rwxr-xr-xsd/source/ui/tools/PreviewRenderer.cxx502
-rwxr-xr-xsd/source/ui/tools/PropertySet.cxx232
-rwxr-xr-xsd/source/ui/tools/SdGlobalResourceContainer.cxx215
-rwxr-xr-xsd/source/ui/tools/SlotStateListener.cxx225
-rw-r--r--sd/source/ui/tools/TimerBasedTaskExecution.cxx180
-rw-r--r--sd/source/ui/tools/makefile.mk61
-rwxr-xr-xsd/source/ui/unoidl/DrawController.cxx936
-rwxr-xr-xsd/source/ui/unoidl/SdUnoDrawView.cxx644
-rwxr-xr-xsd/source/ui/unoidl/SdUnoOutlineView.cxx271
-rwxr-xr-xsd/source/ui/unoidl/SdUnoSlideView.cxx274
-rwxr-xr-xsd/source/ui/unoidl/UnoDocumentSettings.cxx1248
-rw-r--r--sd/source/ui/unoidl/UnoDocumentSettings.hxx40
-rw-r--r--sd/source/ui/unoidl/detreg.cxx113
-rwxr-xr-xsd/source/ui/unoidl/facreg.cxx623
-rwxr-xr-xsd/source/ui/unoidl/makefile.mk90
-rw-r--r--sd/source/ui/unoidl/randomnode.cxx703
-rwxr-xr-xsd/source/ui/unoidl/sddetect.cxx546
-rw-r--r--sd/source/ui/unoidl/sddetect.hxx95
-rwxr-xr-xsd/source/ui/unoidl/unocpres.cxx495
-rwxr-xr-xsd/source/ui/unoidl/unocpres.hxx169
-rw-r--r--sd/source/ui/unoidl/unodoc.cxx104
-rw-r--r--sd/source/ui/unoidl/unohelp.hxx59
-rw-r--r--sd/source/ui/unoidl/unokywds.cxx37
-rw-r--r--sd/source/ui/unoidl/unolayer.cxx832
-rw-r--r--sd/source/ui/unoidl/unolayer.hxx189
-rwxr-xr-xsd/source/ui/unoidl/unomodel.cxx3069
-rw-r--r--sd/source/ui/unoidl/unomodule.cxx163
-rw-r--r--sd/source/ui/unoidl/unomodule.hxx98
-rwxr-xr-xsd/source/ui/unoidl/unoobj.cxx1763
-rwxr-xr-xsd/source/ui/unoidl/unoobj.hxx138
-rwxr-xr-xsd/source/ui/unoidl/unopage.cxx3181
-rwxr-xr-xsd/source/ui/unoidl/unopage.hxx319
-rw-r--r--sd/source/ui/unoidl/unopback.cxx463
-rw-r--r--sd/source/ui/unoidl/unopback.hxx92
-rw-r--r--sd/source/ui/unoidl/unopool.cxx99
-rwxr-xr-xsd/source/ui/unoidl/unosrch.cxx879
-rwxr-xr-xsd/source/ui/unoidl/unowcntr.cxx125
-rwxr-xr-xsd/source/ui/unoidl/unowcntr.hxx58
-rwxr-xr-xsd/source/ui/view/DocumentRenderer.cxx2388
-rw-r--r--sd/source/ui/view/DocumentRenderer.hrc77
-rwxr-xr-xsd/source/ui/view/DocumentRenderer.src296
-rw-r--r--sd/source/ui/view/FormShellManager.cxx393
-rw-r--r--sd/source/ui/view/GraphicObjectBar.cxx185
-rwxr-xr-xsd/source/ui/view/GraphicViewShellBase.cxx138
-rwxr-xr-xsd/source/ui/view/ImpressViewShellBase.cxx128
-rw-r--r--sd/source/ui/view/MediaObjectBar.cxx166
-rwxr-xr-xsd/source/ui/view/OutlineViewShellBase.cxx92
-rwxr-xr-xsd/source/ui/view/Outliner.cxx1828
-rwxr-xr-xsd/source/ui/view/OutlinerIterator.cxx898
-rwxr-xr-xsd/source/ui/view/PresentationViewShellBase.cxx130
-rwxr-xr-xsd/source/ui/view/SlideSorterViewShellBase.cxx103
-rwxr-xr-xsd/source/ui/view/ToolBarManager.cxx1697
-rw-r--r--sd/source/ui/view/UpdateLockManager.cxx429
-rwxr-xr-xsd/source/ui/view/ViewClipboard.cxx278
-rw-r--r--sd/source/ui/view/ViewShellBase.cxx1787
-rw-r--r--sd/source/ui/view/ViewShellHint.cxx52
-rwxr-xr-xsd/source/ui/view/ViewShellImplementation.cxx449
-rwxr-xr-xsd/source/ui/view/ViewShellManager.cxx1464
-rwxr-xr-xsd/source/ui/view/ViewTabBar.cxx716
-rw-r--r--sd/source/ui/view/WindowUpdater.cxx189
-rwxr-xr-xsd/source/ui/view/bmcache.cxx78
-rw-r--r--sd/source/ui/view/clview.cxx107
-rwxr-xr-xsd/source/ui/view/drawview.cxx651
-rw-r--r--sd/source/ui/view/drbezob.cxx365
-rwxr-xr-xsd/source/ui/view/drtxtob.cxx591
-rwxr-xr-xsd/source/ui/view/drtxtob1.cxx612
-rwxr-xr-xsd/source/ui/view/drviews1.cxx1449
-rwxr-xr-xsd/source/ui/view/drviews2.cxx975
-rwxr-xr-xsd/source/ui/view/drviews3.cxx950
-rw-r--r--sd/source/ui/view/drviews4.cxx1007
-rw-r--r--sd/source/ui/view/drviews5.cxx746
-rwxr-xr-xsd/source/ui/view/drviews6.cxx742
-rwxr-xr-xsd/source/ui/view/drviews7.cxx1741
-rwxr-xr-xsd/source/ui/view/drviews8.cxx558
-rw-r--r--sd/source/ui/view/drviews9.cxx881
-rwxr-xr-xsd/source/ui/view/drviewsa.cxx859
-rw-r--r--sd/source/ui/view/drviewsb.cxx879
-rw-r--r--sd/source/ui/view/drviewsc.cxx994
-rw-r--r--sd/source/ui/view/drviewsd.cxx259
-rwxr-xr-xsd/source/ui/view/drviewse.cxx1684
-rwxr-xr-xsd/source/ui/view/drviewsf.cxx576
-rw-r--r--sd/source/ui/view/drviewsg.cxx296
-rw-r--r--sd/source/ui/view/drviewsh.cxx193
-rw-r--r--sd/source/ui/view/drviewsi.cxx207
-rw-r--r--sd/source/ui/view/drviewsj.cxx564
-rwxr-xr-xsd/source/ui/view/drvwshrg.cxx127
-rw-r--r--sd/source/ui/view/frmview.cxx1214
-rwxr-xr-xsd/source/ui/view/grviewsh.cxx156
-rw-r--r--sd/source/ui/view/makefile.mk123
-rwxr-xr-xsd/source/ui/view/outlnvs2.cxx648
-rwxr-xr-xsd/source/ui/view/outlnvsh.cxx2245
-rwxr-xr-xsd/source/ui/view/outlview.cxx2177
-rw-r--r--sd/source/ui/view/presvish.cxx188
-rw-r--r--sd/source/ui/view/sdruler.cxx226
-rwxr-xr-xsd/source/ui/view/sdview.cxx1316
-rw-r--r--sd/source/ui/view/sdview2.cxx1038
-rw-r--r--sd/source/ui/view/sdview3.cxx1485
-rwxr-xr-xsd/source/ui/view/sdview4.cxx637
-rwxr-xr-xsd/source/ui/view/sdview5.cxx114
-rwxr-xr-xsd/source/ui/view/sdwindow.cxx1210
-rw-r--r--sd/source/ui/view/tabcontr.cxx464
-rw-r--r--sd/source/ui/view/unmodpg.cxx249
-rwxr-xr-xsd/source/ui/view/viewoverlaymanager.cxx619
-rwxr-xr-xsd/source/ui/view/viewshe2.cxx1213
-rwxr-xr-xsd/source/ui/view/viewshe3.cxx442
-rwxr-xr-xsd/source/ui/view/viewshel.cxx1619
-rwxr-xr-xsd/source/ui/view/zoomlist.cxx197
-rw-r--r--sd/source/unotypes/makefile.mk53
-rw-r--r--sd/uiconfig/sdraw/menubar/menubar.xml332
-rw-r--r--sd/uiconfig/sdraw/statusbar/statusbar.xml12
-rw-r--r--sd/uiconfig/sdraw/toolbar/3dobjectsbar.xml13
-rw-r--r--sd/uiconfig/sdraw/toolbar/alignmentbar.xml11
-rw-r--r--sd/uiconfig/sdraw/toolbar/arrowsbar.xml16
-rw-r--r--sd/uiconfig/sdraw/toolbar/arrowshapes.xml34
-rw-r--r--sd/uiconfig/sdraw/toolbar/basicshapes.xml29
-rw-r--r--sd/uiconfig/sdraw/toolbar/bezierobjectbar.xml20
-rw-r--r--sd/uiconfig/sdraw/toolbar/calloutshapes.xml11
-rw-r--r--sd/uiconfig/sdraw/toolbar/choosemodebar.xml13
-rw-r--r--sd/uiconfig/sdraw/toolbar/colorbar.xml15
-rw-r--r--sd/uiconfig/sdraw/toolbar/commentsbar.xml11
-rw-r--r--sd/uiconfig/sdraw/toolbar/connectorsbar.xml35
-rw-r--r--sd/uiconfig/sdraw/toolbar/drawingobjectbar.xml21
-rw-r--r--sd/uiconfig/sdraw/toolbar/ellipsesbar.xml19
-rwxr-xr-xsd/uiconfig/sdraw/toolbar/extrusionobjectbar.xml16
-rw-r--r--sd/uiconfig/sdraw/toolbar/findbar.xml8
-rw-r--r--sd/uiconfig/sdraw/toolbar/flowchartshapes.xml36
-rwxr-xr-xsd/uiconfig/sdraw/toolbar/fontworkobjectbar.xml11
-rw-r--r--sd/uiconfig/sdraw/toolbar/fontworkshapetype.xml38
-rw-r--r--sd/uiconfig/sdraw/toolbar/formcontrols.xml26
-rw-r--r--sd/uiconfig/sdraw/toolbar/formdesign.xml29
-rw-r--r--sd/uiconfig/sdraw/toolbar/formsfilterbar.xml8
-rw-r--r--sd/uiconfig/sdraw/toolbar/formsnavigationbar.xml32
-rw-r--r--sd/uiconfig/sdraw/toolbar/formtextobjectbar.xml28
-rw-r--r--sd/uiconfig/sdraw/toolbar/fullscreenbar.xml5
-rw-r--r--sd/uiconfig/sdraw/toolbar/gluepointsobjectbar.xml20
-rw-r--r--sd/uiconfig/sdraw/toolbar/graffilterbar.xml17
-rw-r--r--sd/uiconfig/sdraw/toolbar/graphicobjectbar.xml17
-rw-r--r--sd/uiconfig/sdraw/toolbar/insertbar.xml20
-rw-r--r--sd/uiconfig/sdraw/toolbar/linesbar.xml13
-rw-r--r--sd/uiconfig/sdraw/toolbar/masterviewtoolbar.xml9
-rw-r--r--sd/uiconfig/sdraw/toolbar/mediaobjectbar.xml7
-rw-r--r--sd/uiconfig/sdraw/toolbar/moreformcontrols.xml23
-rw-r--r--sd/uiconfig/sdraw/toolbar/optimizetablebar.xml6
-rw-r--r--sd/uiconfig/sdraw/toolbar/optionsbar.xml25
-rw-r--r--sd/uiconfig/sdraw/toolbar/positionbar.xml13
-rw-r--r--sd/uiconfig/sdraw/toolbar/rectanglesbar.xml13
-rw-r--r--sd/uiconfig/sdraw/toolbar/standardbar.xml37
-rw-r--r--sd/uiconfig/sdraw/toolbar/starshapes.xml17
-rw-r--r--sd/uiconfig/sdraw/toolbar/symbolshapes.xml24
-rw-r--r--sd/uiconfig/sdraw/toolbar/tableobjectbar.xml31
-rw-r--r--sd/uiconfig/sdraw/toolbar/textbar.xml11
-rw-r--r--sd/uiconfig/sdraw/toolbar/textobjectbar.xml40
-rw-r--r--sd/uiconfig/sdraw/toolbar/toolbar.xml45
-rw-r--r--sd/uiconfig/sdraw/toolbar/viewerbar.xml18
-rw-r--r--sd/uiconfig/sdraw/toolbar/zoombar.xml16
-rwxr-xr-xsd/uiconfig/simpress/menubar/menubar.xml306
-rw-r--r--sd/uiconfig/simpress/statusbar/statusbar.xml12
-rw-r--r--sd/uiconfig/simpress/toolbar/3dobjectsbar.xml13
-rw-r--r--sd/uiconfig/simpress/toolbar/alignmentbar.xml11
-rw-r--r--sd/uiconfig/simpress/toolbar/arrowsbar.xml16
-rw-r--r--sd/uiconfig/simpress/toolbar/arrowshapes.xml34
-rw-r--r--sd/uiconfig/simpress/toolbar/basicshapes.xml29
-rw-r--r--sd/uiconfig/simpress/toolbar/bezierobjectbar.xml20
-rw-r--r--sd/uiconfig/simpress/toolbar/calloutshapes.xml11
-rw-r--r--sd/uiconfig/simpress/toolbar/choosemodebar.xml13
-rw-r--r--sd/uiconfig/simpress/toolbar/colorbar.xml15
-rw-r--r--sd/uiconfig/simpress/toolbar/commentsbar.xml11
-rwxr-xr-xsd/uiconfig/simpress/toolbar/commontaskbar.xml11
-rw-r--r--sd/uiconfig/simpress/toolbar/connectorsbar.xml35
-rw-r--r--sd/uiconfig/simpress/toolbar/drawingobjectbar.xml21
-rw-r--r--sd/uiconfig/simpress/toolbar/ellipsesbar.xml19
-rwxr-xr-xsd/uiconfig/simpress/toolbar/extrusionobjectbar.xml16
-rw-r--r--sd/uiconfig/simpress/toolbar/findbar.xml8
-rw-r--r--sd/uiconfig/simpress/toolbar/flowchartshapes.xml36
-rwxr-xr-xsd/uiconfig/simpress/toolbar/fontworkobjectbar.xml11
-rw-r--r--sd/uiconfig/simpress/toolbar/fontworkshapetype.xml38
-rw-r--r--sd/uiconfig/simpress/toolbar/formcontrols.xml26
-rw-r--r--sd/uiconfig/simpress/toolbar/formdesign.xml29
-rw-r--r--sd/uiconfig/simpress/toolbar/formsfilterbar.xml8
-rw-r--r--sd/uiconfig/simpress/toolbar/formsnavigationbar.xml32
-rw-r--r--sd/uiconfig/simpress/toolbar/formtextobjectbar.xml28
-rw-r--r--sd/uiconfig/simpress/toolbar/fullscreenbar.xml5
-rw-r--r--sd/uiconfig/simpress/toolbar/gluepointsobjectbar.xml20
-rw-r--r--sd/uiconfig/simpress/toolbar/graffilterbar.xml17
-rw-r--r--sd/uiconfig/simpress/toolbar/graphicobjectbar.xml17
-rwxr-xr-xsd/uiconfig/simpress/toolbar/insertbar.xml20
-rw-r--r--sd/uiconfig/simpress/toolbar/linesbar.xml13
-rw-r--r--sd/uiconfig/simpress/toolbar/masterviewtoolbar.xml9
-rw-r--r--sd/uiconfig/simpress/toolbar/mediaobjectbar.xml7
-rw-r--r--sd/uiconfig/simpress/toolbar/moreformcontrols.xml23
-rw-r--r--sd/uiconfig/simpress/toolbar/optimizetablebar.xml6
-rw-r--r--sd/uiconfig/simpress/toolbar/optionsbar.xml25
-rw-r--r--sd/uiconfig/simpress/toolbar/outlinetoolbar.xml13
-rw-r--r--sd/uiconfig/simpress/toolbar/positionbar.xml13
-rw-r--r--sd/uiconfig/simpress/toolbar/rectanglesbar.xml13
-rw-r--r--sd/uiconfig/simpress/toolbar/slideviewobjectbar.xml10
-rw-r--r--sd/uiconfig/simpress/toolbar/slideviewtoolbar.xml7
-rw-r--r--sd/uiconfig/simpress/toolbar/standardbar.xml39
-rw-r--r--sd/uiconfig/simpress/toolbar/starshapes.xml17
-rw-r--r--sd/uiconfig/simpress/toolbar/symbolshapes.xml24
-rw-r--r--sd/uiconfig/simpress/toolbar/tableobjectbar.xml31
-rw-r--r--sd/uiconfig/simpress/toolbar/textbar.xml11
-rw-r--r--sd/uiconfig/simpress/toolbar/textobjectbar.xml45
-rw-r--r--sd/uiconfig/simpress/toolbar/toolbar.xml49
-rw-r--r--sd/uiconfig/simpress/toolbar/viewerbar.xml20
-rw-r--r--sd/uiconfig/simpress/toolbar/zoombar.xml16
-rw-r--r--sd/util/exports.dxp3
-rw-r--r--sd/util/hidother.hrc43
-rw-r--r--sd/util/hidother.src206
-rwxr-xr-xsd/util/makefile.mk277
-rw-r--r--sd/util/makefile.pmk32
-rw-r--r--sd/util/sd.flt136
-rw-r--r--sd/util/sdfilt.map8
-rw-r--r--sd/util/sdui.map6
-rw-r--r--sd/workben/custompanel/ctp_panel.cxx249
-rw-r--r--sd/workben/custompanel/ctp_panel.hxx99
-rw-r--r--sd/workben/testdll/makefile101
-rw-r--r--sd/xml/AccessibleDrawDocumentView.xml41
-rw-r--r--sd/xml/AccessibleOutlineView.xml39
-rw-r--r--sd/xml/AccessiblePageShape.xml39
-rw-r--r--sd/xml/AccessiblePresentationGraphicShape.xml40
-rw-r--r--sd/xml/AccessiblePresentationOLEShape.xml40
-rw-r--r--sd/xml/AccessiblePresentationShape.xml38
-rw-r--r--sd/xml/AccessibleSlideView.xml35
-rw-r--r--sd/xml/AccessibleSlideViewObject.xml34
-rw-r--r--sd/xml/DrawingView.xml17
-rw-r--r--sd/xml/HandoutView.xml17
-rw-r--r--sd/xml/NotesView.xml17
-rw-r--r--sd/xml/OutlineView.xml17
-rw-r--r--sd/xml/PresentationView.xml17
-rw-r--r--sd/xml/SdDocLinkTargets.xml16
-rw-r--r--sd/xml/SdDrawPage.xml16
-rw-r--r--sd/xml/SdDrawPagesAccess.xml16
-rw-r--r--sd/xml/SdGenericDrawPage.xml16
-rw-r--r--sd/xml/SdLayer.xml16
-rw-r--r--sd/xml/SdLayerManager.xml16
-rw-r--r--sd/xml/SdMasterPage.xml16
-rw-r--r--sd/xml/SdMasterPagesAccess.xml16
-rw-r--r--sd/xml/SdPageLinkTargets.xml16
-rw-r--r--sd/xml/SdXCustomPresentation.xml16
-rw-r--r--sd/xml/SdXCustomPresentationAccess.xml16
-rw-r--r--sd/xml/SdXImpressDocument.xml16
-rw-r--r--sd/xml/SdXPresentation.xml16
-rw-r--r--sd/xml/SdXShape.xml16
-rw-r--r--sd/xml/SlidesView.xml17
-rw-r--r--sd/xml/effects.xml2630
-rw-r--r--sd/xml/transitions-ogl.xml33
-rw-r--r--sd/xml/transitions.xml222
-rw-r--r--sd/xsl/effect.xsl563
-rw-r--r--sdext/inc/makefile.mk47
-rw-r--r--sdext/inc/pch/precompiled_sdext.cxx29
-rw-r--r--sdext/inc/pch/precompiled_sdext.hxx32
-rw-r--r--sdext/prj/build.lst19
-rw-r--r--sdext/prj/d.lst10
-rw-r--r--sdext/source/minimizer/basic.txt89
-rw-r--r--sdext/source/minimizer/configurationaccess.cxx537
-rw-r--r--sdext/source/minimizer/configurationaccess.hxx139
-rw-r--r--sdext/source/minimizer/delzip1
-rwxr-xr-xsdext/source/minimizer/description.xml37
-rw-r--r--sdext/source/minimizer/fileopendialog.cxx209
-rw-r--r--sdext/source/minimizer/fileopendialog.hxx72
-rw-r--r--sdext/source/minimizer/graphiccollector.cxx460
-rw-r--r--sdext/source/minimizer/graphiccollector.hxx106
-rwxr-xr-xsdext/source/minimizer/help/component.txt2
-rw-r--r--sdext/source/minimizer/help/help_de.odtbin0 -> 8987 bytes
-rw-r--r--sdext/source/minimizer/help/help_en-US.odtbin0 -> 8987 bytes
-rw-r--r--sdext/source/minimizer/impoptimizer.cxx754
-rw-r--r--sdext/source/minimizer/impoptimizer.hxx87
-rw-r--r--sdext/source/minimizer/informationdialog.cxx408
-rw-r--r--sdext/source/minimizer/informationdialog.hxx99
-rwxr-xr-xsdext/source/minimizer/makefile.mk153
-rw-r--r--sdext/source/minimizer/manifest.xml16
-rw-r--r--sdext/source/minimizer/minimizer.pmk28
-rw-r--r--sdext/source/minimizer/optimizationstats.cxx102
-rw-r--r--sdext/source/minimizer/optimizationstats.hxx63
-rw-r--r--sdext/source/minimizer/optimizerdialog.cxx839
-rw-r--r--sdext/source/minimizer/optimizerdialog.hrc36
-rw-r--r--sdext/source/minimizer/optimizerdialog.hxx249
-rw-r--r--sdext/source/minimizer/optimizerdialogcontrols.cxx960
-rw-r--r--sdext/source/minimizer/pagecollector.cxx180
-rw-r--r--sdext/source/minimizer/pagecollector.hxx49
-rw-r--r--sdext/source/minimizer/pppoptimizer.cxx209
-rw-r--r--sdext/source/minimizer/pppoptimizer.hxx100
-rw-r--r--sdext/source/minimizer/pppoptimizerdialog.cxx217
-rw-r--r--sdext/source/minimizer/pppoptimizerdialog.hxx111
-rw-r--r--sdext/source/minimizer/pppoptimizertoken.cxx338
-rw-r--r--sdext/source/minimizer/pppoptimizertoken.hxx283
-rw-r--r--sdext/source/minimizer/pppoptimizeruno.cxx120
-rw-r--r--sdext/source/minimizer/registry/data/org/openoffice/Office/Addons.xcu65
-rw-r--r--sdext/source/minimizer/registry/data/org/openoffice/Office/ProtocolHandler.xcu10
-rw-r--r--sdext/source/minimizer/registry/data/org/openoffice/Office/extension/SunPresentationMinimizer.xcu383
-rw-r--r--sdext/source/minimizer/registry/data/org/openoffice/Office/extension/makefile.mk50
-rw-r--r--sdext/source/minimizer/registry/data/org/openoffice/Office/makefile.mk48
-rw-r--r--sdext/source/minimizer/registry/schema/org/openoffice/Office/extension/SunPresentationMinimizer.xcs326
-rw-r--r--sdext/source/minimizer/unodialog.cxx452
-rw-r--r--sdext/source/minimizer/unodialog.hxx149
-rwxr-xr-xsdext/source/pdfimport/config/description.xml36
-rw-r--r--sdext/source/pdfimport/config/manifest.xml16
-rw-r--r--sdext/source/pdfimport/config/pdf_import_filter.xcu199
-rw-r--r--sdext/source/pdfimport/config/pdf_types.xcu18
-rw-r--r--sdext/source/pdfimport/delzip1
-rw-r--r--sdext/source/pdfimport/dialogs/Module1.xba7
-rw-r--r--sdext/source/pdfimport/dialogs/TargetChooser.xdl21
-rw-r--r--sdext/source/pdfimport/dialogs/dialog.xlb5
-rw-r--r--sdext/source/pdfimport/dialogs/impress.pngbin0 -> 11117 bytes
-rw-r--r--sdext/source/pdfimport/dialogs/script.xlb5
-rw-r--r--sdext/source/pdfimport/dialogs/writer.pngbin0 -> 10176 bytes
-rwxr-xr-xsdext/source/pdfimport/dialogs/xpdfimport_err.pdfbin0 -> 21204 bytes
-rw-r--r--sdext/source/pdfimport/filterdet.cxx776
-rw-r--r--sdext/source/pdfimport/filterdet.hxx114
-rwxr-xr-xsdext/source/pdfimport/help/component.txt1
-rwxr-xr-xsdext/source/pdfimport/inc/contentsink.hxx184
-rw-r--r--sdext/source/pdfimport/inc/odfemitter.hxx45
-rwxr-xr-xsdext/source/pdfimport/inc/pdfihelper.hxx200
-rw-r--r--sdext/source/pdfimport/inc/pdfparse.hxx309
-rw-r--r--sdext/source/pdfimport/inc/saxemitter.hxx46
-rw-r--r--sdext/source/pdfimport/inc/treevisitorfactory.hxx67
-rwxr-xr-xsdext/source/pdfimport/inc/wrapper.hxx63
-rw-r--r--sdext/source/pdfimport/inc/xmlemitter.hxx60
-rwxr-xr-xsdext/source/pdfimport/makefile.mk155
-rw-r--r--sdext/source/pdfimport/misc/makefile.mk51
-rw-r--r--sdext/source/pdfimport/misc/pdfihelper.cxx80
-rw-r--r--sdext/source/pdfimport/misc/pwdinteract.cxx163
-rw-r--r--sdext/source/pdfimport/odf/makefile.mk50
-rw-r--r--sdext/source/pdfimport/odf/odfemitter.cxx136
-rw-r--r--sdext/source/pdfimport/pdfiadaptor.cxx329
-rw-r--r--sdext/source/pdfimport/pdfiadaptor.hxx138
-rw-r--r--sdext/source/pdfimport/pdfisettings.pmk28
-rw-r--r--sdext/source/pdfimport/pdfparse/makefile.mk58
-rw-r--r--sdext/source/pdfimport/pdfparse/pdfentries.cxx1364
-rw-r--r--sdext/source/pdfimport/pdfparse/pdfparse.cxx701
-rw-r--r--sdext/source/pdfimport/sax/emitcontext.cxx190
-rw-r--r--sdext/source/pdfimport/sax/emitcontext.hxx60
-rw-r--r--sdext/source/pdfimport/sax/makefile.mk51
-rw-r--r--sdext/source/pdfimport/sax/saxattrlist.cxx104
-rw-r--r--sdext/source/pdfimport/sax/saxattrlist.hxx76
-rw-r--r--sdext/source/pdfimport/services.cxx188
-rwxr-xr-xsdext/source/pdfimport/test/export.map34
-rwxr-xr-xsdext/source/pdfimport/test/makefile.mk166
-rw-r--r--sdext/source/pdfimport/test/outputwrap.hxx72
-rw-r--r--sdext/source/pdfimport/test/pdf2xml.cxx105
-rw-r--r--sdext/source/pdfimport/test/pdfunzip.cxx538
-rw-r--r--sdext/source/pdfimport/test/testdocs/graphicformats.pdfbin0 -> 27149 bytes
-rw-r--r--sdext/source/pdfimport/test/testdocs/graphicformats_pdfi_unittest_draw.xml242
-rw-r--r--sdext/source/pdfimport/test/testdocs/graphicformats_pdfi_unittest_impress.xml242
-rw-r--r--sdext/source/pdfimport/test/testdocs/graphicformats_pdfi_unittest_writer.xml368
-rw-r--r--sdext/source/pdfimport/test/testdocs/makefile.mk81
-rw-r--r--sdext/source/pdfimport/test/testdocs/pictxt.pdfbin0 -> 24475 bytes
-rw-r--r--sdext/source/pdfimport/test/testdocs/pictxt_pdfi_unittest_draw.xml3379
-rw-r--r--sdext/source/pdfimport/test/testdocs/pictxt_pdfi_unittest_impress.xml3379
-rw-r--r--sdext/source/pdfimport/test/testdocs/pictxt_pdfi_unittest_writer.xml533
-rw-r--r--sdext/source/pdfimport/test/testdocs/txtpic.pdfbin0 -> 24486 bytes
-rw-r--r--sdext/source/pdfimport/test/testdocs/txtpic_pdfi_unittest_draw.xml3379
-rw-r--r--sdext/source/pdfimport/test/testdocs/txtpic_pdfi_unittest_impress.xml3379
-rw-r--r--sdext/source/pdfimport/test/testdocs/txtpic_pdfi_unittest_writer.xml533
-rw-r--r--sdext/source/pdfimport/test/testdocs/txtpictxt.pdfbin0 -> 24484 bytes
-rw-r--r--sdext/source/pdfimport/test/testdocs/txtpictxt_pdfi_unittest_draw.xml3379
-rw-r--r--sdext/source/pdfimport/test/testdocs/txtpictxt_pdfi_unittest_impress.xml3379
-rw-r--r--sdext/source/pdfimport/test/testdocs/txtpictxt_pdfi_unittest_writer.xml533
-rw-r--r--sdext/source/pdfimport/test/testdocs/verticaltext.pdfbin0 -> 16533 bytes
-rw-r--r--sdext/source/pdfimport/test/testdocs/verticaltext_pdfi_unittest_draw.xml216
-rw-r--r--sdext/source/pdfimport/test/testdocs/verticaltext_pdfi_unittest_impress.xml216
-rw-r--r--sdext/source/pdfimport/test/testdocs/verticaltext_pdfi_unittest_writer.xml339
-rwxr-xr-xsdext/source/pdfimport/test/testinput.odpbin0 -> 40660 bytes
-rwxr-xr-xsdext/source/pdfimport/test/testinput.pdfbin0 -> 67103 bytes
-rwxr-xr-xsdext/source/pdfimport/test/tests.cxx579
-rw-r--r--sdext/source/pdfimport/tree/drawtreevisiting.cxx1097
-rw-r--r--sdext/source/pdfimport/tree/drawtreevisiting.hxx120
-rw-r--r--sdext/source/pdfimport/tree/genericelements.cxx489
-rw-r--r--sdext/source/pdfimport/tree/genericelements.hxx323
-rw-r--r--sdext/source/pdfimport/tree/imagecontainer.cxx153
-rw-r--r--sdext/source/pdfimport/tree/imagecontainer.hxx61
-rw-r--r--sdext/source/pdfimport/tree/makefile.mk56
-rw-r--r--sdext/source/pdfimport/tree/pdfiprocessor.cxx1049
-rw-r--r--sdext/source/pdfimport/tree/pdfiprocessor.hxx294
-rw-r--r--sdext/source/pdfimport/tree/style.cxx257
-rw-r--r--sdext/source/pdfimport/tree/style.hxx181
-rw-r--r--sdext/source/pdfimport/tree/treevisiting.hxx80
-rw-r--r--sdext/source/pdfimport/tree/treevisitorfactory.cxx118
-rw-r--r--sdext/source/pdfimport/tree/writertreevisiting.cxx1218
-rw-r--r--sdext/source/pdfimport/tree/writertreevisiting.hxx116
-rwxr-xr-xsdext/source/pdfimport/wrapper/hash.cxx214
-rwxr-xr-xsdext/source/pdfimport/wrapper/keyword_list53
-rwxr-xr-xsdext/source/pdfimport/wrapper/makefile.mk53
-rwxr-xr-xsdext/source/pdfimport/wrapper/wrapper.cxx1112
-rw-r--r--sdext/source/pdfimport/xpdftest/binary_0_out.defbin0 -> 80097 bytes
-rw-r--r--sdext/source/pdfimport/xpdftest/binary_1_out.defbin0 -> 75159156 bytes
-rw-r--r--sdext/source/pdfimport/xpdftest/book.pdfbin0 -> 463628 bytes
-rw-r--r--sdext/source/pdfimport/xpdftest/makefile.mk59
-rw-r--r--sdext/source/pdfimport/xpdftest/testinput.odpbin0 -> 44591 bytes
-rw-r--r--sdext/source/pdfimport/xpdftest/testinput.pdfbin0 -> 64488 bytes
-rw-r--r--sdext/source/pdfimport/xpdftest/text_0_out.def202
-rw-r--r--sdext/source/pdfimport/xpdftest/text_1_out.def70338
-rw-r--r--sdext/source/pdfimport/xpdfwrapper/makefile.mk82
-rw-r--r--sdext/source/pdfimport/xpdfwrapper/pdfioutdev_gpl.cxx948
-rw-r--r--sdext/source/pdfimport/xpdfwrapper/pdfioutdev_gpl.hxx290
-rw-r--r--sdext/source/pdfimport/xpdfwrapper/pnghelper.cxx415
-rw-r--r--sdext/source/pdfimport/xpdfwrapper/pnghelper.hxx92
-rw-r--r--sdext/source/pdfimport/xpdfwrapper/wrapper_gpl.cxx214
-rwxr-xr-xsdext/source/presenter/PresenterAccessibility.cxx2487
-rwxr-xr-xsdext/source/presenter/PresenterAccessibility.hxx156
-rw-r--r--sdext/source/presenter/PresenterAnimation.cxx140
-rw-r--r--sdext/source/presenter/PresenterAnimation.hxx130
-rw-r--r--sdext/source/presenter/PresenterAnimator.cxx171
-rw-r--r--sdext/source/presenter/PresenterAnimator.hxx72
-rw-r--r--sdext/source/presenter/PresenterBitmapContainer.cxx498
-rw-r--r--sdext/source/presenter/PresenterBitmapContainer.hxx165
-rw-r--r--sdext/source/presenter/PresenterButton.cxx612
-rw-r--r--sdext/source/presenter/PresenterButton.hxx185
-rw-r--r--sdext/source/presenter/PresenterCanvasHelper.cxx328
-rw-r--r--sdext/source/presenter/PresenterCanvasHelper.hxx119
-rw-r--r--sdext/source/presenter/PresenterClock.cxx1449
-rw-r--r--sdext/source/presenter/PresenterClock.hxx199
-rw-r--r--sdext/source/presenter/PresenterComponent.cxx150
-rw-r--r--sdext/source/presenter/PresenterComponent.hxx55
-rw-r--r--sdext/source/presenter/PresenterConfigurationAccess.cxx410
-rw-r--r--sdext/source/presenter/PresenterConfigurationAccess.hxx205
-rw-r--r--sdext/source/presenter/PresenterController.cxx1376
-rw-r--r--sdext/source/presenter/PresenterController.hxx267
-rw-r--r--sdext/source/presenter/PresenterCurrentSlideObserver.cxx154
-rw-r--r--sdext/source/presenter/PresenterCurrentSlideObserver.hxx95
-rw-r--r--sdext/source/presenter/PresenterExtensionIdentifier.txx41
-rw-r--r--sdext/source/presenter/PresenterFrameworkObserver.cxx213
-rw-r--r--sdext/source/presenter/PresenterFrameworkObserver.hxx130
-rw-r--r--sdext/source/presenter/PresenterGeometryHelper.cxx334
-rw-r--r--sdext/source/presenter/PresenterGeometryHelper.hxx131
-rw-r--r--sdext/source/presenter/PresenterHelpView.cxx823
-rw-r--r--sdext/source/presenter/PresenterHelpView.hxx143
-rw-r--r--sdext/source/presenter/PresenterHelper.cxx93
-rw-r--r--sdext/source/presenter/PresenterHelper.hxx77
-rw-r--r--sdext/source/presenter/PresenterNotesView.cxx807
-rw-r--r--sdext/source/presenter/PresenterNotesView.hxx197
-rw-r--r--sdext/source/presenter/PresenterPaintManager.cxx175
-rw-r--r--sdext/source/presenter/PresenterPaintManager.hxx96
-rw-r--r--sdext/source/presenter/PresenterPane.cxx234
-rw-r--r--sdext/source/presenter/PresenterPane.hxx118
-rw-r--r--sdext/source/presenter/PresenterPaneAnimator.cxx1424
-rw-r--r--sdext/source/presenter/PresenterPaneAnimator.hxx94
-rw-r--r--sdext/source/presenter/PresenterPaneBase.cxx558
-rw-r--r--sdext/source/presenter/PresenterPaneBase.hxx173
-rw-r--r--sdext/source/presenter/PresenterPaneBorderManager.cxx582
-rw-r--r--sdext/source/presenter/PresenterPaneBorderManager.hxx174
-rw-r--r--sdext/source/presenter/PresenterPaneBorderPainter.cxx1101
-rw-r--r--sdext/source/presenter/PresenterPaneBorderPainter.hxx163
-rw-r--r--sdext/source/presenter/PresenterPaneContainer.cxx447
-rw-r--r--sdext/source/presenter/PresenterPaneContainer.hxx197
-rw-r--r--sdext/source/presenter/PresenterPaneFactory.cxx378
-rw-r--r--sdext/source/presenter/PresenterPaneFactory.hxx139
-rw-r--r--sdext/source/presenter/PresenterProtocolHandler.cxx1001
-rw-r--r--sdext/source/presenter/PresenterProtocolHandler.hxx103
-rw-r--r--sdext/source/presenter/PresenterScreen.cxx927
-rw-r--r--sdext/source/presenter/PresenterScreen.hxx247
-rw-r--r--sdext/source/presenter/PresenterScrollBar.cxx1345
-rw-r--r--sdext/source/presenter/PresenterScrollBar.hxx337
-rw-r--r--sdext/source/presenter/PresenterSlidePreview.cxx427
-rw-r--r--sdext/source/presenter/PresenterSlidePreview.hxx173
-rw-r--r--sdext/source/presenter/PresenterSlideShowView.cxx1156
-rw-r--r--sdext/source/presenter/PresenterSlideShowView.hxx297
-rw-r--r--sdext/source/presenter/PresenterSlideSorter.cxx2321
-rw-r--r--sdext/source/presenter/PresenterSlideSorter.hxx233
-rw-r--r--sdext/source/presenter/PresenterSprite.cxx289
-rw-r--r--sdext/source/presenter/PresenterSprite.hxx99
-rw-r--r--sdext/source/presenter/PresenterSpritePane.cxx260
-rw-r--r--sdext/source/presenter/PresenterSpritePane.hxx126
-rwxr-xr-xsdext/source/presenter/PresenterTextView.cxx1595
-rwxr-xr-xsdext/source/presenter/PresenterTextView.hxx319
-rw-r--r--sdext/source/presenter/PresenterTheme.cxx1414
-rw-r--r--sdext/source/presenter/PresenterTheme.hxx157
-rw-r--r--sdext/source/presenter/PresenterTimer.cxx678
-rw-r--r--sdext/source/presenter/PresenterTimer.hxx143
-rw-r--r--sdext/source/presenter/PresenterToolBar.cxx2458
-rw-r--r--sdext/source/presenter/PresenterToolBar.hxx315
-rw-r--r--sdext/source/presenter/PresenterUIPainter.cxx256
-rw-r--r--sdext/source/presenter/PresenterUIPainter.hxx70
-rw-r--r--sdext/source/presenter/PresenterViewFactory.cxx653
-rw-r--r--sdext/source/presenter/PresenterViewFactory.hxx186
-rw-r--r--sdext/source/presenter/PresenterWindowManager.cxx1641
-rw-r--r--sdext/source/presenter/PresenterWindowManager.hxx259
-rw-r--r--sdext/source/presenter/bitmaps/Background.pngbin0 -> 3474 bytes
-rw-r--r--sdext/source/presenter/bitmaps/BorderActiveBottom.pngbin0 -> 214 bytes
-rw-r--r--sdext/source/presenter/bitmaps/BorderActiveBottomCallout.pngbin0 -> 1425 bytes
-rw-r--r--sdext/source/presenter/bitmaps/BorderActiveBottomLeft.pngbin0 -> 598 bytes
-rw-r--r--sdext/source/presenter/bitmaps/BorderActiveBottomRight.pngbin0 -> 626 bytes
-rw-r--r--sdext/source/presenter/bitmaps/BorderActiveLeft.pngbin0 -> 145 bytes
-rw-r--r--sdext/source/presenter/bitmaps/BorderActiveRight.pngbin0 -> 141 bytes
-rw-r--r--sdext/source/presenter/bitmaps/BorderActiveTop.pngbin0 -> 148 bytes
-rw-r--r--sdext/source/presenter/bitmaps/BorderActiveTopLeft.pngbin0 -> 442 bytes
-rw-r--r--sdext/source/presenter/bitmaps/BorderActiveTopRight.pngbin0 -> 438 bytes
-rw-r--r--sdext/source/presenter/bitmaps/BorderBottom.pngbin0 -> 164 bytes
-rw-r--r--sdext/source/presenter/bitmaps/BorderBottomLeft.pngbin0 -> 576 bytes
-rw-r--r--sdext/source/presenter/bitmaps/BorderBottomRight.pngbin0 -> 587 bytes
-rw-r--r--sdext/source/presenter/bitmaps/BorderCurrentSlideBottom.pngbin0 -> 140 bytes
-rw-r--r--sdext/source/presenter/bitmaps/BorderCurrentSlideBottomLeft.pngbin0 -> 161 bytes
-rw-r--r--sdext/source/presenter/bitmaps/BorderCurrentSlideBottomRight.pngbin0 -> 159 bytes
-rw-r--r--sdext/source/presenter/bitmaps/BorderCurrentSlideLeft.pngbin0 -> 140 bytes
-rw-r--r--sdext/source/presenter/bitmaps/BorderCurrentSlideRight.pngbin0 -> 140 bytes
-rw-r--r--sdext/source/presenter/bitmaps/BorderCurrentSlideTop.pngbin0 -> 140 bytes
-rw-r--r--sdext/source/presenter/bitmaps/BorderCurrentSlideTopLeft.pngbin0 -> 164 bytes
-rw-r--r--sdext/source/presenter/bitmaps/BorderCurrentSlideTopRight.pngbin0 -> 164 bytes
-rw-r--r--sdext/source/presenter/bitmaps/BorderLeft.pngbin0 -> 147 bytes
-rw-r--r--sdext/source/presenter/bitmaps/BorderRight.pngbin0 -> 177 bytes
-rw-r--r--sdext/source/presenter/bitmaps/BorderToolbarBottom.pngbin0 -> 112 bytes
-rw-r--r--sdext/source/presenter/bitmaps/BorderToolbarLeft.pngbin0 -> 119 bytes
-rw-r--r--sdext/source/presenter/bitmaps/BorderToolbarRight.pngbin0 -> 121 bytes
-rw-r--r--sdext/source/presenter/bitmaps/BorderToolbarTop.pngbin0 -> 120 bytes
-rw-r--r--sdext/source/presenter/bitmaps/BorderToolbarTopLeft.pngbin0 -> 268 bytes
-rw-r--r--sdext/source/presenter/bitmaps/BorderToolbarTopRight.pngbin0 -> 244 bytes
-rw-r--r--sdext/source/presenter/bitmaps/BorderTop.pngbin0 -> 174 bytes
-rw-r--r--sdext/source/presenter/bitmaps/BorderTopLeft.pngbin0 -> 426 bytes
-rw-r--r--sdext/source/presenter/bitmaps/BorderTopRight.pngbin0 -> 414 bytes
-rw-r--r--sdext/source/presenter/bitmaps/ButtonEffectNextDisabled.pngbin0 -> 258 bytes
-rw-r--r--sdext/source/presenter/bitmaps/ButtonEffectNextMouseOver.pngbin0 -> 259 bytes
-rw-r--r--sdext/source/presenter/bitmaps/ButtonEffectNextNormal.pngbin0 -> 262 bytes
-rw-r--r--sdext/source/presenter/bitmaps/ButtonEffectNextSelected.pngbin0 -> 257 bytes
-rw-r--r--sdext/source/presenter/bitmaps/ButtonFrameCenterMouseOver.pngbin0 -> 131 bytes
-rw-r--r--sdext/source/presenter/bitmaps/ButtonFrameCenterNormal.pngbin0 -> 138 bytes
-rw-r--r--sdext/source/presenter/bitmaps/ButtonFrameLeftMouseOver.pngbin0 -> 166 bytes
-rw-r--r--sdext/source/presenter/bitmaps/ButtonFrameLeftNormal.pngbin0 -> 166 bytes
-rw-r--r--sdext/source/presenter/bitmaps/ButtonFrameRightMouseOver.pngbin0 -> 163 bytes
-rw-r--r--sdext/source/presenter/bitmaps/ButtonFrameRightNormal.pngbin0 -> 163 bytes
-rw-r--r--sdext/source/presenter/bitmaps/ButtonHelpDisabled.pngbin0 -> 543 bytes
-rw-r--r--sdext/source/presenter/bitmaps/ButtonHelpMouseOver.pngbin0 -> 538 bytes
-rw-r--r--sdext/source/presenter/bitmaps/ButtonHelpNormal.pngbin0 -> 550 bytes
-rw-r--r--sdext/source/presenter/bitmaps/ButtonHelpSelected.pngbin0 -> 623 bytes
-rw-r--r--sdext/source/presenter/bitmaps/ButtonMinusDisabled.pngbin0 -> 243 bytes
-rw-r--r--sdext/source/presenter/bitmaps/ButtonMinusMouseOver.pngbin0 -> 239 bytes
-rw-r--r--sdext/source/presenter/bitmaps/ButtonMinusNormal.pngbin0 -> 244 bytes
-rw-r--r--sdext/source/presenter/bitmaps/ButtonMinusSelected.pngbin0 -> 245 bytes
-rw-r--r--sdext/source/presenter/bitmaps/ButtonNotesDisabled.pngbin0 -> 321 bytes
-rw-r--r--sdext/source/presenter/bitmaps/ButtonNotesMouseOver.pngbin0 -> 314 bytes
-rw-r--r--sdext/source/presenter/bitmaps/ButtonNotesNormal.pngbin0 -> 324 bytes
-rw-r--r--sdext/source/presenter/bitmaps/ButtonNotesSelected.pngbin0 -> 318 bytes
-rw-r--r--sdext/source/presenter/bitmaps/ButtonPlusDisabled.pngbin0 -> 277 bytes
-rw-r--r--sdext/source/presenter/bitmaps/ButtonPlusMouseOver.pngbin0 -> 275 bytes
-rw-r--r--sdext/source/presenter/bitmaps/ButtonPlusNormal.pngbin0 -> 279 bytes
-rw-r--r--sdext/source/presenter/bitmaps/ButtonPlusSelected.pngbin0 -> 280 bytes
-rw-r--r--sdext/source/presenter/bitmaps/ButtonSlideNextDisabled.pngbin0 -> 246 bytes
-rw-r--r--sdext/source/presenter/bitmaps/ButtonSlideNextMouseOver.pngbin0 -> 250 bytes
-rw-r--r--sdext/source/presenter/bitmaps/ButtonSlideNextNormal.pngbin0 -> 250 bytes
-rw-r--r--sdext/source/presenter/bitmaps/ButtonSlidePreviousDisabled.pngbin0 -> 270 bytes
-rw-r--r--sdext/source/presenter/bitmaps/ButtonSlidePreviousMouseOver.pngbin0 -> 263 bytes
-rw-r--r--sdext/source/presenter/bitmaps/ButtonSlidePreviousNormal.pngbin0 -> 271 bytes
-rw-r--r--sdext/source/presenter/bitmaps/ButtonSlidePreviousSelected.pngbin0 -> 270 bytes
-rw-r--r--sdext/source/presenter/bitmaps/ButtonSlideSorterDisabled.pngbin0 -> 342 bytes
-rw-r--r--sdext/source/presenter/bitmaps/ButtonSlideSorterMouseOver.pngbin0 -> 338 bytes
-rw-r--r--sdext/source/presenter/bitmaps/ButtonSlideSorterNormal.pngbin0 -> 347 bytes
-rw-r--r--sdext/source/presenter/bitmaps/ButtonSlideSorterSelected.pngbin0 -> 338 bytes
-rw-r--r--sdext/source/presenter/bitmaps/LabelMouseOverCenter.pngbin0 -> 208 bytes
-rw-r--r--sdext/source/presenter/bitmaps/LabelMouseOverLeft.pngbin0 -> 157 bytes
-rw-r--r--sdext/source/presenter/bitmaps/LabelMouseOverRight.pngbin0 -> 154 bytes
-rw-r--r--sdext/source/presenter/bitmaps/ScrollbarArrowDownDisabled.pngbin0 -> 324 bytes
-rw-r--r--sdext/source/presenter/bitmaps/ScrollbarArrowDownMouseOver.pngbin0 -> 324 bytes
-rw-r--r--sdext/source/presenter/bitmaps/ScrollbarArrowDownNormal.pngbin0 -> 331 bytes
-rw-r--r--sdext/source/presenter/bitmaps/ScrollbarArrowDownSelected.pngbin0 -> 369 bytes
-rw-r--r--sdext/source/presenter/bitmaps/ScrollbarArrowUpDisabled.pngbin0 -> 319 bytes
-rw-r--r--sdext/source/presenter/bitmaps/ScrollbarArrowUpMouseOver.pngbin0 -> 323 bytes
-rw-r--r--sdext/source/presenter/bitmaps/ScrollbarArrowUpNormal.pngbin0 -> 329 bytes
-rw-r--r--sdext/source/presenter/bitmaps/ScrollbarArrowUpSelected.pngbin0 -> 365 bytes
-rw-r--r--sdext/source/presenter/bitmaps/ScrollbarPagerMiddleMouseOver.pngbin0 -> 125 bytes
-rw-r--r--sdext/source/presenter/bitmaps/ScrollbarPagerMiddleNormal.pngbin0 -> 119 bytes
-rw-r--r--sdext/source/presenter/bitmaps/ScrollbarThumbBottomMouseOver.pngbin0 -> 120 bytes
-rw-r--r--sdext/source/presenter/bitmaps/ScrollbarThumbBottomNormal.pngbin0 -> 120 bytes
-rw-r--r--sdext/source/presenter/bitmaps/ScrollbarThumbMiddleMouseOver.pngbin0 -> 118 bytes
-rw-r--r--sdext/source/presenter/bitmaps/ScrollbarThumbMiddleNormal.pngbin0 -> 118 bytes
-rw-r--r--sdext/source/presenter/bitmaps/ScrollbarThumbTopMouseOver.pngbin0 -> 120 bytes
-rw-r--r--sdext/source/presenter/bitmaps/ScrollbarThumbTopNormal.pngbin0 -> 120 bytes
-rw-r--r--sdext/source/presenter/bitmaps/ViewBackground.pngbin0 -> 177 bytes
-rw-r--r--sdext/source/presenter/delzip1
-rwxr-xr-xsdext/source/presenter/description.xml37
-rwxr-xr-xsdext/source/presenter/help/component.txt2
-rw-r--r--sdext/source/presenter/help/en-US/com.sun.PresenterScreen/makefile.mk51
-rw-r--r--sdext/source/presenter/help/en-US/com.sun.PresenterScreen/presenter.xhp186
-rwxr-xr-xsdext/source/presenter/makefile.mk405
-rw-r--r--sdext/source/presenter/manifest.xml18
-rw-r--r--sdext/source/presenter/registry/data/org/openoffice/Office/Jobs.xcu17
-rw-r--r--sdext/source/presenter/registry/data/org/openoffice/Office/ProtocolHandler.xcu10
-rw-r--r--sdext/source/presenter/registry/data/org/openoffice/Office/extension/PresenterScreen.xcu1224
-rw-r--r--sdext/source/presenter/registry/data/org/openoffice/Office/extension/makefile.mk51
-rw-r--r--sdext/source/presenter/registry/data/org/openoffice/Office/makefile.mk48
-rw-r--r--sdext/source/presenter/registry/schema/org/openoffice/Office/extension/PresenterScreen.xcs469
-rw-r--r--sdext/util/makefile.pmk37
-rw-r--r--set_soenv.in2573
-rw-r--r--sfx2/inc/QuerySaveDocument.hxx45
-rw-r--r--sfx2/inc/about.hxx83
-rw-r--r--sfx2/inc/arrdecl.hxx91
-rw-r--r--sfx2/inc/basmgr.hxx35
-rw-r--r--sfx2/inc/bitset.hxx257
-rwxr-xr-xsfx2/inc/brokenpackageint.hxx101
-rw-r--r--sfx2/inc/configmgr.hxx39
-rw-r--r--sfx2/inc/dinfedt.hxx79
-rw-r--r--sfx2/inc/docinsert.hxx89
-rw-r--r--sfx2/inc/docvor.hxx158
-rw-r--r--sfx2/inc/filedlghelper.hrc51
-rw-r--r--sfx2/inc/frmload.hxx153
-rw-r--r--sfx2/inc/fwkhelper.hxx35
-rw-r--r--sfx2/inc/guisaveas.hxx115
-rw-r--r--sfx2/inc/idpool.hxx63
-rw-r--r--sfx2/inc/imagemgr.hxx36
-rw-r--r--sfx2/inc/imgmgr.hxx67
-rw-r--r--sfx2/inc/inettbc.hxx80
-rw-r--r--sfx2/inc/macro.hxx183
-rw-r--r--sfx2/inc/mailmodelapi.hxx141
-rw-r--r--sfx2/inc/makefile.mk48
-rw-r--r--sfx2/inc/mieclip.hxx63
-rw-r--r--sfx2/inc/minfitem.hxx78
-rw-r--r--sfx2/inc/msgnodei.hxx219
-rw-r--r--sfx2/inc/orgmgr.hxx106
-rw-r--r--sfx2/inc/pch/precompiled_sfx2.cxx29
-rw-r--r--sfx2/inc/pch/precompiled_sfx2.hxx669
-rw-r--r--sfx2/inc/progind.hxx83
-rw-r--r--sfx2/inc/resmgr.hxx75
-rw-r--r--sfx2/inc/sfx2/DocumentMetadataAccess.hxx215
-rw-r--r--sfx2/inc/sfx2/Metadatable.hxx187
-rw-r--r--sfx2/inc/sfx2/XmlIdRegistry.hxx98
-rw-r--r--sfx2/inc/sfx2/app.hxx336
-rw-r--r--sfx2/inc/sfx2/appuno.hxx135
-rw-r--r--sfx2/inc/sfx2/basedlgs.hxx230
-rw-r--r--sfx2/inc/sfx2/bindings.hxx262
-rw-r--r--sfx2/inc/sfx2/chalign.hxx63
-rw-r--r--sfx2/inc/sfx2/childwin.hxx369
-rw-r--r--sfx2/inc/sfx2/cntids.hrc428
-rw-r--r--sfx2/inc/sfx2/controlwrapper.hxx671
-rw-r--r--sfx2/inc/sfx2/ctrlitem.hxx111
-rw-r--r--sfx2/inc/sfx2/dialogs.hrc38
-rw-r--r--sfx2/inc/sfx2/dinfdlg.hxx575
-rw-r--r--sfx2/inc/sfx2/dispatch.hxx366
-rw-r--r--sfx2/inc/sfx2/dllapi.h42
-rw-r--r--sfx2/inc/sfx2/docfac.hxx141
-rw-r--r--sfx2/inc/sfx2/docfile.hxx342
-rw-r--r--sfx2/inc/sfx2/docfilt.hxx156
-rw-r--r--sfx2/inc/sfx2/docinf.hxx81
-rw-r--r--sfx2/inc/sfx2/dockwin.hxx142
-rw-r--r--sfx2/inc/sfx2/docmacromode.hxx332
-rw-r--r--sfx2/inc/sfx2/docstoragemodifylistener.hxx95
-rw-r--r--sfx2/inc/sfx2/doctdlg.hxx86
-rw-r--r--sfx2/inc/sfx2/doctempl.hxx148
-rw-r--r--sfx2/inc/sfx2/event.hxx119
-rw-r--r--sfx2/inc/sfx2/evntconf.hxx123
-rw-r--r--sfx2/inc/sfx2/fcontnr.hxx178
-rw-r--r--sfx2/inc/sfx2/filedlghelper.hxx326
-rw-r--r--sfx2/inc/sfx2/frame.hxx313
-rw-r--r--sfx2/inc/sfx2/frmdescr.hxx294
-rw-r--r--sfx2/inc/sfx2/frmhtml.hxx59
-rw-r--r--sfx2/inc/sfx2/frmhtmlw.hxx93
-rw-r--r--sfx2/inc/sfx2/genlink.hxx56
-rw-r--r--sfx2/inc/sfx2/hintpost.hxx80
-rw-r--r--sfx2/inc/sfx2/htmlmode.hxx68
-rw-r--r--sfx2/inc/sfx2/imgdef.hxx33
-rw-r--r--sfx2/inc/sfx2/ipclient.hxx107
-rw-r--r--sfx2/inc/sfx2/itemconnect.hxx595
-rw-r--r--sfx2/inc/sfx2/itemwrapper.hxx207
-rw-r--r--sfx2/inc/sfx2/layout-post.hxx40
-rw-r--r--sfx2/inc/sfx2/layout-pre.hxx49
-rw-r--r--sfx2/inc/sfx2/layout-tabdlg.hxx46
-rw-r--r--sfx2/inc/sfx2/layout.hxx78
-rw-r--r--sfx2/inc/sfx2/linkmgr.hxx168
-rw-r--r--sfx2/inc/sfx2/linksrc.hxx135
-rw-r--r--sfx2/inc/sfx2/lnkbase.hxx185
-rw-r--r--sfx2/inc/sfx2/macrconf.hxx155
-rw-r--r--sfx2/inc/sfx2/macropg.hxx150
-rw-r--r--sfx2/inc/sfx2/mgetempl.hxx115
-rw-r--r--sfx2/inc/sfx2/minarray.hxx529
-rw-r--r--sfx2/inc/sfx2/minstack.hxx99
-rw-r--r--sfx2/inc/sfx2/mnuitem.hxx176
-rw-r--r--sfx2/inc/sfx2/mnumgr.hxx148
-rw-r--r--sfx2/inc/sfx2/module.hxx115
-rw-r--r--sfx2/inc/sfx2/msg.hxx344
-rw-r--r--sfx2/inc/sfx2/msgpool.hxx95
-rw-r--r--sfx2/inc/sfx2/navigat.hxx64
-rw-r--r--sfx2/inc/sfx2/new.hxx112
-rw-r--r--sfx2/inc/sfx2/newstyle.hxx67
-rw-r--r--sfx2/inc/sfx2/objface.hxx154
-rw-r--r--sfx2/inc/sfx2/objitem.hxx54
-rw-r--r--sfx2/inc/sfx2/objsh.hxx893
-rw-r--r--sfx2/inc/sfx2/objuno.hxx192
-rw-r--r--sfx2/inc/sfx2/opengrf.hxx70
-rw-r--r--sfx2/inc/sfx2/passwd.hxx89
-rw-r--r--sfx2/inc/sfx2/printer.hxx143
-rw-r--r--sfx2/inc/sfx2/printopt.hxx155
-rw-r--r--sfx2/inc/sfx2/prnmon.hxx104
-rw-r--r--sfx2/inc/sfx2/progress.hxx91
-rw-r--r--sfx2/inc/sfx2/querystatus.hxx61
-rw-r--r--sfx2/inc/sfx2/request.hxx139
-rwxr-xr-xsfx2/inc/sfx2/securitypage.hxx58
-rwxr-xr-xsfx2/inc/sfx2/sfx.hrc449
-rw-r--r--sfx2/inc/sfx2/sfxbasecontroller.hxx418
-rw-r--r--sfx2/inc/sfx2/sfxbasemodel.hxx1596
-rw-r--r--sfx2/inc/sfx2/sfxdefs.hxx39
-rw-r--r--sfx2/inc/sfx2/sfxdlg.hxx160
-rw-r--r--sfx2/inc/sfx2/sfxhtml.hxx133
-rw-r--r--sfx2/inc/sfx2/sfxmodelfactory.hxx75
-rw-r--r--sfx2/inc/sfx2/sfxsids.hrc1034
-rw-r--r--sfx2/inc/sfx2/sfxstatuslistener.hxx93
-rw-r--r--sfx2/inc/sfx2/sfxuno.hxx657
-rw-r--r--sfx2/inc/sfx2/shell.hxx393
-rw-r--r--sfx2/inc/sfx2/signaturestate.hxx44
-rw-r--r--sfx2/inc/sfx2/styfitem.hxx121
-rw-r--r--sfx2/inc/sfx2/styledlg.hxx61
-rw-r--r--sfx2/inc/sfx2/tabdlg.hxx318
-rw-r--r--sfx2/inc/sfx2/taskpane.hxx245
-rw-r--r--sfx2/inc/sfx2/tbxctrl.hxx452
-rw-r--r--sfx2/inc/sfx2/templdlg.hxx102
-rw-r--r--sfx2/inc/sfx2/titledockwin.hxx162
-rw-r--r--sfx2/inc/sfx2/unoctitm.hxx211
-rw-r--r--sfx2/inc/sfx2/userinputinterception.hxx83
-rw-r--r--sfx2/inc/sfx2/viewfrm.hxx350
-rw-r--r--sfx2/inc/sfx2/viewsh.hxx383
-rw-r--r--sfx2/inc/sfxbasic.hxx42
-rw-r--r--sfx2/inc/sfxhelp.hxx74
-rw-r--r--sfx2/inc/sfxresid.hxx58
-rw-r--r--sfx2/inc/sorgitm.hxx54
-rw-r--r--sfx2/inc/srchdlg.hxx105
-rw-r--r--sfx2/inc/stbitem.hxx148
-rw-r--r--sfx2/inc/tplpitem.hxx56
-rw-r--r--sfx2/inc/viewfac.hxx75
-rw-r--r--sfx2/prj/build.lst25
-rw-r--r--sfx2/prj/d.lst46
-rw-r--r--sfx2/qa/complex/CheckGlobalEventBroadcaster_writer1.java243
-rw-r--r--sfx2/qa/complex/DocHelper/DialogThread.java95
-rw-r--r--sfx2/qa/complex/DocHelper/WriterHelper.java296
-rw-r--r--sfx2/qa/complex/DocHelper/makefile.mk46
-rw-r--r--sfx2/qa/complex/DocumentMetaData.java546
-rw-r--r--sfx2/qa/complex/DocumentMetadataAccessTest.java1275
-rw-r--r--sfx2/qa/complex/docinfo/DocumentProperties.java269
-rw-r--r--sfx2/qa/complex/docinfo/makefile.mk56
-rw-r--r--sfx2/qa/complex/makefile.mk61
-rw-r--r--sfx2/qa/complex/standalonedocumentinfo/StandaloneDocumentInfoTest.java31
-rw-r--r--sfx2/qa/complex/standalonedocumentinfo/StandaloneDocumentInfoUnitTest.java69
-rw-r--r--sfx2/qa/complex/standalonedocumentinfo/Test01.java161
-rw-r--r--sfx2/qa/complex/standalonedocumentinfo/TestHelper.java48
-rw-r--r--sfx2/qa/complex/standalonedocumentinfo/makefile.mk85
-rw-r--r--sfx2/qa/complex/testdocuments/CUSTOM.odtbin0 -> 1021 bytes
-rw-r--r--sfx2/qa/complex/testdocuments/TEST.odtbin0 -> 13803 bytes
-rw-r--r--sfx2/qa/complex/testdocuments/TESTRDFA.odtbin0 -> 7540 bytes
-rw-r--r--sfx2/qa/complex/tests.sce3
-rw-r--r--sfx2/qa/cppunit/makefile.mk74
-rw-r--r--sfx2/qa/cppunit/test_metadatable.cxx280
-rw-r--r--sfx2/qa/cppunit/version.map34
-rw-r--r--sfx2/qa/unoapi/Test.java51
-rw-r--r--sfx2/qa/unoapi/knownissues.xcl5
-rw-r--r--sfx2/qa/unoapi/makefile.mk48
-rw-r--r--sfx2/qa/unoapi/sfx.sce5
-rw-r--r--sfx2/qa/unoapi/testdocuments/SfxStandaloneDocInfoObject.sdwbin0 -> 8192 bytes
-rw-r--r--sfx2/qa/unoapi/testdocuments/report.stwbin0 -> 11186 bytes
-rw-r--r--sfx2/qa/unoapi/testdocuments/report2.stwbin0 -> 11000 bytes
-rw-r--r--sfx2/sdi/appslots.sdi295
-rw-r--r--sfx2/sdi/docslots.sdi241
-rw-r--r--sfx2/sdi/frmslots.sdi454
-rw-r--r--sfx2/sdi/makefile.mk59
-rwxr-xr-xsfx2/sdi/sfx.sdi8277
-rw-r--r--sfx2/sdi/sfxitems.sdi90
-rw-r--r--sfx2/sdi/sfxslots.sdi45
-rw-r--r--sfx2/sdi/viwslots.sdi110
-rw-r--r--sfx2/source/appl/app.cxx845
-rw-r--r--sfx2/source/appl/app.hrc274
-rw-r--r--sfx2/source/appl/app.src1094
-rw-r--r--sfx2/source/appl/appbas.cxx590
-rw-r--r--sfx2/source/appl/appbaslib.cxx249
-rw-r--r--sfx2/source/appl/appcfg.cxx1058
-rw-r--r--sfx2/source/appl/appchild.cxx176
-rw-r--r--sfx2/source/appl/appdata.cxx187
-rw-r--r--sfx2/source/appl/appdde.cxx710
-rw-r--r--sfx2/source/appl/appinit.cxx321
-rw-r--r--sfx2/source/appl/appmain.cxx207
-rw-r--r--sfx2/source/appl/appmisc.cxx335
-rw-r--r--sfx2/source/appl/appopen.cxx1332
-rw-r--r--sfx2/source/appl/appquit.cxx177
-rw-r--r--sfx2/source/appl/appreg.cxx153
-rw-r--r--sfx2/source/appl/appserv.cxx1355
-rwxr-xr-xsfx2/source/appl/appuno.cxx2511
-rw-r--r--sfx2/source/appl/childwin.cxx855
-rw-r--r--sfx2/source/appl/dde.hrc40
-rw-r--r--sfx2/source/appl/dde.src91
-rw-r--r--sfx2/source/appl/fileobj.cxx706
-rw-r--r--sfx2/source/appl/fileobj.hxx95
-rw-r--r--sfx2/source/appl/fwkhelper.cxx59
-rw-r--r--sfx2/source/appl/helpdispatch.cxx123
-rw-r--r--sfx2/source/appl/helpdispatch.hxx54
-rw-r--r--sfx2/source/appl/helpinterceptor.cxx367
-rw-r--r--sfx2/source/appl/helpinterceptor.hxx173
-rw-r--r--sfx2/source/appl/imagemgr.cxx234
-rw-r--r--sfx2/source/appl/imestatuswindow.cxx231
-rw-r--r--sfx2/source/appl/imestatuswindow.hxx125
-rw-r--r--sfx2/source/appl/impldde.cxx448
-rw-r--r--sfx2/source/appl/impldde.hxx78
-rw-r--r--sfx2/source/appl/linkmgr2.cxx636
-rw-r--r--sfx2/source/appl/linksrc.cxx435
-rw-r--r--sfx2/source/appl/lnkbase2.cxx699
-rw-r--r--sfx2/source/appl/makefile.mk159
-rw-r--r--sfx2/source/appl/module.cxx450
-rw-r--r--sfx2/source/appl/newhelp.cxx3492
-rw-r--r--sfx2/source/appl/newhelp.hrc84
-rw-r--r--sfx2/source/appl/newhelp.hxx614
-rw-r--r--sfx2/source/appl/newhelp.src580
-rw-r--r--sfx2/source/appl/opengrf.cxx295
-rw-r--r--sfx2/source/appl/panelist.hxx50
-rw-r--r--sfx2/source/appl/sfx.src133
-rw-r--r--sfx2/source/appl/sfxdll.cxx69
-rw-r--r--sfx2/source/appl/sfxhelp.cxx1018
-rw-r--r--sfx2/source/appl/sfxpicklist.cxx473
-rw-r--r--sfx2/source/appl/shutdownicon.cxx957
-rw-r--r--sfx2/source/appl/shutdownicon.hxx175
-rw-r--r--sfx2/source/appl/shutdowniconOs2.cxx94
-rw-r--r--sfx2/source/appl/shutdowniconaqua.mm510
-rw-r--r--sfx2/source/appl/shutdowniconunx.cxx409
-rw-r--r--sfx2/source/appl/shutdowniconw32.cxx977
-rw-r--r--sfx2/source/appl/workwin.cxx3142
-rw-r--r--sfx2/source/appl/xpackcreator.cxx202
-rw-r--r--sfx2/source/appl/xpackcreator.hxx75
-rw-r--r--sfx2/source/bastyp/bastyp.hrc38
-rw-r--r--sfx2/source/bastyp/bastyp.src66
-rw-r--r--sfx2/source/bastyp/bitset.cxx395
-rw-r--r--sfx2/source/bastyp/fltfnc.cxx1227
-rw-r--r--sfx2/source/bastyp/fltfnc.src75
-rw-r--r--sfx2/source/bastyp/fltlst.cxx118
-rw-r--r--sfx2/source/bastyp/fltlst.hxx67
-rw-r--r--sfx2/source/bastyp/frmhtml.cxx163
-rw-r--r--sfx2/source/bastyp/frmhtmlw.cxx381
-rw-r--r--sfx2/source/bastyp/helper.cxx879
-rw-r--r--sfx2/source/bastyp/makefile.mk66
-rw-r--r--sfx2/source/bastyp/mieclip.cxx95
-rw-r--r--sfx2/source/bastyp/minarray.cxx736
-rw-r--r--sfx2/source/bastyp/misc.cxx75
-rw-r--r--sfx2/source/bastyp/progress.cxx753
-rw-r--r--sfx2/source/bastyp/sfxhtml.cxx447
-rw-r--r--sfx2/source/bastyp/sfxresid.cxx73
-rw-r--r--sfx2/source/config/config.hrc41
-rw-r--r--sfx2/source/config/config.src35
-rw-r--r--sfx2/source/config/evntconf.cxx301
-rw-r--r--sfx2/source/config/makefile.mk47
-rw-r--r--sfx2/source/control/bindings.cxx2433
-rw-r--r--sfx2/source/control/ctrlitem.cxx466
-rw-r--r--sfx2/source/control/dispatch.cxx3181
-rw-r--r--sfx2/source/control/macrconf.cxx874
-rw-r--r--sfx2/source/control/macro.cxx708
-rw-r--r--sfx2/source/control/makefile.mk73
-rw-r--r--sfx2/source/control/minfitem.cxx107
-rw-r--r--sfx2/source/control/msg.cxx66
-rw-r--r--sfx2/source/control/msgpool.cxx422
-rw-r--r--sfx2/source/control/objface.cxx685
-rw-r--r--sfx2/source/control/querystatus.cxx241
-rw-r--r--sfx2/source/control/request.cxx978
-rw-r--r--sfx2/source/control/sfxstatuslistener.cxx290
-rw-r--r--sfx2/source/control/shell.cxx1298
-rw-r--r--sfx2/source/control/sorgitm.cxx136
-rw-r--r--sfx2/source/control/statcach.cxx577
-rw-r--r--sfx2/source/control/unoctitm.cxx1013
-rw-r--r--sfx2/source/dialog/about.cxx425
-rw-r--r--sfx2/source/dialog/alienwarn.cxx177
-rw-r--r--sfx2/source/dialog/alienwarn.hrc61
-rw-r--r--sfx2/source/dialog/alienwarn.src91
-rw-r--r--sfx2/source/dialog/basedlgs.cxx1082
-rw-r--r--sfx2/source/dialog/dialog.hrc84
-rw-r--r--sfx2/source/dialog/dialog.src132
-rwxr-xr-xsfx2/source/dialog/dinfdlg.cxx2479
-rw-r--r--sfx2/source/dialog/dinfdlg.hrc177
-rwxr-xr-xsfx2/source/dialog/dinfdlg.src906
-rw-r--r--sfx2/source/dialog/dinfedt.cxx66
-rw-r--r--sfx2/source/dialog/dinfedt.hrc38
-rw-r--r--sfx2/source/dialog/dinfedt.src121
-rw-r--r--sfx2/source/dialog/dockwin.cxx1994
-rw-r--r--sfx2/source/dialog/filedlghelper.cxx2904
-rw-r--r--sfx2/source/dialog/filedlghelper.src173
-rw-r--r--sfx2/source/dialog/filedlgimpl.hxx239
-rw-r--r--sfx2/source/dialog/filtergrouping.cxx1274
-rw-r--r--sfx2/source/dialog/filtergrouping.hxx106
-rw-r--r--sfx2/source/dialog/intro.cxx110
-rw-r--r--sfx2/source/dialog/itemconnect.cxx408
-rw-r--r--sfx2/source/dialog/mailmodel.cxx960
-rw-r--r--sfx2/source/dialog/mailmodelapi.cxx695
-rw-r--r--sfx2/source/dialog/mailwindow.src76
-rwxr-xr-xsfx2/source/dialog/makefile.mk127
-rw-r--r--sfx2/source/dialog/mgetempl.cxx672
-rw-r--r--sfx2/source/dialog/mgetempl.hrc38
-rw-r--r--sfx2/source/dialog/mgetempl.src152
-rw-r--r--sfx2/source/dialog/navigat.cxx100
-rw-r--r--sfx2/source/dialog/newstyle.cxx108
-rw-r--r--sfx2/source/dialog/newstyle.hrc33
-rw-r--r--sfx2/source/dialog/newstyle.src103
-rw-r--r--sfx2/source/dialog/partwnd.cxx257
-rw-r--r--sfx2/source/dialog/passwd.cxx212
-rw-r--r--sfx2/source/dialog/passwd.hrc49
-rw-r--r--sfx2/source/dialog/passwd.src140
-rw-r--r--sfx2/source/dialog/printopt.cxx545
-rw-r--r--sfx2/source/dialog/printopt.hrc64
-rw-r--r--sfx2/source/dialog/printopt.src355
-rw-r--r--sfx2/source/dialog/recfloat.cxx280
-rw-r--r--sfx2/source/dialog/recfloat.src86
-rw-r--r--sfx2/source/dialog/securitypage.cxx553
-rwxr-xr-xsfx2/source/dialog/securitypage.hrc52
-rw-r--r--sfx2/source/dialog/securitypage.src174
-rwxr-xr-xsfx2/source/dialog/sfxdlg.cxx44
-rw-r--r--sfx2/source/dialog/splitwin.cxx1304
-rw-r--r--sfx2/source/dialog/srchdlg.cxx202
-rw-r--r--sfx2/source/dialog/srchdlg.hrc43
-rw-r--r--sfx2/source/dialog/srchdlg.src110
-rw-r--r--sfx2/source/dialog/styfitem.cxx187
-rw-r--r--sfx2/source/dialog/styledlg.cxx176
-rw-r--r--sfx2/source/dialog/tabdlg.cxx1798
-rw-r--r--sfx2/source/dialog/taskpane.cxx1290
-rw-r--r--sfx2/source/dialog/taskpane.src47
-rw-r--r--sfx2/source/dialog/templdlg.cxx3065
-rw-r--r--sfx2/source/dialog/templdlg.hrc52
-rw-r--r--sfx2/source/dialog/templdlg.src210
-rw-r--r--sfx2/source/dialog/titledockwin.cxx364
-rw-r--r--sfx2/source/dialog/titledockwin.src39
-rw-r--r--sfx2/source/dialog/tplcitem.cxx188
-rw-r--r--sfx2/source/dialog/tplpitem.cxx123
-rw-r--r--sfx2/source/dialog/versdlg.cxx519
-rw-r--r--sfx2/source/dialog/versdlg.hrc48
-rw-r--r--sfx2/source/dialog/versdlg.src212
-rw-r--r--sfx2/source/doc/DocumentMetadataAccess.cxx1432
-rw-r--r--sfx2/source/doc/Metadatable.cxx1703
-rw-r--r--sfx2/source/doc/QuerySaveDocument.cxx50
-rw-r--r--sfx2/source/doc/SfxDocumentMetaData.cxx2391
-rw-r--r--sfx2/source/doc/applet.cxx383
-rw-r--r--sfx2/source/doc/doc.hrc222
-rw-r--r--sfx2/source/doc/doc.src536
-rw-r--r--sfx2/source/doc/docfac.cxx491
-rw-r--r--sfx2/source/doc/docfile.cxx3931
-rw-r--r--sfx2/source/doc/docfilt.cxx251
-rw-r--r--sfx2/source/doc/docinf.cxx309
-rw-r--r--sfx2/source/doc/docinsert.cxx305
-rw-r--r--sfx2/source/doc/docmacromode.cxx436
-rw-r--r--sfx2/source/doc/docstoragemodifylistener.cxx96
-rw-r--r--sfx2/source/doc/doctdlg.cxx238
-rw-r--r--sfx2/source/doc/doctdlg.hrc42
-rw-r--r--sfx2/source/doc/doctdlg.src146
-rw-r--r--sfx2/source/doc/doctempl.cxx2735
-rw-r--r--sfx2/source/doc/doctempl.src106
-rw-r--r--sfx2/source/doc/doctemplates.cxx2898
-rw-r--r--sfx2/source/doc/doctemplateslocal.cxx263
-rw-r--r--sfx2/source/doc/doctemplateslocal.hxx88
-rw-r--r--sfx2/source/doc/docvor.cxx2466
-rw-r--r--sfx2/source/doc/docvor.hrc75
-rw-r--r--sfx2/source/doc/docvor.src315
-rw-r--r--sfx2/source/doc/frmdescr.cxx329
-rw-r--r--sfx2/source/doc/graphhelp.cxx529
-rw-r--r--sfx2/source/doc/graphhelp.hxx75
-rw-r--r--sfx2/source/doc/graphhelp.src59
-rw-r--r--sfx2/source/doc/guisaveas.cxx1842
-rw-r--r--sfx2/source/doc/iframe.cxx397
-rw-r--r--sfx2/source/doc/makefile.mk105
-rw-r--r--sfx2/source/doc/new.cxx745
-rw-r--r--sfx2/source/doc/new.hrc57
-rw-r--r--sfx2/source/doc/new.src259
-rw-r--r--sfx2/source/doc/objcont.cxx1292
-rw-r--r--sfx2/source/doc/objembed.cxx317
-rw-r--r--sfx2/source/doc/objitem.cxx135
-rwxr-xr-xsfx2/source/doc/objmisc.cxx2590
-rw-r--r--sfx2/source/doc/objserv.cxx1514
-rw-r--r--sfx2/source/doc/objstor.cxx3743
-rw-r--r--sfx2/source/doc/objuno.cxx1350
-rw-r--r--sfx2/source/doc/objxtor.cxx1125
-rwxr-xr-xsfx2/source/doc/oleprops.cxx1227
-rwxr-xr-xsfx2/source/doc/oleprops.hxx404
-rw-r--r--sfx2/source/doc/ownsubfilterservice.cxx165
-rw-r--r--sfx2/source/doc/plugin.cxx266
-rwxr-xr-xsfx2/source/doc/printhelper.cxx906
-rwxr-xr-xsfx2/source/doc/printhelper.hxx69
-rw-r--r--sfx2/source/doc/querytemplate.cxx52
-rw-r--r--sfx2/source/doc/querytemplate.hxx44
-rw-r--r--sfx2/source/doc/sfxacldetect.cxx105
-rw-r--r--sfx2/source/doc/sfxbasemodel.cxx4309
-rw-r--r--sfx2/source/doc/sfxmodelfactory.cxx239
-rwxr-xr-xsfx2/source/doc/syspath.cxx48
-rw-r--r--sfx2/source/doc/syspath.hxx44
-rw-r--r--sfx2/source/doc/syspathw32.cxx83
-rw-r--r--sfx2/source/explorer/makefile.mk47
-rw-r--r--sfx2/source/explorer/nochaos.cxx215
-rw-r--r--sfx2/source/inc/SfxDocumentMetaData.hxx49
-rw-r--r--sfx2/source/inc/alienwarn.hxx56
-rw-r--r--sfx2/source/inc/appbas.hxx44
-rw-r--r--sfx2/source/inc/appbaslib.hxx140
-rw-r--r--sfx2/source/inc/appdata.hxx182
-rw-r--r--sfx2/source/inc/applet.hxx122
-rw-r--r--sfx2/source/inc/doctemplates.hxx102
-rw-r--r--sfx2/source/inc/eventsupplier.hxx264
-rw-r--r--sfx2/source/inc/fltfnc.hxx35
-rw-r--r--sfx2/source/inc/fltoptint.hxx75
-rw-r--r--sfx2/source/inc/helper.hxx78
-rwxr-xr-xsfx2/source/inc/helpid.hrc371
-rw-r--r--sfx2/source/inc/hexplwnd.hxx101
-rw-r--r--sfx2/source/inc/iframe.hxx93
-rw-r--r--sfx2/source/inc/intro.hxx55
-rw-r--r--sfx2/source/inc/mailmodel.hxx105
-rw-r--r--sfx2/source/inc/mnucfga.hxx52
-rw-r--r--sfx2/source/inc/nfltdlg.hxx66
-rw-r--r--sfx2/source/inc/nochaos.hxx40
-rw-r--r--sfx2/source/inc/objmnctl.hxx56
-rw-r--r--sfx2/source/inc/objshimp.hxx176
-rw-r--r--sfx2/source/inc/openflag.hxx41
-rw-r--r--sfx2/source/inc/ownsubfilterservice.hxx90
-rw-r--r--sfx2/source/inc/partwnd.hxx90
-rw-r--r--sfx2/source/inc/plugin.hxx91
-rw-r--r--sfx2/source/inc/preview.hxx73
-rw-r--r--sfx2/source/inc/recfloat.hxx69
-rw-r--r--sfx2/source/inc/referers.hxx36
-rw-r--r--sfx2/source/inc/sfxlocal.hrc75
-rw-r--r--sfx2/source/inc/sfxpicklist.hxx86
-rw-r--r--sfx2/source/inc/sfxtypes.hxx199
-rw-r--r--sfx2/source/inc/sfxurlrelocator.hxx54
-rw-r--r--sfx2/source/inc/slotserv.hxx84
-rw-r--r--sfx2/source/inc/splitwin.hxx133
-rw-r--r--sfx2/source/inc/statcach.hxx182
-rw-r--r--sfx2/source/inc/templdgi.hxx394
-rw-r--r--sfx2/source/inc/tplcitem.hxx52
-rw-r--r--sfx2/source/inc/tplcomp.hxx224
-rw-r--r--sfx2/source/inc/versdlg.hxx109
-rw-r--r--sfx2/source/inc/virtmenu.hxx159
-rw-r--r--sfx2/source/inc/workwin.hxx391
-rw-r--r--sfx2/source/inet/inettbc.cxx303
-rw-r--r--sfx2/source/inet/makefile.mk48
-rw-r--r--sfx2/source/layout/factory.cxx68
-rw-r--r--sfx2/source/layout/makefile.mk56
-rw-r--r--sfx2/source/layout/sfxdialog.cxx38
-rw-r--r--sfx2/source/layout/sfxtabdialog.cxx72
-rw-r--r--sfx2/source/layout/sfxtabpage.cxx89
-rw-r--r--sfx2/source/menu/makefile.mk55
-rw-r--r--sfx2/source/menu/menu.hrc73
-rw-r--r--sfx2/source/menu/menu.src97
-rw-r--r--sfx2/source/menu/mnuitem.cxx583
-rwxr-xr-xsfx2/source/menu/mnumgr.cxx641
-rw-r--r--sfx2/source/menu/objmnctl.cxx165
-rwxr-xr-xsfx2/source/menu/thessubmenu.cxx274
-rw-r--r--sfx2/source/menu/thessubmenu.hxx107
-rw-r--r--sfx2/source/menu/virtmenu.cxx1373
-rw-r--r--sfx2/source/notify/eventsupplier.cxx920
-rw-r--r--sfx2/source/notify/hintpost.cxx110
-rw-r--r--sfx2/source/notify/makefile.mk49
-rw-r--r--sfx2/source/statbar/makefile.mk47
-rw-r--r--sfx2/source/statbar/stbitem.cxx687
-rw-r--r--sfx2/source/toolbox/imgmgr.cxx426
-rw-r--r--sfx2/source/toolbox/makefile.mk48
-rw-r--r--sfx2/source/toolbox/tbxitem.cxx1895
-rw-r--r--sfx2/source/view/frame.cxx994
-rw-r--r--sfx2/source/view/frame2.cxx481
-rw-r--r--sfx2/source/view/frmload.cxx746
-rw-r--r--sfx2/source/view/impframe.hxx100
-rw-r--r--sfx2/source/view/impviewframe.hxx98
-rw-r--r--sfx2/source/view/ipclient.cxx1163
-rw-r--r--sfx2/source/view/makefile.mk65
-rw-r--r--sfx2/source/view/orgmgr.cxx832
-rw-r--r--sfx2/source/view/printer.cxx624
-rw-r--r--sfx2/source/view/prnmon.cxx495
-rw-r--r--sfx2/source/view/sfxbasecontroller.cxx1542
-rw-r--r--sfx2/source/view/userinputinterception.cxx278
-rw-r--r--sfx2/source/view/view.hrc126
-rw-r--r--sfx2/source/view/view.src190
-rw-r--r--sfx2/source/view/viewfac.cxx88
-rw-r--r--sfx2/source/view/viewfrm.cxx3613
-rw-r--r--sfx2/source/view/viewfrm2.cxx523
-rw-r--r--sfx2/source/view/viewimp.hxx84
-rw-r--r--sfx2/source/view/viewprn.cxx1059
-rw-r--r--sfx2/source/view/viewsh.cxx2248
-rw-r--r--sfx2/util/hidother.src170
-rw-r--r--sfx2/util/make_tco.btm1
-rw-r--r--sfx2/util/makefile.mk164
-rw-r--r--sfx2/util/makefile.pmk30
-rw-r--r--sfx2/util/mkdemo.pl7
-rw-r--r--sfx2/util/sfx.xml97
-rw-r--r--sfx2/workben/custompanel/CalcWindowState.xcu21
-rw-r--r--sfx2/workben/custompanel/DrawWindowState.xcu21
-rw-r--r--sfx2/workben/custompanel/Factories.xcu21
-rw-r--r--sfx2/workben/custompanel/ImpressWindowState.xcu21
-rw-r--r--sfx2/workben/custompanel/WriterWindowState.xcu35
-rw-r--r--sfx2/workben/custompanel/ctp_factory.cxx167
-rw-r--r--sfx2/workben/custompanel/ctp_factory.hxx83
-rw-r--r--sfx2/workben/custompanel/ctp_panel.cxx270
-rw-r--r--sfx2/workben/custompanel/ctp_panel.hxx124
-rw-r--r--sfx2/workben/custompanel/ctp_services.cxx92
-rw-r--r--sfx2/workben/custompanel/delzip0
-rw-r--r--sfx2/workben/custompanel/description.xml16
-rw-r--r--sfx2/workben/custompanel/makefile.mk120
-rw-r--r--sfx2/workben/custompanel/manifest.xml18
-rw-r--r--sfx2/workben/custompanel/panel.pngbin0 -> 202 bytes
-rw-r--r--shell/inc/internal/basereader.hxx80
-rw-r--r--shell/inc/internal/columninfo.hxx77
-rw-r--r--shell/inc/internal/config.hxx104
-rw-r--r--shell/inc/internal/contentreader.hxx126
-rw-r--r--shell/inc/internal/dbgmacros.hxx51
-rw-r--r--shell/inc/internal/fileextensions.hxx68
-rw-r--r--shell/inc/internal/global.hxx44
-rw-r--r--shell/inc/internal/i_xml_parser_event_handler.hxx78
-rw-r--r--shell/inc/internal/infotips.hxx100
-rw-r--r--shell/inc/internal/iso8601_converter.hxx47
-rwxr-xr-xshell/inc/internal/metainforeader.hxx148
-rwxr-xr-xshell/inc/internal/propertyhdl.hxx126
-rw-r--r--shell/inc/internal/propsheets.hxx94
-rw-r--r--shell/inc/internal/registry.hxx69
-rw-r--r--shell/inc/internal/resource.h57
-rwxr-xr-xshell/inc/internal/shlxthdl.hxx55
-rwxr-xr-xshell/inc/internal/stream_helper.hxx35
-rw-r--r--shell/inc/internal/thumbviewer.hxx118
-rw-r--r--shell/inc/internal/types.hxx95
-rwxr-xr-xshell/inc/internal/utilities.hxx110
-rw-r--r--shell/inc/internal/xml_parser.hxx134
-rw-r--r--shell/inc/internal/zipfile.hxx162
-rw-r--r--shell/inc/kde_headers.h94
-rw-r--r--shell/inc/makefile.mk47
-rw-r--r--shell/inc/pch/precompiled_shell.cxx29
-rw-r--r--shell/inc/pch/precompiled_shell.hxx32
-rwxr-xr-xshell/prj/build.lst34
-rw-r--r--shell/prj/d.lst25
-rw-r--r--shell/qa/i_xml_parser_event_handler.hxx77
-rwxr-xr-xshell/qa/makefile.mk70
-rwxr-xr-xshell/qa/recent_docs.cxx224
-rwxr-xr-xshell/source/all/makefile.mk73
-rw-r--r--shell/source/all/ooofilereader/autostyletag.cxx100
-rw-r--r--shell/source/all/ooofilereader/autostyletag.hxx72
-rw-r--r--shell/source/all/ooofilereader/basereader.cxx106
-rw-r--r--shell/source/all/ooofilereader/contentreader.cxx235
-rw-r--r--shell/source/all/ooofilereader/dummytag.hxx61
-rw-r--r--shell/source/all/ooofilereader/itag.hxx52
-rw-r--r--shell/source/all/ooofilereader/keywordstag.cxx64
-rw-r--r--shell/source/all/ooofilereader/keywordstag.hxx54
-rw-r--r--shell/source/all/ooofilereader/makefile.mk89
-rw-r--r--shell/source/all/ooofilereader/metainforeader.cxx302
-rw-r--r--shell/source/all/ooofilereader/simpletag.cxx65
-rw-r--r--shell/source/all/ooofilereader/simpletag.hxx58
-rw-r--r--shell/source/all/xml_parser.cxx215
-rw-r--r--shell/source/all/zipfile/makefile.mk58
-rw-r--r--shell/source/all/zipfile/zipexcptn.cxx137
-rw-r--r--shell/source/all/zipfile/zipexcptn.hxx78
-rw-r--r--shell/source/all/zipfile/zipfile.cxx251
-rw-r--r--shell/source/backends/desktopbe/desktopbackend.cxx290
-rw-r--r--shell/source/backends/desktopbe/desktopbe1-ucd.txt6
-rw-r--r--shell/source/backends/desktopbe/makefile.mk53
-rw-r--r--shell/source/backends/gconfbe/gconfaccess.cxx848
-rw-r--r--shell/source/backends/gconfbe/gconfaccess.hxx119
-rw-r--r--shell/source/backends/gconfbe/gconfbackend.cxx239
-rw-r--r--shell/source/backends/gconfbe/gconfbe1-ucd.txt6
-rw-r--r--shell/source/backends/gconfbe/makefile.mk96
-rw-r--r--shell/source/backends/gconfbe/orbit.h39
-rw-r--r--shell/source/backends/kde4be/kde4access.cxx319
-rw-r--r--shell/source/backends/kde4be/kde4access.hxx47
-rw-r--r--shell/source/backends/kde4be/kde4backend.cxx258
-rw-r--r--shell/source/backends/kde4be/kde4be1-ucd.txt6
-rw-r--r--shell/source/backends/kde4be/makefile.mk81
-rw-r--r--shell/source/backends/kdebe/kdeaccess.cxx315
-rw-r--r--shell/source/backends/kdebe/kdeaccess.hxx47
-rw-r--r--shell/source/backends/kdebe/kdebackend.cxx258
-rw-r--r--shell/source/backends/kdebe/kdebe1-ucd.txt6
-rw-r--r--shell/source/backends/kdebe/makefile.mk81
-rw-r--r--shell/source/backends/localebe/localebackend.cxx367
-rw-r--r--shell/source/backends/localebe/localebackend.hxx149
-rw-r--r--shell/source/backends/localebe/localebe.xml35
-rw-r--r--shell/source/backends/localebe/localebecdef.cxx94
-rw-r--r--shell/source/backends/localebe/makefile.mk72
-rw-r--r--shell/source/backends/macbe/macbackend.cxx499
-rw-r--r--shell/source/backends/macbe/macbackend.hxx138
-rw-r--r--shell/source/backends/macbe/macbe.xml35
-rw-r--r--shell/source/backends/macbe/macbecdef.cxx94
-rw-r--r--shell/source/backends/macbe/makefile.mk78
-rw-r--r--shell/source/backends/wininetbe/makefile.mk68
-rw-r--r--shell/source/backends/wininetbe/wininetbackend.cxx403
-rw-r--r--shell/source/backends/wininetbe/wininetbackend.hxx157
-rw-r--r--shell/source/backends/wininetbe/wininetbe.xml35
-rw-r--r--shell/source/backends/wininetbe/wininetbecdef.cxx95
-rw-r--r--shell/source/cmdmail/cmdmail.xml47
-rwxr-xr-xshell/source/cmdmail/cmdmailentry.cxx135
-rwxr-xr-xshell/source/cmdmail/cmdmailmsg.cxx302
-rw-r--r--shell/source/cmdmail/cmdmailmsg.hxx128
-rwxr-xr-xshell/source/cmdmail/cmdmailsuppl.cxx328
-rw-r--r--shell/source/cmdmail/cmdmailsuppl.hxx95
-rw-r--r--shell/source/cmdmail/exports.dxp3
-rw-r--r--shell/source/cmdmail/makefile.mk64
-rw-r--r--shell/source/mingw_intel.map57
-rw-r--r--shell/source/tools/lngconvex/cmdline.cxx175
-rw-r--r--shell/source/tools/lngconvex/cmdline.hxx104
-rw-r--r--shell/source/tools/lngconvex/defs.hxx14
-rw-r--r--shell/source/tools/lngconvex/lngconvex.cxx605
-rw-r--r--shell/source/tools/lngconvex/makefile.mk68
-rw-r--r--shell/source/tools/regsvrex/makefile.mk49
-rw-r--r--shell/source/tools/regsvrex/regsvrex.cxx91
-rw-r--r--shell/source/unix/exec/makefile.mk90
-rw-r--r--shell/source/unix/exec/shellexec.cxx331
-rw-r--r--shell/source/unix/exec/shellexec.hxx79
-rw-r--r--shell/source/unix/exec/shellexecentry.cxx134
-rw-r--r--shell/source/unix/exec/syssh.xml33
-rw-r--r--shell/source/unix/exec/urltest.cxx151
-rw-r--r--shell/source/unix/exec/urltest.sh2
-rw-r--r--shell/source/unix/exec/urltest.txt11
-rwxr-xr-xshell/source/unix/misc/cde-open-url.sh13
-rw-r--r--shell/source/unix/misc/gnome-open-url.c146
-rw-r--r--shell/source/unix/misc/gnome-open-url.sh6
-rwxr-xr-xshell/source/unix/misc/kde-open-url.sh10
-rw-r--r--shell/source/unix/misc/makefile.mk90
-rw-r--r--shell/source/unix/misc/open-url.c172
-rw-r--r--shell/source/unix/misc/open-url.def1
-rwxr-xr-xshell/source/unix/misc/open-url.sh93
-rw-r--r--shell/source/unix/misc/senddoc.c204
-rw-r--r--shell/source/unix/misc/senddoc.def1
-rw-r--r--shell/source/unix/misc/senddoc.sh401
-rw-r--r--shell/source/unix/misc/uri-encode.c50
-rw-r--r--shell/source/unix/sysshell/makefile.mk75
-rw-r--r--shell/source/unix/sysshell/recently_used_file.cxx147
-rw-r--r--shell/source/unix/sysshell/recently_used_file.hxx68
-rw-r--r--shell/source/unix/sysshell/recently_used_file_handler.cxx526
-rwxr-xr-xshell/source/unix/sysshell/recfile.map6
-rw-r--r--shell/source/win32/SysShExec.cxx388
-rw-r--r--shell/source/win32/SysShExec.hxx83
-rw-r--r--shell/source/win32/SysShentry.cxx143
-rw-r--r--shell/source/win32/exports.dxp3
-rw-r--r--shell/source/win32/makefile.mk69
-rwxr-xr-xshell/source/win32/shlxthandler/classfactory.cxx171
-rw-r--r--shell/source/win32/shlxthandler/classfactory.hxx77
-rw-r--r--shell/source/win32/shlxthandler/columninfo/columninfo.cxx231
-rw-r--r--shell/source/win32/shlxthandler/columninfo/makefile.mk59
-rw-r--r--shell/source/win32/shlxthandler/exports.dxp4
-rw-r--r--shell/source/win32/shlxthandler/infotips/infotips.cxx402
-rw-r--r--shell/source/win32/shlxthandler/infotips/makefile.mk60
-rw-r--r--shell/source/win32/shlxthandler/makefile.mk157
-rw-r--r--shell/source/win32/shlxthandler/ooofilt/exports.dxp4
-rw-r--r--shell/source/win32/shlxthandler/ooofilt/makefile.mk141
-rwxr-xr-xshell/source/win32/shlxthandler/ooofilt/ooofilt.cxx1490
-rwxr-xr-xshell/source/win32/shlxthandler/ooofilt/ooofilt.hxx218
-rw-r--r--shell/source/win32/shlxthandler/ooofilt/propspec.cxx238
-rw-r--r--shell/source/win32/shlxthandler/ooofilt/propspec.hxx159
-rwxr-xr-xshell/source/win32/shlxthandler/ooofilt/stream_helper.cxx181
-rwxr-xr-xshell/source/win32/shlxthandler/prophdl/exports.dxp2
-rw-r--r--shell/source/win32/shlxthandler/prophdl/makefile.mk142
-rw-r--r--shell/source/win32/shlxthandler/prophdl/propertyhdl.cxx463
-rw-r--r--shell/source/win32/shlxthandler/propsheets/document_statistic.cxx170
-rw-r--r--shell/source/win32/shlxthandler/propsheets/document_statistic.hxx149
-rw-r--r--shell/source/win32/shlxthandler/propsheets/listviewbuilder.cxx281
-rw-r--r--shell/source/win32/shlxthandler/propsheets/listviewbuilder.hxx115
-rw-r--r--shell/source/win32/shlxthandler/propsheets/makefile.mk65
-rwxr-xr-xshell/source/win32/shlxthandler/propsheets/propsheets.cxx366
-rw-r--r--shell/source/win32/shlxthandler/res/ctrylnglist.txt29
-rw-r--r--shell/source/win32/shlxthandler/res/makefile.mk72
-rw-r--r--shell/source/win32/shlxthandler/res/prop_img.bmpbin0 -> 958 bytes
-rw-r--r--shell/source/win32/shlxthandler/res/rcfooter.txt4
-rw-r--r--shell/source/win32/shlxthandler/res/rcheader.txt15
-rw-r--r--shell/source/win32/shlxthandler/res/rctmpl.txt71
-rw-r--r--shell/source/win32/shlxthandler/res/shlxthdl.manifest11
-rw-r--r--shell/source/win32/shlxthandler/res/shlxthdl.ulf148
-rw-r--r--shell/source/win32/shlxthandler/res/signet.pngbin0 -> 4836 bytes
-rwxr-xr-xshell/source/win32/shlxthandler/shlxthdl.cxx427
-rw-r--r--shell/source/win32/shlxthandler/thumbviewer/makefile.mk62
-rw-r--r--shell/source/win32/shlxthandler/thumbviewer/thumbviewer.cxx532
-rw-r--r--shell/source/win32/shlxthandler/util/dbgmacros.cxx58
-rw-r--r--shell/source/win32/shlxthandler/util/fileextensions.cxx111
-rw-r--r--shell/source/win32/shlxthandler/util/iso8601_converter.cxx182
-rw-r--r--shell/source/win32/shlxthandler/util/makefile.mk68
-rw-r--r--shell/source/win32/shlxthandler/util/registry.cxx205
-rw-r--r--shell/source/win32/shlxthandler/util/utilities.cxx577
-rw-r--r--shell/source/win32/simplemail/exports.dxp3
-rw-r--r--shell/source/win32/simplemail/makefile.mk79
-rw-r--r--shell/source/win32/simplemail/senddoc.cxx347
-rw-r--r--shell/source/win32/simplemail/simplemapi.cxx97
-rw-r--r--shell/source/win32/simplemail/simplemapi.hxx84
-rw-r--r--shell/source/win32/simplemail/smplmail.xml37
-rw-r--r--shell/source/win32/simplemail/smplmailclient.cxx289
-rw-r--r--shell/source/win32/simplemail/smplmailclient.hxx54
-rw-r--r--shell/source/win32/simplemail/smplmailentry.cxx143
-rw-r--r--shell/source/win32/simplemail/smplmailmsg.cxx179
-rw-r--r--shell/source/win32/simplemail/smplmailmsg.hxx122
-rw-r--r--shell/source/win32/simplemail/smplmailsuppl.cxx107
-rw-r--r--shell/source/win32/simplemail/smplmailsuppl.hxx75
-rw-r--r--shell/source/win32/syssh.xml40
-rw-r--r--shell/source/win32/workbench/TestProxySet.cxx200
-rw-r--r--shell/source/win32/workbench/TestSmplMail.cxx188
-rw-r--r--shell/source/win32/workbench/TestSysShExec.cxx167
-rw-r--r--shell/source/win32/workbench/makefile.mk101
-rw-r--r--slideshow/inc/makefile.mk47
-rw-r--r--slideshow/inc/pch/precompiled_slideshow.cxx29
-rw-r--r--slideshow/inc/pch/precompiled_slideshow.hxx52
-rw-r--r--slideshow/manifest.txt95
-rw-r--r--slideshow/prj/build.lst11
-rw-r--r--slideshow/prj/d.lst6
-rw-r--r--slideshow/qa/debug/colors.sh16
-rw-r--r--slideshow/qa/debug/nodetree.sh50
-rw-r--r--slideshow/qa/debug/readme.txt20
-rw-r--r--slideshow/qa/debug/timings.pl81
-rwxr-xr-xslideshow/qa/tools/mkeffects.pl810
-rw-r--r--slideshow/qa/tools/mktransitions.pl681
-rw-r--r--slideshow/source/engine/OGLTrans/OGLTrans_Shaders.cxx140
-rw-r--r--slideshow/source/engine/OGLTrans/OGLTrans_Shaders.hxx68
-rw-r--r--slideshow/source/engine/OGLTrans/OGLTrans_TransitionImpl.cxx1315
-rw-r--r--slideshow/source/engine/OGLTrans/OGLTrans_TransitionImpl.hxx506
-rw-r--r--slideshow/source/engine/OGLTrans/OGLTrans_TransitionerImpl.cxx1484
-rw-r--r--slideshow/source/engine/OGLTrans/exports.dxp3
-rw-r--r--slideshow/source/engine/OGLTrans/makefile.mk80
-rw-r--r--slideshow/source/engine/activities/accumulation.hxx92
-rw-r--r--slideshow/source/engine/activities/activitiesfactory.cxx987
-rw-r--r--slideshow/source/engine/activities/activitybase.cxx246
-rw-r--r--slideshow/source/engine/activities/activitybase.hxx152
-rw-r--r--slideshow/source/engine/activities/activityparameters.hxx143
-rw-r--r--slideshow/source/engine/activities/continuousactivitybase.cxx54
-rw-r--r--slideshow/source/engine/activities/continuousactivitybase.hxx73
-rw-r--r--slideshow/source/engine/activities/continuouskeytimeactivitybase.cxx76
-rw-r--r--slideshow/source/engine/activities/continuouskeytimeactivitybase.hxx83
-rw-r--r--slideshow/source/engine/activities/discreteactivitybase.cxx206
-rw-r--r--slideshow/source/engine/activities/discreteactivitybase.hxx87
-rw-r--r--slideshow/source/engine/activities/interpolation.hxx194
-rw-r--r--slideshow/source/engine/activities/makefile.mk53
-rw-r--r--slideshow/source/engine/activities/simplecontinuousactivitybase.cxx258
-rw-r--r--slideshow/source/engine/activities/simplecontinuousactivitybase.hxx87
-rw-r--r--slideshow/source/engine/activitiesqueue.cxx210
-rw-r--r--slideshow/source/engine/animatedsprite.cxx225
-rw-r--r--slideshow/source/engine/animationfactory.cxx1386
-rw-r--r--slideshow/source/engine/animationnodes/animationaudionode.cxx181
-rw-r--r--slideshow/source/engine/animationnodes/animationaudionode.hxx77
-rw-r--r--slideshow/source/engine/animationnodes/animationbasenode.cxx490
-rw-r--r--slideshow/source/engine/animationnodes/animationbasenode.hxx111
-rw-r--r--slideshow/source/engine/animationnodes/animationcolornode.cxx137
-rw-r--r--slideshow/source/engine/animationnodes/animationcolornode.hxx62
-rw-r--r--slideshow/source/engine/animationnodes/animationcommandnode.cxx134
-rw-r--r--slideshow/source/engine/animationnodes/animationcommandnode.hxx69
-rw-r--r--slideshow/source/engine/animationnodes/animationnodefactory.cxx620
-rw-r--r--slideshow/source/engine/animationnodes/animationpathmotionnode.cxx67
-rw-r--r--slideshow/source/engine/animationnodes/animationpathmotionnode.hxx65
-rw-r--r--slideshow/source/engine/animationnodes/animationsetnode.cxx213
-rw-r--r--slideshow/source/engine/animationnodes/animationsetnode.hxx58
-rw-r--r--slideshow/source/engine/animationnodes/animationtransformnode.cxx114
-rw-r--r--slideshow/source/engine/animationnodes/animationtransformnode.hxx66
-rw-r--r--slideshow/source/engine/animationnodes/animationtransitionfilternode.cxx59
-rw-r--r--slideshow/source/engine/animationnodes/animationtransitionfilternode.hxx67
-rw-r--r--slideshow/source/engine/animationnodes/basecontainernode.cxx175
-rw-r--r--slideshow/source/engine/animationnodes/basecontainernode.hxx105
-rw-r--r--slideshow/source/engine/animationnodes/basenode.cxx769
-rw-r--r--slideshow/source/engine/animationnodes/basenode.hxx229
-rw-r--r--slideshow/source/engine/animationnodes/generateevent.cxx246
-rw-r--r--slideshow/source/engine/animationnodes/generateevent.hxx62
-rw-r--r--slideshow/source/engine/animationnodes/makefile.mk61
-rw-r--r--slideshow/source/engine/animationnodes/nodetools.cxx128
-rw-r--r--slideshow/source/engine/animationnodes/nodetools.hxx88
-rw-r--r--slideshow/source/engine/animationnodes/paralleltimecontainer.cxx69
-rw-r--r--slideshow/source/engine/animationnodes/paralleltimecontainer.hxx63
-rw-r--r--slideshow/source/engine/animationnodes/propertyanimationnode.cxx115
-rw-r--r--slideshow/source/engine/animationnodes/propertyanimationnode.hxx58
-rw-r--r--slideshow/source/engine/animationnodes/sequentialtimecontainer.cxx162
-rw-r--r--slideshow/source/engine/animationnodes/sequentialtimecontainer.hxx75
-rw-r--r--slideshow/source/engine/animationnodes/setactivity.hxx155
-rw-r--r--slideshow/source/engine/arith-grammar.txt61
-rw-r--r--slideshow/source/engine/attributemap.cxx123
-rw-r--r--slideshow/source/engine/color.cxx467
-rw-r--r--slideshow/source/engine/debug.cxx324
-rw-r--r--slideshow/source/engine/delayevent.cxx69
-rw-r--r--slideshow/source/engine/effectrewinder.cxx433
-rw-r--r--slideshow/source/engine/effectrewinder.hxx182
-rw-r--r--slideshow/source/engine/eventmultiplexer.cxx1278
-rw-r--r--slideshow/source/engine/eventqueue.cxx335
-rw-r--r--slideshow/source/engine/expressionnodefactory.cxx279
-rw-r--r--slideshow/source/engine/makefile.mk102
-rw-r--r--slideshow/source/engine/rehearsetimingsactivity.cxx581
-rw-r--r--slideshow/source/engine/rehearsetimingsactivity.hxx147
-rw-r--r--slideshow/source/engine/screenupdater.cxx268
-rw-r--r--slideshow/source/engine/shapeattributelayer.cxx856
-rw-r--r--slideshow/source/engine/shapes/appletshape.cxx330
-rw-r--r--slideshow/source/engine/shapes/appletshape.hxx60
-rw-r--r--slideshow/source/engine/shapes/backgroundshape.cxx336
-rw-r--r--slideshow/source/engine/shapes/backgroundshape.hxx62
-rw-r--r--slideshow/source/engine/shapes/drawinglayeranimation.cxx984
-rw-r--r--slideshow/source/engine/shapes/drawinglayeranimation.hxx48
-rw-r--r--slideshow/source/engine/shapes/drawshape.cxx1478
-rw-r--r--slideshow/source/engine/shapes/drawshape.hxx382
-rw-r--r--slideshow/source/engine/shapes/drawshapesubsetting.cxx865
-rw-r--r--slideshow/source/engine/shapes/drawshapesubsetting.hxx288
-rw-r--r--slideshow/source/engine/shapes/externalshapebase.cxx246
-rw-r--r--slideshow/source/engine/shapes/externalshapebase.hxx145
-rw-r--r--slideshow/source/engine/shapes/gdimtftools.cxx549
-rw-r--r--slideshow/source/engine/shapes/gdimtftools.hxx155
-rw-r--r--slideshow/source/engine/shapes/intrinsicanimationactivity.cxx290
-rw-r--r--slideshow/source/engine/shapes/intrinsicanimationactivity.hxx76
-rw-r--r--slideshow/source/engine/shapes/makefile.mk60
-rw-r--r--slideshow/source/engine/shapes/mediashape.cxx297
-rw-r--r--slideshow/source/engine/shapes/mediashape.hxx55
-rw-r--r--slideshow/source/engine/shapes/shapeimporter.cxx671
-rw-r--r--slideshow/source/engine/shapes/viewappletshape.cxx300
-rw-r--r--slideshow/source/engine/shapes/viewappletshape.hxx169
-rw-r--r--slideshow/source/engine/shapes/viewbackgroundshape.cxx212
-rw-r--r--slideshow/source/engine/shapes/viewbackgroundshape.hxx104
-rw-r--r--slideshow/source/engine/shapes/viewmediashape.cxx545
-rw-r--r--slideshow/source/engine/shapes/viewmediashape.hxx174
-rw-r--r--slideshow/source/engine/shapes/viewshape.cxx898
-rw-r--r--slideshow/source/engine/shapes/viewshape.hxx340
-rw-r--r--slideshow/source/engine/shapesubset.cxx141
-rw-r--r--slideshow/source/engine/slide/layer.cxx364
-rw-r--r--slideshow/source/engine/slide/layer.hxx316
-rw-r--r--slideshow/source/engine/slide/layermanager.cxx923
-rw-r--r--slideshow/source/engine/slide/layermanager.hxx385
-rw-r--r--slideshow/source/engine/slide/makefile.mk51
-rw-r--r--slideshow/source/engine/slide/shapemanagerimpl.cxx461
-rw-r--r--slideshow/source/engine/slide/shapemanagerimpl.hxx209
-rw-r--r--slideshow/source/engine/slide/slideanimations.cxx131
-rw-r--r--slideshow/source/engine/slide/slideanimations.hxx125
-rw-r--r--slideshow/source/engine/slide/slideimpl.cxx1283
-rw-r--r--slideshow/source/engine/slide/userpaintoverlay.cxx504
-rw-r--r--slideshow/source/engine/slide/userpaintoverlay.hxx89
-rw-r--r--slideshow/source/engine/slidebitmap.cxx132
-rw-r--r--slideshow/source/engine/slideshowcontext.cxx76
-rw-r--r--slideshow/source/engine/slideshowimpl.cxx2536
-rw-r--r--slideshow/source/engine/slideview.cxx1196
-rw-r--r--slideshow/source/engine/smilfunctionparser.cxx638
-rw-r--r--slideshow/source/engine/soundplayer.cxx183
-rw-r--r--slideshow/source/engine/sp_debug.cxx297
-rw-r--r--slideshow/source/engine/tools.cxx853
-rw-r--r--slideshow/source/engine/transitions/barndoorwipe.cxx65
-rw-r--r--slideshow/source/engine/transitions/barndoorwipe.hxx55
-rw-r--r--slideshow/source/engine/transitions/barwipepolypolygon.cxx56
-rw-r--r--slideshow/source/engine/transitions/barwipepolypolygon.hxx55
-rw-r--r--slideshow/source/engine/transitions/boxwipe.cxx57
-rw-r--r--slideshow/source/engine/transitions/boxwipe.hxx54
-rw-r--r--slideshow/source/engine/transitions/checkerboardwipe.cxx65
-rw-r--r--slideshow/source/engine/transitions/checkerboardwipe.hxx57
-rw-r--r--slideshow/source/engine/transitions/clippingfunctor.cxx238
-rw-r--r--slideshow/source/engine/transitions/clippingfunctor.hxx95
-rw-r--r--slideshow/source/engine/transitions/clockwipe.cxx74
-rw-r--r--slideshow/source/engine/transitions/clockwipe.hxx50
-rw-r--r--slideshow/source/engine/transitions/combtransition.cxx196
-rw-r--r--slideshow/source/engine/transitions/combtransition.hxx72
-rw-r--r--slideshow/source/engine/transitions/doublediamondwipe.cxx66
-rw-r--r--slideshow/source/engine/transitions/doublediamondwipe.hxx53
-rw-r--r--slideshow/source/engine/transitions/ellipsewipe.cxx52
-rw-r--r--slideshow/source/engine/transitions/ellipsewipe.hxx48
-rw-r--r--slideshow/source/engine/transitions/fanwipe.cxx72
-rw-r--r--slideshow/source/engine/transitions/fanwipe.hxx51
-rw-r--r--slideshow/source/engine/transitions/figurewipe.cxx129
-rw-r--r--slideshow/source/engine/transitions/figurewipe.hxx55
-rw-r--r--slideshow/source/engine/transitions/fourboxwipe.cxx85
-rw-r--r--slideshow/source/engine/transitions/fourboxwipe.hxx55
-rw-r--r--slideshow/source/engine/transitions/iriswipe.cxx52
-rw-r--r--slideshow/source/engine/transitions/iriswipe.hxx52
-rw-r--r--slideshow/source/engine/transitions/makefile.mk73
-rw-r--r--slideshow/source/engine/transitions/parametricpolypolygon.hxx98
-rw-r--r--slideshow/source/engine/transitions/parametricpolypolygonfactory.cxx312
-rw-r--r--slideshow/source/engine/transitions/parametricpolypolygonfactory.hxx54
-rw-r--r--slideshow/source/engine/transitions/pinwheelwipe.cxx59
-rw-r--r--slideshow/source/engine/transitions/pinwheelwipe.hxx51
-rw-r--r--slideshow/source/engine/transitions/randomwipe.cxx95
-rw-r--r--slideshow/source/engine/transitions/randomwipe.hxx58
-rw-r--r--slideshow/source/engine/transitions/shapetransitionfactory.cxx408
-rw-r--r--slideshow/source/engine/transitions/slidechangebase.cxx535
-rw-r--r--slideshow/source/engine/transitions/slidechangebase.hxx208
-rw-r--r--slideshow/source/engine/transitions/slidetransitionfactory.cxx1074
-rw-r--r--slideshow/source/engine/transitions/snakewipe.cxx244
-rw-r--r--slideshow/source/engine/transitions/snakewipe.hxx76
-rw-r--r--slideshow/source/engine/transitions/spiralwipe.cxx131
-rw-r--r--slideshow/source/engine/transitions/spiralwipe.hxx68
-rw-r--r--slideshow/source/engine/transitions/sweepwipe.cxx84
-rw-r--r--slideshow/source/engine/transitions/sweepwipe.hxx53
-rw-r--r--slideshow/source/engine/transitions/transitionfactorytab.cxx2132
-rw-r--r--slideshow/source/engine/transitions/transitiontools.cxx69
-rw-r--r--slideshow/source/engine/transitions/transitiontools.hxx55
-rw-r--r--slideshow/source/engine/transitions/veewipe.cxx53
-rw-r--r--slideshow/source/engine/transitions/veewipe.hxx51
-rw-r--r--slideshow/source/engine/transitions/waterfallwipe.cxx77
-rw-r--r--slideshow/source/engine/transitions/waterfallwipe.hxx52
-rw-r--r--slideshow/source/engine/transitions/zigzagwipe.cxx82
-rw-r--r--slideshow/source/engine/transitions/zigzagwipe.hxx60
-rw-r--r--slideshow/source/engine/unoviewcontainer.cxx149
-rw-r--r--slideshow/source/engine/usereventqueue.cxx1007
-rw-r--r--slideshow/source/engine/waitsymbol.cxx208
-rw-r--r--slideshow/source/engine/waitsymbol.hxx108
-rw-r--r--slideshow/source/engine/wakeupevent.cxx99
-rw-r--r--slideshow/source/inc/activitiesfactory.hxx334
-rw-r--r--slideshow/source/inc/activitiesqueue.hxx130
-rw-r--r--slideshow/source/inc/activity.hxx100
-rw-r--r--slideshow/source/inc/animatableshape.hxx88
-rw-r--r--slideshow/source/inc/animatedsprite.hxx186
-rw-r--r--slideshow/source/inc/animation.hxx97
-rw-r--r--slideshow/source/inc/animationactivity.hxx75
-rw-r--r--slideshow/source/inc/animationeventhandler.hxx71
-rw-r--r--slideshow/source/inc/animationfactory.hxx157
-rw-r--r--slideshow/source/inc/animationfunction.hxx71
-rw-r--r--slideshow/source/inc/animationnode.hxx163
-rw-r--r--slideshow/source/inc/animationnodefactory.hxx78
-rw-r--r--slideshow/source/inc/attributableshape.hxx228
-rw-r--r--slideshow/source/inc/attributemap.hxx80
-rw-r--r--slideshow/source/inc/boolanimation.hxx77
-rw-r--r--slideshow/source/inc/coloranimation.hxx77
-rw-r--r--slideshow/source/inc/cursormanager.hxx72
-rw-r--r--slideshow/source/inc/debug.hxx77
-rw-r--r--slideshow/source/inc/delayevent.hxx157
-rw-r--r--slideshow/source/inc/disposable.hxx65
-rw-r--r--slideshow/source/inc/doctreenode.hxx141
-rw-r--r--slideshow/source/inc/doctreenodesupplier.hxx151
-rw-r--r--slideshow/source/inc/enumanimation.hxx79
-rw-r--r--slideshow/source/inc/event.hxx92
-rw-r--r--slideshow/source/inc/eventhandler.hxx67
-rw-r--r--slideshow/source/inc/eventmultiplexer.hxx661
-rw-r--r--slideshow/source/inc/eventqueue.hxx156
-rw-r--r--slideshow/source/inc/expressionnode.hxx66
-rw-r--r--slideshow/source/inc/expressionnodefactory.hxx82
-rw-r--r--slideshow/source/inc/externalmediashape.hxx91
-rw-r--r--slideshow/source/inc/framerate.hxx53
-rw-r--r--slideshow/source/inc/hslcolor.hxx123
-rw-r--r--slideshow/source/inc/hslcoloranimation.hxx77
-rw-r--r--slideshow/source/inc/hyperlinkarea.hxx104
-rw-r--r--slideshow/source/inc/hyperlinkhandler.hxx68
-rw-r--r--slideshow/source/inc/interruptabledelayevent.hxx150
-rw-r--r--slideshow/source/inc/intrinsicanimationeventhandler.hxx60
-rw-r--r--slideshow/source/inc/listenercontainer.hxx315
-rw-r--r--slideshow/source/inc/listenercontainerimpl.hxx225
-rw-r--r--slideshow/source/inc/mouseeventhandler.hxx153
-rw-r--r--slideshow/source/inc/numberanimation.hxx79
-rw-r--r--slideshow/source/inc/pairanimation.hxx78
-rw-r--r--slideshow/source/inc/pauseeventhandler.hxx68
-rw-r--r--slideshow/source/inc/rgbcolor.hxx125
-rw-r--r--slideshow/source/inc/screenupdater.hxx139
-rw-r--r--slideshow/source/inc/shape.hxx273
-rw-r--r--slideshow/source/inc/shapeattributelayer.hxx556
-rw-r--r--slideshow/source/inc/shapeattributelayerholder.hxx110
-rw-r--r--slideshow/source/inc/shapecursoreventhandler.hxx67
-rw-r--r--slideshow/source/inc/shapeimporter.hxx155
-rw-r--r--slideshow/source/inc/shapelistenereventhandler.hxx75
-rw-r--r--slideshow/source/inc/shapemanager.hxx125
-rw-r--r--slideshow/source/inc/shapemaps.hxx61
-rw-r--r--slideshow/source/inc/shapesubset.hxx150
-rw-r--r--slideshow/source/inc/slide.hxx217
-rw-r--r--slideshow/source/inc/slidebitmap.hxx95
-rw-r--r--slideshow/source/inc/slideshowcontext.hxx118
-rw-r--r--slideshow/source/inc/slideshowexceptions.hxx53
-rw-r--r--slideshow/source/inc/slideview.hxx62
-rw-r--r--slideshow/source/inc/smilfunctionparser.hxx167
-rw-r--r--slideshow/source/inc/soundplayer.hxx118
-rw-r--r--slideshow/source/inc/state.hxx73
-rw-r--r--slideshow/source/inc/stringanimation.hxx77
-rw-r--r--slideshow/source/inc/subsettableshapemanager.hxx126
-rw-r--r--slideshow/source/inc/tools.hxx404
-rw-r--r--slideshow/source/inc/transitionfactory.hxx148
-rw-r--r--slideshow/source/inc/transitioninfo.hxx160
-rw-r--r--slideshow/source/inc/unoview.hxx85
-rw-r--r--slideshow/source/inc/unoviewcontainer.hxx110
-rw-r--r--slideshow/source/inc/usereventqueue.hxx327
-rw-r--r--slideshow/source/inc/userpainteventhandler.hxx65
-rw-r--r--slideshow/source/inc/view.hxx95
-rw-r--r--slideshow/source/inc/vieweventhandler.hxx99
-rw-r--r--slideshow/source/inc/viewlayer.hxx175
-rw-r--r--slideshow/source/inc/viewrepainthandler.hxx73
-rw-r--r--slideshow/source/inc/viewupdate.hxx76
-rw-r--r--slideshow/source/inc/wakeupevent.hxx93
-rw-r--r--slideshow/test/demoshow.cxx570
-rw-r--r--slideshow/test/export.map34
-rw-r--r--slideshow/test/makefile.mk101
-rw-r--r--slideshow/test/slidetest.cxx370
-rw-r--r--slideshow/test/tests.hxx72
-rw-r--r--slideshow/test/testshape.cxx221
-rw-r--r--slideshow/test/testview.cxx286
-rw-r--r--slideshow/test/views.cxx90
-rw-r--r--slideshow/util/exports.dxp3
-rw-r--r--slideshow/util/makefile.mk104
-rw-r--r--slideshow/util/makefile.pmk47
-rw-r--r--slideshow/util/slideshowtest.flt4
-rwxr-xr-xsmoketestoo_native/com/sun/star/comp/smoketest/MANIFEST.MF2
-rwxr-xr-xsmoketestoo_native/com/sun/star/comp/smoketest/TestExtension.idl40
-rwxr-xr-xsmoketestoo_native/com/sun/star/comp/smoketest/TestExtension.java166
-rwxr-xr-xsmoketestoo_native/com/sun/star/comp/smoketest/delzip1
-rwxr-xr-xsmoketestoo_native/com/sun/star/comp/smoketest/makefile.mk90
-rwxr-xr-xsmoketestoo_native/com/sun/star/comp/smoketest/manifest.xml5
-rw-r--r--smoketestoo_native/data/Events.xml65
-rw-r--r--smoketestoo_native/data/Global.xml786
-rw-r--r--smoketestoo_native/data/OptionsDlg.xml64
-rw-r--r--smoketestoo_native/data/Test_10er.xml921
-rw-r--r--smoketestoo_native/data/Test_DB.xml161
-rw-r--r--smoketestoo_native/data/Test_Ext.xml121
-rw-r--r--smoketestoo_native/data/content.xml28
-rw-r--r--smoketestoo_native/data/dialog-lb.xml31
-rw-r--r--smoketestoo_native/data/dialog-lc.xml31
-rw-r--r--smoketestoo_native/data/makefile.mk70
-rw-r--r--smoketestoo_native/data/manifest.xml49
-rw-r--r--smoketestoo_native/data/meta.xml28
-rw-r--r--smoketestoo_native/data/script-lb.xml35
-rw-r--r--smoketestoo_native/data/script-lc.xml31
-rw-r--r--smoketestoo_native/data/settings.xml28
-rw-r--r--smoketestoo_native/data/styles.xml28
-rw-r--r--smoketestoo_native/makefile.mk65
-rw-r--r--smoketestoo_native/prj/build.lst5
-rw-r--r--smoketestoo_native/prj/d.lst0
-rw-r--r--smoketestoo_native/smoketest.cxx203
-rw-r--r--smoketestoo_native/version.map34
-rw-r--r--soldep/bootstrp/appdef.cxx165
-rw-r--r--soldep/bootstrp/build_list_converter.pl892
-rw-r--r--soldep/bootstrp/dep.cxx116
-rw-r--r--soldep/bootstrp/hashtbl.cxx511
-rw-r--r--soldep/bootstrp/makefile.mk83
-rw-r--r--soldep/bootstrp/minormk.cxx187
-rw-r--r--soldep/bootstrp/prj.cxx2893
-rw-r--r--soldep/bootstrp/prodmap.cxx517
-rw-r--r--soldep/inc/appdef.hxx161
-rw-r--r--soldep/inc/dep.hxx69
-rw-r--r--soldep/inc/dtsodcmp.hrc99
-rw-r--r--soldep/inc/minormk.hxx77
-rw-r--r--soldep/inc/prodmap.hxx86
-rw-r--r--soldep/inc/soldep/connctr.hxx86
-rw-r--r--soldep/inc/soldep/depper.hxx208
-rw-r--r--soldep/inc/soldep/depwin.hxx75
-rw-r--r--soldep/inc/soldep/graphwin.hxx54
-rw-r--r--soldep/inc/soldep/hashobj.hxx45
-rw-r--r--soldep/inc/soldep/hashtbl.hxx204
-rw-r--r--soldep/inc/soldep/objwin.hxx160
-rw-r--r--soldep/inc/soldep/prj.hxx485
-rw-r--r--soldep/inc/soldep/sdtresid.hxx52
-rw-r--r--soldep/inc/soldep/soldep.hxx116
-rw-r--r--soldep/inc/soldep/soldlg.hrc79
-rw-r--r--soldep/inc/soldep/soldlg.hxx160
-rw-r--r--soldep/inc/soldep/tbox.hxx102
-rw-r--r--soldep/prj/build.lst5
-rw-r--r--soldep/prj/d.lst38
-rw-r--r--soldep/source/connctr.cxx272
-rw-r--r--soldep/source/depapp.cxx147
-rw-r--r--soldep/source/depapp.hxx109
-rw-r--r--soldep/source/depper.cxx687
-rw-r--r--soldep/source/depwin.cxx164
-rw-r--r--soldep/source/graphwin.cxx77
-rw-r--r--soldep/source/hashobj.cxx37
-rw-r--r--soldep/source/makefile.mk146
-rw-r--r--soldep/source/objwin.cxx821
-rw-r--r--soldep/source/sdtresid.cxx49
-rw-r--r--soldep/source/soldep.cxx1807
-rw-r--r--soldep/source/soldep.icobin0 -> 10134 bytes
-rw-r--r--soldep/source/soldlg.cxx267
-rw-r--r--soldep/source/soldlg.src374
-rw-r--r--soldep/source/tbox.cxx596
-rw-r--r--soldep/util/perl.mk71
-rwxr-xr-xsolenv/bin/_mkout11
-rwxr-xr-xsolenv/bin/addsym-macosx.sh29
-rw-r--r--solenv/bin/addsym-mingw.sh34
-rw-r--r--solenv/bin/addsym.awk41
-rw-r--r--solenv/bin/build.pl3579
-rwxr-xr-xsolenv/bin/build_client.pl445
-rwxr-xr-xsolenv/bin/checkdll.sh83
-rw-r--r--solenv/bin/chrel.sed2
-rw-r--r--solenv/bin/cleandiff.pl45
-rwxr-xr-xsolenv/bin/cleanzip.pl64
-rw-r--r--solenv/bin/clipatchconfig.pl133
-rw-r--r--solenv/bin/convertlinks.pl122
-rw-r--r--solenv/bin/converttags.pl94
-rwxr-xr-xsolenv/bin/createpdbrelocators7
-rw-r--r--solenv/bin/createpdbrelocators.btm9
-rw-r--r--solenv/bin/createpdbrelocators.pl82
-rwxr-xr-xsolenv/bin/cws6
-rw-r--r--solenv/bin/cws.btm11
-rw-r--r--solenv/bin/cws.pl2068
-rwxr-xr-xsolenv/bin/cwsattach7
-rw-r--r--solenv/bin/cwsattach.btm11
-rw-r--r--solenv/bin/cwsattach.pl220
-rwxr-xr-xsolenv/bin/cwscreate6
-rwxr-xr-xsolenv/bin/cwstestresult7
-rw-r--r--solenv/bin/cwstestresult.btm11
-rw-r--r--solenv/bin/cwstestresult.pl192
-rwxr-xr-xsolenv/bin/cwstouched6
-rwxr-xr-xsolenv/bin/cwstouched.btm11
-rwxr-xr-xsolenv/bin/cwstouched.pl151
-rwxr-xr-xsolenv/bin/cwstouched.py111
-rw-r--r--solenv/bin/dbgsv.ini29
-rwxr-xr-xsolenv/bin/deliver.pl1522
-rwxr-xr-xsolenv/bin/diffmv.pl76
-rw-r--r--solenv/bin/exectest.pl98
-rw-r--r--solenv/bin/fix_def_file.cmd52
-rw-r--r--solenv/bin/fix_def_ord.cmd19
-rw-r--r--solenv/bin/fix_dxp_file.cmd30
-rw-r--r--solenv/bin/fix_exp_file.cmd54
-rw-r--r--solenv/bin/fix_lin_file.cmd13
-rw-r--r--solenv/bin/fix_shl.cmd11
-rwxr-xr-xsolenv/bin/gccinstlib.pl65
-rw-r--r--solenv/bin/gen_update_info.pl176
-rwxr-xr-xsolenv/bin/gen_userfeedback_VCL_names.pl196
-rwxr-xr-xsolenv/bin/genmap1
-rw-r--r--solenv/bin/getcompver.awk79
-rw-r--r--solenv/bin/getcsym.awk34
-rwxr-xr-xsolenv/bin/gsicheck18
-rwxr-xr-xsolenv/bin/guw.pl347
-rw-r--r--solenv/bin/hicontrast-to-theme.pl125
-rwxr-xr-xsolenv/bin/image-sort.pl149
-rwxr-xr-xsolenv/bin/install-sh3
-rw-r--r--solenv/bin/installoffice.oxtbin0 -> 1680 bytes
-rwxr-xr-xsolenv/bin/installoffice_impress.oxtbin0 -> 1311 bytes
-rwxr-xr-xsolenv/bin/langwrap131
-rwxr-xr-xsolenv/bin/leconvert.pl91
-rw-r--r--solenv/bin/licinserter.pl138
-rwxr-xr-xsolenv/bin/linkoo360
-rwxr-xr-xsolenv/bin/localize20
-rwxr-xr-xsolenv/bin/localize_sl18
-rw-r--r--solenv/bin/macosx-change-install-names.pl97
-rwxr-xr-xsolenv/bin/macosx-create-bundle105
-rw-r--r--solenv/bin/macosx-dylib-link-list.pl91
-rw-r--r--solenv/bin/make_download.pl129
-rwxr-xr-xsolenv/bin/make_ext_update_info.pl613
-rw-r--r--solenv/bin/make_installer.pl2381
-rwxr-xr-xsolenv/bin/makedepn13
-rw-r--r--solenv/bin/makemani.pl112
-rw-r--r--solenv/bin/mapgen.pl207
-rw-r--r--solenv/bin/mhids.pl398
-rw-r--r--solenv/bin/mkdir.btm6
-rwxr-xr-xsolenv/bin/mkdir.pl65
-rwxr-xr-xsolenv/bin/mkout.pl162
-rw-r--r--solenv/bin/modules/CreatePDBRelocators.pm206
-rwxr-xr-xsolenv/bin/modules/Cws.pm2153
-rw-r--r--solenv/bin/modules/CwsConfig.pm576
-rwxr-xr-xsolenv/bin/modules/Eis.pm220
-rw-r--r--solenv/bin/modules/GenInfoParser.pm296
-rw-r--r--solenv/bin/modules/RepositoryHelper.pm205
-rwxr-xr-xsolenv/bin/modules/SourceConfig.pm658
-rw-r--r--solenv/bin/modules/installer/archivefiles.pm565
-rw-r--r--solenv/bin/modules/installer/configuration.pm901
-rw-r--r--solenv/bin/modules/installer/control.pm729
-rw-r--r--solenv/bin/modules/installer/converter.pm462
-rw-r--r--solenv/bin/modules/installer/copyproject.pm118
-rw-r--r--solenv/bin/modules/installer/download.pm2180
-rw-r--r--solenv/bin/modules/installer/downloadsigner.pm585
-rw-r--r--solenv/bin/modules/installer/environment.pm141
-rw-r--r--solenv/bin/modules/installer/epmfile.pm3454
-rw-r--r--solenv/bin/modules/installer/existence.pm190
-rw-r--r--solenv/bin/modules/installer/exiter.pm113
-rw-r--r--solenv/bin/modules/installer/files.pm219
-rw-r--r--solenv/bin/modules/installer/followme.pm215
-rw-r--r--solenv/bin/modules/installer/globals.pm547
-rw-r--r--solenv/bin/modules/installer/javainstaller.pm1885
-rw-r--r--solenv/bin/modules/installer/languagepack.pm565
-rw-r--r--solenv/bin/modules/installer/languages.pm379
-rw-r--r--solenv/bin/modules/installer/logger.pm339
-rw-r--r--solenv/bin/modules/installer/mail.pm136
-rw-r--r--solenv/bin/modules/installer/packagelist.pm872
-rw-r--r--solenv/bin/modules/installer/packagepool.pm1048
-rw-r--r--solenv/bin/modules/installer/parameter.pm666
-rw-r--r--solenv/bin/modules/installer/pathanalyzer.pm75
-rw-r--r--solenv/bin/modules/installer/profiles.pm231
-rw-r--r--solenv/bin/modules/installer/regmerge.pm340
-rw-r--r--solenv/bin/modules/installer/remover.pm82
-rw-r--r--solenv/bin/modules/installer/scppatchsoname.pm218
-rw-r--r--solenv/bin/modules/installer/scpzipfiles.pm187
-rw-r--r--solenv/bin/modules/installer/scriptitems.pm2948
-rw-r--r--solenv/bin/modules/installer/servicesfile.pm1073
-rw-r--r--solenv/bin/modules/installer/setupscript.pm540
-rw-r--r--solenv/bin/modules/installer/simplepackage.pm814
-rw-r--r--solenv/bin/modules/installer/sorter.pm116
-rw-r--r--solenv/bin/modules/installer/strip.pm139
-rw-r--r--solenv/bin/modules/installer/substfilenamefiles.pm169
-rw-r--r--solenv/bin/modules/installer/systemactions.pm1738
-rw-r--r--solenv/bin/modules/installer/upx.pm156
-rw-r--r--solenv/bin/modules/installer/windows/admin.pm916
-rw-r--r--solenv/bin/modules/installer/windows/assembly.pm371
-rw-r--r--solenv/bin/modules/installer/windows/binary.pm77
-rw-r--r--solenv/bin/modules/installer/windows/component.pm524
-rw-r--r--solenv/bin/modules/installer/windows/createfolder.pm153
-rw-r--r--solenv/bin/modules/installer/windows/directory.pm456
-rw-r--r--solenv/bin/modules/installer/windows/feature.pm445
-rw-r--r--solenv/bin/modules/installer/windows/featurecomponent.pm244
-rw-r--r--solenv/bin/modules/installer/windows/file.pm971
-rw-r--r--solenv/bin/modules/installer/windows/font.pm110
-rw-r--r--solenv/bin/modules/installer/windows/icon.pm77
-rw-r--r--solenv/bin/modules/installer/windows/idtglobal.pm2423
-rw-r--r--solenv/bin/modules/installer/windows/inifile.pm146
-rw-r--r--solenv/bin/modules/installer/windows/java.pm120
-rw-r--r--solenv/bin/modules/installer/windows/language.pm74
-rw-r--r--solenv/bin/modules/installer/windows/media.pm458
-rwxr-xr-xsolenv/bin/modules/installer/windows/mergemodule.pm1652
-rw-r--r--solenv/bin/modules/installer/windows/msiglobal.pm2265
-rw-r--r--solenv/bin/modules/installer/windows/msp.pm1293
-rw-r--r--solenv/bin/modules/installer/windows/patch.pm155
-rw-r--r--solenv/bin/modules/installer/windows/property.pm656
-rw-r--r--solenv/bin/modules/installer/windows/registry.pm397
-rw-r--r--solenv/bin/modules/installer/windows/removefile.pm152
-rw-r--r--solenv/bin/modules/installer/windows/selfreg.pm88
-rw-r--r--solenv/bin/modules/installer/windows/shortcut.pm697
-rw-r--r--solenv/bin/modules/installer/windows/sign.pm1249
-rw-r--r--solenv/bin/modules/installer/windows/strip.pm159
-rw-r--r--solenv/bin/modules/installer/windows/update.pm600
-rw-r--r--solenv/bin/modules/installer/windows/upgrade.pm167
-rw-r--r--solenv/bin/modules/installer/worker.pm3436
-rw-r--r--solenv/bin/modules/installer/xpdinstaller.pm1832
-rw-r--r--solenv/bin/modules/installer/ziplist.pm811
-rw-r--r--solenv/bin/modules/macosxotoolhelper.pm44
-rwxr-xr-xsolenv/bin/modules/osarch.pm195
-rw-r--r--solenv/bin/modules/packager/check.pm88
-rw-r--r--solenv/bin/modules/packager/existence.pm52
-rw-r--r--solenv/bin/modules/packager/exiter.pm71
-rw-r--r--solenv/bin/modules/packager/files.pm184
-rw-r--r--solenv/bin/modules/packager/globals.pm54
-rw-r--r--solenv/bin/modules/packager/work.pm327
-rw-r--r--solenv/bin/modules/par2script/check.pm396
-rw-r--r--solenv/bin/modules/par2script/converter.pm142
-rw-r--r--solenv/bin/modules/par2script/existence.pm74
-rw-r--r--solenv/bin/modules/par2script/exiter.pm122
-rw-r--r--solenv/bin/modules/par2script/files.pm124
-rw-r--r--solenv/bin/modules/par2script/globals.pm81
-rw-r--r--solenv/bin/modules/par2script/module.pm264
-rw-r--r--solenv/bin/modules/par2script/parameter.pm154
-rw-r--r--solenv/bin/modules/par2script/remover.pm75
-rw-r--r--solenv/bin/modules/par2script/shortcut.pm75
-rw-r--r--solenv/bin/modules/par2script/systemactions.pm184
-rw-r--r--solenv/bin/modules/par2script/undefine.pm144
-rw-r--r--solenv/bin/modules/par2script/work.pm416
-rw-r--r--solenv/bin/modules/pre2par/directory.pm54
-rw-r--r--solenv/bin/modules/pre2par/existence.pm74
-rw-r--r--solenv/bin/modules/pre2par/exiter.pm70
-rw-r--r--solenv/bin/modules/pre2par/files.pm125
-rw-r--r--solenv/bin/modules/pre2par/globals.pm68
-rw-r--r--solenv/bin/modules/pre2par/language.pm172
-rw-r--r--solenv/bin/modules/pre2par/parameter.pm178
-rw-r--r--solenv/bin/modules/pre2par/pathanalyzer.pm75
-rw-r--r--solenv/bin/modules/pre2par/remover.pm67
-rw-r--r--solenv/bin/modules/pre2par/systemactions.pm206
-rw-r--r--solenv/bin/modules/pre2par/work.pm363
-rwxr-xr-xsolenv/bin/msg_filter61
-rw-r--r--solenv/bin/newfolderforce1
-rwxr-xr-xsolenv/bin/oochkpatch6
-rwxr-xr-xsolenv/bin/oochkpatch.btm2
-rw-r--r--solenv/bin/oochkpatch.pl301
-rw-r--r--solenv/bin/packager.pl61
-rwxr-xr-xsolenv/bin/packimages.pl437
-rw-r--r--solenv/bin/packregistry.xslt90
-rw-r--r--solenv/bin/par2script.pl117
-rwxr-xr-xsolenv/bin/patch_sanitizer.pl126
-rwxr-xr-xsolenv/bin/pchdelta4
-rwxr-xr-xsolenv/bin/pchdelta.py149
-rw-r--r--solenv/bin/pre2par.pl74
-rwxr-xr-xsolenv/bin/receditor6
-rwxr-xr-xsolenv/bin/relocate233
-rw-r--r--solenv/bin/rmdir.pl46
-rwxr-xr-xsolenv/bin/rpm-wrapper49
-rwxr-xr-xsolenv/bin/slfl.pl176
-rw-r--r--solenv/bin/soirpm.sh32
-rw-r--r--solenv/bin/sort.pl50
-rw-r--r--solenv/bin/subsequenttests131
-rw-r--r--solenv/bin/touch.pl42
-rw-r--r--solenv/bin/transform_description.pl138
-rw-r--r--solenv/bin/unxmap-to-macosx-explist.awk63
-rw-r--r--solenv/bin/update_module_ignore_lists.pl255
-rwxr-xr-xsolenv/bin/zipdep.pl337
-rw-r--r--solenv/config/sooo330.ini3557
-rw-r--r--solenv/config/ssolar.cmn335
-rw-r--r--solenv/inc/_cppunit.mk120
-rw-r--r--solenv/inc/_tg_app.mk2840
-rw-r--r--solenv/inc/_tg_def.mk2810
-rw-r--r--solenv/inc/_tg_lib.mk1020
-rw-r--r--solenv/inc/_tg_rslb.mk770
-rw-r--r--solenv/inc/_tg_scp.mk180
-rw-r--r--solenv/inc/_tg_sdi.mk270
-rw-r--r--solenv/inc/_tg_shl.mk6060
-rw-r--r--solenv/inc/_tg_srs.mk530
-rw-r--r--solenv/inc/_tg_zip.mk1230
-rw-r--r--solenv/inc/ant.mk100
-rw-r--r--solenv/inc/ant.properties12
-rw-r--r--solenv/inc/antsettings.mk87
-rw-r--r--solenv/inc/cppunit.mk56
-rw-r--r--solenv/inc/dummy.flt0
-rw-r--r--solenv/inc/extension_helplink.mk80
-rw-r--r--solenv/inc/extension_post.mk176
-rw-r--r--solenv/inc/extension_pre.mk59
-rw-r--r--solenv/inc/found_no.mk5
-rw-r--r--solenv/inc/installationtest.mk130
-rw-r--r--solenv/inc/javaunittest.mk107
-rw-r--r--solenv/inc/lang.mk57
-rw-r--r--solenv/inc/layout.mk32
-rw-r--r--solenv/inc/libs.mk539
-rw-r--r--solenv/inc/mime.types201
-rw-r--r--solenv/inc/minor.mk5
-rw-r--r--solenv/inc/os2.mk333
-rw-r--r--solenv/inc/os2gcci.mk288
-rw-r--r--solenv/inc/pkg_config.mk49
-rw-r--r--solenv/inc/postmac.h52
-rw-r--r--solenv/inc/postset.mk150
-rw-r--r--solenv/inc/preinclude.h38
-rw-r--r--solenv/inc/premac.h52
-rw-r--r--solenv/inc/pstrules.mk176
-rw-r--r--solenv/inc/rules.mk804
-rw-r--r--solenv/inc/sc.mk28
-rw-r--r--solenv/inc/scpre.mk50
-rw-r--r--solenv/inc/set_ext.mk37
-rw-r--r--solenv/inc/set_wntx64.mk215
-rw-r--r--solenv/inc/settings.mk1360
-rw-r--r--solenv/inc/shlinfo.rc113
-rw-r--r--solenv/inc/startup/OS2/macros.mk30
-rw-r--r--solenv/inc/startup/Readme6
-rw-r--r--solenv/inc/startup/startup.mk109
-rw-r--r--solenv/inc/startup/summary3
-rw-r--r--solenv/inc/startup/wnt/macros.mk32
-rw-r--r--solenv/inc/starview.hid304
-rw-r--r--solenv/inc/target.mk2117
-rw-r--r--solenv/inc/templates/extension_tmpl.mk153
-rw-r--r--solenv/inc/tg_app.mk316
-rw-r--r--solenv/inc/tg_compv.mk158
-rw-r--r--solenv/inc/tg_config.mk203
-rw-r--r--solenv/inc/tg_def.mk313
-rw-r--r--solenv/inc/tg_dep.mk96
-rw-r--r--solenv/inc/tg_ext.mk362
-rw-r--r--solenv/inc/tg_help.mk90
-rw-r--r--solenv/inc/tg_jar.mk89
-rw-r--r--solenv/inc/tg_java.mk84
-rw-r--r--solenv/inc/tg_javav.mk53
-rw-r--r--solenv/inc/tg_lib.mk134
-rw-r--r--solenv/inc/tg_merge.mk66
-rw-r--r--solenv/inc/tg_moz.mk89
-rw-r--r--solenv/inc/tg_obj.mk94
-rwxr-xr-xsolenv/inc/tg_propmerge.mk66
-rw-r--r--solenv/inc/tg_res.mk43
-rw-r--r--solenv/inc/tg_rslb.mk108
-rw-r--r--solenv/inc/tg_scp.mk50
-rw-r--r--solenv/inc/tg_sdi.mk59
-rw-r--r--solenv/inc/tg_shl.mk645
-rw-r--r--solenv/inc/tg_slo.mk98
-rw-r--r--solenv/inc/tg_srs.mk85
-rw-r--r--solenv/inc/tg_wntx64.mk514
-rwxr-xr-xsolenv/inc/tg_xmerge.mk108
-rw-r--r--solenv/inc/tg_yxx.mk48
-rw-r--r--solenv/inc/tg_zip.mk154
-rw-r--r--solenv/inc/trustedinfo.manifest11
-rw-r--r--solenv/inc/udkversion.mk33
-rw-r--r--solenv/inc/unitools.mk186
-rw-r--r--solenv/inc/unx.mk205
-rw-r--r--solenv/inc/unxaixp.mk113
-rw-r--r--solenv/inc/unxbsda.mk99
-rw-r--r--solenv/inc/unxbsdi.mk179
-rw-r--r--solenv/inc/unxbsdi2.mk198
-rw-r--r--solenv/inc/unxbsds.mk179
-rw-r--r--solenv/inc/unxfbsd.mk229
-rw-r--r--solenv/inc/unxfbsdi.mk46
-rw-r--r--solenv/inc/unxfbsdx.mk49
-rw-r--r--solenv/inc/unxhpgr.mk133
-rw-r--r--solenv/inc/unxhpxr.mk131
-rw-r--r--solenv/inc/unxlng.mk266
-rw-r--r--solenv/inc/unxlnga.mk33
-rw-r--r--solenv/inc/unxlngaxp.mk34
-rw-r--r--solenv/inc/unxlnghppa.mk35
-rw-r--r--solenv/inc/unxlngi.mk34
-rw-r--r--solenv/inc/unxlngm68k.mk37
-rw-r--r--solenv/inc/unxlngmips.mk33
-rw-r--r--solenv/inc/unxlngppc.mk37
-rw-r--r--solenv/inc/unxlngppc64.mk34
-rw-r--r--solenv/inc/unxlngr.mk34
-rw-r--r--solenv/inc/unxlngs.mk36
-rw-r--r--solenv/inc/unxlngs390.mk36
-rw-r--r--solenv/inc/unxlngs390x.mk33
-rw-r--r--solenv/inc/unxlngx.mk35
-rw-r--r--solenv/inc/unxmacx.mk289
-rw-r--r--solenv/inc/unxmacxi.mk53
-rw-r--r--solenv/inc/unxmacxp.mk37
-rw-r--r--solenv/inc/unxscoi.mk140
-rw-r--r--solenv/inc/unxsogi.mk141
-rw-r--r--solenv/inc/unxsogs.mk140
-rw-r--r--solenv/inc/unxsoli4.mk241
-rw-r--r--solenv/inc/unxsols4.mk247
-rw-r--r--solenv/inc/unxsolu4.mk242
-rw-r--r--solenv/inc/verinfo.hrc229
-rwxr-xr-xsolenv/inc/version.hrc80
-rw-r--r--solenv/inc/version.lst30
-rwxr-xr-xsolenv/inc/version_so.hrc79
-rw-r--r--solenv/inc/versionlist.mk30
-rw-r--r--solenv/inc/wnt.mk72
-rw-r--r--solenv/inc/wntgcci.mk217
-rw-r--r--solenv/inc/wntmsci10.mk343
-rw-r--r--solenv/inc/wntmsci11.mk391
-rw-r--r--solenv/makefile.mk40
-rw-r--r--solenv/prj/build.lst3
-rw-r--r--solenv/prj/d.lst2
-rwxr-xr-xsolenv/src/component.map8
-rw-r--r--solenv/src/default_description.xml15
-rw-r--r--solenv/src/solaris_noexstk.map4
-rwxr-xr-xsolenv/src/unloadablecomponent.map9
-rw-r--r--solenv/src/version.c79
-rw-r--r--solenv/unxmacxp/inc/poll.h173
-rwxr-xr-xsoltools/HIDCompiler/hidclex.l951
-rw-r--r--soltools/HIDCompiler/makefile.mk63
-rw-r--r--soltools/HIDCompiler/wrap_hidclex.cxx31
-rw-r--r--soltools/adjustvisibility/adjustvisibility.cxx311
-rw-r--r--soltools/adjustvisibility/makefile.mk59
-rw-r--r--soltools/checkdll/checkdll.c97
-rw-r--r--soltools/checkdll/makefile.mk58
-rw-r--r--soltools/cpp/Test.txt101
-rw-r--r--soltools/cpp/_cpp.c383
-rw-r--r--soltools/cpp/_eval.c766
-rw-r--r--soltools/cpp/_getopt.c71
-rw-r--r--soltools/cpp/_include.c235
-rw-r--r--soltools/cpp/_lex.c688
-rw-r--r--soltools/cpp/_macro.c756
-rw-r--r--soltools/cpp/_mcrvalid.c129
-rw-r--r--soltools/cpp/_nlist.c117
-rw-r--r--soltools/cpp/_tokens.c535
-rw-r--r--soltools/cpp/_unix.c234
-rw-r--r--soltools/cpp/cpp.h239
-rw-r--r--soltools/cpp/makefile.mk76
-rw-r--r--soltools/giparser/gen_info.cxx88
-rw-r--r--soltools/giparser/gi_list.cxx234
-rw-r--r--soltools/giparser/gi_parse.cxx407
-rw-r--r--soltools/giparser/makefile.mk62
-rw-r--r--soltools/giparser/st_gilrw.cxx180
-rw-r--r--soltools/inc/gen_info.hxx89
-rw-r--r--soltools/inc/gi_list.hxx215
-rw-r--r--soltools/inc/gi_parse.hxx165
-rw-r--r--soltools/inc/gilacces.hxx104
-rw-r--r--soltools/inc/pch/precompiled_soltools.cxx29
-rw-r--r--soltools/inc/pch/precompiled_soltools.hxx32
-rw-r--r--soltools/inc/simstr.hxx223
-rw-r--r--soltools/inc/st_gilrw.hxx125
-rw-r--r--soltools/inc/st_list.hxx330
-rw-r--r--soltools/inc/st_types.hxx40
-rw-r--r--soltools/javadep/javadep.c909
-rw-r--r--soltools/javadep/makefile.mk50
-rw-r--r--soltools/ldump/hashtbl.cxx458
-rw-r--r--soltools/ldump/hashtbl.hxx111
-rw-r--r--soltools/ldump/ldump.cxx758
-rw-r--r--soltools/ldump/ldump.hxx78
-rw-r--r--soltools/ldump/makefile.mk59
-rwxr-xr-xsoltools/mkdepend/collectdircontent.cxx83
-rw-r--r--soltools/mkdepend/collectdircontent.hxx58
-rw-r--r--soltools/mkdepend/cppsetup.c234
-rw-r--r--soltools/mkdepend/def.h188
-rw-r--r--soltools/mkdepend/ifparser.c460
-rw-r--r--soltools/mkdepend/ifparser.h75
-rw-r--r--soltools/mkdepend/imakemdep.h730
-rw-r--r--soltools/mkdepend/include.c326
-rw-r--r--soltools/mkdepend/main.c799
-rw-r--r--soltools/mkdepend/makefile.mk82
-rw-r--r--soltools/mkdepend/mkdepend.man368
-rw-r--r--soltools/mkdepend/parse.c614
-rw-r--r--soltools/mkdepend/pr.c137
-rw-r--r--soltools/prj/build.lst14
-rw-r--r--soltools/prj/d.lst13
-rw-r--r--soltools/support/makefile.mk55
-rw-r--r--soltools/support/simstr.cxx833
-rw-r--r--soltools/testSHL/inc/tlog.hxx100
-rw-r--r--soltools/testSHL/inc/tstMgr.hxx73
-rw-r--r--soltools/testSHL/inc/tutil.hxx49
-rw-r--r--soltools/testSHL/makefile.mk52
-rw-r--r--soltools/testSHL/testshl.cxx98
-rw-r--r--soltools/testSHL/util/makefile.mk45
-rw-r--r--soltools/testSHL/util/tlog.cxx108
-rw-r--r--soltools/testSHL/util/tstMgr.cxx164
-rw-r--r--soltools/testSHL/util/tutil.cxx147
-rw-r--r--soltools/testhxx/create.pl125
-rw-r--r--soltools/testhxx/makefile.mk51
-rw-r--r--soltools/testhxx/testhxx.cxx32
-rwxr-xr-xsoltools/util/makefile.pmk52
-rw-r--r--soltools/winunistd/makefile.mk52
-rw-r--r--soltools/winunistd/unistd.h4
-rw-r--r--sot/inc/absdev.hxx48
-rw-r--r--sot/inc/agg.hxx68
-rw-r--r--sot/inc/clsids.hxx33
-rw-r--r--sot/inc/filelist.hxx76
-rw-r--r--sot/inc/makefile.mk48
-rw-r--r--sot/inc/pch/precompiled_sot.cxx29
-rw-r--r--sot/inc/pch/precompiled_sot.hxx32
-rw-r--r--sot/inc/sot/exchange.hxx253
-rw-r--r--sot/inc/sot/factory.hxx91
-rw-r--r--sot/inc/sot/formats.hxx191
-rw-r--r--sot/inc/sot/object.hxx470
-rw-r--r--sot/inc/sot/sotdata.hxx60
-rw-r--r--sot/inc/sot/sotdllapi.h41
-rw-r--r--sot/inc/sot/sotref.hxx77
-rw-r--r--sot/inc/sot/storage.hxx272
-rw-r--r--sot/inc/stg.hxx398
-rw-r--r--sot/inc/storinfo.hxx72
-rw-r--r--sot/prj/build.lst8
-rw-r--r--sot/prj/d.lst27
-rw-r--r--sot/qa/complex/olesimplestorage/OLESimpleStorageTest.java5
-rw-r--r--sot/qa/complex/olesimplestorage/OLESimpleStorageUnitTest.java67
-rw-r--r--sot/qa/complex/olesimplestorage/Test01.java126
-rw-r--r--sot/qa/complex/olesimplestorage/TestHelper.java26
-rw-r--r--sot/qa/complex/olesimplestorage/makefile.mk84
-rw-r--r--sot/source/base/exchange.cxx508
-rw-r--r--sot/source/base/factory.cxx406
-rw-r--r--sot/source/base/filelist.cxx199
-rw-r--r--sot/source/base/formats.cxx1663
-rw-r--r--sot/source/base/makefile.mk58
-rw-r--r--sot/source/base/object.cxx489
-rw-r--r--sot/source/sdstor/makefile.mk64
-rw-r--r--sot/source/sdstor/stg.cxx1091
-rw-r--r--sot/source/sdstor/stgavl.cxx419
-rw-r--r--sot/source/sdstor/stgavl.hxx79
-rw-r--r--sot/source/sdstor/stgcache.cxx546
-rw-r--r--sot/source/sdstor/stgcache.hxx132
-rw-r--r--sot/source/sdstor/stgdir.cxx1054
-rw-r--r--sot/source/sdstor/stgdir.hxx132
-rw-r--r--sot/source/sdstor/stgelem.cxx425
-rw-r--r--sot/source/sdstor/stgelem.hxx166
-rw-r--r--sot/source/sdstor/stgio.cxx389
-rw-r--r--sot/source/sdstor/stgio.hxx80
-rw-r--r--sot/source/sdstor/stgole.cxx230
-rw-r--r--sot/source/sdstor/stgole.hxx77
-rw-r--r--sot/source/sdstor/stgstrms.cxx1247
-rw-r--r--sot/source/sdstor/stgstrms.hxx170
-rw-r--r--sot/source/sdstor/storage.cxx1563
-rw-r--r--sot/source/sdstor/storinfo.cxx111
-rw-r--r--sot/source/sdstor/ucbstorage.cxx3600
-rw-r--r--sot/source/sdstor/unostorageholder.cxx197
-rw-r--r--sot/source/sdstor/unostorageholder.hxx77
-rw-r--r--sot/source/unoolestorage/makefile.mk51
-rw-r--r--sot/source/unoolestorage/register.cxx101
-rw-r--r--sot/source/unoolestorage/xolesimplestorage.cxx811
-rw-r--r--sot/source/unoolestorage/xolesimplestorage.hxx195
-rw-r--r--sot/util/makefile.mk81
-rw-r--r--sot/util/makefile.pmk31
-rw-r--r--sot/util/sot.flt6
-rw-r--r--sot/workben/makefile.mk53
-rw-r--r--sot/workben/testsot.cxx55
-rw-r--r--splitbuild/base.lst1
-rw-r--r--splitbuild/binfilter.lst1
-rwxr-xr-xsplitbuild/bm4
-rw-r--r--splitbuild/build.lst1
-rw-r--r--splitbuild/calc.lst1
-rw-r--r--splitbuild/common.lst1
-rw-r--r--splitbuild/content.lst1
-rw-r--r--splitbuild/draw.lst1
-rw-r--r--splitbuild/extensions.lst1
-rw-r--r--splitbuild/extern.lst1
-rwxr-xr-xsplitbuild/filter.lst1
-rw-r--r--splitbuild/framework.lst1
-rw-r--r--splitbuild/gui.lst1
-rw-r--r--splitbuild/prj/build.lst1
-rw-r--r--splitbuild/prj/d.lst1
-rw-r--r--splitbuild/start.lst1
-rw-r--r--splitbuild/uno.lst1
-rw-r--r--splitbuild/writer.lst1
-rw-r--r--starmath/inc/action.hxx52
-rw-r--r--starmath/inc/applicat.hxx109
-rw-r--r--starmath/inc/config.hxx58
-rw-r--r--starmath/inc/dialog.hxx526
-rw-r--r--starmath/inc/document.hxx226
-rw-r--r--starmath/inc/edit.hxx151
-rwxr-xr-xstarmath/inc/format.hxx171
-rw-r--r--starmath/inc/makefile.mk47
-rw-r--r--starmath/inc/node.hxx854
-rw-r--r--starmath/inc/parse.hxx269
-rw-r--r--starmath/inc/pch/precompiled_starmath.cxx29
-rw-r--r--starmath/inc/pch/precompiled_starmath.hxx32
-rw-r--r--starmath/inc/rect.hxx260
-rw-r--r--starmath/inc/smdll.hxx50
-rw-r--r--starmath/inc/smmod.hxx181
-rw-r--r--starmath/inc/starmath.hrc768
-rw-r--r--starmath/inc/symbol.hxx189
-rw-r--r--starmath/inc/toolbox.hxx89
-rw-r--r--starmath/inc/types.hxx204
-rw-r--r--starmath/inc/unomodel.hxx109
-rw-r--r--starmath/inc/utility.hxx380
-rw-r--r--starmath/inc/view.hxx298
-rw-r--r--starmath/prj/build.lst9
-rw-r--r--starmath/prj/d.lst21
-rw-r--r--starmath/qa/unoapi/Test.java51
-rw-r--r--starmath/qa/unoapi/knownissues.xcl18
-rw-r--r--starmath/qa/unoapi/makefile.mk48
-rw-r--r--starmath/qa/unoapi/sm.sce9
-rw-r--r--starmath/sdi/makefile.mk58
-rw-r--r--starmath/sdi/smath.sdi964
-rw-r--r--starmath/sdi/smitems.sdi595
-rw-r--r--starmath/sdi/smslots.sdi332
-rw-r--r--starmath/source/accessibility.cxx2068
-rw-r--r--starmath/source/accessibility.hxx411
-rw-r--r--starmath/source/action.cxx67
-rw-r--r--starmath/source/cfgitem.cxx1291
-rw-r--r--starmath/source/cfgitem.hxx214
-rw-r--r--starmath/source/commands.src1561
-rw-r--r--starmath/source/config.cxx128
-rw-r--r--starmath/source/detreg.cxx112
-rw-r--r--starmath/source/dialog.cxx2453
-rw-r--r--starmath/source/dialog.hrc51
-rw-r--r--starmath/source/document.cxx1412
-rw-r--r--starmath/source/edit.cxx982
-rw-r--r--starmath/source/eqnolefilehdr.cxx90
-rw-r--r--starmath/source/eqnolefilehdr.hxx63
-rw-r--r--starmath/source/format.cxx242
-rw-r--r--starmath/source/makefile.mk114
-rw-r--r--starmath/source/math_pch.cxx833
-rw-r--r--starmath/source/mathmlexport.cxx1564
-rw-r--r--starmath/source/mathmlexport.hxx143
-rw-r--r--starmath/source/mathmlimport.cxx3186
-rw-r--r--starmath/source/mathmlimport.hxx347
-rw-r--r--starmath/source/mathtype.cxx3533
-rw-r--r--starmath/source/mathtype.hxx174
-rw-r--r--starmath/source/menu_tmpl.src160
-rwxr-xr-xstarmath/source/node.cxx3040
-rwxr-xr-xstarmath/source/parse.cxx2508
-rw-r--r--starmath/source/rect.cxx776
-rw-r--r--starmath/source/register.cxx319
-rw-r--r--starmath/source/smdetect.cxx490
-rw-r--r--starmath/source/smdetect.hxx95
-rw-r--r--starmath/source/smdll.cxx115
-rw-r--r--starmath/source/smmod.cxx391
-rwxr-xr-xstarmath/source/smres.src3576
-rw-r--r--starmath/source/symbol.cxx363
-rw-r--r--starmath/source/symbol.src345
-rw-r--r--starmath/source/toolbox.cxx413
-rw-r--r--starmath/source/toolbox.hrc34
-rw-r--r--starmath/source/typemap.cxx150
-rw-r--r--starmath/source/types.cxx52
-rw-r--r--starmath/source/unodoc.cxx71
-rwxr-xr-xstarmath/source/unomodel.cxx1149
-rw-r--r--starmath/source/utility.cxx381
-rwxr-xr-xstarmath/source/view.cxx1896
-rw-r--r--starmath/uiconfig/smath/menubar/menubar.xml121
-rw-r--r--starmath/uiconfig/smath/statusbar/statusbar.xml8
-rw-r--r--starmath/uiconfig/smath/toolbar/fullscreenbar.xml5
-rw-r--r--starmath/uiconfig/smath/toolbar/standardbar.xml26
-rw-r--r--starmath/uiconfig/smath/toolbar/toolbar.xml12
-rw-r--r--starmath/util/hidother.src117
-rw-r--r--starmath/util/makefile.mk114
-rw-r--r--starmath/xml/math.xml92
-rw-r--r--stax/makefile.mk78
-rw-r--r--stax/prj/build.lst2
-rw-r--r--stax/prj/d.lst1
-rw-r--r--stlport/STLport-4.0-sunstudio12u1.patch21
-rw-r--r--stlport/STLport-4.0.patch4926
-rw-r--r--stlport/STLport-4.5-0119.patch1328
-rw-r--r--stlport/STLport-4.5-gcc43_warnings.patch113
-rw-r--r--stlport/STLport-4.5.patch1047
-rw-r--r--stlport/dos_lineends.patch60
-rw-r--r--stlport/makefile.mk246
-rw-r--r--stlport/prj/build.lst2
-rw-r--r--stlport/prj/d.lst24
-rw-r--r--stlport/systemstl/functional62
-rw-r--r--stlport/systemstl/hash_map81
-rw-r--r--stlport/systemstl/hash_set52
-rw-r--r--stlport/systemstl/numeric53
-rw-r--r--stlport/systemstl/rope48
-rw-r--r--stlport/systemstl/slist45
-rw-r--r--stlport/systemstl/vector49
-rw-r--r--stlport/win32_custom.bat11
-rwxr-xr-xstlport/win32_custom.sh9
-rwxr-xr-xstlport/win32_sdk.bat11
-rw-r--r--stlport/win32_sdk.sh9
-rw-r--r--stoc/inc/bootstrapservices.hxx111
-rw-r--r--stoc/inc/makefile.mk47
-rw-r--r--stoc/inc/pch/precompiled_stoc.cxx29
-rw-r--r--stoc/inc/pch/precompiled_stoc.hxx289
-rw-r--r--stoc/inc/stocservices.hxx94
-rw-r--r--stoc/prj/build.lst25
-rw-r--r--stoc/prj/d.lst18
-rw-r--r--stoc/source/bootstrap/bootstrap.xml358
-rw-r--r--stoc/source/bootstrap/makefile.mk50
-rw-r--r--stoc/source/bootstrap/services.cxx147
-rw-r--r--stoc/source/corereflection/base.hxx456
-rw-r--r--stoc/source/corereflection/corefl.xml44
-rw-r--r--stoc/source/corereflection/crarray.cxx232
-rw-r--r--stoc/source/corereflection/crbase.cxx291
-rw-r--r--stoc/source/corereflection/crcomp.cxx405
-rw-r--r--stoc/source/corereflection/crefl.cxx546
-rw-r--r--stoc/source/corereflection/crenum.cxx247
-rw-r--r--stoc/source/corereflection/criface.cxx993
-rw-r--r--stoc/source/corereflection/lrucache.hxx243
-rw-r--r--stoc/source/corereflection/makefile.mk75
-rw-r--r--stoc/source/cppumaker.mk41
-rw-r--r--stoc/source/defaultregistry/defaultregistry.cxx1423
-rw-r--r--stoc/source/defaultregistry/makefile.mk46
-rw-r--r--stoc/source/implementationregistration/implreg.cxx1930
-rw-r--r--stoc/source/implementationregistration/makefile.mk47
-rw-r--r--stoc/source/implementationregistration/mergekeys.cxx186
-rw-r--r--stoc/source/implementationregistration/mergekeys.hxx52
-rw-r--r--stoc/source/inspect/insp.xml59
-rw-r--r--stoc/source/inspect/introspection.cxx3118
-rw-r--r--stoc/source/inspect/makefile.mk66
-rw-r--r--stoc/source/invocation/inv.xml77
-rw-r--r--stoc/source/invocation/invocation.cxx1268
-rw-r--r--stoc/source/invocation/makefile.mk65
-rw-r--r--stoc/source/invocation_adapterfactory/iafactory.cxx1033
-rw-r--r--stoc/source/invocation_adapterfactory/invadp.xml41
-rw-r--r--stoc/source/invocation_adapterfactory/makefile.mk65
-rw-r--r--stoc/source/javaloader/javaloader.cxx486
-rw-r--r--stoc/source/javaloader/javaloader.xml39
-rw-r--r--stoc/source/javaloader/makefile.mk72
-rw-r--r--stoc/source/javavm/interact.cxx125
-rw-r--r--stoc/source/javavm/interact.hxx75
-rw-r--r--stoc/source/javavm/javavm.cxx1809
-rw-r--r--stoc/source/javavm/javavm.hxx172
-rw-r--r--stoc/source/javavm/jen.xml70
-rw-r--r--stoc/source/javavm/jvmargs.cxx66
-rw-r--r--stoc/source/javavm/jvmargs.hxx58
-rw-r--r--stoc/source/javavm/makefile.mk87
-rw-r--r--stoc/source/loader/dllcomponentloader.cxx261
-rw-r--r--stoc/source/loader/makefile.mk47
-rw-r--r--stoc/source/module-description.dtd54
-rw-r--r--stoc/source/namingservice/makefile.mk66
-rw-r--r--stoc/source/namingservice/namingservice.cxx252
-rw-r--r--stoc/source/namingservice/namingservice.xml37
-rw-r--r--stoc/source/proxy_factory/makefile.mk65
-rw-r--r--stoc/source/proxy_factory/proxyfac.cxx544
-rw-r--r--stoc/source/proxy_factory/proxyfac.xml37
-rw-r--r--stoc/source/registry_tdprovider/base.hxx647
-rw-r--r--stoc/source/registry_tdprovider/functiondescription.cxx115
-rw-r--r--stoc/source/registry_tdprovider/functiondescription.hxx86
-rw-r--r--stoc/source/registry_tdprovider/makefile.mk61
-rw-r--r--stoc/source/registry_tdprovider/methoddescription.cxx144
-rw-r--r--stoc/source/registry_tdprovider/methoddescription.hxx82
-rw-r--r--stoc/source/registry_tdprovider/rdbtdp_tdenumeration.cxx643
-rw-r--r--stoc/source/registry_tdprovider/rdbtdp_tdenumeration.hxx116
-rw-r--r--stoc/source/registry_tdprovider/structtypedescription.cxx139
-rw-r--r--stoc/source/registry_tdprovider/structtypedescription.hxx105
-rw-r--r--stoc/source/registry_tdprovider/td.cxx80
-rw-r--r--stoc/source/registry_tdprovider/tdcomp.cxx187
-rw-r--r--stoc/source/registry_tdprovider/tdconsts.cxx110
-rw-r--r--stoc/source/registry_tdprovider/tdef.cxx82
-rw-r--r--stoc/source/registry_tdprovider/tdenum.cxx135
-rw-r--r--stoc/source/registry_tdprovider/tdiface.cxx585
-rw-r--r--stoc/source/registry_tdprovider/tdmodule.cxx126
-rw-r--r--stoc/source/registry_tdprovider/tdprop.cxx68
-rw-r--r--stoc/source/registry_tdprovider/tdprovider.cxx632
-rw-r--r--stoc/source/registry_tdprovider/tdservice.cxx565
-rw-r--r--stoc/source/registry_tdprovider/tdsingleton.cxx132
-rw-r--r--stoc/source/security/access_controller.cxx1061
-rw-r--r--stoc/source/security/file_policy.cxx604
-rw-r--r--stoc/source/security/lru_cache.h279
-rw-r--r--stoc/source/security/makefile.mk62
-rw-r--r--stoc/source/security/permissions.cxx666
-rw-r--r--stoc/source/security/permissions.h102
-rw-r--r--stoc/source/servicemanager/makefile.mk47
-rw-r--r--stoc/source/servicemanager/servicemanager.cxx2059
-rw-r--r--stoc/source/simpleregistry/makefile.mk46
-rw-r--r--stoc/source/simpleregistry/simpleregistry.cxx1306
-rw-r--r--stoc/source/stocservices/makefile.mk49
-rw-r--r--stoc/source/stocservices/stocserv.xml98
-rw-r--r--stoc/source/stocservices/stocservices.cxx117
-rw-r--r--stoc/source/tdmanager/lrucache.hxx247
-rw-r--r--stoc/source/tdmanager/makefile.mk49
-rw-r--r--stoc/source/tdmanager/tdmgr.cxx1163
-rw-r--r--stoc/source/tdmanager/tdmgr_check.cxx556
-rw-r--r--stoc/source/tdmanager/tdmgr_common.hxx60
-rw-r--r--stoc/source/tdmanager/tdmgr_tdenumeration.cxx187
-rw-r--r--stoc/source/tdmanager/tdmgr_tdenumeration.hxx89
-rw-r--r--stoc/source/typeconv/convert.cxx963
-rw-r--r--stoc/source/typeconv/makefile.mk48
-rw-r--r--stoc/source/uriproc/ExternalUriReferenceTranslator.cxx240
-rw-r--r--stoc/source/uriproc/ExternalUriReferenceTranslator.hxx59
-rw-r--r--stoc/source/uriproc/UriReference.cxx206
-rw-r--r--stoc/source/uriproc/UriReference.hxx108
-rw-r--r--stoc/source/uriproc/UriReferenceFactory.cxx724
-rw-r--r--stoc/source/uriproc/UriReferenceFactory.hxx59
-rw-r--r--stoc/source/uriproc/UriSchemeParser_vndDOTsunDOTstarDOTexpand.cxx268
-rw-r--r--stoc/source/uriproc/UriSchemeParser_vndDOTsunDOTstarDOTexpand.hxx62
-rw-r--r--stoc/source/uriproc/UriSchemeParser_vndDOTsunDOTstarDOTscript.cxx485
-rw-r--r--stoc/source/uriproc/UriSchemeParser_vndDOTsunDOTstarDOTscript.hxx61
-rw-r--r--stoc/source/uriproc/VndSunStarPkgUrlReferenceFactory.cxx167
-rw-r--r--stoc/source/uriproc/VndSunStarPkgUrlReferenceFactory.hxx59
-rw-r--r--stoc/source/uriproc/makefile.mk53
-rw-r--r--stoc/source/uriproc/supportsService.cxx51
-rw-r--r--stoc/source/uriproc/supportsService.hxx43
-rw-r--r--stoc/test/excomp/example/ExampleComponent1.idl43
-rw-r--r--stoc/test/excomp/example/ExampleComponent2.idl43
-rw-r--r--stoc/test/excomp/example/XTest.idl49
-rw-r--r--stoc/test/excomp/excomp.cxx136
-rw-r--r--stoc/test/excomp/excomp1.cxx215
-rw-r--r--stoc/test/excomp/excomp1.xml33
-rw-r--r--stoc/test/excomp/excomp2.cxx286
-rw-r--r--stoc/test/excomp/excomp2.xml33
-rw-r--r--stoc/test/excomp/exports.dxp3
-rw-r--r--stoc/test/excomp/makefile.mk130
-rw-r--r--stoc/test/javavm/jvm_interaction/interactionhandler.cxx205
-rw-r--r--stoc/test/javavm/jvm_interaction/makefile.mk81
-rw-r--r--stoc/test/javavm/makefile.mk73
-rw-r--r--stoc/test/javavm/testapplet/TestApplet.html19
-rw-r--r--stoc/test/javavm/testapplet/TestApplet.java58
-rw-r--r--stoc/test/javavm/testapplet/makefile.mk55
-rw-r--r--stoc/test/javavm/testcomponent/TestComponent.java128
-rw-r--r--stoc/test/javavm/testcomponent/makefile.mk58
-rw-r--r--stoc/test/javavm/testcomponent/manifest1
-rw-r--r--stoc/test/javavm/testjavavm.cxx202
-rw-r--r--stoc/test/javavm/testjavavm.java39
-rw-r--r--stoc/test/language_binding.idl177
-rw-r--r--stoc/test/makefile.mk223
-rw-r--r--stoc/test/mergekeys_.cxx31
-rw-r--r--stoc/test/registry_tdprovider/makefile.mk63
-rw-r--r--stoc/test/registry_tdprovider/readme.txt4
-rw-r--r--stoc/test/registry_tdprovider/testregistrytdprovider.cxx943
-rw-r--r--stoc/test/registry_tdprovider/types.idl112
-rw-r--r--stoc/test/security/makefile.mk59
-rw-r--r--stoc/test/security/test_security.cxx523
-rw-r--r--stoc/test/security/test_security.ini6
-rw-r--r--stoc/test/security/test_security.policy37
-rw-r--r--stoc/test/security/test_security_singleuser.ini6
-rw-r--r--stoc/test/tdmanager/makefile.mk75
-rw-r--r--stoc/test/tdmanager/readme.txt4
-rw-r--r--stoc/test/tdmanager/testtdmanager.cxx374
-rw-r--r--stoc/test/tdmanager/types.idl45
-rw-r--r--stoc/test/tdmanager/types2_incomp.idl38
-rw-r--r--stoc/test/tdmanager/types3_incomp.idl33
-rw-r--r--stoc/test/tdmanager/types4_incomp.idl42
-rw-r--r--stoc/test/tdmanager/types5.idl45
-rw-r--r--stoc/test/tdmanager/types5_incomp.idl43
-rw-r--r--stoc/test/tdmanager/types6_incomp.idl43
-rw-r--r--stoc/test/testconv.cxx705
-rw-r--r--stoc/test/testcorefl.cxx412
-rw-r--r--stoc/test/testcorefl.idl102
-rw-r--r--stoc/test/testiadapter.cxx1069
-rw-r--r--stoc/test/testintrosp.cxx1617
-rw-r--r--stoc/test/testintrosp.idl220
-rw-r--r--stoc/test/testloader.cxx137
-rw-r--r--stoc/test/testproxyfac.cxx379
-rw-r--r--stoc/test/testregistry.cxx696
-rw-r--r--stoc/test/testsmgr.cxx105
-rw-r--r--stoc/test/testsmgr2.cxx118
-rw-r--r--stoc/test/testsmgr_cpnt.cxx472
-rw-r--r--stoc/test/testsmgr_cpnt.map9
-rw-r--r--stoc/test/uriproc/makefile.mk75
-rw-r--r--stoc/test/uriproc/test_uriproc.cxx1004
-rw-r--r--stoc/test/uriproc/version.map34
-rw-r--r--stoc/unosdk.mk34
-rw-r--r--stoc/util/makefile.mk96
-rw-r--r--store/inc/makefile.mk47
-rw-r--r--store/inc/pch/precompiled_store.cxx29
-rw-r--r--store/inc/pch/precompiled_store.hxx32
-rw-r--r--store/inc/store/store.h411
-rw-r--r--store/inc/store/store.hxx609
-rw-r--r--store/inc/store/types.h167
-rw-r--r--store/prj/build.lst5
-rw-r--r--store/prj/d.lst13
-rw-r--r--store/source/lockbyte.cxx947
-rw-r--r--store/source/lockbyte.hxx184
-rw-r--r--store/source/makefile.mk71
-rw-r--r--store/source/object.cxx112
-rw-r--r--store/source/object.hxx138
-rw-r--r--store/source/storbase.cxx197
-rw-r--r--store/source/storbase.hxx954
-rw-r--r--store/source/storbios.cxx1129
-rw-r--r--store/source/storbios.hxx267
-rw-r--r--store/source/storcach.cxx561
-rw-r--r--store/source/storcach.hxx112
-rw-r--r--store/source/stordata.cxx1130
-rw-r--r--store/source/stordata.hxx870
-rw-r--r--store/source/stordir.cxx241
-rw-r--r--store/source/stordir.hxx149
-rw-r--r--store/source/store.cxx765
-rw-r--r--store/source/storlckb.cxx451
-rw-r--r--store/source/storlckb.hxx171
-rw-r--r--store/source/storpage.cxx1057
-rw-r--r--store/source/storpage.hxx226
-rw-r--r--store/source/stortree.cxx582
-rw-r--r--store/source/stortree.hxx345
-rw-r--r--store/util/makefile.mk79
-rw-r--r--store/util/store.map31
-rw-r--r--store/util/store.xml7
-rw-r--r--store/version.mk40
-rw-r--r--store/workben/makefile.mk108
-rw-r--r--store/workben/t_base.cxx371
-rw-r--r--store/workben/t_file.cxx244
-rw-r--r--store/workben/t_leak.cxx19
-rw-r--r--store/workben/t_page.cxx1574
-rw-r--r--store/workben/t_store.cxx605
-rw-r--r--svl/inc/PasswordHelper.hxx54
-rw-r--r--svl/inc/adrparse.hxx107
-rw-r--r--svl/inc/broadcast.hxx67
-rw-r--r--svl/inc/cntnrsrt.hxx174
-rw-r--r--svl/inc/cntwids.hrc506
-rw-r--r--svl/inc/converter.hxx43
-rw-r--r--svl/inc/filenotation.hxx71
-rw-r--r--svl/inc/folderrestriction.hxx56
-rw-r--r--svl/inc/fstathelper.hxx65
-rw-r--r--svl/inc/inetdef.hxx29
-rw-r--r--svl/inc/inetmsg.hxx29
-rw-r--r--svl/inc/inetstrm.hxx29
-rw-r--r--svl/inc/instrm.hxx80
-rw-r--r--svl/inc/listener.hxx65
-rw-r--r--svl/inc/listeneriter.hxx79
-rw-r--r--svl/inc/lngmisc.hxx73
-rw-r--r--svl/inc/makefile.mk48
-rw-r--r--svl/inc/nfsymbol.hxx69
-rw-r--r--svl/inc/numuno.hxx99
-rw-r--r--svl/inc/outstrm.hxx66
-rw-r--r--svl/inc/pch/precompiled_svl.cxx29
-rw-r--r--svl/inc/pch/precompiled_svl.hxx432
-rw-r--r--svl/inc/pickerhelper.hxx69
-rw-r--r--svl/inc/pickerhistory.hxx51
-rw-r--r--svl/inc/pickerhistoryaccess.hxx54
-rw-r--r--svl/inc/poolcach.hxx58
-rw-r--r--svl/inc/strmadpt.hxx135
-rw-r--r--svl/inc/stylepool.hxx100
-rw-r--r--svl/inc/svl/aeitem.hxx71
-rw-r--r--svl/inc/svl/asiancfg.hxx69
-rw-r--r--svl/inc/svl/brdcst.hxx75
-rw-r--r--svl/inc/svl/cancel.hxx142
-rw-r--r--svl/inc/svl/cenumitm.hxx177
-rw-r--r--svl/inc/svl/cintitem.hxx283
-rw-r--r--svl/inc/svl/cjkoptions.hxx79
-rw-r--r--svl/inc/svl/cnclhint.hxx48
-rw-r--r--svl/inc/svl/cntwall.hxx80
-rw-r--r--svl/inc/svl/ctloptions.hxx94
-rw-r--r--svl/inc/svl/ctypeitm.hxx82
-rw-r--r--svl/inc/svl/custritm.hxx92
-rw-r--r--svl/inc/svl/dateitem.hxx106
-rw-r--r--svl/inc/svl/documentlockfile.hxx71
-rw-r--r--svl/inc/svl/eitem.hxx69
-rw-r--r--svl/inc/svl/filerec.hxx1084
-rw-r--r--svl/inc/svl/flagitem.hxx80
-rw-r--r--svl/inc/svl/globalnameitem.hxx59
-rw-r--r--svl/inc/svl/hint.hxx72
-rw-r--r--svl/inc/svl/httpcook.hxx152
-rw-r--r--svl/inc/svl/ilstitem.hxx63
-rw-r--r--svl/inc/svl/imageitm.hxx59
-rw-r--r--svl/inc/svl/inethist.hxx132
-rw-r--r--svl/inc/svl/inettype.hxx476
-rw-r--r--svl/inc/svl/intitem.hxx173
-rw-r--r--svl/inc/svl/isethint.hxx55
-rw-r--r--svl/inc/svl/itemiter.hxx68
-rw-r--r--svl/inc/svl/itempool.hxx303
-rw-r--r--svl/inc/svl/itemprop.hxx219
-rw-r--r--svl/inc/svl/itemset.hxx213
-rw-r--r--svl/inc/svl/languageoptions.hxx128
-rw-r--r--svl/inc/svl/lckbitem.hxx65
-rw-r--r--svl/inc/svl/lockfilecommon.hxx80
-rw-r--r--svl/inc/svl/lstner.hxx78
-rw-r--r--svl/inc/svl/macitem.hxx209
-rw-r--r--svl/inc/svl/mailenum.hxx95
-rw-r--r--svl/inc/svl/memberid.hrc69
-rw-r--r--svl/inc/svl/metitem.hxx53
-rw-r--r--svl/inc/svl/nfkeytab.hxx117
-rw-r--r--svl/inc/svl/nfversi.hxx69
-rw-r--r--svl/inc/svl/nranges.hxx94
-rw-r--r--svl/inc/svl/ondemand.hxx465
-rw-r--r--svl/inc/svl/ownlist.hxx99
-rw-r--r--svl/inc/svl/poolitem.hxx488
-rw-r--r--svl/inc/svl/ptitem.hxx77
-rw-r--r--svl/inc/svl/rectitem.hxx77
-rw-r--r--svl/inc/svl/restrictedpaths.hxx82
-rw-r--r--svl/inc/svl/rngitem.hxx114
-rw-r--r--svl/inc/svl/sfontitm.hxx241
-rw-r--r--svl/inc/svl/sharecontrolfile.hxx85
-rw-r--r--svl/inc/svl/slstitm.hxx84
-rw-r--r--svl/inc/svl/smplhint.hxx99
-rw-r--r--svl/inc/svl/solar.hrc341
-rw-r--r--svl/inc/svl/srchcfg.hxx82
-rw-r--r--svl/inc/svl/srchdefs.hxx49
-rw-r--r--svl/inc/svl/srchitem.hxx293
-rw-r--r--svl/inc/svl/stritem.hxx55
-rw-r--r--svl/inc/svl/style.hrc39
-rw-r--r--svl/inc/svl/style.hxx397
-rw-r--r--svl/inc/svl/svarray.hxx1053
-rw-r--r--svl/inc/svl/svdde.hxx480
-rw-r--r--svl/inc/svl/svl.hrc160
-rw-r--r--svl/inc/svl/svldata.hxx72
-rw-r--r--svl/inc/svl/svldllapi.h41
-rw-r--r--svl/inc/svl/svstdarr.hxx271
-rw-r--r--svl/inc/svl/szitem.hxx77
-rw-r--r--svl/inc/svl/undo.hxx237
-rw-r--r--svl/inc/svl/urlfilter.hxx63
-rw-r--r--svl/inc/svl/visitem.hxx93
-rw-r--r--svl/inc/svl/zforlist.hxx1031
-rw-r--r--svl/inc/svl/zformat.hxx593
-rw-r--r--svl/inc/urihelper.hxx235
-rw-r--r--svl/inc/urlbmk.hxx69
-rw-r--r--svl/inc/whiter.hxx60
-rw-r--r--svl/inc/xmlement.hxx43
-rw-r--r--svl/prj/build.lst22
-rw-r--r--svl/prj/d.lst22
-rw-r--r--svl/qa/complex/ConfigItems/CheckConfigItems.java178
-rw-r--r--svl/qa/complex/ConfigItems/helper/AccessibilityOptTest.cxx392
-rw-r--r--svl/qa/complex/ConfigItems/helper/AccessibilityOptTest.hxx70
-rw-r--r--svl/qa/complex/ConfigItems/helper/ConfigItemTest.cxx245
-rw-r--r--svl/qa/complex/ConfigItems/helper/HistoryOptTest.cxx798
-rw-r--r--svl/qa/complex/ConfigItems/helper/HistoryOptTest.hxx203
-rw-r--r--svl/qa/complex/ConfigItems/helper/PrintOptTest.cxx735
-rw-r--r--svl/qa/complex/ConfigItems/helper/PrintOptTest.hxx84
-rw-r--r--svl/qa/complex/ConfigItems/helper/UserOptTest.cxx266
-rw-r--r--svl/qa/complex/ConfigItems/helper/UserOptTest.hxx70
-rw-r--r--svl/qa/complex/ConfigItems/helper/makefile.mk73
-rw-r--r--svl/qa/complex/ConfigItems/makefile.mk83
-rw-r--r--svl/qa/complex/passwordcontainer/MasterPasswdHandler.java61
-rw-r--r--svl/qa/complex/passwordcontainer/PasswordContainerTest.java32
-rw-r--r--svl/qa/complex/passwordcontainer/PasswordContainerUnitTest.java73
-rw-r--r--svl/qa/complex/passwordcontainer/Test01.java111
-rw-r--r--svl/qa/complex/passwordcontainer/Test02.java155
-rw-r--r--svl/qa/complex/passwordcontainer/Test03.java118
-rw-r--r--svl/qa/complex/passwordcontainer/TestHelper.java88
-rw-r--r--svl/qa/complex/passwordcontainer/makefile.mk87
-rw-r--r--svl/qa/export.map34
-rw-r--r--svl/qa/makefile.mk101
-rw-r--r--svl/qa/test_URIHelper.cxx459
-rw-r--r--svl/source/config/asiancfg.cxx291
-rw-r--r--svl/source/config/cjkoptions.cxx504
-rw-r--r--svl/source/config/ctloptions.cxx492
-rw-r--r--svl/source/config/itemholder2.cxx179
-rw-r--r--svl/source/config/itemholder2.hxx89
-rw-r--r--svl/source/config/languageoptions.cxx276
-rw-r--r--svl/source/config/makefile.mk52
-rw-r--r--svl/source/config/srchcfg.cxx287
-rw-r--r--svl/source/filepicker/makefile.mk47
-rw-r--r--svl/source/filepicker/pickerhelper.cxx99
-rw-r--r--svl/source/filepicker/pickerhistory.cxx138
-rw-r--r--svl/source/filerec/filerec.cxx1016
-rw-r--r--svl/source/filerec/makefile.mk46
-rw-r--r--svl/source/fsstor/fsfactory.cxx292
-rw-r--r--svl/source/fsstor/fsstorage.cxx1614
-rw-r--r--svl/source/fsstor/fsstorage.hxx337
-rw-r--r--svl/source/fsstor/makefile.mk66
-rw-r--r--svl/source/fsstor/oinputstreamcontainer.cxx347
-rw-r--r--svl/source/fsstor/oinputstreamcontainer.hxx96
-rw-r--r--svl/source/fsstor/ostreamcontainer.cxx567
-rw-r--r--svl/source/fsstor/ostreamcontainer.hxx125
-rw-r--r--svl/source/inc/fsfactory.hxx72
-rw-r--r--svl/source/inc/passwordcontainer.hxx426
-rw-r--r--svl/source/inc/poolio.hxx201
-rw-r--r--svl/source/items/aeitem.cxx314
-rw-r--r--svl/source/items/cenumitm.cxx294
-rw-r--r--svl/source/items/cintitem.cxx562
-rw-r--r--svl/source/items/cntwall.cxx167
-rw-r--r--svl/source/items/cstitem.src69
-rw-r--r--svl/source/items/ctypeitm.cxx251
-rw-r--r--svl/source/items/custritm.cxx138
-rw-r--r--svl/source/items/dateitem.cxx278
-rw-r--r--svl/source/items/eitem.cxx47
-rw-r--r--svl/source/items/flagitem.cxx163
-rw-r--r--svl/source/items/globalnameitem.cxx114
-rw-r--r--svl/source/items/ilstitem.cxx103
-rw-r--r--svl/source/items/imageitm.cxx145
-rw-r--r--svl/source/items/intitem.cxx258
-rw-r--r--svl/source/items/itemiter.cxx119
-rw-r--r--svl/source/items/itempool.cxx1173
-rw-r--r--svl/source/items/itemprop.cxx503
-rw-r--r--svl/source/items/itemset.cxx2125
-rw-r--r--svl/source/items/lckbitem.cxx191
-rw-r--r--svl/source/items/macitem.cxx295
-rw-r--r--svl/source/items/makefile.mk84
-rw-r--r--svl/source/items/nranges.cxx850
-rw-r--r--svl/source/items/poolcach.cxx156
-rw-r--r--svl/source/items/poolio.cxx1712
-rw-r--r--svl/source/items/poolitem.cxx524
-rw-r--r--svl/source/items/ptitem.cxx205
-rw-r--r--svl/source/items/rectitem.cxx201
-rw-r--r--svl/source/items/rngitem.cxx54
-rw-r--r--svl/source/items/rngitem_inc.cxx240
-rw-r--r--svl/source/items/sfontitm.cxx139
-rw-r--r--svl/source/items/sitem.cxx113
-rw-r--r--svl/source/items/slstitm.cxx422
-rw-r--r--svl/source/items/srchitem.cxx653
-rw-r--r--svl/source/items/stritem.cxx72
-rw-r--r--svl/source/items/style.cxx1397
-rw-r--r--svl/source/items/stylepool.cxx541
-rw-r--r--svl/source/items/szitem.cxx211
-rw-r--r--svl/source/items/visitem.cxx145
-rw-r--r--svl/source/items/whassert.hxx54
-rw-r--r--svl/source/items/whiter.cxx124
-rw-r--r--svl/source/memtools/makefile.mk46
-rw-r--r--svl/source/memtools/svarray.cxx382
-rw-r--r--svl/source/misc/PasswordHelper.cxx106
-rw-r--r--svl/source/misc/adrparse.cxx918
-rw-r--r--svl/source/misc/documentlockfile.cxx234
-rw-r--r--svl/source/misc/filenotation.cxx144
-rw-r--r--svl/source/misc/folderrestriction.cxx106
-rw-r--r--svl/source/misc/fstathelper.cxx100
-rw-r--r--svl/source/misc/inethist.cxx542
-rw-r--r--svl/source/misc/inettype.cxx1340
-rw-r--r--svl/source/misc/lngmisc.cxx138
-rw-r--r--svl/source/misc/lockfilecommon.cxx272
-rw-r--r--svl/source/misc/makefile.mk70
-rw-r--r--svl/source/misc/mediatyp.src607
-rw-r--r--svl/source/misc/ownlist.cxx327
-rw-r--r--svl/source/misc/restrictedpaths.cxx214
-rw-r--r--svl/source/misc/sharecontrolfile.cxx373
-rw-r--r--svl/source/misc/strmadpt.cxx1045
-rw-r--r--svl/source/misc/svldata.cxx91
-rw-r--r--svl/source/misc/urihelper.cxx948
-rw-r--r--svl/source/notify/brdcst.cxx209
-rw-r--r--svl/source/notify/broadcast.cxx148
-rw-r--r--svl/source/notify/cancel.cxx201
-rw-r--r--svl/source/notify/hint.cxx47
-rw-r--r--svl/source/notify/isethint.cxx75
-rw-r--r--svl/source/notify/listener.cxx166
-rw-r--r--svl/source/notify/listenerbase.cxx81
-rw-r--r--svl/source/notify/listenerbase.hxx57
-rw-r--r--svl/source/notify/listeneriter.cxx192
-rw-r--r--svl/source/notify/lstner.cxx193
-rw-r--r--svl/source/notify/makefile.mk62
-rw-r--r--svl/source/notify/smplhint.cxx47
-rw-r--r--svl/source/numbers/makefile.mk74
-rw-r--r--svl/source/numbers/nbdll.cxx79
-rw-r--r--svl/source/numbers/numfmuno.cxx1140
-rw-r--r--svl/source/numbers/numfmuno.hxx321
-rw-r--r--svl/source/numbers/numhead.cxx249
-rw-r--r--svl/source/numbers/numhead.hxx106
-rw-r--r--svl/source/numbers/numuno.cxx167
-rw-r--r--svl/source/numbers/supservs.cxx229
-rw-r--r--svl/source/numbers/supservs.hxx102
-rw-r--r--svl/source/numbers/zforfind.cxx2816
-rw-r--r--svl/source/numbers/zforfind.hxx288
-rw-r--r--svl/source/numbers/zforlist.cxx4401
-rw-r--r--svl/source/numbers/zformat.cxx4593
-rw-r--r--svl/source/numbers/zforscan.cxx2809
-rw-r--r--svl/source/numbers/zforscan.hxx275
-rw-r--r--svl/source/passwordcontainer/makefile.mk62
-rw-r--r--svl/source/passwordcontainer/passwordcontainer.cxx1585
-rw-r--r--svl/source/passwordcontainer/syscreds.cxx300
-rw-r--r--svl/source/passwordcontainer/syscreds.hxx92
-rw-r--r--svl/source/svdde/ddecli.cxx473
-rw-r--r--svl/source/svdde/ddedata.cxx230
-rw-r--r--svl/source/svdde/ddedll.cxx64
-rw-r--r--svl/source/svdde/ddeimp.hxx177
-rw-r--r--svl/source/svdde/ddeinf.cxx190
-rw-r--r--svl/source/svdde/ddeml1.cxx2658
-rw-r--r--svl/source/svdde/ddeml2.cxx1011
-rw-r--r--svl/source/svdde/ddemldeb.cxx280
-rw-r--r--svl/source/svdde/ddemldeb.hxx66
-rw-r--r--svl/source/svdde/ddemlimp.hxx433
-rw-r--r--svl/source/svdde/ddemlos2.h374
-rw-r--r--svl/source/svdde/ddestrg.cxx78
-rw-r--r--svl/source/svdde/ddesvr.cxx1104
-rw-r--r--svl/source/svdde/ddewrap.cxx100
-rw-r--r--svl/source/svdde/ddewrap.hxx24
-rw-r--r--svl/source/svdde/makefile.mk60
-rw-r--r--svl/source/svsql/converter.cxx42
-rw-r--r--svl/source/svsql/makefile.mk46
-rw-r--r--svl/source/undo/makefile.mk47
-rw-r--r--svl/source/undo/undo.cxx816
-rw-r--r--svl/source/uno/makefile.mk47
-rw-r--r--svl/source/uno/pathservice.cxx103
-rw-r--r--svl/source/uno/registerservices.cxx151
-rw-r--r--svl/unx/inc/convert.hxx63
-rw-r--r--svl/unx/source/svdde/ddedummy.cxx338
-rw-r--r--svl/unx/source/svdde/makefile.mk46
-rw-r--r--svl/util/makefile.mk122
-rw-r--r--svl/util/svl.pmk31
-rw-r--r--svtools/bmpmaker/bmp.cxx248
-rw-r--r--svtools/bmpmaker/bmp.hrc44
-rw-r--r--svtools/bmpmaker/bmp.src116
-rw-r--r--svtools/bmpmaker/bmpcore.cxx420
-rw-r--r--svtools/bmpmaker/bmpcore.hxx97
-rw-r--r--svtools/bmpmaker/bmpsum.cxx508
-rw-r--r--svtools/bmpmaker/g2g.cxx251
-rw-r--r--svtools/bmpmaker/makefile.mk74
-rw-r--r--svtools/inc/DocumentInfoPreview.hxx61
-rw-r--r--svtools/inc/QueryFolderName.hxx66
-rw-r--r--svtools/inc/acceleratorexecute.hxx287
-rw-r--r--svtools/inc/addresstemplate.hxx163
-rw-r--r--svtools/inc/apearcfg.hxx127
-rw-r--r--svtools/inc/asynclink.hxx77
-rw-r--r--svtools/inc/calendar.hxx501
-rw-r--r--svtools/inc/cliplistener.hxx61
-rw-r--r--svtools/inc/collatorres.hxx24
-rw-r--r--svtools/inc/contextmenuhelper.hxx130
-rw-r--r--svtools/inc/controldims.hrc102
-rw-r--r--svtools/inc/ctrlbox.hxx504
-rw-r--r--svtools/inc/ctrltool.hxx251
-rw-r--r--svtools/inc/dialogclosedlistener.hxx77
-rw-r--r--svtools/inc/dialogcontrolling.hxx306
-rw-r--r--svtools/inc/expander.hxx92
-rw-r--r--svtools/inc/extcolorcfg.hxx128
-rw-r--r--svtools/inc/filectrl.hxx111
-rw-r--r--svtools/inc/filedlg.hxx108
-rw-r--r--svtools/inc/filedlg2.hrc41
-rw-r--r--svtools/inc/fileview.hxx271
-rw-r--r--svtools/inc/fltdefs.hxx152
-rw-r--r--svtools/inc/fontsubstconfig.hxx68
-rw-r--r--svtools/inc/framestatuslistener.hxx116
-rw-r--r--svtools/inc/helpagentwindow.hxx88
-rw-r--r--svtools/inc/htmlkywd.hxx801
-rw-r--r--svtools/inc/htmltokn.h569
-rw-r--r--svtools/inc/imagemgr.hrc190
-rw-r--r--svtools/inc/imagemgr.hxx95
-rw-r--r--svtools/inc/imageresourceaccess.hxx90
-rw-r--r--svtools/inc/imgdef.hxx43
-rw-r--r--svtools/inc/indexentryres.hxx23
-rw-r--r--svtools/inc/inetimg.hxx86
-rw-r--r--svtools/inc/itemdel.hxx39
-rw-r--r--svtools/inc/ivctrl.hxx390
-rw-r--r--svtools/inc/localresaccess.hxx82
-rw-r--r--svtools/inc/makefile.mk48
-rw-r--r--svtools/inc/pch/precompiled_svtools.cxx29
-rw-r--r--svtools/inc/pch/precompiled_svtools.hxx437
-rw-r--r--svtools/inc/prgsbar.hxx100
-rw-r--r--svtools/inc/roadmap.hxx137
-rw-r--r--svtools/inc/rtfkeywd.hxx1141
-rw-r--r--svtools/inc/rtfout.hxx67
-rw-r--r--svtools/inc/rtftoken.h1273
-rw-r--r--svtools/inc/ruler.hxx874
-rw-r--r--svtools/inc/scriptedtext.hxx129
-rw-r--r--svtools/inc/scrwin.hxx112
-rw-r--r--svtools/inc/sfxecode.hxx118
-rw-r--r--svtools/inc/soerr.hxx81
-rw-r--r--svtools/inc/sores.hxx179
-rw-r--r--svtools/inc/statusbarcontroller.hxx158
-rw-r--r--svtools/inc/stdmenu.hxx241
-rw-r--r--svtools/inc/svtools/AccessibleBrowseBoxObjType.hxx59
-rw-r--r--svtools/inc/svtools/FilterConfigItem.hxx100
-rw-r--r--svtools/inc/svtools/accessibilityoptions.hxx82
-rwxr-xr-xsvtools/inc/svtools/accessiblefactory.hxx187
-rwxr-xr-xsvtools/inc/svtools/accessibletable.hxx183
-rw-r--r--svtools/inc/svtools/accessibletableprovider.hxx252
-rw-r--r--svtools/inc/svtools/brwbox.hxx877
-rw-r--r--svtools/inc/svtools/brwhead.hxx53
-rw-r--r--svtools/inc/svtools/chartprettypainter.hxx71
-rw-r--r--svtools/inc/svtools/colctrl.hxx202
-rw-r--r--svtools/inc/svtools/colorcfg.hxx152
-rw-r--r--svtools/inc/svtools/colrdlg.hxx107
-rw-r--r--svtools/inc/svtools/editbrowsebox.hxx696
-rw-r--r--svtools/inc/svtools/editimplementation.hxx151
-rw-r--r--svtools/inc/svtools/editsyntaxhighlighter.hxx64
-rw-r--r--svtools/inc/svtools/ehdl.hxx88
-rw-r--r--svtools/inc/svtools/embedhlp.hxx142
-rw-r--r--svtools/inc/svtools/embedtransfer.hxx64
-rw-r--r--svtools/inc/svtools/extensionlistbox.hxx105
-rw-r--r--svtools/inc/svtools/fileurlbox.hxx77
-rw-r--r--svtools/inc/svtools/filter.hxx427
-rw-r--r--svtools/inc/svtools/fixedhyper.hxx231
-rw-r--r--svtools/inc/svtools/fltcall.hxx74
-rw-r--r--svtools/inc/svtools/fmtfield.hxx350
-rw-r--r--svtools/inc/svtools/generictoolboxcontroller.hxx71
-rw-r--r--svtools/inc/svtools/genericunodialog.hxx194
-rw-r--r--svtools/inc/svtools/grfmgr.hxx571
-rw-r--r--svtools/inc/svtools/headbar.hxx395
-rw-r--r--svtools/inc/svtools/helpid.hrc117
-rw-r--r--svtools/inc/svtools/helpopt.hxx96
-rw-r--r--svtools/inc/svtools/htmlcfg.hxx107
-rw-r--r--svtools/inc/svtools/htmlout.hxx125
-rw-r--r--svtools/inc/svtools/hyperlabel.hxx98
-rw-r--r--svtools/inc/svtools/imap.hxx171
-rw-r--r--svtools/inc/svtools/imapcirc.hxx87
-rw-r--r--svtools/inc/svtools/imapobj.hxx163
-rw-r--r--svtools/inc/svtools/imappoly.hxx93
-rw-r--r--svtools/inc/svtools/imaprect.hxx85
-rw-r--r--svtools/inc/svtools/inettbc.hxx111
-rw-r--r--svtools/inc/svtools/insdlg.hxx74
-rw-r--r--svtools/inc/svtools/javacontext.hxx91
-rw-r--r--svtools/inc/svtools/javainteractionhandler.hxx82
-rw-r--r--svtools/inc/svtools/langtab.hxx58
-rw-r--r--svtools/inc/svtools/menuoptions.hxx169
-rw-r--r--svtools/inc/svtools/miscopt.hxx180
-rw-r--r--svtools/inc/svtools/optionsdrawinglayer.hxx238
-rw-r--r--svtools/inc/svtools/parhtml.hxx297
-rw-r--r--svtools/inc/svtools/parrtf.hxx91
-rw-r--r--svtools/inc/svtools/popupmenucontrollerbase.hxx141
-rw-r--r--svtools/inc/svtools/popupwindowcontroller.hxx85
-rw-r--r--svtools/inc/svtools/printdlg.hxx297
-rw-r--r--svtools/inc/svtools/printoptions.hxx124
-rw-r--r--svtools/inc/svtools/prnsetup.hxx122
-rw-r--r--svtools/inc/svtools/roadmapwizard.hxx257
-rw-r--r--svtools/inc/svtools/stdctrl.hxx73
-rw-r--r--svtools/inc/svtools/stringtransfer.hxx83
-rw-r--r--svtools/inc/svtools/svicnvw.hxx291
-rw-r--r--svtools/inc/svtools/svlbitm.hxx297
-rw-r--r--svtools/inc/svtools/svlbox.hxx664
-rw-r--r--svtools/inc/svtools/svmedit.hxx154
-rw-r--r--svtools/inc/svtools/svmedit2.hxx54
-rw-r--r--svtools/inc/svtools/svparser.hxx285
-rw-r--r--svtools/inc/svtools/svtabbx.hxx268
-rw-r--r--svtools/inc/svtools/svtdata.hxx85
-rw-r--r--svtools/inc/svtools/svtdllapi.h41
-rw-r--r--svtools/inc/svtools/svtools.hrc400
-rw-r--r--svtools/inc/svtools/svtreebx.hxx422
-rw-r--r--svtools/inc/svtools/svxbox.hxx193
-rw-r--r--svtools/inc/svtools/syntaxhighlight.hxx191
-rw-r--r--svtools/inc/svtools/table/abstracttablecontrol.hxx134
-rw-r--r--svtools/inc/svtools/table/defaultinputhandler.hxx69
-rw-r--r--svtools/inc/svtools/table/gridtablerenderer.hxx108
-rw-r--r--svtools/inc/svtools/table/tablecontrol.hxx243
-rw-r--r--svtools/inc/svtools/table/tabledatawindow.hxx86
-rw-r--r--svtools/inc/svtools/table/tableinputhandler.hxx78
-rw-r--r--svtools/inc/svtools/table/tablemodel.hxx483
-rw-r--r--svtools/inc/svtools/table/tablerenderer.hxx274
-rw-r--r--svtools/inc/svtools/table/tabletypes.hxx76
-rw-r--r--svtools/inc/svtools/textdata.hxx205
-rw-r--r--svtools/inc/svtools/texteng.hxx329
-rw-r--r--svtools/inc/svtools/textview.hxx224
-rw-r--r--svtools/inc/svtools/textwindowpeer.hxx71
-rw-r--r--svtools/inc/svtools/toolbarmenu.hxx155
-rw-r--r--svtools/inc/svtools/toolboxcontroller.hxx175
-rwxr-xr-xsvtools/inc/svtools/toolpanel/decklayouter.hxx104
-rw-r--r--svtools/inc/svtools/toolpanel/drawerlayouter.hxx102
-rw-r--r--svtools/inc/svtools/toolpanel/paneltabbar.hxx102
-rw-r--r--svtools/inc/svtools/toolpanel/refbase.hxx80
-rw-r--r--svtools/inc/svtools/toolpanel/tabalignment.hxx47
-rw-r--r--svtools/inc/svtools/toolpanel/tabitemcontent.hxx48
-rwxr-xr-xsvtools/inc/svtools/toolpanel/tablayouter.hxx112
-rw-r--r--svtools/inc/svtools/toolpanel/toolpanel.hxx147
-rwxr-xr-xsvtools/inc/svtools/toolpanel/toolpaneldeck.hxx193
-rw-r--r--svtools/inc/svtools/transfer.hxx591
-rw-r--r--svtools/inc/svtools/treelist.hxx514
-rw-r--r--svtools/inc/svtools/ttprops.hxx106
-rw-r--r--svtools/inc/svtools/unitconv.hxx113
-rw-r--r--svtools/inc/svtools/urlcontrol.hxx61
-rw-r--r--svtools/inc/svtools/valueset.hxx445
-rw-r--r--svtools/inc/svtools/wizardmachine.hxx394
-rw-r--r--svtools/inc/svtools/wizdlg.hxx311
-rw-r--r--svtools/inc/svtools/wmf.hxx46
-rw-r--r--svtools/inc/svtools/xtextedt.hxx79
-rwxr-xr-xsvtools/inc/svtools/xwindowitem.hxx70
-rw-r--r--svtools/inc/sychconv.hxx47
-rw-r--r--svtools/inc/tabbar.hxx560
-rw-r--r--svtools/inc/taskbar.hxx490
-rw-r--r--svtools/inc/templatefoldercache.hxx108
-rw-r--r--svtools/inc/templdlg.hxx92
-rw-r--r--svtools/inc/testtool.hxx75
-rw-r--r--svtools/inc/tooltiplbox.hxx67
-rw-r--r--svtools/inc/txtattr.hxx235
-rw-r--r--svtools/inc/txtcmp.hxx33
-rw-r--r--svtools/inc/unoevent.hxx329
-rw-r--r--svtools/inc/unoimap.hxx45
-rw-r--r--svtools/inc/wallitem.hxx65
-rw-r--r--svtools/prj/build.lst33
-rw-r--r--svtools/prj/d.lst40
-rw-r--r--svtools/prj/svtools.xml122
-rw-r--r--svtools/qa/unoapi/Test.java51
-rw-r--r--svtools/qa/unoapi/knownissues.xcl35
-rw-r--r--svtools/qa/unoapi/makefile.mk48
-rw-r--r--svtools/qa/unoapi/svtools.sce12
-rw-r--r--svtools/source/brwbox/brwbox1.cxx2761
-rw-r--r--svtools/source/brwbox/brwbox2.cxx2177
-rw-r--r--svtools/source/brwbox/brwbox3.cxx568
-rw-r--r--svtools/source/brwbox/brwhead.cxx119
-rw-r--r--svtools/source/brwbox/brwimpl.hxx87
-rw-r--r--svtools/source/brwbox/datwin.cxx782
-rw-r--r--svtools/source/brwbox/datwin.hxx254
-rw-r--r--svtools/source/brwbox/ebbcontrols.cxx628
-rw-r--r--svtools/source/brwbox/editbrowsebox.cxx1437
-rw-r--r--svtools/source/brwbox/editbrowsebox.hrc42
-rw-r--r--svtools/source/brwbox/editbrowsebox.src66
-rw-r--r--svtools/source/brwbox/editbrowsebox2.cxx222
-rw-r--r--svtools/source/brwbox/editbrowseboximpl.hxx45
-rw-r--r--svtools/source/brwbox/makefile.mk59
-rw-r--r--svtools/source/config/accessibilityoptions.cxx649
-rw-r--r--svtools/source/config/apearcfg.cxx321
-rw-r--r--svtools/source/config/colorcfg.cxx686
-rw-r--r--svtools/source/config/extcolorcfg.cxx827
-rw-r--r--svtools/source/config/fontsubstconfig.cxx229
-rw-r--r--svtools/source/config/helpopt.cxx764
-rw-r--r--svtools/source/config/htmlcfg.cxx523
-rw-r--r--svtools/source/config/itemholder2.cxx209
-rw-r--r--svtools/source/config/itemholder2.hxx89
-rw-r--r--svtools/source/config/makefile.mk58
-rw-r--r--svtools/source/config/menuoptions.cxx565
-rw-r--r--svtools/source/config/miscopt.cxx831
-rw-r--r--svtools/source/config/optionsdrawinglayer.cxx1713
-rw-r--r--svtools/source/config/printoptions.cxx870
-rw-r--r--svtools/source/config/test/makefile.mk62
-rw-r--r--svtools/source/config/test/test.cxx270
-rw-r--r--svtools/source/contnr/cont_pch.cxx41
-rw-r--r--svtools/source/contnr/contentenumeration.cxx464
-rw-r--r--svtools/source/contnr/contentenumeration.hxx287
-rw-r--r--svtools/source/contnr/ctrdll.cxx79
-rw-r--r--svtools/source/contnr/fileview.cxx2809
-rw-r--r--svtools/source/contnr/fileview.hrc40
-rw-r--r--svtools/source/contnr/fileview.src196
-rw-r--r--svtools/source/contnr/imivctl.hxx637
-rw-r--r--svtools/source/contnr/imivctl1.cxx4681
-rw-r--r--svtools/source/contnr/imivctl2.cxx848
-rw-r--r--svtools/source/contnr/ivctrl.cxx642
-rw-r--r--svtools/source/contnr/makefile.mk82
-rw-r--r--svtools/source/contnr/svcontnr.src103
-rw-r--r--svtools/source/contnr/svicnvw.cxx833
-rw-r--r--svtools/source/contnr/svimpbox.cxx3642
-rw-r--r--svtools/source/contnr/svimpicn.cxx4167
-rw-r--r--svtools/source/contnr/svlbitm.cxx618
-rw-r--r--svtools/source/contnr/svlbox.cxx1934
-rw-r--r--svtools/source/contnr/svtabbx.cxx1304
-rw-r--r--svtools/source/contnr/svtreebx.cxx2675
-rw-r--r--svtools/source/contnr/templwin.cxx2025
-rw-r--r--svtools/source/contnr/templwin.hrc59
-rw-r--r--svtools/source/contnr/templwin.hxx309
-rw-r--r--svtools/source/contnr/templwin.src376
-rw-r--r--svtools/source/contnr/tooltiplbox.cxx120
-rw-r--r--svtools/source/contnr/treelist.cxx2126
-rw-r--r--svtools/source/control/asynclink.cxx139
-rwxr-xr-xsvtools/source/control/calendar.cxx3051
-rwxr-xr-xsvtools/source/control/calendar.src74
-rwxr-xr-xsvtools/source/control/collatorres.cxx128
-rwxr-xr-xsvtools/source/control/ctrlbox.cxx1509
-rwxr-xr-xsvtools/source/control/ctrlbox.src232
-rw-r--r--svtools/source/control/ctrldll.cxx78
-rwxr-xr-xsvtools/source/control/ctrltool.cxx1016
-rwxr-xr-xsvtools/source/control/ctrltool.src144
-rw-r--r--svtools/source/control/filectrl.cxx236
-rw-r--r--svtools/source/control/filectrl.src58
-rw-r--r--svtools/source/control/filectrl2.cxx94
-rw-r--r--svtools/source/control/fileurlbox.cxx124
-rw-r--r--svtools/source/control/fixedhyper.cxx233
-rw-r--r--svtools/source/control/fmtfield.cxx1398
-rw-r--r--svtools/source/control/headbar.cxx1653
-rw-r--r--svtools/source/control/hyperlabel.cxx270
-rwxr-xr-xsvtools/source/control/indexentryres.cxx133
-rw-r--r--svtools/source/control/inettbc.cxx1375
-rwxr-xr-xsvtools/source/control/makefile.mk87
-rw-r--r--svtools/source/control/prgsbar.cxx262
-rw-r--r--svtools/source/control/roadmap.cxx1025
-rw-r--r--svtools/source/control/ruler.cxx3181
-rw-r--r--svtools/source/control/scriptedtext.cxx395
-rw-r--r--svtools/source/control/scrwin.cxx572
-rw-r--r--svtools/source/control/stdctrl.cxx96
-rw-r--r--svtools/source/control/stdmenu.cxx515
-rw-r--r--svtools/source/control/svxbox.cxx617
-rwxr-xr-xsvtools/source/control/tabbar.cxx2735
-rw-r--r--svtools/source/control/taskbar.cxx594
-rw-r--r--svtools/source/control/taskbox.cxx352
-rw-r--r--svtools/source/control/taskmisc.cxx380
-rw-r--r--svtools/source/control/taskstat.cxx656
-rw-r--r--svtools/source/control/toolbarmenu.cxx1805
-rw-r--r--svtools/source/control/toolbarmenuacc.cxx1003
-rw-r--r--svtools/source/control/toolbarmenuimp.hxx314
-rw-r--r--svtools/source/control/urlcontrol.cxx95
-rw-r--r--svtools/source/control/valueacc.cxx1258
-rwxr-xr-xsvtools/source/control/valueimp.hxx330
-rw-r--r--svtools/source/control/valueset.cxx2758
-rw-r--r--svtools/source/dialogs/addresstemplate.cxx1340
-rw-r--r--svtools/source/dialogs/addresstemplate.hrc88
-rw-r--r--svtools/source/dialogs/addresstemplate.src358
-rw-r--r--svtools/source/dialogs/colctrl.cxx690
-rw-r--r--svtools/source/dialogs/colrdlg.cxx328
-rw-r--r--svtools/source/dialogs/colrdlg.hrc67
-rw-r--r--svtools/source/dialogs/colrdlg.src308
-rw-r--r--svtools/source/dialogs/filedlg.cxx148
-rw-r--r--svtools/source/dialogs/filedlg2.cxx1362
-rw-r--r--svtools/source/dialogs/filedlg2.hxx219
-rw-r--r--svtools/source/dialogs/filedlg2.src126
-rw-r--r--svtools/source/dialogs/formats.src294
-rw-r--r--svtools/source/dialogs/insdlg.cxx389
-rwxr-xr-xsvtools/source/dialogs/makefile.mk75
-rw-r--r--svtools/source/dialogs/mcvmath.cxx305
-rw-r--r--svtools/source/dialogs/mcvmath.hxx228
-rw-r--r--svtools/source/dialogs/printdlg.cxx798
-rw-r--r--svtools/source/dialogs/printdlg.hrc74
-rw-r--r--svtools/source/dialogs/printdlg.src333
-rw-r--r--svtools/source/dialogs/prnsetup.cxx403
-rw-r--r--svtools/source/dialogs/prnsetup.hrc48
-rw-r--r--svtools/source/dialogs/prnsetup.src278
-rw-r--r--svtools/source/dialogs/propctrl.cxx503
-rw-r--r--svtools/source/dialogs/propctrl.hxx115
-rw-r--r--svtools/source/dialogs/property.cxx1560
-rw-r--r--svtools/source/dialogs/roadmapwizard.cxx748
-rw-r--r--svtools/source/dialogs/so3res.src315
-rw-r--r--svtools/source/dialogs/wizardmachine.cxx750
-rw-r--r--svtools/source/dialogs/wizardmachine.src50
-rw-r--r--svtools/source/dialogs/wizdlg.cxx707
-rw-r--r--svtools/source/edit/editsyntaxhighlighter.cxx204
-rw-r--r--svtools/source/edit/makefile.mk63
-rw-r--r--svtools/source/edit/svmedit.cxx1656
-rw-r--r--svtools/source/edit/svmedit2.cxx81
-rw-r--r--svtools/source/edit/sychconv.cxx103
-rw-r--r--svtools/source/edit/syntaxhighlight.cxx909
-rw-r--r--svtools/source/edit/textdat2.hxx306
-rw-r--r--svtools/source/edit/textdata.cxx361
-rw-r--r--svtools/source/edit/textdoc.cxx1047
-rw-r--r--svtools/source/edit/textdoc.hxx148
-rw-r--r--svtools/source/edit/texteng.cxx3303
-rw-r--r--svtools/source/edit/textund2.hxx148
-rw-r--r--svtools/source/edit/textundo.cxx343
-rw-r--r--svtools/source/edit/textundo.hxx84
-rw-r--r--svtools/source/edit/textview.cxx2470
-rw-r--r--svtools/source/edit/textwindowpeer.cxx59
-rw-r--r--svtools/source/edit/txtattr.cxx197
-rw-r--r--svtools/source/edit/xtextedt.cxx421
-rw-r--r--svtools/source/filter.vcl/filter/FilterConfigCache.cxx596
-rw-r--r--svtools/source/filter.vcl/filter/FilterConfigCache.hxx145
-rw-r--r--svtools/source/filter.vcl/filter/FilterConfigItem.cxx623
-rw-r--r--svtools/source/filter.vcl/filter/SvFilterOptionsDialog.cxx327
-rw-r--r--svtools/source/filter.vcl/filter/SvFilterOptionsDialog.hxx101
-rw-r--r--svtools/source/filter.vcl/filter/dlgejpg.cxx96
-rw-r--r--svtools/source/filter.vcl/filter/dlgejpg.hrc39
-rw-r--r--svtools/source/filter.vcl/filter/dlgejpg.hxx72
-rw-r--r--svtools/source/filter.vcl/filter/dlgejpg.src136
-rw-r--r--svtools/source/filter.vcl/filter/dlgepng.cxx90
-rw-r--r--svtools/source/filter.vcl/filter/dlgepng.hrc35
-rw-r--r--svtools/source/filter.vcl/filter/dlgepng.hxx71
-rw-r--r--svtools/source/filter.vcl/filter/dlgepng.src119
-rw-r--r--svtools/source/filter.vcl/filter/dlgexpor.cxx442
-rw-r--r--svtools/source/filter.vcl/filter/dlgexpor.hrc58
-rw-r--r--svtools/source/filter.vcl/filter/dlgexpor.hxx127
-rw-r--r--svtools/source/filter.vcl/filter/dlgexpor.src315
-rw-r--r--svtools/source/filter.vcl/filter/filter.cxx2171
-rw-r--r--svtools/source/filter.vcl/filter/filter2.cxx1419
-rw-r--r--svtools/source/filter.vcl/filter/fldll.cxx76
-rw-r--r--svtools/source/filter.vcl/filter/gradwrap.cxx570
-rw-r--r--svtools/source/filter.vcl/filter/makefile.mk88
-rw-r--r--svtools/source/filter.vcl/filter/sgf.ini118
-rw-r--r--svtools/source/filter.vcl/filter/sgfbram.cxx666
-rw-r--r--svtools/source/filter.vcl/filter/sgvmain.cxx1143
-rw-r--r--svtools/source/filter.vcl/filter/sgvspln.cxx895
-rw-r--r--svtools/source/filter.vcl/filter/sgvtext.cxx1338
-rw-r--r--svtools/source/filter.vcl/filter/strings.hrc27
-rw-r--r--svtools/source/filter.vcl/filter/strings.src85
-rw-r--r--svtools/source/filter.vcl/igif/decode.cxx215
-rw-r--r--svtools/source/filter.vcl/igif/decode.hxx68
-rw-r--r--svtools/source/filter.vcl/igif/gifread.cxx858
-rw-r--r--svtools/source/filter.vcl/igif/makefile.mk45
-rw-r--r--svtools/source/filter.vcl/ixbm/makefile.mk44
-rw-r--r--svtools/source/filter.vcl/ixbm/xbmread.cxx398
-rw-r--r--svtools/source/filter.vcl/ixpm/makefile.mk43
-rw-r--r--svtools/source/filter.vcl/ixpm/rgbtable.hxx695
-rw-r--r--svtools/source/filter.vcl/ixpm/xpmread.cxx702
-rw-r--r--svtools/source/filter.vcl/jpeg/jpeg.cxx779
-rw-r--r--svtools/source/filter.vcl/jpeg/jpeg.h75
-rw-r--r--svtools/source/filter.vcl/jpeg/jpegc.c284
-rw-r--r--svtools/source/filter.vcl/jpeg/makefile.mk45
-rw-r--r--svtools/source/filter.vcl/wmf/emfwr.cxx1415
-rw-r--r--svtools/source/filter.vcl/wmf/emfwr.hxx100
-rw-r--r--svtools/source/filter.vcl/wmf/enhwmf.cxx1343
-rw-r--r--svtools/source/filter.vcl/wmf/makefile.mk50
-rw-r--r--svtools/source/filter.vcl/wmf/winmtf.cxx2203
-rw-r--r--svtools/source/filter.vcl/wmf/winmtf.hxx777
-rw-r--r--svtools/source/filter.vcl/wmf/winwmf.cxx1431
-rw-r--r--svtools/source/filter.vcl/wmf/wmf.cxx114
-rw-r--r--svtools/source/filter.vcl/wmf/wmfwr.cxx2096
-rw-r--r--svtools/source/filter.vcl/wmf/wmfwr.hxx229
-rw-r--r--svtools/source/graphic/descriptor.cxx498
-rw-r--r--svtools/source/graphic/descriptor.hxx140
-rw-r--r--svtools/source/graphic/graphic.cxx300
-rw-r--r--svtools/source/graphic/graphic.hxx103
-rw-r--r--svtools/source/graphic/graphicunofactory.cxx103
-rw-r--r--svtools/source/graphic/grfattr.cxx118
-rw-r--r--svtools/source/graphic/grfcache.cxx1062
-rw-r--r--svtools/source/graphic/grfcache.hxx109
-rw-r--r--svtools/source/graphic/grfmgr.cxx1382
-rw-r--r--svtools/source/graphic/grfmgr2.cxx2382
-rw-r--r--svtools/source/graphic/makefile.mk66
-rw-r--r--svtools/source/graphic/provider.cxx861
-rw-r--r--svtools/source/graphic/renderer.cxx345
-rw-r--r--svtools/source/graphic/transformer.cxx156
-rw-r--r--svtools/source/graphic/transformer.hxx63
-rw-r--r--svtools/source/hatchwindow/documentcloser.cxx295
-rw-r--r--svtools/source/hatchwindow/documentcloser.hxx89
-rw-r--r--svtools/source/hatchwindow/hatchwindow.cxx235
-rw-r--r--svtools/source/hatchwindow/hatchwindow.hxx79
-rw-r--r--svtools/source/hatchwindow/hatchwindowfactory.cxx187
-rw-r--r--svtools/source/hatchwindow/hatchwindowfactory.hxx74
-rw-r--r--svtools/source/hatchwindow/ipwin.cxx644
-rw-r--r--svtools/source/hatchwindow/ipwin.hxx110
-rw-r--r--svtools/source/hatchwindow/makefile.mk65
-rw-r--r--svtools/source/inc/accessibletableimp.hxx62
-rw-r--r--svtools/source/inc/configitems/accessibilityoptions_const.hxx50
-rw-r--r--svtools/source/inc/filectrl.hrc34
-rw-r--r--svtools/source/inc/gifread.hxx144
-rw-r--r--svtools/source/inc/gradwrap.hxx77
-rw-r--r--svtools/source/inc/iodlg.hrc107
-rw-r--r--svtools/source/inc/jpeg.hxx131
-rw-r--r--svtools/source/inc/msgrd.hxx37
-rw-r--r--svtools/source/inc/msgwr.hxx38
-rw-r--r--svtools/source/inc/property.hxx585
-rw-r--r--svtools/source/inc/provider.hxx82
-rw-r--r--svtools/source/inc/renderer.hxx100
-rw-r--r--svtools/source/inc/sgfbram.hxx157
-rw-r--r--svtools/source/inc/sgffilt.hxx46
-rw-r--r--svtools/source/inc/sgvmain.hxx353
-rw-r--r--svtools/source/inc/sgvspln.hxx73
-rw-r--r--svtools/source/inc/svimpbox.hxx474
-rw-r--r--svtools/source/inc/svimpicn.hxx321
-rw-r--r--svtools/source/inc/svtaccessiblefactory.hxx73
-rw-r--r--svtools/source/inc/unoiface.hxx441
-rw-r--r--svtools/source/inc/xbmread.hxx97
-rw-r--r--svtools/source/inc/xpmread.hxx131
-rw-r--r--svtools/source/java/javacontext.cxx106
-rw-r--r--svtools/source/java/javaerror.src93
-rw-r--r--svtools/source/java/javainteractionhandler.cxx340
-rw-r--r--svtools/source/java/makefile.mk54
-rw-r--r--svtools/source/java/patchjavaerror.src93
-rw-r--r--svtools/source/misc/acceleratorexecute.cxx578
-rw-r--r--svtools/source/misc/chartprettypainter.cxx140
-rw-r--r--svtools/source/misc/cliplistener.cxx98
-rw-r--r--svtools/source/misc/dialogclosedlistener.cxx75
-rw-r--r--svtools/source/misc/dialogcontrolling.cxx314
-rw-r--r--svtools/source/misc/ehdl.cxx489
-rw-r--r--svtools/source/misc/ehdl.src40
-rw-r--r--svtools/source/misc/embedhlp.cxx955
-rw-r--r--svtools/source/misc/embedtransfer.cxx256
-rw-r--r--svtools/source/misc/errtxt.src514
-rw-r--r--svtools/source/misc/helpagent.src41
-rw-r--r--svtools/source/misc/helpagentwindow.cxx192
-rw-r--r--svtools/source/misc/imagemgr.cxx881
-rw-r--r--svtools/source/misc/imagemgr.src452
-rw-r--r--svtools/source/misc/imageresourceaccess.cxx211
-rw-r--r--svtools/source/misc/imap.cxx1232
-rw-r--r--svtools/source/misc/imap2.cxx757
-rw-r--r--svtools/source/misc/imap3.cxx97
-rw-r--r--svtools/source/misc/itemdel.cxx135
-rw-r--r--svtools/source/misc/langtab.cxx208
-rw-r--r--svtools/source/misc/langtab.src329
-rwxr-xr-xsvtools/source/misc/makefile.mk84
-rw-r--r--svtools/source/misc/stringtransfer.cxx112
-rwxr-xr-xsvtools/source/misc/svtaccessiblefactory.cxx355
-rw-r--r--svtools/source/misc/svtdata.cxx92
-rw-r--r--svtools/source/misc/templatefoldercache.cxx919
-rw-r--r--svtools/source/misc/transfer.cxx2422
-rw-r--r--svtools/source/misc/transfer2.cxx635
-rw-r--r--svtools/source/misc/unitconv.cxx763
-rw-r--r--svtools/source/misc/wallitem.cxx65
-rwxr-xr-xsvtools/source/misc/xwindowitem.cxx97
-rw-r--r--svtools/source/plugapp/commtest.cxx261
-rw-r--r--svtools/source/plugapp/commtest.hrc34
-rw-r--r--svtools/source/plugapp/commtest.src60
-rw-r--r--svtools/source/plugapp/makefile.mk61
-rw-r--r--svtools/source/plugapp/testtool.hrc55
-rw-r--r--svtools/source/plugapp/testtool.src194
-rw-r--r--svtools/source/plugapp/ttprops.cxx79
-rw-r--r--svtools/source/productregistration/makefile.mk78
-rw-r--r--svtools/source/productregistration/productregistration.cxx507
-rw-r--r--svtools/source/productregistration/productregistration.hxx100
-rw-r--r--svtools/source/productregistration/registrationdlg.cxx171
-rw-r--r--svtools/source/productregistration/registrationdlg.hrc43
-rw-r--r--svtools/source/productregistration/registrationdlg.hxx87
-rw-r--r--svtools/source/productregistration/registrationdlg.src129
-rw-r--r--svtools/source/svhtml/htmlkywd.cxx1081
-rw-r--r--svtools/source/svhtml/htmlout.cxx980
-rw-r--r--svtools/source/svhtml/htmlsupp.cxx173
-rw-r--r--svtools/source/svhtml/makefile.mk51
-rw-r--r--svtools/source/svhtml/parhtml.cxx2371
-rw-r--r--svtools/source/svrtf/makefile.mk49
-rw-r--r--svtools/source/svrtf/parrtf.cxx710
-rw-r--r--svtools/source/svrtf/rtfkey2.cxx1159
-rw-r--r--svtools/source/svrtf/rtfkeywd.cxx1248
-rw-r--r--svtools/source/svrtf/rtfout.cxx209
-rw-r--r--svtools/source/svrtf/svparser.cxx726
-rw-r--r--svtools/source/table/defaultinputhandler.cxx235
-rw-r--r--svtools/source/table/gridtablerenderer.cxx382
-rw-r--r--svtools/source/table/makefile.mk55
-rw-r--r--svtools/source/table/tablecontrol.cxx628
-rw-r--r--svtools/source/table/tablecontrol_impl.cxx2363
-rw-r--r--svtools/source/table/tablecontrol_impl.hxx358
-rw-r--r--svtools/source/table/tabledatawindow.cxx173
-rw-r--r--svtools/source/table/tablegeometry.cxx131
-rw-r--r--svtools/source/table/tablegeometry.hxx162
-rw-r--r--svtools/source/toolpanel/drawerlayouter.cxx305
-rw-r--r--svtools/source/toolpanel/dummypanel.cxx107
-rw-r--r--svtools/source/toolpanel/dummypanel.hxx70
-rwxr-xr-xsvtools/source/toolpanel/makefile.mk68
-rwxr-xr-xsvtools/source/toolpanel/paneldecklisteners.cxx137
-rwxr-xr-xsvtools/source/toolpanel/paneldecklisteners.hxx72
-rwxr-xr-xsvtools/source/toolpanel/paneltabbar.cxx1354
-rw-r--r--svtools/source/toolpanel/paneltabbarpeer.cxx101
-rw-r--r--svtools/source/toolpanel/paneltabbarpeer.hxx69
-rw-r--r--svtools/source/toolpanel/refbase.cxx56
-rw-r--r--svtools/source/toolpanel/tabbargeometry.cxx328
-rw-r--r--svtools/source/toolpanel/tabbargeometry.hxx137
-rw-r--r--svtools/source/toolpanel/tabitemdescriptor.hxx90
-rwxr-xr-xsvtools/source/toolpanel/tablayouter.cxx262
-rw-r--r--svtools/source/toolpanel/toolpanel.cxx54
-rw-r--r--svtools/source/toolpanel/toolpanel.src57
-rw-r--r--svtools/source/toolpanel/toolpanelcollection.cxx193
-rw-r--r--svtools/source/toolpanel/toolpanelcollection.hxx69
-rwxr-xr-xsvtools/source/toolpanel/toolpaneldeck.cxx560
-rwxr-xr-xsvtools/source/toolpanel/toolpaneldeckpeer.cxx99
-rwxr-xr-xsvtools/source/toolpanel/toolpaneldeckpeer.hxx69
-rw-r--r--svtools/source/toolpanel/toolpaneldrawer.cxx373
-rw-r--r--svtools/source/toolpanel/toolpaneldrawer.hxx113
-rw-r--r--svtools/source/toolpanel/toolpaneldrawerpeer.cxx142
-rw-r--r--svtools/source/toolpanel/toolpaneldrawerpeer.hxx56
-rw-r--r--svtools/source/uno/addrtempuno.cxx245
-rw-r--r--svtools/source/uno/contextmenuhelper.cxx687
-rw-r--r--svtools/source/uno/framestatuslistener.cxx444
-rw-r--r--svtools/source/uno/generictoolboxcontroller.cxx208
-rw-r--r--svtools/source/uno/genericunodialog.cxx373
-rw-r--r--svtools/source/uno/makefile.mk61
-rw-r--r--svtools/source/uno/miscservices.cxx219
-rw-r--r--svtools/source/uno/popupmenucontrollerbase.cxx420
-rw-r--r--svtools/source/uno/popupwindowcontroller.cxx258
-rw-r--r--svtools/source/uno/statusbarcontroller.cxx784
-rwxr-xr-xsvtools/source/uno/svtxgridcontrol.cxx899
-rwxr-xr-xsvtools/source/uno/svtxgridcontrol.hxx117
-rw-r--r--svtools/source/uno/toolboxcontroller.cxx886
-rw-r--r--svtools/source/uno/treecontrolpeer.cxx1765
-rw-r--r--svtools/source/uno/treecontrolpeer.hxx174
-rw-r--r--svtools/source/uno/unocontroltablemodel.cxx513
-rw-r--r--svtools/source/uno/unocontroltablemodel.hxx177
-rw-r--r--svtools/source/uno/unoevent.cxx610
-rw-r--r--svtools/source/uno/unoiface.cxx2367
-rw-r--r--svtools/source/uno/unoimap.cxx824
-rw-r--r--svtools/source/uno/unowizard.hxx117
-rw-r--r--svtools/source/uno/wizard/makefile.mk48
-rw-r--r--svtools/source/uno/wizard/unowizard.cxx452
-rw-r--r--svtools/source/uno/wizard/wizardpagecontroller.cxx190
-rw-r--r--svtools/source/uno/wizard/wizardpagecontroller.hxx75
-rw-r--r--svtools/source/uno/wizard/wizardshell.cxx279
-rw-r--r--svtools/source/uno/wizard/wizardshell.hxx147
-rw-r--r--svtools/source/urlobj/inetimg.cxx149
-rw-r--r--svtools/source/urlobj/makefile.mk46
-rw-r--r--svtools/util/hidother.src59
-rw-r--r--svtools/util/makefile.mk192
-rw-r--r--svtools/util/svt.pmk31
-rw-r--r--svtools/workben/browser.cxx810
-rw-r--r--svtools/workben/cui/loadlib.cxx89
-rw-r--r--svtools/workben/cui/makefile.mk60
-rw-r--r--svtools/workben/makefile.mk69
-rw-r--r--svtools/workben/stest.cxx186
-rw-r--r--svtools/workben/svdem.cxx1125
-rw-r--r--svtools/workben/toolpanel/makefile.mk110
-rwxr-xr-xsvtools/workben/toolpanel/toolpaneltest.cxx880
-rw-r--r--svtools/workben/treecontrol/makefile.mk91
-rw-r--r--svtools/workben/treecontrol/treetest.cxx396
-rw-r--r--svtools/workben/unodialog/makefile.mk90
-rw-r--r--svtools/workben/unodialog/roadmapskeleton.cxx113
-rw-r--r--svtools/workben/unodialog/roadmapskeleton.hrc41
-rw-r--r--svtools/workben/unodialog/roadmapskeleton.hxx65
-rw-r--r--svtools/workben/unodialog/roadmapskeleton.src84
-rw-r--r--svtools/workben/unodialog/roadmapskeletonpages.cxx114
-rw-r--r--svtools/workben/unodialog/roadmapskeletonpages.hxx104
-rw-r--r--svtools/workben/unodialog/udlg_global.hrc54
-rw-r--r--svtools/workben/unodialog/udlg_module.cxx42
-rw-r--r--svtools/workben/unodialog/udlg_module.hxx45
-rw-r--r--svtools/workben/unodialog/udlg_services.cxx58
-rw-r--r--svtools/workben/unodialog/unodialogsample.cxx214
-rw-r--r--svtools/workben/urange.cxx220
-rw-r--r--svx/doc/UML/edit_engine_UNO_implementation.zuml1
-rw-r--r--svx/doc/UML/grid_control_implementation.zumlbin0 -> 36412 bytes
-rw-r--r--svx/doc/UML/readme.txt9
-rw-r--r--svx/doc/drawing_layer_UNO_objects.odgbin0 -> 13284 bytes
-rw-r--r--svx/inc/ActionDescriptionProvider.hxx65
-rw-r--r--svx/inc/DescriptionGenerator.hxx217
-rw-r--r--svx/inc/ParseContext.hxx91
-rw-r--r--svx/inc/UnoNamespaceMap.hxx45
-rw-r--r--svx/inc/XPropertyTable.hxx44
-rw-r--r--svx/inc/accessibility.hrc87
-rw-r--r--svx/inc/anchorid.hxx42
-rw-r--r--svx/inc/chrtitem.hxx385
-rw-r--r--svx/inc/clipboardctl.hxx66
-rw-r--r--svx/inc/clipfmtitem.hxx67
-rw-r--r--svx/inc/connctrl.hxx77
-rw-r--r--svx/inc/databaseregistrationui.hxx53
-rw-r--r--svx/inc/dbexch.hrc57
-rw-r--r--svx/inc/dgdefs_.hxx341
-rw-r--r--svx/inc/dialcontrol.hxx138
-rw-r--r--svx/inc/dialdll.hxx42
-rw-r--r--svx/inc/dlgutil.hxx47
-rw-r--r--svx/inc/dragmt3d.hxx153
-rw-r--r--svx/inc/drawitem.hxx246
-rw-r--r--svx/inc/drawuiks.hxx73
-rw-r--r--svx/inc/extrusiondepthdialog.hxx60
-rw-r--r--svx/inc/flagsdef.hxx103
-rw-r--r--svx/inc/float3d.hrc184
-rw-r--r--svx/inc/fmgridif.hxx551
-rw-r--r--svx/inc/fmhelp.hrc117
-rw-r--r--svx/inc/fmobjfac.hxx51
-rw-r--r--svx/inc/fontlb.hxx138
-rw-r--r--svx/inc/fontworkgallery.hrc72
-rw-r--r--svx/inc/fontworkgallery.hxx131
-rw-r--r--svx/inc/formatpaintbrushctrl.hxx73
-rw-r--r--svx/inc/galbrws.hxx116
-rw-r--r--svx/inc/galbrws2.hxx181
-rw-r--r--svx/inc/galctrl.hxx191
-rw-r--r--svx/inc/gallery.hrc212
-rw-r--r--svx/inc/gallery.hxx174
-rw-r--r--svx/inc/galobj.hxx238
-rw-r--r--svx/inc/galtheme.hrc77
-rw-r--r--svx/inc/galtheme.hxx231
-rw-r--r--svx/inc/globl3d.hxx53
-rw-r--r--svx/inc/globlac.hrc223
-rw-r--r--svx/inc/globlmn_tmpl.hrc1422
-rw-r--r--svx/inc/grafctrl.hxx191
-rw-r--r--svx/inc/helpid.hrc295
-rw-r--r--svx/inc/hlnkitem.hxx110
-rw-r--r--svx/inc/htmlmode.hxx51
-rw-r--r--svx/inc/hyperdlg.hxx58
-rw-r--r--svx/inc/imapdlg.hxx211
-rw-r--r--svx/inc/insctrl.hxx62
-rw-r--r--svx/inc/layctrl.hxx79
-rw-r--r--svx/inc/lboxctrl.hxx86
-rw-r--r--svx/inc/lightdlg.hxx75
-rw-r--r--svx/inc/linectrl.hxx175
-rw-r--r--svx/inc/makefile.mk50
-rw-r--r--svx/inc/measctrl.hxx70
-rw-r--r--svx/inc/modctrl.hxx60
-rw-r--r--svx/inc/numvset.hxx165
-rw-r--r--svx/inc/objfac3d.hxx56
-rw-r--r--svx/inc/ofaitem.hxx53
-rw-r--r--svx/inc/optgenrl.hxx50
-rw-r--r--svx/inc/optgrid.hxx180
-rw-r--r--svx/inc/orienthelper.hxx132
-rw-r--r--svx/inc/passwd.hxx86
-rw-r--r--svx/inc/pch/precompiled_svx.cxx29
-rw-r--r--svx/inc/pch/precompiled_svx.hxx964
-rw-r--r--svx/inc/pfiledlg.hxx64
-rw-r--r--svx/inc/postattr.hxx133
-rw-r--r--svx/inc/prtqry.hxx40
-rw-r--r--svx/inc/pszctrl.hxx62
-rw-r--r--svx/inc/relfld.hxx73
-rw-r--r--svx/inc/rotmodit.hxx69
-rw-r--r--svx/inc/rubydialog.hxx204
-rw-r--r--svx/inc/rulritem.hxx303
-rw-r--r--svx/inc/sdrpaintwindow.hxx167
-rw-r--r--svx/inc/selctrl.hxx61
-rw-r--r--svx/inc/sjctrl.hxx630
-rw-r--r--svx/inc/srchdlg.hxx302
-rw-r--r--svx/inc/srchitem.hxx34
-rw-r--r--svx/inc/svdglob.hxx69
-rw-r--r--svx/inc/svdibrow.hxx144
-rw-r--r--svx/inc/svditer.hxx81
-rw-r--r--svx/inc/svdpomv.hxx58
-rw-r--r--svx/inc/svdshort.hxx91
-rw-r--r--svx/inc/svdstr.hrc789
-rw-r--r--svx/inc/svdviter.hxx126
-rw-r--r--svx/inc/svimbase.hxx216
-rw-r--r--svx/inc/svx/AccessibleControlShape.hxx216
-rw-r--r--svx/inc/svx/AccessibleGraphicShape.hxx123
-rw-r--r--svx/inc/svx/AccessibleOLEShape.hxx133
-rwxr-xr-xsvx/inc/svx/AccessibleShape.hxx410
-rw-r--r--svx/inc/svx/AccessibleShapeInfo.hxx109
-rw-r--r--svx/inc/svx/AccessibleShapeTreeInfo.hxx216
-rw-r--r--svx/inc/svx/AccessibleTableShape.hxx132
-rw-r--r--svx/inc/svx/AccessibleTextHelper.hxx431
-rw-r--r--svx/inc/svx/ChildrenManager.hxx216
-rw-r--r--svx/inc/svx/EnhancedCustomShapeFunctionParser.hxx214
-rw-r--r--svx/inc/svx/IAccessibleParent.hxx95
-rw-r--r--svx/inc/svx/IAccessibleViewForwarder.hxx132
-rw-r--r--svx/inc/svx/IAccessibleViewForwarderListener.hxx74
-rwxr-xr-xsvx/inc/svx/ShapeTypeHandler.hxx237
-rw-r--r--svx/inc/svx/SmartTagCtl.hxx86
-rw-r--r--svx/inc/svx/SmartTagItem.hxx96
-rw-r--r--svx/inc/svx/SmartTagMgr.hxx234
-rw-r--r--svx/inc/svx/SpellDialogChildWindow.hxx125
-rw-r--r--svx/inc/svx/SvxShapeTypes.hxx88
-rw-r--r--svx/inc/svx/algitem.hxx202
-rw-r--r--svx/inc/svx/bmpmask.hxx200
-rw-r--r--svx/inc/svx/camera3d.hxx94
-rw-r--r--svx/inc/svx/charmap.hxx140
-rw-r--r--svx/inc/svx/checklbx.hxx94
-rw-r--r--svx/inc/svx/colrctrl.hxx145
-rw-r--r--svx/inc/svx/contdlg.hxx142
-rw-r--r--svx/inc/svx/ctredlin.hxx431
-rw-r--r--svx/inc/svx/cube3d.hxx95
-rw-r--r--svx/inc/svx/dataaccessdescriptor.hxx164
-rw-r--r--svx/inc/svx/databaselocationinput.hxx97
-rw-r--r--svx/inc/svx/dbaexchange.hxx299
-rw-r--r--svx/inc/svx/dbaobjectex.hxx94
-rwxr-xr-xsvx/inc/svx/dbcharsethelper.hxx66
-rwxr-xr-xsvx/inc/svx/dbtoolsclient.hxx235
-rw-r--r--svx/inc/svx/def3d.hxx54
-rw-r--r--svx/inc/svx/deflt3d.hxx135
-rw-r--r--svx/inc/svx/dialmgr.hxx49
-rwxr-xr-xsvx/inc/svx/dialogs.hrc1057
-rw-r--r--svx/inc/svx/dlgctl3d.hxx215
-rw-r--r--svx/inc/svx/dlgctrl.hxx539
-rw-r--r--svx/inc/svx/dstribut_enum.hxx53
-rw-r--r--svx/inc/svx/e3ditem.hxx73
-rw-r--r--svx/inc/svx/e3dsceneupdater.hxx74
-rw-r--r--svx/inc/svx/e3dundo.hxx124
-rw-r--r--svx/inc/svx/exthelpid.hrc55
-rw-r--r--svx/inc/svx/extrud3d.hxx110
-rw-r--r--svx/inc/svx/extrusionbar.hxx61
-rw-r--r--svx/inc/svx/extrusioncolorcontrol.hxx56
-rw-r--r--svx/inc/svx/f3dchild.hxx51
-rw-r--r--svx/inc/svx/fillctrl.hxx108
-rw-r--r--svx/inc/svx/float3d.hxx313
-rw-r--r--svx/inc/svx/fmdmod.hxx45
-rw-r--r--svx/inc/svx/fmdpage.hxx76
-rw-r--r--svx/inc/svx/fmglob.hxx66
-rw-r--r--svx/inc/svx/fmgridcl.hxx216
-rw-r--r--svx/inc/svx/fmmodel.hxx102
-rw-r--r--svx/inc/svx/fmpage.hxx87
-rw-r--r--svx/inc/svx/fmsearch.hxx95
-rw-r--r--svx/inc/svx/fmshell.hxx191
-rw-r--r--svx/inc/svx/fmtools.hxx234
-rw-r--r--svx/inc/svx/fmview.hxx166
-rw-r--r--svx/inc/svx/fntctl.hxx69
-rw-r--r--svx/inc/svx/fntctrl.hxx90
-rw-r--r--svx/inc/svx/fntszctl.hxx69
-rw-r--r--svx/inc/svx/fontwork.hxx197
-rw-r--r--svx/inc/svx/fontworkbar.hxx61
-rw-r--r--svx/inc/svx/framebordertype.hxx65
-rw-r--r--svx/inc/svx/framelink.hxx727
-rw-r--r--svx/inc/svx/framelinkarray.hxx537
-rw-r--r--svx/inc/svx/frmdirlbox.hxx106
-rw-r--r--svx/inc/svx/frmsel.hxx204
-rw-r--r--svx/inc/svx/gallery1.hxx183
-rw-r--r--svx/inc/svx/galmisc.hxx262
-rw-r--r--svx/inc/svx/graphctl.hxx193
-rw-r--r--svx/inc/svx/grfcrop.hxx80
-rw-r--r--svx/inc/svx/grfflt.hxx69
-rw-r--r--svx/inc/svx/gridctrl.hxx623
-rw-r--r--svx/inc/svx/hdft.hxx136
-rw-r--r--svx/inc/svx/helperhittest3d.hxx110
-rw-r--r--svx/inc/svx/ifaceids.hxx45
-rw-r--r--svx/inc/svx/ipolypolygoneditorcontroller.hxx76
-rw-r--r--svx/inc/svx/itemwin.hxx197
-rw-r--r--svx/inc/svx/langbox.hxx128
-rw-r--r--svx/inc/svx/lathe3d.hxx122
-rw-r--r--svx/inc/svx/msdffdef.hxx1223
-rw-r--r--svx/inc/svx/numfmtsh.hxx267
-rw-r--r--svx/inc/svx/numinf.hxx100
-rw-r--r--svx/inc/svx/obj3d.hxx328
-rw-r--r--svx/inc/svx/pagectrl.hxx170
-rw-r--r--svx/inc/svx/pageitem.hxx157
-rw-r--r--svx/inc/svx/paraprev.hxx113
-rw-r--r--svx/inc/svx/polygn3d.hxx89
-rw-r--r--svx/inc/svx/polypolygoneditor.hxx76
-rw-r--r--svx/inc/svx/polysc3d.hxx50
-rw-r--r--svx/inc/svx/rectenum.hxx46
-rw-r--r--svx/inc/svx/ruler.hxx270
-rw-r--r--svx/inc/svx/scene3d.hxx252
-rw-r--r--svx/inc/svx/sdangitm.hxx59
-rw-r--r--svx/inc/svx/sdasaitm.hxx82
-rw-r--r--svx/inc/svx/sdasitm.hxx146
-rw-r--r--svx/inc/svx/sderitm.hxx42
-rw-r--r--svx/inc/svx/sdgcoitm.hxx86
-rw-r--r--svx/inc/svx/sdgcpitm.hxx54
-rw-r--r--svx/inc/svx/sdggaitm.hxx55
-rw-r--r--svx/inc/svx/sdginitm.hxx52
-rw-r--r--svx/inc/svx/sdgluitm.hxx69
-rw-r--r--svx/inc/svx/sdgmoitm.hxx62
-rw-r--r--svx/inc/svx/sdgtritm.hxx51
-rw-r--r--svx/inc/svx/sdmetitm.hxx61
-rw-r--r--svx/inc/svx/sdooitm.hxx58
-rw-r--r--svx/inc/svx/sdprcitm.hxx79
-rw-r--r--svx/inc/svx/sdr/animation/animationstate.hxx83
-rw-r--r--svx/inc/svx/sdr/animation/objectanimator.hxx57
-rw-r--r--svx/inc/svx/sdr/animation/scheduler.hxx159
-rw-r--r--svx/inc/svx/sdr/attribute/sdrfilltextattribute.hxx80
-rw-r--r--svx/inc/svx/sdr/attribute/sdrformtextattribute.hxx92
-rw-r--r--svx/inc/svx/sdr/attribute/sdrformtextoutlineattribute.hxx82
-rw-r--r--svx/inc/svx/sdr/attribute/sdrlinefillshadowtextattribute.hxx81
-rw-r--r--svx/inc/svx/sdr/attribute/sdrlineshadowtextattribute.hxx79
-rw-r--r--svx/inc/svx/sdr/attribute/sdrshadowtextattribute.hxx76
-rw-r--r--svx/inc/svx/sdr/attribute/sdrtextattribute.hxx130
-rw-r--r--svx/inc/svx/sdr/contact/displayinfo.hxx129
-rw-r--r--svx/inc/svx/sdr/contact/objectcontact.hxx229
-rw-r--r--svx/inc/svx/sdr/contact/objectcontactofobjlistpainter.hxx144
-rw-r--r--svx/inc/svx/sdr/contact/objectcontactofpageview.hxx153
-rw-r--r--svx/inc/svx/sdr/contact/objectcontacttools.hxx62
-rw-r--r--svx/inc/svx/sdr/contact/viewcontact.hxx172
-rw-r--r--svx/inc/svx/sdr/contact/viewcontactofe3d.hxx120
-rw-r--r--svx/inc/svx/sdr/contact/viewcontactofe3dcube.hxx71
-rw-r--r--svx/inc/svx/sdr/contact/viewcontactofe3dextrude.hxx71
-rw-r--r--svx/inc/svx/sdr/contact/viewcontactofe3dlathe.hxx71
-rw-r--r--svx/inc/svx/sdr/contact/viewcontactofe3dpolygon.hxx71
-rw-r--r--svx/inc/svx/sdr/contact/viewcontactofe3dscene.hxx122
-rw-r--r--svx/inc/svx/sdr/contact/viewcontactofe3dsphere.hxx71
-rw-r--r--svx/inc/svx/sdr/contact/viewcontactofgraphic.hxx94
-rw-r--r--svx/inc/svx/sdr/contact/viewcontactofgroup.hxx75
-rw-r--r--svx/inc/svx/sdr/contact/viewcontactofmasterpagedescriptor.hxx85
-rw-r--r--svx/inc/svx/sdr/contact/viewcontactofpageobj.hxx80
-rw-r--r--svx/inc/svx/sdr/contact/viewcontactofsdrcaptionobj.hxx70
-rw-r--r--svx/inc/svx/sdr/contact/viewcontactofsdrcircobj.hxx70
-rw-r--r--svx/inc/svx/sdr/contact/viewcontactofsdredgeobj.hxx70
-rw-r--r--svx/inc/svx/sdr/contact/viewcontactofsdrmeasureobj.hxx70
-rw-r--r--svx/inc/svx/sdr/contact/viewcontactofsdrmediaobj.hxx89
-rw-r--r--svx/inc/svx/sdr/contact/viewcontactofsdrobj.hxx99
-rw-r--r--svx/inc/svx/sdr/contact/viewcontactofsdrobjcustomshape.hxx73
-rw-r--r--svx/inc/svx/sdr/contact/viewcontactofsdrole2obj.hxx81
-rw-r--r--svx/inc/svx/sdr/contact/viewcontactofsdrpage.hxx311
-rw-r--r--svx/inc/svx/sdr/contact/viewcontactofsdrpathobj.hxx70
-rw-r--r--svx/inc/svx/sdr/contact/viewcontactofsdrrectobj.hxx70
-rw-r--r--svx/inc/svx/sdr/contact/viewcontactoftextobj.hxx65
-rw-r--r--svx/inc/svx/sdr/contact/viewcontactofunocontrol.hxx101
-rw-r--r--svx/inc/svx/sdr/contact/viewcontactofvirtobj.hxx70
-rw-r--r--svx/inc/svx/sdr/contact/viewobjectcontact.hxx157
-rw-r--r--svx/inc/svx/sdr/contact/viewobjectcontactofe3d.hxx82
-rw-r--r--svx/inc/svx/sdr/contact/viewobjectcontactofe3dscene.hxx62
-rw-r--r--svx/inc/svx/sdr/contact/viewobjectcontactofgraphic.hxx81
-rw-r--r--svx/inc/svx/sdr/contact/viewobjectcontactofgroup.hxx59
-rw-r--r--svx/inc/svx/sdr/contact/viewobjectcontactofmasterpagedescriptor.hxx65
-rw-r--r--svx/inc/svx/sdr/contact/viewobjectcontactofpageobj.hxx71
-rw-r--r--svx/inc/svx/sdr/contact/viewobjectcontactofsdrmediaobj.hxx72
-rw-r--r--svx/inc/svx/sdr/contact/viewobjectcontactofsdrobj.hxx61
-rw-r--r--svx/inc/svx/sdr/contact/viewobjectcontactofsdrole2obj.hxx62
-rw-r--r--svx/inc/svx/sdr/contact/viewobjectcontactofsdrpage.hxx246
-rw-r--r--svx/inc/svx/sdr/contact/viewobjectcontactofunocontrol.hxx142
-rw-r--r--svx/inc/svx/sdr/contact/viewobjectcontactredirector.hxx74
-rw-r--r--svx/inc/svx/sdr/event/eventhandler.hxx140
-rw-r--r--svx/inc/svx/sdr/overlay/overlayanimatedbitmapex.hxx105
-rw-r--r--svx/inc/svx/sdr/overlay/overlaybitmapex.hxx76
-rw-r--r--svx/inc/svx/sdr/overlay/overlaycrosshair.hxx59
-rw-r--r--svx/inc/svx/sdr/overlay/overlayhatchrect.hxx81
-rw-r--r--svx/inc/svx/sdr/overlay/overlayhelpline.hxx68
-rw-r--r--svx/inc/svx/sdr/overlay/overlayline.hxx68
-rw-r--r--svx/inc/svx/sdr/overlay/overlaymanager.hxx150
-rw-r--r--svx/inc/svx/sdr/overlay/overlaymanagerbuffered.hxx113
-rw-r--r--svx/inc/svx/sdr/overlay/overlayobject.hxx203
-rw-r--r--svx/inc/svx/sdr/overlay/overlayobjectcell.hxx70
-rw-r--r--svx/inc/svx/sdr/overlay/overlayobjectlist.hxx85
-rw-r--r--svx/inc/svx/sdr/overlay/overlaypolypolygon.hxx67
-rw-r--r--svx/inc/svx/sdr/overlay/overlayprimitive2dsequenceobject.hxx70
-rw-r--r--svx/inc/svx/sdr/overlay/overlayrollingrectangle.hxx85
-rw-r--r--svx/inc/svx/sdr/overlay/overlayselection.hxx95
-rw-r--r--svx/inc/svx/sdr/overlay/overlaytools.hxx278
-rw-r--r--svx/inc/svx/sdr/overlay/overlaytriangle.hxx72
-rw-r--r--svx/inc/svx/sdr/primitive2d/primitiveFactory2d.hxx84
-rw-r--r--svx/inc/svx/sdr/primitive2d/sdrattributecreator.hxx140
-rw-r--r--svx/inc/svx/sdr/primitive2d/sdrcaptionprimitive2d.hxx87
-rw-r--r--svx/inc/svx/sdr/primitive2d/sdrconnectorprimitive2d.hxx76
-rw-r--r--svx/inc/svx/sdr/primitive2d/sdrcustomshapeprimitive2d.hxx97
-rw-r--r--svx/inc/svx/sdr/primitive2d/sdrdecompositiontools.hxx88
-rw-r--r--svx/inc/svx/sdr/primitive2d/sdrellipseprimitive2d.hxx120
-rw-r--r--svx/inc/svx/sdr/primitive2d/sdrgrafprimitive2d.hxx84
-rw-r--r--svx/inc/svx/sdr/primitive2d/sdrmeasureprimitive2d.hxx133
-rw-r--r--svx/inc/svx/sdr/primitive2d/sdrole2primitive2d.hxx78
-rw-r--r--svx/inc/svx/sdr/primitive2d/sdrolecontentprimitive2d.hxx92
-rw-r--r--svx/inc/svx/sdr/primitive2d/sdrpathprimitive2d.hxx80
-rw-r--r--svx/inc/svx/sdr/primitive2d/sdrprimitivetools.hxx60
-rw-r--r--svx/inc/svx/sdr/primitive2d/sdrrectangleprimitive2d.hxx90
-rw-r--r--svx/inc/svx/sdr/primitive2d/sdrtextprimitive2d.hxx305
-rw-r--r--svx/inc/svx/sdr/primitive2d/svx_primitivetypes2d.hxx64
-rw-r--r--svx/inc/svx/sdr/primitive3d/sdrattributecreator3d.hxx63
-rw-r--r--svx/inc/svx/sdr/properties/attributeproperties.hxx101
-rw-r--r--svx/inc/svx/sdr/properties/captionproperties.hxx75
-rw-r--r--svx/inc/svx/sdr/properties/circleproperties.hxx75
-rw-r--r--svx/inc/svx/sdr/properties/connectorproperties.hxx71
-rw-r--r--svx/inc/svx/sdr/properties/customshapeproperties.hxx94
-rw-r--r--svx/inc/svx/sdr/properties/defaultproperties.hxx112
-rw-r--r--svx/inc/svx/sdr/properties/e3dcompoundproperties.hxx79
-rw-r--r--svx/inc/svx/sdr/properties/e3dextrudeproperties.hxx66
-rw-r--r--svx/inc/svx/sdr/properties/e3dlatheproperties.hxx66
-rw-r--r--svx/inc/svx/sdr/properties/e3dproperties.hxx72
-rw-r--r--svx/inc/svx/sdr/properties/e3dsceneproperties.hxx96
-rw-r--r--svx/inc/svx/sdr/properties/e3dsphereproperties.hxx66
-rw-r--r--svx/inc/svx/sdr/properties/emptyproperties.hxx104
-rw-r--r--svx/inc/svx/sdr/properties/graphicproperties.hxx75
-rw-r--r--svx/inc/svx/sdr/properties/groupproperties.hxx129
-rw-r--r--svx/inc/svx/sdr/properties/itemsettools.hxx76
-rw-r--r--svx/inc/svx/sdr/properties/measureproperties.hxx75
-rw-r--r--svx/inc/svx/sdr/properties/oleproperties.hxx69
-rw-r--r--svx/inc/svx/sdr/properties/pageproperties.hxx80
-rw-r--r--svx/inc/svx/sdr/properties/properties.hxx197
-rw-r--r--svx/inc/svx/sdr/properties/rectangleproperties.hxx69
-rw-r--r--svx/inc/svx/sdr/properties/textproperties.hxx97
-rw-r--r--svx/inc/svx/sdr/table/tabledesign.hxx54
-rw-r--r--svx/inc/svx/sdrcomment.hxx105
-rw-r--r--svx/inc/svx/sdrhittesthelper.hxx78
-rw-r--r--svx/inc/svx/sdrmasterpagedescriptor.hxx101
-rw-r--r--svx/inc/svx/sdrobjectfilter.hxx58
-rw-r--r--svx/inc/svx/sdrobjectuser.hxx60
-rw-r--r--svx/inc/svx/sdrpageuser.hxx60
-rw-r--r--svx/inc/svx/sdrpagewindow.hxx142
-rw-r--r--svx/inc/svx/sdshcitm.hxx46
-rw-r--r--svx/inc/svx/sdshitm.hxx44
-rw-r--r--svx/inc/svx/sdshtitm.hxx42
-rw-r--r--svx/inc/svx/sdsxyitm.hxx51
-rw-r--r--svx/inc/svx/sdtaaitm.hxx47
-rw-r--r--svx/inc/svx/sdtacitm.hxx40
-rw-r--r--svx/inc/svx/sdtaditm.hxx61
-rw-r--r--svx/inc/svx/sdtagitm.hxx51
-rw-r--r--svx/inc/svx/sdtaiitm.hxx45
-rw-r--r--svx/inc/svx/sdtaitm.hxx89
-rw-r--r--svx/inc/svx/sdtakitm.hxx105
-rw-r--r--svx/inc/svx/sdtayitm.hxx44
-rw-r--r--svx/inc/svx/sdtcfitm.hxx42
-rw-r--r--svx/inc/svx/sdtditm.hxx60
-rw-r--r--svx/inc/svx/sdtfchim.hxx57
-rw-r--r--svx/inc/svx/sdtfsitm.hxx71
-rw-r--r--svx/inc/svx/sdtmfitm.hxx69
-rw-r--r--svx/inc/svx/sdynitm.hxx55
-rw-r--r--svx/inc/svx/selectioncontroller.hxx86
-rwxr-xr-xsvx/inc/svx/shapeproperty.hxx59
-rw-r--r--svx/inc/svx/shapepropertynotifier.hxx148
-rw-r--r--svx/inc/svx/simptabl.hxx180
-rw-r--r--svx/inc/svx/sphere3d.hxx88
-rw-r--r--svx/inc/svx/splitcelldlg.hxx62
-rw-r--r--svx/inc/svx/stddlg.hxx51
-rw-r--r--svx/inc/svx/strarray.hxx53
-rw-r--r--svx/inc/svx/subtoolboxcontrol.hxx55
-rw-r--r--svx/inc/svx/svdattr.hxx76
-rw-r--r--svx/inc/svx/svdattrx.hxx85
-rw-r--r--svx/inc/svx/svdcrtv.hxx209
-rw-r--r--svx/inc/svx/svddef.hxx313
-rw-r--r--svx/inc/svx/svddrag.hxx192
-rw-r--r--svx/inc/svx/svddrgmt.hxx324
-rw-r--r--svx/inc/svx/svddrgv.hxx321
-rw-r--r--svx/inc/svx/svdedtv.hxx473
-rw-r--r--svx/inc/svx/svdedxv.hxx306
-rw-r--r--svx/inc/svx/svdetc.hxx356
-rw-r--r--svx/inc/svx/svdfield.hxx36
-rw-r--r--svx/inc/svx/svdglev.hxx119
-rw-r--r--svx/inc/svx/svdglue.hxx151
-rw-r--r--svx/inc/svx/svdhdl.hxx534
-rw-r--r--svx/inc/svx/svdhlpln.hxx107
-rw-r--r--svx/inc/svx/svdlayer.hxx160
-rw-r--r--svx/inc/svx/svdmark.hxx412
-rw-r--r--svx/inc/svx/svdmodel.hxx771
-rw-r--r--svx/inc/svx/svdmrkv.hxx539
-rw-r--r--svx/inc/svx/svdoashp.hxx265
-rw-r--r--svx/inc/svx/svdoattr.hxx90
-rw-r--r--svx/inc/svx/svdobj.hxx1186
-rw-r--r--svx/inc/svx/svdocapt.hxx171
-rw-r--r--svx/inc/svx/svdocirc.hxx153
-rw-r--r--svx/inc/svx/svdoedge.hxx436
-rw-r--r--svx/inc/svx/svdograf.hxx227
-rw-r--r--svx/inc/svx/svdogrp.hxx125
-rw-r--r--svx/inc/svx/svdomeas.hxx217
-rw-r--r--svx/inc/svx/svdomedia.hxx93
-rw-r--r--svx/inc/svx/svdoole2.hxx190
-rw-r--r--svx/inc/svx/svdopage.hxx76
-rw-r--r--svx/inc/svx/svdopath.hxx195
-rw-r--r--svx/inc/svx/svdorect.hxx137
-rw-r--r--svx/inc/svx/svdotable.hxx342
-rw-r--r--svx/inc/svx/svdotext.hxx610
-rw-r--r--svx/inc/svx/svdouno.hxx163
-rw-r--r--svx/inc/svx/svdoutl.hxx60
-rw-r--r--svx/inc/svx/svdovirt.hxx165
-rw-r--r--svx/inc/svx/svdpage.hxx618
-rw-r--r--svx/inc/svx/svdpagv.hxx294
-rw-r--r--svx/inc/svx/svdpntv.hxx577
-rw-r--r--svx/inc/svx/svdpoev.hxx110
-rw-r--r--svx/inc/svx/svdpool.hxx63
-rw-r--r--svx/inc/svx/svdsnpv.hxx338
-rw-r--r--svx/inc/svx/svdsob.hxx133
-rw-r--r--svx/inc/svx/svdtext.hxx88
-rw-r--r--svx/inc/svx/svdtrans.hxx326
-rw-r--r--svx/inc/svx/svdtypes.hxx169
-rw-r--r--svx/inc/svx/svdundo.hxx882
-rw-r--r--svx/inc/svx/svdview.hxx339
-rw-r--r--svx/inc/svx/svdxcgv.hxx162
-rw-r--r--svx/inc/svx/svx3ditems.hxx377
-rw-r--r--svx/inc/svx/svxdlg.hxx507
-rw-r--r--svx/inc/svx/svxdllapi.h40
-rwxr-xr-xsvx/inc/svx/svxids.hrc1328
-rw-r--r--svx/inc/svx/svxitems.hrc174
-rw-r--r--svx/inc/svx/sxallitm.hxx69
-rw-r--r--svx/inc/svx/sxcaitm.hxx60
-rw-r--r--svx/inc/svx/sxcecitm.hxx93
-rw-r--r--svx/inc/svx/sxcgitm.hxx43
-rw-r--r--svx/inc/svx/sxciaitm.hxx51
-rw-r--r--svx/inc/svx/sxcikitm.hxx55
-rw-r--r--svx/inc/svx/sxcllitm.hxx58
-rw-r--r--svx/inc/svx/sxctitm.hxx52
-rw-r--r--svx/inc/svx/sxekitm.hxx58
-rw-r--r--svx/inc/svx/sxelditm.hxx64
-rw-r--r--svx/inc/svx/sxenditm.hxx78
-rw-r--r--svx/inc/svx/sxfiitm.hxx57
-rw-r--r--svx/inc/svx/sxlayitm.hxx56
-rw-r--r--svx/inc/svx/sxlogitm.hxx51
-rw-r--r--svx/inc/svx/sxmbritm.hxx48
-rw-r--r--svx/inc/svx/sxmfsitm.hxx42
-rw-r--r--svx/inc/svx/sxmkitm.hxx55
-rw-r--r--svx/inc/svx/sxmlhitm.hxx85
-rw-r--r--svx/inc/svx/sxmoitm.hxx41
-rw-r--r--svx/inc/svx/sxmovitm.hxx51
-rw-r--r--svx/inc/svx/sxmsitm.hxx43
-rw-r--r--svx/inc/svx/sxmspitm.hxx51
-rw-r--r--svx/inc/svx/sxmsuitm.hxx40
-rw-r--r--svx/inc/svx/sxmtaitm.hxx51
-rw-r--r--svx/inc/svx/sxmtfitm.hxx58
-rw-r--r--svx/inc/svx/sxmtpitm.hxx77
-rw-r--r--svx/inc/svx/sxmtritm.hxx49
-rw-r--r--svx/inc/svx/sxmuitm.hxx54
-rw-r--r--svx/inc/svx/sxoneitm.hxx69
-rw-r--r--svx/inc/svx/sxonitm.hxx44
-rw-r--r--svx/inc/svx/sxopitm.hxx48
-rw-r--r--svx/inc/svx/sxraitm.hxx42
-rw-r--r--svx/inc/svx/sxreaitm.hxx56
-rw-r--r--svx/inc/svx/sxreoitm.hxx56
-rw-r--r--svx/inc/svx/sxroaitm.hxx42
-rw-r--r--svx/inc/svx/sxrooitm.hxx42
-rw-r--r--svx/inc/svx/sxsaitm.hxx42
-rw-r--r--svx/inc/svx/sxsalitm.hxx51
-rw-r--r--svx/inc/svx/sxsiitm.hxx45
-rw-r--r--svx/inc/svx/sxsoitm.hxx51
-rw-r--r--svx/inc/svx/sxtraitm.hxx69
-rw-r--r--svx/inc/svx/tabarea.hxx76
-rw-r--r--svx/inc/svx/tabline.hxx66
-rw-r--r--svx/inc/svx/tbcontrl.hxx447
-rw-r--r--svx/inc/svx/tbxcolorupdate.hxx85
-rw-r--r--svx/inc/svx/ucsubset.hrc155
-rw-r--r--svx/inc/svx/ucsubset.hxx81
-rw-r--r--svx/inc/svx/unomid.hxx117
-rw-r--r--svx/inc/svx/unomod.hxx66
-rw-r--r--svx/inc/svx/unomodel.hxx112
-rw-r--r--svx/inc/svx/unopage.hxx160
-rw-r--r--svx/inc/svx/unoprov.hxx149
-rw-r--r--svx/inc/svx/unoshape.hxx892
-rw-r--r--svx/inc/svx/unoshprp.hxx534
-rw-r--r--svx/inc/svx/unoshtxt.hxx99
-rw-r--r--svx/inc/svx/view3d.hxx277
-rw-r--r--svx/inc/svx/viewlayoutitem.hxx63
-rw-r--r--svx/inc/svx/viewpt3d.hxx132
-rw-r--r--svx/inc/svx/volume3d.hxx33
-rw-r--r--svx/inc/svx/xbitmap.hxx100
-rw-r--r--svx/inc/svx/xbtmpit.hxx76
-rw-r--r--svx/inc/svx/xcolit.hxx67
-rw-r--r--svx/inc/svx/xdash.hxx77
-rw-r--r--svx/inc/svx/xdef.hxx101
-rw-r--r--svx/inc/svx/xenum.hxx62
-rw-r--r--svx/inc/svx/xfillit.hxx51
-rw-r--r--svx/inc/svx/xfillit0.hxx63
-rw-r--r--svx/inc/svx/xflasit.hxx54
-rw-r--r--svx/inc/svx/xflbckit.hxx58
-rw-r--r--svx/inc/svx/xflbmpit.hxx60
-rw-r--r--svx/inc/svx/xflbmsli.hxx56
-rw-r--r--svx/inc/svx/xflbmsxy.hxx88
-rw-r--r--svx/inc/svx/xflbmtit.hxx56
-rw-r--r--svx/inc/svx/xflboxy.hxx79
-rw-r--r--svx/inc/svx/xflbstit.hxx56
-rw-r--r--svx/inc/svx/xflbtoxy.hxx79
-rw-r--r--svx/inc/svx/xflclit.hxx63
-rw-r--r--svx/inc/svx/xflftrit.hxx72
-rw-r--r--svx/inc/svx/xflgrit.hxx74
-rw-r--r--svx/inc/svx/xflhtit.hxx76
-rw-r--r--svx/inc/svx/xfltrit.hxx54
-rw-r--r--svx/inc/svx/xftadit.hxx55
-rw-r--r--svx/inc/svx/xftdiit.hxx50
-rw-r--r--svx/inc/svx/xftmrit.hxx50
-rw-r--r--svx/inc/svx/xftouit.hxx50
-rw-r--r--svx/inc/svx/xftsfit.hxx55
-rw-r--r--svx/inc/svx/xftshcit.hxx53
-rw-r--r--svx/inc/svx/xftshit.hxx56
-rw-r--r--svx/inc/svx/xftshtit.hxx49
-rw-r--r--svx/inc/svx/xftshxy.hxx67
-rw-r--r--svx/inc/svx/xftstit.hxx50
-rw-r--r--svx/inc/svx/xgrad.hxx86
-rw-r--r--svx/inc/svx/xgrscit.hxx54
-rw-r--r--svx/inc/svx/xhatch.hxx65
-rw-r--r--svx/inc/svx/xit.hxx88
-rw-r--r--svx/inc/svx/xlineit.hxx54
-rw-r--r--svx/inc/svx/xlineit0.hxx59
-rw-r--r--svx/inc/svx/xlinjoit.hxx60
-rw-r--r--svx/inc/svx/xlnasit.hxx55
-rw-r--r--svx/inc/svx/xlnclit.hxx58
-rw-r--r--svx/inc/svx/xlndsit.hxx80
-rw-r--r--svx/inc/svx/xlnedcit.hxx55
-rw-r--r--svx/inc/svx/xlnedit.hxx72
-rw-r--r--svx/inc/svx/xlnedwit.hxx59
-rw-r--r--svx/inc/svx/xlnstcit.hxx56
-rw-r--r--svx/inc/svx/xlnstit.hxx72
-rw-r--r--svx/inc/svx/xlnstwit.hxx58
-rw-r--r--svx/inc/svx/xlntrit.hxx54
-rw-r--r--svx/inc/svx/xlnwtit.hxx55
-rw-r--r--svx/inc/svx/xpoly.hxx216
-rw-r--r--svx/inc/svx/xpool.hxx60
-rw-r--r--svx/inc/svx/xsetit.hxx53
-rw-r--r--svx/inc/svx/xsflclit.hxx58
-rw-r--r--svx/inc/svx/xtable.hxx653
-rw-r--r--svx/inc/svx/xtextit.hxx48
-rw-r--r--svx/inc/svx/xtextit0.hxx72
-rw-r--r--svx/inc/svx/zoomitem.hxx91
-rw-r--r--svx/inc/svx/zoomsliderctrl.hxx62
-rw-r--r--svx/inc/svx/zoomslideritem.hxx68
-rw-r--r--svx/inc/svxempty.hxx45
-rw-r--r--svx/inc/svxerr.hxx110
-rw-r--r--svx/inc/svxgrahicitem.hxx54
-rw-r--r--svx/inc/swframeexample.hxx101
-rw-r--r--svx/inc/swframeposstrings.hxx94
-rw-r--r--svx/inc/swframevalidation.hxx87
-rw-r--r--svx/inc/tbunocontroller.hxx89
-rw-r--r--svx/inc/tbunosearchcontrollers.hxx282
-rw-r--r--svx/inc/tbxalign.hxx54
-rw-r--r--svx/inc/tbxcolor.hxx71
-rw-r--r--svx/inc/tbxctl.hxx62
-rw-r--r--svx/inc/tbxcustomshapes.hxx68
-rw-r--r--svx/inc/tbxdraw.hxx75
-rw-r--r--svx/inc/txencbox.hxx121
-rw-r--r--svx/inc/txenctab.hxx55
-rw-r--r--svx/inc/uiks.hxx89
-rw-r--r--svx/inc/unoapi.hxx102
-rw-r--r--svx/inc/unofill.hxx44
-rw-r--r--svx/inc/unomaster.hxx66
-rw-r--r--svx/inc/unomlstr.hxx57
-rw-r--r--svx/inc/unopool.hxx96
-rw-r--r--svx/inc/unoshcol.hxx101
-rw-r--r--svx/inc/verttexttbxctrl.hxx67
-rw-r--r--svx/inc/wrapfield.hxx58
-rw-r--r--svx/inc/xattr.hxx67
-rw-r--r--svx/inc/xexch.hxx67
-rw-r--r--svx/inc/xmleohlp.hxx149
-rw-r--r--svx/inc/xmlexchg.hxx104
-rw-r--r--svx/inc/xmlgrhlp.hxx163
-rw-r--r--svx/inc/xmlsecctrl.hxx59
-rw-r--r--svx/inc/xoutbmp.hxx97
-rw-r--r--svx/inc/xpolyimp.hxx106
-rw-r--r--svx/inc/zoom_def.hxx8
-rw-r--r--svx/inc/zoomctrl.hxx59
-rw-r--r--svx/prj/build.lst39
-rw-r--r--svx/prj/d.lst554
-rw-r--r--svx/qa/unoapi/Test.java51
-rw-r--r--svx/qa/unoapi/knownissues.xcl87
-rw-r--r--svx/qa/unoapi/makefile.mk48
-rw-r--r--svx/qa/unoapi/svx.sce31
-rw-r--r--svx/qa/unoapi/testdocuments/SvxShape.sxdbin0 -> 6344 bytes
-rw-r--r--svx/qa/unoapi/testdocuments/crazy-blue.jpgbin0 -> 4451 bytes
-rw-r--r--svx/qa/unoapi/testdocuments/space-metal.jpgbin0 -> 4313 bytes
-rw-r--r--svx/sdi/fmslots.sdi770
-rw-r--r--svx/sdi/makefile.mk57
-rw-r--r--svx/sdi/svx.sdi15137
-rw-r--r--svx/sdi/svxitems.sdi698
-rw-r--r--svx/sdi/svxslots.hrc33
-rw-r--r--svx/sdi/svxslots.sdi77
-rw-r--r--svx/sdi/xoitems.sdi163
-rw-r--r--svx/source/accessibility/AccessibleControlShape.cxx920
-rw-r--r--svx/source/accessibility/AccessibleEmptyEditSource.cxx356
-rw-r--r--svx/source/accessibility/AccessibleEmptyEditSource.hxx100
-rw-r--r--svx/source/accessibility/AccessibleFrameSelector.cxx740
-rw-r--r--svx/source/accessibility/AccessibleGraphicShape.cxx212
-rw-r--r--svx/source/accessibility/AccessibleOLEShape.cxx232
-rwxr-xr-xsvx/source/accessibility/AccessibleShape.cxx1244
-rw-r--r--svx/source/accessibility/AccessibleShapeInfo.cxx84
-rw-r--r--svx/source/accessibility/AccessibleShapeTreeInfo.cxx223
-rw-r--r--svx/source/accessibility/AccessibleTextEventQueue.cxx111
-rw-r--r--svx/source/accessibility/AccessibleTextEventQueue.hxx103
-rw-r--r--svx/source/accessibility/AccessibleTextHelper.cxx2077
-rw-r--r--svx/source/accessibility/ChildrenManager.cxx180
-rw-r--r--svx/source/accessibility/ChildrenManagerImpl.cxx1098
-rw-r--r--svx/source/accessibility/ChildrenManagerImpl.hxx577
-rw-r--r--svx/source/accessibility/DGColorNameLookUp.cxx148
-rw-r--r--svx/source/accessibility/DescriptionGenerator.cxx484
-rw-r--r--svx/source/accessibility/GraphCtlAccessibleContext.cxx1027
-rwxr-xr-xsvx/source/accessibility/ShapeTypeHandler.cxx338
-rw-r--r--svx/source/accessibility/SvxShapeTypes.cxx207
-rw-r--r--svx/source/accessibility/accessibility.src262
-rw-r--r--svx/source/accessibility/charmapacc.cxx891
-rwxr-xr-xsvx/source/accessibility/makefile.mk68
-rw-r--r--svx/source/accessibility/svxrectctaccessiblecontext.cxx1206
-rw-r--r--svx/source/core/coreservices.cxx183
-rw-r--r--svx/source/core/makefile.mk47
-rw-r--r--svx/source/customshapes/EnhancedCustomShape2d.cxx2175
-rw-r--r--svx/source/customshapes/EnhancedCustomShape2d.hxx221
-rw-r--r--svx/source/customshapes/EnhancedCustomShape3d.cxx752
-rw-r--r--svx/source/customshapes/EnhancedCustomShape3d.hxx78
-rw-r--r--svx/source/customshapes/EnhancedCustomShapeEngine.cxx471
-rw-r--r--svx/source/customshapes/EnhancedCustomShapeEngine.hxx124
-rw-r--r--svx/source/customshapes/EnhancedCustomShapeFontWork.cxx910
-rw-r--r--svx/source/customshapes/EnhancedCustomShapeFontWork.hxx45
-rw-r--r--svx/source/customshapes/EnhancedCustomShapeFunctionParser.cxx1212
-rw-r--r--svx/source/customshapes/EnhancedCustomShapeGeometry.cxx8273
-rw-r--r--svx/source/customshapes/EnhancedCustomShapeGeometry.hxx101
-rw-r--r--svx/source/customshapes/EnhancedCustomShapeHandle.cxx93
-rw-r--r--svx/source/customshapes/EnhancedCustomShapeHandle.hxx69
-rw-r--r--svx/source/customshapes/EnhancedCustomShapeTypeNames.cxx321
-rw-r--r--svx/source/customshapes/EnhancedCustomShapeTypeNames.hxx39
-rw-r--r--svx/source/customshapes/makefile.mk71
-rw-r--r--svx/source/customshapes/tbxcustomshapes.cxx204
-rw-r--r--svx/source/dialog/SpellDialogChildWindow.cxx119
-rw-r--r--svx/source/dialog/_bmpmask.cxx1241
-rw-r--r--svx/source/dialog/_contdlg.cxx1161
-rw-r--r--svx/source/dialog/bmpmask.hrc62
-rw-r--r--svx/source/dialog/bmpmask.src358
-rw-r--r--svx/source/dialog/charmap.cxx893
-rw-r--r--svx/source/dialog/checklbx.cxx277
-rw-r--r--svx/source/dialog/connctrl.cxx387
-rw-r--r--svx/source/dialog/contdlg.hrc87
-rw-r--r--svx/source/dialog/contdlg.src288
-rw-r--r--svx/source/dialog/contimp.hxx127
-rw-r--r--svx/source/dialog/contwnd.cxx358
-rw-r--r--svx/source/dialog/contwnd.hxx90
-rw-r--r--svx/source/dialog/ctredlin.cxx1531
-rw-r--r--svx/source/dialog/ctredlin.hrc70
-rw-r--r--svx/source/dialog/ctredlin.src365
-rw-r--r--svx/source/dialog/databaseregistrationui.cxx69
-rw-r--r--svx/source/dialog/dialcontrol.cxx572
-rw-r--r--svx/source/dialog/dialmgr.cxx54
-rw-r--r--svx/source/dialog/dlgctl3d.cxx1323
-rw-r--r--svx/source/dialog/dlgctrl.cxx2287
-rw-r--r--svx/source/dialog/dlgctrl.src34
-rw-r--r--svx/source/dialog/dlgutil.cxx55
-rw-r--r--svx/source/dialog/docrecovery.cxx2182
-rw-r--r--svx/source/dialog/docrecovery.hrc292
-rw-r--r--svx/source/dialog/docrecovery.src635
-rw-r--r--svx/source/dialog/fntctrl.cxx851
-rw-r--r--svx/source/dialog/fontlb.cxx189
-rw-r--r--svx/source/dialog/fontwork.cxx1283
-rw-r--r--svx/source/dialog/fontwork.hrc67
-rw-r--r--svx/source/dialog/fontwork.src555
-rw-r--r--svx/source/dialog/framelink.cxx1531
-rw-r--r--svx/source/dialog/framelinkarray.cxx1247
-rw-r--r--svx/source/dialog/frmdirlbox.cxx127
-rw-r--r--svx/source/dialog/frmsel.cxx1205
-rw-r--r--svx/source/dialog/frmsel.src70
-rw-r--r--svx/source/dialog/graphctl.cxx960
-rw-r--r--svx/source/dialog/grfflt.cxx793
-rw-r--r--svx/source/dialog/hdft.cxx983
-rw-r--r--svx/source/dialog/hdft.hrc52
-rw-r--r--svx/source/dialog/hdft.src365
-rw-r--r--svx/source/dialog/hyperdlg.cxx107
-rw-r--r--svx/source/dialog/hyprdlg.hxx143
-rw-r--r--svx/source/dialog/hyprlink.cxx999
-rw-r--r--svx/source/dialog/hyprlink.hrc58
-rw-r--r--svx/source/dialog/hyprlink.hxx43
-rw-r--r--svx/source/dialog/hyprlink.src167
-rw-r--r--svx/source/dialog/imapdlg.cxx1055
-rw-r--r--svx/source/dialog/imapdlg.hrc106
-rw-r--r--svx/source/dialog/imapdlg.src365
-rw-r--r--svx/source/dialog/imapimp.hxx56
-rw-r--r--svx/source/dialog/imapwnd.cxx1069
-rw-r--r--svx/source/dialog/imapwnd.hxx226
-rw-r--r--svx/source/dialog/langbox.cxx526
-rw-r--r--svx/source/dialog/langbox.src49
-rw-r--r--svx/source/dialog/language.src66
-rw-r--r--svx/source/dialog/makefile.mk154
-rw-r--r--svx/source/dialog/measctrl.cxx199
-rw-r--r--svx/source/dialog/optgrid.cxx419
-rw-r--r--svx/source/dialog/optgrid.hrc71
-rw-r--r--svx/source/dialog/optgrid.src353
-rw-r--r--svx/source/dialog/orienthelper.cxx206
-rw-r--r--svx/source/dialog/pagectrl.cxx421
-rw-r--r--svx/source/dialog/paraprev.cxx238
-rw-r--r--svx/source/dialog/passwd.cxx136
-rw-r--r--svx/source/dialog/passwd.hrc51
-rw-r--r--svx/source/dialog/passwd.src153
-rw-r--r--svx/source/dialog/pfiledlg.cxx285
-rw-r--r--svx/source/dialog/prtqry.cxx62
-rw-r--r--svx/source/dialog/prtqry.src74
-rw-r--r--svx/source/dialog/relfld.cxx146
-rw-r--r--svx/source/dialog/rlrcitem.cxx166
-rw-r--r--svx/source/dialog/rlrcitem.hxx51
-rw-r--r--svx/source/dialog/rubydialog.cxx990
-rw-r--r--svx/source/dialog/rubydialog.hrc53
-rw-r--r--svx/source/dialog/rubydialog.src207
-rw-r--r--svx/source/dialog/ruler.hrc37
-rw-r--r--svx/source/dialog/ruler.src137
-rw-r--r--svx/source/dialog/rulritem.cxx743
-rw-r--r--svx/source/dialog/sdstring.src1289
-rw-r--r--svx/source/dialog/sendreportgen.cxx53
-rw-r--r--svx/source/dialog/sendreportunx.cxx272
-rw-r--r--svx/source/dialog/sendreportw32.cxx260
-rw-r--r--svx/source/dialog/simptabl.cxx580
-rw-r--r--svx/source/dialog/srchctrl.cxx90
-rw-r--r--svx/source/dialog/srchctrl.hxx51
-rw-r--r--svx/source/dialog/srchdlg.cxx2549
-rw-r--r--svx/source/dialog/srchdlg.hrc93
-rw-r--r--svx/source/dialog/srchdlg.src411
-rw-r--r--svx/source/dialog/stddlg.cxx67
-rw-r--r--svx/source/dialog/strarray.cxx99
-rw-r--r--svx/source/dialog/svxbmpnumvalueset.cxx572
-rw-r--r--svx/source/dialog/svxbmpnumvalueset.src127
-rw-r--r--svx/source/dialog/svxdlg.cxx41
-rw-r--r--svx/source/dialog/svxgrahicitem.cxx50
-rw-r--r--svx/source/dialog/svxruler.cxx3951
-rw-r--r--svx/source/dialog/swframeexample.cxx737
-rw-r--r--svx/source/dialog/swframeposstrings.cxx76
-rw-r--r--svx/source/dialog/swframeposstrings.src245
-rw-r--r--svx/source/dialog/txencbox.cxx254
-rw-r--r--svx/source/dialog/txenctab.cxx76
-rw-r--r--svx/source/dialog/txenctab.src122
-rwxr-xr-xsvx/source/dialog/ucsubset.src511
-rw-r--r--svx/source/dialog/wrapfield.cxx61
-rw-r--r--svx/source/engine3d/camera3d.cxx392
-rw-r--r--svx/source/engine3d/cube3d.cxx199
-rw-r--r--svx/source/engine3d/deflt3d.cxx81
-rw-r--r--svx/source/engine3d/dragmt3d.cxx789
-rw-r--r--svx/source/engine3d/e3dsceneupdater.cxx130
-rw-r--r--svx/source/engine3d/e3dundo.cxx180
-rw-r--r--svx/source/engine3d/extrud3d.cxx264
-rw-r--r--svx/source/engine3d/float3d.cxx3333
-rw-r--r--svx/source/engine3d/float3d.src1420
-rw-r--r--svx/source/engine3d/helperhittest3d.cxx295
-rw-r--r--svx/source/engine3d/helperminimaldepth3d.cxx212
-rw-r--r--svx/source/engine3d/helperminimaldepth3d.hxx60
-rw-r--r--svx/source/engine3d/lathe3d.cxx277
-rw-r--r--svx/source/engine3d/makefile.mk76
-rw-r--r--svx/source/engine3d/obj3d.cxx1280
-rw-r--r--svx/source/engine3d/objfac3d.cxx110
-rw-r--r--svx/source/engine3d/polygn3d.cxx361
-rw-r--r--svx/source/engine3d/polysc3d.cxx74
-rw-r--r--svx/source/engine3d/scene3d.cxx884
-rw-r--r--svx/source/engine3d/sphere3d.cxx226
-rw-r--r--svx/source/engine3d/string3d.src116
-rw-r--r--svx/source/engine3d/svx3ditems.cxx547
-rw-r--r--svx/source/engine3d/view3d.cxx1927
-rw-r--r--svx/source/engine3d/view3d1.cxx230
-rw-r--r--svx/source/engine3d/viewpt3d2.cxx394
-rw-r--r--svx/source/fmcomp/dbaexchange.cxx732
-rw-r--r--svx/source/fmcomp/dbaobjectex.cxx187
-rw-r--r--svx/source/fmcomp/fmgridcl.cxx2144
-rw-r--r--svx/source/fmcomp/fmgridif.cxx2965
-rw-r--r--svx/source/fmcomp/gridcell.cxx4840
-rw-r--r--svx/source/fmcomp/gridcols.cxx114
-rw-r--r--svx/source/fmcomp/gridctrl.cxx3893
-rw-r--r--svx/source/fmcomp/gridctrl.src257
-rw-r--r--svx/source/fmcomp/makefile.mk63
-rw-r--r--svx/source/fmcomp/trace.cxx124
-rw-r--r--svx/source/fmcomp/xmlexchg.cxx93
-rw-r--r--svx/source/form/ParseContext.cxx249
-rw-r--r--svx/source/form/dataaccessdescriptor.cxx567
-rw-r--r--svx/source/form/databaselocationinput.cxx314
-rw-r--r--svx/source/form/datalistener.cxx98
-rw-r--r--svx/source/form/datanavi.cxx3732
-rw-r--r--svx/source/form/datanavi.src1160
-rw-r--r--svx/source/form/dbcharsethelper.cxx59
-rw-r--r--svx/source/form/dbtoolsclient.cxx366
-rw-r--r--svx/source/form/delayedevent.cxx68
-rw-r--r--svx/source/form/filtnav.cxx2085
-rw-r--r--svx/source/form/filtnav.src87
-rw-r--r--svx/source/form/fmPropBrw.cxx722
-rw-r--r--svx/source/form/fmcontrolbordermanager.cxx445
-rw-r--r--svx/source/form/fmcontrollayout.cxx328
-rw-r--r--svx/source/form/fmdmod.cxx131
-rw-r--r--svx/source/form/fmdocumentclassification.cxx214
-rw-r--r--svx/source/form/fmdpage.cxx146
-rw-r--r--svx/source/form/fmexch.cxx443
-rw-r--r--svx/source/form/fmexpl.cxx707
-rw-r--r--svx/source/form/fmexpl.src378
-rw-r--r--svx/source/form/fmitems.cxx69
-rw-r--r--svx/source/form/fmmodel.cxx369
-rw-r--r--svx/source/form/fmobj.cxx736
-rw-r--r--svx/source/form/fmobjfac.cxx278
-rw-r--r--svx/source/form/fmpage.cxx282
-rw-r--r--svx/source/form/fmpgeimp.cxx739
-rw-r--r--svx/source/form/fmscriptingenv.cxx562
-rw-r--r--svx/source/form/fmservs.cxx106
-rw-r--r--svx/source/form/fmshell.cxx1520
-rw-r--r--svx/source/form/fmshimp.cxx4338
-rw-r--r--svx/source/form/fmsrccfg.cxx363
-rw-r--r--svx/source/form/fmsrcimp.cxx1303
-rw-r--r--svx/source/form/fmstring.src491
-rw-r--r--svx/source/form/fmtextcontroldialogs.cxx131
-rw-r--r--svx/source/form/fmtextcontrolfeature.cxx131
-rw-r--r--svx/source/form/fmtextcontrolshell.cxx1398
-rw-r--r--svx/source/form/fmtools.cxx496
-rw-r--r--svx/source/form/fmundo.cxx1346
-rw-r--r--svx/source/form/fmview.cxx626
-rw-r--r--svx/source/form/fmvwimp.cxx1958
-rw-r--r--svx/source/form/formcontrolfactory.cxx733
-rw-r--r--svx/source/form/formcontroller.cxx4317
-rw-r--r--svx/source/form/formcontrolling.cxx604
-rw-r--r--svx/source/form/formdispatchinterceptor.cxx214
-rw-r--r--svx/source/form/formfeaturedispatcher.cxx241
-rw-r--r--svx/source/form/formshell.src227
-rw-r--r--svx/source/form/formtoolbars.cxx117
-rw-r--r--svx/source/form/legacyformcontroller.cxx226
-rw-r--r--svx/source/form/makefile.mk119
-rw-r--r--svx/source/form/navigatortree.cxx2322
-rw-r--r--svx/source/form/navigatortreemodel.cxx1126
-rw-r--r--svx/source/form/sdbdatacolumn.cxx287
-rw-r--r--svx/source/form/sqlparserclient.cxx62
-rw-r--r--svx/source/form/stringlistresource.cxx71
-rw-r--r--svx/source/form/tabwin.cxx476
-rw-r--r--svx/source/form/tbxform.cxx477
-rw-r--r--svx/source/form/typeconversionclient.cxx58
-rw-r--r--svx/source/form/typemap.cxx65
-rw-r--r--svx/source/form/xfm_addcondition.cxx193
-rw-r--r--svx/source/gallery2/codec.cxx173
-rw-r--r--svx/source/gallery2/codec.hxx51
-rw-r--r--svx/source/gallery2/galbrws.cxx285
-rw-r--r--svx/source/gallery2/galbrws1.cxx715
-rw-r--r--svx/source/gallery2/galbrws1.hxx135
-rw-r--r--svx/source/gallery2/galbrws2.cxx1253
-rw-r--r--svx/source/gallery2/galctrl.cxx723
-rw-r--r--svx/source/gallery2/galexpl.cxx515
-rw-r--r--svx/source/gallery2/gallery.src493
-rw-r--r--svx/source/gallery2/gallery1.cxx923
-rw-r--r--svx/source/gallery2/gallerydrawmodel.hxx44
-rw-r--r--svx/source/gallery2/galmisc.cxx669
-rw-r--r--svx/source/gallery2/galobj.cxx607
-rw-r--r--svx/source/gallery2/galtheme.cxx1599
-rw-r--r--svx/source/gallery2/galtheme.src341
-rw-r--r--svx/source/gallery2/makefile.mk69
-rw-r--r--svx/source/gengal/gengal.cxx318
-rw-r--r--svx/source/gengal/gengal.sh101
-rw-r--r--svx/source/gengal/gengalrc.in12
-rw-r--r--svx/source/gengal/makefile.mk85
-rw-r--r--svx/source/inc/AccessibleFrameSelector.hxx149
-rw-r--r--svx/source/inc/DGColorNameLookUp.hxx99
-rw-r--r--svx/source/inc/GraphCtlAccessibleContext.hxx281
-rw-r--r--svx/source/inc/charmapacc.hxx278
-rw-r--r--svx/source/inc/clonelist.hxx57
-rw-r--r--svx/source/inc/datalistener.hxx79
-rw-r--r--svx/source/inc/datanavi.hrc180
-rw-r--r--svx/source/inc/datanavi.hxx601
-rw-r--r--svx/source/inc/delayedevent.hxx87
-rw-r--r--svx/source/inc/docrecovery.hxx973
-rw-r--r--svx/source/inc/filtnav.hxx372
-rw-r--r--svx/source/inc/fmPropBrw.hxx124
-rw-r--r--svx/source/inc/fmcontrolbordermanager.hxx268
-rw-r--r--svx/source/inc/fmcontrollayout.hxx93
-rw-r--r--svx/source/inc/fmdocumentclassification.hxx87
-rw-r--r--svx/source/inc/fmexch.hxx283
-rw-r--r--svx/source/inc/fmexpl.hrc40
-rw-r--r--svx/source/inc/fmexpl.hxx612
-rw-r--r--svx/source/inc/fmgroup.hxx120
-rw-r--r--svx/source/inc/fmhlpids.hrc36
-rw-r--r--svx/source/inc/fmitems.hxx72
-rw-r--r--svx/source/inc/fmobj.hxx134
-rw-r--r--svx/source/inc/fmpgeimp.hxx170
-rw-r--r--svx/source/inc/fmprop.hrc179
-rw-r--r--svx/source/inc/fmresids.hrc264
-rw-r--r--svx/source/inc/fmscriptingenv.hxx99
-rw-r--r--svx/source/inc/fmservs.hxx90
-rw-r--r--svx/source/inc/fmshimp.hxx608
-rw-r--r--svx/source/inc/fmslotinvalidator.hxx55
-rw-r--r--svx/source/inc/fmsrccfg.hxx156
-rw-r--r--svx/source/inc/fmsrcimp.hxx409
-rw-r--r--svx/source/inc/fmtextcontroldialogs.hxx70
-rw-r--r--svx/source/inc/fmtextcontrolfeature.hxx105
-rw-r--r--svx/source/inc/fmtextcontrolshell.hxx224
-rw-r--r--svx/source/inc/fmundo.hxx230
-rw-r--r--svx/source/inc/fmurl.hxx60
-rw-r--r--svx/source/inc/fmvwimp.hxx315
-rw-r--r--svx/source/inc/formcontrolfactory.hxx119
-rw-r--r--svx/source/inc/formcontroller.hxx592
-rw-r--r--svx/source/inc/formcontrolling.hxx308
-rw-r--r--svx/source/inc/formdispatchinterceptor.hxx119
-rw-r--r--svx/source/inc/formfeaturedispatcher.hxx157
-rw-r--r--svx/source/inc/formtoolbars.hxx90
-rw-r--r--svx/source/inc/frmsel.hrc38
-rw-r--r--svx/source/inc/frmselimpl.hxx305
-rw-r--r--svx/source/inc/gridcell.hxx1156
-rw-r--r--svx/source/inc/gridcols.hxx62
-rw-r--r--svx/source/inc/linectrl.hrc28
-rw-r--r--svx/source/inc/recoveryui.hxx155
-rw-r--r--svx/source/inc/sdbdatacolumn.hxx140
-rw-r--r--svx/source/inc/sqlparserclient.hxx79
-rw-r--r--svx/source/inc/stringlistresource.hxx86
-rw-r--r--svx/source/inc/svdoimp.hxx111
-rw-r--r--svx/source/inc/svdoutlinercache.hxx54
-rw-r--r--svx/source/inc/svxrectctaccessiblecontext.hxx566
-rw-r--r--svx/source/inc/tabwin.hxx141
-rw-r--r--svx/source/inc/tbxform.hxx166
-rw-r--r--svx/source/inc/trace.hxx68
-rw-r--r--svx/source/inc/treevisitor.hxx109
-rw-r--r--svx/source/inc/typeconversionclient.hxx93
-rw-r--r--svx/source/inc/unogalthemeprovider.hxx100
-rw-r--r--svx/source/inc/unopolyhelper.hxx55
-rw-r--r--svx/source/inc/xfm_addcondition.hxx92
-rw-r--r--svx/source/inc/xmlxtexp.hxx70
-rw-r--r--svx/source/inc/xmlxtimp.hxx64
-rw-r--r--svx/source/intro/intro_tmpl.hrc1327
-rw-r--r--svx/source/intro/iso.src224
-rw-r--r--svx/source/intro/makefile.mk66
-rw-r--r--svx/source/intro/ooo.src194
-rw-r--r--svx/source/items/SmartTagItem.cxx123
-rw-r--r--svx/source/items/algitem.cxx765
-rw-r--r--svx/source/items/chrtitem.cxx538
-rw-r--r--svx/source/items/clipfmtitem.cxx180
-rw-r--r--svx/source/items/customshapeitem.cxx386
-rw-r--r--svx/source/items/drawitem.cxx557
-rw-r--r--svx/source/items/e3ditem.cxx170
-rw-r--r--svx/source/items/grfitem.cxx197
-rw-r--r--svx/source/items/hlnkitem.cxx430
-rw-r--r--svx/source/items/makefile.mk83
-rw-r--r--svx/source/items/numfmtsh.cxx1869
-rw-r--r--svx/source/items/numinf.cxx250
-rw-r--r--svx/source/items/ofaitem.cxx91
-rw-r--r--svx/source/items/pageitem.cxx338
-rw-r--r--svx/source/items/postattr.cxx192
-rw-r--r--svx/source/items/rotmodit.cxx178
-rw-r--r--svx/source/items/svxempty.cxx40
-rw-r--r--svx/source/items/svxerr.cxx54
-rw-r--r--svx/source/items/svxerr.src174
-rw-r--r--svx/source/items/svxitems.src393
-rw-r--r--svx/source/items/viewlayoutitem.cxx211
-rw-r--r--svx/source/items/zoomitem.cxx231
-rw-r--r--svx/source/items/zoomslideritem.cxx280
-rw-r--r--svx/source/mnuctrls/SmartTagCtl.cxx225
-rw-r--r--svx/source/mnuctrls/clipboardctl.cxx163
-rw-r--r--svx/source/mnuctrls/fntctl.cxx182
-rw-r--r--svx/source/mnuctrls/fntszctl.cxx211
-rw-r--r--svx/source/mnuctrls/makefile.mk71
-rw-r--r--svx/source/mnuctrls/mnuctrls.src81
-rw-r--r--svx/source/sdr/animation/animationstate.cxx148
-rw-r--r--svx/source/sdr/animation/makefile.mk46
-rw-r--r--svx/source/sdr/animation/objectanimator.cxx52
-rw-r--r--svx/source/sdr/animation/scheduler.cxx315
-rw-r--r--svx/source/sdr/attribute/makefile.mk50
-rw-r--r--svx/source/sdr/attribute/sdrfilltextattribute.cxx92
-rw-r--r--svx/source/sdr/attribute/sdrformtextattribute.cxx423
-rw-r--r--svx/source/sdr/attribute/sdrformtextoutlineattribute.cxx185
-rw-r--r--svx/source/sdr/attribute/sdrlinefillshadowtextattribute.cxx95
-rw-r--r--svx/source/sdr/attribute/sdrlineshadowtextattribute.cxx93
-rw-r--r--svx/source/sdr/attribute/sdrshadowtextattribute.cxx85
-rw-r--r--svx/source/sdr/attribute/sdrtextattribute.cxx461
-rw-r--r--svx/source/sdr/contact/displayinfo.cxx110
-rw-r--r--svx/source/sdr/contact/makefile.mk92
-rw-r--r--svx/source/sdr/contact/objectcontact.cxx322
-rw-r--r--svx/source/sdr/contact/objectcontactofobjlistpainter.cxx207
-rw-r--r--svx/source/sdr/contact/objectcontactofpageview.cxx485
-rw-r--r--svx/source/sdr/contact/objectcontacttools.cxx104
-rw-r--r--svx/source/sdr/contact/sdrmediawindow.cxx193
-rw-r--r--svx/source/sdr/contact/sdrmediawindow.hxx69
-rw-r--r--svx/source/sdr/contact/viewcontact.cxx329
-rw-r--r--svx/source/sdr/contact/viewcontactofe3d.cxx227
-rw-r--r--svx/source/sdr/contact/viewcontactofe3dcube.cxx105
-rw-r--r--svx/source/sdr/contact/viewcontactofe3dextrude.cxx100
-rw-r--r--svx/source/sdr/contact/viewcontactofe3dlathe.cxx115
-rw-r--r--svx/source/sdr/contact/viewcontactofe3dpolygon.cxx186
-rw-r--r--svx/source/sdr/contact/viewcontactofe3dscene.cxx478
-rw-r--r--svx/source/sdr/contact/viewcontactofe3dsphere.cxx98
-rw-r--r--svx/source/sdr/contact/viewcontactofgraphic.cxx463
-rw-r--r--svx/source/sdr/contact/viewcontactofgroup.cxx103
-rw-r--r--svx/source/sdr/contact/viewcontactofmasterpagedescriptor.cxx126
-rw-r--r--svx/source/sdr/contact/viewcontactofpageobj.cxx105
-rw-r--r--svx/source/sdr/contact/viewcontactofsdrcaptionobj.cxx179
-rw-r--r--svx/source/sdr/contact/viewcontactofsdrcircobj.cxx117
-rw-r--r--svx/source/sdr/contact/viewcontactofsdredgeobj.cxx79
-rw-r--r--svx/source/sdr/contact/viewcontactofsdrmeasureobj.cxx143
-rw-r--r--svx/source/sdr/contact/viewcontactofsdrmediaobj.cxx184
-rw-r--r--svx/source/sdr/contact/viewcontactofsdrobj.cxx194
-rw-r--r--svx/source/sdr/contact/viewcontactofsdrobjcustomshape.cxx241
-rw-r--r--svx/source/sdr/contact/viewcontactofsdrole2obj.cxx130
-rw-r--r--svx/source/sdr/contact/viewcontactofsdrpage.cxx693
-rw-r--r--svx/source/sdr/contact/viewcontactofsdrpathobj.cxx145
-rw-r--r--svx/source/sdr/contact/viewcontactofsdrrectobj.cxx104
-rw-r--r--svx/source/sdr/contact/viewcontactoftextobj.cxx51
-rw-r--r--svx/source/sdr/contact/viewcontactofunocontrol.cxx181
-rw-r--r--svx/source/sdr/contact/viewcontactofvirtobj.cxx116
-rw-r--r--svx/source/sdr/contact/viewobjectcontact.cxx438
-rw-r--r--svx/source/sdr/contact/viewobjectcontactofe3d.cxx101
-rw-r--r--svx/source/sdr/contact/viewobjectcontactofe3dscene.cxx148
-rw-r--r--svx/source/sdr/contact/viewobjectcontactofgraphic.cxx327
-rw-r--r--svx/source/sdr/contact/viewobjectcontactofgroup.cxx115
-rw-r--r--svx/source/sdr/contact/viewobjectcontactofmasterpagedescriptor.cxx153
-rw-r--r--svx/source/sdr/contact/viewobjectcontactofpageobj.cxx352
-rw-r--r--svx/source/sdr/contact/viewobjectcontactofsdrmediaobj.cxx176
-rw-r--r--svx/source/sdr/contact/viewobjectcontactofsdrobj.cxx152
-rw-r--r--svx/source/sdr/contact/viewobjectcontactofsdrole2obj.cxx243
-rw-r--r--svx/source/sdr/contact/viewobjectcontactofsdrpage.cxx723
-rw-r--r--svx/source/sdr/contact/viewobjectcontactofunocontrol.cxx1925
-rw-r--r--svx/source/sdr/contact/viewobjectcontactredirector.cxx60
-rw-r--r--svx/source/sdr/event/eventhandler.cxx162
-rw-r--r--svx/source/sdr/event/makefile.mk44
-rw-r--r--svx/source/sdr/overlay/makefile.mk59
-rw-r--r--svx/source/sdr/overlay/overlayanimatedbitmapex.cxx217
-rw-r--r--svx/source/sdr/overlay/overlaybitmapex.cxx113
-rw-r--r--svx/source/sdr/overlay/overlaycrosshair.cxx84
-rw-r--r--svx/source/sdr/overlay/overlayhatchrect.cxx94
-rw-r--r--svx/source/sdr/overlay/overlayhelpline.cxx93
-rw-r--r--svx/source/sdr/overlay/overlayline.cxx107
-rw-r--r--svx/source/sdr/overlay/overlaymanager.cxx393
-rw-r--r--svx/source/sdr/overlay/overlaymanagerbuffered.cxx538
-rw-r--r--svx/source/sdr/overlay/overlayobject.cxx216
-rw-r--r--svx/source/sdr/overlay/overlayobjectcell.cxx111
-rw-r--r--svx/source/sdr/overlay/overlayobjectlist.cxx184
-rw-r--r--svx/source/sdr/overlay/overlaypolypolygon.cxx99
-rw-r--r--svx/source/sdr/overlay/overlayprimitive2dsequenceobject.cxx61
-rw-r--r--svx/source/sdr/overlay/overlayrollingrectangle.cxx150
-rw-r--r--svx/source/sdr/overlay/overlayselection.cxx237
-rw-r--r--svx/source/sdr/overlay/overlaytools.cxx493
-rw-r--r--svx/source/sdr/overlay/overlaytriangle.cxx106
-rw-r--r--svx/source/sdr/primitive2d/makefile.mk57
-rw-r--r--svx/source/sdr/primitive2d/primitivefactory2d.cxx132
-rw-r--r--svx/source/sdr/primitive2d/sdrattributecreator.cxx1028
-rw-r--r--svx/source/sdr/primitive2d/sdrcaptionprimitive2d.cxx177
-rw-r--r--svx/source/sdr/primitive2d/sdrconnectorprimitive2d.cxx124
-rw-r--r--svx/source/sdr/primitive2d/sdrcustomshapeprimitive2d.cxx130
-rw-r--r--svx/source/sdr/primitive2d/sdrdecompositiontools.cxx486
-rw-r--r--svx/source/sdr/primitive2d/sdrellipseprimitive2d.cxx278
-rw-r--r--svx/source/sdr/primitive2d/sdrgrafprimitive2d.cxx177
-rw-r--r--svx/source/sdr/primitive2d/sdrmeasureprimitive2d.cxx510
-rw-r--r--svx/source/sdr/primitive2d/sdrole2primitive2d.cxx190
-rw-r--r--svx/source/sdr/primitive2d/sdrolecontentprimitive2d.cxx201
-rw-r--r--svx/source/sdr/primitive2d/sdrpathprimitive2d.cxx147
-rw-r--r--svx/source/sdr/primitive2d/sdrprimitivetools.cxx176
-rw-r--r--svx/source/sdr/primitive2d/sdrrectangleprimitive2d.cxx162
-rw-r--r--svx/source/sdr/primitive2d/sdrtextprimitive2d.cxx497
-rw-r--r--svx/source/sdr/primitive3d/makefile.mk42
-rw-r--r--svx/source/sdr/primitive3d/sdrattributecreator3d.cxx158
-rw-r--r--svx/source/sdr/properties/attributeproperties.cxx628
-rw-r--r--svx/source/sdr/properties/captionproperties.cxx120
-rw-r--r--svx/source/sdr/properties/circleproperties.cxx157
-rw-r--r--svx/source/sdr/properties/connectorproperties.cxx107
-rw-r--r--svx/source/sdr/properties/customshapeproperties.cxx239
-rw-r--r--svx/source/sdr/properties/defaultproperties.cxx237
-rw-r--r--svx/source/sdr/properties/e3dcompoundproperties.cxx165
-rw-r--r--svx/source/sdr/properties/e3dextrudeproperties.cxx90
-rw-r--r--svx/source/sdr/properties/e3dlatheproperties.cxx100
-rw-r--r--svx/source/sdr/properties/e3dproperties.cxx106
-rw-r--r--svx/source/sdr/properties/e3dsceneproperties.cxx334
-rw-r--r--svx/source/sdr/properties/e3dsphereproperties.cxx85
-rw-r--r--svx/source/sdr/properties/emptyproperties.cxx153
-rw-r--r--svx/source/sdr/properties/graphicproperties.cxx143
-rw-r--r--svx/source/sdr/properties/groupproperties.cxx298
-rw-r--r--svx/source/sdr/properties/itemsettools.cxx146
-rw-r--r--svx/source/sdr/properties/makefile.mk65
-rw-r--r--svx/source/sdr/properties/measureproperties.cxx141
-rw-r--r--svx/source/sdr/properties/oleproperties.cxx80
-rw-r--r--svx/source/sdr/properties/pageproperties.cxx101
-rw-r--r--svx/source/sdr/properties/properties.cxx189
-rw-r--r--svx/source/sdr/properties/rectangleproperties.cxx84
-rw-r--r--svx/source/sdr/properties/textproperties.cxx638
-rw-r--r--svx/source/smarttags/SmartTagMgr.cxx552
-rw-r--r--svx/source/smarttags/makefile.mk48
-rw-r--r--svx/source/src/app.hrc445
-rw-r--r--svx/source/src/app.src86
-rw-r--r--svx/source/src/hidgen.hrc33
-rw-r--r--svx/source/src/makefile.mk57
-rw-r--r--svx/source/stbctrls/insctrl.cxx132
-rw-r--r--svx/source/stbctrls/makefile.mk75
-rw-r--r--svx/source/stbctrls/modctrl.cxx98
-rw-r--r--svx/source/stbctrls/pszctrl.cxx436
-rw-r--r--svx/source/stbctrls/selctrl.cxx154
-rw-r--r--svx/source/stbctrls/stbctrls.h55
-rw-r--r--svx/source/stbctrls/stbctrls.src327
-rw-r--r--svx/source/stbctrls/xmlsecctrl.cxx212
-rw-r--r--svx/source/stbctrls/zoomctrl.cxx223
-rw-r--r--svx/source/stbctrls/zoomsliderctrl.cxx448
-rw-r--r--svx/source/svdraw/ActionDescriptionProvider.cxx82
-rw-r--r--svx/source/svdraw/clonelist.cxx134
-rw-r--r--svx/source/svdraw/gradtrns.cxx538
-rw-r--r--svx/source/svdraw/gradtrns.hxx64
-rw-r--r--svx/source/svdraw/impgrfll.cxx255
-rw-r--r--svx/source/svdraw/makefile.mk124
-rw-r--r--svx/source/svdraw/polypolygoneditor.cxx190
-rw-r--r--svx/source/svdraw/sdrcomment.cxx98
-rw-r--r--svx/source/svdraw/sdrhittesthelper.cxx173
-rw-r--r--svx/source/svdraw/sdrmasterpagedescriptor.cxx142
-rw-r--r--svx/source/svdraw/sdrpagewindow.cxx464
-rw-r--r--svx/source/svdraw/sdrpaintwindow.cxx312
-rw-r--r--svx/source/svdraw/selectioncontroller.cxx114
-rw-r--r--svx/source/svdraw/svdattr.cxx2429
-rw-r--r--svx/source/svdraw/svdcrtv.cxx964
-rw-r--r--svx/source/svdraw/svddrag.cxx153
-rw-r--r--svx/source/svdraw/svddrgm1.hxx277
-rw-r--r--svx/source/svdraw/svddrgmt.cxx3652
-rw-r--r--svx/source/svdraw/svddrgv.cxx1006
-rw-r--r--svx/source/svdraw/svdedtv.cxx1086
-rw-r--r--svx/source/svdraw/svdedtv1.cxx1784
-rw-r--r--svx/source/svdraw/svdedtv2.cxx2139
-rw-r--r--svx/source/svdraw/svdedxv.cxx2146
-rw-r--r--svx/source/svdraw/svdetc.cxx1118
-rw-r--r--svx/source/svdraw/svdfmtf.cxx1028
-rw-r--r--svx/source/svdraw/svdfmtf.hxx166
-rw-r--r--svx/source/svdraw/svdglev.cxx422
-rw-r--r--svx/source/svdraw/svdglue.cxx450
-rw-r--r--svx/source/svdraw/svdhdl.cxx2417
-rw-r--r--svx/source/svdraw/svdhlpln.cxx149
-rw-r--r--svx/source/svdraw/svdibrow.cxx1299
-rw-r--r--svx/source/svdraw/svditer.cxx110
-rw-r--r--svx/source/svdraw/svditext.hxx37
-rw-r--r--svx/source/svdraw/svdlayer.cxx458
-rw-r--r--svx/source/svdraw/svdmark.cxx1040
-rw-r--r--svx/source/svdraw/svdmodel.cxx2251
-rw-r--r--svx/source/svdraw/svdmrkv.cxx2177
-rw-r--r--svx/source/svdraw/svdmrkv1.cxx724
-rw-r--r--svx/source/svdraw/svdoashp.cxx3504
-rw-r--r--svx/source/svdraw/svdoattr.cxx180
-rw-r--r--svx/source/svdraw/svdobj.cxx3310
-rw-r--r--svx/source/svdraw/svdocapt.cxx851
-rw-r--r--svx/source/svdraw/svdocirc.cxx1171
-rw-r--r--svx/source/svdraw/svdoedge.cxx2497
-rw-r--r--svx/source/svdraw/svdograf.cxx1282
-rw-r--r--svx/source/svdraw/svdogrp.cxx801
-rw-r--r--svx/source/svdraw/svdomeas.cxx1494
-rw-r--r--svx/source/svdraw/svdomedia.cxx285
-rw-r--r--svx/source/svdraw/svdoole2.cxx2242
-rw-r--r--svx/source/svdraw/svdopage.cxx195
-rw-r--r--svx/source/svdraw/svdopath.cxx3118
-rw-r--r--svx/source/svdraw/svdorect.cxx620
-rw-r--r--svx/source/svdraw/svdotext.cxx2132
-rw-r--r--svx/source/svdraw/svdotextdecomposition.cxx1258
-rw-r--r--svx/source/svdraw/svdotextpathdecomposition.cxx824
-rw-r--r--svx/source/svdraw/svdotxat.cxx462
-rw-r--r--svx/source/svdraw/svdotxdr.cxx285
-rw-r--r--svx/source/svdraw/svdotxed.cxx350
-rw-r--r--svx/source/svdraw/svdotxfl.cxx58
-rw-r--r--svx/source/svdraw/svdotxln.cxx350
-rw-r--r--svx/source/svdraw/svdotxtr.cxx558
-rw-r--r--svx/source/svdraw/svdouno.cxx665
-rw-r--r--svx/source/svdraw/svdoutl.cxx132
-rw-r--r--svx/source/svdraw/svdoutlinercache.cxx115
-rw-r--r--svx/source/svdraw/svdovirt.cxx659
-rw-r--r--svx/source/svdraw/svdpage.cxx2032
-rw-r--r--svx/source/svdraw/svdpagv.cxx1122
-rwxr-xr-xsvx/source/svdraw/svdpntv.cxx1540
-rw-r--r--svx/source/svdraw/svdpoev.cxx745
-rw-r--r--svx/source/svdraw/svdsnpv.cxx730
-rw-r--r--svx/source/svdraw/svdstr.src2935
-rw-r--r--svx/source/svdraw/svdtext.cxx224
-rw-r--r--svx/source/svdraw/svdtrans.cxx1271
-rw-r--r--svx/source/svdraw/svdundo.cxx1871
-rw-r--r--svx/source/svdraw/svdview.cxx1606
-rw-r--r--svx/source/svdraw/svdviter.cxx351
-rw-r--r--svx/source/svdraw/svdxcgv.cxx894
-rw-r--r--svx/source/table/accessiblecell.cxx584
-rw-r--r--svx/source/table/accessiblecell.hxx149
-rw-r--r--svx/source/table/accessibletableshape.cxx723
-rw-r--r--svx/source/table/cell.cxx1809
-rw-r--r--svx/source/table/cell.hxx244
-rw-r--r--svx/source/table/cellcursor.cxx590
-rw-r--r--svx/source/table/cellcursor.hxx83
-rw-r--r--svx/source/table/celleditsource.cxx1056
-rw-r--r--svx/source/table/celleditsource.hxx89
-rw-r--r--svx/source/table/cellrange.cxx132
-rw-r--r--svx/source/table/cellrange.hxx72
-rw-r--r--svx/source/table/celltypes.hxx109
-rw-r--r--svx/source/table/makefile.mk80
-rw-r--r--svx/source/table/propertyset.cxx259
-rw-r--r--svx/source/table/propertyset.hxx109
-rw-r--r--svx/source/table/svdotable.cxx2820
-rw-r--r--svx/source/table/table.src34
-rw-r--r--svx/source/table/tablecolumn.cxx305
-rw-r--r--svx/source/table/tablecolumn.hxx88
-rw-r--r--svx/source/table/tablecolumns.cxx141
-rw-r--r--svx/source/table/tablecolumns.hxx71
-rw-r--r--svx/source/table/tablecontroller.cxx2618
-rw-r--r--svx/source/table/tablecontroller.hxx170
-rw-r--r--svx/source/table/tabledesign.cxx808
-rw-r--r--svx/source/table/tablehandles.cxx314
-rw-r--r--svx/source/table/tablehandles.hxx96
-rw-r--r--svx/source/table/tablelayouter.cxx1300
-rw-r--r--svx/source/table/tablelayouter.hxx178
-rw-r--r--svx/source/table/tablemodel.cxx1258
-rw-r--r--svx/source/table/tablemodel.hxx225
-rw-r--r--svx/source/table/tablerow.cxx381
-rw-r--r--svx/source/table/tablerow.hxx92
-rw-r--r--svx/source/table/tablerows.cxx136
-rw-r--r--svx/source/table/tablerows.hxx71
-rw-r--r--svx/source/table/tablertfexporter.cxx284
-rw-r--r--svx/source/table/tablertfimporter.cxx447
-rw-r--r--svx/source/table/tableundo.cxx559
-rw-r--r--svx/source/table/tableundo.hxx259
-rw-r--r--svx/source/table/viewcontactoftableobj.cxx736
-rw-r--r--svx/source/table/viewcontactoftableobj.hxx72
-rw-r--r--svx/source/tbxctrls/colorwindow.hxx48
-rw-r--r--svx/source/tbxctrls/colrctrl.cxx661
-rw-r--r--svx/source/tbxctrls/colrctrl.src84
-rw-r--r--svx/source/tbxctrls/extrusioncontrols.cxx1051
-rw-r--r--svx/source/tbxctrls/extrusioncontrols.hrc120
-rw-r--r--svx/source/tbxctrls/extrusioncontrols.hxx260
-rw-r--r--svx/source/tbxctrls/extrusioncontrols.src796
-rw-r--r--svx/source/tbxctrls/fillctrl.cxx846
-rw-r--r--svx/source/tbxctrls/fontworkgallery.cxx818
-rw-r--r--svx/source/tbxctrls/fontworkgallery.src323
-rw-r--r--svx/source/tbxctrls/formatpaintbrushctrl.cxx120
-rw-r--r--svx/source/tbxctrls/grafctrl.cxx1291
-rw-r--r--svx/source/tbxctrls/grafctrl.hrc28
-rw-r--r--svx/source/tbxctrls/grafctrl.src192
-rw-r--r--svx/source/tbxctrls/itemwin.cxx825
-rw-r--r--svx/source/tbxctrls/layctrl.cxx899
-rw-r--r--svx/source/tbxctrls/lboxctrl.cxx351
-rw-r--r--svx/source/tbxctrls/lboxctrl.hrc30
-rw-r--r--svx/source/tbxctrls/lboxctrl.src76
-rw-r--r--svx/source/tbxctrls/linectrl.cxx784
-rw-r--r--svx/source/tbxctrls/linectrl.src34
-rw-r--r--svx/source/tbxctrls/makefile.mk84
-rw-r--r--svx/source/tbxctrls/subtoolboxcontrol.cxx84
-rw-r--r--svx/source/tbxctrls/tbcontrl.cxx2858
-rw-r--r--svx/source/tbxctrls/tbcontrl.src189
-rw-r--r--svx/source/tbxctrls/tbunocontroller.cxx429
-rw-r--r--svx/source/tbxctrls/tbunosearchcontrollers.cxx873
-rw-r--r--svx/source/tbxctrls/tbunosearchcontrollers.src33
-rw-r--r--svx/source/tbxctrls/tbxalign.cxx141
-rw-r--r--svx/source/tbxctrls/tbxcolor.cxx118
-rw-r--r--svx/source/tbxctrls/tbxcolorupdate.cxx208
-rw-r--r--svx/source/tbxctrls/tbxdraw.hrc31
-rw-r--r--svx/source/tbxctrls/tbxdraw.src265
-rw-r--r--svx/source/tbxctrls/tbxdrctl.cxx120
-rw-r--r--svx/source/tbxctrls/verttexttbxctrl.cxx123
-rw-r--r--svx/source/toolbars/extrusionbar.cxx1374
-rw-r--r--svx/source/toolbars/extrusionbar.src115
-rw-r--r--svx/source/toolbars/fontworkbar.cxx641
-rw-r--r--svx/source/toolbars/fontworkbar.src87
-rw-r--r--svx/source/toolbars/makefile.mk56
-rw-r--r--svx/source/unodialogs/inc/buttongroup.hrc65
-rw-r--r--svx/source/unodialogs/textconversiondlgs/chinese_dictionarydialog.cxx895
-rw-r--r--svx/source/unodialogs/textconversiondlgs/chinese_dictionarydialog.hrc53
-rw-r--r--svx/source/unodialogs/textconversiondlgs/chinese_dictionarydialog.hxx201
-rw-r--r--svx/source/unodialogs/textconversiondlgs/chinese_dictionarydialog.src184
-rw-r--r--svx/source/unodialogs/textconversiondlgs/chinese_direction_ids.hrc34
-rw-r--r--svx/source/unodialogs/textconversiondlgs/chinese_direction_tmpl.hrc51
-rw-r--r--svx/source/unodialogs/textconversiondlgs/chinese_translation_unodialog.cxx285
-rw-r--r--svx/source/unodialogs/textconversiondlgs/chinese_translation_unodialog.hxx143
-rw-r--r--svx/source/unodialogs/textconversiondlgs/chinese_translationdialog.cxx201
-rw-r--r--svx/source/unodialogs/textconversiondlgs/chinese_translationdialog.hrc44
-rw-r--r--svx/source/unodialogs/textconversiondlgs/chinese_translationdialog.hxx90
-rw-r--r--svx/source/unodialogs/textconversiondlgs/chinese_translationdialog.src117
-rw-r--r--svx/source/unodialogs/textconversiondlgs/makefile.mk90
-rw-r--r--svx/source/unodialogs/textconversiondlgs/resid.cxx52
-rw-r--r--svx/source/unodialogs/textconversiondlgs/resid.hxx50
-rw-r--r--svx/source/unodialogs/textconversiondlgs/resids.hrc33
-rw-r--r--svx/source/unodialogs/textconversiondlgs/services.cxx70
-rw-r--r--svx/source/unodraw/UnoGraphicExporter.cxx1284
-rw-r--r--svx/source/unodraw/UnoGraphicExporter.hxx40
-rw-r--r--svx/source/unodraw/UnoNameItemTable.cxx341
-rw-r--r--svx/source/unodraw/UnoNameItemTable.hxx91
-rw-r--r--svx/source/unodraw/UnoNamespaceMap.cxx314
-rw-r--r--svx/source/unodraw/XPropertyTable.cxx743
-rw-r--r--svx/source/unodraw/gluepts.cxx548
-rw-r--r--svx/source/unodraw/makefile.mk83
-rw-r--r--svx/source/unodraw/recoveryui.cxx399
-rw-r--r--svx/source/unodraw/shapeimpl.hxx129
-rw-r--r--svx/source/unodraw/shapepropertynotifier.cxx207
-rw-r--r--svx/source/unodraw/tableshape.cxx194
-rw-r--r--svx/source/unodraw/unobtabl.cxx122
-rw-r--r--svx/source/unodraw/unoctabl.cxx447
-rw-r--r--svx/source/unodraw/unodraw.src42
-rw-r--r--svx/source/unodraw/unodtabl.cxx108
-rw-r--r--svx/source/unodraw/unogtabl.cxx107
-rw-r--r--svx/source/unodraw/unohtabl.cxx105
-rw-r--r--svx/source/unodraw/unomlstr.cxx72
-rw-r--r--svx/source/unodraw/unomod.cxx778
-rw-r--r--svx/source/unodraw/unomtabl.cxx482
-rw-r--r--svx/source/unodraw/unopage.cxx1008
-rw-r--r--svx/source/unodraw/unopool.cxx430
-rw-r--r--svx/source/unodraw/unoprov.cxx1426
-rw-r--r--svx/source/unodraw/unoshap2.cxx2148
-rw-r--r--svx/source/unodraw/unoshap3.cxx1210
-rw-r--r--svx/source/unodraw/unoshap4.cxx996
-rw-r--r--svx/source/unodraw/unoshape.cxx4660
-rw-r--r--svx/source/unodraw/unoshcol.cxx258
-rw-r--r--svx/source/unodraw/unoshtxt.cxx1149
-rw-r--r--svx/source/unodraw/unottabl.cxx107
-rwxr-xr-xsvx/source/unogallery/makefile.mk48
-rw-r--r--svx/source/unogallery/unogalitem.cxx485
-rw-r--r--svx/source/unogallery/unogalitem.hxx126
-rw-r--r--svx/source/unogallery/unogaltheme.cxx433
-rw-r--r--svx/source/unogallery/unogaltheme.hxx110
-rw-r--r--svx/source/unogallery/unogalthemeprovider.cxx316
-rw-r--r--svx/source/xml/makefile.mk49
-rw-r--r--svx/source/xml/xmleohlp.cxx819
-rw-r--r--svx/source/xml/xmlexport.cxx283
-rw-r--r--svx/source/xml/xmlgrhlp.cxx1154
-rw-r--r--svx/source/xml/xmlxtexp.cxx492
-rw-r--r--svx/source/xml/xmlxtimp.cxx488
-rw-r--r--svx/source/xoutdev/_xoutbmp.cxx768
-rw-r--r--svx/source/xoutdev/_xpoly.cxx2135
-rw-r--r--svx/source/xoutdev/makefile.mk59
-rw-r--r--svx/source/xoutdev/xattr.cxx5778
-rw-r--r--svx/source/xoutdev/xattr2.cxx1712
-rw-r--r--svx/source/xoutdev/xattrbmp.cxx894
-rw-r--r--svx/source/xoutdev/xexch.cxx204
-rw-r--r--svx/source/xoutdev/xpool.cxx235
-rw-r--r--svx/source/xoutdev/xtabbtmp.cxx294
-rw-r--r--svx/source/xoutdev/xtabcolr.cxx548
-rw-r--r--svx/source/xoutdev/xtabdash.cxx378
-rw-r--r--svx/source/xoutdev/xtabgrdt.cxx372
-rw-r--r--svx/source/xoutdev/xtabhtch.cxx374
-rw-r--r--svx/source/xoutdev/xtable.cxx511
-rw-r--r--svx/source/xoutdev/xtablend.cxx395
-rw-r--r--svx/uiconfig/layout/delzip1
-rw-r--r--svx/uiconfig/layout/layout.mk33
-rw-r--r--svx/uiconfig/layout/makefile.mk46
-rw-r--r--svx/uiconfig/layout/zoom.xml59
-rw-r--r--svx/util/cui.dxp1
-rw-r--r--svx/util/cui.flt139
-rw-r--r--svx/util/dl.flt139
-rw-r--r--svx/util/gal.dxp21
-rw-r--r--svx/util/hidother.hrc27
-rw-r--r--svx/util/hidother.src79
-rw-r--r--svx/util/makefile.mk198
-rw-r--r--svx/util/makefile.pmk43
-rw-r--r--svx/util/svx.dxp3
-rw-r--r--svx/util/svx.flt134
-rw-r--r--svx/util/svxpch.cxx69
-rw-r--r--svx/workben/edittest.cxx1795
-rw-r--r--svx/workben/makefile.mk72
-rw-r--r--svx/workben/msview/makefile.mk72
-rw-r--r--svx/workben/msview/msview.cxx1224
-rw-r--r--svx/workben/msview/msview.xml294
-rw-r--r--svx/workben/msview/xmlconfig.cxx575
-rw-r--r--svx/workben/msview/xmlconfig.hxx108
-rw-r--r--svx/xml/AccessibleControlShape.xml40
-rw-r--r--svx/xml/AccessibleEditableTextPara.xml37
-rw-r--r--svx/xml/AccessibleGraphicShape.xml41
-rw-r--r--svx/xml/AccessibleImageBullet.xml34
-rw-r--r--svx/xml/AccessibleOLEShape.xml41
-rw-r--r--svx/xml/AccessibleShape.xml39
-rw-r--r--svx/xml/SvxDrawPage.xml16
-rw-r--r--svx/xml/SvxGraphCtrlAccessibleContext.xml19
-rw-r--r--svx/xml/SvxGraphicExporter.xml16
-rw-r--r--svx/xml/SvxGraphicObject.xml16
-rw-r--r--svx/xml/SvxShape.xml16
-rw-r--r--svx/xml/SvxShapeCircle.xml16
-rw-r--r--svx/xml/SvxShapeCollection.xml16
-rw-r--r--svx/xml/SvxShapeConnector.xml16
-rw-r--r--svx/xml/SvxShapeControl.xml16
-rw-r--r--svx/xml/SvxShapeDimensioning.xml16
-rw-r--r--svx/xml/SvxShapeGroup.xml16
-rw-r--r--svx/xml/SvxShapePolyPolygon.xml16
-rw-r--r--svx/xml/SvxShapePolyPolygonBezier.xml16
-rw-r--r--svx/xml/SvxUnoNumberingRules.xml16
-rw-r--r--svx/xml/SvxUnoText.xml16
-rw-r--r--svx/xml/SvxUnoTextContent.xml16
-rw-r--r--svx/xml/SvxUnoTextContentEnum.xml16
-rw-r--r--svx/xml/SvxUnoTextCursor.xml16
-rw-r--r--svx/xml/SvxUnoTextField.xml16
-rw-r--r--svx/xml/SvxUnoTextRange.xml16
-rw-r--r--svx/xml/SvxUnoTextRangeEnumeration.xml16
-rw-r--r--sw/inc/AnnotationWin.hxx83
-rw-r--r--sw/inc/EnhancedPDFExportHelper.hxx256
-rw-r--r--sw/inc/HandleAnchorNodeChg.hxx81
-rw-r--r--sw/inc/IDocumentChartDataProviderAccess.hxx69
-rw-r--r--sw/inc/IDocumentContentOperations.hxx203
-rwxr-xr-xsw/inc/IDocumentDeviceAccess.hxx145
-rw-r--r--sw/inc/IDocumentDrawModelAccess.hxx111
-rw-r--r--sw/inc/IDocumentExternalData.hxx69
-rw-r--r--sw/inc/IDocumentFieldsAccess.hxx191
-rw-r--r--sw/inc/IDocumentLayoutAccess.hxx78
-rw-r--r--sw/inc/IDocumentLineNumberAccess.hxx51
-rw-r--r--sw/inc/IDocumentLinksAdministration.hxx91
-rw-r--r--sw/inc/IDocumentListItems.hxx61
-rw-r--r--sw/inc/IDocumentListsAccess.hxx57
-rw-r--r--sw/inc/IDocumentMarkAccess.hxx251
-rw-r--r--sw/inc/IDocumentOutlineNodes.hxx57
-rw-r--r--sw/inc/IDocumentRedlineAccess.hxx259
-rw-r--r--sw/inc/IDocumentSettingAccess.hxx212
-rw-r--r--sw/inc/IDocumentState.hxx87
-rw-r--r--sw/inc/IDocumentStatistics.hxx60
-rw-r--r--sw/inc/IDocumentStylePoolAccess.hxx87
-rw-r--r--sw/inc/IDocumentTimerAccess.hxx60
-rw-r--r--sw/inc/IDocumentUndoRedo.hxx193
-rw-r--r--sw/inc/IGrammarContact.hxx87
-rw-r--r--sw/inc/IInterface.hxx67
-rw-r--r--sw/inc/IMark.hxx119
-rw-r--r--sw/inc/PostItMgr.hxx307
-rw-r--r--sw/inc/RefreshListenerContainer.hxx38
-rw-r--r--sw/inc/SidebarWin.hxx274
-rw-r--r--sw/inc/SidebarWindowsTypes.hxx53
-rw-r--r--sw/inc/SwAppletImpl.hxx79
-rw-r--r--sw/inc/SwCapObjType.hxx35
-rw-r--r--sw/inc/SwGetPoolIdFromName.hxx44
-rw-r--r--sw/inc/SwNodeNum.hxx118
-rw-r--r--sw/inc/SwNumberTree.hxx767
-rw-r--r--sw/inc/SwNumberTreeTypes.hxx39
-rw-r--r--sw/inc/SwRewriter.hxx50
-rw-r--r--sw/inc/SwSmartTagMgr.hxx65
-rw-r--r--sw/inc/SwStyleNameMapper.hxx204
-rw-r--r--sw/inc/SwUndoField.hxx85
-rw-r--r--sw/inc/SwUndoFmt.hxx250
-rw-r--r--sw/inc/SwUndoPageDesc.hxx90
-rw-r--r--sw/inc/SwUndoTOXChange.hxx47
-rw-r--r--sw/inc/SwXMLSectionList.hxx89
-rw-r--r--sw/inc/TextCursorHelper.hxx54
-rw-r--r--sw/inc/access.hrc62
-rw-r--r--sw/inc/accessibilityoptions.hxx53
-rw-r--r--sw/inc/accmap.hxx329
-rw-r--r--sw/inc/acmplwrd.hxx73
-rw-r--r--sw/inc/anchoreddrawobject.hxx223
-rw-r--r--sw/inc/anchoredobject.hxx642
-rw-r--r--sw/inc/authfld.hxx203
-rw-r--r--sw/inc/authratr.hxx54
-rw-r--r--sw/inc/bparr.hxx126
-rw-r--r--sw/inc/breakit.hxx122
-rw-r--r--sw/inc/calbck.hxx250
-rw-r--r--sw/inc/calc.hxx241
-rw-r--r--sw/inc/ccoll.hxx100
-rw-r--r--sw/inc/cellatr.hxx129
-rw-r--r--sw/inc/cellfml.hxx164
-rw-r--r--sw/inc/charatr.hxx178
-rw-r--r--sw/inc/charfmt.hxx61
-rw-r--r--sw/inc/chcmprse.hxx40
-rw-r--r--sw/inc/checkit.hxx54
-rw-r--r--sw/inc/chpfld.hxx102
-rw-r--r--sw/inc/chrdlg.hrc60
-rw-r--r--sw/inc/cmdid.h1310
-rw-r--r--sw/inc/colwd.hxx62
-rw-r--r--sw/inc/comcore.hrc123
-rw-r--r--sw/inc/crsrsh.hxx952
-rw-r--r--sw/inc/crsskip.hxx42
-rw-r--r--sw/inc/crstate.hxx217
-rw-r--r--sw/inc/cshtyp.hxx119
-rw-r--r--sw/inc/dbfld.hxx338
-rw-r--r--sw/inc/dbgoutsw.hxx129
-rw-r--r--sw/inc/dbmgr.hxx399
-rw-r--r--sw/inc/dbui.hrc126
-rw-r--r--sw/inc/dcontact.hxx561
-rw-r--r--sw/inc/ddefld.hxx117
-rw-r--r--sw/inc/dialog.hrc89
-rw-r--r--sw/inc/dlelstnr.hxx95
-rw-r--r--sw/inc/dobjfac.hxx47
-rw-r--r--sw/inc/doc.hxx2223
-rw-r--r--sw/inc/docary.hxx132
-rw-r--r--sw/inc/docfac.hxx48
-rwxr-xr-xsw/inc/dochdl.hrc54
-rw-r--r--sw/inc/docsh.hxx320
-rw-r--r--sw/inc/docstat.hxx52
-rw-r--r--sw/inc/docstyle.hxx245
-rw-r--r--sw/inc/docufld.hxx836
-rw-r--r--sw/inc/dpage.hxx64
-rw-r--r--sw/inc/drawdoc.hxx65
-rw-r--r--sw/inc/edglbldc.hxx77
-rw-r--r--sw/inc/edimp.hxx83
-rw-r--r--sw/inc/editsh.hxx995
-rw-r--r--sw/inc/envelp.hrc97
-rw-r--r--sw/inc/errhdl.hxx76
-rw-r--r--sw/inc/error.h50
-rw-r--r--sw/inc/expfld.hxx436
-rw-r--r--sw/inc/extinput.hxx59
-rw-r--r--sw/inc/fchrfmt.hxx83
-rw-r--r--sw/inc/fesh.hxx786
-rw-r--r--sw/inc/fldbas.hxx465
-rw-r--r--sw/inc/flddat.hxx148
-rw-r--r--sw/inc/flddropdown.hxx279
-rw-r--r--sw/inc/fldinit.hxx38
-rw-r--r--sw/inc/fldui.hrc292
-rw-r--r--sw/inc/fldupde.hxx39
-rw-r--r--sw/inc/flyenum.hxx55
-rw-r--r--sw/inc/flypos.hxx60
-rw-r--r--sw/inc/fmtanchr.hxx92
-rw-r--r--sw/inc/fmtautofmt.hxx75
-rw-r--r--sw/inc/fmtclbl.hxx54
-rw-r--r--sw/inc/fmtclds.hxx179
-rw-r--r--sw/inc/fmtcnct.hxx87
-rw-r--r--sw/inc/fmtcntnt.hxx66
-rw-r--r--sw/inc/fmtcol.hxx304
-rw-r--r--sw/inc/fmtcolfunc.hxx89
-rw-r--r--sw/inc/fmteiro.hxx60
-rw-r--r--sw/inc/fmtflcnt.hxx64
-rw-r--r--sw/inc/fmtfld.hxx119
-rw-r--r--sw/inc/fmtfollowtextflow.hxx66
-rw-r--r--sw/inc/fmtfordr.hxx72
-rw-r--r--sw/inc/fmtfsize.hxx113
-rw-r--r--sw/inc/fmtftn.hxx81
-rw-r--r--sw/inc/fmtftntx.hxx137
-rw-r--r--sw/inc/fmthdft.hxx114
-rw-r--r--sw/inc/fmtinfmt.hxx110
-rw-r--r--sw/inc/fmtline.hxx71
-rw-r--r--sw/inc/fmtlsplt.hxx58
-rwxr-xr-xsw/inc/fmtmeta.hxx229
-rw-r--r--sw/inc/fmtornt.hxx143
-rw-r--r--sw/inc/fmtpdsc.hxx99
-rw-r--r--sw/inc/fmtrfmrk.hxx64
-rw-r--r--sw/inc/fmtrowsplt.hxx58
-rw-r--r--sw/inc/fmtruby.hxx91
-rw-r--r--sw/inc/fmtsrnd.hxx93
-rw-r--r--sw/inc/fmtsrndenum.hxx41
-rw-r--r--sw/inc/fmtui.hrc89
-rw-r--r--sw/inc/fmturl.hxx92
-rw-r--r--sw/inc/fmtwrapinfluenceonobjpos.hxx77
-rw-r--r--sw/inc/format.hxx358
-rw-r--r--sw/inc/frmatr.hxx99
-rw-r--r--sw/inc/frmfmt.hxx323
-rw-r--r--sw/inc/ftnidx.hxx79
-rw-r--r--sw/inc/ftninfo.hxx117
-rw-r--r--sw/inc/globals.hrc290
-rw-r--r--sw/inc/globdoc.hxx53
-rw-r--r--sw/inc/grfatr.hxx370
-rw-r--r--sw/inc/helpid.h983
-rw-r--r--sw/inc/hfspacingitem.hxx59
-rw-r--r--sw/inc/hhcwrp.hxx121
-rw-r--r--sw/inc/hintids.hxx486
-rw-r--r--sw/inc/hints.hxx284
-rw-r--r--sw/inc/htmltbl.hxx491
-rw-r--r--sw/inc/index.hrc66
-rw-r--r--sw/inc/index.hxx217
-rw-r--r--sw/inc/inetfld.hxx109
-rw-r--r--sw/inc/init.hxx48
-rw-r--r--sw/inc/io.hxx176
-rw-r--r--sw/inc/iodetect.hxx127
-rw-r--r--sw/inc/istyleaccess.hxx69
-rw-r--r--sw/inc/itabenum.hxx54
-rw-r--r--sw/inc/lineinfo.hxx109
-rw-r--r--sw/inc/linkenum.hxx39
-rw-r--r--sw/inc/list.hxx74
-rw-r--r--sw/inc/listfunc.hxx38
-rw-r--r--sw/inc/makefile.mk49
-rw-r--r--sw/inc/mdiexp.hxx78
-rw-r--r--sw/inc/modcfg.hxx343
-rw-r--r--sw/inc/modeltoviewhelper.hxx111
-rw-r--r--sw/inc/ndarr.hxx352
-rw-r--r--sw/inc/ndgrf.hxx257
-rw-r--r--sw/inc/ndhints.hxx223
-rw-r--r--sw/inc/ndindex.hxx252
-rw-r--r--sw/inc/ndnotxt.hxx121
-rw-r--r--sw/inc/ndole.hxx171
-rw-r--r--sw/inc/ndtxt.hxx917
-rw-r--r--sw/inc/ndtyp.hxx69
-rw-r--r--sw/inc/newhdl.hxx73
-rw-r--r--sw/inc/node.hxx761
-rw-r--r--sw/inc/numrule.hxx374
-rw-r--r--sw/inc/pagedesc.hxx347
-rw-r--r--sw/inc/pageiter.hxx53
-rw-r--r--sw/inc/pagepreviewlayout.hxx624
-rw-r--r--sw/inc/pam.hxx280
-rw-r--r--sw/inc/paratr.hxx278
-rw-r--r--sw/inc/pausethreadstarting.hxx48
-rw-r--r--sw/inc/pch/precompiled_sw.cxx29
-rw-r--r--sw/inc/pch/precompiled_sw.hxx1003
-rw-r--r--sw/inc/poolfmt.awk73
-rw-r--r--sw/inc/poolfmt.hrc281
-rw-r--r--sw/inc/poolfmt.hxx443
-rw-r--r--sw/inc/postithelper.hxx159
-rwxr-xr-xsw/inc/printdata.hxx323
-rw-r--r--sw/inc/pvprtdat.hxx79
-rw-r--r--sw/inc/rcid.hrc271
-rw-r--r--sw/inc/redline.hxx314
-rw-r--r--sw/inc/redlnaut.hxx54
-rw-r--r--sw/inc/reffld.hxx162
-rw-r--r--sw/inc/ring.hxx52
-rw-r--r--sw/inc/rolbck.hxx452
-rw-r--r--sw/inc/rubylist.hxx54
-rw-r--r--sw/inc/section.hxx389
-rw-r--r--sw/inc/shellid.hxx73
-rw-r--r--sw/inc/shellio.hxx678
-rw-r--r--sw/inc/shellres.hxx120
-rw-r--r--sw/inc/sortopt.hxx69
-rw-r--r--sw/inc/splargs.hxx180
-rw-r--r--sw/inc/statstr.hrc54
-rw-r--r--sw/inc/stringhash.hxx104
-rw-r--r--sw/inc/sw.mk40
-rw-r--r--sw/inc/sw_primitivetypes2d.hxx46
-rw-r--r--sw/inc/swabstdlg.hxx498
-rw-r--r--sw/inc/swacorr.hxx59
-rw-r--r--sw/inc/swatrset.hxx353
-rw-r--r--sw/inc/swbaslnk.hxx95
-rw-r--r--sw/inc/swcalwrp.hxx55
-rw-r--r--sw/inc/swcli.hxx58
-rw-r--r--sw/inc/swcrsr.hxx312
-rw-r--r--sw/inc/swdbdata.hxx49
-rw-r--r--sw/inc/swdbtoolsclient.hxx76
-rw-r--r--sw/inc/swddetbl.hxx61
-rw-r--r--sw/inc/swdll.hxx69
-rw-r--r--sw/inc/swdllapi.h13
-rw-r--r--sw/inc/swerror.h112
-rw-r--r--sw/inc/swevent.hxx129
-rw-r--r--sw/inc/swfltopt.hxx44
-rw-r--r--sw/inc/swgstr.hxx148
-rw-r--r--sw/inc/swhints.hxx36
-rw-r--r--sw/inc/swmodule.hxx278
-rw-r--r--sw/inc/swpre.mk46
-rw-r--r--sw/inc/swprtopt.hxx102
-rw-r--r--sw/inc/swrect.hxx364
-rw-r--r--sw/inc/swregion.hxx57
-rw-r--r--sw/inc/swserv.hxx93
-rw-r--r--sw/inc/swstyle.h41
-rw-r--r--sw/inc/swtable.hxx490
-rw-r--r--sw/inc/swtblfmt.hxx99
-rw-r--r--sw/inc/swtypes.hxx338
-rw-r--r--sw/inc/swundo.hxx200
-rw-r--r--sw/inc/swunodef.hxx36
-rw-r--r--sw/inc/swunohelper.hxx81
-rw-r--r--sw/inc/swurl.hxx46
-rw-r--r--sw/inc/swwait.hxx44
-rw-r--r--sw/inc/tabcol.hxx107
-rw-r--r--sw/inc/tblafmt.hxx270
-rw-r--r--sw/inc/tblenum.hxx79
-rw-r--r--sw/inc/tblsel.hxx230
-rw-r--r--sw/inc/tgrditem.hxx120
-rw-r--r--sw/inc/tox.hxx793
-rw-r--r--sw/inc/toxe.hxx125
-rw-r--r--sw/inc/toxinit.hxx37
-rw-r--r--sw/inc/toxwrap.hxx77
-rw-r--r--sw/inc/txatbase.hxx244
-rw-r--r--sw/inc/txatritr.hxx99
-rw-r--r--sw/inc/txtatr.hxx118
-rw-r--r--sw/inc/txtflcnt.hxx68
-rw-r--r--sw/inc/txtfld.hxx81
-rw-r--r--sw/inc/txtftn.hxx81
-rw-r--r--sw/inc/txtinet.hxx81
-rw-r--r--sw/inc/txtrfmrk.hxx61
-rw-r--r--sw/inc/txttxmrk.hxx65
-rw-r--r--sw/inc/undobj.hxx1919
-rw-r--r--sw/inc/unoatxt.hxx306
-rw-r--r--sw/inc/unobaseclass.hxx174
-rw-r--r--sw/inc/unobookmark.hxx260
-rw-r--r--sw/inc/unochart.hxx433
-rw-r--r--sw/inc/unocoll.hxx581
-rw-r--r--sw/inc/unocore.hrc48
-rw-r--r--sw/inc/unocrsr.hxx122
-rw-r--r--sw/inc/unocrsrhelper.hxx218
-rw-r--r--sw/inc/unodraw.hxx353
-rw-r--r--sw/inc/unoevent.hxx118
-rw-r--r--sw/inc/unoevtlstnr.hxx58
-rw-r--r--sw/inc/unofield.hxx330
-rw-r--r--sw/inc/unoflatpara.hxx145
-rw-r--r--sw/inc/unofootnote.hxx229
-rw-r--r--sw/inc/unoframe.hxx379
-rw-r--r--sw/inc/unoidx.hxx375
-rw-r--r--sw/inc/unomailmerge.hxx206
-rw-r--r--sw/inc/unomap.hxx349
-rw-r--r--sw/inc/unomid.h157
-rw-r--r--sw/inc/unomod.hxx210
-rw-r--r--sw/inc/unoparaframeenum.hxx127
-rw-r--r--sw/inc/unoparagraph.hxx365
-rw-r--r--sw/inc/unoport.hxx325
-rw-r--r--sw/inc/unoprnms.hxx841
-rw-r--r--sw/inc/unoredline.hxx156
-rw-r--r--sw/inc/unoredlines.hxx105
-rw-r--r--sw/inc/unorefmark.hxx174
-rw-r--r--sw/inc/unosection.hxx255
-rw-r--r--sw/inc/unosett.hxx326
-rw-r--r--sw/inc/unosrch.hxx136
-rw-r--r--sw/inc/unostyle.hxx467
-rw-r--r--sw/inc/unotbl.hxx625
-rw-r--r--sw/inc/unotext.hxx346
-rw-r--r--sw/inc/unotextbodyhf.hxx210
-rw-r--r--sw/inc/unotextcursor.hxx347
-rw-r--r--sw/inc/unotextmarkup.hxx110
-rw-r--r--sw/inc/unotextrange.hxx338
-rwxr-xr-xsw/inc/unotxdoc.hxx615
-rw-r--r--sw/inc/usrfld.hxx132
-rwxr-xr-xsw/inc/viewopt.hxx615
-rw-r--r--sw/inc/viewsh.hxx636
-rw-r--r--sw/inc/viscrs.hxx223
-rw-r--r--sw/inc/wdocsh.hxx63
-rwxr-xr-xsw/prj/build.lst77
-rw-r--r--sw/prj/d.lst59
-rw-r--r--sw/qa/complex/accessibility/AccessibleRelationSet.java252
-rw-r--r--sw/qa/complex/accessibility/makefile.mk57
-rwxr-xr-xsw/qa/complex/checkColor/CheckChangeColor.java90
-rwxr-xr-xsw/qa/complex/checkColor/makefile.mk75
-rwxr-xr-xsw/qa/complex/indeterminateState/CheckIndeterminateState.java136
-rwxr-xr-xsw/qa/complex/indeterminateState/makefile.mk82
-rw-r--r--sw/qa/complex/writer/CheckBookmarks.java277
-rw-r--r--sw/qa/complex/writer/CheckCrossReferences.java369
-rw-r--r--sw/qa/complex/writer/CheckFlies.java233
-rwxr-xr-xsw/qa/complex/writer/CheckIndexedPropertyValues.java182
-rwxr-xr-xsw/qa/complex/writer/CheckNamedPropertyValues.java196
-rwxr-xr-xsw/qa/complex/writer/TextPortionEnumerationTest.java4251
-rwxr-xr-xsw/qa/complex/writer/makefile.mk108
-rw-r--r--sw/qa/complex/writer/testdocuments/CheckCrossReferences.odtbin0 -> 11628 bytes
-rw-r--r--sw/qa/complex/writer/testdocuments/CheckFlies.odtbin0 -> 65022 bytes
-rwxr-xr-xsw/qa/complex/writer/testdocuments/TESTMETA.odtbin0 -> 8678 bytes
-rw-r--r--sw/qa/complex/writer/testdocuments/TESTXMLID.odtbin0 -> 10879 bytes
-rw-r--r--sw/qa/core/Test-BigPtrArray.cxx877
-rw-r--r--sw/qa/core/bigpointerarray-new.cxx110
-rw-r--r--sw/qa/core/bigpointerarray-new.hxx159
-rw-r--r--sw/qa/core/export.exp1
-rw-r--r--sw/qa/core/export.map34
-rw-r--r--sw/qa/core/makefile.mk69
-rw-r--r--sw/qa/core/performance-jobfile9
-rw-r--r--sw/qa/unoapi/Test.java51
-rw-r--r--sw/qa/unoapi/knownissues.xcl175
-rw-r--r--sw/qa/unoapi/lastCheck.txt1
-rw-r--r--sw/qa/unoapi/makefile.mk48
-rw-r--r--sw/qa/unoapi/sw.sce94
-rw-r--r--sw/qa/unoapi/testdocuments/MailMerge.sxwbin0 -> 5391 bytes
-rw-r--r--sw/qa/unoapi/testdocuments/SwXTextEmbeddedObject.sdwbin0 -> 180736 bytes
-rw-r--r--sw/qa/unoapi/testdocuments/SwXTextEmbeddedObject.sxwbin0 -> 24763 bytes
-rw-r--r--sw/qa/unoapi/testdocuments/XDocumentInsertable.sxwbin0 -> 4914 bytes
-rw-r--r--sw/qa/unoapi/testdocuments/sForm.sxwbin0 -> 5568 bytes
-rwxr-xr-xsw/sdi/_annotsh.sdi391
-rw-r--r--sw/sdi/_basesh.sdi525
-rw-r--r--sw/sdi/_beziers.sdi128
-rw-r--r--sw/sdi/_docsh.sdi137
-rw-r--r--sw/sdi/_drwbase.sdi139
-rw-r--r--sw/sdi/_formsh.sdi44
-rw-r--r--sw/sdi/_frmsh.sdi305
-rw-r--r--sw/sdi/_grfsh.sdi216
-rw-r--r--sw/sdi/_listsh.sdi111
-rw-r--r--sw/sdi/_mediash.sdi51
-rw-r--r--sw/sdi/_olesh.sdi35
-rw-r--r--sw/sdi/_tabsh.sdi409
-rw-r--r--sw/sdi/_textsh.sdi1616
-rw-r--r--sw/sdi/_viewsh.sdi774
-rwxr-xr-xsw/sdi/annotsh.sdi380
-rw-r--r--sw/sdi/basesh.sdi64
-rw-r--r--sw/sdi/beziersh.sdi135
-rw-r--r--sw/sdi/docsh.sdi83
-rw-r--r--sw/sdi/drawsh.sdi477
-rw-r--r--sw/sdi/drwbassh.sdi47
-rw-r--r--sw/sdi/drwtxtsh.sdi659
-rw-r--r--sw/sdi/formsh.sdi40
-rw-r--r--sw/sdi/frmsh.sdi56
-rw-r--r--sw/sdi/grfsh.sdi44
-rw-r--r--sw/sdi/listsh.sdi43
-rw-r--r--sw/sdi/makefile.mk106
-rw-r--r--sw/sdi/mediash.sdi42
-rw-r--r--sw/sdi/olesh.sdi41
-rw-r--r--sw/sdi/swinterf.c249
-rw-r--r--sw/sdi/switems.sdi82
-rw-r--r--sw/sdi/swpatch.txt21
-rwxr-xr-xsw/sdi/swriter.sdi10293
-rw-r--r--sw/sdi/swslots.hrc33
-rw-r--r--sw/sdi/swslots.sdi125
-rw-r--r--sw/sdi/tabsh.sdi67
-rw-r--r--sw/sdi/textsh.sdi124
-rw-r--r--sw/sdi/viewsh.sdi326
-rw-r--r--sw/sdi/wbasesh.sdi44
-rw-r--r--sw/sdi/wbeziers.sdi38
-rw-r--r--sw/sdi/wdocsh.sdi60
-rw-r--r--sw/sdi/wdrwbase.sdi49
-rw-r--r--sw/sdi/wformsh.sdi40
-rw-r--r--sw/sdi/wfrmsh.sdi44
-rw-r--r--sw/sdi/wgrfsh.sdi43
-rw-r--r--sw/sdi/wlistsh.sdi41
-rw-r--r--sw/sdi/wolesh.sdi43
-rw-r--r--sw/sdi/wrtapp.sdi90
-rw-r--r--sw/sdi/wtabsh.sdi40
-rw-r--r--sw/sdi/wtextsh.sdi49
-rw-r--r--sw/sdi/wviewsh.sdi203
-rw-r--r--sw/source/core/SwNumberTree/SwNodeNum.cxx534
-rw-r--r--sw/source/core/SwNumberTree/SwNumberTree.cxx1409
-rw-r--r--sw/source/core/SwNumberTree/makefile.mk50
-rw-r--r--sw/source/core/access/acccell.cxx375
-rw-r--r--sw/source/core/access/acccell.hxx137
-rw-r--r--sw/source/core/access/acccontext.cxx1604
-rw-r--r--sw/source/core/access/acccontext.hxx459
-rw-r--r--sw/source/core/access/accdoc.cxx515
-rw-r--r--sw/source/core/access/accdoc.hxx213
-rw-r--r--sw/source/core/access/accembedded.cxx97
-rw-r--r--sw/source/core/access/accembedded.hxx69
-rw-r--r--sw/source/core/access/accfootnote.cxx157
-rw-r--r--sw/source/core/access/accfootnote.hxx88
-rw-r--r--sw/source/core/access/accframe.cxx497
-rw-r--r--sw/source/core/access/accframe.hxx175
-rw-r--r--sw/source/core/access/accframebase.cxx277
-rw-r--r--sw/source/core/access/accframebase.hxx72
-rw-r--r--sw/source/core/access/accfrmobj.cxx428
-rw-r--r--sw/source/core/access/accfrmobj.hxx95
-rw-r--r--sw/source/core/access/accfrmobjmap.cxx168
-rw-r--r--sw/source/core/access/accfrmobjmap.hxx96
-rw-r--r--sw/source/core/access/accfrmobjslist.cxx173
-rw-r--r--sw/source/core/access/accfrmobjslist.hxx145
-rw-r--r--sw/source/core/access/accgraphic.cxx97
-rw-r--r--sw/source/core/access/accgraphic.hxx69
-rw-r--r--sw/source/core/access/accheaderfooter.cxx145
-rw-r--r--sw/source/core/access/accheaderfooter.hxx85
-rw-r--r--sw/source/core/access/acchyperlink.cxx190
-rw-r--r--sw/source/core/access/acchyperlink.hxx91
-rw-r--r--sw/source/core/access/acchypertextdata.cxx55
-rw-r--r--sw/source/core/access/acchypertextdata.hxx51
-rw-r--r--sw/source/core/access/accmap.cxx2888
-rw-r--r--sw/source/core/access/accnotextframe.cxx275
-rw-r--r--sw/source/core/access/accnotextframe.hxx110
-rw-r--r--sw/source/core/access/accpage.cxx200
-rw-r--r--sw/source/core/access/accpage.hxx99
-rw-r--r--sw/source/core/access/accpara.cxx2678
-rw-r--r--sw/source/core/access/accpara.hxx449
-rw-r--r--sw/source/core/access/accportions.cxx753
-rw-r--r--sw/source/core/access/accportions.hxx175
-rw-r--r--sw/source/core/access/accpreview.cxx104
-rw-r--r--sw/source/core/access/accpreview.hxx76
-rw-r--r--sw/source/core/access/accselectionhelper.cxx334
-rw-r--r--sw/source/core/access/accselectionhelper.hxx81
-rw-r--r--sw/source/core/access/acctable.cxx1803
-rw-r--r--sw/source/core/access/acctable.hxx332
-rw-r--r--sw/source/core/access/acctextframe.cxx278
-rw-r--r--sw/source/core/access/acctextframe.hxx115
-rw-r--r--sw/source/core/access/makefile.mk100
-rw-r--r--sw/source/core/access/parachangetrackinginfo.cxx231
-rw-r--r--sw/source/core/access/parachangetrackinginfo.hxx59
-rw-r--r--sw/source/core/access/textmarkuphelper.cxx231
-rw-r--r--sw/source/core/access/textmarkuphelper.hxx87
-rw-r--r--sw/source/core/attr/calbck.cxx634
-rw-r--r--sw/source/core/attr/cellatr.cxx269
-rw-r--r--sw/source/core/attr/fmtfollowtextflow.cxx37
-rw-r--r--sw/source/core/attr/fmtwrapinfluenceonobjpos.cxx166
-rw-r--r--sw/source/core/attr/format.cxx694
-rw-r--r--sw/source/core/attr/hints.cxx308
-rw-r--r--sw/source/core/attr/makefile.mk55
-rw-r--r--sw/source/core/attr/swatrset.cxx404
-rw-r--r--sw/source/core/bastyp/SwSmartTagMgr.cxx95
-rw-r--r--sw/source/core/bastyp/bparr.cxx580
-rw-r--r--sw/source/core/bastyp/breakit.cxx186
-rw-r--r--sw/source/core/bastyp/calc.cxx1824
-rw-r--r--sw/source/core/bastyp/checkit.cxx51
-rw-r--r--sw/source/core/bastyp/index.cxx593
-rw-r--r--sw/source/core/bastyp/init.cxx918
-rw-r--r--sw/source/core/bastyp/makefile.mk79
-rw-r--r--sw/source/core/bastyp/ring.cxx125
-rw-r--r--sw/source/core/bastyp/swcache.cxx656
-rw-r--r--sw/source/core/bastyp/swrect.cxx336
-rw-r--r--sw/source/core/bastyp/swregion.cxx254
-rw-r--r--sw/source/core/bastyp/swtypes.cxx133
-rw-r--r--sw/source/core/bastyp/tabcol.cxx142
-rw-r--r--sw/source/core/crsr/BlockCursor.cxx106
-rw-r--r--sw/source/core/crsr/BlockCursor.hxx36
-rw-r--r--sw/source/core/crsr/IBlockCursor.hxx95
-rw-r--r--sw/source/core/crsr/bookmrk.cxx346
-rw-r--r--sw/source/core/crsr/callnk.cxx221
-rw-r--r--sw/source/core/crsr/callnk.hxx56
-rw-r--r--sw/source/core/crsr/crbm.cxx260
-rw-r--r--sw/source/core/crsr/crossrefbookmark.cxx102
-rw-r--r--sw/source/core/crsr/crsrsh.cxx3495
-rw-r--r--sw/source/core/crsr/crstrvl.cxx2216
-rw-r--r--sw/source/core/crsr/crstrvl1.cxx105
-rw-r--r--sw/source/core/crsr/findattr.cxx1309
-rw-r--r--sw/source/core/crsr/findcoll.cxx119
-rw-r--r--sw/source/core/crsr/findfmt.cxx84
-rw-r--r--sw/source/core/crsr/findtxt.cxx707
-rw-r--r--sw/source/core/crsr/makefile.mk83
-rw-r--r--sw/source/core/crsr/pam.cxx1246
-rw-r--r--sw/source/core/crsr/paminit.cxx131
-rw-r--r--sw/source/core/crsr/swcrsr.cxx2360
-rw-r--r--sw/source/core/crsr/trvlcol.cxx133
-rw-r--r--sw/source/core/crsr/trvlfnfl.cxx359
-rw-r--r--sw/source/core/crsr/trvlreg.cxx291
-rw-r--r--sw/source/core/crsr/trvltbl.cxx931
-rw-r--r--sw/source/core/crsr/unocrsr.cxx280
-rw-r--r--sw/source/core/crsr/viscrs.cxx1006
-rw-r--r--sw/source/core/doc/SwStyleNameMapper.cxx1142
-rw-r--r--sw/source/core/doc/acmplwrd.cxx473
-rw-r--r--sw/source/core/doc/dbgoutsw.cxx1105
-rw-r--r--sw/source/core/doc/doc.cxx2763
-rw-r--r--sw/source/core/doc/docbasic.cxx276
-rw-r--r--sw/source/core/doc/docbm.cxx1747
-rw-r--r--sw/source/core/doc/docchart.cxx277
-rw-r--r--sw/source/core/doc/doccomp.cxx1876
-rw-r--r--sw/source/core/doc/doccorr.cxx461
-rw-r--r--sw/source/core/doc/docdde.cxx418
-rw-r--r--sw/source/core/doc/docdesc.cxx1018
-rw-r--r--sw/source/core/doc/docdraw.cxx1074
-rw-r--r--sw/source/core/doc/docedt.cxx2821
-rw-r--r--sw/source/core/doc/docfld.cxx2821
-rw-r--r--sw/source/core/doc/docfly.cxx1068
-rw-r--r--sw/source/core/doc/docfmt.cxx2685
-rw-r--r--sw/source/core/doc/docftn.cxx500
-rw-r--r--sw/source/core/doc/docglbl.cxx855
-rw-r--r--sw/source/core/doc/docglos.cxx203
-rw-r--r--sw/source/core/doc/doclay.cxx2294
-rw-r--r--sw/source/core/doc/docnew.cxx1235
-rw-r--r--sw/source/core/doc/docnum.cxx2969
-rw-r--r--sw/source/core/doc/docredln.cxx3864
-rw-r--r--sw/source/core/doc/docruby.cxx364
-rw-r--r--sw/source/core/doc/docsort.cxx1028
-rw-r--r--sw/source/core/doc/docstat.cxx67
-rw-r--r--sw/source/core/doc/doctxm.cxx2466
-rw-r--r--sw/source/core/doc/docxforms.cxx123
-rw-r--r--sw/source/core/doc/extinput.cxx294
-rw-r--r--sw/source/core/doc/fmtcol.cxx717
-rw-r--r--sw/source/core/doc/ftnidx.cxx398
-rw-r--r--sw/source/core/doc/gctable.cxx451
-rw-r--r--sw/source/core/doc/htmltbl.cxx1903
-rw-r--r--sw/source/core/doc/lineinfo.cxx154
-rw-r--r--sw/source/core/doc/list.cxx303
-rw-r--r--sw/source/core/doc/makefile.mk92
-rw-r--r--sw/source/core/doc/notxtfrm.cxx1100
-rw-r--r--sw/source/core/doc/number.cxx1686
-rw-r--r--sw/source/core/doc/poolfmt.cxx2594
-rw-r--r--sw/source/core/doc/sortopt.cxx103
-rw-r--r--sw/source/core/doc/swserv.cxx371
-rw-r--r--sw/source/core/doc/swstylemanager.cxx173
-rw-r--r--sw/source/core/doc/swstylemanager.hxx38
-rw-r--r--sw/source/core/doc/tblafmt.cxx1106
-rw-r--r--sw/source/core/doc/tblcpy.cxx1100
-rw-r--r--sw/source/core/doc/tblrwcl.cxx4769
-rw-r--r--sw/source/core/doc/visiturl.cxx139
-rw-r--r--sw/source/core/docnode/cancellablejob.cxx40
-rw-r--r--sw/source/core/docnode/cancellablejob.hxx53
-rw-r--r--sw/source/core/docnode/finalthreadmanager.cxx549
-rw-r--r--sw/source/core/docnode/makefile.mk82
-rw-r--r--sw/source/core/docnode/ndcopy.cxx1624
-rw-r--r--sw/source/core/docnode/ndindex.cxx168
-rw-r--r--sw/source/core/docnode/ndnotxt.cxx307
-rw-r--r--sw/source/core/docnode/ndnum.cxx225
-rw-r--r--sw/source/core/docnode/ndsect.cxx1522
-rw-r--r--sw/source/core/docnode/ndtbl.cxx4696
-rw-r--r--sw/source/core/docnode/ndtbl1.cxx1605
-rw-r--r--sw/source/core/docnode/node.cxx2126
-rw-r--r--sw/source/core/docnode/node2lay.cxx405
-rw-r--r--sw/source/core/docnode/nodes.cxx2699
-rw-r--r--sw/source/core/docnode/observablethread.cxx97
-rw-r--r--sw/source/core/docnode/pausethreadstarting.cxx55
-rw-r--r--sw/source/core/docnode/retrievedinputstreamdata.cxx167
-rw-r--r--sw/source/core/docnode/retrieveinputstream.cxx86
-rw-r--r--sw/source/core/docnode/retrieveinputstreamconsumer.cxx72
-rw-r--r--sw/source/core/docnode/section.cxx1862
-rw-r--r--sw/source/core/docnode/swbaslnk.cxx536
-rw-r--r--sw/source/core/docnode/swthreadjoiner.cxx61
-rw-r--r--sw/source/core/docnode/swthreadmanager.cxx87
-rw-r--r--sw/source/core/docnode/threadlistener.cxx57
-rw-r--r--sw/source/core/docnode/threadmanager.cxx258
-rw-r--r--sw/source/core/draw/dcontact.cxx2844
-rw-r--r--sw/source/core/draw/dflyobj.cxx962
-rw-r--r--sw/source/core/draw/dobjfac.cxx57
-rw-r--r--sw/source/core/draw/dpage.cxx265
-rw-r--r--sw/source/core/draw/drawdoc.cxx240
-rw-r--r--sw/source/core/draw/dview.cxx1115
-rw-r--r--sw/source/core/draw/makefile.mk60
-rw-r--r--sw/source/core/edit/acorrect.cxx526
-rw-r--r--sw/source/core/edit/autofmt.cxx2840
-rw-r--r--sw/source/core/edit/edatmisc.cxx189
-rw-r--r--sw/source/core/edit/edattr.cxx646
-rw-r--r--sw/source/core/edit/eddel.cxx354
-rw-r--r--sw/source/core/edit/edfcol.cxx161
-rw-r--r--sw/source/core/edit/edfld.cxx596
-rw-r--r--sw/source/core/edit/edfldexp.cxx101
-rw-r--r--sw/source/core/edit/edfmt.cxx197
-rw-r--r--sw/source/core/edit/edglbldc.cxx404
-rw-r--r--sw/source/core/edit/edglss.cxx373
-rw-r--r--sw/source/core/edit/editsh.cxx1222
-rw-r--r--sw/source/core/edit/edlingu.cxx1979
-rw-r--r--sw/source/core/edit/ednumber.cxx835
-rw-r--r--sw/source/core/edit/edredln.cxx150
-rw-r--r--sw/source/core/edit/edsect.cxx456
-rw-r--r--sw/source/core/edit/edtab.cxx492
-rw-r--r--sw/source/core/edit/edtox.cxx502
-rw-r--r--sw/source/core/edit/edundo.cxx280
-rw-r--r--sw/source/core/edit/edws.cxx385
-rw-r--r--sw/source/core/edit/makefile.mk71
-rw-r--r--sw/source/core/except/dbgloop.cxx168
-rw-r--r--sw/source/core/except/errhdl.cxx141
-rw-r--r--sw/source/core/except/makefile.mk60
-rw-r--r--sw/source/core/fields/authfld.cxx831
-rw-r--r--sw/source/core/fields/cellfml.cxx1232
-rw-r--r--sw/source/core/fields/chpfld.cxx309
-rw-r--r--sw/source/core/fields/dbfld.cxx1076
-rw-r--r--sw/source/core/fields/ddefld.cxx450
-rw-r--r--sw/source/core/fields/ddetbl.cxx187
-rw-r--r--sw/source/core/fields/docufld.cxx2793
-rw-r--r--sw/source/core/fields/expfld.cxx1330
-rw-r--r--sw/source/core/fields/fldbas.cxx817
-rw-r--r--sw/source/core/fields/flddat.cxx321
-rw-r--r--sw/source/core/fields/flddropdown.cxx284
-rw-r--r--sw/source/core/fields/fldlst.cxx233
-rw-r--r--sw/source/core/fields/macrofld.cxx266
-rw-r--r--sw/source/core/fields/makefile.mk94
-rw-r--r--sw/source/core/fields/postithelper.cxx223
-rw-r--r--sw/source/core/fields/reffld.cxx1099
-rw-r--r--sw/source/core/fields/scrptfld.cxx153
-rw-r--r--sw/source/core/fields/tblcalc.cxx264
-rwxr-xr-xsw/source/core/fields/textapi.cxx191
-rw-r--r--sw/source/core/fields/usrfld.cxx378
-rw-r--r--sw/source/core/frmedt/fecopy.cxx1551
-rw-r--r--sw/source/core/frmedt/fedesc.cxx291
-rw-r--r--sw/source/core/frmedt/fefly1.cxx2156
-rw-r--r--sw/source/core/frmedt/feflyole.cxx150
-rw-r--r--sw/source/core/frmedt/feshview.cxx3241
-rw-r--r--sw/source/core/frmedt/fetab.cxx2593
-rw-r--r--sw/source/core/frmedt/fews.cxx1296
-rw-r--r--sw/source/core/frmedt/makefile.mk76
-rw-r--r--sw/source/core/frmedt/tblsel.cxx2728
-rw-r--r--sw/source/core/graphic/grfatr.cxx366
-rw-r--r--sw/source/core/graphic/makefile.mk53
-rw-r--r--sw/source/core/graphic/ndgrf.cxx1221
-rw-r--r--sw/source/core/inc/GetMetricVal.hxx54
-rw-r--r--sw/source/core/inc/MarkManager.hxx97
-rw-r--r--sw/source/core/inc/SwGrammarMarkUp.hxx74
-rw-r--r--sw/source/core/inc/SwPortionHandler.hxx101
-rw-r--r--sw/source/core/inc/SwXMLBlockExport.hxx73
-rw-r--r--sw/source/core/inc/SwXMLBlockImport.hxx89
-rw-r--r--sw/source/core/inc/SwXMLBlockListContext.hxx126
-rw-r--r--sw/source/core/inc/SwXMLTextBlocks.hxx111
-rw-r--r--sw/source/core/inc/SwXTextDefaults.hxx84
-rw-r--r--sw/source/core/inc/acorrect.hxx122
-rw-r--r--sw/source/core/inc/anchoredobjectposition.hxx488
-rw-r--r--sw/source/core/inc/ascharanchoredobjectposition.hxx171
-rw-r--r--sw/source/core/inc/blink.hxx89
-rw-r--r--sw/source/core/inc/bodyfrm.hxx49
-rw-r--r--sw/source/core/inc/bookmrk.hxx261
-rw-r--r--sw/source/core/inc/cellfrm.hxx71
-rw-r--r--sw/source/core/inc/cntfrm.hxx147
-rw-r--r--sw/source/core/inc/colfrm.hxx42
-rw-r--r--sw/source/core/inc/crossrefbookmark.hxx99
-rw-r--r--sw/source/core/inc/dbg_lay.hxx120
-rw-r--r--sw/source/core/inc/dbgloop.hxx77
-rw-r--r--sw/source/core/inc/dflyobj.hxx140
-rw-r--r--sw/source/core/inc/docfld.hxx193
-rw-r--r--sw/source/core/inc/docsort.hxx176
-rw-r--r--sw/source/core/inc/doctxm.hxx147
-rw-r--r--sw/source/core/inc/drawdev.hxx140
-rw-r--r--sw/source/core/inc/drawfont.hxx594
-rw-r--r--sw/source/core/inc/dview.hxx134
-rw-r--r--sw/source/core/inc/environmentofanchoredobject.hxx117
-rw-r--r--sw/source/core/inc/finalthreadmanager.hxx105
-rw-r--r--sw/source/core/inc/flowfrm.hxx273
-rw-r--r--sw/source/core/inc/flyfrm.hxx287
-rw-r--r--sw/source/core/inc/flyfrms.hxx259
-rw-r--r--sw/source/core/inc/fntcache.hxx160
-rw-r--r--sw/source/core/inc/frame.hxx1257
-rw-r--r--sw/source/core/inc/frminf.hxx85
-rw-r--r--sw/source/core/inc/frmtool.hxx582
-rw-r--r--sw/source/core/inc/ftnboss.hxx137
-rw-r--r--sw/source/core/inc/ftnfrm.hxx150
-rw-r--r--sw/source/core/inc/hffrm.hxx66
-rw-r--r--sw/source/core/inc/ifinishedthreadlistener.hxx55
-rw-r--r--sw/source/core/inc/ithreadlistenerowner.hxx58
-rw-r--r--sw/source/core/inc/layact.hxx239
-rw-r--r--sw/source/core/inc/laycache.hxx77
-rw-r--r--sw/source/core/inc/layfrm.hxx209
-rw-r--r--sw/source/core/inc/layouter.hxx183
-rw-r--r--sw/source/core/inc/makefile.mk26
-rw-r--r--sw/source/core/inc/movedfwdfrmsbyobjpos.hxx70
-rw-r--r--sw/source/core/inc/mvsave.hxx231
-rw-r--r--sw/source/core/inc/node2lay.hxx81
-rw-r--r--sw/source/core/inc/noteurl.hxx76
-rw-r--r--sw/source/core/inc/notxtfrm.hxx78
-rw-r--r--sw/source/core/inc/objectformatter.hxx238
-rw-r--r--sw/source/core/inc/observablethread.hxx105
-rw-r--r--sw/source/core/inc/pagefrm.hxx542
-rw-r--r--sw/source/core/inc/pamtyp.hxx102
-rw-r--r--sw/source/core/inc/prevwpage.hxx36
-rw-r--r--sw/source/core/inc/ptqueue.hxx62
-rw-r--r--sw/source/core/inc/retrievedinputstreamdata.hxx111
-rw-r--r--sw/source/core/inc/retrieveinputstream.hxx68
-rw-r--r--sw/source/core/inc/retrieveinputstreamconsumer.hxx74
-rw-r--r--sw/source/core/inc/rootfrm.hxx369
-rw-r--r--sw/source/core/inc/rowfrm.hxx111
-rw-r--r--sw/source/core/inc/scriptinfo.hxx416
-rw-r--r--sw/source/core/inc/sectfrm.hxx148
-rw-r--r--sw/source/core/inc/setmapvirtdev.hxx71
-rw-r--r--sw/source/core/inc/sortedobjs.hxx108
-rw-r--r--sw/source/core/inc/sortedobjsimpl.hxx61
-rw-r--r--sw/source/core/inc/swblocks.hxx242
-rw-r--r--sw/source/core/inc/swcache.hxx302
-rw-r--r--sw/source/core/inc/swfntcch.hxx99
-rw-r--r--sw/source/core/inc/swfont.hxx899
-rw-r--r--sw/source/core/inc/swselectionlist.hxx97
-rw-r--r--sw/source/core/inc/swthreadjoiner.hxx51
-rw-r--r--sw/source/core/inc/swthreadmanager.hxx89
-rw-r--r--sw/source/core/inc/tabfrm.hxx233
-rw-r--r--sw/source/core/inc/tblrwcl.hxx228
-rwxr-xr-xsw/source/core/inc/textapi.hxx70
-rw-r--r--sw/source/core/inc/threadlistener.hxx62
-rw-r--r--sw/source/core/inc/threadmanager.hxx172
-rw-r--r--sw/source/core/inc/tocntntanchoredobjectposition.hxx103
-rw-r--r--sw/source/core/inc/tolayoutanchoredobjectposition.hxx66
-rw-r--r--sw/source/core/inc/toxhlp.hxx76
-rw-r--r--sw/source/core/inc/txmsrt.hxx294
-rw-r--r--sw/source/core/inc/txtfrm.hxx830
-rw-r--r--sw/source/core/inc/txttypes.hxx103
-rw-r--r--sw/source/core/inc/undoflystrattr.hxx57
-rw-r--r--sw/source/core/inc/unofldmid.h71
-rwxr-xr-xsw/source/core/inc/unometa.hxx368
-rw-r--r--sw/source/core/inc/viewimp.hxx364
-rw-r--r--sw/source/core/inc/visiturl.hxx49
-rw-r--r--sw/source/core/inc/wrong.hxx166
-rw-r--r--sw/source/core/layout/anchoreddrawobject.cxx906
-rw-r--r--sw/source/core/layout/anchoredobject.cxx1064
-rw-r--r--sw/source/core/layout/atrfrm.cxx3274
-rw-r--r--sw/source/core/layout/calcmove.cxx2104
-rw-r--r--sw/source/core/layout/colfrm.cxx483
-rw-r--r--sw/source/core/layout/dbg_lay.cxx866
-rw-r--r--sw/source/core/layout/findfrm.cxx1827
-rw-r--r--sw/source/core/layout/flowfrm.cxx2736
-rw-r--r--sw/source/core/layout/fly.cxx2853
-rw-r--r--sw/source/core/layout/flycnt.cxx1563
-rw-r--r--sw/source/core/layout/flyincnt.cxx360
-rw-r--r--sw/source/core/layout/flylay.cxx1392
-rw-r--r--sw/source/core/layout/flypos.cxx112
-rw-r--r--sw/source/core/layout/frmtool.cxx3740
-rw-r--r--sw/source/core/layout/ftnfrm.cxx3367
-rw-r--r--sw/source/core/layout/hffrm.cxx795
-rw-r--r--sw/source/core/layout/layact.cxx2599
-rw-r--r--sw/source/core/layout/laycache.cxx1391
-rw-r--r--sw/source/core/layout/layhelp.hxx232
-rw-r--r--sw/source/core/layout/layouter.cxx571
-rw-r--r--sw/source/core/layout/makefile.mk113
-rw-r--r--sw/source/core/layout/movedfwdfrmsbyobjpos.cxx109
-rw-r--r--sw/source/core/layout/newfrm.cxx589
-rw-r--r--sw/source/core/layout/objectformatter.cxx578
-rw-r--r--sw/source/core/layout/objectformatterlayfrm.cxx215
-rw-r--r--sw/source/core/layout/objectformatterlayfrm.hxx81
-rw-r--r--sw/source/core/layout/objectformattertxtfrm.cxx870
-rw-r--r--sw/source/core/layout/objectformattertxtfrm.hxx215
-rw-r--r--sw/source/core/layout/objstmpconsiderwrapinfl.cxx73
-rw-r--r--sw/source/core/layout/objstmpconsiderwrapinfl.hxx47
-rw-r--r--sw/source/core/layout/pagechg.cxx2496
-rw-r--r--sw/source/core/layout/pagedesc.cxx512
-rw-r--r--sw/source/core/layout/paintfrm.cxx6742
-rw-r--r--sw/source/core/layout/sectfrm.cxx2800
-rw-r--r--sw/source/core/layout/softpagebreak.cxx156
-rw-r--r--sw/source/core/layout/sortedobjs.cxx76
-rw-r--r--sw/source/core/layout/sortedobjsimpl.cxx313
-rw-r--r--sw/source/core/layout/ssfrm.cxx750
-rw-r--r--sw/source/core/layout/swselectionlist.cxx94
-rw-r--r--sw/source/core/layout/tabfrm.cxx5942
-rw-r--r--sw/source/core/layout/trvlfrm.cxx2659
-rw-r--r--sw/source/core/layout/unusedf.cxx93
-rw-r--r--sw/source/core/layout/virtoutp.cxx256
-rw-r--r--sw/source/core/layout/virtoutp.hxx74
-rw-r--r--sw/source/core/layout/wsfrm.cxx4000
-rw-r--r--sw/source/core/makefile.mk110
-rw-r--r--sw/source/core/objectpositioning/anchoredobjectposition.cxx1128
-rw-r--r--sw/source/core/objectpositioning/ascharanchoredobjectposition.cxx457
-rw-r--r--sw/source/core/objectpositioning/environmentofanchoredobject.cxx121
-rw-r--r--sw/source/core/objectpositioning/makefile.mk59
-rw-r--r--sw/source/core/objectpositioning/tocntntanchoredobjectposition.cxx1073
-rw-r--r--sw/source/core/objectpositioning/tolayoutanchoredobjectposition.cxx245
-rw-r--r--sw/source/core/ole/makefile.mk55
-rw-r--r--sw/source/core/ole/ndole.cxx1018
-rw-r--r--sw/source/core/para/makefile.mk54
-rw-r--r--sw/source/core/para/paratr.cxx295
-rw-r--r--sw/source/core/sw3io/makefile.mk49
-rw-r--r--sw/source/core/sw3io/sw3convert.cxx433
-rw-r--r--sw/source/core/sw3io/swacorr.cxx106
-rw-r--r--sw/source/core/swg/SwXMLBlockExport.cxx142
-rw-r--r--sw/source/core/swg/SwXMLBlockImport.cxx118
-rw-r--r--sw/source/core/swg/SwXMLBlockListContext.cxx250
-rw-r--r--sw/source/core/swg/SwXMLSectionList.cxx154
-rw-r--r--sw/source/core/swg/SwXMLTextBlocks.cxx643
-rw-r--r--sw/source/core/swg/SwXMLTextBlocks1.cxx741
-rw-r--r--sw/source/core/swg/makefile.mk62
-rw-r--r--sw/source/core/swg/swblocks.cxx818
-rw-r--r--sw/source/core/table/makefile.mk48
-rw-r--r--sw/source/core/table/swnewtable.cxx2323
-rw-r--r--sw/source/core/table/swtable.cxx2885
-rw-r--r--sw/source/core/text/EnhancedPDFExportHelper.cxx2217
-rw-r--r--sw/source/core/text/SwGrammarMarkUp.cxx166
-rw-r--r--sw/source/core/text/atrhndl.hxx179
-rw-r--r--sw/source/core/text/atrstck.cxx956
-rw-r--r--sw/source/core/text/blink.cxx198
-rw-r--r--sw/source/core/text/frmcrsr.cxx1744
-rw-r--r--sw/source/core/text/frmform.cxx2173
-rw-r--r--sw/source/core/text/frminf.cxx377
-rw-r--r--sw/source/core/text/frmpaint.cxx749
-rw-r--r--sw/source/core/text/guess.cxx554
-rw-r--r--sw/source/core/text/guess.hxx73
-rw-r--r--sw/source/core/text/inftxt.cxx1975
-rw-r--r--sw/source/core/text/inftxt.hxx905
-rw-r--r--sw/source/core/text/itradj.cxx919
-rw-r--r--sw/source/core/text/itratr.cxx1078
-rw-r--r--sw/source/core/text/itratr.hxx131
-rw-r--r--sw/source/core/text/itrcrsr.cxx1886
-rw-r--r--sw/source/core/text/itrform2.cxx2133
-rw-r--r--sw/source/core/text/itrform2.hxx214
-rw-r--r--sw/source/core/text/itrpaint.cxx718
-rw-r--r--sw/source/core/text/itrpaint.hxx69
-rw-r--r--sw/source/core/text/itrtxt.cxx523
-rw-r--r--sw/source/core/text/itrtxt.hxx340
-rw-r--r--sw/source/core/text/makefile.mk119
-rw-r--r--sw/source/core/text/noteurl.cxx87
-rw-r--r--sw/source/core/text/pordrop.hxx119
-rw-r--r--sw/source/core/text/porexp.cxx312
-rw-r--r--sw/source/core/text/porexp.hxx108
-rw-r--r--sw/source/core/text/porfld.cxx1395
-rw-r--r--sw/source/core/text/porfld.hxx274
-rw-r--r--sw/source/core/text/porfly.cxx454
-rw-r--r--sw/source/core/text/porfly.hxx108
-rw-r--r--sw/source/core/text/porftn.hxx130
-rw-r--r--sw/source/core/text/porglue.cxx318
-rw-r--r--sw/source/core/text/porglue.hxx134
-rw-r--r--sw/source/core/text/porhyph.hxx119
-rw-r--r--sw/source/core/text/porlay.cxx2460
-rw-r--r--sw/source/core/text/porlay.hxx427
-rw-r--r--sw/source/core/text/porlin.cxx426
-rw-r--r--sw/source/core/text/porlin.hxx251
-rw-r--r--sw/source/core/text/pormulti.cxx2415
-rw-r--r--sw/source/core/text/pormulti.hxx268
-rw-r--r--sw/source/core/text/porref.cxx115
-rw-r--r--sw/source/core/text/porref.hxx73
-rw-r--r--sw/source/core/text/porrst.cxx579
-rw-r--r--sw/source/core/text/porrst.hxx187
-rw-r--r--sw/source/core/text/portab.hxx157
-rw-r--r--sw/source/core/text/portox.cxx115
-rw-r--r--sw/source/core/text/portox.hxx75
-rw-r--r--sw/source/core/text/portxt.cxx881
-rw-r--r--sw/source/core/text/portxt.hxx117
-rw-r--r--sw/source/core/text/possiz.hxx84
-rw-r--r--sw/source/core/text/redlnitr.cxx505
-rw-r--r--sw/source/core/text/redlnitr.hxx123
-rw-r--r--sw/source/core/text/txtcache.cxx241
-rw-r--r--sw/source/core/text/txtcache.hxx76
-rw-r--r--sw/source/core/text/txtcfg.hxx54
-rw-r--r--sw/source/core/text/txtdrop.cxx1105
-rw-r--r--sw/source/core/text/txtfld.cxx549
-rw-r--r--sw/source/core/text/txtfly.cxx2430
-rw-r--r--sw/source/core/text/txtfly.hxx259
-rw-r--r--sw/source/core/text/txtfrm.cxx2753
-rw-r--r--sw/source/core/text/txtftn.cxx1699
-rw-r--r--sw/source/core/text/txthyph.cxx695
-rw-r--r--sw/source/core/text/txtinit.cxx101
-rw-r--r--sw/source/core/text/txtio.cxx949
-rw-r--r--sw/source/core/text/txtpaint.cxx137
-rw-r--r--sw/source/core/text/txtpaint.hxx191
-rw-r--r--sw/source/core/text/txttab.cxx667
-rw-r--r--sw/source/core/text/widorp.cxx566
-rw-r--r--sw/source/core/text/widorp.hxx95
-rw-r--r--sw/source/core/text/wrong.cxx644
-rw-r--r--sw/source/core/tox/makefile.mk57
-rw-r--r--sw/source/core/tox/tox.cxx954
-rw-r--r--sw/source/core/tox/toxhlp.cxx193
-rw-r--r--sw/source/core/tox/txmsrt.cxx952
-rw-r--r--sw/source/core/txtnode/SwGrammarContact.cxx221
-rw-r--r--sw/source/core/txtnode/atrfld.cxx401
-rw-r--r--sw/source/core/txtnode/atrflyin.cxx290
-rw-r--r--sw/source/core/txtnode/atrftn.cxx543
-rw-r--r--sw/source/core/txtnode/atrref.cxx103
-rw-r--r--sw/source/core/txtnode/atrtox.cxx96
-rw-r--r--sw/source/core/txtnode/chrfmt.cxx38
-rw-r--r--sw/source/core/txtnode/fmtatr2.cxx908
-rw-r--r--sw/source/core/txtnode/fntcache.cxx2740
-rw-r--r--sw/source/core/txtnode/fntcap.cxx855
-rw-r--r--sw/source/core/txtnode/makefile.mk86
-rw-r--r--sw/source/core/txtnode/modeltoviewhelper.cxx120
-rw-r--r--sw/source/core/txtnode/ndhints.cxx497
-rw-r--r--sw/source/core/txtnode/ndtxt.cxx5092
-rw-r--r--sw/source/core/txtnode/swfntcch.cxx94
-rw-r--r--sw/source/core/txtnode/swfont.cxx1246
-rw-r--r--sw/source/core/txtnode/thints.cxx3065
-rw-r--r--sw/source/core/txtnode/txatbase.cxx84
-rw-r--r--sw/source/core/txtnode/txatritr.cxx246
-rw-r--r--sw/source/core/txtnode/txtatr2.cxx338
-rw-r--r--sw/source/core/txtnode/txtedt.cxx2170
-rw-r--r--sw/source/core/undo/SwRewriter.cxx78
-rw-r--r--sw/source/core/undo/SwUndoField.cxx156
-rw-r--r--sw/source/core/undo/SwUndoFmt.cxx510
-rw-r--r--sw/source/core/undo/SwUndoPageDesc.cxx474
-rw-r--r--sw/source/core/undo/SwUndoTOXChange.cxx71
-rw-r--r--sw/source/core/undo/docundo.cxx1027
-rw-r--r--sw/source/core/undo/makefile.mk86
-rw-r--r--sw/source/core/undo/rolbck.cxx1524
-rw-r--r--sw/source/core/undo/unattr.cxx1318
-rw-r--r--sw/source/core/undo/unbkmk.cxx109
-rw-r--r--sw/source/core/undo/undel.cxx1010
-rw-r--r--sw/source/core/undo/undo.hrc185
-rw-r--r--sw/source/core/undo/undo.src657
-rw-r--r--sw/source/core/undo/undobj.cxx1404
-rw-r--r--sw/source/core/undo/undobj1.cxx704
-rw-r--r--sw/source/core/undo/undoflystrattr.cxx104
-rw-r--r--sw/source/core/undo/undraw.cxx642
-rw-r--r--sw/source/core/undo/unfmco.cxx131
-rw-r--r--sw/source/core/undo/unins.cxx1100
-rw-r--r--sw/source/core/undo/unmove.cxx356
-rw-r--r--sw/source/core/undo/unnum.cxx466
-rw-r--r--sw/source/core/undo/unoutl.cxx70
-rw-r--r--sw/source/core/undo/unovwr.cxx512
-rw-r--r--sw/source/core/undo/unredln.cxx543
-rw-r--r--sw/source/core/undo/unsect.cxx499
-rw-r--r--sw/source/core/undo/unsort.cxx302
-rw-r--r--sw/source/core/undo/unspnd.cxx216
-rw-r--r--sw/source/core/undo/untbl.cxx3285
-rw-r--r--sw/source/core/undo/untblk.cxx367
-rw-r--r--sw/source/core/unocore/SwXTextDefaults.cxx292
-rw-r--r--sw/source/core/unocore/TextCursorHelper.cxx61
-rw-r--r--sw/source/core/unocore/XMLRangeHelper.cxx412
-rw-r--r--sw/source/core/unocore/XMLRangeHelper.hxx78
-rw-r--r--sw/source/core/unocore/makefile.mk124
-rw-r--r--sw/source/core/unocore/swunohelper.cxx291
-rw-r--r--sw/source/core/unocore/unobkm.cxx651
-rw-r--r--sw/source/core/unocore/unochart.cxx3092
-rw-r--r--sw/source/core/unocore/unocoll.cxx1930
-rw-r--r--sw/source/core/unocore/unocore.src64
-rw-r--r--sw/source/core/unocore/unocrsrhelper.cxx1150
-rw-r--r--sw/source/core/unocore/unodraw.cxx3105
-rw-r--r--sw/source/core/unocore/unoevent.cxx333
-rw-r--r--sw/source/core/unocore/unoevtlstnr.cxx118
-rw-r--r--sw/source/core/unocore/unofield.cxx3007
-rw-r--r--sw/source/core/unocore/unoflatpara.cxx531
-rw-r--r--sw/source/core/unocore/unoframe.cxx3433
-rw-r--r--sw/source/core/unocore/unoftn.cxx732
-rw-r--r--sw/source/core/unocore/unoidx.cxx3451
-rw-r--r--sw/source/core/unocore/unomap.cxx3123
-rw-r--r--sw/source/core/unocore/unoobj.cxx3209
-rw-r--r--sw/source/core/unocore/unoobj2.cxx2097
-rw-r--r--sw/source/core/unocore/unoparagraph.cxx1462
-rw-r--r--sw/source/core/unocore/unoport.cxx1072
-rw-r--r--sw/source/core/unocore/unoportenum.cxx1226
-rw-r--r--sw/source/core/unocore/unoprnms.cxx793
-rw-r--r--sw/source/core/unocore/unoredline.cxx794
-rw-r--r--sw/source/core/unocore/unoredlines.cxx235
-rw-r--r--sw/source/core/unocore/unorefmk.cxx1708
-rw-r--r--sw/source/core/unocore/unosect.cxx1916
-rw-r--r--sw/source/core/unocore/unosett.cxx2828
-rw-r--r--sw/source/core/unocore/unosrch.cxx762
-rw-r--r--sw/source/core/unocore/unostyle.cxx4536
-rw-r--r--sw/source/core/unocore/unotbl.cxx5466
-rw-r--r--sw/source/core/unocore/unotext.cxx2967
-rw-r--r--sw/source/core/unocore/unotextmarkup.cxx486
-rwxr-xr-xsw/source/core/view/makefile.mk61
-rw-r--r--sw/source/core/view/pagepreviewlayout.cxx1554
-rwxr-xr-xsw/source/core/view/printdata.cxx546
-rw-r--r--sw/source/core/view/vdraw.cxx378
-rw-r--r--sw/source/core/view/viewimp.cxx620
-rw-r--r--sw/source/core/view/viewpg.cxx262
-rw-r--r--sw/source/core/view/viewsh.cxx2744
-rw-r--r--sw/source/core/view/vnew.cxx407
-rwxr-xr-xsw/source/core/view/vprint.cxx859
-rw-r--r--sw/source/filter/ascii/ascatr.cxx227
-rw-r--r--sw/source/filter/ascii/makefile.mk56
-rw-r--r--sw/source/filter/ascii/parasc.cxx535
-rw-r--r--sw/source/filter/ascii/wrtasc.cxx225
-rw-r--r--sw/source/filter/ascii/wrtasc.hxx52
-rw-r--r--sw/source/filter/basflt/docfact.cxx85
-rw-r--r--sw/source/filter/basflt/fltini.cxx1037
-rw-r--r--sw/source/filter/basflt/iodetect.cxx592
-rw-r--r--sw/source/filter/basflt/makefile.mk58
-rw-r--r--sw/source/filter/basflt/shellio.cxx1010
-rw-r--r--sw/source/filter/html/SwAppletImpl.cxx208
-rw-r--r--sw/source/filter/html/css1atr.cxx3859
-rw-r--r--sw/source/filter/html/css1kywd.cxx281
-rw-r--r--sw/source/filter/html/css1kywd.hxx291
-rw-r--r--sw/source/filter/html/htmlatr.cxx3494
-rw-r--r--sw/source/filter/html/htmlbas.cxx369
-rw-r--r--sw/source/filter/html/htmlcss1.cxx2477
-rw-r--r--sw/source/filter/html/htmlctxt.cxx752
-rw-r--r--sw/source/filter/html/htmldraw.cxx859
-rw-r--r--sw/source/filter/html/htmlfld.cxx670
-rw-r--r--sw/source/filter/html/htmlfld.hxx92
-rw-r--r--sw/source/filter/html/htmlfldw.cxx539
-rw-r--r--sw/source/filter/html/htmlfly.cxx1929
-rw-r--r--sw/source/filter/html/htmlfly.hxx137
-rw-r--r--sw/source/filter/html/htmlflyt.cxx516
-rw-r--r--sw/source/filter/html/htmlform.cxx2661
-rw-r--r--sw/source/filter/html/htmlform.hxx52
-rw-r--r--sw/source/filter/html/htmlforw.cxx1447
-rw-r--r--sw/source/filter/html/htmlftn.cxx621
-rw-r--r--sw/source/filter/html/htmlgrin.cxx1448
-rw-r--r--sw/source/filter/html/htmlnum.cxx987
-rw-r--r--sw/source/filter/html/htmlnum.hxx131
-rw-r--r--sw/source/filter/html/htmlplug.cxx1401
-rw-r--r--sw/source/filter/html/htmlsect.cxx862
-rw-r--r--sw/source/filter/html/htmltab.cxx5600
-rw-r--r--sw/source/filter/html/htmltabw.cxx1265
-rw-r--r--sw/source/filter/html/htmlvsh.hxx55
-rw-r--r--sw/source/filter/html/makefile.mk83
-rw-r--r--sw/source/filter/html/parcss1.cxx1426
-rw-r--r--sw/source/filter/html/parcss1.hxx307
-rw-r--r--sw/source/filter/html/svxcss1.cxx3311
-rw-r--r--sw/source/filter/html/svxcss1.hxx435
-rw-r--r--sw/source/filter/html/swcss1.hxx227
-rw-r--r--sw/source/filter/html/swhtml.cxx5521
-rw-r--r--sw/source/filter/html/swhtml.hxx1040
-rw-r--r--sw/source/filter/html/wrthtml.cxx1439
-rw-r--r--sw/source/filter/html/wrthtml.hxx603
-rw-r--r--sw/source/filter/inc/fltbase.hxx127
-rw-r--r--sw/source/filter/inc/fltglbls.hxx124
-rw-r--r--sw/source/filter/inc/fltini.hxx108
-rw-r--r--sw/source/filter/inc/fltshell.hxx629
-rw-r--r--sw/source/filter/inc/makefile.mk26
-rw-r--r--sw/source/filter/inc/msfilter.hxx528
-rw-r--r--sw/source/filter/inc/rtf.hxx132
-rw-r--r--sw/source/filter/inc/wrt_fn.hxx66
-rw-r--r--sw/source/filter/inc/wrtswtbl.hxx334
-rw-r--r--sw/source/filter/inc/wwstyles.hxx221
-rw-r--r--sw/source/filter/makefile.mk67
-rw-r--r--sw/source/filter/rtf/makefile.mk65
-rw-r--r--sw/source/filter/rtf/rtfatr.cxx4356
-rw-r--r--sw/source/filter/rtf/rtffld.cxx1231
-rw-r--r--sw/source/filter/rtf/rtffly.cxx1631
-rw-r--r--sw/source/filter/rtf/rtfnum.cxx1460
-rw-r--r--sw/source/filter/rtf/rtftbl.cxx1026
-rw-r--r--sw/source/filter/rtf/swparrtf.cxx4389
-rw-r--r--sw/source/filter/rtf/swparrtf.hxx481
-rw-r--r--sw/source/filter/rtf/wrtrtf.cxx1806
-rw-r--r--sw/source/filter/rtf/wrtrtf.hxx253
-rw-r--r--sw/source/filter/writer/makefile.mk54
-rw-r--r--sw/source/filter/writer/writer.cxx628
-rw-r--r--sw/source/filter/writer/wrt_fn.cxx131
-rw-r--r--sw/source/filter/writer/wrtswtbl.cxx919
-rw-r--r--sw/source/filter/ww1/fltshell.cxx2088
-rw-r--r--sw/source/filter/ww1/makefile.mk94
-rw-r--r--sw/source/filter/ww1/w1class.cxx1256
-rw-r--r--sw/source/filter/ww1/w1class.hxx1649
-rw-r--r--sw/source/filter/ww1/w1filter.cxx2063
-rw-r--r--sw/source/filter/ww1/w1par.cxx141
-rw-r--r--sw/source/filter/ww1/w1par.hxx45
-rw-r--r--sw/source/filter/ww1/w1sprm.cxx684
-rw-r--r--sw/source/filter/ww1/w1struct.hxx928
-rw-r--r--sw/source/filter/ww8/CREDITS3
-rw-r--r--sw/source/filter/ww8/WW8FFData.cxx176
-rw-r--r--sw/source/filter/ww8/WW8FFData.hxx116
-rw-r--r--sw/source/filter/ww8/WW8FibData.cxx62
-rw-r--r--sw/source/filter/ww8/WW8FibData.hxx51
-rw-r--r--sw/source/filter/ww8/WW8Sttbf.cxx119
-rw-r--r--sw/source/filter/ww8/WW8Sttbf.hxx145
-rw-r--r--sw/source/filter/ww8/WW8TableInfo.cxx1517
-rw-r--r--sw/source/filter/ww8/WW8TableInfo.hxx354
-rw-r--r--sw/source/filter/ww8/attributeoutputbase.hxx583
-rw-r--r--sw/source/filter/ww8/docxattributeoutput.cxx3304
-rw-r--r--sw/source/filter/ww8/docxattributeoutput.hxx610
-rw-r--r--sw/source/filter/ww8/docxexport.cxx797
-rw-r--r--sw/source/filter/ww8/docxexport.hxx225
-rw-r--r--sw/source/filter/ww8/docxexportfilter.cxx187
-rw-r--r--sw/source/filter/ww8/docxexportfilter.hxx62
-rw-r--r--sw/source/filter/ww8/docxfootnotes.hxx100
-rw-r--r--sw/source/filter/ww8/dump/dump8.cxx171
-rw-r--r--sw/source/filter/ww8/dump/dump8a.cxx2746
-rw-r--r--sw/source/filter/ww8/dump/makefile.mk122
-rw-r--r--sw/source/filter/ww8/dump/msvbasic.cxx536
-rw-r--r--sw/source/filter/ww8/dump/msvbasic.hxx102
-rw-r--r--sw/source/filter/ww8/dump/ww8darr.cxx546
-rw-r--r--sw/source/filter/ww8/dump/ww8darr.hxx43
-rw-r--r--sw/source/filter/ww8/dump/ww8dout.cxx419
-rw-r--r--sw/source/filter/ww8/dump/ww8dout.hxx86
-rw-r--r--sw/source/filter/ww8/dump/ww8scan.cxx6667
-rw-r--r--sw/source/filter/ww8/dump/ww8scan.hxx1488
-rw-r--r--sw/source/filter/ww8/dump/ww8struc.hxx815
-rw-r--r--sw/source/filter/ww8/escher.hxx189
-rw-r--r--sw/source/filter/ww8/fields.cxx152
-rw-r--r--sw/source/filter/ww8/fields.hxx157
-rw-r--r--sw/source/filter/ww8/hash_wrap.hxx124
-rw-r--r--sw/source/filter/ww8/makefile.mk105
-rw-r--r--sw/source/filter/ww8/needed_cast.hxx63
-rw-r--r--sw/source/filter/ww8/sortedarray.hxx121
-rw-r--r--sw/source/filter/ww8/staticassert.hxx71
-rw-r--r--sw/source/filter/ww8/styles.cxx218
-rw-r--r--sw/source/filter/ww8/tracer.cxx209
-rw-r--r--sw/source/filter/ww8/tracer.hxx91
-rw-r--r--sw/source/filter/ww8/types.hxx58
-rw-r--r--sw/source/filter/ww8/typessw.hxx46
-rw-r--r--sw/source/filter/ww8/writerhelper.cxx859
-rw-r--r--sw/source/filter/ww8/writerhelper.hxx988
-rw-r--r--sw/source/filter/ww8/writerwordglue.cxx1047
-rw-r--r--sw/source/filter/ww8/writerwordglue.hxx164
-rw-r--r--sw/source/filter/ww8/wrtw8esh.cxx2872
-rw-r--r--sw/source/filter/ww8/wrtw8nds.cxx2734
-rw-r--r--sw/source/filter/ww8/wrtw8num.cxx956
-rw-r--r--sw/source/filter/ww8/wrtw8sty.cxx2264
-rwxr-xr-xsw/source/filter/ww8/wrtww8.cxx3869
-rw-r--r--sw/source/filter/ww8/wrtww8.hxx1427
-rw-r--r--sw/source/filter/ww8/wrtww8gr.cxx887
-rw-r--r--sw/source/filter/ww8/ww8atr.cxx5315
-rw-r--r--sw/source/filter/ww8/ww8attributeoutput.hxx454
-rw-r--r--sw/source/filter/ww8/ww8glsy.cxx272
-rw-r--r--sw/source/filter/ww8/ww8glsy.hxx92
-rw-r--r--sw/source/filter/ww8/ww8graf.cxx3252
-rw-r--r--sw/source/filter/ww8/ww8graf.hxx108
-rw-r--r--sw/source/filter/ww8/ww8graf2.cxx824
-rw-r--r--sw/source/filter/ww8/ww8par.cxx5107
-rw-r--r--sw/source/filter/ww8/ww8par.hxx1639
-rw-r--r--sw/source/filter/ww8/ww8par2.cxx4753
-rw-r--r--sw/source/filter/ww8/ww8par2.hxx295
-rw-r--r--sw/source/filter/ww8/ww8par3.cxx2644
-rw-r--r--sw/source/filter/ww8/ww8par4.cxx581
-rw-r--r--sw/source/filter/ww8/ww8par5.cxx3628
-rw-r--r--sw/source/filter/ww8/ww8par6.cxx6214
-rw-r--r--sw/source/filter/ww8/ww8scan.cxx7365
-rw-r--r--sw/source/filter/ww8/ww8scan.hxx1784
-rw-r--r--sw/source/filter/ww8/ww8struc.hxx1059
-rw-r--r--sw/source/filter/xml/DocSettingNames.hxx26
-rw-r--r--sw/source/filter/xml/ForbiddenCharactersEnum.hxx41
-rw-r--r--sw/source/filter/xml/XMLRedlineImportHelper.cxx754
-rw-r--r--sw/source/filter/xml/XMLRedlineImportHelper.hxx164
-rw-r--r--sw/source/filter/xml/makefile.mk94
-rw-r--r--sw/source/filter/xml/swxml.cxx1143
-rw-r--r--sw/source/filter/xml/wrtxml.cxx701
-rw-r--r--sw/source/filter/xml/wrtxml.hxx105
-rw-r--r--sw/source/filter/xml/xmlbrsh.cxx258
-rw-r--r--sw/source/filter/xml/xmlbrshe.hxx56
-rw-r--r--sw/source/filter/xml/xmlbrshi.hxx86
-rw-r--r--sw/source/filter/xml/xmlexp.cxx995
-rw-r--r--sw/source/filter/xml/xmlexp.hxx190
-rw-r--r--sw/source/filter/xml/xmlexpit.cxx1048
-rw-r--r--sw/source/filter/xml/xmlexpit.hxx136
-rw-r--r--sw/source/filter/xml/xmlfmt.cxx1134
-rw-r--r--sw/source/filter/xml/xmlfmte.cxx363
-rw-r--r--sw/source/filter/xml/xmlfonte.cxx102
-rw-r--r--sw/source/filter/xml/xmlimp.cxx1745
-rw-r--r--sw/source/filter/xml/xmlimp.hxx231
-rw-r--r--sw/source/filter/xml/xmlimpit.cxx976
-rw-r--r--sw/source/filter/xml/xmlimpit.hxx110
-rw-r--r--sw/source/filter/xml/xmlitem.cxx90
-rw-r--r--sw/source/filter/xml/xmlitem.hxx80
-rw-r--r--sw/source/filter/xml/xmliteme.cxx256
-rw-r--r--sw/source/filter/xml/xmlitemi.cxx272
-rw-r--r--sw/source/filter/xml/xmlitemm.cxx296
-rw-r--r--sw/source/filter/xml/xmlithlp.cxx422
-rw-r--r--sw/source/filter/xml/xmlithlp.hxx101
-rw-r--r--sw/source/filter/xml/xmlitmap.hxx96
-rw-r--r--sw/source/filter/xml/xmlitmpr.cxx91
-rw-r--r--sw/source/filter/xml/xmlmeta.cxx200
-rw-r--r--sw/source/filter/xml/xmlscript.cxx65
-rw-r--r--sw/source/filter/xml/xmltble.cxx1250
-rw-r--r--sw/source/filter/xml/xmltbli.cxx2951
-rw-r--r--sw/source/filter/xml/xmltbli.hxx225
-rw-r--r--sw/source/filter/xml/xmltext.cxx107
-rw-r--r--sw/source/filter/xml/xmltexte.cxx767
-rw-r--r--sw/source/filter/xml/xmltexte.hxx88
-rw-r--r--sw/source/filter/xml/xmltexti.cxx1062
-rw-r--r--sw/source/filter/xml/xmltexti.hxx132
-rw-r--r--sw/source/ui/app/app.src665
-rw-r--r--sw/source/ui/app/appenv.cxx545
-rw-r--r--sw/source/ui/app/apphdl.cxx982
-rw-r--r--sw/source/ui/app/applab.cxx457
-rw-r--r--sw/source/ui/app/appopt.cxx657
-rwxr-xr-xsw/source/ui/app/docsh.cxx1446
-rw-r--r--sw/source/ui/app/docsh2.cxx1934
-rw-r--r--sw/source/ui/app/docshdrw.cxx84
-rw-r--r--sw/source/ui/app/docshini.cxx826
-rw-r--r--sw/source/ui/app/docst.cxx1305
-rw-r--r--sw/source/ui/app/docstyle.cxx2908
-rw-r--r--sw/source/ui/app/error.src214
-rw-r--r--sw/source/ui/app/mainwn.cxx165
-rw-r--r--sw/source/ui/app/makefile.mk101
-rw-r--r--sw/source/ui/app/mn.src1115
-rw-r--r--sw/source/ui/app/swdll.cxx156
-rw-r--r--sw/source/ui/app/swmodul1.cxx675
-rw-r--r--sw/source/ui/app/swmodule.cxx500
-rw-r--r--sw/source/ui/app/swwait.cxx75
-rw-r--r--sw/source/ui/cctrl/actctrl.cxx138
-rw-r--r--sw/source/ui/cctrl/makefile.mk59
-rw-r--r--sw/source/ui/cctrl/popbox.cxx91
-rw-r--r--sw/source/ui/cctrl/swlbox.cxx231
-rw-r--r--sw/source/ui/chrdlg/break.cxx252
-rw-r--r--sw/source/ui/chrdlg/break.hrc41
-rw-r--r--sw/source/ui/chrdlg/ccoll.cxx236
-rw-r--r--sw/source/ui/chrdlg/ccoll.hrc50
-rw-r--r--sw/source/ui/chrdlg/ccoll.src160
-rw-r--r--sw/source/ui/chrdlg/chardlg.cxx405
-rw-r--r--sw/source/ui/chrdlg/chardlg.hrc86
-rw-r--r--sw/source/ui/chrdlg/chardlg.src264
-rw-r--r--sw/source/ui/chrdlg/chrdlg.src77
-rw-r--r--sw/source/ui/chrdlg/drpcps.cxx894
-rw-r--r--sw/source/ui/chrdlg/drpcps.hrc51
-rw-r--r--sw/source/ui/chrdlg/drpcps.src226
-rw-r--r--sw/source/ui/chrdlg/makefile.mk69
-rw-r--r--sw/source/ui/chrdlg/numpara.cxx364
-rw-r--r--sw/source/ui/chrdlg/numpara.hrc53
-rw-r--r--sw/source/ui/chrdlg/numpara.src229
-rw-r--r--sw/source/ui/chrdlg/paradlg.hrc71
-rw-r--r--sw/source/ui/chrdlg/paradlg.src165
-rw-r--r--sw/source/ui/chrdlg/pardlg.cxx269
-rw-r--r--sw/source/ui/chrdlg/swbreak.src172
-rw-r--r--sw/source/ui/chrdlg/swuiccoll.cxx357
-rw-r--r--sw/source/ui/chrdlg/tblnumfm.cxx76
-rw-r--r--sw/source/ui/config/barcfg.cxx152
-rw-r--r--sw/source/ui/config/caption.cxx182
-rw-r--r--sw/source/ui/config/cfgitems.cxx461
-rw-r--r--sw/source/ui/config/config.hrc67
-rw-r--r--sw/source/ui/config/dbconfig.cxx143
-rw-r--r--sw/source/ui/config/fontcfg.cxx359
-rw-r--r--sw/source/ui/config/mailconfigpage.cxx622
-rw-r--r--sw/source/ui/config/mailconfigpage.hrc83
-rw-r--r--sw/source/ui/config/mailconfigpage.src421
-rw-r--r--sw/source/ui/config/makefile.mk87
-rw-r--r--sw/source/ui/config/modcfg.cxx1392
-rw-r--r--sw/source/ui/config/optcomp.cxx628
-rw-r--r--sw/source/ui/config/optcomp.hrc56
-rw-r--r--sw/source/ui/config/optcomp.src140
-rw-r--r--sw/source/ui/config/optdlg.hrc205
-rwxr-xr-xsw/source/ui/config/optdlg.src997
-rw-r--r--sw/source/ui/config/optload.cxx983
-rw-r--r--sw/source/ui/config/optload.hrc82
-rw-r--r--sw/source/ui/config/optload.src399
-rwxr-xr-xsw/source/ui/config/optpage.cxx2618
-rw-r--r--sw/source/ui/config/prtopt.cxx198
-rw-r--r--sw/source/ui/config/redlopt.hrc54
-rw-r--r--sw/source/ui/config/redlopt.src279
-rw-r--r--sw/source/ui/config/uinums.cxx673
-rw-r--r--sw/source/ui/config/usrpref.cxx691
-rw-r--r--sw/source/ui/config/viewopt.cxx643
-rw-r--r--sw/source/ui/dbui/addresslistdialog.cxx752
-rw-r--r--sw/source/ui/dbui/addresslistdialog.hrc48
-rw-r--r--sw/source/ui/dbui/addresslistdialog.hxx122
-rw-r--r--sw/source/ui/dbui/addresslistdialog.src126
-rw-r--r--sw/source/ui/dbui/createaddresslistdialog.cxx835
-rw-r--r--sw/source/ui/dbui/createaddresslistdialog.hrc64
-rw-r--r--sw/source/ui/dbui/createaddresslistdialog.hxx130
-rw-r--r--sw/source/ui/dbui/createaddresslistdialog.src225
-rw-r--r--sw/source/ui/dbui/customizeaddresslistdialog.cxx274
-rw-r--r--sw/source/ui/dbui/customizeaddresslistdialog.hrc49
-rw-r--r--sw/source/ui/dbui/customizeaddresslistdialog.hxx99
-rw-r--r--sw/source/ui/dbui/customizeaddresslistdialog.src162
-rw-r--r--sw/source/ui/dbui/dbinsdlg.cxx1945
-rw-r--r--sw/source/ui/dbui/dbinsdlg.hrc73
-rw-r--r--sw/source/ui/dbui/dbinsdlg.src309
-rw-r--r--sw/source/ui/dbui/dbmgr.cxx3070
-rw-r--r--sw/source/ui/dbui/dbtablepreviewdialog.cxx144
-rw-r--r--sw/source/ui/dbui/dbtablepreviewdialog.hrc35
-rw-r--r--sw/source/ui/dbui/dbtablepreviewdialog.hxx60
-rw-r--r--sw/source/ui/dbui/dbtablepreviewdialog.src61
-rw-r--r--sw/source/ui/dbui/dbtree.cxx622
-rw-r--r--sw/source/ui/dbui/dbui.cxx151
-rw-r--r--sw/source/ui/dbui/dbui.src283
-rw-r--r--sw/source/ui/dbui/maildispatcher.cxx296
-rw-r--r--sw/source/ui/dbui/mailmergechildwindow.cxx796
-rw-r--r--sw/source/ui/dbui/mailmergechildwindow.hrc61
-rw-r--r--sw/source/ui/dbui/mailmergechildwindow.src278
-rw-r--r--sw/source/ui/dbui/mailmergehelper.cxx1047
-rw-r--r--sw/source/ui/dbui/mailmergewizard.cxx336
-rw-r--r--sw/source/ui/dbui/mailmergewizard.hrc37
-rw-r--r--sw/source/ui/dbui/mailmergewizard.src79
-rw-r--r--sw/source/ui/dbui/makefile.mk122
-rw-r--r--sw/source/ui/dbui/mmaddressblockpage.cxx1827
-rw-r--r--sw/source/ui/dbui/mmaddressblockpage.hrc115
-rw-r--r--sw/source/ui/dbui/mmaddressblockpage.hxx332
-rw-r--r--sw/source/ui/dbui/mmaddressblockpage.src632
-rw-r--r--sw/source/ui/dbui/mmconfigitem.cxx1986
-rw-r--r--sw/source/ui/dbui/mmdocselectpage.cxx224
-rw-r--r--sw/source/ui/dbui/mmdocselectpage.hrc37
-rw-r--r--sw/source/ui/dbui/mmdocselectpage.hxx74
-rw-r--r--sw/source/ui/dbui/mmdocselectpage.src100
-rw-r--r--sw/source/ui/dbui/mmgreetingspage.cxx619
-rw-r--r--sw/source/ui/dbui/mmgreetingspage.hrc65
-rw-r--r--sw/source/ui/dbui/mmgreetingspage.hxx176
-rw-r--r--sw/source/ui/dbui/mmgreetingspage.src255
-rw-r--r--sw/source/ui/dbui/mmlayoutpage.cxx816
-rw-r--r--sw/source/ui/dbui/mmlayoutpage.hrc48
-rw-r--r--sw/source/ui/dbui/mmlayoutpage.hxx114
-rw-r--r--sw/source/ui/dbui/mmlayoutpage.src159
-rw-r--r--sw/source/ui/dbui/mmmergepage.cxx123
-rw-r--r--sw/source/ui/dbui/mmmergepage.hrc43
-rw-r--r--sw/source/ui/dbui/mmmergepage.hxx73
-rw-r--r--sw/source/ui/dbui/mmmergepage.src101
-rw-r--r--sw/source/ui/dbui/mmoutputpage.cxx1419
-rw-r--r--sw/source/ui/dbui/mmoutputpage.hrc103
-rw-r--r--sw/source/ui/dbui/mmoutputpage.hxx242
-rw-r--r--sw/source/ui/dbui/mmoutputpage.src463
-rw-r--r--sw/source/ui/dbui/mmoutputtypepage.cxx113
-rw-r--r--sw/source/ui/dbui/mmoutputtypepage.hrc44
-rw-r--r--sw/source/ui/dbui/mmoutputtypepage.hxx67
-rw-r--r--sw/source/ui/dbui/mmoutputtypepage.src99
-rw-r--r--sw/source/ui/dbui/mmpreparemergepage.cxx204
-rw-r--r--sw/source/ui/dbui/mmpreparemergepage.hrc46
-rw-r--r--sw/source/ui/dbui/mmpreparemergepage.hxx77
-rw-r--r--sw/source/ui/dbui/mmpreparemergepage.src125
-rw-r--r--sw/source/ui/dbui/selectdbtabledialog.cxx223
-rw-r--r--sw/source/ui/dbui/selectdbtabledialog.hrc43
-rw-r--r--sw/source/ui/dbui/selectdbtabledialog.hxx79
-rw-r--r--sw/source/ui/dbui/selectdbtabledialog.src98
-rw-r--r--sw/source/ui/dbui/swdbtoolsclient.cxx248
-rw-r--r--sw/source/ui/dialog/SwSpellDialogChildWindow.cxx934
-rw-r--r--sw/source/ui/dialog/abstract.cxx92
-rw-r--r--sw/source/ui/dialog/abstract.hrc36
-rw-r--r--sw/source/ui/dialog/abstract.src153
-rw-r--r--sw/source/ui/dialog/addrdlg.cxx69
-rw-r--r--sw/source/ui/dialog/ascfldlg.cxx450
-rw-r--r--sw/source/ui/dialog/ascfldlg.hrc44
-rw-r--r--sw/source/ui/dialog/ascfldlg.src177
-rw-r--r--sw/source/ui/dialog/dialog.src62
-rw-r--r--sw/source/ui/dialog/docstdlg.cxx197
-rw-r--r--sw/source/ui/dialog/docstdlg.hrc47
-rw-r--r--sw/source/ui/dialog/docstdlg.src183
-rw-r--r--sw/source/ui/dialog/macassgn.cxx196
-rw-r--r--sw/source/ui/dialog/makefile.mk99
-rw-r--r--sw/source/ui/dialog/regionsw.cxx264
-rw-r--r--sw/source/ui/dialog/regionsw.hrc116
-rw-r--r--sw/source/ui/dialog/regionsw.src857
-rw-r--r--sw/source/ui/dialog/swabstdlg.cxx51
-rw-r--r--sw/source/ui/dialog/swdialmgr.cxx54
-rw-r--r--sw/source/ui/dialog/swdlgfact.cxx1742
-rw-r--r--sw/source/ui/dialog/swdlgfact.hxx586
-rw-r--r--sw/source/ui/dialog/swuiexp.cxx55
-rw-r--r--sw/source/ui/dialog/swwrtshitem.cxx51
-rw-r--r--sw/source/ui/dialog/uiregionsw.cxx2457
-rw-r--r--sw/source/ui/dialog/wordcountdialog.cxx99
-rw-r--r--sw/source/ui/dialog/wordcountdialog.hrc43
-rw-r--r--sw/source/ui/dialog/wordcountdialog.src115
-rwxr-xr-xsw/source/ui/dochdl/dochdl.src76
-rwxr-xr-xsw/source/ui/dochdl/gloshdl.cxx898
-rw-r--r--sw/source/ui/dochdl/makefile.mk65
-rw-r--r--sw/source/ui/dochdl/selglos.cxx77
-rw-r--r--sw/source/ui/dochdl/selglos.hrc31
-rw-r--r--sw/source/ui/dochdl/selglos.src111
-rw-r--r--sw/source/ui/dochdl/swdtflvr.cxx3868
-rw-r--r--sw/source/ui/docvw/AnchorOverlayObject.cxx467
-rw-r--r--sw/source/ui/docvw/AnchorOverlayObject.hxx143
-rw-r--r--sw/source/ui/docvw/AnnotationMenuButton.cxx222
-rw-r--r--sw/source/ui/docvw/AnnotationMenuButton.hxx63
-rw-r--r--sw/source/ui/docvw/AnnotationWin.cxx292
-rw-r--r--sw/source/ui/docvw/PostItMgr.cxx2049
-rw-r--r--sw/source/ui/docvw/ShadowOverlayObject.cxx268
-rw-r--r--sw/source/ui/docvw/ShadowOverlayObject.hxx80
-rw-r--r--sw/source/ui/docvw/SidebarTxtControl.cxx428
-rw-r--r--sw/source/ui/docvw/SidebarTxtControl.hxx87
-rw-r--r--sw/source/ui/docvw/SidebarTxtControlAcc.cxx317
-rw-r--r--sw/source/ui/docvw/SidebarTxtControlAcc.hxx56
-rwxr-xr-xsw/source/ui/docvw/SidebarWin.cxx1392
-rw-r--r--sw/source/ui/docvw/SidebarWinAcc.cxx162
-rw-r--r--sw/source/ui/docvw/SidebarWinAcc.hxx67
-rw-r--r--sw/source/ui/docvw/access.src102
-rw-r--r--sw/source/ui/docvw/annotation.hrc54
-rw-r--r--sw/source/ui/docvw/annotation.src68
-rw-r--r--sw/source/ui/docvw/docvw.hrc93
-rw-r--r--sw/source/ui/docvw/docvw.src296
-rw-r--r--sw/source/ui/docvw/edtdd.cxx527
-rw-r--r--sw/source/ui/docvw/edtwin.cxx5793
-rw-r--r--sw/source/ui/docvw/edtwin2.cxx593
-rw-r--r--sw/source/ui/docvw/edtwin3.cxx216
-rw-r--r--sw/source/ui/docvw/frmsidebarwincontainer.cxx216
-rw-r--r--sw/source/ui/docvw/frmsidebarwincontainer.hxx73
-rw-r--r--sw/source/ui/docvw/makefile.mk69
-rw-r--r--sw/source/ui/docvw/romenu.cxx519
-rw-r--r--sw/source/ui/docvw/romenu.hxx75
-rw-r--r--sw/source/ui/docvw/srcedtw.cxx1103
-rw-r--r--sw/source/ui/envelp/envelp.src87
-rw-r--r--sw/source/ui/envelp/envfmt.cxx635
-rw-r--r--sw/source/ui/envelp/envfmt.hrc82
-rw-r--r--sw/source/ui/envelp/envfmt.hxx112
-rw-r--r--sw/source/ui/envelp/envfmt.src315
-rw-r--r--sw/source/ui/envelp/envimg.cxx381
-rw-r--r--sw/source/ui/envelp/envlop.hrc65
-rw-r--r--sw/source/ui/envelp/envlop.src206
-rw-r--r--sw/source/ui/envelp/envlop1.cxx441
-rw-r--r--sw/source/ui/envelp/envprt.cxx259
-rw-r--r--sw/source/ui/envelp/envprt.hrc96
-rw-r--r--sw/source/ui/envelp/envprt.hxx93
-rw-r--r--sw/source/ui/envelp/envprt.src292
-rw-r--r--sw/source/ui/envelp/label.hrc128
-rw-r--r--sw/source/ui/envelp/label.src714
-rw-r--r--sw/source/ui/envelp/label1.cxx1111
-rw-r--r--sw/source/ui/envelp/labelcfg.cxx302
-rw-r--r--sw/source/ui/envelp/labelexp.cxx281
-rw-r--r--sw/source/ui/envelp/labfmt.cxx712
-rw-r--r--sw/source/ui/envelp/labfmt.hrc89
-rw-r--r--sw/source/ui/envelp/labfmt.hxx175
-rw-r--r--sw/source/ui/envelp/labfmt.src359
-rw-r--r--sw/source/ui/envelp/labimg.cxx482
-rw-r--r--sw/source/ui/envelp/labimp.hxx118
-rw-r--r--sw/source/ui/envelp/labprt.cxx242
-rw-r--r--sw/source/ui/envelp/labprt.hrc59
-rw-r--r--sw/source/ui/envelp/labprt.hxx86
-rw-r--r--sw/source/ui/envelp/labprt.src151
-rw-r--r--sw/source/ui/envelp/mailmrge.cxx941
-rw-r--r--sw/source/ui/envelp/mailmrge.hrc92
-rw-r--r--sw/source/ui/envelp/mailmrge.src428
-rw-r--r--sw/source/ui/envelp/makefile.mk80
-rw-r--r--sw/source/ui/envelp/swuilabimp.hxx254
-rw-r--r--sw/source/ui/envelp/syncbtn.cxx112
-rw-r--r--sw/source/ui/fldui/DropDownFieldDialog.cxx147
-rw-r--r--sw/source/ui/fldui/DropDownFieldDialog.hrc37
-rw-r--r--sw/source/ui/fldui/DropDownFieldDialog.src122
-rw-r--r--sw/source/ui/fldui/FldRefTreeListBox.cxx81
-rw-r--r--sw/source/ui/fldui/FldRefTreeListBox.hxx44
-rw-r--r--sw/source/ui/fldui/changedb.cxx363
-rw-r--r--sw/source/ui/fldui/changedb.hrc62
-rw-r--r--sw/source/ui/fldui/changedb.src128
-rw-r--r--sw/source/ui/fldui/flddb.cxx583
-rw-r--r--sw/source/ui/fldui/flddb.hxx106
-rw-r--r--sw/source/ui/fldui/flddb.src198
-rw-r--r--sw/source/ui/fldui/flddinf.cxx537
-rw-r--r--sw/source/ui/fldui/flddinf.hxx89
-rw-r--r--sw/source/ui/fldui/flddinf.src138
-rw-r--r--sw/source/ui/fldui/flddok.cxx731
-rw-r--r--sw/source/ui/fldui/flddok.hxx95
-rw-r--r--sw/source/ui/fldui/flddok.src195
-rw-r--r--sw/source/ui/fldui/fldedt.cxx421
-rw-r--r--sw/source/ui/fldui/fldfunc.cxx744
-rw-r--r--sw/source/ui/fldui/fldfunc.hxx113
-rw-r--r--sw/source/ui/fldui/fldfunc.src269
-rw-r--r--sw/source/ui/fldui/fldmgr.cxx1793
-rw-r--r--sw/source/ui/fldui/fldpage.cxx421
-rw-r--r--sw/source/ui/fldui/fldpage.hxx107
-rw-r--r--sw/source/ui/fldui/fldref.cxx1073
-rw-r--r--sw/source/ui/fldui/fldref.hxx114
-rw-r--r--sw/source/ui/fldui/fldref.src145
-rw-r--r--sw/source/ui/fldui/fldtdlg.cxx386
-rw-r--r--sw/source/ui/fldui/fldtdlg.hrc171
-rw-r--r--sw/source/ui/fldui/fldtdlg.src118
-rw-r--r--sw/source/ui/fldui/fldui.src684
-rw-r--r--sw/source/ui/fldui/fldvar.cxx1383
-rw-r--r--sw/source/ui/fldui/fldvar.hxx126
-rw-r--r--sw/source/ui/fldui/fldvar.src236
-rw-r--r--sw/source/ui/fldui/fldwrap.cxx212
-rw-r--r--sw/source/ui/fldui/inpdlg.cxx209
-rw-r--r--sw/source/ui/fldui/inpdlg.hrc34
-rw-r--r--sw/source/ui/fldui/inpdlg.src131
-rw-r--r--sw/source/ui/fldui/javaedit.cxx366
-rw-r--r--sw/source/ui/fldui/javaedit.hrc51
-rw-r--r--sw/source/ui/fldui/javaedit.src172
-rw-r--r--sw/source/ui/fldui/makefile.mk94
-rw-r--r--sw/source/ui/fldui/xfldui.cxx184
-rw-r--r--sw/source/ui/fmtui/fmtui.src88
-rw-r--r--sw/source/ui/fmtui/makefile.mk51
-rw-r--r--sw/source/ui/fmtui/tmpdlg.cxx647
-rw-r--r--sw/source/ui/fmtui/tmpdlg.src380
-rw-r--r--sw/source/ui/frmdlg/colex.cxx610
-rw-r--r--sw/source/ui/frmdlg/colmgr.cxx191
-rw-r--r--sw/source/ui/frmdlg/column.cxx1463
-rw-r--r--sw/source/ui/frmdlg/column.hrc87
-rw-r--r--sw/source/ui/frmdlg/column.src404
-rw-r--r--sw/source/ui/frmdlg/cption.cxx648
-rw-r--r--sw/source/ui/frmdlg/cption.hrc78
-rw-r--r--sw/source/ui/frmdlg/cption.src329
-rw-r--r--sw/source/ui/frmdlg/frmdlg.cxx219
-rw-r--r--sw/source/ui/frmdlg/frmmgr.cxx623
-rw-r--r--sw/source/ui/frmdlg/frmpage.cxx3249
-rw-r--r--sw/source/ui/frmdlg/frmpage.hrc146
-rw-r--r--sw/source/ui/frmdlg/frmpage.src840
-rw-r--r--sw/source/ui/frmdlg/frmui.src133
-rw-r--r--sw/source/ui/frmdlg/makefile.mk79
-rw-r--r--sw/source/ui/frmdlg/pattern.cxx75
-rw-r--r--sw/source/ui/frmdlg/pattern.hrc46
-rw-r--r--sw/source/ui/frmdlg/uiborder.cxx79
-rw-r--r--sw/source/ui/frmdlg/wrap.cxx785
-rw-r--r--sw/source/ui/frmdlg/wrap.hrc66
-rw-r--r--sw/source/ui/frmdlg/wrap.src257
-rw-r--r--sw/source/ui/globdoc/globdoc.cxx91
-rw-r--r--sw/source/ui/globdoc/globdoc.src45
-rw-r--r--sw/source/ui/globdoc/makefile.mk51
-rw-r--r--sw/source/ui/inc/DropDownFieldDialog.hxx71
-rw-r--r--sw/source/ui/inc/SidebarWindowsConsts.hxx41
-rw-r--r--sw/source/ui/inc/SwSpellDialogChildWindow.hxx76
-rw-r--r--sw/source/ui/inc/SwXFilterOptions.hxx113
-rw-r--r--sw/source/ui/inc/abstract.hxx73
-rw-r--r--sw/source/ui/inc/actctrl.hxx98
-rw-r--r--sw/source/ui/inc/addrdlg.hxx44
-rwxr-xr-xsw/source/ui/inc/annotsh.hxx77
-rw-r--r--sw/source/ui/inc/app.hrc183
-rw-r--r--sw/source/ui/inc/ascfldlg.hxx78
-rw-r--r--sw/source/ui/inc/autoedit.hxx50
-rw-r--r--sw/source/ui/inc/barcfg.hxx47
-rw-r--r--sw/source/ui/inc/basesh.hxx127
-rw-r--r--sw/source/ui/inc/beziersh.hxx44
-rw-r--r--sw/source/ui/inc/bmpwin.hxx69
-rw-r--r--sw/source/ui/inc/bookctrl.hxx57
-rw-r--r--sw/source/ui/inc/bookmark.hxx88
-rw-r--r--sw/source/ui/inc/break.hxx92
-rw-r--r--sw/source/ui/inc/caption.hxx118
-rw-r--r--sw/source/ui/inc/cfgdesc.hxx69
-rw-r--r--sw/source/ui/inc/cfgid.h40
-rw-r--r--sw/source/ui/inc/cfgitems.hxx242
-rw-r--r--sw/source/ui/inc/changedb.hxx92
-rw-r--r--sw/source/ui/inc/chartins.hxx35
-rw-r--r--sw/source/ui/inc/chldwrap.hxx55
-rw-r--r--sw/source/ui/inc/chrdlg.hxx119
-rw-r--r--sw/source/ui/inc/cnttab.hxx90
-rw-r--r--sw/source/ui/inc/colex.hxx118
-rw-r--r--sw/source/ui/inc/colmgr.hxx131
-rw-r--r--sw/source/ui/inc/column.hxx227
-rw-r--r--sw/source/ui/inc/conarc.hxx57
-rw-r--r--sw/source/ui/inc/concustomshape.hxx72
-rw-r--r--sw/source/ui/inc/condedit.hxx72
-rw-r--r--sw/source/ui/inc/conform.hxx47
-rw-r--r--sw/source/ui/inc/conpoly.hxx55
-rw-r--r--sw/source/ui/inc/conrect.hxx60
-rw-r--r--sw/source/ui/inc/content.hxx225
-rw-r--r--sw/source/ui/inc/conttree.hxx334
-rw-r--r--sw/source/ui/inc/convert.hxx91
-rw-r--r--sw/source/ui/inc/cption.hxx137
-rw-r--r--sw/source/ui/inc/dbconfig.hxx54
-rw-r--r--sw/source/ui/inc/dbinsdlg.hxx188
-rw-r--r--sw/source/ui/inc/dbtree.hxx86
-rw-r--r--sw/source/ui/inc/dbui.hxx86
-rw-r--r--sw/source/ui/inc/dialmgr.hxx48
-rw-r--r--sw/source/ui/inc/docfnote.hxx50
-rw-r--r--sw/source/ui/inc/docstdlg.hxx85
-rw-r--r--sw/source/ui/inc/drawbase.hxx90
-rw-r--r--sw/source/ui/inc/drawsh.hxx52
-rw-r--r--sw/source/ui/inc/drformsh.hxx47
-rw-r--r--sw/source/ui/inc/drpcps.hxx125
-rw-r--r--sw/source/ui/inc/drwbassh.hxx64
-rw-r--r--sw/source/ui/inc/drwtxtsh.hxx85
-rw-r--r--sw/source/ui/inc/dselect.hxx52
-rw-r--r--sw/source/ui/inc/edtwin.hxx307
-rw-r--r--sw/source/ui/inc/envimg.hxx100
-rw-r--r--sw/source/ui/inc/envlop.hxx149
-rw-r--r--sw/source/ui/inc/fldedt.hxx66
-rw-r--r--sw/source/ui/inc/fldmgr.hxx234
-rw-r--r--sw/source/ui/inc/fldtdlg.hxx68
-rw-r--r--sw/source/ui/inc/fldwrap.hxx63
-rw-r--r--sw/source/ui/inc/fontcfg.hxx120
-rw-r--r--sw/source/ui/inc/formatclipboard.hxx69
-rw-r--r--sw/source/ui/inc/formedt.hxx108
-rw-r--r--sw/source/ui/inc/frmdlg.hxx66
-rw-r--r--sw/source/ui/inc/frmmgr.hxx193
-rw-r--r--sw/source/ui/inc/frmpage.hxx344
-rw-r--r--sw/source/ui/inc/frmsh.hxx50
-rw-r--r--sw/source/ui/inc/frmui.hrc144
-rw-r--r--sw/source/ui/inc/globals.h37
-rw-r--r--sw/source/ui/inc/globdoc.hrc64
-rw-r--r--sw/source/ui/inc/glosbib.hxx121
-rw-r--r--sw/source/ui/inc/glosdoc.hxx148
-rw-r--r--sw/source/ui/inc/gloshdl.hxx110
-rw-r--r--sw/source/ui/inc/gloslst.hxx89
-rw-r--r--sw/source/ui/inc/glossary.hxx197
-rw-r--r--sw/source/ui/inc/glshell.hxx114
-rw-r--r--sw/source/ui/inc/grfsh.hxx44
-rw-r--r--sw/source/ui/inc/hidfunc.h350
-rw-r--r--sw/source/ui/inc/hyp.hxx67
-rw-r--r--sw/source/ui/inc/idxmrk.hxx73
-rw-r--r--sw/source/ui/inc/imaildsplistener.hxx77
-rw-r--r--sw/source/ui/inc/initui.hxx79
-rw-r--r--sw/source/ui/inc/inpdlg.hxx78
-rw-r--r--sw/source/ui/inc/inputwin.hxx138
-rw-r--r--sw/source/ui/inc/insfnote.hxx97
-rw-r--r--sw/source/ui/inc/insrule.hxx66
-rw-r--r--sw/source/ui/inc/instable.hxx100
-rw-r--r--sw/source/ui/inc/javaedit.hxx118
-rw-r--r--sw/source/ui/inc/label.hxx99
-rw-r--r--sw/source/ui/inc/labelcfg.hxx59
-rw-r--r--sw/source/ui/inc/labimg.hxx131
-rwxr-xr-xsw/source/ui/inc/langhelper.hxx68
-rw-r--r--sw/source/ui/inc/linenum.hxx110
-rw-r--r--sw/source/ui/inc/listsh.hxx44
-rw-r--r--sw/source/ui/inc/macassgn.hxx54
-rw-r--r--sw/source/ui/inc/mailconfigpage.hxx110
-rw-r--r--sw/source/ui/inc/maildispatcher.hxx168
-rw-r--r--sw/source/ui/inc/mailmergechildwindow.hxx66
-rw-r--r--sw/source/ui/inc/mailmergehelper.hxx349
-rw-r--r--sw/source/ui/inc/mailmergewizard.hxx103
-rw-r--r--sw/source/ui/inc/mailmrge.hxx204
-rw-r--r--sw/source/ui/inc/makefile.mk42
-rw-r--r--sw/source/ui/inc/mediash.hxx43
-rw-r--r--sw/source/ui/inc/mergetbl.hxx59
-rw-r--r--sw/source/ui/inc/misc.hrc106
-rw-r--r--sw/source/ui/inc/mmconfigitem.hxx279
-rw-r--r--sw/source/ui/inc/multmrk.hxx77
-rw-r--r--sw/source/ui/inc/navicfg.hxx119
-rw-r--r--sw/source/ui/inc/navicont.hxx61
-rw-r--r--sw/source/ui/inc/navipi.hxx198
-rw-r--r--sw/source/ui/inc/num.hxx205
-rw-r--r--sw/source/ui/inc/numberingtypelistbox.hxx58
-rw-r--r--sw/source/ui/inc/numfmtlb.hxx87
-rw-r--r--sw/source/ui/inc/numpara.hxx98
-rw-r--r--sw/source/ui/inc/numprevw.hxx71
-rw-r--r--sw/source/ui/inc/olesh.hxx48
-rw-r--r--sw/source/ui/inc/olmenu.hxx91
-rw-r--r--sw/source/ui/inc/optcomp.hxx87
-rw-r--r--sw/source/ui/inc/optload.hxx213
-rw-r--r--sw/source/ui/inc/optpage.hxx502
-rw-r--r--sw/source/ui/inc/outline.hxx166
-rw-r--r--sw/source/ui/inc/pardlg.hxx39
-rw-r--r--sw/source/ui/inc/pattern.hxx44
-rw-r--r--sw/source/ui/inc/pgfnote.hxx93
-rw-r--r--sw/source/ui/inc/pggrid.hxx113
-rw-r--r--sw/source/ui/inc/popbox.hxx67
-rw-r--r--sw/source/ui/inc/popup.hrc58
-rw-r--r--sw/source/ui/inc/prcntfld.hxx99
-rw-r--r--sw/source/ui/inc/prtopt.hxx55
-rw-r--r--sw/source/ui/inc/pview.hxx337
-rw-r--r--sw/source/ui/inc/redlndlg.hxx189
-rw-r--r--sw/source/ui/inc/regionsw.hxx336
-rw-r--r--sw/source/ui/inc/ribbar.hrc135
-rw-r--r--sw/source/ui/inc/rowht.hxx67
-rw-r--r--sw/source/ui/inc/scroll.hxx71
-rw-r--r--sw/source/ui/inc/selglos.hxx74
-rw-r--r--sw/source/ui/inc/sharedconnection.hxx36
-rw-r--r--sw/source/ui/inc/shdwcrsr.hxx67
-rw-r--r--sw/source/ui/inc/shells.hrc112
-rw-r--r--sw/source/ui/inc/split.hxx76
-rw-r--r--sw/source/ui/inc/splittbl.hxx61
-rw-r--r--sw/source/ui/inc/srcedtw.hxx164
-rw-r--r--sw/source/ui/inc/srcview.hxx126
-rw-r--r--sw/source/ui/inc/srtdlg.hxx118
-rw-r--r--sw/source/ui/inc/stmenu.hxx85
-rw-r--r--sw/source/ui/inc/swcont.hxx113
-rw-r--r--sw/source/ui/inc/swdtflvr.hxx222
-rw-r--r--sw/source/ui/inc/swlbox.hxx128
-rw-r--r--sw/source/ui/inc/swmn_tmpl.hrc382
-rw-r--r--sw/source/ui/inc/swmodalredlineacceptdlg.hxx48
-rw-r--r--sw/source/ui/inc/swrenamexnameddlg.hxx87
-rw-r--r--sw/source/ui/inc/swtablerep.hxx94
-rw-r--r--sw/source/ui/inc/swuiccoll.hxx89
-rw-r--r--sw/source/ui/inc/swuicnttab.hxx537
-rw-r--r--sw/source/ui/inc/swuiidxmrk.hxx295
-rw-r--r--sw/source/ui/inc/swuipardlg.hxx51
-rw-r--r--sw/source/ui/inc/swvset.hxx41
-rw-r--r--sw/source/ui/inc/swwrtshitem.hxx52
-rw-r--r--sw/source/ui/inc/syncbtn.hxx71
-rw-r--r--sw/source/ui/inc/table.hrc50
-rw-r--r--sw/source/ui/inc/tabledlg.hxx55
-rw-r--r--sw/source/ui/inc/tablemgr.hxx95
-rw-r--r--sw/source/ui/inc/tabsh.hxx58
-rw-r--r--sw/source/ui/inc/tautofmt.hxx118
-rw-r--r--sw/source/ui/inc/tblctrl.hxx57
-rw-r--r--sw/source/ui/inc/tblnumfm.hxx44
-rw-r--r--sw/source/ui/inc/tbxanchr.hxx49
-rw-r--r--sw/source/ui/inc/textcontrolcombo.hxx66
-rw-r--r--sw/source/ui/inc/textsh.hxx90
-rw-r--r--sw/source/ui/inc/tmpdlg.hxx66
-rw-r--r--sw/source/ui/inc/tmplctrl.hxx58
-rw-r--r--sw/source/ui/inc/toolbox_tmpl.hrc563
-rw-r--r--sw/source/ui/inc/toxmgr.hxx324
-rw-r--r--sw/source/ui/inc/uiborder.hxx49
-rw-r--r--sw/source/ui/inc/uiitems.hxx116
-rw-r--r--sw/source/ui/inc/uinums.hxx136
-rw-r--r--sw/source/ui/inc/uitool.hxx92
-rw-r--r--sw/source/ui/inc/uivwimp.hxx191
-rw-r--r--sw/source/ui/inc/unodispatch.hxx134
-rw-r--r--sw/source/ui/inc/unotools.hxx135
-rw-r--r--sw/source/ui/inc/unotxvw.hxx274
-rw-r--r--sw/source/ui/inc/usrpref.hxx277
-rw-r--r--sw/source/ui/inc/utlui.hrc194
-rw-r--r--sw/source/ui/inc/view.hxx698
-rw-r--r--sw/source/ui/inc/viewlayoutctrl.hxx56
-rw-r--r--sw/source/ui/inc/web.hrc74
-rw-r--r--sw/source/ui/inc/wformsh.hxx45
-rw-r--r--sw/source/ui/inc/wfrmsh.hxx48
-rw-r--r--sw/source/ui/inc/wgrfsh.hxx45
-rw-r--r--sw/source/ui/inc/wlistsh.hxx42
-rw-r--r--sw/source/ui/inc/wolesh.hxx48
-rw-r--r--sw/source/ui/inc/wordcountdialog.hxx65
-rw-r--r--sw/source/ui/inc/workctrl.hxx225
-rw-r--r--sw/source/ui/inc/wrap.hxx151
-rw-r--r--sw/source/ui/inc/wrtsh.hxx653
-rw-r--r--sw/source/ui/inc/wtabsh.hxx42
-rw-r--r--sw/source/ui/inc/wtextsh.hxx48
-rw-r--r--sw/source/ui/inc/wview.hxx51
-rw-r--r--sw/source/ui/inc/zoomctrl.hxx52
-rw-r--r--sw/source/ui/index/cntex.cxx516
-rw-r--r--sw/source/ui/index/cnttab.cxx4513
-rw-r--r--sw/source/ui/index/cnttab.hrc284
-rw-r--r--sw/source/ui/index/cnttab.src1278
-rw-r--r--sw/source/ui/index/idxmrk.cxx153
-rw-r--r--sw/source/ui/index/idxmrk.hrc108
-rw-r--r--sw/source/ui/index/idxmrk.src635
-rw-r--r--sw/source/ui/index/makefile.mk68
-rw-r--r--sw/source/ui/index/multmrk.cxx98
-rw-r--r--sw/source/ui/index/multmrk.hrc34
-rw-r--r--sw/source/ui/index/multmrk.src118
-rw-r--r--sw/source/ui/index/swuiidxmrk.cxx1959
-rw-r--r--sw/source/ui/index/toxmgr.cxx525
-rw-r--r--sw/source/ui/lingu/cvdata.mac19
-rw-r--r--sw/source/ui/lingu/hhcwrp.cxx818
-rw-r--r--sw/source/ui/lingu/hyp.cxx176
-rw-r--r--sw/source/ui/lingu/makefile.mk56
-rw-r--r--sw/source/ui/lingu/olmenu.cxx939
-rw-r--r--sw/source/ui/lingu/olmenu.hrc97
-rw-r--r--sw/source/ui/lingu/olmenu.src137
-rw-r--r--sw/source/ui/lingu/sdrhhcwrap.cxx235
-rw-r--r--sw/source/ui/lingu/sdrhhcwrap.hxx69
-rw-r--r--sw/source/ui/makefile.mk101
-rw-r--r--sw/source/ui/misc/autocorr.src29
-rw-r--r--sw/source/ui/misc/bookmark.cxx304
-rw-r--r--sw/source/ui/misc/bookmark.hrc34
-rw-r--r--sw/source/ui/misc/bookmark.src116
-rw-r--r--sw/source/ui/misc/docfnote.cxx500
-rw-r--r--sw/source/ui/misc/docfnote.hrc60
-rw-r--r--sw/source/ui/misc/docfnote.src537
-rw-r--r--sw/source/ui/misc/glosbib.cxx580
-rw-r--r--sw/source/ui/misc/glosbib.hrc41
-rw-r--r--sw/source/ui/misc/glosbib.src178
-rw-r--r--sw/source/ui/misc/glosdoc.cxx806
-rw-r--r--sw/source/ui/misc/glossary.cxx1305
-rw-r--r--sw/source/ui/misc/glossary.hrc91
-rw-r--r--sw/source/ui/misc/glossary.src463
-rw-r--r--sw/source/ui/misc/glshell.cxx353
-rw-r--r--sw/source/ui/misc/impfnote.hxx120
-rw-r--r--sw/source/ui/misc/insfnote.cxx353
-rw-r--r--sw/source/ui/misc/insfnote.hrc41
-rw-r--r--sw/source/ui/misc/insfnote.src167
-rw-r--r--sw/source/ui/misc/insrule.cxx226
-rw-r--r--sw/source/ui/misc/insrule.hrc35
-rw-r--r--sw/source/ui/misc/insrule.src114
-rw-r--r--sw/source/ui/misc/linenum.cxx335
-rw-r--r--sw/source/ui/misc/linenum.hrc50
-rw-r--r--sw/source/ui/misc/linenum.src268
-rw-r--r--sw/source/ui/misc/makefile.mk96
-rw-r--r--sw/source/ui/misc/num.cxx1173
-rw-r--r--sw/source/ui/misc/num.hrc55
-rw-r--r--sw/source/ui/misc/num.src362
-rw-r--r--sw/source/ui/misc/numberingtypelistbox.cxx177
-rw-r--r--sw/source/ui/misc/numberingtypelistbox.src98
-rw-r--r--sw/source/ui/misc/outline.cxx1343
-rw-r--r--sw/source/ui/misc/outline.hrc98
-rw-r--r--sw/source/ui/misc/outline.src373
-rw-r--r--sw/source/ui/misc/pgfnote.cxx373
-rw-r--r--sw/source/ui/misc/pgfnote.hrc44
-rw-r--r--sw/source/ui/misc/pgfnote.src192
-rw-r--r--sw/source/ui/misc/pggrid.cxx521
-rw-r--r--sw/source/ui/misc/pggrid.hrc52
-rw-r--r--sw/source/ui/misc/pggrid.src231
-rw-r--r--sw/source/ui/misc/redlndlg.cxx1418
-rw-r--r--sw/source/ui/misc/redlndlg.hrc38
-rw-r--r--sw/source/ui/misc/redlndlg.src148
-rw-r--r--sw/source/ui/misc/srtdlg.cxx492
-rw-r--r--sw/source/ui/misc/srtdlg.hrc65
-rw-r--r--sw/source/ui/misc/srtdlg.src384
-rw-r--r--sw/source/ui/misc/swmodalredlineacceptdlg.cxx147
-rw-r--r--sw/source/ui/ribbar/conarc.cxx161
-rw-r--r--sw/source/ui/ribbar/concustomshape.cxx252
-rw-r--r--sw/source/ui/ribbar/conform.cxx144
-rw-r--r--sw/source/ui/ribbar/conpoly.cxx163
-rw-r--r--sw/source/ui/ribbar/conrect.cxx229
-rw-r--r--sw/source/ui/ribbar/drawbase.cxx737
-rw-r--r--sw/source/ui/ribbar/dselect.cxx102
-rw-r--r--sw/source/ui/ribbar/inputwin.cxx685
-rw-r--r--sw/source/ui/ribbar/inputwin.hrc84
-rw-r--r--sw/source/ui/ribbar/inputwin.src345
-rw-r--r--sw/source/ui/ribbar/makefile.mk71
-rw-r--r--sw/source/ui/ribbar/tblctrl.cxx93
-rw-r--r--sw/source/ui/ribbar/tblctrl.hrc35
-rw-r--r--sw/source/ui/ribbar/tblctrl.src94
-rw-r--r--sw/source/ui/ribbar/tbxanchr.cxx166
-rw-r--r--sw/source/ui/ribbar/tbxanchr.src107
-rw-r--r--sw/source/ui/ribbar/workctrl.cxx943
-rw-r--r--sw/source/ui/ribbar/workctrl.hrc88
-rw-r--r--sw/source/ui/ribbar/workctrl.src596
-rwxr-xr-xsw/source/ui/shells/annotsh.cxx1686
-rw-r--r--sw/source/ui/shells/basesh.cxx2933
-rw-r--r--sw/source/ui/shells/beziersh.cxx356
-rw-r--r--sw/source/ui/shells/drawdlg.cxx259
-rw-r--r--sw/source/ui/shells/drawsh.cxx497
-rw-r--r--sw/source/ui/shells/drformsh.cxx276
-rw-r--r--sw/source/ui/shells/drwbassh.cxx995
-rw-r--r--sw/source/ui/shells/drwtxtex.cxx1012
-rw-r--r--sw/source/ui/shells/drwtxtsh.cxx912
-rw-r--r--sw/source/ui/shells/frmsh.cxx1148
-rw-r--r--sw/source/ui/shells/grfsh.cxx707
-rw-r--r--sw/source/ui/shells/grfshex.cxx165
-rw-r--r--sw/source/ui/shells/langhelper.cxx612
-rw-r--r--sw/source/ui/shells/listsh.cxx295
-rw-r--r--sw/source/ui/shells/makefile.mk94
-rw-r--r--sw/source/ui/shells/mediash.cxx222
-rw-r--r--sw/source/ui/shells/olesh.cxx80
-rw-r--r--sw/source/ui/shells/shells.src1139
-rw-r--r--sw/source/ui/shells/slotadd.cxx150
-rw-r--r--sw/source/ui/shells/tabsh.cxx1597
-rw-r--r--sw/source/ui/shells/textdrw.cxx143
-rw-r--r--sw/source/ui/shells/textfld.cxx894
-rw-r--r--sw/source/ui/shells/textglos.cxx145
-rw-r--r--sw/source/ui/shells/textidx.cxx261
-rw-r--r--sw/source/ui/shells/textsh.cxx1270
-rw-r--r--sw/source/ui/shells/textsh1.cxx1790
-rw-r--r--sw/source/ui/shells/textsh2.cxx312
-rw-r--r--sw/source/ui/shells/txtattr.cxx847
-rw-r--r--sw/source/ui/shells/txtcrsr.cxx370
-rw-r--r--sw/source/ui/shells/txtnum.cxx251
-rw-r--r--sw/source/ui/smartmenu/makefile.mk53
-rw-r--r--sw/source/ui/smartmenu/stmenu.cxx186
-rw-r--r--sw/source/ui/smartmenu/stmenu.hrc41
-rw-r--r--sw/source/ui/smartmenu/stmenu.src44
-rw-r--r--sw/source/ui/table/chartins.cxx287
-rw-r--r--sw/source/ui/table/chartins.hrc47
-rw-r--r--sw/source/ui/table/chartins.src124
-rw-r--r--sw/source/ui/table/colwd.cxx123
-rw-r--r--sw/source/ui/table/colwd.hrc36
-rw-r--r--sw/source/ui/table/colwd.src144
-rw-r--r--sw/source/ui/table/convert.cxx279
-rw-r--r--sw/source/ui/table/convert.hrc47
-rw-r--r--sw/source/ui/table/convert.src185
-rw-r--r--sw/source/ui/table/instable.cxx253
-rw-r--r--sw/source/ui/table/instable.hrc49
-rw-r--r--sw/source/ui/table/instable.src190
-rw-r--r--sw/source/ui/table/makefile.mk81
-rw-r--r--sw/source/ui/table/mergetbl.cxx66
-rw-r--r--sw/source/ui/table/mergetbl.hrc32
-rw-r--r--sw/source/ui/table/mergetbl.src116
-rw-r--r--sw/source/ui/table/rowht.cxx120
-rw-r--r--sw/source/ui/table/rowht.hrc34
-rw-r--r--sw/source/ui/table/rowht.src121
-rw-r--r--sw/source/ui/table/splittbl.cxx79
-rw-r--r--sw/source/ui/table/splittbl.hrc34
-rw-r--r--sw/source/ui/table/splittbl.src125
-rw-r--r--sw/source/ui/table/swtablerep.cxx241
-rw-r--r--sw/source/ui/table/table.src59
-rw-r--r--sw/source/ui/table/tabledlg.cxx1981
-rw-r--r--sw/source/ui/table/tabledlg.hrc110
-rw-r--r--sw/source/ui/table/tabledlg.src749
-rw-r--r--sw/source/ui/table/tablemgr.cxx382
-rw-r--r--sw/source/ui/table/tablepg.hxx239
-rw-r--r--sw/source/ui/table/tautofmt.cxx1057
-rw-r--r--sw/source/ui/table/tautofmt.hrc78
-rw-r--r--sw/source/ui/table/tautofmt.src296
-rw-r--r--sw/source/ui/uiview/formatclipboard.cxx617
-rw-r--r--sw/source/ui/uiview/makefile.mk90
-rw-r--r--sw/source/ui/uiview/pview.cxx2715
-rw-r--r--sw/source/ui/uiview/pview.hrc72
-rw-r--r--sw/source/ui/uiview/pview.src490
-rw-r--r--sw/source/ui/uiview/scroll.cxx160
-rw-r--r--sw/source/ui/uiview/srcview.cxx960
-rw-r--r--sw/source/ui/uiview/swcli.cxx171
-rw-r--r--sw/source/ui/uiview/uivwimp.cxx345
-rw-r--r--sw/source/ui/uiview/view.cxx1943
-rw-r--r--sw/source/ui/uiview/view.hrc91
-rw-r--r--sw/source/ui/uiview/view.src376
-rw-r--r--sw/source/ui/uiview/view0.cxx562
-rw-r--r--sw/source/ui/uiview/view1.cxx219
-rwxr-xr-xsw/source/ui/uiview/view2.cxx2452
-rw-r--r--sw/source/ui/uiview/viewcoll.cxx98
-rw-r--r--sw/source/ui/uiview/viewdlg.cxx98
-rw-r--r--sw/source/ui/uiview/viewdlg2.cxx241
-rw-r--r--sw/source/ui/uiview/viewdraw.cxx849
-rw-r--r--sw/source/ui/uiview/viewfunc.hxx68
-rwxr-xr-xsw/source/ui/uiview/viewling.cxx1005
-rw-r--r--sw/source/ui/uiview/viewmdi.cxx754
-rw-r--r--sw/source/ui/uiview/viewport.cxx1384
-rw-r--r--sw/source/ui/uiview/viewprt.cxx375
-rw-r--r--sw/source/ui/uiview/viewsrch.cxx821
-rwxr-xr-xsw/source/ui/uiview/viewstat.cxx530
-rw-r--r--sw/source/ui/uiview/viewtab.cxx1848
-rw-r--r--sw/source/ui/uno/RefreshListenerContainer.cxx58
-rw-r--r--sw/source/ui/uno/SwXDocumentSettings.cxx1068
-rw-r--r--sw/source/ui/uno/SwXDocumentSettings.hxx109
-rw-r--r--sw/source/ui/uno/SwXFilterOptions.cxx217
-rw-r--r--sw/source/ui/uno/SwXPrintPreviewSettings.cxx375
-rw-r--r--sw/source/ui/uno/SwXPrintPreviewSettings.hxx89
-rw-r--r--sw/source/ui/uno/detreg.cxx109
-rw-r--r--sw/source/ui/uno/dlelstnr.cxx204
-rw-r--r--sw/source/ui/uno/makefile.mk82
-rw-r--r--sw/source/ui/uno/swdet2.cxx122
-rw-r--r--sw/source/ui/uno/swdetect.cxx489
-rw-r--r--sw/source/ui/uno/swdetect.hxx95
-rw-r--r--sw/source/ui/uno/unoatxt.cxx1308
-rw-r--r--sw/source/ui/uno/unodefaults.cxx72
-rw-r--r--sw/source/ui/uno/unodefaults.hxx48
-rw-r--r--sw/source/ui/uno/unodispatch.cxx448
-rw-r--r--sw/source/ui/uno/unodoc.cxx128
-rw-r--r--sw/source/ui/uno/unofreg.cxx476
-rw-r--r--sw/source/ui/uno/unomailmerge.cxx1255
-rw-r--r--sw/source/ui/uno/unomod.cxx1057
-rw-r--r--sw/source/ui/uno/unomodule.cxx172
-rw-r--r--sw/source/ui/uno/unomodule.hxx98
-rw-r--r--sw/source/ui/uno/unotxdoc.cxx4175
-rw-r--r--sw/source/ui/uno/unotxvw.cxx2206
-rw-r--r--sw/source/ui/utlui/attrdesc.cxx1350
-rw-r--r--sw/source/ui/utlui/attrdesc.hrc123
-rw-r--r--sw/source/ui/utlui/attrdesc.src384
-rw-r--r--sw/source/ui/utlui/bookctrl.cxx164
-rw-r--r--sw/source/ui/utlui/condedit.cxx108
-rw-r--r--sw/source/ui/utlui/content.cxx3265
-rw-r--r--sw/source/ui/utlui/glbltree.cxx1514
-rw-r--r--sw/source/ui/utlui/gloslst.cxx514
-rw-r--r--sw/source/ui/utlui/gloslst.hrc38
-rw-r--r--sw/source/ui/utlui/gloslst.src108
-rw-r--r--sw/source/ui/utlui/initui.cxx306
-rw-r--r--sw/source/ui/utlui/initui.hrc66
-rw-r--r--sw/source/ui/utlui/initui.src519
-rw-r--r--sw/source/ui/utlui/makefile.mk79
-rw-r--r--sw/source/ui/utlui/navicfg.cxx141
-rw-r--r--sw/source/ui/utlui/navipi.cxx1549
-rw-r--r--sw/source/ui/utlui/navipi.hrc91
-rw-r--r--sw/source/ui/utlui/navipi.src536
-rw-r--r--sw/source/ui/utlui/numfmtlb.cxx540
-rw-r--r--sw/source/ui/utlui/poolfmt.src745
-rw-r--r--sw/source/ui/utlui/prcntfld.cxx370
-rw-r--r--sw/source/ui/utlui/shdwcrsr.cxx135
-rw-r--r--sw/source/ui/utlui/swrenamexnameddlg.cxx143
-rw-r--r--sw/source/ui/utlui/textcontrolcombo.cxx113
-rw-r--r--sw/source/ui/utlui/tmplctrl.cxx174
-rw-r--r--sw/source/ui/utlui/uiitems.cxx324
-rw-r--r--sw/source/ui/utlui/uitool.cxx774
-rw-r--r--sw/source/ui/utlui/unotools.cxx522
-rw-r--r--sw/source/ui/utlui/unotools.hrc41
-rw-r--r--sw/source/ui/utlui/unotools.src130
-rw-r--r--sw/source/ui/utlui/utlui.src478
-rw-r--r--sw/source/ui/utlui/viewlayoutctrl.cxx209
-rw-r--r--sw/source/ui/utlui/zoomctrl.cxx99
-rw-r--r--sw/source/ui/vba/makefile.mk108
-rw-r--r--sw/source/ui/vba/service.cxx89
-rw-r--r--sw/source/ui/vba/vbaaddin.cxx104
-rw-r--r--sw/source/ui/vba/vbaaddin.hxx59
-rw-r--r--sw/source/ui/vba/vbaaddins.cxx107
-rw-r--r--sw/source/ui/vba/vbaaddins.hxx52
-rw-r--r--sw/source/ui/vba/vbaapplication.cxx203
-rw-r--r--sw/source/ui/vba/vbaapplication.hxx74
-rw-r--r--sw/source/ui/vba/vbaautotextentry.cxx126
-rw-r--r--sw/source/ui/vba/vbaautotextentry.hxx80
-rw-r--r--sw/source/ui/vba/vbabookmark.cxx109
-rw-r--r--sw/source/ui/vba/vbabookmark.hxx65
-rw-r--r--sw/source/ui/vba/vbabookmarks.cxx236
-rw-r--r--sw/source/ui/vba/vbabookmarks.hxx75
-rw-r--r--sw/source/ui/vba/vbaborders.cxx378
-rw-r--r--sw/source/ui/vba/vbaborders.hxx63
-rw-r--r--sw/source/ui/vba/vbadialog.cxx78
-rw-r--r--sw/source/ui/vba/vbadialog.hxx50
-rw-r--r--sw/source/ui/vba/vbadialogs.cxx61
-rw-r--r--sw/source/ui/vba/vbadialogs.hxx53
-rw-r--r--sw/source/ui/vba/vbadocument.cxx381
-rw-r--r--sw/source/ui/vba/vbadocument.hxx80
-rw-r--r--sw/source/ui/vba/vbadocumentproperties.cxx764
-rw-r--r--sw/source/ui/vba/vbadocumentproperties.hxx67
-rw-r--r--sw/source/ui/vba/vbadocuments.cxx197
-rw-r--r--sw/source/ui/vba/vbadocuments.hxx66
-rwxr-xr-xsw/source/ui/vba/vbaeventshelper.cxx108
-rwxr-xr-xsw/source/ui/vba/vbaeventshelper.hxx54
-rw-r--r--sw/source/ui/vba/vbafield.cxx478
-rw-r--r--sw/source/ui/vba/vbafield.hxx77
-rw-r--r--sw/source/ui/vba/vbafind.cxx428
-rw-r--r--sw/source/ui/vba/vbafind.hxx103
-rw-r--r--sw/source/ui/vba/vbafont.cxx216
-rw-r--r--sw/source/ui/vba/vbafont.hxx31
-rw-r--r--sw/source/ui/vba/vbaglobals.cxx193
-rw-r--r--sw/source/ui/vba/vbaglobals.hxx80
-rw-r--r--sw/source/ui/vba/vbaheaderfooter.cxx111
-rw-r--r--sw/source/ui/vba/vbaheaderfooter.hxx60
-rw-r--r--sw/source/ui/vba/vbaheaderfooterhelper.cxx176
-rw-r--r--sw/source/ui/vba/vbaheaderfooterhelper.hxx51
-rw-r--r--sw/source/ui/vba/vbainformationhelper.cxx68
-rw-r--r--sw/source/ui/vba/vbainformationhelper.hxx43
-rw-r--r--sw/source/ui/vba/vbaoptions.cxx284
-rw-r--r--sw/source/ui/vba/vbaoptions.hxx87
-rw-r--r--sw/source/ui/vba/vbapagesetup.cxx272
-rw-r--r--sw/source/ui/vba/vbapagesetup.hxx67
-rw-r--r--sw/source/ui/vba/vbapalette.cxx75
-rw-r--r--sw/source/ui/vba/vbapalette.hxx15
-rw-r--r--sw/source/ui/vba/vbapane.cxx76
-rw-r--r--sw/source/ui/vba/vbapane.hxx54
-rw-r--r--sw/source/ui/vba/vbapanes.cxx124
-rw-r--r--sw/source/ui/vba/vbapanes.hxx57
-rw-r--r--sw/source/ui/vba/vbaparagraph.cxx174
-rw-r--r--sw/source/ui/vba/vbaparagraph.hxx81
-rw-r--r--sw/source/ui/vba/vbaparagraphformat.cxx573
-rw-r--r--sw/source/ui/vba/vbaparagraphformat.hxx95
-rw-r--r--sw/source/ui/vba/vbarange.cxx345
-rw-r--r--sw/source/ui/vba/vbarange.hxx92
-rw-r--r--sw/source/ui/vba/vbarangehelper.cxx171
-rw-r--r--sw/source/ui/vba/vbarangehelper.hxx43
-rw-r--r--sw/source/ui/vba/vbareplacement.cxx71
-rw-r--r--sw/source/ui/vba/vbareplacement.hxx54
-rw-r--r--sw/source/ui/vba/vbasection.cxx87
-rw-r--r--sw/source/ui/vba/vbasection.hxx59
-rw-r--r--sw/source/ui/vba/vbasections.cxx186
-rw-r--r--sw/source/ui/vba/vbasections.hxx59
-rw-r--r--sw/source/ui/vba/vbaselection.cxx679
-rw-r--r--sw/source/ui/vba/vbaselection.hxx105
-rw-r--r--sw/source/ui/vba/vbastyle.cxx149
-rw-r--r--sw/source/ui/vba/vbastyle.hxx67
-rw-r--r--sw/source/ui/vba/vbastyles.cxx377
-rw-r--r--sw/source/ui/vba/vbastyles.hxx51
-rw-r--r--sw/source/ui/vba/vbasystem.cxx187
-rw-r--r--sw/source/ui/vba/vbasystem.hxx71
-rw-r--r--sw/source/ui/vba/vbatable.cxx97
-rw-r--r--sw/source/ui/vba/vbatable.hxx28
-rw-r--r--sw/source/ui/vba/vbatables.cxx131
-rw-r--r--sw/source/ui/vba/vbatables.hxx28
-rw-r--r--sw/source/ui/vba/vbatemplate.cxx103
-rw-r--r--sw/source/ui/vba/vbatemplate.hxx52
-rw-r--r--sw/source/ui/vba/vbavariable.cxx105
-rw-r--r--sw/source/ui/vba/vbavariable.hxx59
-rw-r--r--sw/source/ui/vba/vbavariables.cxx102
-rw-r--r--sw/source/ui/vba/vbavariables.hxx61
-rw-r--r--sw/source/ui/vba/vbaview.cxx422
-rw-r--r--sw/source/ui/vba/vbaview.hxx68
-rw-r--r--sw/source/ui/vba/vbawindow.cxx108
-rw-r--r--sw/source/ui/vba/vbawindow.hxx57
-rw-r--r--sw/source/ui/vba/vbawrapformat.cxx252
-rw-r--r--sw/source/ui/vba/vbawrapformat.hxx69
-rw-r--r--sw/source/ui/vba/wordvbahelper.cxx92
-rw-r--r--sw/source/ui/vba/wordvbahelper.hxx54
-rw-r--r--sw/source/ui/web/makefile.mk59
-rw-r--r--sw/source/ui/web/wdocsh.cxx114
-rw-r--r--sw/source/ui/web/web.src345
-rw-r--r--sw/source/ui/web/wformsh.cxx71
-rw-r--r--sw/source/ui/web/wfrmsh.cxx95
-rw-r--r--sw/source/ui/web/wgrfsh.cxx74
-rw-r--r--sw/source/ui/web/wlistsh.cxx67
-rw-r--r--sw/source/ui/web/wolesh.cxx68
-rw-r--r--sw/source/ui/web/wtabsh.cxx76
-rw-r--r--sw/source/ui/web/wtextsh.cxx99
-rw-r--r--sw/source/ui/web/wview.cxx337
-rw-r--r--sw/source/ui/wrtsh/delete.cxx570
-rw-r--r--sw/source/ui/wrtsh/makefile.mk62
-rw-r--r--sw/source/ui/wrtsh/move.cxx691
-rw-r--r--sw/source/ui/wrtsh/select.cxx1072
-rw-r--r--sw/source/ui/wrtsh/wrtsh.hrc48
-rw-r--r--sw/source/ui/wrtsh/wrtsh.src52
-rw-r--r--sw/source/ui/wrtsh/wrtsh1.cxx1871
-rw-r--r--sw/source/ui/wrtsh/wrtsh2.cxx498
-rw-r--r--sw/source/ui/wrtsh/wrtsh3.cxx247
-rw-r--r--sw/source/ui/wrtsh/wrtsh4.cxx300
-rw-r--r--sw/source/ui/wrtsh/wrtundo.cxx182
-rw-r--r--sw/uiconfig/layout/delzip1
-rw-r--r--sw/uiconfig/layout/layout.mk33
-rw-r--r--sw/uiconfig/layout/makefile.mk46
-rw-r--r--sw/uiconfig/layout/wordcount.xml50
-rw-r--r--sw/uiconfig/sglobal/menubar/menubar.xml461
-rw-r--r--sw/uiconfig/sglobal/statusbar/statusbar.xml15
-rw-r--r--sw/uiconfig/sglobal/toolbar/alignmentbar.xml11
-rw-r--r--sw/uiconfig/sglobal/toolbar/arrowshapes.xml34
-rw-r--r--sw/uiconfig/sglobal/toolbar/basicshapes.xml29
-rw-r--r--sw/uiconfig/sglobal/toolbar/bezierobjectbar.xml20
-rw-r--r--sw/uiconfig/sglobal/toolbar/calloutshapes.xml11
-rw-r--r--sw/uiconfig/sglobal/toolbar/colorbar.xml15
-rw-r--r--sw/uiconfig/sglobal/toolbar/drawbar.xml34
-rw-r--r--sw/uiconfig/sglobal/toolbar/drawingobjectbar.xml40
-rw-r--r--sw/uiconfig/sglobal/toolbar/drawtextobjectbar.xml34
-rw-r--r--sw/uiconfig/sglobal/toolbar/extrusionobjectbar.xml16
-rw-r--r--sw/uiconfig/sglobal/toolbar/findbar.xml8
-rw-r--r--sw/uiconfig/sglobal/toolbar/flowchartshapes.xml36
-rw-r--r--sw/uiconfig/sglobal/toolbar/fontworkobjectbar.xml11
-rw-r--r--sw/uiconfig/sglobal/toolbar/fontworkshapetype.xml38
-rw-r--r--sw/uiconfig/sglobal/toolbar/formcontrols.xml26
-rw-r--r--sw/uiconfig/sglobal/toolbar/formdesign.xml31
-rw-r--r--sw/uiconfig/sglobal/toolbar/formsfilterbar.xml8
-rw-r--r--sw/uiconfig/sglobal/toolbar/formsnavigationbar.xml32
-rw-r--r--sw/uiconfig/sglobal/toolbar/formtextobjectbar.xml28
-rw-r--r--sw/uiconfig/sglobal/toolbar/frameobjectbar.xml34
-rw-r--r--sw/uiconfig/sglobal/toolbar/fullscreenbar.xml5
-rw-r--r--sw/uiconfig/sglobal/toolbar/graffilterbar.xml17
-rw-r--r--sw/uiconfig/sglobal/toolbar/graphicobjectbar.xml18
-rw-r--r--sw/uiconfig/sglobal/toolbar/insertbar.xml30
-rw-r--r--sw/uiconfig/sglobal/toolbar/insertobjectbar.xml7
-rw-r--r--sw/uiconfig/sglobal/toolbar/mediaobjectbar.xml7
-rw-r--r--sw/uiconfig/sglobal/toolbar/moreformcontrols.xml23
-rw-r--r--sw/uiconfig/sglobal/toolbar/numobjectbar.xml23
-rw-r--r--sw/uiconfig/sglobal/toolbar/oleobjectbar.xml30
-rw-r--r--sw/uiconfig/sglobal/toolbar/optimizetablebar.xml8
-rw-r--r--sw/uiconfig/sglobal/toolbar/previewobjectbar.xml24
-rw-r--r--sw/uiconfig/sglobal/toolbar/standardbar.xml42
-rw-r--r--sw/uiconfig/sglobal/toolbar/starshapes.xml17
-rw-r--r--sw/uiconfig/sglobal/toolbar/symbolshapes.xml24
-rw-r--r--sw/uiconfig/sglobal/toolbar/tableobjectbar.xml35
-rw-r--r--sw/uiconfig/sglobal/toolbar/textobjectbar.xml44
-rw-r--r--sw/uiconfig/sglobal/toolbar/toolbar.xml13
-rw-r--r--sw/uiconfig/sglobal/toolbar/viewerbar.xml18
-rw-r--r--sw/uiconfig/sweb/menubar/menubar.xml390
-rw-r--r--sw/uiconfig/sweb/statusbar/statusbar.xml14
-rw-r--r--sw/uiconfig/sweb/toolbar/arrowshapes.xml34
-rw-r--r--sw/uiconfig/sweb/toolbar/basicshapes.xml29
-rw-r--r--sw/uiconfig/sweb/toolbar/bezierobjectbar.xml20
-rw-r--r--sw/uiconfig/sweb/toolbar/calloutshapes.xml11
-rw-r--r--sw/uiconfig/sweb/toolbar/colorbar.xml17
-rw-r--r--sw/uiconfig/sweb/toolbar/drawingobjectbar.xml39
-rw-r--r--sw/uiconfig/sweb/toolbar/drawtextobjectbar.xml34
-rw-r--r--sw/uiconfig/sweb/toolbar/extrusionobjectbar.xml16
-rw-r--r--sw/uiconfig/sweb/toolbar/findbar.xml8
-rw-r--r--sw/uiconfig/sweb/toolbar/flowchartshapes.xml36
-rw-r--r--sw/uiconfig/sweb/toolbar/fontworkobjectbar.xml11
-rw-r--r--sw/uiconfig/sweb/toolbar/fontworkshapetype.xml38
-rw-r--r--sw/uiconfig/sweb/toolbar/formcontrols.xml25
-rw-r--r--sw/uiconfig/sweb/toolbar/formdesign.xml31
-rw-r--r--sw/uiconfig/sweb/toolbar/formsfilterbar.xml8
-rw-r--r--sw/uiconfig/sweb/toolbar/formsnavigationbar.xml32
-rw-r--r--sw/uiconfig/sweb/toolbar/formtextobjectbar.xml28
-rw-r--r--sw/uiconfig/sweb/toolbar/frameobjectbar.xml34
-rw-r--r--sw/uiconfig/sweb/toolbar/fullscreenbar.xml5
-rw-r--r--sw/uiconfig/sweb/toolbar/graffilterbar.xml17
-rw-r--r--sw/uiconfig/sweb/toolbar/graphicobjectbar.xml26
-rw-r--r--sw/uiconfig/sweb/toolbar/insertbar.xml25
-rw-r--r--sw/uiconfig/sweb/toolbar/mediaobjectbar.xml7
-rw-r--r--sw/uiconfig/sweb/toolbar/numobjectbar.xml23
-rw-r--r--sw/uiconfig/sweb/toolbar/oleobjectbar.xml30
-rw-r--r--sw/uiconfig/sweb/toolbar/optimizetablebar.xml8
-rw-r--r--sw/uiconfig/sweb/toolbar/previewobjectbar.xml24
-rw-r--r--sw/uiconfig/sweb/toolbar/standardbar.xml45
-rw-r--r--sw/uiconfig/sweb/toolbar/starshapes.xml17
-rw-r--r--sw/uiconfig/sweb/toolbar/symbolshapes.xml24
-rw-r--r--sw/uiconfig/sweb/toolbar/tableobjectbar.xml35
-rw-r--r--sw/uiconfig/sweb/toolbar/textobjectbar.xml44
-rw-r--r--sw/uiconfig/sweb/toolbar/toolbar.xml11
-rw-r--r--sw/uiconfig/sweb/toolbar/viewerbar.xml18
-rw-r--r--sw/uiconfig/swform/menubar/menubar.xml456
-rw-r--r--sw/uiconfig/swform/statusbar/statusbar.xml14
-rw-r--r--sw/uiconfig/swform/toolbar/alignmentbar.xml11
-rw-r--r--sw/uiconfig/swform/toolbar/arrowshapes.xml34
-rw-r--r--sw/uiconfig/swform/toolbar/basicshapes.xml29
-rw-r--r--sw/uiconfig/swform/toolbar/bezierobjectbar.xml20
-rw-r--r--sw/uiconfig/swform/toolbar/calloutshapes.xml11
-rw-r--r--sw/uiconfig/swform/toolbar/colorbar.xml15
-rw-r--r--sw/uiconfig/swform/toolbar/drawbar.xml34
-rw-r--r--sw/uiconfig/swform/toolbar/drawingobjectbar.xml40
-rw-r--r--sw/uiconfig/swform/toolbar/drawtextobjectbar.xml34
-rw-r--r--sw/uiconfig/swform/toolbar/extrusionobjectbar.xml16
-rw-r--r--sw/uiconfig/swform/toolbar/flowchartshapes.xml36
-rw-r--r--sw/uiconfig/swform/toolbar/fontworkobjectbar.xml11
-rw-r--r--sw/uiconfig/swform/toolbar/fontworkshapetype.xml38
-rw-r--r--sw/uiconfig/swform/toolbar/formcontrols.xml26
-rw-r--r--sw/uiconfig/swform/toolbar/formdesign.xml33
-rw-r--r--sw/uiconfig/swform/toolbar/formsfilterbar.xml8
-rw-r--r--sw/uiconfig/swform/toolbar/formsnavigationbar.xml33
-rw-r--r--sw/uiconfig/swform/toolbar/formtextobjectbar.xml28
-rw-r--r--sw/uiconfig/swform/toolbar/frameobjectbar.xml34
-rw-r--r--sw/uiconfig/swform/toolbar/fullscreenbar.xml5
-rw-r--r--sw/uiconfig/swform/toolbar/graffilterbar.xml17
-rw-r--r--sw/uiconfig/swform/toolbar/graphicobjectbar.xml18
-rw-r--r--sw/uiconfig/swform/toolbar/insertbar.xml29
-rw-r--r--sw/uiconfig/swform/toolbar/insertobjectbar.xml7
-rw-r--r--sw/uiconfig/swform/toolbar/mediaobjectbar.xml7
-rw-r--r--sw/uiconfig/swform/toolbar/moreformcontrols.xml23
-rw-r--r--sw/uiconfig/swform/toolbar/numobjectbar.xml23
-rw-r--r--sw/uiconfig/swform/toolbar/oleobjectbar.xml30
-rw-r--r--sw/uiconfig/swform/toolbar/optimizetablebar.xml8
-rw-r--r--sw/uiconfig/swform/toolbar/previewobjectbar.xml24
-rw-r--r--sw/uiconfig/swform/toolbar/standardbar.xml42
-rw-r--r--sw/uiconfig/swform/toolbar/starshapes.xml17
-rw-r--r--sw/uiconfig/swform/toolbar/symbolshapes.xml24
-rw-r--r--sw/uiconfig/swform/toolbar/tableobjectbar.xml35
-rw-r--r--sw/uiconfig/swform/toolbar/textobjectbar.xml44
-rw-r--r--sw/uiconfig/swform/toolbar/toolbar.xml13
-rw-r--r--sw/uiconfig/swform/toolbar/viewerbar.xml18
-rw-r--r--sw/uiconfig/swreport/menubar/menubar.xml456
-rw-r--r--sw/uiconfig/swreport/statusbar/statusbar.xml14
-rw-r--r--sw/uiconfig/swreport/toolbar/alignmentbar.xml11
-rw-r--r--sw/uiconfig/swreport/toolbar/arrowshapes.xml34
-rw-r--r--sw/uiconfig/swreport/toolbar/basicshapes.xml29
-rw-r--r--sw/uiconfig/swreport/toolbar/bezierobjectbar.xml20
-rw-r--r--sw/uiconfig/swreport/toolbar/calloutshapes.xml11
-rw-r--r--sw/uiconfig/swreport/toolbar/colorbar.xml15
-rw-r--r--sw/uiconfig/swreport/toolbar/drawbar.xml34
-rw-r--r--sw/uiconfig/swreport/toolbar/drawingobjectbar.xml40
-rw-r--r--sw/uiconfig/swreport/toolbar/drawtextobjectbar.xml34
-rw-r--r--sw/uiconfig/swreport/toolbar/extrusionobjectbar.xml16
-rw-r--r--sw/uiconfig/swreport/toolbar/flowchartshapes.xml36
-rw-r--r--sw/uiconfig/swreport/toolbar/fontworkobjectbar.xml11
-rw-r--r--sw/uiconfig/swreport/toolbar/fontworkshapetype.xml38
-rw-r--r--sw/uiconfig/swreport/toolbar/formcontrols.xml26
-rw-r--r--sw/uiconfig/swreport/toolbar/formdesign.xml34
-rw-r--r--sw/uiconfig/swreport/toolbar/formsfilterbar.xml8
-rw-r--r--sw/uiconfig/swreport/toolbar/formsnavigationbar.xml32
-rw-r--r--sw/uiconfig/swreport/toolbar/formtextobjectbar.xml28
-rw-r--r--sw/uiconfig/swreport/toolbar/frameobjectbar.xml34
-rw-r--r--sw/uiconfig/swreport/toolbar/fullscreenbar.xml5
-rw-r--r--sw/uiconfig/swreport/toolbar/graffilterbar.xml17
-rw-r--r--sw/uiconfig/swreport/toolbar/graphicobjectbar.xml18
-rw-r--r--sw/uiconfig/swreport/toolbar/insertbar.xml29
-rw-r--r--sw/uiconfig/swreport/toolbar/insertobjectbar.xml7
-rw-r--r--sw/uiconfig/swreport/toolbar/mediaobjectbar.xml7
-rw-r--r--sw/uiconfig/swreport/toolbar/moreformcontrols.xml23
-rw-r--r--sw/uiconfig/swreport/toolbar/numobjectbar.xml23
-rw-r--r--sw/uiconfig/swreport/toolbar/oleobjectbar.xml30
-rw-r--r--sw/uiconfig/swreport/toolbar/optimizetablebar.xml8
-rw-r--r--sw/uiconfig/swreport/toolbar/previewobjectbar.xml24
-rw-r--r--sw/uiconfig/swreport/toolbar/standardbar.xml42
-rw-r--r--sw/uiconfig/swreport/toolbar/starshapes.xml17
-rw-r--r--sw/uiconfig/swreport/toolbar/symbolshapes.xml24
-rw-r--r--sw/uiconfig/swreport/toolbar/tableobjectbar.xml35
-rw-r--r--sw/uiconfig/swreport/toolbar/textobjectbar.xml44
-rw-r--r--sw/uiconfig/swreport/toolbar/toolbar.xml13
-rw-r--r--sw/uiconfig/swreport/toolbar/viewerbar.xml18
-rw-r--r--sw/uiconfig/swriter/menubar/menubar.xml464
-rw-r--r--sw/uiconfig/swriter/statusbar/statusbar.xml15
-rw-r--r--sw/uiconfig/swriter/toolbar/alignmentbar.xml11
-rw-r--r--sw/uiconfig/swriter/toolbar/arrowshapes.xml34
-rw-r--r--sw/uiconfig/swriter/toolbar/basicshapes.xml29
-rw-r--r--sw/uiconfig/swriter/toolbar/bezierobjectbar.xml20
-rw-r--r--sw/uiconfig/swriter/toolbar/calloutshapes.xml11
-rw-r--r--sw/uiconfig/swriter/toolbar/colorbar.xml15
-rw-r--r--sw/uiconfig/swriter/toolbar/drawbar.xml34
-rw-r--r--sw/uiconfig/swriter/toolbar/drawingobjectbar.xml40
-rw-r--r--sw/uiconfig/swriter/toolbar/drawtextobjectbar.xml34
-rw-r--r--sw/uiconfig/swriter/toolbar/extrusionobjectbar.xml16
-rw-r--r--sw/uiconfig/swriter/toolbar/findbar.xml8
-rw-r--r--sw/uiconfig/swriter/toolbar/flowchartshapes.xml36
-rw-r--r--sw/uiconfig/swriter/toolbar/fontworkobjectbar.xml11
-rw-r--r--sw/uiconfig/swriter/toolbar/fontworkshapetype.xml38
-rw-r--r--sw/uiconfig/swriter/toolbar/formcontrols.xml26
-rw-r--r--sw/uiconfig/swriter/toolbar/formdesign.xml33
-rw-r--r--sw/uiconfig/swriter/toolbar/formsfilterbar.xml8
-rw-r--r--sw/uiconfig/swriter/toolbar/formsnavigationbar.xml33
-rw-r--r--sw/uiconfig/swriter/toolbar/formtextobjectbar.xml28
-rw-r--r--sw/uiconfig/swriter/toolbar/frameobjectbar.xml34
-rw-r--r--sw/uiconfig/swriter/toolbar/fullscreenbar.xml5
-rw-r--r--sw/uiconfig/swriter/toolbar/graffilterbar.xml17
-rw-r--r--sw/uiconfig/swriter/toolbar/graphicobjectbar.xml18
-rw-r--r--sw/uiconfig/swriter/toolbar/insertbar.xml31
-rw-r--r--sw/uiconfig/swriter/toolbar/mediaobjectbar.xml7
-rw-r--r--sw/uiconfig/swriter/toolbar/moreformcontrols.xml23
-rw-r--r--sw/uiconfig/swriter/toolbar/numobjectbar.xml23
-rw-r--r--sw/uiconfig/swriter/toolbar/oleobjectbar.xml30
-rw-r--r--sw/uiconfig/swriter/toolbar/optimizetablebar.xml8
-rw-r--r--sw/uiconfig/swriter/toolbar/previewobjectbar.xml24
-rw-r--r--sw/uiconfig/swriter/toolbar/standardbar.xml42
-rw-r--r--sw/uiconfig/swriter/toolbar/starshapes.xml17
-rw-r--r--sw/uiconfig/swriter/toolbar/symbolshapes.xml24
-rw-r--r--sw/uiconfig/swriter/toolbar/tableobjectbar.xml35
-rw-r--r--sw/uiconfig/swriter/toolbar/textobjectbar.xml44
-rw-r--r--sw/uiconfig/swriter/toolbar/toolbar.xml13
-rw-r--r--sw/uiconfig/swriter/toolbar/viewerbar.xml18
-rw-r--r--sw/uiconfig/swxform/menubar/menubar.xml457
-rw-r--r--sw/uiconfig/swxform/statusbar/statusbar.xml15
-rw-r--r--sw/uiconfig/swxform/toolbar/alignmentbar.xml11
-rw-r--r--sw/uiconfig/swxform/toolbar/arrowshapes.xml34
-rw-r--r--sw/uiconfig/swxform/toolbar/basicshapes.xml29
-rw-r--r--sw/uiconfig/swxform/toolbar/bezierobjectbar.xml20
-rw-r--r--sw/uiconfig/swxform/toolbar/calloutshapes.xml11
-rw-r--r--sw/uiconfig/swxform/toolbar/colorbar.xml15
-rw-r--r--sw/uiconfig/swxform/toolbar/drawbar.xml34
-rw-r--r--sw/uiconfig/swxform/toolbar/drawingobjectbar.xml40
-rw-r--r--sw/uiconfig/swxform/toolbar/drawtextobjectbar.xml34
-rw-r--r--sw/uiconfig/swxform/toolbar/extrusionobjectbar.xml16
-rw-r--r--sw/uiconfig/swxform/toolbar/findbar.xml8
-rw-r--r--sw/uiconfig/swxform/toolbar/flowchartshapes.xml36
-rw-r--r--sw/uiconfig/swxform/toolbar/fontworkobjectbar.xml11
-rw-r--r--sw/uiconfig/swxform/toolbar/fontworkshapetype.xml38
-rw-r--r--sw/uiconfig/swxform/toolbar/formcontrols.xml23
-rw-r--r--sw/uiconfig/swxform/toolbar/formdesign.xml33
-rw-r--r--sw/uiconfig/swxform/toolbar/formsfilterbar.xml8
-rw-r--r--sw/uiconfig/swxform/toolbar/formsnavigationbar.xml33
-rw-r--r--sw/uiconfig/swxform/toolbar/formtextobjectbar.xml28
-rw-r--r--sw/uiconfig/swxform/toolbar/frameobjectbar.xml34
-rw-r--r--sw/uiconfig/swxform/toolbar/fullscreenbar.xml5
-rw-r--r--sw/uiconfig/swxform/toolbar/graffilterbar.xml17
-rw-r--r--sw/uiconfig/swxform/toolbar/graphicobjectbar.xml18
-rw-r--r--sw/uiconfig/swxform/toolbar/insertbar.xml29
-rw-r--r--sw/uiconfig/swxform/toolbar/insertobjectbar.xml7
-rw-r--r--sw/uiconfig/swxform/toolbar/mediaobjectbar.xml7
-rw-r--r--sw/uiconfig/swxform/toolbar/moreformcontrols.xml12
-rw-r--r--sw/uiconfig/swxform/toolbar/numobjectbar.xml23
-rw-r--r--sw/uiconfig/swxform/toolbar/oleobjectbar.xml30
-rw-r--r--sw/uiconfig/swxform/toolbar/optimizetablebar.xml8
-rw-r--r--sw/uiconfig/swxform/toolbar/previewobjectbar.xml24
-rw-r--r--sw/uiconfig/swxform/toolbar/standardbar.xml42
-rw-r--r--sw/uiconfig/swxform/toolbar/starshapes.xml17
-rw-r--r--sw/uiconfig/swxform/toolbar/symbolshapes.xml24
-rw-r--r--sw/uiconfig/swxform/toolbar/tableobjectbar.xml35
-rw-r--r--sw/uiconfig/swxform/toolbar/textobjectbar.xml44
-rw-r--r--sw/uiconfig/swxform/toolbar/toolbar.xml13
-rw-r--r--sw/uiconfig/swxform/toolbar/viewerbar.xml18
-rw-r--r--sw/util/hidother.hrc31
-rw-r--r--sw/util/hidother.src393
-rw-r--r--sw/util/makefile.mk376
-rwxr-xr-xsw/util/msword.map11
-rw-r--r--sw/util/sw.flt136
-rw-r--r--sw/util/swui.map6
-rw-r--r--sw/xml/writer.xml1244
-rw-r--r--swext/makefile.pmk37
-rw-r--r--swext/mediawiki/build.xml229
-rw-r--r--swext/mediawiki/dialogs/EditSetting.xdl47
-rw-r--r--swext/mediawiki/dialogs/Module1.xba33
-rw-r--r--swext/mediawiki/dialogs/SendToMediaWiki.xdl54
-rw-r--r--swext/mediawiki/dialogs/Settings.xdl46
-rw-r--r--swext/mediawiki/dialogs/dialog.xlb33
-rw-r--r--swext/mediawiki/dialogs/script.xlb31
-rwxr-xr-xswext/mediawiki/help/component.txt1
-rw-r--r--swext/mediawiki/help/makefile.mk87
-rw-r--r--swext/mediawiki/help/wiki.xhp156
-rw-r--r--swext/mediawiki/help/wikiaccount.xhp56
-rw-r--r--swext/mediawiki/help/wikiformats.xhp72
-rw-r--r--swext/mediawiki/help/wikisend.xhp60
-rw-r--r--swext/mediawiki/help/wikisettings.xhp54
-rw-r--r--swext/mediawiki/makefile.mk69
-rw-r--r--swext/mediawiki/src/THIRDPARTYLICENSEREADME.html148
-rw-r--r--swext/mediawiki/src/com/sun/star/wiki/EditPageParser.java193
-rw-r--r--swext/mediawiki/src/com/sun/star/wiki/Helper.java1153
-rw-r--r--swext/mediawiki/src/com/sun/star/wiki/MainThreadDialogExecutor.java176
-rw-r--r--swext/mediawiki/src/com/sun/star/wiki/Settings.java347
-rw-r--r--swext/mediawiki/src/com/sun/star/wiki/WikiArticle.java295
-rw-r--r--swext/mediawiki/src/com/sun/star/wiki/WikiCancelException.java33
-rw-r--r--swext/mediawiki/src/com/sun/star/wiki/WikiDialog.java325
-rw-r--r--swext/mediawiki/src/com/sun/star/wiki/WikiEditSettingDialog.java429
-rw-r--r--swext/mediawiki/src/com/sun/star/wiki/WikiEditorImpl.java476
-rw-r--r--swext/mediawiki/src/com/sun/star/wiki/WikiOptionsEventHandlerImpl.java303
-rw-r--r--swext/mediawiki/src/com/sun/star/wiki/WikiPropDialog.java388
-rw-r--r--swext/mediawiki/src/com/sun/star/wiki/WikiProtocolSocketFactory.java168
-rw-r--r--swext/mediawiki/src/description.xml19
-rw-r--r--swext/mediawiki/src/filter/mediawiki.ottbin0 -> 6304 bytes
-rwxr-xr-xswext/mediawiki/src/filter/odt2mediawiki.xsl1567
-rw-r--r--swext/mediawiki/src/makefile.mk70
-rw-r--r--swext/mediawiki/src/registry/data/org/openoffice/Office/Addons.xcu67
-rw-r--r--swext/mediawiki/src/registry/data/org/openoffice/Office/Custom/WikiExtension.xcu153
-rw-r--r--swext/mediawiki/src/registry/data/org/openoffice/Office/Custom/makefile.mk48
-rw-r--r--swext/mediawiki/src/registry/data/org/openoffice/Office/OptionsDialog.xcu50
-rw-r--r--swext/mediawiki/src/registry/data/org/openoffice/Office/Paths.xcu36
-rw-r--r--swext/mediawiki/src/registry/data/org/openoffice/Office/ProtocolHandler.xcu36
-rw-r--r--swext/mediawiki/src/registry/data/org/openoffice/Office/makefile.mk46
-rw-r--r--swext/mediawiki/src/registry/data/org/openoffice/TypeDetection/Filter.xcu56
-rw-r--r--swext/mediawiki/src/registry/data/org/openoffice/TypeDetection/Types.xcu44
-rw-r--r--swext/mediawiki/src/registry/data/org/openoffice/TypeDetection/makefile.mk46
-rw-r--r--swext/mediawiki/src/registry/schema/org/openoffice/Office/Custom/WikiExtension.xcs197
-rw-r--r--swext/mediawiki/src/registry/schema/org/openoffice/Office/Custom/makefile.mk46
-rw-r--r--swext/mediawiki/src/uno-extension-manifest.xml53
-rw-r--r--swext/prj/build.lst10
-rw-r--r--swext/prj/d.lst4
-rw-r--r--sysui/desktop/cleanversion/makefile.mk50
-rw-r--r--sysui/desktop/debian/control6
-rw-r--r--sysui/desktop/debian/makefile.mk96
-rw-r--r--sysui/desktop/debian/openoffice.org-debian-menus42
-rw-r--r--sysui/desktop/debian/postinst157
-rw-r--r--sysui/desktop/debian/postrm26
-rw-r--r--sysui/desktop/debian/prerm10
-rw-r--r--sysui/desktop/freedesktop/freedesktop-menus.spec337
-rw-r--r--sysui/desktop/freedesktop/makefile.mk59
-rw-r--r--sysui/desktop/icons/base.icnsbin0 -> 56259 bytes
-rw-r--r--sysui/desktop/icons/calc.icnsbin0 -> 51959 bytes
-rw-r--r--sysui/desktop/icons/configuration.icnsbin0 -> 50975 bytes
-rw-r--r--sysui/desktop/icons/database.icnsbin0 -> 48416 bytes
-rw-r--r--sysui/desktop/icons/database.icobin0 -> 295606 bytes
-rw-r--r--sysui/desktop/icons/draw.icnsbin0 -> 54777 bytes
-rw-r--r--sysui/desktop/icons/drawing-template.icnsbin0 -> 48006 bytes
-rw-r--r--sysui/desktop/icons/drawing-template.icobin0 -> 295606 bytes
-rw-r--r--sysui/desktop/icons/drawing.icnsbin0 -> 46878 bytes
-rw-r--r--sysui/desktop/icons/drawing.icobin0 -> 295606 bytes
-rw-r--r--sysui/desktop/icons/empty-document.icnsbin0 -> 37502 bytes
-rw-r--r--sysui/desktop/icons/empty-document.icobin0 -> 295606 bytes
-rw-r--r--sysui/desktop/icons/empty-template.icnsbin0 -> 39059 bytes
-rw-r--r--sysui/desktop/icons/empty-template.icobin0 -> 295606 bytes
-rwxr-xr-xsysui/desktop/icons/extension.icnsbin0 -> 39192 bytes
-rw-r--r--sysui/desktop/icons/formula.icnsbin0 -> 41940 bytes
-rw-r--r--sysui/desktop/icons/formula.icobin0 -> 295606 bytes
-rwxr-xr-xsysui/desktop/icons/hicolor/128x128/apps/base.pngbin0 -> 17674 bytes
-rw-r--r--sysui/desktop/icons/hicolor/128x128/apps/calc.pngbin0 -> 15582 bytes
-rwxr-xr-xsysui/desktop/icons/hicolor/128x128/apps/draw.pngbin0 -> 16479 bytes
-rwxr-xr-xsysui/desktop/icons/hicolor/128x128/apps/impress.pngbin0 -> 17785 bytes
-rwxr-xr-xsysui/desktop/icons/hicolor/128x128/apps/main.pngbin0 -> 15601 bytes
-rwxr-xr-xsysui/desktop/icons/hicolor/128x128/apps/math.pngbin0 -> 15536 bytes
-rw-r--r--sysui/desktop/icons/hicolor/128x128/apps/startcenter.pngbin0 -> 15601 bytes
-rwxr-xr-xsysui/desktop/icons/hicolor/128x128/apps/writer.pngbin0 -> 14510 bytes
-rw-r--r--sysui/desktop/icons/hicolor/128x128/mimetypes/database.pngbin0 -> 5874 bytes
-rw-r--r--sysui/desktop/icons/hicolor/128x128/mimetypes/drawing-template.pngbin0 -> 6217 bytes
-rw-r--r--sysui/desktop/icons/hicolor/128x128/mimetypes/drawing.pngbin0 -> 6387 bytes
-rw-r--r--sysui/desktop/icons/hicolor/128x128/mimetypes/formula.pngbin0 -> 4353 bytes
-rw-r--r--sysui/desktop/icons/hicolor/128x128/mimetypes/master-document.pngbin0 -> 2662 bytes
-rwxr-xr-xsysui/desktop/icons/hicolor/128x128/mimetypes/oasis-database.pngbin0 -> 6845 bytes
-rwxr-xr-xsysui/desktop/icons/hicolor/128x128/mimetypes/oasis-drawing-template.pngbin0 -> 7206 bytes
-rwxr-xr-xsysui/desktop/icons/hicolor/128x128/mimetypes/oasis-drawing.pngbin0 -> 7373 bytes
-rwxr-xr-xsysui/desktop/icons/hicolor/128x128/mimetypes/oasis-formula.pngbin0 -> 5370 bytes
-rwxr-xr-xsysui/desktop/icons/hicolor/128x128/mimetypes/oasis-master-document.pngbin0 -> 3703 bytes
-rwxr-xr-xsysui/desktop/icons/hicolor/128x128/mimetypes/oasis-presentation-template.pngbin0 -> 6193 bytes
-rwxr-xr-xsysui/desktop/icons/hicolor/128x128/mimetypes/oasis-presentation.pngbin0 -> 5434 bytes
-rw-r--r--sysui/desktop/icons/hicolor/128x128/mimetypes/oasis-spreadsheet-template.pngbin0 -> 5753 bytes
-rw-r--r--sysui/desktop/icons/hicolor/128x128/mimetypes/oasis-spreadsheet.pngbin0 -> 4617 bytes
-rwxr-xr-xsysui/desktop/icons/hicolor/128x128/mimetypes/oasis-text-template.pngbin0 -> 6763 bytes
-rwxr-xr-xsysui/desktop/icons/hicolor/128x128/mimetypes/oasis-text.pngbin0 -> 6847 bytes
-rwxr-xr-xsysui/desktop/icons/hicolor/128x128/mimetypes/oasis-web-template.pngbin0 -> 3493 bytes
-rw-r--r--sysui/desktop/icons/hicolor/128x128/mimetypes/presentation-template.pngbin0 -> 5212 bytes
-rw-r--r--sysui/desktop/icons/hicolor/128x128/mimetypes/presentation.pngbin0 -> 4459 bytes
-rw-r--r--sysui/desktop/icons/hicolor/128x128/mimetypes/spreadsheet-template.pngbin0 -> 4764 bytes
-rw-r--r--sysui/desktop/icons/hicolor/128x128/mimetypes/spreadsheet.pngbin0 -> 3598 bytes
-rw-r--r--sysui/desktop/icons/hicolor/128x128/mimetypes/text-template.pngbin0 -> 5772 bytes
-rw-r--r--sysui/desktop/icons/hicolor/128x128/mimetypes/text.pngbin0 -> 5817 bytes
-rw-r--r--sysui/desktop/icons/hicolor/16x16/apps/base.pngbin0 -> 869 bytes
-rw-r--r--sysui/desktop/icons/hicolor/16x16/apps/calc.pngbin0 -> 779 bytes
-rw-r--r--sysui/desktop/icons/hicolor/16x16/apps/draw.pngbin0 -> 875 bytes
-rw-r--r--sysui/desktop/icons/hicolor/16x16/apps/impress.pngbin0 -> 837 bytes
-rwxr-xr-xsysui/desktop/icons/hicolor/16x16/apps/main.pngbin0 -> 893 bytes
-rw-r--r--sysui/desktop/icons/hicolor/16x16/apps/math.pngbin0 -> 791 bytes
-rwxr-xr-xsysui/desktop/icons/hicolor/16x16/apps/printeradmin.pngbin0 -> 4259 bytes
-rw-r--r--sysui/desktop/icons/hicolor/16x16/apps/startcenter.pngbin0 -> 893 bytes
-rw-r--r--sysui/desktop/icons/hicolor/16x16/apps/writer.pngbin0 -> 776 bytes
-rw-r--r--sysui/desktop/icons/hicolor/16x16/mimetypes/database.pngbin0 -> 555 bytes
-rw-r--r--sysui/desktop/icons/hicolor/16x16/mimetypes/drawing-template.pngbin0 -> 522 bytes
-rw-r--r--sysui/desktop/icons/hicolor/16x16/mimetypes/drawing.pngbin0 -> 555 bytes
-rwxr-xr-xsysui/desktop/icons/hicolor/16x16/mimetypes/extension.pngbin0 -> 557 bytes
-rw-r--r--sysui/desktop/icons/hicolor/16x16/mimetypes/formula.pngbin0 -> 562 bytes
-rw-r--r--sysui/desktop/icons/hicolor/16x16/mimetypes/master-document.pngbin0 -> 450 bytes
-rw-r--r--sysui/desktop/icons/hicolor/16x16/mimetypes/oasis-database.pngbin0 -> 574 bytes
-rw-r--r--sysui/desktop/icons/hicolor/16x16/mimetypes/oasis-drawing-template.pngbin0 -> 554 bytes
-rw-r--r--sysui/desktop/icons/hicolor/16x16/mimetypes/oasis-drawing.pngbin0 -> 572 bytes
-rw-r--r--sysui/desktop/icons/hicolor/16x16/mimetypes/oasis-formula.pngbin0 -> 580 bytes
-rw-r--r--sysui/desktop/icons/hicolor/16x16/mimetypes/oasis-master-document.pngbin0 -> 472 bytes
-rw-r--r--sysui/desktop/icons/hicolor/16x16/mimetypes/oasis-presentation-template.pngbin0 -> 532 bytes
-rw-r--r--sysui/desktop/icons/hicolor/16x16/mimetypes/oasis-presentation.pngbin0 -> 441 bytes
-rw-r--r--sysui/desktop/icons/hicolor/16x16/mimetypes/oasis-spreadsheet-template.pngbin0 -> 538 bytes
-rw-r--r--sysui/desktop/icons/hicolor/16x16/mimetypes/oasis-spreadsheet.pngbin0 -> 436 bytes
-rw-r--r--sysui/desktop/icons/hicolor/16x16/mimetypes/oasis-text-template.pngbin0 -> 444 bytes
-rw-r--r--sysui/desktop/icons/hicolor/16x16/mimetypes/oasis-text.pngbin0 -> 420 bytes
-rw-r--r--sysui/desktop/icons/hicolor/16x16/mimetypes/oasis-web-template.pngbin0 -> 436 bytes
-rw-r--r--sysui/desktop/icons/hicolor/16x16/mimetypes/presentation-template.pngbin0 -> 515 bytes
-rw-r--r--sysui/desktop/icons/hicolor/16x16/mimetypes/presentation.pngbin0 -> 425 bytes
-rw-r--r--sysui/desktop/icons/hicolor/16x16/mimetypes/spreadsheet-template.pngbin0 -> 513 bytes
-rw-r--r--sysui/desktop/icons/hicolor/16x16/mimetypes/spreadsheet.pngbin0 -> 412 bytes
-rw-r--r--sysui/desktop/icons/hicolor/16x16/mimetypes/text-template.pngbin0 -> 413 bytes
-rw-r--r--sysui/desktop/icons/hicolor/16x16/mimetypes/text.pngbin0 -> 392 bytes
-rw-r--r--sysui/desktop/icons/hicolor/32x32/apps/base.pngbin0 -> 2594 bytes
-rw-r--r--sysui/desktop/icons/hicolor/32x32/apps/calc.pngbin0 -> 2258 bytes
-rw-r--r--sysui/desktop/icons/hicolor/32x32/apps/draw.pngbin0 -> 2491 bytes
-rw-r--r--sysui/desktop/icons/hicolor/32x32/apps/impress.pngbin0 -> 2576 bytes
-rwxr-xr-xsysui/desktop/icons/hicolor/32x32/apps/main.pngbin0 -> 2429 bytes
-rw-r--r--sysui/desktop/icons/hicolor/32x32/apps/math.pngbin0 -> 2371 bytes
-rwxr-xr-xsysui/desktop/icons/hicolor/32x32/apps/printeradmin.pngbin0 -> 5595 bytes
-rw-r--r--sysui/desktop/icons/hicolor/32x32/apps/startcenter.pngbin0 -> 2429 bytes
-rw-r--r--sysui/desktop/icons/hicolor/32x32/apps/writer.pngbin0 -> 2158 bytes
-rw-r--r--sysui/desktop/icons/hicolor/32x32/mimetypes/database.pngbin0 -> 1319 bytes
-rw-r--r--sysui/desktop/icons/hicolor/32x32/mimetypes/drawing-template.pngbin0 -> 1307 bytes
-rw-r--r--sysui/desktop/icons/hicolor/32x32/mimetypes/drawing.pngbin0 -> 1363 bytes
-rwxr-xr-xsysui/desktop/icons/hicolor/32x32/mimetypes/extension.pngbin0 -> 1301 bytes
-rw-r--r--sysui/desktop/icons/hicolor/32x32/mimetypes/formula.pngbin0 -> 1172 bytes
-rw-r--r--sysui/desktop/icons/hicolor/32x32/mimetypes/master-document.pngbin0 -> 909 bytes
-rw-r--r--sysui/desktop/icons/hicolor/32x32/mimetypes/oasis-database.pngbin0 -> 1497 bytes
-rw-r--r--sysui/desktop/icons/hicolor/32x32/mimetypes/oasis-drawing-template.pngbin0 -> 1506 bytes
-rw-r--r--sysui/desktop/icons/hicolor/32x32/mimetypes/oasis-drawing.pngbin0 -> 1548 bytes
-rw-r--r--sysui/desktop/icons/hicolor/32x32/mimetypes/oasis-formula.pngbin0 -> 1346 bytes
-rw-r--r--sysui/desktop/icons/hicolor/32x32/mimetypes/oasis-master-document.pngbin0 -> 1110 bytes
-rw-r--r--sysui/desktop/icons/hicolor/32x32/mimetypes/oasis-presentation-template.pngbin0 -> 1370 bytes
-rw-r--r--sysui/desktop/icons/hicolor/32x32/mimetypes/oasis-presentation.pngbin0 -> 1180 bytes
-rw-r--r--sysui/desktop/icons/hicolor/32x32/mimetypes/oasis-spreadsheet-template.pngbin0 -> 1130 bytes
-rw-r--r--sysui/desktop/icons/hicolor/32x32/mimetypes/oasis-spreadsheet.pngbin0 -> 917 bytes
-rw-r--r--sysui/desktop/icons/hicolor/32x32/mimetypes/oasis-text-template.pngbin0 -> 1153 bytes
-rw-r--r--sysui/desktop/icons/hicolor/32x32/mimetypes/oasis-text.pngbin0 -> 1106 bytes
-rw-r--r--sysui/desktop/icons/hicolor/32x32/mimetypes/oasis-web-template.pngbin0 -> 966 bytes
-rw-r--r--sysui/desktop/icons/hicolor/32x32/mimetypes/presentation-template.pngbin0 -> 1166 bytes
-rw-r--r--sysui/desktop/icons/hicolor/32x32/mimetypes/presentation.pngbin0 -> 982 bytes
-rw-r--r--sysui/desktop/icons/hicolor/32x32/mimetypes/spreadsheet-template.pngbin0 -> 919 bytes
-rw-r--r--sysui/desktop/icons/hicolor/32x32/mimetypes/spreadsheet.pngbin0 -> 692 bytes
-rw-r--r--sysui/desktop/icons/hicolor/32x32/mimetypes/text-template.pngbin0 -> 941 bytes
-rw-r--r--sysui/desktop/icons/hicolor/32x32/mimetypes/text.pngbin0 -> 903 bytes
-rw-r--r--sysui/desktop/icons/hicolor/48x48/apps/base.pngbin0 -> 4740 bytes
-rw-r--r--sysui/desktop/icons/hicolor/48x48/apps/calc.pngbin0 -> 4298 bytes
-rw-r--r--sysui/desktop/icons/hicolor/48x48/apps/draw.pngbin0 -> 4415 bytes
-rw-r--r--sysui/desktop/icons/hicolor/48x48/apps/impress.pngbin0 -> 4672 bytes
-rwxr-xr-xsysui/desktop/icons/hicolor/48x48/apps/main.pngbin0 -> 4184 bytes
-rw-r--r--sysui/desktop/icons/hicolor/48x48/apps/math.pngbin0 -> 4263 bytes
-rwxr-xr-xsysui/desktop/icons/hicolor/48x48/apps/printeradmin.pngbin0 -> 7337 bytes
-rw-r--r--sysui/desktop/icons/hicolor/48x48/apps/startcenter.pngbin0 -> 4184 bytes
-rw-r--r--sysui/desktop/icons/hicolor/48x48/apps/writer.pngbin0 -> 3983 bytes
-rw-r--r--sysui/desktop/icons/hicolor/48x48/mimetypes/database.pngbin0 -> 1862 bytes
-rw-r--r--sysui/desktop/icons/hicolor/48x48/mimetypes/drawing-template.pngbin0 -> 1923 bytes
-rw-r--r--sysui/desktop/icons/hicolor/48x48/mimetypes/drawing.pngbin0 -> 1962 bytes
-rwxr-xr-xsysui/desktop/icons/hicolor/48x48/mimetypes/extension.pngbin0 -> 2269 bytes
-rw-r--r--sysui/desktop/icons/hicolor/48x48/mimetypes/formula.pngbin0 -> 1589 bytes
-rw-r--r--sysui/desktop/icons/hicolor/48x48/mimetypes/master-document.pngbin0 -> 1160 bytes
-rw-r--r--sysui/desktop/icons/hicolor/48x48/mimetypes/oasis-database.pngbin0 -> 2430 bytes
-rw-r--r--sysui/desktop/icons/hicolor/48x48/mimetypes/oasis-drawing-template.pngbin0 -> 2482 bytes
-rw-r--r--sysui/desktop/icons/hicolor/48x48/mimetypes/oasis-drawing.pngbin0 -> 2518 bytes
-rw-r--r--sysui/desktop/icons/hicolor/48x48/mimetypes/oasis-formula.pngbin0 -> 2171 bytes
-rw-r--r--sysui/desktop/icons/hicolor/48x48/mimetypes/oasis-master-document.pngbin0 -> 1741 bytes
-rw-r--r--sysui/desktop/icons/hicolor/48x48/mimetypes/oasis-presentation-template.pngbin0 -> 2376 bytes
-rw-r--r--sysui/desktop/icons/hicolor/48x48/mimetypes/oasis-presentation.pngbin0 -> 2125 bytes
-rw-r--r--sysui/desktop/icons/hicolor/48x48/mimetypes/oasis-spreadsheet-template.pngbin0 -> 2400 bytes
-rw-r--r--sysui/desktop/icons/hicolor/48x48/mimetypes/oasis-spreadsheet.pngbin0 -> 2079 bytes
-rw-r--r--sysui/desktop/icons/hicolor/48x48/mimetypes/oasis-text-template.pngbin0 -> 2125 bytes
-rw-r--r--sysui/desktop/icons/hicolor/48x48/mimetypes/oasis-text.pngbin0 -> 2094 bytes
-rw-r--r--sysui/desktop/icons/hicolor/48x48/mimetypes/oasis-web-template.pngbin0 -> 1537 bytes
-rw-r--r--sysui/desktop/icons/hicolor/48x48/mimetypes/presentation-template.pngbin0 -> 1792 bytes
-rw-r--r--sysui/desktop/icons/hicolor/48x48/mimetypes/presentation.pngbin0 -> 1551 bytes
-rw-r--r--sysui/desktop/icons/hicolor/48x48/mimetypes/spreadsheet-template.pngbin0 -> 1829 bytes
-rw-r--r--sysui/desktop/icons/hicolor/48x48/mimetypes/spreadsheet.pngbin0 -> 1476 bytes
-rw-r--r--sysui/desktop/icons/hicolor/48x48/mimetypes/text-template.pngbin0 -> 1552 bytes
-rw-r--r--sysui/desktop/icons/hicolor/48x48/mimetypes/text.pngbin0 -> 1525 bytes
-rw-r--r--sysui/desktop/icons/impress.icnsbin0 -> 53113 bytes
-rw-r--r--sysui/desktop/icons/locolor/16x16/apps/base.pngbin0 -> 361 bytes
-rw-r--r--sysui/desktop/icons/locolor/16x16/apps/calc.pngbin0 -> 383 bytes
-rw-r--r--sysui/desktop/icons/locolor/16x16/apps/draw.pngbin0 -> 378 bytes
-rw-r--r--sysui/desktop/icons/locolor/16x16/apps/impress.pngbin0 -> 373 bytes
-rw-r--r--sysui/desktop/icons/locolor/16x16/apps/math.pngbin0 -> 392 bytes
-rw-r--r--sysui/desktop/icons/locolor/16x16/apps/printeradmin.pngbin0 -> 395 bytes
-rw-r--r--sysui/desktop/icons/locolor/16x16/apps/startcenter.pngbin0 -> 361 bytes
-rw-r--r--sysui/desktop/icons/locolor/16x16/apps/writer.pngbin0 -> 380 bytes
-rw-r--r--sysui/desktop/icons/locolor/16x16/mimetypes/database.pngbin0 -> 291 bytes
-rw-r--r--sysui/desktop/icons/locolor/16x16/mimetypes/drawing-template.pngbin0 -> 348 bytes
-rw-r--r--sysui/desktop/icons/locolor/16x16/mimetypes/drawing.pngbin0 -> 354 bytes
-rwxr-xr-xsysui/desktop/icons/locolor/16x16/mimetypes/extension.pngbin0 -> 309 bytes
-rw-r--r--sysui/desktop/icons/locolor/16x16/mimetypes/formula.pngbin0 -> 252 bytes
-rw-r--r--sysui/desktop/icons/locolor/16x16/mimetypes/master-document.pngbin0 -> 310 bytes
-rw-r--r--sysui/desktop/icons/locolor/16x16/mimetypes/oasis-database.pngbin0 -> 414 bytes
-rw-r--r--sysui/desktop/icons/locolor/16x16/mimetypes/oasis-drawing-template.pngbin0 -> 394 bytes
-rw-r--r--sysui/desktop/icons/locolor/16x16/mimetypes/oasis-drawing.pngbin0 -> 419 bytes
-rw-r--r--sysui/desktop/icons/locolor/16x16/mimetypes/oasis-formula.pngbin0 -> 423 bytes
-rw-r--r--sysui/desktop/icons/locolor/16x16/mimetypes/oasis-master-document.pngbin0 -> 416 bytes
-rw-r--r--sysui/desktop/icons/locolor/16x16/mimetypes/oasis-presentation-template.pngbin0 -> 417 bytes
-rw-r--r--sysui/desktop/icons/locolor/16x16/mimetypes/oasis-presentation.pngbin0 -> 416 bytes
-rw-r--r--sysui/desktop/icons/locolor/16x16/mimetypes/oasis-spreadsheet-template.pngbin0 -> 396 bytes
-rw-r--r--sysui/desktop/icons/locolor/16x16/mimetypes/oasis-spreadsheet.pngbin0 -> 395 bytes
-rw-r--r--sysui/desktop/icons/locolor/16x16/mimetypes/oasis-text-template.pngbin0 -> 393 bytes
-rw-r--r--sysui/desktop/icons/locolor/16x16/mimetypes/oasis-text.pngbin0 -> 397 bytes
-rw-r--r--sysui/desktop/icons/locolor/16x16/mimetypes/oasis-web-template.pngbin0 -> 437 bytes
-rw-r--r--sysui/desktop/icons/locolor/16x16/mimetypes/presentation-template.pngbin0 -> 303 bytes
-rw-r--r--sysui/desktop/icons/locolor/16x16/mimetypes/presentation.pngbin0 -> 302 bytes
-rw-r--r--sysui/desktop/icons/locolor/16x16/mimetypes/spreadsheet-template.pngbin0 -> 287 bytes
-rw-r--r--sysui/desktop/icons/locolor/16x16/mimetypes/spreadsheet.pngbin0 -> 271 bytes
-rw-r--r--sysui/desktop/icons/locolor/16x16/mimetypes/text-template.pngbin0 -> 240 bytes
-rw-r--r--sysui/desktop/icons/locolor/16x16/mimetypes/text.pngbin0 -> 245 bytes
-rw-r--r--sysui/desktop/icons/locolor/32x32/apps/base.pngbin0 -> 611 bytes
-rw-r--r--sysui/desktop/icons/locolor/32x32/apps/calc.pngbin0 -> 629 bytes
-rw-r--r--sysui/desktop/icons/locolor/32x32/apps/draw.pngbin0 -> 639 bytes
-rw-r--r--sysui/desktop/icons/locolor/32x32/apps/impress.pngbin0 -> 606 bytes
-rw-r--r--sysui/desktop/icons/locolor/32x32/apps/math.pngbin0 -> 616 bytes
-rw-r--r--sysui/desktop/icons/locolor/32x32/apps/printeradmin.pngbin0 -> 618 bytes
-rw-r--r--sysui/desktop/icons/locolor/32x32/apps/startcenter.pngbin0 -> 611 bytes
-rw-r--r--sysui/desktop/icons/locolor/32x32/apps/writer.pngbin0 -> 541 bytes
-rw-r--r--sysui/desktop/icons/locolor/32x32/mimetypes/database.pngbin0 -> 529 bytes
-rw-r--r--sysui/desktop/icons/locolor/32x32/mimetypes/drawing-template.pngbin0 -> 1344 bytes
-rw-r--r--sysui/desktop/icons/locolor/32x32/mimetypes/drawing.pngbin0 -> 1483 bytes
-rwxr-xr-xsysui/desktop/icons/locolor/32x32/mimetypes/extension.pngbin0 -> 504 bytes
-rw-r--r--sysui/desktop/icons/locolor/32x32/mimetypes/formula.pngbin0 -> 1349 bytes
-rw-r--r--sysui/desktop/icons/locolor/32x32/mimetypes/master-document.pngbin0 -> 1559 bytes
-rw-r--r--sysui/desktop/icons/locolor/32x32/mimetypes/oasis-database.pngbin0 -> 780 bytes
-rw-r--r--sysui/desktop/icons/locolor/32x32/mimetypes/oasis-drawing-template.pngbin0 -> 667 bytes
-rw-r--r--sysui/desktop/icons/locolor/32x32/mimetypes/oasis-drawing.pngbin0 -> 779 bytes
-rw-r--r--sysui/desktop/icons/locolor/32x32/mimetypes/oasis-formula.pngbin0 -> 742 bytes
-rw-r--r--sysui/desktop/icons/locolor/32x32/mimetypes/oasis-master-document.pngbin0 -> 758 bytes
-rw-r--r--sysui/desktop/icons/locolor/32x32/mimetypes/oasis-presentation-template.pngbin0 -> 678 bytes
-rw-r--r--sysui/desktop/icons/locolor/32x32/mimetypes/oasis-presentation.pngbin0 -> 752 bytes
-rw-r--r--sysui/desktop/icons/locolor/32x32/mimetypes/oasis-spreadsheet-template.pngbin0 -> 653 bytes
-rw-r--r--sysui/desktop/icons/locolor/32x32/mimetypes/oasis-spreadsheet.pngbin0 -> 774 bytes
-rw-r--r--sysui/desktop/icons/locolor/32x32/mimetypes/oasis-text-template.pngbin0 -> 624 bytes
-rw-r--r--sysui/desktop/icons/locolor/32x32/mimetypes/oasis-text.pngbin0 -> 702 bytes
-rw-r--r--sysui/desktop/icons/locolor/32x32/mimetypes/oasis-web-template.pngbin0 -> 801 bytes
-rw-r--r--sysui/desktop/icons/locolor/32x32/mimetypes/presentation-template.pngbin0 -> 1403 bytes
-rw-r--r--sysui/desktop/icons/locolor/32x32/mimetypes/presentation.pngbin0 -> 1515 bytes
-rw-r--r--sysui/desktop/icons/locolor/32x32/mimetypes/spreadsheet-template.pngbin0 -> 1211 bytes
-rw-r--r--sysui/desktop/icons/locolor/32x32/mimetypes/spreadsheet.pngbin0 -> 1301 bytes
-rw-r--r--sysui/desktop/icons/locolor/32x32/mimetypes/text-template.pngbin0 -> 1211 bytes
-rw-r--r--sysui/desktop/icons/locolor/32x32/mimetypes/text.pngbin0 -> 1406 bytes
-rw-r--r--sysui/desktop/icons/macro.icnsbin0 -> 53951 bytes
-rwxr-xr-xsysui/desktop/icons/main.icnsbin0 -> 51889 bytes
-rw-r--r--sysui/desktop/icons/makefile.mk198
-rw-r--r--sysui/desktop/icons/master-document.icnsbin0 -> 41443 bytes
-rw-r--r--sysui/desktop/icons/master-document.icobin0 -> 295606 bytes
-rw-r--r--sysui/desktop/icons/math.icnsbin0 -> 52282 bytes
-rw-r--r--sysui/desktop/icons/oasis-chart.icnsbin0 -> 60133 bytes
-rw-r--r--sysui/desktop/icons/oasis-database.icnsbin0 -> 51503 bytes
-rw-r--r--sysui/desktop/icons/oasis-database.icobin0 -> 295606 bytes
-rw-r--r--sysui/desktop/icons/oasis-drawing-template.icnsbin0 -> 51093 bytes
-rw-r--r--sysui/desktop/icons/oasis-drawing-template.icobin0 -> 295606 bytes
-rw-r--r--sysui/desktop/icons/oasis-drawing.icnsbin0 -> 49965 bytes
-rw-r--r--sysui/desktop/icons/oasis-drawing.icobin0 -> 295606 bytes
-rw-r--r--sysui/desktop/icons/oasis-empty-document.icnsbin0 -> 40589 bytes
-rw-r--r--sysui/desktop/icons/oasis-empty-document.icobin0 -> 295606 bytes
-rw-r--r--sysui/desktop/icons/oasis-empty-template.icnsbin0 -> 42146 bytes
-rw-r--r--sysui/desktop/icons/oasis-empty-template.icobin0 -> 295606 bytes
-rw-r--r--sysui/desktop/icons/oasis-formula.icnsbin0 -> 45027 bytes
-rw-r--r--sysui/desktop/icons/oasis-formula.icobin0 -> 295606 bytes
-rw-r--r--sysui/desktop/icons/oasis-master-document.icnsbin0 -> 44531 bytes
-rw-r--r--sysui/desktop/icons/oasis-master-document.icobin0 -> 295606 bytes
-rw-r--r--sysui/desktop/icons/oasis-presentation-template.icnsbin0 -> 47163 bytes
-rw-r--r--sysui/desktop/icons/oasis-presentation-template.icobin0 -> 295606 bytes
-rw-r--r--sysui/desktop/icons/oasis-presentation.icnsbin0 -> 43638 bytes
-rw-r--r--sysui/desktop/icons/oasis-presentation.icobin0 -> 295606 bytes
-rw-r--r--sysui/desktop/icons/oasis-spreadsheet-template.icnsbin0 -> 52924 bytes
-rw-r--r--sysui/desktop/icons/oasis-spreadsheet-template.icobin0 -> 295606 bytes
-rw-r--r--sysui/desktop/icons/oasis-spreadsheet.icnsbin0 -> 51578 bytes
-rw-r--r--sysui/desktop/icons/oasis-spreadsheet.icobin0 -> 295606 bytes
-rw-r--r--sysui/desktop/icons/oasis-text-template.icnsbin0 -> 49722 bytes
-rw-r--r--sysui/desktop/icons/oasis-text-template.icobin0 -> 295606 bytes
-rw-r--r--sysui/desktop/icons/oasis-text.icnsbin0 -> 48791 bytes
-rw-r--r--sysui/desktop/icons/oasis-text.icobin0 -> 295606 bytes
-rw-r--r--sysui/desktop/icons/oasis-web-template.icnsbin0 -> 42146 bytes
-rw-r--r--sysui/desktop/icons/oasis-web-template.icobin0 -> 295606 bytes
-rw-r--r--sysui/desktop/icons/ooo-base-app.icobin0 -> 92854 bytes
-rw-r--r--sysui/desktop/icons/ooo-base-doc.icobin0 -> 92854 bytes
-rw-r--r--sysui/desktop/icons/ooo-calc-app.icobin0 -> 92854 bytes
-rw-r--r--sysui/desktop/icons/ooo-calc-doc.icobin0 -> 92854 bytes
-rw-r--r--sysui/desktop/icons/ooo-calc-tem.icobin0 -> 92854 bytes
-rw-r--r--sysui/desktop/icons/ooo-chart-doc.icobin0 -> 25214 bytes
-rw-r--r--sysui/desktop/icons/ooo-configuration.icobin0 -> 25214 bytes
-rw-r--r--sysui/desktop/icons/ooo-draw-app.icobin0 -> 92854 bytes
-rw-r--r--sysui/desktop/icons/ooo-draw-doc.icobin0 -> 92854 bytes
-rw-r--r--sysui/desktop/icons/ooo-draw-tem.icobin0 -> 92854 bytes
-rw-r--r--sysui/desktop/icons/ooo-empty-doc.icobin0 -> 25214 bytes
-rw-r--r--sysui/desktop/icons/ooo-empty-tem.icobin0 -> 25214 bytes
-rw-r--r--sysui/desktop/icons/ooo-image-doc.icobin0 -> 92854 bytes
-rw-r--r--sysui/desktop/icons/ooo-impress-app.icobin0 -> 92854 bytes
-rw-r--r--sysui/desktop/icons/ooo-impress-doc.icobin0 -> 92854 bytes
-rw-r--r--sysui/desktop/icons/ooo-impress-tem.icobin0 -> 92854 bytes
-rw-r--r--sysui/desktop/icons/ooo-macro-doc.icobin0 -> 92854 bytes
-rw-r--r--sysui/desktop/icons/ooo-main-app.icobin0 -> 92854 bytes
-rw-r--r--sysui/desktop/icons/ooo-master-doc.icobin0 -> 92854 bytes
-rw-r--r--sysui/desktop/icons/ooo-math-app.icobin0 -> 92854 bytes
-rw-r--r--sysui/desktop/icons/ooo-math-doc.icobin0 -> 92854 bytes
-rw-r--r--sysui/desktop/icons/ooo-open.icobin0 -> 25214 bytes
-rw-r--r--sysui/desktop/icons/ooo-printer.icobin0 -> 25214 bytes
-rw-r--r--sysui/desktop/icons/ooo-web-doc.icobin0 -> 92854 bytes
-rw-r--r--sysui/desktop/icons/ooo-writer-app.icobin0 -> 92854 bytes
-rw-r--r--sysui/desktop/icons/ooo-writer-doc.icobin0 -> 92854 bytes
-rw-r--r--sysui/desktop/icons/ooo-writer-tem.icobin0 -> 92854 bytes
-rwxr-xr-xsysui/desktop/icons/ooo11-base-doc.icobin0 -> 10638 bytes
-rwxr-xr-xsysui/desktop/icons/ooo11-calc-doc.icobin0 -> 10638 bytes
-rwxr-xr-xsysui/desktop/icons/ooo11-calc-tem.icobin0 -> 10638 bytes
-rwxr-xr-xsysui/desktop/icons/ooo11-chart-doc.icobin0 -> 10638 bytes
-rwxr-xr-xsysui/desktop/icons/ooo11-draw-doc.icobin0 -> 10638 bytes
-rwxr-xr-xsysui/desktop/icons/ooo11-draw-tem.icobin0 -> 10638 bytes
-rwxr-xr-xsysui/desktop/icons/ooo11-impress-doc.icobin0 -> 10638 bytes
-rwxr-xr-xsysui/desktop/icons/ooo11-impress-tem.icobin0 -> 10638 bytes
-rwxr-xr-xsysui/desktop/icons/ooo11-master-doc.icobin0 -> 10638 bytes
-rwxr-xr-xsysui/desktop/icons/ooo11-math-doc.icobin0 -> 10638 bytes
-rwxr-xr-xsysui/desktop/icons/ooo11-writer-doc.icobin0 -> 10638 bytes
-rwxr-xr-xsysui/desktop/icons/ooo11-writer-tem.icobin0 -> 10638 bytes
-rwxr-xr-xsysui/desktop/icons/ooo3_base_app.icobin0 -> 295606 bytes
-rw-r--r--sysui/desktop/icons/ooo3_base_doc.icobin0 -> 295606 bytes
-rwxr-xr-xsysui/desktop/icons/ooo3_calc_app.icobin0 -> 295606 bytes
-rw-r--r--sysui/desktop/icons/ooo3_calc_doc.icobin0 -> 295606 bytes
-rw-r--r--sysui/desktop/icons/ooo3_calc_tem.icobin0 -> 295606 bytes
-rw-r--r--sysui/desktop/icons/ooo3_chart_doc.icobin0 -> 295606 bytes
-rwxr-xr-xsysui/desktop/icons/ooo3_draw_app.icobin0 -> 295606 bytes
-rw-r--r--sysui/desktop/icons/ooo3_draw_doc.icobin0 -> 295606 bytes
-rw-r--r--sysui/desktop/icons/ooo3_draw_tem.icobin0 -> 295606 bytes
-rw-r--r--sysui/desktop/icons/ooo3_empty_doc.icobin0 -> 295606 bytes
-rw-r--r--sysui/desktop/icons/ooo3_empty_tem.icobin0 -> 295606 bytes
-rw-r--r--sysui/desktop/icons/ooo3_global_doc.icobin0 -> 295606 bytes
-rw-r--r--sysui/desktop/icons/ooo3_html_doc.icobin0 -> 295606 bytes
-rwxr-xr-xsysui/desktop/icons/ooo3_impress_app.icobin0 -> 295606 bytes
-rw-r--r--sysui/desktop/icons/ooo3_impress_doc.icobin0 -> 295606 bytes
-rw-r--r--sysui/desktop/icons/ooo3_impress_tem.icobin0 -> 295606 bytes
-rw-r--r--sysui/desktop/icons/ooo3_macro_doc.icobin0 -> 295606 bytes
-rwxr-xr-xsysui/desktop/icons/ooo3_main_app.icobin0 -> 295606 bytes
-rwxr-xr-xsysui/desktop/icons/ooo3_math_app.icobin0 -> 295606 bytes
-rw-r--r--sysui/desktop/icons/ooo3_math_doc.icobin0 -> 295606 bytes
-rwxr-xr-xsysui/desktop/icons/ooo3_open.icobin0 -> 295606 bytes
-rwxr-xr-xsysui/desktop/icons/ooo3_writer_app.icobin0 -> 295606 bytes
-rw-r--r--sysui/desktop/icons/ooo3_writer_doc.icobin0 -> 295606 bytes
-rw-r--r--sysui/desktop/icons/ooo3_writer_tem.icobin0 -> 295606 bytes
-rw-r--r--sysui/desktop/icons/open.icnsbin0 -> 50105 bytes
-rw-r--r--sysui/desktop/icons/oxt-extension.icobin0 -> 25214 bytes
-rw-r--r--sysui/desktop/icons/presentation-template.icnsbin0 -> 44076 bytes
-rw-r--r--sysui/desktop/icons/presentation-template.icobin0 -> 295606 bytes
-rw-r--r--sysui/desktop/icons/presentation.icnsbin0 -> 40551 bytes
-rw-r--r--sysui/desktop/icons/presentation.icobin0 -> 295606 bytes
-rw-r--r--sysui/desktop/icons/printer.icnsbin0 -> 50434 bytes
-rw-r--r--sysui/desktop/icons/so7-base-doc.icobin0 -> 25214 bytes
-rw-r--r--sysui/desktop/icons/so7-calc-doc.icobin0 -> 25214 bytes
-rw-r--r--sysui/desktop/icons/so7-calc-tem.icobin0 -> 25214 bytes
-rw-r--r--sysui/desktop/icons/so7-chart-doc.icobin0 -> 25214 bytes
-rw-r--r--sysui/desktop/icons/so7-draw-doc.icobin0 -> 25214 bytes
-rw-r--r--sysui/desktop/icons/so7-draw-tem.icobin0 -> 25214 bytes
-rw-r--r--sysui/desktop/icons/so7-impress-doc.icobin0 -> 25214 bytes
-rw-r--r--sysui/desktop/icons/so7-impress-tem.icobin0 -> 25214 bytes
-rw-r--r--sysui/desktop/icons/so7-master-doc.icobin0 -> 25214 bytes
-rw-r--r--sysui/desktop/icons/so7-math-doc.icobin0 -> 25214 bytes
-rw-r--r--sysui/desktop/icons/so7-writer-doc.icobin0 -> 25214 bytes
-rw-r--r--sysui/desktop/icons/so7-writer-tem.icobin0 -> 25214 bytes
-rw-r--r--sysui/desktop/icons/so8-base-app.icobin0 -> 25214 bytes
-rw-r--r--sysui/desktop/icons/so8-base-doc.icobin0 -> 25214 bytes
-rw-r--r--sysui/desktop/icons/so8-calc-app.icobin0 -> 25214 bytes
-rw-r--r--sysui/desktop/icons/so8-calc-doc.icobin0 -> 25214 bytes
-rw-r--r--sysui/desktop/icons/so8-calc-tem.icobin0 -> 25214 bytes
-rw-r--r--sysui/desktop/icons/so8-chart-doc.icobin0 -> 10134 bytes
-rw-r--r--sysui/desktop/icons/so8-configuration.icobin0 -> 25214 bytes
-rw-r--r--sysui/desktop/icons/so8-draw-app.icobin0 -> 25214 bytes
-rw-r--r--sysui/desktop/icons/so8-draw-doc.icobin0 -> 25214 bytes
-rw-r--r--sysui/desktop/icons/so8-draw-tem.icobin0 -> 25214 bytes
-rw-r--r--sysui/desktop/icons/so8-empty-doc.icobin0 -> 25214 bytes
-rw-r--r--sysui/desktop/icons/so8-empty-tem.icobin0 -> 25214 bytes
-rw-r--r--sysui/desktop/icons/so8-image-doc.icobin0 -> 10134 bytes
-rw-r--r--sysui/desktop/icons/so8-impress-app.icobin0 -> 25214 bytes
-rw-r--r--sysui/desktop/icons/so8-impress-doc.icobin0 -> 25214 bytes
-rw-r--r--sysui/desktop/icons/so8-impress-tem.icobin0 -> 25214 bytes
-rw-r--r--sysui/desktop/icons/so8-macro-doc.icobin0 -> 25214 bytes
-rw-r--r--sysui/desktop/icons/so8-main-app.icobin0 -> 25214 bytes
-rw-r--r--sysui/desktop/icons/so8-master-doc.icobin0 -> 25214 bytes
-rw-r--r--sysui/desktop/icons/so8-math-app.icobin0 -> 25214 bytes
-rw-r--r--sysui/desktop/icons/so8-math-doc.icobin0 -> 25214 bytes
-rw-r--r--sysui/desktop/icons/so8-open.icobin0 -> 25214 bytes
-rw-r--r--sysui/desktop/icons/so8-printer.icobin0 -> 25214 bytes
-rw-r--r--sysui/desktop/icons/so8-web-doc.icobin0 -> 25214 bytes
-rw-r--r--sysui/desktop/icons/so8-writer-app.icobin0 -> 25214 bytes
-rw-r--r--sysui/desktop/icons/so8-writer-doc.icobin0 -> 25214 bytes
-rw-r--r--sysui/desktop/icons/so8-writer-tem.icobin0 -> 25214 bytes
-rwxr-xr-xsysui/desktop/icons/so9_base_app.icobin0 -> 295606 bytes
-rw-r--r--sysui/desktop/icons/so9_base_doc.icobin0 -> 295606 bytes
-rwxr-xr-xsysui/desktop/icons/so9_calc_app.icobin0 -> 295606 bytes
-rw-r--r--sysui/desktop/icons/so9_calc_doc.icobin0 -> 295606 bytes
-rw-r--r--sysui/desktop/icons/so9_calc_tem.icobin0 -> 295606 bytes
-rw-r--r--sysui/desktop/icons/so9_chart_doc.icobin0 -> 295606 bytes
-rwxr-xr-xsysui/desktop/icons/so9_draw_app.icobin0 -> 295606 bytes
-rw-r--r--sysui/desktop/icons/so9_draw_doc.icobin0 -> 295606 bytes
-rw-r--r--sysui/desktop/icons/so9_draw_tem.icobin0 -> 295606 bytes
-rw-r--r--sysui/desktop/icons/so9_empty_doc.icobin0 -> 295606 bytes
-rw-r--r--sysui/desktop/icons/so9_empty_tem.icobin0 -> 295606 bytes
-rw-r--r--sysui/desktop/icons/so9_global_doc.icobin0 -> 295606 bytes
-rw-r--r--sysui/desktop/icons/so9_html_doc.icobin0 -> 295606 bytes
-rwxr-xr-xsysui/desktop/icons/so9_impress_app.icobin0 -> 295606 bytes
-rw-r--r--sysui/desktop/icons/so9_impress_doc.icobin0 -> 295606 bytes
-rw-r--r--sysui/desktop/icons/so9_impress_tem.icobin0 -> 295606 bytes
-rw-r--r--sysui/desktop/icons/so9_macro_doc.icobin0 -> 295606 bytes
-rwxr-xr-xsysui/desktop/icons/so9_main_app.icobin0 -> 295606 bytes
-rwxr-xr-xsysui/desktop/icons/so9_math_app.icobin0 -> 295606 bytes
-rw-r--r--sysui/desktop/icons/so9_math_doc.icobin0 -> 295606 bytes
-rwxr-xr-xsysui/desktop/icons/so9_open.icobin0 -> 295606 bytes
-rwxr-xr-xsysui/desktop/icons/so9_writer_app.icobin0 -> 295606 bytes
-rw-r--r--sysui/desktop/icons/so9_writer_doc.icobin0 -> 295606 bytes
-rw-r--r--sysui/desktop/icons/so9_writer_tem.icobin0 -> 295606 bytes
-rw-r--r--sysui/desktop/icons/spreadsheet-template.icnsbin0 -> 49837 bytes
-rw-r--r--sysui/desktop/icons/spreadsheet-template.icobin0 -> 295606 bytes
-rw-r--r--sysui/desktop/icons/spreadsheet.icnsbin0 -> 48491 bytes
-rw-r--r--sysui/desktop/icons/spreadsheet.icobin0 -> 295606 bytes
-rw-r--r--sysui/desktop/icons/text-template.icnsbin0 -> 46635 bytes
-rw-r--r--sysui/desktop/icons/text-template.icobin0 -> 295606 bytes
-rw-r--r--sysui/desktop/icons/text.icnsbin0 -> 45704 bytes
-rw-r--r--sysui/desktop/icons/text.icobin0 -> 295606 bytes
-rw-r--r--sysui/desktop/icons/writer.icnsbin0 -> 49850 bytes
-rw-r--r--sysui/desktop/macosx/Info.plist1408
-rw-r--r--sysui/desktop/macosx/delzip0
-rw-r--r--sysui/desktop/macosx/gen_strings.pl116
-rw-r--r--sysui/desktop/macosx/list_icons.pl84
-rw-r--r--sysui/desktop/macosx/makefile.mk88
-rw-r--r--sysui/desktop/mandriva/makefile.mk59
-rw-r--r--sysui/desktop/mandriva/mandriva-menus.spec335
-rw-r--r--sysui/desktop/menus/base.desktop12
-rw-r--r--sysui/desktop/menus/calc.desktop12
-rw-r--r--sysui/desktop/menus/draw.desktop12
-rw-r--r--sysui/desktop/menus/impress.desktop12
-rw-r--r--sysui/desktop/menus/javafilter.desktop9
-rw-r--r--sysui/desktop/menus/math.desktop12
-rw-r--r--sysui/desktop/menus/printeradmin.desktop8
-rw-r--r--sysui/desktop/menus/qstart.desktop9
-rw-r--r--sysui/desktop/menus/startcenter.desktop11
-rw-r--r--sysui/desktop/menus/writer.desktop12
-rw-r--r--sysui/desktop/mimetypes/drawing-template.desktop9
-rw-r--r--sysui/desktop/mimetypes/drawing-template.keys10
-rw-r--r--sysui/desktop/mimetypes/drawing.desktop9
-rw-r--r--sysui/desktop/mimetypes/drawing.keys10
-rw-r--r--sysui/desktop/mimetypes/extension.desktop9
-rw-r--r--sysui/desktop/mimetypes/extension.keys10
-rw-r--r--sysui/desktop/mimetypes/formula.desktop9
-rw-r--r--sysui/desktop/mimetypes/formula.keys10
-rw-r--r--sysui/desktop/mimetypes/master-document.desktop9
-rw-r--r--sysui/desktop/mimetypes/master-document.keys10
-rw-r--r--sysui/desktop/mimetypes/ms-excel-sheet-12.desktop9
-rw-r--r--sysui/desktop/mimetypes/ms-excel-sheet-12.keys10
-rw-r--r--sysui/desktop/mimetypes/ms-excel-sheet-binary-12.desktop9
-rw-r--r--sysui/desktop/mimetypes/ms-excel-sheet-binary-12.keys10
-rw-r--r--sysui/desktop/mimetypes/ms-excel-sheet.desktop9
-rw-r--r--sysui/desktop/mimetypes/ms-excel-sheet.keys10
-rw-r--r--sysui/desktop/mimetypes/ms-excel-template-12.desktop9
-rw-r--r--sysui/desktop/mimetypes/ms-excel-template-12.keys10
-rw-r--r--sysui/desktop/mimetypes/ms-powerpoint-presentation-12.desktop9
-rw-r--r--sysui/desktop/mimetypes/ms-powerpoint-presentation-12.keys10
-rw-r--r--sysui/desktop/mimetypes/ms-powerpoint-presentation.desktop9
-rw-r--r--sysui/desktop/mimetypes/ms-powerpoint-presentation.keys10
-rw-r--r--sysui/desktop/mimetypes/ms-powerpoint-template-12.desktop9
-rw-r--r--sysui/desktop/mimetypes/ms-powerpoint-template-12.keys10
-rw-r--r--sysui/desktop/mimetypes/ms-word-document-12.desktop9
-rw-r--r--sysui/desktop/mimetypes/ms-word-document-12.keys10
-rw-r--r--sysui/desktop/mimetypes/ms-word-document.desktop9
-rw-r--r--sysui/desktop/mimetypes/ms-word-document.keys10
-rw-r--r--sysui/desktop/mimetypes/ms-word-document2.desktop9
-rw-r--r--sysui/desktop/mimetypes/ms-word-document2.keys10
-rw-r--r--sysui/desktop/mimetypes/ms-word-template-12.desktop9
-rw-r--r--sysui/desktop/mimetypes/ms-word-template-12.keys10
-rw-r--r--sysui/desktop/mimetypes/oasis-database.desktop9
-rw-r--r--sysui/desktop/mimetypes/oasis-database.keys10
-rw-r--r--sysui/desktop/mimetypes/oasis-drawing-template.desktop9
-rw-r--r--sysui/desktop/mimetypes/oasis-drawing-template.keys10
-rw-r--r--sysui/desktop/mimetypes/oasis-drawing.desktop9
-rw-r--r--sysui/desktop/mimetypes/oasis-drawing.keys10
-rw-r--r--sysui/desktop/mimetypes/oasis-formula.desktop9
-rw-r--r--sysui/desktop/mimetypes/oasis-formula.keys10
-rw-r--r--sysui/desktop/mimetypes/oasis-master-document.desktop9
-rw-r--r--sysui/desktop/mimetypes/oasis-master-document.keys10
-rw-r--r--sysui/desktop/mimetypes/oasis-presentation-template.desktop9
-rw-r--r--sysui/desktop/mimetypes/oasis-presentation-template.keys10
-rw-r--r--sysui/desktop/mimetypes/oasis-presentation.desktop9
-rw-r--r--sysui/desktop/mimetypes/oasis-presentation.keys10
-rw-r--r--sysui/desktop/mimetypes/oasis-spreadsheet-template.desktop9
-rw-r--r--sysui/desktop/mimetypes/oasis-spreadsheet-template.keys10
-rw-r--r--sysui/desktop/mimetypes/oasis-spreadsheet.desktop9
-rw-r--r--sysui/desktop/mimetypes/oasis-spreadsheet.keys10
-rw-r--r--sysui/desktop/mimetypes/oasis-text-template.desktop9
-rw-r--r--sysui/desktop/mimetypes/oasis-text-template.keys9
-rw-r--r--sysui/desktop/mimetypes/oasis-text.desktop9
-rw-r--r--sysui/desktop/mimetypes/oasis-text.keys10
-rw-r--r--sysui/desktop/mimetypes/oasis-web-template.desktop9
-rw-r--r--sysui/desktop/mimetypes/oasis-web-template.keys10
-rw-r--r--sysui/desktop/mimetypes/openoffice.applications9
-rw-r--r--sysui/desktop/mimetypes/openoffice.mime83
-rw-r--r--sysui/desktop/mimetypes/openxmlformats-officedocument-presentationml-presentation.desktop9
-rw-r--r--sysui/desktop/mimetypes/openxmlformats-officedocument-presentationml-presentation.keys10
-rw-r--r--sysui/desktop/mimetypes/openxmlformats-officedocument-presentationml-template.desktop9
-rw-r--r--sysui/desktop/mimetypes/openxmlformats-officedocument-presentationml-template.keys10
-rw-r--r--sysui/desktop/mimetypes/openxmlformats-officedocument-spreadsheetml-sheet.desktop9
-rw-r--r--sysui/desktop/mimetypes/openxmlformats-officedocument-spreadsheetml-sheet.keys10
-rw-r--r--sysui/desktop/mimetypes/openxmlformats-officedocument-spreadsheetml-template.desktop9
-rw-r--r--sysui/desktop/mimetypes/openxmlformats-officedocument-spreadsheetml-template.keys10
-rw-r--r--sysui/desktop/mimetypes/openxmlformats-officedocument-wordprocessingml-document.desktop9
-rw-r--r--sysui/desktop/mimetypes/openxmlformats-officedocument-wordprocessingml-document.keys10
-rw-r--r--sysui/desktop/mimetypes/openxmlformats-officedocument-wordprocessingml-template.desktop9
-rw-r--r--sysui/desktop/mimetypes/openxmlformats-officedocument-wordprocessingml-template.keys10
-rw-r--r--sysui/desktop/mimetypes/presentation-template.desktop9
-rw-r--r--sysui/desktop/mimetypes/presentation-template.keys10
-rw-r--r--sysui/desktop/mimetypes/presentation.desktop9
-rw-r--r--sysui/desktop/mimetypes/presentation.keys10
-rw-r--r--sysui/desktop/mimetypes/spreadsheet-template.desktop9
-rw-r--r--sysui/desktop/mimetypes/spreadsheet-template.keys10
-rw-r--r--sysui/desktop/mimetypes/spreadsheet.desktop9
-rw-r--r--sysui/desktop/mimetypes/spreadsheet.keys10
-rw-r--r--sysui/desktop/mimetypes/text-template.desktop9
-rw-r--r--sysui/desktop/mimetypes/text-template.keys9
-rw-r--r--sysui/desktop/mimetypes/text.desktop9
-rw-r--r--sysui/desktop/mimetypes/text.keys10
-rw-r--r--sysui/desktop/os2/makefile.mk123
-rw-r--r--sysui/desktop/os2/ooo-base-app.icobin0 -> 5604 bytes
-rw-r--r--sysui/desktop/os2/ooo-base-doc.icobin0 -> 11644 bytes
-rw-r--r--sysui/desktop/os2/ooo-calc-app.icobin0 -> 5604 bytes
-rw-r--r--sysui/desktop/os2/ooo-calc-doc.icobin0 -> 11644 bytes
-rw-r--r--sysui/desktop/os2/ooo-calc-tem.icobin0 -> 5604 bytes
-rw-r--r--sysui/desktop/os2/ooo-chart-doc.icobin0 -> 5604 bytes
-rw-r--r--sysui/desktop/os2/ooo-configuration.icobin0 -> 5604 bytes
-rw-r--r--sysui/desktop/os2/ooo-draw-app.icobin0 -> 5604 bytes
-rw-r--r--sysui/desktop/os2/ooo-draw-doc.icobin0 -> 11644 bytes
-rw-r--r--sysui/desktop/os2/ooo-draw-tem.icobin0 -> 5604 bytes
-rw-r--r--sysui/desktop/os2/ooo-empty-doc.icobin0 -> 5604 bytes
-rw-r--r--sysui/desktop/os2/ooo-empty-tem.icobin0 -> 5604 bytes
-rw-r--r--sysui/desktop/os2/ooo-image-doc.icobin0 -> 5604 bytes
-rw-r--r--sysui/desktop/os2/ooo-impress-app.icobin0 -> 5604 bytes
-rw-r--r--sysui/desktop/os2/ooo-impress-doc.icobin0 -> 11644 bytes
-rw-r--r--sysui/desktop/os2/ooo-impress-tem.icobin0 -> 5604 bytes
-rw-r--r--sysui/desktop/os2/ooo-macro-doc.icobin0 -> 5604 bytes
-rw-r--r--sysui/desktop/os2/ooo-main-app.icobin0 -> 5604 bytes
-rw-r--r--sysui/desktop/os2/ooo-master-doc.icobin0 -> 5604 bytes
-rw-r--r--sysui/desktop/os2/ooo-math-app.icobin0 -> 5604 bytes
-rw-r--r--sysui/desktop/os2/ooo-math-doc.icobin0 -> 11644 bytes
-rw-r--r--sysui/desktop/os2/ooo-open.icobin0 -> 5604 bytes
-rw-r--r--sysui/desktop/os2/ooo-printer.icobin0 -> 5604 bytes
-rw-r--r--sysui/desktop/os2/ooo-web-doc.icobin0 -> 5604 bytes
-rw-r--r--sysui/desktop/os2/ooo-writer-app.icobin0 -> 5604 bytes
-rw-r--r--sysui/desktop/os2/ooo-writer-doc.icobin0 -> 11644 bytes
-rw-r--r--sysui/desktop/os2/ooo-writer-tem.icobin0 -> 5604 bytes
-rw-r--r--sysui/desktop/os2/ooo11-base-doc.icobin0 -> 5604 bytes
-rw-r--r--sysui/desktop/os2/ooo11-calc-doc.icobin0 -> 5604 bytes
-rw-r--r--sysui/desktop/os2/ooo11-calc-tem.icobin0 -> 5604 bytes
-rw-r--r--sysui/desktop/os2/ooo11-chart-doc.icobin0 -> 5604 bytes
-rw-r--r--sysui/desktop/os2/ooo11-draw-doc.icobin0 -> 5604 bytes
-rw-r--r--sysui/desktop/os2/ooo11-draw-tem.icobin0 -> 5604 bytes
-rw-r--r--sysui/desktop/os2/ooo11-impress-doc.icobin0 -> 5604 bytes
-rw-r--r--sysui/desktop/os2/ooo11-impress-tem.icobin0 -> 5604 bytes
-rw-r--r--sysui/desktop/os2/ooo11-master-doc.icobin0 -> 5604 bytes
-rw-r--r--sysui/desktop/os2/ooo11-math-doc.icobin0 -> 5604 bytes
-rw-r--r--sysui/desktop/os2/ooo11-writer-doc.icobin0 -> 5604 bytes
-rw-r--r--sysui/desktop/os2/ooo11-writer-tem.icobin0 -> 5604 bytes
-rw-r--r--sysui/desktop/os2/so7-base-doc.icobin0 -> 5604 bytes
-rw-r--r--sysui/desktop/os2/so7-calc-doc.icobin0 -> 5604 bytes
-rw-r--r--sysui/desktop/os2/so7-calc-tem.icobin0 -> 5604 bytes
-rw-r--r--sysui/desktop/os2/so7-chart-doc.icobin0 -> 5604 bytes
-rw-r--r--sysui/desktop/os2/so7-draw-doc.icobin0 -> 5604 bytes
-rw-r--r--sysui/desktop/os2/so7-draw-tem.icobin0 -> 5604 bytes
-rw-r--r--sysui/desktop/os2/so7-impress-doc.icobin0 -> 5604 bytes
-rw-r--r--sysui/desktop/os2/so7-impress-tem.icobin0 -> 5604 bytes
-rw-r--r--sysui/desktop/os2/so7-master-doc.icobin0 -> 5604 bytes
-rw-r--r--sysui/desktop/os2/so7-math-doc.icobin0 -> 5604 bytes
-rw-r--r--sysui/desktop/os2/so7-writer-doc.icobin0 -> 5604 bytes
-rw-r--r--sysui/desktop/os2/so7-writer-tem.icobin0 -> 5604 bytes
-rw-r--r--sysui/desktop/os2/so8-base-app.icobin0 -> 5604 bytes
-rw-r--r--sysui/desktop/os2/so8-base-doc.icobin0 -> 5604 bytes
-rw-r--r--sysui/desktop/os2/so8-calc-app.icobin0 -> 5604 bytes
-rw-r--r--sysui/desktop/os2/so8-calc-doc.icobin0 -> 5604 bytes
-rw-r--r--sysui/desktop/os2/so8-calc-tem.icobin0 -> 5604 bytes
-rw-r--r--sysui/desktop/os2/so8-chart-doc.icobin0 -> 5604 bytes
-rw-r--r--sysui/desktop/os2/so8-configuration.icobin0 -> 5604 bytes
-rw-r--r--sysui/desktop/os2/so8-draw-app.icobin0 -> 5604 bytes
-rw-r--r--sysui/desktop/os2/so8-draw-doc.icobin0 -> 5604 bytes
-rw-r--r--sysui/desktop/os2/so8-draw-tem.icobin0 -> 5604 bytes
-rw-r--r--sysui/desktop/os2/so8-empty-doc.icobin0 -> 5604 bytes
-rw-r--r--sysui/desktop/os2/so8-empty-tem.icobin0 -> 5604 bytes
-rw-r--r--sysui/desktop/os2/so8-image-doc.icobin0 -> 5604 bytes
-rw-r--r--sysui/desktop/os2/so8-impress-app.icobin0 -> 5604 bytes
-rw-r--r--sysui/desktop/os2/so8-impress-doc.icobin0 -> 5604 bytes
-rw-r--r--sysui/desktop/os2/so8-impress-tem.icobin0 -> 5604 bytes
-rw-r--r--sysui/desktop/os2/so8-macro-doc.icobin0 -> 5604 bytes
-rw-r--r--sysui/desktop/os2/so8-main-app.icobin0 -> 5604 bytes
-rw-r--r--sysui/desktop/os2/so8-master-doc.icobin0 -> 5604 bytes
-rw-r--r--sysui/desktop/os2/so8-math-app.icobin0 -> 5604 bytes
-rw-r--r--sysui/desktop/os2/so8-math-doc.icobin0 -> 5604 bytes
-rw-r--r--sysui/desktop/os2/so8-open.icobin0 -> 5604 bytes
-rw-r--r--sysui/desktop/os2/so8-printer.icobin0 -> 5604 bytes
-rw-r--r--sysui/desktop/os2/so8-web-doc.icobin0 -> 5604 bytes
-rw-r--r--sysui/desktop/os2/so8-writer-app.icobin0 -> 5604 bytes
-rw-r--r--sysui/desktop/os2/so8-writer-doc.icobin0 -> 5604 bytes
-rw-r--r--sysui/desktop/os2/so8-writer-tem.icobin0 -> 5604 bytes
-rw-r--r--sysui/desktop/productversion.mk78
-rw-r--r--sysui/desktop/redhat/makefile.mk59
-rw-r--r--sysui/desktop/redhat/redhat-menus.spec303
-rw-r--r--sysui/desktop/share/add_specfile_triggers.sed4
-rw-r--r--sysui/desktop/share/brand.pl127
-rw-r--r--sysui/desktop/share/create_mime_xml.pl89
-rw-r--r--sysui/desktop/share/create_tree.sh111
-rw-r--r--sysui/desktop/share/documents.ulf107
-rw-r--r--sysui/desktop/share/launcher_comment.ulf21
-rw-r--r--sysui/desktop/share/launcher_genericname.ulf23
-rw-r--r--sysui/desktop/share/launcher_name.ulf3
-rw-r--r--sysui/desktop/share/makefile.mk263
-rw-r--r--sysui/desktop/share/openoffice.sh2
-rw-r--r--sysui/desktop/share/printeradmin.sh3
-rw-r--r--sysui/desktop/share/translate.pl145
-rw-r--r--sysui/desktop/slackware/makefile.mk112
-rw-r--r--sysui/desktop/slackware/slack-desc13
-rw-r--r--sysui/desktop/slackware/update-script8
-rw-r--r--sysui/desktop/solaris/copyright2
-rw-r--r--sysui/desktop/solaris/depend7
-rw-r--r--sysui/desktop/solaris/mailcap78
-rw-r--r--sysui/desktop/solaris/makefile.mk130
-rw-r--r--sysui/desktop/solaris/mime.types59
-rw-r--r--sysui/desktop/solaris/pkginfo16
-rw-r--r--sysui/desktop/solaris/postinstall23
-rw-r--r--sysui/desktop/solaris/postremove16
-rw-r--r--sysui/desktop/solaris/prototype66
-rw-r--r--sysui/desktop/suse/makefile.mk59
-rw-r--r--sysui/desktop/suse/suse-menus.spec307
-rw-r--r--sysui/desktop/tg_rpm.mk45
-rw-r--r--sysui/desktop/util/makefile.mk66
-rw-r--r--sysui/desktop/util/pkgdiff.pl119
-rw-r--r--sysui/prj/build.lst19
-rw-r--r--sysui/prj/d.lst27
-rw-r--r--sysui/source/win32/QuickStart/OOQuickStart.rc130
-rw-r--r--sysui/source/win32/QuickStart/QuickStart.cpp423
-rw-r--r--sysui/source/win32/QuickStart/QuickStart.h12
-rw-r--r--sysui/source/win32/QuickStart/StdAfx.h39
-rw-r--r--sysui/source/win32/QuickStart/makefile.mk74
-rw-r--r--sysui/source/win32/QuickStart/resource.h32
-rw-r--r--sysui/source/win32/QuickStart/so/QuickStart.rc130
-rw-r--r--sysui/source/win32/QuickStart/so/makefile.mk73
-rw-r--r--sysui/source/win32/misc/AutoBuffer.cxx163
-rw-r--r--sysui/source/win32/misc/AutoBuffer.hxx85
-rw-r--r--sysui/source/win32/misc/WinImplHelper.cxx358
-rw-r--r--sysui/source/win32/misc/WinImplHelper.hxx90
-rw-r--r--sysui/source/win32/misc/makefile.mk52
-rw-r--r--sysui/source/win32/misc/resourceprovider.cxx229
-rw-r--r--sysui/source/win32/misc/resourceprovider.hxx60
-rw-r--r--sysui/util/checksize.pl87
-rw-r--r--sysui/util/exports.dxp3
-rw-r--r--sysui/util/makefile.mk44
-rw-r--r--test/inc/makefile.mk38
-rw-r--r--test/inc/pch/precompiled_test.cxx26
-rw-r--r--test/inc/pch/precompiled_test.hxx30
-rw-r--r--test/inc/test/detail/testdllapi.hxx39
-rw-r--r--test/inc/test/getargument.hxx44
-rw-r--r--test/inc/test/officeconnection.hxx65
-rw-r--r--test/inc/test/oustringostreaminserter.hxx48
-rw-r--r--test/inc/test/toabsolutefileurl.hxx44
-rw-r--r--test/prj/build.lst4
-rw-r--r--test/prj/d.lst12
-rw-r--r--test/source/cpp/getargument.cxx42
-rw-r--r--test/source/cpp/makefile.mk55
-rw-r--r--test/source/cpp/officeconnection.cxx173
-rw-r--r--test/source/cpp/toabsolutefileurl.cxx83
-rw-r--r--test/source/java/OfficeConnection.java221
-rw-r--r--test/source/java/makefile.mk49
-rw-r--r--testautomation/chart2/optional/ch2_chart_data_dlg_impress.bas56
-rw-r--r--testautomation/chart2/optional/ch2_flexible_source_range_selection.bas69
-rwxr-xr-xtestautomation/chart2/optional/ch2_losa_ods_to_ods.bas68
-rwxr-xr-xtestautomation/chart2/optional/ch2_losa_ods_to_ots.bas68
-rwxr-xr-xtestautomation/chart2/optional/ch2_losa_ods_to_sdc.bas67
-rwxr-xr-xtestautomation/chart2/optional/ch2_losa_ods_to_sxc.bas68
-rwxr-xr-xtestautomation/chart2/optional/ch2_losa_ods_to_xls.bas68
-rwxr-xr-xtestautomation/chart2/optional/ch2_losa_sxc_to_ods.bas68
-rwxr-xr-xtestautomation/chart2/optional/ch2_losa_sxc_to_sdc.bas68
-rwxr-xr-xtestautomation/chart2/optional/ch2_lvl1.bas57
-rwxr-xr-xtestautomation/chart2/optional/ch2_lvl1_wizard.bas66
-rw-r--r--testautomation/chart2/optional/ch2_xml_format.bas55
-rw-r--r--testautomation/chart2/optional/includes/ch2_datadialogue.inc328
-rw-r--r--testautomation/chart2/optional/includes/ch2_flexible_source_range_selection.inc797
-rw-r--r--testautomation/chart2/optional/includes/ch2_flexible_source_range_selection01.inc794
-rwxr-xr-xtestautomation/chart2/optional/includes/ch2_lvl1a.inc266
-rwxr-xr-xtestautomation/chart2/optional/includes/loadsave/ch2_losa.inc219
-rw-r--r--testautomation/chart2/optional/includes/loadsave/ch2_xml_format.inc243
-rwxr-xr-xtestautomation/chart2/optional/includes/wizard/ch2_lvl1_wizard.inc1092
-rw-r--r--testautomation/chart2/optional/includes/wizard/ch2_lvl1_wizard2.inc124
-rw-r--r--testautomation/chart2/optional/input/BubbleChartData.odsbin0 -> 8000 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/2d_areas_normal.odsbin0 -> 19980 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/2d_areas_percent.odsbin0 -> 22854 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/2d_areas_stacked.odsbin0 -> 20547 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/2d_bars_normal.odsbin0 -> 22851 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/2d_bars_percent.odsbin0 -> 23088 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/2d_bars_stacked.odsbin0 -> 23782 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/2d_columns_lines_and_columns.odsbin0 -> 24097 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/2d_columns_lines_and_stacked_columns.odsbin0 -> 25212 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/2d_columns_normal.odsbin0 -> 23151 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/2d_columns_percent.odsbin0 -> 23058 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/2d_columns_stacked.odsbin0 -> 24970 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/3d_lines_deep.odsbin0 -> 35335 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/3d_pies_normal.odsbin0 -> 39008 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/areas_deep.odsbin0 -> 52064 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/areas_percent.odsbin0 -> 38468 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/areas_stacked.odsbin0 -> 42860 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/bars_deep.odsbin0 -> 61483 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/bars_horizontal_cones.odsbin0 -> 66269 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/bars_horizontal_cones_deep.odsbin0 -> 110686 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/bars_horizontal_cones_percent.odsbin0 -> 110617 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/bars_horizontal_pyramids.odsbin0 -> 67118 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/bars_horizontal_pyramids_deep.odsbin0 -> 98383 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/bars_horizontal_pyramids_percent.odsbin0 -> 110239 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/bars_horizontal_pyramids_stacked.odsbin0 -> 85911 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/bars_horizontal_stacked_cones.odsbin0 -> 88184 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/bars_normal.odsbin0 -> 71033 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/bars_percent.odsbin0 -> 66755 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/bars_stacked.odsbin0 -> 60722 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/bars_tube.odsbin0 -> 41905 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/bars_tubes_deep.odsbin0 -> 59620 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/bars_tubes_percent.odsbin0 -> 62875 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/bars_tubes_stacked.odsbin0 -> 50291 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/columns_cones.odsbin0 -> 50195 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/columns_cones_deep.odsbin0 -> 84795 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/columns_cones_percent.odsbin0 -> 90080 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/columns_cones_stacked.odsbin0 -> 88072 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/columns_cylinder.odsbin0 -> 53406 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/columns_cylinder_deep.odsbin0 -> 67403 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/columns_cylinder_percent.odsbin0 -> 86518 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/columns_cylinder_stacked.odsbin0 -> 79786 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/columns_deep.odsbin0 -> 50144 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/columns_normal.odsbin0 -> 59819 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/columns_percent.odsbin0 -> 60109 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/columns_pyramids.odsbin0 -> 71749 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/columns_pyramids_deep.odsbin0 -> 96324 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/columns_pyramids_percent.odsbin0 -> 103938 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/columns_pyramids_stacked.odsbin0 -> 104487 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/columns_stacked.odsbin0 -> 65360 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/lines_b-spline.odsbin0 -> 25651 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/lines_b-spline_with_symbols.odsbin0 -> 30305 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/lines_cubic_spline.odsbin0 -> 25841 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/lines_cubic_spline_with_symbols.odsbin0 -> 33585 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/lines_normal.odsbin0 -> 19673 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/lines_percent.odsbin0 -> 19326 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/lines_percent_with_symbols.odsbin0 -> 23242 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/lines_stacked.odsbin0 -> 20462 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/lines_stacked_with_symbols.odsbin0 -> 24066 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/lines_symbols.odsbin0 -> 23002 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/net_normal.odsbin0 -> 19926 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/net_percent.odsbin0 -> 20031 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/net_percent_with_symbols.odsbin0 -> 24009 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/net_stacked.odsbin0 -> 20018 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/net_stacked_with_symbols.odsbin0 -> 24083 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/net_symbols.odsbin0 -> 23820 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/pies_normal.odsbin0 -> 20506 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/pies_offset1.odsbin0 -> 20195 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/pies_offset2.odsbin0 -> 20524 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/pies_rings.odsbin0 -> 27925 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/stockchart_type1.odsbin0 -> 19889 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/stockchart_type2.odsbin0 -> 21315 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/stockchart_type3.odsbin0 -> 22123 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/stockchart_type4.odsbin0 -> 23348 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/xy_chart_b-spline.odsbin0 -> 24219 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/xy_chart_b-spline_with_symbols.odsbin0 -> 27576 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/xy_chart_cubic_spline.odsbin0 -> 24489 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/xy_chart_cubic_spline_with_symbols.odsbin0 -> 27677 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/xy_chart_lines_only.odsbin0 -> 19266 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/xy_chart_lines_with_symbols.odsbin0 -> 22498 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/ods/xy_chart_symbols_only.odsbin0 -> 21517 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/randomData.odsbin0 -> 7713 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/2d_areas_normal.sxcbin0 -> 11879 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/2d_areas_percent.sxcbin0 -> 12137 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/2d_areas_stacked.sxcbin0 -> 12547 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/2d_bars_normal.sxcbin0 -> 13620 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/2d_bars_percent.sxcbin0 -> 13373 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/2d_bars_stacked.sxcbin0 -> 12325 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/2d_columns_lines_and_columns.sxcbin0 -> 14033 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/2d_columns_lines_and_stacked_columns.sxcbin0 -> 14458 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/2d_columns_normal.sxcbin0 -> 13793 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/2d_columns_percent.sxcbin0 -> 13675 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/2d_columns_stacked.sxcbin0 -> 14365 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/3d_lines_deep.sxcbin0 -> 18632 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/3d_pies_normal.sxcbin0 -> 20396 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/areas_deep.sxcbin0 -> 32742 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/areas_percent.sxcbin0 -> 21962 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/areas_stacked.sxcbin0 -> 23672 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/bars_deep.sxcbin0 -> 39140 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/bars_horizontal_cones.sxcbin0 -> 34799 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/bars_horizontal_cones_deep.sxcbin0 -> 51450 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/bars_horizontal_cones_percent.sxcbin0 -> 48313 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/bars_horizontal_pyramids.sxcbin0 -> 32902 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/bars_horizontal_pyramids_deep.sxcbin0 -> 48143 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/bars_horizontal_pyramids_percent.sxcbin0 -> 47134 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/bars_horizontal_pyramids_stacked.sxcbin0 -> 40866 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/bars_horizontal_stacked_cones.sxcbin0 -> 41810 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/bars_normal.sxcbin0 -> 34087 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/bars_percent.sxcbin0 -> 35015 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/bars_stacked.sxcbin0 -> 30564 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/bars_tube.sxcbin0 -> 28453 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/bars_tubes_deep.sxcbin0 -> 36522 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/bars_tubes_percent.sxcbin0 -> 39245 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/bars_tubes_stacked.sxcbin0 -> 32849 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/columns_cones.sxcbin0 -> 27681 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/columns_cones_deep.sxcbin0 -> 41842 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/columns_cones_percent.sxcbin0 -> 44938 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/columns_cones_stacked.sxcbin0 -> 40843 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/columns_cylinder.sxcbin0 -> 28562 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/columns_cylinder_deep.sxcbin0 -> 34619 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/columns_cylinder_percent.sxcbin0 -> 42982 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/columns_cylinder_stacked.sxcbin0 -> 44840 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/columns_deep.sxcbin0 -> 32156 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/columns_normal.sxcbin0 -> 37062 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/columns_percent.sxcbin0 -> 37149 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/columns_pyramids.sxcbin0 -> 38666 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/columns_pyramids_deep.sxcbin0 -> 53341 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/columns_pyramids_percent.sxcbin0 -> 55649 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/columns_pyramids_stacked.sxcbin0 -> 53051 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/columns_stacked.sxcbin0 -> 32245 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/lines_b-spline.sxcbin0 -> 19509 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/lines_b-spline_with_symbols.sxcbin0 -> 22013 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/lines_cubic_spline.sxcbin0 -> 19650 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/lines_cubic_spline_with_symbols.sxcbin0 -> 22066 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/lines_normal.sxcbin0 -> 17027 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/lines_percent.sxcbin0 -> 16447 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/lines_percent_with_symbols.sxcbin0 -> 18472 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/lines_stacked.sxcbin0 -> 17579 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/lines_stacked_with_symbols.sxcbin0 -> 19077 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/lines_symbols.sxcbin0 -> 18275 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/net_normal.sxcbin0 -> 16864 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/net_percent.sxcbin0 -> 16992 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/net_percent_with_symbols.sxcbin0 -> 19009 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/net_stacked.sxcbin0 -> 16947 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/net_stacked_with_symbols.sxcbin0 -> 19043 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/net_symbols.sxcbin0 -> 18861 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/pies_normal.sxcbin0 -> 25337 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/pies_offset1.sxcbin0 -> 16978 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/pies_offset2.sxcbin0 -> 17217 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/pies_rings.sxcbin0 -> 20869 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/stockchart_type1.sxcbin0 -> 16651 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/stockchart_type2.sxcbin0 -> 17371 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/stockchart_type3.sxcbin0 -> 17883 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/stockchart_type4.sxcbin0 -> 18534 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/xy_chart_b-spline.sxcbin0 -> 19090 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/xy_chart_b-spline_with_symbols.sxcbin0 -> 20759 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/xy_chart_cubic_spline.sxcbin0 -> 19391 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/xy_chart_cubic_spline_with_symbols.sxcbin0 -> 20911 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/xy_chart_lines_only.sxcbin0 -> 16609 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/xy_chart_lines_with_symbols.sxcbin0 -> 18325 bytes
-rwxr-xr-xtestautomation/chart2/optional/input/sxc/xy_chart_symbols_only.sxcbin0 -> 17630 bytes
-rwxr-xr-xtestautomation/chart2/required/ch2_updt_calc.bas152
-rwxr-xr-xtestautomation/chart2/required/includes/ch2_file.inc404
-rwxr-xr-xtestautomation/chart2/required/includes/ch2_format.inc1407
-rwxr-xr-xtestautomation/chart2/required/includes/ch2_format1.inc829
-rwxr-xr-xtestautomation/chart2/required/includes/ch2_insert.inc326
-rw-r--r--testautomation/chart2/required/includes/ch2_insert_ctl.inc488
-rw-r--r--testautomation/chart2/required/includes/ch2_menu.inc214
-rwxr-xr-xtestautomation/chart2/required/includes/ch2_ole.inc137
-rwxr-xr-xtestautomation/chart2/required/includes/ch2_toolbars.inc168
-rwxr-xr-xtestautomation/chart2/required/includes/ch2_view.inc182
-rwxr-xr-xtestautomation/chart2/required/includes/ch2_window.inc63
-rwxr-xr-xtestautomation/chart2/required/includes/ch2_wizard.inc86
-rwxr-xr-xtestautomation/chart2/required/input/basetable.sdcbin0 -> 28672 bytes
-rwxr-xr-xtestautomation/chart2/required/input/basetable.sxcbin0 -> 5500 bytes
-rwxr-xr-xtestautomation/chart2/required/input/ch_flexrange01.odsbin0 -> 98073 bytes
-rwxr-xr-xtestautomation/chart2/required/input/ch_flexrange02.odsbin0 -> 6849 bytes
-rwxr-xr-xtestautomation/chart2/required/input/ch_flexrange03.odsbin0 -> 32530 bytes
-rwxr-xr-xtestautomation/chart2/required/input/ch_flexrange04.odsbin0 -> 20799 bytes
-rwxr-xr-xtestautomation/chart2/required/input/ch_flexrange05.odtbin0 -> 7305 bytes
-rwxr-xr-xtestautomation/chart2/required/input/ch_flexrange06.odtbin0 -> 7303 bytes
-rwxr-xr-xtestautomation/chart2/required/input/ch_flexrange07.odtbin0 -> 13104 bytes
-rwxr-xr-xtestautomation/chart2/required/input/ch_flexrange08.odtbin0 -> 13280 bytes
-rwxr-xr-xtestautomation/chart2/required/input/spreadsheetFile.odsbin0 -> 6337 bytes
-rwxr-xr-xtestautomation/chart2/required/input/verySimpleChart.odsbin0 -> 10429 bytes
-rw-r--r--testautomation/chart2/tools/ch_tools_axes.inc193
-rw-r--r--testautomation/chart2/tools/ch_tools_chart_type.inc641
-rw-r--r--testautomation/chart2/tools/ch_tools_common.inc212
-rw-r--r--testautomation/chart2/tools/ch_tools_data_labels.inc369
-rw-r--r--testautomation/chart2/tools/ch_tools_grids.inc202
-rw-r--r--testautomation/chart2/tools/ch_tools_legend.inc241
-rw-r--r--testautomation/chart2/tools/ch_tools_select.inc136
-rw-r--r--testautomation/chart2/tools/ch_tools_statistics.inc429
-rw-r--r--testautomation/chart2/tools/ch_tools_tab_borders_lines.inc144
-rw-r--r--testautomation/chart2/tools/ch_tools_tab_pages.inc147
-rw-r--r--testautomation/chart2/tools/ch_tools_titles.inc189
-rwxr-xr-xtestautomation/dbaccess/optional/dba_ctrl_Clipboard.bas54
-rwxr-xr-xtestautomation/dbaccess/optional/dba_ctrl_General.bas54
-rwxr-xr-xtestautomation/dbaccess/optional/dba_ctrl_Grid.bas55
-rwxr-xr-xtestautomation/dbaccess/optional/dba_ctrl_PropertyBrowser.bas54
-rwxr-xr-xtestautomation/dbaccess/optional/dba_ctrl_Several.bas56
-rwxr-xr-xtestautomation/dbaccess/optional/dba_ctrl_Spreadsheet.bas54
-rwxr-xr-xtestautomation/dbaccess/optional/dba_ctrl_TextControl.bas55
-rwxr-xr-xtestautomation/dbaccess/optional/dba_ctrl_Wizards.bas54
-rwxr-xr-xtestautomation/dbaccess/optional/dba_db_ADOAccess.bas56
-rwxr-xr-xtestautomation/dbaccess/optional/dba_db_AdabasD.bas56
-rwxr-xr-xtestautomation/dbaccess/optional/dba_db_Addressbook.bas67
-rwxr-xr-xtestautomation/dbaccess/optional/dba_db_Dbase.bas55
-rwxr-xr-xtestautomation/dbaccess/optional/dba_db_JDBCMySQL.bas54
-rwxr-xr-xtestautomation/dbaccess/optional/dba_db_Spreadsheet.bas55
-rwxr-xr-xtestautomation/dbaccess/optional/dba_db_Text.bas80
-rwxr-xr-xtestautomation/dbaccess/optional/dba_db_dBase_functions.bas66
-rwxr-xr-xtestautomation/dbaccess/optional/dba_db_hsqldb.bas56
-rwxr-xr-xtestautomation/dbaccess/optional/dba_frm_FormFilter.bas59
-rwxr-xr-xtestautomation/dbaccess/optional/dba_frm_Forms.bas58
-rw-r--r--testautomation/dbaccess/optional/dba_misc_Macros.bas54
-rwxr-xr-xtestautomation/dbaccess/optional/dba_misc_RegisterDatabase.bas54
-rwxr-xr-xtestautomation/dbaccess/optional/dba_rpt_DateTime.bas59
-rwxr-xr-xtestautomation/dbaccess/optional/dba_rpt_ExecuteReport.bas59
-rwxr-xr-xtestautomation/dbaccess/optional/dba_rpt_Formating.bas59
-rwxr-xr-xtestautomation/dbaccess/optional/dba_rpt_FunctionWizard.bas59
-rwxr-xr-xtestautomation/dbaccess/optional/dba_rpt_Grouping.bas59
-rwxr-xr-xtestautomation/dbaccess/optional/dba_rpt_PageNumber.bas61
-rwxr-xr-xtestautomation/dbaccess/optional/dba_rpt_PropertyBrowser.bas59
-rwxr-xr-xtestautomation/dbaccess/optional/dba_wiz_CopyTableWizard.bas54
-rwxr-xr-xtestautomation/dbaccess/optional/dba_wiz_DatabaseWizards.bas53
-rwxr-xr-xtestautomation/dbaccess/optional/dba_wiz_FormWizard.bas53
-rwxr-xr-xtestautomation/dbaccess/optional/dba_wiz_QueryWizard.bas53
-rwxr-xr-xtestautomation/dbaccess/optional/dba_wiz_ReportWizard.bas56
-rwxr-xr-xtestautomation/dbaccess/optional/dba_wiz_TableWizard.bas53
-rwxr-xr-xtestautomation/dbaccess/optional/dba_xf_Submission.bas53
-rwxr-xr-xtestautomation/dbaccess/optional/includes/ctrl_Clipboard.inc492
-rwxr-xr-xtestautomation/dbaccess/optional/includes/ctrl_General.inc1063
-rwxr-xr-xtestautomation/dbaccess/optional/includes/ctrl_Grid.inc521
-rwxr-xr-xtestautomation/dbaccess/optional/includes/ctrl_PropertyBrowser.inc510
-rwxr-xr-xtestautomation/dbaccess/optional/includes/ctrl_Several1.inc648
-rwxr-xr-xtestautomation/dbaccess/optional/includes/ctrl_Several2.inc924
-rwxr-xr-xtestautomation/dbaccess/optional/includes/ctrl_Spreadsheet.inc387
-rwxr-xr-xtestautomation/dbaccess/optional/includes/ctrl_TextControl.inc290
-rwxr-xr-xtestautomation/dbaccess/optional/includes/ctrl_Wizards.inc860
-rwxr-xr-xtestautomation/dbaccess/optional/includes/db_ADOAccess.inc175
-rwxr-xr-xtestautomation/dbaccess/optional/includes/db_AdabasD.inc156
-rwxr-xr-xtestautomation/dbaccess/optional/includes/db_Dbase.inc118
-rwxr-xr-xtestautomation/dbaccess/optional/includes/db_DbaseFunction.inc886
-rwxr-xr-xtestautomation/dbaccess/optional/includes/db_IndexDesign.inc92
-rwxr-xr-xtestautomation/dbaccess/optional/includes/db_JDBCMySQL.inc210
-rwxr-xr-xtestautomation/dbaccess/optional/includes/db_Mozilla.inc154
-rwxr-xr-xtestautomation/dbaccess/optional/includes/db_ODBCMySQL.inc192
-rwxr-xr-xtestautomation/dbaccess/optional/includes/db_Query.inc975
-rwxr-xr-xtestautomation/dbaccess/optional/includes/db_Relations.inc435
-rwxr-xr-xtestautomation/dbaccess/optional/includes/db_Spreadsheet.inc61
-rwxr-xr-xtestautomation/dbaccess/optional/includes/db_Text.inc148
-rwxr-xr-xtestautomation/dbaccess/optional/includes/db_Windows.inc81
-rwxr-xr-xtestautomation/dbaccess/optional/includes/db_hsqldb.inc288
-rwxr-xr-xtestautomation/dbaccess/optional/includes/frm_FormFilter.inc240
-rwxr-xr-xtestautomation/dbaccess/optional/includes/frm_Forms.inc1065
-rwxr-xr-xtestautomation/dbaccess/optional/includes/misc_Macros.inc115
-rwxr-xr-xtestautomation/dbaccess/optional/includes/misc_RegisterDatabase.inc63
-rwxr-xr-xtestautomation/dbaccess/optional/includes/rpt_DateTime.inc298
-rwxr-xr-xtestautomation/dbaccess/optional/includes/rpt_ExecuteReport.inc234
-rwxr-xr-xtestautomation/dbaccess/optional/includes/rpt_Formating.inc201
-rwxr-xr-xtestautomation/dbaccess/optional/includes/rpt_FunctionWizard.inc117
-rwxr-xr-xtestautomation/dbaccess/optional/includes/rpt_Grouping.inc156
-rwxr-xr-xtestautomation/dbaccess/optional/includes/rpt_PageNumber.inc257
-rwxr-xr-xtestautomation/dbaccess/optional/includes/rpt_PropertyBrowser.inc76
-rwxr-xr-xtestautomation/dbaccess/optional/includes/wiz_CopyTableWizard.inc833
-rwxr-xr-xtestautomation/dbaccess/optional/includes/wiz_DatabaseWizard.inc352
-rwxr-xr-xtestautomation/dbaccess/optional/includes/wiz_FormWizard.inc254
-rwxr-xr-xtestautomation/dbaccess/optional/includes/wiz_QueryWizard.inc233
-rwxr-xr-xtestautomation/dbaccess/optional/includes/wiz_ReportWizard.inc123
-rwxr-xr-xtestautomation/dbaccess/optional/includes/wiz_TableWizard.inc499
-rwxr-xr-xtestautomation/dbaccess/optional/includes/xf_Submission.inc185
-rwxr-xr-xtestautomation/dbaccess/optional/input/TT_All_Controls.odtbin0 -> 12522 bytes
-rwxr-xr-xtestautomation/dbaccess/optional/input/TT_Form_Filter.odtbin0 -> 8174 bytes
-rwxr-xr-xtestautomation/dbaccess/optional/input/ado_datasource/testdb.mdbbin0 -> 286720 bytes
-rwxr-xr-xtestautomation/dbaccess/optional/input/dbase_datasource/TT_Forms.dbfbin0 -> 903 bytes
-rwxr-xr-xtestautomation/dbaccess/optional/input/dbase_datasource/TT_Func1.dbfbin0 -> 116 bytes
-rwxr-xr-xtestautomation/dbaccess/optional/input/dbase_datasource/TT_Query1.dbfbin0 -> 1180 bytes
-rwxr-xr-xtestautomation/dbaccess/optional/input/dbase_datasource/TT_Query1.dbtbin0 -> 5046204 bytes
-rwxr-xr-xtestautomation/dbaccess/optional/input/hsql_datasource/TT_hsqldb.odbbin0 -> 16127 bytes
-rwxr-xr-xtestautomation/dbaccess/optional/input/hsql_datasource/TT_hsqldb_2.0.0.odbbin0 -> 2501 bytes
-rw-r--r--testautomation/dbaccess/optional/input/hsql_datasource/hsql_macros_in_subdocument.odbbin0 -> 11948 bytes
-rwxr-xr-xtestautomation/dbaccess/optional/input/spreadsheet_datasource/TT_Query1.odsbin0 -> 6738 bytes
-rwxr-xr-xtestautomation/dbaccess/optional/input/text_datasource/TT_Query1.txt12
-rwxr-xr-xtestautomation/dbaccess/optional/input/text_datasource/text_database.txt3
-rwxr-xr-xtestautomation/dbaccess/required/dba_Main.bas77
-rwxr-xr-xtestautomation/dbaccess/required/dba_ReportBuilder.bas55
-rwxr-xr-xtestautomation/dbaccess/required/dba_xforms_Main.bas53
-rwxr-xr-xtestautomation/dbaccess/required/includes/DatabaseTypes.inc754
-rwxr-xr-xtestautomation/dbaccess/required/includes/Forms.inc91
-rwxr-xr-xtestautomation/dbaccess/required/includes/MainApp.inc620
-rwxr-xr-xtestautomation/dbaccess/required/includes/Query.inc966
-rwxr-xr-xtestautomation/dbaccess/required/includes/ReportBuilder01.inc876
-rwxr-xr-xtestautomation/dbaccess/required/includes/Table.inc632
-rwxr-xr-xtestautomation/dbaccess/required/includes/TableDesign.inc509
-rwxr-xr-xtestautomation/dbaccess/required/includes/Wizards.inc235
-rwxr-xr-xtestautomation/dbaccess/required/includes/Xforms01.inc485
-rw-r--r--testautomation/dbaccess/required/input/oracle-report-builder.oxtbin0 -> 3449930 bytes
-rwxr-xr-xtestautomation/dbaccess/tools/controltools.inc831
-rwxr-xr-xtestautomation/dbaccess/tools/dbcreatetools.inc1631
-rwxr-xr-xtestautomation/dbaccess/tools/dbinit.inc56
-rwxr-xr-xtestautomation/dbaccess/tools/dbtools.inc373
-rwxr-xr-xtestautomation/dbaccess/tools/formtools.inc193
-rwxr-xr-xtestautomation/dbaccess/tools/querytools.inc439
-rwxr-xr-xtestautomation/dbaccess/tools/reporttools.inc387
-rwxr-xr-xtestautomation/dbaccess/tools/tabletools.inc772
-rwxr-xr-xtestautomation/extensions/optional/e_display_name.bas57
-rwxr-xr-xtestautomation/extensions/optional/e_extensions.bas54
-rwxr-xr-xtestautomation/extensions/optional/e_fileopen.bas55
-rwxr-xr-xtestautomation/extensions/optional/e_help.bas57
-rwxr-xr-xtestautomation/extensions/optional/e_identifiers.bas59
-rwxr-xr-xtestautomation/extensions/optional/e_issues.bas55
-rwxr-xr-xtestautomation/extensions/optional/e_location.bas68
-rwxr-xr-xtestautomation/extensions/optional/e_meta-inf.bas59
-rwxr-xr-xtestautomation/extensions/optional/e_online_update.bas57
-rwxr-xr-xtestautomation/extensions/optional/e_options.bas59
-rwxr-xr-xtestautomation/extensions/optional/e_platforms.bas58
-rwxr-xr-xtestautomation/extensions/optional/e_publisher.bas55
-rw-r--r--testautomation/extensions/optional/e_taskpane.bas49
-rwxr-xr-xtestautomation/extensions/optional/includes/display_name.inc113
-rw-r--r--testautomation/extensions/optional/includes/e_taskpane.inc74
-rwxr-xr-xtestautomation/extensions/optional/includes/extensions.inc684
-rwxr-xr-xtestautomation/extensions/optional/includes/fileopen.inc103
-rwxr-xr-xtestautomation/extensions/optional/includes/help.inc213
-rwxr-xr-xtestautomation/extensions/optional/includes/identifiers.inc120
-rwxr-xr-xtestautomation/extensions/optional/includes/issue110083.inc79
-rwxr-xr-xtestautomation/extensions/optional/includes/location.inc133
-rwxr-xr-xtestautomation/extensions/optional/includes/meta-inf.inc83
-rwxr-xr-xtestautomation/extensions/optional/includes/online_update.inc114
-rwxr-xr-xtestautomation/extensions/optional/includes/options.inc172
-rwxr-xr-xtestautomation/extensions/optional/includes/platforms.inc126
-rwxr-xr-xtestautomation/extensions/optional/includes/publisher.inc286
-rwxr-xr-xtestautomation/extensions/optional/input/dependencies/broken-dependency.oxtbin0 -> 1655 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/dependencies/double-dependencies.oxtbin0 -> 1651 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/dependencies/empty-dependencies.oxtbin0 -> 1624 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/dependencies/funny-dependency.oxtbin0 -> 1730 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/dependencies/license-dependency.oxtbin0 -> 1891 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/dependencies/many-dependencies.oxtbin0 -> 1702 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/dependencies/no-dependencies.oxtbin0 -> 1611 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/dependencies/no-description.oxtbin0 -> 1360 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/dependencies/unknown-dependency.oxtbin0 -> 1633 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/dependencies/version10000.oxtbin0 -> 1668 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/dependencies/version21.oxtbin0 -> 1666 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/dependencies/version21ns.oxtbin0 -> 1661 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/dependencies/version21other.oxtbin0 -> 1679 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/dependencies/version25.oxtbin0 -> 1794 bytes
-rw-r--r--testautomation/extensions/optional/input/dependencies/version30.oxtbin0 -> 1493 bytes
-rw-r--r--testautomation/extensions/optional/input/dependencies/version300.oxtbin0 -> 1408 bytes
-rw-r--r--testautomation/extensions/optional/input/dependencies/version301.oxtbin0 -> 1409 bytes
-rw-r--r--testautomation/extensions/optional/input/dependencies/version31.oxtbin0 -> 1495 bytes
-rw-r--r--testautomation/extensions/optional/input/dependencies/version310.oxtbin0 -> 1493 bytes
-rw-r--r--testautomation/extensions/optional/input/dependencies/version33.oxtbin0 -> 1494 bytes
-rw-r--r--testautomation/extensions/optional/input/dependencies/version330.oxtbin0 -> 1494 bytes
-rw-r--r--testautomation/extensions/optional/input/dependencies/version34.oxtbin0 -> 1494 bytes
-rw-r--r--testautomation/extensions/optional/input/dependencies/version937.oxtbin0 -> 1409 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/dependencies/versionempty.oxtbin0 -> 1675 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/dependencies/versionnone.oxtbin0 -> 1674 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/display_name/name1.oxtbin0 -> 704 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/display_name/name2.oxtbin0 -> 699 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/display_name/name3.oxtbin0 -> 681 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/display_name/name4.oxtbin0 -> 675 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/display_name/name5.oxtbin0 -> 654 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/display_name/readme.txt26
-rwxr-xr-xtestautomation/extensions/optional/input/errors/i77436-README.txt21
-rwxr-xr-xtestautomation/extensions/optional/input/errors/i77436-extension.oxtbin0 -> 57727 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/errors/lowercasemetainf.oxtbin0 -> 9381 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/eventbinding/DialogComponent.odtbin0 -> 12541 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/eventbinding/DialogComponent.oxtbin0 -> 7588 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/extensible_help/extensible_help_en.oxtbin0 -> 8284 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/extensible_help/extensible_help_en_de.oxtbin0 -> 13522 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/extensible_help/extension.info59
-rwxr-xr-xtestautomation/extensions/optional/input/extension_sources/TaskPaneComponent/build.xml72
-rwxr-xr-xtestautomation/extensions/optional/input/extension_sources/TaskPaneComponent/nbproject/build-impl.xml794
-rwxr-xr-xtestautomation/extensions/optional/input/extension_sources/TaskPaneComponent/nbproject/build-uno-impl.xml462
-rw-r--r--testautomation/extensions/optional/input/extension_sources/TaskPaneComponent/nbproject/genfiles.properties9
-rwxr-xr-xtestautomation/extensions/optional/input/extension_sources/TaskPaneComponent/nbproject/private/config.properties0
-rw-r--r--testautomation/extensions/optional/input/extension_sources/TaskPaneComponent/nbproject/private/private.properties7
-rw-r--r--testautomation/extensions/optional/input/extension_sources/TaskPaneComponent/nbproject/project-uno.properties19
-rw-r--r--testautomation/extensions/optional/input/extension_sources/TaskPaneComponent/nbproject/project.properties68
-rwxr-xr-xtestautomation/extensions/optional/input/extension_sources/TaskPaneComponent/nbproject/project.xml14
-rwxr-xr-xtestautomation/extensions/optional/input/extension_sources/TaskPaneComponent/registry/data/org/openoffice/Office/UI/CalcWindowState.xcu23
-rwxr-xr-xtestautomation/extensions/optional/input/extension_sources/TaskPaneComponent/registry/data/org/openoffice/Office/UI/Factories.xcu35
-rwxr-xr-xtestautomation/extensions/optional/input/extension_sources/TaskPaneComponent/src/com/example/CentralRegistrationClass.java140
-rwxr-xr-xtestautomation/extensions/optional/input/extension_sources/TaskPaneComponent/src/com/example/TaskPaneComponent.java116
-rwxr-xr-xtestautomation/extensions/optional/input/extension_sources/TaskPaneComponent/src/com/example/ToolPanel.java56
-rwxr-xr-xtestautomation/extensions/optional/input/extension_sources/TaskPaneComponent/src/com/example/ToolPanelUIElement.java153
-rwxr-xr-xtestautomation/extensions/optional/input/extension_sources/TaskPaneComponent/src/description.xml5
-rwxr-xr-xtestautomation/extensions/optional/input/extension_sources/TaskPaneComponent/src/toolpanels/TaskPaneComponentUI.xdl8
-rwxr-xr-xtestautomation/extensions/optional/input/extension_sources/TaskPaneComponent/src/uno-extension-manifest.xml9
-rwxr-xr-xtestautomation/extensions/optional/input/extensions/TaskPaneComponent/TaskPaneComponent.oxtbin0 -> 9884 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/files.txt50
-rwxr-xr-xtestautomation/extensions/optional/input/identifier/explicit/identifier.oxtbin0 -> 1660 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/identifier/legacy/identifier.oxtbin0 -> 1634 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/identifier/readme.txt16
-rw-r--r--testautomation/extensions/optional/input/issues/111434.oxtbin0 -> 1166 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/issues/Logging.xcu24
-rw-r--r--testautomation/extensions/optional/input/issues/LoggingOptions.xcs19
-rwxr-xr-xtestautomation/extensions/optional/input/options/leaf1.oxtbin0 -> 8308 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/options/leaf2.oxtbin0 -> 8338 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/options/leaves1.oxtbin0 -> 21158 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/options/leaves2.oxtbin0 -> 21153 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/options/leaves3.oxtbin0 -> 21080 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/options/modules1.oxtbin0 -> 24317 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/options/modules2.oxtbin0 -> 24196 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/options/nodes1.oxtbin0 -> 1882 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/options/nodes2.oxtbin0 -> 24287 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/options/nodes3.oxtbin0 -> 24315 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/options/nodes4.oxtbin0 -> 24318 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/options/nodes5.oxtbin0 -> 12616 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/options/readme.txt195
-rwxr-xr-xtestautomation/extensions/optional/input/path_to_extension/LocationTest.odtbin0 -> 7666 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/path_to_extension/locationtest.oxtbin0 -> 5055 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/platform/all1.oxtbin0 -> 692 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/platform/all2.oxtbin0 -> 702 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/platform/all3.oxtbin0 -> 297 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/platform/extensions.info146
-rwxr-xr-xtestautomation/extensions/optional/input/platform/freebsd_x86.oxtbin0 -> 706 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/platform/freebsd_x86_64.oxtbin0 -> 711 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/platform/invalid1.oxtbin0 -> 653 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/platform/invalid2.oxtbin0 -> 653 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/platform/invalid3.oxtbin0 -> 655 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/platform/linux_arm_eabi.oxtbin0 -> 709 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/platform/linux_arm_oabi.oxtbin0 -> 710 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/platform/linux_ia64.oxtbin0 -> 706 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/platform/linux_mips_eb.oxtbin0 -> 709 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/platform/linux_mips_el.oxtbin0 -> 708 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/platform/linux_powerpc.oxtbin0 -> 708 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/platform/linux_powerpc64.oxtbin0 -> 710 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/platform/linux_s390.oxtbin0 -> 705 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/platform/linux_s390x.oxtbin0 -> 706 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/platform/linux_sparc.oxtbin0 -> 706 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/platform/linux_x86.oxtbin0 -> 705 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/platform/linux_x86_64.oxtbin0 -> 708 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/platform/macosx_powerpc.oxtbin0 -> 710 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/platform/macosx_x86.oxtbin0 -> 707 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/platform/mul1.oxtbin0 -> 952 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/platform/os2_x86.oxtbin0 -> 706 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/platform/readme.txt49
-rwxr-xr-xtestautomation/extensions/optional/input/platform/solaris_sparc.oxtbin0 -> 709 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/platform/solaris_x86.oxtbin0 -> 706 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/platform/windows_x86.oxtbin0 -> 707 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/publisher/extension.info58
-rwxr-xr-xtestautomation/extensions/optional/input/publisher/pub1.oxtbin0 -> 1882 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/publisher/pub2.oxtbin0 -> 1866 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/publisher/pub3.oxtbin0 -> 1829 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/publisher/pub4.oxtbin0 -> 1812 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/publisher/pub5.oxtbin0 -> 1769 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/publisher/pub6.oxtbin0 -> 1814 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/publisher/pub7.oxtbin0 -> 1769 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/simpleLicense/BadDesc.oxtbin0 -> 9663 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/simpleLicense/BadNamespace.oxtbin0 -> 10027 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/simpleLicense/BadRoot.oxtbin0 -> 9248 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/simpleLicense/CancelLicense.oxtbin0 -> 9406 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/simpleLicense/IncompAttr1.oxtbin0 -> 9389 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/simpleLicense/IncompAttr2.oxtbin0 -> 9365 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/simpleLicense/LongLic.oxtbin0 -> 9540 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/simpleLicense/MissingLic.oxtbin0 -> 9232 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/simpleLicense/MissingLicRef.oxtbin0 -> 9343 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/simpleLicense/NoDesc.oxtbin0 -> 8722 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/simpleLicense/NoLangNoDefault.oxtbin0 -> 9234 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/simpleLicense/OnlyDefault.oxtbin0 -> 9394 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/simpleLicense/ShortLicense.oxtbin0 -> 9406 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/simpleLicense/ShortLicenseShared.oxtbin0 -> 9407 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/update/plain1.oxtbin0 -> 2187 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/update/plain2.oxtbin0 -> 2186 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/update/plain3.oxtbin0 -> 2186 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/update/readme.txt26
-rwxr-xr-xtestautomation/extensions/optional/input/versions/plain.oxtbin0 -> 1522 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/versions/version_0.0/plain.oxtbin0 -> 1618 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/versions/version_1.02.4.7.0/plain.oxtbin0 -> 1624 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/versions/version_1.2.15.3/plain.oxtbin0 -> 1624 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/versions/version_1.2.3/plain.oxtbin0 -> 1620 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/versions/version_1.2.4.7/plain.oxtbin0 -> 1623 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/versions/version_none/plain.oxtbin0 -> 1598 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/web_update/readme.txt133
-rwxr-xr-xtestautomation/extensions/optional/input/web_update/web1.oxtbin0 -> 1693 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/web_update/web2.oxtbin0 -> 1693 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/web_update/web3.oxtbin0 -> 1693 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/web_update/web4.oxtbin0 -> 1693 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/web_update/web5.oxtbin0 -> 1693 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/web_update/web6.oxtbin0 -> 1638 bytes
-rwxr-xr-xtestautomation/extensions/optional/input/web_update/web7.oxtbin0 -> 1894 bytes
-rw-r--r--testautomation/extensions/required/e_update.bas58
-rw-r--r--testautomation/extensions/required/includes/e_update.inc156
-rwxr-xr-xtestautomation/framework/optional/f_CJK_CollationDialogue.bas78
-rwxr-xr-xtestautomation/framework/optional/f_CJK_FeatureSwitch.bas97
-rwxr-xr-xtestautomation/framework/optional/f_CJK_GridLayout.bas80
-rwxr-xr-xtestautomation/framework/optional/f_CJK_RubyDialogueProposal.bas71
-rwxr-xr-xtestautomation/framework/optional/f_NewSortingAlgorithmForJapanese.bas79
-rwxr-xr-xtestautomation/framework/optional/f_basic_dialog_i18n.bas68
-rwxr-xr-xtestautomation/framework/optional/f_basic_documents.bas66
-rwxr-xr-xtestautomation/framework/optional/f_basic_eventbinding.bas58
-rwxr-xr-xtestautomation/framework/optional/f_basic_first.bas77
-rwxr-xr-xtestautomation/framework/optional/f_basic_formcontrols.bas73
-rw-r--r--testautomation/framework/optional/f_basic_gridcontrol.bas49
-rwxr-xr-xtestautomation/framework/optional/f_basic_issues.bas61
-rwxr-xr-xtestautomation/framework/optional/f_basic_library_export_import.bas76
-rwxr-xr-xtestautomation/framework/optional/f_basic_modules.bas79
-rwxr-xr-xtestautomation/framework/optional/f_basic_package_export_import.bas72
-rwxr-xr-xtestautomation/framework/optional/f_basic_protected_libraries.bas64
-rwxr-xr-xtestautomation/framework/optional/f_basic_shared_modules.bas59
-rwxr-xr-xtestautomation/framework/optional/f_basic_templatedocuments.bas75
-rwxr-xr-xtestautomation/framework/optional/f_basic_vba-compat.bas75
-rwxr-xr-xtestautomation/framework/optional/f_configuration.bas52
-rwxr-xr-xtestautomation/framework/optional/f_extras_labels.bas52
-rwxr-xr-xtestautomation/framework/optional/f_extras_samplefileopen.bas66
-rwxr-xr-xtestautomation/framework/optional/f_extras_sampleopen.bas68
-rwxr-xr-xtestautomation/framework/optional/f_extras_samplepreview.bas60
-rwxr-xr-xtestautomation/framework/optional/f_extras_tableautoformat.bas66
-rwxr-xr-xtestautomation/framework/optional/f_extras_templatefileopen.bas66
-rwxr-xr-xtestautomation/framework/optional/f_extras_templateopen.bas69
-rwxr-xr-xtestautomation/framework/optional/f_extras_templatepreview.bas58
-rwxr-xr-xtestautomation/framework/optional/f_filedlg_allowed_names.bas59
-rwxr-xr-xtestautomation/framework/optional/f_filedlg_autocompletion.bas57
-rwxr-xr-xtestautomation/framework/optional/f_filedlg_cjk_files.bas69
-rwxr-xr-xtestautomation/framework/optional/f_filedlg_dialogtest.bas65
-rwxr-xr-xtestautomation/framework/optional/f_filedlg_folder_navigation.bas76
-rwxr-xr-xtestautomation/framework/optional/f_filedlg_forbidden_names_windows.bas60
-rwxr-xr-xtestautomation/framework/optional/f_filedlg_multiselection.bas59
-rwxr-xr-xtestautomation/framework/optional/f_filedlg_passwords.bas58
-rwxr-xr-xtestautomation/framework/optional/f_filedlg_reserved_names_unix.bas60
-rwxr-xr-xtestautomation/framework/optional/f_filedlg_reserved_names_windows.bas60
-rwxr-xr-xtestautomation/framework/optional/f_fontworkgallery.bas54
-rwxr-xr-xtestautomation/framework/optional/f_help_bookmarks.bas56
-rwxr-xr-xtestautomation/framework/optional/f_help_compare_applications.bas59
-rwxr-xr-xtestautomation/framework/optional/f_help_compare_content.bas60
-rwxr-xr-xtestautomation/framework/optional/f_help_compare_topics.bas58
-rwxr-xr-xtestautomation/framework/optional/f_help_search.bas62
-rwxr-xr-xtestautomation/framework/optional/f_help_view_topics.bas68
-rwxr-xr-xtestautomation/framework/optional/f_loadsave_general.bas55
-rwxr-xr-xtestautomation/framework/optional/f_menuentries.bas51
-rwxr-xr-xtestautomation/framework/optional/f_ole.bas106
-rwxr-xr-xtestautomation/framework/optional/f_options_loadsave.bas63
-rwxr-xr-xtestautomation/framework/optional/f_options_ooo.bas88
-rwxr-xr-xtestautomation/framework/optional/f_scripting_organizers.bas83
-rwxr-xr-xtestautomation/framework/optional/f_security_broken_signature.bas66
-rwxr-xr-xtestautomation/framework/optional/f_security_certification_dialogs.bas73
-rwxr-xr-xtestautomation/framework/optional/f_security_certified_docs.bas78
-rwxr-xr-xtestautomation/framework/optional/f_security_evilmacro.bas80
-rwxr-xr-xtestautomation/framework/optional/f_security_incorrect_password.bas70
-rwxr-xr-xtestautomation/framework/optional/f_security_macrosecurity.bas60
-rwxr-xr-xtestautomation/framework/optional/f_security_recommend_password.bas77
-rwxr-xr-xtestautomation/framework/optional/f_security_trusted_path.bas100
-rwxr-xr-xtestautomation/framework/optional/f_toolbar_behavior.bas53
-rwxr-xr-xtestautomation/framework/optional/f_toolbar_items.bas62
-rwxr-xr-xtestautomation/framework/optional/f_usage_tracking.bas61
-rwxr-xr-xtestautomation/framework/optional/includes/CJK_CollationDialogue_1.inc722
-rwxr-xr-xtestautomation/framework/optional/includes/CJK_FeatureSwitchTest_1.inc743
-rwxr-xr-xtestautomation/framework/optional/includes/CJK_RubyDialogueProposal_1.inc391
-rwxr-xr-xtestautomation/framework/optional/includes/NewSortingAlgorithmForJapanese_1.inc227
-rwxr-xr-xtestautomation/framework/optional/includes/basic_delete_modules.inc101
-rwxr-xr-xtestautomation/framework/optional/includes/basic_dialog_i18n_copy_control.inc202
-rwxr-xr-xtestautomation/framework/optional/includes/basic_dialog_i18n_defaults.inc406
-rwxr-xr-xtestautomation/framework/optional/includes/basic_documents.inc185
-rwxr-xr-xtestautomation/framework/optional/includes/basic_eventbinding.inc283
-rwxr-xr-xtestautomation/framework/optional/includes/basic_formcontrols.inc232
-rw-r--r--testautomation/framework/optional/includes/basic_gridcontrol.inc112
-rwxr-xr-xtestautomation/framework/optional/includes/basic_ide.inc311
-rwxr-xr-xtestautomation/framework/optional/includes/basic_issues.inc259
-rwxr-xr-xtestautomation/framework/optional/includes/basic_library_export.inc202
-rwxr-xr-xtestautomation/framework/optional/includes/basic_library_import.inc129
-rwxr-xr-xtestautomation/framework/optional/includes/basic_macros.inc380
-rwxr-xr-xtestautomation/framework/optional/includes/basic_modulehide.inc98
-rwxr-xr-xtestautomation/framework/optional/includes/basic_modulenames.inc249
-rwxr-xr-xtestautomation/framework/optional/includes/basic_modules.inc140
-rwxr-xr-xtestautomation/framework/optional/includes/basic_package_export.inc221
-rwxr-xr-xtestautomation/framework/optional/includes/basic_package_import.inc140
-rwxr-xr-xtestautomation/framework/optional/includes/basic_protected_libraries.inc160
-rwxr-xr-xtestautomation/framework/optional/includes/basic_shared_modules.inc97
-rwxr-xr-xtestautomation/framework/optional/includes/basic_spectemplate.inc103
-rwxr-xr-xtestautomation/framework/optional/includes/basic_usertemplate.inc220
-rwxr-xr-xtestautomation/framework/optional/includes/basic_vba-compat_application-union.inc145
-rwxr-xr-xtestautomation/framework/optional/includes/basic_vba-compat_import_disabled.inc145
-rwxr-xr-xtestautomation/framework/optional/includes/basic_vba-compat_import_enabled.inc153
-rwxr-xr-xtestautomation/framework/optional/includes/basic_vba-compat_import_nothing.inc110
-rw-r--r--testautomation/framework/optional/includes/basic_vba-compat_security_check.inc105
-rwxr-xr-xtestautomation/framework/optional/includes/basic_vba-compat_thisworkbook.inc143
-rwxr-xr-xtestautomation/framework/optional/includes/basic_vba-compat_xlsm-xlsb.inc187
-rwxr-xr-xtestautomation/framework/optional/includes/basic_vba_compat_tools.inc72
-rwxr-xr-xtestautomation/framework/optional/includes/configuration.inc372
-rwxr-xr-xtestautomation/framework/optional/includes/extras_file_open.inc215
-rwxr-xr-xtestautomation/framework/optional/includes/extras_labels.inc97
-rwxr-xr-xtestautomation/framework/optional/includes/extras_modify_objects.inc173
-rwxr-xr-xtestautomation/framework/optional/includes/extras_preview.inc112
-rwxr-xr-xtestautomation/framework/optional/includes/extras_table_autoformat.inc121
-rwxr-xr-xtestautomation/framework/optional/includes/f_usage_tracking.inc288
-rwxr-xr-xtestautomation/framework/optional/includes/filedlg_allowed_names.inc115
-rwxr-xr-xtestautomation/framework/optional/includes/filedlg_autocomplete.inc207
-rwxr-xr-xtestautomation/framework/optional/includes/filedlg_cjk_files.inc83
-rwxr-xr-xtestautomation/framework/optional/includes/filedlg_cjk_folders.inc86
-rwxr-xr-xtestautomation/framework/optional/includes/filedlg_document_properties.inc172
-rwxr-xr-xtestautomation/framework/optional/includes/filedlg_filternames.inc121
-rwxr-xr-xtestautomation/framework/optional/includes/filedlg_folders1.inc106
-rwxr-xr-xtestautomation/framework/optional/includes/filedlg_folders2.inc72
-rwxr-xr-xtestautomation/framework/optional/includes/filedlg_folders3.inc65
-rwxr-xr-xtestautomation/framework/optional/includes/filedlg_folders4.inc128
-rwxr-xr-xtestautomation/framework/optional/includes/filedlg_folders5.inc117
-rwxr-xr-xtestautomation/framework/optional/includes/filedlg_folders6.inc166
-rwxr-xr-xtestautomation/framework/optional/includes/filedlg_folders7.inc127
-rwxr-xr-xtestautomation/framework/optional/includes/filedlg_forbidden_names_windows.inc85
-rwxr-xr-xtestautomation/framework/optional/includes/filedlg_multiselection.inc197
-rwxr-xr-xtestautomation/framework/optional/includes/filedlg_passwords.inc184
-rw-r--r--testautomation/framework/optional/includes/filedlg_rename.inc97
-rwxr-xr-xtestautomation/framework/optional/includes/filedlg_reserved_names_unix.inc76
-rwxr-xr-xtestautomation/framework/optional/includes/filedlg_reserved_names_windows.inc133
-rwxr-xr-xtestautomation/framework/optional/includes/filedlg_tools.inc478
-rwxr-xr-xtestautomation/framework/optional/includes/filedlg_triggers.inc274
-rwxr-xr-xtestautomation/framework/optional/includes/fontworkgallery.inc146
-rwxr-xr-xtestautomation/framework/optional/includes/help_bookmarks.inc201
-rwxr-xr-xtestautomation/framework/optional/includes/help_compare_applications.inc99
-rwxr-xr-xtestautomation/framework/optional/includes/help_compare_content.inc94
-rwxr-xr-xtestautomation/framework/optional/includes/help_compare_topics.inc127
-rwxr-xr-xtestautomation/framework/optional/includes/help_search.inc154
-rwxr-xr-xtestautomation/framework/optional/includes/help_view_topics.inc105
-rwxr-xr-xtestautomation/framework/optional/includes/loadsave_files.inc181
-rwxr-xr-xtestautomation/framework/optional/includes/loadsave_new.inc116
-rwxr-xr-xtestautomation/framework/optional/includes/menuentries.inc172
-rwxr-xr-xtestautomation/framework/optional/includes/ole_1.inc467
-rwxr-xr-xtestautomation/framework/optional/includes/ole_2.inc129
-rwxr-xr-xtestautomation/framework/optional/includes/ole_3.inc349
-rwxr-xr-xtestautomation/framework/optional/includes/ole_tools.inc461
-rwxr-xr-xtestautomation/framework/optional/includes/options_asia.inc641
-rwxr-xr-xtestautomation/framework/optional/includes/options_data.inc192
-rwxr-xr-xtestautomation/framework/optional/includes/options_int1.inc286
-rwxr-xr-xtestautomation/framework/optional/includes/options_lan1.inc894
-rwxr-xr-xtestautomation/framework/optional/includes/options_loadsave_general.inc284
-rwxr-xr-xtestautomation/framework/optional/includes/options_loadsave_html.inc220
-rwxr-xr-xtestautomation/framework/optional/includes/options_loadsave_msoffice.inc127
-rwxr-xr-xtestautomation/framework/optional/includes/options_loadsave_vba.inc129
-rwxr-xr-xtestautomation/framework/optional/includes/options_ooo_accessibility.inc185
-rwxr-xr-xtestautomation/framework/optional/includes/options_ooo_appearance.inc169
-rwxr-xr-xtestautomation/framework/optional/includes/options_ooo_colors.inc206
-rwxr-xr-xtestautomation/framework/optional/includes/options_ooo_fontreplacement.inc118
-rwxr-xr-xtestautomation/framework/optional/includes/options_ooo_general.inc131
-rwxr-xr-xtestautomation/framework/optional/includes/options_ooo_java.inc131
-rwxr-xr-xtestautomation/framework/optional/includes/options_ooo_memory.inc219
-rwxr-xr-xtestautomation/framework/optional/includes/options_ooo_paths.inc349
-rwxr-xr-xtestautomation/framework/optional/includes/options_ooo_print.inc438
-rwxr-xr-xtestautomation/framework/optional/includes/options_ooo_security.inc130
-rwxr-xr-xtestautomation/framework/optional/includes/options_ooo_userdata.inc212
-rwxr-xr-xtestautomation/framework/optional/includes/options_ooo_view.inc243
-rwxr-xr-xtestautomation/framework/optional/includes/scripting_organizers.inc281
-rwxr-xr-xtestautomation/framework/optional/includes/security_broken_signature.inc71
-rwxr-xr-xtestautomation/framework/optional/includes/security_certification_dialogs.inc100
-rwxr-xr-xtestautomation/framework/optional/includes/security_certified_docs.inc143
-rwxr-xr-xtestautomation/framework/optional/includes/security_evilmacro1.inc100
-rwxr-xr-xtestautomation/framework/optional/includes/security_evilmacro2.inc89
-rwxr-xr-xtestautomation/framework/optional/includes/security_evilmacro3.inc95
-rwxr-xr-xtestautomation/framework/optional/includes/security_incorrect_password.inc130
-rwxr-xr-xtestautomation/framework/optional/includes/security_macrosecurity.inc184
-rwxr-xr-xtestautomation/framework/optional/includes/security_recommend_password.inc118
-rwxr-xr-xtestautomation/framework/optional/includes/security_trusted_path.inc86
-rwxr-xr-xtestautomation/framework/optional/includes/standardbar2.inc161
-rwxr-xr-xtestautomation/framework/optional/includes/toolbar_behavior.inc152
-rwxr-xr-xtestautomation/framework/optional/includes/w_grid_layout1.inc592
-rwxr-xr-xtestautomation/framework/optional/input/AppLibrary1/Dialog1.xdl8
-rwxr-xr-xtestautomation/framework/optional/input/AppLibrary1/Module1.xba8
-rwxr-xr-xtestautomation/framework/optional/input/AppLibrary1/Module2.xba8
-rwxr-xr-xtestautomation/framework/optional/input/AppLibrary1/dialog.xlb5
-rwxr-xr-xtestautomation/framework/optional/input/AppLibrary1/script.xlb6
-rw-r--r--testautomation/framework/optional/input/BasicDocs/basic.odfbin0 -> 5631 bytes
-rw-r--r--testautomation/framework/optional/input/BasicDocs/basic.odgbin0 -> 8864 bytes
-rw-r--r--testautomation/framework/optional/input/BasicDocs/basic.odmbin0 -> 7274 bytes
-rw-r--r--testautomation/framework/optional/input/BasicDocs/basic.odpbin0 -> 10802 bytes
-rw-r--r--testautomation/framework/optional/input/BasicDocs/basic.odsbin0 -> 7328 bytes
-rw-r--r--testautomation/framework/optional/input/BasicDocs/basic.odtbin0 -> 7262 bytes
-rw-r--r--testautomation/framework/optional/input/BasicDocs/basic.sxcbin0 -> 7695 bytes
-rw-r--r--testautomation/framework/optional/input/BasicDocs/basic.sxdbin0 -> 8165 bytes
-rw-r--r--testautomation/framework/optional/input/BasicDocs/basic.sxgbin0 -> 7652 bytes
-rw-r--r--testautomation/framework/optional/input/BasicDocs/basic.sxibin0 -> 9729 bytes
-rw-r--r--testautomation/framework/optional/input/BasicDocs/basic.sxmbin0 -> 5111 bytes
-rw-r--r--testautomation/framework/optional/input/BasicDocs/basic.sxwbin0 -> 7632 bytes
-rwxr-xr-xtestautomation/framework/optional/input/CJK/FontSizeChanges_1.sxwbin0 -> 5231 bytes
-rwxr-xr-xtestautomation/framework/optional/input/CJK/IndentsTest.sxwbin0 -> 5515 bytes
-rwxr-xr-xtestautomation/framework/optional/input/CJK/graphicInPage.sxwbin0 -> 75327 bytes
-rwxr-xr-xtestautomation/framework/optional/input/CJK/gridtest.sxwbin0 -> 5341 bytes
-rwxr-xr-xtestautomation/framework/optional/input/CJK/objectsTest.sxwbin0 -> 7814 bytes
-rwxr-xr-xtestautomation/framework/optional/input/CJK/rubytest.sxwbin0 -> 5263 bytes
-rwxr-xr-xtestautomation/framework/optional/input/CJK/sortTest.sxwbin0 -> 5051 bytes
-rwxr-xr-xtestautomation/framework/optional/input/alldocs/aendern.sdabin0 -> 39424 bytes
-rwxr-xr-xtestautomation/framework/optional/input/alldocs/bereich.sdcbin0 -> 30208 bytes
-rwxr-xr-xtestautomation/framework/optional/input/alldocs/body.htm146
-rwxr-xr-xtestautomation/framework/optional/input/alldocs/borabora.jpgbin0 -> 28566 bytes
-rwxr-xr-xtestautomation/framework/optional/input/alldocs/columbia.dxf12638
-rwxr-xr-xtestautomation/framework/optional/input/alldocs/erwin.sdwbin0 -> 8192 bytes
-rwxr-xr-xtestautomation/framework/optional/input/alldocs/fdlg.sxcbin0 -> 4923 bytes
-rwxr-xr-xtestautomation/framework/optional/input/alldocs/fdlg.sxdbin0 -> 6016 bytes
-rwxr-xr-xtestautomation/framework/optional/input/alldocs/fdlg.sxgbin0 -> 4777 bytes
-rwxr-xr-xtestautomation/framework/optional/input/alldocs/fdlg.sxibin0 -> 7338 bytes
-rwxr-xr-xtestautomation/framework/optional/input/alldocs/fdlg.sxmbin0 -> 2954 bytes
-rwxr-xr-xtestautomation/framework/optional/input/alldocs/fdlg.sxwbin0 -> 4776 bytes
-rwxr-xr-xtestautomation/framework/optional/input/alldocs/ffortpf.smfbin0 -> 6656 bytes
-rwxr-xr-xtestautomation/framework/optional/input/alldocs/ls3_3_15.sdsbin0 -> 59904 bytes
-rwxr-xr-xtestautomation/framework/optional/input/alldocs/schach.sddbin0 -> 65536 bytes
-rwxr-xr-xtestautomation/framework/optional/input/eventbinding/DialogComponent.odtbin0 -> 12541 bytes
-rwxr-xr-xtestautomation/framework/optional/input/eventbinding/DialogComponent.oxtbin0 -> 7588 bytes
-rwxr-xr-xtestautomation/framework/optional/input/extras_formats/Labels_en-US.txt1537
-rwxr-xr-xtestautomation/framework/optional/input/extras_formats/Tables_calc_en-US.txt17
-rwxr-xr-xtestautomation/framework/optional/input/extras_formats/Tables_writer_en-US.txt17
-rwxr-xr-xtestautomation/framework/optional/input/filetest/level1/level2/level3/filetest.txt6
-rwxr-xr-xtestautomation/framework/optional/input/filetest/level1/level2/level3/testdoc.sdwbin0 -> 15872 bytes
-rwxr-xr-xtestautomation/framework/optional/input/filetst2/spaces/filetest.txt6
-rwxr-xr-xtestautomation/framework/optional/input/filetst2/spaces/testdoc.sdwbin0 -> 15872 bytes
-rwxr-xr-xtestautomation/framework/optional/input/filternames/OpenOffice.org_Filternames_en-US.txt133
-rw-r--r--testautomation/framework/optional/input/filternames/Oracle_Open_Office_Filternames_add_en-US.txt87
-rw-r--r--testautomation/framework/optional/input/filternames/Oracle_Open_Office_Filternames_en-US.txt85
-rwxr-xr-xtestautomation/framework/optional/input/gridcontrol.odtbin0 -> 14075 bytes
-rwxr-xr-xtestautomation/framework/optional/input/help_browser/OpenOffice.org_help_applications_en-US.txt8
-rwxr-xr-xtestautomation/framework/optional/input/help_browser/OpenOffice.org_help_content_en-US.txt869
-rwxr-xr-xtestautomation/framework/optional/input/help_browser/OpenOffice.org_help_topics_en-US.txt21949
-rwxr-xr-xtestautomation/framework/optional/input/help_browser/OpenOffice.org_search_headings_and_whole_words_en-US.txt6
-rwxr-xr-xtestautomation/framework/optional/input/help_browser/OpenOffice.org_search_headings_only_en-US.txt7
-rwxr-xr-xtestautomation/framework/optional/input/help_browser/OpenOffice.org_search_whole_words_only_en-US.txt16
-rwxr-xr-xtestautomation/framework/optional/input/help_browser/OpenOffice.org_search_without_filter_en-US.txt22
-rwxr-xr-xtestautomation/framework/optional/input/help_browser/Oracle_Open_Office_help_applications_en-US.txt8
-rwxr-xr-xtestautomation/framework/optional/input/help_browser/Oracle_Open_Office_help_content_en-US.txt868
-rwxr-xr-xtestautomation/framework/optional/input/help_browser/Oracle_Open_Office_help_topics_en-US.txt21965
-rwxr-xr-xtestautomation/framework/optional/input/help_browser/Oracle_Open_Office_search_headings_and_whole_words_en-US.txt6
-rwxr-xr-xtestautomation/framework/optional/input/help_browser/Oracle_Open_Office_search_headings_only_en-US.txt7
-rwxr-xr-xtestautomation/framework/optional/input/help_browser/Oracle_Open_Office_search_whole_words_only_en-US.txt16
-rwxr-xr-xtestautomation/framework/optional/input/help_browser/Oracle_Open_Office_search_without_filter_en-US.txt22
-rwxr-xr-xtestautomation/framework/optional/input/menu/areadme.txt18
-rwxr-xr-xtestautomation/framework/optional/input/menu/en-us_basic.txt57
-rwxr-xr-xtestautomation/framework/optional/input/menu/en-us_calc.txt177
-rwxr-xr-xtestautomation/framework/optional/input/menu/en-us_draw.txt157
-rwxr-xr-xtestautomation/framework/optional/input/menu/en-us_htmldokument.txt172
-rwxr-xr-xtestautomation/framework/optional/input/menu/en-us_impress.txt158
-rwxr-xr-xtestautomation/framework/optional/input/menu/en-us_insight.txt82
-rwxr-xr-xtestautomation/framework/optional/input/menu/en-us_masterdoc.txt194
-rwxr-xr-xtestautomation/framework/optional/input/menu/en-us_math.txt85
-rwxr-xr-xtestautomation/framework/optional/input/menu/en-us_writer.txt195
-rwxr-xr-xtestautomation/framework/optional/input/multiselect/01Cmulti.odsbin0 -> 6271 bytes
-rwxr-xr-xtestautomation/framework/optional/input/multiselect/01Cmulti.sdcbin0 -> 30208 bytes
-rwxr-xr-xtestautomation/framework/optional/input/multiselect/01Cmulti.xlsbin0 -> 98304 bytes
-rwxr-xr-xtestautomation/framework/optional/input/multiselect/01Wmulti.docbin0 -> 96256 bytes
-rwxr-xr-xtestautomation/framework/optional/input/multiselect/01Wmulti.odtbin0 -> 6475 bytes
-rwxr-xr-xtestautomation/framework/optional/input/multiselect/01Wmulti.sdwbin0 -> 14848 bytes
-rwxr-xr-xtestautomation/framework/optional/input/multiselect/02Cmulti.odsbin0 -> 6278 bytes
-rwxr-xr-xtestautomation/framework/optional/input/multiselect/02Cmulti.sdcbin0 -> 30208 bytes
-rwxr-xr-xtestautomation/framework/optional/input/multiselect/02Cmulti.xlsbin0 -> 98304 bytes
-rwxr-xr-xtestautomation/framework/optional/input/multiselect/02Wmulti.docbin0 -> 96256 bytes
-rwxr-xr-xtestautomation/framework/optional/input/multiselect/02Wmulti.odtbin0 -> 6477 bytes
-rwxr-xr-xtestautomation/framework/optional/input/multiselect/02Wmulti.sdwbin0 -> 14848 bytes
-rwxr-xr-xtestautomation/framework/optional/input/multiselect/03Cmulti.odsbin0 -> 6281 bytes
-rwxr-xr-xtestautomation/framework/optional/input/multiselect/03Cmulti.sdcbin0 -> 30208 bytes
-rwxr-xr-xtestautomation/framework/optional/input/multiselect/03Cmulti.xlsbin0 -> 98304 bytes
-rwxr-xr-xtestautomation/framework/optional/input/multiselect/03Wmulti.docbin0 -> 96256 bytes
-rwxr-xr-xtestautomation/framework/optional/input/multiselect/03Wmulti.odtbin0 -> 6475 bytes
-rwxr-xr-xtestautomation/framework/optional/input/multiselect/03Wmulti.sdwbin0 -> 14848 bytes
-rwxr-xr-xtestautomation/framework/optional/input/multiselect/04Cmulti.odsbin0 -> 6279 bytes
-rwxr-xr-xtestautomation/framework/optional/input/multiselect/04Cmulti.sdcbin0 -> 30208 bytes
-rwxr-xr-xtestautomation/framework/optional/input/multiselect/04Cmulti.xlsbin0 -> 98304 bytes
-rwxr-xr-xtestautomation/framework/optional/input/multiselect/04Wmulti.docbin0 -> 96256 bytes
-rwxr-xr-xtestautomation/framework/optional/input/multiselect/04Wmulti.odtbin0 -> 6478 bytes
-rwxr-xr-xtestautomation/framework/optional/input/multiselect/04Wmulti.sdwbin0 -> 14848 bytes
-rwxr-xr-xtestautomation/framework/optional/input/multiselect/05Cmulti.odsbin0 -> 6269 bytes
-rwxr-xr-xtestautomation/framework/optional/input/multiselect/05Cmulti.sdcbin0 -> 30208 bytes
-rwxr-xr-xtestautomation/framework/optional/input/multiselect/05Cmulti.xlsbin0 -> 98304 bytes
-rwxr-xr-xtestautomation/framework/optional/input/multiselect/05Wmulti.docbin0 -> 96256 bytes
-rwxr-xr-xtestautomation/framework/optional/input/multiselect/05Wmulti.odtbin0 -> 6479 bytes
-rwxr-xr-xtestautomation/framework/optional/input/multiselect/05Wmulti.sdwbin0 -> 14848 bytes
-rwxr-xr-xtestautomation/framework/optional/input/multiselect/06Cmulti.odsbin0 -> 6273 bytes
-rwxr-xr-xtestautomation/framework/optional/input/multiselect/06Cmulti.sdcbin0 -> 30208 bytes
-rwxr-xr-xtestautomation/framework/optional/input/multiselect/06Cmulti.xlsbin0 -> 98304 bytes
-rwxr-xr-xtestautomation/framework/optional/input/multiselect/06Wmulti.docbin0 -> 96256 bytes
-rwxr-xr-xtestautomation/framework/optional/input/multiselect/06Wmulti.odtbin0 -> 6477 bytes
-rwxr-xr-xtestautomation/framework/optional/input/multiselect/06Wmulti.sdwbin0 -> 14848 bytes
-rwxr-xr-xtestautomation/framework/optional/input/multiselect/07Cmulti.odsbin0 -> 6270 bytes
-rwxr-xr-xtestautomation/framework/optional/input/multiselect/07Cmulti.sdcbin0 -> 30208 bytes
-rwxr-xr-xtestautomation/framework/optional/input/multiselect/07Cmulti.xlsbin0 -> 98304 bytes
-rwxr-xr-xtestautomation/framework/optional/input/multiselect/07Wmulti.docbin0 -> 96256 bytes
-rwxr-xr-xtestautomation/framework/optional/input/multiselect/07Wmulti.odtbin0 -> 6482 bytes
-rwxr-xr-xtestautomation/framework/optional/input/multiselect/07Wmulti.sdwbin0 -> 14848 bytes
-rwxr-xr-xtestautomation/framework/optional/input/multiselect/08Cmulti.odsbin0 -> 6274 bytes
-rwxr-xr-xtestautomation/framework/optional/input/multiselect/08Cmulti.sdcbin0 -> 30208 bytes
-rwxr-xr-xtestautomation/framework/optional/input/multiselect/08Cmulti.xlsbin0 -> 98304 bytes
-rwxr-xr-xtestautomation/framework/optional/input/multiselect/08Wmulti.docbin0 -> 96256 bytes
-rwxr-xr-xtestautomation/framework/optional/input/multiselect/08Wmulti.odtbin0 -> 6479 bytes
-rwxr-xr-xtestautomation/framework/optional/input/multiselect/08Wmulti.sdwbin0 -> 14848 bytes
-rwxr-xr-xtestautomation/framework/optional/input/multiselect/09Cmulti.odsbin0 -> 6279 bytes
-rwxr-xr-xtestautomation/framework/optional/input/multiselect/09Cmulti.sdcbin0 -> 30208 bytes
-rwxr-xr-xtestautomation/framework/optional/input/multiselect/09Cmulti.xlsbin0 -> 98304 bytes
-rwxr-xr-xtestautomation/framework/optional/input/multiselect/09Wmulti.docbin0 -> 96256 bytes
-rwxr-xr-xtestautomation/framework/optional/input/multiselect/09Wmulti.odtbin0 -> 6477 bytes
-rwxr-xr-xtestautomation/framework/optional/input/multiselect/09Wmulti.sdwbin0 -> 14848 bytes
-rwxr-xr-xtestautomation/framework/optional/input/multiselect/10Cmulti.odsbin0 -> 6269 bytes
-rwxr-xr-xtestautomation/framework/optional/input/multiselect/10Cmulti.sdcbin0 -> 30208 bytes
-rwxr-xr-xtestautomation/framework/optional/input/multiselect/10Cmulti.xlsbin0 -> 98304 bytes
-rwxr-xr-xtestautomation/framework/optional/input/multiselect/10Wmulti.docbin0 -> 96256 bytes
-rwxr-xr-xtestautomation/framework/optional/input/multiselect/10Wmulti.odtbin0 -> 6475 bytes
-rwxr-xr-xtestautomation/framework/optional/input/multiselect/10Wmulti.sdwbin0 -> 14848 bytes
-rwxr-xr-xtestautomation/framework/optional/input/options/ooo_security_changed.ref13
-rwxr-xr-xtestautomation/framework/optional/input/options/ooo_security_defaults.ref13
-rwxr-xr-xtestautomation/framework/optional/input/options/ooo_view_changed.ref20
-rwxr-xr-xtestautomation/framework/optional/input/options/ooo_view_defaults.ref19
-rwxr-xr-xtestautomation/framework/optional/input/options/paths_1.txt15
-rwxr-xr-xtestautomation/framework/optional/input/resetregistration.txt63
-rwxr-xr-xtestautomation/framework/optional/input/security/DigitalSignature.odfbin0 -> 5563 bytes
-rwxr-xr-xtestautomation/framework/optional/input/security/DigitalSignature.odgbin0 -> 9301 bytes
-rwxr-xr-xtestautomation/framework/optional/input/security/DigitalSignature.odpbin0 -> 11002 bytes
-rwxr-xr-xtestautomation/framework/optional/input/security/DigitalSignature.odsbin0 -> 7944 bytes
-rwxr-xr-xtestautomation/framework/optional/input/security/DigitalSignature.odtbin0 -> 7851 bytes
-rwxr-xr-xtestautomation/framework/optional/input/security/autotest.p12bin0 -> 1821 bytes
-rwxr-xr-xtestautomation/framework/optional/input/security/readme.txt33
-rwxr-xr-xtestautomation/framework/optional/input/security/test_macro (signed).odtbin0 -> 8550 bytes
-rwxr-xr-xtestautomation/framework/optional/input/security/test_macro.html34
-rwxr-xr-xtestautomation/framework/optional/input/security/test_macro.odtbin0 -> 7407 bytes
-rwxr-xr-xtestautomation/framework/optional/input/security/test_macro.sxwbin0 -> 5049 bytes
-rw-r--r--testautomation/framework/optional/input/vba-compat/Book1.xlsbin0 -> 18432 bytes
-rwxr-xr-xtestautomation/framework/optional/input/vba-compat/vba-application-union.xlsbin0 -> 31744 bytes
-rw-r--r--testautomation/framework/optional/input/vba-compat/vba-compat-macros.txt30
-rwxr-xr-xtestautomation/framework/optional/input/vba-compat/vba-project.xlsbbin0 -> 19603 bytes
-rwxr-xr-xtestautomation/framework/optional/input/vba-compat/vba-project.xlsmbin0 -> 20276 bytes
-rwxr-xr-xtestautomation/framework/optional/input/vba-compat/vba-sample.xlsbin0 -> 31232 bytes
-rwxr-xr-xtestautomation/framework/optional/input/vba-compat/vba-test.xlsbin0 -> 48640 bytes
-rw-r--r--testautomation/framework/optional/input/vba-compat/vba-thisworkbook.xlsbin0 -> 39424 bytes
-rwxr-xr-xtestautomation/framework/required/f_help_browser.bas62
-rwxr-xr-xtestautomation/framework/required/f_printer_administration.bas58
-rw-r--r--testautomation/framework/required/f_programmability_dialogs.bas76
-rwxr-xr-xtestautomation/framework/required/f_security_dialogs.bas55
-rwxr-xr-xtestautomation/framework/required/f_standard_toolbar.bas71
-rwxr-xr-xtestautomation/framework/required/f_tools_customize.bas75
-rwxr-xr-xtestautomation/framework/required/f_tools_options.bas60
-rwxr-xr-xtestautomation/framework/required/f_topten.bas71
-rwxr-xr-xtestautomation/framework/required/f_window_functions.bas61
-rwxr-xr-xtestautomation/framework/required/f_wizards.bas84
-rwxr-xr-xtestautomation/framework/required/includes/basic_dialog_export.inc110
-rwxr-xr-xtestautomation/framework/required/includes/basic_dialog_i18n.inc133
-rw-r--r--testautomation/framework/required/includes/basic_dialog_i18n_import.inc154
-rwxr-xr-xtestautomation/framework/required/includes/basic_macroassignment.inc126
-rwxr-xr-xtestautomation/framework/required/includes/basic_organizer.inc228
-rwxr-xr-xtestautomation/framework/required/includes/first.inc399
-rwxr-xr-xtestautomation/framework/required/includes/help_browser.inc195
-rwxr-xr-xtestautomation/framework/required/includes/printer_administration.inc271
-rwxr-xr-xtestautomation/framework/required/includes/script_organizers.inc203
-rw-r--r--testautomation/framework/required/includes/scripting_basics.inc74
-rwxr-xr-xtestautomation/framework/required/includes/security_dialogs.inc186
-rwxr-xr-xtestautomation/framework/required/includes/smoketest.inc210
-rwxr-xr-xtestautomation/framework/required/includes/standard_toolbar_1.inc77
-rwxr-xr-xtestautomation/framework/required/includes/standard_toolbar_3.inc256
-rwxr-xr-xtestautomation/framework/required/includes/standard_toolbar_4.inc65
-rwxr-xr-xtestautomation/framework/required/includes/standard_toolbar_5.inc78
-rwxr-xr-xtestautomation/framework/required/includes/standard_toolbar_6.inc141
-rwxr-xr-xtestautomation/framework/required/includes/tools_customize.inc731
-rwxr-xr-xtestautomation/framework/required/includes/tools_options.inc90
-rwxr-xr-xtestautomation/framework/required/includes/topten.inc326
-rwxr-xr-xtestautomation/framework/required/includes/window_functions.inc299
-rwxr-xr-xtestautomation/framework/required/includes/wizard_agenda.inc102
-rwxr-xr-xtestautomation/framework/required/includes/wizard_documentconverter.inc146
-rwxr-xr-xtestautomation/framework/required/includes/wizard_euroconverter.inc127
-rwxr-xr-xtestautomation/framework/required/includes/wizard_fax.inc93
-rwxr-xr-xtestautomation/framework/required/includes/wizard_firsttime.inc225
-rwxr-xr-xtestautomation/framework/required/includes/wizard_letter.inc191
-rwxr-xr-xtestautomation/framework/required/includes/wizard_mailmerge.inc1211
-rwxr-xr-xtestautomation/framework/required/includes/wizard_presentation.inc72
-rwxr-xr-xtestautomation/framework/required/includes/wizard_webpage.inc212
-rwxr-xr-xtestautomation/framework/required/input/10erTest_680.sxwbin0 -> 32670 bytes
-rw-r--r--testautomation/framework/required/input/basic_ide/Dialog5.xdl7
-rw-r--r--testautomation/framework/required/input/basic_ide/Dialog5_ar_DZ.default0
-rw-r--r--testautomation/framework/required/input/basic_ide/Dialog5_ar_DZ.properties6
-rw-r--r--testautomation/framework/required/input/basic_ide/Dialog5_ca_ES.properties6
-rw-r--r--testautomation/framework/required/input/basic_ide/Dialog5_de_DE.properties6
-rw-r--r--testautomation/framework/required/input/basic_ide/Dialog5_en_US.properties6
-rw-r--r--testautomation/framework/required/input/basic_ide/Dialog5_fr_FR.properties6
-rwxr-xr-xtestautomation/framework/required/input/document_converter/docconv1.sdwbin0 -> 15360 bytes
-rwxr-xr-xtestautomation/framework/required/input/mailmerge_data.odbbin0 -> 3524 bytes
-rwxr-xr-xtestautomation/framework/required/input/scripts/OpenOffice.org_en-US_BasicOrganizer.txt657
-rwxr-xr-xtestautomation/framework/required/input/scripts/OpenOffice.org_en-US_BeanShell.txt14
-rwxr-xr-xtestautomation/framework/required/input/scripts/OpenOffice.org_en-US_JavaScript.txt10
-rwxr-xr-xtestautomation/framework/required/input/scripts/OpenOffice.org_en-US_Python.txt10
-rwxr-xr-xtestautomation/framework/required/input/scripts/OpenOffice.org_en-US_RunMacro.txt681
-rwxr-xr-xtestautomation/framework/required/input/scripts/OpenOffice.org_en-US_osx_BasicOrganizer.txt657
-rwxr-xr-xtestautomation/framework/required/input/scripts/OpenOffice.org_en-US_osx_BeanShell.txt14
-rwxr-xr-xtestautomation/framework/required/input/scripts/OpenOffice.org_en-US_osx_JavaScript.txt10
-rwxr-xr-xtestautomation/framework/required/input/scripts/OpenOffice.org_en-US_osx_Python.txt8
-rwxr-xr-xtestautomation/framework/required/input/scripts/OpenOffice.org_en-US_osx_RunMacro.txt679
-rwxr-xr-xtestautomation/framework/required/input/scripts/OpenOffice.org_en-US_win_BasicOrganizer.txt657
-rwxr-xr-xtestautomation/framework/required/input/scripts/OpenOffice.org_en-US_win_BeanShell.txt14
-rwxr-xr-xtestautomation/framework/required/input/scripts/OpenOffice.org_en-US_win_JavaScript.txt10
-rwxr-xr-xtestautomation/framework/required/input/scripts/OpenOffice.org_en-US_win_Python.txt10
-rwxr-xr-xtestautomation/framework/required/input/scripts/OpenOffice.org_en-US_win_RunMacro.txt681
-rwxr-xr-xtestautomation/framework/required/input/scripts/Oracle-Open-Office_en-US_BasicOrganizer.txt663
-rwxr-xr-xtestautomation/framework/required/input/scripts/Oracle-Open-Office_en-US_BeanShell.txt14
-rwxr-xr-xtestautomation/framework/required/input/scripts/Oracle-Open-Office_en-US_JavaScript.txt10
-rwxr-xr-xtestautomation/framework/required/input/scripts/Oracle-Open-Office_en-US_Python.txt10
-rwxr-xr-xtestautomation/framework/required/input/scripts/Oracle-Open-Office_en-US_RunMacro.txt687
-rwxr-xr-xtestautomation/framework/required/input/scripts/Oracle-Open-Office_en-US_osx_BasicOrganizer.txt660
-rwxr-xr-xtestautomation/framework/required/input/scripts/Oracle-Open-Office_en-US_osx_BeanShell.txt14
-rwxr-xr-xtestautomation/framework/required/input/scripts/Oracle-Open-Office_en-US_osx_JavaScript.txt10
-rwxr-xr-xtestautomation/framework/required/input/scripts/Oracle-Open-Office_en-US_osx_Python.txt8
-rwxr-xr-xtestautomation/framework/required/input/scripts/Oracle-Open-Office_en-US_osx_RunMacro.txt682
-rwxr-xr-xtestautomation/framework/required/input/scripts/Oracle-Open-Office_en-US_win_BasicOrganizer.txt657
-rwxr-xr-xtestautomation/framework/required/input/scripts/Oracle-Open-Office_en-US_win_BeanShell.txt14
-rwxr-xr-xtestautomation/framework/required/input/scripts/Oracle-Open-Office_en-US_win_JavaScript.txt10
-rwxr-xr-xtestautomation/framework/required/input/scripts/Oracle-Open-Office_en-US_win_Python.txt10
-rwxr-xr-xtestautomation/framework/required/input/scripts/Oracle-Open-Office_en-US_win_RunMacro.txt681
-rwxr-xr-xtestautomation/framework/tools/includes/CJK_tools.inc325
-rwxr-xr-xtestautomation/framework/tools/includes/customize_tools.inc186
-rwxr-xr-xtestautomation/framework/tools/includes/fileoperations.inc723
-rwxr-xr-xtestautomation/framework/tools/includes/formcontrols.inc800
-rwxr-xr-xtestautomation/framework/tools/includes/help_tools.inc239
-rwxr-xr-xtestautomation/framework/tools/includes/i18n_tools.inc105
-rwxr-xr-xtestautomation/framework/tools/includes/options_tools.inc326
-rwxr-xr-xtestautomation/framework/tools/includes/pbrowser_tools.inc329
-rwxr-xr-xtestautomation/framework/tools/includes/private_environment.inc335
-rwxr-xr-xtestautomation/framework/tools/includes/scriptorganizer_tools.inc291
-rwxr-xr-xtestautomation/framework/tools/includes/spadmin_tools.inc257
-rwxr-xr-xtestautomation/framework/tools/includes/template_tools.inc472
-rwxr-xr-xtestautomation/framework/tools/includes/toolbar_tools.inc516
-rwxr-xr-xtestautomation/framework/tools/includes/webtools.inc153
-rwxr-xr-xtestautomation/framework/tools/includes/window_tools.inc86
-rwxr-xr-xtestautomation/framework/tools/includes/wizards.inc274
-rwxr-xr-xtestautomation/framework/tools/input/i18ndata.txt45
-rw-r--r--testautomation/global/hid/readme.txt130
-rwxr-xr-xtestautomation/global/input/accelerators.txt161
-rwxr-xr-xtestautomation/global/input/applications.txt40
-rw-r--r--testautomation/global/input/empty/please_do_not_delete_this_file3
-rw-r--r--testautomation/global/input/filters/api_filternames.txt331
-rw-r--r--testautomation/global/input/filters/build_to_filter.txt68
-rw-r--r--testautomation/global/input/filters/build_to_suffix.txt68
-rw-r--r--testautomation/global/input/filters/graphic_filters.txt26
-rwxr-xr-xtestautomation/global/input/filters/native_suffixes.dat53
-rwxr-xr-xtestautomation/global/input/graf_inp/airshw.metbin0 -> 142702 bytes
-rwxr-xr-xtestautomation/global/input/graf_inp/baer.tifbin0 -> 67790 bytes
-rwxr-xr-xtestautomation/global/input/graf_inp/ball.epsbin0 -> 582053 bytes
-rwxr-xr-xtestautomation/global/input/graf_inp/borabora.jpgbin0 -> 28566 bytes
-rwxr-xr-xtestautomation/global/input/graf_inp/circle.pcxbin0 -> 76917 bytes
-rwxr-xr-xtestautomation/global/input/graf_inp/columbia.dxf12638
-rwxr-xr-xtestautomation/global/input/graf_inp/desp.bmpbin0 -> 236746 bytes
-rwxr-xr-xtestautomation/global/input/graf_inp/eface.gifbin0 -> 163067 bytes
-rwxr-xr-xtestautomation/global/input/graf_inp/enter.bmpbin0 -> 42278 bytes
-rwxr-xr-xtestautomation/global/input/graf_inp/extrud.emfbin0 -> 59320 bytes
-rwxr-xr-xtestautomation/global/input/graf_inp/faxpfeil.sgvbin0 -> 1291 bytes
-rwxr-xr-xtestautomation/global/input/graf_inp/grafix1.pbmbin0 -> 24106 bytes
-rwxr-xr-xtestautomation/global/input/graf_inp/grafix2.pgmbin0 -> 191590 bytes
-rwxr-xr-xtestautomation/global/input/graf_inp/grafix3.rasbin0 -> 237488 bytes
-rwxr-xr-xtestautomation/global/input/graf_inp/grafix4.xbm2011
-rwxr-xr-xtestautomation/global/input/graf_inp/graph_ex.metbin0 -> 237285 bytes
-rwxr-xr-xtestautomation/global/input/graf_inp/graph_ex.pngbin0 -> 406588 bytes
-rwxr-xr-xtestautomation/global/input/graf_inp/graph_ex.ppm63414
-rwxr-xr-xtestautomation/global/input/graf_inp/krokodil.wmfbin0 -> 225136 bytes
-rwxr-xr-xtestautomation/global/input/graf_inp/london.ppmbin0 -> 1179663 bytes
-rwxr-xr-xtestautomation/global/input/graf_inp/mickym.sgfbin0 -> 26501 bytes
-rwxr-xr-xtestautomation/global/input/graf_inp/newtonme.pctbin0 -> 217008 bytes
-rwxr-xr-xtestautomation/global/input/graf_inp/obst.pngbin0 -> 114792 bytes
-rwxr-xr-xtestautomation/global/input/graf_inp/papagei1.pcdbin0 -> 3944448 bytes
-rwxr-xr-xtestautomation/global/input/graf_inp/papagei2.xpm629
-rwxr-xr-xtestautomation/global/input/graf_inp/picture.svmbin0 -> 17929 bytes
-rwxr-xr-xtestautomation/global/input/graf_inp/pilz.tgabin0 -> 318936 bytes
-rwxr-xr-xtestautomation/global/input/graf_inp/purzel.gifbin0 -> 18909 bytes
-rwxr-xr-xtestautomation/global/input/graf_inp/stabler.tifbin0 -> 492359 bytes
-rwxr-xr-xtestautomation/global/input/graf_inp/tiger.psdbin0 -> 523335 bytes
-rwxr-xr-xtestautomation/global/input/java/Clock.classbin0 -> 4775 bytes
-rwxr-xr-xtestautomation/global/input/java/Clock.java227
-rw-r--r--testautomation/global/input/java/java.htm47
-rwxr-xr-xtestautomation/global/input/macros.txt326
-rw-r--r--testautomation/global/input/officeinfo.txt4
-rw-r--r--testautomation/global/input/proxies.txt25
-rw-r--r--testautomation/global/input/servers.txt50
-rw-r--r--testautomation/global/input/xml_filter/docbook.xml210
-rwxr-xr-xtestautomation/global/input/xml_filter/excel.xml74
-rwxr-xr-xtestautomation/global/input/xml_filter/word.xml4
-rwxr-xr-xtestautomation/global/input/xslt_stylesheets/docbook.jarbin0 -> 17693 bytes
-rwxr-xr-xtestautomation/global/input/xslt_stylesheets/excel.jarbin0 -> 47729 bytes
-rwxr-xr-xtestautomation/global/input/xslt_stylesheets/word.jarbin0 -> 9063 bytes
-rwxr-xr-xtestautomation/global/input/xslt_stylesheets/xhtml.jarbin0 -> 16829 bytes
-rwxr-xr-xtestautomation/global/required/includes/g_001.inc149
-rwxr-xr-xtestautomation/global/required/includes/g_009.inc178
-rw-r--r--testautomation/global/required/includes/g_customize.inc331
-rw-r--r--testautomation/global/required/includes/g_findbar.inc159
-rwxr-xr-xtestautomation/global/required/includes/g_numberformatter1.inc787
-rwxr-xr-xtestautomation/global/required/includes/g_option.inc863
-rwxr-xr-xtestautomation/global/required/includes/g_option_application.inc664
-rw-r--r--testautomation/global/required/includes/g_printing.inc518
-rw-r--r--testautomation/global/sid/all.sid648
-rwxr-xr-xtestautomation/global/sid/bars.sid747
-rw-r--r--testautomation/global/sid/basic.sid12
-rw-r--r--testautomation/global/sid/context.sid40
-rw-r--r--testautomation/global/sid/e_all.sid965
-rw-r--r--testautomation/global/sid/others.sid40
-rw-r--r--testautomation/global/sid/sop.sid18
-rwxr-xr-xtestautomation/global/system/includes/declare.inc361
-rwxr-xr-xtestautomation/global/system/includes/gvariabl.inc266
-rwxr-xr-xtestautomation/global/system/includes/iniinfo.inc1157
-rwxr-xr-xtestautomation/global/system/includes/inivalue.inc236
-rwxr-xr-xtestautomation/global/system/includes/master.inc1216
-rwxr-xr-xtestautomation/global/system/includes/status.inc715
-rwxr-xr-xtestautomation/global/system/includes/sysinfo.inc412
-rw-r--r--testautomation/global/tools/closeoffice.bas48
-rwxr-xr-xtestautomation/global/tools/compressstatus.bas188
-rwxr-xr-xtestautomation/global/tools/declare.bas84
-rwxr-xr-xtestautomation/global/tools/includes/optional/t_accels.inc124
-rwxr-xr-xtestautomation/global/tools/includes/optional/t_basic_ide_tools.inc816
-rwxr-xr-xtestautomation/global/tools/includes/optional/t_basic_organizer_tools.inc356
-rwxr-xr-xtestautomation/global/tools/includes/optional/t_control_objects.inc611
-rwxr-xr-xtestautomation/global/tools/includes/optional/t_docfuncs.inc475
-rwxr-xr-xtestautomation/global/tools/includes/optional/t_extension_manager_tools.inc780
-rwxr-xr-xtestautomation/global/tools/includes/optional/t_filetools.inc412
-rwxr-xr-xtestautomation/global/tools/includes/optional/t_key_tools.inc563
-rwxr-xr-xtestautomation/global/tools/includes/optional/t_listfuncs.inc464
-rwxr-xr-xtestautomation/global/tools/includes/optional/t_locale_strings1.inc569
-rw-r--r--testautomation/global/tools/includes/optional/t_locale_tools.inc92
-rwxr-xr-xtestautomation/global/tools/includes/optional/t_macro_tools.inc175
-rwxr-xr-xtestautomation/global/tools/includes/optional/t_ole.inc143
-rwxr-xr-xtestautomation/global/tools/includes/optional/t_security_tools.inc677
-rw-r--r--testautomation/global/tools/includes/optional/t_set_standard_controls.inc646
-rw-r--r--testautomation/global/tools/includes/optional/t_spreadsheet_tools1.inc84
-rwxr-xr-xtestautomation/global/tools/includes/optional/t_stringtools.inc355
-rw-r--r--testautomation/global/tools/includes/optional/t_toolbar_tools1.inc418
-rw-r--r--testautomation/global/tools/includes/optional/t_toolbar_writer.inc766
-rwxr-xr-xtestautomation/global/tools/includes/optional/t_treelist_tools.inc485
-rw-r--r--testautomation/global/tools/includes/optional/t_ui_filters.inc131
-rw-r--r--testautomation/global/tools/includes/optional/t_user_info.inc56
-rwxr-xr-xtestautomation/global/tools/includes/optional/t_xml1.inc652
-rwxr-xr-xtestautomation/global/tools/includes/optional/t_xml2.inc492
-rw-r--r--testautomation/global/tools/includes/optional/t_xml_filter1.inc822
-rwxr-xr-xtestautomation/global/tools/includes/required/t_dir.inc291
-rwxr-xr-xtestautomation/global/tools/includes/required/t_doc1.inc453
-rwxr-xr-xtestautomation/global/tools/includes/required/t_doc2.inc387
-rwxr-xr-xtestautomation/global/tools/includes/required/t_files.inc770
-rwxr-xr-xtestautomation/global/tools/includes/required/t_filters.inc549
-rwxr-xr-xtestautomation/global/tools/includes/required/t_lists.inc599
-rwxr-xr-xtestautomation/global/tools/includes/required/t_menu.inc918
-rwxr-xr-xtestautomation/global/tools/includes/required/t_option.inc556
-rw-r--r--testautomation/global/tools/includes/required/t_option2.inc554
-rwxr-xr-xtestautomation/global/tools/includes/required/t_tools1.inc1148
-rwxr-xr-xtestautomation/global/tools/includes/required/t_tools2.inc762
-rwxr-xr-xtestautomation/global/tools/includes/required/t_tools3.inc1256
-rwxr-xr-xtestautomation/global/tools/resetoffice.bas75
-rwxr-xr-xtestautomation/global/tools/wintree.bas39
-rwxr-xr-xtestautomation/global/win/bars.win1402
-rwxr-xr-xtestautomation/global/win/dial_a_c.win294
-rwxr-xr-xtestautomation/global/win/dial_d_h.win587
-rwxr-xr-xtestautomation/global/win/dial_i_o.win455
-rwxr-xr-xtestautomation/global/win/dial_p_s.win396
-rwxr-xr-xtestautomation/global/win/dial_t_z.win332
-rwxr-xr-xtestautomation/global/win/dokument.win75
-rwxr-xr-xtestautomation/global/win/e_mathop.win202
-rwxr-xr-xtestautomation/global/win/edia_a_c.win478
-rwxr-xr-xtestautomation/global/win/edia_d_h.win508
-rwxr-xr-xtestautomation/global/win/edia_i_o.win303
-rw-r--r--testautomation/global/win/edia_p_s.win627
-rwxr-xr-xtestautomation/global/win/edia_t_z.win308
-rwxr-xr-xtestautomation/global/win/etab_a_d.win474
-rwxr-xr-xtestautomation/global/win/etab_e_g.win374
-rwxr-xr-xtestautomation/global/win/etab_h_o.win239
-rwxr-xr-xtestautomation/global/win/etab_p_s.win121
-rwxr-xr-xtestautomation/global/win/etab_t_z.win149
-rwxr-xr-xtestautomation/global/win/etoolbox.win61
-rwxr-xr-xtestautomation/global/win/mathop.win204
-rwxr-xr-xtestautomation/global/win/piloten.win74
-rwxr-xr-xtestautomation/global/win/reportdesigner.win86
-rwxr-xr-xtestautomation/global/win/spadmin.win107
-rwxr-xr-xtestautomation/global/win/sys_dial.win133
-rwxr-xr-xtestautomation/global/win/tab_a_d.win374
-rwxr-xr-xtestautomation/global/win/tab_e_g.win302
-rwxr-xr-xtestautomation/global/win/tab_h_o.win489
-rwxr-xr-xtestautomation/global/win/tab_p_s.win287
-rwxr-xr-xtestautomation/global/win/tab_t_z.win401
-rwxr-xr-xtestautomation/global/win/w_autop.win29
-rw-r--r--testautomation/graphics/optional/d_export_graphic_a.bas74
-rw-r--r--testautomation/graphics/optional/d_export_graphic_b.bas73
-rw-r--r--testautomation/graphics/optional/export_graphic_a.bas73
-rw-r--r--testautomation/graphics/optional/export_graphic_b.bas73
-rw-r--r--testautomation/graphics/optional/g_accessability.bas60
-rw-r--r--testautomation/graphics/optional/g_area.bas57
-rw-r--r--testautomation/graphics/optional/g_arrangealign.bas79
-rw-r--r--testautomation/graphics/optional/g_autocorrection.bas71
-rw-r--r--testautomation/graphics/optional/g_character.bas66
-rw-r--r--testautomation/graphics/optional/g_clipboard.bas76
-rw-r--r--testautomation/graphics/optional/g_clipexport.bas68
-rw-r--r--testautomation/graphics/optional/g_convertto.bas73
-rw-r--r--testautomation/graphics/optional/g_crossfading.bas57
-rw-r--r--testautomation/graphics/optional/g_customshapes.bas59
-rw-r--r--testautomation/graphics/optional/g_demoguide.bas56
-rw-r--r--testautomation/graphics/optional/g_dimensions.bas55
-rw-r--r--testautomation/graphics/optional/g_edit.bas69
-rw-r--r--testautomation/graphics/optional/g_export_html.bas62
-rw-r--r--testautomation/graphics/optional/g_findreplace.bas60
-rw-r--r--testautomation/graphics/optional/g_format.bas70
-rw-r--r--testautomation/graphics/optional/g_group.bas57
-rw-r--r--testautomation/graphics/optional/g_imagemap.bas58
-rw-r--r--testautomation/graphics/optional/g_insert.bas90
-rw-r--r--testautomation/graphics/optional/g_line.bas58
-rw-r--r--testautomation/graphics/optional/g_load_save.bas89
-rw-r--r--testautomation/graphics/optional/g_mediaplayer.bas56
-rw-r--r--testautomation/graphics/optional/g_navigator.bas64
-rw-r--r--testautomation/graphics/optional/g_ole.bas61
-rw-r--r--testautomation/graphics/optional/g_paneview.bas62
-rw-r--r--testautomation/graphics/optional/g_paragraph.bas56
-rw-r--r--testautomation/graphics/optional/g_savepictureas.bas65
-rw-r--r--testautomation/graphics/optional/g_shaddow.bas60
-rw-r--r--testautomation/graphics/optional/g_slidelayer.bas69
-rw-r--r--testautomation/graphics/optional/g_spellcheck.bas68
-rw-r--r--testautomation/graphics/optional/g_stylist.bas99
-rw-r--r--testautomation/graphics/optional/g_tables.bas65
-rw-r--r--testautomation/graphics/optional/g_toolbars.bas69
-rw-r--r--testautomation/graphics/optional/g_tools.bas69
-rw-r--r--testautomation/graphics/optional/g_zoom.bas57
-rw-r--r--testautomation/graphics/optional/gallery.bas65
-rw-r--r--testautomation/graphics/optional/gallery2.bas63
-rw-r--r--testautomation/graphics/optional/i_animation.bas52
-rw-r--r--testautomation/graphics/optional/i_headerfooter.bas54
-rw-r--r--testautomation/graphics/optional/i_only_updt_1.bas77
-rw-r--r--testautomation/graphics/optional/i_only_updt_2.bas76
-rw-r--r--testautomation/graphics/optional/i_pengine.bas78
-rw-r--r--testautomation/graphics/optional/i_saveloadlayout.bas56
-rw-r--r--testautomation/graphics/optional/i_shape.bas56
-rw-r--r--testautomation/graphics/optional/i_slidecopy.bas62
-rw-r--r--testautomation/graphics/optional/i_slideshow.bas92
-rw-r--r--testautomation/graphics/optional/i_us_presentation.bas64
-rw-r--r--testautomation/graphics/optional/i_view.bas60
-rw-r--r--testautomation/graphics/optional/includes/draw/d_002_.inc109
-rw-r--r--testautomation/graphics/optional/includes/draw/d_003_.inc82
-rw-r--r--testautomation/graphics/optional/includes/draw/d_005_.inc51
-rw-r--r--testautomation/graphics/optional/includes/draw/d_007.inc47
-rw-r--r--testautomation/graphics/optional/includes/global/export_graphic.inc553
-rw-r--r--testautomation/graphics/optional/includes/global/export_graphic_2.inc1520
-rw-r--r--testautomation/graphics/optional/includes/global/g_accessability.inc297
-rw-r--r--testautomation/graphics/optional/includes/global/g_area.inc407
-rw-r--r--testautomation/graphics/optional/includes/global/g_arrangealign.inc309
-rw-r--r--testautomation/graphics/optional/includes/global/g_autocorrection.inc460
-rw-r--r--testautomation/graphics/optional/includes/global/g_character.inc714
-rw-r--r--testautomation/graphics/optional/includes/global/g_clipboard.inc469
-rw-r--r--testautomation/graphics/optional/includes/global/g_clipexport.inc490
-rw-r--r--testautomation/graphics/optional/includes/global/g_clipexport2.inc429
-rw-r--r--testautomation/graphics/optional/includes/global/g_clipexport3.inc729
-rw-r--r--testautomation/graphics/optional/includes/global/g_convertto.inc369
-rw-r--r--testautomation/graphics/optional/includes/global/g_crossfading.inc267
-rw-r--r--testautomation/graphics/optional/includes/global/g_customshapes.inc848
-rw-r--r--testautomation/graphics/optional/includes/global/g_demoguide.inc501
-rw-r--r--testautomation/graphics/optional/includes/global/g_dimensions.inc116
-rw-r--r--testautomation/graphics/optional/includes/global/g_edit.inc294
-rw-r--r--testautomation/graphics/optional/includes/global/g_export_html.inc757
-rw-r--r--testautomation/graphics/optional/includes/global/g_find_replace.inc363
-rw-r--r--testautomation/graphics/optional/includes/global/g_format.inc1253
-rw-r--r--testautomation/graphics/optional/includes/global/g_group.inc107
-rw-r--r--testautomation/graphics/optional/includes/global/g_imagemap.inc159
-rw-r--r--testautomation/graphics/optional/includes/global/g_insert.inc1227
-rw-r--r--testautomation/graphics/optional/includes/global/g_line.inc533
-rw-r--r--testautomation/graphics/optional/includes/global/g_load_save.inc783
-rw-r--r--testautomation/graphics/optional/includes/global/g_mediaplayer.inc256
-rw-r--r--testautomation/graphics/optional/includes/global/g_navigator.inc309
-rw-r--r--testautomation/graphics/optional/includes/global/g_ole.inc458
-rw-r--r--testautomation/graphics/optional/includes/global/g_paneview.inc535
-rw-r--r--testautomation/graphics/optional/includes/global/g_paragraph.inc211
-rw-r--r--testautomation/graphics/optional/includes/global/g_savepictureas.inc773
-rw-r--r--testautomation/graphics/optional/includes/global/g_shaddow.inc513
-rw-r--r--testautomation/graphics/optional/includes/global/g_slidelayer.inc92
-rw-r--r--testautomation/graphics/optional/includes/global/g_spellcheck.inc917
-rw-r--r--testautomation/graphics/optional/includes/global/g_stylist.inc1020
-rw-r--r--testautomation/graphics/optional/includes/global/g_tables.inc583
-rw-r--r--testautomation/graphics/optional/includes/global/g_toolbars.inc358
-rw-r--r--testautomation/graphics/optional/includes/global/g_tools.inc582
-rw-r--r--testautomation/graphics/optional/includes/global/g_zoom.inc133
-rw-r--r--testautomation/graphics/optional/includes/global/gallery.inc954
-rw-r--r--testautomation/graphics/optional/includes/global/gallery2.inc258
-rw-r--r--testautomation/graphics/optional/includes/global/id_001.inc725
-rw-r--r--testautomation/graphics/optional/includes/global/id_002.inc440
-rw-r--r--testautomation/graphics/optional/includes/global/id_003.inc264
-rw-r--r--testautomation/graphics/optional/includes/global/id_004.inc370
-rw-r--r--testautomation/graphics/optional/includes/global/id_005.inc808
-rw-r--r--testautomation/graphics/optional/includes/global/id_006.inc362
-rw-r--r--testautomation/graphics/optional/includes/global/id_007.inc426
-rw-r--r--testautomation/graphics/optional/includes/global/id_008.inc71
-rw-r--r--testautomation/graphics/optional/includes/global/id_009.inc243
-rw-r--r--testautomation/graphics/optional/includes/global/id_011.inc995
-rw-r--r--testautomation/graphics/optional/includes/impress/i_animation.inc187
-rw-r--r--testautomation/graphics/optional/includes/impress/i_headerfooter.inc685
-rw-r--r--testautomation/graphics/optional/includes/impress/i_pengine.inc762
-rw-r--r--testautomation/graphics/optional/includes/impress/i_pengine1.inc1356
-rw-r--r--testautomation/graphics/optional/includes/impress/i_pengine2.inc609
-rw-r--r--testautomation/graphics/optional/includes/impress/i_saveloadlayout.inc175
-rw-r--r--testautomation/graphics/optional/includes/impress/i_shape.inc89
-rw-r--r--testautomation/graphics/optional/includes/impress/i_slidecopy.inc979
-rw-r--r--testautomation/graphics/optional/includes/impress/i_slidelayer.inc522
-rw-r--r--testautomation/graphics/optional/includes/impress/i_slideshow.inc1236
-rw-r--r--testautomation/graphics/optional/includes/impress/i_slideshow2.inc1011
-rw-r--r--testautomation/graphics/optional/includes/impress/i_slideshow3.inc1103
-rw-r--r--testautomation/graphics/optional/includes/impress/i_stylist.inc157
-rw-r--r--testautomation/graphics/optional/includes/impress/i_us2_present.inc332
-rw-r--r--testautomation/graphics/optional/includes/impress/i_us_present.inc694
-rw-r--r--testautomation/graphics/optional/includes/impress/i_view.inc318
-rw-r--r--testautomation/graphics/optional/includes/impress/im_002_.inc52
-rw-r--r--testautomation/graphics/optional/includes/impress/im_003_.inc254
-rw-r--r--testautomation/graphics/optional/includes/impress/im_004_.inc58
-rw-r--r--testautomation/graphics/optional/includes/impress/im_005_.inc50
-rw-r--r--testautomation/graphics/optional/includes/impress/im_007_.inc693
-rw-r--r--testautomation/graphics/optional/includes/impress/im_011_.inc173
-rw-r--r--testautomation/graphics/optional/includes/impress/options.inc270
-rw-r--r--testautomation/graphics/required/d_opt.bas72
-rw-r--r--testautomation/graphics/required/d_updt.bas92
-rw-r--r--testautomation/graphics/required/i_opt.bas74
-rw-r--r--testautomation/graphics/required/i_updt_1.bas75
-rw-r--r--testautomation/graphics/required/i_updt_2.bas79
-rw-r--r--testautomation/graphics/required/includes/draw/d_002_.inc117
-rw-r--r--testautomation/graphics/required/includes/draw/d_003_.inc91
-rw-r--r--testautomation/graphics/required/includes/draw/d_005_.inc59
-rw-r--r--testautomation/graphics/required/includes/draw/d_007.inc55
-rw-r--r--testautomation/graphics/required/includes/global/gallery.inc987
-rw-r--r--testautomation/graphics/required/includes/global/gallery2.inc290
-rw-r--r--testautomation/graphics/required/includes/global/id_001.inc809
-rw-r--r--testautomation/graphics/required/includes/global/id_002.inc572
-rw-r--r--testautomation/graphics/required/includes/global/id_003.inc343
-rw-r--r--testautomation/graphics/required/includes/global/id_004.inc502
-rw-r--r--testautomation/graphics/required/includes/global/id_005.inc1013
-rw-r--r--testautomation/graphics/required/includes/global/id_006.inc475
-rw-r--r--testautomation/graphics/required/includes/global/id_007.inc563
-rw-r--r--testautomation/graphics/required/includes/global/id_008.inc75
-rw-r--r--testautomation/graphics/required/includes/global/id_009.inc282
-rw-r--r--testautomation/graphics/required/includes/global/id_011.inc1157
-rw-r--r--testautomation/graphics/required/includes/global/id_opt_1.inc1054
-rw-r--r--testautomation/graphics/required/includes/global/id_opt_2.inc133
-rw-r--r--testautomation/graphics/required/includes/impress/i_opt_1_.inc197
-rw-r--r--testautomation/graphics/required/includes/impress/im_002_.inc57
-rw-r--r--testautomation/graphics/required/includes/impress/im_003_.inc263
-rw-r--r--testautomation/graphics/required/includes/impress/im_004_.inc65
-rw-r--r--testautomation/graphics/required/includes/impress/im_005_.inc63
-rw-r--r--testautomation/graphics/required/includes/impress/im_007_.inc735
-rw-r--r--testautomation/graphics/required/includes/impress/im_011_.inc180
-rwxr-xr-xtestautomation/graphics/required/input/255chars.dxf40724
-rwxr-xr-xtestautomation/graphics/required/input/29secsound.wavbin0 -> 5204330 bytes
-rwxr-xr-xtestautomation/graphics/required/input/Blueprint.odgbin0 -> 34747 bytes
-rwxr-xr-xtestautomation/graphics/required/input/FormatConnector.odgbin0 -> 7205 bytes
-rwxr-xr-xtestautomation/graphics/required/input/FormatConnector.odpbin0 -> 8965 bytes
-rwxr-xr-xtestautomation/graphics/required/input/SaveAsPicture/SaveAsPicture.PSDbin0 -> 122042 bytes
-rwxr-xr-xtestautomation/graphics/required/input/SaveAsPicture/SaveAsPicture.bmpbin0 -> 1456904 bytes
-rwxr-xr-xtestautomation/graphics/required/input/SaveAsPicture/SaveAsPicture.cgmbin0 -> 10850 bytes
-rwxr-xr-xtestautomation/graphics/required/input/SaveAsPicture/SaveAsPicture.dxf1234
-rwxr-xr-xtestautomation/graphics/required/input/SaveAsPicture/SaveAsPicture.emfbin0 -> 1457144 bytes
-rwxr-xr-xtestautomation/graphics/required/input/SaveAsPicture/SaveAsPicture.epsbin0 -> 36862 bytes
-rwxr-xr-xtestautomation/graphics/required/input/SaveAsPicture/SaveAsPicture.gifbin0 -> 61548 bytes
-rwxr-xr-xtestautomation/graphics/required/input/SaveAsPicture/SaveAsPicture.giffbin0 -> 109193 bytes
-rwxr-xr-xtestautomation/graphics/required/input/SaveAsPicture/SaveAsPicture.jpegbin0 -> 10520 bytes
-rwxr-xr-xtestautomation/graphics/required/input/SaveAsPicture/SaveAsPicture.jpgbin0 -> 31861 bytes
-rwxr-xr-xtestautomation/graphics/required/input/SaveAsPicture/SaveAsPicture.metbin0 -> 1458043 bytes
-rwxr-xr-xtestautomation/graphics/required/input/SaveAsPicture/SaveAsPicture.pbmbin0 -> 61015 bytes
-rwxr-xr-xtestautomation/graphics/required/input/SaveAsPicture/SaveAsPicture.pcdbin0 -> 3944448 bytes
-rwxr-xr-xtestautomation/graphics/required/input/SaveAsPicture/SaveAsPicture.pctbin0 -> 152900 bytes
-rwxr-xr-xtestautomation/graphics/required/input/SaveAsPicture/SaveAsPicture.pcxbin0 -> 76917 bytes
-rwxr-xr-xtestautomation/graphics/required/input/SaveAsPicture/SaveAsPicture.pgm3
-rwxr-xr-xtestautomation/graphics/required/input/SaveAsPicture/SaveAsPicture.pngbin0 -> 57476 bytes
-rwxr-xr-xtestautomation/graphics/required/input/SaveAsPicture/SaveAsPicture.ppm218
-rwxr-xr-xtestautomation/graphics/required/input/SaveAsPicture/SaveAsPicture.rasbin0 -> 773076 bytes
-rwxr-xr-xtestautomation/graphics/required/input/SaveAsPicture/SaveAsPicture.sgfbin0 -> 23794 bytes
-rwxr-xr-xtestautomation/graphics/required/input/SaveAsPicture/SaveAsPicture.sgvbin0 -> 1212 bytes
-rwxr-xr-xtestautomation/graphics/required/input/SaveAsPicture/SaveAsPicture.svmbin0 -> 1456971 bytes
-rwxr-xr-xtestautomation/graphics/required/input/SaveAsPicture/SaveAsPicture.tgabin0 -> 318936 bytes
-rwxr-xr-xtestautomation/graphics/required/input/SaveAsPicture/SaveAsPicture.tifbin0 -> 222342 bytes
-rwxr-xr-xtestautomation/graphics/required/input/SaveAsPicture/SaveAsPicture.tiffbin0 -> 154374 bytes
-rwxr-xr-xtestautomation/graphics/required/input/SaveAsPicture/SaveAsPicture.wmfbin0 -> 486926 bytes
-rwxr-xr-xtestautomation/graphics/required/input/SaveAsPicture/SaveAsPicture.xbm29
-rwxr-xr-xtestautomation/graphics/required/input/SaveAsPicture/SaveAsPicture.xpm866
-rwxr-xr-xtestautomation/graphics/required/input/allshapes.odpbin0 -> 38069 bytes
-rwxr-xr-xtestautomation/graphics/required/input/allshapes2.odpbin0 -> 33965 bytes
-rwxr-xr-xtestautomation/graphics/required/input/blip.wavbin0 -> 176444 bytes
-rwxr-xr-xtestautomation/graphics/required/input/diashow.odpbin0 -> 233833 bytes
-rwxr-xr-xtestautomation/graphics/required/input/dotNetOverview.pptbin0 -> 6485504 bytes
-rwxr-xr-xtestautomation/graphics/required/input/effects.odpbin0 -> 6174 bytes
-rwxr-xr-xtestautomation/graphics/required/input/einfg.ini14
-rwxr-xr-xtestautomation/graphics/required/input/engtext.odgbin0 -> 7980 bytes
-rwxr-xr-xtestautomation/graphics/required/input/engtext.odpbin0 -> 9878 bytes
-rwxr-xr-xtestautomation/graphics/required/input/export_graphic2.odpbin0 -> 1526400 bytes
-rwxr-xr-xtestautomation/graphics/required/input/export_graphic3.odgbin0 -> 186696 bytes
-rwxr-xr-xtestautomation/graphics/required/input/export_graphic3.odpbin0 -> 188029 bytes
-rwxr-xr-xtestautomation/graphics/required/input/frame1.htm16
-rwxr-xr-xtestautomation/graphics/required/input/gallery/gal_1.txt30
-rwxr-xr-xtestautomation/graphics/required/input/gallery/gal_31.txt30
-rwxr-xr-xtestautomation/graphics/required/input/gallery/gal_33.txt30
-rwxr-xr-xtestautomation/graphics/required/input/gallery/gal_34.txt30
-rwxr-xr-xtestautomation/graphics/required/input/gallery/gal_36.txt30
-rwxr-xr-xtestautomation/graphics/required/input/gallery/gal_39.txt30
-rwxr-xr-xtestautomation/graphics/required/input/gallery/gal_46.txt30
-rwxr-xr-xtestautomation/graphics/required/input/gallery/gal_48.txt30
-rwxr-xr-xtestautomation/graphics/required/input/gallery/gal_49.txt30
-rwxr-xr-xtestautomation/graphics/required/input/gallery/gal_55.txt30
-rwxr-xr-xtestautomation/graphics/required/input/gallery/gal_7.txt30
-rwxr-xr-xtestautomation/graphics/required/input/gallery/gal_81.txt29
-rwxr-xr-xtestautomation/graphics/required/input/gallery/gal_82.txt29
-rwxr-xr-xtestautomation/graphics/required/input/gallery/gal_86.txt29
-rwxr-xr-xtestautomation/graphics/required/input/gallery/gal_88.txt29
-rwxr-xr-xtestautomation/graphics/required/input/gallery/gal_oo_1.txt6
-rwxr-xr-xtestautomation/graphics/required/input/gallery/gal_oo_49.txt6
-rwxr-xr-xtestautomation/graphics/required/input/gallery/gal_oo_50.txt6
-rwxr-xr-xtestautomation/graphics/required/input/gallery/gal_oo_84.txt6
-rwxr-xr-xtestautomation/graphics/required/input/generic_de.pptbin0 -> 741376 bytes
-rwxr-xr-xtestautomation/graphics/required/input/graphicexport.odgbin0 -> 115305 bytes
-rwxr-xr-xtestautomation/graphics/required/input/graphicexport.odpbin0 -> 852873 bytes
-rwxr-xr-xtestautomation/graphics/required/input/graphicexport_pdf.odgbin0 -> 120020 bytes
-rwxr-xr-xtestautomation/graphics/required/input/graphicexport_pdf.odpbin0 -> 1676079 bytes
-rwxr-xr-xtestautomation/graphics/required/input/gridtst.odgbin0 -> 7223 bytes
-rwxr-xr-xtestautomation/graphics/required/input/gridtst.odpbin0 -> 8449 bytes
-rwxr-xr-xtestautomation/graphics/required/input/gridtst.sxdbin0 -> 5347 bytes
-rwxr-xr-xtestautomation/graphics/required/input/gridtst.sxibin0 -> 6519 bytes
-rwxr-xr-xtestautomation/graphics/required/input/i_us_large.jpgbin0 -> 6483577 bytes
-rwxr-xr-xtestautomation/graphics/required/input/imsusmap.cgmbin0 -> 15536 bytes
-rwxr-xr-xtestautomation/graphics/required/input/leer.odgbin0 -> 7108 bytes
-rwxr-xr-xtestautomation/graphics/required/input/leer.odpbin0 -> 9050 bytes
-rwxr-xr-xtestautomation/graphics/required/input/ole.bmpbin0 -> 2672794 bytes
-rwxr-xr-xtestautomation/graphics/required/input/oletest.odgbin0 -> 32898 bytes
-rwxr-xr-xtestautomation/graphics/required/input/outlinefromwriter.odtbin0 -> 7818 bytes
-rwxr-xr-xtestautomation/graphics/required/input/passwo52.sdabin0 -> 30720 bytes
-rwxr-xr-xtestautomation/graphics/required/input/passwo52.sddbin0 -> 32256 bytes
-rwxr-xr-xtestautomation/graphics/required/input/recht_1.odgbin0 -> 10261 bytes
-rwxr-xr-xtestautomation/graphics/required/input/recht_1.odpbin0 -> 13772 bytes
-rwxr-xr-xtestautomation/graphics/required/input/recht_3.odgbin0 -> 10506 bytes
-rw-r--r--testautomation/graphics/required/input/recht_3.odpbin0 -> 12737 bytes
-rwxr-xr-xtestautomation/graphics/required/input/recht_31.odgbin0 -> 9606 bytes
-rw-r--r--testautomation/graphics/required/input/recht_31.odpbin0 -> 14160 bytes
-rwxr-xr-xtestautomation/graphics/required/input/recht_33.odgbin0 -> 9773 bytes
-rw-r--r--testautomation/graphics/required/input/recht_33.odpbin0 -> 13251 bytes
-rwxr-xr-xtestautomation/graphics/required/input/recht_34.odgbin0 -> 9659 bytes
-rw-r--r--testautomation/graphics/required/input/recht_34.odpbin0 -> 19479 bytes
-rwxr-xr-xtestautomation/graphics/required/input/recht_36.odgbin0 -> 9896 bytes
-rw-r--r--testautomation/graphics/required/input/recht_36.odpbin0 -> 14155 bytes
-rwxr-xr-xtestautomation/graphics/required/input/recht_39.odgbin0 -> 9123 bytes
-rw-r--r--testautomation/graphics/required/input/recht_39.odpbin0 -> 12338 bytes
-rwxr-xr-xtestautomation/graphics/required/input/recht_46.odgbin0 -> 11019 bytes
-rw-r--r--testautomation/graphics/required/input/recht_46.odpbin0 -> 19434 bytes
-rwxr-xr-xtestautomation/graphics/required/input/recht_48.odgbin0 -> 10064 bytes
-rw-r--r--testautomation/graphics/required/input/recht_48.odpbin0 -> 13346 bytes
-rwxr-xr-xtestautomation/graphics/required/input/recht_48.sxdbin0 -> 6627 bytes
-rwxr-xr-xtestautomation/graphics/required/input/recht_48.sxibin0 -> 7578 bytes
-rwxr-xr-xtestautomation/graphics/required/input/recht_49.odgbin0 -> 11187 bytes
-rw-r--r--testautomation/graphics/required/input/recht_49.odpbin0 -> 12783 bytes
-rwxr-xr-xtestautomation/graphics/required/input/recht_50.odgbin0 -> 8882 bytes
-rwxr-xr-xtestautomation/graphics/required/input/recht_50.odpbin0 -> 10544 bytes
-rwxr-xr-xtestautomation/graphics/required/input/recht_55.odgbin0 -> 10281 bytes
-rw-r--r--testautomation/graphics/required/input/recht_55.odpbin0 -> 18380 bytes
-rwxr-xr-xtestautomation/graphics/required/input/recht_81.odgbin0 -> 18373 bytes
-rwxr-xr-xtestautomation/graphics/required/input/recht_81.odpbin0 -> 10934 bytes
-rwxr-xr-xtestautomation/graphics/required/input/rightfont.odgbin0 -> 7647 bytes
-rwxr-xr-xtestautomation/graphics/required/input/rightfont.odpbin0 -> 9412 bytes
-rwxr-xr-xtestautomation/graphics/required/input/rightfont1.odgbin0 -> 7679 bytes
-rwxr-xr-xtestautomation/graphics/required/input/rightfont1.odpbin0 -> 9444 bytes
-rwxr-xr-xtestautomation/graphics/required/input/rightfont33.odgbin0 -> 7682 bytes
-rwxr-xr-xtestautomation/graphics/required/input/rightfont33.odpbin0 -> 9448 bytes
-rwxr-xr-xtestautomation/graphics/required/input/rightfont34.odgbin0 -> 7681 bytes
-rwxr-xr-xtestautomation/graphics/required/input/rightfont34.odpbin0 -> 9445 bytes
-rwxr-xr-xtestautomation/graphics/required/input/rightfont36.odgbin0 -> 7682 bytes
-rwxr-xr-xtestautomation/graphics/required/input/rightfont36.odpbin0 -> 9446 bytes
-rwxr-xr-xtestautomation/graphics/required/input/rightfont39.odgbin0 -> 7680 bytes
-rwxr-xr-xtestautomation/graphics/required/input/rightfont39.odpbin0 -> 9445 bytes
-rwxr-xr-xtestautomation/graphics/required/input/rightfont46.odgbin0 -> 7682 bytes
-rwxr-xr-xtestautomation/graphics/required/input/rightfont46.odpbin0 -> 9446 bytes
-rwxr-xr-xtestautomation/graphics/required/input/rightfont48.odgbin0 -> 7717 bytes
-rwxr-xr-xtestautomation/graphics/required/input/rightfont48.odpbin0 -> 9476 bytes
-rwxr-xr-xtestautomation/graphics/required/input/rightfont49.odgbin0 -> 7681 bytes
-rwxr-xr-xtestautomation/graphics/required/input/rightfont49.odpbin0 -> 9447 bytes
-rwxr-xr-xtestautomation/graphics/required/input/rightfont50.odpbin0 -> 8746 bytes
-rwxr-xr-xtestautomation/graphics/required/input/rightfont55.odgbin0 -> 7681 bytes
-rwxr-xr-xtestautomation/graphics/required/input/rightfont55.odpbin0 -> 9446 bytes
-rwxr-xr-xtestautomation/graphics/required/input/sample.movbin0 -> 72490 bytes
-rwxr-xr-xtestautomation/graphics/required/input/screen_white.wmfbin0 -> 37252 bytes
-rwxr-xr-xtestautomation/graphics/required/input/shapes/1Lines.pptbin0 -> 13312 bytes
-rwxr-xr-xtestautomation/graphics/required/input/shapes/2Connectors.pptbin0 -> 24064 bytes
-rwxr-xr-xtestautomation/graphics/required/input/shapes/3BasicShapes.pptbin0 -> 42496 bytes
-rwxr-xr-xtestautomation/graphics/required/input/shapes/4BlockArrows.pptbin0 -> 36352 bytes
-rwxr-xr-xtestautomation/graphics/required/input/shapes/5Flowchart.pptbin0 -> 36352 bytes
-rwxr-xr-xtestautomation/graphics/required/input/shapes/6StarsBanners.pptbin0 -> 28160 bytes
-rwxr-xr-xtestautomation/graphics/required/input/shapes/7Callouts.pptbin0 -> 33792 bytes
-rwxr-xr-xtestautomation/graphics/required/input/shapes/8ActionButtons.pptbin0 -> 26624 bytes
-rwxr-xr-xtestautomation/graphics/required/input/silben_1.odgbin0 -> 7262 bytes
-rwxr-xr-xtestautomation/graphics/required/input/silben_1.odpbin0 -> 9741 bytes
-rwxr-xr-xtestautomation/graphics/required/input/silben_31.odgbin0 -> 7494 bytes
-rwxr-xr-xtestautomation/graphics/required/input/silben_31.odpbin0 -> 9194 bytes
-rwxr-xr-xtestautomation/graphics/required/input/silben_31.sxdbin0 -> 8237 bytes
-rwxr-xr-xtestautomation/graphics/required/input/silben_31.sxibin0 -> 9899 bytes
-rwxr-xr-xtestautomation/graphics/required/input/silben_33.odgbin0 -> 7313 bytes
-rwxr-xr-xtestautomation/graphics/required/input/silben_33.odpbin0 -> 9123 bytes
-rwxr-xr-xtestautomation/graphics/required/input/silben_34.odgbin0 -> 7911 bytes
-rwxr-xr-xtestautomation/graphics/required/input/silben_34.odpbin0 -> 8428 bytes
-rwxr-xr-xtestautomation/graphics/required/input/silben_36.odgbin0 -> 7241 bytes
-rwxr-xr-xtestautomation/graphics/required/input/silben_36.odpbin0 -> 9732 bytes
-rwxr-xr-xtestautomation/graphics/required/input/silben_39.odgbin0 -> 7269 bytes
-rwxr-xr-xtestautomation/graphics/required/input/silben_39.odpbin0 -> 9087 bytes
-rwxr-xr-xtestautomation/graphics/required/input/silben_46.odgbin0 -> 7197 bytes
-rwxr-xr-xtestautomation/graphics/required/input/silben_46.odpbin0 -> 8445 bytes
-rwxr-xr-xtestautomation/graphics/required/input/silben_48.odgbin0 -> 7268 bytes
-rwxr-xr-xtestautomation/graphics/required/input/silben_48.odpbin0 -> 8454 bytes
-rwxr-xr-xtestautomation/graphics/required/input/silben_49.odgbin0 -> 7303 bytes
-rwxr-xr-xtestautomation/graphics/required/input/silben_49.odpbin0 -> 9143 bytes
-rwxr-xr-xtestautomation/graphics/required/input/silben_50.odgbin0 -> 8222 bytes
-rwxr-xr-xtestautomation/graphics/required/input/silben_50.odpbin0 -> 9927 bytes
-rwxr-xr-xtestautomation/graphics/required/input/silben_55.odgbin0 -> 7158 bytes
-rwxr-xr-xtestautomation/graphics/required/input/silben_55.odpbin0 -> 8992 bytes
-rwxr-xr-xtestautomation/graphics/required/input/spellb_1.odgbin0 -> 13092 bytes
-rwxr-xr-xtestautomation/graphics/required/input/spellb_1.odpbin0 -> 16509 bytes
-rwxr-xr-xtestautomation/graphics/required/input/spellb_1.txt152
-rwxr-xr-xtestautomation/graphics/required/input/spellb_31.odgbin0 -> 10548 bytes
-rwxr-xr-xtestautomation/graphics/required/input/spellb_31.odpbin0 -> 15188 bytes
-rwxr-xr-xtestautomation/graphics/required/input/spellb_31.txt188
-rwxr-xr-xtestautomation/graphics/required/input/spellb_33.odgbin0 -> 10054 bytes
-rwxr-xr-xtestautomation/graphics/required/input/spellb_33.odpbin0 -> 13618 bytes
-rwxr-xr-xtestautomation/graphics/required/input/spellb_33.txt152
-rwxr-xr-xtestautomation/graphics/required/input/spellb_34.odgbin0 -> 10624 bytes
-rwxr-xr-xtestautomation/graphics/required/input/spellb_34.odpbin0 -> 15499 bytes
-rwxr-xr-xtestautomation/graphics/required/input/spellb_34.txt200
-rwxr-xr-xtestautomation/graphics/required/input/spellb_36.odgbin0 -> 11043 bytes
-rwxr-xr-xtestautomation/graphics/required/input/spellb_36.odpbin0 -> 15528 bytes
-rwxr-xr-xtestautomation/graphics/required/input/spellb_36.txt184
-rwxr-xr-xtestautomation/graphics/required/input/spellb_39.odgbin0 -> 14115 bytes
-rwxr-xr-xtestautomation/graphics/required/input/spellb_39.odpbin0 -> 18441 bytes
-rwxr-xr-xtestautomation/graphics/required/input/spellb_39.txt221
-rwxr-xr-xtestautomation/graphics/required/input/spellb_49.odgbin0 -> 13466 bytes
-rwxr-xr-xtestautomation/graphics/required/input/spellb_49.odpbin0 -> 16938 bytes
-rwxr-xr-xtestautomation/graphics/required/input/spellb_49.txt152
-rwxr-xr-xtestautomation/graphics/required/input/spellb_50.odgbin0 -> 10752 bytes
-rwxr-xr-xtestautomation/graphics/required/input/spellb_50.odpbin0 -> 14148 bytes
-rwxr-xr-xtestautomation/graphics/required/input/spellb_50.txt202
-rwxr-xr-xtestautomation/graphics/required/input/spellb_55.odgbin0 -> 10541 bytes
-rwxr-xr-xtestautomation/graphics/required/input/spellb_55.odpbin0 -> 15187 bytes
-rwxr-xr-xtestautomation/graphics/required/input/spellb_55.txt199
-rwxr-xr-xtestautomation/graphics/required/input/spellb_7.odgbin0 -> 8841 bytes
-rwxr-xr-xtestautomation/graphics/required/input/spellb_7.odpbin0 -> 13868 bytes
-rwxr-xr-xtestautomation/graphics/required/input/spellb_7.txt56
-rwxr-xr-xtestautomation/graphics/required/input/spellb_82.odgbin0 -> 14978 bytes
-rwxr-xr-xtestautomation/graphics/required/input/spellb_82.odpbin0 -> 19689 bytes
-rwxr-xr-xtestautomation/graphics/required/input/spellb_82.txt196
-rwxr-xr-xtestautomation/graphics/required/input/spellb_86.odgbin0 -> 14680 bytes
-rwxr-xr-xtestautomation/graphics/required/input/spellb_86.odpbin0 -> 16580 bytes
-rwxr-xr-xtestautomation/graphics/required/input/spellb_86.txt214
-rwxr-xr-xtestautomation/graphics/required/input/spellb_88.odgbin0 -> 15497 bytes
-rwxr-xr-xtestautomation/graphics/required/input/spellb_88.odpbin0 -> 20549 bytes
-rwxr-xr-xtestautomation/graphics/required/input/spellb_88.txt214
-rwxr-xr-xtestautomation/graphics/required/input/tbo_alf_.odgbin0 -> 243716 bytes
-rwxr-xr-xtestautomation/graphics/required/input/tbo_alf_.odpbin0 -> 173471 bytes
-rwxr-xr-xtestautomation/graphics/required/input/tchinese.odgbin0 -> 9813 bytes
-rwxr-xr-xtestautomation/graphics/required/input/tchinese.odpbin0 -> 10574 bytes
-rw-r--r--testautomation/graphics/tools/id_tools.inc1504
-rw-r--r--testautomation/graphics/tools/id_tools_2.inc995
-rwxr-xr-xtestautomation/graphics/tools/locale_1.txt134
-rw-r--r--testautomation/graphics/tools/makeLokaleTxt.bas292
-rwxr-xr-xtestautomation/math/optional/includes/m_101_.inc710
-rw-r--r--testautomation/math/optional/includes/m_105.inc690
-rwxr-xr-xtestautomation/math/optional/includes/m_106_.inc65
-rwxr-xr-xtestautomation/math/optional/input/101_1.sxmbin0 -> 3284 bytes
-rwxr-xr-xtestautomation/math/optional/input/101_2.sxwbin0 -> 20478 bytes
-rwxr-xr-xtestautomation/math/optional/input/filter/math.sxwbin0 -> 5399 bytes
-rwxr-xr-xtestautomation/math/optional/input/filter/precal_test.docbin0 -> 143360 bytes
-rwxr-xr-xtestautomation/math/optional/input/filter/quantum_field.docbin0 -> 219648 bytes
-rwxr-xr-xtestautomation/math/optional/input/filter/seventh_grade.docbin0 -> 244224 bytes
-rwxr-xr-xtestautomation/math/optional/m_lvl1.bas60
-rwxr-xr-xtestautomation/math/required/includes/m_001_.inc687
-rwxr-xr-xtestautomation/math/required/includes/m_002_.inc132
-rwxr-xr-xtestautomation/math/required/includes/m_003_.inc177
-rwxr-xr-xtestautomation/math/required/includes/m_004_.inc286
-rwxr-xr-xtestautomation/math/required/includes/m_005_.inc313
-rwxr-xr-xtestautomation/math/required/includes/m_006_.inc53
-rwxr-xr-xtestautomation/math/required/includes/m_007_.inc274
-rwxr-xr-xtestautomation/math/required/includes/m_010_.inc670
-rwxr-xr-xtestautomation/math/required/includes/m_020_.inc72
-rwxr-xr-xtestautomation/math/required/input/ShortLicense.oxtbin0 -> 9406 bytes
-rw-r--r--testautomation/math/required/input/test.odtbin0 -> 6725 bytes
-rwxr-xr-xtestautomation/math/required/input/unknown-dependency.oxtbin0 -> 1633 bytes
-rwxr-xr-xtestautomation/math/required/m_updt.bas81
-rw-r--r--testautomation/prj/build.lst1
-rw-r--r--testautomation/prj/d.lst4
-rwxr-xr-xtestautomation/spreadsheet/optional/c_arrayconstants.bas61
-rwxr-xr-xtestautomation/spreadsheet/optional/c_getpivotdata.bas62
-rwxr-xr-xtestautomation/spreadsheet/optional/c_import_general.bas87
-rwxr-xr-xtestautomation/spreadsheet/optional/c_namedrange.bas66
-rwxr-xr-xtestautomation/spreadsheet/optional/c_print_scale.bas53
-rwxr-xr-xtestautomation/spreadsheet/optional/c_printrange.bas67
-rwxr-xr-xtestautomation/spreadsheet/optional/c_so7_pp1.bas69
-rw-r--r--testautomation/spreadsheet/optional/c_solver.bas62
-rw-r--r--testautomation/spreadsheet/optional/c_validity.bas87
-rwxr-xr-xtestautomation/spreadsheet/optional/includes/arrayconstants/c_arrayconstants.inc316
-rwxr-xr-xtestautomation/spreadsheet/optional/includes/getpivotdata/c_getpivotdata.inc326
-rwxr-xr-xtestautomation/spreadsheet/optional/includes/import_general/c_import_general.inc196
-rwxr-xr-xtestautomation/spreadsheet/optional/includes/namedrange/c_namedrange.inc188
-rwxr-xr-xtestautomation/spreadsheet/optional/includes/printrange/c_printrange.inc923
-rwxr-xr-xtestautomation/spreadsheet/optional/includes/printscale/c_print_scale.inc299
-rw-r--r--testautomation/spreadsheet/optional/includes/so7pp1/c_so7_pp1_ibis.inc221
-rw-r--r--testautomation/spreadsheet/optional/includes/so7pp1/c_so7_pp1_iz.inc211
-rw-r--r--testautomation/spreadsheet/optional/includes/solver/c_solver.inc225
-rw-r--r--testautomation/spreadsheet/optional/includes/validity/c_validity.inc378
-rwxr-xr-xtestautomation/spreadsheet/optional/input/111099.xlsbin0 -> 24064 bytes
-rwxr-xr-xtestautomation/spreadsheet/optional/input/111158.xlsbin0 -> 67584 bytes
-rw-r--r--testautomation/spreadsheet/optional/input/Solver_testdoc01.odsbin0 -> 10326 bytes
-rwxr-xr-xtestautomation/spreadsheet/optional/input/arrayconstants.xlsbin0 -> 74752 bytes
-rwxr-xr-xtestautomation/spreadsheet/optional/input/datapilot.odsbin0 -> 13211 bytes
-rwxr-xr-xtestautomation/spreadsheet/optional/input/getpivotdata2.xlsbin0 -> 13824 bytes
-rwxr-xr-xtestautomation/spreadsheet/optional/input/loadsave/bugdocs/1024.odsbin0 -> 12880 bytes
-rwxr-xr-xtestautomation/spreadsheet/optional/input/loadsave/common/csv.csv7
-rwxr-xr-xtestautomation/spreadsheet/optional/input/loadsave/common/dbase.dbfbin0 -> 1166 bytes
-rwxr-xr-xtestautomation/spreadsheet/optional/input/loadsave/common/dbase.dbt0
-rwxr-xr-xtestautomation/spreadsheet/optional/input/loadsave/corel/qpro6.wb2bin0 -> 7290 bytes
-rwxr-xr-xtestautomation/spreadsheet/optional/input/loadsave/lotus/123toexcel.xlsbin0 -> 7168 bytes
-rwxr-xr-xtestautomation/spreadsheet/optional/input/loadsave/lotus/lotus123.123bin0 -> 13540 bytes
-rwxr-xr-xtestautomation/spreadsheet/optional/input/loadsave/lotus/lotuswk1.wk1bin0 -> 3999 bytes
-rwxr-xr-xtestautomation/spreadsheet/optional/input/loadsave/lotus/lotuswks.wksbin0 -> 6902 bytes
-rwxr-xr-xtestautomation/spreadsheet/optional/input/loadsave/microsoft/dif.DIF110
-rwxr-xr-xtestautomation/spreadsheet/optional/input/loadsave/microsoft/excel2.xlsbin0 -> 31481 bytes
-rwxr-xr-xtestautomation/spreadsheet/optional/input/loadsave/microsoft/excel3.xlsbin0 -> 23510 bytes
-rwxr-xr-xtestautomation/spreadsheet/optional/input/loadsave/microsoft/excel4.xlsbin0 -> 12517 bytes
-rwxr-xr-xtestautomation/spreadsheet/optional/input/loadsave/microsoft/excel95.xlsbin0 -> 60416 bytes
-rwxr-xr-xtestautomation/spreadsheet/optional/input/loadsave/microsoft/excel95tmpl.xltbin0 -> 34816 bytes
-rwxr-xr-xtestautomation/spreadsheet/optional/input/loadsave/microsoft/excel97.xlsbin0 -> 51712 bytes
-rwxr-xr-xtestautomation/spreadsheet/optional/input/loadsave/microsoft/excel97tmpl.xltbin0 -> 51712 bytes
-rwxr-xr-xtestautomation/spreadsheet/optional/input/loadsave/microsoft/excelxml.xml254
-rwxr-xr-xtestautomation/spreadsheet/optional/input/loadsave/microsoft/ms_excel_2007_binary.xlsbbin0 -> 8797 bytes
-rwxr-xr-xtestautomation/spreadsheet/optional/input/loadsave/microsoft/ms_excel_2007_xml.xlsxbin0 -> 8210 bytes
-rwxr-xr-xtestautomation/spreadsheet/optional/input/loadsave/microsoft/ms_excel_2007_xml_macroenabled.xlsmbin0 -> 8243 bytes
-rwxr-xr-xtestautomation/spreadsheet/optional/input/loadsave/microsoft/ms_excel_2007_xml_template.xltxbin0 -> 8218 bytes
-rwxr-xr-xtestautomation/spreadsheet/optional/input/loadsave/microsoft/ms_excel_2007_xml_template_macroenabled.xltmbin0 -> 8246 bytes
-rwxr-xr-xtestautomation/spreadsheet/optional/input/loadsave/microsoft/sylk.slk1
-rwxr-xr-xtestautomation/spreadsheet/optional/input/loadsave/preselected_filter/rtf.rtf218
-rwxr-xr-xtestautomation/spreadsheet/optional/input/loadsave/preselected_filter/txt.txt7
-rwxr-xr-xtestautomation/spreadsheet/optional/input/loadsave/sun/so1.sdcbin0 -> 80228 bytes
-rwxr-xr-xtestautomation/spreadsheet/optional/input/loadsave/sun/so3.sdcbin0 -> 29696 bytes
-rwxr-xr-xtestautomation/spreadsheet/optional/input/loadsave/sun/so3tmpl.vorbin0 -> 19456 bytes
-rwxr-xr-xtestautomation/spreadsheet/optional/input/loadsave/sun/so4.sdcbin0 -> 131584 bytes
-rwxr-xr-xtestautomation/spreadsheet/optional/input/loadsave/sun/so4tmpl.vorbin0 -> 24576 bytes
-rwxr-xr-xtestautomation/spreadsheet/optional/input/loadsave/sun/so5.sdcbin0 -> 24064 bytes
-rwxr-xr-xtestautomation/spreadsheet/optional/input/loadsave/sun/so5tmpl.vorbin0 -> 404480 bytes
-rwxr-xr-xtestautomation/spreadsheet/optional/input/loadsave/sun/so7.sxcbin0 -> 14926 bytes
-rwxr-xr-xtestautomation/spreadsheet/optional/input/loadsave/sun/so7tmpl.stcbin0 -> 11367 bytes
-rwxr-xr-xtestautomation/spreadsheet/optional/input/loadsave/sun/so8.odsbin0 -> 38161 bytes
-rwxr-xr-xtestautomation/spreadsheet/optional/input/loadsave/sun/so8tmpl.otsbin0 -> 37500 bytes
-rwxr-xr-xtestautomation/spreadsheet/optional/input/loadsave/tableimport/HTML_Doc_Numberformats_in_table.html107
-rwxr-xr-xtestautomation/spreadsheet/optional/input/loadsave/tableimport/HTML_Doc_Numberformats_in_table.rtf62
-rwxr-xr-xtestautomation/spreadsheet/optional/input/namedrange.sxcbin0 -> 6538 bytes
-rwxr-xr-xtestautomation/spreadsheet/optional/input/printrange.sxcbin0 -> 9648 bytes
-rwxr-xr-xtestautomation/spreadsheet/optional/input/printrange.xlsbin0 -> 41984 bytes
-rwxr-xr-xtestautomation/spreadsheet/optional/input/printranges_3defined.odsbin0 -> 13408 bytes
-rw-r--r--testautomation/spreadsheet/optional/input/stest_large.odsbin0 -> 23467 bytes
-rwxr-xr-xtestautomation/spreadsheet/optional/input/validity.odsbin0 -> 22633 bytes
-rwxr-xr-xtestautomation/spreadsheet/required/c_updt1.bas72
-rwxr-xr-xtestautomation/spreadsheet/required/c_updt2.bas75
-rwxr-xr-xtestautomation/spreadsheet/required/includes/c_upd_datamenu.inc1047
-rwxr-xr-xtestautomation/spreadsheet/required/includes/c_upd_editmenu.inc1024
-rwxr-xr-xtestautomation/spreadsheet/required/includes/c_upd_editmenu2.inc669
-rwxr-xr-xtestautomation/spreadsheet/required/includes/c_upd_filemenu.inc678
-rwxr-xr-xtestautomation/spreadsheet/required/includes/c_upd_formatmenu.inc947
-rwxr-xr-xtestautomation/spreadsheet/required/includes/c_upd_formatmenu2.inc825
-rwxr-xr-xtestautomation/spreadsheet/required/includes/c_upd_formatmenu3.inc1068
-rwxr-xr-xtestautomation/spreadsheet/required/includes/c_upd_helpmenu.inc119
-rwxr-xr-xtestautomation/spreadsheet/required/includes/c_upd_insertmenu.inc1313
-rwxr-xr-xtestautomation/spreadsheet/required/includes/c_upd_toolsmenu.inc979
-rwxr-xr-xtestautomation/spreadsheet/required/includes/c_upd_toolsmenu2.inc517
-rwxr-xr-xtestautomation/spreadsheet/required/includes/c_upd_viewmenu.inc395
-rwxr-xr-xtestautomation/spreadsheet/required/includes/c_upd_windowmenu.inc141
-rwxr-xr-xtestautomation/spreadsheet/required/input/Database_Refresh.odsbin0 -> 10588 bytes
-rw-r--r--testautomation/spreadsheet/required/input/DocwithMacro.odsbin0 -> 7765 bytes
-rw-r--r--testautomation/spreadsheet/required/input/HTML_Doc_Numberformats_in_table.html107
-rwxr-xr-xtestautomation/spreadsheet/required/input/datapilot.odsbin0 -> 12613 bytes
-rwxr-xr-xtestautomation/spreadsheet/required/input/english.odsbin0 -> 6384 bytes
-rwxr-xr-xtestautomation/spreadsheet/required/input/korean.odsbin0 -> 12224 bytes
-rwxr-xr-xtestautomation/spreadsheet/required/input/linkclient.odsbin0 -> 6185 bytes
-rwxr-xr-xtestautomation/spreadsheet/required/input/linkserver.odsbin0 -> 5995 bytes
-rwxr-xr-xtestautomation/spreadsheet/required/input/merge.odsbin0 -> 6349 bytes
-rwxr-xr-xtestautomation/spreadsheet/required/input/recentdocument.odsbin0 -> 6141 bytes
-rwxr-xr-xtestautomation/spreadsheet/required/input/tEditObject.odsbin0 -> 11589 bytes
-rwxr-xr-xtestautomation/spreadsheet/required/input/tFileOpen_CSV.csv3
-rwxr-xr-xtestautomation/spreadsheet/required/input/tFileOpen_DBF.dbfbin0 -> 1166 bytes
-rwxr-xr-xtestautomation/spreadsheet/required/input/tFileOpen_DBF.dbt0
-rwxr-xr-xtestautomation/spreadsheet/required/input/twoobjects.odsbin0 -> 7269 bytes
-rwxr-xr-xtestautomation/spreadsheet/required/input/twosheets.odsbin0 -> 6411 bytes
-rwxr-xr-xtestautomation/spreadsheet/tools/includes/c_cell_tools.inc102
-rwxr-xr-xtestautomation/spreadsheet/tools/includes/c_l10n_tools.inc217
-rwxr-xr-xtestautomation/spreadsheet/tools/includes/c_select_tools.inc232
-rwxr-xr-xtestautomation/spreadsheet/tools/includes/c_tool_l10n_mnomics.inc160
-rwxr-xr-xtestautomation/spreadsheet/tools/includes/c_tool_options.inc95
-rw-r--r--testautomation/spreadsheet/tools/includes/c_validity_tools.inc139
-rwxr-xr-xtestautomation/spreadsheet/tools/input/Errorcodes.odsbin0 -> 13154 bytes
-rwxr-xr-xtestautomation/spreadsheet/tools/input/Functionnames.odsbin0 -> 19172 bytes
-rwxr-xr-xtestautomation/tools/analyze/app.srs2807
-rwxr-xr-xtestautomation/tools/analyze/make_summary.pl127
-rwxr-xr-xtestautomation/tools/analyze/translate_res_file.pl241
-rwxr-xr-xtestautomation/tools/hid/cons.txt83
-rwxr-xr-xtestautomation/tools/hid/hid.bat2
-rwxr-xr-xtestautomation/tools/hid/hid.pl92
-rwxr-xr-xtestautomation/tools/hid/hid.sh2
-rwxr-xr-xtestautomation/tools/run_tests/run_tests.sh196
-rwxr-xr-xtestautomation/tools/run_tests/run_tests.vbs182
-rwxr-xr-xtestautomation/writer/optional/includes/CJKCTLDependency/CJKCTLDependency1.inc980
-rw-r--r--testautomation/writer/optional/includes/alternative_text/w_alternative_text.inc299
-rwxr-xr-xtestautomation/writer/optional/includes/autocorrection/w_autocorrect1.inc1446
-rwxr-xr-xtestautomation/writer/optional/includes/autocorrection/w_autocorrect2.inc474
-rwxr-xr-xtestautomation/writer/optional/includes/autotext/w_autotext.inc658
-rwxr-xr-xtestautomation/writer/optional/includes/calculate/w_calculate.inc463
-rwxr-xr-xtestautomation/writer/optional/includes/chinesetranslate/w_chinesetranslate1.inc409
-rwxr-xr-xtestautomation/writer/optional/includes/chinesetranslate/w_chinesetranslate2.inc454
-rwxr-xr-xtestautomation/writer/optional/includes/clipboard/clipbrd_func.inc447
-rwxr-xr-xtestautomation/writer/optional/includes/clipboard/w_210_.inc455
-rwxr-xr-xtestautomation/writer/optional/includes/clipboard/w_211_.inc540
-rwxr-xr-xtestautomation/writer/optional/includes/clipboard/w_212_.inc532
-rwxr-xr-xtestautomation/writer/optional/includes/clipboard/w_213_.inc533
-rwxr-xr-xtestautomation/writer/optional/includes/clipboard/w_214_.inc524
-rwxr-xr-xtestautomation/writer/optional/includes/clipboard/w_215_.inc448
-rwxr-xr-xtestautomation/writer/optional/includes/clipboard/w_216_.inc440
-rwxr-xr-xtestautomation/writer/optional/includes/clipboard/w_217_.inc393
-rwxr-xr-xtestautomation/writer/optional/includes/clipboard/w_218_.inc402
-rwxr-xr-xtestautomation/writer/optional/includes/clipboard/w_219_.inc397
-rwxr-xr-xtestautomation/writer/optional/includes/clipboard/w_220_.inc392
-rwxr-xr-xtestautomation/writer/optional/includes/clipboard/w_221_.inc430
-rwxr-xr-xtestautomation/writer/optional/includes/clipboard/w_222_.inc432
-rwxr-xr-xtestautomation/writer/optional/includes/contextmenu/w_contextmenu1.inc433
-rwxr-xr-xtestautomation/writer/optional/includes/drawing/w_drawing_tools1.inc1027
-rwxr-xr-xtestautomation/writer/optional/includes/drawing/w_drawing_tools2.inc698
-rwxr-xr-xtestautomation/writer/optional/includes/dropdownLB/w_dropdownLB1.inc1093
-rwxr-xr-xtestautomation/writer/optional/includes/fields/w_fields1.inc384
-rwxr-xr-xtestautomation/writer/optional/includes/fields/w_fields2.inc1064
-rwxr-xr-xtestautomation/writer/optional/includes/fields/w_fields3.inc993
-rwxr-xr-xtestautomation/writer/optional/includes/fields/w_fields4.inc1033
-rwxr-xr-xtestautomation/writer/optional/includes/fields/w_fields5.inc841
-rwxr-xr-xtestautomation/writer/optional/includes/fields/w_fields6.inc830
-rwxr-xr-xtestautomation/writer/optional/includes/fields/w_fields7.inc421
-rwxr-xr-xtestautomation/writer/optional/includes/filter/w_filter.inc608
-rwxr-xr-xtestautomation/writer/optional/includes/fontwork/w_fontwork1.inc400
-rwxr-xr-xtestautomation/writer/optional/includes/formatcharacter/w_format_character1.inc743
-rw-r--r--testautomation/writer/optional/includes/formatpage/w_formatpage1.inc878
-rwxr-xr-xtestautomation/writer/optional/includes/formatpage/w_formatpage2.inc986
-rw-r--r--testautomation/writer/optional/includes/formatpage/w_formatpage3.inc1372
-rw-r--r--testautomation/writer/optional/includes/formatpage/w_formatpage4.inc788
-rwxr-xr-xtestautomation/writer/optional/includes/formatparagraph/w_formatparagraph1.inc1263
-rwxr-xr-xtestautomation/writer/optional/includes/formatparagraph/w_formatparagraph2.inc1463
-rwxr-xr-xtestautomation/writer/optional/includes/formatparagraph/w_formatparagraph3.inc1199
-rwxr-xr-xtestautomation/writer/optional/includes/hangulhanjaonversion/hhConversion1.inc700
-rwxr-xr-xtestautomation/writer/optional/includes/hangulhanjaonversion/hhConversion2.inc1618
-rwxr-xr-xtestautomation/writer/optional/includes/hangulhanjaonversion/hhConversion3.inc1037
-rwxr-xr-xtestautomation/writer/optional/includes/hyphenation/w_hyphenation.inc380
-rwxr-xr-xtestautomation/writer/optional/includes/insertgraphic/w_insertgraphic1.inc952
-rwxr-xr-xtestautomation/writer/optional/includes/insertgraphic/w_insertgraphic2.inc985
-rwxr-xr-xtestautomation/writer/optional/includes/insertgraphic/w_insertgraphic3.inc1041
-rwxr-xr-xtestautomation/writer/optional/includes/insertgraphic/w_insertgraphic4.inc831
-rwxr-xr-xtestautomation/writer/optional/includes/insertgraphic/w_insertgraphic5.inc755
-rw-r--r--testautomation/writer/optional/includes/loadsave/w_loadsave.inc493
-rwxr-xr-xtestautomation/writer/optional/includes/navigator/w_navigator.inc807
-rwxr-xr-xtestautomation/writer/optional/includes/number/w_205_.inc731
-rwxr-xr-xtestautomation/writer/optional/includes/number/w_205a_.inc875
-rwxr-xr-xtestautomation/writer/optional/includes/number/w_206_.inc726
-rwxr-xr-xtestautomation/writer/optional/includes/number/w_207_.inc175
-rwxr-xr-xtestautomation/writer/optional/includes/option/wh_o_1.inc642
-rwxr-xr-xtestautomation/writer/optional/includes/option/wh_o_2.inc473
-rwxr-xr-xtestautomation/writer/optional/includes/option/wh_o_3.inc389
-rwxr-xr-xtestautomation/writer/optional/includes/option/wr_o_1.inc937
-rwxr-xr-xtestautomation/writer/optional/includes/option/wr_o_2.inc972
-rwxr-xr-xtestautomation/writer/optional/includes/option/wr_o_3.inc1403
-rwxr-xr-xtestautomation/writer/optional/includes/option/wr_o_4.inc991
-rwxr-xr-xtestautomation/writer/optional/includes/option/wr_o_5.inc200
-rwxr-xr-xtestautomation/writer/optional/includes/option/wr_o_a.inc663
-rwxr-xr-xtestautomation/writer/optional/includes/redlining/w_redlining1.inc1233
-rwxr-xr-xtestautomation/writer/optional/includes/redlining/w_redlining2.inc1267
-rwxr-xr-xtestautomation/writer/optional/includes/regexp/regular.inc974
-rwxr-xr-xtestautomation/writer/optional/includes/regexp/search.inc1699
-rwxr-xr-xtestautomation/writer/optional/includes/regression/issuezilla/w_issuezilla_regression.inc515
-rwxr-xr-xtestautomation/writer/optional/includes/section/w_section_1.inc620
-rwxr-xr-xtestautomation/writer/optional/includes/section/w_section_2.inc1055
-rwxr-xr-xtestautomation/writer/optional/includes/section/w_section_3.inc1761
-rwxr-xr-xtestautomation/writer/optional/includes/section/w_section_4.inc1509
-rwxr-xr-xtestautomation/writer/optional/includes/section/w_section_tools.inc186
-rwxr-xr-xtestautomation/writer/optional/includes/shortcut/w_shortcuts.inc856
-rwxr-xr-xtestautomation/writer/optional/includes/sorting/w_sorting1.inc663
-rwxr-xr-xtestautomation/writer/optional/includes/sorting/w_sorting2.inc345
-rw-r--r--testautomation/writer/optional/includes/spellcheck/w_spellcheck.inc1477
-rwxr-xr-xtestautomation/writer/optional/includes/spellcheck/w_spellcheck1.inc160
-rwxr-xr-xtestautomation/writer/optional/includes/stylist/w_stylist.inc1024
-rwxr-xr-xtestautomation/writer/optional/includes/table/w_204_.inc1157
-rwxr-xr-xtestautomation/writer/optional/includes/table/w_204a_.inc1163
-rwxr-xr-xtestautomation/writer/optional/includes/table/w_204b_.inc100
-rwxr-xr-xtestautomation/writer/optional/includes/textframes/w_textframes1.inc1458
-rwxr-xr-xtestautomation/writer/optional/includes/textframes/w_textframes2.inc1159
-rwxr-xr-xtestautomation/writer/optional/includes/textframes/w_textframes3.inc1070
-rwxr-xr-xtestautomation/writer/optional/includes/textframes/w_textframes4.inc1525
-rwxr-xr-xtestautomation/writer/optional/includes/textframes/w_textframes5.inc753
-rwxr-xr-xtestautomation/writer/optional/includes/tools/tools1.inc345
-rwxr-xr-xtestautomation/writer/optional/includes/tools/tools2.inc412
-rwxr-xr-xtestautomation/writer/optional/includes/undo/w_undo1.inc352
-rwxr-xr-xtestautomation/writer/optional/includes/undo/w_undo_history_1.inc204
-rwxr-xr-xtestautomation/writer/optional/includes/undo/w_undo_history_2.inc528
-rwxr-xr-xtestautomation/writer/optional/includes/undo/w_undo_history_3.inc687
-rwxr-xr-xtestautomation/writer/optional/includes/undo/w_undo_history_4.inc495
-rwxr-xr-xtestautomation/writer/optional/input/advanced/new_german_spelling1.stwbin0 -> 6602 bytes
-rwxr-xr-xtestautomation/writer/optional/input/advanced/new_german_spelling10.stwbin0 -> 6763 bytes
-rwxr-xr-xtestautomation/writer/optional/input/advanced/new_german_spelling11.stwbin0 -> 6801 bytes
-rwxr-xr-xtestautomation/writer/optional/input/advanced/new_german_spelling12.stwbin0 -> 6577 bytes
-rwxr-xr-xtestautomation/writer/optional/input/advanced/new_german_spelling13.stwbin0 -> 6644 bytes
-rwxr-xr-xtestautomation/writer/optional/input/advanced/new_german_spelling14.stwbin0 -> 6770 bytes
-rwxr-xr-xtestautomation/writer/optional/input/advanced/new_german_spelling15.stwbin0 -> 6726 bytes
-rwxr-xr-xtestautomation/writer/optional/input/advanced/new_german_spelling16.stwbin0 -> 6739 bytes
-rwxr-xr-xtestautomation/writer/optional/input/advanced/new_german_spelling17.stwbin0 -> 6834 bytes
-rwxr-xr-xtestautomation/writer/optional/input/advanced/new_german_spelling18.stwbin0 -> 6672 bytes
-rwxr-xr-xtestautomation/writer/optional/input/advanced/new_german_spelling19.stwbin0 -> 6702 bytes
-rwxr-xr-xtestautomation/writer/optional/input/advanced/new_german_spelling2.stwbin0 -> 6564 bytes
-rwxr-xr-xtestautomation/writer/optional/input/advanced/new_german_spelling20.stwbin0 -> 6641 bytes
-rwxr-xr-xtestautomation/writer/optional/input/advanced/new_german_spelling21.stwbin0 -> 6542 bytes
-rwxr-xr-xtestautomation/writer/optional/input/advanced/new_german_spelling22.stwbin0 -> 6684 bytes
-rwxr-xr-xtestautomation/writer/optional/input/advanced/new_german_spelling23.stwbin0 -> 6580 bytes
-rwxr-xr-xtestautomation/writer/optional/input/advanced/new_german_spelling24.stwbin0 -> 6755 bytes
-rwxr-xr-xtestautomation/writer/optional/input/advanced/new_german_spelling25.stwbin0 -> 6719 bytes
-rwxr-xr-xtestautomation/writer/optional/input/advanced/new_german_spelling26.stwbin0 -> 6827 bytes
-rwxr-xr-xtestautomation/writer/optional/input/advanced/new_german_spelling27.stwbin0 -> 6799 bytes
-rwxr-xr-xtestautomation/writer/optional/input/advanced/new_german_spelling28.stwbin0 -> 6825 bytes
-rwxr-xr-xtestautomation/writer/optional/input/advanced/new_german_spelling29.stwbin0 -> 6867 bytes
-rwxr-xr-xtestautomation/writer/optional/input/advanced/new_german_spelling3.stwbin0 -> 6686 bytes
-rwxr-xr-xtestautomation/writer/optional/input/advanced/new_german_spelling30.stwbin0 -> 6071 bytes
-rwxr-xr-xtestautomation/writer/optional/input/advanced/new_german_spelling4.stwbin0 -> 6980 bytes
-rwxr-xr-xtestautomation/writer/optional/input/advanced/new_german_spelling5.stwbin0 -> 6741 bytes
-rwxr-xr-xtestautomation/writer/optional/input/advanced/new_german_spelling6.stwbin0 -> 6715 bytes
-rwxr-xr-xtestautomation/writer/optional/input/advanced/new_german_spelling7.stwbin0 -> 6610 bytes
-rwxr-xr-xtestautomation/writer/optional/input/advanced/new_german_spelling8.stwbin0 -> 6711 bytes
-rwxr-xr-xtestautomation/writer/optional/input/advanced/new_german_spelling9.stwbin0 -> 6773 bytes
-rwxr-xr-xtestautomation/writer/optional/input/advanced/tToolsAutocorrectWordCompletion_4.sxwbin0 -> 5891 bytes
-rwxr-xr-xtestautomation/writer/optional/input/alternative_text/jolink.jpgbin0 -> 11686 bytes
-rw-r--r--testautomation/writer/optional/input/autocorrection/01-01.odtbin0 -> 7798 bytes
-rw-r--r--testautomation/writer/optional/input/autocorrection/01.odtbin0 -> 7798 bytes
-rwxr-xr-xtestautomation/writer/optional/input/clipboard/calc.sxcbin0 -> 9722 bytes
-rwxr-xr-xtestautomation/writer/optional/input/clipboard/draw.sxdbin0 -> 10003 bytes
-rwxr-xr-xtestautomation/writer/optional/input/clipboard/dummy.sxwbin0 -> 5998 bytes
-rwxr-xr-xtestautomation/writer/optional/input/clipboard/dummy.txt2
-rwxr-xr-xtestautomation/writer/optional/input/clipboard/flower.gifbin0 -> 6073 bytes
-rwxr-xr-xtestautomation/writer/optional/input/clipboard/html.html93
-rwxr-xr-xtestautomation/writer/optional/input/clipboard/writer.sxwbin0 -> 18839 bytes
-rwxr-xr-xtestautomation/writer/optional/input/dropdownLB/DropDownListBox.docbin0 -> 23552 bytes
-rwxr-xr-xtestautomation/writer/optional/input/export/filter/act_1.all16
-rwxr-xr-xtestautomation/writer/optional/input/export/filter/exlst_1.txt19
-rwxr-xr-xtestautomation/writer/optional/input/export/filter/exlst_1.unx16
-rwxr-xr-xtestautomation/writer/optional/input/export/filter/exlst_1.w9519
-rwxr-xr-xtestautomation/writer/optional/input/export/filter/exlst_3.unx17
-rwxr-xr-xtestautomation/writer/optional/input/export/filter/exlst_3.w9515
-rwxr-xr-xtestautomation/writer/optional/input/export/filter/exlst_31.unx17
-rwxr-xr-xtestautomation/writer/optional/input/export/filter/exlst_31.w9516
-rwxr-xr-xtestautomation/writer/optional/input/export/filter/exlst_33.unx16
-rwxr-xr-xtestautomation/writer/optional/input/export/filter/exlst_33.w9515
-rwxr-xr-xtestautomation/writer/optional/input/export/filter/exlst_34.unx16
-rwxr-xr-xtestautomation/writer/optional/input/export/filter/exlst_34.w9515
-rwxr-xr-xtestautomation/writer/optional/input/export/filter/exlst_39.unx16
-rwxr-xr-xtestautomation/writer/optional/input/export/filter/exlst_39.w9515
-rwxr-xr-xtestautomation/writer/optional/input/export/filter/exlst_46.unx16
-rwxr-xr-xtestautomation/writer/optional/input/export/filter/exlst_46.w9516
-rwxr-xr-xtestautomation/writer/optional/input/export/filter/exlst_49.unx16
-rwxr-xr-xtestautomation/writer/optional/input/export/filter/exlst_49.w9519
-rwxr-xr-xtestautomation/writer/optional/input/export/filter/exlst_50.w9518
-rwxr-xr-xtestautomation/writer/optional/input/export/filter/exlst_55.unx16
-rwxr-xr-xtestautomation/writer/optional/input/export/filter/exlst_55.w9516
-rwxr-xr-xtestautomation/writer/optional/input/export/filter/exlst_7.unx16
-rwxr-xr-xtestautomation/writer/optional/input/export/filter/exlst_7.w9516
-rwxr-xr-xtestautomation/writer/optional/input/export/filter/exlst_81.unx16
-rwxr-xr-xtestautomation/writer/optional/input/export/filter/exlst_81.w9518
-rwxr-xr-xtestautomation/writer/optional/input/export/filter/exlst_82.w9518
-rwxr-xr-xtestautomation/writer/optional/input/export/filter/exlst_86.w9521
-rwxr-xr-xtestautomation/writer/optional/input/export/filter/exlst_88.w9518
-rwxr-xr-xtestautomation/writer/optional/input/export/odt/export1.odtbin0 -> 17537 bytes
-rwxr-xr-xtestautomation/writer/optional/input/export/odt/export2.odtbin0 -> 12082 bytes
-rwxr-xr-xtestautomation/writer/optional/input/export/odt/export3.odtbin0 -> 54196 bytes
-rwxr-xr-xtestautomation/writer/optional/input/export/odt/export4.odtbin0 -> 10133 bytes
-rwxr-xr-xtestautomation/writer/optional/input/export/sdw/sw50.sdwbin0 -> 46080 bytes
-rwxr-xr-xtestautomation/writer/optional/input/export/sdw/test1.sdwbin0 -> 21504 bytes
-rwxr-xr-xtestautomation/writer/optional/input/export/sdw/test2.sdwbin0 -> 144896 bytes
-rwxr-xr-xtestautomation/writer/optional/input/export/sxw/i50228.sxwbin0 -> 471146 bytes
-rwxr-xr-xtestautomation/writer/optional/input/export/sxw/test3.sxwbin0 -> 49456 bytes
-rwxr-xr-xtestautomation/writer/optional/input/fields/AboveBelow.sxwbin0 -> 5981 bytes
-rwxr-xr-xtestautomation/writer/optional/input/fields/CombineTest.sxwbin0 -> 6134 bytes
-rwxr-xr-xtestautomation/writer/optional/input/fields/Date.sxwbin0 -> 6011 bytes
-rwxr-xr-xtestautomation/writer/optional/input/fields/Time.sxwbin0 -> 5890 bytes
-rwxr-xr-xtestautomation/writer/optional/input/fields/chapterTest.sxwbin0 -> 5945 bytes
-rw-r--r--testautomation/writer/optional/input/fields/diploma.ottbin0 -> 18090 bytes
-rwxr-xr-xtestautomation/writer/optional/input/fields/fields_docinfos.sxwbin0 -> 10496 bytes
-rwxr-xr-xtestautomation/writer/optional/input/fields/numberRange.sxwbin0 -> 29143 bytes
-rwxr-xr-xtestautomation/writer/optional/input/fields/pageTest.sxwbin0 -> 5717 bytes
-rwxr-xr-xtestautomation/writer/optional/input/fields/staticsTest.sxwbin0 -> 8897 bytes
-rwxr-xr-xtestautomation/writer/optional/input/fields/statisticsTest.sxwbin0 -> 9094 bytes
-rwxr-xr-xtestautomation/writer/optional/input/filter/if_cod_lin.txt0
-rwxr-xr-xtestautomation/writer/optional/input/filter/if_cod_w95.txt111
-rwxr-xr-xtestautomation/writer/optional/input/filter/if_st_1_all.txt72
-rwxr-xr-xtestautomation/writer/optional/input/filter/if_st_33_all.txt58
-rwxr-xr-xtestautomation/writer/optional/input/filter/if_st_34_all.txt58
-rwxr-xr-xtestautomation/writer/optional/input/filter/if_st_39_all.txt58
-rwxr-xr-xtestautomation/writer/optional/input/filter/if_st_46_all.txt63
-rwxr-xr-xtestautomation/writer/optional/input/filter/if_st_46_exe.txt5
-rwxr-xr-xtestautomation/writer/optional/input/filter/if_st_49_all.txt58
-rwxr-xr-xtestautomation/writer/optional/input/filter/if_st_55_all.txt58
-rwxr-xr-xtestautomation/writer/optional/input/filter/if_st_81_all.txt58
-rwxr-xr-xtestautomation/writer/optional/input/filter/if_st_82_all.txt58
-rwxr-xr-xtestautomation/writer/optional/input/filter/if_st_86_all.txt58
-rwxr-xr-xtestautomation/writer/optional/input/filter/if_st_88_all.txt58
-rwxr-xr-xtestautomation/writer/optional/input/filter/if_st_all.txt53
-rwxr-xr-xtestautomation/writer/optional/input/filter/if_w4w_lin.txt6
-rwxr-xr-xtestautomation/writer/optional/input/filter/lib/old/hwpreadermi.dll1557
-rwxr-xr-xtestautomation/writer/optional/input/filter/lib/old/jsreadermi.dll130
-rwxr-xr-xtestautomation/writer/optional/input/filter/lib/wps2star.dll159
-rwxr-xr-xtestautomation/writer/optional/input/filter/readme.txt16
-rwxr-xr-xtestautomation/writer/optional/input/filter/regcomp/regcompli16
-rwxr-xr-xtestautomation/writer/optional/input/filter/regcomp/regcompsi25
-rwxr-xr-xtestautomation/writer/optional/input/filter/regcomp/regcompss57
-rwxr-xr-xtestautomation/writer/optional/input/filter/sa_actua_1.txt74
-rwxr-xr-xtestautomation/writer/optional/input/filter/sa_actua_36.txt82
-rwxr-xr-xtestautomation/writer/optional/input/filter/sa_actua_49.txt74
-rwxr-xr-xtestautomation/writer/optional/input/filter/sa_actua_81.txt74
-rwxr-xr-xtestautomation/writer/optional/input/filter/sa_actua_82.txt74
-rwxr-xr-xtestautomation/writer/optional/input/filter/sa_actua_86.txt74
-rwxr-xr-xtestautomation/writer/optional/input/filter/sa_actua_88.txt74
-rwxr-xr-xtestautomation/writer/optional/input/filter/sa_sorte_1.txt74
-rwxr-xr-xtestautomation/writer/optional/input/filter/sa_sorte_36.txt82
-rwxr-xr-xtestautomation/writer/optional/input/filter/sa_sorte_49.txt74
-rwxr-xr-xtestautomation/writer/optional/input/filter/sa_sorte_81.txt74
-rwxr-xr-xtestautomation/writer/optional/input/filter/sa_sorte_82.txt74
-rwxr-xr-xtestautomation/writer/optional/input/filter/sa_sorte_86.txt74
-rwxr-xr-xtestautomation/writer/optional/input/filter/sa_sorte_88.txt74
-rwxr-xr-xtestautomation/writer/optional/input/filter/wf____1_all.txt56
-rwxr-xr-xtestautomation/writer/optional/input/filter/wf____49.all0
-rwxr-xr-xtestautomation/writer/optional/input/filter/wf____49_all.txt57
-rwxr-xr-xtestautomation/writer/optional/input/formatpage/pageLayout.sxwbin0 -> 5628 bytes
-rwxr-xr-xtestautomation/writer/optional/input/formatpage/testColumnInPage.sxwbin0 -> 5419 bytes
-rwxr-xr-xtestautomation/writer/optional/input/formatpage/testColumnInPage2.sxwbin0 -> 5409 bytes
-rwxr-xr-xtestautomation/writer/optional/input/formatpage/testColumnVertical.sxwbin0 -> 5267 bytes
-rwxr-xr-xtestautomation/writer/optional/input/formatpage/testFooterContent31.sxwbin0 -> 5488 bytes
-rwxr-xr-xtestautomation/writer/optional/input/formatpage/testFooterContent32.sxwbin0 -> 5469 bytes
-rwxr-xr-xtestautomation/writer/optional/input/formatpage/testForAutoFit.sxwbin0 -> 5542 bytes
-rwxr-xr-xtestautomation/writer/optional/input/formatpage/testHeaderContent29.sxwbin0 -> 5506 bytes
-rwxr-xr-xtestautomation/writer/optional/input/formatpage/testHeaderContent30.sxwbin0 -> 5499 bytes
-rwxr-xr-xtestautomation/writer/optional/input/formatpage/testSeparatorLine.sxwbin0 -> 5279 bytes
-rwxr-xr-xtestautomation/writer/optional/input/formatparagraph/AddSpacingShouldCheck.docbin0 -> 28160 bytes
-rwxr-xr-xtestautomation/writer/optional/input/formatparagraph/AddSpacingShouldNotCheck.docbin0 -> 28160 bytes
-rwxr-xr-xtestautomation/writer/optional/input/formatparagraph/DropCapsTest.sxwbin0 -> 5523 bytes
-rwxr-xr-xtestautomation/writer/optional/input/formatparagraph/TabsDecimal.sxwbin0 -> 5433 bytes
-rwxr-xr-xtestautomation/writer/optional/input/formatparagraph/TabsTest.sxwbin0 -> 5467 bytes
-rwxr-xr-xtestautomation/writer/optional/input/formatparagraph/alignmentTest.sxwbin0 -> 5114 bytes
-rwxr-xr-xtestautomation/writer/optional/input/formatparagraph/alignmentTestJustified.sxwbin0 -> 5203 bytes
-rwxr-xr-xtestautomation/writer/optional/input/formatparagraph/alignmentTestJustifiedCentered.sxwbin0 -> 5188 bytes
-rwxr-xr-xtestautomation/writer/optional/input/formatparagraph/alignmentTestRight.sxwbin0 -> 5102 bytes
-rwxr-xr-xtestautomation/writer/optional/input/formatparagraph/columnBreakParagraph.sxwbin0 -> 5242 bytes
-rwxr-xr-xtestautomation/writer/optional/input/formatparagraph/columnBreakParagraphAfter.sxwbin0 -> 5090 bytes
-rwxr-xr-xtestautomation/writer/optional/input/formatparagraph/columnBreakParagraphBefore.sxwbin0 -> 5245 bytes
-rwxr-xr-xtestautomation/writer/optional/input/formatparagraph/eightLineAdd1Pic.sxwbin0 -> 6750 bytes
-rwxr-xr-xtestautomation/writer/optional/input/formatparagraph/eightline.sxwbin0 -> 5225 bytes
-rwxr-xr-xtestautomation/writer/optional/input/formatparagraph/hyphenation.sxwbin0 -> 4895 bytes
-rw-r--r--testautomation/writer/optional/input/formatparagraph/hyphenationNew.odtbin0 -> 8387 bytes
-rwxr-xr-xtestautomation/writer/optional/input/formatparagraph/hyphenationNew.sxwbin0 -> 5266 bytes
-rwxr-xr-xtestautomation/writer/optional/input/formatparagraph/indent.sxwbin0 -> 6259 bytes
-rwxr-xr-xtestautomation/writer/optional/input/formatparagraph/pageBreakAfter.sxwbin0 -> 5044 bytes
-rwxr-xr-xtestautomation/writer/optional/input/formatparagraph/pageBreakBefore.sxwbin0 -> 5056 bytes
-rwxr-xr-xtestautomation/writer/optional/input/formatparagraph/paragraphNumbering.sxwbin0 -> 5477 bytes
-rwxr-xr-xtestautomation/writer/optional/input/formatparagraph/registerTrue.sxwbin0 -> 6345 bytes
-rwxr-xr-xtestautomation/writer/optional/input/formatparagraph/spacing.sxwbin0 -> 5746 bytes
-rwxr-xr-xtestautomation/writer/optional/input/formatparagraph/spacing1.sxwbin0 -> 5741 bytes
-rwxr-xr-xtestautomation/writer/optional/input/formatparagraph/specialHyphenation.sxwbin0 -> 5120 bytes
-rwxr-xr-xtestautomation/writer/optional/input/formatparagraph/testExpand.sxwbin0 -> 6264 bytes
-rwxr-xr-xtestautomation/writer/optional/input/formatparagraph/textFlowOptions.sxwbin0 -> 5619 bytes
-rwxr-xr-xtestautomation/writer/optional/input/formatparagraph/textFlowOptions1.sxwbin0 -> 7632 bytes
-rwxr-xr-xtestautomation/writer/optional/input/graphics/bild.jpgbin0 -> 13711 bytes
-rwxr-xr-xtestautomation/writer/optional/input/graphics/bullet.gifbin0 -> 111 bytes
-rwxr-xr-xtestautomation/writer/optional/input/graphics/jolink.jpgbin0 -> 11686 bytes
-rw-r--r--testautomation/writer/optional/input/hangul/hangul.html32
-rw-r--r--testautomation/writer/optional/input/hangul/hangul.sxwbin0 -> 5861 bytes
-rwxr-xr-xtestautomation/writer/optional/input/hangulhanjaonversion/ChineseToKorean.sxwbin0 -> 5545 bytes
-rwxr-xr-xtestautomation/writer/optional/input/hangulhanjaonversion/KoreanToChinese.sxwbin0 -> 5530 bytes
-rwxr-xr-xtestautomation/writer/optional/input/hangulhanjaonversion/Replace.sxwbin0 -> 5952 bytes
-rwxr-xr-xtestautomation/writer/optional/input/hangulhanjaonversion/alwayIgnore.sxwbin0 -> 5517 bytes
-rwxr-xr-xtestautomation/writer/optional/input/hangulhanjaonversion/alwaysReplace.sxwbin0 -> 5411 bytes
-rwxr-xr-xtestautomation/writer/optional/input/hangulhanjaonversion/drawBox.sxwbin0 -> 5727 bytes
-rwxr-xr-xtestautomation/writer/optional/input/hangulhanjaonversion/hangul.sxwbin0 -> 6809 bytes
-rwxr-xr-xtestautomation/writer/optional/input/hangulhanjaonversion/multiLanguage_C.sxwbin0 -> 6235 bytes
-rwxr-xr-xtestautomation/writer/optional/input/hangulhanjaonversion/multiLanguage_K.sxwbin0 -> 6244 bytes
-rwxr-xr-xtestautomation/writer/optional/input/hangulhanjaonversion/multiSelection.sxwbin0 -> 5542 bytes
-rwxr-xr-xtestautomation/writer/optional/input/hangulhanjaonversion/noKoreanAndChinese.sxwbin0 -> 15424 bytes
-rwxr-xr-xtestautomation/writer/optional/input/hangulhanjaonversion/notConvertHangulHanja.sxwbin0 -> 5594 bytes
-rwxr-xr-xtestautomation/writer/optional/input/hangulhanjaonversion/replaceAll.sxwbin0 -> 5411 bytes
-rwxr-xr-xtestautomation/writer/optional/input/hangulhanjaonversion/textBox.sxwbin0 -> 5722 bytes
-rwxr-xr-xtestautomation/writer/optional/input/hyphenation/tHyphenation.odtbin0 -> 9034 bytes
-rwxr-xr-xtestautomation/writer/optional/input/import/amipro3.sam3107
-rw-r--r--testautomation/writer/optional/input/import/dostext.txt79
-rwxr-xr-xtestautomation/writer/optional/input/import/dummy.sxwbin0 -> 5998 bytes
-rwxr-xr-xtestautomation/writer/optional/input/import/hangul.hwpbin0 -> 211128 bytes
-rwxr-xr-xtestautomation/writer/optional/input/import/html.html93
-rwxr-xr-xtestautomation/writer/optional/input/import/html/html.html93
-rwxr-xr-xtestautomation/writer/optional/input/import/mactext.txt1
-rwxr-xr-xtestautomation/writer/optional/input/import/pocketword.pswbin0 -> 37220 bytes
-rwxr-xr-xtestautomation/writer/optional/input/import/rtf.rtf408
-rwxr-xr-xtestautomation/writer/optional/input/import/sw1.sdwbin0 -> 103329 bytes
-rwxr-xr-xtestautomation/writer/optional/input/import/sw2.sdwbin0 -> 145047 bytes
-rwxr-xr-xtestautomation/writer/optional/input/import/sw30.sdwbin0 -> 16896 bytes
-rwxr-xr-xtestautomation/writer/optional/input/import/sw31.sdwbin0 -> 74240 bytes
-rwxr-xr-xtestautomation/writer/optional/input/import/sw31.vorbin0 -> 101888 bytes
-rwxr-xr-xtestautomation/writer/optional/input/import/sw40.sdwbin0 -> 219648 bytes
-rwxr-xr-xtestautomation/writer/optional/input/import/sw40_sp2.vorbin0 -> 15360 bytes
-rwxr-xr-xtestautomation/writer/optional/input/import/sw50.sdwbin0 -> 92672 bytes
-rwxr-xr-xtestautomation/writer/optional/input/import/sw50.vorbin0 -> 33280 bytes
-rwxr-xr-xtestautomation/writer/optional/input/import/sw60.sxwbin0 -> 9396 bytes
-rwxr-xr-xtestautomation/writer/optional/input/import/swdos.txt3314
-rwxr-xr-xtestautomation/writer/optional/input/import/unixtext.txt64
-rwxr-xr-xtestautomation/writer/optional/input/import/wintext.txt47
-rwxr-xr-xtestautomation/writer/optional/input/import/winw97.docbin0 -> 60416 bytes
-rwxr-xr-xtestautomation/writer/optional/input/import/winword6.docbin0 -> 108544 bytes
-rwxr-xr-xtestautomation/writer/optional/input/import/wpsfile.wpsbin0 -> 15631 bytes
-rwxr-xr-xtestautomation/writer/optional/input/import/xml2.odtbin0 -> 51176 bytes
-rwxr-xr-xtestautomation/writer/optional/input/insertgraphic/Bughunter.jpgbin0 -> 33124 bytes
-rwxr-xr-xtestautomation/writer/optional/input/insertgraphic/boy.gifbin0 -> 48286 bytes
-rwxr-xr-xtestautomation/writer/optional/input/insertgraphic/flowers.gifbin0 -> 9333 bytes
-rwxr-xr-xtestautomation/writer/optional/input/insertgraphic/game.bmpbin0 -> 75032 bytes
-rwxr-xr-xtestautomation/writer/optional/input/linguistik/001.odtbin0 -> 8932 bytes
-rwxr-xr-xtestautomation/writer/optional/input/linguistik/003.odtbin0 -> 9361 bytes
-rwxr-xr-xtestautomation/writer/optional/input/linguistik/007.odtbin0 -> 9814 bytes
-rwxr-xr-xtestautomation/writer/optional/input/linguistik/031.odtbin0 -> 8303 bytes
-rwxr-xr-xtestautomation/writer/optional/input/linguistik/033.odtbin0 -> 8607 bytes
-rwxr-xr-xtestautomation/writer/optional/input/linguistik/034.odtbin0 -> 8044 bytes
-rwxr-xr-xtestautomation/writer/optional/input/linguistik/036.odtbin0 -> 8345 bytes
-rwxr-xr-xtestautomation/writer/optional/input/linguistik/039.odtbin0 -> 8739 bytes
-rwxr-xr-xtestautomation/writer/optional/input/linguistik/045.odtbin0 -> 8717 bytes
-rwxr-xr-xtestautomation/writer/optional/input/linguistik/046.odtbin0 -> 8952 bytes
-rwxr-xr-xtestautomation/writer/optional/input/linguistik/048.odtbin0 -> 8249 bytes
-rwxr-xr-xtestautomation/writer/optional/input/linguistik/049.odtbin0 -> 7970 bytes
-rwxr-xr-xtestautomation/writer/optional/input/linguistik/050.odtbin0 -> 11063 bytes
-rwxr-xr-xtestautomation/writer/optional/input/linguistik/055.odtbin0 -> 9422 bytes
-rwxr-xr-xtestautomation/writer/optional/input/linguistik/sprache.odtbin0 -> 71268 bytes
-rwxr-xr-xtestautomation/writer/optional/input/masterdoc/dok1.sxwbin0 -> 5911 bytes
-rwxr-xr-xtestautomation/writer/optional/input/masterdoc/dok2.sxwbin0 -> 5908 bytes
-rwxr-xr-xtestautomation/writer/optional/input/masterdoc/dok3.sxwbin0 -> 5908 bytes
-rwxr-xr-xtestautomation/writer/optional/input/masterdoc/frame.sxgbin0 -> 5431 bytes
-rwxr-xr-xtestautomation/writer/optional/input/masterdoc/htmltest.sxgbin0 -> 5451 bytes
-rwxr-xr-xtestautomation/writer/optional/input/masterdoc/link_of_section_test.sxwbin0 -> 6195 bytes
-rwxr-xr-xtestautomation/writer/optional/input/masterdoc/update1.sxgbin0 -> 5283 bytes
-rwxr-xr-xtestautomation/writer/optional/input/masterdoc/update2.sxgbin0 -> 5283 bytes
-rwxr-xr-xtestautomation/writer/optional/input/masterdoc/update3.sxgbin0 -> 5278 bytes
-rwxr-xr-xtestautomation/writer/optional/input/masterdoc/w_102a/st1_12.sxgbin0 -> 120199 bytes
-rwxr-xr-xtestautomation/writer/optional/input/masterdoc/w_102a/st1_121.sxwbin0 -> 7410 bytes
-rwxr-xr-xtestautomation/writer/optional/input/masterdoc/w_102a/st1_122.sxwbin0 -> 5455 bytes
-rwxr-xr-xtestautomation/writer/optional/input/masterdoc/w_102a/st1_123.sxwbin0 -> 7315 bytes
-rwxr-xr-xtestautomation/writer/optional/input/masterdoc/w_102a/st1_124.sxwbin0 -> 7649 bytes
-rwxr-xr-xtestautomation/writer/optional/input/masterdoc/w_102a/st1_125.sxwbin0 -> 5174 bytes
-rwxr-xr-xtestautomation/writer/optional/input/masterdoc/w_102a/st1_126.sxwbin0 -> 7103 bytes
-rwxr-xr-xtestautomation/writer/optional/input/masterdoc/w_102a/st1_127.sxwbin0 -> 7103 bytes
-rwxr-xr-xtestautomation/writer/optional/input/masterdoc/w_102a/st1_128.sxwbin0 -> 7133 bytes
-rwxr-xr-xtestautomation/writer/optional/input/masterdoc/w_102a/st1_129.sxwbin0 -> 7103 bytes
-rwxr-xr-xtestautomation/writer/optional/input/menu/drums.jpgbin0 -> 43931 bytes
-rwxr-xr-xtestautomation/writer/optional/input/navigator/navigator.odtbin0 -> 123768 bytes
-rw-r--r--testautomation/writer/optional/input/navigator/st1_1.sxwbin0 -> 132211 bytes
-rwxr-xr-xtestautomation/writer/optional/input/number/format1.txt40
-rwxr-xr-xtestautomation/writer/optional/input/number/format31.txt40
-rwxr-xr-xtestautomation/writer/optional/input/number/format33.txt36
-rwxr-xr-xtestautomation/writer/optional/input/number/format36.txt40
-rwxr-xr-xtestautomation/writer/optional/input/number/format39.txt40
-rwxr-xr-xtestautomation/writer/optional/input/number/format44.txt40
-rwxr-xr-xtestautomation/writer/optional/input/number/format46.txt40
-rwxr-xr-xtestautomation/writer/optional/input/number/format49.txt36
-rwxr-xr-xtestautomation/writer/optional/input/number/format86.txt40
-rwxr-xr-xtestautomation/writer/optional/input/number/numbering1.sxwbin0 -> 5504 bytes
-rwxr-xr-xtestautomation/writer/optional/input/number/regression/46588.docbin0 -> 19968 bytes
-rwxr-xr-xtestautomation/writer/optional/input/number/regression/73790.docbin0 -> 19968 bytes
-rwxr-xr-xtestautomation/writer/optional/input/number/regression/Unnumbered_outline.docbin0 -> 19456 bytes
-rwxr-xr-xtestautomation/writer/optional/input/options/compatibility1.docbin0 -> 19968 bytes
-rwxr-xr-xtestautomation/writer/optional/input/options/ga000907.gifbin0 -> 21777 bytes
-rwxr-xr-xtestautomation/writer/optional/input/options/gridtst.sxwbin0 -> 27812 bytes
-rwxr-xr-xtestautomation/writer/optional/input/options/gridtst2.sxwbin0 -> 27150 bytes
-rwxr-xr-xtestautomation/writer/optional/input/options/htmltag.html19
-rwxr-xr-xtestautomation/writer/optional/input/options/options1.sxwbin0 -> 110364 bytes
-rwxr-xr-xtestautomation/writer/optional/input/options/options2.sxwbin0 -> 5204 bytes
-rwxr-xr-xtestautomation/writer/optional/input/options/options3.sxwbin0 -> 17454 bytes
-rwxr-xr-xtestautomation/writer/optional/input/options/test.html93
-rwxr-xr-xtestautomation/writer/optional/input/options/test1.html72
-rwxr-xr-xtestautomation/writer/optional/input/options/test1_html_m5a52a8ec.jpgbin0 -> 3177 bytes
-rwxr-xr-xtestautomation/writer/optional/input/options/test_html_616818a1.gifbin0 -> 2112 bytes
-rwxr-xr-xtestautomation/writer/optional/input/options/test_html_8166445.jpgbin0 -> 5992 bytes
-rwxr-xr-xtestautomation/writer/optional/input/options/test_html_m2e0be98f.gifbin0 -> 1597 bytes
-rwxr-xr-xtestautomation/writer/optional/input/options/test_html_m3914db47.gifbin0 -> 1202 bytes
-rwxr-xr-xtestautomation/writer/optional/input/options/test_html_m3ad7a8be.gifbin0 -> 1243 bytes
-rwxr-xr-xtestautomation/writer/optional/input/options/wtitertest.sxwbin0 -> 68992 bytes
-rwxr-xr-xtestautomation/writer/optional/input/redlining/tRedlining_15.sxwbin0 -> 5945 bytes
-rwxr-xr-xtestautomation/writer/optional/input/redlining/tRedlining_4.sxwbin0 -> 5142 bytes
-rw-r--r--testautomation/writer/optional/input/regression/issuezilla/i103265.odtbin0 -> 8768 bytes
-rwxr-xr-xtestautomation/writer/optional/input/regression/issuezilla/i64991.odtbin0 -> 9344 bytes
-rwxr-xr-xtestautomation/writer/optional/input/regression/issuezilla/i65094a.odtbin0 -> 283217 bytes
-rwxr-xr-xtestautomation/writer/optional/input/regression/issuezilla/i65094b.odtbin0 -> 325787 bytes
-rwxr-xr-xtestautomation/writer/optional/input/regression/issuezilla/i69521.odtbin0 -> 21558 bytes
-rwxr-xr-xtestautomation/writer/optional/input/search/attrib.sxwbin0 -> 6328 bytes
-rwxr-xr-xtestautomation/writer/optional/input/search/regu_aus.sxwbin0 -> 6738 bytes
-rwxr-xr-xtestautomation/writer/optional/input/search/style_characters_raw.sxwbin0 -> 7592 bytes
-rwxr-xr-xtestautomation/writer/optional/input/search/style_characters_styles_allone.sxwbin0 -> 8025 bytes
-rwxr-xr-xtestautomation/writer/optional/input/search/such_u_e.sxwbin0 -> 8627 bytes
-rwxr-xr-xtestautomation/writer/optional/input/section/Footnote.sdwbin0 -> 504320 bytes
-rw-r--r--testautomation/writer/optional/input/section/bt.sxwbin0 -> 75639 bytes
-rwxr-xr-xtestautomation/writer/optional/input/section/section_test.sxdbin0 -> 11573 bytes
-rwxr-xr-xtestautomation/writer/optional/input/section/tParagraphSection_1.sxwbin0 -> 5942 bytes
-rwxr-xr-xtestautomation/writer/optional/input/section/tScenarioSection_1.sxwbin0 -> 5121 bytes
-rwxr-xr-xtestautomation/writer/optional/input/section/tScenarioSection_2.sxwbin0 -> 5473 bytes
-rwxr-xr-xtestautomation/writer/optional/input/sorting/phonelist.odtbin0 -> 7519 bytes
-rwxr-xr-xtestautomation/writer/optional/input/sorting/phonelist_sc.odtbin0 -> 7411 bytes
-rwxr-xr-xtestautomation/writer/optional/input/sorting/sort1.odmbin0 -> 7405 bytes
-rwxr-xr-xtestautomation/writer/optional/input/sorting/sort1.odtbin0 -> 7281 bytes
-rwxr-xr-xtestautomation/writer/optional/input/sorting/sort2.odmbin0 -> 6313 bytes
-rwxr-xr-xtestautomation/writer/optional/input/sorting/sort2.odtbin0 -> 6278 bytes
-rwxr-xr-xtestautomation/writer/optional/input/sorting/sort3.odmbin0 -> 7136 bytes
-rwxr-xr-xtestautomation/writer/optional/input/sorting/sort3.odtbin0 -> 7073 bytes
-rwxr-xr-xtestautomation/writer/optional/input/spellcheck/Language_Guessing_Sample_Texts.odtbin0 -> 10781 bytes
-rwxr-xr-xtestautomation/writer/optional/input/spellcheck/spellcheck_1.odtbin0 -> 7196 bytes
-rwxr-xr-xtestautomation/writer/optional/input/spellcheck/spellcheck_33.odtbin0 -> 7196 bytes
-rwxr-xr-xtestautomation/writer/optional/input/spellcheck/spellcheck_34.odtbin0 -> 7196 bytes
-rwxr-xr-xtestautomation/writer/optional/input/spellcheck/spellcheck_49.odtbin0 -> 7196 bytes
-rwxr-xr-xtestautomation/writer/optional/input/spellcheck/spellcheck_50.odtbin0 -> 7985 bytes
-rwxr-xr-xtestautomation/writer/optional/input/spellcheck/st1_2_01.odtbin0 -> 6651 bytes
-rwxr-xr-xtestautomation/writer/optional/input/spellcheck/st1_2_03.odtbin0 -> 6276 bytes
-rwxr-xr-xtestautomation/writer/optional/input/spellcheck/st1_2_07.odtbin0 -> 7424 bytes
-rwxr-xr-xtestautomation/writer/optional/input/spellcheck/st1_2_31.odtbin0 -> 6541 bytes
-rwxr-xr-xtestautomation/writer/optional/input/spellcheck/st1_2_33.odtbin0 -> 6756 bytes
-rwxr-xr-xtestautomation/writer/optional/input/spellcheck/st1_2_34.odtbin0 -> 6496 bytes
-rwxr-xr-xtestautomation/writer/optional/input/spellcheck/st1_2_36.odtbin0 -> 8016 bytes
-rwxr-xr-xtestautomation/writer/optional/input/spellcheck/st1_2_39.odtbin0 -> 7896 bytes
-rwxr-xr-xtestautomation/writer/optional/input/spellcheck/st1_2_45.odtbin0 -> 6788 bytes
-rwxr-xr-xtestautomation/writer/optional/input/spellcheck/st1_2_46.odtbin0 -> 7573 bytes
-rwxr-xr-xtestautomation/writer/optional/input/spellcheck/st1_2_48.odtbin0 -> 6585 bytes
-rwxr-xr-xtestautomation/writer/optional/input/spellcheck/st1_2_49.odtbin0 -> 6491 bytes
-rwxr-xr-xtestautomation/writer/optional/input/spellcheck/st1_2_50.odtbin0 -> 8715 bytes
-rwxr-xr-xtestautomation/writer/optional/input/spellcheck/st1_2_55.odtbin0 -> 6661 bytes
-rwxr-xr-xtestautomation/writer/optional/input/st1_1.sxwbin0 -> 132211 bytes
-rwxr-xr-xtestautomation/writer/optional/input/st1_13a.sxwbin0 -> 4936 bytes
-rwxr-xr-xtestautomation/writer/optional/input/st1_13b.sxwbin0 -> 5543 bytes
-rwxr-xr-xtestautomation/writer/optional/input/st1_14.sxwbin0 -> 5511 bytes
-rwxr-xr-xtestautomation/writer/optional/input/st1_5.sxwbin0 -> 5025 bytes
-rwxr-xr-xtestautomation/writer/optional/input/st1_7.sxwbin0 -> 5792 bytes
-rwxr-xr-xtestautomation/writer/optional/input/textframe/AnchorAsCharacter.sxwbin0 -> 5758 bytes
-rwxr-xr-xtestautomation/writer/optional/input/textframe/AnchorToCharacter.sxwbin0 -> 5872 bytes
-rwxr-xr-xtestautomation/writer/optional/input/textframe/AnchorToPage.sxwbin0 -> 5706 bytes
-rwxr-xr-xtestautomation/writer/optional/input/textframe/AnchorToParagraph.sxwbin0 -> 6613 bytes
-rwxr-xr-xtestautomation/writer/optional/input/textframe/Footer.sxwbin0 -> 6047 bytes
-rwxr-xr-xtestautomation/writer/optional/input/textframe/Header.sxwbin0 -> 6069 bytes
-rwxr-xr-xtestautomation/writer/optional/input/textframe/after.sxwbin0 -> 5702 bytes
-rwxr-xr-xtestautomation/writer/optional/input/textframe/before.sxwbin0 -> 5708 bytes
-rwxr-xr-xtestautomation/writer/optional/input/textframe/behindText.docbin0 -> 19456 bytes
-rwxr-xr-xtestautomation/writer/optional/input/textframe/frame.sxwbin0 -> 5958 bytes
-rwxr-xr-xtestautomation/writer/optional/input/textframe/frameInEndnote.sxwbin0 -> 6210 bytes
-rwxr-xr-xtestautomation/writer/optional/input/textframe/frameInFooter.sxwbin0 -> 5642 bytes
-rwxr-xr-xtestautomation/writer/optional/input/textframe/frameInFootnote.sxwbin0 -> 6137 bytes
-rwxr-xr-xtestautomation/writer/optional/input/textframe/frameInFrame.sxwbin0 -> 6253 bytes
-rwxr-xr-xtestautomation/writer/optional/input/textframe/frameInHeader.sxwbin0 -> 5671 bytes
-rwxr-xr-xtestautomation/writer/optional/input/textframe/frameInTable.sxwbin0 -> 8720 bytes
-rwxr-xr-xtestautomation/writer/optional/input/textframe/inFrontText.docbin0 -> 19456 bytes
-rwxr-xr-xtestautomation/writer/optional/input/textframe/inLineWithText.docbin0 -> 28160 bytes
-rwxr-xr-xtestautomation/writer/optional/input/textframe/lineInText.docbin0 -> 28160 bytes
-rwxr-xr-xtestautomation/writer/optional/input/textframe/lineOfText.docbin0 -> 19456 bytes
-rwxr-xr-xtestautomation/writer/optional/input/textframe/lineOfText.sxwbin0 -> 5753 bytes
-rwxr-xr-xtestautomation/writer/optional/input/textframe/pageColumn1.sxwbin0 -> 5577 bytes
-rwxr-xr-xtestautomation/writer/optional/input/textframe/pageColumn2.sxwbin0 -> 5719 bytes
-rwxr-xr-xtestautomation/writer/optional/input/textframe/pageParagraph.sxwbin0 -> 5810 bytes
-rwxr-xr-xtestautomation/writer/optional/input/textframe/square.docbin0 -> 22016 bytes
-rwxr-xr-xtestautomation/writer/optional/input/textframe/through.sxwbin0 -> 5711 bytes
-rwxr-xr-xtestautomation/writer/optional/input/textframe/tight.docbin0 -> 19456 bytes
-rwxr-xr-xtestautomation/writer/optional/input/textframe/twopages.sxwbin0 -> 5793 bytes
-rwxr-xr-xtestautomation/writer/optional/input/textframe/wrap.sxwbin0 -> 5541 bytes
-rw-r--r--testautomation/writer/optional/input/undo/htmltest.sxgbin0 -> 5451 bytes
-rw-r--r--testautomation/writer/optional/input/undo/htmltest.sxwbin0 -> 5557 bytes
-rw-r--r--testautomation/writer/optional/input/undo/spellcheck_undo.odtbin0 -> 7159 bytes
-rwxr-xr-xtestautomation/writer/optional/input/verzeichnis/verzeichnis.sxwbin0 -> 2664060 bytes
-rwxr-xr-xtestautomation/writer/optional/input/verzeichnis/verzeichnisse.sxwbin0 -> 9501 bytes
-rw-r--r--testautomation/writer/optional/w_CJKCTLDependency.bas89
-rw-r--r--testautomation/writer/optional/w_alternative_text.bas59
-rw-r--r--testautomation/writer/optional/w_autocorrection.bas78
-rw-r--r--testautomation/writer/optional/w_autotext.bas61
-rw-r--r--testautomation/writer/optional/w_calculate.bas72
-rw-r--r--testautomation/writer/optional/w_chinesetranslate.bas106
-rw-r--r--testautomation/writer/optional/w_clipbrd.bas86
-rwxr-xr-xtestautomation/writer/optional/w_contextmenu.bas62
-rw-r--r--testautomation/writer/optional/w_drawing_tools.bas72
-rw-r--r--testautomation/writer/optional/w_dropdownLB.bas84
-rw-r--r--testautomation/writer/optional/w_fields.bas94
-rwxr-xr-xtestautomation/writer/optional/w_filter.bas59
-rw-r--r--testautomation/writer/optional/w_fontwork.bas69
-rwxr-xr-xtestautomation/writer/optional/w_formatcharacter.bas69
-rw-r--r--testautomation/writer/optional/w_formatpage.bas140
-rw-r--r--testautomation/writer/optional/w_formatparagraph.bas141
-rw-r--r--testautomation/writer/optional/w_hhConversion.bas139
-rw-r--r--testautomation/writer/optional/w_hyphenation.bas60
-rw-r--r--testautomation/writer/optional/w_insertgraphic.bas131
-rwxr-xr-xtestautomation/writer/optional/w_issuezilla_regression.bas62
-rw-r--r--testautomation/writer/optional/w_loadsave.bas63
-rw-r--r--testautomation/writer/optional/w_navigator.bas50
-rwxr-xr-xtestautomation/writer/optional/w_numbering.bas77
-rwxr-xr-xtestautomation/writer/optional/w_opt.bas85
-rw-r--r--testautomation/writer/optional/w_redlining.bas98
-rwxr-xr-xtestautomation/writer/optional/w_search.bas59
-rw-r--r--testautomation/writer/optional/w_section.bas97
-rwxr-xr-xtestautomation/writer/optional/w_shortcuts.bas75
-rw-r--r--testautomation/writer/optional/w_sorting.bas64
-rw-r--r--testautomation/writer/optional/w_spellcheck.bas63
-rw-r--r--testautomation/writer/optional/w_stylist.bas51
-rwxr-xr-xtestautomation/writer/optional/w_table.bas160
-rw-r--r--testautomation/writer/optional/w_textframes.bas85
-rw-r--r--testautomation/writer/optional/w_undo.bas73
-rwxr-xr-xtestautomation/writer/optional/ww_opt.bas70
-rwxr-xr-xtestautomation/writer/required/includes/w_001_.inc1110
-rw-r--r--testautomation/writer/required/includes/w_001a_.inc468
-rw-r--r--testautomation/writer/required/includes/w_001b_.inc844
-rwxr-xr-xtestautomation/writer/required/includes/w_002_.inc1399
-rwxr-xr-xtestautomation/writer/required/includes/w_003_.inc641
-rwxr-xr-xtestautomation/writer/required/includes/w_004_.inc1013
-rw-r--r--testautomation/writer/required/includes/w_004b_.inc965
-rwxr-xr-xtestautomation/writer/required/includes/w_005_.inc1230
-rwxr-xr-xtestautomation/writer/required/includes/w_005b_.inc1514
-rwxr-xr-xtestautomation/writer/required/includes/w_006_.inc292
-rwxr-xr-xtestautomation/writer/required/includes/w_007_.inc1310
-rwxr-xr-xtestautomation/writer/required/includes/w_008_.inc61
-rwxr-xr-xtestautomation/writer/required/includes/w_009_.inc95
-rwxr-xr-xtestautomation/writer/required/includes/w_010_.inc1242
-rw-r--r--testautomation/writer/required/includes/w_010_1.inc878
-rwxr-xr-xtestautomation/writer/required/includes/w_011_.inc787
-rwxr-xr-xtestautomation/writer/required/includes/w_020_.inc971
-rwxr-xr-xtestautomation/writer/required/input/bt.sxwbin0 -> 75639 bytes
-rwxr-xr-xtestautomation/writer/required/input/graphics/jolink.jpgbin0 -> 11686 bytes
-rwxr-xr-xtestautomation/writer/required/input/hangul.html32
-rwxr-xr-xtestautomation/writer/required/input/hangul.sxwbin0 -> 5861 bytes
-rwxr-xr-xtestautomation/writer/required/input/htmltest.sxgbin0 -> 5451 bytes
-rwxr-xr-xtestautomation/writer/required/input/htmltest.sxwbin0 -> 5557 bytes
-rwxr-xr-xtestautomation/writer/required/input/linguistik/001.odtbin0 -> 8932 bytes
-rwxr-xr-xtestautomation/writer/required/input/linguistik/003.odtbin0 -> 9361 bytes
-rwxr-xr-xtestautomation/writer/required/input/linguistik/007.odtbin0 -> 9814 bytes
-rwxr-xr-xtestautomation/writer/required/input/linguistik/031.odtbin0 -> 8303 bytes
-rwxr-xr-xtestautomation/writer/required/input/linguistik/033.odtbin0 -> 8607 bytes
-rwxr-xr-xtestautomation/writer/required/input/linguistik/034.odtbin0 -> 8044 bytes
-rwxr-xr-xtestautomation/writer/required/input/linguistik/036.odtbin0 -> 8345 bytes
-rwxr-xr-xtestautomation/writer/required/input/linguistik/039.odtbin0 -> 8739 bytes
-rwxr-xr-xtestautomation/writer/required/input/linguistik/045.odtbin0 -> 8717 bytes
-rwxr-xr-xtestautomation/writer/required/input/linguistik/046.odtbin0 -> 8952 bytes
-rwxr-xr-xtestautomation/writer/required/input/linguistik/048.odtbin0 -> 8249 bytes
-rwxr-xr-xtestautomation/writer/required/input/linguistik/049.odtbin0 -> 7970 bytes
-rwxr-xr-xtestautomation/writer/required/input/linguistik/055.odtbin0 -> 9422 bytes
-rwxr-xr-xtestautomation/writer/required/input/linguistik/sprache.odtbin0 -> 71268 bytes
-rwxr-xr-xtestautomation/writer/required/input/st1_1.sxwbin0 -> 132211 bytes
-rwxr-xr-xtestautomation/writer/required/w_updt.bas96
-rw-r--r--testautomation/writer/tools/includes/w_get_locale_strings.inc180
-rwxr-xr-xtestautomation/writer/tools/includes/w_locale_strings2.inc394
-rwxr-xr-xtestautomation/writer/tools/includes/w_tool1.inc1041
-rwxr-xr-xtestautomation/writer/tools/includes/w_tool2.inc416
-rwxr-xr-xtestautomation/writer/tools/includes/w_tool3.inc643
-rwxr-xr-xtestautomation/writer/tools/includes/w_tool4.inc210
-rw-r--r--testautomation/writer/tools/includes/w_tool5.inc235
-rwxr-xr-xtestautomation/writer/tools/includes/w_tool6.inc721
-rw-r--r--testautomation/writer/tools/includes/w_tool7.inc460
-rwxr-xr-xtestautomation/writer/tools/includes/w_tools.inc1343
-rw-r--r--testautomation/writer/tools/includes/w_tools_autocorrection.inc157
-rw-r--r--testautomation/writer/tools/includes/w_tools_drawing.inc68
-rw-r--r--testautomation/writer/tools/includes/w_tools_hyphenation.inc79
-rw-r--r--testautomation/writer/tools/includes/w_tools_undo.inc867
-rwxr-xr-xtestautomation/writer/tools/w_get_locale_strings.bas50
-rwxr-xr-xtestautomation/xml/optional/c_datapilot_pagefields.bas57
-rwxr-xr-xtestautomation/xml/optional/c_xml_print_scale.bas55
-rwxr-xr-xtestautomation/xml/optional/c_xml_scenario.bas54
-rwxr-xr-xtestautomation/xml/optional/calc_xml_7_export.bas67
-rwxr-xr-xtestautomation/xml/optional/ch_xml_japanese_candlestick.bas54
-rw-r--r--testautomation/xml/optional/docbook_losa.bas63
-rwxr-xr-xtestautomation/xml/optional/draw_xml_7_export.bas69
-rwxr-xr-xtestautomation/xml/optional/f_xml_save_ms_ole.bas83
-rwxr-xr-xtestautomation/xml/optional/impress_xml_7_export.bas60
-rw-r--r--testautomation/xml/optional/includes/c_datapilot_pagefields.inc175
-rw-r--r--testautomation/xml/optional/includes/c_xml_print_scale.inc403
-rw-r--r--testautomation/xml/optional/includes/c_xml_scenario.inc433
-rw-r--r--testautomation/xml/optional/includes/ch_xml_japanese_candlestick.inc143
-rw-r--r--testautomation/xml/optional/includes/docbook_001.inc121
-rwxr-xr-xtestautomation/xml/optional/includes/f_xml_save_ms_ole.inc251
-rwxr-xr-xtestautomation/xml/optional/includes/sxc7_01.inc696
-rwxr-xr-xtestautomation/xml/optional/includes/sxc7_02.inc254
-rwxr-xr-xtestautomation/xml/optional/includes/sxc7_03.inc332
-rwxr-xr-xtestautomation/xml/optional/includes/sxd7_01.inc634
-rwxr-xr-xtestautomation/xml/optional/includes/sxd7_02.inc313
-rwxr-xr-xtestautomation/xml/optional/includes/sxd7_03.inc313
-rwxr-xr-xtestautomation/xml/optional/includes/sxd7_04.inc315
-rwxr-xr-xtestautomation/xml/optional/includes/sxd7_05.inc259
-rwxr-xr-xtestautomation/xml/optional/includes/sxi7_01.inc563
-rwxr-xr-xtestautomation/xml/optional/includes/sxm7_01.inc818
-rwxr-xr-xtestautomation/xml/optional/includes/sxw7_01.inc867
-rwxr-xr-xtestautomation/xml/optional/includes/sxw7_01a.inc451
-rwxr-xr-xtestautomation/xml/optional/includes/sxw7_02.inc688
-rwxr-xr-xtestautomation/xml/optional/includes/sxw7_03.inc458
-rwxr-xr-xtestautomation/xml/optional/includes/w_xml_vertical_alignment.inc141
-rwxr-xr-xtestautomation/xml/optional/input/calc/ExcelXML/cell_pattern.xml215
-rwxr-xr-xtestautomation/xml/optional/input/calc/ExcelXML/cellstyle.xml254
-rwxr-xr-xtestautomation/xml/optional/input/calc/ExcelXML/conditionalformat.xml583
-rwxr-xr-xtestautomation/xml/optional/input/calc/ExcelXML/dataformat.xml307
-rwxr-xr-xtestautomation/xml/optional/input/calc/ExcelXML/dataformat2.xml504
-rwxr-xr-xtestautomation/xml/optional/input/calc/ExcelXML/datarange.xml1314
-rwxr-xr-xtestautomation/xml/optional/input/calc/ExcelXML/font.xml559
-rwxr-xr-xtestautomation/xml/optional/input/calc/ExcelXML/formula.xml213
-rwxr-xr-xtestautomation/xml/optional/input/calc/ExcelXML/headerfooter.xml97
-rwxr-xr-xtestautomation/xml/optional/input/calc/ExcelXML/merge.xml126
-rwxr-xr-xtestautomation/xml/optional/input/calc/ExcelXML/pagebreak.xml154
-rwxr-xr-xtestautomation/xml/optional/input/calc/ExcelXML/pagesheet.xml140
-rwxr-xr-xtestautomation/xml/optional/input/calc/ExcelXML/rowcolumn.xml88
-rwxr-xr-xtestautomation/xml/optional/input/calc/ExcelXML/solvsamp.xml9881
-rwxr-xr-xtestautomation/xml/optional/input/calc/ooo10/NatNumtest.sxcbin0 -> 9548 bytes
-rwxr-xr-xtestautomation/xml/optional/input/calc/ooo10/alien_attributes.sxcbin0 -> 5782 bytes
-rwxr-xr-xtestautomation/xml/optional/input/calc/ooo10/feat906.sxcbin0 -> 7568 bytes
-rwxr-xr-xtestautomation/xml/optional/input/calc/ooo10/japan.sxcbin0 -> 9864 bytes
-rwxr-xr-xtestautomation/xml/optional/input/calc/ooo10/korean.sxcbin0 -> 7728 bytes
-rwxr-xr-xtestautomation/xml/optional/input/calc/ooo10/pagefields_datapilot1.sxcbin0 -> 9742 bytes
-rwxr-xr-xtestautomation/xml/optional/input/calc/ooo10/pagefields_datapilot2.sxcbin0 -> 9748 bytes
-rwxr-xr-xtestautomation/xml/optional/input/calc/ooo10/pagefields_datapilot3.sxcbin0 -> 9744 bytes
-rwxr-xr-xtestautomation/xml/optional/input/calc/ooo10/pagefields_datapilot4.sxcbin0 -> 9740 bytes
-rwxr-xr-xtestautomation/xml/optional/input/calc/ooo10/simple_c.sxcbin0 -> 10931 bytes
-rwxr-xr-xtestautomation/xml/optional/input/calc/ooo10/trad_c.sxcbin0 -> 8791 bytes
-rwxr-xr-xtestautomation/xml/optional/input/calc/so_binary/cellformats1.sdcbin0 -> 59392 bytes
-rwxr-xr-xtestautomation/xml/optional/input/calc/so_binary/cellformats2.sdcbin0 -> 79872 bytes
-rwxr-xr-xtestautomation/xml/optional/input/calc/so_binary/cellformats2b.sdcbin0 -> 75264 bytes
-rwxr-xr-xtestautomation/xml/optional/input/calc/so_binary/cellformats3.sdcbin0 -> 57344 bytes
-rwxr-xr-xtestautomation/xml/optional/input/calc/so_binary/cellformats5.sdcbin0 -> 62976 bytes
-rwxr-xr-xtestautomation/xml/optional/input/calc/so_binary/cellformats6.sdcbin0 -> 64000 bytes
-rwxr-xr-xtestautomation/xml/optional/input/calc/so_binary/chart_export.sdcbin0 -> 294912 bytes
-rwxr-xr-xtestautomation/xml/optional/input/calc/so_binary/conditional_formatting.sdcbin0 -> 20480 bytes
-rwxr-xr-xtestautomation/xml/optional/input/calc/so_binary/controls01.sdcbin0 -> 42496 bytes
-rwxr-xr-xtestautomation/xml/optional/input/calc/so_binary/database_ranges.sdcbin0 -> 25088 bytes
-rwxr-xr-xtestautomation/xml/optional/input/calc/so_binary/filter_and_subtotals1.sdcbin0 -> 23552 bytes
-rwxr-xr-xtestautomation/xml/optional/input/calc/so_binary/filter_and_subtotals4.sdcbin0 -> 19456 bytes
-rwxr-xr-xtestautomation/xml/optional/input/calc/so_binary/matrixformula_and_notes.sdcbin0 -> 24064 bytes
-rwxr-xr-xtestautomation/xml/optional/input/calc/so_binary/password3.sdcbin0 -> 76800 bytes
-rwxr-xr-xtestautomation/xml/optional/input/docbook/informaltable.001.xml38
-rwxr-xr-xtestautomation/xml/optional/input/docbook/informaltable.002.xml50
-rwxr-xr-xtestautomation/xml/optional/input/docbook/informaltable.003.xml52
-rwxr-xr-xtestautomation/xml/optional/input/docbook/informaltable.004.xml49
-rwxr-xr-xtestautomation/xml/optional/input/docbook/informaltable.005.xml38
-rwxr-xr-xtestautomation/xml/optional/input/docbook/informaltable.006.xml48
-rwxr-xr-xtestautomation/xml/optional/input/docbook/informaltable.007.xml61
-rwxr-xr-xtestautomation/xml/optional/input/docbook/informaltable.008.xml52
-rwxr-xr-xtestautomation/xml/optional/input/docbook/informaltable.009.xml46
-rwxr-xr-xtestautomation/xml/optional/input/docbook/informaltable.010.xml45
-rwxr-xr-xtestautomation/xml/optional/input/docbook/informaltable.011.xml44
-rwxr-xr-xtestautomation/xml/optional/input/docbook/informaltable.012.xml36
-rwxr-xr-xtestautomation/xml/optional/input/docbook/informaltable.013.xml29
-rwxr-xr-xtestautomation/xml/optional/input/docbook/informaltable.014.xml54
-rwxr-xr-xtestautomation/xml/optional/input/docbook/inline.001.xml27
-rwxr-xr-xtestautomation/xml/optional/input/docbook/itemizedlist.001.xml27
-rwxr-xr-xtestautomation/xml/optional/input/docbook/itemizedlist.002.xml38
-rwxr-xr-xtestautomation/xml/optional/input/docbook/itemizedlist.003.xml53
-rwxr-xr-xtestautomation/xml/optional/input/docbook/link.001.xml36
-rwxr-xr-xtestautomation/xml/optional/input/docbook/literallayout.001.xml19
-rwxr-xr-xtestautomation/xml/optional/input/docbook/literallayout.002.xml21
-rwxr-xr-xtestautomation/xml/optional/input/docbook/literallayout.003.xml19
-rwxr-xr-xtestautomation/xml/optional/input/docbook/lot.001.xml56
-rwxr-xr-xtestautomation/xml/optional/input/docbook/mathml.001.xml19
-rwxr-xr-xtestautomation/xml/optional/input/docbook/methodsynopsis.001.xml55
-rwxr-xr-xtestautomation/xml/optional/input/docbook/note.001.xml18
-rwxr-xr-xtestautomation/xml/optional/input/docbook/olink.001.xml22
-rwxr-xr-xtestautomation/xml/optional/input/docbook/orderedlist.001.xml38
-rwxr-xr-xtestautomation/xml/optional/input/docbook/orderedlist.002.xml38
-rwxr-xr-xtestautomation/xml/optional/input/docbook/procedure.001.xml44
-rwxr-xr-xtestautomation/xml/optional/input/docbook/procedure.003.xml19
-rwxr-xr-xtestautomation/xml/optional/input/docbook/productionset.001.xml66
-rwxr-xr-xtestautomation/xml/optional/input/docbook/productionset.002.xml27
-rwxr-xr-xtestautomation/xml/optional/input/docbook/productionset.003.xml30
-rwxr-xr-xtestautomation/xml/optional/input/docbook/productionset.004.xml53
-rwxr-xr-xtestautomation/xml/optional/input/docbook/productionset.005.xml89
-rwxr-xr-xtestautomation/xml/optional/input/docbook/programlisting.001.xml19
-rwxr-xr-xtestautomation/xml/optional/input/docbook/programlisting.002.xml19
-rwxr-xr-xtestautomation/xml/optional/input/docbook/programlisting.003.xml45
-rwxr-xr-xtestautomation/xml/optional/input/docbook/programlistingco.001.xml78
-rwxr-xr-xtestautomation/xml/optional/input/docbook/programlistingco.002.xml34
-rwxr-xr-xtestautomation/xml/optional/input/docbook/qandaset.001.xml45
-rwxr-xr-xtestautomation/xml/optional/input/docbook/qandaset.002.xml35
-rwxr-xr-xtestautomation/xml/optional/input/docbook/qandaset.003.xml92
-rwxr-xr-xtestautomation/xml/optional/input/docbook/refentry.001.xml25
-rwxr-xr-xtestautomation/xml/optional/input/docbook/refentry.002.xml29
-rwxr-xr-xtestautomation/xml/optional/input/docbook/refentry.003.xml65
-rwxr-xr-xtestautomation/xml/optional/input/docbook/refentry.004.xml68
-rwxr-xr-xtestautomation/xml/optional/input/docbook/reference.001.xml59
-rwxr-xr-xtestautomation/xml/optional/input/docbook/revhistory.001.xml41
-rwxr-xr-xtestautomation/xml/optional/input/docbook/screen.001.xml19
-rwxr-xr-xtestautomation/xml/optional/input/docbook/sect1.001.xml53
-rwxr-xr-xtestautomation/xml/optional/input/docbook/sect1.002.xml56
-rwxr-xr-xtestautomation/xml/optional/input/docbook/section.001.xml53
-rwxr-xr-xtestautomation/xml/optional/input/docbook/section.002.xml56
-rwxr-xr-xtestautomation/xml/optional/input/docbook/section.003.xml20
-rwxr-xr-xtestautomation/xml/optional/input/docbook/segmentedlist.001.xml21
-rwxr-xr-xtestautomation/xml/optional/input/docbook/segmentedlist.002.xml23
-rwxr-xr-xtestautomation/xml/optional/input/docbook/set.001.xml31
-rwxr-xr-xtestautomation/xml/optional/input/docbook/stamp.001.xml26
-rwxr-xr-xtestautomation/xml/optional/input/docbook/stamp.002.xml31
-rwxr-xr-xtestautomation/xml/optional/input/docbook/stamp.003.xml30
-rwxr-xr-xtestautomation/xml/optional/input/docbook/stamp.004.xml30
-rwxr-xr-xtestautomation/xml/optional/input/docbook/stamp.005.xml28
-rwxr-xr-xtestautomation/xml/optional/input/docbook/stamp.006.xml29
-rwxr-xr-xtestautomation/xml/optional/input/docbook/stamp.007.xml29
-rwxr-xr-xtestautomation/xml/optional/input/docbook/stamp.008.xml27
-rwxr-xr-xtestautomation/xml/optional/input/docbook/stamp.009.xml28
-rwxr-xr-xtestautomation/xml/optional/input/docbook/stamp.010.xml28
-rwxr-xr-xtestautomation/xml/optional/input/docbook/stamp.011.xml31
-rwxr-xr-xtestautomation/xml/optional/input/docbook/stamp.012.xml41
-rwxr-xr-xtestautomation/xml/optional/input/docbook/svg.001.xml38
-rwxr-xr-xtestautomation/xml/optional/input/docbook/svg.002.xml31
-rwxr-xr-xtestautomation/xml/optional/input/docbook/table.001.xml31
-rwxr-xr-xtestautomation/xml/optional/input/docbook/table.002.xml37
-rwxr-xr-xtestautomation/xml/optional/input/docbook/table.003.xml38
-rwxr-xr-xtestautomation/xml/optional/input/docbook/table.004.xml30
-rwxr-xr-xtestautomation/xml/optional/input/docbook/table.005.xml35
-rwxr-xr-xtestautomation/xml/optional/input/docbook/table.006.xml207
-rwxr-xr-xtestautomation/xml/optional/input/docbook/template.xml17
-rwxr-xr-xtestautomation/xml/optional/input/docbook/toc.001.xml63
-rwxr-xr-xtestautomation/xml/optional/input/docbook/ulink.001.xml23
-rwxr-xr-xtestautomation/xml/optional/input/docbook/variablelist.001.xml64
-rwxr-xr-xtestautomation/xml/optional/input/docbook/variablelist.002.xml35
-rwxr-xr-xtestautomation/xml/optional/input/docbook/variablelist.003.xml26
-rwxr-xr-xtestautomation/xml/optional/input/docbook/variablelist.004.xml26
-rwxr-xr-xtestautomation/xml/optional/input/docbook/xref.001.xml98
-rwxr-xr-xtestautomation/xml/optional/input/docbook/xrefstyle.001.xml19
-rwxr-xr-xtestautomation/xml/optional/input/for_xhtml_export/Table-XHTML.odtbin0 -> 6572 bytes
-rwxr-xr-xtestautomation/xml/optional/input/for_xhtml_export/border.odsbin0 -> 6700 bytes
-rwxr-xr-xtestautomation/xml/optional/input/for_xhtml_export/bullets.sxwbin0 -> 16074 bytes
-rwxr-xr-xtestautomation/xml/optional/input/for_xhtml_export/bullets_14364.sdwbin0 -> 19456 bytes
-rwxr-xr-xtestautomation/xml/optional/input/for_xhtml_export/p_in_h.odtbin0 -> 9860 bytes
-rwxr-xr-xtestautomation/xml/optional/input/for_xhtml_export/presentation_xhtml.odpbin0 -> 83785 bytes
-rwxr-xr-xtestautomation/xml/optional/input/for_xhtml_export/span_split.odtbin0 -> 6651 bytes
-rwxr-xr-xtestautomation/xml/optional/input/framework/ms_ole/excelOLE.docbin0 -> 26112 bytes
-rwxr-xr-xtestautomation/xml/optional/input/framework/ms_ole/excelOLE.pptbin0 -> 35840 bytes
-rwxr-xr-xtestautomation/xml/optional/input/framework/ms_ole/mathOLE.docbin0 -> 10752 bytes
-rwxr-xr-xtestautomation/xml/optional/input/framework/ms_ole/mathOLE.pptbin0 -> 31232 bytes
-rwxr-xr-xtestautomation/xml/optional/input/framework/ms_ole/mathOLE.xlsbin0 -> 9728 bytes
-rwxr-xr-xtestautomation/xml/optional/input/framework/ms_ole/pptOLE.docbin0 -> 22016 bytes
-rwxr-xr-xtestautomation/xml/optional/input/framework/ms_ole/pptOLE.xlsbin0 -> 14848 bytes
-rwxr-xr-xtestautomation/xml/optional/input/framework/ms_ole/wordOLE.pptbin0 -> 33792 bytes
-rwxr-xr-xtestautomation/xml/optional/input/framework/ms_ole/wordOLE.xlsbin0 -> 27136 bytes
-rwxr-xr-xtestautomation/xml/optional/input/graphics/ooo10/alien.sxdbin0 -> 6016 bytes
-rwxr-xr-xtestautomation/xml/optional/input/graphics/ooo10/alien.sxibin0 -> 6182 bytes
-rwxr-xr-xtestautomation/xml/optional/input/graphics/ooo10/chin.sxdbin0 -> 6931 bytes
-rwxr-xr-xtestautomation/xml/optional/input/graphics/ooo10/chin.sxibin0 -> 8119 bytes
-rwxr-xr-xtestautomation/xml/optional/input/graphics/ooo10/japan.sxdbin0 -> 6961 bytes
-rwxr-xr-xtestautomation/xml/optional/input/graphics/ooo10/japan.sxibin0 -> 8119 bytes
-rwxr-xr-xtestautomation/xml/optional/input/graphics/ooo10/korean.sxdbin0 -> 6916 bytes
-rwxr-xr-xtestautomation/xml/optional/input/graphics/ooo10/korean.sxibin0 -> 8207 bytes
-rwxr-xr-xtestautomation/xml/optional/input/graphics/ooo10/trad_chin.sxdbin0 -> 6887 bytes
-rwxr-xr-xtestautomation/xml/optional/input/graphics/ooo10/trad_chin.sxibin0 -> 8063 bytes
-rwxr-xr-xtestautomation/xml/optional/input/graphics/so_bin/18092.sdabin0 -> 38912 bytes
-rwxr-xr-xtestautomation/xml/optional/input/graphics/so_bin/18093.sdabin0 -> 30208 bytes
-rwxr-xr-xtestautomation/xml/optional/input/graphics/so_bin/18094.sdabin0 -> 32256 bytes
-rwxr-xr-xtestautomation/xml/optional/input/graphics/so_bin/18098.sdabin0 -> 32256 bytes
-rwxr-xr-xtestautomation/xml/optional/input/graphics/so_bin/18099.sdabin0 -> 31232 bytes
-rwxr-xr-xtestautomation/xml/optional/input/graphics/so_bin/18100.sdabin0 -> 31744 bytes
-rwxr-xr-xtestautomation/xml/optional/input/graphics/so_bin/18101.sdabin0 -> 28672 bytes
-rwxr-xr-xtestautomation/xml/optional/input/graphics/so_bin/18102.sdabin0 -> 30720 bytes
-rwxr-xr-xtestautomation/xml/optional/input/graphics/so_bin/18106.sdabin0 -> 30720 bytes
-rwxr-xr-xtestautomation/xml/optional/input/graphics/so_bin/18107.sdabin0 -> 31232 bytes
-rwxr-xr-xtestautomation/xml/optional/input/graphics/so_bin/18108-18115.sdabin0 -> 33280 bytes
-rwxr-xr-xtestautomation/xml/optional/input/graphics/so_bin/18116.sdabin0 -> 48640 bytes
-rwxr-xr-xtestautomation/xml/optional/input/graphics/so_bin/18117.sdabin0 -> 30720 bytes
-rwxr-xr-xtestautomation/xml/optional/input/graphics/so_bin/18118.sdabin0 -> 31232 bytes
-rwxr-xr-xtestautomation/xml/optional/input/graphics/so_bin/18119.sdabin0 -> 32256 bytes
-rwxr-xr-xtestautomation/xml/optional/input/graphics/so_bin/18120.sdabin0 -> 30720 bytes
-rwxr-xr-xtestautomation/xml/optional/input/graphics/so_bin/18121-18122.sdabin0 -> 32256 bytes
-rwxr-xr-xtestautomation/xml/optional/input/graphics/so_bin/18123.sdabin0 -> 33280 bytes
-rwxr-xr-xtestautomation/xml/optional/input/graphics/so_bin/18124.sdabin0 -> 31232 bytes
-rwxr-xr-xtestautomation/xml/optional/input/graphics/so_bin/18125.sdabin0 -> 32256 bytes
-rwxr-xr-xtestautomation/xml/optional/input/graphics/so_bin/18126.sdabin0 -> 31744 bytes
-rwxr-xr-xtestautomation/xml/optional/input/graphics/so_bin/18127-18128.sdabin0 -> 29184 bytes
-rwxr-xr-xtestautomation/xml/optional/input/graphics/so_bin/18129.sdabin0 -> 31744 bytes
-rwxr-xr-xtestautomation/xml/optional/input/graphics/so_bin/18130-18131.sdabin0 -> 31232 bytes
-rwxr-xr-xtestautomation/xml/optional/input/graphics/so_bin/18132.sdabin0 -> 36352 bytes
-rwxr-xr-xtestautomation/xml/optional/input/graphics/so_bin/18133-18134.sdabin0 -> 30208 bytes
-rwxr-xr-xtestautomation/xml/optional/input/graphics/so_bin/18135.sdabin0 -> 29184 bytes
-rwxr-xr-xtestautomation/xml/optional/input/graphics/so_bin/18136.sdabin0 -> 31232 bytes
-rwxr-xr-xtestautomation/xml/optional/input/graphics/so_bin/18137.sdabin0 -> 36352 bytes
-rwxr-xr-xtestautomation/xml/optional/input/graphics/so_bin/18138.sdabin0 -> 30208 bytes
-rwxr-xr-xtestautomation/xml/optional/input/graphics/so_bin/18139-18145.sdabin0 -> 74752 bytes
-rwxr-xr-xtestautomation/xml/optional/input/graphics/so_bin/18244.sdabin0 -> 30208 bytes
-rwxr-xr-xtestautomation/xml/optional/input/graphics/so_bin/18245.sdabin0 -> 30720 bytes
-rwxr-xr-xtestautomation/xml/optional/input/graphics/so_bin/18246-18250.sdabin0 -> 32768 bytes
-rwxr-xr-xtestautomation/xml/optional/input/graphics/so_bin/18464-18467.sdabin0 -> 30208 bytes
-rwxr-xr-xtestautomation/xml/optional/input/graphics/so_bin/18520-18524.sdabin0 -> 31744 bytes
-rwxr-xr-xtestautomation/xml/optional/input/graphics/so_bin/18526-18531.sdabin0 -> 32256 bytes
-rwxr-xr-xtestautomation/xml/optional/input/graphics/so_bin/18537-18544.sdabin0 -> 32768 bytes
-rwxr-xr-xtestautomation/xml/optional/input/graphics/so_bin/18629-18632.sdabin0 -> 28160 bytes
-rwxr-xr-xtestautomation/xml/optional/input/graphics/so_bin/18633.sdabin0 -> 28672 bytes
-rwxr-xr-xtestautomation/xml/optional/input/graphics/so_bin/18634.sdabin0 -> 29184 bytes
-rwxr-xr-xtestautomation/xml/optional/input/graphics/so_bin/18635.sdabin0 -> 27648 bytes
-rwxr-xr-xtestautomation/xml/optional/input/graphics/so_bin/18636.sdabin0 -> 29184 bytes
-rwxr-xr-xtestautomation/xml/optional/input/graphics/so_bin/19542-19544.sdabin0 -> 34304 bytes
-rwxr-xr-xtestautomation/xml/optional/input/graphics/so_bin/19545-19547.sdabin0 -> 33792 bytes
-rwxr-xr-xtestautomation/xml/optional/input/graphics/so_bin/19548-19553.sdabin0 -> 33792 bytes
-rwxr-xr-xtestautomation/xml/optional/input/graphics/so_bin/19554-19557.sdabin0 -> 36352 bytes
-rwxr-xr-xtestautomation/xml/optional/input/graphics/so_bin/19558-19560.sdabin0 -> 31232 bytes
-rwxr-xr-xtestautomation/xml/optional/input/graphics/so_bin/Autolayout.sddbin0 -> 130048 bytes
-rwxr-xr-xtestautomation/xml/optional/input/graphics/so_bin/Effects_slides.sddbin0 -> 53760 bytes
-rwxr-xr-xtestautomation/xml/optional/input/graphics/so_bin/Effects_text_objects.sddbin0 -> 72192 bytes
-rwxr-xr-xtestautomation/xml/optional/input/graphics/so_bin/Objects.sddbin0 -> 89088 bytes
-rwxr-xr-xtestautomation/xml/optional/input/graphics/so_bin/Text.sddbin0 -> 59392 bytes
-rwxr-xr-xtestautomation/xml/optional/input/math/asian/jp_math.sxmbin0 -> 3105 bytes
-rwxr-xr-xtestautomation/xml/optional/input/math/asian/ko_math.sxmbin0 -> 3062 bytes
-rwxr-xr-xtestautomation/xml/optional/input/math/asian/zh_cn_math.sxmbin0 -> 2952 bytes
-rwxr-xr-xtestautomation/xml/optional/input/math/asian/zh_tw_math.sxmbin0 -> 3143 bytes
-rwxr-xr-xtestautomation/xml/optional/input/math/so_binary/1_unary-binary.smfbin0 -> 5120 bytes
-rwxr-xr-xtestautomation/xml/optional/input/math/so_binary/2_relations.smfbin0 -> 5632 bytes
-rwxr-xr-xtestautomation/xml/optional/input/math/so_binary/3_set_operations.smfbin0 -> 5632 bytes
-rwxr-xr-xtestautomation/xml/optional/input/math/so_binary/4_functions.smfbin0 -> 5632 bytes
-rwxr-xr-xtestautomation/xml/optional/input/math/so_binary/5_operators.smfbin0 -> 5120 bytes
-rwxr-xr-xtestautomation/xml/optional/input/math/so_binary/6_attributes.smfbin0 -> 5632 bytes
-rwxr-xr-xtestautomation/xml/optional/input/math/so_binary/7_others.smfbin0 -> 5120 bytes
-rwxr-xr-xtestautomation/xml/optional/input/math/so_binary/8_brackets.smfbin0 -> 5632 bytes
-rwxr-xr-xtestautomation/xml/optional/input/math/so_binary/9_formats.smfbin0 -> 5632 bytes
-rwxr-xr-xtestautomation/xml/optional/input/math/so_binary/all_commands.smfbin0 -> 8192 bytes
-rwxr-xr-xtestautomation/xml/optional/input/math/so_binary/all_commands_star_math_3.0.smfbin0 -> 8192 bytes
-rwxr-xr-xtestautomation/xml/optional/input/math/so_binary/all_selections.smfbin0 -> 8192 bytes
-rwxr-xr-xtestautomation/xml/optional/input/math/so_binary/annuities.smfbin0 -> 5632 bytes
-rwxr-xr-xtestautomation/xml/optional/input/math/so_binary/cauchy.smfbin0 -> 5632 bytes
-rwxr-xr-xtestautomation/xml/optional/input/math/so_binary/chemicalelement.smfbin0 -> 5120 bytes
-rwxr-xr-xtestautomation/xml/optional/input/math/so_binary/definitionstraightline.smfbin0 -> 20992 bytes
-rwxr-xr-xtestautomation/xml/optional/input/math/so_binary/effectiveannualinterestrate.smfbin0 -> 5120 bytes
-rwxr-xr-xtestautomation/xml/optional/input/math/so_binary/hamiltonoperator.smfbin0 -> 6144 bytes
-rwxr-xr-xtestautomation/xml/optional/input/math/so_binary/investmentreturns.smfbin0 -> 5632 bytes
-rwxr-xr-xtestautomation/xml/optional/input/math/so_binary/lawoferrorpropagation.smfbin0 -> 36864 bytes
-rwxr-xr-xtestautomation/xml/optional/input/math/so_binary/limes.smfbin0 -> 21504 bytes
-rwxr-xr-xtestautomation/xml/optional/input/math/so_binary/linearregression.smfbin0 -> 5632 bytes
-rwxr-xr-xtestautomation/xml/optional/input/math/so_binary/maxwell.smfbin0 -> 6144 bytes
-rwxr-xr-xtestautomation/xml/optional/input/math/so_binary/scalarproduct.smfbin0 -> 5632 bytes
-rwxr-xr-xtestautomation/xml/optional/input/math/so_binary/sinus.smfbin0 -> 5120 bytes
-rwxr-xr-xtestautomation/xml/optional/input/math/so_binary/squareroot.smfbin0 -> 5632 bytes
-rwxr-xr-xtestautomation/xml/optional/input/math/so_binary/standarddeviation.smfbin0 -> 5632 bytes
-rwxr-xr-xtestautomation/xml/optional/input/math/so_binary/vectorproduct.smfbin0 -> 5632 bytes
-rwxr-xr-xtestautomation/xml/optional/input/writer/bookmark_script_note.sdwbin0 -> 18944 bytes
-rwxr-xr-xtestautomation/xml/optional/input/writer/characters.sdwbin0 -> 16896 bytes
-rwxr-xr-xtestautomation/xml/optional/input/writer/events_to_objects.sdwbin0 -> 65024 bytes
-rwxr-xr-xtestautomation/xml/optional/input/writer/feat1318.sxwbin0 -> 6096 bytes
-rwxr-xr-xtestautomation/xml/optional/input/writer/feat476.sxwbin0 -> 5891 bytes
-rwxr-xr-xtestautomation/xml/optional/input/writer/fields.sdwbin0 -> 37376 bytes
-rwxr-xr-xtestautomation/xml/optional/input/writer/fiscus.sxwbin0 -> 5666 bytes
-rwxr-xr-xtestautomation/xml/optional/input/writer/fiscus2.sxwbin0 -> 5840 bytes
-rwxr-xr-xtestautomation/xml/optional/input/writer/footnotes.sdwbin0 -> 30208 bytes
-rwxr-xr-xtestautomation/xml/optional/input/writer/frames.sdwbin0 -> 24064 bytes
-rwxr-xr-xtestautomation/xml/optional/input/writer/hyperlinks.sdwbin0 -> 10240 bytes
-rwxr-xr-xtestautomation/xml/optional/input/writer/index_biblio.sdwbin0 -> 24576 bytes
-rwxr-xr-xtestautomation/xml/optional/input/writer/index_most.sdwbin0 -> 24576 bytes
-rwxr-xr-xtestautomation/xml/optional/input/writer/indexes_alpha.sdwbin0 -> 37376 bytes
-rwxr-xr-xtestautomation/xml/optional/input/writer/jp_text.sxwbin0 -> 6133 bytes
-rwxr-xr-xtestautomation/xml/optional/input/writer/ko_text.sxwbin0 -> 6292 bytes
-rwxr-xr-xtestautomation/xml/optional/input/writer/pages.sdwbin0 -> 32768 bytes
-rwxr-xr-xtestautomation/xml/optional/input/writer/paragraph01.sdwbin0 -> 25088 bytes
-rwxr-xr-xtestautomation/xml/optional/input/writer/paragraph02.sdwbin0 -> 19456 bytes
-rwxr-xr-xtestautomation/xml/optional/input/writer/section_main.sdwbin0 -> 32256 bytes
-rwxr-xr-xtestautomation/xml/optional/input/writer/verttoline1.docbin0 -> 25600 bytes
-rwxr-xr-xtestautomation/xml/optional/input/writer/zh_cn_text.sxwbin0 -> 5599 bytes
-rwxr-xr-xtestautomation/xml/optional/input/writer/zh_tw_text.sxwbin0 -> 5545 bytes
-rwxr-xr-xtestautomation/xml/optional/math_xml_7_export.bas91
-rwxr-xr-xtestautomation/xml/optional/w_xml_vertical_alignment.bas56
-rwxr-xr-xtestautomation/xml/optional/writer_xml_7_export.bas67
-rwxr-xr-xtestautomation/xml/required/includes/oasis_graphics_01.inc597
-rwxr-xr-xtestautomation/xml/required/input/graphics/alien_attributes/alien_attributes_presentation.odpbin0 -> 7351 bytes
-rwxr-xr-xtestautomation/xml/required/input/graphics/header_footer/allheaderfooter_fixed.odpbin0 -> 9161 bytes
-rwxr-xr-xtestautomation/xml/required/input/graphics/header_footer/noheaderfooter.odpbin0 -> 10143 bytes
-rwxr-xr-xtestautomation/xml/required/input/graphics/header_footer/nomasterelements.odpbin0 -> 9485 bytes
-rwxr-xr-xtestautomation/xml/required/input/graphics/header_footer/someheaderfooter_varible.odpbin0 -> 10190 bytes
-rwxr-xr-xtestautomation/xml/required/oasis_graphics_update.bas58
-rwxr-xr-xtestautomation/xml/tools/includes/itools1.inc60
-rwxr-xr-xtestautomation/xml/tools/includes/xmltool1.inc103
-rw-r--r--testgraphical/document-pool/demo/CurrentTime.odsbin0 -> 8299 bytes
-rw-r--r--testgraphical/document-pool/demo/knownissues.xcl8
-rw-r--r--testgraphical/document-pool/singletest/eis-test.odtbin0 -> 9623 bytes
-rw-r--r--testgraphical/prechecks/makefile.mk56
-rw-r--r--testgraphical/prechecks/softwaretests.pl564
-rwxr-xr-xtestgraphical/prj/build.lst7
-rwxr-xr-xtestgraphical/prj/d.lst0
-rw-r--r--testgraphical/qa/graphical/Test.java113
-rw-r--r--testgraphical/qa/graphical/makefile.mk57
-rw-r--r--testgraphical/references/unxlngi/demo/CurrentTime.ods.pdfbin0 -> 13916 bytes
-rw-r--r--testgraphical/references/unxlngi/demo/CurrentTime.ods.ps576
-rw-r--r--testgraphical/references/unxlngi/singletest/eis-test.odt.pdfbin0 -> 14356 bytes
-rw-r--r--testgraphical/references/unxlngi/singletest/eis-test.odt.ps565
-rw-r--r--testgraphical/references/unxlngi/singletest/tolerance.ini_4
-rw-r--r--testgraphical/references/unxsoli/singletest/eis-test.odt.pdfbin0 -> 9162 bytes
-rw-r--r--testgraphical/references/wntmsci/demo/CurrentTime.ods.pdfbin0 -> 13916 bytes
-rw-r--r--testgraphical/references/wntmsci/demo/CurrentTime.ods.ps499
-rw-r--r--testgraphical/references/wntmsci/singletest/eis-test.odt.pdfbin0 -> 9142 bytes
-rw-r--r--testgraphical/references/wntmsci/singletest/eis-test.odt.ps1984
-rw-r--r--testgraphical/source/CallExternals.pm539
-rw-r--r--testgraphical/source/ConvwatchHelper.pm574
-rw-r--r--testgraphical/source/compare.pl408
-rw-r--r--testgraphical/source/cwstestresult.pl208
-rw-r--r--testgraphical/source/cwstestresulthelper.pm268
-rw-r--r--testgraphical/source/dbhelper.pm209
-rw-r--r--testgraphical/source/filehelper.pm358
-rw-r--r--testgraphical/source/fill_documents_loop.pl423
-rw-r--r--testgraphical/source/graphical_compare.pm586
-rw-r--r--testgraphical/source/loghelper.pm94
-rw-r--r--testgraphical/source/makefile.mk112
-rw-r--r--testgraphical/source/oshelper.pm110
-rw-r--r--testgraphical/source/solarenvhelper.pm63
-rw-r--r--testgraphical/source/stringhelper.pm69
-rw-r--r--testgraphical/source/timehelper.pm99
-rw-r--r--testgraphical/ui/java/ConvwatchGUIProject/build.xml74
-rw-r--r--testgraphical/ui/java/ConvwatchGUIProject/dist/ConvwatchGUIProject.jarbin0 -> 28271 bytes
-rw-r--r--testgraphical/ui/java/ConvwatchGUIProject/makefile.mk71
-rw-r--r--testgraphical/ui/java/ConvwatchGUIProject/manifest.mf3
-rw-r--r--testgraphical/ui/java/ConvwatchGUIProject/nbproject/build-impl.xml805
-rw-r--r--testgraphical/ui/java/ConvwatchGUIProject/nbproject/genfiles.properties9
-rw-r--r--testgraphical/ui/java/ConvwatchGUIProject/nbproject/private/config.properties0
-rw-r--r--testgraphical/ui/java/ConvwatchGUIProject/nbproject/private/private.properties8
-rw-r--r--testgraphical/ui/java/ConvwatchGUIProject/nbproject/private/private.xml4
-rw-r--r--testgraphical/ui/java/ConvwatchGUIProject/nbproject/project.properties72
-rw-r--r--testgraphical/ui/java/ConvwatchGUIProject/nbproject/project.xml15
-rw-r--r--testgraphical/ui/java/ConvwatchGUIProject/src/ConvwatchGUI.form286
-rw-r--r--testgraphical/ui/java/ConvwatchGUIProject/src/ConvwatchGUI.java535
-rw-r--r--testgraphical/ui/java/ConvwatchGUIProject/src/IniFile.java718
-rw-r--r--testgraphical/ui/java/makefile.mk53
-rw-r--r--testgraphical/util/makefile.pmk34
-rw-r--r--testtools/com/sun/star/comp/bridge/CurrentContextChecker.java81
-rw-r--r--testtools/com/sun/star/comp/bridge/TestComponent.java1332
-rw-r--r--testtools/com/sun/star/comp/bridge/TestComponentMain.java158
-rw-r--r--testtools/com/sun/star/comp/bridge/makefile.mk61
-rw-r--r--testtools/com/sun/star/comp/bridge/manifest2
-rw-r--r--testtools/inc/makefile.mk47
-rw-r--r--testtools/inc/pch/precompiled_testtools.cxx29
-rw-r--r--testtools/inc/pch/precompiled_testtools.hxx32
-rw-r--r--testtools/prj/build.lst8
-rw-r--r--testtools/prj/d.lst0
-rw-r--r--testtools/qa/cli/CLITest.java111
-rw-r--r--testtools/qa/cli/makefile.mk82
-rw-r--r--testtools/qa/cli/readme.txt26
-rw-r--r--testtools/qa/cliversioning/VersionTestCase.java106
-rw-r--r--testtools/qa/cliversioning/makefile.mk93
-rw-r--r--testtools/readme.txt34
-rw-r--r--testtools/source/bridgetest/bridgetest.cxx1369
-rw-r--r--testtools/source/bridgetest/cli/cli_bridgetest_inprocess.cs260
-rw-r--r--testtools/source/bridgetest/cli/cli_bridgetest_inprocess.ini3
-rw-r--r--testtools/source/bridgetest/cli/cli_cpp_bridgetest.cxx982
-rw-r--r--testtools/source/bridgetest/cli/cli_cs_bridgetest.cs1033
-rw-r--r--testtools/source/bridgetest/cli/cli_cs_multi.cs119
-rw-r--r--testtools/source/bridgetest/cli/cli_cs_testobj.cs909
-rw-r--r--testtools/source/bridgetest/cli/cli_vb_bridgetest.vb862
-rw-r--r--testtools/source/bridgetest/cli/cli_vb_testobj.vb624
-rw-r--r--testtools/source/bridgetest/cli/makefile.mk203
-rw-r--r--testtools/source/bridgetest/constructors.cxx517
-rw-r--r--testtools/source/bridgetest/cppobj.cxx1229
-rw-r--r--testtools/source/bridgetest/currentcontextchecker.cxx129
-rw-r--r--testtools/source/bridgetest/currentcontextchecker.hxx73
-rw-r--r--testtools/source/bridgetest/idl/bridgetest.idl552
-rw-r--r--testtools/source/bridgetest/idl/makefile.mk70
-rw-r--r--testtools/source/bridgetest/makefile.mk218
-rw-r--r--testtools/source/bridgetest/multi.cxx240
-rw-r--r--testtools/source/bridgetest/multi.hxx126
-rw-r--r--testtools/source/bridgetest/pyuno/core.py367
-rw-r--r--testtools/source/bridgetest/pyuno/impl.py196
-rw-r--r--testtools/source/bridgetest/pyuno/importer.py78
-rw-r--r--testtools/source/bridgetest/pyuno/main.py49
-rw-r--r--testtools/source/bridgetest/pyuno/makefile.mk108
-rw-r--r--testtools/source/bridgetest/pyuno/pyuno2
-rw-r--r--testtools/source/bridgetest/pyuno/samplecomponent.py154
-rw-r--r--testtools/source/bridgetest/pyuno/testcomp.py40
-rw-r--r--testtools/source/cliversioning/makefile.mk142
-rw-r--r--testtools/source/cliversioning/old_version_libs_v2/readme.txt3
-rw-r--r--testtools/source/cliversioning/old_version_libs_v2/version_2_0_0.dllbin0 -> 11776 bytes
-rw-r--r--testtools/source/cliversioning/old_version_libs_v2/version_2_0_1.dllbin0 -> 11776 bytes
-rw-r--r--testtools/source/cliversioning/old_version_libs_v2/version_2_0_2.dllbin0 -> 11776 bytes
-rw-r--r--testtools/source/cliversioning/old_version_libs_v2/version_2_0_3.dllbin0 -> 11776 bytes
-rw-r--r--testtools/source/cliversioning/old_version_libs_v2/version_2_0_3r3.dllbin0 -> 11776 bytes
-rw-r--r--testtools/source/cliversioning/old_version_libs_v2/version_2_0_4.dllbin0 -> 11776 bytes
-rw-r--r--testtools/source/cliversioning/old_version_libs_v2/version_2_1.dllbin0 -> 11776 bytes
-rw-r--r--testtools/source/cliversioning/old_version_libs_v2/version_2_2.dllbin0 -> 11776 bytes
-rw-r--r--testtools/source/cliversioning/old_version_libs_v2/version_2_2_1.dllbin0 -> 11776 bytes
-rw-r--r--testtools/source/cliversioning/old_version_libs_v2/version_2_3.dllbin0 -> 11776 bytes
-rw-r--r--testtools/source/cliversioning/old_version_libs_v2/version_2_3_1.dllbin0 -> 11776 bytes
-rw-r--r--testtools/source/cliversioning/old_version_libs_v2/version_2_4.dllbin0 -> 11776 bytes
-rw-r--r--testtools/source/cliversioning/old_version_libs_v2/version_2_4_1.dllbin0 -> 11776 bytes
-rw-r--r--testtools/source/cliversioning/readme.txt106
-rw-r--r--testtools/source/cliversioning/runtests.cs127
-rw-r--r--testtools/source/cliversioning/version.cs608
-rw-r--r--testtools/source/cliversioning/version_libs/readme.txt3
-rw-r--r--testtools/source/cliversioning/version_libs/version_3_0_0.dllbin0 -> 11776 bytes
-rw-r--r--testtools/source/cliversioning/version_libs/version_3_0_1.dllbin0 -> 11776 bytes
-rwxr-xr-xtesttools/source/cliversioning/version_libs/version_3_1.dllbin0 -> 11776 bytes
-rw-r--r--testtools/source/cliversioning/version_libs/version_3_1_1.dllbin0 -> 11776 bytes
-rwxr-xr-xtesttools/source/cliversioning/version_libs/version_3_2.dllbin0 -> 11776 bytes
-rwxr-xr-xtesttools/source/cliversioning/version_libs/version_3_2_1.dllbin0 -> 11776 bytes
-rw-r--r--testtools/source/performance/cli_testobj_performance.cs118
-rw-r--r--testtools/source/performance/exports.dxp3
-rw-r--r--testtools/source/performance/makefile.mk98
-rw-r--r--testtools/source/performance/pseudo.cxx274
-rw-r--r--testtools/source/performance/pseudo_uno_uno.map7
-rw-r--r--testtools/source/performance/ubobject.cxx308
-rw-r--r--testtools/source/performance/ubtest.cxx1337
-rw-r--r--testtools/source/servicetests/LocalServiceTest.java53
-rw-r--r--testtools/source/servicetests/RemoteServiceTest.java121
-rw-r--r--testtools/source/servicetests/TestBase.java145
-rw-r--r--testtools/source/servicetests/TestService.java197
-rw-r--r--testtools/source/servicetests/TestService1.idl55
-rw-r--r--testtools/source/servicetests/TestService2.idl47
-rw-r--r--testtools/source/servicetests/XTestService1.idl41
-rw-r--r--testtools/source/servicetests/XTestService2.idl41
-rw-r--r--testtools/source/servicetests/XTestService3.idl41
-rw-r--r--testtools/source/servicetests/XTestService4.idl41
-rw-r--r--testtools/source/servicetests/makefile.mk44
-rw-r--r--testtools/util/makefile.pmk35
-rwxr-xr-xtomcat/makefile.mk64
-rwxr-xr-xtomcat/prj/build.lst2
-rwxr-xr-xtomcat/prj/d.lst1
-rw-r--r--tomcat/tomcat.patch35
-rw-r--r--toolkit/doc/layout/ChangeLog1286
-rw-r--r--toolkit/doc/layout/ChangeLog.0546
-rw-r--r--toolkit/doc/layout/README24
-rw-r--r--toolkit/doc/layout/TODO227
-rw-r--r--toolkit/doc/layout/apinotes.txt76
-rw-r--r--toolkit/doc/layout/metricfield.txt57
-rw-r--r--toolkit/doc/layout/notes.txt117
-rw-r--r--toolkit/doc/layout/oldnotes.txt224
-rw-r--r--toolkit/doc/layout/vcl.txt20
-rw-r--r--toolkit/inc/layout/layout-post.hxx102
-rw-r--r--toolkit/inc/layout/layout-pre.hxx107
-rw-r--r--toolkit/inc/layout/layout.hxx829
-rw-r--r--toolkit/inc/makefile.mk48
-rw-r--r--toolkit/inc/pch/precompiled_toolkit.cxx29
-rw-r--r--toolkit/inc/pch/precompiled_toolkit.hxx346
-rw-r--r--toolkit/inc/toolkit/awt/vclxaccessiblecomponent.hxx166
-rw-r--r--toolkit/inc/toolkit/awt/vclxbitmap.hxx87
-rw-r--r--toolkit/inc/toolkit/awt/vclxcontainer.hxx80
-rw-r--r--toolkit/inc/toolkit/awt/vclxdevice.hxx137
-rw-r--r--toolkit/inc/toolkit/awt/vclxfont.hxx96
-rw-r--r--toolkit/inc/toolkit/awt/vclxgraphics.hxx140
-rw-r--r--toolkit/inc/toolkit/awt/vclxmenu.hxx186
-rw-r--r--toolkit/inc/toolkit/awt/vclxpointer.hxx85
-rw-r--r--toolkit/inc/toolkit/awt/vclxprinter.hxx225
-rw-r--r--toolkit/inc/toolkit/awt/vclxregion.hxx96
-rw-r--r--toolkit/inc/toolkit/awt/vclxspinbutton.hxx100
-rw-r--r--toolkit/inc/toolkit/awt/vclxsystemdependentwindow.hxx67
-rw-r--r--toolkit/inc/toolkit/awt/vclxtoolkit.hxx217
-rw-r--r--toolkit/inc/toolkit/awt/vclxtopwindow.hxx123
-rw-r--r--toolkit/inc/toolkit/awt/vclxwindow.hxx243
-rw-r--r--toolkit/inc/toolkit/awt/vclxwindows.hxx1162
-rw-r--r--toolkit/inc/toolkit/awt/xsimpleanimation.hxx92
-rw-r--r--toolkit/inc/toolkit/awt/xthrobber.hxx88
-rw-r--r--toolkit/inc/toolkit/controls/accessiblecontrolcontext.hxx136
-rw-r--r--toolkit/inc/toolkit/controls/dialogcontrol.hxx312
-rw-r--r--toolkit/inc/toolkit/controls/eventcontainer.hxx142
-rw-r--r--toolkit/inc/toolkit/controls/formattedcontrol.hxx127
-rw-r--r--toolkit/inc/toolkit/controls/geometrycontrolmodel.hxx262
-rw-r--r--toolkit/inc/toolkit/controls/geometrycontrolmodel_impl.hxx90
-rw-r--r--toolkit/inc/toolkit/controls/roadmapcontrol.hxx206
-rw-r--r--toolkit/inc/toolkit/controls/roadmapentry.hxx91
-rw-r--r--toolkit/inc/toolkit/controls/stdtabcontroller.hxx94
-rw-r--r--toolkit/inc/toolkit/controls/stdtabcontrollermodel.hxx142
-rw-r--r--toolkit/inc/toolkit/controls/tkscrollbar.hxx124
-rw-r--r--toolkit/inc/toolkit/controls/tksimpleanimation.hxx111
-rw-r--r--toolkit/inc/toolkit/controls/tkspinbutton.hxx127
-rw-r--r--toolkit/inc/toolkit/controls/tkthrobber.hxx109
-rw-r--r--toolkit/inc/toolkit/controls/unocontrol.hxx245
-rw-r--r--toolkit/inc/toolkit/controls/unocontrolbase.hxx69
-rw-r--r--toolkit/inc/toolkit/controls/unocontrolcontainer.hxx166
-rw-r--r--toolkit/inc/toolkit/controls/unocontrolcontainermodel.hxx66
-rw-r--r--toolkit/inc/toolkit/controls/unocontrolmodel.hxx176
-rw-r--r--toolkit/inc/toolkit/controls/unocontrols.hxx1505
-rw-r--r--toolkit/inc/toolkit/dllapi.h40
-rw-r--r--toolkit/inc/toolkit/helper/accessibilityclient.hxx73
-rw-r--r--toolkit/inc/toolkit/helper/accessiblefactory.hxx141
-rw-r--r--toolkit/inc/toolkit/helper/convert.hxx67
-rw-r--r--toolkit/inc/toolkit/helper/emptyfontdescriptor.hxx56
-rw-r--r--toolkit/inc/toolkit/helper/externallock.hxx45
-rw-r--r--toolkit/inc/toolkit/helper/fixedhyperbase.hxx57
-rw-r--r--toolkit/inc/toolkit/helper/formpdfexport.hxx63
-rw-r--r--toolkit/inc/toolkit/helper/imagealign.hxx63
-rw-r--r--toolkit/inc/toolkit/helper/listenermultiplexer.hxx255
-rw-r--r--toolkit/inc/toolkit/helper/macros.hxx270
-rw-r--r--toolkit/inc/toolkit/helper/mutexandbroadcasthelper.hxx57
-rw-r--r--toolkit/inc/toolkit/helper/mutexhelper.hxx51
-rw-r--r--toolkit/inc/toolkit/helper/property.hxx248
-rw-r--r--toolkit/inc/toolkit/helper/servicenames.hxx108
-rw-r--r--toolkit/inc/toolkit/helper/solarrelease.hxx82
-rw-r--r--toolkit/inc/toolkit/helper/throbberimpl.hxx84
-rw-r--r--toolkit/inc/toolkit/helper/tkresmgr.hxx77
-rw-r--r--toolkit/inc/toolkit/helper/unomemorystream.hxx73
-rw-r--r--toolkit/inc/toolkit/helper/unopropertyarrayhelper.hxx66
-rw-r--r--toolkit/inc/toolkit/helper/unowrapper.hxx93
-rw-r--r--toolkit/inc/toolkit/helper/vclunohelper.hxx163
-rw-r--r--toolkit/prj/build.lst14
-rw-r--r--toolkit/prj/d.lst65
-rw-r--r--toolkit/qa/complex/toolkit/CallbackClass.java67
-rwxr-xr-xtoolkit/qa/complex/toolkit/CheckAccessibleStatusBar.java331
-rwxr-xr-xtoolkit/qa/complex/toolkit/CheckAccessibleStatusBarItem.java385
-rw-r--r--toolkit/qa/complex/toolkit/CheckAsyncCallback.java127
-rwxr-xr-xtoolkit/qa/complex/toolkit/interface_tests/_XAccessibleComponent.java489
-rwxr-xr-xtoolkit/qa/complex/toolkit/interface_tests/_XAccessibleContext.java261
-rwxr-xr-xtoolkit/qa/complex/toolkit/interface_tests/_XAccessibleEventBroadcaster.java211
-rwxr-xr-xtoolkit/qa/complex/toolkit/interface_tests/_XAccessibleExtendedComponent.java99
-rwxr-xr-xtoolkit/qa/complex/toolkit/interface_tests/_XAccessibleText.java1017
-rw-r--r--toolkit/qa/complex/toolkit/interface_tests/_XRequestCallback.java88
-rwxr-xr-xtoolkit/qa/complex/toolkit/interface_tests/makefile.mk57
-rwxr-xr-xtoolkit/qa/complex/toolkit/makefile.mk82
-rw-r--r--toolkit/qa/complex/xunitconversion/XUnitConversionTest.java222
-rw-r--r--toolkit/qa/complex/xunitconversion/makefile.mk77
-rw-r--r--toolkit/qa/unoapi/Test.java51
-rw-r--r--toolkit/qa/unoapi/knownissues.xcl252
-rw-r--r--toolkit/qa/unoapi/makefile.mk48
-rw-r--r--toolkit/qa/unoapi/testdocuments/poliball.gifbin0 -> 945 bytes
-rw-r--r--toolkit/qa/unoapi/toolkit.sce77
-rw-r--r--toolkit/source/awt/asynccallback.cxx199
-rw-r--r--toolkit/source/awt/forward.hxx73
-rw-r--r--toolkit/source/awt/makefile.mk84
-rw-r--r--toolkit/source/awt/non-interactable-containers.xml15
-rw-r--r--toolkit/source/awt/stylesettings.cxx987
-rw-r--r--toolkit/source/awt/stylesettings.hxx188
-rw-r--r--toolkit/source/awt/vclxaccessiblecomponent.cxx924
-rw-r--r--toolkit/source/awt/vclxbitmap.cxx93
-rw-r--r--toolkit/source/awt/vclxbutton.cxx126
-rw-r--r--toolkit/source/awt/vclxbutton.hxx114
-rw-r--r--toolkit/source/awt/vclxcontainer.cxx239
-rw-r--r--toolkit/source/awt/vclxdevice.cxx382
-rw-r--r--toolkit/source/awt/vclxdialog.cxx279
-rw-r--r--toolkit/source/awt/vclxdialog.hxx107
-rw-r--r--toolkit/source/awt/vclxfixedline.cxx132
-rw-r--r--toolkit/source/awt/vclxfixedline.hxx75
-rw-r--r--toolkit/source/awt/vclxfont.cxx252
-rw-r--r--toolkit/source/awt/vclxgraphics.cxx478
-rw-r--r--toolkit/source/awt/vclxmenu.cxx1103
-rw-r--r--toolkit/source/awt/vclxplugin.cxx80
-rw-r--r--toolkit/source/awt/vclxplugin.hxx67
-rw-r--r--toolkit/source/awt/vclxpointer.cxx80
-rw-r--r--toolkit/source/awt/vclxprinter.cxx463
-rw-r--r--toolkit/source/awt/vclxregion.cxx171
-rw-r--r--toolkit/source/awt/vclxscroller.cxx212
-rw-r--r--toolkit/source/awt/vclxscroller.hxx87
-rw-r--r--toolkit/source/awt/vclxspinbutton.cxx355
-rw-r--r--toolkit/source/awt/vclxsplitter.cxx245
-rw-r--r--toolkit/source/awt/vclxsplitter.hxx121
-rw-r--r--toolkit/source/awt/vclxsystemdependentwindow.cxx124
-rw-r--r--toolkit/source/awt/vclxtabcontrol.cxx540
-rw-r--r--toolkit/source/awt/vclxtabcontrol.hxx144
-rw-r--r--toolkit/source/awt/vclxtabpage.cxx156
-rw-r--r--toolkit/source/awt/vclxtabpage.hxx73
-rw-r--r--toolkit/source/awt/vclxtoolkit.cxx1705
-rw-r--r--toolkit/source/awt/vclxtopwindow.cxx345
-rw-r--r--toolkit/source/awt/vclxwindow.cxx2673
-rw-r--r--toolkit/source/awt/vclxwindow1.cxx108
-rw-r--r--toolkit/source/awt/vclxwindows.cxx6239
-rw-r--r--toolkit/source/awt/xsimpleanimation.cxx165
-rw-r--r--toolkit/source/awt/xthrobber.cxx158
-rw-r--r--toolkit/source/awt/xthrobber.hrc39
-rw-r--r--toolkit/source/awt/xthrobber.src177
-rw-r--r--toolkit/source/controls/accessiblecontrolcontext.cxx380
-rw-r--r--toolkit/source/controls/dialogcontrol.cxx2131
-rw-r--r--toolkit/source/controls/eventcontainer.cxx214
-rw-r--r--toolkit/source/controls/formattedcontrol.cxx468
-rw-r--r--toolkit/source/controls/geometrycontrolmodel.cxx653
-rw-r--r--toolkit/source/controls/grid/defaultgridcolumnmodel.cxx200
-rw-r--r--toolkit/source/controls/grid/defaultgridcolumnmodel.hxx100
-rw-r--r--toolkit/source/controls/grid/defaultgriddatamodel.cxx346
-rw-r--r--toolkit/source/controls/grid/defaultgriddatamodel.hxx101
-rw-r--r--toolkit/source/controls/grid/gridcolumn.cxx305
-rw-r--r--toolkit/source/controls/grid/gridcolumn.hxx107
-rw-r--r--toolkit/source/controls/grid/gridcontrol.cxx284
-rw-r--r--toolkit/source/controls/grid/gridcontrol.hxx121
-rw-r--r--toolkit/source/controls/grid/makefile.mk50
-rw-r--r--toolkit/source/controls/makefile.mk66
-rw-r--r--toolkit/source/controls/roadmapcontrol.cxx499
-rw-r--r--toolkit/source/controls/roadmapentry.cxx126
-rw-r--r--toolkit/source/controls/stdtabcontroller.cxx428
-rw-r--r--toolkit/source/controls/stdtabcontrollermodel.cxx408
-rw-r--r--toolkit/source/controls/tkscrollbar.cxx294
-rw-r--r--toolkit/source/controls/tksimpleanimation.cxx212
-rw-r--r--toolkit/source/controls/tkspinbutton.cxx350
-rw-r--r--toolkit/source/controls/tkthrobber.cxx199
-rw-r--r--toolkit/source/controls/tree/makefile.mk48
-rw-r--r--toolkit/source/controls/tree/treecontrol.cxx511
-rw-r--r--toolkit/source/controls/tree/treecontrol.hxx137
-rw-r--r--toolkit/source/controls/tree/treedatamodel.cxx673
-rw-r--r--toolkit/source/controls/unocontrol.cxx1601
-rw-r--r--toolkit/source/controls/unocontrolbase.cxx285
-rw-r--r--toolkit/source/controls/unocontrolcontainer.cxx834
-rw-r--r--toolkit/source/controls/unocontrolcontainermodel.cxx89
-rw-r--r--toolkit/source/controls/unocontrolmodel.cxx1484
-rw-r--r--toolkit/source/controls/unocontrols.cxx4358
-rw-r--r--toolkit/source/helper/accessibilityclient.cxx277
-rw-r--r--toolkit/source/helper/externallock.cxx46
-rw-r--r--toolkit/source/helper/fixedhyperbase.cxx72
-rw-r--r--toolkit/source/helper/formpdfexport.cxx639
-rw-r--r--toolkit/source/helper/imagealign.cxx135
-rw-r--r--toolkit/source/helper/listenermultiplexer.cxx213
-rw-r--r--toolkit/source/helper/makefile.mk64
-rw-r--r--toolkit/source/helper/property.cxx405
-rw-r--r--toolkit/source/helper/registerservices.cxx399
-rw-r--r--toolkit/source/helper/servicenames.cxx104
-rw-r--r--toolkit/source/helper/throbberimpl.cxx138
-rw-r--r--toolkit/source/helper/tkresmgr.cxx100
-rw-r--r--toolkit/source/helper/unomemorystream.cxx108
-rw-r--r--toolkit/source/helper/unopropertyarrayhelper.cxx160
-rw-r--r--toolkit/source/helper/unowrapper.cxx340
-rw-r--r--toolkit/source/helper/vclunohelper.cxx799
-rw-r--r--toolkit/source/layout/core/bin.cxx198
-rw-r--r--toolkit/source/layout/core/bin.hxx113
-rw-r--r--toolkit/source/layout/core/box-base.cxx173
-rw-r--r--toolkit/source/layout/core/box-base.hxx87
-rw-r--r--toolkit/source/layout/core/box.cxx281
-rw-r--r--toolkit/source/layout/core/box.hxx102
-rw-r--r--toolkit/source/layout/core/byteseq.cxx76
-rw-r--r--toolkit/source/layout/core/container.cxx169
-rw-r--r--toolkit/source/layout/core/container.hxx136
-rw-r--r--toolkit/source/layout/core/dialogbuttonhbox.cxx289
-rw-r--r--toolkit/source/layout/core/dialogbuttonhbox.hxx73
-rw-r--r--toolkit/source/layout/core/factory.cxx150
-rw-r--r--toolkit/source/layout/core/factory.hxx74
-rw-r--r--toolkit/source/layout/core/flow.cxx209
-rw-r--r--toolkit/source/layout/core/flow.hxx95
-rw-r--r--toolkit/source/layout/core/helper.cxx672
-rw-r--r--toolkit/source/layout/core/helper.hxx149
-rw-r--r--toolkit/source/layout/core/import.cxx325
-rw-r--r--toolkit/source/layout/core/import.hxx259
-rw-r--r--toolkit/source/layout/core/localized-string.cxx79
-rw-r--r--toolkit/source/layout/core/localized-string.hxx76
-rw-r--r--toolkit/source/layout/core/makefile.mk65
-rw-r--r--toolkit/source/layout/core/precompiled_xmlscript.hxx35
-rw-r--r--toolkit/source/layout/core/proplist.cxx454
-rw-r--r--toolkit/source/layout/core/proplist.hxx91
-rw-r--r--toolkit/source/layout/core/root.cxx409
-rw-r--r--toolkit/source/layout/core/root.hxx156
-rw-r--r--toolkit/source/layout/core/table.cxx311
-rw-r--r--toolkit/source/layout/core/table.hxx102
-rw-r--r--toolkit/source/layout/core/timer.cxx148
-rw-r--r--toolkit/source/layout/core/timer.hxx49
-rw-r--r--toolkit/source/layout/core/translate.cxx130
-rw-r--r--toolkit/source/layout/core/translate.hxx40
-rw-r--r--toolkit/source/layout/core/vcl.cxx66
-rw-r--r--toolkit/source/layout/core/vcl.hxx48
-rw-r--r--toolkit/source/layout/vcl/makefile.mk52
-rw-r--r--toolkit/source/layout/vcl/wbutton.cxx681
-rw-r--r--toolkit/source/layout/vcl/wcontainer.cxx266
-rw-r--r--toolkit/source/layout/vcl/wfield.cxx792
-rw-r--r--toolkit/source/layout/vcl/wrapper.cxx1626
-rw-r--r--toolkit/source/layout/vcl/wrapper.hxx149
-rw-r--r--toolkit/src2xml/README16
-rw-r--r--toolkit/src2xml/dryrunall.sh2
-rw-r--r--toolkit/src2xml/include-sc.lst8
-rw-r--r--toolkit/src2xml/include-sd.lst6
-rw-r--r--toolkit/src2xml/include-sw.lst5
-rw-r--r--toolkit/src2xml/include.lst300
-rw-r--r--toolkit/src2xml/sc.sh3
-rw-r--r--toolkit/src2xml/sd.sh3
-rw-r--r--toolkit/src2xml/source/boxer.py73
-rw-r--r--toolkit/src2xml/source/expression.py111
-rw-r--r--toolkit/src2xml/source/expression_test.py23
-rw-r--r--toolkit/src2xml/source/globals.py115
-rw-r--r--toolkit/src2xml/source/macroexpander_test.py71
-rw-r--r--toolkit/src2xml/source/macroparser.py130
-rw-r--r--toolkit/src2xml/source/macroparser_test.py20
-rw-r--r--toolkit/src2xml/source/src2xml.py227
-rw-r--r--toolkit/src2xml/source/srclexer.py488
-rw-r--r--toolkit/src2xml/source/srcparser.py416
-rw-r--r--toolkit/src2xml/src-sc.lst57
-rw-r--r--toolkit/src2xml/src-sd.lst124
-rw-r--r--toolkit/src2xml/src-sw.lst121
-rw-r--r--toolkit/src2xml/src.lst680
-rw-r--r--toolkit/src2xml/sw.sh3
-rwxr-xr-xtoolkit/test/accessibility/AWB.sxwbin0 -> 9257 bytes
-rw-r--r--toolkit/test/accessibility/AccTreeNode.java350
-rwxr-xr-xtoolkit/test/accessibility/AccessibilityTree.java377
-rw-r--r--toolkit/test/accessibility/AccessibilityTreeModel.java513
-rw-r--r--toolkit/test/accessibility/AccessibilityTreeModelBase.java122
-rwxr-xr-xtoolkit/test/accessibility/AccessibilityWorkBench.java620
-rw-r--r--toolkit/test/accessibility/AccessibleActionHandler.java72
-rw-r--r--toolkit/test/accessibility/AccessibleActionNode.java48
-rw-r--r--toolkit/test/accessibility/AccessibleCellHandler.java156
-rw-r--r--toolkit/test/accessibility/AccessibleComponentHandler.java102
-rw-r--r--toolkit/test/accessibility/AccessibleContextHandler.java91
-rw-r--r--toolkit/test/accessibility/AccessibleEditableTextHandler.java40
-rw-r--r--toolkit/test/accessibility/AccessibleExtendedComponentHandler.java73
-rw-r--r--toolkit/test/accessibility/AccessibleHyperlinkHandler.java42
-rw-r--r--toolkit/test/accessibility/AccessibleHypertextHandler.java42
-rw-r--r--toolkit/test/accessibility/AccessibleImageHandler.java51
-rw-r--r--toolkit/test/accessibility/AccessibleRelationHandler.java96
-rw-r--r--toolkit/test/accessibility/AccessibleSelectionHandler.java130
-rw-r--r--toolkit/test/accessibility/AccessibleTableHandler.java90
-rw-r--r--toolkit/test/accessibility/AccessibleTextHandler.java792
-rw-r--r--toolkit/test/accessibility/AccessibleTreeCellRenderer.java86
-rw-r--r--toolkit/test/accessibility/AccessibleTreeHandler.java110
-rw-r--r--toolkit/test/accessibility/AccessibleTreeNode.java101
-rw-r--r--toolkit/test/accessibility/AccessibleUNOHandler.java115
-rwxr-xr-xtoolkit/test/accessibility/Canvas.java448
-rw-r--r--toolkit/test/accessibility/CanvasShape.java330
-rw-r--r--toolkit/test/accessibility/ChildEventHandler.java46
-rw-r--r--toolkit/test/accessibility/ContextEventHandler.java52
-rw-r--r--toolkit/test/accessibility/EventHandler.java57
-rw-r--r--toolkit/test/accessibility/EventListener.java124
-rw-r--r--toolkit/test/accessibility/EventLogger.java31
-rw-r--r--toolkit/test/accessibility/EventQueue.java126
-rw-r--r--toolkit/test/accessibility/FrameActionListener.java21
-rw-r--r--toolkit/test/accessibility/GeometryEventHandler.java54
-rw-r--r--toolkit/test/accessibility/HelpWindow.java185
-rwxr-xr-xtoolkit/test/accessibility/InformationWriter.java415
-rw-r--r--toolkit/test/accessibility/MessageArea.java123
-rwxr-xr-xtoolkit/test/accessibility/MessageInterface.java5
-rw-r--r--toolkit/test/accessibility/NodeFactory.java147
-rw-r--r--toolkit/test/accessibility/NodeHandler.java140
-rw-r--r--toolkit/test/accessibility/NodeMap.java112
-rwxr-xr-xtoolkit/test/accessibility/OfficeConnection.java102
-rw-r--r--toolkit/test/accessibility/Options.java88
-rwxr-xr-xtoolkit/test/accessibility/Print.java5
-rw-r--r--toolkit/test/accessibility/QueuedListener.java55
-rw-r--r--toolkit/test/accessibility/QueuedTopWindowListener.java88
-rw-r--r--toolkit/test/accessibility/SelectionDialog.java179
-rwxr-xr-xtoolkit/test/accessibility/SimpleOffice.java389
-rw-r--r--toolkit/test/accessibility/StringNode.java13
-rw-r--r--toolkit/test/accessibility/TableEventHandler.java43
-rw-r--r--toolkit/test/accessibility/TextLogger.java52
-rw-r--r--toolkit/test/accessibility/TextUpdateListener.java170
-rw-r--r--toolkit/test/accessibility/TopWindowListener.java205
-rw-r--r--toolkit/test/accessibility/VectorNode.java50
-rw-r--r--toolkit/test/accessibility/about.html8
-rw-r--r--toolkit/test/accessibility/help.html91
-rw-r--r--toolkit/test/accessibility/jawb.mf3
-rw-r--r--toolkit/test/accessibility/makefile.mk127
-rw-r--r--toolkit/test/accessibility/news.html36
-rw-r--r--toolkit/test/accessibility/ov/ContextView.java125
-rw-r--r--toolkit/test/accessibility/ov/FocusView.java119
-rw-r--r--toolkit/test/accessibility/ov/ListeningObjectView.java60
-rw-r--r--toolkit/test/accessibility/ov/ObjectView.java77
-rw-r--r--toolkit/test/accessibility/ov/ObjectViewContainer.java166
-rw-r--r--toolkit/test/accessibility/ov/SelectionView.java230
-rw-r--r--toolkit/test/accessibility/ov/StateSetView.java249
-rw-r--r--toolkit/test/accessibility/ov/TextView.java123
-rw-r--r--toolkit/test/accessibility/ov/makefile.mk51
-rw-r--r--toolkit/test/accessibility/tools/NameProvider.java259
-rw-r--r--toolkit/test/accessibility/tools/makefile.mk42
-rw-r--r--toolkit/uiconfig/layout/delzip1
-rw-r--r--toolkit/uiconfig/layout/makefile.mk54
-rw-r--r--toolkit/uiconfig/layout/message-box.xml41
-rw-r--r--toolkit/uiconfig/layout/tab-dialog.xml20
-rw-r--r--toolkit/util/makefile.mk85
-rw-r--r--toolkit/util/makefile.pmk36
-rw-r--r--toolkit/util/toolkit.xml750
-rw-r--r--toolkit/workben/controls.cxx449
-rw-r--r--toolkit/workben/layout/.gitignore4
-rw-r--r--toolkit/workben/layout/README43
-rwxr-xr-xtoolkit/workben/layout/TEST11
-rw-r--r--toolkit/workben/layout/adjust.xml44
-rw-r--r--toolkit/workben/layout/align-test.xml30
-rw-r--r--toolkit/workben/layout/align.xml44
-rw-r--r--toolkit/workben/layout/boxtest.xml36
-rw-r--r--toolkit/workben/layout/dialogbuttons-ok.xml49
-rw-r--r--toolkit/workben/layout/dialogbuttons-reset.xml54
-rw-r--r--toolkit/workben/layout/dialogbuttons-save.xml49
-rw-r--r--toolkit/workben/layout/dialogbuttons-yes.xml49
-rw-r--r--toolkit/workben/layout/editor-normal.xml53
-rw-r--r--toolkit/workben/layout/editor.cxx1944
-rw-r--r--toolkit/workben/layout/editor.hxx48
-rw-r--r--toolkit/workben/layout/editor.xml52
-rw-r--r--toolkit/workben/layout/empty.xml26
-rw-r--r--toolkit/workben/layout/flow-container.xml48
-rw-r--r--toolkit/workben/layout/flow.xml17
-rw-r--r--toolkit/workben/layout/insert-sheet.xml57
-rw-r--r--toolkit/workben/layout/interactable-containers.xml49
-rw-r--r--toolkit/workben/layout/layout-flat.xml14
-rw-r--r--toolkit/workben/layout/layout.xml15
-rw-r--r--toolkit/workben/layout/makefile.mk151
-rw-r--r--toolkit/workben/layout/message-box.xml41
-rw-r--r--toolkit/workben/layout/more.xml19
-rw-r--r--toolkit/workben/layout/move-copy-sheet.xml21
-rw-r--r--toolkit/workben/layout/non-interactable-containers.xml41
-rw-r--r--toolkit/workben/layout/number-format.xml70
-rw-r--r--toolkit/workben/layout/numeric.xml10
-rw-r--r--toolkit/workben/layout/ooo-patch7
-rw-r--r--toolkit/workben/layout/paragraph.xml77
-rw-r--r--toolkit/workben/layout/plugin.cxx65
-rw-r--r--toolkit/workben/layout/plugin.hxx57
-rw-r--r--toolkit/workben/layout/plugin.xml29
-rw-r--r--toolkit/workben/layout/radio-groups.xml21
-rw-r--r--toolkit/workben/layout/recover.cxx110
-rw-r--r--toolkit/workben/layout/recover.hxx79
-rw-r--r--toolkit/workben/layout/recover.xml67
-rw-r--r--toolkit/workben/layout/refresh7
-rw-r--r--toolkit/workben/layout/run-s2x6
-rw-r--r--toolkit/workben/layout/scroller.xml32
-rw-r--r--toolkit/workben/layout/sequence.xml13
-rw-r--r--toolkit/workben/layout/shutdown.xml54
-rw-r--r--toolkit/workben/layout/simple-paragraph.cxx179
-rw-r--r--toolkit/workben/layout/simple-paragraph.hxx52
-rw-r--r--toolkit/workben/layout/simple-paragraph.xml11
-rw-r--r--toolkit/workben/layout/sort-options.xml40
-rw-r--r--toolkit/workben/layout/sortdlg.cxx70
-rw-r--r--toolkit/workben/layout/sortdlg.hrc83
-rw-r--r--toolkit/workben/layout/sortdlg.hxx73
-rw-r--r--toolkit/workben/layout/sortdlg.src317
-rw-r--r--toolkit/workben/layout/sortdlg.xml65
-rw-r--r--toolkit/workben/layout/splitter.xml13
-rw-r--r--toolkit/workben/layout/string-input.xml16
-rw-r--r--toolkit/workben/layout/tab-dialog.xml20
-rw-r--r--toolkit/workben/layout/tabcontrol.xml18
-rw-r--r--toolkit/workben/layout/table.xml15
-rw-r--r--toolkit/workben/layout/test.cxx366
-rw-r--r--toolkit/workben/layout/test.xml12
-rw-r--r--toolkit/workben/layout/testrc.in12
-rw-r--r--toolkit/workben/layout/tpsort.cxx1105
-rw-r--r--toolkit/workben/layout/tpsort.hxx217
-rw-r--r--toolkit/workben/layout/un-test.sh14
-rw-r--r--toolkit/workben/layout/uno.hxx106
-rw-r--r--toolkit/workben/layout/wordcount-plain.xml29
-rw-r--r--toolkit/workben/layout/wordcount-tight.xml35
-rw-r--r--toolkit/workben/layout/wordcount.xml50
-rw-r--r--toolkit/workben/layout/wordcountdialog.cxx110
-rw-r--r--toolkit/workben/layout/wordcountdialog.hxx65
-rw-r--r--toolkit/workben/layout/zoom-1.xml38
-rw-r--r--toolkit/workben/layout/zoom-2.xml39
-rw-r--r--toolkit/workben/layout/zoom-indent.xml41
-rw-r--r--toolkit/workben/layout/zoom-plain.xml20
-rw-r--r--toolkit/workben/layout/zoom.cxx622
-rw-r--r--toolkit/workben/layout/zoom.hrc53
-rw-r--r--toolkit/workben/layout/zoom.hxx123
-rw-r--r--toolkit/workben/layout/zoom.xml60
-rw-r--r--toolkit/workben/layout/zoom_def.hxx35
-rw-r--r--toolkit/workben/makefile.mk84
-rw-r--r--toolkit/workben/no_localization1
-rw-r--r--toolkit/workben/unodialog.cxx269
-rw-r--r--tools/bootstrp/addexes/makefile.mk49
-rw-r--r--tools/bootstrp/addexes/replace.cxx76
-rw-r--r--tools/bootstrp/addexes2/makefile.mk56
-rw-r--r--tools/bootstrp/addexes2/mkfilt.cxx237
-rw-r--r--tools/bootstrp/appdef.cxx168
-rw-r--r--tools/bootstrp/command.cxx690
-rw-r--r--tools/bootstrp/cppdep.cxx246
-rw-r--r--tools/bootstrp/cppdep.hxx58
-rw-r--r--tools/bootstrp/inimgr.cxx210
-rw-r--r--tools/bootstrp/iserver.cxx152
-rw-r--r--tools/bootstrp/makefile.mk108
-rw-r--r--tools/bootstrp/md5.cxx149
-rw-r--r--tools/bootstrp/md5.hxx32
-rw-r--r--tools/bootstrp/mkcreate.cxx945
-rw-r--r--tools/bootstrp/prj.cxx1600
-rw-r--r--tools/bootstrp/rscdep.cxx299
-rw-r--r--tools/bootstrp/so_checksum.cxx56
-rw-r--r--tools/bootstrp/sspretty.cxx60
-rw-r--r--tools/bootstrp/sstring.cxx317
-rw-r--r--tools/inc/bootstrp/appdef.hxx68
-rw-r--r--tools/inc/bootstrp/command.hxx163
-rw-r--r--tools/inc/bootstrp/inimgr.hxx61
-rw-r--r--tools/inc/bootstrp/listmacr.hxx60
-rw-r--r--tools/inc/bootstrp/mkcreate.hxx295
-rw-r--r--tools/inc/bootstrp/prj.hxx331
-rw-r--r--tools/inc/bootstrp/sstring.hxx105
-rw-r--r--tools/inc/impcont.hxx147
-rw-r--r--tools/inc/impstrg.hxx54
-rw-r--r--tools/inc/makefile.mk48
-rw-r--r--tools/inc/pch/precompiled_tools.cxx29
-rw-r--r--tools/inc/pch/precompiled_tools.hxx92
-rw-r--r--tools/inc/poly.h99
-rw-r--r--tools/inc/tools/StringListResource.hxx56
-rw-r--r--tools/inc/tools/agapi.hxx67
-rw-r--r--tools/inc/tools/agitem.hxx51
-rw-r--r--tools/inc/tools/appendunixshellword.hxx59
-rw-r--r--tools/inc/tools/b3dtrans.hxx352
-rw-r--r--tools/inc/tools/bigint.hxx328
-rw-r--r--tools/inc/tools/cachestr.hxx83
-rw-r--r--tools/inc/tools/chapi.hxx68
-rw-r--r--tools/inc/tools/color.hxx239
-rw-r--r--tools/inc/tools/config.hxx101
-rw-r--r--tools/inc/tools/contnr.hxx123
-rw-r--r--tools/inc/tools/date.hxx120
-rw-r--r--tools/inc/tools/datetime.hxx111
-rw-r--r--tools/inc/tools/debug.hxx777
-rw-r--r--tools/inc/tools/diagnose_ex.h175
-rw-r--r--tools/inc/tools/download.hxx56
-rw-r--r--tools/inc/tools/dynary.hxx110
-rw-r--r--tools/inc/tools/eacopier.hxx47
-rw-r--r--tools/inc/tools/errcode.hxx323
-rw-r--r--tools/inc/tools/errinf.hxx243
-rw-r--r--tools/inc/tools/extendapplicationenvironment.hxx42
-rw-r--r--tools/inc/tools/fldunit.hxx41
-rw-r--r--tools/inc/tools/fontenum.hxx172
-rw-r--r--tools/inc/tools/fract.hxx165
-rw-r--r--tools/inc/tools/fsys.hxx575
-rw-r--r--tools/inc/tools/gen.hxx712
-rw-r--r--tools/inc/tools/geninfo.hxx230
-rw-r--r--tools/inc/tools/getprocessworkingdir.hxx48
-rw-r--r--tools/inc/tools/globname.hxx138
-rw-r--r--tools/inc/tools/inetdef.hxx111
-rw-r--r--tools/inc/tools/inetmime.hxx1445
-rw-r--r--tools/inc/tools/inetmsg.hxx623
-rw-r--r--tools/inc/tools/inetstrm.hxx275
-rw-r--r--tools/inc/tools/iparser.hxx147
-rw-r--r--tools/inc/tools/isofallback.hxx38
-rw-r--r--tools/inc/tools/line.hxx75
-rw-r--r--tools/inc/tools/link.hxx158
-rw-r--r--tools/inc/tools/list.hxx143
-rw-r--r--tools/inc/tools/mapunit.hxx41
-rw-r--r--tools/inc/tools/mempool.hxx120
-rw-r--r--tools/inc/tools/multisel.hxx216
-rw-r--r--tools/inc/tools/ownlist.hxx94
-rw-r--r--tools/inc/tools/pathutils.hxx101
-rw-r--r--tools/inc/tools/poly.hxx347
-rw-r--r--tools/inc/tools/postextstl.h36
-rw-r--r--tools/inc/tools/postsys.h244
-rw-r--r--tools/inc/tools/postwin.h257
-rw-r--r--tools/inc/tools/postx.h73
-rw-r--r--tools/inc/tools/preextstl.h71
-rw-r--r--tools/inc/tools/presys.h43
-rw-r--r--tools/inc/tools/prewin.h80
-rw-r--r--tools/inc/tools/prex.h78
-rw-r--r--tools/inc/tools/pstm.hxx270
-rw-r--r--tools/inc/tools/queue.hxx104
-rw-r--r--tools/inc/tools/rc.h220
-rw-r--r--tools/inc/tools/rc.hxx108
-rw-r--r--tools/inc/tools/rcid.h134
-rw-r--r--tools/inc/tools/ref.hxx456
-rw-r--r--tools/inc/tools/resary.hxx93
-rw-r--r--tools/inc/tools/resid.hxx162
-rw-r--r--tools/inc/tools/resmgr.hxx238
-rw-r--r--tools/inc/tools/rtti.hxx174
-rw-r--r--tools/inc/tools/shl.hxx114
-rw-r--r--tools/inc/tools/simplerm.hxx117
-rw-r--r--tools/inc/tools/solar.h440
-rw-r--r--tools/inc/tools/solarmutex.hxx45
-rw-r--r--tools/inc/tools/stack.hxx105
-rw-r--r--tools/inc/tools/stream.hxx856
-rw-r--r--tools/inc/tools/string.hxx699
-rw-r--r--tools/inc/tools/svborder.hxx97
-rw-r--r--tools/inc/tools/svlibrary.hxx42
-rw-r--r--tools/inc/tools/svwin.h36
-rw-r--r--tools/inc/tools/table.hxx152
-rw-r--r--tools/inc/tools/tempfile.hxx77
-rw-r--r--tools/inc/tools/tenccvt.hxx58
-rw-r--r--tools/inc/tools/testtoolloader.hxx39
-rw-r--r--tools/inc/tools/time.hxx112
-rw-r--r--tools/inc/tools/tools.h38
-rw-r--r--tools/inc/tools/toolsdllapi.h41
-rw-r--r--tools/inc/tools/unqid.hxx109
-rw-r--r--tools/inc/tools/unqidx.hxx151
-rw-r--r--tools/inc/tools/urlkeys.hxx77
-rw-r--r--tools/inc/tools/urlobj.hxx1920
-rw-r--r--tools/inc/tools/vcompat.hxx70
-rw-r--r--tools/inc/tools/vector2d.hxx119
-rw-r--r--tools/inc/tools/weakbase.h160
-rw-r--r--tools/inc/tools/weakbase.hxx183
-rw-r--r--tools/inc/tools/wintypes.hxx342
-rw-r--r--tools/inc/tools/wldcrd.hxx91
-rw-r--r--tools/inc/tools/zcodec.hxx128
-rw-r--r--tools/inc/toolsin.hxx52
-rw-r--r--tools/os2/inc/dll.hxx39
-rw-r--r--tools/os2/source/dll/makefile.mk46
-rw-r--r--tools/os2/source/dll/toolsdll.cxx48
-rw-r--r--tools/prj/build.lst30
-rw-r--r--tools/prj/d.lst128
-rw-r--r--tools/qa/makefile.mk52
-rw-r--r--tools/qa/test_pathutils.cxx76
-rw-r--r--tools/qa/version.map34
-rw-r--r--tools/source/communi/geninfo.cxx408
-rw-r--r--tools/source/communi/makefile.mk50
-rw-r--r--tools/source/communi/parser.cxx469
-rw-r--r--tools/source/datetime/datetime.cxx442
-rw-r--r--tools/source/datetime/makefile.mk50
-rw-r--r--tools/source/datetime/tdate.cxx494
-rw-r--r--tools/source/datetime/ttime.cxx445
-rw-r--r--tools/source/debug/debug.cxx1808
-rw-r--r--tools/source/debug/makefile.mk53
-rw-r--r--tools/source/debug/stcktree.cxx320
-rw-r--r--tools/source/fsys/comdep.cxx44
-rw-r--r--tools/source/fsys/comdep.hxx156
-rw-r--r--tools/source/fsys/dirent.cxx3213
-rw-r--r--tools/source/fsys/filecopy.cxx486
-rw-r--r--tools/source/fsys/fstat.cxx419
-rw-r--r--tools/source/fsys/makefile.mk67
-rw-r--r--tools/source/fsys/os2.cxx1014
-rw-r--r--tools/source/fsys/os2.hxx93
-rw-r--r--tools/source/fsys/tdir.cxx768
-rw-r--r--tools/source/fsys/tempfile.cxx301
-rw-r--r--tools/source/fsys/unx.cxx660
-rw-r--r--tools/source/fsys/unx.hxx95
-rw-r--r--tools/source/fsys/urlobj.cxx5572
-rw-r--r--tools/source/fsys/wldcrd.cxx143
-rw-r--r--tools/source/fsys/wntmsc.cxx1081
-rw-r--r--tools/source/fsys/wntmsc.hxx102
-rw-r--r--tools/source/generic/b3dtrans.cxx1014
-rw-r--r--tools/source/generic/bigint.cxx1141
-rw-r--r--tools/source/generic/color.cxx510
-rw-r--r--tools/source/generic/config.cxx1304
-rw-r--r--tools/source/generic/fract.cxx736
-rw-r--r--tools/source/generic/gen.cxx661
-rw-r--r--tools/source/generic/line.cxx363
-rw-r--r--tools/source/generic/link.cxx58
-rw-r--r--tools/source/generic/makefile.mk71
-rw-r--r--tools/source/generic/poly.cxx2380
-rw-r--r--tools/source/generic/poly2.cxx891
-rw-r--r--tools/source/generic/svborder.cxx77
-rw-r--r--tools/source/generic/svlibrary.cxx129
-rw-r--r--tools/source/generic/toolsin.cxx95
-rw-r--r--tools/source/inet/inetmime.cxx4563
-rw-r--r--tools/source/inet/inetmsg.cxx1653
-rw-r--r--tools/source/inet/inetstrm.cxx1821
-rw-r--r--tools/source/inet/makefile.mk45
-rw-r--r--tools/source/makefile.mk58
-rw-r--r--tools/source/memtools/contnr.cxx1708
-rw-r--r--tools/source/memtools/makefile.mk56
-rw-r--r--tools/source/memtools/mempool.cxx83
-rw-r--r--tools/source/memtools/multisel.cxx1162
-rw-r--r--tools/source/memtools/table.cxx413
-rw-r--r--tools/source/memtools/unqidx.cxx601
-rw-r--r--tools/source/misc/appendunixshellword.cxx76
-rw-r--r--tools/source/misc/extendapplicationenvironment.cxx103
-rw-r--r--tools/source/misc/getprocessworkingdir.cxx64
-rw-r--r--tools/source/misc/makefile.mk47
-rw-r--r--tools/source/misc/pathutils.cxx219
-rw-r--r--tools/source/misc/solarmutex.cxx60
-rw-r--r--tools/source/rc/isofallback.cxx67
-rw-r--r--tools/source/rc/makefile.mk53
-rw-r--r--tools/source/rc/rc.cxx97
-rw-r--r--tools/source/rc/resary.cxx78
-rw-r--r--tools/source/rc/resmgr.cxx2074
-rw-r--r--tools/source/ref/errinf.cxx462
-rw-r--r--tools/source/ref/globname.cxx453
-rw-r--r--tools/source/ref/makefile.mk53
-rw-r--r--tools/source/ref/pstm.cxx915
-rw-r--r--tools/source/ref/ref.cxx51
-rw-r--r--tools/source/solar/makefile.mk63
-rw-r--r--tools/source/solar/solar.c562
-rw-r--r--tools/source/stream/cachestr.cxx290
-rw-r--r--tools/source/stream/makefile.mk58
-rw-r--r--tools/source/stream/stream.cxx2841
-rw-r--r--tools/source/stream/strmos2.cxx864
-rw-r--r--tools/source/stream/strmsys.cxx37
-rw-r--r--tools/source/stream/strmunx.cxx920
-rw-r--r--tools/source/stream/strmwnt.cxx689
-rw-r--r--tools/source/stream/vcompat.cxx80
-rw-r--r--tools/source/string/debugprint.cxx48
-rw-r--r--tools/source/string/makefile.mk79
-rw-r--r--tools/source/string/strascii.cxx637
-rw-r--r--tools/source/string/strcvt.cxx613
-rw-r--r--tools/source/string/strimp.cxx2115
-rw-r--r--tools/source/string/strucvt.cxx213
-rw-r--r--tools/source/string/tenccvt.cxx97
-rw-r--r--tools/source/string/tstring.cxx295
-rw-r--r--tools/source/string/tustring.cxx162
-rw-r--r--tools/source/testtoolloader/makefile.mk45
-rw-r--r--tools/source/testtoolloader/testtoolloader.cxx185
-rw-r--r--tools/source/zcodec/makefile.mk47
-rw-r--r--tools/source/zcodec/zcodec.cxx488
-rw-r--r--tools/test/export.map34
-rw-r--r--tools/test/makefile.mk65
-rw-r--r--tools/test/tests.cxx126
-rw-r--r--tools/unx/source/dll/makefile.mk48
-rw-r--r--tools/unx/source/dll/toolsdll.cxx47
-rw-r--r--tools/util/makefile.mk173
-rw-r--r--tools/util/makefile.pmk31
-rw-r--r--tools/util/tools.r17
-rw-r--r--tools/win/inc/dll.hxx59
-rw-r--r--tools/win/inc/parser.hxx48
-rw-r--r--tools/win/inc/shellex.h115
-rw-r--r--tools/win/inc/shutil.h215
-rw-r--r--tools/win/inc/toolsdll.hxx88
-rw-r--r--tools/win/inc/winshell.hxx386
-rw-r--r--tools/win/source/dll/makefile.mk56
-rw-r--r--tools/win/source/dll/toolsdll.cxx48
-rw-r--r--tools/win/source/fastfsys/makefile.mk71
-rw-r--r--tools/workben/fstest.cxx94
-rw-r--r--tools/workben/hashtbl.cxx515
-rw-r--r--tools/workben/hashtbl.hxx203
-rw-r--r--tools/workben/helloworld.c33
-rw-r--r--tools/workben/inetmimetest.cxx67
-rw-r--r--tools/workben/makefile.mk89
-rw-r--r--tools/workben/solar.c427
-rw-r--r--tools/workben/tldem.cxx82
-rw-r--r--tools/workben/urltest.cxx1906
-rw-r--r--twain/inc/twain.h1973
-rw-r--r--twain/prj/build.lst3
-rw-r--r--twain/prj/d.lst3
-rw-r--r--twain/util/makefile.mk39
-rw-r--r--ucb/inc/makefile.mk48
-rw-r--r--ucb/inc/pch/precompiled_ucb.cxx29
-rw-r--r--ucb/inc/pch/precompiled_ucb.hxx184
-rw-r--r--ucb/prj/build.lst18
-rw-r--r--ucb/prj/d.lst35
-rwxr-xr-xucb/qa/complex/tdoc/CheckContentProvider.java398
-rwxr-xr-xucb/qa/complex/tdoc/CheckTransientDocumentsContent.java145
-rwxr-xr-xucb/qa/complex/tdoc/CheckTransientDocumentsContentProvider.java143
-rwxr-xr-xucb/qa/complex/tdoc/CheckTransientDocumentsDocumentContent.java179
-rwxr-xr-xucb/qa/complex/tdoc/interfaces/_XChild.java104
-rwxr-xr-xucb/qa/complex/tdoc/interfaces/_XCommandInfoChangeNotifier.java64
-rwxr-xr-xucb/qa/complex/tdoc/interfaces/_XCommandProcessor.java286
-rwxr-xr-xucb/qa/complex/tdoc/interfaces/_XComponent.java171
-rwxr-xr-xucb/qa/complex/tdoc/interfaces/_XContent.java86
-rwxr-xr-xucb/qa/complex/tdoc/interfaces/_XPropertiesChangeNotifier.java67
-rwxr-xr-xucb/qa/complex/tdoc/interfaces/_XPropertyContainer.java102
-rwxr-xr-xucb/qa/complex/tdoc/interfaces/_XPropertySetInfoChangeNotifier.java67
-rwxr-xr-xucb/qa/complex/tdoc/interfaces/_XServiceInfo.java99
-rwxr-xr-xucb/qa/complex/tdoc/interfaces/_XTypeProvider.java95
-rwxr-xr-xucb/qa/complex/tdoc/interfaces/makefile.mk63
-rwxr-xr-xucb/qa/complex/tdoc/makefile.mk86
-rw-r--r--ucb/qa/complex/test_documents/Iterator.sxwbin0 -> 5627 bytes
-rw-r--r--ucb/qa/complex/test_documents/chinese.sxwbin0 -> 5757 bytes
-rw-r--r--ucb/qa/complex/test_documents/filter.sxwbin0 -> 14359 bytes
-rwxr-xr-xucb/qa/complex/ucb/UCB.java232
-rwxr-xr-xucb/qa/complex/ucb/makefile.mk78
-rw-r--r--ucb/qa/unoapi/Test.java51
-rw-r--r--ucb/qa/unoapi/knownissues.xcl2
-rw-r--r--ucb/qa/unoapi/makefile.mk48
-rw-r--r--ucb/qa/unoapi/ucb.sce11
-rw-r--r--ucb/source/cacher/cached.xml146
-rw-r--r--ucb/source/cacher/cachedcontentresultset.cxx2229
-rw-r--r--ucb/source/cacher/cachedcontentresultset.hxx521
-rw-r--r--ucb/source/cacher/cachedcontentresultsetstub.cxx631
-rw-r--r--ucb/source/cacher/cachedcontentresultsetstub.hxx202
-rw-r--r--ucb/source/cacher/cacheddynamicresultset.cxx206
-rw-r--r--ucb/source/cacher/cacheddynamicresultset.hxx137
-rw-r--r--ucb/source/cacher/cacheddynamicresultsetstub.cxx245
-rw-r--r--ucb/source/cacher/cacheddynamicresultsetstub.hxx136
-rw-r--r--ucb/source/cacher/cacheserv.cxx187
-rw-r--r--ucb/source/cacher/contentresultsetwrapper.cxx1477
-rw-r--r--ucb/source/cacher/contentresultsetwrapper.hxx587
-rw-r--r--ucb/source/cacher/dynamicresultsetwrapper.cxx528
-rw-r--r--ucb/source/cacher/dynamicresultsetwrapper.hxx229
-rw-r--r--ucb/source/cacher/makefile.mk68
-rw-r--r--ucb/source/core/cmdenv.cxx191
-rw-r--r--ucb/source/core/cmdenv.hxx102
-rw-r--r--ucb/source/core/exports2.dxp5
-rw-r--r--ucb/source/core/identify.cxx116
-rw-r--r--ucb/source/core/identify.hxx68
-rw-r--r--ucb/source/core/makefile.mk76
-rw-r--r--ucb/source/core/providermap.hxx77
-rw-r--r--ucb/source/core/provprox.cxx401
-rw-r--r--ucb/source/core/provprox.hxx166
-rw-r--r--ucb/source/core/ucb.cxx959
-rw-r--r--ucb/source/core/ucb.hxx220
-rw-r--r--ucb/source/core/ucb.xml172
-rw-r--r--ucb/source/core/ucbcmds.cxx2090
-rw-r--r--ucb/source/core/ucbcmds.hxx43
-rw-r--r--ucb/source/core/ucbprops.cxx477
-rw-r--r--ucb/source/core/ucbprops.hxx93
-rw-r--r--ucb/source/core/ucbserv.cxx208
-rw-r--r--ucb/source/core/ucbstore.cxx2793
-rw-r--r--ucb/source/core/ucbstore.hxx347
-rw-r--r--ucb/source/inc/regexp.hxx84
-rw-r--r--ucb/source/inc/regexpmap.hxx188
-rw-r--r--ucb/source/inc/regexpmap.tpt564
-rw-r--r--ucb/source/regexp/makefile.mk41
-rw-r--r--ucb/source/regexp/regexp.cxx473
-rw-r--r--ucb/source/sorter/makefile.mk63
-rw-r--r--ucb/source/sorter/sortdynres.cxx628
-rw-r--r--ucb/source/sorter/sortdynres.hxx257
-rw-r--r--ucb/source/sorter/sortmain.cxx130
-rw-r--r--ucb/source/sorter/sortresult.cxx2070
-rw-r--r--ucb/source/sorter/sortresult.hxx455
-rw-r--r--ucb/source/sorter/srtrs.xml66
-rw-r--r--ucb/source/ucp/expand/makefile.mk61
-rw-r--r--ucb/source/ucp/expand/ucpexpand.cxx293
-rw-r--r--ucb/source/ucp/ext/makefile.mk65
-rw-r--r--ucb/source/ucp/ext/ucpext_content.cxx672
-rw-r--r--ucb/source/ucp/ext/ucpext_content.hxx154
-rw-r--r--ucb/source/ucp/ext/ucpext_datasupplier.cxx375
-rw-r--r--ucb/source/ucp/ext/ucpext_datasupplier.hxx86
-rw-r--r--ucb/source/ucp/ext/ucpext_provider.cxx208
-rw-r--r--ucb/source/ucp/ext/ucpext_provider.hxx68
-rw-r--r--ucb/source/ucp/ext/ucpext_resultset.cxx99
-rw-r--r--ucb/source/ucp/ext/ucpext_resultset.hxx66
-rw-r--r--ucb/source/ucp/ext/ucpext_services.cxx93
-rw-r--r--ucb/source/ucp/file/bc.cxx1409
-rw-r--r--ucb/source/ucp/file/bc.hxx353
-rw-r--r--ucb/source/ucp/file/exports2.dxp9
-rw-r--r--ucb/source/ucp/file/filcmd.cxx141
-rw-r--r--ucb/source/ucp/file/filcmd.hxx108
-rw-r--r--ucb/source/ucp/file/filerror.hxx118
-rw-r--r--ucb/source/ucp/file/filglob.cxx954
-rw-r--r--ucb/source/ucp/file/filglob.hxx119
-rw-r--r--ucb/source/ucp/file/filid.cxx148
-rw-r--r--ucb/source/ucp/file/filid.hxx102
-rw-r--r--ucb/source/ucp/file/filinl.hxx76
-rw-r--r--ucb/source/ucp/file/filinpstr.cxx262
-rw-r--r--ucb/source/ucp/file/filinpstr.hxx164
-rw-r--r--ucb/source/ucp/file/filinsreq.cxx224
-rw-r--r--ucb/source/ucp/file/filinsreq.hxx240
-rw-r--r--ucb/source/ucp/file/filnot.cxx269
-rw-r--r--ucb/source/ucp/file/filnot.hxx137
-rw-r--r--ucb/source/ucp/file/filprp.cxx151
-rw-r--r--ucb/source/ucp/file/filprp.hxx97
-rw-r--r--ucb/source/ucp/file/filrec.cxx201
-rw-r--r--ucb/source/ucp/file/filrec.hxx86
-rw-r--r--ucb/source/ucp/file/filrow.cxx429
-rw-r--r--ucb/source/ucp/file/filrow.hxx204
-rw-r--r--ucb/source/ucp/file/filrset.cxx936
-rw-r--r--ucb/source/ucp/file/filrset.hxx683
-rw-r--r--ucb/source/ucp/file/filstr.cxx404
-rw-r--r--ucb/source/ucp/file/filstr.hxx246
-rw-r--r--ucb/source/ucp/file/filtask.cxx184
-rw-r--r--ucb/source/ucp/file/filtask.hxx225
-rw-r--r--ucb/source/ucp/file/makefile.mk80
-rw-r--r--ucb/source/ucp/file/prov.cxx738
-rw-r--r--ucb/source/ucp/file/prov.hxx238
-rw-r--r--ucb/source/ucp/file/shell.cxx3074
-rw-r--r--ucb/source/ucp/file/shell.hxx607
-rw-r--r--ucb/source/ucp/file/ucpfile.xml113
-rw-r--r--ucb/source/ucp/ftp/curl.hxx41
-rw-r--r--ucb/source/ucp/ftp/ftpcfunc.cxx56
-rw-r--r--ucb/source/ucp/ftp/ftpcfunc.hxx63
-rw-r--r--ucb/source/ucp/ftp/ftpcontainer.hxx61
-rw-r--r--ucb/source/ucp/ftp/ftpcontent.cxx957
-rw-r--r--ucb/source/ucp/ftp/ftpcontent.hxx183
-rw-r--r--ucb/source/ucp/ftp/ftpcontentcaps.cxx187
-rw-r--r--ucb/source/ucp/ftp/ftpcontentidentifier.cxx150
-rw-r--r--ucb/source/ucp/ftp/ftpcontentidentifier.hxx118
-rw-r--r--ucb/source/ucp/ftp/ftpcontentprovider.cxx280
-rw-r--r--ucb/source/ucp/ftp/ftpcontentprovider.hxx130
-rw-r--r--ucb/source/ucp/ftp/ftpdirp.cxx1292
-rw-r--r--ucb/source/ucp/ftp/ftpdirp.hxx189
-rw-r--r--ucb/source/ucp/ftp/ftpdynresultset.cxx91
-rw-r--r--ucb/source/ucp/ftp/ftpdynresultset.hxx67
-rwxr-xr-xucb/source/ucp/ftp/ftphandleprovider.hxx29
-rw-r--r--ucb/source/ucp/ftp/ftpinpstr.cxx217
-rw-r--r--ucb/source/ucp/ftp/ftpinpstr.hxx151
-rw-r--r--ucb/source/ucp/ftp/ftpintreq.cxx230
-rw-r--r--ucb/source/ucp/ftp/ftpintreq.hxx181
-rw-r--r--ucb/source/ucp/ftp/ftploaderthread.cxx109
-rw-r--r--ucb/source/ucp/ftp/ftploaderthread.hxx73
-rw-r--r--ucb/source/ucp/ftp/ftpresultsetI.cxx105
-rw-r--r--ucb/source/ucp/ftp/ftpresultsetI.hxx63
-rw-r--r--ucb/source/ucp/ftp/ftpresultsetbase.cxx662
-rw-r--r--ucb/source/ucp/ftp/ftpresultsetbase.hxx608
-rw-r--r--ucb/source/ucp/ftp/ftpresultsetfactory.hxx57
-rw-r--r--ucb/source/ucp/ftp/ftpservices.cxx128
-rw-r--r--ucb/source/ucp/ftp/ftpstrcont.hxx87
-rw-r--r--ucb/source/ucp/ftp/ftpurl.cxx838
-rw-r--r--ucb/source/ucp/ftp/ftpurl.hxx178
-rw-r--r--ucb/source/ucp/ftp/makefile.mk106
-rw-r--r--ucb/source/ucp/ftp/test.cxx298
-rw-r--r--ucb/source/ucp/ftp/test.py25
-rw-r--r--ucb/source/ucp/ftp/test_activedatasink.cxx64
-rw-r--r--ucb/source/ucp/ftp/test_activedatasink.hxx89
-rwxr-xr-xucb/source/ucp/ftp/test_ftpurl.cxx284
-rwxr-xr-xucb/source/ucp/ftp/test_ftpurl.hxx5
-rw-r--r--ucb/source/ucp/ftp/test_interactionhandler.hxx75
-rw-r--r--ucb/source/ucp/ftp/test_multiservicefac.cxx113
-rw-r--r--ucb/source/ucp/ftp/test_multiservicefac.hxx96
-rw-r--r--ucb/source/ucp/ftp/ucpftp.xml89
-rw-r--r--ucb/source/ucp/gio/gio_content.cxx1334
-rw-r--r--ucb/source/ucp/gio/gio_content.hxx200
-rw-r--r--ucb/source/ucp/gio/gio_datasupplier.cxx282
-rw-r--r--ucb/source/ucp/gio/gio_datasupplier.hxx99
-rw-r--r--ucb/source/ucp/gio/gio_inputstream.cxx120
-rw-r--r--ucb/source/ucp/gio/gio_inputstream.hxx94
-rw-r--r--ucb/source/ucp/gio/gio_mount.cxx183
-rw-r--r--ucb/source/ucp/gio/gio_mount.hxx72
-rw-r--r--ucb/source/ucp/gio/gio_outputstream.cxx92
-rw-r--r--ucb/source/ucp/gio/gio_outputstream.hxx82
-rw-r--r--ucb/source/ucp/gio/gio_provider.cxx175
-rw-r--r--ucb/source/ucp/gio/gio_provider.hxx66
-rw-r--r--ucb/source/ucp/gio/gio_resultset.cxx59
-rw-r--r--ucb/source/ucp/gio/gio_resultset.hxx56
-rw-r--r--ucb/source/ucp/gio/gio_seekable.cxx140
-rw-r--r--ucb/source/ucp/gio/gio_seekable.hxx80
-rw-r--r--ucb/source/ucp/gio/makefile.mk81
-rw-r--r--ucb/source/ucp/gio/ucpgio-ucd.txt6
-rw-r--r--ucb/source/ucp/gio/ucpgio.xml100
-rw-r--r--ucb/source/ucp/gvfs/gvfs_content.cxx1817
-rw-r--r--ucb/source/ucp/gvfs/gvfs_content.hxx271
-rw-r--r--ucb/source/ucp/gvfs/gvfs_directory.cxx423
-rw-r--r--ucb/source/ucp/gvfs/gvfs_directory.hxx95
-rw-r--r--ucb/source/ucp/gvfs/gvfs_provider.cxx228
-rw-r--r--ucb/source/ucp/gvfs/gvfs_provider.hxx65
-rw-r--r--ucb/source/ucp/gvfs/gvfs_stream.cxx343
-rw-r--r--ucb/source/ucp/gvfs/gvfs_stream.hxx165
-rw-r--r--ucb/source/ucp/gvfs/makefile.mk86
-rw-r--r--ucb/source/ucp/gvfs/ucpgvfs-ucd.txt6
-rw-r--r--ucb/source/ucp/gvfs/ucpgvfs.xml113
-rw-r--r--ucb/source/ucp/hierarchy/dynamicresultset.cxx91
-rw-r--r--ucb/source/ucp/hierarchy/dynamicresultset.hxx55
-rw-r--r--ucb/source/ucp/hierarchy/hierarchycontent.cxx2009
-rw-r--r--ucb/source/ucp/hierarchy/hierarchycontent.hxx311
-rw-r--r--ucb/source/ucp/hierarchy/hierarchycontentcaps.cxx765
-rw-r--r--ucb/source/ucp/hierarchy/hierarchydata.cxx1266
-rw-r--r--ucb/source/ucp/hierarchy/hierarchydata.hxx149
-rw-r--r--ucb/source/ucp/hierarchy/hierarchydatasource.cxx1116
-rw-r--r--ucb/source/ucp/hierarchy/hierarchydatasource.hxx125
-rw-r--r--ucb/source/ucp/hierarchy/hierarchydatasupplier.cxx446
-rw-r--r--ucb/source/ucp/hierarchy/hierarchydatasupplier.hxx82
-rw-r--r--ucb/source/ucp/hierarchy/hierarchyprovider.cxx338
-rw-r--r--ucb/source/ucp/hierarchy/hierarchyprovider.hxx155
-rw-r--r--ucb/source/ucp/hierarchy/hierarchyservices.cxx149
-rw-r--r--ucb/source/ucp/hierarchy/hierarchyuri.cxx209
-rw-r--r--ucb/source/ucp/hierarchy/hierarchyuri.hxx91
-rw-r--r--ucb/source/ucp/hierarchy/makefile.mk84
-rw-r--r--ucb/source/ucp/hierarchy/ucphier.xml121
-rw-r--r--ucb/source/ucp/inc/urihelper.hxx123
-rw-r--r--ucb/source/ucp/odma/makefile.mk97
-rw-r--r--ucb/source/ucp/odma/odma.h315
-rw-r--r--ucb/source/ucp/odma/odma_content.cxx1215
-rw-r--r--ucb/source/ucp/odma/odma_content.hxx196
-rw-r--r--ucb/source/ucp/odma/odma_contentcaps.cxx247
-rw-r--r--ucb/source/ucp/odma/odma_contentprops.hxx85
-rw-r--r--ucb/source/ucp/odma/odma_datasupplier.cxx455
-rw-r--r--ucb/source/ucp/odma/odma_datasupplier.hxx74
-rw-r--r--ucb/source/ucp/odma/odma_inputstream.cxx286
-rw-r--r--ucb/source/ucp/odma/odma_inputstream.hxx138
-rw-r--r--ucb/source/ucp/odma/odma_lib.cxx133
-rw-r--r--ucb/source/ucp/odma/odma_lib.hxx272
-rw-r--r--ucb/source/ucp/odma/odma_main.cxx91
-rw-r--r--ucb/source/ucp/odma/odma_provider.cxx599
-rw-r--r--ucb/source/ucp/odma/odma_provider.hxx174
-rw-r--r--ucb/source/ucp/odma/odma_resultset.cxx96
-rw-r--r--ucb/source/ucp/odma/odma_resultset.hxx60
-rw-r--r--ucb/source/ucp/odma/odma_services.cxx138
-rw-r--r--ucb/source/ucp/odma/ucpodma.xml100
-rw-r--r--ucb/source/ucp/package/makefile.mk89
-rw-r--r--ucb/source/ucp/package/pkgcontent.cxx3012
-rw-r--r--ucb/source/ucp/package/pkgcontent.hxx335
-rw-r--r--ucb/source/ucp/package/pkgcontentcaps.cxx562
-rw-r--r--ucb/source/ucp/package/pkgdatasupplier.cxx498
-rw-r--r--ucb/source/ucp/package/pkgdatasupplier.hxx77
-rw-r--r--ucb/source/ucp/package/pkgprovider.cxx330
-rw-r--r--ucb/source/ucp/package/pkgprovider.hxx105
-rw-r--r--ucb/source/ucp/package/pkgresultset.cxx94
-rw-r--r--ucb/source/ucp/package/pkgresultset.hxx59
-rw-r--r--ucb/source/ucp/package/pkgservices.cxx133
-rw-r--r--ucb/source/ucp/package/pkguri.cxx249
-rw-r--r--ucb/source/ucp/package/pkguri.hxx101
-rw-r--r--ucb/source/ucp/package/ucppkg.xml92
-rw-r--r--ucb/source/ucp/tdoc/makefile.mk94
-rw-r--r--ucb/source/ucp/tdoc/tdoc_content.cxx3135
-rw-r--r--ucb/source/ucp/tdoc/tdoc_content.hxx342
-rw-r--r--ucb/source/ucp/tdoc/tdoc_contentcaps.cxx705
-rw-r--r--ucb/source/ucp/tdoc/tdoc_datasupplier.cxx468
-rw-r--r--ucb/source/ucp/tdoc/tdoc_datasupplier.hxx81
-rw-r--r--ucb/source/ucp/tdoc/tdoc_docmgr.cxx691
-rw-r--r--ucb/source/ucp/tdoc/tdoc_docmgr.hxx173
-rw-r--r--ucb/source/ucp/tdoc/tdoc_documentcontentfactory.cxx188
-rw-r--r--ucb/source/ucp/tdoc/tdoc_documentcontentfactory.hxx86
-rw-r--r--ucb/source/ucp/tdoc/tdoc_passwordrequest.cxx242
-rw-r--r--ucb/source/ucp/tdoc/tdoc_passwordrequest.hxx100
-rw-r--r--ucb/source/ucp/tdoc/tdoc_provider.cxx629
-rw-r--r--ucb/source/ucp/tdoc/tdoc_provider.hxx148
-rw-r--r--ucb/source/ucp/tdoc/tdoc_resultset.cxx95
-rw-r--r--ucb/source/ucp/tdoc/tdoc_resultset.hxx56
-rw-r--r--ucb/source/ucp/tdoc/tdoc_services.cxx151
-rw-r--r--ucb/source/ucp/tdoc/tdoc_stgelems.cxx1108
-rw-r--r--ucb/source/ucp/tdoc/tdoc_stgelems.hxx542
-rw-r--r--ucb/source/ucp/tdoc/tdoc_storage.cxx712
-rw-r--r--ucb/source/ucp/tdoc/tdoc_storage.hxx172
-rw-r--r--ucb/source/ucp/tdoc/tdoc_uri.cxx135
-rw-r--r--ucb/source/ucp/tdoc/tdoc_uri.hxx131
-rw-r--r--ucb/source/ucp/tdoc/ucptdoc.xml129
-rw-r--r--ucb/source/ucp/webdav/ContentProperties.cxx573
-rw-r--r--ucb/source/ucp/webdav/ContentProperties.hxx197
-rw-r--r--ucb/source/ucp/webdav/DAVAuthListener.hxx52
-rw-r--r--ucb/source/ucp/webdav/DAVAuthListenerImpl.hxx77
-rw-r--r--ucb/source/ucp/webdav/DAVException.hxx166
-rw-r--r--ucb/source/ucp/webdav/DAVProperties.cxx199
-rw-r--r--ucb/source/ucp/webdav/DAVProperties.hxx62
-rw-r--r--ucb/source/ucp/webdav/DAVRequestEnvironment.hxx62
-rw-r--r--ucb/source/ucp/webdav/DAVResource.hxx67
-rw-r--r--ucb/source/ucp/webdav/DAVResourceAccess.cxx1218
-rw-r--r--ucb/source/ucp/webdav/DAVResourceAccess.hxx251
-rw-r--r--ucb/source/ucp/webdav/DAVSession.hxx219
-rw-r--r--ucb/source/ucp/webdav/DAVSessionFactory.cxx106
-rw-r--r--ucb/source/ucp/webdav/DAVSessionFactory.hxx82
-rw-r--r--ucb/source/ucp/webdav/DAVTypes.hxx85
-rw-r--r--ucb/source/ucp/webdav/DateTimeHelper.cxx270
-rw-r--r--ucb/source/ucp/webdav/DateTimeHelper.hxx63
-rw-r--r--ucb/source/ucp/webdav/LinkSequence.cxx223
-rw-r--r--ucb/source/ucp/webdav/LinkSequence.hxx51
-rw-r--r--ucb/source/ucp/webdav/LockEntrySequence.cxx244
-rw-r--r--ucb/source/ucp/webdav/LockEntrySequence.hxx48
-rw-r--r--ucb/source/ucp/webdav/LockSequence.cxx351
-rw-r--r--ucb/source/ucp/webdav/LockSequence.hxx48
-rw-r--r--ucb/source/ucp/webdav/NeonHeadRequest.cxx200
-rw-r--r--ucb/source/ucp/webdav/NeonHeadRequest.hxx53
-rw-r--r--ucb/source/ucp/webdav/NeonInputStream.cxx195
-rw-r--r--ucb/source/ucp/webdav/NeonInputStream.hxx124
-rw-r--r--ucb/source/ucp/webdav/NeonLockStore.cxx245
-rw-r--r--ucb/source/ucp/webdav/NeonLockStore.hxx102
-rw-r--r--ucb/source/ucp/webdav/NeonPropFindRequest.cxx345
-rw-r--r--ucb/source/ucp/webdav/NeonPropFindRequest.hxx62
-rw-r--r--ucb/source/ucp/webdav/NeonSession.cxx2184
-rw-r--r--ucb/source/ucp/webdav/NeonSession.hxx295
-rw-r--r--ucb/source/ucp/webdav/NeonTypes.hxx46
-rw-r--r--ucb/source/ucp/webdav/NeonUri.cxx358
-rw-r--r--ucb/source/ucp/webdav/NeonUri.hxx102
-rw-r--r--ucb/source/ucp/webdav/PropertyMap.hxx65
-rw-r--r--ucb/source/ucp/webdav/UCBDeadPropertyValue.cxx547
-rw-r--r--ucb/source/ucp/webdav/UCBDeadPropertyValue.hxx65
-rw-r--r--ucb/source/ucp/webdav/makefile.mk160
-rw-r--r--ucb/source/ucp/webdav/ucpdav.xml109
-rw-r--r--ucb/source/ucp/webdav/webdavcontent.cxx3247
-rw-r--r--ucb/source/ucp/webdav/webdavcontent.hxx299
-rw-r--r--ucb/source/ucp/webdav/webdavcontentcaps.cxx672
-rw-r--r--ucb/source/ucp/webdav/webdavdatasupplier.cxx512
-rw-r--r--ucb/source/ucp/webdav/webdavdatasupplier.hxx82
-rw-r--r--ucb/source/ucp/webdav/webdavprovider.cxx232
-rw-r--r--ucb/source/ucp/webdav/webdavprovider.hxx124
-rw-r--r--ucb/source/ucp/webdav/webdavresultset.cxx95
-rw-r--r--ucb/source/ucp/webdav/webdavresultset.hxx59
-rw-r--r--ucb/source/ucp/webdav/webdavservices.cxx130
-rw-r--r--ucb/test/com/sun/star/comp/ucb/GlobalTransfer_Test.java214
-rw-r--r--ucb/test/com/sun/star/comp/ucb/makefile.mk60
-rw-r--r--ucb/workben/cachemap/cachemapobject1.cxx90
-rw-r--r--ucb/workben/cachemap/cachemapobject1.hxx104
-rw-r--r--ucb/workben/cachemap/cachemapobject2.hxx40
-rw-r--r--ucb/workben/cachemap/cachemapobject3.cxx105
-rw-r--r--ucb/workben/cachemap/cachemapobject3.hxx103
-rw-r--r--ucb/workben/cachemap/cachemapobjectcontainer2.cxx68
-rw-r--r--ucb/workben/cachemap/cachemapobjectcontainer2.hxx73
-rw-r--r--ucb/workben/cachemap/cachemaptest.cxx168
-rw-r--r--ucb/workben/cachemap/makefile.mk52
-rw-r--r--ucb/workben/ucb/makefile.mk84
-rw-r--r--ucb/workben/ucb/srcharg.cxx490
-rw-r--r--ucb/workben/ucb/srcharg.hxx41
-rw-r--r--ucb/workben/ucb/ucbdemo.cxx2597
-rw-r--r--ucbhelper/inc/makefile.mk48
-rw-r--r--ucbhelper/inc/pch/precompiled_ucbhelper.cxx29
-rw-r--r--ucbhelper/inc/pch/precompiled_ucbhelper.hxx32
-rw-r--r--ucbhelper/inc/ucbhelper/activedatasink.hxx75
-rw-r--r--ucbhelper/inc/ucbhelper/activedatastreamer.hxx70
-rw-r--r--ucbhelper/inc/ucbhelper/cancelcommandexecution.hxx110
-rw-r--r--ucbhelper/inc/ucbhelper/commandenvironment.hxx102
-rw-r--r--ucbhelper/inc/ucbhelper/commandenvironmentproxy.hxx99
-rw-r--r--ucbhelper/inc/ucbhelper/configurationkeys.hxx43
-rw-r--r--ucbhelper/inc/ucbhelper/content.hxx1040
-rw-r--r--ucbhelper/inc/ucbhelper/contentbroker.hxx205
-rw-r--r--ucbhelper/inc/ucbhelper/contenthelper.hxx524
-rw-r--r--ucbhelper/inc/ucbhelper/contentidentifier.hxx100
-rw-r--r--ucbhelper/inc/ucbhelper/contentinfo.hxx177
-rw-r--r--ucbhelper/inc/ucbhelper/fileidentifierconverter.hxx127
-rw-r--r--ucbhelper/inc/ucbhelper/handleinteractionrequest.hxx214
-rw-r--r--ucbhelper/inc/ucbhelper/interactionrequest.hxx727
-rw-r--r--ucbhelper/inc/ucbhelper/interceptedinteraction.hxx351
-rw-r--r--ucbhelper/inc/ucbhelper/macros.hxx747
-rw-r--r--ucbhelper/inc/ucbhelper/propertyvalueset.hxx434
-rw-r--r--ucbhelper/inc/ucbhelper/providerhelper.hxx285
-rw-r--r--ucbhelper/inc/ucbhelper/proxydecider.hxx143
-rw-r--r--ucbhelper/inc/ucbhelper/registerucb.hxx129
-rw-r--r--ucbhelper/inc/ucbhelper/resultset.hxx579
-rw-r--r--ucbhelper/inc/ucbhelper/resultsethelper.hxx220
-rw-r--r--ucbhelper/inc/ucbhelper/resultsetmetadata.hxx476
-rw-r--r--ucbhelper/inc/ucbhelper/simpleauthenticationrequest.hxx212
-rwxr-xr-xucbhelper/inc/ucbhelper/simplecertificatevalidationrequest.hxx78
-rw-r--r--ucbhelper/inc/ucbhelper/simpleinteractionrequest.hxx96
-rw-r--r--ucbhelper/inc/ucbhelper/simpleioerrorrequest.hxx75
-rw-r--r--ucbhelper/inc/ucbhelper/simplenameclashresolverequest.hxx83
-rw-r--r--ucbhelper/inc/ucbhelper/ucbhelperdllapi.h41
-rw-r--r--ucbhelper/prj/build.lst7
-rw-r--r--ucbhelper/prj/d.lst40
-rw-r--r--ucbhelper/source/client/activedatasink.cxx93
-rw-r--r--ucbhelper/source/client/activedatastreamer.cxx92
-rw-r--r--ucbhelper/source/client/commandenvironment.cxx139
-rw-r--r--ucbhelper/source/client/content.cxx1972
-rw-r--r--ucbhelper/source/client/contentbroker.cxx380
-rw-r--r--ucbhelper/source/client/fileidentifierconverter.cxx107
-rw-r--r--ucbhelper/source/client/interceptedinteraction.cxx201
-rw-r--r--ucbhelper/source/client/makefile.mk60
-rw-r--r--ucbhelper/source/client/proxydecider.cxx861
-rw-r--r--ucbhelper/source/provider/cancelcommandexecution.cxx130
-rw-r--r--ucbhelper/source/provider/commandenvironmentproxy.cxx167
-rw-r--r--ucbhelper/source/provider/configureucb.cxx242
-rw-r--r--ucbhelper/source/provider/contenthelper.cxx1127
-rw-r--r--ucbhelper/source/provider/contentidentifier.cxx221
-rw-r--r--ucbhelper/source/provider/contentinfo.cxx423
-rw-r--r--ucbhelper/source/provider/handleinteractionrequest.cxx164
-rw-r--r--ucbhelper/source/provider/interactionrequest.cxx1151
-rw-r--r--ucbhelper/source/provider/makefile.mk70
-rw-r--r--ucbhelper/source/provider/propertyvalueset.cxx924
-rw-r--r--ucbhelper/source/provider/provconf.cxx266
-rw-r--r--ucbhelper/source/provider/provconf.hxx52
-rw-r--r--ucbhelper/source/provider/providerhelper.cxx672
-rw-r--r--ucbhelper/source/provider/registerucb.cxx164
-rw-r--r--ucbhelper/source/provider/resultset.cxx1695
-rw-r--r--ucbhelper/source/provider/resultsethelper.cxx329
-rw-r--r--ucbhelper/source/provider/resultsetmetadata.cxx602
-rw-r--r--ucbhelper/source/provider/simpleauthenticationrequest.cxx243
-rwxr-xr-xucbhelper/source/provider/simplecertificatevalidationrequest.cxx88
-rw-r--r--ucbhelper/source/provider/simpleinteractionrequest.cxx132
-rw-r--r--ucbhelper/source/provider/simpleioerrorrequest.cxx60
-rw-r--r--ucbhelper/source/provider/simplenameclashresolverequest.cxx67
-rw-r--r--ucbhelper/util/makefile.mk75
-rw-r--r--ucbhelper/util/makefile.pmk31
-rw-r--r--ucbhelper/util/ucbhelper.flt181
-rw-r--r--ucbhelper/util/ucbhelper.xml114
-rw-r--r--ucbhelper/version.mk42
-rw-r--r--ucbhelper/workben/myucp/makefile.mk90
-rw-r--r--ucbhelper/workben/myucp/myucp_content.cxx983
-rw-r--r--ucbhelper/workben/myucp/myucp_content.hxx191
-rw-r--r--ucbhelper/workben/myucp/myucp_contentcaps.cxx223
-rw-r--r--ucbhelper/workben/myucp/myucp_datasupplier.cxx398
-rw-r--r--ucbhelper/workben/myucp/myucp_datasupplier.hxx77
-rw-r--r--ucbhelper/workben/myucp/myucp_provider.cxx171
-rw-r--r--ucbhelper/workben/myucp/myucp_provider.hxx95
-rw-r--r--ucbhelper/workben/myucp/myucp_resultset.cxx97
-rw-r--r--ucbhelper/workben/myucp/myucp_resultset.hxx62
-rw-r--r--ucbhelper/workben/myucp/myucp_services.cxx136
-rw-r--r--ucbhelper/workben/ucbexplorer/bmp/document.bmpbin0 -> 1318 bytes
-rw-r--r--ucbhelper/workben/ucbexplorer/bmp/fldclose.bmpbin0 -> 298 bytes
-rw-r--r--ucbhelper/workben/ucbexplorer/bmp/fldopen.bmpbin0 -> 322 bytes
-rw-r--r--ucbhelper/workben/ucbexplorer/bmp/link.bmpbin0 -> 1318 bytes
-rw-r--r--ucbhelper/workben/ucbexplorer/makefile.mk71
-rw-r--r--ucbhelper/workben/ucbexplorer/ucbexplorer.cxx1200
-rw-r--r--ucbhelper/workben/ucbexplorer/ucbexplorer.hrc65
-rw-r--r--ucbhelper/workben/ucbexplorer/ucbexplorer.src149
-rw-r--r--udkapi/com/sun/star/beans/Ambiguous.idl59
-rw-r--r--udkapi/com/sun/star/beans/Defaulted.idl59
-rw-r--r--udkapi/com/sun/star/beans/GetDirectPropertyTolerantResult.idl65
-rw-r--r--udkapi/com/sun/star/beans/GetPropertyTolerantResult.idl82
-rw-r--r--udkapi/com/sun/star/beans/IllegalTypeException.idl55
-rw-r--r--udkapi/com/sun/star/beans/Introspection.idl60
-rw-r--r--udkapi/com/sun/star/beans/IntrospectionException.idl54
-rw-r--r--udkapi/com/sun/star/beans/MethodConcept.idl127
-rw-r--r--udkapi/com/sun/star/beans/NamedValue.idl54
-rw-r--r--udkapi/com/sun/star/beans/NotRemoveableException.idl51
-rw-r--r--udkapi/com/sun/star/beans/Optional.idl60
-rw-r--r--udkapi/com/sun/star/beans/Pair.idl56
-rw-r--r--udkapi/com/sun/star/beans/Property.idl92
-rw-r--r--udkapi/com/sun/star/beans/PropertyAttribute.idl121
-rw-r--r--udkapi/com/sun/star/beans/PropertyBag.idl70
-rw-r--r--udkapi/com/sun/star/beans/PropertyChangeEvent.idl94
-rw-r--r--udkapi/com/sun/star/beans/PropertyConcept.idl93
-rw-r--r--udkapi/com/sun/star/beans/PropertyExistException.idl54
-rw-r--r--udkapi/com/sun/star/beans/PropertySet.idl76
-rw-r--r--udkapi/com/sun/star/beans/PropertySetInfoChange.idl61
-rw-r--r--udkapi/com/sun/star/beans/PropertySetInfoChangeEvent.idl76
-rw-r--r--udkapi/com/sun/star/beans/PropertyState.idl97
-rw-r--r--udkapi/com/sun/star/beans/PropertyStateChangeEvent.idl95
-rw-r--r--udkapi/com/sun/star/beans/PropertyValue.idl85
-rw-r--r--udkapi/com/sun/star/beans/PropertyValues.idl49
-rw-r--r--udkapi/com/sun/star/beans/PropertyVetoException.idl54
-rw-r--r--udkapi/com/sun/star/beans/SetPropertyTolerantFailed.idl66
-rw-r--r--udkapi/com/sun/star/beans/StringPair.idl55
-rw-r--r--udkapi/com/sun/star/beans/TolerantPropertySetResultType.idl90
-rw-r--r--udkapi/com/sun/star/beans/UnknownPropertyException.idl54
-rw-r--r--udkapi/com/sun/star/beans/XExactName.idl73
-rw-r--r--udkapi/com/sun/star/beans/XFastPropertySet.idl126
-rw-r--r--udkapi/com/sun/star/beans/XHierarchicalPropertySet.idl175
-rw-r--r--udkapi/com/sun/star/beans/XHierarchicalPropertySetInfo.idl104
-rw-r--r--udkapi/com/sun/star/beans/XIntroTest.idl208
-rw-r--r--udkapi/com/sun/star/beans/XIntrospection.idl121
-rw-r--r--udkapi/com/sun/star/beans/XIntrospectionAccess.idl321
-rw-r--r--udkapi/com/sun/star/beans/XMaterialHolder.idl67
-rw-r--r--udkapi/com/sun/star/beans/XMultiHierarchicalPropertySet.idl161
-rw-r--r--udkapi/com/sun/star/beans/XMultiPropertySet.idl180
-rw-r--r--udkapi/com/sun/star/beans/XMultiPropertyStates.idl140
-rw-r--r--udkapi/com/sun/star/beans/XPropertiesChangeListener.idl66
-rw-r--r--udkapi/com/sun/star/beans/XPropertiesChangeNotifier.idl71
-rw-r--r--udkapi/com/sun/star/beans/XProperty.idl69
-rw-r--r--udkapi/com/sun/star/beans/XPropertyAccess.idl100
-rw-r--r--udkapi/com/sun/star/beans/XPropertyChangeListener.idl62
-rw-r--r--udkapi/com/sun/star/beans/XPropertyContainer.idl118
-rw-r--r--udkapi/com/sun/star/beans/XPropertySet.idl217
-rw-r--r--udkapi/com/sun/star/beans/XPropertySetInfo.idl102
-rw-r--r--udkapi/com/sun/star/beans/XPropertySetInfoChangeListener.idl63
-rw-r--r--udkapi/com/sun/star/beans/XPropertySetInfoChangeNotifier.idl75
-rw-r--r--udkapi/com/sun/star/beans/XPropertyState.idl150
-rw-r--r--udkapi/com/sun/star/beans/XPropertyStateChangeListener.idl65
-rw-r--r--udkapi/com/sun/star/beans/XPropertyWithState.idl117
-rw-r--r--udkapi/com/sun/star/beans/XTolerantMultiPropertySet.idl164
-rw-r--r--udkapi/com/sun/star/beans/XVetoableChangeListener.idl70
-rw-r--r--udkapi/com/sun/star/beans/makefile.mk101
-rw-r--r--udkapi/com/sun/star/bridge/Bridge.idl94
-rw-r--r--udkapi/com/sun/star/bridge/BridgeExistsException.idl44
-rw-r--r--udkapi/com/sun/star/bridge/BridgeFactory.idl66
-rw-r--r--udkapi/com/sun/star/bridge/IiopBridge.idl80
-rw-r--r--udkapi/com/sun/star/bridge/InvalidProtocolChangeException.idl54
-rw-r--r--udkapi/com/sun/star/bridge/ModelDependent.idl79
-rw-r--r--udkapi/com/sun/star/bridge/OleApplicationRegistration.idl75
-rw-r--r--udkapi/com/sun/star/bridge/OleBridgeSupplier.idl63
-rw-r--r--udkapi/com/sun/star/bridge/OleBridgeSupplier2.idl75
-rw-r--r--udkapi/com/sun/star/bridge/OleBridgeSupplierVar1.idl58
-rw-r--r--udkapi/com/sun/star/bridge/OleObjectFactory.idl67
-rw-r--r--udkapi/com/sun/star/bridge/ProtocolProperty.idl46
-rw-r--r--udkapi/com/sun/star/bridge/UnoUrlResolver.idl51
-rw-r--r--udkapi/com/sun/star/bridge/UrpBridge.idl80
-rw-r--r--udkapi/com/sun/star/bridge/XBridge.idl64
-rw-r--r--udkapi/com/sun/star/bridge/XBridgeFactory.idl95
-rw-r--r--udkapi/com/sun/star/bridge/XBridgeSupplier.idl107
-rw-r--r--udkapi/com/sun/star/bridge/XBridgeSupplier2.idl121
-rw-r--r--udkapi/com/sun/star/bridge/XInstanceProvider.idl64
-rw-r--r--udkapi/com/sun/star/bridge/XProtocolProperties.idl100
-rw-r--r--udkapi/com/sun/star/bridge/XUnoUrlResolver.idl66
-rw-r--r--udkapi/com/sun/star/bridge/makefile.mk66
-rw-r--r--udkapi/com/sun/star/bridge/oleautomation/ApplicationRegistration.idl81
-rw-r--r--udkapi/com/sun/star/bridge/oleautomation/BridgeSupplier.idl80
-rw-r--r--udkapi/com/sun/star/bridge/oleautomation/Currency.idl61
-rw-r--r--udkapi/com/sun/star/bridge/oleautomation/Date.idl60
-rw-r--r--udkapi/com/sun/star/bridge/oleautomation/Decimal.idl64
-rw-r--r--udkapi/com/sun/star/bridge/oleautomation/Factory.idl69
-rw-r--r--udkapi/com/sun/star/bridge/oleautomation/NamedArgument.idl63
-rw-r--r--udkapi/com/sun/star/bridge/oleautomation/PropertyPutArgument.idl70
-rw-r--r--udkapi/com/sun/star/bridge/oleautomation/SCode.idl62
-rw-r--r--udkapi/com/sun/star/bridge/oleautomation/XAutomationObject.idl58
-rw-r--r--udkapi/com/sun/star/bridge/oleautomation/makefile.mk54
-rw-r--r--udkapi/com/sun/star/connection/Acceptor.idl50
-rw-r--r--udkapi/com/sun/star/connection/AlreadyAcceptingException.idl42
-rw-r--r--udkapi/com/sun/star/connection/ConnectionSetupException.idl42
-rw-r--r--udkapi/com/sun/star/connection/Connector.idl49
-rw-r--r--udkapi/com/sun/star/connection/NoConnectException.idl42
-rw-r--r--udkapi/com/sun/star/connection/SocketPermission.idl104
-rw-r--r--udkapi/com/sun/star/connection/XAcceptor.idl83
-rw-r--r--udkapi/com/sun/star/connection/XConnection.idl98
-rw-r--r--udkapi/com/sun/star/connection/XConnection2.idl64
-rw-r--r--udkapi/com/sun/star/connection/XConnectionBroadcaster.idl65
-rw-r--r--udkapi/com/sun/star/connection/XConnector.idl72
-rw-r--r--udkapi/com/sun/star/connection/makefile.mk56
-rw-r--r--udkapi/com/sun/star/container/ContainerEvent.idl73
-rw-r--r--udkapi/com/sun/star/container/ElementExistException.idl58
-rw-r--r--udkapi/com/sun/star/container/EnumerableMap.idl141
-rw-r--r--udkapi/com/sun/star/container/NoSuchElementException.idl54
-rw-r--r--udkapi/com/sun/star/container/XChild.idl74
-rw-r--r--udkapi/com/sun/star/container/XComponentEnumeration.idl70
-rw-r--r--udkapi/com/sun/star/container/XComponentEnumerationAccess.idl62
-rw-r--r--udkapi/com/sun/star/container/XContainer.idl93
-rw-r--r--udkapi/com/sun/star/container/XContainerApproveBroadcaster.idl66
-rw-r--r--udkapi/com/sun/star/container/XContainerApproveListener.idl89
-rw-r--r--udkapi/com/sun/star/container/XContainerListener.idl73
-rw-r--r--udkapi/com/sun/star/container/XContainerQuery.idl114
-rw-r--r--udkapi/com/sun/star/container/XContentEnumerationAccess.idl84
-rw-r--r--udkapi/com/sun/star/container/XElementAccess.idl72
-rw-r--r--udkapi/com/sun/star/container/XEnumerableMap.idl110
-rw-r--r--udkapi/com/sun/star/container/XEnumeration.idl102
-rw-r--r--udkapi/com/sun/star/container/XEnumerationAccess.idl63
-rw-r--r--udkapi/com/sun/star/container/XHierarchicalName.idl82
-rw-r--r--udkapi/com/sun/star/container/XHierarchicalNameAccess.idl90
-rw-r--r--udkapi/com/sun/star/container/XHierarchicalNameContainer.idl92
-rw-r--r--udkapi/com/sun/star/container/XHierarchicalNameReplace.idl81
-rw-r--r--udkapi/com/sun/star/container/XIdentifierAccess.idl84
-rw-r--r--udkapi/com/sun/star/container/XIdentifierContainer.idl111
-rw-r--r--udkapi/com/sun/star/container/XIdentifierReplace.idl89
-rw-r--r--udkapi/com/sun/star/container/XImplicitIDAccess.idl68
-rw-r--r--udkapi/com/sun/star/container/XImplicitIDContainer.idl74
-rw-r--r--udkapi/com/sun/star/container/XImplicitIDReplace.idl66
-rw-r--r--udkapi/com/sun/star/container/XIndexAccess.idl91
-rw-r--r--udkapi/com/sun/star/container/XIndexContainer.idl83
-rw-r--r--udkapi/com/sun/star/container/XIndexReplace.idl74
-rw-r--r--udkapi/com/sun/star/container/XMap.idl203
-rw-r--r--udkapi/com/sun/star/container/XNameAccess.idl106
-rw-r--r--udkapi/com/sun/star/container/XNameContainer.idl86
-rw-r--r--udkapi/com/sun/star/container/XNameReplace.idl74
-rw-r--r--udkapi/com/sun/star/container/XNamed.idl65
-rw-r--r--udkapi/com/sun/star/container/XSet.idl87
-rw-r--r--udkapi/com/sun/star/container/XStringKeyMap.idl154
-rw-r--r--udkapi/com/sun/star/container/XUniqueIDAccess.idl65
-rw-r--r--udkapi/com/sun/star/container/makefile.mk83
-rw-r--r--udkapi/com/sun/star/corba/corba.idl103
-rw-r--r--udkapi/com/sun/star/corba/giop/giop.idl251
-rw-r--r--udkapi/com/sun/star/corba/giop/makefile.mk43
-rw-r--r--udkapi/com/sun/star/corba/iiop/iiop.idl87
-rw-r--r--udkapi/com/sun/star/corba/iiop/makefile.mk43
-rw-r--r--udkapi/com/sun/star/corba/iop/iop.idl123
-rw-r--r--udkapi/com/sun/star/corba/iop/makefile.mk43
-rw-r--r--udkapi/com/sun/star/corba/makefile.mk43
-rw-r--r--udkapi/com/sun/star/io/AlreadyConnectedException.idl56
-rw-r--r--udkapi/com/sun/star/io/BufferSizeExceededException.idl60
-rw-r--r--udkapi/com/sun/star/io/ConnectException.idl57
-rw-r--r--udkapi/com/sun/star/io/DataInputStream.idl81
-rw-r--r--udkapi/com/sun/star/io/DataOutputStream.idl71
-rw-r--r--udkapi/com/sun/star/io/DataTransferEvent.idl63
-rw-r--r--udkapi/com/sun/star/io/FilePermission.idl84
-rw-r--r--udkapi/com/sun/star/io/IOException.idl55
-rw-r--r--udkapi/com/sun/star/io/MarkableInputStream.idl78
-rw-r--r--udkapi/com/sun/star/io/MarkableOutputStream.idl83
-rw-r--r--udkapi/com/sun/star/io/NoRouteToHostException.idl56
-rw-r--r--udkapi/com/sun/star/io/NotConnectedException.idl56
-rw-r--r--udkapi/com/sun/star/io/ObjectInputStream.idl109
-rw-r--r--udkapi/com/sun/star/io/ObjectOutputStream.idl96
-rw-r--r--udkapi/com/sun/star/io/Pipe.idl72
-rw-r--r--udkapi/com/sun/star/io/Pump.idl78
-rw-r--r--udkapi/com/sun/star/io/SequenceInputStream.idl62
-rw-r--r--udkapi/com/sun/star/io/SequenceOutputStream.idl48
-rw-r--r--udkapi/com/sun/star/io/SocketException.idl55
-rw-r--r--udkapi/com/sun/star/io/TempFile.idl47
-rw-r--r--udkapi/com/sun/star/io/TextInputStream.idl70
-rw-r--r--udkapi/com/sun/star/io/TextOutputStream.idl66
-rw-r--r--udkapi/com/sun/star/io/UnexpectedEOFException.idl56
-rw-r--r--udkapi/com/sun/star/io/UnknownHostException.idl54
-rw-r--r--udkapi/com/sun/star/io/WrongFormatException.idl56
-rw-r--r--udkapi/com/sun/star/io/XActiveDataControl.idl107
-rw-r--r--udkapi/com/sun/star/io/XActiveDataSink.idl81
-rw-r--r--udkapi/com/sun/star/io/XActiveDataSource.idl81
-rw-r--r--udkapi/com/sun/star/io/XActiveDataStreamer.idl82
-rw-r--r--udkapi/com/sun/star/io/XAsyncOutputMonitor.idl95
-rw-r--r--udkapi/com/sun/star/io/XConnectable.idl94
-rw-r--r--udkapi/com/sun/star/io/XDataExporter.idl86
-rw-r--r--udkapi/com/sun/star/io/XDataImporter.idl85
-rw-r--r--udkapi/com/sun/star/io/XDataInputStream.idl134
-rw-r--r--udkapi/com/sun/star/io/XDataOutputStream.idl134
-rw-r--r--udkapi/com/sun/star/io/XDataTransferEventListener.idl73
-rw-r--r--udkapi/com/sun/star/io/XInputStream.idl177
-rw-r--r--udkapi/com/sun/star/io/XInputStreamProvider.idl60
-rw-r--r--udkapi/com/sun/star/io/XMarkableStream.idl127
-rw-r--r--udkapi/com/sun/star/io/XObjectInputStream.idl72
-rw-r--r--udkapi/com/sun/star/io/XObjectOutputStream.idl71
-rw-r--r--udkapi/com/sun/star/io/XOutputStream.idl105
-rw-r--r--udkapi/com/sun/star/io/XPersist.idl72
-rw-r--r--udkapi/com/sun/star/io/XPersistObject.idl117
-rw-r--r--udkapi/com/sun/star/io/XSeekable.idl93
-rw-r--r--udkapi/com/sun/star/io/XSeekableInputStream.idl56
-rw-r--r--udkapi/com/sun/star/io/XSequenceOutputStream.idl65
-rw-r--r--udkapi/com/sun/star/io/XStream.idl80
-rw-r--r--udkapi/com/sun/star/io/XStreamListener.idl90
-rw-r--r--udkapi/com/sun/star/io/XTempFile.idl89
-rw-r--r--udkapi/com/sun/star/io/XTextInputStream.idl121
-rw-r--r--udkapi/com/sun/star/io/XTextOutputStream.idl86
-rw-r--r--udkapi/com/sun/star/io/XTruncate.idl67
-rw-r--r--udkapi/com/sun/star/io/XXMLExtractor.idl64
-rw-r--r--udkapi/com/sun/star/io/makefile.mk99
-rwxr-xr-xudkapi/com/sun/star/java/InvalidJavaSettingsException.idl52
-rw-r--r--udkapi/com/sun/star/java/JavaDisabledException.idl51
-rw-r--r--udkapi/com/sun/star/java/JavaInitializationException.idl59
-rw-r--r--udkapi/com/sun/star/java/JavaNotConfiguredException.idl50
-rw-r--r--udkapi/com/sun/star/java/JavaNotFoundException.idl48
-rw-r--r--udkapi/com/sun/star/java/JavaVMCreationFailureException.idl61
-rw-r--r--udkapi/com/sun/star/java/JavaVirtualMachine.idl64
-rw-r--r--udkapi/com/sun/star/java/MissingJavaRuntimeException.idl53
-rwxr-xr-xudkapi/com/sun/star/java/RestartRequiredException.idl48
-rw-r--r--udkapi/com/sun/star/java/WrongJavaVersionException.idl64
-rw-r--r--udkapi/com/sun/star/java/XJavaThreadRegister_11.idl83
-rw-r--r--udkapi/com/sun/star/java/XJavaVM.idl141
-rw-r--r--udkapi/com/sun/star/java/makefile.mk57
-rw-r--r--udkapi/com/sun/star/lang/ArrayIndexOutOfBoundsException.idl59
-rw-r--r--udkapi/com/sun/star/lang/ClassNotFoundException.idl56
-rw-r--r--udkapi/com/sun/star/lang/DisposedException.idl60
-rw-r--r--udkapi/com/sun/star/lang/EventObject.idl61
-rw-r--r--udkapi/com/sun/star/lang/IllegalAccessException.idl56
-rw-r--r--udkapi/com/sun/star/lang/IllegalArgumentException.idl65
-rw-r--r--udkapi/com/sun/star/lang/IndexOutOfBoundsException.idl59
-rw-r--r--udkapi/com/sun/star/lang/InvalidListenerException.idl59
-rw-r--r--udkapi/com/sun/star/lang/ListenerExistException.idl58
-rw-r--r--udkapi/com/sun/star/lang/Locale.idl122
-rw-r--r--udkapi/com/sun/star/lang/MultiServiceFactory.idl86
-rw-r--r--udkapi/com/sun/star/lang/NoSuchFieldException.idl55
-rw-r--r--udkapi/com/sun/star/lang/NoSuchMethodException.idl55
-rw-r--r--udkapi/com/sun/star/lang/NoSupportException.idl61
-rw-r--r--udkapi/com/sun/star/lang/NotInitializedException.idl56
-rw-r--r--udkapi/com/sun/star/lang/NullPointerException.idl61
-rw-r--r--udkapi/com/sun/star/lang/RegistryServiceManager.idl100
-rw-r--r--udkapi/com/sun/star/lang/ServiceManager.idl141
-rw-r--r--udkapi/com/sun/star/lang/ServiceNotRegisteredException.idl58
-rw-r--r--udkapi/com/sun/star/lang/SystemDependent.idl125
-rw-r--r--udkapi/com/sun/star/lang/WrappedTargetException.idl69
-rw-r--r--udkapi/com/sun/star/lang/WrappedTargetRuntimeException.idl61
-rw-r--r--udkapi/com/sun/star/lang/XComponent.idl143
-rw-r--r--udkapi/com/sun/star/lang/XConnectionPoint.idl204
-rw-r--r--udkapi/com/sun/star/lang/XConnectionPointContainer.idl118
-rw-r--r--udkapi/com/sun/star/lang/XEventListener.idl76
-rw-r--r--udkapi/com/sun/star/lang/XInitialization.idl83
-rw-r--r--udkapi/com/sun/star/lang/XLocalizable.idl70
-rw-r--r--udkapi/com/sun/star/lang/XMain.idl69
-rw-r--r--udkapi/com/sun/star/lang/XMultiComponentFactory.idl90
-rw-r--r--udkapi/com/sun/star/lang/XMultiServiceFactory.idl97
-rw-r--r--udkapi/com/sun/star/lang/XServiceDisplayName.idl76
-rw-r--r--udkapi/com/sun/star/lang/XServiceInfo.idl79
-rw-r--r--udkapi/com/sun/star/lang/XServiceName.idl64
-rw-r--r--udkapi/com/sun/star/lang/XSingleComponentFactory.idl75
-rw-r--r--udkapi/com/sun/star/lang/XSingleServiceFactory.idl82
-rw-r--r--udkapi/com/sun/star/lang/XTypeProvider.idl79
-rw-r--r--udkapi/com/sun/star/lang/XUnoTunnel.idl80
-rw-r--r--udkapi/com/sun/star/lang/makefile.mk83
-rw-r--r--udkapi/com/sun/star/loader/CannotActivateFactoryException.idl62
-rw-r--r--udkapi/com/sun/star/loader/Dynamic.idl67
-rw-r--r--udkapi/com/sun/star/loader/Java.idl66
-rw-r--r--udkapi/com/sun/star/loader/Java2.idl51
-rw-r--r--udkapi/com/sun/star/loader/SharedLibrary.idl64
-rw-r--r--udkapi/com/sun/star/loader/XImplementationLoader.idl123
-rw-r--r--udkapi/com/sun/star/loader/makefile.mk51
-rw-r--r--udkapi/com/sun/star/makefile.mk46
-rw-r--r--udkapi/com/sun/star/reflection/CoreReflection.idl74
-rw-r--r--udkapi/com/sun/star/reflection/FieldAccessMode.idl64
-rw-r--r--udkapi/com/sun/star/reflection/InvalidTypeNameException.idl55
-rw-r--r--udkapi/com/sun/star/reflection/InvocationTargetException.idl57
-rw-r--r--udkapi/com/sun/star/reflection/MethodMode.idl59
-rw-r--r--udkapi/com/sun/star/reflection/NoSuchTypeNameException.idl54
-rw-r--r--udkapi/com/sun/star/reflection/ParamInfo.idl66
-rw-r--r--udkapi/com/sun/star/reflection/ParamMode.idl63
-rw-r--r--udkapi/com/sun/star/reflection/ProxyFactory.idl73
-rw-r--r--udkapi/com/sun/star/reflection/TypeDescriptionManager.idl125
-rw-r--r--udkapi/com/sun/star/reflection/TypeDescriptionProvider.idl90
-rw-r--r--udkapi/com/sun/star/reflection/TypeDescriptionSearchDepth.idl59
-rw-r--r--udkapi/com/sun/star/reflection/XArrayTypeDescription.idl78
-rw-r--r--udkapi/com/sun/star/reflection/XCompoundTypeDescription.idl85
-rw-r--r--udkapi/com/sun/star/reflection/XConstantTypeDescription.idl80
-rw-r--r--udkapi/com/sun/star/reflection/XConstantsTypeDescription.idl65
-rw-r--r--udkapi/com/sun/star/reflection/XEnumTypeDescription.idl74
-rw-r--r--udkapi/com/sun/star/reflection/XIdlArray.idl134
-rw-r--r--udkapi/com/sun/star/reflection/XIdlClass.idl215
-rw-r--r--udkapi/com/sun/star/reflection/XIdlClassProvider.idl61
-rw-r--r--udkapi/com/sun/star/reflection/XIdlField.idl83
-rw-r--r--udkapi/com/sun/star/reflection/XIdlField2.idl133
-rw-r--r--udkapi/com/sun/star/reflection/XIdlMember.idl67
-rw-r--r--udkapi/com/sun/star/reflection/XIdlMethod.idl141
-rw-r--r--udkapi/com/sun/star/reflection/XIdlReflection.idl83
-rw-r--r--udkapi/com/sun/star/reflection/XIndirectTypeDescription.idl63
-rw-r--r--udkapi/com/sun/star/reflection/XInterfaceAttributeTypeDescription.idl77
-rw-r--r--udkapi/com/sun/star/reflection/XInterfaceAttributeTypeDescription2.idl79
-rw-r--r--udkapi/com/sun/star/reflection/XInterfaceMemberTypeDescription.idl71
-rw-r--r--udkapi/com/sun/star/reflection/XInterfaceMethodTypeDescription.idl90
-rw-r--r--udkapi/com/sun/star/reflection/XInterfaceTypeDescription.idl96
-rw-r--r--udkapi/com/sun/star/reflection/XInterfaceTypeDescription2.idl76
-rw-r--r--udkapi/com/sun/star/reflection/XMethodParameter.idl98
-rw-r--r--udkapi/com/sun/star/reflection/XModuleTypeDescription.idl61
-rw-r--r--udkapi/com/sun/star/reflection/XParameter.idl59
-rw-r--r--udkapi/com/sun/star/reflection/XPropertyTypeDescription.idl67
-rw-r--r--udkapi/com/sun/star/reflection/XProxyFactory.idl81
-rw-r--r--udkapi/com/sun/star/reflection/XPublished.idl113
-rw-r--r--udkapi/com/sun/star/reflection/XServiceConstructorDescription.idl83
-rw-r--r--udkapi/com/sun/star/reflection/XServiceTypeDescription.idl109
-rw-r--r--udkapi/com/sun/star/reflection/XServiceTypeDescription2.idl81
-rw-r--r--udkapi/com/sun/star/reflection/XSingletonTypeDescription.idl72
-rw-r--r--udkapi/com/sun/star/reflection/XSingletonTypeDescription2.idl70
-rw-r--r--udkapi/com/sun/star/reflection/XStructTypeDescription.idl93
-rw-r--r--udkapi/com/sun/star/reflection/XTypeDescription.idl85
-rw-r--r--udkapi/com/sun/star/reflection/XTypeDescriptionEnumeration.idl69
-rw-r--r--udkapi/com/sun/star/reflection/XTypeDescriptionEnumerationAccess.idl187
-rw-r--r--udkapi/com/sun/star/reflection/XUnionTypeDescription.idl100
-rw-r--r--udkapi/com/sun/star/reflection/makefile.mk93
-rw-r--r--udkapi/com/sun/star/registry/CannotRegisterImplementationException.idl64
-rw-r--r--udkapi/com/sun/star/registry/DefaultRegistry.idl163
-rw-r--r--udkapi/com/sun/star/registry/ImplementationRegistration.idl66
-rw-r--r--udkapi/com/sun/star/registry/InvalidRegistryException.idl56
-rw-r--r--udkapi/com/sun/star/registry/InvalidValueException.idl56
-rw-r--r--udkapi/com/sun/star/registry/MergeConflictException.idl56
-rw-r--r--udkapi/com/sun/star/registry/NestedRegistry.idl161
-rw-r--r--udkapi/com/sun/star/registry/RegistryKeyType.idl66
-rw-r--r--udkapi/com/sun/star/registry/RegistryValueType.idl119
-rw-r--r--udkapi/com/sun/star/registry/SimpleRegistry.idl64
-rw-r--r--udkapi/com/sun/star/registry/XImplementationRegistration.idl128
-rw-r--r--udkapi/com/sun/star/registry/XImplementationRegistration2.idl74
-rw-r--r--udkapi/com/sun/star/registry/XRegistryKey.idl466
-rw-r--r--udkapi/com/sun/star/registry/XSimpleRegistry.idl159
-rw-r--r--udkapi/com/sun/star/registry/makefile.mk59
-rw-r--r--udkapi/com/sun/star/script/AllEventObject.idl80
-rw-r--r--udkapi/com/sun/star/script/AllListenerAdapter.idl53
-rw-r--r--udkapi/com/sun/star/script/ArrayWrapper.idl68
-rw-r--r--udkapi/com/sun/star/script/BasicErrorException.idl69
-rw-r--r--udkapi/com/sun/star/script/CannotConvertException.idl72
-rw-r--r--udkapi/com/sun/star/script/CannotCreateAdapterException.idl55
-rw-r--r--udkapi/com/sun/star/script/ContextInformation.idl99
-rw-r--r--udkapi/com/sun/star/script/Converter.idl104
-rw-r--r--udkapi/com/sun/star/script/Engine.idl60
-rw-r--r--udkapi/com/sun/star/script/FailReason.idl91
-rw-r--r--udkapi/com/sun/star/script/FinishEngineEvent.idl76
-rw-r--r--udkapi/com/sun/star/script/FinishReason.idl62
-rw-r--r--udkapi/com/sun/star/script/InterruptEngineEvent.idl118
-rw-r--r--udkapi/com/sun/star/script/InterruptReason.idl88
-rw-r--r--udkapi/com/sun/star/script/Invocation.idl61
-rw-r--r--udkapi/com/sun/star/script/InvocationAdapterFactory.idl77
-rw-r--r--udkapi/com/sun/star/script/InvocationInfo.idl93
-rw-r--r--udkapi/com/sun/star/script/JavaScript.idl56
-rw-r--r--udkapi/com/sun/star/script/MemberType.idl51
-rw-r--r--udkapi/com/sun/star/script/ScriptEvent.idl65
-rw-r--r--udkapi/com/sun/star/script/ScriptEventDescriptor.idl76
-rw-r--r--udkapi/com/sun/star/script/XAllListener.idl75
-rw-r--r--udkapi/com/sun/star/script/XAllListenerAdapterService.idl72
-rw-r--r--udkapi/com/sun/star/script/XDebugging.idl153
-rw-r--r--udkapi/com/sun/star/script/XDefaultMethod.idl62
-rw-r--r--udkapi/com/sun/star/script/XDefaultProperty.idl66
-rw-r--r--udkapi/com/sun/star/script/XEngine.idl132
-rw-r--r--udkapi/com/sun/star/script/XEngineListener.idl83
-rw-r--r--udkapi/com/sun/star/script/XEventAttacher.idl123
-rw-r--r--udkapi/com/sun/star/script/XEventAttacherManager.idl232
-rw-r--r--udkapi/com/sun/star/script/XInvocation.idl157
-rw-r--r--udkapi/com/sun/star/script/XInvocation2.idl84
-rw-r--r--udkapi/com/sun/star/script/XInvocationAdapterFactory.idl72
-rw-r--r--udkapi/com/sun/star/script/XInvocationAdapterFactory2.idl68
-rw-r--r--udkapi/com/sun/star/script/XLibraryAccess.idl108
-rw-r--r--udkapi/com/sun/star/script/XScriptEventsAttacher.idl101
-rw-r--r--udkapi/com/sun/star/script/XScriptEventsSupplier.idl62
-rw-r--r--udkapi/com/sun/star/script/XScriptListener.idl71
-rw-r--r--udkapi/com/sun/star/script/XStarBasicAccess.idl98
-rw-r--r--udkapi/com/sun/star/script/XStarBasicDialogInfo.idl63
-rw-r--r--udkapi/com/sun/star/script/XStarBasicLibraryInfo.idl106
-rw-r--r--udkapi/com/sun/star/script/XStarBasicModuleInfo.idl70
-rw-r--r--udkapi/com/sun/star/script/XTypeConverter.idl109
-rw-r--r--udkapi/com/sun/star/script/makefile.mk88
-rw-r--r--udkapi/com/sun/star/security/AccessControlException.idl62
-rw-r--r--udkapi/com/sun/star/security/AccessController.idl62
-rw-r--r--udkapi/com/sun/star/security/AllPermission.idl56
-rw-r--r--udkapi/com/sun/star/security/Policy.idl48
-rw-r--r--udkapi/com/sun/star/security/RuntimePermission.idl52
-rw-r--r--udkapi/com/sun/star/security/XAccessControlContext.idl91
-rw-r--r--udkapi/com/sun/star/security/XAccessController.idl155
-rw-r--r--udkapi/com/sun/star/security/XAction.idl65
-rw-r--r--udkapi/com/sun/star/security/XPolicy.idl70
-rw-r--r--udkapi/com/sun/star/security/makefile.mk60
-rw-r--r--udkapi/com/sun/star/task/XInteractionAbort.idl56
-rw-r--r--udkapi/com/sun/star/task/XInteractionContinuation.idl66
-rw-r--r--udkapi/com/sun/star/task/XInteractionHandler.idl66
-rw-r--r--udkapi/com/sun/star/task/XInteractionHandler2.idl68
-rw-r--r--udkapi/com/sun/star/task/XInteractionRequest.idl77
-rw-r--r--udkapi/com/sun/star/task/XInteractionRetry.idl56
-rw-r--r--udkapi/com/sun/star/task/makefile.mk50
-rw-r--r--udkapi/com/sun/star/test/TestEvent.idl62
-rw-r--r--udkapi/com/sun/star/test/TestFactory.idl70
-rw-r--r--udkapi/com/sun/star/test/XSimpleTest.idl121
-rw-r--r--udkapi/com/sun/star/test/XTest.idl155
-rw-r--r--udkapi/com/sun/star/test/XTestListener.idl85
-rw-r--r--udkapi/com/sun/star/test/bridge/XBridgeTest.idl306
-rw-r--r--udkapi/com/sun/star/test/bridge/makefile.mk45
-rw-r--r--udkapi/com/sun/star/test/makefile.mk50
-rw-r--r--udkapi/com/sun/star/test/performance/XPerformanceTest.idl139
-rw-r--r--udkapi/com/sun/star/test/performance/makefile.mk45
-rw-r--r--udkapi/com/sun/star/udk-modules.idl82
-rw-r--r--udkapi/com/sun/star/uno/DeploymentException.idl53
-rw-r--r--udkapi/com/sun/star/uno/Exception.idl71
-rw-r--r--udkapi/com/sun/star/uno/NamingService.idl57
-rw-r--r--udkapi/com/sun/star/uno/RuntimeException.idl60
-rw-r--r--udkapi/com/sun/star/uno/SecurityException.idl51
-rw-r--r--udkapi/com/sun/star/uno/TypeClass.idl153
-rw-r--r--udkapi/com/sun/star/uno/Uik.idl70
-rw-r--r--udkapi/com/sun/star/uno/XAdapter.idl92
-rw-r--r--udkapi/com/sun/star/uno/XAggregation.idl124
-rw-r--r--udkapi/com/sun/star/uno/XComponentContext.idl69
-rw-r--r--udkapi/com/sun/star/uno/XCurrentContext.idl61
-rw-r--r--udkapi/com/sun/star/uno/XInterface.idl134
-rw-r--r--udkapi/com/sun/star/uno/XNamingService.idl82
-rw-r--r--udkapi/com/sun/star/uno/XReference.idl71
-rw-r--r--udkapi/com/sun/star/uno/XUnloadingPreference.idl71
-rw-r--r--udkapi/com/sun/star/uno/XWeak.idl123
-rw-r--r--udkapi/com/sun/star/uno/makefile.mk61
-rw-r--r--udkapi/com/sun/star/uri/ExternalUriReferenceTranslator.idl45
-rw-r--r--udkapi/com/sun/star/uri/RelativeUriExcessParentSegments.idl62
-rw-r--r--udkapi/com/sun/star/uri/UriReferenceFactory.idl77
-rw-r--r--udkapi/com/sun/star/uri/UriSchemeParser_vndDOTsunDOTstarDOTexpand.idl58
-rw-r--r--udkapi/com/sun/star/uri/UriSchemeParser_vndDOTsunDOTstarDOTscript.idl58
-rw-r--r--udkapi/com/sun/star/uri/VndSunStarPkgUrlReferenceFactory.idl45
-rw-r--r--udkapi/com/sun/star/uri/XExternalUriReferenceTranslator.idl91
-rw-r--r--udkapi/com/sun/star/uri/XUriReference.idl231
-rw-r--r--udkapi/com/sun/star/uri/XUriReferenceFactory.idl163
-rw-r--r--udkapi/com/sun/star/uri/XUriSchemeParser.idl75
-rw-r--r--udkapi/com/sun/star/uri/XVndSunStarExpandUrl.idl77
-rw-r--r--udkapi/com/sun/star/uri/XVndSunStarExpandUrlReference.idl59
-rw-r--r--udkapi/com/sun/star/uri/XVndSunStarPkgUrlReferenceFactory.idl61
-rw-r--r--udkapi/com/sun/star/uri/XVndSunStarScriptUrl.idl137
-rw-r--r--udkapi/com/sun/star/uri/XVndSunStarScriptUrlReference.idl57
-rw-r--r--udkapi/com/sun/star/uri/makefile.mk54
-rw-r--r--udkapi/com/sun/star/util/BootstrapMacroExpander.idl66
-rw-r--r--udkapi/com/sun/star/util/MacroExpander.idl63
-rw-r--r--udkapi/com/sun/star/util/XMacroExpander.idl68
-rw-r--r--udkapi/com/sun/star/util/XVeto.idl64
-rw-r--r--udkapi/com/sun/star/util/logging/LogLevel.idl59
-rw-r--r--udkapi/com/sun/star/util/logging/Logger.idl64
-rw-r--r--udkapi/com/sun/star/util/logging/LoggerRemote.idl64
-rw-r--r--udkapi/com/sun/star/util/logging/XLogger.idl71
-rw-r--r--udkapi/com/sun/star/util/logging/XLoggerRemote.idl77
-rw-r--r--udkapi/com/sun/star/util/logging/makefile.mk50
-rw-r--r--udkapi/com/sun/star/util/makefile.mk50
-rw-r--r--udkapi/com/sun/star/util/theMacroExpander.idl53
-rw-r--r--udkapi/prj/build.lst30
-rw-r--r--udkapi/prj/d.lst55
-rw-r--r--udkapi/prj/makefile.mk61
-rw-r--r--udkapi/util/makefile.mk75
-rw-r--r--udkapi/util/makefile.pmk35
-rw-r--r--udkapi/util/target.pmk34
-rw-r--r--udm/inc/udm/html/htmlitem.hxx408
-rw-r--r--udm/inc/udm/xml/xmlitem.hxx387
-rw-r--r--udm/prj/build.lst12
-rw-r--r--udm/prj/d.lst9
-rw-r--r--udm/source/html/htmlitem.cxx243
-rw-r--r--udm/source/html/makefile.mk56
-rw-r--r--udm/source/inc/precomp.h66
-rw-r--r--udm/source/mkinc/fullcpp.mk60
-rw-r--r--udm/source/unittest/makefile.mk77
-rw-r--r--udm/source/unittest/test.cxx112
-rw-r--r--udm/source/xml/makefile.mk56
-rw-r--r--udm/source/xml/xmlitem.cxx614
-rw-r--r--udm/util/makefile.mk54
-rw-r--r--unixODBC/inc/sql.h824
-rw-r--r--unixODBC/inc/sqlext.h2122
-rw-r--r--unixODBC/inc/sqltypes.h478
-rw-r--r--unixODBC/inc/sqlucode.h789
-rw-r--r--unixODBC/prj/build.lst3
-rw-r--r--unixODBC/prj/d.lst3
-rw-r--r--unodevtools/inc/unodevtools/options.hxx50
-rw-r--r--unodevtools/inc/unodevtools/typemanager.hxx100
-rw-r--r--unodevtools/prj/build.lst8
-rw-r--r--unodevtools/prj/d.lst5
-rw-r--r--unodevtools/source/skeletonmaker/cppcompskeleton.cxx1277
-rw-r--r--unodevtools/source/skeletonmaker/cpptypemaker.cxx971
-rw-r--r--unodevtools/source/skeletonmaker/javacompskeleton.cxx997
-rw-r--r--unodevtools/source/skeletonmaker/javatypemaker.cxx876
-rw-r--r--unodevtools/source/skeletonmaker/makefile.mk57
-rw-r--r--unodevtools/source/skeletonmaker/skeletoncommon.cxx722
-rw-r--r--unodevtools/source/skeletonmaker/skeletoncommon.hxx168
-rw-r--r--unodevtools/source/skeletonmaker/skeletoncpp.hxx142
-rw-r--r--unodevtools/source/skeletonmaker/skeletonjava.hxx116
-rw-r--r--unodevtools/source/skeletonmaker/skeletonmaker.cxx352
-rw-r--r--unodevtools/source/unodevtools/makefile.mk52
-rw-r--r--unodevtools/source/unodevtools/options.cxx125
-rw-r--r--unodevtools/source/unodevtools/typeblob.cxx803
-rw-r--r--unodevtools/source/unodevtools/typemanager.cxx281
-rwxr-xr-xunodevtools/unodevtools.pmk65
-rw-r--r--unoil/climaker/cli_oootypes_config11
-rw-r--r--unoil/climaker/makefile.mk94
-rw-r--r--unoil/climaker/version.txt32
-rw-r--r--unoil/com/sun/star/deployment/ui/makefile.mk33
-rw-r--r--unoil/com/sun/star/frame/status/makefile.mk35
-rwxr-xr-xunoil/com/sun/star/graphic/makefile.mk35
-rw-r--r--unoil/com/sun/star/mail/makefile.mk35
-rw-r--r--unoil/com/sun/star/media/makefile.mk35
-rw-r--r--unoil/drafts/com/sun/star/frame/status/makefile.mk35
-rw-r--r--unoil/javamaker/makefile.mk47
-rw-r--r--unoil/prj/build.lst4
-rw-r--r--unoil/prj/d.lst5
-rw-r--r--unoil/util/makefile.mk44
-rw-r--r--unoil/util/makefile.pmk35
-rw-r--r--unotools/inc/makefile.mk48
-rw-r--r--unotools/inc/pch/precompiled_unotools.cxx29
-rw-r--r--unotools/inc/pch/precompiled_unotools.hxx32
-rw-r--r--unotools/inc/unotools/accelcfg.hxx85
-rw-r--r--unotools/inc/unotools/accessiblerelationsethelper.hxx161
-rw-r--r--unotools/inc/unotools/accessiblestatesethelper.hxx183
-rw-r--r--unotools/inc/unotools/atom.hxx132
-rw-r--r--unotools/inc/unotools/bootstrap.hxx138
-rw-r--r--unotools/inc/unotools/cacheoptions.hxx173
-rw-r--r--unotools/inc/unotools/calendarwrapper.hxx133
-rw-r--r--unotools/inc/unotools/charclass.hxx236
-rw-r--r--unotools/inc/unotools/cmdoptions.hxx255
-rw-r--r--unotools/inc/unotools/collatorwrapper.hxx97
-rw-r--r--unotools/inc/unotools/compatibility.hxx253
-rw-r--r--unotools/inc/unotools/componentresmodule.hxx203
-rw-r--r--unotools/inc/unotools/configitem.hxx212
-rw-r--r--unotools/inc/unotools/configmgr.hxx116
-rw-r--r--unotools/inc/unotools/confignode.hxx361
-rw-r--r--unotools/inc/unotools/configpathes.hxx181
-rw-r--r--unotools/inc/unotools/configvaluecontainer.hxx236
-rw-r--r--unotools/inc/unotools/datetime.hxx63
-rw-r--r--unotools/inc/unotools/defaultoptions.hxx54
-rw-r--r--unotools/inc/unotools/desktopterminationobserver.hxx79
-rw-r--r--unotools/inc/unotools/digitgroupingiterator.hxx204
-rw-r--r--unotools/inc/unotools/docinfohelper.hxx47
-rw-r--r--unotools/inc/unotools/dynamicmenuoptions.hxx219
-rw-r--r--unotools/inc/unotools/eventcfg.hxx122
-rw-r--r--unotools/inc/unotools/eventlisteneradapter.hxx71
-rw-r--r--unotools/inc/unotools/extendedsecurityoptions.hxx160
-rw-r--r--unotools/inc/unotools/fltrcfg.hxx100
-rw-r--r--unotools/inc/unotools/fontcfg.hxx227
-rw-r--r--unotools/inc/unotools/fontcvt.hxx79
-rw-r--r--unotools/inc/unotools/fontdefs.hxx110
-rw-r--r--unotools/inc/unotools/fontoptions.hxx173
-rw-r--r--unotools/inc/unotools/historyoptions.hxx248
-rw-r--r--unotools/inc/unotools/historyoptions_const.hxx55
-rw-r--r--unotools/inc/unotools/idhelper.hxx210
-rw-r--r--unotools/inc/unotools/inetoptions.hxx143
-rw-r--r--unotools/inc/unotools/internaloptions.hxx180
-rw-r--r--unotools/inc/unotools/intlwrapper.hxx123
-rw-r--r--unotools/inc/unotools/itemholderbase.hxx128
-rw-r--r--unotools/inc/unotools/javaoptions.hxx73
-rwxr-xr-xunotools/inc/unotools/lingucfg.hxx243
-rw-r--r--unotools/inc/unotools/linguprops.hxx121
-rw-r--r--unotools/inc/unotools/localedatawrapper.hxx363
-rw-r--r--unotools/inc/unotools/localfilehelper.hxx68
-rw-r--r--unotools/inc/unotools/localisationoptions.hxx178
-rw-r--r--unotools/inc/unotools/loghelper.hxx51
-rw-r--r--unotools/inc/unotools/misccfg.hxx67
-rw-r--r--unotools/inc/unotools/moduleoptions.hxx257
-rw-r--r--unotools/inc/unotools/nativenumberwrapper.hxx75
-rw-r--r--unotools/inc/unotools/numberformatcodewrapper.hxx76
-rw-r--r--unotools/inc/unotools/options.hxx97
-rw-r--r--unotools/inc/unotools/optionsdlg.hxx56
-rw-r--r--unotools/inc/unotools/pathoptions.hxx140
-rw-r--r--unotools/inc/unotools/printwarningoptions.hxx161
-rw-r--r--unotools/inc/unotools/processfactory.hxx59
-rw-r--r--unotools/inc/unotools/progresshandlerwrap.hxx57
-rw-r--r--unotools/inc/unotools/propertysethelper.hxx96
-rw-r--r--unotools/inc/unotools/propertysetinfo.hxx93
-rw-r--r--unotools/inc/unotools/querydeep.hxx486
-rw-r--r--unotools/inc/unotools/readwritemutexguard.hxx113
-rw-r--r--unotools/inc/unotools/regoptions.hxx126
-rw-r--r--unotools/inc/unotools/regpathhelper.hxx71
-rw-r--r--unotools/inc/unotools/saveopt.hxx126
-rw-r--r--unotools/inc/unotools/searchopt.hxx119
-rw-r--r--unotools/inc/unotools/securityoptions.hxx296
-rw-r--r--unotools/inc/unotools/sharedunocomponent.hxx370
-rw-r--r--unotools/inc/unotools/sourceviewconfig.hxx63
-rw-r--r--unotools/inc/unotools/startoptions.hxx170
-rw-r--r--unotools/inc/unotools/streamhelper.hxx116
-rw-r--r--unotools/inc/unotools/streamsection.hxx85
-rw-r--r--unotools/inc/unotools/streamwrap.hxx183
-rw-r--r--unotools/inc/unotools/syslocale.hxx88
-rw-r--r--unotools/inc/unotools/syslocaleoptions.hxx168
-rw-r--r--unotools/inc/unotools/tempfile.hxx161
-rw-r--r--unotools/inc/unotools/textsearch.hxx196
-rw-r--r--unotools/inc/unotools/transliterationwrapper.hxx145
-rw-r--r--unotools/inc/unotools/ucbhelper.hxx89
-rw-r--r--unotools/inc/unotools/ucblockbytes.hxx222
-rw-r--r--unotools/inc/unotools/ucbstreamhelper.hxx83
-rw-r--r--unotools/inc/unotools/undoopt.hxx49
-rw-r--r--unotools/inc/unotools/unotoolsdllapi.h41
-rw-r--r--unotools/inc/unotools/unotunnelhelper.hxx196
-rw-r--r--unotools/inc/unotools/useroptions.hxx118
-rw-r--r--unotools/inc/unotools/useroptions_const.hxx56
-rw-r--r--unotools/inc/unotools/viewoptions.hxx353
-rw-r--r--unotools/inc/unotools/workingsetoptions.hxx156
-rw-r--r--unotools/inc/unotools/xmlaccelcfg.hxx109
-rw-r--r--unotools/prj/build.lst12
-rw-r--r--unotools/prj/d.lst11
-rw-r--r--unotools/qa/complex/tempfile/TempFileTest.java31
-rw-r--r--unotools/qa/complex/tempfile/TempFileUnitTest.java85
-rw-r--r--unotools/qa/complex/tempfile/Test01.java120
-rw-r--r--unotools/qa/complex/tempfile/Test02.java100
-rw-r--r--unotools/qa/complex/tempfile/TestHelper.java225
-rw-r--r--unotools/qa/complex/tempfile/makefile.mk85
-rw-r--r--unotools/source/accessibility/accessiblerelationsethelper.cxx272
-rw-r--r--unotools/source/accessibility/accessiblestatesethelper.cxx346
-rw-r--r--unotools/source/accessibility/makefile.mk48
-rw-r--r--unotools/source/config/accelcfg.cxx289
-rw-r--r--unotools/source/config/bootstrap.cxx912
-rw-r--r--unotools/source/config/cacheoptions.cxx512
-rw-r--r--unotools/source/config/cmdoptions.cxx628
-rw-r--r--unotools/source/config/compatibility.cxx804
-rw-r--r--unotools/source/config/configitem.cxx1422
-rw-r--r--unotools/source/config/configmgr.cxx747
-rw-r--r--unotools/source/config/confignode.cxx665
-rw-r--r--unotools/source/config/configpathes.cxx308
-rw-r--r--unotools/source/config/configvaluecontainer.cxx456
-rw-r--r--unotools/source/config/defaultoptions.cxx363
-rw-r--r--unotools/source/config/docinfohelper.cxx116
-rw-r--r--unotools/source/config/dynamicmenuoptions.cxx920
-rw-r--r--unotools/source/config/eventcfg.cxx455
-rw-r--r--unotools/source/config/extendedsecurityoptions.cxx538
-rw-r--r--unotools/source/config/fltrcfg.cxx616
-rw-r--r--unotools/source/config/fontcfg.cxx1224
-rw-r--r--unotools/source/config/fontoptions.cxx511
-rw-r--r--unotools/source/config/historyoptions.cxx745
-rw-r--r--unotools/source/config/inetoptions.cxx554
-rw-r--r--unotools/source/config/internaloptions.cxx628
-rw-r--r--unotools/source/config/itemholder1.cxx329
-rw-r--r--unotools/source/config/itemholder1.hxx89
-rw-r--r--unotools/source/config/javaoptions.cxx369
-rwxr-xr-xunotools/source/config/lingucfg.cxx1501
-rw-r--r--unotools/source/config/localisationoptions.cxx458
-rw-r--r--unotools/source/config/makefile.mk91
-rw-r--r--unotools/source/config/menuoptions.cxx561
-rw-r--r--unotools/source/config/misccfg.cxx310
-rw-r--r--unotools/source/config/moduleoptions.cxx1597
-rw-r--r--unotools/source/config/options.cxx106
-rw-r--r--unotools/source/config/optionsdlg.cxx290
-rw-r--r--unotools/source/config/optionsdrawinglayer.cxx1705
-rw-r--r--unotools/source/config/pathoptions.cxx1091
-rw-r--r--unotools/source/config/printwarningoptions.cxx421
-rw-r--r--unotools/source/config/regoptions.cxx550
-rw-r--r--unotools/source/config/saveopt.cxx1002
-rw-r--r--unotools/source/config/searchopt.cxx636
-rw-r--r--unotools/source/config/securityoptions.cxx1309
-rw-r--r--unotools/source/config/sourceviewconfig.cxx268
-rw-r--r--unotools/source/config/startoptions.cxx458
-rw-r--r--unotools/source/config/syslocaleoptions.cxx702
-rw-r--r--unotools/source/config/undoopt.cxx201
-rw-r--r--unotools/source/config/useroptions.cxx1297
-rw-r--r--unotools/source/config/viewoptions.cxx1301
-rw-r--r--unotools/source/config/workingsetoptions.cxx393
-rw-r--r--unotools/source/config/xmlaccelcfg.cxx415
-rw-r--r--unotools/source/i18n/calendarwrapper.cxx680
-rw-r--r--unotools/source/i18n/charclass.cxx582
-rw-r--r--unotools/source/i18n/collatorwrapper.cxx214
-rw-r--r--unotools/source/i18n/intlwrapper.cxx110
-rw-r--r--unotools/source/i18n/localedatawrapper.cxx2007
-rw-r--r--unotools/source/i18n/makefile.mk57
-rw-r--r--unotools/source/i18n/nativenumberwrapper.cxx170
-rw-r--r--unotools/source/i18n/numberformatcodewrapper.cxx170
-rw-r--r--unotools/source/i18n/readwritemutexguard.cxx120
-rw-r--r--unotools/source/i18n/textsearch.cxx398
-rw-r--r--unotools/source/i18n/transliterationwrapper.cxx345
-rw-r--r--unotools/source/misc/atom.cxx383
-rw-r--r--unotools/source/misc/componentresmodule.cxx146
-rw-r--r--unotools/source/misc/datetime.cxx121
-rw-r--r--unotools/source/misc/desktopterminationobserver.cxx231
-rw-r--r--unotools/source/misc/eventlisteneradapter.cxx182
-rw-r--r--unotools/source/misc/fontcvt.cxx1520
-rw-r--r--unotools/source/misc/fontdefs.cxx598
-rw-r--r--unotools/source/misc/makefile.mk55
-rw-r--r--unotools/source/misc/sharedunocomponent.cxx246
-rw-r--r--unotools/source/misc/syslocale.cxx214
-rw-r--r--unotools/source/processfactory/componentfactory.cxx186
-rw-r--r--unotools/source/processfactory/makefile.mk50
-rw-r--r--unotools/source/processfactory/processfactory.cxx54
-rw-r--r--unotools/source/property/makefile.mk48
-rw-r--r--unotools/source/property/propertysethelper.cxx301
-rw-r--r--unotools/source/property/propertysetinfo.cxx199
-rw-r--r--unotools/source/streaming/makefile.mk48
-rw-r--r--unotools/source/streaming/streamhelper.cxx204
-rw-r--r--unotools/source/streaming/streamwrap.cxx379
-rw-r--r--unotools/source/ucbhelper/XTempFile.hxx153
-rw-r--r--unotools/source/ucbhelper/localfilehelper.cxx242
-rw-r--r--unotools/source/ucbhelper/makefile.mk54
-rw-r--r--unotools/source/ucbhelper/progresshandlerwrap.cxx98
-rw-r--r--unotools/source/ucbhelper/tempfile.cxx493
-rw-r--r--unotools/source/ucbhelper/ucbhelper.cxx925
-rw-r--r--unotools/source/ucbhelper/ucblockbytes.cxx1746
-rw-r--r--unotools/source/ucbhelper/ucbstreamhelper.cxx248
-rw-r--r--unotools/source/ucbhelper/xtempfile.cxx576
-rw-r--r--unotools/util/makefile.mk96
-rw-r--r--unotools/util/makefile.pmk31
-rw-r--r--unoxml/prj/build.lst6
-rw-r--r--unoxml/prj/d.lst3
-rw-r--r--unoxml/qa/complex/RDFRepositoryTest.java847
-rw-r--r--unoxml/qa/complex/makefile.mk59
-rw-r--r--unoxml/qa/complex/testdocuments/example.rdf27
-rw-r--r--unoxml/qa/complex/tests.sce1
-rw-r--r--unoxml/source/dom/attr.cxx153
-rw-r--r--unoxml/source/dom/attr.hxx210
-rw-r--r--unoxml/source/dom/attributesmap.cxx211
-rw-r--r--unoxml/source/dom/attributesmap.hxx97
-rw-r--r--unoxml/source/dom/cdatasection.cxx60
-rw-r--r--unoxml/source/dom/cdatasection.hxx230
-rw-r--r--unoxml/source/dom/characterdata.cxx233
-rw-r--r--unoxml/source/dom/characterdata.hxx239
-rw-r--r--unoxml/source/dom/childlist.cxx72
-rw-r--r--unoxml/source/dom/childlist.hxx64
-rw-r--r--unoxml/source/dom/comment.cxx58
-rw-r--r--unoxml/source/dom/comment.hxx222
-rw-r--r--unoxml/source/dom/document.cxx751
-rw-r--r--unoxml/source/dom/document.hxx366
-rw-r--r--unoxml/source/dom/documentbuilder.cxx429
-rw-r--r--unoxml/source/dom/documentbuilder.hxx157
-rw-r--r--unoxml/source/dom/documentfragment.cxx45
-rw-r--r--unoxml/source/dom/documentfragment.hxx179
-rw-r--r--unoxml/source/dom/documenttype.cxx127
-rw-r--r--unoxml/source/dom/documenttype.hxx217
-rw-r--r--unoxml/source/dom/domimplementation.cxx75
-rw-r--r--unoxml/source/dom/domimplementation.hxx73
-rw-r--r--unoxml/source/dom/element.cxx649
-rw-r--r--unoxml/source/dom/element.hxx296
-rw-r--r--unoxml/source/dom/elementlist.cxx133
-rw-r--r--unoxml/source/dom/elementlist.hxx86
-rw-r--r--unoxml/source/dom/entitiesmap.cxx100
-rw-r--r--unoxml/source/dom/entitiesmap.hxx97
-rw-r--r--unoxml/source/dom/entity.cxx90
-rw-r--r--unoxml/source/dom/entity.hxx200
-rw-r--r--unoxml/source/dom/entityreference.cxx52
-rw-r--r--unoxml/source/dom/entityreference.hxx176
-rw-r--r--unoxml/source/dom/makefile.mk74
-rw-r--r--unoxml/source/dom/node.cxx1027
-rw-r--r--unoxml/source/dom/node.hxx354
-rw-r--r--unoxml/source/dom/notation.cxx70
-rw-r--r--unoxml/source/dom/notation.hxx191
-rw-r--r--unoxml/source/dom/notationsmap.cxx101
-rw-r--r--unoxml/source/dom/notationsmap.hxx97
-rw-r--r--unoxml/source/dom/processinginstruction.cxx92
-rw-r--r--unoxml/source/dom/processinginstruction.hxx198
-rw-r--r--unoxml/source/dom/saxbuilder.cxx353
-rw-r--r--unoxml/source/dom/saxbuilder.hxx150
-rw-r--r--unoxml/source/dom/text.cxx72
-rw-r--r--unoxml/source/dom/text.hxx241
-rw-r--r--unoxml/source/events/event.cxx62
-rw-r--r--unoxml/source/events/event.hxx70
-rw-r--r--unoxml/source/events/eventdispatcher.cxx198
-rw-r--r--unoxml/source/events/eventdispatcher.hxx51
-rw-r--r--unoxml/source/events/makefile.mk56
-rw-r--r--unoxml/source/events/mouseevent.cxx149
-rw-r--r--unoxml/source/events/mouseevent.hxx92
-rw-r--r--unoxml/source/events/mutationevent.cxx100
-rw-r--r--unoxml/source/events/mutationevent.hxx66
-rw-r--r--unoxml/source/events/testlistener.cxx137
-rw-r--r--unoxml/source/events/testlistener.hxx106
-rw-r--r--unoxml/source/events/uievent.cxx81
-rw-r--r--unoxml/source/events/uievent.hxx55
-rw-r--r--unoxml/source/rdf/CBlankNode.cxx158
-rw-r--r--unoxml/source/rdf/CLiteral.cxx221
-rw-r--r--unoxml/source/rdf/CNodes.hxx74
-rw-r--r--unoxml/source/rdf/CURI.cxx867
-rw-r--r--unoxml/source/rdf/librdf_repository.cxx2248
-rw-r--r--unoxml/source/rdf/librdf_repository.hxx48
-rw-r--r--unoxml/source/rdf/librdf_services.cxx83
-rw-r--r--unoxml/source/rdf/makefile.mk84
-rw-r--r--unoxml/source/service/makefile.mk78
-rw-r--r--unoxml/source/service/services.cxx153
-rw-r--r--unoxml/source/xpath/makefile.mk52
-rw-r--r--unoxml/source/xpath/nodelist.cxx65
-rw-r--r--unoxml/source/xpath/nodelist.hxx71
-rw-r--r--unoxml/source/xpath/xpathapi.cxx400
-rw-r--r--unoxml/source/xpath/xpathapi.hxx142
-rw-r--r--unoxml/source/xpath/xpathobject.cxx157
-rw-r--r--unoxml/source/xpath/xpathobject.hxx113
-rw-r--r--unoxml/test/domtest.cxx399
-rw-r--r--unoxml/test/export.map34
-rw-r--r--unoxml/test/makefile.mk105
-rw-r--r--ure/prj/build.lst2
-rw-r--r--ure/prj/d.lst9
-rw-r--r--ure/source/README410
-rw-r--r--ure/source/THIRDPARTYLICENSEREADME.html556
-rw-r--r--ure/source/delzip0
-rw-r--r--ure/source/jvmfwk3.ini5
-rw-r--r--ure/source/jvmfwk3rc5
-rw-r--r--ure/source/makefile.mk76
-rw-r--r--ure/source/startup.sh47
-rw-r--r--ure/source/uno.ini6
-rw-r--r--ure/source/unorc6
-rw-r--r--ure/source/uretest/JavaClient.java72
-rw-r--r--ure/source/uretest/JavaMain.java70
-rw-r--r--ure/source/uretest/JavaNative.java41
-rw-r--r--ure/source/uretest/JavaTest.java64
-rw-r--r--ure/source/uretest/Makefile310
-rw-r--r--ure/source/uretest/Makefile.pln315
-rw-r--r--ure/source/uretest/README115
-rw-r--r--ure/source/uretest/Runner.java41
-rw-r--r--ure/source/uretest/Tester.java55
-rw-r--r--ure/source/uretest/cppmain.cc292
-rw-r--r--ure/source/uretest/cppserver.cc125
-rw-r--r--ure/source/uretest/cpptest.cc125
-rw-r--r--ure/source/uretest/javaclient.mf.template5
-rw-r--r--ure/source/uretest/javamain.mf.template5
-rw-r--r--ure/source/uretest/javanative.mf.template5
-rw-r--r--ure/source/uretest/javatest.mf.template5
-rw-r--r--ure/source/uretest/runner.mf.template5
-rw-r--r--ure/source/uretest/tester.mf.template5
-rw-r--r--ure/source/uretest/types.idl52
-rw-r--r--ure/source/uretest/types.mf.template4
-rw-r--r--ure/source/uretest/version.map41
-rw-r--r--uui/prj/build.lst4
-rw-r--r--uui/prj/d.lst9
-rw-r--r--uui/source/alreadyopen.cxx60
-rw-r--r--uui/source/alreadyopen.hxx40
-rw-r--r--uui/source/alreadyopen.src62
-rw-r--r--uui/source/cookiedg.cxx144
-rw-r--r--uui/source/cookiedg.hrc45
-rw-r--r--uui/source/cookiedg.hxx65
-rw-r--r--uui/source/cookiedg.src166
-rw-r--r--uui/source/filechanged.cxx49
-rw-r--r--uui/source/filechanged.hxx40
-rw-r--r--uui/source/filechanged.src46
-rw-r--r--uui/source/fltdlg.cxx251
-rw-r--r--uui/source/fltdlg.hrc38
-rw-r--r--uui/source/fltdlg.hxx98
-rw-r--r--uui/source/fltdlg.src119
-rw-r--r--uui/source/getcontinuations.hxx118
-rw-r--r--uui/source/iahndl-authentication.cxx752
-rw-r--r--uui/source/iahndl-cookies.cxx209
-rw-r--r--uui/source/iahndl-errorhandler.cxx318
-rw-r--r--uui/source/iahndl-filter.cxx471
-rw-r--r--uui/source/iahndl-ioexceptions.cxx343
-rw-r--r--uui/source/iahndl-locking.cxx316
-rw-r--r--uui/source/iahndl-ssl.cxx357
-rwxr-xr-xuui/source/iahndl.cxx1615
-rwxr-xr-xuui/source/iahndl.hxx379
-rwxr-xr-xuui/source/ids.hrc197
-rw-r--r--uui/source/ids.src434
-rw-r--r--uui/source/interactionhandler.cxx144
-rw-r--r--uui/source/interactionhandler.hxx101
-rw-r--r--uui/source/lockfailed.cxx50
-rw-r--r--uui/source/lockfailed.hxx42
-rw-r--r--uui/source/lockfailed.src46
-rwxr-xr-xuui/source/logindlg.cxx350
-rwxr-xr-xuui/source/logindlg.hrc59
-rwxr-xr-xuui/source/logindlg.hxx116
-rwxr-xr-xuui/source/logindlg.src197
-rwxr-xr-xuui/source/loginerr.hxx178
-rw-r--r--uui/source/makefile.mk87
-rw-r--r--uui/source/masterpasscrtdlg.cxx190
-rw-r--r--uui/source/masterpasscrtdlg.hrc72
-rw-r--r--uui/source/masterpasscrtdlg.hxx80
-rw-r--r--uui/source/masterpasscrtdlg.src133
-rw-r--r--uui/source/masterpassworddlg.cxx80
-rw-r--r--uui/source/masterpassworddlg.hrc42
-rw-r--r--uui/source/masterpassworddlg.hxx66
-rw-r--r--uui/source/masterpassworddlg.src102
-rw-r--r--uui/source/mphndl.hxx96
-rw-r--r--uui/source/newerverwarn.cxx201
-rw-r--r--uui/source/newerverwarn.hrc57
-rw-r--r--uui/source/newerverwarn.hxx61
-rw-r--r--uui/source/newerverwarn.src81
-rw-r--r--uui/source/openlocked.cxx52
-rw-r--r--uui/source/openlocked.hxx40
-rw-r--r--uui/source/openlocked.src54
-rw-r--r--uui/source/passcrtdlg.cxx128
-rw-r--r--uui/source/passcrtdlg.hrc43
-rw-r--r--uui/source/passcrtdlg.hxx63
-rw-r--r--uui/source/passcrtdlg.src108
-rw-r--r--uui/source/passwordcontainer.cxx481
-rw-r--r--uui/source/passwordcontainer.hxx197
-rwxr-xr-xuui/source/passworddlg.cxx117
-rw-r--r--uui/source/passworddlg.hrc40
-rwxr-xr-xuui/source/passworddlg.hxx62
-rwxr-xr-xuui/source/passworddlg.src98
-rwxr-xr-xuui/source/passworderrs.src74
-rw-r--r--uui/source/requeststringresolver.cxx118
-rw-r--r--uui/source/requeststringresolver.hxx90
-rw-r--r--uui/source/secmacrowarnings.cxx378
-rw-r--r--uui/source/secmacrowarnings.hrc88
-rw-r--r--uui/source/secmacrowarnings.hxx103
-rw-r--r--uui/source/secmacrowarnings.src118
-rw-r--r--uui/source/services.cxx210
-rw-r--r--uui/source/sslwarndlg.cxx93
-rw-r--r--uui/source/sslwarndlg.hrc60
-rw-r--r--uui/source/sslwarndlg.hxx85
-rw-r--r--uui/source/sslwarndlg.src106
-rw-r--r--uui/source/trylater.cxx51
-rw-r--r--uui/source/trylater.hxx40
-rw-r--r--uui/source/trylater.src50
-rw-r--r--uui/source/unknownauthdlg.cxx103
-rw-r--r--uui/source/unknownauthdlg.hrc64
-rw-r--r--uui/source/unknownauthdlg.hxx87
-rw-r--r--uui/source/unknownauthdlg.src135
-rw-r--r--uui/util/makefile.mk64
-rw-r--r--uui/util/uui.xml77
-rw-r--r--vbahelper/inc/vbahelper/helperdecl.hxx55
-rw-r--r--vbahelper/inc/vbahelper/vbaaccesshelper.hxx79
-rw-r--r--vbahelper/inc/vbahelper/vbaapplicationbase.hxx75
-rw-r--r--vbahelper/inc/vbahelper/vbacollectionimpl.hxx347
-rw-r--r--vbahelper/inc/vbahelper/vbadialogbase.hxx51
-rw-r--r--vbahelper/inc/vbahelper/vbadialogsbase.hxx51
-rw-r--r--vbahelper/inc/vbahelper/vbadllapi.h41
-rw-r--r--vbahelper/inc/vbahelper/vbadocumentbase.hxx71
-rw-r--r--vbahelper/inc/vbahelper/vbadocumentsbase.hxx66
-rwxr-xr-xvbahelper/inc/vbahelper/vbaeventshelperbase.hxx162
-rw-r--r--vbahelper/inc/vbahelper/vbafontbase.hxx103
-rw-r--r--vbahelper/inc/vbahelper/vbaglobalbase.hxx50
-rw-r--r--vbahelper/inc/vbahelper/vbahelper.hxx248
-rw-r--r--vbahelper/inc/vbahelper/vbahelperinterface.hxx193
-rw-r--r--vbahelper/inc/vbahelper/vbapagesetupbase.hxx67
-rw-r--r--vbahelper/inc/vbahelper/vbapropvalue.hxx57
-rw-r--r--vbahelper/inc/vbahelper/vbashape.hxx115
-rw-r--r--vbahelper/inc/vbahelper/vbashaperange.hxx86
-rw-r--r--vbahelper/inc/vbahelper/vbashapes.hxx81
-rw-r--r--vbahelper/inc/vbahelper/vbatextframe.hxx67
-rw-r--r--vbahelper/inc/vbahelper/vbawindowbase.hxx63
-rw-r--r--vbahelper/prj/build.lst6
-rw-r--r--vbahelper/prj/d.lst29
-rw-r--r--vbahelper/source/msforms/makefile.mk81
-rw-r--r--vbahelper/source/msforms/service.cxx80
-rw-r--r--vbahelper/source/msforms/vbabutton.cxx71
-rw-r--r--vbahelper/source/msforms/vbabutton.hxx48
-rw-r--r--vbahelper/source/msforms/vbacheckbox.cxx104
-rw-r--r--vbahelper/source/msforms/vbacheckbox.hxx53
-rw-r--r--vbahelper/source/msforms/vbacombobox.cxx180
-rw-r--r--vbahelper/source/msforms/vbacombobox.hxx77
-rw-r--r--vbahelper/source/msforms/vbacontrol.cxx564
-rw-r--r--vbahelper/source/msforms/vbacontrol.hxx117
-rw-r--r--vbahelper/source/msforms/vbacontrols.cxx396
-rw-r--r--vbahelper/source/msforms/vbacontrols.hxx64
-rw-r--r--vbahelper/source/msforms/vbaframe.cxx85
-rw-r--r--vbahelper/source/msforms/vbaframe.hxx50
-rw-r--r--vbahelper/source/msforms/vbaimage.cxx56
-rw-r--r--vbahelper/source/msforms/vbaimage.hxx45
-rw-r--r--vbahelper/source/msforms/vbalabel.cxx85
-rw-r--r--vbahelper/source/msforms/vbalabel.hxx53
-rw-r--r--vbahelper/source/msforms/vbalistbox.cxx287
-rw-r--r--vbahelper/source/msforms/vbalistbox.hxx87
-rw-r--r--vbahelper/source/msforms/vbalistcontrolhelper.cxx146
-rw-r--r--vbahelper/source/msforms/vbalistcontrolhelper.hxx20
-rw-r--r--vbahelper/source/msforms/vbamultipage.cxx124
-rw-r--r--vbahelper/source/msforms/vbamultipage.hxx57
-rw-r--r--vbahelper/source/msforms/vbapages.cxx72
-rw-r--r--vbahelper/source/msforms/vbapages.hxx56
-rw-r--r--vbahelper/source/msforms/vbaprogressbar.cxx70
-rw-r--r--vbahelper/source/msforms/vbaprogressbar.hxx51
-rw-r--r--vbahelper/source/msforms/vbaradiobutton.cxx104
-rw-r--r--vbahelper/source/msforms/vbaradiobutton.hxx52
-rw-r--r--vbahelper/source/msforms/vbascrollbar.cxx131
-rw-r--r--vbahelper/source/msforms/vbascrollbar.hxx58
-rw-r--r--vbahelper/source/msforms/vbaspinbutton.cxx101
-rw-r--r--vbahelper/source/msforms/vbaspinbutton.hxx53
-rwxr-xr-xvbahelper/source/msforms/vbasystemaxcontrol.cxx101
-rwxr-xr-xvbahelper/source/msforms/vbasystemaxcontrol.hxx58
-rw-r--r--vbahelper/source/msforms/vbatextbox.cxx134
-rw-r--r--vbahelper/source/msforms/vbatextbox.hxx56
-rw-r--r--vbahelper/source/msforms/vbatogglebutton.cxx100
-rw-r--r--vbahelper/source/msforms/vbatogglebutton.hxx55
-rw-r--r--vbahelper/source/msforms/vbauserform.cxx234
-rw-r--r--vbahelper/source/msforms/vbauserform.hxx69
-rw-r--r--vbahelper/source/vbahelper/makefile.mk82
-rw-r--r--vbahelper/source/vbahelper/vbaapplicationbase.cxx498
-rw-r--r--vbahelper/source/vbahelper/vbacolorformat.cxx187
-rw-r--r--vbahelper/source/vbahelper/vbacolorformat.hxx125
-rw-r--r--vbahelper/source/vbahelper/vbacommandbar.cxx286
-rw-r--r--vbahelper/source/vbahelper/vbacommandbar.hxx109
-rw-r--r--vbahelper/source/vbahelper/vbacommandbarcontrol.cxx267
-rw-r--r--vbahelper/source/vbahelper/vbacommandbarcontrol.hxx116
-rw-r--r--vbahelper/source/vbahelper/vbacommandbarcontrols.cxx320
-rw-r--r--vbahelper/source/vbahelper/vbacommandbarcontrols.hxx87
-rw-r--r--vbahelper/source/vbahelper/vbacommandbarhelper.cxx277
-rw-r--r--vbahelper/source/vbahelper/vbacommandbarhelper.hxx102
-rw-r--r--vbahelper/source/vbahelper/vbacommandbars.cxx256
-rw-r--r--vbahelper/source/vbahelper/vbacommandbars.hxx63
-rw-r--r--vbahelper/source/vbahelper/vbadialogbase.cxx48
-rw-r--r--vbahelper/source/vbahelper/vbadialogsbase.cxx44
-rw-r--r--vbahelper/source/vbahelper/vbadocumentbase.cxx246
-rw-r--r--vbahelper/source/vbahelper/vbadocumentsbase.cxx302
-rwxr-xr-xvbahelper/source/vbahelper/vbaeventshelperbase.cxx218
-rw-r--r--vbahelper/source/vbahelper/vbafillformat.cxx199
-rw-r--r--vbahelper/source/vbahelper/vbafillformat.hxx71
-rw-r--r--vbahelper/source/vbahelper/vbafontbase.cxx339
-rw-r--r--vbahelper/source/vbahelper/vbaglobalbase.cxx156
-rw-r--r--vbahelper/source/vbahelper/vbahelper.cxx1465
-rw-r--r--vbahelper/source/vbahelper/vbalineformat.cxx455
-rw-r--r--vbahelper/source/vbahelper/vbalineformat.hxx82
-rw-r--r--vbahelper/source/vbahelper/vbapagesetupbase.cxx322
-rw-r--r--vbahelper/source/vbahelper/vbapictureformat.cxx144
-rw-r--r--vbahelper/source/vbahelper/vbapictureformat.hxx61
-rw-r--r--vbahelper/source/vbahelper/vbapropvalue.cxx45
-rw-r--r--vbahelper/source/vbahelper/vbashape.cxx673
-rw-r--r--vbahelper/source/vbahelper/vbashaperange.cxx379
-rw-r--r--vbahelper/source/vbahelper/vbashapes.cxx488
-rw-r--r--vbahelper/source/vbahelper/vbatextframe.cxx166
-rw-r--r--vbahelper/source/vbahelper/vbawindowbase.cxx177
-rw-r--r--vbahelper/util/makefile.mk104
-rw-r--r--vcl/aqua/inc/aqua11yfactory.h47
-rw-r--r--vcl/aqua/inc/aqua11yfocustracker.hxx108
-rw-r--r--vcl/aqua/inc/aqua11ylistener.hxx65
-rw-r--r--vcl/aqua/inc/aqua11ywrapper.h119
-rwxr-xr-xvcl/aqua/inc/aquaprintview.h67
-rw-r--r--vcl/aqua/inc/aquavclevents.hxx96
-rw-r--r--vcl/aqua/inc/aquavcltypes.h36
-rw-r--r--vcl/aqua/inc/keyboardfocuslistener.hxx47
-rw-r--r--vcl/aqua/inc/salatsuifontutils.hxx63
-rw-r--r--vcl/aqua/inc/salbmp.h107
-rwxr-xr-xvcl/aqua/inc/salcolorutils.hxx52
-rwxr-xr-xvcl/aqua/inc/salconst.h68
-rw-r--r--vcl/aqua/inc/saldata.hxx138
-rw-r--r--vcl/aqua/inc/salfontutils.hxx66
-rw-r--r--vcl/aqua/inc/salframe.h220
-rwxr-xr-xvcl/aqua/inc/salframeview.h212
-rw-r--r--vcl/aqua/inc/salgdi.h417
-rw-r--r--vcl/aqua/inc/salinst.h202
-rwxr-xr-xvcl/aqua/inc/salmathutils.hxx87
-rw-r--r--vcl/aqua/inc/salmenu.h121
-rwxr-xr-xvcl/aqua/inc/salnativewidgets.h71
-rwxr-xr-xvcl/aqua/inc/salnsmenu.h68
-rwxr-xr-xvcl/aqua/inc/salnstimer.h40
-rw-r--r--vcl/aqua/inc/salobj.h86
-rw-r--r--vcl/aqua/inc/salprn.h171
-rw-r--r--vcl/aqua/inc/salsys.h70
-rw-r--r--vcl/aqua/inc/saltimer.h54
-rw-r--r--vcl/aqua/inc/salvd.h94
-rw-r--r--vcl/aqua/inc/svsys.h35
-rwxr-xr-xvcl/aqua/inc/vclnsapp.h70
-rw-r--r--vcl/aqua/source/a11y/aqua11yactionwrapper.h41
-rw-r--r--vcl/aqua/source/a11y/aqua11yactionwrapper.mm83
-rw-r--r--vcl/aqua/source/a11y/aqua11ycomponentwrapper.h45
-rw-r--r--vcl/aqua/source/a11y/aqua11ycomponentwrapper.mm110
-rw-r--r--vcl/aqua/source/a11y/aqua11yfactory.mm198
-rw-r--r--vcl/aqua/source/a11y/aqua11yfocuslistener.cxx118
-rw-r--r--vcl/aqua/source/a11y/aqua11yfocuslistener.hxx62
-rw-r--r--vcl/aqua/source/a11y/aqua11yfocustracker.cxx278
-rw-r--r--vcl/aqua/source/a11y/aqua11ylistener.cxx158
-rw-r--r--vcl/aqua/source/a11y/aqua11yrolehelper.h42
-rw-r--r--vcl/aqua/source/a11y/aqua11yrolehelper.mm272
-rw-r--r--vcl/aqua/source/a11y/aqua11yselectionwrapper.h43
-rw-r--r--vcl/aqua/source/a11y/aqua11yselectionwrapper.mm94
-rw-r--r--vcl/aqua/source/a11y/aqua11ytablewrapper.h44
-rw-r--r--vcl/aqua/source/a11y/aqua11ytablewrapper.mm211
-rw-r--r--vcl/aqua/source/a11y/aqua11ytextattributeswrapper.h39
-rw-r--r--vcl/aqua/source/a11y/aqua11ytextattributeswrapper.mm254
-rw-r--r--vcl/aqua/source/a11y/aqua11ytextwrapper.h64
-rw-r--r--vcl/aqua/source/a11y/aqua11ytextwrapper.mm289
-rw-r--r--vcl/aqua/source/a11y/aqua11yutil.h39
-rw-r--r--vcl/aqua/source/a11y/aqua11yutil.mm53
-rw-r--r--vcl/aqua/source/a11y/aqua11yvaluewrapper.h46
-rw-r--r--vcl/aqua/source/a11y/aqua11yvaluewrapper.mm95
-rw-r--r--vcl/aqua/source/a11y/aqua11ywrapper.mm1142
-rw-r--r--vcl/aqua/source/a11y/aqua11ywrapperbutton.h41
-rw-r--r--vcl/aqua/source/a11y/aqua11ywrapperbutton.mm61
-rw-r--r--vcl/aqua/source/a11y/aqua11ywrappercheckbox.h41
-rw-r--r--vcl/aqua/source/a11y/aqua11ywrappercheckbox.mm65
-rw-r--r--vcl/aqua/source/a11y/aqua11ywrappercombobox.h50
-rw-r--r--vcl/aqua/source/a11y/aqua11ywrappercombobox.mm161
-rw-r--r--vcl/aqua/source/a11y/aqua11ywrappergroup.h40
-rw-r--r--vcl/aqua/source/a11y/aqua11ywrappergroup.mm57
-rw-r--r--vcl/aqua/source/a11y/aqua11ywrapperlist.h39
-rw-r--r--vcl/aqua/source/a11y/aqua11ywrapperlist.mm48
-rw-r--r--vcl/aqua/source/a11y/aqua11ywrapperradiobutton.h41
-rw-r--r--vcl/aqua/source/a11y/aqua11ywrapperradiobutton.mm65
-rw-r--r--vcl/aqua/source/a11y/aqua11ywrapperradiogroup.h39
-rw-r--r--vcl/aqua/source/a11y/aqua11ywrapperradiogroup.mm48
-rw-r--r--vcl/aqua/source/a11y/aqua11ywrapperrow.h40
-rw-r--r--vcl/aqua/source/a11y/aqua11ywrapperrow.mm56
-rw-r--r--vcl/aqua/source/a11y/aqua11ywrapperscrollarea.h41
-rw-r--r--vcl/aqua/source/a11y/aqua11ywrapperscrollarea.mm84
-rw-r--r--vcl/aqua/source/a11y/aqua11ywrapperscrollbar.h39
-rw-r--r--vcl/aqua/source/a11y/aqua11ywrapperscrollbar.mm49
-rw-r--r--vcl/aqua/source/a11y/aqua11ywrappersplitter.h39
-rw-r--r--vcl/aqua/source/a11y/aqua11ywrappersplitter.mm48
-rw-r--r--vcl/aqua/source/a11y/aqua11ywrapperstatictext.h40
-rw-r--r--vcl/aqua/source/a11y/aqua11ywrapperstatictext.mm56
-rw-r--r--vcl/aqua/source/a11y/aqua11ywrappertabgroup.h39
-rw-r--r--vcl/aqua/source/a11y/aqua11ywrappertabgroup.mm50
-rw-r--r--vcl/aqua/source/a11y/aqua11ywrappertextarea.h39
-rw-r--r--vcl/aqua/source/a11y/aqua11ywrappertextarea.mm48
-rw-r--r--vcl/aqua/source/a11y/aqua11ywrappertoolbar.h39
-rw-r--r--vcl/aqua/source/a11y/aqua11ywrappertoolbar.mm50
-rw-r--r--vcl/aqua/source/a11y/documentfocuslistener.cxx253
-rw-r--r--vcl/aqua/source/a11y/documentfocuslistener.hxx101
-rw-r--r--vcl/aqua/source/a11y/makefile.mk88
-rw-r--r--vcl/aqua/source/a11y/readme.txt8
-rw-r--r--vcl/aqua/source/app/makefile.mk63
-rw-r--r--vcl/aqua/source/app/saldata.cxx293
-rw-r--r--vcl/aqua/source/app/salinst.cxx1313
-rwxr-xr-xvcl/aqua/source/app/salnstimer.mm56
-rw-r--r--vcl/aqua/source/app/salsys.cxx131
-rw-r--r--vcl/aqua/source/app/saltimer.cxx135
-rwxr-xr-xvcl/aqua/source/app/vclnsapp.mm518
-rw-r--r--vcl/aqua/source/dtrans/DataFlavorMapping.cxx732
-rw-r--r--vcl/aqua/source/dtrans/DataFlavorMapping.hxx143
-rw-r--r--vcl/aqua/source/dtrans/DragActionConversion.cxx92
-rw-r--r--vcl/aqua/source/dtrans/DragActionConversion.hxx46
-rw-r--r--vcl/aqua/source/dtrans/DragSource.cxx363
-rw-r--r--vcl/aqua/source/dtrans/DragSource.hxx140
-rw-r--r--vcl/aqua/source/dtrans/DragSourceContext.cxx74
-rw-r--r--vcl/aqua/source/dtrans/DragSourceContext.hxx72
-rw-r--r--vcl/aqua/source/dtrans/DropTarget.cxx599
-rw-r--r--vcl/aqua/source/dtrans/DropTarget.hxx169
-rw-r--r--vcl/aqua/source/dtrans/HtmlFmtFlt.cxx147
-rw-r--r--vcl/aqua/source/dtrans/HtmlFmtFlt.hxx20
-rw-r--r--vcl/aqua/source/dtrans/OSXTransferable.cxx215
-rw-r--r--vcl/aqua/source/dtrans/OSXTransferable.hxx100
-rw-r--r--vcl/aqua/source/dtrans/PictToBmpFlt.cxx201
-rw-r--r--vcl/aqua/source/dtrans/PictToBmpFlt.hxx37
-rw-r--r--vcl/aqua/source/dtrans/aqua_clipboard.cxx387
-rw-r--r--vcl/aqua/source/dtrans/aqua_clipboard.hxx181
-rw-r--r--vcl/aqua/source/dtrans/aqua_service.cxx108
-rw-r--r--vcl/aqua/source/dtrans/makefile.mk68
-rw-r--r--vcl/aqua/source/dtrans/service_entry.cxx64
-rw-r--r--vcl/aqua/source/dtrans/test_aquacb.cxx208
-rw-r--r--vcl/aqua/source/gdi/aquaprintaccessoryview.mm1241
-rwxr-xr-xvcl/aqua/source/gdi/aquaprintview.mm82
-rw-r--r--vcl/aqua/source/gdi/makefile.mk74
-rwxr-xr-xvcl/aqua/source/gdi/salatslayout.cxx1264
-rw-r--r--vcl/aqua/source/gdi/salatsuifontutils.cxx552
-rw-r--r--vcl/aqua/source/gdi/salbmp.cxx904
-rwxr-xr-xvcl/aqua/source/gdi/salcolorutils.cxx50
-rw-r--r--vcl/aqua/source/gdi/salgdi.cxx2680
-rwxr-xr-xvcl/aqua/source/gdi/salgdiutils.cxx300
-rwxr-xr-xvcl/aqua/source/gdi/salmathutils.cxx163
-rw-r--r--vcl/aqua/source/gdi/salnativewidgets.cxx1529
-rw-r--r--vcl/aqua/source/gdi/salprn.cxx877
-rw-r--r--vcl/aqua/source/gdi/salvd.cxx236
-rw-r--r--vcl/aqua/source/res/MainMenu.nib/classes.nib4
-rw-r--r--vcl/aqua/source/res/MainMenu.nib/info.nib21
-rw-r--r--vcl/aqua/source/res/MainMenu.nib/keyedobjects.nibbin0 -> 3615 bytes
-rw-r--r--vcl/aqua/source/res/cursors/airbrush.pngbin0 -> 253 bytes
-rw-r--r--vcl/aqua/source/res/cursors/ase.pngbin0 -> 214 bytes
-rw-r--r--vcl/aqua/source/res/cursors/asn.pngbin0 -> 212 bytes
-rw-r--r--vcl/aqua/source/res/cursors/asne.pngbin0 -> 240 bytes
-rw-r--r--vcl/aqua/source/res/cursors/asns.pngbin0 -> 234 bytes
-rw-r--r--vcl/aqua/source/res/cursors/asnswe.pngbin0 -> 285 bytes
-rw-r--r--vcl/aqua/source/res/cursors/asnw.pngbin0 -> 246 bytes
-rw-r--r--vcl/aqua/source/res/cursors/ass.pngbin0 -> 222 bytes
-rw-r--r--vcl/aqua/source/res/cursors/asse.pngbin0 -> 243 bytes
-rw-r--r--vcl/aqua/source/res/cursors/assw.pngbin0 -> 236 bytes
-rw-r--r--vcl/aqua/source/res/cursors/asw.pngbin0 -> 212 bytes
-rw-r--r--vcl/aqua/source/res/cursors/aswe.pngbin0 -> 228 bytes
-rw-r--r--vcl/aqua/source/res/cursors/chain.pngbin0 -> 344 bytes
-rw-r--r--vcl/aqua/source/res/cursors/chainnot.pngbin0 -> 390 bytes
-rw-r--r--vcl/aqua/source/res/cursors/chart.pngbin0 -> 270 bytes
-rw-r--r--vcl/aqua/source/res/cursors/copydata.pngbin0 -> 336 bytes
-rw-r--r--vcl/aqua/source/res/cursors/copydlnk.pngbin0 -> 340 bytes
-rw-r--r--vcl/aqua/source/res/cursors/copyf.pngbin0 -> 329 bytes
-rw-r--r--vcl/aqua/source/res/cursors/copyf2.pngbin0 -> 344 bytes
-rw-r--r--vcl/aqua/source/res/cursors/copyflnk.pngbin0 -> 339 bytes
-rw-r--r--vcl/aqua/source/res/cursors/crook.pngbin0 -> 291 bytes
-rw-r--r--vcl/aqua/source/res/cursors/crop.pngbin0 -> 239 bytes
-rw-r--r--vcl/aqua/source/res/cursors/darc.pngbin0 -> 172 bytes
-rw-r--r--vcl/aqua/source/res/cursors/dbezier.pngbin0 -> 185 bytes
-rw-r--r--vcl/aqua/source/res/cursors/dcapt.pngbin0 -> 183 bytes
-rw-r--r--vcl/aqua/source/res/cursors/dcirccut.pngbin0 -> 185 bytes
-rw-r--r--vcl/aqua/source/res/cursors/dconnect.pngbin0 -> 183 bytes
-rw-r--r--vcl/aqua/source/res/cursors/dellipse.pngbin0 -> 176 bytes
-rw-r--r--vcl/aqua/source/res/cursors/detectiv.pngbin0 -> 268 bytes
-rw-r--r--vcl/aqua/source/res/cursors/dfree.pngbin0 -> 188 bytes
-rw-r--r--vcl/aqua/source/res/cursors/dline.pngbin0 -> 177 bytes
-rw-r--r--vcl/aqua/source/res/cursors/dpie.pngbin0 -> 183 bytes
-rw-r--r--vcl/aqua/source/res/cursors/dpolygon.pngbin0 -> 191 bytes
-rw-r--r--vcl/aqua/source/res/cursors/drect.pngbin0 -> 172 bytes
-rw-r--r--vcl/aqua/source/res/cursors/dtext.pngbin0 -> 174 bytes
-rw-r--r--vcl/aqua/source/res/cursors/fill.pngbin0 -> 255 bytes
-rw-r--r--vcl/aqua/source/res/cursors/help.pngbin0 -> 303 bytes
-rw-r--r--vcl/aqua/source/res/cursors/hourglass.pngbin0 -> 246 bytes
-rw-r--r--vcl/aqua/source/res/cursors/hshear.pngbin0 -> 223 bytes
-rw-r--r--vcl/aqua/source/res/cursors/linkdata.pngbin0 -> 348 bytes
-rw-r--r--vcl/aqua/source/res/cursors/linkf.pngbin0 -> 336 bytes
-rw-r--r--vcl/aqua/source/res/cursors/magnify.pngbin0 -> 282 bytes
-rw-r--r--vcl/aqua/source/res/cursors/mirror.pngbin0 -> 304 bytes
-rw-r--r--vcl/aqua/source/res/cursors/movebw.pngbin0 -> 320 bytes
-rw-r--r--vcl/aqua/source/res/cursors/movedata.pngbin0 -> 290 bytes
-rw-r--r--vcl/aqua/source/res/cursors/movedlnk.pngbin0 -> 318 bytes
-rw-r--r--vcl/aqua/source/res/cursors/movef.pngbin0 -> 294 bytes
-rw-r--r--vcl/aqua/source/res/cursors/movef2.pngbin0 -> 314 bytes
-rw-r--r--vcl/aqua/source/res/cursors/moveflnk.pngbin0 -> 307 bytes
-rw-r--r--vcl/aqua/source/res/cursors/movept.pngbin0 -> 275 bytes
-rw-r--r--vcl/aqua/source/res/cursors/neswsize.pngbin0 -> 312 bytes
-rw-r--r--vcl/aqua/source/res/cursors/notallow.pngbin0 -> 297 bytes
-rw-r--r--vcl/aqua/source/res/cursors/nullptr.pngbin0 -> 150 bytes
-rw-r--r--vcl/aqua/source/res/cursors/nwsesize.pngbin0 -> 313 bytes
-rw-r--r--vcl/aqua/source/res/cursors/pen.pngbin0 -> 351 bytes
-rw-r--r--vcl/aqua/source/res/cursors/pivotcol.pngbin0 -> 293 bytes
-rw-r--r--vcl/aqua/source/res/cursors/pivotdel.pngbin0 -> 264 bytes
-rw-r--r--vcl/aqua/source/res/cursors/pivotfld.pngbin0 -> 272 bytes
-rw-r--r--vcl/aqua/source/res/cursors/pivotrow.pngbin0 -> 295 bytes
-rw-r--r--vcl/aqua/source/res/cursors/pntbrsh.pngbin0 -> 268 bytes
-rw-r--r--vcl/aqua/source/res/cursors/rotate.pngbin0 -> 274 bytes
-rw-r--r--vcl/aqua/source/res/cursors/tblsele.pngbin0 -> 174 bytes
-rw-r--r--vcl/aqua/source/res/cursors/tblsels.pngbin0 -> 171 bytes
-rw-r--r--vcl/aqua/source/res/cursors/tblselse.pngbin0 -> 183 bytes
-rw-r--r--vcl/aqua/source/res/cursors/tblselsw.pngbin0 -> 183 bytes
-rw-r--r--vcl/aqua/source/res/cursors/tblselw.pngbin0 -> 174 bytes
-rw-r--r--vcl/aqua/source/res/cursors/timemove.pngbin0 -> 249 bytes
-rw-r--r--vcl/aqua/source/res/cursors/timesize.pngbin0 -> 241 bytes
-rw-r--r--vcl/aqua/source/res/cursors/vshear.pngbin0 -> 228 bytes
-rw-r--r--vcl/aqua/source/res/cursors/vtext.pngbin0 -> 162 bytes
-rw-r--r--vcl/aqua/source/res/delzip0
-rw-r--r--vcl/aqua/source/res/makefile.mk54
-rw-r--r--vcl/aqua/source/window/makefile.mk63
-rw-r--r--vcl/aqua/source/window/salframe.cxx1636
-rwxr-xr-xvcl/aqua/source/window/salframeview.mm1626
-rw-r--r--vcl/aqua/source/window/salmenu.cxx958
-rwxr-xr-xvcl/aqua/source/window/salnsmenu.mm213
-rw-r--r--vcl/aqua/source/window/salobj.cxx239
-rw-r--r--vcl/inc/cupsmgr.hxx108
-rw-r--r--vcl/inc/list.h99
-rw-r--r--vcl/inc/makefile.mk49
-rw-r--r--vcl/inc/pch/precompiled_vcl.cxx29
-rw-r--r--vcl/inc/pch/precompiled_vcl.hxx33
-rw-r--r--vcl/inc/sft.hxx630
-rw-r--r--vcl/inc/vcl/ImageListProvider.hxx54
-rwxr-xr-xvcl/inc/vcl/abstdlg.hxx93
-rw-r--r--vcl/inc/vcl/accel.h59
-rw-r--r--vcl/inc/vcl/accel.hxx128
-rw-r--r--vcl/inc/vcl/accmgr.hxx64
-rw-r--r--vcl/inc/vcl/alpha.hxx111
-rw-r--r--vcl/inc/vcl/animate.hxx254
-rw-r--r--vcl/inc/vcl/apptypes.hxx79
-rw-r--r--vcl/inc/vcl/arrange.hxx422
-rw-r--r--vcl/inc/vcl/bitmap.hxx854
-rw-r--r--vcl/inc/vcl/bitmapex.hxx400
-rw-r--r--vcl/inc/vcl/bmpacc.hxx545
-rw-r--r--vcl/inc/vcl/bmpfast.hxx51
-rw-r--r--vcl/inc/vcl/brdwin.hxx352
-rw-r--r--vcl/inc/vcl/btndlg.hxx117
-rw-r--r--vcl/inc/vcl/button.hxx566
-rw-r--r--vcl/inc/vcl/canvasbitmap.hxx129
-rw-r--r--vcl/inc/vcl/canvastools.hxx253
-rw-r--r--vcl/inc/vcl/cmdevt.h63
-rw-r--r--vcl/inc/vcl/cmdevt.hxx526
-rw-r--r--vcl/inc/vcl/combobox.h37
-rw-r--r--vcl/inc/vcl/combobox.hxx230
-rw-r--r--vcl/inc/vcl/configsettings.hxx73
-rw-r--r--vcl/inc/vcl/controldata.hxx62
-rw-r--r--vcl/inc/vcl/controllayout.hxx85
-rw-r--r--vcl/inc/vcl/ctrl.hxx201
-rw-r--r--vcl/inc/vcl/cursor.hxx119
-rw-r--r--vcl/inc/vcl/cvtgrf.hxx70
-rw-r--r--vcl/inc/vcl/cvtsvm.hxx117
-rw-r--r--vcl/inc/vcl/dbggui.hxx74
-rw-r--r--vcl/inc/vcl/decoview.hxx110
-rw-r--r--vcl/inc/vcl/dialog.hxx162
-rw-r--r--vcl/inc/vcl/dllapi.h40
-rw-r--r--vcl/inc/vcl/dndevdis.hxx114
-rw-r--r--vcl/inc/vcl/dndhelp.hxx126
-rw-r--r--vcl/inc/vcl/dndlcon.hxx124
-rw-r--r--vcl/inc/vcl/dockingarea.hxx65
-rw-r--r--vcl/inc/vcl/dockwin.hxx452
-rw-r--r--vcl/inc/vcl/edit.hxx260
-rw-r--r--vcl/inc/vcl/event.hxx479
-rw-r--r--vcl/inc/vcl/evntpost.hxx59
-rw-r--r--vcl/inc/vcl/extoutdevdata.hxx47
-rw-r--r--vcl/inc/vcl/field.hxx884
-rw-r--r--vcl/inc/vcl/fixbrd.hxx82
-rw-r--r--vcl/inc/vcl/fixed.hxx199
-rw-r--r--vcl/inc/vcl/fldunit.hxx33
-rw-r--r--vcl/inc/vcl/floatwin.hxx161
-rw-r--r--vcl/inc/vcl/fntstyle.hxx53
-rw-r--r--vcl/inc/vcl/font.hxx140
-rw-r--r--vcl/inc/vcl/fontcache.hxx99
-rw-r--r--vcl/inc/vcl/fontmanager.hxx745
-rw-r--r--vcl/inc/vcl/fontsubset.hxx97
-rw-r--r--vcl/inc/vcl/gdimtf.hxx251
-rw-r--r--vcl/inc/vcl/gfxlink.hxx185
-rw-r--r--vcl/inc/vcl/glyphcache.hxx381
-rw-r--r--vcl/inc/vcl/gradient.hxx132
-rw-r--r--vcl/inc/vcl/graph.h81
-rw-r--r--vcl/inc/vcl/graph.hxx222
-rw-r--r--vcl/inc/vcl/graphictools.hxx462
-rw-r--r--vcl/inc/vcl/graphite_adaptors.hxx152
-rw-r--r--vcl/inc/vcl/graphite_cache.hxx289
-rw-r--r--vcl/inc/vcl/graphite_features.hxx75
-rw-r--r--vcl/inc/vcl/graphite_layout.hxx188
-rw-r--r--vcl/inc/vcl/graphite_serverfont.hxx100
-rw-r--r--vcl/inc/vcl/group.hxx67
-rw-r--r--vcl/inc/vcl/hatch.hxx96
-rw-r--r--vcl/inc/vcl/help.hxx123
-rw-r--r--vcl/inc/vcl/helper.hxx65
-rw-r--r--vcl/inc/vcl/helpwin.hxx92
-rw-r--r--vcl/inc/vcl/i18nhelp.hxx97
-rw-r--r--vcl/inc/vcl/idlemgr.hxx60
-rw-r--r--vcl/inc/vcl/ilstbox.hxx643
-rw-r--r--vcl/inc/vcl/image.h182
-rw-r--r--vcl/inc/vcl/image.hxx178
-rw-r--r--vcl/inc/vcl/imagerepository.hxx70
-rw-r--r--vcl/inc/vcl/imgctrl.hxx67
-rw-r--r--vcl/inc/vcl/impbmp.hxx108
-rw-r--r--vcl/inc/vcl/impbmpconv.hxx39
-rw-r--r--vcl/inc/vcl/impdel.hxx87
-rw-r--r--vcl/inc/vcl/impfont.hxx243
-rw-r--r--vcl/inc/vcl/impgraph.hxx176
-rw-r--r--vcl/inc/vcl/impimagetree.hxx96
-rw-r--r--vcl/inc/vcl/impoct.hxx176
-rw-r--r--vcl/inc/vcl/impprn.hxx140
-rw-r--r--vcl/inc/vcl/inputctx.hxx88
-rw-r--r--vcl/inc/vcl/introwin.hxx53
-rw-r--r--vcl/inc/vcl/javachild.hxx57
-rw-r--r--vcl/inc/vcl/jobdata.hxx85
-rw-r--r--vcl/inc/vcl/jobset.h79
-rw-r--r--vcl/inc/vcl/jobset.hxx83
-rw-r--r--vcl/inc/vcl/keycod.hxx157
-rw-r--r--vcl/inc/vcl/keycodes.hxx191
-rw-r--r--vcl/inc/vcl/lazydelete.hxx262
-rw-r--r--vcl/inc/vcl/lineinfo.hxx132
-rw-r--r--vcl/inc/vcl/longcurr.hxx162
-rw-r--r--vcl/inc/vcl/lstbox.h65
-rw-r--r--vcl/inc/vcl/lstbox.hxx266
-rw-r--r--vcl/inc/vcl/mapmod.hxx116
-rw-r--r--vcl/inc/vcl/mapunit.hxx33
-rw-r--r--vcl/inc/vcl/menu.hxx534
-rw-r--r--vcl/inc/vcl/menubtn.hxx98
-rw-r--r--vcl/inc/vcl/metaact.hxx1546
-rw-r--r--vcl/inc/vcl/metric.hxx163
-rw-r--r--vcl/inc/vcl/mnemonic.hxx88
-rw-r--r--vcl/inc/vcl/mnemonicengine.hxx158
-rw-r--r--vcl/inc/vcl/morebtn.hxx95
-rw-r--r--vcl/inc/vcl/msgbox.hxx190
-rw-r--r--vcl/inc/vcl/octree.hxx161
-rw-r--r--vcl/inc/vcl/oldprintadaptor.hxx52
-rw-r--r--vcl/inc/vcl/outdata.hxx49
-rw-r--r--vcl/inc/vcl/outdev.h264
-rw-r--r--vcl/inc/vcl/outdev.hxx1226
-rw-r--r--vcl/inc/vcl/outfont.hxx406
-rw-r--r--vcl/inc/vcl/pdfextoutdevdata.hxx518
-rw-r--r--vcl/inc/vcl/pdfwriter.hxx1298
-rw-r--r--vcl/inc/vcl/pngread.hxx70
-rw-r--r--vcl/inc/vcl/pngwrite.hxx67
-rw-r--r--vcl/inc/vcl/pointr.hxx59
-rw-r--r--vcl/inc/vcl/polyscan.hxx155
-rw-r--r--vcl/inc/vcl/popupmenuwindow.hxx47
-rw-r--r--vcl/inc/vcl/ppdparser.hxx343
-rw-r--r--vcl/inc/vcl/print.h81
-rw-r--r--vcl/inc/vcl/print.hxx680
-rw-r--r--vcl/inc/vcl/printergfx.hxx442
-rw-r--r--vcl/inc/vcl/printerinfomanager.hxx241
-rw-r--r--vcl/inc/vcl/printerjob.hxx149
-rw-r--r--vcl/inc/vcl/prndlg.hxx335
-rw-r--r--vcl/inc/vcl/prntypes.hxx95
-rw-r--r--vcl/inc/vcl/ptrstyle.hxx142
-rw-r--r--vcl/inc/vcl/regband.hxx150
-rw-r--r--vcl/inc/vcl/region.h134
-rw-r--r--vcl/inc/vcl/region.hxx155
-rw-r--r--vcl/inc/vcl/salatype.hxx47
-rw-r--r--vcl/inc/vcl/salbmp.hxx65
-rw-r--r--vcl/inc/vcl/salbtype.hxx900
-rw-r--r--vcl/inc/vcl/salctrlhandle.hxx48
-rw-r--r--vcl/inc/vcl/salctype.hxx80
-rw-r--r--vcl/inc/vcl/saldatabasic.hxx53
-rw-r--r--vcl/inc/vcl/salframe.hxx293
-rw-r--r--vcl/inc/vcl/salgdi.hxx494
-rw-r--r--vcl/inc/vcl/salgeom.hxx51
-rw-r--r--vcl/inc/vcl/salgtype.hxx90
-rw-r--r--vcl/inc/vcl/salimestatus.hxx45
-rw-r--r--vcl/inc/vcl/salinst.hxx216
-rwxr-xr-xvcl/inc/vcl/sallayout.hxx390
-rw-r--r--vcl/inc/vcl/salmenu.hxx101
-rw-r--r--vcl/inc/vcl/salnativewidgets.hxx453
-rw-r--r--vcl/inc/vcl/salobj.hxx90
-rw-r--r--vcl/inc/vcl/salprn.hxx137
-rw-r--r--vcl/inc/vcl/salptype.hxx60
-rw-r--r--vcl/inc/vcl/salsession.hxx117
-rw-r--r--vcl/inc/vcl/salsys.hxx146
-rw-r--r--vcl/inc/vcl/saltimer.hxx69
-rw-r--r--vcl/inc/vcl/salvd.hxx58
-rw-r--r--vcl/inc/vcl/salwtype.hxx346
-rw-r--r--vcl/inc/vcl/scrbar.hxx170
-rw-r--r--vcl/inc/vcl/seleng.hxx253
-rw-r--r--vcl/inc/vcl/settings.hxx1298
-rw-r--r--vcl/inc/vcl/slider.hxx132
-rwxr-xr-xvcl/inc/vcl/smartid.hxx87
-rw-r--r--vcl/inc/vcl/sndstyle.hxx46
-rw-r--r--vcl/inc/vcl/sound.hxx51
-rw-r--r--vcl/inc/vcl/spin.h51
-rw-r--r--vcl/inc/vcl/spin.hxx117
-rw-r--r--vcl/inc/vcl/spinfld.hxx115
-rw-r--r--vcl/inc/vcl/split.hxx126
-rw-r--r--vcl/inc/vcl/splitwin.hxx268
-rw-r--r--vcl/inc/vcl/status.hxx226
-rw-r--r--vcl/inc/vcl/stdtext.hxx53
-rw-r--r--vcl/inc/vcl/strhelper.hxx83
-rw-r--r--vcl/inc/vcl/subedit.hxx48
-rw-r--r--vcl/inc/vcl/sv.h33
-rw-r--r--vcl/inc/vcl/svapp.hxx517
-rw-r--r--vcl/inc/vcl/svcompat.hxx70
-rw-r--r--vcl/inc/vcl/svdata.hxx457
-rw-r--r--vcl/inc/vcl/svids.hrc261
-rw-r--r--vcl/inc/vcl/symbol.hxx81
-rw-r--r--vcl/inc/vcl/syschild.hxx67
-rw-r--r--vcl/inc/vcl/sysdata.hxx189
-rw-r--r--vcl/inc/vcl/syswin.hxx281
-rw-r--r--vcl/inc/vcl/tabctrl.hxx219
-rw-r--r--vcl/inc/vcl/tabdlg.hxx70
-rw-r--r--vcl/inc/vcl/tabpage.hxx62
-rw-r--r--vcl/inc/vcl/taskpanelist.hxx57
-rw-r--r--vcl/inc/vcl/textlayout.hxx136
-rw-r--r--vcl/inc/vcl/threadex.hxx288
-rw-r--r--vcl/inc/vcl/timer.hxx89
-rw-r--r--vcl/inc/vcl/toolbox.h182
-rw-r--r--vcl/inc/vcl/toolbox.hxx682
-rw-r--r--vcl/inc/vcl/unobrok.hxx39
-rw-r--r--vcl/inc/vcl/unohelp.hxx70
-rw-r--r--vcl/inc/vcl/unohelp2.hxx84
-rw-r--r--vcl/inc/vcl/unowrap.hxx91
-rw-r--r--vcl/inc/vcl/vclenum.hxx328
-rw-r--r--vcl/inc/vcl/vclevent.hxx301
-rw-r--r--vcl/inc/vcl/virdev.hxx129
-rw-r--r--vcl/inc/vcl/waitobj.hxx53
-rw-r--r--vcl/inc/vcl/wall.hxx143
-rw-r--r--vcl/inc/vcl/wall2.hxx60
-rw-r--r--vcl/inc/vcl/windata.hxx49
-rw-r--r--vcl/inc/vcl/window.h372
-rw-r--r--vcl/inc/vcl/window.hxx1109
-rw-r--r--vcl/inc/vcl/wintypes.hxx33
-rw-r--r--vcl/inc/vcl/wrkwin.hxx108
-rw-r--r--vcl/inc/vcl/xconnection.hxx70
-rw-r--r--vcl/os2/howto.txt13
-rw-r--r--vcl/os2/inc/salbmp.h109
-rw-r--r--vcl/os2/inc/saldata.hxx307
-rw-r--r--vcl/os2/inc/salframe.h166
-rw-r--r--vcl/os2/inc/salgdi.h373
-rw-r--r--vcl/os2/inc/salids.hrc109
-rw-r--r--vcl/os2/inc/salinst.h103
-rw-r--r--vcl/os2/inc/sallang.hxx70
-rw-r--r--vcl/os2/inc/sallayout.h69
-rw-r--r--vcl/os2/inc/salmenu.h65
-rw-r--r--vcl/os2/inc/salobj.h69
-rw-r--r--vcl/os2/inc/salprn.h146
-rw-r--r--vcl/os2/inc/salsound.h94
-rw-r--r--vcl/os2/inc/salsound.hxx84
-rw-r--r--vcl/os2/inc/salsys.h44
-rw-r--r--vcl/os2/inc/saltimer.h44
-rw-r--r--vcl/os2/inc/salvd.h65
-rw-r--r--vcl/os2/inc/svsys.h35
-rw-r--r--vcl/os2/inc/wingdi.h70
-rw-r--r--vcl/os2/inc/xwphook.h620
-rw-r--r--vcl/os2/source/app/makefile.mk59
-rw-r--r--vcl/os2/source/app/printf.c284
-rw-r--r--vcl/os2/source/app/salinfo.cxx182
-rw-r--r--vcl/os2/source/app/salinst.cxx863
-rw-r--r--vcl/os2/source/app/sallang.cxx117
-rw-r--r--vcl/os2/source/app/salshl.cxx123
-rw-r--r--vcl/os2/source/app/saltimer.cxx140
-rw-r--r--vcl/os2/source/gdi/makefile.mk56
-rw-r--r--vcl/os2/source/gdi/os2layout.cxx1056
-rw-r--r--vcl/os2/source/gdi/salbmp.cxx737
-rw-r--r--vcl/os2/source/gdi/salgdi.cxx1044
-rw-r--r--vcl/os2/source/gdi/salgdi2.cxx786
-rw-r--r--vcl/os2/source/gdi/salgdi3.cxx1769
-rw-r--r--vcl/os2/source/gdi/salprn.cxx1833
-rw-r--r--vcl/os2/source/gdi/salvd.cxx200
-rw-r--r--vcl/os2/source/src/airbrush.ptrbin0 -> 2106 bytes
-rwxr-xr-xvcl/os2/source/src/ase.ptrbin0 -> 1190 bytes
-rwxr-xr-xvcl/os2/source/src/asn.ptrbin0 -> 1190 bytes
-rwxr-xr-xvcl/os2/source/src/asne.ptrbin0 -> 1190 bytes
-rwxr-xr-xvcl/os2/source/src/asns.ptrbin0 -> 1190 bytes
-rwxr-xr-xvcl/os2/source/src/asnswe.ptrbin0 -> 1190 bytes
-rwxr-xr-xvcl/os2/source/src/asnw.ptrbin0 -> 1190 bytes
-rwxr-xr-xvcl/os2/source/src/ass.ptrbin0 -> 1190 bytes
-rwxr-xr-xvcl/os2/source/src/asse.ptrbin0 -> 1190 bytes
-rwxr-xr-xvcl/os2/source/src/assw.ptrbin0 -> 1190 bytes
-rwxr-xr-xvcl/os2/source/src/asw.ptrbin0 -> 1190 bytes
-rwxr-xr-xvcl/os2/source/src/aswe.ptrbin0 -> 1190 bytes
-rw-r--r--vcl/os2/source/src/chain.ptrbin0 -> 16 bytes
-rw-r--r--vcl/os2/source/src/chainnot.ptrbin0 -> 16 bytes
-rw-r--r--vcl/os2/source/src/chart.ptrbin0 -> 1190 bytes
-rw-r--r--vcl/os2/source/src/copydata.ptrbin0 -> 1191 bytes
-rw-r--r--vcl/os2/source/src/copydlnk.ptrbin0 -> 1190 bytes
-rw-r--r--vcl/os2/source/src/copyf.ptrbin0 -> 1190 bytes
-rw-r--r--vcl/os2/source/src/copyf2.ptrbin0 -> 1190 bytes
-rw-r--r--vcl/os2/source/src/copyflnk.ptrbin0 -> 1190 bytes
-rw-r--r--vcl/os2/source/src/crook.ptrbin0 -> 1191 bytes
-rw-r--r--vcl/os2/source/src/crop.ptrbin0 -> 1190 bytes
-rw-r--r--vcl/os2/source/src/cross.ptrbin0 -> 1190 bytes
-rw-r--r--vcl/os2/source/src/darc.ptrbin0 -> 1190 bytes
-rw-r--r--vcl/os2/source/src/data.ptrbin0 -> 1190 bytes
-rw-r--r--vcl/os2/source/src/dbezier.ptrbin0 -> 1190 bytes
-rw-r--r--vcl/os2/source/src/dcapt.ptrbin0 -> 1190 bytes
-rw-r--r--vcl/os2/source/src/dcirccut.ptrbin0 -> 1190 bytes
-rw-r--r--vcl/os2/source/src/dconnect.ptrbin0 -> 1190 bytes
-rw-r--r--vcl/os2/source/src/dellipse.ptrbin0 -> 1190 bytes
-rw-r--r--vcl/os2/source/src/detectiv.ptrbin0 -> 1190 bytes
-rw-r--r--vcl/os2/source/src/dfree.ptrbin0 -> 1190 bytes
-rw-r--r--vcl/os2/source/src/dline.ptrbin0 -> 1190 bytes
-rw-r--r--vcl/os2/source/src/dpie.ptrbin0 -> 1190 bytes
-rw-r--r--vcl/os2/source/src/dpolygon.ptrbin0 -> 1190 bytes
-rw-r--r--vcl/os2/source/src/drect.ptrbin0 -> 1190 bytes
-rw-r--r--vcl/os2/source/src/dtext.ptrbin0 -> 1190 bytes
-rw-r--r--vcl/os2/source/src/fill.ptrbin0 -> 1190 bytes
-rw-r--r--vcl/os2/source/src/hand.ptrbin0 -> 1190 bytes
-rw-r--r--vcl/os2/source/src/help.ptrbin0 -> 1190 bytes
-rw-r--r--vcl/os2/source/src/hshear.ptrbin0 -> 1190 bytes
-rw-r--r--vcl/os2/source/src/hsizebar.ptrbin0 -> 1190 bytes
-rw-r--r--vcl/os2/source/src/hsplit.ptrbin0 -> 1190 bytes
-rw-r--r--vcl/os2/source/src/linkdata.ptrbin0 -> 1191 bytes
-rw-r--r--vcl/os2/source/src/linkf.ptrbin0 -> 1190 bytes
-rw-r--r--vcl/os2/source/src/magnify.ptrbin0 -> 1190 bytes
-rw-r--r--vcl/os2/source/src/makefile.mk111
-rw-r--r--vcl/os2/source/src/mirror.ptrbin0 -> 1191 bytes
-rw-r--r--vcl/os2/source/src/move.ptrbin0 -> 1190 bytes
-rw-r--r--vcl/os2/source/src/movebw.ptrbin0 -> 1190 bytes
-rw-r--r--vcl/os2/source/src/movedata.ptrbin0 -> 1191 bytes
-rw-r--r--vcl/os2/source/src/movedlnk.ptrbin0 -> 1190 bytes
-rw-r--r--vcl/os2/source/src/movef.ptrbin0 -> 1190 bytes
-rw-r--r--vcl/os2/source/src/movef2.ptrbin0 -> 1190 bytes
-rw-r--r--vcl/os2/source/src/moveflnk.ptrbin0 -> 1190 bytes
-rw-r--r--vcl/os2/source/src/movept.ptrbin0 -> 1190 bytes
-rw-r--r--vcl/os2/source/src/nullptr.ptrbin0 -> 1190 bytes
-rw-r--r--vcl/os2/source/src/pen.ptrbin0 -> 1190 bytes
-rw-r--r--vcl/os2/source/src/pivotcol.ptrbin0 -> 1190 bytes
-rw-r--r--vcl/os2/source/src/pivotfld.ptrbin0 -> 1190 bytes
-rw-r--r--vcl/os2/source/src/pivotrow.ptrbin0 -> 1190 bytes
-rw-r--r--vcl/os2/source/src/pntbrsh.ptrbin0 -> 2106 bytes
-rw-r--r--vcl/os2/source/src/refhand.ptrbin0 -> 1190 bytes
-rw-r--r--vcl/os2/source/src/rotate.ptrbin0 -> 1191 bytes
-rw-r--r--vcl/os2/source/src/salsrc.rc108
-rw-r--r--vcl/os2/source/src/sd.icobin0 -> 3344 bytes
-rw-r--r--vcl/os2/source/src/sd2.icobin0 -> 5604 bytes
-rw-r--r--vcl/os2/source/src/tblsele.ptrbin0 -> 2106 bytes
-rw-r--r--vcl/os2/source/src/tblsels.ptrbin0 -> 2106 bytes
-rw-r--r--vcl/os2/source/src/tblselse.ptrbin0 -> 2106 bytes
-rw-r--r--vcl/os2/source/src/tblselsw.ptrbin0 -> 2106 bytes
-rw-r--r--vcl/os2/source/src/tblselw.ptrbin0 -> 2106 bytes
-rwxr-xr-xvcl/os2/source/src/timemove.ptrbin0 -> 1190 bytes
-rwxr-xr-xvcl/os2/source/src/timesize.ptrbin0 -> 1190 bytes
-rw-r--r--vcl/os2/source/src/vshear.ptrbin0 -> 1201 bytes
-rw-r--r--vcl/os2/source/src/vsizebar.ptrbin0 -> 1190 bytes
-rw-r--r--vcl/os2/source/src/vsplit.ptrbin0 -> 1190 bytes
-rw-r--r--vcl/os2/source/src/vtext.ptrbin0 -> 2106 bytes
-rw-r--r--vcl/os2/source/window/makefile53
-rw-r--r--vcl/os2/source/window/makefile.mk47
-rw-r--r--vcl/os2/source/window/salframe.cxx3774
-rw-r--r--vcl/os2/source/window/salmenu.cxx132
-rw-r--r--vcl/os2/source/window/salobj.cxx568
-rw-r--r--vcl/prj/build.lst50
-rw-r--r--vcl/prj/d.lst155
-rw-r--r--vcl/qa/complex/memCheck/CheckMemoryUsage.java340
-rw-r--r--vcl/qa/complex/memCheck/CheckMemoryUsage.props14
-rwxr-xr-xvcl/qa/complex/memCheck/makefile.mk89
-rw-r--r--vcl/qa/complex/persistent_window_states/DocumentHandle.java169
-rw-r--r--vcl/qa/complex/persistent_window_states/PersistentWindowTest.java393
-rw-r--r--vcl/qa/complex/persistent_window_states/PersistentWindowTest.props10
-rw-r--r--vcl/qa/complex/persistent_window_states/makefile.mk81
-rwxr-xr-xvcl/qa/testdocuments/CalcDoc.sxcbin0 -> 9547 bytes
-rwxr-xr-xvcl/qa/testdocuments/ImpressDoc.sxibin0 -> 35135 bytes
-rwxr-xr-xvcl/qa/testdocuments/WriterDoc.sxwbin0 -> 5754 bytes
-rw-r--r--vcl/source/app/dbggui.cxx2029
-rw-r--r--vcl/source/app/dndhelp.cxx182
-rw-r--r--vcl/source/app/help.cxx787
-rw-r--r--vcl/source/app/i18nhelp.cxx187
-rw-r--r--vcl/source/app/idlemgr.cxx150
-rw-r--r--vcl/source/app/makefile.mk69
-rw-r--r--vcl/source/app/salvtables.cxx144
-rw-r--r--vcl/source/app/session.cxx369
-rwxr-xr-xvcl/source/app/settings.cxx2080
-rw-r--r--vcl/source/app/sound.cxx55
-rw-r--r--vcl/source/app/stdtext.cxx68
-rw-r--r--vcl/source/app/svapp.cxx2085
-rw-r--r--vcl/source/app/svdata.cxx536
-rw-r--r--vcl/source/app/svmain.cxx638
-rw-r--r--vcl/source/app/svmainhook.cxx116
-rw-r--r--vcl/source/app/timer.cxx380
-rw-r--r--vcl/source/app/unohelp.cxx242
-rw-r--r--vcl/source/app/unohelp2.cxx112
-rw-r--r--vcl/source/app/vclevent.cxx151
-rw-r--r--vcl/source/components/display.cxx345
-rw-r--r--vcl/source/components/dtranscomp.cxx552
-rw-r--r--vcl/source/components/factory.cxx200
-rw-r--r--vcl/source/components/fontident.cxx211
-rw-r--r--vcl/source/components/makefile.mk51
-rw-r--r--vcl/source/control/button.cxx4522
-rw-r--r--vcl/source/control/combobox.cxx1591
-rw-r--r--vcl/source/control/ctrl.cxx587
-rw-r--r--vcl/source/control/edit.cxx3140
-rw-r--r--vcl/source/control/field.cxx2474
-rw-r--r--vcl/source/control/field2.cxx3469
-rw-r--r--vcl/source/control/fixbrd.cxx236
-rw-r--r--vcl/source/control/fixed.cxx1174
-rw-r--r--vcl/source/control/group.cxx324
-rw-r--r--vcl/source/control/ilstbox.cxx3233
-rw-r--r--vcl/source/control/imgctrl.cxx269
-rw-r--r--vcl/source/control/longcurr.cxx859
-rw-r--r--vcl/source/control/lstbox.cxx1644
-rw-r--r--vcl/source/control/makefile.mk79
-rw-r--r--vcl/source/control/menubtn.cxx249
-rw-r--r--vcl/source/control/morebtn.cxx280
-rw-r--r--vcl/source/control/scrbar.cxx1648
-rw-r--r--vcl/source/control/slider.cxx1089
-rw-r--r--vcl/source/control/spinbtn.cxx550
-rw-r--r--vcl/source/control/spinfld.cxx1092
-rw-r--r--vcl/source/control/tabctrl.cxx2356
-rw-r--r--vcl/source/fontsubset/cff.cxx2417
-rw-r--r--vcl/source/fontsubset/fontsubset.cxx185
-rw-r--r--vcl/source/fontsubset/gsub.cxx360
-rw-r--r--vcl/source/fontsubset/gsub.h44
-rw-r--r--vcl/source/fontsubset/list.c541
-rw-r--r--vcl/source/fontsubset/makefile.mk51
-rw-r--r--vcl/source/fontsubset/sft.cxx3359
-rw-r--r--vcl/source/fontsubset/ttcr.cxx1666
-rw-r--r--vcl/source/fontsubset/ttcr.hxx261
-rw-r--r--vcl/source/fontsubset/xlat.cxx221
-rw-r--r--vcl/source/fontsubset/xlat.hxx54
-rw-r--r--vcl/source/gdi/alpha.cxx434
-rw-r--r--vcl/source/gdi/animate.cxx939
-rw-r--r--vcl/source/gdi/base14.cxx687
-rw-r--r--vcl/source/gdi/bitmap.cxx1968
-rw-r--r--vcl/source/gdi/bitmap2.cxx1277
-rw-r--r--vcl/source/gdi/bitmap3.cxx2203
-rw-r--r--vcl/source/gdi/bitmap4.cxx1009
-rw-r--r--vcl/source/gdi/bitmapex.cxx914
-rw-r--r--vcl/source/gdi/bmpacc.cxx447
-rw-r--r--vcl/source/gdi/bmpacc2.cxx331
-rw-r--r--vcl/source/gdi/bmpacc3.cxx410
-rw-r--r--vcl/source/gdi/bmpconv.cxx213
-rw-r--r--vcl/source/gdi/bmpfast.cxx1040
-rw-r--r--vcl/source/gdi/configsettings.cxx205
-rw-r--r--vcl/source/gdi/cvtgrf.cxx175
-rw-r--r--vcl/source/gdi/cvtsvm.cxx2516
-rw-r--r--vcl/source/gdi/extoutdevdata.cxx41
-rw-r--r--vcl/source/gdi/font.cxx1116
-rw-r--r--vcl/source/gdi/gdimtf.cxx3033
-rw-r--r--vcl/source/gdi/gfxlink.cxx469
-rw-r--r--vcl/source/gdi/gradient.cxx344
-rw-r--r--vcl/source/gdi/graph.cxx814
-rw-r--r--vcl/source/gdi/graphictools.cxx759
-rw-r--r--vcl/source/gdi/hatch.cxx222
-rw-r--r--vcl/source/gdi/image.cxx1029
-rw-r--r--vcl/source/gdi/imagerepository.cxx57
-rw-r--r--vcl/source/gdi/impanmvw.cxx355
-rw-r--r--vcl/source/gdi/impanmvw.hxx96
-rw-r--r--vcl/source/gdi/impbmp.cxx134
-rw-r--r--vcl/source/gdi/impgraph.cxx1677
-rw-r--r--vcl/source/gdi/impimage.cxx634
-rw-r--r--vcl/source/gdi/impimagetree.cxx352
-rw-r--r--vcl/source/gdi/impprn.cxx584
-rw-r--r--vcl/source/gdi/impvect.cxx1204
-rw-r--r--vcl/source/gdi/impvect.hxx63
-rw-r--r--vcl/source/gdi/jobset.cxx458
-rw-r--r--vcl/source/gdi/lineinfo.cxx361
-rw-r--r--vcl/source/gdi/makefile.mk121
-rw-r--r--vcl/source/gdi/mapmod.cxx311
-rw-r--r--vcl/source/gdi/metaact.cxx4274
-rw-r--r--vcl/source/gdi/metric.cxx916
-rw-r--r--vcl/source/gdi/octree.cxx369
-rw-r--r--vcl/source/gdi/oldprintadaptor.cxx117
-rw-r--r--vcl/source/gdi/outdev.cxx3493
-rwxr-xr-xvcl/source/gdi/outdev2.cxx2270
-rw-r--r--vcl/source/gdi/outdev3.cxx8022
-rw-r--r--vcl/source/gdi/outdev4.cxx1421
-rw-r--r--vcl/source/gdi/outdev5.cxx313
-rw-r--r--vcl/source/gdi/outdev6.cxx1247
-rw-r--r--vcl/source/gdi/outdevnative.cxx376
-rw-r--r--vcl/source/gdi/outmap.cxx2507
-rw-r--r--vcl/source/gdi/pdfextoutdevdata.cxx798
-rw-r--r--vcl/source/gdi/pdffontcache.cxx85
-rw-r--r--vcl/source/gdi/pdffontcache.hxx81
-rw-r--r--vcl/source/gdi/pdfwriter.cxx571
-rw-r--r--vcl/source/gdi/pdfwriter_impl.cxx12309
-rw-r--r--vcl/source/gdi/pdfwriter_impl.hxx1375
-rw-r--r--vcl/source/gdi/pngread.cxx1579
-rw-r--r--vcl/source/gdi/pngwrite.cxx737
-rw-r--r--vcl/source/gdi/polyscan.cxx358
-rw-r--r--vcl/source/gdi/print.cxx1481
-rw-r--r--vcl/source/gdi/print2.cxx1570
-rwxr-xr-xvcl/source/gdi/print3.cxx1910
-rw-r--r--vcl/source/gdi/regband.cxx969
-rw-r--r--vcl/source/gdi/region.cxx2932
-rwxr-xr-xvcl/source/gdi/salgdilayout.cxx820
-rwxr-xr-xvcl/source/gdi/sallayout.cxx2326
-rw-r--r--vcl/source/gdi/salmisc.cxx516
-rw-r--r--vcl/source/gdi/salnativewidgets-none.cxx134
-rw-r--r--vcl/source/gdi/svcompat.cxx78
-rw-r--r--vcl/source/gdi/textlayout.cxx386
-rw-r--r--vcl/source/gdi/virdev.cxx449
-rw-r--r--vcl/source/gdi/wall.cxx639
-rw-r--r--vcl/source/glyphs/gcach_ftyp.cxx2557
-rw-r--r--vcl/source/glyphs/gcach_ftyp.hxx255
-rw-r--r--vcl/source/glyphs/gcach_layout.cxx644
-rw-r--r--vcl/source/glyphs/gcach_rbmp.cxx274
-rw-r--r--vcl/source/glyphs/gcach_vdev.cxx287
-rw-r--r--vcl/source/glyphs/gcach_vdev.hxx57
-rw-r--r--vcl/source/glyphs/glyphcache.cxx596
-rw-r--r--vcl/source/glyphs/graphite_adaptors.cxx336
-rw-r--r--vcl/source/glyphs/graphite_cache.cxx200
-rw-r--r--vcl/source/glyphs/graphite_features.cxx286
-rw-r--r--vcl/source/glyphs/graphite_layout.cxx1561
-rw-r--r--vcl/source/glyphs/graphite_serverfont.cxx85
-rw-r--r--vcl/source/glyphs/graphite_textsrc.cxx169
-rw-r--r--vcl/source/glyphs/graphite_textsrc.hxx131
-rw-r--r--vcl/source/glyphs/makefile.mk80
-rw-r--r--vcl/source/helper/canvasbitmap.cxx1467
-rw-r--r--vcl/source/helper/canvastools.cxx837
-rw-r--r--vcl/source/helper/evntpost.cxx65
-rw-r--r--vcl/source/helper/lazydelete.cxx125
-rw-r--r--vcl/source/helper/makefile.mk56
-rwxr-xr-xvcl/source/helper/smartid.cxx264
-rw-r--r--vcl/source/helper/strhelper.cxx442
-rw-r--r--vcl/source/helper/threadex.cxx127
-rw-r--r--vcl/source/helper/xconnection.cxx178
-rw-r--r--vcl/source/salmain/makefile.mk38
-rw-r--r--vcl/source/salmain/salmain.cxx40
-rw-r--r--vcl/source/src/btntext.src147
-rw-r--r--vcl/source/src/helptext.src163
-rw-r--r--vcl/source/src/images.src852
-rw-r--r--vcl/source/src/makefile.mk56
-rw-r--r--vcl/source/src/menu.src107
-rw-r--r--vcl/source/src/print.src492
-rw-r--r--vcl/source/src/stdtext.src127
-rw-r--r--vcl/source/src/units.src57
-rw-r--r--vcl/source/window/abstdlg.cxx64
-rw-r--r--vcl/source/window/accel.cxx731
-rw-r--r--vcl/source/window/accmgr.cxx290
-rw-r--r--vcl/source/window/arrange.cxx903
-rw-r--r--vcl/source/window/brdwin.cxx2355
-rw-r--r--vcl/source/window/btndlg.cxx551
-rw-r--r--vcl/source/window/cmdevt.cxx101
-rw-r--r--vcl/source/window/cursor.cxx462
-rw-r--r--vcl/source/window/decoview.cxx1388
-rw-r--r--vcl/source/window/dialog.cxx1028
-rw-r--r--vcl/source/window/dlgctrl.cxx1267
-rw-r--r--vcl/source/window/dndevdis.cxx564
-rw-r--r--vcl/source/window/dndlcon.cxx567
-rw-r--r--vcl/source/window/dockingarea.cxx246
-rw-r--r--vcl/source/window/dockmgr.cxx1689
-rw-r--r--vcl/source/window/dockwin.cxx1120
-rw-r--r--vcl/source/window/floatwin.cxx878
-rw-r--r--vcl/source/window/introwin.cxx88
-rw-r--r--vcl/source/window/javachild.cxx207
-rw-r--r--vcl/source/window/keycod.cxx160
-rw-r--r--vcl/source/window/keyevent.cxx116
-rw-r--r--vcl/source/window/makefile.mk104
-rw-r--r--vcl/source/window/menu.cxx6099
-rw-r--r--vcl/source/window/mnemonic.cxx419
-rw-r--r--vcl/source/window/mnemonicengine.cxx130
-rw-r--r--vcl/source/window/mouseevent.cxx92
-rw-r--r--vcl/source/window/msgbox.cxx694
-rw-r--r--vcl/source/window/popupmenuwindow.cxx79
-rw-r--r--vcl/source/window/printdlg.cxx2603
-rw-r--r--vcl/source/window/scrwnd.cxx420
-rw-r--r--vcl/source/window/scrwnd.hxx92
-rw-r--r--vcl/source/window/seleng.cxx502
-rw-r--r--vcl/source/window/split.cxx806
-rw-r--r--vcl/source/window/splitwin.cxx3877
-rw-r--r--vcl/source/window/status.cxx1794
-rw-r--r--vcl/source/window/syschild.cxx192
-rw-r--r--vcl/source/window/syswin.cxx1086
-rw-r--r--vcl/source/window/tabdlg.cxx276
-rw-r--r--vcl/source/window/tabpage.cxx216
-rw-r--r--vcl/source/window/taskpanelist.cxx398
-rw-r--r--vcl/source/window/toolbox.cxx6333
-rw-r--r--vcl/source/window/toolbox2.cxx2437
-rw-r--r--vcl/source/window/window.cxx9972
-rw-r--r--vcl/source/window/window2.cxx2065
-rw-r--r--vcl/source/window/window3.cxx82
-rw-r--r--vcl/source/window/winproc.cxx2618
-rw-r--r--vcl/source/window/wrkwin.cxx323
-rw-r--r--vcl/test/canvasbitmaptest.cxx1046
-rwxr-xr-xvcl/test/dndtest.cxx447
-rw-r--r--vcl/test/makefile.mk78
-rw-r--r--vcl/unx/gtk/a11y/TODO49
-rw-r--r--vcl/unx/gtk/a11y/atkaction.cxx278
-rw-r--r--vcl/unx/gtk/a11y/atkbridge.cxx78
-rw-r--r--vcl/unx/gtk/a11y/atkcomponent.cxx382
-rw-r--r--vcl/unx/gtk/a11y/atkeditabletext.cxx202
-rw-r--r--vcl/unx/gtk/a11y/atkfactory.cxx183
-rw-r--r--vcl/unx/gtk/a11y/atkfactory.hxx41
-rw-r--r--vcl/unx/gtk/a11y/atkhypertext.cxx291
-rw-r--r--vcl/unx/gtk/a11y/atkimage.cxx138
-rw-r--r--vcl/unx/gtk/a11y/atklistener.cxx537
-rw-r--r--vcl/unx/gtk/a11y/atklistener.hxx79
-rw-r--r--vcl/unx/gtk/a11y/atkregistry.cxx71
-rw-r--r--vcl/unx/gtk/a11y/atkregistry.hxx40
-rw-r--r--vcl/unx/gtk/a11y/atkselection.cxx195
-rw-r--r--vcl/unx/gtk/a11y/atktable.cxx721
-rw-r--r--vcl/unx/gtk/a11y/atktext.cxx876
-rw-r--r--vcl/unx/gtk/a11y/atktextattributes.cxx1456
-rw-r--r--vcl/unx/gtk/a11y/atktextattributes.hxx54
-rw-r--r--vcl/unx/gtk/a11y/atkutil.cxx802
-rw-r--r--vcl/unx/gtk/a11y/atkutil.hxx37
-rw-r--r--vcl/unx/gtk/a11y/atkvalue.cxx147
-rw-r--r--vcl/unx/gtk/a11y/atkwindow.cxx331
-rw-r--r--vcl/unx/gtk/a11y/atkwindow.hxx38
-rw-r--r--vcl/unx/gtk/a11y/atkwrapper.cxx953
-rw-r--r--vcl/unx/gtk/a11y/atkwrapper.hxx125
-rw-r--r--vcl/unx/gtk/a11y/makefile.mk93
-rw-r--r--vcl/unx/gtk/app/gtkdata.cxx988
-rw-r--r--vcl/unx/gtk/app/gtkinst.cxx352
-rw-r--r--vcl/unx/gtk/app/gtksys.cxx96
-rw-r--r--vcl/unx/gtk/app/makefile.mk76
-rw-r--r--vcl/unx/gtk/gdi/makefile.mk67
-rw-r--r--vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx4133
-rw-r--r--vcl/unx/gtk/window/gtkframe.cxx3810
-rw-r--r--vcl/unx/gtk/window/gtkobject.cxx211
-rw-r--r--vcl/unx/gtk/window/makefile.mk79
-rw-r--r--vcl/unx/headless/makefile.mk66
-rw-r--r--vcl/unx/headless/svpbmp.cxx323
-rw-r--r--vcl/unx/headless/svpbmp.hxx66
-rw-r--r--vcl/unx/headless/svpdummies.cxx116
-rw-r--r--vcl/unx/headless/svpdummies.hxx94
-rw-r--r--vcl/unx/headless/svpelement.cxx291
-rw-r--r--vcl/unx/headless/svpelement.hxx46
-rw-r--r--vcl/unx/headless/svpframe.cxx449
-rw-r--r--vcl/unx/headless/svpframe.hxx126
-rw-r--r--vcl/unx/headless/svpgdi.cxx587
-rw-r--r--vcl/unx/headless/svpgdi.hxx173
-rw-r--r--vcl/unx/headless/svpinst.cxx537
-rw-r--r--vcl/unx/headless/svpinst.hxx200
-rw-r--r--vcl/unx/headless/svpprn.cxx1075
-rw-r--r--vcl/unx/headless/svpprn.hxx120
-rw-r--r--vcl/unx/headless/svppspgraphics.cxx1368
-rw-r--r--vcl/unx/headless/svppspgraphics.hxx193
-rw-r--r--vcl/unx/headless/svptext.cxx501
-rw-r--r--vcl/unx/headless/svpvd.cxx110
-rw-r--r--vcl/unx/headless/svpvd.hxx59
-rw-r--r--vcl/unx/inc/XIM.h137
-rw-r--r--vcl/unx/inc/Xproto.h49
-rw-r--r--vcl/unx/inc/cdeint.hxx44
-rw-r--r--vcl/unx/inc/dtint.hxx78
-rw-r--r--vcl/unx/inc/i18n_cb.hxx95
-rw-r--r--vcl/unx/inc/i18n_ic.hxx100
-rw-r--r--vcl/unx/inc/i18n_im.hxx69
-rw-r--r--vcl/unx/inc/i18n_keysym.hxx71
-rw-r--r--vcl/unx/inc/i18n_status.hxx125
-rw-r--r--vcl/unx/inc/i18n_xkb.hxx115
-rw-r--r--vcl/unx/inc/plugins/gtk/atkbridge.hxx36
-rw-r--r--vcl/unx/inc/plugins/gtk/gtkdata.hxx89
-rw-r--r--vcl/unx/inc/plugins/gtk/gtkframe.hxx407
-rw-r--r--vcl/unx/inc/plugins/gtk/gtkgdi.hxx187
-rw-r--r--vcl/unx/inc/plugins/gtk/gtkinst.hxx105
-rw-r--r--vcl/unx/inc/plugins/gtk/gtkobject.hxx69
-rw-r--r--vcl/unx/inc/plugins/kde/kdedata.hxx110
-rw-r--r--vcl/unx/inc/pspgraphics.h193
-rw-r--r--vcl/unx/inc/salbmp.h237
-rw-r--r--vcl/unx/inc/saldata.hxx132
-rw-r--r--vcl/unx/inc/saldisp.hxx567
-rw-r--r--vcl/unx/inc/salfont.h180
-rw-r--r--vcl/unx/inc/salframe.h288
-rw-r--r--vcl/unx/inc/salgdi.h405
-rw-r--r--vcl/unx/inc/salinst.h131
-rw-r--r--vcl/unx/inc/salmenu.h65
-rw-r--r--vcl/unx/inc/salobj.h103
-rw-r--r--vcl/unx/inc/salprn.h120
-rw-r--r--vcl/unx/inc/salstd.hxx77
-rw-r--r--vcl/unx/inc/salsys.h67
-rw-r--r--vcl/unx/inc/saltimer.h44
-rw-r--r--vcl/unx/inc/salunx.h128
-rw-r--r--vcl/unx/inc/salvd.h101
-rw-r--r--vcl/unx/inc/sm.hxx91
-rw-r--r--vcl/unx/inc/soicon.hxx37
-rw-r--r--vcl/unx/inc/strhelper.hxx41
-rw-r--r--vcl/unx/inc/svsys.h32
-rw-r--r--vcl/unx/inc/svunx.h35
-rw-r--r--vcl/unx/inc/wmadaptor.hxx350
-rw-r--r--vcl/unx/inc/xfont.hxx162
-rw-r--r--vcl/unx/kde/kdedata.cxx274
-rw-r--r--vcl/unx/kde/makefile.mk81
-rw-r--r--vcl/unx/kde/salnativewidgets-kde.cxx2114
-rw-r--r--vcl/unx/kde4/KDEData.cxx54
-rw-r--r--vcl/unx/kde4/KDEData.hxx42
-rw-r--r--vcl/unx/kde4/KDESalDisplay.cxx45
-rw-r--r--vcl/unx/kde4/KDESalDisplay.hxx37
-rw-r--r--vcl/unx/kde4/KDESalFrame.cxx405
-rw-r--r--vcl/unx/kde4/KDESalFrame.hxx58
-rw-r--r--vcl/unx/kde4/KDESalGraphics.cxx905
-rw-r--r--vcl/unx/kde4/KDESalGraphics.hxx113
-rw-r--r--vcl/unx/kde4/KDESalInstance.cxx35
-rw-r--r--vcl/unx/kde4/KDESalInstance.hxx41
-rw-r--r--vcl/unx/kde4/KDEXLib.cxx175
-rw-r--r--vcl/unx/kde4/KDEXLib.hxx48
-rw-r--r--vcl/unx/kde4/VCLKDEApplication.cxx52
-rw-r--r--vcl/unx/kde4/VCLKDEApplication.hxx53
-rw-r--r--vcl/unx/kde4/main.cxx93
-rw-r--r--vcl/unx/kde4/makefile.mk88
-rw-r--r--vcl/unx/source/app/i18n_cb.cxx664
-rw-r--r--vcl/unx/source/app/i18n_ic.cxx786
-rw-r--r--vcl/unx/source/app/i18n_im.cxx628
-rw-r--r--vcl/unx/source/app/i18n_keysym.cxx365
-rw-r--r--vcl/unx/source/app/i18n_status.cxx733
-rw-r--r--vcl/unx/source/app/i18n_wrp.cxx259
-rw-r--r--vcl/unx/source/app/i18n_xkb.cxx163
-rw-r--r--vcl/unx/source/app/keysymnames.cxx688
-rw-r--r--vcl/unx/source/app/makefile.mk110
-rw-r--r--vcl/unx/source/app/randrwrapper.cxx360
-rw-r--r--vcl/unx/source/app/saldata.cxx871
-rw-r--r--vcl/unx/source/app/saldisp.cxx3442
-rw-r--r--vcl/unx/source/app/salinst.cxx433
-rw-r--r--vcl/unx/source/app/salsys.cxx225
-rw-r--r--vcl/unx/source/app/saltimer.cxx96
-rw-r--r--vcl/unx/source/app/sm.cxx800
-rw-r--r--vcl/unx/source/app/soicon.cxx115
-rw-r--r--vcl/unx/source/app/wmadaptor.cxx2513
-rw-r--r--vcl/unx/source/desktopdetect/desktopdetector.cxx343
-rw-r--r--vcl/unx/source/desktopdetect/makefile.mk57
-rw-r--r--vcl/unx/source/dtrans/X11_clipboard.cxx293
-rw-r--r--vcl/unx/source/dtrans/X11_clipboard.hxx151
-rw-r--r--vcl/unx/source/dtrans/X11_dndcontext.cxx138
-rw-r--r--vcl/unx/source/dtrans/X11_dndcontext.hxx104
-rw-r--r--vcl/unx/source/dtrans/X11_droptarget.cxx228
-rw-r--r--vcl/unx/source/dtrans/X11_selection.cxx4205
-rw-r--r--vcl/unx/source/dtrans/X11_selection.hxx531
-rw-r--r--vcl/unx/source/dtrans/X11_service.cxx135
-rw-r--r--vcl/unx/source/dtrans/X11_transferable.cxx134
-rw-r--r--vcl/unx/source/dtrans/X11_transferable.hxx72
-rw-r--r--vcl/unx/source/dtrans/bmp.cxx739
-rw-r--r--vcl/unx/source/dtrans/bmp.hxx105
-rw-r--r--vcl/unx/source/dtrans/config.cxx148
-rw-r--r--vcl/unx/source/dtrans/copydata_curs.h42
-rw-r--r--vcl/unx/source/dtrans/copydata_mask.h42
-rw-r--r--vcl/unx/source/dtrans/linkdata_curs.h42
-rw-r--r--vcl/unx/source/dtrans/linkdata_mask.h42
-rw-r--r--vcl/unx/source/dtrans/makefile.mk68
-rw-r--r--vcl/unx/source/dtrans/movedata_curs.h42
-rw-r--r--vcl/unx/source/dtrans/movedata_mask.h42
-rw-r--r--vcl/unx/source/dtrans/nodrop_curs.h42
-rw-r--r--vcl/unx/source/dtrans/nodrop_mask.h42
-rw-r--r--vcl/unx/source/fontmanager/adobeenc.tab1087
-rwxr-xr-xvcl/unx/source/fontmanager/afm_hash.cpp245
-rwxr-xr-xvcl/unx/source/fontmanager/afm_keyword_list58
-rw-r--r--vcl/unx/source/fontmanager/fontcache.cxx811
-rw-r--r--vcl/unx/source/fontmanager/fontconfig.cxx1254
-rw-r--r--vcl/unx/source/fontmanager/fontmanager.cxx4099
-rw-r--r--vcl/unx/source/fontmanager/helper.cxx404
-rw-r--r--vcl/unx/source/fontmanager/makefile.mk72
-rw-r--r--vcl/unx/source/fontmanager/parseAFM.cxx1577
-rw-r--r--vcl/unx/source/fontmanager/parseAFM.hxx334
-rw-r--r--vcl/unx/source/gdi/cdeint.cxx241
-rw-r--r--vcl/unx/source/gdi/dtint.cxx139
-rw-r--r--vcl/unx/source/gdi/dtsetenum.hxx146
-rw-r--r--vcl/unx/source/gdi/gcach_xpeer.cxx682
-rw-r--r--vcl/unx/source/gdi/gcach_xpeer.hxx94
-rw-r--r--vcl/unx/source/gdi/makefile.mk111
-rw-r--r--vcl/unx/source/gdi/pspgraphics.cxx1505
-rw-r--r--vcl/unx/source/gdi/salbmp.cxx1093
-rw-r--r--vcl/unx/source/gdi/salcvt.cxx341
-rw-r--r--vcl/unx/source/gdi/salcvt.hxx92
-rw-r--r--vcl/unx/source/gdi/salgdi.cxx1289
-rw-r--r--vcl/unx/source/gdi/salgdi2.cxx1149
-rw-r--r--vcl/unx/source/gdi/salgdi3.cxx2264
-rw-r--r--vcl/unx/source/gdi/salprnpsp.cxx1168
-rw-r--r--vcl/unx/source/gdi/salvd.cxx272
-rw-r--r--vcl/unx/source/gdi/xfont.cxx780
-rw-r--r--vcl/unx/source/gdi/xlfd_attr.cxx686
-rw-r--r--vcl/unx/source/gdi/xlfd_attr.hxx228
-rw-r--r--vcl/unx/source/gdi/xlfd_extd.cxx1001
-rw-r--r--vcl/unx/source/gdi/xlfd_extd.hxx272
-rw-r--r--vcl/unx/source/gdi/xlfd_smpl.cxx268
-rw-r--r--vcl/unx/source/gdi/xlfd_smpl.hxx92
-rw-r--r--vcl/unx/source/gdi/xrender_peer.cxx246
-rw-r--r--vcl/unx/source/gdi/xrender_peer.hxx387
-rw-r--r--vcl/unx/source/inc/airbrush_curs.h40
-rw-r--r--vcl/unx/source/inc/airbrush_mask.h40
-rw-r--r--vcl/unx/source/inc/ase_curs.h40
-rw-r--r--vcl/unx/source/inc/ase_mask.h40
-rw-r--r--vcl/unx/source/inc/asn_curs.h40
-rw-r--r--vcl/unx/source/inc/asn_mask.h40
-rw-r--r--vcl/unx/source/inc/asne_curs.h40
-rw-r--r--vcl/unx/source/inc/asne_mask.h40
-rw-r--r--vcl/unx/source/inc/asns_curs.h40
-rw-r--r--vcl/unx/source/inc/asns_mask.h40
-rw-r--r--vcl/unx/source/inc/asnswe_curs.h40
-rw-r--r--vcl/unx/source/inc/asnswe_mask.h40
-rw-r--r--vcl/unx/source/inc/asnw_curs.h40
-rw-r--r--vcl/unx/source/inc/asnw_mask.h40
-rw-r--r--vcl/unx/source/inc/ass_curs.h40
-rw-r--r--vcl/unx/source/inc/ass_mask.h40
-rw-r--r--vcl/unx/source/inc/asse_curs.h40
-rw-r--r--vcl/unx/source/inc/asse_mask.h40
-rw-r--r--vcl/unx/source/inc/assw_curs.h40
-rw-r--r--vcl/unx/source/inc/assw_mask.h40
-rw-r--r--vcl/unx/source/inc/asw_curs.h40
-rw-r--r--vcl/unx/source/inc/asw_mask.h40
-rw-r--r--vcl/unx/source/inc/aswe_curs.h40
-rw-r--r--vcl/unx/source/inc/aswe_mask.h40
-rw-r--r--vcl/unx/source/inc/chain_curs.h40
-rw-r--r--vcl/unx/source/inc/chain_mask.h38
-rw-r--r--vcl/unx/source/inc/chainnot_curs.h40
-rw-r--r--vcl/unx/source/inc/chainnot_mask.h38
-rw-r--r--vcl/unx/source/inc/chart_curs.h40
-rw-r--r--vcl/unx/source/inc/chart_mask.h40
-rw-r--r--vcl/unx/source/inc/copydata_curs.h42
-rw-r--r--vcl/unx/source/inc/copydata_mask.h42
-rw-r--r--vcl/unx/source/inc/copydlnk_curs.h42
-rw-r--r--vcl/unx/source/inc/copydlnk_mask.h42
-rw-r--r--vcl/unx/source/inc/copyfile_curs.h42
-rw-r--r--vcl/unx/source/inc/copyfile_mask.h42
-rw-r--r--vcl/unx/source/inc/copyfiles_curs.h42
-rw-r--r--vcl/unx/source/inc/copyfiles_mask.h42
-rw-r--r--vcl/unx/source/inc/copyflnk_curs.h42
-rw-r--r--vcl/unx/source/inc/copyflnk_mask.h42
-rw-r--r--vcl/unx/source/inc/crook_curs.h42
-rw-r--r--vcl/unx/source/inc/crook_mask.h40
-rw-r--r--vcl/unx/source/inc/crop_curs.h42
-rw-r--r--vcl/unx/source/inc/crop_mask.h40
-rw-r--r--vcl/unx/source/inc/detective_curs.h40
-rw-r--r--vcl/unx/source/inc/detective_mask.h40
-rw-r--r--vcl/unx/source/inc/drawarc_curs.h42
-rw-r--r--vcl/unx/source/inc/drawarc_mask.h40
-rw-r--r--vcl/unx/source/inc/drawbezier_curs.h42
-rw-r--r--vcl/unx/source/inc/drawbezier_mask.h40
-rw-r--r--vcl/unx/source/inc/drawcaption_curs.h42
-rw-r--r--vcl/unx/source/inc/drawcaption_mask.h40
-rw-r--r--vcl/unx/source/inc/drawcirclecut_curs.h42
-rw-r--r--vcl/unx/source/inc/drawcirclecut_mask.h40
-rw-r--r--vcl/unx/source/inc/drawconnect_curs.h42
-rw-r--r--vcl/unx/source/inc/drawconnect_mask.h40
-rw-r--r--vcl/unx/source/inc/drawcrook_curs.h42
-rw-r--r--vcl/unx/source/inc/drawcrook_mask.h40
-rw-r--r--vcl/unx/source/inc/drawcrop_curs.h42
-rw-r--r--vcl/unx/source/inc/drawcrop_mask.h40
-rw-r--r--vcl/unx/source/inc/drawellipse_curs.h42
-rw-r--r--vcl/unx/source/inc/drawellipse_mask.h40
-rw-r--r--vcl/unx/source/inc/drawfreehand_curs.h42
-rw-r--r--vcl/unx/source/inc/drawfreehand_mask.h40
-rw-r--r--vcl/unx/source/inc/drawline_curs.h42
-rw-r--r--vcl/unx/source/inc/drawline_mask.h40
-rw-r--r--vcl/unx/source/inc/drawmirror_curs.h42
-rw-r--r--vcl/unx/source/inc/drawmirror_mask.h40
-rw-r--r--vcl/unx/source/inc/drawpie_curs.h42
-rw-r--r--vcl/unx/source/inc/drawpie_mask.h40
-rw-r--r--vcl/unx/source/inc/drawpolygon_curs.h42
-rw-r--r--vcl/unx/source/inc/drawpolygon_mask.h40
-rw-r--r--vcl/unx/source/inc/drawrect_curs.h42
-rw-r--r--vcl/unx/source/inc/drawrect_mask.h40
-rw-r--r--vcl/unx/source/inc/drawtext_curs.h42
-rw-r--r--vcl/unx/source/inc/drawtext_mask.h40
-rw-r--r--vcl/unx/source/inc/fill_curs.h40
-rw-r--r--vcl/unx/source/inc/fill_mask.h40
-rw-r--r--vcl/unx/source/inc/hshear_curs.h42
-rw-r--r--vcl/unx/source/inc/hshear_mask.h40
-rw-r--r--vcl/unx/source/inc/invert50.h65
-rw-r--r--vcl/unx/source/inc/linkdata_curs.h42
-rw-r--r--vcl/unx/source/inc/linkdata_mask.h42
-rw-r--r--vcl/unx/source/inc/linkfile_curs.h42
-rw-r--r--vcl/unx/source/inc/linkfile_mask.h42
-rw-r--r--vcl/unx/source/inc/magnify_curs.h40
-rw-r--r--vcl/unx/source/inc/magnify_mask.h40
-rw-r--r--vcl/unx/source/inc/mirror_curs.h42
-rw-r--r--vcl/unx/source/inc/mirror_mask.h40
-rw-r--r--vcl/unx/source/inc/movebezierweight_curs.h42
-rw-r--r--vcl/unx/source/inc/movebezierweight_mask.h40
-rw-r--r--vcl/unx/source/inc/movedata_curs.h42
-rw-r--r--vcl/unx/source/inc/movedata_mask.h42
-rw-r--r--vcl/unx/source/inc/movedlnk_curs.h42
-rw-r--r--vcl/unx/source/inc/movedlnk_mask.h42
-rw-r--r--vcl/unx/source/inc/movefile_curs.h42
-rw-r--r--vcl/unx/source/inc/movefile_mask.h42
-rw-r--r--vcl/unx/source/inc/movefiles_curs.h42
-rw-r--r--vcl/unx/source/inc/movefiles_mask.h42
-rw-r--r--vcl/unx/source/inc/moveflnk_curs.h42
-rw-r--r--vcl/unx/source/inc/moveflnk_mask.h42
-rw-r--r--vcl/unx/source/inc/movepoint_curs.h42
-rw-r--r--vcl/unx/source/inc/movepoint_mask.h40
-rw-r--r--vcl/unx/source/inc/nodrop_curs.h42
-rw-r--r--vcl/unx/source/inc/nodrop_mask.h42
-rw-r--r--vcl/unx/source/inc/null_curs.h31
-rw-r--r--vcl/unx/source/inc/null_mask.h29
-rw-r--r--vcl/unx/source/inc/paintbrush_curs.h8
-rw-r--r--vcl/unx/source/inc/paintbrush_mask.h7
-rw-r--r--vcl/unx/source/inc/pivotcol_curs.h42
-rw-r--r--vcl/unx/source/inc/pivotcol_mask.h42
-rw-r--r--vcl/unx/source/inc/pivotdel_curs.h42
-rw-r--r--vcl/unx/source/inc/pivotdel_mask.h42
-rw-r--r--vcl/unx/source/inc/pivotfld_curs.h42
-rw-r--r--vcl/unx/source/inc/pivotfld_mask.h42
-rw-r--r--vcl/unx/source/inc/pivotrow_curs.h42
-rw-r--r--vcl/unx/source/inc/pivotrow_mask.h42
-rw-r--r--vcl/unx/source/inc/rotate_curs.h42
-rw-r--r--vcl/unx/source/inc/rotate_mask.h40
-rw-r--r--vcl/unx/source/inc/salcursors.h162
-rw-r--r--vcl/unx/source/inc/tblsele_curs.h8
-rw-r--r--vcl/unx/source/inc/tblsele_mask.h7
-rw-r--r--vcl/unx/source/inc/tblsels_curs.h9
-rw-r--r--vcl/unx/source/inc/tblsels_mask.h7
-rw-r--r--vcl/unx/source/inc/tblselse_curs.h8
-rw-r--r--vcl/unx/source/inc/tblselse_mask.h7
-rw-r--r--vcl/unx/source/inc/tblselsw_curs.h8
-rw-r--r--vcl/unx/source/inc/tblselsw_mask.h7
-rw-r--r--vcl/unx/source/inc/tblselw_curs.h8
-rw-r--r--vcl/unx/source/inc/tblselw_mask.h6
-rw-r--r--vcl/unx/source/inc/timemove_curs.h40
-rw-r--r--vcl/unx/source/inc/timemove_mask.h40
-rw-r--r--vcl/unx/source/inc/timesize_curs.h40
-rw-r--r--vcl/unx/source/inc/timesize_mask.h40
-rw-r--r--vcl/unx/source/inc/vertcurs_curs.h8
-rw-r--r--vcl/unx/source/inc/vertcurs_mask.h8
-rw-r--r--vcl/unx/source/inc/vshear_curs.h42
-rw-r--r--vcl/unx/source/inc/vshear_mask.h40
-rw-r--r--vcl/unx/source/plugadapt/makefile.mk59
-rw-r--r--vcl/unx/source/plugadapt/salplug.cxx300
-rw-r--r--vcl/unx/source/printer/cupsmgr.cxx1141
-rw-r--r--vcl/unx/source/printer/jobdata.cxx226
-rw-r--r--vcl/unx/source/printer/makefile.mk70
-rw-r--r--vcl/unx/source/printer/ppdparser.cxx2164
-rw-r--r--vcl/unx/source/printer/printerinfomanager.cxx1404
-rw-r--r--vcl/unx/source/printergfx/bitmap_gfx.cxx732
-rw-r--r--vcl/unx/source/printergfx/common_gfx.cxx1284
-rw-r--r--vcl/unx/source/printergfx/glyphset.cxx942
-rw-r--r--vcl/unx/source/printergfx/glyphset.hxx135
-rw-r--r--vcl/unx/source/printergfx/makefile.mk65
-rw-r--r--vcl/unx/source/printergfx/printerjob.cxx1199
-rw-r--r--vcl/unx/source/printergfx/psheader.ps368
-rw-r--r--vcl/unx/source/printergfx/psputil.cxx268
-rw-r--r--vcl/unx/source/printergfx/psputil.hxx78
-rw-r--r--vcl/unx/source/printergfx/text_gfx.cxx862
-rw-r--r--vcl/unx/source/window/FWS.cxx280
-rw-r--r--vcl/unx/source/window/FWS.hxx64
-rw-r--r--vcl/unx/source/window/makefile.mk59
-rw-r--r--vcl/unx/source/window/salframe.cxx4398
-rw-r--r--vcl/unx/source/window/salmenu.cxx132
-rw-r--r--vcl/unx/source/window/salobj.cxx561
-rw-r--r--vcl/util/hidother.src31
-rw-r--r--vcl/util/linksvp/makefile.mk65
-rw-r--r--vcl/util/makefile.mk460
-rw-r--r--vcl/util/makefile.pmk34
-rw-r--r--vcl/util/makefile2.pmk41
-rw-r--r--vcl/util/target.pmk44
-rw-r--r--vcl/win/inc/salbmp.h88
-rw-r--r--vcl/win/inc/saldata.hxx372
-rw-r--r--vcl/win/inc/salframe.h150
-rwxr-xr-xvcl/win/inc/salgdi.h403
-rw-r--r--vcl/win/inc/salids.hrc120
-rw-r--r--vcl/win/inc/salinst.h103
-rw-r--r--vcl/win/inc/salmenu.h78
-rw-r--r--vcl/win/inc/salnativewidgets.h54
-rw-r--r--vcl/win/inc/salobj.h69
-rw-r--r--vcl/win/inc/salprn.h130
-rw-r--r--vcl/win/inc/salsys.h92
-rw-r--r--vcl/win/inc/saltimer.h44
-rw-r--r--vcl/win/inc/salvd.h61
-rw-r--r--vcl/win/inc/svsys.h33
-rw-r--r--vcl/win/inc/wincomp.hxx264
-rw-r--r--vcl/win/source/app/MAKEFILE.MK53
-rw-r--r--vcl/win/source/app/saldata.cxx190
-rw-r--r--vcl/win/source/app/salinfo.cxx301
-rw-r--r--vcl/win/source/app/salinst.cxx1173
-rw-r--r--vcl/win/source/app/salshl.cxx164
-rw-r--r--vcl/win/source/app/saltimer.cxx154
-rw-r--r--vcl/win/source/gdi/MAKEFILE.MK69
-rw-r--r--vcl/win/source/gdi/salbmp.cxx632
-rw-r--r--vcl/win/source/gdi/salgdi.cxx1798
-rw-r--r--vcl/win/source/gdi/salgdi2.cxx821
-rw-r--r--vcl/win/source/gdi/salgdi3.cxx3229
-rw-r--r--vcl/win/source/gdi/salgdi_gdiplus.cxx265
-rwxr-xr-xvcl/win/source/gdi/salnativewidgets-luna.cxx1290
-rw-r--r--vcl/win/source/gdi/salprn.cxx2364
-rw-r--r--vcl/win/source/gdi/salvd.cxx256
-rwxr-xr-xvcl/win/source/gdi/winlayout.cxx3210
-rw-r--r--vcl/win/source/gdi/wntgdi.cxx67
-rw-r--r--vcl/win/source/src/50.bmpbin0 -> 94 bytes
-rw-r--r--vcl/win/source/src/50.pngbin0 -> 125 bytes
-rw-r--r--vcl/win/source/src/MAKEFILE.MK130
-rw-r--r--vcl/win/source/src/airbrush.curbin0 -> 326 bytes
-rwxr-xr-xvcl/win/source/src/ase.curbin0 -> 326 bytes
-rwxr-xr-xvcl/win/source/src/asn.curbin0 -> 326 bytes
-rwxr-xr-xvcl/win/source/src/asne.curbin0 -> 326 bytes
-rwxr-xr-xvcl/win/source/src/asns.curbin0 -> 326 bytes
-rwxr-xr-xvcl/win/source/src/asnswe.curbin0 -> 326 bytes
-rwxr-xr-xvcl/win/source/src/asnw.curbin0 -> 326 bytes
-rwxr-xr-xvcl/win/source/src/ass.curbin0 -> 326 bytes
-rwxr-xr-xvcl/win/source/src/asse.curbin0 -> 326 bytes
-rwxr-xr-xvcl/win/source/src/assw.curbin0 -> 326 bytes
-rwxr-xr-xvcl/win/source/src/asw.curbin0 -> 326 bytes
-rwxr-xr-xvcl/win/source/src/aswe.curbin0 -> 326 bytes
-rwxr-xr-xvcl/win/source/src/chain.curbin0 -> 326 bytes
-rwxr-xr-xvcl/win/source/src/chainnot.curbin0 -> 326 bytes
-rw-r--r--vcl/win/source/src/chart.curbin0 -> 326 bytes
-rw-r--r--vcl/win/source/src/copydata.curbin0 -> 326 bytes
-rw-r--r--vcl/win/source/src/copydlnk.curbin0 -> 326 bytes
-rw-r--r--vcl/win/source/src/copyf.curbin0 -> 326 bytes
-rw-r--r--vcl/win/source/src/copyf2.curbin0 -> 326 bytes
-rw-r--r--vcl/win/source/src/copyflnk.curbin0 -> 326 bytes
-rw-r--r--vcl/win/source/src/crook.curbin0 -> 326 bytes
-rw-r--r--vcl/win/source/src/crop.curbin0 -> 326 bytes
-rw-r--r--vcl/win/source/src/cross.curbin0 -> 326 bytes
-rw-r--r--vcl/win/source/src/darc.curbin0 -> 326 bytes
-rw-r--r--vcl/win/source/src/dbezier.curbin0 -> 326 bytes
-rw-r--r--vcl/win/source/src/dcapt.curbin0 -> 326 bytes
-rw-r--r--vcl/win/source/src/dcirccut.curbin0 -> 326 bytes
-rw-r--r--vcl/win/source/src/dconnect.curbin0 -> 326 bytes
-rw-r--r--vcl/win/source/src/dellipse.curbin0 -> 326 bytes
-rw-r--r--vcl/win/source/src/detectiv.curbin0 -> 326 bytes
-rw-r--r--vcl/win/source/src/dfree.curbin0 -> 326 bytes
-rw-r--r--vcl/win/source/src/dline.curbin0 -> 326 bytes
-rw-r--r--vcl/win/source/src/dpie.curbin0 -> 326 bytes
-rw-r--r--vcl/win/source/src/dpolygon.curbin0 -> 326 bytes
-rw-r--r--vcl/win/source/src/drect.curbin0 -> 326 bytes
-rw-r--r--vcl/win/source/src/dtext.curbin0 -> 326 bytes
-rw-r--r--vcl/win/source/src/fill.curbin0 -> 326 bytes
-rw-r--r--vcl/win/source/src/hand.curbin0 -> 326 bytes
-rw-r--r--vcl/win/source/src/help.curbin0 -> 326 bytes
-rw-r--r--vcl/win/source/src/hshear.curbin0 -> 326 bytes
-rw-r--r--vcl/win/source/src/hsize.curbin0 -> 326 bytes
-rw-r--r--vcl/win/source/src/hsizebar.curbin0 -> 326 bytes
-rw-r--r--vcl/win/source/src/hsplit.curbin0 -> 326 bytes
-rw-r--r--vcl/win/source/src/linkdata.curbin0 -> 326 bytes
-rw-r--r--vcl/win/source/src/linkf.curbin0 -> 326 bytes
-rw-r--r--vcl/win/source/src/magnify.curbin0 -> 326 bytes
-rw-r--r--vcl/win/source/src/mirror.curbin0 -> 326 bytes
-rw-r--r--vcl/win/source/src/move.curbin0 -> 326 bytes
-rw-r--r--vcl/win/source/src/movebw.curbin0 -> 326 bytes
-rw-r--r--vcl/win/source/src/movedata.curbin0 -> 326 bytes
-rw-r--r--vcl/win/source/src/movedlnk.curbin0 -> 326 bytes
-rw-r--r--vcl/win/source/src/movef.curbin0 -> 326 bytes
-rw-r--r--vcl/win/source/src/movef2.curbin0 -> 326 bytes
-rw-r--r--vcl/win/source/src/moveflnk.curbin0 -> 326 bytes
-rw-r--r--vcl/win/source/src/movept.curbin0 -> 326 bytes
-rw-r--r--vcl/win/source/src/neswsize.curbin0 -> 326 bytes
-rw-r--r--vcl/win/source/src/notallow.curbin0 -> 326 bytes
-rw-r--r--vcl/win/source/src/nullptr.curbin0 -> 326 bytes
-rw-r--r--vcl/win/source/src/nwsesize.curbin0 -> 326 bytes
-rw-r--r--vcl/win/source/src/pen.curbin0 -> 326 bytes
-rw-r--r--vcl/win/source/src/pivotcol.curbin0 -> 326 bytes
-rw-r--r--vcl/win/source/src/pivotdel.curbin0 -> 326 bytes
-rw-r--r--vcl/win/source/src/pivotfld.curbin0 -> 326 bytes
-rw-r--r--vcl/win/source/src/pivotrow.curbin0 -> 326 bytes
-rw-r--r--vcl/win/source/src/pntbrsh.curbin0 -> 326 bytes
-rw-r--r--vcl/win/source/src/refhand.curbin0 -> 326 bytes
-rw-r--r--vcl/win/source/src/rotate.curbin0 -> 326 bytes
-rw-r--r--vcl/win/source/src/salsrc.rc121
-rw-r--r--vcl/win/source/src/sd.icobin0 -> 3310 bytes
-rw-r--r--vcl/win/source/src/tblsele.curbin0 -> 326 bytes
-rw-r--r--vcl/win/source/src/tblsels.curbin0 -> 326 bytes
-rw-r--r--vcl/win/source/src/tblselse.curbin0 -> 326 bytes
-rw-r--r--vcl/win/source/src/tblselsw.curbin0 -> 326 bytes
-rw-r--r--vcl/win/source/src/tblselw.curbin0 -> 326 bytes
-rwxr-xr-xvcl/win/source/src/timemove.curbin0 -> 326 bytes
-rwxr-xr-xvcl/win/source/src/timesize.curbin0 -> 326 bytes
-rw-r--r--vcl/win/source/src/vshear.curbin0 -> 326 bytes
-rw-r--r--vcl/win/source/src/vsize.curbin0 -> 326 bytes
-rw-r--r--vcl/win/source/src/vsizebar.curbin0 -> 326 bytes
-rw-r--r--vcl/win/source/src/vsplit.curbin0 -> 326 bytes
-rw-r--r--vcl/win/source/src/vtext.curbin0 -> 326 bytes
-rw-r--r--vcl/win/source/window/MAKEFILE.MK60
-rw-r--r--vcl/win/source/window/salframe.cxx6440
-rw-r--r--vcl/win/source/window/salmenu.cxx410
-rw-r--r--vcl/win/source/window/salobj.cxx838
-rw-r--r--vcl/workben/makefile.mk151
-rwxr-xr-xvcl/workben/outdevgrind.cxx974
-rw-r--r--vcl/workben/svdem.cxx148
-rw-r--r--vcl/workben/svpclient.cxx346
-rw-r--r--vcl/workben/svptest.cxx379
-rw-r--r--vcl/workben/vcldemo.cxx187
-rw-r--r--vigra/makefile.mk66
-rw-r--r--vigra/prj/build.lst3
-rw-r--r--vigra/prj/d.lst3
-rw-r--r--vigra/vigra1.4.0.patch1713
-rw-r--r--vos/docu/.html138
-rw-r--r--vos/inc/vos/conditn.hxx138
-rw-r--r--vos/inc/vos/connectn.hxx116
-rw-r--r--vos/inc/vos/diagnose.hxx56
-rw-r--r--vos/inc/vos/execabl.hxx152
-rw-r--r--vos/inc/vos/istream.hxx73
-rw-r--r--vos/inc/vos/macros.hxx159
-rw-r--r--vos/inc/vos/module.hxx79
-rw-r--r--vos/inc/vos/mutex.hxx183
-rw-r--r--vos/inc/vos/object.hxx193
-rw-r--r--vos/inc/vos/pipe.hxx259
-rw-r--r--vos/inc/vos/process.hxx319
-rw-r--r--vos/inc/vos/ref.hxx183
-rw-r--r--vos/inc/vos/ref.inl192
-rw-r--r--vos/inc/vos/refernce.hxx109
-rw-r--r--vos/inc/vos/refobj.hxx89
-rw-r--r--vos/inc/vos/refobj.inl86
-rw-r--r--vos/inc/vos/runnable.hxx67
-rw-r--r--vos/inc/vos/security.hxx121
-rw-r--r--vos/inc/vos/signal.hxx98
-rw-r--r--vos/inc/vos/socket.hxx1130
-rw-r--r--vos/inc/vos/stream.hxx285
-rw-r--r--vos/inc/vos/thread.hxx235
-rw-r--r--vos/inc/vos/timer.hxx200
-rw-r--r--vos/inc/vos/types.hxx40
-rw-r--r--vos/inc/vos/xception.hxx79
-rw-r--r--vos/prj/build.lst6
-rw-r--r--vos/prj/d.lst15
-rw-r--r--vos/source/conditn.cxx76
-rw-r--r--vos/source/dllentry.cxx62
-rw-r--r--vos/source/makefile.mk79
-rw-r--r--vos/source/module.cxx87
-rw-r--r--vos/source/mutex.cxx72
-rw-r--r--vos/source/object.cxx165
-rw-r--r--vos/source/pipe.cxx416
-rw-r--r--vos/source/process.cxx525
-rw-r--r--vos/source/refernce.cxx66
-rw-r--r--vos/source/security.cxx116
-rw-r--r--vos/source/signal.cxx64
-rw-r--r--vos/source/socket.cxx1723
-rw-r--r--vos/source/stream.cxx115
-rw-r--r--vos/source/thread.cxx240
-rw-r--r--vos/source/timer.cxx501
-rw-r--r--vos/source/xception.cxx43
-rw-r--r--vos/util/libvos1C50.so.mapfile274
-rw-r--r--vos/util/makefile.mk85
-rw-r--r--vos/version.mk40
-rw-r--r--writerfilter/documentation/AddingTable.cxx56
-rw-r--r--writerfilter/documentation/KnownIssues.txt9
-rw-r--r--writerfilter/documentation/TODO13
-rw-r--r--writerfilter/documentation/doxygen/Doxyfile1237
-rw-r--r--writerfilter/documentation/doxygen/images/doctok.pngbin0 -> 7291 bytes
-rw-r--r--writerfilter/documentation/doxygen/images/ooxmlimportchain.pngbin0 -> 22605 bytes
-rw-r--r--writerfilter/documentation/sprms.txt10
-rw-r--r--writerfilter/documentation/tablesInDoc.txt135
-rw-r--r--writerfilter/inc/WriterFilterDllApi.hxx40
-rw-r--r--writerfilter/inc/dmapper/DomainMapper.hxx154
-rw-r--r--writerfilter/inc/doctok/WW8Document.hxx448
-rw-r--r--writerfilter/inc/ooxml/OOXMLDocument.hxx279
-rw-r--r--writerfilter/inc/resourcemodel/OutputWithDepth.hxx130
-rw-r--r--writerfilter/inc/resourcemodel/Protocol.hxx102
-rw-r--r--writerfilter/inc/resourcemodel/QNameToString.hxx88
-rw-r--r--writerfilter/inc/resourcemodel/ResourceModelHelper.hxx40
-rw-r--r--writerfilter/inc/resourcemodel/SubSequence.hxx351
-rw-r--r--writerfilter/inc/resourcemodel/TableData.hxx426
-rw-r--r--writerfilter/inc/resourcemodel/TableManager.hxx1099
-rw-r--r--writerfilter/inc/resourcemodel/TagLogger.hxx159
-rw-r--r--writerfilter/inc/resourcemodel/WW8ResourceModel.hxx401
-rw-r--r--writerfilter/inc/resourcemodel/exceptions.hxx60
-rw-r--r--writerfilter/inc/resourcemodel/util.hxx50
-rw-r--r--writerfilter/inc/rtftok/RTFInputSource.hxx42
-rw-r--r--writerfilter/inc/rtftok/RTFParseException.hxx42
-rw-r--r--writerfilter/inc/rtftok/RTFScanner.hxx65
-rw-r--r--writerfilter/inc/rtftok/RTFScannerHandler.hxx50
-rw-r--r--writerfilter/inc/writerfilter.mk29
-rw-r--r--writerfilter/prj/build.lst11
-rw-r--r--writerfilter/prj/d.lst7
-rw-r--r--writerfilter/qa/complex/ooxml/LoadDocuments.java51
-rw-r--r--writerfilter/qa/complex/ooxml/makefile.mk90
-rw-r--r--writerfilter/qa/cppunittests/doctok/doctok.job1
-rw-r--r--writerfilter/qa/cppunittests/doctok/export.map7
-rw-r--r--writerfilter/qa/cppunittests/doctok/makefile.mk73
-rw-r--r--writerfilter/qa/cppunittests/doctok/testdoctok.cxx228
-rw-r--r--writerfilter/qa/cppunittests/odiapi/ExternalViewLogger.cxx203
-rw-r--r--writerfilter/qa/cppunittests/odiapi/ExternalViewLogger.hxx90
-rw-r--r--writerfilter/qa/cppunittests/odiapi/FileLoggerImpl.cxx80
-rw-r--r--writerfilter/qa/cppunittests/odiapi/FileLoggerImpl.hxx57
-rw-r--r--writerfilter/qa/cppunittests/odiapi/export.exp1
-rw-r--r--writerfilter/qa/cppunittests/odiapi/export.map34
-rw-r--r--writerfilter/qa/cppunittests/odiapi/makefile.mk76
-rw-r--r--writerfilter/qa/cppunittests/odiapi/testCore.cxx172
-rw-r--r--writerfilter/qa/cppunittests/odiapi/testProperty.cxx682
-rw-r--r--writerfilter/qa/cppunittests/qname/export.map34
-rw-r--r--writerfilter/qa/cppunittests/qname/makefile.mk78
-rw-r--r--writerfilter/qa/cppunittests/qname/testQName.cxx7535
-rw-r--r--writerfilter/qa/cppunittests/sl/export.map34
-rw-r--r--writerfilter/qa/cppunittests/sl/helloworld.odt.flat.xml12
-rw-r--r--writerfilter/qa/cppunittests/sl/makefile.mk75
-rw-r--r--writerfilter/qa/cppunittests/sl/testOD_SL.cxx118
-rw-r--r--writerfilter/qa/cppunittests/xxml/export.map34
-rw-r--r--writerfilter/qa/cppunittests/xxml/makefile.mk77
-rw-r--r--writerfilter/qa/cppunittests/xxml/test.xml2
-rw-r--r--writerfilter/qa/cppunittests/xxml/testXXML.cxx184
-rw-r--r--writerfilter/qa/documents/Bookmark1.docbin0 -> 24576 bytes
-rw-r--r--writerfilter/qa/documents/Bookmark1.docxbin0 -> 10729 bytes
-rw-r--r--writerfilter/qa/documents/CellAlignment.docbin0 -> 26624 bytes
-rw-r--r--writerfilter/qa/documents/Footnote.docbin0 -> 24064 bytes
-rw-r--r--writerfilter/qa/documents/Footnote.docxbin0 -> 11742 bytes
-rw-r--r--writerfilter/qa/documents/HeaderFooter.docbin0 -> 23040 bytes
-rw-r--r--writerfilter/qa/documents/HeaderFooter.docxbin0 -> 12913 bytes
-rw-r--r--writerfilter/qa/documents/IndentedTable.docbin0 -> 27136 bytes
-rw-r--r--writerfilter/qa/documents/IndentedTable1.docxbin0 -> 10667 bytes
-rw-r--r--writerfilter/qa/documents/MergedTable.docbin0 -> 24576 bytes
-rw-r--r--writerfilter/qa/documents/MergedTable.docxbin0 -> 10530 bytes
-rw-r--r--writerfilter/qa/documents/MergedTable_3_3.docbin0 -> 24576 bytes
-rw-r--r--writerfilter/qa/documents/MergedTable_3_3.docxbin0 -> 10431 bytes
-rw-r--r--writerfilter/qa/documents/MultiMergedTable.docxbin0 -> 10641 bytes
-rw-r--r--writerfilter/qa/documents/MultiWrapping1.docxbin0 -> 21123 bytes
-rw-r--r--writerfilter/qa/documents/Paragraph with footnote.docbin0 -> 24064 bytes
-rw-r--r--writerfilter/qa/documents/Paragraph with footnote.docxbin0 -> 13217 bytes
-rw-r--r--writerfilter/qa/documents/Picture1.docxbin0 -> 82050 bytes
-rw-r--r--writerfilter/qa/documents/RedlineTest.docxbin0 -> 10322 bytes
-rw-r--r--writerfilter/qa/documents/RowHeight.docbin0 -> 27648 bytes
-rw-r--r--writerfilter/qa/documents/RowHeight.docxbin0 -> 10504 bytes
-rw-r--r--writerfilter/qa/documents/StandardFontAlbertus.docbin0 -> 24064 bytes
-rw-r--r--writerfilter/qa/documents/Table5CellBorders.docbin0 -> 24064 bytes
-rw-r--r--writerfilter/qa/documents/Table5CellBorders.docxbin0 -> 10420 bytes
-rw-r--r--writerfilter/qa/documents/TableDifferentColumns.docbin0 -> 24064 bytes
-rw-r--r--writerfilter/qa/documents/TableDifferentColumns.docxbin0 -> 10440 bytes
-rw-r--r--writerfilter/qa/documents/TablePreferredWidth.docbin0 -> 24576 bytes
-rw-r--r--writerfilter/qa/documents/TablePreferredWidth.docxbin0 -> 10393 bytes
-rw-r--r--writerfilter/qa/documents/TableRowProperties.docbin0 -> 25600 bytes
-rw-r--r--writerfilter/qa/documents/TableRowProperties.docxbin0 -> 10622 bytes
-rw-r--r--writerfilter/qa/documents/VertAlign1.docbin0 -> 24576 bytes
-rw-r--r--writerfilter/qa/documents/WordOLE.docxbin0 -> 17324 bytes
-rw-r--r--writerfilter/qa/documents/align1.docbin0 -> 24576 bytes
-rw-r--r--writerfilter/qa/documents/bookmark2.docbin0 -> 24576 bytes
-rw-r--r--writerfilter/qa/documents/docx/numbering/num-1.docxbin0 -> 11288 bytes
-rw-r--r--writerfilter/qa/documents/docx/pictures/Word DocumentOffice 2007 Format Sample6.docxbin0 -> 302738 bytes
-rw-r--r--writerfilter/qa/documents/docx/pictures/i97645 New example.docxbin0 -> 102969 bytes
-rw-r--r--writerfilter/qa/documents/docx/pictures/test-image.docxbin0 -> 24026 bytes
-rw-r--r--writerfilter/qa/documents/docx/pictures/test-image1.docxbin0 -> 61174 bytes
-rw-r--r--writerfilter/qa/documents/docx/pictures/test.docxbin0 -> 22007 bytes
-rw-r--r--writerfilter/qa/documents/docx/redlines/test-review-brk.docxbin0 -> 10621 bytes
-rw-r--r--writerfilter/qa/documents/docx/redlines/test-review-para.docxbin0 -> 10682 bytes
-rw-r--r--writerfilter/qa/documents/docx/redlines/test-review-stack.docxbin0 -> 10598 bytes
-rw-r--r--writerfilter/qa/documents/docx/tables/Table in B2.docxbin0 -> 10353 bytes
-rw-r--r--writerfilter/qa/documents/docx/tables/nested-tables.docxbin0 -> 11079 bytes
-rw-r--r--writerfilter/qa/documents/docx/tables/nested-tables2.docxbin0 -> 10521 bytes
-rw-r--r--writerfilter/qa/documents/docx/tables/nested-tables3.docxbin0 -> 11482 bytes
-rw-r--r--writerfilter/qa/documents/docx/tables/nested-tables4.docxbin0 -> 13956 bytes
-rw-r--r--writerfilter/qa/documents/docx/tables/nested-tables5.docxbin0 -> 10761 bytes
-rw-r--r--writerfilter/qa/documents/docx/tables/parentinvguid.docxbin0 -> 139481 bytes
-rw-r--r--writerfilter/qa/documents/docx/tables/table in A1.docxbin0 -> 10340 bytes
-rw-r--r--writerfilter/qa/documents/docx/tables/table-styles.docxbin0 -> 13859 bytes
-rw-r--r--writerfilter/qa/documents/docx/tables/test-grid.docxbin0 -> 10978 bytes
-rw-r--r--writerfilter/qa/documents/docx/tables/test-paras.docxbin0 -> 13586 bytes
-rw-r--r--writerfilter/qa/documents/docx/tables/test-simple.docxbin0 -> 10527 bytes
-rw-r--r--writerfilter/qa/documents/docx/tables/two-tables.docxbin0 -> 10619 bytes
-rw-r--r--writerfilter/qa/documents/docx/tables/updatejpegprocessing.docxbin0 -> 24439 bytes
-rw-r--r--writerfilter/qa/documents/docx/tables/~$sted-tables3.docxbin0 -> 162 bytes
-rw-r--r--writerfilter/qa/documents/docx/test-page-format.docxbin0 -> 20846 bytes
-rwxr-xr-xwriterfilter/qa/documents/fields.docbin0 -> 34816 bytes
-rwxr-xr-xwriterfilter/qa/documents/fields.docx1
-rw-r--r--writerfilter/qa/documents/multimerge2.docx2
-rw-r--r--writerfilter/qa/documents/runProperties.docbin0 -> 25600 bytes
-rwxr-xr-xwriterfilter/qa/documents/runProperties.docxbin0 -> 11239 bytes
-rw-r--r--writerfilter/qa/documents/table_4_4.docbin0 -> 25600 bytes
-rw-r--r--writerfilter/qa/documents/table_4_4.docxbin0 -> 11131 bytes
-rw-r--r--writerfilter/qa/documents/table_style.docxbin0 -> 12649 bytes
-rw-r--r--writerfilter/source/dmapper/BorderHandler.cxx201
-rw-r--r--writerfilter/source/dmapper/BorderHandler.hxx81
-rw-r--r--writerfilter/source/dmapper/CellColorHandler.cxx235
-rw-r--r--writerfilter/source/dmapper/CellColorHandler.hxx64
-rw-r--r--writerfilter/source/dmapper/CellMarginHandler.cxx120
-rw-r--r--writerfilter/source/dmapper/CellMarginHandler.hxx69
-rw-r--r--writerfilter/source/dmapper/ConversionHelper.cxx691
-rw-r--r--writerfilter/source/dmapper/ConversionHelper.hxx64
-rw-r--r--writerfilter/source/dmapper/DomainMapper.cxx4980
-rw-r--r--writerfilter/source/dmapper/DomainMapperTableHandler.cxx842
-rw-r--r--writerfilter/source/dmapper/DomainMapperTableHandler.hxx103
-rw-r--r--writerfilter/source/dmapper/DomainMapperTableManager.cxx527
-rw-r--r--writerfilter/source/dmapper/DomainMapperTableManager.hxx123
-rw-r--r--writerfilter/source/dmapper/DomainMapper_Impl.cxx3771
-rw-r--r--writerfilter/source/dmapper/DomainMapper_Impl.hxx603
-rw-r--r--writerfilter/source/dmapper/FFData.xml58
-rw-r--r--writerfilter/source/dmapper/FFDataHandler.cxx483
-rw-r--r--writerfilter/source/dmapper/FFDataHandler.hxx161
-rw-r--r--writerfilter/source/dmapper/FieldTypes.hxx299
-rw-r--r--writerfilter/source/dmapper/FontTable.cxx676
-rw-r--r--writerfilter/source/dmapper/FontTable.hxx109
-rw-r--r--writerfilter/source/dmapper/FormControlHelper.cxx309
-rw-r--r--writerfilter/source/dmapper/FormControlHelper.hxx64
-rw-r--r--writerfilter/source/dmapper/GraphicHelpers.cxx223
-rw-r--r--writerfilter/source/dmapper/GraphicHelpers.hxx48
-rw-r--r--writerfilter/source/dmapper/GraphicImport.cxx1837
-rw-r--r--writerfilter/source/dmapper/GraphicImport.hxx128
-rw-r--r--writerfilter/source/dmapper/MeasureHandler.cxx132
-rw-r--r--writerfilter/source/dmapper/MeasureHandler.hxx66
-rw-r--r--writerfilter/source/dmapper/ModelEventListener.cxx96
-rw-r--r--writerfilter/source/dmapper/ModelEventListener.hxx51
-rw-r--r--writerfilter/source/dmapper/NumberingManager.cxx1017
-rw-r--r--writerfilter/source/dmapper/NumberingManager.hxx226
-rw-r--r--writerfilter/source/dmapper/OLEHandler.cxx246
-rw-r--r--writerfilter/source/dmapper/OLEHandler.hxx107
-rw-r--r--writerfilter/source/dmapper/PageBordersHandler.cxx121
-rw-r--r--writerfilter/source/dmapper/PageBordersHandler.hxx57
-rw-r--r--writerfilter/source/dmapper/PropertyIds.cxx349
-rw-r--r--writerfilter/source/dmapper/PropertyIds.hxx303
-rw-r--r--writerfilter/source/dmapper/PropertyMap.cxx1241
-rw-r--r--writerfilter/source/dmapper/PropertyMap.hxx561
-rw-r--r--writerfilter/source/dmapper/PropertyMapHelper.cxx131
-rw-r--r--writerfilter/source/dmapper/PropertyMapHelper.hxx50
-rw-r--r--writerfilter/source/dmapper/SectionColumnHandler.cxx118
-rw-r--r--writerfilter/source/dmapper/SectionColumnHandler.hxx76
-rw-r--r--writerfilter/source/dmapper/SettingsTable.cxx274
-rwxr-xr-xwriterfilter/source/dmapper/SettingsTable.hxx82
-rw-r--r--writerfilter/source/dmapper/StyleSheetTable.cxx1448
-rw-r--r--writerfilter/source/dmapper/StyleSheetTable.hxx165
-rw-r--r--writerfilter/source/dmapper/TDefTableHandler.cxx323
-rw-r--r--writerfilter/source/dmapper/TDefTableHandler.hxx86
-rw-r--r--writerfilter/source/dmapper/TablePropertiesHandler.cxx245
-rw-r--r--writerfilter/source/dmapper/TablePropertiesHandler.hxx83
-rw-r--r--writerfilter/source/dmapper/TblStylePrHandler.cxx87
-rw-r--r--writerfilter/source/dmapper/TblStylePrHandler.hxx64
-rw-r--r--writerfilter/source/dmapper/ThemeTable.cxx227
-rw-r--r--writerfilter/source/dmapper/ThemeTable.hxx62
-rw-r--r--writerfilter/source/dmapper/dmapperLoggers.cxx39
-rw-r--r--writerfilter/source/dmapper/dmapperLoggers.hxx43
-rw-r--r--writerfilter/source/dmapper/genclass.xsl707
-rw-r--r--writerfilter/source/dmapper/makefile.mk76
-rw-r--r--writerfilter/source/doctok/Dff.cxx518
-rw-r--r--writerfilter/source/doctok/Dff.hxx153
-rw-r--r--writerfilter/source/doctok/DffImpl.cxx518
-rw-r--r--writerfilter/source/doctok/PLCF.hxx195
-rw-r--r--writerfilter/source/doctok/WW8Annotation.cxx37
-rw-r--r--writerfilter/source/doctok/WW8BinTable.hxx88
-rw-r--r--writerfilter/source/doctok/WW8BinTableImpl.cxx106
-rw-r--r--writerfilter/source/doctok/WW8BinTableImpl.hxx98
-rw-r--r--writerfilter/source/doctok/WW8Clx.cxx84
-rw-r--r--writerfilter/source/doctok/WW8Clx.hxx93
-rw-r--r--writerfilter/source/doctok/WW8CpAndFc.cxx130
-rw-r--r--writerfilter/source/doctok/WW8CpAndFc.hxx360
-rw-r--r--writerfilter/source/doctok/WW8DocumentImpl.cxx2366
-rw-r--r--writerfilter/source/doctok/WW8DocumentImpl.hxx848
-rw-r--r--writerfilter/source/doctok/WW8FKP.hxx133
-rw-r--r--writerfilter/source/doctok/WW8FKPImpl.cxx240
-rw-r--r--writerfilter/source/doctok/WW8FKPImpl.hxx214
-rw-r--r--writerfilter/source/doctok/WW8FontTable.cxx113
-rw-r--r--writerfilter/source/doctok/WW8LFOTable.cxx128
-rw-r--r--writerfilter/source/doctok/WW8ListTable.cxx150
-rw-r--r--writerfilter/source/doctok/WW8OutputWithDepth.cxx49
-rw-r--r--writerfilter/source/doctok/WW8OutputWithDepth.hxx53
-rw-r--r--writerfilter/source/doctok/WW8Picture.cxx208
-rw-r--r--writerfilter/source/doctok/WW8PieceTable.hxx175
-rw-r--r--writerfilter/source/doctok/WW8PieceTableImpl.cxx299
-rw-r--r--writerfilter/source/doctok/WW8PieceTableImpl.hxx75
-rw-r--r--writerfilter/source/doctok/WW8PropertySetImpl.cxx432
-rw-r--r--writerfilter/source/doctok/WW8PropertySetImpl.hxx145
-rw-r--r--writerfilter/source/doctok/WW8ResourceModelImpl.cxx500
-rw-r--r--writerfilter/source/doctok/WW8ResourceModelImpl.hxx318
-rw-r--r--writerfilter/source/doctok/WW8StreamImpl.cxx207
-rw-r--r--writerfilter/source/doctok/WW8StreamImpl.hxx65
-rw-r--r--writerfilter/source/doctok/WW8StructBase.cxx199
-rw-r--r--writerfilter/source/doctok/WW8StructBase.hxx316
-rw-r--r--writerfilter/source/doctok/WW8Sttbf.cxx168
-rw-r--r--writerfilter/source/doctok/WW8Sttbf.hxx132
-rw-r--r--writerfilter/source/doctok/WW8StyleSheet.cxx206
-rw-r--r--writerfilter/source/doctok/WW8Table.cxx204
-rw-r--r--writerfilter/source/doctok/WW8Text.cxx76
-rw-r--r--writerfilter/source/doctok/WW8inc.xsl106
-rw-r--r--writerfilter/source/doctok/WW8sprms.xsl66
-rw-r--r--writerfilter/source/doctok/WW8xmi.xsl184
-rw-r--r--writerfilter/source/doctok/XNoteHelper.hxx143
-rw-r--r--writerfilter/source/doctok/XNoteHelperImpl.hxx168
-rw-r--r--writerfilter/source/doctok/analyzer.xsl39
-rwxr-xr-xwriterfilter/source/doctok/cleanupresources5
-rw-r--r--writerfilter/source/doctok/compactxmi.xsl262
-rw-r--r--writerfilter/source/doctok/doctokLoggers.hxx42
-rw-r--r--writerfilter/source/doctok/dopbase.xml91
-rw-r--r--writerfilter/source/doctok/escher.html207
-rw-r--r--writerfilter/source/doctok/escherdoc.xsl145
-rw-r--r--writerfilter/source/doctok/genqnametostr33
-rw-r--r--writerfilter/source/doctok/makefile.mk155
-rw-r--r--writerfilter/source/doctok/qnametostr.xsl41
-rw-r--r--writerfilter/source/doctok/qnametostrfooter2
-rw-r--r--writerfilter/source/doctok/qnametostrheader36
-rwxr-xr-xwriterfilter/source/doctok/replacesprmids517
-rw-r--r--writerfilter/source/doctok/resourceidmapper.xsl125
-rw-r--r--writerfilter/source/doctok/resourceidmapperback.xsl125
-rw-r--r--writerfilter/source/doctok/resourceids.xsl205
-rw-r--r--writerfilter/source/doctok/resources.xmi63712
-rw-r--r--writerfilter/source/doctok/resources.xsl917
-rw-r--r--writerfilter/source/doctok/resourcesimpl.xsl855
-rw-r--r--writerfilter/source/doctok/resourcetools.xsl566
-rw-r--r--writerfilter/source/doctok/sprmcodetostr.xsl39
-rw-r--r--writerfilter/source/doctok/sprmids.xsl82
-rw-r--r--writerfilter/source/doctok/tidyxmi.xsl120
-rw-r--r--writerfilter/source/doctok/xmigen.el126
-rw-r--r--writerfilter/source/doctok/xmigen.xsl577
-rw-r--r--writerfilter/source/doctok/xmistat.xsl37
-rwxr-xr-xwriterfilter/source/doctok/xmitocpp34
-rw-r--r--writerfilter/source/filter/ImportFilter.cxx250
-rw-r--r--writerfilter/source/filter/WriterFilter.cxx79
-rw-r--r--writerfilter/source/filter/WriterFilter.hxx104
-rw-r--r--writerfilter/source/filter/WriterFilterDetection.cxx200
-rw-r--r--writerfilter/source/filter/WriterFilterDetection.hxx76
-rw-r--r--writerfilter/source/filter/makefile.mk51
-rw-r--r--writerfilter/source/odiapi/qname/resource/office2003/WordprocessingML Schemas/wordnetaux.xsdbin0 -> 48598 bytes
-rw-r--r--writerfilter/source/odiapi/qname/resource/office2003/WordprocessingML Schemas/xsdlib.xsdbin0 -> 7918 bytes
-rw-r--r--writerfilter/source/odiapi/qname/resource/rdfxml.rng453
-rw-r--r--writerfilter/source/odiapi/qname/resource/rng.rng331
-rw-r--r--writerfilter/source/odiapi/qname/resource/rtf.rtfs1385
-rw-r--r--writerfilter/source/ooxml/Handler.cxx348
-rw-r--r--writerfilter/source/ooxml/Handler.hxx145
-rw-r--r--writerfilter/source/ooxml/OOXMLBinaryObjectReference.cxx86
-rw-r--r--writerfilter/source/ooxml/OOXMLBinaryObjectReference.hxx55
-rw-r--r--writerfilter/source/ooxml/OOXMLDocumentImpl.cxx410
-rw-r--r--writerfilter/source/ooxml/OOXMLDocumentImpl.hxx116
-rw-r--r--writerfilter/source/ooxml/OOXMLFactory.cxx339
-rwxr-xr-xwriterfilter/source/ooxml/OOXMLFactory.hxx176
-rw-r--r--writerfilter/source/ooxml/OOXMLFastContextHandler.cxx2380
-rw-r--r--writerfilter/source/ooxml/OOXMLFastContextHandler.hxx644
-rw-r--r--writerfilter/source/ooxml/OOXMLFastDocumentHandler.cxx233
-rw-r--r--writerfilter/source/ooxml/OOXMLFastDocumentHandler.hxx117
-rw-r--r--writerfilter/source/ooxml/OOXMLFastHelper.hxx253
-rw-r--r--writerfilter/source/ooxml/OOXMLFastTokenHandler.cxx119
-rw-r--r--writerfilter/source/ooxml/OOXMLFastTokenHandler.hxx65
-rw-r--r--writerfilter/source/ooxml/OOXMLParserState.cxx325
-rw-r--r--writerfilter/source/ooxml/OOXMLParserState.hxx118
-rw-r--r--writerfilter/source/ooxml/OOXMLPropertySet.hxx82
-rw-r--r--writerfilter/source/ooxml/OOXMLPropertySetImpl.cxx792
-rw-r--r--writerfilter/source/ooxml/OOXMLPropertySetImpl.hxx289
-rw-r--r--writerfilter/source/ooxml/OOXMLStreamImpl.cxx317
-rw-r--r--writerfilter/source/ooxml/OOXMLStreamImpl.hxx91
-rw-r--r--writerfilter/source/ooxml/README.efforts131
-rw-r--r--writerfilter/source/ooxml/RefAndPointer.hxx119
-rw-r--r--writerfilter/source/ooxml/analyzemodel.xsl103
-rw-r--r--writerfilter/source/ooxml/analyzestage2.xsl32
-rw-r--r--writerfilter/source/ooxml/analyzestage3.xsl40
-rw-r--r--writerfilter/source/ooxml/attrsprm.xsl142
-rw-r--r--writerfilter/source/ooxml/checkmodel.xsl167
-rw-r--r--writerfilter/source/ooxml/dummyannotate.xsl845
-rw-r--r--writerfilter/source/ooxml/effort.xsl39
-rwxr-xr-xwriterfilter/source/ooxml/efforts.sh3
-rw-r--r--writerfilter/source/ooxml/factory.xsl89
-rw-r--r--writerfilter/source/ooxml/factory_ns.xsl161
-rw-r--r--writerfilter/source/ooxml/factory_values.xsl100
-rw-r--r--writerfilter/source/ooxml/factoryimpl.xsl386
-rw-r--r--writerfilter/source/ooxml/factoryimpl_ns.xsl833
-rw-r--r--writerfilter/source/ooxml/factoryimpl_values.xsl98
-rw-r--r--writerfilter/source/ooxml/factoryinc.xsl112
-rw-r--r--writerfilter/source/ooxml/factorytools.xsl345
-rw-r--r--writerfilter/source/ooxml/fasttokens.xsl113
-rw-r--r--writerfilter/source/ooxml/gperffasttokenhandler.xsl96
-rw-r--r--writerfilter/source/ooxml/makefile.mk256
-rw-r--r--writerfilter/source/ooxml/model.xml23466
-rwxr-xr-xwriterfilter/source/ooxml/modelcleanup3
-rw-r--r--writerfilter/source/ooxml/modelcleanup.xsl304
-rw-r--r--writerfilter/source/ooxml/modelpreprocess.xsl225
-rw-r--r--writerfilter/source/ooxml/namespaceids.xsl100
-rw-r--r--writerfilter/source/ooxml/nostatus.xsl20
-rw-r--r--writerfilter/source/ooxml/ooxmlLoggers.hxx41
-rw-r--r--writerfilter/source/ooxml/qnametostr.xsl132
-rw-r--r--writerfilter/source/ooxml/resourceids.xsl105
-rwxr-xr-xwriterfilter/source/ooxml/rngtocxx32
-rw-r--r--writerfilter/source/ooxml/status.sh24
-rw-r--r--writerfilter/source/ooxml/todo.xsl29
-rw-r--r--writerfilter/source/ooxml/tokenxmlfooter1
-rw-r--r--writerfilter/source/ooxml/tokenxmlheader1
-rw-r--r--writerfilter/source/resourcemodel/Protocol.cxx218
-rw-r--r--writerfilter/source/resourcemodel/ResourceModelHelper.cxx48
-rw-r--r--writerfilter/source/resourcemodel/TagLogger.cxx467
-rw-r--r--writerfilter/source/resourcemodel/WW8Analyzer.cxx216
-rw-r--r--writerfilter/source/resourcemodel/WW8Analyzer.hxx99
-rw-r--r--writerfilter/source/resourcemodel/analyzerfooter4
-rw-r--r--writerfilter/source/resourcemodel/analyzerheader36
-rwxr-xr-xwriterfilter/source/resourcemodel/genqnametostr35
-rw-r--r--writerfilter/source/resourcemodel/makefile.mk204
-rw-r--r--writerfilter/source/resourcemodel/namespace_preprocess.pl65
-rw-r--r--writerfilter/source/resourcemodel/qnametostrfooter24
-rw-r--r--writerfilter/source/resourcemodel/qnametostrheader57
-rw-r--r--writerfilter/source/resourcemodel/resourcemodel.cxx563
-rw-r--r--writerfilter/source/resourcemodel/resourcemodel.hxx110
-rwxr-xr-xwriterfilter/source/resourcemodel/setdebugflags3
-rw-r--r--writerfilter/source/resourcemodel/sprmcodetostrfooter1
-rw-r--r--writerfilter/source/resourcemodel/sprmcodetostrheader50
-rw-r--r--writerfilter/source/resourcemodel/util.cxx427
-rw-r--r--writerfilter/source/rtftok/FlexLexer.h149
-rw-r--r--writerfilter/source/rtftok/RTFParseException.cxx33
-rw-r--r--writerfilter/source/rtftok/RTFScanner.lex333
-rw-r--r--writerfilter/source/rtftok/RTFScanner.skl1537
-rw-r--r--writerfilter/source/rtftok/makefile.mk82
-rw-r--r--writerfilter/unocomponent/component.cxx81
-rw-r--r--writerfilter/unocomponent/debugservices/doctok/DocTokAnalyzeService.cxx293
-rw-r--r--writerfilter/unocomponent/debugservices/doctok/DocTokAnalyzeService.hxx70
-rw-r--r--writerfilter/unocomponent/debugservices/doctok/DocTokTestService.cxx149
-rw-r--r--writerfilter/unocomponent/debugservices/doctok/DocTokTestService.hxx70
-rw-r--r--writerfilter/unocomponent/debugservices/doctok/makefile.mk44
-rw-r--r--writerfilter/unocomponent/debugservices/ooxml/OOXMLAnalyzeService.cxx291
-rw-r--r--writerfilter/unocomponent/debugservices/ooxml/OOXMLAnalyzeService.hxx70
-rw-r--r--writerfilter/unocomponent/debugservices/ooxml/OOXMLTestService.cxx182
-rw-r--r--writerfilter/unocomponent/debugservices/ooxml/OOXMLTestService.hxx70
-rw-r--r--writerfilter/unocomponent/debugservices/ooxml/makefile.mk58
-rw-r--r--writerfilter/unocomponent/debugservices/rtftok/ScannerTestService.cxx455
-rw-r--r--writerfilter/unocomponent/debugservices/rtftok/ScannerTestService.hxx70
-rw-r--r--writerfilter/unocomponent/debugservices/rtftok/XMLScanner.cxx333
-rw-r--r--writerfilter/unocomponent/debugservices/rtftok/XMLScanner.hxx70
-rw-r--r--writerfilter/unocomponent/debugservices/rtftok/makefile.mk45
-rw-r--r--writerfilter/unocomponent/exports.dxp3
-rw-r--r--writerfilter/unocomponent/makefile.mk90
-rw-r--r--writerfilter/util/makefile.mk78
-rw-r--r--writerperfect/prj/build.lst6
-rw-r--r--writerperfect/prj/d.lst4
-rw-r--r--writerperfect/source/filter/DocumentCollector.cxx931
-rw-r--r--writerperfect/source/filter/DocumentCollector.hxx201
-rw-r--r--writerperfect/source/filter/DocumentElement.cxx102
-rw-r--r--writerperfect/source/filter/DocumentElement.hxx99
-rw-r--r--writerperfect/source/filter/DocumentHandler.cxx83
-rw-r--r--writerperfect/source/filter/DocumentHandler.hxx31
-rw-r--r--writerperfect/source/filter/FilterInternal.hxx31
-rw-r--r--writerperfect/source/filter/FontStyle.cxx50
-rw-r--r--writerperfect/source/filter/FontStyle.hxx52
-rw-r--r--writerperfect/source/filter/ListStyle.cxx161
-rw-r--r--writerperfect/source/filter/ListStyle.hxx101
-rw-r--r--writerperfect/source/filter/PageSpan.cxx173
-rw-r--r--writerperfect/source/filter/PageSpan.hxx65
-rw-r--r--writerperfect/source/filter/SectionStyle.cxx86
-rw-r--r--writerperfect/source/filter/SectionStyle.hxx52
-rw-r--r--writerperfect/source/filter/Style.hxx63
-rw-r--r--writerperfect/source/filter/TableStyle.cxx163
-rw-r--r--writerperfect/source/filter/TableStyle.hxx80
-rw-r--r--writerperfect/source/filter/TextRunStyle.cxx162
-rw-r--r--writerperfect/source/filter/TextRunStyle.hxx69
-rw-r--r--writerperfect/source/filter/WriterProperties.hxx36
-rw-r--r--writerperfect/source/filter/makefile.mk27
-rw-r--r--writerperfect/source/stream/WPXSvStream.cxx174
-rw-r--r--writerperfect/source/stream/WPXSvStream.h47
-rw-r--r--writerperfect/source/stream/makefile.mk18
-rw-r--r--writerperfect/source/wpdimp/WordPerfectCollector.cxx53
-rw-r--r--writerperfect/source/wpdimp/WordPerfectCollector.hxx41
-rw-r--r--writerperfect/source/wpdimp/WordPerfectImportFilter.cxx293
-rw-r--r--writerperfect/source/wpdimp/WordPerfectImportFilter.hxx115
-rw-r--r--writerperfect/source/wpdimp/makefile.mk21
-rw-r--r--writerperfect/source/wpdimp/wpft_genericfilter.cxx98
-rw-r--r--writerperfect/util/makefile.mk45
-rw-r--r--x11_extensions/inc/Xrandr.h151
-rw-r--r--x11_extensions/inc/Xrender.h528
-rw-r--r--x11_extensions/inc/randr.h74
-rw-r--r--x11_extensions/inc/randrproto.h209
-rw-r--r--x11_extensions/inc/render.h189
-rw-r--r--x11_extensions/inc/renderproto.h663
-rw-r--r--x11_extensions/prj/build.lst3
-rw-r--r--x11_extensions/prj/d.lst5
-rw-r--r--xmerge/build.xml88
-rw-r--r--xmerge/inc/makefile.mk47
-rw-r--r--xmerge/inc/pch/precompiled_xmerge.cxx29
-rw-r--r--xmerge/inc/pch/precompiled_xmerge.hxx32
-rw-r--r--xmerge/prj/build.lst11
-rw-r--r--xmerge/prj/d.lst11
-rw-r--r--xmerge/source/activesync/BIN/xmergesync.dllbin0 -> 86016 bytes
-rw-r--r--xmerge/source/activesync/XMergeFactory.cpp90
-rw-r--r--xmerge/source/activesync/XMergeFactory.h34
-rw-r--r--xmerge/source/activesync/XMergeFilter.cpp495
-rw-r--r--xmerge/source/activesync/XMergeFilter.h73
-rw-r--r--xmerge/source/activesync/XMergeSync.cpp837
-rw-r--r--xmerge/source/activesync/XMergeSync.def9
-rw-r--r--xmerge/source/activesync/XMergeSync.dsp143
-rw-r--r--xmerge/source/activesync/XMergeSync.dsw33
-rw-r--r--xmerge/source/activesync/XMergeSync.h29
-rw-r--r--xmerge/source/activesync/XMergeSync.rc80
-rw-r--r--xmerge/source/activesync/exports.map12
-rw-r--r--xmerge/source/activesync/guids.txt60
-rw-r--r--xmerge/source/activesync/makefile.mk72
-rw-r--r--xmerge/source/activesync/resource.h17
-rw-r--r--xmerge/source/activesync/stdafx.cpp7
-rw-r--r--xmerge/source/activesync/stdafx.h28
-rw-r--r--xmerge/source/aportisdoc/build.xml76
-rw-r--r--xmerge/source/aportisdoc/converter.xml45
-rw-r--r--xmerge/source/aportisdoc/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/ConverterCapabilitiesImpl.java93
-rw-r--r--xmerge/source/aportisdoc/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/DocConstants.java69
-rw-r--r--xmerge/source/aportisdoc/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/DocDecoder.java301
-rw-r--r--xmerge/source/aportisdoc/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/DocEncoder.java213
-rw-r--r--xmerge/source/aportisdoc/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/DocumentDeserializerImpl.java312
-rw-r--r--xmerge/source/aportisdoc/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/DocumentMergerImpl.java97
-rw-r--r--xmerge/source/aportisdoc/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/DocumentSerializerImpl.java531
-rw-r--r--xmerge/source/aportisdoc/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/PluginFactoryImpl.java141
-rw-r--r--xmerge/source/aportisdoc/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/package.html239
-rw-r--r--xmerge/source/aportisdoc/makefile.mk35
-rw-r--r--xmerge/source/bridge/antcall.txt19
-rw-r--r--xmerge/source/bridge/build.xml81
-rw-r--r--xmerge/source/bridge/java/XMergeBridge.java715
-rw-r--r--xmerge/source/bridge/makefile.mk35
-rw-r--r--xmerge/source/bridge/manifest.mf3
-rw-r--r--xmerge/source/htmlsoff/build.xml67
-rw-r--r--xmerge/source/htmlsoff/converter.xml52
-rw-r--r--xmerge/source/htmlsoff/htmltosoff.xsl176
-rw-r--r--xmerge/source/htmlsoff/makefile.mk35
-rw-r--r--xmerge/source/htmlsoff/package.html67
-rw-r--r--xmerge/source/htmlsoff/sofftohtml.xsl118
-rw-r--r--xmerge/source/inc/antbuild.properties12
-rw-r--r--xmerge/source/inc/antbuild.xml2
-rw-r--r--xmerge/source/minicalc/build.xml76
-rw-r--r--xmerge/source/minicalc/converter.xml45
-rw-r--r--xmerge/source/minicalc/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/ConverterCapabilitiesImpl.java113
-rw-r--r--xmerge/source/minicalc/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/MinicalcConstants.java45
-rw-r--r--xmerge/source/minicalc/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/MinicalcDataString.java545
-rw-r--r--xmerge/source/minicalc/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/MinicalcDecoder.java744
-rw-r--r--xmerge/source/minicalc/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/MinicalcEncoder.java582
-rw-r--r--xmerge/source/minicalc/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/PluginFactoryImpl.java129
-rw-r--r--xmerge/source/minicalc/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/SxcDocumentDeserializerImpl.java138
-rw-r--r--xmerge/source/minicalc/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/SxcDocumentSerializerImpl.java141
-rw-r--r--xmerge/source/minicalc/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/package.html53
-rw-r--r--xmerge/source/minicalc/makefile.mk33
-rw-r--r--xmerge/source/palmtests/README50
-rw-r--r--xmerge/source/palmtests/bin/README6
-rwxr-xr-xxmerge/source/palmtests/bin/rd24
-rwxr-xr-xxmerge/source/palmtests/bin/spose108
-rwxr-xr-xxmerge/source/palmtests/bin/verify_sane.pl110
-rwxr-xr-xxmerge/source/palmtests/qa-wrapper/bin/qa_comparator.pl257
-rwxr-xr-xxmerge/source/palmtests/qa-wrapper/bin/qa_test_driver.pl846
-rwxr-xr-xxmerge/source/palmtests/qa-wrapper/bin/run-convtest538
-rw-r--r--xmerge/source/palmtests/qa-wrapper/env/master.env85
-rw-r--r--xmerge/source/palmtests/qa-wrapper/lists/master.list55
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/a_animatedgif.pdb6
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/a_bolddoc.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/a_bookmarks.pdb10
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/a_bulletorderedlist.pdb8
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/a_emptydoc.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/a_firstlineindent.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/a_fontsize.pdb6
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/a_heading.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/a_heading1.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/a_heading2.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/a_hyperlink.pdb6
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/a_justified.pdb4
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/a_linebreaks.pdb4
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/a_linespacing.pdb12
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/a_numberorderedlist.pdb9
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/a_pagebreak.pdb4
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/a_paragraph.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/a_simple01.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/a_simple02.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/a_simple03.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/a_simple04.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/a_simple05.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/a_standard.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/a_subscript.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/a_superscript.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/a_symbols.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/a_tab.pdb8
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/a_table.pdb2
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/a_textspan.pdb3
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/a_unorderedlist.pdb20
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/a_wordwrap.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_addition-Sheet1.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_addition-Sheet2.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_addition-Sheet3.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_alignment-Sheet1.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_alignment-Sheet2.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_alignment-Sheet3.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_backwardrange-Sheet1.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_backwardrange-Sheet2.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_backwardrange-Sheet3.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_basic-Sheet1.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_basic-Sheet2.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_basic-Sheet3.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_boolean-Sheet1.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_boolean-Sheet2.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_boolean-Sheet3.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_cellcurrencyalue-Sheet1.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_cellcurrencyalue-Sheet2.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_cellcurrencyalue-Sheet3.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_cellpercentvalue-Sheet1.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_cellpercentvalue-Sheet2.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_cellpercentvalue-Sheet3.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_cellstringvalue-Sheet1.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_cellstringvalue-Sheet2.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_cellstringvalue-Sheet3.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_columnswidth-Sheet1.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_columnswidth-Sheet2.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_columnswidth-Sheet3.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_cyclic-Sheet1.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_cyclic-Sheet2.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_cyclic-Sheet3.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_dividefloating-Sheet1.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_dividefloating-Sheet2.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_dividefloating-Sheet3.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_forwardrange-Sheet1.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_forwardrange-Sheet2.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_forwardrange-Sheet3.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_insertimage-Sheet1.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_insertimage-Sheet2.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_insertimage-Sheet3.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_invalidcellref-Sheet1.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_invalidcellref-Sheet2.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_invalidcellref-Sheet3.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_largerange-Sheet1.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_largerange-Sheet2.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_largerange-Sheet3.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_listrange-Sheet1.pdb2
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_listrange-Sheet2.pdb2
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_listrange-Sheet3.pdb2
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_mathematical-Sheet1.pdb2
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_mathematical-Sheet2.pdb2
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_mathematical-Sheet3.pdb2
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_protection-Sheet1.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_protection-Sheet2.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_protection-Sheet3.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_sheetreference-Sheet1.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_sheetreference-Sheet2.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_sheetreference-Sheet3.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_simple01-Sheet1.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_simple01-Sheet2.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_simple01-Sheet3.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_simple02-Sheet1.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_simple02-Sheet2.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_simple02-Sheet3.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_simple03-Sheet1.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_simple03-Sheet2.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_simple03-Sheet3.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_simple04-Sheet1.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_simple04-Sheet2.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_simple04-Sheet3.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_smallrange-Sheet1.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_smallrange-Sheet2.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_smallrange-Sheet3.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_styles-Sheet1.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_styles-Sheet2.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_styles-Sheet3.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_textimage-Sheet1.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_textimage-Sheet2.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/pdb-base/c_textimage-Sheet3.pdb1
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/xml-base/Blocklist.dtd34
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/xml-base/a_animatedgif.sxwbin0 -> 52952 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/xml-base/a_bolddoc.sxwbin0 -> 5500 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/xml-base/a_bookmarks.sxwbin0 -> 6047 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/xml-base/a_bulletorderedlist.sxwbin0 -> 6347 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/xml-base/a_emptydoc.sxwbin0 -> 5701 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/xml-base/a_firstlineindent.sxwbin0 -> 5519 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/xml-base/a_fontsize.sxwbin0 -> 6130 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/xml-base/a_heading.sxwbin0 -> 5518 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/xml-base/a_heading1.sxwbin0 -> 5640 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/xml-base/a_heading2.sxwbin0 -> 5964 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/xml-base/a_hyperlink.sxwbin0 -> 5514 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/xml-base/a_justified.sxwbin0 -> 6088 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/xml-base/a_linebreaks.sxwbin0 -> 6269 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/xml-base/a_linespacing.sxwbin0 -> 5618 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/xml-base/a_numberorderedlist.sxwbin0 -> 6188 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/xml-base/a_pagebreak.sxwbin0 -> 5534 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/xml-base/a_paragraph.sxwbin0 -> 5914 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/xml-base/a_simple01.sxwbin0 -> 5823 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/xml-base/a_simple02.sxwbin0 -> 5821 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/xml-base/a_simple03.sxwbin0 -> 5817 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/xml-base/a_simple04.sxwbin0 -> 5792 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/xml-base/a_simple05.sxwbin0 -> 5791 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/xml-base/a_standard.sxwbin0 -> 5797 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/xml-base/a_subscript.sxwbin0 -> 5798 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/xml-base/a_superscript.sxwbin0 -> 5799 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/xml-base/a_symbols.sxwbin0 -> 4916 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/xml-base/a_tab.sxwbin0 -> 5731 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/xml-base/a_table.sxwbin0 -> 6011 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/xml-base/a_textspan.sxwbin0 -> 5958 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/xml-base/a_unorderedlist.sxwbin0 -> 6817 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/xml-base/a_wordwrap.sxwbin0 -> 5363 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/xml-base/c_addition.sxcbin0 -> 5829 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/xml-base/c_alignment.sxcbin0 -> 6383 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/xml-base/c_backwardrange.sxcbin0 -> 5995 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/xml-base/c_basic.sxcbin0 -> 5830 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/xml-base/c_boolean.sxcbin0 -> 6066 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/xml-base/c_cellcurrencyalue.sxcbin0 -> 6776 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/xml-base/c_cellpercentvalue.sxcbin0 -> 6318 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/xml-base/c_cellstringvalue.sxcbin0 -> 6009 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/xml-base/c_columnswidth.sxcbin0 -> 6127 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/xml-base/c_cyclic.sxcbin0 -> 6005 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/xml-base/c_dividefloating.sxcbin0 -> 6315 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/xml-base/c_forwardrange.sxcbin0 -> 6058 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/xml-base/c_insertimage.sxcbin0 -> 40476 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/xml-base/c_invalidcellref.sxcbin0 -> 5838 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/xml-base/c_largerange.sxcbin0 -> 6306 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/xml-base/c_listrange.sxcbin0 -> 6162 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/xml-base/c_mathematical.sxcbin0 -> 6026 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/xml-base/c_protection.sxcbin0 -> 6839 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/xml-base/c_sheetreference.sxcbin0 -> 6173 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/xml-base/c_simple01.sxcbin0 -> 5080 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/xml-base/c_simple02.sxcbin0 -> 4962 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/xml-base/c_simple03.sxcbin0 -> 4995 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/xml-base/c_simple04.sxcbin0 -> 5007 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/xml-base/c_smallrange.sxcbin0 -> 5924 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/xml-base/c_styles.sxcbin0 -> 6531 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/xml-base/c_textimage.sxcbin0 -> 40702 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/xml-base/chart.mod228
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/xml-base/datastyl.mod168
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/xml-base/drawing.mod837
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/xml-base/dtypes.mod143
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/xml-base/form.mod308
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/xml-base/meta.mod90
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/xml-base/nmspace.mod50
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/xml-base/office.dtd54
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/xml-base/office.mod234
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/xml-base/script.mod51
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/xml-base/settings.mod49
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/xml-base/style.mod391
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/xml-base/table.mod493
-rw-r--r--xmerge/source/palmtests/qa-wrapper/results/baseline/xml-base/text.mod1099
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/a_animatedgif.infile4
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/a_bolddoc.infile4
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/a_bookmarks.infile4
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/a_bulletorderedlist.infile4
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/a_emptydoc-mod.infile9
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/a_emptydoc.infile4
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/a_firstlineindent.infile4
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/a_fontsize.infile4
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/a_heading.infile4
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/a_heading1.infile4
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/a_heading2.infile4
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/a_hyperlink.infile4
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/a_justified.infile4
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/a_linebreaks.infile4
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/a_linespacing.infile4
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/a_numberorderedlist.infile4
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/a_pagebreak.infile4
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/a_paragraph.infile4
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/a_simple01.infile4
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/a_simple02.infile4
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/a_simple03.infile4
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/a_simple04.infile4
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/a_simple05.infile5
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/a_standard.infile4
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/a_subscript.infile4
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/a_superscript.infile4
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/a_symbols.infile4
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/a_tab.infile4
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/a_table.infile5
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/a_textspan.infile4
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/a_unorderedlist.infile4
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/a_wordwrap.infile4
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/c_addition01-mod.infile5
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/c_alignment.infile4
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/c_backwardrange-mod.infile6
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/c_basic-mod.infile5
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/c_bob-mod.infile5
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/c_boolean-mod.infile6
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/c_cellcurrencyvalue.infile5
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/c_cellpercentvalue-mod.infile8
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/c_cellstringvalue-mod.infile10
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/c_columnswidth-mod.infile3
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/c_cyclic-mod.infile12
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/c_dividefloating-mod.infile8
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/c_forwardrange-mod.infile6
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/c_insertimage.infile4
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/c_insertrow-mod.infile13
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/c_invalidcellref-mod.infile10
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/c_largerange-mod.infile6
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/c_listrange-mod.infile6
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/c_mathematical-mod.infile10
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/c_multi_boolean.infile5
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/c_protection-mod01.infile6
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/c_sheetreference-mod.infile6
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/c_simple01-mod.infile13
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/c_simple02-mod.infile13
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/c_simple03-mod.infile22
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/c_simple04-mod.infile14
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/c_smallrange-mod.infile6
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/c_styles.infile3
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/c_textimage.infile12
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/empty01.infile3
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/hyperlink01.infile4
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/image01.infile4
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/simple01.infile3
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/simple02.infile3
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/simple03.infile3
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/simple04.infile3
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/simple05.infile4
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/table01.infile3
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/table02.infile3
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/table03.infile4
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/table04.infile4
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/xml-orig/a_animatedgif.sxwbin0 -> 53136 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/xml-orig/a_bolddoc.sxwbin0 -> 5664 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/xml-orig/a_bookmarks.sxwbin0 -> 6227 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/xml-orig/a_bulletorderedlist.sxwbin0 -> 6347 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/xml-orig/a_emptydoc-mod.sxwbin0 -> 5880 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/xml-orig/a_emptydoc.sxwbin0 -> 5880 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/xml-orig/a_firstlineindent.sxwbin0 -> 5683 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/xml-orig/a_fontsize.sxwbin0 -> 6315 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/xml-orig/a_heading.sxwbin0 -> 5700 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/xml-orig/a_heading1.sxwbin0 -> 5819 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/xml-orig/a_heading2.sxwbin0 -> 6142 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/xml-orig/a_hyperlink.sxwbin0 -> 5673 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/xml-orig/a_justified.sxwbin0 -> 6269 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/xml-orig/a_linebreaks.sxwbin0 -> 6444 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/xml-orig/a_linespacing.sxwbin0 -> 5783 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/xml-orig/a_numberorderedlist.sxwbin0 -> 6366 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/xml-orig/a_pagebreak.sxwbin0 -> 5698 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/xml-orig/a_paragraph.sxwbin0 -> 6093 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/xml-orig/a_simple01.sxwbin0 -> 5978 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/xml-orig/a_simple02.sxwbin0 -> 5978 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/xml-orig/a_simple03.sxwbin0 -> 5978 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/xml-orig/a_simple04.sxwbin0 -> 5978 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/xml-orig/a_simple05.sxwbin0 -> 5978 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/xml-orig/a_standard.sxwbin0 -> 5978 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/xml-orig/a_subscript.sxwbin0 -> 5980 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/xml-orig/a_superscript.sxwbin0 -> 5981 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/xml-orig/a_symbols.sxwbin0 -> 5106 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/xml-orig/a_tab.sxwbin0 -> 5912 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/xml-orig/a_table.sxwbin0 -> 6181 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/xml-orig/a_textspan.sxwbin0 -> 6142 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/xml-orig/a_unorderedlist.sxwbin0 -> 6817 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/xml-orig/a_wordwrap.sxwbin0 -> 5524 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/xml-orig/c_addition.sxcbin0 -> 6020 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/xml-orig/c_alignment.sxcbin0 -> 6535 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/xml-orig/c_backwardrange.sxcbin0 -> 6204 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/xml-orig/c_basic.sxcbin0 -> 6020 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/xml-orig/c_boolean.sxcbin0 -> 6239 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/xml-orig/c_cellcurrencyalue.sxcbin0 -> 6776 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/xml-orig/c_cellpercentvalue.sxcbin0 -> 6495 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/xml-orig/c_cellstringvalue.sxcbin0 -> 6172 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/xml-orig/c_columnswidth.sxcbin0 -> 6287 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/xml-orig/c_cyclic.sxcbin0 -> 6005 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/xml-orig/c_dividefloating.sxcbin0 -> 6315 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/xml-orig/c_forwardrange.sxcbin0 -> 6259 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/xml-orig/c_insertimage.sxcbin0 -> 40702 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/xml-orig/c_insertrow.sxcbin0 -> 5157 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/xml-orig/c_invalidcellref.sxcbin0 -> 6035 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/xml-orig/c_largerange.sxcbin0 -> 6487 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/xml-orig/c_listrange.sxcbin0 -> 6370 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/xml-orig/c_mathematical.sxcbin0 -> 6351 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/xml-orig/c_multi_boolean.sxcbin0 -> 5338 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/xml-orig/c_protection.sxcbin0 -> 6839 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/xml-orig/c_sheetreference.sxcbin0 -> 6358 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/xml-orig/c_simple01.sxcbin0 -> 5176 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/xml-orig/c_simple02.sxcbin0 -> 4999 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/xml-orig/c_simple03.sxcbin0 -> 5044 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/xml-orig/c_simple04.sxcbin0 -> 5083 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/xml-orig/c_smallrange.sxcbin0 -> 6129 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/xml-orig/c_styles.sxcbin0 -> 6531 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/xml-orig/c_textimage.sxcbin0 -> 40702 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/xml-orig/empty01.sxwbin0 -> 5880 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/xml-orig/hyperlink01.sxwbin0 -> 6088 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/xml-orig/image01.sxwbin0 -> 53136 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/xml-orig/simple01.sxwbin0 -> 5978 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/xml-orig/simple02.sxwbin0 -> 5978 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/xml-orig/simple03.sxwbin0 -> 5978 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/xml-orig/simple04.sxwbin0 -> 5978 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/xml-orig/simple05.sxwbin0 -> 5978 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/xml-orig/table01.sxwbin0 -> 6443 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/xml-orig/table02.sxwbin0 -> 6443 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/xml-orig/table03.sxwbin0 -> 6443 bytes
-rw-r--r--xmerge/source/palmtests/qa-wrapper/testcases/xml-orig/table04.sxwbin0 -> 6443 bytes
-rwxr-xr-xxmerge/source/palmtests/qa/bin/mysplit.pl58
-rwxr-xr-xxmerge/source/palmtests/qa/bin/tappen.pl61
-rwxr-xr-xxmerge/source/palmtests/qa/bin/template.pl55
-rwxr-xr-xxmerge/source/palmtests/qa/bin/test_driver.pl785
-rw-r--r--xmerge/source/palmtests/qa/comparator/OfficeZip.java241
-rw-r--r--xmerge/source/palmtests/qa/comparator/PDBDecoder.java135
-rw-r--r--xmerge/source/palmtests/qa/comparator/PDBHeader.java153
-rw-r--r--xmerge/source/palmtests/qa/comparator/PDBUtil.java100
-rw-r--r--xmerge/source/palmtests/qa/comparator/PalmDB.java348
-rw-r--r--xmerge/source/palmtests/qa/comparator/README10
-rw-r--r--xmerge/source/palmtests/qa/comparator/Record.java165
-rw-r--r--xmerge/source/palmtests/qa/comparator/SimplePdbCompare.java94
-rw-r--r--xmerge/source/palmtests/qa/comparator/XmlDiff.java464
-rw-r--r--xmerge/source/palmtests/qa/comparator/XmlDiff.properties14
-rw-r--r--xmerge/source/palmtests/qa/comparator/XmlWrapper.java153
-rw-r--r--xmerge/source/palmtests/qa/comparator/XmlZipExtract.java144
-rw-r--r--xmerge/source/palmtests/qa/comparator/comparator.pl248
-rw-r--r--xmerge/source/palmtests/qa/comparator/dtd/Blocklist.dtd34
-rw-r--r--xmerge/source/palmtests/qa/comparator/dtd/chart.mod228
-rw-r--r--xmerge/source/palmtests/qa/comparator/dtd/datastyl.mod168
-rw-r--r--xmerge/source/palmtests/qa/comparator/dtd/drawing.mod837
-rw-r--r--xmerge/source/palmtests/qa/comparator/dtd/dtypes.mod143
-rw-r--r--xmerge/source/palmtests/qa/comparator/dtd/form.mod308
-rw-r--r--xmerge/source/palmtests/qa/comparator/dtd/meta.mod90
-rw-r--r--xmerge/source/palmtests/qa/comparator/dtd/nmspace.mod50
-rw-r--r--xmerge/source/palmtests/qa/comparator/dtd/office.dtd54
-rw-r--r--xmerge/source/palmtests/qa/comparator/dtd/office.mod234
-rw-r--r--xmerge/source/palmtests/qa/comparator/dtd/script.mod51
-rw-r--r--xmerge/source/palmtests/qa/comparator/dtd/settings.mod49
-rw-r--r--xmerge/source/palmtests/qa/comparator/dtd/style.mod391
-rw-r--r--xmerge/source/palmtests/qa/comparator/dtd/table.mod493
-rw-r--r--xmerge/source/palmtests/qa/comparator/dtd/text.mod1099
-rw-r--r--xmerge/source/palmtests/qa/comparator/pdbcomparison.java542
-rw-r--r--xmerge/source/palmtests/qa/docs/Doc_descriptions.sxcbin0 -> 8347 bytes
-rw-r--r--xmerge/source/palmtests/qa/docs/Spreadsheet_descriptions.csv39
-rw-r--r--xmerge/source/palmtests/qa/docs/Spreadsheet_descriptions.sxcbin0 -> 5752 bytes
-rw-r--r--xmerge/source/palmtests/qa/lib/converterlib.pm1174
-rw-r--r--xmerge/source/palmtests/qa/palm-session/session8
-rw-r--r--xmerge/source/palmtests/qa/test_spec/convertor_test_spec.html2274
-rw-r--r--xmerge/source/pexcel/build.xml76
-rw-r--r--xmerge/source/pexcel/converter.xml45
-rw-r--r--xmerge/source/pexcel/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/ConverterCapabilitiesImpl.java113
-rw-r--r--xmerge/source/pexcel/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/PluginFactoryImpl.java130
-rw-r--r--xmerge/source/pexcel/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/PocketExcelConstants.java67
-rw-r--r--xmerge/source/pexcel/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/PocketExcelDecoder.java438
-rw-r--r--xmerge/source/pexcel/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/PocketExcelEncoder.java289
-rw-r--r--xmerge/source/pexcel/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/SxcDocumentDeserializerImpl.java129
-rw-r--r--xmerge/source/pexcel/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/SxcDocumentSerializerImpl.java130
-rw-r--r--xmerge/source/pexcel/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/package.html43
-rw-r--r--xmerge/source/pexcel/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/BIFFRecord.java61
-rw-r--r--xmerge/source/pexcel/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/BeginningOfFile.java116
-rw-r--r--xmerge/source/pexcel/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/BlankCell.java115
-rw-r--r--xmerge/source/pexcel/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/BoolErrCell.java125
-rw-r--r--xmerge/source/pexcel/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/BoundSheet.java136
-rw-r--r--xmerge/source/pexcel/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/CellValue.java136
-rw-r--r--xmerge/source/pexcel/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/CodePage.java107
-rw-r--r--xmerge/source/pexcel/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/ColInfo.java157
-rw-r--r--xmerge/source/pexcel/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/DefColWidth.java94
-rw-r--r--xmerge/source/pexcel/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/DefRowHeight.java96
-rw-r--r--xmerge/source/pexcel/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/DefinedName.java226
-rw-r--r--xmerge/source/pexcel/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/Eof.java70
-rw-r--r--xmerge/source/pexcel/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/ExtendedFormat.java384
-rw-r--r--xmerge/source/pexcel/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/FloatNumber.java120
-rw-r--r--xmerge/source/pexcel/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/FontDescription.java286
-rw-r--r--xmerge/source/pexcel/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/Formula.java257
-rw-r--r--xmerge/source/pexcel/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/LabelCell.java139
-rw-r--r--xmerge/source/pexcel/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/NumberFormat.java93
-rw-r--r--xmerge/source/pexcel/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/Pane.java218
-rw-r--r--xmerge/source/pexcel/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/Row.java138
-rw-r--r--xmerge/source/pexcel/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/Selection.java142
-rw-r--r--xmerge/source/pexcel/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/StringValue.java124
-rw-r--r--xmerge/source/pexcel/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/UnsupportedFormulaException.java41
-rw-r--r--xmerge/source/pexcel/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/Window1.java115
-rw-r--r--xmerge/source/pexcel/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/Window2.java154
-rw-r--r--xmerge/source/pexcel/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/Workbook.java539
-rw-r--r--xmerge/source/pexcel/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/Worksheet.java319
-rw-r--r--xmerge/source/pexcel/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/FormulaCompiler.java271
-rw-r--r--xmerge/source/pexcel/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/FormulaHelper.java152
-rw-r--r--xmerge/source/pexcel/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/FormulaParser.java561
-rw-r--r--xmerge/source/pexcel/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/FormulaParsingException.java41
-rw-r--r--xmerge/source/pexcel/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/FunctionLookup.java204
-rw-r--r--xmerge/source/pexcel/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/OperandLookup.java62
-rw-r--r--xmerge/source/pexcel/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/OperatorLookup.java73
-rw-r--r--xmerge/source/pexcel/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/ParseToken.java42
-rw-r--r--xmerge/source/pexcel/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/PrecedenceTable.java85
-rw-r--r--xmerge/source/pexcel/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/SymbolLookup.java81
-rw-r--r--xmerge/source/pexcel/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/Token.java151
-rw-r--r--xmerge/source/pexcel/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/TokenConstants.java203
-rw-r--r--xmerge/source/pexcel/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/TokenDecoder.java497
-rw-r--r--xmerge/source/pexcel/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/TokenEncoder.java559
-rw-r--r--xmerge/source/pexcel/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/TokenFactory.java118
-rw-r--r--xmerge/source/pexcel/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/UnsupportedFunctionException.java40
-rw-r--r--xmerge/source/pexcel/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/package.html42
-rw-r--r--xmerge/source/pexcel/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/package.html47
-rw-r--r--xmerge/source/pexcel/makefile.mk35
-rw-r--r--xmerge/source/pocketword/build.xml76
-rw-r--r--xmerge/source/pocketword/converter.xml50
-rw-r--r--xmerge/source/pocketword/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/ConverterCapabilitiesImpl.java93
-rw-r--r--xmerge/source/pocketword/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/DocumentDescriptor.java235
-rw-r--r--xmerge/source/pocketword/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/DocumentDeserializerImpl.java294
-rw-r--r--xmerge/source/pocketword/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/DocumentMergerImpl.java97
-rw-r--r--xmerge/source/pocketword/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/DocumentSerializerImpl.java433
-rw-r--r--xmerge/source/pocketword/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/Paragraph.java858
-rw-r--r--xmerge/source/pocketword/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/ParagraphTextSegment.java202
-rw-r--r--xmerge/source/pocketword/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/PluginFactoryImpl.java164
-rw-r--r--xmerge/source/pocketword/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/PocketWordConstants.java94
-rw-r--r--xmerge/source/pocketword/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/PocketWordDocument.java404
-rw-r--r--xmerge/source/pocketword/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/package.html58
-rw-r--r--xmerge/source/pocketword/makefile.mk35
-rw-r--r--xmerge/source/regutil/makefile.mk48
-rw-r--r--xmerge/source/regutil/regutil.cpp102
-rw-r--r--xmerge/source/regutil/regutil.dsp96
-rw-r--r--xmerge/source/regutil/regutil.dsw17
-rw-r--r--xmerge/source/wordsmith/build.xml76
-rw-r--r--xmerge/source/wordsmith/converter.xml17
-rw-r--r--xmerge/source/wordsmith/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/ConverterCapabilitiesImpl.java93
-rw-r--r--xmerge/source/wordsmith/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/DOCConstants.java61
-rw-r--r--xmerge/source/wordsmith/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/DocumentDeserializerImpl.java565
-rw-r--r--xmerge/source/wordsmith/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/DocumentMergerImpl.java99
-rw-r--r--xmerge/source/wordsmith/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/DocumentSerializerImpl.java536
-rw-r--r--xmerge/source/wordsmith/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/PluginFactoryImpl.java149
-rw-r--r--xmerge/source/wordsmith/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/WSDecoder.java352
-rw-r--r--xmerge/source/wordsmith/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/WSEncoder.java212
-rw-r--r--xmerge/source/wordsmith/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/Wse.java100
-rw-r--r--xmerge/source/wordsmith/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/WseColorTable.java247
-rw-r--r--xmerge/source/wordsmith/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/WseFontTable.java218
-rw-r--r--xmerge/source/wordsmith/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/WseHeader.java145
-rw-r--r--xmerge/source/wordsmith/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/WsePara.java299
-rw-r--r--xmerge/source/wordsmith/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/WseTextRun.java324
-rw-r--r--xmerge/source/wordsmith/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/textRecord.java115
-rw-r--r--xmerge/source/wordsmith/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/util.java68
-rw-r--r--xmerge/source/wordsmith/makefile.mk33
-rw-r--r--xmerge/source/xmerge/build.xml92
-rw-r--r--xmerge/source/xmerge/converter.dtd96
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/Convert.java327
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/ConvertData.java117
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/ConvertException.java45
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/ConverterCapabilities.java67
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/ConverterFactory.java124
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/Document.java99
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/DocumentDeserializer.java65
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/DocumentDeserializer2.java71
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/DocumentDeserializerFactory.java65
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/DocumentMerger.java93
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/DocumentMergerFactory.java63
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/DocumentSerializer.java67
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/DocumentSerializer2.java73
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/DocumentSerializerFactory.java63
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/MergeException.java45
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/PluginFactory.java193
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/Version.java88
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/converter/dom/DOMDocument.java412
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/converter/dom/package.html55
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/converter/palm/PalmDB.java469
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/converter/palm/PalmDocument.java177
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/converter/palm/PdbDecoder.java233
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/converter/palm/PdbEncoder.java196
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/converter/palm/PdbHeader.java162
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/converter/palm/PdbUtil.java105
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/converter/palm/Record.java216
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/converter/palm/package.html142
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/converter/xml/EmbeddedBinaryObject.java127
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/converter/xml/EmbeddedObject.java116
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/converter/xml/EmbeddedXMLObject.java295
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/converter/xml/OfficeConstants.java439
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/converter/xml/OfficeDocument.java1265
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/converter/xml/OfficeDocumentException.java130
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/converter/xml/OfficeZip.java458
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/converter/xml/ParaStyle.java601
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/converter/xml/Style.java227
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/converter/xml/StyleCatalog.java390
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/converter/xml/TextStyle.java679
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/converter/xml/package.html41
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/BookSettings.java228
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/CellStyle.java510
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/ColumnRowInfo.java195
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/ColumnStyle.java300
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/DocumentMergerImpl.java198
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/Format.java475
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/NameDefinition.java215
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/RowStyle.java300
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/SheetSettings.java373
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/SpreadsheetDecoder.java180
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/SpreadsheetEncoder.java129
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/SxcConstants.java49
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/SxcDocument.java92
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/SxcDocumentDeserializer.java792
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/SxcDocumentSerializer.java993
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/SxcPluginFactory.java82
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/package.html40
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/SxwDocument.java94
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/SxwPluginFactory.java76
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/package.html40
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/ConverterCapabilitiesImpl.java93
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/DocumentDeserializerImpl.java250
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/DocumentMergerImpl.java97
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/DocumentSerializerImpl.java297
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/GenericOfficeDocument.java93
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/PluginFactoryImpl.java202
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/XsltPlugin.properties37
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/package.html67
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/merger/DiffAlgorithm.java51
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/merger/Difference.java242
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/merger/Iterator.java123
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/merger/MergeAlgorithm.java61
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/merger/NodeMergeAlgorithm.java52
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/merger/diff/CellNodeIterator.java114
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/merger/diff/CharArrayLCSAlgorithm.java234
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/merger/diff/CharacterParser.java142
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/merger/diff/IteratorLCSAlgorithm.java236
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/merger/diff/IteratorRowCompare.java243
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/merger/diff/NodeIterator.java384
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/merger/diff/ObjectArrayIterator.java210
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/merger/diff/ParaNodeIterator.java90
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/merger/diff/RowIterator.java81
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/merger/diff/TextNodeEntry.java88
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/merger/diff/TextNodeIterator.java84
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/merger/diff/package.html43
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/merger/merge/CharacterBaseParagraphMerge.java310
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/merger/merge/DocumentMerge.java247
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/merger/merge/PositionBaseRowMerge.java260
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/merger/merge/SheetMerge.java89
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/merger/merge/SheetUtil.java107
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/merger/merge/package.html43
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/merger/package.html75
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/package.html113
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/test/ConverterInfoList.java105
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/test/ConverterInfoList.properties37
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/test/Driver.java318
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/util/ActiveSyncDriver.java144
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/util/ColourConverter.java446
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/util/Debug.java339
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/util/Debug.properties39
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/util/EndianConverter.java178
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/util/IntArrayList.java147
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/util/OfficeUtil.java135
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/util/Resources.java99
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/util/TwipsConverter.java99
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/util/XmlUtil.java189
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/util/package.html39
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/util/registry/ConverterInfo.java436
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/util/registry/ConverterInfoMgr.java536
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/util/registry/ConverterInfoReader.java279
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/util/registry/RegistryException.java47
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/util/registry/build.xml135
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/util/registry/package.html82
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/util/resources.properties69
-rw-r--r--xmerge/source/xmerge/makefile.mk34
-rw-r--r--xmerge/util/build.xml94
-rw-r--r--xmerge/util/makefile.mk34
-rw-r--r--xmerge/util/minicalc.mf3
-rw-r--r--xmerge/util/xmerge.mf8
-rw-r--r--xmerge/workben/XmlDiff.java458
-rw-r--r--xmerge/workben/XmlDiff.properties40
-rw-r--r--xmerge/workben/build.xml128
-rw-r--r--xmerge/workben/jstyle.pl541
-rw-r--r--xmerge/workben/makefile.mk32
-rw-r--r--xml2cmp/prj/build.lst7
-rw-r--r--xml2cmp/prj/d.lst4
-rw-r--r--xml2cmp/source/finder/dep_main.cxx95
-rw-r--r--xml2cmp/source/finder/dependy.cxx224
-rw-r--r--xml2cmp/source/finder/dependy.hxx116
-rw-r--r--xml2cmp/source/finder/makefile.mk69
-rw-r--r--xml2cmp/source/inc/lst_str.h99
-rw-r--r--xml2cmp/source/inc/new_del.h55
-rw-r--r--xml2cmp/source/inc/precomp.h55
-rw-r--r--xml2cmp/source/inc/str.h71
-rw-r--r--xml2cmp/source/inc/textbuff.h85
-rw-r--r--xml2cmp/source/inc/textfile.h76
-rw-r--r--xml2cmp/source/support/badcast.cxx45
-rw-r--r--xml2cmp/source/support/cmdline.cxx222
-rw-r--r--xml2cmp/source/support/cmdline.hxx86
-rw-r--r--xml2cmp/source/support/heap.cxx207
-rw-r--r--xml2cmp/source/support/heap.hxx91
-rw-r--r--xml2cmp/source/support/list.hxx251
-rw-r--r--xml2cmp/source/support/makefile.mk61
-rw-r--r--xml2cmp/source/support/sistr.cxx400
-rw-r--r--xml2cmp/source/support/sistr.hxx148
-rw-r--r--xml2cmp/source/support/syshelp.cxx314
-rw-r--r--xml2cmp/source/support/syshelp.hxx85
-rw-r--r--xml2cmp/source/x2cclass/x2cstl.hxx47
-rw-r--r--xml2cmp/source/x2cclass/xml_cd.hxx85
-rw-r--r--xml2cmp/source/x2cclass/xml_cdff.cxx231
-rw-r--r--xml2cmp/source/x2cclass/xml_cdff.hxx104
-rw-r--r--xml2cmp/source/x2cclass/xml_cdim.cxx183
-rw-r--r--xml2cmp/source/x2cclass/xml_cdim.hxx113
-rw-r--r--xml2cmp/source/xcd/cr_html.cxx268
-rw-r--r--xml2cmp/source/xcd/cr_html.hxx99
-rw-r--r--xml2cmp/source/xcd/cr_index.cxx275
-rw-r--r--xml2cmp/source/xcd/cr_index.hxx92
-rw-r--r--xml2cmp/source/xcd/cr_metho.cxx106
-rw-r--r--xml2cmp/source/xcd/cr_metho.hxx37
-rw-r--r--xml2cmp/source/xcd/filebuff.cxx63
-rw-r--r--xml2cmp/source/xcd/filebuff.hxx54
-rw-r--r--xml2cmp/source/xcd/main.cxx326
-rw-r--r--xml2cmp/source/xcd/makefile.mk79
-rw-r--r--xml2cmp/source/xcd/parse.cxx452
-rw-r--r--xml2cmp/source/xcd/parse.hxx143
-rw-r--r--xml2cmp/source/xcd/xmlelem.cxx264
-rw-r--r--xml2cmp/source/xcd/xmlelem.hxx241
-rw-r--r--xml2cmp/source/xcd/xmltree.cxx286
-rw-r--r--xml2cmp/source/xcd/xmltree.hxx146
-rw-r--r--xml2cmp/util/makefile.mk58
-rw-r--r--xmlhelp/inc/makefile.mk47
-rw-r--r--xmlhelp/inc/pch/precompiled_xmlhelp.cxx29
-rw-r--r--xmlhelp/inc/pch/precompiled_xmlhelp.hxx32
-rw-r--r--xmlhelp/prj/build.lst9
-rw-r--r--xmlhelp/prj/d.lst10
-rwxr-xr-xxmlhelp/source/com/sun/star/help/HelpComponent.java135
-rw-r--r--xmlhelp/source/com/sun/star/help/HelpIndexer.java186
-rw-r--r--xmlhelp/source/com/sun/star/help/HelpSearch.java344
-rw-r--r--xmlhelp/source/com/sun/star/help/MANIFEST.MF1
-rw-r--r--xmlhelp/source/com/sun/star/help/helplinker.pmk31
-rw-r--r--xmlhelp/source/com/sun/star/help/makefile.mk82
-rw-r--r--xmlhelp/source/cxxhelp/inc/db/EntryProcessor.hxx52
-rw-r--r--xmlhelp/source/cxxhelp/inc/excep/XmlSearchExceptions.hxx107
-rw-r--r--xmlhelp/source/cxxhelp/inc/qe/DocGenerator.hxx104
-rw-r--r--xmlhelp/source/cxxhelp/inc/qe/Query.hxx175
-rw-r--r--xmlhelp/source/cxxhelp/inc/util/CompressorIterator.hxx49
-rw-r--r--xmlhelp/source/cxxhelp/inc/util/ConceptList.hxx70
-rw-r--r--xmlhelp/source/cxxhelp/inc/util/Decompressor.hxx151
-rw-r--r--xmlhelp/source/cxxhelp/inc/util/RandomAccessStream.hxx63
-rw-r--r--xmlhelp/source/cxxhelp/provider/bufferedinputstream.cxx233
-rw-r--r--xmlhelp/source/cxxhelp/provider/bufferedinputstream.hxx113
-rw-r--r--xmlhelp/source/cxxhelp/provider/content.cxx578
-rw-r--r--xmlhelp/source/cxxhelp/provider/content.hxx152
-rw-r--r--xmlhelp/source/cxxhelp/provider/contentcaps.cxx247
-rw-r--r--xmlhelp/source/cxxhelp/provider/databases.cxx2267
-rw-r--r--xmlhelp/source/cxxhelp/provider/databases.hxx560
-rw-r--r--xmlhelp/source/cxxhelp/provider/db.cxx664
-rw-r--r--xmlhelp/source/cxxhelp/provider/db.hxx250
-rw-r--r--xmlhelp/source/cxxhelp/provider/inputstream.cxx223
-rw-r--r--xmlhelp/source/cxxhelp/provider/inputstream.hxx144
-rw-r--r--xmlhelp/source/cxxhelp/provider/makefile.mk97
-rw-r--r--xmlhelp/source/cxxhelp/provider/provider.cxx510
-rw-r--r--xmlhelp/source/cxxhelp/provider/provider.hxx187
-rw-r--r--xmlhelp/source/cxxhelp/provider/resultset.cxx90
-rw-r--r--xmlhelp/source/cxxhelp/provider/resultset.hxx67
-rw-r--r--xmlhelp/source/cxxhelp/provider/resultsetbase.cxx656
-rw-r--r--xmlhelp/source/cxxhelp/provider/resultsetbase.hxx576
-rw-r--r--xmlhelp/source/cxxhelp/provider/resultsetfactory.hxx27
-rw-r--r--xmlhelp/source/cxxhelp/provider/resultsetforquery.cxx449
-rw-r--r--xmlhelp/source/cxxhelp/provider/resultsetforquery.hxx65
-rw-r--r--xmlhelp/source/cxxhelp/provider/resultsetforroot.cxx82
-rw-r--r--xmlhelp/source/cxxhelp/provider/resultsetforroot.hxx65
-rw-r--r--xmlhelp/source/cxxhelp/provider/services.cxx132
-rw-r--r--xmlhelp/source/cxxhelp/provider/urlparameter.cxx1243
-rw-r--r--xmlhelp/source/cxxhelp/provider/urlparameter.hxx258
-rw-r--r--xmlhelp/source/cxxhelp/qe/DocGenerator.cxx61
-rw-r--r--xmlhelp/source/cxxhelp/qe/makefile.mk49
-rw-r--r--xmlhelp/source/cxxhelp/test/abidebug.hxx32
-rw-r--r--xmlhelp/source/cxxhelp/test/makefile.mk69
-rw-r--r--xmlhelp/source/cxxhelp/test/searchdemo.cxx117
-rw-r--r--xmlhelp/source/cxxhelp/util/Decompressor.cxx55
-rw-r--r--xmlhelp/source/cxxhelp/util/makefile.mk50
-rw-r--r--xmlhelp/source/treeview/makefile.mk69
-rw-r--r--xmlhelp/source/treeview/tvfactory.cxx355
-rw-r--r--xmlhelp/source/treeview/tvfactory.hxx138
-rw-r--r--xmlhelp/source/treeview/tvread.cxx1320
-rw-r--r--xmlhelp/source/treeview/tvread.hxx404
-rw-r--r--xmlhelp/util/delzip0
-rw-r--r--xmlhelp/util/embed.xsl83
-rw-r--r--xmlhelp/util/idxcaption.xsl34
-rw-r--r--xmlhelp/util/idxcontent.xsl104
-rw-r--r--xmlhelp/util/main_transform.xsl972
-rw-r--r--xmlhelp/util/makefile.mk84
-rw-r--r--xmlhelp/util/ucpchelp.xml97
-rw-r--r--xmloff/dtd/Blocklist.dtd34
-rw-r--r--xmloff/dtd/chart.mod262
-rw-r--r--xmloff/dtd/datastyl.mod208
-rw-r--r--xmloff/dtd/defs.mod56
-rw-r--r--xmloff/dtd/drawing.mod861
-rw-r--r--xmloff/dtd/dtypes.mod143
-rw-r--r--xmloff/dtd/form.mod366
-rw-r--r--xmloff/dtd/meta.mod90
-rw-r--r--xmloff/dtd/nmspace.mod53
-rw-r--r--xmloff/dtd/office.dtd56
-rw-r--r--xmloff/dtd/office.mod245
-rw-r--r--xmloff/dtd/openoffice-2.0-schema.rng92
-rw-r--r--xmloff/dtd/script.mod59
-rw-r--r--xmloff/dtd/settings.mod49
-rw-r--r--xmloff/dtd/style.mod427
-rw-r--r--xmloff/dtd/table.mod496
-rw-r--r--xmloff/dtd/text.mod1099
-rw-r--r--xmloff/inc/AttributeContainerHandler.hxx47
-rw-r--r--xmloff/inc/DashStyle.hxx73
-rw-r--r--xmloff/inc/DomBuilderContext.hxx109
-rw-r--r--xmloff/inc/DomExport.hxx43
-rw-r--r--xmloff/inc/EnhancedCustomShapeToken.hxx166
-rw-r--r--xmloff/inc/GradientStyle.hxx74
-rw-r--r--xmloff/inc/HatchStyle.hxx71
-rw-r--r--xmloff/inc/ImageStyle.hxx60
-rw-r--r--xmloff/inc/MarkerStyle.hxx73
-rw-r--r--xmloff/inc/MetaExportComponent.hxx83
-rw-r--r--xmloff/inc/MetaImportComponent.hxx83
-rw-r--r--xmloff/inc/MultiPropertySetHelper.hxx204
-rw-r--r--xmloff/inc/PageMasterImportContext.hxx67
-rw-r--r--xmloff/inc/PropertySetMerger.hxx38
-rw-r--r--xmloff/inc/RDFaExportHelper.hxx78
-rw-r--r--xmloff/inc/RDFaImportHelper.hxx104
-rw-r--r--xmloff/inc/SchXMLExport.hxx90
-rw-r--r--xmloff/inc/SchXMLImport.hxx220
-rw-r--r--xmloff/inc/StyleMap.hxx95
-rw-r--r--xmloff/inc/TransGradientStyle.hxx70
-rw-r--r--xmloff/inc/VisAreaContext.hxx69
-rw-r--r--xmloff/inc/VisAreaExport.hxx55
-rw-r--r--xmloff/inc/XMLBackgroundImageContext.hxx83
-rw-r--r--xmloff/inc/XMLBackgroundImageExport.hxx65
-rw-r--r--xmloff/inc/XMLBase64Export.hxx60
-rw-r--r--xmloff/inc/XMLBasicExportFilter.hxx72
-rw-r--r--xmloff/inc/XMLBitmapLogicalSizePropertyHandler.hxx62
-rw-r--r--xmloff/inc/XMLBitmapRepeatOffsetPropertyHandler.hxx65
-rw-r--r--xmloff/inc/XMLChartPropertySetMapper.hxx127
-rw-r--r--xmloff/inc/XMLChartStyleContext.hxx67
-rw-r--r--xmloff/inc/XMLClipPropertyHandler.hxx48
-rw-r--r--xmloff/inc/XMLElementPropertyContext.hxx68
-rw-r--r--xmloff/inc/XMLEmbeddedObjectExportFilter.hxx92
-rw-r--r--xmloff/inc/XMLEmbeddedObjectImportContext.hxx79
-rw-r--r--xmloff/inc/XMLEventImportHelper.hxx106
-rw-r--r--xmloff/inc/XMLFillBitmapSizePropertyHandler.hxx62
-rw-r--r--xmloff/inc/XMLFilterServiceNames.h46
-rw-r--r--xmloff/inc/XMLFootnoteConfigurationImportContext.hxx121
-rw-r--r--xmloff/inc/XMLImageMapContext.hxx76
-rw-r--r--xmloff/inc/XMLImageMapExport.hxx119
-rw-r--r--xmloff/inc/XMLIndexBibliographyConfigurationContext.hxx107
-rw-r--r--xmloff/inc/XMLIsPercentagePropertyHandler.hxx52
-rw-r--r--xmloff/inc/XMLLineNumberingImportContext.hxx126
-rw-r--r--xmloff/inc/XMLNumberStylesImport.hxx79
-rw-r--r--xmloff/inc/XMLPercentOrMeasurePropertyHandler.hxx54
-rw-r--r--xmloff/inc/XMLRectangleMembersHandler.hxx64
-rw-r--r--xmloff/inc/XMLReplacementImageContext.hxx72
-rw-r--r--xmloff/inc/XMLScriptContextFactory.hxx67
-rw-r--r--xmloff/inc/XMLScriptExportHandler.hxx59
-rw-r--r--xmloff/inc/XMLShapePropertySetContext.hxx62
-rw-r--r--xmloff/inc/XMLStarBasicContextFactory.hxx68
-rw-r--r--xmloff/inc/XMLStarBasicExportHandler.hxx63
-rw-r--r--xmloff/inc/XMLStringBufferImportContext.hxx71
-rw-r--r--xmloff/inc/XMLTextColumnsContext.hxx79
-rw-r--r--xmloff/inc/XMLTextColumnsExport.hxx58
-rw-r--r--xmloff/inc/XMLTextColumnsPropertyHandler.hxx56
-rw-r--r--xmloff/inc/XMLTextHeaderFooterContext.hxx77
-rw-r--r--xmloff/inc/XMLTextListAutoStylePool.hxx84
-rw-r--r--xmloff/inc/anim.hxx104
-rw-r--r--xmloff/inc/animationexport.hxx56
-rw-r--r--xmloff/inc/animationimport.hxx72
-rw-r--r--xmloff/inc/animations.hxx67
-rw-r--r--xmloff/inc/animimp.hxx57
-rw-r--r--xmloff/inc/functional.hxx27
-rw-r--r--xmloff/inc/i18nmap.hxx69
-rw-r--r--xmloff/inc/makefile.mk48
-rw-r--r--xmloff/inc/numehelp.hxx129
-rw-r--r--xmloff/inc/pch/precompiled_xmloff.cxx29
-rw-r--r--xmloff/inc/pch/precompiled_xmloff.hxx480
-rw-r--r--xmloff/inc/txtflde.hxx546
-rw-r--r--xmloff/inc/txtfldi.hxx1593
-rw-r--r--xmloff/inc/txtimppr.hxx81
-rw-r--r--xmloff/inc/txtlists.hxx194
-rw-r--r--xmloff/inc/txtvfldi.hxx618
-rw-r--r--xmloff/inc/unoatrcn.hxx89
-rw-r--r--xmloff/inc/unointerfacetouniqueidentifiermapper.hxx52
-rw-r--r--xmloff/inc/xexptran.hxx201
-rw-r--r--xmloff/inc/xformsexport.hxx60
-rw-r--r--xmloff/inc/xformsimport.hxx91
-rw-r--r--xmloff/inc/xmlcnitm.hxx90
-rw-r--r--xmloff/inc/xmlehelp.hxx51
-rw-r--r--xmloff/inc/xmlerror.hxx166
-rw-r--r--xmloff/inc/xmlnmspe.hxx109
-rw-r--r--xmloff/inc/xmloff/DocumentSettingsContext.hxx63
-rw-r--r--xmloff/inc/xmloff/EnumPropertyHdl.hxx52
-rw-r--r--xmloff/inc/xmloff/NamedBoolPropertyHdl.hxx62
-rw-r--r--xmloff/inc/xmloff/PageMasterStyleMap.hxx155
-rw-r--r--xmloff/inc/xmloff/ProgressBarHelper.hxx78
-rw-r--r--xmloff/inc/xmloff/PropertySetInfoHash.hxx65
-rw-r--r--xmloff/inc/xmloff/PropertySetInfoKey.hxx67
-rw-r--r--xmloff/inc/xmloff/SchXMLExportHelper.hxx73
-rw-r--r--xmloff/inc/xmloff/SchXMLImportHelper.hxx169
-rw-r--r--xmloff/inc/xmloff/SettingsExportHelper.hxx111
-rw-r--r--xmloff/inc/xmloff/SinglePropertySetInfoCache.hxx79
-rw-r--r--xmloff/inc/xmloff/WordWrapPropertyHdl.hxx53
-rw-r--r--xmloff/inc/xmloff/XMLBase64ImportContext.hxx64
-rw-r--r--xmloff/inc/xmloff/XMLCharContext.hxx71
-rw-r--r--xmloff/inc/xmloff/XMLConstantsPropertyHandler.hxx69
-rw-r--r--xmloff/inc/xmloff/XMLEventExport.hxx139
-rw-r--r--xmloff/inc/xmloff/XMLEventsImportContext.hxx138
-rw-r--r--xmloff/inc/xmloff/XMLFontAutoStylePool.hxx75
-rw-r--r--xmloff/inc/xmloff/XMLFontStylesContext.hxx99
-rw-r--r--xmloff/inc/xmloff/XMLGraphicsDefaultStyle.hxx63
-rw-r--r--xmloff/inc/xmloff/XMLPageExport.hxx114
-rw-r--r--xmloff/inc/xmloff/XMLSettingsExportContext.hxx66
-rw-r--r--xmloff/inc/xmloff/XMLShapeStyleContext.hxx76
-rw-r--r--xmloff/inc/xmloff/XMLStringVector.hxx39
-rw-r--r--xmloff/inc/xmloff/XMLTextMasterPageContext.hxx92
-rw-r--r--xmloff/inc/xmloff/XMLTextMasterPageExport.hxx71
-rw-r--r--xmloff/inc/xmloff/XMLTextMasterStylesContext.hxx62
-rw-r--r--xmloff/inc/xmloff/XMLTextShapeStyleContext.hxx72
-rw-r--r--xmloff/inc/xmloff/XMLTextTableContext.hxx59
-rw-r--r--xmloff/inc/xmloff/animexp.hxx52
-rw-r--r--xmloff/inc/xmloff/attrlist.hxx93
-rw-r--r--xmloff/inc/xmloff/contextid.hxx54
-rw-r--r--xmloff/inc/xmloff/controlpropertyhdl.hxx143
-rw-r--r--xmloff/inc/xmloff/dllapi.h40
-rw-r--r--xmloff/inc/xmloff/families.hxx116
-rw-r--r--xmloff/inc/xmloff/formlayerexport.hxx212
-rw-r--r--xmloff/inc/xmloff/formlayerimport.hxx171
-rw-r--r--xmloff/inc/xmloff/formsimp.hxx49
-rw-r--r--xmloff/inc/xmloff/maptype.hxx74
-rw-r--r--xmloff/inc/xmloff/nmspmap.hxx185
-rw-r--r--xmloff/inc/xmloff/odffields.hxx56
-rw-r--r--xmloff/inc/xmloff/prhdlfac.hxx111
-rw-r--r--xmloff/inc/xmloff/prstylei.hxx109
-rw-r--r--xmloff/inc/xmloff/shapeexport.hxx342
-rw-r--r--xmloff/inc/xmloff/shapeimport.hxx439
-rw-r--r--xmloff/inc/xmloff/styleexp.hxx142
-rw-r--r--xmloff/inc/xmloff/table/XMLTableExport.hxx112
-rw-r--r--xmloff/inc/xmloff/table/XMLTableImport.hxx78
-rw-r--r--xmloff/inc/xmloff/txtimp.hxx758
-rw-r--r--xmloff/inc/xmloff/txtparae.hxx745
-rw-r--r--xmloff/inc/xmloff/txtprmap.hxx202
-rw-r--r--xmloff/inc/xmloff/txtstyle.hxx60
-rw-r--r--xmloff/inc/xmloff/txtstyli.hxx120
-rw-r--r--xmloff/inc/xmloff/uniref.hxx229
-rw-r--r--xmloff/inc/xmloff/xmlaustp.hxx137
-rw-r--r--xmloff/inc/xmloff/xmlcnimp.hxx129
-rw-r--r--xmloff/inc/xmloff/xmlement.hxx60
-rw-r--r--xmloff/inc/xmloff/xmlevent.hxx152
-rw-r--r--xmloff/inc/xmloff/xmlexp.hxx733
-rw-r--r--xmloff/inc/xmloff/xmlexppr.hxx204
-rw-r--r--xmloff/inc/xmloff/xmlictxt.hxx108
-rw-r--r--xmloff/inc/xmloff/xmlimp.hxx536
-rw-r--r--xmloff/inc/xmloff/xmlimppr.hxx211
-rw-r--r--xmloff/inc/xmloff/xmlmetae.hxx127
-rw-r--r--xmloff/inc/xmloff/xmlmetai.hxx84
-rw-r--r--xmloff/inc/xmloff/xmlnume.hxx116
-rw-r--r--xmloff/inc/xmloff/xmlnumfe.hxx140
-rw-r--r--xmloff/inc/xmloff/xmlnumfi.hxx233
-rw-r--r--xmloff/inc/xmloff/xmlnumi.hxx111
-rw-r--r--xmloff/inc/xmloff/xmlprcon.hxx78
-rw-r--r--xmloff/inc/xmloff/xmlprhdl.hxx64
-rw-r--r--xmloff/inc/xmloff/xmlprmap.hxx189
-rw-r--r--xmloff/inc/xmloff/xmlscripti.hxx61
-rw-r--r--xmloff/inc/xmloff/xmlstyle.hxx269
-rw-r--r--xmloff/inc/xmloff/xmltkmap.hxx67
-rw-r--r--xmloff/inc/xmloff/xmltoken.hxx3139
-rw-r--r--xmloff/inc/xmloff/xmltypes.hxx286
-rw-r--r--xmloff/inc/xmloff/xmluconv.hxx445
-rw-r--r--xmloff/inc/xmlreg.hxx43
-rw-r--r--xmloff/inc/xmltabe.hxx60
-rw-r--r--xmloff/inc/xmltabi.hxx65
-rw-r--r--xmloff/inc/xmlversion.hxx155
-rw-r--r--xmloff/prj/build.lst17
-rw-r--r--xmloff/prj/d.lst118
-rw-r--r--xmloff/qa/unoapi/Test.java51
-rw-r--r--xmloff/qa/unoapi/knownissues.xcl16
-rw-r--r--xmloff/qa/unoapi/makefile.mk48
-rw-r--r--xmloff/qa/unoapi/testdocuments/emptyChart.sdsbin0 -> 44544 bytes
-rw-r--r--xmloff/qa/unoapi/xmloff.sce26
-rw-r--r--xmloff/source/chart/ColorPropertySet.cxx225
-rw-r--r--xmloff/source/chart/ColorPropertySet.hxx126
-rw-r--r--xmloff/source/chart/MultiPropertySetHandler.hxx294
-rw-r--r--xmloff/source/chart/PropertyMap.hxx325
-rw-r--r--xmloff/source/chart/PropertyMaps.cxx618
-rw-r--r--xmloff/source/chart/SchXMLAutoStylePoolP.cxx91
-rw-r--r--xmloff/source/chart/SchXMLAutoStylePoolP.hxx53
-rwxr-xr-xxmloff/source/chart/SchXMLCalculationSettingsContext.cxx86
-rwxr-xr-xxmloff/source/chart/SchXMLCalculationSettingsContext.hxx51
-rw-r--r--xmloff/source/chart/SchXMLChartContext.cxx1432
-rw-r--r--xmloff/source/chart/SchXMLChartContext.hxx189
-rw-r--r--xmloff/source/chart/SchXMLExport.cxx4037
-rw-r--r--xmloff/source/chart/SchXMLImport.cxx960
-rw-r--r--xmloff/source/chart/SchXMLParagraphContext.cxx118
-rw-r--r--xmloff/source/chart/SchXMLParagraphContext.hxx64
-rw-r--r--xmloff/source/chart/SchXMLPlotAreaContext.cxx2130
-rw-r--r--xmloff/source/chart/SchXMLPlotAreaContext.hxx391
-rw-r--r--xmloff/source/chart/SchXMLSeries2Context.cxx1073
-rw-r--r--xmloff/source/chart/SchXMLSeries2Context.hxx135
-rw-r--r--xmloff/source/chart/SchXMLSeriesHelper.cxx301
-rw-r--r--xmloff/source/chart/SchXMLSeriesHelper.hxx80
-rw-r--r--xmloff/source/chart/SchXMLTableContext.cxx1218
-rw-r--r--xmloff/source/chart/SchXMLTableContext.hxx229
-rwxr-xr-xxmloff/source/chart/SchXMLTextListContext.cxx136
-rwxr-xr-xxmloff/source/chart/SchXMLTextListContext.hxx58
-rw-r--r--xmloff/source/chart/SchXMLTools.cxx897
-rw-r--r--xmloff/source/chart/SchXMLTools.hxx152
-rw-r--r--xmloff/source/chart/XMLAxisPositionPropertyHdl.cxx128
-rw-r--r--xmloff/source/chart/XMLAxisPositionPropertyHdl.hxx45
-rw-r--r--xmloff/source/chart/XMLChartPropertyContext.cxx82
-rw-r--r--xmloff/source/chart/XMLChartPropertyContext.hxx58
-rw-r--r--xmloff/source/chart/XMLChartStyleContext.cxx161
-rw-r--r--xmloff/source/chart/XMLErrorBarStylePropertyHdl.cxx68
-rw-r--r--xmloff/source/chart/XMLErrorBarStylePropertyHdl.hxx41
-rw-r--r--xmloff/source/chart/XMLErrorIndicatorPropertyHdl.cxx105
-rw-r--r--xmloff/source/chart/XMLErrorIndicatorPropertyHdl.hxx46
-rw-r--r--xmloff/source/chart/XMLLabelSeparatorContext.cxx87
-rw-r--r--xmloff/source/chart/XMLLabelSeparatorContext.hxx54
-rw-r--r--xmloff/source/chart/XMLSymbolImageContext.cxx150
-rw-r--r--xmloff/source/chart/XMLSymbolImageContext.hxx59
-rw-r--r--xmloff/source/chart/XMLSymbolTypePropertyHdl.cxx170
-rw-r--r--xmloff/source/chart/XMLSymbolTypePropertyHdl.hxx46
-rw-r--r--xmloff/source/chart/XMLTextOrientationHdl.cxx80
-rw-r--r--xmloff/source/chart/XMLTextOrientationHdl.hxx46
-rw-r--r--xmloff/source/chart/contexts.cxx233
-rw-r--r--xmloff/source/chart/contexts.hxx115
-rw-r--r--xmloff/source/chart/makefile.mk70
-rw-r--r--xmloff/source/chart/transporttypes.cxx38
-rw-r--r--xmloff/source/chart/transporttypes.hxx222
-rw-r--r--xmloff/source/core/DocumentSettingsContext.cxx1014
-rw-r--r--xmloff/source/core/DomBuilderContext.cxx264
-rw-r--r--xmloff/source/core/DomExport.cxx305
-rw-r--r--xmloff/source/core/ProgressBarHelper.cxx139
-rw-r--r--xmloff/source/core/PropertySetMerger.cxx267
-rw-r--r--xmloff/source/core/RDFaExportHelper.cxx231
-rw-r--r--xmloff/source/core/RDFaImportHelper.cxx501
-rw-r--r--xmloff/source/core/SettingsExportHelper.cxx561
-rw-r--r--xmloff/source/core/XMLBase64Export.cxx95
-rw-r--r--xmloff/source/core/XMLBase64ImportContext.cxx91
-rw-r--r--xmloff/source/core/XMLBasicExportFilter.cxx125
-rw-r--r--xmloff/source/core/XMLEmbeddedObjectExportFilter.cxx182
-rw-r--r--xmloff/source/core/XMLEmbeddedObjectImportContext.cxx395
-rw-r--r--xmloff/source/core/attrlist.cxx301
-rw-r--r--xmloff/source/core/facreg.cxx394
-rw-r--r--xmloff/source/core/i18nmap.cxx126
-rw-r--r--xmloff/source/core/makefile.mk76
-rw-r--r--xmloff/source/core/nmspmap.cxx593
-rw-r--r--xmloff/source/core/unoatrcn.cxx315
-rw-r--r--xmloff/source/core/unointerfacetouniqueidentifiermapper.cxx171
-rw-r--r--xmloff/source/core/xmlcnitm.cxx218
-rw-r--r--xmloff/source/core/xmlehelp.cxx500
-rw-r--r--xmloff/source/core/xmlenums.hxx55
-rw-r--r--xmloff/source/core/xmlerror.cxx257
-rw-r--r--xmloff/source/core/xmlexp.cxx2759
-rw-r--r--xmloff/source/core/xmlictxt.cxx84
-rw-r--r--xmloff/source/core/xmlimp.cxx2015
-rw-r--r--xmloff/source/core/xmltkmap.cxx122
-rw-r--r--xmloff/source/core/xmltoken.cxx3196
-rw-r--r--xmloff/source/core/xmluconv.cxx2306
-rw-r--r--xmloff/source/draw/EnhancedCustomShapeToken.cxx221
-rw-r--r--xmloff/source/draw/XMLGraphicsDefaultStyle.cxx111
-rw-r--r--xmloff/source/draw/XMLImageMapContext.cxx723
-rw-r--r--xmloff/source/draw/XMLImageMapExport.cxx386
-rw-r--r--xmloff/source/draw/XMLNumberStyles.cxx743
-rw-r--r--xmloff/source/draw/XMLNumberStylesExport.hxx53
-rw-r--r--xmloff/source/draw/XMLReplacementImageContext.cxx136
-rw-r--r--xmloff/source/draw/XMLShapePropertySetContext.cxx116
-rw-r--r--xmloff/source/draw/XMLShapeStyleContext.cxx326
-rw-r--r--xmloff/source/draw/animationexport.cxx1782
-rw-r--r--xmloff/source/draw/animationimport.cxx1523
-rw-r--r--xmloff/source/draw/animexp.cxx553
-rw-r--r--xmloff/source/draw/animimp.cxx694
-rw-r--r--xmloff/source/draw/descriptionimp.cxx93
-rw-r--r--xmloff/source/draw/descriptionimp.hxx60
-rw-r--r--xmloff/source/draw/eventimp.cxx575
-rw-r--r--xmloff/source/draw/eventimp.hxx57
-rw-r--r--xmloff/source/draw/layerexp.cxx109
-rw-r--r--xmloff/source/draw/layerexp.hxx40
-rw-r--r--xmloff/source/draw/layerimp.cxx180
-rw-r--r--xmloff/source/draw/layerimp.hxx58
-rw-r--r--xmloff/source/draw/makefile.mk85
-rw-r--r--xmloff/source/draw/numithdl.cxx63
-rw-r--r--xmloff/source/draw/numithdl.hxx52
-rw-r--r--xmloff/source/draw/propimp0.cxx272
-rw-r--r--xmloff/source/draw/propimp0.hxx78
-rw-r--r--xmloff/source/draw/sdpropls.cxx1764
-rw-r--r--xmloff/source/draw/sdpropls.hxx334
-rw-r--r--xmloff/source/draw/sdxmlexp.cxx2991
-rw-r--r--xmloff/source/draw/sdxmlexp_impl.hxx228
-rw-r--r--xmloff/source/draw/sdxmlimp.cxx1099
-rw-r--r--xmloff/source/draw/sdxmlimp_impl.hxx339
-rw-r--r--xmloff/source/draw/shapeexport.cxx1303
-rw-r--r--xmloff/source/draw/shapeexport2.cxx2056
-rw-r--r--xmloff/source/draw/shapeexport3.cxx498
-rw-r--r--xmloff/source/draw/shapeexport4.cxx1236
-rw-r--r--xmloff/source/draw/shapeimport.cxx1466
-rw-r--r--xmloff/source/draw/viewcontext.cxx91
-rw-r--r--xmloff/source/draw/viewcontext.hxx54
-rw-r--r--xmloff/source/draw/xexptran.cxx3117
-rw-r--r--xmloff/source/draw/ximp3dobject.cxx613
-rw-r--r--xmloff/source/draw/ximp3dobject.hxx179
-rw-r--r--xmloff/source/draw/ximp3dscene.cxx497
-rw-r--r--xmloff/source/draw/ximp3dscene.hxx81
-rw-r--r--xmloff/source/draw/ximpbody.cxx388
-rw-r--r--xmloff/source/draw/ximpbody.hxx79
-rw-r--r--xmloff/source/draw/ximpcustomshape.cxx1383
-rw-r--r--xmloff/source/draw/ximpcustomshape.hxx77
-rw-r--r--xmloff/source/draw/ximpgrp.cxx130
-rw-r--r--xmloff/source/draw/ximpgrp.hxx72
-rw-r--r--xmloff/source/draw/ximplink.cxx102
-rw-r--r--xmloff/source/draw/ximplink.hxx66
-rw-r--r--xmloff/source/draw/ximpnote.cxx142
-rw-r--r--xmloff/source/draw/ximpnote.hxx58
-rw-r--r--xmloff/source/draw/ximppage.cxx647
-rw-r--r--xmloff/source/draw/ximppage.hxx96
-rw-r--r--xmloff/source/draw/ximpshap.cxx3743
-rw-r--r--xmloff/source/draw/ximpshap.hxx664
-rw-r--r--xmloff/source/draw/ximpshow.cxx282
-rw-r--r--xmloff/source/draw/ximpshow.hxx57
-rw-r--r--xmloff/source/draw/ximpstyl.cxx1692
-rw-r--r--xmloff/source/draw/ximpstyl.hxx302
-rw-r--r--xmloff/source/forms/attriblistmerge.cxx170
-rw-r--r--xmloff/source/forms/attriblistmerge.hxx85
-rw-r--r--xmloff/source/forms/callbacks.hxx95
-rw-r--r--xmloff/source/forms/controlelement.cxx70
-rw-r--r--xmloff/source/forms/controlelement.hxx93
-rw-r--r--xmloff/source/forms/controlpropertyhdl.cxx390
-rw-r--r--xmloff/source/forms/controlpropertymap.cxx156
-rw-r--r--xmloff/source/forms/controlpropertymap.hxx68
-rw-r--r--xmloff/source/forms/elementexport.cxx2153
-rw-r--r--xmloff/source/forms/elementexport.hxx322
-rw-r--r--xmloff/source/forms/elementimport.cxx2038
-rw-r--r--xmloff/source/forms/elementimport.hxx752
-rw-r--r--xmloff/source/forms/elementimport_impl.hxx123
-rw-r--r--xmloff/source/forms/eventexport.cxx160
-rw-r--r--xmloff/source/forms/eventexport.hxx86
-rw-r--r--xmloff/source/forms/eventimport.cxx163
-rw-r--r--xmloff/source/forms/eventimport.hxx95
-rw-r--r--xmloff/source/forms/formattributes.cxx341
-rw-r--r--xmloff/source/forms/formattributes.hxx363
-rw-r--r--xmloff/source/forms/formcellbinding.cxx490
-rw-r--r--xmloff/source/forms/formcellbinding.hxx279
-rw-r--r--xmloff/source/forms/formenums.cxx348
-rw-r--r--xmloff/source/forms/formenums.hxx80
-rw-r--r--xmloff/source/forms/formevents.cxx85
-rw-r--r--xmloff/source/forms/formevents.hxx47
-rw-r--r--xmloff/source/forms/formlayerexport.cxx187
-rw-r--r--xmloff/source/forms/formlayerimport.cxx129
-rw-r--r--xmloff/source/forms/formsimp.cxx58
-rw-r--r--xmloff/source/forms/formstyles.cxx66
-rw-r--r--xmloff/source/forms/formstyles.hxx72
-rw-r--r--xmloff/source/forms/gridcolumnproptranslator.cxx345
-rw-r--r--xmloff/source/forms/gridcolumnproptranslator.hxx84
-rw-r--r--xmloff/source/forms/ifacecompare.hxx70
-rw-r--r--xmloff/source/forms/layerexport.cxx833
-rw-r--r--xmloff/source/forms/layerexport.hxx320
-rw-r--r--xmloff/source/forms/layerimport.cxx657
-rw-r--r--xmloff/source/forms/layerimport.hxx227
-rw-r--r--xmloff/source/forms/logging.cxx60
-rw-r--r--xmloff/source/forms/logging.hxx75
-rw-r--r--xmloff/source/forms/makefile.mk70
-rw-r--r--xmloff/source/forms/officeforms.cxx193
-rw-r--r--xmloff/source/forms/officeforms.hxx104
-rw-r--r--xmloff/source/forms/propertyexport.cxx729
-rw-r--r--xmloff/source/forms/propertyexport.hxx410
-rw-r--r--xmloff/source/forms/propertyimport.cxx641
-rw-r--r--xmloff/source/forms/propertyimport.hxx253
-rw-r--r--xmloff/source/forms/strings.cxx37
-rw-r--r--xmloff/source/forms/strings.hxx283
-rw-r--r--xmloff/source/forms/valueproperties.cxx203
-rw-r--r--xmloff/source/forms/valueproperties.hxx84
-rw-r--r--xmloff/source/meta/MetaExportComponent.cxx258
-rw-r--r--xmloff/source/meta/MetaImportComponent.cxx118
-rw-r--r--xmloff/source/meta/makefile.mk53
-rw-r--r--xmloff/source/meta/xmlmetae.cxx528
-rw-r--r--xmloff/source/meta/xmlmetai.cxx277
-rw-r--r--xmloff/source/meta/xmlversion.cxx541
-rw-r--r--xmloff/source/script/XMLEventExport.cxx367
-rw-r--r--xmloff/source/script/XMLEventImportHelper.cxx179
-rw-r--r--xmloff/source/script/XMLEventsImportContext.cxx247
-rw-r--r--xmloff/source/script/XMLScriptContextFactory.cxx102
-rw-r--r--xmloff/source/script/XMLScriptExportHandler.cxx88
-rw-r--r--xmloff/source/script/XMLStarBasicContextFactory.cxx139
-rw-r--r--xmloff/source/script/XMLStarBasicExportHandler.cxx111
-rw-r--r--xmloff/source/script/makefile.mk56
-rw-r--r--xmloff/source/script/xmlbasici.cxx197
-rw-r--r--xmloff/source/script/xmlbasici.hxx88
-rw-r--r--xmloff/source/script/xmlscripti.cxx188
-rw-r--r--xmloff/source/style/AttributeContainerHandler.cxx104
-rw-r--r--xmloff/source/style/DashStyle.cxx332
-rw-r--r--xmloff/source/style/DrawAspectHdl.cxx89
-rw-r--r--xmloff/source/style/DrawAspectHdl.hxx45
-rw-r--r--xmloff/source/style/EnumPropertyHdl.cxx98
-rw-r--r--xmloff/source/style/FillStyleContext.cxx361
-rw-r--r--xmloff/source/style/FillStyleContext.hxx167
-rw-r--r--xmloff/source/style/GradientStyle.cxx344
-rw-r--r--xmloff/source/style/HatchStyle.cxx263
-rw-r--r--xmloff/source/style/ImageStyle.cxx225
-rw-r--r--xmloff/source/style/MarkerStyle.cxx286
-rw-r--r--xmloff/source/style/MultiPropertySetHelper.cxx216
-rw-r--r--xmloff/source/style/NamedBoolPropertyHdl.cxx82
-rw-r--r--xmloff/source/style/PageHeaderFooterContext.cxx100
-rw-r--r--xmloff/source/style/PageHeaderFooterContext.hxx63
-rw-r--r--xmloff/source/style/PageMasterExportPropMapper.cxx444
-rw-r--r--xmloff/source/style/PageMasterExportPropMapper.hxx79
-rw-r--r--xmloff/source/style/PageMasterImportContext.cxx201
-rw-r--r--xmloff/source/style/PageMasterImportPropMapper.cxx341
-rw-r--r--xmloff/source/style/PageMasterImportPropMapper.hxx62
-rw-r--r--xmloff/source/style/PageMasterPropHdl.cxx426
-rw-r--r--xmloff/source/style/PageMasterPropHdl.hxx180
-rw-r--r--xmloff/source/style/PageMasterPropHdlFactory.cxx150
-rw-r--r--xmloff/source/style/PageMasterPropHdlFactory.hxx47
-rw-r--r--xmloff/source/style/PageMasterPropMapper.cxx63
-rw-r--r--xmloff/source/style/PageMasterPropMapper.hxx46
-rw-r--r--xmloff/source/style/PageMasterStyleMap.cxx191
-rw-r--r--xmloff/source/style/PagePropertySetContext.cxx144
-rw-r--r--xmloff/source/style/PagePropertySetContext.hxx66
-rw-r--r--xmloff/source/style/SinglePropertySetInfoCache.cxx89
-rw-r--r--xmloff/source/style/StyleMap.cxx94
-rw-r--r--xmloff/source/style/TransGradientStyle.cxx329
-rw-r--r--xmloff/source/style/VisAreaContext.cxx134
-rw-r--r--xmloff/source/style/VisAreaExport.cxx84
-rw-r--r--xmloff/source/style/WordWrapPropertyHdl.cxx102
-rw-r--r--xmloff/source/style/XMLBackgroundImageContext.cxx414
-rw-r--r--xmloff/source/style/XMLBackgroundImageExport.cxx174
-rw-r--r--xmloff/source/style/XMLBitmapLogicalSizePropertyHandler.cxx66
-rw-r--r--xmloff/source/style/XMLBitmapRepeatOffsetPropertyHandler.cxx105
-rw-r--r--xmloff/source/style/XMLClipPropertyHandler.cxx146
-rw-r--r--xmloff/source/style/XMLConstantsPropertyHandler.cxx113
-rw-r--r--xmloff/source/style/XMLElementPropertyContext.cxx60
-rw-r--r--xmloff/source/style/XMLFillBitmapSizePropertyHandler.cxx99
-rw-r--r--xmloff/source/style/XMLFontAutoStylePool.cxx294
-rw-r--r--xmloff/source/style/XMLFontStylesContext.cxx285
-rw-r--r--xmloff/source/style/XMLFootnoteSeparatorExport.cxx167
-rw-r--r--xmloff/source/style/XMLFootnoteSeparatorExport.hxx62
-rw-r--r--xmloff/source/style/XMLFootnoteSeparatorImport.cxx193
-rw-r--r--xmloff/source/style/XMLFootnoteSeparatorImport.hxx77
-rw-r--r--xmloff/source/style/XMLIsPercentagePropertyHandler.cxx62
-rw-r--r--xmloff/source/style/XMLPageExport.cxx282
-rw-r--r--xmloff/source/style/XMLPercentOrMeasurePropertyHandler.cxx98
-rw-r--r--xmloff/source/style/XMLRectangleMembersHandler.cxx125
-rw-r--r--xmloff/source/style/adjushdl.cxx136
-rw-r--r--xmloff/source/style/adjushdl.hxx57
-rw-r--r--xmloff/source/style/backhdl.cxx298
-rw-r--r--xmloff/source/style/backhdl.hxx53
-rw-r--r--xmloff/source/style/bordrhdl.cxx454
-rw-r--r--xmloff/source/style/bordrhdl.hxx55
-rw-r--r--xmloff/source/style/breakhdl.cxx193
-rw-r--r--xmloff/source/style/breakhdl.hxx57
-rw-r--r--xmloff/source/style/cdouthdl.cxx330
-rw-r--r--xmloff/source/style/cdouthdl.hxx72
-rw-r--r--xmloff/source/style/chrhghdl.cxx167
-rw-r--r--xmloff/source/style/chrhghdl.hxx64
-rw-r--r--xmloff/source/style/chrlohdl.cxx144
-rw-r--r--xmloff/source/style/chrlohdl.hxx59
-rw-r--r--xmloff/source/style/csmaphdl.cxx138
-rw-r--r--xmloff/source/style/csmaphdl.hxx54
-rw-r--r--xmloff/source/style/durationhdl.cxx81
-rw-r--r--xmloff/source/style/durationhdl.hxx45
-rw-r--r--xmloff/source/style/escphdl.cxx172
-rw-r--r--xmloff/source/style/escphdl.hxx55
-rw-r--r--xmloff/source/style/fonthdl.cxx319
-rw-r--r--xmloff/source/style/fonthdl.hxx82
-rw-r--r--xmloff/source/style/impastp1.cxx132
-rw-r--r--xmloff/source/style/impastp2.cxx61
-rw-r--r--xmloff/source/style/impastp3.cxx185
-rw-r--r--xmloff/source/style/impastp4.cxx527
-rw-r--r--xmloff/source/style/impastpl.hxx227
-rw-r--r--xmloff/source/style/kernihdl.cxx89
-rw-r--r--xmloff/source/style/kernihdl.hxx45
-rw-r--r--xmloff/source/style/lspachdl.cxx195
-rw-r--r--xmloff/source/style/lspachdl.hxx64
-rw-r--r--xmloff/source/style/makefile.mk219
-rw-r--r--xmloff/source/style/numehelp.cxx558
-rw-r--r--xmloff/source/style/opaquhdl.cxx82
-rw-r--r--xmloff/source/style/opaquhdl.hxx45
-rw-r--r--xmloff/source/style/postuhdl.cxx93
-rw-r--r--xmloff/source/style/postuhdl.hxx45
-rw-r--r--xmloff/source/style/prhdlfac.cxx450
-rw-r--r--xmloff/source/style/prstylei.cxx422
-rw-r--r--xmloff/source/style/shadwhdl.cxx175
-rw-r--r--xmloff/source/style/shadwhdl.hxx45
-rw-r--r--xmloff/source/style/shdwdhdl.cxx84
-rw-r--r--xmloff/source/style/shdwdhdl.hxx45
-rw-r--r--xmloff/source/style/styleexp.cxx566
-rw-r--r--xmloff/source/style/tabsthdl.cxx92
-rw-r--r--xmloff/source/style/tabsthdl.hxx48
-rw-r--r--xmloff/source/style/undlihdl.cxx381
-rw-r--r--xmloff/source/style/undlihdl.hxx63
-rw-r--r--xmloff/source/style/uniref.cxx40
-rw-r--r--xmloff/source/style/weighhdl.cxx175
-rw-r--r--xmloff/source/style/weighhdl.hxx46
-rw-r--r--xmloff/source/style/xmlaustp.cxx448
-rw-r--r--xmloff/source/style/xmlbahdl.cxx944
-rw-r--r--xmloff/source/style/xmlbahdl.hxx307
-rw-r--r--xmloff/source/style/xmlexppr.cxx1146
-rw-r--r--xmloff/source/style/xmlimppr.cxx784
-rw-r--r--xmloff/source/style/xmlnume.cxx970
-rw-r--r--xmloff/source/style/xmlnumfe.cxx1820
-rw-r--r--xmloff/source/style/xmlnumfi.cxx2418
-rw-r--r--xmloff/source/style/xmlnumi.cxx1408
-rw-r--r--xmloff/source/style/xmlprcon.cxx104
-rw-r--r--xmloff/source/style/xmlprhdl.cxx41
-rw-r--r--xmloff/source/style/xmlprmap.cxx252
-rw-r--r--xmloff/source/style/xmlstyle.cxx976
-rw-r--r--xmloff/source/style/xmltabe.cxx142
-rw-r--r--xmloff/source/style/xmltabi.cxx293
-rw-r--r--xmloff/source/table/XMLTableExport.cxx595
-rw-r--r--xmloff/source/table/XMLTableImport.cxx826
-rw-r--r--xmloff/source/table/makefile.mk48
-rw-r--r--xmloff/source/table/table.hxx45
-rw-r--r--xmloff/source/table/tabledesignsimporter.cxx103
-rw-r--r--xmloff/source/text/XMLAnchorTypePropHdl.hxx54
-rw-r--r--xmloff/source/text/XMLAutoMarkFileContext.cxx95
-rw-r--r--xmloff/source/text/XMLAutoMarkFileContext.hxx64
-rw-r--r--xmloff/source/text/XMLAutoTextContainerEventImport.cxx82
-rw-r--r--xmloff/source/text/XMLAutoTextContainerEventImport.hxx75
-rw-r--r--xmloff/source/text/XMLAutoTextEventExport.cxx297
-rw-r--r--xmloff/source/text/XMLAutoTextEventExport.hxx159
-rw-r--r--xmloff/source/text/XMLAutoTextEventImport.cxx144
-rw-r--r--xmloff/source/text/XMLAutoTextEventImport.hxx99
-rw-r--r--xmloff/source/text/XMLCalculationSettingsContext.cxx94
-rw-r--r--xmloff/source/text/XMLCalculationSettingsContext.hxx49
-rw-r--r--xmloff/source/text/XMLChangeElementImportContext.cxx113
-rw-r--r--xmloff/source/text/XMLChangeElementImportContext.hxx85
-rw-r--r--xmloff/source/text/XMLChangeImportContext.cxx100
-rw-r--r--xmloff/source/text/XMLChangeImportContext.hxx85
-rw-r--r--xmloff/source/text/XMLChangeInfoContext.cxx109
-rw-r--r--xmloff/source/text/XMLChangeInfoContext.hxx87
-rw-r--r--xmloff/source/text/XMLChangedRegionImportContext.cxx196
-rw-r--r--xmloff/source/text/XMLChangedRegionImportContext.hxx98
-rw-r--r--xmloff/source/text/XMLFootnoteBodyImportContext.cxx74
-rw-r--r--xmloff/source/text/XMLFootnoteBodyImportContext.hxx68
-rw-r--r--xmloff/source/text/XMLFootnoteConfigurationImportContext.cxx457
-rw-r--r--xmloff/source/text/XMLFootnoteImportContext.cxx243
-rw-r--r--xmloff/source/text/XMLFootnoteImportContext.hxx97
-rw-r--r--xmloff/source/text/XMLIndexAlphabeticalSourceContext.cxx271
-rw-r--r--xmloff/source/text/XMLIndexAlphabeticalSourceContext.hxx103
-rw-r--r--xmloff/source/text/XMLIndexBibliographyConfigurationContext.cxx297
-rw-r--r--xmloff/source/text/XMLIndexBibliographyEntryContext.cxx181
-rw-r--r--xmloff/source/text/XMLIndexBibliographyEntryContext.hxx84
-rw-r--r--xmloff/source/text/XMLIndexBibliographySourceContext.cxx111
-rw-r--r--xmloff/source/text/XMLIndexBibliographySourceContext.hxx76
-rw-r--r--xmloff/source/text/XMLIndexBodyContext.cxx77
-rw-r--r--xmloff/source/text/XMLIndexBodyContext.hxx79
-rw-r--r--xmloff/source/text/XMLIndexChapterInfoEntryContext.cxx205
-rw-r--r--xmloff/source/text/XMLIndexChapterInfoEntryContext.hxx81
-rw-r--r--xmloff/source/text/XMLIndexIllustrationSourceContext.cxx92
-rw-r--r--xmloff/source/text/XMLIndexIllustrationSourceContext.hxx72
-rw-r--r--xmloff/source/text/XMLIndexMarkExport.cxx267
-rw-r--r--xmloff/source/text/XMLIndexMarkExport.hxx117
-rw-r--r--xmloff/source/text/XMLIndexObjectSourceContext.cxx190
-rw-r--r--xmloff/source/text/XMLIndexObjectSourceContext.hxx87
-rw-r--r--xmloff/source/text/XMLIndexSimpleEntryContext.cxx146
-rw-r--r--xmloff/source/text/XMLIndexSimpleEntryContext.hxx93
-rw-r--r--xmloff/source/text/XMLIndexSourceBaseContext.cxx277
-rw-r--r--xmloff/source/text/XMLIndexSourceBaseContext.hxx131
-rw-r--r--xmloff/source/text/XMLIndexSpanEntryContext.cxx76
-rw-r--r--xmloff/source/text/XMLIndexSpanEntryContext.hxx72
-rw-r--r--xmloff/source/text/XMLIndexTOCContext.cxx382
-rw-r--r--xmloff/source/text/XMLIndexTOCContext.hxx106
-rw-r--r--xmloff/source/text/XMLIndexTOCSourceContext.cxx196
-rw-r--r--xmloff/source/text/XMLIndexTOCSourceContext.hxx86
-rw-r--r--xmloff/source/text/XMLIndexTOCStylesContext.cxx159
-rw-r--r--xmloff/source/text/XMLIndexTOCStylesContext.hxx97
-rw-r--r--xmloff/source/text/XMLIndexTabStopEntryContext.cxx174
-rw-r--r--xmloff/source/text/XMLIndexTabStopEntryContext.hxx79
-rw-r--r--xmloff/source/text/XMLIndexTableSourceContext.cxx188
-rw-r--r--xmloff/source/text/XMLIndexTableSourceContext.hxx86
-rw-r--r--xmloff/source/text/XMLIndexTemplateContext.cxx504
-rw-r--r--xmloff/source/text/XMLIndexTemplateContext.hxx159
-rw-r--r--xmloff/source/text/XMLIndexTitleTemplateContext.cxx116
-rw-r--r--xmloff/source/text/XMLIndexTitleTemplateContext.hxx90
-rw-r--r--xmloff/source/text/XMLIndexUserSourceContext.cxx231
-rw-r--r--xmloff/source/text/XMLIndexUserSourceContext.hxx93
-rw-r--r--xmloff/source/text/XMLLineNumberingExport.cxx212
-rw-r--r--xmloff/source/text/XMLLineNumberingExport.hxx60
-rw-r--r--xmloff/source/text/XMLLineNumberingImportContext.cxx322
-rw-r--r--xmloff/source/text/XMLLineNumberingSeparatorImportContext.cxx97
-rw-r--r--xmloff/source/text/XMLLineNumberingSeparatorImportContext.hxx72
-rw-r--r--xmloff/source/text/XMLPropertyBackpatcher.cxx312
-rw-r--r--xmloff/source/text/XMLPropertyBackpatcher.hxx156
-rw-r--r--xmloff/source/text/XMLRedlineExport.cxx672
-rw-r--r--xmloff/source/text/XMLRedlineExport.hxx212
-rw-r--r--xmloff/source/text/XMLSectionExport.cxx1930
-rw-r--r--xmloff/source/text/XMLSectionExport.hxx366
-rw-r--r--xmloff/source/text/XMLSectionFootnoteConfigExport.cxx202
-rw-r--r--xmloff/source/text/XMLSectionFootnoteConfigExport.hxx59
-rw-r--r--xmloff/source/text/XMLSectionFootnoteConfigImport.cxx195
-rw-r--r--xmloff/source/text/XMLSectionFootnoteConfigImport.hxx76
-rw-r--r--xmloff/source/text/XMLSectionImportContext.cxx406
-rw-r--r--xmloff/source/text/XMLSectionImportContext.hxx118
-rw-r--r--xmloff/source/text/XMLSectionSourceDDEImportContext.cxx186
-rw-r--r--xmloff/source/text/XMLSectionSourceDDEImportContext.hxx78
-rw-r--r--xmloff/source/text/XMLSectionSourceImportContext.cxx156
-rw-r--r--xmloff/source/text/XMLSectionSourceImportContext.hxx73
-rw-r--r--xmloff/source/text/XMLStringBufferImportContext.cxx83
-rw-r--r--xmloff/source/text/XMLTextCharStyleNamesElementExport.cxx89
-rw-r--r--xmloff/source/text/XMLTextCharStyleNamesElementExport.hxx56
-rw-r--r--xmloff/source/text/XMLTextColumnsContext.cxx503
-rw-r--r--xmloff/source/text/XMLTextColumnsExport.cxx189
-rw-r--r--xmloff/source/text/XMLTextFrameContext.cxx1681
-rw-r--r--xmloff/source/text/XMLTextFrameContext.hxx108
-rw-r--r--xmloff/source/text/XMLTextFrameHyperlinkContext.cxx188
-rw-r--r--xmloff/source/text/XMLTextFrameHyperlinkContext.hxx85
-rw-r--r--xmloff/source/text/XMLTextHeaderFooterContext.cxx198
-rw-r--r--xmloff/source/text/XMLTextListAutoStylePool.cxx311
-rw-r--r--xmloff/source/text/XMLTextListBlockContext.cxx336
-rw-r--r--xmloff/source/text/XMLTextListBlockContext.hxx101
-rw-r--r--xmloff/source/text/XMLTextListItemContext.cxx197
-rw-r--r--xmloff/source/text/XMLTextListItemContext.hxx86
-rw-r--r--xmloff/source/text/XMLTextMarkImportContext.cxx480
-rw-r--r--xmloff/source/text/XMLTextMarkImportContext.hxx124
-rw-r--r--xmloff/source/text/XMLTextMasterPageContext.cxx293
-rw-r--r--xmloff/source/text/XMLTextMasterPageExport.cxx185
-rw-r--r--xmloff/source/text/XMLTextMasterStylesContext.cxx102
-rw-r--r--xmloff/source/text/XMLTextNumRuleInfo.cxx261
-rw-r--r--xmloff/source/text/XMLTextNumRuleInfo.hxx200
-rw-r--r--xmloff/source/text/XMLTextPropertySetContext.cxx158
-rw-r--r--xmloff/source/text/XMLTextPropertySetContext.hxx62
-rw-r--r--xmloff/source/text/XMLTextShapeImportHelper.cxx166
-rw-r--r--xmloff/source/text/XMLTextShapeImportHelper.hxx57
-rw-r--r--xmloff/source/text/XMLTextShapeStyleContext.cxx255
-rw-r--r--xmloff/source/text/XMLTextTableContext.cxx49
-rw-r--r--xmloff/source/text/XMLTrackedChangesImportContext.cxx116
-rw-r--r--xmloff/source/text/XMLTrackedChangesImportContext.hxx75
-rw-r--r--xmloff/source/text/makefile.mk127
-rw-r--r--xmloff/source/text/txtdrope.cxx106
-rw-r--r--xmloff/source/text/txtdrope.hxx51
-rw-r--r--xmloff/source/text/txtdropi.cxx154
-rw-r--r--xmloff/source/text/txtdropi.hxx66
-rw-r--r--xmloff/source/text/txtexppr.cxx1034
-rw-r--r--xmloff/source/text/txtexppr.hxx98
-rw-r--r--xmloff/source/text/txtflde.cxx3619
-rw-r--r--xmloff/source/text/txtfldi.cxx4129
-rw-r--r--xmloff/source/text/txtftne.cxx393
-rw-r--r--xmloff/source/text/txtimp.cxx3062
-rw-r--r--xmloff/source/text/txtimppr.cxx728
-rw-r--r--xmloff/source/text/txtlists.cxx541
-rw-r--r--xmloff/source/text/txtparae.cxx3873
-rw-r--r--xmloff/source/text/txtparai.cxx2446
-rw-r--r--xmloff/source/text/txtparai.hxx131
-rw-r--r--xmloff/source/text/txtparaimphint.hxx296
-rw-r--r--xmloff/source/text/txtprhdl.cxx1492
-rw-r--r--xmloff/source/text/txtprhdl.hxx48
-rw-r--r--xmloff/source/text/txtprmap.cxx903
-rw-r--r--xmloff/source/text/txtsecte.cxx258
-rw-r--r--xmloff/source/text/txtstyle.cxx210
-rw-r--r--xmloff/source/text/txtstyli.cxx579
-rw-r--r--xmloff/source/text/txtvfldi.cxx1474
-rw-r--r--xmloff/source/transform/ActionMapTypesOASIS.hxx96
-rw-r--r--xmloff/source/transform/ActionMapTypesOOo.hxx92
-rw-r--r--xmloff/source/transform/AttrTransformerAction.hxx142
-rw-r--r--xmloff/source/transform/ChartOASISTContext.cxx145
-rw-r--r--xmloff/source/transform/ChartOASISTContext.hxx46
-rw-r--r--xmloff/source/transform/ChartOOoTContext.cxx150
-rw-r--r--xmloff/source/transform/ChartOOoTContext.hxx46
-rw-r--r--xmloff/source/transform/ChartPlotAreaOASISTContext.cxx256
-rw-r--r--xmloff/source/transform/ChartPlotAreaOASISTContext.hxx56
-rw-r--r--xmloff/source/transform/ChartPlotAreaOOoTContext.cxx240
-rw-r--r--xmloff/source/transform/ChartPlotAreaOOoTContext.hxx64
-rw-r--r--xmloff/source/transform/ControlOASISTContext.cxx165
-rw-r--r--xmloff/source/transform/ControlOASISTContext.hxx53
-rw-r--r--xmloff/source/transform/ControlOOoTContext.cxx107
-rw-r--r--xmloff/source/transform/ControlOOoTContext.hxx61
-rw-r--r--xmloff/source/transform/CreateElemTContext.cxx131
-rw-r--r--xmloff/source/transform/CreateElemTContext.hxx57
-rw-r--r--xmloff/source/transform/DeepTContext.cxx181
-rw-r--r--xmloff/source/transform/DeepTContext.hxx84
-rw-r--r--xmloff/source/transform/DlgOASISTContext.cxx116
-rw-r--r--xmloff/source/transform/DlgOASISTContext.hxx46
-rw-r--r--xmloff/source/transform/DocumentTContext.cxx149
-rw-r--r--xmloff/source/transform/DocumentTContext.hxx58
-rw-r--r--xmloff/source/transform/ElemTransformerAction.hxx96
-rw-r--r--xmloff/source/transform/EventMap.cxx111
-rw-r--r--xmloff/source/transform/EventMap.hxx44
-rw-r--r--xmloff/source/transform/EventOASISTContext.cxx420
-rw-r--r--xmloff/source/transform/EventOASISTContext.hxx56
-rw-r--r--xmloff/source/transform/EventOOoTContext.cxx266
-rw-r--r--xmloff/source/transform/EventOOoTContext.hxx64
-rw-r--r--xmloff/source/transform/FamilyType.hxx60
-rw-r--r--xmloff/source/transform/FlatTContext.cxx70
-rw-r--r--xmloff/source/transform/FlatTContext.hxx70
-rw-r--r--xmloff/source/transform/FormPropOASISTContext.cxx225
-rw-r--r--xmloff/source/transform/FormPropOASISTContext.hxx55
-rw-r--r--xmloff/source/transform/FormPropOOoTContext.cxx314
-rw-r--r--xmloff/source/transform/FormPropOOoTContext.hxx70
-rw-r--r--xmloff/source/transform/FrameOASISTContext.cxx200
-rw-r--r--xmloff/source/transform/FrameOASISTContext.hxx68
-rw-r--r--xmloff/source/transform/FrameOOoTContext.cxx174
-rw-r--r--xmloff/source/transform/FrameOOoTContext.hxx60
-rw-r--r--xmloff/source/transform/IgnoreTContext.cxx109
-rw-r--r--xmloff/source/transform/IgnoreTContext.hxx89
-rw-r--r--xmloff/source/transform/MergeElemTContext.cxx346
-rw-r--r--xmloff/source/transform/MergeElemTContext.hxx70
-rw-r--r--xmloff/source/transform/MetaTContext.cxx146
-rw-r--r--xmloff/source/transform/MetaTContext.hxx83
-rw-r--r--xmloff/source/transform/MutableAttrList.cxx203
-rw-r--r--xmloff/source/transform/MutableAttrList.hxx87
-rw-r--r--xmloff/source/transform/NotesTContext.cxx232
-rw-r--r--xmloff/source/transform/NotesTContext.hxx61
-rw-r--r--xmloff/source/transform/OOo2Oasis.cxx2206
-rw-r--r--xmloff/source/transform/OOo2Oasis.hxx114
-rw-r--r--xmloff/source/transform/Oasis2OOo.cxx2092
-rw-r--r--xmloff/source/transform/Oasis2OOo.hxx71
-rw-r--r--xmloff/source/transform/PersAttrListTContext.cxx196
-rw-r--r--xmloff/source/transform/PersAttrListTContext.hxx122
-rw-r--r--xmloff/source/transform/PersMixedContentTContext.cxx160
-rw-r--r--xmloff/source/transform/PersMixedContentTContext.hxx69
-rw-r--r--xmloff/source/transform/ProcAddAttrTContext.cxx80
-rw-r--r--xmloff/source/transform/ProcAddAttrTContext.hxx58
-rw-r--r--xmloff/source/transform/ProcAttrTContext.cxx84
-rw-r--r--xmloff/source/transform/ProcAttrTContext.hxx66
-rw-r--r--xmloff/source/transform/PropType.hxx50
-rw-r--r--xmloff/source/transform/PropertyActionsOASIS.cxx554
-rw-r--r--xmloff/source/transform/PropertyActionsOASIS.hxx75
-rw-r--r--xmloff/source/transform/PropertyActionsOOo.cxx1064
-rw-r--r--xmloff/source/transform/PropertyActionsOOo.hxx79
-rw-r--r--xmloff/source/transform/RenameElemTContext.cxx93
-rw-r--r--xmloff/source/transform/RenameElemTContext.hxx73
-rw-r--r--xmloff/source/transform/StyleOASISTContext.cxx1013
-rw-r--r--xmloff/source/transform/StyleOASISTContext.hxx76
-rw-r--r--xmloff/source/transform/StyleOOoTContext.cxx1377
-rw-r--r--xmloff/source/transform/StyleOOoTContext.hxx75
-rw-r--r--xmloff/source/transform/TContextVector.hxx42
-rw-r--r--xmloff/source/transform/Transformer.hxx45
-rw-r--r--xmloff/source/transform/TransformerAction.hxx35
-rw-r--r--xmloff/source/transform/TransformerActionInit.hxx51
-rw-r--r--xmloff/source/transform/TransformerActions.cxx92
-rw-r--r--xmloff/source/transform/TransformerActions.hxx161
-rw-r--r--xmloff/source/transform/TransformerBase.cxx1489
-rw-r--r--xmloff/source/transform/TransformerBase.hxx208
-rw-r--r--xmloff/source/transform/TransformerContext.cxx113
-rw-r--r--xmloff/source/transform/TransformerContext.hxx116
-rw-r--r--xmloff/source/transform/TransformerTokenMap.cxx54
-rw-r--r--xmloff/source/transform/TransformerTokenMap.hxx50
-rw-r--r--xmloff/source/transform/XMLFilterRegistration.cxx228
-rw-r--r--xmloff/source/transform/makefile.mk95
-rw-r--r--xmloff/source/xforms/SchemaContext.cxx100
-rw-r--r--xmloff/source/xforms/SchemaContext.hxx84
-rw-r--r--xmloff/source/xforms/SchemaRestrictionContext.cxx380
-rw-r--r--xmloff/source/xforms/SchemaRestrictionContext.hxx91
-rw-r--r--xmloff/source/xforms/SchemaSimpleTypeContext.cxx115
-rw-r--r--xmloff/source/xforms/SchemaSimpleTypeContext.hxx86
-rw-r--r--xmloff/source/xforms/TokenContext.cxx146
-rw-r--r--xmloff/source/xforms/TokenContext.hxx114
-rw-r--r--xmloff/source/xforms/XFormsBindContext.cxx190
-rw-r--r--xmloff/source/xforms/XFormsBindContext.hxx88
-rw-r--r--xmloff/source/xforms/XFormsInstanceContext.cxx158
-rw-r--r--xmloff/source/xforms/XFormsInstanceContext.hxx99
-rw-r--r--xmloff/source/xforms/XFormsModelContext.cxx163
-rw-r--r--xmloff/source/xforms/XFormsModelContext.hxx85
-rw-r--r--xmloff/source/xforms/XFormsModelExport.hxx42
-rw-r--r--xmloff/source/xforms/XFormsSubmissionContext.cxx182
-rw-r--r--xmloff/source/xforms/XFormsSubmissionContext.hxx83
-rw-r--r--xmloff/source/xforms/makefile.mk58
-rw-r--r--xmloff/source/xforms/xformsapi.cxx348
-rw-r--r--xmloff/source/xforms/xformsapi.hxx93
-rw-r--r--xmloff/source/xforms/xformsexport.cxx835
-rw-r--r--xmloff/source/xforms/xformsimport.cxx206
-rw-r--r--xmloff/util/makefile.mk88
-rw-r--r--xmloff/util/makefile.pmk30
-rw-r--r--xmloff/xml/components.xml473
-rw-r--r--xmlscript/dtd/dialog.dtd405
-rw-r--r--xmlscript/dtd/libraries.dtd45
-rw-r--r--xmlscript/dtd/library.dtd44
-rw-r--r--xmlscript/dtd/module.dtd35
-rw-r--r--xmlscript/inc/makefile.mk47
-rw-r--r--xmlscript/inc/pch/precompiled_xmlscript.cxx29
-rw-r--r--xmlscript/inc/pch/precompiled_xmlscript.hxx32
-rw-r--r--xmlscript/inc/xmlscript/xml_helper.hxx146
-rw-r--r--xmlscript/inc/xmlscript/xml_import.hxx66
-rw-r--r--xmlscript/inc/xmlscript/xmldlg_imexp.hxx89
-rw-r--r--xmlscript/inc/xmlscript/xmllib_imexp.hxx94
-rw-r--r--xmlscript/inc/xmlscript/xmlmod_imexp.hxx65
-rw-r--r--xmlscript/inc/xmlscript/xmlns.h45
-rw-r--r--xmlscript/prj/build.lst10
-rw-r--r--xmlscript/prj/d.lst13
-rw-r--r--xmlscript/source/inc/misc.hxx63
-rw-r--r--xmlscript/source/misc/makefile.mk48
-rw-r--r--xmlscript/source/misc/unoservices.cxx133
-rw-r--r--xmlscript/source/xml_helper/makefile.mk50
-rw-r--r--xmlscript/source/xml_helper/xml_byteseq.cxx173
-rw-r--r--xmlscript/source/xml_helper/xml_element.cxx132
-rw-r--r--xmlscript/source/xml_helper/xml_impctx.cxx904
-rw-r--r--xmlscript/source/xmldlg_imexp/common.hxx42
-rw-r--r--xmlscript/source/xmldlg_imexp/exp_share.hxx245
-rw-r--r--xmlscript/source/xmldlg_imexp/imp_share.hxx1020
-rw-r--r--xmlscript/source/xmldlg_imexp/makefile.mk52
-rw-r--r--xmlscript/source/xmldlg_imexp/xmldlg_addfunc.cxx138
-rw-r--r--xmlscript/source/xmldlg_imexp/xmldlg_expmodels.cxx1169
-rw-r--r--xmlscript/source/xmldlg_imexp/xmldlg_export.cxx1610
-rw-r--r--xmlscript/source/xmldlg_imexp/xmldlg_impmodels.cxx2289
-rw-r--r--xmlscript/source/xmldlg_imexp/xmldlg_import.cxx1905
-rw-r--r--xmlscript/source/xmlflat_imexp/makefile.mk50
-rw-r--r--xmlscript/source/xmlflat_imexp/xmlbas_export.cxx551
-rw-r--r--xmlscript/source/xmlflat_imexp/xmlbas_export.hxx132
-rw-r--r--xmlscript/source/xmlflat_imexp/xmlbas_import.cxx931
-rw-r--r--xmlscript/source/xmlflat_imexp/xmlbas_import.hxx347
-rw-r--r--xmlscript/source/xmllib_imexp/imp_share.hxx263
-rw-r--r--xmlscript/source/xmllib_imexp/makefile.mk50
-rw-r--r--xmlscript/source/xmllib_imexp/xmllib_export.cxx176
-rw-r--r--xmlscript/source/xmllib_imexp/xmllib_import.cxx372
-rw-r--r--xmlscript/source/xmlmod_imexp/imp_share.hxx143
-rw-r--r--xmlscript/source/xmlmod_imexp/makefile.mk49
-rw-r--r--xmlscript/source/xmlmod_imexp/xmlmod_export.cxx80
-rw-r--r--xmlscript/source/xmlmod_imexp/xmlmod_import.cxx230
-rw-r--r--xmlscript/test/imexp.cxx242
-rw-r--r--xmlscript/test/makefile.mk85
-rw-r--r--xmlscript/test/test.xml106
-rw-r--r--xmlscript/test/w3c.jpgbin0 -> 2028 bytes
-rw-r--r--xmlscript/util/makefile.mk76
-rw-r--r--xmlscript/util/target.pmk35
-rw-r--r--xmlscript/util/xcr.flt13
-rw-r--r--xpdf/makefile.mk134
-rw-r--r--xpdf/prj/build.lst2
-rw-r--r--xpdf/prj/d.lst5
-rw-r--r--xpdf/xpdf-3.02.patch1872
-rwxr-xr-xxsltml/README14
-rwxr-xr-xxsltml/makefile.mk66
-rwxr-xr-xxsltml/prj/build.lst3
-rwxr-xr-xxsltml/prj/d.lst6
-rw-r--r--xsltml/xsltml_2.1.2.patch1747
-rwxr-xr-xzlib/make_patched_header.pl66
-rw-r--r--zlib/makefile.mk75
-rw-r--r--zlib/prj/build.lst2
-rw-r--r--zlib/prj/d.lst13
-rw-r--r--zlib/zlib-1.1.4.patch3244
57213 files changed, 11239143 insertions, 0 deletions
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 000000000000..416fa8c63b14
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,2 @@
+*.doc binary
+*.sdw binary
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 000000000000..ddc5d8042ab4
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,87 @@
+# backup and temporary files
+*~
+.*.sw[op]
+
+# where the 'subrepos' and downloads are located
+/clone
+/src
+
+# the build directories
+/*/unxlng??
+/*/unxlng??.pro
+/*/unxlng???
+/*/unxlng???.pro
+/*/wntmsc???
+/*/wntmsc???.pro
+/*/wntgcc?
+/*/wntgcc?.pro
+/*/unxmac??
+/*/unxmac??.pro
+/*/unx?bsd??
+/*/unx?bsd??.pro
+/*/unxdfly??
+/*/unxdfly??.pro
+/*/unxso???
+/*/unxso???.pro
+/*/unxaig??
+/*/unxaig??.pro
+/*/unxios?
+/*/unxios?.pro
+/*/unxand?
+/*/unxand?.pro
+/workdir
+/solver
+/instsetoo_native/util/LibreOffice
+/instsetoo_native/util/LibreOffice_SDK
+
+# autoconf generated stuff
+/aclocal.m4
+/autom4te.cache
+/autogen.lastrun
+/bootstrap
+/ChangeLog
+/config.guess
+/config.log
+/config.parms
+/config.status
+/configure
+/Makefile
+/makefile.mk
+/set_soenv
+/visibility.cxx
+/post_download
+/bin/repo-list
+/src.downloaded
+/ooo.lst
+
+# misc
+/cross-build-toolset.built
+/set_soenv.last
+/set_soenv.stamp
+/warn
+/build.log
+/post_download.log
+/install
+/downloaded
+/Env.Build.sh
+/Env.Host.sh
+/ID
+/tags
+/docs
+/autogen.save
+
+/*/*.exe
+
+# external dlls etc
+/external/*/*.dll
+/external/*/*.exe
+/external/*/*.manifest
+/external/*/*.txt
+/moz/zipped/*.zip
+
+# links to the other repositories
+/binfilter
+/dictionaries
+/helpcontent2
+/translations
+
diff --git a/Makefile.in b/Makefile.in
new file mode 100644
index 000000000000..be50d1d4034d
--- /dev/null
+++ b/Makefile.in
@@ -0,0 +1,17 @@
+# just dumb wrapper; make install comes later
+
+SHELL=/bin/sh
+
+all:
+ . ./*Env.Set.sh && \
+ ./bootstrap && \
+ cd instsetoo_native && ../solenv/bin/build.pl --all
+
+distclean:
+ . ./*Env.Set.sh && \
+ dmake distclean
+
+clean:
+ . ./*Env.Set.sh && \
+ dmake clean
+
diff --git a/acinclude.m4 b/acinclude.m4
new file mode 100644
index 000000000000..71f01544d11b
--- /dev/null
+++ b/acinclude.m4
@@ -0,0 +1,138 @@
+dnl @synopsis AX_FUNC_WHICH_GETSPNAM_R
+dnl
+dnl Determines which historical variant of the getspnam_r() call
+dnl (taking four or five arguments) is available on the system
+dnl and sets NEW_SHADOW_API=YES if there are five arguments.
+dnl
+dnl Originally named "AX_FUNC_WHICH_GETHOSTBYNAME_R". Rewritten
+dnl for AX_FUNC_WHICH_GETSPNAM_R
+dnl
+dnl @author Caolan McNamara <caolan@skynet.ie>
+dnl @author Daniel Richard G. <skunk@iskunk.org>
+dnl @version 2006-05-01
+dnl @license LGPL
+
+AC_DEFUN([AX_FUNC_WHICH_GETSPNAM_R], [
+
+ AC_LANG_PUSH(C)
+ AC_MSG_CHECKING([how many arguments getspnam_r() takes])
+
+ AC_CACHE_VAL(ac_cv_func_which_getspnam_r, [
+
+################################################################
+
+ac_cv_func_which_getspnam_r=unknown
+
+#
+# ONE ARGUMENT (sanity check)
+#
+
+# This should fail, as there is no variant of getspnam_r() that takes
+# a single argument. If it actually compiles, then we can assume that
+# netdb.h is not declaring the function, and the compiler is thereby
+# assuming an implicit prototype. In which case, we're out of luck.
+#
+AC_COMPILE_IFELSE(
+ AC_LANG_PROGRAM(
+ [[
+ #include <sys/types.h>
+ #include <shadow.h>
+ ]],
+ [[
+ const char *name = "myname";
+ getspnam_r(name) /* ; */
+ ]]),
+ ac_cv_func_which_getspnam_r=no)
+
+#
+# FIVE ARGUMENTS
+#
+
+if test "$ac_cv_func_which_getspnam_r" = "unknown"; then
+
+AC_COMPILE_IFELSE(
+ AC_LANG_PROGRAM(
+ [[
+ #include <sys/types.h>
+ #include <shadow.h>
+ ]],
+ [[
+ char buffer[[]] = { '\0' };
+ struct spwd spwdStruct;
+ const char *name = "myname";
+ getspnam_r(name, &spwdStruct, buffer, sizeof buffer, 0) /* ; */
+ ]]),
+ ac_cv_func_which_getspnam_r=five)
+
+fi
+
+#
+# FOUR ARGUMENTS
+#
+
+if test "$ac_cv_func_which_getspnam_r" = "unknown"; then
+
+AC_COMPILE_IFELSE(
+ AC_LANG_PROGRAM(
+ [[
+ #include <sys/types.h>
+ #include <shadow.h>
+ ]],
+ [[
+ char buffer[[]] = { '\0' };
+ struct spwd spwdStruct;
+ const char *name = "myname";
+ getspnam_r(name, &spwdStruct, buffer, sizeof buffer) /* ; */
+ ]]),
+ ac_cv_func_which_getspnam_r=four)
+
+fi
+
+################################################################
+
+]) dnl end AC_CACHE_VAL
+
+case "$ac_cv_func_which_getspnam_r" in
+ five)
+ AC_MSG_RESULT([five])
+ NEW_SHADOW_API=YES
+ ;;
+
+ four)
+ AC_MSG_RESULT([four])
+ ;;
+
+ no)
+ AC_MSG_RESULT([cannot find function declaration in shadow.h])
+ ;;
+
+ unknown)
+ AC_MSG_RESULT([can't tell])
+ ;;
+
+ *)
+ AC_MSG_ERROR([internal error])
+ ;;
+esac
+
+AC_LANG_POP(C)
+
+]) dnl end AC_DEFUN
+
+dnl PKG_CHECK_MODULES_MACHACK is like PKG_CHECK_MODULES but sneaks in an extra
+dnl argument between the first and second, denoting a program to call instead of
+dnl pkg-config on Mac OS X (aka Darwin):
+AC_DEFUN([PKG_CHECK_MODULES_MACHACK],
+[if test "$_os" = "Darwin"; then
+ AC_MSG_CHECKING($1_CFLAGS)
+ $1_CFLAGS=`$2 --cflags`
+ AC_MSG_RESULT($$1_CFLAGS)
+ AC_MSG_CHECKING($1_LIBS)
+ $1_LIBS=`$2 --libs`
+ AC_MSG_RESULT($$1_LIBS)
+ AC_SUBST($1_CFLAGS)
+ AC_SUBST($1_LIBS)
+ else
+ PKG_CHECK_MODULES($1, $3, $4, $5, $6)
+ fi
+])
diff --git a/aclocal.m4 b/aclocal.m4
new file mode 100644
index 000000000000..680f52ac3929
--- /dev/null
+++ b/aclocal.m4
@@ -0,0 +1,278 @@
+# generated automatically by aclocal 1.9.1 -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
+# Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+
+dnl PKG_CHECK_MODULES(GSTUFF, gtk+-2.0 >= 1.3 glib = 1.3.4, action-if, action-not)
+dnl defines GSTUFF_LIBS, GSTUFF_CFLAGS, see pkg-config man page
+dnl also defines GSTUFF_PKG_ERRORS on error
+AC_DEFUN(PKG_CHECK_MODULES, [
+ succeeded=no
+
+ if test -z "$PKG_CONFIG"; then
+ AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
+ fi
+
+ if test "$PKG_CONFIG" = "no" ; then
+ echo "*** The pkg-config script could not be found. Make sure it is"
+ echo "*** in your path, or set the PKG_CONFIG environment variable"
+ echo "*** to the full path to pkg-config."
+ echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config."
+ else
+ PKG_CONFIG_MIN_VERSION=0.9.0
+ if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
+ AC_MSG_CHECKING(for $2)
+
+ if $PKG_CONFIG --exists "$2" ; then
+ AC_MSG_RESULT(yes)
+ succeeded=yes
+
+ AC_MSG_CHECKING($1_CFLAGS)
+ $1_CFLAGS=`$PKG_CONFIG --cflags "$2"`
+ AC_MSG_RESULT($$1_CFLAGS)
+
+ AC_MSG_CHECKING($1_LIBS)
+ $1_LIBS=`$PKG_CONFIG --libs "$2"`
+ AC_MSG_RESULT($$1_LIBS)
+ else
+ $1_CFLAGS=""
+ $1_LIBS=""
+ ## If we have a custom action on failure, don't print errors, but
+ ## do set a variable so people can do so.
+ $1_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"`
+ ifelse([$4], ,echo $$1_PKG_ERRORS,)
+ fi
+
+ AC_SUBST($1_CFLAGS)
+ AC_SUBST($1_LIBS)
+ else
+ echo "*** Your version of pkg-config is too old. You need version $PKG_CONFIG_MIN_VERSION or newer."
+ echo "*** See http://www.freedesktop.org/software/pkgconfig"
+ fi
+ fi
+
+ if test $succeeded = yes; then
+ ifelse([$3], , :, [$3])
+ else
+ ifelse([$4], , AC_MSG_ERROR([Library requirements ($2) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them.]), [$4])
+ fi
+])
+
+
+
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
+# Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program 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 General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# AM_PATH_PYTHON([MINIMUM-VERSION], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+
+# Adds support for distributing Python modules and packages. To
+# install modules, copy them to $(pythondir), using the python_PYTHON
+# automake variable. To install a package with the same name as the
+# automake package, install to $(pkgpythondir), or use the
+# pkgpython_PYTHON automake variable.
+
+# The variables $(pyexecdir) and $(pkgpyexecdir) are provided as
+# locations to install python extension modules (shared libraries).
+# Another macro is required to find the appropriate flags to compile
+# extension modules.
+
+# If your package is configured with a different prefix to python,
+# users will have to add the install directory to the PYTHONPATH
+# environment variable, or create a .pth file (see the python
+# documentation for details).
+
+# If the MINIMUM-VERSION argument is passed, AM_PATH_PYTHON will
+# cause an error if the version of python installed on the system
+# doesn't meet the requirement. MINIMUM-VERSION should consist of
+# numbers and dots only.
+
+AC_DEFUN([AM_PATH_PYTHON],
+ [
+ dnl Find a Python interpreter. Python versions prior to 1.5 are not
+ dnl supported because the default installation locations changed from
+ dnl $prefix/lib/site-python in 1.4 to $prefix/lib/python1.5/site-packages
+ dnl in 1.5.
+ m4_define([_AM_PYTHON_INTERPRETER_LIST],
+ [python python2 python2.6 python2.5 python2.4 python2.3 python2.2 dnl
+python2.1 python2.0 python1.6 python1.5])
+
+ m4_if([$1],[],[
+ dnl No version check is needed.
+ # Find any Python interpreter.
+ if test -z "$PYTHON"; then
+ PYTHON=:
+ AC_PATH_PROGS([PYTHON], _AM_PYTHON_INTERPRETER_LIST)
+ fi
+ am_display_PYTHON=python
+ ], [
+ dnl A version check is needed.
+ if test -n "$PYTHON"; then
+ # If the user set $PYTHON, use it and don't search something else.
+ AC_MSG_CHECKING([whether $PYTHON version >= $1])
+ AM_PYTHON_CHECK_VERSION([$PYTHON], [$1],
+ [AC_MSG_RESULT(yes)],
+ [AC_MSG_ERROR(too old)])
+ am_display_PYTHON=$PYTHON
+ else
+ # Otherwise, try each interpreter until we find one that satisfies
+ # VERSION.
+ AC_CACHE_CHECK([for a Python interpreter with version >= $1],
+ [am_cv_pathless_PYTHON],[
+ for am_cv_pathless_PYTHON in _AM_PYTHON_INTERPRETER_LIST none; do
+ test "$am_cv_pathless_PYTHON" = none && break
+ AM_PYTHON_CHECK_VERSION([$am_cv_pathless_PYTHON], [$1], [break])
+ done])
+ # Set $PYTHON to the absolute path of $am_cv_pathless_PYTHON.
+ if test "$am_cv_pathless_PYTHON" = none; then
+ PYTHON=:
+ else
+ AC_PATH_PROG([PYTHON], [$am_cv_pathless_PYTHON])
+ fi
+ am_display_PYTHON=$am_cv_pathless_PYTHON
+ fi
+ ])
+
+ if test "$PYTHON" = :; then
+ dnl Run any user-specified action, or abort.
+ m4_default([$3], [AC_MSG_ERROR([no suitable Python interpreter found])])
+ else
+
+ dnl Query Python for its version number. Getting [:3] seems to be
+ dnl the best way to do this; it's what "site.py" does in the standard
+ dnl library.
+
+ AC_CACHE_CHECK([for $am_display_PYTHON version], [am_cv_python_version],
+ [am_cv_python_version=`$PYTHON -c "import sys; print sys.version[[:3]]"`])
+ AC_SUBST([PYTHON_VERSION], [$am_cv_python_version])
+
+ dnl Use the values of $prefix and $exec_prefix for the corresponding
+ dnl values of PYTHON_PREFIX and PYTHON_EXEC_PREFIX. These are made
+ dnl distinct variables so they can be overridden if need be. However,
+ dnl general consensus is that you shouldn't need this ability.
+
+ AC_SUBST([PYTHON_PREFIX], ['${prefix}'])
+ AC_SUBST([PYTHON_EXEC_PREFIX], ['${exec_prefix}'])
+
+ dnl At times (like when building shared libraries) you may want
+ dnl to know which OS platform Python thinks this is.
+
+ AC_CACHE_CHECK([for $am_display_PYTHON platform], [am_cv_python_platform],
+ [am_cv_python_platform=`$PYTHON -c "import sys; print sys.platform"`])
+ AC_SUBST([PYTHON_PLATFORM], [$am_cv_python_platform])
+
+
+ dnl Set up 4 directories:
+
+ dnl pythondir -- where to install python scripts. This is the
+ dnl site-packages directory, not the python standard library
+ dnl directory like in previous automake betas. This behavior
+ dnl is more consistent with lispdir.m4 for example.
+ dnl Query distutils for this directory. distutils does not exist in
+ dnl Python 1.5, so we fall back to the hardcoded directory if it
+ dnl doesn't work.
+ AC_CACHE_CHECK([for $am_display_PYTHON script directory],
+ [am_cv_python_pythondir],
+ [am_cv_python_pythondir=`$PYTHON -c "from distutils import sysconfig; print sysconfig.get_python_lib(0,0,prefix='$PYTHON_PREFIX')" 2>/dev/null ||
+ echo "$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages"`])
+ AC_SUBST([pythondir], [$am_cv_python_pythondir])
+
+ dnl pkgpythondir -- $PACKAGE directory under pythondir. Was
+ dnl PYTHON_SITE_PACKAGE in previous betas, but this naming is
+ dnl more consistent with the rest of automake.
+
+ AC_SUBST([pkgpythondir], [\${pythondir}/$PACKAGE])
+
+ dnl pyexecdir -- directory for installing python extension modules
+ dnl (shared libraries)
+ dnl Query distutils for this directory. distutils does not exist in
+ dnl Python 1.5, so we fall back to the hardcoded directory if it
+ dnl doesn't work.
+ AC_CACHE_CHECK([for $am_display_PYTHON extension module directory],
+ [am_cv_python_pyexecdir],
+ [am_cv_python_pyexecdir=`$PYTHON -c "from distutils import sysconfig; print sysconfig.get_python_lib(1,0,prefix='$PYTHON_EXEC_PREFIX')" 2>/dev/null ||
+ echo "${PYTHON_EXEC_PREFIX}/lib/python${PYTHON_VERSION}/site-packages"`])
+ AC_SUBST([pyexecdir], [$am_cv_python_pyexecdir])
+
+ dnl pkgpyexecdir -- $(pyexecdir)/$(PACKAGE)
+
+ AC_SUBST([pkgpyexecdir], [\${pyexecdir}/$PACKAGE])
+
+ dnl Run any user-specified action.
+ $2
+ fi
+
+])
+
+
+# AM_PYTHON_CHECK_VERSION(PROG, VERSION, [ACTION-IF-TRUE], [ACTION-IF-FALSE])
+# ---------------------------------------------------------------------------
+# Run ACTION-IF-TRUE if the Python interpreter PROG has version >= VERSION.
+# Run ACTION-IF-FALSE otherwise.
+# This test uses sys.hexversion instead of the string equivalent (first
+# word of sys.version), in order to cope with versions such as 2.2c1.
+# hexversion has been introduced in Python 1.5.2; it's probably not
+# worth to support older versions (1.5.1 was released on October 31, 1998).
+AC_DEFUN([AM_PYTHON_CHECK_VERSION],
+ [prog="import sys, string
+# split strings by '.' and convert to numeric. Append some zeros
+# because we need at least 4 digits for the hex conversion.
+minver = map(int, string.split('$2', '.')) + [[0, 0, 0]]
+minverhex = 0
+for i in xrange(0, 4): minverhex = (minverhex << 8) + minver[[i]]
+sys.exit(sys.hexversion < minverhex)"
+ AS_IF([AM_RUN_LOG([$1 -c "$prog"])], [$3], [$4])])
+
+# Copyright (C) 2001, 2003 Free Software Foundation, Inc. -*- Autoconf -*-
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program 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 General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# AM_RUN_LOG(COMMAND)
+# -------------------
+# Run COMMAND, save the exit status in ac_status, and log it.
+# (This has been adapted from Autoconf's _AC_RUN_LOG macro.)
+AC_DEFUN([AM_RUN_LOG],
+[{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD
+ ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+ (exit $ac_status); }])
+
+m4_include([acinclude.m4])
diff --git a/afms/delzip b/afms/delzip
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/afms/delzip
diff --git a/afms/makefile.mk b/afms/makefile.mk
new file mode 100644
index 000000000000..b1d2eafe7555
--- /dev/null
+++ b/afms/makefile.mk
@@ -0,0 +1,58 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=.
+
+PRJNAME=afms
+TARGET=afms
+
+# --- Settings -----------------------------------------------------
+
+.INCLUDE : settings.mk
+.IF "$(L10N_framework)"==""
+# --- Files --------------------------------------------------------
+
+TARFILE_NAME=Adobe-Core35_AFMs-314
+TARFILE_MD5=1756c4fa6c616ae15973c104cd8cb256
+TARFILE_ROOTDIR=Adobe-Core35_AFMs-314
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : set_ext.mk
+
+ZIP1DIR = $(MISC)$/build$/$(TARFILE_NAME)
+ZIP1TARGET = fontunxafm
+ZIP1LIST = *.afm -x "*Helvetica-Narrow*"
+
+.ENDIF # L10N_framework
+.INCLUDE : target.mk
+
+.INCLUDE : tg_ext.mk
+.IF "$(L10N_framework)"==""
+$(ZIP1TARGETN): $(PACKAGE_DIR)$/$(UNTAR_FLAG_FILE)
+
+.ENDIF # L10N_framework
diff --git a/afms/prj/build.lst b/afms/prj/build.lst
new file mode 100644
index 000000000000..ed3d01fd2909
--- /dev/null
+++ b/afms/prj/build.lst
@@ -0,0 +1,3 @@
+af afms : solenv NULL
+af afms usr1 - all af_mkout NULL
+af afms nmake - all af_fonts NULL
diff --git a/afms/prj/d.lst b/afms/prj/d.lst
new file mode 100644
index 000000000000..78396a65f9e4
--- /dev/null
+++ b/afms/prj/d.lst
@@ -0,0 +1,3 @@
+mkdir: %_DEST%\pck%_EXT%
+..\%__SRC%\bin\*.zip %_DEST%\pck%_EXT%\*.zip
+
diff --git a/agg/inc/agg_alpha_mask_u8.h b/agg/inc/agg_alpha_mask_u8.h
new file mode 100755
index 000000000000..b7e5c926092f
--- /dev/null
+++ b/agg/inc/agg_alpha_mask_u8.h
@@ -0,0 +1,499 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// scanline_u8 class
+//
+//----------------------------------------------------------------------------
+#ifndef AGG_ALPHA_MASK_U8_INCLUDED
+#define AGG_ALPHA_MASK_U8_INCLUDED
+
+#include <string.h>
+#include "agg_basics.h"
+#include "agg_rendering_buffer.h"
+
+namespace agg
+{
+ //===================================================one_component_mask_u8
+ struct one_component_mask_u8
+ {
+ static unsigned calculate(const int8u* p) { return *p; }
+ };
+
+
+ //=====================================================rgb_to_gray_mask_u8
+ template<unsigned R, unsigned G, unsigned B>
+ struct rgb_to_gray_mask_u8
+ {
+ static unsigned calculate(const int8u* p)
+ {
+ return (p[R]*77 + p[G]*150 + p[B]*29) >> 8;
+ }
+ };
+
+ //==========================================================alpha_mask_u8
+ template<unsigned Step=1, unsigned Offset=0, class MaskF=one_component_mask_u8>
+ class alpha_mask_u8
+ {
+ public:
+ typedef int8u cover_type;
+ typedef alpha_mask_u8<Step, Offset, MaskF> self_type;
+ enum
+ {
+ cover_shift = 8,
+ cover_none = 0,
+ cover_full = 255
+ };
+
+ alpha_mask_u8() : m_rbuf(0) {}
+ alpha_mask_u8(rendering_buffer& rbuf) : m_rbuf(&rbuf) {}
+
+ void attach(rendering_buffer& rbuf) { m_rbuf = &rbuf; }
+
+ MaskF& mask_function() { return m_mask_function; }
+ const MaskF& mask_function() const { return m_mask_function; }
+
+
+ //--------------------------------------------------------------------
+ cover_type pixel(int x, int y) const
+ {
+ if(x >= 0 && y >= 0 &&
+ x < (int)m_rbuf->width() &&
+ y <= (int)m_rbuf->height())
+ {
+ return (cover_type)m_mask_function.calculate(
+ m_rbuf->row(y) + x * Step + Offset);
+ }
+ return 0;
+ }
+
+ //--------------------------------------------------------------------
+ cover_type combine_pixel(int x, int y, cover_type val) const
+ {
+ if(x >= 0 && y >= 0 &&
+ x < (int)m_rbuf->width() &&
+ y <= (int)m_rbuf->height())
+ {
+ return (cover_type)((val *
+ m_mask_function.calculate(
+ m_rbuf->row(y) + x * Step + Offset)) >>
+ cover_shift);
+ }
+ return 0;
+ }
+
+
+ //--------------------------------------------------------------------
+ void fill_hspan(int x, int y, cover_type* dst, int num_pix) const
+ {
+ int xmax = m_rbuf->width() - 1;
+ int ymax = m_rbuf->height() - 1;
+
+ int count = num_pix;
+ cover_type* covers = dst;
+
+ if(y < 0 || y > ymax)
+ {
+ memset(dst, 0, num_pix * sizeof(cover_type));
+ return;
+ }
+
+ if(x < 0)
+ {
+ count += x;
+ if(count <= 0)
+ {
+ memset(dst, 0, num_pix * sizeof(cover_type));
+ return;
+ }
+ memset(covers, 0, -x * sizeof(cover_type));
+ covers -= x;
+ x = 0;
+ }
+
+ if(x + count > xmax)
+ {
+ int rest = x + count - xmax - 1;
+ count -= rest;
+ if(count <= 0)
+ {
+ memset(dst, 0, num_pix * sizeof(cover_type));
+ return;
+ }
+ memset(covers + count, 0, rest * sizeof(cover_type));
+ }
+
+ const int8u* mask = m_rbuf->row(y) + x * Step + Offset;
+ do
+ {
+ *covers++ = (cover_type)m_mask_function.calculate(mask);
+ mask += Step;
+ }
+ while(--count);
+ }
+
+
+ //--------------------------------------------------------------------
+ void combine_hspan(int x, int y, cover_type* dst, int num_pix) const
+ {
+ int xmax = m_rbuf->width() - 1;
+ int ymax = m_rbuf->height() - 1;
+
+ int count = num_pix;
+ cover_type* covers = dst;
+
+ if(y < 0 || y > ymax)
+ {
+ memset(dst, 0, num_pix * sizeof(cover_type));
+ return;
+ }
+
+ if(x < 0)
+ {
+ count += x;
+ if(count <= 0)
+ {
+ memset(dst, 0, num_pix * sizeof(cover_type));
+ return;
+ }
+ memset(covers, 0, -x * sizeof(cover_type));
+ covers -= x;
+ x = 0;
+ }
+
+ if(x + count > xmax)
+ {
+ int rest = x + count - xmax - 1;
+ count -= rest;
+ if(count <= 0)
+ {
+ memset(dst, 0, num_pix * sizeof(cover_type));
+ return;
+ }
+ memset(covers + count, 0, rest * sizeof(cover_type));
+ }
+
+ const int8u* mask = m_rbuf->row(y) + x * Step + Offset;
+ do
+ {
+ *covers = (cover_type)(((*covers) *
+ m_mask_function.calculate(mask)) >>
+ cover_shift);
+ ++covers;
+ mask += Step;
+ }
+ while(--count);
+ }
+
+ //--------------------------------------------------------------------
+ void fill_vspan(int x, int y, cover_type* dst, int num_pix) const
+ {
+ int xmax = m_rbuf->width() - 1;
+ int ymax = m_rbuf->height() - 1;
+
+ int count = num_pix;
+ cover_type* covers = dst;
+
+ if(x < 0 || x > xmax)
+ {
+ memset(dst, 0, num_pix * sizeof(cover_type));
+ return;
+ }
+
+ if(y < 0)
+ {
+ count += y;
+ if(count <= 0)
+ {
+ memset(dst, 0, num_pix * sizeof(cover_type));
+ return;
+ }
+ memset(covers, 0, -y * sizeof(cover_type));
+ covers -= y;
+ y = 0;
+ }
+
+ if(y + count > ymax)
+ {
+ int rest = y + count - ymax - 1;
+ count -= rest;
+ if(count <= 0)
+ {
+ memset(dst, 0, num_pix * sizeof(cover_type));
+ return;
+ }
+ memset(covers + count, 0, rest * sizeof(cover_type));
+ }
+
+ const int8u* mask = m_rbuf->row(y) + x * Step + Offset;
+ do
+ {
+ *covers++ = (cover_type)m_mask_function.calculate(mask);
+ mask += m_rbuf->stride();
+ }
+ while(--count);
+ }
+
+ //--------------------------------------------------------------------
+ void combine_vspan(int x, int y, cover_type* dst, int num_pix) const
+ {
+ int xmax = m_rbuf->width() - 1;
+ int ymax = m_rbuf->height() - 1;
+
+ int count = num_pix;
+ cover_type* covers = dst;
+
+ if(x < 0 || x > xmax)
+ {
+ memset(dst, 0, num_pix * sizeof(cover_type));
+ return;
+ }
+
+ if(y < 0)
+ {
+ count += y;
+ if(count <= 0)
+ {
+ memset(dst, 0, num_pix * sizeof(cover_type));
+ return;
+ }
+ memset(covers, 0, -y * sizeof(cover_type));
+ covers -= y;
+ y = 0;
+ }
+
+ if(y + count > ymax)
+ {
+ int rest = y + count - ymax - 1;
+ count -= rest;
+ if(count <= 0)
+ {
+ memset(dst, 0, num_pix * sizeof(cover_type));
+ return;
+ }
+ memset(covers + count, 0, rest * sizeof(cover_type));
+ }
+
+ const int8u* mask = m_rbuf->row(y) + x * Step + Offset;
+ do
+ {
+ *covers = (cover_type)(((*covers) *
+ m_mask_function.calculate(mask)) >>
+ cover_shift);
+ ++covers;
+ mask += m_rbuf->stride();
+ }
+ while(--count);
+ }
+
+
+ private:
+ alpha_mask_u8(const self_type&);
+ const self_type& operator = (const self_type&);
+
+ rendering_buffer* m_rbuf;
+ MaskF m_mask_function;
+ };
+
+
+ typedef alpha_mask_u8<1, 0> alpha_mask_gray8; //----alpha_mask_gray8
+
+ typedef alpha_mask_u8<3, 0> alpha_mask_rgb24r; //----alpha_mask_rgb24r
+ typedef alpha_mask_u8<3, 1> alpha_mask_rgb24g; //----alpha_mask_rgb24g
+ typedef alpha_mask_u8<3, 2> alpha_mask_rgb24b; //----alpha_mask_rgb24b
+
+ typedef alpha_mask_u8<3, 2> alpha_mask_bgr24r; //----alpha_mask_bgr24r
+ typedef alpha_mask_u8<3, 1> alpha_mask_bgr24g; //----alpha_mask_bgr24g
+ typedef alpha_mask_u8<3, 0> alpha_mask_bgr24b; //----alpha_mask_bgr24b
+
+ typedef alpha_mask_u8<4, 0> alpha_mask_rgba32r; //----alpha_mask_rgba32r
+ typedef alpha_mask_u8<4, 1> alpha_mask_rgba32g; //----alpha_mask_rgba32g
+ typedef alpha_mask_u8<4, 2> alpha_mask_rgba32b; //----alpha_mask_rgba32b
+ typedef alpha_mask_u8<4, 3> alpha_mask_rgba32a; //----alpha_mask_rgba32a
+
+ typedef alpha_mask_u8<4, 1> alpha_mask_argb32r; //----alpha_mask_argb32r
+ typedef alpha_mask_u8<4, 2> alpha_mask_argb32g; //----alpha_mask_argb32g
+ typedef alpha_mask_u8<4, 3> alpha_mask_argb32b; //----alpha_mask_argb32b
+ typedef alpha_mask_u8<4, 0> alpha_mask_argb32a; //----alpha_mask_argb32a
+
+ typedef alpha_mask_u8<4, 2> alpha_mask_bgra32r; //----alpha_mask_bgra32r
+ typedef alpha_mask_u8<4, 1> alpha_mask_bgra32g; //----alpha_mask_bgra32g
+ typedef alpha_mask_u8<4, 0> alpha_mask_bgra32b; //----alpha_mask_bgra32b
+ typedef alpha_mask_u8<4, 3> alpha_mask_bgra32a; //----alpha_mask_bgra32a
+
+ typedef alpha_mask_u8<4, 3> alpha_mask_abgr32r; //----alpha_mask_abgr32r
+ typedef alpha_mask_u8<4, 2> alpha_mask_abgr32g; //----alpha_mask_abgr32g
+ typedef alpha_mask_u8<4, 1> alpha_mask_abgr32b; //----alpha_mask_abgr32b
+ typedef alpha_mask_u8<4, 0> alpha_mask_abgr32a; //----alpha_mask_abgr32a
+
+ typedef alpha_mask_u8<3, 0, rgb_to_gray_mask_u8<0, 1, 2> > alpha_mask_rgb24gray; //----alpha_mask_rgb24gray
+ typedef alpha_mask_u8<3, 0, rgb_to_gray_mask_u8<2, 1, 0> > alpha_mask_bgr24gray; //----alpha_mask_bgr24gray
+ typedef alpha_mask_u8<4, 0, rgb_to_gray_mask_u8<0, 1, 2> > alpha_mask_rgba32gray; //----alpha_mask_rgba32gray
+ typedef alpha_mask_u8<4, 1, rgb_to_gray_mask_u8<0, 1, 2> > alpha_mask_argb32gray; //----alpha_mask_argb32gray
+ typedef alpha_mask_u8<4, 0, rgb_to_gray_mask_u8<2, 1, 0> > alpha_mask_bgra32gray; //----alpha_mask_bgra32gray
+ typedef alpha_mask_u8<4, 1, rgb_to_gray_mask_u8<2, 1, 0> > alpha_mask_abgr32gray; //----alpha_mask_abgr32gray
+
+
+
+ //==========================================================amask_no_clip_u8
+ template<unsigned Step=1, unsigned Offset=0, class MaskF=one_component_mask_u8>
+ class amask_no_clip_u8
+ {
+ public:
+ typedef int8u cover_type;
+ typedef amask_no_clip_u8<Step, Offset, MaskF> self_type;
+ enum
+ {
+ cover_shift = 8,
+ cover_none = 0,
+ cover_full = 255
+ };
+
+ amask_no_clip_u8() : m_rbuf(0) {}
+ amask_no_clip_u8(rendering_buffer& rbuf) : m_rbuf(&rbuf) {}
+
+ void attach(rendering_buffer& rbuf) { m_rbuf = &rbuf; }
+
+ MaskF& mask_function() { return m_mask_function; }
+ const MaskF& mask_function() const { return m_mask_function; }
+
+
+ //--------------------------------------------------------------------
+ cover_type pixel(int x, int y) const
+ {
+ return (cover_type)m_mask_function.calculate(
+ m_rbuf->row(y) + x * Step + Offset);
+ }
+
+
+ //--------------------------------------------------------------------
+ cover_type combine_pixel(int x, int y, cover_type val) const
+ {
+ return (cover_type)((val *
+ m_mask_function.calculate(
+ m_rbuf->row(y) + x * Step + Offset)) >>
+ cover_shift);
+ }
+
+
+ //--------------------------------------------------------------------
+ void fill_hspan(int x, int y, cover_type* dst, int num_pix) const
+ {
+ const int8u* mask = m_rbuf->row(y) + x * Step + Offset;
+ do
+ {
+ *dst++ = (cover_type)m_mask_function.calculate(mask);
+ mask += Step;
+ }
+ while(--num_pix);
+ }
+
+
+
+ //--------------------------------------------------------------------
+ void combine_hspan(int x, int y, cover_type* dst, int num_pix) const
+ {
+ const int8u* mask = m_rbuf->row(y) + x * Step + Offset;
+ do
+ {
+ *dst = (cover_type)(((*dst) *
+ m_mask_function.calculate(mask)) >>
+ cover_shift);
+ ++dst;
+ mask += Step;
+ }
+ while(--num_pix);
+ }
+
+
+ //--------------------------------------------------------------------
+ void fill_vspan(int x, int y, cover_type* dst, int num_pix) const
+ {
+ const int8u* mask = m_rbuf->row(y) + x * Step + Offset;
+ do
+ {
+ *dst++ = (cover_type)m_mask_function.calculate(mask);
+ mask += m_rbuf->stride();
+ }
+ while(--num_pix);
+ }
+
+
+ //--------------------------------------------------------------------
+ void combine_vspan(int x, int y, cover_type* dst, int num_pix) const
+ {
+ const int8u* mask = m_rbuf->row(y) + x * Step + Offset;
+ do
+ {
+ *dst = (cover_type)(((*dst) *
+ m_mask_function.calculate(mask)) >>
+ cover_shift);
+ ++dst;
+ mask += m_rbuf->stride();
+ }
+ while(--num_pix);
+ }
+
+ private:
+ amask_no_clip_u8(const self_type&);
+ const self_type& operator = (const self_type&);
+
+ rendering_buffer* m_rbuf;
+ MaskF m_mask_function;
+ };
+
+
+ typedef amask_no_clip_u8<1, 0> amask_no_clip_gray8; //----amask_no_clip_gray8
+
+ typedef amask_no_clip_u8<3, 0> amask_no_clip_rgb24r; //----amask_no_clip_rgb24r
+ typedef amask_no_clip_u8<3, 1> amask_no_clip_rgb24g; //----amask_no_clip_rgb24g
+ typedef amask_no_clip_u8<3, 2> amask_no_clip_rgb24b; //----amask_no_clip_rgb24b
+
+ typedef amask_no_clip_u8<3, 2> amask_no_clip_bgr24r; //----amask_no_clip_bgr24r
+ typedef amask_no_clip_u8<3, 1> amask_no_clip_bgr24g; //----amask_no_clip_bgr24g
+ typedef amask_no_clip_u8<3, 0> amask_no_clip_bgr24b; //----amask_no_clip_bgr24b
+
+ typedef amask_no_clip_u8<4, 0> amask_no_clip_rgba32r; //----amask_no_clip_rgba32r
+ typedef amask_no_clip_u8<4, 1> amask_no_clip_rgba32g; //----amask_no_clip_rgba32g
+ typedef amask_no_clip_u8<4, 2> amask_no_clip_rgba32b; //----amask_no_clip_rgba32b
+ typedef amask_no_clip_u8<4, 3> amask_no_clip_rgba32a; //----amask_no_clip_rgba32a
+
+ typedef amask_no_clip_u8<4, 1> amask_no_clip_argb32r; //----amask_no_clip_argb32r
+ typedef amask_no_clip_u8<4, 2> amask_no_clip_argb32g; //----amask_no_clip_argb32g
+ typedef amask_no_clip_u8<4, 3> amask_no_clip_argb32b; //----amask_no_clip_argb32b
+ typedef amask_no_clip_u8<4, 0> amask_no_clip_argb32a; //----amask_no_clip_argb32a
+
+ typedef amask_no_clip_u8<4, 2> amask_no_clip_bgra32r; //----amask_no_clip_bgra32r
+ typedef amask_no_clip_u8<4, 1> amask_no_clip_bgra32g; //----amask_no_clip_bgra32g
+ typedef amask_no_clip_u8<4, 0> amask_no_clip_bgra32b; //----amask_no_clip_bgra32b
+ typedef amask_no_clip_u8<4, 3> amask_no_clip_bgra32a; //----amask_no_clip_bgra32a
+
+ typedef amask_no_clip_u8<4, 3> amask_no_clip_abgr32r; //----amask_no_clip_abgr32r
+ typedef amask_no_clip_u8<4, 2> amask_no_clip_abgr32g; //----amask_no_clip_abgr32g
+ typedef amask_no_clip_u8<4, 1> amask_no_clip_abgr32b; //----amask_no_clip_abgr32b
+ typedef amask_no_clip_u8<4, 0> amask_no_clip_abgr32a; //----amask_no_clip_abgr32a
+
+ typedef amask_no_clip_u8<3, 0, rgb_to_gray_mask_u8<0, 1, 2> > amask_no_clip_rgb24gray; //----amask_no_clip_rgb24gray
+ typedef amask_no_clip_u8<3, 0, rgb_to_gray_mask_u8<2, 1, 0> > amask_no_clip_bgr24gray; //----amask_no_clip_bgr24gray
+ typedef amask_no_clip_u8<4, 0, rgb_to_gray_mask_u8<0, 1, 2> > amask_no_clip_rgba32gray; //----amask_no_clip_rgba32gray
+ typedef amask_no_clip_u8<4, 1, rgb_to_gray_mask_u8<0, 1, 2> > amask_no_clip_argb32gray; //----amask_no_clip_argb32gray
+ typedef amask_no_clip_u8<4, 0, rgb_to_gray_mask_u8<2, 1, 0> > amask_no_clip_bgra32gray; //----amask_no_clip_bgra32gray
+ typedef amask_no_clip_u8<4, 1, rgb_to_gray_mask_u8<2, 1, 0> > amask_no_clip_abgr32gray; //----amask_no_clip_abgr32gray
+
+
+}
+
+
+
+#endif
diff --git a/agg/inc/agg_arc.h b/agg/inc/agg_arc.h
new file mode 100755
index 000000000000..80b148d910d0
--- /dev/null
+++ b/agg/inc/agg_arc.h
@@ -0,0 +1,74 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// Arc vertex generator
+//
+//----------------------------------------------------------------------------
+
+#ifndef AGG_ARC_INCLUDED
+#define AGG_ARC_INCLUDED
+
+#include <math.h>
+#include "agg_basics.h"
+
+namespace agg
+{
+
+ //=====================================================================arc
+ //
+ // See Implementation agg_arc.cpp
+ //
+ class arc
+ {
+ public:
+ arc() : m_scale(1.0), m_initialized(false) {}
+ arc(double x, double y,
+ double rx, double ry,
+ double a1, double a2,
+ bool ccw=true);
+
+ void init(double x, double y,
+ double rx, double ry,
+ double a1, double a2,
+ bool ccw=true);
+
+ void approximation_scale(double s);
+ double approximation_scale() const { return m_scale; }
+
+ void rewind(unsigned);
+ unsigned vertex(double* x, double* y);
+
+ private:
+ void normalize(double a1, double a2, bool ccw);
+
+ double m_x;
+ double m_y;
+ double m_rx;
+ double m_ry;
+ double m_angle;
+ double m_start;
+ double m_end;
+ double m_scale;
+ double m_da;
+ bool m_ccw;
+ bool m_initialized;
+ unsigned m_path_cmd;
+ };
+
+
+}
+
+
+#endif
diff --git a/agg/inc/agg_array.h b/agg/inc/agg_array.h
new file mode 100755
index 000000000000..2970181c4510
--- /dev/null
+++ b/agg/inc/agg_array.h
@@ -0,0 +1,887 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+#ifndef AGG_ARRAY_INCLUDED
+#define AGG_ARRAY_INCLUDED
+
+#include <stddef.h>
+#include <string.h>
+#include "agg_basics.h"
+
+namespace agg
+{
+
+
+
+ //-------------------------------------------------------pod_array_adaptor
+ template<class T> class pod_array_adaptor
+ {
+ public:
+ typedef T value_type;
+ pod_array_adaptor(T* array, unsigned _size) :
+ m_array(array), m_size(_size) {}
+
+ unsigned size() const { return m_size; }
+ const T& operator [] (unsigned idx) const { return m_array[idx]; }
+ T& operator [] (unsigned idx) { return m_array[idx]; }
+ private:
+ T* m_array;
+ unsigned m_size;
+ };
+
+
+
+ //---------------------------------------------------------pod_auto_array
+ template<class T, unsigned Size> class pod_auto_array
+ {
+ public:
+ typedef T value_type;
+ typedef pod_auto_array<T, Size> self_type;
+
+ pod_auto_array() {}
+ explicit pod_auto_array(const T* c)
+ {
+ memcpy(m_array, c, sizeof(T) * Size);
+ }
+
+ const self_type& operator = (const T* c)
+ {
+ memcpy(m_array, c, sizeof(T) * Size);
+ return *this;
+ }
+
+ static unsigned size() { return Size; }
+ const T& operator [] (unsigned i) const { return m_array[i]; }
+ T& operator [] (unsigned i) { return m_array[i]; }
+ private:
+ T m_array[Size];
+ };
+
+
+
+
+
+ //---------------------------------------------------------------pod_array
+ // A simple class template to store Plain Old Data, a vector
+ // of a fixed size. The data is continous in memory
+ //------------------------------------------------------------------------
+ template<class T> class pod_array
+ {
+ public:
+ typedef T value_type;
+
+ ~pod_array() { delete [] m_array; }
+ pod_array() : m_size(0), m_capacity(0), m_array(0) {}
+ pod_array(unsigned cap, unsigned extra_tail=0);
+
+ // Copying
+ pod_array(const pod_array<T>&);
+ const pod_array<T>& operator = (const pod_array<T>&);
+
+ unsigned capacity() const { return m_capacity; }
+ void capacity(unsigned cap, unsigned extra_tail=0);
+
+ void resize(unsigned new_size);
+
+ void add(const T& v) { m_array[m_size++] = v; }
+ void inc_size(unsigned _size) { m_size += _size; }
+ unsigned size() const { return m_size; }
+ unsigned byte_size() const { return m_size * sizeof(T); }
+ void serialize(int8u* ptr) const;
+ void deserialize(const int8u* data, unsigned byte_size);
+ const T& operator [] (unsigned idx) const { return m_array[idx]; }
+ T& operator [] (unsigned idx) { return m_array[idx]; }
+
+ void remove_all() { m_size = 0; }
+ void cut_at(unsigned num) { if(num < m_size) m_size = num; }
+
+ private:
+ unsigned m_size;
+ unsigned m_capacity;
+ T* m_array;
+ };
+
+ //------------------------------------------------------------------------
+ template<class T>
+ void pod_array<T>::capacity(unsigned cap, unsigned extra_tail)
+ {
+ m_size = 0;
+ if(cap > m_capacity)
+ {
+ delete [] m_array;
+ m_capacity = cap + extra_tail;
+ m_array = m_capacity ? new T [m_capacity] : 0;
+ }
+ }
+
+ //------------------------------------------------------------------------
+ template<class T>
+ void pod_array<T>::resize(unsigned new_size)
+ {
+ if(new_size > m_size)
+ {
+ if(new_size > m_capacity)
+ {
+ T* data = new T[new_size];
+ memcpy(data, m_array, m_size * sizeof(T));
+ delete [] m_array;
+ m_array = data;
+ }
+ }
+ else
+ {
+ m_size = new_size;
+ }
+ }
+
+ //------------------------------------------------------------------------
+ template<class T> pod_array<T>::pod_array(unsigned cap, unsigned extra_tail) :
+ m_size(cap), m_capacity(cap + extra_tail), m_array(new T[m_capacity]) {}
+
+ //------------------------------------------------------------------------
+ template<class T> pod_array<T>::pod_array(const pod_array<T>& v) :
+ m_size(v.m_size),
+ m_capacity(v.m_capacity),
+ m_array(v.m_capacity ? new T [v.m_capacity] : 0)
+ {
+ memcpy(m_array, v.m_array, sizeof(T) * v.m_size);
+ }
+
+ //------------------------------------------------------------------------
+ template<class T> const pod_array<T>&
+ pod_array<T>::operator = (const pod_array<T>&v)
+ {
+ capacity(v.m_capacity);
+ if(v.m_size) memcpy(m_array, v.m_array, sizeof(T) * v.m_size);
+ return *this;
+ }
+
+ //------------------------------------------------------------------------
+ template<class T> void pod_array<T>::serialize(int8u* ptr) const
+ {
+ if(m_size) memcpy(ptr, m_array, m_size * sizeof(T));
+ }
+
+ //------------------------------------------------------------------------
+ template<class T>
+ void pod_array<T>::deserialize(const int8u* data, unsigned _byte_size)
+ {
+ _byte_size /= sizeof(T);
+ capacity(_byte_size);
+ if(_byte_size) memcpy(m_array, data, _byte_size * sizeof(T));
+ }
+
+
+
+
+
+ //---------------------------------------------------------------pod_deque
+ // A simple class template to store Plain Old Data, similar to std::deque
+ // It doesn't reallocate memory but instead, uses blocks of data of size
+ // of (1 << S), that is, power of two. The data is NOT contiguous in memory,
+ // so the only valid access method is operator [] or curr(), prev(), next()
+ //
+ // There reallocs occure only when the pool of pointers to blocks needs
+ // to be extended (it happens very rarely). You can control the value
+ // of increment to reallocate the pointer buffer. See the second constructor.
+ // By default, the incremeent value equals (1 << S), i.e., the block size.
+ //------------------------------------------------------------------------
+ template<class T, unsigned S=6> class pod_deque
+ {
+ public:
+ enum
+ {
+ block_shift = S,
+ block_size = 1 << block_shift,
+ block_mask = block_size - 1
+ };
+
+ typedef T value_type;
+
+ ~pod_deque();
+ pod_deque();
+ pod_deque(unsigned block_ptr_inc);
+
+ // Copying
+ pod_deque(const pod_deque<T, S>& v);
+ const pod_deque<T, S>& operator = (const pod_deque<T, S>& v);
+
+ void remove_all() { m_size = 0; }
+ void free_all() { free_tail(0); }
+ void free_tail(unsigned size);
+ void add(const T& val);
+ void modify_last(const T& val);
+ void remove_last();
+
+ int allocate_continuous_block(unsigned num_elements);
+
+ void add_array(const T* ptr, unsigned num_elem)
+ {
+ while(num_elem--)
+ {
+ add(*ptr++);
+ }
+ }
+
+ template<class DataAccessor> void add_data(DataAccessor& data)
+ {
+ while(data.size())
+ {
+ add(*data);
+ ++data;
+ }
+ }
+
+ void cut_at(unsigned _size)
+ {
+ if(_size < m_size) m_size = _size;
+ }
+
+ unsigned size() const { return m_size; }
+
+ const T& operator [] (unsigned idx) const
+ {
+ return m_blocks[idx >> block_shift][idx & block_mask];
+ }
+
+ T& operator [] (unsigned idx)
+ {
+ return m_blocks[idx >> block_shift][idx & block_mask];
+ }
+
+ const T& curr(unsigned idx) const
+ {
+ return (*this)[idx];
+ }
+
+ T& curr(unsigned idx)
+ {
+ return (*this)[idx];
+ }
+
+ const T& prev(unsigned idx) const
+ {
+ return (*this)[(idx + m_size - 1) % m_size];
+ }
+
+ T& prev(unsigned idx)
+ {
+ return (*this)[(idx + m_size - 1) % m_size];
+ }
+
+ const T& next(unsigned idx) const
+ {
+ return (*this)[(idx + 1) % m_size];
+ }
+
+ T& next(unsigned idx)
+ {
+ return (*this)[(idx + 1) % m_size];
+ }
+
+ const T& last() const
+ {
+ return (*this)[m_size - 1];
+ }
+
+ T& last()
+ {
+ return (*this)[m_size - 1];
+ }
+
+ unsigned byte_size() const;
+ void serialize(int8u* ptr) const;
+ void deserialize(const int8u* data, unsigned byte_size);
+ void deserialize(unsigned start, const T& empty_val,
+ const int8u* data, unsigned byte_size);
+
+ template<class ByteAccessor>
+ void deserialize(ByteAccessor data)
+ {
+ remove_all();
+ unsigned elem_size = data.size() / sizeof(T);
+
+ for(unsigned i = 0; i < elem_size; ++i)
+ {
+ int8u* ptr = (int8u*)data_ptr();
+ for(unsigned j = 0; j < sizeof(T); ++j)
+ {
+ *ptr++ = *data;
+ ++data;
+ }
+ ++m_size;
+ }
+ }
+
+ template<class ByteAccessor>
+ void deserialize(unsigned start, const T& empty_val, ByteAccessor data)
+ {
+ while(m_size < start)
+ {
+ add(empty_val);
+ }
+
+ unsigned elem_size = data.size() / sizeof(T);
+ for(unsigned i = 0; i < elem_size; ++i)
+ {
+ int8u* ptr;
+ if(start + i < m_size)
+ {
+ ptr = (int8u*)(&((*this)[start + i]));
+ }
+ else
+ {
+ ptr = (int8u*)data_ptr();
+ ++m_size;
+ }
+ for(unsigned j = 0; j < sizeof(T); ++j)
+ {
+ *ptr++ = *data;
+ ++data;
+ }
+ }
+ }
+
+ const T* block(unsigned nb) const { return m_blocks[nb]; }
+
+ private:
+ void allocate_block(unsigned nb);
+ T* data_ptr();
+
+ unsigned m_size;
+ unsigned m_num_blocks;
+ unsigned m_max_blocks;
+ T** m_blocks;
+ unsigned m_block_ptr_inc;
+ };
+
+
+ //------------------------------------------------------------------------
+ template<class T, unsigned S> pod_deque<T, S>::~pod_deque()
+ {
+ if(m_num_blocks)
+ {
+ T** blk = m_blocks + m_num_blocks - 1;
+ while(m_num_blocks--)
+ {
+ delete [] *blk;
+ --blk;
+ }
+ delete [] m_blocks;
+ }
+ }
+
+
+ //------------------------------------------------------------------------
+ template<class T, unsigned S>
+ void pod_deque<T, S>::free_tail(unsigned _size)
+ {
+ if(_size < m_size)
+ {
+ unsigned nb = (_size + block_mask) >> block_shift;
+ while(m_num_blocks > nb)
+ {
+ delete [] m_blocks[--m_num_blocks];
+ }
+ m_size = _size;
+ }
+ }
+
+
+ //------------------------------------------------------------------------
+ template<class T, unsigned S> pod_deque<T, S>::pod_deque() :
+ m_size(0),
+ m_num_blocks(0),
+ m_max_blocks(0),
+ m_blocks(0),
+ m_block_ptr_inc(block_size)
+ {
+ }
+
+
+ //------------------------------------------------------------------------
+ template<class T, unsigned S>
+ pod_deque<T, S>::pod_deque(unsigned block_ptr_inc) :
+ m_size(0),
+ m_num_blocks(0),
+ m_max_blocks(0),
+ m_blocks(0),
+ m_block_ptr_inc(block_ptr_inc)
+ {
+ }
+
+
+ //------------------------------------------------------------------------
+ template<class T, unsigned S>
+ pod_deque<T, S>::pod_deque(const pod_deque<T, S>& v) :
+ m_size(v.m_size),
+ m_num_blocks(v.m_num_blocks),
+ m_max_blocks(v.m_max_blocks),
+ m_blocks(v.m_max_blocks ? new T* [v.m_max_blocks] : 0),
+ m_block_ptr_inc(v.m_block_ptr_inc)
+ {
+ unsigned i;
+ for(i = 0; i < v.m_num_blocks; ++i)
+ {
+ m_blocks[i] = new T [block_size];
+ memcpy(m_blocks[i], v.m_blocks[i], block_size * sizeof(T));
+ }
+ }
+
+
+ //------------------------------------------------------------------------
+ template<class T, unsigned S>
+ const pod_deque<T, S>& pod_deque<T, S>::operator = (const pod_deque<T, S>& v)
+ {
+ unsigned i;
+ for(i = m_num_blocks; i < v.m_num_blocks; ++i)
+ {
+ allocate_block(i);
+ }
+ for(i = 0; i < v.m_num_blocks; ++i)
+ {
+ memcpy(m_blocks[i], v.m_blocks[i], block_size * sizeof(T));
+ }
+ m_size = v.m_size;
+ return *this;
+ }
+
+
+ //------------------------------------------------------------------------
+ template<class T, unsigned S>
+ void pod_deque<T, S>::allocate_block(unsigned nb)
+ {
+ if(nb >= m_max_blocks)
+ {
+ T** new_blocks = new T* [m_max_blocks + m_block_ptr_inc];
+
+ if(m_blocks)
+ {
+ memcpy(new_blocks,
+ m_blocks,
+ m_num_blocks * sizeof(T*));
+
+ delete [] m_blocks;
+ }
+ m_blocks = new_blocks;
+ m_max_blocks += m_block_ptr_inc;
+ }
+ m_blocks[nb] = new T [block_size];
+ m_num_blocks++;
+ }
+
+
+
+ //------------------------------------------------------------------------
+ template<class T, unsigned S>
+ inline T* pod_deque<T, S>::data_ptr()
+ {
+ unsigned nb = m_size >> block_shift;
+ if(nb >= m_num_blocks)
+ {
+ allocate_block(nb);
+ }
+ return m_blocks[nb] + (m_size & block_mask);
+ }
+
+
+
+ //------------------------------------------------------------------------
+ template<class T, unsigned S>
+ inline void pod_deque<T, S>::add(const T& val)
+ {
+ *data_ptr() = val;
+ ++m_size;
+ }
+
+
+ //------------------------------------------------------------------------
+ template<class T, unsigned S>
+ inline void pod_deque<T, S>::remove_last()
+ {
+ if(m_size) --m_size;
+ }
+
+
+ //------------------------------------------------------------------------
+ template<class T, unsigned S>
+ void pod_deque<T, S>::modify_last(const T& val)
+ {
+ remove_last();
+ add(val);
+ }
+
+
+ //------------------------------------------------------------------------
+ template<class T, unsigned S>
+ int pod_deque<T, S>::allocate_continuous_block(unsigned num_elements)
+ {
+ if(num_elements < block_size)
+ {
+ data_ptr(); // Allocate initial block if necessary
+ unsigned rest = block_size - (m_size & block_mask);
+ unsigned index;
+ if(num_elements <= rest)
+ {
+ // The rest of the block is good, we can use it
+ //-----------------
+ index = m_size;
+ m_size += num_elements;
+ return index;
+ }
+
+ // New block
+ //---------------
+ m_size += rest;
+ data_ptr();
+ index = m_size;
+ m_size += num_elements;
+ return index;
+ }
+ return -1; // Impossible to allocate
+ }
+
+
+ //------------------------------------------------------------------------
+ template<class T, unsigned S>
+ unsigned pod_deque<T, S>::byte_size() const
+ {
+ return m_size * sizeof(T);
+ }
+
+
+ //------------------------------------------------------------------------
+ template<class T, unsigned S>
+ void pod_deque<T, S>::serialize(int8u* ptr) const
+ {
+ unsigned i;
+ for(i = 0; i < m_size; i++)
+ {
+ memcpy(ptr, &(*this)[i], sizeof(T));
+ ptr += sizeof(T);
+ }
+ }
+
+ //------------------------------------------------------------------------
+ template<class T, unsigned S>
+ void pod_deque<T, S>::deserialize(const int8u* data, unsigned _byte_size)
+ {
+ remove_all();
+ _byte_size /= sizeof(T);
+ for(unsigned i = 0; i < _byte_size; ++i)
+ {
+ T* ptr = data_ptr();
+ memcpy(ptr, data, sizeof(T));
+ ++m_size;
+ data += sizeof(T);
+ }
+ }
+
+
+ // Replace or add a number of elements starting from "start" position
+ //------------------------------------------------------------------------
+ template<class T, unsigned S>
+ void pod_deque<T, S>::deserialize(unsigned start, const T& empty_val,
+ const int8u* data, unsigned _byte_size)
+ {
+ while(m_size < start)
+ {
+ add(empty_val);
+ }
+
+ _byte_size /= sizeof(T);
+ for(unsigned i = 0; i < _byte_size; ++i)
+ {
+ if(start + i < m_size)
+ {
+ memcpy(&((*this)[start + i]), data, sizeof(T));
+ }
+ else
+ {
+ T* ptr = data_ptr();
+ memcpy(ptr, data, sizeof(T));
+ ++m_size;
+ }
+ data += sizeof(T);
+ }
+ }
+
+
+ //-----------------------------------------------------------pod_allocator
+ // Allocator for arbitrary POD data. Most usable in different cache
+ // systems for efficient memory allocations.
+ // Memory is allocated with blocks of fixed size ("block_size" in
+ // the constructor). If required size exceeds the block size the allocator
+ // creates a new block of the required size. However, the most efficient
+ // use is when the average reqired size is much less than the block size.
+ //------------------------------------------------------------------------
+ class pod_allocator
+ {
+ public:
+ void remove_all()
+ {
+ if(m_num_blocks)
+ {
+ int8u** blk = m_blocks + m_num_blocks - 1;
+ while(m_num_blocks--)
+ {
+ delete [] *blk;
+ --blk;
+ }
+ delete [] m_blocks;
+ }
+ m_num_blocks = 0;
+ m_max_blocks = 0;
+ m_blocks = 0;
+ m_buf_ptr = 0;
+ m_rest = 0;
+ }
+
+ ~pod_allocator()
+ {
+ remove_all();
+ }
+
+ pod_allocator(unsigned block_size, unsigned block_ptr_inc=256-8) :
+ m_block_size(block_size),
+ m_block_ptr_inc(block_ptr_inc),
+ m_num_blocks(0),
+ m_max_blocks(0),
+ m_blocks(0),
+ m_buf_ptr(0),
+ m_rest(0)
+ {
+ }
+
+
+ int8u* allocate(unsigned size, unsigned alignment=1)
+ {
+ if(size == 0) return 0;
+ if(size <= m_rest)
+ {
+ int8u* ptr = m_buf_ptr;
+ if(alignment > 1)
+ {
+ unsigned align = (alignment - unsigned((size_t)ptr) % alignment) % alignment;
+ size += align;
+ ptr += align;
+ if(size <= m_rest)
+ {
+ m_rest -= size;
+ m_buf_ptr += size;
+ return ptr;
+ }
+ allocate_block(size);
+ return allocate(size - align, alignment);
+ }
+ m_rest -= size;
+ m_buf_ptr += size;
+ return ptr;
+ }
+ allocate_block(size + alignment - 1);
+ return allocate(size, alignment);
+ }
+
+
+ private:
+ void allocate_block(unsigned size)
+ {
+ if(size < m_block_size) size = m_block_size;
+ if(m_num_blocks >= m_max_blocks)
+ {
+ int8u** new_blocks = new int8u* [m_max_blocks + m_block_ptr_inc];
+
+ if(m_blocks)
+ {
+ memcpy(new_blocks,
+ m_blocks,
+ m_num_blocks * sizeof(int8u*));
+
+ delete [] m_blocks;
+ }
+ m_blocks = new_blocks;
+ m_max_blocks += m_block_ptr_inc;
+ }
+ m_blocks[m_num_blocks] = m_buf_ptr = new int8u [size];
+ m_num_blocks++;
+ m_rest = size;
+ }
+
+ unsigned m_block_size;
+ unsigned m_block_ptr_inc;
+ unsigned m_num_blocks;
+ unsigned m_max_blocks;
+ int8u** m_blocks;
+ int8u* m_buf_ptr;
+ unsigned m_rest;
+ };
+
+
+
+
+
+
+
+
+ //------------------------------------------------------------------------
+ enum
+ {
+ quick_sort_threshold = 9
+ };
+
+
+ //-----------------------------------------------------------swap_elements
+ template<class T> inline void swap_elements(T& a, T& b)
+ {
+ T temp = a;
+ a = b;
+ b = temp;
+ }
+
+
+ //--------------------------------------------------------------quick_sort
+ template<class Array, class Less>
+ void quick_sort(Array& arr, Less less)
+ {
+ if(arr.size() < 2) return;
+
+ typename Array::value_type* e1;
+ typename Array::value_type* e2;
+
+ int stack[80];
+ int* top = stack;
+ int limit = arr.size();
+ int base = 0;
+
+ for(;;)
+ {
+ int len = limit - base;
+
+ int i;
+ int j;
+ int pivot;
+
+ if(len > quick_sort_threshold)
+ {
+ // we use base + len/2 as the pivot
+ pivot = base + len / 2;
+ swap_elements(arr[base], arr[pivot]);
+
+ i = base + 1;
+ j = limit - 1;
+
+ // now ensure that *i <= *base <= *j
+ e1 = &(arr[j]);
+ e2 = &(arr[i]);
+ if(less(*e1, *e2)) swap_elements(*e1, *e2);
+
+ e1 = &(arr[base]);
+ e2 = &(arr[i]);
+ if(less(*e1, *e2)) swap_elements(*e1, *e2);
+
+ e1 = &(arr[j]);
+ e2 = &(arr[base]);
+ if(less(*e1, *e2)) swap_elements(*e1, *e2);
+
+ for(;;)
+ {
+ do i++; while( less(arr[i], arr[base]) );
+ do j--; while( less(arr[base], arr[j]) );
+
+ if( i > j )
+ {
+ break;
+ }
+
+ swap_elements(arr[i], arr[j]);
+ }
+
+ swap_elements(arr[base], arr[j]);
+
+ // now, push the largest sub-array
+ if(j - base > limit - i)
+ {
+ top[0] = base;
+ top[1] = j;
+ base = i;
+ }
+ else
+ {
+ top[0] = i;
+ top[1] = limit;
+ limit = j;
+ }
+ top += 2;
+ }
+ else
+ {
+ // the sub-array is small, perform insertion sort
+ j = base;
+ i = j + 1;
+
+ for(; i < limit; j = i, i++)
+ {
+ for(; less(*(e1 = &(arr[j + 1])), *(e2 = &(arr[j]))); j--)
+ {
+ swap_elements(*e1, *e2);
+ if(j == base)
+ {
+ break;
+ }
+ }
+ }
+ if(top > stack)
+ {
+ top -= 2;
+ base = top[0];
+ limit = top[1];
+ }
+ else
+ {
+ break;
+ }
+ }
+ }
+ }
+
+
+
+
+ //------------------------------------------------------remove_duplicates
+ // Remove duplicates from a sorted array. It doesn't cut the the
+ // tail of the array, it just returns the number of remaining elements.
+ //-----------------------------------------------------------------------
+ template<class Array, class Equal>
+ unsigned remove_duplicates(Array& arr, Equal equal)
+ {
+ if(arr.size() < 2) return arr.size();
+
+ unsigned i, j;
+ for(i = 1, j = 1; i < arr.size(); i++)
+ {
+ typename Array::value_type& e = arr[i];
+ if(!equal(e, arr[i - 1]))
+ {
+ arr[j++] = e;
+ }
+ }
+ return j;
+ }
+
+
+
+
+}
+
+#endif
diff --git a/agg/inc/agg_arrowhead.h b/agg/inc/agg_arrowhead.h
new file mode 100755
index 000000000000..aac99c5ae980
--- /dev/null
+++ b/agg/inc/agg_arrowhead.h
@@ -0,0 +1,82 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// Simple arrowhead/arrowtail generator
+//
+//----------------------------------------------------------------------------
+#ifndef AGG_ARROWHEAD_INCLUDED
+#define AGG_ARROWHEAD_INCLUDED
+
+#include "agg_basics.h"
+
+namespace agg
+{
+
+ //===============================================================arrowhead
+ //
+ // See implementation agg_arrowhead.cpp
+ //
+ class arrowhead
+ {
+ public:
+ arrowhead();
+
+ void head(double d1, double d2, double d3, double d4)
+ {
+ m_head_d1 = d1;
+ m_head_d2 = d2;
+ m_head_d3 = d3;
+ m_head_d4 = d4;
+ m_head_flag = true;
+ }
+
+ void head() { m_head_flag = true; }
+ void no_head() { m_head_flag = false; }
+
+ void tail(double d1, double d2, double d3, double d4)
+ {
+ m_tail_d1 = d1;
+ m_tail_d2 = d2;
+ m_tail_d3 = d3;
+ m_tail_d4 = d4;
+ m_tail_flag = true;
+ }
+
+ void tail() { m_tail_flag = true; }
+ void no_tail() { m_tail_flag = false; }
+
+ void rewind(unsigned id);
+ unsigned vertex(double* x, double* y);
+
+ private:
+ double m_head_d1;
+ double m_head_d2;
+ double m_head_d3;
+ double m_head_d4;
+ double m_tail_d1;
+ double m_tail_d2;
+ double m_tail_d3;
+ double m_tail_d4;
+ bool m_head_flag;
+ bool m_tail_flag;
+ double m_coord[16];
+ unsigned m_cmd[8];
+ unsigned m_curr_id;
+ unsigned m_curr_coord;
+ };
+
+}
+
+#endif
diff --git a/agg/inc/agg_basics.h b/agg/inc/agg_basics.h
new file mode 100755
index 000000000000..d9ca881ab328
--- /dev/null
+++ b/agg/inc/agg_basics.h
@@ -0,0 +1,343 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+
+#ifndef AGG_BASICS_INCLUDED
+#define AGG_BASICS_INCLUDED
+
+#include "agg_config.h"
+
+//-------------------------------------------------------- Default basic types
+//
+// If the compiler has different capacity of the basic types you can redefine
+// them via the compiler command line or by generating agg_config.h that is
+// empty by default.
+//
+#ifndef AGG_INT8
+#define AGG_INT8 signed char
+#endif
+
+#ifndef AGG_INT8U
+#define AGG_INT8U unsigned char
+#endif
+
+#ifndef AGG_INT16
+#define AGG_INT16 short
+#endif
+
+#ifndef AGG_INT16U
+#define AGG_INT16U unsigned short
+#endif
+
+#ifndef AGG_INT32
+#define AGG_INT32 int
+#endif
+
+#ifndef AGG_INT32U
+#define AGG_INT32U unsigned
+#endif
+
+#ifndef AGG_INT64
+#if defined(_MSC_VER)
+#define AGG_INT64 signed __int64
+#else
+#define AGG_INT64 signed long long
+#endif
+#endif
+
+#ifndef AGG_INT64U
+#if defined(_MSC_VER)
+#define AGG_INT64U unsigned __int64
+#else
+#define AGG_INT64U unsigned long long
+#endif
+#endif
+
+//------------------------------------------------ Some fixes for MS Visual C++
+#if defined(_MSC_VER)
+#pragma warning(disable:4786) // Identifier was truncated...
+#endif
+
+#if defined(_MSC_VER)
+#define AGG_INLINE __forceinline
+#else
+#define AGG_INLINE inline
+#endif
+
+namespace agg
+{
+ //-------------------------------------------------------------------------
+ typedef AGG_INT8 int8; //----int8
+ typedef AGG_INT8U int8u; //----int8u
+ typedef AGG_INT16 int16; //----int16
+ typedef AGG_INT16U int16u; //----int16u
+ typedef AGG_INT32 int32; //----int32
+ typedef AGG_INT32U int32u; //----int32u
+ typedef AGG_INT64 int64; //----int64
+ typedef AGG_INT64U int64u; //----int64u
+
+ //-------------------------------------------------------------------------
+ typedef unsigned char cover_type; //----cover_type
+ enum
+ {
+ cover_shift = 8, //----cover_shift
+ cover_size = 1 << cover_shift, //----cover_size
+ cover_mask = cover_size - 1, //----cover_mask
+ cover_none = 0, //----cover_none
+ cover_full = cover_mask //----cover_full
+ };
+
+
+ //-----------------------------------------------------------------------pi
+ const double pi = 3.14159265358979323846;
+
+ //------------------------------------------------------------------deg2rad
+ inline double deg2rad(double deg)
+ {
+ return deg * pi / 180.0;
+ }
+
+ //------------------------------------------------------------------rad2deg
+ inline double rad2deg(double rad)
+ {
+ return rad * 180.0 / pi;
+ }
+
+ //----------------------------------------------------------------rect_base
+ template<class T> struct rect_base
+ {
+ typedef rect_base<T> self_type;
+ T x1;
+ T y1;
+ T x2;
+ T y2;
+
+ rect_base() {}
+ rect_base(T x1_, T y1_, T x2_, T y2_) :
+ x1(x1_), y1(y1_), x2(x2_), y2(y2_) {}
+
+ const self_type& normalize()
+ {
+ T t;
+ if(x1 > x2) { t = x1; x1 = x2; x2 = t; }
+ if(y1 > y2) { t = y1; y1 = y2; y2 = t; }
+ return *this;
+ }
+
+ bool clip(const self_type& r)
+ {
+ if(x2 > r.x2) x2 = r.x2;
+ if(y2 > r.y2) y2 = r.y2;
+ if(x1 < r.x1) x1 = r.x1;
+ if(y1 < r.y1) y1 = r.y1;
+ return x1 <= x2 && y1 <= y2;
+ }
+
+ bool is_valid() const
+ {
+ return x1 <= x2 && y1 <= y2;
+ }
+ };
+
+ //-----------------------------------------------------intersect_rectangles
+ template<class Rect>
+ inline Rect intersect_rectangles(const Rect& r1, const Rect& r2)
+ {
+ Rect r = r1;
+
+ // First process x2,y2 because the other order
+ // results in Internal Compiler Error under
+ // Microsoft Visual C++ .NET 2003 69462-335-0000007-18038 in
+ // case of "Maximize Speed" optimization option.
+ //-----------------
+ if(r.x2 > r2.x2) r.x2 = r2.x2;
+ if(r.y2 > r2.y2) r.y2 = r2.y2;
+ if(r.x1 < r2.x1) r.x1 = r2.x1;
+ if(r.y1 < r2.y1) r.y1 = r2.y1;
+ return r;
+ }
+
+
+ //---------------------------------------------------------unite_rectangles
+ template<class Rect>
+ inline Rect unite_rectangles(const Rect& r1, const Rect& r2)
+ {
+ Rect r = r1;
+ if(r.x2 < r2.x2) r.x2 = r2.x2;
+ if(r.y2 < r2.y2) r.y2 = r2.y2;
+ if(r.x1 > r2.x1) r.x1 = r2.x1;
+ if(r.y1 > r2.y1) r.y1 = r2.y1;
+ return r;
+ }
+
+ typedef rect_base<int> rect; //----rect
+ typedef rect_base<double> rect_d; //----rect_d
+
+ //---------------------------------------------------------path_commands_e
+ enum path_commands_e
+ {
+ path_cmd_stop = 0, //----path_cmd_stop
+ path_cmd_move_to = 1, //----path_cmd_move_to
+ path_cmd_line_to = 2, //----path_cmd_line_to
+ path_cmd_curve3 = 3, //----path_cmd_curve3
+ path_cmd_curve4 = 4, //----path_cmd_curve4
+ path_cmd_end_poly = 6, //----path_cmd_end_poly
+ path_cmd_mask = 0x0F //----path_cmd_mask
+ };
+
+ //------------------------------------------------------------path_flags_e
+ enum path_flags_e
+ {
+ path_flags_none = 0, //----path_flags_none
+ path_flags_ccw = 0x10, //----path_flags_ccw
+ path_flags_cw = 0x20, //----path_flags_cw
+ path_flags_close = 0x40, //----path_flags_close
+ path_flags_mask = 0xF0 //----path_flags_mask
+ };
+
+ //---------------------------------------------------------------is_vertex
+ inline bool is_vertex(unsigned c)
+ {
+ return c >= path_cmd_move_to && c < path_cmd_end_poly;
+ }
+
+ //-----------------------------------------------------------------is_stop
+ inline bool is_stop(unsigned c)
+ {
+ return c == path_cmd_stop;
+ }
+
+ //--------------------------------------------------------------is_move_to
+ inline bool is_move_to(unsigned c)
+ {
+ return c == path_cmd_move_to;
+ }
+
+ //--------------------------------------------------------------is_line_to
+ inline bool is_line_to(unsigned c)
+ {
+ return c == path_cmd_line_to;
+ }
+
+ //----------------------------------------------------------------is_curve
+ inline bool is_curve(unsigned c)
+ {
+ return c == path_cmd_curve3 || c == path_cmd_curve4;
+ }
+
+ //---------------------------------------------------------------is_curve3
+ inline bool is_curve3(unsigned c)
+ {
+ return c == path_cmd_curve3;
+ }
+
+ //---------------------------------------------------------------is_curve4
+ inline bool is_curve4(unsigned c)
+ {
+ return c == path_cmd_curve4;
+ }
+
+ //-------------------------------------------------------------is_end_poly
+ inline bool is_end_poly(unsigned c)
+ {
+ return (c & path_cmd_mask) == path_cmd_end_poly;
+ }
+
+ //----------------------------------------------------------------is_close
+ inline bool is_close(unsigned c)
+ {
+ return (c & ~(path_flags_cw | path_flags_ccw)) ==
+ (((bool)path_cmd_end_poly) | ((bool)path_flags_close));
+ }
+
+ //------------------------------------------------------------is_next_poly
+ inline bool is_next_poly(unsigned c)
+ {
+ return is_stop(c) || is_move_to(c) || is_end_poly(c);
+ }
+
+ //-------------------------------------------------------------------is_cw
+ inline bool is_cw(unsigned c)
+ {
+ return (c & path_flags_cw) != 0;
+ }
+
+ //------------------------------------------------------------------is_ccw
+ inline bool is_ccw(unsigned c)
+ {
+ return (c & path_flags_ccw) != 0;
+ }
+
+ //-------------------------------------------------------------is_oriented
+ inline bool is_oriented(unsigned c)
+ {
+ return (c & (path_flags_cw | path_flags_ccw)) != 0;
+ }
+
+ //---------------------------------------------------------------is_closed
+ inline bool is_closed(unsigned c)
+ {
+ return (c & path_flags_close) != 0;
+ }
+
+ //----------------------------------------------------------get_close_flag
+ inline unsigned get_close_flag(unsigned c)
+ {
+ return c & path_flags_close;
+ }
+
+ //-------------------------------------------------------clear_orientation
+ inline unsigned clear_orientation(unsigned c)
+ {
+ return c & ~(path_flags_cw | path_flags_ccw);
+ }
+
+ //---------------------------------------------------------get_orientation
+ inline unsigned get_orientation(unsigned c)
+ {
+ return c & (path_flags_cw | path_flags_ccw);
+ }
+
+ //---------------------------------------------------------set_orientation
+ inline unsigned set_orientation(unsigned c, unsigned o)
+ {
+ return clear_orientation(c) | o;
+ }
+
+ //--------------------------------------------------------------point_type
+ struct point_type
+ {
+ double x, y;
+
+ point_type() {}
+ point_type(double x_, double y_) : x(x_), y(y_) {}
+ };
+
+ //-------------------------------------------------------------vertex_type
+ struct vertex_type
+ {
+ double x, y;
+ unsigned cmd;
+
+ vertex_type() {}
+ vertex_type(double x_, double y_, unsigned cmd_) :
+ x(x_), y(y_), cmd(cmd_) {}
+ };
+
+
+}
+
+
+#endif
+
diff --git a/agg/inc/agg_bezier_arc.h b/agg/inc/agg_bezier_arc.h
new file mode 100755
index 000000000000..f437ab0a00bd
--- /dev/null
+++ b/agg/inc/agg_bezier_arc.h
@@ -0,0 +1,158 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// Arc generator. Produces at most 4 consecutive cubic bezier curves, i.e.,
+// 4, 7, 10, or 13 vertices.
+//
+//----------------------------------------------------------------------------
+
+#ifndef AGG_BEZIER_ARC_INCLUDED
+#define AGG_BEZIER_ARC_INCLUDED
+
+#include "agg_conv_transform.h"
+
+namespace agg
+{
+
+ //-----------------------------------------------------------------------
+ void arc_to_bezier(double cx, double cy, double rx, double ry,
+ double start_angle, double sweep_angle,
+ double* curve);
+
+
+ //==============================================================bezier_arc
+ //
+ // See implemantaion agg_bezier_arc.cpp
+ //
+ class bezier_arc
+ {
+ public:
+ //--------------------------------------------------------------------
+ bezier_arc() : m_vertex(26) {}
+ bezier_arc(double x, double y,
+ double rx, double ry,
+ double start_angle,
+ double sweep_angle)
+ {
+ init(x, y, rx, ry, start_angle, sweep_angle);
+ }
+
+ //--------------------------------------------------------------------
+ void init(double x, double y,
+ double rx, double ry,
+ double start_angle,
+ double sweep_angle);
+
+ //--------------------------------------------------------------------
+ void rewind(unsigned)
+ {
+ m_vertex = 0;
+ }
+
+ //--------------------------------------------------------------------
+ unsigned vertex(double* x, double* y)
+ {
+ if(m_vertex >= m_num_vertices) return path_cmd_stop;
+ *x = m_vertices[m_vertex];
+ *y = m_vertices[m_vertex + 1];
+ m_vertex += 2;
+ return (m_vertex == 2) ? path_cmd_move_to : path_cmd_curve4;
+ }
+
+ // Supplemantary functions. num_vertices() actually returns doubled
+ // number of vertices. That is, for 1 vertex it returns 2.
+ //--------------------------------------------------------------------
+ unsigned num_vertices() const { return m_num_vertices; }
+ const double* vertices() const { return m_vertices; }
+ double* vertices() { return m_vertices; }
+
+ private:
+ unsigned m_vertex;
+ unsigned m_num_vertices;
+ double m_vertices[26];
+ };
+
+
+
+ //==========================================================bezier_arc_svg
+ // Compute an SVG-style bezier arc.
+ //
+ // Computes an elliptical arc from (x1, y1) to (x2, y2). The size and
+ // orientation of the ellipse are defined by two radii (rx, ry)
+ // and an x-axis-rotation, which indicates how the ellipse as a whole
+ // is rotated relative to the current coordinate system. The center
+ // (cx, cy) of the ellipse is calculated automatically to satisfy the
+ // constraints imposed by the other parameters.
+ // large-arc-flag and sweep-flag contribute to the automatic calculations
+ // and help determine how the arc is drawn.
+ class bezier_arc_svg
+ {
+ public:
+ //--------------------------------------------------------------------
+ bezier_arc_svg() : m_arc(), m_radii_ok(false) {}
+
+ bezier_arc_svg(double x1, double y1,
+ double rx, double ry,
+ double angle,
+ bool large_arc_flag,
+ bool sweep_flag,
+ double x2, double y2) :
+ m_arc(), m_radii_ok(false)
+ {
+ init(x1, y1, rx, ry, angle, large_arc_flag, sweep_flag, x2, y2);
+ }
+
+ //--------------------------------------------------------------------
+ void init(double x1, double y1,
+ double rx, double ry,
+ double angle,
+ bool large_arc_flag,
+ bool sweep_flag,
+ double x2, double y2);
+
+ //--------------------------------------------------------------------
+ bool radii_ok() const { return m_radii_ok; }
+
+ //--------------------------------------------------------------------
+ void rewind(unsigned)
+ {
+ m_arc.rewind(0);
+ }
+
+ //--------------------------------------------------------------------
+ unsigned vertex(double* x, double* y)
+ {
+ return m_arc.vertex(x, y);
+ }
+
+ // Supplemantary functions. num_vertices() actually returns doubled
+ // number of vertices. That is, for 1 vertex it returns 2.
+ //--------------------------------------------------------------------
+ unsigned num_vertices() const { return m_arc.num_vertices(); }
+ const double* vertices() const { return m_arc.vertices(); }
+ double* vertices() { return m_arc.vertices(); }
+
+ private:
+ bezier_arc m_arc;
+ bool m_radii_ok;
+ };
+
+
+
+
+}
+
+
+#endif
diff --git a/agg/inc/agg_bitset_iterator.h b/agg/inc/agg_bitset_iterator.h
new file mode 100755
index 000000000000..543432b65d54
--- /dev/null
+++ b/agg/inc/agg_bitset_iterator.h
@@ -0,0 +1,54 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+
+#ifndef AGG_BITSET_ITERATOR_INCLUDED
+#define AGG_BITSET_ITERATOR_INCLUDED
+
+#include "agg_basics.h"
+
+namespace agg
+{
+
+ class bitset_iterator
+ {
+ public:
+ bitset_iterator(const int8u* bits, unsigned offset = 0) :
+ m_bits(bits + (offset >> 3)),
+ m_mask(0x80 >> (offset & 7))
+ {}
+
+ void operator ++ ()
+ {
+ m_mask >>= 1;
+ if(m_mask == 0)
+ {
+ ++m_bits;
+ m_mask = 0x80;
+ }
+ }
+
+ unsigned bit() const
+ {
+ return (*m_bits) & m_mask;
+ }
+
+ private:
+ const int8u* m_bits;
+ int8u m_mask;
+ };
+
+}
+
+#endif
diff --git a/agg/inc/agg_bounding_rect.h b/agg/inc/agg_bounding_rect.h
new file mode 100755
index 000000000000..9a3c301069d7
--- /dev/null
+++ b/agg/inc/agg_bounding_rect.h
@@ -0,0 +1,116 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// bounding_rect function template
+//
+//----------------------------------------------------------------------------
+#ifndef AGG_BOUNDING_RECT_INCLUDED
+#define AGG_BOUNDING_RECT_INCLUDED
+
+#include "agg_basics.h"
+
+namespace agg
+{
+
+ //-----------------------------------------------------------bounding_rect
+ template<class VertexSource, class GetId, class CoordT>
+ bool bounding_rect(VertexSource& vs, GetId& gi,
+ unsigned start, unsigned num,
+ CoordT* x1, CoordT* y1, CoordT* x2, CoordT* y2)
+ {
+ unsigned i;
+ double x;
+ double y;
+ bool first = true;
+
+ *x1 = CoordT(1);
+ *y1 = CoordT(1);
+ *x2 = CoordT(0);
+ *y2 = CoordT(0);
+
+ for(i = 0; i < num; i++)
+ {
+ vs.rewind(gi[start + i]);
+ unsigned cmd;
+ while(!is_stop(cmd = vs.vertex(&x, &y)))
+ {
+ if(is_vertex(cmd))
+ {
+ if(first)
+ {
+ *x1 = CoordT(x);
+ *y1 = CoordT(y);
+ *x2 = CoordT(x);
+ *y2 = CoordT(y);
+ first = false;
+ }
+ else
+ {
+ if(CoordT(x) < *x1) *x1 = CoordT(x);
+ if(CoordT(y) < *y1) *y1 = CoordT(y);
+ if(CoordT(x) > *x2) *x2 = CoordT(x);
+ if(CoordT(y) > *y2) *y2 = CoordT(y);
+ }
+ }
+ }
+ }
+ return *x1 <= *x2 && *y1 <= *y2;
+ }
+
+
+ //-----------------------------------------------------bounding_rect_single
+ template<class VertexSource, class CoordT>
+ bool bounding_rect_single(VertexSource& vs, unsigned path_id,
+ CoordT* x1, CoordT* y1, CoordT* x2, CoordT* y2)
+ {
+ double x;
+ double y;
+ bool first = true;
+
+ *x1 = CoordT(1);
+ *y1 = CoordT(1);
+ *x2 = CoordT(0);
+ *y2 = CoordT(0);
+
+ vs.rewind(path_id);
+ unsigned cmd;
+ while(!is_stop(cmd = vs.vertex(&x, &y)))
+ {
+ if(is_vertex(cmd))
+ {
+ if(first)
+ {
+ *x1 = CoordT(x);
+ *y1 = CoordT(y);
+ *x2 = CoordT(x);
+ *y2 = CoordT(y);
+ first = false;
+ }
+ else
+ {
+ if(CoordT(x) < *x1) *x1 = CoordT(x);
+ if(CoordT(y) < *y1) *y1 = CoordT(y);
+ if(CoordT(x) > *x2) *x2 = CoordT(x);
+ if(CoordT(y) > *y2) *y2 = CoordT(y);
+ }
+ }
+ }
+ return *x1 <= *x2 && *y1 <= *y2;
+ }
+
+
+}
+
+#endif
diff --git a/agg/inc/agg_bspline.h b/agg/inc/agg_bspline.h
new file mode 100755
index 000000000000..ca58fa839b44
--- /dev/null
+++ b/agg/inc/agg_bspline.h
@@ -0,0 +1,77 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// class bspline
+//
+//----------------------------------------------------------------------------
+
+#ifndef AGG_BSPLINE_INCLUDED
+#define AGG_BSPLINE_INCLUDED
+
+#include "agg_basics.h"
+
+namespace agg
+{
+ //----------------------------------------------------------------bspline
+ // A very simple class of Bi-cubic Spline interpolation.
+ // First call init(num, x[], y[]) where num - number of source points,
+ // x, y - arrays of X and Y values respectively. Here Y must be a function
+ // of X. It means that all the X-coordinates must be arranged in the ascending
+ // order.
+ // Then call get(x) that calculates a value Y for the respective X.
+ // The class supports extrapolation, i.e. you can call get(x) where x is
+ // outside the given with init() X-range. Extrapolation is a simple linear
+ // function.
+ //
+ // See Implementation agg_bspline.cpp
+ //------------------------------------------------------------------------
+ class bspline
+ {
+ public:
+ ~bspline();
+ bspline();
+ bspline(int num);
+ bspline(int num, const double* x, const double* y);
+
+ void init(int num);
+ void add_point(double x, double y);
+ void prepare();
+
+ void init(int num, const double* x, const double* y);
+
+ double get(double x) const;
+ double get_stateful(double x) const;
+
+ private:
+ bspline(const bspline&);
+ const bspline& operator = (const bspline&);
+
+ static void bsearch(int n, const double *x, double x0, int *i);
+ double extrapolation_left(double x) const;
+ double extrapolation_right(double x) const;
+ double interpolation(double x, int i) const;
+
+ int m_max;
+ int m_num;
+ double* m_x;
+ double* m_y;
+ double* m_am;
+ mutable int m_last_idx;
+ };
+
+
+}
+
+#endif
diff --git a/agg/inc/agg_clip_liang_barsky.h b/agg/inc/agg_clip_liang_barsky.h
new file mode 100755
index 000000000000..e229d52bc6e9
--- /dev/null
+++ b/agg/inc/agg_clip_liang_barsky.h
@@ -0,0 +1,209 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// Liang-Barsky clipping
+//
+//----------------------------------------------------------------------------
+#ifndef AGG_CLIP_LIANG_BARSKY_INCLUDED
+#define AGG_CLIP_LIANG_BARSKY_INCLUDED
+
+#include "agg_basics.h"
+
+namespace agg
+{
+
+ //----------------------------------------------------------clipping_flags
+ // Determine the clipping code of the vertex according to the
+ // Cyrus-Beck line clipping algorithm
+ //
+ // | |
+ // 0110 | 0010 | 0011
+ // | |
+ // -------+--------+-------- clip_box.y2
+ // | |
+ // 0100 | 0000 | 0001
+ // | |
+ // -------+--------+-------- clip_box.y1
+ // | |
+ // 1100 | 1000 | 1001
+ // | |
+ // clip_box.x1 clip_box.x2
+ //
+ //
+ template<class T>
+ inline unsigned clipping_flags(T x, T y, const rect_base<T>& clip_box)
+ {
+ return (x > clip_box.x2) |
+ ((y > clip_box.y2) << 1) |
+ ((x < clip_box.x1) << 2) |
+ ((y < clip_box.y1) << 3);
+ }
+
+
+
+ //-------------------------------------------------------clip_liang_barsky
+ template<class T>
+ /*inline*/ unsigned clip_liang_barsky(T x1, T y1, T x2, T y2,
+ const rect_base<T>& clip_box,
+ T* x, T* y)
+ {
+ const double nearzero = 1e-30;
+
+ double deltax = x2 - x1;
+ double deltay = y2 - y1;
+ double xin;
+ double xout;
+ double yin;
+ double yout;
+ double tinx;
+ double tiny;
+ double toutx;
+ double touty;
+ double tin1;
+ double tin2;
+ double tout1;
+ unsigned np = 0;
+
+ if(deltax == 0.0)
+ {
+ // bump off of the vertical
+ deltax = (x1 > clip_box.x1) ? -nearzero : nearzero;
+ }
+
+ if(deltay == 0.0)
+ {
+ // bump off of the horizontal
+ deltay = (y1 > clip_box.y1) ? -nearzero : nearzero;
+ }
+
+ if(deltax > 0.0)
+ {
+ // points to right
+ xin = clip_box.x1;
+ xout = clip_box.x2;
+ }
+ else
+ {
+ xin = clip_box.x2;
+ xout = clip_box.x1;
+ }
+
+ if(deltay > 0.0)
+ {
+ // points up
+ yin = clip_box.y1;
+ yout = clip_box.y2;
+ }
+ else
+ {
+ yin = clip_box.y2;
+ yout = clip_box.y1;
+ }
+
+ tinx = (xin - x1) / deltax;
+ tiny = (yin - y1) / deltay;
+
+ if (tinx < tiny)
+ {
+ // hits x first
+ tin1 = tinx;
+ tin2 = tiny;
+ }
+ else
+ {
+ // hits y first
+ tin1 = tiny;
+ tin2 = tinx;
+ }
+
+ if(tin1 <= 1.0)
+ {
+ if(0.0 < tin1)
+ {
+ *x++ = (T)xin;
+ *y++ = (T)yin;
+ ++np;
+ }
+
+ if(tin2 <= 1.0)
+ {
+ toutx = (xout - x1) / deltax;
+ touty = (yout - y1) / deltay;
+
+ tout1 = (toutx < touty) ? toutx : touty;
+
+ if(tin2 > 0.0 || tout1 > 0.0)
+ {
+ if(tin2 <= tout1)
+ {
+ if(tin2 > 0.0)
+ {
+ if(tinx > tiny)
+ {
+ *x++ = (T)xin;
+ *y++ = (T)(y1 + tinx * deltay);
+ }
+ else
+ {
+ *x++ = (T)(x1 + tiny * deltax);
+ *y++ = (T)yin;
+ }
+ ++np;
+ }
+
+ if(tout1 < 1.0)
+ {
+ if(toutx < touty)
+ {
+ *x++ = (T)xout;
+ *y++ = (T)(y1 + toutx * deltay);
+ }
+ else
+ {
+ *x++ = (T)(x1 + touty * deltax);
+ *y++ = (T)yout;
+ }
+ }
+ else
+ {
+ *x++ = x2;
+ *y++ = y2;
+ }
+ ++np;
+ }
+ else
+ {
+ if(tinx > tiny)
+ {
+ *x++ = (T)xin;
+ *y++ = (T)yout;
+ }
+ else
+ {
+ *x++ = (T)xout;
+ *y++ = (T)yin;
+ }
+ ++np;
+ }
+ }
+ }
+ }
+ return np;
+ }
+
+
+}
+
+#endif
diff --git a/agg/inc/agg_color_gray.h b/agg/inc/agg_color_gray.h
new file mode 100755
index 000000000000..1d0ffd8e773d
--- /dev/null
+++ b/agg/inc/agg_color_gray.h
@@ -0,0 +1,364 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// Adaptation for high precision colors has been sponsored by
+// Liberty Technology Systems, Inc., visit http://lib-sys.com
+//
+// Liberty Technology Systems, Inc. is the provider of
+// PostScript and PDF technology for software developers.
+//
+//----------------------------------------------------------------------------
+//
+// color types gray8, gray16
+//
+//----------------------------------------------------------------------------
+
+#ifndef AGG_COLOR_GRAY_INCLUDED
+#define AGG_COLOR_GRAY_INCLUDED
+
+#include "agg_basics.h"
+#include "agg_color_rgba.h"
+
+namespace agg
+{
+
+ //===================================================================gray8
+ struct gray8
+ {
+ typedef int8u value_type;
+ typedef int32u calc_type;
+ typedef int32 long_type;
+ enum
+ {
+ base_shift = 8,
+ base_size = 1 << base_shift,
+ base_mask = base_size - 1
+ };
+ typedef gray8 self_type;
+
+ value_type v;
+ value_type a;
+
+ //--------------------------------------------------------------------
+ gray8() {}
+
+ //--------------------------------------------------------------------
+ gray8(unsigned v_, unsigned a_=base_mask) :
+ v(int8u(v_)), a(int8u(a_)) {}
+
+ //--------------------------------------------------------------------
+ gray8(const self_type& c, unsigned a_) :
+ v(c.v), a(value_type(a_)) {}
+
+ //--------------------------------------------------------------------
+ gray8(const rgba& c) :
+ v(value_type((0.299*c.r + 0.587*c.g + 0.114*c.b) * double(base_mask) + 0.5)),
+ a(value_type(c.a * double(base_mask))) {}
+
+ //--------------------------------------------------------------------
+ gray8(const rgba& c, double a_) :
+ v(value_type((0.299*c.r + 0.587*c.g + 0.114*c.b) * double(base_mask) + 0.5)),
+ a(value_type(a_ * double(base_mask))) {}
+
+ //--------------------------------------------------------------------
+ gray8(const rgba8& c) :
+ v((c.r*77 + c.g*150 + c.b*29) >> 8),
+ a(c.a) {}
+
+ //--------------------------------------------------------------------
+ gray8(const rgba8& c, unsigned a_) :
+ v((c.r*77 + c.g*150 + c.b*29) >> 8),
+ a(a_) {}
+
+ //--------------------------------------------------------------------
+ void clear()
+ {
+ v = a = 0;
+ }
+
+ //--------------------------------------------------------------------
+ const self_type& transparent()
+ {
+ a = 0;
+ return *this;
+ }
+
+ //--------------------------------------------------------------------
+ void opacity(double a_)
+ {
+ if(a_ < 0.0) a_ = 0.0;
+ if(a_ > 1.0) a_ = 1.0;
+ a = value_type(a_ * double(base_mask));
+ }
+
+ //--------------------------------------------------------------------
+ double opacity() const
+ {
+ return double(a) / double(base_mask);
+ }
+
+
+ //--------------------------------------------------------------------
+ const self_type& premultiply()
+ {
+ if(a == base_mask) return *this;
+ if(a == 0)
+ {
+ v = 0;
+ return *this;
+ }
+ v = value_type((calc_type(v) * a) >> base_shift);
+ return *this;
+ }
+
+ //--------------------------------------------------------------------
+ const self_type& premultiply(unsigned a_)
+ {
+ if(a == base_mask && a_ >= base_mask) return *this;
+ if(a == 0 || a_ == 0)
+ {
+ v = a = 0;
+ return *this;
+ }
+ calc_type v_ = (calc_type(v) * a_) / a;
+ v = value_type((v_ > a_) ? a_ : v_);
+ a = value_type(a_);
+ return *this;
+ }
+
+ //--------------------------------------------------------------------
+ const self_type& demultiply()
+ {
+ if(a == base_mask) return *this;
+ if(a == 0)
+ {
+ v = 0;
+ return *this;
+ }
+ calc_type v_ = (calc_type(v) * base_mask) / a;
+ v = value_type((v_ > base_mask) ? base_mask : v_);
+ return *this;
+ }
+
+ //--------------------------------------------------------------------
+ self_type gradient(self_type c, double k) const
+ {
+ self_type ret;
+ calc_type ik = calc_type(k * base_size);
+ ret.v = value_type(calc_type(v) + (((calc_type(c.v) - v) * ik) >> base_shift));
+ ret.a = value_type(calc_type(a) + (((calc_type(c.a) - a) * ik) >> base_shift));
+ return ret;
+ }
+
+ //--------------------------------------------------------------------
+ static self_type no_color() { return self_type(0,0); }
+ };
+
+
+ //-------------------------------------------------------------gray8_pre
+ inline gray8 gray8_pre(unsigned v, unsigned a = gray8::base_mask)
+ {
+ return gray8(v,a).premultiply();
+ }
+ inline gray8 gray8_pre(const gray8& c, unsigned a)
+ {
+ return gray8(c,a).premultiply();
+ }
+ inline gray8 gray8_pre(const rgba& c)
+ {
+ return gray8(c).premultiply();
+ }
+ inline gray8 gray8_pre(const rgba& c, double a)
+ {
+ return gray8(c,a).premultiply();
+ }
+ inline gray8 gray8_pre(const rgba8& c)
+ {
+ return gray8(c).premultiply();
+ }
+ inline gray8 gray8_pre(const rgba8& c, unsigned a)
+ {
+ return gray8(c,a).premultiply();
+ }
+
+
+
+
+ //==================================================================gray16
+ struct gray16
+ {
+ typedef int16u value_type;
+ typedef int32u calc_type;
+ typedef int64 long_type;
+ enum
+ {
+ base_shift = 16,
+ base_size = 1 << base_shift,
+ base_mask = base_size - 1
+ };
+ typedef gray16 self_type;
+
+ value_type v;
+ value_type a;
+
+ //--------------------------------------------------------------------
+ gray16() {}
+
+ //--------------------------------------------------------------------
+ gray16(unsigned v_, unsigned a_=base_mask) :
+ v(int16u(v_)), a(int16u(a_)) {}
+
+ //--------------------------------------------------------------------
+ gray16(const self_type& c, unsigned a_) :
+ v(c.v), a(value_type(a_)) {}
+
+ //--------------------------------------------------------------------
+ gray16(const rgba& c) :
+ v(value_type((0.299*c.r + 0.587*c.g + 0.114*c.b) * double(base_mask) + 0.5)),
+ a(value_type(c.a * double(base_mask))) {}
+
+ //--------------------------------------------------------------------
+ gray16(const rgba& c, double a_) :
+ v(value_type((0.299*c.r + 0.587*c.g + 0.114*c.b) * double(base_mask) + 0.5)),
+ a(value_type(a_ * double(base_mask))) {}
+
+ //--------------------------------------------------------------------
+ gray16(const rgba8& c) :
+ v(c.r*77 + c.g*150 + c.b*29),
+ a((value_type(c.a) << 8) | c.a) {}
+
+ //--------------------------------------------------------------------
+ gray16(const rgba8& c, unsigned a_) :
+ v(c.r*77 + c.g*150 + c.b*29),
+ a((value_type(a_) << 8) | c.a) {}
+
+ //--------------------------------------------------------------------
+ void clear()
+ {
+ v = a = 0;
+ }
+
+ //--------------------------------------------------------------------
+ const self_type& transparent()
+ {
+ a = 0;
+ return *this;
+ }
+
+ //--------------------------------------------------------------------
+ void opacity(double a_)
+ {
+ if(a_ < 0.0) a_ = 0.0;
+ if(a_ > 1.0) a_ = 1.0;
+ a = value_type(a_ * double(base_mask));
+ }
+
+ //--------------------------------------------------------------------
+ double opacity() const
+ {
+ return double(a) / double(base_mask);
+ }
+
+
+ //--------------------------------------------------------------------
+ const self_type& premultiply()
+ {
+ if(a == base_mask) return *this;
+ if(a == 0)
+ {
+ v = 0;
+ return *this;
+ }
+ v = value_type((calc_type(v) * a) >> base_shift);
+ return *this;
+ }
+
+ //--------------------------------------------------------------------
+ const self_type& premultiply(unsigned a_)
+ {
+ if(a == base_mask && a_ >= base_mask) return *this;
+ if(a == 0 || a_ == 0)
+ {
+ v = a = 0;
+ return *this;
+ }
+ calc_type v_ = (calc_type(v) * a_) / a;
+ v = value_type((v_ > a_) ? a_ : v_);
+ a = value_type(a_);
+ return *this;
+ }
+
+ //--------------------------------------------------------------------
+ const self_type& demultiply()
+ {
+ if(a == base_mask) return *this;
+ if(a == 0)
+ {
+ v = 0;
+ return *this;
+ }
+ calc_type v_ = (calc_type(v) * base_mask) / a;
+ v = value_type((v_ > base_mask) ? base_mask : v_);
+ return *this;
+ }
+
+ //--------------------------------------------------------------------
+ self_type gradient(self_type c, double k) const
+ {
+ self_type ret;
+ calc_type ik = calc_type(k * base_size);
+ ret.v = value_type(calc_type(v) + (((calc_type(c.v) - v) * ik) >> base_shift));
+ ret.a = value_type(calc_type(a) + (((calc_type(c.a) - a) * ik) >> base_shift));
+ return ret;
+ }
+
+ //--------------------------------------------------------------------
+ static self_type no_color() { return self_type(0,0); }
+ };
+
+
+ //------------------------------------------------------------gray16_pre
+ inline gray16 gray16_pre(unsigned v, unsigned a = gray16::base_mask)
+ {
+ return gray16(v,a).premultiply();
+ }
+ inline gray16 gray16_pre(const gray16& c, unsigned a)
+ {
+ return gray16(c,a).premultiply();
+ }
+ inline gray16 gray16_pre(const rgba& c)
+ {
+ return gray16(c).premultiply();
+ }
+ inline gray16 gray16_pre(const rgba& c, double a)
+ {
+ return gray16(c,a).premultiply();
+ }
+ inline gray16 gray16_pre(const rgba8& c)
+ {
+ return gray16(c).premultiply();
+ }
+ inline gray16 gray16_pre(const rgba8& c, unsigned a)
+ {
+ return gray16(c,a).premultiply();
+ }
+
+
+}
+
+
+
+
+#endif
diff --git a/agg/inc/agg_color_rgba.h b/agg/inc/agg_color_rgba.h
new file mode 100755
index 000000000000..e1f77206cc66
--- /dev/null
+++ b/agg/inc/agg_color_rgba.h
@@ -0,0 +1,618 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+//
+// Adaptation for high precision colors has been sponsored by
+// Liberty Technology Systems, Inc., visit http://lib-sys.com
+//
+// Liberty Technology Systems, Inc. is the provider of
+// PostScript and PDF technology for software developers.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+
+#ifndef AGG_COLOR_RGBA_INCLUDED
+#define AGG_COLOR_RGBA_INCLUDED
+
+#include <math.h>
+#include "agg_basics.h"
+
+namespace agg
+{
+ // Supported byte orders for RGB and RGBA pixel formats
+ //=======================================================================
+ struct order_rgb { enum { R=0, G=1, B=2, rgb_tag }; }; //----order_rgb
+ struct order_bgr { enum { B=0, G=1, R=2, rgb_tag }; }; //----order_bgr
+ struct order_rgba { enum { R=0, G=1, B=2, A=3, rgba_tag }; }; //----order_rgba
+ struct order_argb { enum { A=0, R=1, G=2, B=3, rgba_tag }; }; //----order_argb
+ struct order_abgr { enum { A=0, B=1, G=2, R=3, rgba_tag }; }; //----order_abgr
+ struct order_bgra { enum { B=0, G=1, R=2, A=3, rgba_tag }; }; //----order_bgra
+
+ //====================================================================rgba
+ struct rgba
+ {
+ typedef double value_type;
+
+ double r;
+ double g;
+ double b;
+ double a;
+
+ //--------------------------------------------------------------------
+ rgba() {}
+
+ //--------------------------------------------------------------------
+ rgba(double r_, double g_, double b_, double a_=1.0) :
+ r(r_), g(g_), b(b_), a(a_) {}
+
+ //--------------------------------------------------------------------
+ rgba(const rgba& c, double a_) : r(c.r), g(c.g), b(c.b), a(a_) {}
+
+ //--------------------------------------------------------------------
+ void clear()
+ {
+ r = g = b = a = 0;
+ }
+
+ //--------------------------------------------------------------------
+ const rgba& transparent()
+ {
+ a = 0.0;
+ return *this;
+ }
+
+ //--------------------------------------------------------------------
+ const rgba& opacity(double a_)
+ {
+ if(a_ < 0.0) a_ = 0.0;
+ if(a_ > 1.0) a_ = 1.0;
+ a = a_;
+ return *this;
+ }
+
+ //--------------------------------------------------------------------
+ double opacity() const
+ {
+ return a;
+ }
+
+ //--------------------------------------------------------------------
+ const rgba& premultiply()
+ {
+ r *= a;
+ g *= a;
+ b *= a;
+ return *this;
+ }
+
+ //--------------------------------------------------------------------
+ const rgba& premultiply(double a_)
+ {
+ if(a <= 0.0 || a_ <= 0.0)
+ {
+ r = g = b = a = 0.0;
+ return *this;
+ }
+ a_ /= a;
+ r *= a_;
+ g *= a_;
+ b *= a_;
+ a = a_;
+ return *this;
+ }
+
+ //--------------------------------------------------------------------
+ const rgba& demultiply()
+ {
+ if(a == 0)
+ {
+ r = g = b = 0;
+ return *this;
+ }
+ double a_ = 1.0 / a;
+ r *= a_;
+ g *= a_;
+ b *= a_;
+ return *this;
+ }
+
+
+ //--------------------------------------------------------------------
+ rgba gradient(rgba c, double k) const
+ {
+ rgba ret;
+ ret.r = r + (c.r - r) * k;
+ ret.g = g + (c.g - g) * k;
+ ret.b = b + (c.b - b) * k;
+ ret.a = a + (c.a - a) * k;
+ return ret;
+ }
+
+ //--------------------------------------------------------------------
+ static rgba no_color() { return rgba(0,0,0,0); }
+
+ //--------------------------------------------------------------------
+ static rgba from_wavelength(double wl, double gamma = 1.0);
+
+ //--------------------------------------------------------------------
+ rgba(double wavelen, double gamma=1.0)
+ {
+ *this = from_wavelength(wavelen, gamma);
+ }
+
+ };
+
+ //----------------------------------------------------------------rgba_pre
+ inline rgba rgba_pre(double r, double g, double b, double a=1.0)
+ {
+ return rgba(r, g, b, a).premultiply();
+ }
+ inline rgba rgba_pre(const rgba& c)
+ {
+ return rgba(c).premultiply();
+ }
+ inline rgba rgba_pre(const rgba& c, double a)
+ {
+ return rgba(c, a).premultiply();
+ }
+
+ //------------------------------------------------------------------------
+ inline rgba rgba::from_wavelength(double wl, double gamma)
+ {
+ rgba t(0.0, 0.0, 0.0);
+
+ if(wl >= 380.0 && wl <= 440.0)
+ {
+ t.r = -1.0 * (wl - 440.0) / (440.0 - 380.0);
+ t.b = 1.0;
+ }
+ else
+ if(wl >= 440.0 && wl <= 490.0)
+ {
+ t.g = (wl - 440.0) / (490.0 - 440.0);
+ t.b = 1.0;
+ }
+ else
+ if(wl >= 490.0 && wl <= 510.0)
+ {
+ t.g = 1.0;
+ t.b = -1.0 * (wl - 510.0) / (510.0 - 490.0);
+ }
+ else
+ if(wl >= 510.0 && wl <= 580.0)
+ {
+ t.r = (wl - 510.0) / (580.0 - 510.0);
+ t.g = 1.0;
+ }
+ else
+ if(wl >= 580.0 && wl <= 645.0)
+ {
+ t.r = 1.0;
+ t.g = -1.0 * (wl - 645.0) / (645.0 - 580.0);
+ }
+ else
+ if(wl >= 645.0 && wl <= 780.0)
+ {
+ t.r = 1.0;
+ }
+
+ double s = 1.0;
+ if(wl > 700.0) s = 0.3 + 0.7 * (780.0 - wl) / (780.0 - 700.0);
+ else if(wl < 420.0) s = 0.3 + 0.7 * (wl - 380.0) / (420.0 - 380.0);
+
+ t.r = pow(t.r * s, gamma);
+ t.g = pow(t.g * s, gamma);
+ t.b = pow(t.b * s, gamma);
+ return t;
+ }
+
+
+
+
+ //===================================================================rgba8
+ struct rgba8
+ {
+ typedef int8u value_type;
+ typedef int32u calc_type;
+ typedef int32 long_type;
+ enum
+ {
+ base_shift = 8,
+ base_size = 1 << base_shift,
+ base_mask = base_size - 1
+ };
+ typedef rgba8 self_type;
+
+
+ value_type r;
+ value_type g;
+ value_type b;
+ value_type a;
+
+ //--------------------------------------------------------------------
+ rgba8() {}
+
+ //--------------------------------------------------------------------
+ rgba8(unsigned r_, unsigned g_, unsigned b_, unsigned a_=base_mask) :
+ r(value_type(r_)),
+ g(value_type(g_)),
+ b(value_type(b_)),
+ a(value_type(a_)) {}
+
+ //--------------------------------------------------------------------
+ rgba8(const rgba& c, double a_) :
+ r(value_type(c.r * double(base_mask) + 0.5)),
+ g(value_type(c.g * double(base_mask) + 0.5)),
+ b(value_type(c.b * double(base_mask) + 0.5)),
+ a(value_type(a_ * double(base_mask) + 0.5)) {}
+
+ //--------------------------------------------------------------------
+ rgba8(const self_type& c, unsigned a_) :
+ r(c.r), g(c.g), b(c.b), a(value_type(a_)) {}
+
+ //--------------------------------------------------------------------
+ rgba8(const rgba& c) :
+ r(value_type(c.r * double(base_mask) + 0.5)),
+ g(value_type(c.g * double(base_mask) + 0.5)),
+ b(value_type(c.b * double(base_mask) + 0.5)),
+ a(value_type(c.a * double(base_mask) + 0.5)) {}
+
+ //--------------------------------------------------------------------
+ void clear()
+ {
+ r = g = b = a = 0;
+ }
+
+ //--------------------------------------------------------------------
+ const self_type& transparent()
+ {
+ a = 0;
+ return *this;
+ }
+
+ //--------------------------------------------------------------------
+ const self_type& opacity(double a_)
+ {
+ if(a_ < 0.0) a_ = 0.0;
+ if(a_ > 1.0) a_ = 1.0;
+ a = value_type(a_ * double(base_mask) + 0.5);
+ return *this;
+ }
+
+ //--------------------------------------------------------------------
+ double opacity() const
+ {
+ return double(a) / double(base_mask);
+ }
+
+ //--------------------------------------------------------------------
+ const self_type& premultiply()
+ {
+ if(a == base_mask) return *this;
+ if(a == 0)
+ {
+ r = g = b = 0;
+ return *this;
+ }
+ r = value_type((calc_type(r) * a) >> base_shift);
+ g = value_type((calc_type(g) * a) >> base_shift);
+ b = value_type((calc_type(b) * a) >> base_shift);
+ return *this;
+ }
+
+ //--------------------------------------------------------------------
+ const self_type& premultiply(unsigned a_)
+ {
+ if(a == base_mask && a_ >= base_mask) return *this;
+ if(a == 0 || a_ == 0)
+ {
+ r = g = b = a = 0;
+ return *this;
+ }
+ calc_type r_ = (calc_type(r) * a_) / a;
+ calc_type g_ = (calc_type(g) * a_) / a;
+ calc_type b_ = (calc_type(b) * a_) / a;
+ r = value_type((r_ > a_) ? a_ : r_);
+ g = value_type((g_ > a_) ? a_ : g_);
+ b = value_type((b_ > a_) ? a_ : b_);
+ a = value_type(a_);
+ return *this;
+ }
+
+ //--------------------------------------------------------------------
+ const self_type& demultiply()
+ {
+ if(a == base_mask) return *this;
+ if(a == 0)
+ {
+ r = g = b = 0;
+ return *this;
+ }
+ calc_type r_ = (calc_type(r) * base_mask) / a;
+ calc_type g_ = (calc_type(g) * base_mask) / a;
+ calc_type b_ = (calc_type(b) * base_mask) / a;
+ r = value_type((r_ > base_mask) ? base_mask : r_);
+ g = value_type((g_ > base_mask) ? base_mask : g_);
+ b = value_type((b_ > base_mask) ? base_mask : b_);
+ return *this;
+ }
+
+ //--------------------------------------------------------------------
+ self_type gradient(const self_type& c, double k) const
+ {
+ self_type ret;
+ calc_type ik = calc_type(k * base_size);
+ ret.r = value_type(calc_type(r) + (((calc_type(c.r) - r) * ik) >> base_shift));
+ ret.g = value_type(calc_type(g) + (((calc_type(c.g) - g) * ik) >> base_shift));
+ ret.b = value_type(calc_type(b) + (((calc_type(c.b) - b) * ik) >> base_shift));
+ ret.a = value_type(calc_type(a) + (((calc_type(c.a) - a) * ik) >> base_shift));
+ return ret;
+ }
+
+ //--------------------------------------------------------------------
+ static self_type no_color() { return self_type(0,0,0,0); }
+
+ //--------------------------------------------------------------------
+ static self_type from_wavelength(double wl, double gamma = 1.0)
+ {
+ return self_type(rgba::from_wavelength(wl, gamma));
+ }
+ };
+
+
+ //-------------------------------------------------------------rgba8_pre
+ inline rgba8 rgba8_pre(unsigned r, unsigned g, unsigned b,
+ unsigned a = rgba8::base_mask)
+ {
+ return rgba8(r,g,b,a).premultiply();
+ }
+ inline rgba8 rgba8_pre(const rgba8& c)
+ {
+ return rgba8(c).premultiply();
+ }
+ inline rgba8 rgba8_pre(const rgba8& c, unsigned a)
+ {
+ return rgba8(c,a).premultiply();
+ }
+ inline rgba8 rgba8_pre(const rgba& c)
+ {
+ return rgba8(c).premultiply();
+ }
+ inline rgba8 rgba8_pre(const rgba& c, double a)
+ {
+ return rgba8(c,a).premultiply();
+ }
+
+
+ //-----------------------------------------------------------rgb8_packed
+ inline rgba8 rgb8_packed(unsigned v)
+ {
+ return rgba8((v >> 16) & 0xFF, (v >> 8) & 0xFF, v & 0xFF);
+ }
+
+ //-----------------------------------------------------------bgr8_packed
+ inline rgba8 bgr8_packed(unsigned v)
+ {
+ return rgba8(v & 0xFF, (v >> 8) & 0xFF, (v >> 16) & 0xFF);
+ }
+
+ //----------------------------------------------------------argb8_packed
+ inline rgba8 argb8_packed(unsigned v)
+ {
+ return rgba8((v >> 16) & 0xFF, (v >> 8) & 0xFF, v & 0xFF, v >> 24);
+ }
+
+
+
+
+
+
+
+
+ //=================================================================rgba16
+ struct rgba16
+ {
+ typedef int16u value_type;
+ typedef int32u calc_type;
+ typedef int64 long_type;
+ enum
+ {
+ base_shift = 16,
+ base_size = 1 << base_shift,
+ base_mask = base_size - 1
+ };
+ typedef rgba16 self_type;
+
+ value_type r;
+ value_type g;
+ value_type b;
+ value_type a;
+
+ //--------------------------------------------------------------------
+ rgba16() {}
+
+ //--------------------------------------------------------------------
+ rgba16(unsigned r_, unsigned g_, unsigned b_, unsigned a_=base_mask) :
+ r(value_type(r_)),
+ g(value_type(g_)),
+ b(value_type(b_)),
+ a(value_type(a_)) {}
+
+ //--------------------------------------------------------------------
+ rgba16(const self_type& c, unsigned a_) :
+ r(c.r), g(c.g), b(c.b), a(value_type(a_)) {}
+
+ //--------------------------------------------------------------------
+ rgba16(const rgba& c) :
+ r(value_type(c.r * double(base_mask) + 0.5)),
+ g(value_type(c.g * double(base_mask) + 0.5)),
+ b(value_type(c.b * double(base_mask) + 0.5)),
+ a(value_type(c.a * double(base_mask) + 0.5)) {}
+
+ //--------------------------------------------------------------------
+ rgba16(const rgba& c, double a_) :
+ r(value_type(c.r * double(base_mask) + 0.5)),
+ g(value_type(c.g * double(base_mask) + 0.5)),
+ b(value_type(c.b * double(base_mask) + 0.5)),
+ a(value_type(a_ * double(base_mask) + 0.5)) {}
+
+ //--------------------------------------------------------------------
+ rgba16(const rgba8& c) :
+ r(value_type((value_type(c.r) << 8) | c.r)),
+ g(value_type((value_type(c.g) << 8) | c.g)),
+ b(value_type((value_type(c.b) << 8) | c.b)),
+ a(value_type((value_type(c.a) << 8) | c.a)) {}
+
+ //--------------------------------------------------------------------
+ rgba16(const rgba8& c, unsigned a_) :
+ r(value_type((value_type(c.r) << 8) | c.r)),
+ g(value_type((value_type(c.g) << 8) | c.g)),
+ b(value_type((value_type(c.b) << 8) | c.b)),
+ a(value_type(( a_ << 8) | c.a)) {}
+
+ //--------------------------------------------------------------------
+ void clear()
+ {
+ r = g = b = a = 0;
+ }
+
+ //--------------------------------------------------------------------
+ const self_type& transparent()
+ {
+ a = 0;
+ return *this;
+ }
+
+ //--------------------------------------------------------------------
+ const self_type& opacity(double a_)
+ {
+ if(a_ < 0.0) a_ = 0.0;
+ if(a_ > 1.0) a_ = 1.0;
+ a = value_type(a_ * double(base_mask) + 0.5);
+ return *this;
+ }
+
+ //--------------------------------------------------------------------
+ double opacity() const
+ {
+ return double(a) / double(base_mask);
+ }
+
+ //--------------------------------------------------------------------
+ const self_type& premultiply()
+ {
+ if(a == base_mask) return *this;
+ if(a == 0)
+ {
+ r = g = b = 0;
+ return *this;
+ }
+ r = value_type((calc_type(r) * a) >> base_shift);
+ g = value_type((calc_type(g) * a) >> base_shift);
+ b = value_type((calc_type(b) * a) >> base_shift);
+ return *this;
+ }
+
+ //--------------------------------------------------------------------
+ const self_type& premultiply(unsigned a_)
+ {
+ if(a == base_mask && a_ >= base_mask) return *this;
+ if(a == 0 || a_ == 0)
+ {
+ r = g = b = a = 0;
+ return *this;
+ }
+ calc_type r_ = (calc_type(r) * a_) / a;
+ calc_type g_ = (calc_type(g) * a_) / a;
+ calc_type b_ = (calc_type(b) * a_) / a;
+ r = value_type((r_ > a_) ? a_ : r_);
+ g = value_type((g_ > a_) ? a_ : g_);
+ b = value_type((b_ > a_) ? a_ : b_);
+ a = value_type(a_);
+ return *this;
+ }
+
+ //--------------------------------------------------------------------
+ const self_type& demultiply()
+ {
+ if(a == base_mask) return *this;
+ if(a == 0)
+ {
+ r = g = b = 0;
+ return *this;
+ }
+ calc_type r_ = (calc_type(r) * base_mask) / a;
+ calc_type g_ = (calc_type(g) * base_mask) / a;
+ calc_type b_ = (calc_type(b) * base_mask) / a;
+ r = value_type((r_ > base_mask) ? base_mask : r_);
+ g = value_type((g_ > base_mask) ? base_mask : g_);
+ b = value_type((b_ > base_mask) ? base_mask : b_);
+ return *this;
+ }
+
+ //--------------------------------------------------------------------
+ self_type gradient(const self_type& c, double k) const
+ {
+ self_type ret;
+ calc_type ik = calc_type(k * base_size);
+ ret.r = value_type(calc_type(r) + (((calc_type(c.r) - r) * ik) >> base_shift));
+ ret.g = value_type(calc_type(g) + (((calc_type(c.g) - g) * ik) >> base_shift));
+ ret.b = value_type(calc_type(b) + (((calc_type(c.b) - b) * ik) >> base_shift));
+ ret.a = value_type(calc_type(a) + (((calc_type(c.a) - a) * ik) >> base_shift));
+ return ret;
+ }
+
+ //--------------------------------------------------------------------
+ static self_type no_color() { return self_type(0,0,0,0); }
+
+ //--------------------------------------------------------------------
+ static self_type from_wavelength(double wl, double gamma = 1.0)
+ {
+ return self_type(rgba::from_wavelength(wl, gamma));
+ }
+ };
+
+
+
+ //--------------------------------------------------------------rgba16_pre
+ inline rgba16 rgba16_pre(unsigned r, unsigned g, unsigned b,
+ unsigned a = rgba16::base_mask)
+ {
+ return rgba16(r,g,b,a).premultiply();
+ }
+ inline rgba16 rgba16_pre(const rgba16& c, unsigned a)
+ {
+ return rgba16(c,a).premultiply();
+ }
+ inline rgba16 rgba16_pre(const rgba& c)
+ {
+ return rgba16(c).premultiply();
+ }
+ inline rgba16 rgba16_pre(const rgba& c, double a)
+ {
+ return rgba16(c,a).premultiply();
+ }
+ inline rgba16 rgba16_pre(const rgba8& c)
+ {
+ return rgba16(c).premultiply();
+ }
+ inline rgba16 rgba16_pre(const rgba8& c, unsigned a)
+ {
+ return rgba16(c,a).premultiply();
+ }
+
+}
+
+
+
+#endif
diff --git a/agg/inc/agg_config.h b/agg/inc/agg_config.h
new file mode 100755
index 000000000000..b412a6dff178
--- /dev/null
+++ b/agg/inc/agg_config.h
@@ -0,0 +1,31 @@
+#ifndef AGG_CONFIG_INCLUDED
+#define AGG_CONFIG_INCLUDED
+
+// This file can be used to redefine the default basic types such as:
+//
+// AGG_INT8
+// AGG_INT8U
+// AGG_INT16
+// AGG_INT16U
+// AGG_INT32
+// AGG_INT32U
+// AGG_INT64
+// AGG_INT64U
+//
+// Just replace this file with new defines if necessary.
+// For example, if your compiler doesn't have a 64 bit integer type
+// you can still use AGG if you define the follows:
+//
+// #define AGG_INT64 int
+// #define AGG_INT64U unsigned
+//
+// It will result in overflow in 16 bit-per-component image/pattern resampling
+// but it won't result any crash and the rest of the library will remain
+// fully functional.
+
+// #i65318# Passing agg version on to clients
+#ifndef AGG_VERSION
+# define AGG_VERSION 2300
+#endif
+
+#endif
diff --git a/agg/inc/agg_conv_adaptor_vcgen.h b/agg/inc/agg_conv_adaptor_vcgen.h
new file mode 100755
index 000000000000..f8233a388357
--- /dev/null
+++ b/agg/inc/agg_conv_adaptor_vcgen.h
@@ -0,0 +1,169 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+
+#ifndef AGG_CONV_ADAPTOR_VCGEN_INCLUDED
+#define AGG_CONV_ADAPTOR_VCGEN_INCLUDED
+
+#include "agg_basics.h"
+#include "agg_vertex_iterator.h"
+
+namespace agg
+{
+ //------------------------------------------------------------null_markers
+ struct null_markers
+ {
+ void remove_all() {}
+ void add_vertex(double, double, unsigned) {}
+ void prepare_src() {}
+
+ void rewind(unsigned) {}
+ unsigned vertex(double*, double*) { return path_cmd_stop; }
+
+ typedef null_markers source_type;
+ typedef vertex_iterator<source_type> iterator;
+ iterator begin(unsigned id) { return iterator(*this, id); }
+ iterator end() { return iterator(path_cmd_stop); }
+ };
+
+
+ //------------------------------------------------------conv_adaptor_vcgen
+ template<class VertexSource,
+ class Generator,
+ class Markers=null_markers> class conv_adaptor_vcgen
+ {
+ enum status
+ {
+ initial,
+ accumulate,
+ generate
+ };
+
+ public:
+ conv_adaptor_vcgen(VertexSource& source) :
+ m_source(&source),
+ m_status(initial)
+ {}
+
+ void set_source(VertexSource& source) { m_source = &source; }
+
+ Generator& generator() { return m_generator; }
+ const Generator& generator() const { return m_generator; }
+
+ Markers& markers() { return m_markers; }
+ const Markers& markers() const { return m_markers; }
+
+ void rewind(unsigned id)
+ {
+ m_source->rewind(id);
+ m_status = initial;
+ }
+
+ unsigned vertex(double* x, double* y);
+
+ typedef conv_adaptor_vcgen<VertexSource, Generator, Markers> source_type;
+ typedef vertex_iterator<source_type> iterator;
+ iterator begin(unsigned id) { return iterator(*this, id); }
+ iterator end() { return iterator(path_cmd_stop); }
+
+ private:
+ // Prohibit copying
+ conv_adaptor_vcgen(const conv_adaptor_vcgen<VertexSource, Generator, Markers>&);
+ const conv_adaptor_vcgen<VertexSource, Generator, Markers>&
+ operator = (const conv_adaptor_vcgen<VertexSource, Generator, Markers>&);
+
+ VertexSource* m_source;
+ Generator m_generator;
+ Markers m_markers;
+ status m_status;
+ unsigned m_last_cmd;
+ double m_start_x;
+ double m_start_y;
+ };
+
+
+
+
+
+ //------------------------------------------------------------------------
+ template<class VertexSource, class Generator, class Markers>
+ unsigned conv_adaptor_vcgen<VertexSource, Generator, Markers>::vertex(double* x, double* y)
+ {
+ unsigned cmd = path_cmd_stop;
+ bool done = false;
+ while(!done)
+ {
+ switch(m_status)
+ {
+ case initial:
+ m_markers.remove_all();
+ m_last_cmd = m_source->vertex(&m_start_x, &m_start_y);
+ m_status = accumulate;
+
+ case accumulate:
+ if(is_stop(m_last_cmd)) return path_cmd_stop;
+
+ m_generator.remove_all();
+ m_generator.add_vertex(m_start_x, m_start_y, path_cmd_move_to);
+ m_markers.add_vertex(m_start_x, m_start_y, path_cmd_move_to);
+
+ for(;;)
+ {
+ cmd = m_source->vertex(x, y);
+ if(is_vertex(cmd))
+ {
+ m_last_cmd = cmd;
+ if(is_move_to(cmd))
+ {
+ m_start_x = *x;
+ m_start_y = *y;
+ break;
+ }
+ m_generator.add_vertex(*x, *y, cmd);
+ m_markers.add_vertex(*x, *y, path_cmd_line_to);
+ }
+ else
+ {
+ if(is_stop(cmd))
+ {
+ m_last_cmd = path_cmd_stop;
+ break;
+ }
+ if(is_end_poly(cmd))
+ {
+ m_generator.add_vertex(*x, *y, cmd);
+ break;
+ }
+ }
+ }
+ m_generator.rewind(0);
+ m_status = generate;
+
+ case generate:
+ cmd = m_generator.vertex(x, y);
+ if(is_stop(cmd))
+ {
+ m_status = accumulate;
+ break;
+ }
+ done = true;
+ break;
+ }
+ }
+ return cmd;
+ }
+
+}
+
+#endif
diff --git a/agg/inc/agg_conv_adaptor_vpgen.h b/agg/inc/agg_conv_adaptor_vpgen.h
new file mode 100755
index 000000000000..f6afdb4d7f12
--- /dev/null
+++ b/agg/inc/agg_conv_adaptor_vpgen.h
@@ -0,0 +1,166 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+
+#ifndef AGG_CONV_ADAPTOR_VPGEN_INCLUDED
+#define AGG_CONV_ADAPTOR_VPGEN_INCLUDED
+
+#include "agg_basics.h"
+#include "agg_vertex_iterator.h"
+
+namespace agg
+{
+
+ //======================================================conv_adaptor_vpgen
+ template<class VertexSource, class VPGen> class conv_adaptor_vpgen
+ {
+ public:
+ conv_adaptor_vpgen(VertexSource& source) : m_source(&source) {}
+
+ void set_source(VertexSource& source) { m_source = &source; }
+
+ VPGen& vpgen() { return m_vpgen; }
+ const VPGen& vpgen() const { return m_vpgen; }
+
+ void rewind(unsigned path_id);
+ unsigned vertex(double* x, double* y);
+
+ typedef conv_adaptor_vpgen<VertexSource, VPGen> source_type;
+ typedef vertex_iterator<source_type> iterator;
+ iterator begin(unsigned id) { return iterator(*this, id); }
+ iterator end() { return iterator(path_cmd_stop); }
+
+ private:
+ conv_adaptor_vpgen(const conv_adaptor_vpgen<VertexSource, VPGen>&);
+ const conv_adaptor_vpgen<VertexSource, VPGen>&
+ operator = (const conv_adaptor_vpgen<VertexSource, VPGen>&);
+
+ VertexSource* m_source;
+ VPGen m_vpgen;
+ double m_start_x;
+ double m_start_y;
+ unsigned m_poly_flags;
+ int m_vertices;
+ };
+
+
+
+ //------------------------------------------------------------------------
+ template<class VertexSource, class VPGen>
+ void conv_adaptor_vpgen<VertexSource, VPGen>::rewind(unsigned path_id)
+ {
+ m_source->rewind(path_id);
+ m_vpgen.reset();
+ m_start_x = 0;
+ m_start_y = 0;
+ m_poly_flags = 0;
+ m_vertices = 0;
+ }
+
+
+ //------------------------------------------------------------------------
+ template<class VertexSource, class VPGen>
+ unsigned conv_adaptor_vpgen<VertexSource, VPGen>::vertex(double* x, double* y)
+ {
+ unsigned cmd = path_cmd_stop;
+ for(;;)
+ {
+ cmd = m_vpgen.vertex(x, y);
+ if(!is_stop(cmd)) break;
+
+ if(m_poly_flags && !m_vpgen.auto_unclose())
+ {
+ *x = 0.0;
+ *y = 0.0;
+ cmd = m_poly_flags;
+ m_poly_flags = 0;
+ break;
+ }
+
+ if(m_vertices < 0)
+ {
+ if(m_vertices < -1)
+ {
+ m_vertices = 0;
+ return path_cmd_stop;
+ }
+ m_vpgen.move_to(m_start_x, m_start_y);
+ m_vertices = 1;
+ continue;
+ }
+
+ double tx, ty;
+ cmd = m_source->vertex(&tx, &ty);
+ if(is_vertex(cmd))
+ {
+ if(is_move_to(cmd))
+ {
+ if(m_vpgen.auto_close() && m_vertices > 2)
+ {
+ m_vpgen.line_to(m_start_x, m_start_y);
+ m_poly_flags = path_cmd_end_poly | path_flags_close;
+ m_start_x = tx;
+ m_start_y = ty;
+ m_vertices = -1;
+ continue;
+ }
+ m_vpgen.move_to(tx, ty);
+ m_start_x = tx;
+ m_start_y = ty;
+ m_vertices = 1;
+ }
+ else
+ {
+ m_vpgen.line_to(tx, ty);
+ ++m_vertices;
+ }
+ }
+ else
+ {
+ if(is_end_poly(cmd))
+ {
+ m_poly_flags = cmd;
+ if(is_closed(cmd) || m_vpgen.auto_close())
+ {
+ if(m_vpgen.auto_close()) m_poly_flags |= path_flags_close;
+ if(m_vertices > 2)
+ {
+ m_vpgen.line_to(m_start_x, m_start_y);
+ }
+ m_vertices = 0;
+ }
+ }
+ else
+ {
+ // path_cmd_stop
+ if(m_vpgen.auto_close() && m_vertices > 2)
+ {
+ m_vpgen.line_to(m_start_x, m_start_y);
+ m_poly_flags = path_cmd_end_poly | path_flags_close;
+ m_vertices = -2;
+ continue;
+ }
+ break;
+ }
+ }
+ }
+ return cmd;
+ }
+
+
+}
+
+
+#endif
+
diff --git a/agg/inc/agg_conv_bspline.h b/agg/inc/agg_conv_bspline.h
new file mode 100755
index 000000000000..9c504daff209
--- /dev/null
+++ b/agg/inc/agg_conv_bspline.h
@@ -0,0 +1,48 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+#ifndef AGG_CONV_BSPLINE_INCLUDED
+#define AGG_CONV_BSPLINE_INCLUDED
+
+#include "agg_basics.h"
+#include "agg_vcgen_bspline.h"
+#include "agg_conv_adaptor_vcgen.h"
+
+
+namespace agg
+{
+
+ //---------------------------------------------------------conv_bspline
+ template<class VertexSource>
+ struct conv_bspline : public conv_adaptor_vcgen<VertexSource, vcgen_bspline>
+ {
+ typedef conv_adaptor_vcgen<VertexSource, vcgen_bspline> base_type;
+
+ conv_bspline(VertexSource& vs) :
+ conv_adaptor_vcgen<VertexSource, vcgen_bspline>(vs) {}
+
+ void interpolation_step(double v) { base_type::generator().interpolation_step(v); }
+ double interpolation_step() const { return base_type::generator().interpolation_step(); }
+
+ private:
+ conv_bspline(const conv_bspline<VertexSource>&);
+ const conv_bspline<VertexSource>&
+ operator = (const conv_bspline<VertexSource>&);
+ };
+
+}
+
+
+#endif
+
diff --git a/agg/inc/agg_conv_clip_polygon.h b/agg/inc/agg_conv_clip_polygon.h
new file mode 100755
index 000000000000..cbecc51fbdd5
--- /dev/null
+++ b/agg/inc/agg_conv_clip_polygon.h
@@ -0,0 +1,69 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// Polygon clipping converter
+// There an optimized Liang-Basky algorithm is used.
+// The algorithm doesn't optimize the degenerate edges, i.e. it will never
+// break a closed polygon into two or more ones, instead, there will be
+// degenerate edges coinciding with the respective clipping boundaries.
+// This is a sub-optimal solution, because that optimization would require
+// extra, rather expensive math while the rasterizer tolerates it quite well,
+// without any considerable overhead.
+//
+//----------------------------------------------------------------------------
+#ifndef AGG_CONV_CLIP_POLYGON_INCLUDED
+#define AGG_CONV_CLIP_POLYGON_INCLUDED
+
+#include "agg_basics.h"
+#include "agg_conv_adaptor_vpgen.h"
+#include "agg_vpgen_clip_polygon.h"
+#include "agg_vertex_iterator.h"
+
+namespace agg
+{
+
+ //=======================================================conv_clip_polygon
+ template<class VertexSource>
+ struct conv_clip_polygon : public conv_adaptor_vpgen<VertexSource, vpgen_clip_polygon>
+ {
+ typedef conv_adaptor_vpgen<VertexSource, vpgen_clip_polygon> base_type;
+
+ conv_clip_polygon(VertexSource& vs) :
+ conv_adaptor_vpgen<VertexSource, vpgen_clip_polygon>(vs) {}
+
+ void clip_box(double x1, double y1, double x2, double y2)
+ {
+ base_type::vpgen().clip_box(x1, y1, x2, y2);
+ }
+
+ double x1() const { return base_type::vpgen().x1(); }
+ double y1() const { return base_type::vpgen().y1(); }
+ double x2() const { return base_type::vpgen().x2(); }
+ double y2() const { return base_type::vpgen().y2(); }
+
+ typedef conv_clip_polygon<VertexSource> source_type;
+ typedef vertex_iterator<source_type> iterator;
+ iterator begin(unsigned id) { return iterator(*this, id); }
+ iterator end() { return iterator(path_cmd_stop); }
+
+ private:
+ conv_clip_polygon(const conv_clip_polygon<VertexSource>&);
+ const conv_clip_polygon<VertexSource>&
+ operator = (const conv_clip_polygon<VertexSource>&);
+ };
+
+}
+
+#endif
diff --git a/agg/inc/agg_conv_clip_polyline.h b/agg/inc/agg_conv_clip_polyline.h
new file mode 100755
index 000000000000..4ac66276891c
--- /dev/null
+++ b/agg/inc/agg_conv_clip_polyline.h
@@ -0,0 +1,69 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// polyline clipping converter
+// There an optimized Liang-Basky algorithm is used.
+// The algorithm doesn't optimize the degenerate edges, i.e. it will never
+// break a closed polyline into two or more ones, instead, there will be
+// degenerate edges coinciding with the respective clipping boundaries.
+// This is a sub-optimal solution, because that optimization would require
+// extra, rather expensive math while the rasterizer tolerates it quite well,
+// without any considerable overhead.
+//
+//----------------------------------------------------------------------------
+#ifndef AGG_CONV_CLIP_polyline_INCLUDED
+#define AGG_CONV_CLIP_polyline_INCLUDED
+
+#include "agg_basics.h"
+#include "agg_conv_adaptor_vpgen.h"
+#include "agg_vpgen_clip_polyline.h"
+#include "agg_vertex_iterator.h"
+
+namespace agg
+{
+
+ //=======================================================conv_clip_polyline
+ template<class VertexSource>
+ struct conv_clip_polyline : public conv_adaptor_vpgen<VertexSource, vpgen_clip_polyline>
+ {
+ typedef conv_adaptor_vpgen<VertexSource, vpgen_clip_polyline> base_type;
+
+ conv_clip_polyline(VertexSource& vs) :
+ conv_adaptor_vpgen<VertexSource, vpgen_clip_polyline>(vs) {}
+
+ void clip_box(double x1, double y1, double x2, double y2)
+ {
+ base_type::vpgen().clip_box(x1, y1, x2, y2);
+ }
+
+ double x1() const { return base_type::vpgen().x1(); }
+ double y1() const { return base_type::vpgen().y1(); }
+ double x2() const { return base_type::vpgen().x2(); }
+ double y2() const { return base_type::vpgen().y2(); }
+
+ typedef conv_clip_polyline<VertexSource> source_type;
+ typedef vertex_iterator<source_type> iterator;
+ iterator begin(unsigned id) { return iterator(*this, id); }
+ iterator end() { return iterator(path_cmd_stop); }
+
+ private:
+ conv_clip_polyline(const conv_clip_polyline<VertexSource>&);
+ const conv_clip_polyline<VertexSource>&
+ operator = (const conv_clip_polyline<VertexSource>&);
+ };
+
+}
+
+#endif
diff --git a/agg/inc/agg_conv_close_polygon.h b/agg/inc/agg_conv_close_polygon.h
new file mode 100755
index 000000000000..60a756a7408a
--- /dev/null
+++ b/agg/inc/agg_conv_close_polygon.h
@@ -0,0 +1,132 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+
+#ifndef AGG_CONV_CLOSE_POLYGON_INCLUDED
+#define AGG_CONV_CLOSE_POLYGON_INCLUDED
+
+#include "agg_basics.h"
+#include "agg_vertex_iterator.h"
+
+namespace agg
+{
+
+ //======================================================conv_close_polygon
+ template<class VertexSource> class conv_close_polygon
+ {
+ public:
+ conv_close_polygon(VertexSource& vs) : m_source(&vs) {}
+
+ void set_source(VertexSource& source) { m_source = &source; }
+
+ void rewind(unsigned path_id);
+ unsigned vertex(double* x, double* y);
+
+ typedef conv_close_polygon<VertexSource> source_type;
+ typedef vertex_iterator<source_type> iterator;
+ iterator begin(unsigned id) { return iterator(*this, id); }
+ iterator end() { return iterator(path_cmd_stop); }
+
+ private:
+ conv_close_polygon(const conv_close_polygon<VertexSource>&);
+ const conv_close_polygon<VertexSource>&
+ operator = (const conv_close_polygon<VertexSource>&);
+
+ VertexSource* m_source;
+ unsigned m_cmd[2];
+ double m_x[2];
+ double m_y[2];
+ unsigned m_vertex;
+ bool m_line_to;
+ };
+
+
+
+ //------------------------------------------------------------------------
+ template<class VertexSource>
+ void conv_close_polygon<VertexSource>::rewind(unsigned path_id)
+ {
+ m_source->rewind(path_id);
+ m_vertex = 2;
+ m_line_to = false;
+ }
+
+
+
+ //------------------------------------------------------------------------
+ template<class VertexSource>
+ unsigned conv_close_polygon<VertexSource>::vertex(double* x, double* y)
+ {
+ unsigned cmd = path_cmd_stop;
+ for(;;)
+ {
+ if(m_vertex < 2)
+ {
+ *x = m_x[m_vertex];
+ *y = m_y[m_vertex];
+ cmd = m_cmd[m_vertex];
+ ++m_vertex;
+ break;
+ }
+
+ cmd = m_source->vertex(x, y);
+
+ if(is_end_poly(cmd))
+ {
+ cmd |= path_flags_close;
+ break;
+ }
+
+ if(is_stop(cmd))
+ {
+ if(m_line_to)
+ {
+ m_cmd[0] = path_cmd_end_poly | path_flags_close;
+ m_cmd[1] = path_cmd_stop;
+ m_vertex = 0;
+ m_line_to = false;
+ continue;
+ }
+ break;
+ }
+
+ if(is_move_to(cmd))
+ {
+ if(m_line_to)
+ {
+ m_x[0] = 0.0;
+ m_y[0] = 0.0;
+ m_cmd[0] = path_cmd_end_poly | path_flags_close;
+ m_x[1] = *x;
+ m_y[1] = *y;
+ m_cmd[1] = cmd;
+ m_vertex = 0;
+ m_line_to = false;
+ continue;
+ }
+ break;
+ }
+
+ if(is_vertex(cmd))
+ {
+ m_line_to = true;
+ break;
+ }
+ }
+ return cmd;
+ }
+
+}
+
+#endif
diff --git a/agg/inc/agg_conv_concat.h b/agg/inc/agg_conv_concat.h
new file mode 100755
index 000000000000..2b9886a1be46
--- /dev/null
+++ b/agg/inc/agg_conv_concat.h
@@ -0,0 +1,80 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+
+#ifndef AGG_CONV_CONCAT_INCLUDED
+#define AGG_CONV_CONCAT_INCLUDED
+
+#include "agg_basics.h"
+#include "agg_vertex_iterator.h"
+
+namespace agg
+{
+ //=============================================================conv_concat
+ // Concatenation of two paths. Usually used to combine lines or curves
+ // with markers such as arrowheads
+ template<class VS1, class VS2> class conv_concat
+ {
+ public:
+ conv_concat(VS1& source1, VS2& source2) :
+ m_source1(&source1), m_source2(&source2), m_status(2) {}
+
+ void set_source1(VS1& source) { m_source1 = &source; }
+ void set_source2(VS2& source) { m_source2 = &source; }
+
+
+ void rewind(unsigned id)
+ {
+ m_source1->rewind(id);
+ m_source2->rewind(0);
+ m_status = 0;
+ }
+
+ unsigned vertex(double* x, double* y)
+ {
+ unsigned cmd;
+ if(m_status == 0)
+ {
+ cmd = m_source1->vertex(x, y);
+ if(!is_stop(cmd)) return cmd;
+ m_status = 1;
+ }
+ if(m_status == 1)
+ {
+ cmd = m_source2->vertex(x, y);
+ if(!is_stop(cmd)) return cmd;
+ m_status = 2;
+ }
+ return path_cmd_stop;
+ }
+
+ typedef conv_concat<VS1, VS2> source_type;
+ typedef vertex_iterator<source_type> iterator;
+ iterator begin(unsigned id) { return iterator(*this, id); }
+ iterator end() { return iterator(path_cmd_stop); }
+
+ private:
+ conv_concat(const conv_concat<VS1, VS2>&);
+ const conv_concat<VS1, VS2>&
+ operator = (const conv_concat<VS1, VS2>&);
+
+ VS1* m_source1;
+ VS2* m_source2;
+ int m_status;
+
+ };
+}
+
+
+#endif
diff --git a/agg/inc/agg_conv_contour.h b/agg/inc/agg_conv_contour.h
new file mode 100755
index 000000000000..652a8e1fa4f3
--- /dev/null
+++ b/agg/inc/agg_conv_contour.h
@@ -0,0 +1,65 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// conv_stroke
+//
+//----------------------------------------------------------------------------
+#ifndef AGG_CONV_CONTOUR_INCLUDED
+#define AGG_CONV_CONTOUR_INCLUDED
+
+#include "agg_basics.h"
+#include "agg_vcgen_contour.h"
+#include "agg_conv_adaptor_vcgen.h"
+
+namespace agg
+{
+
+ //-----------------------------------------------------------conv_contour
+ template<class VertexSource>
+ struct conv_contour : public conv_adaptor_vcgen<VertexSource, vcgen_contour>
+ {
+ typedef conv_adaptor_vcgen<VertexSource, vcgen_contour> base_type;
+
+ conv_contour(VertexSource& vs) :
+ conv_adaptor_vcgen<VertexSource, vcgen_contour>(vs)
+ {
+ }
+
+ void line_join(line_join_e lj) { base_type::generator().line_join(lj); }
+ void inner_line_join(line_join_e lj) { base_type::generator().inner_line_join(lj); }
+ void width(double w) { base_type::generator().width(w); }
+ void miter_limit(double ml) { base_type::generator().miter_limit(ml); }
+ void miter_limit_theta(double t) { base_type::generator().miter_limit_theta(t); }
+ void inner_miter_limit(double ml) { base_type::generator().inner_miter_limit(ml); }
+ void approximation_scale(double as) { base_type::generator().approximation_scale(as); }
+ void auto_detect_orientation(bool v) { base_type::generator().auto_detect_orientation(v); }
+
+ line_join_e line_join() const { return base_type::generator().line_join(); }
+ line_join_e inner_line_join() const { return base_type::generator().inner_line_join(); }
+ double width() const { return base_type::generator().width(); }
+ double miter_limit() const { return base_type::generator().miter_limit(); }
+ double inner_miter_limit() const { return base_type::generator().inner_miter_limit(); }
+ double approximation_scale() const { return base_type::generator().approximation_scale(); }
+ bool auto_detect_orientation() const { return base_type::generator().auto_detect_orientation(); }
+
+ private:
+ conv_contour(const conv_contour<VertexSource>&);
+ const conv_contour<VertexSource>&
+ operator = (const conv_contour<VertexSource>&);
+ };
+
+}
+
+#endif
diff --git a/agg/inc/agg_conv_curve.h b/agg/inc/agg_conv_curve.h
new file mode 100755
index 000000000000..3b8e6cff2e2e
--- /dev/null
+++ b/agg/inc/agg_conv_curve.h
@@ -0,0 +1,174 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// classes conv_curve
+//
+//----------------------------------------------------------------------------
+
+#ifndef AGG_CONV_CURVE_INCLUDED
+#define AGG_CONV_CURVE_INCLUDED
+
+#include "agg_basics.h"
+#include "agg_curves.h"
+
+namespace agg
+{
+
+
+ //---------------------------------------------------------------conv_curve
+ // Curve converter class. Any path storage can have Bezier curves defined
+ // by their control points. There're two types of curves supported: curve3
+ // and curve4. Curve3 is a conic Bezier curve with 2 endpoints and 1 control
+ // point. Curve4 has 2 control points (4 points in total) and can be used
+ // to interpolate more complicated curves. Curve4, unlike curve3 can be used
+ // to approximate arcs, both curcular and elliptical. Curves are approximated
+ // with straight lines and one of the approaches is just to store the whole
+ // sequence of vertices that approximate our curve. It takes additional
+ // memory, and at the same time the consecutive vertices can be calculated
+ // on demand.
+ //
+ // Initially, path storages are not suppose to keep all the vertices of the
+ // curves (although, nothig prevents us from doing so). Instead, path_storage
+ // keeps only vertices, needed to calculate a curve on demand. Those vertices
+ // are marked with special commands. So, if the path_storage contains curves
+ // (which are not real curves yet), and we render this storage directly,
+ // all we will see is only 2 or 3 straight line segments (for curve3 and
+ // curve4 respectively). If we need to see real curves drawn we need to
+ // include this class into the conversion pipeline.
+ //
+ // Class conv_curve recognizes commands path_cmd_curve3 and path_cmd_curve4
+ // and converts these vertices into a move_to/line_to sequence.
+ //-----------------------------------------------------------------------
+ template<class VertexSource> class conv_curve
+ {
+ public:
+ conv_curve(VertexSource& source) :
+ m_source(&source), m_last_x(0.0), m_last_y(0.0) {}
+
+ void set_source(VertexSource& source) { m_source = &source; }
+
+ void approximation_scale(double s)
+ {
+ m_curve3.approximation_scale(s);
+ m_curve4.approximation_scale(s);
+ }
+
+ double approximation_scale() const
+ {
+ return m_curve3.approximation_scale();
+ }
+
+ void rewind(unsigned id);
+ unsigned vertex(double* x, double* y);
+
+ typedef conv_curve<VertexSource> source_type;
+ typedef vertex_iterator<source_type> iterator;
+ iterator begin(unsigned id) { return iterator(*this, id); }
+ iterator end() { return iterator(path_cmd_stop); }
+
+ private:
+ conv_curve(const conv_curve<VertexSource>&);
+ const conv_curve<VertexSource>&
+ operator = (const conv_curve<VertexSource>&);
+
+ VertexSource* m_source;
+ double m_last_x;
+ double m_last_y;
+ curve3 m_curve3;
+ curve4 m_curve4;
+ };
+
+
+
+ //------------------------------------------------------------------------
+ template<class VertexSource>
+ void conv_curve<VertexSource>::rewind(unsigned id)
+ {
+ m_source->rewind(id);
+ m_last_x = 0.0;
+ m_last_y = 0.0;
+ m_curve3.reset();
+ m_curve4.reset();
+ }
+
+
+ //------------------------------------------------------------------------
+ template<class VertexSource>
+ unsigned conv_curve<VertexSource>::vertex(double* x, double* y)
+ {
+ if(!is_stop(m_curve3.vertex(x, y)))
+ {
+ m_last_x = *x;
+ m_last_y = *y;
+ return path_cmd_line_to;
+ }
+
+ if(!is_stop(m_curve4.vertex(x, y)))
+ {
+ m_last_x = *x;
+ m_last_y = *y;
+ return path_cmd_line_to;
+ }
+
+ double ct2_x = 0;
+ double ct2_y = 0;
+ double end_x = 0;
+ double end_y = 0;
+
+ unsigned cmd = m_source->vertex(x, y);
+ switch(cmd)
+ {
+ case path_cmd_move_to:
+ case path_cmd_line_to:
+ m_last_x = *x;
+ m_last_y = *y;
+ default:
+ break;
+
+ case path_cmd_curve3:
+ m_source->vertex(&end_x, &end_y);
+
+ m_curve3.init(m_last_x, m_last_y,
+ *x, *y,
+ end_x, end_y);
+
+ m_curve3.vertex(x, y); // First call returns path_cmd_move_to
+ m_curve3.vertex(x, y); // This is the first vertex of the curve
+ cmd = path_cmd_line_to;
+ break;
+
+ case path_cmd_curve4:
+ m_source->vertex(&ct2_x, &ct2_y);
+ m_source->vertex(&end_x, &end_y);
+
+ m_curve4.init(m_last_x, m_last_y,
+ *x, *y,
+ ct2_x, ct2_y,
+ end_x, end_y);
+
+ m_curve4.vertex(x, y); // First call returns path_cmd_move_to
+ m_curve4.vertex(x, y); // This is the first vertex of the curve
+ cmd = path_cmd_line_to;
+ break;
+ }
+ return cmd;
+ }
+
+
+}
+
+
+
+#endif
diff --git a/agg/inc/agg_conv_dash.h b/agg/inc/agg_conv_dash.h
new file mode 100755
index 000000000000..0520276bbb96
--- /dev/null
+++ b/agg/inc/agg_conv_dash.h
@@ -0,0 +1,68 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// conv_dash
+//
+//----------------------------------------------------------------------------
+#ifndef AGG_CONV_DASH_INCLUDED
+#define AGG_CONV_DASH_INCLUDED
+
+#include "agg_basics.h"
+#include "agg_vcgen_dash.h"
+#include "agg_conv_adaptor_vcgen.h"
+
+namespace agg
+{
+
+ //---------------------------------------------------------------conv_dash
+ template<class VertexSource, class Markers=null_markers>
+ struct conv_dash : public conv_adaptor_vcgen<VertexSource, vcgen_dash, Markers>
+ {
+ typedef Markers marker_type;
+ typedef conv_adaptor_vcgen<VertexSource, vcgen_dash, Markers> base_type;
+
+ conv_dash(VertexSource& vs) :
+ conv_adaptor_vcgen<VertexSource, vcgen_dash, Markers>(vs)
+ {
+ }
+
+ void remove_all_dashes()
+ {
+ base_type::generator().remove_all_dashes();
+ }
+
+ void add_dash(double dash_len, double gap_len)
+ {
+ base_type::generator().add_dash(dash_len, gap_len);
+ }
+
+ void dash_start(double ds)
+ {
+ base_type::generator().dash_start(ds);
+ }
+
+ void shorten(double s) { base_type::generator().shorten(s); }
+ double shorten() const { return base_type::generator().shorten(); }
+
+ private:
+ conv_dash(const conv_dash<VertexSource, Markers>&);
+ const conv_dash<VertexSource, Markers>&
+ operator = (const conv_dash<VertexSource, Markers>&);
+ };
+
+
+}
+
+#endif
diff --git a/agg/inc/agg_conv_gpc.h b/agg/inc/agg_conv_gpc.h
new file mode 100755
index 000000000000..1810309d208a
--- /dev/null
+++ b/agg/inc/agg_conv_gpc.h
@@ -0,0 +1,443 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// General Polygon Clipper based on the GPC library by Alan Murta
+// Union, Intersection, XOR, A-B, B-A
+// Contact the author if you intend to use it in commercial applications!
+// http://www.cs.man.ac.uk/aig/staff/alan/software/
+// Alan Murta (email: gpc@cs.man.ac.uk)
+//
+//----------------------------------------------------------------------------
+
+#ifndef AGG_CONV_GPC_INCLUDED
+#define AGG_CONV_GPC_INCLUDED
+
+#include <math.h>
+#include "agg_basics.h"
+#include "agg_array.h"
+#include "agg_vertex_iterator.h"
+
+extern "C"
+{
+#include "gpc.h"
+}
+
+namespace agg
+{
+ enum gpc_op_e
+ {
+ gpc_or,
+ gpc_and,
+ gpc_xor,
+ gpc_a_minus_b,
+ gpc_b_minus_a
+ };
+
+
+ //================================================================conv_gpc
+ template<class VSA, class VSB> class conv_gpc
+ {
+ enum status
+ {
+ status_move_to,
+ status_line_to,
+ status_stop
+ };
+
+ struct contour_header_type
+ {
+ int num_vertices;
+ int hole_flag;
+ gpc_vertex* vertices;
+ };
+
+ typedef pod_deque<gpc_vertex, 8> vertex_array_type;
+ typedef pod_deque<contour_header_type, 6> contour_header_array_type;
+
+
+ public:
+ typedef VSA source_a_type;
+ typedef VSB source_b_type;
+ typedef conv_gpc<source_a_type, source_b_type> self_type;
+
+ ~conv_gpc()
+ {
+ free_gpc_data();
+ }
+
+ conv_gpc(source_a_type& a, source_b_type& b, gpc_op_e op = gpc_or) :
+ m_src_a(&a),
+ m_src_b(&b),
+ m_status(status_move_to),
+ m_vertex(-1),
+ m_contour(-1),
+ m_operation(op)
+ {
+ memset(&m_poly_a, 0, sizeof(m_poly_a));
+ memset(&m_poly_b, 0, sizeof(m_poly_b));
+ memset(&m_result, 0, sizeof(m_result));
+ }
+
+ void set_source1(VSA& source) { m_src_a = &source; }
+ void set_source2(VSB& source) { m_src_b = &source; }
+
+ void operation(gpc_op_e v) { m_operation = v; }
+
+ // Vertex Source Interface
+ void rewind(unsigned id);
+ unsigned vertex(double* x, double* y);
+
+ // Iterator
+ typedef vertex_iterator<self_type> iterator;
+ iterator begin(unsigned id) { return iterator(*this, id); }
+ iterator end() { return iterator(path_cmd_stop); }
+
+ private:
+ conv_gpc(const conv_gpc<VSA, VSB>&);
+ const conv_gpc<VSA, VSB>& operator = (const conv_gpc<VSA, VSB>&);
+
+ //--------------------------------------------------------------------
+ void free_polygon(gpc_polygon& p);
+ void free_result();
+ void free_gpc_data();
+ void start_contour();
+ void add_vertex(double x, double y);
+ void end_contour(unsigned orientation);
+ void make_polygon(gpc_polygon& p);
+ void start_extracting();
+ bool next_contour();
+ bool next_vertex(double* x, double* y);
+
+
+ //--------------------------------------------------------------------
+ template<class VS> void add(VS& src, gpc_polygon& p)
+ {
+ unsigned cmd;
+ double x, y;
+ double start_x = 0.0;
+ double start_y = 0.0;
+ bool line_to = false;
+ unsigned orientation = 0;
+
+ m_contour_accumulator.remove_all();
+
+ while(!is_stop(cmd = src.vertex(&x, &y)))
+ {
+ if(is_vertex(cmd))
+ {
+ if(is_move_to(cmd))
+ {
+ if(line_to)
+ {
+ end_contour(orientation);
+ orientation = 0;
+ }
+ start_contour();
+ start_x = x;
+ start_y = y;
+ }
+ add_vertex(x, y);
+ line_to = true;
+ }
+ else
+ {
+ if(is_end_poly(cmd))
+ {
+ orientation = get_orientation(cmd);
+ if(line_to && is_closed(cmd))
+ {
+ add_vertex(start_x, start_y);
+ }
+ }
+ }
+ }
+ if(line_to)
+ {
+ end_contour(orientation);
+ }
+ make_polygon(p);
+ }
+
+
+ private:
+ //--------------------------------------------------------------------
+ source_a_type* m_src_a;
+ source_b_type* m_src_b;
+ status m_status;
+ int m_vertex;
+ int m_contour;
+ gpc_op_e m_operation;
+ vertex_array_type m_vertex_accumulator;
+ contour_header_array_type m_contour_accumulator;
+ gpc_polygon m_poly_a;
+ gpc_polygon m_poly_b;
+ gpc_polygon m_result;
+ };
+
+
+
+
+
+ //------------------------------------------------------------------------
+ template<class VSA, class VSB>
+ void conv_gpc<VSA, VSB>::free_polygon(gpc_polygon& p)
+ {
+ int i;
+ for(i = 0; i < p.num_contours; i++)
+ {
+ delete [] p.contour[i].vertex;
+ }
+ delete [] p.hole;
+ delete [] p.contour;
+ memset(&p, 0, sizeof(gpc_polygon));
+ }
+
+
+ //------------------------------------------------------------------------
+ template<class VSA, class VSB>
+ void conv_gpc<VSA, VSB>::free_result()
+ {
+ if(m_result.contour)
+ {
+ gpc_free_polygon(&m_result);
+ }
+ memset(&m_result, 0, sizeof(m_result));
+ }
+
+
+ //------------------------------------------------------------------------
+ template<class VSA, class VSB>
+ void conv_gpc<VSA, VSB>::free_gpc_data()
+ {
+ free_polygon(m_poly_a);
+ free_polygon(m_poly_b);
+ free_result();
+ }
+
+
+ //------------------------------------------------------------------------
+ template<class VSA, class VSB>
+ void conv_gpc<VSA, VSB>::start_contour()
+ {
+ contour_header_type h;
+ memset(&h, 0, sizeof(h));
+ m_contour_accumulator.add(h);
+ m_vertex_accumulator.remove_all();
+ }
+
+
+ //------------------------------------------------------------------------
+ template<class VSA, class VSB>
+ inline void conv_gpc<VSA, VSB>::add_vertex(double x, double y)
+ {
+ gpc_vertex v;
+ v.x = x;
+ v.y = y;
+ m_vertex_accumulator.add(v);
+ }
+
+
+ //------------------------------------------------------------------------
+ template<class VSA, class VSB>
+ void conv_gpc<VSA, VSB>::end_contour(unsigned orientation)
+ {
+ if(m_contour_accumulator.size())
+ {
+ if(m_vertex_accumulator.size() > 2)
+ {
+ contour_header_type& h =
+ m_contour_accumulator[m_contour_accumulator.size() - 1];
+
+ h.num_vertices = m_vertex_accumulator.size();
+ h.hole_flag = 0;
+
+ // TO DO: Clarify the "holes"
+ //if(is_cw(orientation)) h.hole_flag = 1;
+
+ h.vertices = new gpc_vertex [h.num_vertices];
+ gpc_vertex* d = h.vertices;
+ int i;
+ for(i = 0; i < h.num_vertices; i++)
+ {
+ const gpc_vertex& s = m_vertex_accumulator[i];
+ d->x = s.x;
+ d->y = s.y;
+ ++d;
+ }
+ }
+ else
+ {
+ m_vertex_accumulator.remove_last();
+ }
+ }
+ }
+
+
+ //------------------------------------------------------------------------
+ template<class VSA, class VSB>
+ void conv_gpc<VSA, VSB>::make_polygon(gpc_polygon& p)
+ {
+ free_polygon(p);
+ if(m_contour_accumulator.size())
+ {
+ p.num_contours = m_contour_accumulator.size();
+
+ // TO DO: Clarify the "holes"
+ //p.hole = new int[p.num_contours];
+ p.hole = 0;
+
+ p.contour = new gpc_vertex_list[p.num_contours];
+
+ int i;
+ //int* ph = p.hole;
+ gpc_vertex_list* pv = p.contour;
+ for(i = 0; i < p.num_contours; i++)
+ {
+ const contour_header_type& h = m_contour_accumulator[i];
+ // *ph++ = h.hole_flag;
+ pv->num_vertices = h.num_vertices;
+ pv->vertex = h.vertices;
+ ++pv;
+ }
+ }
+ }
+
+
+ //------------------------------------------------------------------------
+ template<class VSA, class VSB>
+ void conv_gpc<VSA, VSB>::start_extracting()
+ {
+ m_status = status_move_to;
+ m_contour = -1;
+ m_vertex = -1;
+ }
+
+
+ //------------------------------------------------------------------------
+ template<class VSA, class VSB>
+ bool conv_gpc<VSA, VSB>::next_contour()
+ {
+ if(++m_contour < m_result.num_contours)
+ {
+ m_vertex = -1;
+ return true;
+ }
+ return false;
+ }
+
+
+ //------------------------------------------------------------------------
+ template<class VSA, class VSB>
+ inline bool conv_gpc<VSA, VSB>::next_vertex(double* x, double* y)
+ {
+ const gpc_vertex_list& vlist = m_result.contour[m_contour];
+ if(++m_vertex < vlist.num_vertices)
+ {
+ const gpc_vertex& v = vlist.vertex[m_vertex];
+ *x = v.x;
+ *y = v.y;
+ return true;
+ }
+ return false;
+ }
+
+
+ //------------------------------------------------------------------------
+ template<class VSA, class VSB>
+ void conv_gpc<VSA, VSB>::rewind(unsigned id)
+ {
+ free_result();
+ m_src_a->rewind(id);
+ m_src_b->rewind(id);
+ add(*m_src_a, m_poly_a);
+ add(*m_src_b, m_poly_b);
+ switch(m_operation)
+ {
+ case gpc_or:
+ gpc_polygon_clip(GPC_UNION,
+ &m_poly_a,
+ &m_poly_b,
+ &m_result);
+ break;
+
+ case gpc_and:
+ gpc_polygon_clip(GPC_INT,
+ &m_poly_a,
+ &m_poly_b,
+ &m_result);
+ break;
+
+ case gpc_xor:
+ gpc_polygon_clip(GPC_XOR,
+ &m_poly_a,
+ &m_poly_b,
+ &m_result);
+ break;
+
+ case gpc_a_minus_b:
+ gpc_polygon_clip(GPC_DIFF,
+ &m_poly_a,
+ &m_poly_b,
+ &m_result);
+ break;
+
+ case gpc_b_minus_a:
+ gpc_polygon_clip(GPC_DIFF,
+ &m_poly_b,
+ &m_poly_a,
+ &m_result);
+ break;
+ }
+ start_extracting();
+ }
+
+
+ //------------------------------------------------------------------------
+ template<class VSA, class VSB>
+ unsigned conv_gpc<VSA, VSB>::vertex(double* x, double* y)
+ {
+ if(m_status == status_move_to)
+ {
+ if(next_contour())
+ {
+ if(next_vertex(x, y))
+ {
+ m_status = status_line_to;
+ return path_cmd_move_to;
+ }
+ m_status = status_stop;
+ return path_cmd_end_poly | path_flags_close;
+ }
+ }
+ else
+ {
+ if(next_vertex(x, y))
+ {
+ return path_cmd_line_to;
+ }
+ else
+ {
+ m_status = status_move_to;
+ }
+ return path_cmd_end_poly | path_flags_close;
+ }
+ return path_cmd_stop;
+ }
+
+
+}
+
+
+#endif
diff --git a/agg/inc/agg_conv_marker.h b/agg/inc/agg_conv_marker.h
new file mode 100755
index 000000000000..1ae7fc92307b
--- /dev/null
+++ b/agg/inc/agg_conv_marker.h
@@ -0,0 +1,154 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// conv_marker
+//
+//----------------------------------------------------------------------------
+#ifndef AGG_CONV_MARKER_INCLUDED
+#define AGG_CONV_MARKER_INCLUDED
+
+#include "agg_basics.h"
+#include "agg_trans_affine.h"
+#include "agg_vertex_iterator.h"
+
+namespace agg
+{
+ //-------------------------------------------------------------conv_marker
+ template<class MarkerLocator, class MarkerShapes>
+ class conv_marker
+ {
+ public:
+ conv_marker(MarkerLocator& ml, MarkerShapes& ms);
+
+ trans_affine& transform() { return m_transform; }
+ const trans_affine& transform() const { return m_transform; }
+
+ void rewind(unsigned id);
+ unsigned vertex(double* x, double* y);
+
+ typedef conv_marker<MarkerLocator, MarkerShapes> source_type;
+ typedef vertex_iterator<source_type> iterator;
+ iterator begin(unsigned id) { return iterator(*this, id); }
+ iterator end() { return iterator(path_cmd_stop); }
+
+ private:
+ conv_marker(const conv_marker<MarkerLocator, MarkerShapes>&);
+ const conv_marker<MarkerLocator, MarkerShapes>&
+ operator = (const conv_marker<MarkerLocator, MarkerShapes>&);
+
+ enum status_e
+ {
+ initial,
+ markers,
+ polygon,
+ stop
+ };
+
+ MarkerLocator* m_marker_locator;
+ MarkerShapes* m_marker_shapes;
+ trans_affine m_transform;
+ trans_affine m_mtx;
+ status_e m_status;
+ unsigned m_marker;
+ unsigned m_num_markers;
+ };
+
+
+ //------------------------------------------------------------------------
+ template<class MarkerLocator, class MarkerShapes>
+ conv_marker<MarkerLocator, MarkerShapes>::conv_marker(MarkerLocator& ml, MarkerShapes& ms) :
+ m_marker_locator(&ml),
+ m_marker_shapes(&ms),
+ m_status(initial),
+ m_marker(0),
+ m_num_markers(1)
+ {
+ }
+
+
+ //------------------------------------------------------------------------
+ template<class MarkerLocator, class MarkerShapes>
+ void conv_marker<MarkerLocator, MarkerShapes>::rewind(unsigned)
+ {
+ m_status = initial;
+ m_marker = 0;
+ m_num_markers = 1;
+ }
+
+
+ //------------------------------------------------------------------------
+ template<class MarkerLocator, class MarkerShapes>
+ unsigned conv_marker<MarkerLocator, MarkerShapes>::vertex(double* x, double* y)
+ {
+ unsigned cmd = path_cmd_move_to;
+ double x1, y1, x2, y2;
+
+ while(!is_stop(cmd))
+ {
+ switch(m_status)
+ {
+ case initial:
+ if(m_num_markers == 0)
+ {
+ cmd = path_cmd_stop;
+ break;
+ }
+ m_marker_locator->rewind(m_marker);
+ ++m_marker;
+ m_num_markers = 0;
+ m_status = markers;
+
+ case markers:
+ if(is_stop(m_marker_locator->vertex(&x1, &y1)))
+ {
+ m_status = initial;
+ break;
+ }
+ if(is_stop(m_marker_locator->vertex(&x2, &y2)))
+ {
+ m_status = initial;
+ break;
+ }
+ ++m_num_markers;
+ m_mtx = m_transform;
+ m_mtx *= trans_affine_rotation(atan2(y2 - y1, x2 - x1));
+ m_mtx *= trans_affine_translation(x1, y1);
+ m_marker_shapes->rewind(m_marker - 1);
+ m_status = polygon;
+
+ case polygon:
+ cmd = m_marker_shapes->vertex(x, y);
+ if(is_stop(cmd))
+ {
+ cmd = path_cmd_move_to;
+ m_status = markers;
+ break;
+ }
+ m_mtx.transform(x, y);
+ return cmd;
+
+ case stop:
+ cmd = path_cmd_stop;
+ break;
+ }
+ }
+ return cmd;
+ }
+
+}
+
+
+#endif
+
diff --git a/agg/inc/agg_conv_marker_adaptor.h b/agg/inc/agg_conv_marker_adaptor.h
new file mode 100755
index 000000000000..282d26eb5afc
--- /dev/null
+++ b/agg/inc/agg_conv_marker_adaptor.h
@@ -0,0 +1,51 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+
+#ifndef AGG_CONV_MARKER_ADAPTOR_INCLUDED
+#define AGG_CONV_MARKER_ADAPTOR_INCLUDED
+
+#include "agg_basics.h"
+#include "agg_conv_adaptor_vcgen.h"
+#include "agg_vcgen_vertex_sequence.h"
+
+namespace agg
+{
+
+ //=====================================================conv_marker_adaptor
+ template<class VertexSource, class Markers=null_markers>
+ struct conv_marker_adaptor :
+ public conv_adaptor_vcgen<VertexSource, vcgen_vertex_sequence, Markers>
+ {
+ typedef Markers marker_type;
+ typedef conv_adaptor_vcgen<VertexSource, vcgen_vertex_sequence, Markers> base_type;
+
+ conv_marker_adaptor(VertexSource& vs) :
+ conv_adaptor_vcgen<VertexSource, vcgen_vertex_sequence, Markers>(vs)
+ {
+ }
+
+ void shorten(double s) { base_type::generator().shorten(s); }
+ double shorten() const { return base_type::generator().shorten(); }
+
+ private:
+ conv_marker_adaptor(const conv_marker_adaptor<VertexSource, Markers>&);
+ const conv_marker_adaptor<VertexSource, Markers>&
+ operator = (const conv_marker_adaptor<VertexSource, Markers>&);
+ };
+
+
+}
+
+#endif
diff --git a/agg/inc/agg_conv_segmentator.h b/agg/inc/agg_conv_segmentator.h
new file mode 100755
index 000000000000..df81fea9b276
--- /dev/null
+++ b/agg/inc/agg_conv_segmentator.h
@@ -0,0 +1,48 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+
+#ifndef AGG_CONV_SEGMENTATOR_INCLUDED
+#define AGG_CONV_SEGMENTATOR_INCLUDED
+
+#include "agg_basics.h"
+#include "agg_conv_adaptor_vpgen.h"
+#include "agg_vpgen_segmentator.h"
+
+namespace agg
+{
+
+ //========================================================conv_segmentator
+ template<class VertexSource>
+ struct conv_segmentator : public conv_adaptor_vpgen<VertexSource, vpgen_segmentator>
+ {
+ typedef conv_adaptor_vpgen<VertexSource, vpgen_segmentator> base_type;
+
+ conv_segmentator(VertexSource& vs) :
+ conv_adaptor_vpgen<VertexSource, vpgen_segmentator>(vs) {}
+
+ void approximation_scale(double s) { base_type::vpgen().approximation_scale(s); }
+ double approximation_scale() const { return base_type::vpgen().approximation_scale(); }
+
+ private:
+ conv_segmentator(const conv_segmentator<VertexSource>&);
+ const conv_segmentator<VertexSource>&
+ operator = (const conv_segmentator<VertexSource>&);
+ };
+
+
+}
+
+#endif
+
diff --git a/agg/inc/agg_conv_shorten_path.h b/agg/inc/agg_conv_shorten_path.h
new file mode 100755
index 000000000000..07bc9357d6ca
--- /dev/null
+++ b/agg/inc/agg_conv_shorten_path.h
@@ -0,0 +1,50 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+
+#ifndef AGG_CONV_SHORTEN_PATH_INCLUDED
+#define AGG_CONV_SHORTEN_PATH_INCLUDED
+
+#include "agg_basics.h"
+#include "agg_conv_adaptor_vcgen.h"
+#include "agg_vcgen_vertex_sequence.h"
+
+namespace agg
+{
+
+ //=======================================================conv_shorten_path
+ template<class VertexSource> class conv_shorten_path :
+ public conv_adaptor_vcgen<VertexSource, vcgen_vertex_sequence>
+ {
+ public:
+ typedef conv_adaptor_vcgen<VertexSource, vcgen_vertex_sequence> base_type;
+
+ conv_shorten_path(VertexSource& vs) :
+ conv_adaptor_vcgen<VertexSource, vcgen_vertex_sequence>(vs)
+ {
+ }
+
+ void shorten(double s) { base_type::generator().shorten(s); }
+ double shorten() const { return base_type::generator().shorten(); }
+
+ private:
+ conv_shorten_path(const conv_shorten_path<VertexSource>&);
+ const conv_shorten_path<VertexSource>&
+ operator = (const conv_shorten_path<VertexSource>&);
+ };
+
+
+}
+
+#endif
diff --git a/agg/inc/agg_conv_smooth_poly1.h b/agg/inc/agg_conv_smooth_poly1.h
new file mode 100755
index 000000000000..f50a48747f9a
--- /dev/null
+++ b/agg/inc/agg_conv_smooth_poly1.h
@@ -0,0 +1,80 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// Smooth polygon generator
+//
+//----------------------------------------------------------------------------
+#ifndef AGG_CONV_SMOOTH_POLY1_INCLUDED
+#define AGG_CONV_SMOOTH_POLY1_INCLUDED
+
+#include "agg_basics.h"
+#include "agg_vcgen_smooth_poly1.h"
+#include "agg_conv_adaptor_vcgen.h"
+#include "agg_conv_curve.h"
+
+
+namespace agg
+{
+
+ //-------------------------------------------------------conv_smooth_poly1
+ template<class VertexSource>
+ struct conv_smooth_poly1 :
+ public conv_adaptor_vcgen<VertexSource, vcgen_smooth_poly1>
+ {
+ typedef conv_adaptor_vcgen<VertexSource, vcgen_smooth_poly1> base_type;
+
+ conv_smooth_poly1(VertexSource& vs) :
+ conv_adaptor_vcgen<VertexSource, vcgen_smooth_poly1>(vs)
+ {
+ }
+
+ void smooth_value(double v) { base_type::generator().smooth_value(v); }
+ double smooth_value() const { return base_type::generator().smooth_value(); }
+
+ private:
+ conv_smooth_poly1(const conv_smooth_poly1<VertexSource>&);
+ const conv_smooth_poly1<VertexSource>&
+ operator = (const conv_smooth_poly1<VertexSource>&);
+ };
+
+
+
+ //-------------------------------------------------conv_smooth_poly1_curve
+ template<class VertexSource>
+ struct conv_smooth_poly1_curve :
+ public conv_curve<conv_smooth_poly1<VertexSource> >
+ {
+ conv_smooth_poly1_curve(VertexSource& vs) :
+ conv_curve<conv_smooth_poly1<VertexSource> >(m_smooth),
+ m_smooth(vs)
+ {
+ }
+
+ void smooth_value(double v) { m_smooth.generator().smooth_value(v); }
+ double smooth_value() const { return m_smooth.generator().smooth_value(); }
+
+ private:
+ conv_smooth_poly1_curve(const conv_smooth_poly1_curve<VertexSource>&);
+ const conv_smooth_poly1_curve<VertexSource>&
+ operator = (const conv_smooth_poly1_curve<VertexSource>&);
+
+ conv_smooth_poly1<VertexSource> m_smooth;
+ };
+
+}
+
+
+#endif
+
diff --git a/agg/inc/agg_conv_stroke.h b/agg/inc/agg_conv_stroke.h
new file mode 100755
index 000000000000..cbdce446b7be
--- /dev/null
+++ b/agg/inc/agg_conv_stroke.h
@@ -0,0 +1,73 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// conv_stroke
+//
+//----------------------------------------------------------------------------
+#ifndef AGG_CONV_STROKE_INCLUDED
+#define AGG_CONV_STROKE_INCLUDED
+
+#include "agg_basics.h"
+#include "agg_vcgen_stroke.h"
+#include "agg_conv_adaptor_vcgen.h"
+
+namespace agg
+{
+
+ //-------------------------------------------------------------conv_stroke
+ template<class VertexSource, class Markers=null_markers>
+ struct conv_stroke :
+ public conv_adaptor_vcgen<VertexSource, vcgen_stroke, Markers>
+ {
+ typedef Markers marker_type;
+ typedef conv_adaptor_vcgen<VertexSource, vcgen_stroke, Markers> base_type;
+
+ conv_stroke(VertexSource& vs) :
+ conv_adaptor_vcgen<VertexSource, vcgen_stroke, Markers>(vs)
+ {
+ }
+
+ void line_cap(line_cap_e lc) { base_type::generator().line_cap(lc); }
+ void line_join(line_join_e lj) { base_type::generator().line_join(lj); }
+ void inner_line_join(line_join_e lj) { base_type::generator().inner_line_join(lj); }
+
+ line_cap_e line_cap() const { return base_type::generator().line_cap(); }
+ line_join_e line_join() const { return base_type::generator().line_join(); }
+ line_join_e inner_line_join() const { return base_type::generator().inner_line_join(); }
+
+ void width(double w) { base_type::generator().width(w); }
+ void miter_limit(double ml) { base_type::generator().miter_limit(ml); }
+ void miter_limit_theta(double t) { base_type::generator().miter_limit_theta(t); }
+ void inner_miter_limit(double ml) { base_type::generator().inner_miter_limit(ml); }
+ void approximation_scale(double as) { base_type::generator().approximation_scale(as); }
+
+ double width() const { return base_type::generator().width(); }
+ double miter_limit() const { return base_type::generator().miter_limit(); }
+ double inner_miter_limit() const { return base_type::generator().inner_miter_limit(); }
+ double approximation_scale() const { return base_type::generator().approximation_scale(); }
+
+ void shorten(double s) { base_type::generator().shorten(s); }
+ double shorten() const { return base_type::generator().shorten(); }
+
+ private:
+ conv_stroke(const conv_stroke<VertexSource, Markers>&);
+ const conv_stroke<VertexSource, Markers>&
+ operator = (const conv_stroke<VertexSource, Markers>&);
+
+ };
+
+}
+
+#endif
diff --git a/agg/inc/agg_conv_transform.h b/agg/inc/agg_conv_transform.h
new file mode 100755
index 000000000000..fb2dddcef617
--- /dev/null
+++ b/agg/inc/agg_conv_transform.h
@@ -0,0 +1,75 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// class conv_transform
+//
+//----------------------------------------------------------------------------
+#ifndef AGG_CONV_TRANSFORM_INCLUDED
+#define AGG_CONV_TRANSFORM_INCLUDED
+
+#include "agg_basics.h"
+#include "agg_trans_affine.h"
+#include "agg_vertex_iterator.h"
+
+namespace agg
+{
+
+ //----------------------------------------------------------conv_transform
+ template<class VertexSource, class Transformer=trans_affine> class conv_transform
+ {
+ public:
+ conv_transform(VertexSource& source, const Transformer& tr) :
+ m_source(&source), m_trans(&tr) {}
+
+ void set_source(VertexSource& source) { m_source = &source; }
+
+ void rewind(unsigned id)
+ {
+ m_source->rewind(id);
+ }
+
+ unsigned vertex(double* x, double* y)
+ {
+ unsigned cmd = m_source->vertex(x, y);
+ if(is_vertex(cmd))
+ {
+ m_trans->transform(x, y);
+ }
+ return cmd;
+ }
+
+ void transformer(const Transformer& tr)
+ {
+ m_trans = &tr;
+ }
+
+ typedef conv_transform<VertexSource, Transformer> source_type;
+ typedef vertex_iterator<source_type> iterator;
+ iterator begin(unsigned id) { return iterator(*this, id); }
+ iterator end() { return iterator(path_cmd_stop); }
+
+ private:
+ conv_transform(const conv_transform<VertexSource>&);
+ const conv_transform<VertexSource>&
+ operator = (const conv_transform<VertexSource>&);
+
+ VertexSource* m_source;
+ const Transformer* m_trans;
+ };
+
+
+}
+
+#endif
diff --git a/agg/inc/agg_conv_unclose_polygon.h b/agg/inc/agg_conv_unclose_polygon.h
new file mode 100755
index 000000000000..a6ba30a1119e
--- /dev/null
+++ b/agg/inc/agg_conv_unclose_polygon.h
@@ -0,0 +1,59 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+
+#ifndef AGG_CONV_UNCLOSE_POLYGON_INCLUDED
+#define AGG_CONV_UNCLOSE_POLYGON_INCLUDED
+
+#include "agg_basics.h"
+#include "agg_vertex_iterator.h"
+
+namespace agg
+{
+ //====================================================conv_unclose_polygon
+ template<class VertexSource> class conv_unclose_polygon
+ {
+ public:
+ conv_unclose_polygon(VertexSource& vs) : m_source(&vs) {}
+
+ void set_source(VertexSource& source) { m_source = &source; }
+
+ void rewind(unsigned path_id)
+ {
+ m_source->rewind(path_id);
+ }
+
+ unsigned vertex(double* x, double* y)
+ {
+ unsigned cmd = m_source->vertex(x, y);
+ if(is_end_poly(cmd)) cmd &= ~path_flags_close;
+ return cmd;
+ }
+
+ typedef conv_unclose_polygon<VertexSource> source_type;
+ typedef vertex_iterator<source_type> iterator;
+ iterator begin(unsigned id) { return iterator(*this, id); }
+ iterator end() { return iterator(path_cmd_stop); }
+
+ private:
+ conv_unclose_polygon(const conv_unclose_polygon<VertexSource>&);
+ const conv_unclose_polygon<VertexSource>&
+ operator = (const conv_unclose_polygon<VertexSource>&);
+
+ VertexSource* m_source;
+ };
+
+}
+
+#endif
diff --git a/agg/inc/agg_curves.h b/agg/inc/agg_curves.h
new file mode 100755
index 000000000000..bfb02e91ab96
--- /dev/null
+++ b/agg/inc/agg_curves.h
@@ -0,0 +1,150 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// classes curve3 and curve4
+//
+//----------------------------------------------------------------------------
+
+#ifndef AGG_CURVES_INCLUDED
+#define AGG_CURVES_INCLUDED
+
+#include "agg_basics.h"
+#include "agg_vertex_iterator.h"
+
+namespace agg
+{
+
+ // See Implemantation agg_curves.cpp
+
+
+ //------------------------------------------------------------------curve3
+ class curve3
+ {
+ public:
+ curve3() :
+ m_num_steps(0), m_step(0), m_scale(1.0) { }
+
+ curve3(double x1, double y1,
+ double x2, double y2,
+ double x3, double y3) :
+ m_num_steps(0), m_step(0), m_scale(1.0)
+ {
+ init(x1, y1, x2, y2, x3, y3);
+ }
+
+ void reset() { m_num_steps = 0; m_step = -1; }
+ void init(double x1, double y1,
+ double x2, double y2,
+ double x3, double y3);
+ void approximation_scale(double s) { m_scale = s; }
+ double approximation_scale() const { return m_scale; }
+
+ void rewind(unsigned id);
+ unsigned vertex(double* x, double* y);
+
+ typedef curve3 source_type;
+ typedef vertex_iterator<source_type> iterator;
+ iterator begin(unsigned id) { return iterator(*this, id); }
+ iterator end() { return iterator(path_cmd_stop); }
+
+ private:
+ int m_num_steps;
+ int m_step;
+ double m_scale;
+ double m_start_x;
+ double m_start_y;
+ double m_end_x;
+ double m_end_y;
+ double m_fx;
+ double m_fy;
+ double m_dfx;
+ double m_dfy;
+ double m_ddfx;
+ double m_ddfy;
+ double m_saved_fx;
+ double m_saved_fy;
+ double m_saved_dfx;
+ double m_saved_dfy;
+ };
+
+
+
+
+
+
+
+ //-----------------------------------------------------------------curve4
+ class curve4
+ {
+ public:
+ curve4() :
+ m_num_steps(0), m_step(0), m_scale(1.0) { }
+
+ curve4(double x1, double y1,
+ double x2, double y2,
+ double x3, double y3,
+ double x4, double y4) :
+ m_num_steps(0), m_step(0), m_scale(1.0)
+ {
+ init(x1, y1, x2, y2, x3, y3, x4, y4);
+ }
+
+ void reset() { m_num_steps = 0; m_step = -1; }
+ void init(double x1, double y1,
+ double x2, double y2,
+ double x3, double y3,
+ double x4, double y4);
+
+ void approximation_scale(double s) { m_scale = s; }
+ double approximation_scale() const { return m_scale; }
+
+ void rewind(unsigned id);
+ unsigned vertex(double* x, double* y);
+
+ typedef curve4 source_type;
+ typedef vertex_iterator<source_type> iterator;
+ iterator begin(unsigned id) { return iterator(*this, id); }
+ iterator end() { return iterator(path_cmd_stop); }
+
+ private:
+ int m_num_steps;
+ int m_step;
+ double m_scale;
+ double m_start_x;
+ double m_start_y;
+ double m_end_x;
+ double m_end_y;
+ double m_fx;
+ double m_fy;
+ double m_dfx;
+ double m_dfy;
+ double m_ddfx;
+ double m_ddfy;
+ double m_dddfx;
+ double m_dddfy;
+ double m_saved_fx;
+ double m_saved_fy;
+ double m_saved_dfx;
+ double m_saved_dfy;
+ double m_saved_ddfx;
+ double m_saved_ddfy;
+ };
+
+
+
+
+}
+
+#endif
diff --git a/agg/inc/agg_dda_line.h b/agg/inc/agg_dda_line.h
new file mode 100755
index 000000000000..6e7335c6dfec
--- /dev/null
+++ b/agg/inc/agg_dda_line.h
@@ -0,0 +1,290 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// classes dda_line_interpolator, dda2_line_interpolator
+//
+//----------------------------------------------------------------------------
+
+#ifndef AGG_DDA_LINE_INCLUDED
+#define AGG_DDA_LINE_INCLUDED
+
+#include <stdlib.h>
+#include "agg_basics.h"
+
+namespace agg
+{
+
+ //===================================================dda_line_interpolator
+ template<int FractionShift, int YShift=0> class dda_line_interpolator
+ {
+ public:
+ //--------------------------------------------------------------------
+ dda_line_interpolator() {}
+
+ //--------------------------------------------------------------------
+ dda_line_interpolator(int y1, int y2, unsigned count) :
+ m_y(y1),
+ m_inc(((y2 - y1) << FractionShift) / int(count)),
+ m_dy(0)
+ {
+ }
+
+ //--------------------------------------------------------------------
+ void operator ++ ()
+ {
+ m_dy += m_inc;
+ }
+
+ //--------------------------------------------------------------------
+ void operator -- ()
+ {
+ m_dy -= m_inc;
+ }
+
+ //--------------------------------------------------------------------
+ void operator += (unsigned n)
+ {
+ m_dy += m_inc * n;
+ }
+
+ //--------------------------------------------------------------------
+ void operator -= (unsigned n)
+ {
+ m_dy -= m_inc * n;
+ }
+
+
+ //--------------------------------------------------------------------
+ int y() const { return m_y + (m_dy >> (FractionShift-YShift)); }
+ int dy() const { return m_dy; }
+
+
+ private:
+ int m_y;
+ int m_inc;
+ int m_dy;
+ };
+
+
+
+
+
+ //=================================================dda2_line_interpolator
+ class dda2_line_interpolator
+ {
+ public:
+ typedef int save_data_type;
+ enum { save_size = 2 };
+
+ //--------------------------------------------------------------------
+ dda2_line_interpolator() {}
+
+ //-------------------------------------------- Forward-adjusted line
+ dda2_line_interpolator(int y1, int y2, int count) :
+ m_cnt(count <= 0 ? 1 : count),
+ m_lft((y2 - y1) / m_cnt),
+ m_rem((y2 - y1) % m_cnt),
+ m_mod(m_rem),
+ m_y(y1)
+ {
+ if(m_mod <= 0)
+ {
+ m_mod += count;
+ m_rem += count;
+ m_lft--;
+ }
+ m_mod -= count;
+ }
+
+ //-------------------------------------------- Backward-adjusted line
+ dda2_line_interpolator(int y1, int y2, int count, int) :
+ m_cnt(count <= 0 ? 1 : count),
+ m_lft((y2 - y1) / m_cnt),
+ m_rem((y2 - y1) % m_cnt),
+ m_mod(m_rem),
+ m_y(y1)
+ {
+ if(m_mod <= 0)
+ {
+ m_mod += count;
+ m_rem += count;
+ m_lft--;
+ }
+ }
+
+ //-------------------------------------------- Backward-adjusted line
+ dda2_line_interpolator(int _y, int count) :
+ m_cnt(count <= 0 ? 1 : count),
+ m_lft(_y / m_cnt),
+ m_rem(_y % m_cnt),
+ m_mod(m_rem),
+ m_y(0)
+ {
+ if(m_mod <= 0)
+ {
+ m_mod += count;
+ m_rem += count;
+ m_lft--;
+ }
+ }
+
+
+ //--------------------------------------------------------------------
+ void save(save_data_type* data) const
+ {
+ data[0] = m_mod;
+ data[1] = m_y;
+ }
+
+ //--------------------------------------------------------------------
+ void load(const save_data_type* data)
+ {
+ m_mod = data[0];
+ m_y = data[1];
+ }
+
+ //--------------------------------------------------------------------
+ void operator++()
+ {
+ m_mod += m_rem;
+ m_y += m_lft;
+ if(m_mod > 0)
+ {
+ m_mod -= m_cnt;
+ m_y++;
+ }
+ }
+
+ //--------------------------------------------------------------------
+ void operator--()
+ {
+ if(m_mod <= m_rem)
+ {
+ m_mod += m_cnt;
+ m_y--;
+ }
+ m_mod -= m_rem;
+ m_y -= m_lft;
+ }
+
+ //--------------------------------------------------------------------
+ void adjust_forward()
+ {
+ m_mod -= m_cnt;
+ }
+
+ //--------------------------------------------------------------------
+ void adjust_backward()
+ {
+ m_mod += m_cnt;
+ }
+
+ //--------------------------------------------------------------------
+ int mod() const { return m_mod; }
+ int rem() const { return m_rem; }
+ int lft() const { return m_lft; }
+
+ //--------------------------------------------------------------------
+ int y() const { return m_y; }
+
+ private:
+ int m_cnt;
+ int m_lft;
+ int m_rem;
+ int m_mod;
+ int m_y;
+ };
+
+
+
+
+
+
+
+ //---------------------------------------------line_bresenham_interpolator
+ class line_bresenham_interpolator
+ {
+ public:
+ enum
+ {
+ subpixel_shift = 8,
+ subpixel_size = 1 << subpixel_shift,
+ subpixel_mask = subpixel_size - 1
+ };
+
+ //--------------------------------------------------------------------
+ static int line_lr(int v) { return v >> subpixel_shift; }
+
+ //--------------------------------------------------------------------
+ line_bresenham_interpolator(int _x1, int _y1, int _x2, int _y2) :
+ m_x1_lr(line_lr(_x1)),
+ m_y1_lr(line_lr(_y1)),
+ m_x2_lr(line_lr(_x2)),
+ m_y2_lr(line_lr(_y2)),
+ m_ver(abs(m_x2_lr - m_x1_lr) < abs(m_y2_lr - m_y1_lr)),
+ m_len(m_ver ? abs(m_y2_lr - m_y1_lr) :
+ abs(m_x2_lr - m_x1_lr)),
+ m_inc(m_ver ? ((_y2 > _y1) ? 1 : -1) : ((_x2 > _x1) ? 1 : -1)),
+ m_interpolator(m_ver ? _x1 : _y1,
+ m_ver ? _x2 : _y2,
+ m_len)
+ {
+ }
+
+ //--------------------------------------------------------------------
+ bool is_ver() const { return m_ver; }
+ unsigned len() const { return m_len; }
+ int inc() const { return m_inc; }
+
+ //--------------------------------------------------------------------
+ void hstep()
+ {
+ ++m_interpolator;
+ m_x1_lr += m_inc;
+ }
+
+ //--------------------------------------------------------------------
+ void vstep()
+ {
+ ++m_interpolator;
+ m_y1_lr += m_inc;
+ }
+
+ //--------------------------------------------------------------------
+ int x1() const { return m_x1_lr; }
+ int y1() const { return m_y1_lr; }
+ int x2() const { return line_lr(m_interpolator.y()); }
+ int y2() const { return line_lr(m_interpolator.y()); }
+ int x2_hr() const { return m_interpolator.y(); }
+ int y2_hr() const { return m_interpolator.y(); }
+
+ private:
+ int m_x1_lr;
+ int m_y1_lr;
+ int m_x2_lr;
+ int m_y2_lr;
+ bool m_ver;
+ unsigned m_len;
+ int m_inc;
+ dda2_line_interpolator m_interpolator;
+
+ };
+
+
+}
+
+
+
+#endif
diff --git a/agg/inc/agg_ellipse.h b/agg/inc/agg_ellipse.h
new file mode 100755
index 000000000000..158ecf8b55ed
--- /dev/null
+++ b/agg/inc/agg_ellipse.h
@@ -0,0 +1,98 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// class ellipse
+//
+//----------------------------------------------------------------------------
+
+#ifndef AGG_ELLIPSE_INCLUDED
+#define AGG_ELLIPSE_INCLUDED
+
+#include "agg_basics.h"
+#include <math.h>
+
+namespace agg
+{
+
+ //----------------------------------------------------------------ellipse
+ class ellipse
+ {
+ public:
+ ellipse() : m_x(0.0), m_y(0.0), m_rx(1.0), m_ry(1.0), m_num(4), m_step(0) {}
+ ellipse(double x, double y, double rx, double ry, unsigned num_steps)
+ : m_x(x), m_y(y), m_rx(rx), m_ry(ry), m_num(num_steps), m_step(0) {}
+
+ void init(double x, double y, double rx, double ry, unsigned num_steps);
+ void approximation_scale(double scale);
+ void rewind(unsigned id);
+ unsigned vertex(double* x, double* y);
+
+ private:
+ double m_x;
+ double m_y;
+ double m_rx;
+ double m_ry;
+ unsigned m_num;
+ unsigned m_step;
+ };
+
+
+ //------------------------------------------------------------------------
+ inline void ellipse::init(double x, double y, double rx, double ry, unsigned num_steps)
+ {
+ m_x = x;
+ m_y = y;
+ m_rx = rx;
+ m_ry = ry;
+ m_num = num_steps;
+ m_step = 0;
+ }
+
+ //------------------------------------------------------------------------
+ inline void ellipse::approximation_scale(double scale)
+ {
+ m_num = unsigned((fabs(m_rx) + fabs(m_ry) + 6.0) * scale);
+ if(m_num < 6) m_num = 6;
+ }
+
+ //------------------------------------------------------------------------
+ inline void ellipse::rewind(unsigned)
+ {
+ m_step = 0;
+ }
+
+ //------------------------------------------------------------------------
+ inline unsigned ellipse::vertex(double* x, double* y)
+ {
+ if(m_step == m_num)
+ {
+ ++m_step;
+ return path_cmd_end_poly | path_flags_close | path_flags_ccw;
+ }
+ if(m_step > m_num) return path_cmd_stop;
+ double angle = double(m_step) / double(m_num) * 2.0 * pi;
+ *x = m_x + cos(angle) * m_rx;
+ *y = m_y + sin(angle) * m_ry;
+ m_step++;
+ return ((m_step == 1) ? path_cmd_move_to : path_cmd_line_to);
+ }
+
+}
+
+
+
+#endif
+
+
diff --git a/agg/inc/agg_ellipse_bresenham.h b/agg/inc/agg_ellipse_bresenham.h
new file mode 100755
index 000000000000..41133a473d9e
--- /dev/null
+++ b/agg/inc/agg_ellipse_bresenham.h
@@ -0,0 +1,113 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// Simple Bresenham interpolator for ellipsees
+//
+//----------------------------------------------------------------------------
+
+#ifndef AGG_ELLIPSE_BRESENHAM_INCLUDED
+#define AGG_ELLIPSE_BRESENHAM_INCLUDED
+
+
+#include "agg_basics.h"
+
+
+namespace agg
+{
+
+ //------------------------------------------ellipse_bresenham_interpolator
+ class ellipse_bresenham_interpolator
+ {
+ public:
+ ellipse_bresenham_interpolator(int rx, int ry) :
+ m_rx2(rx * rx),
+ m_ry2(ry * ry),
+ m_two_rx2(m_rx2 << 1),
+ m_two_ry2(m_ry2 << 1),
+ m_dx(0),
+ m_dy(0),
+ m_inc_x(0),
+ m_inc_y(-ry * m_two_rx2),
+ m_cur_f(0)
+ {}
+
+ int dx() const { return m_dx; }
+ int dy() const { return m_dy; }
+
+ void operator++ ()
+ {
+ int mx, my, mxy, min_m;
+ int fx, fy, fxy;
+
+ mx = fx = m_cur_f + m_inc_x + m_ry2;
+ if(mx < 0) mx = -mx;
+
+ my = fy = m_cur_f + m_inc_y + m_rx2;
+ if(my < 0) my = -my;
+
+ mxy = fxy = m_cur_f + m_inc_x + m_ry2 + m_inc_y + m_rx2;
+ if(mxy < 0) mxy = -mxy;
+
+ min_m = mx;
+ bool flag = true;
+
+ if(min_m > my)
+ {
+ min_m = my;
+ flag = false;
+ }
+
+ m_dx = m_dy = 0;
+
+ if(min_m > mxy)
+ {
+ m_inc_x += m_two_ry2;
+ m_inc_y += m_two_rx2;
+ m_cur_f = fxy;
+ m_dx = 1;
+ m_dy = 1;
+ return;
+ }
+
+ if(flag)
+ {
+ m_inc_x += m_two_ry2;
+ m_cur_f = fx;
+ m_dx = 1;
+ return;
+ }
+
+ m_inc_y += m_two_rx2;
+ m_cur_f = fy;
+ m_dy = 1;
+ }
+
+ private:
+ int m_rx2;
+ int m_ry2;
+ int m_two_rx2;
+ int m_two_ry2;
+ int m_dx;
+ int m_dy;
+ int m_inc_x;
+ int m_inc_y;
+ int m_cur_f;
+
+ };
+
+}
+
+#endif
+
diff --git a/agg/inc/agg_embedded_raster_fonts.h b/agg/inc/agg_embedded_raster_fonts.h
new file mode 100755
index 000000000000..f30fedfebe39
--- /dev/null
+++ b/agg/inc/agg_embedded_raster_fonts.h
@@ -0,0 +1,59 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+
+#ifndef AGG_EMBEDDED_RASTER_FONTS_INCLUDED
+#define AGG_EMBEDDED_RASTER_FONTS_INCLUDED
+
+#include "agg_basics.h"
+
+namespace agg
+{
+ extern const int8u gse4x6[];
+ extern const int8u gse4x8[];
+ extern const int8u gse5x7[];
+ extern const int8u gse5x9[];
+ extern const int8u gse6x12[];
+ extern const int8u gse6x9[];
+ extern const int8u gse7x11[];
+ extern const int8u gse7x11_bold[];
+ extern const int8u gse7x15[];
+ extern const int8u gse7x15_bold[];
+ extern const int8u gse8x16[];
+ extern const int8u gse8x16_bold[];
+ extern const int8u mcs11_prop[];
+ extern const int8u mcs11_prop_condensed[];
+ extern const int8u mcs12_prop[];
+ extern const int8u mcs13_prop[];
+ extern const int8u mcs5x10_mono[];
+ extern const int8u mcs5x11_mono[];
+ extern const int8u mcs6x10_mono[];
+ extern const int8u mcs6x11_mono[];
+ extern const int8u mcs7x12_mono_high[];
+ extern const int8u mcs7x12_mono_low[];
+ extern const int8u verdana12[];
+ extern const int8u verdana12_bold[];
+ extern const int8u verdana13[];
+ extern const int8u verdana13_bold[];
+ extern const int8u verdana14[];
+ extern const int8u verdana14_bold[];
+ extern const int8u verdana16[];
+ extern const int8u verdana16_bold[];
+ extern const int8u verdana17[];
+ extern const int8u verdana17_bold[];
+ extern const int8u verdana18[];
+ extern const int8u verdana18_bold[];
+}
+
+#endif
diff --git a/agg/inc/agg_font_cache_manager.h b/agg/inc/agg_font_cache_manager.h
new file mode 100755
index 000000000000..55c4d39db75d
--- /dev/null
+++ b/agg/inc/agg_font_cache_manager.h
@@ -0,0 +1,397 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+
+#ifndef AGG_FONT_CACHE_MANAGER_INCLUDED
+#define AGG_FONT_CACHE_MANAGER_INCLUDED
+
+#include <string.h>
+#include "agg_array.h"
+
+namespace agg
+{
+
+ //---------------------------------------------------------glyph_data_type
+ enum glyph_data_type
+ {
+ glyph_data_invalid = 0,
+ glyph_data_mono = 1,
+ glyph_data_gray8 = 2,
+ glyph_data_outline = 3
+ };
+
+
+ //-------------------------------------------------------------glyph_cache
+ struct glyph_cache
+ {
+ unsigned glyph_index;
+ int8u* data;
+ unsigned data_size;
+ glyph_data_type data_type;
+ rect bounds;
+ double advance_x;
+ double advance_y;
+ };
+
+
+ //--------------------------------------------------------------font_cache
+ class font_cache
+ {
+ public:
+ enum { block_size = 16384-16 };
+
+ //--------------------------------------------------------------------
+ font_cache(const char* font_signature) :
+ m_allocator(block_size),
+ m_font_signature(0)
+ {
+ m_font_signature = (char*)m_allocator.allocate(strlen(font_signature) + 1);
+ strcpy(m_font_signature, font_signature);
+ memset(m_glyphs, 0, sizeof(m_glyphs));
+ }
+
+ //--------------------------------------------------------------------
+ bool font_is(const char* font_signature) const
+ {
+ return strcmp(font_signature, m_font_signature) == 0;
+ }
+
+ //--------------------------------------------------------------------
+ const glyph_cache* find_glyph(unsigned glyph_code) const
+ {
+ unsigned msb = (glyph_code >> 8) & 0xFF;
+ if(m_glyphs[msb])
+ {
+ return m_glyphs[msb][glyph_code & 0xFF];
+ }
+ return 0;
+ }
+
+ //--------------------------------------------------------------------
+ glyph_cache* cache_glyph(unsigned glyph_code,
+ unsigned glyph_index,
+ unsigned data_size,
+ glyph_data_type data_type,
+ const rect& bounds,
+ double advance_x,
+ double advance_y)
+ {
+ unsigned msb = (glyph_code >> 8) & 0xFF;
+ if(m_glyphs[msb] == 0)
+ {
+ m_glyphs[msb] =
+ (glyph_cache**)m_allocator.allocate(sizeof(glyph_cache*) * 256,
+ sizeof(glyph_cache*));
+ memset(m_glyphs[msb], 0, sizeof(glyph_cache*) * 256);
+ }
+
+ unsigned lsb = glyph_code & 0xFF;
+ if(m_glyphs[msb][lsb]) return 0; // Already exists, do not overwrite
+
+ glyph_cache* glyph =
+ (glyph_cache*)m_allocator.allocate(sizeof(glyph_cache),
+ sizeof(double));
+
+ glyph->glyph_index = glyph_index;
+ glyph->data = m_allocator.allocate(data_size);
+ glyph->data_size = data_size;
+ glyph->data_type = data_type;
+ glyph->bounds = bounds;
+ glyph->advance_x = advance_x;
+ glyph->advance_y = advance_y;
+ return m_glyphs[msb][lsb] = glyph;
+ }
+
+ private:
+ pod_allocator m_allocator;
+ glyph_cache** m_glyphs[256];
+ char* m_font_signature;
+ };
+
+
+
+
+
+
+
+ //---------------------------------------------------------font_cache_pool
+ class font_cache_pool
+ {
+ public:
+ //--------------------------------------------------------------------
+ ~font_cache_pool()
+ {
+ unsigned i;
+ for(i = 0; i < m_num_fonts; ++i)
+ {
+ delete m_fonts[i];
+ }
+ delete [] m_fonts;
+ }
+
+ //--------------------------------------------------------------------
+ font_cache_pool(unsigned max_fonts=32) :
+ m_fonts(new font_cache* [max_fonts]),
+ m_max_fonts(max_fonts),
+ m_num_fonts(0),
+ m_cur_font(0)
+ {}
+
+
+ //--------------------------------------------------------------------
+ void font(const char* font_signature, bool reset_cache = false)
+ {
+ int idx = find_font(font_signature);
+ if(idx >= 0)
+ {
+ if(reset_cache)
+ {
+ delete m_fonts[idx];
+ m_fonts[idx] = new font_cache(font_signature);
+ }
+ m_cur_font = m_fonts[idx];
+ }
+ else
+ {
+ if(m_num_fonts >= m_max_fonts)
+ {
+ delete m_fonts[0];
+ memcpy(m_fonts,
+ m_fonts + 1,
+ (m_max_fonts - 1) * sizeof(font_cache*));
+ m_num_fonts = m_max_fonts - 1;
+ }
+ m_fonts[m_num_fonts] = new font_cache(font_signature);
+ m_cur_font = m_fonts[m_num_fonts];
+ ++m_num_fonts;
+ }
+ }
+
+ //--------------------------------------------------------------------
+ const font_cache* font() const
+ {
+ return m_cur_font;
+ }
+
+ //--------------------------------------------------------------------
+ const glyph_cache* find_glyph(unsigned glyph_code) const
+ {
+ if(m_cur_font) return m_cur_font->find_glyph(glyph_code);
+ return 0;
+ }
+
+ //--------------------------------------------------------------------
+ glyph_cache* cache_glyph(unsigned glyph_code,
+ unsigned glyph_index,
+ unsigned data_size,
+ glyph_data_type data_type,
+ const rect& bounds,
+ double advance_x,
+ double advance_y)
+ {
+ if(m_cur_font)
+ {
+ return m_cur_font->cache_glyph(glyph_code,
+ glyph_index,
+ data_size,
+ data_type,
+ bounds,
+ advance_x,
+ advance_y);
+ }
+ return 0;
+ }
+
+
+ //--------------------------------------------------------------------
+ int find_font(const char* font_signature)
+ {
+ unsigned i;
+ for(i = 0; i < m_num_fonts; i++)
+ {
+ if(m_fonts[i]->font_is(font_signature)) return int(i);
+ }
+ return -1;
+ }
+
+ private:
+ font_cache** m_fonts;
+ unsigned m_max_fonts;
+ unsigned m_num_fonts;
+ font_cache* m_cur_font;
+ };
+
+
+
+
+ //------------------------------------------------------------------------
+ enum glyph_rendering
+ {
+ glyph_ren_native_mono,
+ glyph_ren_native_gray8,
+ glyph_ren_outline,
+ glyph_ren_agg_mono,
+ glyph_ren_agg_gray8
+ };
+
+
+
+
+ //------------------------------------------------------font_cache_manager
+ template<class FontEngine> class font_cache_manager
+ {
+ public:
+ typedef FontEngine font_engine_type;
+ typedef font_cache_manager<FontEngine> self_type;
+ typedef typename font_engine_type::path_adaptor_type path_adaptor_type;
+ typedef typename font_engine_type::gray8_adaptor_type gray8_adaptor_type;
+ typedef typename gray8_adaptor_type::embedded_scanline gray8_scanline_type;
+ typedef typename font_engine_type::mono_adaptor_type mono_adaptor_type;
+ typedef typename mono_adaptor_type::embedded_scanline mono_scanline_type;
+
+ //--------------------------------------------------------------------
+ font_cache_manager(font_engine_type& engine, unsigned max_fonts=32) :
+ m_fonts(max_fonts),
+ m_engine(engine),
+ m_change_stamp(-1),
+ m_prev_glyph(0),
+ m_last_glyph(0)
+ {}
+
+ //--------------------------------------------------------------------
+ const glyph_cache* glyph(unsigned glyph_code)
+ {
+ synchronize();
+ const glyph_cache* gl = m_fonts.find_glyph(glyph_code);
+ if(gl)
+ {
+ m_prev_glyph = m_last_glyph;
+ return m_last_glyph = gl;
+ }
+ else
+ {
+ if(m_engine.prepare_glyph(glyph_code))
+ {
+ m_prev_glyph = m_last_glyph;
+ m_last_glyph = m_fonts.cache_glyph(glyph_code,
+ m_engine.glyph_index(),
+ m_engine.data_size(),
+ m_engine.data_type(),
+ m_engine.bounds(),
+ m_engine.advance_x(),
+ m_engine.advance_y());
+ m_engine.write_glyph_to(m_last_glyph->data);
+ return m_last_glyph;
+ }
+ }
+ return 0;
+ }
+
+ //--------------------------------------------------------------------
+ void init_embedded_adaptors(const glyph_cache* gl,
+ double x, double y,
+ double scale=1.0)
+ {
+ if(gl)
+ {
+ switch(gl->data_type)
+ {
+ default: return;
+ case glyph_data_mono:
+ m_mono_adaptor.init(gl->data, gl->data_size, x, y);
+ break;
+
+ case glyph_data_gray8:
+ m_gray8_adaptor.init(gl->data, gl->data_size, x, y);
+ break;
+
+ case glyph_data_outline:
+ m_path_adaptor.init(gl->data, gl->data_size, x, y, scale);
+ break;
+ }
+ }
+ }
+
+
+ //--------------------------------------------------------------------
+ path_adaptor_type& path_adaptor() { return m_path_adaptor; }
+ gray8_adaptor_type& gray8_adaptor() { return m_gray8_adaptor; }
+ gray8_scanline_type& gray8_scanline() { return m_gray8_scanline; }
+ mono_adaptor_type& mono_adaptor() { return m_mono_adaptor; }
+ mono_scanline_type& mono_scanline() { return m_mono_scanline; }
+
+ //--------------------------------------------------------------------
+ const glyph_cache* perv_glyph() const { return m_prev_glyph; }
+ const glyph_cache* last_glyph() const { return m_last_glyph; }
+
+ //--------------------------------------------------------------------
+ bool add_kerning(double* x, double* y)
+ {
+ if(m_prev_glyph && m_last_glyph)
+ {
+ return m_engine.add_kerning(m_prev_glyph->glyph_index,
+ m_last_glyph->glyph_index,
+ x, y);
+ }
+ return false;
+ }
+
+ //--------------------------------------------------------------------
+ void precache(unsigned from, unsigned to)
+ {
+ for(; from <= to; ++from) glyph(from);
+ }
+
+ //--------------------------------------------------------------------
+ void reset_cache()
+ {
+ m_fonts.font(m_engine.font_signature(), true);
+ m_change_stamp = m_engine.change_stamp();
+ m_prev_glyph = m_last_glyph = 0;
+ }
+
+ private:
+ //--------------------------------------------------------------------
+ font_cache_manager(const self_type&);
+ const self_type& operator = (const self_type&);
+
+ //--------------------------------------------------------------------
+ void synchronize()
+ {
+ if(m_change_stamp != m_engine.change_stamp())
+ {
+ m_fonts.font(m_engine.font_signature());
+ m_change_stamp = m_engine.change_stamp();
+ m_prev_glyph = m_last_glyph = 0;
+ }
+ }
+
+ font_cache_pool m_fonts;
+ font_engine_type& m_engine;
+ int m_change_stamp;
+ double m_dx;
+ double m_dy;
+ const glyph_cache* m_prev_glyph;
+ const glyph_cache* m_last_glyph;
+ path_adaptor_type m_path_adaptor;
+ gray8_adaptor_type m_gray8_adaptor;
+ gray8_scanline_type m_gray8_scanline;
+ mono_adaptor_type m_mono_adaptor;
+ mono_scanline_type m_mono_scanline;
+ };
+
+}
+
+#endif
+
diff --git a/agg/inc/agg_gamma_functions.h b/agg/inc/agg_gamma_functions.h
new file mode 100755
index 000000000000..09a8305faedb
--- /dev/null
+++ b/agg/inc/agg_gamma_functions.h
@@ -0,0 +1,123 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+
+#ifndef AGG_GAMMA_FUNCTIONS_INCLUDED
+#define AGG_GAMMA_FUNCTIONS_INCLUDED
+
+#include <math.h>
+#include "agg_basics.h"
+
+namespace agg
+{
+ //===============================================================gamma_none
+ struct gamma_none
+ {
+ double operator()(double x) const { return x; }
+ };
+
+
+ //==============================================================gamma_power
+ class gamma_power
+ {
+ public:
+ gamma_power() : m_gamma(1.0) {}
+ gamma_power(double g) : m_gamma(g) {}
+
+ void gamma(double g) { m_gamma = g; }
+ double gamma() const { return m_gamma; }
+
+ double operator() (double x) const
+ {
+ return pow(x, m_gamma);
+ }
+
+ private:
+ double m_gamma;
+ };
+
+
+ //==========================================================gamma_threshold
+ class gamma_threshold
+ {
+ public:
+ gamma_threshold() : m_threshold(0.5) {}
+ gamma_threshold(double t) : m_threshold(t) {}
+
+ void threshold(double t) { m_threshold = t; }
+ double threshold() const { return m_threshold; }
+
+ double operator() (double x) const
+ {
+ return (x < m_threshold) ? 0.0 : 1.0;
+ }
+
+ private:
+ double m_threshold;
+ };
+
+
+ //============================================================gamma_linear
+ class gamma_linear
+ {
+ public:
+ gamma_linear() : m_start(0.0), m_end(1.0) {}
+ gamma_linear(double s, double e) : m_start(s), m_end(e) {}
+
+ void set(double s, double e) { m_start = s; m_end = e; }
+ void start(double s) { m_start = s; }
+ void end(double e) { m_end = e; }
+ double start() const { return m_start; }
+ double end() const { return m_end; }
+
+ double operator() (double x) const
+ {
+ if(x < m_start) return 0.0;
+ if(x > m_end) return 1.0;
+ return (x - m_start) / (m_end - m_start);
+ }
+
+ private:
+ double m_start;
+ double m_end;
+ };
+
+
+ //==========================================================gamma_multiply
+ class gamma_multiply
+ {
+ public:
+ gamma_multiply() : m_mul(1.0) {}
+ gamma_multiply(double v) : m_mul(v) {}
+
+ void value(double v) { m_mul = v; }
+ double value() const { return m_mul; }
+
+ double operator() (double x) const
+ {
+ double y = x * m_mul;
+ if(y > 1.0) y = 1.0;
+ return y;
+ }
+
+ private:
+ double m_mul;
+ };
+
+}
+
+#endif
+
+
+
diff --git a/agg/inc/agg_gamma_lut.h b/agg/inc/agg_gamma_lut.h
new file mode 100755
index 000000000000..30e3b3c89d04
--- /dev/null
+++ b/agg/inc/agg_gamma_lut.h
@@ -0,0 +1,114 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+
+#ifndef AGG_GAMMA_LUT_INCLUDED
+#define AGG_GAMMA_LUT_INCLUDED
+
+#include <math.h>
+#include "agg_basics.h"
+
+namespace agg
+{
+ template<class LoResT=int8u,
+ class HiResT=int8u,
+ unsigned GammaShift=8,
+ unsigned HiResShift=8> class gamma_lut
+ {
+ public:
+ enum
+ {
+ gamma_shift = GammaShift,
+ gamma_size = 1 << gamma_shift,
+ gamma_mask = gamma_size - 1
+ };
+
+ enum
+ {
+ hi_res_shift = HiResShift,
+ hi_res_size = 1 << hi_res_shift,
+ hi_res_mask = hi_res_size - 1
+ };
+
+ ~gamma_lut()
+ {
+ delete [] m_inv_gamma;
+ delete [] m_dir_gamma;
+ }
+
+ gamma_lut() :
+ m_gamma(1.0),
+ m_dir_gamma(new HiResT[gamma_size]),
+ m_inv_gamma(new LoResT[hi_res_size])
+ {
+ unsigned i;
+ for(i = 0; i < gamma_size; i++)
+ {
+ m_dir_gamma[i] = HiResT(i << (hi_res_shift - gamma_shift));
+ }
+
+ for(i = 0; i < hi_res_size; i++)
+ {
+ m_inv_gamma[i] = LoResT(i >> (hi_res_shift - gamma_shift));
+ }
+ }
+
+ gamma_lut(double g) :
+ m_gamma(1.0),
+ m_dir_gamma(new HiResT[gamma_size]),
+ m_inv_gamma(new LoResT[hi_res_size])
+ {
+ gamma(g);
+ }
+
+ void gamma(double g)
+ {
+ m_gamma = g;
+
+ unsigned i;
+ for(i = 0; i < gamma_size; i++)
+ {
+ m_dir_gamma[i] = (HiResT)(pow(double(i) / double(gamma_mask), m_gamma) * double(hi_res_mask) + 0.5);
+ }
+
+ double inv_g = 1.0 / g;
+ for(i = 0; i < hi_res_size; i++)
+ {
+ m_inv_gamma[i] = (LoResT)(pow(double(i) / double(hi_res_mask), inv_g) * double(gamma_mask) + 0.5);
+ }
+ }
+
+ double gamma() const
+ {
+ return m_gamma;
+ }
+
+ HiResT dir(LoResT v) const
+ {
+ return m_dir_gamma[unsigned(v)];
+ }
+
+ LoResT inv(HiResT v) const
+ {
+ return m_inv_gamma[unsigned(v)];
+ }
+
+ private:
+ double m_gamma;
+ HiResT* m_dir_gamma;
+ LoResT* m_inv_gamma;
+ };
+}
+
+#endif
diff --git a/agg/inc/agg_glyph_raster_bin.h b/agg/inc/agg_glyph_raster_bin.h
new file mode 100755
index 000000000000..851d9f94bd72
--- /dev/null
+++ b/agg/inc/agg_glyph_raster_bin.h
@@ -0,0 +1,155 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+
+#ifndef AGG_GLYPH_RASTER_BIN_INCLUDED
+#define AGG_GLYPH_RASTER_BIN_INCLUDED
+
+#include <string.h>
+#include "agg_basics.h"
+
+namespace agg
+{
+
+ //========================================================glyph_raster_bin
+ template<class ColorT> class glyph_raster_bin
+ {
+ public:
+ typedef ColorT color_type;
+
+ //--------------------------------------------------------------------
+ struct glyph_rect
+ {
+ int x1,y1,x2,y2;
+ double dx, dy;
+ };
+
+ //--------------------------------------------------------------------
+ glyph_raster_bin(const int8u* font) :
+ m_font(font),
+ m_big_endian(false)
+ {
+ int t = 1;
+ if(*(char*)&t == 0) m_big_endian = true;
+ memset(m_span, 0, sizeof(m_span));
+ }
+
+ //--------------------------------------------------------------------
+ const int8u* font() const { return m_font; }
+ void font(const int8u* f) { m_font = f; }
+
+ //--------------------------------------------------------------------
+ double height() const { return m_font[0]; }
+ double base_line() const { return m_font[1]; }
+
+ //--------------------------------------------------------------------
+ template<class CharT>
+ double width(const CharT* str) const
+ {
+ unsigned start_char = m_font[2];
+ unsigned num_chars = m_font[3];
+
+ unsigned w = 0;
+ while(*str)
+ {
+ unsigned glyph = *str;
+ const int8u* bits = m_font + 4 + num_chars * 2 +
+ value(m_font + 4 + (glyph - start_char) * 2);
+ w += *bits;
+ ++str;
+ }
+ return w;
+ }
+
+ //--------------------------------------------------------------------
+ void prepare(glyph_rect* r, double x, double y, unsigned glyph, bool flip)
+ {
+ unsigned start_char = m_font[2];
+ unsigned num_chars = m_font[3];
+
+ m_bits = m_font + 4 + num_chars * 2 +
+ value(m_font + 4 + (glyph - start_char) * 2);
+
+ m_glyph_width = *m_bits++;
+ m_glyph_byte_width = (m_glyph_width + 7) >> 3;
+
+ r->x1 = int(x);
+ r->x2 = r->x1 + m_glyph_width - 1;
+ if(flip)
+ {
+ r->y1 = int(y) - m_font[0] + m_font[1];
+ r->y2 = r->y1 + m_font[0] - 1;
+ }
+ else
+ {
+ r->y1 = int(y) - m_font[1] + 1;
+ r->y2 = r->y1 + m_font[0] - 1;
+ }
+ r->dx = m_glyph_width;
+ r->dy = 0;
+ }
+
+ //--------------------------------------------------------------------
+ const cover_type* span(unsigned i)
+ {
+ i = m_font[0] - i - 1;
+ const int8u* bits = m_bits + i * m_glyph_byte_width;
+ unsigned j;
+ unsigned val = *bits;
+ unsigned nb = 0;
+ for(j = 0; j < m_glyph_width; ++j)
+ {
+ m_span[j] = (cover_type)((val & 0x80) ? cover_full : cover_none);
+ val <<= 1;
+ if(++nb >= 8)
+ {
+ val = *++bits;
+ nb = 0;
+ }
+ }
+ return m_span;
+ }
+
+ private:
+ //--------------------------------------------------------------------
+ int16u value(const int8u* p) const
+ {
+ int16u v;
+ if(m_big_endian)
+ {
+ *(int8u*)&v = p[1];
+ *((int8u*)&v + 1) = p[0];
+ }
+ else
+ {
+ *(int8u*)&v = p[0];
+ *((int8u*)&v + 1) = p[1];
+ }
+ return v;
+ }
+
+
+ //--------------------------------------------------------------------
+ const int8u* m_font;
+ bool m_big_endian;
+ cover_type m_span[32];
+ const int8u* m_bits;
+ unsigned m_glyph_width;
+ unsigned m_glyph_byte_width;
+ };
+
+
+}
+
+#endif
diff --git a/agg/inc/agg_gsv_text.h b/agg/inc/agg_gsv_text.h
new file mode 100755
index 000000000000..5d8e1cf63bab
--- /dev/null
+++ b/agg/inc/agg_gsv_text.h
@@ -0,0 +1,154 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// Class gsv_text
+//
+//----------------------------------------------------------------------------
+
+#ifndef AGG_GSV_TEXT_INCLUDED
+#define AGG_GSV_TEXT_INCLUDED
+
+#include "agg_basics.h"
+#include "agg_conv_stroke.h"
+#include "agg_conv_transform.h"
+
+namespace agg
+{
+
+
+ //---------------------------------------------------------------gsv_text
+ //
+ // See Implementation agg_gsv_text.cpp
+ //
+ class gsv_text
+ {
+ enum status
+ {
+ initial,
+ next_char,
+ start_glyph,
+ glyph
+ };
+
+ public:
+ ~gsv_text();
+ gsv_text();
+
+ void font(const void* font);
+ void flip(bool flip_y) { m_flip = flip_y; }
+ void load_font(const char* file);
+ void size(double height, double width=0.0);
+ void space(double space);
+ void line_space(double line_space);
+ void start_point(double x, double y);
+ void text(const char* text);
+
+ void rewind(unsigned id);
+ unsigned vertex(double* x, double* y);
+
+ private:
+ // not supposed to be copied
+ gsv_text(const gsv_text&);
+ const gsv_text& operator = (const gsv_text&);
+
+ int16u value(const int8u* p) const
+ {
+ int16u v;
+ if(m_big_endian)
+ {
+ *(int8u*)&v = p[1];
+ *((int8u*)&v + 1) = p[0];
+ }
+ else
+ {
+ *(int8u*)&v = p[0];
+ *((int8u*)&v + 1) = p[1];
+ }
+ return v;
+ }
+
+ private:
+ double m_x;
+ double m_y;
+ double m_start_x;
+ double m_width;
+ double m_height;
+ double m_space;
+ double m_line_space;
+ char m_chr[2];
+ char* m_text;
+ char* m_text_buf;
+ unsigned m_buf_size;
+ char* m_cur_chr;
+ const void* m_font;
+ char* m_loaded_font;
+ status m_status;
+ bool m_big_endian;
+ bool m_flip;
+
+ int8u* m_indices;
+ int8* m_glyphs;
+ int8* m_bglyph;
+ int8* m_eglyph;
+ double m_w;
+ double m_h;
+ };
+
+
+
+
+ //--------------------------------------------------------gsv_text_outline
+ template<class Transformer = trans_affine> class gsv_text_outline
+ {
+ public:
+ gsv_text_outline(gsv_text& text, const Transformer& trans) :
+ m_polyline(text),
+ m_trans(m_polyline, trans)
+ {
+ }
+
+ void width(double w)
+ {
+ m_polyline.width(w);
+ }
+
+ void transformer(const Transformer* trans)
+ {
+ m_trans->transformer(trans);
+ }
+
+ void rewind(unsigned id)
+ {
+ m_trans.rewind(id);
+ m_polyline.line_join(round_join);
+ m_polyline.line_cap(round_cap);
+ }
+
+ unsigned vertex(double* x, double* y)
+ {
+ return m_trans.vertex(x, y);
+ }
+
+ private:
+ conv_stroke<gsv_text> m_polyline;
+ conv_transform<conv_stroke<gsv_text>, Transformer> m_trans;
+ };
+
+
+
+}
+
+
+#endif
diff --git a/agg/inc/agg_image_filters.h b/agg/inc/agg_image_filters.h
new file mode 100755
index 000000000000..a2037fe0eff1
--- /dev/null
+++ b/agg/inc/agg_image_filters.h
@@ -0,0 +1,449 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// Image transformation filters,
+// Filtering classes (image_filter_lut, image_filter),
+// Basic filter shape classes
+//----------------------------------------------------------------------------
+#ifndef AGG_IMAGE_FILTERS_INCLUDED
+#define AGG_IMAGE_FILTERS_INCLUDED
+
+#include <math.h>
+#include "agg_basics.h"
+
+namespace agg
+{
+
+ // See Implementation agg_image_filters.cpp
+
+ enum
+ {
+ image_filter_shift = 14, //----image_filter_shift
+ image_filter_size = 1 << image_filter_shift, //----image_filter_size
+ image_filter_mask = image_filter_size - 1, //----image_filter_mask
+
+ image_subpixel_shift = 8, //----image_subpixel_shift
+ image_subpixel_size = 1 << image_subpixel_shift, //----image_subpixel_size
+ image_subpixel_mask = image_subpixel_size - 1 //----image_subpixel_mask
+ };
+
+
+ //-----------------------------------------------------image_filter_lut
+ class image_filter_lut
+ {
+ public:
+ ~image_filter_lut();
+ image_filter_lut();
+
+ template<class FilterF> void calculate(const FilterF& filter,
+ bool normalization=true)
+ {
+ double r = filter.radius();
+ realloc(r);
+ unsigned i;
+ unsigned pivot = diameter() << (image_subpixel_shift - 1);
+ for(i = 0; i < pivot; i++)
+ {
+ double x = double(i) / double(image_subpixel_size);
+ double y = filter.calc_weight(x);
+ m_weight_array[pivot + i] =
+ m_weight_array[pivot - i] = int16(y * image_filter_size + 0.5);
+ }
+ unsigned end = (diameter() << image_subpixel_shift) - 1;
+ m_weight_array[0] = m_weight_array[end];
+ if(normalization)
+ {
+ normalize();
+ }
+ }
+
+ template<class FilterF> image_filter_lut(const FilterF& filter,
+ bool normalization=true) :
+ m_weight_array(0),
+ m_max_size(0)
+ {
+ calculate(filter, normalization);
+ }
+
+ double radius() const { return m_radius; }
+ unsigned diameter() const { return m_diameter; }
+ int start() const { return m_start; }
+ const int16* weight_array() const { return m_weight_array; }
+ void normalize();
+
+ private:
+ void realloc(double radius);
+ image_filter_lut(const image_filter_lut&);
+ const image_filter_lut& operator = (const image_filter_lut&);
+
+ double m_radius;
+ unsigned m_diameter;
+ int m_start;
+ int16* m_weight_array;
+ unsigned m_max_size;
+ };
+
+
+
+ //--------------------------------------------------------image_filter
+ template<class FilterF> class image_filter : public image_filter_lut
+ {
+ public:
+ image_filter()
+ {
+ calculate(m_filter_function);
+ }
+ private:
+ FilterF m_filter_function;
+ };
+
+
+ //-----------------------------------------------image_filter_bilinear
+ struct image_filter_bilinear
+ {
+ static double radius() { return 1.0; }
+ static double calc_weight(double x)
+ {
+ return 1.0 - x;
+ }
+ };
+
+
+ //-----------------------------------------------image_filter_hanning
+ struct image_filter_hanning
+ {
+ static double radius() { return 1.0; }
+ static double calc_weight(double x)
+ {
+ return 0.5 + 0.5 * cos(pi * x);
+ }
+ };
+
+
+ //-----------------------------------------------image_filter_hamming
+ struct image_filter_hamming
+ {
+ static double radius() { return 1.0; }
+ static double calc_weight(double x)
+ {
+ return 0.54 + 0.46 * cos(pi * x);
+ }
+ };
+
+ //-----------------------------------------------image_filter_hermite
+ struct image_filter_hermite
+ {
+ static double radius() { return 1.0; }
+ static double calc_weight(double x)
+ {
+ return (2.0 * x - 3.0) * x * x + 1.0;
+ }
+ };
+
+ //------------------------------------------------image_filter_quadric
+ struct image_filter_quadric
+ {
+ static double radius() { return 1.5; }
+ static double calc_weight(double x)
+ {
+ double t;
+ if(x < 0.5) return 0.75 - x * x;
+ if(x < 1.5) {t = x - 1.5; return 0.5 * t * t;}
+ return 0.0;
+ }
+ };
+
+ //------------------------------------------------image_filter_bicubic
+ class image_filter_bicubic
+ {
+ static double pow3(double x)
+ {
+ return (x <= 0.0) ? 0.0 : x * x * x;
+ }
+
+ public:
+ static double radius() { return 2.0; }
+ static double calc_weight(double x)
+ {
+ return
+ (1.0/6.0) *
+ (pow3(x + 2) - 4 * pow3(x + 1) + 6 * pow3(x) - 4 * pow3(x - 1));
+ }
+ };
+
+ //-------------------------------------------------image_filter_kaiser
+ class image_filter_kaiser
+ {
+ double a;
+ double i0a;
+ double epsilon;
+
+ public:
+ image_filter_kaiser(double b = 6.33) :
+ a(b), epsilon(1e-12)
+ {
+ i0a = 1.0 / bessel_i0(b);
+ }
+
+ static double radius() { return 1.0; }
+ double calc_weight(double x) const
+ {
+ return bessel_i0(a * sqrt(1. - x * x)) * i0a;
+ }
+
+ private:
+ double bessel_i0(double x) const
+ {
+ int i;
+ double sum, y, t;
+
+ sum = 1.;
+ y = x * x / 4.;
+ t = y;
+
+ for(i = 2; t > epsilon; i++)
+ {
+ sum += t;
+ t *= (double)y / (i * i);
+ }
+ return sum;
+ }
+ };
+
+ //----------------------------------------------image_filter_catrom
+ struct image_filter_catrom
+ {
+ static double radius() { return 2.0; }
+ static double calc_weight(double x)
+ {
+ if(x < 1.0) return 0.5 * (2.0 + x * x * (-5.0 + x * 3.0));
+ if(x < 2.0) return 0.5 * (4.0 + x * (-8.0 + x * (5.0 - x)));
+ return 0.;
+ }
+ };
+
+ //---------------------------------------------image_filter_mitchell
+ class image_filter_mitchell
+ {
+ double p0, p2, p3;
+ double q0, q1, q2, q3;
+
+ public:
+ image_filter_mitchell(double b = 1.0/3.0, double c = 1.0/3.0) :
+ p0((6.0 - 2.0 * b) / 6.0),
+ p2((-18.0 + 12.0 * b + 6.0 * c) / 6.0),
+ p3((12.0 - 9.0 * b - 6.0 * c) / 6.0),
+ q0((8.0 * b + 24.0 * c) / 6.0),
+ q1((-12.0 * b - 48.0 * c) / 6.0),
+ q2((6.0 * b + 30.0 * c) / 6.0),
+ q3((-b - 6.0 * c) / 6.0)
+ {}
+
+ static double radius() { return 2.0; }
+ double calc_weight(double x) const
+ {
+ if(x < 1.0) return p0 + x * x * (p2 + x * p3);
+ if(x < 2.0) return q0 + x * (q1 + x * (q2 + x * q3));
+ return 0.0;
+ }
+ };
+
+
+ //----------------------------------------------image_filter_spline16
+ struct image_filter_spline16
+ {
+ static double radius() { return 2.0; }
+ static double calc_weight(double x)
+ {
+ if(x < 1.0)
+ {
+ return ((x - 9.0/5.0 ) * x - 1.0/5.0 ) * x + 1.0;
+ }
+ return ((-1.0/3.0 * (x-1) + 4.0/5.0) * (x-1) - 7.0/15.0 ) * (x-1);
+ }
+ };
+
+
+ //---------------------------------------------image_filter_spline36
+ struct image_filter_spline36
+ {
+ static double radius() { return 3.0; }
+ static double calc_weight(double x)
+ {
+ if(x < 1.0)
+ {
+ return ((13.0/11.0 * x - 453.0/209.0) * x - 3.0/209.0) * x + 1.0;
+ }
+ if(x < 2.0)
+ {
+ return ((-6.0/11.0 * (x-1) + 270.0/209.0) * (x-1) - 156.0/ 209.0) * (x-1);
+ }
+ return ((1.0/11.0 * (x-2) - 45.0/209.0) * (x-2) + 26.0/209.0) * (x-2);
+ }
+ };
+
+
+ //----------------------------------------------image_filter_gaussian
+ struct image_filter_gaussian
+ {
+ static double radius() { return 2.0; }
+ static double calc_weight(double x)
+ {
+ return exp(-2.0 * x * x) * sqrt(2.0 / pi);
+ }
+ };
+
+
+ //------------------------------------------------image_filter_bessel
+ struct image_filter_bessel
+ {
+ static double radius() { return 3.2383; }
+ static double calc_weight(double x)
+ {
+ return (x == 0.0) ? pi / 4.0 : j1(pi * x) / (2.0 * x);
+ }
+ };
+
+
+ //-------------------------------------------------image_filter_sinc
+ class image_filter_sinc
+ {
+ public:
+ image_filter_sinc(double r) : m_radius(r < 2.0 ? 2.0 : r) {}
+ double radius() const { return m_radius; }
+ double calc_weight(double x) const
+ {
+ if(x == 0.0) return 1.0;
+ x *= pi;
+ return sin(x) / x;
+ }
+ private:
+ double m_radius;
+ };
+
+
+ //-----------------------------------------------image_filter_lanczos
+ class image_filter_lanczos
+ {
+ public:
+ image_filter_lanczos(double r) : m_radius(r < 2.0 ? 2.0 : r) {}
+ double radius() const { return m_radius; }
+ double calc_weight(double x) const
+ {
+ if(x == 0.0) return 1.0;
+ if(x > m_radius) return 0.0;
+ x *= pi;
+ double xr = x / m_radius;
+ return (sin(x) / x) * (sin(xr) / xr);
+ }
+ private:
+ double m_radius;
+ };
+
+
+ //----------------------------------------------image_filter_blackman
+ class image_filter_blackman
+ {
+ public:
+ image_filter_blackman(double r) : m_radius(r < 2.0 ? 2.0 : r) {}
+ double radius() const { return m_radius; }
+ double calc_weight(double x) const
+ {
+ if(x == 0.0) return 1.0;
+ if(x > m_radius) return 0.0;
+ x *= pi;
+ double xr = x / m_radius;
+ return (sin(x) / x) * (0.42 + 0.5*cos(xr) + 0.08*cos(2*xr));
+ }
+ private:
+ double m_radius;
+ };
+
+ //------------------------------------------------image_filter_sinc36
+ class image_filter_sinc36 : public image_filter_sinc
+ { public: image_filter_sinc36() : image_filter_sinc(3.0){} };
+
+ //------------------------------------------------image_filter_sinc64
+ class image_filter_sinc64 : public image_filter_sinc
+ { public: image_filter_sinc64() : image_filter_sinc(4.0){} };
+
+ //-----------------------------------------------image_filter_sinc100
+ class image_filter_sinc100 : public image_filter_sinc
+ { public: image_filter_sinc100() : image_filter_sinc(5.0){} };
+
+ //-----------------------------------------------image_filter_sinc144
+ class image_filter_sinc144 : public image_filter_sinc
+ { public: image_filter_sinc144() : image_filter_sinc(6.0){} };
+
+ //-----------------------------------------------image_filter_sinc196
+ class image_filter_sinc196 : public image_filter_sinc
+ { public: image_filter_sinc196() : image_filter_sinc(7.0){} };
+
+ //-----------------------------------------------image_filter_sinc256
+ class image_filter_sinc256 : public image_filter_sinc
+ { public: image_filter_sinc256() : image_filter_sinc(8.0){} };
+
+ //---------------------------------------------image_filter_lanczos36
+ class image_filter_lanczos36 : public image_filter_lanczos
+ { public: image_filter_lanczos36() : image_filter_lanczos(3.0){} };
+
+ //---------------------------------------------image_filter_lanczos64
+ class image_filter_lanczos64 : public image_filter_lanczos
+ { public: image_filter_lanczos64() : image_filter_lanczos(4.0){} };
+
+ //--------------------------------------------image_filter_lanczos100
+ class image_filter_lanczos100 : public image_filter_lanczos
+ { public: image_filter_lanczos100() : image_filter_lanczos(5.0){} };
+
+ //--------------------------------------------image_filter_lanczos144
+ class image_filter_lanczos144 : public image_filter_lanczos
+ { public: image_filter_lanczos144() : image_filter_lanczos(6.0){} };
+
+ //--------------------------------------------image_filter_lanczos196
+ class image_filter_lanczos196 : public image_filter_lanczos
+ { public: image_filter_lanczos196() : image_filter_lanczos(7.0){} };
+
+ //--------------------------------------------image_filter_lanczos256
+ class image_filter_lanczos256 : public image_filter_lanczos
+ { public: image_filter_lanczos256() : image_filter_lanczos(8.0){} };
+
+ //--------------------------------------------image_filter_blackman36
+ class image_filter_blackman36 : public image_filter_blackman
+ { public: image_filter_blackman36() : image_filter_blackman(3.0){} };
+
+ //--------------------------------------------image_filter_blackman64
+ class image_filter_blackman64 : public image_filter_blackman
+ { public: image_filter_blackman64() : image_filter_blackman(4.0){} };
+
+ //-------------------------------------------image_filter_blackman100
+ class image_filter_blackman100 : public image_filter_blackman
+ { public: image_filter_blackman100() : image_filter_blackman(5.0){} };
+
+ //-------------------------------------------image_filter_blackman144
+ class image_filter_blackman144 : public image_filter_blackman
+ { public: image_filter_blackman144() : image_filter_blackman(6.0){} };
+
+ //-------------------------------------------image_filter_blackman196
+ class image_filter_blackman196 : public image_filter_blackman
+ { public: image_filter_blackman196() : image_filter_blackman(7.0){} };
+
+ //-------------------------------------------image_filter_blackman256
+ class image_filter_blackman256 : public image_filter_blackman
+ { public: image_filter_blackman256() : image_filter_blackman(8.0){} };
+
+
+}
+
+#endif
diff --git a/agg/inc/agg_line_aa_basics.h b/agg/inc/agg_line_aa_basics.h
new file mode 100755
index 000000000000..ab8e94715019
--- /dev/null
+++ b/agg/inc/agg_line_aa_basics.h
@@ -0,0 +1,152 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+#ifndef AGG_LINE_AA_BASICS_INCLUDED
+#define AGG_LINE_AA_BASICS_INCLUDED
+
+#include <stdlib.h>
+#include "agg_basics.h"
+
+namespace agg
+{
+
+ // See Implementation agg_line_aa_basics.cpp
+
+ //-------------------------------------------------------------------------
+ enum
+ {
+ line_subpixel_shift = 8, //----line_subpixel_shift
+ line_subpixel_size = 1 << line_subpixel_shift, //----line_subpixel_size
+ line_subpixel_mask = line_subpixel_size - 1 //----line_subpixel_mask
+ };
+
+ //-------------------------------------------------------------------------
+ enum
+ {
+ line_mr_subpixel_shift = 4, //----line_mr_subpixel_shift
+ line_mr_subpixel_size = 1 << line_mr_subpixel_shift, //----line_mr_subpixel_size
+ line_mr_subpixel_mask = line_mr_subpixel_size - 1 //----line_mr_subpixel_mask
+ };
+
+ //------------------------------------------------------------------line_mr
+ inline int line_mr(int x)
+ {
+ return x >> ((int)line_subpixel_shift - (int)line_mr_subpixel_shift);
+ }
+
+ //-------------------------------------------------------------------line_hr
+ inline int line_hr(int x)
+ {
+ return x << ((int)line_subpixel_shift - (int)line_mr_subpixel_shift);
+ }
+
+ //---------------------------------------------------------------line_dbl_hr
+ inline int line_dbl_hr(int x)
+ {
+ return x << line_subpixel_shift;
+ }
+
+ //---------------------------------------------------------------line_coord
+ inline int line_coord(double x)
+ {
+ return int(x * line_subpixel_size);
+ }
+
+ //==========================================================line_parameters
+ struct line_parameters
+ {
+ //---------------------------------------------------------------------
+ line_parameters() {}
+ line_parameters(int x1_, int y1_, int x2_, int y2_, int len_) :
+ x1(x1_), y1(y1_), x2(x2_), y2(y2_),
+ dx(abs(x2_ - x1_)),
+ dy(abs(y2_ - y1_)),
+ sx((x2_ > x1_) ? 1 : -1),
+ sy((y2_ > y1_) ? 1 : -1),
+ vertical(dy >= dx),
+ inc(vertical ? sy : sx),
+ len(len_),
+ octant((sy & 4) | (sx & 2) | int(vertical))
+ {
+ }
+
+ //---------------------------------------------------------------------
+ unsigned orthogonal_quadrant() const { return s_orthogonal_quadrant[octant]; }
+ unsigned diagonal_quadrant() const { return s_diagonal_quadrant[octant]; }
+
+ //---------------------------------------------------------------------
+ bool same_orthogonal_quadrant(const line_parameters& lp) const
+ {
+ return s_orthogonal_quadrant[octant] == s_orthogonal_quadrant[lp.octant];
+ }
+
+ //---------------------------------------------------------------------
+ bool same_diagonal_quadrant(const line_parameters& lp) const
+ {
+ return s_diagonal_quadrant[octant] == s_diagonal_quadrant[lp.octant];
+ }
+
+ //---------------------------------------------------------------------
+ int x1, y1, x2, y2, dx, dy, sx, sy;
+ bool vertical;
+ int inc;
+ int len;
+ int octant;
+
+ //---------------------------------------------------------------------
+ static int8u s_orthogonal_quadrant[8];
+ static int8u s_diagonal_quadrant[8];
+ };
+
+
+
+ // See Implementation agg_line_aa_basics.cpp
+
+ //----------------------------------------------------------------bisectrix
+ void bisectrix(const line_parameters& l1,
+ const line_parameters& l2,
+ int* x, int* y);
+
+
+ //-------------------------------------------fix_degenerate_bisectrix_start
+ void inline fix_degenerate_bisectrix_start(const line_parameters& lp,
+ int* x, int* y)
+ {
+ int d = int((double(*x - lp.x2) * double(lp.y2 - lp.y1) -
+ double(*y - lp.y2) * double(lp.x2 - lp.x1)) / lp.len);
+ if(d < line_subpixel_size)
+ {
+ *x = lp.x1 + (lp.y2 - lp.y1);
+ *y = lp.y1 - (lp.x2 - lp.x1);
+ }
+ }
+
+
+ //---------------------------------------------fix_degenerate_bisectrix_end
+ void inline fix_degenerate_bisectrix_end(const line_parameters& lp,
+ int* x, int* y)
+ {
+ int d = int((double(*x - lp.x2) * double(lp.y2 - lp.y1) -
+ double(*y - lp.y2) * double(lp.x2 - lp.x1)) / lp.len);
+ if(d < line_subpixel_size)
+ {
+ *x = lp.x2 + (lp.y2 - lp.y1);
+ *y = lp.y2 - (lp.x2 - lp.x1);
+ }
+ }
+
+
+}
+
+#endif
diff --git a/agg/inc/agg_math.h b/agg/inc/agg_math.h
new file mode 100755
index 000000000000..4aef4df9638e
--- /dev/null
+++ b/agg/inc/agg_math.h
@@ -0,0 +1,247 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+
+#ifndef AGG_MATH_INCLUDED
+#define AGG_MATH_INCLUDED
+
+#include <math.h>
+#include "agg_basics.h"
+
+namespace agg
+{
+
+ const double intersection_epsilon = 1.0e-8;
+
+ //------------------------------------------------------calc_point_location
+ AGG_INLINE double calc_point_location(double x1, double y1,
+ double x2, double y2,
+ double x, double y)
+ {
+ return (x - x2) * (y2 - y1) - (y - y2) * (x2 - x1);
+ }
+
+
+ //--------------------------------------------------------point_in_triangle
+ AGG_INLINE bool point_in_triangle(double x1, double y1,
+ double x2, double y2,
+ double x3, double y3,
+ double x, double y)
+ {
+ bool cp1 = calc_point_location(x1, y1, x2, y2, x, y) < 0.0;
+ bool cp2 = calc_point_location(x2, y2, x3, y3, x, y) < 0.0;
+ bool cp3 = calc_point_location(x3, y3, x1, y1, x, y) < 0.0;
+ return cp1 == cp2 && cp2 == cp3 && cp3 == cp1;
+ }
+
+
+ //-----------------------------------------------------------calc_distance
+ AGG_INLINE double calc_distance(double x1, double y1, double x2, double y2)
+ {
+ double dx = x2-x1;
+ double dy = y2-y1;
+ return sqrt(dx * dx + dy * dy);
+ }
+
+
+ //------------------------------------------------calc_point_line_distance
+ AGG_INLINE double calc_point_line_distance(double x1, double y1,
+ double x2, double y2,
+ double x, double y)
+ {
+ double dx = x2-x1;
+ double dy = y2-y1;
+ return ((x - x2) * dy - (y - y2) * dx) / sqrt(dx * dx + dy * dy);
+ }
+
+
+ //-------------------------------------------------------calc_intersection
+ AGG_INLINE bool calc_intersection(double ax, double ay, double bx, double by,
+ double cx, double cy, double dx, double dy,
+ double* x, double* y)
+ {
+ double num = (ay-cy) * (dx-cx) - (ax-cx) * (dy-cy);
+ double den = (bx-ax) * (dy-cy) - (by-ay) * (dx-cx);
+ if(fabs(den) < intersection_epsilon) return false;
+ double r = num / den;
+ *x = ax + r * (bx-ax);
+ *y = ay + r * (by-ay);
+ return true;
+ }
+
+
+ //--------------------------------------------------------calc_orthogonal
+ AGG_INLINE void calc_orthogonal(double thickness,
+ double x1, double y1,
+ double x2, double y2,
+ double* x, double* y)
+ {
+ double dx = x2 - x1;
+ double dy = y2 - y1;
+ double d = sqrt(dx*dx + dy*dy);
+ *x = thickness * dy / d;
+ *y = thickness * dx / d;
+ }
+
+
+ //--------------------------------------------------------dilate_triangle
+ AGG_INLINE void dilate_triangle(double x1, double y1,
+ double x2, double y2,
+ double x3, double y3,
+ double *x, double* y,
+ double d)
+ {
+ double dx1=0.0;
+ double dy1=0.0;
+ double dx2=0.0;
+ double dy2=0.0;
+ double dx3=0.0;
+ double dy3=0.0;
+ double loc = calc_point_location(x1, y1, x2, y2, x3, y3);
+ if(fabs(loc) > intersection_epsilon)
+ {
+ if(calc_point_location(x1, y1, x2, y2, x3, y3) > 0.0)
+ {
+ d = -d;
+ }
+ calc_orthogonal(d, x1, y1, x2, y2, &dx1, &dy1);
+ calc_orthogonal(d, x2, y2, x3, y3, &dx2, &dy2);
+ calc_orthogonal(d, x3, y3, x1, y1, &dx3, &dy3);
+ }
+ *x++ = x1 + dx1; *y++ = y1 - dy1;
+ *x++ = x2 + dx1; *y++ = y2 - dy1;
+ *x++ = x2 + dx2; *y++ = y2 - dy2;
+ *x++ = x3 + dx2; *y++ = y3 - dy2;
+ *x++ = x3 + dx3; *y++ = y3 - dy3;
+ *x++ = x1 + dx3; *y++ = y1 - dy3;
+ }
+
+ //-------------------------------------------------------calc_polygon_area
+ template<class Storage> double calc_polygon_area(const Storage& st)
+ {
+ unsigned i;
+ double sum = 0.0;
+ double x = st[0].x;
+ double y = st[0].y;
+ double xs = x;
+ double ys = y;
+
+ for(i = 1; i < st.size(); i++)
+ {
+ const typename Storage::value_type& v = st[i];
+ sum += x * v.y - y * v.x;
+ x = v.x;
+ y = v.y;
+ }
+ return (sum + x * ys - y * xs) * 0.5;
+ }
+
+ //------------------------------------------------------------------------
+ // Tables for fast sqrt
+ extern int16u g_sqrt_table[1024];
+ extern int8 g_elder_bit_table[256];
+
+
+ //---------------------------------------------------------------fast_sqrt
+ //Fast integer Sqrt - really fast: no cycles, divisions or multiplications
+ #if defined(_MSC_VER)
+ #pragma warning(push)
+ #pragma warning(disable : 4035) //Disable warning "no return value"
+ #endif
+ AGG_INLINE unsigned fast_sqrt(unsigned val)
+ {
+ #if defined(_M_IX86) && defined(_MSC_VER) && !defined(AGG_NO_ASM)
+ //For Ix86 family processors this assembler code is used.
+ //The key command here is bsr - determination the number of the most
+ //significant bit of the value. For other processors
+ //(and maybe compilers) the pure C "#else" section is used.
+ __asm
+ {
+ mov ebx, val
+ mov edx, 11
+ bsr ecx, ebx
+ sub ecx, 9
+ jle less_than_9_bits
+ shr ecx, 1
+ adc ecx, 0
+ sub edx, ecx
+ shl ecx, 1
+ shr ebx, cl
+ less_than_9_bits:
+ xor eax, eax
+ mov ax, g_sqrt_table[ebx*2]
+ mov ecx, edx
+ shr eax, cl
+ }
+ #else
+
+ //This code is actually pure C and portable to most
+ //arcitectures including 64bit ones.
+ unsigned t = val;
+ int bit=0;
+ unsigned shift = 11;
+
+ //The following piece of code is just an emulation of the
+ //Ix86 assembler command "bsr" (see above). However on old
+ //Intels (like Intel MMX 233MHz) this code is about twice
+ //faster (sic!) then just one "bsr". On PIII and PIV the
+ //bsr is optimized quite well.
+ bit = t >> 24;
+ if(bit)
+ {
+ bit = g_elder_bit_table[bit] + 24;
+ }
+ else
+ {
+ bit = (t >> 16) & 0xFF;
+ if(bit)
+ {
+ bit = g_elder_bit_table[bit] + 16;
+ }
+ else
+ {
+ bit = (t >> 8) & 0xFF;
+ if(bit)
+ {
+ bit = g_elder_bit_table[bit] + 8;
+ }
+ else
+ {
+ bit = g_elder_bit_table[t];
+ }
+ }
+ }
+
+ //This is calculation sqrt itself.
+ bit -= 9;
+ if(bit > 0)
+ {
+ bit = (bit >> 1) + (bit & 1);
+ shift -= bit;
+ val >>= (bit << 1);
+ }
+ return g_sqrt_table[val] >> shift;
+ #endif
+ }
+ #if defined(_MSC_VER)
+ #pragma warning(pop)
+ #endif
+
+
+
+
+}
+
+
+#endif
diff --git a/agg/inc/agg_math_stroke.h b/agg/inc/agg_math_stroke.h
new file mode 100755
index 000000000000..84d83738a9cd
--- /dev/null
+++ b/agg/inc/agg_math_stroke.h
@@ -0,0 +1,340 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// Stroke math
+//
+//----------------------------------------------------------------------------
+
+#ifndef AGG_STROKE_MATH_INCLUDED
+#define AGG_STROKE_MATH_INCLUDED
+
+#include "agg_math.h"
+#include "agg_vertex_sequence.h"
+
+namespace agg
+{
+ //-------------------------------------------------------------line_cap_e
+ enum line_cap_e
+ {
+ butt_cap,
+ square_cap,
+ round_cap
+ };
+
+ //------------------------------------------------------------line_join_e
+ enum line_join_e
+ {
+ miter_join,
+ miter_join_revert,
+ round_join,
+ bevel_join
+ };
+
+ // Minimal angle to calculate round joins, less than 0.1 degree.
+ const double stroke_theta = 0.001; //----stroke_theta
+
+
+ //--------------------------------------------------------stroke_calc_arc
+ template<class VertexConsumer>
+ void stroke_calc_arc(VertexConsumer& out_vertices,
+ double x, double y,
+ double dx1, double dy1,
+ double dx2, double dy2,
+ double width,
+ double approximation_scale)
+ {
+ typedef typename VertexConsumer::value_type coord_type;
+
+ //// Check if we actually need the arc (this optimization works bad)
+ ////-----------------
+ //double dd = calc_distance(dx1, dy1, dx2, dy2);
+ //if(dd < 1.0/approximation_scale)
+ //{
+ // out_vertices.add(coord_type(x + dx1, y + dy1));
+ // if(dd > 0.25/approximation_scale)
+ // {
+ // out_vertices.add(coord_type(x + dx2, y + dy2));
+ // }
+ // return;
+ //}
+
+ double a1 = atan2(dy1, dx1);
+ double a2 = atan2(dy2, dx2);
+ double da = a1 - a2;
+
+ if(fabs(da) < stroke_theta)
+ {
+ out_vertices.add(coord_type((x + x + dx1 + dx2) * 0.5,
+ (y + y + dy1 + dy2) * 0.5));
+ return;
+ }
+
+ bool ccw = da > 0.0 && da < pi;
+
+ if(width < 0) width = -width;
+ da = fabs(1.0 / (width * approximation_scale));
+ if(!ccw)
+ {
+ if(a1 > a2) a2 += 2 * pi;
+ while(a1 < a2)
+ {
+ out_vertices.add(coord_type(x + cos(a1) * width, y + sin(a1) * width));
+ a1 += da;
+ }
+ }
+ else
+ {
+ if(a1 < a2) a2 -= 2 * pi;
+ while(a1 > a2)
+ {
+ out_vertices.add(coord_type(x + cos(a1) * width, y + sin(a1) * width));
+ a1 -= da;
+ }
+ }
+ out_vertices.add(coord_type(x + dx2, y + dy2));
+ }
+
+
+
+ //-------------------------------------------------------stroke_calc_miter
+ template<class VertexConsumer>
+ void stroke_calc_miter(VertexConsumer& out_vertices,
+ const vertex_dist& v0,
+ const vertex_dist& v1,
+ const vertex_dist& v2,
+ double dx1, double dy1,
+ double dx2, double dy2,
+ double width,
+ bool revert_flag,
+ double miter_limit)
+ {
+ typedef typename VertexConsumer::value_type coord_type;
+
+ double xi = v1.x;
+ double yi = v1.y;
+
+ if(!calc_intersection(v0.x + dx1, v0.y - dy1,
+ v1.x + dx1, v1.y - dy1,
+ v1.x + dx2, v1.y - dy2,
+ v2.x + dx2, v2.y - dy2,
+ &xi, &yi))
+ {
+ // The calculation didn't succeed, most probaly
+ // the three points lie one straight line
+ //----------------
+ if(calc_distance(dx1, -dy1, dx2, -dy2) < width * 0.025)
+ {
+ // This case means that the next segment continues
+ // the previous one (straight line)
+ //-----------------
+ out_vertices.add(coord_type(v1.x + dx1, v1.y - dy1));
+ }
+ else
+ {
+ // This case means that the next segment goes back
+ //-----------------
+ if(revert_flag)
+ {
+ out_vertices.add(coord_type(v1.x + dx1, v1.y - dy1));
+ out_vertices.add(coord_type(v1.x + dx2, v1.y - dy2));
+ }
+ else
+ {
+ // If no miter-revert, calcuate new dx1, dy1, dx2, dy2
+ out_vertices.add(coord_type(v1.x + dx1 + dy1 * miter_limit,
+ v1.y - dy1 + dx1 * miter_limit));
+ out_vertices.add(coord_type(v1.x + dx2 - dy2 * miter_limit,
+ v1.y - dy2 - dx2 * miter_limit));
+ }
+ }
+ }
+ else
+ {
+ double d1 = calc_distance(v1.x, v1.y, xi, yi);
+ double lim = width * miter_limit;
+ if(d1 > lim)
+ {
+ // Miter limit exceeded
+ //------------------------
+ if(revert_flag)
+ {
+ // For the compatibility with SVG, PDF, etc,
+ // we use a simple bevel join instead of
+ // "smart" bevel
+ //-------------------
+ out_vertices.add(coord_type(v1.x + dx1, v1.y - dy1));
+ out_vertices.add(coord_type(v1.x + dx2, v1.y - dy2));
+ }
+ else
+ {
+ // Smart bevel that cuts the miter at the limit point
+ //-------------------
+ d1 = lim / d1;
+ double x1 = v1.x + dx1;
+ double y1 = v1.y - dy1;
+ double x2 = v1.x + dx2;
+ double y2 = v1.y - dy2;
+
+ x1 += (xi - x1) * d1;
+ y1 += (yi - y1) * d1;
+ x2 += (xi - x2) * d1;
+ y2 += (yi - y2) * d1;
+ out_vertices.add(coord_type(x1, y1));
+ out_vertices.add(coord_type(x2, y2));
+ }
+ }
+ else
+ {
+ // Inside the miter limit
+ //---------------------
+ out_vertices.add(coord_type(xi, yi));
+ }
+ }
+ }
+
+
+
+
+
+
+ //--------------------------------------------------------stroke_calc_cap
+ template<class VertexConsumer>
+ void stroke_calc_cap(VertexConsumer& out_vertices,
+ const vertex_dist& v0,
+ const vertex_dist& v1,
+ double len,
+ line_cap_e line_cap,
+ double width,
+ double approximation_scale)
+ {
+ typedef typename VertexConsumer::value_type coord_type;
+
+ out_vertices.remove_all();
+
+ double dx1 = width * (v1.y - v0.y) / len;
+ double dy1 = width * (v1.x - v0.x) / len;
+ double dx2 = 0;
+ double dy2 = 0;
+
+ if(line_cap == square_cap)
+ {
+ dx2 = dy1;
+ dy2 = dx1;
+ }
+
+ if(line_cap == round_cap)
+ {
+ double a1 = atan2(dy1, -dx1);
+ double a2 = a1 + pi;
+ double da = fabs(1.0 / (width * approximation_scale));
+ while(a1 < a2)
+ {
+ out_vertices.add(coord_type(v0.x + cos(a1) * width,
+ v0.y + sin(a1) * width));
+ a1 += da;
+ }
+ out_vertices.add(coord_type(v0.x + dx1, v0.y - dy1));
+ }
+ else
+ {
+ out_vertices.add(coord_type(v0.x - dx1 - dx2, v0.y + dy1 - dy2));
+ out_vertices.add(coord_type(v0.x + dx1 - dx2, v0.y - dy1 - dy2));
+ }
+ }
+
+
+
+ //-------------------------------------------------------stroke_calc_join
+ template<class VertexConsumer>
+ void stroke_calc_join(VertexConsumer& out_vertices,
+ const vertex_dist& v0,
+ const vertex_dist& v1,
+ const vertex_dist& v2,
+ double len1,
+ double len2,
+ double width,
+ line_join_e line_join,
+ line_join_e inner_line_join,
+ double miter_limit,
+ double inner_miter_limit,
+ double approximation_scale)
+ {
+ typedef typename VertexConsumer::value_type coord_type;
+
+ double dx1, dy1, dx2, dy2;
+
+ dx1 = width * (v1.y - v0.y) / len1;
+ dy1 = width * (v1.x - v0.x) / len1;
+
+ dx2 = width * (v2.y - v1.y) / len2;
+ dy2 = width * (v2.x - v1.x) / len2;
+
+ out_vertices.remove_all();
+
+ if(calc_point_location(v0.x, v0.y, v1.x, v1.y, v2.x, v2.y) > 0.0)
+ {
+ // Inner join
+ //---------------
+ stroke_calc_miter(out_vertices,
+ v0, v1, v2, dx1, dy1, dx2, dy2,
+ width,
+ inner_line_join == miter_join_revert,
+ inner_miter_limit);
+ }
+ else
+ {
+ // Outer join
+ //---------------
+ switch(line_join)
+ {
+ case miter_join:
+ stroke_calc_miter(out_vertices,
+ v0, v1, v2, dx1, dy1, dx2, dy2,
+ width,
+ false,
+ miter_limit);
+ break;
+
+ case miter_join_revert:
+ stroke_calc_miter(out_vertices,
+ v0, v1, v2, dx1, dy1, dx2, dy2,
+ width,
+ true,
+ miter_limit);
+ break;
+
+ case round_join:
+ stroke_calc_arc(out_vertices,
+ v1.x, v1.y, dx1, -dy1, dx2, -dy2,
+ width, approximation_scale);
+ break;
+
+ default: // Bevel join
+ out_vertices.add(coord_type(v1.x + dx1, v1.y - dy1));
+ if(calc_distance(dx1, dy1, dx2, dy2) > approximation_scale * 0.25)
+ {
+ out_vertices.add(coord_type(v1.x + dx2, v1.y - dy2));
+ }
+ break;
+ }
+ }
+ }
+
+
+
+
+}
+
+#endif
diff --git a/agg/inc/agg_path_storage.h b/agg/inc/agg_path_storage.h
new file mode 100755
index 000000000000..8cdb9b9bbeb6
--- /dev/null
+++ b/agg/inc/agg_path_storage.h
@@ -0,0 +1,364 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+
+#ifndef AGG_PATH_STORAGE_INCLUDED
+#define AGG_PATH_STORAGE_INCLUDED
+
+#include "agg_basics.h"
+
+namespace agg
+{
+
+ //------------------------------------------------------------path_storage
+ // A container to store vertices with their flags.
+ // A path consists of a number of contours separated with "move_to"
+ // commands. The path storage can keep and maintain more than one
+ // path.
+ // To navigate to the beginning of a particular path, use rewind(path_id);
+ // Where path_id is what start_new_path() returns. So, when you call
+ // start_new_path() you need to store its return value somewhere else
+ // to navigate to the path afterwards.
+ //
+ // See Implementation: agg_path_storage.cpp
+ // See also: vertex_source concept
+ //------------------------------------------------------------------------
+ class path_storage
+ {
+ // Allocation parameters
+ enum
+ {
+ block_shift = 8,
+ block_size = 1 << block_shift,
+ block_mask = block_size - 1,
+ block_pool = 256
+ };
+
+ public:
+
+ //--------------------------------------------------------------------
+ class const_iterator
+ {
+ void vertex()
+ {
+ if(m_vertex_idx < m_path->total_vertices())
+ {
+ m_vertex.cmd = m_path->vertex(m_vertex_idx, &m_vertex.x, &m_vertex.y);
+ }
+ else
+ {
+ m_vertex.cmd = path_cmd_stop;
+ m_vertex.x = m_vertex.y = 0.0;
+ }
+ }
+
+ public:
+ const_iterator() {}
+ const_iterator(unsigned cmd) { m_vertex.cmd = cmd; }
+ const_iterator(const const_iterator& i) :
+ m_path(i.m_path),
+ m_vertex_idx(i.m_vertex_idx),
+ m_vertex(i.m_vertex)
+ {
+ }
+
+ const_iterator(const path_storage& p, unsigned id) :
+ m_path(&p),
+ m_vertex_idx(id)
+ {
+ vertex();
+ }
+
+ const_iterator& operator++()
+ {
+ ++m_vertex_idx;
+ vertex();
+ return *this;
+ }
+
+ const vertex_type& operator*() const { return m_vertex; }
+ const vertex_type* operator->() const { return &m_vertex; }
+
+ bool operator != (const const_iterator& i)
+ {
+ return m_vertex.cmd != i.m_vertex.cmd;
+ }
+
+ private:
+ const path_storage* m_path;
+ unsigned m_vertex_idx;
+ vertex_type m_vertex;
+ };
+
+ ~path_storage();
+ path_storage();
+ path_storage(const path_storage& ps);
+
+ void remove_all();
+
+ unsigned last_vertex(double* x, double* y) const;
+ unsigned prev_vertex(double* x, double* y) const;
+
+ void rel_to_abs(double* x, double* y) const;
+
+ void move_to(double x, double y);
+ void move_rel(double dx, double dy);
+
+ void line_to(double x, double y);
+ void line_rel(double dx, double dy);
+
+ void arc_to(double rx, double ry,
+ double angle,
+ bool large_arc_flag,
+ bool sweep_flag,
+ double x, double y);
+
+ void arc_rel(double rx, double ry,
+ double angle,
+ bool large_arc_flag,
+ bool sweep_flag,
+ double dx, double dy);
+
+ void curve3(double x_ctrl, double y_ctrl,
+ double x_to, double y_to);
+
+ void curve3_rel(double dx_ctrl, double dy_ctrl,
+ double dx_to, double dy_to);
+
+ void curve3(double x_to, double y_to);
+
+ void curve3_rel(double dx_to, double dy_to);
+
+ void curve4(double x_ctrl1, double y_ctrl1,
+ double x_ctrl2, double y_ctrl2,
+ double x_to, double y_to);
+
+ void curve4_rel(double dx_ctrl1, double dy_ctrl1,
+ double dx_ctrl2, double dy_ctrl2,
+ double dx_to, double dy_to);
+
+ void curve4(double x_ctrl2, double y_ctrl2,
+ double x_to, double y_to);
+
+ void curve4_rel(double x_ctrl2, double y_ctrl2,
+ double x_to, double y_to);
+
+
+ void end_poly(unsigned flags = path_flags_close);
+
+ void close_polygon(unsigned flags = path_flags_none)
+ {
+ end_poly(path_flags_close | flags);
+ }
+
+ void add_poly(const double* vertices, unsigned num,
+ bool solid_path = false,
+ unsigned end_flags = path_flags_none);
+
+ template<class VertexSource>
+ void add_path(VertexSource& vs,
+ unsigned path_id = 0,
+ bool solid_path = true)
+ {
+ double x, y;
+ unsigned cmd;
+ vs.rewind(path_id);
+ while(!is_stop(cmd = vs.vertex(&x, &y)))
+ {
+ if(is_move_to(cmd) && solid_path && m_total_vertices)
+ {
+ cmd = path_cmd_line_to;
+ }
+ add_vertex(x, y, cmd);
+ }
+ }
+
+ unsigned start_new_path();
+
+ void copy_from(const path_storage& ps);
+ const path_storage& operator = (const path_storage& ps)
+ {
+ copy_from(ps);
+ return *this;
+ }
+
+
+ unsigned total_vertices() const { return m_total_vertices; }
+ unsigned vertex(unsigned idx, double* x, double* y) const
+ {
+ unsigned nb = idx >> block_shift;
+ const double* pv = m_coord_blocks[nb] + ((idx & block_mask) << 1);
+ *x = *pv++;
+ *y = *pv;
+ return m_cmd_blocks[nb][idx & block_mask];
+ }
+ unsigned command(unsigned idx) const
+ {
+ return m_cmd_blocks[idx >> block_shift][idx & block_mask];
+ }
+
+ void rewind(unsigned path_id);
+ unsigned vertex(double* x, double* y);
+
+ const_iterator begin(unsigned id) const { return const_iterator(*this, id); }
+ const_iterator begin() const { return const_iterator(*this, 0); }
+ const_iterator end() const { return const_iterator(path_cmd_stop); }
+
+ // Arrange the orientation of all the polygons. After calling this
+ // method all the polygons will have the same orientation
+ // determined by the new_orientation flag, i.e.,
+ // path_flags_cw or path_flags_ccw
+ unsigned arrange_orientations(unsigned path_id, path_flags_e new_orientation);
+ void arrange_orientations_all_paths(path_flags_e new_orientation);
+
+ // Flip all the vertices horizontally or vertically
+ void flip_x(double x1, double x2);
+ void flip_y(double y1, double y2);
+
+ // This function adds a vertex with its flags directly. Since there's no
+ // checking for errors, keeping proper path integrity is the responsibility
+ // of the caller. It can be said the function is "not very public".
+ void add_vertex(double x, double y, unsigned cmd);
+
+ // Allows you to modify vertex coordinates. The caller must know
+ // the index of the vertex.
+ void modify_vertex(unsigned idx, double x, double y)
+ {
+ double* pv = m_coord_blocks[idx >> block_shift] + ((idx & block_mask) << 1);
+ *pv++ = x;
+ *pv = y;
+ }
+
+ // Allows you to modify vertex command. The caller must know
+ // the index of the vertex.
+ void modify_command(unsigned idx, unsigned cmd)
+ {
+ m_cmd_blocks[idx >> block_shift][idx & block_mask] = (unsigned char)cmd;
+ }
+
+
+ private:
+ void allocate_block(unsigned nb);
+ unsigned char* storage_ptrs(double** xy_ptr);
+ unsigned perceive_polygon_orientation(unsigned idx,
+ double xs, double ys,
+ unsigned* orientation);
+ void reverse_polygon(unsigned start, unsigned end);
+
+ private:
+ unsigned m_total_vertices;
+ unsigned m_total_blocks;
+ unsigned m_max_blocks;
+ double** m_coord_blocks;
+ unsigned char** m_cmd_blocks;
+ unsigned m_iterator;
+ };
+
+
+ //------------------------------------------------------------------------
+ inline unsigned path_storage::vertex(double* x, double* y)
+ {
+ if(m_iterator >= m_total_vertices) return path_cmd_stop;
+ return vertex(m_iterator++, x, y);
+ }
+
+ //------------------------------------------------------------------------
+ inline unsigned path_storage::prev_vertex(double* x, double* y) const
+ {
+ if(m_total_vertices > 1)
+ {
+ return vertex(m_total_vertices - 2, x, y);
+ }
+ return path_cmd_stop;
+ }
+
+ //------------------------------------------------------------------------
+ inline unsigned path_storage::last_vertex(double* x, double* y) const
+ {
+ if(m_total_vertices)
+ {
+ return vertex(m_total_vertices - 1, x, y);
+ }
+ return path_cmd_stop;
+ }
+
+ //------------------------------------------------------------------------
+ inline void path_storage::rel_to_abs(double* x, double* y) const
+ {
+ if(m_total_vertices)
+ {
+ double x2;
+ double y2;
+ if(is_vertex(vertex(m_total_vertices - 1, &x2, &y2)))
+ {
+ *x += x2;
+ *y += y2;
+ }
+ }
+ }
+
+ //------------------------------------------------------------------------
+ inline unsigned char* path_storage::storage_ptrs(double** xy_ptr)
+ {
+ unsigned nb = m_total_vertices >> block_shift;
+ if(nb >= m_total_blocks)
+ {
+ allocate_block(nb);
+ }
+ *xy_ptr = m_coord_blocks[nb] + ((m_total_vertices & block_mask) << 1);
+ return m_cmd_blocks[nb] + (m_total_vertices & block_mask);
+ }
+
+
+ //------------------------------------------------------------------------
+ inline void path_storage::add_vertex(double x, double y, unsigned cmd)
+ {
+ double* coord_ptr = 0;
+ unsigned char* cmd_ptr = storage_ptrs(&coord_ptr);
+ *cmd_ptr = (unsigned char)cmd;
+ *coord_ptr++ = x;
+ *coord_ptr = y;
+ m_total_vertices++;
+ }
+
+ //------------------------------------------------------------------------
+ inline void path_storage::move_to(double x, double y)
+ {
+ add_vertex(x, y, path_cmd_move_to);
+ }
+
+ //------------------------------------------------------------------------
+ inline void path_storage::move_rel(double dx, double dy)
+ {
+ rel_to_abs(&dx, &dy);
+ add_vertex(dx, dy, path_cmd_move_to);
+ }
+
+ //------------------------------------------------------------------------
+ inline void path_storage::line_to(double x, double y)
+ {
+ add_vertex(x, y, path_cmd_line_to);
+ }
+
+ //------------------------------------------------------------------------
+ inline void path_storage::line_rel(double dx, double dy)
+ {
+ rel_to_abs(&dx, &dy);
+ add_vertex(dx, dy, path_cmd_line_to);
+ }
+}
+
+
+
+#endif
diff --git a/agg/inc/agg_path_storage_integer.h b/agg/inc/agg_path_storage_integer.h
new file mode 100755
index 000000000000..841bd10aa27a
--- /dev/null
+++ b/agg/inc/agg_path_storage_integer.h
@@ -0,0 +1,300 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+
+#ifndef AGG_PATH_STORAGE_INTEGER_INCLUDED
+#define AGG_PATH_STORAGE_INTEGER_INCLUDED
+
+#include <string.h>
+#include "agg_array.h"
+
+namespace agg
+{
+
+ //---------------------------------------------------------vertex_integer
+ template<class T, unsigned CoordShift=6> struct vertex_integer
+ {
+ enum path_cmd
+ {
+ cmd_move_to = 0,
+ cmd_line_to = 1,
+ cmd_curve3 = 2,
+ cmd_curve4 = 3
+ };
+
+ enum
+ {
+ coord_shift = CoordShift,
+ coord_mult = 1 << coord_shift
+ };
+
+ T x,y;
+ vertex_integer() {}
+ vertex_integer(T x_, T y_, unsigned flag) :
+ x(((x_ << 1) & ~1) | (flag & 1)),
+ y(((y_ << 1) & ~1) | (flag >> 1)) {}
+
+ unsigned vertex(double* x_, double* y_,
+ double dx=0, double dy=0,
+ double scale=1.0) const
+ {
+ *x_ = dx + (double(x >> 1) / coord_mult) * scale;
+ *y_ = dy + (double(y >> 1) / coord_mult) * scale;
+ switch(((y & 1) << 1) | (x & 1))
+ {
+ case cmd_move_to: return path_cmd_move_to;
+ case cmd_line_to: return path_cmd_line_to;
+ case cmd_curve3: return path_cmd_curve3;
+ case cmd_curve4: return path_cmd_curve4;
+ }
+ return path_cmd_stop;
+ }
+ };
+
+
+ //---------------------------------------------------path_storage_integer
+ template<class T, unsigned CoordShift=6> class path_storage_integer
+ {
+ public:
+ typedef vertex_integer<T, CoordShift> vertex_integer_type;
+
+ //--------------------------------------------------------------------
+ path_storage_integer() : m_storage(), m_vertex_idx(0), m_closed(true) {}
+
+ //--------------------------------------------------------------------
+ void remove_all() { m_storage.remove_all(); }
+
+ //--------------------------------------------------------------------
+ void move_to(T x, T y)
+ {
+ m_storage.add(vertex_integer_type(x, y, vertex_integer_type::cmd_move_to));
+ }
+
+ //--------------------------------------------------------------------
+ void line_to(T x, T y)
+ {
+ m_storage.add(vertex_integer_type(x, y, vertex_integer_type::cmd_line_to));
+ }
+
+ //--------------------------------------------------------------------
+ void curve3(T x_ctrl, T y_ctrl,
+ T x_to, T y_to)
+ {
+ m_storage.add(vertex_integer_type(x_ctrl, y_ctrl, vertex_integer_type::cmd_curve3));
+ m_storage.add(vertex_integer_type(x_to, y_to, vertex_integer_type::cmd_curve3));
+ }
+
+ //--------------------------------------------------------------------
+ void curve4(T x_ctrl1, T y_ctrl1,
+ T x_ctrl2, T y_ctrl2,
+ T x_to, T y_to)
+ {
+ m_storage.add(vertex_integer_type(x_ctrl1, y_ctrl1, vertex_integer_type::cmd_curve4));
+ m_storage.add(vertex_integer_type(x_ctrl2, y_ctrl2, vertex_integer_type::cmd_curve4));
+ m_storage.add(vertex_integer_type(x_to, y_to, vertex_integer_type::cmd_curve4));
+ }
+
+ //--------------------------------------------------------------------
+ void close_polygon() {}
+
+ //--------------------------------------------------------------------
+ unsigned size() const { return m_storage.size(); }
+ unsigned vertex(unsigned idx, T* x, T* y) const
+ {
+ const vertex_integer_type& v = m_storage[idx];
+ *x = v.x >> 1;
+ *y = v.y >> 1;
+ return ((v.y & 1) << 1) | (v.x & 1);
+ }
+
+ //--------------------------------------------------------------------
+ unsigned byte_size() const { return m_storage.size() * sizeof(vertex_integer_type); }
+ void serialize(int8u* ptr) const
+ {
+ unsigned i;
+ for(i = 0; i < m_storage.size(); i++)
+ {
+ memcpy(ptr, &m_storage[i], sizeof(vertex_integer_type));
+ ptr += sizeof(vertex_integer_type);
+ }
+ }
+
+
+ //--------------------------------------------------------------------
+ void rewind(unsigned)
+ {
+ m_vertex_idx = 0;
+ m_closed = true;
+ }
+
+ //--------------------------------------------------------------------
+ unsigned vertex(double* x, double* y)
+ {
+ if(m_storage.size() < 2 || m_vertex_idx > m_storage.size())
+ {
+ *x = 0;
+ *y = 0;
+ return path_cmd_stop;
+ }
+ if(m_vertex_idx == m_storage.size())
+ {
+ *x = 0;
+ *y = 0;
+ ++m_vertex_idx;
+ return path_cmd_end_poly | path_flags_close;
+ }
+ unsigned cmd = m_storage[m_vertex_idx].vertex(x, y);
+ if(is_move_to(cmd) && !m_closed)
+ {
+ *x = 0;
+ *y = 0;
+ m_closed = true;
+ return path_cmd_end_poly | path_flags_close;
+ }
+ m_closed = false;
+ ++m_vertex_idx;
+ return cmd;
+ }
+
+ //--------------------------------------------------------------------
+ rect_d bounding_rect() const
+ {
+ rect_d bounds(1e100, 1e100, -1e100, -1e100);
+ if(m_storage.size() == 0)
+ {
+ bounds.x1 = bounds.y1 = bounds.x2 = bounds.y2 = 0.0;
+ }
+ else
+ {
+ unsigned i;
+ for(i = 0; i < m_storage.size(); i++)
+ {
+ double x, y;
+ m_storage[i].vertex(&x, &y);
+ if(x < bounds.x1) bounds.x1 = x;
+ if(y < bounds.y1) bounds.y1 = y;
+ if(x > bounds.x2) bounds.x2 = x;
+ if(y > bounds.y2) bounds.y2 = y;
+ }
+ }
+ return bounds;
+ }
+
+
+ private:
+ pod_deque<vertex_integer_type, 6> m_storage;
+ unsigned m_vertex_idx;
+ bool m_closed;
+ };
+
+
+
+
+ //-----------------------------------------serialized_integer_path_adaptor
+ template<class T, unsigned CoordShift=6> class serialized_integer_path_adaptor
+ {
+ public:
+ typedef vertex_integer<T, CoordShift> vertex_integer_type;
+
+ //--------------------------------------------------------------------
+ serialized_integer_path_adaptor() :
+ m_data(0),
+ m_end(0),
+ m_ptr(0),
+ m_dx(0.0),
+ m_dy(0.0),
+ m_scale(1.0),
+ m_vertices(0)
+ {}
+
+ //--------------------------------------------------------------------
+ serialized_integer_path_adaptor(const int8u* data, unsigned size,
+ double dx, double dy) :
+ m_data(data),
+ m_end(data + size),
+ m_ptr(data),
+ m_dx(dx),
+ m_dy(dy),
+ m_vertices(0)
+ {}
+
+ //--------------------------------------------------------------------
+ void init(const int8u* data, unsigned size,
+ double dx, double dy, double scale=1.0)
+ {
+ m_data = data;
+ m_end = data + size;
+ m_ptr = data;
+ m_dx = dx;
+ m_dy = dy;
+ m_scale = scale;
+ m_vertices = 0;
+ }
+
+
+ //--------------------------------------------------------------------
+ void rewind(unsigned)
+ {
+ m_ptr = m_data;
+ m_vertices = 0;
+ }
+
+ //--------------------------------------------------------------------
+ unsigned vertex(double* x, double* y)
+ {
+ if(m_data == 0 || m_ptr > m_end)
+ {
+ *x = 0;
+ *y = 0;
+ return path_cmd_stop;
+ }
+
+ if(m_ptr == m_end)
+ {
+ *x = 0;
+ *y = 0;
+ m_ptr += sizeof(vertex_integer_type);
+ return path_cmd_end_poly | path_flags_close;
+ }
+
+ vertex_integer_type v;
+ memcpy(&v, m_ptr, sizeof(vertex_integer_type));
+ unsigned cmd = v.vertex(x, y, m_dx, m_dy, m_scale);
+ if(is_move_to(cmd) && m_vertices > 2)
+ {
+ *x = 0;
+ *y = 0;
+ m_vertices = 0;
+ return path_cmd_end_poly | path_flags_close;
+ }
+ ++m_vertices;
+ m_ptr += sizeof(vertex_integer_type);
+ return cmd;
+ }
+
+ private:
+ const int8u* m_data;
+ const int8u* m_end;
+ const int8u* m_ptr;
+ double m_dx;
+ double m_dy;
+ double m_scale;
+ unsigned m_vertices;
+ };
+
+}
+
+
+#endif
+
diff --git a/agg/inc/agg_pattern_filters_rgba.h b/agg/inc/agg_pattern_filters_rgba.h
new file mode 100755
index 000000000000..5d194b2e39ba
--- /dev/null
+++ b/agg/inc/agg_pattern_filters_rgba.h
@@ -0,0 +1,122 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+#ifndef AGG_PATTERN_FILTERS_RGBA8_INCLUDED
+#define AGG_PATTERN_FILTERS_RGBA8_INCLUDED
+
+#include "agg_basics.h"
+#include "agg_line_aa_basics.h"
+#include "agg_color_rgba.h"
+
+
+namespace agg
+{
+
+ //=======================================================pattern_filter_nn
+ template<class ColorT> struct pattern_filter_nn
+ {
+ typedef ColorT color_type;
+ static unsigned dilation() { return 0; }
+
+ static void AGG_INLINE pixel_low_res(color_type const* const* buf,
+ color_type* p, int x, int y)
+ {
+ *p = buf[y][x];
+ }
+
+ static void AGG_INLINE pixel_high_res(color_type const* const* buf,
+ color_type* p, int x, int y)
+ {
+ *p = buf[y >> line_subpixel_shift]
+ [x >> line_subpixel_shift];
+ }
+ };
+
+ typedef pattern_filter_nn<rgba8> pattern_filter_nn_rgba8;
+ typedef pattern_filter_nn<rgba16> pattern_filter_nn_rgba16;
+
+
+ //===========================================pattern_filter_bilinear_rgba
+ template<class ColorT> struct pattern_filter_bilinear_rgba
+ {
+ typedef ColorT color_type;
+ typedef typename color_type::value_type value_type;
+ typedef typename color_type::calc_type calc_type;
+
+
+ static unsigned dilation() { return 1; }
+
+ static AGG_INLINE void pixel_low_res(color_type const* const* buf,
+ color_type* p, int x, int y)
+ {
+ *p = buf[y][x];
+ }
+
+ static AGG_INLINE void pixel_high_res(color_type const* const* buf,
+ color_type* p, int x, int y)
+ {
+ calc_type r, g, b, a;
+ r = g = b = a = line_subpixel_size * line_subpixel_size / 2;
+
+ calc_type weight;
+ int x_lr = x >> line_subpixel_shift;
+ int y_lr = y >> line_subpixel_shift;
+
+ x &= line_subpixel_mask;
+ y &= line_subpixel_mask;
+ const color_type* ptr = buf[y_lr] + x_lr;
+
+ weight = (line_subpixel_size - x) *
+ (line_subpixel_size - y);
+ r += weight * ptr->r;
+ g += weight * ptr->g;
+ b += weight * ptr->b;
+ a += weight * ptr->a;
+
+ ++ptr;
+
+ weight = x * (line_subpixel_size - y);
+ r += weight * ptr->r;
+ g += weight * ptr->g;
+ b += weight * ptr->b;
+ a += weight * ptr->a;
+
+ ptr = buf[y_lr + 1] + x_lr;
+
+ weight = (line_subpixel_size - x) * y;
+ r += weight * ptr->r;
+ g += weight * ptr->g;
+ b += weight * ptr->b;
+ a += weight * ptr->a;
+
+ ++ptr;
+
+ weight = x * y;
+ r += weight * ptr->r;
+ g += weight * ptr->g;
+ b += weight * ptr->b;
+ a += weight * ptr->a;
+
+ p->r = (value_type)(r >> line_subpixel_shift * 2);
+ p->g = (value_type)(g >> line_subpixel_shift * 2);
+ p->b = (value_type)(b >> line_subpixel_shift * 2);
+ p->a = (value_type)(a >> line_subpixel_shift * 2);
+ }
+ };
+
+ typedef pattern_filter_bilinear_rgba<rgba8> pattern_filter_bilinear_rgba8;
+ typedef pattern_filter_bilinear_rgba<rgba16> pattern_filter_bilinear_rgba16;
+}
+
+#endif
diff --git a/agg/inc/agg_pixfmt_amask_adaptor.h b/agg/inc/agg_pixfmt_amask_adaptor.h
new file mode 100755
index 000000000000..7f3d5899b1c6
--- /dev/null
+++ b/agg/inc/agg_pixfmt_amask_adaptor.h
@@ -0,0 +1,265 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+
+#ifndef AGG_PIXFMT_AMASK_ADAPTOR_INCLUDED
+#define AGG_PIXFMT_AMASK_ADAPTOR_INCLUDED
+
+
+#include <string.h>
+#include "agg_rendering_buffer.h"
+
+
+namespace agg
+{
+ //==================================================pixfmt_amask_adaptor
+ template<class PixFmt, class AlphaMask> class pixfmt_amask_adaptor
+ {
+ public:
+ typedef PixFmt pixfmt_type;
+ typedef typename pixfmt_type::color_type color_type;
+ typedef AlphaMask amask_type;
+ typedef typename amask_type::cover_type cover_type;
+
+ private:
+ enum { span_extra_tail = 256 };
+
+ void realloc_span(unsigned len)
+ {
+ if(len > m_max_len)
+ {
+ delete [] m_span;
+ m_span = new cover_type[m_max_len = len + span_extra_tail];
+ }
+ }
+
+ void init_span(unsigned len)
+ {
+ realloc_span(len);
+
+ // ATTN! May work incorrectly if cover_type is more that one byte
+ memset(m_span, amask_type::cover_full, len * sizeof(cover_type));
+ }
+
+ void init_span(unsigned len, const cover_type* covers)
+ {
+ realloc_span(len);
+ memcpy(m_span, covers, len * sizeof(cover_type));
+ }
+
+
+ public:
+ ~pixfmt_amask_adaptor() { delete [] m_span; }
+
+ pixfmt_amask_adaptor(pixfmt_type& pixf, const amask_type& mask) :
+ m_pixf(&pixf), m_mask(&mask), m_span(0), m_max_len(0)
+ {}
+
+ void attach_pixfmt(pixfmt_type& pixf) { m_pixf = &pixf; }
+ void attach_alpha_mask(const amask_type& mask) { m_mask = &mask; }
+
+ //--------------------------------------------------------------------
+ unsigned width() const { return m_pixf->width(); }
+ unsigned height() const { return m_pixf->height(); }
+
+ //--------------------------------------------------------------------
+ color_type pixel(int x, int y)
+ {
+ return m_pixf->pixel(x, y);
+ }
+
+ //--------------------------------------------------------------------
+ void copy_pixel(int x, int y, const color_type& c)
+ {
+ m_pixf->blend_pixel(x, y, c, m_mask->pixel(x, y));
+ }
+
+ //--------------------------------------------------------------------
+ void blend_pixel(int x, int y, const color_type& c, cover_type cover)
+ {
+ m_pixf->blend_pixel(x, y, c, m_mask->combine_pixel(x, y, cover));
+ }
+
+ //--------------------------------------------------------------------
+ void copy_hline(int x, int y,
+ unsigned len,
+ const color_type& c)
+ {
+ realloc_span(len);
+ m_mask->fill_hspan(x, y, m_span, len);
+ m_pixf->blend_solid_hspan(x, y, len, c, m_span);
+ }
+
+ //--------------------------------------------------------------------
+ void blend_hline(int x, int y,
+ unsigned len,
+ const color_type& c,
+ cover_type cover)
+ {
+ init_span(len);
+ m_mask->combine_hspan(x, y, m_span, len);
+ m_pixf->blend_solid_hspan(x, y, len, c, m_span);
+ }
+
+ //--------------------------------------------------------------------
+ void copy_vline(int x, int y,
+ unsigned len,
+ const color_type& c)
+ {
+ realloc_span(len);
+ m_mask->fill_vspan(x, y, m_span, len);
+ m_pixf->blend_solid_vspan(x, y, len, c, m_span);
+ }
+
+ //--------------------------------------------------------------------
+ void blend_vline(int x, int y,
+ unsigned len,
+ const color_type& c,
+ cover_type cover)
+ {
+ init_span(len);
+ m_mask->combine_vspan(x, y, m_span, len);
+ m_pixf->blend_solid_vspan(x, y, len, c, m_span);
+ }
+
+ //--------------------------------------------------------------------
+ void copy_from(const rendering_buffer& from,
+ int xdst, int ydst,
+ int xsrc, int ysrc,
+ unsigned len)
+ {
+ m_pixf->copy_from(from, xdst, ydst, xsrc, ysrc, len);
+ }
+
+
+ //--------------------------------------------------------------------
+ void blend_solid_hspan(int x, int y,
+ unsigned len,
+ const color_type& c,
+ const cover_type* covers)
+ {
+ init_span(len, covers);
+ m_mask->combine_hspan(x, y, m_span, len);
+ m_pixf->blend_solid_hspan(x, y, len, c, m_span);
+ }
+
+
+ //--------------------------------------------------------------------
+ void blend_solid_vspan(int x, int y,
+ unsigned len,
+ const color_type& c,
+ const cover_type* covers)
+ {
+ init_span(len, covers);
+ m_mask->combine_vspan(x, y, m_span, len);
+ m_pixf->blend_solid_vspan(x, y, len, c, m_span);
+ }
+
+
+ //--------------------------------------------------------------------
+ void blend_color_hspan(int x, int y,
+ unsigned len,
+ const color_type* colors,
+ const cover_type* covers,
+ cover_type cover = cover_full)
+ {
+ if(covers)
+ {
+ init_span(len, covers);
+ m_mask->combine_hspan(x, y, m_span, len);
+ }
+ else
+ {
+ realloc_span(len);
+ m_mask->fill_hspan(x, y, m_span, len);
+ }
+ m_pixf->blend_color_hspan(x, y, len, colors, m_span, cover);
+ }
+
+
+ //--------------------------------------------------------------------
+ void blend_color_vspan(int x, int y,
+ unsigned len,
+ const color_type* colors,
+ const cover_type* covers,
+ cover_type cover = cover_full)
+ {
+ if(covers)
+ {
+ init_span(len, covers);
+ m_mask->combine_vspan(x, y, m_span, len);
+ }
+ else
+ {
+ realloc_span(len);
+ m_mask->fill_vspan(x, y, m_span, len);
+ }
+ m_pixf->blend_color_vspan(x, y, len, colors, m_span, cover);
+ }
+
+
+ //--------------------------------------------------------------------
+ void blend_opaque_color_hspan(int x, int y,
+ unsigned len,
+ const color_type* colors,
+ const cover_type* covers,
+ cover_type cover = cover_full)
+ {
+ if(covers)
+ {
+ init_span(len, covers);
+ m_mask->combine_hspan(x, y, m_span, len);
+ }
+ else
+ {
+ realloc_span(len);
+ m_mask->fill_hspan(x, y, m_span, len);
+ }
+ m_pixf->blend_opaque_color_hspan(x, y, len, colors, m_span, cover);
+ }
+
+
+ //--------------------------------------------------------------------
+ void blend_opaque_color_vspan(int x, int y,
+ unsigned len,
+ const color_type* colors,
+ const cover_type* covers,
+ cover_type cover = cover_full)
+ {
+ if(covers)
+ {
+ init_span(len, covers);
+ m_mask->combine_vspan(x, y, m_span, len);
+ }
+ else
+ {
+ realloc_span(len);
+ m_mask->fill_vspan(x, y, m_span, len);
+ }
+ m_pixf->blend_opaque_color_vspan(x, y, len, colors, m_span, cover);
+ }
+
+
+ private:
+ pixfmt_type* m_pixf;
+ const amask_type* m_mask;
+
+ cover_type* m_span;
+ unsigned m_max_len;
+ };
+
+}
+
+#endif
+
diff --git a/agg/inc/agg_pixfmt_gray.h b/agg/inc/agg_pixfmt_gray.h
new file mode 100755
index 000000000000..48f47d1de32e
--- /dev/null
+++ b/agg/inc/agg_pixfmt_gray.h
@@ -0,0 +1,703 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// Adaptation for high precision colors has been sponsored by
+// Liberty Technology Systems, Inc., visit http://lib-sys.com
+//
+// Liberty Technology Systems, Inc. is the provider of
+// PostScript and PDF technology for software developers.
+//
+//----------------------------------------------------------------------------
+
+#ifndef AGG_PIXFMT_GRAY_INCLUDED
+#define AGG_PIXFMT_GRAY_INCLUDED
+
+#include <string.h>
+#include "agg_basics.h"
+#include "agg_color_gray.h"
+#include "agg_rendering_buffer.h"
+
+namespace agg
+{
+
+ //============================================================blender_gray
+ template<class ColorT> struct blender_gray
+ {
+ typedef ColorT color_type;
+ typedef typename color_type::value_type value_type;
+ typedef typename color_type::calc_type calc_type;
+ enum { base_shift = color_type::base_shift };
+
+ static AGG_INLINE void blend_pix(value_type* p, unsigned cv,
+ unsigned alpha, unsigned)
+ {
+ *p = (value_type)((((cv - calc_type(*p)) * alpha) + (calc_type(*p) << base_shift)) >> base_shift);
+ }
+ };
+
+
+ //======================================================blender_gray_pre
+ template<class ColorT> struct blender_gray_pre
+ {
+ typedef ColorT color_type;
+ typedef typename color_type::value_type value_type;
+ typedef typename color_type::calc_type calc_type;
+ enum { base_shift = color_type::base_shift };
+
+ static AGG_INLINE void blend_pix(value_type* p, unsigned cv,
+ unsigned alpha, unsigned cover)
+ {
+ alpha = color_type::base_mask - alpha;
+ cover = (cover + 1) << (base_shift - 8);
+ *p = (value_type)((*p * alpha + cv * cover) >> base_shift);
+ }
+ };
+
+
+
+ //=====================================================apply_gamma_dir_gray
+ template<class ColorT, class GammaLut> class apply_gamma_dir_gray
+ {
+ public:
+ typedef typename ColorT::value_type value_type;
+
+ apply_gamma_dir_gray(const GammaLut& gamma) : m_gamma(gamma) {}
+
+ AGG_INLINE void operator () (value_type* p)
+ {
+ *p = m_gamma.dir(*p);
+ }
+
+ private:
+ const GammaLut& m_gamma;
+ };
+
+
+
+ //=====================================================apply_gamma_inv_gray
+ template<class ColorT, class GammaLut> class apply_gamma_inv_gray
+ {
+ public:
+ typedef typename ColorT::value_type value_type;
+
+ apply_gamma_inv_gray(const GammaLut& gamma) : m_gamma(gamma) {}
+
+ AGG_INLINE void operator () (value_type* p)
+ {
+ *p = m_gamma.inv(*p);
+ }
+
+ private:
+ const GammaLut& m_gamma;
+ };
+
+
+
+ //======================================================pixel_formats_gray
+ template<class Blender, unsigned Step=1, unsigned Offset=0>
+ class pixel_formats_gray
+ {
+ public:
+ typedef rendering_buffer::row_data row_data;
+ typedef typename Blender::color_type color_type;
+ typedef typename color_type::value_type value_type;
+ typedef typename color_type::calc_type calc_type;
+ enum
+ {
+ base_shift = color_type::base_shift,
+ base_size = color_type::base_size,
+ base_mask = color_type::base_mask
+ };
+
+ private:
+ //--------------------------------------------------------------------
+ static AGG_INLINE void copy_or_blend_pix(value_type* p,
+ const color_type& c,
+ unsigned cover)
+ {
+ if (c.a)
+ {
+ calc_type alpha = (calc_type(c.a) * (cover + 1)) >> 8;
+ if(alpha == base_mask)
+ {
+ *p = c.v;
+ }
+ else
+ {
+ Blender::blend_pix(p, c.v, alpha, cover);
+ }
+ }
+ }
+
+ //--------------------------------------------------------------------
+ static AGG_INLINE void copy_or_blend_opaque_pix(value_type* p,
+ const color_type& c,
+ unsigned cover)
+ {
+ if(cover == 255)
+ {
+ *p = c.v;
+ }
+ else
+ {
+ Blender::blend_pix(p, c.v, (cover + 1) << (base_shift - 8), cover);
+ }
+ }
+
+ public:
+ //--------------------------------------------------------------------
+ pixel_formats_gray(rendering_buffer& rb) :
+ m_rbuf(&rb)
+ {}
+
+
+ //--------------------------------------------------------------------
+ AGG_INLINE unsigned width() const { return m_rbuf->width(); }
+ AGG_INLINE unsigned height() const { return m_rbuf->height(); }
+
+ //--------------------------------------------------------------------
+ AGG_INLINE color_type pixel(int x, int y) const
+ {
+ value_type* p = (value_type*)m_rbuf->row(y) + x * Step + Offset;
+ return color_type(*p);
+ }
+
+ //--------------------------------------------------------------------
+ row_data span(int x, int y) const
+ {
+ return row_data(x,
+ width() - 1,
+ m_rbuf->row(y) +
+ x * Step * sizeof(value_type) +
+ Offset * sizeof(value_type));
+ }
+
+ //--------------------------------------------------------------------
+ AGG_INLINE void copy_pixel(int x, int y, const color_type& c)
+ {
+ *((value_type*)m_rbuf->row(y) + x * Step + Offset) = c.v;
+ }
+
+ //--------------------------------------------------------------------
+ AGG_INLINE void blend_pixel(int x, int y, const color_type& c, int8u cover)
+ {
+ copy_or_blend_pix((value_type*)m_rbuf->row(y) + x * Step + Offset, c, cover);
+ }
+
+
+ //--------------------------------------------------------------------
+ AGG_INLINE void copy_hline(int x, int y,
+ unsigned len,
+ const color_type& c)
+ {
+ value_type* p = (value_type*)m_rbuf->row(y) + x * Step + Offset;
+ do
+ {
+ *p = c.v;
+ p += Step;
+ }
+ while(--len);
+ }
+
+
+ //--------------------------------------------------------------------
+ AGG_INLINE void copy_vline(int x, int y,
+ unsigned len,
+ const color_type& c)
+ {
+ value_type* p = (value_type*)m_rbuf->row(y) + x * Step + Offset;
+ do
+ {
+ *p = c.v;
+ p = (value_type*)m_rbuf->next_row(p);
+ }
+ while(--len);
+ }
+
+
+ //--------------------------------------------------------------------
+ void blend_hline(int x, int y,
+ unsigned len,
+ const color_type& c,
+ int8u cover)
+ {
+ if (c.a)
+ {
+ value_type* p = (value_type*)m_rbuf->row(y) + x * Step + Offset;
+ calc_type alpha = (calc_type(c.a) * (cover + 1)) >> 8;
+ if(alpha == base_mask)
+ {
+ do
+ {
+ *p = c.v;
+ p += Step;
+ }
+ while(--len);
+ }
+ else
+ {
+ do
+ {
+ Blender::blend_pix(p, c.v, alpha, cover);
+ p += Step;
+ }
+ while(--len);
+ }
+ }
+ }
+
+
+ //--------------------------------------------------------------------
+ void blend_vline(int x, int y,
+ unsigned len,
+ const color_type& c,
+ int8u cover)
+ {
+ if (c.a)
+ {
+ value_type* p = (value_type*)m_rbuf->row(y) + x * Step + Offset;
+ calc_type alpha = (calc_type(c.a) * (cover + 1)) >> 8;
+ if(alpha == base_mask)
+ {
+ do
+ {
+ *p = c.v;
+ p = (value_type*)m_rbuf->next_row(p);
+ }
+ while(--len);
+ }
+ else
+ {
+ do
+ {
+ Blender::blend_pix(p, c.v, alpha, cover);
+ p = (value_type*)m_rbuf->next_row(p);
+ }
+ while(--len);
+ }
+ }
+ }
+
+
+ //--------------------------------------------------------------------
+ void blend_solid_hspan(int x, int y,
+ unsigned len,
+ const color_type& c,
+ const int8u* covers)
+ {
+ if (c.a)
+ {
+ value_type* p = (value_type*)m_rbuf->row(y) + x * Step + Offset;
+ do
+ {
+ calc_type alpha = (calc_type(c.a) * (calc_type(*covers) + 1)) >> 8;
+ if(alpha == base_mask)
+ {
+ *p = c.v;
+ }
+ else
+ {
+ Blender::blend_pix(p, c.v, alpha, *covers);
+ }
+ p += Step;
+ ++covers;
+ }
+ while(--len);
+ }
+ }
+
+
+ //--------------------------------------------------------------------
+ void blend_solid_vspan(int x, int y,
+ unsigned len,
+ const color_type& c,
+ const int8u* covers)
+ {
+ if (c.a)
+ {
+ value_type* p = (value_type*)m_rbuf->row(y) + x * Step + Offset;
+ do
+ {
+ calc_type alpha = (calc_type(c.a) * (calc_type(*covers) + 1)) >> 8;
+ if(alpha == base_mask)
+ {
+ *p = c.v;
+ }
+ else
+ {
+ Blender::blend_pix(p, c.v, alpha, *covers);
+ }
+ p = (value_type*)m_rbuf->next_row(p);
+ ++covers;
+ }
+ while(--len);
+ }
+ }
+
+
+ //--------------------------------------------------------------------
+ void blend_color_hspan(int x, int y,
+ unsigned len,
+ const color_type* colors,
+ const int8u* covers,
+ int8u cover)
+ {
+ value_type* p = (value_type*)m_rbuf->row(y) + x * Step + Offset;
+ if(covers)
+ {
+ do
+ {
+ copy_or_blend_pix(p, *colors++, *covers++);
+ p += Step;
+ }
+ while(--len);
+ }
+ else
+ {
+ if(cover == 255)
+ {
+ do
+ {
+ if(colors->a == base_mask)
+ {
+ *p = colors->v;
+ }
+ else
+ {
+ copy_or_blend_pix(p, *colors, 255);
+ }
+ p += Step;
+ ++colors;
+ }
+ while(--len);
+ }
+ else
+ {
+ do
+ {
+ copy_or_blend_pix(p, *colors++, cover);
+ p += Step;
+ }
+ while(--len);
+ }
+ }
+ }
+
+
+
+ //--------------------------------------------------------------------
+ void blend_color_vspan(int x, int y,
+ unsigned len,
+ const color_type* colors,
+ const int8u* covers,
+ int8u cover)
+ {
+ value_type* p = (value_type*)m_rbuf->row(y) + x * Step + Offset;
+ if(covers)
+ {
+ do
+ {
+ copy_or_blend_pix(p, *colors++, *covers++);
+ p = (value_type*)m_rbuf->next_row(p);
+ }
+ while(--len);
+ }
+ else
+ {
+ if(cover == 255)
+ {
+ do
+ {
+ if(colors->a == base_mask)
+ {
+ *p = colors->v;
+ }
+ else
+ {
+ copy_or_blend_pix(p, *colors, 255);
+ }
+ p = (value_type*)m_rbuf->next_row(p);
+ ++colors;
+ }
+ while(--len);
+ }
+ else
+ {
+ do
+ {
+ copy_or_blend_pix(p, *colors++, cover);
+ p = (value_type*)m_rbuf->next_row(p);
+ }
+ while(--len);
+ }
+ }
+ }
+
+ //--------------------------------------------------------------------
+ void blend_opaque_color_hspan(int x, int y,
+ unsigned len,
+ const color_type* colors,
+ const int8u* covers,
+ int8u cover)
+ {
+ value_type* p = (value_type*)m_rbuf->row(y) + x * Step + Offset;
+ if(covers)
+ {
+ do
+ {
+ copy_or_blend_opaque_pix(p, *colors++, *covers++);
+ p += Step;
+ }
+ while(--len);
+ }
+ else
+ {
+ if(cover == 255)
+ {
+ do
+ {
+ *p = colors->v;
+ p += Step;
+ ++colors;
+ }
+ while(--len);
+ }
+ else
+ {
+ do
+ {
+ copy_or_blend_opaque_pix(p, *colors++, cover);
+ p += Step;
+ }
+ while(--len);
+ }
+ }
+ }
+
+
+ //--------------------------------------------------------------------
+ void blend_opaque_color_vspan(int x, int y,
+ unsigned len,
+ const color_type* colors,
+ const int8u* covers,
+ int8u cover)
+ {
+ value_type* p = (value_type*)m_rbuf->row(y) + x * Step + Offset;
+ if(covers)
+ {
+ do
+ {
+ copy_or_blend_opaque_pix(p, *colors++, *covers++);
+ p = (value_type*)m_rbuf->next_row(p);
+ }
+ while(--len);
+ }
+ else
+ {
+ if(cover == 255)
+ {
+ do
+ {
+ *p = colors->v;
+ p = (value_type*)m_rbuf->next_row(p);
+ ++colors;
+ }
+ while(--len);
+ }
+ else
+ {
+ do
+ {
+ copy_or_blend_opaque_pix(p, *colors++, cover);
+ p = (value_type*)m_rbuf->next_row(p);
+ }
+ while(--len);
+ }
+ }
+ }
+
+ //--------------------------------------------------------------------
+ template<class Function> void for_each_pixel(Function f)
+ {
+ unsigned y;
+ for(y = 0; y < height(); ++y)
+ {
+ unsigned len = width();
+ value_type* p = (value_type*)m_rbuf->row(y) + Offset;
+ do
+ {
+ f(p);
+ p += Step;
+ }
+ while(--len);
+ }
+ }
+
+ //--------------------------------------------------------------------
+ template<class GammaLut> void apply_gamma_dir(const GammaLut& g)
+ {
+ for_each_pixel(apply_gamma_dir_gray<color_type, GammaLut>(g));
+ }
+
+ //--------------------------------------------------------------------
+ template<class GammaLut> void apply_gamma_inv(const GammaLut& g)
+ {
+ for_each_pixel(apply_gamma_inv_gray<color_type, GammaLut>(g));
+ }
+
+ //--------------------------------------------------------------------
+ void copy_from(const rendering_buffer& from,
+ int xdst, int ydst,
+ int xsrc, int ysrc,
+ unsigned len)
+ {
+ memmove((value_type*)m_rbuf->row(ydst) + xdst,
+ (value_type*)from.row(ysrc) + xsrc,
+ sizeof(value_type) * len);
+ }
+
+ private:
+ rendering_buffer* m_rbuf;
+ };
+
+ typedef blender_gray<gray8> blender_gray8;
+ typedef blender_gray_pre<gray8> blender_gray8_pre;
+ typedef blender_gray<gray16> blender_gray16;
+ typedef blender_gray_pre<gray16> blender_gray16_pre;
+
+ typedef pixel_formats_gray<blender_gray8, 1, 0> pixfmt_gray8; //----pixfmt_gray8
+
+ typedef pixel_formats_gray<blender_gray8, 3, 0> pixfmt_gray8_rgb24r; //----pixfmt_gray8_rgb24r
+ typedef pixel_formats_gray<blender_gray8, 3, 1> pixfmt_gray8_rgb24g; //----pixfmt_gray8_rgb24g
+ typedef pixel_formats_gray<blender_gray8, 3, 2> pixfmt_gray8_rgb24b; //----pixfmt_gray8_rgb24b
+
+ typedef pixel_formats_gray<blender_gray8, 3, 2> pixfmt_gray8_bgr24r; //----pixfmt_gray8_bgr24r
+ typedef pixel_formats_gray<blender_gray8, 3, 1> pixfmt_gray8_bgr24g; //----pixfmt_gray8_bgr24g
+ typedef pixel_formats_gray<blender_gray8, 3, 0> pixfmt_gray8_bgr24b; //----pixfmt_gray8_bgr24b
+
+ typedef pixel_formats_gray<blender_gray8, 4, 0> pixfmt_gray8_rgba32r; //----pixfmt_gray8_rgba32r
+ typedef pixel_formats_gray<blender_gray8, 4, 1> pixfmt_gray8_rgba32g; //----pixfmt_gray8_rgba32g
+ typedef pixel_formats_gray<blender_gray8, 4, 2> pixfmt_gray8_rgba32b; //----pixfmt_gray8_rgba32b
+ typedef pixel_formats_gray<blender_gray8, 4, 3> pixfmt_gray8_rgba32a; //----pixfmt_gray8_rgba32a
+
+ typedef pixel_formats_gray<blender_gray8, 4, 1> pixfmt_gray8_argb32r; //----pixfmt_gray8_argb32r
+ typedef pixel_formats_gray<blender_gray8, 4, 2> pixfmt_gray8_argb32g; //----pixfmt_gray8_argb32g
+ typedef pixel_formats_gray<blender_gray8, 4, 3> pixfmt_gray8_argb32b; //----pixfmt_gray8_argb32b
+ typedef pixel_formats_gray<blender_gray8, 4, 0> pixfmt_gray8_argb32a; //----pixfmt_gray8_argb32a
+
+ typedef pixel_formats_gray<blender_gray8, 4, 2> pixfmt_gray8_bgra32r; //----pixfmt_gray8_bgra32r
+ typedef pixel_formats_gray<blender_gray8, 4, 1> pixfmt_gray8_bgra32g; //----pixfmt_gray8_bgra32g
+ typedef pixel_formats_gray<blender_gray8, 4, 0> pixfmt_gray8_bgra32b; //----pixfmt_gray8_bgra32b
+ typedef pixel_formats_gray<blender_gray8, 4, 3> pixfmt_gray8_bgra32a; //----pixfmt_gray8_bgra32a
+
+ typedef pixel_formats_gray<blender_gray8, 4, 3> pixfmt_gray8_abgr32r; //----pixfmt_gray8_abgr32r
+ typedef pixel_formats_gray<blender_gray8, 4, 2> pixfmt_gray8_abgr32g; //----pixfmt_gray8_abgr32g
+ typedef pixel_formats_gray<blender_gray8, 4, 1> pixfmt_gray8_abgr32b; //----pixfmt_gray8_abgr32b
+ typedef pixel_formats_gray<blender_gray8, 4, 0> pixfmt_gray8_abgr32a; //----pixfmt_gray8_abgr32a
+
+ typedef pixel_formats_gray<blender_gray8_pre, 1, 0> pixfmt_gray8_pre; //----pixfmt_gray8_pre
+
+ typedef pixel_formats_gray<blender_gray8_pre, 3, 0> pixfmt_gray8_pre_rgb24r; //----pixfmt_gray8_pre_rgb24r
+ typedef pixel_formats_gray<blender_gray8_pre, 3, 1> pixfmt_gray8_pre_rgb24g; //----pixfmt_gray8_pre_rgb24g
+ typedef pixel_formats_gray<blender_gray8_pre, 3, 2> pixfmt_gray8_pre_rgb24b; //----pixfmt_gray8_pre_rgb24b
+
+ typedef pixel_formats_gray<blender_gray8_pre, 3, 2> pixfmt_gray8_pre_bgr24r; //----pixfmt_gray8_pre_bgr24r
+ typedef pixel_formats_gray<blender_gray8_pre, 3, 1> pixfmt_gray8_pre_bgr24g; //----pixfmt_gray8_pre_bgr24g
+ typedef pixel_formats_gray<blender_gray8_pre, 3, 0> pixfmt_gray8_pre_bgr24b; //----pixfmt_gray8_pre_bgr24b
+
+ typedef pixel_formats_gray<blender_gray8_pre, 4, 0> pixfmt_gray8_pre_rgba32r; //----pixfmt_gray8_pre_rgba32r
+ typedef pixel_formats_gray<blender_gray8_pre, 4, 1> pixfmt_gray8_pre_rgba32g; //----pixfmt_gray8_pre_rgba32g
+ typedef pixel_formats_gray<blender_gray8_pre, 4, 2> pixfmt_gray8_pre_rgba32b; //----pixfmt_gray8_pre_rgba32b
+ typedef pixel_formats_gray<blender_gray8_pre, 4, 3> pixfmt_gray8_pre_rgba32a; //----pixfmt_gray8_pre_rgba32a
+
+ typedef pixel_formats_gray<blender_gray8_pre, 4, 1> pixfmt_gray8_pre_argb32r; //----pixfmt_gray8_pre_argb32r
+ typedef pixel_formats_gray<blender_gray8_pre, 4, 2> pixfmt_gray8_pre_argb32g; //----pixfmt_gray8_pre_argb32g
+ typedef pixel_formats_gray<blender_gray8_pre, 4, 3> pixfmt_gray8_pre_argb32b; //----pixfmt_gray8_pre_argb32b
+ typedef pixel_formats_gray<blender_gray8_pre, 4, 0> pixfmt_gray8_pre_argb32a; //----pixfmt_gray8_pre_argb32a
+
+ typedef pixel_formats_gray<blender_gray8_pre, 4, 2> pixfmt_gray8_pre_bgra32r; //----pixfmt_gray8_pre_bgra32r
+ typedef pixel_formats_gray<blender_gray8_pre, 4, 1> pixfmt_gray8_pre_bgra32g; //----pixfmt_gray8_pre_bgra32g
+ typedef pixel_formats_gray<blender_gray8_pre, 4, 0> pixfmt_gray8_pre_bgra32b; //----pixfmt_gray8_pre_bgra32b
+ typedef pixel_formats_gray<blender_gray8_pre, 4, 3> pixfmt_gray8_pre_bgra32a; //----pixfmt_gray8_pre_bgra32a
+
+ typedef pixel_formats_gray<blender_gray8_pre, 4, 3> pixfmt_gray8_pre_abgr32r; //----pixfmt_gray8_pre_abgr32r
+ typedef pixel_formats_gray<blender_gray8_pre, 4, 2> pixfmt_gray8_pre_abgr32g; //----pixfmt_gray8_pre_abgr32g
+ typedef pixel_formats_gray<blender_gray8_pre, 4, 1> pixfmt_gray8_pre_abgr32b; //----pixfmt_gray8_pre_abgr32b
+ typedef pixel_formats_gray<blender_gray8_pre, 4, 0> pixfmt_gray8_pre_abgr32a; //----pixfmt_gray8_pre_abgr32a
+
+ typedef pixel_formats_gray<blender_gray16, 1, 0> pixfmt_gray16; //----pixfmt_gray16
+
+ typedef pixel_formats_gray<blender_gray16, 3, 0> pixfmt_gray16_rgb48r; //----pixfmt_gray16_rgb48r
+ typedef pixel_formats_gray<blender_gray16, 3, 1> pixfmt_gray16_rgb48g; //----pixfmt_gray16_rgb48g
+ typedef pixel_formats_gray<blender_gray16, 3, 2> pixfmt_gray16_rgb48b; //----pixfmt_gray16_rgb48b
+
+ typedef pixel_formats_gray<blender_gray16, 3, 2> pixfmt_gray16_bgr48r; //----pixfmt_gray16_bgr48r
+ typedef pixel_formats_gray<blender_gray16, 3, 1> pixfmt_gray16_bgr48g; //----pixfmt_gray16_bgr48g
+ typedef pixel_formats_gray<blender_gray16, 3, 0> pixfmt_gray16_bgr48b; //----pixfmt_gray16_bgr48b
+
+ typedef pixel_formats_gray<blender_gray16, 4, 0> pixfmt_gray16_rgba64r; //----pixfmt_gray16_rgba64r
+ typedef pixel_formats_gray<blender_gray16, 4, 1> pixfmt_gray16_rgba64g; //----pixfmt_gray16_rgba64g
+ typedef pixel_formats_gray<blender_gray16, 4, 2> pixfmt_gray16_rgba64b; //----pixfmt_gray16_rgba64b
+ typedef pixel_formats_gray<blender_gray16, 4, 3> pixfmt_gray16_rgba64a; //----pixfmt_gray16_rgba64a
+
+ typedef pixel_formats_gray<blender_gray16, 4, 1> pixfmt_gray16_argb64r; //----pixfmt_gray16_argb64r
+ typedef pixel_formats_gray<blender_gray16, 4, 2> pixfmt_gray16_argb64g; //----pixfmt_gray16_argb64g
+ typedef pixel_formats_gray<blender_gray16, 4, 3> pixfmt_gray16_argb64b; //----pixfmt_gray16_argb64b
+ typedef pixel_formats_gray<blender_gray16, 4, 0> pixfmt_gray16_argb64a; //----pixfmt_gray16_argb64a
+
+ typedef pixel_formats_gray<blender_gray16, 4, 2> pixfmt_gray16_bgra64r; //----pixfmt_gray16_bgra64r
+ typedef pixel_formats_gray<blender_gray16, 4, 1> pixfmt_gray16_bgra64g; //----pixfmt_gray16_bgra64g
+ typedef pixel_formats_gray<blender_gray16, 4, 0> pixfmt_gray16_bgra64b; //----pixfmt_gray16_bgra64b
+ typedef pixel_formats_gray<blender_gray16, 4, 3> pixfmt_gray16_bgra64a; //----pixfmt_gray16_bgra64a
+
+ typedef pixel_formats_gray<blender_gray16, 4, 3> pixfmt_gray16_abgr64r; //----pixfmt_gray16_abgr64r
+ typedef pixel_formats_gray<blender_gray16, 4, 2> pixfmt_gray16_abgr64g; //----pixfmt_gray16_abgr64g
+ typedef pixel_formats_gray<blender_gray16, 4, 1> pixfmt_gray16_abgr64b; //----pixfmt_gray16_abgr64b
+ typedef pixel_formats_gray<blender_gray16, 4, 0> pixfmt_gray16_abgr64a; //----pixfmt_gray16_abgr64a
+
+ typedef pixel_formats_gray<blender_gray16_pre, 1, 0> pixfmt_gray16_pre; //----pixfmt_gray16_pre
+
+ typedef pixel_formats_gray<blender_gray16_pre, 3, 0> pixfmt_gray16_pre_rgb48r; //----pixfmt_gray16_pre_rgb48r
+ typedef pixel_formats_gray<blender_gray16_pre, 3, 1> pixfmt_gray16_pre_rgb48g; //----pixfmt_gray16_pre_rgb48g
+ typedef pixel_formats_gray<blender_gray16_pre, 3, 2> pixfmt_gray16_pre_rgb48b; //----pixfmt_gray16_pre_rgb48b
+
+ typedef pixel_formats_gray<blender_gray16_pre, 3, 2> pixfmt_gray16_pre_bgr48r; //----pixfmt_gray16_pre_bgr48r
+ typedef pixel_formats_gray<blender_gray16_pre, 3, 1> pixfmt_gray16_pre_bgr48g; //----pixfmt_gray16_pre_bgr48g
+ typedef pixel_formats_gray<blender_gray16_pre, 3, 0> pixfmt_gray16_pre_bgr48b; //----pixfmt_gray16_pre_bgr48b
+
+ typedef pixel_formats_gray<blender_gray16_pre, 4, 0> pixfmt_gray16_pre_rgba64r; //----pixfmt_gray16_pre_rgba64r
+ typedef pixel_formats_gray<blender_gray16_pre, 4, 1> pixfmt_gray16_pre_rgba64g; //----pixfmt_gray16_pre_rgba64g
+ typedef pixel_formats_gray<blender_gray16_pre, 4, 2> pixfmt_gray16_pre_rgba64b; //----pixfmt_gray16_pre_rgba64b
+ typedef pixel_formats_gray<blender_gray16_pre, 4, 3> pixfmt_gray16_pre_rgba64a; //----pixfmt_gray16_pre_rgba64a
+
+ typedef pixel_formats_gray<blender_gray16_pre, 4, 1> pixfmt_gray16_pre_argb64r; //----pixfmt_gray16_pre_argb64r
+ typedef pixel_formats_gray<blender_gray16_pre, 4, 2> pixfmt_gray16_pre_argb64g; //----pixfmt_gray16_pre_argb64g
+ typedef pixel_formats_gray<blender_gray16_pre, 4, 3> pixfmt_gray16_pre_argb64b; //----pixfmt_gray16_pre_argb64b
+ typedef pixel_formats_gray<blender_gray16_pre, 4, 0> pixfmt_gray16_pre_argb64a; //----pixfmt_gray16_pre_argb64a
+
+ typedef pixel_formats_gray<blender_gray16_pre, 4, 2> pixfmt_gray16_pre_bgra64r; //----pixfmt_gray16_pre_bgra64r
+ typedef pixel_formats_gray<blender_gray16_pre, 4, 1> pixfmt_gray16_pre_bgra64g; //----pixfmt_gray16_pre_bgra64g
+ typedef pixel_formats_gray<blender_gray16_pre, 4, 0> pixfmt_gray16_pre_bgra64b; //----pixfmt_gray16_pre_bgra64b
+ typedef pixel_formats_gray<blender_gray16_pre, 4, 3> pixfmt_gray16_pre_bgra64a; //----pixfmt_gray16_pre_bgra64a
+
+ typedef pixel_formats_gray<blender_gray16_pre, 4, 3> pixfmt_gray16_pre_abgr64r; //----pixfmt_gray16_pre_abgr64r
+ typedef pixel_formats_gray<blender_gray16_pre, 4, 2> pixfmt_gray16_pre_abgr64g; //----pixfmt_gray16_pre_abgr64g
+ typedef pixel_formats_gray<blender_gray16_pre, 4, 1> pixfmt_gray16_pre_abgr64b; //----pixfmt_gray16_pre_abgr64b
+ typedef pixel_formats_gray<blender_gray16_pre, 4, 0> pixfmt_gray16_pre_abgr64a; //----pixfmt_gray16_pre_abgr64a
+
+}
+
+#endif
+
diff --git a/agg/inc/agg_pixfmt_rgb.h b/agg/inc/agg_pixfmt_rgb.h
new file mode 100755
index 000000000000..436dfa4b284f
--- /dev/null
+++ b/agg/inc/agg_pixfmt_rgb.h
@@ -0,0 +1,760 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// Adaptation for high precision colors has been sponsored by
+// Liberty Technology Systems, Inc., visit http://lib-sys.com
+//
+// Liberty Technology Systems, Inc. is the provider of
+// PostScript and PDF technology for software developers.
+//
+//----------------------------------------------------------------------------
+
+#ifndef AGG_PIXFMT_RGB_INCLUDED
+#define AGG_PIXFMT_RGB_INCLUDED
+
+#include <string.h>
+#include "agg_basics.h"
+#include "agg_color_rgba.h"
+#include "agg_rendering_buffer.h"
+
+namespace agg
+{
+
+ //=====================================================apply_gamma_dir_rgb
+ template<class ColorT, class Order, class GammaLut> class apply_gamma_dir_rgb
+ {
+ public:
+ typedef typename ColorT::value_type value_type;
+
+ apply_gamma_dir_rgb(const GammaLut& gamma) : m_gamma(gamma) {}
+
+ AGG_INLINE void operator () (value_type* p)
+ {
+ p[Order::R] = m_gamma.dir(p[Order::R]);
+ p[Order::G] = m_gamma.dir(p[Order::G]);
+ p[Order::B] = m_gamma.dir(p[Order::B]);
+ }
+
+ private:
+ const GammaLut& m_gamma;
+ };
+
+
+
+ //=====================================================apply_gamma_inv_rgb
+ template<class ColorT, class Order, class GammaLut> class apply_gamma_inv_rgb
+ {
+ public:
+ typedef typename ColorT::value_type value_type;
+
+ apply_gamma_inv_rgb(const GammaLut& gamma) : m_gamma(gamma) {}
+
+ AGG_INLINE void operator () (value_type* p)
+ {
+ p[Order::R] = m_gamma.inv(p[Order::R]);
+ p[Order::G] = m_gamma.inv(p[Order::G]);
+ p[Order::B] = m_gamma.inv(p[Order::B]);
+ }
+
+ private:
+ const GammaLut& m_gamma;
+ };
+
+
+ //=========================================================blender_rgb
+ template<class ColorT, class Order> struct blender_rgb
+ {
+ typedef ColorT color_type;
+ typedef Order order_type;
+ typedef typename color_type::value_type value_type;
+ typedef typename color_type::calc_type calc_type;
+ enum { base_shift = color_type::base_shift };
+
+ //--------------------------------------------------------------------
+ static AGG_INLINE void blend_pix(value_type* p,
+ unsigned cr, unsigned cg, unsigned cb,
+ unsigned alpha,
+ unsigned)
+ {
+ p[Order::R] += (value_type)(((cr - p[Order::R]) * alpha) >> base_shift);
+ p[Order::G] += (value_type)(((cg - p[Order::G]) * alpha) >> base_shift);
+ p[Order::B] += (value_type)(((cb - p[Order::B]) * alpha) >> base_shift);
+ }
+ };
+
+
+ //======================================================blender_rgb_pre
+ template<class ColorT, class Order> struct blender_rgb_pre
+ {
+ typedef ColorT color_type;
+ typedef Order order_type;
+ typedef typename color_type::value_type value_type;
+ typedef typename color_type::calc_type calc_type;
+ enum { base_shift = color_type::base_shift };
+
+ //--------------------------------------------------------------------
+ static AGG_INLINE void blend_pix(value_type* p,
+ unsigned cr, unsigned cg, unsigned cb,
+ unsigned alpha,
+ unsigned cover)
+ {
+ alpha = color_type::base_mask - alpha;
+ cover = (cover + 1) << (base_shift - 8);
+ p[Order::R] = (value_type)((p[Order::R] * alpha + cr * cover) >> base_shift);
+ p[Order::G] = (value_type)((p[Order::G] * alpha + cg * cover) >> base_shift);
+ p[Order::B] = (value_type)((p[Order::B] * alpha + cb * cover) >> base_shift);
+ }
+ };
+
+
+
+ //===================================================blender_rgb_gamma
+ template<class ColorT, class Order, class Gamma> class blender_rgb_gamma
+ {
+ public:
+ typedef ColorT color_type;
+ typedef Order order_type;
+ typedef Gamma gamma_type;
+ typedef typename color_type::value_type value_type;
+ typedef typename color_type::calc_type calc_type;
+ enum { base_shift = color_type::base_shift };
+
+ //--------------------------------------------------------------------
+ blender_rgb_gamma() : m_gamma(0) {}
+ void gamma(const gamma_type& g) { m_gamma = &g; }
+
+ //--------------------------------------------------------------------
+ AGG_INLINE void blend_pix(value_type* p,
+ unsigned cr, unsigned cg, unsigned cb,
+ unsigned alpha,
+ unsigned)
+ {
+ calc_type r = m_gamma->dir(p[Order::R]);
+ calc_type g = m_gamma->dir(p[Order::G]);
+ calc_type b = m_gamma->dir(p[Order::B]);
+ p[Order::R] = m_gamma->inv((((m_gamma->dir(cr) - r) * alpha) >> base_shift) + r);
+ p[Order::G] = m_gamma->inv((((m_gamma->dir(cg) - g) * alpha) >> base_shift) + g);
+ p[Order::B] = m_gamma->inv((((m_gamma->dir(cb) - b) * alpha) >> base_shift) + b);
+ }
+
+ private:
+ const gamma_type* m_gamma;
+ };
+
+
+
+
+ //==================================================pixel_formats_rgb
+ template<class Blender> class pixel_formats_rgb
+ {
+ public:
+ typedef rendering_buffer::row_data row_data;
+ typedef typename Blender::color_type color_type;
+ typedef typename Blender::order_type order_type;
+ typedef typename color_type::value_type value_type;
+ typedef typename color_type::calc_type calc_type;
+ enum
+ {
+ base_shift = color_type::base_shift,
+ base_size = color_type::base_size,
+ base_mask = color_type::base_mask
+ };
+
+ private:
+ //--------------------------------------------------------------------
+ AGG_INLINE void copy_or_blend_pix(value_type* p,
+ const color_type& c,
+ unsigned cover)
+ {
+ if (c.a)
+ {
+ calc_type alpha = (calc_type(c.a) * (cover + 1)) >> 8;
+ if(alpha == base_mask)
+ {
+ p[order_type::R] = c.r;
+ p[order_type::G] = c.g;
+ p[order_type::B] = c.b;
+ }
+ else
+ {
+ m_blender.blend_pix(p, c.r, c.g, c.b, alpha, cover);
+ }
+ }
+ }
+
+ //--------------------------------------------------------------------
+ AGG_INLINE void copy_or_blend_opaque_pix(value_type* p,
+ const color_type& c,
+ unsigned cover)
+ {
+ if(cover == 255)
+ {
+ p[order_type::R] = c.r;
+ p[order_type::G] = c.g;
+ p[order_type::B] = c.b;
+ }
+ else
+ {
+ m_blender.blend_pix(p, c.r, c.g, c.b, (cover + 1) << (base_shift - 8), cover);
+ }
+ }
+
+
+ public:
+ //--------------------------------------------------------------------
+ pixel_formats_rgb(rendering_buffer& rb) :
+ m_rbuf(&rb)
+ {}
+
+ //--------------------------------------------------------------------
+ Blender& blender() { return m_blender; }
+
+ //--------------------------------------------------------------------
+ AGG_INLINE unsigned width() const { return m_rbuf->width(); }
+ AGG_INLINE unsigned height() const { return m_rbuf->height(); }
+
+ //--------------------------------------------------------------------
+ AGG_INLINE color_type pixel(int x, int y) const
+ {
+ value_type* p = (value_type*)m_rbuf->row(y) + x + x + x;
+ return color_type(p[order_type::R],
+ p[order_type::G],
+ p[order_type::B]);
+ }
+
+ //--------------------------------------------------------------------
+ row_data span(int x, int y) const
+ {
+ return row_data(x,
+ width() - 1,
+ m_rbuf->row(y) + x * 3 * sizeof(value_type));
+ }
+
+ //--------------------------------------------------------------------
+ AGG_INLINE void copy_pixel(int x, int y, const color_type& c)
+ {
+ value_type* p = (value_type*)m_rbuf->row(y) + x + x + x;
+ p[order_type::R] = c.r;
+ p[order_type::G] = c.g;
+ p[order_type::B] = c.b;
+ }
+
+ //--------------------------------------------------------------------
+ AGG_INLINE void blend_pixel(int x, int y, const color_type& c, int8u cover)
+ {
+ copy_or_blend_pix((value_type*)m_rbuf->row(y) + x + x + x, c, cover);
+ }
+
+
+ //--------------------------------------------------------------------
+ AGG_INLINE void copy_hline(int x, int y,
+ unsigned len,
+ const color_type& c)
+ {
+ value_type* p = (value_type*)m_rbuf->row(y) + x + x + x;
+ do
+ {
+ p[order_type::R] = c.r;
+ p[order_type::G] = c.g;
+ p[order_type::B] = c.b;
+ p += 3;
+ }
+ while(--len);
+ }
+
+
+ //--------------------------------------------------------------------
+ AGG_INLINE void copy_vline(int x, int y,
+ unsigned len,
+ const color_type& c)
+ {
+ value_type* p = (value_type*)m_rbuf->row(y) + x + x + x;
+ do
+ {
+ p[order_type::R] = c.r;
+ p[order_type::G] = c.g;
+ p[order_type::B] = c.b;
+ p = (value_type*)m_rbuf->next_row(p);
+ }
+ while(--len);
+ }
+
+
+ //--------------------------------------------------------------------
+ void blend_hline(int x, int y,
+ unsigned len,
+ const color_type& c,
+ int8u cover)
+ {
+ if (c.a)
+ {
+ value_type* p = (value_type*)m_rbuf->row(y) + x + x + x;
+ calc_type alpha = (calc_type(c.a) * (calc_type(cover) + 1)) >> 8;
+ if(alpha == base_mask)
+ {
+ do
+ {
+ p[order_type::R] = c.r;
+ p[order_type::G] = c.g;
+ p[order_type::B] = c.b;
+ p += 3;
+ }
+ while(--len);
+ }
+ else
+ {
+ do
+ {
+ m_blender.blend_pix(p, c.r, c.g, c.b, alpha, cover);
+ p += 3;
+ }
+ while(--len);
+ }
+ }
+ }
+
+
+ //--------------------------------------------------------------------
+ void blend_vline(int x, int y,
+ unsigned len,
+ const color_type& c,
+ int8u cover)
+ {
+ if (c.a)
+ {
+ value_type* p = (value_type*)m_rbuf->row(y) + x + x + x;
+ calc_type alpha = (calc_type(c.a) * (cover + 1)) >> 8;
+ if(alpha == base_mask)
+ {
+ do
+ {
+ p[order_type::R] = c.r;
+ p[order_type::G] = c.g;
+ p[order_type::B] = c.b;
+ p = (value_type*)m_rbuf->next_row(p);
+ }
+ while(--len);
+ }
+ else
+ {
+ do
+ {
+ m_blender.blend_pix(p, c.r, c.g, c.b, alpha, cover);
+ p = (value_type*)m_rbuf->next_row(p);
+ }
+ while(--len);
+ }
+ }
+ }
+
+
+ //--------------------------------------------------------------------
+ void blend_solid_hspan(int x, int y,
+ unsigned len,
+ const color_type& c,
+ const int8u* covers)
+ {
+ if (c.a)
+ {
+ value_type* p = (value_type*)m_rbuf->row(y) + x + x + x;
+ do
+ {
+ calc_type alpha = (calc_type(c.a) * (calc_type(*covers) + 1)) >> 8;
+ if(alpha == base_mask)
+ {
+ p[order_type::R] = c.r;
+ p[order_type::G] = c.g;
+ p[order_type::B] = c.b;
+ }
+ else
+ {
+ m_blender.blend_pix(p, c.r, c.g, c.b, alpha, *covers);
+ }
+ p += 3;
+ ++covers;
+ }
+ while(--len);
+ }
+ }
+
+
+ //--------------------------------------------------------------------
+ void blend_solid_vspan(int x, int y,
+ unsigned len,
+ const color_type& c,
+ const int8u* covers)
+ {
+ if (c.a)
+ {
+ value_type* p = (value_type*)m_rbuf->row(y) + x + x + x;
+ do
+ {
+ calc_type alpha = (calc_type(c.a) * (calc_type(*covers) + 1)) >> 8;
+ if(alpha == base_mask)
+ {
+ p[order_type::R] = c.r;
+ p[order_type::G] = c.g;
+ p[order_type::B] = c.b;
+ }
+ else
+ {
+ m_blender.blend_pix(p, c.r, c.g, c.b, alpha, *covers);
+ }
+ p = (value_type*)m_rbuf->next_row(p);
+ ++covers;
+ }
+ while(--len);
+ }
+ }
+
+
+ //--------------------------------------------------------------------
+ void blend_color_hspan(int x, int y,
+ unsigned len,
+ const color_type* colors,
+ const int8u* covers,
+ int8u cover)
+ {
+ value_type* p = (value_type*)m_rbuf->row(y) + x + x + x;
+ if(covers)
+ {
+ do
+ {
+ copy_or_blend_pix(p, *colors++, *covers++);
+ p += 3;
+ }
+ while(--len);
+ }
+ else
+ {
+ if(cover == 255)
+ {
+ do
+ {
+ if(colors->a == base_mask)
+ {
+ p[order_type::R] = colors->r;
+ p[order_type::G] = colors->g;
+ p[order_type::B] = colors->b;
+ }
+ else
+ {
+ copy_or_blend_pix(p, *colors, 255);
+ }
+ p += 3;
+ ++colors;
+ }
+ while(--len);
+ }
+ else
+ {
+ do
+ {
+ copy_or_blend_pix(p, *colors++, cover);
+ p += 3;
+ }
+ while(--len);
+ }
+ }
+ }
+
+
+
+ //--------------------------------------------------------------------
+ void blend_color_vspan(int x, int y,
+ unsigned len,
+ const color_type* colors,
+ const int8u* covers,
+ int8u cover)
+ {
+ value_type* p = (value_type*)m_rbuf->row(y) + x + x + x;
+ if(covers)
+ {
+ do
+ {
+ copy_or_blend_pix(p, *colors++, *covers++);
+ p = (value_type*)m_rbuf->next_row(p);
+ }
+ while(--len);
+ }
+ else
+ {
+ if(cover == 255)
+ {
+ do
+ {
+ if(colors->a == base_mask)
+ {
+ p[order_type::R] = colors->r;
+ p[order_type::G] = colors->g;
+ p[order_type::B] = colors->b;
+ }
+ else
+ {
+ copy_or_blend_pix(p, *colors, 255);
+ }
+ p = (value_type*)m_rbuf->next_row(p);
+ ++colors;
+ }
+ while(--len);
+ }
+ else
+ {
+ do
+ {
+ copy_or_blend_pix(p, *colors++, cover);
+ p = (value_type*)m_rbuf->next_row(p);
+ }
+ while(--len);
+ }
+ }
+ }
+
+
+ //--------------------------------------------------------------------
+ void blend_opaque_color_hspan(int x, int y,
+ unsigned len,
+ const color_type* colors,
+ const int8u* covers,
+ int8u cover)
+ {
+ value_type* p = (value_type*)m_rbuf->row(y) + x + x + x;
+ if(covers)
+ {
+ do
+ {
+ copy_or_blend_opaque_pix(p, *colors++, *covers++);
+ p += 3;
+ }
+ while(--len);
+ }
+ else
+ {
+ if(cover == 255)
+ {
+ do
+ {
+ p[order_type::R] = colors->r;
+ p[order_type::G] = colors->g;
+ p[order_type::B] = colors->b;
+ p += 3;
+ ++colors;
+ }
+ while(--len);
+ }
+ else
+ {
+ do
+ {
+ copy_or_blend_opaque_pix(p, *colors++, cover);
+ p += 3;
+ }
+ while(--len);
+ }
+ }
+ }
+
+
+ //--------------------------------------------------------------------
+ void blend_opaque_color_vspan(int x, int y,
+ unsigned len,
+ const color_type* colors,
+ const int8u* covers,
+ int8u cover)
+ {
+ value_type* p = (value_type*)m_rbuf->row(y) + x + x + x;
+ if(covers)
+ {
+ do
+ {
+ copy_or_blend_opaque_pix(p, *colors++, *covers++);
+ p = (value_type*)m_rbuf->next_row(p);
+ }
+ while(--len);
+ }
+ else
+ {
+ if(cover == 255)
+ {
+ do
+ {
+ p[order_type::R] = colors->r;
+ p[order_type::G] = colors->g;
+ p[order_type::B] = colors->b;
+ p = (value_type*)m_rbuf->next_row(p);
+ ++colors;
+ }
+ while(--len);
+ }
+ else
+ {
+ do
+ {
+ copy_or_blend_opaque_pix(p, *colors++, cover);
+ p = (value_type*)m_rbuf->next_row(p);
+ }
+ while(--len);
+ }
+ }
+ }
+
+ //--------------------------------------------------------------------
+ template<class Function> void for_each_pixel(Function f)
+ {
+ unsigned y;
+ for(y = 0; y < height(); ++y)
+ {
+ unsigned len = width();
+ value_type* p = (value_type*)m_rbuf->row(y);
+ do
+ {
+ f(p);
+ p += 3;
+ }
+ while(--len);
+ }
+ }
+
+ //--------------------------------------------------------------------
+ template<class GammaLut> void apply_gamma_dir(const GammaLut& g)
+ {
+ for_each_pixel(apply_gamma_dir_rgb<color_type, order_type, GammaLut>(g));
+ }
+
+ //--------------------------------------------------------------------
+ template<class GammaLut> void apply_gamma_inv(const GammaLut& g)
+ {
+ for_each_pixel(apply_gamma_inv_rgb<color_type, order_type, GammaLut>(g));
+ }
+
+ //--------------------------------------------------------------------
+ void copy_from(const rendering_buffer& from,
+ int xdst, int ydst,
+ int xsrc, int ysrc,
+ unsigned len)
+ {
+ memmove((value_type*)m_rbuf->row(ydst) + xdst * 3,
+ (const value_type*)from.row(ysrc) + xsrc * 3,
+ sizeof(value_type) * 3 * len);
+ }
+
+
+ //--------------------------------------------------------------------
+ template<class SrcPixelFormatRenderer>
+ void blend_from(const SrcPixelFormatRenderer& from,
+ const int8u* psrc_,
+ int xdst, int ydst,
+ int xsrc, int ysrc,
+ unsigned len)
+ {
+ typedef typename SrcPixelFormatRenderer::order_type src_order;
+
+ const value_type* psrc = (const value_type*)psrc_;
+ value_type* pdst = (value_type*)m_rbuf->row(ydst) + xdst * 3;
+ do
+ {
+ value_type alpha = psrc[src_order::A];
+ if(alpha)
+ {
+ if(alpha == base_mask)
+ {
+ pdst[order_type::R] = psrc[src_order::R];
+ pdst[order_type::G] = psrc[src_order::G];
+ pdst[order_type::B] = psrc[src_order::B];
+ }
+ else
+ {
+ m_blender.blend_pix(pdst,
+ psrc[src_order::R],
+ psrc[src_order::G],
+ psrc[src_order::B],
+ alpha,
+ 255);
+ }
+ }
+ psrc += 4;
+ pdst += 3;
+ }
+ while(--len);
+ }
+
+ private:
+ rendering_buffer* m_rbuf;
+ Blender m_blender;
+ };
+
+ typedef pixel_formats_rgb<blender_rgb<rgba8, order_rgb> > pixfmt_rgb24; //----pixfmt_rgb24
+ typedef pixel_formats_rgb<blender_rgb<rgba8, order_bgr> > pixfmt_bgr24; //----pixfmt_bgr24
+ typedef pixel_formats_rgb<blender_rgb<rgba16, order_rgb> > pixfmt_rgb48; //----pixfmt_rgb48
+ typedef pixel_formats_rgb<blender_rgb<rgba16, order_bgr> > pixfmt_bgr48; //----pixfmt_bgr48
+
+ typedef pixel_formats_rgb<blender_rgb_pre<rgba8, order_rgb> > pixfmt_rgb24_pre; //----pixfmt_rgb24_pre
+ typedef pixel_formats_rgb<blender_rgb_pre<rgba8, order_bgr> > pixfmt_bgr24_pre; //----pixfmt_bgr24_pre
+ typedef pixel_formats_rgb<blender_rgb_pre<rgba16, order_rgb> > pixfmt_rgb48_pre; //----pixfmt_rgb48_pre
+ typedef pixel_formats_rgb<blender_rgb_pre<rgba16, order_bgr> > pixfmt_bgr48_pre; //----pixfmt_bgr48_pre
+
+ //-----------------------------------------------------pixfmt_rgb24_gamma
+ template<class Gamma> class pixfmt_rgb24_gamma :
+ public pixel_formats_rgb<blender_rgb_gamma<rgba8, order_rgb, Gamma> >
+ {
+ public:
+ pixfmt_rgb24_gamma(rendering_buffer& rb, const Gamma& g) :
+ pixel_formats_rgb<blender_rgb_gamma<rgba8, order_rgb, Gamma> >(rb)
+ {
+ this->blender().gamma(g);
+ }
+ };
+
+ //-----------------------------------------------------pixfmt_bgr24_gamma
+ template<class Gamma> class pixfmt_bgr24_gamma :
+ public pixel_formats_rgb<blender_rgb_gamma<rgba8, order_bgr, Gamma> >
+ {
+ public:
+ pixfmt_bgr24_gamma(rendering_buffer& rb, const Gamma& g) :
+ pixel_formats_rgb<blender_rgb_gamma<rgba8, order_bgr, Gamma> >(rb)
+ {
+ this->blender().gamma(g);
+ }
+ };
+
+ //-----------------------------------------------------pixfmt_rgb48_gamma
+ template<class Gamma> class pixfmt_rgb48_gamma :
+ public pixel_formats_rgb<blender_rgb_gamma<rgba16, order_rgb, Gamma> >
+ {
+ public:
+ pixfmt_rgb48_gamma(rendering_buffer& rb, const Gamma& g) :
+ pixel_formats_rgb<blender_rgb_gamma<rgba16, order_rgb, Gamma> >(rb)
+ {
+ this->blender().gamma(g);
+ }
+ };
+
+ //-----------------------------------------------------pixfmt_bgr48_gamma
+ template<class Gamma> class pixfmt_bgr48_gamma :
+ public pixel_formats_rgb<blender_rgb_gamma<rgba16, order_bgr, Gamma> >
+ {
+ public:
+ pixfmt_bgr48_gamma(rendering_buffer& rb, const Gamma& g) :
+ pixel_formats_rgb<blender_rgb_gamma<rgba16, order_bgr, Gamma> >(rb)
+ {
+ this->blender().gamma(g);
+ }
+ };
+
+
+}
+
+#endif
+
diff --git a/agg/inc/agg_pixfmt_rgb_packed.h b/agg/inc/agg_pixfmt_rgb_packed.h
new file mode 100755
index 000000000000..4f582ed59847
--- /dev/null
+++ b/agg/inc/agg_pixfmt_rgb_packed.h
@@ -0,0 +1,1277 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// Adaptation for high precision colors has been sponsored by
+// Liberty Technology Systems, Inc., visit http://lib-sys.com
+//
+// Liberty Technology Systems, Inc. is the provider of
+// PostScript and PDF technology for software developers.
+//
+//----------------------------------------------------------------------------
+
+#ifndef AGG_PIXFMT_RGB_PACKED_INCLUDED
+#define AGG_PIXFMT_RGB_PACKED_INCLUDED
+
+#include <string.h>
+#include "agg_basics.h"
+#include "agg_color_rgba.h"
+#include "agg_rendering_buffer.h"
+
+namespace agg
+{
+ //=========================================================blender_rgb555
+ struct blender_rgb555
+ {
+ typedef rgba8 color_type;
+ typedef color_type::value_type value_type;
+ typedef color_type::calc_type calc_type;
+ typedef int16u pixel_type;
+
+ static AGG_INLINE void blend_pix(pixel_type* p,
+ unsigned cr, unsigned cg, unsigned cb,
+ unsigned alpha,
+ unsigned)
+ {
+ pixel_type rgb = *p;
+ calc_type r = (rgb >> 7) & 0xF8;
+ calc_type g = (rgb >> 2) & 0xF8;
+ calc_type b = (rgb << 3) & 0xF8;
+ *p = (pixel_type)
+ (((((cr - r) * alpha + (r << 8)) >> 1) & 0x7C00) |
+ ((((cg - g) * alpha + (g << 8)) >> 6) & 0x03E0) |
+ (((cb - b) * alpha + (b << 8)) >> 11) | 0x8000);
+ }
+
+ static AGG_INLINE pixel_type make_pix(unsigned r, unsigned g, unsigned b)
+ {
+ return (pixel_type)(((r & 0xF8) << 7) |
+ ((g & 0xF8) << 2) |
+ (b >> 3) | 0x8000);
+ }
+
+ static AGG_INLINE color_type make_color(pixel_type p)
+ {
+ return color_type((p >> 7) & 0xF8,
+ (p >> 2) & 0xF8,
+ (p << 3) & 0xF8);
+ }
+ };
+
+
+ //=====================================================blender_rgb555_pre
+ struct blender_rgb555_pre
+ {
+ typedef rgba8 color_type;
+ typedef color_type::value_type value_type;
+ typedef color_type::calc_type calc_type;
+ typedef int16u pixel_type;
+
+ static AGG_INLINE void blend_pix(pixel_type* p,
+ unsigned cr, unsigned cg, unsigned cb,
+ unsigned alpha,
+ unsigned cover)
+ {
+ alpha = color_type::base_mask - alpha;
+ pixel_type rgb = *p;
+ calc_type r = (rgb >> 7) & 0xF8;
+ calc_type g = (rgb >> 2) & 0xF8;
+ calc_type b = (rgb << 3) & 0xF8;
+ *p = (pixel_type)
+ ((((r * alpha + cr * cover) >> 1) & 0x7C00) |
+ (((g * alpha + cg * cover) >> 6) & 0x03E0) |
+ ((b * alpha + cb * cover) >> 11) | 0x8000);
+ }
+
+ static AGG_INLINE pixel_type make_pix(unsigned r, unsigned g, unsigned b)
+ {
+ return (pixel_type)(((r & 0xF8) << 7) |
+ ((g & 0xF8) << 2) |
+ (b >> 3) | 0x8000);
+ }
+
+ static AGG_INLINE color_type make_color(pixel_type p)
+ {
+ return color_type((p >> 7) & 0xF8,
+ (p >> 2) & 0xF8,
+ (p << 3) & 0xF8);
+ }
+ };
+
+
+
+
+ //=====================================================blender_rgb555_gamma
+ template<class Gamma> class blender_rgb555_gamma
+ {
+ public:
+ typedef rgba8 color_type;
+ typedef color_type::value_type value_type;
+ typedef color_type::calc_type calc_type;
+ typedef int16u pixel_type;
+ typedef Gamma gamma_type;
+
+ blender_rgb555_gamma() : m_gamma(0) {}
+ void gamma(const gamma_type& g) { m_gamma = &g; }
+
+ AGG_INLINE void blend_pix(pixel_type* p,
+ unsigned cr, unsigned cg, unsigned cb,
+ unsigned alpha,
+ unsigned)
+ {
+ pixel_type rgb = *p;
+ calc_type r = m_gamma->dir((rgb >> 7) & 0xF8);
+ calc_type g = m_gamma->dir((rgb >> 2) & 0xF8);
+ calc_type b = m_gamma->dir((rgb << 3) & 0xF8);
+ *p = (pixel_type)
+ (((m_gamma->inv(((m_gamma->dir(cr) - r) * alpha + (r << 8)) >> 8) << 7) & 0x7C00) |
+ ((m_gamma->inv(((m_gamma->dir(cg) - g) * alpha + (g << 8)) >> 8) << 2) & 0x03E0) |
+ (m_gamma->inv(((m_gamma->dir(cb) - b) * alpha + (b << 8)) >> 8) >> 3) | 0x8000);
+ }
+
+ static AGG_INLINE pixel_type make_pix(unsigned r, unsigned g, unsigned b)
+ {
+ return (pixel_type)(((r & 0xF8) << 7) |
+ ((g & 0xF8) << 2) |
+ (b >> 3) | 0x8000);
+ }
+
+ static AGG_INLINE color_type make_color(pixel_type p)
+ {
+ return color_type((p >> 7) & 0xF8,
+ (p >> 2) & 0xF8,
+ (p << 3) & 0xF8);
+ }
+
+ private:
+ const Gamma* m_gamma;
+ };
+
+
+
+
+
+ //=========================================================blender_rgb565
+ struct blender_rgb565
+ {
+ typedef rgba8 color_type;
+ typedef color_type::value_type value_type;
+ typedef color_type::calc_type calc_type;
+ typedef int16u pixel_type;
+
+ static AGG_INLINE void blend_pix(pixel_type* p,
+ unsigned cr, unsigned cg, unsigned cb,
+ unsigned alpha,
+ unsigned)
+ {
+ pixel_type rgb = *p;
+ calc_type r = (rgb >> 8) & 0xF8;
+ calc_type g = (rgb >> 3) & 0xFC;
+ calc_type b = (rgb << 3) & 0xF8;
+ *p = (pixel_type)
+ (((((cr - r) * alpha + (r << 8)) ) & 0xF800) |
+ ((((cg - g) * alpha + (g << 8)) >> 5) & 0x07E0) |
+ (((cb - b) * alpha + (b << 8)) >> 11));
+ }
+
+ static AGG_INLINE pixel_type make_pix(unsigned r, unsigned g, unsigned b)
+ {
+ return (pixel_type)(((r & 0xF8) << 8) | ((g & 0xFC) << 3) | (b >> 3));
+ }
+
+ static AGG_INLINE color_type make_color(pixel_type p)
+ {
+ return color_type((p >> 8) & 0xF8,
+ (p >> 3) & 0xFC,
+ (p << 3) & 0xF8);
+ }
+ };
+
+
+
+ //=====================================================blender_rgb565_pre
+ struct blender_rgb565_pre
+ {
+ typedef rgba8 color_type;
+ typedef color_type::value_type value_type;
+ typedef color_type::calc_type calc_type;
+ typedef int16u pixel_type;
+
+ static AGG_INLINE void blend_pix(pixel_type* p,
+ unsigned cr, unsigned cg, unsigned cb,
+ unsigned alpha,
+ unsigned cover)
+ {
+ alpha = color_type::base_mask - alpha;
+ pixel_type rgb = *p;
+ calc_type r = (rgb >> 8) & 0xF8;
+ calc_type g = (rgb >> 3) & 0xFC;
+ calc_type b = (rgb << 3) & 0xF8;
+ *p = (pixel_type)
+ ((((r * alpha + cr * cover) ) & 0xF800) |
+ (((g * alpha + cg * cover) >> 5 ) & 0x07E0) |
+ ((b * alpha + cb * cover) >> 11));
+ }
+
+ static AGG_INLINE pixel_type make_pix(unsigned r, unsigned g, unsigned b)
+ {
+ return (pixel_type)(((r & 0xF8) << 8) | ((g & 0xFC) << 3) | (b >> 3));
+ }
+
+ static AGG_INLINE color_type make_color(pixel_type p)
+ {
+ return color_type((p >> 8) & 0xF8,
+ (p >> 3) & 0xFC,
+ (p << 3) & 0xF8);
+ }
+ };
+
+
+
+ //=====================================================blender_rgb565_gamma
+ template<class Gamma> class blender_rgb565_gamma
+ {
+ public:
+ typedef rgba8 color_type;
+ typedef color_type::value_type value_type;
+ typedef color_type::calc_type calc_type;
+ typedef int16u pixel_type;
+ typedef Gamma gamma_type;
+
+ blender_rgb565_gamma() : m_gamma(0) {}
+ void gamma(const gamma_type& g) { m_gamma = &g; }
+
+ AGG_INLINE void blend_pix(pixel_type* p,
+ unsigned cr, unsigned cg, unsigned cb,
+ unsigned alpha,
+ unsigned)
+ {
+ pixel_type rgb = *p;
+ calc_type r = m_gamma->dir((rgb >> 8) & 0xF8);
+ calc_type g = m_gamma->dir((rgb >> 3) & 0xFC);
+ calc_type b = m_gamma->dir((rgb << 3) & 0xF8);
+ *p = (pixel_type)
+ (((m_gamma->inv(((m_gamma->dir(cr) - r) * alpha + (r << 8)) >> 8) << 8) & 0xF800) |
+ ((m_gamma->inv(((m_gamma->dir(cg) - g) * alpha + (g << 8)) >> 8) << 3) & 0x07E0) |
+ (m_gamma->inv(((m_gamma->dir(cb) - b) * alpha + (b << 8)) >> 8) >> 3));
+ }
+
+ static AGG_INLINE pixel_type make_pix(unsigned r, unsigned g, unsigned b)
+ {
+ return (pixel_type)(((r & 0xF8) << 8) | ((g & 0xFC) << 3) | (b >> 3));
+ }
+
+ static AGG_INLINE color_type make_color(pixel_type p)
+ {
+ return color_type((p >> 8) & 0xF8,
+ (p >> 3) & 0xFC,
+ (p << 3) & 0xF8);
+ }
+
+ private:
+ const Gamma* m_gamma;
+ };
+
+
+
+ //=====================================================blender_rgbAAA
+ struct blender_rgbAAA
+ {
+ typedef rgba16 color_type;
+ typedef color_type::value_type value_type;
+ typedef color_type::calc_type calc_type;
+ typedef int32u pixel_type;
+
+ static AGG_INLINE void blend_pix(pixel_type* p,
+ unsigned cr, unsigned cg, unsigned cb,
+ unsigned alpha,
+ unsigned)
+ {
+ pixel_type rgb = *p;
+ calc_type r = (rgb >> 14) & 0xFFC0;
+ calc_type g = (rgb >> 4) & 0xFFC0;
+ calc_type b = (rgb << 6) & 0xFFC0;
+ *p = (pixel_type)
+ (((((cr - r) * alpha + (r << 16)) >> 2) & 0x3FF00000) |
+ ((((cg - g) * alpha + (g << 16)) >> 12) & 0x000FFC00) |
+ (((cb - b) * alpha + (b << 16)) >> 22) | 0xC0000000);
+ }
+
+ static AGG_INLINE pixel_type make_pix(unsigned r, unsigned g, unsigned b)
+ {
+ return (pixel_type)(((r & 0xFFC0) << 14) |
+ ((g & 0xFFC0) << 4) |
+ (b >> 6) | 0xC0000000);
+ }
+
+ static AGG_INLINE color_type make_color(pixel_type p)
+ {
+ return color_type((p >> 14) & 0xFFC0,
+ (p >> 4) & 0xFFC0,
+ (p << 6) & 0xFFC0);
+ }
+ };
+
+
+
+ //==================================================blender_rgbAAA_pre
+ struct blender_rgbAAA_pre
+ {
+ typedef rgba16 color_type;
+ typedef color_type::value_type value_type;
+ typedef color_type::calc_type calc_type;
+ typedef int32u pixel_type;
+
+ static AGG_INLINE void blend_pix(pixel_type* p,
+ unsigned cr, unsigned cg, unsigned cb,
+ unsigned alpha,
+ unsigned cover)
+ {
+ alpha = color_type::base_mask - alpha;
+ cover = (cover + 1) << (color_type::base_shift - 8);
+ pixel_type rgb = *p;
+ calc_type r = (rgb >> 14) & 0xFFC0;
+ calc_type g = (rgb >> 4) & 0xFFC0;
+ calc_type b = (rgb << 6) & 0xFFC0;
+ *p = (pixel_type)
+ ((((r * alpha + cr * cover) >> 2) & 0x3FF00000) |
+ (((g * alpha + cg * cover) >> 12) & 0x000FFC00) |
+ ((b * alpha + cb * cover) >> 22) | 0xC0000000);
+ }
+
+ static AGG_INLINE pixel_type make_pix(unsigned r, unsigned g, unsigned b)
+ {
+ return (pixel_type)(((r & 0xFFC0) << 14) |
+ ((g & 0xFFC0) << 4) |
+ (b >> 6) | 0xC0000000);
+ }
+
+ static AGG_INLINE color_type make_color(pixel_type p)
+ {
+ return color_type((p >> 14) & 0xFFC0,
+ (p >> 4) & 0xFFC0,
+ (p << 6) & 0xFFC0);
+ }
+ };
+
+
+
+ //=================================================blender_rgbAAA_gamma
+ template<class Gamma> class blender_rgbAAA_gamma
+ {
+ public:
+ typedef rgba16 color_type;
+ typedef color_type::value_type value_type;
+ typedef color_type::calc_type calc_type;
+ typedef int32u pixel_type;
+ typedef Gamma gamma_type;
+
+ blender_rgbAAA_gamma() : m_gamma(0) {}
+ void gamma(const gamma_type& g) { m_gamma = &g; }
+
+ AGG_INLINE void blend_pix(pixel_type* p,
+ unsigned cr, unsigned cg, unsigned cb,
+ unsigned alpha,
+ unsigned)
+ {
+ pixel_type rgb = *p;
+ calc_type r = m_gamma->dir((rgb >> 14) & 0xFFC0);
+ calc_type g = m_gamma->dir((rgb >> 4) & 0xFFC0);
+ calc_type b = m_gamma->dir((rgb << 6) & 0xFFC0);
+ *p = (pixel_type)
+ (((m_gamma->inv(((m_gamma->dir(cr) - r) * alpha + (r << 16)) >> 16) << 14) & 0x3FF00000) |
+ ((m_gamma->inv(((m_gamma->dir(cg) - g) * alpha + (g << 16)) >> 16) << 4 ) & 0x000FFC00) |
+ (m_gamma->inv(((m_gamma->dir(cb) - b) * alpha + (b << 16)) >> 16) >> 6 ) | 0xC0000000);
+ }
+
+ static AGG_INLINE pixel_type make_pix(unsigned r, unsigned g, unsigned b)
+ {
+ return (pixel_type)(((r & 0xFFC0) << 14) |
+ ((g & 0xFFC0) << 4) |
+ (b >> 6) | 0xC0000000);
+ }
+
+ static AGG_INLINE color_type make_color(pixel_type p)
+ {
+ return color_type((p >> 14) & 0xFFC0,
+ (p >> 4) & 0xFFC0,
+ (p << 6) & 0xFFC0);
+ }
+ private:
+ const Gamma* m_gamma;
+ };
+
+
+ //=====================================================blender_bgrAAA
+ struct blender_bgrAAA
+ {
+ typedef rgba16 color_type;
+ typedef color_type::value_type value_type;
+ typedef color_type::calc_type calc_type;
+ typedef int32u pixel_type;
+
+ static AGG_INLINE void blend_pix(pixel_type* p,
+ unsigned cr, unsigned cg, unsigned cb,
+ unsigned alpha,
+ unsigned)
+ {
+ pixel_type bgr = *p;
+ calc_type b = (bgr >> 14) & 0xFFC0;
+ calc_type g = (bgr >> 4) & 0xFFC0;
+ calc_type r = (bgr << 6) & 0xFFC0;
+ *p = (pixel_type)
+ (((((cb - b) * alpha + (b << 16)) >> 2) & 0x3FF00000) |
+ ((((cg - g) * alpha + (g << 16)) >> 12) & 0x000FFC00) |
+ (((cr - r) * alpha + (r << 16)) >> 22) | 0xC0000000);
+ }
+
+ static AGG_INLINE pixel_type make_pix(unsigned r, unsigned g, unsigned b)
+ {
+ return (pixel_type)(((b & 0xFFC0) << 14) |
+ ((g & 0xFFC0) << 4) |
+ (r >> 6) | 0xC0000000);
+ }
+
+ static AGG_INLINE color_type make_color(pixel_type p)
+ {
+ return color_type((p << 6) & 0xFFC0,
+ (p >> 4) & 0xFFC0,
+ (p >> 14) & 0xFFC0);
+ }
+ };
+
+
+
+ //=================================================blender_bgrAAA_pre
+ struct blender_bgrAAA_pre
+ {
+ typedef rgba16 color_type;
+ typedef color_type::value_type value_type;
+ typedef color_type::calc_type calc_type;
+ typedef int32u pixel_type;
+
+ static AGG_INLINE void blend_pix(pixel_type* p,
+ unsigned cr, unsigned cg, unsigned cb,
+ unsigned alpha,
+ unsigned cover)
+ {
+ alpha = color_type::base_mask - alpha;
+ cover = (cover + 1) << (color_type::base_shift - 8);
+ pixel_type bgr = *p;
+ calc_type b = (bgr >> 14) & 0xFFC0;
+ calc_type g = (bgr >> 4) & 0xFFC0;
+ calc_type r = (bgr << 6) & 0xFFC0;
+ *p = (pixel_type)
+ ((((b * alpha + cb * cover) >> 2) & 0x3FF00000) |
+ (((g * alpha + cg * cover) >> 12) & 0x000FFC00) |
+ ((r * alpha + cr * cover) >> 22) | 0xC0000000);
+ }
+
+ static AGG_INLINE pixel_type make_pix(unsigned r, unsigned g, unsigned b)
+ {
+ return (pixel_type)(((b & 0xFFC0) << 14) |
+ ((g & 0xFFC0) << 4) |
+ (r >> 6) | 0xC0000000);
+ }
+
+ static AGG_INLINE color_type make_color(pixel_type p)
+ {
+ return color_type((p << 6) & 0xFFC0,
+ (p >> 4) & 0xFFC0,
+ (p >> 14) & 0xFFC0);
+ }
+ };
+
+
+
+ //=================================================blender_bgrAAA_gamma
+ template<class Gamma> class blender_bgrAAA_gamma
+ {
+ public:
+ typedef rgba16 color_type;
+ typedef color_type::value_type value_type;
+ typedef color_type::calc_type calc_type;
+ typedef int32u pixel_type;
+ typedef Gamma gamma_type;
+
+ blender_bgrAAA_gamma() : m_gamma(0) {}
+ void gamma(const gamma_type& g) { m_gamma = &g; }
+
+ AGG_INLINE void blend_pix(pixel_type* p,
+ unsigned cr, unsigned cg, unsigned cb,
+ unsigned alpha,
+ unsigned)
+ {
+ pixel_type bgr = *p;
+ calc_type b = m_gamma->dir((bgr >> 14) & 0xFFC0);
+ calc_type g = m_gamma->dir((bgr >> 4) & 0xFFC0);
+ calc_type r = m_gamma->dir((bgr << 6) & 0xFFC0);
+ *p = (pixel_type)
+ (((m_gamma->inv(((m_gamma->dir(cb) - b) * alpha + (b << 16)) >> 16) << 14) & 0x3FF00000) |
+ ((m_gamma->inv(((m_gamma->dir(cg) - g) * alpha + (g << 16)) >> 16) << 4 ) & 0x000FFC00) |
+ (m_gamma->inv(((m_gamma->dir(cr) - r) * alpha + (r << 16)) >> 16) >> 6 ) | 0xC0000000);
+ }
+
+ static AGG_INLINE pixel_type make_pix(unsigned r, unsigned g, unsigned b)
+ {
+ return (pixel_type)(((b & 0xFFC0) << 14) |
+ ((g & 0xFFC0) << 4) |
+ (r >> 6) | 0xC0000000);
+ }
+
+ static AGG_INLINE color_type make_color(pixel_type p)
+ {
+ return color_type((p << 6) & 0xFFC0,
+ (p >> 4) & 0xFFC0,
+ (p >> 14) & 0xFFC0);
+ }
+
+ private:
+ const Gamma* m_gamma;
+ };
+
+
+
+ //=====================================================blender_rgbBBA
+ struct blender_rgbBBA
+ {
+ typedef rgba16 color_type;
+ typedef color_type::value_type value_type;
+ typedef color_type::calc_type calc_type;
+ typedef int32u pixel_type;
+
+ static AGG_INLINE void blend_pix(pixel_type* p,
+ unsigned cr, unsigned cg, unsigned cb,
+ unsigned alpha,
+ unsigned)
+ {
+ pixel_type rgb = *p;
+ calc_type r = (rgb >> 16) & 0xFFE0;
+ calc_type g = (rgb >> 5) & 0xFFE0;
+ calc_type b = (rgb << 6) & 0xFFC0;
+ *p = (pixel_type)
+ (((((cr - r) * alpha + (r << 16)) ) & 0xFFE00000) |
+ ((((cg - g) * alpha + (g << 16)) >> 11) & 0x001FFC00) |
+ (((cb - b) * alpha + (b << 16)) >> 22));
+ }
+
+ static AGG_INLINE pixel_type make_pix(unsigned r, unsigned g, unsigned b)
+ {
+ return (pixel_type)(((r & 0xFFE0) << 16) | ((g & 0xFFE0) << 5) | (b >> 6));
+ }
+
+ static AGG_INLINE color_type make_color(pixel_type p)
+ {
+ return color_type((p >> 16) & 0xFFE0,
+ (p >> 5) & 0xFFE0,
+ (p << 6) & 0xFFC0);
+ }
+ };
+
+
+ //=================================================blender_rgbBBA_pre
+ struct blender_rgbBBA_pre
+ {
+ typedef rgba16 color_type;
+ typedef color_type::value_type value_type;
+ typedef color_type::calc_type calc_type;
+ typedef int32u pixel_type;
+
+ static AGG_INLINE void blend_pix(pixel_type* p,
+ unsigned cr, unsigned cg, unsigned cb,
+ unsigned alpha,
+ unsigned cover)
+ {
+ alpha = color_type::base_mask - alpha;
+ cover = (cover + 1) << (color_type::base_shift - 8);
+ pixel_type rgb = *p;
+ calc_type r = (rgb >> 16) & 0xFFE0;
+ calc_type g = (rgb >> 5) & 0xFFE0;
+ calc_type b = (rgb << 6) & 0xFFC0;
+ *p = (pixel_type)
+ ((((r * alpha + cr * cover) ) & 0xFFE00000) |
+ (((g * alpha + cg * cover) >> 11) & 0x001FFC00) |
+ ((b * alpha + cb * cover) >> 22));
+ }
+
+ static AGG_INLINE pixel_type make_pix(unsigned r, unsigned g, unsigned b)
+ {
+ return (pixel_type)(((r & 0xFFE0) << 16) | ((g & 0xFFE0) << 5) | (b >> 6));
+ }
+
+ static AGG_INLINE color_type make_color(pixel_type p)
+ {
+ return color_type((p >> 16) & 0xFFE0,
+ (p >> 5) & 0xFFE0,
+ (p << 6) & 0xFFC0);
+ }
+ };
+
+
+
+ //=================================================blender_rgbBBA_gamma
+ template<class Gamma> class blender_rgbBBA_gamma
+ {
+ public:
+ typedef rgba16 color_type;
+ typedef color_type::value_type value_type;
+ typedef color_type::calc_type calc_type;
+ typedef int32u pixel_type;
+ typedef Gamma gamma_type;
+
+ blender_rgbBBA_gamma() : m_gamma(0) {}
+ void gamma(const gamma_type& g) { m_gamma = &g; }
+
+ AGG_INLINE void blend_pix(pixel_type* p,
+ unsigned cr, unsigned cg, unsigned cb,
+ unsigned alpha,
+ unsigned)
+ {
+ pixel_type rgb = *p;
+ calc_type r = m_gamma->dir((rgb >> 16) & 0xFFE0);
+ calc_type g = m_gamma->dir((rgb >> 5) & 0xFFE0);
+ calc_type b = m_gamma->dir((rgb << 6) & 0xFFC0);
+ *p = (pixel_type)
+ (((m_gamma->inv(((m_gamma->dir(cr) - r) * alpha + (r << 16)) >> 16) << 16) & 0xFFE00000) |
+ ((m_gamma->inv(((m_gamma->dir(cg) - g) * alpha + (g << 16)) >> 16) << 5 ) & 0x001FFC00) |
+ (m_gamma->inv(((m_gamma->dir(cb) - b) * alpha + (b << 16)) >> 16) >> 6 ));
+ }
+
+ static AGG_INLINE pixel_type make_pix(unsigned r, unsigned g, unsigned b)
+ {
+ return (pixel_type)(((r & 0xFFE0) << 16) | ((g & 0xFFE0) << 5) | (b >> 6));
+ }
+
+ static AGG_INLINE color_type make_color(pixel_type p)
+ {
+ return color_type((p >> 16) & 0xFFE0,
+ (p >> 5) & 0xFFE0,
+ (p << 6) & 0xFFC0);
+ }
+
+ private:
+ const Gamma* m_gamma;
+ };
+
+
+ //=====================================================blender_bgrABB
+ struct blender_bgrABB
+ {
+ typedef rgba16 color_type;
+ typedef color_type::value_type value_type;
+ typedef color_type::calc_type calc_type;
+ typedef int32u pixel_type;
+
+ static AGG_INLINE void blend_pix(pixel_type* p,
+ unsigned cr, unsigned cg, unsigned cb,
+ unsigned alpha,
+ unsigned)
+ {
+ pixel_type bgr = *p;
+ calc_type b = (bgr >> 16) & 0xFFC0;
+ calc_type g = (bgr >> 6) & 0xFFE0;
+ calc_type r = (bgr << 5) & 0xFFE0;
+ *p = (pixel_type)
+ (((((cb - b) * alpha + (b << 16)) ) & 0xFFC00000) |
+ ((((cg - g) * alpha + (g << 16)) >> 10) & 0x003FF800) |
+ (((cr - r) * alpha + (r << 16)) >> 21));
+ }
+
+ static AGG_INLINE pixel_type make_pix(unsigned r, unsigned g, unsigned b)
+ {
+ return (pixel_type)(((b & 0xFFC0) << 16) | ((g & 0xFFE0) << 6) | (r >> 5));
+ }
+
+ static AGG_INLINE color_type make_color(pixel_type p)
+ {
+ return color_type((p << 5) & 0xFFE0,
+ (p >> 6) & 0xFFE0,
+ (p >> 16) & 0xFFC0);
+ }
+ };
+
+
+ //=================================================blender_bgrABB_pre
+ struct blender_bgrABB_pre
+ {
+ typedef rgba16 color_type;
+ typedef color_type::value_type value_type;
+ typedef color_type::calc_type calc_type;
+ typedef int32u pixel_type;
+
+ static AGG_INLINE void blend_pix(pixel_type* p,
+ unsigned cr, unsigned cg, unsigned cb,
+ unsigned alpha,
+ unsigned cover)
+ {
+ alpha = color_type::base_mask - alpha;
+ cover = (cover + 1) << (color_type::base_shift - 8);
+ pixel_type bgr = *p;
+ calc_type b = (bgr >> 16) & 0xFFC0;
+ calc_type g = (bgr >> 6) & 0xFFE0;
+ calc_type r = (bgr << 5) & 0xFFE0;
+ *p = (pixel_type)
+ ((((b * alpha + cb * cover) ) & 0xFFC00000) |
+ (((g * alpha + cg * cover) >> 10) & 0x003FF800) |
+ ((r * alpha + cr * cover) >> 21));
+ }
+
+ static AGG_INLINE pixel_type make_pix(unsigned r, unsigned g, unsigned b)
+ {
+ return (pixel_type)(((b & 0xFFC0) << 16) | ((g & 0xFFE0) << 6) | (r >> 5));
+ }
+
+ static AGG_INLINE color_type make_color(pixel_type p)
+ {
+ return color_type((p << 5) & 0xFFE0,
+ (p >> 6) & 0xFFE0,
+ (p >> 16) & 0xFFC0);
+ }
+ };
+
+
+
+ //=================================================blender_bgrABB_gamma
+ template<class Gamma> class blender_bgrABB_gamma
+ {
+ public:
+ typedef rgba16 color_type;
+ typedef color_type::value_type value_type;
+ typedef color_type::calc_type calc_type;
+ typedef int32u pixel_type;
+ typedef Gamma gamma_type;
+
+ blender_bgrABB_gamma() : m_gamma(0) {}
+ void gamma(const gamma_type& g) { m_gamma = &g; }
+
+ AGG_INLINE void blend_pix(pixel_type* p,
+ unsigned cr, unsigned cg, unsigned cb,
+ unsigned alpha,
+ unsigned)
+ {
+ pixel_type bgr = *p;
+ calc_type b = m_gamma->dir((bgr >> 16) & 0xFFC0);
+ calc_type g = m_gamma->dir((bgr >> 6) & 0xFFE0);
+ calc_type r = m_gamma->dir((bgr << 5) & 0xFFE0);
+ *p = (pixel_type)
+ (((m_gamma->inv(((m_gamma->dir(cb) - b) * alpha + (b << 16)) >> 16) << 16) & 0xFFC00000) |
+ ((m_gamma->inv(((m_gamma->dir(cg) - g) * alpha + (g << 16)) >> 16) << 6 ) & 0x003FF800) |
+ (m_gamma->inv(((m_gamma->dir(cr) - r) * alpha + (r << 16)) >> 16) >> 5 ));
+ }
+
+ static AGG_INLINE pixel_type make_pix(unsigned r, unsigned g, unsigned b)
+ {
+ return (pixel_type)(((b & 0xFFC0) << 16) | ((g & 0xFFE0) << 6) | (r >> 5));
+ }
+
+ static AGG_INLINE color_type make_color(pixel_type p)
+ {
+ return color_type((p << 5) & 0xFFE0,
+ (p >> 6) & 0xFFE0,
+ (p >> 16) & 0xFFC0);
+ }
+
+ private:
+ const Gamma* m_gamma;
+ };
+
+
+
+ //===============================================pixel_formats_rgb_packed
+ template<class Blender> class pixel_formats_rgb_packed
+ {
+ public:
+ typedef rendering_buffer::row_data row_data;
+ typedef typename Blender::color_type color_type;
+ typedef typename Blender::pixel_type pixel_type;
+ typedef typename color_type::value_type value_type;
+ typedef typename color_type::calc_type calc_type;
+ enum
+ {
+ base_shift = color_type::base_shift,
+ base_size = color_type::base_size,
+ base_mask = color_type::base_mask
+ };
+
+ private:
+ //--------------------------------------------------------------------
+ AGG_INLINE void copy_or_blend_pix(pixel_type* p, const color_type& c, unsigned cover)
+ {
+ if (c.a)
+ {
+ calc_type alpha = (calc_type(c.a) * (cover + 1)) >> 8;
+ if(alpha == base_mask)
+ {
+ *p = m_blender.make_pix(c.r, c.g, c.b);
+ }
+ else
+ {
+ m_blender.blend_pix(p, c.r, c.g, c.b, alpha, cover);
+ }
+ }
+ }
+
+ //--------------------------------------------------------------------
+ AGG_INLINE void copy_or_blend_opaque_pix(pixel_type* p, const color_type& c, unsigned cover)
+ {
+ if(cover == 255)
+ {
+ *p = m_blender.make_pix(c.r, c.g, c.b);
+ }
+ else
+ {
+ m_blender.blend_pix(p, c.r, c.g, c.b, (cover + 1) << (base_shift - 8), cover);
+ }
+ }
+
+
+ public:
+ //--------------------------------------------------------------------
+ pixel_formats_rgb_packed(rendering_buffer& rb) :
+ m_rbuf(&rb)
+ {}
+
+ //--------------------------------------------------------------------
+ Blender& blender() { return m_blender; }
+
+ //--------------------------------------------------------------------
+ AGG_INLINE unsigned width() const { return m_rbuf->width(); }
+ AGG_INLINE unsigned height() const { return m_rbuf->height(); }
+
+ //--------------------------------------------------------------------
+ AGG_INLINE color_type pixel(int x, int y) const
+ {
+ pixel_type* p = (pixel_type*)m_rbuf->row(y) + x;
+ return m_blender.make_color(((pixel_type*)m_rbuf->row(y))[x]);
+ }
+
+ //--------------------------------------------------------------------
+ row_data span(int x, int y) const
+ {
+ return row_data(x,
+ width() - 1,
+ m_rbuf->row(y) + x * sizeof(pixel_type));
+ }
+
+ //--------------------------------------------------------------------
+ AGG_INLINE void copy_pixel(int x, int y, const color_type& c)
+ {
+ ((pixel_type*)m_rbuf->row(y))[x] = m_blender.make_pix(c.r, c.g, c.b);
+ }
+
+ //--------------------------------------------------------------------
+ AGG_INLINE void blend_pixel(int x, int y, const color_type& c, int8u cover)
+ {
+ copy_or_blend_pix((pixel_type*)m_rbuf->row(y) + x, c, cover);
+ }
+
+
+ //--------------------------------------------------------------------
+ AGG_INLINE void copy_hline(int x, int y,
+ unsigned len,
+ const color_type& c)
+ {
+ pixel_type* p = (pixel_type*)m_rbuf->row(y) + x;
+ pixel_type v = m_blender.make_pix(c.r, c.g, c.b);
+ do
+ {
+ *p++ = v;
+ }
+ while(--len);
+ }
+
+
+ //--------------------------------------------------------------------
+ AGG_INLINE void copy_vline(int x, int y,
+ unsigned len,
+ const color_type& c)
+ {
+ pixel_type* p = (pixel_type*)m_rbuf->row(y) + x;
+ pixel_type v = m_blender.make_pix(c.r, c.g, c.b);
+ do
+ {
+ *p = v;
+ p = (pixel_type*)m_rbuf->next_row(p);
+ }
+ while(--len);
+ }
+
+
+ //--------------------------------------------------------------------
+ void blend_hline(int x, int y,
+ unsigned len,
+ const color_type& c,
+ int8u cover)
+ {
+ if (c.a)
+ {
+ pixel_type* p = (pixel_type*)m_rbuf->row(y) + x;
+ calc_type alpha = (calc_type(c.a) * (cover + 1)) >> 8;
+ if(alpha == base_mask)
+ {
+ pixel_type v = m_blender.make_pix(c.r, c.g, c.b);
+ do
+ {
+ *p++ = v;
+ }
+ while(--len);
+ }
+ else
+ {
+ do
+ {
+ m_blender.blend_pix(p, c.r, c.g, c.b, alpha, cover);
+ ++p;
+ }
+ while(--len);
+ }
+ }
+ }
+
+
+ //--------------------------------------------------------------------
+ void blend_vline(int x, int y,
+ unsigned len,
+ const color_type& c,
+ int8u cover)
+ {
+ if (c.a)
+ {
+ pixel_type* p = (pixel_type*)m_rbuf->row(y) + x;
+ calc_type alpha = (calc_type(c.a) * (cover + 1)) >> 8;
+ if(alpha == base_mask)
+ {
+ pixel_type v = m_blender.make_pix(c.r, c.g, c.b);
+ do
+ {
+ *p = v;
+ p = (pixel_type*)m_rbuf->next_row(p);
+ }
+ while(--len);
+ }
+ else
+ {
+ do
+ {
+ m_blender.blend_pix(p, c.r, c.g, c.b, alpha, cover);
+ p = (pixel_type*)m_rbuf->next_row(p);
+ }
+ while(--len);
+ }
+ }
+ }
+
+
+ //--------------------------------------------------------------------
+ void blend_solid_hspan(int x, int y,
+ unsigned len,
+ const color_type& c,
+ const int8u* covers)
+ {
+ pixel_type* p = (pixel_type*)m_rbuf->row(y) + x;
+ do
+ {
+ copy_or_blend_pix(p, c, *covers++);
+ ++p;
+ }
+ while(--len);
+ }
+
+
+ //--------------------------------------------------------------------
+ void blend_solid_vspan(int x, int y,
+ unsigned len,
+ const color_type& c,
+ const int8u* covers)
+ {
+ pixel_type* p = (pixel_type*)m_rbuf->row(y) + x;
+ do
+ {
+ copy_or_blend_pix(p, c, *covers++);
+ p = (pixel_type*)m_rbuf->next_row(p);
+ }
+ while(--len);
+ }
+
+
+ //--------------------------------------------------------------------
+ void blend_color_hspan(int x, int y,
+ unsigned len,
+ const color_type* colors,
+ const int8u* covers,
+ int8u cover)
+ {
+ pixel_type* p = (pixel_type*)m_rbuf->row(y) + x;
+ do
+ {
+ copy_or_blend_pix(p++, *colors++, covers ? *covers++ : cover);
+ }
+ while(--len);
+ }
+
+
+ //--------------------------------------------------------------------
+ void blend_color_vspan(int x, int y,
+ unsigned len,
+ const color_type* colors,
+ const int8u* covers,
+ int8u cover)
+ {
+ pixel_type* p = (pixel_type*)m_rbuf->row(y) + x;
+ do
+ {
+ copy_or_blend_pix(p, *colors++, covers ? *covers++ : cover);
+ p = (pixel_type*)m_rbuf->next_row(p);
+ }
+ while(--len);
+ }
+
+
+ //--------------------------------------------------------------------
+ void blend_opaque_color_hspan(int x, int y,
+ unsigned len,
+ const color_type* colors,
+ const int8u* covers,
+ int8u cover)
+ {
+ pixel_type* p = (pixel_type*)m_rbuf->row(y) + x;
+ if(covers)
+ {
+ do
+ {
+ copy_or_blend_opaque_pix(p++, *colors++, *covers++);
+ }
+ while(--len);
+ }
+ else
+ {
+ if(cover == 255)
+ {
+ do
+ {
+ *p++ = m_blender.make_pix(colors->r, colors->g, colors->b);
+ ++colors;
+ }
+ while(--len);
+ }
+ else
+ {
+ do
+ {
+ copy_or_blend_opaque_pix(p++, *colors++, cover);
+ }
+ while(--len);
+ }
+ }
+ }
+
+
+ //--------------------------------------------------------------------
+ void blend_opaque_color_vspan(int x, int y,
+ unsigned len,
+ const color_type* colors,
+ const int8u* covers,
+ int8u cover)
+ {
+ pixel_type* p = (pixel_type*)m_rbuf->row(y) + x;
+ if(covers)
+ {
+ do
+ {
+ copy_or_blend_opaque_pix(p, *colors++, *covers++);
+ p = (pixel_type*)m_rbuf->next_row(p);
+ }
+ while(--len);
+ }
+ else
+ {
+ if(cover == 255)
+ {
+ do
+ {
+ *p = m_blender.make_pix(colors->r, colors->g, colors->b);
+ p = (value_type*)m_rbuf->next_row(p);
+ ++colors;
+ }
+ while(--len);
+ }
+ else
+ {
+ do
+ {
+ copy_or_blend_opaque_pix(p, *colors++, cover);
+ p = (value_type*)m_rbuf->next_row(p);
+ }
+ while(--len);
+ }
+ }
+ }
+
+
+ //--------------------------------------------------------------------
+ void copy_from(const rendering_buffer& from,
+ int xdst, int ydst,
+ int xsrc, int ysrc,
+ unsigned len)
+ {
+ memmove((pixel_type*)m_rbuf->row(ydst) + xdst,
+ (pixel_type*)from.row(ysrc) + xsrc,
+ sizeof(pixel_type) * len);
+ }
+
+
+ //--------------------------------------------------------------------
+ template<class SrcPixelFormatRenderer>
+ void blend_from(const SrcPixelFormatRenderer& from,
+ const int8u* psrc_,
+ int xdst, int ydst,
+ int xsrc, int ysrc,
+ unsigned len)
+ {
+ typedef typename SrcPixelFormatRenderer::order_type src_order;
+
+ const value_type* psrc = (const value_type*)psrc_;
+ pixel_type* pdst = (pixel_type*)m_rbuf->row(ydst) + xdst;
+ do
+ {
+ value_type alpha = psrc[src_order::A];
+ if(alpha)
+ {
+ if(alpha == base_mask)
+ {
+ *pdst = m_blender.make_pix(psrc[src_order::R],
+ psrc[src_order::G],
+ psrc[src_order::B]);
+ }
+ else
+ {
+ m_blender.blend_pix(pdst,
+ psrc[src_order::R],
+ psrc[src_order::G],
+ psrc[src_order::B],
+ alpha,
+ 255);
+ }
+ }
+ psrc += 4;
+ ++pdst;
+ }
+ while(--len);
+ }
+
+
+ private:
+ rendering_buffer* m_rbuf;
+ Blender m_blender;
+ };
+
+ typedef pixel_formats_rgb_packed<blender_rgb555> pixfmt_rgb555; //----pixfmt_rgb555
+ typedef pixel_formats_rgb_packed<blender_rgb565> pixfmt_rgb565; //----pixfmt_rgb565
+
+ typedef pixel_formats_rgb_packed<blender_rgb555_pre> pixfmt_rgb555_pre; //----pixfmt_rgb555_pre
+ typedef pixel_formats_rgb_packed<blender_rgb565_pre> pixfmt_rgb565_pre; //----pixfmt_rgb565_pre
+
+ typedef pixel_formats_rgb_packed<blender_rgbAAA> pixfmt_rgbAAA; //----pixfmt_rgbAAA
+ typedef pixel_formats_rgb_packed<blender_bgrAAA> pixfmt_bgrAAA; //----pixfmt_bgrAAA
+ typedef pixel_formats_rgb_packed<blender_rgbBBA> pixfmt_rgbBBA; //----pixfmt_rgbBBA
+ typedef pixel_formats_rgb_packed<blender_bgrABB> pixfmt_bgrABB; //----pixfmt_bgrABB
+
+ typedef pixel_formats_rgb_packed<blender_rgbAAA_pre> pixfmt_rgbAAA_pre; //----pixfmt_rgbAAA_pre
+ typedef pixel_formats_rgb_packed<blender_bgrAAA_pre> pixfmt_bgrAAA_pre; //----pixfmt_bgrAAA_pre
+ typedef pixel_formats_rgb_packed<blender_rgbBBA_pre> pixfmt_rgbBBA_pre; //----pixfmt_rgbBBA_pre
+ typedef pixel_formats_rgb_packed<blender_bgrABB_pre> pixfmt_bgrABB_pre; //----pixfmt_bgrABB_pre
+
+
+ //-----------------------------------------------------pixfmt_rgb555_gamma
+ template<class Gamma> class pixfmt_rgb555_gamma :
+ public pixel_formats_rgb_packed<blender_rgb555_gamma<Gamma> >
+ {
+ public:
+ pixfmt_rgb555_gamma(rendering_buffer& rb, const Gamma& g) :
+ pixel_formats_rgb_packed<blender_rgb555_gamma<Gamma> >(rb)
+ {
+ this->blender().gamma(g);
+ }
+ };
+
+
+ //-----------------------------------------------------pixfmt_rgb565_gamma
+ template<class Gamma> class pixfmt_rgb565_gamma :
+ public pixel_formats_rgb_packed<blender_rgb565_gamma<Gamma> >
+ {
+ public:
+ pixfmt_rgb565_gamma(rendering_buffer& rb, const Gamma& g) :
+ pixel_formats_rgb_packed<blender_rgb565_gamma<Gamma> >(rb)
+ {
+ this->blender().gamma(g);
+ }
+ };
+
+
+ //-----------------------------------------------------pixfmt_rgbAAA_gamma
+ template<class Gamma> class pixfmt_rgbAAA_gamma :
+ public pixel_formats_rgb_packed<blender_rgbAAA_gamma<Gamma> >
+ {
+ public:
+ pixfmt_rgbAAA_gamma(rendering_buffer& rb, const Gamma& g) :
+ pixel_formats_rgb_packed<blender_rgbAAA_gamma<Gamma> >(rb)
+ {
+ this->blender().gamma(g);
+ }
+ };
+
+
+ //-----------------------------------------------------pixfmt_bgrAAA_gamma
+ template<class Gamma> class pixfmt_bgrAAA_gamma :
+ public pixel_formats_rgb_packed<blender_bgrAAA_gamma<Gamma> >
+ {
+ public:
+ pixfmt_bgrAAA_gamma(rendering_buffer& rb, const Gamma& g) :
+ pixel_formats_rgb_packed<blender_bgrAAA_gamma<Gamma> >(rb)
+ {
+ this->blender().gamma(g);
+ }
+ };
+
+
+ //-----------------------------------------------------pixfmt_rgbBBA_gamma
+ template<class Gamma> class pixfmt_rgbBBA_gamma :
+ public pixel_formats_rgb_packed<blender_rgbBBA_gamma<Gamma> >
+ {
+ public:
+ pixfmt_rgbBBA_gamma(rendering_buffer& rb, const Gamma& g) :
+ pixel_formats_rgb_packed<blender_rgbBBA_gamma<Gamma> >(rb)
+ {
+ this->blender().gamma(g);
+ }
+ };
+
+
+ //-----------------------------------------------------pixfmt_bgrABB_gamma
+ template<class Gamma> class pixfmt_bgrABB_gamma :
+ public pixel_formats_rgb_packed<blender_bgrABB_gamma<Gamma> >
+ {
+ public:
+ pixfmt_bgrABB_gamma(rendering_buffer& rb, const Gamma& g) :
+ pixel_formats_rgb_packed<blender_bgrABB_gamma<Gamma> >(rb)
+ {
+ this->blender().gamma(g);
+ }
+ };
+
+
+}
+
+#endif
+
diff --git a/agg/inc/agg_pixfmt_rgba.h b/agg/inc/agg_pixfmt_rgba.h
new file mode 100755
index 000000000000..3716877e04f7
--- /dev/null
+++ b/agg/inc/agg_pixfmt_rgba.h
@@ -0,0 +1,1312 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// Adaptation for high precision colors has been sponsored by
+// Liberty Technology Systems, Inc., visit http://lib-sys.com
+//
+// Liberty Technology Systems, Inc. is the provider of
+// PostScript and PDF technology for software developers.
+//
+//----------------------------------------------------------------------------
+
+#ifndef AGG_PIXFMT_RGBA_INCLUDED
+#define AGG_PIXFMT_RGBA_INCLUDED
+
+#include <string.h>
+#include "agg_basics.h"
+#include "agg_color_rgba.h"
+#include "agg_rendering_buffer.h"
+
+namespace agg
+{
+
+ //=========================================================multiplier_rgba
+ template<class ColorT, class Order> struct multiplier_rgba
+ {
+ typedef typename ColorT::value_type value_type;
+ typedef typename ColorT::calc_type calc_type;
+
+ //--------------------------------------------------------------------
+ static AGG_INLINE void premultiply(value_type* p)
+ {
+ calc_type a = p[Order::A];
+ if(a < ColorT::base_mask)
+ {
+ if(a == 0)
+ {
+ p[Order::R] = p[Order::G] = p[Order::B] = 0;
+ return;
+ }
+ p[Order::R] = value_type((p[Order::R] * a) >> ColorT::base_shift);
+ p[Order::G] = value_type((p[Order::G] * a) >> ColorT::base_shift);
+ p[Order::B] = value_type((p[Order::B] * a) >> ColorT::base_shift);
+ }
+ }
+
+
+ //--------------------------------------------------------------------
+ static AGG_INLINE void demultiply(value_type* p)
+ {
+ calc_type a = p[Order::A];
+ if(a < ColorT::base_mask)
+ {
+ if(a == 0)
+ {
+ p[Order::R] = p[Order::G] = p[Order::B] = 0;
+ return;
+ }
+ calc_type r = (calc_type(p[Order::R]) * ColorT::base_mask) / a;
+ calc_type g = (calc_type(p[Order::G]) * ColorT::base_mask) / a;
+ calc_type b = (calc_type(p[Order::B]) * ColorT::base_mask) / a;
+ p[Order::R] = value_type((r > ColorT::base_mask) ? ColorT::base_mask : r);
+ p[Order::G] = value_type((g > ColorT::base_mask) ? ColorT::base_mask : g);
+ p[Order::B] = value_type((b > ColorT::base_mask) ? ColorT::base_mask : b);
+ }
+ }
+ };
+
+
+ //=====================================================apply_gamma_dir_rgba
+ template<class ColorT, class Order, class GammaLut> class apply_gamma_dir_rgba
+ {
+ public:
+ typedef typename ColorT::value_type value_type;
+
+ apply_gamma_dir_rgba(const GammaLut& gamma) : m_gamma(gamma) {}
+
+ AGG_INLINE void operator () (value_type* p)
+ {
+ p[Order::R] = m_gamma.dir(p[Order::R]);
+ p[Order::G] = m_gamma.dir(p[Order::G]);
+ p[Order::B] = m_gamma.dir(p[Order::B]);
+ }
+
+ private:
+ const GammaLut& m_gamma;
+ };
+
+
+
+ //=====================================================apply_gamma_inv_rgba
+ template<class ColorT, class Order, class GammaLut> class apply_gamma_inv_rgba
+ {
+ public:
+ typedef typename ColorT::value_type value_type;
+
+ apply_gamma_inv_rgba(const GammaLut& gamma) : m_gamma(gamma) {}
+
+ AGG_INLINE void operator () (value_type* p)
+ {
+ p[Order::R] = m_gamma.inv(p[Order::R]);
+ p[Order::G] = m_gamma.inv(p[Order::G]);
+ p[Order::B] = m_gamma.inv(p[Order::B]);
+ }
+
+ private:
+ const GammaLut& m_gamma;
+ };
+
+
+
+ //=============================================================blender_rgba
+ template<class ColorT, class Order, class PixelT> struct blender_rgba
+ {
+ typedef ColorT color_type;
+ typedef PixelT pixel_type;
+ typedef Order order_type;
+ typedef typename color_type::value_type value_type;
+ typedef typename color_type::calc_type calc_type;
+ enum
+ {
+ base_shift = color_type::base_shift,
+ base_mask = color_type::base_mask
+ };
+
+ //--------------------------------------------------------------------
+ static AGG_INLINE void blend_pix(value_type* p,
+ unsigned cr, unsigned cg, unsigned cb,
+ unsigned alpha,
+ unsigned)
+ {
+ calc_type r = p[Order::R];
+ calc_type g = p[Order::G];
+ calc_type b = p[Order::B];
+ calc_type a = p[Order::A];
+ p[Order::R] = (value_type)(((cr - r) * alpha + (r << base_shift)) >> base_shift);
+ p[Order::G] = (value_type)(((cg - g) * alpha + (g << base_shift)) >> base_shift);
+ p[Order::B] = (value_type)(((cb - b) * alpha + (b << base_shift)) >> base_shift);
+ p[Order::A] = (value_type)((alpha + a) - ((alpha * a + base_mask) >> base_shift));
+ }
+ };
+
+
+ //=========================================================blender_rgba_pre
+ template<class ColorT, class Order, class PixelT> struct blender_rgba_pre
+ {
+ typedef ColorT color_type;
+ typedef PixelT pixel_type;
+ typedef Order order_type;
+ typedef typename color_type::value_type value_type;
+ typedef typename color_type::calc_type calc_type;
+ enum
+ {
+ base_shift = color_type::base_shift,
+ base_mask = color_type::base_mask
+ };
+
+ //--------------------------------------------------------------------
+ static AGG_INLINE void blend_pix(value_type* p,
+ unsigned cr, unsigned cg, unsigned cb,
+ unsigned alpha,
+ unsigned cover)
+ {
+ alpha = color_type::base_mask - alpha;
+ cover = (cover + 1) << (base_shift - 8);
+ p[Order::R] = (value_type)((p[Order::R] * alpha + cr * cover) >> base_shift);
+ p[Order::G] = (value_type)((p[Order::G] * alpha + cg * cover) >> base_shift);
+ p[Order::B] = (value_type)((p[Order::B] * alpha + cb * cover) >> base_shift);
+ p[Order::A] = (value_type)(base_mask - ((alpha * (base_mask - p[Order::A])) >> base_shift));
+ }
+ };
+
+
+
+ //======================================================blender_rgba_plain
+ template<class ColorT, class Order, class PixelT> struct blender_rgba_plain
+ {
+ typedef ColorT color_type;
+ typedef PixelT pixel_type;
+ typedef Order order_type;
+ typedef typename color_type::value_type value_type;
+ typedef typename color_type::calc_type calc_type;
+ enum { base_shift = color_type::base_shift };
+
+ //--------------------------------------------------------------------
+ static AGG_INLINE void blend_pix(value_type* p,
+ unsigned cr, unsigned cg, unsigned cb,
+ unsigned alpha,
+ unsigned)
+ {
+ if(alpha == 0) return;
+ calc_type a = p[Order::A];
+ calc_type r = p[Order::R] * a;
+ calc_type g = p[Order::G] * a;
+ calc_type b = p[Order::B] * a;
+ a = ((alpha + a) << base_shift) - alpha * a;
+ p[Order::A] = (value_type)(a >> base_shift);
+ p[Order::R] = (value_type)((((cr << base_shift) - r) * alpha + (r << base_shift)) / a);
+ p[Order::G] = (value_type)((((cg << base_shift) - g) * alpha + (g << base_shift)) / a);
+ p[Order::B] = (value_type)((((cb << base_shift) - b) * alpha + (b << base_shift)) / a);
+ }
+ };
+
+
+ //====================================================blender_rgba_wrapper
+ template<class Blender> struct blender_rgba_wrapper
+ {
+ typedef typename Blender::color_type color_type;
+ typedef typename Blender::order_type order_type;
+ typedef typename Blender::pixel_type pixel_type;
+ typedef typename color_type::value_type value_type;
+ typedef typename color_type::calc_type calc_type;
+ enum
+ {
+ base_shift = color_type::base_shift,
+ base_size = color_type::base_size,
+ base_mask = color_type::base_mask
+ };
+
+ //--------------------------------------------------------------------
+ static AGG_INLINE void blend_pix(value_type* p,
+ unsigned cr, unsigned cg, unsigned cb,
+ unsigned alpha,
+ unsigned cover)
+ {
+ Blender::blend_pix(p, cr, cg, cb, alpha, cover);
+ }
+
+ //--------------------------------------------------------------------
+ static AGG_INLINE void copy_or_blend_pix(value_type* p,
+ const color_type& c,
+ unsigned cover)
+ {
+ if (c.a)
+ {
+ calc_type alpha = (calc_type(c.a) * (cover + 1)) >> 8;
+ if(alpha == base_mask)
+ {
+ p[order_type::R] = c.r;
+ p[order_type::G] = c.g;
+ p[order_type::B] = c.b;
+ p[order_type::A] = c.a;
+ }
+ else
+ {
+ Blender::blend_pix(p, c.r, c.g, c.b, alpha, cover);
+ }
+ }
+ }
+
+ //--------------------------------------------------------------------
+ static AGG_INLINE void copy_or_blend_opaque_pix(value_type* p,
+ const color_type& c,
+ unsigned cover)
+ {
+ if(cover == 255)
+ {
+ p[order_type::R] = c.r;
+ p[order_type::G] = c.g;
+ p[order_type::B] = c.b;
+ p[order_type::A] = base_mask;
+ }
+ else
+ {
+ Blender::blend_pix(p, c.r, c.g, c.b, (cover + 1) << (base_shift - 8), cover);
+ }
+ }
+ };
+
+
+
+
+ //=======================================================pixel_formats_rgba
+ template<class Blender> class pixel_formats_rgba
+ {
+ public:
+ typedef rendering_buffer::row_data row_data;
+ typedef typename Blender::color_type color_type;
+ typedef typename Blender::order_type order_type;
+ typedef typename Blender::pixel_type pixel_type;
+ typedef typename color_type::value_type value_type;
+ typedef typename color_type::calc_type calc_type;
+ typedef blender_rgba_wrapper<Blender> blender_type;
+ enum
+ {
+ base_shift = color_type::base_shift,
+ base_size = color_type::base_size,
+ base_mask = color_type::base_mask
+ };
+
+ //--------------------------------------------------------------------
+ pixel_formats_rgba(rendering_buffer& rb) :
+ m_rbuf(&rb)
+ {}
+
+ //--------------------------------------------------------------------
+ AGG_INLINE unsigned width() const { return m_rbuf->width(); }
+ AGG_INLINE unsigned height() const { return m_rbuf->height(); }
+
+ //--------------------------------------------------------------------
+ AGG_INLINE color_type pixel(int x, int y) const
+ {
+ const value_type* p = (value_type*)m_rbuf->row(y) + (x << 2);
+ return color_type(p[order_type::R],
+ p[order_type::G],
+ p[order_type::B],
+ p[order_type::A]);
+ }
+
+ //--------------------------------------------------------------------
+ row_data span(int x, int y) const
+ {
+ return row_data(x,
+ width() - 1,
+ m_rbuf->row(y) + x * 4 * sizeof(value_type));
+ }
+
+ //--------------------------------------------------------------------
+ AGG_INLINE void copy_pixel(int x, int y, const color_type& c)
+ {
+ value_type* p = (value_type*)m_rbuf->row(y) + (x << 2);
+ p[order_type::R] = c.r;
+ p[order_type::G] = c.g;
+ p[order_type::B] = c.b;
+ p[order_type::A] = c.a;
+ }
+
+ //--------------------------------------------------------------------
+ AGG_INLINE void blend_pixel(int x, int y, const color_type& c, int8u cover)
+ {
+ blender_type::copy_or_blend_pix((value_type*)m_rbuf->row(y) + (x << 2), c, cover);
+ }
+
+
+ //--------------------------------------------------------------------
+ AGG_INLINE void copy_hline(int x, int y,
+ unsigned len,
+ const color_type& c)
+ {
+ value_type* p = (value_type*)m_rbuf->row(y) + (x << 2);
+ pixel_type v;
+ ((value_type*)&v)[order_type::R] = c.r;
+ ((value_type*)&v)[order_type::G] = c.g;
+ ((value_type*)&v)[order_type::B] = c.b;
+ ((value_type*)&v)[order_type::A] = c.a;
+ do
+ {
+ *(pixel_type*)p = v;
+ p += 4;
+ }
+ while(--len);
+ }
+
+
+ //--------------------------------------------------------------------
+ AGG_INLINE void copy_vline(int x, int y,
+ unsigned len,
+ const color_type& c)
+ {
+ value_type* p = (value_type*)m_rbuf->row(y) + (x << 2);
+ pixel_type v;
+ ((value_type*)&v)[order_type::R] = c.r;
+ ((value_type*)&v)[order_type::G] = c.g;
+ ((value_type*)&v)[order_type::B] = c.b;
+ ((value_type*)&v)[order_type::A] = c.a;
+ do
+ {
+ *(pixel_type*)p = v;
+ p = (value_type*)m_rbuf->next_row(p);
+ }
+ while(--len);
+ }
+
+
+ //--------------------------------------------------------------------
+ void blend_hline(int x, int y,
+ unsigned len,
+ const color_type& c,
+ int8u cover)
+ {
+ if (c.a)
+ {
+ value_type* p = (value_type*)m_rbuf->row(y) + (x << 2);
+ calc_type alpha = (calc_type(c.a) * (cover + 1)) >> 8;
+ if(alpha == base_mask)
+ {
+ pixel_type v;
+ ((value_type*)&v)[order_type::R] = c.r;
+ ((value_type*)&v)[order_type::G] = c.g;
+ ((value_type*)&v)[order_type::B] = c.b;
+ ((value_type*)&v)[order_type::A] = c.a;
+ do
+ {
+ *(pixel_type*)p = v;
+ p += 4;
+ }
+ while(--len);
+ }
+ else
+ {
+ do
+ {
+ blender_type::blend_pix(p, c.r, c.g, c.b, alpha, cover);
+ p += 4;
+ }
+ while(--len);
+ }
+ }
+ }
+
+
+ //--------------------------------------------------------------------
+ void blend_vline(int x, int y,
+ unsigned len,
+ const color_type& c,
+ int8u cover)
+ {
+ if (c.a)
+ {
+ value_type* p = (value_type*)m_rbuf->row(y) + (x << 2);
+ calc_type alpha = (calc_type(c.a) * (cover + 1)) >> 8;
+ if(alpha == base_mask)
+ {
+ pixel_type v;
+ ((value_type*)&v)[order_type::R] = c.r;
+ ((value_type*)&v)[order_type::G] = c.g;
+ ((value_type*)&v)[order_type::B] = c.b;
+ ((value_type*)&v)[order_type::A] = c.a;
+ do
+ {
+ *(pixel_type*)p = v;
+ p = (value_type*)m_rbuf->next_row(p);
+ }
+ while(--len);
+ }
+ else
+ {
+ do
+ {
+ blender_type::blend_pix(p, c.r, c.g, c.b, alpha, cover);
+ p = (value_type*)m_rbuf->next_row(p);
+ }
+ while(--len);
+ }
+ }
+ }
+
+
+ //--------------------------------------------------------------------
+ void blend_solid_hspan(int x, int y,
+ unsigned len,
+ const color_type& c,
+ const int8u* covers)
+ {
+ if (c.a)
+ {
+ value_type* p = (value_type*)m_rbuf->row(y) + (x << 2);
+ do
+ {
+ calc_type alpha = (calc_type(c.a) * (calc_type(*covers) + 1)) >> 8;
+ if(alpha == base_mask)
+ {
+ p[order_type::R] = c.r;
+ p[order_type::G] = c.g;
+ p[order_type::B] = c.b;
+ p[order_type::A] = base_mask;
+ }
+ else
+ {
+ blender_type::blend_pix(p, c.r, c.g, c.b, alpha, *covers);
+ }
+ p += 4;
+ ++covers;
+ }
+ while(--len);
+ }
+ }
+
+
+ //--------------------------------------------------------------------
+ void blend_solid_vspan(int x, int y,
+ unsigned len,
+ const color_type& c,
+ const int8u* covers)
+ {
+ if (c.a)
+ {
+ value_type* p = (value_type*)m_rbuf->row(y) + (x << 2);
+ do
+ {
+ calc_type alpha = (calc_type(c.a) * (calc_type(*covers) + 1)) >> 8;
+ if(alpha == base_mask)
+ {
+ p[order_type::R] = c.r;
+ p[order_type::G] = c.g;
+ p[order_type::B] = c.b;
+ p[order_type::A] = base_mask;
+ }
+ else
+ {
+ blender_type::blend_pix(p, c.r, c.g, c.b, alpha, *covers);
+ }
+ p = (value_type*)m_rbuf->next_row(p);
+ ++covers;
+ }
+ while(--len);
+ }
+ }
+
+
+ //--------------------------------------------------------------------
+ void blend_color_hspan(int x, int y,
+ unsigned len,
+ const color_type* colors,
+ const int8u* covers,
+ int8u cover)
+ {
+ value_type* p = (value_type*)m_rbuf->row(y) + (x << 2);
+ if(covers)
+ {
+ do
+ {
+ blender_type::copy_or_blend_pix(p, *colors++, *covers++);
+ p += 4;
+ }
+ while(--len);
+ }
+ else
+ {
+ if(cover == 255)
+ {
+ do
+ {
+ if(colors->a == base_mask)
+ {
+ p[order_type::R] = colors->r;
+ p[order_type::G] = colors->g;
+ p[order_type::B] = colors->b;
+ p[order_type::A] = base_mask;
+ }
+ else
+ {
+ blender_type::copy_or_blend_pix(p, *colors, 255);
+ }
+ p += 4;
+ ++colors;
+ }
+ while(--len);
+ }
+ else
+ {
+ do
+ {
+ blender_type::copy_or_blend_pix(p, *colors++, cover);
+ p += 4;
+ }
+ while(--len);
+ }
+ }
+ }
+
+
+
+ //--------------------------------------------------------------------
+ void blend_color_vspan(int x, int y,
+ unsigned len,
+ const color_type* colors,
+ const int8u* covers,
+ int8u cover)
+ {
+ value_type* p = (value_type*)m_rbuf->row(y) + (x << 2);
+ if(covers)
+ {
+ do
+ {
+ blender_type::copy_or_blend_pix(p, *colors++, *covers++);
+ p = (value_type*)m_rbuf->next_row(p);
+ }
+ while(--len);
+ }
+ else
+ {
+ if(cover == 255)
+ {
+ do
+ {
+ if(colors->a == base_mask)
+ {
+ p[order_type::R] = colors->r;
+ p[order_type::G] = colors->g;
+ p[order_type::B] = colors->b;
+ p[order_type::A] = base_mask;
+ }
+ else
+ {
+ blender_type::copy_or_blend_pix(p, *colors, 255);
+ }
+ p = (value_type*)m_rbuf->next_row(p);
+ ++colors;
+ }
+ while(--len);
+ }
+ else
+ {
+ do
+ {
+ blender_type::copy_or_blend_pix(p, *colors++, cover);
+ p = (value_type*)m_rbuf->next_row(p);
+ }
+ while(--len);
+ }
+ }
+ }
+
+
+ //--------------------------------------------------------------------
+ void blend_opaque_color_hspan(int x, int y,
+ unsigned len,
+ const color_type* colors,
+ const int8u* covers,
+ int8u cover)
+ {
+ value_type* p = (value_type*)m_rbuf->row(y) + (x << 2);
+ if(covers)
+ {
+ do
+ {
+ blender_type::copy_or_blend_opaque_pix(p, *colors++, *covers++);
+ p += 4;
+ }
+ while(--len);
+ }
+ else
+ {
+ if(cover == 255)
+ {
+ do
+ {
+ p[order_type::R] = colors->r;
+ p[order_type::G] = colors->g;
+ p[order_type::B] = colors->b;
+ p[order_type::A] = base_mask;
+ p += 4;
+ ++colors;
+ }
+ while(--len);
+ }
+ else
+ {
+ do
+ {
+ blender_type::copy_or_blend_opaque_pix(p, *colors++, cover);
+ p += 4;
+ }
+ while(--len);
+ }
+ }
+ }
+
+
+ //--------------------------------------------------------------------
+ void blend_opaque_color_vspan(int x, int y,
+ unsigned len,
+ const color_type* colors,
+ const int8u* covers,
+ int8u cover)
+ {
+ value_type* p = (value_type*)m_rbuf->row(y) + (x << 2);
+ if(covers)
+ {
+ do
+ {
+ blender_type::copy_or_blend_opaque_pix(p, *colors++, *covers++);
+ p = (value_type*)m_rbuf->next_row(p);
+ }
+ while(--len);
+ }
+ else
+ {
+ if(cover == 255)
+ {
+ do
+ {
+ p[order_type::R] = colors->r;
+ p[order_type::G] = colors->g;
+ p[order_type::B] = colors->b;
+ p[order_type::A] = base_mask;
+ p = (value_type*)m_rbuf->next_row(p);
+ ++colors;
+ }
+ while(--len);
+ }
+ else
+ {
+ do
+ {
+ blender_type::copy_or_blend_opaque_pix(p, *colors++, cover);
+ p = (value_type*)m_rbuf->next_row(p);
+ }
+ while(--len);
+ }
+ }
+ }
+
+
+ //--------------------------------------------------------------------
+ template<class Function> void for_each_pixel(Function f)
+ {
+ unsigned y;
+ for(y = 0; y < height(); ++y)
+ {
+ unsigned len = width();
+ value_type* p = (value_type*)m_rbuf->row(y);
+ do
+ {
+ f(p);
+ p += 4;
+ }
+ while(--len);
+ }
+ }
+
+ //--------------------------------------------------------------------
+ void premultiply()
+ {
+ for_each_pixel(multiplier_rgba<color_type, order_type>::premultiply);
+ }
+
+ //--------------------------------------------------------------------
+ void demultiply()
+ {
+ for_each_pixel(multiplier_rgba<color_type, order_type>::demultiply);
+ }
+
+ //--------------------------------------------------------------------
+ template<class GammaLut> void apply_gamma_dir(const GammaLut& g)
+ {
+ for_each_pixel(apply_gamma_dir_rgba<color_type, order_type, GammaLut>(g));
+ }
+
+ //--------------------------------------------------------------------
+ template<class GammaLut> void apply_gamma_inv(const GammaLut& g)
+ {
+ for_each_pixel(apply_gamma_inv_rgba<color_type, order_type, GammaLut>(g));
+ }
+
+ //--------------------------------------------------------------------
+ void copy_from(const rendering_buffer& from,
+ int xdst, int ydst,
+ int xsrc, int ysrc,
+ unsigned len)
+ {
+ memmove((value_type*)m_rbuf->row(ydst) + xdst * 4,
+ (value_type*)from.row(ysrc) + xsrc * 4,
+ sizeof(value_type) * 4 * len);
+ }
+
+
+ //--------------------------------------------------------------------
+ template<class SrcPixelFormatRenderer>
+ void blend_from(const SrcPixelFormatRenderer& from,
+ const int8u* psrc_,
+ int xdst, int ydst,
+ int xsrc, int ysrc,
+ unsigned len)
+ {
+ typedef typename SrcPixelFormatRenderer::order_type src_order;
+
+ const value_type* psrc = (const value_type*)psrc_;
+ value_type* pdst = (value_type*)m_rbuf->row(ydst) + (xdst << 2);
+ int incp = 4;
+ if(xdst > xsrc)
+ {
+ psrc += (len-1) << 2;
+ pdst += (len-1) << 2;
+ incp = -4;
+ }
+ do
+ {
+ value_type alpha = psrc[src_order::A];
+
+ if(alpha)
+ {
+ if(alpha == base_mask)
+ {
+ pdst[order_type::R] = psrc[src_order::R];
+ pdst[order_type::G] = psrc[src_order::G];
+ pdst[order_type::B] = psrc[src_order::B];
+ pdst[order_type::A] = psrc[src_order::A];
+ }
+ else
+ {
+ blender_type::blend_pix(pdst,
+ psrc[src_order::R],
+ psrc[src_order::G],
+ psrc[src_order::B],
+ alpha,
+ 255);
+ }
+ }
+ psrc += incp;
+ pdst += incp;
+ }
+ while(--len);
+ }
+
+ private:
+ rendering_buffer* m_rbuf;
+ };
+
+
+
+
+ //================================================pixfmt_custom_rbuf_rgba
+ template<class Blender, class RenBuf> class pixfmt_custom_rbuf_rgba
+ {
+ public:
+ typedef typename Blender::color_type color_type;
+ typedef typename Blender::order_type order_type;
+ typedef typename Blender::pixel_type pixel_type;
+ typedef typename color_type::value_type value_type;
+ typedef typename color_type::calc_type calc_type;
+ typedef blender_rgba_wrapper<Blender> blender_type;
+ enum
+ {
+ base_shift = color_type::base_shift,
+ base_size = color_type::base_size,
+ base_mask = color_type::base_mask
+ };
+
+ typedef RenBuf rbuf_type;
+ typedef typename rbuf_type::row_data row_data;
+
+ //--------------------------------------------------------------------
+ pixfmt_custom_rbuf_rgba(rbuf_type& rb) : m_rbuf(&rb) {}
+
+ //--------------------------------------------------------------------
+ unsigned width() const { return m_rbuf->width(); }
+ unsigned height() const { return m_rbuf->height(); }
+
+ //--------------------------------------------------------------------
+ color_type pixel(int x, int y) const
+ {
+ const value_type* p = m_rbuf->span_ptr(x, y, 1);
+ return p ? color_type(p[order_type::R],
+ p[order_type::G],
+ p[order_type::B],
+ p[order_type::A]) :
+ color_type::no_color();
+ }
+
+ //--------------------------------------------------------------------
+ row_data span(int x, int y) const
+ {
+ return m_rbuf->span(x, y);
+ }
+
+ //--------------------------------------------------------------------
+ void copy_pixel(int x, int y, const color_type& c)
+ {
+ int8u* p = m_rbuf->span_ptr(x, y, 1);
+ p[order_type::R] = c.r;
+ p[order_type::G] = c.g;
+ p[order_type::B] = c.b;
+ p[order_type::A] = c.b;
+ }
+
+ //--------------------------------------------------------------------
+ void blend_pixel(int x, int y, const color_type& c, int8u cover)
+ {
+ blender_type::copy_or_blend_pix((value_type*)m_rbuf->span_ptr(x, y, 1), c, cover);
+ }
+
+ //--------------------------------------------------------------------
+ void copy_hline(int x, int y, unsigned len, const color_type& c)
+ {
+ value_type* p = (value_type*)m_rbuf->span_ptr(x, y, len);
+ pixel_type v;
+ ((value_type*)&v)[order_type::R] = c.r;
+ ((value_type*)&v)[order_type::G] = c.g;
+ ((value_type*)&v)[order_type::B] = c.b;
+ ((value_type*)&v)[order_type::A] = c.a;
+ do
+ {
+ *(pixel_type*)p = v;
+ p += 4;
+ }
+ while(--len);
+ }
+
+ //--------------------------------------------------------------------
+ void copy_vline(int x, int y, unsigned len, const color_type& c)
+ {
+ pixel_type v;
+ ((value_type*)&v)[order_type::R] = c.r;
+ ((value_type*)&v)[order_type::G] = c.g;
+ ((value_type*)&v)[order_type::B] = c.b;
+ ((value_type*)&v)[order_type::A] = c.a;
+ do
+ {
+ *(pixel_type*)(m_rbuf->span_ptr(x, y++, 1)) = v;
+ }
+ while(--len);
+ }
+
+ //--------------------------------------------------------------------
+ void blend_hline(int x, int y, unsigned len,
+ const color_type& c, int8u cover)
+ {
+ if (c.a)
+ {
+ value_type* p = (value_type*)m_rbuf->span_ptr(x, y, len);
+ calc_type alpha = (calc_type(c.a) * (cover + 1)) >> 8;
+ if(alpha == base_mask)
+ {
+ pixel_type v;
+ ((value_type*)&v)[order_type::R] = c.r;
+ ((value_type*)&v)[order_type::G] = c.g;
+ ((value_type*)&v)[order_type::B] = c.b;
+ ((value_type*)&v)[order_type::A] = c.a;
+ do
+ {
+ *(pixel_type*)p = v;
+ p += 4;
+ }
+ while(--len);
+ }
+ else
+ {
+ do
+ {
+ blender_type::blend_pix(p, c.r, c.g, c.b, alpha, cover);
+ p += 4;
+ }
+ while(--len);
+ }
+ }
+ }
+
+ //--------------------------------------------------------------------
+ void blend_vline(int x, int y, unsigned len,
+ const color_type& c, int8u cover)
+ {
+ if (c.a)
+ {
+ calc_type alpha = (calc_type(c.a) * (cover + 1)) >> 8;
+ if(alpha == base_mask)
+ {
+ pixel_type v;
+ ((value_type*)&v)[order_type::R] = c.r;
+ ((value_type*)&v)[order_type::G] = c.g;
+ ((value_type*)&v)[order_type::B] = c.b;
+ ((value_type*)&v)[order_type::A] = c.a;
+ do
+ {
+ *(pixel_type*)(m_rbuf->span_ptr(x, y++, 1)) = v;
+ }
+ while(--len);
+ }
+ else
+ {
+ do
+ {
+ blender_type::blend_pix(*(pixel_type*)m_rbuf->span_ptr(x, y++, 1),
+ c.r, c.g, c.b, alpha, cover);
+ }
+ while(--len);
+ }
+ }
+ }
+
+
+ //--------------------------------------------------------------------
+ void blend_solid_hspan(int x, int y, unsigned len,
+ const color_type& c, const int8u* covers)
+ {
+ value_type* p = (value_type*)m_rbuf->span_ptr(x, y, len);
+ do
+ {
+ blender_type::copy_or_blend_pix(p, c, *covers++);
+ p += 4;
+ }
+ while(--len);
+ }
+
+
+
+ //--------------------------------------------------------------------
+ void blend_solid_vspan(int x, int y, unsigned len,
+ const color_type& c, const int8u* covers)
+ {
+ do
+ {
+ blender_type::copy_or_blend_pix((value_type*)m_rbuf->span_ptr(x, y++, 1),
+ c,
+ *covers++);
+ }
+ while(--len);
+ }
+
+
+ //--------------------------------------------------------------------
+ void blend_color_hspan(int x, int y, unsigned len,
+ const color_type* colors,
+ const int8u* covers,
+ int8u cover)
+ {
+ value_type* p = (value_type*)m_rbuf->span_ptr(x, y, len);
+ do
+ {
+ blender_type::copy_or_blend_pix(p, *colors++, covers ? *covers++ : cover);
+ p += 4;
+ }
+ while(--len);
+ }
+
+
+ //--------------------------------------------------------------------
+ void blend_color_vspan(int x, int y, unsigned len,
+ const color_type* colors,
+ const int8u* covers,
+ int8u cover)
+ {
+ do
+ {
+ blender_type::copy_or_blend_pix((value_type*)m_rbuf->span_ptr(x, y++, 1),
+ *colors++, covers ? *covers++ : cover);
+ }
+ while(--len);
+ }
+
+
+ //--------------------------------------------------------------------
+ void blend_opaque_color_hspan(int x, int y,
+ unsigned len,
+ const color_type* colors,
+ const int8u* covers,
+ int8u cover)
+ {
+ value_type* p = (value_type*)m_rbuf->span_ptr(x, y, len);
+ if(covers)
+ {
+ do
+ {
+ blender_type::copy_or_blend_opaque_pix(p, *colors++, *covers++);
+ p += 4;
+ }
+ while(--len);
+ }
+ else
+ {
+ if(cover == 255)
+ {
+ do
+ {
+ p[order_type::R] = colors->r;
+ p[order_type::G] = colors->g;
+ p[order_type::B] = colors->b;
+ p[order_type::A] = base_mask;
+ p += 4;
+ ++colors;
+ }
+ while(--len);
+ }
+ else
+ {
+ do
+ {
+ blender_type::copy_or_blend_opaque_pix(p, *colors++, cover);
+ p += 4;
+ }
+ while(--len);
+ }
+ }
+ }
+
+
+ //--------------------------------------------------------------------
+ void blend_opaque_color_vspan(int x, int y,
+ unsigned len,
+ const color_type* colors,
+ const int8u* covers,
+ int8u cover)
+ {
+ if(covers)
+ {
+ do
+ {
+ blender_type::copy_or_blend_opaque_pix((value_type*)m_rbuf->span_ptr(x, y++, 1),
+ *colors++, *covers++);
+ }
+ while(--len);
+ }
+ else
+ {
+ if(cover == 255)
+ {
+ do
+ {
+ value_type* p = (value_type*)m_rbuf->span_ptr(x, y++, 1);
+ p[order_type::R] = colors->r;
+ p[order_type::G] = colors->g;
+ p[order_type::B] = colors->b;
+ p[order_type::A] = base_mask;
+ ++colors;
+ }
+ while(--len);
+ }
+ else
+ {
+ do
+ {
+ blender_type::copy_or_blend_opaque_pix((value_type*)m_rbuf->span_ptr(x, y++, 1),
+ *colors++, cover);
+ }
+ while(--len);
+ }
+ }
+ }
+
+
+
+ //--------------------------------------------------------------------
+ template<class Function> void for_each_pixel(Function f)
+ {
+ unsigned y;
+ for(y = 0; y < height(); ++y)
+ {
+ row_data sp = span(0, y);
+ if(sp.ptr)
+ {
+ value_type* p = (value_type*)sp.ptr;
+ while(sp.x1 <= sp.x2)
+ {
+ f(p);
+ p += 4;
+ ++sp.x1;
+ }
+ }
+ }
+ }
+
+
+ //--------------------------------------------------------------------
+ void premultiply()
+ {
+ for_each_pixel(multiplier_rgba<color_type, order_type>::premultiply);
+ }
+
+ //--------------------------------------------------------------------
+ void demultiply()
+ {
+ for_each_pixel(multiplier_rgba<color_type, order_type>::demultiply);
+ }
+
+ //--------------------------------------------------------------------
+ template<class GammaLut> void apply_gamma_dir(const GammaLut& g)
+ {
+ for_each_pixel(apply_gamma_dir_rgba<color_type, order_type, GammaLut>(g));
+ }
+
+ //--------------------------------------------------------------------
+ template<class GammaLut> void apply_gamma_inv(const GammaLut& g)
+ {
+ for_each_pixel(apply_gamma_inv_rgba<color_type, order_type, GammaLut>(g));
+ }
+
+ //--------------------------------------------------------------------
+ template<class RenBuf2> void copy_from(const RenBuf2& from,
+ int xdst, int ydst,
+ int xsrc, int ysrc,
+ unsigned len)
+ {
+ const int8u* p = from.row(ysrc);
+ if(p)
+ {
+ p += xsrc * 4 * sizeof(value_type);
+ memmove(m_rbuf->span_ptr(xdst, ydst, len),
+ p,
+ len * 4 * sizeof(value_type));
+ }
+ }
+
+
+
+ //--------------------------------------------------------------------
+ template<class SrcPixelFormatRenderer>
+ void blend_from(const SrcPixelFormatRenderer& from,
+ const int8u* psrc_,
+ int xdst, int ydst,
+ int xsrc, int ysrc,
+ unsigned len)
+ {
+ typedef typename SrcPixelFormatRenderer::order_type src_order;
+ const value_type* psrc = (const value_type*)psrc_;
+ value_type* pdst = (value_type*)m_rbuf->span_ptr(xdst, ydst, len);
+
+ int incp = 4;
+ if(xdst > xsrc)
+ {
+ psrc += (len-1) << 2;
+ pdst += (len-1) << 2;
+ incp = -4;
+ }
+ do
+ {
+ value_type alpha = psrc[src_order::A];
+
+ if(alpha)
+ {
+ if(alpha == base_mask)
+ {
+ pdst[order_type::R] = psrc[src_order::R];
+ pdst[order_type::G] = psrc[src_order::G];
+ pdst[order_type::B] = psrc[src_order::B];
+ pdst[order_type::A] = psrc[src_order::A];
+ }
+ else
+ {
+ blender_type::blend_pix(pdst,
+ psrc[src_order::R],
+ psrc[src_order::G],
+ psrc[src_order::B],
+ alpha,
+ 255);
+ }
+ }
+ psrc += incp;
+ pdst += incp;
+ }
+ while(--len);
+ }
+
+
+ private:
+ rbuf_type* m_rbuf;
+ };
+
+
+
+
+
+
+
+ //-----------------------------------------------------------------------
+ typedef blender_rgba<rgba8, order_rgba, int32u> blender_rgba32; //----blender_rgba32
+ typedef blender_rgba<rgba8, order_argb, int32u> blender_argb32; //----blender_argb32
+ typedef blender_rgba<rgba8, order_abgr, int32u> blender_abgr32; //----blender_abgr32
+ typedef blender_rgba<rgba8, order_bgra, int32u> blender_bgra32; //----blender_bgra32
+
+ typedef blender_rgba_pre<rgba8, order_rgba, int32u> blender_rgba32_pre; //----blender_rgba32_pre
+ typedef blender_rgba_pre<rgba8, order_argb, int32u> blender_argb32_pre; //----blender_argb32_pre
+ typedef blender_rgba_pre<rgba8, order_abgr, int32u> blender_abgr32_pre; //----blender_abgr32_pre
+ typedef blender_rgba_pre<rgba8, order_bgra, int32u> blender_bgra32_pre; //----blender_bgra32_pre
+
+ typedef blender_rgba_plain<rgba8, order_rgba, int32u> blender_rgba32_plain; //----blender_rgba32_plain
+ typedef blender_rgba_plain<rgba8, order_argb, int32u> blender_argb32_plain; //----blender_argb32_plain
+ typedef blender_rgba_plain<rgba8, order_abgr, int32u> blender_abgr32_plain; //----blender_abgr32_plain
+ typedef blender_rgba_plain<rgba8, order_bgra, int32u> blender_bgra32_plain; //----blender_bgra32_plain
+
+ struct pixel64_type { int16u c[4]; };
+ typedef blender_rgba<rgba16, order_rgba, pixel64_type> blender_rgba64; //----blender_rgba64
+ typedef blender_rgba<rgba16, order_argb, pixel64_type> blender_argb64; //----blender_argb64
+ typedef blender_rgba<rgba16, order_abgr, pixel64_type> blender_abgr64; //----blender_abgr64
+ typedef blender_rgba<rgba16, order_bgra, pixel64_type> blender_bgra64; //----blender_bgra64
+
+ typedef blender_rgba_pre<rgba16, order_rgba, pixel64_type> blender_rgba64_pre; //----blender_rgba64_pre
+ typedef blender_rgba_pre<rgba16, order_argb, pixel64_type> blender_argb64_pre; //----blender_argb64_pre
+ typedef blender_rgba_pre<rgba16, order_abgr, pixel64_type> blender_abgr64_pre; //----blender_abgr64_pre
+ typedef blender_rgba_pre<rgba16, order_bgra, pixel64_type> blender_bgra64_pre; //----blender_bgra64_pre
+
+
+ //-----------------------------------------------------------------------
+ typedef pixel_formats_rgba<blender_rgba32> pixfmt_rgba32; //----pixfmt_rgba32
+ typedef pixel_formats_rgba<blender_argb32> pixfmt_argb32; //----pixfmt_argb32
+ typedef pixel_formats_rgba<blender_abgr32> pixfmt_abgr32; //----pixfmt_abgr32
+ typedef pixel_formats_rgba<blender_bgra32> pixfmt_bgra32; //----pixfmt_bgra32
+
+ typedef pixel_formats_rgba<blender_rgba32_pre> pixfmt_rgba32_pre; //----pixfmt_rgba32_pre
+ typedef pixel_formats_rgba<blender_argb32_pre> pixfmt_argb32_pre; //----pixfmt_argb32_pre
+ typedef pixel_formats_rgba<blender_abgr32_pre> pixfmt_abgr32_pre; //----pixfmt_abgr32_pre
+ typedef pixel_formats_rgba<blender_bgra32_pre> pixfmt_bgra32_pre; //----pixfmt_bgra32_pre
+
+ typedef pixel_formats_rgba<blender_rgba32_plain> pixfmt_rgba32_plain; //----pixfmt_rgba32_plain
+ typedef pixel_formats_rgba<blender_argb32_plain> pixfmt_argb32_plain; //----pixfmt_argb32_plain
+ typedef pixel_formats_rgba<blender_abgr32_plain> pixfmt_abgr32_plain; //----pixfmt_abgr32_plain
+ typedef pixel_formats_rgba<blender_bgra32_plain> pixfmt_bgra32_plain; //----pixfmt_bgra32_plain
+
+ typedef pixel_formats_rgba<blender_rgba64> pixfmt_rgba64; //----pixfmt_rgba64
+ typedef pixel_formats_rgba<blender_argb64> pixfmt_argb64; //----pixfmt_argb64
+ typedef pixel_formats_rgba<blender_abgr64> pixfmt_abgr64; //----pixfmt_abgr64
+ typedef pixel_formats_rgba<blender_bgra64> pixfmt_bgra64; //----pixfmt_bgra64
+
+ typedef pixel_formats_rgba<blender_rgba64_pre> pixfmt_rgba64_pre; //----pixfmt_rgba64_pre
+ typedef pixel_formats_rgba<blender_argb64_pre> pixfmt_argb64_pre; //----pixfmt_argb64_pre
+ typedef pixel_formats_rgba<blender_abgr64_pre> pixfmt_abgr64_pre; //----pixfmt_abgr64_pre
+ typedef pixel_formats_rgba<blender_bgra64_pre> pixfmt_bgra64_pre; //----pixfmt_bgra64_pre
+}
+
+#endif
+
diff --git a/agg/inc/agg_rasterizer_outline.h b/agg/inc/agg_rasterizer_outline.h
new file mode 100755
index 000000000000..18512e76a1ad
--- /dev/null
+++ b/agg/inc/agg_rasterizer_outline.h
@@ -0,0 +1,146 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+#ifndef AGG_RASTERIZER_OUTLINE_INCLUDED
+#define AGG_RASTERIZER_OUTLINE_INCLUDED
+
+#include "agg_basics.h"
+
+namespace agg
+{
+ //======================================================rasterizer_outline
+ template<class Renderer> class rasterizer_outline
+ {
+ public:
+ rasterizer_outline(Renderer& ren) :
+ m_ren(&ren),
+ m_start_x(0),
+ m_start_y(0),
+ m_vertices(0)
+ {
+ }
+
+ //--------------------------------------------------------------------
+ void move_to(int x, int y)
+ {
+ m_vertices = 1;
+ m_ren->move_to(m_start_x = x, m_start_y = y);
+ }
+
+ //--------------------------------------------------------------------
+ void line_to(int x, int y)
+ {
+ ++m_vertices;
+ m_ren->line_to(x, y);
+ }
+
+ //--------------------------------------------------------------------
+ void move_to_d(double x, double y)
+ {
+ move_to(m_ren->coord(x), m_ren->coord(y));
+ }
+
+ //--------------------------------------------------------------------
+ void line_to_d(double x, double y)
+ {
+ line_to(m_ren->coord(x), m_ren->coord(y));
+ }
+
+ //--------------------------------------------------------------------
+ void close()
+ {
+ if(m_vertices > 2)
+ {
+ line_to(m_start_x, m_start_y);
+ }
+ m_vertices = 0;
+ }
+
+ //--------------------------------------------------------------------
+ void add_vertex(double x, double y, unsigned cmd)
+ {
+ if(is_move_to(cmd))
+ {
+ move_to_d(x, y);
+ }
+ else
+ {
+ if(is_end_poly(cmd))
+ {
+ if(is_closed(cmd)) close();
+ }
+ else
+ {
+ line_to_d(x, y);
+ }
+ }
+ }
+
+
+ //--------------------------------------------------------------------
+ template<class VertexSource>
+ void add_path(VertexSource& vs, unsigned id=0)
+ {
+ double x;
+ double y;
+
+ unsigned cmd;
+ vs.rewind(id);
+ while(!is_stop(cmd = vs.vertex(&x, &y)))
+ {
+ add_vertex(x, y, cmd);
+ }
+ }
+
+
+ //--------------------------------------------------------------------
+ template<class VertexSource, class ColorStorage, class PathId>
+ void render_all_paths(VertexSource& vs,
+ const ColorStorage& colors,
+ const PathId& id,
+ unsigned num_paths)
+ {
+ for(unsigned i = 0; i < num_paths; i++)
+ {
+ m_ren->line_color(colors[i]);
+ add_path(vs, id[i]);
+ }
+ }
+
+
+ //--------------------------------------------------------------------
+ template<class Ctrl> void render_ctrl(Ctrl& c)
+ {
+ unsigned i;
+ for(i = 0; i < c.num_paths(); i++)
+ {
+ m_ren->line_color(c.color(i));
+ add_path(c, i);
+ }
+ }
+
+
+ private:
+ Renderer* m_ren;
+ int m_start_x;
+ int m_start_y;
+ unsigned m_vertices;
+ };
+
+
+}
+
+
+#endif
+
diff --git a/agg/inc/agg_rasterizer_outline_aa.h b/agg/inc/agg_rasterizer_outline_aa.h
new file mode 100755
index 000000000000..3f4d6395fafa
--- /dev/null
+++ b/agg/inc/agg_rasterizer_outline_aa.h
@@ -0,0 +1,516 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+#ifndef AGG_RASTERIZER_OUTLINE_AA_INCLUDED
+#define AGG_RASTERIZER_OUTLINE_AA_INCLUDED
+
+#include "agg_basics.h"
+#include "agg_line_aa_basics.h"
+#include "agg_vertex_sequence.h"
+
+namespace agg
+{
+
+ //-------------------------------------------------------------------------
+ inline bool cmp_dist_start(int d) { return d > 0; }
+ inline bool cmp_dist_end(int d) { return d <= 0; }
+
+
+
+ //-----------------------------------------------------------line_aa_vertex
+ // Vertex (x, y) with the distance to the next one. The last vertex has
+ // the distance between the last and the first points
+ struct line_aa_vertex
+ {
+ int x;
+ int y;
+ int len;
+
+ line_aa_vertex() {}
+ line_aa_vertex(int x_, int y_) :
+ x(x_),
+ y(y_),
+ len(0)
+ {
+ }
+
+ bool operator () (const line_aa_vertex& val)
+ {
+ double dx = val.x - x;
+ double dy = val.y - y;
+ return (len = int(sqrt(dx * dx + dy * dy))) >
+ (line_subpixel_size + line_subpixel_size / 2);
+ }
+ };
+
+
+
+
+ //=======================================================rasterizer_outline_aa
+ template<class Renderer> class rasterizer_outline_aa
+ {
+ private:
+ //------------------------------------------------------------------------
+ struct draw_vars
+ {
+ unsigned idx;
+ int x1, y1, x2, y2;
+ line_parameters curr, next;
+ int lcurr, lnext;
+ int xb1, yb1, xb2, yb2;
+ unsigned flags;
+ };
+
+ void draw(draw_vars& dv, unsigned start, unsigned end);
+
+ public:
+ typedef line_aa_vertex vertex_type;
+ typedef vertex_sequence<vertex_type, 6> vertex_storage_type;
+
+ rasterizer_outline_aa(Renderer& ren) :
+ m_ren(ren),
+ m_accurate_join(m_ren.accurate_join_only()),
+ m_round_cap(false),
+ m_start_x(0),
+ m_start_y(0)
+ {
+ }
+
+ //------------------------------------------------------------------------
+ void accurate_join(bool v)
+ {
+ m_accurate_join = m_ren.accurate_join_only() ? true : v;
+ }
+ bool accurate_join() const { return m_accurate_join; }
+
+ //------------------------------------------------------------------------
+ void round_cap(bool v) { m_round_cap = v; }
+ bool round_cap() const { return m_round_cap; }
+
+ //------------------------------------------------------------------------
+ void move_to(int x, int y)
+ {
+ m_src_vertices.modify_last(vertex_type(m_start_x = x, m_start_y = y));
+ }
+
+ //------------------------------------------------------------------------
+ void line_to(int x, int y)
+ {
+ m_src_vertices.add(vertex_type(x, y));
+ }
+
+ //------------------------------------------------------------------------
+ void move_to_d(double x, double y)
+ {
+ move_to(line_coord(x), line_coord(y));
+ }
+
+ //------------------------------------------------------------------------
+ void line_to_d(double x, double y)
+ {
+ line_to(line_coord(x), line_coord(y));
+ }
+
+ //------------------------------------------------------------------------
+ void render(bool close_polygon);
+
+ //------------------------------------------------------------------------
+ void add_vertex(double x, double y, unsigned cmd)
+ {
+ if(is_move_to(cmd))
+ {
+ render(false);
+ move_to_d(x, y);
+ }
+ else
+ {
+ if(is_end_poly(cmd))
+ {
+ render(is_closed(cmd));
+ if(is_closed(cmd))
+ {
+ move_to(m_start_x, m_start_y);
+ }
+ }
+ else
+ {
+ line_to_d(x, y);
+ }
+ }
+ }
+
+ //------------------------------------------------------------------------
+ template<class VertexSource>
+ void add_path(VertexSource& vs, unsigned id=0)
+ {
+ double x;
+ double y;
+
+ unsigned cmd;
+ vs.rewind(id);
+ while(!is_stop(cmd = vs.vertex(&x, &y)))
+ {
+ add_vertex(x, y, cmd);
+ }
+ render(false);
+ }
+
+
+ //------------------------------------------------------------------------
+ template<class VertexSource, class ColorStorage, class PathId>
+ void render_all_paths(VertexSource& vs,
+ const ColorStorage& colors,
+ const PathId& id,
+ unsigned num_paths)
+ {
+ for(unsigned i = 0; i < num_paths; i++)
+ {
+ m_ren.color(colors[i]);
+ add_path(vs, id[i]);
+ }
+ }
+
+
+ //------------------------------------------------------------------------
+ template<class Ctrl> void render_ctrl(Ctrl& c)
+ {
+ unsigned i;
+ for(i = 0; i < c.num_paths(); i++)
+ {
+ m_ren.color(c.color(i));
+ add_path(c, i);
+ }
+ }
+
+ private:
+ rasterizer_outline_aa(const rasterizer_outline_aa<Renderer>&);
+ const rasterizer_outline_aa<Renderer>& operator =
+ (const rasterizer_outline_aa<Renderer>&);
+
+ Renderer& m_ren;
+ vertex_storage_type m_src_vertices;
+ bool m_accurate_join;
+ bool m_round_cap;
+ int m_start_x;
+ int m_start_y;
+ };
+
+
+
+
+
+
+
+
+ //----------------------------------------------------------------------------
+ template<class Renderer>
+ void rasterizer_outline_aa<Renderer>::draw(draw_vars& dv, unsigned start, unsigned end)
+ {
+ unsigned i;
+ const vertex_storage_type::value_type* v;
+
+ for(i = start; i < end; i++)
+ {
+ switch(dv.flags)
+ {
+ case 0: m_ren.line3(dv.curr, dv.xb1, dv.yb1, dv.xb2, dv.yb2); break;
+ case 1: m_ren.line2(dv.curr, dv.xb2, dv.yb2); break;
+ case 2: m_ren.line1(dv.curr, dv.xb1, dv.yb1); break;
+ case 3: m_ren.line0(dv.curr); break;
+ }
+
+ dv.x1 = dv.x2;
+ dv.y1 = dv.y2;
+ dv.lcurr = dv.lnext;
+ dv.lnext = m_src_vertices[dv.idx].len;
+
+ ++dv.idx;
+ if(dv.idx >= m_src_vertices.size()) dv.idx = 0;
+
+ v = &m_src_vertices[dv.idx];
+ dv.x2 = v->x;
+ dv.y2 = v->y;
+
+ dv.curr = dv.next;
+ dv.next = line_parameters(dv.x1, dv.y1, dv.x2, dv.y2, dv.lnext);
+ dv.xb1 = dv.xb2;
+ dv.yb1 = dv.yb2;
+
+ if(m_accurate_join)
+ {
+ dv.flags = 0;
+ }
+ else
+ {
+ dv.flags >>= 1;
+ dv.flags |= ((dv.curr.diagonal_quadrant() ==
+ dv.next.diagonal_quadrant()) << 1);
+ }
+
+ if((dv.flags & 2) == 0)
+ {
+ bisectrix(dv.curr, dv.next, &dv.xb2, &dv.yb2);
+ }
+ }
+ }
+
+
+
+
+ //----------------------------------------------------------------------------
+ template<class Renderer>
+ void rasterizer_outline_aa<Renderer>::render(bool close_polygon)
+ {
+ m_src_vertices.close(close_polygon);
+ draw_vars dv;
+ const vertex_storage_type::value_type* v;
+ int x1;
+ int y1;
+ int x2;
+ int y2;
+ int lprev;
+
+ if(close_polygon)
+ {
+ if(m_src_vertices.size() >= 3)
+ {
+ dv.idx = 2;
+
+ v = &m_src_vertices[m_src_vertices.size() - 1];
+ x1 = v->x;
+ y1 = v->y;
+ lprev = v->len;
+
+ v = &m_src_vertices[0];
+ x2 = v->x;
+ y2 = v->y;
+ dv.lcurr = v->len;
+ line_parameters prev(x1, y1, x2, y2, lprev);
+
+ v = &m_src_vertices[1];
+ dv.x1 = v->x;
+ dv.y1 = v->y;
+ dv.lnext = v->len;
+ dv.curr = line_parameters(x2, y2, dv.x1, dv.y1, dv.lcurr);
+
+ v = &m_src_vertices[dv.idx];
+ dv.x2 = v->x;
+ dv.y2 = v->y;
+ dv.next = line_parameters(dv.x1, dv.y1, dv.x2, dv.y2, dv.lnext);
+
+ dv.xb1 = 0;
+ dv.yb1 = 0;
+ dv.xb2 = 0;
+ dv.yb2 = 0;
+
+ if(m_accurate_join)
+ {
+ dv.flags = 0;
+ }
+ else
+ {
+ dv.flags =
+ (prev.diagonal_quadrant() == dv.curr.diagonal_quadrant()) |
+ ((dv.curr.diagonal_quadrant() == dv.next.diagonal_quadrant()) << 1);
+ }
+
+ if((dv.flags & 1) == 0)
+ {
+ bisectrix(prev, dv.curr, &dv.xb1, &dv.yb1);
+ }
+
+ if((dv.flags & 2) == 0)
+ {
+ bisectrix(dv.curr, dv.next, &dv.xb2, &dv.yb2);
+ }
+ draw(dv, 0, m_src_vertices.size());
+ }
+ }
+ else
+ {
+ switch(m_src_vertices.size())
+ {
+ case 0:
+ case 1:
+ break;
+
+ case 2:
+ {
+ v = &m_src_vertices[0];
+ x1 = v->x;
+ y1 = v->y;
+ lprev = v->len;
+ v = &m_src_vertices[1];
+ x2 = v->x;
+ y2 = v->y;
+ line_parameters lp(x1, y1, x2, y2, lprev);
+ if(m_round_cap)
+ {
+ m_ren.semidot(cmp_dist_start, x1, y1, x1 + (y2 - y1), y1 - (x2 - x1));
+ }
+ m_ren.line3(lp,
+ x1 + (y2 - y1),
+ y1 - (x2 - x1),
+ x2 + (y2 - y1),
+ y2 - (x2 - x1));
+ if(m_round_cap)
+ {
+ m_ren.semidot(cmp_dist_end, x2, y2, x2 + (y2 - y1), y2 - (x2 - x1));
+ }
+ }
+ break;
+
+ case 3:
+ {
+ int x3, y3;
+ int lnext;
+ v = &m_src_vertices[0];
+ x1 = v->x;
+ y1 = v->y;
+ lprev = v->len;
+ v = &m_src_vertices[1];
+ x2 = v->x;
+ y2 = v->y;
+ lnext = v->len;
+ v = &m_src_vertices[2];
+ x3 = v->x;
+ y3 = v->y;
+ line_parameters lp1(x1, y1, x2, y2, lprev);
+ line_parameters lp2(x2, y2, x3, y3, lnext);
+ bisectrix(lp1, lp2, &dv.xb1, &dv.yb1);
+
+ if(m_round_cap)
+ {
+ m_ren.semidot(cmp_dist_start, x1, y1, x1 + (y2 - y1), y1 - (x2 - x1));
+ }
+ m_ren.line3(lp1,
+ x1 + (y2 - y1),
+ y1 - (x2 - x1),
+ dv.xb1,
+ dv.yb1);
+
+ m_ren.line3(lp2,
+ dv.xb1,
+ dv.yb1,
+ x3 + (y3 - y2),
+ y3 - (x3 - x2));
+ if(m_round_cap)
+ {
+ m_ren.semidot(cmp_dist_end, x3, y3, x3 + (y3 - y2), y3 - (x3 - x2));
+ }
+ }
+ break;
+
+ default:
+ {
+ dv.idx = 3;
+
+ v = &m_src_vertices[0];
+ x1 = v->x;
+ y1 = v->y;
+ lprev = v->len;
+
+ v = &m_src_vertices[1];
+ x2 = v->x;
+ y2 = v->y;
+ dv.lcurr = v->len;
+ line_parameters prev(x1, y1, x2, y2, lprev);
+
+ v = &m_src_vertices[2];
+ dv.x1 = v->x;
+ dv.y1 = v->y;
+ dv.lnext = v->len;
+ dv.curr = line_parameters(x2, y2, dv.x1, dv.y1, dv.lcurr);
+
+ v = &m_src_vertices[dv.idx];
+ dv.x2 = v->x;
+ dv.y2 = v->y;
+ dv.next = line_parameters(dv.x1, dv.y1, dv.x2, dv.y2, dv.lnext);
+
+ dv.xb1 = 0;
+ dv.yb1 = 0;
+ dv.xb2 = 0;
+ dv.yb2 = 0;
+
+ if(m_accurate_join)
+ {
+ dv.flags = 0;
+ }
+ else
+ {
+ dv.flags =
+ (prev.diagonal_quadrant() == dv.curr.diagonal_quadrant()) |
+ ((dv.curr.diagonal_quadrant() == dv.next.diagonal_quadrant()) << 1);
+ }
+
+ if((dv.flags & 1) == 0)
+ {
+ bisectrix(prev, dv.curr, &dv.xb1, &dv.yb1);
+ m_ren.line3(prev,
+ x1 + (y2 - y1),
+ y1 - (x2 - x1),
+ dv.xb1,
+ dv.yb1);
+ }
+ else
+ {
+ m_ren.line1(prev,
+ x1 + (y2 - y1),
+ y1 - (x2 - x1));
+ }
+ if(m_round_cap)
+ {
+ m_ren.semidot(cmp_dist_start, x1, y1, x1 + (y2 - y1), y1 - (x2 - x1));
+ }
+ if((dv.flags & 2) == 0)
+ {
+ bisectrix(dv.curr, dv.next, &dv.xb2, &dv.yb2);
+ }
+
+ draw(dv, 1, m_src_vertices.size() - 2);
+
+ if((dv.flags & 1) == 0)
+ {
+ m_ren.line3(dv.curr,
+ dv.xb1,
+ dv.yb1,
+ dv.curr.x2 + (dv.curr.y2 - dv.curr.y1),
+ dv.curr.y2 - (dv.curr.x2 - dv.curr.x1));
+ }
+ else
+ {
+ m_ren.line2(dv.curr,
+ dv.curr.x2 + (dv.curr.y2 - dv.curr.y1),
+ dv.curr.y2 - (dv.curr.x2 - dv.curr.x1));
+ }
+ if(m_round_cap)
+ {
+ m_ren.semidot(cmp_dist_end, dv.curr.x2, dv.curr.y2,
+ dv.curr.x2 + (dv.curr.y2 - dv.curr.y1),
+ dv.curr.y2 - (dv.curr.x2 - dv.curr.x1));
+ }
+
+ }
+ break;
+ }
+ }
+ m_src_vertices.remove_all();
+ }
+
+
+}
+
+
+#endif
+
diff --git a/agg/inc/agg_rasterizer_scanline_aa.h b/agg/inc/agg_rasterizer_scanline_aa.h
new file mode 100755
index 000000000000..03be55dcc62a
--- /dev/null
+++ b/agg/inc/agg_rasterizer_scanline_aa.h
@@ -0,0 +1,743 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+// The author gratefully acknowleges the support of David Turner,
+// Robert Wilhelm, and Werner Lemberg - the authors of the FreeType
+// libray - in producing this work. See http://www.freetype.org for details.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// Class rasterizer_scanline_aa
+//
+//
+//----------------------------------------------------------------------------
+#ifndef AGG_RASTERIZER_SCANLINE_AA_INCLUDED
+#define AGG_RASTERIZER_SCANLINE_AA_INCLUDED
+
+#include <string.h>
+#include <math.h>
+#include "agg_basics.h"
+#include "agg_math.h"
+#include "agg_gamma_functions.h"
+#include "agg_clip_liang_barsky.h"
+#include "agg_render_scanlines.h"
+
+
+namespace agg
+{
+
+ //------------------------------------------------------------------------
+ // These constants determine the subpixel accuracy, to be more precise,
+ // the number of bits of the fractional part of the coordinates.
+ // The possible coordinate capacity in bits can be calculated by formula:
+ // sizeof(int) * 8 - poly_base_shift * 2, i.e, for 32-bit integers and
+ // 8-bits fractional part the capacity is 16 bits or [-32768...32767].
+ enum
+ {
+ poly_base_shift = 8, //----poly_base_shift
+ poly_base_size = 1 << poly_base_shift, //----poly_base_size
+ poly_base_mask = poly_base_size - 1 //----poly_base_mask
+ };
+
+ //--------------------------------------------------------------poly_coord
+ inline int poly_coord(double c)
+ {
+ return int(c * poly_base_size);
+ }
+
+ //-----------------------------------------------------------------cell_aa
+ // A pixel cell. There're no constructors defined and it was done
+ // intentionally in order to avoid extra overhead when allocating an
+ // array of cells.
+ struct cell_aa
+ {
+ int16 x;
+ int16 y;
+ int packed_coord;
+ int cover;
+ int area;
+
+ void set(int x, int y, int c, int a);
+ void set_coord(int x, int y);
+ void set_cover(int c, int a);
+ void add_cover(int c, int a);
+ };
+
+
+ //--------------------------------------------------------------outline_aa
+ // An internal class that implements the main rasterization algorithm.
+ // Used in the rasterizer. Should not be used direcly.
+ class outline_aa
+ {
+ enum
+ {
+ cell_block_shift = 12,
+ cell_block_size = 1 << cell_block_shift,
+ cell_block_mask = cell_block_size - 1,
+ cell_block_pool = 256,
+ cell_block_limit = 1024
+ };
+
+ public:
+
+ ~outline_aa();
+ outline_aa();
+
+ void reset();
+
+ void move_to(int x, int y);
+ void line_to(int x, int y);
+
+ int min_x() const { return m_min_x; }
+ int min_y() const { return m_min_y; }
+ int max_x() const { return m_max_x; }
+ int max_y() const { return m_max_y; }
+
+ const cell_aa* const* cells();
+ unsigned num_cells() { cells(); return m_num_cells; }
+ bool sorted() const { return m_sorted; }
+
+ private:
+ outline_aa(const outline_aa&);
+ const outline_aa& operator = (const outline_aa&);
+
+ void set_cur_cell(int x, int y);
+ void add_cur_cell();
+ void sort_cells();
+ void render_hline(int ey, int x1, int y1, int x2, int y2);
+ void render_line(int x1, int y1, int x2, int y2);
+ void allocate_block();
+
+ static void qsort_cells(cell_aa** start, unsigned num);
+
+ private:
+ unsigned m_num_blocks;
+ unsigned m_max_blocks;
+ unsigned m_cur_block;
+ unsigned m_num_cells;
+ cell_aa** m_cells;
+ cell_aa* m_cur_cell_ptr;
+ cell_aa** m_sorted_cells;
+ unsigned m_sorted_size;
+ cell_aa m_cur_cell;
+ int m_cur_x;
+ int m_cur_y;
+ int m_min_x;
+ int m_min_y;
+ int m_max_x;
+ int m_max_y;
+ bool m_sorted;
+ };
+
+
+ //----------------------------------------------------------filling_rule_e
+ enum filling_rule_e
+ {
+ fill_non_zero,
+ fill_even_odd
+ };
+
+
+ //==================================================rasterizer_scanline_aa
+ // Polygon rasterizer that is used to render filled polygons with
+ // high-quality Anti-Aliasing. Internally, by default, the class uses
+ // integer coordinates in format 24.8, i.e. 24 bits for integer part
+ // and 8 bits for fractional - see poly_base_shift. This class can be
+ // used in the following way:
+ //
+ // 1. filling_rule(filling_rule_e ft) - optional.
+ //
+ // 2. gamma() - optional.
+ //
+ // 3. reset()
+ //
+ // 4. move_to(x, y) / line_to(x, y) - make the polygon. One can create
+ // more than one contour, but each contour must consist of at least 3
+ // vertices, i.e. move_to(x1, y1); line_to(x2, y2); line_to(x3, y3);
+ // is the absolute minimum of vertices that define a triangle.
+ // The algorithm does not check either the number of vertices nor
+ // coincidence of their coordinates, but in the worst case it just
+ // won't draw anything.
+ // The orger of the vertices (clockwise or counterclockwise)
+ // is important when using the non-zero filling rule (fill_non_zero).
+ // In this case the vertex order of all the contours must be the same
+ // if you want your intersecting polygons to be without "holes".
+ // You actually can use different vertices order. If the contours do not
+ // intersect each other the order is not important anyway. If they do,
+ // contours with the same vertex order will be rendered without "holes"
+ // while the intersecting contours with different orders will have "holes".
+ //
+ // filling_rule() and gamma() can be called anytime before "sweeping".
+ //------------------------------------------------------------------------
+ template<unsigned XScale=1, unsigned AA_Shift=8> class rasterizer_scanline_aa
+ {
+ enum status
+ {
+ status_initial,
+ status_line_to,
+ status_closed
+ };
+
+ struct iterator
+ {
+ const cell_aa* const* cells;
+ int cover;
+ int last_y;
+ };
+
+ public:
+ enum
+ {
+ aa_shift = AA_Shift,
+ aa_num = 1 << aa_shift,
+ aa_mask = aa_num - 1,
+ aa_2num = aa_num * 2,
+ aa_2mask = aa_2num - 1
+ };
+
+ //--------------------------------------------------------------------
+ rasterizer_scanline_aa() :
+ m_filling_rule(fill_non_zero),
+ m_clipped_start_x(0),
+ m_clipped_start_y(0),
+ m_start_x(0),
+ m_start_y(0),
+ m_prev_x(0),
+ m_prev_y(0),
+ m_prev_flags(0),
+ m_status(status_initial),
+ m_clipping(false)
+ {
+ int i;
+ for(i = 0; i < aa_num; i++) m_gamma[i] = i;
+ }
+
+ //--------------------------------------------------------------------
+ template<class GammaF>
+ rasterizer_scanline_aa(const GammaF& gamma_function) :
+ m_filling_rule(fill_non_zero),
+ m_clipped_start_x(0),
+ m_clipped_start_y(0),
+ m_start_x(0),
+ m_start_y(0),
+ m_prev_x(0),
+ m_prev_y(0),
+ m_prev_flags(0),
+ m_status(status_initial),
+ m_clipping(false)
+ {
+ gamma(gamma_function);
+ }
+
+ //--------------------------------------------------------------------
+ void reset();
+ void filling_rule(filling_rule_e filling_rule);
+ void clip_box(double x1, double y1, double x2, double y2);
+ void reset_clipping();
+
+ //--------------------------------------------------------------------
+ template<class GammaF> void gamma(const GammaF& gamma_function)
+ {
+ int i;
+ for(i = 0; i < aa_num; i++)
+ {
+ m_gamma[i] = int(floor(gamma_function(double(i) / aa_mask) * aa_mask + 0.5));
+ }
+ }
+
+ //--------------------------------------------------------------------
+ unsigned apply_gamma(unsigned cover) const
+ {
+ return m_gamma[cover];
+ }
+
+ //--------------------------------------------------------------------
+ void add_vertex(double x, double y, unsigned cmd);
+ void move_to(int x, int y);
+ void line_to(int x, int y);
+ void close_polygon();
+ void move_to_d(double x, double y);
+ void line_to_d(double x, double y);
+
+ //--------------------------------------------------------------------
+ int min_x() const { return m_outline.min_x(); }
+ int min_y() const { return m_outline.min_y(); }
+ int max_x() const { return m_outline.max_x(); }
+ int max_y() const { return m_outline.max_y(); }
+
+ //--------------------------------------------------------------------
+ AGG_INLINE unsigned calculate_alpha(int area) const
+ {
+ int cover = area >> (poly_base_shift*2 + 1 - aa_shift);
+
+ if(cover < 0) cover = -cover;
+ if(m_filling_rule == fill_even_odd)
+ {
+ cover &= aa_2mask;
+ if(cover > aa_num)
+ {
+ cover = aa_2num - cover;
+ }
+ }
+ if(cover > aa_mask) cover = aa_mask;
+ return m_gamma[cover];
+ }
+
+ //--------------------------------------------------------------------
+ void sort()
+ {
+ m_outline.cells();
+ }
+
+
+ //--------------------------------------------------------------------
+ bool rewind_scanlines()
+ {
+ close_polygon();
+ m_iterator.cells = m_outline.cells();
+ if(m_outline.num_cells() == 0)
+ {
+ return false;
+ }
+ m_iterator.cover = 0;
+ m_iterator.last_y = (*m_iterator.cells)->y;
+ return true;
+ }
+
+
+ //--------------------------------------------------------------------
+ template<class Scanline> bool sweep_scanline(Scanline& sl)
+ {
+ sl.reset_spans();
+ for(;;)
+ {
+ const cell_aa* cur_cell = *m_iterator.cells;
+ if(cur_cell == 0) return false;
+ ++m_iterator.cells;
+ m_iterator.last_y = cur_cell->y;
+
+ for(;;)
+ {
+ int coord = cur_cell->packed_coord;
+ int area = cur_cell->area;
+ int last_x = cur_cell->x;
+
+ m_iterator.cover += cur_cell->cover;
+
+ //accumulate all cells with the same coordinates
+ for(; (cur_cell = *m_iterator.cells) != 0; ++m_iterator.cells)
+ {
+ if(cur_cell->packed_coord != coord) break;
+ area += cur_cell->area;
+ m_iterator.cover += cur_cell->cover;
+ }
+
+ int alpha;
+ if(cur_cell == 0 || cur_cell->y != m_iterator.last_y)
+ {
+
+ if(area)
+ {
+ alpha = calculate_alpha((m_iterator.cover << (poly_base_shift + 1)) - area);
+ if(alpha)
+ {
+ sl.add_cell(last_x, alpha);
+ }
+ ++last_x;
+ }
+ break;
+ }
+
+ ++m_iterator.cells;
+
+ if(area)
+ {
+ alpha = calculate_alpha((m_iterator.cover << (poly_base_shift + 1)) - area);
+ if(alpha)
+ {
+ sl.add_cell(last_x, alpha);
+ }
+ ++last_x;
+ }
+
+ if(cur_cell->x > last_x)
+ {
+ alpha = calculate_alpha(m_iterator.cover << (poly_base_shift + 1));
+ if(alpha)
+ {
+ sl.add_span(last_x, cur_cell->x - last_x, alpha);
+ }
+ }
+ }
+ if(sl.num_spans())
+ {
+ sl.finalize(m_iterator.last_y);
+ break;
+ }
+ }
+ return true;
+ }
+
+
+ //--------------------------------------------------------------------
+ bool hit_test(int tx, int ty);
+
+
+ //--------------------------------------------------------------------
+ void add_xy(const double* x, const double* y, unsigned n)
+ {
+ if(n > 2)
+ {
+ move_to_d(*x++, *y++);
+ --n;
+ do
+ {
+ line_to_d(*x++, *y++);
+ }
+ while(--n);
+ }
+ }
+
+ //-------------------------------------------------------------------
+ template<class VertexSource>
+ void add_path(VertexSource& vs, unsigned id=0)
+ {
+ double x;
+ double y;
+
+ unsigned cmd;
+ vs.rewind(id);
+ while(!is_stop(cmd = vs.vertex(&x, &y)))
+ {
+ add_vertex(x, y, cmd);
+ }
+ }
+
+
+ private:
+ //--------------------------------------------------------------------
+ // Disable copying
+ rasterizer_scanline_aa(const rasterizer_scanline_aa<XScale, AA_Shift>&);
+ const rasterizer_scanline_aa<XScale, AA_Shift>&
+ operator = (const rasterizer_scanline_aa<XScale, AA_Shift>&);
+
+ //--------------------------------------------------------------------
+ void move_to_no_clip(int x, int y);
+ void line_to_no_clip(int x, int y);
+ void close_polygon_no_clip();
+ void clip_segment(int x, int y);
+
+ private:
+ outline_aa m_outline;
+ int m_gamma[aa_num];
+ filling_rule_e m_filling_rule;
+ int m_clipped_start_x;
+ int m_clipped_start_y;
+ int m_start_x;
+ int m_start_y;
+ int m_prev_x;
+ int m_prev_y;
+ unsigned m_prev_flags;
+ unsigned m_status;
+ rect m_clip_box;
+ bool m_clipping;
+ iterator m_iterator;
+ };
+
+
+
+
+
+
+
+
+
+
+ //------------------------------------------------------------------------
+ template<unsigned XScale, unsigned AA_Shift>
+ void rasterizer_scanline_aa<XScale, AA_Shift>::reset()
+ {
+ m_outline.reset();
+ m_status = status_initial;
+ }
+
+ //------------------------------------------------------------------------
+ template<unsigned XScale, unsigned AA_Shift>
+ void rasterizer_scanline_aa<XScale, AA_Shift>::filling_rule(filling_rule_e _filling_rule)
+ {
+ m_filling_rule = _filling_rule;
+ }
+
+ //------------------------------------------------------------------------
+ template<unsigned XScale, unsigned AA_Shift>
+ void rasterizer_scanline_aa<XScale, AA_Shift>::clip_box(double x1, double y1, double x2, double y2)
+ {
+ reset();
+ m_clip_box = rect(poly_coord(x1), poly_coord(y1),
+ poly_coord(x2), poly_coord(y2));
+ m_clip_box.normalize();
+ m_clipping = true;
+ }
+
+ //------------------------------------------------------------------------
+ template<unsigned XScale, unsigned AA_Shift>
+ void rasterizer_scanline_aa<XScale, AA_Shift>::reset_clipping()
+ {
+ reset();
+ m_clipping = false;
+ }
+
+
+
+ //------------------------------------------------------------------------
+ template<unsigned XScale, unsigned AA_Shift>
+ void rasterizer_scanline_aa<XScale, AA_Shift>::move_to_no_clip(int x, int y)
+ {
+ if(m_status == status_line_to)
+ {
+ close_polygon_no_clip();
+ }
+ m_outline.move_to(x * XScale, y);
+ m_clipped_start_x = x;
+ m_clipped_start_y = y;
+ m_status = status_line_to;
+ }
+
+
+ //------------------------------------------------------------------------
+ template<unsigned XScale, unsigned AA_Shift>
+ void rasterizer_scanline_aa<XScale, AA_Shift>::line_to_no_clip(int x, int y)
+ {
+ if(m_status != status_initial)
+ {
+ m_outline.line_to(x * XScale, y);
+ m_status = status_line_to;
+ }
+ }
+
+
+ //------------------------------------------------------------------------
+ template<unsigned XScale, unsigned AA_Shift>
+ void rasterizer_scanline_aa<XScale, AA_Shift>::close_polygon_no_clip()
+ {
+ if(m_status == status_line_to)
+ {
+ m_outline.line_to(m_clipped_start_x * XScale, m_clipped_start_y);
+ m_status = status_closed;
+ }
+ }
+
+
+ //------------------------------------------------------------------------
+ template<unsigned XScale, unsigned AA_Shift>
+ void rasterizer_scanline_aa<XScale, AA_Shift>::clip_segment(int x, int y)
+ {
+ unsigned flags = clipping_flags(x, y, m_clip_box);
+ if(m_prev_flags == flags)
+ {
+ if(flags == 0)
+ {
+ if(m_status == status_initial)
+ {
+ move_to_no_clip(x, y);
+ }
+ else
+ {
+ line_to_no_clip(x, y);
+ }
+ }
+ }
+ else
+ {
+ int cx[4];
+ int cy[4];
+ unsigned n = clip_liang_barsky(m_prev_x, m_prev_y,
+ x, y,
+ m_clip_box,
+ cx, cy);
+ const int* px = cx;
+ const int* py = cy;
+ while(n--)
+ {
+ if(m_status == status_initial)
+ {
+ move_to_no_clip(*px++, *py++);
+ }
+ else
+ {
+ line_to_no_clip(*px++, *py++);
+ }
+ }
+ }
+ m_prev_flags = flags;
+ m_prev_x = x;
+ m_prev_y = y;
+ }
+
+
+
+ //------------------------------------------------------------------------
+ template<unsigned XScale, unsigned AA_Shift>
+ void rasterizer_scanline_aa<XScale, AA_Shift>::add_vertex(double x, double y, unsigned cmd)
+ {
+ if(is_close(cmd))
+ {
+ close_polygon();
+ }
+ else
+ {
+ if(is_move_to(cmd))
+ {
+ move_to(poly_coord(x), poly_coord(y));
+ }
+ else
+ {
+ if(is_vertex(cmd))
+ {
+ line_to(poly_coord(x), poly_coord(y));
+ }
+ }
+ }
+ }
+
+
+
+ //------------------------------------------------------------------------
+ template<unsigned XScale, unsigned AA_Shift>
+ void rasterizer_scanline_aa<XScale, AA_Shift>::move_to(int x, int y)
+ {
+ if(m_clipping)
+ {
+ if(m_outline.sorted())
+ {
+ reset();
+ }
+ if(m_status == status_line_to)
+ {
+ close_polygon();
+ }
+ m_prev_x = m_start_x = x;
+ m_prev_y = m_start_y = y;
+ m_status = status_initial;
+ m_prev_flags = clipping_flags(x, y, m_clip_box);
+ if(m_prev_flags == 0)
+ {
+ move_to_no_clip(x, y);
+ }
+ }
+ else
+ {
+ move_to_no_clip(x, y);
+ }
+ }
+
+ //------------------------------------------------------------------------
+ template<unsigned XScale, unsigned AA_Shift>
+ void rasterizer_scanline_aa<XScale, AA_Shift>::line_to(int x, int y)
+ {
+ if(m_clipping)
+ {
+ clip_segment(x, y);
+ }
+ else
+ {
+ line_to_no_clip(x, y);
+ }
+ }
+
+ //------------------------------------------------------------------------
+ template<unsigned XScale, unsigned AA_Shift>
+ void rasterizer_scanline_aa<XScale, AA_Shift>::close_polygon()
+ {
+ if(m_clipping)
+ {
+ clip_segment(m_start_x, m_start_y);
+ }
+ close_polygon_no_clip();
+ }
+
+ //------------------------------------------------------------------------
+ template<unsigned XScale, unsigned AA_Shift>
+ void rasterizer_scanline_aa<XScale, AA_Shift>::move_to_d(double x, double y)
+ {
+ move_to(poly_coord(x), poly_coord(y));
+ }
+
+ //------------------------------------------------------------------------
+ template<unsigned XScale, unsigned AA_Shift>
+ void rasterizer_scanline_aa<XScale, AA_Shift>::line_to_d(double x, double y)
+ {
+ line_to(poly_coord(x), poly_coord(y));
+ }
+
+
+ //------------------------------------------------------------------------
+ template<unsigned XScale, unsigned AA_Shift>
+ bool rasterizer_scanline_aa<XScale, AA_Shift>::hit_test(int tx, int ty)
+ {
+ close_polygon();
+ const cell_aa* const* cells = m_outline.cells();
+ if(m_outline.num_cells() == 0) return false;
+
+ int cover = 0;
+
+ const cell_aa* cur_cell = *cells++;
+ for(;;)
+ {
+ int alpha;
+ int coord = cur_cell->packed_coord;
+ int x = cur_cell->x;
+ int y = cur_cell->y;
+
+ if(y > ty) return false;
+
+ int area = cur_cell->area;
+ cover += cur_cell->cover;
+
+ while((cur_cell = *cells++) != 0)
+ {
+ if(cur_cell->packed_coord != coord) break;
+ area += cur_cell->area;
+ cover += cur_cell->cover;
+ }
+
+ if(area)
+ {
+ alpha = calculate_alpha((cover << (poly_base_shift + 1)) - area);
+ if(alpha)
+ {
+ if(tx == x && ty == y) return true;
+ }
+ x++;
+ }
+
+ if(!cur_cell) break;
+
+ if(cur_cell->x > x)
+ {
+ alpha = calculate_alpha(cover << (poly_base_shift + 1));
+ if(alpha)
+ {
+ if(ty == y && tx >= x && tx <= cur_cell->x) return true;
+ }
+ }
+ }
+ return false;
+ }
+
+}
+
+
+
+#endif
+
diff --git a/agg/inc/agg_render_scanlines.h b/agg/inc/agg_render_scanlines.h
new file mode 100755
index 000000000000..60ddecf5c2d6
--- /dev/null
+++ b/agg/inc/agg_render_scanlines.h
@@ -0,0 +1,66 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+
+#ifndef AGG_RENDER_SCANLINES_INCLUDED
+#define AGG_RENDER_SCANLINES_INCLUDED
+
+#include "agg_basics.h"
+
+namespace agg
+{
+ //========================================================render_scanlines
+ template<class Rasterizer, class Scanline, class Renderer>
+ void render_scanlines(Rasterizer& ras, Scanline& sl, Renderer& ren)
+ {
+ if(ras.rewind_scanlines())
+ {
+ sl.reset(ras.min_x(), ras.max_x());
+ ren.prepare(unsigned(ras.max_x() - ras.min_x() + 2));
+
+ while(ras.sweep_scanline(sl))
+ {
+ ren.render(sl);
+ }
+ }
+ }
+
+
+ //========================================================render_all_paths
+ template<class Rasterizer, class Scanline, class Renderer,
+ class VertexSource, class ColorStorage, class PathId>
+ void render_all_paths(Rasterizer& ras,
+ Scanline& sl,
+ Renderer& r,
+ VertexSource& vs,
+ const ColorStorage& as,
+ const PathId& id,
+ unsigned num_paths)
+ {
+ for(unsigned i = 0; i < num_paths; i++)
+ {
+ ras.reset();
+ ras.add_path(vs, id[i]);
+ r.color(as[i]);
+ render_scanlines(ras, sl, r);
+ }
+ }
+
+
+}
+
+#endif
+
+
+
diff --git a/agg/inc/agg_renderer_base.h b/agg/inc/agg_renderer_base.h
new file mode 100755
index 000000000000..1ef44fecc6d2
--- /dev/null
+++ b/agg/inc/agg_renderer_base.h
@@ -0,0 +1,618 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// class renderer_base
+//
+//----------------------------------------------------------------------------
+
+#ifndef AGG_RENDERER_BASE_INCLUDED
+#define AGG_RENDERER_BASE_INCLUDED
+
+#include "agg_basics.h"
+#include "agg_rendering_buffer.h"
+
+namespace agg
+{
+
+ //-----------------------------------------------------------renderer_base
+ template<class PixelFormat> class renderer_base
+ {
+ public:
+ typedef PixelFormat pixfmt_type;
+ typedef typename pixfmt_type::color_type color_type;
+
+ //--------------------------------------------------------------------
+ renderer_base(pixfmt_type& _ren) :
+ m_ren(&_ren),
+ m_clip_box(0, 0, _ren.width() - 1, _ren.height() - 1)
+ {
+ }
+
+ //--------------------------------------------------------------------
+ const pixfmt_type& ren() const { return *m_ren; }
+ pixfmt_type& ren() { return *m_ren; }
+
+ //--------------------------------------------------------------------
+ unsigned width() const { return m_ren->width(); }
+ unsigned height() const { return m_ren->height(); }
+
+ //--------------------------------------------------------------------
+ bool clip_box(int x1, int y1, int x2, int y2)
+ {
+ rect cb(x1, y1, x2, y2);
+ cb.normalize();
+ if(cb.clip(rect(0, 0, width() - 1, height() - 1)))
+ {
+ m_clip_box = cb;
+ return true;
+ }
+ m_clip_box.x1 = 1;
+ m_clip_box.y1 = 1;
+ m_clip_box.x2 = 0;
+ m_clip_box.y2 = 0;
+ return false;
+ }
+
+ //--------------------------------------------------------------------
+ void reset_clipping(bool visibility)
+ {
+ if(visibility)
+ {
+ m_clip_box.x1 = 0;
+ m_clip_box.y1 = 0;
+ m_clip_box.x2 = width() - 1;
+ m_clip_box.y2 = height() - 1;
+ }
+ else
+ {
+ m_clip_box.x1 = 1;
+ m_clip_box.y1 = 1;
+ m_clip_box.x2 = 0;
+ m_clip_box.y2 = 0;
+ }
+ }
+
+ //--------------------------------------------------------------------
+ void clip_box_naked(int x1, int y1, int x2, int y2)
+ {
+ m_clip_box.x1 = x1;
+ m_clip_box.y1 = y1;
+ m_clip_box.x2 = x2;
+ m_clip_box.y2 = y2;
+ }
+
+ //--------------------------------------------------------------------
+ bool inbox(int x, int y) const
+ {
+ return x >= m_clip_box.x1 && y >= m_clip_box.y1 &&
+ x <= m_clip_box.x2 && y <= m_clip_box.y2;
+ }
+
+ //--------------------------------------------------------------------
+ void first_clip_box() {}
+ bool next_clip_box() { return false; }
+
+ //--------------------------------------------------------------------
+ const rect& clip_box() const { return m_clip_box; }
+ int xmin() const { return m_clip_box.x1; }
+ int ymin() const { return m_clip_box.y1; }
+ int xmax() const { return m_clip_box.x2; }
+ int ymax() const { return m_clip_box.y2; }
+
+ //--------------------------------------------------------------------
+ const rect& bounding_clip_box() const { return m_clip_box; }
+ int bounding_xmin() const { return m_clip_box.x1; }
+ int bounding_ymin() const { return m_clip_box.y1; }
+ int bounding_xmax() const { return m_clip_box.x2; }
+ int bounding_ymax() const { return m_clip_box.y2; }
+
+ //--------------------------------------------------------------------
+ void clear(const color_type& c)
+ {
+ unsigned y;
+ if(width())
+ {
+ for(y = 0; y < height(); y++)
+ {
+ m_ren->copy_hline(0, y, width(), c);
+ }
+ }
+ }
+
+ //--------------------------------------------------------------------
+ void copy_pixel(int x, int y, const color_type& c)
+ {
+ if(inbox(x, y))
+ {
+ m_ren->copy_pixel(x, y, c);
+ }
+ }
+
+ //--------------------------------------------------------------------
+ void blend_pixel(int x, int y, const color_type& c, cover_type cover)
+ {
+ if(inbox(x, y))
+ {
+ m_ren->blend_pixel(x, y, c, cover);
+ }
+ }
+
+ //--------------------------------------------------------------------
+ color_type pixel(int x, int y) const
+ {
+ return inbox(x, y) ?
+ m_ren->pixel(x, y) :
+ color_type::no_color();
+ }
+
+ //--------------------------------------------------------------------
+ void copy_hline(int x1, int y, int x2, const color_type& c)
+ {
+ if(x1 > x2) { int t = x2; x2 = x1; x1 = t; }
+ if(y > ymax()) return;
+ if(y < ymin()) return;
+ if(x1 > xmax()) return;
+ if(x2 < xmin()) return;
+
+ if(x1 < xmin()) x1 = xmin();
+ if(x2 > xmax()) x2 = xmax();
+
+ m_ren->copy_hline(x1, y, x2 - x1 + 1, c);
+ }
+
+ //--------------------------------------------------------------------
+ void copy_vline(int x, int y1, int y2, const color_type& c)
+ {
+ if(y1 > y2) { int t = y2; y2 = y1; y1 = t; }
+ if(x > xmax()) return;
+ if(x < xmin()) return;
+ if(y1 > ymax()) return;
+ if(y2 < ymin()) return;
+
+ if(y1 < ymin()) y1 = ymin();
+ if(y2 > ymax()) y2 = ymax();
+
+ m_ren->copy_vline(x, y1, y2 - y1 + 1, c);
+ }
+
+ //--------------------------------------------------------------------
+ void blend_hline(int x1, int y, int x2,
+ const color_type& c, cover_type cover)
+ {
+ if(x1 > x2) { int t = x2; x2 = x1; x1 = t; }
+ if(y > ymax()) return;
+ if(y < ymin()) return;
+ if(x1 > xmax()) return;
+ if(x2 < xmin()) return;
+
+ if(x1 < xmin()) x1 = xmin();
+ if(x2 > xmax()) x2 = xmax();
+
+ m_ren->blend_hline(x1, y, x2 - x1 + 1, c, cover);
+ }
+
+ //--------------------------------------------------------------------
+ void blend_vline(int x, int y1, int y2,
+ const color_type& c, cover_type cover)
+ {
+ if(y1 > y2) { int t = y2; y2 = y1; y1 = t; }
+ if(x > xmax()) return;
+ if(x < xmin()) return;
+ if(y1 > ymax()) return;
+ if(y2 < ymin()) return;
+
+ if(y1 < ymin()) y1 = ymin();
+ if(y2 > ymax()) y2 = ymax();
+
+ m_ren->blend_vline(x, y1, y2 - y1 + 1, c, cover);
+ }
+
+
+ //--------------------------------------------------------------------
+ void copy_bar(int x1, int y1, int x2, int y2, const color_type& c)
+ {
+ rect rc(x1, y1, x2, y2);
+ rc.normalize();
+ if(rc.clip(clip_box()))
+ {
+ int y;
+ for(y = rc.y1; y <= rc.y2; y++)
+ {
+ m_ren->copy_hline(rc.x1, y, unsigned(rc.x2 - rc.x1 + 1), c);
+ }
+ }
+ }
+
+ //--------------------------------------------------------------------
+ void blend_bar(int x1, int y1, int x2, int y2,
+ const color_type& c, cover_type cover)
+ {
+ rect rc(x1, y1, x2, y2);
+ rc.normalize();
+ if(rc.clip(clip_box()))
+ {
+ int y;
+ for(y = rc.y1; y <= rc.y2; y++)
+ {
+ m_ren->blend_hline(rc.x1,
+ y,
+ unsigned(rc.x2 - rc.x1 + 1),
+ c,
+ cover);
+ }
+ }
+ }
+
+
+ //--------------------------------------------------------------------
+ void blend_solid_hspan(int x, int y, int len,
+ const color_type& c,
+ const cover_type* covers)
+ {
+ if(y > ymax()) return;
+ if(y < ymin()) return;
+
+ if(x < xmin())
+ {
+ len -= xmin() - x;
+ if(len <= 0) return;
+ covers += xmin() - x;
+ x = xmin();
+ }
+ if(x + len > xmax())
+ {
+ len = xmax() - x + 1;
+ if(len <= 0) return;
+ }
+ m_ren->blend_solid_hspan(x, y, len, c, covers);
+ }
+
+ //--------------------------------------------------------------------
+ void blend_solid_vspan(int x, int y, int len,
+ const color_type& c,
+ const cover_type* covers)
+ {
+ if(x > xmax()) return;
+ if(x < xmin()) return;
+
+ if(y < ymin())
+ {
+ len -= ymin() - y;
+ if(len <= 0) return;
+ covers += ymin() - y;
+ y = ymin();
+ }
+ if(y + len > ymax())
+ {
+ len = ymax() - y + 1;
+ if(len <= 0) return;
+ }
+ m_ren->blend_solid_vspan(x, y, len, c, covers);
+ }
+
+ //--------------------------------------------------------------------
+ void blend_color_hspan(int x, int y, int len,
+ const color_type* colors,
+ const cover_type* covers,
+ cover_type cover = cover_full)
+ {
+ if(y > ymax()) return;
+ if(y < ymin()) return;
+
+ if(x < xmin())
+ {
+ int d = xmin() - x;
+ len -= d;
+ if(len <= 0) return;
+ if(covers) covers += d;
+ colors += d;
+ x = xmin();
+ }
+ if(x + len > xmax())
+ {
+ len = xmax() - x + 1;
+ if(len <= 0) return;
+ }
+ m_ren->blend_color_hspan(x, y, len, colors, covers, cover);
+ }
+
+ //--------------------------------------------------------------------
+ void blend_color_vspan(int x, int y, int len,
+ const color_type* colors,
+ const cover_type* covers,
+ cover_type cover = cover_full)
+ {
+ if(x > xmax()) return;
+ if(x < xmin()) return;
+
+ if(y < ymin())
+ {
+ int d = ymin() - y;
+ len -= d;
+ if(len <= 0) return;
+ if(covers) covers += d;
+ colors += d;
+ y = ymin();
+ }
+ if(y + len > ymax())
+ {
+ len = ymax() - y + 1;
+ if(len <= 0) return;
+ }
+ m_ren->blend_color_vspan(x, y, len, colors, covers, cover);
+ }
+
+
+ //--------------------------------------------------------------------
+ void blend_opaque_color_hspan(int x, int y, int len,
+ const color_type* colors,
+ const cover_type* covers,
+ cover_type cover = cover_full)
+ {
+ if(y > ymax()) return;
+ if(y < ymin()) return;
+
+ if(x < xmin())
+ {
+ int d = xmin() - x;
+ len -= d;
+ if(len <= 0) return;
+ if(covers) covers += d;
+ colors += d;
+ x = xmin();
+ }
+ if(x + len > xmax())
+ {
+ len = xmax() - x + 1;
+ if(len <= 0) return;
+ }
+ m_ren->blend_opaque_color_hspan(x, y, len, colors, covers, cover);
+ }
+
+ //--------------------------------------------------------------------
+ void blend_opaque_color_vspan(int x, int y, int len,
+ const color_type* colors,
+ const cover_type* covers,
+ cover_type cover = cover_full)
+ {
+ if(x > xmax()) return;
+ if(x < xmin()) return;
+
+ if(y < ymin())
+ {
+ int d = ymin() - y;
+ len -= d;
+ if(len <= 0) return;
+ if(covers) covers += d;
+ colors += d;
+ y = ymin();
+ }
+ if(y + len > ymax())
+ {
+ len = ymax() - y + 1;
+ if(len <= 0) return;
+ }
+ m_ren->blend_opaque_color_vspan(x, y, len, colors, covers, cover);
+ }
+
+
+ //--------------------------------------------------------------------
+ void blend_color_hspan_no_clip(int x, int y, int len,
+ const color_type* colors,
+ const cover_type* covers,
+ cover_type cover = cover_full)
+ {
+ m_ren->blend_color_hspan(x, y, len, colors, covers, cover);
+ }
+
+ //--------------------------------------------------------------------
+ void blend_color_vspan_no_clip(int x, int y, int len,
+ const color_type* colors,
+ const cover_type* covers,
+ cover_type cover = cover_full)
+ {
+ m_ren->blend_color_vspan(x, y, len, colors, covers, cover);
+ }
+
+ //--------------------------------------------------------------------
+ void blend_opaque_color_hspan_no_clip(int x, int y, int len,
+ const color_type* colors,
+ const cover_type* covers,
+ cover_type cover = cover_full)
+ {
+ m_ren->blend_opaque_color_hspan(x, y, len, colors, covers, cover);
+ }
+
+ //--------------------------------------------------------------------
+ void blend_opaque_color_vspan_no_clip(int x, int y, int len,
+ const color_type* colors,
+ const cover_type* covers,
+ cover_type cover = cover_full)
+ {
+ m_ren->blend_opaque_color_vspan(x, y, len, colors, covers, cover);
+ }
+
+ //--------------------------------------------------------------------
+ rect clip_rect_area(rect& dst, rect& src, int wsrc, int hsrc) const
+ {
+ rect rc(0,0,0,0);
+ rect cb = clip_box();
+ ++cb.x2;
+ ++cb.y2;
+
+ if(src.x1 < 0)
+ {
+ dst.x1 -= src.x1;
+ src.x1 = 0;
+ }
+ if(src.y1 < 0)
+ {
+ dst.y1 -= src.y1;
+ src.y1 = 0;
+ }
+
+ if(src.x2 > wsrc) src.x2 = wsrc;
+ if(src.y2 > hsrc) src.y2 = hsrc;
+
+ if(dst.x1 < cb.x1)
+ {
+ src.x1 += cb.x1 - dst.x1;
+ dst.x1 = cb.x1;
+ }
+ if(dst.y1 < cb.y1)
+ {
+ src.y1 += cb.y1 - dst.y1;
+ dst.y1 = cb.y1;
+ }
+
+ if(dst.x2 > cb.x2) dst.x2 = cb.x2;
+ if(dst.y2 > cb.y2) dst.y2 = cb.y2;
+
+ rc.x2 = dst.x2 - dst.x1;
+ rc.y2 = dst.y2 - dst.y1;
+
+ if(rc.x2 > src.x2 - src.x1) rc.x2 = src.x2 - src.x1;
+ if(rc.y2 > src.y2 - src.y1) rc.y2 = src.y2 - src.y1;
+ return rc;
+ }
+
+
+ //--------------------------------------------------------------------
+ void copy_from(const rendering_buffer& src,
+ const rect* rect_src_ptr = 0,
+ int dx = 0,
+ int dy = 0)
+ {
+ rect rsrc(0, 0, src.width(), src.height());
+ if(rect_src_ptr)
+ {
+ rsrc.x1 = rect_src_ptr->x1;
+ rsrc.y1 = rect_src_ptr->y1;
+ rsrc.x2 = rect_src_ptr->x2 + 1;
+ rsrc.y2 = rect_src_ptr->y2 + 1;
+ }
+
+ // Version with xdst, ydst (absolute positioning)
+ //rect rdst(xdst, ydst, xdst + rsrc.x2 - rsrc.x1, ydst + rsrc.y2 - rsrc.y1);
+
+ // Version with dx, dy (relative positioning)
+ rect rdst(rsrc.x1 + dx, rsrc.y1 + dy, rsrc.x2 + dx, rsrc.y2 + dy);
+
+ rect rc = clip_rect_area(rdst, rsrc, src.width(), src.height());
+
+ if(rc.x2 > 0)
+ {
+ int incy = 1;
+ if(rdst.y1 > rsrc.y1)
+ {
+ rsrc.y1 += rc.y2 - 1;
+ rdst.y1 += rc.y2 - 1;
+ incy = -1;
+ }
+ while(rc.y2 > 0)
+ {
+ m_ren->copy_from(src,
+ rdst.x1, rdst.y1,
+ rsrc.x1, rsrc.y1,
+ rc.x2);
+ rdst.y1 += incy;
+ rsrc.y1 += incy;
+ --rc.y2;
+ }
+ }
+ }
+
+
+
+ //--------------------------------------------------------------------
+ template<class SrcPixelFormatRenderer>
+ void blend_from(const SrcPixelFormatRenderer& src,
+ const rect* rect_src_ptr = 0,
+ int dx = 0,
+ int dy = 0)
+ {
+ rect rsrc(0, 0, src.width(), src.height());
+ if(rect_src_ptr)
+ {
+ rsrc.x1 = rect_src_ptr->x1;
+ rsrc.y1 = rect_src_ptr->y1;
+ rsrc.x2 = rect_src_ptr->x2 + 1;
+ rsrc.y2 = rect_src_ptr->y2 + 1;
+ }
+
+ // Version with xdst, ydst (absolute positioning)
+ //rect rdst(xdst, ydst, xdst + rsrc.x2 - rsrc.x1, ydst + rsrc.y2 - rsrc.y1);
+
+ // Version with dx, dy (relative positioning)
+ rect rdst(rsrc.x1 + dx, rsrc.y1 + dy, rsrc.x2 + dx, rsrc.y2 + dy);
+
+ rect rc = clip_rect_area(rdst, rsrc, src.width(), src.height());
+
+ if(rc.x2 > 0)
+ {
+ int incy = 1;
+ if(rdst.y1 > rsrc.y1)
+ {
+ rsrc.y1 += rc.y2 - 1;
+ rdst.y1 += rc.y2 - 1;
+ incy = -1;
+ }
+ while(rc.y2 > 0)
+ {
+ typename SrcPixelFormatRenderer::row_data span = src.span(rsrc.x1, rsrc.y1);
+ if(span.ptr)
+ {
+ int x1src = rsrc.x1;
+ int x1dst = rdst.x1;
+ int len = rc.x2;
+ if(span.x1 > x1src)
+ {
+ x1dst += span.x1 - x1src;
+ len -= span.x1 - x1src;
+ x1src = span.x1;
+ }
+ if(len > 0)
+ {
+ if(x1src + len-1 > span.x2)
+ {
+ len -= x1src + len - span.x2 - 1;
+ }
+ if(len > 0)
+ {
+ m_ren->blend_from(src, span.ptr,
+ x1dst, rdst.y1,
+ x1src, rsrc.y1,
+ len);
+ }
+ }
+ }
+ rdst.y1 += incy;
+ rsrc.y1 += incy;
+ --rc.y2;
+ }
+ }
+ }
+
+
+
+ private:
+ pixfmt_type* m_ren;
+ rect m_clip_box;
+ };
+
+
+}
+
+#endif
diff --git a/agg/inc/agg_renderer_markers.h b/agg/inc/agg_renderer_markers.h
new file mode 100755
index 000000000000..ff47995554d9
--- /dev/null
+++ b/agg/inc/agg_renderer_markers.h
@@ -0,0 +1,707 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// class renderer_markers
+//
+//----------------------------------------------------------------------------
+
+#ifndef AGG_RENDERER_MARKERS_INCLUDED
+#define AGG_RENDERER_MARKERS_INCLUDED
+
+#include "agg_basics.h"
+#include "agg_renderer_primitives.h"
+
+namespace agg
+{
+
+ //---------------------------------------------------------------marker_e
+ enum marker_e
+ {
+ marker_square,
+ marker_diamond,
+ marker_circle,
+ marker_crossed_circle,
+ marker_semiellipse_left,
+ marker_semiellipse_right,
+ marker_semiellipse_up,
+ marker_semiellipse_down,
+ marker_triangle_left,
+ marker_triangle_right,
+ marker_triangle_up,
+ marker_triangle_down,
+ marker_four_rays,
+ marker_cross,
+ marker_x,
+ marker_dash,
+ marker_dot,
+ marker_pixel,
+
+ end_of_markers
+ };
+
+
+
+ //--------------------------------------------------------renderer_markers
+ template<class BaseRenderer> class renderer_markers :
+ public renderer_primitives<BaseRenderer>
+ {
+ public:
+ typedef renderer_primitives<BaseRenderer> base_type;
+ typedef BaseRenderer base_ren_type;
+ typedef typename base_ren_type::color_type color_type;
+
+ //--------------------------------------------------------------------
+ renderer_markers(base_ren_type& rbuf) :
+ base_type(rbuf)
+ {
+ }
+
+ //--------------------------------------------------------------------
+ bool visible(int x, int y, int r) const
+ {
+ rect rc(x-r, y-r, x+y, y+r);
+ return rc.clip(base_type::ren().bounding_clip_box());
+ }
+
+ //--------------------------------------------------------------------
+ void square(int x, int y, int r)
+ {
+ if(visible(x, y, r))
+ {
+ if(r) base_type::outlined_rectangle(x-r, y-r, x+r, y+r);
+ else base_type::ren().blend_pixel(x, y, base_type::fill_color(), cover_full);
+ }
+ }
+
+ //--------------------------------------------------------------------
+ void diamond(int x, int y, int r)
+ {
+ if(visible(x, y, r))
+ {
+ if(r)
+ {
+ int dy = -r;
+ int dx = 0;
+ do
+ {
+ base_type::ren().blend_pixel(x - dx, y + dy, base_type::line_color(), cover_full);
+ base_type::ren().blend_pixel(x + dx, y + dy, base_type::line_color(), cover_full);
+ base_type::ren().blend_pixel(x - dx, y - dy, base_type::line_color(), cover_full);
+ base_type::ren().blend_pixel(x + dx, y - dy, base_type::line_color(), cover_full);
+
+ if(dx)
+ {
+ base_type::ren().blend_hline(x-dx+1, y+dy, x+dx-1, base_type::fill_color(), cover_full);
+ base_type::ren().blend_hline(x-dx+1, y-dy, x+dx-1, base_type::fill_color(), cover_full);
+ }
+ ++dy;
+ ++dx;
+ }
+ while(dy <= 0);
+ }
+ else
+ {
+ base_type::ren().blend_pixel(x, y, base_type::fill_color(), cover_full);
+ }
+ }
+ }
+
+ //--------------------------------------------------------------------
+ void circle(int x, int y, int r)
+ {
+ if(visible(x, y, r))
+ {
+ if(r) base_type::outlined_ellipse(x, y, r, r);
+ else base_type::ren().blend_pixel(x, y, base_type::fill_color(), cover_full);
+ }
+ }
+
+
+
+ //--------------------------------------------------------------------
+ void crossed_circle(int x, int y, int r)
+ {
+ if(visible(x, y, r))
+ {
+ if(r)
+ {
+ base_type::outlined_ellipse(x, y, r, r);
+ int r6 = r + (r >> 1);
+ if(r <= 2) r6++;
+ r >>= 1;
+ base_type::ren().blend_hline(x-r6, y, x-r, base_type::line_color(), cover_full);
+ base_type::ren().blend_hline(x+r, y, x+r6, base_type::line_color(), cover_full);
+ base_type::ren().blend_vline(x, y-r6, y-r, base_type::line_color(), cover_full);
+ base_type::ren().blend_vline(x, y+r, y+r6, base_type::line_color(), cover_full);
+ }
+ else
+ {
+ base_type::ren().blend_pixel(x, y, base_type::fill_color(), cover_full);
+ }
+ }
+ }
+
+
+ //------------------------------------------------------------------------
+ void semiellipse_left(int x, int y, int r)
+ {
+ if(visible(x, y, r))
+ {
+ if(r)
+ {
+ int r8 = r * 4 / 5;
+ int dy = -r;
+ int dx = 0;
+ ellipse_bresenham_interpolator ei(r * 3 / 5, r+r8);
+ do
+ {
+ dx += ei.dx();
+ dy += ei.dy();
+
+ base_type::ren().blend_pixel(x + dy, y + dx, base_type::line_color(), cover_full);
+ base_type::ren().blend_pixel(x + dy, y - dx, base_type::line_color(), cover_full);
+
+ if(ei.dy() && dx)
+ {
+ base_type::ren().blend_vline(x+dy, y-dx+1, y+dx-1, base_type::fill_color(), cover_full);
+ }
+ ++ei;
+ }
+ while(dy < r8);
+ base_type::ren().blend_vline(x+dy, y-dx, y+dx, base_type::line_color(), cover_full);
+ }
+ else
+ {
+ base_type::ren().blend_pixel(x, y, base_type::fill_color(), cover_full);
+ }
+ }
+ }
+
+
+ //--------------------------------------------------------------------
+ void semiellipse_right(int x, int y, int r)
+ {
+ if(visible(x, y, r))
+ {
+ if(r)
+ {
+ int r8 = r * 4 / 5;
+ int dy = -r;
+ int dx = 0;
+ ellipse_bresenham_interpolator ei(r * 3 / 5, r+r8);
+ do
+ {
+ dx += ei.dx();
+ dy += ei.dy();
+
+ base_type::ren().blend_pixel(x - dy, y + dx, base_type::line_color(), cover_full);
+ base_type::ren().blend_pixel(x - dy, y - dx, base_type::line_color(), cover_full);
+
+ if(ei.dy() && dx)
+ {
+ base_type::ren().blend_vline(x-dy, y-dx+1, y+dx-1, base_type::fill_color(), cover_full);
+ }
+ ++ei;
+ }
+ while(dy < r8);
+ base_type::ren().blend_vline(x-dy, y-dx, y+dx, base_type::line_color(), cover_full);
+ }
+ else
+ {
+ base_type::ren().blend_pixel(x, y, base_type::fill_color(), cover_full);
+ }
+ }
+ }
+
+
+ //--------------------------------------------------------------------
+ void semiellipse_up(int x, int y, int r)
+ {
+ if(visible(x, y, r))
+ {
+ if(r)
+ {
+ int r8 = r * 4 / 5;
+ int dy = -r;
+ int dx = 0;
+ ellipse_bresenham_interpolator ei(r * 3 / 5, r+r8);
+ do
+ {
+ dx += ei.dx();
+ dy += ei.dy();
+
+ base_type::ren().blend_pixel(x + dx, y - dy, base_type::line_color(), cover_full);
+ base_type::ren().blend_pixel(x - dx, y - dy, base_type::line_color(), cover_full);
+
+ if(ei.dy() && dx)
+ {
+ base_type::ren().blend_hline(x-dx+1, y-dy, x+dx-1, base_type::fill_color(), cover_full);
+ }
+ ++ei;
+ }
+ while(dy < r8);
+ base_type::ren().blend_hline(x-dx, y-dy-1, x+dx, base_type::line_color(), cover_full);
+ }
+ else
+ {
+ base_type::ren().blend_pixel(x, y, base_type::fill_color(), cover_full);
+ }
+ }
+ }
+
+
+ //--------------------------------------------------------------------
+ void semiellipse_down(int x, int y, int r)
+ {
+ if(visible(x, y, r))
+ {
+ if(r)
+ {
+ int r8 = r * 4 / 5;
+ int dy = -r;
+ int dx = 0;
+ ellipse_bresenham_interpolator ei(r * 3 / 5, r+r8);
+ do
+ {
+ dx += ei.dx();
+ dy += ei.dy();
+
+ base_type::ren().blend_pixel(x + dx, y + dy, base_type::line_color(), cover_full);
+ base_type::ren().blend_pixel(x - dx, y + dy, base_type::line_color(), cover_full);
+
+ if(ei.dy() && dx)
+ {
+ base_type::ren().blend_hline(x-dx+1, y+dy, x+dx-1, base_type::fill_color(), cover_full);
+ }
+ ++ei;
+ }
+ while(dy < r8);
+ base_type::ren().blend_hline(x-dx, y+dy+1, x+dx, base_type::line_color(), cover_full);
+ }
+ else
+ {
+ base_type::ren().blend_pixel(x, y, base_type::fill_color(), cover_full);
+ }
+ }
+ }
+
+
+ //--------------------------------------------------------------------
+ void triangle_left(int x, int y, int r)
+ {
+ if(visible(x, y, r))
+ {
+ if(r)
+ {
+ int dy = -r;
+ int dx = 0;
+ int flip = 0;
+ int r6 = r * 3 / 5;
+ do
+ {
+ base_type::ren().blend_pixel(x + dy, y - dx, base_type::line_color(), cover_full);
+ base_type::ren().blend_pixel(x + dy, y + dx, base_type::line_color(), cover_full);
+
+ if(dx)
+ {
+ base_type::ren().blend_vline(x+dy, y-dx+1, y+dx-1, base_type::fill_color(), cover_full);
+ }
+ ++dy;
+ dx += flip;
+ flip ^= 1;
+ }
+ while(dy < r6);
+ base_type::ren().blend_vline(x+dy, y-dx, y+dx, base_type::line_color(), cover_full);
+ }
+ else
+ {
+ base_type::ren().blend_pixel(x, y, base_type::fill_color(), cover_full);
+ }
+ }
+ }
+
+
+ //--------------------------------------------------------------------
+ void triangle_right(int x, int y, int r)
+ {
+ if(visible(x, y, r))
+ {
+ if(r)
+ {
+ int dy = -r;
+ int dx = 0;
+ int flip = 0;
+ int r6 = r * 3 / 5;
+ do
+ {
+ base_type::ren().blend_pixel(x - dy, y - dx, base_type::line_color(), cover_full);
+ base_type::ren().blend_pixel(x - dy, y + dx, base_type::line_color(), cover_full);
+
+ if(dx)
+ {
+ base_type::ren().blend_vline(x-dy, y-dx+1, y+dx-1, base_type::fill_color(), cover_full);
+ }
+ ++dy;
+ dx += flip;
+ flip ^= 1;
+ }
+ while(dy < r6);
+ base_type::ren().blend_vline(x-dy, y-dx, y+dx, base_type::line_color(), cover_full);
+ }
+ else
+ {
+ base_type::ren().blend_pixel(x, y, base_type::fill_color(), cover_full);
+ }
+ }
+ }
+
+
+ //--------------------------------------------------------------------
+ void triangle_up(int x, int y, int r)
+ {
+ if(visible(x, y, r))
+ {
+ if(r)
+ {
+ int dy = -r;
+ int dx = 0;
+ int flip = 0;
+ int r6 = r * 3 / 5;
+ do
+ {
+ base_type::ren().blend_pixel(x - dx, y - dy, base_type::line_color(), cover_full);
+ base_type::ren().blend_pixel(x + dx, y - dy, base_type::line_color(), cover_full);
+
+ if(dx)
+ {
+ base_type::ren().blend_hline(x-dx+1, y-dy, x+dx-1, base_type::fill_color(), cover_full);
+ }
+ ++dy;
+ dx += flip;
+ flip ^= 1;
+ }
+ while(dy < r6);
+ base_type::ren().blend_hline(x-dx, y-dy, x+dx, base_type::line_color(), cover_full);
+ }
+ else
+ {
+ base_type::ren().blend_pixel(x, y, base_type::fill_color(), cover_full);
+ }
+ }
+ }
+
+
+ //--------------------------------------------------------------------
+ void triangle_down(int x, int y, int r)
+ {
+ if(visible(x, y, r))
+ {
+ if(r)
+ {
+ int dy = -r;
+ int dx = 0;
+ int flip = 0;
+ int r6 = r * 3 / 5;
+ do
+ {
+ base_type::ren().blend_pixel(x - dx, y + dy, base_type::line_color(), cover_full);
+ base_type::ren().blend_pixel(x + dx, y + dy, base_type::line_color(), cover_full);
+
+ if(dx)
+ {
+ base_type::ren().blend_hline(x-dx+1, y+dy, x+dx-1, base_type::fill_color(), cover_full);
+ }
+ ++dy;
+ dx += flip;
+ flip ^= 1;
+ }
+ while(dy < r6);
+ base_type::ren().blend_hline(x-dx, y+dy, x+dx, base_type::line_color(), cover_full);
+ }
+ else
+ {
+ base_type::ren().blend_pixel(x, y, base_type::fill_color(), cover_full);
+ }
+ }
+ }
+
+
+ //--------------------------------------------------------------------
+ void four_rays(int x, int y, int r)
+ {
+ if(visible(x, y, r))
+ {
+ if(r)
+ {
+ int dy = -r;
+ int dx = 0;
+ int flip = 0;
+ int r3 = -(r / 3);
+ do
+ {
+ base_type::ren().blend_pixel(x - dx, y + dy, base_type::line_color(), cover_full);
+ base_type::ren().blend_pixel(x + dx, y + dy, base_type::line_color(), cover_full);
+ base_type::ren().blend_pixel(x - dx, y - dy, base_type::line_color(), cover_full);
+ base_type::ren().blend_pixel(x + dx, y - dy, base_type::line_color(), cover_full);
+ base_type::ren().blend_pixel(x + dy, y - dx, base_type::line_color(), cover_full);
+ base_type::ren().blend_pixel(x + dy, y + dx, base_type::line_color(), cover_full);
+ base_type::ren().blend_pixel(x - dy, y - dx, base_type::line_color(), cover_full);
+ base_type::ren().blend_pixel(x - dy, y + dx, base_type::line_color(), cover_full);
+
+ if(dx)
+ {
+ base_type::ren().blend_hline(x-dx+1, y+dy, x+dx-1, base_type::fill_color(), cover_full);
+ base_type::ren().blend_hline(x-dx+1, y-dy, x+dx-1, base_type::fill_color(), cover_full);
+ base_type::ren().blend_vline(x+dy, y-dx+1, y+dx-1, base_type::fill_color(), cover_full);
+ base_type::ren().blend_vline(x-dy, y-dx+1, y+dx-1, base_type::fill_color(), cover_full);
+ }
+ ++dy;
+ dx += flip;
+ flip ^= 1;
+ }
+ while(dy <= r3);
+ base_type::solid_rectangle(x+r3+1, y+r3+1, x-r3-1, y-r3-1);
+ }
+ else
+ {
+ base_type::ren().blend_pixel(x, y, base_type::fill_color(), cover_full);
+ }
+ }
+ }
+
+
+ //--------------------------------------------------------------------
+ void cross(int x, int y, int r)
+ {
+ if(visible(x, y, r))
+ {
+ if(r)
+ {
+ base_type::ren().blend_vline(x, y-r, y+r, base_type::line_color(), cover_full);
+ base_type::ren().blend_hline(x-r, y, x+r, base_type::line_color(), cover_full);
+ }
+ else
+ {
+ base_type::ren().blend_pixel(x, y, base_type::fill_color(), cover_full);
+ }
+ }
+ }
+
+
+ //--------------------------------------------------------------------
+ void xing(int x, int y, int r)
+ {
+ if(visible(x, y, r))
+ {
+ if(r)
+ {
+ int dy = -r * 7 / 10;
+ do
+ {
+ base_type::ren().blend_pixel(x + dy, y + dy, base_type::line_color(), cover_full);
+ base_type::ren().blend_pixel(x - dy, y + dy, base_type::line_color(), cover_full);
+ base_type::ren().blend_pixel(x + dy, y - dy, base_type::line_color(), cover_full);
+ base_type::ren().blend_pixel(x - dy, y - dy, base_type::line_color(), cover_full);
+ ++dy;
+ }
+ while(dy < 0);
+ }
+ base_type::ren().blend_pixel(x, y, base_type::fill_color(), cover_full);
+ }
+ }
+
+
+ //--------------------------------------------------------------------
+ void dash(int x, int y, int r)
+ {
+ if(visible(x, y, r))
+ {
+ if(r) base_type::ren().blend_hline(x-r, y, x+r, base_type::line_color(), cover_full);
+ else base_type::ren().blend_pixel(x, y, base_type::fill_color(), cover_full);
+ }
+ }
+
+
+ //--------------------------------------------------------------------
+ void dot(int x, int y, int r)
+ {
+ if(visible(x, y, r))
+ {
+ if(r) base_type::solid_ellipse(x, y, r, r);
+ else base_type::ren().blend_pixel(x, y, base_type::fill_color(), cover_full);
+ }
+ }
+
+ //--------------------------------------------------------------------
+ void pixel(int x, int y, int)
+ {
+ base_type::ren().blend_pixel(x, y, base_type::fill_color(), cover_full);
+ }
+
+ //--------------------------------------------------------------------
+ void marker(int x, int y, int r, marker_e type)
+ {
+ switch(type)
+ {
+ case marker_square: square(x, y, r); break;
+ case marker_diamond: diamond(x, y, r); break;
+ case marker_circle: circle(x, y, r); break;
+ case marker_crossed_circle: crossed_circle(x, y, r); break;
+ case marker_semiellipse_left: semiellipse_left(x, y, r); break;
+ case marker_semiellipse_right: semiellipse_right(x, y, r); break;
+ case marker_semiellipse_up: semiellipse_up(x, y, r); break;
+ case marker_semiellipse_down: semiellipse_down(x, y, r); break;
+ case marker_triangle_left: triangle_left(x, y, r); break;
+ case marker_triangle_right: triangle_right(x, y, r); break;
+ case marker_triangle_up: triangle_up(x, y, r); break;
+ case marker_triangle_down: triangle_down(x, y, r); break;
+ case marker_four_rays: four_rays(x, y, r); break;
+ case marker_cross: cross(x, y, r); break;
+ case marker_x: xing(x, y, r); break;
+ case marker_dash: dash(x, y, r); break;
+ case marker_dot: dot(x, y, r); break;
+ case marker_pixel: pixel(x, y, r); break;
+ }
+ }
+
+
+ //--------------------------------------------------------------------
+ template<class T>
+ void markers(int n, const T* x, const T* y, T r, marker_e type)
+ {
+ if(n <= 0) return;
+ if(r == 0)
+ {
+ do
+ {
+ base_type::ren().blend_pixel(int(*x), int(*y), base_type::fill_color(), cover_full);
+ ++x;
+ ++y;
+ }
+ while(--n);
+ return;
+ }
+
+ switch(type)
+ {
+ case marker_square: do { square (int(*x), int(*y), int(r)); ++x; ++y; } while(--n); break;
+ case marker_diamond: do { diamond (int(*x), int(*y), int(r)); ++x; ++y; } while(--n); break;
+ case marker_circle: do { circle (int(*x), int(*y), int(r)); ++x; ++y; } while(--n); break;
+ case marker_crossed_circle: do { crossed_circle (int(*x), int(*y), int(r)); ++x; ++y; } while(--n); break;
+ case marker_semiellipse_left: do { semiellipse_left (int(*x), int(*y), int(r)); ++x; ++y; } while(--n); break;
+ case marker_semiellipse_right: do { semiellipse_right(int(*x), int(*y), int(r)); ++x; ++y; } while(--n); break;
+ case marker_semiellipse_up: do { semiellipse_up (int(*x), int(*y), int(r)); ++x; ++y; } while(--n); break;
+ case marker_semiellipse_down: do { semiellipse_down (int(*x), int(*y), int(r)); ++x; ++y; } while(--n); break;
+ case marker_triangle_left: do { triangle_left (int(*x), int(*y), int(r)); ++x; ++y; } while(--n); break;
+ case marker_triangle_right: do { triangle_right (int(*x), int(*y), int(r)); ++x; ++y; } while(--n); break;
+ case marker_triangle_up: do { triangle_up (int(*x), int(*y), int(r)); ++x; ++y; } while(--n); break;
+ case marker_triangle_down: do { triangle_down (int(*x), int(*y), int(r)); ++x; ++y; } while(--n); break;
+ case marker_four_rays: do { four_rays (int(*x), int(*y), int(r)); ++x; ++y; } while(--n); break;
+ case marker_cross: do { cross (int(*x), int(*y), int(r)); ++x; ++y; } while(--n); break;
+ case marker_x: do { xing (int(*x), int(*y), int(r)); ++x; ++y; } while(--n); break;
+ case marker_dash: do { dash (int(*x), int(*y), int(r)); ++x; ++y; } while(--n); break;
+ case marker_dot: do { dot (int(*x), int(*y), int(r)); ++x; ++y; } while(--n); break;
+ case marker_pixel: do { pixel (int(*x), int(*y), int(r)); ++x; ++y; } while(--n); break;
+ }
+ }
+
+ //--------------------------------------------------------------------
+ template<class T>
+ void markers(int n, const T* x, const T* y, const T* r, marker_e type)
+ {
+ if(n <= 0) return;
+ switch(type)
+ {
+ case marker_square: do { square (int(*x), int(*y), int(*r)); ++x; ++y; ++r; } while(--n); break;
+ case marker_diamond: do { diamond (int(*x), int(*y), int(*r)); ++x; ++y; ++r; } while(--n); break;
+ case marker_circle: do { circle (int(*x), int(*y), int(*r)); ++x; ++y; ++r; } while(--n); break;
+ case marker_crossed_circle: do { crossed_circle (int(*x), int(*y), int(*r)); ++x; ++y; ++r; } while(--n); break;
+ case marker_semiellipse_left: do { semiellipse_left (int(*x), int(*y), int(*r)); ++x; ++y; ++r; } while(--n); break;
+ case marker_semiellipse_right: do { semiellipse_right(int(*x), int(*y), int(*r)); ++x; ++y; ++r; } while(--n); break;
+ case marker_semiellipse_up: do { semiellipse_up (int(*x), int(*y), int(*r)); ++x; ++y; ++r; } while(--n); break;
+ case marker_semiellipse_down: do { semiellipse_down (int(*x), int(*y), int(*r)); ++x; ++y; ++r; } while(--n); break;
+ case marker_triangle_left: do { triangle_left (int(*x), int(*y), int(*r)); ++x; ++y; ++r; } while(--n); break;
+ case marker_triangle_right: do { triangle_right (int(*x), int(*y), int(*r)); ++x; ++y; ++r; } while(--n); break;
+ case marker_triangle_up: do { triangle_up (int(*x), int(*y), int(*r)); ++x; ++y; ++r; } while(--n); break;
+ case marker_triangle_down: do { triangle_down (int(*x), int(*y), int(*r)); ++x; ++y; ++r; } while(--n); break;
+ case marker_four_rays: do { four_rays (int(*x), int(*y), int(*r)); ++x; ++y; ++r; } while(--n); break;
+ case marker_cross: do { cross (int(*x), int(*y), int(*r)); ++x; ++y; ++r; } while(--n); break;
+ case marker_x: do { xing (int(*x), int(*y), int(*r)); ++x; ++y; ++r; } while(--n); break;
+ case marker_dash: do { dash (int(*x), int(*y), int(*r)); ++x; ++y; ++r; } while(--n); break;
+ case marker_dot: do { dot (int(*x), int(*y), int(*r)); ++x; ++y; ++r; } while(--n); break;
+ case marker_pixel: do { pixel (int(*x), int(*y), int(*r)); ++x; ++y; ++r; } while(--n); break;
+ }
+ }
+
+ //--------------------------------------------------------------------
+ template<class T>
+ void markers(int n, const T* x, const T* y, const T* r, const color_type* fc, marker_e type)
+ {
+ if(n <= 0) return;
+ switch(type)
+ {
+ case marker_square: do { base_type::fill_color(*fc); square (int(*x), int(*y), int(*r)); ++x; ++y; ++r; ++fc; } while(--n); break;
+ case marker_diamond: do { base_type::fill_color(*fc); diamond (int(*x), int(*y), int(*r)); ++x; ++y; ++r; ++fc; } while(--n); break;
+ case marker_circle: do { base_type::fill_color(*fc); circle (int(*x), int(*y), int(*r)); ++x; ++y; ++r; ++fc; } while(--n); break;
+ case marker_crossed_circle: do { base_type::fill_color(*fc); crossed_circle (int(*x), int(*y), int(*r)); ++x; ++y; ++r; ++fc; } while(--n); break;
+ case marker_semiellipse_left: do { base_type::fill_color(*fc); semiellipse_left (int(*x), int(*y), int(*r)); ++x; ++y; ++r; ++fc; } while(--n); break;
+ case marker_semiellipse_right: do { base_type::fill_color(*fc); semiellipse_right(int(*x), int(*y), int(*r)); ++x; ++y; ++r; ++fc; } while(--n); break;
+ case marker_semiellipse_up: do { base_type::fill_color(*fc); semiellipse_up (int(*x), int(*y), int(*r)); ++x; ++y; ++r; ++fc; } while(--n); break;
+ case marker_semiellipse_down: do { base_type::fill_color(*fc); semiellipse_down (int(*x), int(*y), int(*r)); ++x; ++y; ++r; ++fc; } while(--n); break;
+ case marker_triangle_left: do { base_type::fill_color(*fc); triangle_left (int(*x), int(*y), int(*r)); ++x; ++y; ++r; ++fc; } while(--n); break;
+ case marker_triangle_right: do { base_type::fill_color(*fc); triangle_right (int(*x), int(*y), int(*r)); ++x; ++y; ++r; ++fc; } while(--n); break;
+ case marker_triangle_up: do { base_type::fill_color(*fc); triangle_up (int(*x), int(*y), int(*r)); ++x; ++y; ++r; ++fc; } while(--n); break;
+ case marker_triangle_down: do { base_type::fill_color(*fc); triangle_down (int(*x), int(*y), int(*r)); ++x; ++y; ++r; ++fc; } while(--n); break;
+ case marker_four_rays: do { base_type::fill_color(*fc); four_rays (int(*x), int(*y), int(*r)); ++x; ++y; ++r; ++fc; } while(--n); break;
+ case marker_cross: do { base_type::fill_color(*fc); cross (int(*x), int(*y), int(*r)); ++x; ++y; ++r; ++fc; } while(--n); break;
+ case marker_x: do { base_type::fill_color(*fc); xing (int(*x), int(*y), int(*r)); ++x; ++y; ++r; ++fc; } while(--n); break;
+ case marker_dash: do { base_type::fill_color(*fc); dash (int(*x), int(*y), int(*r)); ++x; ++y; ++r; ++fc; } while(--n); break;
+ case marker_dot: do { base_type::fill_color(*fc); dot (int(*x), int(*y), int(*r)); ++x; ++y; ++r; ++fc; } while(--n); break;
+ case marker_pixel: do { base_type::fill_color(*fc); pixel (int(*x), int(*y), int(*r)); ++x; ++y; ++r; ++fc; } while(--n); break;
+ }
+ }
+
+ //--------------------------------------------------------------------
+ template<class T>
+ void markers(int n, const T* x, const T* y, const T* r, const color_type* fc, const color_type* lc, marker_e type)
+ {
+ if(n <= 0) return;
+ switch(type)
+ {
+ case marker_square: do { base_type::fill_color(*fc); base_type::line_color(*lc); square (int(*x), int(*y), int(*r)); ++x; ++y; ++r; ++fc; ++lc; } while(--n); break;
+ case marker_diamond: do { base_type::fill_color(*fc); base_type::line_color(*lc); diamond (int(*x), int(*y), int(*r)); ++x; ++y; ++r; ++fc; ++lc; } while(--n); break;
+ case marker_circle: do { base_type::fill_color(*fc); base_type::line_color(*lc); circle (int(*x), int(*y), int(*r)); ++x; ++y; ++r; ++fc; ++lc; } while(--n); break;
+ case marker_crossed_circle: do { base_type::fill_color(*fc); base_type::line_color(*lc); crossed_circle (int(*x), int(*y), int(*r)); ++x; ++y; ++r; ++fc; ++lc; } while(--n); break;
+ case marker_semiellipse_left: do { base_type::fill_color(*fc); base_type::line_color(*lc); semiellipse_left (int(*x), int(*y), int(*r)); ++x; ++y; ++r; ++fc; ++lc; } while(--n); break;
+ case marker_semiellipse_right: do { base_type::fill_color(*fc); base_type::line_color(*lc); semiellipse_right(int(*x), int(*y), int(*r)); ++x; ++y; ++r; ++fc; ++lc; } while(--n); break;
+ case marker_semiellipse_up: do { base_type::fill_color(*fc); base_type::line_color(*lc); semiellipse_up (int(*x), int(*y), int(*r)); ++x; ++y; ++r; ++fc; ++lc; } while(--n); break;
+ case marker_semiellipse_down: do { base_type::fill_color(*fc); base_type::line_color(*lc); semiellipse_down (int(*x), int(*y), int(*r)); ++x; ++y; ++r; ++fc; ++lc; } while(--n); break;
+ case marker_triangle_left: do { base_type::fill_color(*fc); base_type::line_color(*lc); triangle_left (int(*x), int(*y), int(*r)); ++x; ++y; ++r; ++fc; ++lc; } while(--n); break;
+ case marker_triangle_right: do { base_type::fill_color(*fc); base_type::line_color(*lc); triangle_right (int(*x), int(*y), int(*r)); ++x; ++y; ++r; ++fc; ++lc; } while(--n); break;
+ case marker_triangle_up: do { base_type::fill_color(*fc); base_type::line_color(*lc); triangle_up (int(*x), int(*y), int(*r)); ++x; ++y; ++r; ++fc; ++lc; } while(--n); break;
+ case marker_triangle_down: do { base_type::fill_color(*fc); base_type::line_color(*lc); triangle_down (int(*x), int(*y), int(*r)); ++x; ++y; ++r; ++fc; ++lc; } while(--n); break;
+ case marker_four_rays: do { base_type::fill_color(*fc); base_type::line_color(*lc); four_rays (int(*x), int(*y), int(*r)); ++x; ++y; ++r; ++fc; ++lc; } while(--n); break;
+ case marker_cross: do { base_type::fill_color(*fc); base_type::line_color(*lc); cross (int(*x), int(*y), int(*r)); ++x; ++y; ++r; ++fc; ++lc; } while(--n); break;
+ case marker_x: do { base_type::fill_color(*fc); base_type::line_color(*lc); xing (int(*x), int(*y), int(*r)); ++x; ++y; ++r; ++fc; ++lc; } while(--n); break;
+ case marker_dash: do { base_type::fill_color(*fc); base_type::line_color(*lc); dash (int(*x), int(*y), int(*r)); ++x; ++y; ++r; ++fc; ++lc; } while(--n); break;
+ case marker_dot: do { base_type::fill_color(*fc); base_type::line_color(*lc); dot (int(*x), int(*y), int(*r)); ++x; ++y; ++r; ++fc; ++lc; } while(--n); break;
+ case marker_pixel: do { base_type::fill_color(*fc); base_type::line_color(*lc); pixel (int(*x), int(*y), int(*r)); ++x; ++y; ++r; ++fc; ++lc; } while(--n); break;
+ }
+ }
+ };
+
+}
+
+#endif
diff --git a/agg/inc/agg_renderer_mclip.h b/agg/inc/agg_renderer_mclip.h
new file mode 100755
index 000000000000..dc758b9ea72d
--- /dev/null
+++ b/agg/inc/agg_renderer_mclip.h
@@ -0,0 +1,383 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// class renderer_mclip
+//
+//----------------------------------------------------------------------------
+
+#ifndef AGG_RENDERER_MCLIP_INCLUDED
+#define AGG_RENDERER_MCLIP_INCLUDED
+
+#include "agg_basics.h"
+#include "agg_array.h"
+#include "agg_renderer_base.h"
+
+namespace agg
+{
+
+ //----------------------------------------------------------renderer_mclip
+ template<class PixelFormat> class renderer_mclip
+ {
+ public:
+ typedef PixelFormat pixfmt_type;
+ typedef typename pixfmt_type::color_type color_type;
+ typedef renderer_base<pixfmt_type> base_ren_type;
+
+ //--------------------------------------------------------------------
+ renderer_mclip(pixfmt_type& ren) :
+ m_ren(ren),
+ m_curr_cb(0),
+ m_bounds(m_ren.xmin(), m_ren.ymin(), m_ren.xmax(), m_ren.ymax())
+ {
+ }
+
+ //--------------------------------------------------------------------
+ const pixfmt_type& ren() const { return m_ren.ren(); }
+ pixfmt_type& ren() { return m_ren.ren(); }
+
+ //--------------------------------------------------------------------
+ unsigned width() const { return m_ren.width(); }
+ unsigned height() const { return m_ren.height(); }
+
+ //--------------------------------------------------------------------
+ const rect& clip_box() const { return m_ren.clip_box(); }
+ int xmin() const { return m_ren.xmin(); }
+ int ymin() const { return m_ren.ymin(); }
+ int xmax() const { return m_ren.xmax(); }
+ int ymax() const { return m_ren.ymax(); }
+
+ //--------------------------------------------------------------------
+ const rect& bounding_clip_box() const { return m_bounds; }
+ int bounding_xmin() const { return m_bounds.x1; }
+ int bounding_ymin() const { return m_bounds.y1; }
+ int bounding_xmax() const { return m_bounds.x2; }
+ int bounding_ymax() const { return m_bounds.y2; }
+
+ //--------------------------------------------------------------------
+ void first_clip_box()
+ {
+ m_curr_cb = 0;
+ if(m_clip.size())
+ {
+ const rect& cb = m_clip[0];
+ m_ren.clip_box_naked(cb.x1, cb.y1, cb.x2, cb.y2);
+ }
+ }
+
+ //--------------------------------------------------------------------
+ bool next_clip_box()
+ {
+ if(++m_curr_cb < m_clip.size())
+ {
+ const rect& cb = m_clip[m_curr_cb];
+ m_ren.clip_box_naked(cb.x1, cb.y1, cb.x2, cb.y2);
+ return true;
+ }
+ return false;
+ }
+
+ //--------------------------------------------------------------------
+ void reset_clipping(bool visibility)
+ {
+ m_ren.reset_clipping(visibility);
+ m_clip.remove_all();
+ m_curr_cb = 0;
+ m_bounds = m_ren.clip_box();
+ }
+
+ //--------------------------------------------------------------------
+ void add_clip_box(int x1, int y1, int x2, int y2)
+ {
+ rect cb(x1, y1, x2, y2);
+ cb.normalize();
+ if(cb.clip(rect(0, 0, width() - 1, height() - 1)))
+ {
+ m_clip.add(cb);
+ if(cb.x1 < m_bounds.x1) m_bounds.x1 = cb.x1;
+ if(cb.y1 < m_bounds.y1) m_bounds.y1 = cb.y1;
+ if(cb.x2 > m_bounds.x2) m_bounds.x2 = cb.x2;
+ if(cb.y2 > m_bounds.y2) m_bounds.y2 = cb.y2;
+ }
+ }
+
+ //--------------------------------------------------------------------
+ void clear(const color_type& c)
+ {
+ m_ren.clear(c);
+ }
+
+ //--------------------------------------------------------------------
+ void copy_pixel(int x, int y, const color_type& c)
+ {
+ first_clip_box();
+ do
+ {
+ if(m_ren.inbox(x, y))
+ {
+ m_ren.ren().copy_pixel(x, y, c);
+ break;
+ }
+ }
+ while(next_clip_box());
+ }
+
+ //--------------------------------------------------------------------
+ void blend_pixel(int x, int y, const color_type& c, cover_type cover)
+ {
+ first_clip_box();
+ do
+ {
+ if(m_ren.inbox(x, y))
+ {
+ m_ren.ren().blend_pixel(x, y, c, cover);
+ break;
+ }
+ }
+ while(next_clip_box());
+ }
+
+ //--------------------------------------------------------------------
+ color_type pixel(int x, int y) const
+ {
+ first_clip_box();
+ do
+ {
+ if(m_ren.inbox(x, y))
+ {
+ return m_ren.ren().pixel(x, y);
+ }
+ }
+ while(next_clip_box());
+ return color_type::no_color();
+ }
+
+ //--------------------------------------------------------------------
+ void copy_hline(int x1, int y, int x2, const color_type& c)
+ {
+ first_clip_box();
+ do
+ {
+ m_ren.copy_hline(x1, y, x2, c);
+ }
+ while(next_clip_box());
+ }
+
+ //--------------------------------------------------------------------
+ void copy_vline(int x, int y1, int y2, const color_type& c)
+ {
+ first_clip_box();
+ do
+ {
+ m_ren.copy_vline(x, y1, y2, c);
+ }
+ while(next_clip_box());
+ }
+
+ //--------------------------------------------------------------------
+ void blend_hline(int x1, int y, int x2,
+ const color_type& c, cover_type cover)
+ {
+ first_clip_box();
+ do
+ {
+ m_ren.blend_hline(x1, y, x2, c, cover);
+ }
+ while(next_clip_box());
+ }
+
+ //--------------------------------------------------------------------
+ void blend_vline(int x, int y1, int y2,
+ const color_type& c, cover_type cover)
+ {
+ first_clip_box();
+ do
+ {
+ m_ren.blend_vline(x, y1, y2, c, cover);
+ }
+ while(next_clip_box());
+ }
+
+ //--------------------------------------------------------------------
+ void copy_bar(int x1, int y1, int x2, int y2, const color_type& c)
+ {
+ first_clip_box();
+ do
+ {
+ m_ren.copy_bar(x1, y1, x2, y2, c);
+ }
+ while(next_clip_box());
+ }
+
+ //--------------------------------------------------------------------
+ void blend_bar(int x1, int y1, int x2, int y2,
+ const color_type& c, cover_type cover)
+ {
+ first_clip_box();
+ do
+ {
+ m_ren.blend_bar(x1, y1, x2, y2, c, cover);
+ }
+ while(next_clip_box());
+ }
+
+
+ //--------------------------------------------------------------------
+ void blend_solid_hspan(int x, int y, int len,
+ const color_type& c, const cover_type* covers)
+ {
+ first_clip_box();
+ do
+ {
+ m_ren.blend_solid_hspan(x, y, len, c, covers);
+ }
+ while(next_clip_box());
+ }
+
+ //--------------------------------------------------------------------
+ void blend_solid_vspan(int x, int y, int len,
+ const color_type& c, const cover_type* covers)
+ {
+ first_clip_box();
+ do
+ {
+ m_ren.blend_solid_vspan(x, y, len, c, covers);
+ }
+ while(next_clip_box());
+ }
+
+ //--------------------------------------------------------------------
+ void blend_color_hspan(int x, int y, int len,
+ const color_type* colors,
+ const cover_type* covers,
+ cover_type cover = cover_full)
+ {
+ first_clip_box();
+ do
+ {
+ m_ren.blend_color_hspan(x, y, len, colors, covers, cover);
+ }
+ while(next_clip_box());
+ }
+
+ //--------------------------------------------------------------------
+ void blend_color_vspan(int x, int y, int len,
+ const color_type* colors,
+ const cover_type* covers,
+ cover_type cover = cover_full)
+ {
+ first_clip_box();
+ do
+ {
+ m_ren.blend_color_hspan(x, y, len, colors, covers, cover);
+ }
+ while(next_clip_box());
+ }
+
+
+ //--------------------------------------------------------------------
+ void blend_qpaque_color_hspan(int x, int y, int len,
+ const color_type* colors,
+ const cover_type* covers,
+ cover_type cover = cover_full)
+ {
+ first_clip_box();
+ do
+ {
+ m_ren.blend_opaque_color_hspan(x, y, len, colors, covers, cover);
+ }
+ while(next_clip_box());
+ }
+
+ //--------------------------------------------------------------------
+ void blend_opaque_color_vspan(int x, int y, int len,
+ const color_type* colors,
+ const cover_type* covers,
+ cover_type cover = cover_full)
+ {
+ first_clip_box();
+ do
+ {
+ m_ren.blend_opaque_color_hspan(x, y, len, colors, covers, cover);
+ }
+ while(next_clip_box());
+ }
+
+
+ //--------------------------------------------------------------------
+ void blend_color_hspan_no_clip(int x, int y, int len,
+ const color_type* colors,
+ const cover_type* covers,
+ cover_type cover = cover_full)
+ {
+ m_ren.blend_color_hspan_no_clip(x, y, len, colors, covers, cover);
+ }
+
+ //--------------------------------------------------------------------
+ void blend_color_vspan_no_clip(int x, int y, int len,
+ const color_type* colors,
+ const cover_type* covers,
+ cover_type cover = cover_full)
+ {
+ m_ren.blend_color_vspan_no_clip(x, y, len, colors, covers, cover);
+ }
+
+ //--------------------------------------------------------------------
+ void blend_opaque_color_hspan_no_clip(int x, int y, int len,
+ const color_type* colors,
+ const cover_type* covers,
+ cover_type cover = cover_full)
+ {
+ m_ren.blend_opaque_color_hspan_no_clip(x, y, len, colors, covers, cover);
+ }
+
+ //--------------------------------------------------------------------
+ void blend_opaque_color_vspan_no_clip(int x, int y, int len,
+ const color_type* colors,
+ const cover_type* covers,
+ cover_type cover = cover_full)
+ {
+ m_ren.blend_opaque_color_vspan_no_clip(x, y, len, colors, covers, cover);
+ }
+
+
+ //--------------------------------------------------------------------
+ void copy_from(const rendering_buffer& from,
+ const rect* rc=0,
+ int x_to=0,
+ int y_to=0)
+ {
+ first_clip_box();
+ do
+ {
+ m_ren.copy_from(from, rc, x_to, y_to);
+ }
+ while(next_clip_box());
+ }
+
+ private:
+ renderer_mclip(const renderer_mclip<PixelFormat>&);
+ const renderer_mclip<PixelFormat>&
+ operator = (const renderer_mclip<PixelFormat>&);
+
+ base_ren_type m_ren;
+ pod_deque<rect, 4> m_clip;
+ unsigned m_curr_cb;
+ rect m_bounds;
+ };
+
+
+}
+
+#endif
diff --git a/agg/inc/agg_renderer_outline_aa.h b/agg/inc/agg_renderer_outline_aa.h
new file mode 100755
index 000000000000..d2f9484c5a1d
--- /dev/null
+++ b/agg/inc/agg_renderer_outline_aa.h
@@ -0,0 +1,1545 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+#ifndef AGG_RENDERER_OUTLINE_AA_INCLUDED
+#define AGG_RENDERER_OUTLINE_AA_INCLUDED
+
+#include "agg_basics.h"
+#include "agg_math.h"
+#include "agg_line_aa_basics.h"
+#include "agg_dda_line.h"
+#include "agg_ellipse_bresenham.h"
+#include "agg_renderer_base.h"
+#include "agg_gamma_functions.h"
+
+namespace agg
+{
+
+ //===================================================distance_interpolator0
+ class distance_interpolator0
+ {
+ public:
+ //---------------------------------------------------------------------
+ distance_interpolator0() {}
+ distance_interpolator0(int x1, int y1, int x2, int y2, int x, int y) :
+ m_dx(line_mr(x2) - line_mr(x1)),
+ m_dy(line_mr(y2) - line_mr(y1)),
+ m_dist((line_mr(x + line_subpixel_size/2) - line_mr(x2)) * m_dy -
+ (line_mr(y + line_subpixel_size/2) - line_mr(y2)) * m_dx)
+ {
+ m_dx <<= line_mr_subpixel_shift;
+ m_dy <<= line_mr_subpixel_shift;
+ }
+
+ //---------------------------------------------------------------------
+ void inc_x() { m_dist += m_dy; }
+ void dec_x() { m_dist -= m_dy; }
+ void inc_y() { m_dist -= m_dx; }
+ void dec_y() { m_dist += m_dx; }
+
+ //---------------------------------------------------------------------
+ void inc_x(int _dy)
+ {
+ m_dist += m_dy;
+ if(_dy > 0) m_dist -= m_dx;
+ if(_dy < 0) m_dist += m_dx;
+ }
+
+ //---------------------------------------------------------------------
+ void dec_x(int _dy)
+ {
+ m_dist -= m_dy;
+ if(_dy > 0) m_dist -= m_dx;
+ if(_dy < 0) m_dist += m_dx;
+ }
+
+ //---------------------------------------------------------------------
+ void inc_y(int _dx)
+ {
+ m_dist -= m_dx;
+ if(_dx > 0) m_dist += m_dy;
+ if(_dx < 0) m_dist -= m_dy;
+ }
+
+ void dec_y(int _dx)
+ //---------------------------------------------------------------------
+ {
+ m_dist += m_dx;
+ if(_dx > 0) m_dist += m_dy;
+ if(_dx < 0) m_dist -= m_dy;
+ }
+
+ //---------------------------------------------------------------------
+ int dist() const { return m_dist; }
+ int dx() const { return m_dx; }
+ int dy() const { return m_dy; }
+
+ private:
+ //---------------------------------------------------------------------
+ int m_dx;
+ int m_dy;
+ int m_dist;
+ };
+
+
+
+ //===================================================distance_interpolator1
+ class distance_interpolator1
+ {
+ public:
+ //---------------------------------------------------------------------
+ distance_interpolator1() {}
+ distance_interpolator1(int x1, int y1, int x2, int y2, int x, int y) :
+ m_dx(x2 - x1),
+ m_dy(y2 - y1),
+ m_dist(int(double(x + line_subpixel_size/2 - x2) * double(m_dy) -
+ double(y + line_subpixel_size/2 - y2) * double(m_dx)))
+ {
+ m_dx <<= line_subpixel_shift;
+ m_dy <<= line_subpixel_shift;
+ }
+
+ //---------------------------------------------------------------------
+ void inc_x() { m_dist += m_dy; }
+ void dec_x() { m_dist -= m_dy; }
+ void inc_y() { m_dist -= m_dx; }
+ void dec_y() { m_dist += m_dx; }
+
+ //---------------------------------------------------------------------
+ void inc_x(int _dy)
+ {
+ m_dist += m_dy;
+ if(_dy > 0) m_dist -= m_dx;
+ if(_dy < 0) m_dist += m_dx;
+ }
+
+ //---------------------------------------------------------------------
+ void dec_x(int _dy)
+ {
+ m_dist -= m_dy;
+ if(_dy > 0) m_dist -= m_dx;
+ if(_dy < 0) m_dist += m_dx;
+ }
+
+ //---------------------------------------------------------------------
+ void inc_y(int _dx)
+ {
+ m_dist -= m_dx;
+ if(_dx > 0) m_dist += m_dy;
+ if(_dx < 0) m_dist -= m_dy;
+ }
+
+ void dec_y(int _dx)
+ //---------------------------------------------------------------------
+ {
+ m_dist += m_dx;
+ if(_dx > 0) m_dist += m_dy;
+ if(_dx < 0) m_dist -= m_dy;
+ }
+
+ //---------------------------------------------------------------------
+ int dist() const { return m_dist; }
+ int dx() const { return m_dx; }
+ int dy() const { return m_dy; }
+
+ private:
+ //---------------------------------------------------------------------
+ int m_dx;
+ int m_dy;
+ int m_dist;
+ };
+
+
+
+
+
+ //===================================================distance_interpolator2
+ class distance_interpolator2
+ {
+ public:
+ //---------------------------------------------------------------------
+ distance_interpolator2() {}
+ distance_interpolator2(int x1, int y1, int x2, int y2,
+ int sx, int sy, int x, int y) :
+ m_dx(x2 - x1),
+ m_dy(y2 - y1),
+ m_dx_start(line_mr(sx) - line_mr(x1)),
+ m_dy_start(line_mr(sy) - line_mr(y1)),
+
+ m_dist(int(double(x + line_subpixel_size/2 - x2) * double(m_dy) -
+ double(y + line_subpixel_size/2 - y2) * double(m_dx))),
+
+ m_dist_start((line_mr(x + line_subpixel_size/2) - line_mr(sx)) * m_dy_start -
+ (line_mr(y + line_subpixel_size/2) - line_mr(sy)) * m_dx_start)
+ {
+ m_dx <<= line_subpixel_shift;
+ m_dy <<= line_subpixel_shift;
+ m_dx_start <<= line_mr_subpixel_shift;
+ m_dy_start <<= line_mr_subpixel_shift;
+ }
+
+ distance_interpolator2(int x1, int y1, int x2, int y2,
+ int ex, int ey, int x, int y, int) :
+ m_dx(x2 - x1),
+ m_dy(y2 - y1),
+ m_dx_start(line_mr(ex) - line_mr(x2)),
+ m_dy_start(line_mr(ey) - line_mr(y2)),
+
+ m_dist(int(double(x + line_subpixel_size/2 - x2) * double(m_dy) -
+ double(y + line_subpixel_size/2 - y2) * double(m_dx))),
+
+ m_dist_start((line_mr(x + line_subpixel_size/2) - line_mr(ex)) * m_dy_start -
+ (line_mr(y + line_subpixel_size/2) - line_mr(ey)) * m_dx_start)
+ {
+ m_dx <<= line_subpixel_shift;
+ m_dy <<= line_subpixel_shift;
+ m_dx_start <<= line_mr_subpixel_shift;
+ m_dy_start <<= line_mr_subpixel_shift;
+ }
+
+
+ //---------------------------------------------------------------------
+ void inc_x() { m_dist += m_dy; m_dist_start += m_dy_start; }
+ void dec_x() { m_dist -= m_dy; m_dist_start -= m_dy_start; }
+ void inc_y() { m_dist -= m_dx; m_dist_start -= m_dx_start; }
+ void dec_y() { m_dist += m_dx; m_dist_start += m_dx_start; }
+
+ //---------------------------------------------------------------------
+ void inc_x(int _dy)
+ {
+ m_dist += m_dy;
+ m_dist_start += m_dy_start;
+ if(_dy > 0)
+ {
+ m_dist -= m_dx;
+ m_dist_start -= m_dx_start;
+ }
+ if(_dy < 0)
+ {
+ m_dist += m_dx;
+ m_dist_start += m_dx_start;
+ }
+ }
+
+ //---------------------------------------------------------------------
+ void dec_x(int _dy)
+ {
+ m_dist -= m_dy;
+ m_dist_start -= m_dy_start;
+ if(_dy > 0)
+ {
+ m_dist -= m_dx;
+ m_dist_start -= m_dx_start;
+ }
+ if(_dy < 0)
+ {
+ m_dist += m_dx;
+ m_dist_start += m_dx_start;
+ }
+ }
+
+ //---------------------------------------------------------------------
+ void inc_y(int _dx)
+ {
+ m_dist -= m_dx;
+ m_dist_start -= m_dx_start;
+ if(_dx > 0)
+ {
+ m_dist += m_dy;
+ m_dist_start += m_dy_start;
+ }
+ if(_dx < 0)
+ {
+ m_dist -= m_dy;
+ m_dist_start -= m_dy_start;
+ }
+ }
+
+ //---------------------------------------------------------------------
+ void dec_y(int _dx)
+ {
+ m_dist += m_dx;
+ m_dist_start += m_dx_start;
+ if(_dx > 0)
+ {
+ m_dist += m_dy;
+ m_dist_start += m_dy_start;
+ }
+ if(_dx < 0)
+ {
+ m_dist -= m_dy;
+ m_dist_start -= m_dy_start;
+ }
+ }
+
+ //---------------------------------------------------------------------
+ int dist() const { return m_dist; }
+ int dist_start() const { return m_dist_start; }
+ int dist_end() const { return m_dist_start; }
+
+ //---------------------------------------------------------------------
+ int dx() const { return m_dx; }
+ int dy() const { return m_dy; }
+ int dx_start() const { return m_dx_start; }
+ int dy_start() const { return m_dy_start; }
+ int dx_end() const { return m_dx_start; }
+ int dy_end() const { return m_dy_start; }
+
+ private:
+ //---------------------------------------------------------------------
+ int m_dx;
+ int m_dy;
+ int m_dx_start;
+ int m_dy_start;
+
+ int m_dist;
+ int m_dist_start;
+ };
+
+
+
+
+
+ //===================================================distance_interpolator3
+ class distance_interpolator3
+ {
+ public:
+ //---------------------------------------------------------------------
+ distance_interpolator3() {}
+ distance_interpolator3(int x1, int y1, int x2, int y2,
+ int sx, int sy, int ex, int ey,
+ int x, int y) :
+ m_dx(x2 - x1),
+ m_dy(y2 - y1),
+ m_dx_start(line_mr(sx) - line_mr(x1)),
+ m_dy_start(line_mr(sy) - line_mr(y1)),
+ m_dx_end(line_mr(ex) - line_mr(x2)),
+ m_dy_end(line_mr(ey) - line_mr(y2)),
+
+ m_dist(int(double(x + line_subpixel_size/2 - x2) * double(m_dy) -
+ double(y + line_subpixel_size/2 - y2) * double(m_dx))),
+
+ m_dist_start((line_mr(x + line_subpixel_size/2) - line_mr(sx)) * m_dy_start -
+ (line_mr(y + line_subpixel_size/2) - line_mr(sy)) * m_dx_start),
+
+ m_dist_end((line_mr(x + line_subpixel_size/2) - line_mr(ex)) * m_dy_end -
+ (line_mr(y + line_subpixel_size/2) - line_mr(ey)) * m_dx_end)
+ {
+ m_dx <<= line_subpixel_shift;
+ m_dy <<= line_subpixel_shift;
+ m_dx_start <<= line_mr_subpixel_shift;
+ m_dy_start <<= line_mr_subpixel_shift;
+ m_dx_end <<= line_mr_subpixel_shift;
+ m_dy_end <<= line_mr_subpixel_shift;
+ }
+
+ //---------------------------------------------------------------------
+ void inc_x() { m_dist += m_dy; m_dist_start += m_dy_start; m_dist_end += m_dy_end; }
+ void dec_x() { m_dist -= m_dy; m_dist_start -= m_dy_start; m_dist_end -= m_dy_end; }
+ void inc_y() { m_dist -= m_dx; m_dist_start -= m_dx_start; m_dist_end -= m_dx_end; }
+ void dec_y() { m_dist += m_dx; m_dist_start += m_dx_start; m_dist_end += m_dx_end; }
+
+ //---------------------------------------------------------------------
+ void inc_x(int _dy)
+ {
+ m_dist += m_dy;
+ m_dist_start += m_dy_start;
+ m_dist_end += m_dy_end;
+ if(_dy > 0)
+ {
+ m_dist -= m_dx;
+ m_dist_start -= m_dx_start;
+ m_dist_end -= m_dx_end;
+ }
+ if(_dy < 0)
+ {
+ m_dist += m_dx;
+ m_dist_start += m_dx_start;
+ m_dist_end += m_dx_end;
+ }
+ }
+
+ //---------------------------------------------------------------------
+ void dec_x(int _dy)
+ {
+ m_dist -= m_dy;
+ m_dist_start -= m_dy_start;
+ m_dist_end -= m_dy_end;
+ if(_dy > 0)
+ {
+ m_dist -= m_dx;
+ m_dist_start -= m_dx_start;
+ m_dist_end -= m_dx_end;
+ }
+ if(_dy < 0)
+ {
+ m_dist += m_dx;
+ m_dist_start += m_dx_start;
+ m_dist_end += m_dx_end;
+ }
+ }
+
+ //---------------------------------------------------------------------
+ void inc_y(int _dx)
+ {
+ m_dist -= m_dx;
+ m_dist_start -= m_dx_start;
+ m_dist_end -= m_dx_end;
+ if(_dx > 0)
+ {
+ m_dist += m_dy;
+ m_dist_start += m_dy_start;
+ m_dist_end += m_dy_end;
+ }
+ if(_dx < 0)
+ {
+ m_dist -= m_dy;
+ m_dist_start -= m_dy_start;
+ m_dist_end -= m_dy_end;
+ }
+ }
+
+ //---------------------------------------------------------------------
+ void dec_y(int _dx)
+ {
+ m_dist += m_dx;
+ m_dist_start += m_dx_start;
+ m_dist_end += m_dx_end;
+ if(_dx > 0)
+ {
+ m_dist += m_dy;
+ m_dist_start += m_dy_start;
+ m_dist_end += m_dy_end;
+ }
+ if(_dx < 0)
+ {
+ m_dist -= m_dy;
+ m_dist_start -= m_dy_start;
+ m_dist_end -= m_dy_end;
+ }
+ }
+
+ //---------------------------------------------------------------------
+ int dist() const { return m_dist; }
+ int dist_start() const { return m_dist_start; }
+ int dist_end() const { return m_dist_end; }
+
+ //---------------------------------------------------------------------
+ int dx() const { return m_dx; }
+ int dy() const { return m_dy; }
+ int dx_start() const { return m_dx_start; }
+ int dy_start() const { return m_dy_start; }
+ int dx_end() const { return m_dx_end; }
+ int dy_end() const { return m_dy_end; }
+
+ private:
+ //---------------------------------------------------------------------
+ int m_dx;
+ int m_dy;
+ int m_dx_start;
+ int m_dy_start;
+ int m_dx_end;
+ int m_dy_end;
+
+ int m_dist;
+ int m_dist_start;
+ int m_dist_end;
+ };
+
+
+
+
+
+ //================================================line_interpolator_aa_base
+ template<class Renderer> class line_interpolator_aa_base
+ {
+ public:
+ typedef Renderer renderer_type;
+ typedef typename Renderer::color_type color_type;
+
+ //---------------------------------------------------------------------
+ enum
+ {
+ max_half_width = 64
+ };
+
+ //---------------------------------------------------------------------
+ line_interpolator_aa_base(renderer_type& ren, const line_parameters& lp) :
+ m_lp(&lp),
+ m_li(lp.vertical ? line_dbl_hr(lp.x2 - lp.x1) :
+ line_dbl_hr(lp.y2 - lp.y1),
+ lp.vertical ? abs(lp.y2 - lp.y1) :
+ abs(lp.x2 - lp.x1) + 1),
+ m_ren(ren),
+ m_len((lp.vertical == (lp.inc > 0)) ? -lp.len : lp.len),
+ m_x(lp.x1 >> line_subpixel_shift),
+ m_y(lp.y1 >> line_subpixel_shift),
+ m_old_x(m_x),
+ m_old_y(m_y),
+ m_count((lp.vertical ? abs((lp.y2 >> line_subpixel_shift) - m_y) :
+ abs((lp.x2 >> line_subpixel_shift) - m_x))),
+ m_width(ren.subpixel_width()),
+ m_max_extent(m_width >> (line_subpixel_shift - 2)),
+ m_step(0)
+ {
+ agg::dda2_line_interpolator li(0, lp.vertical ?
+ (lp.dy << agg::line_subpixel_shift) :
+ (lp.dx << agg::line_subpixel_shift),
+ lp.len);
+
+ unsigned i;
+ int stop = m_width + line_subpixel_size * 2;
+ for(i = 0; i < max_half_width; ++i)
+ {
+ m_dist[i] = li.y();
+ if(m_dist[i] >= stop) break;
+ ++li;
+ }
+ m_dist[i++] = 0x7FFF0000;
+ }
+
+ //---------------------------------------------------------------------
+ template<class DI> int step_hor_base(DI& di)
+ {
+ ++m_li;
+ m_x += m_lp->inc;
+ m_y = (m_lp->y1 + m_li.y()) >> line_subpixel_shift;
+
+ if(m_lp->inc > 0) di.inc_x(m_y - m_old_y);
+ else di.dec_x(m_y - m_old_y);
+
+ m_old_y = m_y;
+
+ return di.dist() / m_len;
+ }
+
+ //---------------------------------------------------------------------
+ template<class DI> int step_ver_base(DI& di)
+ {
+ ++m_li;
+ m_y += m_lp->inc;
+ m_x = (m_lp->x1 + m_li.y()) >> line_subpixel_shift;
+
+ if(m_lp->inc > 0) di.inc_y(m_x - m_old_x);
+ else di.dec_y(m_x - m_old_x);
+
+ m_old_x = m_x;
+
+ return di.dist() / m_len;
+ }
+
+ //---------------------------------------------------------------------
+ bool vertical() const { return m_lp->vertical; }
+ int width() const { return m_width; }
+ int count() const { return m_count; }
+
+ private:
+ line_interpolator_aa_base(const line_interpolator_aa_base<Renderer>&);
+ const line_interpolator_aa_base<Renderer>&
+ operator = (const line_interpolator_aa_base<Renderer>&);
+
+ protected:
+ const line_parameters* m_lp;
+ dda2_line_interpolator m_li;
+ renderer_type& m_ren;
+ int m_len;
+ int m_x;
+ int m_y;
+ int m_old_x;
+ int m_old_y;
+ int m_count;
+ int m_width;
+ int m_max_extent;
+ int m_step;
+ int m_dist[max_half_width + 1];
+ cover_type m_covers[max_half_width * 2 + 4];
+ };
+
+
+
+
+
+
+
+ //====================================================line_interpolator_aa0
+ template<class Renderer> class line_interpolator_aa0 :
+ public line_interpolator_aa_base<Renderer>
+ {
+ public:
+ typedef Renderer renderer_type;
+ typedef typename Renderer::color_type color_type;
+ typedef line_interpolator_aa_base<Renderer> base_type;
+
+ //---------------------------------------------------------------------
+ line_interpolator_aa0(renderer_type& ren, const line_parameters& lp) :
+ line_interpolator_aa_base<Renderer>(ren, lp),
+ m_di(lp.x1, lp.y1, lp.x2, lp.y2,
+ lp.x1 & ~line_subpixel_mask, lp.y1 & ~line_subpixel_mask)
+ {
+ base_type::m_li.adjust_forward();
+ }
+
+ //---------------------------------------------------------------------
+ bool step_hor()
+ {
+ int dist;
+ int dy;
+ int s1 = base_type::step_hor_base(m_di);
+ cover_type* p0 = base_type::m_covers + base_type::max_half_width + 2;
+ cover_type* p1 = p0;
+
+ *p1++ = (cover_type)base_type::m_ren.cover(s1);
+
+ dy = 1;
+ while((dist = base_type::m_dist[dy] - s1) <= base_type::m_width)
+ {
+ *p1++ = (cover_type)base_type::m_ren.cover(dist);
+ ++dy;
+ }
+
+ dy = 1;
+ while((dist = base_type::m_dist[dy] + s1) <= base_type::m_width)
+ {
+ *--p0 = (cover_type)base_type::m_ren.cover(dist);
+ ++dy;
+ }
+ base_type::m_ren.blend_solid_vspan(base_type::m_x,
+ base_type::m_y - dy + 1,
+ unsigned(p1 - p0),
+ p0);
+ return ++base_type::m_step < base_type::m_count;
+ }
+
+ //---------------------------------------------------------------------
+ bool step_ver()
+ {
+ int dist;
+ int dx;
+ int s1 = base_type::step_ver_base(m_di);
+ cover_type* p0 = base_type::m_covers + base_type::max_half_width + 2;
+ cover_type* p1 = p0;
+
+ *p1++ = (cover_type)base_type::m_ren.cover(s1);
+
+ dx = 1;
+ while((dist = base_type::m_dist[dx] - s1) <= base_type::m_width)
+ {
+ *p1++ = (cover_type)base_type::m_ren.cover(dist);
+ ++dx;
+ }
+
+ dx = 1;
+ while((dist = base_type::m_dist[dx] + s1) <= base_type::m_width)
+ {
+ *--p0 = (cover_type)base_type::m_ren.cover(dist);
+ ++dx;
+ }
+ base_type::m_ren.blend_solid_hspan(base_type::m_x - dx + 1,
+ base_type::m_y,
+ unsigned(p1 - p0),
+ p0);
+ return ++base_type::m_step < base_type::m_count;
+ }
+
+ private:
+ line_interpolator_aa0(const line_interpolator_aa0<Renderer>&);
+ const line_interpolator_aa0<Renderer>&
+ operator = (const line_interpolator_aa0<Renderer>&);
+
+ //---------------------------------------------------------------------
+ distance_interpolator1 m_di;
+ };
+
+
+
+
+
+
+ //====================================================line_interpolator_aa1
+ template<class Renderer> class line_interpolator_aa1 :
+ public line_interpolator_aa_base<Renderer>
+ {
+ public:
+ typedef Renderer renderer_type;
+ typedef typename Renderer::color_type color_type;
+ typedef line_interpolator_aa_base<Renderer> base_type;
+
+ //---------------------------------------------------------------------
+ line_interpolator_aa1(renderer_type& ren, const line_parameters& lp,
+ int sx, int sy) :
+ line_interpolator_aa_base<Renderer>(ren, lp),
+ m_di(lp.x1, lp.y1, lp.x2, lp.y2, sx, sy,
+ lp.x1 & ~line_subpixel_mask, lp.y1 & ~line_subpixel_mask)
+ {
+ int dist1_start;
+ int dist2_start;
+
+ int npix = 1;
+
+ if(lp.vertical)
+ {
+ do
+ {
+ --base_type::m_li;
+ base_type::m_y -= lp.inc;
+ base_type::m_x = (base_type::m_lp->x1 + base_type::m_li.y()) >> line_subpixel_shift;
+
+ if(lp.inc > 0) m_di.dec_y(base_type::m_x - base_type::m_old_x);
+ else m_di.inc_y(base_type::m_x - base_type::m_old_x);
+
+ base_type::m_old_x = base_type::m_x;
+
+ dist1_start = dist2_start = m_di.dist_start();
+
+ int dx = 0;
+ if(dist1_start < 0) ++npix;
+ do
+ {
+ dist1_start += m_di.dy_start();
+ dist2_start -= m_di.dy_start();
+ if(dist1_start < 0) ++npix;
+ if(dist2_start < 0) ++npix;
+ ++dx;
+ }
+ while(base_type::m_dist[dx] <= base_type::m_width);
+ --base_type::m_step;
+ if(npix == 0) break;
+ npix = 0;
+ }
+ while(base_type::m_step >= -base_type::m_max_extent);
+ }
+ else
+ {
+ do
+ {
+ --base_type::m_li;
+ base_type::m_x -= lp.inc;
+ base_type::m_y = (base_type::m_lp->y1 + base_type::m_li.y()) >> line_subpixel_shift;
+
+ if(lp.inc > 0) m_di.dec_x(base_type::m_y - base_type::m_old_y);
+ else m_di.inc_x(base_type::m_y - base_type::m_old_y);
+
+ base_type::m_old_y = base_type::m_y;
+
+ dist1_start = dist2_start = m_di.dist_start();
+
+ int dy = 0;
+ if(dist1_start < 0) ++npix;
+ do
+ {
+ dist1_start -= m_di.dx_start();
+ dist2_start += m_di.dx_start();
+ if(dist1_start < 0) ++npix;
+ if(dist2_start < 0) ++npix;
+ ++dy;
+ }
+ while(base_type::m_dist[dy] <= base_type::m_width);
+ --base_type::m_step;
+ if(npix == 0) break;
+ npix = 0;
+ }
+ while(base_type::m_step >= -base_type::m_max_extent);
+ }
+ base_type::m_li.adjust_forward();
+ }
+
+ //---------------------------------------------------------------------
+ bool step_hor()
+ {
+ int dist_start;
+ int dist;
+ int dy;
+ int s1 = base_type::step_hor_base(m_di);
+
+ dist_start = m_di.dist_start();
+ cover_type* p0 = base_type::m_covers + base_type::max_half_width + 2;
+ cover_type* p1 = p0;
+
+ *p1 = 0;
+ if(dist_start <= 0)
+ {
+ *p1 = (cover_type)base_type::m_ren.cover(s1);
+ }
+ ++p1;
+
+ dy = 1;
+ while((dist = base_type::m_dist[dy] - s1) <= base_type::m_width)
+ {
+ dist_start -= m_di.dx_start();
+ *p1 = 0;
+ if(dist_start <= 0)
+ {
+ *p1 = (cover_type)base_type::m_ren.cover(dist);
+ }
+ ++p1;
+ ++dy;
+ }
+
+ dy = 1;
+ dist_start = m_di.dist_start();
+ while((dist = base_type::m_dist[dy] + s1) <= base_type::m_width)
+ {
+ dist_start += m_di.dx_start();
+ *--p0 = 0;
+ if(dist_start <= 0)
+ {
+ *p0 = (cover_type)base_type::m_ren.cover(dist);
+ }
+ ++dy;
+ }
+
+ base_type::m_ren.blend_solid_vspan(base_type::m_x,
+ base_type::m_y - dy + 1,
+ unsigned(p1 - p0),
+ p0);
+ return ++base_type::m_step < base_type::m_count;
+ }
+
+ //---------------------------------------------------------------------
+ bool step_ver()
+ {
+ int dist_start;
+ int dist;
+ int dx;
+ int s1 = base_type::step_ver_base(m_di);
+ cover_type* p0 = base_type::m_covers + base_type::max_half_width + 2;
+ cover_type* p1 = p0;
+
+ dist_start = m_di.dist_start();
+
+ *p1 = 0;
+ if(dist_start <= 0)
+ {
+ *p1 = (cover_type)base_type::m_ren.cover(s1);
+ }
+ ++p1;
+
+ dx = 1;
+ while((dist = base_type::m_dist[dx] - s1) <= base_type::m_width)
+ {
+ dist_start += m_di.dy_start();
+ *p1 = 0;
+ if(dist_start <= 0)
+ {
+ *p1 = (cover_type)base_type::m_ren.cover(dist);
+ }
+ ++p1;
+ ++dx;
+ }
+
+ dx = 1;
+ dist_start = m_di.dist_start();
+ while((dist = base_type::m_dist[dx] + s1) <= base_type::m_width)
+ {
+ dist_start -= m_di.dy_start();
+ *--p0 = 0;
+ if(dist_start <= 0)
+ {
+ *p0 = (cover_type)base_type::m_ren.cover(dist);
+ }
+ ++dx;
+ }
+ base_type::m_ren.blend_solid_hspan(base_type::m_x - dx + 1,
+ base_type::m_y,
+ unsigned(p1 - p0),
+ p0);
+ return ++base_type::m_step < base_type::m_count;
+ }
+
+ private:
+ line_interpolator_aa1(const line_interpolator_aa1<Renderer>&);
+ const line_interpolator_aa1<Renderer>&
+ operator = (const line_interpolator_aa1<Renderer>&);
+
+ //---------------------------------------------------------------------
+ distance_interpolator2 m_di;
+ };
+
+
+
+
+
+
+
+
+
+
+
+
+ //====================================================line_interpolator_aa2
+ template<class Renderer> class line_interpolator_aa2 :
+ public line_interpolator_aa_base<Renderer>
+ {
+ public:
+ typedef Renderer renderer_type;
+ typedef typename Renderer::color_type color_type;
+ typedef line_interpolator_aa_base<Renderer> base_type;
+
+ //---------------------------------------------------------------------
+ line_interpolator_aa2(renderer_type& ren, const line_parameters& lp,
+ int ex, int ey) :
+ line_interpolator_aa_base<Renderer>(ren, lp),
+ m_di(lp.x1, lp.y1, lp.x2, lp.y2, ex, ey,
+ lp.x1 & ~line_subpixel_mask, lp.y1 & ~line_subpixel_mask,
+ 0)
+ {
+ base_type::m_li.adjust_forward();
+ base_type::m_step -= base_type::m_max_extent;
+ }
+
+ //---------------------------------------------------------------------
+ bool step_hor()
+ {
+ int dist_end;
+ int dist;
+ int dy;
+ int s1 = base_type::step_hor_base(m_di);
+ cover_type* p0 = base_type::m_covers + base_type::max_half_width + 2;
+ cover_type* p1 = p0;
+
+ dist_end = m_di.dist_end();
+
+ int npix = 0;
+ *p1 = 0;
+ if(dist_end > 0)
+ {
+ *p1 = (cover_type)base_type::m_ren.cover(s1);
+ ++npix;
+ }
+ ++p1;
+
+ dy = 1;
+ while((dist = base_type::m_dist[dy] - s1) <= base_type::m_width)
+ {
+ dist_end -= m_di.dx_end();
+ *p1 = 0;
+ if(dist_end > 0)
+ {
+ *p1 = (cover_type)base_type::m_ren.cover(dist);
+ ++npix;
+ }
+ ++p1;
+ ++dy;
+ }
+
+ dy = 1;
+ dist_end = m_di.dist_end();
+ while((dist = base_type::m_dist[dy] + s1) <= base_type::m_width)
+ {
+ dist_end += m_di.dx_end();
+ *--p0 = 0;
+ if(dist_end > 0)
+ {
+ *p0 = (cover_type)base_type::m_ren.cover(dist);
+ ++npix;
+ }
+ ++dy;
+ }
+ base_type::m_ren.blend_solid_vspan(base_type::m_x,
+ base_type::m_y - dy + 1,
+ unsigned(p1 - p0),
+ p0);
+ return npix && ++base_type::m_step < base_type::m_count;
+ }
+
+ //---------------------------------------------------------------------
+ bool step_ver()
+ {
+ int dist_end;
+ int dist;
+ int dx;
+ int s1 = base_type::step_ver_base(m_di);
+ cover_type* p0 = base_type::m_covers + base_type::max_half_width + 2;
+ cover_type* p1 = p0;
+
+ dist_end = m_di.dist_end();
+
+ int npix = 0;
+ *p1 = 0;
+ if(dist_end > 0)
+ {
+ *p1 = (cover_type)base_type::m_ren.cover(s1);
+ ++npix;
+ }
+ ++p1;
+
+ dx = 1;
+ while((dist = base_type::m_dist[dx] - s1) <= base_type::m_width)
+ {
+ dist_end += m_di.dy_end();
+ *p1 = 0;
+ if(dist_end > 0)
+ {
+ *p1 = (cover_type)base_type::m_ren.cover(dist);
+ ++npix;
+ }
+ ++p1;
+ ++dx;
+ }
+
+ dx = 1;
+ dist_end = m_di.dist_end();
+ while((dist = base_type::m_dist[dx] + s1) <= base_type::m_width)
+ {
+ dist_end -= m_di.dy_end();
+ *--p0 = 0;
+ if(dist_end > 0)
+ {
+ *p0 = (cover_type)base_type::m_ren.cover(dist);
+ ++npix;
+ }
+ ++dx;
+ }
+ base_type::m_ren.blend_solid_hspan(base_type::m_x - dx + 1,
+ base_type::m_y,
+ unsigned(p1 - p0),
+ p0);
+ return npix && ++base_type::m_step < base_type::m_count;
+ }
+
+ private:
+ line_interpolator_aa2(const line_interpolator_aa2<Renderer>&);
+ const line_interpolator_aa2<Renderer>&
+ operator = (const line_interpolator_aa2<Renderer>&);
+
+ //---------------------------------------------------------------------
+ distance_interpolator2 m_di;
+ };
+
+
+
+
+
+
+
+
+
+
+ //====================================================line_interpolator_aa3
+ template<class Renderer> class line_interpolator_aa3 :
+ public line_interpolator_aa_base<Renderer>
+ {
+ public:
+ typedef Renderer renderer_type;
+ typedef typename Renderer::color_type color_type;
+ typedef line_interpolator_aa_base<Renderer> base_type;
+
+ //---------------------------------------------------------------------
+ line_interpolator_aa3(renderer_type& ren, const line_parameters& lp,
+ int sx, int sy, int ex, int ey) :
+ line_interpolator_aa_base<Renderer>(ren, lp),
+ m_di(lp.x1, lp.y1, lp.x2, lp.y2, sx, sy, ex, ey,
+ lp.x1 & ~line_subpixel_mask, lp.y1 & ~line_subpixel_mask)
+ {
+ int dist1_start;
+ int dist2_start;
+ int npix = 1;
+ if(lp.vertical)
+ {
+ do
+ {
+ --base_type::m_li;
+ base_type::m_y -= lp.inc;
+ base_type::m_x = (base_type::m_lp->x1 + base_type::m_li.y()) >> line_subpixel_shift;
+
+ if(lp.inc > 0) m_di.dec_y(base_type::m_x - base_type::m_old_x);
+ else m_di.inc_y(base_type::m_x - base_type::m_old_x);
+
+ base_type::m_old_x = base_type::m_x;
+
+ dist1_start = dist2_start = m_di.dist_start();
+
+ int dx = 0;
+ if(dist1_start < 0) ++npix;
+ do
+ {
+ dist1_start += m_di.dy_start();
+ dist2_start -= m_di.dy_start();
+ if(dist1_start < 0) ++npix;
+ if(dist2_start < 0) ++npix;
+ ++dx;
+ }
+ while(base_type::m_dist[dx] <= base_type::m_width);
+ if(npix == 0) break;
+ npix = 0;
+ }
+ while(--base_type::m_step >= -base_type::m_max_extent);
+ }
+ else
+ {
+ do
+ {
+ --base_type::m_li;
+ base_type::m_x -= lp.inc;
+ base_type::m_y = (base_type::m_lp->y1 + base_type::m_li.y()) >> line_subpixel_shift;
+
+ if(lp.inc > 0) m_di.dec_x(base_type::m_y - base_type::m_old_y);
+ else m_di.inc_x(base_type::m_y - base_type::m_old_y);
+
+ base_type::m_old_y = base_type::m_y;
+
+ dist1_start = dist2_start = m_di.dist_start();
+
+ int dy = 0;
+ if(dist1_start < 0) ++npix;
+ do
+ {
+ dist1_start -= m_di.dx_start();
+ dist2_start += m_di.dx_start();
+ if(dist1_start < 0) ++npix;
+ if(dist2_start < 0) ++npix;
+ ++dy;
+ }
+ while(base_type::m_dist[dy] <= base_type::m_width);
+ if(npix == 0) break;
+ npix = 0;
+ }
+ while(--base_type::m_step >= -base_type::m_max_extent);
+ }
+ base_type::m_li.adjust_forward();
+ base_type::m_step -= base_type::m_max_extent;
+ }
+
+
+ //---------------------------------------------------------------------
+ bool step_hor()
+ {
+ int dist_start;
+ int dist_end;
+ int dist;
+ int dy;
+ int s1 = base_type::step_hor_base(m_di);
+ cover_type* p0 = base_type::m_covers + base_type::max_half_width + 2;
+ cover_type* p1 = p0;
+
+ dist_start = m_di.dist_start();
+ dist_end = m_di.dist_end();
+
+ int npix = 0;
+ *p1 = 0;
+ if(dist_end > 0)
+ {
+ if(dist_start <= 0)
+ {
+ *p1 = (cover_type)base_type::m_ren.cover(s1);
+ }
+ ++npix;
+ }
+ ++p1;
+
+ dy = 1;
+ while((dist = base_type::m_dist[dy] - s1) <= base_type::m_width)
+ {
+ dist_start -= m_di.dx_start();
+ dist_end -= m_di.dx_end();
+ *p1 = 0;
+ if(dist_end > 0 && dist_start <= 0)
+ {
+ *p1 = (cover_type)base_type::m_ren.cover(dist);
+ ++npix;
+ }
+ ++p1;
+ ++dy;
+ }
+
+ dy = 1;
+ dist_start = m_di.dist_start();
+ dist_end = m_di.dist_end();
+ while((dist = base_type::m_dist[dy] + s1) <= base_type::m_width)
+ {
+ dist_start += m_di.dx_start();
+ dist_end += m_di.dx_end();
+ *--p0 = 0;
+ if(dist_end > 0 && dist_start <= 0)
+ {
+ *p0 = (cover_type)base_type::m_ren.cover(dist);
+ ++npix;
+ }
+ ++dy;
+ }
+ base_type::m_ren.blend_solid_vspan(base_type::m_x,
+ base_type::m_y - dy + 1,
+ unsigned(p1 - p0),
+ p0);
+ return npix && ++base_type::m_step < base_type::m_count;
+ }
+
+ //---------------------------------------------------------------------
+ bool step_ver()
+ {
+ int dist_start;
+ int dist_end;
+ int dist;
+ int dx;
+ int s1 = base_type::step_ver_base(m_di);
+ cover_type* p0 = base_type::m_covers + base_type::max_half_width + 2;
+ cover_type* p1 = p0;
+
+ dist_start = m_di.dist_start();
+ dist_end = m_di.dist_end();
+
+ int npix = 0;
+ *p1 = 0;
+ if(dist_end > 0)
+ {
+ if(dist_start <= 0)
+ {
+ *p1 = (cover_type)base_type::m_ren.cover(s1);
+ }
+ ++npix;
+ }
+ ++p1;
+
+ dx = 1;
+ while((dist = base_type::m_dist[dx] - s1) <= base_type::m_width)
+ {
+ dist_start += m_di.dy_start();
+ dist_end += m_di.dy_end();
+ *p1 = 0;
+ if(dist_end > 0 && dist_start <= 0)
+ {
+ *p1 = (cover_type)base_type::m_ren.cover(dist);
+ ++npix;
+ }
+ ++p1;
+ ++dx;
+ }
+
+ dx = 1;
+ dist_start = m_di.dist_start();
+ dist_end = m_di.dist_end();
+ while((dist = base_type::m_dist[dx] + s1) <= base_type::m_width)
+ {
+ dist_start -= m_di.dy_start();
+ dist_end -= m_di.dy_end();
+ *--p0 = 0;
+ if(dist_end > 0 && dist_start <= 0)
+ {
+ *p0 = (cover_type)base_type::m_ren.cover(dist);
+ ++npix;
+ }
+ ++dx;
+ }
+ base_type::m_ren.blend_solid_hspan(base_type::m_x - dx + 1,
+ base_type::m_y,
+ unsigned(p1 - p0),
+ p0);
+ return npix && ++base_type::m_step < base_type::m_count;
+ }
+
+ private:
+ line_interpolator_aa3(const line_interpolator_aa3<Renderer>&);
+ const line_interpolator_aa3<Renderer>&
+ operator = (const line_interpolator_aa3<Renderer>&);
+
+ //---------------------------------------------------------------------
+ distance_interpolator3 m_di;
+ };
+
+
+
+
+ //==========================================================line_profile_aa
+ //
+ // See Implementation agg_line_profile_aa.cpp
+ //
+ class line_profile_aa
+ {
+ public:
+ //---------------------------------------------------------------------
+ typedef int8u value_type;
+ enum
+ {
+ subpixel_shift = line_subpixel_shift,
+ subpixel_size = 1 << subpixel_shift,
+ subpixel_mask = subpixel_size - 1
+ };
+
+ enum
+ {
+ aa_shift = 8,
+ aa_num = 1 << aa_shift,
+ aa_mask = aa_num - 1
+ };
+
+ //---------------------------------------------------------------------
+ ~line_profile_aa() { delete [] m_profile; }
+
+ //---------------------------------------------------------------------
+ line_profile_aa() :
+ m_size(0),
+ m_profile(0),
+ m_subpixel_width(0),
+ m_min_width(1.0),
+ m_smoother_width(1.0)
+ {
+ int i;
+ for(i = 0; i < aa_num; i++) m_gamma[i] = (value_type)i;
+ }
+
+ //---------------------------------------------------------------------
+ template<class GammaF>
+ line_profile_aa(double w, const GammaF& gamma_function) :
+ m_size(0),
+ m_profile(0),
+ m_subpixel_width(0),
+ m_min_width(1.0),
+ m_smoother_width(1.0)
+ {
+ gamma(gamma_function);
+ width(w);
+ }
+
+ //---------------------------------------------------------------------
+ void min_width(double w) { m_min_width = w; }
+ void smoother_width(double w) { m_smoother_width = w; }
+
+ //---------------------------------------------------------------------
+ template<class GammaF> void gamma(const GammaF& gamma_function)
+ {
+ int i;
+ for(i = 0; i < aa_num; i++)
+ {
+ m_gamma[i] = value_type(
+ floor(
+ gamma_function(double(i) / aa_mask) * aa_mask + 0.5));
+ }
+ }
+
+ void width(double w);
+
+ unsigned profile_size() const { return m_size; }
+ int subpixel_width() const { return m_subpixel_width; }
+
+ //---------------------------------------------------------------------
+ double min_width() const { return m_min_width; }
+ double smoother_width() const { return m_smoother_width; }
+
+ //---------------------------------------------------------------------
+ value_type value(int dist) const
+ {
+ return m_profile[dist + subpixel_size*2];
+ }
+
+ private:
+ line_profile_aa(const line_profile_aa&);
+ const line_profile_aa& operator = (const line_profile_aa&);
+
+ value_type* profile(double w);
+ void set(double center_width, double smoother_width);
+
+ //---------------------------------------------------------------------
+ unsigned m_size;
+ value_type* m_profile;
+ value_type m_gamma[aa_num];
+ int m_subpixel_width;
+ double m_min_width;
+ double m_smoother_width;
+ };
+
+
+ //======================================================renderer_outline_aa
+ template<class BaseRenderer> class renderer_outline_aa
+ {
+ public:
+ //---------------------------------------------------------------------
+ typedef BaseRenderer base_ren_type;
+ typedef renderer_outline_aa<base_ren_type> self_type;
+ typedef typename base_ren_type::color_type color_type;
+
+ //---------------------------------------------------------------------
+ renderer_outline_aa(base_ren_type& ren, const line_profile_aa& prof) :
+ m_ren(&ren),
+ m_profile(&prof)
+ {
+ }
+
+ //---------------------------------------------------------------------
+ void color(const color_type& c) { m_color = c; }
+ const color_type& color() const { return m_color; }
+
+ //---------------------------------------------------------------------
+ void profile(const line_profile_aa& prof) { m_profile = &prof; }
+ const line_profile_aa& profile() const { return *m_profile; }
+ line_profile_aa& profile() { return const_cast<line_profile_aa&>(*m_profile); }
+
+ //---------------------------------------------------------------------
+ int subpixel_width() const { return m_profile->subpixel_width(); }
+
+ //---------------------------------------------------------------------
+ int cover(int d) const
+ {
+ return m_profile->value(d);
+ }
+
+ //-------------------------------------------------------------------------
+ void blend_solid_hspan(int x, int y, unsigned len, const cover_type* covers)
+ {
+ m_ren->blend_solid_hspan(x, y, len, m_color, covers);
+ }
+
+ //-------------------------------------------------------------------------
+ void blend_solid_vspan(int x, int y, unsigned len, const cover_type* covers)
+ {
+ m_ren->blend_solid_vspan(x, y, len, m_color, covers);
+ }
+
+ //-------------------------------------------------------------------------
+ static bool accurate_join_only() { return false; }
+
+ //-------------------------------------------------------------------------
+ template<class Cmp>
+ void semidot_hline(Cmp cmp,
+ int xc1, int yc1, int xc2, int yc2,
+ int x1, int y1, int x2)
+ {
+ cover_type covers[line_interpolator_aa_base<self_type>::max_half_width * 2 + 4];
+ cover_type* p0 = covers;
+ cover_type* p1 = covers;
+ int x = x1 << line_subpixel_shift;
+ int y = y1 << line_subpixel_shift;
+ int w = subpixel_width();
+ distance_interpolator0 di(xc1, yc1, xc2, yc2, x, y);
+ x += line_subpixel_size/2;
+ y += line_subpixel_size/2;
+
+ int x0 = x1;
+ int dx = x - xc1;
+ int dy = y - yc1;
+ do
+ {
+ int d = int(fast_sqrt(dx*dx + dy*dy));
+ *p1 = 0;
+ if(cmp(di.dist()) && d <= w)
+ {
+ *p1 = (cover_type)cover(d);
+ }
+ ++p1;
+ dx += line_subpixel_size;
+ di.inc_x();
+ }
+ while(++x1 <= x2);
+ m_ren->blend_solid_hspan(x0, y1,
+ unsigned(p1 - p0),
+ color(),
+ p0);
+ }
+
+ //-------------------------------------------------------------------------
+ template<class Cmp>
+ void semidot(Cmp cmp, int xc1, int yc1, int xc2, int yc2)
+ {
+ int r = ((subpixel_width() + line_subpixel_mask) >> line_subpixel_shift);
+ if(r < 1) r = 1;
+ ellipse_bresenham_interpolator ei(r, r);
+ int dx = 0;
+ int dy = -r;
+ int dy0 = dy;
+ int dx0 = dx;
+ int x = xc1 >> line_subpixel_shift;
+ int y = yc1 >> line_subpixel_shift;
+
+ do
+ {
+ dx += ei.dx();
+ dy += ei.dy();
+
+ if(dy != dy0)
+ {
+ semidot_hline(cmp, xc1, yc1, xc2, yc2, x-dx0, y+dy0, x+dx0);
+ semidot_hline(cmp, xc1, yc1, xc2, yc2, x-dx0, y-dy0, x+dx0);
+ }
+ dx0 = dx;
+ dy0 = dy;
+ ++ei;
+ }
+ while(dy < 0);
+ semidot_hline(cmp, xc1, yc1, xc2, yc2, x-dx0, y+dy0, x+dx0);
+ }
+
+ //-------------------------------------------------------------------------
+ void line0(const line_parameters& lp)
+ {
+ line_interpolator_aa0<self_type> li(*this, lp);
+ if(li.count())
+ {
+ if(li.vertical())
+ {
+ while(li.step_ver()) ;
+ }
+ else
+ {
+ while(li.step_hor()) ;
+ }
+ }
+ }
+
+ //-------------------------------------------------------------------------
+ void line1(const line_parameters& lp, int sx, int sy)
+ {
+ fix_degenerate_bisectrix_start(lp, &sx, &sy);
+ line_interpolator_aa1<self_type> li(*this, lp, sx, sy);
+ if(li.vertical())
+ {
+ while(li.step_ver()) ;
+ }
+ else
+ {
+ while(li.step_hor()) ;
+ }
+ }
+
+ //-------------------------------------------------------------------------
+ void line2(const line_parameters& lp, int ex, int ey)
+ {
+ fix_degenerate_bisectrix_end(lp, &ex, &ey);
+ line_interpolator_aa2<self_type> li(*this, lp, ex, ey);
+ if(li.vertical())
+ {
+ while(li.step_ver()) ;
+ }
+ else
+ {
+ while(li.step_hor()) ;
+ }
+ }
+
+ //-------------------------------------------------------------------------
+ void line3(const line_parameters& lp,
+ int sx, int sy, int ex, int ey)
+ {
+ fix_degenerate_bisectrix_start(lp, &sx, &sy);
+ fix_degenerate_bisectrix_end(lp, &ex, &ey);
+ line_interpolator_aa3<self_type> li(*this, lp, sx, sy, ex, ey);
+ if(li.vertical())
+ {
+ while(li.step_ver()) ;
+ }
+ else
+ {
+ while(li.step_hor()) ;
+ }
+ }
+
+ private:
+ base_ren_type* m_ren;
+ const line_profile_aa* m_profile;
+ color_type m_color;
+ };
+
+
+
+}
+
+#endif
diff --git a/agg/inc/agg_renderer_outline_image.h b/agg/inc/agg_renderer_outline_image.h
new file mode 100755
index 000000000000..d5cd3992448c
--- /dev/null
+++ b/agg/inc/agg_renderer_outline_image.h
@@ -0,0 +1,924 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+#ifndef AGG_RENDERER_OUTLINE_IMAGE_INCLUDED
+#define AGG_RENDERER_OUTLINE_IMAGE_INCLUDED
+
+#include <math.h>
+#include "agg_line_aa_basics.h"
+#include "agg_dda_line.h"
+#include "agg_rendering_buffer.h"
+
+
+namespace agg
+{
+ //========================================================line_image_scale
+ template<class Source> class line_image_scale
+ {
+ public:
+ typedef typename Source::color_type color_type;
+
+ line_image_scale(const Source& src, double height) :
+ m_source(src),
+ m_height(height),
+ m_scale(src.height() / height)
+ {
+ }
+
+ double width() const { return m_source.width(); }
+ double height() const { return m_height; }
+
+ color_type pixel(int x, int y) const
+ {
+ double src_y = (y + 0.5) * m_scale - 0.5;
+ int h = int(m_source.height()) - 1;
+ int y1 = int(floor(src_y));
+ int y2 = y1 + 1;
+ color_type pix1 = (y1 < 0) ? color_type::no_color() : m_source.pixel(x, y1);
+ color_type pix2 = (y2 > h) ? color_type::no_color() : m_source.pixel(x, y2);
+ return pix1.gradient(pix2, src_y - y1);
+ }
+
+ private:
+ line_image_scale(const line_image_scale<Source>&);
+ const line_image_scale<Source>& operator = (const line_image_scale<Source>&);
+
+ const Source& m_source;
+ double m_height;
+ double m_scale;
+ };
+
+
+
+ //======================================================line_image_pattern
+ template<class Filter> class line_image_pattern
+ {
+ public:
+ typedef Filter filter_type;
+ typedef typename filter_type::color_type color_type;
+
+ //--------------------------------------------------------------------
+ ~line_image_pattern()
+ {
+ delete [] m_data;
+ }
+
+ //--------------------------------------------------------------------
+ line_image_pattern(const Filter& filter) :
+ m_filter(&filter),
+ m_dilation(filter.dilation() + 1),
+ m_dilation_hr(m_dilation << line_subpixel_shift),
+ m_data(0),
+ m_width(0),
+ m_height(0),
+ m_width_hr(0),
+ m_half_height_hr(0),
+ m_offset_y_hr(0)
+ {
+ }
+
+ // Create
+ //--------------------------------------------------------------------
+ template<class Source>
+ line_image_pattern(const Filter& filter, const Source& src) :
+ m_filter(&filter),
+ m_dilation(filter.dilation() + 1),
+ m_dilation_hr(m_dilation << line_subpixel_shift),
+ m_data(0),
+ m_width(0),
+ m_height(0),
+ m_width_hr(0),
+ m_half_height_hr(0),
+ m_offset_y_hr(0)
+ {
+ create(src);
+ }
+
+ // Create
+ //--------------------------------------------------------------------
+ template<class Source> void create(const Source& src)
+ {
+ m_height = unsigned(ceil((double)src.height()));
+ m_width = unsigned(ceil((double)src.width()));
+ m_width_hr = int(src.width() * line_subpixel_size);
+ m_half_height_hr = int(src.height() * line_subpixel_size/2);
+ m_offset_y_hr = m_dilation_hr + m_half_height_hr - line_subpixel_size/2;
+ m_half_height_hr += line_subpixel_size/2;
+
+ delete [] m_data;
+ m_data = new color_type [(m_width + m_dilation * 2) * (m_height + m_dilation * 2)];
+
+ m_buf.attach(m_data, m_width + m_dilation * 2,
+ m_height + m_dilation * 2,
+ m_width + m_dilation * 2);
+ unsigned x, y;
+ color_type* d1;
+ color_type* d2;
+ for(y = 0; y < m_height; y++)
+ {
+ d1 = m_buf.row(y + m_dilation) + m_dilation;
+ for(x = 0; x < m_width; x++)
+ {
+ *d1++ = src.pixel(x, y);
+ }
+ }
+
+ const color_type* s1;
+ const color_type* s2;
+ for(y = 0; y < m_dilation; y++)
+ {
+ //s1 = m_buf.row(m_height + m_dilation - 1) + m_dilation;
+ //s2 = m_buf.row(m_dilation) + m_dilation;
+ d1 = m_buf.row(m_dilation + m_height + y) + m_dilation;
+ d2 = m_buf.row(m_dilation - y - 1) + m_dilation;
+ for(x = 0; x < m_width; x++)
+ {
+ //*d1++ = color_type(*s1++, 0);
+ //*d2++ = color_type(*s2++, 0);
+ *d1++ = color_type::no_color();
+ *d2++ = color_type::no_color();
+ }
+ }
+
+ unsigned h = m_height + m_dilation * 2;
+ for(y = 0; y < h; y++)
+ {
+ s1 = m_buf.row(y) + m_dilation;
+ s2 = m_buf.row(y) + m_dilation + m_width;
+ d1 = m_buf.row(y) + m_dilation + m_width;
+ d2 = m_buf.row(y) + m_dilation;
+
+ for(x = 0; x < m_dilation; x++)
+ {
+ *d1++ = *s1++;
+ *--d2 = *--s2;
+ }
+ }
+ }
+
+ //--------------------------------------------------------------------
+ int pattern_width() const { return m_width_hr; }
+ int line_width() const { return m_half_height_hr; }
+
+ //--------------------------------------------------------------------
+ void pixel(color_type* p, int x, int y) const
+ {
+ m_filter->pixel_high_res(m_buf.rows(),
+ p,
+ x % m_width_hr + m_dilation_hr,
+ y + m_offset_y_hr);
+ }
+
+ //--------------------------------------------------------------------
+ const filter_type& filter() const { return *m_filter; }
+
+ private:
+ line_image_pattern(const line_image_pattern<filter_type>&);
+ const line_image_pattern<filter_type>&
+ operator = (const line_image_pattern<filter_type>&);
+
+ protected:
+ row_ptr_cache<color_type> m_buf;
+ const filter_type* m_filter;
+ unsigned m_dilation;
+ int m_dilation_hr;
+ color_type* m_data;
+ unsigned m_width;
+ unsigned m_height;
+ int m_width_hr;
+ int m_half_height_hr;
+ int m_offset_y_hr;
+ };
+
+
+
+
+
+
+ //=================================================line_image_pattern_pow2
+ template<class Filter> class line_image_pattern_pow2 :
+ public line_image_pattern<Filter>
+ {
+ public:
+ typedef Filter filter_type;
+ typedef typename filter_type::color_type color_type;
+ typedef line_image_pattern<Filter> base_type;
+
+ //--------------------------------------------------------------------
+ line_image_pattern_pow2(const Filter& filter) :
+ line_image_pattern<Filter>(filter), m_mask(line_subpixel_mask) {}
+
+ //--------------------------------------------------------------------
+ template<class Source>
+ line_image_pattern_pow2(const Filter& filter, const Source& src) :
+ line_image_pattern<Filter>(filter), m_mask(line_subpixel_mask)
+ {
+ create(src);
+ }
+
+ //--------------------------------------------------------------------
+ template<class Source> void create(const Source& src)
+ {
+ line_image_pattern<Filter>::create(src);
+ m_mask = 1;
+ while(m_mask < base_type::m_width)
+ {
+ m_mask <<= 1;
+ m_mask |= 1;
+ }
+ m_mask <<= line_subpixel_shift - 1;
+ m_mask |= line_subpixel_mask;
+ base_type::m_width_hr = m_mask + 1;
+ }
+
+ //--------------------------------------------------------------------
+ void pixel(color_type* p, int x, int y) const
+ {
+ base_type::m_filter->pixel_high_res(
+ base_type::m_buf.rows(),
+ p,
+ (x & m_mask) + base_type::m_dilation_hr,
+ y + base_type::m_offset_y_hr);
+ }
+ private:
+ unsigned m_mask;
+ };
+
+
+
+
+
+
+
+ //===================================================distance_interpolator4
+ class distance_interpolator4
+ {
+ public:
+ //---------------------------------------------------------------------
+ distance_interpolator4() {}
+ distance_interpolator4(int x1, int y1, int x2, int y2,
+ int sx, int sy, int ex, int ey,
+ int len, double scale, int x, int y) :
+ m_dx(x2 - x1),
+ m_dy(y2 - y1),
+ m_dx_start(line_mr(sx) - line_mr(x1)),
+ m_dy_start(line_mr(sy) - line_mr(y1)),
+ m_dx_end(line_mr(ex) - line_mr(x2)),
+ m_dy_end(line_mr(ey) - line_mr(y2)),
+
+ m_dist(int(double(x + line_subpixel_size/2 - x2) * double(m_dy) -
+ double(y + line_subpixel_size/2 - y2) * double(m_dx))),
+
+ m_dist_start((line_mr(x + line_subpixel_size/2) - line_mr(sx)) * m_dy_start -
+ (line_mr(y + line_subpixel_size/2) - line_mr(sy)) * m_dx_start),
+
+ m_dist_end((line_mr(x + line_subpixel_size/2) - line_mr(ex)) * m_dy_end -
+ (line_mr(y + line_subpixel_size/2) - line_mr(ey)) * m_dx_end),
+ m_len(int(len / scale))
+ {
+ double d = len * scale;
+ int dx = int(((x2 - x1) << line_subpixel_shift) / d);
+ int dy = int(((y2 - y1) << line_subpixel_shift) / d);
+ m_dx_pict = -dy;
+ m_dy_pict = dx;
+ m_dist_pict = ((x + line_subpixel_size/2 - (x1 - dy)) * m_dy_pict -
+ (y + line_subpixel_size/2 - (y1 + dx)) * m_dx_pict) >>
+ line_subpixel_shift;
+
+ m_dx <<= line_subpixel_shift;
+ m_dy <<= line_subpixel_shift;
+ m_dx_start <<= line_mr_subpixel_shift;
+ m_dy_start <<= line_mr_subpixel_shift;
+ m_dx_end <<= line_mr_subpixel_shift;
+ m_dy_end <<= line_mr_subpixel_shift;
+ }
+
+ //---------------------------------------------------------------------
+ void inc_x()
+ {
+ m_dist += m_dy;
+ m_dist_start += m_dy_start;
+ m_dist_pict += m_dy_pict;
+ m_dist_end += m_dy_end;
+ }
+
+ //---------------------------------------------------------------------
+ void dec_x()
+ {
+ m_dist -= m_dy;
+ m_dist_start -= m_dy_start;
+ m_dist_pict -= m_dy_pict;
+ m_dist_end -= m_dy_end;
+ }
+
+ //---------------------------------------------------------------------
+ void inc_y()
+ {
+ m_dist -= m_dx;
+ m_dist_start -= m_dx_start;
+ m_dist_pict -= m_dx_pict;
+ m_dist_end -= m_dx_end;
+ }
+
+ //---------------------------------------------------------------------
+ void dec_y()
+ {
+ m_dist += m_dx;
+ m_dist_start += m_dx_start;
+ m_dist_pict += m_dx_pict;
+ m_dist_end += m_dx_end;
+ }
+
+ //---------------------------------------------------------------------
+ void inc_x(int dy)
+ {
+ m_dist += m_dy;
+ m_dist_start += m_dy_start;
+ m_dist_pict += m_dy_pict;
+ m_dist_end += m_dy_end;
+ if(dy > 0)
+ {
+ m_dist -= m_dx;
+ m_dist_start -= m_dx_start;
+ m_dist_pict -= m_dx_pict;
+ m_dist_end -= m_dx_end;
+ }
+ if(dy < 0)
+ {
+ m_dist += m_dx;
+ m_dist_start += m_dx_start;
+ m_dist_pict += m_dx_pict;
+ m_dist_end += m_dx_end;
+ }
+ }
+
+ //---------------------------------------------------------------------
+ void dec_x(int dy)
+ {
+ m_dist -= m_dy;
+ m_dist_start -= m_dy_start;
+ m_dist_pict -= m_dy_pict;
+ m_dist_end -= m_dy_end;
+ if(dy > 0)
+ {
+ m_dist -= m_dx;
+ m_dist_start -= m_dx_start;
+ m_dist_pict -= m_dx_pict;
+ m_dist_end -= m_dx_end;
+ }
+ if(dy < 0)
+ {
+ m_dist += m_dx;
+ m_dist_start += m_dx_start;
+ m_dist_pict += m_dx_pict;
+ m_dist_end += m_dx_end;
+ }
+ }
+
+ //---------------------------------------------------------------------
+ void inc_y(int dx)
+ {
+ m_dist -= m_dx;
+ m_dist_start -= m_dx_start;
+ m_dist_pict -= m_dx_pict;
+ m_dist_end -= m_dx_end;
+ if(dx > 0)
+ {
+ m_dist += m_dy;
+ m_dist_start += m_dy_start;
+ m_dist_pict += m_dy_pict;
+ m_dist_end += m_dy_end;
+ }
+ if(dx < 0)
+ {
+ m_dist -= m_dy;
+ m_dist_start -= m_dy_start;
+ m_dist_pict -= m_dy_pict;
+ m_dist_end -= m_dy_end;
+ }
+ }
+
+ //---------------------------------------------------------------------
+ void dec_y(int dx)
+ {
+ m_dist += m_dx;
+ m_dist_start += m_dx_start;
+ m_dist_pict += m_dx_pict;
+ m_dist_end += m_dx_end;
+ if(dx > 0)
+ {
+ m_dist += m_dy;
+ m_dist_start += m_dy_start;
+ m_dist_pict += m_dy_pict;
+ m_dist_end += m_dy_end;
+ }
+ if(dx < 0)
+ {
+ m_dist -= m_dy;
+ m_dist_start -= m_dy_start;
+ m_dist_pict -= m_dy_pict;
+ m_dist_end -= m_dy_end;
+ }
+ }
+
+ //---------------------------------------------------------------------
+ int dist() const { return m_dist; }
+ int dist_start() const { return m_dist_start; }
+ int dist_pict() const { return m_dist_pict; }
+ int dist_end() const { return m_dist_end; }
+
+ //---------------------------------------------------------------------
+ int dx() const { return m_dx; }
+ int dy() const { return m_dy; }
+ int dx_start() const { return m_dx_start; }
+ int dy_start() const { return m_dy_start; }
+ int dx_pict() const { return m_dx_pict; }
+ int dy_pict() const { return m_dy_pict; }
+ int dx_end() const { return m_dx_end; }
+ int dy_end() const { return m_dy_end; }
+ int len() const { return m_len; }
+
+ private:
+ //---------------------------------------------------------------------
+ int m_dx;
+ int m_dy;
+ int m_dx_start;
+ int m_dy_start;
+ int m_dx_pict;
+ int m_dy_pict;
+ int m_dx_end;
+ int m_dy_end;
+
+ int m_dist;
+ int m_dist_start;
+ int m_dist_pict;
+ int m_dist_end;
+ int m_len;
+ };
+
+
+
+
+
+ //==================================================line_interpolator_image
+ template<class Renderer> class line_interpolator_image
+ {
+ public:
+ typedef Renderer renderer_type;
+ typedef typename Renderer::color_type color_type;
+
+ //---------------------------------------------------------------------
+ enum
+ {
+ max_half_width = 64
+ };
+
+ //---------------------------------------------------------------------
+ line_interpolator_image(renderer_type& ren, const line_parameters& lp,
+ int sx, int sy, int ex, int ey,
+ int pattern_start,
+ double scale_x) :
+ m_lp(lp),
+ m_li(lp.vertical ? line_dbl_hr(lp.x2 - lp.x1) :
+ line_dbl_hr(lp.y2 - lp.y1),
+ lp.vertical ? abs(lp.y2 - lp.y1) :
+ abs(lp.x2 - lp.x1) + 1),
+ m_di(lp.x1, lp.y1, lp.x2, lp.y2, sx, sy, ex, ey, lp.len, scale_x,
+ lp.x1 & ~line_subpixel_mask, lp.y1 & ~line_subpixel_mask),
+ m_ren(ren),
+ m_x(lp.x1 >> line_subpixel_shift),
+ m_y(lp.y1 >> line_subpixel_shift),
+ m_old_x(m_x),
+ m_old_y(m_y),
+ m_count((lp.vertical ? abs((lp.y2 >> line_subpixel_shift) - m_y) :
+ abs((lp.x2 >> line_subpixel_shift) - m_x))),
+ m_width(ren.subpixel_width()),
+ m_max_extent(m_width >> (line_subpixel_shift - 2)),
+ m_start(pattern_start + (m_max_extent + 2) * ren.pattern_width()),
+ m_step(0)
+ {
+ agg::dda2_line_interpolator li(0, lp.vertical ?
+ (lp.dy << agg::line_subpixel_shift) :
+ (lp.dx << agg::line_subpixel_shift),
+ lp.len);
+
+ unsigned i;
+ int stop = m_width + line_subpixel_size * 2;
+ for(i = 0; i < max_half_width; ++i)
+ {
+ m_dist_pos[i] = li.y();
+ if(m_dist_pos[i] >= stop) break;
+ ++li;
+ }
+ m_dist_pos[i] = 0x7FFF0000;
+
+ int dist1_start;
+ int dist2_start;
+ int npix = 1;
+
+ if(lp.vertical)
+ {
+ do
+ {
+ --m_li;
+ m_y -= lp.inc;
+ m_x = (m_lp.x1 + m_li.y()) >> line_subpixel_shift;
+
+ if(lp.inc > 0) m_di.dec_y(m_x - m_old_x);
+ else m_di.inc_y(m_x - m_old_x);
+
+ m_old_x = m_x;
+
+ dist1_start = dist2_start = m_di.dist_start();
+
+ int dx = 0;
+ if(dist1_start < 0) ++npix;
+ do
+ {
+ dist1_start += m_di.dy_start();
+ dist2_start -= m_di.dy_start();
+ if(dist1_start < 0) ++npix;
+ if(dist2_start < 0) ++npix;
+ ++dx;
+ }
+ while(m_dist_pos[dx] <= m_width);
+ if(npix == 0) break;
+
+ npix = 0;
+ }
+ while(--m_step >= -m_max_extent);
+ }
+ else
+ {
+ do
+ {
+ --m_li;
+
+ m_x -= lp.inc;
+ m_y = (m_lp.y1 + m_li.y()) >> line_subpixel_shift;
+
+ if(lp.inc > 0) m_di.dec_x(m_y - m_old_y);
+ else m_di.inc_x(m_y - m_old_y);
+
+ m_old_y = m_y;
+
+ dist1_start = dist2_start = m_di.dist_start();
+
+ int dy = 0;
+ if(dist1_start < 0) ++npix;
+ do
+ {
+ dist1_start -= m_di.dx_start();
+ dist2_start += m_di.dx_start();
+ if(dist1_start < 0) ++npix;
+ if(dist2_start < 0) ++npix;
+ ++dy;
+ }
+ while(m_dist_pos[dy] <= m_width);
+ if(npix == 0) break;
+
+ npix = 0;
+ }
+ while(--m_step >= -m_max_extent);
+ }
+ m_li.adjust_forward();
+ m_step -= m_max_extent;
+ }
+
+ //---------------------------------------------------------------------
+ bool step_hor()
+ {
+ ++m_li;
+ m_x += m_lp.inc;
+ m_y = (m_lp.y1 + m_li.y()) >> line_subpixel_shift;
+
+ if(m_lp.inc > 0) m_di.inc_x(m_y - m_old_y);
+ else m_di.dec_x(m_y - m_old_y);
+
+ m_old_y = m_y;
+
+ int s1 = m_di.dist() / m_lp.len;
+ int s2 = -s1;
+
+ if(m_lp.inc < 0) s1 = -s1;
+
+ int dist_start;
+ int dist_pict;
+ int dist_end;
+ int dy;
+ int dist;
+
+ dist_start = m_di.dist_start();
+ dist_pict = m_di.dist_pict() + m_start;
+ dist_end = m_di.dist_end();
+ color_type* p0 = m_colors + max_half_width + 2;
+ color_type* p1 = p0;
+
+ int npix = 0;
+ p1->clear();
+ if(dist_end > 0)
+ {
+ if(dist_start <= 0)
+ {
+ m_ren.pixel(p1, dist_pict, s2);
+ }
+ ++npix;
+ }
+ ++p1;
+
+ dy = 1;
+ while((dist = m_dist_pos[dy]) - s1 <= m_width)
+ {
+ dist_start -= m_di.dx_start();
+ dist_pict -= m_di.dx_pict();
+ dist_end -= m_di.dx_end();
+ p1->clear();
+ if(dist_end > 0 && dist_start <= 0)
+ {
+ if(m_lp.inc > 0) dist = -dist;
+ m_ren.pixel(p1, dist_pict, s2 - dist);
+ ++npix;
+ }
+ ++p1;
+ ++dy;
+ }
+
+ dy = 1;
+ dist_start = m_di.dist_start();
+ dist_pict = m_di.dist_pict() + m_start;
+ dist_end = m_di.dist_end();
+ while((dist = m_dist_pos[dy]) + s1 <= m_width)
+ {
+ dist_start += m_di.dx_start();
+ dist_pict += m_di.dx_pict();
+ dist_end += m_di.dx_end();
+ --p0;
+ p0->clear();
+ if(dist_end > 0 && dist_start <= 0)
+ {
+ if(m_lp.inc > 0) dist = -dist;
+ m_ren.pixel(p0, dist_pict, s2 + dist);
+ ++npix;
+ }
+ ++dy;
+ }
+ m_ren.blend_color_vspan(m_x,
+ m_y - dy + 1,
+ unsigned(p1 - p0),
+ p0);
+ return npix && ++m_step < m_count;
+ }
+
+
+
+ //---------------------------------------------------------------------
+ bool step_ver()
+ {
+ ++m_li;
+ m_y += m_lp.inc;
+ m_x = (m_lp.x1 + m_li.y()) >> line_subpixel_shift;
+
+ if(m_lp.inc > 0) m_di.inc_y(m_x - m_old_x);
+ else m_di.dec_y(m_x - m_old_x);
+
+ m_old_x = m_x;
+
+ int s1 = m_di.dist() / m_lp.len;
+ int s2 = -s1;
+
+ if(m_lp.inc > 0) s1 = -s1;
+
+ int dist_start;
+ int dist_pict;
+ int dist_end;
+ int dist;
+ int dx;
+
+ dist_start = m_di.dist_start();
+ dist_pict = m_di.dist_pict() + m_start;
+ dist_end = m_di.dist_end();
+ color_type* p0 = m_colors + max_half_width + 2;
+ color_type* p1 = p0;
+
+ int npix = 0;
+ p1->clear();
+ if(dist_end > 0)
+ {
+ if(dist_start <= 0)
+ {
+ m_ren.pixel(p1, dist_pict, s2);
+ }
+ ++npix;
+ }
+ ++p1;
+
+ dx = 1;
+ while((dist = m_dist_pos[dx]) - s1 <= m_width)
+ {
+ dist_start += m_di.dy_start();
+ dist_pict += m_di.dy_pict();
+ dist_end += m_di.dy_end();
+ p1->clear();
+ if(dist_end > 0 && dist_start <= 0)
+ {
+ if(m_lp.inc > 0) dist = -dist;
+ m_ren.pixel(p1, dist_pict, s2 + dist);
+ ++npix;
+ }
+ ++p1;
+ ++dx;
+ }
+
+ dx = 1;
+ dist_start = m_di.dist_start();
+ dist_pict = m_di.dist_pict() + m_start;
+ dist_end = m_di.dist_end();
+ while((dist = m_dist_pos[dx]) + s1 <= m_width)
+ {
+ dist_start -= m_di.dy_start();
+ dist_pict -= m_di.dy_pict();
+ dist_end -= m_di.dy_end();
+ --p0;
+ p0->clear();
+ if(dist_end > 0 && dist_start <= 0)
+ {
+ if(m_lp.inc > 0) dist = -dist;
+ m_ren.pixel(p0, dist_pict, s2 - dist);
+ ++npix;
+ }
+ ++dx;
+ }
+ m_ren.blend_color_hspan(m_x - dx + 1,
+ m_y,
+ unsigned(p1 - p0),
+ p0);
+ return npix && ++m_step < m_count;
+ }
+
+
+ //---------------------------------------------------------------------
+ int pattern_end() const { return m_start + m_di.len(); }
+
+ //---------------------------------------------------------------------
+ bool vertical() const { return m_lp.vertical; }
+ int width() const { return m_width; }
+ int count() const { return m_count; }
+
+ private:
+ line_interpolator_image(const line_interpolator_image<Renderer>&);
+ const line_interpolator_image<Renderer>&
+ operator = (const line_interpolator_image<Renderer>&);
+
+ protected:
+ const line_parameters& m_lp;
+ dda2_line_interpolator m_li;
+ distance_interpolator4 m_di;
+ renderer_type& m_ren;
+ int m_plen;
+ int m_x;
+ int m_y;
+ int m_old_x;
+ int m_old_y;
+ int m_count;
+ int m_width;
+ int m_max_extent;
+ int m_start;
+ int m_step;
+ int m_dist_pos[max_half_width + 1];
+ color_type m_colors[max_half_width * 2 + 4];
+ };
+
+
+
+
+
+
+
+
+ //===================================================renderer_outline_image
+ template<class BaseRenderer, class ImagePattern>
+ class renderer_outline_image
+ {
+ public:
+ //---------------------------------------------------------------------
+ typedef BaseRenderer base_ren_type;
+ typedef renderer_outline_image<BaseRenderer, ImagePattern> self_type;
+ typedef typename base_ren_type::color_type color_type;
+ typedef ImagePattern pattern_type;
+
+
+ //---------------------------------------------------------------------
+ renderer_outline_image(base_ren_type& ren, const pattern_type& patt) :
+ m_ren(&ren),
+ m_pattern(&patt),
+ m_start(0),
+ m_scale_x(1.0)
+ {
+ }
+
+ //---------------------------------------------------------------------
+ void pattern(const pattern_type& p) { m_pattern = &p; }
+ const pattern_type& pattern() const { return *m_pattern; }
+
+ //---------------------------------------------------------------------
+ void scale_x(double s) { m_scale_x = s; }
+ double scale_x() const { return m_scale_x; }
+
+ //---------------------------------------------------------------------
+ void start_x(double s) { m_start = int(s * line_subpixel_size); }
+ double start_x() const { return double(m_start) / line_subpixel_size; }
+
+ //---------------------------------------------------------------------
+ int subpixel_width() const { return m_pattern->line_width(); }
+ int pattern_width() const { return m_pattern->pattern_width(); }
+
+ //-------------------------------------------------------------------------
+ void pixel(color_type* p, int x, int y) const
+ {
+ m_pattern->pixel(p, x, y);
+ }
+
+ //-------------------------------------------------------------------------
+ void blend_color_hspan(int x, int y, unsigned len, const color_type* colors)
+ {
+ m_ren->blend_color_hspan(x, y, len, colors, 0);
+ }
+
+ //-------------------------------------------------------------------------
+ void blend_color_vspan(int x, int y, unsigned len, const color_type* colors)
+ {
+ m_ren->blend_color_vspan(x, y, len, colors, 0);
+ }
+
+ //-------------------------------------------------------------------------
+ static bool accurate_join_only() { return true; }
+
+ //-------------------------------------------------------------------------
+ template<class Cmp>
+ void semidot(Cmp, int, int, int, int)
+ {
+ }
+
+ //-------------------------------------------------------------------------
+ void line0(const line_parameters&)
+ {
+ }
+
+ //-------------------------------------------------------------------------
+ void line1(const line_parameters&, int, int)
+ {
+ }
+
+ //-------------------------------------------------------------------------
+ void line2(const line_parameters&, int, int)
+ {
+ }
+
+ //-------------------------------------------------------------------------
+ void line3(const line_parameters& lp,
+ int sx, int sy, int ex, int ey)
+ {
+ fix_degenerate_bisectrix_start(lp, &sx, &sy);
+ fix_degenerate_bisectrix_end(lp, &ex, &ey);
+ line_interpolator_image<self_type> li(*this, lp,
+ sx, sy,
+ ex, ey,
+ m_start, m_scale_x);
+ if(li.vertical())
+ {
+ while(li.step_ver());
+ }
+ else
+ {
+ while(li.step_hor());
+ }
+ m_start = li.pattern_end();
+ }
+
+ private:
+ base_ren_type* m_ren;
+ const pattern_type* m_pattern;
+ int m_start;
+ double m_scale_x;
+ };
+
+
+
+
+
+}
+
+
+
+#endif
diff --git a/agg/inc/agg_renderer_primitives.h b/agg/inc/agg_renderer_primitives.h
new file mode 100755
index 000000000000..522432c06df6
--- /dev/null
+++ b/agg/inc/agg_renderer_primitives.h
@@ -0,0 +1,224 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// class renderer_primitives
+//
+//----------------------------------------------------------------------------
+
+#ifndef AGG_RENDERER_PRIMITIVES_INCLUDED
+#define AGG_RENDERER_PRIMITIVES_INCLUDED
+
+#include "agg_basics.h"
+#include "agg_renderer_base.h"
+#include "agg_dda_line.h"
+#include "agg_ellipse_bresenham.h"
+
+namespace agg
+{
+ //-----------------------------------------------------renderer_primitives
+ template<class BaseRenderer> class renderer_primitives
+ {
+ public:
+ typedef BaseRenderer base_ren_type;
+ typedef typename base_ren_type::color_type color_type;
+
+ //--------------------------------------------------------------------
+ renderer_primitives(base_ren_type& ren) :
+ m_ren(&ren),
+ m_fill_color(),
+ m_line_color(),
+ m_curr_x(0),
+ m_curr_y(0)
+ {
+ }
+
+ //--------------------------------------------------------------------
+ static int coord(double c)
+ {
+ return int(c * line_bresenham_interpolator::subpixel_size);
+ }
+
+ //--------------------------------------------------------------------
+ void fill_color(const color_type& c) { m_fill_color = c; }
+ void line_color(const color_type& c) { m_line_color = c; }
+ const color_type& fill_color() const { return m_fill_color; }
+ const color_type& line_color() const { return m_line_color; }
+
+ //--------------------------------------------------------------------
+ void rectangle(int x1, int y1, int x2, int y2)
+ {
+ m_ren->blend_hline(x1, y1, x2-1, m_line_color, cover_full);
+ m_ren->blend_vline(x2, y1, y2-1, m_line_color, cover_full);
+ m_ren->blend_hline(x1+1, y2, x2, m_line_color, cover_full);
+ m_ren->blend_vline(x1, y1+1, y2, m_line_color, cover_full);
+ }
+
+ //--------------------------------------------------------------------
+ void solid_rectangle(int x1, int y1, int x2, int y2)
+ {
+ m_ren->blend_bar(x1, y1, x2, y2, m_fill_color, cover_full);
+ }
+
+ //--------------------------------------------------------------------
+ void outlined_rectangle(int x1, int y1, int x2, int y2)
+ {
+ rectangle(x1, y1, x2, y2);
+ m_ren->blend_bar(x1+1, y1+1, x2-1, y2-1, m_fill_color, cover_full);
+ }
+
+ //--------------------------------------------------------------------
+ void ellipse(int x, int y, int rx, int ry)
+ {
+ ellipse_bresenham_interpolator ei(rx, ry);
+ int dx = 0;
+ int dy = -ry;
+ do
+ {
+ dx += ei.dx();
+ dy += ei.dy();
+ m_ren->blend_pixel(x + dx, y + dy, m_line_color, cover_full);
+ m_ren->blend_pixel(x + dx, y - dy, m_line_color, cover_full);
+ m_ren->blend_pixel(x - dx, y - dy, m_line_color, cover_full);
+ m_ren->blend_pixel(x - dx, y + dy, m_line_color, cover_full);
+ ++ei;
+ }
+ while(dy < 0);
+ }
+
+ //--------------------------------------------------------------------
+ void solid_ellipse(int x, int y, int rx, int ry)
+ {
+ ellipse_bresenham_interpolator ei(rx, ry);
+ int dx = 0;
+ int dy = -ry;
+ int dy0 = dy;
+ int dx0 = dx;
+
+ do
+ {
+ dx += ei.dx();
+ dy += ei.dy();
+
+ if(dy != dy0)
+ {
+ m_ren->blend_hline(x-dx0, y+dy0, x+dx0, m_fill_color, cover_full);
+ m_ren->blend_hline(x-dx0, y-dy0, x+dx0, m_fill_color, cover_full);
+ }
+ dx0 = dx;
+ dy0 = dy;
+ ++ei;
+ }
+ while(dy < 0);
+ m_ren->blend_hline(x-dx0, y+dy0, x+dx0, m_fill_color, cover_full);
+ }
+
+ //--------------------------------------------------------------------
+ void outlined_ellipse(int x, int y, int rx, int ry)
+ {
+ ellipse_bresenham_interpolator ei(rx, ry);
+ int dx = 0;
+ int dy = -ry;
+
+ do
+ {
+ dx += ei.dx();
+ dy += ei.dy();
+
+ m_ren->blend_pixel(x + dx, y + dy, m_line_color, cover_full);
+ m_ren->blend_pixel(x + dx, y - dy, m_line_color, cover_full);
+ m_ren->blend_pixel(x - dx, y - dy, m_line_color, cover_full);
+ m_ren->blend_pixel(x - dx, y + dy, m_line_color, cover_full);
+
+ if(ei.dy() && dx)
+ {
+ m_ren->blend_hline(x-dx+1, y+dy, x+dx-1, m_fill_color, cover_full);
+ m_ren->blend_hline(x-dx+1, y-dy, x+dx-1, m_fill_color, cover_full);
+ }
+ ++ei;
+ }
+ while(dy < 0);
+ }
+
+ //--------------------------------------------------------------------
+ void line(int x1, int y1, int x2, int y2, bool last=false)
+ {
+ line_bresenham_interpolator li(x1, y1, x2, y2);
+
+ unsigned len = li.len();
+ if(len == 0)
+ {
+ if(last)
+ {
+ m_ren->blend_pixel(li.line_lr(x1), li.line_lr(y1), m_line_color, cover_full);
+ }
+ return;
+ }
+
+ if(last) ++len;
+
+ if(li.is_ver())
+ {
+ do
+ {
+ m_ren->blend_pixel(li.x2(), li.y1(), m_line_color, cover_full);
+ li.vstep();
+ }
+ while(--len);
+ }
+ else
+ {
+ do
+ {
+ m_ren->blend_pixel(li.x1(), li.y2(), m_line_color, cover_full);
+ li.hstep();
+ }
+ while(--len);
+ }
+ }
+
+ //--------------------------------------------------------------------
+ void move_to(int x, int y)
+ {
+ m_curr_x = x;
+ m_curr_y = y;
+ }
+
+ //--------------------------------------------------------------------
+ void line_to(int x, int y, bool last=false)
+ {
+ line(m_curr_x, m_curr_y, x, y, last);
+ m_curr_x = x;
+ m_curr_y = y;
+ }
+
+ //--------------------------------------------------------------------
+ const base_ren_type& ren() const { return *m_ren; }
+ base_ren_type& ren() { return *m_ren; }
+
+ //--------------------------------------------------------------------
+ const rendering_buffer& rbuf() const { return m_ren->rbuf(); }
+ rendering_buffer& rbuf() { return m_ren->rbuf(); }
+
+ private:
+ base_ren_type* m_ren;
+ color_type m_fill_color;
+ color_type m_line_color;
+ int m_curr_x;
+ int m_curr_y;
+ };
+
+}
+
+#endif
diff --git a/agg/inc/agg_renderer_raster_text.h b/agg/inc/agg_renderer_raster_text.h
new file mode 100755
index 000000000000..957944600332
--- /dev/null
+++ b/agg/inc/agg_renderer_raster_text.h
@@ -0,0 +1,264 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+
+#ifndef AGG_RENDERER_RASTER_TEXT_INCLUDED
+#define AGG_RENDERER_RASTER_TEXT_INCLUDED
+
+#include "agg_basics.h"
+
+namespace agg
+{
+
+ //==============================================renderer_raster_htext_solid
+ template<class BaseRenderer, class GlyphGenerator>
+ class renderer_raster_htext_solid
+ {
+ public:
+ typedef BaseRenderer ren_type;
+ typedef GlyphGenerator glyph_gen_type;
+ typedef typename glyph_gen_type::glyph_rect glyph_rect;
+ typedef typename ren_type::color_type color_type;
+
+ renderer_raster_htext_solid(ren_type& ren, glyph_gen_type& glyph) :
+ m_ren(&ren),
+ m_glyph(&glyph)
+ {
+ }
+
+ //--------------------------------------------------------------------
+ void color(const color_type& c) { m_color = c; }
+ const color_type& color() const { return m_color; }
+
+ //--------------------------------------------------------------------
+ template<class CharT>
+ void render_text(double x, double y, const CharT* str, bool flip=false)
+ {
+ glyph_rect r;
+ while(*str)
+ {
+ m_glyph->prepare(&r, x, y, *str, flip);
+ if(r.x2 >= r.x1)
+ {
+ int i;
+ if(flip)
+ {
+ for(i = r.y1; i <= r.y2; i++)
+ {
+ m_ren->blend_solid_hspan(r.x1, i, (r.x2 - r.x1 + 1),
+ m_color,
+ m_glyph->span(r.y2 - i));
+ }
+ }
+ else
+ {
+ for(i = r.y1; i <= r.y2; i++)
+ {
+ m_ren->blend_solid_hspan(r.x1, i, (r.x2 - r.x1 + 1),
+ m_color,
+ m_glyph->span(i - r.y1));
+ }
+ }
+ }
+ x += r.dx;
+ y += r.dy;
+ ++str;
+ }
+ }
+
+ private:
+ ren_type* m_ren;
+ glyph_gen_type* m_glyph;
+ color_type m_color;
+ };
+
+
+
+ //=============================================renderer_raster_vtext_solid
+ template<class BaseRenderer, class GlyphGenerator>
+ class renderer_raster_vtext_solid
+ {
+ public:
+ typedef BaseRenderer ren_type;
+ typedef GlyphGenerator glyph_gen_type;
+ typedef typename glyph_gen_type::glyph_rect glyph_rect;
+ typedef typename ren_type::color_type color_type;
+
+ renderer_raster_vtext_solid(ren_type& ren, glyph_gen_type& glyph) :
+ m_ren(&ren),
+ m_glyph(&glyph)
+ {
+ }
+
+ //--------------------------------------------------------------------
+ void color(const color_type& c) { m_color = c; }
+ const color_type& color() const { return m_color; }
+
+ //--------------------------------------------------------------------
+ template<class CharT>
+ void render_text(double x, double y, const CharT* str, bool flip=false)
+ {
+ glyph_rect r;
+ while(*str)
+ {
+ m_glyph->prepare(&r, x, y, *str, !flip);
+ if(r.x2 >= r.x1)
+ {
+ int i;
+ if(flip)
+ {
+ for(i = r.y1; i <= r.y2; i++)
+ {
+ m_ren->blend_solid_vspan(i, r.x1, (r.x2 - r.x1 + 1),
+ m_color,
+ m_glyph->span(i - r.y1));
+ }
+ }
+ else
+ {
+ for(i = r.y1; i <= r.y2; i++)
+ {
+ m_ren->blend_solid_vspan(i, r.x1, (r.x2 - r.x1 + 1),
+ m_color,
+ m_glyph->span(r.y2 - i));
+ }
+ }
+ }
+ x += r.dx;
+ y += r.dy;
+ ++str;
+ }
+ }
+
+ private:
+ ren_type* m_ren;
+ glyph_gen_type* m_glyph;
+ color_type m_color;
+ };
+
+
+
+
+
+
+ //===================================================renderer_raster_htext
+ template<class ScanlineRenderer, class GlyphGenerator>
+ class renderer_raster_htext
+ {
+ public:
+ typedef ScanlineRenderer ren_type;
+ typedef GlyphGenerator glyph_gen_type;
+ typedef typename glyph_gen_type::glyph_rect glyph_rect;
+
+ class scanline_single_span
+ {
+ public:
+ typedef agg::cover_type cover_type;
+
+ //----------------------------------------------------------------
+ struct const_span
+ {
+ int x;
+ unsigned len;
+ const cover_type* covers;
+
+ const_span() {}
+ const_span(int x_, unsigned len_, const cover_type* covers_) :
+ x(x_), len(len_), covers(covers_)
+ {}
+ };
+
+ typedef const const_span* const_iterator;
+
+ //----------------------------------------------------------------
+ scanline_single_span(int x, int y, unsigned len,
+ const cover_type* covers) :
+ m_y(y),
+ m_span(x, len, covers)
+ {}
+
+ //----------------------------------------------------------------
+ int y() const { return m_y; }
+ unsigned num_spans() const { return 1; }
+ const_iterator begin() const { return &m_span; }
+
+ private:
+ //----------------------------------------------------------------
+ int m_y;
+ const_span m_span;
+ };
+
+
+
+ //--------------------------------------------------------------------
+ renderer_raster_htext(ren_type& ren, glyph_gen_type& glyph) :
+ m_ren(&ren),
+ m_glyph(&glyph)
+ {
+ }
+
+
+ //--------------------------------------------------------------------
+ template<class CharT>
+ void render_text(double x, double y, const CharT* str, bool flip=false)
+ {
+ glyph_rect r;
+ while(*str)
+ {
+ m_glyph->prepare(&r, x, y, *str, flip);
+ if(r.x2 >= r.x1)
+ {
+ m_ren->prepare(r.x2 - r.x1 + 1);
+ int i;
+ if(flip)
+ {
+ for(i = r.y1; i <= r.y2; i++)
+ {
+ m_ren->render(
+ scanline_single_span(r.x1,
+ i,
+ (r.x2 - r.x1 + 1),
+ m_glyph->span(r.y2 - i)));
+ }
+ }
+ else
+ {
+ for(i = r.y1; i <= r.y2; i++)
+ {
+ m_ren->render(
+ scanline_single_span(r.x1,
+ i,
+ (r.x2 - r.x1 + 1),
+ m_glyph->span(i - r.y1)));
+ }
+ }
+ }
+ x += r.dx;
+ y += r.dy;
+ ++str;
+ }
+ }
+
+ private:
+ ren_type* m_ren;
+ glyph_gen_type* m_glyph;
+ };
+
+
+
+
+}
+
+#endif
+
diff --git a/agg/inc/agg_renderer_scanline.h b/agg/inc/agg_renderer_scanline.h
new file mode 100755
index 000000000000..cc33942a3770
--- /dev/null
+++ b/agg/inc/agg_renderer_scanline.h
@@ -0,0 +1,450 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+
+#ifndef AGG_RENDERER_SCANLINE_INCLUDED
+#define AGG_RENDERER_SCANLINE_INCLUDED
+
+#include "agg_basics.h"
+#include "agg_renderer_base.h"
+#include "agg_render_scanlines.h"
+
+namespace agg
+{
+
+ //====================================================renderer_scanline_aa
+ template<class BaseRenderer, class SpanGenerator> class renderer_scanline_aa
+ {
+ public:
+ typedef BaseRenderer base_ren_type;
+
+ //--------------------------------------------------------------------
+ renderer_scanline_aa(base_ren_type& ren, SpanGenerator& span_gen) :
+ m_ren(&ren),
+ m_span_gen(&span_gen)
+ {
+ }
+
+ //--------------------------------------------------------------------
+ void prepare(unsigned max_span_len)
+ {
+ m_span_gen->prepare(max_span_len);
+ }
+
+ //--------------------------------------------------------------------
+ template<class Scanline> void render(const Scanline& sl)
+ {
+ int y = sl.y();
+ m_ren->first_clip_box();
+ do
+ {
+ int xmin = m_ren->xmin();
+ int xmax = m_ren->xmax();
+
+ if(y >= m_ren->ymin() && y <= m_ren->ymax())
+ {
+ unsigned num_spans = sl.num_spans();
+ typename Scanline::const_iterator span = sl.begin();
+ do
+ {
+ int x = span->x;
+ int len = span->len;
+ bool solid = false;
+ const typename Scanline::cover_type* covers = span->covers;
+
+ if(len < 0)
+ {
+ solid = true;
+ len = -len;
+ }
+
+ if(x < xmin)
+ {
+ len -= xmin - x;
+ if(!solid)
+ {
+ covers += xmin - x;
+ }
+ x = xmin;
+ }
+
+ if(len > 0)
+ {
+ if(x + len > xmax)
+ {
+ len = xmax - x + 1;
+ }
+ if(len > 0)
+ {
+ m_ren->blend_color_hspan_no_clip(
+ x, y, len,
+ m_span_gen->generate(x, y, len),
+ solid ? 0 : covers,
+ *covers);
+ }
+ }
+ ++span;
+ }
+ while(--num_spans);
+ }
+ }
+ while(m_ren->next_clip_box());
+ }
+
+ private:
+ base_ren_type* m_ren;
+ SpanGenerator* m_span_gen;
+ };
+
+
+
+
+ //==============================================renderer_scanline_aa_opaque
+ template<class BaseRenderer, class SpanGenerator> class renderer_scanline_aa_opaque
+ {
+ public:
+ typedef BaseRenderer base_ren_type;
+
+ //--------------------------------------------------------------------
+ renderer_scanline_aa_opaque(base_ren_type& ren, SpanGenerator& span_gen) :
+ m_ren(&ren),
+ m_span_gen(&span_gen)
+ {
+ }
+
+ //--------------------------------------------------------------------
+ void prepare(unsigned max_span_len)
+ {
+ m_span_gen->prepare(max_span_len);
+ }
+
+ //--------------------------------------------------------------------
+ template<class Scanline> void render(const Scanline& sl)
+ {
+ int y = sl.y();
+ m_ren->first_clip_box();
+ do
+ {
+ int xmin = m_ren->xmin();
+ int xmax = m_ren->xmax();
+
+ if(y >= m_ren->ymin() && y <= m_ren->ymax())
+ {
+ unsigned num_spans = sl.num_spans();
+ typename Scanline::const_iterator span = sl.begin();
+ do
+ {
+ int x = span->x;
+ int len = span->len;
+ bool solid = false;
+ const typename Scanline::cover_type* covers = span->covers;
+
+ if(len < 0)
+ {
+ solid = true;
+ len = -len;
+ }
+
+ if(x < xmin)
+ {
+ len -= xmin - x;
+ if(!solid)
+ {
+ covers += xmin - x;
+ }
+ x = xmin;
+ }
+
+ if(len > 0)
+ {
+ if(x + len > xmax)
+ {
+ len = xmax - x + 1;
+ }
+ if(len > 0)
+ {
+ m_ren->blend_opaque_color_hspan_no_clip(
+ x, y, len,
+ m_span_gen->generate(x, y, len),
+ solid ? 0 : covers,
+ *covers);
+ }
+ }
+ ++span;
+ }
+ while(--num_spans);
+ }
+ }
+ while(m_ren->next_clip_box());
+ }
+
+ private:
+ base_ren_type* m_ren;
+ SpanGenerator* m_span_gen;
+ };
+
+
+
+ //==============================================renderer_scanline_aa_solid
+ template<class BaseRenderer> class renderer_scanline_aa_solid
+ {
+ public:
+ typedef BaseRenderer base_ren_type;
+ typedef typename base_ren_type::color_type color_type;
+
+ //--------------------------------------------------------------------
+ renderer_scanline_aa_solid(base_ren_type& ren) :
+ m_ren(&ren)
+ {
+ }
+
+ //--------------------------------------------------------------------
+ void color(const color_type& c) { m_color = c; }
+ const color_type& color() const { return m_color; }
+
+ //--------------------------------------------------------------------
+ void prepare(unsigned) {}
+
+ //--------------------------------------------------------------------
+ template<class Scanline> void render(const Scanline& sl)
+ {
+ int y = sl.y();
+ unsigned num_spans = sl.num_spans();
+ typename Scanline::const_iterator span = sl.begin();
+
+ do
+ {
+ int x = span->x;
+ if(span->len > 0)
+ {
+ m_ren->blend_solid_hspan(x, y, (unsigned)span->len,
+ m_color,
+ span->covers);
+ }
+ else
+ {
+ m_ren->blend_hline(x, y, (unsigned)(x - span->len - 1),
+ m_color,
+ *(span->covers));
+ }
+ ++span;
+ }
+ while(--num_spans);
+ }
+
+ private:
+ base_ren_type* m_ren;
+ color_type m_color;
+ };
+
+
+
+
+
+
+
+ //===================================================renderer_scanline_bin
+ template<class BaseRenderer, class SpanGenerator> class renderer_scanline_bin
+ {
+ public:
+ typedef BaseRenderer base_ren_type;
+
+ //--------------------------------------------------------------------
+ renderer_scanline_bin(base_ren_type& ren, SpanGenerator& span_gen) :
+ m_ren(&ren),
+ m_span_gen(&span_gen)
+ {
+ }
+
+ //--------------------------------------------------------------------
+ void prepare(unsigned max_span_len)
+ {
+ m_span_gen->prepare(max_span_len);
+ }
+
+ //--------------------------------------------------------------------
+ template<class Scanline> void render(const Scanline& sl)
+ {
+ int y = sl.y();
+ m_ren->first_clip_box();
+ do
+ {
+ int xmin = m_ren->xmin();
+ int xmax = m_ren->xmax();
+
+ if(y >= m_ren->ymin() && y <= m_ren->ymax())
+ {
+ unsigned num_spans = sl.num_spans();
+ typename Scanline::const_iterator span = sl.begin();
+ do
+ {
+ int x = span->x;
+ int len = span->len;
+
+ if(len < 0) len = -len;
+ if(x < xmin)
+ {
+ len -= xmin - x;
+ x = xmin;
+ }
+ if(len > 0)
+ {
+ if(x + len > xmax)
+ {
+ len = xmax - x + 1;
+ }
+ if(len > 0)
+ {
+ m_ren->blend_color_hspan_no_clip(
+ x, y, len,
+ m_span_gen->generate(x, y, len),
+ 0);
+ }
+ }
+ ++span;
+ }
+ while(--num_spans);
+ }
+ }
+ while(m_ren->next_clip_box());
+ }
+
+ private:
+ base_ren_type* m_ren;
+ SpanGenerator* m_span_gen;
+ };
+
+
+
+ //===============================================renderer_scanline_bin_opaque
+ template<class BaseRenderer, class SpanGenerator> class renderer_scanline_bin_opaque
+ {
+ public:
+ typedef BaseRenderer base_ren_type;
+
+ //--------------------------------------------------------------------
+ renderer_scanline_bin_opaque(base_ren_type& ren, SpanGenerator& span_gen) :
+ m_ren(&ren),
+ m_span_gen(&span_gen)
+ {
+ }
+
+ //--------------------------------------------------------------------
+ void prepare(unsigned max_span_len)
+ {
+ m_span_gen->prepare(max_span_len);
+ }
+
+ //--------------------------------------------------------------------
+ template<class Scanline> void render(const Scanline& sl)
+ {
+ int y = sl.y();
+ m_ren->first_clip_box();
+ do
+ {
+ int xmin = m_ren->xmin();
+ int xmax = m_ren->xmax();
+
+ if(y >= m_ren->ymin() && y <= m_ren->ymax())
+ {
+ unsigned num_spans = sl.num_spans();
+ typename Scanline::const_iterator span = sl.begin();
+ do
+ {
+ int x = span->x;
+ int len = span->len;
+
+ if(len < 0) len = -len;
+ if(x < xmin)
+ {
+ len -= xmin - x;
+ x = xmin;
+ }
+ if(len > 0)
+ {
+ if(x + len > xmax)
+ {
+ len = xmax - x + 1;
+ }
+ if(len > 0)
+ {
+ m_ren->blend_opaque_color_hspan_no_clip(
+ x, y, len,
+ m_span_gen->generate(x, y, len),
+ 0);
+ }
+ }
+ ++span;
+ }
+ while(--num_spans);
+ }
+ }
+ while(m_ren->next_clip_box());
+ }
+
+ private:
+ base_ren_type* m_ren;
+ SpanGenerator* m_span_gen;
+ };
+
+
+
+
+ //=============================================renderer_scanline_bin_solid
+ template<class BaseRenderer> class renderer_scanline_bin_solid
+ {
+ public:
+ typedef BaseRenderer base_ren_type;
+ typedef typename base_ren_type::color_type color_type;
+
+ //--------------------------------------------------------------------
+ renderer_scanline_bin_solid(base_ren_type& ren) :
+ m_ren(&ren)
+ {
+ }
+
+ //--------------------------------------------------------------------
+ void color(const color_type& c) { m_color = c; }
+ const color_type& color() const { return m_color; }
+
+ //--------------------------------------------------------------------
+ void prepare(unsigned) {}
+
+ //--------------------------------------------------------------------
+ template<class Scanline> void render(const Scanline& sl)
+ {
+ unsigned num_spans = sl.num_spans();
+ typename Scanline::const_iterator span = sl.begin();
+ do
+ {
+ m_ren->blend_hline(span->x,
+ sl.y(),
+ span->x - 1 + ((span->len < 0) ?
+ -span->len :
+ span->len),
+ m_color,
+ cover_full);
+ ++span;
+ }
+ while(--num_spans);
+ }
+
+ private:
+ base_ren_type* m_ren;
+ color_type m_color;
+ };
+
+}
+
+#endif
diff --git a/agg/inc/agg_rendering_buffer.h b/agg/inc/agg_rendering_buffer.h
new file mode 100755
index 000000000000..50b6a46fdfa8
--- /dev/null
+++ b/agg/inc/agg_rendering_buffer.h
@@ -0,0 +1,179 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// class rendering_buffer
+//
+//----------------------------------------------------------------------------
+
+#ifndef AGG_RENDERING_BUFFER_INCLUDED
+#define AGG_RENDERING_BUFFER_INCLUDED
+
+#include "agg_basics.h"
+
+namespace agg
+{
+
+ //==========================================================row_ptr_cache
+ template<class T> class row_ptr_cache
+ {
+ public:
+ //--------------------------------------------------------------------
+ struct row_data
+ {
+ int x1, x2;
+ const int8u* ptr;
+ row_data() {}
+ row_data(int x1_, int x2_, const int8u* ptr_) :
+ x1(x1_), x2(x2_), ptr(ptr_) {}
+ };
+
+ //-------------------------------------------------------------------
+ ~row_ptr_cache()
+ {
+ delete [] m_rows;
+ }
+
+ //-------------------------------------------------------------------
+ row_ptr_cache() :
+ m_buf(0),
+ m_rows(0),
+ m_width(0),
+ m_height(0),
+ m_stride(0),
+ m_max_height(0)
+ {
+ }
+
+ //--------------------------------------------------------------------
+ row_ptr_cache(T* _buf, unsigned _width, unsigned _height, int _stride) :
+ m_buf(0),
+ m_rows(0),
+ m_width(0),
+ m_height(0),
+ m_stride(0),
+ m_max_height(0)
+ {
+ attach(_buf, _width, _height, _stride);
+ }
+
+ //--------------------------------------------------------------------
+ void attach(T* _buf, unsigned _width, unsigned _height, int _stride)
+ {
+ m_buf = _buf;
+ m_width = _width;
+ m_height = _height;
+ m_stride = _stride;
+ if(_height > m_max_height)
+ {
+ delete [] m_rows;
+ m_rows = new T* [m_max_height = _height];
+ }
+
+ T* row_ptr = m_buf;
+
+ if(_stride < 0)
+ {
+ row_ptr = m_buf - int(_height - 1) * _stride;
+ }
+
+ T** _rows = m_rows;
+
+ while(_height--)
+ {
+ *_rows++ = row_ptr;
+ row_ptr += _stride;
+ }
+ }
+
+ //--------------------------------------------------------------------
+ const T* buf() const { return m_buf; }
+ unsigned width() const { return m_width; }
+ unsigned height() const { return m_height; }
+ int stride() const { return m_stride; }
+ unsigned stride_abs() const
+ {
+ return (m_stride < 0) ?
+ unsigned(-m_stride) :
+ unsigned(m_stride);
+ }
+
+ //--------------------------------------------------------------------
+ T* row(unsigned y) { return m_rows[y]; }
+ const T* row(unsigned y) const { return m_rows[y]; }
+
+ T* next_row(void* p) { return (T*)p + m_stride; }
+ const T* next_row(const void* p) const { return (T*)p + m_stride; }
+
+ T const* const* rows() const { return m_rows; }
+
+ //--------------------------------------------------------------------
+ void copy_from(const row_ptr_cache<T>& mtx)
+ {
+ unsigned h = height();
+ if(mtx.height() < h) h = mtx.height();
+
+ unsigned l = stride_abs();
+ if(mtx.stride_abs() < l) l = mtx.stride_abs();
+
+ l *= sizeof(T);
+
+ unsigned y;
+ for (y = 0; y < h; y++)
+ {
+ memcpy(row(y), mtx.row(y), l);
+ }
+ }
+
+ //--------------------------------------------------------------------
+ void clear(T value)
+ {
+ unsigned y;
+ for(y = 0; y < height(); y++)
+ {
+ T* p = row(y);
+ unsigned x;
+ for(x = 0; x < stride_abs(); x++)
+ {
+ *p++ = value;
+ }
+ }
+ }
+
+
+ private:
+ //--------------------------------------------------------------------
+ // Prohibit copying
+ row_ptr_cache(const row_ptr_cache<T>&);
+ const row_ptr_cache<T>& operator = (const row_ptr_cache<T>&);
+
+ private:
+ //--------------------------------------------------------------------
+ T* m_buf; // Pointer to renrdering buffer
+ T** m_rows; // Pointers to each row of the buffer
+ unsigned m_width; // Width in pixels
+ unsigned m_height; // Height in pixels
+ int m_stride; // Number of bytes per row. Can be < 0
+ unsigned m_max_height; // The maximal height (currently allocated)
+ };
+
+
+
+ //========================================================rendering_buffer
+ typedef row_ptr_cache<int8u> rendering_buffer;
+
+}
+
+
+#endif
diff --git a/agg/inc/agg_rendering_buffer_dynarow.h b/agg/inc/agg_rendering_buffer_dynarow.h
new file mode 100755
index 000000000000..b6724d99ff78
--- /dev/null
+++ b/agg/inc/agg_rendering_buffer_dynarow.h
@@ -0,0 +1,184 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// class rendering_buffer_dynarow
+//
+//----------------------------------------------------------------------------
+
+#ifndef AGG_RENDERING_BUFFER_DYNAROW_INCLUDED
+#define AGG_RENDERING_BUFFER_DYNAROW_INCLUDED
+
+#include "agg_basics.h"
+
+namespace agg
+{
+
+ //===============================================rendering_buffer_dynarow
+ // Rendering buffer class with dynamic allocation of the rows.
+ // The rows are allocated as needed when requesting for span_ptr().
+ // The class automatically calculates min_x and max_x for each row.
+ // Generally it's more efficient to use this class as a temporary buffer
+ // for rendering a few lines and then to blend it with another buffer.
+ //
+ template<unsigned PixWidth> class rendering_buffer_dynarow
+ {
+ public:
+ //-------------------------------------------------------------------
+ struct row_data
+ {
+ int8u* ptr;
+ int x1;
+ int x2;
+ };
+
+ //-------------------------------------------------------------------
+ ~rendering_buffer_dynarow()
+ {
+ init(0,0);
+ }
+
+ //-------------------------------------------------------------------
+ rendering_buffer_dynarow() :
+ m_rows(0),
+ m_width(0),
+ m_height(0)
+ {
+ }
+
+ // Allocate and clear the buffer
+ //--------------------------------------------------------------------
+ rendering_buffer_dynarow(unsigned width, unsigned height) :
+ m_rows(new row_data[height]),
+ m_width(width),
+ m_height(height)
+ {
+ memset(m_rows, 0, sizeof(row_data) * height);
+ }
+
+ // Allocate and clear the buffer
+ //--------------------------------------------------------------------
+ void init(unsigned width, unsigned height)
+ {
+ unsigned i;
+ for(i = 0; i < m_height; ++i) delete [] m_rows[i].ptr;
+ delete [] m_rows;
+ m_rows = 0;
+ if(width && height)
+ {
+ m_width = width;
+ m_height = height;
+ m_rows = new row_data[height];
+ memset(m_rows, 0, sizeof(row_data) * height);
+ }
+ }
+
+ //--------------------------------------------------------------------
+ unsigned width() const { return m_width; }
+ unsigned height() const { return m_height; }
+
+ // Get pointer to the beginning of the row. Memory for the row
+ // is allocated as needed.
+ //--------------------------------------------------------------------
+ int8u* row(int y)
+ {
+ row_data* r = m_rows + y;
+ if(r->ptr == 0)
+ {
+ r->ptr = new int8u [m_width * PixWidth];
+ memset(r->ptr, 0, m_width * PixWidth);
+ }
+ return r->ptr;
+ }
+
+ // Get const pointer to the row. The caller must check it for null.
+ //--------------------------------------------------------------------
+ const int8u* row(int y) const
+ {
+ return m_rows[y].ptr;
+ }
+
+ // Get the Y-th span. The pointer r.ptr is automatically adjusted
+ // to the actual beginning of the span. Use this function as follows:
+ //
+ // rendering_buffer_dynarow::row_data r = rbuf.span(x, y);
+ // if(r.ptr)
+ // {
+ // do { blend(r.ptr); r.ptr += PixWidth } while(++r.x1 < r.x2);
+ // }
+ //--------------------------------------------------------------------
+ row_data span(int x, int y) const
+ {
+ row_data r = m_rows[y];
+ if(r.ptr)
+ {
+ if(x < r.x1) x = r.x1;
+ r.ptr += x * PixWidth;
+ }
+ return r;
+ }
+
+
+ // The main function used for rendering. Returns pointer to the
+ // pre-allocated span. Memory for the row is allocated as needed.
+ //--------------------------------------------------------------------
+ int8u* span_ptr(int x, int y, unsigned len)
+ {
+ row_data* r = m_rows + y;
+ int x2 = x + len - 1;
+ if(r->ptr)
+ {
+ if(x < r->x1) { r->x1 = x; }
+ if(x2 > r->x2) { r->x2 = x2; }
+ }
+ else
+ {
+ r->ptr = new int8u [m_width * PixWidth];
+ r->x1 = x;
+ r->x2 = x2;
+ memset(r->ptr, 0, m_width * PixWidth);
+ }
+ return r->ptr + x * PixWidth;
+ }
+
+ // Get const pointer to the span. Used mostly in GetPixel function
+ // The caller must check the returned pointer for null.
+ //--------------------------------------------------------------------
+ const int8u* span_ptr(int x, int y, unsigned) const
+ {
+ row_data* r = m_rows + y;
+ return r->ptr ? r->ptr + x * PixWidth : 0;
+ }
+
+
+
+ private:
+ //--------------------------------------------------------------------
+ // Prohibit copying
+ rendering_buffer_dynarow(const rendering_buffer_dynarow<PixWidth>&);
+ const rendering_buffer_dynarow<PixWidth>&
+ operator = (const rendering_buffer_dynarow<PixWidth>&);
+
+ private:
+ //--------------------------------------------------------------------
+ row_data* m_rows; // Pointers to each row of the buffer
+ unsigned m_width; // Width in pixels
+ unsigned m_height; // Height in pixels
+ };
+
+
+}
+
+
+#endif
diff --git a/agg/inc/agg_rounded_rect.h b/agg/inc/agg_rounded_rect.h
new file mode 100755
index 000000000000..d4185dafa5b3
--- /dev/null
+++ b/agg/inc/agg_rounded_rect.h
@@ -0,0 +1,79 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// Rounded rectangle vertex generator
+//
+//----------------------------------------------------------------------------
+
+#ifndef AGG_ROUNDED_RECT_INCLUDED
+#define AGG_ROUNDED_RECT_INCLUDED
+
+#include "agg_basics.h"
+#include "agg_arc.h"
+#include "agg_vertex_iterator.h"
+
+
+namespace agg
+{
+ //------------------------------------------------------------rounded_rect
+ //
+ // See Implemantation agg_rounded_rect.cpp
+ //
+ class rounded_rect
+ {
+ public:
+ rounded_rect() {}
+ rounded_rect(double x1, double y1, double x2, double y2, double r);
+
+ void rect(double x1, double y1, double x2, double y2);
+ void radius(double r);
+ void radius(double rx, double ry);
+ void radius(double rx_bottom, double ry_bottom, double rx_top, double ry_top);
+ void radius(double rx1, double ry1, double rx2, double ry2,
+ double rx3, double ry3, double rx4, double ry4);
+ void normalize_radius();
+
+ void approximation_scale(double s) { m_arc.approximation_scale(s); }
+ double approximation_scale() const { return m_arc.approximation_scale(); }
+
+ void rewind(unsigned);
+ unsigned vertex(double* x, double* y);
+
+ typedef rounded_rect source_type;
+ typedef vertex_iterator<source_type> iterator;
+ iterator begin(unsigned id) { return iterator(*this, id); }
+ iterator end() { return iterator(path_cmd_stop); }
+
+ private:
+ double m_x1;
+ double m_y1;
+ double m_x2;
+ double m_y2;
+ double m_rx1;
+ double m_ry1;
+ double m_rx2;
+ double m_ry2;
+ double m_rx3;
+ double m_ry3;
+ double m_rx4;
+ double m_ry4;
+ unsigned m_status;
+ arc m_arc;
+ };
+
+}
+
+#endif
+
diff --git a/agg/inc/agg_scanline_bin.h b/agg/inc/agg_scanline_bin.h
new file mode 100755
index 000000000000..aa60ed061e07
--- /dev/null
+++ b/agg/inc/agg_scanline_bin.h
@@ -0,0 +1,171 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// Class scanline_bin - binary scanline.
+//
+//----------------------------------------------------------------------------
+#ifndef AGG_SCANLINE_BIN_INCLUDED
+#define AGG_SCANLINE_BIN_INCLUDED
+
+#include "agg_basics.h"
+
+namespace agg
+{
+
+ //=============================================================scanline_bin
+ //
+ // This is binary scaline container which supports the interface
+ // used in the rasterizer::render(). See description of agg_scanline_u8
+ // for details.
+ //
+ // Rendering:
+ //-------------------------------------------------------------------------
+ //
+ // int y = sl.y();
+ //
+ // ************************************
+ // ...Perform vertical clipping here...
+ // ************************************
+ //
+ // unsigned num_spans = sl.num_spans();
+ // const agg::scanline_bin::span* cur_span = sl.spans();
+ //
+ // do
+ // {
+ // x = cur_span->x;
+ // len = cur_span->len;
+ //
+ // **************************************
+ // ...Perform horizontal clipping here...
+ // **************************************
+ //
+ // hor_line(x, y, len)
+ // ++cur_span;
+ // }
+ // while(--num_spans);
+ //
+ //------------------------------------------------------------------------
+ class scanline_bin
+ {
+ public:
+ struct span
+ {
+ int16 x;
+ int16 len;
+ };
+
+ typedef const span* const_iterator;
+
+ ~scanline_bin()
+ {
+ delete [] m_spans;
+ }
+
+ scanline_bin() :
+ m_max_len(0),
+ m_last_x(0x7FFF),
+ m_spans(0),
+ m_cur_span(0)
+ {
+ }
+
+ void reset(int min_x, int max_x);
+ void add_cell(int x, unsigned);
+ void add_cells(int x, unsigned len, const void*);
+ void add_span(int x, unsigned len, unsigned);
+ void finalize(int y) { m_y = y; }
+ void reset_spans();
+
+ int y() const { return m_y; }
+ unsigned num_spans() const { return unsigned(m_cur_span - m_spans); }
+ const_iterator begin() const { return m_spans + 1; }
+
+ private:
+ scanline_bin(const scanline_bin&);
+ const scanline_bin operator = (const scanline_bin&);
+
+ unsigned m_max_len;
+ int m_last_x;
+ int m_y;
+ span* m_spans;
+ span* m_cur_span;
+ };
+
+
+ //------------------------------------------------------------------------
+ inline void scanline_bin::reset(int min_x, int max_x)
+ {
+ unsigned max_len = max_x - min_x + 3;
+ if(max_len > m_max_len)
+ {
+ delete [] m_spans;
+ m_spans = new span [max_len];
+ m_max_len = max_len;
+ }
+ m_last_x = 0x7FFF;
+ m_cur_span = m_spans;
+ }
+
+
+ //------------------------------------------------------------------------
+ inline void scanline_bin::reset_spans()
+ {
+ m_last_x = 0x7FFF;
+ m_cur_span = m_spans;
+ }
+
+
+ //------------------------------------------------------------------------
+ inline void scanline_bin::add_cell(int x, unsigned)
+ {
+ if(x == m_last_x+1)
+ {
+ m_cur_span->len++;
+ }
+ else
+ {
+ ++m_cur_span;
+ m_cur_span->x = (int16)x;
+ m_cur_span->len = 1;
+ }
+ m_last_x = x;
+ }
+
+
+ //------------------------------------------------------------------------
+ inline void scanline_bin::add_span(int x, unsigned len, unsigned)
+ {
+ if(x == m_last_x+1)
+ {
+ m_cur_span->len = (int16)(m_cur_span->len + len);
+ }
+ else
+ {
+ ++m_cur_span;
+ m_cur_span->x = (int16)x;
+ m_cur_span->len = (int16)len;
+ }
+ m_last_x = x + len - 1;
+ }
+
+ //------------------------------------------------------------------------
+ inline void scanline_bin::add_cells(int x, unsigned len, const void*)
+ {
+ add_span(x, len, 0);
+ }
+}
+
+
+#endif
diff --git a/agg/inc/agg_scanline_boolean_algebra.h b/agg/inc/agg_scanline_boolean_algebra.h
new file mode 100755
index 000000000000..7f1a3c5ba774
--- /dev/null
+++ b/agg/inc/agg_scanline_boolean_algebra.h
@@ -0,0 +1,1559 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+
+#ifndef AGG_SCANLINE_BOOLEAN_ALGEBRA_INCLUDED
+#define AGG_SCANLINE_BOOLEAN_ALGEBRA_INCLUDED
+
+#include <stdlib.h>
+#include <math.h>
+#include "agg_basics.h"
+
+
+namespace agg
+{
+
+ //-----------------------------------------------sbool_combine_spans_bin
+ // Functor.
+ // Combine two binary encoded spans, i.e., when we don't have any
+ // anti-aliasing information, but only X and Length. The function
+ // is compatible with any type of scanlines.
+ //----------------
+ template<class Scanline1,
+ class Scanline2,
+ class Scanline>
+ struct sbool_combine_spans_bin
+ {
+ void operator () (const typename Scanline1::const_iterator&,
+ const typename Scanline2::const_iterator&,
+ int x, unsigned len,
+ Scanline& sl) const
+ {
+ sl.add_span(x, len, cover_full);
+ }
+ };
+
+
+
+ //---------------------------------------------sbool_combine_spans_empty
+ // Functor.
+ // Combine two spans as empty ones. The functor does nothing
+ // and is used to XOR binary spans.
+ //----------------
+ template<class Scanline1,
+ class Scanline2,
+ class Scanline>
+ struct sbool_combine_spans_empty
+ {
+ void operator () (const typename Scanline1::const_iterator&,
+ const typename Scanline2::const_iterator&,
+ int, unsigned,
+ Scanline&) const
+ {}
+ };
+
+
+
+ //--------------------------------------------------sbool_add_span_empty
+ // Functor.
+ // Add nothing. Used in conbine_shapes_sub
+ //----------------
+ template<class Scanline1,
+ class Scanline>
+ struct sbool_add_span_empty
+ {
+ void operator () (const typename Scanline1::const_iterator&,
+ int, unsigned,
+ Scanline&) const
+ {}
+ };
+
+
+ //----------------------------------------------------sbool_add_span_bin
+ // Functor.
+ // Add a binary span
+ //----------------
+ template<class Scanline1,
+ class Scanline>
+ struct sbool_add_span_bin
+ {
+ void operator () (const typename Scanline1::const_iterator&,
+ int x, unsigned len,
+ Scanline& sl) const
+ {
+ sl.add_span(x, len, cover_full);
+ }
+ };
+
+
+
+
+ //-----------------------------------------------------sbool_add_span_aa
+ // Functor.
+ // Add an anti-aliased span
+ // anti-aliasing information, but only X and Length. The function
+ // is compatible with any type of scanlines.
+ //----------------
+ template<class Scanline1,
+ class Scanline>
+ struct sbool_add_span_aa
+ {
+ void operator () (const typename Scanline1::const_iterator& span,
+ int x, unsigned len,
+ Scanline& sl) const
+ {
+ if(span->len < 0)
+ {
+ sl.add_span(x, len, *span->covers);
+ }
+ else
+ if(span->len > 0)
+ {
+ const typename Scanline1::cover_type* covers = span->covers;
+ if(span->x < x) covers += x - span->x;
+ sl.add_cells(x, len, covers);
+ }
+ }
+ };
+
+
+
+
+ //----------------------------------------------sbool_intersect_spans_aa
+ // Functor.
+ // Intersect two spans preserving the anti-aliasing information.
+ // The result is added to the "sl" scanline.
+ //------------------
+ template<class Scanline1,
+ class Scanline2,
+ class Scanline,
+ unsigned CoverShift = cover_shift>
+ struct sbool_intersect_spans_aa
+ {
+ enum
+ {
+ cover_shift = CoverShift,
+ cover_size = 1 << cover_shift,
+ cover_mask = cover_size - 1,
+ cover_full = cover_mask
+ };
+
+
+ void operator () (const typename Scanline1::const_iterator& span1,
+ const typename Scanline2::const_iterator& span2,
+ int x, unsigned len,
+ Scanline& sl) const
+ {
+ unsigned cover;
+ const typename Scanline1::cover_type* covers1;
+ const typename Scanline2::cover_type* covers2;
+
+ // Calculate the operation code and choose the
+ // proper combination algorithm.
+ // 0 = Both spans are of AA type
+ // 1 = span1 is solid, span2 is AA
+ // 2 = span1 is AA, span2 is solid
+ // 3 = Both spans are of solid type
+ //-----------------
+ switch((span1->len < 0) | ((span2->len < 0) << 1))
+ {
+ case 0: // Both are AA spans
+ covers1 = span1->covers;
+ covers2 = span2->covers;
+ if(span1->x < x) covers1 += x - span1->x;
+ if(span2->x < x) covers2 += x - span2->x;
+ do
+ {
+ cover = *covers1++ * *covers2++;
+ sl.add_cell(x++,
+ (cover == cover_full * cover_full) ?
+ cover_full :
+ (cover >> cover_shift));
+ }
+ while(--len);
+ break;
+
+ case 1: // span1 is solid, span2 is AA
+ covers2 = span2->covers;
+ if(span2->x < x) covers2 += x - span2->x;
+ if(*(span1->covers) == cover_full)
+ {
+ sl.add_cells(x, len, covers2);
+ }
+ else
+ {
+ do
+ {
+ cover = *(span1->covers) * *covers2++;
+ sl.add_cell(x++,
+ (cover == cover_full * cover_full) ?
+ cover_full :
+ (cover >> cover_shift));
+ }
+ while(--len);
+ }
+ break;
+
+ case 2: // span1 is AA, span2 is solid
+ covers1 = span1->covers;
+ if(span1->x < x) covers1 += x - span1->x;
+ if(*(span2->covers) == cover_full)
+ {
+ sl.add_cells(x, len, covers1);
+ }
+ else
+ {
+ do
+ {
+ cover = *covers1++ * *(span2->covers);
+ sl.add_cell(x++,
+ (cover == cover_full * cover_full) ?
+ cover_full :
+ (cover >> cover_shift));
+ }
+ while(--len);
+ }
+ break;
+
+ case 3: // Both are solid spans
+ cover = *(span1->covers) * *(span2->covers);
+ sl.add_span(x, len,
+ (cover == cover_full * cover_full) ?
+ cover_full :
+ (cover >> cover_shift));
+ break;
+ }
+ }
+ };
+
+
+
+
+
+
+ //--------------------------------------------------sbool_unite_spans_aa
+ // Functor.
+ // Unite two spans preserving the anti-aliasing information.
+ // The result is added to the "sl" scanline.
+ //------------------
+ template<class Scanline1,
+ class Scanline2,
+ class Scanline,
+ unsigned CoverShift = cover_shift>
+ struct sbool_unite_spans_aa
+ {
+ enum
+ {
+ cover_shift = CoverShift,
+ cover_size = 1 << cover_shift,
+ cover_mask = cover_size - 1,
+ cover_full = cover_mask
+ };
+
+
+ void operator () (const typename Scanline1::const_iterator& span1,
+ const typename Scanline2::const_iterator& span2,
+ int x, unsigned len,
+ Scanline& sl) const
+ {
+ unsigned cover;
+ const typename Scanline1::cover_type* covers1;
+ const typename Scanline2::cover_type* covers2;
+
+ // Calculate the operation code and choose the
+ // proper combination algorithm.
+ // 0 = Both spans are of AA type
+ // 1 = span1 is solid, span2 is AA
+ // 2 = span1 is AA, span2 is solid
+ // 3 = Both spans are of solid type
+ //-----------------
+ switch((span1->len < 0) | ((span2->len < 0) << 1))
+ {
+ case 0: // Both are AA spans
+ covers1 = span1->covers;
+ covers2 = span2->covers;
+ if(span1->x < x) covers1 += x - span1->x;
+ if(span2->x < x) covers2 += x - span2->x;
+ do
+ {
+ cover = cover_mask * cover_mask -
+ (cover_mask - *covers1++) *
+ (cover_mask - *covers2++);
+ sl.add_cell(x++,
+ (cover == cover_full * cover_full) ?
+ cover_full :
+ (cover >> cover_shift));
+ }
+ while(--len);
+ break;
+
+ case 1: // span1 is solid, span2 is AA
+ covers2 = span2->covers;
+ if(span2->x < x) covers2 += x - span2->x;
+ if(*(span1->covers) == cover_full)
+ {
+ sl.add_span(x, len, cover_full);
+ }
+ else
+ {
+ do
+ {
+ cover = cover_mask * cover_mask -
+ (cover_mask - *(span1->covers)) *
+ (cover_mask - *covers2++);
+ sl.add_cell(x++,
+ (cover == cover_full * cover_full) ?
+ cover_full :
+ (cover >> cover_shift));
+ }
+ while(--len);
+ }
+ break;
+
+ case 2: // span1 is AA, span2 is solid
+ covers1 = span1->covers;
+ if(span1->x < x) covers1 += x - span1->x;
+ if(*(span2->covers) == cover_full)
+ {
+ sl.add_span(x, len, cover_full);
+ }
+ else
+ {
+ do
+ {
+ cover = cover_mask * cover_mask -
+ (cover_mask - *covers1++) *
+ (cover_mask - *(span2->covers));
+ sl.add_cell(x++,
+ (cover == cover_full * cover_full) ?
+ cover_full :
+ (cover >> cover_shift));
+ }
+ while(--len);
+ }
+ break;
+
+ case 3: // Both are solid spans
+ cover = cover_mask * cover_mask -
+ (cover_mask - *(span1->covers)) *
+ (cover_mask - *(span2->covers));
+ sl.add_span(x, len,
+ (cover == cover_full * cover_full) ?
+ cover_full :
+ (cover >> cover_shift));
+ break;
+ }
+ }
+ };
+
+
+ //---------------------------------------------sbool_xor_formula_linear
+ template<unsigned CoverShift = cover_shift>
+ struct sbool_xor_formula_linear
+ {
+ enum
+ {
+ cover_shift = CoverShift,
+ cover_size = 1 << cover_shift,
+ cover_mask = cover_size - 1
+ };
+
+ static AGG_INLINE unsigned calculate(unsigned a, unsigned b)
+ {
+ unsigned cover = a + b;
+ if(cover > cover_mask) cover = cover_mask + cover_mask - cover;
+ return cover;
+ }
+ };
+
+
+ //---------------------------------------------sbool_xor_formula_saddle
+ template<unsigned CoverShift = cover_shift>
+ struct sbool_xor_formula_saddle
+ {
+ enum
+ {
+ cover_shift = CoverShift,
+ cover_size = 1 << cover_shift,
+ cover_mask = cover_size - 1
+ };
+
+ static AGG_INLINE unsigned calculate(unsigned a, unsigned b)
+ {
+ unsigned k = a * b;
+ if(k == cover_mask * cover_mask) return 0;
+
+ a = (cover_mask * cover_mask - (a << cover_shift) + k) >> cover_shift;
+ b = (cover_mask * cover_mask - (b << cover_shift) + k) >> cover_shift;
+ return cover_mask - ((a * b) >> cover_shift);
+ }
+ };
+
+
+ //-------------------------------------------sbool_xor_formula_abs_diff
+ struct sbool_xor_formula_abs_diff
+ {
+ static AGG_INLINE unsigned calculate(unsigned a, unsigned b)
+ {
+ return unsigned(abs(int(a) - int(b)));
+ }
+ };
+
+
+
+ //----------------------------------------------------sbool_xor_spans_aa
+ // Functor.
+ // XOR two spans preserving the anti-aliasing information.
+ // The result is added to the "sl" scanline.
+ //------------------
+ template<class Scanline1,
+ class Scanline2,
+ class Scanline,
+ class XorFormula,
+ unsigned CoverShift = cover_shift>
+ struct sbool_xor_spans_aa
+ {
+ enum
+ {
+ cover_shift = CoverShift,
+ cover_size = 1 << cover_shift,
+ cover_mask = cover_size - 1,
+ cover_full = cover_mask
+ };
+
+
+ void operator () (const typename Scanline1::const_iterator& span1,
+ const typename Scanline2::const_iterator& span2,
+ int x, unsigned len,
+ Scanline& sl) const
+ {
+ unsigned cover;
+ const typename Scanline1::cover_type* covers1;
+ const typename Scanline2::cover_type* covers2;
+
+ // Calculate the operation code and choose the
+ // proper combination algorithm.
+ // 0 = Both spans are of AA type
+ // 1 = span1 is solid, span2 is AA
+ // 2 = span1 is AA, span2 is solid
+ // 3 = Both spans are of solid type
+ //-----------------
+ switch((span1->len < 0) | ((span2->len < 0) << 1))
+ {
+ case 0: // Both are AA spans
+ covers1 = span1->covers;
+ covers2 = span2->covers;
+ if(span1->x < x) covers1 += x - span1->x;
+ if(span2->x < x) covers2 += x - span2->x;
+ do
+ {
+ cover = XorFormula::calculate(*covers1++, *covers2++);
+ if(cover) sl.add_cell(x, cover);
+ ++x;
+ }
+ while(--len);
+ break;
+
+ case 1: // span1 is solid, span2 is AA
+ covers2 = span2->covers;
+ if(span2->x < x) covers2 += x - span2->x;
+ do
+ {
+ cover = XorFormula::calculate(*(span1->covers), *covers2++);
+ if(cover) sl.add_cell(x, cover);
+ ++x;
+ }
+ while(--len);
+ break;
+
+ case 2: // span1 is AA, span2 is solid
+ covers1 = span1->covers;
+ if(span1->x < x) covers1 += x - span1->x;
+ do
+ {
+ cover = XorFormula::calculate(*covers1++, *(span2->covers));
+ if(cover) sl.add_cell(x, cover);
+ ++x;
+ }
+ while(--len);
+ break;
+
+ case 3: // Both are solid spans
+ cover = XorFormula::calculate(*(span1->covers), *(span2->covers));
+ if(cover) sl.add_span(x, len, cover);
+ break;
+
+ }
+ }
+ };
+
+
+
+
+
+ //-----------------------------------------------sbool_subtract_spans_aa
+ // Functor.
+ // Unite two spans preserving the anti-aliasing information.
+ // The result is added to the "sl" scanline.
+ //------------------
+ template<class Scanline1,
+ class Scanline2,
+ class Scanline,
+ unsigned CoverShift = cover_shift>
+ struct sbool_subtract_spans_aa
+ {
+ enum
+ {
+ cover_shift = CoverShift,
+ cover_size = 1 << cover_shift,
+ cover_mask = cover_size - 1,
+ cover_full = cover_mask
+ };
+
+
+ void operator () (const typename Scanline1::const_iterator& span1,
+ const typename Scanline2::const_iterator& span2,
+ int x, unsigned len,
+ Scanline& sl) const
+ {
+ unsigned cover;
+ const typename Scanline1::cover_type* covers1;
+ const typename Scanline2::cover_type* covers2;
+
+ // Calculate the operation code and choose the
+ // proper combination algorithm.
+ // 0 = Both spans are of AA type
+ // 1 = span1 is solid, span2 is AA
+ // 2 = span1 is AA, span2 is solid
+ // 3 = Both spans are of solid type
+ //-----------------
+ switch((span1->len < 0) | ((span2->len < 0) << 1))
+ {
+ case 0: // Both are AA spans
+ covers1 = span1->covers;
+ covers2 = span2->covers;
+ if(span1->x < x) covers1 += x - span1->x;
+ if(span2->x < x) covers2 += x - span2->x;
+ do
+ {
+ cover = *covers1++ * (cover_mask - *covers2++);
+ if(cover)
+ {
+ sl.add_cell(x,
+ (cover == cover_full * cover_full) ?
+ cover_full :
+ (cover >> cover_shift));
+ }
+ ++x;
+ }
+ while(--len);
+ break;
+
+ case 1: // span1 is solid, span2 is AA
+ covers2 = span2->covers;
+ if(span2->x < x) covers2 += x - span2->x;
+ do
+ {
+ cover = *(span1->covers) * (cover_mask - *covers2++);
+ if(cover)
+ {
+ sl.add_cell(x,
+ (cover == cover_full * cover_full) ?
+ cover_full :
+ (cover >> cover_shift));
+ }
+ ++x;
+ }
+ while(--len);
+ break;
+
+ case 2: // span1 is AA, span2 is solid
+ covers1 = span1->covers;
+ if(span1->x < x) covers1 += x - span1->x;
+ if(*(span2->covers) != cover_full)
+ {
+ do
+ {
+ cover = *covers1++ * (cover_mask - *(span2->covers));
+ if(cover)
+ {
+ sl.add_cell(x,
+ (cover == cover_full * cover_full) ?
+ cover_full :
+ (cover >> cover_shift));
+ }
+ ++x;
+ }
+ while(--len);
+ }
+ break;
+
+ case 3: // Both are solid spans
+ cover = *(span1->covers) * (cover_mask - *(span2->covers));
+ if(cover)
+ {
+ sl.add_span(x, len,
+ (cover == cover_full * cover_full) ?
+ cover_full :
+ (cover >> cover_shift));
+ }
+ break;
+ }
+ }
+ };
+
+
+
+
+
+
+ //--------------------------------------------sbool_add_spans_and_render
+ template<class Scanline1,
+ class Scanline,
+ class Renderer,
+ class AddSpanFunctor>
+ void sbool_add_spans_and_render(const Scanline1& sl1,
+ Scanline& sl,
+ Renderer& ren,
+ AddSpanFunctor add_span)
+ {
+ sl.reset_spans();
+ typename Scanline::const_iterator span = sl1.begin();
+ unsigned num_spans = sl1.num_spans();
+ do
+ {
+ add_span(span, span->x, abs((int)span->len), sl);
+ ++span;
+ }
+ while(--num_spans);
+ sl.finalize(sl1.y());
+ ren.render(sl);
+ }
+
+
+
+
+
+
+
+ //---------------------------------------------sbool_intersect_scanlines
+ // Intersect two scanlines, "sl1" and "sl2" and generate a new "sl" one.
+ // The combine_spans functor can be of type sbool_combine_spans_bin or
+ // sbool_intersect_spans_aa. First is a general functor to combine
+ // two spans without Anti-Aliasing, the second preserves the AA
+ // information, but works slower
+ //
+ template<class Scanline1,
+ class Scanline2,
+ class Scanline,
+ class CombineSpansFunctor>
+ void sbool_intersect_scanlines(const Scanline1& sl1,
+ const Scanline2& sl2,
+ Scanline& sl,
+ CombineSpansFunctor combine_spans)
+ {
+ sl.reset_spans();
+
+ unsigned num1 = sl1.num_spans();
+ if(num1 == 0) return;
+
+ unsigned num2 = sl2.num_spans();
+ if(num2 == 0) return;
+
+ typename Scanline::const_iterator span1 = sl1.begin();
+ typename Scanline::const_iterator span2 = sl2.begin();
+
+ while(num1 && num2)
+ {
+ int xb1 = span1->x;
+ int xb2 = span2->x;
+ int xe1 = xb1 + abs((int)span1->len) - 1;
+ int xe2 = xb2 + abs((int)span2->len) - 1;
+
+ // Determine what spans we should advance in the next step
+ // The span with the least ending X should be advanced
+ // advance_both is just an optimization when we ending
+ // coordinates are the same and we can advance both
+ //--------------
+ bool advance_span1 = xe1 < xe2;
+ bool advance_both = xe1 == xe2;
+
+ // Find the intersection of the spans
+ // and check if they intersect
+ //--------------
+ if(xb1 < xb2) xb1 = xb2;
+ if(xe1 > xe2) xe1 = xe2;
+ if(xb1 <= xe1)
+ {
+ combine_spans(span1, span2, xb1, xe1 - xb1 + 1, sl);
+ }
+
+ // Advance the spans
+ //--------------
+ if(advance_both)
+ {
+ --num1;
+ --num2;
+ ++span1;
+ ++span2;
+ }
+ else
+ {
+ if(advance_span1)
+ {
+ --num1;
+ ++span1;
+ }
+ else
+ {
+ --num2;
+ ++span2;
+ }
+ }
+ }
+ }
+
+
+
+
+
+
+
+
+ //------------------------------------------------sbool_intersect_shapes
+ // Intersect the scanline shapes. Here the "Scanline Generator"
+ // abstraction is used. ScanlineGen1 and ScanlineGen2 are
+ // the generators, and can be of type rasterizer_scanline_aa<>.
+ // There function requires three scanline containers that can be of
+ // different types.
+ // "sl1" and "sl2" are used to retrieve scanlines from the generators,
+ // "sl" is ised as the resulting scanline to render it.
+ // The external "sl1" and "sl2" are used only for the sake of
+ // optimization and reusing of the scanline objects.
+ // the function calls sbool_intersect_scanlines with CombineSpansFunctor
+ // as the last argument. See sbool_intersect_scanlines for details.
+ //----------
+ template<class ScanlineGen1,
+ class ScanlineGen2,
+ class Scanline1,
+ class Scanline2,
+ class Scanline,
+ class Renderer,
+ class CombineSpansFunctor>
+ void sbool_intersect_shapes(ScanlineGen1& sg1, ScanlineGen2& sg2,
+ Scanline1& sl1, Scanline2& sl2,
+ Scanline& sl, Renderer& ren,
+ CombineSpansFunctor combine_spans)
+ {
+ // Prepare the scanline generators.
+ // If anyone of them doesn't contain
+ // any scanlines, then return.
+ //-----------------
+ if(!sg1.rewind_scanlines()) return;
+ if(!sg2.rewind_scanlines()) return;
+
+ // Get the bounding boxes
+ //----------------
+ rect r1(sg1.min_x(), sg1.min_y(), sg1.max_x(), sg1.max_y());
+ rect r2(sg2.min_x(), sg2.min_y(), sg2.max_x(), sg2.max_y());
+
+ // Calculate the intersection of the bounding
+ // boxes and return if they don't intersect.
+ //-----------------
+ rect ir = intersect_rectangles(r1, r2);
+ if(!ir.is_valid()) return;
+
+ // Reset the scanlines and get two first ones
+ //-----------------
+ sl.reset(ir.x1, ir.x2);
+ sl1.reset(sg1.min_x(), sg1.max_x());
+ sl2.reset(sg2.min_x(), sg2.max_x());
+ if(!sg1.sweep_scanline(sl1)) return;
+ if(!sg2.sweep_scanline(sl2)) return;
+
+ ren.prepare(unsigned(ir.x2 - ir.x1 + 2));
+
+ // The main loop
+ // Here we synchronize the scanlines with
+ // the same Y coordinate, ignoring all other ones.
+ // Only scanlines having the same Y-coordinate
+ // are to be combined.
+ //-----------------
+ for(;;)
+ {
+ while(sl1.y() < sl2.y())
+ {
+ if(!sg1.sweep_scanline(sl1)) return;
+ }
+ while(sl2.y() < sl1.y())
+ {
+ if(!sg2.sweep_scanline(sl2)) return;
+ }
+
+ if(sl1.y() == sl2.y())
+ {
+ // The Y coordinates are the same.
+ // Combine the scanlines, render if they contain any spans,
+ // and advance both generators to the next scanlines
+ //----------------------
+ sbool_intersect_scanlines(sl1, sl2, sl, combine_spans);
+ if(sl.num_spans())
+ {
+ sl.finalize(sl1.y());
+ ren.render(sl);
+ }
+ if(!sg1.sweep_scanline(sl1)) return;
+ if(!sg2.sweep_scanline(sl2)) return;
+ }
+ }
+ }
+
+
+
+
+
+
+
+ //-------------------------------------------------sbool_unite_scanlines
+ // Unite two scanlines, "sl1" and "sl2" and generate a new "sl" one.
+ // The combine_spans functor can be of type sbool_combine_spans_bin or
+ // sbool_intersect_spans_aa. First is a general functor to combine
+ // two spans without Anti-Aliasing, the second preserves the AA
+ // information, but works slower
+ //
+ template<class Scanline1,
+ class Scanline2,
+ class Scanline,
+ class AddSpanFunctor1,
+ class AddSpanFunctor2,
+ class CombineSpansFunctor>
+ void sbool_unite_scanlines(const Scanline1& sl1,
+ const Scanline2& sl2,
+ Scanline& sl,
+ AddSpanFunctor1 add_span1,
+ AddSpanFunctor2 add_span2,
+ CombineSpansFunctor combine_spans)
+ {
+ sl.reset_spans();
+
+ unsigned num1 = sl1.num_spans();
+ unsigned num2 = sl2.num_spans();
+
+ typename Scanline::const_iterator span1;
+ typename Scanline::const_iterator span2;
+
+ enum { invalid_b = 0xFFFFFFF, invalid_e = invalid_b - 1 };
+
+ // Initialize the spans as invalid
+ //---------------
+ int xb1 = invalid_b;
+ int xb2 = invalid_b;
+ int xe1 = invalid_e;
+ int xe2 = invalid_e;
+
+ // Initialize span1 if there are spans
+ //---------------
+ if(num1)
+ {
+ span1 = sl1.begin();
+ xb1 = span1->x;
+ xe1 = xb1 + abs((int)span1->len) - 1;
+ --num1;
+ }
+
+ // Initialize span2 if there are spans
+ //---------------
+ if(num2)
+ {
+ span2 = sl2.begin();
+ xb2 = span2->x;
+ xe2 = xb2 + abs((int)span2->len) - 1;
+ --num2;
+ }
+
+
+ for(;;)
+ {
+ // Retrieve a new span1 if it's invalid
+ //----------------
+ if(num1 && xb1 > xe1)
+ {
+ --num1;
+ ++span1;
+ xb1 = span1->x;
+ xe1 = xb1 + abs((int)span1->len) - 1;
+ }
+
+ // Retrieve a new span2 if it's invalid
+ //----------------
+ if(num2 && xb2 > xe2)
+ {
+ --num2;
+ ++span2;
+ xb2 = span2->x;
+ xe2 = xb2 + abs((int)span2->len) - 1;
+ }
+
+ if(xb1 > xe1 && xb2 > xe2) break;
+
+ // Calculate the intersection
+ //----------------
+ int xb = xb1;
+ int xe = xe1;
+ if(xb < xb2) xb = xb2;
+ if(xe > xe2) xe = xe2;
+ int len = xe - xb + 1; // The length of the intersection
+ if(len > 0)
+ {
+ // The spans intersect,
+ // add the beginning of the span
+ //----------------
+ if(xb1 < xb2)
+ {
+ add_span1(span1, xb1, xb2 - xb1, sl);
+ xb1 = xb2;
+ }
+ else
+ if(xb2 < xb1)
+ {
+ add_span2(span2, xb2, xb1 - xb2, sl);
+ xb2 = xb1;
+ }
+
+ // Add the combination part of the spans
+ //----------------
+ combine_spans(span1, span2, xb, len, sl);
+
+
+ // Invalidate the fully processed span or both
+ //----------------
+ if(xe1 < xe2)
+ {
+ // Invalidate span1 and eat
+ // the processed part of span2
+ //--------------
+ xb1 = invalid_b;
+ xe1 = invalid_e;
+ xb2 += len;
+ }
+ else
+ if(xe2 < xe1)
+ {
+ // Invalidate span2 and eat
+ // the processed part of span1
+ //--------------
+ xb2 = invalid_b;
+ xe2 = invalid_e;
+ xb1 += len;
+ }
+ else
+ {
+ xb1 = invalid_b; // Invalidate both
+ xb2 = invalid_b;
+ xe1 = invalid_e;
+ xe2 = invalid_e;
+ }
+ }
+ else
+ {
+ // The spans do not intersect
+ //--------------
+ if(xb1 < xb2)
+ {
+ // Advance span1
+ //---------------
+ if(xb1 <= xe1)
+ {
+ add_span1(span1, xb1, xe1 - xb1 + 1, sl);
+ }
+ xb1 = invalid_b; // Invalidate
+ xe1 = invalid_e;
+ }
+ else
+ {
+ // Advance span2
+ //---------------
+ if(xb2 <= xe2)
+ {
+ add_span2(span2, xb2, xe2 - xb2 + 1, sl);
+ }
+ xb2 = invalid_b; // Invalidate
+ xe2 = invalid_e;
+ }
+ }
+ }
+ }
+
+
+
+
+ //----------------------------------------------------sbool_unite_shapes
+ // Unite the scanline shapes. Here the "Scanline Generator"
+ // abstraction is used. ScanlineGen1 and ScanlineGen2 are
+ // the generators, and can be of type rasterizer_scanline_aa<>.
+ // There function requires three scanline containers that can be
+ // of different type.
+ // "sl1" and "sl2" are used to retrieve scanlines from the generators,
+ // "sl" is ised as the resulting scanline to render it.
+ // The external "sl1" and "sl2" are used only for the sake of
+ // optimization and reusing of the scanline objects.
+ // the function calls sbool_unite_scanlines with CombineSpansFunctor
+ // as the last argument. See sbool_unite_scanlines for details.
+ //----------
+ template<class ScanlineGen1,
+ class ScanlineGen2,
+ class Scanline1,
+ class Scanline2,
+ class Scanline,
+ class Renderer,
+ class AddSpanFunctor1,
+ class AddSpanFunctor2,
+ class CombineSpansFunctor>
+ void sbool_unite_shapes(ScanlineGen1& sg1, ScanlineGen2& sg2,
+ Scanline1& sl1, Scanline2& sl2,
+ Scanline& sl, Renderer& ren,
+ AddSpanFunctor1 add_span1,
+ AddSpanFunctor2 add_span2,
+ CombineSpansFunctor combine_spans)
+ {
+ // Prepare the scanline generators.
+ // If anyone of them doesn't contain
+ // any scanlines, then return.
+ //-----------------
+ bool flag1 = sg1.rewind_scanlines();
+ bool flag2 = sg2.rewind_scanlines();
+ if(!flag1 && !flag2) return;
+
+ // Get the bounding boxes
+ //----------------
+ rect r1(sg1.min_x(), sg1.min_y(), sg1.max_x(), sg1.max_y());
+ rect r2(sg2.min_x(), sg2.min_y(), sg2.max_x(), sg2.max_y());
+
+ // Calculate the union of the bounding boxes
+ //-----------------
+ rect ur = unite_rectangles(r1, r2);
+ if(!ur.is_valid()) return;
+
+ ren.prepare(unsigned(ur.x2 - ur.x2 + 2));
+
+ // Reset the scanlines and get two first ones
+ //-----------------
+ sl.reset(ur.x1, ur.x2);
+ if(flag1)
+ {
+ sl1.reset(sg1.min_x(), sg1.max_x());
+ flag1 = sg1.sweep_scanline(sl1);
+ }
+
+ if(flag2)
+ {
+ sl2.reset(sg2.min_x(), sg2.max_x());
+ flag2 = sg2.sweep_scanline(sl2);
+ }
+
+ // The main loop
+ // Here we synchronize the scanlines with
+ // the same Y coordinate.
+ //-----------------
+ while(flag1 || flag2)
+ {
+ if(flag1 && flag2)
+ {
+ if(sl1.y() == sl2.y())
+ {
+ // The Y coordinates are the same.
+ // Combine the scanlines, render if they contain any spans,
+ // and advance both generators to the next scanlines
+ //----------------------
+ sbool_unite_scanlines(sl1, sl2, sl,
+ add_span1, add_span2, combine_spans);
+ if(sl.num_spans())
+ {
+ sl.finalize(sl1.y());
+ ren.render(sl);
+ }
+ flag1 = sg1.sweep_scanline(sl1);
+ flag2 = sg2.sweep_scanline(sl2);
+ }
+ else
+ {
+ if(sl1.y() < sl2.y())
+ {
+ sbool_add_spans_and_render(sl1, sl, ren, add_span1);
+ flag1 = sg1.sweep_scanline(sl1);
+ }
+ else
+ {
+ sbool_add_spans_and_render(sl2, sl, ren, add_span2);
+ flag2 = sg2.sweep_scanline(sl2);
+ }
+ }
+ }
+ else
+ {
+ if(flag1)
+ {
+ sbool_add_spans_and_render(sl1, sl, ren, add_span1);
+ flag1 = sg1.sweep_scanline(sl1);
+ }
+ if(flag2)
+ {
+ sbool_add_spans_and_render(sl2, sl, ren, add_span2);
+ flag2 = sg2.sweep_scanline(sl2);
+ }
+ }
+ }
+ }
+
+
+
+
+
+
+
+
+ //-------------------------------------------------sbool_subtract_shapes
+ // Subtract the scanline shapes, "sg1-sg2". Here the "Scanline Generator"
+ // abstraction is used. ScanlineGen1 and ScanlineGen2 are
+ // the generators, and can be of type rasterizer_scanline_aa<>.
+ // There function requires three scanline containers that can be of
+ // different types.
+ // "sl1" and "sl2" are used to retrieve scanlines from the generators,
+ // "sl" is ised as the resulting scanline to render it.
+ // The external "sl1" and "sl2" are used only for the sake of
+ // optimization and reusing of the scanline objects.
+ // the function calls sbool_intersect_scanlines with CombineSpansFunctor
+ // as the last argument. See combine_scanlines_sub for details.
+ //----------
+ template<class ScanlineGen1,
+ class ScanlineGen2,
+ class Scanline1,
+ class Scanline2,
+ class Scanline,
+ class Renderer,
+ class AddSpanFunctor1,
+ class CombineSpansFunctor>
+ void sbool_subtract_shapes(ScanlineGen1& sg1, ScanlineGen2& sg2,
+ Scanline1& sl1, Scanline2& sl2,
+ Scanline& sl, Renderer& ren,
+ AddSpanFunctor1 add_span1,
+ CombineSpansFunctor combine_spans)
+ {
+ // Prepare the scanline generators.
+ // Here "sg1" is master, "sg2" is slave.
+ //-----------------
+ if(!sg1.rewind_scanlines()) return;
+ bool flag2 = sg2.rewind_scanlines();
+
+ // Get the bounding box
+ //----------------
+ rect r1(sg1.min_x(), sg1.min_y(), sg1.max_x(), sg1.max_y());
+
+ // Reset the scanlines and get two first ones
+ //-----------------
+ sl.reset(sg1.min_x(), sg1.max_x());
+ sl1.reset(sg1.min_x(), sg1.max_x());
+ sl2.reset(sg2.min_x(), sg2.max_x());
+ if(!sg1.sweep_scanline(sl1)) return;
+
+ if(flag2) flag2 = sg2.sweep_scanline(sl2);
+
+ ren.prepare(unsigned(sg1.max_x() - sg1.min_x() + 2));
+
+ // A fake span2 processor
+ sbool_add_span_empty<Scanline1, Scanline> add_span2;
+
+ // The main loop
+ // Here we synchronize the scanlines with
+ // the same Y coordinate, ignoring all other ones.
+ // Only scanlines having the same Y-coordinate
+ // are to be combined.
+ //-----------------
+ bool flag1 = true;
+ do
+ {
+ // Synchronize "slave" with "master"
+ //-----------------
+ while(flag2 && sl2.y() < sl1.y())
+ {
+ flag2 = sg2.sweep_scanline(sl2);
+ }
+
+
+ if(flag2 && sl2.y() == sl1.y())
+ {
+ // The Y coordinates are the same.
+ // Combine the scanlines and render if they contain any spans.
+ //----------------------
+ sbool_unite_scanlines(sl1, sl2, sl, add_span1, add_span2, combine_spans);
+ if(sl.num_spans())
+ {
+ sl.finalize(sl1.y());
+ ren.render(sl);
+ }
+ }
+ else
+ {
+ sbool_add_spans_and_render(sl1, sl, ren, add_span1);
+ }
+
+ // Advance the "master"
+ flag1 = sg1.sweep_scanline(sl1);
+ }
+ while(flag1);
+ }
+
+
+
+
+
+
+
+ //---------------------------------------------sbool_intersect_shapes_aa
+ // Intersect two anti-aliased scanline shapes.
+ // Here the "Scanline Generator" abstraction is used.
+ // ScanlineGen1 and ScanlineGen2 are the generators, and can be of
+ // type rasterizer_scanline_aa<>. There function requires three
+ // scanline containers that can be of different types.
+ // "sl1" and "sl2" are used to retrieve scanlines from the generators,
+ // "sl" is ised as the resulting scanline to render it.
+ // The external "sl1" and "sl2" are used only for the sake of
+ // optimization and reusing of the scanline objects.
+ //----------
+ template<class ScanlineGen1,
+ class ScanlineGen2,
+ class Scanline1,
+ class Scanline2,
+ class Scanline,
+ class Renderer>
+ void sbool_intersect_shapes_aa(ScanlineGen1& sg1, ScanlineGen2& sg2,
+ Scanline1& sl1, Scanline2& sl2,
+ Scanline& sl, Renderer& ren)
+ {
+ sbool_intersect_spans_aa<Scanline1, Scanline2, Scanline> combine_functor;
+ sbool_intersect_shapes(sg1, sg2, sl1, sl2, sl, ren, combine_functor);
+ }
+
+
+
+
+
+ //--------------------------------------------sbool_intersect_shapes_bin
+ // Intersect two binary scanline shapes (without anti-aliasing).
+ // See intersect_shapes_aa for more comments
+ //----------
+ template<class ScanlineGen1,
+ class ScanlineGen2,
+ class Scanline1,
+ class Scanline2,
+ class Scanline,
+ class Renderer>
+ void sbool_intersect_shapes_bin(ScanlineGen1& sg1, ScanlineGen2& sg2,
+ Scanline1& sl1, Scanline2& sl2,
+ Scanline& sl, Renderer& ren)
+ {
+ sbool_combine_spans_bin<Scanline1, Scanline2, Scanline> combine_functor;
+ sbool_intersect_shapes(sg1, sg2, sl1, sl2, sl, ren, combine_functor);
+ }
+
+
+
+
+
+ //-------------------------------------------------sbool_unite_shapes_aa
+ // Unite two anti-aliased scanline shapes
+ // See intersect_shapes_aa for more comments
+ //----------
+ template<class ScanlineGen1,
+ class ScanlineGen2,
+ class Scanline1,
+ class Scanline2,
+ class Scanline,
+ class Renderer>
+ void sbool_unite_shapes_aa(ScanlineGen1& sg1, ScanlineGen2& sg2,
+ Scanline1& sl1, Scanline2& sl2,
+ Scanline& sl, Renderer& ren)
+ {
+ sbool_add_span_aa<Scanline1, Scanline> add_functor1;
+ sbool_add_span_aa<Scanline2, Scanline> add_functor2;
+ sbool_unite_spans_aa<Scanline1, Scanline2, Scanline> combine_functor;
+ sbool_unite_shapes(sg1, sg2, sl1, sl2, sl, ren,
+ add_functor1, add_functor2, combine_functor);
+ }
+
+
+
+
+
+ //------------------------------------------------sbool_unite_shapes_bin
+ // Unite two binary scanline shapes (without anti-aliasing).
+ // See intersect_shapes_aa for more comments
+ //----------
+ template<class ScanlineGen1,
+ class ScanlineGen2,
+ class Scanline1,
+ class Scanline2,
+ class Scanline,
+ class Renderer>
+ void sbool_unite_shapes_bin(ScanlineGen1& sg1, ScanlineGen2& sg2,
+ Scanline1& sl1, Scanline2& sl2,
+ Scanline& sl, Renderer& ren)
+ {
+ sbool_add_span_bin<Scanline1, Scanline> add_functor1;
+ sbool_add_span_bin<Scanline2, Scanline> add_functor2;
+ sbool_combine_spans_bin<Scanline1, Scanline2, Scanline> combine_functor;
+ sbool_unite_shapes(sg1, sg2, sl1, sl2, sl, ren,
+ add_functor1, add_functor2, combine_functor);
+ }
+
+
+
+
+
+
+
+
+
+ //---------------------------------------------------sbool_xor_shapes_aa
+ // Apply eXclusive OR to two anti-aliased scanline shapes. There's
+ // a modified "Linear" XOR used instead of classical "Saddle" one.
+ // The reason is to have the result absolutely conststent with what
+ // the scanline rasterizer produces.
+ // See intersect_shapes_aa for more comments
+ //----------
+ template<class ScanlineGen1,
+ class ScanlineGen2,
+ class Scanline1,
+ class Scanline2,
+ class Scanline,
+ class Renderer>
+ void sbool_xor_shapes_aa(ScanlineGen1& sg1, ScanlineGen2& sg2,
+ Scanline1& sl1, Scanline2& sl2,
+ Scanline& sl, Renderer& ren)
+ {
+ sbool_add_span_aa<Scanline1, Scanline> add_functor1;
+ sbool_add_span_aa<Scanline2, Scanline> add_functor2;
+ sbool_xor_spans_aa<Scanline1, Scanline2, Scanline,
+ sbool_xor_formula_linear<> > combine_functor;
+ sbool_unite_shapes(sg1, sg2, sl1, sl2, sl, ren,
+ add_functor1, add_functor2, combine_functor);
+ }
+
+
+
+ //------------------------------------------sbool_xor_shapes_saddle_aa
+ // Apply eXclusive OR to two anti-aliased scanline shapes.
+ // There's the classical "Saddle" used to calculate the
+ // Anti-Aliasing values, that is:
+ // a XOR b : 1-((1-a+a*b)*(1-b+a*b))
+ // See intersect_shapes_aa for more comments
+ //----------
+ template<class ScanlineGen1,
+ class ScanlineGen2,
+ class Scanline1,
+ class Scanline2,
+ class Scanline,
+ class Renderer>
+ void sbool_xor_shapes_saddle_aa(ScanlineGen1& sg1, ScanlineGen2& sg2,
+ Scanline1& sl1, Scanline2& sl2,
+ Scanline& sl, Renderer& ren)
+ {
+ sbool_add_span_aa<Scanline1, Scanline> add_functor1;
+ sbool_add_span_aa<Scanline2, Scanline> add_functor2;
+ sbool_xor_spans_aa<Scanline1,
+ Scanline2,
+ Scanline,
+ sbool_xor_formula_saddle<> > combine_functor;
+ sbool_unite_shapes(sg1, sg2, sl1, sl2, sl, ren,
+ add_functor1, add_functor2, combine_functor);
+ }
+
+
+ //--------------------------------------sbool_xor_shapes_abs_diff_aa
+ // Apply eXclusive OR to two anti-aliased scanline shapes.
+ // There's the absolute difference used to calculate
+ // Anti-Aliasing values, that is:
+ // a XOR b : abs(a-b)
+ // See intersect_shapes_aa for more comments
+ //----------
+ template<class ScanlineGen1,
+ class ScanlineGen2,
+ class Scanline1,
+ class Scanline2,
+ class Scanline,
+ class Renderer>
+ void sbool_xor_shapes_abs_diff_aa(ScanlineGen1& sg1, ScanlineGen2& sg2,
+ Scanline1& sl1, Scanline2& sl2,
+ Scanline& sl, Renderer& ren)
+ {
+ sbool_add_span_aa<Scanline1, Scanline> add_functor1;
+ sbool_add_span_aa<Scanline2, Scanline> add_functor2;
+ sbool_xor_spans_aa<Scanline1,
+ Scanline2,
+ Scanline,
+ sbool_xor_formula_abs_diff> combine_functor;
+ sbool_unite_shapes(sg1, sg2, sl1, sl2, sl, ren,
+ add_functor1, add_functor2, combine_functor);
+ }
+
+
+
+ //--------------------------------------------------sbool_xor_shapes_bin
+ // Apply eXclusive OR to two binary scanline shapes (without anti-aliasing).
+ // See intersect_shapes_aa for more comments
+ //----------
+ template<class ScanlineGen1,
+ class ScanlineGen2,
+ class Scanline1,
+ class Scanline2,
+ class Scanline,
+ class Renderer>
+ void sbool_xor_shapes_bin(ScanlineGen1& sg1, ScanlineGen2& sg2,
+ Scanline1& sl1, Scanline2& sl2,
+ Scanline& sl, Renderer& ren)
+ {
+ sbool_add_span_bin<Scanline1, Scanline> add_functor1;
+ sbool_add_span_bin<Scanline2, Scanline> add_functor2;
+ sbool_combine_spans_empty<Scanline1, Scanline2, Scanline> combine_functor;
+ sbool_unite_shapes(sg1, sg2, sl1, sl2, sl, ren,
+ add_functor1, add_functor2, combine_functor);
+ }
+
+
+
+
+
+
+ //----------------------------------------------sbool_subtract_shapes_aa
+ // Subtract shapes "sg1-sg2" with anti-aliasing
+ // See intersect_shapes_aa for more comments
+ //----------
+ template<class ScanlineGen1,
+ class ScanlineGen2,
+ class Scanline1,
+ class Scanline2,
+ class Scanline,
+ class Renderer>
+ void sbool_subtract_shapes_aa(ScanlineGen1& sg1, ScanlineGen2& sg2,
+ Scanline1& sl1, Scanline2& sl2,
+ Scanline& sl, Renderer& ren)
+ {
+ sbool_add_span_aa<Scanline1, Scanline> add_functor;
+ sbool_subtract_spans_aa<Scanline1, Scanline2, Scanline> combine_functor;
+ sbool_subtract_shapes(sg1, sg2, sl1, sl2, sl, ren,
+ add_functor, combine_functor);
+ }
+
+
+
+
+
+ //---------------------------------------------sbool_subtract_shapes_bin
+ // Subtract binary shapes "sg1-sg2" without anti-aliasing
+ // See intersect_shapes_aa for more comments
+ //----------
+ template<class ScanlineGen1,
+ class ScanlineGen2,
+ class Scanline1,
+ class Scanline2,
+ class Scanline,
+ class Renderer>
+ void sbool_subtract_shapes_bin(ScanlineGen1& sg1, ScanlineGen2& sg2,
+ Scanline1& sl1, Scanline2& sl2,
+ Scanline& sl, Renderer& ren)
+ {
+ sbool_add_span_bin<Scanline1, Scanline> add_functor;
+ sbool_combine_spans_empty<Scanline1, Scanline2, Scanline> combine_functor;
+ sbool_subtract_shapes(sg1, sg2, sl1, sl2, sl, ren,
+ add_functor, combine_functor);
+ }
+
+
+
+
+
+
+ //------------------------------------------------------------sbool_op_e
+ enum sbool_op_e
+ {
+ sbool_or, //----sbool_or
+ sbool_and, //----sbool_and
+ sbool_xor, //----sbool_xor
+ sbool_xor_saddle, //----sbool_xor_saddle
+ sbool_xor_abs_diff, //----sbool_xor_abs_diff
+ sbool_a_minus_b, //----sbool_a_minus_b
+ sbool_b_minus_a //----sbool_b_minus_a
+ };
+
+
+
+
+
+
+ //----------------------------------------------sbool_combine_shapes_bin
+ template<class ScanlineGen1,
+ class ScanlineGen2,
+ class Scanline1,
+ class Scanline2,
+ class Scanline,
+ class Renderer>
+ void sbool_combine_shapes_bin(sbool_op_e op,
+ ScanlineGen1& sg1, ScanlineGen2& sg2,
+ Scanline1& sl1, Scanline2& sl2,
+ Scanline& sl, Renderer& ren)
+ {
+ switch(op)
+ {
+ case sbool_or : sbool_unite_shapes_bin (sg1, sg2, sl1, sl2, sl, ren); break;
+ case sbool_and : sbool_intersect_shapes_bin(sg1, sg2, sl1, sl2, sl, ren); break;
+ case sbool_xor :
+ case sbool_xor_saddle :
+ case sbool_xor_abs_diff: sbool_xor_shapes_bin (sg1, sg2, sl1, sl2, sl, ren); break;
+ case sbool_a_minus_b : sbool_subtract_shapes_bin (sg1, sg2, sl1, sl2, sl, ren); break;
+ case sbool_b_minus_a : sbool_subtract_shapes_bin (sg2, sg1, sl2, sl1, sl, ren); break;
+ }
+ }
+
+
+
+
+ //-----------------------------------------------sbool_combine_shapes_aa
+ template<class ScanlineGen1,
+ class ScanlineGen2,
+ class Scanline1,
+ class Scanline2,
+ class Scanline,
+ class Renderer>
+ void sbool_combine_shapes_aa(sbool_op_e op,
+ ScanlineGen1& sg1, ScanlineGen2& sg2,
+ Scanline1& sl1, Scanline2& sl2,
+ Scanline& sl, Renderer& ren)
+ {
+ switch(op)
+ {
+ case sbool_or : sbool_unite_shapes_aa (sg1, sg2, sl1, sl2, sl, ren); break;
+ case sbool_and : sbool_intersect_shapes_aa (sg1, sg2, sl1, sl2, sl, ren); break;
+ case sbool_xor : sbool_xor_shapes_aa (sg1, sg2, sl1, sl2, sl, ren); break;
+ case sbool_xor_saddle : sbool_xor_shapes_saddle_aa (sg1, sg2, sl1, sl2, sl, ren); break;
+ case sbool_xor_abs_diff: sbool_xor_shapes_abs_diff_aa(sg1, sg2, sl1, sl2, sl, ren); break;
+ case sbool_a_minus_b : sbool_subtract_shapes_aa (sg1, sg2, sl1, sl2, sl, ren); break;
+ case sbool_b_minus_a : sbool_subtract_shapes_aa (sg2, sg1, sl2, sl1, sl, ren); break;
+ }
+ }
+
+}
+
+
+#endif
+
diff --git a/agg/inc/agg_scanline_p.h b/agg/inc/agg_scanline_p.h
new file mode 100755
index 000000000000..f217998578a1
--- /dev/null
+++ b/agg/inc/agg_scanline_p.h
@@ -0,0 +1,197 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// Class scanline_p - a general purpose scanline container with packed spans.
+//
+//----------------------------------------------------------------------------
+#ifndef AGG_SCANLINE_P_INCLUDED
+#define AGG_SCANLINE_P_INCLUDED
+
+#include "agg_basics.h"
+
+namespace agg
+{
+
+ //==============================================================scanline_p
+ //
+ // This is a general purpose scaline container which supports the interface
+ // used in the rasterizer::render(). See description of agg_scanline_u
+ // for details.
+ //
+ //------------------------------------------------------------------------
+ template<class T> class scanline_p
+ {
+ public:
+ typedef T cover_type;
+
+ struct span
+ {
+ int16 x;
+ int16 len; // If negative, it's a solid span, covers is valid
+ const T* covers;
+ };
+
+ typedef span* iterator;
+ typedef const span* const_iterator;
+
+ ~scanline_p()
+ {
+ delete [] m_spans;
+ delete [] m_covers;
+ }
+
+ scanline_p() :
+ m_max_len(0),
+ m_last_x(0x7FFFFFF0),
+ m_covers(0),
+ m_cover_ptr(0),
+ m_spans(0),
+ m_cur_span(0)
+ {
+ }
+
+ void reset(int min_x, int max_x);
+ void add_cell(int x, unsigned cover);
+ void add_cells(int x, unsigned len, const T* covers);
+ void add_span(int x, unsigned len, unsigned cover);
+ void finalize(int y_) { m_y = y_; }
+ void reset_spans();
+
+ int y() const { return m_y; }
+ unsigned num_spans() const { return unsigned(m_cur_span - m_spans); }
+ const_iterator begin() const { return m_spans + 1; }
+
+ private:
+ scanline_p(const scanline_p<T>&);
+ const scanline_p<T>& operator = (const scanline_p<T>&);
+
+ unsigned m_max_len;
+ int m_last_x;
+ int m_y;
+ T* m_covers;
+ T* m_cover_ptr;
+ span* m_spans;
+ span* m_cur_span;
+ };
+
+
+ //------------------------------------------------------------------------
+ template<class T>
+ void scanline_p<T>::reset(int min_x, int max_x)
+ {
+ unsigned max_len = max_x - min_x + 3;
+ if(max_len > m_max_len)
+ {
+ delete [] m_spans;
+ delete [] m_covers;
+ m_covers = new T [max_len];
+ m_spans = new span [max_len];
+ m_max_len = max_len;
+ }
+ m_last_x = 0x7FFFFFF0;
+ m_cover_ptr = m_covers;
+ m_cur_span = m_spans;
+ m_cur_span->len = 0;
+ }
+
+
+ //------------------------------------------------------------------------
+ template<class T>
+ void scanline_p<T>::reset_spans()
+ {
+ m_last_x = 0x7FFFFFF0;
+ m_cover_ptr = m_covers;
+ m_cur_span = m_spans;
+ m_cur_span->len = 0;
+ }
+
+
+ //------------------------------------------------------------------------
+ template<class T>
+ void scanline_p<T>::add_cell(int x, unsigned cover)
+ {
+ *m_cover_ptr = (T)cover;
+ if(x == m_last_x+1 && m_cur_span->len > 0)
+ {
+ m_cur_span->len++;
+ }
+ else
+ {
+ m_cur_span++;
+ m_cur_span->covers = m_cover_ptr;
+ m_cur_span->x = (int16)x;
+ m_cur_span->len = 1;
+ }
+ m_last_x = x;
+ m_cover_ptr++;
+ }
+
+
+ //------------------------------------------------------------------------
+ template<class T>
+ void scanline_p<T>::add_cells(int x, unsigned len, const T* covers)
+ {
+ memcpy(m_cover_ptr, covers, len * sizeof(T));
+ if(x == m_last_x+1 && m_cur_span->len > 0)
+ {
+ m_cur_span->len += (int16)len;
+ }
+ else
+ {
+ m_cur_span++;
+ m_cur_span->covers = m_cover_ptr;
+ m_cur_span->x = (int16)x;
+ m_cur_span->len = (int16)len;
+ }
+ m_cover_ptr += len;
+ m_last_x = x + len - 1;
+ }
+
+
+ //------------------------------------------------------------------------
+ template<class T>
+ void scanline_p<T>::add_span(int x, unsigned len, unsigned cover)
+ {
+ if(x == m_last_x+1 &&
+ m_cur_span->len < 0 &&
+ cover == *m_cur_span->covers)
+ {
+ m_cur_span->len -= (int16)len;
+ }
+ else
+ {
+ *m_cover_ptr = (T)cover;
+ m_cur_span++;
+ m_cur_span->covers = m_cover_ptr++;
+ m_cur_span->x = (int16)x;
+ m_cur_span->len = -((int16)len);
+ }
+ m_last_x = x + len - 1;
+ }
+
+
+ //=============================================================scanline_p8
+ typedef scanline_p<int8u> scanline_p8;
+
+ //============================================================scanline_p16
+ typedef scanline_p<int16u> scanline_p16;
+
+ //============================================================scanline_p32
+ typedef scanline_p<int32u> scanline_p32;
+}
+
+
+#endif
+
diff --git a/agg/inc/agg_scanline_storage_aa.h b/agg/inc/agg_scanline_storage_aa.h
new file mode 100755
index 000000000000..3d8b5b946cf9
--- /dev/null
+++ b/agg/inc/agg_scanline_storage_aa.h
@@ -0,0 +1,796 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+
+#ifndef AGG_SCANLINE_STORAGE_AA_INCLUDED
+#define AGG_SCANLINE_STORAGE_AA_INCLUDED
+
+#include <string.h>
+#include <stdlib.h>
+#include <math.h>
+#include "agg_array.h"
+#include "agg_render_scanlines.h"
+
+
+namespace agg
+{
+
+ //----------------------------------------------scanline_cell_storage
+ template<class T> class scanline_cell_storage
+ {
+ struct extra_span
+ {
+ unsigned len;
+ T* ptr;
+ };
+
+ public:
+ typedef T value_type;
+
+ //---------------------------------------------------------------
+ ~scanline_cell_storage()
+ {
+ remove_all();
+ }
+
+ //---------------------------------------------------------------
+ scanline_cell_storage() :
+ m_cells(128-2),
+ m_extra_storage()
+ {}
+
+
+ // Copying
+ //---------------------------------------------------------------
+ scanline_cell_storage(const scanline_cell_storage<T>& v) :
+ m_cells(v.m_cells),
+ m_extra_storage()
+ {
+ copy_extra_storage(v);
+ }
+
+ //---------------------------------------------------------------
+ const scanline_cell_storage<T>&
+ operator = (const scanline_cell_storage<T>& v)
+ {
+ remove_all();
+ m_cells = v.m_cells;
+ copy_extra_storage(v);
+ return *this;
+ }
+
+ //---------------------------------------------------------------
+ void remove_all()
+ {
+ int i;
+ for(i = m_extra_storage.size()-1; i >= 0; --i)
+ {
+ delete [] m_extra_storage[(unsigned)i].ptr;
+ }
+ m_extra_storage.remove_all();
+ m_cells.remove_all();
+ }
+
+ //---------------------------------------------------------------
+ int add_cells(const T* cells, unsigned num_cells)
+ {
+ int idx = m_cells.allocate_continuous_block(num_cells);
+ if(idx >= 0)
+ {
+ T* ptr = &m_cells[idx];
+ memcpy(ptr, cells, sizeof(T) * num_cells);
+ return idx;
+ }
+ extra_span s;
+ s.len = num_cells;
+ s.ptr = new T [num_cells];
+ memcpy(s.ptr, cells, sizeof(T) * num_cells);
+ m_extra_storage.add(s);
+ return -int(m_extra_storage.size());
+ }
+
+ //---------------------------------------------------------------
+ const T* operator [] (int idx) const
+ {
+ if(idx >= 0)
+ {
+ if((unsigned)idx >= m_cells.size()) return 0;
+ return &m_cells[(unsigned)idx];
+ }
+ unsigned i = unsigned(-idx - 1);
+ if(i >= m_extra_storage.size()) return 0;
+ return m_extra_storage[i].ptr;
+ }
+
+ //---------------------------------------------------------------
+ T* operator [] (int idx)
+ {
+ if(idx >= 0)
+ {
+ if((unsigned)idx >= m_cells.size()) return 0;
+ return &m_cells[(unsigned)idx];
+ }
+ unsigned i = unsigned(-idx - 1);
+ if(i >= m_extra_storage.size()) return 0;
+ return m_extra_storage[i].ptr;
+ }
+
+ private:
+ void copy_extra_storage(const scanline_cell_storage<T>& v)
+ {
+ unsigned i;
+ for(i = 0; i < v.m_extra_storage.size(); ++i)
+ {
+ const extra_span& src = v.m_extra_storage[i];
+ extra_span dst;
+ dst.len = src.len;
+ dst.ptr = new T [dst.len];
+ memcpy(dst.ptr, src.ptr, dst.len * sizeof(T));
+ m_extra_storage.add(dst);
+ }
+ }
+
+ pod_deque<T, 12> m_cells;
+ pod_deque<extra_span, 6> m_extra_storage;
+ };
+
+
+
+
+
+
+ //-----------------------------------------------scanline_storage_aa
+ template<class T> class scanline_storage_aa
+ {
+ public:
+ typedef T cover_type;
+
+ //---------------------------------------------------------------
+ struct span_data
+ {
+ int16 x;
+ int16 len; // If negative, it's a solid span, covers is valid
+ int covers_id; // The index of the cells in the scanline_cell_storage
+ };
+
+ //---------------------------------------------------------------
+ struct scanline_data
+ {
+ int y;
+ unsigned num_spans;
+ unsigned start_span;
+ };
+
+
+ //---------------------------------------------------------------
+ class embedded_scanline
+ {
+ public:
+
+ //-----------------------------------------------------------
+ class const_iterator
+ {
+ public:
+ struct span
+ {
+ int16 x;
+ int16 len; // If negative, it's a solid span, covers is valid
+ const T* covers;
+ };
+
+ const_iterator(const embedded_scanline& sl) :
+ m_storage(sl.m_storage),
+ m_span_idx(sl.m_scanline.start_span)
+ {
+ init_span();
+ }
+
+ const span& operator*() const { return m_span; }
+ const span* operator->() const { return &m_span; }
+
+ void operator ++ ()
+ {
+ ++m_span_idx;
+ init_span();
+ }
+
+ private:
+ void init_span()
+ {
+ const span_data& s = m_storage->span_by_index(m_span_idx);
+ m_span.x = s.x;
+ m_span.len = s.len;
+ m_span.covers = m_storage->covers_by_index(s.covers_id);
+ }
+
+ const scanline_storage_aa* m_storage;
+ unsigned m_span_idx;
+ span m_span;
+ };
+
+ friend class const_iterator;
+
+
+ //-----------------------------------------------------------
+ embedded_scanline(const scanline_storage_aa& storage) :
+ m_storage(&storage)
+ {
+ init(0);
+ }
+
+ //-----------------------------------------------------------
+ void reset(int, int) {}
+ unsigned num_spans() const { return m_scanline.num_spans; }
+ int y() const { return m_scanline.y; }
+ const_iterator begin() const { return const_iterator(*this); }
+
+ //-----------------------------------------------------------
+ void init(unsigned scanline_idx)
+ {
+ m_scanline_idx = scanline_idx;
+ m_scanline = m_storage->scanline_by_index(m_scanline_idx);
+ }
+
+ private:
+ const scanline_storage_aa* m_storage;
+ scanline_data m_scanline;
+ unsigned m_scanline_idx;
+ };
+
+
+ //---------------------------------------------------------------
+ scanline_storage_aa() :
+ m_covers(),
+ m_spans(256-2), // Block increment size
+ m_scanlines(),
+ m_min_x( 0x7FFFFFFF),
+ m_min_y( 0x7FFFFFFF),
+ m_max_x(-0x7FFFFFFF),
+ m_max_y(-0x7FFFFFFF),
+ m_cur_scanline(0)
+ {
+ m_fake_scanline.y = 0;
+ m_fake_scanline.num_spans = 0;
+ m_fake_scanline.start_span = 0;
+ m_fake_span.x = 0;
+ m_fake_span.len = 0;
+ m_fake_span.covers_id = 0;
+ }
+
+ // Renderer Interface
+ //---------------------------------------------------------------
+ void prepare(unsigned)
+ {
+ m_covers.remove_all();
+ m_scanlines.remove_all();
+ m_spans.remove_all();
+ m_min_x = 0x7FFFFFFF;
+ m_min_y = 0x7FFFFFFF;
+ m_max_x = -0x7FFFFFFF;
+ m_max_y = -0x7FFFFFFF;
+ m_cur_scanline = 0;
+ }
+
+ //---------------------------------------------------------------
+ template<class Scanline> void render(const Scanline& sl)
+ {
+ scanline_data sl_this;
+
+ int y = sl.y();
+ if(y < m_min_y) m_min_y = y;
+ if(y > m_max_y) m_max_y = y;
+
+ sl_this.y = y;
+ sl_this.num_spans = sl.num_spans();
+ sl_this.start_span = m_spans.size();
+ typename Scanline::const_iterator span_iterator = sl.begin();
+
+ unsigned num_spans = sl_this.num_spans;
+ do
+ {
+ span_data sp;
+
+ sp.x = span_iterator->x;
+ sp.len = span_iterator->len;
+ int len = abs(int(sp.len));
+ sp.covers_id =
+ m_covers.add_cells(span_iterator->covers,
+ unsigned(len));
+ m_spans.add(sp);
+ int x1 = sp.x;
+ int x2 = sp.x + len - 1;
+ if(x1 < m_min_x) m_min_x = x1;
+ if(x2 > m_max_x) m_max_x = x2;
+ ++span_iterator;
+ }
+ while(--num_spans);
+ m_scanlines.add(sl_this);
+ }
+
+
+ //---------------------------------------------------------------
+ // Iterate scanlines interface
+ int min_x() const { return m_min_x; }
+ int min_y() const { return m_min_y; }
+ int max_x() const { return m_max_x; }
+ int max_y() const { return m_max_y; }
+
+ //---------------------------------------------------------------
+ bool rewind_scanlines()
+ {
+ m_cur_scanline = 0;
+ return m_scanlines.size() > 0;
+ }
+
+
+ //---------------------------------------------------------------
+ template<class Scanline> bool sweep_scanline(Scanline& sl)
+ {
+ sl.reset_spans();
+ for(;;)
+ {
+ if(m_cur_scanline >= m_scanlines.size()) return false;
+ const scanline_data& sl_this = m_scanlines[m_cur_scanline];
+
+ unsigned num_spans = sl_this.num_spans;
+ unsigned span_idx = sl_this.start_span;
+ do
+ {
+ const span_data& sp = m_spans[span_idx++];
+ const T* covers = covers_by_index(sp.covers_id);
+ if(sp.len < 0)
+ {
+ sl.add_span(sp.x, unsigned(-sp.len), *covers);
+ }
+ else
+ {
+ sl.add_cells(sp.x, sp.len, covers);
+ }
+ }
+ while(--num_spans);
+ ++m_cur_scanline;
+ if(sl.num_spans())
+ {
+ sl.finalize(sl_this.y);
+ break;
+ }
+ }
+ return true;
+ }
+
+
+ //---------------------------------------------------------------
+ // Specialization for embedded_scanline
+ bool sweep_scanline(embedded_scanline& sl)
+ {
+ do
+ {
+ if(m_cur_scanline >= m_scanlines.size()) return false;
+ sl.init(m_cur_scanline);
+ ++m_cur_scanline;
+ }
+ while(sl.num_spans() == 0);
+ return true;
+ }
+
+ //---------------------------------------------------------------
+ unsigned byte_size() const
+ {
+ unsigned i;
+ unsigned size = sizeof(int16) * 4; // min_x, min_y, max_x, max_y
+
+ for(i = 0; i < m_scanlines.size(); ++i)
+ {
+ size += sizeof(int16) * 3; // scanline size in bytes, Y, num_spans
+
+ const scanline_data& sl_this = m_scanlines[i];
+
+ unsigned num_spans = sl_this.num_spans;
+ unsigned span_idx = sl_this.start_span;
+ do
+ {
+ const span_data& sp = m_spans[span_idx++];
+
+ size += sizeof(int16) * 2; // X, span_len
+ if(sp.len < 0)
+ {
+ size += sizeof(T); // cover
+ }
+ else
+ {
+ size += sizeof(T) * unsigned(sp.len); // covers
+ }
+ }
+ while(--num_spans);
+ }
+ return size;
+ }
+
+
+ //---------------------------------------------------------------
+ static void write_int16(int8u* dst, int16 val)
+ {
+ dst[0] = ((const int8u*)&val)[0];
+ dst[1] = ((const int8u*)&val)[1];
+ }
+
+
+ //---------------------------------------------------------------
+ void serialize(int8u* data) const
+ {
+ unsigned i;
+
+ write_int16(data, int16u(min_x())); // min_x
+ data += sizeof(int16u);
+ write_int16(data, int16u(min_y())); // min_y
+ data += sizeof(int16u);
+ write_int16(data, int16u(max_x())); // max_x
+ data += sizeof(int16u);
+ write_int16(data, int16u(max_y())); // max_y
+ data += sizeof(int16u);
+
+ for(i = 0; i < m_scanlines.size(); ++i)
+ {
+ const scanline_data& sl_this = m_scanlines[i];
+
+ int8u* size_ptr = data;
+ data += sizeof(int16); // Reserve space for scanline size in bytes
+
+ write_int16(data, int16(sl_this.y)); // Y
+ data += sizeof(int16);
+
+ write_int16(data, int16(sl_this.num_spans)); // num_spans
+ data += sizeof(int16);
+
+ unsigned num_spans = sl_this.num_spans;
+ unsigned span_idx = sl_this.start_span;
+ do
+ {
+ const span_data& sp = m_spans[span_idx++];
+ const T* covers = covers_by_index(sp.covers_id);
+
+ write_int16(data, int16(sp.x)); // X
+ data += sizeof(int16);
+
+ write_int16(data, int16(sp.len)); // span_len
+ data += sizeof(int16);
+
+ if(sp.len < 0)
+ {
+ memcpy(data, covers, sizeof(T));
+ data += sizeof(T);
+ }
+ else
+ {
+ memcpy(data, covers, unsigned(sp.len) * sizeof(T));
+ data += sizeof(T) * unsigned(sp.len);
+ }
+ }
+ while(--num_spans);
+ write_int16(size_ptr, int16(unsigned(data - size_ptr)));
+ }
+ }
+
+
+ //---------------------------------------------------------------
+ const scanline_data& scanline_by_index(unsigned i) const
+ {
+ return (i < m_scanlines.size()) ? m_scanlines[i] : m_fake_scanline;
+ }
+
+ //---------------------------------------------------------------
+ const span_data& span_by_index(unsigned i) const
+ {
+ return (i < m_spans.size()) ? m_spans[i] : m_fake_span;
+ }
+
+ //---------------------------------------------------------------
+ const T* covers_by_index(int i) const
+ {
+ return m_covers[i];
+ }
+
+ private:
+ scanline_cell_storage<T> m_covers;
+ pod_deque<span_data, 10> m_spans;
+ pod_deque<scanline_data, 8> m_scanlines;
+ span_data m_fake_span;
+ scanline_data m_fake_scanline;
+ int m_min_x;
+ int m_min_y;
+ int m_max_x;
+ int m_max_y;
+ unsigned m_cur_scanline;
+ };
+
+
+ typedef scanline_storage_aa<int8u> scanline_storage_aa8; //--------scanline_storage_aa8
+ typedef scanline_storage_aa<int16u> scanline_storage_aa16; //--------scanline_storage_aa16
+ typedef scanline_storage_aa<int32u> scanline_storage_aa32; //--------scanline_storage_aa32
+
+
+
+
+ //------------------------------------------serialized_scanlines_adaptor_aa
+ template<class T> class serialized_scanlines_adaptor_aa
+ {
+ public:
+ typedef T cover_type;
+
+ //---------------------------------------------------------------------
+ class embedded_scanline
+ {
+ public:
+ typedef T cover_type;
+
+ //-----------------------------------------------------------------
+ class const_iterator
+ {
+ public:
+ struct span
+ {
+ int16 x;
+ int16 len; // If negative, it's a solid span, "covers" is valid
+ const T* covers;
+ };
+
+ const_iterator(const embedded_scanline& sl) :
+ m_ptr(sl.m_ptr),
+ m_dx(sl.m_dx)
+ {
+ init_span();
+ }
+
+ const span& operator*() const { return m_span; }
+ const span* operator->() const { return &m_span; }
+
+ void operator ++ ()
+ {
+ if(m_span.len < 0)
+ {
+ m_ptr += sizeof(T);
+ }
+ else
+ {
+ m_ptr += m_span.len * sizeof(T);
+ }
+ init_span();
+ }
+
+ private:
+ int read_int16()
+ {
+ int16 val;
+ ((int8u*)&val)[0] = *m_ptr++;
+ ((int8u*)&val)[1] = *m_ptr++;
+ return val;
+ }
+
+ void init_span()
+ {
+ m_span.x = read_int16() + m_dx;
+ m_span.len = read_int16();
+ m_span.covers = m_ptr;
+ }
+
+ const int8u* m_ptr;
+ span m_span;
+ int m_dx;
+ };
+
+ friend class const_iterator;
+
+
+ //-----------------------------------------------------------------
+ embedded_scanline() : m_ptr(0), m_y(0), m_num_spans(0) {}
+
+ //-----------------------------------------------------------------
+ void reset(int, int) {}
+ unsigned num_spans() const { return m_num_spans; }
+ int y() const { return m_y; }
+ const_iterator begin() const { return const_iterator(*this); }
+
+
+ private:
+ //-----------------------------------------------------------------
+ int read_int16()
+ {
+ int16 val;
+ ((int8u*)&val)[0] = *m_ptr++;
+ ((int8u*)&val)[1] = *m_ptr++;
+ return val;
+ }
+
+ public:
+ //-----------------------------------------------------------------
+ void init(const int8u* ptr, int dx, int dy)
+ {
+ m_ptr = ptr;
+ m_y = read_int16() + dy;
+ m_num_spans = unsigned(read_int16());
+ m_dx = dx;
+ }
+
+ private:
+ const int8u* m_ptr;
+ int m_y;
+ unsigned m_num_spans;
+ int m_dx;
+ };
+
+
+
+ public:
+ //--------------------------------------------------------------------
+ serialized_scanlines_adaptor_aa() :
+ m_data(0),
+ m_end(0),
+ m_ptr(0),
+ m_dx(0),
+ m_dy(0),
+ m_min_x(0x7FFFFFFF),
+ m_min_y(0x7FFFFFFF),
+ m_max_x(-0x7FFFFFFF),
+ m_max_y(-0x7FFFFFFF)
+ {}
+
+ //--------------------------------------------------------------------
+ serialized_scanlines_adaptor_aa(const int8u* data, unsigned size,
+ double dx, double dy) :
+ m_data(data),
+ m_end(data + size),
+ m_ptr(data),
+ m_dx(int(floor(dx + 0.5))),
+ m_dy(int(floor(dy + 0.5))),
+ m_min_x(0x7FFFFFFF),
+ m_min_y(0x7FFFFFFF),
+ m_max_x(-0x7FFFFFFF),
+ m_max_y(-0x7FFFFFFF)
+ {}
+
+ //--------------------------------------------------------------------
+ void init(const int8u* data, unsigned size, double dx, double dy)
+ {
+ m_data = data;
+ m_end = data + size;
+ m_ptr = data;
+ m_dx = int(floor(dx + 0.5));
+ m_dy = int(floor(dy + 0.5));
+ m_min_x = 0x7FFFFFFF;
+ m_min_y = 0x7FFFFFFF;
+ m_max_x = -0x7FFFFFFF;
+ m_max_y = -0x7FFFFFFF;
+ }
+
+ private:
+ //--------------------------------------------------------------------
+ int read_int16()
+ {
+ int16 val;
+ ((int8u*)&val)[0] = *m_ptr++;
+ ((int8u*)&val)[1] = *m_ptr++;
+ return val;
+ }
+
+ //--------------------------------------------------------------------
+ unsigned read_int16u()
+ {
+ int16u val;
+ ((int8u*)&val)[0] = *m_ptr++;
+ ((int8u*)&val)[1] = *m_ptr++;
+ return val;
+ }
+
+ public:
+ // Iterate scanlines interface
+ //--------------------------------------------------------------------
+ bool rewind_scanlines()
+ {
+ m_ptr = m_data;
+ if(m_ptr < m_end)
+ {
+ m_min_x = read_int16() + m_dx;
+ m_min_y = read_int16() + m_dy;
+ m_max_x = read_int16() + m_dx;
+ m_max_y = read_int16() + m_dy;
+ return true;
+ }
+ return false;
+ }
+
+ //--------------------------------------------------------------------
+ int min_x() const { return m_min_x; }
+ int min_y() const { return m_min_y; }
+ int max_x() const { return m_max_x; }
+ int max_y() const { return m_max_y; }
+
+ //--------------------------------------------------------------------
+ template<class Scanline> bool sweep_scanline(Scanline& sl)
+ {
+ sl.reset_spans();
+ for(;;)
+ {
+ if(m_ptr >= m_end) return false;
+
+ read_int16(); // Skip scanline size in bytes
+ int y = read_int16() + m_dy;
+ unsigned num_spans = read_int16();
+
+ do
+ {
+ int x = read_int16() + m_dx;
+ int len = read_int16();
+
+ if(len < 0)
+ {
+ sl.add_span(x, unsigned(-len), *m_ptr);
+ m_ptr += sizeof(T);
+ }
+ else
+ {
+ sl.add_cells(x, len, m_ptr);
+ m_ptr += len * sizeof(T);
+ }
+ }
+ while(--num_spans);
+
+ if(sl.num_spans())
+ {
+ sl.finalize(y);
+ break;
+ }
+ }
+ return true;
+ }
+
+
+ //--------------------------------------------------------------------
+ // Specialization for embedded_scanline
+ bool sweep_scanline(embedded_scanline& sl)
+ {
+ do
+ {
+ if(m_ptr >= m_end) return false;
+
+ unsigned byte_size = read_int16u();
+ sl.init(m_ptr, m_dx, m_dy);
+ m_ptr += byte_size - sizeof(int16);
+ }
+ while(sl.num_spans() == 0);
+ return true;
+ }
+
+ private:
+ const int8u* m_data;
+ const int8u* m_end;
+ const int8u* m_ptr;
+ int m_dx;
+ int m_dy;
+ int m_min_x;
+ int m_min_y;
+ int m_max_x;
+ int m_max_y;
+ };
+
+
+
+ typedef serialized_scanlines_adaptor_aa<int8u> serialized_scanlines_adaptor_aa8; //----serialized_scanlines_adaptor_aa8
+ typedef serialized_scanlines_adaptor_aa<int16u> serialized_scanlines_adaptor_aa16; //----serialized_scanlines_adaptor_aa16
+ typedef serialized_scanlines_adaptor_aa<int32u> serialized_scanlines_adaptor_aa32; //----serialized_scanlines_adaptor_aa32
+
+}
+
+
+#endif
+
diff --git a/agg/inc/agg_scanline_storage_bin.h b/agg/inc/agg_scanline_storage_bin.h
new file mode 100755
index 000000000000..90fa50e4ee6d
--- /dev/null
+++ b/agg/inc/agg_scanline_storage_bin.h
@@ -0,0 +1,569 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+
+#ifndef AGG_SCANLINE_STORAGE_BIN_INCLUDED
+#define AGG_SCANLINE_STORAGE_BIN_INCLUDED
+
+#include <string.h>
+#include <stdlib.h>
+#include <math.h>
+#include "agg_array.h"
+#include "agg_render_scanlines.h"
+
+
+namespace agg
+{
+
+ //-----------------------------------------------scanline_storage_bin
+ class scanline_storage_bin
+ {
+ public:
+ //---------------------------------------------------------------
+ struct span_data
+ {
+ int16 x;
+ int16 len;
+ };
+
+ //---------------------------------------------------------------
+ struct scanline_data
+ {
+ int y;
+ unsigned num_spans;
+ unsigned start_span;
+ };
+
+
+ //---------------------------------------------------------------
+ class embedded_scanline
+ {
+ public:
+
+ //-----------------------------------------------------------
+ class const_iterator
+ {
+ public:
+ const_iterator(const embedded_scanline& sl) :
+ m_storage(sl.m_storage),
+ m_span_idx(sl.m_scanline.start_span)
+ {
+ m_span = m_storage->span_by_index(m_span_idx);
+ }
+
+ const span_data& operator*() const { return m_span; }
+ const span_data* operator->() const { return &m_span; }
+
+ void operator ++ ()
+ {
+ ++m_span_idx;
+ m_span = m_storage->span_by_index(m_span_idx);
+ }
+
+ private:
+ const scanline_storage_bin* m_storage;
+ unsigned m_span_idx;
+ span_data m_span;
+ };
+
+ friend class const_iterator;
+
+
+ //-----------------------------------------------------------
+ embedded_scanline(const scanline_storage_bin& storage) :
+ m_storage(&storage)
+ {
+ setup(0);
+ }
+
+ //-----------------------------------------------------------
+ void reset(int, int) {}
+ unsigned num_spans() const { return m_scanline.num_spans; }
+ int y() const { return m_scanline.y; }
+ const_iterator begin() const { return const_iterator(*this); }
+
+ //-----------------------------------------------------------
+ void setup(unsigned scanline_idx)
+ {
+ m_scanline_idx = scanline_idx;
+ m_scanline = m_storage->scanline_by_index(m_scanline_idx);
+ }
+
+ private:
+ const scanline_storage_bin* m_storage;
+ scanline_data m_scanline;
+ unsigned m_scanline_idx;
+ };
+
+
+ //---------------------------------------------------------------
+ scanline_storage_bin() :
+ m_spans(256-2), // Block increment size
+ m_scanlines(),
+ m_min_x( 0x7FFFFFFF),
+ m_min_y( 0x7FFFFFFF),
+ m_max_x(-0x7FFFFFFF),
+ m_max_y(-0x7FFFFFFF),
+ m_cur_scanline(0)
+ {
+ m_fake_scanline.y = 0;
+ m_fake_scanline.num_spans = 0;
+ m_fake_scanline.start_span = 0;
+ m_fake_span.x = 0;
+ m_fake_span.len = 0;
+ }
+
+ // Renderer Interface
+ //---------------------------------------------------------------
+ void prepare(unsigned)
+ {
+ m_scanlines.remove_all();
+ m_spans.remove_all();
+ m_min_x = 0x7FFFFFFF;
+ m_min_y = 0x7FFFFFFF;
+ m_max_x = -0x7FFFFFFF;
+ m_max_y = -0x7FFFFFFF;
+ m_cur_scanline = 0;
+ }
+
+ //---------------------------------------------------------------
+ template<class Scanline> void render(const Scanline& sl)
+ {
+ scanline_data sl_this;
+
+ int y = sl.y();
+ if(y < m_min_y) m_min_y = y;
+ if(y > m_max_y) m_max_y = y;
+
+ sl_this.y = y;
+ sl_this.num_spans = sl.num_spans();
+ sl_this.start_span = m_spans.size();
+ typename Scanline::const_iterator span_iterator = sl.begin();
+
+ unsigned num_spans = sl_this.num_spans;
+ do
+ {
+ span_data sp;
+ sp.x = span_iterator->x;
+ sp.len = (int16)abs((int)(span_iterator->len));
+ m_spans.add(sp);
+ int x1 = sp.x;
+ int x2 = sp.x + sp.len - 1;
+ if(x1 < m_min_x) m_min_x = x1;
+ if(x2 > m_max_x) m_max_x = x2;
+ ++span_iterator;
+ }
+ while(--num_spans);
+ m_scanlines.add(sl_this);
+ }
+
+
+ //---------------------------------------------------------------
+ // Iterate scanlines interface
+ int min_x() const { return m_min_x; }
+ int min_y() const { return m_min_y; }
+ int max_x() const { return m_max_x; }
+ int max_y() const { return m_max_y; }
+
+ //---------------------------------------------------------------
+ bool rewind_scanlines()
+ {
+ m_cur_scanline = 0;
+ return m_scanlines.size() > 0;
+ }
+
+
+ //---------------------------------------------------------------
+ template<class Scanline> bool sweep_scanline(Scanline& sl)
+ {
+ sl.reset_spans();
+ for(;;)
+ {
+ if(m_cur_scanline >= m_scanlines.size()) return false;
+ const scanline_data& sl_this = m_scanlines[m_cur_scanline];
+
+ unsigned num_spans = sl_this.num_spans;
+ unsigned span_idx = sl_this.start_span;
+ do
+ {
+ const span_data& sp = m_spans[span_idx++];
+ sl.add_span(sp.x, sp.len, cover_full);
+ }
+ while(--num_spans);
+
+ ++m_cur_scanline;
+ if(sl.num_spans())
+ {
+ sl.finalize(sl_this.y);
+ break;
+ }
+ }
+ return true;
+ }
+
+
+ //---------------------------------------------------------------
+ // Specialization for embedded_scanline
+ bool sweep_scanline(embedded_scanline& sl)
+ {
+ do
+ {
+ if(m_cur_scanline >= m_scanlines.size()) return false;
+ sl.setup(m_cur_scanline);
+ ++m_cur_scanline;
+ }
+ while(sl.num_spans() == 0);
+ return true;
+ }
+
+
+ //---------------------------------------------------------------
+ unsigned byte_size() const
+ {
+ unsigned i;
+ unsigned size = sizeof(int16) * 4; // min_x, min_y, max_x, max_y
+
+ for(i = 0; i < m_scanlines.size(); ++i)
+ {
+ size += sizeof(int16) * 2 + // Y, num_spans
+ unsigned(m_scanlines[i].num_spans) * sizeof(int16) * 2; // X, span_len
+ }
+ return size;
+ }
+
+
+ //---------------------------------------------------------------
+ static void write_int16(int8u* dst, int16 val)
+ {
+ dst[0] = ((const int8u*)&val)[0];
+ dst[1] = ((const int8u*)&val)[1];
+ }
+
+
+ //---------------------------------------------------------------
+ void serialize(int8u* data) const
+ {
+ unsigned i;
+
+ write_int16(data, int16u(min_x())); // min_x
+ data += sizeof(int16u);
+ write_int16(data, int16u(min_y())); // min_y
+ data += sizeof(int16u);
+ write_int16(data, int16u(max_x())); // max_x
+ data += sizeof(int16u);
+ write_int16(data, int16u(max_y())); // max_y
+ data += sizeof(int16u);
+
+ for(i = 0; i < m_scanlines.size(); ++i)
+ {
+ const scanline_data& sl_this = m_scanlines[i];
+
+ write_int16(data, int16(sl_this.y)); // Y
+ data += sizeof(int16);
+
+ write_int16(data, int16(sl_this.num_spans)); // num_spans
+ data += sizeof(int16);
+
+ unsigned num_spans = sl_this.num_spans;
+ unsigned span_idx = sl_this.start_span;
+ do
+ {
+ const span_data& sp = m_spans[span_idx++];
+
+ write_int16(data, int16(sp.x)); // X
+ data += sizeof(int16);
+
+ write_int16(data, int16(sp.len)); // len
+ data += sizeof(int16);
+ }
+ while(--num_spans);
+ }
+ }
+
+
+ //---------------------------------------------------------------
+ const scanline_data& scanline_by_index(unsigned i) const
+ {
+ return (i < m_scanlines.size()) ? m_scanlines[i] : m_fake_scanline;
+ }
+
+ //---------------------------------------------------------------
+ const span_data& span_by_index(unsigned i) const
+ {
+ return (i < m_spans.size()) ? m_spans[i] : m_fake_span;
+ }
+
+
+ private:
+ pod_deque<span_data, 10> m_spans;
+ pod_deque<scanline_data, 8> m_scanlines;
+ span_data m_fake_span;
+ scanline_data m_fake_scanline;
+ int m_min_x;
+ int m_min_y;
+ int m_max_x;
+ int m_max_y;
+ unsigned m_cur_scanline;
+ };
+
+
+
+
+
+
+
+
+
+
+
+
+
+ //---------------------------------------serialized_scanlines_adaptor_bin
+ class serialized_scanlines_adaptor_bin
+ {
+ public:
+ typedef bool cover_type;
+
+ //--------------------------------------------------------------------
+ class embedded_scanline
+ {
+ public:
+
+ //----------------------------------------------------------------
+ class const_iterator
+ {
+ public:
+ struct span
+ {
+ int16 x;
+ int16 len;
+ };
+
+ const_iterator(const embedded_scanline& sl) :
+ m_ptr(sl.m_ptr),
+ m_dx(sl.m_dx)
+ {
+ m_span.x = read_int16() + m_dx;
+ m_span.len = read_int16();
+ }
+
+ const span& operator*() const { return m_span; }
+ const span* operator->() const { return &m_span; }
+
+ void operator ++ ()
+ {
+ m_span.x = read_int16() + m_dx;
+ m_span.len = read_int16();
+ }
+
+ private:
+ int read_int16()
+ {
+ int16 val;
+ ((int8u*)&val)[0] = *m_ptr++;
+ ((int8u*)&val)[1] = *m_ptr++;
+ return val;
+ }
+
+ const int8u* m_ptr;
+ span m_span;
+ int m_dx;
+ };
+
+ friend class const_iterator;
+
+
+ //----------------------------------------------------------------
+ embedded_scanline() : m_ptr(0), m_y(0), m_num_spans(0) {}
+
+ //----------------------------------------------------------------
+ void reset(int, int) {}
+ unsigned num_spans() const { return m_num_spans; }
+ int y() const { return m_y; }
+ const_iterator begin() const { return const_iterator(*this); }
+
+
+ private:
+ //----------------------------------------------------------------
+ int read_int16()
+ {
+ int16 val;
+ ((int8u*)&val)[0] = *m_ptr++;
+ ((int8u*)&val)[1] = *m_ptr++;
+ return val;
+ }
+
+ public:
+ //----------------------------------------------------------------
+ void init(const int8u* ptr, int dx, int dy)
+ {
+ m_ptr = ptr;
+ m_y = read_int16() + dy;
+ m_num_spans = unsigned(read_int16());
+ m_dx = dx;
+ }
+
+ private:
+ const int8u* m_ptr;
+ int m_y;
+ unsigned m_num_spans;
+ int m_dx;
+ };
+
+
+
+ public:
+ //--------------------------------------------------------------------
+ serialized_scanlines_adaptor_bin() :
+ m_data(0),
+ m_end(0),
+ m_ptr(0),
+ m_dx(0),
+ m_dy(0),
+ m_min_x(0x7FFFFFFF),
+ m_min_y(0x7FFFFFFF),
+ m_max_x(-0x7FFFFFFF),
+ m_max_y(-0x7FFFFFFF)
+ {}
+
+ //--------------------------------------------------------------------
+ serialized_scanlines_adaptor_bin(const int8u* data, unsigned size,
+ double dx, double dy) :
+ m_data(data),
+ m_end(data + size),
+ m_ptr(data),
+ m_dx(int(floor(dx + 0.5))),
+ m_dy(int(floor(dy + 0.5))),
+ m_min_x(0x7FFFFFFF),
+ m_min_y(0x7FFFFFFF),
+ m_max_x(-0x7FFFFFFF),
+ m_max_y(-0x7FFFFFFF)
+ {}
+
+ //--------------------------------------------------------------------
+ void init(const int8u* data, unsigned size, double dx, double dy)
+ {
+ m_data = data;
+ m_end = data + size;
+ m_ptr = data;
+ m_dx = int(floor(dx + 0.5));
+ m_dy = int(floor(dy + 0.5));
+ m_min_x = 0x7FFFFFFF;
+ m_min_y = 0x7FFFFFFF;
+ m_max_x = -0x7FFFFFFF;
+ m_max_y = -0x7FFFFFFF;
+ }
+
+ private:
+ //--------------------------------------------------------------------
+ int read_int16()
+ {
+ int16 val;
+ ((int8u*)&val)[0] = *m_ptr++;
+ ((int8u*)&val)[1] = *m_ptr++;
+ return val;
+ }
+
+ public:
+ // Iterate scanlines interface
+ //--------------------------------------------------------------------
+ bool rewind_scanlines()
+ {
+ m_ptr = m_data;
+ if(m_ptr < m_end)
+ {
+ m_min_x = read_int16() + m_dx;
+ m_min_y = read_int16() + m_dy;
+ m_max_x = read_int16() + m_dx;
+ m_max_y = read_int16() + m_dy;
+ return true;
+ }
+ return false;
+ }
+
+ //--------------------------------------------------------------------
+ int min_x() const { return m_min_x; }
+ int min_y() const { return m_min_y; }
+ int max_x() const { return m_max_x; }
+ int max_y() const { return m_max_y; }
+
+ //--------------------------------------------------------------------
+ template<class Scanline> bool sweep_scanline(Scanline& sl)
+ {
+ sl.reset_spans();
+ for(;;)
+ {
+ if(m_ptr >= m_end) return false;
+
+ int y = read_int16() + m_dy;
+ unsigned num_spans = read_int16();
+
+ do
+ {
+ int x = read_int16() + m_dx;
+ int len = read_int16();
+
+ if(len < 0) len = -len;
+ sl.add_span(x, unsigned(len), cover_full);
+ }
+ while(--num_spans);
+
+ if(sl.num_spans())
+ {
+ sl.finalize(y);
+ break;
+ }
+ }
+ return true;
+ }
+
+
+ //--------------------------------------------------------------------
+ // Specialization for embedded_scanline
+ bool sweep_scanline(embedded_scanline& sl)
+ {
+ do
+ {
+ if(m_ptr >= m_end) return false;
+
+ sl.init(m_ptr, m_dx, m_dy);
+
+ // Jump to the next scanline
+ //--------------------------
+ read_int16(); // Y
+ int num_spans = read_int16(); // num_spans
+ m_ptr += num_spans * sizeof(int16) * 2;
+ }
+ while(sl.num_spans() == 0);
+ return true;
+ }
+
+ private:
+ const int8u* m_data;
+ const int8u* m_end;
+ const int8u* m_ptr;
+ int m_dx;
+ int m_dy;
+ int m_min_x;
+ int m_min_y;
+ int m_max_x;
+ int m_max_y;
+ };
+
+
+
+}
+
+#endif
+
diff --git a/agg/inc/agg_scanline_u.h b/agg/inc/agg_scanline_u.h
new file mode 100755
index 000000000000..749c5b3c0054
--- /dev/null
+++ b/agg/inc/agg_scanline_u.h
@@ -0,0 +1,323 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+
+#ifndef AGG_SCANLINE_U_INCLUDED
+#define AGG_SCANLINE_U_INCLUDED
+
+#include <string.h>
+#include "agg_basics.h"
+
+namespace agg
+{
+ //==============================================================scanline_u
+ //
+ // Unpacked scanline container class
+ //
+ // This class is used to transfer data from a scanline rastyerizer
+ // to the rendering buffer. It's organized very simple. The class stores
+ // information of horizontal spans to render it into a pixel-map buffer.
+ // Each span has staring X, length, and an array of bytes that determine the
+ // cover-values for each pixel.
+ // Before using this class you should know the minimal and maximal pixel
+ // coordinates of your scanline. The protocol of using is:
+ // 1. reset(min_x, max_x)
+ // 2. add_cell() / add_span() - accumulate scanline.
+ // When forming one scanline the next X coordinate must be always greater
+ // than the last stored one, i.e. it works only with ordered coordinates.
+ // 3. Call finalize(y) and render the scanline.
+ // 3. Call reset_spans() to prepare for the new scanline.
+ //
+ // 4. Rendering:
+ //
+ // Scanline provides an iterator class that allows you to extract
+ // the spans and the cover values for each pixel. Be aware that clipping
+ // has not been done yet, so you should perform it yourself.
+ // Use scanline_u8::iterator to render spans:
+ //-------------------------------------------------------------------------
+ //
+ // int y = sl.y(); // Y-coordinate of the scanline
+ //
+ // ************************************
+ // ...Perform vertical clipping here...
+ // ************************************
+ //
+ // scanline_u8::const_iterator span = sl.begin();
+ //
+ // unsigned char* row = m_rbuf->row(y); // The the address of the beginning
+ // // of the current row
+ //
+ // unsigned num_spans = sl.num_spans(); // Number of spans. It's guaranteed that
+ // // num_spans is always greater than 0.
+ //
+ // do
+ // {
+ // const scanline_u8::cover_type* covers =
+ // span->covers; // The array of the cover values
+ //
+ // int num_pix = span->len; // Number of pixels of the span.
+ // // Always greater than 0, still it's
+ // // better to use "int" instead of
+ // // "unsigned" because it's more
+ // // convenient for clipping
+ // int x = span->x;
+ //
+ // **************************************
+ // ...Perform horizontal clipping here...
+ // ...you have x, covers, and pix_count..
+ // **************************************
+ //
+ // unsigned char* dst = row + x; // Calculate the start address of the row.
+ // // In this case we assume a simple
+ // // grayscale image 1-byte per pixel.
+ // do
+ // {
+ // *dst++ = *covers++; // Hypotetical rendering.
+ // }
+ // while(--num_pix);
+ //
+ // ++span;
+ // }
+ // while(--num_spans); // num_spans cannot be 0, so this loop is quite safe
+ //------------------------------------------------------------------------
+ //
+ // The question is: why should we accumulate the whole scanline when we
+ // could render just separate spans when they're ready?
+ // That's because using the scaline is generally faster. When is consists
+ // of more than one span the conditions for the processor cash system
+ // are better, because switching between two different areas of memory
+ // (that can be very large) occures less frequently.
+ //------------------------------------------------------------------------
+ template<class T> class scanline_u
+ {
+ public:
+ typedef T cover_type;
+
+ //--------------------------------------------------------------------
+ struct span
+ {
+ int16 x;
+ int16 len;
+ cover_type* covers;
+ };
+
+ typedef span* iterator;
+ typedef const span* const_iterator;
+
+ //--------------------------------------------------------------------
+ ~scanline_u();
+ scanline_u();
+
+ void reset(int min_x, int max_x);
+ void add_cell(int x, unsigned cover);
+ void add_cells(int x, unsigned len, const T* covers);
+ void add_span(int x, unsigned len, unsigned cover);
+ void finalize(int y) { m_y = y; }
+ void reset_spans();
+
+ int y() const { return m_y; }
+ unsigned num_spans() const { return unsigned(m_cur_span - m_spans); }
+ const_iterator begin() const { return m_spans + 1; }
+ iterator begin() { return m_spans + 1; }
+
+ private:
+ scanline_u<T>(const scanline_u<T>&);
+ const scanline_u<T>& operator = (const scanline_u<T>&);
+
+ private:
+ int m_min_x;
+ unsigned m_max_len;
+ int m_last_x;
+ int m_y;
+ cover_type* m_covers;
+ span* m_spans;
+ span* m_cur_span;
+ };
+
+
+
+ //------------------------------------------------------------------------
+ template<class T> scanline_u<T>::~scanline_u()
+ {
+ delete [] m_spans;
+ delete [] m_covers;
+ }
+
+
+ //------------------------------------------------------------------------
+ template<class T> scanline_u<T>::scanline_u() :
+ m_min_x(0),
+ m_max_len(0),
+ m_last_x(0x7FFFFFF0),
+ m_covers(0),
+ m_spans(0),
+ m_cur_span(0)
+ {
+ }
+
+
+ //------------------------------------------------------------------------
+ template<class T> void scanline_u<T>::reset(int min_x, int max_x)
+ {
+ unsigned max_len = max_x - min_x + 2;
+ if(max_len > m_max_len)
+ {
+ delete [] m_spans;
+ delete [] m_covers;
+ m_covers = new cover_type [max_len];
+ m_spans = new span [max_len];
+ m_max_len = max_len;
+ }
+ m_last_x = 0x7FFFFFF0;
+ m_min_x = min_x;
+ m_cur_span = m_spans;
+ }
+
+
+ //------------------------------------------------------------------------
+ template<class T> inline void scanline_u<T>::reset_spans()
+ {
+ m_last_x = 0x7FFFFFF0;
+ m_cur_span = m_spans;
+ }
+
+
+ //------------------------------------------------------------------------
+ template<class T> inline void scanline_u<T>::add_cell(int x, unsigned cover)
+ {
+ x -= m_min_x;
+ m_covers[x] = (unsigned char)cover;
+ if(x == m_last_x+1)
+ {
+ m_cur_span->len++;
+ }
+ else
+ {
+ m_cur_span++;
+ m_cur_span->x = (int16)(x + m_min_x);
+ m_cur_span->len = 1;
+ m_cur_span->covers = m_covers + x;
+ }
+ m_last_x = x;
+ }
+
+
+ //------------------------------------------------------------------------
+ template<class T> void scanline_u<T>::add_cells(int x, unsigned len, const T* covers)
+ {
+ x -= m_min_x;
+ memcpy(m_covers + x, covers, len * sizeof(T));
+ if(x == m_last_x+1)
+ {
+ m_cur_span->len += (int16)len;
+ }
+ else
+ {
+ m_cur_span++;
+ m_cur_span->x = (int16)(x + m_min_x);
+ m_cur_span->len = (int16)len;
+ m_cur_span->covers = m_covers + x;
+ }
+ m_last_x = x + len - 1;
+ }
+
+
+ //------------------------------------------------------------------------
+ template<class T> void scanline_u<T>::add_span(int x, unsigned len, unsigned cover)
+ {
+ x -= m_min_x;
+ memset(m_covers + x, cover, len);
+ if(x == m_last_x+1)
+ {
+ m_cur_span->len += (int16)len;
+ }
+ else
+ {
+ m_cur_span++;
+ m_cur_span->x = (int16)(x + m_min_x);
+ m_cur_span->len = (int16)len;
+ m_cur_span->covers = m_covers + x;
+ }
+ m_last_x = x + len - 1;
+ }
+
+
+ //=============================================================scanline_u8
+ typedef scanline_u<int8u> scanline_u8;
+
+ //============================================================scanline_u16
+ typedef scanline_u<int16u> scanline_u16;
+
+ //============================================================scanline_u32
+ typedef scanline_u<int32u> scanline_u32;
+
+
+ //=============================================================scanline_am
+ //
+ // The scanline container with alpha-masking
+ //
+ //------------------------------------------------------------------------
+ template<class AlphaMask, class CoverT>
+ class scanline_am : public scanline_u<CoverT>
+ {
+ public:
+ typedef AlphaMask alpha_mask_type;
+ typedef CoverT cover_type;
+ typedef scanline_u<CoverT> scanline_type;
+
+ scanline_am() : scanline_type(), m_alpha_mask(0) {}
+ scanline_am(const AlphaMask& am) : scanline_type(), m_alpha_mask(&am) {}
+
+ //--------------------------------------------------------------------
+ void finalize(int span_y)
+ {
+ scanline_u<CoverT>::finalize(span_y);
+ if(m_alpha_mask)
+ {
+ typename scanline_type::iterator span = scanline_type::begin();
+ unsigned count = scanline_type::num_spans();
+ do
+ {
+ m_alpha_mask->combine_hspan(span->x,
+ scanline_type::y(),
+ span->covers,
+ span->len);
+ ++span;
+ }
+ while(--count);
+ }
+ }
+
+ private:
+ const AlphaMask* m_alpha_mask;
+ };
+
+
+ //==========================================================scanline_u8_am
+ template<class AlphaMask>
+ class scanline_u8_am : public scanline_am<AlphaMask, int8u>
+ {
+ public:
+ typedef AlphaMask alpha_mask_type;
+ typedef int8u cover_type;
+ typedef scanline_am<alpha_mask_type, cover_type> self_type;
+
+ scanline_u8_am() : self_type() {}
+ scanline_u8_am(const AlphaMask& am) : self_type(am) {}
+ };
+
+}
+
+#endif
+
diff --git a/agg/inc/agg_shorten_path.h b/agg/inc/agg_shorten_path.h
new file mode 100755
index 000000000000..271d2a7ec572
--- /dev/null
+++ b/agg/inc/agg_shorten_path.h
@@ -0,0 +1,66 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+
+#ifndef AGG_SHORTEN_PATH_INCLUDED
+#define AGG_SHORTEN_PATH_INCLUDED
+
+#include "agg_basics.h"
+#include "agg_vertex_sequence.h"
+
+namespace agg
+{
+
+ //===========================================================shorten_path
+ template<class VertexSequence>
+ void shorten_path(VertexSequence& vs, double s, unsigned closed = 0)
+ {
+ typedef typename VertexSequence::value_type vertex_type;
+
+ if(s > 0.0 && vs.size() > 1)
+ {
+ double d;
+ int n = int(vs.size() - 2);
+ while(n)
+ {
+ d = vs[n].dist;
+ if(d > s) break;
+ vs.remove_last();
+ s -= d;
+ --n;
+ }
+ if(vs.size() < 2)
+ {
+ vs.remove_all();
+ }
+ else
+ {
+ n = vs.size() - 1;
+ vertex_type& prev = vs[n-1];
+ vertex_type& last = vs[n];
+ d = (prev.dist - s) / prev.dist;
+ double x = prev.x + (last.x - prev.x) * d;
+ double y = prev.y + (last.y - prev.y) * d;
+ last.x = x;
+ last.y = y;
+ if(!prev(last)) vs.remove_last();
+ vs.close(closed != 0);
+ }
+ }
+ }
+
+
+}
+
+#endif
diff --git a/agg/inc/agg_simul_eq.h b/agg/inc/agg_simul_eq.h
new file mode 100755
index 000000000000..f52662e82926
--- /dev/null
+++ b/agg/inc/agg_simul_eq.h
@@ -0,0 +1,147 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// Solving simultaneous equations
+//
+//----------------------------------------------------------------------------
+#ifndef AGG_SIMUL_EQ_INCLUDED
+#define AGG_SIMUL_EQ_INCLUDED
+
+#include <math.h>
+#include "agg_basics.h"
+
+namespace agg
+{
+
+ //=============================================================swap_arrays
+ template<class T> void swap_arrays(T* a1, T* a2, unsigned n)
+ {
+ unsigned i;
+ for(i = 0; i < n; i++)
+ {
+ T tmp = *a1;
+ *a1++ = *a2;
+ *a2++ = tmp;
+ }
+ }
+
+
+ //============================================================matrix_pivot
+ template<unsigned Rows, unsigned Cols>
+ struct matrix_pivot
+ {
+ static int pivot(double m[Rows][Cols], unsigned row)
+ {
+ int k = int(row);
+ double max_val, tmp;
+
+ max_val = -1.0;
+ unsigned i;
+ for(i = row; i < Rows; i++)
+ {
+ if((tmp = fabs(m[i][row])) > max_val && tmp != 0.0)
+ {
+ max_val = tmp;
+ k = i;
+ }
+ }
+
+ if(m[k][row] == 0.0)
+ {
+ return -1;
+ }
+
+ if(k != int(row))
+ {
+ swap_arrays(m[k], m[row], Cols);
+ return k;
+ }
+ return 0;
+ }
+ };
+
+
+
+ //===============================================================simul_eq
+ template<unsigned Size, unsigned RightCols>
+ struct simul_eq
+ {
+ static bool solve(const double left[Size][Size],
+ const double right[Size][RightCols],
+ double result[Size][RightCols])
+ {
+ unsigned i, j, k;
+ double a1;
+
+ double tmp[Size][Size + RightCols];
+
+ for(i = 0; i < Size; i++)
+ {
+ for(j = 0; j < Size; j++)
+ {
+ tmp[i][j] = left[i][j];
+ }
+ for(j = 0; j < RightCols; j++)
+ {
+ tmp[i][Size + j] = right[i][j];
+ }
+ }
+
+ for(k = 0; k < Size; k++)
+ {
+ if(matrix_pivot<Size, Size + RightCols>::pivot(tmp, k) < 0)
+ {
+ return false; // Singularity....
+ }
+
+ a1 = tmp[k][k];
+
+ for(j = k; j < Size + RightCols; j++)
+ {
+ tmp[k][j] /= a1;
+ }
+
+ for(i = k + 1; i < Size; i++)
+ {
+ a1 = tmp[i][k];
+ for (j = k; j < Size + RightCols; j++)
+ {
+ tmp[i][j] -= a1 * tmp[k][j];
+ }
+ }
+ }
+
+
+ for(k = 0; k < RightCols; k++)
+ {
+ int m;
+ for(m = int(Size - 1); m >= 0; m--)
+ {
+ result[m][k] = tmp[m][Size + k];
+ for(j = m + 1; j < Size; j++)
+ {
+ result[m][k] -= tmp[m][j] * result[j][k];
+ }
+ }
+ }
+ return true;
+ }
+
+ };
+
+
+}
+
+#endif
diff --git a/agg/inc/agg_span_allocator.h b/agg/inc/agg_span_allocator.h
new file mode 100755
index 000000000000..d99c5b9d8936
--- /dev/null
+++ b/agg/inc/agg_span_allocator.h
@@ -0,0 +1,72 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+
+#ifndef AGG_SPAN_ALLOCATOR_INCLUDED
+#define AGG_SPAN_ALLOCATOR_INCLUDED
+
+#include "agg_basics.h"
+
+namespace agg
+{
+ //----------------------------------------------------------span_allocator
+ template<class ColorT> class span_allocator
+ {
+ public:
+ typedef ColorT color_type;
+
+ //--------------------------------------------------------------------
+ ~span_allocator()
+ {
+ delete [] m_span;
+ }
+
+ //--------------------------------------------------------------------
+ span_allocator() :
+ m_max_span_len(0),
+ m_span(0)
+ {
+ }
+
+ //--------------------------------------------------------------------
+ color_type* allocate(unsigned max_span_len)
+ {
+ if(max_span_len > m_max_span_len)
+ {
+ delete [] m_span;
+ m_span = new color_type[m_max_span_len = max_span_len];
+ }
+ return m_span;
+ }
+
+ //--------------------------------------------------------------------
+ color_type* span()
+ {
+ return m_span;
+ }
+
+ private:
+ //--------------------------------------------------------------------
+ span_allocator(const span_allocator<ColorT>&);
+ const span_allocator<ColorT>& operator = (const span_allocator<ColorT>&);
+
+ unsigned m_max_span_len;
+ color_type* m_span;
+ };
+}
+
+
+#endif
+
+
diff --git a/agg/inc/agg_span_converter.h b/agg/inc/agg_span_converter.h
new file mode 100755
index 000000000000..104cd7d8e73e
--- /dev/null
+++ b/agg/inc/agg_span_converter.h
@@ -0,0 +1,53 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+
+#ifndef AGG_SPAN_CONVERTER_INCLUDED
+#define AGG_SPAN_CONVERTER_INCLUDED
+
+#include "agg_basics.h"
+
+namespace agg
+{
+ //----------------------------------------------------------span_converter
+ template<class SpanGenerator, class Conv> class span_converter
+ {
+ public:
+ typedef typename SpanGenerator::color_type color_type;
+
+ span_converter(SpanGenerator& span_gen, Conv& conv) :
+ m_span_gen(&span_gen), m_conv(&conv) {}
+
+ //--------------------------------------------------------------------
+ void prepare(unsigned max_span_len)
+ {
+ m_span_gen->prepare(max_span_len);
+ }
+
+ //--------------------------------------------------------------------
+ color_type* generate(int x, int y, unsigned len)
+ {
+ color_type* span = m_span_gen->generate(x, y, len);
+ m_conv->convert(span, x, y, len);
+ return span;
+ }
+
+ private:
+ SpanGenerator* m_span_gen;
+ Conv* m_conv;
+ };
+
+}
+
+#endif
diff --git a/agg/inc/agg_span_generator.h b/agg/inc/agg_span_generator.h
new file mode 100755
index 000000000000..82b0ebef95f3
--- /dev/null
+++ b/agg/inc/agg_span_generator.h
@@ -0,0 +1,50 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+
+#ifndef AGG_SPAN_GENERATOR_INCLUDED
+#define AGG_SPAN_GENERATOR_INCLUDED
+
+#include "agg_basics.h"
+#include "agg_span_allocator.h"
+
+namespace agg
+{
+
+ //==========================================================span_generator
+ template<class ColorT, class Allocator> class span_generator
+ {
+ public:
+ typedef ColorT color_type;
+ typedef Allocator alloc_type;
+
+ //--------------------------------------------------------------------
+ span_generator(alloc_type& alloc) : m_alloc(&alloc) {}
+
+ //--------------------------------------------------------------------
+ void allocator(alloc_type& alloc) { m_alloc = &alloc; }
+ alloc_type& allocator() { return *m_alloc; }
+
+ //--------------------------------------------------------------------
+ void prepare(unsigned max_span_len)
+ {
+ m_alloc->allocate(max_span_len);
+ }
+
+ private:
+ alloc_type* m_alloc;
+ };
+}
+
+#endif
diff --git a/agg/inc/agg_span_gouraud.h b/agg/inc/agg_span_gouraud.h
new file mode 100755
index 000000000000..76747899b5fc
--- /dev/null
+++ b/agg/inc/agg_span_gouraud.h
@@ -0,0 +1,180 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+
+#ifndef AGG_SPAN_GOURAUD_INCLUDED
+#define AGG_SPAN_GOURAUD_INCLUDED
+
+#include "agg_basics.h"
+#include "agg_math.h"
+#include "agg_span_generator.h"
+
+namespace agg
+{
+
+ //============================================================span_gouraud
+ template<class ColorT, class Allocator>
+ class span_gouraud : public span_generator<ColorT, Allocator>
+ {
+ public:
+ typedef ColorT color_type;
+ typedef Allocator alloc_type;
+
+ struct coord_type
+ {
+ double x;
+ double y;
+ color_type color;
+ };
+
+ //--------------------------------------------------------------------
+ span_gouraud(alloc_type& alloc) :
+ span_generator<color_type, alloc_type>(alloc),
+ m_vertex(0)
+ {
+ m_cmd[0] = path_cmd_stop;
+ }
+
+ //--------------------------------------------------------------------
+ span_gouraud(alloc_type& alloc,
+ const color_type& c1,
+ const color_type& c2,
+ const color_type& c3,
+ double x1, double y1,
+ double x2, double y2,
+ double x3, double y3,
+ double d) :
+ span_generator<color_type, alloc_type>(alloc)
+ {
+ colors(c1, c2, c3);
+ triangle(x1, y1, x2, y2, x3, y3, d);
+ }
+
+ //--------------------------------------------------------------------
+ void colors(ColorT c1, ColorT c2, ColorT c3)
+ {
+ m_coord[0].color = c1;
+ m_coord[1].color = c2;
+ m_coord[2].color = c3;
+ }
+
+ //--------------------------------------------------------------------
+ // Sets the triangle and dilates it if needed.
+ // The trick here is to calculate beveled joins in the vertices of the
+ // triangle and render it as a 6-vertex polygon.
+ // It's necessary to achieve numerical stability.
+ // However, the coordinates to interpolate colors are calculated
+ // as miter joins (calc_intersection).
+ void triangle(double x1, double y1,
+ double x2, double y2,
+ double x3, double y3,
+ double d)
+ {
+ m_coord[0].x = m_x[0] = x1;
+ m_coord[0].y = m_y[0] = y1;
+ m_coord[1].x = m_x[1] = x2;
+ m_coord[1].y = m_y[1] = y2;
+ m_coord[2].x = m_x[2] = x3;
+ m_coord[2].y = m_y[2] = y3;
+ m_cmd[0] = path_cmd_move_to;
+ m_cmd[1] = path_cmd_line_to;
+ m_cmd[2] = path_cmd_line_to;
+ m_cmd[3] = path_cmd_stop;
+
+ if(d != 0.0)
+ {
+ dilate_triangle(m_coord[0].x, m_coord[0].y,
+ m_coord[1].x, m_coord[1].y,
+ m_coord[2].x, m_coord[2].y,
+ m_x, m_y, d);
+
+ calc_intersection(m_x[4], m_y[4], m_x[5], m_y[5],
+ m_x[0], m_y[0], m_x[1], m_y[1],
+ &m_coord[0].x, &m_coord[0].y);
+
+ calc_intersection(m_x[0], m_y[0], m_x[1], m_y[1],
+ m_x[2], m_y[2], m_x[3], m_y[3],
+ &m_coord[1].x, &m_coord[1].y);
+
+ calc_intersection(m_x[2], m_y[2], m_x[3], m_y[3],
+ m_x[4], m_y[4], m_x[5], m_y[5],
+ &m_coord[2].x, &m_coord[2].y);
+ m_cmd[3] = path_cmd_line_to;
+ m_cmd[4] = path_cmd_line_to;
+ m_cmd[5] = path_cmd_line_to;
+ m_cmd[6] = path_cmd_stop;
+ }
+ }
+
+ //--------------------------------------------------------------------
+ // Vertex Source Interface to feed the coordinates to the rasterizer
+ void rewind(unsigned)
+ {
+ m_vertex = 0;
+ }
+
+ //--------------------------------------------------------------------
+ unsigned vertex(double* x, double* y)
+ {
+ *x = m_x[m_vertex];
+ *y = m_y[m_vertex];
+ return m_cmd[m_vertex++];
+ }
+
+
+
+ protected:
+ //--------------------------------------------------------------------
+ void arrange_vertices(coord_type* coord) const
+ {
+ coord[0] = m_coord[0];
+ coord[1] = m_coord[1];
+ coord[2] = m_coord[2];
+
+ if(m_coord[0].y > m_coord[2].y)
+ {
+ coord[0] = m_coord[2];
+ coord[2] = m_coord[0];
+ }
+
+ coord_type tmp;
+ if(coord[0].y > coord[1].y)
+ {
+ tmp = coord[1];
+ coord[1] = coord[0];
+ coord[0] = tmp;
+ }
+
+ if(coord[1].y > coord[2].y)
+ {
+ tmp = coord[2];
+ coord[2] = coord[1];
+ coord[1] = tmp;
+ }
+ }
+
+
+ private:
+ //--------------------------------------------------------------------
+ coord_type m_coord[3];
+ double m_x[8];
+ double m_y[8];
+ unsigned m_cmd[8];
+ unsigned m_vertex;
+ };
+
+}
+
+#endif
+
diff --git a/agg/inc/agg_span_gouraud_gray.h b/agg/inc/agg_span_gouraud_gray.h
new file mode 100755
index 000000000000..caf288919e93
--- /dev/null
+++ b/agg/inc/agg_span_gouraud_gray.h
@@ -0,0 +1,185 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// Adaptation for high precision colors has been sponsored by
+// Liberty Technology Systems, Inc., visit http://lib-sys.com
+//
+// Liberty Technology Systems, Inc. is the provider of
+// PostScript and PDF technology for software developers.
+//
+//----------------------------------------------------------------------------
+
+#ifndef AGG_SPAN_GOURAUD_GRAY_INCLUDED
+#define AGG_SPAN_GOURAUD_GRAY_INCLUDED
+
+#include "agg_basics.h"
+#include "agg_color_gray.h"
+#include "agg_dda_line.h"
+#include "agg_span_gouraud.h"
+
+namespace agg
+{
+
+ //=======================================================span_gouraud_gray
+ template<class ColorT, class Allocator = span_allocator<ColorT> >
+ class span_gouraud_gray : public span_gouraud<ColorT, Allocator>
+ {
+ public:
+ typedef Allocator alloc_type;
+ typedef ColorT color_type;
+ typedef typename color_type::value_type value_type;
+ typedef span_gouraud<color_type, alloc_type> base_type;
+ typedef typename base_type::coord_type coord_type;
+
+ private:
+ //--------------------------------------------------------------------
+ struct gray_calc
+ {
+ void init(const coord_type& c1, const coord_type& c2)
+ {
+ m_x1 = c1.x;
+ m_y1 = c1.y;
+ m_dx = c2.x - c1.x;
+ m_dy = 1.0 / (c2.y - c1.y);
+ m_v1 = c1.color.v;
+ m_a1 = c1.color.a;
+ m_dv = c2.color.v - m_v1;
+ m_da = c2.color.a - m_a1;
+ }
+
+ void calc(int y)
+ {
+ double k = 0.0;
+ if(y > m_y1) k = (y - m_y1) * m_dy;
+ gray8 c;
+ m_v = m_v1 + int(m_dv * k);
+ m_a = m_a1 + int(m_da * k);
+ m_x = int(m_x1 + m_dx * k);
+ }
+
+ double m_x1;
+ double m_y1;
+ double m_dx;
+ double m_dy;
+ int m_v1;
+ int m_a1;
+ int m_dv;
+ int m_da;
+ int m_v;
+ int m_a;
+ int m_x;
+ };
+
+
+ public:
+ //--------------------------------------------------------------------
+ span_gouraud_gray(alloc_type& alloc) : base_type(alloc) {}
+
+ //--------------------------------------------------------------------
+ span_gouraud_gray(alloc_type& alloc,
+ const color_type& c1,
+ const color_type& c2,
+ const color_type& c3,
+ double x1, double y1,
+ double x2, double y2,
+ double x3, double y3,
+ double d = 0) :
+ base_type(alloc, c1, c2, c3, x1, y1, x2, y2, x3, y3, d)
+ {}
+
+ //--------------------------------------------------------------------
+ void prepare(unsigned max_span_len)
+ {
+ base_type::prepare(max_span_len);
+
+ coord_type coord[3];
+ arrange_vertices(coord);
+
+ m_y2 = int(coord[1].y);
+
+ m_swap = calc_point_location(coord[0].x, coord[0].y,
+ coord[2].x, coord[2].y,
+ coord[1].x, coord[1].y) < 0.0;
+
+ m_c1.init(coord[0], coord[2]);
+ m_c2.init(coord[0], coord[1]);
+ m_c3.init(coord[1], coord[2]);
+ }
+
+ //--------------------------------------------------------------------
+ color_type* generate(int x, int y, unsigned len)
+ {
+ m_c1.calc(y);
+ const gray_calc* pc1 = &m_c1;
+ const gray_calc* pc2 = &m_c2;
+
+ if(y < m_y2)
+ {
+ m_c2.calc(y+1);
+ }
+ else
+ {
+ m_c3.calc(y);
+ pc2 = &m_c3;
+ }
+
+ if(m_swap)
+ {
+ const gray_calc* t = pc2;
+ pc2 = pc1;
+ pc1 = t;
+ }
+
+ int nx = pc1->m_x;
+ unsigned nlen = pc2->m_x - pc1->m_x + 1;
+
+ if(nlen < len) nlen = len;
+
+ dda_line_interpolator<14> v(pc1->m_v, pc2->m_v, nlen);
+ dda_line_interpolator<14> a(pc1->m_a, pc2->m_a, nlen);
+
+ if(nx < x)
+ {
+ unsigned d = unsigned(x - nx);
+ v += d;
+ a += d;
+ }
+
+ color_type* span = base_type::allocator().span();
+ do
+ {
+ span->v = (value_type)v.y();
+ span->a = (value_type)a.y();
+ ++v;
+ ++a;
+ ++span;
+ }
+ while(--len);
+ return base_type::allocator().span();
+ }
+
+
+ private:
+ bool m_swap;
+ int m_y2;
+ gray_calc m_c1;
+ gray_calc m_c2;
+ gray_calc m_c3;
+ };
+
+
+}
+
+#endif
diff --git a/agg/inc/agg_span_gouraud_rgba.h b/agg/inc/agg_span_gouraud_rgba.h
new file mode 100755
index 000000000000..75679a9426c2
--- /dev/null
+++ b/agg/inc/agg_span_gouraud_rgba.h
@@ -0,0 +1,206 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// Adaptation for high precision colors has been sponsored by
+// Liberty Technology Systems, Inc., visit http://lib-sys.com
+//
+// Liberty Technology Systems, Inc. is the provider of
+// PostScript and PDF technology for software developers.
+//
+//----------------------------------------------------------------------------
+
+#ifndef AGG_SPAN_GOURAUD_RGBA_INCLUDED
+#define AGG_SPAN_GOURAUD_RGBA_INCLUDED
+
+#include "agg_basics.h"
+#include "agg_color_rgba.h"
+#include "agg_dda_line.h"
+#include "agg_span_gouraud.h"
+
+namespace agg
+{
+
+ //=======================================================span_gouraud_rgba
+ template<class ColorT, class Allocator = span_allocator<ColorT> >
+ class span_gouraud_rgba : public span_gouraud<ColorT, Allocator>
+ {
+ public:
+ typedef Allocator alloc_type;
+ typedef ColorT color_type;
+ typedef typename ColorT::value_type value_type;
+ typedef span_gouraud<color_type, alloc_type> base_type;
+ typedef typename base_type::coord_type coord_type;
+
+ private:
+ //--------------------------------------------------------------------
+ struct rgba_calc
+ {
+ void init(const coord_type& c1, const coord_type& c2)
+ {
+ m_x1 = c1.x;
+ m_y1 = c1.y;
+ m_dx = c2.x - c1.x;
+ m_dy = 1.0 / (c2.y - c1.y);
+ m_r1 = c1.color.r;
+ m_g1 = c1.color.g;
+ m_b1 = c1.color.b;
+ m_a1 = c1.color.a;
+ m_dr = c2.color.r - m_r1;
+ m_dg = c2.color.g - m_g1;
+ m_db = c2.color.b - m_b1;
+ m_da = c2.color.a - m_a1;
+ }
+
+ void calc(int y)
+ {
+ double k = 0.0;
+ if(y > m_y1) k = (y - m_y1) * m_dy;
+ color_type rgba;
+ m_r = m_r1 + int(m_dr * k);
+ m_g = m_g1 + int(m_dg * k);
+ m_b = m_b1 + int(m_db * k);
+ m_a = m_a1 + int(m_da * k);
+ m_x = int(m_x1 + m_dx * k);
+ }
+
+ double m_x1;
+ double m_y1;
+ double m_dx;
+ double m_dy;
+ int m_r1;
+ int m_g1;
+ int m_b1;
+ int m_a1;
+ int m_dr;
+ int m_dg;
+ int m_db;
+ int m_da;
+ int m_r;
+ int m_g;
+ int m_b;
+ int m_a;
+ int m_x;
+ };
+
+ public:
+
+ //--------------------------------------------------------------------
+ span_gouraud_rgba(alloc_type& alloc) : base_type(alloc) {}
+
+ //--------------------------------------------------------------------
+ span_gouraud_rgba(alloc_type& alloc,
+ const color_type& c1,
+ const color_type& c2,
+ const color_type& c3,
+ double x1, double y1,
+ double x2, double y2,
+ double x3, double y3,
+ double d = 0) :
+ base_type(alloc, c1, c2, c3, x1, y1, x2, y2, x3, y3, d)
+ {}
+
+ //--------------------------------------------------------------------
+ void prepare(unsigned max_span_len)
+ {
+ base_type::prepare(max_span_len);
+
+ coord_type coord[3];
+ arrange_vertices(coord);
+
+ m_y2 = int(coord[1].y);
+
+ m_swap = calc_point_location(coord[0].x, coord[0].y,
+ coord[2].x, coord[2].y,
+ coord[1].x, coord[1].y) < 0.0;
+
+ m_rgba1.init(coord[0], coord[2]);
+ m_rgba2.init(coord[0], coord[1]);
+ m_rgba3.init(coord[1], coord[2]);
+ }
+
+ //--------------------------------------------------------------------
+ color_type* generate(int x, int y, unsigned len)
+ {
+ m_rgba1.calc(y);
+ const rgba_calc* pc1 = &m_rgba1;
+ const rgba_calc* pc2 = &m_rgba2;
+
+ if(y < m_y2)
+ {
+ m_rgba2.calc(y+1);
+ }
+ else
+ {
+ m_rgba3.calc(y);
+ pc2 = &m_rgba3;
+ }
+
+ if(m_swap)
+ {
+ const rgba_calc* t = pc2;
+ pc2 = pc1;
+ pc1 = t;
+ }
+
+ int nx = pc1->m_x;
+ unsigned nlen = pc2->m_x - pc1->m_x + 1;
+
+ if(nlen < len) nlen = len;
+
+ dda_line_interpolator<14> r(pc1->m_r, pc2->m_r, nlen);
+ dda_line_interpolator<14> g(pc1->m_g, pc2->m_g, nlen);
+ dda_line_interpolator<14> b(pc1->m_b, pc2->m_b, nlen);
+ dda_line_interpolator<14> a(pc1->m_a, pc2->m_a, nlen);
+
+ if(nx < x)
+ {
+ unsigned d = unsigned(x - nx);
+ r += d;
+ g += d;
+ b += d;
+ a += d;
+ }
+
+ color_type* span = base_type::allocator().span();
+ do
+ {
+ span->r = (value_type)r.y();
+ span->g = (value_type)g.y();
+ span->b = (value_type)b.y();
+ span->a = (value_type)a.y();
+ ++r;
+ ++g;
+ ++b;
+ ++a;
+ ++span;
+ }
+ while(--len);
+ return base_type::allocator().span();
+ }
+
+
+ private:
+ bool m_swap;
+ int m_y2;
+ rgba_calc m_rgba1;
+ rgba_calc m_rgba2;
+ rgba_calc m_rgba3;
+ };
+
+
+
+}
+
+#endif
diff --git a/agg/inc/agg_span_gradient.h b/agg/inc/agg_span_gradient.h
new file mode 100755
index 000000000000..6bac1c652a84
--- /dev/null
+++ b/agg/inc/agg_span_gradient.h
@@ -0,0 +1,422 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+
+#ifndef AGG_SPAN_GRADIENT_INCLUDED
+#define AGG_SPAN_GRADIENT_INCLUDED
+
+#include <math.h>
+#include <stdlib.h>
+#include <string.h>
+#include "agg_basics.h"
+#include "agg_span_generator.h"
+#include "agg_math.h"
+#include "agg_array.h"
+
+
+namespace agg
+{
+
+ enum
+ {
+ gradient_subpixel_shift = 4, //-----gradient_subpixel_shift
+ gradient_subpixel_size = 1 << gradient_subpixel_shift, //-----gradient_subpixel_size
+ gradient_subpixel_mask = gradient_subpixel_size - 1 //-----gradient_subpixel_mask
+ };
+
+
+
+ //==========================================================span_gradient
+ template<class ColorT,
+ class Interpolator,
+ class GradientF,
+ class ColorF,
+ class Allocator = span_allocator<ColorT> >
+ class span_gradient : public span_generator<ColorT, Allocator>
+ {
+ public:
+ typedef Interpolator interpolator_type;
+ typedef Allocator alloc_type;
+ typedef ColorT color_type;
+ typedef span_generator<color_type, alloc_type> base_type;
+
+ enum
+ {
+ downscale_shift = interpolator_type::subpixel_shift -
+ gradient_subpixel_shift
+ };
+
+ //--------------------------------------------------------------------
+ span_gradient(alloc_type& alloc) : base_type(alloc) {}
+
+ //--------------------------------------------------------------------
+ span_gradient(alloc_type& alloc,
+ interpolator_type& inter,
+ const GradientF& gradient_function_,
+ const ColorF& color_function_,
+ double d1_, double d2_) :
+ base_type(alloc),
+ m_interpolator(&inter),
+ m_gradient_function(&gradient_function_),
+ m_color_function(&color_function_),
+ m_d1(int(d1_ * gradient_subpixel_size)),
+ m_d2(int(d2_ * gradient_subpixel_size))
+ {}
+
+ //--------------------------------------------------------------------
+ interpolator_type& interpolator() { return *m_interpolator; }
+ const GradientF& gradient_function() const { return *m_gradient_function; }
+ const ColorF& color_function() const { return *m_color_function; }
+ double d1() const { return double(m_d1) / gradient_subpixel_size; }
+ double d2() const { return double(m_d2) / gradient_subpixel_size; }
+
+ //--------------------------------------------------------------------
+ void interpolator(interpolator_type& i) { m_interpolator = &i; }
+ void gradient_function(const GradientF& gf) { m_gradient_function = &gf; }
+ void color_function(const ColorF& cf) { m_color_function = &cf; }
+ void d1(double v) { m_d1 = int(v * gradient_subpixel_size); }
+ void d2(double v) { m_d2 = int(v * gradient_subpixel_size); }
+
+ //--------------------------------------------------------------------
+ color_type* generate(int x, int y, unsigned len)
+ {
+ color_type* span = base_type::allocator().span();
+ int dd = m_d2 - m_d1;
+ if(dd < 1) dd = 1;
+ m_interpolator->begin(x+0.5, y+0.5, len);
+ do
+ {
+ m_interpolator->coordinates(&x, &y);
+ int d = m_gradient_function->calculate(x >> downscale_shift,
+ y >> downscale_shift, dd);
+ d = ((d - m_d1) * (int)m_color_function->size()) / dd;
+ if(d < 0) d = 0;
+ if(d >= (int)m_color_function->size()) d = m_color_function->size() - 1;
+ *span++ = (*m_color_function)[d];
+ ++(*m_interpolator);
+ }
+ while(--len);
+ return base_type::allocator().span();
+ }
+
+ private:
+ interpolator_type* m_interpolator;
+ const GradientF* m_gradient_function;
+ const ColorF* m_color_function;
+ int m_d1;
+ int m_d2;
+ };
+
+
+
+
+ //=====================================================gradient_linear_color
+ template<class ColorT>
+ struct gradient_linear_color
+ {
+ typedef ColorT color_type;
+
+ gradient_linear_color() {}
+ gradient_linear_color(const color_type& c1, const color_type& c2,
+ unsigned size = 256) :
+ m_c1(c1), m_c2(c2), m_size(size) {}
+
+ unsigned size() const { return m_size; }
+ color_type operator [] (unsigned v) const
+ {
+ return m_c1.gradient(m_c2, double(v) / double(m_size - 1));
+ }
+
+ void colors(const color_type& c1, const color_type& c2, unsigned size = 256)
+ {
+ m_c1 = c1;
+ m_c2 = c2;
+ m_size = size;
+ }
+
+ color_type m_c1;
+ color_type m_c2;
+ unsigned m_size;
+ };
+
+
+ //==========================================================gradient_circle
+ class gradient_circle
+ {
+ // Actually the same as radial. Just for compatibility
+ public:
+ static AGG_INLINE int calculate(int x, int y, int)
+ {
+ return int(fast_sqrt(x*x + y*y));
+ }
+ };
+
+
+ //==========================================================gradient_radial
+ class gradient_radial
+ {
+ public:
+ static AGG_INLINE int calculate(int x, int y, int)
+ {
+ return int(fast_sqrt(x*x + y*y));
+ }
+ };
+
+
+ //========================================================gradient_radial_d
+ class gradient_radial_d
+ {
+ public:
+ static AGG_INLINE int calculate(int x, int y, int)
+ {
+ return int(sqrt(double(x)*double(x) + double(y)*double(y)));
+ }
+ };
+
+
+ //====================================================gradient_radial_focus
+ class gradient_radial_focus
+ {
+ public:
+ //---------------------------------------------------------------------
+ gradient_radial_focus() :
+ m_radius(100 * gradient_subpixel_size),
+ m_focus_x(0),
+ m_focus_y(0)
+ {
+ update_values();
+ }
+
+ //---------------------------------------------------------------------
+ gradient_radial_focus(double r, double fx, double fy) :
+ m_radius (int(r * gradient_subpixel_size)),
+ m_focus_x(int(fx * gradient_subpixel_size)),
+ m_focus_y(int(fy * gradient_subpixel_size))
+ {
+ update_values();
+ }
+
+ //---------------------------------------------------------------------
+ void init(double r, double fx, double fy)
+ {
+ m_radius = int(r * gradient_subpixel_size);
+ m_focus_x = int(fx * gradient_subpixel_size);
+ m_focus_y = int(fy * gradient_subpixel_size);
+ update_values();
+ }
+
+ //---------------------------------------------------------------------
+ double radius() const { return double(m_radius) / gradient_subpixel_size; }
+ double focus_x() const { return double(m_focus_x) / gradient_subpixel_size; }
+ double focus_y() const { return double(m_focus_y) / gradient_subpixel_size; }
+
+ //---------------------------------------------------------------------
+ int calculate(int x, int y, int d) const
+ {
+ double solution_x;
+ double solution_y;
+
+ // Special case to avoid divide by zero or very near zero
+ //---------------------------------
+ if(x == int(m_focus_x))
+ {
+ solution_x = m_focus_x;
+ solution_y = 0.0;
+ solution_y += (y > m_focus_y) ? m_trivial : -m_trivial;
+ }
+ else
+ {
+ // Slope of the focus-current line
+ //-------------------------------
+ double slope = double(y - m_focus_y) / double(x - m_focus_x);
+
+ // y-intercept of that same line
+ //--------------------------------
+ double yint = double(y) - (slope * x);
+
+ // Use the classical quadratic formula to calculate
+ // the intersection point
+ //--------------------------------
+ double a = (slope * slope) + 1;
+ double b = 2 * slope * yint;
+ double c = yint * yint - m_radius2;
+ double det = sqrt((b * b) - (4.0 * a * c));
+ solution_x = -b;
+
+ // Choose the positive or negative root depending
+ // on where the X coord lies with respect to the focus.
+ solution_x += (x < m_focus_x) ? -det : det;
+ solution_x /= 2.0 * a;
+
+ // Calculating of Y is trivial
+ solution_y = (slope * solution_x) + yint;
+ }
+
+ // Calculate the percentage (0...1) of the current point along the
+ // focus-circumference line and return the normalized (0...d) value
+ //-------------------------------
+ solution_x -= double(m_focus_x);
+ solution_y -= double(m_focus_y);
+ double int_to_focus = solution_x * solution_x + solution_y * solution_y;
+ double cur_to_focus = double(x - m_focus_x) * double(x - m_focus_x) +
+ double(y - m_focus_y) * double(y - m_focus_y);
+
+ return int(sqrt(cur_to_focus / int_to_focus) * d);
+ }
+
+ private:
+ //---------------------------------------------------------------------
+ void update_values()
+ {
+ // For use in the quadractic equation
+ //-------------------------------
+ m_radius2 = double(m_radius) * double(m_radius);
+
+ double dist = sqrt(double(m_focus_x) * double(m_focus_x) +
+ double(m_focus_y) * double(m_focus_y));
+
+ // Test if distance from focus to center is greater than the radius
+ // For the sake of assurance factor restrict the point to be
+ // no further than 99% of the radius.
+ //-------------------------------
+ double r = m_radius * 0.99;
+ if(dist > r)
+ {
+ // clamp focus to radius
+ // x = r cos theta, y = r sin theta
+ //------------------------
+ double a = atan2(double(m_focus_y), double(m_focus_x));
+ m_focus_x = int(r * cos(a));
+ m_focus_y = int(r * sin(a));
+ }
+
+ // Calculate the solution to be used in the case where x == focus_x
+ //------------------------------
+ m_trivial = sqrt(m_radius2 - (m_focus_x * m_focus_x));
+ }
+
+ int m_radius;
+ int m_focus_x;
+ int m_focus_y;
+ double m_radius2;
+ double m_trivial;
+ };
+
+
+
+ //==============================================================gradient_x
+ class gradient_x
+ {
+ public:
+ static int calculate(int x, int, int) { return x; }
+ };
+
+
+ //==============================================================gradient_y
+ class gradient_y
+ {
+ public:
+ static int calculate(int, int y, int) { return y; }
+ };
+
+
+ //========================================================gradient_diamond
+ class gradient_diamond
+ {
+ public:
+ static AGG_INLINE int calculate(int x, int y, int)
+ {
+ int ax = abs(x);
+ int ay = abs(y);
+ return ax > ay ? ax : ay;
+ }
+ };
+
+
+ //=============================================================gradient_xy
+ class gradient_xy
+ {
+ public:
+ static AGG_INLINE int calculate(int x, int y, int d)
+ {
+ return abs(x) * abs(y) / d;
+ }
+ };
+
+
+ //========================================================gradient_sqrt_xy
+ class gradient_sqrt_xy
+ {
+ public:
+ static AGG_INLINE int calculate(int x, int y, int)
+ {
+ return fast_sqrt(abs(x) * abs(y));
+ }
+ };
+
+
+ //==========================================================gradient_conic
+ class gradient_conic
+ {
+ public:
+ static AGG_INLINE int calculate(int x, int y, int d)
+ {
+ return int(fabs(atan2(double(y), double(x))) * double(d) / pi);
+ }
+ };
+
+
+ //=================================================gradient_repeat_adaptor
+ template<class GradientF> class gradient_repeat_adaptor
+ {
+ public:
+ gradient_repeat_adaptor(const GradientF& gradient) :
+ m_gradient(&gradient) {}
+
+ AGG_INLINE int calculate(int x, int y, int d) const
+ {
+ int ret = m_gradient->calculate(x, y, d) % d;
+ if(ret < 0) ret += d;
+ return ret;
+ }
+
+ private:
+ const GradientF* m_gradient;
+ };
+
+
+ //================================================gradient_reflect_adaptor
+ template<class GradientF> class gradient_reflect_adaptor
+ {
+ public:
+ gradient_reflect_adaptor(const GradientF& gradient) :
+ m_gradient(&gradient) {}
+
+ AGG_INLINE int calculate(int x, int y, int d) const
+ {
+ int d2 = d << 1;
+ int ret = m_gradient->calculate(x, y, d) % d2;
+ if(ret < 0) ret += d2;
+ if(ret >= d) ret = d2 - ret;
+ return ret;
+ }
+
+ private:
+ const GradientF* m_gradient;
+ };
+
+
+}
+
+#endif
diff --git a/agg/inc/agg_span_gradient_alpha.h b/agg/inc/agg_span_gradient_alpha.h
new file mode 100755
index 000000000000..b1444ed8c4bc
--- /dev/null
+++ b/agg/inc/agg_span_gradient_alpha.h
@@ -0,0 +1,123 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+
+#ifndef AGG_SPAN_GRADIENT_ALPHA_INCLUDED
+#define AGG_SPAN_GRADIENT_ALPHA_INCLUDED
+
+#include "agg_span_gradient.h"
+
+namespace agg
+{
+ //======================================================span_gradient_alpha
+ template<class ColorT,
+ class Interpolator,
+ class GradientF,
+ class AlphaF>
+ class span_gradient_alpha
+ {
+ public:
+ typedef Interpolator interpolator_type;
+ typedef ColorT color_type;
+ typedef typename color_type::value_type alpha_type;
+
+ enum
+ {
+ downscale_shift = interpolator_type::subpixel_shift - gradient_subpixel_shift
+ };
+
+
+ //--------------------------------------------------------------------
+ span_gradient_alpha() {}
+
+ //--------------------------------------------------------------------
+ span_gradient_alpha(interpolator_type& inter,
+ const GradientF& gradient_function,
+ const AlphaF& alpha_function,
+ double d1, double d2) :
+ m_interpolator(&inter),
+ m_gradient_function(&gradient_function),
+ m_alpha_function(&alpha_function),
+ m_d1(int(d1 * gradient_subpixel_size)),
+ m_d2(int(d2 * gradient_subpixel_size))
+ {}
+
+ //--------------------------------------------------------------------
+ interpolator_type& interpolator() { return *m_interpolator; }
+ const GradientF& gradient_function() const { return *m_gradient_function; }
+ const AlphaF& alpha_function() const { return *m_alpha_function; }
+ double d1() const { return double(m_d1) / gradient_subpixel_size; }
+ double d2() const { return double(m_d2) / gradient_subpixel_size; }
+
+ //--------------------------------------------------------------------
+ void interpolator(interpolator_type& i) { m_interpolator = &i; }
+ void gradient_function(const GradientF& gf) { m_gradient_function = &gf; }
+ void alpha_function(const AlphaF& af) { m_alpha_function = &af; }
+ void d1(double v) { m_d1 = int(v * gradient_subpixel_size); }
+ void d2(double v) { m_d2 = int(v * gradient_subpixel_size); }
+
+ //--------------------------------------------------------------------
+ void convert(color_type* span, int x, int y, unsigned len)
+ {
+ int dd = m_d2 - m_d1;
+ if(dd < 1) dd = 1;
+ m_interpolator->begin(x+0.5, y+0.5, len);
+ do
+ {
+ m_interpolator->coordinates(&x, &y);
+ int d = m_gradient_function->calculate(x >> downscale_shift,
+ y >> downscale_shift, dd);
+ d = ((d - m_d1) * (int)m_alpha_function->size()) / dd;
+ if(d < 0) d = 0;
+ if(d >= (int)m_alpha_function->size()) d = m_alpha_function->size() - 1;
+ span->a = (*m_alpha_function)[d];
+ ++span;
+ ++(*m_interpolator);
+ }
+ while(--len);
+ }
+
+ private:
+ interpolator_type* m_interpolator;
+ const GradientF* m_gradient_function;
+ const AlphaF* m_alpha_function;
+ int m_d1;
+ int m_d2;
+ };
+
+
+ //=======================================================gradient_alpha_x
+ template<class ColorT> struct gradient_alpha_x
+ {
+ typedef typename ColorT::value_type alpha_type;
+ alpha_type operator [] (alpha_type x) const { return x; }
+ };
+
+ //====================================================gradient_alpha_x_u8
+ struct gradient_alpha_x_u8
+ {
+ typedef int8u alpha_type;
+ alpha_type operator [] (alpha_type x) const { return x; }
+ };
+
+ //==========================================gradient_alpha_one_munus_x_u8
+ struct gradient_alpha_one_munus_x_u8
+ {
+ typedef int8u alpha_type;
+ alpha_type operator [] (alpha_type x) const { return 255-x; }
+ };
+
+}
+
+#endif
diff --git a/agg/inc/agg_span_image_filter.h b/agg/inc/agg_span_image_filter.h
new file mode 100755
index 000000000000..34163bb29f24
--- /dev/null
+++ b/agg/inc/agg_span_image_filter.h
@@ -0,0 +1,110 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// Image transformations with filtering. Span generator base class
+//
+//----------------------------------------------------------------------------
+#ifndef AGG_SPAN_IMAGE_FILTER_INCLUDED
+#define AGG_SPAN_IMAGE_FILTER_INCLUDED
+
+#include "agg_basics.h"
+#include "agg_image_filters.h"
+#include "agg_rendering_buffer.h"
+#include "agg_span_generator.h"
+
+
+namespace agg
+{
+
+ //--------------------------------------------------span_image_filter
+ template<class ColorT, class Interpolator, class Allocator>
+ class span_image_filter : public span_generator<ColorT, Allocator>
+ {
+ public:
+ typedef ColorT color_type;
+ typedef Allocator alloc_type;
+ typedef Interpolator interpolator_type;
+ typedef span_generator<color_type, alloc_type> base_type;
+
+ //----------------------------------------------------------------
+ span_image_filter(alloc_type& alloc) :
+ span_generator<color_type, alloc_type>(alloc)
+ {}
+
+ //----------------------------------------------------------------
+ span_image_filter(alloc_type& alloc,
+ const rendering_buffer& src,
+ const color_type& back_color,
+ interpolator_type& interpolator_,
+ const image_filter_lut* filter_) :
+ span_generator<color_type, alloc_type>(alloc),
+ m_src(&src),
+ m_back_color(back_color),
+ m_interpolator(&interpolator_),
+ m_filter(filter_),
+ m_dx_dbl(0.5),
+ m_dy_dbl(0.5),
+ m_dx_int(image_subpixel_size / 2),
+ m_dy_int(image_subpixel_size / 2)
+ {}
+
+ //----------------------------------------------------------------
+ const rendering_buffer& source_image() const { return *m_src; }
+ const color_type& background_color() const { return m_back_color; }
+ const image_filter_lut& filter() const { return *m_filter; }
+ int filter_dx_int() const { return m_dx_int; }
+ int filter_dy_int() const { return m_dy_int; }
+ double filter_dx_dbl() const { return m_dx_dbl; }
+ double filter_dy_dbl() const { return m_dy_dbl; }
+
+ //----------------------------------------------------------------
+ void source_image(const rendering_buffer& v) { m_src = &v; }
+ void background_color(const color_type& v) { m_back_color = v; }
+ void interpolator(interpolator_type& v) { m_interpolator = &v; }
+ void filter(const image_filter_lut& v) { m_filter = &v; }
+ void filter_offset(double dx, double dy)
+ {
+ m_dx_dbl = dx;
+ m_dy_dbl = dy;
+ m_dx_int = int(dx * image_subpixel_size);
+ m_dy_int = int(dy * image_subpixel_size);
+ }
+ void filter_offset(double d) { filter_offset(d, d); }
+
+ //----------------------------------------------------------------
+ interpolator_type& interpolator() { return *m_interpolator; }
+
+ //--------------------------------------------------------------------
+ void prepare(unsigned max_span_len)
+ {
+ base_type::prepare(max_span_len);
+ }
+
+ //----------------------------------------------------------------
+ private:
+ const rendering_buffer* m_src;
+ color_type m_back_color;
+ interpolator_type* m_interpolator;
+ const image_filter_lut* m_filter;
+ double m_dx_dbl;
+ double m_dy_dbl;
+ unsigned m_dx_int;
+ unsigned m_dy_int;
+ };
+
+
+}
+
+#endif
diff --git a/agg/inc/agg_span_image_filter_gray.h b/agg/inc/agg_span_image_filter_gray.h
new file mode 100755
index 000000000000..3f7ae6fcfa72
--- /dev/null
+++ b/agg/inc/agg_span_image_filter_gray.h
@@ -0,0 +1,701 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// Adaptation for high precision colors has been sponsored by
+// Liberty Technology Systems, Inc., visit http://lib-sys.com
+//
+// Liberty Technology Systems, Inc. is the provider of
+// PostScript and PDF technology for software developers.
+//
+//----------------------------------------------------------------------------
+
+#ifndef AGG_SPAN_IMAGE_FILTER_GRAY_INCLUDED
+#define AGG_SPAN_IMAGE_FILTER_GRAY_INCLUDED
+
+#include "agg_basics.h"
+#include "agg_color_gray.h"
+#include "agg_span_image_filter.h"
+
+
+namespace agg
+{
+
+
+ //==============================================span_image_filter_gray_nn
+ template<class ColorT,
+ class Interpolator,
+ class Allocator = span_allocator<ColorT> >
+ class span_image_filter_gray_nn :
+ public span_image_filter<ColorT, Interpolator, Allocator>
+ {
+ public:
+ typedef ColorT color_type;
+ typedef Interpolator interpolator_type;
+ typedef Allocator alloc_type;
+ typedef span_image_filter<color_type, interpolator_type, alloc_type> base_type;
+ typedef typename color_type::value_type value_type;
+ typedef typename color_type::calc_type calc_type;
+ enum
+ {
+ base_shift = color_type::base_shift,
+ base_mask = color_type::base_mask
+ };
+
+ //--------------------------------------------------------------------
+ span_image_filter_gray_nn(alloc_type& alloc) : base_type(alloc) {}
+
+ //--------------------------------------------------------------------
+ span_image_filter_gray_nn(alloc_type& alloc,
+ const rendering_buffer& src,
+ const color_type& back_color,
+ interpolator_type& inter) :
+ base_type(alloc, src, back_color, inter, 0)
+ {}
+
+ //--------------------------------------------------------------------
+ color_type* generate(int x, int y, unsigned len)
+ {
+ base_type::interpolator().begin(x + base_type::filter_dx_dbl(),
+ y + base_type::filter_dy_dbl(), len);
+
+ calc_type fg;
+ calc_type src_alpha;
+
+ color_type* span = base_type::allocator().span();
+
+ int maxx = base_type::source_image().width() - 1;
+ int maxy = base_type::source_image().height() - 1;
+
+ do
+ {
+ base_type::interpolator().coordinates(&x, &y);
+
+ x >>= image_subpixel_shift;
+ y >>= image_subpixel_shift;
+
+ if(x >= 0 && y >= 0 &&
+ x <= maxx && y <= maxy)
+ {
+ fg = *((const value_type*)base_type::source_image().row(y) + x);
+ src_alpha = base_mask;
+ }
+ else
+ {
+ fg = base_type::background_color().v;
+ src_alpha = base_type::background_color().a;
+ }
+
+ span->v = (value_type)fg;
+ span->a = (value_type)src_alpha;
+ ++span;
+ ++base_type::interpolator();
+
+ } while(--len);
+
+ return base_type::allocator().span();
+ }
+ };
+
+
+
+
+ //========================================span_image_filter_gray_bilinear
+ template<class ColorT,
+ class Interpolator,
+ class Allocator = span_allocator<ColorT> >
+ class span_image_filter_gray_bilinear :
+ public span_image_filter<ColorT, Interpolator, Allocator>
+ {
+ public:
+ typedef ColorT color_type;
+ typedef Interpolator interpolator_type;
+ typedef Allocator alloc_type;
+ typedef span_image_filter<color_type, interpolator_type, alloc_type> base_type;
+ typedef typename color_type::value_type value_type;
+ typedef typename color_type::calc_type calc_type;
+ enum
+ {
+ base_shift = color_type::base_shift,
+ base_mask = color_type::base_mask
+ };
+
+ //--------------------------------------------------------------------
+ span_image_filter_gray_bilinear(alloc_type& alloc) : base_type(alloc) {}
+
+ //--------------------------------------------------------------------
+ span_image_filter_gray_bilinear(alloc_type& alloc,
+ const rendering_buffer& src,
+ const color_type& back_color,
+ interpolator_type& inter) :
+ base_type(alloc, src, back_color, inter, 0)
+ {}
+
+ //--------------------------------------------------------------------
+ color_type* generate(int x, int y, unsigned len)
+ {
+ base_type::interpolator().begin(x + base_type::filter_dx_dbl(),
+ y + base_type::filter_dy_dbl(), len);
+ calc_type fg;
+ calc_type src_alpha;
+ value_type back_v = base_type::background_color().v;
+ value_type back_a = base_type::background_color().a;
+
+ const value_type *fg_ptr;
+
+ color_type* span = base_type::allocator().span();
+
+ int maxx = base_type::source_image().width() - 1;
+ int maxy = base_type::source_image().height() - 1;
+
+ do
+ {
+ int x_hr;
+ int y_hr;
+
+ base_type::interpolator().coordinates(&x_hr, &y_hr);
+
+ x_hr -= base_type::filter_dx_int();
+ y_hr -= base_type::filter_dy_int();
+
+ int x_lr = x_hr >> image_subpixel_shift;
+ int y_lr = y_hr >> image_subpixel_shift;
+
+ if(x_lr >= 0 && y_lr >= 0 &&
+ x_lr < maxx && y_lr < maxy)
+ {
+ fg = image_subpixel_size * image_subpixel_size / 2;
+
+ x_hr &= image_subpixel_mask;
+ y_hr &= image_subpixel_mask;
+ fg_ptr = (const value_type*)base_type::source_image().row(y_lr) + x_lr;
+
+ fg += *fg_ptr++ * (image_subpixel_size - x_hr) * (image_subpixel_size - y_hr);
+ fg += *fg_ptr++ * (image_subpixel_size - y_hr) * x_hr;
+
+ fg_ptr = (const value_type*)base_type::source_image().next_row(fg_ptr - 2);
+
+ fg += *fg_ptr++ * (image_subpixel_size - x_hr) * y_hr;
+ fg += *fg_ptr++ * x_hr * y_hr;
+
+ fg >>= image_subpixel_shift * 2;
+ src_alpha = base_mask;
+ }
+ else
+ {
+ unsigned weight;
+ if(x_lr < -1 || y_lr < -1 ||
+ x_lr > maxx || y_lr > maxy)
+ {
+ fg = back_v;
+ src_alpha = back_a;
+ }
+ else
+ {
+ fg =
+ src_alpha = image_subpixel_size * image_subpixel_size / 2;
+
+ x_hr &= image_subpixel_mask;
+ y_hr &= image_subpixel_mask;
+
+ weight = (image_subpixel_size - x_hr) *
+ (image_subpixel_size - y_hr);
+ if(x_lr >= 0 && y_lr >= 0 &&
+ x_lr <= maxx && y_lr <= maxy)
+ {
+ fg += weight * *((const value_type*)base_type::source_image().row(y_lr) + x_lr);
+ src_alpha += weight * base_mask;
+ }
+ else
+ {
+ fg += back_v * weight;
+ src_alpha += back_a * weight;
+ }
+
+ x_lr++;
+
+ weight = x_hr * (image_subpixel_size - y_hr);
+ if(x_lr >= 0 && y_lr >= 0 &&
+ x_lr <= maxx && y_lr <= maxy)
+ {
+ fg += weight * *((const value_type*)base_type::source_image().row(y_lr) + x_lr);
+ src_alpha += weight * base_mask;
+ }
+ else
+ {
+ fg += back_v * weight;
+ src_alpha += back_a * weight;
+ }
+
+ x_lr--;
+ y_lr++;
+
+ weight = (image_subpixel_size - x_hr) * y_hr;
+ if(x_lr >= 0 && y_lr >= 0 &&
+ x_lr <= maxx && y_lr <= maxy)
+ {
+ fg += weight * *((const value_type*)base_type::source_image().row(y_lr) + x_lr);
+ src_alpha += weight * base_mask;
+ }
+ else
+ {
+ fg += back_v * weight;
+ src_alpha += back_a * weight;
+ }
+
+ x_lr++;
+
+ weight = x_hr * y_hr;
+ if(x_lr >= 0 && y_lr >= 0 &&
+ x_lr <= maxx && y_lr <= maxy)
+ {
+ fg += weight * *((const value_type*)base_type::source_image().row(y_lr) + x_lr);
+ src_alpha += weight * base_mask;
+ }
+ else
+ {
+ fg += back_v * weight;
+ src_alpha += back_a * weight;
+ }
+
+ fg >>= image_subpixel_shift * 2;
+ src_alpha >>= image_subpixel_shift * 2;
+ }
+ }
+
+ span->v = (value_type)fg;
+ span->a = (value_type)src_alpha;
+ ++span;
+ ++base_type::interpolator();
+
+ } while(--len);
+
+ return base_type::allocator().span();
+ }
+ };
+
+
+
+
+
+
+
+ //========================================span_image_filter_gray_2x2
+ template<class ColorT,
+ class Interpolator,
+ class Allocator = span_allocator<ColorT> >
+ class span_image_filter_gray_2x2 :
+ public span_image_filter<ColorT, Interpolator, Allocator>
+ {
+ public:
+ typedef ColorT color_type;
+ typedef Interpolator interpolator_type;
+ typedef Allocator alloc_type;
+ typedef span_image_filter<color_type, interpolator_type, alloc_type> base_type;
+ typedef typename color_type::value_type value_type;
+ typedef typename color_type::calc_type calc_type;
+ enum
+ {
+ base_shift = color_type::base_shift,
+ base_mask = color_type::base_mask
+ };
+
+ //--------------------------------------------------------------------
+ span_image_filter_gray_2x2(alloc_type& alloc) : base_type(alloc) {}
+
+ //--------------------------------------------------------------------
+ span_image_filter_gray_2x2(alloc_type& alloc,
+ const rendering_buffer& src,
+ const color_type& back_color,
+ interpolator_type& inter,
+ const image_filter_lut& filter) :
+ base_type(alloc, src, back_color, inter, &filter)
+ {}
+
+ //--------------------------------------------------------------------
+ color_type* generate(int x, int y, unsigned len)
+ {
+ base_type::interpolator().begin(x + base_type::filter_dx_dbl(),
+ y + base_type::filter_dy_dbl(), len);
+ calc_type fg;
+ calc_type src_alpha;
+ value_type back_v = base_type::background_color().v;
+ value_type back_a = base_type::background_color().a;
+
+ const value_type *fg_ptr;
+
+ color_type* span = base_type::allocator().span();
+ const int16* weight_array = base_type::filter().weight_array() +
+ ((base_type::filter().diameter()/2 - 1) <<
+ image_subpixel_shift);
+
+ int maxx = base_type::source_image().width() - 1;
+ int maxy = base_type::source_image().height() - 1;
+
+ do
+ {
+ int x_hr;
+ int y_hr;
+
+ base_type::interpolator().coordinates(&x_hr, &y_hr);
+
+ x_hr -= base_type::filter_dx_int();
+ y_hr -= base_type::filter_dy_int();
+
+ int x_lr = x_hr >> image_subpixel_shift;
+ int y_lr = y_hr >> image_subpixel_shift;
+
+ if(x_lr >= 0 && y_lr >= 0 &&
+ x_lr < maxx && y_lr < maxy)
+ {
+ fg = image_filter_size / 2;
+
+ x_hr &= image_subpixel_mask;
+ y_hr &= image_subpixel_mask;
+ fg_ptr = (const value_type*)base_type::source_image().row(y_lr) + x_lr;
+
+ fg += *fg_ptr++ * ((weight_array[x_hr + image_subpixel_size] *
+ weight_array[y_hr + image_subpixel_size] +
+ image_filter_size / 2) >>
+ image_filter_shift);
+ fg += *fg_ptr++ * ((weight_array[x_hr] *
+ weight_array[y_hr + image_subpixel_size] +
+ image_filter_size / 2) >>
+ image_filter_shift);
+
+ fg_ptr = (const value_type*)base_type::source_image().next_row(fg_ptr - 2);
+
+ fg += *fg_ptr++ * ((weight_array[x_hr + image_subpixel_size] *
+ weight_array[y_hr] +
+ image_filter_size / 2) >>
+ image_filter_shift);
+ fg += *fg_ptr++ * ((weight_array[x_hr] *
+ weight_array[y_hr] +
+ image_filter_size / 2) >>
+ image_filter_shift);
+
+ fg >>= image_filter_shift;
+ if(fg > base_mask) fg = base_mask;
+ src_alpha = base_mask;
+ }
+ else
+ {
+ unsigned weight;
+ if(x_lr < -1 || y_lr < -1 ||
+ x_lr > maxx || y_lr > maxy)
+ {
+ fg = back_v;
+ src_alpha = back_a;
+ }
+ else
+ {
+ fg = src_alpha = image_filter_size / 2;
+
+ x_hr &= image_subpixel_mask;
+ y_hr &= image_subpixel_mask;
+
+ weight = (weight_array[x_hr + image_subpixel_size] *
+ weight_array[y_hr + image_subpixel_size] +
+ image_filter_size / 2) >>
+ image_filter_shift;
+ if(x_lr >= 0 && y_lr >= 0 &&
+ x_lr <= maxx && y_lr <= maxy)
+ {
+ fg += weight * *((const value_type*)base_type::source_image().row(y_lr) + x_lr);
+ src_alpha += weight * base_mask;
+ }
+ else
+ {
+ fg += back_v * weight;
+ src_alpha += back_a * weight;
+ }
+
+ x_lr++;
+
+ weight = (weight_array[x_hr] *
+ weight_array[y_hr + image_subpixel_size] +
+ image_filter_size / 2) >>
+ image_filter_shift;
+ if(x_lr >= 0 && y_lr >= 0 &&
+ x_lr <= maxx && y_lr <= maxy)
+ {
+ fg += weight * *((const value_type*)base_type::source_image().row(y_lr) + x_lr);
+ src_alpha += weight * base_mask;
+ }
+ else
+ {
+ fg += back_v * weight;
+ src_alpha += back_a * weight;
+ }
+
+ x_lr--;
+ y_lr++;
+
+ weight = (weight_array[x_hr + image_subpixel_size] *
+ weight_array[y_hr] +
+ image_filter_size / 2) >>
+ image_filter_shift;
+ if(x_lr >= 0 && y_lr >= 0 &&
+ x_lr <= maxx && y_lr <= maxy)
+ {
+ fg += weight * *((const value_type*)base_type::source_image().row(y_lr) + x_lr);
+ src_alpha += weight * base_mask;
+ }
+ else
+ {
+ fg += back_v * weight;
+ src_alpha += back_a * weight;
+ }
+
+ x_lr++;
+
+ weight = (weight_array[x_hr] *
+ weight_array[y_hr] +
+ image_filter_size / 2) >>
+ image_filter_shift;
+ if(x_lr >= 0 && y_lr >= 0 &&
+ x_lr <= maxx && y_lr <= maxy)
+ {
+ fg += weight * *((const value_type*)base_type::source_image().row(y_lr) + x_lr);
+ src_alpha += weight * base_mask;
+ }
+ else
+ {
+ fg += back_v * weight;
+ src_alpha += back_a * weight;
+ }
+ fg >>= image_filter_shift;
+ src_alpha >>= image_filter_shift;
+
+ if(src_alpha > base_mask) src_alpha = base_mask;
+ if(fg > src_alpha) fg = src_alpha;
+
+ }
+ }
+
+ span->v = (value_type)fg;
+ span->a = (value_type)src_alpha;
+ ++span;
+ ++base_type::interpolator();
+
+ } while(--len);
+
+ return base_type::allocator().span();
+ }
+ };
+
+
+
+
+
+
+
+
+
+
+
+
+ //================================================span_image_filter_gray
+ template<class ColorT,
+ class Interpolator,
+ class Allocator = span_allocator<ColorT> >
+ class span_image_filter_gray :
+ public span_image_filter<ColorT, Interpolator, Allocator>
+ {
+ public:
+ typedef ColorT color_type;
+ typedef Interpolator interpolator_type;
+ typedef Allocator alloc_type;
+ typedef span_image_filter<color_type, interpolator_type, alloc_type> base_type;
+ typedef typename color_type::value_type value_type;
+ typedef typename color_type::calc_type calc_type;
+ enum
+ {
+ base_shift = color_type::base_shift,
+ base_mask = color_type::base_mask
+ };
+
+ //--------------------------------------------------------------------
+ span_image_filter_gray(alloc_type& alloc) : base_type(alloc) {}
+
+ //--------------------------------------------------------------------
+ span_image_filter_gray(alloc_type& alloc,
+ const rendering_buffer& src,
+ const color_type& back_color,
+ interpolator_type& inter,
+ const image_filter_lut& filter) :
+ base_type(alloc, src, back_color, inter, &filter)
+ {}
+
+ //--------------------------------------------------------------------
+ color_type* generate(int x, int y, unsigned len)
+ {
+ base_type::interpolator().begin(x + base_type::filter_dx_dbl(),
+ y + base_type::filter_dy_dbl(), len);
+
+ int fg;
+ int src_alpha;
+ value_type back_v = base_type::background_color().v;
+ value_type back_a = base_type::background_color().a;
+
+ const value_type* fg_ptr;
+
+ unsigned diameter = base_type::filter().diameter();
+ int start = base_type::filter().start();
+ int start1 = start - 1;
+ const int16* weight_array = base_type::filter().weight_array();
+
+ color_type* span = base_type::allocator().span();
+
+ int maxx = base_type::source_image().width() + start - 2;
+ int maxy = base_type::source_image().height() + start - 2;
+
+ int maxx2 = base_type::source_image().width() - start - 1;
+ int maxy2 = base_type::source_image().height() - start - 1;
+
+ int x_count;
+ int weight_y;
+
+ do
+ {
+ base_type::interpolator().coordinates(&x, &y);
+
+ x -= base_type::filter_dx_int();
+ y -= base_type::filter_dy_int();
+
+ int x_hr = x;
+ int y_hr = y;
+
+ int x_lr = x_hr >> image_subpixel_shift;
+ int y_lr = y_hr >> image_subpixel_shift;
+
+ fg = image_filter_size / 2;
+
+ int x_fract = x_hr & image_subpixel_mask;
+ unsigned y_count = diameter;
+
+ if(x_lr >= -start && y_lr >= -start &&
+ x_lr <= maxx && y_lr <= maxy)
+ {
+ y_hr = image_subpixel_mask - (y_hr & image_subpixel_mask);
+ fg_ptr = (const value_type*)base_type::source_image().row(y_lr + start) + x_lr + start;
+ do
+ {
+ x_count = diameter;
+ weight_y = weight_array[y_hr];
+ x_hr = image_subpixel_mask - x_fract;
+
+ do
+ {
+ fg += *fg_ptr++ * ((weight_y * weight_array[x_hr] +
+ image_filter_size / 2) >>
+ image_filter_shift);
+ x_hr += image_subpixel_size;
+
+ } while(--x_count);
+
+ y_hr += image_subpixel_size;
+ fg_ptr = (const value_type*)base_type::source_image().next_row(fg_ptr - diameter);
+
+ } while(--y_count);
+
+ fg >>= image_filter_shift;
+
+ if(fg < 0) fg = 0;
+ if(fg > base_mask) fg = base_mask;
+ src_alpha = base_mask;
+ }
+ else
+ {
+ if(x_lr < start1 || y_lr < start1 ||
+ x_lr > maxx2 || y_lr > maxy2)
+ {
+ fg = back_v;
+ src_alpha = back_a;
+ }
+ else
+ {
+ src_alpha = image_filter_size / 2;
+ y_lr = (y >> image_subpixel_shift) + start;
+ y_hr = image_subpixel_mask - (y_hr & image_subpixel_mask);
+
+ do
+ {
+ x_count = diameter;
+ weight_y = weight_array[y_hr];
+ x_lr = (x >> image_subpixel_shift) + start;
+ x_hr = image_subpixel_mask - x_fract;
+
+ do
+ {
+ int weight = (weight_y * weight_array[x_hr] +
+ image_filter_size / 2) >>
+ image_filter_shift;
+
+ if(x_lr >= 0 && y_lr >= 0 &&
+ x_lr < int(base_type::source_image().width()) &&
+ y_lr < int(base_type::source_image().height()))
+ {
+ fg_ptr = (const value_type*)base_type::source_image().row(y_lr) + x_lr;
+ fg += *fg_ptr++ * weight;
+ src_alpha += base_mask * weight;
+ }
+ else
+ {
+ fg += back_v * weight;
+ src_alpha += back_a * weight;
+ }
+ x_hr += image_subpixel_size;
+ x_lr++;
+
+ } while(--x_count);
+
+ y_hr += image_subpixel_size;
+ y_lr++;
+
+ } while(--y_count);
+
+
+ fg >>= image_filter_shift;
+ src_alpha >>= image_filter_shift;
+
+ if(fg < 0) fg = 0;
+ if(src_alpha < 0) src_alpha = 0;
+
+ if(src_alpha > base_mask) src_alpha = base_mask;
+ if(fg > src_alpha) fg = src_alpha;
+ }
+ }
+
+ span->v = (value_type)fg;
+ span->a = (value_type)src_alpha;
+
+ ++span;
+ ++base_type::interpolator();
+
+ } while(--len);
+
+ return base_type::allocator().span();
+ }
+ };
+
+
+
+}
+
+
+#endif
+
+
+
diff --git a/agg/inc/agg_span_image_filter_rgb.h b/agg/inc/agg_span_image_filter_rgb.h
new file mode 100755
index 000000000000..d8f8142bfffb
--- /dev/null
+++ b/agg/inc/agg_span_image_filter_rgb.h
@@ -0,0 +1,840 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// Adaptation for high precision colors has been sponsored by
+// Liberty Technology Systems, Inc., visit http://lib-sys.com
+//
+// Liberty Technology Systems, Inc. is the provider of
+// PostScript and PDF technology for software developers.
+//
+//----------------------------------------------------------------------------
+
+#ifndef AGG_SPAN_IMAGE_FILTER_RGB_INCLUDED
+#define AGG_SPAN_IMAGE_FILTER_RGB_INCLUDED
+
+#include "agg_basics.h"
+#include "agg_color_rgba.h"
+#include "agg_span_image_filter.h"
+
+
+namespace agg
+{
+
+
+ //==============================================span_image_filter_rgb_nn
+ template<class ColorT,
+ class Order,
+ class Interpolator,
+ class Allocator = span_allocator<ColorT> >
+ class span_image_filter_rgb_nn :
+ public span_image_filter<ColorT, Interpolator, Allocator>
+ {
+ public:
+ typedef ColorT color_type;
+ typedef Order order_type;
+ typedef Interpolator interpolator_type;
+ typedef Allocator alloc_type;
+ typedef span_image_filter<color_type, interpolator_type, alloc_type> base_type;
+ typedef typename color_type::value_type value_type;
+ typedef typename color_type::calc_type calc_type;
+ enum
+ {
+ base_shift = color_type::base_shift,
+ base_mask = color_type::base_mask
+ };
+
+ //--------------------------------------------------------------------
+ span_image_filter_rgb_nn(alloc_type& alloc) : base_type(alloc) {}
+
+ //--------------------------------------------------------------------
+ span_image_filter_rgb_nn(alloc_type& alloc,
+ const rendering_buffer& src,
+ const color_type& back_color,
+ interpolator_type& inter) :
+ base_type(alloc, src, back_color, inter, 0)
+ {}
+
+ //--------------------------------------------------------------------
+ color_type* generate(int x, int y, unsigned len)
+ {
+ base_type::interpolator().begin(x + base_type::filter_dx_dbl(),
+ y + base_type::filter_dy_dbl(), len);
+
+ calc_type fg[3];
+ calc_type src_alpha;
+
+ const value_type *fg_ptr;
+ color_type* span = base_type::allocator().span();
+
+ int maxx = base_type::source_image().width() - 1;
+ int maxy = base_type::source_image().height() - 1;
+
+ do
+ {
+ base_type::interpolator().coordinates(&x, &y);
+
+ x >>= image_subpixel_shift;
+ y >>= image_subpixel_shift;
+
+ if(x >= 0 && y >= 0 &&
+ x <= maxx && y <= maxy)
+ {
+ fg_ptr = (const value_type*)base_type::source_image().row(y) + x + x + x;
+ fg[0] = *fg_ptr++;
+ fg[1] = *fg_ptr++;
+ fg[2] = *fg_ptr++;
+ src_alpha = base_mask;
+ }
+ else
+ {
+ fg[order_type::R] = base_type::background_color().r;
+ fg[order_type::G] = base_type::background_color().g;
+ fg[order_type::B] = base_type::background_color().b;
+ src_alpha = base_type::background_color().a;
+ }
+
+ span->r = (value_type)fg[order_type::R];
+ span->g = (value_type)fg[order_type::G];
+ span->b = (value_type)fg[order_type::B];
+ span->a = (value_type)src_alpha;
+ ++span;
+ ++base_type::interpolator();
+
+ } while(--len);
+
+ return base_type::allocator().span();
+ }
+ };
+
+
+
+
+ //=========================================span_image_filter_rgb_bilinear
+ template<class ColorT,
+ class Order,
+ class Interpolator,
+ class Allocator = span_allocator<ColorT> >
+ class span_image_filter_rgb_bilinear :
+ public span_image_filter<ColorT, Interpolator, Allocator>
+ {
+ public:
+ typedef ColorT color_type;
+ typedef Order order_type;
+ typedef Interpolator interpolator_type;
+ typedef Allocator alloc_type;
+ typedef span_image_filter<color_type, interpolator_type, alloc_type> base_type;
+ typedef typename color_type::value_type value_type;
+ typedef typename color_type::calc_type calc_type;
+ enum
+ {
+ base_shift = color_type::base_shift,
+ base_mask = color_type::base_mask
+ };
+
+ //--------------------------------------------------------------------
+ span_image_filter_rgb_bilinear(alloc_type& alloc) : base_type(alloc) {}
+
+ //--------------------------------------------------------------------
+ span_image_filter_rgb_bilinear(alloc_type& alloc,
+ const rendering_buffer& src,
+ const color_type& back_color,
+ interpolator_type& inter) :
+ base_type(alloc, src, back_color, inter, 0)
+ {}
+
+ //--------------------------------------------------------------------
+ color_type* generate(int x, int y, unsigned len)
+ {
+ base_type::interpolator().begin(x + base_type::filter_dx_dbl(),
+ y + base_type::filter_dy_dbl(), len);
+ calc_type fg[3];
+ calc_type src_alpha;
+ value_type back_r = base_type::background_color().r;
+ value_type back_g = base_type::background_color().g;
+ value_type back_b = base_type::background_color().b;
+ value_type back_a = base_type::background_color().a;
+
+ const value_type *fg_ptr;
+
+ color_type* span = base_type::allocator().span();
+
+ int maxx = base_type::source_image().width() - 1;
+ int maxy = base_type::source_image().height() - 1;
+
+ do
+ {
+ int x_hr;
+ int y_hr;
+
+ base_type::interpolator().coordinates(&x_hr, &y_hr);
+
+ x_hr -= base_type::filter_dx_int();
+ y_hr -= base_type::filter_dy_int();
+
+ int x_lr = x_hr >> image_subpixel_shift;
+ int y_lr = y_hr >> image_subpixel_shift;
+ unsigned weight;
+
+ if(x_lr >= 0 && y_lr >= 0 &&
+ x_lr < maxx && y_lr < maxy)
+ {
+ fg[0] =
+ fg[1] =
+ fg[2] = image_subpixel_size * image_subpixel_size / 2;
+
+ x_hr &= image_subpixel_mask;
+ y_hr &= image_subpixel_mask;
+ fg_ptr = (const value_type*)base_type::source_image().row(y_lr) + x_lr + x_lr + x_lr;
+
+ weight = (image_subpixel_size - x_hr) *
+ (image_subpixel_size - y_hr);
+ fg[0] += weight * *fg_ptr++;
+ fg[1] += weight * *fg_ptr++;
+ fg[2] += weight * *fg_ptr++;
+
+ weight = x_hr * (image_subpixel_size - y_hr);
+ fg[0] += weight * *fg_ptr++;
+ fg[1] += weight * *fg_ptr++;
+ fg[2] += weight * *fg_ptr++;
+
+ fg_ptr = (const value_type*)base_type::source_image().next_row(fg_ptr - 6);
+
+ weight = (image_subpixel_size - x_hr) * y_hr;
+ fg[0] += weight * *fg_ptr++;
+ fg[1] += weight * *fg_ptr++;
+ fg[2] += weight * *fg_ptr++;
+
+ weight = x_hr * y_hr;
+ fg[0] += weight * *fg_ptr++;
+ fg[1] += weight * *fg_ptr++;
+ fg[2] += weight * *fg_ptr++;
+
+ fg[0] >>= image_subpixel_shift * 2;
+ fg[1] >>= image_subpixel_shift * 2;
+ fg[2] >>= image_subpixel_shift * 2;
+ src_alpha = base_mask;
+ }
+ else
+ {
+ if(x_lr < -1 || y_lr < -1 ||
+ x_lr > maxx || y_lr > maxy)
+ {
+ fg[order_type::R] = back_r;
+ fg[order_type::G] = back_g;
+ fg[order_type::B] = back_b;
+ src_alpha = back_a;
+ }
+ else
+ {
+ fg[0] =
+ fg[1] =
+ fg[2] =
+ src_alpha = image_subpixel_size * image_subpixel_size / 2;
+
+ x_hr &= image_subpixel_mask;
+ y_hr &= image_subpixel_mask;
+
+ weight = (image_subpixel_size - x_hr) *
+ (image_subpixel_size - y_hr);
+ if(x_lr >= 0 && y_lr >= 0 &&
+ x_lr <= maxx && y_lr <= maxy)
+ {
+ fg_ptr = (const value_type*)base_type::source_image().row(y_lr) + x_lr + x_lr + x_lr;
+ fg[0] += weight * *fg_ptr++;
+ fg[1] += weight * *fg_ptr++;
+ fg[2] += weight * *fg_ptr++;
+ src_alpha += weight * base_mask;
+ }
+ else
+ {
+ fg[order_type::R] += back_r * weight;
+ fg[order_type::G] += back_g * weight;
+ fg[order_type::B] += back_b * weight;
+ src_alpha += back_a * weight;
+ }
+
+ x_lr++;
+
+ weight = x_hr * (image_subpixel_size - y_hr);
+ if(x_lr >= 0 && y_lr >= 0 &&
+ x_lr <= maxx && y_lr <= maxy)
+ {
+ fg_ptr = (const value_type*)base_type::source_image().row(y_lr) + x_lr + x_lr + x_lr;
+ fg[0] += weight * *fg_ptr++;
+ fg[1] += weight * *fg_ptr++;
+ fg[2] += weight * *fg_ptr++;
+ src_alpha += weight * base_mask;
+ }
+ else
+ {
+ fg[order_type::R] += back_r * weight;
+ fg[order_type::G] += back_g * weight;
+ fg[order_type::B] += back_b * weight;
+ src_alpha += back_a * weight;
+ }
+
+ x_lr--;
+ y_lr++;
+
+ weight = (image_subpixel_size - x_hr) * y_hr;
+ if(x_lr >= 0 && y_lr >= 0 &&
+ x_lr <= maxx && y_lr <= maxy)
+ {
+ fg_ptr = (const value_type*)base_type::source_image().row(y_lr) + x_lr + x_lr + x_lr;
+ fg[0] += weight * *fg_ptr++;
+ fg[1] += weight * *fg_ptr++;
+ fg[2] += weight * *fg_ptr++;
+ src_alpha += weight * base_mask;
+ }
+ else
+ {
+ fg[order_type::R] += back_r * weight;
+ fg[order_type::G] += back_g * weight;
+ fg[order_type::B] += back_b * weight;
+ src_alpha += back_a * weight;
+ }
+
+ x_lr++;
+
+ weight = x_hr * y_hr;
+ if(x_lr >= 0 && y_lr >= 0 &&
+ x_lr <= maxx && y_lr <= maxy)
+ {
+ fg_ptr = (const value_type*)base_type::source_image().row(y_lr) + x_lr + x_lr + x_lr;
+ fg[0] += weight * *fg_ptr++;
+ fg[1] += weight * *fg_ptr++;
+ fg[2] += weight * *fg_ptr++;
+ src_alpha += weight * base_mask;
+ }
+ else
+ {
+ fg[order_type::R] += back_r * weight;
+ fg[order_type::G] += back_g * weight;
+ fg[order_type::B] += back_b * weight;
+ src_alpha += back_a * weight;
+ }
+
+ fg[0] >>= image_subpixel_shift * 2;
+ fg[1] >>= image_subpixel_shift * 2;
+ fg[2] >>= image_subpixel_shift * 2;
+ src_alpha >>= image_subpixel_shift * 2;
+ }
+ }
+
+ span->r = (value_type)fg[order_type::R];
+ span->g = (value_type)fg[order_type::G];
+ span->b = (value_type)fg[order_type::B];
+ span->a = (value_type)src_alpha;
+ ++span;
+ ++base_type::interpolator();
+
+ } while(--len);
+
+ return base_type::allocator().span();
+ }
+ };
+
+
+
+
+
+
+
+
+ //=========================================span_image_filter_rgb_2x2
+ template<class ColorT,
+ class Order,
+ class Interpolator,
+ class Allocator = span_allocator<ColorT> >
+ class span_image_filter_rgb_2x2 :
+ public span_image_filter<ColorT, Interpolator, Allocator>
+ {
+ public:
+ typedef ColorT color_type;
+ typedef Order order_type;
+ typedef Interpolator interpolator_type;
+ typedef Allocator alloc_type;
+ typedef span_image_filter<color_type, interpolator_type, alloc_type> base_type;
+ typedef typename color_type::value_type value_type;
+ typedef typename color_type::calc_type calc_type;
+ enum
+ {
+ base_shift = color_type::base_shift,
+ base_mask = color_type::base_mask
+ };
+
+ //--------------------------------------------------------------------
+ span_image_filter_rgb_2x2(alloc_type& alloc) : base_type(alloc) {}
+
+ //--------------------------------------------------------------------
+ span_image_filter_rgb_2x2(alloc_type& alloc,
+ const rendering_buffer& src,
+ const color_type& back_color,
+ interpolator_type& inter,
+ const image_filter_lut& filter) :
+ base_type(alloc, src, back_color, inter, &filter)
+ {}
+
+ //--------------------------------------------------------------------
+ color_type* generate(int x, int y, unsigned len)
+ {
+ base_type::interpolator().begin(x + base_type::filter_dx_dbl(),
+ y + base_type::filter_dy_dbl(), len);
+ calc_type fg[3];
+ calc_type src_alpha;
+ value_type back_r = base_type::background_color().r;
+ value_type back_g = base_type::background_color().g;
+ value_type back_b = base_type::background_color().b;
+ value_type back_a = base_type::background_color().a;
+
+ const value_type *fg_ptr;
+
+ color_type* span = base_type::allocator().span();
+ const int16* weight_array = base_type::filter().weight_array() +
+ ((base_type::filter().diameter()/2 - 1) <<
+ image_subpixel_shift);
+
+ int maxx = base_type::source_image().width() - 1;
+ int maxy = base_type::source_image().height() - 1;
+
+ do
+ {
+ int x_hr;
+ int y_hr;
+
+ base_type::interpolator().coordinates(&x_hr, &y_hr);
+
+ x_hr -= base_type::filter_dx_int();
+ y_hr -= base_type::filter_dy_int();
+
+ int x_lr = x_hr >> image_subpixel_shift;
+ int y_lr = y_hr >> image_subpixel_shift;
+ unsigned weight;
+
+ if(x_lr >= 0 && y_lr >= 0 &&
+ x_lr < maxx && y_lr < maxy)
+ {
+ fg[0] = fg[1] = fg[2] = image_filter_size / 2;
+
+ x_hr &= image_subpixel_mask;
+ y_hr &= image_subpixel_mask;
+ fg_ptr = (const value_type*)base_type::source_image().row(y_lr) + x_lr + x_lr + x_lr;
+
+ weight = (weight_array[x_hr + image_subpixel_size] *
+ weight_array[y_hr + image_subpixel_size] +
+ image_filter_size / 2) >>
+ image_filter_shift;
+ fg[0] += weight * *fg_ptr++;
+ fg[1] += weight * *fg_ptr++;
+ fg[2] += weight * *fg_ptr++;
+
+ weight = (weight_array[x_hr] *
+ weight_array[y_hr + image_subpixel_size] +
+ image_filter_size / 2) >>
+ image_filter_shift;
+ fg[0] += weight * *fg_ptr++;
+ fg[1] += weight * *fg_ptr++;
+ fg[2] += weight * *fg_ptr++;
+
+ fg_ptr = (const value_type*)base_type::source_image().next_row(fg_ptr - 6);
+
+ weight = (weight_array[x_hr + image_subpixel_size] *
+ weight_array[y_hr] +
+ image_filter_size / 2) >>
+ image_filter_shift;
+ fg[0] += weight * *fg_ptr++;
+ fg[1] += weight * *fg_ptr++;
+ fg[2] += weight * *fg_ptr++;
+
+ weight = (weight_array[x_hr] *
+ weight_array[y_hr] +
+ image_filter_size / 2) >>
+ image_filter_shift;
+ fg[0] += weight * *fg_ptr++;
+ fg[1] += weight * *fg_ptr++;
+ fg[2] += weight * *fg_ptr++;
+
+ fg[0] >>= image_filter_shift;
+ fg[1] >>= image_filter_shift;
+ fg[2] >>= image_filter_shift;
+ src_alpha = base_mask;
+
+ if(fg[0] > base_mask) fg[0] = base_mask;
+ if(fg[1] > base_mask) fg[1] = base_mask;
+ if(fg[2] > base_mask) fg[2] = base_mask;
+ }
+ else
+ {
+ if(x_lr < -1 || y_lr < -1 ||
+ x_lr > maxx || y_lr > maxy)
+ {
+ fg[order_type::R] = back_r;
+ fg[order_type::G] = back_g;
+ fg[order_type::B] = back_b;
+ src_alpha = back_a;
+ }
+ else
+ {
+ fg[0] = fg[1] = fg[2] = src_alpha = image_filter_size / 2;
+
+ x_hr &= image_subpixel_mask;
+ y_hr &= image_subpixel_mask;
+
+ weight = (weight_array[x_hr + image_subpixel_size] *
+ weight_array[y_hr + image_subpixel_size] +
+ image_filter_size / 2) >>
+ image_filter_shift;
+ if(x_lr >= 0 && y_lr >= 0 &&
+ x_lr <= maxx && y_lr <= maxy)
+ {
+ fg_ptr = (const value_type*)base_type::source_image().row(y_lr) + x_lr + x_lr + x_lr;
+ fg[0] += weight * *fg_ptr++;
+ fg[1] += weight * *fg_ptr++;
+ fg[2] += weight * *fg_ptr++;
+ src_alpha += weight * base_mask;
+ }
+ else
+ {
+ fg[order_type::R] += back_r * weight;
+ fg[order_type::G] += back_g * weight;
+ fg[order_type::B] += back_b * weight;
+ src_alpha += back_a * weight;
+ }
+
+ x_lr++;
+
+ weight = (weight_array[x_hr] *
+ weight_array[y_hr + image_subpixel_size] +
+ image_filter_size / 2) >>
+ image_filter_shift;
+ if(x_lr >= 0 && y_lr >= 0 &&
+ x_lr <= maxx && y_lr <= maxy)
+ {
+ fg_ptr = (const value_type*)base_type::source_image().row(y_lr) + x_lr + x_lr + x_lr;
+ fg[0] += weight * *fg_ptr++;
+ fg[1] += weight * *fg_ptr++;
+ fg[2] += weight * *fg_ptr++;
+ src_alpha += weight * base_mask;
+ }
+ else
+ {
+ fg[order_type::R] += back_r * weight;
+ fg[order_type::G] += back_g * weight;
+ fg[order_type::B] += back_b * weight;
+ src_alpha += back_a * weight;
+ }
+
+ x_lr--;
+ y_lr++;
+
+ weight = (weight_array[x_hr + image_subpixel_size] *
+ weight_array[y_hr] +
+ image_filter_size / 2) >>
+ image_filter_shift;
+ if(x_lr >= 0 && y_lr >= 0 &&
+ x_lr <= maxx && y_lr <= maxy)
+ {
+ fg_ptr = (const value_type*)base_type::source_image().row(y_lr) + x_lr + x_lr + x_lr;
+ fg[0] += weight * *fg_ptr++;
+ fg[1] += weight * *fg_ptr++;
+ fg[2] += weight * *fg_ptr++;
+ src_alpha += weight * base_mask;
+ }
+ else
+ {
+ fg[order_type::R] += back_r * weight;
+ fg[order_type::G] += back_g * weight;
+ fg[order_type::B] += back_b * weight;
+ src_alpha += back_a * weight;
+ }
+
+ x_lr++;
+
+ weight = (weight_array[x_hr] *
+ weight_array[y_hr] +
+ image_filter_size / 2) >>
+ image_filter_shift;
+ if(x_lr >= 0 && y_lr >= 0 &&
+ x_lr <= maxx && y_lr <= maxy)
+ {
+ fg_ptr = (const value_type*)base_type::source_image().row(y_lr) + x_lr + x_lr + x_lr;
+ fg[0] += weight * *fg_ptr++;
+ fg[1] += weight * *fg_ptr++;
+ fg[2] += weight * *fg_ptr++;
+ src_alpha += weight * base_mask;
+ }
+ else
+ {
+ fg[order_type::R] += back_r * weight;
+ fg[order_type::G] += back_g * weight;
+ fg[order_type::B] += back_b * weight;
+ src_alpha += back_a * weight;
+ }
+
+ fg[0] >>= image_filter_shift;
+ fg[1] >>= image_filter_shift;
+ fg[2] >>= image_filter_shift;
+ src_alpha >>= image_filter_shift;
+
+ if(src_alpha > base_mask) src_alpha = base_mask;
+ if(fg[0] > src_alpha) fg[0] = src_alpha;
+ if(fg[1] > src_alpha) fg[1] = src_alpha;
+ if(fg[2] > src_alpha) fg[2] = src_alpha;
+ }
+ }
+
+ span->r = (value_type)fg[order_type::R];
+ span->g = (value_type)fg[order_type::G];
+ span->b = (value_type)fg[order_type::B];
+ span->a = (value_type)src_alpha;
+ ++span;
+ ++base_type::interpolator();
+
+ } while(--len);
+
+ return base_type::allocator().span();
+ }
+ };
+
+
+
+
+
+
+
+ //=================================================span_image_filter_rgb
+ template<class ColorT,
+ class Order,
+ class Interpolator,
+ class Allocator = span_allocator<ColorT> >
+ class span_image_filter_rgb :
+ public span_image_filter<ColorT, Interpolator, Allocator>
+ {
+ public:
+ typedef ColorT color_type;
+ typedef Order order_type;
+ typedef Interpolator interpolator_type;
+ typedef Allocator alloc_type;
+ typedef span_image_filter<color_type, interpolator_type, alloc_type> base_type;
+ typedef typename color_type::value_type value_type;
+ typedef typename color_type::calc_type calc_type;
+ enum
+ {
+ base_shift = color_type::base_shift,
+ base_mask = color_type::base_mask
+ };
+
+ //--------------------------------------------------------------------
+ span_image_filter_rgb(alloc_type& alloc) : base_type(alloc) {}
+
+ //--------------------------------------------------------------------
+ span_image_filter_rgb(alloc_type& alloc,
+ const rendering_buffer& src,
+ const color_type& back_color,
+ interpolator_type& inter,
+ const image_filter_lut& filter) :
+ base_type(alloc, src, back_color, inter, &filter)
+ {}
+
+ //--------------------------------------------------------------------
+ color_type* generate(int x, int y, unsigned len)
+ {
+ base_type::interpolator().begin(x + base_type::filter_dx_dbl(),
+ y + base_type::filter_dy_dbl(), len);
+
+ int fg[3];
+ int src_alpha;
+ value_type back_r = base_type::background_color().r;
+ value_type back_g = base_type::background_color().g;
+ value_type back_b = base_type::background_color().b;
+ value_type back_a = base_type::background_color().a;
+
+ const value_type* fg_ptr;
+
+ unsigned diameter = base_type::filter().diameter();
+ int start = base_type::filter().start();
+ int start1 = start - 1;
+ const int16* weight_array = base_type::filter().weight_array();
+
+ unsigned step_back = diameter * 3;
+ color_type* span = base_type::allocator().span();
+
+ int maxx = base_type::source_image().width() + start - 2;
+ int maxy = base_type::source_image().height() + start - 2;
+
+ int maxx2 = base_type::source_image().width() - start - 1;
+ int maxy2 = base_type::source_image().height() - start - 1;
+
+ int x_count;
+ int weight_y;
+
+ do
+ {
+ base_type::interpolator().coordinates(&x, &y);
+
+ x -= base_type::filter_dx_int();
+ y -= base_type::filter_dy_int();
+
+ int x_hr = x;
+ int y_hr = y;
+
+ int x_lr = x_hr >> image_subpixel_shift;
+ int y_lr = y_hr >> image_subpixel_shift;
+
+ fg[0] = fg[1] = fg[2] = image_filter_size / 2;
+
+ int x_fract = x_hr & image_subpixel_mask;
+ unsigned y_count = diameter;
+
+ if(x_lr >= -start && y_lr >= -start &&
+ x_lr <= maxx && y_lr <= maxy)
+ {
+ y_hr = image_subpixel_mask - (y_hr & image_subpixel_mask);
+ fg_ptr = (const value_type*)base_type::source_image().row(y_lr + start) + (x_lr + start) * 3;
+ do
+ {
+ x_count = diameter;
+ weight_y = weight_array[y_hr];
+ x_hr = image_subpixel_mask - x_fract;
+
+ do
+ {
+ int weight = (weight_y * weight_array[x_hr] +
+ image_filter_size / 2) >>
+ image_filter_shift;
+
+ fg[0] += *fg_ptr++ * weight;
+ fg[1] += *fg_ptr++ * weight;
+ fg[2] += *fg_ptr++ * weight;
+
+ x_hr += image_subpixel_size;
+
+ } while(--x_count);
+
+ y_hr += image_subpixel_size;
+ fg_ptr = (const value_type*)base_type::source_image().next_row(fg_ptr - step_back);
+
+ } while(--y_count);
+
+ fg[0] >>= image_filter_shift;
+ fg[1] >>= image_filter_shift;
+ fg[2] >>= image_filter_shift;
+
+ if(fg[0] < 0) fg[0] = 0;
+ if(fg[1] < 0) fg[1] = 0;
+ if(fg[2] < 0) fg[2] = 0;
+
+ if(fg[0] > base_mask) fg[0] = base_mask;
+ if(fg[1] > base_mask) fg[1] = base_mask;
+ if(fg[2] > base_mask) fg[2] = base_mask;
+ src_alpha = base_mask;
+ }
+ else
+ {
+ if(x_lr < start1 || y_lr < start1 ||
+ x_lr > maxx2 || y_lr > maxy2)
+ {
+ fg[order_type::R] = back_r;
+ fg[order_type::G] = back_g;
+ fg[order_type::B] = back_b;
+ src_alpha = back_a;
+ }
+ else
+ {
+ src_alpha = image_filter_size / 2;
+ y_lr = (y >> image_subpixel_shift) + start;
+ y_hr = image_subpixel_mask - (y_hr & image_subpixel_mask);
+
+ do
+ {
+ x_count = diameter;
+ weight_y = weight_array[y_hr];
+ x_lr = (x >> image_subpixel_shift) + start;
+ x_hr = image_subpixel_mask - x_fract;
+
+ do
+ {
+ int weight = (weight_y * weight_array[x_hr] +
+ image_filter_size / 2) >>
+ image_filter_shift;
+
+ if(x_lr >= 0 && y_lr >= 0 &&
+ x_lr < int(base_type::source_image().width()) &&
+ y_lr < int(base_type::source_image().height()))
+ {
+ fg_ptr = (const value_type*)base_type::source_image().row(y_lr) + x_lr * 3;
+ fg[0] += *fg_ptr++ * weight;
+ fg[1] += *fg_ptr++ * weight;
+ fg[2] += *fg_ptr++ * weight;
+ src_alpha += base_mask * weight;
+ }
+ else
+ {
+ fg[order_type::R] += back_r * weight;
+ fg[order_type::G] += back_g * weight;
+ fg[order_type::B] += back_b * weight;
+ src_alpha += back_a * weight;
+ }
+ x_hr += image_subpixel_size;
+ x_lr++;
+
+ } while(--x_count);
+
+ y_hr += image_subpixel_size;
+ y_lr++;
+
+ } while(--y_count);
+
+
+ fg[0] >>= image_filter_shift;
+ fg[1] >>= image_filter_shift;
+ fg[2] >>= image_filter_shift;
+ src_alpha >>= image_filter_shift;
+
+ if(fg[0] < 0) fg[0] = 0;
+ if(fg[1] < 0) fg[1] = 0;
+ if(fg[2] < 0) fg[2] = 0;
+ if(src_alpha < 0) src_alpha = 0;
+
+ if(src_alpha > base_mask) src_alpha = base_mask;
+ if(fg[0] > src_alpha) fg[0] = src_alpha;
+ if(fg[1] > src_alpha) fg[1] = src_alpha;
+ if(fg[2] > src_alpha) fg[2] = src_alpha;
+ }
+ }
+
+ span->r = (value_type)fg[order_type::R];
+ span->g = (value_type)fg[order_type::G];
+ span->b = (value_type)fg[order_type::B];
+ span->a = (value_type)src_alpha;
+
+ ++span;
+ ++base_type::interpolator();
+
+ } while(--len);
+
+ return base_type::allocator().span();
+ }
+ };
+
+
+
+}
+
+
+#endif
+
+
+
diff --git a/agg/inc/agg_span_image_filter_rgba.h b/agg/inc/agg_span_image_filter_rgba.h
new file mode 100755
index 000000000000..42b822c99b9b
--- /dev/null
+++ b/agg/inc/agg_span_image_filter_rgba.h
@@ -0,0 +1,864 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// Adaptation for high precision colors has been sponsored by
+// Liberty Technology Systems, Inc., visit http://lib-sys.com
+//
+// Liberty Technology Systems, Inc. is the provider of
+// PostScript and PDF technology for software developers.
+//
+//----------------------------------------------------------------------------
+//
+// classes span_image_filter_rgba32*
+//
+//----------------------------------------------------------------------------
+#ifndef AGG_SPAN_IMAGE_FILTER_RGBA_INCLUDED
+#define AGG_SPAN_IMAGE_FILTER_RGBA_INCLUDED
+
+#include "agg_basics.h"
+#include "agg_color_rgba.h"
+#include "agg_span_image_filter.h"
+
+
+namespace agg
+{
+
+ //=============================================span_image_filter_rgba_nn
+ template<class ColorT,
+ class Order,
+ class Interpolator,
+ class Allocator = span_allocator<ColorT> >
+ class span_image_filter_rgba_nn :
+ public span_image_filter<ColorT, Interpolator, Allocator>
+ {
+ public:
+ typedef ColorT color_type;
+ typedef Order order_type;
+ typedef Interpolator interpolator_type;
+ typedef Allocator alloc_type;
+ typedef span_image_filter<color_type, interpolator_type, alloc_type> base_type;
+ typedef typename color_type::value_type value_type;
+ typedef typename color_type::calc_type calc_type;
+ enum
+ {
+ base_shift = color_type::base_shift,
+ base_mask = color_type::base_mask
+ };
+
+ //--------------------------------------------------------------------
+ span_image_filter_rgba_nn(alloc_type& alloc) : base_type(alloc) {}
+
+ //--------------------------------------------------------------------
+ span_image_filter_rgba_nn(alloc_type& alloc,
+ const rendering_buffer& src,
+ const color_type& back_color,
+ interpolator_type& inter) :
+ base_type(alloc, src, back_color, inter, 0)
+ {}
+
+ //--------------------------------------------------------------------
+ color_type* generate(int x, int y, unsigned len)
+ {
+ base_type::interpolator().begin(x + base_type::filter_dx_dbl(),
+ y + base_type::filter_dy_dbl(), len);
+
+ calc_type fg[4];
+
+ const value_type *fg_ptr;
+ color_type* span = base_type::allocator().span();
+
+ int maxx = base_type::source_image().width() - 1;
+ int maxy = base_type::source_image().height() - 1;
+
+ do
+ {
+ base_type::interpolator().coordinates(&x, &y);
+
+ x >>= image_subpixel_shift;
+ y >>= image_subpixel_shift;
+
+ if(x >= 0 && y >= 0 &&
+ x <= maxx && y <= maxy)
+ {
+ fg_ptr = (const value_type*)base_type::source_image().row(y) + (x << 2);
+ fg[0] = *fg_ptr++;
+ fg[1] = *fg_ptr++;
+ fg[2] = *fg_ptr++;
+ fg[3] = *fg_ptr++;
+ }
+ else
+ {
+ fg[order_type::R] = base_type::background_color().r;
+ fg[order_type::G] = base_type::background_color().g;
+ fg[order_type::B] = base_type::background_color().b;
+ fg[order_type::A] = base_type::background_color().a;
+ }
+
+ span->r = fg[order_type::R];
+ span->g = fg[order_type::G];
+ span->b = fg[order_type::B];
+ span->a = fg[order_type::A];
+ ++span;
+ ++base_type::interpolator();
+
+ } while(--len);
+
+ return base_type::allocator().span();
+ }
+
+ };
+
+
+
+
+
+
+
+ //=======================================span_image_filter_rgba_bilinear
+ template<class ColorT,
+ class Order,
+ class Interpolator,
+ class Allocator = span_allocator<ColorT> >
+ class span_image_filter_rgba_bilinear :
+ public span_image_filter<ColorT, Interpolator, Allocator>
+ {
+ public:
+ typedef ColorT color_type;
+ typedef Order order_type;
+ typedef Interpolator interpolator_type;
+ typedef Allocator alloc_type;
+ typedef span_image_filter<color_type, interpolator_type, alloc_type> base_type;
+ typedef typename color_type::value_type value_type;
+ typedef typename color_type::calc_type calc_type;
+ enum
+ {
+ base_shift = color_type::base_shift,
+ base_mask = color_type::base_mask
+ };
+
+ //--------------------------------------------------------------------
+ span_image_filter_rgba_bilinear(alloc_type& alloc) : base_type(alloc) {}
+
+ //--------------------------------------------------------------------
+ span_image_filter_rgba_bilinear(alloc_type& alloc,
+ const rendering_buffer& src,
+ const color_type& back_color,
+ interpolator_type& inter) :
+ base_type(alloc, src, back_color, inter, 0)
+ {}
+
+
+ //--------------------------------------------------------------------
+ color_type* generate(int x, int y, unsigned len)
+ {
+ base_type::interpolator().begin(x + base_type::filter_dx_dbl(),
+ y + base_type::filter_dy_dbl(), len);
+
+ calc_type fg[4];
+ value_type back_r = base_type::background_color().r;
+ value_type back_g = base_type::background_color().g;
+ value_type back_b = base_type::background_color().b;
+ value_type back_a = base_type::background_color().a;
+
+ const value_type *fg_ptr;
+
+ color_type* span = base_type::allocator().span();
+
+ int maxx = base_type::source_image().width() - 1;
+ int maxy = base_type::source_image().height() - 1;
+
+ do
+ {
+ int x_hr;
+ int y_hr;
+
+ base_type::interpolator().coordinates(&x_hr, &y_hr);
+
+ x_hr -= base_type::filter_dx_int();
+ y_hr -= base_type::filter_dy_int();
+
+ int x_lr = x_hr >> image_subpixel_shift;
+ int y_lr = y_hr >> image_subpixel_shift;
+
+ unsigned weight;
+
+ if(x_lr >= 0 && y_lr >= 0 &&
+ x_lr < maxx && y_lr < maxy)
+ {
+ fg[0] =
+ fg[1] =
+ fg[2] =
+ fg[3] = image_subpixel_size * image_subpixel_size / 2;
+
+ x_hr &= image_subpixel_mask;
+ y_hr &= image_subpixel_mask;
+
+ fg_ptr = (const value_type*)base_type::source_image().row(y_lr) + (x_lr << 2);
+
+ weight = (image_subpixel_size - x_hr) *
+ (image_subpixel_size - y_hr);
+ fg[0] += weight * *fg_ptr++;
+ fg[1] += weight * *fg_ptr++;
+ fg[2] += weight * *fg_ptr++;
+ fg[3] += weight * *fg_ptr++;
+
+ weight = x_hr * (image_subpixel_size - y_hr);
+ fg[0] += weight * *fg_ptr++;
+ fg[1] += weight * *fg_ptr++;
+ fg[2] += weight * *fg_ptr++;
+ fg[3] += weight * *fg_ptr++;
+
+ fg_ptr = (const value_type*)base_type::source_image().next_row(fg_ptr - 8);
+
+ weight = (image_subpixel_size - x_hr) * y_hr;
+ fg[0] += weight * *fg_ptr++;
+ fg[1] += weight * *fg_ptr++;
+ fg[2] += weight * *fg_ptr++;
+ fg[3] += weight * *fg_ptr++;
+
+ weight = x_hr * y_hr;
+ fg[0] += weight * *fg_ptr++;
+ fg[1] += weight * *fg_ptr++;
+ fg[2] += weight * *fg_ptr++;
+ fg[3] += weight * *fg_ptr++;
+
+ fg[0] >>= image_subpixel_shift * 2;
+ fg[1] >>= image_subpixel_shift * 2;
+ fg[2] >>= image_subpixel_shift * 2;
+ fg[3] >>= image_subpixel_shift * 2;
+ }
+ else
+ {
+ if(x_lr < -1 || y_lr < -1 ||
+ x_lr > maxx || y_lr > maxy)
+ {
+ fg[order_type::R] = back_r;
+ fg[order_type::G] = back_g;
+ fg[order_type::B] = back_b;
+ fg[order_type::A] = back_a;
+ }
+ else
+ {
+ fg[0] =
+ fg[1] =
+ fg[2] =
+ fg[3] = image_subpixel_size * image_subpixel_size / 2;
+
+ x_hr &= image_subpixel_mask;
+ y_hr &= image_subpixel_mask;
+
+ weight = (image_subpixel_size - x_hr) *
+ (image_subpixel_size - y_hr);
+ if(x_lr >= 0 && y_lr >= 0 &&
+ x_lr <= maxx && y_lr <= maxy)
+ {
+ fg_ptr = (const value_type*)base_type::source_image().row(y_lr) + (x_lr << 2);
+ fg[0] += weight * *fg_ptr++;
+ fg[1] += weight * *fg_ptr++;
+ fg[2] += weight * *fg_ptr++;
+ fg[3] += weight * *fg_ptr++;
+ }
+ else
+ {
+ fg[order_type::R] += back_r * weight;
+ fg[order_type::G] += back_g * weight;
+ fg[order_type::B] += back_b * weight;
+ fg[order_type::A] += back_a * weight;
+ }
+
+ x_lr++;
+
+ weight = x_hr * (image_subpixel_size - y_hr);
+ if(x_lr >= 0 && y_lr >= 0 &&
+ x_lr <= maxx && y_lr <= maxy)
+ {
+ fg_ptr = (const value_type*)base_type::source_image().row(y_lr) + (x_lr << 2);
+ fg[0] += weight * *fg_ptr++;
+ fg[1] += weight * *fg_ptr++;
+ fg[2] += weight * *fg_ptr++;
+ fg[3] += weight * *fg_ptr++;
+ }
+ else
+ {
+ fg[order_type::R] += back_r * weight;
+ fg[order_type::G] += back_g * weight;
+ fg[order_type::B] += back_b * weight;
+ fg[order_type::A] += back_a * weight;
+ }
+
+ x_lr--;
+ y_lr++;
+
+ weight = (image_subpixel_size - x_hr) * y_hr;
+ if(x_lr >= 0 && y_lr >= 0 &&
+ x_lr <= maxx && y_lr <= maxy)
+ {
+ fg_ptr = (const value_type*)base_type::source_image().row(y_lr) + (x_lr << 2);
+ fg[0] += weight * *fg_ptr++;
+ fg[1] += weight * *fg_ptr++;
+ fg[2] += weight * *fg_ptr++;
+ fg[3] += weight * *fg_ptr++;
+ }
+ else
+ {
+ fg[order_type::R] += back_r * weight;
+ fg[order_type::G] += back_g * weight;
+ fg[order_type::B] += back_b * weight;
+ fg[order_type::A] += back_a * weight;
+ }
+
+ x_lr++;
+
+ weight = x_hr * y_hr;
+ if(x_lr >= 0 && y_lr >= 0 &&
+ x_lr <= maxx && y_lr <= maxy)
+ {
+ fg_ptr = (const value_type*)base_type::source_image().row(y_lr) + (x_lr << 2);
+ fg[0] += weight * *fg_ptr++;
+ fg[1] += weight * *fg_ptr++;
+ fg[2] += weight * *fg_ptr++;
+ fg[3] += weight * *fg_ptr++;
+ }
+ else
+ {
+ fg[order_type::R] += back_r * weight;
+ fg[order_type::G] += back_g * weight;
+ fg[order_type::B] += back_b * weight;
+ fg[order_type::A] += back_a * weight;
+ }
+
+ fg[0] >>= image_subpixel_shift * 2;
+ fg[1] >>= image_subpixel_shift * 2;
+ fg[2] >>= image_subpixel_shift * 2;
+ fg[3] >>= image_subpixel_shift * 2;
+ }
+ }
+
+ span->r = (value_type)fg[order_type::R];
+ span->g = (value_type)fg[order_type::G];
+ span->b = (value_type)fg[order_type::B];
+ span->a = (value_type)fg[order_type::A];
+ ++span;
+ ++base_type::interpolator();
+
+ } while(--len);
+
+ return base_type::allocator().span();
+ }
+ };
+
+
+
+
+
+
+
+ //=======================================span_image_filter_rgba_2x2
+ template<class ColorT,
+ class Order,
+ class Interpolator,
+ class Allocator = span_allocator<ColorT> >
+ class span_image_filter_rgba_2x2 :
+ public span_image_filter<ColorT, Interpolator, Allocator>
+ {
+ public:
+ typedef ColorT color_type;
+ typedef Order order_type;
+ typedef Interpolator interpolator_type;
+ typedef Allocator alloc_type;
+ typedef span_image_filter<color_type, interpolator_type, alloc_type> base_type;
+ typedef typename color_type::value_type value_type;
+ typedef typename color_type::calc_type calc_type;
+ enum
+ {
+ base_shift = color_type::base_shift,
+ base_mask = color_type::base_mask
+ };
+
+ //--------------------------------------------------------------------
+ span_image_filter_rgba_2x2(alloc_type& alloc) : base_type(alloc) {}
+
+ //--------------------------------------------------------------------
+ span_image_filter_rgba_2x2(alloc_type& alloc,
+ const rendering_buffer& src,
+ const color_type& back_color,
+ interpolator_type& inter,
+ const image_filter_lut& filter) :
+ base_type(alloc, src, back_color, inter, &filter)
+ {}
+
+
+ //--------------------------------------------------------------------
+ color_type* generate(int x, int y, unsigned len)
+ {
+ base_type::interpolator().begin(x + base_type::filter_dx_dbl(),
+ y + base_type::filter_dy_dbl(), len);
+
+ calc_type fg[4];
+ value_type back_r = base_type::background_color().r;
+ value_type back_g = base_type::background_color().g;
+ value_type back_b = base_type::background_color().b;
+ value_type back_a = base_type::background_color().a;
+
+ const value_type *fg_ptr;
+
+ color_type* span = base_type::allocator().span();
+ const int16* weight_array = base_type::filter().weight_array() +
+ ((base_type::filter().diameter()/2 - 1) <<
+ image_subpixel_shift);
+
+ int maxx = base_type::source_image().width() - 1;
+ int maxy = base_type::source_image().height() - 1;
+
+ do
+ {
+ int x_hr;
+ int y_hr;
+
+ base_type::interpolator().coordinates(&x_hr, &y_hr);
+
+ x_hr -= base_type::filter_dx_int();
+ y_hr -= base_type::filter_dy_int();
+
+ int x_lr = x_hr >> image_subpixel_shift;
+ int y_lr = y_hr >> image_subpixel_shift;
+
+ unsigned weight;
+ fg[0] = fg[1] = fg[2] = fg[3] = image_filter_size / 2;
+
+ if(x_lr >= 0 && y_lr >= 0 &&
+ x_lr < maxx && y_lr < maxy)
+ {
+ x_hr &= image_subpixel_mask;
+ y_hr &= image_subpixel_mask;
+
+ fg_ptr = (const value_type*)base_type::source_image().row(y_lr) + (x_lr << 2);
+
+ weight = (weight_array[x_hr + image_subpixel_size] *
+ weight_array[y_hr + image_subpixel_size] +
+ image_filter_size / 2) >>
+ image_filter_shift;
+ fg[0] += weight * *fg_ptr++;
+ fg[1] += weight * *fg_ptr++;
+ fg[2] += weight * *fg_ptr++;
+ fg[3] += weight * *fg_ptr++;
+
+ weight = (weight_array[x_hr] *
+ weight_array[y_hr + image_subpixel_size] +
+ image_filter_size / 2) >>
+ image_filter_shift;
+ fg[0] += weight * *fg_ptr++;
+ fg[1] += weight * *fg_ptr++;
+ fg[2] += weight * *fg_ptr++;
+ fg[3] += weight * *fg_ptr++;
+
+ fg_ptr = (const value_type*)base_type::source_image().next_row(fg_ptr - 8);
+
+ weight = (weight_array[x_hr + image_subpixel_size] *
+ weight_array[y_hr] +
+ image_filter_size / 2) >>
+ image_filter_shift;
+ fg[0] += weight * *fg_ptr++;
+ fg[1] += weight * *fg_ptr++;
+ fg[2] += weight * *fg_ptr++;
+ fg[3] += weight * *fg_ptr++;
+
+ weight = (weight_array[x_hr] *
+ weight_array[y_hr] +
+ image_filter_size / 2) >>
+ image_filter_shift;
+ fg[0] += weight * *fg_ptr++;
+ fg[1] += weight * *fg_ptr++;
+ fg[2] += weight * *fg_ptr++;
+ fg[3] += weight * *fg_ptr++;
+
+ fg[0] >>= image_filter_shift;
+ fg[1] >>= image_filter_shift;
+ fg[2] >>= image_filter_shift;
+ fg[3] >>= image_filter_shift;
+
+ if(fg[order_type::A] > base_mask) fg[order_type::A] = base_mask;
+ if(fg[order_type::R] > fg[order_type::A]) fg[order_type::R] = fg[order_type::A];
+ if(fg[order_type::G] > fg[order_type::A]) fg[order_type::G] = fg[order_type::A];
+ if(fg[order_type::B] > fg[order_type::A]) fg[order_type::B] = fg[order_type::A];
+ }
+ else
+ {
+ if(x_lr < -1 || y_lr < -1 ||
+ x_lr > maxx || y_lr > maxy)
+ {
+ fg[order_type::R] = back_r;
+ fg[order_type::G] = back_g;
+ fg[order_type::B] = back_b;
+ fg[order_type::A] = back_a;
+ }
+ else
+ {
+ x_hr &= image_subpixel_mask;
+ y_hr &= image_subpixel_mask;
+
+ weight = (weight_array[x_hr + image_subpixel_size] *
+ weight_array[y_hr + image_subpixel_size] +
+ image_filter_size / 2) >>
+ image_filter_shift;
+ if(x_lr >= 0 && y_lr >= 0 &&
+ x_lr <= maxx && y_lr <= maxy)
+ {
+ fg_ptr = (const value_type*)base_type::source_image().row(y_lr) + (x_lr << 2);
+ fg[0] += weight * *fg_ptr++;
+ fg[1] += weight * *fg_ptr++;
+ fg[2] += weight * *fg_ptr++;
+ fg[3] += weight * *fg_ptr++;
+ }
+ else
+ {
+ fg[order_type::R] += back_r * weight;
+ fg[order_type::G] += back_g * weight;
+ fg[order_type::B] += back_b * weight;
+ fg[order_type::A] += back_a * weight;
+ }
+
+ x_lr++;
+
+ weight = (weight_array[x_hr] *
+ weight_array[y_hr + image_subpixel_size] +
+ image_filter_size / 2) >>
+ image_filter_shift;
+ if(x_lr >= 0 && y_lr >= 0 &&
+ x_lr <= maxx && y_lr <= maxy)
+ {
+ fg_ptr = (const value_type*)base_type::source_image().row(y_lr) + (x_lr << 2);
+ fg[0] += weight * *fg_ptr++;
+ fg[1] += weight * *fg_ptr++;
+ fg[2] += weight * *fg_ptr++;
+ fg[3] += weight * *fg_ptr++;
+ }
+ else
+ {
+ fg[order_type::R] += back_r * weight;
+ fg[order_type::G] += back_g * weight;
+ fg[order_type::B] += back_b * weight;
+ fg[order_type::A] += back_a * weight;
+ }
+
+ x_lr--;
+ y_lr++;
+
+ weight = (weight_array[x_hr + image_subpixel_size] *
+ weight_array[y_hr] +
+ image_filter_size / 2) >>
+ image_filter_shift;
+ if(x_lr >= 0 && y_lr >= 0 &&
+ x_lr <= maxx && y_lr <= maxy)
+ {
+ fg_ptr = (const value_type*)base_type::source_image().row(y_lr) + (x_lr << 2);
+ fg[0] += weight * *fg_ptr++;
+ fg[1] += weight * *fg_ptr++;
+ fg[2] += weight * *fg_ptr++;
+ fg[3] += weight * *fg_ptr++;
+ }
+ else
+ {
+ fg[order_type::R] += back_r * weight;
+ fg[order_type::G] += back_g * weight;
+ fg[order_type::B] += back_b * weight;
+ fg[order_type::A] += back_a * weight;
+ }
+
+ x_lr++;
+
+ weight = (weight_array[x_hr] *
+ weight_array[y_hr] +
+ image_filter_size / 2) >>
+ image_filter_shift;
+ if(x_lr >= 0 && y_lr >= 0 &&
+ x_lr <= maxx && y_lr <= maxy)
+ {
+ fg_ptr = (const value_type*)base_type::source_image().row(y_lr) + (x_lr << 2);
+ fg[0] += weight * *fg_ptr++;
+ fg[1] += weight * *fg_ptr++;
+ fg[2] += weight * *fg_ptr++;
+ fg[3] += weight * *fg_ptr++;
+ }
+ else
+ {
+ fg[order_type::R] += back_r * weight;
+ fg[order_type::G] += back_g * weight;
+ fg[order_type::B] += back_b * weight;
+ fg[order_type::A] += back_a * weight;
+ }
+
+ fg[0] >>= image_filter_shift;
+ fg[1] >>= image_filter_shift;
+ fg[2] >>= image_filter_shift;
+ fg[3] >>= image_filter_shift;
+
+ if(fg[order_type::A] > base_mask) fg[order_type::A] = base_mask;
+ if(fg[order_type::R] > fg[order_type::A]) fg[order_type::R] = fg[order_type::A];
+ if(fg[order_type::G] > fg[order_type::A]) fg[order_type::G] = fg[order_type::A];
+ if(fg[order_type::B] > fg[order_type::A]) fg[order_type::B] = fg[order_type::A];
+ }
+ }
+
+ span->r = (value_type)fg[order_type::R];
+ span->g = (value_type)fg[order_type::G];
+ span->b = (value_type)fg[order_type::B];
+ span->a = (value_type)fg[order_type::A];
+ ++span;
+ ++base_type::interpolator();
+
+ } while(--len);
+
+ return base_type::allocator().span();
+ }
+ };
+
+
+
+
+
+
+
+
+
+
+
+
+
+ //================================================span_image_filter_rgba
+ template<class ColorT,
+ class Order,
+ class Interpolator,
+ class Allocator = span_allocator<ColorT> >
+ class span_image_filter_rgba :
+ public span_image_filter<ColorT, Interpolator, Allocator>
+ {
+ public:
+ typedef ColorT color_type;
+ typedef Order order_type;
+ typedef Interpolator interpolator_type;
+ typedef Allocator alloc_type;
+ typedef span_image_filter<color_type, interpolator_type, alloc_type> base_type;
+ typedef typename color_type::value_type value_type;
+ typedef typename color_type::calc_type calc_type;
+ enum
+ {
+ base_shift = color_type::base_shift,
+ base_mask = color_type::base_mask
+ };
+
+ //--------------------------------------------------------------------
+ span_image_filter_rgba(alloc_type& alloc) : base_type(alloc) {}
+
+ //--------------------------------------------------------------------
+ span_image_filter_rgba(alloc_type& alloc,
+ const rendering_buffer& src,
+ const color_type& back_color,
+ interpolator_type& inter,
+ const image_filter_lut& filter) :
+ base_type(alloc, src, back_color, inter, &filter)
+ {}
+
+ //--------------------------------------------------------------------
+ color_type* generate(int x, int y, unsigned len)
+ {
+ base_type::interpolator().begin(x + base_type::filter_dx_dbl(),
+ y + base_type::filter_dy_dbl(), len);
+
+ int fg[4];
+
+ value_type back_r = base_type::background_color().r;
+ value_type back_g = base_type::background_color().g;
+ value_type back_b = base_type::background_color().b;
+ value_type back_a = base_type::background_color().a;
+
+ const value_type *fg_ptr;
+
+ unsigned diameter = base_type::filter().diameter();
+ int start = base_type::filter().start();
+ int start1 = start - 1;
+ const int16* weight_array = base_type::filter().weight_array();
+
+ unsigned step_back = diameter << 2;
+ color_type* span = base_type::allocator().span();
+
+ int maxx = base_type::source_image().width() + start - 2;
+ int maxy = base_type::source_image().height() + start - 2;
+
+ int maxx2 = base_type::source_image().width() - start - 1;
+ int maxy2 = base_type::source_image().height() - start - 1;
+
+ int x_count;
+ int weight_y;
+
+ do
+ {
+ base_type::interpolator().coordinates(&x, &y);
+
+ x -= base_type::filter_dx_int();
+ y -= base_type::filter_dy_int();
+
+ int x_hr = x;
+ int y_hr = y;
+
+ int x_lr = x_hr >> image_subpixel_shift;
+ int y_lr = y_hr >> image_subpixel_shift;
+
+ fg[0] = fg[1] = fg[2] = fg[3] = image_filter_size / 2;
+
+ int x_fract = x_hr & image_subpixel_mask;
+ unsigned y_count = diameter;
+
+ if(x_lr >= -start && y_lr >= -start &&
+ x_lr <= maxx && y_lr <= maxy)
+ {
+ y_hr = image_subpixel_mask - (y_hr & image_subpixel_mask);
+ fg_ptr = (const value_type*)base_type::source_image().row(y_lr + start) + ((x_lr + start) << 2);
+ do
+ {
+ x_count = diameter;
+ weight_y = weight_array[y_hr];
+ x_hr = image_subpixel_mask - x_fract;
+
+ do
+ {
+ int weight = (weight_y * weight_array[x_hr] +
+ image_filter_size / 2) >>
+ image_filter_shift;
+
+ fg[0] += *fg_ptr++ * weight;
+ fg[1] += *fg_ptr++ * weight;
+ fg[2] += *fg_ptr++ * weight;
+ fg[3] += *fg_ptr++ * weight;
+
+ x_hr += image_subpixel_size;
+
+ } while(--x_count);
+
+ y_hr += image_subpixel_size;
+ fg_ptr = (const value_type*)base_type::source_image().next_row(fg_ptr - step_back);
+
+ } while(--y_count);
+
+ fg[0] >>= image_filter_shift;
+ fg[1] >>= image_filter_shift;
+ fg[2] >>= image_filter_shift;
+ fg[3] >>= image_filter_shift;
+
+ if(fg[0] < 0) fg[0] = 0;
+ if(fg[1] < 0) fg[1] = 0;
+ if(fg[2] < 0) fg[2] = 0;
+ if(fg[3] < 0) fg[3] = 0;
+
+ if(fg[order_type::A] > base_mask) fg[order_type::A] = base_mask;
+ if(fg[order_type::R] > fg[order_type::A]) fg[order_type::R] = fg[order_type::A];
+ if(fg[order_type::G] > fg[order_type::A]) fg[order_type::G] = fg[order_type::A];
+ if(fg[order_type::B] > fg[order_type::A]) fg[order_type::B] = fg[order_type::A];
+ }
+ else
+ {
+ if(x_lr < start1 || y_lr < start1 ||
+ x_lr > maxx2 || y_lr > maxy2)
+ {
+ fg[order_type::R] = back_r;
+ fg[order_type::G] = back_g;
+ fg[order_type::B] = back_b;
+ fg[order_type::A] = back_a;
+ }
+ else
+ {
+ y_lr = (y >> image_subpixel_shift) + start;
+ y_hr = image_subpixel_mask - (y_hr & image_subpixel_mask);
+
+ do
+ {
+ x_count = diameter;
+ weight_y = weight_array[y_hr];
+ x_lr = (x >> image_subpixel_shift) + start;
+ x_hr = image_subpixel_mask - x_fract;
+
+ do
+ {
+ int weight = (weight_y * weight_array[x_hr] +
+ image_filter_size / 2) >>
+ image_filter_shift;
+
+ if(x_lr >= 0 && y_lr >= 0 &&
+ x_lr < int(base_type::source_image().width()) &&
+ y_lr < int(base_type::source_image().height()))
+ {
+ fg_ptr = (const value_type*)base_type::source_image().row(y_lr) + (x_lr << 2);
+ fg[0] += *fg_ptr++ * weight;
+ fg[1] += *fg_ptr++ * weight;
+ fg[2] += *fg_ptr++ * weight;
+ fg[3] += *fg_ptr++ * weight;
+ }
+ else
+ {
+ fg[order_type::R] += back_r * weight;
+ fg[order_type::G] += back_g * weight;
+ fg[order_type::B] += back_b * weight;
+ fg[order_type::A] += back_a * weight;
+ }
+ x_hr += image_subpixel_size;
+ x_lr++;
+
+ } while(--x_count);
+
+ y_hr += image_subpixel_size;
+ y_lr++;
+
+ } while(--y_count);
+
+
+ fg[0] >>= image_filter_shift;
+ fg[1] >>= image_filter_shift;
+ fg[2] >>= image_filter_shift;
+ fg[3] >>= image_filter_shift;
+
+ if(fg[0] < 0) fg[0] = 0;
+ if(fg[1] < 0) fg[1] = 0;
+ if(fg[2] < 0) fg[2] = 0;
+ if(fg[3] < 0) fg[3] = 0;
+
+ if(fg[order_type::A] > base_mask) fg[order_type::A] = base_mask;
+ if(fg[order_type::R] > fg[order_type::A]) fg[order_type::R] = fg[order_type::A];
+ if(fg[order_type::G] > fg[order_type::A]) fg[order_type::G] = fg[order_type::A];
+ if(fg[order_type::B] > fg[order_type::A]) fg[order_type::B] = fg[order_type::A];
+ }
+ }
+
+ span->r = fg[order_type::R];
+ span->g = fg[order_type::G];
+ span->b = fg[order_type::B];
+ span->a = fg[order_type::A];
+ ++span;
+ ++base_type::interpolator();
+
+ } while(--len);
+
+ return base_type::allocator().span();
+ }
+
+ };
+
+
+}
+
+
+#endif
+
+
+
diff --git a/agg/inc/agg_span_image_resample.h b/agg/inc/agg_span_image_resample.h
new file mode 100755
index 000000000000..f4dfd57455d7
--- /dev/null
+++ b/agg/inc/agg_span_image_resample.h
@@ -0,0 +1,180 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+#ifndef AGG_SPAN_IMAGE_RESAMPLE_INCLUDED
+#define AGG_SPAN_IMAGE_RESAMPLE_INCLUDED
+
+#include "agg_span_image_filter.h"
+#include "agg_span_interpolator_linear.h"
+
+
+namespace agg
+{
+
+
+ //=====================================================span_image_resample
+ template<class ColorT, class Interpolator, class Allocator>
+ class span_image_resample :
+ public span_image_filter<ColorT, Interpolator, Allocator>
+ {
+ public:
+ typedef ColorT color_type;
+ typedef Interpolator interpolator_type;
+ typedef Allocator alloc_type;
+ typedef span_image_filter<color_type, interpolator_type, alloc_type> base_type;
+
+ //--------------------------------------------------------------------
+ span_image_resample(alloc_type& alloc) :
+ base_type(alloc),
+ m_scale_limit(20),
+ m_blur_x(image_subpixel_size),
+ m_blur_y(image_subpixel_size)
+ {}
+
+ //--------------------------------------------------------------------
+ span_image_resample(alloc_type& alloc,
+ const rendering_buffer& src,
+ const color_type& back_color,
+ interpolator_type& inter,
+ const image_filter_lut& filter) :
+ base_type(alloc, src, back_color, inter, &filter),
+ m_scale_limit(20),
+ m_blur_x(image_subpixel_size),
+ m_blur_y(image_subpixel_size)
+ {}
+
+
+ //--------------------------------------------------------------------
+ int scale_limit() const { return m_scale_limit; }
+ void scale_limit(int v) { m_scale_limit = v; }
+
+ //--------------------------------------------------------------------
+ double blur_x() const { return double(m_blur_x) / double(image_subpixel_size); }
+ double blur_y() const { return double(m_blur_y) / double(image_subpixel_size); }
+ void blur_x(double v) { m_blur_x = int(v * double(image_subpixel_size) + 0.5); }
+ void blur_y(double v) { m_blur_y = int(v * double(image_subpixel_size) + 0.5); }
+ void blur(double v) { m_blur_x =
+ m_blur_y = int(v * double(image_subpixel_size) + 0.5); }
+
+ protected:
+ int m_scale_limit;
+ int m_blur_x;
+ int m_blur_y;
+ };
+
+
+
+
+
+
+
+
+ //==============================================span_image_resample_affine
+ template<class ColorT, class Allocator>
+ class span_image_resample_affine :
+ public span_image_filter<ColorT, span_interpolator_linear<trans_affine>, Allocator>
+ {
+ public:
+ typedef ColorT color_type;
+ typedef span_interpolator_linear<trans_affine> interpolator_type;
+ typedef Allocator alloc_type;
+ typedef span_image_filter<color_type, interpolator_type, alloc_type> base_type;
+
+ //--------------------------------------------------------------------
+ span_image_resample_affine(alloc_type& alloc) :
+ base_type(alloc),
+ m_scale_limit(200.0),
+ m_blur_x(1.0),
+ m_blur_y(1.0)
+ {}
+
+ //--------------------------------------------------------------------
+ span_image_resample_affine(alloc_type& alloc,
+ const rendering_buffer& src,
+ const color_type& back_color,
+ interpolator_type& inter,
+ const image_filter_lut& filter_) :
+ base_type(alloc, src, back_color, inter, &filter_),
+ m_scale_limit(200.0),
+ m_blur_x(1.0),
+ m_blur_y(1.0)
+ {}
+
+
+ //--------------------------------------------------------------------
+ int scale_limit() const { return int(m_scale_limit); }
+ void scale_limit(int v) { m_scale_limit = v; }
+
+ //--------------------------------------------------------------------
+ double blur_x() const { return m_blur_x; }
+ double blur_y() const { return m_blur_y; }
+ void blur_x(double v) { m_blur_x = v; }
+ void blur_y(double v) { m_blur_y = v; }
+ void blur(double v) { m_blur_x = m_blur_y = v; }
+
+
+ //--------------------------------------------------------------------
+ void prepare(unsigned max_span_len)
+ {
+ base_type::prepare(max_span_len);
+
+ double scale_x;
+ double scale_y;
+
+ base_type::interpolator().transformer().scaling_abs(&scale_x, &scale_y);
+
+ m_rx = image_subpixel_size;
+ m_ry = image_subpixel_size;
+ m_rx_inv = image_subpixel_size;
+ m_ry_inv = image_subpixel_size;
+
+ scale_x *= m_blur_x;
+ scale_y *= m_blur_y;
+
+ if(scale_x * scale_y > m_scale_limit)
+ {
+ scale_x = scale_x * m_scale_limit / (scale_x * scale_y);
+ scale_y = scale_y * m_scale_limit / (scale_x * scale_y);
+ }
+
+ if(scale_x > 1.0001)
+ {
+ if(scale_x > m_scale_limit) scale_x = m_scale_limit;
+ m_rx = int( scale_x * double(image_subpixel_size) + 0.5);
+ m_rx_inv = int(1.0/scale_x * double(image_subpixel_size) + 0.5);
+ }
+
+ if(scale_y > 1.0001)
+ {
+ if(scale_y > m_scale_limit) scale_y = m_scale_limit;
+ m_ry = int( scale_y * double(image_subpixel_size) + 0.5);
+ m_ry_inv = int(1.0/scale_y * double(image_subpixel_size) + 0.5);
+ }
+ }
+
+ protected:
+ int m_rx;
+ int m_ry;
+ int m_rx_inv;
+ int m_ry_inv;
+
+ private:
+ double m_scale_limit;
+ double m_blur_x;
+ double m_blur_y;
+ };
+
+}
+
+#endif
diff --git a/agg/inc/agg_span_image_resample_gray.h b/agg/inc/agg_span_image_resample_gray.h
new file mode 100755
index 000000000000..3d046462cd8c
--- /dev/null
+++ b/agg/inc/agg_span_image_resample_gray.h
@@ -0,0 +1,359 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+
+#ifndef AGG_SPAN_IMAGE_RESAMPLE_GRAY_INCLUDED
+#define AGG_SPAN_IMAGE_RESAMPLE_GRAY_INCLUDED
+
+#include "agg_color_gray.h"
+#include "agg_span_image_resample.h"
+
+namespace agg
+{
+
+ //========================================span_image_resample_gray_affine
+ template<class ColorT,
+ class Allocator = span_allocator<ColorT> >
+ class span_image_resample_gray_affine :
+ public span_image_resample_affine<ColorT, Allocator>
+ {
+ public:
+ typedef ColorT color_type;
+ typedef Allocator alloc_type;
+ typedef span_image_resample_affine<color_type, alloc_type> base_type;
+ typedef typename base_type::interpolator_type interpolator_type;
+ typedef typename color_type::value_type value_type;
+ typedef typename color_type::long_type long_type;
+ enum
+ {
+ base_shift = color_type::base_shift,
+ base_mask = color_type::base_mask,
+ downscale_shift = image_filter_shift
+ };
+
+ //--------------------------------------------------------------------
+ span_image_resample_gray_affine(alloc_type& alloc) : base_type(alloc) {}
+
+ //--------------------------------------------------------------------
+ span_image_resample_gray_affine(alloc_type& alloc,
+ const rendering_buffer& src,
+ const color_type& back_color,
+ interpolator_type& inter,
+ const image_filter_lut& filter) :
+ base_type(alloc, src, back_color, inter, filter)
+ {}
+
+
+ //--------------------------------------------------------------------
+ color_type* generate(int x, int y, unsigned len)
+ {
+ base_type::interpolator().begin(x + base_type::filter_dx_dbl(),
+ y + base_type::filter_dy_dbl(), len);
+
+ long_type fg;
+ long_type src_alpha;
+ value_type back_v = base_type::background_color().v;
+ value_type back_a = base_type::background_color().a;
+
+ color_type* span = base_type::allocator().span();
+
+ int diameter = base_type::filter().diameter();
+ int filter_size = diameter << image_subpixel_shift;
+ int radius_x = (diameter * base_type::m_rx) >> 1;
+ int radius_y = (diameter * base_type::m_ry) >> 1;
+ int maxx = base_type::source_image().width() - 1;
+ int maxy = base_type::source_image().height() - 1;
+
+ const int16* weight_array = base_type::filter().weight_array();
+
+ do
+ {
+ base_type::interpolator().coordinates(&x, &y);
+
+ x += base_type::filter_dx_int() - radius_x;
+ y += base_type::filter_dy_int() - radius_y;
+
+ fg = src_alpha = image_filter_size / 2;
+
+ int y_lr = y >> image_subpixel_shift;
+ int y_hr = ((image_subpixel_mask - (y & image_subpixel_mask)) *
+ base_type::m_ry_inv) >>
+ image_subpixel_shift;
+ int total_weight = 0;
+ int x_lr_ini = x >> image_subpixel_shift;
+ int x_hr_ini = ((image_subpixel_mask - (x & image_subpixel_mask)) *
+ base_type::m_rx_inv) >>
+ image_subpixel_shift;
+ do
+ {
+ int weight_y = weight_array[y_hr];
+ int x_lr = x_lr_ini;
+ int x_hr = x_hr_ini;
+ if(y_lr >= 0 && y_lr <= maxy)
+ {
+ const value_type* fg_ptr = (const value_type*)
+ base_type::source_image().row(y_lr) + x_lr;
+ do
+ {
+ int weight = (weight_y * weight_array[x_hr] +
+ image_filter_size / 2) >>
+ downscale_shift;
+
+ if(x_lr >= 0 && x_lr <= maxx)
+ {
+ fg += *fg_ptr * weight;
+ src_alpha += base_mask * weight;
+ }
+ else
+ {
+ fg += back_v * weight;
+ src_alpha += back_a * weight;
+ }
+ total_weight += weight;
+ x_hr += base_type::m_rx_inv;
+ ++fg_ptr;
+ ++x_lr;
+ }
+ while(x_hr < filter_size);
+ }
+ else
+ {
+ do
+ {
+ int weight = (weight_y * weight_array[x_hr] +
+ image_filter_size / 2) >>
+ downscale_shift;
+
+ total_weight += weight;
+ fg += back_v * weight;
+ src_alpha += back_a * weight;
+ x_hr += base_type::m_rx_inv;
+ }
+ while(x_hr < filter_size);
+ }
+ y_hr += base_type::m_ry_inv;
+ ++y_lr;
+ }
+ while(y_hr < filter_size);
+
+ fg /= total_weight;
+ src_alpha /= total_weight;
+
+ if(fg < 0) fg = 0;
+ if(src_alpha < 0) src_alpha = 0;
+
+ if(src_alpha > base_mask) src_alpha = base_mask;
+ if(fg > src_alpha) fg = src_alpha;
+
+ span->v = (value_type)fg;
+ span->a = (value_type)src_alpha;
+
+ ++span;
+ ++base_type::interpolator();
+ } while(--len);
+ return base_type::allocator().span();
+ }
+ };
+
+
+
+
+
+
+
+ //==============================================span_image_resample_gray
+ template<class ColorT,
+ class Interpolator,
+ class Allocator = span_allocator<ColorT> >
+ class span_image_resample_gray :
+ public span_image_resample<ColorT, Interpolator, Allocator>
+ {
+ public:
+ typedef ColorT color_type;
+ typedef Interpolator interpolator_type;
+ typedef Allocator alloc_type;
+ typedef span_image_resample<color_type, interpolator_type, alloc_type> base_type;
+ typedef typename color_type::value_type value_type;
+ typedef typename color_type::long_type long_type;
+ enum
+ {
+ base_shift = color_type::base_shift,
+ base_mask = color_type::base_mask,
+ downscale_shift = image_filter_shift
+ };
+
+ //--------------------------------------------------------------------
+ span_image_resample_gray(alloc_type& alloc) :
+ base_type(alloc)
+ {}
+
+ //--------------------------------------------------------------------
+ span_image_resample_gray(alloc_type& alloc,
+ const rendering_buffer& src,
+ const color_type& back_color,
+ interpolator_type& inter,
+ const image_filter_lut& filter) :
+ base_type(alloc, src, back_color, inter, filter)
+ {}
+
+ //--------------------------------------------------------------------
+ color_type* generate(int x, int y, unsigned len)
+ {
+ color_type* span = base_type::allocator().span();
+ base_type::interpolator().begin(x + base_type::filter_dx_dbl(),
+ y + base_type::filter_dy_dbl(), len);
+ long_type fg;
+ long_type src_alpha;
+ value_type back_v = base_type::background_color().v;
+ value_type back_a = base_type::background_color().a;
+
+ int diameter = base_type::filter().diameter();
+ int filter_size = diameter << image_subpixel_shift;
+
+ const int16* weight_array = base_type::filter().weight_array();
+
+ do
+ {
+ int rx;
+ int ry;
+ int rx_inv = image_subpixel_size;
+ int ry_inv = image_subpixel_size;
+ base_type::interpolator().coordinates(&x, &y);
+ base_type::interpolator().local_scale(&rx, &ry);
+
+ rx = (rx * base_type::m_blur_x) >> image_subpixel_shift;
+ ry = (ry * base_type::m_blur_y) >> image_subpixel_shift;
+
+ if(rx < image_subpixel_size)
+ {
+ rx = image_subpixel_size;
+ }
+ else
+ {
+ if(rx > image_subpixel_size * base_type::m_scale_limit)
+ {
+ rx = image_subpixel_size * base_type::m_scale_limit;
+ }
+ rx_inv = image_subpixel_size * image_subpixel_size / rx;
+ }
+
+ if(ry < image_subpixel_size)
+ {
+ ry = image_subpixel_size;
+ }
+ else
+ {
+ if(ry > image_subpixel_size * base_type::m_scale_limit)
+ {
+ ry = image_subpixel_size * base_type::m_scale_limit;
+ }
+ ry_inv = image_subpixel_size * image_subpixel_size / ry;
+ }
+
+ int radius_x = (diameter * rx) >> 1;
+ int radius_y = (diameter * ry) >> 1;
+ int maxx = base_type::source_image().width() - 1;
+ int maxy = base_type::source_image().height() - 1;
+
+ x += base_type::filter_dx_int() - radius_x;
+ y += base_type::filter_dy_int() - radius_y;
+
+ fg = src_alpha = image_filter_size / 2;
+
+ int y_lr = y >> image_subpixel_shift;
+ int y_hr = ((image_subpixel_mask - (y & image_subpixel_mask)) *
+ ry_inv) >>
+ image_subpixel_shift;
+ int total_weight = 0;
+ int x_lr_ini = x >> image_subpixel_shift;
+ int x_hr_ini = ((image_subpixel_mask - (x & image_subpixel_mask)) *
+ rx_inv) >>
+ image_subpixel_shift;
+
+ do
+ {
+ int weight_y = weight_array[y_hr];
+ int x_lr = x_lr_ini;
+ int x_hr = x_hr_ini;
+ if(y_lr >= 0 && y_lr <= maxy)
+ {
+ const value_type* fg_ptr = (const value_type*)
+ base_type::source_image().row(y_lr) + x_lr;
+ do
+ {
+ int weight = (weight_y * weight_array[x_hr] +
+ image_filter_size / 2) >>
+ downscale_shift;
+
+ if(x_lr >= 0 && x_lr <= maxx)
+ {
+ fg += *fg_ptr * weight;
+ src_alpha += base_mask * weight;
+ }
+ else
+ {
+ fg += back_v * weight;
+ src_alpha += back_a * weight;
+ }
+ total_weight += weight;
+ x_hr += rx_inv;
+ ++fg_ptr;
+ ++x_lr;
+ }
+ while(x_hr < filter_size);
+ }
+ else
+ {
+ do
+ {
+ int weight = (weight_y * weight_array[x_hr] +
+ image_filter_size / 2) >>
+ downscale_shift;
+
+ total_weight += weight;
+ fg += back_v * weight;
+ src_alpha += back_a * weight;
+ x_hr += rx_inv;
+ }
+ while(x_hr < filter_size);
+ }
+ y_hr += ry_inv;
+ ++y_lr;
+ }
+ while(y_hr < filter_size);
+
+ fg /= total_weight;
+ src_alpha /= total_weight;
+
+ if(fg < 0) fg = 0;
+ if(src_alpha < 0) src_alpha = 0;
+
+ if(src_alpha > base_mask) src_alpha = base_mask;
+ if(fg > src_alpha) fg = src_alpha;
+
+ span->v = (value_type)fg;
+ span->a = (value_type)src_alpha;
+
+ ++span;
+ ++base_type::interpolator();
+ } while(--len);
+ return base_type::allocator().span();
+ }
+
+ };
+
+}
+
+
+#endif
diff --git a/agg/inc/agg_span_image_resample_rgb.h b/agg/inc/agg_span_image_resample_rgb.h
new file mode 100755
index 000000000000..de25dd4b382b
--- /dev/null
+++ b/agg/inc/agg_span_image_resample_rgb.h
@@ -0,0 +1,393 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+
+#ifndef AGG_SPAN_IMAGE_RESAMPLE_RGB_INCLUDED
+#define AGG_SPAN_IMAGE_RESAMPLE_RGB_INCLUDED
+
+#include "agg_color_rgba.h"
+#include "agg_span_image_resample.h"
+
+namespace agg
+{
+
+ //=========================================span_image_resample_rgb_affine
+ template<class ColorT,
+ class Order,
+ class Allocator = span_allocator<ColorT> >
+ class span_image_resample_rgb_affine :
+ public span_image_resample_affine<ColorT, Allocator>
+ {
+ public:
+ typedef ColorT color_type;
+ typedef Order order_type;
+ typedef Allocator alloc_type;
+ typedef span_image_resample_affine<color_type, alloc_type> base_type;
+ typedef typename base_type::interpolator_type interpolator_type;
+ typedef typename color_type::value_type value_type;
+ typedef typename color_type::long_type long_type;
+ enum
+ {
+ base_shift = color_type::base_shift,
+ base_mask = color_type::base_mask,
+ downscale_shift = image_filter_shift
+ };
+
+ //--------------------------------------------------------------------
+ span_image_resample_rgb_affine(alloc_type& alloc) : base_type(alloc) {}
+
+ //--------------------------------------------------------------------
+ span_image_resample_rgb_affine(alloc_type& alloc,
+ const rendering_buffer& src,
+ const color_type& back_color,
+ interpolator_type& inter,
+ const image_filter_lut& filter) :
+ base_type(alloc, src, back_color, inter, filter)
+ {}
+
+
+ //--------------------------------------------------------------------
+ color_type* generate(int x, int y, unsigned len)
+ {
+ base_type::interpolator().begin(x + base_type::filter_dx_dbl(),
+ y + base_type::filter_dy_dbl(), len);
+
+ long_type fg[4];
+ value_type back_r = base_type::background_color().r;
+ value_type back_g = base_type::background_color().g;
+ value_type back_b = base_type::background_color().b;
+ value_type back_a = base_type::background_color().a;
+
+ color_type* span = base_type::allocator().span();
+
+ int diameter = base_type::filter().diameter();
+ int filter_size = diameter << image_subpixel_shift;
+ int radius_x = (diameter * base_type::m_rx) >> 1;
+ int radius_y = (diameter * base_type::m_ry) >> 1;
+ int maxx = base_type::source_image().width() - 1;
+ int maxy = base_type::source_image().height() - 1;
+
+ const int16* weight_array = base_type::filter().weight_array();
+
+ do
+ {
+ base_type::interpolator().coordinates(&x, &y);
+
+ x += base_type::filter_dx_int() - radius_x;
+ y += base_type::filter_dy_int() - radius_y;
+
+ fg[0] = fg[1] = fg[2] = fg[3] = image_filter_size / 2;
+
+ int y_lr = y >> image_subpixel_shift;
+ int y_hr = ((image_subpixel_mask - (y & image_subpixel_mask)) *
+ base_type::m_ry_inv) >>
+ image_subpixel_shift;
+ int total_weight = 0;
+ int x_lr_ini = x >> image_subpixel_shift;
+ int x_hr_ini = ((image_subpixel_mask - (x & image_subpixel_mask)) *
+ base_type::m_rx_inv) >>
+ image_subpixel_shift;
+ do
+ {
+ int weight_y = weight_array[y_hr];
+ int x_lr = x_lr_ini;
+ int x_hr = x_hr_ini;
+ if(y_lr >= 0 && y_lr <= maxy)
+ {
+ const value_type* fg_ptr = (const value_type*)
+ base_type::source_image().row(y_lr) + x_lr * 3;
+ do
+ {
+ int weight = (weight_y * weight_array[x_hr] +
+ image_filter_size / 2) >>
+ downscale_shift;
+
+ if(x_lr >= 0 && x_lr <= maxx)
+ {
+ fg[0] += fg_ptr[0] * weight;
+ fg[1] += fg_ptr[1] * weight;
+ fg[2] += fg_ptr[2] * weight;
+ fg[3] += base_mask * weight;
+ }
+ else
+ {
+ fg[order_type::R] += back_r * weight;
+ fg[order_type::G] += back_g * weight;
+ fg[order_type::B] += back_b * weight;
+ fg[3] += back_a * weight;
+ }
+ total_weight += weight;
+ fg_ptr += 3;
+ x_hr += base_type::m_rx_inv;
+ ++x_lr;
+ }
+ while(x_hr < filter_size);
+ }
+ else
+ {
+ do
+ {
+ int weight = (weight_y * weight_array[x_hr] +
+ image_filter_size / 2) >>
+ downscale_shift;
+
+ total_weight += weight;
+ fg[order_type::R] += back_r * weight;
+ fg[order_type::G] += back_g * weight;
+ fg[order_type::B] += back_b * weight;
+ fg[3] += back_a * weight;
+ x_hr += base_type::m_rx_inv;
+ }
+ while(x_hr < filter_size);
+ }
+ y_hr += base_type::m_ry_inv;
+ ++y_lr;
+ }
+ while(y_hr < filter_size);
+
+ fg[0] /= total_weight;
+ fg[1] /= total_weight;
+ fg[2] /= total_weight;
+ fg[3] /= total_weight;
+
+ if(fg[0] < 0) fg[0] = 0;
+ if(fg[1] < 0) fg[1] = 0;
+ if(fg[2] < 0) fg[2] = 0;
+ if(fg[3] < 0) fg[3] = 0;
+
+ if(fg[3] > base_mask) fg[3] = base_mask;
+ if(fg[0] > fg[3]) fg[0] = fg[3];
+ if(fg[1] > fg[3]) fg[1] = fg[3];
+ if(fg[2] > fg[3]) fg[2] = fg[3];
+
+ span->r = (value_type)fg[order_type::R];
+ span->g = (value_type)fg[order_type::G];
+ span->b = (value_type)fg[order_type::B];
+ span->a = (value_type)fg[3];
+
+ ++span;
+ ++base_type::interpolator();
+ } while(--len);
+ return base_type::allocator().span();
+ }
+ };
+
+
+
+
+
+
+
+ //===============================================span_image_resample_rgb
+ template<class ColorT,
+ class Order,
+ class Interpolator,
+ class Allocator = span_allocator<ColorT> >
+ class span_image_resample_rgb :
+ public span_image_resample<ColorT, Interpolator, Allocator>
+ {
+ public:
+ typedef ColorT color_type;
+ typedef Order order_type;
+ typedef Interpolator interpolator_type;
+ typedef Allocator alloc_type;
+ typedef span_image_resample<color_type, interpolator_type, alloc_type> base_type;
+ typedef typename color_type::value_type value_type;
+ typedef typename color_type::long_type long_type;
+ enum
+ {
+ base_shift = color_type::base_shift,
+ base_mask = color_type::base_mask,
+ downscale_shift = image_filter_shift
+ };
+
+ //--------------------------------------------------------------------
+ span_image_resample_rgb(alloc_type& alloc) :
+ base_type(alloc)
+ {}
+
+ //--------------------------------------------------------------------
+ span_image_resample_rgb(alloc_type& alloc,
+ const rendering_buffer& src,
+ const color_type& back_color,
+ interpolator_type& inter,
+ const image_filter_lut& filter) :
+ base_type(alloc, src, back_color, inter, filter)
+ {}
+
+ //--------------------------------------------------------------------
+ color_type* generate(int x, int y, unsigned len)
+ {
+ color_type* span = base_type::allocator().span();
+ base_type::interpolator().begin(x + base_type::filter_dx_dbl(),
+ y + base_type::filter_dy_dbl(), len);
+ long_type fg[4];
+ value_type back_r = base_type::background_color().r;
+ value_type back_g = base_type::background_color().g;
+ value_type back_b = base_type::background_color().b;
+ value_type back_a = base_type::background_color().a;
+
+ int diameter = base_type::filter().diameter();
+ int filter_size = diameter << image_subpixel_shift;
+
+ const int16* weight_array = base_type::filter().weight_array();
+
+ do
+ {
+ int rx;
+ int ry;
+ int rx_inv = image_subpixel_size;
+ int ry_inv = image_subpixel_size;
+ base_type::interpolator().coordinates(&x, &y);
+ base_type::interpolator().local_scale(&rx, &ry);
+
+ rx = (rx * base_type::m_blur_x) >> image_subpixel_shift;
+ ry = (ry * base_type::m_blur_y) >> image_subpixel_shift;
+
+ if(rx < image_subpixel_size)
+ {
+ rx = image_subpixel_size;
+ }
+ else
+ {
+ if(rx > image_subpixel_size * base_type::m_scale_limit)
+ {
+ rx = image_subpixel_size * base_type::m_scale_limit;
+ }
+ rx_inv = image_subpixel_size * image_subpixel_size / rx;
+ }
+
+ if(ry < image_subpixel_size)
+ {
+ ry = image_subpixel_size;
+ }
+ else
+ {
+ if(ry > image_subpixel_size * base_type::m_scale_limit)
+ {
+ ry = image_subpixel_size * base_type::m_scale_limit;
+ }
+ ry_inv = image_subpixel_size * image_subpixel_size / ry;
+ }
+
+ int radius_x = (diameter * rx) >> 1;
+ int radius_y = (diameter * ry) >> 1;
+ int maxx = base_type::source_image().width() - 1;
+ int maxy = base_type::source_image().height() - 1;
+
+ x += base_type::filter_dx_int() - radius_x;
+ y += base_type::filter_dy_int() - radius_y;
+
+ fg[0] = fg[1] = fg[2] = fg[3] = image_filter_size / 2;
+
+ int y_lr = y >> image_subpixel_shift;
+ int y_hr = ((image_subpixel_mask - (y & image_subpixel_mask)) *
+ ry_inv) >>
+ image_subpixel_shift;
+ int total_weight = 0;
+ int x_lr_ini = x >> image_subpixel_shift;
+ int x_hr_ini = ((image_subpixel_mask - (x & image_subpixel_mask)) *
+ rx_inv) >>
+ image_subpixel_shift;
+
+ do
+ {
+ int weight_y = weight_array[y_hr];
+ int x_lr = x_lr_ini;
+ int x_hr = x_hr_ini;
+ if(y_lr >= 0 && y_lr <= maxy)
+ {
+ const value_type* fg_ptr = (const value_type*)
+ base_type::source_image().row(y_lr) + x_lr * 3;
+ do
+ {
+ int weight = (weight_y * weight_array[x_hr] +
+ image_filter_size / 2) >>
+ downscale_shift;
+
+ if(x_lr >= 0 && x_lr <= maxx)
+ {
+ fg[0] += fg_ptr[0] * weight;
+ fg[1] += fg_ptr[1] * weight;
+ fg[2] += fg_ptr[2] * weight;
+ fg[3] += base_mask * weight;
+ }
+ else
+ {
+ fg[order_type::R] += back_r * weight;
+ fg[order_type::G] += back_g * weight;
+ fg[order_type::B] += back_b * weight;
+ fg[3] += back_a * weight;
+ }
+ total_weight += weight;
+ fg_ptr += 3;
+ x_hr += rx_inv;
+ ++x_lr;
+ }
+ while(x_hr < filter_size);
+ }
+ else
+ {
+ do
+ {
+ int weight = (weight_y * weight_array[x_hr] +
+ image_filter_size / 2) >>
+ downscale_shift;
+
+ total_weight += weight;
+ fg[order_type::R] += back_r * weight;
+ fg[order_type::G] += back_g * weight;
+ fg[order_type::B] += back_b * weight;
+ fg[3] += back_a * weight;
+ x_hr += rx_inv;
+ }
+ while(x_hr < filter_size);
+ }
+ y_hr += ry_inv;
+ ++y_lr;
+ }
+ while(y_hr < filter_size);
+
+ fg[0] /= total_weight;
+ fg[1] /= total_weight;
+ fg[2] /= total_weight;
+ fg[3] /= total_weight;
+
+ if(fg[0] < 0) fg[0] = 0;
+ if(fg[1] < 0) fg[1] = 0;
+ if(fg[2] < 0) fg[2] = 0;
+ if(fg[3] < 0) fg[3] = 0;
+
+ if(fg[3] > base_mask) fg[3] = base_mask;
+ if(fg[0] > fg[3]) fg[0] = fg[3];
+ if(fg[1] > fg[3]) fg[1] = fg[3];
+ if(fg[2] > fg[3]) fg[2] = fg[3];
+
+ span->r = (value_type)fg[order_type::R];
+ span->g = (value_type)fg[order_type::G];
+ span->b = (value_type)fg[order_type::B];
+ span->a = (value_type)fg[3];
+
+ ++span;
+ ++base_type::interpolator();
+ } while(--len);
+ return base_type::allocator().span();
+ }
+
+ };
+
+}
+
+
+#endif
diff --git a/agg/inc/agg_span_image_resample_rgba.h b/agg/inc/agg_span_image_resample_rgba.h
new file mode 100755
index 000000000000..40f7ccb42e00
--- /dev/null
+++ b/agg/inc/agg_span_image_resample_rgba.h
@@ -0,0 +1,393 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+
+#ifndef AGG_SPAN_IMAGE_RESAMPLE_RGBA_INCLUDED
+#define AGG_SPAN_IMAGE_RESAMPLE_RGBA_INCLUDED
+
+#include "agg_color_rgba.h"
+#include "agg_span_image_resample.h"
+
+namespace agg
+{
+
+ //========================================span_image_resample_rgba_affine
+ template<class ColorT,
+ class Order,
+ class Allocator = span_allocator<ColorT> >
+ class span_image_resample_rgba_affine :
+ public span_image_resample_affine<ColorT, Allocator>
+ {
+ public:
+ typedef ColorT color_type;
+ typedef Order order_type;
+ typedef Allocator alloc_type;
+ typedef span_image_resample_affine<color_type, alloc_type> base_type;
+ typedef typename base_type::interpolator_type interpolator_type;
+ typedef typename color_type::value_type value_type;
+ typedef typename color_type::long_type long_type;
+ enum
+ {
+ base_shift = color_type::base_shift,
+ base_mask = color_type::base_mask,
+ downscale_shift = image_filter_shift
+ };
+
+ //--------------------------------------------------------------------
+ span_image_resample_rgba_affine(alloc_type& alloc) : base_type(alloc) {}
+
+ //--------------------------------------------------------------------
+ span_image_resample_rgba_affine(alloc_type& alloc,
+ const rendering_buffer& src,
+ const color_type& back_color,
+ interpolator_type& inter,
+ const image_filter_lut& filter) :
+ base_type(alloc, src, back_color, inter, filter)
+ {}
+
+
+ //--------------------------------------------------------------------
+ color_type* generate(int x, int y, unsigned len)
+ {
+ base_type::interpolator().begin(x + base_type::filter_dx_dbl(),
+ y + base_type::filter_dy_dbl(), len);
+
+ long_type fg[4];
+ value_type back_r = base_type::background_color().r;
+ value_type back_g = base_type::background_color().g;
+ value_type back_b = base_type::background_color().b;
+ value_type back_a = base_type::background_color().a;
+
+ color_type* span = base_type::allocator().span();
+
+ int diameter = base_type::filter().diameter();
+ int filter_size = diameter << image_subpixel_shift;
+ int radius_x = (diameter * base_type::m_rx) >> 1;
+ int radius_y = (diameter * base_type::m_ry) >> 1;
+ int maxx = base_type::source_image().width() - 1;
+ int maxy = base_type::source_image().height() - 1;
+
+ const int16* weight_array = base_type::filter().weight_array();
+
+ do
+ {
+ base_type::interpolator().coordinates(&x, &y);
+
+ x += base_type::filter_dx_int() - radius_x;
+ y += base_type::filter_dy_int() - radius_y;
+
+ fg[0] = fg[1] = fg[2] = fg[3] = image_filter_size / 2;
+
+ int y_lr = y >> image_subpixel_shift;
+ int y_hr = ((image_subpixel_mask - (y & image_subpixel_mask)) *
+ base_type::m_ry_inv) >>
+ image_subpixel_shift;
+ int total_weight = 0;
+ int x_lr_ini = x >> image_subpixel_shift;
+ int x_hr_ini = ((image_subpixel_mask - (x & image_subpixel_mask)) *
+ base_type::m_rx_inv) >>
+ image_subpixel_shift;
+ do
+ {
+ int weight_y = weight_array[y_hr];
+ int x_lr = x_lr_ini;
+ int x_hr = x_hr_ini;
+ if(y_lr >= 0 && y_lr <= maxy)
+ {
+ const value_type* fg_ptr = (const value_type*)
+ base_type::source_image().row(y_lr) + (x_lr << 2);
+ do
+ {
+ int weight = (weight_y * weight_array[x_hr] +
+ image_filter_size / 2) >>
+ downscale_shift;
+
+ if(x_lr >= 0 && x_lr <= maxx)
+ {
+ fg[0] += fg_ptr[0] * weight;
+ fg[1] += fg_ptr[1] * weight;
+ fg[2] += fg_ptr[2] * weight;
+ fg[3] += fg_ptr[3] * weight;
+ }
+ else
+ {
+ fg[order_type::R] += back_r * weight;
+ fg[order_type::G] += back_g * weight;
+ fg[order_type::B] += back_b * weight;
+ fg[order_type::A] += back_a * weight;
+ }
+ total_weight += weight;
+ fg_ptr += 4;
+ x_hr += base_type::m_rx_inv;
+ ++x_lr;
+ }
+ while(x_hr < filter_size);
+ }
+ else
+ {
+ do
+ {
+ int weight = (weight_y * weight_array[x_hr] +
+ image_filter_size / 2) >>
+ downscale_shift;
+
+ total_weight += weight;
+ fg[order_type::R] += back_r * weight;
+ fg[order_type::G] += back_g * weight;
+ fg[order_type::B] += back_b * weight;
+ fg[order_type::A] += back_a * weight;
+ x_hr += base_type::m_rx_inv;
+ }
+ while(x_hr < filter_size);
+ }
+ y_hr += base_type::m_ry_inv;
+ ++y_lr;
+ }
+ while(y_hr < filter_size);
+
+ fg[0] /= total_weight;
+ fg[1] /= total_weight;
+ fg[2] /= total_weight;
+ fg[3] /= total_weight;
+
+ if(fg[0] < 0) fg[0] = 0;
+ if(fg[1] < 0) fg[1] = 0;
+ if(fg[2] < 0) fg[2] = 0;
+ if(fg[3] < 0) fg[3] = 0;
+
+ if(fg[order_type::A] > base_mask) fg[order_type::A] = base_mask;
+ if(fg[order_type::R] > fg[order_type::A]) fg[order_type::R] = fg[order_type::A];
+ if(fg[order_type::G] > fg[order_type::A]) fg[order_type::G] = fg[order_type::A];
+ if(fg[order_type::B] > fg[order_type::A]) fg[order_type::B] = fg[order_type::A];
+
+ span->r = (value_type)fg[order_type::R];
+ span->g = (value_type)fg[order_type::G];
+ span->b = (value_type)fg[order_type::B];
+ span->a = (value_type)fg[order_type::A];
+
+ ++span;
+ ++base_type::interpolator();
+ } while(--len);
+ return base_type::allocator().span();
+ }
+ };
+
+
+
+
+
+
+
+ //==============================================span_image_resample_rgba
+ template<class ColorT,
+ class Order,
+ class Interpolator,
+ class Allocator = span_allocator<ColorT> >
+ class span_image_resample_rgba :
+ public span_image_resample<ColorT, Interpolator, Allocator>
+ {
+ public:
+ typedef ColorT color_type;
+ typedef Order order_type;
+ typedef Interpolator interpolator_type;
+ typedef Allocator alloc_type;
+ typedef span_image_resample<color_type, interpolator_type, alloc_type> base_type;
+ typedef typename color_type::value_type value_type;
+ typedef typename color_type::long_type long_type;
+ enum
+ {
+ base_shift = color_type::base_shift,
+ base_mask = color_type::base_mask,
+ downscale_shift = image_filter_shift
+ };
+
+ //--------------------------------------------------------------------
+ span_image_resample_rgba(alloc_type& alloc) :
+ base_type(alloc)
+ {}
+
+ //--------------------------------------------------------------------
+ span_image_resample_rgba(alloc_type& alloc,
+ const rendering_buffer& src,
+ const color_type& back_color,
+ interpolator_type& inter,
+ const image_filter_lut& filter) :
+ base_type(alloc, src, back_color, inter, filter)
+ {}
+
+ //--------------------------------------------------------------------
+ color_type* generate(int x, int y, unsigned len)
+ {
+ color_type* span = base_type::allocator().span();
+ base_type::interpolator().begin(x + base_type::filter_dx_dbl(),
+ y + base_type::filter_dy_dbl(), len);
+ long_type fg[4];
+ value_type back_r = base_type::background_color().r;
+ value_type back_g = base_type::background_color().g;
+ value_type back_b = base_type::background_color().b;
+ value_type back_a = base_type::background_color().a;
+
+ int diameter = base_type::filter().diameter();
+ int filter_size = diameter << image_subpixel_shift;
+
+ const int16* weight_array = base_type::filter().weight_array();
+
+ do
+ {
+ int rx;
+ int ry;
+ int rx_inv = image_subpixel_size;
+ int ry_inv = image_subpixel_size;
+ base_type::interpolator().coordinates(&x, &y);
+ base_type::interpolator().local_scale(&rx, &ry);
+
+ rx = (rx * base_type::m_blur_x) >> image_subpixel_shift;
+ ry = (ry * base_type::m_blur_y) >> image_subpixel_shift;
+
+ if(rx < image_subpixel_size)
+ {
+ rx = image_subpixel_size;
+ }
+ else
+ {
+ if(rx > image_subpixel_size * base_type::m_scale_limit)
+ {
+ rx = image_subpixel_size * base_type::m_scale_limit;
+ }
+ rx_inv = image_subpixel_size * image_subpixel_size / rx;
+ }
+
+ if(ry < image_subpixel_size)
+ {
+ ry = image_subpixel_size;
+ }
+ else
+ {
+ if(ry > image_subpixel_size * base_type::m_scale_limit)
+ {
+ ry = image_subpixel_size * base_type::m_scale_limit;
+ }
+ ry_inv = image_subpixel_size * image_subpixel_size / ry;
+ }
+
+ int radius_x = (diameter * rx) >> 1;
+ int radius_y = (diameter * ry) >> 1;
+ int maxx = base_type::source_image().width() - 1;
+ int maxy = base_type::source_image().height() - 1;
+
+ x += base_type::filter_dx_int() - radius_x;
+ y += base_type::filter_dy_int() - radius_y;
+
+ fg[0] = fg[1] = fg[2] = fg[3] = image_filter_size / 2;
+
+ int y_lr = y >> image_subpixel_shift;
+ int y_hr = ((image_subpixel_mask - (y & image_subpixel_mask)) *
+ ry_inv) >>
+ image_subpixel_shift;
+ int total_weight = 0;
+ int x_lr_ini = x >> image_subpixel_shift;
+ int x_hr_ini = ((image_subpixel_mask - (x & image_subpixel_mask)) *
+ rx_inv) >>
+ image_subpixel_shift;
+
+ do
+ {
+ int weight_y = weight_array[y_hr];
+ int x_lr = x_lr_ini;
+ int x_hr = x_hr_ini;
+ if(y_lr >= 0 && y_lr <= maxy)
+ {
+ const value_type* fg_ptr = (const value_type*)
+ base_type::source_image().row(y_lr) + (x_lr << 2);
+ do
+ {
+ int weight = (weight_y * weight_array[x_hr] +
+ image_filter_size / 2) >>
+ downscale_shift;
+
+ if(x_lr >= 0 && x_lr <= maxx)
+ {
+ fg[0] += fg_ptr[0] * weight;
+ fg[1] += fg_ptr[1] * weight;
+ fg[2] += fg_ptr[2] * weight;
+ fg[3] += fg_ptr[3] * weight;
+ }
+ else
+ {
+ fg[order_type::R] += back_r * weight;
+ fg[order_type::G] += back_g * weight;
+ fg[order_type::B] += back_b * weight;
+ fg[order_type::A] += back_a * weight;
+ }
+ total_weight += weight;
+ fg_ptr += 4;
+ x_hr += rx_inv;
+ ++x_lr;
+ }
+ while(x_hr < filter_size);
+ }
+ else
+ {
+ do
+ {
+ int weight = (weight_y * weight_array[x_hr] +
+ image_filter_size / 2) >>
+ downscale_shift;
+
+ total_weight += weight;
+ fg[order_type::R] += back_r * weight;
+ fg[order_type::G] += back_g * weight;
+ fg[order_type::B] += back_b * weight;
+ fg[order_type::A] += back_a * weight;
+ x_hr += rx_inv;
+ }
+ while(x_hr < filter_size);
+ }
+ y_hr += ry_inv;
+ ++y_lr;
+ }
+ while(y_hr < filter_size);
+
+ fg[0] /= total_weight;
+ fg[1] /= total_weight;
+ fg[2] /= total_weight;
+ fg[3] /= total_weight;
+
+ if(fg[0] < 0) fg[0] = 0;
+ if(fg[1] < 0) fg[1] = 0;
+ if(fg[2] < 0) fg[2] = 0;
+ if(fg[3] < 0) fg[3] = 0;
+
+ if(fg[order_type::A] > base_mask) fg[order_type::A] = base_mask;
+ if(fg[order_type::R] > fg[order_type::R]) fg[order_type::R] = fg[order_type::R];
+ if(fg[order_type::G] > fg[order_type::G]) fg[order_type::G] = fg[order_type::G];
+ if(fg[order_type::B] > fg[order_type::B]) fg[order_type::B] = fg[order_type::B];
+
+ span->r = (value_type)fg[order_type::R];
+ span->g = (value_type)fg[order_type::G];
+ span->b = (value_type)fg[order_type::B];
+ span->a = (value_type)fg[order_type::A];
+
+ ++span;
+ ++base_type::interpolator();
+ } while(--len);
+ return base_type::allocator().span();
+ }
+
+ };
+
+}
+
+
+#endif
diff --git a/agg/inc/agg_span_interpolator_adaptor.h b/agg/inc/agg_span_interpolator_adaptor.h
new file mode 100755
index 000000000000..ead42c13590c
--- /dev/null
+++ b/agg/inc/agg_span_interpolator_adaptor.h
@@ -0,0 +1,77 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+
+#ifndef AGG_SPAN_INTERPOLATOR_ADAPTOR_INCLUDED
+#define AGG_SPAN_INTERPOLATOR_ADAPTOR_INCLUDED
+
+#include "agg_basics.h"
+
+namespace agg
+{
+
+ //===============================================span_interpolator_adaptor
+ template<class Interpolator, class Distortion>
+ class span_interpolator_adaptor : public Interpolator
+ {
+ public:
+ typedef Interpolator base_type;
+ typedef typename base_type::trans_type trans_type;
+ typedef Distortion distortion_type;
+
+ //--------------------------------------------------------------------
+ span_interpolator_adaptor() {}
+ span_interpolator_adaptor(const trans_type& trans,
+ const distortion_type& dist) :
+ base_type(trans),
+ m_distortion(&dist)
+ {
+ }
+
+ //--------------------------------------------------------------------
+ span_interpolator_adaptor(const trans_type& trans,
+ const distortion_type& dist,
+ double x, double y, unsigned len) :
+ base_type(trans, x, y, len),
+ m_distortion(&dist)
+ {
+ }
+
+ //--------------------------------------------------------------------
+ const distortion_type& distortion() const
+ {
+ return *m_distortion;
+ }
+
+ //--------------------------------------------------------------------
+ void distortion(const distortion_type& dist)
+ {
+ m_distortion = dist;
+ }
+
+ //--------------------------------------------------------------------
+ void coordinates(int* x, int* y) const
+ {
+ base_type::coordinates(x, y);
+ m_distortion->calculate(x, y);
+ }
+
+ private:
+ //--------------------------------------------------------------------
+ const distortion_type* m_distortion;
+ };
+}
+
+
+#endif
diff --git a/agg/inc/agg_span_interpolator_linear.h b/agg/inc/agg_span_interpolator_linear.h
new file mode 100755
index 000000000000..3cc2426be450
--- /dev/null
+++ b/agg/inc/agg_span_interpolator_linear.h
@@ -0,0 +1,232 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+
+#ifndef AGG_SPAN_INTERPOLATOR_LINEAR_INCLUDED
+#define AGG_SPAN_INTERPOLATOR_LINEAR_INCLUDED
+
+#include "agg_basics.h"
+#include "agg_dda_line.h"
+#include "agg_trans_affine.h"
+
+namespace agg
+{
+
+ //================================================span_interpolator_linear
+ template<class Transformer = trans_affine, unsigned SubpixelShift = 8>
+ class span_interpolator_linear
+ {
+ public:
+ typedef Transformer trans_type;
+
+ enum
+ {
+ subpixel_shift = SubpixelShift,
+ subpixel_size = 1 << subpixel_shift
+ };
+
+ //--------------------------------------------------------------------
+ span_interpolator_linear() {}
+ span_interpolator_linear(const trans_type& trans) : m_trans(&trans) {}
+ span_interpolator_linear(const trans_type& trans,
+ double x, double y, unsigned len) :
+ m_trans(&trans)
+ {
+ begin(x, y, len);
+ }
+
+ //----------------------------------------------------------------
+ const trans_type& transformer() const { return *m_trans; }
+ void transformer(const trans_type& trans) { m_trans = &trans; }
+
+ //----------------------------------------------------------------
+ void begin(double x, double y, unsigned len)
+ {
+ double tx;
+ double ty;
+
+ tx = x;
+ ty = y;
+ m_trans->transform(&tx, &ty);
+ int x1 = int(tx * subpixel_size);
+ int y1 = int(ty * subpixel_size);
+
+ tx = x + len;
+ ty = y;
+ m_trans->transform(&tx, &ty);
+ int x2 = int(tx * subpixel_size);
+ int y2 = int(ty * subpixel_size);
+
+ m_li_x = dda2_line_interpolator(x1, x2, len);
+ m_li_y = dda2_line_interpolator(y1, y2, len);
+ }
+
+ //----------------------------------------------------------------
+ void resynchronize(double xe, double ye, unsigned len)
+ {
+ m_trans->transform(&xe, &ye);
+ m_li_x = dda2_line_interpolator(m_li_x.y(), int(xe * subpixel_size), len);
+ m_li_y = dda2_line_interpolator(m_li_y.y(), int(ye * subpixel_size), len);
+ }
+
+ //----------------------------------------------------------------
+ void operator++()
+ {
+ ++m_li_x;
+ ++m_li_y;
+ }
+
+ //----------------------------------------------------------------
+ void coordinates(int* x, int* y) const
+ {
+ *x = m_li_x.y();
+ *y = m_li_y.y();
+ }
+
+ private:
+ const trans_type* m_trans;
+ dda2_line_interpolator m_li_x;
+ dda2_line_interpolator m_li_y;
+ };
+
+
+
+
+
+
+ //=====================================span_interpolator_linear_subdiv
+ template<class Transformer = trans_affine, unsigned SubpixelShift = 8>
+ class span_interpolator_linear_subdiv
+ {
+ public:
+ typedef Transformer trans_type;
+
+ enum
+ {
+ subpixel_shift = SubpixelShift,
+ subpixel_size = 1 << subpixel_shift
+ };
+
+
+ //----------------------------------------------------------------
+ span_interpolator_linear_subdiv() :
+ m_subdiv_shift(4),
+ m_subdiv_size(1 << m_subdiv_shift),
+ m_subdiv_mask(m_subdiv_size - 1) {}
+
+ span_interpolator_linear_subdiv(const trans_type& trans,
+ unsigned subdiv_shift = 4) :
+ m_subdiv_shift(subdiv_shift),
+ m_subdiv_size(1 << m_subdiv_shift),
+ m_subdiv_mask(m_subdiv_size - 1),
+ m_trans(&trans) {}
+
+ span_interpolator_linear_subdiv(const trans_type& trans,
+ double x, double y, unsigned len,
+ unsigned subdiv_shift = 4) :
+ m_subdiv_shift(subdiv_shift),
+ m_subdiv_size(1 << m_subdiv_shift),
+ m_subdiv_mask(m_subdiv_size - 1),
+ m_trans(&trans)
+ {
+ begin(x, y, len);
+ }
+
+ //----------------------------------------------------------------
+ const trans_type& transformer() const { return *m_trans; }
+ void transformer(const trans_type& trans) { m_trans = &trans; }
+
+ //----------------------------------------------------------------
+ unsigned subdiv_shift() const { return m_subdiv_shift; }
+ void subdiv_shift(unsigned shift)
+ {
+ m_subdiv_shift = shift;
+ m_subdiv_size = 1 << m_subdiv_shift;
+ m_subdiv_mask = m_subdiv_size - 1;
+ }
+
+ //----------------------------------------------------------------
+ void begin(double x, double y, unsigned len)
+ {
+ double tx;
+ double ty;
+ m_pos = 1;
+ m_src_x = int(x * subpixel_size) + subpixel_size;
+ m_src_y = y;
+ m_len = len;
+
+ if(len > m_subdiv_size) len = m_subdiv_size;
+ tx = x;
+ ty = y;
+ m_trans->transform(&tx, &ty);
+ int x1 = int(tx * subpixel_size);
+ int y1 = int(ty * subpixel_size);
+
+ tx = x + len;
+ ty = y;
+ m_trans->transform(&tx, &ty);
+
+ m_li_x = dda2_line_interpolator(x1, int(tx * subpixel_size), len);
+ m_li_y = dda2_line_interpolator(y1, int(ty * subpixel_size), len);
+ }
+
+ //----------------------------------------------------------------
+ void operator++()
+ {
+ ++m_li_x;
+ ++m_li_y;
+ if(m_pos >= m_subdiv_size)
+ {
+ unsigned len = m_len;
+ if(len > m_subdiv_size) len = m_subdiv_size;
+ double tx = double(m_src_x) / double(subpixel_size) + len;
+ double ty = m_src_y;
+ m_trans->transform(&tx, &ty);
+ m_li_x = dda2_line_interpolator(m_li_x.y(), int(tx * subpixel_size), len);
+ m_li_y = dda2_line_interpolator(m_li_y.y(), int(ty * subpixel_size), len);
+ m_pos = 0;
+ }
+ m_src_x += subpixel_size;
+ ++m_pos;
+ --m_len;
+ }
+
+ //----------------------------------------------------------------
+ void coordinates(int* x, int* y) const
+ {
+ *x = m_li_x.y();
+ *y = m_li_y.y();
+ }
+
+ private:
+ unsigned m_subdiv_shift;
+ unsigned m_subdiv_size;
+ unsigned m_subdiv_mask;
+ const trans_type* m_trans;
+ dda2_line_interpolator m_li_x;
+ dda2_line_interpolator m_li_y;
+ int m_src_x;
+ double m_src_y;
+ unsigned m_pos;
+ unsigned m_len;
+ };
+
+
+}
+
+
+
+#endif
+
+
diff --git a/agg/inc/agg_span_interpolator_persp.h b/agg/inc/agg_span_interpolator_persp.h
new file mode 100755
index 000000000000..632a56449f28
--- /dev/null
+++ b/agg/inc/agg_span_interpolator_persp.h
@@ -0,0 +1,462 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+#ifndef AGG_SPAN_INTERPOLATOR_PERSP_INCLUDED
+#define AGG_SPAN_INTERPOLATOR_PERSP_INCLUDED
+
+#include "agg_trans_perspective.h"
+#include "agg_dda_line.h"
+
+namespace agg
+{
+
+
+
+ //===========================================span_interpolator_persp_exact
+ template<unsigned SubpixelShift = 8>
+ class span_interpolator_persp_exact
+ {
+ public:
+ typedef trans_perspective trans_type;
+ typedef trans_perspective::iterator_x iterator_type;
+ enum
+ {
+ subpixel_shift = SubpixelShift,
+ subpixel_size = 1 << subpixel_shift
+ };
+
+ //--------------------------------------------------------------------
+ span_interpolator_persp_exact() {}
+
+ //--------------------------------------------------------------------
+ // Arbitrary quadrangle transformations
+ span_interpolator_persp_exact(const double* src, const double* dst)
+ {
+ quad_to_quad(src, dst);
+ }
+
+ //--------------------------------------------------------------------
+ // Direct transformations
+ span_interpolator_persp_exact(double x1, double y1,
+ double x2, double y2,
+ const double* quad)
+ {
+ rect_to_quad(x1, y1, x2, y2, quad);
+ }
+
+ //--------------------------------------------------------------------
+ // Reverse transformations
+ span_interpolator_persp_exact(const double* quad,
+ double x1, double y1,
+ double x2, double y2)
+ {
+ quad_to_rect(quad, x1, y1, x2, y2);
+ }
+
+ //--------------------------------------------------------------------
+ // Set the transformations using two arbitrary quadrangles.
+ void quad_to_quad(const double* src, const double* dst)
+ {
+ m_trans_dir.quad_to_quad(src, dst);
+ m_trans_inv.quad_to_quad(dst, src);
+ }
+
+ //--------------------------------------------------------------------
+ // Set the direct transformations, i.e., rectangle -> quadrangle
+ void rect_to_quad(double x1, double y1, double x2, double y2,
+ const double* quad)
+ {
+ double src[8];
+ src[0] = src[6] = x1;
+ src[2] = src[4] = x2;
+ src[1] = src[3] = y1;
+ src[5] = src[7] = y2;
+ quad_to_quad(src, quad);
+ }
+
+
+ //--------------------------------------------------------------------
+ // Set the reverse transformations, i.e., quadrangle -> rectangle
+ void quad_to_rect(const double* quad,
+ double x1, double y1, double x2, double y2)
+ {
+ double dst[8];
+ dst[0] = dst[6] = x1;
+ dst[2] = dst[4] = x2;
+ dst[1] = dst[3] = y1;
+ dst[5] = dst[7] = y2;
+ quad_to_quad(quad, dst);
+ }
+
+ //--------------------------------------------------------------------
+ // Check if the equations were solved successfully
+ bool is_valid() const { return m_trans_dir.is_valid(); }
+
+ //----------------------------------------------------------------
+ void begin(double x, double y, unsigned len)
+ {
+ m_iterator = m_trans_dir.begin(x, y, 1.0);
+ double xt = m_iterator.x;
+ double yt = m_iterator.y;
+
+ double dx;
+ double dy;
+ const double delta = 1/double(subpixel_size);
+ dx = xt + delta;
+ dy = yt;
+ m_trans_inv.transform(&dx, &dy);
+ dx -= x;
+ dy -= y;
+ int sx1 = int(subpixel_size/sqrt(dx*dx + dy*dy)) >> subpixel_shift;
+ dx = xt;
+ dy = yt + delta;
+ m_trans_inv.transform(&dx, &dy);
+ dx -= x;
+ dy -= y;
+ int sy1 = int(subpixel_size/sqrt(dx*dx + dy*dy)) >> subpixel_shift;
+
+ x += len;
+ xt = x;
+ yt = y;
+ m_trans_dir.transform(&xt, &yt);
+
+ dx = xt + delta;
+ dy = yt;
+ m_trans_inv.transform(&dx, &dy);
+ dx -= x;
+ dy -= y;
+ int sx2 = int(subpixel_size/sqrt(dx*dx + dy*dy)) >> subpixel_shift;
+ dx = xt;
+ dy = yt + delta;
+ m_trans_inv.transform(&dx, &dy);
+ dx -= x;
+ dy -= y;
+ int sy2 = int(subpixel_size/sqrt(dx*dx + dy*dy)) >> subpixel_shift;
+
+ m_scale_x = dda2_line_interpolator(sx1, sx2, len);
+ m_scale_y = dda2_line_interpolator(sy1, sy2, len);
+ }
+
+
+ //----------------------------------------------------------------
+ void resynchronize(double xe, double ye, unsigned len)
+ {
+ // Assume x1,y1 are equal to the ones at the previous end point
+ int sx1 = m_scale_x.y();
+ int sy1 = m_scale_y.y();
+
+ // Calculate transformed coordinates at x2,y2
+ double xt = xe;
+ double yt = ye;
+ m_trans_dir.transform(&xt, &yt);
+
+ const double delta = 1/double(subpixel_size);
+ double dx;
+ double dy;
+
+ // Calculate scale by X at x2,y2
+ dx = xt + delta;
+ dy = yt;
+ m_trans_inv.transform(&dx, &dy);
+ dx -= xe;
+ dy -= ye;
+ int sx2 = int(subpixel_size/sqrt(dx*dx + dy*dy)) >> subpixel_shift;
+
+ // Calculate scale by Y at x2,y2
+ dx = xt;
+ dy = yt + delta;
+ m_trans_inv.transform(&dx, &dy);
+ dx -= xe;
+ dy -= ye;
+ int sy2 = int(subpixel_size/sqrt(dx*dx + dy*dy)) >> subpixel_shift;
+
+ // Initialize the interpolators
+ m_scale_x = dda2_line_interpolator(sx1, sx2, len);
+ m_scale_y = dda2_line_interpolator(sy1, sy2, len);
+ }
+
+
+
+ //----------------------------------------------------------------
+ void operator++()
+ {
+ ++m_iterator;
+ ++m_scale_x;
+ ++m_scale_y;
+ }
+
+ //----------------------------------------------------------------
+ void coordinates(int* x, int* y) const
+ {
+ *x = int(m_iterator.x * subpixel_size + 0.5);
+ *y = int(m_iterator.y * subpixel_size + 0.5);
+ }
+
+ //----------------------------------------------------------------
+ void local_scale(int* x, int* y)
+ {
+ *x = m_scale_x.y();
+ *y = m_scale_y.y();
+ }
+
+ //----------------------------------------------------------------
+ void transform(double* x, double* y) const
+ {
+ m_trans_dir.transform(x, y);
+ }
+
+ private:
+ trans_type m_trans_dir;
+ trans_type m_trans_inv;
+ iterator_type m_iterator;
+ dda2_line_interpolator m_scale_x;
+ dda2_line_interpolator m_scale_y;
+ };
+
+
+
+
+
+
+
+
+
+
+
+ //============================================span_interpolator_persp_lerp
+ template<unsigned SubpixelShift = 8>
+ class span_interpolator_persp_lerp
+ {
+ public:
+ typedef trans_perspective trans_type;
+ enum
+ {
+ subpixel_shift = SubpixelShift,
+ subpixel_size = 1 << subpixel_shift
+ };
+
+ //--------------------------------------------------------------------
+ span_interpolator_persp_lerp() {}
+
+ //--------------------------------------------------------------------
+ // Arbitrary quadrangle transformations
+ span_interpolator_persp_lerp(const double* src, const double* dst)
+ {
+ quad_to_quad(src, dst);
+ }
+
+ //--------------------------------------------------------------------
+ // Direct transformations
+ span_interpolator_persp_lerp(double x1, double y1,
+ double x2, double y2,
+ const double* quad)
+ {
+ rect_to_quad(x1, y1, x2, y2, quad);
+ }
+
+ //--------------------------------------------------------------------
+ // Reverse transformations
+ span_interpolator_persp_lerp(const double* quad,
+ double x1, double y1,
+ double x2, double y2)
+ {
+ quad_to_rect(quad, x1, y1, x2, y2);
+ }
+
+ //--------------------------------------------------------------------
+ // Set the transformations using two arbitrary quadrangles.
+ void quad_to_quad(const double* src, const double* dst)
+ {
+ m_trans_dir.quad_to_quad(src, dst);
+ m_trans_inv.quad_to_quad(dst, src);
+ }
+
+ //--------------------------------------------------------------------
+ // Set the direct transformations, i.e., rectangle -> quadrangle
+ void rect_to_quad(double x1, double y1, double x2, double y2,
+ const double* quad)
+ {
+ double src[8];
+ src[0] = src[6] = x1;
+ src[2] = src[4] = x2;
+ src[1] = src[3] = y1;
+ src[5] = src[7] = y2;
+ quad_to_quad(src, quad);
+ }
+
+
+ //--------------------------------------------------------------------
+ // Set the reverse transformations, i.e., quadrangle -> rectangle
+ void quad_to_rect(const double* quad,
+ double x1, double y1, double x2, double y2)
+ {
+ double dst[8];
+ dst[0] = dst[6] = x1;
+ dst[2] = dst[4] = x2;
+ dst[1] = dst[3] = y1;
+ dst[5] = dst[7] = y2;
+ quad_to_quad(quad, dst);
+ }
+
+ //--------------------------------------------------------------------
+ // Check if the equations were solved successfully
+ bool is_valid() const { return m_trans_dir.is_valid(); }
+
+ //----------------------------------------------------------------
+ void begin(double x, double y, unsigned len)
+ {
+ // Calculate transformed coordinates at x1,y1
+ double xt = x;
+ double yt = y;
+ m_trans_dir.transform(&xt, &yt);
+ int x1 = int(xt * subpixel_size);
+ int y1 = int(yt * subpixel_size);
+
+ double dx;
+ double dy;
+ const double delta = 1/double(subpixel_size);
+
+ // Calculate scale by X at x1,y1
+ dx = xt + delta;
+ dy = yt;
+ m_trans_inv.transform(&dx, &dy);
+ dx -= x;
+ dy -= y;
+ int sx1 = int(subpixel_size/sqrt(dx*dx + dy*dy)) >> subpixel_shift;
+
+ // Calculate scale by Y at x1,y1
+ dx = xt;
+ dy = yt + delta;
+ m_trans_inv.transform(&dx, &dy);
+ dx -= x;
+ dy -= y;
+ int sy1 = int(subpixel_size/sqrt(dx*dx + dy*dy)) >> subpixel_shift;
+
+ // Calculate transformed coordinates at x2,y2
+ x += len;
+ xt = x;
+ yt = y;
+ m_trans_dir.transform(&xt, &yt);
+ int x2 = int(xt * subpixel_size);
+ int y2 = int(yt * subpixel_size);
+
+ // Calculate scale by X at x2,y2
+ dx = xt + delta;
+ dy = yt;
+ m_trans_inv.transform(&dx, &dy);
+ dx -= x;
+ dy -= y;
+ int sx2 = int(subpixel_size/sqrt(dx*dx + dy*dy)) >> subpixel_shift;
+
+ // Calculate scale by Y at x2,y2
+ dx = xt;
+ dy = yt + delta;
+ m_trans_inv.transform(&dx, &dy);
+ dx -= x;
+ dy -= y;
+ int sy2 = int(subpixel_size/sqrt(dx*dx + dy*dy)) >> subpixel_shift;
+
+ // Initialize the interpolators
+ m_coord_x = dda2_line_interpolator(x1, x2, len);
+ m_coord_y = dda2_line_interpolator(y1, y2, len);
+ m_scale_x = dda2_line_interpolator(sx1, sx2, len);
+ m_scale_y = dda2_line_interpolator(sy1, sy2, len);
+ }
+
+
+ //----------------------------------------------------------------
+ void resynchronize(double xe, double ye, unsigned len)
+ {
+ // Assume x1,y1 are equal to the ones at the previous end point
+ int x1 = m_coord_x.y();
+ int y1 = m_coord_y.y();
+ int sx1 = m_scale_x.y();
+ int sy1 = m_scale_y.y();
+
+ // Calculate transformed coordinates at x2,y2
+ double xt = xe;
+ double yt = ye;
+ m_trans_dir.transform(&xt, &yt);
+ int x2 = int(xt * subpixel_size);
+ int y2 = int(yt * subpixel_size);
+
+ const double delta = 1/double(subpixel_size);
+ double dx;
+ double dy;
+
+ // Calculate scale by X at x2,y2
+ dx = xt + delta;
+ dy = yt;
+ m_trans_inv.transform(&dx, &dy);
+ dx -= xe;
+ dy -= ye;
+ int sx2 = int(subpixel_size/sqrt(dx*dx + dy*dy)) >> subpixel_shift;
+
+ // Calculate scale by Y at x2,y2
+ dx = xt;
+ dy = yt + delta;
+ m_trans_inv.transform(&dx, &dy);
+ dx -= xe;
+ dy -= ye;
+ int sy2 = int(subpixel_size/sqrt(dx*dx + dy*dy)) >> subpixel_shift;
+
+ // Initialize the interpolators
+ m_coord_x = dda2_line_interpolator(x1, x2, len);
+ m_coord_y = dda2_line_interpolator(y1, y2, len);
+ m_scale_x = dda2_line_interpolator(sx1, sx2, len);
+ m_scale_y = dda2_line_interpolator(sy1, sy2, len);
+ }
+
+
+ //----------------------------------------------------------------
+ void operator++()
+ {
+ ++m_coord_x;
+ ++m_coord_y;
+ ++m_scale_x;
+ ++m_scale_y;
+ }
+
+ //----------------------------------------------------------------
+ void coordinates(int* x, int* y) const
+ {
+ *x = m_coord_x.y();
+ *y = m_coord_y.y();
+ }
+
+ //----------------------------------------------------------------
+ void local_scale(int* x, int* y)
+ {
+ *x = m_scale_x.y();
+ *y = m_scale_y.y();
+ }
+
+ //----------------------------------------------------------------
+ void transform(double* x, double* y) const
+ {
+ m_trans_dir.transform(x, y);
+ }
+
+ private:
+ trans_type m_trans_dir;
+ trans_type m_trans_inv;
+ dda2_line_interpolator m_coord_x;
+ dda2_line_interpolator m_coord_y;
+ dda2_line_interpolator m_scale_x;
+ dda2_line_interpolator m_scale_y;
+ };
+
+}
+
+#endif
diff --git a/agg/inc/agg_span_interpolator_trans.h b/agg/inc/agg_span_interpolator_trans.h
new file mode 100755
index 000000000000..5caaffe9e5c0
--- /dev/null
+++ b/agg/inc/agg_span_interpolator_trans.h
@@ -0,0 +1,97 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// Horizontal span interpolator for use with an arbitrary transformer
+// The efficiency highly depends on the operations done in the transformer
+//
+//----------------------------------------------------------------------------
+
+#ifndef AGG_SPAN_INTERPOLATOR_TRANS_INCLUDED
+#define AGG_SPAN_INTERPOLATOR_TRANS_INCLUDED
+
+#include "agg_basics.h"
+
+namespace agg
+{
+ //=================================================span_interpolator_trans
+ template<class Transformer, unsigned SubpixelShift = 8>
+ class span_interpolator_trans
+ {
+ public:
+ typedef Transformer trans_type;
+ enum
+ {
+ subpixel_shift = SubpixelShift,
+ subpixel_size = 1 << subpixel_shift
+ };
+
+ //--------------------------------------------------------------------
+ span_interpolator_trans() {}
+ span_interpolator_trans(const trans_type& trans) : m_trans(&trans) {}
+ span_interpolator_trans(const trans_type& trans,
+ double x, double y, unsigned) :
+ m_trans(&trans)
+ {
+ begin(x, y, 0);
+ }
+
+ //----------------------------------------------------------------
+ const trans_type& transformer() const { return *m_trans; }
+ void transformer(const trans_type& trans) { m_trans = &trans; }
+
+ //----------------------------------------------------------------
+ void begin(double x, double y, unsigned)
+ {
+ m_x = x;
+ m_y = y;
+ m_trans->transform(&x, &y);
+ m_ix = int(x * subpixel_size);
+ m_iy = int(y * subpixel_size);
+ }
+
+ //----------------------------------------------------------------
+ void next(double, double, unsigned)
+ {
+ }
+
+ //----------------------------------------------------------------
+ void operator++()
+ {
+ m_x += 1.0;
+ double x = m_x;
+ double y = m_y;
+ m_trans->transform(&x, &y);
+ m_ix = int(x * subpixel_size);
+ m_iy = int(y * subpixel_size);
+ }
+
+ //----------------------------------------------------------------
+ void coordinates(int* x, int* y) const
+ {
+ *x = m_ix;
+ *y = m_iy;
+ }
+
+ private:
+ const trans_type* m_trans;
+ double m_x;
+ double m_y;
+ int m_ix;
+ int m_iy;
+ };
+
+}
+
+#endif
diff --git a/agg/inc/agg_span_pattern.h b/agg/inc/agg_span_pattern.h
new file mode 100755
index 000000000000..b9e9b135ff84
--- /dev/null
+++ b/agg/inc/agg_span_pattern.h
@@ -0,0 +1,278 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// Adaptation for high precision colors has been sponsored by
+// Liberty Technology Systems, Inc., visit http://lib-sys.com
+//
+// Liberty Technology Systems, Inc. is the provider of
+// PostScript and PDF technology for software developers.
+//
+//----------------------------------------------------------------------------
+
+
+#ifndef AGG_SPAN_PATTERN_INCLUDED
+#define AGG_SPAN_PATTERN_INCLUDED
+
+#include "agg_basics.h"
+#include "agg_rendering_buffer.h"
+#include "agg_span_generator.h"
+
+
+namespace agg
+{
+
+ //---------------------------------------------------span_pattern_base
+ template<class ColorT, class Allocator>
+ class span_pattern_base : public span_generator<ColorT, Allocator>
+ {
+ public:
+ typedef ColorT color_type;
+ typedef typename ColorT::value_type value_type;
+ typedef Allocator alloc_type;
+ enum { base_mask = color_type::base_mask };
+
+ //----------------------------------------------------------------
+ span_pattern_base(alloc_type& alloc) :
+ span_generator<color_type, alloc_type>(alloc)
+ {}
+
+ //----------------------------------------------------------------
+ span_pattern_base(alloc_type& alloc,
+ const rendering_buffer& src,
+ unsigned offset_x, unsigned offset_y,
+ double alpha) :
+ span_generator<color_type, alloc_type>(alloc),
+ m_src(&src),
+ m_offset_x(offset_x),
+ m_offset_y(offset_y),
+ m_alpha(value_type(alpha * double(base_mask)))
+ {}
+
+ //----------------------------------------------------------------
+ const rendering_buffer& source_image() const { return *m_src; }
+ unsigned offset_x() const { return m_offset_x; }
+ unsigned offset_y() const { return m_offset_y; }
+ double alpha() const { return m_alpha / double(base_mask); }
+ value_type alpha_int() const { return m_alpha; }
+
+ //----------------------------------------------------------------
+ void source_image(const rendering_buffer& v) { m_src = &v; }
+ void offset_x(unsigned v) { m_offset_x = v; }
+ void offset_y(unsigned v) { m_offset_y = v; }
+ void alpha(double v) { m_alpha = value_type(v * double(base_mask)); }
+
+ //----------------------------------------------------------------
+ private:
+ const rendering_buffer* m_src;
+ unsigned m_offset_x;
+ unsigned m_offset_y;
+ value_type m_alpha;
+ };
+
+
+ //---------------------------------------------------wrap_mode_repeat
+ class wrap_mode_repeat
+ {
+ public:
+ wrap_mode_repeat(unsigned size) :
+ m_size(size),
+ m_add(size * (0x3FFFFFFF / size)),
+ m_value(0)
+ {}
+
+ AGG_INLINE unsigned operator() (int v)
+ {
+ return m_value = (unsigned(v) + m_add) % m_size;
+ }
+
+ AGG_INLINE unsigned operator++ ()
+ {
+ ++m_value;
+ if(m_value >= m_size) m_value = 0;
+ return m_value;
+ }
+ private:
+ unsigned m_size;
+ unsigned m_add;
+ unsigned m_value;
+ };
+
+
+ //---------------------------------------------wrap_mode_repeat_pow2
+ class wrap_mode_repeat_pow2
+ {
+ public:
+ wrap_mode_repeat_pow2(unsigned size) : m_value(0)
+ {
+ m_mask = 1;
+ while(m_mask < size) m_mask = (m_mask << 1) | 1;
+ m_mask >>= 1;
+ }
+ AGG_INLINE unsigned operator() (int v)
+ {
+ return m_value = unsigned(v) & m_mask;
+ }
+ AGG_INLINE unsigned operator++ ()
+ {
+ ++m_value;
+ if(m_value > m_mask) m_value = 0;
+ return m_value;
+ }
+ private:
+ unsigned m_mask;
+ unsigned m_value;
+ };
+
+
+ //----------------------------------------wrap_mode_repeat_auto_pow2
+ class wrap_mode_repeat_auto_pow2
+ {
+ public:
+ wrap_mode_repeat_auto_pow2(unsigned size) :
+ m_size(size),
+ m_add(size * (0x3FFFFFFF / size)),
+ m_mask((m_size & (m_size-1)) ? 0 : m_size-1),
+ m_value(0)
+ {}
+
+ AGG_INLINE unsigned operator() (int v)
+ {
+ if(m_mask) return m_value = unsigned(v) & m_mask;
+ return m_value = (unsigned(v) + m_add) % m_size;
+ }
+ AGG_INLINE unsigned operator++ ()
+ {
+ ++m_value;
+ if(m_value >= m_size) m_value = 0;
+ return m_value;
+ }
+
+ private:
+ unsigned m_size;
+ unsigned m_add;
+ unsigned m_mask;
+ unsigned m_value;
+ };
+
+
+ //--------------------------------------------------wrap_mode_reflect
+ class wrap_mode_reflect
+ {
+ public:
+ wrap_mode_reflect(unsigned size) :
+ m_size(size),
+ m_size2(size * 2),
+ m_add(m_size2 * (0x3FFFFFFF / m_size2)),
+ m_value(0)
+ {}
+
+ AGG_INLINE unsigned operator() (int v)
+ {
+ m_value = (unsigned(v) + m_add) % m_size2;
+ if(m_value >= m_size) return m_size2 - m_value - 1;
+ return m_value;
+ }
+
+ AGG_INLINE unsigned operator++ ()
+ {
+ ++m_value;
+ if(m_value >= m_size2) m_value = 0;
+ if(m_value >= m_size) return m_size2 - m_value - 1;
+ return m_value;
+ }
+ private:
+ unsigned m_size;
+ unsigned m_size2;
+ unsigned m_add;
+ unsigned m_value;
+ };
+
+
+
+ //-------------------------------------------wrap_mode_reflect_pow2
+ class wrap_mode_reflect_pow2
+ {
+ public:
+ wrap_mode_reflect_pow2(unsigned size) : m_value(0)
+ {
+ m_mask = 1;
+ m_size = 1;
+ while(m_mask < size)
+ {
+ m_mask = (m_mask << 1) | 1;
+ m_size <<= 1;
+ }
+ }
+ AGG_INLINE unsigned operator() (int v)
+ {
+ m_value = unsigned(v) & m_mask;
+ if(m_value >= m_size) return m_mask - m_value;
+ return m_value;
+ }
+ AGG_INLINE unsigned operator++ ()
+ {
+ ++m_value;
+ m_value &= m_mask;
+ if(m_value >= m_size) return m_mask - m_value;
+ return m_value;
+ }
+ private:
+ unsigned m_size;
+ unsigned m_mask;
+ unsigned m_value;
+ };
+
+
+
+ //---------------------------------------wrap_mode_reflect_auto_pow2
+ class wrap_mode_reflect_auto_pow2
+ {
+ public:
+ wrap_mode_reflect_auto_pow2(unsigned size) :
+ m_size(size),
+ m_size2(size * 2),
+ m_add(m_size2 * (0x3FFFFFFF / m_size2)),
+ m_mask((m_size2 & (m_size2-1)) ? 0 : m_size2-1),
+ m_value(0)
+ {}
+
+ AGG_INLINE unsigned operator() (int v)
+ {
+ m_value = m_mask ? unsigned(v) & m_mask :
+ (unsigned(v) + m_add) % m_size2;
+ if(m_value >= m_size) return m_size2 - m_value - 1;
+ return m_value;
+ }
+ AGG_INLINE unsigned operator++ ()
+ {
+ ++m_value;
+ if(m_value >= m_size2) m_value = 0;
+ if(m_value >= m_size) return m_size2 - m_value - 1;
+ return m_value;
+ }
+
+ private:
+ unsigned m_size;
+ unsigned m_size2;
+ unsigned m_add;
+ unsigned m_mask;
+ unsigned m_value;
+ };
+
+
+}
+
+#endif
+
diff --git a/agg/inc/agg_span_pattern_filter_gray.h b/agg/inc/agg_span_pattern_filter_gray.h
new file mode 100755
index 000000000000..17a7984be7fe
--- /dev/null
+++ b/agg/inc/agg_span_pattern_filter_gray.h
@@ -0,0 +1,472 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// classes span_pattern_filter_gray*
+//
+//----------------------------------------------------------------------------
+#ifndef AGG_SPAN_PATTERN_FILTER_GRAY_INCLUDED
+#define AGG_SPAN_PATTERN_FILTER_GRAY_INCLUDED
+
+#include "agg_basics.h"
+#include "agg_color_gray.h"
+#include "agg_span_pattern.h"
+#include "agg_span_image_filter.h"
+
+
+namespace agg
+{
+
+ //===========================================span_pattern_filter_gray
+ template<class ColorT,
+ class Interpolator,
+ class WrapModeX,
+ class WrapModeY,
+ class Allocator = span_allocator<ColorT> >
+ class span_pattern_filter_gray_nn :
+ public span_image_filter<ColorT, Interpolator, Allocator>
+ {
+ public:
+ typedef ColorT color_type;
+ typedef Interpolator interpolator_type;
+ typedef Allocator alloc_type;
+ typedef span_image_filter<color_type, interpolator_type, alloc_type> base_type;
+ typedef typename color_type::value_type value_type;
+ typedef typename color_type::calc_type calc_type;
+ enum
+ {
+ base_shift = color_type::base_shift,
+ base_mask = color_type::base_mask
+ };
+
+ //--------------------------------------------------------------------
+ span_pattern_filter_gray_nn(alloc_type& alloc) :
+ base_type(alloc),
+ m_wrap_mode_x(1),
+ m_wrap_mode_y(1)
+ {}
+
+ //--------------------------------------------------------------------
+ span_pattern_filter_gray_nn(alloc_type& alloc,
+ const rendering_buffer& src,
+ interpolator_type& inter) :
+ base_type(alloc, src, color_type(0,0), inter, 0),
+ m_wrap_mode_x(src.width()),
+ m_wrap_mode_y(src.height())
+ {}
+
+ //--------------------------------------------------------------------
+ void source_image(const rendering_buffer& src)
+ {
+ base_type::source_image(src);
+ m_wrap_mode_x = WrapModeX(src.width());
+ m_wrap_mode_y = WrapModeX(src.height());
+ }
+
+ //--------------------------------------------------------------------
+ color_type* generate(int x, int y, unsigned len)
+ {
+ base_type::interpolator().begin(x + base_type::filter_dx_dbl(),
+ y + base_type::filter_dy_dbl(), len);
+ color_type* span = base_type::allocator().span();
+ do
+ {
+ base_type::interpolator().coordinates(&x, &y);
+
+ x = m_wrap_mode_x(x >> image_subpixel_shift);
+ y = m_wrap_mode_y(y >> image_subpixel_shift);
+
+ span->v = *((value_type*)base_type::source_image().row(y) + x);
+ span->a = base_mask;
+ ++span;
+ ++base_type::interpolator();
+
+ } while(--len);
+
+ return base_type::allocator().span();
+ }
+
+ private:
+ WrapModeX m_wrap_mode_x;
+ WrapModeY m_wrap_mode_y;
+ };
+
+
+
+
+
+
+ //====================================span_pattern_filter_gray_bilinear
+ template<class ColorT,
+ class Interpolator,
+ class WrapModeX,
+ class WrapModeY,
+ class Allocator = span_allocator<ColorT> >
+ class span_pattern_filter_gray_bilinear :
+ public span_image_filter<ColorT, Interpolator, Allocator>
+ {
+ public:
+ typedef ColorT color_type;
+ typedef Interpolator interpolator_type;
+ typedef Allocator alloc_type;
+ typedef span_image_filter<color_type, interpolator_type, alloc_type> base_type;
+ typedef typename color_type::value_type value_type;
+ typedef typename color_type::calc_type calc_type;
+ enum
+ {
+ base_shift = color_type::base_shift,
+ base_mask = color_type::base_mask
+ };
+
+ //--------------------------------------------------------------------
+ span_pattern_filter_gray_bilinear(alloc_type& alloc) :
+ base_type(alloc),
+ m_wrap_mode_x(1),
+ m_wrap_mode_y(1)
+ {}
+
+ //--------------------------------------------------------------------
+ span_pattern_filter_gray_bilinear(alloc_type& alloc,
+ const rendering_buffer& src,
+ interpolator_type& inter) :
+ base_type(alloc, src, color_type(0,0), inter, 0),
+ m_wrap_mode_x(src.width()),
+ m_wrap_mode_y(src.height())
+ {}
+
+ //-------------------------------------------------------------------
+ void source_image(const rendering_buffer& src)
+ {
+ base_type::source_image(src);
+ m_wrap_mode_x = WrapModeX(src.width());
+ m_wrap_mode_y = WrapModeX(src.height());
+ }
+
+ //--------------------------------------------------------------------
+ color_type* generate(int x, int y, unsigned len)
+ {
+ base_type::interpolator().begin(x + base_type::filter_dx_dbl(),
+ y + base_type::filter_dy_dbl(), len);
+ calc_type fg;
+ color_type* span = base_type::allocator().span();
+ do
+ {
+ int x_hr;
+ int y_hr;
+
+ base_type::interpolator().coordinates(&x_hr, &y_hr);
+
+ x_hr -= base_type::filter_dx_int();
+ y_hr -= base_type::filter_dy_int();
+
+ int x_lr = x_hr >> image_subpixel_shift;
+ int y_lr = y_hr >> image_subpixel_shift;
+
+ unsigned x1 = m_wrap_mode_x(x_lr);
+ unsigned x2 = ++m_wrap_mode_x;
+
+ unsigned y1 = m_wrap_mode_y(y_lr);
+ unsigned y2 = ++m_wrap_mode_y;
+ const value_type* ptr1 = (value_type*)base_type::source_image().row(y1);
+ const value_type* ptr2 = (value_type*)base_type::source_image().row(y2);
+
+ fg = image_subpixel_size * image_subpixel_size / 2;
+
+ x_hr &= image_subpixel_mask;
+ y_hr &= image_subpixel_mask;
+
+ fg += ptr1[x1] * (image_subpixel_size - x_hr) * (image_subpixel_size - y_hr);
+ fg += ptr1[x2] * x_hr * (image_subpixel_size - y_hr);
+ fg += ptr2[x1] * (image_subpixel_size - x_hr) * y_hr;
+ fg += ptr2[x2] * x_hr * y_hr;
+
+ span->v = (value_type)(fg >> image_subpixel_shift * 2);
+ span->a = base_mask;
+ ++span;
+ ++base_type::interpolator();
+
+ } while(--len);
+
+ return base_type::allocator().span();
+ }
+ private:
+ WrapModeX m_wrap_mode_x;
+ WrapModeY m_wrap_mode_y;
+ };
+
+
+
+
+
+
+
+
+
+ //====================================span_pattern_filter_gray_2x2
+ template<class ColorT,
+ class Interpolator,
+ class WrapModeX,
+ class WrapModeY,
+ class Allocator = span_allocator<ColorT> >
+ class span_pattern_filter_gray_2x2 :
+ public span_image_filter<ColorT, Interpolator, Allocator>
+ {
+ public:
+ typedef ColorT color_type;
+ typedef Interpolator interpolator_type;
+ typedef Allocator alloc_type;
+ typedef span_image_filter<color_type, interpolator_type, alloc_type> base_type;
+ typedef typename color_type::value_type value_type;
+ typedef typename color_type::calc_type calc_type;
+ enum
+ {
+ base_shift = color_type::base_shift,
+ base_mask = color_type::base_mask
+ };
+
+ //--------------------------------------------------------------------
+ span_pattern_filter_gray_2x2(alloc_type& alloc) :
+ base_type(alloc),
+ m_wrap_mode_x(1),
+ m_wrap_mode_y(1)
+ {}
+
+ //--------------------------------------------------------------------
+ span_pattern_filter_gray_2x2(alloc_type& alloc,
+ const rendering_buffer& src,
+ interpolator_type& inter,
+ const image_filter_lut& filter) :
+ base_type(alloc, src, color_type(0,0), inter, &filter),
+ m_wrap_mode_x(src.width()),
+ m_wrap_mode_y(src.height())
+ {}
+
+ //-------------------------------------------------------------------
+ void source_image(const rendering_buffer& src)
+ {
+ base_type::source_image(src);
+ m_wrap_mode_x = WrapModeX(src.width());
+ m_wrap_mode_y = WrapModeX(src.height());
+ }
+
+ //--------------------------------------------------------------------
+ color_type* generate(int x, int y, unsigned len)
+ {
+ base_type::interpolator().begin(x + base_type::filter_dx_dbl(),
+ y + base_type::filter_dy_dbl(), len);
+ calc_type fg;
+ color_type* span = base_type::allocator().span();
+ const int16* weight_array = base_type::filter().weight_array() +
+ ((base_type::filter().diameter()/2 - 1) <<
+ image_subpixel_shift);
+ do
+ {
+ int x_hr;
+ int y_hr;
+
+ base_type::interpolator().coordinates(&x_hr, &y_hr);
+
+ x_hr -= base_type::filter_dx_int();
+ y_hr -= base_type::filter_dy_int();
+
+ int x_lr = x_hr >> image_subpixel_shift;
+ int y_lr = y_hr >> image_subpixel_shift;
+
+ unsigned x1 = m_wrap_mode_x(x_lr);
+ unsigned x2 = ++m_wrap_mode_x;
+
+ unsigned y1 = m_wrap_mode_y(y_lr);
+ unsigned y2 = ++m_wrap_mode_y;
+ const value_type* ptr1 = (value_type*)base_type::source_image().row(y1);
+ const value_type* ptr2 = (value_type*)base_type::source_image().row(y2);
+
+ fg = image_filter_size / 2;
+
+ x_hr &= image_subpixel_mask;
+ y_hr &= image_subpixel_mask;
+
+ fg += ptr1[x1] * ((weight_array[x_hr + image_subpixel_size] *
+ weight_array[y_hr + image_subpixel_size] +
+ image_filter_size / 2) >>
+ image_filter_shift);
+ fg += ptr1[x2] * ((weight_array[x_hr] *
+ weight_array[y_hr + image_subpixel_size] +
+ image_filter_size / 2) >>
+ image_filter_shift);
+ fg += ptr2[x1] * ((weight_array[x_hr + image_subpixel_size] *
+ weight_array[y_hr] +
+ image_filter_size / 2) >>
+ image_filter_shift);
+ fg += ptr2[x2] * ((weight_array[x_hr] *
+ weight_array[y_hr] +
+ image_filter_size / 2) >>
+ image_filter_shift);
+
+ fg >>= image_filter_shift;
+ if(fg > base_mask) fg = base_mask;
+
+ span->v = (value_type)fg;
+ span->a = base_mask;
+ ++span;
+ ++base_type::interpolator();
+
+ } while(--len);
+
+ return base_type::allocator().span();
+ }
+ private:
+ WrapModeX m_wrap_mode_x;
+ WrapModeY m_wrap_mode_y;
+ };
+
+
+
+
+
+
+
+
+
+
+
+
+ //==============================================span_pattern_filter_gray
+ template<class ColorT,
+ class Interpolator,
+ class WrapModeX,
+ class WrapModeY,
+ class Allocator = span_allocator<ColorT> >
+ class span_pattern_filter_gray :
+ public span_image_filter<ColorT, Interpolator, Allocator>
+ {
+ public:
+ typedef ColorT color_type;
+ typedef Interpolator interpolator_type;
+ typedef Allocator alloc_type;
+ typedef span_image_filter<color_type, interpolator_type, alloc_type> base_type;
+ typedef typename color_type::value_type value_type;
+ typedef typename color_type::calc_type calc_type;
+ enum
+ {
+ base_shift = color_type::base_shift,
+ base_mask = color_type::base_mask
+ };
+
+ //--------------------------------------------------------------------
+ span_pattern_filter_gray(alloc_type& alloc) :
+ base_type(alloc)
+ {}
+
+ //--------------------------------------------------------------------
+ span_pattern_filter_gray(alloc_type& alloc,
+ const rendering_buffer& src,
+ interpolator_type& inter,
+ const image_filter_lut& filter) :
+ base_type(alloc, src, color_type(0,0), inter, &filter),
+ m_wrap_mode_x(src.width()),
+ m_wrap_mode_y(src.height())
+ {}
+
+ //--------------------------------------------------------------------
+ void source_image(const rendering_buffer& src)
+ {
+ base_type::source_image(src);
+ m_wrap_mode_x = WrapModeX(src.width());
+ m_wrap_mode_y = WrapModeX(src.height());
+ }
+
+ //--------------------------------------------------------------------
+ color_type* generate(int x, int y, unsigned len)
+ {
+ base_type::interpolator().begin(x + base_type::filter_dx_dbl(),
+ y + base_type::filter_dy_dbl(), len);
+ int fg;
+
+ unsigned diameter = base_type::filter().diameter();
+ int start = base_type::filter().start();
+ const int16* weight_array = base_type::filter().weight_array();
+
+ color_type* span = base_type::allocator().span();
+
+ int x_count;
+ int weight_y;
+
+ do
+ {
+ base_type::interpolator().coordinates(&x, &y);
+
+ x -= base_type::filter_dx_int();
+ y -= base_type::filter_dy_int();
+
+ int x_hr = x;
+ int y_hr = y;
+
+ int x_fract = x_hr & image_subpixel_mask;
+ unsigned y_count = diameter;
+
+ int y_lr = m_wrap_mode_y((y >> image_subpixel_shift) + start);
+ int x_int = (x >> image_subpixel_shift) + start;
+ int x_lr;
+
+ y_hr = image_subpixel_mask - (y_hr & image_subpixel_mask);
+ fg = image_filter_size / 2;
+
+ do
+ {
+ x_count = diameter;
+ weight_y = weight_array[y_hr];
+ x_hr = image_subpixel_mask - x_fract;
+ x_lr = m_wrap_mode_x(x_int);
+ const value_type* row_ptr = (value_type*)base_type::source_image().row(y_lr);
+ do
+ {
+ fg += row_ptr[x_lr] * ((weight_y * weight_array[x_hr] +
+ image_filter_size / 2) >>
+ image_filter_shift);
+ x_hr += image_subpixel_size;
+ x_lr = ++m_wrap_mode_x;
+ } while(--x_count);
+
+ y_hr += image_subpixel_size;
+ y_lr = ++m_wrap_mode_y;
+ } while(--y_count);
+
+ fg >>= image_filter_shift;
+
+ if(fg < 0) fg = 0;
+ if(fg > base_mask) fg = base_mask;
+
+ span->v = fg;
+ span->a = base_mask;
+ ++span;
+ ++base_type::interpolator();
+
+ } while(--len);
+
+ return base_type::allocator().span();
+ }
+
+ private:
+ WrapModeX m_wrap_mode_x;
+ WrapModeY m_wrap_mode_y;
+ };
+
+
+}
+
+
+#endif
+
+
+
diff --git a/agg/inc/agg_span_pattern_filter_rgb.h b/agg/inc/agg_span_pattern_filter_rgb.h
new file mode 100755
index 000000000000..d4dc1c1797eb
--- /dev/null
+++ b/agg/inc/agg_span_pattern_filter_rgb.h
@@ -0,0 +1,568 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// Adaptation for high precision colors has been sponsored by
+// Liberty Technology Systems, Inc., visit http://lib-sys.com
+//
+// Liberty Technology Systems, Inc. is the provider of
+// PostScript and PDF technology for software developers.
+//
+//----------------------------------------------------------------------------
+//
+// classes span_pattern_filter_rgb*
+//
+//----------------------------------------------------------------------------
+#ifndef AGG_SPAN_PATTERN_FILTER_RGB_INCLUDED
+#define AGG_SPAN_PATTERN_FILTER_RGB_INCLUDED
+
+#include "agg_basics.h"
+#include "agg_color_rgba.h"
+#include "agg_span_pattern.h"
+#include "agg_span_image_filter.h"
+
+
+namespace agg
+{
+
+ //===========================================span_pattern_filter_rgb
+ template<class ColorT,
+ class Order,
+ class Interpolator,
+ class WrapModeX,
+ class WrapModeY,
+ class Allocator = span_allocator<ColorT> >
+ class span_pattern_filter_rgb_nn :
+ public span_image_filter<ColorT, Interpolator, Allocator>
+ {
+ public:
+ typedef ColorT color_type;
+ typedef Order order_type;
+ typedef Interpolator interpolator_type;
+ typedef Allocator alloc_type;
+ typedef span_image_filter<color_type, interpolator_type, alloc_type> base_type;
+ typedef typename color_type::value_type value_type;
+ typedef typename color_type::calc_type calc_type;
+ enum
+ {
+ base_shift = color_type::base_shift,
+ base_mask = color_type::base_mask
+ };
+
+ //--------------------------------------------------------------------
+ span_pattern_filter_rgb_nn(alloc_type& alloc) :
+ base_type(alloc),
+ m_wrap_mode_x(1),
+ m_wrap_mode_y(1)
+ {}
+
+ //--------------------------------------------------------------------
+ span_pattern_filter_rgb_nn(alloc_type& alloc,
+ const rendering_buffer& src,
+ interpolator_type& intr) :
+ base_type(alloc, src, color_type(0,0,0,0), intr, 0),
+ m_wrap_mode_x(src.width()),
+ m_wrap_mode_y(src.height())
+ {}
+
+ //--------------------------------------------------------------------
+ void source_image(const rendering_buffer& src)
+ {
+ base_type::source_image(src);
+ m_wrap_mode_x = WrapModeX(src.width());
+ m_wrap_mode_y = WrapModeX(src.height());
+ }
+
+ //--------------------------------------------------------------------
+ color_type* generate(int x, int y, unsigned len)
+ {
+ color_type* span = base_type::allocator().span();
+ interpolator_type& intr = base_type::interpolator();
+ intr.begin(x + base_type::filter_dx_dbl(),
+ y + base_type::filter_dy_dbl(), len);
+ const value_type *fg_ptr;
+ do
+ {
+ intr.coordinates(&x, &y);
+
+ x = m_wrap_mode_x(x >> image_subpixel_shift);
+ y = m_wrap_mode_y(y >> image_subpixel_shift);
+
+ fg_ptr = (const value_type*)base_type::source_image().row(y) + x * 3;
+ span->r = fg_ptr[order_type::R];
+ span->g = fg_ptr[order_type::G];
+ span->b = fg_ptr[order_type::B];
+ span->a = base_mask;
+ ++span;
+ ++intr;
+
+ } while(--len);
+ return base_type::allocator().span();
+ }
+
+ private:
+ WrapModeX m_wrap_mode_x;
+ WrapModeY m_wrap_mode_y;
+ };
+
+
+
+
+
+
+
+
+
+
+ //=====================================span_pattern_filter_rgb_bilinear
+ template<class ColorT,
+ class Order,
+ class Interpolator,
+ class WrapModeX,
+ class WrapModeY,
+ class Allocator = span_allocator<ColorT> >
+ class span_pattern_filter_rgb_bilinear :
+ public span_image_filter<ColorT, Interpolator, Allocator>
+ {
+ public:
+ typedef ColorT color_type;
+ typedef Order order_type;
+ typedef Interpolator interpolator_type;
+ typedef Allocator alloc_type;
+ typedef span_image_filter<color_type, interpolator_type, alloc_type> base_type;
+ typedef typename color_type::value_type value_type;
+ typedef typename color_type::calc_type calc_type;
+ enum
+ {
+ base_shift = color_type::base_shift,
+ base_mask = color_type::base_mask
+ };
+
+ //--------------------------------------------------------------------
+ span_pattern_filter_rgb_bilinear(alloc_type& alloc) :
+ base_type(alloc),
+ m_wrap_mode_x(1),
+ m_wrap_mode_y(1)
+ {}
+
+ //--------------------------------------------------------------------
+ span_pattern_filter_rgb_bilinear(alloc_type& alloc,
+ const rendering_buffer& src,
+ interpolator_type& intr) :
+ base_type(alloc, src, color_type(0,0,0,0), intr, 0),
+ m_wrap_mode_x(src.width()),
+ m_wrap_mode_y(src.height())
+ {}
+
+ //-------------------------------------------------------------------
+ void source_image(const rendering_buffer& src)
+ {
+ base_type::source_image(src);
+ m_wrap_mode_x = WrapModeX(src.width());
+ m_wrap_mode_y = WrapModeX(src.height());
+ }
+
+ //--------------------------------------------------------------------
+ color_type* generate(int x, int y, unsigned len)
+ {
+ color_type* span = base_type::allocator().span();
+ interpolator_type& intr = base_type::interpolator();
+ intr.begin(x + base_type::filter_dx_dbl(),
+ y + base_type::filter_dy_dbl(), len);
+ calc_type fg[3];
+ const value_type *fg_ptr;
+
+ do
+ {
+ int x_hr;
+ int y_hr;
+
+ intr.coordinates(&x_hr, &y_hr);
+
+ x_hr -= base_type::filter_dx_int();
+ y_hr -= base_type::filter_dy_int();
+
+ int x_lr = x_hr >> image_subpixel_shift;
+ int y_lr = y_hr >> image_subpixel_shift;
+
+ unsigned x1 = m_wrap_mode_x(x_lr);
+ unsigned x2 = ++m_wrap_mode_x;
+ x1 *= 3;
+ x2 *= 3;
+
+ unsigned y1 = m_wrap_mode_y(y_lr);
+ unsigned y2 = ++m_wrap_mode_y;
+ const value_type* ptr1 = (const value_type*)base_type::source_image().row(y1);
+ const value_type* ptr2 = (const value_type*)base_type::source_image().row(y2);
+
+ fg[0] =
+ fg[1] =
+ fg[2] = image_subpixel_size * image_subpixel_size / 2;
+
+ x_hr &= image_subpixel_mask;
+ y_hr &= image_subpixel_mask;
+
+ int weight;
+ fg_ptr = ptr1 + x1;
+ weight = (image_subpixel_size - x_hr) *
+ (image_subpixel_size - y_hr);
+ fg[0] += weight * fg_ptr[0];
+ fg[1] += weight * fg_ptr[1];
+ fg[2] += weight * fg_ptr[2];
+
+ fg_ptr = ptr1 + x2;
+ weight = x_hr * (image_subpixel_size - y_hr);
+ fg[0] += weight * fg_ptr[0];
+ fg[1] += weight * fg_ptr[1];
+ fg[2] += weight * fg_ptr[2];
+
+ fg_ptr = ptr2 + x1;
+ weight = (image_subpixel_size - x_hr) * y_hr;
+ fg[0] += weight * fg_ptr[0];
+ fg[1] += weight * fg_ptr[1];
+ fg[2] += weight * fg_ptr[2];
+
+ fg_ptr = ptr2 + x2;
+ weight = x_hr * y_hr;
+ fg[0] += weight * fg_ptr[0];
+ fg[1] += weight * fg_ptr[1];
+ fg[2] += weight * fg_ptr[2];
+
+ span->r = (value_type)(fg[order_type::R] >> image_subpixel_shift * 2);
+ span->g = (value_type)(fg[order_type::G] >> image_subpixel_shift * 2);
+ span->b = (value_type)(fg[order_type::B] >> image_subpixel_shift * 2);
+ span->a = base_mask;
+ ++span;
+ ++intr;
+ } while(--len);
+
+ return base_type::allocator().span();
+ }
+
+ private:
+ WrapModeX m_wrap_mode_x;
+ WrapModeY m_wrap_mode_y;
+ };
+
+
+
+
+
+
+
+ //=====================================span_pattern_filter_rgb_2x2
+ template<class ColorT,
+ class Order,
+ class Interpolator,
+ class WrapModeX,
+ class WrapModeY,
+ class Allocator = span_allocator<ColorT> >
+ class span_pattern_filter_rgb_2x2 :
+ public span_image_filter<ColorT, Interpolator, Allocator>
+ {
+ public:
+ typedef ColorT color_type;
+ typedef Order order_type;
+ typedef Interpolator interpolator_type;
+ typedef Allocator alloc_type;
+ typedef span_image_filter<color_type, interpolator_type, alloc_type> base_type;
+ typedef typename color_type::value_type value_type;
+ typedef typename color_type::calc_type calc_type;
+ enum
+ {
+ base_shift = color_type::base_shift,
+ base_mask = color_type::base_mask
+ };
+
+ //--------------------------------------------------------------------
+ span_pattern_filter_rgb_2x2(alloc_type& alloc) :
+ base_type(alloc),
+ m_wrap_mode_x(1),
+ m_wrap_mode_y(1)
+ {}
+
+ //--------------------------------------------------------------------
+ span_pattern_filter_rgb_2x2(alloc_type& alloc,
+ const rendering_buffer& src,
+ interpolator_type& intr,
+ const image_filter_lut& filter) :
+ base_type(alloc, src, color_type(0,0,0,0), intr, &filter),
+ m_wrap_mode_x(src.width()),
+ m_wrap_mode_y(src.height())
+ {}
+
+ //-------------------------------------------------------------------
+ void source_image(const rendering_buffer& src)
+ {
+ base_type::source_image(src);
+ m_wrap_mode_x = WrapModeX(src.width());
+ m_wrap_mode_y = WrapModeX(src.height());
+ }
+
+ //--------------------------------------------------------------------
+ color_type* generate(int x, int y, unsigned len)
+ {
+ color_type* span = base_type::allocator().span();
+ interpolator_type& intr = base_type::interpolator();
+ intr.begin(x + base_type::filter_dx_dbl(),
+ y + base_type::filter_dy_dbl(), len);
+ calc_type fg[3];
+ const value_type *fg_ptr;
+ const int16* weight_array = base_type::filter().weight_array() +
+ ((base_type::filter().diameter()/2 - 1) <<
+ image_subpixel_shift);
+ do
+ {
+ int x_hr;
+ int y_hr;
+
+ intr.coordinates(&x_hr, &y_hr);
+
+ x_hr -= base_type::filter_dx_int();
+ y_hr -= base_type::filter_dy_int();
+
+ int x_lr = x_hr >> image_subpixel_shift;
+ int y_lr = y_hr >> image_subpixel_shift;
+
+ unsigned x1 = m_wrap_mode_x(x_lr);
+ unsigned x2 = ++m_wrap_mode_x;
+ x1 *= 3;
+ x2 *= 3;
+
+ unsigned y1 = m_wrap_mode_y(y_lr);
+ unsigned y2 = ++m_wrap_mode_y;
+ const value_type* ptr1 = (const value_type*)base_type::source_image().row(y1);
+ const value_type* ptr2 = (const value_type*)base_type::source_image().row(y2);
+
+ fg[0] = fg[1] = fg[2] = image_filter_size / 2;
+
+ x_hr &= image_subpixel_mask;
+ y_hr &= image_subpixel_mask;
+
+ int weight;
+ fg_ptr = ptr1 + x1;
+ weight = (weight_array[x_hr + image_subpixel_size] *
+ weight_array[y_hr + image_subpixel_size] +
+ image_filter_size / 2) >>
+ image_filter_shift;
+ fg[0] += weight * fg_ptr[0];
+ fg[1] += weight * fg_ptr[1];
+ fg[2] += weight * fg_ptr[2];
+
+ fg_ptr = ptr1 + x2;
+ weight = (weight_array[x_hr] *
+ weight_array[y_hr + image_subpixel_size] +
+ image_filter_size / 2) >>
+ image_filter_shift;
+ fg[0] += weight * fg_ptr[0];
+ fg[1] += weight * fg_ptr[1];
+ fg[2] += weight * fg_ptr[2];
+
+ fg_ptr = ptr2 + x1;
+ weight = (weight_array[x_hr + image_subpixel_size] *
+ weight_array[y_hr] +
+ image_filter_size / 2) >>
+ image_filter_shift;
+ fg[0] += weight * fg_ptr[0];
+ fg[1] += weight * fg_ptr[1];
+ fg[2] += weight * fg_ptr[2];
+
+ fg_ptr = ptr2 + x2;
+ weight = (weight_array[x_hr] *
+ weight_array[y_hr] +
+ image_filter_size / 2) >>
+ image_filter_shift;
+ fg[0] += weight * fg_ptr[0];
+ fg[1] += weight * fg_ptr[1];
+ fg[2] += weight * fg_ptr[2];
+
+ fg[0] >>= image_filter_shift;
+ fg[1] >>= image_filter_shift;
+ fg[2] >>= image_filter_shift;
+
+ if(fg[0] > base_mask) fg[0] = base_mask;
+ if(fg[1] > base_mask) fg[1] = base_mask;
+ if(fg[2] > base_mask) fg[2] = base_mask;
+
+ span->r = (value_type)fg[order_type::R];
+ span->g = (value_type)fg[order_type::G];
+ span->b = (value_type)fg[order_type::B];
+ span->a = base_mask;
+ ++span;
+ ++intr;
+ } while(--len);
+
+ return base_type::allocator().span();
+ }
+
+
+ private:
+ WrapModeX m_wrap_mode_x;
+ WrapModeY m_wrap_mode_y;
+ };
+
+
+
+
+
+
+
+
+
+
+ //==============================================span_pattern_filter_rgb
+ template<class ColorT,
+ class Order,
+ class Interpolator,
+ class WrapModeX,
+ class WrapModeY,
+ class Allocator = span_allocator<ColorT> >
+ class span_pattern_filter_rgb :
+ public span_image_filter<ColorT, Interpolator, Allocator>
+ {
+ public:
+ typedef ColorT color_type;
+ typedef Order order_type;
+ typedef Interpolator interpolator_type;
+ typedef Allocator alloc_type;
+ typedef span_image_filter<color_type, interpolator_type, alloc_type> base_type;
+ typedef typename color_type::value_type value_type;
+ typedef typename color_type::calc_type calc_type;
+ enum
+ {
+ base_shift = color_type::base_shift,
+ base_mask = color_type::base_mask
+ };
+
+ //--------------------------------------------------------------------
+ span_pattern_filter_rgb(alloc_type& alloc) :
+ base_type(alloc)
+ {}
+
+ //--------------------------------------------------------------------
+ span_pattern_filter_rgb(alloc_type& alloc,
+ const rendering_buffer& src,
+ interpolator_type& intr,
+ const image_filter_lut& filter) :
+ base_type(alloc, src, color_type(0,0,0,0), intr, &filter),
+ m_wrap_mode_x(src.width()),
+ m_wrap_mode_y(src.height())
+ {}
+
+ //--------------------------------------------------------------------
+ void source_image(const rendering_buffer& src)
+ {
+ base_type::source_image(src);
+ m_wrap_mode_x = WrapModeX(src.width());
+ m_wrap_mode_y = WrapModeX(src.height());
+ }
+
+ //--------------------------------------------------------------------
+ color_type* generate(int x, int y, unsigned len)
+ {
+ color_type* span = base_type::allocator().span();
+ interpolator_type& intr = base_type::interpolator();
+ intr.begin(x + base_type::filter_dx_dbl(),
+ y + base_type::filter_dy_dbl(), len);
+ int fg[3];
+
+ unsigned diameter = base_type::filter().diameter();
+ int start = base_type::filter().start();
+ const int16* weight_array = base_type::filter().weight_array();
+
+ int x_count;
+ int weight_y;
+
+ do
+ {
+ intr.coordinates(&x, &y);
+
+ x -= base_type::filter_dx_int();
+ y -= base_type::filter_dy_int();
+
+ int x_hr = x;
+ int y_hr = y;
+
+ int x_fract = x_hr & image_subpixel_mask;
+ unsigned y_count = diameter;
+
+ int y_lr = m_wrap_mode_y((y >> image_subpixel_shift) + start);
+ int x_int = (x >> image_subpixel_shift) + start;
+ int x_lr;
+
+ y_hr = image_subpixel_mask - (y_hr & image_subpixel_mask);
+ fg[0] = fg[1] = fg[2] = image_filter_size / 2;
+
+ do
+ {
+ x_count = diameter;
+ weight_y = weight_array[y_hr];
+ x_hr = image_subpixel_mask - x_fract;
+ x_lr = m_wrap_mode_x(x_int);
+ const value_type* row_ptr = (const value_type*)base_type::source_image().row(y_lr);
+ do
+ {
+ const value_type* fg_ptr = row_ptr + x_lr * 3;
+ int weight = (weight_y * weight_array[x_hr] +
+ image_filter_size / 2) >>
+ image_filter_shift;
+
+ fg[0] += fg_ptr[0] * weight;
+ fg[1] += fg_ptr[1] * weight;
+ fg[2] += fg_ptr[2] * weight;
+
+ x_hr += image_subpixel_size;
+ x_lr = ++m_wrap_mode_x;
+ } while(--x_count);
+
+ y_hr += image_subpixel_size;
+ y_lr = ++m_wrap_mode_y;
+ } while(--y_count);
+
+ fg[0] >>= image_filter_shift;
+ fg[1] >>= image_filter_shift;
+ fg[2] >>= image_filter_shift;
+
+ if(fg[0] < 0) fg[0] = 0;
+ if(fg[1] < 0) fg[1] = 0;
+ if(fg[2] < 0) fg[2] = 0;
+
+ if(fg[0] > base_mask) fg[0] = base_mask;
+ if(fg[1] > base_mask) fg[1] = base_mask;
+ if(fg[2] > base_mask) fg[2] = base_mask;
+
+ span->r = (value_type)fg[order_type::R];
+ span->g = (value_type)fg[order_type::G];
+ span->b = (value_type)fg[order_type::B];
+ span->a = base_mask;
+ ++span;
+ ++intr;
+ } while(--len);
+
+ return base_type::allocator().span();
+ }
+
+ private:
+ WrapModeX m_wrap_mode_x;
+ WrapModeY m_wrap_mode_y;
+ };
+
+
+}
+
+
+#endif
+
+
+
diff --git a/agg/inc/agg_span_pattern_filter_rgba.h b/agg/inc/agg_span_pattern_filter_rgba.h
new file mode 100755
index 000000000000..8460880fdb79
--- /dev/null
+++ b/agg/inc/agg_span_pattern_filter_rgba.h
@@ -0,0 +1,584 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// Adaptation for high precision colors has been sponsored by
+// Liberty Technology Systems, Inc., visit http://lib-sys.com
+//
+// Liberty Technology Systems, Inc. is the provider of
+// PostScript and PDF technology for software developers.
+//
+//----------------------------------------------------------------------------
+//
+// classes span_pattern_filter_rgba*
+//
+//----------------------------------------------------------------------------
+#ifndef AGG_SPAN_PATTERN_FILTER_RGBA_INCLUDED
+#define AGG_SPAN_PATTERN_FILTER_RGBA_INCLUDED
+
+#include "agg_basics.h"
+#include "agg_color_rgba.h"
+#include "agg_span_pattern.h"
+#include "agg_span_image_filter.h"
+
+
+namespace agg
+{
+
+ //===========================================span_pattern_filter_rgba
+ template<class ColorT,
+ class Order,
+ class Interpolator,
+ class WrapModeX,
+ class WrapModeY,
+ class Allocator = span_allocator<ColorT> >
+ class span_pattern_filter_rgba_nn :
+ public span_image_filter<ColorT, Interpolator, Allocator>
+ {
+ public:
+ typedef ColorT color_type;
+ typedef Order order_type;
+ typedef Interpolator interpolator_type;
+ typedef Allocator alloc_type;
+ typedef span_image_filter<color_type, interpolator_type, alloc_type> base_type;
+ typedef typename color_type::value_type value_type;
+ typedef typename color_type::calc_type calc_type;
+ enum
+ {
+ base_shift = color_type::base_shift,
+ base_mask = color_type::base_mask
+ };
+
+ //--------------------------------------------------------------------
+ span_pattern_filter_rgba_nn(alloc_type& alloc) :
+ base_type(alloc),
+ m_wrap_mode_x(1),
+ m_wrap_mode_y(1)
+ {}
+
+ //--------------------------------------------------------------------
+ span_pattern_filter_rgba_nn(alloc_type& alloc,
+ const rendering_buffer& src,
+ interpolator_type& inter) :
+ base_type(alloc, src, color_type(0,0,0,0), inter, 0),
+ m_wrap_mode_x(src.width()),
+ m_wrap_mode_y(src.height())
+ {}
+
+ //--------------------------------------------------------------------
+ void source_image(const rendering_buffer& src)
+ {
+ base_type::source_image(src);
+ m_wrap_mode_x = WrapModeX(src.width());
+ m_wrap_mode_y = WrapModeX(src.height());
+ }
+
+ //--------------------------------------------------------------------
+ color_type* generate(int x, int y, unsigned len)
+ {
+ base_type::interpolator().begin(x + base_type::filter_dx_dbl(),
+ y + base_type::filter_dy_dbl(), len);
+ const value_type *fg_ptr;
+ color_type* span = base_type::allocator().span();
+ do
+ {
+ base_type::interpolator().coordinates(&x, &y);
+
+ x = m_wrap_mode_x(x >> image_subpixel_shift);
+ y = m_wrap_mode_y(y >> image_subpixel_shift);
+
+ fg_ptr = (value_type*)base_type::source_image().row(y) + (x << 2);
+ span->r = fg_ptr[order_type::R];
+ span->g = fg_ptr[order_type::G];
+ span->b = fg_ptr[order_type::B];
+ span->a = fg_ptr[order_type::A];
+ ++span;
+ ++base_type::interpolator();
+
+ } while(--len);
+
+ return base_type::allocator().span();
+ }
+
+ private:
+ WrapModeX m_wrap_mode_x;
+ WrapModeY m_wrap_mode_y;
+ };
+
+
+
+
+
+
+
+
+
+
+ //=====================================span_pattern_filter_rgba_bilinear
+ template<class ColorT,
+ class Order,
+ class Interpolator,
+ class WrapModeX,
+ class WrapModeY,
+ class Allocator = span_allocator<ColorT> >
+ class span_pattern_filter_rgba_bilinear :
+ public span_image_filter<ColorT, Interpolator, Allocator>
+ {
+ public:
+ typedef ColorT color_type;
+ typedef Order order_type;
+ typedef Interpolator interpolator_type;
+ typedef Allocator alloc_type;
+ typedef span_image_filter<color_type, interpolator_type, alloc_type> base_type;
+ typedef typename color_type::value_type value_type;
+ typedef typename color_type::calc_type calc_type;
+ enum
+ {
+ base_shift = color_type::base_shift,
+ base_mask = color_type::base_mask
+ };
+
+ //--------------------------------------------------------------------
+ span_pattern_filter_rgba_bilinear(alloc_type& alloc) :
+ base_type(alloc),
+ m_wrap_mode_x(1),
+ m_wrap_mode_y(1)
+ {}
+
+ //--------------------------------------------------------------------
+ span_pattern_filter_rgba_bilinear(alloc_type& alloc,
+ const rendering_buffer& src,
+ interpolator_type& inter) :
+ base_type(alloc, src, color_type(0,0,0,0), inter, 0),
+ m_wrap_mode_x(src.width()),
+ m_wrap_mode_y(src.height())
+ {}
+
+ //-------------------------------------------------------------------
+ void source_image(const rendering_buffer& src)
+ {
+ base_type::source_image(src);
+ m_wrap_mode_x = WrapModeX(src.width());
+ m_wrap_mode_y = WrapModeX(src.height());
+ }
+
+ //--------------------------------------------------------------------
+ color_type* generate(int x, int y, unsigned len)
+ {
+ base_type::interpolator().begin(x + base_type::filter_dx_dbl(),
+ y + base_type::filter_dy_dbl(), len);
+ calc_type fg[4];
+ const value_type *fg_ptr;
+ color_type* span = base_type::allocator().span();
+
+ do
+ {
+ int x_hr;
+ int y_hr;
+
+ base_type::interpolator().coordinates(&x_hr, &y_hr);
+
+ x_hr -= base_type::filter_dx_int();
+ y_hr -= base_type::filter_dy_int();
+
+ int x_lr = x_hr >> image_subpixel_shift;
+ int y_lr = y_hr >> image_subpixel_shift;
+
+ unsigned x1 = m_wrap_mode_x(x_lr);
+ unsigned x2 = ++m_wrap_mode_x;
+ x1 <<= 2;
+ x2 <<= 2;
+
+ unsigned y1 = m_wrap_mode_y(y_lr);
+ unsigned y2 = ++m_wrap_mode_y;
+ const value_type* ptr1 = (value_type*)base_type::source_image().row(y1);
+ const value_type* ptr2 = (value_type*)base_type::source_image().row(y2);
+
+ fg[0] =
+ fg[1] =
+ fg[2] =
+ fg[3] = image_subpixel_size * image_subpixel_size / 2;
+
+ x_hr &= image_subpixel_mask;
+ y_hr &= image_subpixel_mask;
+
+ int weight;
+ fg_ptr = ptr1 + x1;
+ weight = (image_subpixel_size - x_hr) *
+ (image_subpixel_size - y_hr);
+ fg[0] += weight * fg_ptr[0];
+ fg[1] += weight * fg_ptr[1];
+ fg[2] += weight * fg_ptr[2];
+ fg[3] += weight * fg_ptr[3];
+
+ fg_ptr = ptr1 + x2;
+ weight = x_hr * (image_subpixel_size - y_hr);
+ fg[0] += weight * fg_ptr[0];
+ fg[1] += weight * fg_ptr[1];
+ fg[2] += weight * fg_ptr[2];
+ fg[3] += weight * fg_ptr[3];
+
+ fg_ptr = ptr2 + x1;
+ weight = (image_subpixel_size - x_hr) * y_hr;
+ fg[0] += weight * fg_ptr[0];
+ fg[1] += weight * fg_ptr[1];
+ fg[2] += weight * fg_ptr[2];
+ fg[3] += weight * fg_ptr[3];
+
+ fg_ptr = ptr2 + x2;
+ weight = x_hr * y_hr;
+ fg[0] += weight * fg_ptr[0];
+ fg[1] += weight * fg_ptr[1];
+ fg[2] += weight * fg_ptr[2];
+ fg[3] += weight * fg_ptr[3];
+
+ span->r = (value_type)(fg[order_type::R] >> image_subpixel_shift * 2);
+ span->g = (value_type)(fg[order_type::G] >> image_subpixel_shift * 2);
+ span->b = (value_type)(fg[order_type::B] >> image_subpixel_shift * 2);
+ span->a = (value_type)(fg[order_type::A] >> image_subpixel_shift * 2);
+ ++span;
+ ++base_type::interpolator();
+
+ } while(--len);
+
+ return base_type::allocator().span();
+ }
+ private:
+ WrapModeX m_wrap_mode_x;
+ WrapModeY m_wrap_mode_y;
+ };
+
+
+
+
+
+
+
+
+ //=====================================span_pattern_filter_rgba_2x2
+ template<class ColorT,
+ class Order,
+ class Interpolator,
+ class WrapModeX,
+ class WrapModeY,
+ class Allocator = span_allocator<ColorT> >
+ class span_pattern_filter_rgba_2x2 :
+ public span_image_filter<ColorT, Interpolator, Allocator>
+ {
+ public:
+ typedef ColorT color_type;
+ typedef Order order_type;
+ typedef Interpolator interpolator_type;
+ typedef Allocator alloc_type;
+ typedef span_image_filter<color_type, interpolator_type, alloc_type> base_type;
+ typedef typename color_type::value_type value_type;
+ typedef typename color_type::calc_type calc_type;
+ enum
+ {
+ base_shift = color_type::base_shift,
+ base_mask = color_type::base_mask
+ };
+
+ //--------------------------------------------------------------------
+ span_pattern_filter_rgba_2x2(alloc_type& alloc) :
+ base_type(alloc),
+ m_wrap_mode_x(1),
+ m_wrap_mode_y(1)
+ {}
+
+ //--------------------------------------------------------------------
+ span_pattern_filter_rgba_2x2(alloc_type& alloc,
+ const rendering_buffer& src,
+ interpolator_type& inter,
+ const image_filter_lut& filter) :
+ base_type(alloc, src, color_type(0,0,0,0), inter, &filter),
+ m_wrap_mode_x(src.width()),
+ m_wrap_mode_y(src.height())
+ {}
+
+ //-------------------------------------------------------------------
+ void source_image(const rendering_buffer& src)
+ {
+ base_type::source_image(src);
+ m_wrap_mode_x = WrapModeX(src.width());
+ m_wrap_mode_y = WrapModeX(src.height());
+ }
+
+ //--------------------------------------------------------------------
+ color_type* generate(int x, int y, unsigned len)
+ {
+ base_type::interpolator().begin(x + base_type::filter_dx_dbl(),
+ y + base_type::filter_dy_dbl(), len);
+ calc_type fg[4];
+ const value_type *fg_ptr;
+ color_type* span = base_type::allocator().span();
+ const int16* weight_array = base_type::filter().weight_array() +
+ ((base_type::filter().diameter()/2 - 1) <<
+ image_subpixel_shift);
+ do
+ {
+ int x_hr;
+ int y_hr;
+
+ base_type::interpolator().coordinates(&x_hr, &y_hr);
+
+ x_hr -= base_type::filter_dx_int();
+ y_hr -= base_type::filter_dy_int();
+
+ int x_lr = x_hr >> image_subpixel_shift;
+ int y_lr = y_hr >> image_subpixel_shift;
+
+ unsigned x1 = m_wrap_mode_x(x_lr);
+ unsigned x2 = ++m_wrap_mode_x;
+ x1 <<= 2;
+ x2 <<= 2;
+
+ unsigned y1 = m_wrap_mode_y(y_lr);
+ unsigned y2 = ++m_wrap_mode_y;
+ const value_type* ptr1 = (value_type*)base_type::source_image().row(y1);
+ const value_type* ptr2 = (value_type*)base_type::source_image().row(y2);
+
+ fg[0] = fg[1] = fg[2] = fg[3] = image_filter_size / 2;
+
+ x_hr &= image_subpixel_mask;
+ y_hr &= image_subpixel_mask;
+
+ int weight;
+ fg_ptr = ptr1 + x1;
+ weight = (weight_array[x_hr + image_subpixel_size] *
+ weight_array[y_hr + image_subpixel_size] +
+ image_filter_size / 2) >>
+ image_filter_shift;
+ fg[0] += weight * fg_ptr[0];
+ fg[1] += weight * fg_ptr[1];
+ fg[2] += weight * fg_ptr[2];
+ fg[3] += weight * fg_ptr[3];
+
+ fg_ptr = ptr1 + x2;
+ weight = (weight_array[x_hr] *
+ weight_array[y_hr + image_subpixel_size] +
+ image_filter_size / 2) >>
+ image_filter_shift;
+ fg[0] += weight * fg_ptr[0];
+ fg[1] += weight * fg_ptr[1];
+ fg[2] += weight * fg_ptr[2];
+ fg[3] += weight * fg_ptr[3];
+
+ fg_ptr = ptr2 + x1;
+ weight = (weight_array[x_hr + image_subpixel_size] *
+ weight_array[y_hr] +
+ image_filter_size / 2) >>
+ image_filter_shift;
+ fg[0] += weight * fg_ptr[0];
+ fg[1] += weight * fg_ptr[1];
+ fg[2] += weight * fg_ptr[2];
+ fg[3] += weight * fg_ptr[3];
+
+ fg_ptr = ptr2 + x2;
+ weight = (weight_array[x_hr] *
+ weight_array[y_hr] +
+ image_filter_size / 2) >>
+ image_filter_shift;
+ fg[0] += weight * fg_ptr[0];
+ fg[1] += weight * fg_ptr[1];
+ fg[2] += weight * fg_ptr[2];
+ fg[3] += weight * fg_ptr[3];
+
+ fg[0] >>= image_filter_shift;
+ fg[1] >>= image_filter_shift;
+ fg[2] >>= image_filter_shift;
+ fg[3] >>= image_filter_shift;
+
+ if(fg[order_type::A] > base_mask) fg[order_type::A] = base_mask;
+ if(fg[order_type::R] > fg[order_type::A]) fg[order_type::R] = fg[order_type::A];
+ if(fg[order_type::G] > fg[order_type::A]) fg[order_type::G] = fg[order_type::A];
+ if(fg[order_type::B] > fg[order_type::A]) fg[order_type::B] = fg[order_type::A];
+
+ span->r = (value_type)fg[order_type::R];
+ span->g = (value_type)fg[order_type::G];
+ span->b = (value_type)fg[order_type::B];
+ span->a = (value_type)fg[order_type::A];
+ ++span;
+ ++base_type::interpolator();
+
+ } while(--len);
+
+ return base_type::allocator().span();
+ }
+ private:
+ WrapModeX m_wrap_mode_x;
+ WrapModeY m_wrap_mode_y;
+ };
+
+
+
+
+
+
+
+
+
+
+
+
+ //==============================================span_pattern_filter_rgba
+ template<class ColorT,
+ class Order,
+ class Interpolator,
+ class WrapModeX,
+ class WrapModeY,
+ class Allocator = span_allocator<ColorT> >
+ class span_pattern_filter_rgba :
+ public span_image_filter<ColorT, Interpolator, Allocator>
+ {
+ public:
+ typedef ColorT color_type;
+ typedef Order order_type;
+ typedef Interpolator interpolator_type;
+ typedef Allocator alloc_type;
+ typedef span_image_filter<color_type, interpolator_type, alloc_type> base_type;
+ typedef typename color_type::value_type value_type;
+ typedef typename color_type::calc_type calc_type;
+ enum
+ {
+ base_shift = color_type::base_shift,
+ base_mask = color_type::base_mask
+ };
+
+ //--------------------------------------------------------------------
+ span_pattern_filter_rgba(alloc_type& alloc) :
+ base_type(alloc)
+ {}
+
+ //--------------------------------------------------------------------
+ span_pattern_filter_rgba(alloc_type& alloc,
+ const rendering_buffer& src,
+ interpolator_type& inter,
+ const image_filter_lut& filter) :
+ base_type(alloc, src, color_type(0,0,0,0), inter, &filter),
+ m_wrap_mode_x(src.width()),
+ m_wrap_mode_y(src.height())
+ {}
+
+ //--------------------------------------------------------------------
+ void source_image(const rendering_buffer& src)
+ {
+ base_type::source_image(src);
+ m_wrap_mode_x = WrapModeX(src.width());
+ m_wrap_mode_y = WrapModeX(src.height());
+ }
+
+ //--------------------------------------------------------------------
+ color_type* generate(int x, int y, unsigned len)
+ {
+ base_type::interpolator().begin(x + base_type::filter_dx_dbl(),
+ y + base_type::filter_dy_dbl(), len);
+ int fg[4];
+
+ unsigned diameter = base_type::filter().diameter();
+ int start = base_type::filter().start();
+ const int16* weight_array = base_type::filter().weight_array();
+
+ color_type* span = base_type::allocator().span();
+
+ int x_count;
+ int weight_y;
+
+ do
+ {
+ base_type::interpolator().coordinates(&x, &y);
+
+ x -= base_type::filter_dx_int();
+ y -= base_type::filter_dy_int();
+
+ int x_hr = x;
+ int y_hr = y;
+
+ int x_fract = x_hr & image_subpixel_mask;
+ unsigned y_count = diameter;
+
+ int y_lr = m_wrap_mode_y((y >> image_subpixel_shift) + start);
+ int x_int = (x >> image_subpixel_shift) + start;
+ int x_lr;
+
+ y_hr = image_subpixel_mask - (y_hr & image_subpixel_mask);
+ fg[0] = fg[1] = fg[2] = fg[3] = image_filter_size / 2;
+
+ do
+ {
+ x_count = diameter;
+ weight_y = weight_array[y_hr];
+ x_hr = image_subpixel_mask - x_fract;
+ x_lr = m_wrap_mode_x(x_int);
+ const value_type* row_ptr = (value_type*)base_type::source_image().row(y_lr);
+ do
+ {
+ const value_type* fg_ptr = row_ptr + (x_lr << 2);
+ int weight = (weight_y * weight_array[x_hr] +
+ image_filter_size / 2) >>
+ image_filter_shift;
+
+ fg[0] += fg_ptr[0] * weight;
+ fg[1] += fg_ptr[1] * weight;
+ fg[2] += fg_ptr[2] * weight;
+ fg[3] += fg_ptr[3] * weight;
+
+ x_hr += image_subpixel_size;
+ x_lr = ++m_wrap_mode_x;
+ } while(--x_count);
+
+ y_hr += image_subpixel_size;
+ y_lr = ++m_wrap_mode_y;
+ } while(--y_count);
+
+ fg[0] >>= image_filter_shift;
+ fg[1] >>= image_filter_shift;
+ fg[2] >>= image_filter_shift;
+ fg[3] >>= image_filter_shift;
+
+ if(fg[0] < 0) fg[0] = 0;
+ if(fg[1] < 0) fg[1] = 0;
+ if(fg[2] < 0) fg[2] = 0;
+ if(fg[3] < 0) fg[3] = 0;
+
+ if(fg[order_type::A] > base_mask) fg[order_type::A] = base_mask;
+ if(fg[order_type::R] > fg[order_type::A]) fg[order_type::R] = fg[order_type::A];
+ if(fg[order_type::G] > fg[order_type::A]) fg[order_type::G] = fg[order_type::A];
+ if(fg[order_type::B] > fg[order_type::A]) fg[order_type::B] = fg[order_type::A];
+
+ span->r = fg[order_type::R];
+ span->g = fg[order_type::G];
+ span->b = fg[order_type::B];
+ span->a = fg[order_type::A];
+ ++span;
+ ++base_type::interpolator();
+
+ } while(--len);
+
+ return base_type::allocator().span();
+ }
+
+ private:
+ WrapModeX m_wrap_mode_x;
+ WrapModeY m_wrap_mode_y;
+ };
+
+
+}
+
+
+#endif
+
+
+
diff --git a/agg/inc/agg_span_pattern_resample_gray.h b/agg/inc/agg_span_pattern_resample_gray.h
new file mode 100755
index 000000000000..212209502f5f
--- /dev/null
+++ b/agg/inc/agg_span_pattern_resample_gray.h
@@ -0,0 +1,320 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+
+#ifndef AGG_SPAN_PATTERN_RESAMPLE_GRAY_INCLUDED
+#define AGG_SPAN_PATTERN_RESAMPLE_GRAY_INCLUDED
+
+#include "agg_color_gray.h"
+#include "agg_span_image_resample.h"
+
+namespace agg
+{
+
+ //=======================================span_pattern_resample_gray_affine
+ template<class ColorT,
+ class WrapModeX,
+ class WrapModeY,
+ class Allocator = span_allocator<ColorT> >
+ class span_pattern_resample_gray_affine :
+ public span_image_resample_affine<ColorT, Allocator>
+ {
+ public:
+ typedef ColorT color_type;
+ typedef Allocator alloc_type;
+ typedef span_image_resample_affine<color_type, alloc_type> base_type;
+ typedef typename base_type::interpolator_type interpolator_type;
+ typedef typename color_type::value_type value_type;
+ typedef typename color_type::long_type long_type;
+ enum
+ {
+ base_shift = color_type::base_shift,
+ base_mask = color_type::base_mask,
+ downscale_shift = image_filter_shift
+ };
+
+ //--------------------------------------------------------------------
+ span_pattern_resample_gray_affine(alloc_type& alloc) :
+ base_type(alloc),
+ m_wrap_mode_x(1),
+ m_wrap_mode_y(1)
+ {}
+
+ //--------------------------------------------------------------------
+ span_pattern_resample_gray_affine(alloc_type& alloc,
+ const rendering_buffer& src,
+ interpolator_type& inter,
+ const image_filter_lut& filter) :
+ base_type(alloc, src, color_type(0,0), inter, filter),
+ m_wrap_mode_x(src.width()),
+ m_wrap_mode_y(src.height())
+ {}
+
+ //--------------------------------------------------------------------
+ void source_image(const rendering_buffer& src)
+ {
+ base_type::source_image(src);
+ m_wrap_mode_x = WrapModeX(src.width());
+ m_wrap_mode_y = WrapModeX(src.height());
+ }
+
+ //--------------------------------------------------------------------
+ color_type* generate(int x, int y, unsigned len)
+ {
+ color_type* span = base_type::allocator().span();
+ interpolator_type& intr = base_type::interpolator();
+ intr.begin(x + base_type::filter_dx_dbl(),
+ y + base_type::filter_dy_dbl(), len);
+ long_type fg;
+
+ int diameter = base_type::filter().diameter();
+ int filter_size = diameter << image_subpixel_shift;
+ int radius_x = (diameter * base_type::m_rx) >> 1;
+ int radius_y = (diameter * base_type::m_ry) >> 1;
+ int maxx = base_type::source_image().width() - 1;
+ int maxy = base_type::source_image().height() - 1;
+ const int16* weight_array = base_type::filter().weight_array();
+
+ do
+ {
+ intr.coordinates(&x, &y);
+
+ x += base_type::filter_dx_int() - radius_x;
+ y += base_type::filter_dy_int() - radius_y;
+
+ fg = image_filter_size / 2;
+
+ int y_lr = m_wrap_mode_y(y >> image_subpixel_shift);
+ int y_hr = ((image_subpixel_mask - (y & image_subpixel_mask)) *
+ base_type::m_ry_inv) >>
+ image_subpixel_shift;
+ int total_weight = 0;
+ int x_lr_ini = x >> image_subpixel_shift;
+ int x_hr_ini = ((image_subpixel_mask - (x & image_subpixel_mask)) *
+ base_type::m_rx_inv) >>
+ image_subpixel_shift;
+ do
+ {
+ int weight_y = weight_array[y_hr];
+ int x_lr = m_wrap_mode_x(x_lr_ini);
+ int x_hr = x_hr_ini;
+ const value_type* row_ptr = (const value_type*)base_type::source_image().row(y_lr);
+ do
+ {
+ const value_type* fg_ptr = row_ptr + x_lr;
+ int weight = (weight_y * weight_array[x_hr] +
+ image_filter_size / 2) >>
+ downscale_shift;
+
+ fg += *fg_ptr * weight;
+ total_weight += weight;
+ x_hr += base_type::m_rx_inv;
+ x_lr = ++m_wrap_mode_x;
+ }
+ while(x_hr < filter_size);
+
+ y_hr += base_type::m_ry_inv;
+ y_lr = ++m_wrap_mode_y;
+ } while(y_hr < filter_size);
+
+ fg /= total_weight;
+
+ if(fg < 0) fg = 0;
+ if(fg > base_mask) fg = base_mask;
+
+ span->v = (value_type)fg;
+ span->a = (value_type)base_mask;
+
+ ++span;
+ ++intr;
+ } while(--len);
+ return base_type::allocator().span();
+ }
+
+ private:
+ WrapModeX m_wrap_mode_x;
+ WrapModeY m_wrap_mode_y;
+ };
+
+
+
+
+
+
+
+ //============================================span_pattern_resample_gray
+ template<class ColorT,
+ class Interpolator,
+ class WrapModeX,
+ class WrapModeY,
+ class Allocator = span_allocator<ColorT> >
+ class span_pattern_resample_gray :
+ public span_image_resample<ColorT, Interpolator, Allocator>
+ {
+ public:
+ typedef ColorT color_type;
+ typedef Interpolator interpolator_type;
+ typedef Allocator alloc_type;
+ typedef span_image_resample<color_type, interpolator_type, alloc_type> base_type;
+ typedef typename color_type::value_type value_type;
+ typedef typename color_type::long_type long_type;
+ enum
+ {
+ base_shift = color_type::base_shift,
+ base_mask = color_type::base_mask,
+ downscale_shift = image_filter_shift
+ };
+
+ //--------------------------------------------------------------------
+ span_pattern_resample_gray(alloc_type& alloc) :
+ base_type(alloc),
+ m_wrap_mode_x(1),
+ m_wrap_mode_y(1)
+ {}
+
+ //--------------------------------------------------------------------
+ span_pattern_resample_gray(alloc_type& alloc,
+ const rendering_buffer& src,
+ interpolator_type& inter,
+ const image_filter_lut& filter) :
+ base_type(alloc, src, color_type(0,0), inter, filter),
+ m_wrap_mode_x(src.width()),
+ m_wrap_mode_y(src.height())
+ {}
+
+ //--------------------------------------------------------------------
+ void source_image(const rendering_buffer& src)
+ {
+ base_type::source_image(src);
+ m_wrap_mode_x = WrapModeX(src.width());
+ m_wrap_mode_y = WrapModeX(src.height());
+ }
+
+ //--------------------------------------------------------------------
+ color_type* generate(int x, int y, unsigned len)
+ {
+ color_type* span = base_type::allocator().span();
+ interpolator_type& intr = base_type::interpolator();
+ intr.begin(x + base_type::filter_dx_dbl(),
+ y + base_type::filter_dy_dbl(), len);
+ long_type fg;
+
+ int diameter = base_type::filter().diameter();
+ int filter_size = diameter << image_subpixel_shift;
+ const int16* weight_array = base_type::filter().weight_array();
+
+ do
+ {
+ int rx;
+ int ry;
+ int rx_inv = image_subpixel_size;
+ int ry_inv = image_subpixel_size;
+ intr.coordinates(&x, &y);
+ intr.local_scale(&rx, &ry);
+
+ rx = (rx * base_type::m_blur_x) >> image_subpixel_shift;
+ ry = (ry * base_type::m_blur_y) >> image_subpixel_shift;
+
+ if(rx < image_subpixel_size)
+ {
+ rx = image_subpixel_size;
+ }
+ else
+ {
+ if(rx > image_subpixel_size * base_type::m_scale_limit)
+ {
+ rx = image_subpixel_size * base_type::m_scale_limit;
+ }
+ rx_inv = image_subpixel_size * image_subpixel_size / rx;
+ }
+
+ if(ry < image_subpixel_size)
+ {
+ ry = image_subpixel_size;
+ }
+ else
+ {
+ if(ry > image_subpixel_size * base_type::m_scale_limit)
+ {
+ ry = image_subpixel_size * base_type::m_scale_limit;
+ }
+ ry_inv = image_subpixel_size * image_subpixel_size / ry;
+ }
+
+ int radius_x = (diameter * rx) >> 1;
+ int radius_y = (diameter * ry) >> 1;
+ int maxx = base_type::source_image().width() - 1;
+ int maxy = base_type::source_image().height() - 1;
+
+ x += base_type::filter_dx_int() - radius_x;
+ y += base_type::filter_dy_int() - radius_y;
+
+ fg = image_filter_size / 2;
+
+ int y_lr = m_wrap_mode_y(y >> image_subpixel_shift);
+ int y_hr = ((image_subpixel_mask - (y & image_subpixel_mask)) *
+ ry_inv) >>
+ image_subpixel_shift;
+ int total_weight = 0;
+ int x_lr_ini = x >> image_subpixel_shift;
+ int x_hr_ini = ((image_subpixel_mask - (x & image_subpixel_mask)) *
+ rx_inv) >>
+ image_subpixel_shift;
+
+ do
+ {
+ int weight_y = weight_array[y_hr];
+ int x_lr = m_wrap_mode_x(x_lr_ini);
+ int x_hr = x_hr_ini;
+ const value_type* row_ptr = (const value_type*)base_type::source_image().row(y_lr);
+ do
+ {
+ const value_type* fg_ptr = row_ptr + x_lr;
+ int weight = (weight_y * weight_array[x_hr] +
+ image_filter_size / 2) >>
+ downscale_shift;
+ fg += *fg_ptr * weight;
+ total_weight += weight;
+ x_hr += rx_inv;
+ x_lr = ++m_wrap_mode_x;
+ }
+ while(x_hr < filter_size);
+ y_hr += ry_inv;
+ y_lr = ++m_wrap_mode_y;
+ }
+ while(y_hr < filter_size);
+
+ fg /= total_weight;
+
+ if(fg < 0) fg = 0;
+ if(fg > base_mask) fg = base_mask;
+
+ span->v = (value_type)fg;
+ span->a = (value_type)base_mask;
+
+ ++span;
+ ++intr;
+ } while(--len);
+ return base_type::allocator().span();
+ }
+
+ private:
+ WrapModeX m_wrap_mode_x;
+ WrapModeY m_wrap_mode_y;
+ };
+
+}
+
+
+#endif
diff --git a/agg/inc/agg_span_pattern_resample_rgb.h b/agg/inc/agg_span_pattern_resample_rgb.h
new file mode 100755
index 000000000000..baef860eb472
--- /dev/null
+++ b/agg/inc/agg_span_pattern_resample_rgb.h
@@ -0,0 +1,346 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+
+#ifndef AGG_SPAN_PATTERN_RESAMPLE_RGB_INCLUDED
+#define AGG_SPAN_PATTERN_RESAMPLE_RGB_INCLUDED
+
+#include "agg_color_rgba.h"
+#include "agg_span_image_resample.h"
+
+namespace agg
+{
+
+ //========================================span_pattern_resample_rgb_affine
+ template<class ColorT,
+ class Order,
+ class WrapModeX,
+ class WrapModeY,
+ class Allocator = span_allocator<ColorT> >
+ class span_pattern_resample_rgb_affine :
+ public span_image_resample_affine<ColorT, Allocator>
+ {
+ public:
+ typedef ColorT color_type;
+ typedef Order order_type;
+ typedef Allocator alloc_type;
+ typedef span_image_resample_affine<color_type, alloc_type> base_type;
+ typedef typename base_type::interpolator_type interpolator_type;
+ typedef typename color_type::value_type value_type;
+ typedef typename color_type::long_type long_type;
+ enum
+ {
+ base_shift = color_type::base_shift,
+ base_mask = color_type::base_mask,
+ downscale_shift = image_filter_shift
+ };
+
+ //--------------------------------------------------------------------
+ span_pattern_resample_rgb_affine(alloc_type& alloc) :
+ base_type(alloc),
+ m_wrap_mode_x(1),
+ m_wrap_mode_y(1)
+ {}
+
+ //--------------------------------------------------------------------
+ span_pattern_resample_rgb_affine(alloc_type& alloc,
+ const rendering_buffer& src,
+ interpolator_type& inter,
+ const image_filter_lut& filter_) :
+ base_type(alloc, src, color_type(0,0,0,0), inter, filter_),
+ m_wrap_mode_x(src.width()),
+ m_wrap_mode_y(src.height())
+ {}
+
+ //--------------------------------------------------------------------
+ void source_image(const rendering_buffer& src)
+ {
+ base_type::source_image(src);
+ m_wrap_mode_x = WrapModeX(src.width());
+ m_wrap_mode_y = WrapModeX(src.height());
+ }
+
+ //--------------------------------------------------------------------
+ color_type* generate(int x, int y, unsigned len)
+ {
+ color_type* span = base_type::allocator().span();
+ interpolator_type& intr = base_type::interpolator();
+ intr.begin(x + base_type::filter_dx_dbl(),
+ y + base_type::filter_dy_dbl(), len);
+ long_type fg[3];
+
+ int diameter = base_type::filter().diameter();
+ int filter_size = diameter << image_subpixel_shift;
+ int radius_x = (diameter * base_type::m_rx) >> 1;
+ int radius_y = (diameter * base_type::m_ry) >> 1;
+ int maxx = base_type::source_image().width() - 1;
+ int maxy = base_type::source_image().height() - 1;
+ const int16* weight_array = base_type::filter().weight_array();
+
+ do
+ {
+ intr.coordinates(&x, &y);
+
+ x += base_type::filter_dx_int() - radius_x;
+ y += base_type::filter_dy_int() - radius_y;
+
+ fg[0] = fg[1] = fg[2] = image_filter_size / 2;
+
+ int y_lr = m_wrap_mode_y(y >> image_subpixel_shift);
+ int y_hr = ((image_subpixel_mask - (y & image_subpixel_mask)) *
+ base_type::m_ry_inv) >>
+ image_subpixel_shift;
+ int total_weight = 0;
+ int x_lr_ini = x >> image_subpixel_shift;
+ int x_hr_ini = ((image_subpixel_mask - (x & image_subpixel_mask)) *
+ base_type::m_rx_inv) >>
+ image_subpixel_shift;
+ do
+ {
+ int weight_y = weight_array[y_hr];
+ int x_lr = m_wrap_mode_x(x_lr_ini);
+ int x_hr = x_hr_ini;
+ const value_type* row_ptr = (const value_type*)base_type::source_image().row(y_lr);
+ do
+ {
+ const value_type* fg_ptr = row_ptr + x_lr * 3;
+ int weight = (weight_y * weight_array[x_hr] +
+ image_filter_size / 2) >>
+ downscale_shift;
+
+ fg[0] += fg_ptr[0] * weight;
+ fg[1] += fg_ptr[1] * weight;
+ fg[2] += fg_ptr[2] * weight;
+ total_weight += weight;
+ x_hr += base_type::m_rx_inv;
+ x_lr = ++m_wrap_mode_x;
+ }
+ while(x_hr < filter_size);
+
+ y_hr += base_type::m_ry_inv;
+ y_lr = ++m_wrap_mode_y;
+ } while(y_hr < filter_size);
+
+ fg[0] /= total_weight;
+ fg[1] /= total_weight;
+ fg[2] /= total_weight;
+
+ if(fg[0] < 0) fg[0] = 0;
+ if(fg[1] < 0) fg[1] = 0;
+ if(fg[2] < 0) fg[2] = 0;
+
+ if(fg[0] > base_mask) fg[0] = base_mask;
+ if(fg[1] > base_mask) fg[1] = base_mask;
+ if(fg[2] > base_mask) fg[2] = base_mask;
+
+ span->r = (value_type)fg[order_type::R];
+ span->g = (value_type)fg[order_type::G];
+ span->b = (value_type)fg[order_type::B];
+ span->a = (value_type)base_mask;
+
+ ++span;
+ ++intr;
+ } while(--len);
+ return base_type::allocator().span();
+ }
+
+ private:
+ WrapModeX m_wrap_mode_x;
+ WrapModeY m_wrap_mode_y;
+ };
+
+
+
+
+
+
+
+ //=============================================span_pattern_resample_rgb
+ template<class ColorT,
+ class Order,
+ class Interpolator,
+ class WrapModeX,
+ class WrapModeY,
+ class Allocator = span_allocator<ColorT> >
+ class span_pattern_resample_rgb :
+ public span_image_resample<ColorT, Interpolator, Allocator>
+ {
+ public:
+ typedef ColorT color_type;
+ typedef Order order_type;
+ typedef Interpolator interpolator_type;
+ typedef Allocator alloc_type;
+ typedef span_image_resample<color_type, interpolator_type, alloc_type> base_type;
+ typedef typename color_type::value_type value_type;
+ typedef typename color_type::long_type long_type;
+ enum
+ {
+ base_shift = color_type::base_shift,
+ base_mask = color_type::base_mask,
+ downscale_shift = image_filter_shift
+ };
+
+ //--------------------------------------------------------------------
+ span_pattern_resample_rgb(alloc_type& alloc) :
+ base_type(alloc),
+ m_wrap_mode_x(1),
+ m_wrap_mode_y(1)
+ {}
+
+ //--------------------------------------------------------------------
+ span_pattern_resample_rgb(alloc_type& alloc,
+ const rendering_buffer& src,
+ interpolator_type& inter,
+ const image_filter_lut& filter) :
+ base_type(alloc, src, color_type(0,0,0,0), inter, filter),
+ m_wrap_mode_x(src.width()),
+ m_wrap_mode_y(src.height())
+ {}
+
+ //--------------------------------------------------------------------
+ void source_image(const rendering_buffer& src)
+ {
+ base_type::source_image(src);
+ m_wrap_mode_x = WrapModeX(src.width());
+ m_wrap_mode_y = WrapModeX(src.height());
+ }
+
+ //--------------------------------------------------------------------
+ color_type* generate(int x, int y, unsigned len)
+ {
+ color_type* span = base_type::allocator().span();
+ interpolator_type& intr = base_type::interpolator();
+ intr.begin(x + base_type::filter_dx_dbl(),
+ y + base_type::filter_dy_dbl(), len);
+ long_type fg[3];
+
+ int diameter = base_type::filter().diameter();
+ int filter_size = diameter << image_subpixel_shift;
+ const int16* weight_array = base_type::filter().weight_array();
+
+ do
+ {
+ int rx;
+ int ry;
+ int rx_inv = image_subpixel_size;
+ int ry_inv = image_subpixel_size;
+ intr.coordinates(&x, &y);
+ intr.local_scale(&rx, &ry);
+
+ rx = (rx * base_type::m_blur_x) >> image_subpixel_shift;
+ ry = (ry * base_type::m_blur_y) >> image_subpixel_shift;
+
+ if(rx < image_subpixel_size)
+ {
+ rx = image_subpixel_size;
+ }
+ else
+ {
+ if(rx > image_subpixel_size * base_type::m_scale_limit)
+ {
+ rx = image_subpixel_size * base_type::m_scale_limit;
+ }
+ rx_inv = image_subpixel_size * image_subpixel_size / rx;
+ }
+
+ if(ry < image_subpixel_size)
+ {
+ ry = image_subpixel_size;
+ }
+ else
+ {
+ if(ry > image_subpixel_size * base_type::m_scale_limit)
+ {
+ ry = image_subpixel_size * base_type::m_scale_limit;
+ }
+ ry_inv = image_subpixel_size * image_subpixel_size / ry;
+ }
+
+ int radius_x = (diameter * rx) >> 1;
+ int radius_y = (diameter * ry) >> 1;
+ int maxx = base_type::source_image().width() - 1;
+ int maxy = base_type::source_image().height() - 1;
+
+ x += base_type::filter_dx_int() - radius_x;
+ y += base_type::filter_dy_int() - radius_y;
+
+ fg[0] = fg[1] = fg[2] = image_filter_size / 2;
+
+ int y_lr = m_wrap_mode_y(y >> image_subpixel_shift);
+ int y_hr = ((image_subpixel_mask - (y & image_subpixel_mask)) *
+ ry_inv) >>
+ image_subpixel_shift;
+ int total_weight = 0;
+ int x_lr_ini = x >> image_subpixel_shift;
+ int x_hr_ini = ((image_subpixel_mask - (x & image_subpixel_mask)) *
+ rx_inv) >>
+ image_subpixel_shift;
+
+ do
+ {
+ int weight_y = weight_array[y_hr];
+ int x_lr = m_wrap_mode_x(x_lr_ini);
+ int x_hr = x_hr_ini;
+ const value_type* row_ptr = (const value_type*)base_type::source_image().row(y_lr);
+ do
+ {
+ const value_type* fg_ptr = row_ptr + x_lr * 3;
+ int weight = (weight_y * weight_array[x_hr] +
+ image_filter_size / 2) >>
+ downscale_shift;
+ fg[0] += fg_ptr[0] * weight;
+ fg[1] += fg_ptr[1] * weight;
+ fg[2] += fg_ptr[2] * weight;
+ total_weight += weight;
+ x_hr += rx_inv;
+ x_lr = ++m_wrap_mode_x;
+ }
+ while(x_hr < filter_size);
+ y_hr += ry_inv;
+ y_lr = ++m_wrap_mode_y;
+ }
+ while(y_hr < filter_size);
+
+ fg[0] /= total_weight;
+ fg[1] /= total_weight;
+ fg[2] /= total_weight;
+
+ if(fg[0] < 0) fg[0] = 0;
+ if(fg[1] < 0) fg[1] = 0;
+ if(fg[2] < 0) fg[2] = 0;
+
+ if(fg[0] > base_mask) fg[0] = base_mask;
+ if(fg[1] > base_mask) fg[1] = base_mask;
+ if(fg[2] > base_mask) fg[2] = base_mask;
+
+ span->r = (value_type)fg[order_type::R];
+ span->g = (value_type)fg[order_type::G];
+ span->b = (value_type)fg[order_type::B];
+ span->a = (value_type)base_mask;
+
+ ++span;
+ ++intr;
+ } while(--len);
+ return base_type::allocator().span();
+ }
+
+ private:
+ WrapModeX m_wrap_mode_x;
+ WrapModeY m_wrap_mode_y;
+ };
+
+}
+
+
+#endif
diff --git a/agg/inc/agg_span_pattern_resample_rgba.h b/agg/inc/agg_span_pattern_resample_rgba.h
new file mode 100755
index 000000000000..37b4dade16f4
--- /dev/null
+++ b/agg/inc/agg_span_pattern_resample_rgba.h
@@ -0,0 +1,354 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+
+#ifndef AGG_SPAN_PATTERN_RESAMPLE_RGBA_INCLUDED
+#define AGG_SPAN_PATTERN_RESAMPLE_RGBA_INCLUDED
+
+#include "agg_color_rgba.h"
+#include "agg_span_image_resample.h"
+
+namespace agg
+{
+
+ //=======================================span_pattern_resample_rgba_affine
+ template<class ColorT,
+ class Order,
+ class WrapModeX,
+ class WrapModeY,
+ class Allocator = span_allocator<ColorT> >
+ class span_pattern_resample_rgba_affine :
+ public span_image_resample_affine<ColorT, Allocator>
+ {
+ public:
+ typedef ColorT color_type;
+ typedef Order order_type;
+ typedef Allocator alloc_type;
+ typedef span_image_resample_affine<color_type, alloc_type> base_type;
+ typedef typename base_type::interpolator_type interpolator_type;
+ typedef typename color_type::value_type value_type;
+ typedef typename color_type::long_type long_type;
+ enum
+ {
+ base_shift = color_type::base_shift,
+ base_mask = color_type::base_mask,
+ downscale_shift = image_filter_shift
+ };
+
+ //--------------------------------------------------------------------
+ span_pattern_resample_rgba_affine(alloc_type& alloc) :
+ base_type(alloc),
+ m_wrap_mode_x(1),
+ m_wrap_mode_y(1)
+ {}
+
+ //--------------------------------------------------------------------
+ span_pattern_resample_rgba_affine(alloc_type& alloc,
+ const rendering_buffer& src,
+ interpolator_type& inter,
+ const image_filter_lut& filter_) :
+ base_type(alloc, src, color_type(0,0,0,0), inter, filter_),
+ m_wrap_mode_x(src.width()),
+ m_wrap_mode_y(src.height())
+ {}
+
+ //--------------------------------------------------------------------
+ void source_image(const rendering_buffer& src)
+ {
+ base_type::source_image(src);
+ m_wrap_mode_x = WrapModeX(src.width());
+ m_wrap_mode_y = WrapModeX(src.height());
+ }
+
+ //--------------------------------------------------------------------
+ color_type* generate(int x, int y, unsigned len)
+ {
+ color_type* span = base_type::allocator().span();
+ interpolator_type& intr = base_type::interpolator();
+ intr.begin(x + base_type::filter_dx_dbl(),
+ y + base_type::filter_dy_dbl(), len);
+ long_type fg[4];
+
+ int diameter = base_type::filter().diameter();
+ int filter_size = diameter << image_subpixel_shift;
+ int radius_x = (diameter * base_type::m_rx) >> 1;
+ int radius_y = (diameter * base_type::m_ry) >> 1;
+ int maxx = base_type::source_image().width() - 1;
+ int maxy = base_type::source_image().height() - 1;
+ const int16* weight_array = base_type::filter().weight_array();
+
+ do
+ {
+ intr.coordinates(&x, &y);
+
+ x += base_type::filter_dx_int() - radius_x;
+ y += base_type::filter_dy_int() - radius_y;
+
+ fg[0] = fg[1] = fg[2] = fg[3] = image_filter_size / 2;
+
+ int y_lr = m_wrap_mode_y(y >> image_subpixel_shift);
+ int y_hr = ((image_subpixel_mask - (y & image_subpixel_mask)) *
+ base_type::m_ry_inv) >>
+ image_subpixel_shift;
+ int total_weight = 0;
+ int x_lr_ini = x >> image_subpixel_shift;
+ int x_hr_ini = ((image_subpixel_mask - (x & image_subpixel_mask)) *
+ base_type::m_rx_inv) >>
+ image_subpixel_shift;
+ do
+ {
+ int weight_y = weight_array[y_hr];
+ int x_lr = m_wrap_mode_x(x_lr_ini);
+ int x_hr = x_hr_ini;
+ const value_type* row_ptr = (const value_type*)base_type::source_image().row(y_lr);
+ do
+ {
+ const value_type* fg_ptr = row_ptr + (x_lr << 2);
+ int weight = (weight_y * weight_array[x_hr] +
+ image_filter_size / 2) >>
+ downscale_shift;
+
+ fg[0] += fg_ptr[0] * weight;
+ fg[1] += fg_ptr[1] * weight;
+ fg[2] += fg_ptr[2] * weight;
+ fg[3] += fg_ptr[3] * weight;
+ total_weight += weight;
+ x_hr += base_type::m_rx_inv;
+ x_lr = ++m_wrap_mode_x;
+ }
+ while(x_hr < filter_size);
+
+ y_hr += base_type::m_ry_inv;
+ y_lr = ++m_wrap_mode_y;
+ } while(y_hr < filter_size);
+
+ fg[0] /= total_weight;
+ fg[1] /= total_weight;
+ fg[2] /= total_weight;
+ fg[3] /= total_weight;
+
+ if(fg[0] < 0) fg[0] = 0;
+ if(fg[1] < 0) fg[1] = 0;
+ if(fg[2] < 0) fg[2] = 0;
+ if(fg[3] < 0) fg[3] = 0;
+
+ if(fg[order_type::A] > base_mask) fg[order_type::A] = base_mask;
+ if(fg[order_type::R] > fg[order_type::A]) fg[order_type::R] = fg[order_type::A];
+ if(fg[order_type::G] > fg[order_type::A]) fg[order_type::G] = fg[order_type::A];
+ if(fg[order_type::B] > fg[order_type::A]) fg[order_type::B] = fg[order_type::A];
+
+ span->r = (value_type)fg[order_type::R];
+ span->g = (value_type)fg[order_type::G];
+ span->b = (value_type)fg[order_type::B];
+ span->a = (value_type)fg[order_type::A];
+
+ ++span;
+ ++intr;
+ } while(--len);
+ return base_type::allocator().span();
+ }
+
+ private:
+ WrapModeX m_wrap_mode_x;
+ WrapModeY m_wrap_mode_y;
+ };
+
+
+
+
+
+
+
+ //============================================span_pattern_resample_rgba
+ template<class ColorT,
+ class Order,
+ class Interpolator,
+ class WrapModeX,
+ class WrapModeY,
+ class Allocator = span_allocator<ColorT> >
+ class span_pattern_resample_rgba :
+ public span_image_resample<ColorT, Interpolator, Allocator>
+ {
+ public:
+ typedef ColorT color_type;
+ typedef Order order_type;
+ typedef Interpolator interpolator_type;
+ typedef Allocator alloc_type;
+ typedef span_image_resample<color_type, interpolator_type, alloc_type> base_type;
+ typedef typename color_type::value_type value_type;
+ typedef typename color_type::long_type long_type;
+ enum
+ {
+ base_shift = color_type::base_shift,
+ base_mask = color_type::base_mask,
+ downscale_shift = image_filter_shift
+ };
+
+ //--------------------------------------------------------------------
+ span_pattern_resample_rgba(alloc_type& alloc) :
+ base_type(alloc),
+ m_wrap_mode_x(1),
+ m_wrap_mode_y(1)
+ {}
+
+ //--------------------------------------------------------------------
+ span_pattern_resample_rgba(alloc_type& alloc,
+ const rendering_buffer& src,
+ interpolator_type& inter,
+ const image_filter_lut& filter) :
+ base_type(alloc, src, color_type(0,0,0,0), inter, filter),
+ m_wrap_mode_x(src.width()),
+ m_wrap_mode_y(src.height())
+ {}
+
+ //--------------------------------------------------------------------
+ void source_image(const rendering_buffer& src)
+ {
+ base_type::source_image(src);
+ m_wrap_mode_x = WrapModeX(src.width());
+ m_wrap_mode_y = WrapModeX(src.height());
+ }
+
+ //--------------------------------------------------------------------
+ color_type* generate(int x, int y, unsigned len)
+ {
+ color_type* span = base_type::allocator().span();
+ interpolator_type& intr = base_type::interpolator();
+ intr.begin(x + base_type::filter_dx_dbl(),
+ y + base_type::filter_dy_dbl(), len);
+ long_type fg[4];
+
+ int diameter = base_type::filter().diameter();
+ int filter_size = diameter << image_subpixel_shift;
+ const int16* weight_array = base_type::filter().weight_array();
+
+ do
+ {
+ int rx;
+ int ry;
+ int rx_inv = image_subpixel_size;
+ int ry_inv = image_subpixel_size;
+ intr.coordinates(&x, &y);
+ intr.local_scale(&rx, &ry);
+
+ rx = (rx * base_type::m_blur_x) >> image_subpixel_shift;
+ ry = (ry * base_type::m_blur_y) >> image_subpixel_shift;
+
+ if(rx < image_subpixel_size)
+ {
+ rx = image_subpixel_size;
+ }
+ else
+ {
+ if(rx > image_subpixel_size * base_type::m_scale_limit)
+ {
+ rx = image_subpixel_size * base_type::m_scale_limit;
+ }
+ rx_inv = image_subpixel_size * image_subpixel_size / rx;
+ }
+
+ if(ry < image_subpixel_size)
+ {
+ ry = image_subpixel_size;
+ }
+ else
+ {
+ if(ry > image_subpixel_size * base_type::m_scale_limit)
+ {
+ ry = image_subpixel_size * base_type::m_scale_limit;
+ }
+ ry_inv = image_subpixel_size * image_subpixel_size / ry;
+ }
+
+ int radius_x = (diameter * rx) >> 1;
+ int radius_y = (diameter * ry) >> 1;
+ int maxx = base_type::source_image().width() - 1;
+ int maxy = base_type::source_image().height() - 1;
+
+ x += base_type::filter_dx_int() - radius_x;
+ y += base_type::filter_dy_int() - radius_y;
+
+ fg[0] = fg[1] = fg[2] = fg[3] = image_filter_size / 2;
+
+ int y_lr = m_wrap_mode_y(y >> image_subpixel_shift);
+ int y_hr = ((image_subpixel_mask - (y & image_subpixel_mask)) *
+ ry_inv) >>
+ image_subpixel_shift;
+ int total_weight = 0;
+ int x_lr_ini = x >> image_subpixel_shift;
+ int x_hr_ini = ((image_subpixel_mask - (x & image_subpixel_mask)) *
+ rx_inv) >>
+ image_subpixel_shift;
+
+ do
+ {
+ int weight_y = weight_array[y_hr];
+ int x_lr = m_wrap_mode_x(x_lr_ini);
+ int x_hr = x_hr_ini;
+ const value_type* row_ptr = (const value_type*)base_type::source_image().row(y_lr);
+ do
+ {
+ const value_type* fg_ptr = row_ptr + (x_lr << 2);
+ int weight = (weight_y * weight_array[x_hr] +
+ image_filter_size / 2) >>
+ downscale_shift;
+ fg[0] += fg_ptr[0] * weight;
+ fg[1] += fg_ptr[1] * weight;
+ fg[2] += fg_ptr[2] * weight;
+ fg[3] += fg_ptr[3] * weight;
+ total_weight += weight;
+ x_hr += rx_inv;
+ x_lr = ++m_wrap_mode_x;
+ }
+ while(x_hr < filter_size);
+ y_hr += ry_inv;
+ y_lr = ++m_wrap_mode_y;
+ }
+ while(y_hr < filter_size);
+
+ fg[0] /= total_weight;
+ fg[1] /= total_weight;
+ fg[2] /= total_weight;
+ fg[3] /= total_weight;
+
+ if(fg[0] < 0) fg[0] = 0;
+ if(fg[1] < 0) fg[1] = 0;
+ if(fg[2] < 0) fg[2] = 0;
+ if(fg[3] < 0) fg[3] = 0;
+
+ if(fg[order_type::A] > base_mask) fg[order_type::A] = base_mask;
+ if(fg[order_type::R] > fg[order_type::A]) fg[order_type::R] = fg[order_type::A];
+ if(fg[order_type::G] > fg[order_type::A]) fg[order_type::G] = fg[order_type::A];
+ if(fg[order_type::B] > fg[order_type::A]) fg[order_type::B] = fg[order_type::A];
+
+ span->r = (value_type)fg[order_type::R];
+ span->g = (value_type)fg[order_type::G];
+ span->b = (value_type)fg[order_type::B];
+ span->a = (value_type)fg[order_type::A];
+
+ ++span;
+ ++intr;
+ } while(--len);
+ return base_type::allocator().span();
+ }
+
+ private:
+ WrapModeX m_wrap_mode_x;
+ WrapModeY m_wrap_mode_y;
+ };
+
+}
+
+
+#endif
diff --git a/agg/inc/agg_span_pattern_rgb.h b/agg/inc/agg_span_pattern_rgb.h
new file mode 100755
index 000000000000..2e17f11e7c70
--- /dev/null
+++ b/agg/inc/agg_span_pattern_rgb.h
@@ -0,0 +1,165 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// Adaptation for high precision colors has been sponsored by
+// Liberty Technology Systems, Inc., visit http://lib-sys.com
+//
+// Liberty Technology Systems, Inc. is the provider of
+// PostScript and PDF technology for software developers.
+//
+//----------------------------------------------------------------------------
+
+
+#ifndef AGG_SPAN_PATTERN_RGB_INCLUDED
+#define AGG_SPAN_PATTERN_RGB_INCLUDED
+
+#include "agg_basics.h"
+#include "agg_pixfmt_rgb.h"
+#include "agg_span_pattern.h"
+
+namespace agg
+{
+ //=======================================================span_pattern_rgb
+ template<class ColorT,
+ class Order,
+ class WrapModeX,
+ class WrapModeY,
+ class Allocator = span_allocator<ColorT> >
+ class span_pattern_rgb : public span_pattern_base<ColorT, Allocator>
+ {
+ public:
+ typedef ColorT color_type;
+ typedef Order order_type;
+ typedef Allocator alloc_type;
+ typedef span_pattern_base<color_type, alloc_type> base_type;
+ typedef typename color_type::value_type value_type;
+ typedef typename color_type::calc_type calc_type;
+ enum
+ {
+ base_shift = color_type::base_shift,
+ base_mask = color_type::base_mask
+ };
+
+ //--------------------------------------------------------------------
+ span_pattern_rgb(alloc_type& alloc) :
+ base_type(alloc),
+ m_wrap_mode_x(1),
+ m_wrap_mode_y(1)
+ {}
+
+ //----------------------------------------------------------------
+ span_pattern_rgb(alloc_type& alloc,
+ const rendering_buffer& src,
+ unsigned offset_x,
+ unsigned offset_y,
+ value_type alpha = base_mask) :
+ base_type(alloc, src, offset_x, offset_y, alpha),
+ m_wrap_mode_x(src.width()),
+ m_wrap_mode_y(src.height())
+ {}
+
+ //-------------------------------------------------------------------
+ void source_image(const rendering_buffer& src)
+ {
+ base_type::source_image(src);
+ m_wrap_mode_x = WrapModeX(src.width());
+ m_wrap_mode_y = WrapModeY(src.height());
+ }
+
+ //--------------------------------------------------------------------
+ color_type* generate(int x, int y, unsigned len)
+ {
+ color_type* span = base_type::allocator().span();
+ unsigned sx = m_wrap_mode_x(base_type::offset_x() + x);
+ const value_type* row_ptr =
+ (const value_type*)base_type::source_image().row(
+ m_wrap_mode_y(
+ base_type::offset_y() + y));
+ do
+ {
+ const value_type* p = row_ptr + sx + sx + sx;
+ span->r = p[order_type::R];
+ span->g = p[order_type::G];
+ span->b = p[order_type::B];
+ span->a = base_type::alpha_int();
+ sx = ++m_wrap_mode_x;
+ ++span;
+ }
+ while(--len);
+ return base_type::allocator().span();
+ }
+
+ private:
+ WrapModeX m_wrap_mode_x;
+ WrapModeY m_wrap_mode_y;
+ };
+
+
+
+/*
+ //=========================================================span_pattern_rgb
+ template<class ColorT, class Order, class Allocator = span_allocator<ColorT> >
+ class span_pattern_rgb : public span_pattern<rgba8, int8u, Allocator>
+ {
+ public:
+ typedef Allocator alloc_type;
+ typedef rgba8 color_type;
+ typedef span_pattern<color_type, int8u, alloc_type> base_type;
+
+ //--------------------------------------------------------------------
+ span_pattern_rgb24(alloc_type& alloc) : base_type(alloc) {}
+
+ //----------------------------------------------------------------
+ span_pattern_rgb24(alloc_type& alloc,
+ const rendering_buffer& src,
+ unsigned offset_x, unsigned offset_y,
+ int8u alpha = 255) :
+ base_type(alloc, src, offset_x, offset_y, alpha)
+ {}
+
+
+ //--------------------------------------------------------------------
+ color_type* generate(int x, int y, unsigned len)
+ {
+ color_type* span = base_type::allocator().span();
+ unsigned sx = (base_type::offset_x() + x) % base_type::source_image().width();
+ unsigned wp = base_type::source_image().width() * 3;
+ const int8u* p = base_type::source_image().row((base_type::offset_y() + y) % base_type::source_image().height());
+ p += sx * 3;
+ do
+ {
+ span->r = p[Order::R];
+ span->g = p[Order::G];
+ span->b = p[Order::B];
+ span->a = base_type::alpha();
+ p += 3;
+ ++sx;
+ ++span;
+ if(sx >= base_type::source_image().width())
+ {
+ sx -= base_type::source_image().width();
+ p -= wp;
+ }
+ }
+ while(--len);
+ return base_type::allocator().span();
+ }
+ };
+*/
+
+}
+
+#endif
+
diff --git a/agg/inc/agg_span_pattern_rgba.h b/agg/inc/agg_span_pattern_rgba.h
new file mode 100755
index 000000000000..d952d0733696
--- /dev/null
+++ b/agg/inc/agg_span_pattern_rgba.h
@@ -0,0 +1,111 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// Adaptation for high precision colors has been sponsored by
+// Liberty Technology Systems, Inc., visit http://lib-sys.com
+//
+// Liberty Technology Systems, Inc. is the provider of
+// PostScript and PDF technology for software developers.
+//
+//----------------------------------------------------------------------------
+
+
+#ifndef AGG_SPAN_PATTERN_RGBA_INCLUDED
+#define AGG_SPAN_PATTERN_RGBA_INCLUDED
+
+#include "agg_basics.h"
+#include "agg_pixfmt_rgba.h"
+#include "agg_span_pattern.h"
+
+namespace agg
+{
+
+ //======================================================span_pattern_rgba
+ template<class ColorT,
+ class Order,
+ class WrapModeX,
+ class WrapModeY,
+ class Allocator = span_allocator<ColorT> >
+ class span_pattern_rgba : public span_pattern_base<ColorT, Allocator>
+ {
+ public:
+ typedef ColorT color_type;
+ typedef Order order_type;
+ typedef Allocator alloc_type;
+ typedef span_pattern_base<color_type, alloc_type> base_type;
+ typedef typename color_type::value_type value_type;
+ typedef typename color_type::calc_type calc_type;
+ enum
+ {
+ base_shift = color_type::base_shift,
+ base_mask = color_type::base_mask
+ };
+
+ //--------------------------------------------------------------------
+ span_pattern_rgba(alloc_type& alloc) :
+ base_type(alloc),
+ m_wrap_mode_x(1),
+ m_wrap_mode_y(1)
+ {}
+
+ //----------------------------------------------------------------
+ span_pattern_rgba(alloc_type& alloc,
+ const rendering_buffer& src,
+ unsigned offset_x, unsigned offset_y) :
+ base_type(alloc, src, offset_x, offset_y, 0),
+ m_wrap_mode_x(src.width()),
+ m_wrap_mode_y(src.height())
+ {}
+
+ //-------------------------------------------------------------------
+ void source_image(const rendering_buffer& src)
+ {
+ base_type::source_image(src);
+ m_wrap_mode_x = WrapModeX(src.width());
+ m_wrap_mode_y = WrapModeY(src.height());
+ }
+
+ //--------------------------------------------------------------------
+ color_type* generate(int x, int y, unsigned len)
+ {
+ color_type* span = base_type::allocator().span();
+ unsigned sx = m_wrap_mode_x(base_type::offset_x() + x);
+ const value_type* row_ptr =
+ (const value_type*)base_type::source_image().row(
+ m_wrap_mode_y(
+ base_type::offset_y() + y));
+ do
+ {
+ const value_type* p = row_ptr + (sx << 2);
+ span->r = p[order_type::R];
+ span->g = p[order_type::G];
+ span->b = p[order_type::B];
+ span->a = p[order_type::A];
+ sx = ++m_wrap_mode_x;
+ ++span;
+ }
+ while(--len);
+ return base_type::allocator().span();
+ }
+
+ private:
+ WrapModeX m_wrap_mode_x;
+ WrapModeY m_wrap_mode_y;
+ };
+
+}
+
+#endif
+
diff --git a/agg/inc/agg_span_solid.h b/agg/inc/agg_span_solid.h
new file mode 100755
index 000000000000..aa8374bfe61f
--- /dev/null
+++ b/agg/inc/agg_span_solid.h
@@ -0,0 +1,63 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// span_solid_rgba8
+//
+//----------------------------------------------------------------------------
+
+#ifndef AGG_SPAN_SOLID_INCLUDED
+#define AGG_SPAN_SOLID_INCLUDED
+
+#include "agg_basics.h"
+#include "agg_span_generator.h"
+
+namespace agg
+{
+ //--------------------------------------------------------------span_solid
+ template<class ColorT, class Allocator = span_allocator<ColorT> >
+ class span_solid : public span_generator<ColorT, Allocator>
+ {
+ public:
+ typedef Allocator alloc_type;
+ typedef ColorT color_type;
+ typedef span_generator<color_type, alloc_type> base_type;
+
+ //--------------------------------------------------------------------
+ span_solid(alloc_type& alloc) : base_type(alloc) {}
+
+ //--------------------------------------------------------------------
+ void color(const color_type& c) { m_color = c; }
+ const color_type& color() const { return m_color; }
+
+ //--------------------------------------------------------------------
+ color_type* generate(int x, int y, unsigned len)
+ {
+ color_type* span = base_type::allocator().span();
+ do
+ {
+ *span++ = m_color;
+ }
+ while(--len);
+ return base_type::allocator().span();
+ }
+
+ private:
+ color_type m_color;
+ };
+
+
+}
+
+#endif
diff --git a/agg/inc/agg_span_subdiv_adaptor.h b/agg/inc/agg_span_subdiv_adaptor.h
new file mode 100755
index 000000000000..60196d705bdb
--- /dev/null
+++ b/agg/inc/agg_span_subdiv_adaptor.h
@@ -0,0 +1,141 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+#ifndef AGG_SPAN_SUBDIV_ADAPTOR_INCLUDED
+#define AGG_SPAN_SUBDIV_ADAPTOR_INCLUDED
+
+#include "agg_basics.h"
+
+namespace agg
+{
+
+ //=================================================span_subdiv_adaptor
+ template<class Interpolator, unsigned SubpixelShift = 8>
+ class span_subdiv_adaptor
+ {
+ public:
+ typedef Interpolator interpolator_type;
+ typedef typename interpolator_type::trans_type trans_type;
+
+ enum
+ {
+ subpixel_shift = SubpixelShift,
+ subpixel_size = 1 << subpixel_shift
+ };
+
+
+ //----------------------------------------------------------------
+ span_subdiv_adaptor() :
+ m_subdiv_shift(4),
+ m_subdiv_size(1 << m_subdiv_shift),
+ m_subdiv_mask(m_subdiv_size - 1) {}
+
+ span_subdiv_adaptor(interpolator_type& interpolator,
+ unsigned subdiv_shift = 4) :
+ m_subdiv_shift(subdiv_shift),
+ m_subdiv_size(1 << m_subdiv_shift),
+ m_subdiv_mask(m_subdiv_size - 1),
+ m_interpolator(&interpolator) {}
+
+ span_subdiv_adaptor(interpolator_type& interpolator,
+ double x, double y, unsigned len,
+ unsigned subdiv_shift = 4) :
+ m_subdiv_shift(subdiv_shift),
+ m_subdiv_size(1 << m_subdiv_shift),
+ m_subdiv_mask(m_subdiv_size - 1),
+ m_interpolator(&interpolator)
+ {
+ begin(x, y, len);
+ }
+
+
+ //----------------------------------------------------------------
+ const interpolator_type& interpolator() const { return *m_interpolator; }
+ void interpolator(interpolator_type& intr) { m_interpolator = &intr; }
+
+ //----------------------------------------------------------------
+ const trans_type& transformer() const
+ {
+ return *m_interpolator->transformer();
+ }
+ void transformer(const trans_type& trans)
+ {
+ m_interpolator->transformer(trans);
+ }
+
+ //----------------------------------------------------------------
+ unsigned subdiv_shift() const { return m_subdiv_shift; }
+ void subdiv_shift(unsigned shift)
+ {
+ m_subdiv_shift = shift;
+ m_subdiv_size = 1 << m_subdiv_shift;
+ m_subdiv_mask = m_subdiv_size - 1;
+ }
+
+ //----------------------------------------------------------------
+ void begin(double x, double y, unsigned len)
+ {
+ m_pos = 1;
+ m_src_x = int(x * subpixel_size) + subpixel_size;
+ m_src_y = y;
+ m_len = len;
+ if(len > m_subdiv_size) len = m_subdiv_size;
+ m_interpolator->begin(x, y, len);
+ }
+
+ //----------------------------------------------------------------
+ void operator++()
+ {
+ ++(*m_interpolator);
+ if(m_pos >= m_subdiv_size)
+ {
+ unsigned len = m_len;
+ if(len > m_subdiv_size) len = m_subdiv_size;
+ m_interpolator->resynchronize(double(m_src_x) / double(subpixel_size) + len,
+ m_src_y,
+ len);
+ m_pos = 0;
+ }
+ m_src_x += subpixel_size;
+ ++m_pos;
+ --m_len;
+ }
+
+ //----------------------------------------------------------------
+ void coordinates(int* x, int* y) const
+ {
+ m_interpolator->coordinates(x, y);
+ }
+
+ //----------------------------------------------------------------
+ void local_scale(int* x, int* y) const
+ {
+ m_interpolator->local_scale(x, y);
+ }
+
+
+ private:
+ unsigned m_subdiv_shift;
+ unsigned m_subdiv_size;
+ unsigned m_subdiv_mask;
+ interpolator_type* m_interpolator;
+ int m_src_x;
+ double m_src_y;
+ unsigned m_pos;
+ unsigned m_len;
+ };
+
+}
+
+#endif
diff --git a/agg/inc/agg_trans_affine.h b/agg/inc/agg_trans_affine.h
new file mode 100755
index 000000000000..5a4098f904de
--- /dev/null
+++ b/agg/inc/agg_trans_affine.h
@@ -0,0 +1,344 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// Affine transformation classes.
+//
+//----------------------------------------------------------------------------
+#ifndef AGG_TRANS_AFFINE_INCLUDED
+#define AGG_TRANS_AFFINE_INCLUDED
+
+#include <math.h>
+#include "agg_basics.h"
+
+namespace agg
+{
+ const double affine_epsilon = 1e-14; // About of precision of doubles
+
+ //============================================================trans_affine
+ //
+ // See Implementation agg_trans_affine.cpp
+ //
+ // Affine transformation are linear transformations in Cartesian coordinates
+ // (strictly speaking not only in Cartesian, but for the beginning we will
+ // think so). They are rotation, scaling, translation and skewing.
+ // After any affine transformation a line segment remains a line segment
+ // and it will never become a curve.
+ //
+ // There will be no math about matrix calculations, since it has been
+ // described many times. Ask yourself a very simple question:
+ // "why do we need to understand and use some matrix stuff instead of just
+ // rotating, scaling and so on". The answers are:
+ //
+ // 1. Any combination of transformations can be done by only 4 multiplications
+ // and 4 additions in floating point.
+ // 2. One matrix transformation is equivalent to the number of consecutive
+ // discrete transformations, i.e. the matrix "accumulates" all transformations
+ // in the order of their settings. Suppose we have 4 transformations:
+ // * rotate by 30 degrees,
+ // * scale X to 2.0,
+ // * scale Y to 1.5,
+ // * move to (100, 100).
+ // The result will depend on the order of these transformations,
+ // and the advantage of matrix is that the sequence of discret calls:
+ // rotate(30), scaleX(2.0), scaleY(1.5), move(100,100)
+ // will have exactly the same result as the following matrix transformations:
+ //
+ // affine_matrix m;
+ // m *= rotate_matrix(30);
+ // m *= scaleX_matrix(2.0);
+ // m *= scaleY_matrix(1.5);
+ // m *= move_matrix(100,100);
+ //
+ // m.transform_my_point_at_last(x, y);
+ //
+ // What is the good of it? In real life we will set-up the matrix only once
+ // and then transform many points, let alone the convenience to set any
+ // combination of transformations.
+ //
+ // So, how to use it? Very easy - literally as it's shown above. Not quite,
+ // let us write a correct example:
+ //
+ // agg::trans_affine m;
+ // m *= agg::trans_affine_rotation(30.0 * 3.1415926 / 180.0);
+ // m *= agg::trans_affine_scaling(2.0, 1.5);
+ // m *= agg::trans_affine_translation(100.0, 100.0);
+ // m.transform(&x, &y);
+ //
+ // The affine matrix is all you need to perform any linear transformation,
+ // but all transformations have origin point (0,0). It means that we need to
+ // use 2 translations if we want to rotate someting around (100,100):
+ //
+ // m *= agg::trans_affine_translation(-100.0, -100.0); // move to (0,0)
+ // m *= agg::trans_affine_rotation(30.0 * 3.1415926 / 180.0); // rotate
+ // m *= agg::trans_affine_translation(100.0, 100.0); // move back to (100,100)
+ //----------------------------------------------------------------------
+ class trans_affine
+ {
+ public:
+ //------------------------------------------ Construction
+ // Construct an identity matrix - it does not transform anything
+ trans_affine() :
+ m0(1.0), m1(0.0), m2(0.0), m3(1.0), m4(0.0), m5(0.0)
+ {}
+
+ // Construct a custom matrix. Usually used in derived classes
+ trans_affine(double v0, double v1, double v2, double v3, double v4, double v5) :
+ m0(v0), m1(v1), m2(v2), m3(v3), m4(v4), m5(v5)
+ {}
+
+ // Construct a matrix to transform a parallelogram to another one.
+ trans_affine(const double* rect, const double* parl)
+ {
+ parl_to_parl(rect, parl);
+ }
+
+ // Construct a matrix to transform a rectangle to a parallelogram.
+ trans_affine(double x1, double y1, double x2, double y2,
+ const double* parl)
+ {
+ rect_to_parl(x1, y1, x2, y2, parl);
+ }
+
+ // Construct a matrix to transform a parallelogram to a rectangle.
+ trans_affine(const double* parl,
+ double x1, double y1, double x2, double y2)
+ {
+ parl_to_rect(parl, x1, y1, x2, y2);
+ }
+
+
+ //---------------------------------- Parellelogram transformations
+ // Calculate a matrix to transform a parallelogram to another one.
+ // src and dst are pointers to arrays of three points
+ // (double[6], x,y,...) that identify three corners of the
+ // parallelograms assuming implicit fourth points.
+ // There are also transformations rectangtle to parallelogram and
+ // parellelogram to rectangle
+ const trans_affine& parl_to_parl(const double* src,
+ const double* dst);
+
+ const trans_affine& rect_to_parl(double x1, double y1,
+ double x2, double y2,
+ const double* parl);
+
+ const trans_affine& parl_to_rect(const double* parl,
+ double x1, double y1,
+ double x2, double y2);
+
+
+ //------------------------------------------ Operations
+ // Reset - actually load an identity matrix
+ const trans_affine& reset();
+
+ // Multiply matrix to another one
+ const trans_affine& multiply(const trans_affine& m);
+
+ // Multiply "m" to "this" and assign the result to "this"
+ const trans_affine& premultiply(const trans_affine& m);
+
+ // Invert matrix. Do not try to invert degenerate matrices,
+ // there's no check for validity. If you set scale to 0 and
+ // then try to invert matrix, expect unpredictable result.
+ const trans_affine& invert();
+
+ // Mirroring around X
+ const trans_affine& flip_x();
+
+ // Mirroring around Y
+ const trans_affine& flip_y();
+
+ //------------------------------------------- Load/Store
+ // Store matrix to an array [6] of double
+ void store_to(double* m) const
+ {
+ *m++ = m0; *m++ = m1; *m++ = m2; *m++ = m3; *m++ = m4; *m++ = m5;
+ }
+
+ // Load matrix from an array [6] of double
+ const trans_affine& load_from(const double* m)
+ {
+ m0 = *m++; m1 = *m++; m2 = *m++; m3 = *m++; m4 = *m++; m5 = *m++;
+ return *this;
+ }
+
+ //------------------------------------------- Operators
+
+ // Multiply current matrix to another one
+ const trans_affine& operator *= (const trans_affine& m)
+ {
+ return multiply(m);
+ }
+
+ // Multiply current matrix to another one and return
+ // the result in a separete matrix.
+ trans_affine operator * (const trans_affine& m)
+ {
+ return trans_affine(*this).multiply(m);
+ }
+
+ // Calculate and return the inverse matrix
+ trans_affine operator ~ () const
+ {
+ trans_affine ret = *this;
+ return ret.invert();
+ }
+
+ // Equal operator with default epsilon
+ bool operator == (const trans_affine& m) const
+ {
+ return is_equal(m, affine_epsilon);
+ }
+
+ // Not Equal operator with default epsilon
+ bool operator != (const trans_affine& m) const
+ {
+ return !is_equal(m, affine_epsilon);
+ }
+
+ //-------------------------------------------- Transformations
+ // Direct transformation x and y
+ void transform(double* x, double* y) const;
+
+ // Inverse transformation x and y. It works slower than the
+ // direct transformation, so if the performance is critical
+ // it's better to invert() the matrix and then use transform()
+ void inverse_transform(double* x, double* y) const;
+
+ //-------------------------------------------- Auxiliary
+ // Calculate the determinant of matrix
+ double determinant() const
+ {
+ return 1.0 / (m0 * m3 - m1 * m2);
+ }
+
+ // Get the average scale (by X and Y).
+ // Basically used to calculate the approximation_scale when
+ // decomposinting curves into line segments.
+ double scale() const;
+
+ // Check to see if it's an identity matrix
+ bool is_identity(double epsilon = affine_epsilon) const;
+
+ // Check to see if two matrices are equal
+ bool is_equal(const trans_affine& m, double epsilon = affine_epsilon) const;
+
+ // Determine the major parameters. Use carefully considering degenerate matrices
+ double rotation() const;
+ void translation(double* dx, double* dy) const;
+ void scaling(double* sx, double* sy) const;
+ void scaling_abs(double* sx, double* sy) const
+ {
+ *sx = sqrt(m0*m0 + m2*m2);
+ *sy = sqrt(m1*m1 + m3*m3);
+ }
+
+ private:
+ double m0;
+ double m1;
+ double m2;
+ double m3;
+ double m4;
+ double m5;
+ };
+
+ //------------------------------------------------------------------------
+ inline void trans_affine::transform(double* x, double* y) const
+ {
+ register double tx = *x;
+ *x = tx * m0 + *y * m2 + m4;
+ *y = tx * m1 + *y * m3 + m5;
+ }
+
+ //------------------------------------------------------------------------
+ inline void trans_affine::inverse_transform(double* x, double* y) const
+ {
+ register double d = determinant();
+ register double a = (*x - m4) * d;
+ register double b = (*y - m5) * d;
+ *x = a * m3 - b * m2;
+ *y = b * m0 - a * m1;
+ }
+
+ //------------------------------------------------------------------------
+ inline double trans_affine::scale() const
+ {
+ double x = 0.707106781 * m0 + 0.707106781 * m2;
+ double y = 0.707106781 * m1 + 0.707106781 * m3;
+ return sqrt(x*x + y*y);
+ }
+
+
+ //------------------------------------------------------------------------
+ inline const trans_affine& trans_affine::premultiply(const trans_affine& m)
+ {
+ trans_affine t = m;
+ return *this = t.multiply(*this);
+ }
+
+
+ //====================================================trans_affine_rotation
+ // Rotation matrix. sin() and cos() are calculated twice for the same angle.
+ // There's no harm because the performance of sin()/cos() is very good on all
+ // modern processors. Besides, this operation is not going to be invoked too
+ // often.
+ class trans_affine_rotation : public trans_affine
+ {
+ public:
+ trans_affine_rotation(double a) :
+ trans_affine(cos(a), sin(a), -sin(a), cos(a), 0.0, 0.0)
+ {}
+ };
+
+ //====================================================trans_affine_scaling
+ // Scaling matrix. sx, sy - scale coefficients by X and Y respectively
+ class trans_affine_scaling : public trans_affine
+ {
+ public:
+ trans_affine_scaling(double sx, double sy) :
+ trans_affine(sx, 0.0, 0.0, sy, 0.0, 0.0)
+ {}
+
+ trans_affine_scaling(double s) :
+ trans_affine(s, 0.0, 0.0, s, 0.0, 0.0)
+ {}
+ };
+
+ //================================================trans_affine_translation
+ // Translation matrix
+ class trans_affine_translation : public trans_affine
+ {
+ public:
+ trans_affine_translation(double tx, double ty) :
+ trans_affine(1.0, 0.0, 0.0, 1.0, tx, ty)
+ {}
+ };
+
+ //====================================================trans_affine_skewing
+ // Sckewing (shear) matrix
+ class trans_affine_skewing : public trans_affine
+ {
+ public:
+ trans_affine_skewing(double sx, double sy) :
+ trans_affine(1.0, tan(sy), tan(sx), 1.0, 0.0, 0.0)
+ {}
+ };
+
+
+
+}
+
+
+#endif
+
diff --git a/agg/inc/agg_trans_bilinear.h b/agg/inc/agg_trans_bilinear.h
new file mode 100755
index 000000000000..7398a866d3b0
--- /dev/null
+++ b/agg/inc/agg_trans_bilinear.h
@@ -0,0 +1,166 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// Bilinear 2D transformations
+//
+//----------------------------------------------------------------------------
+#ifndef AGG_TRANS_BILINEAR_INCLUDED
+#define AGG_TRANS_BILINEAR_INCLUDED
+
+#include "agg_basics.h"
+#include "agg_simul_eq.h"
+
+namespace agg
+{
+
+ //==========================================================trans_bilinear
+ class trans_bilinear
+ {
+ public:
+ //--------------------------------------------------------------------
+ trans_bilinear() : m_valid(false) {}
+
+ //--------------------------------------------------------------------
+ // Arbitrary quadrangle transformations
+ trans_bilinear(const double* src, const double* dst)
+ {
+ quad_to_quad(src, dst);
+ }
+
+
+ //--------------------------------------------------------------------
+ // Direct transformations
+ trans_bilinear(double x1, double y1, double x2, double y2,
+ const double* quad)
+ {
+ rect_to_quad(x1, y1, x2, y2, quad);
+ }
+
+
+ //--------------------------------------------------------------------
+ // Reverse transformations
+ trans_bilinear(const double* quad,
+ double x1, double y1, double x2, double y2)
+ {
+ quad_to_rect(quad, x1, y1, x2, y2);
+ }
+
+
+ //--------------------------------------------------------------------
+ // Set the transformations using two arbitrary quadrangles.
+ void quad_to_quad(const double* src, const double* dst)
+ {
+ double left[4][4];
+ double right[4][2];
+
+ unsigned i;
+ for(i = 0; i < 4; i++)
+ {
+ unsigned ix = i * 2;
+ unsigned iy = ix + 1;
+ left[i][0] = 1.0;
+ left[i][1] = src[ix] * src[iy];
+ left[i][2] = src[ix];
+ left[i][3] = src[iy];
+
+ right[i][0] = dst[ix];
+ right[i][1] = dst[iy];
+ }
+ m_valid = simul_eq<4, 2>::solve(left, right, m_mtx);
+ }
+
+
+ //--------------------------------------------------------------------
+ // Set the direct transformations, i.e., rectangle -> quadrangle
+ void rect_to_quad(double x1, double y1, double x2, double y2,
+ const double* quad)
+ {
+ double src[8];
+ src[0] = src[6] = x1;
+ src[2] = src[4] = x2;
+ src[1] = src[3] = y1;
+ src[5] = src[7] = y2;
+ quad_to_quad(src, quad);
+ }
+
+
+ //--------------------------------------------------------------------
+ // Set the reverse transformations, i.e., quadrangle -> rectangle
+ void quad_to_rect(const double* quad,
+ double x1, double y1, double x2, double y2)
+ {
+ double dst[8];
+ dst[0] = dst[6] = x1;
+ dst[2] = dst[4] = x2;
+ dst[1] = dst[3] = y1;
+ dst[5] = dst[7] = y2;
+ quad_to_quad(quad, dst);
+ }
+
+ //--------------------------------------------------------------------
+ // Check if the equations were solved successfully
+ bool is_valid() const { return m_valid; }
+
+ //--------------------------------------------------------------------
+ // Transform a point (x, y)
+ void transform(double* x, double* y) const
+ {
+ double tx = *x;
+ double ty = *y;
+ double xy = tx * ty;
+ *x = m_mtx[0][0] + m_mtx[1][0] * xy + m_mtx[2][0] * tx + m_mtx[3][0] * ty;
+ *y = m_mtx[0][1] + m_mtx[1][1] * xy + m_mtx[2][1] * tx + m_mtx[3][1] * ty;
+ }
+
+
+ //--------------------------------------------------------------------
+ class iterator_x
+ {
+ double inc_x;
+ double inc_y;
+
+ public:
+ double x;
+ double y;
+
+ iterator_x() {}
+ iterator_x(double tx, double ty, double step, const double m[4][2]) :
+ inc_x(m[1][0] * step * ty + m[2][0] * step),
+ inc_y(m[1][1] * step * ty + m[2][1] * step),
+ x(m[0][0] + m[1][0] * tx * ty + m[2][0] * tx + m[3][0] * ty),
+ y(m[0][1] + m[1][1] * tx * ty + m[2][1] * tx + m[3][1] * ty)
+ {
+ }
+
+ void operator ++ ()
+ {
+ x += inc_x;
+ y += inc_y;
+ }
+ };
+
+ iterator_x begin(double x, double y, double step) const
+ {
+ return iterator_x(x, y, step, m_mtx);
+ }
+
+ private:
+ double m_mtx[4][2];
+ bool m_valid;
+ };
+
+}
+
+#endif
diff --git a/agg/inc/agg_trans_double_path.h b/agg/inc/agg_trans_double_path.h
new file mode 100755
index 000000000000..16ea9f7264bd
--- /dev/null
+++ b/agg/inc/agg_trans_double_path.h
@@ -0,0 +1,131 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+
+#ifndef AGG_TRANS_DOUBLE_PATH_INCLUDED
+#define AGG_TRANS_DOUBLE_PATH_INCLUDED
+
+#include "agg_basics.h"
+#include "agg_vertex_sequence.h"
+
+namespace agg
+{
+
+ // See also: agg_trans_double_path.cpp
+ //
+ //-------------------------------------------------------trans_double_path
+ class trans_double_path
+ {
+ enum status_e
+ {
+ initial,
+ making_path,
+ ready
+ };
+
+ public:
+ typedef vertex_sequence<vertex_dist, 6> vertex_storage;
+
+ trans_double_path();
+
+ //--------------------------------------------------------------------
+ void base_length(double v) { m_base_length = v; }
+ double base_length() const { return m_base_length; }
+
+ //--------------------------------------------------------------------
+ void base_height(double v) { m_base_height = v; }
+ double base_height() const { return m_base_height; }
+
+ //--------------------------------------------------------------------
+ void preserve_x_scale(bool f) { m_preserve_x_scale = f; }
+ bool preserve_x_scale() const { return m_preserve_x_scale; }
+
+ //--------------------------------------------------------------------
+ void reset();
+ void move_to1(double x, double y);
+ void line_to1(double x, double y);
+ void move_to2(double x, double y);
+ void line_to2(double x, double y);
+ void finalize_paths();
+
+ //--------------------------------------------------------------------
+ template<class VertexSource1, class VertexSource2>
+ void add_paths(VertexSource1& vs1, VertexSource2& vs2,
+ unsigned path1_id=0, unsigned path2_id=0)
+ {
+ double x;
+ double y;
+
+ unsigned cmd;
+
+ vs1.rewind(path1_id);
+ while(!is_stop(cmd = vs1.vertex(&x, &y)))
+ {
+ if(is_move_to(cmd))
+ {
+ move_to1(x, y);
+ }
+ else
+ {
+ if(is_vertex(cmd))
+ {
+ line_to1(x, y);
+ }
+ }
+ }
+
+ vs2.rewind(path2_id);
+ while(!is_stop(cmd = vs2.vertex(&x, &y)))
+ {
+ if(is_move_to(cmd))
+ {
+ move_to2(x, y);
+ }
+ else
+ {
+ if(is_vertex(cmd))
+ {
+ line_to2(x, y);
+ }
+ }
+ }
+ finalize_paths();
+ }
+
+ //--------------------------------------------------------------------
+ double total_length1() const;
+ double total_length2() const;
+ void transform(double *x, double *y) const;
+
+ private:
+ double finalize_path(vertex_storage& vertices);
+ void transform1(const vertex_storage& vertices,
+ double kindex, double kx,
+ double *x, double* y) const;
+
+ vertex_storage m_src_vertices1;
+ vertex_storage m_src_vertices2;
+ double m_base_length;
+ double m_base_height;
+ double m_kindex1;
+ double m_kindex2;
+ status_e m_status1;
+ status_e m_status2;
+ bool m_preserve_x_scale;
+ };
+
+}
+
+
+#endif
diff --git a/agg/inc/agg_trans_lens.h b/agg/inc/agg_trans_lens.h
new file mode 100755
index 000000000000..ad900686c3fd
--- /dev/null
+++ b/agg/inc/agg_trans_lens.h
@@ -0,0 +1,79 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.1
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+
+#ifndef AGG_WARP_MAGNIFIER_INCLUDED
+#define AGG_WARP_MAGNIFIER_INCLUDED
+
+#include <math.h>
+#include "agg_basics.h"
+
+
+namespace agg
+{
+
+ class trans_warp_magnifier
+ {
+ public:
+ trans_warp_magnifier() : m_xc(0.0), m_yc(0.0), m_magn(1.0), m_radius(1.0), m_warp(false) {}
+
+ void center(double x, double y) { m_xc = x; m_yc = y; }
+ void magnification(double m) { m_magn = m; }
+ void radius(double r) { m_radius = r; }
+ void warp(bool w) { m_warp = w; }
+
+ void transform(double* x, double* y) const
+ {
+ double dx = *x - m_xc;
+ double dy = *y - m_yc;
+ double r = sqrt(dx * dx + dy * dy);
+ double rm = m_radius / m_magn;
+ if(r < rm)
+ {
+ *x = m_xc + dx * m_magn;
+ *y = m_yc + dy * m_magn;
+ return;
+ }
+
+ if(m_warp)
+ {
+ double m = (r + rm * (m_magn - 1.0)) / r;
+ *x = m_xc + dx * m;
+ *y = m_yc + dy * m;
+ return;
+ }
+
+ if(r < m_radius)
+ {
+ double m = m_radius / r;
+ *x = m_xc + dx * m;
+ *y = m_yc + dy * m;
+ }
+ }
+
+ private:
+ double m_xc;
+ double m_yc;
+ double m_magn;
+ double m_radius;
+ bool m_warp;
+ };
+
+
+
+}
+
+
+#endif
+
diff --git a/agg/inc/agg_trans_perspective.h b/agg/inc/agg_trans_perspective.h
new file mode 100755
index 000000000000..a127c9095ad2
--- /dev/null
+++ b/agg/inc/agg_trans_perspective.h
@@ -0,0 +1,192 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// Perspective 2D transformations
+//
+//----------------------------------------------------------------------------
+#ifndef AGG_TRANS_PERSPECTIVE_INCLUDED
+#define AGG_TRANS_PERSPECTIVE_INCLUDED
+
+#include "agg_basics.h"
+#include "agg_simul_eq.h"
+
+namespace agg
+{
+ //=======================================================trans_perspective
+ class trans_perspective
+ {
+ public:
+ //--------------------------------------------------------------------
+ trans_perspective() : m_valid(false) {}
+
+
+ //--------------------------------------------------------------------
+ // Arbitrary quadrangle transformations
+ trans_perspective(const double* src, const double* dst)
+ {
+ quad_to_quad(src, dst);
+ }
+
+
+ //--------------------------------------------------------------------
+ // Direct transformations
+ trans_perspective(double x1, double y1, double x2, double y2,
+ const double* quad)
+ {
+ rect_to_quad(x1, y1, x2, y2, quad);
+ }
+
+
+ //--------------------------------------------------------------------
+ // Reverse transformations
+ trans_perspective(const double* quad,
+ double x1, double y1, double x2, double y2)
+ {
+ quad_to_rect(quad, x1, y1, x2, y2);
+ }
+
+
+ //--------------------------------------------------------------------
+ // Set the transformations using two arbitrary quadrangles.
+ void quad_to_quad(const double* src, const double* dst)
+ {
+
+ double left[8][8];
+ double right[8][1];
+
+ unsigned i;
+ for (i = 0; i < 4; i++)
+ {
+ unsigned ix = i * 2;
+ unsigned iy = ix + 1;
+
+ left[ix][0] = 1.0;
+ left[ix][1] = src[ix];
+ left[ix][2] = src[iy];
+ left[ix][3] = 0.0;
+ left[ix][4] = 0.0;
+ left[ix][5] = 0.0;
+ left[ix][6] = -src[ix] * dst[ix];
+ left[ix][7] = -src[iy] * dst[ix];
+ right[ix][0] = dst[ix];
+
+ left[iy][0] = 0.0;
+ left[iy][1] = 0.0;
+ left[iy][2] = 0.0;
+ left[iy][3] = 1.0;
+ left[iy][4] = src[ix];
+ left[iy][5] = src[iy];
+ left[iy][6] = -src[ix] * dst[iy];
+ left[iy][7] = -src[iy] * dst[iy];
+ right[iy][0] = dst[iy];
+ }
+ m_valid = simul_eq<8, 1>::solve(left, right, m_mtx);
+ }
+
+
+ //--------------------------------------------------------------------
+ // Set the direct transformations, i.e., rectangle -> quadrangle
+ void rect_to_quad(double x1, double y1, double x2, double y2,
+ const double* quad)
+ {
+ double src[8];
+ src[0] = src[6] = x1;
+ src[2] = src[4] = x2;
+ src[1] = src[3] = y1;
+ src[5] = src[7] = y2;
+ quad_to_quad(src, quad);
+ }
+
+
+ //--------------------------------------------------------------------
+ // Set the reverse transformations, i.e., quadrangle -> rectangle
+ void quad_to_rect(const double* quad,
+ double x1, double y1, double x2, double y2)
+ {
+ double dst[8];
+ dst[0] = dst[6] = x1;
+ dst[2] = dst[4] = x2;
+ dst[1] = dst[3] = y1;
+ dst[5] = dst[7] = y2;
+ quad_to_quad(quad, dst);
+ }
+
+ //--------------------------------------------------------------------
+ // Check if the equations were solved successfully
+ bool is_valid() const { return m_valid; }
+
+ //--------------------------------------------------------------------
+ // Transform a point (x, y)
+ void transform(double* x, double* y) const
+ {
+ double tx = *x;
+ double ty = *y;
+ double d = 1.0 / (m_mtx[6][0] * tx + m_mtx[7][0] * ty + 1.0);
+ *x = (m_mtx[0][0] + m_mtx[1][0] * tx + m_mtx[2][0] * ty) * d;
+ *y = (m_mtx[3][0] + m_mtx[4][0] * tx + m_mtx[5][0] * ty) * d;
+ }
+
+ //--------------------------------------------------------------------
+ class iterator_x
+ {
+ double den;
+ double den_step;
+ double nom_x;
+ double nom_x_step;
+ double nom_y;
+ double nom_y_step;
+
+ public:
+ double x;
+ double y;
+
+ iterator_x() {}
+ iterator_x(double tx, double ty, double step, const double m[8][1]) :
+ den(m[6][0] * tx + m[7][0] * ty + 1.0),
+ den_step(m[6][0] * step),
+ nom_x(m[0][0] + m[1][0] * tx + m[2][0] * ty),
+ nom_x_step(m[1][0] * step),
+ nom_y(m[3][0] + m[4][0] * tx + m[5][0] * ty),
+ nom_y_step(m[4][0] * step),
+ x(nom_x / den),
+ y(nom_y / den)
+ {
+ }
+
+ void operator ++ ()
+ {
+ den += den_step;
+ nom_x += nom_x_step;
+ nom_y += nom_y_step;
+ double d = 1.0 / den;
+ x = nom_x * d;
+ y = nom_y * d;
+ }
+ };
+
+ //--------------------------------------------------------------------
+ iterator_x begin(double x, double y, double step) const
+ {
+ return iterator_x(x, y, step, m_mtx);
+ }
+
+ private:
+ double m_mtx[8][1];
+ bool m_valid;
+ };
+
+}
+
+#endif
diff --git a/agg/inc/agg_trans_single_path.h b/agg/inc/agg_trans_single_path.h
new file mode 100755
index 000000000000..68369626c396
--- /dev/null
+++ b/agg/inc/agg_trans_single_path.h
@@ -0,0 +1,97 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+
+#ifndef AGG_TRANS_SINGLE_PATH_INCLUDED
+#define AGG_TRANS_SINGLE_PATH_INCLUDED
+
+#include "agg_basics.h"
+#include "agg_vertex_sequence.h"
+
+namespace agg
+{
+
+ // See also: agg_trans_single_path.cpp
+ //
+ //-------------------------------------------------------trans_single_path
+ class trans_single_path
+ {
+ enum status_e
+ {
+ initial,
+ making_path,
+ ready
+ };
+
+ public:
+ typedef vertex_sequence<vertex_dist, 6> vertex_storage;
+
+ trans_single_path();
+
+ //--------------------------------------------------------------------
+ void base_length(double v) { m_base_length = v; }
+ double base_length() const { return m_base_length; }
+
+ //--------------------------------------------------------------------
+ void preserve_x_scale(bool f) { m_preserve_x_scale = f; }
+ bool preserve_x_scale() const { return m_preserve_x_scale; }
+
+ //--------------------------------------------------------------------
+ void reset();
+ void move_to(double x, double y);
+ void line_to(double x, double y);
+ void finalize_path();
+
+ //--------------------------------------------------------------------
+ template<class VertexSource>
+ void add_path(VertexSource& vs, unsigned path_id=0)
+ {
+ double x;
+ double y;
+
+ unsigned cmd;
+ vs.rewind(path_id);
+ while(!is_stop(cmd = vs.vertex(&x, &y)))
+ {
+ if(is_move_to(cmd))
+ {
+ move_to(x, y);
+ }
+ else
+ {
+ if(is_vertex(cmd))
+ {
+ line_to(x, y);
+ }
+ }
+ }
+ finalize_path();
+ }
+
+ //--------------------------------------------------------------------
+ double total_length() const;
+ void transform(double *x, double *y) const;
+
+ private:
+ vertex_storage m_src_vertices;
+ double m_base_length;
+ double m_kindex;
+ status_e m_status;
+ bool m_preserve_x_scale;
+ };
+
+
+}
+
+#endif
diff --git a/agg/inc/agg_trans_viewport.h b/agg/inc/agg_trans_viewport.h
new file mode 100755
index 000000000000..b77a7204feb9
--- /dev/null
+++ b/agg/inc/agg_trans_viewport.h
@@ -0,0 +1,304 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// Viewport transformer - simple orthogonal conversions from world coordinates
+// to screen (device) ones.
+//
+//----------------------------------------------------------------------------
+
+#ifndef AGG_TRANS_VIEWPORT_INCLUDED
+#define AGG_TRANS_VIEWPORT_INCLUDED
+
+#include <string.h>
+#include "agg_basics.h"
+
+
+namespace agg
+{
+
+ enum aspect_ratio_e
+ {
+ aspect_ratio_stretch,
+ aspect_ratio_meet,
+ aspect_ratio_slice
+ };
+
+
+ //----------------------------------------------------------trans_viewport
+ class trans_viewport
+ {
+ public:
+ //-------------------------------------------------------------------
+ trans_viewport() :
+ m_world_x1(0.0),
+ m_world_y1(0.0),
+ m_world_x2(1.0),
+ m_world_y2(1.0),
+ m_device_x1(0.0),
+ m_device_y1(0.0),
+ m_device_x2(1.0),
+ m_device_y2(1.0),
+ m_aspect(aspect_ratio_stretch),
+ m_align_x(0.5),
+ m_align_y(0.5),
+ m_wx1(0.0),
+ m_wy1(0.0),
+ m_wx2(1.0),
+ m_wy2(1.0),
+ m_dx1(0.0),
+ m_dy1(0.0),
+ m_kx(1.0),
+ m_ky(1.0)
+ {}
+
+ //-------------------------------------------------------------------
+ void preserve_aspect_ratio(double alignx,
+ double aligny,
+ aspect_ratio_e aspect)
+ {
+ m_align_x = alignx;
+ m_align_y = aligny;
+ m_aspect = aspect;
+ update();
+ }
+
+ //-------------------------------------------------------------------
+ void device_viewport(double x1, double y1, double x2, double y2)
+ {
+ m_device_x1 = x1;
+ m_device_y1 = y1;
+ m_device_x2 = x2;
+ m_device_y2 = y2;
+ update();
+ }
+
+ //-------------------------------------------------------------------
+ void world_viewport(double x1, double y1, double x2, double y2)
+ {
+ m_world_x1 = x1;
+ m_world_y1 = y1;
+ m_world_x2 = x2;
+ m_world_y2 = y2;
+ update();
+ }
+
+ //-------------------------------------------------------------------
+ void device_viewport(double* x1, double* y1, double* x2, double* y2) const
+ {
+ *x1 = m_device_x1;
+ *y1 = m_device_y1;
+ *x2 = m_device_x2;
+ *y2 = m_device_y2;
+ }
+
+ //-------------------------------------------------------------------
+ void world_viewport(double* x1, double* y1, double* x2, double* y2) const
+ {
+ *x1 = m_world_x1;
+ *y1 = m_world_y1;
+ *x2 = m_world_x2;
+ *y2 = m_world_y2;
+ }
+
+ //-------------------------------------------------------------------
+ void world_viewport_actual(double* x1, double* y1,
+ double* x2, double* y2) const
+ {
+ *x1 = m_wx1;
+ *y1 = m_wy1;
+ *x2 = m_wx2;
+ *y2 = m_wy2;
+ }
+
+ //-------------------------------------------------------------------
+ double align_x() const { return m_align_x; }
+ double align_y() const { return m_align_y; }
+ aspect_ratio_e aspect_ratio() const { return m_aspect; }
+
+ //-------------------------------------------------------------------
+ void transform(double* x, double* y) const
+ {
+ *x = (*x - m_wx1) * m_kx + m_dx1;
+ *y = (*y - m_wy1) * m_ky + m_dy1;
+ }
+
+ //-------------------------------------------------------------------
+ void inverse_transform(double* x, double* y) const
+ {
+ *x = (*x - m_dx1) / m_kx + m_wx1;
+ *y = (*y - m_dy1) / m_ky + m_wy1;
+ }
+
+ //-------------------------------------------------------------------
+ double scale_x() const
+ {
+ return m_kx;
+ }
+
+ //-------------------------------------------------------------------
+ double scale_y() const
+ {
+ return m_ky;
+ }
+
+ //-------------------------------------------------------------------
+ double scale() const
+ {
+ return (m_kx + m_ky) * 0.5;
+ }
+
+
+ //-------------------------------------------------------------------
+ unsigned byte_size() const
+ {
+ return
+ sizeof(m_world_x1) +
+ sizeof(m_world_y1) +
+ sizeof(m_world_x2) +
+ sizeof(m_world_y2) +
+ sizeof(m_device_x1) +
+ sizeof(m_device_y1) +
+ sizeof(m_device_x2) +
+ sizeof(m_device_y2) +
+ sizeof(m_aspect) +
+ sizeof(m_align_x) +
+ sizeof(m_align_y) +
+ sizeof(m_wx1) +
+ sizeof(m_wy1) +
+ sizeof(m_wx2) +
+ sizeof(m_wy2) +
+ sizeof(m_dx1) +
+ sizeof(m_dy1) +
+ sizeof(m_kx) +
+ sizeof(m_ky);
+ }
+
+ void serialize(int8u* ptr) const
+ {
+ memcpy(ptr, &m_world_x1, sizeof(m_world_x1)); ptr += sizeof(m_world_x1);
+ memcpy(ptr, &m_world_y1, sizeof(m_world_y1)); ptr += sizeof(m_world_y1);
+ memcpy(ptr, &m_world_x2, sizeof(m_world_x2)); ptr += sizeof(m_world_x2);
+ memcpy(ptr, &m_world_y2, sizeof(m_world_y2)); ptr += sizeof(m_world_y2);
+ memcpy(ptr, &m_device_x1, sizeof(m_device_x1)); ptr += sizeof(m_device_x1);
+ memcpy(ptr, &m_device_y1, sizeof(m_device_y1)); ptr += sizeof(m_device_y1);
+ memcpy(ptr, &m_device_x2, sizeof(m_device_x2)); ptr += sizeof(m_device_x2);
+ memcpy(ptr, &m_device_y2, sizeof(m_device_y2)); ptr += sizeof(m_device_y2);
+ memcpy(ptr, &m_aspect, sizeof(m_aspect)); ptr += sizeof(m_aspect);
+ memcpy(ptr, &m_align_x, sizeof(m_align_x)); ptr += sizeof(m_align_x);
+ memcpy(ptr, &m_align_y, sizeof(m_align_y)); ptr += sizeof(m_align_y);
+ memcpy(ptr, &m_wx1, sizeof(m_wx1)); ptr += sizeof(m_wx1);
+ memcpy(ptr, &m_wy1, sizeof(m_wy1)); ptr += sizeof(m_wy1);
+ memcpy(ptr, &m_wx2, sizeof(m_wx2)); ptr += sizeof(m_wx2);
+ memcpy(ptr, &m_wy2, sizeof(m_wy2)); ptr += sizeof(m_wy2);
+ memcpy(ptr, &m_dx1, sizeof(m_dx1)); ptr += sizeof(m_dx1);
+ memcpy(ptr, &m_dy1, sizeof(m_dy1)); ptr += sizeof(m_dy1);
+ memcpy(ptr, &m_kx, sizeof(m_kx)); ptr += sizeof(m_kx);
+ memcpy(ptr, &m_ky, sizeof(m_ky)); ptr += sizeof(m_ky);
+ }
+
+ void deserialize(const int8u* ptr)
+ {
+ memcpy(&m_world_x1, ptr, sizeof(m_world_x1)); ptr += sizeof(m_world_x1);
+ memcpy(&m_world_y1, ptr, sizeof(m_world_y1)); ptr += sizeof(m_world_y1);
+ memcpy(&m_world_x2, ptr, sizeof(m_world_x2)); ptr += sizeof(m_world_x2);
+ memcpy(&m_world_y2, ptr, sizeof(m_world_y2)); ptr += sizeof(m_world_y2);
+ memcpy(&m_device_x1, ptr, sizeof(m_device_x1)); ptr += sizeof(m_device_x1);
+ memcpy(&m_device_y1, ptr, sizeof(m_device_y1)); ptr += sizeof(m_device_y1);
+ memcpy(&m_device_x2, ptr, sizeof(m_device_x2)); ptr += sizeof(m_device_x2);
+ memcpy(&m_device_y2, ptr, sizeof(m_device_y2)); ptr += sizeof(m_device_y2);
+ memcpy(&m_aspect, ptr, sizeof(m_aspect)); ptr += sizeof(m_aspect);
+ memcpy(&m_align_x, ptr, sizeof(m_align_x)); ptr += sizeof(m_align_x);
+ memcpy(&m_align_y, ptr, sizeof(m_align_y)); ptr += sizeof(m_align_y);
+ memcpy(&m_wx1, ptr, sizeof(m_wx1)); ptr += sizeof(m_wx1);
+ memcpy(&m_wy1, ptr, sizeof(m_wy1)); ptr += sizeof(m_wy1);
+ memcpy(&m_wx2, ptr, sizeof(m_wx2)); ptr += sizeof(m_wx2);
+ memcpy(&m_wy2, ptr, sizeof(m_wy2)); ptr += sizeof(m_wy2);
+ memcpy(&m_dx1, ptr, sizeof(m_dx1)); ptr += sizeof(m_dx1);
+ memcpy(&m_dy1, ptr, sizeof(m_dy1)); ptr += sizeof(m_dy1);
+ memcpy(&m_kx, ptr, sizeof(m_kx)); ptr += sizeof(m_kx);
+ memcpy(&m_ky, ptr, sizeof(m_ky)); ptr += sizeof(m_ky);
+ }
+
+ private:
+ void update();
+
+ double m_world_x1;
+ double m_world_y1;
+ double m_world_x2;
+ double m_world_y2;
+ double m_device_x1;
+ double m_device_y1;
+ double m_device_x2;
+ double m_device_y2;
+ aspect_ratio_e m_aspect;
+ double m_align_x;
+ double m_align_y;
+ double m_wx1;
+ double m_wy1;
+ double m_wx2;
+ double m_wy2;
+ double m_dx1;
+ double m_dy1;
+ double m_kx;
+ double m_ky;
+ };
+
+
+
+ //-----------------------------------------------------------------------
+ inline void trans_viewport::update()
+ {
+ double world_x1 = m_world_x1;
+ double world_y1 = m_world_y1;
+ double world_x2 = m_world_x2;
+ double world_y2 = m_world_y2;
+ double device_x1 = m_device_x1;
+ double device_y1 = m_device_y1;
+ double device_x2 = m_device_x2;
+ double device_y2 = m_device_y2;
+ if(m_aspect != aspect_ratio_stretch)
+ {
+ double d;
+ m_kx = (device_x2 - device_x1) / (world_x2 - world_x1);
+ m_ky = (device_y2 - device_y1) / (world_y2 - world_y1);
+
+ if((m_aspect == aspect_ratio_meet) == (m_kx < m_ky))
+ {
+ d = (world_y2 - world_y1) * m_ky / m_kx;
+ world_y1 += (world_y2 - world_y1 - d) * m_align_y;
+ world_y2 = world_y1 + d;
+ }
+ else
+ {
+ d = (world_x2 - world_x1) * m_kx / m_ky;
+ world_x1 += (world_x2 - world_x1 - d) * m_align_x;
+ world_x2 = world_x1 + d;
+ }
+ }
+ m_wx1 = world_x1;
+ m_wy1 = world_y1;
+ m_wx2 = world_x2;
+ m_wy2 = world_y2;
+ m_dx1 = device_x1;
+ m_dy1 = device_y1;
+ m_kx = (device_x2 - device_x1) / (world_x2 - world_x1);
+ m_ky = (device_y2 - device_y1) / (world_y2 - world_y1);
+ }
+
+
+}
+
+
+#endif
diff --git a/agg/inc/agg_trans_warp_magnifier.h b/agg/inc/agg_trans_warp_magnifier.h
new file mode 100755
index 000000000000..d71f567af2ca
--- /dev/null
+++ b/agg/inc/agg_trans_warp_magnifier.h
@@ -0,0 +1,51 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+
+#ifndef AGG_WARP_MAGNIFIER_INCLUDED
+#define AGG_WARP_MAGNIFIER_INCLUDED
+
+
+namespace agg
+{
+
+ //----------------------------------------------------trans_warp_magnifier
+ //
+ // See Inmplementation agg_trans_warp_magnifier.cpp
+ //
+ class trans_warp_magnifier
+ {
+ public:
+ trans_warp_magnifier() : m_xc(0.0), m_yc(0.0), m_magn(1.0), m_radius(1.0) {}
+
+ void center(double x, double y) { m_xc = x; m_yc = y; }
+ void magnification(double m) { m_magn = m; }
+ void radius(double r) { m_radius = r; }
+
+ void transform(double* x, double* y) const;
+ void inverse_transform(double* x, double* y) const;
+
+ private:
+ double m_xc;
+ double m_yc;
+ double m_magn;
+ double m_radius;
+ };
+
+
+}
+
+
+#endif
+
diff --git a/agg/inc/agg_vcgen_bspline.h b/agg/inc/agg_vcgen_bspline.h
new file mode 100755
index 000000000000..7490a50a6764
--- /dev/null
+++ b/agg/inc/agg_vcgen_bspline.h
@@ -0,0 +1,74 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+
+#ifndef AGG_VCGEN_BSPLINE_INCLUDED
+#define AGG_VCGEN_BSPLINE_INCLUDED
+
+#include "agg_basics.h"
+#include "agg_array.h"
+#include "agg_bspline.h"
+
+
+namespace agg
+{
+
+ //==========================================================vcgen_bspline
+ class vcgen_bspline
+ {
+ enum status_e
+ {
+ initial,
+ ready,
+ polygon,
+ end_poly,
+ stop
+ };
+
+ public:
+ typedef pod_deque<point_type, 6> vertex_storage;
+
+ vcgen_bspline();
+
+ void interpolation_step(double v) { m_interpolation_step = v; }
+ double interpolation_step() const { return m_interpolation_step; }
+
+ // Vertex Generator Interface
+ void remove_all();
+ void add_vertex(double x, double y, unsigned cmd);
+
+ // Vertex Source Interface
+ void rewind(unsigned id);
+ unsigned vertex(double* x, double* y);
+
+ private:
+ vcgen_bspline(const vcgen_bspline&);
+ const vcgen_bspline& operator = (const vcgen_bspline&);
+
+ vertex_storage m_src_vertices;
+ bspline m_spline_x;
+ bspline m_spline_y;
+ double m_interpolation_step;
+ unsigned m_closed;
+ status_e m_status;
+ unsigned m_src_vertex;
+ double m_cur_abscissa;
+ double m_max_abscissa;
+ };
+
+}
+
+
+#endif
+
diff --git a/agg/inc/agg_vcgen_contour.h b/agg/inc/agg_vcgen_contour.h
new file mode 100755
index 000000000000..1c5428206640
--- /dev/null
+++ b/agg/inc/agg_vcgen_contour.h
@@ -0,0 +1,96 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+
+#ifndef AGG_VCGEN_CONTOUR_INCLUDED
+#define AGG_VCGEN_CONTOUR_INCLUDED
+
+#include "agg_math_stroke.h"
+#include "agg_vertex_iterator.h"
+
+namespace agg
+{
+
+ //----------------------------------------------------------vcgen_contour
+ //
+ // See Implementation agg_vcgen_contour.cpp
+ //
+ class vcgen_contour
+ {
+ enum status_e
+ {
+ initial,
+ ready,
+ outline,
+ out_vertices,
+ end_poly,
+ stop
+ };
+
+ public:
+ typedef vertex_sequence<vertex_dist, 6> vertex_storage;
+ typedef pod_deque<point_type, 6> coord_storage;
+
+ vcgen_contour();
+
+ void line_join(line_join_e lj) { m_line_join = lj; }
+ void inner_line_join(line_join_e lj) { m_inner_line_join = lj; }
+ void width(double w) { m_width = w * 0.5; }
+ void miter_limit(double ml) { m_miter_limit = ml; }
+ void miter_limit_theta(double t);
+ void inner_miter_limit(double ml) { m_inner_miter_limit = ml; }
+ void approximation_scale(double as) { m_approx_scale = as; }
+ void auto_detect_orientation(bool v) { m_auto_detect = v; }
+
+ line_join_e line_join() const { return m_line_join; }
+ line_join_e inner_line_join() const { return m_inner_line_join; }
+ double width() const { return m_width * 2.0; }
+ double miter_limit() const { return m_miter_limit; }
+ double inner_miter_limit() const { return m_inner_miter_limit; }
+ double approximation_scale() const { return m_approx_scale; }
+ bool auto_detect_orientation() const { return m_auto_detect; }
+
+ // Generator interface
+ void remove_all();
+ void add_vertex(double x, double y, unsigned cmd);
+
+ // Vertex Source Interface
+ void rewind(unsigned id);
+ unsigned vertex(double* x, double* y);
+
+ private:
+ vcgen_contour(const vcgen_contour&);
+ const vcgen_contour& operator = (const vcgen_contour&);
+
+ vertex_storage m_src_vertices;
+ coord_storage m_out_vertices;
+ double m_width;
+ line_join_e m_line_join;
+ line_join_e m_inner_line_join;
+ double m_approx_scale;
+ double m_abs_width;
+ double m_signed_width;
+ double m_miter_limit;
+ double m_inner_miter_limit;
+ status_e m_status;
+ unsigned m_src_vertex;
+ unsigned m_out_vertex;
+ unsigned m_closed;
+ unsigned m_orientation;
+ bool m_auto_detect;
+ };
+
+}
+
+#endif
diff --git a/agg/inc/agg_vcgen_dash.h b/agg/inc/agg_vcgen_dash.h
new file mode 100755
index 000000000000..cc4c86dea833
--- /dev/null
+++ b/agg/inc/agg_vcgen_dash.h
@@ -0,0 +1,99 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// Line dash generator
+//
+//----------------------------------------------------------------------------
+#ifndef AGG_VCGEN_DASH_INCLUDED
+#define AGG_VCGEN_DASH_INCLUDED
+
+#include "agg_basics.h"
+#include "agg_vertex_sequence.h"
+#include "agg_vertex_iterator.h"
+
+namespace agg
+{
+
+ //---------------------------------------------------------------vcgen_dash
+ //
+ // See Implementation agg_vcgen_dash.cpp
+ //
+ class vcgen_dash
+ {
+ enum
+ {
+ max_dashes = 32
+ };
+
+ enum status_e
+ {
+ initial,
+ ready,
+ polyline,
+ stop
+ };
+
+ public:
+ typedef vertex_sequence<vertex_dist, 6> vertex_storage;
+
+ vcgen_dash();
+
+ void remove_all_dashes();
+ void add_dash(double dash_len, double gap_len);
+ void dash_start(double ds);
+
+ void shorten(double s) { m_shorten = s; }
+ double shorten() const { return m_shorten; }
+
+ // Vertex Generator Interface
+ void remove_all();
+ void add_vertex(double x, double y, unsigned cmd);
+
+ // Vertex Source Interface
+ void rewind(unsigned id);
+ unsigned vertex(double* x, double* y);
+
+ typedef vcgen_dash source_type;
+ typedef vertex_iterator<source_type> iterator;
+ iterator begin(unsigned id) { return iterator(*this, id); }
+ iterator end() { return iterator(path_cmd_stop); }
+
+ private:
+ vcgen_dash(const vcgen_dash&);
+ const vcgen_dash& operator = (const vcgen_dash&);
+
+ void calc_dash_start(double ds);
+
+ double m_dashes[max_dashes];
+ double m_total_dash_len;
+ unsigned m_num_dashes;
+ double m_dash_start;
+ double m_shorten;
+ double m_curr_dash_start;
+ unsigned m_curr_dash;
+ double m_curr_rest;
+ const vertex_dist* m_v1;
+ const vertex_dist* m_v2;
+
+ vertex_storage m_src_vertices;
+ unsigned m_closed;
+ status_e m_status;
+ unsigned m_src_vertex;
+ };
+
+
+}
+
+#endif
diff --git a/agg/inc/agg_vcgen_markers_term.h b/agg/inc/agg_vcgen_markers_term.h
new file mode 100755
index 000000000000..6f213811c290
--- /dev/null
+++ b/agg/inc/agg_vcgen_markers_term.h
@@ -0,0 +1,72 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+
+#ifndef AGG_VCGEN_MARKERS_TERM_INCLUDED
+#define AGG_VCGEN_MARKERS_TERM_INCLUDED
+
+#include "agg_basics.h"
+#include "agg_vertex_sequence.h"
+#include "agg_vertex_iterator.h"
+
+namespace agg
+{
+
+ //======================================================vcgen_markers_term
+ //
+ // See Implemantation agg_vcgen_markers_term.cpp
+ // Terminal markers generator (arrowhead/arrowtail)
+ //
+ //------------------------------------------------------------------------
+ class vcgen_markers_term
+ {
+ public:
+ vcgen_markers_term() : m_curr_id(0), m_curr_idx(0) {}
+
+ // Vertex Generator Interface
+ void remove_all();
+ void add_vertex(double x, double y, unsigned cmd);
+
+ // Vertex Source Interface
+ void rewind(unsigned id);
+ unsigned vertex(double* x, double* y);
+
+ typedef vcgen_markers_term source_type;
+ typedef vertex_iterator<source_type> iterator;
+ iterator begin(unsigned id) { return iterator(*this, id); }
+ iterator end() { return iterator(path_cmd_stop); }
+
+ private:
+ vcgen_markers_term(const vcgen_markers_term&);
+ const vcgen_markers_term& operator = (const vcgen_markers_term&);
+
+ struct coord_type
+ {
+ double x, y;
+
+ coord_type() {}
+ coord_type(double x_, double y_) : x(x_), y(y_) {}
+ };
+
+ typedef pod_deque<coord_type, 6> coord_storage;
+
+ coord_storage m_markers;
+ unsigned m_curr_id;
+ unsigned m_curr_idx;
+ };
+
+
+}
+
+#endif
diff --git a/agg/inc/agg_vcgen_smooth_poly1.h b/agg/inc/agg_vcgen_smooth_poly1.h
new file mode 100755
index 000000000000..61ca14898328
--- /dev/null
+++ b/agg/inc/agg_vcgen_smooth_poly1.h
@@ -0,0 +1,87 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+
+#ifndef AGG_VCGEN_SMOOTH_POLY1_INCLUDED
+#define AGG_VCGEN_SMOOTH_POLY1_INCLUDED
+
+#include "agg_basics.h"
+#include "agg_vertex_sequence.h"
+
+
+namespace agg
+{
+
+ //======================================================vcgen_smooth_poly1
+ //
+ // See Implementation agg_vcgen_smooth_poly1.cpp
+ // Smooth polygon generator
+ //
+ //------------------------------------------------------------------------
+ class vcgen_smooth_poly1
+ {
+ enum status_e
+ {
+ initial,
+ ready,
+ polygon,
+ ctrl_b,
+ ctrl_e,
+ ctrl1,
+ ctrl2,
+ end_poly,
+ stop
+ };
+
+ public:
+ typedef vertex_sequence<vertex_dist, 6> vertex_storage;
+
+ vcgen_smooth_poly1();
+
+ void smooth_value(double v) { m_smooth_value = v * 0.5; }
+ double smooth_value() const { return m_smooth_value * 2.0; }
+
+ // Vertex Generator Interface
+ void remove_all();
+ void add_vertex(double x, double y, unsigned cmd);
+
+ // Vertex Source Interface
+ void rewind(unsigned id);
+ unsigned vertex(double* x, double* y);
+
+ private:
+ vcgen_smooth_poly1(const vcgen_smooth_poly1&);
+ const vcgen_smooth_poly1& operator = (const vcgen_smooth_poly1&);
+
+ void calculate(const vertex_dist& v0,
+ const vertex_dist& v1,
+ const vertex_dist& v2,
+ const vertex_dist& v3);
+
+ vertex_storage m_src_vertices;
+ double m_smooth_value;
+ unsigned m_closed;
+ status_e m_status;
+ unsigned m_src_vertex;
+ double m_ctrl1_x;
+ double m_ctrl1_y;
+ double m_ctrl2_x;
+ double m_ctrl2_y;
+ };
+
+}
+
+
+#endif
+
diff --git a/agg/inc/agg_vcgen_stroke.h b/agg/inc/agg_vcgen_stroke.h
new file mode 100755
index 000000000000..a73509acf3d9
--- /dev/null
+++ b/agg/inc/agg_vcgen_stroke.h
@@ -0,0 +1,114 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+
+#ifndef AGG_VCGEN_STROKE_INCLUDED
+#define AGG_VCGEN_STROKE_INCLUDED
+
+#include "agg_math_stroke.h"
+#include "agg_vertex_iterator.h"
+
+
+namespace agg
+{
+
+ //============================================================vcgen_stroke
+ //
+ // See Implementation agg_vcgen_stroke.cpp
+ // Stroke generator
+ //
+ //------------------------------------------------------------------------
+ class vcgen_stroke
+ {
+ enum status_e
+ {
+ initial,
+ ready,
+ cap1,
+ cap2,
+ outline1,
+ close_first,
+ outline2,
+ out_vertices,
+ end_poly1,
+ end_poly2,
+ stop
+ };
+
+ public:
+ typedef vertex_sequence<vertex_dist, 6> vertex_storage;
+ typedef pod_deque<point_type, 6> coord_storage;
+
+ vcgen_stroke();
+
+ void line_cap(line_cap_e lc) { m_line_cap = lc; }
+ void line_join(line_join_e lj) { m_line_join = lj; }
+ void inner_line_join(line_join_e lj) { m_inner_line_join = lj; }
+
+ line_cap_e line_cap() const { return m_line_cap; }
+ line_join_e line_join() const { return m_line_join; }
+ line_join_e inner_line_join() const { return m_inner_line_join; }
+
+ void width(double w) { m_width = w * 0.5; }
+ void miter_limit(double ml) { m_miter_limit = ml; }
+ void miter_limit_theta(double t);
+ void inner_miter_limit(double ml) { m_inner_miter_limit = ml; }
+ void approximation_scale(double as) { m_approx_scale = as; }
+
+ double width() const { return m_width * 2.0; }
+ double miter_limit() const { return m_miter_limit; }
+ double inner_miter_limit() const { return m_inner_miter_limit; }
+ double approximation_scale() const { return m_approx_scale; }
+
+ void shorten(double s) { m_shorten = s; }
+ double shorten() const { return m_shorten; }
+
+ // Vertex Generator Interface
+ void remove_all();
+ void add_vertex(double x, double y, unsigned cmd);
+
+ // Vertex Source Interface
+ void rewind(unsigned id);
+ unsigned vertex(double* x, double* y);
+
+ typedef vcgen_stroke source_type;
+ typedef vertex_iterator<source_type> iterator;
+ iterator begin(unsigned id) { return iterator(*this, id); }
+ iterator end() { return iterator(path_cmd_stop); }
+
+ private:
+ vcgen_stroke(const vcgen_stroke&);
+ const vcgen_stroke& operator = (const vcgen_stroke&);
+
+ vertex_storage m_src_vertices;
+ coord_storage m_out_vertices;
+ double m_width;
+ double m_miter_limit;
+ double m_inner_miter_limit;
+ double m_approx_scale;
+ double m_shorten;
+ line_cap_e m_line_cap;
+ line_join_e m_line_join;
+ line_join_e m_inner_line_join;
+ unsigned m_closed;
+ status_e m_status;
+ status_e m_prev_status;
+ unsigned m_src_vertex;
+ unsigned m_out_vertex;
+ };
+
+
+}
+
+#endif
diff --git a/agg/inc/agg_vcgen_vertex_sequence.h b/agg/inc/agg_vcgen_vertex_sequence.h
new file mode 100755
index 000000000000..7c4e9e4253e5
--- /dev/null
+++ b/agg/inc/agg_vcgen_vertex_sequence.h
@@ -0,0 +1,135 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+
+#ifndef AGG_VCGEN_VERTEX_SEQUENCE_INCLUDED
+#define AGG_VCGEN_VERTEX_SEQUENCE_INCLUDED
+
+#include "agg_basics.h"
+#include "agg_vertex_sequence.h"
+#include "agg_shorten_path.h"
+
+namespace agg
+{
+
+ //===================================================vcgen_vertex_sequence
+ class vcgen_vertex_sequence
+ {
+ public:
+ typedef vertex_dist_cmd vertex_type;
+ typedef vertex_sequence<vertex_type, 6> vertex_storage;
+
+ vcgen_vertex_sequence() :
+ m_flags(0),
+ m_cur_vertex(0),
+ m_shorten(0.0),
+ m_ready(false)
+ {
+ }
+
+ // Vertex Generator Interface
+ void remove_all();
+ void add_vertex(double x, double y, unsigned cmd);
+
+ // Vertex Source Interface
+ void rewind(unsigned id);
+ unsigned vertex(double* x, double* y);
+
+ void shorten(double s) { m_shorten = s; }
+ double shorten() const { return m_shorten; }
+
+ private:
+ vcgen_vertex_sequence(const vcgen_vertex_sequence&);
+ const vcgen_vertex_sequence& operator = (const vcgen_vertex_sequence&);
+
+ vertex_storage m_src_vertices;
+ unsigned m_flags;
+ unsigned m_cur_vertex;
+ double m_shorten;
+ bool m_ready;
+ };
+
+
+ //------------------------------------------------------------------------
+ inline void vcgen_vertex_sequence::remove_all()
+ {
+ m_ready = false;
+ m_src_vertices.remove_all();
+ m_cur_vertex = 0;
+ m_flags = 0;
+ }
+
+ //------------------------------------------------------------------------
+ inline void vcgen_vertex_sequence::add_vertex(double x, double y, unsigned cmd)
+ {
+ m_ready = false;
+ if(is_move_to(cmd))
+ {
+ m_src_vertices.modify_last(vertex_dist_cmd(x, y, cmd));
+ }
+ else
+ {
+ if(is_vertex(cmd))
+ {
+ m_src_vertices.add(vertex_dist_cmd(x, y, cmd));
+ }
+ else
+ {
+ m_flags = cmd & path_flags_mask;
+ }
+ }
+ }
+
+
+ //------------------------------------------------------------------------
+ inline void vcgen_vertex_sequence::rewind(unsigned)
+ {
+ if(!m_ready)
+ {
+ m_src_vertices.close(is_closed(m_flags));
+ shorten_path(m_src_vertices, m_shorten, get_close_flag(m_flags));
+ }
+ m_ready = true;
+ m_cur_vertex = 0;
+ }
+
+ //------------------------------------------------------------------------
+ inline unsigned vcgen_vertex_sequence::vertex(double* x, double* y)
+ {
+ if(!m_ready)
+ {
+ rewind(0);
+ }
+
+ if(m_cur_vertex == m_src_vertices.size())
+ {
+ ++m_cur_vertex;
+ return path_cmd_end_poly | m_flags;
+ }
+
+ if(m_cur_vertex > m_src_vertices.size())
+ {
+ return path_cmd_stop;
+ }
+
+ vertex_type& v = m_src_vertices[m_cur_vertex++];
+ *x = v.x;
+ *y = v.y;
+ return v.cmd;
+ }
+
+
+}
+
+#endif
diff --git a/agg/inc/agg_vertex_iterator.h b/agg/inc/agg_vertex_iterator.h
new file mode 100755
index 000000000000..f22af0acb888
--- /dev/null
+++ b/agg/inc/agg_vertex_iterator.h
@@ -0,0 +1,133 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// classes: vertex_iterator
+// vertex_source_adaptor
+// vertex_source_adaptor_with_id
+//
+//----------------------------------------------------------------------------
+#ifndef AGG_VERTEX_ITERATOR_INCLUDED
+#define AGG_VERTEX_ITERATOR_INCLUDED
+
+#include "agg_basics.h"
+
+
+namespace agg
+{
+
+ //---------------------------------------------------------vertex_iterator
+ template<class VertexSource> class vertex_iterator
+ {
+ public:
+ vertex_iterator() {}
+ vertex_iterator(unsigned cmd) { m_vertex.cmd = cmd; }
+ vertex_iterator(const vertex_iterator& i) : m_vs(i.m_vs), m_vertex(i.m_vertex) {}
+ vertex_iterator(VertexSource& vs, unsigned id) : m_vs(&vs)
+ {
+ m_vs->rewind(id);
+ m_vertex.cmd = m_vs->vertex(&m_vertex.x, &m_vertex.y);
+ }
+ vertex_iterator& operator++()
+ {
+ m_vertex.cmd = m_vs->vertex(&m_vertex.x, &m_vertex.y);
+ return *this;
+ }
+
+ const vertex_type& operator*() const { return m_vertex; }
+ const vertex_type* operator->() const { return &m_vertex; }
+
+ bool operator != (const vertex_iterator& i)
+ {
+ return m_vertex.cmd != i.m_vertex.cmd;
+ }
+
+ private:
+ VertexSource* m_vs;
+ vertex_type m_vertex;
+ };
+
+
+ //---------------------------------------------------vertex_source_adaptor
+ template<class VertexContainer> class vertex_source_adaptor
+ {
+ public:
+ vertex_source_adaptor(const VertexContainer& container) :
+ m_container(&container) {}
+
+ void rewind(unsigned)
+ {
+ m_iterator = m_container->begin();
+ m_end = m_container->end();
+ }
+
+ unsigned vertex(double* x, double* y)
+ {
+ unsigned cmd = path_cmd_stop;
+ if(m_iterator != m_end)
+ {
+ *x = m_iterator->x;
+ *y = m_iterator->y;
+ cmd = m_iterator->cmd;
+ ++m_iterator;
+ }
+ return cmd;
+ }
+
+ private:
+ const VertexContainer* m_container;
+ typename VertexContainer::const_iterator m_iterator;
+ typename VertexContainer::const_iterator m_end;
+ };
+
+
+
+ //-------------------------------------------vertex_source_adaptor_with_id
+ template<class VertexContainer> class vertex_source_adaptor_with_id
+ {
+ public:
+ vertex_source_adaptor_with_id(const VertexContainer& container) :
+ m_container(&container) {}
+
+ void rewind(unsigned id)
+ {
+ m_iterator = m_container->begin(id);
+ m_end = m_container->end();
+ }
+
+ unsigned vertex(double* x, double* y)
+ {
+ unsigned cmd = path_cmd_stop;
+ if(m_iterator != m_end)
+ {
+ *x = m_iterator->x;
+ *y = m_iterator->y;
+ cmd = m_iterator->cmd;
+ ++m_iterator;
+ }
+ return cmd;
+ }
+
+ private:
+ const VertexContainer* m_container;
+ typename VertexContainer::const_iterator m_iterator;
+ typename VertexContainer::const_iterator m_end;
+ };
+
+
+
+}
+
+
+#endif
diff --git a/agg/inc/agg_vertex_sequence.h b/agg/inc/agg_vertex_sequence.h
new file mode 100755
index 000000000000..357a3df15fa4
--- /dev/null
+++ b/agg/inc/agg_vertex_sequence.h
@@ -0,0 +1,176 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// vertex_sequence container and vertex_dist struct
+//
+//----------------------------------------------------------------------------
+#ifndef AGG_VERTEX_SEQUENCE_INCLUDED
+#define AGG_VERTEX_SEQUENCE_INCLUDED
+
+#include "agg_basics.h"
+#include "agg_array.h"
+#include "agg_math.h"
+
+namespace agg
+{
+
+ //----------------------------------------------------------vertex_sequence
+ // Modified agg::pod_deque. The data is interpreted as a sequence of vertices.
+ // It means that the type T must expose:
+ //
+ // bool operator() (const T& val)
+ //
+ // that is called every time new vertex is being added. The main purpose
+ // of this operator is the possibility to calculate some values during
+ // adding and to return true if the vertex fits some criteria or false if
+ // it doesn't. In the last case the new vertex is not added.
+ //
+ // The simple example is filtering coinciding vertices with calculation
+ // of the distance between the current and previous ones:
+ //
+ // struct vertex_dist
+ // {
+ // double x;
+ // double y;
+ // double dist;
+ //
+ // vertex_dist() {}
+ // vertex_dist(double x_, double y_) :
+ // x(x_),
+ // y(y_),
+ // dist(0.0)
+ // {
+ // }
+ //
+ // bool operator () (const vertex_dist& val)
+ // {
+ // return (dist = calc_distance(x, y, val.x, val.y)) > EPSILON;
+ // }
+ // };
+ //
+ // Function close() calls this operator and removes the last vertex if
+ // necessary.
+ //------------------------------------------------------------------------
+ template<class T, unsigned S=6>
+ class vertex_sequence : public pod_deque<T, S>
+ {
+ public:
+ typedef pod_deque<T, S> base_type;
+
+ void add(const T& val);
+ void modify_last(const T& val);
+ void close(bool remove_flag);
+ };
+
+
+
+ //------------------------------------------------------------------------
+ template<class T, unsigned S>
+ void vertex_sequence<T, S>::add(const T& val)
+ {
+ if(base_type::size() > 1)
+ {
+ if(!(*this)[base_type::size() - 2]((*this)[base_type::size() - 1]))
+ {
+ base_type::remove_last();
+ }
+ }
+ base_type::add(val);
+ }
+
+
+ //------------------------------------------------------------------------
+ template<class T, unsigned S>
+ void vertex_sequence<T, S>::modify_last(const T& val)
+ {
+ base_type::remove_last();
+ add(val);
+ }
+
+
+
+ //------------------------------------------------------------------------
+ template<class T, unsigned S>
+ void vertex_sequence<T, S>::close(bool closed)
+ {
+ while(base_type::size() > 1)
+ {
+ if((*this)[base_type::size() - 2]((*this)[base_type::size() - 1])) break;
+ T t = (*this)[base_type::size() - 1];
+ base_type::remove_last();
+ modify_last(t);
+ }
+
+ if(closed)
+ {
+ while(base_type::size() > 1)
+ {
+ if((*this)[base_type::size() - 1]((*this)[0])) break;
+ base_type::remove_last();
+ }
+ }
+ }
+
+
+
+ // Coinciding points maximal distance (Epsilon)
+ const double vertex_dist_epsilon = 1e-14;
+
+ //-------------------------------------------------------------vertex_dist
+ // Vertex (x, y) with the distance to the next one. The last vertex has
+ // distance between the last and the first points if the polygon is closed
+ // and 0.0 if it's a polyline.
+ struct vertex_dist
+ {
+ double x;
+ double y;
+ double dist;
+
+ vertex_dist() {}
+ vertex_dist(double x_, double y_) :
+ x(x_),
+ y(y_),
+ dist(0.0)
+ {
+ }
+
+ bool operator () (const vertex_dist& val)
+ {
+ bool ret = (dist = calc_distance(x, y, val.x, val.y)) > vertex_dist_epsilon;
+ if(!ret) dist = 1.0 / vertex_dist_epsilon;
+ return ret;
+ }
+ };
+
+
+
+ //--------------------------------------------------------vertex_dist_cmd
+ // Save as the above but with additional "command" value
+ struct vertex_dist_cmd : public vertex_dist
+ {
+ unsigned cmd;
+
+ vertex_dist_cmd() {}
+ vertex_dist_cmd(double x_, double y_, unsigned cmd_) :
+ vertex_dist(x_, y_),
+ cmd(cmd_)
+ {
+ }
+ };
+
+
+}
+
+#endif
diff --git a/agg/inc/agg_vpgen_clip_polygon.h b/agg/inc/agg_vpgen_clip_polygon.h
new file mode 100755
index 000000000000..d5da460843e6
--- /dev/null
+++ b/agg/inc/agg_vpgen_clip_polygon.h
@@ -0,0 +1,83 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+
+#ifndef AGG_VPGEN_CLIP_POLYGON_INCLUDED
+#define AGG_VPGEN_CLIP_POLYGON_INCLUDED
+
+#include "agg_basics.h"
+
+namespace agg
+{
+
+ //======================================================vpgen_clip_polygon
+ //
+ // See Implementation agg_vpgen_clip_polygon.cpp
+ //
+ class vpgen_clip_polygon
+ {
+ public:
+ vpgen_clip_polygon() :
+ m_clip_box(0, 0, 1, 1),
+ m_x1(0),
+ m_y1(0),
+ m_clip_flags(0),
+ m_num_vertices(0),
+ m_vertex(0),
+ m_cmd(path_cmd_move_to)
+ {
+ }
+
+ void clip_box(double _x1, double _y1, double _x2, double _y2)
+ {
+ m_clip_box.x1 = _x1;
+ m_clip_box.y1 = _y1;
+ m_clip_box.x2 = _x2;
+ m_clip_box.y2 = _y2;
+ m_clip_box.normalize();
+ }
+
+
+ double x1() const { return m_clip_box.x1; }
+ double y1() const { return m_clip_box.y1; }
+ double x2() const { return m_clip_box.x2; }
+ double y2() const { return m_clip_box.y2; }
+
+ static bool auto_close() { return true; }
+ static bool auto_unclose() { return false; }
+
+ void reset();
+ void move_to(double x, double y);
+ void line_to(double x, double y);
+ unsigned vertex(double* x, double* y);
+
+ private:
+ unsigned clipping_flags(double x, double y);
+
+ private:
+ rect_d m_clip_box;
+ double m_x1;
+ double m_y1;
+ unsigned m_clip_flags;
+ double m_x[4];
+ double m_y[4];
+ unsigned m_num_vertices;
+ unsigned m_vertex;
+ unsigned m_cmd;
+ };
+
+}
+
+
+#endif
diff --git a/agg/inc/agg_vpgen_clip_polyline.h b/agg/inc/agg_vpgen_clip_polyline.h
new file mode 100755
index 000000000000..f951966a3293
--- /dev/null
+++ b/agg/inc/agg_vpgen_clip_polyline.h
@@ -0,0 +1,121 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+
+#ifndef AGG_VPGEN_CLIP_POLYLINE_INCLUDED
+#define AGG_VPGEN_CLIP_POLYLINE_INCLUDED
+
+#include "agg_basics.h"
+
+namespace agg
+{
+
+ //======================================================vpgen_clip_polyline
+ //
+ // See Implementation agg_vpgen_clip_polyline.cpp
+ //
+ class vpgen_clip_polyline
+ {
+ public:
+ vpgen_clip_polyline() :
+ m_clip_box(0, 0, 1, 1),
+ m_x1(0),
+ m_y1(0),
+ m_f1(0),
+ m_x2(0),
+ m_y2(0),
+ m_f2(0),
+ m_num_vertices(0),
+ m_vertex(0)
+ {
+ }
+
+ void clip_box(double _x1, double _y1, double _x2, double _y2)
+ {
+ m_clip_box.x1 = _x1;
+ m_clip_box.y1 = _y1;
+ m_clip_box.x2 = _x2;
+ m_clip_box.y2 = _y2;
+ m_clip_box.normalize();
+ }
+
+
+ double x1() const { return m_clip_box.x1; }
+ double y1() const { return m_clip_box.y1; }
+ double x2() const { return m_clip_box.x2; }
+ double y2() const { return m_clip_box.y2; }
+
+ static bool auto_close() { return false; }
+ static bool auto_unclose() { return true; }
+
+ void reset();
+ void move_to(double x, double y);
+ void line_to(double x, double y);
+ unsigned vertex(double* x, double* y);
+
+ private:
+ enum clipping_flags_def
+ {
+ clip_x1 = 1,
+ clip_x2 = 2,
+ clip_y1 = 4,
+ clip_y2 = 8
+ };
+
+ // Determine the clipping code of the vertex according to the
+ // Cyrus-Beck line clipping algorithm
+ //--------------------------------------------------------------------
+ unsigned clipping_flags_x(double x)
+ {
+ unsigned f = 0;
+ if(x < m_clip_box.x1) f |= clip_x1;
+ if(x > m_clip_box.x2) f |= clip_x2;
+ return f;
+ }
+
+ unsigned clipping_flags_y(double y)
+ {
+ unsigned f = 0;
+ if(y < m_clip_box.y1) f |= clip_y1;
+ if(y > m_clip_box.y2) f |= clip_y2;
+ return f;
+ }
+
+ unsigned clipping_flags(double x, double y)
+ {
+ return clipping_flags_x(x) | clipping_flags_y(y);
+ }
+
+ bool move_point(double& x, double& y, unsigned& flags);
+ void clip_line_segment();
+
+ private:
+ rect_d m_clip_box;
+ double m_x1;
+ double m_y1;
+ unsigned m_f1;
+ double m_x2;
+ double m_y2;
+ unsigned m_f2;
+ double m_x[2];
+ double m_y[2];
+ unsigned m_cmd[2];
+ unsigned m_num_vertices;
+ unsigned m_vertex;
+ };
+
+}
+
+
+#endif
diff --git a/agg/inc/agg_vpgen_segmentator.h b/agg/inc/agg_vpgen_segmentator.h
new file mode 100755
index 000000000000..1acc3531cc6e
--- /dev/null
+++ b/agg/inc/agg_vpgen_segmentator.h
@@ -0,0 +1,61 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+
+#ifndef AGG_VPGEN_SEGMENTATOR_INCLUDED
+#define AGG_VPGEN_SEGMENTATOR_INCLUDED
+
+#include <math.h>
+#include "agg_basics.h"
+
+namespace agg
+{
+
+ //=======================================================vpgen_segmentator
+ //
+ // See Implementation agg_vpgen_segmentator.cpp
+ //
+ class vpgen_segmentator
+ {
+ public:
+ vpgen_segmentator() : m_approximation_scale(1.0) {}
+
+ void approximation_scale(double s) { m_approximation_scale = s; }
+ double approximation_scale() const { return m_approximation_scale; }
+
+ static bool auto_close() { return false; }
+ static bool auto_unclose() { return false; }
+
+ void reset() { m_cmd = path_cmd_stop; }
+ void move_to(double x, double y);
+ void line_to(double x, double y);
+ unsigned vertex(double* x, double* y);
+
+ private:
+ double m_approximation_scale;
+ double m_x1;
+ double m_y1;
+ double m_dx;
+ double m_dy;
+ double m_dl;
+ double m_ddl;
+ unsigned m_cmd;
+ };
+
+
+
+}
+
+#endif
+
diff --git a/agg/prj/build.lst b/agg/prj/build.lst
new file mode 100755
index 000000000000..57a09328f82a
--- /dev/null
+++ b/agg/prj/build.lst
@@ -0,0 +1,5 @@
+ag agg : soltools stlport NULL
+ag agg usr1 - all ag_mkout NULL
+ag agg\inc get - all ag_inc NULL
+ag agg\prj get - all ag_prj NULL
+ag agg\source nmake - all ag_agg NULL
diff --git a/agg/prj/d.lst b/agg/prj/d.lst
new file mode 100755
index 000000000000..cbec37a17cc8
--- /dev/null
+++ b/agg/prj/d.lst
@@ -0,0 +1,11 @@
+
+..\%__SRC%\lib\iagg.lib %_DEST%\lib%_EXT%\iagg.lib
+..\%__SRC%\bin\agg?????.dll %_DEST%\bin%_EXT%\agg?????.dll
+
+..\%__SRC%\lib\libagg?????.* %_DEST%\lib%_EXT%\libagg?????.*
+..\%__SRC%\lib\*.a %_DEST%\lib%_EXT%\*.a
+..\%__SRC%\lib\*.dylib %_DEST%\lib%_EXT%\*.dylib
+
+mkdir: %_DEST%\inc%_EXT%\agg2
+..\inc\*.h %_DEST%\inc%_EXT%\agg2
+
diff --git a/agg/source/agg.flt b/agg/source/agg.flt
new file mode 100644
index 000000000000..67e713474bf1
--- /dev/null
+++ b/agg/source/agg.flt
@@ -0,0 +1,3 @@
+__CT
+__real
+internal
diff --git a/agg/source/agg_arc.cpp b/agg/source/agg_arc.cpp
new file mode 100755
index 000000000000..eb10f5f7f2fc
--- /dev/null
+++ b/agg/source/agg_arc.cpp
@@ -0,0 +1,105 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// Arc vertex generator
+//
+//----------------------------------------------------------------------------
+
+#include <math.h>
+#include "agg_arc.h"
+
+
+namespace agg
+{
+ //------------------------------------------------------------------------
+ arc::arc(double x, double y,
+ double rx, double ry,
+ double a1, double a2,
+ bool ccw) :
+ m_x(x), m_y(y), m_rx(rx), m_ry(ry), m_scale(1.0)
+ {
+ normalize(a1, a2, ccw);
+ }
+
+ //------------------------------------------------------------------------
+ void arc::init(double x, double y,
+ double rx, double ry,
+ double a1, double a2,
+ bool ccw)
+ {
+ m_x = x; m_y = y;
+ m_rx = rx; m_ry = ry;
+ normalize(a1, a2, ccw);
+ }
+
+ //------------------------------------------------------------------------
+ void arc::approximation_scale(double s)
+ {
+ m_scale = s;
+ if(m_initialized)
+ {
+ normalize(m_start, m_end, m_ccw);
+ }
+ }
+
+ //------------------------------------------------------------------------
+ void arc::rewind(unsigned)
+ {
+ m_path_cmd = path_cmd_move_to;
+ m_angle = m_start;
+ }
+
+ //------------------------------------------------------------------------
+ unsigned arc::vertex(double* x, double* y)
+ {
+ if(is_stop(m_path_cmd)) return path_cmd_stop;
+ if((m_angle < m_end) != m_ccw)
+ {
+ *x = m_x + cos(m_end) * m_rx;
+ *y = m_y + sin(m_end) * m_ry;
+ m_path_cmd = path_cmd_stop;
+ return path_cmd_line_to;
+ }
+
+ *x = m_x + cos(m_angle) * m_rx;
+ *y = m_y + sin(m_angle) * m_ry;
+
+ m_angle += m_da;
+
+ unsigned pf = m_path_cmd;
+ m_path_cmd = path_cmd_line_to;
+ return pf;
+ }
+
+ //------------------------------------------------------------------------
+ void arc::normalize(double a1, double a2, bool ccw)
+ {
+ m_da = fabs(1.0 / ((m_rx + m_ry) * 0.5 * m_scale));
+ if(ccw)
+ {
+ while(a2 < a1) a2 += pi * 2.0;
+ }
+ else
+ {
+ while(a1 < a2) a1 += pi * 2.0;
+ m_da = -m_da;
+ }
+ m_ccw = ccw;
+ m_start = a1;
+ m_end = a2;
+ m_initialized = true;
+ }
+
+}
diff --git a/agg/source/agg_arrowhead.cpp b/agg/source/agg_arrowhead.cpp
new file mode 100755
index 000000000000..694ed5ad887b
--- /dev/null
+++ b/agg/source/agg_arrowhead.cpp
@@ -0,0 +1,110 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// Simple arrowhead/arrowtail generator
+//
+//----------------------------------------------------------------------------
+
+#include "agg_arrowhead.h"
+
+namespace agg
+{
+
+ //------------------------------------------------------------------------
+ arrowhead::arrowhead() :
+ m_head_d1(1.0),
+ m_head_d2(1.0),
+ m_head_d3(1.0),
+ m_head_d4(0.0),
+ m_tail_d1(1.0),
+ m_tail_d2(1.0),
+ m_tail_d3(1.0),
+ m_tail_d4(0.0),
+ m_head_flag(false),
+ m_tail_flag(false),
+ m_curr_id(0),
+ m_curr_coord(0)
+ {
+ }
+
+
+
+ //------------------------------------------------------------------------
+ void arrowhead::rewind(unsigned id)
+ {
+ m_curr_id = id;
+ m_curr_coord = 0;
+ if(id == 0)
+ {
+ if(!m_tail_flag)
+ {
+ m_cmd[0] = path_cmd_stop;
+ return;
+ }
+ m_coord[0] = m_tail_d1; m_coord[1] = 0.0;
+ m_coord[2] = m_tail_d1 - m_tail_d4; m_coord[3] = m_tail_d3;
+ m_coord[4] = -m_tail_d2 - m_tail_d4; m_coord[5] = m_tail_d3;
+ m_coord[6] = -m_tail_d2; m_coord[7] = 0.0;
+ m_coord[8] = -m_tail_d2 - m_tail_d4; m_coord[9] = -m_tail_d3;
+ m_coord[10] = m_tail_d1 - m_tail_d4; m_coord[11] = -m_tail_d3;
+
+ m_cmd[0] = path_cmd_move_to;
+ m_cmd[1] = path_cmd_line_to;
+ m_cmd[2] = path_cmd_line_to;
+ m_cmd[3] = path_cmd_line_to;
+ m_cmd[4] = path_cmd_line_to;
+ m_cmd[5] = path_cmd_line_to;
+ m_cmd[7] = (unsigned)path_cmd_end_poly | (unsigned)path_flags_close | (unsigned)path_flags_ccw;
+ m_cmd[6] = path_cmd_stop;
+ return;
+ }
+
+ if(id == 1)
+ {
+ if(!m_head_flag)
+ {
+ m_cmd[0] = path_cmd_stop;
+ return;
+ }
+ m_coord[0] = -m_head_d1; m_coord[1] = 0.0;
+ m_coord[2] = m_head_d2 + m_head_d4; m_coord[3] = -m_head_d3;
+ m_coord[4] = m_head_d2; m_coord[5] = 0.0;
+ m_coord[6] = m_head_d2 + m_head_d4; m_coord[7] = m_head_d3;
+
+ m_cmd[0] = path_cmd_move_to;
+ m_cmd[1] = path_cmd_line_to;
+ m_cmd[2] = path_cmd_line_to;
+ m_cmd[3] = path_cmd_line_to;
+ m_cmd[4] = (unsigned)path_cmd_end_poly | (unsigned)path_flags_close | (unsigned)path_flags_ccw;
+ m_cmd[5] = path_cmd_stop;
+ return;
+ }
+ }
+
+
+ //------------------------------------------------------------------------
+ unsigned arrowhead::vertex(double* x, double* y)
+ {
+ if(m_curr_id < 2)
+ {
+ unsigned curr_idx = m_curr_coord * 2;
+ *x = m_coord[curr_idx];
+ *y = m_coord[curr_idx + 1];
+ return m_cmd[m_curr_coord++];
+ }
+ return path_cmd_stop;
+ }
+
+}
diff --git a/agg/source/agg_bezier_arc.cpp b/agg/source/agg_bezier_arc.cpp
new file mode 100755
index 000000000000..6b47fff76fc8
--- /dev/null
+++ b/agg/source/agg_bezier_arc.cpp
@@ -0,0 +1,237 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// Arc generator. Produces at most 4 consecutive cubic bezier curves, i.e.,
+// 4, 7, 10, or 13 vertices.
+//
+//----------------------------------------------------------------------------
+
+
+#include <math.h>
+#include "agg_bezier_arc.h"
+
+
+namespace agg
+{
+
+ //------------------------------------------------------------arc_to_bezier
+ void arc_to_bezier(double cx, double cy, double rx, double ry,
+ double start_angle, double sweep_angle,
+ double* curve)
+ {
+ double x0 = cos(sweep_angle / 2.0);
+ double y0 = sin(sweep_angle / 2.0);
+ double tx = (1.0 - x0) * 4.0 / 3.0;
+ double ty = y0 - tx * x0 / y0;
+ double px[4];
+ double py[4];
+ px[0] = x0;
+ py[0] = -y0;
+ px[1] = x0 + tx;
+ py[1] = -ty;
+ px[2] = x0 + tx;
+ py[2] = ty;
+ px[3] = x0;
+ py[3] = y0;
+
+ double sn = sin(start_angle + sweep_angle / 2.0);
+ double cs = cos(start_angle + sweep_angle / 2.0);
+
+ unsigned i;
+ for(i = 0; i < 4; i++)
+ {
+ curve[i * 2] = cx + rx * (px[i] * cs - py[i] * sn);
+ curve[i * 2 + 1] = cy + ry * (px[i] * sn + py[i] * cs);
+ }
+ }
+
+
+
+ //------------------------------------------------------------------------
+ void bezier_arc::init(double x, double y,
+ double rx, double ry,
+ double start_angle,
+ double sweep_angle)
+ {
+ start_angle = fmod(start_angle, 2.0 * pi);
+ if(sweep_angle >= 2.0 * pi) sweep_angle = 2.0 * pi;
+ if(sweep_angle <= -2.0 * pi) sweep_angle = -2.0 * pi;
+
+ double total_sweep = 0.0;
+ double local_sweep = 0.0;
+ m_num_vertices = 2;
+ bool done = false;
+ do
+ {
+ if(sweep_angle < 0.0)
+ {
+ local_sweep = -pi * 0.5;
+ total_sweep -= pi * 0.5;
+ if(total_sweep <= sweep_angle)
+ {
+ local_sweep = sweep_angle - (total_sweep + pi * 0.5);
+ done = true;
+ }
+ }
+ else
+ {
+ local_sweep = pi * 0.5;
+ total_sweep += pi * 0.5;
+ if(total_sweep >= sweep_angle)
+ {
+ local_sweep = sweep_angle - (total_sweep - pi * 0.5);
+ done = true;
+ }
+ }
+
+ arc_to_bezier(x, y, rx, ry,
+ start_angle,
+ local_sweep,
+ m_vertices + m_num_vertices - 2);
+
+ m_num_vertices += 6;
+ start_angle += local_sweep;
+ }
+ while(!done && m_num_vertices < 26);
+ }
+
+
+
+
+ //--------------------------------------------------------------------
+ void bezier_arc_svg::init(double x0, double y0,
+ double rx, double ry,
+ double angle,
+ bool large_arc_flag,
+ bool sweep_flag,
+ double x2, double y2)
+ {
+ m_radii_ok = true;
+
+ if(rx < 0.0) rx = -rx;
+ if(ry < 0.0) ry = -rx;
+
+ // Calculate the middle point between
+ // the current and the final points
+ //------------------------
+ double dx2 = (x0 - x2) / 2.0;
+ double dy2 = (y0 - y2) / 2.0;
+
+ // Convert angle from degrees to radians
+ //------------------------
+ double cos_a = cos(angle);
+ double sin_a = sin(angle);
+
+ // Calculate (x1, y1)
+ //------------------------
+ double x1 = cos_a * dx2 + sin_a * dy2;
+ double y1 = -sin_a * dx2 + cos_a * dy2;
+
+ // Ensure radii are large enough
+ //------------------------
+ double prx = rx * rx;
+ double pry = ry * ry;
+ double px1 = x1 * x1;
+ double py1 = y1 * y1;
+
+ // Check that radii are large enough
+ //------------------------
+ double radii_check = px1/prx + py1/pry;
+ if(radii_check > 1.0)
+ {
+ rx = sqrt(radii_check) * rx;
+ ry = sqrt(radii_check) * ry;
+ prx = rx * rx;
+ pry = ry * ry;
+ if(radii_check > 10.0) m_radii_ok = false;
+ }
+
+ // Calculate (cx1, cy1)
+ //------------------------
+ double sign = (large_arc_flag == sweep_flag) ? -1.0 : 1.0;
+ double sq = (prx*pry - prx*py1 - pry*px1) / (prx*py1 + pry*px1);
+ double coef = sign * sqrt((sq < 0) ? 0 : sq);
+ double cx1 = coef * ((rx * y1) / ry);
+ double cy1 = coef * -((ry * x1) / rx);
+
+ //
+ // Calculate (cx, cy) from (cx1, cy1)
+ //------------------------
+ double sx2 = (x0 + x2) / 2.0;
+ double sy2 = (y0 + y2) / 2.0;
+ double cx = sx2 + (cos_a * cx1 - sin_a * cy1);
+ double cy = sy2 + (sin_a * cx1 + cos_a * cy1);
+
+ // Calculate the start_angle (angle1) and the sweep_angle (dangle)
+ //------------------------
+ double ux = (x1 - cx1) / rx;
+ double uy = (y1 - cy1) / ry;
+ double vx = (-x1 - cx1) / rx;
+ double vy = (-y1 - cy1) / ry;
+ double p, n;
+
+ // Calculate the angle start
+ //------------------------
+ n = sqrt(ux*ux + uy*uy);
+ p = ux; // (1 * ux) + (0 * uy)
+ sign = (uy < 0) ? -1.0 : 1.0;
+ double v = p / n;
+ if(v < -1.0) v = -1.0;
+ if(v > 1.0) v = 1.0;
+ double start_angle = sign * acos(v);
+
+ // Calculate the sweep angle
+ //------------------------
+ n = sqrt((ux*ux + uy*uy) * (vx*vx + vy*vy));
+ p = ux * vx + uy * vy;
+ sign = (ux * vy - uy * vx < 0) ? -1.0 : 1.0;
+ v = p / n;
+ if(v < -1.0) v = -1.0;
+ if(v > 1.0) v = 1.0;
+ double sweep_angle = sign * acos(v);
+ if(!sweep_flag && sweep_angle > 0)
+ {
+ sweep_angle -= pi * 2.0;
+ }
+ else
+ if (sweep_flag && sweep_angle < 0)
+ {
+ sweep_angle += pi * 2.0;
+ }
+
+ // We can now build and transform the resulting arc
+ //------------------------
+ m_arc.init(0.0, 0.0, rx, ry, start_angle, sweep_angle);
+ trans_affine mtx = trans_affine_rotation(angle);
+ mtx *= trans_affine_translation(cx, cy);
+
+ for(unsigned i = 2; i < m_arc.num_vertices()-2; i += 2)
+ {
+ mtx.transform(m_arc.vertices() + i, m_arc.vertices() + i + 1);
+ }
+
+ // We must make sure that the starting and ending points
+ // exactly coincide with the initial (x0,y0) and (x2,y2)
+ m_arc.vertices()[0] = x0;
+ m_arc.vertices()[1] = y0;
+ if(m_arc.num_vertices() > 2)
+ {
+ m_arc.vertices()[m_arc.num_vertices() - 2] = x2;
+ m_arc.vertices()[m_arc.num_vertices() - 1] = y2;
+ }
+ }
+
+
+}
diff --git a/agg/source/agg_bspline.cpp b/agg/source/agg_bspline.cpp
new file mode 100755
index 000000000000..8635495ecc9e
--- /dev/null
+++ b/agg/source/agg_bspline.cpp
@@ -0,0 +1,299 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// class bspline
+//
+//----------------------------------------------------------------------------
+
+
+#include "agg_bspline.h"
+
+namespace agg
+{
+
+ //------------------------------------------------------------------------
+ bspline::~bspline()
+ {
+ delete [] m_am;
+ }
+
+
+ //------------------------------------------------------------------------
+ bspline::bspline() :
+ m_max(0),
+ m_num(0),
+ m_x(0),
+ m_y(0),
+ m_am(0),
+ m_last_idx(-1)
+ {
+ }
+
+ //------------------------------------------------------------------------
+ bspline::bspline(int num) :
+ m_max(0),
+ m_num(0),
+ m_x(0),
+ m_y(0),
+ m_am(0),
+ m_last_idx(-1)
+ {
+ init(num);
+ }
+
+ //------------------------------------------------------------------------
+ bspline::bspline(int num, const double* x, const double* y) :
+ m_max(0),
+ m_num(0),
+ m_x(0),
+ m_y(0),
+ m_am(0),
+ m_last_idx(-1)
+ {
+ init(num, x, y);
+ }
+
+
+ //------------------------------------------------------------------------
+ void bspline::init(int max)
+ {
+ if(max > 2 && max > m_max)
+ {
+ delete [] m_am;
+ m_am = new double[max * 3];
+ m_max = max;
+ m_x = m_am + m_max;
+ m_y = m_am + m_max * 2;
+ }
+ m_num = 0;
+ m_last_idx = -1;
+ }
+
+
+ //------------------------------------------------------------------------
+ void bspline::add_point(double x, double y)
+ {
+ if(m_num < m_max)
+ {
+ m_x[m_num] = x;
+ m_y[m_num] = y;
+ ++m_num;
+ }
+ }
+
+
+ //------------------------------------------------------------------------
+ void bspline::prepare()
+ {
+ if(m_num > 2)
+ {
+ int i, k, n1;
+ double* temp;
+ double* r;
+ double* s;
+ double* al;
+ double h, p, d, f, e;
+
+ for(k = 0; k < m_num; k++)
+ {
+ m_am[k] = 0.0;
+ }
+
+ n1 = 3 * m_num;
+
+ al = new double[n1];
+ temp = al;
+
+ for(k = 0; k < n1; k++)
+ {
+ temp[k] = 0.0;
+ }
+
+ r = temp + m_num;
+ s = temp + m_num * 2;
+
+ n1 = m_num - 1;
+ d = m_x[1] - m_x[0];
+ e = (m_y[1] - m_y[0]) / d;
+
+ for(k = 1; k < n1; k++)
+ {
+ h = d;
+ d = m_x[k + 1] - m_x[k];
+ f = e;
+ e = (m_y[k + 1] - m_y[k]) / d;
+ al[k] = d / (d + h);
+ r[k] = 1.0 - al[k];
+ s[k] = 6.0 * (e - f) / (h + d);
+ }
+
+ for(k = 1; k < n1; k++)
+ {
+ p = 1.0 / (r[k] * al[k - 1] + 2.0);
+ al[k] *= -p;
+ s[k] = (s[k] - r[k] * s[k - 1]) * p;
+ }
+
+ m_am[n1] = 0.0;
+ al[n1 - 1] = s[n1 - 1];
+ m_am[n1 - 1] = al[n1 - 1];
+
+ for(k = n1 - 2, i = 0; i < m_num - 2; i++, k--)
+ {
+ al[k] = al[k] * al[k + 1] + s[k];
+ m_am[k] = al[k];
+ }
+ delete [] al;
+ }
+ m_last_idx = -1;
+ }
+
+
+
+ //------------------------------------------------------------------------
+ void bspline::init(int num, const double* x, const double* y)
+ {
+ if(num > 2)
+ {
+ init(num);
+ int i;
+ for(i = 0; i < num; i++)
+ {
+ add_point(*x++, *y++);
+ }
+ prepare();
+ }
+ m_last_idx = -1;
+ }
+
+
+ //------------------------------------------------------------------------
+ void bspline::bsearch(int n, const double *x, double x0, int *i)
+ {
+ int j = n - 1;
+ int k;
+
+ for(*i = 0; (j - *i) > 1; )
+ {
+ if(x0 < x[k = (*i + j) >> 1]) j = k;
+ else *i = k;
+ }
+ }
+
+
+
+ //------------------------------------------------------------------------
+ double bspline::interpolation(double x, int i) const
+ {
+ int j = i + 1;
+ double d = m_x[i] - m_x[j];
+ double h = x - m_x[j];
+ double r = m_x[i] - x;
+ double p = d * d / 6.0;
+ return (m_am[j] * r * r * r + m_am[i] * h * h * h) / 6.0 / d +
+ ((m_y[j] - m_am[j] * p) * r + (m_y[i] - m_am[i] * p) * h) / d;
+ }
+
+
+ //------------------------------------------------------------------------
+ double bspline::extrapolation_left(double x) const
+ {
+ double d = m_x[1] - m_x[0];
+ return (-d * m_am[1] / 6 + (m_y[1] - m_y[0]) / d) *
+ (x - m_x[0]) +
+ m_y[0];
+ }
+
+ //------------------------------------------------------------------------
+ double bspline::extrapolation_right(double x) const
+ {
+ double d = m_x[m_num - 1] - m_x[m_num - 2];
+ return (d * m_am[m_num - 2] / 6 + (m_y[m_num - 1] - m_y[m_num - 2]) / d) *
+ (x - m_x[m_num - 1]) +
+ m_y[m_num - 1];
+ }
+
+ //------------------------------------------------------------------------
+ double bspline::get(double x) const
+ {
+ if(m_num > 2)
+ {
+ int i;
+
+ // Extrapolation on the left
+ if(x < m_x[0]) return extrapolation_left(x);
+
+ // Extrapolation on the right
+ if(x >= m_x[m_num - 1]) return extrapolation_right(x);
+
+ // Interpolation
+ bsearch(m_num, m_x, x, &i);
+ return interpolation(x, i);
+ }
+ return 0.0;
+ }
+
+
+ //------------------------------------------------------------------------
+ double bspline::get_stateful(double x) const
+ {
+ if(m_num > 2)
+ {
+ // Extrapolation on the left
+ if(x < m_x[0]) return extrapolation_left(x);
+
+ // Extrapolation on the right
+ if(x >= m_x[m_num - 1]) return extrapolation_right(x);
+
+ if(m_last_idx >= 0)
+ {
+ // Check if x is not in current range
+ if(x < m_x[m_last_idx] || x > m_x[m_last_idx + 1])
+ {
+ // Check if x between next points (most probably)
+ if(m_last_idx < m_num - 2 &&
+ x >= m_x[m_last_idx + 1] &&
+ x <= m_x[m_last_idx + 2])
+ {
+ ++m_last_idx;
+ }
+ else
+ if(m_last_idx > 0 &&
+ x >= m_x[m_last_idx - 1] &&
+ x <= m_x[m_last_idx])
+ {
+ // x is between pevious points
+ --m_last_idx;
+ }
+ else
+ {
+ // Else perform full search
+ bsearch(m_num, m_x, x, &m_last_idx);
+ }
+ }
+ return interpolation(x, m_last_idx);
+ }
+ else
+ {
+ // Interpolation
+ bsearch(m_num, m_x, x, &m_last_idx);
+ return interpolation(x, m_last_idx);
+ }
+ }
+ return 0.0;
+ }
+
+}
+
diff --git a/agg/source/agg_curves.cpp b/agg/source/agg_curves.cpp
new file mode 100755
index 000000000000..bae65f26b5a3
--- /dev/null
+++ b/agg/source/agg_curves.cpp
@@ -0,0 +1,246 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// classes curve3 and curve4
+//
+//----------------------------------------------------------------------------
+
+#include <math.h>
+#include "agg_curves.h"
+
+namespace agg
+{
+
+ //------------------------------------------------------------------------
+ void curve3::init(double x1, double y1,
+ double x2, double y2,
+ double x3, double y3)
+ {
+ m_start_x = x1;
+ m_start_y = y1;
+ m_end_x = x3;
+ m_end_y = y3;
+
+ double dx1 = x2 - x1;
+ double dy1 = y2 - y1;
+ double dx2 = x3 - x2;
+ double dy2 = y3 - y2;
+
+ double len = sqrt(dx1 * dx1 + dy1 * dy1) + sqrt(dx2 * dx2 + dy2 * dy2);
+
+ m_num_steps = int(len * 0.25 * m_scale);
+
+ if(m_num_steps < 2)
+ {
+ m_num_steps = 2;
+ }
+
+ double subdivide_step = 1.0 / m_num_steps;
+ double subdivide_step2 = subdivide_step * subdivide_step;
+
+ double tmpx = (x1 - x2 * 2.0 + x3) * subdivide_step2;
+ double tmpy = (y1 - y2 * 2.0 + y3) * subdivide_step2;
+
+ m_saved_fx = m_fx = x1;
+ m_saved_fy = m_fy = y1;
+
+ m_saved_dfx = m_dfx = tmpx + (x2 - x1) * (2.0 * subdivide_step);
+ m_saved_dfy = m_dfy = tmpy + (y2 - y1) * (2.0 * subdivide_step);
+
+ m_ddfx = tmpx * 2.0;
+ m_ddfy = tmpy * 2.0;
+
+ m_step = m_num_steps;
+ }
+
+
+
+
+ //------------------------------------------------------------------------
+ void curve3::rewind(unsigned)
+ {
+ if(m_num_steps == 0)
+ {
+ m_step = -1;
+ return;
+ }
+ m_step = m_num_steps;
+ m_fx = m_saved_fx;
+ m_fy = m_saved_fy;
+ m_dfx = m_saved_dfx;
+ m_dfy = m_saved_dfy;
+ }
+
+
+
+
+ //------------------------------------------------------------------------
+ unsigned curve3::vertex(double* x, double* y)
+ {
+ if(m_step < 0) return path_cmd_stop;
+ if(m_step == m_num_steps)
+ {
+ *x = m_start_x;
+ *y = m_start_y;
+ --m_step;
+ return path_cmd_move_to;
+ }
+ if(m_step == 0)
+ {
+ *x = m_end_x;
+ *y = m_end_y;
+ --m_step;
+ return path_cmd_line_to;
+ }
+ m_fx += m_dfx;
+ m_fy += m_dfy;
+ m_dfx += m_ddfx;
+ m_dfy += m_ddfy;
+ *x = m_fx;
+ *y = m_fy;
+ --m_step;
+ return path_cmd_line_to;
+ }
+
+
+
+
+
+
+
+
+
+
+
+
+
+ //------------------------------------------------------------------------
+ void curve4::init(double x1, double y1,
+ double x2, double y2,
+ double x3, double y3,
+ double x4, double y4)
+ {
+ m_start_x = x1;
+ m_start_y = y1;
+ m_end_x = x4;
+ m_end_y = y4;
+
+ double dx1 = x2 - x1;
+ double dy1 = y2 - y1;
+ double dx2 = x3 - x2;
+ double dy2 = y3 - y2;
+ double dx3 = x4 - x3;
+ double dy3 = y4 - y3;
+
+ double len = sqrt(dx1 * dx1 + dy1 * dy1) +
+ sqrt(dx2 * dx2 + dy2 * dy2) +
+ sqrt(dx3 * dx3 + dy3 * dy3);
+
+ m_num_steps = int(len * 0.25 * m_scale);
+
+ if(m_num_steps < 2)
+ {
+ m_num_steps = 2;
+ }
+
+ double subdivide_step = 1.0 / m_num_steps;
+ double subdivide_step2 = subdivide_step * subdivide_step;
+ double subdivide_step3 = subdivide_step * subdivide_step * subdivide_step;
+
+ double pre1 = 3.0 * subdivide_step;
+ double pre2 = 3.0 * subdivide_step2;
+ double pre4 = 6.0 * subdivide_step2;
+ double pre5 = 6.0 * subdivide_step3;
+
+ double tmp1x = x1 - x2 * 2.0 + x3;
+ double tmp1y = y1 - y2 * 2.0 + y3;
+
+ double tmp2x = (x2 - x3) * 3.0 - x1 + x4;
+ double tmp2y = (y2 - y3) * 3.0 - y1 + y4;
+
+ m_saved_fx = m_fx = x1;
+ m_saved_fy = m_fy = y1;
+
+ m_saved_dfx = m_dfx = (x2 - x1) * pre1 + tmp1x * pre2 + tmp2x * subdivide_step3;
+ m_saved_dfy = m_dfy = (y2 - y1) * pre1 + tmp1y * pre2 + tmp2y * subdivide_step3;
+
+ m_saved_ddfx = m_ddfx = tmp1x * pre4 + tmp2x * pre5;
+ m_saved_ddfy = m_ddfy = tmp1y * pre4 + tmp2y * pre5;
+
+ m_dddfx = tmp2x * pre5;
+ m_dddfy = tmp2y * pre5;
+
+ m_step = m_num_steps;
+ }
+
+
+
+
+ //------------------------------------------------------------------------
+ void curve4::rewind(unsigned)
+ {
+ if(m_num_steps == 0)
+ {
+ m_step = -1;
+ return;
+ }
+ m_step = m_num_steps;
+ m_fx = m_saved_fx;
+ m_fy = m_saved_fy;
+ m_dfx = m_saved_dfx;
+ m_dfy = m_saved_dfy;
+ m_ddfx = m_saved_ddfx;
+ m_ddfy = m_saved_ddfy;
+ }
+
+
+
+
+
+ //------------------------------------------------------------------------
+ unsigned curve4::vertex(double* x, double* y)
+ {
+ if(m_step < 0) return path_cmd_stop;
+ if(m_step == m_num_steps)
+ {
+ *x = m_start_x;
+ *y = m_start_y;
+ --m_step;
+ return path_cmd_move_to;
+ }
+ if(m_step == 0)
+ {
+ *x = m_end_x;
+ *y = m_end_y;
+ --m_step;
+ return path_cmd_line_to;
+ }
+ m_fx += m_dfx;
+ m_fy += m_dfy;
+ m_dfx += m_ddfx;
+ m_dfy += m_ddfy;
+ m_ddfx += m_dddfx;
+ m_ddfy += m_dddfy;
+ *x = m_fx;
+ *y = m_fy;
+ --m_step;
+ return path_cmd_line_to;
+ }
+
+
+
+
+}
+
diff --git a/agg/source/agg_embedded_raster_fonts.cpp b/agg/source/agg_embedded_raster_fonts.cpp
new file mode 100755
index 000000000000..b1060fb7e176
--- /dev/null
+++ b/agg/source/agg_embedded_raster_fonts.cpp
@@ -0,0 +1,10426 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+
+#include "agg_embedded_raster_fonts.h"
+
+namespace agg
+{
+
+ const int8u gse4x6[] =
+ {
+ 6, 0, 32, 128-32,
+
+ 0x00,0x00,0x07,0x00,0x0e,0x00,0x15,0x00,0x1c,0x00,0x23,0x00,0x2a,0x00,0x31,0x00,0x38,0x00,
+ 0x3f,0x00,0x46,0x00,0x4d,0x00,0x54,0x00,0x5b,0x00,0x62,0x00,0x69,0x00,0x70,0x00,0x77,0x00,
+ 0x7e,0x00,0x85,0x00,0x8c,0x00,0x93,0x00,0x9a,0x00,0xa1,0x00,0xa8,0x00,0xaf,0x00,0xb6,0x00,
+ 0xbd,0x00,0xc4,0x00,0xcb,0x00,0xd2,0x00,0xd9,0x00,0xe0,0x00,0xe7,0x00,0xee,0x00,0xf5,0x00,
+ 0xfc,0x00,0x03,0x01,0x0a,0x01,0x11,0x01,0x18,0x01,0x1f,0x01,0x26,0x01,0x2d,0x01,0x34,0x01,
+ 0x3b,0x01,0x42,0x01,0x49,0x01,0x50,0x01,0x57,0x01,0x5e,0x01,0x65,0x01,0x6c,0x01,0x73,0x01,
+ 0x7a,0x01,0x81,0x01,0x88,0x01,0x8f,0x01,0x96,0x01,0x9d,0x01,0xa4,0x01,0xab,0x01,0xb2,0x01,
+ 0xb9,0x01,0xc0,0x01,0xc7,0x01,0xce,0x01,0xd5,0x01,0xdc,0x01,0xe3,0x01,0xea,0x01,0xf1,0x01,
+ 0xf8,0x01,0xff,0x01,0x06,0x02,0x0d,0x02,0x14,0x02,0x1b,0x02,0x22,0x02,0x29,0x02,0x30,0x02,
+ 0x37,0x02,0x3e,0x02,0x45,0x02,0x4c,0x02,0x53,0x02,0x5a,0x02,0x61,0x02,0x68,0x02,0x6f,0x02,
+ 0x76,0x02,0x7d,0x02,0x84,0x02,0x8b,0x02,0x92,0x02,0x99,0x02,
+
+ 4, // 0x20 ' '
+ 0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 4, // 0x21 '!'
+ 0x40,0x40,0x40,0x00,0x40,0x00,
+
+ 4, // 0x22 '"'
+ 0xa0,0xa0,0x00,0x00,0x00,0x00,
+
+ 4, // 0x23 '#'
+ 0x60,0xf0,0x60,0xf0,0x60,0x00,
+
+ 4, // 0x24 '$'
+ 0x40,0x60,0xc0,0x60,0xc0,0x40,
+
+ 4, // 0x25 '%'
+ 0xa0,0x20,0x40,0x80,0xa0,0x00,
+
+ 4, // 0x26 '&'
+ 0xe0,0xa0,0x50,0xa0,0xd0,0x00,
+
+ 4, // 0x27 '''
+ 0x40,0x40,0x00,0x00,0x00,0x00,
+
+ 4, // 0x28 '('
+ 0x20,0x40,0x40,0x40,0x20,0x00,
+
+ 4, // 0x29 ')'
+ 0x40,0x20,0x20,0x20,0x40,0x00,
+
+ 4, // 0x2a '*'
+ 0xa0,0x40,0xe0,0x40,0xa0,0x00,
+
+ 4, // 0x2b '+'
+ 0x40,0x40,0xe0,0x40,0x40,0x00,
+
+ 4, // 0x2c ','
+ 0x00,0x00,0x00,0x40,0x40,0x80,
+
+ 4, // 0x2d '-'
+ 0x00,0x00,0xe0,0x00,0x00,0x00,
+
+ 4, // 0x2e '.'
+ 0x00,0x00,0x00,0x00,0x40,0x00,
+
+ 4, // 0x2f '/'
+ 0x10,0x20,0x20,0x40,0x40,0x80,
+
+ 4, // 0x30 '0'
+ 0xe0,0xa0,0xa0,0xa0,0xe0,0x00,
+
+ 4, // 0x31 '1'
+ 0x40,0xc0,0x40,0x40,0xe0,0x00,
+
+ 4, // 0x32 '2'
+ 0xe0,0xa0,0x20,0x40,0xe0,0x00,
+
+ 4, // 0x33 '3'
+ 0xe0,0x20,0x40,0x20,0xe0,0x00,
+
+ 4, // 0x34 '4'
+ 0xa0,0xa0,0xe0,0x20,0x20,0x00,
+
+ 4, // 0x35 '5'
+ 0xe0,0x80,0xc0,0x20,0xc0,0x00,
+
+ 4, // 0x36 '6'
+ 0x40,0x80,0xe0,0xa0,0xe0,0x00,
+
+ 4, // 0x37 '7'
+ 0xe0,0xa0,0x20,0x40,0x40,0x00,
+
+ 4, // 0x38 '8'
+ 0xe0,0xa0,0x40,0xa0,0xe0,0x00,
+
+ 4, // 0x39 '9'
+ 0xe0,0xa0,0xe0,0x20,0xc0,0x00,
+
+ 4, // 0x3a ':'
+ 0x00,0x40,0x00,0x40,0x00,0x00,
+
+ 4, // 0x3b ';'
+ 0x00,0x40,0x00,0x40,0x40,0x80,
+
+ 4, // 0x3c '<'
+ 0x20,0x40,0x80,0x40,0x20,0x00,
+
+ 4, // 0x3d '='
+ 0x00,0xe0,0x00,0xe0,0x00,0x00,
+
+ 4, // 0x3e '>'
+ 0x80,0x40,0x20,0x40,0x80,0x00,
+
+ 4, // 0x3f '?'
+ 0xc0,0x20,0x40,0x00,0x40,0x00,
+
+ 4, // 0x40 '@'
+ 0x40,0xa0,0xe0,0xe0,0x80,0x60,
+
+ 4, // 0x41 'A'
+ 0x40,0xa0,0xe0,0xa0,0xa0,0x00,
+
+ 4, // 0x42 'B'
+ 0xc0,0xa0,0xc0,0xa0,0xc0,0x00,
+
+ 4, // 0x43 'C'
+ 0x60,0x80,0x80,0x80,0x60,0x00,
+
+ 4, // 0x44 'D'
+ 0xc0,0xa0,0xa0,0xa0,0xc0,0x00,
+
+ 4, // 0x45 'E'
+ 0xe0,0x80,0xc0,0x80,0xe0,0x00,
+
+ 4, // 0x46 'F'
+ 0xe0,0x80,0xc0,0x80,0x80,0x00,
+
+ 4, // 0x47 'G'
+ 0x60,0x80,0xa0,0xa0,0x40,0x00,
+
+ 4, // 0x48 'H'
+ 0xa0,0xa0,0xe0,0xa0,0xa0,0x00,
+
+ 4, // 0x49 'I'
+ 0xe0,0x40,0x40,0x40,0xe0,0x00,
+
+ 4, // 0x4a 'J'
+ 0x20,0x20,0x20,0x20,0xa0,0x40,
+
+ 4, // 0x4b 'K'
+ 0xa0,0xa0,0xc0,0xc0,0xa0,0x00,
+
+ 4, // 0x4c 'L'
+ 0x80,0x80,0x80,0x80,0xe0,0x00,
+
+ 4, // 0x4d 'M'
+ 0xa0,0xe0,0xa0,0xa0,0xa0,0x00,
+
+ 4, // 0x4e 'N'
+ 0x90,0xd0,0xb0,0x90,0x90,0x00,
+
+ 4, // 0x4f 'O'
+ 0x40,0xa0,0xa0,0xa0,0x40,0x00,
+
+ 4, // 0x50 'P'
+ 0xc0,0xa0,0xa0,0xc0,0x80,0x00,
+
+ 4, // 0x51 'Q'
+ 0x40,0xa0,0xa0,0xa0,0x60,0x00,
+
+ 4, // 0x52 'R'
+ 0xc0,0xa0,0xa0,0xc0,0xa0,0x00,
+
+ 4, // 0x53 'S'
+ 0x60,0x80,0x40,0x20,0xc0,0x00,
+
+ 4, // 0x54 'T'
+ 0xe0,0x40,0x40,0x40,0x40,0x00,
+
+ 4, // 0x55 'U'
+ 0xa0,0xa0,0xa0,0xa0,0xe0,0x00,
+
+ 4, // 0x56 'V'
+ 0xa0,0xa0,0xa0,0xa0,0x40,0x00,
+
+ 4, // 0x57 'W'
+ 0xa0,0xa0,0xa0,0xe0,0xa0,0x00,
+
+ 4, // 0x58 'X'
+ 0xa0,0xa0,0x40,0xa0,0xa0,0x00,
+
+ 4, // 0x59 'Y'
+ 0xa0,0xa0,0x40,0x40,0x40,0x00,
+
+ 4, // 0x5a 'Z'
+ 0xe0,0x20,0x40,0x80,0xe0,0x00,
+
+ 4, // 0x5b '['
+ 0xc0,0x80,0x80,0x80,0xc0,0x00,
+
+ 4, // 0x5c '\'
+ 0x80,0x40,0x40,0x20,0x20,0x10,
+
+ 4, // 0x5d ']'
+ 0xc0,0x40,0x40,0x40,0xc0,0x00,
+
+ 4, // 0x5e '^'
+ 0x40,0xa0,0x00,0x00,0x00,0x00,
+
+ 4, // 0x5f '_'
+ 0x00,0x00,0x00,0x00,0x00,0xf0,
+
+ 4, // 0x60 '`'
+ 0x40,0x20,0x00,0x00,0x00,0x00,
+
+ 4, // 0x61 'a'
+ 0x00,0x60,0xa0,0xa0,0x70,0x00,
+
+ 4, // 0x62 'b'
+ 0x80,0x80,0xc0,0xa0,0xc0,0x00,
+
+ 4, // 0x63 'c'
+ 0x00,0x60,0x80,0x80,0x60,0x00,
+
+ 4, // 0x64 'd'
+ 0x20,0x20,0x60,0xa0,0x60,0x00,
+
+ 4, // 0x65 'e'
+ 0x00,0x40,0xe0,0x80,0x60,0x00,
+
+ 4, // 0x66 'f'
+ 0x20,0x40,0xe0,0x40,0x40,0x00,
+
+ 4, // 0x67 'g'
+ 0x00,0x60,0xa0,0x60,0x20,0xc0,
+
+ 4, // 0x68 'h'
+ 0x80,0x80,0xc0,0xa0,0xa0,0x00,
+
+ 4, // 0x69 'i'
+ 0x40,0x00,0xc0,0x40,0xe0,0x00,
+
+ 4, // 0x6a 'j'
+ 0x40,0x00,0xc0,0x40,0x40,0x80,
+
+ 4, // 0x6b 'k'
+ 0x80,0x80,0xa0,0xc0,0xa0,0x00,
+
+ 4, // 0x6c 'l'
+ 0xc0,0x40,0x40,0x40,0xe0,0x00,
+
+ 4, // 0x6d 'm'
+ 0x00,0xa0,0xf0,0xf0,0x90,0x00,
+
+ 4, // 0x6e 'n'
+ 0x00,0xc0,0xa0,0xa0,0xa0,0x00,
+
+ 4, // 0x6f 'o'
+ 0x00,0x40,0xa0,0xa0,0x40,0x00,
+
+ 4, // 0x70 'p'
+ 0x00,0xc0,0xa0,0xc0,0x80,0x80,
+
+ 4, // 0x71 'q'
+ 0x00,0x60,0xa0,0x60,0x20,0x20,
+
+ 4, // 0x72 'r'
+ 0x00,0xa0,0x50,0x40,0x40,0x00,
+
+ 4, // 0x73 's'
+ 0x00,0x60,0xc0,0x20,0xc0,0x00,
+
+ 4, // 0x74 't'
+ 0x40,0x40,0xe0,0x40,0x60,0x00,
+
+ 4, // 0x75 'u'
+ 0x00,0xa0,0xa0,0xa0,0x60,0x00,
+
+ 4, // 0x76 'v'
+ 0x00,0xa0,0xa0,0xa0,0x40,0x00,
+
+ 4, // 0x77 'w'
+ 0x00,0xa0,0xa0,0xe0,0xa0,0x00,
+
+ 4, // 0x78 'x'
+ 0x00,0xa0,0x40,0xa0,0xa0,0x00,
+
+ 4, // 0x79 'y'
+ 0x00,0xa0,0xa0,0x60,0x20,0xc0,
+
+ 4, // 0x7a 'z'
+ 0x00,0xe0,0x40,0x80,0xe0,0x00,
+
+ 4, // 0x7b '{'
+ 0x30,0x20,0xc0,0x20,0x30,0x00,
+
+ 4, // 0x7c '|'
+ 0x40,0x40,0x00,0x40,0x40,0x40,
+
+ 4, // 0x7d '}'
+ 0xc0,0x40,0x30,0x40,0xc0,0x00,
+
+ 4, // 0x7e '~'
+ 0x50,0xa0,0x00,0x00,0x00,0x00,
+
+ 4, // 0x7f ''
+ 0x00,0x60,0x90,0xf0,0x00,0x00,
+ 0
+ };
+
+ const int8u gse4x8[] =
+ {
+ 8, 0, 32, 128-32,
+
+ 0x00,0x00,0x09,0x00,0x12,0x00,0x1b,0x00,0x24,0x00,0x2d,0x00,0x36,0x00,0x3f,0x00,0x48,0x00,
+ 0x51,0x00,0x5a,0x00,0x63,0x00,0x6c,0x00,0x75,0x00,0x7e,0x00,0x87,0x00,0x90,0x00,0x99,0x00,
+ 0xa2,0x00,0xab,0x00,0xb4,0x00,0xbd,0x00,0xc6,0x00,0xcf,0x00,0xd8,0x00,0xe1,0x00,0xea,0x00,
+ 0xf3,0x00,0xfc,0x00,0x05,0x01,0x0e,0x01,0x17,0x01,0x20,0x01,0x29,0x01,0x32,0x01,0x3b,0x01,
+ 0x44,0x01,0x4d,0x01,0x56,0x01,0x5f,0x01,0x68,0x01,0x71,0x01,0x7a,0x01,0x83,0x01,0x8c,0x01,
+ 0x95,0x01,0x9e,0x01,0xa7,0x01,0xb0,0x01,0xb9,0x01,0xc2,0x01,0xcb,0x01,0xd4,0x01,0xdd,0x01,
+ 0xe6,0x01,0xef,0x01,0xf8,0x01,0x01,0x02,0x0a,0x02,0x13,0x02,0x1c,0x02,0x25,0x02,0x2e,0x02,
+ 0x37,0x02,0x40,0x02,0x49,0x02,0x52,0x02,0x5b,0x02,0x64,0x02,0x6d,0x02,0x76,0x02,0x7f,0x02,
+ 0x88,0x02,0x91,0x02,0x9a,0x02,0xa3,0x02,0xac,0x02,0xb5,0x02,0xbe,0x02,0xc7,0x02,0xd0,0x02,
+ 0xd9,0x02,0xe2,0x02,0xeb,0x02,0xf4,0x02,0xfd,0x02,0x06,0x03,0x0f,0x03,0x18,0x03,0x21,0x03,
+ 0x2a,0x03,0x33,0x03,0x3c,0x03,0x45,0x03,0x4e,0x03,0x57,0x03,
+
+ 4, // 0x20 ' '
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 4, // 0x21 '!'
+ 0x00,0x40,0x40,0x40,0x40,0x00,0x40,0x00,
+
+ 4, // 0x22 '"'
+ 0x00,0xa0,0xa0,0x00,0x00,0x00,0x00,0x00,
+
+ 4, // 0x23 '#'
+ 0x60,0x60,0xf0,0x60,0x60,0xf0,0x60,0x60,
+
+ 4, // 0x24 '$'
+ 0x40,0x60,0xc0,0xc0,0x60,0x60,0xc0,0x40,
+
+ 4, // 0x25 '%'
+ 0x00,0xa0,0x20,0x40,0x40,0x80,0xa0,0x00,
+
+ 4, // 0x26 '&'
+ 0x00,0x40,0xa0,0xa0,0x40,0xb0,0xa0,0x70,
+
+ 4, // 0x27 '''
+ 0x00,0x40,0x40,0x00,0x00,0x00,0x00,0x00,
+
+ 4, // 0x28 '('
+ 0x20,0x40,0x80,0x80,0x80,0x80,0x40,0x20,
+
+ 4, // 0x29 ')'
+ 0x80,0x40,0x20,0x20,0x20,0x20,0x40,0x80,
+
+ 4, // 0x2a '*'
+ 0x00,0xa0,0x40,0xe0,0x40,0xa0,0x00,0x00,
+
+ 4, // 0x2b '+'
+ 0x00,0x40,0x40,0xe0,0x40,0x40,0x00,0x00,
+
+ 4, // 0x2c ','
+ 0x00,0x00,0x00,0x00,0x00,0x40,0x40,0x80,
+
+ 4, // 0x2d '-'
+ 0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0x00,
+
+ 4, // 0x2e '.'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,
+
+ 4, // 0x2f '/'
+ 0x10,0x10,0x20,0x20,0x40,0x40,0x80,0x80,
+
+ 4, // 0x30 '0'
+ 0x00,0xe0,0xa0,0xa0,0xa0,0xa0,0xe0,0x00,
+
+ 4, // 0x31 '1'
+ 0x00,0x40,0xc0,0x40,0x40,0x40,0xe0,0x00,
+
+ 4, // 0x32 '2'
+ 0x00,0xe0,0xa0,0x20,0x40,0x80,0xe0,0x00,
+
+ 4, // 0x33 '3'
+ 0x00,0xe0,0x20,0x40,0x20,0x20,0xe0,0x00,
+
+ 4, // 0x34 '4'
+ 0x00,0x60,0xa0,0xa0,0xf0,0x20,0x20,0x00,
+
+ 4, // 0x35 '5'
+ 0x00,0xe0,0x80,0xc0,0x20,0x20,0xc0,0x00,
+
+ 4, // 0x36 '6'
+ 0x00,0x40,0x80,0xe0,0xa0,0xa0,0xe0,0x00,
+
+ 4, // 0x37 '7'
+ 0x00,0xe0,0xa0,0x20,0x40,0x40,0x40,0x00,
+
+ 4, // 0x38 '8'
+ 0x00,0xe0,0xa0,0x40,0xa0,0xa0,0xe0,0x00,
+
+ 4, // 0x39 '9'
+ 0x00,0xe0,0xa0,0xe0,0x20,0x20,0x40,0x00,
+
+ 4, // 0x3a ':'
+ 0x00,0x00,0x40,0x00,0x00,0x40,0x00,0x00,
+
+ 4, // 0x3b ';'
+ 0x00,0x00,0x40,0x00,0x00,0x40,0x40,0x80,
+
+ 4, // 0x3c '<'
+ 0x00,0x20,0x40,0x80,0x40,0x20,0x00,0x00,
+
+ 4, // 0x3d '='
+ 0x00,0x00,0xe0,0x00,0xe0,0x00,0x00,0x00,
+
+ 4, // 0x3e '>'
+ 0x00,0x80,0x40,0x20,0x40,0x80,0x00,0x00,
+
+ 4, // 0x3f '?'
+ 0x00,0x40,0xa0,0x20,0x40,0x00,0x40,0x00,
+
+ 4, // 0x40 '@'
+ 0x00,0x40,0xa0,0xe0,0xe0,0x80,0x60,0x00,
+
+ 4, // 0x41 'A'
+ 0x00,0x40,0xa0,0xa0,0xe0,0xa0,0xa0,0x00,
+
+ 4, // 0x42 'B'
+ 0x00,0xc0,0xa0,0xc0,0xa0,0xa0,0xc0,0x00,
+
+ 4, // 0x43 'C'
+ 0x00,0x40,0xa0,0x80,0x80,0xa0,0x40,0x00,
+
+ 4, // 0x44 'D'
+ 0x00,0xc0,0xa0,0xa0,0xa0,0xa0,0xc0,0x00,
+
+ 4, // 0x45 'E'
+ 0x00,0xe0,0x80,0xc0,0x80,0x80,0xe0,0x00,
+
+ 4, // 0x46 'F'
+ 0x00,0xe0,0x80,0xc0,0x80,0x80,0x80,0x00,
+
+ 4, // 0x47 'G'
+ 0x00,0x60,0x80,0xa0,0xa0,0xa0,0x40,0x00,
+
+ 4, // 0x48 'H'
+ 0x00,0xa0,0xa0,0xe0,0xa0,0xa0,0xa0,0x00,
+
+ 4, // 0x49 'I'
+ 0x00,0xe0,0x40,0x40,0x40,0x40,0xe0,0x00,
+
+ 4, // 0x4a 'J'
+ 0x00,0x20,0x20,0x20,0x20,0xa0,0x40,0x00,
+
+ 4, // 0x4b 'K'
+ 0x00,0xa0,0xa0,0xc0,0xc0,0xa0,0xa0,0x00,
+
+ 4, // 0x4c 'L'
+ 0x00,0x80,0x80,0x80,0x80,0x80,0xe0,0x00,
+
+ 4, // 0x4d 'M'
+ 0x00,0xa0,0xe0,0xa0,0xa0,0xa0,0xa0,0x00,
+
+ 4, // 0x4e 'N'
+ 0x00,0x90,0x90,0xd0,0xb0,0x90,0x90,0x00,
+
+ 4, // 0x4f 'O'
+ 0x00,0x40,0xa0,0xa0,0xa0,0xa0,0x40,0x00,
+
+ 4, // 0x50 'P'
+ 0x00,0xc0,0xa0,0xa0,0xc0,0x80,0x80,0x00,
+
+ 4, // 0x51 'Q'
+ 0x00,0x40,0xa0,0xa0,0xa0,0xa0,0x60,0x00,
+
+ 4, // 0x52 'R'
+ 0x00,0xc0,0xa0,0xa0,0xc0,0xc0,0xa0,0x00,
+
+ 4, // 0x53 'S'
+ 0x00,0x60,0x80,0x40,0x20,0x20,0xc0,0x00,
+
+ 4, // 0x54 'T'
+ 0x00,0xe0,0x40,0x40,0x40,0x40,0x40,0x00,
+
+ 4, // 0x55 'U'
+ 0x00,0xa0,0xa0,0xa0,0xa0,0xa0,0x40,0x00,
+
+ 4, // 0x56 'V'
+ 0x00,0xa0,0xa0,0xa0,0xa0,0x40,0x40,0x00,
+
+ 4, // 0x57 'W'
+ 0x00,0xa0,0xa0,0xa0,0xa0,0xe0,0xa0,0x00,
+
+ 4, // 0x58 'X'
+ 0x00,0xa0,0xa0,0x40,0xa0,0xa0,0xa0,0x00,
+
+ 4, // 0x59 'Y'
+ 0x00,0xa0,0xa0,0x40,0x40,0x40,0x40,0x00,
+
+ 4, // 0x5a 'Z'
+ 0x00,0xe0,0x20,0x40,0x40,0x80,0xe0,0x00,
+
+ 4, // 0x5b '['
+ 0xc0,0x80,0x80,0x80,0x80,0x80,0x80,0xc0,
+
+ 4, // 0x5c '\'
+ 0x80,0x80,0x40,0x40,0x20,0x20,0x10,0x10,
+
+ 4, // 0x5d ']'
+ 0xc0,0x40,0x40,0x40,0x40,0x40,0x40,0xc0,
+
+ 4, // 0x5e '^'
+ 0x00,0x40,0xa0,0x00,0x00,0x00,0x00,0x00,
+
+ 4, // 0x5f '_'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,
+
+ 4, // 0x60 '`'
+ 0x00,0x40,0x20,0x00,0x00,0x00,0x00,0x00,
+
+ 4, // 0x61 'a'
+ 0x00,0x00,0x60,0xa0,0xa0,0xa0,0x70,0x00,
+
+ 4, // 0x62 'b'
+ 0x00,0x80,0x80,0xc0,0xa0,0xa0,0xc0,0x00,
+
+ 4, // 0x63 'c'
+ 0x00,0x00,0x40,0xa0,0x80,0xa0,0x40,0x00,
+
+ 4, // 0x64 'd'
+ 0x00,0x20,0x20,0x60,0xa0,0xa0,0x60,0x00,
+
+ 4, // 0x65 'e'
+ 0x00,0x00,0x40,0xa0,0xe0,0x80,0x60,0x00,
+
+ 4, // 0x66 'f'
+ 0x00,0x20,0x40,0x40,0xe0,0x40,0x40,0x00,
+
+ 4, // 0x67 'g'
+ 0x00,0x00,0x60,0xa0,0xa0,0x60,0x20,0xc0,
+
+ 4, // 0x68 'h'
+ 0x00,0x80,0x80,0xc0,0xa0,0xa0,0xa0,0x00,
+
+ 4, // 0x69 'i'
+ 0x00,0x40,0x00,0xc0,0x40,0x40,0xe0,0x00,
+
+ 4, // 0x6a 'j'
+ 0x00,0x40,0x00,0xc0,0x40,0x40,0x40,0x80,
+
+ 4, // 0x6b 'k'
+ 0x00,0x80,0x80,0xa0,0xc0,0xc0,0xa0,0x00,
+
+ 4, // 0x6c 'l'
+ 0x00,0xc0,0x40,0x40,0x40,0x40,0xe0,0x00,
+
+ 4, // 0x6d 'm'
+ 0x00,0x00,0xa0,0xf0,0xf0,0xf0,0x90,0x00,
+
+ 4, // 0x6e 'n'
+ 0x00,0x00,0xc0,0xa0,0xa0,0xa0,0xa0,0x00,
+
+ 4, // 0x6f 'o'
+ 0x00,0x00,0x40,0xa0,0xa0,0xa0,0x40,0x00,
+
+ 4, // 0x70 'p'
+ 0x00,0x00,0xc0,0xa0,0xa0,0xc0,0x80,0x80,
+
+ 4, // 0x71 'q'
+ 0x00,0x00,0x60,0xa0,0xa0,0x60,0x20,0x20,
+
+ 4, // 0x72 'r'
+ 0x00,0x00,0xa0,0x50,0x40,0x40,0x40,0x00,
+
+ 4, // 0x73 's'
+ 0x00,0x00,0x60,0x80,0x40,0x20,0xc0,0x00,
+
+ 4, // 0x74 't'
+ 0x00,0x40,0x40,0xe0,0x40,0x40,0x20,0x00,
+
+ 4, // 0x75 'u'
+ 0x00,0x00,0xa0,0xa0,0xa0,0xa0,0x60,0x00,
+
+ 4, // 0x76 'v'
+ 0x00,0x00,0xa0,0xa0,0xa0,0x40,0x40,0x00,
+
+ 4, // 0x77 'w'
+ 0x00,0x00,0xa0,0xa0,0xa0,0xe0,0xa0,0x00,
+
+ 4, // 0x78 'x'
+ 0x00,0x00,0xa0,0xa0,0x40,0xa0,0xa0,0x00,
+
+ 4, // 0x79 'y'
+ 0x00,0x00,0xa0,0xa0,0xa0,0x60,0x20,0xc0,
+
+ 4, // 0x7a 'z'
+ 0x00,0x00,0xe0,0x20,0x40,0x80,0xe0,0x00,
+
+ 4, // 0x7b '{'
+ 0x10,0x20,0x20,0xc0,0x20,0x20,0x10,0x00,
+
+ 4, // 0x7c '|'
+ 0x00,0x40,0x40,0x40,0x00,0x40,0x40,0x40,
+
+ 4, // 0x7d '}'
+ 0x80,0x40,0x40,0x30,0x40,0x40,0x80,0x00,
+
+ 4, // 0x7e '~'
+ 0x00,0x50,0xa0,0x00,0x00,0x00,0x00,0x00,
+
+ 4, // 0x7f ''
+ 0x00,0x00,0x00,0x60,0x90,0xf0,0x00,0x00,
+ 0
+ };
+
+ const int8u gse5x7[] =
+ {
+ 7, 0, 32, 128-32,
+
+ 0x00,0x00,0x08,0x00,0x10,0x00,0x18,0x00,0x20,0x00,0x28,0x00,0x30,0x00,0x38,0x00,0x40,0x00,
+ 0x48,0x00,0x50,0x00,0x58,0x00,0x60,0x00,0x68,0x00,0x70,0x00,0x78,0x00,0x80,0x00,0x88,0x00,
+ 0x90,0x00,0x98,0x00,0xa0,0x00,0xa8,0x00,0xb0,0x00,0xb8,0x00,0xc0,0x00,0xc8,0x00,0xd0,0x00,
+ 0xd8,0x00,0xe0,0x00,0xe8,0x00,0xf0,0x00,0xf8,0x00,0x00,0x01,0x08,0x01,0x10,0x01,0x18,0x01,
+ 0x20,0x01,0x28,0x01,0x30,0x01,0x38,0x01,0x40,0x01,0x48,0x01,0x50,0x01,0x58,0x01,0x60,0x01,
+ 0x68,0x01,0x70,0x01,0x78,0x01,0x80,0x01,0x88,0x01,0x90,0x01,0x98,0x01,0xa0,0x01,0xa8,0x01,
+ 0xb0,0x01,0xb8,0x01,0xc0,0x01,0xc8,0x01,0xd0,0x01,0xd8,0x01,0xe0,0x01,0xe8,0x01,0xf0,0x01,
+ 0xf8,0x01,0x00,0x02,0x08,0x02,0x10,0x02,0x18,0x02,0x20,0x02,0x28,0x02,0x30,0x02,0x38,0x02,
+ 0x40,0x02,0x48,0x02,0x50,0x02,0x58,0x02,0x60,0x02,0x68,0x02,0x70,0x02,0x78,0x02,0x80,0x02,
+ 0x88,0x02,0x90,0x02,0x98,0x02,0xa0,0x02,0xa8,0x02,0xb0,0x02,0xb8,0x02,0xc0,0x02,0xc8,0x02,
+ 0xd0,0x02,0xd8,0x02,0xe0,0x02,0xe8,0x02,0xf0,0x02,0xf8,0x02,
+
+ 5, // 0x20 ' '
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 5, // 0x21 '!'
+ 0x00,0x20,0x20,0x20,0x00,0x20,0x00,
+
+ 5, // 0x22 '"'
+ 0x00,0x50,0x50,0x00,0x00,0x00,0x00,
+
+ 5, // 0x23 '#'
+ 0x00,0x50,0xf8,0x50,0xf8,0x50,0x00,
+
+ 5, // 0x24 '$'
+ 0x20,0x78,0xa0,0x70,0x28,0xf0,0x20,
+
+ 5, // 0x25 '%'
+ 0x00,0x88,0x10,0x20,0x40,0x88,0x00,
+
+ 5, // 0x26 '&'
+ 0x00,0x40,0xa0,0x68,0x90,0x68,0x00,
+
+ 5, // 0x27 '''
+ 0x00,0x20,0x20,0x00,0x00,0x00,0x00,
+
+ 5, // 0x28 '('
+ 0x10,0x20,0x40,0x40,0x40,0x20,0x10,
+
+ 5, // 0x29 ')'
+ 0x80,0x40,0x20,0x20,0x20,0x40,0x80,
+
+ 5, // 0x2a '*'
+ 0x00,0x20,0xa8,0x70,0xa8,0x20,0x00,
+
+ 5, // 0x2b '+'
+ 0x00,0x20,0x20,0xf8,0x20,0x20,0x00,
+
+ 5, // 0x2c ','
+ 0x00,0x00,0x00,0x00,0x20,0x20,0x40,
+
+ 5, // 0x2d '-'
+ 0x00,0x00,0x00,0xf0,0x00,0x00,0x00,
+
+ 5, // 0x2e '.'
+ 0x00,0x00,0x00,0x00,0x00,0x40,0x00,
+
+ 5, // 0x2f '/'
+ 0x00,0x08,0x10,0x20,0x40,0x80,0x00,
+
+ 5, // 0x30 '0'
+ 0x00,0x60,0x90,0x90,0x90,0x60,0x00,
+
+ 5, // 0x31 '1'
+ 0x00,0x20,0x60,0x20,0x20,0x70,0x00,
+
+ 5, // 0x32 '2'
+ 0x00,0x60,0x90,0x20,0x40,0xf0,0x00,
+
+ 5, // 0x33 '3'
+ 0x00,0xf0,0x20,0x60,0x10,0xe0,0x00,
+
+ 5, // 0x34 '4'
+ 0x00,0x30,0x50,0x90,0xf0,0x10,0x00,
+
+ 5, // 0x35 '5'
+ 0x00,0xf0,0x80,0xe0,0x10,0xe0,0x00,
+
+ 5, // 0x36 '6'
+ 0x00,0x60,0x80,0xe0,0x90,0x60,0x00,
+
+ 5, // 0x37 '7'
+ 0x00,0xf0,0x90,0x20,0x40,0x40,0x00,
+
+ 5, // 0x38 '8'
+ 0x00,0x60,0x90,0x60,0x90,0x60,0x00,
+
+ 5, // 0x39 '9'
+ 0x00,0x60,0x90,0x70,0x10,0x60,0x00,
+
+ 5, // 0x3a ':'
+ 0x00,0x00,0x20,0x00,0x20,0x00,0x00,
+
+ 5, // 0x3b ';'
+ 0x00,0x00,0x20,0x00,0x20,0x20,0x40,
+
+ 5, // 0x3c '<'
+ 0x00,0x10,0x20,0x40,0x20,0x10,0x00,
+
+ 5, // 0x3d '='
+ 0x00,0x00,0xf0,0x00,0xf0,0x00,0x00,
+
+ 5, // 0x3e '>'
+ 0x00,0x80,0x40,0x20,0x40,0x80,0x00,
+
+ 5, // 0x3f '?'
+ 0x00,0x60,0x90,0x20,0x00,0x20,0x00,
+
+ 5, // 0x40 '@'
+ 0x00,0x60,0x90,0xb0,0x80,0x70,0x00,
+
+ 5, // 0x41 'A'
+ 0x00,0x60,0x90,0xf0,0x90,0x90,0x00,
+
+ 5, // 0x42 'B'
+ 0x00,0xe0,0x90,0xe0,0x90,0xe0,0x00,
+
+ 5, // 0x43 'C'
+ 0x00,0x60,0x90,0x80,0x90,0x60,0x00,
+
+ 5, // 0x44 'D'
+ 0x00,0xe0,0x90,0x90,0x90,0xe0,0x00,
+
+ 5, // 0x45 'E'
+ 0x00,0xf0,0x80,0xe0,0x80,0xf0,0x00,
+
+ 5, // 0x46 'F'
+ 0x00,0xf0,0x80,0xe0,0x80,0x80,0x00,
+
+ 5, // 0x47 'G'
+ 0x00,0x70,0x80,0xb0,0x90,0x60,0x00,
+
+ 5, // 0x48 'H'
+ 0x00,0x90,0x90,0xf0,0x90,0x90,0x00,
+
+ 5, // 0x49 'I'
+ 0x00,0x70,0x20,0x20,0x20,0x70,0x00,
+
+ 5, // 0x4a 'J'
+ 0x00,0x70,0x20,0x20,0xa0,0x40,0x00,
+
+ 5, // 0x4b 'K'
+ 0x00,0x90,0xa0,0xc0,0xa0,0x90,0x00,
+
+ 5, // 0x4c 'L'
+ 0x00,0x80,0x80,0x80,0x80,0xf0,0x00,
+
+ 5, // 0x4d 'M'
+ 0x00,0x90,0xf0,0x90,0x90,0x90,0x00,
+
+ 5, // 0x4e 'N'
+ 0x00,0x90,0xd0,0xb0,0x90,0x90,0x00,
+
+ 5, // 0x4f 'O'
+ 0x00,0x60,0x90,0x90,0x90,0x60,0x00,
+
+ 5, // 0x50 'P'
+ 0x00,0xe0,0x90,0xe0,0x80,0x80,0x00,
+
+ 5, // 0x51 'Q'
+ 0x00,0x60,0x90,0x90,0xa0,0x50,0x00,
+
+ 5, // 0x52 'R'
+ 0x00,0xe0,0x90,0xe0,0xa0,0x90,0x00,
+
+ 5, // 0x53 'S'
+ 0x00,0x70,0x80,0x60,0x10,0xe0,0x00,
+
+ 5, // 0x54 'T'
+ 0x00,0x70,0x20,0x20,0x20,0x20,0x00,
+
+ 5, // 0x55 'U'
+ 0x00,0x90,0x90,0x90,0x90,0x60,0x00,
+
+ 5, // 0x56 'V'
+ 0x00,0x50,0x50,0x50,0x20,0x20,0x00,
+
+ 5, // 0x57 'W'
+ 0x00,0x90,0x90,0x90,0xf0,0x90,0x00,
+
+ 5, // 0x58 'X'
+ 0x00,0x90,0x90,0x60,0x90,0x90,0x00,
+
+ 5, // 0x59 'Y'
+ 0x00,0x50,0x50,0x20,0x20,0x20,0x00,
+
+ 5, // 0x5a 'Z'
+ 0x00,0xf0,0x10,0x20,0x40,0xf0,0x00,
+
+ 5, // 0x5b '['
+ 0x70,0x40,0x40,0x40,0x40,0x40,0x70,
+
+ 5, // 0x5c '\'
+ 0x00,0x80,0x40,0x20,0x10,0x08,0x00,
+
+ 5, // 0x5d ']'
+ 0xe0,0x20,0x20,0x20,0x20,0x20,0xe0,
+
+ 5, // 0x5e '^'
+ 0x00,0x20,0x50,0x00,0x00,0x00,0x00,
+
+ 5, // 0x5f '_'
+ 0x00,0x00,0x00,0x00,0x00,0xf8,0x00,
+
+ 5, // 0x60 '`'
+ 0x00,0x40,0x20,0x00,0x00,0x00,0x00,
+
+ 5, // 0x61 'a'
+ 0x00,0x00,0x60,0xa0,0xa0,0x50,0x00,
+
+ 5, // 0x62 'b'
+ 0x00,0x80,0x80,0xe0,0x90,0xe0,0x00,
+
+ 5, // 0x63 'c'
+ 0x00,0x00,0x70,0x80,0x80,0x70,0x00,
+
+ 5, // 0x64 'd'
+ 0x00,0x10,0x10,0x70,0x90,0x70,0x00,
+
+ 5, // 0x65 'e'
+ 0x00,0x00,0x60,0xf0,0x80,0x70,0x00,
+
+ 5, // 0x66 'f'
+ 0x00,0x30,0x40,0xe0,0x40,0x40,0x00,
+
+ 5, // 0x67 'g'
+ 0x00,0x00,0x70,0x90,0x70,0x10,0x60,
+
+ 5, // 0x68 'h'
+ 0x00,0x80,0x80,0xe0,0x90,0x90,0x00,
+
+ 5, // 0x69 'i'
+ 0x20,0x00,0x60,0x20,0x20,0x70,0x00,
+
+ 5, // 0x6a 'j'
+ 0x20,0x00,0x60,0x20,0x20,0xa0,0x40,
+
+ 5, // 0x6b 'k'
+ 0x80,0x80,0x90,0xa0,0xe0,0x90,0x00,
+
+ 5, // 0x6c 'l'
+ 0x00,0x60,0x20,0x20,0x20,0x70,0x00,
+
+ 5, // 0x6d 'm'
+ 0x00,0x00,0xa0,0xf0,0xf0,0x90,0x00,
+
+ 5, // 0x6e 'n'
+ 0x00,0x00,0xa0,0xd0,0x90,0x90,0x00,
+
+ 5, // 0x6f 'o'
+ 0x00,0x00,0x60,0x90,0x90,0x60,0x00,
+
+ 5, // 0x70 'p'
+ 0x00,0x00,0xe0,0x90,0xe0,0x80,0x80,
+
+ 5, // 0x71 'q'
+ 0x00,0x00,0x70,0x90,0x70,0x10,0x10,
+
+ 5, // 0x72 'r'
+ 0x00,0x00,0xe0,0x90,0x80,0x80,0x00,
+
+ 5, // 0x73 's'
+ 0x00,0x00,0x70,0xe0,0x10,0xe0,0x00,
+
+ 5, // 0x74 't'
+ 0x40,0x40,0xe0,0x40,0x40,0x70,0x00,
+
+ 5, // 0x75 'u'
+ 0x00,0x00,0x90,0x90,0x90,0x70,0x00,
+
+ 5, // 0x76 'v'
+ 0x00,0x00,0x50,0x50,0x50,0x20,0x00,
+
+ 5, // 0x77 'w'
+ 0x00,0x00,0x90,0x90,0xf0,0x90,0x00,
+
+ 5, // 0x78 'x'
+ 0x00,0x00,0x90,0x60,0x60,0x90,0x00,
+
+ 5, // 0x79 'y'
+ 0x00,0x00,0x90,0x90,0x70,0x10,0x60,
+
+ 5, // 0x7a 'z'
+ 0x00,0x00,0xf0,0x20,0x40,0xf0,0x00,
+
+ 5, // 0x7b '{'
+ 0x10,0x20,0x20,0xc0,0x20,0x20,0x10,
+
+ 5, // 0x7c '|'
+ 0x20,0x20,0x20,0x00,0x20,0x20,0x20,
+
+ 5, // 0x7d '}'
+ 0x40,0x20,0x20,0x18,0x20,0x20,0x40,
+
+ 5, // 0x7e '~'
+ 0x00,0x40,0xa8,0x10,0x00,0x00,0x00,
+
+ 5, // 0x7f ''
+ 0x00,0x00,0x20,0x50,0x88,0xf8,0x00,
+ 0
+ };
+
+ const int8u gse5x9[] =
+ {
+ 9, 0, 32, 128-32,
+
+ 0x00,0x00,0x0a,0x00,0x14,0x00,0x1e,0x00,0x28,0x00,0x32,0x00,0x3c,0x00,0x46,0x00,0x50,0x00,
+ 0x5a,0x00,0x64,0x00,0x6e,0x00,0x78,0x00,0x82,0x00,0x8c,0x00,0x96,0x00,0xa0,0x00,0xaa,0x00,
+ 0xb4,0x00,0xbe,0x00,0xc8,0x00,0xd2,0x00,0xdc,0x00,0xe6,0x00,0xf0,0x00,0xfa,0x00,0x04,0x01,
+ 0x0e,0x01,0x18,0x01,0x22,0x01,0x2c,0x01,0x36,0x01,0x40,0x01,0x4a,0x01,0x54,0x01,0x5e,0x01,
+ 0x68,0x01,0x72,0x01,0x7c,0x01,0x86,0x01,0x90,0x01,0x9a,0x01,0xa4,0x01,0xae,0x01,0xb8,0x01,
+ 0xc2,0x01,0xcc,0x01,0xd6,0x01,0xe0,0x01,0xea,0x01,0xf4,0x01,0xfe,0x01,0x08,0x02,0x12,0x02,
+ 0x1c,0x02,0x26,0x02,0x30,0x02,0x3a,0x02,0x44,0x02,0x4e,0x02,0x58,0x02,0x62,0x02,0x6c,0x02,
+ 0x76,0x02,0x80,0x02,0x8a,0x02,0x94,0x02,0x9e,0x02,0xa8,0x02,0xb2,0x02,0xbc,0x02,0xc6,0x02,
+ 0xd0,0x02,0xda,0x02,0xe4,0x02,0xee,0x02,0xf8,0x02,0x02,0x03,0x0c,0x03,0x16,0x03,0x20,0x03,
+ 0x2a,0x03,0x34,0x03,0x3e,0x03,0x48,0x03,0x52,0x03,0x5c,0x03,0x66,0x03,0x70,0x03,0x7a,0x03,
+ 0x84,0x03,0x8e,0x03,0x98,0x03,0xa2,0x03,0xac,0x03,0xb6,0x03,
+
+ 5, // 0x20 ' '
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 5, // 0x21 '!'
+ 0x00,0x20,0x20,0x20,0x20,0x20,0x00,0x20,0x00,
+
+ 5, // 0x22 '"'
+ 0x00,0x50,0x50,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 5, // 0x23 '#'
+ 0x00,0x50,0x50,0xf8,0x50,0xf8,0x50,0x50,0x00,
+
+ 5, // 0x24 '$'
+ 0x00,0x20,0x78,0xa0,0x70,0x28,0xf0,0x20,0x00,
+
+ 5, // 0x25 '%'
+ 0x00,0xc8,0xc8,0x10,0x20,0x40,0x98,0x98,0x00,
+
+ 5, // 0x26 '&'
+ 0x00,0x40,0xa0,0xa0,0x40,0xa8,0x90,0x68,0x00,
+
+ 5, // 0x27 '''
+ 0x00,0x20,0x20,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 5, // 0x28 '('
+ 0x10,0x20,0x40,0x40,0x40,0x40,0x40,0x20,0x10,
+
+ 5, // 0x29 ')'
+ 0x80,0x40,0x20,0x20,0x20,0x20,0x20,0x40,0x80,
+
+ 5, // 0x2a '*'
+ 0x00,0x00,0x20,0xa8,0x70,0xa8,0x20,0x00,0x00,
+
+ 5, // 0x2b '+'
+ 0x00,0x00,0x20,0x20,0xf8,0x20,0x20,0x00,0x00,
+
+ 5, // 0x2c ','
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x40,
+
+ 5, // 0x2d '-'
+ 0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,
+
+ 5, // 0x2e '.'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,
+
+ 5, // 0x2f '/'
+ 0x00,0x10,0x10,0x20,0x20,0x40,0x40,0x80,0x80,
+
+ 5, // 0x30 '0'
+ 0x00,0x60,0x90,0xb0,0xd0,0x90,0x90,0x60,0x00,
+
+ 5, // 0x31 '1'
+ 0x00,0x20,0x60,0x20,0x20,0x20,0x20,0x70,0x00,
+
+ 5, // 0x32 '2'
+ 0x00,0x60,0x90,0x10,0x20,0x40,0x80,0xf0,0x00,
+
+ 5, // 0x33 '3'
+ 0x00,0xf0,0x10,0x20,0x60,0x10,0x90,0x60,0x00,
+
+ 5, // 0x34 '4'
+ 0x00,0x30,0x50,0x90,0x90,0xf8,0x10,0x10,0x00,
+
+ 5, // 0x35 '5'
+ 0x00,0xf0,0x80,0xe0,0x10,0x10,0x10,0xe0,0x00,
+
+ 5, // 0x36 '6'
+ 0x00,0x60,0x80,0xe0,0x90,0x90,0x90,0x60,0x00,
+
+ 5, // 0x37 '7'
+ 0x00,0xf0,0x90,0x10,0x20,0x40,0x40,0x40,0x00,
+
+ 5, // 0x38 '8'
+ 0x00,0x60,0x90,0x90,0x60,0x90,0x90,0x60,0x00,
+
+ 5, // 0x39 '9'
+ 0x00,0x60,0x90,0x90,0x70,0x10,0x90,0x60,0x00,
+
+ 5, // 0x3a ':'
+ 0x00,0x00,0x00,0x20,0x00,0x00,0x20,0x00,0x00,
+
+ 5, // 0x3b ';'
+ 0x00,0x00,0x00,0x20,0x00,0x00,0x20,0x20,0x40,
+
+ 5, // 0x3c '<'
+ 0x00,0x10,0x20,0x40,0x80,0x40,0x20,0x10,0x00,
+
+ 5, // 0x3d '='
+ 0x00,0x00,0x00,0xf0,0x00,0xf0,0x00,0x00,0x00,
+
+ 5, // 0x3e '>'
+ 0x00,0x80,0x40,0x20,0x10,0x20,0x40,0x80,0x00,
+
+ 5, // 0x3f '?'
+ 0x00,0x60,0x90,0x10,0x20,0x20,0x00,0x20,0x00,
+
+ 5, // 0x40 '@'
+ 0x00,0x60,0x90,0xb0,0xb0,0xb0,0x80,0x70,0x00,
+
+ 5, // 0x41 'A'
+ 0x00,0x60,0x90,0x90,0xf0,0x90,0x90,0x90,0x00,
+
+ 5, // 0x42 'B'
+ 0x00,0xe0,0x90,0x90,0xe0,0x90,0x90,0xe0,0x00,
+
+ 5, // 0x43 'C'
+ 0x00,0x60,0x90,0x80,0x80,0x80,0x90,0x60,0x00,
+
+ 5, // 0x44 'D'
+ 0x00,0xe0,0x90,0x90,0x90,0x90,0x90,0xe0,0x00,
+
+ 5, // 0x45 'E'
+ 0x00,0xf0,0x80,0x80,0xe0,0x80,0x80,0xf0,0x00,
+
+ 5, // 0x46 'F'
+ 0x00,0xf0,0x80,0x80,0xe0,0x80,0x80,0x80,0x00,
+
+ 5, // 0x47 'G'
+ 0x00,0x60,0x90,0x80,0xb0,0x90,0x90,0x60,0x00,
+
+ 5, // 0x48 'H'
+ 0x00,0x90,0x90,0x90,0xf0,0x90,0x90,0x90,0x00,
+
+ 5, // 0x49 'I'
+ 0x00,0x70,0x20,0x20,0x20,0x20,0x20,0x70,0x00,
+
+ 5, // 0x4a 'J'
+ 0x00,0x70,0x20,0x20,0x20,0x20,0xa0,0x40,0x00,
+
+ 5, // 0x4b 'K'
+ 0x00,0x90,0x90,0xa0,0xc0,0xa0,0x90,0x90,0x00,
+
+ 5, // 0x4c 'L'
+ 0x00,0x80,0x80,0x80,0x80,0x80,0x80,0xf0,0x00,
+
+ 5, // 0x4d 'M'
+ 0x00,0x90,0xf0,0x90,0x90,0x90,0x90,0x90,0x00,
+
+ 5, // 0x4e 'N'
+ 0x00,0x90,0x90,0xd0,0xb0,0x90,0x90,0x90,0x00,
+
+ 5, // 0x4f 'O'
+ 0x00,0x60,0x90,0x90,0x90,0x90,0x90,0x60,0x00,
+
+ 5, // 0x50 'P'
+ 0x00,0xe0,0x90,0x90,0xe0,0x80,0x80,0x80,0x00,
+
+ 5, // 0x51 'Q'
+ 0x00,0x60,0x90,0x90,0x90,0x90,0xa0,0x50,0x00,
+
+ 5, // 0x52 'R'
+ 0x00,0xe0,0x90,0x90,0xe0,0xa0,0x90,0x90,0x00,
+
+ 5, // 0x53 'S'
+ 0x00,0x60,0x90,0x80,0x60,0x10,0x90,0x60,0x00,
+
+ 5, // 0x54 'T'
+ 0x00,0x70,0x20,0x20,0x20,0x20,0x20,0x20,0x00,
+
+ 5, // 0x55 'U'
+ 0x00,0x90,0x90,0x90,0x90,0x90,0x90,0x60,0x00,
+
+ 5, // 0x56 'V'
+ 0x00,0x50,0x50,0x50,0x50,0x50,0x20,0x20,0x00,
+
+ 5, // 0x57 'W'
+ 0x00,0x90,0x90,0x90,0x90,0x90,0xf0,0x90,0x00,
+
+ 5, // 0x58 'X'
+ 0x00,0x90,0x90,0x60,0x60,0x90,0x90,0x90,0x00,
+
+ 5, // 0x59 'Y'
+ 0x00,0x50,0x50,0x50,0x20,0x20,0x20,0x20,0x00,
+
+ 5, // 0x5a 'Z'
+ 0x00,0xf0,0x10,0x10,0x20,0x40,0x80,0xf0,0x00,
+
+ 5, // 0x5b '['
+ 0x70,0x40,0x40,0x40,0x40,0x40,0x40,0x70,0x00,
+
+ 5, // 0x5c '\'
+ 0x80,0x80,0x40,0x40,0x20,0x20,0x10,0x10,0x00,
+
+ 5, // 0x5d ']'
+ 0xe0,0x20,0x20,0x20,0x20,0x20,0x20,0xe0,0x00,
+
+ 5, // 0x5e '^'
+ 0x00,0x20,0x50,0x88,0x00,0x00,0x00,0x00,0x00,
+
+ 5, // 0x5f '_'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0x00,
+
+ 5, // 0x60 '`'
+ 0x00,0x40,0x20,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 5, // 0x61 'a'
+ 0x00,0x00,0x60,0x10,0x70,0x90,0x90,0x70,0x00,
+
+ 5, // 0x62 'b'
+ 0x00,0x80,0x80,0xe0,0x90,0x90,0x90,0xe0,0x00,
+
+ 5, // 0x63 'c'
+ 0x00,0x00,0x60,0x90,0x80,0x80,0x90,0x60,0x00,
+
+ 5, // 0x64 'd'
+ 0x00,0x10,0x10,0x70,0x90,0x90,0x90,0x70,0x00,
+
+ 5, // 0x65 'e'
+ 0x00,0x00,0x60,0x90,0xf0,0x80,0x80,0x70,0x00,
+
+ 5, // 0x66 'f'
+ 0x00,0x30,0x40,0x40,0xe0,0x40,0x40,0x40,0x00,
+
+ 5, // 0x67 'g'
+ 0x00,0x00,0x70,0x90,0x90,0x70,0x10,0x90,0x60,
+
+ 5, // 0x68 'h'
+ 0x00,0x80,0x80,0xe0,0x90,0x90,0x90,0x90,0x00,
+
+ 5, // 0x69 'i'
+ 0x00,0x20,0x00,0x60,0x20,0x20,0x20,0x70,0x00,
+
+ 5, // 0x6a 'j'
+ 0x00,0x20,0x00,0x60,0x20,0x20,0x20,0xa0,0x40,
+
+ 5, // 0x6b 'k'
+ 0x00,0x80,0x80,0x90,0xa0,0xc0,0xa0,0x90,0x00,
+
+ 5, // 0x6c 'l'
+ 0x00,0x60,0x20,0x20,0x20,0x20,0x20,0x70,0x00,
+
+ 5, // 0x6d 'm'
+ 0x00,0x00,0xa0,0xf0,0xf0,0xf0,0x90,0x90,0x00,
+
+ 5, // 0x6e 'n'
+ 0x00,0x00,0xa0,0xd0,0x90,0x90,0x90,0x90,0x00,
+
+ 5, // 0x6f 'o'
+ 0x00,0x00,0x60,0x90,0x90,0x90,0x90,0x60,0x00,
+
+ 5, // 0x70 'p'
+ 0x00,0x00,0xe0,0x90,0x90,0x90,0xe0,0x80,0x80,
+
+ 5, // 0x71 'q'
+ 0x00,0x00,0x70,0x90,0x90,0x90,0x70,0x10,0x10,
+
+ 5, // 0x72 'r'
+ 0x00,0x00,0xe0,0x90,0x80,0x80,0x80,0x80,0x00,
+
+ 5, // 0x73 's'
+ 0x00,0x00,0x60,0x90,0x40,0x20,0x90,0x60,0x00,
+
+ 5, // 0x74 't'
+ 0x00,0x40,0x40,0xe0,0x40,0x40,0x50,0x20,0x00,
+
+ 5, // 0x75 'u'
+ 0x00,0x00,0x90,0x90,0x90,0x90,0x90,0x70,0x00,
+
+ 5, // 0x76 'v'
+ 0x00,0x00,0x50,0x50,0x50,0x50,0x20,0x20,0x00,
+
+ 5, // 0x77 'w'
+ 0x00,0x00,0x90,0x90,0x90,0x90,0xf0,0x90,0x00,
+
+ 5, // 0x78 'x'
+ 0x00,0x00,0x90,0x90,0x60,0x60,0x90,0x90,0x00,
+
+ 5, // 0x79 'y'
+ 0x00,0x00,0x90,0x90,0x90,0x90,0x70,0x10,0xe0,
+
+ 5, // 0x7a 'z'
+ 0x00,0x00,0xf0,0x10,0x20,0x40,0x80,0xf0,0x00,
+
+ 5, // 0x7b '{'
+ 0x10,0x20,0x20,0x20,0xc0,0x20,0x20,0x20,0x10,
+
+ 5, // 0x7c '|'
+ 0x00,0x20,0x20,0x20,0x00,0x20,0x20,0x20,0x00,
+
+ 5, // 0x7d '}'
+ 0x80,0x40,0x40,0x40,0x30,0x40,0x40,0x40,0x80,
+
+ 5, // 0x7e '~'
+ 0x00,0x40,0xa8,0x10,0x00,0x00,0x00,0x00,0x00,
+
+ 5, // 0x7f ''
+ 0x00,0x00,0x00,0x20,0x50,0x88,0xf8,0x00,0x00,
+ 0
+ };
+
+ const int8u gse6x12[] =
+ {
+ 12, 0, 32, 128-32,
+
+ 0x00,0x00,0x0d,0x00,0x1a,0x00,0x27,0x00,0x34,0x00,0x41,0x00,0x4e,0x00,0x5b,0x00,0x68,0x00,
+ 0x75,0x00,0x82,0x00,0x8f,0x00,0x9c,0x00,0xa9,0x00,0xb6,0x00,0xc3,0x00,0xd0,0x00,0xdd,0x00,
+ 0xea,0x00,0xf7,0x00,0x04,0x01,0x11,0x01,0x1e,0x01,0x2b,0x01,0x38,0x01,0x45,0x01,0x52,0x01,
+ 0x5f,0x01,0x6c,0x01,0x79,0x01,0x86,0x01,0x93,0x01,0xa0,0x01,0xad,0x01,0xba,0x01,0xc7,0x01,
+ 0xd4,0x01,0xe1,0x01,0xee,0x01,0xfb,0x01,0x08,0x02,0x15,0x02,0x22,0x02,0x2f,0x02,0x3c,0x02,
+ 0x49,0x02,0x56,0x02,0x63,0x02,0x70,0x02,0x7d,0x02,0x8a,0x02,0x97,0x02,0xa4,0x02,0xb1,0x02,
+ 0xbe,0x02,0xcb,0x02,0xd8,0x02,0xe5,0x02,0xf2,0x02,0xff,0x02,0x0c,0x03,0x19,0x03,0x26,0x03,
+ 0x33,0x03,0x40,0x03,0x4d,0x03,0x5a,0x03,0x67,0x03,0x74,0x03,0x81,0x03,0x8e,0x03,0x9b,0x03,
+ 0xa8,0x03,0xb5,0x03,0xc2,0x03,0xcf,0x03,0xdc,0x03,0xe9,0x03,0xf6,0x03,0x03,0x04,0x10,0x04,
+ 0x1d,0x04,0x2a,0x04,0x37,0x04,0x44,0x04,0x51,0x04,0x5e,0x04,0x6b,0x04,0x78,0x04,0x85,0x04,
+ 0x92,0x04,0x9f,0x04,0xac,0x04,0xb9,0x04,0xc6,0x04,0xd3,0x04,
+
+ 6, // 0x20 ' '
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 6, // 0x21 '!'
+ 0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x20,0x00,0x00,
+
+ 6, // 0x22 '"'
+ 0x00,0x50,0x50,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 6, // 0x23 '#'
+ 0x00,0x50,0x50,0xf8,0x50,0x50,0x50,0xf8,0x50,0x50,0x00,0x00,
+
+ 6, // 0x24 '$'
+ 0x00,0x20,0x70,0xa8,0xa0,0x70,0x28,0xa8,0x70,0x20,0x00,0x00,
+
+ 6, // 0x25 '%'
+ 0x00,0xc8,0xd8,0x10,0x30,0x20,0x60,0x40,0xd8,0x98,0x00,0x00,
+
+ 6, // 0x26 '&'
+ 0x00,0x60,0x90,0x90,0x90,0x60,0xa8,0x90,0x90,0x68,0x00,0x00,
+
+ 6, // 0x27 '''
+ 0x00,0x20,0x20,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 6, // 0x28 '('
+ 0x00,0x10,0x20,0x40,0x40,0x40,0x40,0x40,0x20,0x10,0x00,0x00,
+
+ 6, // 0x29 ')'
+ 0x00,0x40,0x20,0x10,0x10,0x10,0x10,0x10,0x20,0x40,0x00,0x00,
+
+ 6, // 0x2a '*'
+ 0x00,0x00,0x00,0x50,0x20,0xf8,0x20,0x50,0x00,0x00,0x00,0x00,
+
+ 6, // 0x2b '+'
+ 0x00,0x00,0x20,0x20,0x20,0xf8,0x20,0x20,0x20,0x00,0x00,0x00,
+
+ 6, // 0x2c ','
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x20,0x40,
+
+ 6, // 0x2d '-'
+ 0x00,0x00,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 6, // 0x2e '.'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,
+
+ 6, // 0x2f '/'
+ 0x08,0x08,0x10,0x10,0x20,0x20,0x40,0x40,0x80,0x80,0x00,0x00,
+
+ 6, // 0x30 '0'
+ 0x00,0x70,0x88,0x88,0x98,0xa8,0xc8,0x88,0x88,0x70,0x00,0x00,
+
+ 6, // 0x31 '1'
+ 0x00,0x20,0x20,0x60,0x20,0x20,0x20,0x20,0x20,0x70,0x00,0x00,
+
+ 6, // 0x32 '2'
+ 0x00,0x70,0x88,0x88,0x08,0x10,0x20,0x40,0x80,0xf8,0x00,0x00,
+
+ 6, // 0x33 '3'
+ 0x00,0xf8,0x10,0x20,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,
+
+ 6, // 0x34 '4'
+ 0x00,0x10,0x20,0x40,0x90,0x90,0xf8,0x10,0x10,0x10,0x00,0x00,
+
+ 6, // 0x35 '5'
+ 0x00,0xf8,0x80,0x80,0xf0,0x08,0x08,0x08,0x88,0x70,0x00,0x00,
+
+ 6, // 0x36 '6'
+ 0x00,0x70,0x88,0x80,0x80,0xf0,0x88,0x88,0x88,0x70,0x00,0x00,
+
+ 6, // 0x37 '7'
+ 0x00,0xf8,0x88,0x08,0x08,0x10,0x20,0x20,0x20,0x20,0x00,0x00,
+
+ 6, // 0x38 '8'
+ 0x00,0x70,0x88,0x88,0x88,0x70,0x88,0x88,0x88,0x70,0x00,0x00,
+
+ 6, // 0x39 '9'
+ 0x00,0x70,0x88,0x88,0x88,0x78,0x08,0x08,0x88,0x70,0x00,0x00,
+
+ 6, // 0x3a ':'
+ 0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+
+ 6, // 0x3b ';'
+ 0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x20,0x20,0x20,0x40,
+
+ 6, // 0x3c '<'
+ 0x00,0x08,0x10,0x20,0x40,0x80,0x40,0x20,0x10,0x08,0x00,0x00,
+
+ 6, // 0x3d '='
+ 0x00,0x00,0x00,0x00,0xf8,0x00,0xf8,0x00,0x00,0x00,0x00,0x00,
+
+ 6, // 0x3e '>'
+ 0x00,0x80,0x40,0x20,0x10,0x08,0x10,0x20,0x40,0x80,0x00,0x00,
+
+ 6, // 0x3f '?'
+ 0x00,0x70,0x88,0x88,0x08,0x10,0x20,0x20,0x00,0x20,0x00,0x00,
+
+ 6, // 0x40 '@'
+ 0x00,0x70,0x88,0x88,0xb8,0xb8,0xb0,0x80,0x88,0x70,0x00,0x00,
+
+ 6, // 0x41 'A'
+ 0x00,0x20,0x50,0x88,0x88,0x88,0xf8,0x88,0x88,0x88,0x00,0x00,
+
+ 6, // 0x42 'B'
+ 0x00,0xf0,0x88,0x88,0x88,0xf0,0x88,0x88,0x88,0xf0,0x00,0x00,
+
+ 6, // 0x43 'C'
+ 0x00,0x70,0x88,0x88,0x80,0x80,0x80,0x88,0x88,0x70,0x00,0x00,
+
+ 6, // 0x44 'D'
+ 0x00,0xe0,0x90,0x88,0x88,0x88,0x88,0x88,0x90,0xe0,0x00,0x00,
+
+ 6, // 0x45 'E'
+ 0x00,0xf8,0x80,0x80,0x80,0xf0,0x80,0x80,0x80,0xf8,0x00,0x00,
+
+ 6, // 0x46 'F'
+ 0x00,0xf8,0x80,0x80,0x80,0xf0,0x80,0x80,0x80,0x80,0x00,0x00,
+
+ 6, // 0x47 'G'
+ 0x00,0x70,0x88,0x80,0x80,0xb8,0x88,0x88,0x88,0x70,0x00,0x00,
+
+ 6, // 0x48 'H'
+ 0x00,0x88,0x88,0x88,0x88,0xf8,0x88,0x88,0x88,0x88,0x00,0x00,
+
+ 6, // 0x49 'I'
+ 0x00,0x70,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x70,0x00,0x00,
+
+ 6, // 0x4a 'J'
+ 0x00,0x38,0x10,0x10,0x10,0x10,0x10,0x10,0x90,0x60,0x00,0x00,
+
+ 6, // 0x4b 'K'
+ 0x00,0x88,0x88,0x90,0xa0,0xc0,0xa0,0x90,0x88,0x88,0x00,0x00,
+
+ 6, // 0x4c 'L'
+ 0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xf8,0x00,0x00,
+
+ 6, // 0x4d 'M'
+ 0x00,0x88,0x88,0xd8,0xa8,0x88,0x88,0x88,0x88,0x88,0x00,0x00,
+
+ 6, // 0x4e 'N'
+ 0x00,0x88,0x88,0xc8,0xa8,0x98,0x88,0x88,0x88,0x88,0x00,0x00,
+
+ 6, // 0x4f 'O'
+ 0x00,0x70,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x70,0x00,0x00,
+
+ 6, // 0x50 'P'
+ 0x00,0xf0,0x88,0x88,0x88,0xf0,0x80,0x80,0x80,0x80,0x00,0x00,
+
+ 6, // 0x51 'Q'
+ 0x00,0x70,0x88,0x88,0x88,0x88,0x88,0xa8,0x90,0x68,0x00,0x00,
+
+ 6, // 0x52 'R'
+ 0x00,0xf0,0x88,0x88,0x88,0x88,0xf0,0xa0,0x90,0x88,0x00,0x00,
+
+ 6, // 0x53 'S'
+ 0x00,0x70,0x88,0x80,0x80,0x70,0x08,0x08,0x88,0x70,0x00,0x00,
+
+ 6, // 0x54 'T'
+ 0x00,0xf8,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x00,
+
+ 6, // 0x55 'U'
+ 0x00,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x70,0x00,0x00,
+
+ 6, // 0x56 'V'
+ 0x00,0x88,0x88,0x88,0x88,0x88,0x50,0x50,0x20,0x20,0x00,0x00,
+
+ 6, // 0x57 'W'
+ 0x00,0x88,0x88,0x88,0x88,0x88,0xa8,0xa8,0xd8,0x88,0x00,0x00,
+
+ 6, // 0x58 'X'
+ 0x00,0x88,0x88,0x88,0x50,0x20,0x50,0x88,0x88,0x88,0x00,0x00,
+
+ 6, // 0x59 'Y'
+ 0x00,0x88,0x88,0x88,0x50,0x20,0x20,0x20,0x20,0x20,0x00,0x00,
+
+ 6, // 0x5a 'Z'
+ 0x00,0xf8,0x08,0x08,0x10,0x20,0x40,0x80,0x80,0xf8,0x00,0x00,
+
+ 6, // 0x5b '['
+ 0x70,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x70,0x00,
+
+ 6, // 0x5c '\'
+ 0x80,0x80,0x40,0x40,0x20,0x20,0x10,0x10,0x08,0x08,0x00,0x00,
+
+ 6, // 0x5d ']'
+ 0x70,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x70,0x00,
+
+ 6, // 0x5e '^'
+ 0x00,0x00,0x20,0x50,0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 6, // 0x5f '_'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0x00,0x00,
+
+ 6, // 0x60 '`'
+ 0x00,0x40,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 6, // 0x61 'a'
+ 0x00,0x00,0x00,0x70,0x88,0x08,0x78,0x88,0x88,0x78,0x00,0x00,
+
+ 6, // 0x62 'b'
+ 0x00,0x80,0x80,0x80,0xf0,0x88,0x88,0x88,0x88,0xf0,0x00,0x00,
+
+ 6, // 0x63 'c'
+ 0x00,0x00,0x00,0x70,0x88,0x80,0x80,0x80,0x88,0x70,0x00,0x00,
+
+ 6, // 0x64 'd'
+ 0x00,0x08,0x08,0x08,0x78,0x88,0x88,0x88,0x88,0x78,0x00,0x00,
+
+ 6, // 0x65 'e'
+ 0x00,0x00,0x00,0x70,0x88,0x88,0xf8,0x80,0x80,0x78,0x00,0x00,
+
+ 6, // 0x66 'f'
+ 0x00,0x18,0x20,0x20,0xf8,0x20,0x20,0x20,0x20,0x20,0x00,0x00,
+
+ 6, // 0x67 'g'
+ 0x00,0x00,0x00,0x78,0x88,0x88,0x88,0x88,0x78,0x08,0x08,0xf0,
+
+ 6, // 0x68 'h'
+ 0x00,0x80,0x80,0x80,0xf0,0x88,0x88,0x88,0x88,0x88,0x00,0x00,
+
+ 6, // 0x69 'i'
+ 0x00,0x20,0x00,0x00,0x60,0x20,0x20,0x20,0x20,0x70,0x00,0x00,
+
+ 6, // 0x6a 'j'
+ 0x00,0x10,0x00,0x00,0x30,0x10,0x10,0x10,0x10,0x10,0x90,0x60,
+
+ 6, // 0x6b 'k'
+ 0x00,0x80,0x80,0x80,0x88,0x90,0xa0,0xd0,0x88,0x88,0x00,0x00,
+
+ 6, // 0x6c 'l'
+ 0x00,0x60,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x70,0x00,0x00,
+
+ 6, // 0x6d 'm'
+ 0x00,0x00,0x00,0xd0,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0x00,0x00,
+
+ 6, // 0x6e 'n'
+ 0x00,0x00,0x00,0xb0,0xc8,0x88,0x88,0x88,0x88,0x88,0x00,0x00,
+
+ 6, // 0x6f 'o'
+ 0x00,0x00,0x00,0x70,0x88,0x88,0x88,0x88,0x88,0x70,0x00,0x00,
+
+ 6, // 0x70 'p'
+ 0x00,0x00,0x00,0xf0,0x88,0x88,0x88,0x88,0xf0,0x80,0x80,0x80,
+
+ 6, // 0x71 'q'
+ 0x00,0x00,0x00,0x78,0x88,0x88,0x88,0x88,0x78,0x08,0x08,0x08,
+
+ 6, // 0x72 'r'
+ 0x00,0x00,0x00,0xb0,0xc8,0x88,0x80,0x80,0x80,0x80,0x00,0x00,
+
+ 6, // 0x73 's'
+ 0x00,0x00,0x00,0x70,0x88,0x80,0x70,0x08,0x88,0x70,0x00,0x00,
+
+ 6, // 0x74 't'
+ 0x00,0x40,0x40,0x40,0xe0,0x40,0x40,0x40,0x48,0x30,0x00,0x00,
+
+ 6, // 0x75 'u'
+ 0x00,0x00,0x00,0x88,0x88,0x88,0x88,0x88,0x88,0x78,0x00,0x00,
+
+ 6, // 0x76 'v'
+ 0x00,0x00,0x00,0x88,0x88,0x88,0x50,0x50,0x20,0x20,0x00,0x00,
+
+ 6, // 0x77 'w'
+ 0x00,0x00,0x00,0x88,0x88,0x88,0xa8,0xa8,0xd8,0x88,0x00,0x00,
+
+ 6, // 0x78 'x'
+ 0x00,0x00,0x00,0x88,0x88,0x50,0x20,0x50,0x88,0x88,0x00,0x00,
+
+ 6, // 0x79 'y'
+ 0x00,0x00,0x00,0x88,0x88,0x88,0x88,0x88,0x78,0x08,0x10,0xe0,
+
+ 6, // 0x7a 'z'
+ 0x00,0x00,0x00,0xf8,0x08,0x10,0x20,0x40,0x80,0xf8,0x00,0x00,
+
+ 6, // 0x7b '{'
+ 0x18,0x20,0x20,0x20,0x20,0xc0,0x20,0x20,0x20,0x20,0x18,0x00,
+
+ 6, // 0x7c '|'
+ 0x00,0x20,0x20,0x20,0x20,0x00,0x20,0x20,0x20,0x20,0x00,0x00,
+
+ 6, // 0x7d '}'
+ 0xc0,0x20,0x20,0x20,0x20,0x18,0x20,0x20,0x20,0x20,0xc0,0x00,
+
+ 6, // 0x7e '~'
+ 0x00,0x00,0x40,0xa8,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 6, // 0x7f ''
+ 0x00,0x00,0x00,0x00,0x20,0x50,0x88,0xf8,0x00,0x00,0x00,0x00,
+ 0
+ };
+
+ const int8u gse6x9[] =
+ {
+ 9, 0, 32, 128-32,
+
+ 0x00,0x00,0x0a,0x00,0x14,0x00,0x1e,0x00,0x28,0x00,0x32,0x00,0x3c,0x00,0x46,0x00,0x50,0x00,
+ 0x5a,0x00,0x64,0x00,0x6e,0x00,0x78,0x00,0x82,0x00,0x8c,0x00,0x96,0x00,0xa0,0x00,0xaa,0x00,
+ 0xb4,0x00,0xbe,0x00,0xc8,0x00,0xd2,0x00,0xdc,0x00,0xe6,0x00,0xf0,0x00,0xfa,0x00,0x04,0x01,
+ 0x0e,0x01,0x18,0x01,0x22,0x01,0x2c,0x01,0x36,0x01,0x40,0x01,0x4a,0x01,0x54,0x01,0x5e,0x01,
+ 0x68,0x01,0x72,0x01,0x7c,0x01,0x86,0x01,0x90,0x01,0x9a,0x01,0xa4,0x01,0xae,0x01,0xb8,0x01,
+ 0xc2,0x01,0xcc,0x01,0xd6,0x01,0xe0,0x01,0xea,0x01,0xf4,0x01,0xfe,0x01,0x08,0x02,0x12,0x02,
+ 0x1c,0x02,0x26,0x02,0x30,0x02,0x3a,0x02,0x44,0x02,0x4e,0x02,0x58,0x02,0x62,0x02,0x6c,0x02,
+ 0x76,0x02,0x80,0x02,0x8a,0x02,0x94,0x02,0x9e,0x02,0xa8,0x02,0xb2,0x02,0xbc,0x02,0xc6,0x02,
+ 0xd0,0x02,0xda,0x02,0xe4,0x02,0xee,0x02,0xf8,0x02,0x02,0x03,0x0c,0x03,0x16,0x03,0x20,0x03,
+ 0x2a,0x03,0x34,0x03,0x3e,0x03,0x48,0x03,0x52,0x03,0x5c,0x03,0x66,0x03,0x70,0x03,0x7a,0x03,
+ 0x84,0x03,0x8e,0x03,0x98,0x03,0xa2,0x03,0xac,0x03,0xb6,0x03,
+
+ 6, // 0x20 ' '
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 6, // 0x21 '!'
+ 0x00,0x20,0x20,0x20,0x20,0x20,0x00,0x20,0x00,
+
+ 6, // 0x22 '"'
+ 0x00,0x50,0x50,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 6, // 0x23 '#'
+ 0x00,0x50,0x50,0xf8,0x50,0xf8,0x50,0x50,0x00,
+
+ 6, // 0x24 '$'
+ 0x00,0x70,0xa8,0xa0,0x70,0x28,0xa8,0x70,0x00,
+
+ 6, // 0x25 '%'
+ 0x00,0xc8,0xc8,0x10,0x20,0x40,0x98,0x98,0x00,
+
+ 6, // 0x26 '&'
+ 0x00,0x60,0x90,0x90,0x60,0xa8,0x90,0x68,0x00,
+
+ 6, // 0x27 '''
+ 0x00,0x20,0x20,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 6, // 0x28 '('
+ 0x10,0x20,0x40,0x40,0x40,0x40,0x40,0x20,0x10,
+
+ 6, // 0x29 ')'
+ 0x40,0x20,0x10,0x10,0x10,0x10,0x10,0x20,0x40,
+
+ 6, // 0x2a '*'
+ 0x00,0x00,0x20,0xa8,0x70,0xa8,0x20,0x00,0x00,
+
+ 6, // 0x2b '+'
+ 0x00,0x00,0x20,0x20,0xf8,0x20,0x20,0x00,0x00,
+
+ 6, // 0x2c ','
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x40,
+
+ 6, // 0x2d '-'
+ 0x00,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0x00,
+
+ 6, // 0x2e '.'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,
+
+ 6, // 0x2f '/'
+ 0x00,0x08,0x08,0x10,0x20,0x40,0x80,0x80,0x00,
+
+ 6, // 0x30 '0'
+ 0x00,0x70,0x88,0x98,0xa8,0xc8,0x88,0x70,0x00,
+
+ 6, // 0x31 '1'
+ 0x00,0x20,0x60,0x20,0x20,0x20,0x20,0x70,0x00,
+
+ 6, // 0x32 '2'
+ 0x00,0x70,0x88,0x08,0x10,0x20,0x40,0xf8,0x00,
+
+ 6, // 0x33 '3'
+ 0x00,0xf8,0x10,0x20,0x70,0x08,0x88,0x70,0x00,
+
+ 6, // 0x34 '4'
+ 0x00,0x10,0x20,0x40,0x90,0xf8,0x10,0x10,0x00,
+
+ 6, // 0x35 '5'
+ 0x00,0xf8,0x80,0xf0,0x08,0x08,0x88,0x70,0x00,
+
+ 6, // 0x36 '6'
+ 0x00,0x70,0x88,0x80,0xf0,0x88,0x88,0x70,0x00,
+
+ 6, // 0x37 '7'
+ 0x00,0xf8,0x08,0x08,0x10,0x20,0x40,0x40,0x00,
+
+ 6, // 0x38 '8'
+ 0x00,0x70,0x88,0x88,0x70,0x88,0x88,0x70,0x00,
+
+ 6, // 0x39 '9'
+ 0x00,0x70,0x88,0x88,0x78,0x08,0x88,0x70,0x00,
+
+ 6, // 0x3a ':'
+ 0x00,0x00,0x00,0x20,0x00,0x00,0x20,0x00,0x00,
+
+ 6, // 0x3b ';'
+ 0x00,0x00,0x00,0x20,0x00,0x00,0x20,0x20,0x40,
+
+ 6, // 0x3c '<'
+ 0x00,0x08,0x10,0x20,0x40,0x20,0x10,0x08,0x00,
+
+ 6, // 0x3d '='
+ 0x00,0x00,0x00,0xf8,0x00,0xf8,0x00,0x00,0x00,
+
+ 6, // 0x3e '>'
+ 0x00,0x80,0x40,0x20,0x10,0x20,0x40,0x80,0x00,
+
+ 6, // 0x3f '?'
+ 0x00,0x70,0x88,0x08,0x10,0x20,0x00,0x20,0x00,
+
+ 6, // 0x40 '@'
+ 0x00,0x70,0x88,0x88,0xb8,0xb8,0x80,0x70,0x00,
+
+ 6, // 0x41 'A'
+ 0x00,0x20,0x50,0x88,0x88,0xf8,0x88,0x88,0x00,
+
+ 6, // 0x42 'B'
+ 0x00,0xf0,0x88,0x88,0xf0,0x88,0x88,0xf0,0x00,
+
+ 6, // 0x43 'C'
+ 0x00,0x70,0x88,0x80,0x80,0x80,0x88,0x70,0x00,
+
+ 6, // 0x44 'D'
+ 0x00,0xe0,0x90,0x88,0x88,0x88,0x90,0xe0,0x00,
+
+ 6, // 0x45 'E'
+ 0x00,0xf8,0x80,0x80,0xf0,0x80,0x80,0xf8,0x00,
+
+ 6, // 0x46 'F'
+ 0x00,0xf8,0x80,0x80,0xf0,0x80,0x80,0x80,0x00,
+
+ 6, // 0x47 'G'
+ 0x00,0x70,0x88,0x80,0xb8,0x88,0x88,0x70,0x00,
+
+ 6, // 0x48 'H'
+ 0x00,0x88,0x88,0x88,0xf8,0x88,0x88,0x88,0x00,
+
+ 6, // 0x49 'I'
+ 0x00,0x70,0x20,0x20,0x20,0x20,0x20,0x70,0x00,
+
+ 6, // 0x4a 'J'
+ 0x00,0x38,0x10,0x10,0x10,0x10,0x90,0x60,0x00,
+
+ 6, // 0x4b 'K'
+ 0x00,0x88,0x90,0xa0,0xc0,0xa0,0x90,0x88,0x00,
+
+ 6, // 0x4c 'L'
+ 0x00,0x80,0x80,0x80,0x80,0x80,0x80,0xf8,0x00,
+
+ 6, // 0x4d 'M'
+ 0x00,0x88,0xd8,0xa8,0x88,0x88,0x88,0x88,0x00,
+
+ 6, // 0x4e 'N'
+ 0x00,0x88,0x88,0xc8,0xa8,0x98,0x88,0x88,0x00,
+
+ 6, // 0x4f 'O'
+ 0x00,0x70,0x88,0x88,0x88,0x88,0x88,0x70,0x00,
+
+ 6, // 0x50 'P'
+ 0x00,0xf0,0x88,0x88,0xf0,0x80,0x80,0x80,0x00,
+
+ 6, // 0x51 'Q'
+ 0x00,0x70,0x88,0x88,0x88,0xa8,0x90,0x68,0x00,
+
+ 6, // 0x52 'R'
+ 0x00,0xf0,0x88,0x88,0x88,0xf0,0x90,0x88,0x00,
+
+ 6, // 0x53 'S'
+ 0x00,0x70,0x88,0x80,0x70,0x08,0x88,0x70,0x00,
+
+ 6, // 0x54 'T'
+ 0x00,0xf8,0x20,0x20,0x20,0x20,0x20,0x20,0x00,
+
+ 6, // 0x55 'U'
+ 0x00,0x88,0x88,0x88,0x88,0x88,0x88,0x70,0x00,
+
+ 6, // 0x56 'V'
+ 0x00,0x88,0x88,0x88,0x50,0x50,0x20,0x20,0x00,
+
+ 6, // 0x57 'W'
+ 0x00,0x88,0x88,0x88,0xa8,0xa8,0xd8,0x88,0x00,
+
+ 6, // 0x58 'X'
+ 0x00,0x88,0x88,0x50,0x20,0x50,0x88,0x88,0x00,
+
+ 6, // 0x59 'Y'
+ 0x00,0x88,0x88,0x50,0x20,0x20,0x20,0x20,0x00,
+
+ 6, // 0x5a 'Z'
+ 0x00,0xf8,0x08,0x10,0x20,0x40,0x80,0xf8,0x00,
+
+ 6, // 0x5b '['
+ 0x70,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x70,
+
+ 6, // 0x5c '\'
+ 0x00,0x80,0x80,0x40,0x20,0x10,0x08,0x08,0x00,
+
+ 6, // 0x5d ']'
+ 0x70,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x70,
+
+ 6, // 0x5e '^'
+ 0x00,0x00,0x20,0x50,0x88,0x00,0x00,0x00,0x00,
+
+ 6, // 0x5f '_'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0x00,
+
+ 6, // 0x60 '`'
+ 0x00,0x40,0x20,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 6, // 0x61 'a'
+ 0x00,0x00,0x00,0x70,0x08,0x78,0x88,0x78,0x00,
+
+ 6, // 0x62 'b'
+ 0x00,0x80,0x80,0xf0,0x88,0x88,0x88,0xf0,0x00,
+
+ 6, // 0x63 'c'
+ 0x00,0x00,0x00,0x70,0x88,0x80,0x88,0x70,0x00,
+
+ 6, // 0x64 'd'
+ 0x00,0x08,0x08,0x78,0x88,0x88,0x88,0x78,0x00,
+
+ 6, // 0x65 'e'
+ 0x00,0x00,0x00,0x70,0x88,0xf8,0x80,0x78,0x00,
+
+ 6, // 0x66 'f'
+ 0x00,0x18,0x20,0x20,0xf8,0x20,0x20,0x20,0x00,
+
+ 6, // 0x67 'g'
+ 0x00,0x00,0x00,0x78,0x88,0x88,0x78,0x08,0x70,
+
+ 6, // 0x68 'h'
+ 0x00,0x80,0x80,0xf0,0x88,0x88,0x88,0x88,0x00,
+
+ 6, // 0x69 'i'
+ 0x00,0x20,0x00,0x60,0x20,0x20,0x20,0x70,0x00,
+
+ 6, // 0x6a 'j'
+ 0x00,0x10,0x00,0x30,0x10,0x10,0x10,0x90,0x60,
+
+ 6, // 0x6b 'k'
+ 0x00,0x00,0x80,0x88,0x90,0xa0,0xd0,0x88,0x00,
+
+ 6, // 0x6c 'l'
+ 0x00,0x60,0x20,0x20,0x20,0x20,0x20,0x70,0x00,
+
+ 6, // 0x6d 'm'
+ 0x00,0x00,0x00,0xd0,0xa8,0xa8,0xa8,0xa8,0x00,
+
+ 6, // 0x6e 'n'
+ 0x00,0x00,0x00,0xb0,0xc8,0x88,0x88,0x88,0x00,
+
+ 6, // 0x6f 'o'
+ 0x00,0x00,0x00,0x70,0x88,0x88,0x88,0x70,0x00,
+
+ 6, // 0x70 'p'
+ 0x00,0x00,0x00,0xf0,0x88,0x88,0xf0,0x80,0x80,
+
+ 6, // 0x71 'q'
+ 0x00,0x00,0x00,0x78,0x88,0x88,0x78,0x08,0x08,
+
+ 6, // 0x72 'r'
+ 0x00,0x00,0x00,0xb8,0xc0,0x80,0x80,0x80,0x00,
+
+ 6, // 0x73 's'
+ 0x00,0x00,0x00,0x78,0x80,0x70,0x08,0xf0,0x00,
+
+ 6, // 0x74 't'
+ 0x00,0x40,0x40,0xe0,0x40,0x40,0x48,0x30,0x00,
+
+ 6, // 0x75 'u'
+ 0x00,0x00,0x00,0x88,0x88,0x88,0x88,0x78,0x00,
+
+ 6, // 0x76 'v'
+ 0x00,0x00,0x00,0x88,0x88,0x88,0x50,0x20,0x00,
+
+ 6, // 0x77 'w'
+ 0x00,0x00,0x00,0x88,0x88,0xa8,0xd8,0x88,0x00,
+
+ 6, // 0x78 'x'
+ 0x00,0x00,0x00,0x88,0x50,0x20,0x50,0x88,0x00,
+
+ 6, // 0x79 'y'
+ 0x00,0x00,0x00,0x88,0x88,0x88,0x78,0x08,0x70,
+
+ 6, // 0x7a 'z'
+ 0x00,0x00,0x00,0xf8,0x10,0x20,0x40,0xf8,0x00,
+
+ 6, // 0x7b '{'
+ 0x18,0x20,0x20,0x20,0xc0,0x20,0x20,0x20,0x18,
+
+ 6, // 0x7c '|'
+ 0x00,0x20,0x20,0x20,0x00,0x20,0x20,0x20,0x00,
+
+ 6, // 0x7d '}'
+ 0xc0,0x20,0x20,0x20,0x18,0x20,0x20,0x20,0xc0,
+
+ 6, // 0x7e '~'
+ 0x00,0x40,0xa8,0x10,0x00,0x00,0x00,0x00,0x00,
+
+ 6, // 0x7f ''
+ 0x00,0x00,0x00,0x20,0x50,0x88,0xf8,0x00,0x00,
+ 0
+ };
+
+ const int8u gse7x11[] =
+ {
+ 11, 0, 32, 128-32,
+
+ 0x00,0x00,0x0c,0x00,0x18,0x00,0x24,0x00,0x30,0x00,0x3c,0x00,0x48,0x00,0x54,0x00,0x60,0x00,
+ 0x6c,0x00,0x78,0x00,0x84,0x00,0x90,0x00,0x9c,0x00,0xa8,0x00,0xb4,0x00,0xc0,0x00,0xcc,0x00,
+ 0xd8,0x00,0xe4,0x00,0xf0,0x00,0xfc,0x00,0x08,0x01,0x14,0x01,0x20,0x01,0x2c,0x01,0x38,0x01,
+ 0x44,0x01,0x50,0x01,0x5c,0x01,0x68,0x01,0x74,0x01,0x80,0x01,0x8c,0x01,0x98,0x01,0xa4,0x01,
+ 0xb0,0x01,0xbc,0x01,0xc8,0x01,0xd4,0x01,0xe0,0x01,0xec,0x01,0xf8,0x01,0x04,0x02,0x10,0x02,
+ 0x1c,0x02,0x28,0x02,0x34,0x02,0x40,0x02,0x4c,0x02,0x58,0x02,0x64,0x02,0x70,0x02,0x7c,0x02,
+ 0x88,0x02,0x94,0x02,0xa0,0x02,0xac,0x02,0xb8,0x02,0xc4,0x02,0xd0,0x02,0xdc,0x02,0xe8,0x02,
+ 0xf4,0x02,0x00,0x03,0x0c,0x03,0x18,0x03,0x24,0x03,0x30,0x03,0x3c,0x03,0x48,0x03,0x54,0x03,
+ 0x60,0x03,0x6c,0x03,0x78,0x03,0x84,0x03,0x90,0x03,0x9c,0x03,0xa8,0x03,0xb4,0x03,0xc0,0x03,
+ 0xcc,0x03,0xd8,0x03,0xe4,0x03,0xf0,0x03,0xfc,0x03,0x08,0x04,0x14,0x04,0x20,0x04,0x2c,0x04,
+ 0x38,0x04,0x44,0x04,0x50,0x04,0x5c,0x04,0x68,0x04,0x74,0x04,
+
+ 7, // 0x20 ' '
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x21 '!'
+ 0x00,0x10,0x38,0x38,0x38,0x10,0x10,0x00,0x10,0x00,0x00,
+
+ 7, // 0x22 '"'
+ 0x00,0x00,0x24,0x24,0x24,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x23 '#'
+ 0x00,0x48,0x48,0xfc,0x48,0x48,0xfc,0x48,0x48,0x00,0x00,
+
+ 7, // 0x24 '$'
+ 0x00,0x10,0x38,0x54,0x50,0x38,0x14,0x54,0x38,0x10,0x00,
+
+ 7, // 0x25 '%'
+ 0x00,0x00,0x42,0xa4,0x48,0x10,0x24,0x4a,0x84,0x00,0x00,
+
+ 7, // 0x26 '&'
+ 0x00,0x30,0x48,0x48,0x30,0x60,0x94,0x98,0x6c,0x00,0x00,
+
+ 7, // 0x27 '''
+ 0x00,0x20,0x20,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x28 '('
+ 0x00,0x04,0x08,0x10,0x10,0x10,0x10,0x08,0x04,0x00,0x00,
+
+ 7, // 0x29 ')'
+ 0x00,0x40,0x20,0x10,0x10,0x10,0x10,0x20,0x40,0x00,0x00,
+
+ 7, // 0x2a '*'
+ 0x00,0x00,0x00,0x20,0xa8,0x70,0xa8,0x20,0x00,0x00,0x00,
+
+ 7, // 0x2b '+'
+ 0x00,0x00,0x00,0x10,0x10,0x7c,0x10,0x10,0x00,0x00,0x00,
+
+ 7, // 0x2c ','
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x30,0x60,
+
+ 7, // 0x2d '-'
+ 0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x2e '.'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,
+
+ 7, // 0x2f '/'
+ 0x00,0x08,0x08,0x10,0x10,0x20,0x20,0x40,0x40,0x00,0x00,
+
+ 7, // 0x30 '0'
+ 0x00,0x38,0x44,0x4c,0x54,0x64,0x44,0x44,0x38,0x00,0x00,
+
+ 7, // 0x31 '1'
+ 0x00,0x10,0x30,0x10,0x10,0x10,0x10,0x10,0x7c,0x00,0x00,
+
+ 7, // 0x32 '2'
+ 0x00,0x38,0x44,0x04,0x08,0x10,0x20,0x44,0x7c,0x00,0x00,
+
+ 7, // 0x33 '3'
+ 0x00,0x7c,0x48,0x10,0x38,0x04,0x04,0x44,0x38,0x00,0x00,
+
+ 7, // 0x34 '4'
+ 0x00,0x08,0x10,0x20,0x48,0x48,0x7c,0x08,0x1c,0x00,0x00,
+
+ 7, // 0x35 '5'
+ 0x00,0x7c,0x40,0x40,0x78,0x04,0x04,0x44,0x38,0x00,0x00,
+
+ 7, // 0x36 '6'
+ 0x00,0x18,0x20,0x40,0x78,0x44,0x44,0x44,0x38,0x00,0x00,
+
+ 7, // 0x37 '7'
+ 0x00,0x7c,0x44,0x04,0x08,0x10,0x10,0x10,0x10,0x00,0x00,
+
+ 7, // 0x38 '8'
+ 0x00,0x38,0x44,0x44,0x38,0x44,0x44,0x44,0x38,0x00,0x00,
+
+ 7, // 0x39 '9'
+ 0x00,0x38,0x44,0x44,0x44,0x3c,0x04,0x08,0x30,0x00,0x00,
+
+ 7, // 0x3a ':'
+ 0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+
+ 7, // 0x3b ';'
+ 0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x30,0x30,0x60,0x00,
+
+ 7, // 0x3c '<'
+ 0x00,0x00,0x04,0x08,0x10,0x20,0x10,0x08,0x04,0x00,0x00,
+
+ 7, // 0x3d '='
+ 0x00,0x00,0x00,0x00,0xfc,0x00,0xfc,0x00,0x00,0x00,0x00,
+
+ 7, // 0x3e '>'
+ 0x00,0x00,0x40,0x20,0x10,0x08,0x10,0x20,0x40,0x00,0x00,
+
+ 7, // 0x3f '?'
+ 0x00,0x70,0x88,0x88,0x10,0x20,0x20,0x00,0x20,0x00,0x00,
+
+ 7, // 0x40 '@'
+ 0x00,0x30,0x48,0x04,0x34,0x54,0x54,0x54,0x28,0x00,0x00,
+
+ 7, // 0x41 'A'
+ 0x00,0x10,0x28,0x44,0x44,0x7c,0x44,0x44,0x44,0x00,0x00,
+
+ 7, // 0x42 'B'
+ 0x00,0x78,0x44,0x44,0x78,0x44,0x44,0x44,0x78,0x00,0x00,
+
+ 7, // 0x43 'C'
+ 0x00,0x38,0x44,0x40,0x40,0x40,0x40,0x44,0x38,0x00,0x00,
+
+ 7, // 0x44 'D'
+ 0x00,0x70,0x48,0x44,0x44,0x44,0x44,0x48,0x70,0x00,0x00,
+
+ 7, // 0x45 'E'
+ 0x00,0x7c,0x40,0x40,0x70,0x40,0x40,0x40,0x7c,0x00,0x00,
+
+ 7, // 0x46 'F'
+ 0x00,0x7c,0x40,0x40,0x70,0x40,0x40,0x40,0x40,0x00,0x00,
+
+ 7, // 0x47 'G'
+ 0x00,0x38,0x44,0x40,0x40,0x5c,0x44,0x44,0x38,0x00,0x00,
+
+ 7, // 0x48 'H'
+ 0x00,0x44,0x44,0x44,0x7c,0x44,0x44,0x44,0x44,0x00,0x00,
+
+ 7, // 0x49 'I'
+ 0x00,0x38,0x10,0x10,0x10,0x10,0x10,0x10,0x38,0x00,0x00,
+
+ 7, // 0x4a 'J'
+ 0x00,0x1c,0x08,0x08,0x08,0x08,0x08,0x48,0x30,0x00,0x00,
+
+ 7, // 0x4b 'K'
+ 0x00,0x44,0x48,0x50,0x60,0x50,0x48,0x44,0x44,0x00,0x00,
+
+ 7, // 0x4c 'L'
+ 0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x7c,0x00,0x00,
+
+ 7, // 0x4d 'M'
+ 0x00,0x44,0x6c,0x54,0x54,0x44,0x44,0x44,0x44,0x00,0x00,
+
+ 7, // 0x4e 'N'
+ 0x00,0x44,0x44,0x64,0x54,0x4c,0x44,0x44,0x44,0x00,0x00,
+
+ 7, // 0x4f 'O'
+ 0x00,0x38,0x44,0x44,0x44,0x44,0x44,0x44,0x38,0x00,0x00,
+
+ 7, // 0x50 'P'
+ 0x00,0x78,0x44,0x44,0x44,0x78,0x40,0x40,0x40,0x00,0x00,
+
+ 7, // 0x51 'Q'
+ 0x00,0x38,0x44,0x44,0x44,0x44,0x54,0x48,0x34,0x00,0x00,
+
+ 7, // 0x52 'R'
+ 0x00,0x78,0x44,0x44,0x44,0x78,0x50,0x48,0x44,0x00,0x00,
+
+ 7, // 0x53 'S'
+ 0x00,0x38,0x44,0x40,0x38,0x04,0x44,0x44,0x38,0x00,0x00,
+
+ 7, // 0x54 'T'
+ 0x00,0x7c,0x54,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00,
+
+ 7, // 0x55 'U'
+ 0x00,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x38,0x00,0x00,
+
+ 7, // 0x56 'V'
+ 0x00,0x44,0x44,0x44,0x44,0x28,0x28,0x10,0x10,0x00,0x00,
+
+ 7, // 0x57 'W'
+ 0x00,0x44,0x44,0x44,0x44,0x54,0x54,0x6c,0x44,0x00,0x00,
+
+ 7, // 0x58 'X'
+ 0x00,0x44,0x44,0x28,0x10,0x28,0x44,0x44,0x44,0x00,0x00,
+
+ 7, // 0x59 'Y'
+ 0x00,0x44,0x44,0x44,0x28,0x10,0x10,0x10,0x38,0x00,0x00,
+
+ 7, // 0x5a 'Z'
+ 0x00,0x7c,0x04,0x08,0x10,0x20,0x40,0x44,0x7c,0x00,0x00,
+
+ 7, // 0x5b '['
+ 0x00,0x38,0x20,0x20,0x20,0x20,0x20,0x20,0x38,0x00,0x00,
+
+ 7, // 0x5c '\'
+ 0x00,0x40,0x40,0x20,0x20,0x10,0x10,0x08,0x08,0x00,0x00,
+
+ 7, // 0x5d ']'
+ 0x00,0x38,0x08,0x08,0x08,0x08,0x08,0x08,0x38,0x00,0x00,
+
+ 7, // 0x5e '^'
+ 0x00,0x10,0x28,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x5f '_'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,
+
+ 7, // 0x60 '`'
+ 0x00,0x20,0x20,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x61 'a'
+ 0x00,0x00,0x00,0x38,0x04,0x3c,0x44,0x44,0x3c,0x00,0x00,
+
+ 7, // 0x62 'b'
+ 0x00,0x40,0x40,0x78,0x44,0x44,0x44,0x44,0x78,0x00,0x00,
+
+ 7, // 0x63 'c'
+ 0x00,0x00,0x00,0x38,0x44,0x40,0x40,0x44,0x38,0x00,0x00,
+
+ 7, // 0x64 'd'
+ 0x00,0x04,0x04,0x3c,0x44,0x44,0x44,0x44,0x3c,0x00,0x00,
+
+ 7, // 0x65 'e'
+ 0x00,0x00,0x00,0x38,0x44,0x7c,0x40,0x44,0x38,0x00,0x00,
+
+ 7, // 0x66 'f'
+ 0x00,0x18,0x24,0x20,0x70,0x20,0x20,0x20,0x70,0x00,0x00,
+
+ 7, // 0x67 'g'
+ 0x00,0x00,0x00,0x3c,0x44,0x44,0x44,0x3c,0x04,0x44,0x38,
+
+ 7, // 0x68 'h'
+ 0x00,0x40,0x40,0x40,0x58,0x64,0x44,0x44,0x44,0x00,0x00,
+
+ 7, // 0x69 'i'
+ 0x00,0x10,0x00,0x30,0x10,0x10,0x10,0x10,0x38,0x00,0x00,
+
+ 7, // 0x6a 'j'
+ 0x00,0x08,0x00,0x18,0x08,0x08,0x08,0x08,0x48,0x30,0x00,
+
+ 7, // 0x6b 'k'
+ 0x00,0x40,0x40,0x44,0x48,0x50,0x68,0x44,0x44,0x00,0x00,
+
+ 7, // 0x6c 'l'
+ 0x00,0x30,0x10,0x10,0x10,0x10,0x10,0x10,0x38,0x00,0x00,
+
+ 7, // 0x6d 'm'
+ 0x00,0x00,0x00,0xa8,0x54,0x54,0x54,0x54,0x54,0x00,0x00,
+
+ 7, // 0x6e 'n'
+ 0x00,0x00,0x00,0xb8,0x44,0x44,0x44,0x44,0x44,0x00,0x00,
+
+ 7, // 0x6f 'o'
+ 0x00,0x00,0x00,0x38,0x44,0x44,0x44,0x44,0x38,0x00,0x00,
+
+ 7, // 0x70 'p'
+ 0x00,0x00,0x00,0x78,0x44,0x44,0x44,0x44,0x78,0x40,0x40,
+
+ 7, // 0x71 'q'
+ 0x00,0x00,0x00,0x3c,0x44,0x44,0x44,0x44,0x3c,0x04,0x04,
+
+ 7, // 0x72 'r'
+ 0x00,0x00,0x00,0x58,0x64,0x44,0x40,0x40,0x40,0x00,0x00,
+
+ 7, // 0x73 's'
+ 0x00,0x00,0x00,0x3c,0x40,0x38,0x04,0x04,0x78,0x00,0x00,
+
+ 7, // 0x74 't'
+ 0x00,0x20,0x20,0x70,0x20,0x20,0x20,0x24,0x18,0x00,0x00,
+
+ 7, // 0x75 'u'
+ 0x00,0x00,0x00,0x44,0x44,0x44,0x44,0x44,0x3a,0x00,0x00,
+
+ 7, // 0x76 'v'
+ 0x00,0x00,0x00,0x44,0x44,0x44,0x44,0x28,0x10,0x00,0x00,
+
+ 7, // 0x77 'w'
+ 0x00,0x00,0x00,0x44,0x44,0x54,0x54,0x6c,0x44,0x00,0x00,
+
+ 7, // 0x78 'x'
+ 0x00,0x00,0x00,0x44,0x28,0x10,0x28,0x44,0x44,0x00,0x00,
+
+ 7, // 0x79 'y'
+ 0x00,0x00,0x00,0x44,0x44,0x44,0x3c,0x04,0x08,0x30,0x00,
+
+ 7, // 0x7a 'z'
+ 0x00,0x00,0x00,0x7c,0x08,0x10,0x20,0x44,0x7c,0x00,0x00,
+
+ 7, // 0x7b '{'
+ 0x00,0x0c,0x10,0x10,0x10,0x60,0x10,0x10,0x0c,0x00,0x00,
+
+ 7, // 0x7c '|'
+ 0x00,0x20,0x20,0x20,0x00,0x20,0x20,0x20,0x20,0x00,0x00,
+
+ 7, // 0x7d '}'
+ 0x00,0x60,0x10,0x10,0x10,0x0c,0x10,0x10,0x60,0x00,0x00,
+
+ 7, // 0x7e '~'
+ 0x00,0x00,0x64,0x98,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x7f ''
+ 0x00,0x00,0x00,0x10,0x28,0x44,0x44,0x7c,0x00,0x00,0x00,
+ 0
+ };
+
+ const int8u gse7x11_bold[] =
+ {
+ 11, 0, 32, 128-32,
+
+ 0x00,0x00,0x0c,0x00,0x18,0x00,0x24,0x00,0x30,0x00,0x3c,0x00,0x48,0x00,0x54,0x00,0x60,0x00,
+ 0x6c,0x00,0x78,0x00,0x84,0x00,0x90,0x00,0x9c,0x00,0xa8,0x00,0xb4,0x00,0xc0,0x00,0xcc,0x00,
+ 0xd8,0x00,0xe4,0x00,0xf0,0x00,0xfc,0x00,0x08,0x01,0x14,0x01,0x20,0x01,0x2c,0x01,0x38,0x01,
+ 0x44,0x01,0x50,0x01,0x5c,0x01,0x68,0x01,0x74,0x01,0x80,0x01,0x8c,0x01,0x98,0x01,0xa4,0x01,
+ 0xb0,0x01,0xbc,0x01,0xc8,0x01,0xd4,0x01,0xe0,0x01,0xec,0x01,0xf8,0x01,0x04,0x02,0x10,0x02,
+ 0x1c,0x02,0x28,0x02,0x34,0x02,0x40,0x02,0x4c,0x02,0x58,0x02,0x64,0x02,0x70,0x02,0x7c,0x02,
+ 0x88,0x02,0x94,0x02,0xa0,0x02,0xac,0x02,0xb8,0x02,0xc4,0x02,0xd0,0x02,0xdc,0x02,0xe8,0x02,
+ 0xf4,0x02,0x00,0x03,0x0c,0x03,0x18,0x03,0x24,0x03,0x30,0x03,0x3c,0x03,0x48,0x03,0x54,0x03,
+ 0x60,0x03,0x6c,0x03,0x78,0x03,0x84,0x03,0x90,0x03,0x9c,0x03,0xa8,0x03,0xb4,0x03,0xc0,0x03,
+ 0xcc,0x03,0xd8,0x03,0xe4,0x03,0xf0,0x03,0xfc,0x03,0x08,0x04,0x14,0x04,0x20,0x04,0x2c,0x04,
+ 0x38,0x04,0x44,0x04,0x50,0x04,0x5c,0x04,0x68,0x04,0x74,0x04,
+
+ 7, // 0x20 ' '
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x21 '!'
+ 0x00,0x30,0x30,0x30,0x30,0x30,0x00,0x30,0x30,0x00,0x00,
+
+ 7, // 0x22 '"'
+ 0x00,0x6c,0x6c,0x28,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x23 '#'
+ 0x00,0x48,0x48,0xfc,0x48,0x48,0xfc,0x48,0x48,0x00,0x00,
+
+ 7, // 0x24 '$'
+ 0x30,0x30,0x78,0xcc,0xc0,0x78,0x0c,0xcc,0x78,0x30,0x30,
+
+ 7, // 0x25 '%'
+ 0x00,0x00,0xc4,0x0c,0x18,0x30,0x60,0xc0,0x8c,0x00,0x00,
+
+ 7, // 0x26 '&'
+ 0x00,0x30,0x58,0x58,0x30,0x74,0xdc,0xd8,0x6c,0x00,0x00,
+
+ 7, // 0x27 '''
+ 0x00,0x30,0x30,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x28 '('
+ 0x00,0x0c,0x18,0x30,0x30,0x30,0x30,0x18,0x0c,0x00,0x00,
+
+ 7, // 0x29 ')'
+ 0x00,0xc0,0x60,0x30,0x30,0x30,0x30,0x60,0xc0,0x00,0x00,
+
+ 7, // 0x2a '*'
+ 0x00,0x00,0x00,0x20,0xa8,0x70,0xa8,0x20,0x00,0x00,0x00,
+
+ 7, // 0x2b '+'
+ 0x00,0x00,0x00,0x30,0x30,0xfc,0x30,0x30,0x00,0x00,0x00,
+
+ 7, // 0x2c ','
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x60,0x00,
+
+ 7, // 0x2d '-'
+ 0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x2e '.'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,
+
+ 7, // 0x2f '/'
+ 0x00,0x0c,0x0c,0x18,0x18,0x30,0x30,0x60,0x60,0x00,0x00,
+
+ 7, // 0x30 '0'
+ 0x00,0x78,0xcc,0xcc,0xdc,0xec,0xcc,0xcc,0x78,0x00,0x00,
+
+ 7, // 0x31 '1'
+ 0x00,0x30,0x70,0xf0,0x30,0x30,0x30,0x30,0xfc,0x00,0x00,
+
+ 7, // 0x32 '2'
+ 0x00,0x78,0xcc,0xcc,0x18,0x30,0x60,0xcc,0xfc,0x00,0x00,
+
+ 7, // 0x33 '3'
+ 0x00,0xfc,0x98,0x30,0x78,0x0c,0x0c,0xcc,0x78,0x00,0x00,
+
+ 7, // 0x34 '4'
+ 0x00,0x18,0x30,0x68,0xd8,0xd8,0xfc,0x18,0x3c,0x00,0x00,
+
+ 7, // 0x35 '5'
+ 0x00,0xfc,0xc0,0xc0,0xf8,0x0c,0x0c,0xcc,0x78,0x00,0x00,
+
+ 7, // 0x36 '6'
+ 0x00,0x38,0x60,0xc0,0xf8,0xcc,0xcc,0xcc,0x78,0x00,0x00,
+
+ 7, // 0x37 '7'
+ 0x00,0xfc,0x8c,0x0c,0x18,0x30,0x30,0x30,0x30,0x00,0x00,
+
+ 7, // 0x38 '8'
+ 0x00,0x78,0xcc,0xcc,0x78,0xcc,0xcc,0xcc,0x78,0x00,0x00,
+
+ 7, // 0x39 '9'
+ 0x00,0x78,0xcc,0xcc,0xcc,0x7c,0x0c,0x18,0x70,0x00,0x00,
+
+ 7, // 0x3a ':'
+ 0x00,0x00,0x30,0x30,0x00,0x00,0x30,0x30,0x00,0x00,0x00,
+
+ 7, // 0x3b ';'
+ 0x00,0x00,0x30,0x30,0x00,0x00,0x30,0x30,0x30,0x60,0x00,
+
+ 7, // 0x3c '<'
+ 0x00,0x00,0x0c,0x18,0x30,0x60,0x30,0x18,0x0c,0x00,0x00,
+
+ 7, // 0x3d '='
+ 0x00,0x00,0x00,0x00,0xfc,0x00,0xfc,0x00,0x00,0x00,0x00,
+
+ 7, // 0x3e '>'
+ 0x00,0x00,0x60,0x30,0x18,0x0c,0x18,0x30,0x60,0x00,0x00,
+
+ 7, // 0x3f '?'
+ 0x00,0x78,0xcc,0xcc,0x18,0x30,0x30,0x00,0x30,0x00,0x00,
+
+ 7, // 0x40 '@'
+ 0x00,0x70,0x88,0x04,0x74,0xb4,0xb4,0xb4,0x68,0x00,0x00,
+
+ 7, // 0x41 'A'
+ 0x00,0x30,0x78,0xcc,0xcc,0xfc,0xcc,0xcc,0xcc,0x00,0x00,
+
+ 7, // 0x42 'B'
+ 0x00,0xf8,0xcc,0xcc,0xf8,0xcc,0xcc,0xcc,0xf8,0x00,0x00,
+
+ 7, // 0x43 'C'
+ 0x00,0x78,0xcc,0xc0,0xc0,0xc0,0xc0,0xcc,0x78,0x00,0x00,
+
+ 7, // 0x44 'D'
+ 0x00,0xf0,0xd8,0xcc,0xcc,0xcc,0xcc,0xd8,0xf0,0x00,0x00,
+
+ 7, // 0x45 'E'
+ 0x00,0xfc,0xc4,0xd0,0xf0,0xd0,0xc0,0xc4,0xfc,0x00,0x00,
+
+ 7, // 0x46 'F'
+ 0x00,0xfc,0xc4,0xd0,0xf0,0xd0,0xc0,0xc0,0xc0,0x00,0x00,
+
+ 7, // 0x47 'G'
+ 0x00,0x78,0xcc,0xc0,0xc0,0xdc,0xcc,0xcc,0x78,0x00,0x00,
+
+ 7, // 0x48 'H'
+ 0x00,0xcc,0xcc,0xcc,0xfc,0xcc,0xcc,0xcc,0xcc,0x00,0x00,
+
+ 7, // 0x49 'I'
+ 0x00,0x78,0x30,0x30,0x30,0x30,0x30,0x30,0x78,0x00,0x00,
+
+ 7, // 0x4a 'J'
+ 0x00,0x3c,0x18,0x18,0x18,0x18,0xd8,0xd8,0x70,0x00,0x00,
+
+ 7, // 0x4b 'K'
+ 0x00,0xcc,0xcc,0xd8,0xf0,0xd8,0xcc,0xcc,0xcc,0x00,0x00,
+
+ 7, // 0x4c 'L'
+ 0x00,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc4,0xfc,0x00,0x00,
+
+ 7, // 0x4d 'M'
+ 0x00,0x84,0xcc,0xfc,0xb4,0xcc,0xcc,0xcc,0xcc,0x00,0x00,
+
+ 7, // 0x4e 'N'
+ 0x00,0xcc,0xcc,0xec,0xfc,0xdc,0xcc,0xcc,0xcc,0x00,0x00,
+
+ 7, // 0x4f 'O'
+ 0x00,0x78,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0x78,0x00,0x00,
+
+ 7, // 0x50 'P'
+ 0x00,0xf8,0xcc,0xcc,0xcc,0xf8,0xc0,0xc0,0xc0,0x00,0x00,
+
+ 7, // 0x51 'Q'
+ 0x00,0x78,0xcc,0xcc,0xcc,0xcc,0xdc,0x78,0x18,0x0c,0x00,
+
+ 7, // 0x52 'R'
+ 0x00,0xf8,0xcc,0xcc,0xcc,0xf8,0xd8,0xcc,0xcc,0x00,0x00,
+
+ 7, // 0x53 'S'
+ 0x00,0x78,0xcc,0xe0,0x70,0x38,0x1c,0xcc,0x78,0x00,0x00,
+
+ 7, // 0x54 'T'
+ 0x00,0xfc,0xb4,0x30,0x30,0x30,0x30,0x30,0x30,0x00,0x00,
+
+ 7, // 0x55 'U'
+ 0x00,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0x78,0x00,0x00,
+
+ 7, // 0x56 'V'
+ 0x00,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0x78,0x30,0x00,0x00,
+
+ 7, // 0x57 'W'
+ 0x00,0xcc,0xcc,0xcc,0xcc,0xb4,0xfc,0xcc,0x84,0x00,0x00,
+
+ 7, // 0x58 'X'
+ 0x00,0xcc,0xcc,0x78,0x30,0x78,0xcc,0xcc,0xcc,0x00,0x00,
+
+ 7, // 0x59 'Y'
+ 0x00,0xcc,0xcc,0xcc,0x78,0x30,0x30,0x30,0x78,0x00,0x00,
+
+ 7, // 0x5a 'Z'
+ 0x00,0xfc,0x8c,0x18,0x30,0x60,0xc0,0xc4,0xfc,0x00,0x00,
+
+ 7, // 0x5b '['
+ 0x00,0x78,0x60,0x60,0x60,0x60,0x60,0x60,0x78,0x00,0x00,
+
+ 7, // 0x5c '\'
+ 0x00,0x60,0x60,0x30,0x30,0x18,0x18,0x0c,0x0c,0x00,0x00,
+
+ 7, // 0x5d ']'
+ 0x00,0x78,0x18,0x18,0x18,0x18,0x18,0x18,0x78,0x00,0x00,
+
+ 7, // 0x5e '^'
+ 0x00,0x10,0x38,0x6c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x5f '_'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,
+
+ 7, // 0x60 '`'
+ 0x00,0x30,0x30,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x61 'a'
+ 0x00,0x00,0x00,0x70,0x18,0x78,0xd8,0xd8,0x6c,0x00,0x00,
+
+ 7, // 0x62 'b'
+ 0x00,0x60,0x60,0x60,0x78,0x6c,0x6c,0x6c,0x78,0x00,0x00,
+
+ 7, // 0x63 'c'
+ 0x00,0x00,0x00,0x78,0xcc,0xc0,0xc0,0xcc,0x78,0x00,0x00,
+
+ 7, // 0x64 'd'
+ 0x00,0x18,0x18,0x18,0x78,0xd8,0xd8,0xd8,0x6c,0x00,0x00,
+
+ 7, // 0x65 'e'
+ 0x00,0x00,0x00,0x78,0xcc,0xfc,0xc0,0xcc,0x78,0x00,0x00,
+
+ 7, // 0x66 'f'
+ 0x00,0x18,0x34,0x30,0x78,0x30,0x30,0x30,0x78,0x00,0x00,
+
+ 7, // 0x67 'g'
+ 0x00,0x00,0x00,0x6c,0xd8,0xd8,0xd8,0x78,0x18,0xd8,0x70,
+
+ 7, // 0x68 'h'
+ 0x00,0xc0,0xc0,0xd8,0xec,0xcc,0xcc,0xcc,0xcc,0x00,0x00,
+
+ 7, // 0x69 'i'
+ 0x00,0x30,0x00,0x70,0x30,0x30,0x30,0x30,0x78,0x00,0x00,
+
+ 7, // 0x6a 'j'
+ 0x00,0x0c,0x00,0x1c,0x0c,0x0c,0x0c,0x0c,0x6c,0x6c,0x38,
+
+ 7, // 0x6b 'k'
+ 0x00,0xc0,0xc0,0xcc,0xcc,0xd8,0xf0,0xd8,0xcc,0x00,0x00,
+
+ 7, // 0x6c 'l'
+ 0x00,0x70,0x30,0x30,0x30,0x30,0x30,0x30,0x78,0x00,0x00,
+
+ 7, // 0x6d 'm'
+ 0x00,0x00,0x00,0xe8,0xfc,0xd4,0xd4,0xc4,0xc4,0x00,0x00,
+
+ 7, // 0x6e 'n'
+ 0x00,0x00,0x00,0xd8,0x6c,0x6c,0x6c,0x6c,0x6c,0x00,0x00,
+
+ 7, // 0x6f 'o'
+ 0x00,0x00,0x00,0x78,0xcc,0xcc,0xcc,0xcc,0x78,0x00,0x00,
+
+ 7, // 0x70 'p'
+ 0x00,0x00,0x00,0xf8,0xcc,0xcc,0xcc,0xf8,0xc0,0xc0,0xc0,
+
+ 7, // 0x71 'q'
+ 0x00,0x00,0x00,0x7c,0xcc,0xcc,0xcc,0x7c,0x0c,0x0c,0x0c,
+
+ 7, // 0x72 'r'
+ 0x00,0x00,0x00,0xd8,0xec,0xcc,0xc0,0xc0,0xc0,0x00,0x00,
+
+ 7, // 0x73 's'
+ 0x00,0x00,0x00,0x78,0xcc,0x60,0x18,0xcc,0x78,0x00,0x00,
+
+ 7, // 0x74 't'
+ 0x00,0x20,0x60,0x60,0xf0,0x60,0x60,0x68,0x30,0x00,0x00,
+
+ 7, // 0x75 'u'
+ 0x00,0x00,0x00,0xd8,0xd8,0xd8,0xd8,0xd8,0x6c,0x00,0x00,
+
+ 7, // 0x76 'v'
+ 0x00,0x00,0x00,0xcc,0xcc,0xcc,0xcc,0x78,0x30,0x00,0x00,
+
+ 7, // 0x77 'w'
+ 0x00,0x00,0x00,0xcc,0xcc,0xb4,0xfc,0xcc,0x84,0x00,0x00,
+
+ 7, // 0x78 'x'
+ 0x00,0x00,0x00,0xcc,0x78,0x30,0x78,0xcc,0xcc,0x00,0x00,
+
+ 7, // 0x79 'y'
+ 0x00,0x00,0x00,0xcc,0xcc,0xcc,0xcc,0x7c,0x0c,0x18,0xf0,
+
+ 7, // 0x7a 'z'
+ 0x00,0x00,0x00,0xfc,0x98,0x30,0x60,0xc4,0xfc,0x00,0x00,
+
+ 7, // 0x7b '{'
+ 0x1c,0x30,0x30,0x30,0xe0,0x30,0x30,0x30,0x1c,0x00,0x00,
+
+ 7, // 0x7c '|'
+ 0x30,0x30,0x30,0x30,0x00,0x30,0x30,0x30,0x30,0x00,0x00,
+
+ 7, // 0x7d '}'
+ 0xe0,0x30,0x30,0x30,0x1c,0x30,0x30,0x30,0xe0,0x00,0x00,
+
+ 7, // 0x7e '~'
+ 0x00,0x34,0x58,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x7f ''
+ 0x00,0x00,0x00,0x30,0x78,0xcc,0xcc,0xfc,0x00,0x00,0x00,
+ 0
+ };
+
+ const int8u gse7x15[] =
+ {
+ 15, 0, 32, 128-32,
+
+ 0x00,0x00,0x10,0x00,0x20,0x00,0x30,0x00,0x40,0x00,0x50,0x00,0x60,0x00,0x70,0x00,0x80,0x00,
+ 0x90,0x00,0xa0,0x00,0xb0,0x00,0xc0,0x00,0xd0,0x00,0xe0,0x00,0xf0,0x00,0x00,0x01,0x10,0x01,
+ 0x20,0x01,0x30,0x01,0x40,0x01,0x50,0x01,0x60,0x01,0x70,0x01,0x80,0x01,0x90,0x01,0xa0,0x01,
+ 0xb0,0x01,0xc0,0x01,0xd0,0x01,0xe0,0x01,0xf0,0x01,0x00,0x02,0x10,0x02,0x20,0x02,0x30,0x02,
+ 0x40,0x02,0x50,0x02,0x60,0x02,0x70,0x02,0x80,0x02,0x90,0x02,0xa0,0x02,0xb0,0x02,0xc0,0x02,
+ 0xd0,0x02,0xe0,0x02,0xf0,0x02,0x00,0x03,0x10,0x03,0x20,0x03,0x30,0x03,0x40,0x03,0x50,0x03,
+ 0x60,0x03,0x70,0x03,0x80,0x03,0x90,0x03,0xa0,0x03,0xb0,0x03,0xc0,0x03,0xd0,0x03,0xe0,0x03,
+ 0xf0,0x03,0x00,0x04,0x10,0x04,0x20,0x04,0x30,0x04,0x40,0x04,0x50,0x04,0x60,0x04,0x70,0x04,
+ 0x80,0x04,0x90,0x04,0xa0,0x04,0xb0,0x04,0xc0,0x04,0xd0,0x04,0xe0,0x04,0xf0,0x04,0x00,0x05,
+ 0x10,0x05,0x20,0x05,0x30,0x05,0x40,0x05,0x50,0x05,0x60,0x05,0x70,0x05,0x80,0x05,0x90,0x05,
+ 0xa0,0x05,0xb0,0x05,0xc0,0x05,0xd0,0x05,0xe0,0x05,0xf0,0x05,
+
+ 7, // 0x20 ' '
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x21 '!'
+ 0x00,0x00,0x10,0x38,0x38,0x38,0x38,0x10,0x10,0x00,0x10,0x10,0x00,0x00,0x00,
+
+ 7, // 0x22 '"'
+ 0x00,0x00,0x24,0x24,0x24,0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x23 '#'
+ 0x00,0x00,0x48,0x48,0x48,0xfc,0x48,0x48,0xfc,0x48,0x48,0x48,0x00,0x00,0x00,
+
+ 7, // 0x24 '$'
+ 0x00,0x00,0x10,0x38,0x54,0x50,0x38,0x14,0x54,0x54,0x38,0x10,0x00,0x00,0x00,
+
+ 7, // 0x25 '%'
+ 0x00,0x00,0x44,0x44,0x08,0x08,0x10,0x10,0x20,0x20,0x44,0x44,0x00,0x00,0x00,
+
+ 7, // 0x26 '&'
+ 0x00,0x00,0x00,0x30,0x48,0x48,0x30,0x60,0x94,0x98,0x90,0x6c,0x00,0x00,0x00,
+
+ 7, // 0x27 '''
+ 0x00,0x00,0x20,0x20,0x20,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x28 '('
+ 0x00,0x04,0x08,0x10,0x20,0x20,0x20,0x20,0x20,0x10,0x08,0x04,0x00,0x00,0x00,
+
+ 7, // 0x29 ')'
+ 0x00,0x40,0x20,0x10,0x08,0x08,0x08,0x08,0x08,0x10,0x20,0x40,0x00,0x00,0x00,
+
+ 7, // 0x2a '*'
+ 0x00,0x00,0x00,0x00,0x00,0x20,0xa8,0x70,0xa8,0x20,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x2b '+'
+ 0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x7c,0x10,0x10,0x10,0x00,0x00,0x00,0x00,
+
+ 7, // 0x2c ','
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x30,0x60,0x00,
+
+ 7, // 0x2d '-'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x2e '.'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,
+
+ 7, // 0x2f '/'
+ 0x00,0x00,0x04,0x04,0x08,0x08,0x10,0x10,0x20,0x20,0x40,0x40,0x00,0x00,0x00,
+
+ 7, // 0x30 '0'
+ 0x00,0x00,0x38,0x44,0x44,0x4c,0x54,0x64,0x44,0x44,0x44,0x38,0x00,0x00,0x00,
+
+ 7, // 0x31 '1'
+ 0x00,0x00,0x10,0x10,0x30,0x10,0x10,0x10,0x10,0x10,0x10,0x7c,0x00,0x00,0x00,
+
+ 7, // 0x32 '2'
+ 0x00,0x00,0x38,0x44,0x44,0x04,0x08,0x10,0x20,0x40,0x44,0x7c,0x00,0x00,0x00,
+
+ 7, // 0x33 '3'
+ 0x00,0x00,0x7c,0x44,0x08,0x10,0x38,0x04,0x04,0x04,0x44,0x38,0x00,0x00,0x00,
+
+ 7, // 0x34 '4'
+ 0x00,0x00,0x08,0x10,0x20,0x40,0x48,0x48,0x7c,0x08,0x08,0x1c,0x00,0x00,0x00,
+
+ 7, // 0x35 '5'
+ 0x00,0x00,0x7c,0x40,0x40,0x40,0x78,0x04,0x04,0x04,0x44,0x38,0x00,0x00,0x00,
+
+ 7, // 0x36 '6'
+ 0x00,0x00,0x18,0x20,0x40,0x40,0x78,0x44,0x44,0x44,0x44,0x38,0x00,0x00,0x00,
+
+ 7, // 0x37 '7'
+ 0x00,0x00,0x7c,0x44,0x04,0x04,0x08,0x08,0x10,0x10,0x10,0x10,0x00,0x00,0x00,
+
+ 7, // 0x38 '8'
+ 0x00,0x00,0x38,0x44,0x44,0x44,0x38,0x44,0x44,0x44,0x44,0x38,0x00,0x00,0x00,
+
+ 7, // 0x39 '9'
+ 0x00,0x00,0x38,0x44,0x44,0x44,0x44,0x3c,0x04,0x04,0x08,0x30,0x00,0x00,0x00,
+
+ 7, // 0x3a ':'
+ 0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x00,
+
+ 7, // 0x3b ';'
+ 0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x30,0x30,0x60,0x00,0x00,
+
+ 7, // 0x3c '<'
+ 0x00,0x00,0x00,0x04,0x08,0x10,0x20,0x40,0x20,0x10,0x08,0x04,0x00,0x00,0x00,
+
+ 7, // 0x3d '='
+ 0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x3e '>'
+ 0x00,0x00,0x00,0x40,0x20,0x10,0x08,0x04,0x08,0x10,0x20,0x40,0x00,0x00,0x00,
+
+ 7, // 0x3f '?'
+ 0x00,0x00,0x78,0x84,0x84,0x84,0x08,0x10,0x20,0x20,0x00,0x20,0x00,0x00,0x00,
+
+ 7, // 0x40 '@'
+ 0x00,0x00,0x00,0x30,0x48,0x04,0x34,0x54,0x54,0x54,0x54,0x28,0x00,0x00,0x00,
+
+ 7, // 0x41 'A'
+ 0x00,0x00,0x10,0x28,0x44,0x44,0x44,0x7c,0x44,0x44,0x44,0x44,0x00,0x00,0x00,
+
+ 7, // 0x42 'B'
+ 0x00,0x00,0x78,0x44,0x44,0x44,0x78,0x44,0x44,0x44,0x44,0x78,0x00,0x00,0x00,
+
+ 7, // 0x43 'C'
+ 0x00,0x00,0x38,0x44,0x44,0x40,0x40,0x40,0x40,0x44,0x44,0x38,0x00,0x00,0x00,
+
+ 7, // 0x44 'D'
+ 0x00,0x00,0x70,0x48,0x44,0x44,0x44,0x44,0x44,0x44,0x48,0x70,0x00,0x00,0x00,
+
+ 7, // 0x45 'E'
+ 0x00,0x00,0x7c,0x40,0x40,0x40,0x70,0x40,0x40,0x40,0x40,0x7c,0x00,0x00,0x00,
+
+ 7, // 0x46 'F'
+ 0x00,0x00,0x7c,0x40,0x40,0x40,0x70,0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x00,
+
+ 7, // 0x47 'G'
+ 0x00,0x00,0x38,0x44,0x40,0x40,0x40,0x5c,0x44,0x44,0x44,0x38,0x00,0x00,0x00,
+
+ 7, // 0x48 'H'
+ 0x00,0x00,0x44,0x44,0x44,0x44,0x7c,0x44,0x44,0x44,0x44,0x44,0x00,0x00,0x00,
+
+ 7, // 0x49 'I'
+ 0x00,0x00,0x38,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x38,0x00,0x00,0x00,
+
+ 7, // 0x4a 'J'
+ 0x00,0x00,0x1c,0x08,0x08,0x08,0x08,0x08,0x08,0x48,0x48,0x30,0x00,0x00,0x00,
+
+ 7, // 0x4b 'K'
+ 0x00,0x00,0x44,0x44,0x48,0x50,0x60,0x50,0x48,0x44,0x44,0x44,0x00,0x00,0x00,
+
+ 7, // 0x4c 'L'
+ 0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x7c,0x00,0x00,0x00,
+
+ 7, // 0x4d 'M'
+ 0x00,0x00,0x44,0x6c,0x54,0x54,0x44,0x44,0x44,0x44,0x44,0x44,0x00,0x00,0x00,
+
+ 7, // 0x4e 'N'
+ 0x00,0x00,0x44,0x44,0x44,0x64,0x54,0x4c,0x44,0x44,0x44,0x44,0x00,0x00,0x00,
+
+ 7, // 0x4f 'O'
+ 0x00,0x00,0x38,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x38,0x00,0x00,0x00,
+
+ 7, // 0x50 'P'
+ 0x00,0x00,0x78,0x44,0x44,0x44,0x44,0x78,0x40,0x40,0x40,0x40,0x00,0x00,0x00,
+
+ 7, // 0x51 'Q'
+ 0x00,0x00,0x38,0x44,0x44,0x44,0x44,0x44,0x44,0x54,0x48,0x34,0x00,0x00,0x00,
+
+ 7, // 0x52 'R'
+ 0x00,0x00,0x78,0x44,0x44,0x44,0x44,0x78,0x50,0x48,0x44,0x44,0x00,0x00,0x00,
+
+ 7, // 0x53 'S'
+ 0x00,0x00,0x38,0x44,0x44,0x40,0x38,0x04,0x04,0x44,0x44,0x38,0x00,0x00,0x00,
+
+ 7, // 0x54 'T'
+ 0x00,0x00,0x7c,0x54,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00,0x00,
+
+ 7, // 0x55 'U'
+ 0x00,0x00,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x38,0x00,0x00,0x00,
+
+ 7, // 0x56 'V'
+ 0x00,0x00,0x44,0x44,0x44,0x44,0x44,0x44,0x28,0x28,0x10,0x10,0x00,0x00,0x00,
+
+ 7, // 0x57 'W'
+ 0x00,0x00,0x44,0x44,0x44,0x44,0x44,0x44,0x54,0x54,0x6c,0x44,0x00,0x00,0x00,
+
+ 7, // 0x58 'X'
+ 0x00,0x00,0x44,0x44,0x44,0x28,0x10,0x28,0x44,0x44,0x44,0x44,0x00,0x00,0x00,
+
+ 7, // 0x59 'Y'
+ 0x00,0x00,0x44,0x44,0x44,0x44,0x28,0x10,0x10,0x10,0x10,0x38,0x00,0x00,0x00,
+
+ 7, // 0x5a 'Z'
+ 0x00,0x00,0x7c,0x04,0x04,0x08,0x10,0x20,0x40,0x40,0x40,0x7c,0x00,0x00,0x00,
+
+ 7, // 0x5b '['
+ 0x00,0x38,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x38,0x00,0x00,
+
+ 7, // 0x5c '\'
+ 0x00,0x00,0x40,0x40,0x20,0x20,0x10,0x10,0x08,0x08,0x04,0x04,0x00,0x00,0x00,
+
+ 7, // 0x5d ']'
+ 0x00,0x38,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x38,0x00,0x00,
+
+ 7, // 0x5e '^'
+ 0x00,0x10,0x28,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x5f '_'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,
+
+ 7, // 0x60 '`'
+ 0x00,0x20,0x20,0x20,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x61 'a'
+ 0x00,0x00,0x00,0x00,0x38,0x44,0x04,0x3c,0x44,0x44,0x44,0x3a,0x00,0x00,0x00,
+
+ 7, // 0x62 'b'
+ 0x00,0x00,0x40,0x40,0x40,0x78,0x44,0x44,0x44,0x44,0x44,0x78,0x00,0x00,0x00,
+
+ 7, // 0x63 'c'
+ 0x00,0x00,0x00,0x00,0x38,0x44,0x40,0x40,0x40,0x40,0x44,0x38,0x00,0x00,0x00,
+
+ 7, // 0x64 'd'
+ 0x00,0x00,0x04,0x04,0x04,0x3c,0x44,0x44,0x44,0x44,0x44,0x3a,0x00,0x00,0x00,
+
+ 7, // 0x65 'e'
+ 0x00,0x00,0x00,0x00,0x38,0x44,0x44,0x7c,0x40,0x40,0x44,0x38,0x00,0x00,0x00,
+
+ 7, // 0x66 'f'
+ 0x00,0x00,0x18,0x24,0x20,0x70,0x20,0x20,0x20,0x20,0x20,0x70,0x00,0x00,0x00,
+
+ 7, // 0x67 'g'
+ 0x00,0x00,0x00,0x00,0x3a,0x44,0x44,0x44,0x44,0x44,0x3c,0x04,0x44,0x38,0x00,
+
+ 7, // 0x68 'h'
+ 0x00,0x00,0x40,0x40,0x40,0x58,0x64,0x44,0x44,0x44,0x44,0x44,0x00,0x00,0x00,
+
+ 7, // 0x69 'i'
+ 0x00,0x00,0x10,0x10,0x00,0x30,0x10,0x10,0x10,0x10,0x10,0x38,0x00,0x00,0x00,
+
+ 7, // 0x6a 'j'
+ 0x00,0x00,0x08,0x08,0x00,0x18,0x08,0x08,0x08,0x08,0x08,0x48,0x48,0x30,0x00,
+
+ 7, // 0x6b 'k'
+ 0x00,0x00,0x40,0x40,0x44,0x44,0x48,0x50,0x60,0x50,0x48,0x44,0x00,0x00,0x00,
+
+ 7, // 0x6c 'l'
+ 0x00,0x00,0x30,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x38,0x00,0x00,0x00,
+
+ 7, // 0x6d 'm'
+ 0x00,0x00,0x00,0x00,0xa8,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x00,0x00,0x00,
+
+ 7, // 0x6e 'n'
+ 0x00,0x00,0x00,0x00,0xb8,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x00,0x00,0x00,
+
+ 7, // 0x6f 'o'
+ 0x00,0x00,0x00,0x00,0x38,0x44,0x44,0x44,0x44,0x44,0x44,0x38,0x00,0x00,0x00,
+
+ 7, // 0x70 'p'
+ 0x00,0x00,0x00,0x00,0x78,0x44,0x44,0x44,0x44,0x44,0x78,0x40,0x40,0x40,0x00,
+
+ 7, // 0x71 'q'
+ 0x00,0x00,0x00,0x00,0x3c,0x44,0x44,0x44,0x44,0x44,0x3c,0x04,0x04,0x04,0x00,
+
+ 7, // 0x72 'r'
+ 0x00,0x00,0x00,0x00,0x58,0x64,0x44,0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x00,
+
+ 7, // 0x73 's'
+ 0x00,0x00,0x00,0x00,0x38,0x44,0x40,0x38,0x04,0x44,0x44,0x38,0x00,0x00,0x00,
+
+ 7, // 0x74 't'
+ 0x00,0x00,0x20,0x20,0x20,0x70,0x20,0x20,0x20,0x20,0x24,0x18,0x00,0x00,0x00,
+
+ 7, // 0x75 'u'
+ 0x00,0x00,0x00,0x00,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x3a,0x00,0x00,0x00,
+
+ 7, // 0x76 'v'
+ 0x00,0x00,0x00,0x00,0x44,0x44,0x44,0x44,0x28,0x28,0x10,0x10,0x00,0x00,0x00,
+
+ 7, // 0x77 'w'
+ 0x00,0x00,0x00,0x00,0x44,0x44,0x44,0x44,0x54,0x54,0x6c,0x44,0x00,0x00,0x00,
+
+ 7, // 0x78 'x'
+ 0x00,0x00,0x00,0x00,0x44,0x44,0x28,0x10,0x28,0x44,0x44,0x44,0x00,0x00,0x00,
+
+ 7, // 0x79 'y'
+ 0x00,0x00,0x00,0x00,0x44,0x44,0x44,0x44,0x44,0x44,0x3c,0x04,0x08,0x70,0x00,
+
+ 7, // 0x7a 'z'
+ 0x00,0x00,0x00,0x00,0x7c,0x04,0x08,0x10,0x20,0x40,0x40,0x7c,0x00,0x00,0x00,
+
+ 7, // 0x7b '{'
+ 0x00,0x0c,0x10,0x10,0x10,0x10,0x10,0x60,0x10,0x10,0x10,0x10,0x0c,0x00,0x00,
+
+ 7, // 0x7c '|'
+ 0x00,0x20,0x20,0x20,0x20,0x20,0x00,0x00,0x20,0x20,0x20,0x20,0x20,0x00,0x00,
+
+ 7, // 0x7d '}'
+ 0x00,0x60,0x10,0x10,0x10,0x10,0x10,0x0c,0x10,0x10,0x10,0x10,0x60,0x00,0x00,
+
+ 7, // 0x7e '~'
+ 0x00,0x00,0x64,0x98,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x7f ''
+ 0x00,0x00,0x00,0x00,0x00,0x10,0x28,0x44,0x44,0x7c,0x00,0x00,0x00,0x00,0x00,
+ 0
+ };
+
+ const int8u gse7x15_bold[] =
+ {
+ 15, 0, 32, 128-32,
+
+ 0x00,0x00,0x10,0x00,0x20,0x00,0x30,0x00,0x40,0x00,0x50,0x00,0x60,0x00,0x70,0x00,0x80,0x00,
+ 0x90,0x00,0xa0,0x00,0xb0,0x00,0xc0,0x00,0xd0,0x00,0xe0,0x00,0xf0,0x00,0x00,0x01,0x10,0x01,
+ 0x20,0x01,0x30,0x01,0x40,0x01,0x50,0x01,0x60,0x01,0x70,0x01,0x80,0x01,0x90,0x01,0xa0,0x01,
+ 0xb0,0x01,0xc0,0x01,0xd0,0x01,0xe0,0x01,0xf0,0x01,0x00,0x02,0x10,0x02,0x20,0x02,0x30,0x02,
+ 0x40,0x02,0x50,0x02,0x60,0x02,0x70,0x02,0x80,0x02,0x90,0x02,0xa0,0x02,0xb0,0x02,0xc0,0x02,
+ 0xd0,0x02,0xe0,0x02,0xf0,0x02,0x00,0x03,0x10,0x03,0x20,0x03,0x30,0x03,0x40,0x03,0x50,0x03,
+ 0x60,0x03,0x70,0x03,0x80,0x03,0x90,0x03,0xa0,0x03,0xb0,0x03,0xc0,0x03,0xd0,0x03,0xe0,0x03,
+ 0xf0,0x03,0x00,0x04,0x10,0x04,0x20,0x04,0x30,0x04,0x40,0x04,0x50,0x04,0x60,0x04,0x70,0x04,
+ 0x80,0x04,0x90,0x04,0xa0,0x04,0xb0,0x04,0xc0,0x04,0xd0,0x04,0xe0,0x04,0xf0,0x04,0x00,0x05,
+ 0x10,0x05,0x20,0x05,0x30,0x05,0x40,0x05,0x50,0x05,0x60,0x05,0x70,0x05,0x80,0x05,0x90,0x05,
+ 0xa0,0x05,0xb0,0x05,0xc0,0x05,0xd0,0x05,0xe0,0x05,0xf0,0x05,
+
+ 7, // 0x20 ' '
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x21 '!'
+ 0x00,0x00,0x00,0x30,0x78,0x78,0x78,0x30,0x30,0x00,0x30,0x30,0x00,0x00,0x00,
+
+ 7, // 0x22 '"'
+ 0x00,0x00,0x6c,0x6c,0x6c,0x28,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x23 '#'
+ 0x00,0x00,0x48,0x48,0x48,0xfc,0x48,0x48,0xfc,0x48,0x48,0x48,0x00,0x00,0x00,
+
+ 7, // 0x24 '$'
+ 0x00,0x30,0x30,0x78,0xcc,0xe0,0x70,0x38,0x1c,0xcc,0x78,0x30,0x30,0x00,0x00,
+
+ 7, // 0x25 '%'
+ 0x00,0x00,0x00,0x64,0x6c,0x08,0x18,0x10,0x30,0x20,0x6c,0x4c,0x00,0x00,0x00,
+
+ 7, // 0x26 '&'
+ 0x00,0x00,0x00,0x30,0x58,0x58,0x30,0x74,0xdc,0xd8,0xd8,0x6c,0x00,0x00,0x00,
+
+ 7, // 0x27 '''
+ 0x00,0x00,0x30,0x30,0x30,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x28 '('
+ 0x00,0x0c,0x18,0x30,0x60,0x60,0x60,0x60,0x60,0x30,0x18,0x0c,0x00,0x00,0x00,
+
+ 7, // 0x29 ')'
+ 0x00,0xc0,0x60,0x30,0x18,0x18,0x18,0x18,0x18,0x30,0x60,0xc0,0x00,0x00,0x00,
+
+ 7, // 0x2a '*'
+ 0x00,0x00,0x00,0x00,0x00,0x20,0xa8,0x70,0xa8,0x20,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x2b '+'
+ 0x00,0x00,0x00,0x00,0x00,0x30,0x30,0xfc,0x30,0x30,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x2c ','
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x30,0x60,0x00,
+
+ 7, // 0x2d '-'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x2e '.'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,
+
+ 7, // 0x2f '/'
+ 0x00,0x00,0x0c,0x0c,0x18,0x18,0x30,0x30,0x60,0x60,0xc0,0xc0,0x00,0x00,0x00,
+
+ 7, // 0x30 '0'
+ 0x00,0x00,0x78,0xcc,0xcc,0xcc,0xdc,0xec,0xcc,0xcc,0xcc,0x78,0x00,0x00,0x00,
+
+ 7, // 0x31 '1'
+ 0x00,0x00,0x30,0x30,0x70,0xf0,0x30,0x30,0x30,0x30,0x30,0xfc,0x00,0x00,0x00,
+
+ 7, // 0x32 '2'
+ 0x00,0x00,0x78,0xcc,0xcc,0x0c,0x18,0x30,0x60,0xc0,0xcc,0xfc,0x00,0x00,0x00,
+
+ 7, // 0x33 '3'
+ 0x00,0x00,0xfc,0x8c,0x18,0x30,0x78,0x0c,0x0c,0x0c,0xcc,0x78,0x00,0x00,0x00,
+
+ 7, // 0x34 '4'
+ 0x00,0x00,0x18,0x30,0x60,0xc8,0xd8,0xd8,0xfc,0x18,0x18,0x3c,0x00,0x00,0x00,
+
+ 7, // 0x35 '5'
+ 0x00,0x00,0xfc,0xc0,0xc0,0xc0,0xf8,0x0c,0x0c,0x0c,0xcc,0x78,0x00,0x00,0x00,
+
+ 7, // 0x36 '6'
+ 0x00,0x00,0x38,0x60,0xc0,0xc0,0xf8,0xcc,0xcc,0xcc,0xcc,0x78,0x00,0x00,0x00,
+
+ 7, // 0x37 '7'
+ 0x00,0x00,0xfc,0x8c,0x0c,0x0c,0x18,0x18,0x30,0x30,0x30,0x30,0x00,0x00,0x00,
+
+ 7, // 0x38 '8'
+ 0x00,0x00,0x78,0xcc,0xcc,0xcc,0x78,0xcc,0xcc,0xcc,0xcc,0x78,0x00,0x00,0x00,
+
+ 7, // 0x39 '9'
+ 0x00,0x00,0x78,0xcc,0xcc,0xcc,0xcc,0x7c,0x0c,0x0c,0x18,0x70,0x00,0x00,0x00,
+
+ 7, // 0x3a ':'
+ 0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,
+
+ 7, // 0x3b ';'
+ 0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x30,0x30,0x30,0x60,0x00,
+
+ 7, // 0x3c '<'
+ 0x00,0x00,0x00,0x0c,0x18,0x30,0x60,0xc0,0x60,0x30,0x18,0x0c,0x00,0x00,0x00,
+
+ 7, // 0x3d '='
+ 0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x3e '>'
+ 0x00,0x00,0x00,0xc0,0x60,0x30,0x18,0x0c,0x18,0x30,0x60,0xc0,0x00,0x00,0x00,
+
+ 7, // 0x3f '?'
+ 0x00,0x00,0x78,0xcc,0xcc,0x18,0x30,0x30,0x30,0x00,0x30,0x30,0x00,0x00,0x00,
+
+ 7, // 0x40 '@'
+ 0x00,0x00,0x00,0x70,0x88,0x04,0x74,0xb4,0xb4,0xb4,0xb4,0x68,0x00,0x00,0x00,
+
+ 7, // 0x41 'A'
+ 0x00,0x00,0x30,0x78,0xcc,0xcc,0xcc,0xfc,0xcc,0xcc,0xcc,0xcc,0x00,0x00,0x00,
+
+ 7, // 0x42 'B'
+ 0x00,0x00,0xf8,0xcc,0xcc,0xcc,0xf8,0xcc,0xcc,0xcc,0xcc,0xf8,0x00,0x00,0x00,
+
+ 7, // 0x43 'C'
+ 0x00,0x00,0x78,0xcc,0xc4,0xc0,0xc0,0xc0,0xc0,0xc4,0xcc,0x78,0x00,0x00,0x00,
+
+ 7, // 0x44 'D'
+ 0x00,0x00,0xf0,0xd8,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xd8,0xf0,0x00,0x00,0x00,
+
+ 7, // 0x45 'E'
+ 0x00,0x00,0xfc,0xc4,0xc0,0xd0,0xf0,0xd0,0xc0,0xc0,0xc4,0xfc,0x00,0x00,0x00,
+
+ 7, // 0x46 'F'
+ 0x00,0x00,0xfc,0xc4,0xc0,0xd0,0xf0,0xd0,0xc0,0xc0,0xc0,0xc0,0x00,0x00,0x00,
+
+ 7, // 0x47 'G'
+ 0x00,0x00,0x78,0xcc,0xc0,0xc0,0xc0,0xdc,0xcc,0xcc,0xcc,0x78,0x00,0x00,0x00,
+
+ 7, // 0x48 'H'
+ 0x00,0x00,0xcc,0xcc,0xcc,0xcc,0xfc,0xcc,0xcc,0xcc,0xcc,0xcc,0x00,0x00,0x00,
+
+ 7, // 0x49 'I'
+ 0x00,0x00,0x78,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x78,0x00,0x00,0x00,
+
+ 7, // 0x4a 'J'
+ 0x00,0x00,0x3c,0x18,0x18,0x18,0x18,0x18,0x18,0xd8,0xd8,0x70,0x00,0x00,0x00,
+
+ 7, // 0x4b 'K'
+ 0x00,0x00,0xcc,0xcc,0xd8,0xd8,0xf0,0xd8,0xd8,0xcc,0xcc,0xcc,0x00,0x00,0x00,
+
+ 7, // 0x4c 'L'
+ 0x00,0x00,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc4,0xfc,0x00,0x00,0x00,
+
+ 7, // 0x4d 'M'
+ 0x00,0x00,0x84,0xcc,0xfc,0xb4,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0x00,0x00,0x00,
+
+ 7, // 0x4e 'N'
+ 0x00,0x00,0xcc,0xcc,0xcc,0xec,0xfc,0xdc,0xcc,0xcc,0xcc,0xcc,0x00,0x00,0x00,
+
+ 7, // 0x4f 'O'
+ 0x00,0x00,0x78,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0x78,0x00,0x00,0x00,
+
+ 7, // 0x50 'P'
+ 0x00,0x00,0xf8,0xcc,0xcc,0xcc,0xcc,0xf8,0xc0,0xc0,0xc0,0xc0,0x00,0x00,0x00,
+
+ 7, // 0x51 'Q'
+ 0x00,0x00,0x78,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xdc,0x78,0x18,0x0c,0x00,0x00,
+
+ 7, // 0x52 'R'
+ 0x00,0x00,0xf8,0xcc,0xcc,0xcc,0xcc,0xf8,0xd8,0xcc,0xcc,0xcc,0x00,0x00,0x00,
+
+ 7, // 0x53 'S'
+ 0x00,0x00,0x78,0xcc,0xcc,0xe0,0x70,0x38,0x1c,0xcc,0xcc,0x78,0x00,0x00,0x00,
+
+ 7, // 0x54 'T'
+ 0x00,0x00,0xfc,0xb4,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x00,0x00,0x00,
+
+ 7, // 0x55 'U'
+ 0x00,0x00,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0x78,0x00,0x00,0x00,
+
+ 7, // 0x56 'V'
+ 0x00,0x00,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0x78,0x30,0x00,0x00,0x00,
+
+ 7, // 0x57 'W'
+ 0x00,0x00,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xb4,0xfc,0xcc,0x84,0x00,0x00,0x00,
+
+ 7, // 0x58 'X'
+ 0x00,0x00,0xcc,0xcc,0xcc,0x78,0x30,0x78,0xcc,0xcc,0xcc,0xcc,0x00,0x00,0x00,
+
+ 7, // 0x59 'Y'
+ 0x00,0x00,0xcc,0xcc,0xcc,0xcc,0x78,0x30,0x30,0x30,0x30,0x78,0x00,0x00,0x00,
+
+ 7, // 0x5a 'Z'
+ 0x00,0x00,0xfc,0x8c,0x0c,0x18,0x30,0x60,0xc0,0xc0,0xc4,0xfc,0x00,0x00,0x00,
+
+ 7, // 0x5b '['
+ 0x00,0x78,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x78,0x00,0x00,
+
+ 7, // 0x5c '\'
+ 0x00,0x00,0xc0,0xc0,0x60,0x60,0x30,0x30,0x18,0x18,0x0c,0x0c,0x00,0x00,0x00,
+
+ 7, // 0x5d ']'
+ 0x00,0x78,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x78,0x00,0x00,
+
+ 7, // 0x5e '^'
+ 0x00,0x10,0x38,0x6c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x5f '_'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,
+
+ 7, // 0x60 '`'
+ 0x00,0x30,0x30,0x30,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x61 'a'
+ 0x00,0x00,0x00,0x00,0x70,0xd8,0x18,0x78,0xd8,0xd8,0xd8,0x6c,0x00,0x00,0x00,
+
+ 7, // 0x62 'b'
+ 0x00,0x00,0x60,0x60,0x60,0x78,0x6c,0x6c,0x6c,0x6c,0x6c,0x78,0x00,0x00,0x00,
+
+ 7, // 0x63 'c'
+ 0x00,0x00,0x00,0x00,0x78,0xcc,0xc0,0xc0,0xc0,0xc0,0xcc,0x78,0x00,0x00,0x00,
+
+ 7, // 0x64 'd'
+ 0x00,0x00,0x18,0x18,0x18,0x78,0xd8,0xd8,0xd8,0xd8,0xd8,0x6c,0x00,0x00,0x00,
+
+ 7, // 0x65 'e'
+ 0x00,0x00,0x00,0x00,0x78,0xcc,0xcc,0xfc,0xc0,0xc0,0xcc,0x78,0x00,0x00,0x00,
+
+ 7, // 0x66 'f'
+ 0x00,0x00,0x30,0x68,0x60,0x60,0xf0,0x60,0x60,0x60,0x60,0xf0,0x00,0x00,0x00,
+
+ 7, // 0x67 'g'
+ 0x00,0x00,0x00,0x00,0x6c,0xd8,0xd8,0xd8,0xd8,0xd8,0x78,0x18,0xd8,0x70,0x00,
+
+ 7, // 0x68 'h'
+ 0x00,0x00,0xc0,0xc0,0xc0,0xd8,0xec,0xcc,0xcc,0xcc,0xcc,0xcc,0x00,0x00,0x00,
+
+ 7, // 0x69 'i'
+ 0x00,0x00,0x30,0x30,0x00,0x70,0x30,0x30,0x30,0x30,0x30,0x78,0x00,0x00,0x00,
+
+ 7, // 0x6a 'j'
+ 0x00,0x00,0x18,0x18,0x00,0x38,0x18,0x18,0x18,0x18,0x18,0xd8,0xd8,0x70,0x00,
+
+ 7, // 0x6b 'k'
+ 0x00,0x00,0xc0,0xc0,0xcc,0xcc,0xcc,0xd8,0xf0,0xd8,0xcc,0xcc,0x00,0x00,0x00,
+
+ 7, // 0x6c 'l'
+ 0x00,0x00,0x70,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x78,0x00,0x00,0x00,
+
+ 7, // 0x6d 'm'
+ 0x00,0x00,0x00,0x00,0xe8,0xfc,0xd4,0xd4,0xd4,0xc4,0xc4,0xc4,0x00,0x00,0x00,
+
+ 7, // 0x6e 'n'
+ 0x00,0x00,0x00,0x00,0xd8,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x00,0x00,0x00,
+
+ 7, // 0x6f 'o'
+ 0x00,0x00,0x00,0x00,0x78,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0x78,0x00,0x00,0x00,
+
+ 7, // 0x70 'p'
+ 0x00,0x00,0x00,0x00,0xf8,0xcc,0xcc,0xcc,0xcc,0xcc,0xf8,0xc0,0xc0,0xc0,0x00,
+
+ 7, // 0x71 'q'
+ 0x00,0x00,0x00,0x00,0x7c,0xcc,0xcc,0xcc,0xcc,0xcc,0x7c,0x0c,0x0c,0x0c,0x00,
+
+ 7, // 0x72 'r'
+ 0x00,0x00,0x00,0x00,0xd8,0xec,0xcc,0xc0,0xc0,0xc0,0xc0,0xc0,0x00,0x00,0x00,
+
+ 7, // 0x73 's'
+ 0x00,0x00,0x00,0x00,0x78,0xcc,0xe0,0x70,0x38,0x1c,0xcc,0x78,0x00,0x00,0x00,
+
+ 7, // 0x74 't'
+ 0x00,0x00,0x20,0x60,0x60,0xf0,0x60,0x60,0x60,0x60,0x6c,0x38,0x00,0x00,0x00,
+
+ 7, // 0x75 'u'
+ 0x00,0x00,0x00,0x00,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0x6c,0x00,0x00,0x00,
+
+ 7, // 0x76 'v'
+ 0x00,0x00,0x00,0x00,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0x78,0x30,0x00,0x00,0x00,
+
+ 7, // 0x77 'w'
+ 0x00,0x00,0x00,0x00,0xcc,0xcc,0xcc,0xcc,0xb4,0xfc,0xcc,0x84,0x00,0x00,0x00,
+
+ 7, // 0x78 'x'
+ 0x00,0x00,0x00,0x00,0xcc,0xcc,0x78,0x30,0x78,0xcc,0xcc,0xcc,0x00,0x00,0x00,
+
+ 7, // 0x79 'y'
+ 0x00,0x00,0x00,0x00,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0x7c,0x0c,0x18,0xf0,0x00,
+
+ 7, // 0x7a 'z'
+ 0x00,0x00,0x00,0x00,0xfc,0x8c,0x18,0x30,0x60,0xc0,0xc4,0xfc,0x00,0x00,0x00,
+
+ 7, // 0x7b '{'
+ 0x00,0x1c,0x30,0x30,0x30,0x30,0x30,0xe0,0x30,0x30,0x30,0x30,0x1c,0x00,0x00,
+
+ 7, // 0x7c '|'
+ 0x00,0x30,0x30,0x30,0x30,0x30,0x00,0x00,0x30,0x30,0x30,0x30,0x30,0x00,0x00,
+
+ 7, // 0x7d '}'
+ 0x00,0xe0,0x30,0x30,0x30,0x30,0x30,0x1c,0x30,0x30,0x30,0x30,0xe0,0x00,0x00,
+
+ 7, // 0x7e '~'
+ 0x00,0x00,0x34,0x58,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x7f ''
+ 0x00,0x00,0x00,0x00,0x00,0x30,0x78,0xcc,0xcc,0xfc,0x00,0x00,0x00,0x00,0x00,
+ 0
+ };
+
+ const int8u gse8x16[] =
+ {
+ 16, 0, 32, 128-32,
+
+ 0x00,0x00,0x11,0x00,0x22,0x00,0x33,0x00,0x44,0x00,0x55,0x00,0x66,0x00,0x77,0x00,0x88,0x00,
+ 0x99,0x00,0xaa,0x00,0xbb,0x00,0xcc,0x00,0xdd,0x00,0xee,0x00,0xff,0x00,0x10,0x01,0x21,0x01,
+ 0x32,0x01,0x43,0x01,0x54,0x01,0x65,0x01,0x76,0x01,0x87,0x01,0x98,0x01,0xa9,0x01,0xba,0x01,
+ 0xcb,0x01,0xdc,0x01,0xed,0x01,0xfe,0x01,0x0f,0x02,0x20,0x02,0x31,0x02,0x42,0x02,0x53,0x02,
+ 0x64,0x02,0x75,0x02,0x86,0x02,0x97,0x02,0xa8,0x02,0xb9,0x02,0xca,0x02,0xdb,0x02,0xec,0x02,
+ 0xfd,0x02,0x0e,0x03,0x1f,0x03,0x30,0x03,0x41,0x03,0x52,0x03,0x63,0x03,0x74,0x03,0x85,0x03,
+ 0x96,0x03,0xa7,0x03,0xb8,0x03,0xc9,0x03,0xda,0x03,0xeb,0x03,0xfc,0x03,0x0d,0x04,0x1e,0x04,
+ 0x2f,0x04,0x40,0x04,0x51,0x04,0x62,0x04,0x73,0x04,0x84,0x04,0x95,0x04,0xa6,0x04,0xb7,0x04,
+ 0xc8,0x04,0xd9,0x04,0xea,0x04,0xfb,0x04,0x0c,0x05,0x1d,0x05,0x2e,0x05,0x3f,0x05,0x50,0x05,
+ 0x61,0x05,0x72,0x05,0x83,0x05,0x94,0x05,0xa5,0x05,0xb6,0x05,0xc7,0x05,0xd8,0x05,0xe9,0x05,
+ 0xfa,0x05,0x0b,0x06,0x1c,0x06,0x2d,0x06,0x3e,0x06,0x4f,0x06,
+
+ 8, // 0x20 ' '
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x21 '!'
+ 0x00,0x00,0x10,0x38,0x38,0x38,0x38,0x10,0x10,0x00,0x10,0x10,0x00,0x00,0x00,0x00,
+
+ 8, // 0x22 '"'
+ 0x00,0x24,0x24,0x24,0x24,0x48,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x23 '#'
+ 0x00,0x00,0x24,0x24,0x24,0x7e,0x24,0x24,0x7e,0x24,0x24,0x24,0x00,0x00,0x00,0x00,
+
+ 8, // 0x24 '$'
+ 0x00,0x14,0x14,0x3e,0x55,0x54,0x54,0x3e,0x15,0x15,0x55,0x3e,0x14,0x14,0x00,0x00,
+
+ 8, // 0x25 '%'
+ 0x00,0x00,0x32,0x56,0x6c,0x04,0x08,0x08,0x10,0x13,0x25,0x26,0x00,0x00,0x00,0x00,
+
+ 8, // 0x26 '&'
+ 0x00,0x00,0x18,0x24,0x24,0x24,0x18,0x28,0x45,0x46,0x44,0x3b,0x00,0x00,0x00,0x00,
+
+ 8, // 0x27 '''
+ 0x00,0x00,0x08,0x08,0x08,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x28 '('
+ 0x00,0x04,0x08,0x10,0x10,0x20,0x20,0x20,0x20,0x10,0x10,0x08,0x04,0x00,0x00,0x00,
+
+ 8, // 0x29 ')'
+ 0x00,0x10,0x08,0x04,0x04,0x02,0x02,0x02,0x02,0x04,0x04,0x08,0x10,0x00,0x00,0x00,
+
+ 8, // 0x2a '*'
+ 0x00,0x00,0x00,0x00,0x66,0x24,0x18,0xff,0x18,0x24,0x66,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x2b '+'
+ 0x00,0x00,0x00,0x00,0x08,0x08,0x08,0x7f,0x08,0x08,0x08,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x2c ','
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x18,0x30,0x20,0x00,
+
+ 8, // 0x2d '-'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x2e '.'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00,
+
+ 8, // 0x2f '/'
+ 0x00,0x02,0x02,0x04,0x04,0x08,0x08,0x10,0x10,0x20,0x20,0x40,0x40,0x00,0x00,0x00,
+
+ 8, // 0x30 '0'
+ 0x00,0x00,0x3c,0x42,0x42,0x46,0x4a,0x52,0x62,0x42,0x42,0x3c,0x00,0x00,0x00,0x00,
+
+ 8, // 0x31 '1'
+ 0x00,0x00,0x08,0x08,0x18,0x38,0x08,0x08,0x08,0x08,0x08,0x3e,0x00,0x00,0x00,0x00,
+
+ 8, // 0x32 '2'
+ 0x00,0x00,0x3c,0x42,0x42,0x02,0x04,0x08,0x10,0x20,0x42,0x7e,0x00,0x00,0x00,0x00,
+
+ 8, // 0x33 '3'
+ 0x00,0x00,0x7e,0x42,0x04,0x08,0x1c,0x02,0x02,0x02,0x42,0x3c,0x00,0x00,0x00,0x00,
+
+ 8, // 0x34 '4'
+ 0x00,0x00,0x04,0x08,0x10,0x24,0x44,0x44,0x7e,0x04,0x04,0x0e,0x00,0x00,0x00,0x00,
+
+ 8, // 0x35 '5'
+ 0x00,0x00,0x7e,0x42,0x40,0x40,0x7c,0x02,0x02,0x02,0x42,0x3c,0x00,0x00,0x00,0x00,
+
+ 8, // 0x36 '6'
+ 0x00,0x00,0x1c,0x20,0x40,0x40,0x7c,0x42,0x42,0x42,0x42,0x3c,0x00,0x00,0x00,0x00,
+
+ 8, // 0x37 '7'
+ 0x00,0x00,0x7e,0x42,0x42,0x02,0x04,0x08,0x10,0x10,0x10,0x10,0x00,0x00,0x00,0x00,
+
+ 8, // 0x38 '8'
+ 0x00,0x00,0x3c,0x42,0x42,0x42,0x3c,0x42,0x42,0x42,0x42,0x3c,0x00,0x00,0x00,0x00,
+
+ 8, // 0x39 '9'
+ 0x00,0x00,0x3c,0x42,0x42,0x42,0x42,0x3e,0x02,0x02,0x04,0x38,0x00,0x00,0x00,0x00,
+
+ 8, // 0x3a ':'
+ 0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x3b ';'
+ 0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x30,0x60,0x40,0x00,
+
+ 8, // 0x3c '<'
+ 0x00,0x00,0x00,0x02,0x04,0x08,0x10,0x20,0x10,0x08,0x04,0x02,0x00,0x00,0x00,0x00,
+
+ 8, // 0x3d '='
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0x00,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x3e '>'
+ 0x00,0x00,0x00,0x20,0x10,0x08,0x04,0x02,0x04,0x08,0x10,0x20,0x00,0x00,0x00,0x00,
+
+ 8, // 0x3f '?'
+ 0x00,0x00,0x3c,0x42,0x42,0x42,0x04,0x08,0x08,0x00,0x08,0x08,0x00,0x00,0x00,0x00,
+
+ 8, // 0x40 '@'
+ 0x00,0x00,0x3c,0x42,0x01,0x39,0x49,0x49,0x49,0x49,0x49,0x36,0x00,0x00,0x00,0x00,
+
+ 8, // 0x41 'A'
+ 0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x7e,0x42,0x42,0x42,0x42,0x00,0x00,0x00,0x00,
+
+ 8, // 0x42 'B'
+ 0x00,0x00,0x7c,0x22,0x22,0x22,0x3c,0x22,0x22,0x22,0x22,0x7c,0x00,0x00,0x00,0x00,
+
+ 8, // 0x43 'C'
+ 0x00,0x00,0x3c,0x42,0x42,0x40,0x40,0x40,0x40,0x42,0x42,0x3c,0x00,0x00,0x00,0x00,
+
+ 8, // 0x44 'D'
+ 0x00,0x00,0x7c,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x7c,0x00,0x00,0x00,0x00,
+
+ 8, // 0x45 'E'
+ 0x00,0x00,0x7e,0x22,0x20,0x28,0x38,0x28,0x20,0x20,0x22,0x7e,0x00,0x00,0x00,0x00,
+
+ 8, // 0x46 'F'
+ 0x00,0x00,0x7e,0x22,0x20,0x28,0x38,0x28,0x20,0x20,0x20,0x70,0x00,0x00,0x00,0x00,
+
+ 8, // 0x47 'G'
+ 0x00,0x00,0x3c,0x42,0x42,0x40,0x40,0x4e,0x42,0x42,0x42,0x3c,0x00,0x00,0x00,0x00,
+
+ 8, // 0x48 'H'
+ 0x00,0x00,0x42,0x42,0x42,0x42,0x7e,0x42,0x42,0x42,0x42,0x42,0x00,0x00,0x00,0x00,
+
+ 8, // 0x49 'I'
+ 0x00,0x00,0x1c,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x1c,0x00,0x00,0x00,0x00,
+
+ 8, // 0x4a 'J'
+ 0x00,0x00,0x0e,0x04,0x04,0x04,0x04,0x04,0x04,0x44,0x44,0x38,0x00,0x00,0x00,0x00,
+
+ 8, // 0x4b 'K'
+ 0x00,0x00,0x62,0x22,0x24,0x28,0x30,0x28,0x24,0x22,0x22,0x62,0x00,0x00,0x00,0x00,
+
+ 8, // 0x4c 'L'
+ 0x00,0x00,0x70,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x22,0x7e,0x00,0x00,0x00,0x00,
+
+ 8, // 0x4d 'M'
+ 0x00,0x00,0x41,0x63,0x55,0x49,0x41,0x41,0x41,0x41,0x41,0x41,0x00,0x00,0x00,0x00,
+
+ 8, // 0x4e 'N'
+ 0x00,0x00,0x42,0x42,0x62,0x52,0x4a,0x46,0x42,0x42,0x42,0x42,0x00,0x00,0x00,0x00,
+
+ 8, // 0x4f 'O'
+ 0x00,0x00,0x3c,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x3c,0x00,0x00,0x00,0x00,
+
+ 8, // 0x50 'P'
+ 0x00,0x00,0x7c,0x22,0x22,0x22,0x22,0x3c,0x20,0x20,0x20,0x70,0x00,0x00,0x00,0x00,
+
+ 8, // 0x51 'Q'
+ 0x00,0x00,0x3c,0x42,0x42,0x42,0x42,0x42,0x42,0x4a,0x44,0x3a,0x02,0x00,0x00,0x00,
+
+ 8, // 0x52 'R'
+ 0x00,0x00,0x7c,0x22,0x22,0x22,0x22,0x3c,0x28,0x24,0x22,0x62,0x00,0x00,0x00,0x00,
+
+ 8, // 0x53 'S'
+ 0x00,0x00,0x3c,0x42,0x42,0x40,0x30,0x0c,0x02,0x42,0x42,0x3c,0x00,0x00,0x00,0x00,
+
+ 8, // 0x54 'T'
+ 0x00,0x00,0x7f,0x49,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x1c,0x00,0x00,0x00,0x00,
+
+ 8, // 0x55 'U'
+ 0x00,0x00,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x3c,0x00,0x00,0x00,0x00,
+
+ 8, // 0x56 'V'
+ 0x00,0x00,0x41,0x41,0x41,0x41,0x22,0x22,0x14,0x14,0x08,0x08,0x00,0x00,0x00,0x00,
+
+ 8, // 0x57 'W'
+ 0x00,0x00,0x41,0x41,0x41,0x41,0x41,0x49,0x49,0x55,0x63,0x41,0x00,0x00,0x00,0x00,
+
+ 8, // 0x58 'X'
+ 0x00,0x00,0x42,0x42,0x42,0x24,0x18,0x18,0x24,0x42,0x42,0x42,0x00,0x00,0x00,0x00,
+
+ 8, // 0x59 'Y'
+ 0x00,0x00,0x22,0x22,0x22,0x22,0x14,0x08,0x08,0x08,0x08,0x1c,0x00,0x00,0x00,0x00,
+
+ 8, // 0x5a 'Z'
+ 0x00,0x00,0x7e,0x42,0x02,0x04,0x08,0x10,0x20,0x40,0x42,0x7e,0x00,0x00,0x00,0x00,
+
+ 8, // 0x5b '['
+ 0x00,0x1e,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x1e,0x00,0x00,0x00,
+
+ 8, // 0x5c '\'
+ 0x00,0x40,0x40,0x20,0x20,0x10,0x10,0x08,0x08,0x04,0x04,0x02,0x02,0x00,0x00,0x00,
+
+ 8, // 0x5d ']'
+ 0x00,0x3c,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3c,0x00,0x00,0x00,
+
+ 8, // 0x5e '^'
+ 0x00,0x00,0x08,0x14,0x22,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x5f '_'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,
+
+ 8, // 0x60 '`'
+ 0x00,0x00,0x08,0x08,0x08,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x61 'a'
+ 0x00,0x00,0x00,0x00,0x00,0x38,0x44,0x04,0x3c,0x44,0x44,0x3e,0x00,0x00,0x00,0x00,
+
+ 8, // 0x62 'b'
+ 0x00,0x00,0x60,0x20,0x20,0x38,0x24,0x22,0x22,0x22,0x22,0x3c,0x00,0x00,0x00,0x00,
+
+ 8, // 0x63 'c'
+ 0x00,0x00,0x00,0x00,0x00,0x3c,0x42,0x40,0x40,0x40,0x42,0x3c,0x00,0x00,0x00,0x00,
+
+ 8, // 0x64 'd'
+ 0x00,0x00,0x0c,0x04,0x04,0x1c,0x24,0x44,0x44,0x44,0x44,0x3e,0x00,0x00,0x00,0x00,
+
+ 8, // 0x65 'e'
+ 0x00,0x00,0x00,0x00,0x00,0x3c,0x42,0x42,0x7e,0x40,0x42,0x3c,0x00,0x00,0x00,0x00,
+
+ 8, // 0x66 'f'
+ 0x00,0x00,0x0c,0x12,0x10,0x10,0x38,0x10,0x10,0x10,0x10,0x38,0x00,0x00,0x00,0x00,
+
+ 8, // 0x67 'g'
+ 0x00,0x00,0x00,0x00,0x00,0x3e,0x44,0x44,0x44,0x44,0x44,0x3c,0x04,0x44,0x38,0x00,
+
+ 8, // 0x68 'h'
+ 0x00,0x00,0x60,0x20,0x20,0x2c,0x32,0x22,0x22,0x22,0x22,0x62,0x00,0x00,0x00,0x00,
+
+ 8, // 0x69 'i'
+ 0x00,0x00,0x08,0x08,0x00,0x18,0x08,0x08,0x08,0x08,0x08,0x1c,0x00,0x00,0x00,0x00,
+
+ 8, // 0x6a 'j'
+ 0x00,0x00,0x04,0x04,0x00,0x0c,0x04,0x04,0x04,0x04,0x04,0x44,0x44,0x38,0x00,0x00,
+
+ 8, // 0x6b 'k'
+ 0x00,0x00,0x60,0x20,0x20,0x22,0x24,0x28,0x38,0x24,0x22,0x62,0x00,0x00,0x00,0x00,
+
+ 8, // 0x6c 'l'
+ 0x00,0x00,0x18,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x1c,0x00,0x00,0x00,0x00,
+
+ 8, // 0x6d 'm'
+ 0x00,0x00,0x00,0x00,0x00,0x76,0x49,0x49,0x49,0x49,0x41,0x41,0x00,0x00,0x00,0x00,
+
+ 8, // 0x6e 'n'
+ 0x00,0x00,0x00,0x00,0x00,0x5c,0x22,0x22,0x22,0x22,0x22,0x22,0x00,0x00,0x00,0x00,
+
+ 8, // 0x6f 'o'
+ 0x00,0x00,0x00,0x00,0x00,0x3c,0x42,0x42,0x42,0x42,0x42,0x3c,0x00,0x00,0x00,0x00,
+
+ 8, // 0x70 'p'
+ 0x00,0x00,0x00,0x00,0x00,0x7c,0x22,0x22,0x22,0x22,0x22,0x3c,0x20,0x20,0x70,0x00,
+
+ 8, // 0x71 'q'
+ 0x00,0x00,0x00,0x00,0x00,0x3e,0x44,0x44,0x44,0x44,0x44,0x3c,0x04,0x04,0x0e,0x00,
+
+ 8, // 0x72 'r'
+ 0x00,0x00,0x00,0x00,0x00,0x7c,0x22,0x22,0x20,0x20,0x20,0x70,0x00,0x00,0x00,0x00,
+
+ 8, // 0x73 's'
+ 0x00,0x00,0x00,0x00,0x00,0x3c,0x42,0x40,0x3c,0x02,0x42,0x3c,0x00,0x00,0x00,0x00,
+
+ 8, // 0x74 't'
+ 0x00,0x00,0x10,0x10,0x10,0x7c,0x10,0x10,0x10,0x10,0x12,0x0c,0x00,0x00,0x00,0x00,
+
+ 8, // 0x75 'u'
+ 0x00,0x00,0x00,0x00,0x00,0x44,0x44,0x44,0x44,0x44,0x44,0x3e,0x00,0x00,0x00,0x00,
+
+ 8, // 0x76 'v'
+ 0x00,0x00,0x00,0x00,0x00,0x41,0x41,0x41,0x41,0x22,0x14,0x08,0x00,0x00,0x00,0x00,
+
+ 8, // 0x77 'w'
+ 0x00,0x00,0x00,0x00,0x00,0x41,0x41,0x41,0x49,0x49,0x55,0x22,0x00,0x00,0x00,0x00,
+
+ 8, // 0x78 'x'
+ 0x00,0x00,0x00,0x00,0x00,0x42,0x42,0x24,0x18,0x24,0x42,0x42,0x00,0x00,0x00,0x00,
+
+ 8, // 0x79 'y'
+ 0x00,0x00,0x00,0x00,0x00,0x42,0x42,0x42,0x42,0x42,0x42,0x3e,0x02,0x04,0x78,0x00,
+
+ 8, // 0x7a 'z'
+ 0x00,0x00,0x00,0x00,0x00,0x7e,0x44,0x08,0x10,0x20,0x42,0x7e,0x00,0x00,0x00,0x00,
+
+ 8, // 0x7b '{'
+ 0x00,0x06,0x08,0x08,0x08,0x08,0x08,0x30,0x08,0x08,0x08,0x08,0x08,0x06,0x00,0x00,
+
+ 8, // 0x7c '|'
+ 0x00,0x00,0x08,0x08,0x08,0x08,0x08,0x00,0x08,0x08,0x08,0x08,0x08,0x00,0x00,0x00,
+
+ 8, // 0x7d '}'
+ 0x00,0x30,0x08,0x08,0x08,0x08,0x08,0x06,0x08,0x08,0x08,0x08,0x08,0x30,0x00,0x00,
+
+ 8, // 0x7e '~'
+ 0x00,0x00,0x39,0x4e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x7f ''
+ 0x00,0x00,0x00,0x00,0x00,0x08,0x14,0x22,0x41,0x41,0x7f,0x00,0x00,0x00,0x00,0x00,
+ 0
+ };
+
+ const int8u gse8x16_bold[] =
+ {
+ 16, 0, 32, 128-32,
+
+ 0x00,0x00,0x11,0x00,0x22,0x00,0x33,0x00,0x44,0x00,0x55,0x00,0x66,0x00,0x77,0x00,0x88,0x00,
+ 0x99,0x00,0xaa,0x00,0xbb,0x00,0xcc,0x00,0xdd,0x00,0xee,0x00,0xff,0x00,0x10,0x01,0x21,0x01,
+ 0x32,0x01,0x43,0x01,0x54,0x01,0x65,0x01,0x76,0x01,0x87,0x01,0x98,0x01,0xa9,0x01,0xba,0x01,
+ 0xcb,0x01,0xdc,0x01,0xed,0x01,0xfe,0x01,0x0f,0x02,0x20,0x02,0x31,0x02,0x42,0x02,0x53,0x02,
+ 0x64,0x02,0x75,0x02,0x86,0x02,0x97,0x02,0xa8,0x02,0xb9,0x02,0xca,0x02,0xdb,0x02,0xec,0x02,
+ 0xfd,0x02,0x0e,0x03,0x1f,0x03,0x30,0x03,0x41,0x03,0x52,0x03,0x63,0x03,0x74,0x03,0x85,0x03,
+ 0x96,0x03,0xa7,0x03,0xb8,0x03,0xc9,0x03,0xda,0x03,0xeb,0x03,0xfc,0x03,0x0d,0x04,0x1e,0x04,
+ 0x2f,0x04,0x40,0x04,0x51,0x04,0x62,0x04,0x73,0x04,0x84,0x04,0x95,0x04,0xa6,0x04,0xb7,0x04,
+ 0xc8,0x04,0xd9,0x04,0xea,0x04,0xfb,0x04,0x0c,0x05,0x1d,0x05,0x2e,0x05,0x3f,0x05,0x50,0x05,
+ 0x61,0x05,0x72,0x05,0x83,0x05,0x94,0x05,0xa5,0x05,0xb6,0x05,0xc7,0x05,0xd8,0x05,0xe9,0x05,
+ 0xfa,0x05,0x0b,0x06,0x1c,0x06,0x2d,0x06,0x3e,0x06,0x4f,0x06,
+
+ 8, // 0x20 ' '
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x21 '!'
+ 0x00,0x00,0x18,0x3c,0x3c,0x3c,0x3c,0x18,0x18,0x00,0x18,0x18,0x00,0x00,0x00,0x00,
+
+ 8, // 0x22 '"'
+ 0x00,0x66,0x66,0x66,0x66,0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x23 '#'
+ 0x00,0x00,0x66,0x66,0x66,0xff,0x66,0x66,0xff,0x66,0x66,0x66,0x00,0x00,0x00,0x00,
+
+ 8, // 0x24 '$'
+ 0x00,0x08,0x08,0x3e,0x6b,0x6b,0x68,0x3e,0x0b,0x6b,0x6b,0x3e,0x08,0x08,0x00,0x00,
+
+ 8, // 0x25 '%'
+ 0x00,0x00,0x66,0xbe,0xcc,0x0c,0x18,0x18,0x30,0x33,0x65,0x66,0x00,0x00,0x00,0x00,
+
+ 8, // 0x26 '&'
+ 0x00,0x00,0x1c,0x36,0x36,0x36,0x1c,0x3b,0x6e,0x66,0x66,0x3b,0x00,0x00,0x00,0x00,
+
+ 8, // 0x27 '''
+ 0x00,0x00,0x18,0x18,0x18,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x28 '('
+ 0x00,0x06,0x0c,0x18,0x18,0x30,0x30,0x30,0x30,0x18,0x18,0x0c,0x06,0x00,0x00,0x00,
+
+ 8, // 0x29 ')'
+ 0x00,0x30,0x18,0x0c,0x0c,0x06,0x06,0x06,0x06,0x0c,0x0c,0x18,0x30,0x00,0x00,0x00,
+
+ 8, // 0x2a '*'
+ 0x00,0x00,0x00,0x00,0x66,0x24,0x18,0xff,0x18,0x24,0x66,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x2b '+'
+ 0x00,0x00,0x00,0x00,0x18,0x18,0x18,0xff,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x2c ','
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x18,0x30,0x20,0x00,
+
+ 8, // 0x2d '-'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x2e '.'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00,
+
+ 8, // 0x2f '/'
+ 0x00,0x03,0x03,0x06,0x06,0x0c,0x0c,0x18,0x18,0x30,0x30,0x60,0x60,0x00,0x00,0x00,
+
+ 8, // 0x30 '0'
+ 0x00,0x00,0x3e,0x63,0x63,0x67,0x6b,0x73,0x63,0x63,0x63,0x3e,0x00,0x00,0x00,0x00,
+
+ 8, // 0x31 '1'
+ 0x00,0x00,0x0c,0x0c,0x1c,0x3c,0x0c,0x0c,0x0c,0x0c,0x0c,0x3f,0x00,0x00,0x00,0x00,
+
+ 8, // 0x32 '2'
+ 0x00,0x00,0x3e,0x63,0x63,0x03,0x06,0x0c,0x18,0x30,0x61,0x7f,0x00,0x00,0x00,0x00,
+
+ 8, // 0x33 '3'
+ 0x00,0x00,0x7f,0x43,0x06,0x0c,0x1e,0x03,0x03,0x03,0x63,0x3e,0x00,0x00,0x00,0x00,
+
+ 8, // 0x34 '4'
+ 0x00,0x00,0x06,0x0c,0x18,0x32,0x66,0x66,0x7f,0x06,0x06,0x0f,0x00,0x00,0x00,0x00,
+
+ 8, // 0x35 '5'
+ 0x00,0x00,0x7f,0x61,0x60,0x60,0x7e,0x03,0x03,0x03,0x63,0x3e,0x00,0x00,0x00,0x00,
+
+ 8, // 0x36 '6'
+ 0x00,0x00,0x1e,0x30,0x60,0x60,0x7e,0x63,0x63,0x63,0x63,0x3e,0x00,0x00,0x00,0x00,
+
+ 8, // 0x37 '7'
+ 0x00,0x00,0x7f,0x63,0x63,0x03,0x06,0x0c,0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x00,
+
+ 8, // 0x38 '8'
+ 0x00,0x00,0x3e,0x63,0x63,0x63,0x3e,0x63,0x63,0x63,0x63,0x3e,0x00,0x00,0x00,0x00,
+
+ 8, // 0x39 '9'
+ 0x00,0x00,0x3e,0x63,0x63,0x63,0x63,0x3f,0x03,0x03,0x06,0x3c,0x00,0x00,0x00,0x00,
+
+ 8, // 0x3a ':'
+ 0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x3b ';'
+ 0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x30,0x30,0x30,0x60,0x40,0x00,
+
+ 8, // 0x3c '<'
+ 0x00,0x00,0x00,0x06,0x0c,0x18,0x30,0x60,0x30,0x18,0x0c,0x06,0x00,0x00,0x00,0x00,
+
+ 8, // 0x3d '='
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0x00,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x3e '>'
+ 0x00,0x00,0x00,0x30,0x18,0x0c,0x06,0x03,0x06,0x0c,0x18,0x30,0x00,0x00,0x00,0x00,
+
+ 8, // 0x3f '?'
+ 0x00,0x00,0x3e,0x63,0x63,0x63,0x06,0x0c,0x0c,0x00,0x0c,0x0c,0x00,0x00,0x00,0x00,
+
+ 8, // 0x40 '@'
+ 0x00,0x00,0x7c,0x86,0x03,0x73,0xdb,0xdb,0xdb,0xdb,0xdb,0x6e,0x00,0x00,0x00,0x00,
+
+ 8, // 0x41 'A'
+ 0x00,0x00,0x08,0x1c,0x36,0x63,0x63,0x63,0x7f,0x63,0x63,0x63,0x00,0x00,0x00,0x00,
+
+ 8, // 0x42 'B'
+ 0x00,0x00,0x7e,0x33,0x33,0x33,0x3e,0x33,0x33,0x33,0x33,0x7e,0x00,0x00,0x00,0x00,
+
+ 8, // 0x43 'C'
+ 0x00,0x00,0x1e,0x33,0x61,0x60,0x60,0x60,0x60,0x61,0x33,0x1e,0x00,0x00,0x00,0x00,
+
+ 8, // 0x44 'D'
+ 0x00,0x00,0x7c,0x36,0x33,0x33,0x33,0x33,0x33,0x33,0x36,0x7c,0x00,0x00,0x00,0x00,
+
+ 8, // 0x45 'E'
+ 0x00,0x00,0x7f,0x33,0x31,0x34,0x3c,0x34,0x30,0x31,0x33,0x7f,0x00,0x00,0x00,0x00,
+
+ 8, // 0x46 'F'
+ 0x00,0x00,0x7f,0x33,0x31,0x34,0x3c,0x34,0x30,0x30,0x30,0x78,0x00,0x00,0x00,0x00,
+
+ 8, // 0x47 'G'
+ 0x00,0x00,0x1f,0x33,0x61,0x60,0x60,0x6f,0x63,0x63,0x33,0x1e,0x00,0x00,0x00,0x00,
+
+ 8, // 0x48 'H'
+ 0x00,0x00,0x63,0x63,0x63,0x63,0x7f,0x63,0x63,0x63,0x63,0x63,0x00,0x00,0x00,0x00,
+
+ 8, // 0x49 'I'
+ 0x00,0x00,0x1e,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x1e,0x00,0x00,0x00,0x00,
+
+ 8, // 0x4a 'J'
+ 0x00,0x00,0x0f,0x06,0x06,0x06,0x06,0x06,0x06,0x66,0x66,0x3c,0x00,0x00,0x00,0x00,
+
+ 8, // 0x4b 'K'
+ 0x00,0x00,0x73,0x33,0x36,0x36,0x3c,0x36,0x36,0x33,0x33,0x73,0x00,0x00,0x00,0x00,
+
+ 8, // 0x4c 'L'
+ 0x00,0x00,0x78,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x33,0x7f,0x00,0x00,0x00,0x00,
+
+ 8, // 0x4d 'M'
+ 0x00,0x00,0x63,0x63,0x77,0x77,0x7f,0x6b,0x6b,0x63,0x63,0x63,0x00,0x00,0x00,0x00,
+
+ 8, // 0x4e 'N'
+ 0x00,0x00,0x63,0x63,0x73,0x7b,0x6f,0x67,0x63,0x63,0x63,0x63,0x00,0x00,0x00,0x00,
+
+ 8, // 0x4f 'O'
+ 0x00,0x00,0x1c,0x36,0x63,0x63,0x63,0x63,0x63,0x63,0x36,0x1c,0x00,0x00,0x00,0x00,
+
+ 8, // 0x50 'P'
+ 0x00,0x00,0x7e,0x33,0x33,0x33,0x33,0x3e,0x30,0x30,0x30,0x78,0x00,0x00,0x00,0x00,
+
+ 8, // 0x51 'Q'
+ 0x00,0x00,0x1c,0x36,0x63,0x63,0x63,0x63,0x63,0x6f,0x36,0x1e,0x03,0x00,0x00,0x00,
+
+ 8, // 0x52 'R'
+ 0x00,0x00,0x7e,0x33,0x33,0x33,0x33,0x3e,0x36,0x33,0x33,0x73,0x00,0x00,0x00,0x00,
+
+ 8, // 0x53 'S'
+ 0x00,0x00,0x3e,0x63,0x63,0x30,0x18,0x0c,0x06,0x63,0x63,0x3e,0x00,0x00,0x00,0x00,
+
+ 8, // 0x54 'T'
+ 0x00,0x00,0x3f,0x3f,0x2d,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x1e,0x00,0x00,0x00,0x00,
+
+ 8, // 0x55 'U'
+ 0x00,0x00,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x3e,0x00,0x00,0x00,0x00,
+
+ 8, // 0x56 'V'
+ 0x00,0x00,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x36,0x1c,0x08,0x00,0x00,0x00,0x00,
+
+ 8, // 0x57 'W'
+ 0x00,0x00,0x63,0x63,0x63,0x6b,0x6b,0x7f,0x77,0x77,0x63,0x63,0x00,0x00,0x00,0x00,
+
+ 8, // 0x58 'X'
+ 0x00,0x00,0x63,0x63,0x63,0x36,0x1c,0x1c,0x36,0x63,0x63,0x63,0x00,0x00,0x00,0x00,
+
+ 8, // 0x59 'Y'
+ 0x00,0x00,0x33,0x33,0x33,0x33,0x1e,0x0c,0x0c,0x0c,0x0c,0x1e,0x00,0x00,0x00,0x00,
+
+ 8, // 0x5a 'Z'
+ 0x00,0x00,0x7f,0x63,0x43,0x06,0x0c,0x18,0x30,0x61,0x63,0x7f,0x00,0x00,0x00,0x00,
+
+ 8, // 0x5b '['
+ 0x00,0x1f,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1f,0x00,0x00,0x00,
+
+ 8, // 0x5c '\'
+ 0x00,0x60,0x60,0x30,0x30,0x18,0x18,0x0c,0x0c,0x06,0x06,0x03,0x03,0x00,0x00,0x00,
+
+ 8, // 0x5d ']'
+ 0x00,0x7c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x7c,0x00,0x00,0x00,
+
+ 8, // 0x5e '^'
+ 0x00,0x00,0x08,0x1c,0x36,0x63,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x5f '_'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,
+
+ 8, // 0x60 '`'
+ 0x00,0x00,0x18,0x18,0x18,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x61 'a'
+ 0x00,0x00,0x00,0x00,0x00,0x3c,0x66,0x06,0x3e,0x66,0x66,0x3b,0x00,0x00,0x00,0x00,
+
+ 8, // 0x62 'b'
+ 0x00,0x00,0x70,0x30,0x30,0x3c,0x36,0x33,0x33,0x33,0x33,0x3e,0x00,0x00,0x00,0x00,
+
+ 8, // 0x63 'c'
+ 0x00,0x00,0x00,0x00,0x00,0x3e,0x63,0x63,0x60,0x60,0x63,0x3e,0x00,0x00,0x00,0x00,
+
+ 8, // 0x64 'd'
+ 0x00,0x00,0x0e,0x06,0x06,0x1e,0x36,0x66,0x66,0x66,0x66,0x3b,0x00,0x00,0x00,0x00,
+
+ 8, // 0x65 'e'
+ 0x00,0x00,0x00,0x00,0x00,0x3e,0x63,0x63,0x7f,0x60,0x63,0x3e,0x00,0x00,0x00,0x00,
+
+ 8, // 0x66 'f'
+ 0x00,0x00,0x0e,0x1b,0x1b,0x18,0x3c,0x18,0x18,0x18,0x18,0x3c,0x00,0x00,0x00,0x00,
+
+ 8, // 0x67 'g'
+ 0x00,0x00,0x00,0x00,0x00,0x3b,0x66,0x66,0x66,0x66,0x66,0x3e,0x06,0x66,0x3c,0x00,
+
+ 8, // 0x68 'h'
+ 0x00,0x00,0x70,0x30,0x30,0x36,0x3b,0x33,0x33,0x33,0x33,0x73,0x00,0x00,0x00,0x00,
+
+ 8, // 0x69 'i'
+ 0x00,0x00,0x0c,0x0c,0x00,0x1c,0x0c,0x0c,0x0c,0x0c,0x0c,0x1e,0x00,0x00,0x00,0x00,
+
+ 8, // 0x6a 'j'
+ 0x00,0x00,0x06,0x06,0x00,0x0e,0x06,0x06,0x06,0x06,0x06,0x66,0x66,0x3c,0x00,0x00,
+
+ 8, // 0x6b 'k'
+ 0x00,0x00,0x70,0x30,0x30,0x33,0x33,0x36,0x3c,0x36,0x33,0x73,0x00,0x00,0x00,0x00,
+
+ 8, // 0x6c 'l'
+ 0x00,0x00,0x1c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x1e,0x00,0x00,0x00,0x00,
+
+ 8, // 0x6d 'm'
+ 0x00,0x00,0x00,0x00,0x00,0x76,0x7f,0x6b,0x6b,0x6b,0x63,0x63,0x00,0x00,0x00,0x00,
+
+ 8, // 0x6e 'n'
+ 0x00,0x00,0x00,0x00,0x00,0x6e,0x33,0x33,0x33,0x33,0x33,0x33,0x00,0x00,0x00,0x00,
+
+ 8, // 0x6f 'o'
+ 0x00,0x00,0x00,0x00,0x00,0x3e,0x63,0x63,0x63,0x63,0x63,0x3e,0x00,0x00,0x00,0x00,
+
+ 8, // 0x70 'p'
+ 0x00,0x00,0x00,0x00,0x00,0x6e,0x33,0x33,0x33,0x33,0x33,0x3e,0x30,0x30,0x78,0x00,
+
+ 8, // 0x71 'q'
+ 0x00,0x00,0x00,0x00,0x00,0x3b,0x66,0x66,0x66,0x66,0x66,0x3e,0x06,0x06,0x0f,0x00,
+
+ 8, // 0x72 'r'
+ 0x00,0x00,0x00,0x00,0x00,0x6e,0x3b,0x33,0x30,0x30,0x30,0x78,0x00,0x00,0x00,0x00,
+
+ 8, // 0x73 's'
+ 0x00,0x00,0x00,0x00,0x00,0x3e,0x63,0x60,0x3e,0x03,0x63,0x3e,0x00,0x00,0x00,0x00,
+
+ 8, // 0x74 't'
+ 0x00,0x00,0x08,0x18,0x18,0x7e,0x18,0x18,0x18,0x18,0x1b,0x0e,0x00,0x00,0x00,0x00,
+
+ 8, // 0x75 'u'
+ 0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x66,0x66,0x3b,0x00,0x00,0x00,0x00,
+
+ 8, // 0x76 'v'
+ 0x00,0x00,0x00,0x00,0x00,0x63,0x63,0x63,0x63,0x36,0x1c,0x08,0x00,0x00,0x00,0x00,
+
+ 8, // 0x77 'w'
+ 0x00,0x00,0x00,0x00,0x00,0x63,0x63,0x6b,0x6b,0x7f,0x36,0x36,0x00,0x00,0x00,0x00,
+
+ 8, // 0x78 'x'
+ 0x00,0x00,0x00,0x00,0x00,0x63,0x63,0x36,0x1c,0x36,0x63,0x63,0x00,0x00,0x00,0x00,
+
+ 8, // 0x79 'y'
+ 0x00,0x00,0x00,0x00,0x00,0x63,0x63,0x63,0x63,0x63,0x63,0x3f,0x03,0x06,0x7c,0x00,
+
+ 8, // 0x7a 'z'
+ 0x00,0x00,0x00,0x00,0x00,0x7f,0x63,0x06,0x0c,0x18,0x31,0x7f,0x00,0x00,0x00,0x00,
+
+ 8, // 0x7b '{'
+ 0x00,0x03,0x04,0x0c,0x0c,0x0c,0x08,0x30,0x08,0x0c,0x0c,0x0c,0x04,0x03,0x00,0x00,
+
+ 8, // 0x7c '|'
+ 0x00,0x00,0x0c,0x0c,0x0c,0x0c,0x0c,0x00,0x0c,0x0c,0x0c,0x0c,0x0c,0x00,0x00,0x00,
+
+ 8, // 0x7d '}'
+ 0x00,0x60,0x10,0x18,0x18,0x18,0x08,0x06,0x08,0x18,0x18,0x18,0x10,0x60,0x00,0x00,
+
+ 8, // 0x7e '~'
+ 0x00,0x00,0x3b,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x7f ''
+ 0x00,0x00,0x00,0x00,0x00,0x08,0x1c,0x36,0x63,0x63,0x7f,0x00,0x00,0x00,0x00,0x00,
+ 0
+ };
+
+ const int8u mcs11_prop[] =
+ {
+ 11, 2, 32, 128-32,
+ 0x00,0x00,0x0C,0x00,0x18,0x00,0x24,0x00,0x30,0x00,0x3C,0x00,0x48,0x00,0x54,0x00,0x60,0x00,
+ 0x6C,0x00,0x78,0x00,0x84,0x00,0x90,0x00,0x9C,0x00,0xA8,0x00,0xB4,0x00,0xC0,0x00,0xCC,0x00,
+ 0xD8,0x00,0xE4,0x00,0xF0,0x00,0xFC,0x00,0x08,0x01,0x14,0x01,0x20,0x01,0x2C,0x01,0x38,0x01,
+ 0x44,0x01,0x50,0x01,0x5C,0x01,0x68,0x01,0x74,0x01,0x80,0x01,0x8C,0x01,0x98,0x01,0xA4,0x01,
+ 0xB0,0x01,0xBC,0x01,0xC8,0x01,0xD4,0x01,0xE0,0x01,0xEC,0x01,0xF8,0x01,0x04,0x02,0x10,0x02,
+ 0x1C,0x02,0x28,0x02,0x34,0x02,0x40,0x02,0x4C,0x02,0x58,0x02,0x64,0x02,0x70,0x02,0x7C,0x02,
+ 0x88,0x02,0x94,0x02,0xA0,0x02,0xAC,0x02,0xB8,0x02,0xC4,0x02,0xD0,0x02,0xDC,0x02,0xE8,0x02,
+ 0xF4,0x02,0x00,0x03,0x0C,0x03,0x18,0x03,0x24,0x03,0x30,0x03,0x3C,0x03,0x48,0x03,0x54,0x03,
+ 0x60,0x03,0x6C,0x03,0x78,0x03,0x84,0x03,0x90,0x03,0x9C,0x03,0xA8,0x03,0xB4,0x03,0xC0,0x03,
+ 0xCC,0x03,0xD8,0x03,0xE4,0x03,0xF0,0x03,0xFC,0x03,0x08,0x04,0x14,0x04,0x20,0x04,0x2C,0x04,
+ 0x38,0x04,0x44,0x04,0x50,0x04,0x5C,0x04,0x68,0x04,0x74,0x04,
+
+ 5, // 0x20 ' '
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 4, // 0x21 '!'
+ 0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x20,0x00,
+
+ 4, // 0x22 '"'
+ 0x50,0x50,0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 6, // 0x23 '#'
+ 0x00,0x28,0x28,0x7C,0x28,0x28,0x28,0x7C,0x28,0x28,0x00,
+
+ 6, // 0x24 '$'
+ 0x10,0x10,0x38,0x54,0x50,0x38,0x14,0x54,0x38,0x10,0x10,
+
+ 6, // 0x25 '%'
+ 0x00,0x00,0x68,0xA8,0xD0,0x10,0x20,0x2C,0x54,0x58,0x00,
+
+ 6, // 0x26 '&'
+ 0x00,0x20,0x50,0x50,0x50,0x20,0x54,0x54,0x48,0x34,0x00,
+
+ 3, // 0x27 '''
+ 0x40,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 4, // 0x28 '('
+ 0x10,0x20,0x20,0x40,0x40,0x40,0x40,0x40,0x20,0x20,0x10,
+
+ 5, // 0x29 ')'
+ 0x40,0x20,0x20,0x10,0x10,0x10,0x10,0x10,0x20,0x20,0x40,
+
+ 6, // 0x2A '*'
+ 0x00,0x00,0x28,0x7C,0x38,0x7C,0x28,0x00,0x00,0x00,0x00,
+
+ 6, // 0x2B '+'
+ 0x00,0x00,0x00,0x10,0x10,0x7C,0x10,0x10,0x00,0x00,0x00,
+
+ 4, // 0x2C ','
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x60,0xC0,
+
+ 6, // 0x2D '-'
+ 0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,
+
+ 4, // 0x2E '.'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x00,
+
+ 7, // 0x2F '/'
+ 0x00,0x04,0x04,0x08,0x08,0x10,0x10,0x20,0x20,0x40,0x40,
+
+ 6, // 0x30 '0'
+ 0x00,0x38,0x44,0x44,0x54,0x54,0x54,0x44,0x44,0x38,0x00,
+
+ 4, // 0x31 '1'
+ 0x00,0x20,0x60,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,
+
+ 6, // 0x32 '2'
+ 0x00,0x38,0x44,0x44,0x04,0x08,0x10,0x20,0x40,0x7C,0x00,
+
+ 6, // 0x33 '3'
+ 0x00,0x38,0x44,0x04,0x04,0x38,0x04,0x04,0x44,0x38,0x00,
+
+ 6, // 0x34 '4'
+ 0x00,0x08,0x18,0x18,0x28,0x28,0x48,0x7C,0x08,0x08,0x00,
+
+ 6, // 0x35 '5'
+ 0x00,0x7C,0x40,0x40,0x78,0x44,0x04,0x04,0x44,0x38,0x00,
+
+ 6, // 0x36 '6'
+ 0x00,0x38,0x44,0x40,0x40,0x78,0x44,0x44,0x44,0x38,0x00,
+
+ 6, // 0x37 '7'
+ 0x00,0x7C,0x04,0x08,0x08,0x10,0x10,0x20,0x20,0x20,0x00,
+
+ 6, // 0x38 '8'
+ 0x00,0x38,0x44,0x44,0x44,0x38,0x44,0x44,0x44,0x38,0x00,
+
+ 6, // 0x39 '9'
+ 0x00,0x38,0x44,0x44,0x44,0x3C,0x04,0x04,0x44,0x38,0x00,
+
+ 4, // 0x3A ':'
+ 0x00,0x00,0x00,0x60,0x60,0x00,0x00,0x00,0x60,0x60,0x00,
+
+ 4, // 0x3B ';'
+ 0x00,0x00,0x00,0x60,0x60,0x00,0x00,0x00,0x60,0x60,0xC0,
+
+ 6, // 0x3C '<'
+ 0x00,0x04,0x08,0x10,0x20,0x40,0x20,0x10,0x08,0x04,0x00,
+
+ 6, // 0x3D '='
+ 0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x00,
+
+ 6, // 0x3E '>'
+ 0x00,0x40,0x20,0x10,0x08,0x04,0x08,0x10,0x20,0x40,0x00,
+
+ 6, // 0x3F '?'
+ 0x00,0x38,0x44,0x04,0x04,0x08,0x10,0x10,0x00,0x10,0x00,
+
+ 6, // 0x40 '@'
+ 0x00,0x38,0x44,0x44,0x5C,0x54,0x54,0x4C,0x40,0x38,0x00,
+
+ 6, // 0x41 'A'
+ 0x00,0x38,0x44,0x44,0x44,0x44,0x7C,0x44,0x44,0x44,0x00,
+
+ 6, // 0x42 'B'
+ 0x00,0x78,0x44,0x44,0x44,0x78,0x44,0x44,0x44,0x78,0x00,
+
+ 6, // 0x43 'C'
+ 0x00,0x38,0x44,0x40,0x40,0x40,0x40,0x40,0x44,0x38,0x00,
+
+ 6, // 0x44 'D'
+ 0x00,0x70,0x48,0x44,0x44,0x44,0x44,0x44,0x48,0x70,0x00,
+
+ 6, // 0x45 'E'
+ 0x00,0x7C,0x40,0x40,0x40,0x78,0x40,0x40,0x40,0x7C,0x00,
+
+ 6, // 0x46 'F'
+ 0x00,0x7C,0x40,0x40,0x40,0x78,0x40,0x40,0x40,0x40,0x00,
+
+ 6, // 0x47 'G'
+ 0x00,0x38,0x44,0x40,0x40,0x5C,0x44,0x44,0x4C,0x34,0x00,
+
+ 6, // 0x48 'H'
+ 0x00,0x44,0x44,0x44,0x44,0x7C,0x44,0x44,0x44,0x44,0x00,
+
+ 4, // 0x49 'I'
+ 0x00,0x70,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x70,0x00,
+
+ 6, // 0x4A 'J'
+ 0x00,0x1C,0x08,0x08,0x08,0x08,0x08,0x08,0x48,0x30,0x00,
+
+ 6, // 0x4B 'K'
+ 0x00,0x44,0x48,0x50,0x60,0x60,0x50,0x48,0x44,0x44,0x00,
+
+ 6, // 0x4C 'L'
+ 0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x7C,0x00,
+
+ 8, // 0x4D 'M'
+ 0x00,0x41,0x63,0x55,0x49,0x49,0x41,0x41,0x41,0x41,0x00,
+
+ 7, // 0x4E 'N'
+ 0x00,0x42,0x42,0x62,0x52,0x4A,0x46,0x42,0x42,0x42,0x00,
+
+ 6, // 0x4F 'O'
+ 0x00,0x38,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x38,0x00,
+
+ 6, // 0x50 'P'
+ 0x00,0x78,0x44,0x44,0x44,0x78,0x40,0x40,0x40,0x40,0x00,
+
+ 6, // 0x51 'Q'
+ 0x00,0x38,0x44,0x44,0x44,0x44,0x44,0x54,0x48,0x34,0x00,
+
+ 6, // 0x52 'R'
+ 0x00,0x78,0x44,0x44,0x44,0x78,0x44,0x44,0x44,0x44,0x00,
+
+ 6, // 0x53 'S'
+ 0x00,0x38,0x44,0x40,0x40,0x38,0x04,0x04,0x44,0x38,0x00,
+
+ 6, // 0x54 'T'
+ 0x00,0x7C,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00,
+
+ 6, // 0x55 'U'
+ 0x00,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x38,0x00,
+
+ 6, // 0x56 'V'
+ 0x00,0x44,0x44,0x44,0x44,0x28,0x28,0x28,0x10,0x10,0x00,
+
+ 8, // 0x57 'W'
+ 0x00,0x41,0x41,0x41,0x41,0x49,0x49,0x49,0x55,0x22,0x00,
+
+ 6, // 0x58 'X'
+ 0x00,0x44,0x44,0x44,0x28,0x10,0x28,0x44,0x44,0x44,0x00,
+
+ 6, // 0x59 'Y'
+ 0x00,0x44,0x44,0x44,0x28,0x10,0x10,0x10,0x10,0x10,0x00,
+
+ 6, // 0x5A 'Z'
+ 0x00,0x7C,0x04,0x04,0x08,0x10,0x20,0x40,0x40,0x7C,0x00,
+
+ 5, // 0x5B '['
+ 0x30,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x30,
+
+ 7, // 0x5C '\'
+ 0x40,0x40,0x20,0x20,0x10,0x10,0x08,0x08,0x04,0x04,0x00,
+
+ 4, // 0x5D ']'
+ 0x60,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x60,
+
+ 6, // 0x5E '^'
+ 0x00,0x10,0x28,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 6, // 0x5F '_'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,
+
+ 4, // 0x60 '`'
+ 0x00,0x40,0x40,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 6, // 0x61 'a'
+ 0x00,0x00,0x00,0x38,0x04,0x3C,0x44,0x44,0x44,0x3C,0x00,
+
+ 6, // 0x62 'b'
+ 0x00,0x40,0x40,0x78,0x44,0x44,0x44,0x44,0x44,0x78,0x00,
+
+ 6, // 0x63 'c'
+ 0x00,0x00,0x00,0x38,0x44,0x40,0x40,0x40,0x44,0x38,0x00,
+
+ 6, // 0x64 'd'
+ 0x00,0x04,0x04,0x3C,0x44,0x44,0x44,0x44,0x44,0x3C,0x00,
+
+ 6, // 0x65 'e'
+ 0x00,0x00,0x00,0x38,0x44,0x44,0x7C,0x40,0x44,0x38,0x00,
+
+ 4, // 0x66 'f'
+ 0x00,0x10,0x20,0x70,0x20,0x20,0x20,0x20,0x20,0x20,0x00,
+
+ 6, // 0x67 'g'
+ 0x00,0x00,0x00,0x3C,0x44,0x44,0x44,0x3C,0x04,0x44,0x38,
+
+ 6, // 0x68 'h'
+ 0x00,0x40,0x40,0x78,0x44,0x44,0x44,0x44,0x44,0x44,0x00,
+
+ 2, // 0x69 'i'
+ 0x00,0x40,0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,
+
+ 3, // 0x6A 'j'
+ 0x00,0x20,0x00,0x20,0x20,0x20,0x20,0x20,0x20,0xA0,0x40,
+
+ 5, // 0x6B 'k'
+ 0x00,0x40,0x40,0x48,0x50,0x60,0x60,0x50,0x48,0x48,0x00,
+
+ 2, // 0x6C 'l'
+ 0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,
+
+ 8, // 0x6D 'm'
+ 0x00,0x00,0x00,0x76,0x49,0x49,0x49,0x49,0x41,0x41,0x00,
+
+ 6, // 0x6E 'n'
+ 0x00,0x00,0x00,0x78,0x44,0x44,0x44,0x44,0x44,0x44,0x00,
+
+ 6, // 0x6F 'o'
+ 0x00,0x00,0x00,0x38,0x44,0x44,0x44,0x44,0x44,0x38,0x00,
+
+ 6, // 0x70 'p'
+ 0x00,0x00,0x00,0x78,0x44,0x44,0x44,0x44,0x78,0x40,0x40,
+
+ 6, // 0x71 'q'
+ 0x00,0x00,0x00,0x3C,0x44,0x44,0x44,0x44,0x3C,0x04,0x04,
+
+ 6, // 0x72 'r'
+ 0x00,0x00,0x00,0x58,0x24,0x20,0x20,0x20,0x20,0x20,0x00,
+
+ 6, // 0x73 's'
+ 0x00,0x00,0x00,0x38,0x44,0x40,0x38,0x04,0x44,0x38,0x00,
+
+ 5, // 0x74 't'
+ 0x00,0x20,0x20,0x70,0x20,0x20,0x20,0x20,0x28,0x10,0x00,
+
+ 6, // 0x75 'u'
+ 0x00,0x00,0x00,0x44,0x44,0x44,0x44,0x44,0x4C,0x34,0x00,
+
+ 6, // 0x76 'v'
+ 0x00,0x00,0x00,0x44,0x44,0x44,0x28,0x28,0x10,0x10,0x00,
+
+ 8, // 0x77 'w'
+ 0x00,0x00,0x00,0x41,0x41,0x41,0x41,0x49,0x49,0x36,0x00,
+
+ 6, // 0x78 'x'
+ 0x00,0x00,0x00,0x44,0x44,0x28,0x10,0x28,0x44,0x44,0x00,
+
+ 6, // 0x79 'y'
+ 0x00,0x00,0x00,0x44,0x44,0x44,0x44,0x3C,0x04,0x08,0x70,
+
+ 6, // 0x7A 'z'
+ 0x00,0x00,0x00,0x7C,0x04,0x08,0x10,0x20,0x40,0x7C,0x00,
+
+ 5, // 0x7B '{'
+ 0x18,0x20,0x20,0x20,0x20,0xC0,0x20,0x20,0x20,0x20,0x18,
+
+ 3, // 0x7C '|'
+ 0x00,0x40,0x40,0x40,0x40,0x00,0x40,0x40,0x40,0x40,0x00,
+
+ 5, // 0x7D '}'
+ 0xC0,0x20,0x20,0x20,0x20,0x18,0x20,0x20,0x20,0x20,0xC0,
+
+ 6, // 0x7E '~'
+ 0x00,0x24,0x54,0x48,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 6, // 0x7F ''
+ 0x00,0x10,0x38,0x6C,0x44,0x44,0x7C,0x00,0x00,0x00,0x00,
+
+ 0
+ };
+
+ const int8u mcs11_prop_condensed[] =
+ {
+ 11, 2, 32, 128-32,
+ 0x00,0x00,0x0C,0x00,0x18,0x00,0x24,0x00,0x30,0x00,0x3C,0x00,0x48,0x00,0x54,0x00,0x60,0x00,
+ 0x6C,0x00,0x78,0x00,0x84,0x00,0x90,0x00,0x9C,0x00,0xA8,0x00,0xB4,0x00,0xC0,0x00,0xCC,0x00,
+ 0xD8,0x00,0xE4,0x00,0xF0,0x00,0xFC,0x00,0x08,0x01,0x14,0x01,0x20,0x01,0x2C,0x01,0x38,0x01,
+ 0x44,0x01,0x50,0x01,0x5C,0x01,0x68,0x01,0x74,0x01,0x80,0x01,0x8C,0x01,0x98,0x01,0xA4,0x01,
+ 0xB0,0x01,0xBC,0x01,0xC8,0x01,0xD4,0x01,0xE0,0x01,0xEC,0x01,0xF8,0x01,0x04,0x02,0x10,0x02,
+ 0x1C,0x02,0x28,0x02,0x34,0x02,0x40,0x02,0x4C,0x02,0x58,0x02,0x64,0x02,0x70,0x02,0x7C,0x02,
+ 0x88,0x02,0x94,0x02,0xA0,0x02,0xAC,0x02,0xB8,0x02,0xC4,0x02,0xD0,0x02,0xDC,0x02,0xE8,0x02,
+ 0xF4,0x02,0x00,0x03,0x0C,0x03,0x18,0x03,0x24,0x03,0x30,0x03,0x3C,0x03,0x48,0x03,0x54,0x03,
+ 0x60,0x03,0x6C,0x03,0x78,0x03,0x84,0x03,0x90,0x03,0x9C,0x03,0xA8,0x03,0xB4,0x03,0xC0,0x03,
+ 0xCC,0x03,0xD8,0x03,0xE4,0x03,0xF0,0x03,0xFC,0x03,0x08,0x04,0x14,0x04,0x20,0x04,0x2C,0x04,
+ 0x38,0x04,0x44,0x04,0x50,0x04,0x5C,0x04,0x68,0x04,0x74,0x04,
+
+ 3, // 0x20 ' '
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 3, // 0x21 '!'
+ 0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x40,0x00,
+
+ 4, // 0x22 '"'
+ 0x50,0x50,0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 5, // 0x23 '#'
+ 0x00,0x50,0x50,0xF8,0x50,0x50,0x50,0xF8,0x50,0x50,0x00,
+
+ 5, // 0x24 '$'
+ 0x00,0x40,0x60,0x90,0x80,0x60,0x10,0x90,0x60,0x20,0x00,
+
+ 5, // 0x25 '%'
+ 0x00,0x00,0x90,0x90,0x20,0x20,0x40,0x40,0x90,0x90,0x00,
+
+ 5, // 0x26 '&'
+ 0x00,0x40,0xA0,0xA0,0xA0,0x40,0xA8,0x90,0x90,0x68,0x00,
+
+ 5, // 0x27 '''
+ 0x00,0x00,0x20,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 5, // 0x28 '('
+ 0x10,0x20,0x20,0x40,0x40,0x40,0x40,0x40,0x20,0x20,0x10,
+
+ 4, // 0x29 ')'
+ 0x80,0x40,0x40,0x20,0x20,0x20,0x20,0x20,0x40,0x40,0x80,
+
+ 5, // 0x2A '*'
+ 0x00,0x00,0x90,0x60,0xF0,0x60,0x90,0x00,0x00,0x00,0x00,
+
+ 5, // 0x2B '+'
+ 0x00,0x00,0x00,0x20,0x20,0xF8,0x20,0x20,0x00,0x00,0x00,
+
+ 4, // 0x2C ','
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x60,0xC0,
+
+ 5, // 0x2D '-'
+ 0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,
+
+ 4, // 0x2E '.'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0x00,
+
+ 6, // 0x2F '/'
+ 0x08,0x08,0x10,0x10,0x20,0x20,0x40,0x40,0x80,0x80,0x00,
+
+ 5, // 0x30 '0'
+ 0x00,0x70,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0xE0,0x00,
+
+ 3, // 0x31 '1'
+ 0x00,0x40,0xC0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,
+
+ 5, // 0x32 '2'
+ 0x00,0x60,0x90,0x90,0x10,0x10,0x20,0x40,0x80,0xF0,0x00,
+
+ 5, // 0x33 '3'
+ 0x00,0x60,0x90,0x10,0x10,0x60,0x10,0x10,0x90,0x60,0x00,
+
+ 5, // 0x34 '4'
+ 0x00,0x10,0x30,0x30,0x50,0x50,0x90,0xF0,0x10,0x10,0x00,
+
+ 5, // 0x35 '5'
+ 0x00,0xF0,0x80,0x80,0xE0,0x90,0x10,0x10,0x90,0x60,0x00,
+
+ 5, // 0x36 '6'
+ 0x00,0x60,0x90,0x80,0x80,0xE0,0x90,0x90,0x90,0x60,0x00,
+
+ 5, // 0x37 '7'
+ 0x00,0xF0,0x10,0x10,0x10,0x20,0x20,0x40,0x40,0x40,0x00,
+
+ 5, // 0x38 '8'
+ 0x00,0x60,0x90,0x90,0x90,0x60,0x90,0x90,0x90,0x60,0x00,
+
+ 5, // 0x39 '9'
+ 0x00,0x60,0x90,0x90,0x90,0x70,0x10,0x10,0x90,0x60,0x00,
+
+ 4, // 0x3A ':'
+ 0x00,0x00,0x00,0x60,0x60,0x00,0x00,0x00,0x60,0x60,0x00,
+
+ 4, // 0x3B ';'
+ 0x00,0x00,0x00,0x60,0x60,0x00,0x00,0x00,0x60,0x60,0xC0,
+
+ 6, // 0x3C '<'
+ 0x00,0x08,0x10,0x20,0x40,0x80,0x40,0x20,0x10,0x08,0x00,
+
+ 5, // 0x3D '='
+ 0x00,0x00,0x00,0x00,0xF0,0x00,0x00,0xF0,0x00,0x00,0x00,
+
+ 6, // 0x3E '>'
+ 0x00,0x80,0x40,0x20,0x10,0x08,0x10,0x20,0x40,0x80,0x00,
+
+ 5, // 0x3F '?'
+ 0x00,0x60,0x90,0x10,0x10,0x20,0x40,0x00,0x40,0x00,0x00,
+
+ 5, // 0x40 '@'
+ 0x00,0x60,0x90,0x90,0xB0,0xB0,0xB0,0x80,0x80,0x70,0x00,
+
+ 5, // 0x41 'A'
+ 0x00,0x60,0x90,0x90,0x90,0xF0,0x90,0x90,0x90,0x90,0x00,
+
+ 5, // 0x42 'B'
+ 0x00,0xE0,0x90,0x90,0x90,0xE0,0x90,0x90,0x90,0xE0,0x00,
+
+ 5, // 0x43 'C'
+ 0x00,0x60,0x90,0x80,0x80,0x80,0x80,0x80,0x90,0x60,0x00,
+
+ 5, // 0x44 'D'
+ 0x00,0xE0,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0xE0,0x00,
+
+ 5, // 0x45 'E'
+ 0x00,0xF0,0x80,0x80,0x80,0xF0,0x80,0x80,0x80,0xF0,0x00,
+
+ 5, // 0x46 'F'
+ 0x00,0xF0,0x80,0x80,0x80,0xF0,0x80,0x80,0x80,0x80,0x00,
+
+ 5, // 0x47 'G'
+ 0x00,0x70,0x80,0x80,0x80,0xB0,0x90,0x90,0x90,0x60,0x00,
+
+ 5, // 0x48 'H'
+ 0x00,0x90,0x90,0x90,0x90,0xF0,0x90,0x90,0x90,0x90,0x00,
+
+ 4, // 0x49 'I'
+ 0x00,0xE0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xE0,0x00,
+
+ 5, // 0x4A 'J'
+ 0x00,0x70,0x20,0x20,0x20,0x20,0x20,0xA0,0xA0,0x40,0x00,
+
+ 5, // 0x4B 'K'
+ 0x00,0x90,0x90,0xA0,0xA0,0xC0,0xA0,0xA0,0x90,0x90,0x00,
+
+ 5, // 0x4C 'L'
+ 0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xF0,0x00,
+
+ 6, // 0x4D 'M'
+ 0x00,0x88,0xD8,0xA8,0xA8,0xA8,0x88,0x88,0x88,0x88,0x00,
+
+ 5, // 0x4E 'N'
+ 0x00,0x90,0x90,0xD0,0xD0,0xB0,0xB0,0x90,0x90,0x90,0x00,
+
+ 5, // 0x4F 'O'
+ 0x00,0x60,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x60,0x00,
+
+ 5, // 0x50 'P'
+ 0x00,0xE0,0x90,0x90,0x90,0x90,0xE0,0x80,0x80,0x80,0x00,
+
+ 5, // 0x51 'Q'
+ 0x00,0x60,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x60,0x30,
+
+ 5, // 0x52 'R'
+ 0x00,0xE0,0x90,0x90,0x90,0x90,0xE0,0xA0,0x90,0x90,0x00,
+
+ 5, // 0x53 'S'
+ 0x00,0x60,0x90,0x80,0x80,0x60,0x10,0x10,0x90,0x60,0x00,
+
+ 6, // 0x54 'T'
+ 0x00,0xF8,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,
+
+ 5, // 0x55 'U'
+ 0x00,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x60,0x00,
+
+ 6, // 0x56 'V'
+ 0x00,0x88,0x88,0x88,0x88,0x50,0x50,0x50,0x20,0x20,0x00,
+
+ 6, // 0x57 'W'
+ 0x00,0x88,0x88,0x88,0xA8,0xA8,0xA8,0xA8,0xA8,0x50,0x00,
+
+ 5, // 0x58 'X'
+ 0x00,0x90,0x90,0x90,0x60,0x60,0x90,0x90,0x90,0x90,0x00,
+
+ 6, // 0x59 'Y'
+ 0x00,0x88,0x88,0x88,0x50,0x20,0x20,0x20,0x20,0x20,0x00,
+
+ 5, // 0x5A 'Z'
+ 0x00,0xF0,0x10,0x20,0x20,0x40,0x40,0x80,0x80,0xF0,0x00,
+
+ 4, // 0x5B '['
+ 0x60,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x60,0x00,
+
+ 6, // 0x5C '\'
+ 0x80,0x80,0x40,0x40,0x20,0x20,0x10,0x10,0x08,0x08,0x00,
+
+ 4, // 0x5D ']'
+ 0x60,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x60,0x00,
+
+ 5, // 0x5E '^'
+ 0x00,0x20,0x50,0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 5, // 0x5F '_'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x00,
+
+ 5, // 0x60 '`'
+ 0x00,0x40,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 5, // 0x61 'a'
+ 0x00,0x00,0x00,0x60,0x90,0x10,0x70,0x90,0x90,0x70,0x00,
+
+ 5, // 0x62 'b'
+ 0x00,0x80,0x80,0x80,0xE0,0x90,0x90,0x90,0x90,0xE0,0x00,
+
+ 5, // 0x63 'c'
+ 0x00,0x00,0x00,0x60,0x90,0x80,0x80,0x80,0x90,0x60,0x00,
+
+ 5, // 0x64 'd'
+ 0x00,0x10,0x10,0x10,0x70,0x90,0x90,0x90,0x90,0x70,0x00,
+
+ 5, // 0x65 'e'
+ 0x00,0x00,0x00,0x60,0x90,0x90,0xF0,0x80,0x90,0x60,0x00,
+
+ 4, // 0x66 'f'
+ 0x00,0x20,0x40,0x40,0xE0,0x40,0x40,0x40,0x40,0x40,0x00,
+
+ 5, // 0x67 'g'
+ 0x00,0x00,0x00,0x70,0x90,0x90,0x90,0x70,0x10,0x90,0x60,
+
+ 5, // 0x68 'h'
+ 0x00,0x80,0x80,0x80,0xE0,0x90,0x90,0x90,0x90,0x90,0x00,
+
+ 2, // 0x69 'i'
+ 0x00,0x80,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,
+
+ 4, // 0x6A 'j'
+ 0x00,0x20,0x00,0x20,0x20,0x20,0x20,0x20,0x20,0xA0,0x40,
+
+ 5, // 0x6B 'k'
+ 0x00,0x80,0x80,0x90,0x90,0xA0,0xC0,0xA0,0x90,0x90,0x00,
+
+ 2, // 0x6C 'l'
+ 0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,
+
+ 6, // 0x6D 'm'
+ 0x00,0x00,0x00,0xD0,0xA8,0xA8,0xA8,0x88,0x88,0x88,0x00,
+
+ 5, // 0x6E 'n'
+ 0x00,0x00,0x00,0xA0,0xD0,0x90,0x90,0x90,0x90,0x90,0x00,
+
+ 5, // 0x6F 'o'
+ 0x00,0x00,0x00,0x60,0x90,0x90,0x90,0x90,0x90,0x60,0x00,
+
+ 5, // 0x70 'p'
+ 0x00,0x00,0x00,0xE0,0x90,0x90,0x90,0x90,0xE0,0x80,0x80,
+
+ 5, // 0x71 'q'
+ 0x00,0x00,0x00,0x70,0x90,0x90,0x90,0x90,0x70,0x10,0x10,
+
+ 6, // 0x72 'r'
+ 0x00,0x00,0x00,0xB8,0x48,0x40,0x40,0x40,0x40,0x40,0x00,
+
+ 5, // 0x73 's'
+ 0x00,0x00,0x00,0x60,0x90,0x40,0x20,0x10,0x90,0x60,0x00,
+
+ 4, // 0x74 't'
+ 0x00,0x40,0x40,0xE0,0x40,0x40,0x40,0x40,0x40,0x20,0x00,
+
+ 5, // 0x75 'u'
+ 0x00,0x00,0x00,0x90,0x90,0x90,0x90,0x90,0x90,0x70,0x00,
+
+ 6, // 0x76 'v'
+ 0x00,0x00,0x00,0x88,0x88,0x88,0x50,0x50,0x20,0x20,0x00,
+
+ 6, // 0x77 'w'
+ 0x00,0x00,0x00,0x88,0x88,0x88,0xA8,0xA8,0xA8,0x50,0x00,
+
+ 5, // 0x78 'x'
+ 0x00,0x00,0x00,0x90,0x90,0x60,0x60,0x90,0x90,0x90,0x00,
+
+ 5, // 0x79 'y'
+ 0x00,0x00,0x00,0x90,0x90,0x90,0x90,0x70,0x10,0x20,0xC0,
+
+ 5, // 0x7A 'z'
+ 0x00,0x00,0x00,0xF0,0x10,0x20,0x40,0x80,0x80,0xF0,0x00,
+
+ 5, // 0x7B '{'
+ 0x30,0x40,0x40,0x40,0x40,0x80,0x40,0x40,0x40,0x40,0x30,
+
+ 3, // 0x7C '|'
+ 0x00,0x40,0x40,0x40,0x40,0x00,0x40,0x40,0x40,0x40,0x00,
+
+ 5, // 0x7D '}'
+ 0xC0,0x20,0x20,0x20,0x20,0x10,0x20,0x20,0x20,0x20,0xC0,
+
+ 5, // 0x7E '~'
+ 0x00,0x40,0xA8,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 5, // 0x7F ''
+ 0x00,0x20,0x70,0xD8,0x88,0x88,0xF8,0x00,0x00,0x00,0x00,
+
+ 0
+ };
+
+ const int8u mcs12_prop[] =
+ {
+ 12, 3, 32, 128-32,
+ 0x00,0x00,0x0D,0x00,0x1A,0x00,0x27,0x00,0x34,0x00,0x41,0x00,0x4E,0x00,0x5B,0x00,0x68,0x00,
+ 0x75,0x00,0x82,0x00,0x8F,0x00,0x9C,0x00,0xA9,0x00,0xB6,0x00,0xC3,0x00,0xD0,0x00,0xDD,0x00,
+ 0xEA,0x00,0xF7,0x00,0x04,0x01,0x11,0x01,0x1E,0x01,0x2B,0x01,0x38,0x01,0x45,0x01,0x52,0x01,
+ 0x5F,0x01,0x6C,0x01,0x79,0x01,0x86,0x01,0x93,0x01,0xA0,0x01,0xAD,0x01,0xBA,0x01,0xC7,0x01,
+ 0xD4,0x01,0xE1,0x01,0xEE,0x01,0xFB,0x01,0x08,0x02,0x15,0x02,0x22,0x02,0x2F,0x02,0x3C,0x02,
+ 0x49,0x02,0x62,0x02,0x6F,0x02,0x7C,0x02,0x89,0x02,0x96,0x02,0xA3,0x02,0xB0,0x02,0xBD,0x02,
+ 0xCA,0x02,0xD7,0x02,0xF0,0x02,0xFD,0x02,0x0A,0x03,0x17,0x03,0x24,0x03,0x31,0x03,0x3E,0x03,
+ 0x4B,0x03,0x58,0x03,0x65,0x03,0x72,0x03,0x7F,0x03,0x8C,0x03,0x99,0x03,0xA6,0x03,0xB3,0x03,
+ 0xC0,0x03,0xCD,0x03,0xDA,0x03,0xE7,0x03,0xF4,0x03,0x01,0x04,0x1A,0x04,0x27,0x04,0x34,0x04,
+ 0x41,0x04,0x4E,0x04,0x5B,0x04,0x68,0x04,0x75,0x04,0x82,0x04,0x8F,0x04,0xA8,0x04,0xB5,0x04,
+ 0xC2,0x04,0xCF,0x04,0xDC,0x04,0xE9,0x04,0xF6,0x04,0x03,0x05,
+
+ 5, // 0x20 ' '
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 4, // 0x21 '!'
+ 0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x20,0x00,0x00,
+
+ 4, // 0x22 '"'
+ 0x50,0x50,0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 6, // 0x23 '#'
+ 0x28,0x28,0x28,0x7C,0x28,0x28,0x28,0x7C,0x28,0x28,0x28,0x00,
+
+ 6, // 0x24 '$'
+ 0x10,0x10,0x38,0x54,0x50,0x38,0x14,0x54,0x38,0x10,0x10,0x00,
+
+ 7, // 0x25 '%'
+ 0x32,0x54,0x64,0x08,0x08,0x10,0x10,0x26,0x2A,0x4C,0x00,0x00,
+
+ 7, // 0x26 '&'
+ 0x00,0x30,0x48,0x48,0x48,0x30,0x4A,0x4A,0x44,0x3A,0x00,0x00,
+
+ 3, // 0x27 '''
+ 0x40,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 5, // 0x28 '('
+ 0x10,0x20,0x20,0x40,0x40,0x40,0x40,0x40,0x20,0x20,0x10,0x00,
+
+ 5, // 0x29 ')'
+ 0x40,0x20,0x20,0x10,0x10,0x10,0x10,0x10,0x20,0x20,0x40,0x00,
+
+ 6, // 0x2A '*'
+ 0x00,0x00,0x10,0x54,0x38,0x7C,0x38,0x54,0x10,0x00,0x00,0x00,
+
+ 6, // 0x2B '+'
+ 0x00,0x00,0x00,0x00,0x10,0x10,0x7C,0x10,0x10,0x00,0x00,0x00,
+
+ 4, // 0x2C ','
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x40,0x80,
+
+ 6, // 0x2D '-'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,
+
+ 4, // 0x2E '.'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x00,0x00,
+
+ 7, // 0x2F '/'
+ 0x00,0x04,0x04,0x08,0x08,0x10,0x10,0x20,0x20,0x40,0x40,0x00,
+
+ 7, // 0x30 '0'
+ 0x00,0x38,0x44,0x44,0x54,0x54,0x54,0x44,0x44,0x38,0x00,0x00,
+
+ 4, // 0x31 '1'
+ 0x00,0x20,0x60,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x00,
+
+ 7, // 0x32 '2'
+ 0x00,0x38,0x44,0x04,0x04,0x08,0x10,0x20,0x40,0x7C,0x00,0x00,
+
+ 7, // 0x33 '3'
+ 0x00,0x38,0x44,0x04,0x04,0x38,0x04,0x04,0x44,0x38,0x00,0x00,
+
+ 6, // 0x34 '4'
+ 0x00,0x08,0x18,0x28,0x28,0x48,0x48,0x7C,0x08,0x08,0x00,0x00,
+
+ 7, // 0x35 '5'
+ 0x00,0x7C,0x40,0x40,0x78,0x44,0x04,0x04,0x44,0x38,0x00,0x00,
+
+ 7, // 0x36 '6'
+ 0x00,0x38,0x44,0x40,0x78,0x44,0x44,0x44,0x44,0x38,0x00,0x00,
+
+ 6, // 0x37 '7'
+ 0x00,0x7C,0x04,0x08,0x08,0x10,0x10,0x20,0x20,0x20,0x00,0x00,
+
+ 7, // 0x38 '8'
+ 0x00,0x38,0x44,0x44,0x44,0x38,0x44,0x44,0x44,0x38,0x00,0x00,
+
+ 7, // 0x39 '9'
+ 0x00,0x38,0x44,0x44,0x44,0x3C,0x04,0x04,0x44,0x38,0x00,0x00,
+
+ 4, // 0x3A ':'
+ 0x00,0x00,0x00,0x60,0x60,0x00,0x00,0x00,0x60,0x60,0x00,0x00,
+
+ 4, // 0x3B ';'
+ 0x00,0x00,0x00,0x60,0x60,0x00,0x00,0x00,0x60,0x60,0x40,0x80,
+
+ 6, // 0x3C '<'
+ 0x00,0x00,0x04,0x08,0x10,0x20,0x40,0x20,0x10,0x08,0x04,0x00,
+
+ 6, // 0x3D '='
+ 0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,
+
+ 6, // 0x3E '>'
+ 0x00,0x00,0x40,0x20,0x10,0x08,0x04,0x08,0x10,0x20,0x40,0x00,
+
+ 6, // 0x3F '?'
+ 0x00,0x38,0x44,0x04,0x04,0x08,0x10,0x10,0x00,0x10,0x00,0x00,
+
+ 7, // 0x40 '@'
+ 0x00,0x38,0x44,0x44,0x5C,0x54,0x54,0x4C,0x40,0x38,0x00,0x00,
+
+ 7, // 0x41 'A'
+ 0x00,0x38,0x44,0x44,0x44,0x7C,0x44,0x44,0x44,0x44,0x00,0x00,
+
+ 7, // 0x42 'B'
+ 0x00,0x78,0x44,0x44,0x44,0x78,0x44,0x44,0x44,0x78,0x00,0x00,
+
+ 6, // 0x43 'C'
+ 0x00,0x38,0x44,0x40,0x40,0x40,0x40,0x40,0x44,0x38,0x00,0x00,
+
+ 7, // 0x44 'D'
+ 0x00,0x70,0x48,0x44,0x44,0x44,0x44,0x44,0x48,0x70,0x00,0x00,
+
+ 6, // 0x45 'E'
+ 0x00,0x7C,0x40,0x40,0x40,0x78,0x40,0x40,0x40,0x7C,0x00,0x00,
+
+ 6, // 0x46 'F'
+ 0x00,0x7C,0x40,0x40,0x40,0x78,0x40,0x40,0x40,0x40,0x00,0x00,
+
+ 7, // 0x47 'G'
+ 0x00,0x38,0x44,0x40,0x40,0x5C,0x44,0x44,0x4C,0x34,0x00,0x00,
+
+ 7, // 0x48 'H'
+ 0x00,0x44,0x44,0x44,0x44,0x7C,0x44,0x44,0x44,0x44,0x00,0x00,
+
+ 5, // 0x49 'I'
+ 0x00,0x70,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x70,0x00,0x00,
+
+ 6, // 0x4A 'J'
+ 0x00,0x1C,0x08,0x08,0x08,0x08,0x08,0x48,0x48,0x30,0x00,0x00,
+
+ 6, // 0x4B 'K'
+ 0x00,0x44,0x48,0x50,0x60,0x60,0x50,0x48,0x44,0x44,0x00,0x00,
+
+ 6, // 0x4C 'L'
+ 0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x7C,0x00,0x00,
+
+ 9, // 0x4D 'M'
+ 0x00,0x00,0x41,0x00,0x63,0x00,0x55,0x00,0x49,0x00,0x49,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x4E 'N'
+ 0x00,0x44,0x64,0x64,0x54,0x54,0x4C,0x4C,0x44,0x44,0x00,0x00,
+
+ 7, // 0x4F 'O'
+ 0x00,0x38,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x38,0x00,0x00,
+
+ 7, // 0x50 'P'
+ 0x00,0x78,0x44,0x44,0x44,0x44,0x78,0x40,0x40,0x40,0x00,0x00,
+
+ 7, // 0x51 'Q'
+ 0x00,0x38,0x44,0x44,0x44,0x44,0x44,0x54,0x48,0x34,0x00,0x00,
+
+ 7, // 0x52 'R'
+ 0x00,0x78,0x44,0x44,0x44,0x44,0x78,0x48,0x44,0x44,0x00,0x00,
+
+ 7, // 0x53 'S'
+ 0x00,0x38,0x44,0x40,0x40,0x38,0x04,0x04,0x44,0x38,0x00,0x00,
+
+ 6, // 0x54 'T'
+ 0x00,0x7C,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00,
+
+ 7, // 0x55 'U'
+ 0x00,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x38,0x00,0x00,
+
+ 6, // 0x56 'V'
+ 0x00,0x44,0x44,0x44,0x44,0x28,0x28,0x28,0x10,0x10,0x00,0x00,
+
+ 9, // 0x57 'W'
+ 0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x49,0x00,0x49,0x00,0x55,0x00,0x22,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x58 'X'
+ 0x00,0x44,0x44,0x44,0x28,0x10,0x28,0x44,0x44,0x44,0x00,0x00,
+
+ 7, // 0x59 'Y'
+ 0x00,0x44,0x44,0x44,0x44,0x28,0x10,0x10,0x10,0x10,0x00,0x00,
+
+ 6, // 0x5A 'Z'
+ 0x00,0x7C,0x04,0x04,0x08,0x10,0x20,0x40,0x40,0x7C,0x00,0x00,
+
+ 4, // 0x5B '['
+ 0x70,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x70,0x00,
+
+ 7, // 0x5C '\'
+ 0x00,0x40,0x40,0x20,0x20,0x10,0x10,0x08,0x08,0x04,0x04,0x00,
+
+ 4, // 0x5D ']'
+ 0xE0,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xE0,0x00,
+
+ 6, // 0x5E '^'
+ 0x00,0x10,0x28,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 6, // 0x5F '_'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,
+
+ 4, // 0x60 '`'
+ 0x00,0x40,0x40,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x61 'a'
+ 0x00,0x00,0x00,0x38,0x04,0x3C,0x44,0x44,0x44,0x3C,0x00,0x00,
+
+ 7, // 0x62 'b'
+ 0x00,0x40,0x40,0x78,0x44,0x44,0x44,0x44,0x44,0x78,0x00,0x00,
+
+ 6, // 0x63 'c'
+ 0x00,0x00,0x00,0x38,0x44,0x40,0x40,0x40,0x44,0x38,0x00,0x00,
+
+ 7, // 0x64 'd'
+ 0x00,0x04,0x04,0x3C,0x44,0x44,0x44,0x44,0x44,0x3C,0x00,0x00,
+
+ 7, // 0x65 'e'
+ 0x00,0x00,0x00,0x38,0x44,0x44,0x7C,0x40,0x44,0x38,0x00,0x00,
+
+ 4, // 0x66 'f'
+ 0x00,0x30,0x40,0xE0,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x00,
+
+ 7, // 0x67 'g'
+ 0x00,0x00,0x00,0x3C,0x44,0x44,0x44,0x44,0x44,0x3C,0x04,0x78,
+
+ 7, // 0x68 'h'
+ 0x00,0x40,0x40,0x78,0x44,0x44,0x44,0x44,0x44,0x44,0x00,0x00,
+
+ 3, // 0x69 'i'
+ 0x00,0x40,0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x00,
+
+ 5, // 0x6A 'j'
+ 0x00,0x10,0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x90,0x60,
+
+ 6, // 0x6B 'k'
+ 0x00,0x40,0x40,0x44,0x48,0x50,0x60,0x50,0x48,0x44,0x00,0x00,
+
+ 3, // 0x6C 'l'
+ 0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x00,
+
+ 9, // 0x6D 'm'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x76,0x00,0x49,0x00,0x49,0x00,0x49,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x6E 'n'
+ 0x00,0x00,0x00,0x58,0x64,0x44,0x44,0x44,0x44,0x44,0x00,0x00,
+
+ 7, // 0x6F 'o'
+ 0x00,0x00,0x00,0x38,0x44,0x44,0x44,0x44,0x44,0x38,0x00,0x00,
+
+ 7, // 0x70 'p'
+ 0x00,0x00,0x00,0x78,0x44,0x44,0x44,0x44,0x44,0x78,0x40,0x40,
+
+ 7, // 0x71 'q'
+ 0x00,0x00,0x00,0x3C,0x44,0x44,0x44,0x44,0x44,0x3C,0x04,0x04,
+
+ 6, // 0x72 'r'
+ 0x00,0x00,0x00,0x58,0x24,0x20,0x20,0x20,0x20,0x70,0x00,0x00,
+
+ 7, // 0x73 's'
+ 0x00,0x00,0x00,0x38,0x44,0x40,0x38,0x04,0x44,0x38,0x00,0x00,
+
+ 5, // 0x74 't'
+ 0x00,0x20,0x20,0x70,0x20,0x20,0x20,0x20,0x20,0x18,0x00,0x00,
+
+ 7, // 0x75 'u'
+ 0x00,0x00,0x00,0x44,0x44,0x44,0x44,0x44,0x4C,0x34,0x00,0x00,
+
+ 6, // 0x76 'v'
+ 0x00,0x00,0x00,0x44,0x44,0x44,0x28,0x28,0x10,0x10,0x00,0x00,
+
+ 9, // 0x77 'w'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x49,0x00,0x49,0x00,0x49,0x00,0x36,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x78 'x'
+ 0x00,0x00,0x00,0x44,0x44,0x28,0x10,0x28,0x44,0x44,0x00,0x00,
+
+ 7, // 0x79 'y'
+ 0x00,0x00,0x00,0x44,0x44,0x44,0x44,0x44,0x44,0x3C,0x08,0x70,
+
+ 6, // 0x7A 'z'
+ 0x00,0x00,0x00,0x7C,0x04,0x08,0x10,0x20,0x40,0x7C,0x00,0x00,
+
+ 5, // 0x7B '{'
+ 0x18,0x20,0x20,0x20,0x20,0xC0,0x20,0x20,0x20,0x20,0x18,0x00,
+
+ 3, // 0x7C '|'
+ 0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,
+
+ 5, // 0x7D '}'
+ 0xC0,0x20,0x20,0x20,0x20,0x18,0x20,0x20,0x20,0x20,0xC0,0x00,
+
+ 7, // 0x7E '~'
+ 0x00,0x60,0x92,0x92,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x7F ''
+ 0x00,0x10,0x38,0x6C,0x44,0x44,0x7C,0x00,0x00,0x00,0x00,0x00,
+
+ 0
+ };
+
+ const int8u mcs13_prop[] =
+ {
+ 13, 4, 32, 128-32,
+ 0x00,0x00,0x0E,0x00,0x1C,0x00,0x2A,0x00,0x38,0x00,0x46,0x00,0x54,0x00,0x62,0x00,0x70,0x00,
+ 0x7E,0x00,0x8C,0x00,0x9A,0x00,0xA8,0x00,0xB6,0x00,0xC4,0x00,0xD2,0x00,0xE0,0x00,0xEE,0x00,
+ 0xFC,0x00,0x0A,0x01,0x18,0x01,0x26,0x01,0x34,0x01,0x42,0x01,0x50,0x01,0x5E,0x01,0x6C,0x01,
+ 0x7A,0x01,0x88,0x01,0x96,0x01,0xA4,0x01,0xB2,0x01,0xC0,0x01,0xCE,0x01,0xDC,0x01,0xEA,0x01,
+ 0xF8,0x01,0x06,0x02,0x14,0x02,0x22,0x02,0x30,0x02,0x3E,0x02,0x4C,0x02,0x5A,0x02,0x68,0x02,
+ 0x76,0x02,0x91,0x02,0x9F,0x02,0xAD,0x02,0xBB,0x02,0xC9,0x02,0xD7,0x02,0xE5,0x02,0xF3,0x02,
+ 0x01,0x03,0x0F,0x03,0x2A,0x03,0x38,0x03,0x46,0x03,0x54,0x03,0x62,0x03,0x70,0x03,0x7E,0x03,
+ 0x8C,0x03,0x9A,0x03,0xA8,0x03,0xB6,0x03,0xC4,0x03,0xD2,0x03,0xE0,0x03,0xEE,0x03,0xFC,0x03,
+ 0x0A,0x04,0x18,0x04,0x26,0x04,0x34,0x04,0x42,0x04,0x50,0x04,0x6B,0x04,0x79,0x04,0x87,0x04,
+ 0x95,0x04,0xA3,0x04,0xB1,0x04,0xBF,0x04,0xCD,0x04,0xDB,0x04,0xE9,0x04,0x04,0x05,0x12,0x05,
+ 0x20,0x05,0x2E,0x05,0x3C,0x05,0x4A,0x05,0x58,0x05,0x66,0x05,
+
+ 5, // 0x20 ' '
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 4, // 0x21 '!'
+ 0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x20,0x00,0x00,
+
+ 4, // 0x22 '"'
+ 0x00,0x50,0x50,0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 6, // 0x23 '#'
+ 0x00,0x28,0x28,0x28,0x7C,0x28,0x28,0x28,0x7C,0x28,0x28,0x28,0x00,
+
+ 6, // 0x24 '$'
+ 0x00,0x10,0x10,0x38,0x54,0x50,0x38,0x14,0x54,0x38,0x10,0x10,0x00,
+
+ 7, // 0x25 '%'
+ 0x00,0x32,0x54,0x64,0x08,0x08,0x10,0x10,0x26,0x2A,0x4C,0x00,0x00,
+
+ 7, // 0x26 '&'
+ 0x00,0x30,0x48,0x48,0x48,0x30,0x4A,0x4A,0x44,0x3A,0x00,0x00,0x00,
+
+ 3, // 0x27 '''
+ 0x00,0x40,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 5, // 0x28 '('
+ 0x10,0x20,0x20,0x40,0x40,0x40,0x40,0x40,0x20,0x20,0x10,0x00,0x00,
+
+ 5, // 0x29 ')'
+ 0x40,0x20,0x20,0x10,0x10,0x10,0x10,0x10,0x20,0x20,0x40,0x00,0x00,
+
+ 6, // 0x2A '*'
+ 0x00,0x00,0x10,0x54,0x38,0x7C,0x38,0x54,0x10,0x00,0x00,0x00,0x00,
+
+ 6, // 0x2B '+'
+ 0x00,0x00,0x00,0x00,0x10,0x10,0x7C,0x10,0x10,0x00,0x00,0x00,0x00,
+
+ 4, // 0x2C ','
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x20,0x40,0x80,
+
+ 6, // 0x2D '-'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 4, // 0x2E '.'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x00,0x00,0x00,
+
+ 7, // 0x2F '/'
+ 0x00,0x04,0x04,0x08,0x08,0x10,0x10,0x20,0x20,0x40,0x40,0x00,0x00,
+
+ 7, // 0x30 '0'
+ 0x00,0x38,0x44,0x44,0x54,0x54,0x54,0x44,0x44,0x38,0x00,0x00,0x00,
+
+ 4, // 0x31 '1'
+ 0x00,0x20,0x60,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x00,0x00,
+
+ 7, // 0x32 '2'
+ 0x00,0x38,0x44,0x04,0x04,0x08,0x10,0x20,0x40,0x7C,0x00,0x00,0x00,
+
+ 7, // 0x33 '3'
+ 0x00,0x38,0x44,0x04,0x04,0x38,0x04,0x04,0x44,0x38,0x00,0x00,0x00,
+
+ 6, // 0x34 '4'
+ 0x00,0x08,0x18,0x28,0x28,0x48,0x48,0x7C,0x08,0x08,0x00,0x00,0x00,
+
+ 7, // 0x35 '5'
+ 0x00,0x7C,0x40,0x40,0x78,0x44,0x04,0x04,0x44,0x38,0x00,0x00,0x00,
+
+ 7, // 0x36 '6'
+ 0x00,0x38,0x44,0x40,0x78,0x44,0x44,0x44,0x44,0x38,0x00,0x00,0x00,
+
+ 6, // 0x37 '7'
+ 0x00,0x7C,0x04,0x08,0x08,0x10,0x10,0x20,0x20,0x20,0x00,0x00,0x00,
+
+ 7, // 0x38 '8'
+ 0x00,0x38,0x44,0x44,0x44,0x38,0x44,0x44,0x44,0x38,0x00,0x00,0x00,
+
+ 7, // 0x39 '9'
+ 0x00,0x38,0x44,0x44,0x44,0x3C,0x04,0x04,0x44,0x38,0x00,0x00,0x00,
+
+ 4, // 0x3A ':'
+ 0x00,0x00,0x00,0x60,0x60,0x00,0x00,0x00,0x60,0x60,0x00,0x00,0x00,
+
+ 4, // 0x3B ';'
+ 0x00,0x00,0x00,0x60,0x60,0x00,0x00,0x00,0x60,0x60,0x20,0x40,0x80,
+
+ 6, // 0x3C '<'
+ 0x00,0x00,0x04,0x08,0x10,0x20,0x40,0x20,0x10,0x08,0x04,0x00,0x00,
+
+ 6, // 0x3D '='
+ 0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,
+
+ 6, // 0x3E '>'
+ 0x00,0x00,0x40,0x20,0x10,0x08,0x04,0x08,0x10,0x20,0x40,0x00,0x00,
+
+ 6, // 0x3F '?'
+ 0x00,0x38,0x44,0x04,0x04,0x08,0x10,0x10,0x00,0x10,0x00,0x00,0x00,
+
+ 7, // 0x40 '@'
+ 0x00,0x38,0x44,0x44,0x5C,0x54,0x54,0x4C,0x40,0x38,0x00,0x00,0x00,
+
+ 7, // 0x41 'A'
+ 0x00,0x38,0x44,0x44,0x44,0x7C,0x44,0x44,0x44,0x44,0x00,0x00,0x00,
+
+ 7, // 0x42 'B'
+ 0x00,0x78,0x44,0x44,0x44,0x78,0x44,0x44,0x44,0x78,0x00,0x00,0x00,
+
+ 6, // 0x43 'C'
+ 0x00,0x38,0x44,0x40,0x40,0x40,0x40,0x40,0x44,0x38,0x00,0x00,0x00,
+
+ 7, // 0x44 'D'
+ 0x00,0x70,0x48,0x44,0x44,0x44,0x44,0x44,0x48,0x70,0x00,0x00,0x00,
+
+ 6, // 0x45 'E'
+ 0x00,0x7C,0x40,0x40,0x40,0x78,0x40,0x40,0x40,0x7C,0x00,0x00,0x00,
+
+ 6, // 0x46 'F'
+ 0x00,0x7C,0x40,0x40,0x40,0x78,0x40,0x40,0x40,0x40,0x00,0x00,0x00,
+
+ 7, // 0x47 'G'
+ 0x00,0x38,0x44,0x40,0x40,0x5C,0x44,0x44,0x4C,0x34,0x00,0x00,0x00,
+
+ 7, // 0x48 'H'
+ 0x00,0x44,0x44,0x44,0x44,0x7C,0x44,0x44,0x44,0x44,0x00,0x00,0x00,
+
+ 5, // 0x49 'I'
+ 0x00,0x70,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x70,0x00,0x00,0x00,
+
+ 6, // 0x4A 'J'
+ 0x00,0x1C,0x08,0x08,0x08,0x08,0x08,0x48,0x48,0x30,0x00,0x00,0x00,
+
+ 6, // 0x4B 'K'
+ 0x00,0x44,0x48,0x50,0x60,0x60,0x50,0x48,0x44,0x44,0x00,0x00,0x00,
+
+ 6, // 0x4C 'L'
+ 0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x7C,0x00,0x00,0x00,
+
+ 9, // 0x4D 'M'
+ 0x00,0x00,0x41,0x00,0x63,0x00,0x55,0x00,0x49,0x00,0x49,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x4E 'N'
+ 0x00,0x44,0x64,0x64,0x54,0x54,0x4C,0x4C,0x44,0x44,0x00,0x00,0x00,
+
+ 7, // 0x4F 'O'
+ 0x00,0x38,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x38,0x00,0x00,0x00,
+
+ 7, // 0x50 'P'
+ 0x00,0x78,0x44,0x44,0x44,0x44,0x78,0x40,0x40,0x40,0x00,0x00,0x00,
+
+ 7, // 0x51 'Q'
+ 0x00,0x38,0x44,0x44,0x44,0x44,0x44,0x54,0x48,0x34,0x00,0x00,0x00,
+
+ 7, // 0x52 'R'
+ 0x00,0x78,0x44,0x44,0x44,0x44,0x78,0x48,0x44,0x44,0x00,0x00,0x00,
+
+ 7, // 0x53 'S'
+ 0x00,0x38,0x44,0x40,0x40,0x38,0x04,0x04,0x44,0x38,0x00,0x00,0x00,
+
+ 6, // 0x54 'T'
+ 0x00,0x7C,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00,0x00,
+
+ 7, // 0x55 'U'
+ 0x00,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x38,0x00,0x00,0x00,
+
+ 6, // 0x56 'V'
+ 0x00,0x44,0x44,0x44,0x44,0x28,0x28,0x28,0x10,0x10,0x00,0x00,0x00,
+
+ 9, // 0x57 'W'
+ 0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x49,0x00,0x49,0x00,0x55,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x58 'X'
+ 0x00,0x44,0x44,0x44,0x28,0x10,0x28,0x44,0x44,0x44,0x00,0x00,0x00,
+
+ 7, // 0x59 'Y'
+ 0x00,0x44,0x44,0x44,0x44,0x28,0x10,0x10,0x10,0x10,0x00,0x00,0x00,
+
+ 6, // 0x5A 'Z'
+ 0x00,0x7C,0x04,0x04,0x08,0x10,0x20,0x40,0x40,0x7C,0x00,0x00,0x00,
+
+ 4, // 0x5B '['
+ 0x70,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x70,0x00,0x00,
+
+ 7, // 0x5C '\'
+ 0x00,0x40,0x40,0x20,0x20,0x10,0x10,0x08,0x08,0x04,0x04,0x00,0x00,
+
+ 4, // 0x5D ']'
+ 0xE0,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xE0,0x00,0x00,
+
+ 6, // 0x5E '^'
+ 0x00,0x10,0x28,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 6, // 0x5F '_'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,
+
+ 4, // 0x60 '`'
+ 0x00,0x40,0x40,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x61 'a'
+ 0x00,0x00,0x00,0x38,0x04,0x3C,0x44,0x44,0x44,0x3C,0x00,0x00,0x00,
+
+ 7, // 0x62 'b'
+ 0x00,0x40,0x40,0x78,0x44,0x44,0x44,0x44,0x44,0x78,0x00,0x00,0x00,
+
+ 6, // 0x63 'c'
+ 0x00,0x00,0x00,0x38,0x44,0x40,0x40,0x40,0x44,0x38,0x00,0x00,0x00,
+
+ 7, // 0x64 'd'
+ 0x00,0x04,0x04,0x3C,0x44,0x44,0x44,0x44,0x44,0x3C,0x00,0x00,0x00,
+
+ 7, // 0x65 'e'
+ 0x00,0x00,0x00,0x38,0x44,0x44,0x7C,0x40,0x44,0x38,0x00,0x00,0x00,
+
+ 4, // 0x66 'f'
+ 0x00,0x30,0x40,0xE0,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x00,
+
+ 7, // 0x67 'g'
+ 0x00,0x00,0x00,0x3C,0x44,0x44,0x44,0x44,0x44,0x3C,0x04,0x44,0x38,
+
+ 7, // 0x68 'h'
+ 0x00,0x40,0x40,0x78,0x44,0x44,0x44,0x44,0x44,0x44,0x00,0x00,0x00,
+
+ 3, // 0x69 'i'
+ 0x00,0x40,0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x00,
+
+ 5, // 0x6A 'j'
+ 0x00,0x10,0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x90,0x60,0x00,
+
+ 6, // 0x6B 'k'
+ 0x00,0x40,0x40,0x44,0x48,0x50,0x60,0x50,0x48,0x44,0x00,0x00,0x00,
+
+ 3, // 0x6C 'l'
+ 0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x00,
+
+ 9, // 0x6D 'm'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x76,0x00,0x49,0x00,0x49,0x00,0x49,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x6E 'n'
+ 0x00,0x00,0x00,0x58,0x64,0x44,0x44,0x44,0x44,0x44,0x00,0x00,0x00,
+
+ 7, // 0x6F 'o'
+ 0x00,0x00,0x00,0x38,0x44,0x44,0x44,0x44,0x44,0x38,0x00,0x00,0x00,
+
+ 7, // 0x70 'p'
+ 0x00,0x00,0x00,0x78,0x44,0x44,0x44,0x44,0x44,0x78,0x40,0x40,0x40,
+
+ 7, // 0x71 'q'
+ 0x00,0x00,0x00,0x3C,0x44,0x44,0x44,0x44,0x44,0x3C,0x04,0x04,0x04,
+
+ 6, // 0x72 'r'
+ 0x00,0x00,0x00,0x58,0x24,0x20,0x20,0x20,0x20,0x70,0x00,0x00,0x00,
+
+ 7, // 0x73 's'
+ 0x00,0x00,0x00,0x38,0x44,0x40,0x38,0x04,0x44,0x38,0x00,0x00,0x00,
+
+ 5, // 0x74 't'
+ 0x00,0x20,0x20,0x70,0x20,0x20,0x20,0x20,0x20,0x18,0x00,0x00,0x00,
+
+ 7, // 0x75 'u'
+ 0x00,0x00,0x00,0x44,0x44,0x44,0x44,0x44,0x4C,0x34,0x00,0x00,0x00,
+
+ 6, // 0x76 'v'
+ 0x00,0x00,0x00,0x44,0x44,0x44,0x28,0x28,0x10,0x10,0x00,0x00,0x00,
+
+ 9, // 0x77 'w'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x49,0x00,0x49,0x00,0x49,0x00,0x36,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x78 'x'
+ 0x00,0x00,0x00,0x44,0x44,0x28,0x10,0x28,0x44,0x44,0x00,0x00,0x00,
+
+ 7, // 0x79 'y'
+ 0x00,0x00,0x00,0x44,0x44,0x44,0x44,0x44,0x44,0x3C,0x04,0x08,0x70,
+
+ 6, // 0x7A 'z'
+ 0x00,0x00,0x00,0x7C,0x04,0x08,0x10,0x20,0x40,0x7C,0x00,0x00,0x00,
+
+ 5, // 0x7B '{'
+ 0x18,0x20,0x20,0x20,0x20,0xC0,0x20,0x20,0x20,0x20,0x18,0x00,0x00,
+
+ 3, // 0x7C '|'
+ 0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x00,
+
+ 5, // 0x7D '}'
+ 0xC0,0x20,0x20,0x20,0x20,0x18,0x20,0x20,0x20,0x20,0xC0,0x00,0x00,
+
+ 7, // 0x7E '~'
+ 0x00,0x60,0x92,0x92,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x7F ''
+ 0x00,0x10,0x38,0x6C,0x44,0x44,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 0
+ };
+
+ const int8u mcs5x10_mono[] =
+ {
+ 10, 2, 32, 128-32,
+ 0x00,0x00,0x0B,0x00,0x16,0x00,0x21,0x00,0x2C,0x00,0x37,0x00,0x42,0x00,0x4D,0x00,0x58,0x00,
+ 0x63,0x00,0x6E,0x00,0x79,0x00,0x84,0x00,0x8F,0x00,0x9A,0x00,0xA5,0x00,0xB0,0x00,0xBB,0x00,
+ 0xC6,0x00,0xD1,0x00,0xDC,0x00,0xE7,0x00,0xF2,0x00,0xFD,0x00,0x08,0x01,0x13,0x01,0x1E,0x01,
+ 0x29,0x01,0x34,0x01,0x3F,0x01,0x4A,0x01,0x55,0x01,0x60,0x01,0x6B,0x01,0x76,0x01,0x81,0x01,
+ 0x8C,0x01,0x97,0x01,0xA2,0x01,0xAD,0x01,0xB8,0x01,0xC3,0x01,0xCE,0x01,0xD9,0x01,0xE4,0x01,
+ 0xEF,0x01,0xFA,0x01,0x05,0x02,0x10,0x02,0x1B,0x02,0x26,0x02,0x31,0x02,0x3C,0x02,0x47,0x02,
+ 0x52,0x02,0x5D,0x02,0x68,0x02,0x73,0x02,0x7E,0x02,0x89,0x02,0x94,0x02,0x9F,0x02,0xAA,0x02,
+ 0xB5,0x02,0xC0,0x02,0xCB,0x02,0xD6,0x02,0xE1,0x02,0xEC,0x02,0xF7,0x02,0x02,0x03,0x0D,0x03,
+ 0x18,0x03,0x23,0x03,0x2E,0x03,0x39,0x03,0x44,0x03,0x4F,0x03,0x5A,0x03,0x65,0x03,0x70,0x03,
+ 0x7B,0x03,0x86,0x03,0x91,0x03,0x9C,0x03,0xA7,0x03,0xB2,0x03,0xBD,0x03,0xC8,0x03,0xD3,0x03,
+ 0xDE,0x03,0xE9,0x03,0xF4,0x03,0xFF,0x03,0x0A,0x04,0x15,0x04,
+
+ 5, // 0x20 ' '
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 5, // 0x21 '!'
+ 0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x20,0x00,
+
+ 5, // 0x22 '"'
+ 0x00,0x50,0x50,0xA0,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 5, // 0x23 '#'
+ 0x00,0x50,0x50,0xF8,0x50,0x50,0x50,0xF8,0x50,0x50,
+
+ 5, // 0x24 '$'
+ 0x00,0x40,0x60,0x90,0x80,0x60,0x10,0x90,0x60,0x20,
+
+ 5, // 0x25 '%'
+ 0x00,0x00,0x90,0x90,0x20,0x20,0x40,0x40,0x90,0x90,
+
+ 5, // 0x26 '&'
+ 0x00,0x40,0xA0,0xA0,0xA0,0x40,0xA8,0x90,0x90,0x68,
+
+ 5, // 0x27 '''
+ 0x00,0x20,0x20,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 5, // 0x28 '('
+ 0x10,0x20,0x20,0x40,0x40,0x40,0x40,0x20,0x20,0x10,
+
+ 5, // 0x29 ')'
+ 0x40,0x20,0x20,0x10,0x10,0x10,0x10,0x20,0x20,0x40,
+
+ 5, // 0x2A '*'
+ 0x00,0x00,0x90,0x60,0xF0,0x60,0x90,0x00,0x00,0x00,
+
+ 5, // 0x2B '+'
+ 0x00,0x00,0x00,0x20,0x20,0xF8,0x20,0x20,0x00,0x00,
+
+ 5, // 0x2C ','
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x60,0xC0,
+
+ 5, // 0x2D '-'
+ 0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,
+
+ 5, // 0x2E '.'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x00,
+
+ 5, // 0x2F '/'
+ 0x00,0x08,0x10,0x10,0x20,0x20,0x40,0x40,0x80,0x00,
+
+ 5, // 0x30 '0'
+ 0x00,0x70,0x90,0x90,0x90,0x90,0x90,0x90,0xE0,0x00,
+
+ 5, // 0x31 '1'
+ 0x00,0x20,0x60,0x20,0x20,0x20,0x20,0x20,0x70,0x00,
+
+ 5, // 0x32 '2'
+ 0x00,0x60,0x90,0x90,0x10,0x20,0x40,0x80,0xF0,0x00,
+
+ 5, // 0x33 '3'
+ 0x00,0x60,0x90,0x10,0x60,0x10,0x10,0x90,0x60,0x00,
+
+ 5, // 0x34 '4'
+ 0x00,0x10,0x30,0x50,0x50,0x90,0xF0,0x10,0x10,0x00,
+
+ 5, // 0x35 '5'
+ 0x00,0xF0,0x80,0x80,0xE0,0x10,0x10,0x90,0x60,0x00,
+
+ 5, // 0x36 '6'
+ 0x00,0x60,0x80,0x80,0xE0,0x90,0x90,0x90,0x60,0x00,
+
+ 5, // 0x37 '7'
+ 0x00,0xF0,0x10,0x10,0x20,0x20,0x40,0x40,0x40,0x00,
+
+ 5, // 0x38 '8'
+ 0x00,0x60,0x90,0x90,0x60,0x90,0x90,0x90,0x60,0x00,
+
+ 5, // 0x39 '9'
+ 0x00,0x60,0x90,0x90,0x90,0x70,0x10,0x10,0x60,0x00,
+
+ 5, // 0x3A ':'
+ 0x00,0x00,0x00,0x60,0x60,0x00,0x00,0x60,0x60,0x00,
+
+ 5, // 0x3B ';'
+ 0x00,0x00,0x00,0x60,0x60,0x00,0x00,0x60,0x60,0xC0,
+
+ 5, // 0x3C '<'
+ 0x00,0x08,0x10,0x20,0x40,0x80,0x40,0x20,0x10,0x08,
+
+ 5, // 0x3D '='
+ 0x00,0x00,0x00,0x00,0xF0,0x00,0xF0,0x00,0x00,0x00,
+
+ 5, // 0x3E '>'
+ 0x00,0x80,0x40,0x20,0x10,0x08,0x10,0x20,0x40,0x80,
+
+ 5, // 0x3F '?'
+ 0x00,0x60,0x90,0x10,0x10,0x20,0x40,0x00,0x40,0x00,
+
+ 5, // 0x40 '@'
+ 0x00,0x60,0x90,0x90,0xB0,0xB0,0x80,0x80,0x70,0x00,
+
+ 5, // 0x41 'A'
+ 0x00,0x60,0x90,0x90,0x90,0xF0,0x90,0x90,0x90,0x00,
+
+ 5, // 0x42 'B'
+ 0x00,0xE0,0x90,0x90,0xE0,0x90,0x90,0x90,0xE0,0x00,
+
+ 5, // 0x43 'C'
+ 0x00,0x60,0x90,0x80,0x80,0x80,0x80,0x90,0x60,0x00,
+
+ 5, // 0x44 'D'
+ 0x00,0xE0,0x90,0x90,0x90,0x90,0x90,0x90,0xE0,0x00,
+
+ 5, // 0x45 'E'
+ 0x00,0xF0,0x80,0x80,0xF0,0x80,0x80,0x80,0xF0,0x00,
+
+ 5, // 0x46 'F'
+ 0x00,0xF0,0x80,0x80,0xF0,0x80,0x80,0x80,0x80,0x00,
+
+ 5, // 0x47 'G'
+ 0x00,0x60,0x90,0x80,0x80,0xB0,0x90,0x90,0x60,0x00,
+
+ 5, // 0x48 'H'
+ 0x00,0x90,0x90,0x90,0x90,0xF0,0x90,0x90,0x90,0x00,
+
+ 5, // 0x49 'I'
+ 0x00,0x70,0x20,0x20,0x20,0x20,0x20,0x20,0x70,0x00,
+
+ 5, // 0x4A 'J'
+ 0x00,0x70,0x20,0x20,0x20,0x20,0x20,0xA0,0x40,0x00,
+
+ 5, // 0x4B 'K'
+ 0x00,0x90,0xA0,0xA0,0xC0,0xC0,0xA0,0xA0,0x90,0x00,
+
+ 5, // 0x4C 'L'
+ 0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xF0,0x00,
+
+ 5, // 0x4D 'M'
+ 0x00,0x90,0x90,0xF0,0xF0,0x90,0x90,0x90,0x90,0x00,
+
+ 5, // 0x4E 'N'
+ 0x00,0x90,0x90,0xD0,0xD0,0xB0,0xB0,0x90,0x90,0x00,
+
+ 5, // 0x4F 'O'
+ 0x00,0x60,0x90,0x90,0x90,0x90,0x90,0x90,0x60,0x00,
+
+ 5, // 0x50 'P'
+ 0x00,0xE0,0x90,0x90,0x90,0xE0,0x80,0x80,0x80,0x00,
+
+ 5, // 0x51 'Q'
+ 0x00,0x60,0x90,0x90,0x90,0x90,0x90,0x90,0x60,0x30,
+
+ 5, // 0x52 'R'
+ 0x00,0xE0,0x90,0x90,0x90,0xE0,0xA0,0x90,0x90,0x00,
+
+ 5, // 0x53 'S'
+ 0x00,0x60,0x90,0x80,0x60,0x10,0x90,0x90,0x60,0x00,
+
+ 5, // 0x54 'T'
+ 0x00,0xF8,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,
+
+ 5, // 0x55 'U'
+ 0x00,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x60,0x00,
+
+ 5, // 0x56 'V'
+ 0x00,0x90,0x90,0x90,0x50,0x50,0x50,0x20,0x20,0x00,
+
+ 5, // 0x57 'W'
+ 0x00,0x90,0x90,0x90,0x90,0x90,0xF0,0xF0,0x90,0x00,
+
+ 5, // 0x58 'X'
+ 0x00,0x90,0x90,0x90,0x60,0x60,0x90,0x90,0x90,0x00,
+
+ 5, // 0x59 'Y'
+ 0x00,0x88,0x88,0x88,0x50,0x20,0x20,0x20,0x20,0x00,
+
+ 5, // 0x5A 'Z'
+ 0x00,0xF0,0x10,0x20,0x20,0x40,0x40,0x80,0xF0,0x00,
+
+ 5, // 0x5B '['
+ 0x60,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x60,
+
+ 5, // 0x5C '\'
+ 0x80,0x80,0x40,0x40,0x20,0x20,0x10,0x10,0x08,0x08,
+
+ 5, // 0x5D ']'
+ 0x60,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x60,
+
+ 5, // 0x5E '^'
+ 0x00,0x20,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 5, // 0x5F '_'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x00,
+
+ 5, // 0x60 '`'
+ 0x00,0x40,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 5, // 0x61 'a'
+ 0x00,0x00,0x00,0x60,0x10,0x70,0x90,0x90,0x70,0x00,
+
+ 5, // 0x62 'b'
+ 0x00,0x80,0x80,0xE0,0x90,0x90,0x90,0x90,0xE0,0x00,
+
+ 5, // 0x63 'c'
+ 0x00,0x00,0x00,0x60,0x90,0x80,0x80,0x90,0x60,0x00,
+
+ 5, // 0x64 'd'
+ 0x00,0x10,0x10,0x70,0x90,0x90,0x90,0x90,0x70,0x00,
+
+ 5, // 0x65 'e'
+ 0x00,0x00,0x00,0x60,0x90,0x90,0xF0,0x80,0x70,0x00,
+
+ 5, // 0x66 'f'
+ 0x00,0x30,0x40,0xE0,0x40,0x40,0x40,0x40,0x40,0x00,
+
+ 5, // 0x67 'g'
+ 0x00,0x00,0x00,0x70,0x90,0x90,0x90,0x70,0x10,0xE0,
+
+ 5, // 0x68 'h'
+ 0x00,0x80,0x80,0xE0,0x90,0x90,0x90,0x90,0x90,0x00,
+
+ 5, // 0x69 'i'
+ 0x00,0x20,0x00,0x60,0x20,0x20,0x20,0x20,0x70,0x00,
+
+ 5, // 0x6A 'j'
+ 0x00,0x20,0x00,0x60,0x20,0x20,0x20,0x20,0x20,0xC0,
+
+ 5, // 0x6B 'k'
+ 0x00,0x80,0x80,0x90,0xA0,0xC0,0xA0,0x90,0x90,0x00,
+
+ 5, // 0x6C 'l'
+ 0x00,0x60,0x20,0x20,0x20,0x20,0x20,0x20,0x70,0x00,
+
+ 5, // 0x6D 'm'
+ 0x00,0x00,0x00,0x90,0xF0,0x90,0x90,0x90,0x90,0x00,
+
+ 5, // 0x6E 'n'
+ 0x00,0x00,0x00,0xE0,0x90,0x90,0x90,0x90,0x90,0x00,
+
+ 5, // 0x6F 'o'
+ 0x00,0x00,0x00,0x60,0x90,0x90,0x90,0x90,0x60,0x00,
+
+ 5, // 0x70 'p'
+ 0x00,0x00,0x00,0xE0,0x90,0x90,0x90,0xE0,0x80,0x80,
+
+ 5, // 0x71 'q'
+ 0x00,0x00,0x00,0x70,0x90,0x90,0x90,0x70,0x10,0x10,
+
+ 5, // 0x72 'r'
+ 0x00,0x00,0x00,0xB0,0x50,0x40,0x40,0x40,0xE0,0x00,
+
+ 5, // 0x73 's'
+ 0x00,0x00,0x00,0x60,0x90,0x40,0x20,0x90,0x60,0x00,
+
+ 5, // 0x74 't'
+ 0x00,0x40,0x40,0xE0,0x40,0x40,0x40,0x50,0x20,0x00,
+
+ 5, // 0x75 'u'
+ 0x00,0x00,0x00,0x90,0x90,0x90,0x90,0x90,0x70,0x00,
+
+ 5, // 0x76 'v'
+ 0x00,0x00,0x00,0x90,0x90,0x50,0x50,0x20,0x20,0x00,
+
+ 5, // 0x77 'w'
+ 0x00,0x00,0x00,0x90,0x90,0x90,0x90,0xF0,0x90,0x00,
+
+ 5, // 0x78 'x'
+ 0x00,0x00,0x00,0x90,0x90,0x60,0x60,0x90,0x90,0x00,
+
+ 5, // 0x79 'y'
+ 0x00,0x00,0x00,0x90,0x90,0x90,0x90,0x70,0x10,0xE0,
+
+ 5, // 0x7A 'z'
+ 0x00,0x00,0x00,0xF0,0x10,0x20,0x40,0x80,0xF0,0x00,
+
+ 5, // 0x7B '{'
+ 0x30,0x40,0x40,0x40,0x80,0x40,0x40,0x40,0x40,0x30,
+
+ 5, // 0x7C '|'
+ 0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+
+ 5, // 0x7D '}'
+ 0xC0,0x20,0x20,0x20,0x10,0x20,0x20,0x20,0x20,0xC0,
+
+ 5, // 0x7E '~'
+ 0x00,0x40,0xA8,0x10,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 5, // 0x7F ''
+ 0x00,0x20,0x70,0xD8,0x88,0x88,0xF8,0x00,0x00,0x00,
+
+ 0
+ };
+
+ const int8u mcs5x11_mono[] =
+ {
+ 11, 3, 32, 128-32,
+ 0x00,0x00,0x0C,0x00,0x18,0x00,0x24,0x00,0x30,0x00,0x3C,0x00,0x48,0x00,0x54,0x00,0x60,0x00,
+ 0x6C,0x00,0x78,0x00,0x84,0x00,0x90,0x00,0x9C,0x00,0xA8,0x00,0xB4,0x00,0xC0,0x00,0xCC,0x00,
+ 0xD8,0x00,0xE4,0x00,0xF0,0x00,0xFC,0x00,0x08,0x01,0x14,0x01,0x20,0x01,0x2C,0x01,0x38,0x01,
+ 0x44,0x01,0x50,0x01,0x5C,0x01,0x68,0x01,0x74,0x01,0x80,0x01,0x8C,0x01,0x98,0x01,0xA4,0x01,
+ 0xB0,0x01,0xBC,0x01,0xC8,0x01,0xD4,0x01,0xE0,0x01,0xEC,0x01,0xF8,0x01,0x04,0x02,0x10,0x02,
+ 0x1C,0x02,0x28,0x02,0x34,0x02,0x40,0x02,0x4C,0x02,0x58,0x02,0x64,0x02,0x70,0x02,0x7C,0x02,
+ 0x88,0x02,0x94,0x02,0xA0,0x02,0xAC,0x02,0xB8,0x02,0xC4,0x02,0xD0,0x02,0xDC,0x02,0xE8,0x02,
+ 0xF4,0x02,0x00,0x03,0x0C,0x03,0x18,0x03,0x24,0x03,0x30,0x03,0x3C,0x03,0x48,0x03,0x54,0x03,
+ 0x60,0x03,0x6C,0x03,0x78,0x03,0x84,0x03,0x90,0x03,0x9C,0x03,0xA8,0x03,0xB4,0x03,0xC0,0x03,
+ 0xCC,0x03,0xD8,0x03,0xE4,0x03,0xF0,0x03,0xFC,0x03,0x08,0x04,0x14,0x04,0x20,0x04,0x2C,0x04,
+ 0x38,0x04,0x44,0x04,0x50,0x04,0x5C,0x04,0x68,0x04,0x74,0x04,
+
+ 5, // 0x20 ' '
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 5, // 0x21 '!'
+ 0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x20,0x00,0x00,
+
+ 5, // 0x22 '"'
+ 0x00,0x50,0x50,0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 5, // 0x23 '#'
+ 0x00,0x50,0x50,0xF8,0x50,0x50,0x50,0xF8,0x50,0x50,0x00,
+
+ 5, // 0x24 '$'
+ 0x00,0x40,0x60,0x90,0x80,0x60,0x10,0x90,0x60,0x20,0x00,
+
+ 5, // 0x25 '%'
+ 0x00,0x00,0x90,0x90,0x20,0x20,0x40,0x40,0x90,0x90,0x00,
+
+ 5, // 0x26 '&'
+ 0x00,0x40,0xA0,0xA0,0x40,0xA8,0x90,0x90,0x68,0x00,0x00,
+
+ 5, // 0x27 '''
+ 0x00,0x20,0x20,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 5, // 0x28 '('
+ 0x00,0x10,0x20,0x20,0x40,0x40,0x40,0x40,0x20,0x20,0x10,
+
+ 5, // 0x29 ')'
+ 0x00,0x40,0x20,0x20,0x10,0x10,0x10,0x10,0x20,0x20,0x40,
+
+ 5, // 0x2A '*'
+ 0x00,0x00,0x90,0x60,0xF0,0x60,0x90,0x00,0x00,0x00,0x00,
+
+ 5, // 0x2B '+'
+ 0x00,0x00,0x00,0x20,0x20,0xF8,0x20,0x20,0x00,0x00,0x00,
+
+ 5, // 0x2C ','
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x40,0x80,
+
+ 5, // 0x2D '-'
+ 0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,
+
+ 5, // 0x2E '.'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x00,0x00,
+
+ 5, // 0x2F '/'
+ 0x08,0x08,0x10,0x10,0x20,0x20,0x40,0x40,0x80,0x80,0x00,
+
+ 5, // 0x30 '0'
+ 0x00,0x70,0x90,0x90,0x90,0x90,0x90,0x90,0xE0,0x00,0x00,
+
+ 5, // 0x31 '1'
+ 0x00,0x20,0x60,0x20,0x20,0x20,0x20,0x20,0x70,0x00,0x00,
+
+ 5, // 0x32 '2'
+ 0x00,0x60,0x90,0x90,0x10,0x20,0x40,0x80,0xF0,0x00,0x00,
+
+ 5, // 0x33 '3'
+ 0x00,0x60,0x90,0x10,0x60,0x10,0x10,0x90,0x60,0x00,0x00,
+
+ 5, // 0x34 '4'
+ 0x00,0x10,0x30,0x50,0x50,0x90,0xF8,0x10,0x10,0x00,0x00,
+
+ 5, // 0x35 '5'
+ 0x00,0xF0,0x80,0xE0,0x90,0x10,0x10,0x90,0x60,0x00,0x00,
+
+ 5, // 0x36 '6'
+ 0x00,0x60,0x90,0x80,0xE0,0x90,0x90,0x90,0x60,0x00,0x00,
+
+ 5, // 0x37 '7'
+ 0x00,0xF0,0x10,0x10,0x20,0x20,0x40,0x40,0x40,0x00,0x00,
+
+ 5, // 0x38 '8'
+ 0x00,0x60,0x90,0x90,0x60,0x90,0x90,0x90,0x60,0x00,0x00,
+
+ 5, // 0x39 '9'
+ 0x00,0x60,0x90,0x90,0x90,0x70,0x10,0x90,0x60,0x00,0x00,
+
+ 5, // 0x3A ':'
+ 0x00,0x00,0x00,0x60,0x60,0x00,0x00,0x60,0x60,0x00,0x00,
+
+ 5, // 0x3B ';'
+ 0x00,0x00,0x00,0x60,0x60,0x00,0x00,0x60,0x60,0x40,0x80,
+
+ 5, // 0x3C '<'
+ 0x00,0x08,0x10,0x20,0x40,0x80,0x40,0x20,0x10,0x08,0x00,
+
+ 5, // 0x3D '='
+ 0x00,0x00,0x00,0x00,0xF0,0x00,0x00,0xF0,0x00,0x00,0x00,
+
+ 5, // 0x3E '>'
+ 0x00,0x80,0x40,0x20,0x10,0x08,0x10,0x20,0x40,0x80,0x00,
+
+ 5, // 0x3F '?'
+ 0x00,0x60,0x90,0x10,0x10,0x20,0x40,0x00,0x40,0x00,0x00,
+
+ 5, // 0x40 '@'
+ 0x00,0x60,0x90,0x90,0xB0,0xB0,0x80,0x80,0x70,0x00,0x00,
+
+ 5, // 0x41 'A'
+ 0x00,0x60,0x90,0x90,0x90,0xF0,0x90,0x90,0x90,0x00,0x00,
+
+ 5, // 0x42 'B'
+ 0x00,0xE0,0x90,0x90,0xE0,0x90,0x90,0x90,0xE0,0x00,0x00,
+
+ 5, // 0x43 'C'
+ 0x00,0x60,0x90,0x80,0x80,0x80,0x80,0x90,0x60,0x00,0x00,
+
+ 5, // 0x44 'D'
+ 0x00,0xE0,0x90,0x90,0x90,0x90,0x90,0x90,0xE0,0x00,0x00,
+
+ 5, // 0x45 'E'
+ 0x00,0xF0,0x80,0x80,0xE0,0x80,0x80,0x80,0xF0,0x00,0x00,
+
+ 5, // 0x46 'F'
+ 0x00,0xF0,0x80,0x80,0xE0,0x80,0x80,0x80,0x80,0x00,0x00,
+
+ 5, // 0x47 'G'
+ 0x00,0x60,0x90,0x80,0x80,0xB0,0x90,0x90,0x60,0x00,0x00,
+
+ 5, // 0x48 'H'
+ 0x00,0x90,0x90,0x90,0xF0,0x90,0x90,0x90,0x90,0x00,0x00,
+
+ 5, // 0x49 'I'
+ 0x00,0x70,0x20,0x20,0x20,0x20,0x20,0x20,0x70,0x00,0x00,
+
+ 5, // 0x4A 'J'
+ 0x00,0x70,0x20,0x20,0x20,0x20,0xA0,0xA0,0x40,0x00,0x00,
+
+ 5, // 0x4B 'K'
+ 0x00,0x90,0xA0,0xA0,0xC0,0xA0,0xA0,0x90,0x90,0x00,0x00,
+
+ 5, // 0x4C 'L'
+ 0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xF0,0x00,0x00,
+
+ 5, // 0x4D 'M'
+ 0x00,0x90,0xF0,0xF0,0x90,0x90,0x90,0x90,0x90,0x00,0x00,
+
+ 5, // 0x4E 'N'
+ 0x00,0x90,0x90,0xD0,0xD0,0xB0,0xB0,0x90,0x90,0x00,0x00,
+
+ 5, // 0x4F 'O'
+ 0x00,0x60,0x90,0x90,0x90,0x90,0x90,0x90,0x60,0x00,0x00,
+
+ 5, // 0x50 'P'
+ 0x00,0xE0,0x90,0x90,0x90,0xE0,0x80,0x80,0x80,0x00,0x00,
+
+ 5, // 0x51 'Q'
+ 0x00,0x60,0x90,0x90,0x90,0x90,0x90,0x90,0x60,0x30,0x00,
+
+ 5, // 0x52 'R'
+ 0x00,0xE0,0x90,0x90,0x90,0xE0,0xA0,0x90,0x90,0x00,0x00,
+
+ 5, // 0x53 'S'
+ 0x00,0x60,0x90,0x80,0x60,0x10,0x90,0x90,0x60,0x00,0x00,
+
+ 5, // 0x54 'T'
+ 0x00,0xF8,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x00,
+
+ 5, // 0x55 'U'
+ 0x00,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x60,0x00,0x00,
+
+ 5, // 0x56 'V'
+ 0x00,0x90,0x90,0x90,0x50,0x50,0x50,0x20,0x20,0x00,0x00,
+
+ 5, // 0x57 'W'
+ 0x00,0x90,0x90,0x90,0x90,0x90,0xF0,0xF0,0x90,0x00,0x00,
+
+ 5, // 0x58 'X'
+ 0x00,0x90,0x90,0x90,0x60,0x60,0x90,0x90,0x90,0x00,0x00,
+
+ 5, // 0x59 'Y'
+ 0x00,0x88,0x88,0x88,0x50,0x20,0x20,0x20,0x20,0x00,0x00,
+
+ 5, // 0x5A 'Z'
+ 0x00,0xF0,0x10,0x20,0x20,0x40,0x40,0x80,0xF0,0x00,0x00,
+
+ 5, // 0x5B '['
+ 0x00,0x60,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x60,
+
+ 5, // 0x5C '\'
+ 0x80,0x80,0x40,0x40,0x20,0x20,0x10,0x10,0x08,0x08,0x00,
+
+ 5, // 0x5D ']'
+ 0x00,0x60,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x60,
+
+ 5, // 0x5E '^'
+ 0x00,0x20,0x50,0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 5, // 0x5F '_'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x00,
+
+ 5, // 0x60 '`'
+ 0x00,0x40,0x40,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 5, // 0x61 'a'
+ 0x00,0x00,0x00,0x60,0x10,0x70,0x90,0x90,0x70,0x00,0x00,
+
+ 5, // 0x62 'b'
+ 0x00,0x80,0x80,0xE0,0x90,0x90,0x90,0x90,0xE0,0x00,0x00,
+
+ 5, // 0x63 'c'
+ 0x00,0x00,0x00,0x60,0x90,0x80,0x80,0x90,0x60,0x00,0x00,
+
+ 5, // 0x64 'd'
+ 0x00,0x10,0x10,0x70,0x90,0x90,0x90,0x90,0x70,0x00,0x00,
+
+ 5, // 0x65 'e'
+ 0x00,0x00,0x00,0x60,0x90,0x90,0xF0,0x80,0x70,0x00,0x00,
+
+ 5, // 0x66 'f'
+ 0x00,0x30,0x40,0xE0,0x40,0x40,0x40,0x40,0x40,0x00,0x00,
+
+ 5, // 0x67 'g'
+ 0x00,0x00,0x00,0x70,0x90,0x90,0x90,0x90,0x70,0x10,0xE0,
+
+ 5, // 0x68 'h'
+ 0x00,0x80,0x80,0xE0,0x90,0x90,0x90,0x90,0x90,0x00,0x00,
+
+ 5, // 0x69 'i'
+ 0x00,0x20,0x00,0x60,0x20,0x20,0x20,0x20,0x70,0x00,0x00,
+
+ 5, // 0x6A 'j'
+ 0x00,0x20,0x00,0x60,0x20,0x20,0x20,0x20,0x20,0xA0,0x40,
+
+ 5, // 0x6B 'k'
+ 0x00,0x80,0x80,0x90,0xA0,0xC0,0xA0,0x90,0x90,0x00,0x00,
+
+ 5, // 0x6C 'l'
+ 0x00,0x60,0x20,0x20,0x20,0x20,0x20,0x20,0x70,0x00,0x00,
+
+ 5, // 0x6D 'm'
+ 0x00,0x00,0x00,0x90,0xF0,0x90,0x90,0x90,0x90,0x00,0x00,
+
+ 5, // 0x6E 'n'
+ 0x00,0x00,0x00,0xE0,0x90,0x90,0x90,0x90,0x90,0x00,0x00,
+
+ 5, // 0x6F 'o'
+ 0x00,0x00,0x00,0x60,0x90,0x90,0x90,0x90,0x60,0x00,0x00,
+
+ 5, // 0x70 'p'
+ 0x00,0x00,0x00,0xE0,0x90,0x90,0x90,0x90,0xE0,0x80,0x80,
+
+ 5, // 0x71 'q'
+ 0x00,0x00,0x00,0x70,0x90,0x90,0x90,0x90,0x70,0x10,0x10,
+
+ 5, // 0x72 'r'
+ 0x00,0x00,0x00,0xA0,0x50,0x40,0x40,0x40,0xE0,0x00,0x00,
+
+ 5, // 0x73 's'
+ 0x00,0x00,0x00,0x60,0x90,0x40,0x20,0x90,0x60,0x00,0x00,
+
+ 5, // 0x74 't'
+ 0x00,0x40,0x40,0xE0,0x40,0x40,0x40,0x40,0x30,0x00,0x00,
+
+ 5, // 0x75 'u'
+ 0x00,0x00,0x00,0x90,0x90,0x90,0x90,0x90,0x70,0x00,0x00,
+
+ 5, // 0x76 'v'
+ 0x00,0x00,0x00,0x90,0x90,0x50,0x50,0x20,0x20,0x00,0x00,
+
+ 5, // 0x77 'w'
+ 0x00,0x00,0x00,0x90,0x90,0x90,0x90,0xF0,0x90,0x00,0x00,
+
+ 5, // 0x78 'x'
+ 0x00,0x00,0x00,0x90,0x90,0x60,0x60,0x90,0x90,0x00,0x00,
+
+ 5, // 0x79 'y'
+ 0x00,0x00,0x00,0x90,0x90,0x90,0x90,0x90,0x70,0x10,0xE0,
+
+ 5, // 0x7A 'z'
+ 0x00,0x00,0x00,0xF0,0x10,0x20,0x40,0x80,0xF0,0x00,0x00,
+
+ 5, // 0x7B '{'
+ 0x30,0x40,0x40,0x40,0x40,0x80,0x40,0x40,0x40,0x40,0x30,
+
+ 5, // 0x7C '|'
+ 0x00,0x20,0x20,0x20,0x20,0x00,0x20,0x20,0x20,0x20,0x00,
+
+ 5, // 0x7D '}'
+ 0xC0,0x20,0x20,0x20,0x20,0x10,0x20,0x20,0x20,0x20,0xC0,
+
+ 5, // 0x7E '~'
+ 0x00,0x40,0xA8,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 5, // 0x7F ''
+ 0x00,0x20,0x70,0xD8,0x88,0x88,0xF8,0x00,0x00,0x00,0x00,
+
+ 0
+ };
+
+ const int8u mcs6x10_mono[] =
+ {
+ 10, 3, 32, 128-32,
+ 0x00,0x00,0x0B,0x00,0x16,0x00,0x21,0x00,0x2C,0x00,0x37,0x00,0x42,0x00,0x4D,0x00,0x58,0x00,
+ 0x63,0x00,0x6E,0x00,0x79,0x00,0x84,0x00,0x8F,0x00,0x9A,0x00,0xA5,0x00,0xB0,0x00,0xBB,0x00,
+ 0xC6,0x00,0xD1,0x00,0xDC,0x00,0xE7,0x00,0xF2,0x00,0xFD,0x00,0x08,0x01,0x13,0x01,0x1E,0x01,
+ 0x29,0x01,0x34,0x01,0x3F,0x01,0x4A,0x01,0x55,0x01,0x60,0x01,0x6B,0x01,0x76,0x01,0x81,0x01,
+ 0x8C,0x01,0x97,0x01,0xA2,0x01,0xAD,0x01,0xB8,0x01,0xC3,0x01,0xCE,0x01,0xD9,0x01,0xE4,0x01,
+ 0xEF,0x01,0xFA,0x01,0x05,0x02,0x10,0x02,0x1B,0x02,0x26,0x02,0x31,0x02,0x3C,0x02,0x47,0x02,
+ 0x52,0x02,0x5D,0x02,0x68,0x02,0x73,0x02,0x7E,0x02,0x89,0x02,0x94,0x02,0x9F,0x02,0xAA,0x02,
+ 0xB5,0x02,0xC0,0x02,0xCB,0x02,0xD6,0x02,0xE1,0x02,0xEC,0x02,0xF7,0x02,0x02,0x03,0x0D,0x03,
+ 0x18,0x03,0x23,0x03,0x2E,0x03,0x39,0x03,0x44,0x03,0x4F,0x03,0x5A,0x03,0x65,0x03,0x70,0x03,
+ 0x7B,0x03,0x86,0x03,0x91,0x03,0x9C,0x03,0xA7,0x03,0xB2,0x03,0xBD,0x03,0xC8,0x03,0xD3,0x03,
+ 0xDE,0x03,0xE9,0x03,0xF4,0x03,0xFF,0x03,0x0A,0x04,0x15,0x04,
+
+ 6, // 0x20 ' '
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 6, // 0x21 '!'
+ 0x00,0x10,0x10,0x10,0x10,0x10,0x00,0x10,0x00,0x00,
+
+ 6, // 0x22 '"'
+ 0x00,0x28,0x28,0x50,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 6, // 0x23 '#'
+ 0x00,0x28,0x28,0x7C,0x28,0x28,0x7C,0x28,0x28,0x00,
+
+ 6, // 0x24 '$'
+ 0x10,0x38,0x54,0x50,0x38,0x14,0x54,0x38,0x10,0x00,
+
+ 6, // 0x25 '%'
+ 0x00,0x08,0xC8,0xD0,0x10,0x20,0x2C,0x4C,0x40,0x00,
+
+ 6, // 0x26 '&'
+ 0x00,0x20,0x50,0x50,0x24,0x54,0x48,0x34,0x00,0x00,
+
+ 6, // 0x27 '''
+ 0x00,0x10,0x10,0x20,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 6, // 0x28 '('
+ 0x08,0x10,0x10,0x20,0x20,0x20,0x10,0x10,0x08,0x00,
+
+ 6, // 0x29 ')'
+ 0x20,0x10,0x10,0x08,0x08,0x08,0x10,0x10,0x20,0x00,
+
+ 6, // 0x2A '*'
+ 0x00,0x00,0x28,0x7C,0x38,0x7C,0x28,0x00,0x00,0x00,
+
+ 6, // 0x2B '+'
+ 0x00,0x00,0x10,0x10,0x7C,0x10,0x10,0x00,0x00,0x00,
+
+ 6, // 0x2C ','
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x20,0x40,
+
+ 6, // 0x2D '-'
+ 0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,
+
+ 6, // 0x2E '.'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,
+
+ 6, // 0x2F '/'
+ 0x00,0x08,0x08,0x10,0x10,0x20,0x20,0x40,0x40,0x00,
+
+ 6, // 0x30 '0'
+ 0x00,0x38,0x44,0x4C,0x54,0x64,0x44,0x38,0x00,0x00,
+
+ 6, // 0x31 '1'
+ 0x00,0x10,0x30,0x10,0x10,0x10,0x10,0x38,0x00,0x00,
+
+ 6, // 0x32 '2'
+ 0x00,0x38,0x44,0x04,0x18,0x20,0x40,0x7C,0x00,0x00,
+
+ 6, // 0x33 '3'
+ 0x00,0x38,0x44,0x04,0x38,0x04,0x44,0x38,0x00,0x00,
+
+ 6, // 0x34 '4'
+ 0x00,0x08,0x18,0x28,0x48,0x7C,0x08,0x08,0x00,0x00,
+
+ 6, // 0x35 '5'
+ 0x00,0x7C,0x40,0x40,0x78,0x04,0x44,0x38,0x00,0x00,
+
+ 6, // 0x36 '6'
+ 0x00,0x38,0x40,0x40,0x78,0x44,0x44,0x38,0x00,0x00,
+
+ 6, // 0x37 '7'
+ 0x00,0x7C,0x04,0x08,0x10,0x20,0x20,0x20,0x00,0x00,
+
+ 6, // 0x38 '8'
+ 0x00,0x38,0x44,0x44,0x38,0x44,0x44,0x38,0x00,0x00,
+
+ 6, // 0x39 '9'
+ 0x00,0x38,0x44,0x44,0x3C,0x04,0x04,0x38,0x00,0x00,
+
+ 6, // 0x3A ':'
+ 0x00,0x00,0x30,0x30,0x00,0x00,0x30,0x30,0x00,0x00,
+
+ 6, // 0x3B ';'
+ 0x00,0x00,0x30,0x30,0x00,0x00,0x30,0x30,0x20,0x40,
+
+ 6, // 0x3C '<'
+ 0x04,0x08,0x10,0x20,0x40,0x20,0x10,0x08,0x04,0x00,
+
+ 6, // 0x3D '='
+ 0x00,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x00,
+
+ 6, // 0x3E '>'
+ 0x40,0x20,0x10,0x08,0x04,0x08,0x10,0x20,0x40,0x00,
+
+ 6, // 0x3F '?'
+ 0x00,0x38,0x44,0x04,0x18,0x10,0x00,0x10,0x00,0x00,
+
+ 6, // 0x40 '@'
+ 0x00,0x38,0x44,0x5C,0x54,0x5C,0x40,0x38,0x00,0x00,
+
+ 6, // 0x41 'A'
+ 0x00,0x38,0x44,0x44,0x44,0x7C,0x44,0x44,0x00,0x00,
+
+ 6, // 0x42 'B'
+ 0x00,0x78,0x44,0x44,0x78,0x44,0x44,0x78,0x00,0x00,
+
+ 6, // 0x43 'C'
+ 0x00,0x38,0x44,0x40,0x40,0x40,0x44,0x38,0x00,0x00,
+
+ 6, // 0x44 'D'
+ 0x00,0x78,0x44,0x44,0x44,0x44,0x44,0x78,0x00,0x00,
+
+ 6, // 0x45 'E'
+ 0x00,0x7C,0x40,0x40,0x78,0x40,0x40,0x7C,0x00,0x00,
+
+ 6, // 0x46 'F'
+ 0x00,0x7C,0x40,0x40,0x78,0x40,0x40,0x40,0x00,0x00,
+
+ 6, // 0x47 'G'
+ 0x00,0x38,0x44,0x40,0x4C,0x44,0x44,0x3C,0x00,0x00,
+
+ 6, // 0x48 'H'
+ 0x00,0x44,0x44,0x44,0x7C,0x44,0x44,0x44,0x00,0x00,
+
+ 6, // 0x49 'I'
+ 0x00,0x38,0x10,0x10,0x10,0x10,0x10,0x38,0x00,0x00,
+
+ 6, // 0x4A 'J'
+ 0x00,0x1C,0x08,0x08,0x08,0x48,0x48,0x30,0x00,0x00,
+
+ 6, // 0x4B 'K'
+ 0x00,0x44,0x48,0x50,0x60,0x50,0x48,0x44,0x00,0x00,
+
+ 6, // 0x4C 'L'
+ 0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x7C,0x00,0x00,
+
+ 6, // 0x4D 'M'
+ 0x00,0x44,0x6C,0x54,0x54,0x44,0x44,0x44,0x00,0x00,
+
+ 6, // 0x4E 'N'
+ 0x00,0x44,0x44,0x64,0x54,0x4C,0x44,0x44,0x00,0x00,
+
+ 6, // 0x4F 'O'
+ 0x00,0x38,0x44,0x44,0x44,0x44,0x44,0x38,0x00,0x00,
+
+ 6, // 0x50 'P'
+ 0x00,0x78,0x44,0x44,0x78,0x40,0x40,0x40,0x00,0x00,
+
+ 6, // 0x51 'Q'
+ 0x00,0x38,0x44,0x44,0x44,0x54,0x48,0x34,0x00,0x00,
+
+ 6, // 0x52 'R'
+ 0x00,0x78,0x44,0x44,0x78,0x48,0x44,0x44,0x00,0x00,
+
+ 6, // 0x53 'S'
+ 0x00,0x38,0x44,0x40,0x38,0x04,0x44,0x38,0x00,0x00,
+
+ 6, // 0x54 'T'
+ 0x00,0x7C,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00,
+
+ 6, // 0x55 'U'
+ 0x00,0x44,0x44,0x44,0x44,0x44,0x44,0x38,0x00,0x00,
+
+ 6, // 0x56 'V'
+ 0x00,0x44,0x44,0x44,0x44,0x28,0x28,0x10,0x00,0x00,
+
+ 6, // 0x57 'W'
+ 0x00,0x44,0x44,0x54,0x54,0x54,0x54,0x28,0x00,0x00,
+
+ 6, // 0x58 'X'
+ 0x00,0x44,0x44,0x28,0x10,0x28,0x44,0x44,0x00,0x00,
+
+ 6, // 0x59 'Y'
+ 0x00,0x44,0x44,0x44,0x28,0x10,0x10,0x10,0x00,0x00,
+
+ 6, // 0x5A 'Z'
+ 0x00,0x78,0x08,0x10,0x20,0x40,0x40,0x78,0x00,0x00,
+
+ 6, // 0x5B '['
+ 0x38,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x38,0x00,
+
+ 6, // 0x5C '\'
+ 0x00,0x40,0x40,0x20,0x20,0x10,0x10,0x08,0x08,0x00,
+
+ 6, // 0x5D ']'
+ 0x38,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x38,0x00,
+
+ 6, // 0x5E '^'
+ 0x10,0x28,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 6, // 0x5F '_'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,
+
+ 6, // 0x60 '`'
+ 0x00,0x10,0x10,0x20,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 6, // 0x61 'a'
+ 0x00,0x00,0x00,0x38,0x04,0x3C,0x44,0x3C,0x00,0x00,
+
+ 6, // 0x62 'b'
+ 0x00,0x40,0x40,0x78,0x44,0x44,0x44,0x78,0x00,0x00,
+
+ 6, // 0x63 'c'
+ 0x00,0x00,0x00,0x38,0x44,0x40,0x40,0x3C,0x00,0x00,
+
+ 6, // 0x64 'd'
+ 0x00,0x04,0x04,0x3C,0x44,0x44,0x44,0x3C,0x00,0x00,
+
+ 6, // 0x65 'e'
+ 0x00,0x00,0x00,0x38,0x44,0x78,0x40,0x3C,0x00,0x00,
+
+ 6, // 0x66 'f'
+ 0x00,0x0C,0x10,0x10,0x38,0x10,0x10,0x10,0x00,0x00,
+
+ 6, // 0x67 'g'
+ 0x00,0x00,0x00,0x3C,0x44,0x44,0x44,0x3C,0x04,0x38,
+
+ 6, // 0x68 'h'
+ 0x00,0x40,0x40,0x78,0x44,0x44,0x44,0x44,0x00,0x00,
+
+ 6, // 0x69 'i'
+ 0x00,0x10,0x00,0x30,0x10,0x10,0x10,0x38,0x00,0x00,
+
+ 6, // 0x6A 'j'
+ 0x00,0x08,0x00,0x18,0x08,0x08,0x08,0x08,0x48,0x30,
+
+ 6, // 0x6B 'k'
+ 0x00,0x40,0x40,0x48,0x50,0x60,0x50,0x48,0x00,0x00,
+
+ 6, // 0x6C 'l'
+ 0x00,0x30,0x10,0x10,0x10,0x10,0x10,0x38,0x00,0x00,
+
+ 6, // 0x6D 'm'
+ 0x00,0x00,0x00,0x68,0x54,0x54,0x44,0x44,0x00,0x00,
+
+ 6, // 0x6E 'n'
+ 0x00,0x00,0x00,0x58,0x64,0x44,0x44,0x44,0x00,0x00,
+
+ 6, // 0x6F 'o'
+ 0x00,0x00,0x00,0x38,0x44,0x44,0x44,0x38,0x00,0x00,
+
+ 6, // 0x70 'p'
+ 0x00,0x00,0x00,0x78,0x44,0x44,0x44,0x78,0x40,0x40,
+
+ 6, // 0x71 'q'
+ 0x00,0x00,0x00,0x3C,0x44,0x44,0x44,0x3C,0x04,0x04,
+
+ 6, // 0x72 'r'
+ 0x00,0x00,0x00,0x58,0x24,0x20,0x20,0x70,0x00,0x00,
+
+ 6, // 0x73 's'
+ 0x00,0x00,0x00,0x38,0x40,0x38,0x04,0x78,0x00,0x00,
+
+ 6, // 0x74 't'
+ 0x00,0x10,0x10,0x38,0x10,0x10,0x14,0x08,0x00,0x00,
+
+ 6, // 0x75 'u'
+ 0x00,0x00,0x00,0x44,0x44,0x44,0x4C,0x34,0x00,0x00,
+
+ 6, // 0x76 'v'
+ 0x00,0x00,0x00,0x44,0x44,0x44,0x28,0x10,0x00,0x00,
+
+ 6, // 0x77 'w'
+ 0x00,0x00,0x00,0x44,0x44,0x54,0x7C,0x28,0x00,0x00,
+
+ 6, // 0x78 'x'
+ 0x00,0x00,0x00,0x48,0x48,0x30,0x48,0x48,0x00,0x00,
+
+ 6, // 0x79 'y'
+ 0x00,0x00,0x00,0x44,0x44,0x44,0x44,0x3C,0x04,0x38,
+
+ 6, // 0x7A 'z'
+ 0x00,0x00,0x00,0x78,0x08,0x30,0x40,0x78,0x00,0x00,
+
+ 6, // 0x7B '{'
+ 0x18,0x20,0x20,0x20,0xC0,0x20,0x20,0x20,0x18,0x00,
+
+ 6, // 0x7C '|'
+ 0x10,0x10,0x10,0x10,0x00,0x10,0x10,0x10,0x10,0x00,
+
+ 6, // 0x7D '}'
+ 0x60,0x10,0x10,0x10,0x0C,0x10,0x10,0x10,0x60,0x00,
+
+ 6, // 0x7E '~'
+ 0x00,0x48,0xA8,0x90,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 6, // 0x7F ''
+ 0x00,0x10,0x38,0x6C,0x44,0x44,0x7C,0x00,0x00,0x00,
+
+ 0
+ };
+
+ const int8u mcs6x11_mono[] =
+ {
+ 11, 3, 32, 128-32,
+ 0x00,0x00,0x0C,0x00,0x18,0x00,0x24,0x00,0x30,0x00,0x3C,0x00,0x48,0x00,0x54,0x00,0x60,0x00,
+ 0x6C,0x00,0x78,0x00,0x84,0x00,0x90,0x00,0x9C,0x00,0xA8,0x00,0xB4,0x00,0xC0,0x00,0xCC,0x00,
+ 0xD8,0x00,0xE4,0x00,0xF0,0x00,0xFC,0x00,0x08,0x01,0x14,0x01,0x20,0x01,0x2C,0x01,0x38,0x01,
+ 0x44,0x01,0x50,0x01,0x5C,0x01,0x68,0x01,0x74,0x01,0x80,0x01,0x8C,0x01,0x98,0x01,0xA4,0x01,
+ 0xB0,0x01,0xBC,0x01,0xC8,0x01,0xD4,0x01,0xE0,0x01,0xEC,0x01,0xF8,0x01,0x04,0x02,0x10,0x02,
+ 0x1C,0x02,0x28,0x02,0x34,0x02,0x40,0x02,0x4C,0x02,0x58,0x02,0x64,0x02,0x70,0x02,0x7C,0x02,
+ 0x88,0x02,0x94,0x02,0xA0,0x02,0xAC,0x02,0xB8,0x02,0xC4,0x02,0xD0,0x02,0xDC,0x02,0xE8,0x02,
+ 0xF4,0x02,0x00,0x03,0x0C,0x03,0x18,0x03,0x24,0x03,0x30,0x03,0x3C,0x03,0x48,0x03,0x54,0x03,
+ 0x60,0x03,0x6C,0x03,0x78,0x03,0x84,0x03,0x90,0x03,0x9C,0x03,0xA8,0x03,0xB4,0x03,0xC0,0x03,
+ 0xCC,0x03,0xD8,0x03,0xE4,0x03,0xF0,0x03,0xFC,0x03,0x08,0x04,0x14,0x04,0x20,0x04,0x2C,0x04,
+ 0x38,0x04,0x44,0x04,0x50,0x04,0x5C,0x04,0x68,0x04,0x74,0x04,
+
+ 6, // 0x20 ' '
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 6, // 0x21 '!'
+ 0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x20,0x00,0x00,
+
+ 6, // 0x22 '"'
+ 0x00,0x28,0x28,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 6, // 0x23 '#'
+ 0x00,0x28,0x28,0x7C,0x28,0x28,0x7C,0x28,0x28,0x00,0x00,
+
+ 6, // 0x24 '$'
+ 0x00,0x10,0x38,0x54,0x50,0x38,0x14,0x54,0x38,0x10,0x00,
+
+ 6, // 0x25 '%'
+ 0x00,0x68,0xA8,0xD0,0x10,0x20,0x2C,0x54,0x58,0x00,0x00,
+
+ 6, // 0x26 '&'
+ 0x00,0x20,0x50,0x50,0x20,0x54,0x54,0x48,0x34,0x00,0x00,
+
+ 6, // 0x27 '''
+ 0x00,0x10,0x10,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 6, // 0x28 '('
+ 0x08,0x10,0x10,0x20,0x20,0x20,0x20,0x10,0x10,0x08,0x00,
+
+ 6, // 0x29 ')'
+ 0x20,0x10,0x10,0x08,0x08,0x08,0x08,0x10,0x10,0x20,0x00,
+
+ 6, // 0x2A '*'
+ 0x00,0x00,0x28,0x7C,0x38,0x7C,0x28,0x00,0x00,0x00,0x00,
+
+ 6, // 0x2B '+'
+ 0x00,0x00,0x00,0x10,0x10,0x7C,0x10,0x10,0x00,0x00,0x00,
+
+ 6, // 0x2C ','
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x20,0x40,
+
+ 6, // 0x2D '-'
+ 0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,
+
+ 6, // 0x2E '.'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,
+
+ 6, // 0x2F '/'
+ 0x04,0x04,0x08,0x08,0x10,0x10,0x20,0x20,0x40,0x40,0x00,
+
+ 6, // 0x30 '0'
+ 0x00,0x38,0x44,0x44,0x54,0x54,0x44,0x44,0x38,0x00,0x00,
+
+ 6, // 0x31 '1'
+ 0x00,0x10,0x30,0x10,0x10,0x10,0x10,0x10,0x38,0x00,0x00,
+
+ 6, // 0x32 '2'
+ 0x00,0x38,0x44,0x44,0x08,0x10,0x20,0x40,0x7C,0x00,0x00,
+
+ 6, // 0x33 '3'
+ 0x00,0x38,0x44,0x04,0x38,0x04,0x04,0x44,0x38,0x00,0x00,
+
+ 6, // 0x34 '4'
+ 0x00,0x08,0x18,0x28,0x28,0x48,0x7C,0x08,0x08,0x00,0x00,
+
+ 6, // 0x35 '5'
+ 0x00,0x7C,0x40,0x78,0x44,0x04,0x04,0x44,0x38,0x00,0x00,
+
+ 6, // 0x36 '6'
+ 0x00,0x38,0x44,0x40,0x78,0x44,0x44,0x44,0x38,0x00,0x00,
+
+ 6, // 0x37 '7'
+ 0x00,0x7C,0x04,0x08,0x08,0x10,0x10,0x20,0x20,0x00,0x00,
+
+ 6, // 0x38 '8'
+ 0x00,0x38,0x44,0x44,0x38,0x44,0x44,0x44,0x38,0x00,0x00,
+
+ 6, // 0x39 '9'
+ 0x00,0x38,0x44,0x44,0x3C,0x04,0x04,0x44,0x38,0x00,0x00,
+
+ 6, // 0x3A ':'
+ 0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x30,0x30,0x00,0x00,
+
+ 6, // 0x3B ';'
+ 0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x30,0x30,0x20,0x40,
+
+ 6, // 0x3C '<'
+ 0x00,0x04,0x08,0x10,0x20,0x40,0x20,0x10,0x08,0x04,0x00,
+
+ 6, // 0x3D '='
+ 0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x00,
+
+ 6, // 0x3E '>'
+ 0x00,0x40,0x20,0x10,0x08,0x04,0x08,0x10,0x20,0x40,0x00,
+
+ 6, // 0x3F '?'
+ 0x00,0x38,0x44,0x04,0x08,0x10,0x10,0x00,0x10,0x00,0x00,
+
+ 6, // 0x40 '@'
+ 0x00,0x38,0x44,0x5C,0x54,0x54,0x4C,0x40,0x38,0x00,0x00,
+
+ 6, // 0x41 'A'
+ 0x00,0x38,0x44,0x44,0x44,0x7C,0x44,0x44,0x44,0x00,0x00,
+
+ 6, // 0x42 'B'
+ 0x00,0x78,0x44,0x44,0x78,0x44,0x44,0x44,0x78,0x00,0x00,
+
+ 6, // 0x43 'C'
+ 0x00,0x38,0x44,0x40,0x40,0x40,0x40,0x44,0x38,0x00,0x00,
+
+ 6, // 0x44 'D'
+ 0x00,0x70,0x48,0x44,0x44,0x44,0x44,0x48,0x70,0x00,0x00,
+
+ 6, // 0x45 'E'
+ 0x00,0x7C,0x40,0x40,0x78,0x40,0x40,0x40,0x7C,0x00,0x00,
+
+ 6, // 0x46 'F'
+ 0x00,0x7C,0x40,0x40,0x78,0x40,0x40,0x40,0x40,0x00,0x00,
+
+ 6, // 0x47 'G'
+ 0x00,0x38,0x44,0x40,0x40,0x5C,0x44,0x4C,0x34,0x00,0x00,
+
+ 6, // 0x48 'H'
+ 0x00,0x44,0x44,0x44,0x7C,0x44,0x44,0x44,0x44,0x00,0x00,
+
+ 6, // 0x49 'I'
+ 0x00,0x38,0x10,0x10,0x10,0x10,0x10,0x10,0x38,0x00,0x00,
+
+ 6, // 0x4A 'J'
+ 0x00,0x1C,0x08,0x08,0x08,0x08,0x48,0x48,0x30,0x00,0x00,
+
+ 6, // 0x4B 'K'
+ 0x00,0x44,0x48,0x50,0x60,0x50,0x48,0x44,0x44,0x00,0x00,
+
+ 6, // 0x4C 'L'
+ 0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x7C,0x00,0x00,
+
+ 6, // 0x4D 'M'
+ 0x00,0x44,0x6C,0x54,0x54,0x54,0x44,0x44,0x44,0x00,0x00,
+
+ 6, // 0x4E 'N'
+ 0x00,0x44,0x64,0x64,0x54,0x54,0x4C,0x4C,0x44,0x00,0x00,
+
+ 6, // 0x4F 'O'
+ 0x00,0x38,0x44,0x44,0x44,0x44,0x44,0x44,0x38,0x00,0x00,
+
+ 6, // 0x50 'P'
+ 0x00,0x78,0x44,0x44,0x44,0x78,0x40,0x40,0x40,0x00,0x00,
+
+ 6, // 0x51 'Q'
+ 0x00,0x38,0x44,0x44,0x44,0x44,0x54,0x48,0x34,0x00,0x00,
+
+ 6, // 0x52 'R'
+ 0x00,0x78,0x44,0x44,0x44,0x78,0x48,0x44,0x44,0x00,0x00,
+
+ 6, // 0x53 'S'
+ 0x00,0x38,0x44,0x40,0x38,0x04,0x04,0x44,0x38,0x00,0x00,
+
+ 6, // 0x54 'T'
+ 0x00,0x7C,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00,
+
+ 6, // 0x55 'U'
+ 0x00,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x38,0x00,0x00,
+
+ 6, // 0x56 'V'
+ 0x00,0x44,0x44,0x44,0x28,0x28,0x28,0x10,0x10,0x00,0x00,
+
+ 6, // 0x57 'W'
+ 0x00,0x44,0x44,0x54,0x54,0x54,0x54,0x54,0x28,0x00,0x00,
+
+ 6, // 0x58 'X'
+ 0x00,0x44,0x44,0x28,0x10,0x28,0x44,0x44,0x44,0x00,0x00,
+
+ 6, // 0x59 'Y'
+ 0x00,0x44,0x44,0x44,0x28,0x10,0x10,0x10,0x10,0x00,0x00,
+
+ 6, // 0x5A 'Z'
+ 0x00,0x7C,0x04,0x08,0x10,0x20,0x40,0x40,0x7C,0x00,0x00,
+
+ 6, // 0x5B '['
+ 0x38,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x38,0x00,
+
+ 6, // 0x5C '\'
+ 0x80,0x80,0x40,0x40,0x20,0x20,0x10,0x10,0x08,0x08,0x00,
+
+ 6, // 0x5D ']'
+ 0x38,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x38,0x00,
+
+ 6, // 0x5E '^'
+ 0x00,0x10,0x28,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 6, // 0x5F '_'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,
+
+ 6, // 0x60 '`'
+ 0x00,0x20,0x20,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 6, // 0x61 'a'
+ 0x00,0x00,0x00,0x38,0x04,0x3C,0x44,0x44,0x3C,0x00,0x00,
+
+ 6, // 0x62 'b'
+ 0x00,0x40,0x40,0x78,0x44,0x44,0x44,0x44,0x78,0x00,0x00,
+
+ 6, // 0x63 'c'
+ 0x00,0x00,0x00,0x38,0x44,0x40,0x40,0x44,0x38,0x00,0x00,
+
+ 6, // 0x64 'd'
+ 0x00,0x04,0x04,0x3C,0x44,0x44,0x44,0x44,0x3C,0x00,0x00,
+
+ 6, // 0x65 'e'
+ 0x00,0x00,0x00,0x38,0x44,0x7C,0x40,0x44,0x38,0x00,0x00,
+
+ 6, // 0x66 'f'
+ 0x00,0x0C,0x10,0x38,0x10,0x10,0x10,0x10,0x10,0x00,0x00,
+
+ 6, // 0x67 'g'
+ 0x00,0x00,0x00,0x3C,0x44,0x44,0x44,0x44,0x3C,0x04,0x78,
+
+ 6, // 0x68 'h'
+ 0x00,0x40,0x40,0x78,0x44,0x44,0x44,0x44,0x44,0x00,0x00,
+
+ 6, // 0x69 'i'
+ 0x00,0x10,0x00,0x30,0x10,0x10,0x10,0x10,0x38,0x00,0x00,
+
+ 6, // 0x6A 'j'
+ 0x00,0x10,0x00,0x30,0x10,0x10,0x10,0x10,0x10,0x50,0x20,
+
+ 6, // 0x6B 'k'
+ 0x00,0x40,0x40,0x4C,0x50,0x60,0x50,0x48,0x44,0x00,0x00,
+
+ 6, // 0x6C 'l'
+ 0x00,0x30,0x10,0x10,0x10,0x10,0x10,0x10,0x38,0x00,0x00,
+
+ 6, // 0x6D 'm'
+ 0x00,0x00,0x00,0x68,0x54,0x54,0x54,0x44,0x44,0x00,0x00,
+
+ 6, // 0x6E 'n'
+ 0x00,0x00,0x00,0x78,0x44,0x44,0x44,0x44,0x44,0x00,0x00,
+
+ 6, // 0x6F 'o'
+ 0x00,0x00,0x00,0x38,0x44,0x44,0x44,0x44,0x38,0x00,0x00,
+
+ 6, // 0x70 'p'
+ 0x00,0x00,0x00,0x78,0x44,0x44,0x44,0x44,0x78,0x40,0x40,
+
+ 6, // 0x71 'q'
+ 0x00,0x00,0x00,0x3C,0x44,0x44,0x44,0x44,0x3C,0x04,0x04,
+
+ 6, // 0x72 'r'
+ 0x00,0x00,0x00,0x58,0x24,0x20,0x20,0x20,0x70,0x00,0x00,
+
+ 6, // 0x73 's'
+ 0x00,0x00,0x00,0x38,0x44,0x30,0x08,0x44,0x38,0x00,0x00,
+
+ 6, // 0x74 't'
+ 0x00,0x20,0x20,0x70,0x20,0x20,0x20,0x20,0x18,0x00,0x00,
+
+ 6, // 0x75 'u'
+ 0x00,0x00,0x00,0x44,0x44,0x44,0x44,0x4C,0x34,0x00,0x00,
+
+ 6, // 0x76 'v'
+ 0x00,0x00,0x00,0x44,0x44,0x28,0x28,0x10,0x10,0x00,0x00,
+
+ 6, // 0x77 'w'
+ 0x00,0x00,0x00,0x44,0x44,0x44,0x54,0x7C,0x28,0x00,0x00,
+
+ 6, // 0x78 'x'
+ 0x00,0x00,0x00,0x44,0x28,0x10,0x28,0x44,0x44,0x00,0x00,
+
+ 6, // 0x79 'y'
+ 0x00,0x00,0x00,0x44,0x44,0x44,0x44,0x44,0x3C,0x08,0x70,
+
+ 6, // 0x7A 'z'
+ 0x00,0x00,0x00,0x7C,0x08,0x10,0x20,0x40,0x7C,0x00,0x00,
+
+ 6, // 0x7B '{'
+ 0x18,0x20,0x20,0x20,0xC0,0xC0,0x20,0x20,0x20,0x18,0x00,
+
+ 6, // 0x7C '|'
+ 0x00,0x10,0x10,0x10,0x10,0x00,0x10,0x10,0x10,0x10,0x00,
+
+ 6, // 0x7D '}'
+ 0x60,0x10,0x10,0x10,0x0C,0x0C,0x10,0x10,0x10,0x60,0x00,
+
+ 6, // 0x7E '~'
+ 0x00,0x24,0x54,0x48,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 6, // 0x7F ''
+ 0x00,0x10,0x38,0x6C,0x44,0x44,0x7C,0x00,0x00,0x00,0x00,
+
+ 0
+ };
+
+ const int8u mcs7x12_mono_high[] =
+ {
+ 12, 3, 32, 128-32,
+ 0x00,0x00,0x0D,0x00,0x1A,0x00,0x27,0x00,0x34,0x00,0x41,0x00,0x4E,0x00,0x5B,0x00,0x68,0x00,
+ 0x75,0x00,0x82,0x00,0x8F,0x00,0x9C,0x00,0xA9,0x00,0xB6,0x00,0xC3,0x00,0xD0,0x00,0xDD,0x00,
+ 0xEA,0x00,0xF7,0x00,0x04,0x01,0x11,0x01,0x1E,0x01,0x2B,0x01,0x38,0x01,0x45,0x01,0x52,0x01,
+ 0x5F,0x01,0x6C,0x01,0x79,0x01,0x86,0x01,0x93,0x01,0xA0,0x01,0xAD,0x01,0xBA,0x01,0xC7,0x01,
+ 0xD4,0x01,0xE1,0x01,0xEE,0x01,0xFB,0x01,0x08,0x02,0x15,0x02,0x22,0x02,0x2F,0x02,0x3C,0x02,
+ 0x49,0x02,0x56,0x02,0x63,0x02,0x70,0x02,0x7D,0x02,0x8A,0x02,0x97,0x02,0xA4,0x02,0xB1,0x02,
+ 0xBE,0x02,0xCB,0x02,0xD8,0x02,0xE5,0x02,0xF2,0x02,0xFF,0x02,0x0C,0x03,0x19,0x03,0x26,0x03,
+ 0x33,0x03,0x40,0x03,0x4D,0x03,0x5A,0x03,0x67,0x03,0x74,0x03,0x81,0x03,0x8E,0x03,0x9B,0x03,
+ 0xA8,0x03,0xB5,0x03,0xC2,0x03,0xCF,0x03,0xDC,0x03,0xE9,0x03,0xF6,0x03,0x03,0x04,0x10,0x04,
+ 0x1D,0x04,0x2A,0x04,0x37,0x04,0x44,0x04,0x51,0x04,0x5E,0x04,0x6B,0x04,0x78,0x04,0x85,0x04,
+ 0x92,0x04,0x9F,0x04,0xAC,0x04,0xB9,0x04,0xC6,0x04,0xD3,0x04,
+
+ 7, // 0x20 ' '
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x21 '!'
+ 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x10,0x00,0x00,
+
+ 7, // 0x22 '"'
+ 0x28,0x28,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x23 '#'
+ 0x24,0x24,0x24,0x7E,0x24,0x24,0x24,0x7E,0x24,0x24,0x24,0x00,
+
+ 7, // 0x24 '$'
+ 0x10,0x10,0x38,0x54,0x50,0x38,0x14,0x54,0x38,0x10,0x10,0x00,
+
+ 7, // 0x25 '%'
+ 0x32,0x54,0x64,0x08,0x08,0x10,0x10,0x26,0x2A,0x4C,0x00,0x00,
+
+ 7, // 0x26 '&'
+ 0x00,0x20,0x50,0x50,0x50,0x20,0x54,0x54,0x48,0x34,0x00,0x00,
+
+ 7, // 0x27 '''
+ 0x10,0x10,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x28 '('
+ 0x08,0x10,0x10,0x20,0x20,0x20,0x20,0x20,0x10,0x10,0x08,0x00,
+
+ 7, // 0x29 ')'
+ 0x20,0x10,0x10,0x08,0x08,0x08,0x08,0x08,0x10,0x10,0x20,0x00,
+
+ 7, // 0x2A '*'
+ 0x00,0x00,0x10,0x54,0x38,0x7C,0x38,0x54,0x10,0x00,0x00,0x00,
+
+ 7, // 0x2B '+'
+ 0x00,0x00,0x00,0x00,0x10,0x10,0x7C,0x10,0x10,0x00,0x00,0x00,
+
+ 7, // 0x2C ','
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x20,0x40,
+
+ 7, // 0x2D '-'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x2E '.'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,
+
+ 7, // 0x2F '/'
+ 0x04,0x04,0x08,0x08,0x10,0x10,0x20,0x20,0x40,0x40,0x00,0x00,
+
+ 7, // 0x30 '0'
+ 0x00,0x38,0x44,0x44,0x54,0x54,0x54,0x44,0x44,0x38,0x00,0x00,
+
+ 7, // 0x31 '1'
+ 0x00,0x10,0x30,0x10,0x10,0x10,0x10,0x10,0x10,0x38,0x00,0x00,
+
+ 7, // 0x32 '2'
+ 0x00,0x38,0x44,0x04,0x04,0x08,0x10,0x20,0x40,0x7C,0x00,0x00,
+
+ 7, // 0x33 '3'
+ 0x00,0x38,0x44,0x04,0x04,0x38,0x04,0x04,0x44,0x38,0x00,0x00,
+
+ 7, // 0x34 '4'
+ 0x00,0x08,0x18,0x28,0x28,0x48,0x48,0x7C,0x08,0x08,0x00,0x00,
+
+ 7, // 0x35 '5'
+ 0x00,0x7C,0x40,0x40,0x78,0x44,0x04,0x04,0x44,0x38,0x00,0x00,
+
+ 7, // 0x36 '6'
+ 0x00,0x38,0x44,0x40,0x78,0x44,0x44,0x44,0x44,0x38,0x00,0x00,
+
+ 7, // 0x37 '7'
+ 0x00,0x7C,0x04,0x08,0x08,0x10,0x10,0x20,0x20,0x20,0x00,0x00,
+
+ 7, // 0x38 '8'
+ 0x00,0x38,0x44,0x44,0x44,0x38,0x44,0x44,0x44,0x38,0x00,0x00,
+
+ 7, // 0x39 '9'
+ 0x00,0x38,0x44,0x44,0x44,0x3C,0x04,0x04,0x44,0x38,0x00,0x00,
+
+ 7, // 0x3A ':'
+ 0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x30,0x30,0x00,0x00,
+
+ 7, // 0x3B ';'
+ 0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x30,0x30,0x20,0x40,
+
+ 7, // 0x3C '<'
+ 0x00,0x04,0x08,0x10,0x20,0x40,0x20,0x10,0x08,0x04,0x00,0x00,
+
+ 7, // 0x3D '='
+ 0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,
+
+ 7, // 0x3E '>'
+ 0x00,0x40,0x20,0x10,0x08,0x04,0x08,0x10,0x20,0x40,0x00,0x00,
+
+ 7, // 0x3F '?'
+ 0x00,0x38,0x44,0x04,0x04,0x08,0x10,0x10,0x00,0x10,0x00,0x00,
+
+ 7, // 0x40 '@'
+ 0x00,0x38,0x44,0x44,0x5C,0x54,0x54,0x4C,0x40,0x38,0x00,0x00,
+
+ 7, // 0x41 'A'
+ 0x00,0x38,0x44,0x44,0x44,0x7C,0x44,0x44,0x44,0x44,0x00,0x00,
+
+ 7, // 0x42 'B'
+ 0x00,0x78,0x44,0x44,0x44,0x78,0x44,0x44,0x44,0x78,0x00,0x00,
+
+ 7, // 0x43 'C'
+ 0x00,0x38,0x44,0x40,0x40,0x40,0x40,0x40,0x44,0x38,0x00,0x00,
+
+ 7, // 0x44 'D'
+ 0x00,0x70,0x48,0x44,0x44,0x44,0x44,0x44,0x48,0x70,0x00,0x00,
+
+ 7, // 0x45 'E'
+ 0x00,0x7C,0x40,0x40,0x40,0x78,0x40,0x40,0x40,0x7C,0x00,0x00,
+
+ 7, // 0x46 'F'
+ 0x00,0x7C,0x40,0x40,0x40,0x78,0x40,0x40,0x40,0x40,0x00,0x00,
+
+ 7, // 0x47 'G'
+ 0x00,0x38,0x44,0x40,0x40,0x5C,0x44,0x44,0x4C,0x34,0x00,0x00,
+
+ 7, // 0x48 'H'
+ 0x00,0x44,0x44,0x44,0x44,0x7C,0x44,0x44,0x44,0x44,0x00,0x00,
+
+ 7, // 0x49 'I'
+ 0x00,0x38,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x38,0x00,0x00,
+
+ 7, // 0x4A 'J'
+ 0x00,0x1C,0x08,0x08,0x08,0x08,0x08,0x48,0x48,0x30,0x00,0x00,
+
+ 7, // 0x4B 'K'
+ 0x00,0x44,0x48,0x50,0x60,0x60,0x50,0x48,0x44,0x44,0x00,0x00,
+
+ 7, // 0x4C 'L'
+ 0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x7C,0x00,0x00,
+
+ 7, // 0x4D 'M'
+ 0x00,0x44,0x6C,0x6C,0x54,0x54,0x44,0x44,0x44,0x44,0x00,0x00,
+
+ 7, // 0x4E 'N'
+ 0x00,0x44,0x64,0x64,0x54,0x54,0x4C,0x4C,0x44,0x44,0x00,0x00,
+
+ 7, // 0x4F 'O'
+ 0x00,0x38,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x38,0x00,0x00,
+
+ 7, // 0x50 'P'
+ 0x00,0x78,0x44,0x44,0x44,0x44,0x78,0x40,0x40,0x40,0x00,0x00,
+
+ 7, // 0x51 'Q'
+ 0x00,0x38,0x44,0x44,0x44,0x44,0x44,0x54,0x48,0x34,0x00,0x00,
+
+ 7, // 0x52 'R'
+ 0x00,0x78,0x44,0x44,0x44,0x44,0x78,0x48,0x44,0x44,0x00,0x00,
+
+ 7, // 0x53 'S'
+ 0x00,0x38,0x44,0x40,0x40,0x38,0x04,0x04,0x44,0x38,0x00,0x00,
+
+ 7, // 0x54 'T'
+ 0x00,0x7C,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00,
+
+ 7, // 0x55 'U'
+ 0x00,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x38,0x00,0x00,
+
+ 7, // 0x56 'V'
+ 0x00,0x44,0x44,0x44,0x44,0x28,0x28,0x28,0x10,0x10,0x00,0x00,
+
+ 7, // 0x57 'W'
+ 0x00,0x44,0x44,0x44,0x44,0x44,0x44,0x54,0x54,0x28,0x00,0x00,
+
+ 7, // 0x58 'X'
+ 0x00,0x44,0x44,0x44,0x28,0x10,0x28,0x44,0x44,0x44,0x00,0x00,
+
+ 7, // 0x59 'Y'
+ 0x00,0x44,0x44,0x44,0x44,0x28,0x10,0x10,0x10,0x10,0x00,0x00,
+
+ 7, // 0x5A 'Z'
+ 0x00,0x7C,0x04,0x04,0x08,0x10,0x20,0x40,0x40,0x7C,0x00,0x00,
+
+ 7, // 0x5B '['
+ 0x38,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x38,0x00,
+
+ 7, // 0x5C '\'
+ 0x00,0x40,0x40,0x20,0x20,0x10,0x10,0x08,0x08,0x04,0x04,0x00,
+
+ 7, // 0x5D ']'
+ 0x38,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x38,0x00,
+
+ 7, // 0x5E '^'
+ 0x00,0x10,0x28,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x5F '_'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,
+
+ 7, // 0x60 '`'
+ 0x00,0x20,0x20,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x61 'a'
+ 0x00,0x00,0x00,0x38,0x04,0x3C,0x44,0x44,0x44,0x3C,0x00,0x00,
+
+ 7, // 0x62 'b'
+ 0x00,0x40,0x40,0x78,0x44,0x44,0x44,0x44,0x44,0x78,0x00,0x00,
+
+ 7, // 0x63 'c'
+ 0x00,0x00,0x00,0x38,0x44,0x40,0x40,0x40,0x44,0x38,0x00,0x00,
+
+ 7, // 0x64 'd'
+ 0x00,0x04,0x04,0x3C,0x44,0x44,0x44,0x44,0x44,0x3C,0x00,0x00,
+
+ 7, // 0x65 'e'
+ 0x00,0x00,0x00,0x38,0x44,0x44,0x7C,0x40,0x44,0x38,0x00,0x00,
+
+ 7, // 0x66 'f'
+ 0x00,0x0C,0x10,0x38,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00,
+
+ 7, // 0x67 'g'
+ 0x00,0x00,0x00,0x3C,0x44,0x44,0x44,0x44,0x44,0x3C,0x04,0x78,
+
+ 7, // 0x68 'h'
+ 0x00,0x40,0x40,0x78,0x44,0x44,0x44,0x44,0x44,0x44,0x00,0x00,
+
+ 7, // 0x69 'i'
+ 0x00,0x10,0x00,0x30,0x10,0x10,0x10,0x10,0x10,0x38,0x00,0x00,
+
+ 7, // 0x6A 'j'
+ 0x00,0x08,0x00,0x18,0x08,0x08,0x08,0x08,0x08,0x08,0x48,0x30,
+
+ 7, // 0x6B 'k'
+ 0x00,0x40,0x40,0x44,0x48,0x50,0x60,0x50,0x48,0x44,0x00,0x00,
+
+ 7, // 0x6C 'l'
+ 0x00,0x30,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x38,0x00,0x00,
+
+ 7, // 0x6D 'm'
+ 0x00,0x00,0x00,0x68,0x54,0x54,0x44,0x44,0x44,0x44,0x00,0x00,
+
+ 7, // 0x6E 'n'
+ 0x00,0x00,0x00,0x58,0x64,0x44,0x44,0x44,0x44,0x44,0x00,0x00,
+
+ 7, // 0x6F 'o'
+ 0x00,0x00,0x00,0x38,0x44,0x44,0x44,0x44,0x44,0x38,0x00,0x00,
+
+ 7, // 0x70 'p'
+ 0x00,0x00,0x00,0x78,0x44,0x44,0x44,0x44,0x44,0x78,0x40,0x40,
+
+ 7, // 0x71 'q'
+ 0x00,0x00,0x00,0x3C,0x44,0x44,0x44,0x44,0x44,0x3C,0x04,0x04,
+
+ 7, // 0x72 'r'
+ 0x00,0x00,0x00,0x58,0x24,0x20,0x20,0x20,0x20,0x70,0x00,0x00,
+
+ 7, // 0x73 's'
+ 0x00,0x00,0x00,0x38,0x44,0x40,0x38,0x04,0x44,0x38,0x00,0x00,
+
+ 7, // 0x74 't'
+ 0x00,0x20,0x20,0x70,0x20,0x20,0x20,0x20,0x24,0x18,0x00,0x00,
+
+ 7, // 0x75 'u'
+ 0x00,0x00,0x00,0x44,0x44,0x44,0x44,0x44,0x4C,0x34,0x00,0x00,
+
+ 7, // 0x76 'v'
+ 0x00,0x00,0x00,0x44,0x44,0x44,0x28,0x28,0x10,0x10,0x00,0x00,
+
+ 7, // 0x77 'w'
+ 0x00,0x00,0x00,0x44,0x44,0x44,0x44,0x54,0x54,0x28,0x00,0x00,
+
+ 7, // 0x78 'x'
+ 0x00,0x00,0x00,0x44,0x44,0x28,0x10,0x28,0x44,0x44,0x00,0x00,
+
+ 7, // 0x79 'y'
+ 0x00,0x00,0x00,0x44,0x44,0x44,0x44,0x44,0x44,0x3C,0x08,0x70,
+
+ 7, // 0x7A 'z'
+ 0x00,0x00,0x00,0x7C,0x04,0x08,0x10,0x20,0x40,0x7C,0x00,0x00,
+
+ 7, // 0x7B '{'
+ 0x18,0x20,0x20,0x20,0x20,0xC0,0x20,0x20,0x20,0x20,0x18,0x00,
+
+ 7, // 0x7C '|'
+ 0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00,
+
+ 7, // 0x7D '}'
+ 0x60,0x10,0x10,0x10,0x10,0x0C,0x10,0x10,0x10,0x10,0x60,0x00,
+
+ 7, // 0x7E '~'
+ 0x00,0x60,0x92,0x92,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x7F ''
+ 0x00,0x10,0x38,0x6C,0x44,0x44,0x7C,0x00,0x00,0x00,0x00,0x00,
+
+ 0
+ };
+
+ const int8u mcs7x12_mono_low[] =
+ {
+ 12, 4, 32, 128-32,
+ 0x00,0x00,0x0D,0x00,0x1A,0x00,0x27,0x00,0x34,0x00,0x41,0x00,0x4E,0x00,0x5B,0x00,0x68,0x00,
+ 0x75,0x00,0x82,0x00,0x8F,0x00,0x9C,0x00,0xA9,0x00,0xB6,0x00,0xC3,0x00,0xD0,0x00,0xDD,0x00,
+ 0xEA,0x00,0xF7,0x00,0x04,0x01,0x11,0x01,0x1E,0x01,0x2B,0x01,0x38,0x01,0x45,0x01,0x52,0x01,
+ 0x5F,0x01,0x6C,0x01,0x79,0x01,0x86,0x01,0x93,0x01,0xA0,0x01,0xAD,0x01,0xBA,0x01,0xC7,0x01,
+ 0xD4,0x01,0xE1,0x01,0xEE,0x01,0xFB,0x01,0x08,0x02,0x15,0x02,0x22,0x02,0x2F,0x02,0x3C,0x02,
+ 0x49,0x02,0x56,0x02,0x63,0x02,0x70,0x02,0x7D,0x02,0x8A,0x02,0x97,0x02,0xA4,0x02,0xB1,0x02,
+ 0xBE,0x02,0xCB,0x02,0xD8,0x02,0xE5,0x02,0xF2,0x02,0xFF,0x02,0x0C,0x03,0x19,0x03,0x26,0x03,
+ 0x33,0x03,0x40,0x03,0x4D,0x03,0x5A,0x03,0x67,0x03,0x74,0x03,0x81,0x03,0x8E,0x03,0x9B,0x03,
+ 0xA8,0x03,0xB5,0x03,0xC2,0x03,0xCF,0x03,0xDC,0x03,0xE9,0x03,0xF6,0x03,0x03,0x04,0x10,0x04,
+ 0x1D,0x04,0x2A,0x04,0x37,0x04,0x44,0x04,0x51,0x04,0x5E,0x04,0x6B,0x04,0x78,0x04,0x85,0x04,
+ 0x92,0x04,0x9F,0x04,0xAC,0x04,0xB9,0x04,0xC6,0x04,0xD3,0x04,
+
+ 7, // 0x20 ' '
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x21 '!'
+ 0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x10,0x00,0x00,
+
+ 7, // 0x22 '"'
+ 0x28,0x28,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x23 '#'
+ 0x00,0x28,0x28,0x7C,0x28,0x28,0x28,0x7C,0x28,0x28,0x00,0x00,
+
+ 7, // 0x24 '$'
+ 0x00,0x10,0x38,0x54,0x50,0x38,0x14,0x54,0x38,0x10,0x00,0x00,
+
+ 7, // 0x25 '%'
+ 0x34,0x54,0x68,0x08,0x10,0x10,0x20,0x2C,0x54,0x58,0x00,0x00,
+
+ 7, // 0x26 '&'
+ 0x00,0x20,0x50,0x50,0x20,0x54,0x54,0x48,0x34,0x00,0x00,0x00,
+
+ 7, // 0x27 '''
+ 0x00,0x10,0x10,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x28 '('
+ 0x08,0x10,0x10,0x20,0x20,0x20,0x20,0x20,0x10,0x10,0x08,0x00,
+
+ 7, // 0x29 ')'
+ 0x20,0x10,0x10,0x08,0x08,0x08,0x08,0x08,0x10,0x10,0x20,0x00,
+
+ 7, // 0x2A '*'
+ 0x00,0x00,0x10,0x54,0x38,0x7C,0x38,0x54,0x10,0x00,0x00,0x00,
+
+ 7, // 0x2B '+'
+ 0x00,0x00,0x00,0x10,0x10,0x7C,0x10,0x10,0x00,0x00,0x00,0x00,
+
+ 7, // 0x2C ','
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x20,0x40,0x00,
+
+ 7, // 0x2D '-'
+ 0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x2E '.'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,
+
+ 7, // 0x2F '/'
+ 0x04,0x04,0x08,0x08,0x10,0x10,0x20,0x20,0x40,0x40,0x00,0x00,
+
+ 7, // 0x30 '0'
+ 0x00,0x38,0x44,0x44,0x54,0x54,0x44,0x44,0x38,0x00,0x00,0x00,
+
+ 7, // 0x31 '1'
+ 0x00,0x10,0x30,0x10,0x10,0x10,0x10,0x10,0x38,0x00,0x00,0x00,
+
+ 7, // 0x32 '2'
+ 0x00,0x38,0x44,0x44,0x08,0x10,0x20,0x40,0x7C,0x00,0x00,0x00,
+
+ 7, // 0x33 '3'
+ 0x00,0x38,0x44,0x04,0x38,0x04,0x04,0x44,0x38,0x00,0x00,0x00,
+
+ 7, // 0x34 '4'
+ 0x00,0x08,0x18,0x28,0x28,0x48,0x7C,0x08,0x08,0x00,0x00,0x00,
+
+ 7, // 0x35 '5'
+ 0x00,0x7C,0x40,0x78,0x44,0x04,0x04,0x44,0x38,0x00,0x00,0x00,
+
+ 7, // 0x36 '6'
+ 0x00,0x38,0x44,0x40,0x78,0x44,0x44,0x44,0x38,0x00,0x00,0x00,
+
+ 7, // 0x37 '7'
+ 0x00,0x7C,0x04,0x08,0x08,0x10,0x10,0x20,0x20,0x00,0x00,0x00,
+
+ 7, // 0x38 '8'
+ 0x00,0x38,0x44,0x44,0x38,0x44,0x44,0x44,0x38,0x00,0x00,0x00,
+
+ 7, // 0x39 '9'
+ 0x00,0x38,0x44,0x44,0x44,0x3C,0x04,0x44,0x38,0x00,0x00,0x00,
+
+ 7, // 0x3A ':'
+ 0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x30,0x30,0x00,0x00,0x00,
+
+ 7, // 0x3B ';'
+ 0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x30,0x30,0x20,0x40,0x00,
+
+ 7, // 0x3C '<'
+ 0x00,0x04,0x08,0x10,0x20,0x40,0x20,0x10,0x08,0x04,0x00,0x00,
+
+ 7, // 0x3D '='
+ 0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,
+
+ 7, // 0x3E '>'
+ 0x00,0x40,0x20,0x10,0x08,0x04,0x08,0x10,0x20,0x40,0x00,0x00,
+
+ 7, // 0x3F '?'
+ 0x00,0x38,0x44,0x04,0x04,0x08,0x10,0x10,0x00,0x10,0x00,0x00,
+
+ 7, // 0x40 '@'
+ 0x00,0x38,0x44,0x44,0x5C,0x54,0x4C,0x40,0x38,0x00,0x00,0x00,
+
+ 7, // 0x41 'A'
+ 0x00,0x38,0x44,0x44,0x44,0x7C,0x44,0x44,0x44,0x00,0x00,0x00,
+
+ 7, // 0x42 'B'
+ 0x00,0x78,0x44,0x44,0x78,0x44,0x44,0x44,0x78,0x00,0x00,0x00,
+
+ 7, // 0x43 'C'
+ 0x00,0x38,0x44,0x40,0x40,0x40,0x40,0x44,0x38,0x00,0x00,0x00,
+
+ 7, // 0x44 'D'
+ 0x00,0x70,0x48,0x44,0x44,0x44,0x44,0x48,0x70,0x00,0x00,0x00,
+
+ 7, // 0x45 'E'
+ 0x00,0x7C,0x40,0x40,0x78,0x40,0x40,0x40,0x7C,0x00,0x00,0x00,
+
+ 7, // 0x46 'F'
+ 0x00,0x7C,0x40,0x40,0x78,0x40,0x40,0x40,0x40,0x00,0x00,0x00,
+
+ 7, // 0x47 'G'
+ 0x00,0x38,0x44,0x40,0x40,0x4C,0x44,0x4C,0x34,0x00,0x00,0x00,
+
+ 7, // 0x48 'H'
+ 0x00,0x44,0x44,0x44,0x7C,0x44,0x44,0x44,0x44,0x00,0x00,0x00,
+
+ 7, // 0x49 'I'
+ 0x00,0x38,0x10,0x10,0x10,0x10,0x10,0x10,0x38,0x00,0x00,0x00,
+
+ 7, // 0x4A 'J'
+ 0x00,0x1C,0x08,0x08,0x08,0x08,0x48,0x48,0x30,0x00,0x00,0x00,
+
+ 7, // 0x4B 'K'
+ 0x00,0x44,0x48,0x50,0x60,0x60,0x50,0x48,0x44,0x00,0x00,0x00,
+
+ 7, // 0x4C 'L'
+ 0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x7C,0x00,0x00,0x00,
+
+ 7, // 0x4D 'M'
+ 0x00,0x44,0x6C,0x54,0x54,0x44,0x44,0x44,0x44,0x00,0x00,0x00,
+
+ 7, // 0x4E 'N'
+ 0x00,0x44,0x64,0x64,0x54,0x54,0x4C,0x4C,0x44,0x00,0x00,0x00,
+
+ 7, // 0x4F 'O'
+ 0x00,0x38,0x44,0x44,0x44,0x44,0x44,0x44,0x38,0x00,0x00,0x00,
+
+ 7, // 0x50 'P'
+ 0x00,0x78,0x44,0x44,0x44,0x78,0x40,0x40,0x40,0x00,0x00,0x00,
+
+ 7, // 0x51 'Q'
+ 0x00,0x38,0x44,0x44,0x44,0x44,0x54,0x48,0x34,0x00,0x00,0x00,
+
+ 7, // 0x52 'R'
+ 0x00,0x78,0x44,0x44,0x44,0x78,0x48,0x44,0x44,0x00,0x00,0x00,
+
+ 7, // 0x53 'S'
+ 0x00,0x38,0x44,0x40,0x38,0x04,0x44,0x44,0x38,0x00,0x00,0x00,
+
+ 7, // 0x54 'T'
+ 0x00,0x7C,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00,0x00,
+
+ 7, // 0x55 'U'
+ 0x00,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x38,0x00,0x00,0x00,
+
+ 7, // 0x56 'V'
+ 0x00,0x44,0x44,0x44,0x28,0x28,0x28,0x10,0x10,0x00,0x00,0x00,
+
+ 7, // 0x57 'W'
+ 0x00,0x44,0x44,0x44,0x44,0x44,0x54,0x54,0x28,0x00,0x00,0x00,
+
+ 7, // 0x58 'X'
+ 0x00,0x44,0x44,0x28,0x10,0x28,0x44,0x44,0x44,0x00,0x00,0x00,
+
+ 7, // 0x59 'Y'
+ 0x00,0x44,0x44,0x44,0x28,0x10,0x10,0x10,0x10,0x00,0x00,0x00,
+
+ 7, // 0x5A 'Z'
+ 0x00,0x7C,0x04,0x08,0x10,0x20,0x40,0x40,0x7C,0x00,0x00,0x00,
+
+ 7, // 0x5B '['
+ 0x38,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x38,0x00,
+
+ 7, // 0x5C '\'
+ 0x00,0x40,0x40,0x20,0x20,0x10,0x10,0x08,0x08,0x04,0x04,0x00,
+
+ 7, // 0x5D ']'
+ 0x38,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x38,0x00,
+
+ 7, // 0x5E '^'
+ 0x00,0x10,0x28,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x5F '_'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,
+
+ 7, // 0x60 '`'
+ 0x00,0x20,0x20,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x61 'a'
+ 0x00,0x00,0x00,0x38,0x04,0x3C,0x44,0x44,0x3C,0x00,0x00,0x00,
+
+ 7, // 0x62 'b'
+ 0x00,0x40,0x40,0x78,0x44,0x44,0x44,0x44,0x78,0x00,0x00,0x00,
+
+ 7, // 0x63 'c'
+ 0x00,0x00,0x00,0x38,0x44,0x40,0x40,0x44,0x38,0x00,0x00,0x00,
+
+ 7, // 0x64 'd'
+ 0x00,0x04,0x04,0x3C,0x44,0x44,0x44,0x44,0x3C,0x00,0x00,0x00,
+
+ 7, // 0x65 'e'
+ 0x00,0x00,0x00,0x38,0x44,0x7C,0x40,0x44,0x38,0x00,0x00,0x00,
+
+ 7, // 0x66 'f'
+ 0x00,0x0C,0x10,0x38,0x10,0x10,0x10,0x10,0x10,0x00,0x00,0x00,
+
+ 7, // 0x67 'g'
+ 0x00,0x00,0x00,0x3C,0x44,0x44,0x44,0x44,0x3C,0x04,0x44,0x38,
+
+ 7, // 0x68 'h'
+ 0x00,0x40,0x40,0x78,0x44,0x44,0x44,0x44,0x44,0x00,0x00,0x00,
+
+ 7, // 0x69 'i'
+ 0x00,0x10,0x00,0x30,0x10,0x10,0x10,0x10,0x38,0x00,0x00,0x00,
+
+ 7, // 0x6A 'j'
+ 0x00,0x08,0x00,0x18,0x08,0x08,0x08,0x08,0x08,0x48,0x48,0x30,
+
+ 7, // 0x6B 'k'
+ 0x00,0x40,0x40,0x4C,0x50,0x60,0x50,0x48,0x44,0x00,0x00,0x00,
+
+ 7, // 0x6C 'l'
+ 0x00,0x30,0x10,0x10,0x10,0x10,0x10,0x10,0x38,0x00,0x00,0x00,
+
+ 7, // 0x6D 'm'
+ 0x00,0x00,0x00,0x68,0x54,0x54,0x44,0x44,0x44,0x00,0x00,0x00,
+
+ 7, // 0x6E 'n'
+ 0x00,0x00,0x00,0x58,0x64,0x44,0x44,0x44,0x44,0x00,0x00,0x00,
+
+ 7, // 0x6F 'o'
+ 0x00,0x00,0x00,0x38,0x44,0x44,0x44,0x44,0x38,0x00,0x00,0x00,
+
+ 7, // 0x70 'p'
+ 0x00,0x00,0x00,0x78,0x44,0x44,0x44,0x44,0x78,0x40,0x40,0x40,
+
+ 7, // 0x71 'q'
+ 0x00,0x00,0x00,0x3C,0x44,0x44,0x44,0x44,0x3C,0x04,0x04,0x04,
+
+ 7, // 0x72 'r'
+ 0x00,0x00,0x00,0x58,0x24,0x20,0x20,0x20,0x70,0x00,0x00,0x00,
+
+ 7, // 0x73 's'
+ 0x00,0x00,0x00,0x38,0x44,0x30,0x08,0x44,0x38,0x00,0x00,0x00,
+
+ 7, // 0x74 't'
+ 0x00,0x20,0x20,0x70,0x20,0x20,0x20,0x24,0x18,0x00,0x00,0x00,
+
+ 7, // 0x75 'u'
+ 0x00,0x00,0x00,0x44,0x44,0x44,0x44,0x4C,0x34,0x00,0x00,0x00,
+
+ 7, // 0x76 'v'
+ 0x00,0x00,0x00,0x44,0x44,0x28,0x28,0x10,0x10,0x00,0x00,0x00,
+
+ 7, // 0x77 'w'
+ 0x00,0x00,0x00,0x44,0x44,0x44,0x54,0x54,0x28,0x00,0x00,0x00,
+
+ 7, // 0x78 'x'
+ 0x00,0x00,0x00,0x44,0x28,0x10,0x28,0x44,0x44,0x00,0x00,0x00,
+
+ 7, // 0x79 'y'
+ 0x00,0x00,0x00,0x44,0x44,0x44,0x44,0x44,0x3C,0x04,0x08,0x70,
+
+ 7, // 0x7A 'z'
+ 0x00,0x00,0x00,0x7C,0x08,0x10,0x20,0x40,0x7C,0x00,0x00,0x00,
+
+ 7, // 0x7B '{'
+ 0x18,0x20,0x20,0x20,0x20,0xC0,0x20,0x20,0x20,0x20,0x18,0x00,
+
+ 7, // 0x7C '|'
+ 0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00,
+
+ 7, // 0x7D '}'
+ 0x60,0x10,0x10,0x10,0x10,0x0C,0x10,0x10,0x10,0x10,0x60,0x00,
+
+ 7, // 0x7E '~'
+ 0x00,0x24,0x54,0x48,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x7F ''
+ 0x00,0x10,0x38,0x6C,0x44,0x44,0x7C,0x00,0x00,0x00,0x00,0x00,
+
+ 0
+ };
+
+ const int8u verdana12[] =
+ {
+ 12, 3, 32, 128-32,
+ 0x00,0x00,0x0D,0x00,0x1A,0x00,0x27,0x00,0x34,0x00,0x41,0x00,0x5A,0x00,0x67,0x00,0x74,0x00,
+ 0x81,0x00,0x8E,0x00,0x9B,0x00,0xA8,0x00,0xB5,0x00,0xC2,0x00,0xCF,0x00,0xDC,0x00,0xE9,0x00,
+ 0xF6,0x00,0x03,0x01,0x10,0x01,0x1D,0x01,0x2A,0x01,0x37,0x01,0x44,0x01,0x51,0x01,0x5E,0x01,
+ 0x6B,0x01,0x78,0x01,0x85,0x01,0x92,0x01,0x9F,0x01,0xAC,0x01,0xC5,0x01,0xD2,0x01,0xDF,0x01,
+ 0xEC,0x01,0xF9,0x01,0x06,0x02,0x13,0x02,0x20,0x02,0x2D,0x02,0x3A,0x02,0x47,0x02,0x54,0x02,
+ 0x61,0x02,0x7A,0x02,0x87,0x02,0xA0,0x02,0xAD,0x02,0xC6,0x02,0xD3,0x02,0xE0,0x02,0xED,0x02,
+ 0xFA,0x02,0x07,0x03,0x20,0x03,0x2D,0x03,0x3A,0x03,0x47,0x03,0x54,0x03,0x61,0x03,0x6E,0x03,
+ 0x7B,0x03,0x88,0x03,0x95,0x03,0xA2,0x03,0xAF,0x03,0xBC,0x03,0xC9,0x03,0xD6,0x03,0xE3,0x03,
+ 0xF0,0x03,0xFD,0x03,0x0A,0x04,0x17,0x04,0x24,0x04,0x31,0x04,0x4A,0x04,0x57,0x04,0x64,0x04,
+ 0x71,0x04,0x7E,0x04,0x8B,0x04,0x98,0x04,0xA5,0x04,0xB2,0x04,0xBF,0x04,0xCC,0x04,0xD9,0x04,
+ 0xE6,0x04,0xF3,0x04,0x00,0x05,0x0D,0x05,0x1A,0x05,0x27,0x05,
+
+ 3, // 0x20 ' '
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 5, // 0x21 '!'
+ 0x00,0x00,0x00,0x20,0x20,0x20,0x20,0x20,0x00,0x20,0x00,0x00,
+
+ 5, // 0x22 '"'
+ 0x00,0x00,0x50,0x50,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x23 '#'
+ 0x00,0x00,0x00,0x00,0x28,0x7C,0x28,0x7C,0x28,0x00,0x00,0x00,
+
+ 7, // 0x24 '$'
+ 0x00,0x00,0x10,0x10,0x3C,0x50,0x30,0x18,0x14,0x78,0x10,0x10,
+
+ 11, // 0x25 '%'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x31,0x00,0x4A,0x00,0x4A,0x00,0x35,0x80,0x0A,0x40,0x0A,0x40,0x11,0x80,0x00,0x00,0x00,0x00,
+
+ 7, // 0x26 '&'
+ 0x00,0x00,0x00,0x30,0x48,0x48,0x32,0x4A,0x44,0x3A,0x00,0x00,
+
+ 3, // 0x27 '''
+ 0x00,0x00,0x40,0x40,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 4, // 0x28 '('
+ 0x00,0x00,0x10,0x20,0x40,0x40,0x40,0x40,0x40,0x40,0x20,0x10,
+
+ 4, // 0x29 ')'
+ 0x00,0x00,0x80,0x40,0x20,0x20,0x20,0x20,0x20,0x20,0x40,0x80,
+
+ 7, // 0x2A '*'
+ 0x00,0x10,0x54,0x38,0x54,0x10,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x2B '+'
+ 0x00,0x00,0x00,0x00,0x10,0x10,0x7C,0x10,0x10,0x00,0x00,0x00,
+
+ 3, // 0x2C ','
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x40,0x80,0x00,
+
+ 5, // 0x2D '-'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x00,0x00,
+
+ 3, // 0x2E '.'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x40,0x00,0x00,
+
+ 4, // 0x2F '/'
+ 0x00,0x00,0x10,0x10,0x20,0x20,0x40,0x40,0x40,0x80,0x80,0x00,
+
+ 7, // 0x30 '0'
+ 0x00,0x00,0x00,0x38,0x44,0x44,0x44,0x44,0x44,0x38,0x00,0x00,
+
+ 7, // 0x31 '1'
+ 0x00,0x00,0x00,0x10,0x30,0x10,0x10,0x10,0x10,0x38,0x00,0x00,
+
+ 7, // 0x32 '2'
+ 0x00,0x00,0x00,0x38,0x44,0x04,0x08,0x10,0x20,0x7C,0x00,0x00,
+
+ 7, // 0x33 '3'
+ 0x00,0x00,0x00,0x38,0x44,0x04,0x18,0x04,0x44,0x38,0x00,0x00,
+
+ 7, // 0x34 '4'
+ 0x00,0x00,0x00,0x08,0x18,0x28,0x48,0x7C,0x08,0x08,0x00,0x00,
+
+ 7, // 0x35 '5'
+ 0x00,0x00,0x00,0x7C,0x40,0x78,0x04,0x04,0x44,0x38,0x00,0x00,
+
+ 7, // 0x36 '6'
+ 0x00,0x00,0x00,0x18,0x20,0x40,0x78,0x44,0x44,0x38,0x00,0x00,
+
+ 7, // 0x37 '7'
+ 0x00,0x00,0x00,0x7C,0x04,0x08,0x08,0x10,0x10,0x10,0x00,0x00,
+
+ 7, // 0x38 '8'
+ 0x00,0x00,0x00,0x38,0x44,0x44,0x38,0x44,0x44,0x38,0x00,0x00,
+
+ 7, // 0x39 '9'
+ 0x00,0x00,0x00,0x38,0x44,0x44,0x3C,0x04,0x08,0x30,0x00,0x00,
+
+ 4, // 0x3A ':'
+ 0x00,0x00,0x00,0x00,0x00,0x40,0x40,0x00,0x40,0x40,0x00,0x00,
+
+ 4, // 0x3B ';'
+ 0x00,0x00,0x00,0x00,0x00,0x40,0x40,0x00,0x40,0x40,0x80,0x00,
+
+ 7, // 0x3C '<'
+ 0x00,0x00,0x00,0x00,0x04,0x18,0x60,0x18,0x04,0x00,0x00,0x00,
+
+ 7, // 0x3D '='
+ 0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x7C,0x00,0x00,0x00,0x00,
+
+ 7, // 0x3E '>'
+ 0x00,0x00,0x00,0x00,0x40,0x30,0x0C,0x30,0x40,0x00,0x00,0x00,
+
+ 6, // 0x3F '?'
+ 0x00,0x00,0x00,0x70,0x08,0x08,0x10,0x20,0x00,0x20,0x00,0x00,
+
+ 10, // 0x40 '@'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x20,0x80,0x4E,0x80,0x52,0x80,0x52,0x80,0x4D,0x00,0x20,0x00,0x1F,0x00,0x00,0x00,
+
+ 8, // 0x41 'A'
+ 0x00,0x00,0x00,0x18,0x18,0x24,0x24,0x7E,0x42,0x42,0x00,0x00,
+
+ 7, // 0x42 'B'
+ 0x00,0x00,0x00,0x70,0x48,0x48,0x78,0x44,0x44,0x78,0x00,0x00,
+
+ 8, // 0x43 'C'
+ 0x00,0x00,0x00,0x1C,0x22,0x40,0x40,0x40,0x22,0x1C,0x00,0x00,
+
+ 8, // 0x44 'D'
+ 0x00,0x00,0x00,0x78,0x44,0x42,0x42,0x42,0x44,0x78,0x00,0x00,
+
+ 7, // 0x45 'E'
+ 0x00,0x00,0x00,0x7C,0x40,0x40,0x78,0x40,0x40,0x7C,0x00,0x00,
+
+ 6, // 0x46 'F'
+ 0x00,0x00,0x00,0x7C,0x40,0x40,0x78,0x40,0x40,0x40,0x00,0x00,
+
+ 8, // 0x47 'G'
+ 0x00,0x00,0x00,0x1C,0x22,0x40,0x4E,0x42,0x22,0x1C,0x00,0x00,
+
+ 8, // 0x48 'H'
+ 0x00,0x00,0x00,0x42,0x42,0x42,0x7E,0x42,0x42,0x42,0x00,0x00,
+
+ 5, // 0x49 'I'
+ 0x00,0x00,0x00,0x70,0x20,0x20,0x20,0x20,0x20,0x70,0x00,0x00,
+
+ 5, // 0x4A 'J'
+ 0x00,0x00,0x00,0x30,0x10,0x10,0x10,0x10,0x10,0xE0,0x00,0x00,
+
+ 7, // 0x4B 'K'
+ 0x00,0x00,0x00,0x44,0x48,0x50,0x60,0x50,0x48,0x44,0x00,0x00,
+
+ 6, // 0x4C 'L'
+ 0x00,0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x7C,0x00,0x00,
+
+ 9, // 0x4D 'M'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x63,0x00,0x63,0x00,0x55,0x00,0x55,0x00,0x49,0x00,0x49,0x00,0x41,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x4E 'N'
+ 0x00,0x00,0x00,0x42,0x62,0x52,0x4A,0x46,0x42,0x42,0x00,0x00,
+
+ 9, // 0x4F 'O'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x22,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x22,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x50 'P'
+ 0x00,0x00,0x00,0x78,0x44,0x44,0x44,0x78,0x40,0x40,0x00,0x00,
+
+ 9, // 0x51 'Q'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x22,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x22,0x00,0x1C,0x00,0x04,0x00,0x03,0x00,
+
+ 7, // 0x52 'R'
+ 0x00,0x00,0x00,0x78,0x44,0x44,0x78,0x50,0x48,0x44,0x00,0x00,
+
+ 7, // 0x53 'S'
+ 0x00,0x00,0x00,0x38,0x44,0x40,0x38,0x04,0x44,0x38,0x00,0x00,
+
+ 7, // 0x54 'T'
+ 0x00,0x00,0x00,0xFE,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00,
+
+ 8, // 0x55 'U'
+ 0x00,0x00,0x00,0x42,0x42,0x42,0x42,0x42,0x42,0x3C,0x00,0x00,
+
+ 8, // 0x56 'V'
+ 0x00,0x00,0x00,0x42,0x42,0x42,0x24,0x24,0x18,0x18,0x00,0x00,
+
+ 9, // 0x57 'W'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x00,0x49,0x00,0x49,0x00,0x55,0x00,0x55,0x00,0x22,0x00,0x22,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x58 'X'
+ 0x00,0x00,0x00,0x44,0x44,0x28,0x10,0x28,0x44,0x44,0x00,0x00,
+
+ 7, // 0x59 'Y'
+ 0x00,0x00,0x00,0x44,0x44,0x28,0x28,0x10,0x10,0x10,0x00,0x00,
+
+ 7, // 0x5A 'Z'
+ 0x00,0x00,0x00,0x7C,0x04,0x08,0x10,0x20,0x40,0x7C,0x00,0x00,
+
+ 4, // 0x5B '['
+ 0x00,0x00,0x60,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x60,
+
+ 4, // 0x5C '\'
+ 0x00,0x00,0x80,0x80,0x40,0x40,0x40,0x20,0x20,0x10,0x10,0x00,
+
+ 4, // 0x5D ']'
+ 0x00,0x00,0x60,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x60,
+
+ 7, // 0x5E '^'
+ 0x00,0x00,0x00,0x10,0x28,0x44,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 6, // 0x5F '_'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,
+
+ 6, // 0x60 '`'
+ 0x00,0x00,0x20,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 6, // 0x61 'a'
+ 0x00,0x00,0x00,0x00,0x00,0x30,0x08,0x38,0x48,0x38,0x00,0x00,
+
+ 6, // 0x62 'b'
+ 0x00,0x00,0x40,0x40,0x40,0x70,0x48,0x48,0x48,0x70,0x00,0x00,
+
+ 6, // 0x63 'c'
+ 0x00,0x00,0x00,0x00,0x00,0x38,0x40,0x40,0x40,0x38,0x00,0x00,
+
+ 6, // 0x64 'd'
+ 0x00,0x00,0x08,0x08,0x08,0x38,0x48,0x48,0x48,0x38,0x00,0x00,
+
+ 6, // 0x65 'e'
+ 0x00,0x00,0x00,0x00,0x00,0x30,0x48,0x78,0x40,0x38,0x00,0x00,
+
+ 4, // 0x66 'f'
+ 0x00,0x00,0x30,0x40,0x40,0xE0,0x40,0x40,0x40,0x40,0x00,0x00,
+
+ 6, // 0x67 'g'
+ 0x00,0x00,0x00,0x00,0x00,0x38,0x48,0x48,0x48,0x38,0x08,0x30,
+
+ 6, // 0x68 'h'
+ 0x00,0x00,0x40,0x40,0x40,0x70,0x48,0x48,0x48,0x48,0x00,0x00,
+
+ 3, // 0x69 'i'
+ 0x00,0x00,0x00,0x40,0x00,0x40,0x40,0x40,0x40,0x40,0x00,0x00,
+
+ 3, // 0x6A 'j'
+ 0x00,0x00,0x00,0x40,0x00,0xC0,0x40,0x40,0x40,0x40,0x40,0x80,
+
+ 6, // 0x6B 'k'
+ 0x00,0x00,0x40,0x40,0x40,0x48,0x50,0x60,0x50,0x48,0x00,0x00,
+
+ 3, // 0x6C 'l'
+ 0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x00,
+
+ 9, // 0x6D 'm'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x76,0x00,0x49,0x00,0x49,0x00,0x49,0x00,0x49,0x00,0x00,0x00,0x00,0x00,
+
+ 6, // 0x6E 'n'
+ 0x00,0x00,0x00,0x00,0x00,0x70,0x48,0x48,0x48,0x48,0x00,0x00,
+
+ 6, // 0x6F 'o'
+ 0x00,0x00,0x00,0x00,0x00,0x30,0x48,0x48,0x48,0x30,0x00,0x00,
+
+ 6, // 0x70 'p'
+ 0x00,0x00,0x00,0x00,0x00,0x70,0x48,0x48,0x48,0x70,0x40,0x40,
+
+ 6, // 0x71 'q'
+ 0x00,0x00,0x00,0x00,0x00,0x38,0x48,0x48,0x48,0x38,0x08,0x08,
+
+ 4, // 0x72 'r'
+ 0x00,0x00,0x00,0x00,0x00,0x50,0x60,0x40,0x40,0x40,0x00,0x00,
+
+ 6, // 0x73 's'
+ 0x00,0x00,0x00,0x00,0x00,0x38,0x40,0x30,0x08,0x70,0x00,0x00,
+
+ 4, // 0x74 't'
+ 0x00,0x00,0x00,0x00,0x40,0xF0,0x40,0x40,0x40,0x30,0x00,0x00,
+
+ 6, // 0x75 'u'
+ 0x00,0x00,0x00,0x00,0x00,0x48,0x48,0x48,0x48,0x38,0x00,0x00,
+
+ 6, // 0x76 'v'
+ 0x00,0x00,0x00,0x00,0x00,0x48,0x48,0x48,0x30,0x30,0x00,0x00,
+
+ 7, // 0x77 'w'
+ 0x00,0x00,0x00,0x00,0x00,0x44,0x54,0x54,0x28,0x28,0x00,0x00,
+
+ 6, // 0x78 'x'
+ 0x00,0x00,0x00,0x00,0x00,0x48,0x48,0x30,0x48,0x48,0x00,0x00,
+
+ 6, // 0x79 'y'
+ 0x00,0x00,0x00,0x00,0x00,0x48,0x48,0x48,0x30,0x10,0x20,0x20,
+
+ 5, // 0x7A 'z'
+ 0x00,0x00,0x00,0x00,0x00,0x70,0x10,0x20,0x40,0x70,0x00,0x00,
+
+ 6, // 0x7B '{'
+ 0x00,0x00,0x18,0x20,0x20,0x20,0x20,0xC0,0x20,0x20,0x20,0x18,
+
+ 5, // 0x7C '|'
+ 0x00,0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+
+ 6, // 0x7D '}'
+ 0x00,0x00,0x60,0x10,0x10,0x10,0x10,0x0C,0x10,0x10,0x10,0x60,
+
+ 7, // 0x7E '~'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x58,0x00,0x00,0x00,0x00,
+
+ 9, // 0x7F ''
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,
+
+ 0
+ };
+
+ const int8u verdana12_bold[] =
+ {
+ 12, 3, 32, 128-32,
+ 0x00,0x00,0x0D,0x00,0x1A,0x00,0x27,0x00,0x34,0x00,0x41,0x00,0x5A,0x00,0x67,0x00,0x74,0x00,
+ 0x81,0x00,0x8E,0x00,0x9B,0x00,0xA8,0x00,0xB5,0x00,0xC2,0x00,0xCF,0x00,0xDC,0x00,0xE9,0x00,
+ 0xF6,0x00,0x03,0x01,0x10,0x01,0x1D,0x01,0x2A,0x01,0x37,0x01,0x44,0x01,0x51,0x01,0x5E,0x01,
+ 0x6B,0x01,0x78,0x01,0x85,0x01,0x92,0x01,0x9F,0x01,0xAC,0x01,0xC5,0x01,0xD2,0x01,0xDF,0x01,
+ 0xEC,0x01,0xF9,0x01,0x06,0x02,0x13,0x02,0x20,0x02,0x2D,0x02,0x3A,0x02,0x47,0x02,0x54,0x02,
+ 0x61,0x02,0x6E,0x02,0x7B,0x02,0x88,0x02,0x95,0x02,0xA2,0x02,0xAF,0x02,0xBC,0x02,0xC9,0x02,
+ 0xD6,0x02,0xE3,0x02,0xFC,0x02,0x09,0x03,0x16,0x03,0x23,0x03,0x30,0x03,0x3D,0x03,0x4A,0x03,
+ 0x57,0x03,0x64,0x03,0x71,0x03,0x7E,0x03,0x8B,0x03,0x98,0x03,0xA5,0x03,0xB2,0x03,0xBF,0x03,
+ 0xCC,0x03,0xD9,0x03,0xE6,0x03,0xF3,0x03,0x00,0x04,0x0D,0x04,0x26,0x04,0x33,0x04,0x40,0x04,
+ 0x4D,0x04,0x5A,0x04,0x67,0x04,0x74,0x04,0x81,0x04,0x8E,0x04,0x9B,0x04,0xB4,0x04,0xC1,0x04,
+ 0xCE,0x04,0xDB,0x04,0xE8,0x04,0xF5,0x04,0x02,0x05,0x0F,0x05,
+
+ 3, // 0x20 ' '
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 4, // 0x21 '!'
+ 0x00,0x00,0x00,0x60,0x60,0x60,0x60,0x60,0x00,0x60,0x00,0x00,
+
+ 5, // 0x22 '"'
+ 0x00,0x00,0xD8,0xD8,0xD8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x23 '#'
+ 0x00,0x00,0x00,0x14,0x14,0x7E,0x28,0xFC,0x50,0x50,0x00,0x00,
+
+ 6, // 0x24 '$'
+ 0x00,0x00,0x20,0x20,0x70,0xE8,0xE0,0x38,0xB8,0x70,0x20,0x20,
+
+ 11, // 0x25 '%'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x62,0x00,0x94,0x00,0x94,0x00,0x69,0x80,0x0A,0x40,0x0A,0x40,0x11,0x80,0x00,0x00,0x00,0x00,
+
+ 8, // 0x26 '&'
+ 0x00,0x00,0x00,0x70,0xD8,0xD8,0x76,0xDC,0xCC,0x76,0x00,0x00,
+
+ 3, // 0x27 '''
+ 0x00,0x00,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 5, // 0x28 '('
+ 0x00,0x00,0x30,0x60,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x60,0x30,
+
+ 5, // 0x29 ')'
+ 0x00,0x00,0xC0,0x60,0x30,0x30,0x30,0x30,0x30,0x30,0x60,0xC0,
+
+ 6, // 0x2A '*'
+ 0x00,0x00,0x20,0xA8,0x70,0xA8,0x20,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x2B '+'
+ 0x00,0x00,0x00,0x00,0x10,0x10,0x7C,0x10,0x10,0x00,0x00,0x00,
+
+ 3, // 0x2C ','
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0x80,0x00,
+
+ 4, // 0x2D '-'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0x00,0x00,
+
+ 3, // 0x2E '.'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,
+
+ 6, // 0x2F '/'
+ 0x00,0x00,0x08,0x08,0x10,0x10,0x20,0x40,0x40,0x80,0x80,0x00,
+
+ 6, // 0x30 '0'
+ 0x00,0x00,0x00,0x70,0xD8,0xD8,0xD8,0xD8,0xD8,0x70,0x00,0x00,
+
+ 6, // 0x31 '1'
+ 0x00,0x00,0x00,0x30,0x70,0x30,0x30,0x30,0x30,0x78,0x00,0x00,
+
+ 6, // 0x32 '2'
+ 0x00,0x00,0x00,0x70,0x98,0x18,0x30,0x60,0xC0,0xF8,0x00,0x00,
+
+ 6, // 0x33 '3'
+ 0x00,0x00,0x00,0x70,0x98,0x18,0x70,0x18,0x98,0x70,0x00,0x00,
+
+ 6, // 0x34 '4'
+ 0x00,0x00,0x00,0x18,0x38,0x58,0x98,0xFC,0x18,0x18,0x00,0x00,
+
+ 6, // 0x35 '5'
+ 0x00,0x00,0x00,0xF8,0xC0,0xF0,0x18,0x18,0x98,0x70,0x00,0x00,
+
+ 6, // 0x36 '6'
+ 0x00,0x00,0x00,0x70,0xC0,0xF0,0xD8,0xD8,0xD8,0x70,0x00,0x00,
+
+ 6, // 0x37 '7'
+ 0x00,0x00,0x00,0xF8,0x18,0x30,0x30,0x60,0x60,0xC0,0x00,0x00,
+
+ 6, // 0x38 '8'
+ 0x00,0x00,0x00,0x70,0xD8,0xD8,0x70,0xD8,0xD8,0x70,0x00,0x00,
+
+ 6, // 0x39 '9'
+ 0x00,0x00,0x00,0x70,0xD8,0xD8,0xD8,0x78,0x18,0x70,0x00,0x00,
+
+ 4, // 0x3A ':'
+ 0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x00,0x60,0x60,0x00,0x00,
+
+ 4, // 0x3B ';'
+ 0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x00,0x60,0x60,0x40,0x00,
+
+ 8, // 0x3C '<'
+ 0x00,0x00,0x00,0x00,0x04,0x18,0x60,0x60,0x18,0x04,0x00,0x00,
+
+ 8, // 0x3D '='
+ 0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x7C,0x00,0x00,0x00,0x00,
+
+ 8, // 0x3E '>'
+ 0x00,0x00,0x00,0x00,0x40,0x30,0x0C,0x0C,0x30,0x40,0x00,0x00,
+
+ 6, // 0x3F '?'
+ 0x00,0x00,0x00,0xF0,0x18,0x18,0x30,0x60,0x00,0x60,0x00,0x00,
+
+ 9, // 0x40 '@'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x42,0x00,0x9D,0x00,0xA5,0x00,0xA5,0x00,0x9E,0x00,0x40,0x00,0x3C,0x00,0x00,0x00,
+
+ 8, // 0x41 'A'
+ 0x00,0x00,0x00,0x38,0x38,0x6C,0x6C,0x7C,0xC6,0xC6,0x00,0x00,
+
+ 7, // 0x42 'B'
+ 0x00,0x00,0x00,0xF8,0xCC,0xCC,0xF8,0xCC,0xCC,0xF8,0x00,0x00,
+
+ 6, // 0x43 'C'
+ 0x00,0x00,0x00,0x70,0xC8,0xC0,0xC0,0xC0,0xC8,0x70,0x00,0x00,
+
+ 7, // 0x44 'D'
+ 0x00,0x00,0x00,0xF8,0xCC,0xCC,0xCC,0xCC,0xCC,0xF8,0x00,0x00,
+
+ 6, // 0x45 'E'
+ 0x00,0x00,0x00,0xF8,0xC0,0xC0,0xF8,0xC0,0xC0,0xF8,0x00,0x00,
+
+ 6, // 0x46 'F'
+ 0x00,0x00,0x00,0xF8,0xC0,0xC0,0xF8,0xC0,0xC0,0xC0,0x00,0x00,
+
+ 7, // 0x47 'G'
+ 0x00,0x00,0x00,0x78,0xC4,0xC0,0xC0,0xDC,0xCC,0x7C,0x00,0x00,
+
+ 7, // 0x48 'H'
+ 0x00,0x00,0x00,0xCC,0xCC,0xCC,0xFC,0xCC,0xCC,0xCC,0x00,0x00,
+
+ 5, // 0x49 'I'
+ 0x00,0x00,0x00,0xF0,0x60,0x60,0x60,0x60,0x60,0xF0,0x00,0x00,
+
+ 5, // 0x4A 'J'
+ 0x00,0x00,0x00,0x70,0x30,0x30,0x30,0x30,0x30,0xE0,0x00,0x00,
+
+ 7, // 0x4B 'K'
+ 0x00,0x00,0x00,0xCC,0xD8,0xF0,0xE0,0xF0,0xD8,0xCC,0x00,0x00,
+
+ 6, // 0x4C 'L'
+ 0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xF8,0x00,0x00,
+
+ 8, // 0x4D 'M'
+ 0x00,0x00,0x00,0x82,0xC6,0xEE,0xB6,0xB6,0x86,0x86,0x00,0x00,
+
+ 7, // 0x4E 'N'
+ 0x00,0x00,0x00,0x84,0xC4,0xE4,0xB4,0x9C,0x8C,0x84,0x00,0x00,
+
+ 8, // 0x4F 'O'
+ 0x00,0x00,0x00,0x7C,0xC6,0xC6,0xC6,0xC6,0xC6,0x7C,0x00,0x00,
+
+ 7, // 0x50 'P'
+ 0x00,0x00,0x00,0xF8,0xCC,0xCC,0xCC,0xF8,0xC0,0xC0,0x00,0x00,
+
+ 8, // 0x51 'Q'
+ 0x00,0x00,0x00,0x7C,0xC6,0xC6,0xC6,0xC6,0xC6,0x7C,0x18,0x0E,
+
+ 7, // 0x52 'R'
+ 0x00,0x00,0x00,0xF8,0xCC,0xCC,0xF8,0xD8,0xCC,0xC6,0x00,0x00,
+
+ 6, // 0x53 'S'
+ 0x00,0x00,0x00,0x70,0xC8,0xC0,0x70,0x18,0x98,0x70,0x00,0x00,
+
+ 6, // 0x54 'T'
+ 0x00,0x00,0x00,0xFC,0x30,0x30,0x30,0x30,0x30,0x30,0x00,0x00,
+
+ 7, // 0x55 'U'
+ 0x00,0x00,0x00,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0x78,0x00,0x00,
+
+ 7, // 0x56 'V'
+ 0x00,0x00,0x00,0xCC,0xCC,0x78,0x78,0x78,0x30,0x30,0x00,0x00,
+
+ 11, // 0x57 'W'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0xCC,0xC0,0xCC,0xC0,0x6D,0x80,0x6D,0x80,0x73,0x80,0x33,0x00,0x33,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x58 'X'
+ 0x00,0x00,0x00,0xCC,0xCC,0x78,0x30,0x78,0xCC,0xCC,0x00,0x00,
+
+ 7, // 0x59 'Y'
+ 0x00,0x00,0x00,0xCC,0xCC,0x78,0x30,0x30,0x30,0x30,0x00,0x00,
+
+ 6, // 0x5A 'Z'
+ 0x00,0x00,0x00,0xF8,0x18,0x30,0x60,0xC0,0xC0,0xF8,0x00,0x00,
+
+ 5, // 0x5B '['
+ 0x00,0x00,0x70,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x70,
+
+ 6, // 0x5C '\'
+ 0x00,0x00,0x80,0x80,0x40,0x40,0x20,0x10,0x10,0x08,0x08,0x00,
+
+ 5, // 0x5D ']'
+ 0x00,0x00,0x70,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x70,
+
+ 8, // 0x5E '^'
+ 0x00,0x00,0x00,0x18,0x3C,0x66,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 6, // 0x5F '_'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,
+
+ 6, // 0x60 '`'
+ 0x00,0x00,0x30,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 6, // 0x61 'a'
+ 0x00,0x00,0x00,0x00,0x00,0x70,0x18,0x78,0xD8,0x78,0x00,0x00,
+
+ 6, // 0x62 'b'
+ 0x00,0x00,0xC0,0xC0,0xC0,0xF0,0xD8,0xD8,0xD8,0xF0,0x00,0x00,
+
+ 5, // 0x63 'c'
+ 0x00,0x00,0x00,0x00,0x00,0x70,0xC0,0xC0,0xC0,0x70,0x00,0x00,
+
+ 6, // 0x64 'd'
+ 0x00,0x00,0x18,0x18,0x18,0x78,0xD8,0xD8,0xD8,0x78,0x00,0x00,
+
+ 6, // 0x65 'e'
+ 0x00,0x00,0x00,0x00,0x00,0x70,0xD8,0xF8,0xC0,0x78,0x00,0x00,
+
+ 5, // 0x66 'f'
+ 0x00,0x00,0x38,0x60,0x60,0xF8,0x60,0x60,0x60,0x60,0x00,0x00,
+
+ 6, // 0x67 'g'
+ 0x00,0x00,0x00,0x00,0x00,0x78,0xD8,0xD8,0xD8,0x78,0x18,0x70,
+
+ 6, // 0x68 'h'
+ 0x00,0x00,0xC0,0xC0,0xC0,0xF0,0xD8,0xD8,0xD8,0xD8,0x00,0x00,
+
+ 3, // 0x69 'i'
+ 0x00,0x00,0x00,0xC0,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,
+
+ 4, // 0x6A 'j'
+ 0x00,0x00,0x00,0x60,0x00,0xE0,0x60,0x60,0x60,0x60,0x60,0xC0,
+
+ 6, // 0x6B 'k'
+ 0x00,0x00,0xC0,0xC0,0xC0,0xD8,0xD8,0xF0,0xD8,0xD8,0x00,0x00,
+
+ 3, // 0x6C 'l'
+ 0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,
+
+ 9, // 0x6D 'm'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF6,0x00,0xDB,0x00,0xDB,0x00,0xDB,0x00,0xDB,0x00,0x00,0x00,0x00,0x00,
+
+ 6, // 0x6E 'n'
+ 0x00,0x00,0x00,0x00,0x00,0xF0,0xD8,0xD8,0xD8,0xD8,0x00,0x00,
+
+ 6, // 0x6F 'o'
+ 0x00,0x00,0x00,0x00,0x00,0x70,0xD8,0xD8,0xD8,0x70,0x00,0x00,
+
+ 6, // 0x70 'p'
+ 0x00,0x00,0x00,0x00,0x00,0xF0,0xD8,0xD8,0xD8,0xF0,0xC0,0xC0,
+
+ 6, // 0x71 'q'
+ 0x00,0x00,0x00,0x00,0x00,0x78,0xD8,0xD8,0xD8,0x78,0x18,0x18,
+
+ 4, // 0x72 'r'
+ 0x00,0x00,0x00,0x00,0x00,0xD0,0xE0,0xC0,0xC0,0xC0,0x00,0x00,
+
+ 5, // 0x73 's'
+ 0x00,0x00,0x00,0x00,0x00,0x70,0xC0,0xF0,0x30,0xE0,0x00,0x00,
+
+ 5, // 0x74 't'
+ 0x00,0x00,0x00,0x60,0x60,0xF8,0x60,0x60,0x60,0x38,0x00,0x00,
+
+ 6, // 0x75 'u'
+ 0x00,0x00,0x00,0x00,0x00,0xD8,0xD8,0xD8,0xD8,0x78,0x00,0x00,
+
+ 6, // 0x76 'v'
+ 0x00,0x00,0x00,0x00,0x00,0xD8,0xD8,0xD8,0x70,0x70,0x00,0x00,
+
+ 9, // 0x77 'w'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDB,0x00,0xDB,0x00,0xDB,0x00,0x66,0x00,0x66,0x00,0x00,0x00,0x00,0x00,
+
+ 6, // 0x78 'x'
+ 0x00,0x00,0x00,0x00,0x00,0xD8,0xD8,0x70,0xD8,0xD8,0x00,0x00,
+
+ 6, // 0x79 'y'
+ 0x00,0x00,0x00,0x00,0x00,0xD8,0xD8,0xD8,0x70,0x70,0x30,0x60,
+
+ 5, // 0x7A 'z'
+ 0x00,0x00,0x00,0x00,0x00,0xF0,0x30,0x60,0xC0,0xF0,0x00,0x00,
+
+ 6, // 0x7B '{'
+ 0x00,0x00,0x18,0x30,0x30,0x30,0xE0,0x30,0x30,0x30,0x30,0x18,
+
+ 5, // 0x7C '|'
+ 0x00,0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+
+ 6, // 0x7D '}'
+ 0x00,0x00,0xC0,0x60,0x60,0x60,0x38,0x60,0x60,0x60,0x60,0xC0,
+
+ 8, // 0x7E '~'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x62,0x92,0x8C,0x00,0x00,0x00,
+
+ 9, // 0x7F ''
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,
+
+ 0
+ };
+
+ const int8u verdana13[] =
+ {
+ 13, 3, 32, 128-32,
+ 0x00,0x00,0x0E,0x00,0x1C,0x00,0x2A,0x00,0x45,0x00,0x53,0x00,0x6E,0x00,0x7C,0x00,0x8A,0x00,
+ 0x98,0x00,0xA6,0x00,0xB4,0x00,0xCF,0x00,0xDD,0x00,0xEB,0x00,0xF9,0x00,0x07,0x01,0x15,0x01,
+ 0x23,0x01,0x31,0x01,0x3F,0x01,0x4D,0x01,0x5B,0x01,0x69,0x01,0x77,0x01,0x85,0x01,0x93,0x01,
+ 0xA1,0x01,0xAF,0x01,0xCA,0x01,0xE5,0x01,0x00,0x02,0x0E,0x02,0x29,0x02,0x37,0x02,0x45,0x02,
+ 0x60,0x02,0x7B,0x02,0x89,0x02,0x97,0x02,0xB2,0x02,0xC0,0x02,0xCE,0x02,0xDC,0x02,0xEA,0x02,
+ 0xF8,0x02,0x13,0x03,0x21,0x03,0x3C,0x03,0x4A,0x03,0x65,0x03,0x73,0x03,0x81,0x03,0x8F,0x03,
+ 0x9D,0x03,0xAB,0x03,0xC6,0x03,0xD4,0x03,0xE2,0x03,0xF0,0x03,0xFE,0x03,0x0C,0x04,0x1A,0x04,
+ 0x35,0x04,0x43,0x04,0x51,0x04,0x5F,0x04,0x6D,0x04,0x7B,0x04,0x89,0x04,0x97,0x04,0xA5,0x04,
+ 0xB3,0x04,0xC1,0x04,0xCF,0x04,0xDD,0x04,0xEB,0x04,0xF9,0x04,0x14,0x05,0x22,0x05,0x30,0x05,
+ 0x3E,0x05,0x4C,0x05,0x5A,0x05,0x68,0x05,0x76,0x05,0x84,0x05,0x92,0x05,0xAD,0x05,0xBB,0x05,
+ 0xC9,0x05,0xD7,0x05,0xE5,0x05,0xF3,0x05,0x01,0x06,0x1C,0x06,
+
+ 4, // 0x20 ' '
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 4, // 0x21 '!'
+ 0x00,0x00,0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x20,0x00,0x00,
+
+ 5, // 0x22 '"'
+ 0x00,0x00,0x50,0x50,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x23 '#'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x0A,0x00,0x0A,0x00,0x3F,0x00,0x14,0x00,0x14,0x00,0x7E,0x00,0x28,0x00,0x28,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x24 '$'
+ 0x00,0x00,0x10,0x10,0x3C,0x50,0x50,0x38,0x14,0x14,0x78,0x10,0x10,
+
+ 12, // 0x25 '%'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x31,0x00,0x49,0x00,0x4A,0x00,0x32,0x00,0x04,0xC0,0x05,0x20,0x09,0x20,0x08,0xC0,0x00,0x00,0x00,0x00,
+
+ 8, // 0x26 '&'
+ 0x00,0x00,0x00,0x30,0x48,0x48,0x32,0x4A,0x44,0x46,0x39,0x00,0x00,
+
+ 3, // 0x27 '''
+ 0x00,0x00,0x40,0x40,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 5, // 0x28 '('
+ 0x00,0x00,0x10,0x20,0x20,0x40,0x40,0x40,0x40,0x40,0x20,0x20,0x10,
+
+ 5, // 0x29 ')'
+ 0x00,0x00,0x40,0x20,0x20,0x10,0x10,0x10,0x10,0x10,0x20,0x20,0x40,
+
+ 7, // 0x2A '*'
+ 0x00,0x00,0x10,0x54,0x38,0x54,0x10,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x2B '+'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x7F,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x00,0x00,0x00,0x00,
+
+ 4, // 0x2C ','
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x20,0x40,
+
+ 5, // 0x2D '-'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x00,0x00,
+
+ 4, // 0x2E '.'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x00,0x00,
+
+ 5, // 0x2F '/'
+ 0x00,0x00,0x08,0x08,0x10,0x10,0x20,0x20,0x40,0x40,0x80,0x80,0x00,
+
+ 7, // 0x30 '0'
+ 0x00,0x00,0x00,0x38,0x44,0x44,0x44,0x44,0x44,0x44,0x38,0x00,0x00,
+
+ 7, // 0x31 '1'
+ 0x00,0x00,0x00,0x10,0x70,0x10,0x10,0x10,0x10,0x10,0x7C,0x00,0x00,
+
+ 7, // 0x32 '2'
+ 0x00,0x00,0x00,0x38,0x44,0x04,0x08,0x10,0x20,0x40,0x7C,0x00,0x00,
+
+ 7, // 0x33 '3'
+ 0x00,0x00,0x00,0x38,0x44,0x04,0x18,0x04,0x04,0x44,0x38,0x00,0x00,
+
+ 7, // 0x34 '4'
+ 0x00,0x00,0x00,0x08,0x18,0x28,0x48,0x88,0xFC,0x08,0x08,0x00,0x00,
+
+ 7, // 0x35 '5'
+ 0x00,0x00,0x00,0x7C,0x40,0x40,0x78,0x04,0x04,0x44,0x38,0x00,0x00,
+
+ 7, // 0x36 '6'
+ 0x00,0x00,0x00,0x18,0x20,0x40,0x78,0x44,0x44,0x44,0x38,0x00,0x00,
+
+ 7, // 0x37 '7'
+ 0x00,0x00,0x00,0x7C,0x04,0x08,0x08,0x10,0x10,0x20,0x20,0x00,0x00,
+
+ 7, // 0x38 '8'
+ 0x00,0x00,0x00,0x38,0x44,0x44,0x38,0x44,0x44,0x44,0x38,0x00,0x00,
+
+ 7, // 0x39 '9'
+ 0x00,0x00,0x00,0x38,0x44,0x44,0x44,0x3C,0x04,0x08,0x30,0x00,0x00,
+
+ 5, // 0x3A ':'
+ 0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x00,0x00,0x20,0x20,0x00,0x00,
+
+ 5, // 0x3B ';'
+ 0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x00,0x00,0x20,0x20,0x20,0x40,
+
+ 9, // 0x3C '<'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x18,0x00,0x60,0x00,0x18,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x3D '='
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x3E '>'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x0C,0x00,0x03,0x00,0x0C,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 6, // 0x3F '?'
+ 0x00,0x00,0x00,0x70,0x08,0x08,0x10,0x20,0x20,0x00,0x20,0x00,0x00,
+
+ 10, // 0x40 '@'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x20,0x80,0x4E,0x80,0x52,0x80,0x52,0x80,0x52,0x80,0x4D,0x00,0x20,0x00,0x1E,0x00,0x00,0x00,
+
+ 8, // 0x41 'A'
+ 0x00,0x00,0x00,0x18,0x18,0x24,0x24,0x24,0x7E,0x42,0x42,0x00,0x00,
+
+ 8, // 0x42 'B'
+ 0x00,0x00,0x00,0x78,0x44,0x44,0x7C,0x42,0x42,0x42,0x7C,0x00,0x00,
+
+ 9, // 0x43 'C'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x21,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x21,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x44 'D'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x42,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x42,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x45 'E'
+ 0x00,0x00,0x00,0x7C,0x40,0x40,0x7C,0x40,0x40,0x40,0x7C,0x00,0x00,
+
+ 6, // 0x46 'F'
+ 0x00,0x00,0x00,0x7C,0x40,0x40,0x78,0x40,0x40,0x40,0x40,0x00,0x00,
+
+ 9, // 0x47 'G'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x21,0x00,0x40,0x00,0x40,0x00,0x47,0x00,0x41,0x00,0x21,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x48 'H'
+ 0x00,0x00,0x00,0x42,0x42,0x42,0x7E,0x42,0x42,0x42,0x42,0x00,0x00,
+
+ 5, // 0x49 'I'
+ 0x00,0x00,0x00,0x70,0x20,0x20,0x20,0x20,0x20,0x20,0x70,0x00,0x00,
+
+ 5, // 0x4A 'J'
+ 0x00,0x00,0x00,0x70,0x10,0x10,0x10,0x10,0x10,0x10,0xE0,0x00,0x00,
+
+ 8, // 0x4B 'K'
+ 0x00,0x00,0x00,0x42,0x44,0x48,0x50,0x70,0x48,0x44,0x42,0x00,0x00,
+
+ 6, // 0x4C 'L'
+ 0x00,0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x7C,0x00,0x00,
+
+ 9, // 0x4D 'M'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x63,0x00,0x63,0x00,0x55,0x00,0x55,0x00,0x49,0x00,0x49,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x4E 'N'
+ 0x00,0x00,0x00,0x62,0x62,0x52,0x52,0x4A,0x4A,0x46,0x46,0x00,0x00,
+
+ 9, // 0x4F 'O'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x22,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x22,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x50 'P'
+ 0x00,0x00,0x00,0x78,0x44,0x44,0x44,0x78,0x40,0x40,0x40,0x00,0x00,
+
+ 9, // 0x51 'Q'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x22,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x22,0x00,0x1C,0x00,0x04,0x00,0x03,0x00,
+
+ 8, // 0x52 'R'
+ 0x00,0x00,0x00,0x78,0x44,0x44,0x44,0x78,0x48,0x44,0x42,0x00,0x00,
+
+ 8, // 0x53 'S'
+ 0x00,0x00,0x00,0x3C,0x42,0x40,0x30,0x0C,0x02,0x42,0x3C,0x00,0x00,
+
+ 7, // 0x54 'T'
+ 0x00,0x00,0x00,0xFE,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00,
+
+ 8, // 0x55 'U'
+ 0x00,0x00,0x00,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x3C,0x00,0x00,
+
+ 8, // 0x56 'V'
+ 0x00,0x00,0x00,0x42,0x42,0x42,0x24,0x24,0x24,0x18,0x18,0x00,0x00,
+
+ 11, // 0x57 'W'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x40,0x44,0x40,0x2A,0x80,0x2A,0x80,0x2A,0x80,0x2A,0x80,0x11,0x00,0x11,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x58 'X'
+ 0x00,0x00,0x00,0x42,0x42,0x24,0x18,0x18,0x24,0x42,0x42,0x00,0x00,
+
+ 7, // 0x59 'Y'
+ 0x00,0x00,0x00,0x82,0x44,0x28,0x10,0x10,0x10,0x10,0x10,0x00,0x00,
+
+ 8, // 0x5A 'Z'
+ 0x00,0x00,0x00,0x7E,0x02,0x04,0x08,0x10,0x20,0x40,0x7E,0x00,0x00,
+
+ 5, // 0x5B '['
+ 0x00,0x00,0x70,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x70,
+
+ 5, // 0x5C '\'
+ 0x00,0x00,0x80,0x80,0x40,0x40,0x20,0x20,0x10,0x10,0x08,0x08,0x00,
+
+ 5, // 0x5D ']'
+ 0x00,0x00,0x70,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x70,
+
+ 9, // 0x5E '^'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x14,0x00,0x22,0x00,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x5F '_'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,
+
+ 7, // 0x60 '`'
+ 0x00,0x00,0x20,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x61 'a'
+ 0x00,0x00,0x00,0x00,0x00,0x38,0x04,0x3C,0x44,0x44,0x3C,0x00,0x00,
+
+ 7, // 0x62 'b'
+ 0x00,0x00,0x40,0x40,0x40,0x78,0x44,0x44,0x44,0x44,0x78,0x00,0x00,
+
+ 6, // 0x63 'c'
+ 0x00,0x00,0x00,0x00,0x00,0x38,0x44,0x40,0x40,0x44,0x38,0x00,0x00,
+
+ 7, // 0x64 'd'
+ 0x00,0x00,0x04,0x04,0x04,0x3C,0x44,0x44,0x44,0x44,0x3C,0x00,0x00,
+
+ 7, // 0x65 'e'
+ 0x00,0x00,0x00,0x00,0x00,0x38,0x44,0x7C,0x40,0x44,0x38,0x00,0x00,
+
+ 4, // 0x66 'f'
+ 0x00,0x00,0x30,0x40,0x40,0xF0,0x40,0x40,0x40,0x40,0x40,0x00,0x00,
+
+ 7, // 0x67 'g'
+ 0x00,0x00,0x00,0x00,0x00,0x3C,0x44,0x44,0x44,0x44,0x3C,0x04,0x38,
+
+ 7, // 0x68 'h'
+ 0x00,0x00,0x40,0x40,0x40,0x78,0x44,0x44,0x44,0x44,0x44,0x00,0x00,
+
+ 3, // 0x69 'i'
+ 0x00,0x00,0x40,0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x00,
+
+ 4, // 0x6A 'j'
+ 0x00,0x00,0x20,0x00,0x00,0x60,0x20,0x20,0x20,0x20,0x20,0x20,0xC0,
+
+ 7, // 0x6B 'k'
+ 0x00,0x00,0x40,0x40,0x40,0x44,0x48,0x50,0x70,0x48,0x44,0x00,0x00,
+
+ 3, // 0x6C 'l'
+ 0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x00,
+
+ 11, // 0x6D 'm'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7B,0x80,0x44,0x40,0x44,0x40,0x44,0x40,0x44,0x40,0x44,0x40,0x00,0x00,0x00,0x00,
+
+ 7, // 0x6E 'n'
+ 0x00,0x00,0x00,0x00,0x00,0x78,0x44,0x44,0x44,0x44,0x44,0x00,0x00,
+
+ 7, // 0x6F 'o'
+ 0x00,0x00,0x00,0x00,0x00,0x38,0x44,0x44,0x44,0x44,0x38,0x00,0x00,
+
+ 7, // 0x70 'p'
+ 0x00,0x00,0x00,0x00,0x00,0x78,0x44,0x44,0x44,0x44,0x78,0x40,0x40,
+
+ 7, // 0x71 'q'
+ 0x00,0x00,0x00,0x00,0x00,0x3C,0x44,0x44,0x44,0x44,0x3C,0x04,0x04,
+
+ 5, // 0x72 'r'
+ 0x00,0x00,0x00,0x00,0x00,0x58,0x60,0x40,0x40,0x40,0x40,0x00,0x00,
+
+ 6, // 0x73 's'
+ 0x00,0x00,0x00,0x00,0x00,0x38,0x40,0x60,0x18,0x08,0x70,0x00,0x00,
+
+ 4, // 0x74 't'
+ 0x00,0x00,0x00,0x40,0x40,0xF0,0x40,0x40,0x40,0x40,0x30,0x00,0x00,
+
+ 7, // 0x75 'u'
+ 0x00,0x00,0x00,0x00,0x00,0x44,0x44,0x44,0x44,0x44,0x3C,0x00,0x00,
+
+ 7, // 0x76 'v'
+ 0x00,0x00,0x00,0x00,0x00,0x44,0x44,0x28,0x28,0x10,0x10,0x00,0x00,
+
+ 9, // 0x77 'w'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x49,0x00,0x49,0x00,0x55,0x00,0x55,0x00,0x22,0x00,0x22,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x78 'x'
+ 0x00,0x00,0x00,0x00,0x00,0x44,0x28,0x10,0x10,0x28,0x44,0x00,0x00,
+
+ 7, // 0x79 'y'
+ 0x00,0x00,0x00,0x00,0x00,0x44,0x28,0x28,0x28,0x10,0x10,0x10,0x20,
+
+ 6, // 0x7A 'z'
+ 0x00,0x00,0x00,0x00,0x00,0x78,0x08,0x10,0x20,0x40,0x78,0x00,0x00,
+
+ 7, // 0x7B '{'
+ 0x00,0x00,0x0C,0x10,0x10,0x10,0x10,0x60,0x10,0x10,0x10,0x10,0x0C,
+
+ 5, // 0x7C '|'
+ 0x00,0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+
+ 7, // 0x7D '}'
+ 0x00,0x00,0x60,0x10,0x10,0x10,0x10,0x0C,0x10,0x10,0x10,0x10,0x60,
+
+ 9, // 0x7E '~'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x31,0x00,0x49,0x00,0x46,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 11, // 0x7F ''
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x80,0x40,0x80,0x40,0x80,0x40,0x80,0x40,0x80,0x40,0x80,0x40,0x80,0x7F,0x80,0x00,0x00,0x00,0x00,
+
+ 0
+ };
+
+ const int8u verdana13_bold[] =
+ {
+ 13, 3, 32, 128-32,
+ 0x00,0x00,0x0E,0x00,0x1C,0x00,0x2A,0x00,0x45,0x00,0x53,0x00,0x6E,0x00,0x89,0x00,0x97,0x00,
+ 0xA5,0x00,0xB3,0x00,0xC1,0x00,0xDC,0x00,0xEA,0x00,0xF8,0x00,0x06,0x01,0x14,0x01,0x22,0x01,
+ 0x30,0x01,0x3E,0x01,0x4C,0x01,0x5A,0x01,0x68,0x01,0x76,0x01,0x84,0x01,0x92,0x01,0xA0,0x01,
+ 0xAE,0x01,0xBC,0x01,0xD7,0x01,0xF2,0x01,0x0D,0x02,0x1B,0x02,0x36,0x02,0x51,0x02,0x5F,0x02,
+ 0x6D,0x02,0x88,0x02,0x96,0x02,0xA4,0x02,0xBF,0x02,0xDA,0x02,0xE8,0x02,0xF6,0x02,0x04,0x03,
+ 0x12,0x03,0x2D,0x03,0x48,0x03,0x63,0x03,0x71,0x03,0x8C,0x03,0x9A,0x03,0xA8,0x03,0xB6,0x03,
+ 0xD1,0x03,0xDF,0x03,0xFA,0x03,0x08,0x04,0x16,0x04,0x24,0x04,0x32,0x04,0x40,0x04,0x4E,0x04,
+ 0x69,0x04,0x77,0x04,0x85,0x04,0x93,0x04,0xA1,0x04,0xAF,0x04,0xBD,0x04,0xCB,0x04,0xD9,0x04,
+ 0xE7,0x04,0xF5,0x04,0x03,0x05,0x11,0x05,0x1F,0x05,0x2D,0x05,0x48,0x05,0x56,0x05,0x64,0x05,
+ 0x72,0x05,0x80,0x05,0x8E,0x05,0x9C,0x05,0xAA,0x05,0xB8,0x05,0xC6,0x05,0xE1,0x05,0xEF,0x05,
+ 0xFD,0x05,0x0B,0x06,0x19,0x06,0x27,0x06,0x35,0x06,0x50,0x06,
+
+ 4, // 0x20 ' '
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 4, // 0x21 '!'
+ 0x00,0x00,0x00,0x60,0x60,0x60,0x60,0x60,0x60,0x00,0x60,0x00,0x00,
+
+ 7, // 0x22 '"'
+ 0x00,0x00,0x6C,0x6C,0x6C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x23 '#'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x0A,0x00,0x0A,0x00,0x3F,0x00,0x14,0x00,0x14,0x00,0x7E,0x00,0x28,0x00,0x28,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x24 '$'
+ 0x00,0x00,0x08,0x08,0x3C,0x6A,0x68,0x3C,0x16,0x56,0x3C,0x10,0x10,
+
+ 14, // 0x25 '%'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x80,0x6C,0x80,0x6D,0x00,0x6D,0x70,0x3A,0xD8,0x02,0xD8,0x04,0xD8,0x04,0x70,0x00,0x00,0x00,0x00,
+
+ 10, // 0x26 '&'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x6C,0x00,0x6C,0x00,0x39,0x80,0x6D,0x00,0x66,0x00,0x63,0x00,0x3D,0x80,0x00,0x00,0x00,0x00,
+
+ 4, // 0x27 '''
+ 0x00,0x00,0x60,0x60,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 6, // 0x28 '('
+ 0x00,0x00,0x18,0x30,0x30,0x60,0x60,0x60,0x60,0x60,0x30,0x30,0x18,
+
+ 6, // 0x29 ')'
+ 0x00,0x00,0x60,0x30,0x30,0x18,0x18,0x18,0x18,0x18,0x30,0x30,0x60,
+
+ 8, // 0x2A '*'
+ 0x00,0x00,0x10,0x54,0x38,0x54,0x10,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x2B '+'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x7F,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x00,0x00,0x00,0x00,
+
+ 4, // 0x2C ','
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x60,0x40,
+
+ 6, // 0x2D '-'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x00,0x00,
+
+ 4, // 0x2E '.'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x00,0x00,
+
+ 8, // 0x2F '/'
+ 0x00,0x00,0x06,0x06,0x0C,0x0C,0x18,0x18,0x18,0x30,0x30,0x60,0x60,
+
+ 8, // 0x30 '0'
+ 0x00,0x00,0x00,0x3C,0x66,0x66,0x66,0x66,0x66,0x66,0x3C,0x00,0x00,
+
+ 8, // 0x31 '1'
+ 0x00,0x00,0x00,0x18,0x38,0x18,0x18,0x18,0x18,0x18,0x3C,0x00,0x00,
+
+ 8, // 0x32 '2'
+ 0x00,0x00,0x00,0x3C,0x66,0x06,0x0C,0x18,0x30,0x60,0x7E,0x00,0x00,
+
+ 8, // 0x33 '3'
+ 0x00,0x00,0x00,0x3C,0x66,0x06,0x1C,0x06,0x06,0x66,0x3C,0x00,0x00,
+
+ 8, // 0x34 '4'
+ 0x00,0x00,0x00,0x04,0x0C,0x1C,0x2C,0x4C,0x7E,0x0C,0x0C,0x00,0x00,
+
+ 8, // 0x35 '5'
+ 0x00,0x00,0x00,0x3E,0x30,0x30,0x3C,0x06,0x06,0x66,0x3C,0x00,0x00,
+
+ 8, // 0x36 '6'
+ 0x00,0x00,0x00,0x1C,0x30,0x60,0x7C,0x66,0x66,0x66,0x3C,0x00,0x00,
+
+ 8, // 0x37 '7'
+ 0x00,0x00,0x00,0x7E,0x06,0x0C,0x0C,0x18,0x18,0x30,0x30,0x00,0x00,
+
+ 8, // 0x38 '8'
+ 0x00,0x00,0x00,0x3C,0x66,0x66,0x3C,0x66,0x66,0x66,0x3C,0x00,0x00,
+
+ 8, // 0x39 '9'
+ 0x00,0x00,0x00,0x3C,0x66,0x66,0x66,0x3E,0x06,0x0C,0x38,0x00,0x00,
+
+ 4, // 0x3A ':'
+ 0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x00,0x00,0x60,0x60,0x00,0x00,
+
+ 4, // 0x3B ';'
+ 0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x00,0x00,0x60,0x60,0x60,0x40,
+
+ 9, // 0x3C '<'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x0C,0x00,0x30,0x00,0x40,0x00,0x30,0x00,0x0C,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x3D '='
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x3E '>'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x18,0x00,0x06,0x00,0x01,0x00,0x06,0x00,0x18,0x00,0x60,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x3F '?'
+ 0x00,0x00,0x00,0x38,0x4C,0x0C,0x18,0x30,0x30,0x00,0x30,0x00,0x00,
+
+ 11, // 0x40 '@'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x80,0x20,0x40,0x4F,0x40,0x5B,0x40,0x5B,0x40,0x5B,0x40,0x4F,0x80,0x20,0x00,0x1F,0x00,0x00,0x00,
+
+ 9, // 0x41 'A'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x1C,0x00,0x36,0x00,0x36,0x00,0x36,0x00,0x7F,0x00,0x63,0x00,0x63,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x42 'B'
+ 0x00,0x00,0x00,0x7C,0x66,0x66,0x7C,0x66,0x66,0x66,0x7C,0x00,0x00,
+
+ 8, // 0x43 'C'
+ 0x00,0x00,0x00,0x3C,0x62,0x60,0x60,0x60,0x60,0x62,0x3C,0x00,0x00,
+
+ 9, // 0x44 'D'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x66,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x66,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x45 'E'
+ 0x00,0x00,0x00,0x7E,0x60,0x60,0x7E,0x60,0x60,0x60,0x7E,0x00,0x00,
+
+ 8, // 0x46 'F'
+ 0x00,0x00,0x00,0x7E,0x60,0x60,0x7E,0x60,0x60,0x60,0x60,0x00,0x00,
+
+ 9, // 0x47 'G'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x61,0x00,0x60,0x00,0x60,0x00,0x67,0x00,0x63,0x00,0x63,0x00,0x3F,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x48 'H'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x7F,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x00,0x00,0x00,0x00,
+
+ 6, // 0x49 'I'
+ 0x00,0x00,0x00,0x78,0x30,0x30,0x30,0x30,0x30,0x30,0x78,0x00,0x00,
+
+ 6, // 0x4A 'J'
+ 0x00,0x00,0x00,0x78,0x18,0x18,0x18,0x18,0x18,0x18,0xF0,0x00,0x00,
+
+ 8, // 0x4B 'K'
+ 0x00,0x00,0x00,0x66,0x6C,0x78,0x70,0x70,0x78,0x6C,0x66,0x00,0x00,
+
+ 7, // 0x4C 'L'
+ 0x00,0x00,0x00,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x7E,0x00,0x00,
+
+ 10, // 0x4D 'M'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x80,0x71,0x80,0x7B,0x80,0x5D,0x80,0x49,0x80,0x41,0x80,0x41,0x80,0x41,0x80,0x00,0x00,0x00,0x00,
+
+ 9, // 0x4E 'N'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x00,0x61,0x00,0x71,0x00,0x59,0x00,0x4D,0x00,0x47,0x00,0x43,0x00,0x41,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x4F 'O'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x3E,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x50 'P'
+ 0x00,0x00,0x00,0x7C,0x66,0x66,0x66,0x7C,0x60,0x60,0x60,0x00,0x00,
+
+ 9, // 0x51 'Q'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x3E,0x00,0x0C,0x00,0x07,0x00,
+
+ 8, // 0x52 'R'
+ 0x00,0x00,0x00,0x7C,0x66,0x66,0x66,0x7C,0x6C,0x66,0x63,0x00,0x00,
+
+ 8, // 0x53 'S'
+ 0x00,0x00,0x00,0x3C,0x62,0x60,0x7C,0x3E,0x06,0x46,0x3C,0x00,0x00,
+
+ 8, // 0x54 'T'
+ 0x00,0x00,0x00,0xFF,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x00,0x00,
+
+ 9, // 0x55 'U'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x3E,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x56 'V'
+ 0x00,0x00,0x00,0x66,0x66,0x66,0x3C,0x3C,0x3C,0x18,0x18,0x00,0x00,
+
+ 12, // 0x57 'W'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x60,0x66,0x60,0x66,0x60,0x36,0xC0,0x3F,0xC0,0x39,0xC0,0x19,0x80,0x19,0x80,0x00,0x00,0x00,0x00,
+
+ 8, // 0x58 'X'
+ 0x00,0x00,0x00,0x66,0x66,0x3C,0x18,0x18,0x3C,0x66,0x66,0x00,0x00,
+
+ 8, // 0x59 'Y'
+ 0x00,0x00,0x00,0x66,0x66,0x3C,0x3C,0x18,0x18,0x18,0x18,0x00,0x00,
+
+ 8, // 0x5A 'Z'
+ 0x00,0x00,0x00,0x7E,0x06,0x0E,0x1C,0x38,0x70,0x60,0x7E,0x00,0x00,
+
+ 6, // 0x5B '['
+ 0x00,0x00,0x78,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x78,
+
+ 8, // 0x5C '\'
+ 0x00,0x00,0x60,0x60,0x30,0x30,0x18,0x18,0x18,0x0C,0x0C,0x06,0x06,
+
+ 6, // 0x5D ']'
+ 0x00,0x00,0x78,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x78,
+
+ 10, // 0x5E '^'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x1E,0x00,0x33,0x00,0x61,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x5F '_'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,
+
+ 8, // 0x60 '`'
+ 0x00,0x00,0x30,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x61 'a'
+ 0x00,0x00,0x00,0x00,0x00,0x3C,0x06,0x3E,0x66,0x66,0x3E,0x00,0x00,
+
+ 8, // 0x62 'b'
+ 0x00,0x00,0x60,0x60,0x60,0x7C,0x66,0x66,0x66,0x66,0x7C,0x00,0x00,
+
+ 7, // 0x63 'c'
+ 0x00,0x00,0x00,0x00,0x00,0x3C,0x60,0x60,0x60,0x60,0x3C,0x00,0x00,
+
+ 8, // 0x64 'd'
+ 0x00,0x00,0x06,0x06,0x06,0x3E,0x66,0x66,0x66,0x66,0x3E,0x00,0x00,
+
+ 8, // 0x65 'e'
+ 0x00,0x00,0x00,0x00,0x00,0x3C,0x66,0x7E,0x60,0x62,0x3C,0x00,0x00,
+
+ 5, // 0x66 'f'
+ 0x00,0x00,0x38,0x60,0x60,0xF8,0x60,0x60,0x60,0x60,0x60,0x00,0x00,
+
+ 8, // 0x67 'g'
+ 0x00,0x00,0x00,0x00,0x00,0x3E,0x66,0x66,0x66,0x66,0x3E,0x06,0x3C,
+
+ 8, // 0x68 'h'
+ 0x00,0x00,0x60,0x60,0x60,0x7C,0x66,0x66,0x66,0x66,0x66,0x00,0x00,
+
+ 4, // 0x69 'i'
+ 0x00,0x00,0x00,0x60,0x00,0x60,0x60,0x60,0x60,0x60,0x60,0x00,0x00,
+
+ 5, // 0x6A 'j'
+ 0x00,0x00,0x00,0x30,0x00,0x70,0x30,0x30,0x30,0x30,0x30,0x30,0xE0,
+
+ 8, // 0x6B 'k'
+ 0x00,0x00,0x60,0x60,0x60,0x66,0x6C,0x78,0x78,0x6C,0x66,0x00,0x00,
+
+ 4, // 0x6C 'l'
+ 0x00,0x00,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x00,0x00,
+
+ 12, // 0x6D 'm'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7D,0xC0,0x66,0x60,0x66,0x60,0x66,0x60,0x66,0x60,0x66,0x60,0x00,0x00,0x00,0x00,
+
+ 8, // 0x6E 'n'
+ 0x00,0x00,0x00,0x00,0x00,0x7C,0x66,0x66,0x66,0x66,0x66,0x00,0x00,
+
+ 8, // 0x6F 'o'
+ 0x00,0x00,0x00,0x00,0x00,0x3C,0x66,0x66,0x66,0x66,0x3C,0x00,0x00,
+
+ 8, // 0x70 'p'
+ 0x00,0x00,0x00,0x00,0x00,0x7C,0x66,0x66,0x66,0x66,0x7C,0x60,0x60,
+
+ 8, // 0x71 'q'
+ 0x00,0x00,0x00,0x00,0x00,0x3E,0x66,0x66,0x66,0x66,0x3E,0x06,0x06,
+
+ 6, // 0x72 'r'
+ 0x00,0x00,0x00,0x00,0x00,0x6C,0x7C,0x60,0x60,0x60,0x60,0x00,0x00,
+
+ 7, // 0x73 's'
+ 0x00,0x00,0x00,0x00,0x00,0x3C,0x60,0x78,0x3C,0x0C,0x78,0x00,0x00,
+
+ 5, // 0x74 't'
+ 0x00,0x00,0x00,0x60,0x60,0xF8,0x60,0x60,0x60,0x60,0x38,0x00,0x00,
+
+ 8, // 0x75 'u'
+ 0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x66,0x3E,0x00,0x00,
+
+ 8, // 0x76 'v'
+ 0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x66,0x3C,0x3C,0x18,0x00,0x00,
+
+ 10, // 0x77 'w'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6D,0x80,0x6D,0x80,0x6D,0x80,0x6D,0x80,0x33,0x00,0x33,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x78 'x'
+ 0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x3C,0x3C,0x66,0x66,0x00,0x00,
+
+ 8, // 0x79 'y'
+ 0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x3C,0x3C,0x18,0x18,0x30,0x30,
+
+ 7, // 0x7A 'z'
+ 0x00,0x00,0x00,0x00,0x00,0x7C,0x0C,0x18,0x30,0x60,0x7C,0x00,0x00,
+
+ 8, // 0x7B '{'
+ 0x00,0x00,0x0E,0x18,0x18,0x18,0x18,0x70,0x18,0x18,0x18,0x18,0x0E,
+
+ 6, // 0x7C '|'
+ 0x00,0x00,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+
+ 8, // 0x7D '}'
+ 0x00,0x00,0x70,0x18,0x18,0x18,0x18,0x0E,0x18,0x18,0x18,0x18,0x70,
+
+ 9, // 0x7E '~'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x31,0x00,0x49,0x00,0x49,0x00,0x46,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 11, // 0x7F ''
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x80,0x40,0x80,0x40,0x80,0x40,0x80,0x40,0x80,0x40,0x80,0x40,0x80,0x7F,0x80,0x00,0x00,0x00,0x00,
+
+ 0
+ };
+
+ const int8u verdana14[] =
+ {
+ 14, 3, 32, 128-32,
+ 0x00,0x00,0x0F,0x00,0x1E,0x00,0x2D,0x00,0x4A,0x00,0x59,0x00,0x76,0x00,0x93,0x00,0xA2,0x00,
+ 0xB1,0x00,0xC0,0x00,0xCF,0x00,0xEC,0x00,0xFB,0x00,0x0A,0x01,0x19,0x01,0x28,0x01,0x37,0x01,
+ 0x46,0x01,0x55,0x01,0x64,0x01,0x73,0x01,0x82,0x01,0x91,0x01,0xA0,0x01,0xAF,0x01,0xBE,0x01,
+ 0xCD,0x01,0xDC,0x01,0xF9,0x01,0x16,0x02,0x33,0x02,0x42,0x02,0x5F,0x02,0x6E,0x02,0x7D,0x02,
+ 0x9A,0x02,0xB7,0x02,0xC6,0x02,0xD5,0x02,0xF2,0x02,0x0F,0x03,0x1E,0x03,0x2D,0x03,0x3C,0x03,
+ 0x4B,0x03,0x68,0x03,0x85,0x03,0xA2,0x03,0xB1,0x03,0xCE,0x03,0xDD,0x03,0xEC,0x03,0xFB,0x03,
+ 0x18,0x04,0x27,0x04,0x44,0x04,0x53,0x04,0x62,0x04,0x71,0x04,0x80,0x04,0x8F,0x04,0x9E,0x04,
+ 0xBB,0x04,0xCA,0x04,0xD9,0x04,0xE8,0x04,0xF7,0x04,0x06,0x05,0x15,0x05,0x24,0x05,0x33,0x05,
+ 0x42,0x05,0x51,0x05,0x60,0x05,0x6F,0x05,0x7E,0x05,0x8D,0x05,0xAA,0x05,0xB9,0x05,0xC8,0x05,
+ 0xD7,0x05,0xE6,0x05,0xF5,0x05,0x04,0x06,0x13,0x06,0x22,0x06,0x31,0x06,0x4E,0x06,0x5D,0x06,
+ 0x6C,0x06,0x7B,0x06,0x8A,0x06,0x99,0x06,0xA8,0x06,0xC5,0x06,
+
+ 4, // 0x20 ' '
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 5, // 0x21 '!'
+ 0x00,0x00,0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x20,0x00,0x00,
+
+ 6, // 0x22 '"'
+ 0x00,0x00,0x48,0x48,0x48,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x23 '#'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x09,0x00,0x12,0x00,0x3F,0x80,0x12,0x00,0x12,0x00,0x7F,0x00,0x24,0x00,0x24,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x24 '$'
+ 0x00,0x00,0x10,0x10,0x3E,0x50,0x50,0x30,0x1C,0x12,0x12,0x7C,0x10,0x10,
+
+ 13, // 0x25 '%'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x80,0x49,0x00,0x49,0x00,0x4A,0x00,0x32,0x60,0x02,0x90,0x04,0x90,0x04,0x90,0x08,0x60,0x00,0x00,0x00,0x00,
+
+ 10, // 0x26 '&'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x39,0x00,0x45,0x00,0x42,0x00,0x43,0x00,0x3C,0x80,0x00,0x00,0x00,0x00,
+
+ 3, // 0x27 '''
+ 0x00,0x00,0x40,0x40,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 5, // 0x28 '('
+ 0x00,0x00,0x10,0x20,0x20,0x40,0x40,0x40,0x40,0x40,0x40,0x20,0x20,0x10,
+
+ 5, // 0x29 ')'
+ 0x00,0x00,0x40,0x20,0x20,0x10,0x10,0x10,0x10,0x10,0x10,0x20,0x20,0x40,
+
+ 8, // 0x2A '*'
+ 0x00,0x00,0x10,0x54,0x38,0x54,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x2B '+'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x7F,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x00,0x00,0x00,0x00,
+
+ 4, // 0x2C ','
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x20,0x40,
+
+ 5, // 0x2D '-'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x00,0x00,
+
+ 4, // 0x2E '.'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x00,0x00,
+
+ 5, // 0x2F '/'
+ 0x00,0x00,0x08,0x08,0x10,0x10,0x10,0x20,0x20,0x20,0x40,0x40,0x40,0x80,
+
+ 8, // 0x30 '0'
+ 0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x3C,0x00,0x00,
+
+ 8, // 0x31 '1'
+ 0x00,0x00,0x00,0x08,0x38,0x08,0x08,0x08,0x08,0x08,0x08,0x3E,0x00,0x00,
+
+ 8, // 0x32 '2'
+ 0x00,0x00,0x00,0x3C,0x42,0x42,0x02,0x04,0x18,0x20,0x40,0x7E,0x00,0x00,
+
+ 8, // 0x33 '3'
+ 0x00,0x00,0x00,0x3C,0x42,0x02,0x02,0x1C,0x02,0x02,0x42,0x3C,0x00,0x00,
+
+ 8, // 0x34 '4'
+ 0x00,0x00,0x00,0x04,0x0C,0x14,0x24,0x44,0x7F,0x04,0x04,0x04,0x00,0x00,
+
+ 8, // 0x35 '5'
+ 0x00,0x00,0x00,0x7E,0x40,0x40,0x7C,0x02,0x02,0x02,0x42,0x3C,0x00,0x00,
+
+ 8, // 0x36 '6'
+ 0x00,0x00,0x00,0x1C,0x20,0x40,0x7C,0x42,0x42,0x42,0x42,0x3C,0x00,0x00,
+
+ 8, // 0x37 '7'
+ 0x00,0x00,0x00,0x7E,0x02,0x04,0x04,0x08,0x08,0x10,0x10,0x20,0x00,0x00,
+
+ 8, // 0x38 '8'
+ 0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x3C,0x42,0x42,0x42,0x3C,0x00,0x00,
+
+ 8, // 0x39 '9'
+ 0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x42,0x3E,0x02,0x04,0x38,0x00,0x00,
+
+ 5, // 0x3A ':'
+ 0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x00,0x00,0x00,0x20,0x20,0x00,0x00,
+
+ 5, // 0x3B ';'
+ 0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x00,0x00,0x00,0x20,0x20,0x20,0x40,
+
+ 9, // 0x3C '<'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x0C,0x00,0x30,0x00,0x40,0x00,0x30,0x00,0x0C,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x3D '='
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x3E '>'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x18,0x00,0x06,0x00,0x01,0x00,0x06,0x00,0x18,0x00,0x60,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x3F '?'
+ 0x00,0x00,0x00,0x38,0x44,0x04,0x04,0x08,0x10,0x10,0x00,0x10,0x00,0x00,
+
+ 12, // 0x40 '@'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x30,0xC0,0x27,0x40,0x49,0x20,0x49,0x20,0x49,0x20,0x49,0x20,0x27,0xC0,0x30,0x00,0x0F,0x00,0x00,0x00,
+
+ 8, // 0x41 'A'
+ 0x00,0x00,0x00,0x18,0x18,0x24,0x24,0x42,0x42,0x7E,0x81,0x81,0x00,0x00,
+
+ 8, // 0x42 'B'
+ 0x00,0x00,0x00,0x78,0x44,0x44,0x44,0x7C,0x42,0x42,0x42,0x7C,0x00,0x00,
+
+ 9, // 0x43 'C'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x21,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x21,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x44 'D'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x42,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x42,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x45 'E'
+ 0x00,0x00,0x00,0x7E,0x40,0x40,0x40,0x7E,0x40,0x40,0x40,0x7E,0x00,0x00,
+
+ 7, // 0x46 'F'
+ 0x00,0x00,0x00,0x7E,0x40,0x40,0x40,0x7C,0x40,0x40,0x40,0x40,0x00,0x00,
+
+ 9, // 0x47 'G'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x21,0x00,0x40,0x00,0x40,0x00,0x47,0x00,0x41,0x00,0x41,0x00,0x21,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x48 'H'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x7F,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x00,0x00,
+
+ 5, // 0x49 'I'
+ 0x00,0x00,0x00,0x70,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x70,0x00,0x00,
+
+ 5, // 0x4A 'J'
+ 0x00,0x00,0x00,0x70,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0xE0,0x00,0x00,
+
+ 8, // 0x4B 'K'
+ 0x00,0x00,0x00,0x42,0x44,0x48,0x50,0x60,0x50,0x48,0x44,0x42,0x00,0x00,
+
+ 7, // 0x4C 'L'
+ 0x00,0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x7E,0x00,0x00,
+
+ 10, // 0x4D 'M'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x61,0x80,0x61,0x80,0x52,0x80,0x52,0x80,0x52,0x80,0x4C,0x80,0x4C,0x80,0x40,0x80,0x40,0x80,0x00,0x00,0x00,0x00,
+
+ 9, // 0x4E 'N'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x61,0x00,0x61,0x00,0x51,0x00,0x51,0x00,0x49,0x00,0x45,0x00,0x45,0x00,0x43,0x00,0x43,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x4F 'O'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x21,0x00,0x40,0x80,0x40,0x80,0x40,0x80,0x40,0x80,0x40,0x80,0x21,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x50 'P'
+ 0x00,0x00,0x00,0x7C,0x42,0x42,0x42,0x42,0x7C,0x40,0x40,0x40,0x00,0x00,
+
+ 10, // 0x51 'Q'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x21,0x00,0x40,0x80,0x40,0x80,0x40,0x80,0x40,0x80,0x40,0x80,0x21,0x00,0x1E,0x00,0x02,0x00,0x01,0x80,
+
+ 8, // 0x52 'R'
+ 0x00,0x00,0x00,0x7C,0x42,0x42,0x42,0x7C,0x48,0x44,0x42,0x41,0x00,0x00,
+
+ 8, // 0x53 'S'
+ 0x00,0x00,0x00,0x3C,0x42,0x40,0x40,0x3C,0x02,0x02,0x42,0x3C,0x00,0x00,
+
+ 7, // 0x54 'T'
+ 0x00,0x00,0x00,0xFE,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00,
+
+ 9, // 0x55 'U'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x22,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x56 'V'
+ 0x00,0x00,0x00,0x81,0x81,0x42,0x42,0x42,0x24,0x24,0x18,0x18,0x00,0x00,
+
+ 13, // 0x57 'W'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x10,0x42,0x10,0x45,0x10,0x45,0x10,0x25,0x20,0x28,0xA0,0x28,0xA0,0x10,0x40,0x10,0x40,0x00,0x00,0x00,0x00,
+
+ 8, // 0x58 'X'
+ 0x00,0x00,0x00,0x42,0x42,0x24,0x18,0x18,0x18,0x24,0x42,0x42,0x00,0x00,
+
+ 7, // 0x59 'Y'
+ 0x00,0x00,0x00,0x82,0x44,0x44,0x28,0x10,0x10,0x10,0x10,0x10,0x00,0x00,
+
+ 8, // 0x5A 'Z'
+ 0x00,0x00,0x00,0x7E,0x02,0x04,0x08,0x10,0x10,0x20,0x40,0x7E,0x00,0x00,
+
+ 5, // 0x5B '['
+ 0x00,0x00,0x70,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x70,
+
+ 5, // 0x5C '\'
+ 0x00,0x00,0x80,0x80,0x40,0x40,0x40,0x20,0x20,0x10,0x10,0x10,0x08,0x08,
+
+ 5, // 0x5D ']'
+ 0x00,0x00,0x70,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x70,
+
+ 10, // 0x5E '^'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x12,0x00,0x21,0x00,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x5F '_'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,
+
+ 8, // 0x60 '`'
+ 0x00,0x00,0x20,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x61 'a'
+ 0x00,0x00,0x00,0x00,0x00,0x3C,0x02,0x02,0x3E,0x42,0x42,0x3E,0x00,0x00,
+
+ 8, // 0x62 'b'
+ 0x00,0x00,0x40,0x40,0x40,0x5C,0x62,0x42,0x42,0x42,0x42,0x7C,0x00,0x00,
+
+ 6, // 0x63 'c'
+ 0x00,0x00,0x00,0x00,0x00,0x38,0x44,0x40,0x40,0x40,0x44,0x38,0x00,0x00,
+
+ 8, // 0x64 'd'
+ 0x00,0x00,0x02,0x02,0x02,0x3E,0x42,0x42,0x42,0x42,0x46,0x3A,0x00,0x00,
+
+ 8, // 0x65 'e'
+ 0x00,0x00,0x00,0x00,0x00,0x3C,0x42,0x42,0x7E,0x40,0x42,0x3C,0x00,0x00,
+
+ 4, // 0x66 'f'
+ 0x00,0x00,0x30,0x40,0x40,0xF0,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x00,
+
+ 8, // 0x67 'g'
+ 0x00,0x00,0x00,0x00,0x00,0x3E,0x42,0x42,0x42,0x42,0x46,0x3A,0x02,0x3C,
+
+ 8, // 0x68 'h'
+ 0x00,0x00,0x40,0x40,0x40,0x5C,0x62,0x42,0x42,0x42,0x42,0x42,0x00,0x00,
+
+ 3, // 0x69 'i'
+ 0x00,0x00,0x40,0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x00,
+
+ 4, // 0x6A 'j'
+ 0x00,0x00,0x20,0x00,0x00,0x60,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xC0,
+
+ 7, // 0x6B 'k'
+ 0x00,0x00,0x40,0x40,0x40,0x44,0x48,0x50,0x60,0x50,0x48,0x44,0x00,0x00,
+
+ 3, // 0x6C 'l'
+ 0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x00,
+
+ 11, // 0x6D 'm'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7B,0x80,0x44,0x40,0x44,0x40,0x44,0x40,0x44,0x40,0x44,0x40,0x44,0x40,0x00,0x00,0x00,0x00,
+
+ 8, // 0x6E 'n'
+ 0x00,0x00,0x00,0x00,0x00,0x5C,0x62,0x42,0x42,0x42,0x42,0x42,0x00,0x00,
+
+ 8, // 0x6F 'o'
+ 0x00,0x00,0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x42,0x42,0x3C,0x00,0x00,
+
+ 8, // 0x70 'p'
+ 0x00,0x00,0x00,0x00,0x00,0x5C,0x62,0x42,0x42,0x42,0x42,0x7C,0x40,0x40,
+
+ 8, // 0x71 'q'
+ 0x00,0x00,0x00,0x00,0x00,0x3E,0x42,0x42,0x42,0x42,0x46,0x3A,0x02,0x02,
+
+ 5, // 0x72 'r'
+ 0x00,0x00,0x00,0x00,0x00,0x58,0x60,0x40,0x40,0x40,0x40,0x40,0x00,0x00,
+
+ 7, // 0x73 's'
+ 0x00,0x00,0x00,0x00,0x00,0x3C,0x40,0x40,0x38,0x04,0x04,0x78,0x00,0x00,
+
+ 5, // 0x74 't'
+ 0x00,0x00,0x00,0x40,0x40,0xF8,0x40,0x40,0x40,0x40,0x40,0x38,0x00,0x00,
+
+ 8, // 0x75 'u'
+ 0x00,0x00,0x00,0x00,0x00,0x42,0x42,0x42,0x42,0x42,0x46,0x3A,0x00,0x00,
+
+ 7, // 0x76 'v'
+ 0x00,0x00,0x00,0x00,0x00,0x44,0x44,0x28,0x28,0x28,0x10,0x10,0x00,0x00,
+
+ 11, // 0x77 'w'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x40,0x44,0x40,0x2A,0x80,0x2A,0x80,0x2A,0x80,0x11,0x00,0x11,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x78 'x'
+ 0x00,0x00,0x00,0x00,0x00,0x44,0x44,0x28,0x10,0x28,0x44,0x44,0x00,0x00,
+
+ 7, // 0x79 'y'
+ 0x00,0x00,0x00,0x00,0x00,0x44,0x44,0x28,0x28,0x28,0x10,0x10,0x10,0x20,
+
+ 7, // 0x7A 'z'
+ 0x00,0x00,0x00,0x00,0x00,0x7C,0x04,0x08,0x10,0x20,0x40,0x7C,0x00,0x00,
+
+ 8, // 0x7B '{'
+ 0x00,0x00,0x0C,0x10,0x10,0x10,0x10,0x60,0x10,0x10,0x10,0x10,0x10,0x0C,
+
+ 5, // 0x7C '|'
+ 0x00,0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+
+ 8, // 0x7D '}'
+ 0x00,0x00,0x30,0x08,0x08,0x08,0x08,0x06,0x08,0x08,0x08,0x08,0x08,0x30,
+
+ 10, // 0x7E '~'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x80,0x4C,0x80,0x43,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 12, // 0x7F ''
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xE0,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3F,0xE0,0x00,0x00,0x00,0x00,
+
+ 0
+ };
+
+ const int8u verdana14_bold[] =
+ {
+ 14, 3, 32, 128-32,
+ 0x00,0x00,0x0F,0x00,0x1E,0x00,0x2D,0x00,0x4A,0x00,0x67,0x00,0x84,0x00,0xA1,0x00,0xB0,0x00,
+ 0xBF,0x00,0xCE,0x00,0xEB,0x00,0x08,0x01,0x17,0x01,0x26,0x01,0x35,0x01,0x44,0x01,0x61,0x01,
+ 0x7E,0x01,0x9B,0x01,0xB8,0x01,0xD5,0x01,0xF2,0x01,0x0F,0x02,0x2C,0x02,0x49,0x02,0x66,0x02,
+ 0x75,0x02,0x84,0x02,0xA1,0x02,0xBE,0x02,0xDB,0x02,0xEA,0x02,0x07,0x03,0x24,0x03,0x41,0x03,
+ 0x5E,0x03,0x7B,0x03,0x8A,0x03,0x99,0x03,0xB6,0x03,0xD3,0x03,0xE2,0x03,0xF1,0x03,0x0E,0x04,
+ 0x1D,0x04,0x3A,0x04,0x57,0x04,0x74,0x04,0x91,0x04,0xAE,0x04,0xCB,0x04,0xE8,0x04,0xF7,0x04,
+ 0x14,0x05,0x31,0x05,0x4E,0x05,0x6B,0x05,0x88,0x05,0x97,0x05,0xA6,0x05,0xB5,0x05,0xC4,0x05,
+ 0xE1,0x05,0xFE,0x05,0x1B,0x06,0x2A,0x06,0x39,0x06,0x48,0x06,0x57,0x06,0x66,0x06,0x75,0x06,
+ 0x84,0x06,0x93,0x06,0xA2,0x06,0xB1,0x06,0xC0,0x06,0xCF,0x06,0xEC,0x06,0xFB,0x06,0x0A,0x07,
+ 0x19,0x07,0x28,0x07,0x37,0x07,0x46,0x07,0x55,0x07,0x64,0x07,0x73,0x07,0x90,0x07,0x9F,0x07,
+ 0xAE,0x07,0xBD,0x07,0xDA,0x07,0xE9,0x07,0x06,0x08,0x23,0x08,
+
+ 4, // 0x20 ' '
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 5, // 0x21 '!'
+ 0x00,0x00,0x00,0x60,0x60,0x60,0x60,0x60,0x60,0x00,0x60,0x60,0x00,0x00,
+
+ 7, // 0x22 '"'
+ 0x00,0x00,0x6C,0x6C,0x6C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x23 '#'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x09,0x00,0x3F,0x80,0x3F,0x80,0x12,0x00,0x7F,0x00,0x7F,0x00,0x24,0x00,0x24,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x24 '$'
+ 0x00,0x00,0x00,0x00,0x08,0x00,0x08,0x00,0x3E,0x00,0x69,0x00,0x68,0x00,0x7E,0x00,0x3F,0x00,0x0B,0x00,0x4B,0x00,0x3E,0x00,0x08,0x00,0x08,0x00,
+
+ 15, // 0x25 '%'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x40,0x6C,0x40,0x6C,0x80,0x6C,0xB8,0x6D,0x6C,0x3A,0x6C,0x02,0x6C,0x04,0x6C,0x04,0x38,0x00,0x00,0x00,0x00,
+
+ 10, // 0x26 '&'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x6C,0x00,0x6C,0x00,0x6C,0x00,0x39,0x80,0x6D,0x00,0x66,0x00,0x63,0x00,0x3D,0x80,0x00,0x00,0x00,0x00,
+
+ 4, // 0x27 '''
+ 0x00,0x00,0x60,0x60,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x28 '('
+ 0x00,0x00,0x18,0x30,0x30,0x60,0x60,0x60,0x60,0x60,0x60,0x30,0x30,0x18,
+
+ 7, // 0x29 ')'
+ 0x00,0x00,0x30,0x18,0x18,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x18,0x18,0x30,
+
+ 9, // 0x2A '*'
+ 0x00,0x00,0x00,0x00,0x08,0x00,0x2A,0x00,0x1C,0x00,0x1C,0x00,0x2A,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x2B '+'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x7F,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 4, // 0x2C ','
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x60,0x40,
+
+ 6, // 0x2D '-'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 4, // 0x2E '.'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x00,0x00,
+
+ 8, // 0x2F '/'
+ 0x00,0x00,0x06,0x06,0x0C,0x0C,0x0C,0x18,0x18,0x30,0x30,0x30,0x60,0x60,
+
+ 9, // 0x30 '0'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x3E,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x31 '1'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x3C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x3F,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x32 '2'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x63,0x00,0x03,0x00,0x03,0x00,0x06,0x00,0x0C,0x00,0x18,0x00,0x30,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x33 '3'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x63,0x00,0x03,0x00,0x03,0x00,0x1E,0x00,0x03,0x00,0x03,0x00,0x63,0x00,0x3E,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x34 '4'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x0E,0x00,0x16,0x00,0x16,0x00,0x26,0x00,0x46,0x00,0x7F,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x35 '5'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x00,0x30,0x00,0x30,0x00,0x3E,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x63,0x00,0x3E,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x36 '6'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x30,0x00,0x60,0x00,0x7E,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x3E,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x37 '7'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x03,0x00,0x06,0x00,0x06,0x00,0x0C,0x00,0x0C,0x00,0x18,0x00,0x18,0x00,0x30,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x38 '8'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x3E,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x3E,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x39 '9'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x3F,0x00,0x03,0x00,0x06,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,
+
+ 5, // 0x3A ':'
+ 0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x00,0x00,0x00,0x60,0x60,0x00,0x00,
+
+ 5, // 0x3B ';'
+ 0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x00,0x00,0x00,0x60,0x60,0x60,0x40,
+
+ 10, // 0x3C '<'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x06,0x00,0x18,0x00,0x60,0x00,0x60,0x00,0x18,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x3D '='
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x3E '>'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x30,0x00,0x0C,0x00,0x03,0x00,0x03,0x00,0x0C,0x00,0x30,0x00,0x40,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x3F '?'
+ 0x00,0x00,0x00,0x38,0x4C,0x0C,0x18,0x30,0x30,0x00,0x30,0x30,0x00,0x00,
+
+ 12, // 0x40 '@'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x30,0xC0,0x2F,0x40,0x5B,0x20,0x5B,0x20,0x5B,0x20,0x5B,0x20,0x2F,0xC0,0x30,0x00,0x0F,0x00,0x00,0x00,
+
+ 9, // 0x41 'A'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x1C,0x00,0x36,0x00,0x36,0x00,0x36,0x00,0x36,0x00,0x7F,0x00,0x63,0x00,0x63,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x42 'B'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x66,0x00,0x66,0x00,0x66,0x00,0x7E,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x7E,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x43 'C'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x31,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x31,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x44 'D'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x63,0x00,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x63,0x00,0x7E,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x45 'E'
+ 0x00,0x00,0x00,0x7E,0x60,0x60,0x60,0x7E,0x60,0x60,0x60,0x7E,0x00,0x00,
+
+ 8, // 0x46 'F'
+ 0x00,0x00,0x00,0x7E,0x60,0x60,0x60,0x7E,0x60,0x60,0x60,0x60,0x00,0x00,
+
+ 10, // 0x47 'G'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x30,0x80,0x60,0x00,0x60,0x00,0x60,0x00,0x67,0x80,0x61,0x80,0x31,0x80,0x1F,0x80,0x00,0x00,0x00,0x00,
+
+ 10, // 0x48 'H'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x7F,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x00,0x00,0x00,0x00,
+
+ 6, // 0x49 'I'
+ 0x00,0x00,0x00,0x78,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x78,0x00,0x00,
+
+ 7, // 0x4A 'J'
+ 0x00,0x00,0x00,0x7C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0xF8,0x00,0x00,
+
+ 9, // 0x4B 'K'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x63,0x00,0x66,0x00,0x6C,0x00,0x78,0x00,0x70,0x00,0x78,0x00,0x6C,0x00,0x66,0x00,0x63,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x4C 'L'
+ 0x00,0x00,0x00,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x7F,0x00,0x00,
+
+ 11, // 0x4D 'M'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x60,0xC0,0x71,0xC0,0x71,0xC0,0x5A,0xC0,0x5A,0xC0,0x4C,0xC0,0x4C,0xC0,0x40,0xC0,0x40,0xC0,0x00,0x00,0x00,0x00,
+
+ 10, // 0x4E 'N'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x80,0x70,0x80,0x58,0x80,0x58,0x80,0x4C,0x80,0x46,0x80,0x46,0x80,0x43,0x80,0x41,0x80,0x00,0x00,0x00,0x00,
+
+ 11, // 0x4F 'O'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x31,0x80,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x31,0x80,0x1F,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x50 'P'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x7E,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x00,0x00,0x00,0x00,
+
+ 11, // 0x51 'Q'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x31,0x80,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x31,0x80,0x1F,0x00,0x06,0x00,0x03,0xC0,
+
+ 9, // 0x52 'R'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x7E,0x00,0x6C,0x00,0x66,0x00,0x63,0x00,0x61,0x80,0x00,0x00,0x00,0x00,
+
+ 9, // 0x53 'S'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x61,0x00,0x60,0x00,0x70,0x00,0x3E,0x00,0x07,0x00,0x03,0x00,0x43,0x00,0x3E,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x54 'T'
+ 0x00,0x00,0x00,0xFF,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x00,0x00,
+
+ 10, // 0x55 'U'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x3F,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x56 'V'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x36,0x00,0x36,0x00,0x36,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,
+
+ 14, // 0x57 'W'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x63,0x18,0x63,0x18,0x63,0x18,0x33,0x30,0x37,0xB0,0x34,0xB0,0x1C,0xE0,0x18,0x60,0x18,0x60,0x00,0x00,0x00,0x00,
+
+ 9, // 0x58 'X'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x63,0x00,0x63,0x00,0x36,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x36,0x00,0x63,0x00,0x63,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x59 'Y'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x61,0x80,0x61,0x80,0x33,0x00,0x1E,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x5A 'Z'
+ 0x00,0x00,0x00,0x7E,0x0C,0x0C,0x18,0x18,0x30,0x30,0x60,0x7E,0x00,0x00,
+
+ 6, // 0x5B '['
+ 0x00,0x00,0x78,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x78,
+
+ 8, // 0x5C '\'
+ 0x00,0x00,0x60,0x60,0x30,0x30,0x30,0x18,0x18,0x0C,0x0C,0x0C,0x06,0x06,
+
+ 6, // 0x5D ']'
+ 0x00,0x00,0x78,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x78,
+
+ 10, // 0x5E '^'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x1E,0x00,0x33,0x00,0x61,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x5F '_'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x80,
+
+ 9, // 0x60 '`'
+ 0x00,0x00,0x00,0x00,0x30,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x61 'a'
+ 0x00,0x00,0x00,0x00,0x00,0x3C,0x06,0x3E,0x66,0x66,0x66,0x3E,0x00,0x00,
+
+ 8, // 0x62 'b'
+ 0x00,0x00,0x60,0x60,0x60,0x7C,0x66,0x66,0x66,0x66,0x66,0x7C,0x00,0x00,
+
+ 7, // 0x63 'c'
+ 0x00,0x00,0x00,0x00,0x00,0x3C,0x62,0x60,0x60,0x60,0x62,0x3C,0x00,0x00,
+
+ 8, // 0x64 'd'
+ 0x00,0x00,0x06,0x06,0x06,0x3E,0x66,0x66,0x66,0x66,0x66,0x3E,0x00,0x00,
+
+ 8, // 0x65 'e'
+ 0x00,0x00,0x00,0x00,0x00,0x3C,0x66,0x66,0x7E,0x60,0x62,0x3C,0x00,0x00,
+
+ 5, // 0x66 'f'
+ 0x00,0x00,0x38,0x60,0x60,0xF8,0x60,0x60,0x60,0x60,0x60,0x60,0x00,0x00,
+
+ 8, // 0x67 'g'
+ 0x00,0x00,0x00,0x00,0x00,0x3E,0x66,0x66,0x66,0x66,0x66,0x3E,0x06,0x3C,
+
+ 8, // 0x68 'h'
+ 0x00,0x00,0x60,0x60,0x60,0x7C,0x66,0x66,0x66,0x66,0x66,0x66,0x00,0x00,
+
+ 4, // 0x69 'i'
+ 0x00,0x00,0x60,0x60,0x00,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x00,0x00,
+
+ 5, // 0x6A 'j'
+ 0x00,0x00,0x30,0x30,0x00,0x70,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0xE0,
+
+ 8, // 0x6B 'k'
+ 0x00,0x00,0x60,0x60,0x60,0x66,0x6C,0x78,0x78,0x6C,0x66,0x63,0x00,0x00,
+
+ 4, // 0x6C 'l'
+ 0x00,0x00,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x00,0x00,
+
+ 12, // 0x6D 'm'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6C,0xC0,0x77,0x60,0x66,0x60,0x66,0x60,0x66,0x60,0x66,0x60,0x66,0x60,0x00,0x00,0x00,0x00,
+
+ 8, // 0x6E 'n'
+ 0x00,0x00,0x00,0x00,0x00,0x7C,0x66,0x66,0x66,0x66,0x66,0x66,0x00,0x00,
+
+ 8, // 0x6F 'o'
+ 0x00,0x00,0x00,0x00,0x00,0x3C,0x66,0x66,0x66,0x66,0x66,0x3C,0x00,0x00,
+
+ 8, // 0x70 'p'
+ 0x00,0x00,0x00,0x00,0x00,0x7C,0x66,0x66,0x66,0x66,0x66,0x7C,0x60,0x60,
+
+ 8, // 0x71 'q'
+ 0x00,0x00,0x00,0x00,0x00,0x3E,0x66,0x66,0x66,0x66,0x66,0x3E,0x06,0x06,
+
+ 6, // 0x72 'r'
+ 0x00,0x00,0x00,0x00,0x00,0x6C,0x7C,0x60,0x60,0x60,0x60,0x60,0x00,0x00,
+
+ 7, // 0x73 's'
+ 0x00,0x00,0x00,0x00,0x00,0x3C,0x60,0x60,0x38,0x0C,0x0C,0x78,0x00,0x00,
+
+ 5, // 0x74 't'
+ 0x00,0x00,0x00,0x60,0x60,0xF8,0x60,0x60,0x60,0x60,0x60,0x38,0x00,0x00,
+
+ 8, // 0x75 'u'
+ 0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x66,0x66,0x3E,0x00,0x00,
+
+ 8, // 0x76 'v'
+ 0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x66,0x3C,0x3C,0x3C,0x18,0x00,0x00,
+
+ 12, // 0x77 'w'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x60,0x66,0x60,0x66,0x60,0x69,0x60,0x39,0xC0,0x30,0xC0,0x30,0xC0,0x00,0x00,0x00,0x00,
+
+ 8, // 0x78 'x'
+ 0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x3C,0x18,0x3C,0x66,0x66,0x00,0x00,
+
+ 8, // 0x79 'y'
+ 0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x66,0x3C,0x3C,0x3C,0x18,0x18,0x30,
+
+ 7, // 0x7A 'z'
+ 0x00,0x00,0x00,0x00,0x00,0x7C,0x0C,0x18,0x38,0x30,0x60,0x7C,0x00,0x00,
+
+ 9, // 0x7B '{'
+ 0x00,0x00,0x00,0x00,0x0E,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x70,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x0E,0x00,
+
+ 6, // 0x7C '|'
+ 0x00,0x00,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+
+ 9, // 0x7D '}'
+ 0x00,0x00,0x00,0x00,0x38,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x07,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x38,0x00,
+
+ 10, // 0x7E '~'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x80,0x48,0x80,0x44,0x80,0x43,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 12, // 0x7F ''
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xE0,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3F,0xE0,0x00,0x00,0x00,0x00,
+
+ 0
+ };
+
+ const int8u verdana16[] =
+ {
+ 16, 4, 32, 128-32,
+ 0x00,0x00,0x11,0x00,0x22,0x00,0x33,0x00,0x54,0x00,0x65,0x00,0x86,0x00,0xA7,0x00,0xB8,0x00,
+ 0xC9,0x00,0xDA,0x00,0xFB,0x00,0x1C,0x01,0x2D,0x01,0x3E,0x01,0x4F,0x01,0x60,0x01,0x71,0x01,
+ 0x82,0x01,0x93,0x01,0xA4,0x01,0xB5,0x01,0xC6,0x01,0xD7,0x01,0xE8,0x01,0xF9,0x01,0x0A,0x02,
+ 0x1B,0x02,0x2C,0x02,0x4D,0x02,0x6E,0x02,0x8F,0x02,0xA0,0x02,0xC1,0x02,0xE2,0x02,0xF3,0x02,
+ 0x14,0x03,0x35,0x03,0x46,0x03,0x57,0x03,0x78,0x03,0x99,0x03,0xAA,0x03,0xBB,0x03,0xCC,0x03,
+ 0xDD,0x03,0xFE,0x03,0x1F,0x04,0x40,0x04,0x51,0x04,0x72,0x04,0x93,0x04,0xB4,0x04,0xD5,0x04,
+ 0xF6,0x04,0x17,0x05,0x38,0x05,0x59,0x05,0x7A,0x05,0x9B,0x05,0xAC,0x05,0xBD,0x05,0xCE,0x05,
+ 0xEF,0x05,0x00,0x06,0x11,0x06,0x22,0x06,0x33,0x06,0x44,0x06,0x55,0x06,0x66,0x06,0x77,0x06,
+ 0x88,0x06,0x99,0x06,0xAA,0x06,0xBB,0x06,0xCC,0x06,0xDD,0x06,0xFE,0x06,0x0F,0x07,0x20,0x07,
+ 0x31,0x07,0x42,0x07,0x53,0x07,0x64,0x07,0x75,0x07,0x86,0x07,0x97,0x07,0xB8,0x07,0xC9,0x07,
+ 0xDA,0x07,0xEB,0x07,0xFC,0x07,0x0D,0x08,0x1E,0x08,0x3F,0x08,
+
+ 5, // 0x20 ' '
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 5, // 0x21 '!'
+ 0x00,0x00,0x00,0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x20,0x20,0x00,0x00,0x00,
+
+ 5, // 0x22 '"'
+ 0x00,0x00,0x00,0x50,0x50,0x50,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x23 '#'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x09,0x00,0x3F,0x80,0x12,0x00,0x12,0x00,0x7F,0x00,0x24,0x00,0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x24 '$'
+ 0x00,0x00,0x00,0x10,0x10,0x3E,0x50,0x50,0x30,0x1C,0x12,0x12,0x7C,0x10,0x10,0x00,
+
+ 13, // 0x25 '%'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x40,0x44,0x80,0x45,0x00,0x45,0x00,0x3A,0xE0,0x05,0x10,0x05,0x10,0x09,0x10,0x10,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x26 '&'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x38,0x80,0x45,0x00,0x42,0x00,0x46,0x00,0x39,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 3, // 0x27 '''
+ 0x00,0x00,0x00,0x40,0x40,0x40,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 6, // 0x28 '('
+ 0x00,0x00,0x00,0x08,0x10,0x20,0x20,0x40,0x40,0x40,0x40,0x40,0x20,0x20,0x10,0x08,
+
+ 6, // 0x29 ')'
+ 0x00,0x00,0x00,0x40,0x20,0x10,0x10,0x08,0x08,0x08,0x08,0x08,0x10,0x10,0x20,0x40,
+
+ 9, // 0x2A '*'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x2A,0x00,0x1C,0x00,0x2A,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x2B '+'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x7F,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 5, // 0x2C ','
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x20,0x40,0x00,
+
+ 7, // 0x2D '-'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 5, // 0x2E '.'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x00,0x00,0x00,
+
+ 6, // 0x2F '/'
+ 0x00,0x00,0x00,0x04,0x04,0x08,0x08,0x10,0x10,0x20,0x20,0x40,0x40,0x80,0x80,0x00,
+
+ 8, // 0x30 '0'
+ 0x00,0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x3C,0x00,0x00,0x00,
+
+ 8, // 0x31 '1'
+ 0x00,0x00,0x00,0x00,0x08,0x38,0x08,0x08,0x08,0x08,0x08,0x08,0x3E,0x00,0x00,0x00,
+
+ 8, // 0x32 '2'
+ 0x00,0x00,0x00,0x00,0x3C,0x42,0x42,0x02,0x04,0x18,0x20,0x40,0x7E,0x00,0x00,0x00,
+
+ 8, // 0x33 '3'
+ 0x00,0x00,0x00,0x00,0x3C,0x42,0x02,0x02,0x1C,0x02,0x02,0x42,0x3C,0x00,0x00,0x00,
+
+ 8, // 0x34 '4'
+ 0x00,0x00,0x00,0x00,0x04,0x0C,0x14,0x24,0x44,0x7F,0x04,0x04,0x04,0x00,0x00,0x00,
+
+ 8, // 0x35 '5'
+ 0x00,0x00,0x00,0x00,0x3E,0x20,0x20,0x20,0x3C,0x02,0x02,0x42,0x3C,0x00,0x00,0x00,
+
+ 8, // 0x36 '6'
+ 0x00,0x00,0x00,0x00,0x1C,0x20,0x40,0x7C,0x42,0x42,0x42,0x42,0x3C,0x00,0x00,0x00,
+
+ 8, // 0x37 '7'
+ 0x00,0x00,0x00,0x00,0x7E,0x02,0x04,0x04,0x08,0x08,0x10,0x10,0x10,0x00,0x00,0x00,
+
+ 8, // 0x38 '8'
+ 0x00,0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x3C,0x42,0x42,0x42,0x3C,0x00,0x00,0x00,
+
+ 8, // 0x39 '9'
+ 0x00,0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x42,0x3E,0x02,0x04,0x38,0x00,0x00,0x00,
+
+ 6, // 0x3A ':'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x00,0x00,0x00,0x20,0x20,0x00,0x00,0x00,
+
+ 6, // 0x3B ';'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x00,0x00,0x00,0x20,0x20,0x20,0x40,0x00,
+
+ 9, // 0x3C '<'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x0C,0x00,0x30,0x00,0x40,0x00,0x30,0x00,0x0C,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x3D '='
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x3E '>'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x18,0x00,0x06,0x00,0x01,0x00,0x06,0x00,0x18,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x3F '?'
+ 0x00,0x00,0x00,0x00,0x38,0x44,0x04,0x08,0x10,0x10,0x00,0x10,0x10,0x00,0x00,0x00,
+
+ 13, // 0x40 '@'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x80,0x10,0x40,0x27,0xA0,0x48,0x90,0x48,0x90,0x48,0x90,0x48,0x90,0x48,0x90,0x27,0xE0,0x10,0x00,0x0F,0x80,0x00,0x00,
+
+ 9, // 0x41 'A'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x08,0x00,0x14,0x00,0x14,0x00,0x22,0x00,0x22,0x00,0x3E,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x42 'B'
+ 0x00,0x00,0x00,0x00,0x78,0x44,0x44,0x44,0x7C,0x42,0x42,0x42,0x7C,0x00,0x00,0x00,
+
+ 9, // 0x43 'C'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x21,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x21,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x44 'D'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x42,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x42,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x45 'E'
+ 0x00,0x00,0x00,0x00,0x7E,0x40,0x40,0x40,0x7E,0x40,0x40,0x40,0x7E,0x00,0x00,0x00,
+
+ 8, // 0x46 'F'
+ 0x00,0x00,0x00,0x00,0x7E,0x40,0x40,0x40,0x7C,0x40,0x40,0x40,0x40,0x00,0x00,0x00,
+
+ 9, // 0x47 'G'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x21,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x47,0x00,0x41,0x00,0x21,0x00,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x48 'H'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x7F,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 5, // 0x49 'I'
+ 0x00,0x00,0x00,0x00,0x70,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x70,0x00,0x00,0x00,
+
+ 6, // 0x4A 'J'
+ 0x00,0x00,0x00,0x00,0x38,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0xF0,0x00,0x00,0x00,
+
+ 8, // 0x4B 'K'
+ 0x00,0x00,0x00,0x00,0x42,0x44,0x48,0x50,0x60,0x50,0x48,0x44,0x42,0x00,0x00,0x00,
+
+ 7, // 0x4C 'L'
+ 0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x7E,0x00,0x00,0x00,
+
+ 11, // 0x4D 'M'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0xC0,0x60,0xC0,0x51,0x40,0x51,0x40,0x4A,0x40,0x4A,0x40,0x44,0x40,0x44,0x40,0x40,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x4E 'N'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x61,0x00,0x61,0x00,0x51,0x00,0x51,0x00,0x49,0x00,0x45,0x00,0x45,0x00,0x43,0x00,0x43,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x4F 'O'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x21,0x00,0x40,0x80,0x40,0x80,0x40,0x80,0x40,0x80,0x40,0x80,0x21,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x50 'P'
+ 0x00,0x00,0x00,0x00,0x7C,0x42,0x42,0x42,0x42,0x7C,0x40,0x40,0x40,0x00,0x00,0x00,
+
+ 10, // 0x51 'Q'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x21,0x00,0x40,0x80,0x40,0x80,0x40,0x80,0x40,0x80,0x40,0x80,0x21,0x00,0x1E,0x00,0x02,0x00,0x01,0x80,0x00,0x00,
+
+ 9, // 0x52 'R'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x42,0x00,0x42,0x00,0x42,0x00,0x44,0x00,0x78,0x00,0x44,0x00,0x42,0x00,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x53 'S'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x41,0x00,0x40,0x00,0x40,0x00,0x3E,0x00,0x01,0x00,0x01,0x00,0x41,0x00,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x54 'T'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x55 'U'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x22,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x56 'V'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x22,0x00,0x22,0x00,0x14,0x00,0x14,0x00,0x08,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 13, // 0x57 'W'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x10,0x42,0x10,0x45,0x10,0x45,0x10,0x25,0x20,0x28,0xA0,0x28,0xA0,0x10,0x40,0x10,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x58 'X'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x22,0x00,0x14,0x00,0x08,0x00,0x14,0x00,0x22,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x59 'Y'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x00,0x22,0x00,0x22,0x00,0x14,0x00,0x14,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x5A 'Z'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x01,0x00,0x02,0x00,0x04,0x00,0x08,0x00,0x10,0x00,0x20,0x00,0x40,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 6, // 0x5B '['
+ 0x00,0x00,0x00,0x38,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x38,0x00,
+
+ 6, // 0x5C '\'
+ 0x00,0x00,0x00,0x80,0x80,0x40,0x40,0x20,0x20,0x10,0x10,0x08,0x08,0x04,0x04,0x00,
+
+ 6, // 0x5D ']'
+ 0x00,0x00,0x00,0x70,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x70,0x00,
+
+ 11, // 0x5E '^'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x0A,0x00,0x11,0x00,0x20,0x80,0x40,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x5F '_'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,
+
+ 8, // 0x60 '`'
+ 0x00,0x00,0x00,0x10,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x61 'a'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x02,0x02,0x3E,0x42,0x42,0x3E,0x00,0x00,0x00,
+
+ 8, // 0x62 'b'
+ 0x00,0x00,0x00,0x40,0x40,0x40,0x5C,0x62,0x42,0x42,0x42,0x42,0x7C,0x00,0x00,0x00,
+
+ 8, // 0x63 'c'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x42,0x40,0x40,0x40,0x42,0x3C,0x00,0x00,0x00,
+
+ 8, // 0x64 'd'
+ 0x00,0x00,0x00,0x02,0x02,0x02,0x3E,0x42,0x42,0x42,0x42,0x46,0x3A,0x00,0x00,0x00,
+
+ 8, // 0x65 'e'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x42,0x42,0x7E,0x40,0x42,0x3C,0x00,0x00,0x00,
+
+ 6, // 0x66 'f'
+ 0x00,0x00,0x00,0x1C,0x20,0x20,0x78,0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x00,0x00,
+
+ 8, // 0x67 'g'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x42,0x42,0x42,0x42,0x46,0x3A,0x02,0x02,0x3C,
+
+ 8, // 0x68 'h'
+ 0x00,0x00,0x00,0x40,0x40,0x40,0x5C,0x62,0x42,0x42,0x42,0x42,0x42,0x00,0x00,0x00,
+
+ 3, // 0x69 'i'
+ 0x00,0x00,0x00,0x40,0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x00,
+
+ 4, // 0x6A 'j'
+ 0x00,0x00,0x00,0x20,0x00,0x00,0x60,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xC0,
+
+ 7, // 0x6B 'k'
+ 0x00,0x00,0x00,0x40,0x40,0x40,0x44,0x48,0x50,0x60,0x50,0x48,0x44,0x00,0x00,0x00,
+
+ 3, // 0x6C 'l'
+ 0x00,0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x00,
+
+ 11, // 0x6D 'm'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x59,0x80,0x66,0x40,0x44,0x40,0x44,0x40,0x44,0x40,0x44,0x40,0x44,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x6E 'n'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x5C,0x62,0x42,0x42,0x42,0x42,0x42,0x00,0x00,0x00,
+
+ 8, // 0x6F 'o'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x42,0x42,0x3C,0x00,0x00,0x00,
+
+ 8, // 0x70 'p'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x5C,0x62,0x42,0x42,0x42,0x42,0x7C,0x40,0x40,0x40,
+
+ 8, // 0x71 'q'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x42,0x42,0x42,0x42,0x46,0x3A,0x02,0x02,0x02,
+
+ 5, // 0x72 'r'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x58,0x60,0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x00,
+
+ 7, // 0x73 's'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x40,0x40,0x38,0x04,0x04,0x78,0x00,0x00,0x00,
+
+ 6, // 0x74 't'
+ 0x00,0x00,0x00,0x00,0x20,0x20,0x78,0x20,0x20,0x20,0x20,0x20,0x18,0x00,0x00,0x00,
+
+ 8, // 0x75 'u'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x42,0x42,0x42,0x42,0x46,0x3A,0x00,0x00,0x00,
+
+ 8, // 0x76 'v'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x42,0x24,0x24,0x24,0x18,0x18,0x00,0x00,0x00,
+
+ 11, // 0x77 'w'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x40,0x44,0x40,0x2A,0x80,0x2A,0x80,0x2A,0x80,0x11,0x00,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x78 'x'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x44,0x28,0x10,0x28,0x44,0x44,0x00,0x00,0x00,
+
+ 8, // 0x79 'y'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x42,0x24,0x24,0x24,0x18,0x18,0x10,0x10,0x20,
+
+ 7, // 0x7A 'z'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x04,0x08,0x10,0x20,0x40,0x7C,0x00,0x00,0x00,
+
+ 8, // 0x7B '{'
+ 0x00,0x00,0x00,0x0C,0x10,0x10,0x10,0x10,0x60,0x10,0x10,0x10,0x10,0x10,0x0C,0x00,
+
+ 7, // 0x7C '|'
+ 0x00,0x00,0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00,
+
+ 8, // 0x7D '}'
+ 0x00,0x00,0x00,0x30,0x08,0x08,0x08,0x08,0x06,0x08,0x08,0x08,0x08,0x08,0x30,0x00,
+
+ 11, // 0x7E '~'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x80,0x4C,0x80,0x43,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 13, // 0x7F ''
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xF0,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x3F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 0
+ };
+
+ const int8u verdana16_bold[] =
+ {
+ 16, 4, 32, 128-32,
+ 0x00,0x00,0x11,0x00,0x22,0x00,0x33,0x00,0x54,0x00,0x75,0x00,0xA6,0x00,0xC7,0x00,0xD8,0x00,
+ 0xE9,0x00,0xFA,0x00,0x1B,0x01,0x3C,0x01,0x4D,0x01,0x5E,0x01,0x6F,0x01,0x90,0x01,0xB1,0x01,
+ 0xD2,0x01,0xF3,0x01,0x14,0x02,0x35,0x02,0x56,0x02,0x77,0x02,0x98,0x02,0xB9,0x02,0xDA,0x02,
+ 0xEB,0x02,0xFC,0x02,0x1D,0x03,0x3E,0x03,0x5F,0x03,0x70,0x03,0x91,0x03,0xB2,0x03,0xD3,0x03,
+ 0xF4,0x03,0x15,0x04,0x36,0x04,0x57,0x04,0x78,0x04,0x99,0x04,0xAA,0x04,0xBB,0x04,0xDC,0x04,
+ 0xED,0x04,0x0E,0x05,0x2F,0x05,0x50,0x05,0x71,0x05,0x92,0x05,0xB3,0x05,0xD4,0x05,0xE5,0x05,
+ 0x06,0x06,0x27,0x06,0x48,0x06,0x69,0x06,0x8A,0x06,0xAB,0x06,0xBC,0x06,0xDD,0x06,0xEE,0x06,
+ 0x0F,0x07,0x30,0x07,0x51,0x07,0x72,0x07,0x93,0x07,0xA4,0x07,0xC5,0x07,0xE6,0x07,0xF7,0x07,
+ 0x18,0x08,0x39,0x08,0x4A,0x08,0x5B,0x08,0x6C,0x08,0x7D,0x08,0x9E,0x08,0xBF,0x08,0xE0,0x08,
+ 0x01,0x09,0x22,0x09,0x33,0x09,0x44,0x09,0x55,0x09,0x76,0x09,0x97,0x09,0xB8,0x09,0xD9,0x09,
+ 0xFA,0x09,0x0B,0x0A,0x2C,0x0A,0x3D,0x0A,0x5E,0x0A,0x7F,0x0A,
+
+ 4, // 0x20 ' '
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 6, // 0x21 '!'
+ 0x00,0x00,0x00,0x00,0x30,0x30,0x30,0x30,0x30,0x30,0x00,0x30,0x30,0x00,0x00,0x00,
+
+ 7, // 0x22 '"'
+ 0x00,0x00,0x00,0x6C,0x6C,0x6C,0x6C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 11, // 0x23 '#'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x09,0x00,0x3F,0x80,0x3F,0x80,0x12,0x00,0x7F,0x00,0x7F,0x00,0x24,0x00,0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x24 '$'
+ 0x00,0x00,0x00,0x00,0x08,0x00,0x08,0x00,0x3E,0x00,0x69,0x00,0x68,0x00,0x78,0x00,0x3E,0x00,0x0F,0x00,0x0B,0x00,0x4B,0x00,0x3E,0x00,0x08,0x00,0x08,0x00,0x00,0x00,
+
+ 17, // 0x25 '%'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x20,0x00,0x66,0x20,0x00,0x66,0x40,0x00,0x66,0x5E,0x00,0x66,0xB3,0x00,0x3D,0x33,0x00,0x01,0x33,0x00,0x02,0x33,0x00,0x02,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 11, // 0x26 '&'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x66,0x00,0x66,0x00,0x66,0xC0,0x3C,0xC0,0x66,0x80,0x63,0x00,0x63,0x80,0x3C,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 4, // 0x27 '''
+ 0x00,0x00,0x00,0x60,0x60,0x60,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x28 '('
+ 0x00,0x00,0x00,0x0C,0x18,0x30,0x30,0x60,0x60,0x60,0x60,0x60,0x30,0x30,0x18,0x0C,
+
+ 7, // 0x29 ')'
+ 0x00,0x00,0x00,0x60,0x30,0x18,0x18,0x0C,0x0C,0x0C,0x0C,0x0C,0x18,0x18,0x30,0x60,
+
+ 9, // 0x2A '*'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x49,0x00,0x2A,0x00,0x1C,0x00,0x2A,0x00,0x49,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 11, // 0x2B '+'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x3F,0x80,0x04,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 5, // 0x2C ','
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x60,0x60,0xC0,0xC0,
+
+ 7, // 0x2D '-'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 5, // 0x2E '.'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,
+
+ 9, // 0x2F '/'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x03,0x00,0x06,0x00,0x06,0x00,0x0C,0x00,0x0C,0x00,0x18,0x00,0x18,0x00,0x30,0x00,0x30,0x00,0x60,0x00,0x60,0x00,0x00,0x00,
+
+ 9, // 0x30 '0'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x31 '1'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x3C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x32 '2'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x63,0x00,0x63,0x00,0x03,0x00,0x06,0x00,0x0C,0x00,0x18,0x00,0x30,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x33 '3'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x63,0x00,0x63,0x00,0x03,0x00,0x0E,0x00,0x03,0x00,0x63,0x00,0x63,0x00,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x34 '4'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x0E,0x00,0x16,0x00,0x26,0x00,0x46,0x00,0x7F,0x80,0x06,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x35 '5'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x00,0x30,0x00,0x30,0x00,0x3E,0x00,0x03,0x00,0x03,0x00,0x63,0x00,0x63,0x00,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x36 '6'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x30,0x00,0x60,0x00,0x7E,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x37 '7'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x03,0x00,0x03,0x00,0x06,0x00,0x06,0x00,0x0C,0x00,0x0C,0x00,0x18,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x38 '8'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x3E,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x39 '9'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x3F,0x00,0x03,0x00,0x06,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 5, // 0x3A ':'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,
+
+ 5, // 0x3B ';'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x38,0x30,0x30,0x60,0x60,
+
+ 11, // 0x3C '<'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x03,0x00,0x0C,0x00,0x30,0x00,0x40,0x00,0x30,0x00,0x0C,0x00,0x03,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 11, // 0x3D '='
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x80,0x00,0x00,0x00,0x00,0x3F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 11, // 0x3E '>'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x18,0x00,0x06,0x00,0x01,0x80,0x00,0x40,0x01,0x80,0x06,0x00,0x18,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x3F '?'
+ 0x00,0x00,0x00,0x00,0x3C,0x66,0x06,0x0C,0x18,0x18,0x00,0x18,0x18,0x00,0x00,0x00,
+
+ 13, // 0x40 '@'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x80,0x30,0x60,0x27,0xA0,0x4D,0x90,0x4D,0x90,0x4D,0x90,0x4D,0x90,0x27,0xE0,0x30,0x00,0x0F,0x80,0x00,0x00,0x00,0x00,
+
+ 10, // 0x41 'A'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x0C,0x00,0x1E,0x00,0x1E,0x00,0x33,0x00,0x33,0x00,0x7F,0x80,0x61,0x80,0x61,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x42 'B'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x7F,0x00,0x61,0x80,0x61,0x80,0x61,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x43 'C'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x31,0x80,0x61,0x80,0x60,0x00,0x60,0x00,0x60,0x00,0x61,0x80,0x31,0x80,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x44 'D'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x63,0x00,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x63,0x00,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x45 'E'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x7F,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x46 'F'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x7F,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x47 'G'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x31,0x80,0x61,0x80,0x60,0x00,0x60,0x00,0x63,0x80,0x61,0x80,0x31,0x80,0x1F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 11, // 0x48 'H'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x7F,0xC0,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 6, // 0x49 'I'
+ 0x00,0x00,0x00,0x00,0x78,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x78,0x00,0x00,0x00,
+
+ 7, // 0x4A 'J'
+ 0x00,0x00,0x00,0x00,0x7C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0xF8,0x00,0x00,0x00,
+
+ 9, // 0x4B 'K'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x63,0x00,0x66,0x00,0x6C,0x00,0x78,0x00,0x78,0x00,0x6C,0x00,0x66,0x00,0x63,0x00,0x61,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x4C 'L'
+ 0x00,0x00,0x00,0x00,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x7F,0x00,0x00,0x00,
+
+ 12, // 0x4D 'M'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0xE0,0x70,0xE0,0x59,0x60,0x59,0x60,0x4E,0x60,0x4E,0x60,0x44,0x60,0x44,0x60,0x40,0x60,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x4E 'N'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x80,0x70,0x80,0x58,0x80,0x58,0x80,0x4C,0x80,0x46,0x80,0x46,0x80,0x43,0x80,0x43,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 11, // 0x4F 'O'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x31,0x80,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x31,0x80,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x50 'P'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x7E,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 11, // 0x51 'Q'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x31,0x80,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x31,0x80,0x1F,0x00,0x03,0x00,0x01,0xC0,0x00,0x00,
+
+ 9, // 0x52 'R'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x7E,0x00,0x6C,0x00,0x66,0x00,0x63,0x00,0x61,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x53 'S'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x63,0x00,0x63,0x00,0x70,0x00,0x3E,0x00,0x07,0x00,0x63,0x00,0x63,0x00,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x54 'T'
+ 0x00,0x00,0x00,0x00,0xFF,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x00,0x00,0x00,
+
+ 10, // 0x55 'U'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x56 'V'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x61,0x80,0x61,0x80,0x61,0x80,0x33,0x00,0x33,0x00,0x1E,0x00,0x1E,0x00,0x0C,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 14, // 0x57 'W'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x63,0x18,0x63,0x18,0x63,0x18,0x33,0x30,0x37,0xB0,0x34,0xB0,0x1C,0xE0,0x18,0x60,0x18,0x60,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x58 'X'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x61,0x80,0x33,0x00,0x33,0x00,0x1E,0x00,0x0C,0x00,0x1E,0x00,0x33,0x00,0x33,0x00,0x61,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x59 'Y'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x61,0x80,0x61,0x80,0x33,0x00,0x1E,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x5A 'Z'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x06,0x00,0x0C,0x00,0x0C,0x00,0x18,0x00,0x18,0x00,0x30,0x00,0x30,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 6, // 0x5B '['
+ 0x00,0x00,0x00,0x78,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x78,0x00,
+
+ 9, // 0x5C '\'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x60,0x00,0x30,0x00,0x30,0x00,0x18,0x00,0x18,0x00,0x0C,0x00,0x0C,0x00,0x06,0x00,0x06,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
+
+ 6, // 0x5D ']'
+ 0x00,0x00,0x00,0x78,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x78,0x00,
+
+ 10, // 0x5E '^'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x1E,0x00,0x33,0x00,0x61,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x5F '_'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x80,0x00,0x00,
+
+ 9, // 0x60 '`'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x61 'a'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x03,0x00,0x3F,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x62 'b'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x6E,0x00,0x73,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x63 'c'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x63,0x60,0x60,0x60,0x63,0x3E,0x00,0x00,0x00,
+
+ 9, // 0x64 'd'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x3F,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x67,0x00,0x3B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x65 'e'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x63,0x00,0x63,0x00,0x7F,0x00,0x60,0x00,0x63,0x00,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 5, // 0x66 'f'
+ 0x00,0x00,0x00,0x38,0x60,0x60,0xF8,0x60,0x60,0x60,0x60,0x60,0x60,0x00,0x00,0x00,
+
+ 9, // 0x67 'g'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x67,0x00,0x3B,0x00,0x03,0x00,0x03,0x00,0x3E,0x00,
+
+ 9, // 0x68 'h'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x6E,0x00,0x73,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 4, // 0x69 'i'
+ 0x00,0x00,0x00,0x60,0x60,0x00,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x00,0x00,0x00,
+
+ 5, // 0x6A 'j'
+ 0x00,0x00,0x00,0x30,0x30,0x00,0x70,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0xE0,
+
+ 8, // 0x6B 'k'
+ 0x00,0x00,0x00,0x60,0x60,0x60,0x66,0x6C,0x78,0x78,0x6C,0x66,0x63,0x00,0x00,0x00,
+
+ 4, // 0x6C 'l'
+ 0x00,0x00,0x00,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x00,0x00,0x00,
+
+ 14, // 0x6D 'm'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6E,0x70,0x73,0x98,0x63,0x18,0x63,0x18,0x63,0x18,0x63,0x18,0x63,0x18,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x6E 'n'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6E,0x00,0x73,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x6F 'o'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x70 'p'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6E,0x00,0x73,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x7E,0x00,0x60,0x00,0x60,0x00,0x60,0x00,
+
+ 9, // 0x71 'q'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x67,0x00,0x3B,0x00,0x03,0x00,0x03,0x00,0x03,0x00,
+
+ 6, // 0x72 'r'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x6C,0x7C,0x60,0x60,0x60,0x60,0x60,0x00,0x00,0x00,
+
+ 8, // 0x73 's'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x60,0x70,0x3C,0x0E,0x06,0x7C,0x00,0x00,0x00,
+
+ 6, // 0x74 't'
+ 0x00,0x00,0x00,0x00,0x60,0x60,0xF8,0x60,0x60,0x60,0x60,0x60,0x38,0x00,0x00,0x00,
+
+ 9, // 0x75 'u'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x67,0x00,0x3B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x76 'v'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x36,0x00,0x36,0x00,0x1C,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 12, // 0x77 'w'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x60,0x66,0x60,0x66,0x60,0x69,0x60,0x39,0xC0,0x30,0xC0,0x30,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x78 'x'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x63,0x00,0x63,0x00,0x36,0x00,0x1C,0x00,0x36,0x00,0x63,0x00,0x63,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x79 'y'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x36,0x00,0x36,0x00,0x1C,0x00,0x1C,0x00,0x0C,0x00,0x18,0x00,0x18,0x00,
+
+ 8, // 0x7A 'z'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x06,0x0C,0x18,0x30,0x60,0x7E,0x00,0x00,0x00,
+
+ 9, // 0x7B '{'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x18,0x00,0x70,0x00,0x18,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x07,0x00,0x00,0x00,
+
+ 8, // 0x7C '|'
+ 0x00,0x00,0x00,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x00,
+
+ 9, // 0x7D '}'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x0C,0x00,0x07,0x00,0x0C,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x70,0x00,0x00,0x00,
+
+ 11, // 0x7E '~'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x40,0x44,0x40,0x44,0x40,0x43,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 13, // 0x7F ''
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xF0,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x3F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 0
+ };
+
+ const int8u verdana17[] =
+ {
+ 17, 4, 32, 128-32,
+ 0x00,0x00,0x12,0x00,0x24,0x00,0x36,0x00,0x59,0x00,0x7C,0x00,0x9F,0x00,0xC2,0x00,0xD4,0x00,
+ 0xE6,0x00,0xF8,0x00,0x1B,0x01,0x3E,0x01,0x50,0x01,0x62,0x01,0x74,0x01,0x86,0x01,0xA9,0x01,
+ 0xCC,0x01,0xEF,0x01,0x12,0x02,0x35,0x02,0x58,0x02,0x7B,0x02,0x9E,0x02,0xC1,0x02,0xE4,0x02,
+ 0xF6,0x02,0x08,0x03,0x2B,0x03,0x4E,0x03,0x71,0x03,0x83,0x03,0xA6,0x03,0xC9,0x03,0xEC,0x03,
+ 0x0F,0x04,0x32,0x04,0x55,0x04,0x67,0x04,0x8A,0x04,0xAD,0x04,0xBF,0x04,0xD1,0x04,0xF4,0x04,
+ 0x06,0x05,0x29,0x05,0x4C,0x05,0x6F,0x05,0x81,0x05,0xA4,0x05,0xC7,0x05,0xEA,0x05,0x0D,0x06,
+ 0x30,0x06,0x53,0x06,0x76,0x06,0x99,0x06,0xBC,0x06,0xDF,0x06,0xF1,0x06,0x03,0x07,0x15,0x07,
+ 0x38,0x07,0x5B,0x07,0x7E,0x07,0x90,0x07,0xB3,0x07,0xC5,0x07,0xE8,0x07,0xFA,0x07,0x0C,0x08,
+ 0x2F,0x08,0x52,0x08,0x64,0x08,0x76,0x08,0x88,0x08,0x9A,0x08,0xBD,0x08,0xE0,0x08,0x03,0x09,
+ 0x26,0x09,0x49,0x09,0x5B,0x09,0x6D,0x09,0x7F,0x09,0xA2,0x09,0xB4,0x09,0xD7,0x09,0xFA,0x09,
+ 0x0C,0x0A,0x1E,0x0A,0x41,0x0A,0x53,0x0A,0x76,0x0A,0x99,0x0A,
+
+ 5, // 0x20 ' '
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 6, // 0x21 '!'
+ 0x00,0x00,0x00,0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x20,0x20,0x00,0x00,0x00,
+
+ 6, // 0x22 '"'
+ 0x00,0x00,0x00,0x48,0x48,0x48,0x48,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 11, // 0x23 '#'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x80,0x04,0x80,0x09,0x00,0x3F,0xC0,0x09,0x00,0x12,0x00,0x7F,0x80,0x12,0x00,0x24,0x00,0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x24 '$'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x08,0x00,0x3E,0x00,0x49,0x00,0x48,0x00,0x48,0x00,0x3E,0x00,0x09,0x00,0x09,0x00,0x49,0x00,0x3E,0x00,0x08,0x00,0x08,0x00,0x00,0x00,
+
+ 15, // 0x25 '%'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x20,0x44,0x40,0x44,0x80,0x44,0x80,0x45,0x38,0x39,0x44,0x02,0x44,0x04,0x44,0x04,0x44,0x08,0x38,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 11, // 0x26 '&'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x42,0x00,0x42,0x00,0x44,0x00,0x38,0x80,0x44,0x80,0x42,0x80,0x41,0x00,0x22,0x80,0x1C,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 4, // 0x27 '''
+ 0x00,0x00,0x00,0x40,0x40,0x40,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 6, // 0x28 '('
+ 0x00,0x00,0x00,0x08,0x10,0x20,0x20,0x40,0x40,0x40,0x40,0x40,0x40,0x20,0x20,0x10,0x08,
+
+ 6, // 0x29 ')'
+ 0x00,0x00,0x00,0x40,0x20,0x10,0x10,0x08,0x08,0x08,0x08,0x08,0x08,0x10,0x10,0x20,0x40,
+
+ 9, // 0x2A '*'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x49,0x00,0x2A,0x00,0x1C,0x00,0x2A,0x00,0x49,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 11, // 0x2B '+'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x7F,0xC0,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 5, // 0x2C ','
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x20,0x40,0x00,
+
+ 7, // 0x2D '-'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 5, // 0x2E '.'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x00,0x00,0x00,
+
+ 6, // 0x2F '/'
+ 0x00,0x00,0x00,0x04,0x08,0x08,0x08,0x10,0x10,0x20,0x20,0x20,0x40,0x40,0x80,0x80,0x00,
+
+ 9, // 0x30 '0'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x22,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x22,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x31 '1'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x38,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x32 '2'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x41,0x00,0x01,0x00,0x01,0x00,0x02,0x00,0x0C,0x00,0x10,0x00,0x20,0x00,0x40,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x33 '3'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x41,0x00,0x01,0x00,0x02,0x00,0x1C,0x00,0x02,0x00,0x01,0x00,0x01,0x00,0x42,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x34 '4'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x06,0x00,0x0A,0x00,0x12,0x00,0x22,0x00,0x42,0x00,0x7F,0x80,0x02,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x35 '5'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x7C,0x00,0x02,0x00,0x01,0x00,0x01,0x00,0x42,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x36 '6'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x30,0x00,0x20,0x00,0x40,0x00,0x7C,0x00,0x42,0x00,0x41,0x00,0x41,0x00,0x22,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x37 '7'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x01,0x00,0x02,0x00,0x02,0x00,0x04,0x00,0x04,0x00,0x08,0x00,0x10,0x00,0x10,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x38 '8'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x3E,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x39 '9'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x22,0x00,0x41,0x00,0x41,0x00,0x21,0x00,0x1F,0x00,0x01,0x00,0x02,0x00,0x06,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 6, // 0x3A ':'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x00,0x00,0x00,0x00,0x20,0x20,0x00,0x00,0x00,
+
+ 6, // 0x3B ';'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x00,0x00,0x00,0x00,0x20,0x20,0x20,0x40,0x00,
+
+ 11, // 0x3C '<'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x06,0x00,0x18,0x00,0x60,0x00,0x60,0x00,0x18,0x00,0x06,0x00,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 11, // 0x3D '='
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xC0,0x00,0x00,0x00,0x00,0x3F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 11, // 0x3E '>'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x0C,0x00,0x03,0x00,0x00,0xC0,0x00,0xC0,0x03,0x00,0x0C,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x3F '?'
+ 0x00,0x00,0x00,0x00,0x3C,0x42,0x02,0x02,0x0C,0x10,0x10,0x00,0x10,0x10,0x00,0x00,0x00,
+
+ 14, // 0x40 '@'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xC0,0x18,0x20,0x20,0x10,0x27,0xC8,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x27,0xF0,0x20,0x00,0x18,0x00,0x07,0xC0,0x00,0x00,
+
+ 10, // 0x41 'A'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x12,0x00,0x12,0x00,0x21,0x00,0x21,0x00,0x21,0x00,0x7F,0x80,0x40,0x80,0x80,0x40,0x80,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x42 'B'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x7E,0x00,0x41,0x00,0x40,0x80,0x40,0x80,0x41,0x00,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x43 'C'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x30,0x80,0x20,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x20,0x00,0x30,0x80,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 11, // 0x44 'D'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x41,0x80,0x40,0x80,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x80,0x41,0x80,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x45 'E'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x7F,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x46 'F'
+ 0x00,0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x7E,0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x00,
+
+ 11, // 0x47 'G'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x30,0xC0,0x20,0x40,0x40,0x00,0x40,0x00,0x43,0xC0,0x40,0x40,0x20,0x40,0x30,0x40,0x0F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x48 'H'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x40,0x80,0x40,0x80,0x40,0x80,0x7F,0x80,0x40,0x80,0x40,0x80,0x40,0x80,0x40,0x80,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 5, // 0x49 'I'
+ 0x00,0x00,0x00,0x00,0x70,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x70,0x00,0x00,0x00,
+
+ 6, // 0x4A 'J'
+ 0x00,0x00,0x00,0x00,0x38,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0xF0,0x00,0x00,0x00,
+
+ 10, // 0x4B 'K'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x00,0x42,0x00,0x44,0x00,0x48,0x00,0x50,0x00,0x68,0x00,0x44,0x00,0x42,0x00,0x41,0x00,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x4C 'L'
+ 0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x7F,0x00,0x00,0x00,
+
+ 11, // 0x4D 'M'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0xC0,0x60,0xC0,0x51,0x40,0x51,0x40,0x4A,0x40,0x4A,0x40,0x44,0x40,0x44,0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x4E 'N'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x80,0x60,0x80,0x50,0x80,0x48,0x80,0x48,0x80,0x44,0x80,0x44,0x80,0x42,0x80,0x41,0x80,0x41,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 11, // 0x4F 'O'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x31,0x80,0x20,0x80,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x20,0x80,0x31,0x80,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x50 'P'
+ 0x00,0x00,0x00,0x00,0x7C,0x42,0x41,0x41,0x42,0x7C,0x40,0x40,0x40,0x40,0x00,0x00,0x00,
+
+ 11, // 0x51 'Q'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x31,0x80,0x20,0x80,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x20,0x80,0x31,0x80,0x0E,0x00,0x02,0x00,0x02,0x00,0x01,0xC0,
+
+ 10, // 0x52 'R'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x42,0x00,0x42,0x00,0x42,0x00,0x44,0x00,0x78,0x00,0x44,0x00,0x42,0x00,0x41,0x00,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x53 'S'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x20,0x80,0x40,0x00,0x40,0x00,0x38,0x00,0x07,0x00,0x00,0x80,0x40,0x80,0x21,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x54 'T'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x80,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x55 'U'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x40,0x80,0x40,0x80,0x40,0x80,0x40,0x80,0x40,0x80,0x40,0x80,0x40,0x80,0x21,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x56 'V'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0x80,0x40,0x40,0x80,0x40,0x80,0x21,0x00,0x21,0x00,0x21,0x00,0x12,0x00,0x12,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 15, // 0x57 'W'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x04,0x41,0x04,0x22,0x88,0x22,0x88,0x22,0x88,0x14,0x50,0x14,0x50,0x14,0x50,0x08,0x20,0x08,0x20,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x58 'X'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x21,0x00,0x12,0x00,0x12,0x00,0x0C,0x00,0x0C,0x00,0x12,0x00,0x12,0x00,0x21,0x00,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x59 'Y'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x41,0x00,0x22,0x00,0x22,0x00,0x14,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x5A 'Z'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x80,0x00,0x80,0x01,0x00,0x02,0x00,0x04,0x00,0x08,0x00,0x10,0x00,0x20,0x00,0x40,0x00,0x7F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 6, // 0x5B '['
+ 0x00,0x00,0x00,0x3C,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3C,
+
+ 6, // 0x5C '\'
+ 0x00,0x00,0x00,0x80,0x40,0x40,0x40,0x20,0x20,0x10,0x10,0x10,0x08,0x08,0x08,0x04,0x00,
+
+ 6, // 0x5D ']'
+ 0x00,0x00,0x00,0x78,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x78,
+
+ 11, // 0x5E '^'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x0A,0x00,0x11,0x00,0x20,0x80,0x40,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x5F '_'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x80,0x00,0x00,
+
+ 9, // 0x60 '`'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x61 'a'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x22,0x02,0x3E,0x42,0x42,0x46,0x3A,0x00,0x00,0x00,
+
+ 9, // 0x62 'b'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x5C,0x00,0x62,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x42,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x63 'c'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x22,0x40,0x40,0x40,0x40,0x22,0x1C,0x00,0x00,0x00,
+
+ 9, // 0x64 'd'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x1F,0x00,0x21,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x23,0x00,0x1D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x65 'e'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x24,0x42,0x7E,0x40,0x40,0x22,0x1C,0x00,0x00,0x00,
+
+ 6, // 0x66 'f'
+ 0x00,0x00,0x00,0x1C,0x20,0x20,0x7C,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x00,0x00,
+
+ 9, // 0x67 'g'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x21,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x23,0x00,0x1D,0x00,0x01,0x00,0x22,0x00,0x1C,0x00,
+
+ 9, // 0x68 'h'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x5E,0x00,0x61,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 3, // 0x69 'i'
+ 0x00,0x00,0x00,0x00,0x40,0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x00,
+
+ 5, // 0x6A 'j'
+ 0x00,0x00,0x00,0x00,0x10,0x00,0x70,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0xE0,
+
+ 8, // 0x6B 'k'
+ 0x00,0x00,0x00,0x40,0x40,0x40,0x42,0x44,0x48,0x50,0x70,0x48,0x44,0x42,0x00,0x00,0x00,
+
+ 3, // 0x6C 'l'
+ 0x00,0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x00,
+
+ 13, // 0x6D 'm'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5C,0xE0,0x63,0x10,0x42,0x10,0x42,0x10,0x42,0x10,0x42,0x10,0x42,0x10,0x42,0x10,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x6E 'n'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5E,0x00,0x61,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x6F 'o'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x22,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x22,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x70 'p'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5C,0x00,0x62,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x42,0x00,0x7C,0x00,0x40,0x00,0x40,0x00,0x40,0x00,
+
+ 9, // 0x71 'q'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x21,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x23,0x00,0x1D,0x00,0x01,0x00,0x01,0x00,0x01,0x00,
+
+ 6, // 0x72 'r'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x5C,0x60,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x00,
+
+ 8, // 0x73 's'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x42,0x40,0x30,0x0C,0x02,0x42,0x3C,0x00,0x00,0x00,
+
+ 6, // 0x74 't'
+ 0x00,0x00,0x00,0x00,0x20,0x20,0x7C,0x20,0x20,0x20,0x20,0x20,0x20,0x1C,0x00,0x00,0x00,
+
+ 9, // 0x75 'u'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x43,0x00,0x3D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x76 'v'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x42,0x24,0x24,0x24,0x18,0x18,0x18,0x00,0x00,0x00,
+
+ 11, // 0x77 'w'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x40,0x44,0x40,0x2A,0x80,0x2A,0x80,0x2A,0x80,0x2A,0x80,0x11,0x00,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x78 'x'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x00,0x22,0x00,0x14,0x00,0x08,0x00,0x08,0x00,0x14,0x00,0x22,0x00,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x79 'y'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x42,0x24,0x24,0x24,0x18,0x18,0x18,0x10,0x10,0x20,
+
+ 8, // 0x7A 'z'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x02,0x04,0x08,0x10,0x20,0x40,0x7E,0x00,0x00,0x00,
+
+ 9, // 0x7B '{'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x10,0x00,0x60,0x00,0x10,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x07,0x00,
+
+ 6, // 0x7C '|'
+ 0x00,0x00,0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
+
+ 9, // 0x7D '}'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x04,0x00,0x03,0x00,0x04,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x70,0x00,
+
+ 11, // 0x7E '~'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x40,0x44,0x40,0x44,0x40,0x43,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 14, // 0x7F ''
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xF8,0x20,0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x3F,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 0
+ };
+
+ const int8u verdana17_bold[] =
+ {
+ 17, 4, 32, 128-32,
+ 0x00,0x00,0x12,0x00,0x24,0x00,0x36,0x00,0x59,0x00,0x7C,0x00,0xB0,0x00,0xD3,0x00,0xE5,0x00,
+ 0xF7,0x00,0x09,0x01,0x2C,0x01,0x4F,0x01,0x61,0x01,0x73,0x01,0x85,0x01,0xA8,0x01,0xCB,0x01,
+ 0xEE,0x01,0x11,0x02,0x34,0x02,0x57,0x02,0x7A,0x02,0x9D,0x02,0xC0,0x02,0xE3,0x02,0x06,0x03,
+ 0x18,0x03,0x2A,0x03,0x4D,0x03,0x70,0x03,0x93,0x03,0xB6,0x03,0xD9,0x03,0xFC,0x03,0x1F,0x04,
+ 0x42,0x04,0x65,0x04,0x88,0x04,0xAB,0x04,0xCE,0x04,0xF1,0x04,0x03,0x05,0x15,0x05,0x38,0x05,
+ 0x5B,0x05,0x7E,0x05,0xA1,0x05,0xC4,0x05,0xE7,0x05,0x0A,0x06,0x2D,0x06,0x50,0x06,0x73,0x06,
+ 0x96,0x06,0xB9,0x06,0xDC,0x06,0xFF,0x06,0x22,0x07,0x45,0x07,0x57,0x07,0x7A,0x07,0x8C,0x07,
+ 0xAF,0x07,0xD2,0x07,0xF5,0x07,0x18,0x08,0x3B,0x08,0x4D,0x08,0x70,0x08,0x93,0x08,0xA5,0x08,
+ 0xC8,0x08,0xEB,0x08,0xFD,0x08,0x0F,0x09,0x32,0x09,0x44,0x09,0x67,0x09,0x8A,0x09,0xAD,0x09,
+ 0xD0,0x09,0xF3,0x09,0x05,0x0A,0x17,0x0A,0x29,0x0A,0x4C,0x0A,0x6F,0x0A,0x92,0x0A,0xB5,0x0A,
+ 0xD8,0x0A,0xEA,0x0A,0x0D,0x0B,0x1F,0x0B,0x42,0x0B,0x65,0x0B,
+
+ 5, // 0x20 ' '
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 6, // 0x21 '!'
+ 0x00,0x00,0x00,0x00,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x00,0x30,0x30,0x00,0x00,0x00,
+
+ 8, // 0x22 '"'
+ 0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 12, // 0x23 '#'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x40,0x04,0x40,0x3F,0xE0,0x3F,0xE0,0x08,0x80,0x11,0x00,0x7F,0xC0,0x7F,0xC0,0x22,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x24 '$'
+ 0x00,0x00,0x00,0x00,0x04,0x00,0x04,0x00,0x1F,0x00,0x34,0x80,0x64,0x00,0x74,0x00,0x3C,0x00,0x0F,0x00,0x0B,0x80,0x09,0x80,0x4B,0x00,0x3E,0x00,0x08,0x00,0x08,0x00,0x00,0x00,
+
+ 18, // 0x25 '%'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x08,0x00,0x66,0x10,0x00,0x66,0x20,0x00,0x66,0x2F,0x00,0x66,0x59,0x80,0x66,0x99,0x80,0x3D,0x19,0x80,0x01,0x19,0x80,0x02,0x19,0x80,0x04,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 12, // 0x26 '&'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x33,0x00,0x33,0x00,0x36,0x00,0x1C,0x60,0x36,0x60,0x63,0x60,0x61,0xC0,0x31,0xC0,0x1F,0x60,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 5, // 0x27 '''
+ 0x00,0x00,0x00,0x60,0x60,0x60,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x28 '('
+ 0x00,0x00,0x00,0x0C,0x18,0x30,0x30,0x60,0x60,0x60,0x60,0x60,0x60,0x30,0x30,0x18,0x0C,
+
+ 8, // 0x29 ')'
+ 0x00,0x00,0x00,0x30,0x18,0x0C,0x0C,0x06,0x06,0x06,0x06,0x06,0x06,0x0C,0x0C,0x18,0x30,
+
+ 10, // 0x2A '*'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x49,0x00,0x2A,0x00,0x1C,0x00,0x2A,0x00,0x49,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 12, // 0x2B '+'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x7F,0xC0,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 5, // 0x2C ','
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x60,0x60,0xC0,0xC0,0x00,
+
+ 7, // 0x2D '-'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 5, // 0x2E '.'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x30,0x00,0x00,0x00,
+
+ 10, // 0x2F '/'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x01,0x80,0x03,0x00,0x03,0x00,0x06,0x00,0x06,0x00,0x0C,0x00,0x18,0x00,0x18,0x00,0x30,0x00,0x30,0x00,0x60,0x00,0x60,0x00,0x00,0x00,
+
+ 10, // 0x30 '0'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x33,0x00,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x33,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x31 '1'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x3C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x32 '2'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x00,0x61,0x80,0x61,0x80,0x01,0x80,0x03,0x00,0x06,0x00,0x0C,0x00,0x18,0x00,0x30,0x00,0x7F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x33 '3'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x00,0x61,0x80,0x61,0x80,0x01,0x80,0x0F,0x00,0x03,0x00,0x01,0x80,0x61,0x80,0x63,0x00,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x34 '4'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x07,0x00,0x0B,0x00,0x13,0x00,0x23,0x00,0x43,0x00,0x7F,0xC0,0x03,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x35 '5'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x80,0x30,0x00,0x30,0x00,0x3E,0x00,0x03,0x00,0x01,0x80,0x01,0x80,0x61,0x80,0x63,0x00,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x36 '6'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x38,0x00,0x30,0x00,0x6E,0x00,0x73,0x00,0x61,0x80,0x61,0x80,0x61,0x80,0x33,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x37 '7'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x80,0x01,0x80,0x03,0x00,0x03,0x00,0x06,0x00,0x06,0x00,0x0C,0x00,0x0C,0x00,0x18,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x38 '8'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x00,0x61,0x80,0x61,0x80,0x61,0x80,0x3F,0x00,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x39 '9'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x33,0x00,0x61,0x80,0x61,0x80,0x61,0x80,0x33,0x80,0x1D,0x80,0x03,0x00,0x07,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 6, // 0x3A ':'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x30,0x00,0x00,0x30,0x30,0x30,0x00,0x00,0x00,
+
+ 6, // 0x3B ';'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x30,0x00,0x00,0x38,0x30,0x30,0x60,0x60,0x00,
+
+ 12, // 0x3C '<'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x03,0x00,0x0C,0x00,0x30,0x00,0x40,0x00,0x30,0x00,0x0C,0x00,0x03,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 12, // 0x3D '='
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 12, // 0x3E '>'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x18,0x00,0x06,0x00,0x01,0x80,0x00,0x40,0x01,0x80,0x06,0x00,0x18,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x3F '?'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x63,0x00,0x03,0x00,0x06,0x00,0x0C,0x00,0x18,0x00,0x18,0x00,0x00,0x00,0x18,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 14, // 0x40 '@'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xC0,0x18,0x20,0x20,0x10,0x27,0xC8,0x4C,0xC8,0x4C,0xC8,0x4C,0xC8,0x4C,0xC8,0x27,0xF0,0x20,0x00,0x18,0x00,0x07,0xC0,0x00,0x00,
+
+ 11, // 0x41 'A'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x1B,0x00,0x1B,0x00,0x31,0x80,0x3F,0x80,0x31,0x80,0x60,0xC0,0x60,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 11, // 0x42 'B'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x61,0x80,0x61,0x80,0x61,0x80,0x7F,0x00,0x61,0x80,0x60,0xC0,0x60,0xC0,0x61,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 11, // 0x43 'C'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x80,0x30,0xC0,0x30,0xC0,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x30,0xC0,0x30,0xC0,0x0F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 11, // 0x44 'D'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x61,0x80,0x61,0x80,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x61,0x80,0x61,0x80,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x45 'E'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x80,0x60,0x00,0x60,0x00,0x60,0x00,0x7F,0x80,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x7F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x46 'F'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x7F,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 11, // 0x47 'G'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x80,0x30,0xC0,0x30,0xC0,0x60,0x00,0x60,0x00,0x63,0xC0,0x60,0xC0,0x30,0xC0,0x30,0xC0,0x0F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 11, // 0x48 'H'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x7F,0xC0,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x49 'I'
+ 0x00,0x00,0x00,0x00,0x7E,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x7E,0x00,0x00,0x00,
+
+ 8, // 0x4A 'J'
+ 0x00,0x00,0x00,0x00,0x3E,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x0C,0xF8,0x00,0x00,0x00,
+
+ 11, // 0x4B 'K'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0xC0,0x61,0x80,0x63,0x00,0x66,0x00,0x6C,0x00,0x7C,0x00,0x76,0x00,0x63,0x00,0x61,0x80,0x60,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x4C 'L'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x7F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 13, // 0x4D 'M'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x70,0x70,0x70,0x70,0xF0,0x58,0xB0,0x59,0xB0,0x4D,0x30,0x4F,0x30,0x46,0x30,0x46,0x30,0x40,0x30,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 11, // 0x4E 'N'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x40,0x70,0x40,0x58,0x40,0x4C,0x40,0x4C,0x40,0x46,0x40,0x43,0x40,0x43,0x40,0x41,0xC0,0x40,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 12, // 0x4F 'O'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x30,0xC0,0x30,0xC0,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x30,0xC0,0x30,0xC0,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x50 'P'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x63,0x00,0x61,0x80,0x61,0x80,0x61,0x80,0x63,0x00,0x7E,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 12, // 0x51 'Q'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x30,0xC0,0x30,0xC0,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x30,0xC0,0x30,0xC0,0x0F,0x80,0x03,0x00,0x03,0x00,0x01,0xE0,
+
+ 11, // 0x52 'R'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x61,0x80,0x60,0xC0,0x60,0xC0,0x61,0x80,0x7F,0x00,0x63,0x00,0x61,0x80,0x60,0xC0,0x60,0x60,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x53 'S'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x31,0x80,0x61,0x80,0x60,0x00,0x3E,0x00,0x1F,0x00,0x01,0x80,0x61,0x80,0x63,0x00,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x54 'T'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x80,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 11, // 0x55 'U'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x31,0x80,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 11, // 0x56 'V'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x31,0x80,0x31,0x80,0x31,0x80,0x1B,0x00,0x1B,0x00,0x0E,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 16, // 0x57 'W'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x61,0x86,0x61,0x86,0x63,0xC6,0x32,0x4C,0x36,0x6C,0x36,0x6C,0x34,0x2C,0x1C,0x38,0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 11, // 0x58 'X'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0xC0,0x31,0x80,0x31,0x80,0x1B,0x00,0x0E,0x00,0x0E,0x00,0x1B,0x00,0x31,0x80,0x31,0x80,0x60,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x59 'Y'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0x61,0x80,0x61,0x80,0x33,0x00,0x1E,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x5A 'Z'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x80,0x01,0x80,0x03,0x00,0x06,0x00,0x0C,0x00,0x0C,0x00,0x18,0x00,0x30,0x00,0x60,0x00,0x7F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x5B '['
+ 0x00,0x00,0x00,0x3E,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x3E,
+
+ 10, // 0x5C '\'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x60,0x00,0x30,0x00,0x30,0x00,0x18,0x00,0x18,0x00,0x0C,0x00,0x06,0x00,0x06,0x00,0x03,0x00,0x03,0x00,0x01,0x80,0x01,0x80,0x00,0x00,
+
+ 8, // 0x5D ']'
+ 0x00,0x00,0x00,0x7C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x7C,
+
+ 12, // 0x5E '^'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x0E,0x00,0x1B,0x00,0x31,0x80,0x60,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x5F '_'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xC0,0x00,0x00,
+
+ 10, // 0x60 '`'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x61 'a'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x03,0x00,0x03,0x00,0x3F,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x62 'b'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x6E,0x00,0x73,0x00,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x63,0x00,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x63 'c'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x33,0x60,0x60,0x60,0x60,0x33,0x1E,0x00,0x00,0x00,
+
+ 10, // 0x64 'd'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x01,0x80,0x01,0x80,0x1F,0x80,0x31,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x33,0x80,0x1D,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x65 'e'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x33,0x00,0x63,0x00,0x7F,0x00,0x60,0x00,0x60,0x00,0x33,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 6, // 0x66 'f'
+ 0x00,0x00,0x00,0x1C,0x30,0x30,0x7C,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x00,0x00,0x00,
+
+ 10, // 0x67 'g'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x80,0x31,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x33,0x80,0x1D,0x80,0x01,0x80,0x03,0x00,0x3E,0x00,
+
+ 10, // 0x68 'h'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x6F,0x00,0x71,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 4, // 0x69 'i'
+ 0x00,0x00,0x00,0x60,0x60,0x00,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x00,0x00,0x00,
+
+ 6, // 0x6A 'j'
+ 0x00,0x00,0x00,0x18,0x18,0x00,0x38,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xF0,
+
+ 9, // 0x6B 'k'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x63,0x00,0x66,0x00,0x6C,0x00,0x78,0x00,0x7C,0x00,0x66,0x00,0x63,0x00,0x61,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 4, // 0x6C 'l'
+ 0x00,0x00,0x00,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x00,0x00,0x00,
+
+ 14, // 0x6D 'm'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6E,0x70,0x73,0x98,0x63,0x18,0x63,0x18,0x63,0x18,0x63,0x18,0x63,0x18,0x63,0x18,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x6E 'n'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6F,0x00,0x71,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x6F 'o'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x33,0x00,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x33,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x70 'p'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6E,0x00,0x73,0x00,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x63,0x00,0x7E,0x00,0x60,0x00,0x60,0x00,0x60,0x00,
+
+ 10, // 0x71 'q'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x80,0x31,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x33,0x80,0x1D,0x80,0x01,0x80,0x01,0x80,0x01,0x80,
+
+ 7, // 0x72 'r'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x6E,0x7E,0x60,0x60,0x60,0x60,0x60,0x60,0x00,0x00,0x00,
+
+ 8, // 0x73 's'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x62,0x60,0x7C,0x3E,0x06,0x46,0x3C,0x00,0x00,0x00,
+
+ 6, // 0x74 't'
+ 0x00,0x00,0x00,0x00,0x60,0x60,0xFC,0x60,0x60,0x60,0x60,0x60,0x60,0x3C,0x00,0x00,0x00,
+
+ 10, // 0x75 'u'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x63,0x80,0x3D,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x76 'v'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x36,0x00,0x36,0x00,0x36,0x00,0x1C,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 14, // 0x77 'w'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x63,0x18,0x63,0x18,0x33,0x30,0x37,0xB0,0x34,0xB0,0x1C,0xE0,0x1C,0xE0,0x0C,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x78 'x'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x63,0x00,0x63,0x00,0x36,0x00,0x1C,0x00,0x1C,0x00,0x36,0x00,0x63,0x00,0x63,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x79 'y'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x36,0x00,0x36,0x00,0x36,0x00,0x1C,0x00,0x1C,0x00,0x0C,0x00,0x18,0x00,0x18,0x00,
+
+ 8, // 0x7A 'z'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x06,0x0C,0x18,0x18,0x30,0x60,0x7E,0x00,0x00,0x00,
+
+ 10, // 0x7B '{'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x18,0x00,0x70,0x00,0x18,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x07,0x80,
+
+ 8, // 0x7C '|'
+ 0x00,0x00,0x00,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
+
+ 10, // 0x7D '}'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x06,0x00,0x03,0x80,0x06,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x78,0x00,
+
+ 12, // 0x7E '~'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x20,0x24,0x20,0x46,0x20,0x42,0x40,0x41,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 14, // 0x7F ''
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xF8,0x20,0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x3F,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 0
+ };
+
+ const int8u verdana18[] =
+ {
+ 18, 4, 32, 128-32,
+ 0x00,0x00,0x13,0x00,0x26,0x00,0x39,0x00,0x5E,0x00,0x83,0x00,0xA8,0x00,0xCD,0x00,0xE0,0x00,
+ 0xF3,0x00,0x06,0x01,0x2B,0x01,0x50,0x01,0x63,0x01,0x76,0x01,0x89,0x01,0x9C,0x01,0xC1,0x01,
+ 0xE6,0x01,0x0B,0x02,0x30,0x02,0x55,0x02,0x7A,0x02,0x9F,0x02,0xC4,0x02,0xE9,0x02,0x0E,0x03,
+ 0x21,0x03,0x34,0x03,0x59,0x03,0x7E,0x03,0xA3,0x03,0xB6,0x03,0xDB,0x03,0x00,0x04,0x25,0x04,
+ 0x4A,0x04,0x6F,0x04,0x94,0x04,0xB9,0x04,0xDE,0x04,0x03,0x05,0x16,0x05,0x29,0x05,0x4E,0x05,
+ 0x61,0x05,0x86,0x05,0xAB,0x05,0xD0,0x05,0xF5,0x05,0x1A,0x06,0x3F,0x06,0x64,0x06,0x89,0x06,
+ 0xAE,0x06,0xD3,0x06,0xF8,0x06,0x1D,0x07,0x42,0x07,0x67,0x07,0x7A,0x07,0x8D,0x07,0xA0,0x07,
+ 0xC5,0x07,0xEA,0x07,0x0F,0x08,0x34,0x08,0x59,0x08,0x6C,0x08,0x91,0x08,0xB6,0x08,0xC9,0x08,
+ 0xEE,0x08,0x13,0x09,0x26,0x09,0x39,0x09,0x5E,0x09,0x71,0x09,0x96,0x09,0xBB,0x09,0xE0,0x09,
+ 0x05,0x0A,0x2A,0x0A,0x3D,0x0A,0x50,0x0A,0x63,0x0A,0x88,0x0A,0xAD,0x0A,0xD2,0x0A,0xF7,0x0A,
+ 0x1C,0x0B,0x41,0x0B,0x66,0x0B,0x79,0x0B,0x9E,0x0B,0xC3,0x0B,
+
+ 5, // 0x20 ' '
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 6, // 0x21 '!'
+ 0x00,0x00,0x00,0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x20,0x20,0x00,0x00,0x00,
+
+ 7, // 0x22 '"'
+ 0x00,0x00,0x00,0x48,0x48,0x48,0x48,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 12, // 0x23 '#'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x80,0x04,0x80,0x09,0x00,0x3F,0xC0,0x09,0x00,0x11,0x00,0x12,0x00,0x7F,0x80,0x12,0x00,0x24,0x00,0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x24 '$'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x08,0x00,0x3E,0x00,0x49,0x00,0x48,0x00,0x48,0x00,0x38,0x00,0x0E,0x00,0x09,0x00,0x09,0x00,0x49,0x00,0x3E,0x00,0x08,0x00,0x08,0x00,0x08,0x00,
+
+ 16, // 0x25 '%'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x20,0x44,0x40,0x44,0x40,0x44,0x80,0x44,0x80,0x38,0x9C,0x01,0x22,0x01,0x22,0x02,0x22,0x02,0x22,0x04,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 12, // 0x26 '&'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x21,0x00,0x21,0x00,0x21,0x00,0x1E,0x40,0x24,0x40,0x42,0x40,0x41,0x40,0x40,0x80,0x21,0x40,0x1E,0x20,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 4, // 0x27 '''
+ 0x00,0x00,0x00,0x40,0x40,0x40,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x28 '('
+ 0x00,0x00,0x00,0x08,0x10,0x20,0x20,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x20,0x20,0x10,0x08,
+
+ 7, // 0x29 ')'
+ 0x00,0x00,0x00,0x20,0x10,0x08,0x08,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x08,0x08,0x10,0x20,
+
+ 10, // 0x2A '*'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x49,0x00,0x2A,0x00,0x1C,0x00,0x2A,0x00,0x49,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 12, // 0x2B '+'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x3F,0xE0,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 5, // 0x2C ','
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x20,0x40,0x40,
+
+ 7, // 0x2D '-'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 5, // 0x2E '.'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x00,0x00,0x00,
+
+ 7, // 0x2F '/'
+ 0x00,0x00,0x00,0x02,0x04,0x04,0x04,0x08,0x08,0x10,0x10,0x20,0x20,0x40,0x40,0x40,0x80,0x00,
+
+ 10, // 0x30 '0'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x21,0x00,0x40,0x80,0x40,0x80,0x40,0x80,0x40,0x80,0x40,0x80,0x40,0x80,0x40,0x80,0x21,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x31 '1'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x04,0x00,0x1C,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x32 '2'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x41,0x00,0x00,0x80,0x00,0x80,0x00,0x80,0x01,0x00,0x02,0x00,0x0C,0x00,0x30,0x00,0x40,0x00,0x7F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x33 '3'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x00,0x40,0x80,0x00,0x80,0x01,0x00,0x0E,0x00,0x01,0x00,0x00,0x80,0x00,0x80,0x00,0x80,0x41,0x00,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x34 '4'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x03,0x00,0x05,0x00,0x09,0x00,0x11,0x00,0x21,0x00,0x41,0x00,0x7F,0xC0,0x01,0x00,0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x35 '5'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x80,0x20,0x00,0x20,0x00,0x20,0x00,0x3E,0x00,0x01,0x00,0x00,0x80,0x00,0x80,0x00,0x80,0x41,0x00,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x36 '6'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x10,0x00,0x20,0x00,0x40,0x00,0x5E,0x00,0x61,0x00,0x40,0x80,0x40,0x80,0x40,0x80,0x21,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x37 '7'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x01,0x00,0x02,0x00,0x02,0x00,0x04,0x00,0x04,0x00,0x08,0x00,0x08,0x00,0x10,0x00,0x10,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x38 '8'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x21,0x00,0x40,0x80,0x40,0x80,0x21,0x00,0x1E,0x00,0x21,0x00,0x40,0x80,0x40,0x80,0x21,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x39 '9'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x21,0x00,0x40,0x80,0x40,0x80,0x40,0x80,0x20,0x80,0x1F,0x80,0x00,0x80,0x01,0x00,0x02,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x3A ':'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x00,0x00,0x00,0x00,0x10,0x10,0x00,0x00,0x00,
+
+ 7, // 0x3B ';'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x20,0x20,
+
+ 12, // 0x3C '<'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x03,0x00,0x0C,0x00,0x30,0x00,0x30,0x00,0x0C,0x00,0x03,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 12, // 0x3D '='
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xE0,0x00,0x00,0x00,0x00,0x3F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 12, // 0x3E '>'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x0C,0x00,0x03,0x00,0x00,0xC0,0x00,0xC0,0x03,0x00,0x0C,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x3F '?'
+ 0x00,0x00,0x00,0x00,0x3C,0x42,0x02,0x02,0x04,0x08,0x10,0x10,0x00,0x10,0x10,0x00,0x00,0x00,
+
+ 15, // 0x40 '@'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x18,0x60,0x20,0x10,0x23,0xD0,0x44,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x44,0x48,0x23,0xF0,0x20,0x00,0x18,0x00,0x07,0xC0,0x00,0x00,
+
+ 10, // 0x41 'A'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x12,0x00,0x12,0x00,0x12,0x00,0x21,0x00,0x21,0x00,0x40,0x80,0x7F,0x80,0x40,0x80,0x80,0x40,0x80,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x42 'B'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x7E,0x00,0x41,0x00,0x40,0x80,0x40,0x80,0x40,0x80,0x41,0x00,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 11, // 0x43 'C'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x30,0xC0,0x20,0x40,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x20,0x40,0x30,0xC0,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 11, // 0x44 'D'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x41,0x80,0x40,0x80,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x80,0x41,0x80,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x45 'E'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x7F,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x46 'F'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x80,0x40,0x00,0x40,0x00,0x40,0x00,0x7F,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 12, // 0x47 'G'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x80,0x30,0x60,0x20,0x20,0x40,0x00,0x40,0x00,0x41,0xE0,0x40,0x20,0x40,0x20,0x20,0x20,0x30,0x20,0x0F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 11, // 0x48 'H'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x7F,0xC0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 5, // 0x49 'I'
+ 0x00,0x00,0x00,0x00,0x70,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x70,0x00,0x00,0x00,
+
+ 7, // 0x4A 'J'
+ 0x00,0x00,0x00,0x00,0x3C,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x08,0xF0,0x00,0x00,0x00,
+
+ 10, // 0x4B 'K'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x41,0x00,0x42,0x00,0x44,0x00,0x48,0x00,0x50,0x00,0x68,0x00,0x44,0x00,0x42,0x00,0x41,0x00,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x4C 'L'
+ 0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x7F,0x00,0x00,0x00,
+
+ 13, // 0x4D 'M'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x30,0x50,0x50,0x50,0x50,0x48,0x90,0x48,0x90,0x45,0x10,0x45,0x10,0x42,0x10,0x42,0x10,0x40,0x10,0x40,0x10,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 11, // 0x4E 'N'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x40,0x60,0x40,0x50,0x40,0x48,0x40,0x48,0x40,0x44,0x40,0x42,0x40,0x42,0x40,0x41,0x40,0x40,0xC0,0x40,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 12, // 0x4F 'O'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x30,0xC0,0x20,0x40,0x40,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x20,0x40,0x30,0xC0,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x50 'P'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x41,0x00,0x40,0x80,0x40,0x80,0x40,0x80,0x41,0x00,0x7E,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 12, // 0x51 'Q'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x30,0xC0,0x20,0x40,0x40,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x20,0x40,0x30,0xC0,0x0F,0x00,0x01,0x00,0x01,0x00,0x00,0xE0,
+
+ 10, // 0x52 'R'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x42,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x42,0x00,0x7C,0x00,0x42,0x00,0x41,0x00,0x40,0x80,0x40,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x53 'S'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x20,0x80,0x40,0x00,0x40,0x00,0x20,0x00,0x1E,0x00,0x01,0x00,0x00,0x80,0x40,0x80,0x21,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x54 'T'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x80,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 11, // 0x55 'U'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x20,0x80,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x56 'V'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0x80,0x40,0x40,0x80,0x40,0x80,0x40,0x80,0x21,0x00,0x21,0x00,0x12,0x00,0x12,0x00,0x12,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 15, // 0x57 'W'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x04,0x41,0x04,0x22,0x88,0x22,0x88,0x22,0x88,0x12,0x90,0x14,0x50,0x14,0x50,0x14,0x50,0x08,0x20,0x08,0x20,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x58 'X'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x21,0x00,0x21,0x00,0x12,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x12,0x00,0x21,0x00,0x21,0x00,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x59 'Y'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x41,0x00,0x22,0x00,0x22,0x00,0x14,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x5A 'Z'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x80,0x00,0x80,0x01,0x00,0x02,0x00,0x04,0x00,0x08,0x00,0x08,0x00,0x10,0x00,0x20,0x00,0x40,0x00,0x7F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x5B '['
+ 0x00,0x00,0x00,0x3C,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3C,
+
+ 7, // 0x5C '\'
+ 0x00,0x00,0x00,0x80,0x40,0x40,0x40,0x20,0x20,0x10,0x10,0x08,0x08,0x04,0x04,0x04,0x02,0x00,
+
+ 7, // 0x5D ']'
+ 0x00,0x00,0x00,0x78,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x78,
+
+ 12, // 0x5E '^'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x09,0x00,0x10,0x80,0x20,0x40,0x40,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x5F '_'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xC0,0x00,0x00,
+
+ 10, // 0x60 '`'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x61 'a'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x21,0x00,0x01,0x00,0x3F,0x00,0x41,0x00,0x41,0x00,0x43,0x00,0x3D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x62 'b'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x5C,0x00,0x62,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x42,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x63 'c'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x21,0x40,0x40,0x40,0x40,0x21,0x1E,0x00,0x00,0x00,
+
+ 9, // 0x64 'd'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x1F,0x00,0x21,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x23,0x00,0x1D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x65 'e'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x22,0x00,0x41,0x00,0x7F,0x00,0x40,0x00,0x40,0x00,0x21,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 6, // 0x66 'f'
+ 0x00,0x00,0x00,0x1C,0x20,0x20,0x20,0x7C,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x00,0x00,
+
+ 9, // 0x67 'g'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x21,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x23,0x00,0x1D,0x00,0x01,0x00,0x22,0x00,0x1C,0x00,
+
+ 9, // 0x68 'h'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x5E,0x00,0x61,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 3, // 0x69 'i'
+ 0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x00,
+
+ 5, // 0x6A 'j'
+ 0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x70,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0xE0,
+
+ 9, // 0x6B 'k'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x42,0x00,0x44,0x00,0x48,0x00,0x50,0x00,0x68,0x00,0x44,0x00,0x42,0x00,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 3, // 0x6C 'l'
+ 0x00,0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x00,
+
+ 15, // 0x6D 'm'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2E,0x70,0x31,0x88,0x21,0x08,0x21,0x08,0x21,0x08,0x21,0x08,0x21,0x08,0x21,0x08,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x6E 'n'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5E,0x00,0x61,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x6F 'o'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x21,0x00,0x40,0x80,0x40,0x80,0x40,0x80,0x40,0x80,0x21,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x70 'p'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5C,0x00,0x62,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x42,0x00,0x7C,0x00,0x40,0x00,0x40,0x00,0x40,0x00,
+
+ 9, // 0x71 'q'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x21,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x23,0x00,0x1D,0x00,0x01,0x00,0x01,0x00,0x01,0x00,
+
+ 6, // 0x72 'r'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5C,0x60,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x00,
+
+ 8, // 0x73 's'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x42,0x40,0x30,0x0C,0x02,0x42,0x3C,0x00,0x00,0x00,
+
+ 6, // 0x74 't'
+ 0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x7C,0x20,0x20,0x20,0x20,0x20,0x20,0x1C,0x00,0x00,0x00,
+
+ 9, // 0x75 'u'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x43,0x00,0x3D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x76 'v'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x22,0x00,0x22,0x00,0x22,0x00,0x14,0x00,0x14,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 13, // 0x77 'w'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x10,0x42,0x10,0x25,0x20,0x25,0x20,0x28,0xA0,0x28,0xA0,0x10,0x40,0x10,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x78 'x'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x00,0x22,0x00,0x14,0x00,0x08,0x00,0x08,0x00,0x14,0x00,0x22,0x00,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x79 'y'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x22,0x00,0x22,0x00,0x22,0x00,0x14,0x00,0x14,0x00,0x08,0x00,0x08,0x00,0x10,0x00,0x10,0x00,
+
+ 9, // 0x7A 'z'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x02,0x00,0x04,0x00,0x08,0x00,0x10,0x00,0x20,0x00,0x40,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x7B '{'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x10,0x00,0x60,0x00,0x10,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x07,0x00,
+
+ 7, // 0x7C '|'
+ 0x00,0x00,0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
+
+ 10, // 0x7D '}'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x02,0x00,0x01,0x80,0x02,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x38,0x00,
+
+ 12, // 0x7E '~'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x20,0x24,0x20,0x42,0x40,0x41,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 15, // 0x7F ''
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xF8,0x20,0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x3F,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 0
+ };
+
+ const int8u verdana18_bold[] =
+ {
+ 18, 4, 32, 128-32,
+ 0x00,0x00,0x13,0x00,0x26,0x00,0x4B,0x00,0x70,0x00,0x95,0x00,0xCC,0x00,0xF1,0x00,0x04,0x01,
+ 0x17,0x01,0x2A,0x01,0x4F,0x01,0x74,0x01,0x87,0x01,0x9A,0x01,0xAD,0x01,0xD2,0x01,0xF7,0x01,
+ 0x1C,0x02,0x41,0x02,0x66,0x02,0x8B,0x02,0xB0,0x02,0xD5,0x02,0xFA,0x02,0x1F,0x03,0x44,0x03,
+ 0x57,0x03,0x6A,0x03,0x8F,0x03,0xB4,0x03,0xD9,0x03,0xFE,0x03,0x23,0x04,0x48,0x04,0x6D,0x04,
+ 0x92,0x04,0xB7,0x04,0xDC,0x04,0x01,0x05,0x26,0x05,0x4B,0x05,0x5E,0x05,0x71,0x05,0x96,0x05,
+ 0xBB,0x05,0xE0,0x05,0x05,0x06,0x2A,0x06,0x4F,0x06,0x74,0x06,0x99,0x06,0xBE,0x06,0xE3,0x06,
+ 0x08,0x07,0x2D,0x07,0x52,0x07,0x77,0x07,0x9C,0x07,0xC1,0x07,0xD4,0x07,0xF9,0x07,0x0C,0x08,
+ 0x31,0x08,0x56,0x08,0x7B,0x08,0xA0,0x08,0xC5,0x08,0xD8,0x08,0xFD,0x08,0x22,0x09,0x35,0x09,
+ 0x5A,0x09,0x7F,0x09,0x92,0x09,0xA5,0x09,0xCA,0x09,0xDD,0x09,0x02,0x0A,0x27,0x0A,0x4C,0x0A,
+ 0x71,0x0A,0x96,0x0A,0xA9,0x0A,0xCE,0x0A,0xE1,0x0A,0x06,0x0B,0x2B,0x0B,0x50,0x0B,0x75,0x0B,
+ 0x9A,0x0B,0xBF,0x0B,0xE4,0x0B,0xF7,0x0B,0x1C,0x0C,0x41,0x0C,
+
+ 5, // 0x20 ' '
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 6, // 0x21 '!'
+ 0x00,0x00,0x00,0x00,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x00,0x30,0x30,0x00,0x00,0x00,
+
+ 9, // 0x22 '"'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x36,0x00,0x36,0x00,0x36,0x00,0x36,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 13, // 0x23 '#'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x20,0x04,0x20,0x08,0x40,0x3F,0xF0,0x3F,0xF0,0x08,0x40,0x10,0x80,0x7F,0xE0,0x7F,0xE0,0x21,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 11, // 0x24 '$'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x04,0x00,0x1F,0x80,0x34,0xC0,0x64,0xC0,0x64,0x00,0x3C,0x00,0x07,0x80,0x04,0xC0,0x64,0xC0,0x65,0x80,0x3F,0x00,0x04,0x00,0x04,0x00,0x00,0x00,
+
+ 19, // 0x25 '%'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x08,0x00,0x63,0x10,0x00,0x63,0x10,0x00,0x63,0x20,0x00,0x63,0x2F,0x80,0x63,0x58,0xC0,0x3E,0x98,0xC0,0x00,0x98,0xC0,0x01,0x18,0xC0,0x01,0x18,0xC0,0x02,0x0F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 13, // 0x26 '&'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x33,0x00,0x33,0x00,0x33,0x00,0x1E,0x60,0x36,0x60,0x63,0x60,0x61,0xC0,0x60,0xC0,0x30,0xE0,0x1F,0x30,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 5, // 0x27 '''
+ 0x00,0x00,0x00,0x60,0x60,0x60,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x28 '('
+ 0x00,0x00,0x00,0x06,0x0C,0x18,0x30,0x30,0x60,0x60,0x60,0x60,0x60,0x30,0x30,0x18,0x0C,0x06,
+
+ 8, // 0x29 ')'
+ 0x00,0x00,0x00,0x60,0x30,0x18,0x0C,0x0C,0x06,0x06,0x06,0x06,0x06,0x0C,0x0C,0x18,0x30,0x60,
+
+ 11, // 0x2A '*'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x24,0x80,0x15,0x00,0x0E,0x00,0x15,0x00,0x24,0x80,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 13, // 0x2B '+'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x3F,0xE0,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 5, // 0x2C ','
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x60,0x60,0x60,0xC0,0xC0,
+
+ 7, // 0x2D '-'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 5, // 0x2E '.'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x30,0x00,0x00,0x00,
+
+ 10, // 0x2F '/'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x01,0x80,0x03,0x00,0x03,0x00,0x06,0x00,0x06,0x00,0x0C,0x00,0x0C,0x00,0x18,0x00,0x18,0x00,0x30,0x00,0x30,0x00,0x60,0x00,0x60,0x00,0x00,0x00,
+
+ 11, // 0x30 '0'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x31,0x80,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x31,0x80,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 11, // 0x31 '1'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x1E,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x1F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 11, // 0x32 '2'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x00,0x61,0x80,0x60,0xC0,0x00,0xC0,0x01,0x80,0x03,0x00,0x06,0x00,0x0C,0x00,0x18,0x00,0x30,0x00,0x7F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 11, // 0x33 '3'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x00,0x61,0x80,0x60,0xC0,0x00,0xC0,0x01,0x80,0x0F,0x00,0x01,0x80,0x00,0xC0,0x60,0xC0,0x61,0x80,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 11, // 0x34 '4'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x03,0x80,0x05,0x80,0x09,0x80,0x11,0x80,0x21,0x80,0x41,0x80,0x7F,0xE0,0x01,0x80,0x01,0x80,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 11, // 0x35 '5'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xC0,0x30,0x00,0x30,0x00,0x30,0x00,0x3F,0x00,0x01,0x80,0x00,0xC0,0x00,0xC0,0x60,0xC0,0x61,0x80,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 11, // 0x36 '6'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x80,0x18,0x00,0x30,0x00,0x60,0x00,0x6F,0x00,0x71,0x80,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x31,0x80,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 11, // 0x37 '7'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xC0,0x00,0xC0,0x01,0x80,0x01,0x80,0x03,0x00,0x03,0x00,0x06,0x00,0x06,0x00,0x0C,0x00,0x0C,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 11, // 0x38 '8'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x31,0x80,0x60,0xC0,0x60,0xC0,0x31,0x80,0x1F,0x00,0x31,0x80,0x60,0xC0,0x60,0xC0,0x31,0x80,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 11, // 0x39 '9'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x31,0x80,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x31,0xC0,0x1E,0xC0,0x00,0xC0,0x01,0x80,0x03,0x00,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 6, // 0x3A ':'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x30,0x00,0x00,0x30,0x30,0x30,0x00,0x00,0x00,
+
+ 6, // 0x3B ';'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x30,0x00,0x00,0x38,0x30,0x30,0x30,0x60,0x60,
+
+ 13, // 0x3C '<'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0xC0,0x03,0x00,0x0C,0x00,0x30,0x00,0x30,0x00,0x0C,0x00,0x03,0x00,0x00,0xC0,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 13, // 0x3D '='
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 13, // 0x3E '>'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x18,0x00,0x06,0x00,0x01,0x80,0x00,0x60,0x00,0x60,0x01,0x80,0x06,0x00,0x18,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 9, // 0x3F '?'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x63,0x00,0x03,0x00,0x03,0x00,0x06,0x00,0x0C,0x00,0x18,0x00,0x18,0x00,0x00,0x00,0x18,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 14, // 0x40 '@'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x18,0x60,0x20,0x10,0x27,0xD0,0x4C,0xC8,0x4C,0xC8,0x4C,0xC8,0x4C,0xC8,0x4C,0xC8,0x27,0xF0,0x20,0x00,0x18,0x00,0x07,0xC0,0x00,0x00,
+
+ 12, // 0x41 'A'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x06,0x00,0x0F,0x00,0x0F,0x00,0x19,0x80,0x19,0x80,0x30,0xC0,0x3F,0xC0,0x30,0xC0,0x60,0x60,0x60,0x60,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 11, // 0x42 'B'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x61,0x80,0x61,0x80,0x61,0x80,0x63,0x00,0x7F,0x00,0x61,0x80,0x60,0xC0,0x60,0xC0,0x61,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 11, // 0x43 'C'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x80,0x38,0xC0,0x30,0xC0,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x30,0xC0,0x38,0xC0,0x0F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 12, // 0x44 'D'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x61,0xC0,0x60,0xC0,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0xC0,0x61,0xC0,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x45 'E'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x80,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x7F,0x80,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x7F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x46 'F'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x80,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x7F,0x80,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 12, // 0x47 'G'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xC0,0x38,0x60,0x30,0x60,0x60,0x00,0x60,0x00,0x63,0xE0,0x60,0x60,0x60,0x60,0x30,0x60,0x38,0x60,0x0F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 12, // 0x48 'H'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x7F,0xE0,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x49 'I'
+ 0x00,0x00,0x00,0x00,0x7E,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x7E,0x00,0x00,0x00,
+
+ 8, // 0x4A 'J'
+ 0x00,0x00,0x00,0x00,0x3E,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x0C,0xF8,0x00,0x00,0x00,
+
+ 12, // 0x4B 'K'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x60,0xC0,0x61,0x80,0x63,0x00,0x66,0x00,0x6C,0x00,0x7E,0x00,0x73,0x00,0x61,0x80,0x60,0xC0,0x60,0x60,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x4C 'L'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x7F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 14, // 0x4D 'M'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x38,0x70,0x38,0x70,0x78,0x58,0x58,0x58,0xD8,0x4C,0x98,0x4D,0x98,0x47,0x18,0x47,0x18,0x42,0x18,0x40,0x18,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 12, // 0x4E 'N'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x20,0x70,0x20,0x58,0x20,0x4C,0x20,0x4C,0x20,0x46,0x20,0x43,0x20,0x43,0x20,0x41,0xA0,0x40,0xE0,0x40,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 13, // 0x4F 'O'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x80,0x38,0xE0,0x30,0x60,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x30,0x60,0x38,0xE0,0x0F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 11, // 0x50 'P'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x61,0x80,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x61,0x80,0x7F,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 13, // 0x51 'Q'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x80,0x38,0xE0,0x30,0x60,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x30,0x60,0x38,0xE0,0x0F,0x80,0x03,0x00,0x03,0x80,0x01,0xF0,
+
+ 12, // 0x52 'R'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x61,0x80,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x61,0x80,0x7F,0x00,0x61,0x80,0x60,0xC0,0x60,0x60,0x60,0x30,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 11, // 0x53 'S'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x80,0x30,0xC0,0x60,0xC0,0x60,0x00,0x7C,0x00,0x3F,0x80,0x03,0xC0,0x00,0xC0,0x60,0xC0,0x61,0x80,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x54 'T'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x80,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 12, // 0x55 'U'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x30,0xC0,0x1F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 11, // 0x56 'V'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x31,0x80,0x31,0x80,0x31,0x80,0x1B,0x00,0x1B,0x00,0x1B,0x00,0x0E,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 16, // 0x57 'W'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x61,0x86,0x61,0x86,0x63,0xC6,0x33,0xCC,0x32,0x4C,0x32,0x4C,0x1E,0x78,0x1C,0x38,0x1C,0x38,0x0C,0x30,0x0C,0x30,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 11, // 0x58 'X'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0xC0,0x31,0x80,0x31,0x80,0x1B,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x1B,0x00,0x31,0x80,0x31,0x80,0x60,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 11, // 0x59 'Y'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0x61,0x80,0x61,0x80,0x33,0x00,0x1E,0x00,0x1E,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x5A 'Z'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x80,0x01,0x80,0x03,0x00,0x06,0x00,0x06,0x00,0x0C,0x00,0x18,0x00,0x18,0x00,0x30,0x00,0x60,0x00,0x7F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x5B '['
+ 0x00,0x00,0x00,0x3E,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x3E,
+
+ 10, // 0x5C '\'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x60,0x00,0x30,0x00,0x30,0x00,0x18,0x00,0x18,0x00,0x0C,0x00,0x0C,0x00,0x06,0x00,0x06,0x00,0x03,0x00,0x03,0x00,0x01,0x80,0x01,0x80,0x00,0x00,
+
+ 8, // 0x5D ']'
+ 0x00,0x00,0x00,0x7C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x7C,
+
+ 13, // 0x5E '^'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x0F,0x00,0x19,0x80,0x30,0xC0,0x60,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 11, // 0x5F '_'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xE0,0x00,0x00,
+
+ 11, // 0x60 '`'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x61 'a'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x00,0x01,0x80,0x01,0x80,0x3F,0x80,0x61,0x80,0x61,0x80,0x63,0x80,0x3D,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x62 'b'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x6E,0x00,0x73,0x00,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x63,0x00,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 8, // 0x63 'c'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x33,0x60,0x60,0x60,0x60,0x33,0x1E,0x00,0x00,0x00,
+
+ 10, // 0x64 'd'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x1F,0x80,0x31,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x33,0x80,0x1D,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x65 'e'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x33,0x00,0x61,0x80,0x7F,0x80,0x60,0x00,0x60,0x00,0x31,0x80,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 6, // 0x66 'f'
+ 0x00,0x00,0x00,0x1C,0x30,0x30,0x30,0x7C,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x00,0x00,0x00,
+
+ 10, // 0x67 'g'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x80,0x31,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x33,0x80,0x1D,0x80,0x01,0x80,0x03,0x00,0x3E,0x00,
+
+ 10, // 0x68 'h'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x6F,0x00,0x71,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 4, // 0x69 'i'
+ 0x00,0x00,0x00,0x60,0x60,0x00,0x00,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x00,0x00,0x00,
+
+ 6, // 0x6A 'j'
+ 0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x78,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xF0,
+
+ 10, // 0x6B 'k'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x61,0x80,0x63,0x00,0x66,0x00,0x6C,0x00,0x7E,0x00,0x73,0x00,0x61,0x80,0x60,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 4, // 0x6C 'l'
+ 0x00,0x00,0x00,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x00,0x00,0x00,
+
+ 16, // 0x6D 'm'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6F,0x3C,0x71,0xC6,0x61,0x86,0x61,0x86,0x61,0x86,0x61,0x86,0x61,0x86,0x61,0x86,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x6E 'n'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6F,0x00,0x71,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x6F 'o'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x33,0x00,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x33,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x70 'p'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6E,0x00,0x73,0x00,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x63,0x00,0x7E,0x00,0x60,0x00,0x60,0x00,0x60,0x00,
+
+ 10, // 0x71 'q'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x80,0x31,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x33,0x80,0x1D,0x80,0x01,0x80,0x01,0x80,0x01,0x80,
+
+ 7, // 0x72 'r'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6E,0x7E,0x60,0x60,0x60,0x60,0x60,0x60,0x00,0x00,0x00,
+
+ 9, // 0x73 's'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x61,0x00,0x60,0x00,0x7E,0x00,0x3F,0x00,0x03,0x00,0x43,0x00,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 7, // 0x74 't'
+ 0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x7E,0x30,0x30,0x30,0x30,0x30,0x30,0x1E,0x00,0x00,0x00,
+
+ 10, // 0x75 'u'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x63,0x80,0x3D,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x76 'v'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x61,0x80,0x61,0x80,0x33,0x00,0x33,0x00,0x33,0x00,0x1E,0x00,0x1E,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 14, // 0x77 'w'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x63,0x18,0x63,0x18,0x63,0x18,0x37,0xB0,0x34,0xB0,0x3C,0xF0,0x18,0x60,0x18,0x60,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x78 'x'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x61,0x80,0x33,0x00,0x33,0x00,0x1E,0x00,0x1E,0x00,0x33,0x00,0x33,0x00,0x61,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 10, // 0x79 'y'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x61,0x80,0x61,0x80,0x33,0x00,0x33,0x00,0x33,0x00,0x1E,0x00,0x1E,0x00,0x0C,0x00,0x0C,0x00,0x18,0x00,0x18,0x00,
+
+ 9, // 0x7A 'z'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x03,0x00,0x06,0x00,0x0C,0x00,0x18,0x00,0x30,0x00,0x60,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 11, // 0x7B '{'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x18,0x00,0x70,0x00,0x18,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x07,0x80,
+
+ 8, // 0x7C '|'
+ 0x00,0x00,0x00,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
+
+ 11, // 0x7D '}'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x03,0x00,0x01,0xC0,0x03,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x3C,0x00,
+
+ 13, // 0x7E '~'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x10,0x24,0x10,0x42,0x10,0x41,0x20,0x40,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 15, // 0x7F ''
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xF8,0x20,0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x3F,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,
+
+ 0
+ };
+
+}
+
diff --git a/agg/source/agg_gsv_text.cpp b/agg/source/agg_gsv_text.cpp
new file mode 100755
index 000000000000..fd522cd8de08
--- /dev/null
+++ b/agg/source/agg_gsv_text.cpp
@@ -0,0 +1,688 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// Class gsv_text
+//
+//----------------------------------------------------------------------------
+#include <string.h>
+#include <stdio.h>
+#include "agg_gsv_text.h"
+
+
+namespace agg
+{
+ int8u gsv_default_font[] =
+ {
+ 0x40,0x00,0x6c,0x0f,0x15,0x00,0x0e,0x00,0xf9,0xff,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x0d,0x0a,0x0d,0x0a,0x46,0x6f,0x6e,0x74,0x20,0x28,
+ 0x63,0x29,0x20,0x4d,0x69,0x63,0x72,0x6f,0x50,0x72,
+ 0x6f,0x66,0x20,0x32,0x37,0x20,0x53,0x65,0x70,0x74,
+ 0x65,0x6d,0x62,0x2e,0x31,0x39,0x38,0x39,0x00,0x0d,
+ 0x0a,0x0d,0x0a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x02,0x00,0x12,0x00,0x34,0x00,0x46,0x00,0x94,0x00,
+ 0xd0,0x00,0x2e,0x01,0x3e,0x01,0x64,0x01,0x8a,0x01,
+ 0x98,0x01,0xa2,0x01,0xb4,0x01,0xba,0x01,0xc6,0x01,
+ 0xcc,0x01,0xf0,0x01,0xfa,0x01,0x18,0x02,0x38,0x02,
+ 0x44,0x02,0x68,0x02,0x98,0x02,0xa2,0x02,0xde,0x02,
+ 0x0e,0x03,0x24,0x03,0x40,0x03,0x48,0x03,0x52,0x03,
+ 0x5a,0x03,0x82,0x03,0xec,0x03,0xfa,0x03,0x26,0x04,
+ 0x4c,0x04,0x6a,0x04,0x7c,0x04,0x8a,0x04,0xb6,0x04,
+ 0xc4,0x04,0xca,0x04,0xe0,0x04,0xee,0x04,0xf8,0x04,
+ 0x0a,0x05,0x18,0x05,0x44,0x05,0x5e,0x05,0x8e,0x05,
+ 0xac,0x05,0xd6,0x05,0xe0,0x05,0xf6,0x05,0x00,0x06,
+ 0x12,0x06,0x1c,0x06,0x28,0x06,0x36,0x06,0x48,0x06,
+ 0x4e,0x06,0x60,0x06,0x6e,0x06,0x74,0x06,0x84,0x06,
+ 0xa6,0x06,0xc8,0x06,0xe6,0x06,0x08,0x07,0x2c,0x07,
+ 0x3c,0x07,0x68,0x07,0x7c,0x07,0x8c,0x07,0xa2,0x07,
+ 0xb0,0x07,0xb6,0x07,0xd8,0x07,0xec,0x07,0x10,0x08,
+ 0x32,0x08,0x54,0x08,0x64,0x08,0x88,0x08,0x98,0x08,
+ 0xac,0x08,0xb6,0x08,0xc8,0x08,0xd2,0x08,0xe4,0x08,
+ 0xf2,0x08,0x3e,0x09,0x48,0x09,0x94,0x09,0xc2,0x09,
+ 0xc4,0x09,0xd0,0x09,0xe2,0x09,0x04,0x0a,0x0e,0x0a,
+ 0x26,0x0a,0x34,0x0a,0x4a,0x0a,0x66,0x0a,0x70,0x0a,
+ 0x7e,0x0a,0x8e,0x0a,0x9a,0x0a,0xa6,0x0a,0xb4,0x0a,
+ 0xd8,0x0a,0xe2,0x0a,0xf6,0x0a,0x18,0x0b,0x22,0x0b,
+ 0x32,0x0b,0x56,0x0b,0x60,0x0b,0x6e,0x0b,0x7c,0x0b,
+ 0x8a,0x0b,0x9c,0x0b,0x9e,0x0b,0xb2,0x0b,0xc2,0x0b,
+ 0xd8,0x0b,0xf4,0x0b,0x08,0x0c,0x30,0x0c,0x56,0x0c,
+ 0x72,0x0c,0x90,0x0c,0xb2,0x0c,0xce,0x0c,0xe2,0x0c,
+ 0xfe,0x0c,0x10,0x0d,0x26,0x0d,0x36,0x0d,0x42,0x0d,
+ 0x4e,0x0d,0x5c,0x0d,0x78,0x0d,0x8c,0x0d,0x8e,0x0d,
+ 0x90,0x0d,0x92,0x0d,0x94,0x0d,0x96,0x0d,0x98,0x0d,
+ 0x9a,0x0d,0x9c,0x0d,0x9e,0x0d,0xa0,0x0d,0xa2,0x0d,
+ 0xa4,0x0d,0xa6,0x0d,0xa8,0x0d,0xaa,0x0d,0xac,0x0d,
+ 0xae,0x0d,0xb0,0x0d,0xb2,0x0d,0xb4,0x0d,0xb6,0x0d,
+ 0xb8,0x0d,0xba,0x0d,0xbc,0x0d,0xbe,0x0d,0xc0,0x0d,
+ 0xc2,0x0d,0xc4,0x0d,0xc6,0x0d,0xc8,0x0d,0xca,0x0d,
+ 0xcc,0x0d,0xce,0x0d,0xd0,0x0d,0xd2,0x0d,0xd4,0x0d,
+ 0xd6,0x0d,0xd8,0x0d,0xda,0x0d,0xdc,0x0d,0xde,0x0d,
+ 0xe0,0x0d,0xe2,0x0d,0xe4,0x0d,0xe6,0x0d,0xe8,0x0d,
+ 0xea,0x0d,0xec,0x0d,0x0c,0x0e,0x26,0x0e,0x48,0x0e,
+ 0x64,0x0e,0x88,0x0e,0x92,0x0e,0xa6,0x0e,0xb4,0x0e,
+ 0xd0,0x0e,0xee,0x0e,0x02,0x0f,0x16,0x0f,0x26,0x0f,
+ 0x3c,0x0f,0x58,0x0f,0x6c,0x0f,0x6c,0x0f,0x6c,0x0f,
+ 0x6c,0x0f,0x6c,0x0f,0x6c,0x0f,0x6c,0x0f,0x6c,0x0f,
+ 0x6c,0x0f,0x6c,0x0f,0x6c,0x0f,0x6c,0x0f,0x6c,0x0f,
+ 0x6c,0x0f,0x6c,0x0f,0x6c,0x0f,0x6c,0x0f,0x10,0x80,
+ 0x05,0x95,0x00,0x72,0x00,0xfb,0xff,0x7f,0x01,0x7f,
+ 0x01,0x01,0xff,0x01,0x05,0xfe,0x05,0x95,0xff,0x7f,
+ 0x00,0x7a,0x01,0x86,0xff,0x7a,0x01,0x87,0x01,0x7f,
+ 0xfe,0x7a,0x0a,0x87,0xff,0x7f,0x00,0x7a,0x01,0x86,
+ 0xff,0x7a,0x01,0x87,0x01,0x7f,0xfe,0x7a,0x05,0xf2,
+ 0x0b,0x95,0xf9,0x64,0x0d,0x9c,0xf9,0x64,0xfa,0x91,
+ 0x0e,0x00,0xf1,0xfa,0x0e,0x00,0x04,0xfc,0x08,0x99,
+ 0x00,0x63,0x04,0x9d,0x00,0x63,0x04,0x96,0xff,0x7f,
+ 0x01,0x7f,0x01,0x01,0x00,0x01,0xfe,0x02,0xfd,0x01,
+ 0xfc,0x00,0xfd,0x7f,0xfe,0x7e,0x00,0x7e,0x01,0x7e,
+ 0x01,0x7f,0x02,0x7f,0x06,0x7e,0x02,0x7f,0x02,0x7e,
+ 0xf2,0x89,0x02,0x7e,0x02,0x7f,0x06,0x7e,0x02,0x7f,
+ 0x01,0x7f,0x01,0x7e,0x00,0x7c,0xfe,0x7e,0xfd,0x7f,
+ 0xfc,0x00,0xfd,0x01,0xfe,0x02,0x00,0x01,0x01,0x01,
+ 0x01,0x7f,0xff,0x7f,0x10,0xfd,0x15,0x95,0xee,0x6b,
+ 0x05,0x95,0x02,0x7e,0x00,0x7e,0xff,0x7e,0xfe,0x7f,
+ 0xfe,0x00,0xfe,0x02,0x00,0x02,0x01,0x02,0x02,0x01,
+ 0x02,0x00,0x02,0x7f,0x03,0x7f,0x03,0x00,0x03,0x01,
+ 0x02,0x01,0xfc,0xf2,0xfe,0x7f,0xff,0x7e,0x00,0x7e,
+ 0x02,0x7e,0x02,0x00,0x02,0x01,0x01,0x02,0x00,0x02,
+ 0xfe,0x02,0xfe,0x00,0x07,0xf9,0x15,0x8d,0xff,0x7f,
+ 0x01,0x7f,0x01,0x01,0x00,0x01,0xff,0x01,0xff,0x00,
+ 0xff,0x7f,0xff,0x7e,0xfe,0x7b,0xfe,0x7d,0xfe,0x7e,
+ 0xfe,0x7f,0xfd,0x00,0xfd,0x01,0xff,0x02,0x00,0x03,
+ 0x01,0x02,0x06,0x04,0x02,0x02,0x01,0x02,0x00,0x02,
+ 0xff,0x02,0xfe,0x01,0xfe,0x7f,0xff,0x7e,0x00,0x7e,
+ 0x01,0x7d,0x02,0x7d,0x05,0x79,0x02,0x7e,0x03,0x7f,
+ 0x01,0x00,0x01,0x01,0x00,0x01,0xf1,0xfe,0xfe,0x01,
+ 0xff,0x02,0x00,0x03,0x01,0x02,0x02,0x02,0x00,0x86,
+ 0x01,0x7e,0x08,0x75,0x02,0x7e,0x02,0x7f,0x05,0x80,
+ 0x05,0x93,0xff,0x01,0x01,0x01,0x01,0x7f,0x00,0x7e,
+ 0xff,0x7e,0xff,0x7f,0x06,0xf1,0x0b,0x99,0xfe,0x7e,
+ 0xfe,0x7d,0xfe,0x7c,0xff,0x7b,0x00,0x7c,0x01,0x7b,
+ 0x02,0x7c,0x02,0x7d,0x02,0x7e,0xfe,0x9e,0xfe,0x7c,
+ 0xff,0x7d,0xff,0x7b,0x00,0x7c,0x01,0x7b,0x01,0x7d,
+ 0x02,0x7c,0x05,0x85,0x03,0x99,0x02,0x7e,0x02,0x7d,
+ 0x02,0x7c,0x01,0x7b,0x00,0x7c,0xff,0x7b,0xfe,0x7c,
+ 0xfe,0x7d,0xfe,0x7e,0x02,0x9e,0x02,0x7c,0x01,0x7d,
+ 0x01,0x7b,0x00,0x7c,0xff,0x7b,0xff,0x7d,0xfe,0x7c,
+ 0x09,0x85,0x08,0x95,0x00,0x74,0xfb,0x89,0x0a,0x7a,
+ 0x00,0x86,0xf6,0x7a,0x0d,0xf4,0x0d,0x92,0x00,0x6e,
+ 0xf7,0x89,0x12,0x00,0x04,0xf7,0x06,0x81,0xff,0x7f,
+ 0xff,0x01,0x01,0x01,0x01,0x7f,0x00,0x7e,0xff,0x7e,
+ 0xff,0x7f,0x06,0x84,0x04,0x89,0x12,0x00,0x04,0xf7,
+ 0x05,0x82,0xff,0x7f,0x01,0x7f,0x01,0x01,0xff,0x01,
+ 0x05,0xfe,0x00,0xfd,0x0e,0x18,0x00,0xeb,0x09,0x95,
+ 0xfd,0x7f,0xfe,0x7d,0xff,0x7b,0x00,0x7d,0x01,0x7b,
+ 0x02,0x7d,0x03,0x7f,0x02,0x00,0x03,0x01,0x02,0x03,
+ 0x01,0x05,0x00,0x03,0xff,0x05,0xfe,0x03,0xfd,0x01,
+ 0xfe,0x00,0x0b,0xeb,0x06,0x91,0x02,0x01,0x03,0x03,
+ 0x00,0x6b,0x09,0x80,0x04,0x90,0x00,0x01,0x01,0x02,
+ 0x01,0x01,0x02,0x01,0x04,0x00,0x02,0x7f,0x01,0x7f,
+ 0x01,0x7e,0x00,0x7e,0xff,0x7e,0xfe,0x7d,0xf6,0x76,
+ 0x0e,0x00,0x03,0x80,0x05,0x95,0x0b,0x00,0xfa,0x78,
+ 0x03,0x00,0x02,0x7f,0x01,0x7f,0x01,0x7d,0x00,0x7e,
+ 0xff,0x7d,0xfe,0x7e,0xfd,0x7f,0xfd,0x00,0xfd,0x01,
+ 0xff,0x01,0xff,0x02,0x11,0xfc,0x0d,0x95,0xf6,0x72,
+ 0x0f,0x00,0xfb,0x8e,0x00,0x6b,0x07,0x80,0x0f,0x95,
+ 0xf6,0x00,0xff,0x77,0x01,0x01,0x03,0x01,0x03,0x00,
+ 0x03,0x7f,0x02,0x7e,0x01,0x7d,0x00,0x7e,0xff,0x7d,
+ 0xfe,0x7e,0xfd,0x7f,0xfd,0x00,0xfd,0x01,0xff,0x01,
+ 0xff,0x02,0x11,0xfc,0x10,0x92,0xff,0x02,0xfd,0x01,
+ 0xfe,0x00,0xfd,0x7f,0xfe,0x7d,0xff,0x7b,0x00,0x7b,
+ 0x01,0x7c,0x02,0x7e,0x03,0x7f,0x01,0x00,0x03,0x01,
+ 0x02,0x02,0x01,0x03,0x00,0x01,0xff,0x03,0xfe,0x02,
+ 0xfd,0x01,0xff,0x00,0xfd,0x7f,0xfe,0x7e,0xff,0x7d,
+ 0x10,0xf9,0x11,0x95,0xf6,0x6b,0xfc,0x95,0x0e,0x00,
+ 0x03,0xeb,0x08,0x95,0xfd,0x7f,0xff,0x7e,0x00,0x7e,
+ 0x01,0x7e,0x02,0x7f,0x04,0x7f,0x03,0x7f,0x02,0x7e,
+ 0x01,0x7e,0x00,0x7d,0xff,0x7e,0xff,0x7f,0xfd,0x7f,
+ 0xfc,0x00,0xfd,0x01,0xff,0x01,0xff,0x02,0x00,0x03,
+ 0x01,0x02,0x02,0x02,0x03,0x01,0x04,0x01,0x02,0x01,
+ 0x01,0x02,0x00,0x02,0xff,0x02,0xfd,0x01,0xfc,0x00,
+ 0x0c,0xeb,0x10,0x8e,0xff,0x7d,0xfe,0x7e,0xfd,0x7f,
+ 0xff,0x00,0xfd,0x01,0xfe,0x02,0xff,0x03,0x00,0x01,
+ 0x01,0x03,0x02,0x02,0x03,0x01,0x01,0x00,0x03,0x7f,
+ 0x02,0x7e,0x01,0x7c,0x00,0x7b,0xff,0x7b,0xfe,0x7d,
+ 0xfd,0x7f,0xfe,0x00,0xfd,0x01,0xff,0x02,0x10,0xfd,
+ 0x05,0x8e,0xff,0x7f,0x01,0x7f,0x01,0x01,0xff,0x01,
+ 0x00,0xf4,0xff,0x7f,0x01,0x7f,0x01,0x01,0xff,0x01,
+ 0x05,0xfe,0x05,0x8e,0xff,0x7f,0x01,0x7f,0x01,0x01,
+ 0xff,0x01,0x01,0xf3,0xff,0x7f,0xff,0x01,0x01,0x01,
+ 0x01,0x7f,0x00,0x7e,0xff,0x7e,0xff,0x7f,0x06,0x84,
+ 0x14,0x92,0xf0,0x77,0x10,0x77,0x04,0x80,0x04,0x8c,
+ 0x12,0x00,0xee,0xfa,0x12,0x00,0x04,0xfa,0x04,0x92,
+ 0x10,0x77,0xf0,0x77,0x14,0x80,0x03,0x90,0x00,0x01,
+ 0x01,0x02,0x01,0x01,0x02,0x01,0x04,0x00,0x02,0x7f,
+ 0x01,0x7f,0x01,0x7e,0x00,0x7e,0xff,0x7e,0xff,0x7f,
+ 0xfc,0x7e,0x00,0x7d,0x00,0xfb,0xff,0x7f,0x01,0x7f,
+ 0x01,0x01,0xff,0x01,0x09,0xfe,0x12,0x8d,0xff,0x02,
+ 0xfe,0x01,0xfd,0x00,0xfe,0x7f,0xff,0x7f,0xff,0x7d,
+ 0x00,0x7d,0x01,0x7e,0x02,0x7f,0x03,0x00,0x02,0x01,
+ 0x01,0x02,0xfb,0x88,0xfe,0x7e,0xff,0x7d,0x00,0x7d,
+ 0x01,0x7e,0x01,0x7f,0x07,0x8b,0xff,0x78,0x00,0x7e,
+ 0x02,0x7f,0x02,0x00,0x02,0x02,0x01,0x03,0x00,0x02,
+ 0xff,0x03,0xff,0x02,0xfe,0x02,0xfe,0x01,0xfd,0x01,
+ 0xfd,0x00,0xfd,0x7f,0xfe,0x7f,0xfe,0x7e,0xff,0x7e,
+ 0xff,0x7d,0x00,0x7d,0x01,0x7d,0x01,0x7e,0x02,0x7e,
+ 0x02,0x7f,0x03,0x7f,0x03,0x00,0x03,0x01,0x02,0x01,
+ 0x01,0x01,0xfe,0x8d,0xff,0x78,0x00,0x7e,0x01,0x7f,
+ 0x08,0xfb,0x09,0x95,0xf8,0x6b,0x08,0x95,0x08,0x6b,
+ 0xf3,0x87,0x0a,0x00,0x04,0xf9,0x04,0x95,0x00,0x6b,
+ 0x00,0x95,0x09,0x00,0x03,0x7f,0x01,0x7f,0x01,0x7e,
+ 0x00,0x7e,0xff,0x7e,0xff,0x7f,0xfd,0x7f,0xf7,0x80,
+ 0x09,0x00,0x03,0x7f,0x01,0x7f,0x01,0x7e,0x00,0x7d,
+ 0xff,0x7e,0xff,0x7f,0xfd,0x7f,0xf7,0x00,0x11,0x80,
+ 0x12,0x90,0xff,0x02,0xfe,0x02,0xfe,0x01,0xfc,0x00,
+ 0xfe,0x7f,0xfe,0x7e,0xff,0x7e,0xff,0x7d,0x00,0x7b,
+ 0x01,0x7d,0x01,0x7e,0x02,0x7e,0x02,0x7f,0x04,0x00,
+ 0x02,0x01,0x02,0x02,0x01,0x02,0x03,0xfb,0x04,0x95,
+ 0x00,0x6b,0x00,0x95,0x07,0x00,0x03,0x7f,0x02,0x7e,
+ 0x01,0x7e,0x01,0x7d,0x00,0x7b,0xff,0x7d,0xff,0x7e,
+ 0xfe,0x7e,0xfd,0x7f,0xf9,0x00,0x11,0x80,0x04,0x95,
+ 0x00,0x6b,0x00,0x95,0x0d,0x00,0xf3,0xf6,0x08,0x00,
+ 0xf8,0xf5,0x0d,0x00,0x02,0x80,0x04,0x95,0x00,0x6b,
+ 0x00,0x95,0x0d,0x00,0xf3,0xf6,0x08,0x00,0x06,0xf5,
+ 0x12,0x90,0xff,0x02,0xfe,0x02,0xfe,0x01,0xfc,0x00,
+ 0xfe,0x7f,0xfe,0x7e,0xff,0x7e,0xff,0x7d,0x00,0x7b,
+ 0x01,0x7d,0x01,0x7e,0x02,0x7e,0x02,0x7f,0x04,0x00,
+ 0x02,0x01,0x02,0x02,0x01,0x02,0x00,0x03,0xfb,0x80,
+ 0x05,0x00,0x03,0xf8,0x04,0x95,0x00,0x6b,0x0e,0x95,
+ 0x00,0x6b,0xf2,0x8b,0x0e,0x00,0x04,0xf5,0x04,0x95,
+ 0x00,0x6b,0x04,0x80,0x0c,0x95,0x00,0x70,0xff,0x7d,
+ 0xff,0x7f,0xfe,0x7f,0xfe,0x00,0xfe,0x01,0xff,0x01,
+ 0xff,0x03,0x00,0x02,0x0e,0xf9,0x04,0x95,0x00,0x6b,
+ 0x0e,0x95,0xf2,0x72,0x05,0x85,0x09,0x74,0x03,0x80,
+ 0x04,0x95,0x00,0x6b,0x00,0x80,0x0c,0x00,0x01,0x80,
+ 0x04,0x95,0x00,0x6b,0x00,0x95,0x08,0x6b,0x08,0x95,
+ 0xf8,0x6b,0x08,0x95,0x00,0x6b,0x04,0x80,0x04,0x95,
+ 0x00,0x6b,0x00,0x95,0x0e,0x6b,0x00,0x95,0x00,0x6b,
+ 0x04,0x80,0x09,0x95,0xfe,0x7f,0xfe,0x7e,0xff,0x7e,
+ 0xff,0x7d,0x00,0x7b,0x01,0x7d,0x01,0x7e,0x02,0x7e,
+ 0x02,0x7f,0x04,0x00,0x02,0x01,0x02,0x02,0x01,0x02,
+ 0x01,0x03,0x00,0x05,0xff,0x03,0xff,0x02,0xfe,0x02,
+ 0xfe,0x01,0xfc,0x00,0x0d,0xeb,0x04,0x95,0x00,0x6b,
+ 0x00,0x95,0x09,0x00,0x03,0x7f,0x01,0x7f,0x01,0x7e,
+ 0x00,0x7d,0xff,0x7e,0xff,0x7f,0xfd,0x7f,0xf7,0x00,
+ 0x11,0xf6,0x09,0x95,0xfe,0x7f,0xfe,0x7e,0xff,0x7e,
+ 0xff,0x7d,0x00,0x7b,0x01,0x7d,0x01,0x7e,0x02,0x7e,
+ 0x02,0x7f,0x04,0x00,0x02,0x01,0x02,0x02,0x01,0x02,
+ 0x01,0x03,0x00,0x05,0xff,0x03,0xff,0x02,0xfe,0x02,
+ 0xfe,0x01,0xfc,0x00,0x03,0xef,0x06,0x7a,0x04,0x82,
+ 0x04,0x95,0x00,0x6b,0x00,0x95,0x09,0x00,0x03,0x7f,
+ 0x01,0x7f,0x01,0x7e,0x00,0x7e,0xff,0x7e,0xff,0x7f,
+ 0xfd,0x7f,0xf7,0x00,0x07,0x80,0x07,0x75,0x03,0x80,
+ 0x11,0x92,0xfe,0x02,0xfd,0x01,0xfc,0x00,0xfd,0x7f,
+ 0xfe,0x7e,0x00,0x7e,0x01,0x7e,0x01,0x7f,0x02,0x7f,
+ 0x06,0x7e,0x02,0x7f,0x01,0x7f,0x01,0x7e,0x00,0x7d,
+ 0xfe,0x7e,0xfd,0x7f,0xfc,0x00,0xfd,0x01,0xfe,0x02,
+ 0x11,0xfd,0x08,0x95,0x00,0x6b,0xf9,0x95,0x0e,0x00,
+ 0x01,0xeb,0x04,0x95,0x00,0x71,0x01,0x7d,0x02,0x7e,
+ 0x03,0x7f,0x02,0x00,0x03,0x01,0x02,0x02,0x01,0x03,
+ 0x00,0x0f,0x04,0xeb,0x01,0x95,0x08,0x6b,0x08,0x95,
+ 0xf8,0x6b,0x09,0x80,0x02,0x95,0x05,0x6b,0x05,0x95,
+ 0xfb,0x6b,0x05,0x95,0x05,0x6b,0x05,0x95,0xfb,0x6b,
+ 0x07,0x80,0x03,0x95,0x0e,0x6b,0x00,0x95,0xf2,0x6b,
+ 0x11,0x80,0x01,0x95,0x08,0x76,0x00,0x75,0x08,0x95,
+ 0xf8,0x76,0x09,0xf5,0x11,0x95,0xf2,0x6b,0x00,0x95,
+ 0x0e,0x00,0xf2,0xeb,0x0e,0x00,0x03,0x80,0x03,0x93,
+ 0x00,0x6c,0x01,0x94,0x00,0x6c,0xff,0x94,0x05,0x00,
+ 0xfb,0xec,0x05,0x00,0x02,0x81,0x00,0x95,0x0e,0x68,
+ 0x00,0x83,0x06,0x93,0x00,0x6c,0x01,0x94,0x00,0x6c,
+ 0xfb,0x94,0x05,0x00,0xfb,0xec,0x05,0x00,0x03,0x81,
+ 0x03,0x87,0x08,0x05,0x08,0x7b,0xf0,0x80,0x08,0x04,
+ 0x08,0x7c,0x03,0xf9,0x01,0x80,0x10,0x00,0x01,0x80,
+ 0x06,0x95,0xff,0x7f,0xff,0x7e,0x00,0x7e,0x01,0x7f,
+ 0x01,0x01,0xff,0x01,0x05,0xef,0x0f,0x8e,0x00,0x72,
+ 0x00,0x8b,0xfe,0x02,0xfe,0x01,0xfd,0x00,0xfe,0x7f,
+ 0xfe,0x7e,0xff,0x7d,0x00,0x7e,0x01,0x7d,0x02,0x7e,
+ 0x02,0x7f,0x03,0x00,0x02,0x01,0x02,0x02,0x04,0xfd,
+ 0x04,0x95,0x00,0x6b,0x00,0x8b,0x02,0x02,0x02,0x01,
+ 0x03,0x00,0x02,0x7f,0x02,0x7e,0x01,0x7d,0x00,0x7e,
+ 0xff,0x7d,0xfe,0x7e,0xfe,0x7f,0xfd,0x00,0xfe,0x01,
+ 0xfe,0x02,0x0f,0xfd,0x0f,0x8b,0xfe,0x02,0xfe,0x01,
+ 0xfd,0x00,0xfe,0x7f,0xfe,0x7e,0xff,0x7d,0x00,0x7e,
+ 0x01,0x7d,0x02,0x7e,0x02,0x7f,0x03,0x00,0x02,0x01,
+ 0x02,0x02,0x03,0xfd,0x0f,0x95,0x00,0x6b,0x00,0x8b,
+ 0xfe,0x02,0xfe,0x01,0xfd,0x00,0xfe,0x7f,0xfe,0x7e,
+ 0xff,0x7d,0x00,0x7e,0x01,0x7d,0x02,0x7e,0x02,0x7f,
+ 0x03,0x00,0x02,0x01,0x02,0x02,0x04,0xfd,0x03,0x88,
+ 0x0c,0x00,0x00,0x02,0xff,0x02,0xff,0x01,0xfe,0x01,
+ 0xfd,0x00,0xfe,0x7f,0xfe,0x7e,0xff,0x7d,0x00,0x7e,
+ 0x01,0x7d,0x02,0x7e,0x02,0x7f,0x03,0x00,0x02,0x01,
+ 0x02,0x02,0x03,0xfd,0x0a,0x95,0xfe,0x00,0xfe,0x7f,
+ 0xff,0x7d,0x00,0x6f,0xfd,0x8e,0x07,0x00,0x03,0xf2,
+ 0x0f,0x8e,0x00,0x70,0xff,0x7d,0xff,0x7f,0xfe,0x7f,
+ 0xfd,0x00,0xfe,0x01,0x09,0x91,0xfe,0x02,0xfe,0x01,
+ 0xfd,0x00,0xfe,0x7f,0xfe,0x7e,0xff,0x7d,0x00,0x7e,
+ 0x01,0x7d,0x02,0x7e,0x02,0x7f,0x03,0x00,0x02,0x01,
+ 0x02,0x02,0x04,0xfd,0x04,0x95,0x00,0x6b,0x00,0x8a,
+ 0x03,0x03,0x02,0x01,0x03,0x00,0x02,0x7f,0x01,0x7d,
+ 0x00,0x76,0x04,0x80,0x03,0x95,0x01,0x7f,0x01,0x01,
+ 0xff,0x01,0xff,0x7f,0x01,0xf9,0x00,0x72,0x04,0x80,
+ 0x05,0x95,0x01,0x7f,0x01,0x01,0xff,0x01,0xff,0x7f,
+ 0x01,0xf9,0x00,0x6f,0xff,0x7d,0xfe,0x7f,0xfe,0x00,
+ 0x09,0x87,0x04,0x95,0x00,0x6b,0x0a,0x8e,0xf6,0x76,
+ 0x04,0x84,0x07,0x78,0x02,0x80,0x04,0x95,0x00,0x6b,
+ 0x04,0x80,0x04,0x8e,0x00,0x72,0x00,0x8a,0x03,0x03,
+ 0x02,0x01,0x03,0x00,0x02,0x7f,0x01,0x7d,0x00,0x76,
+ 0x00,0x8a,0x03,0x03,0x02,0x01,0x03,0x00,0x02,0x7f,
+ 0x01,0x7d,0x00,0x76,0x04,0x80,0x04,0x8e,0x00,0x72,
+ 0x00,0x8a,0x03,0x03,0x02,0x01,0x03,0x00,0x02,0x7f,
+ 0x01,0x7d,0x00,0x76,0x04,0x80,0x08,0x8e,0xfe,0x7f,
+ 0xfe,0x7e,0xff,0x7d,0x00,0x7e,0x01,0x7d,0x02,0x7e,
+ 0x02,0x7f,0x03,0x00,0x02,0x01,0x02,0x02,0x01,0x03,
+ 0x00,0x02,0xff,0x03,0xfe,0x02,0xfe,0x01,0xfd,0x00,
+ 0x0b,0xf2,0x04,0x8e,0x00,0x6b,0x00,0x92,0x02,0x02,
+ 0x02,0x01,0x03,0x00,0x02,0x7f,0x02,0x7e,0x01,0x7d,
+ 0x00,0x7e,0xff,0x7d,0xfe,0x7e,0xfe,0x7f,0xfd,0x00,
+ 0xfe,0x01,0xfe,0x02,0x0f,0xfd,0x0f,0x8e,0x00,0x6b,
+ 0x00,0x92,0xfe,0x02,0xfe,0x01,0xfd,0x00,0xfe,0x7f,
+ 0xfe,0x7e,0xff,0x7d,0x00,0x7e,0x01,0x7d,0x02,0x7e,
+ 0x02,0x7f,0x03,0x00,0x02,0x01,0x02,0x02,0x04,0xfd,
+ 0x04,0x8e,0x00,0x72,0x00,0x88,0x01,0x03,0x02,0x02,
+ 0x02,0x01,0x03,0x00,0x01,0xf2,0x0e,0x8b,0xff,0x02,
+ 0xfd,0x01,0xfd,0x00,0xfd,0x7f,0xff,0x7e,0x01,0x7e,
+ 0x02,0x7f,0x05,0x7f,0x02,0x7f,0x01,0x7e,0x00,0x7f,
+ 0xff,0x7e,0xfd,0x7f,0xfd,0x00,0xfd,0x01,0xff,0x02,
+ 0x0e,0xfd,0x05,0x95,0x00,0x6f,0x01,0x7d,0x02,0x7f,
+ 0x02,0x00,0xf8,0x8e,0x07,0x00,0x03,0xf2,0x04,0x8e,
+ 0x00,0x76,0x01,0x7d,0x02,0x7f,0x03,0x00,0x02,0x01,
+ 0x03,0x03,0x00,0x8a,0x00,0x72,0x04,0x80,0x02,0x8e,
+ 0x06,0x72,0x06,0x8e,0xfa,0x72,0x08,0x80,0x03,0x8e,
+ 0x04,0x72,0x04,0x8e,0xfc,0x72,0x04,0x8e,0x04,0x72,
+ 0x04,0x8e,0xfc,0x72,0x07,0x80,0x03,0x8e,0x0b,0x72,
+ 0x00,0x8e,0xf5,0x72,0x0e,0x80,0x02,0x8e,0x06,0x72,
+ 0x06,0x8e,0xfa,0x72,0xfe,0x7c,0xfe,0x7e,0xfe,0x7f,
+ 0xff,0x00,0x0f,0x87,0x0e,0x8e,0xf5,0x72,0x00,0x8e,
+ 0x0b,0x00,0xf5,0xf2,0x0b,0x00,0x03,0x80,0x09,0x99,
+ 0xfe,0x7f,0xff,0x7f,0xff,0x7e,0x00,0x7e,0x01,0x7e,
+ 0x01,0x7f,0x01,0x7e,0x00,0x7e,0xfe,0x7e,0x01,0x8e,
+ 0xff,0x7e,0x00,0x7e,0x01,0x7e,0x01,0x7f,0x01,0x7e,
+ 0x00,0x7e,0xff,0x7e,0xfc,0x7e,0x04,0x7e,0x01,0x7e,
+ 0x00,0x7e,0xff,0x7e,0xff,0x7f,0xff,0x7e,0x00,0x7e,
+ 0x01,0x7e,0xff,0x8e,0x02,0x7e,0x00,0x7e,0xff,0x7e,
+ 0xff,0x7f,0xff,0x7e,0x00,0x7e,0x01,0x7e,0x01,0x7f,
+ 0x02,0x7f,0x05,0x87,0x04,0x95,0x00,0x77,0x00,0xfd,
+ 0x00,0x77,0x04,0x80,0x05,0x99,0x02,0x7f,0x01,0x7f,
+ 0x01,0x7e,0x00,0x7e,0xff,0x7e,0xff,0x7f,0xff,0x7e,
+ 0x00,0x7e,0x02,0x7e,0xff,0x8e,0x01,0x7e,0x00,0x7e,
+ 0xff,0x7e,0xff,0x7f,0xff,0x7e,0x00,0x7e,0x01,0x7e,
+ 0x04,0x7e,0xfc,0x7e,0xff,0x7e,0x00,0x7e,0x01,0x7e,
+ 0x01,0x7f,0x01,0x7e,0x00,0x7e,0xff,0x7e,0x01,0x8e,
+ 0xfe,0x7e,0x00,0x7e,0x01,0x7e,0x01,0x7f,0x01,0x7e,
+ 0x00,0x7e,0xff,0x7e,0xff,0x7f,0xfe,0x7f,0x09,0x87,
+ 0x03,0x86,0x00,0x02,0x01,0x03,0x02,0x01,0x02,0x00,
+ 0x02,0x7f,0x04,0x7d,0x02,0x7f,0x02,0x00,0x02,0x01,
+ 0x01,0x02,0xee,0xfe,0x01,0x02,0x02,0x01,0x02,0x00,
+ 0x02,0x7f,0x04,0x7d,0x02,0x7f,0x02,0x00,0x02,0x01,
+ 0x01,0x03,0x00,0x02,0x03,0xf4,0x10,0x80,0x03,0x80,
+ 0x07,0x15,0x08,0x6b,0xfe,0x85,0xf5,0x00,0x10,0xfb,
+ 0x0d,0x95,0xf6,0x00,0x00,0x6b,0x0a,0x00,0x02,0x02,
+ 0x00,0x08,0xfe,0x02,0xf6,0x00,0x0e,0xf4,0x03,0x80,
+ 0x00,0x15,0x0a,0x00,0x02,0x7e,0x00,0x7e,0x00,0x7d,
+ 0x00,0x7e,0xfe,0x7f,0xf6,0x00,0x0a,0x80,0x02,0x7e,
+ 0x01,0x7e,0x00,0x7d,0xff,0x7d,0xfe,0x7f,0xf6,0x00,
+ 0x10,0x80,0x03,0x80,0x00,0x15,0x0c,0x00,0xff,0x7e,
+ 0x03,0xed,0x03,0xfd,0x00,0x03,0x02,0x00,0x00,0x12,
+ 0x02,0x03,0x0a,0x00,0x00,0x6b,0x02,0x00,0x00,0x7d,
+ 0xfe,0x83,0xf4,0x00,0x11,0x80,0x0f,0x80,0xf4,0x00,
+ 0x00,0x15,0x0c,0x00,0xff,0xf6,0xf5,0x00,0x0f,0xf5,
+ 0x04,0x95,0x07,0x76,0x00,0x0a,0x07,0x80,0xf9,0x76,
+ 0x00,0x75,0xf8,0x80,0x07,0x0c,0x09,0xf4,0xf9,0x0c,
+ 0x09,0xf4,0x03,0x92,0x02,0x03,0x07,0x00,0x03,0x7d,
+ 0x00,0x7b,0xfc,0x7e,0x04,0x7d,0x00,0x7a,0xfd,0x7e,
+ 0xf9,0x00,0xfe,0x02,0x06,0x89,0x02,0x00,0x06,0xf5,
+ 0x03,0x95,0x00,0x6b,0x0c,0x15,0x00,0x6b,0x02,0x80,
+ 0x03,0x95,0x00,0x6b,0x0c,0x15,0x00,0x6b,0xf8,0x96,
+ 0x03,0x00,0x07,0xea,0x03,0x80,0x00,0x15,0x0c,0x80,
+ 0xf7,0x76,0xfd,0x00,0x03,0x80,0x0a,0x75,0x03,0x80,
+ 0x03,0x80,0x07,0x13,0x02,0x02,0x03,0x00,0x00,0x6b,
+ 0x02,0x80,0x03,0x80,0x00,0x15,0x09,0x6b,0x09,0x15,
+ 0x00,0x6b,0x03,0x80,0x03,0x80,0x00,0x15,0x00,0xf6,
+ 0x0d,0x00,0x00,0x8a,0x00,0x6b,0x03,0x80,0x07,0x80,
+ 0xfd,0x00,0xff,0x03,0x00,0x04,0x00,0x07,0x00,0x04,
+ 0x01,0x02,0x03,0x01,0x06,0x00,0x03,0x7f,0x01,0x7e,
+ 0x01,0x7c,0x00,0x79,0xff,0x7c,0xff,0x7d,0xfd,0x00,
+ 0xfa,0x00,0x0e,0x80,0x03,0x80,0x00,0x15,0x0c,0x00,
+ 0x00,0x6b,0x02,0x80,0x03,0x80,0x00,0x15,0x0a,0x00,
+ 0x02,0x7f,0x01,0x7d,0x00,0x7b,0xff,0x7e,0xfe,0x7f,
+ 0xf6,0x00,0x10,0xf7,0x11,0x8f,0xff,0x03,0xff,0x02,
+ 0xfe,0x01,0xfa,0x00,0xfd,0x7f,0xff,0x7e,0x00,0x7c,
+ 0x00,0x79,0x00,0x7b,0x01,0x7e,0x03,0x00,0x06,0x00,
+ 0x02,0x00,0x01,0x03,0x01,0x02,0x03,0xfb,0x03,0x95,
+ 0x0c,0x00,0xfa,0x80,0x00,0x6b,0x09,0x80,0x03,0x95,
+ 0x00,0x77,0x06,0x7a,0x06,0x06,0x00,0x09,0xfa,0xf1,
+ 0xfa,0x7a,0x0e,0x80,0x03,0x87,0x00,0x0b,0x02,0x02,
+ 0x03,0x00,0x02,0x7e,0x01,0x02,0x04,0x00,0x02,0x7e,
+ 0x00,0x75,0xfe,0x7e,0xfc,0x00,0xff,0x01,0xfe,0x7f,
+ 0xfd,0x00,0xfe,0x02,0x07,0x8e,0x00,0x6b,0x09,0x80,
+ 0x03,0x80,0x0e,0x15,0xf2,0x80,0x0e,0x6b,0x03,0x80,
+ 0x03,0x95,0x00,0x6b,0x0e,0x00,0x00,0x7d,0xfe,0x98,
+ 0x00,0x6b,0x05,0x80,0x03,0x95,0x00,0x75,0x02,0x7d,
+ 0x0a,0x00,0x00,0x8e,0x00,0x6b,0x02,0x80,0x03,0x95,
+ 0x00,0x6b,0x10,0x00,0x00,0x15,0xf8,0x80,0x00,0x6b,
+ 0x0a,0x80,0x03,0x95,0x00,0x6b,0x10,0x00,0x00,0x15,
+ 0xf8,0x80,0x00,0x6b,0x0a,0x00,0x00,0x7d,0x02,0x83,
+ 0x10,0x80,0x03,0x95,0x00,0x6b,0x09,0x00,0x03,0x02,
+ 0x00,0x08,0xfd,0x02,0xf7,0x00,0x0e,0x89,0x00,0x6b,
+ 0x03,0x80,0x03,0x95,0x00,0x6b,0x09,0x00,0x03,0x02,
+ 0x00,0x08,0xfd,0x02,0xf7,0x00,0x0e,0xf4,0x03,0x92,
+ 0x02,0x03,0x07,0x00,0x03,0x7d,0x00,0x70,0xfd,0x7e,
+ 0xf9,0x00,0xfe,0x02,0x03,0x89,0x09,0x00,0x02,0xf5,
+ 0x03,0x80,0x00,0x15,0x00,0xf5,0x07,0x00,0x00,0x08,
+ 0x02,0x03,0x06,0x00,0x02,0x7d,0x00,0x70,0xfe,0x7e,
+ 0xfa,0x00,0xfe,0x02,0x00,0x08,0x0c,0xf6,0x0f,0x80,
+ 0x00,0x15,0xf6,0x00,0xfe,0x7d,0x00,0x79,0x02,0x7e,
+ 0x0a,0x00,0xf4,0xf7,0x07,0x09,0x07,0xf7,0x03,0x8c,
+ 0x01,0x02,0x01,0x01,0x05,0x00,0x02,0x7f,0x01,0x7e,
+ 0x00,0x74,0x00,0x86,0xff,0x01,0xfe,0x01,0xfb,0x00,
+ 0xff,0x7f,0xff,0x7f,0x00,0x7c,0x01,0x7e,0x01,0x00,
+ 0x05,0x00,0x02,0x00,0x01,0x02,0x03,0xfe,0x04,0x8e,
+ 0x02,0x01,0x04,0x00,0x02,0x7f,0x01,0x7e,0x00,0x77,
+ 0xff,0x7e,0xfe,0x7f,0xfc,0x00,0xfe,0x01,0xff,0x02,
+ 0x00,0x09,0x01,0x02,0x02,0x02,0x03,0x01,0x02,0x01,
+ 0x01,0x01,0x01,0x02,0x02,0xeb,0x03,0x80,0x00,0x15,
+ 0x03,0x00,0x02,0x7e,0x00,0x7b,0xfe,0x7e,0xfd,0x00,
+ 0x03,0x80,0x04,0x00,0x03,0x7e,0x00,0x78,0xfd,0x7e,
+ 0xf9,0x00,0x0c,0x80,0x03,0x8c,0x02,0x02,0x02,0x01,
+ 0x03,0x00,0x02,0x7f,0x01,0x7d,0xfe,0x7e,0xf9,0x7d,
+ 0xff,0x7e,0x00,0x7d,0x03,0x7f,0x02,0x00,0x03,0x01,
+ 0x02,0x01,0x02,0xfe,0x0d,0x8c,0xff,0x02,0xfe,0x01,
+ 0xfc,0x00,0xfe,0x7f,0xff,0x7e,0x00,0x77,0x01,0x7e,
+ 0x02,0x7f,0x04,0x00,0x02,0x01,0x01,0x02,0x00,0x0f,
+ 0xff,0x02,0xfe,0x01,0xf9,0x00,0x0c,0xeb,0x03,0x88,
+ 0x0a,0x00,0x00,0x02,0x00,0x03,0xfe,0x02,0xfa,0x00,
+ 0xff,0x7e,0xff,0x7d,0x00,0x7b,0x01,0x7c,0x01,0x7f,
+ 0x06,0x00,0x02,0x02,0x03,0xfe,0x03,0x8f,0x06,0x77,
+ 0x06,0x09,0xfa,0x80,0x00,0x71,0xff,0x87,0xfb,0x79,
+ 0x07,0x87,0x05,0x79,0x02,0x80,0x03,0x8d,0x02,0x02,
+ 0x06,0x00,0x02,0x7e,0x00,0x7d,0xfc,0x7d,0x04,0x7e,
+ 0x00,0x7d,0xfe,0x7e,0xfa,0x00,0xfe,0x02,0x04,0x85,
+ 0x02,0x00,0x06,0xf9,0x03,0x8f,0x00,0x73,0x01,0x7e,
+ 0x07,0x00,0x02,0x02,0x00,0x0d,0x00,0xf3,0x01,0x7e,
+ 0x03,0x80,0x03,0x8f,0x00,0x73,0x01,0x7e,0x07,0x00,
+ 0x02,0x02,0x00,0x0d,0x00,0xf3,0x01,0x7e,0xf8,0x90,
+ 0x03,0x00,0x08,0xf0,0x03,0x80,0x00,0x15,0x00,0xf3,
+ 0x02,0x00,0x06,0x07,0xfa,0xf9,0x07,0x78,0x03,0x80,
+ 0x03,0x80,0x04,0x0c,0x02,0x03,0x04,0x00,0x00,0x71,
+ 0x02,0x80,0x03,0x80,0x00,0x0f,0x06,0x77,0x06,0x09,
+ 0x00,0x71,0x02,0x80,0x03,0x80,0x00,0x0f,0x0a,0xf1,
+ 0x00,0x0f,0xf6,0xf8,0x0a,0x00,0x02,0xf9,0x05,0x80,
+ 0xff,0x01,0xff,0x04,0x00,0x05,0x01,0x03,0x01,0x02,
+ 0x06,0x00,0x02,0x7e,0x00,0x7d,0x00,0x7b,0x00,0x7c,
+ 0xfe,0x7f,0xfa,0x00,0x0b,0x80,0x03,0x80,0x00,0x0f,
+ 0x00,0xfb,0x01,0x03,0x01,0x02,0x05,0x00,0x02,0x7e,
+ 0x01,0x7d,0x00,0x76,0x03,0x80,0x10,0x80,0x10,0x80,
+ 0x10,0x80,0x10,0x80,0x10,0x80,0x10,0x80,0x10,0x80,
+ 0x10,0x80,0x10,0x80,0x10,0x80,0x10,0x80,0x10,0x80,
+ 0x10,0x80,0x10,0x80,0x10,0x80,0x10,0x80,0x10,0x80,
+ 0x10,0x80,0x10,0x80,0x10,0x80,0x10,0x80,0x10,0x80,
+ 0x10,0x80,0x10,0x80,0x10,0x80,0x10,0x80,0x10,0x80,
+ 0x10,0x80,0x10,0x80,0x10,0x80,0x10,0x80,0x10,0x80,
+ 0x10,0x80,0x10,0x80,0x10,0x80,0x10,0x80,0x10,0x80,
+ 0x10,0x80,0x10,0x80,0x10,0x80,0x10,0x80,0x10,0x80,
+ 0x10,0x80,0x10,0x80,0x10,0x80,0x10,0x80,0x10,0x80,
+ 0x10,0x80,0x0a,0x8f,0x02,0x7f,0x01,0x7e,0x00,0x76,
+ 0xff,0x7f,0xfe,0x7f,0xfb,0x00,0xff,0x01,0xff,0x01,
+ 0x00,0x0a,0x01,0x02,0x01,0x01,0x05,0x00,0xf9,0x80,
+ 0x00,0x6b,0x0c,0x86,0x0d,0x8a,0xff,0x03,0xfe,0x02,
+ 0xfb,0x00,0xff,0x7e,0xff,0x7d,0x00,0x7b,0x01,0x7c,
+ 0x01,0x7f,0x05,0x00,0x02,0x01,0x01,0x03,0x03,0xfc,
+ 0x03,0x80,0x00,0x0f,0x00,0xfb,0x01,0x03,0x01,0x02,
+ 0x04,0x00,0x01,0x7e,0x01,0x7d,0x00,0x76,0x00,0x8a,
+ 0x01,0x03,0x02,0x02,0x03,0x00,0x02,0x7e,0x01,0x7d,
+ 0x00,0x76,0x03,0x80,0x03,0x8f,0x00,0x74,0x01,0x7e,
+ 0x02,0x7f,0x04,0x00,0x02,0x01,0x01,0x01,0x00,0x8d,
+ 0x00,0x6e,0xff,0x7e,0xfe,0x7f,0xfb,0x00,0xfe,0x01,
+ 0x0c,0x85,0x03,0x8d,0x01,0x02,0x03,0x00,0x02,0x7e,
+ 0x01,0x02,0x03,0x00,0x02,0x7e,0x00,0x74,0xfe,0x7f,
+ 0xfd,0x00,0xff,0x01,0xfe,0x7f,0xfd,0x00,0xff,0x01,
+ 0x00,0x0c,0x06,0x82,0x00,0x6b,0x08,0x86,0x03,0x80,
+ 0x0a,0x0f,0xf6,0x80,0x0a,0x71,0x03,0x80,0x03,0x8f,
+ 0x00,0x73,0x01,0x7e,0x07,0x00,0x02,0x02,0x00,0x0d,
+ 0x00,0xf3,0x01,0x7e,0x00,0x7e,0x03,0x82,0x03,0x8f,
+ 0x00,0x79,0x02,0x7e,0x08,0x00,0x00,0x89,0x00,0x71,
+ 0x02,0x80,0x03,0x8f,0x00,0x73,0x01,0x7e,0x03,0x00,
+ 0x02,0x02,0x00,0x0d,0x00,0xf3,0x01,0x7e,0x03,0x00,
+ 0x02,0x02,0x00,0x0d,0x00,0xf3,0x01,0x7e,0x03,0x80,
+ 0x03,0x8f,0x00,0x73,0x01,0x7e,0x03,0x00,0x02,0x02,
+ 0x00,0x0d,0x00,0xf3,0x01,0x7e,0x03,0x00,0x02,0x02,
+ 0x00,0x0d,0x00,0xf3,0x01,0x7e,0x00,0x7e,0x03,0x82,
+ 0x03,0x8d,0x00,0x02,0x02,0x00,0x00,0x71,0x08,0x00,
+ 0x02,0x02,0x00,0x06,0xfe,0x02,0xf8,0x00,0x0c,0xf6,
+ 0x03,0x8f,0x00,0x71,0x07,0x00,0x02,0x02,0x00,0x06,
+ 0xfe,0x02,0xf9,0x00,0x0c,0x85,0x00,0x71,0x02,0x80,
+ 0x03,0x8f,0x00,0x71,0x07,0x00,0x03,0x02,0x00,0x06,
+ 0xfd,0x02,0xf9,0x00,0x0c,0xf6,0x03,0x8d,0x02,0x02,
+ 0x06,0x00,0x02,0x7e,0x00,0x75,0xfe,0x7e,0xfa,0x00,
+ 0xfe,0x02,0x04,0x85,0x06,0x00,0x02,0xf9,0x03,0x80,
+ 0x00,0x0f,0x00,0xf8,0x04,0x00,0x00,0x06,0x02,0x02,
+ 0x04,0x00,0x02,0x7e,0x00,0x75,0xfe,0x7e,0xfc,0x00,
+ 0xfe,0x02,0x00,0x05,0x0a,0xf9,0x0d,0x80,0x00,0x0f,
+ 0xf7,0x00,0xff,0x7e,0x00,0x7b,0x01,0x7e,0x09,0x00,
+ 0xf6,0xfa,0x04,0x06,0x08,0xfa
+ };
+
+
+
+ //-------------------------------------------------------------------------
+ gsv_text::~gsv_text()
+ {
+ if(m_loaded_font) delete [] m_loaded_font;
+ if(m_text_buf) delete [] m_text_buf;
+ }
+
+
+ //-------------------------------------------------------------------------
+ gsv_text::gsv_text() :
+ m_x(0.0),
+ m_y(0.0),
+ m_start_x(0.0),
+ m_width(10.0),
+ m_height(0.0),
+ m_space(0.0),
+ m_line_space(0.0),
+ m_text(m_chr),
+ m_text_buf(0),
+ m_buf_size(0),
+ m_cur_chr(m_chr),
+ m_font(gsv_default_font),
+ m_loaded_font(0),
+ m_status(initial),
+ m_big_endian(false),
+ m_flip(false)
+ {
+ m_chr[0] = m_chr[1] = 0;
+
+ int t = 1;
+ if(*(char*)&t == 0) m_big_endian = true;
+ }
+
+
+
+ //-------------------------------------------------------------------------
+ void gsv_text::font(const void* _font)
+ {
+ m_font = _font;
+ if(m_font == 0) m_font = m_loaded_font;
+ }
+
+ //-------------------------------------------------------------------------
+ void gsv_text::size(double height, double width)
+ {
+ m_height = height;
+ m_width = width;
+ }
+
+ //-------------------------------------------------------------------------
+ void gsv_text::space(double _space)
+ {
+ m_space = _space;
+ }
+
+ //-------------------------------------------------------------------------
+ void gsv_text::line_space(double _line_space)
+ {
+ m_line_space = _line_space;
+ }
+
+ //-------------------------------------------------------------------------
+ void gsv_text::start_point(double x, double y)
+ {
+ m_x = m_start_x = x;
+ m_y = y;
+ //if(m_flip) m_y += m_height;
+ }
+
+
+ //-------------------------------------------------------------------------
+ void gsv_text::load_font(const char* file)
+ {
+ if(m_loaded_font) delete [] m_loaded_font;
+ m_loaded_font = 0;
+
+ FILE* fd = fopen(file, "rb");
+ if(fd)
+ {
+ unsigned len;
+
+ fseek(fd, 0l, SEEK_END);
+ len = ftell(fd);
+ fseek(fd, 0l, SEEK_SET);
+ if(len > 0)
+ {
+ m_loaded_font = new char [len];
+ fread(m_loaded_font, 1, len, fd);
+ m_font = m_loaded_font;
+ }
+ fclose(fd);
+ }
+ }
+
+
+ //-------------------------------------------------------------------------
+ void gsv_text::text(const char* _text)
+ {
+ if(_text == 0)
+ {
+ m_chr[0] = 0;
+ m_text = m_chr;
+ return;
+ }
+ unsigned new_size = strlen(_text) + 1;
+ if(new_size > m_buf_size)
+ {
+ if(m_text_buf) delete [] m_text_buf;
+ m_text_buf = new char [m_buf_size = new_size];
+ }
+ memcpy(m_text_buf, _text, new_size);
+ m_text = m_text_buf;
+ }
+
+
+
+ //-------------------------------------------------------------------------
+ void gsv_text::rewind(unsigned)
+ {
+ m_status = initial;
+ if(m_font == 0) return;
+
+ m_indices = (int8u*)m_font;
+ double base_height = value(m_indices + 4);
+ m_indices += value(m_indices);
+ m_glyphs = (int8*)(m_indices + 257*2);
+ m_h = m_height / base_height;
+ m_w = (m_width == 0.0) ? m_h : m_width / base_height;
+ if(m_flip) m_h = -m_h;
+ m_cur_chr = m_text;
+ }
+
+
+ //-------------------------------------------------------------------------
+ unsigned gsv_text::vertex(double* x, double* y)
+ {
+ unsigned idx;
+ int8 yc, yf;
+ int dx, dy;
+ bool quit = false;
+
+
+ while(!quit)
+ {
+ switch(m_status)
+ {
+ case initial:
+ if(m_font == 0)
+ {
+ quit = true;
+ break;
+ }
+ m_status = next_char;
+
+ case next_char:
+ if(*m_cur_chr == 0)
+ {
+ quit = true;
+ break;
+ }
+ idx = (*m_cur_chr++) & 0xFF;
+ if(idx == '\n')
+ {
+ m_x = m_start_x;
+ m_y -= m_flip ? -m_height - m_line_space : m_height + m_line_space;
+ break;
+ }
+ idx <<= 1;
+ m_bglyph = m_glyphs + value(m_indices + idx);
+ m_eglyph = m_glyphs + value(m_indices + idx + 2);
+ m_status = start_glyph;
+
+ case start_glyph:
+ *x = m_x;
+ *y = m_y;
+ m_status = glyph;
+ return path_cmd_move_to;
+
+ case glyph:
+ if(m_bglyph >= m_eglyph)
+ {
+ m_status = next_char;
+ m_x += m_space;
+ break;
+ }
+ dx = int(*m_bglyph++);
+ yf = (yc = *m_bglyph++) & 0x80;
+ yc <<= 1;
+ yc >>= 1;
+ dy = int(yc);
+ m_x += double(dx) * m_w;
+ m_y += double(dy) * m_h;
+ *x = m_x;
+ *y = m_y;
+ return yf ? path_cmd_move_to : path_cmd_line_to;
+ }
+
+ }
+ return path_cmd_stop;
+ }
+
+
+
+}
diff --git a/agg/source/agg_image_filters.cpp b/agg/source/agg_image_filters.cpp
new file mode 100755
index 000000000000..28dd0654eeb4
--- /dev/null
+++ b/agg/source/agg_image_filters.cpp
@@ -0,0 +1,120 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// Filtering class image_filter_lut implemantation
+//
+//----------------------------------------------------------------------------
+
+
+#include "agg_image_filters.h"
+
+
+namespace agg
+{
+
+ //--------------------------------------------------------------------
+ image_filter_lut::~image_filter_lut()
+ {
+ delete [] m_weight_array;
+ }
+
+
+ //--------------------------------------------------------------------
+ image_filter_lut::image_filter_lut() :
+ m_weight_array(0),
+ m_max_size(0)
+ {}
+
+ //--------------------------------------------------------------------
+ void image_filter_lut::realloc(double _radius)
+ {
+ m_radius = _radius;
+ m_diameter = unsigned(ceil(_radius)) * 2;
+ m_start = -int(m_diameter / 2 - 1);
+ unsigned size = m_diameter << image_subpixel_shift;
+ if(size > m_max_size)
+ {
+ delete [] m_weight_array;
+ m_weight_array = new int16 [size];
+ m_max_size = size;
+ }
+ }
+
+
+
+ //--------------------------------------------------------------------
+ // This function normalizes integer values and corrects the rounding
+ // errors. It doesn't do anything with the source floating point values
+ // (m_weight_array_dbl), it corrects only integers according to the rule
+ // of 1.0 which means that any sum of pixel weights must be equal to 1.0.
+ // So, the filter function must produce a graph of the proper shape.
+ //--------------------------------------------------------------------
+ void image_filter_lut::normalize()
+ {
+ unsigned i;
+ int flip = 1;
+
+ for(i = 0; i < image_subpixel_size; i++)
+ {
+ for(;;)
+ {
+ int sum = 0;
+ unsigned j;
+ for(j = 0; j < m_diameter; j++)
+ {
+ sum += m_weight_array[j * image_subpixel_size + i];
+ }
+
+ if(sum == image_filter_size) break;
+
+ double k = double(image_filter_size) / double(sum);
+ sum = 0;
+ for(j = 0; j < m_diameter; j++)
+ {
+ sum += m_weight_array[j * image_subpixel_size + i] =
+ int16(m_weight_array[j * image_subpixel_size + i] * k);
+ }
+
+ sum -= image_filter_size;
+ int16 inc = (sum > 0) ? -1 : 1;
+
+ for(j = 0; j < m_diameter && sum; j++)
+ {
+ flip ^= 1;
+ unsigned idx = flip ? m_diameter/2 + j/2 : m_diameter/2 - j/2;
+ int v = m_weight_array[idx * image_subpixel_size + i];
+ if(v < image_filter_size)
+ {
+ m_weight_array[idx * image_subpixel_size + i] =
+ m_weight_array[idx * image_subpixel_size + i] + inc;
+ sum += inc;
+ }
+ }
+ }
+ }
+
+ unsigned pivot = m_diameter << (image_subpixel_shift - 1);
+
+ for(i = 0; i < pivot; i++)
+ {
+ m_weight_array[pivot + i] = m_weight_array[pivot - i];
+ }
+ unsigned end = (diameter() << image_subpixel_shift) - 1;
+ m_weight_array[0] = m_weight_array[end];
+ }
+
+
+}
+
diff --git a/agg/source/agg_line_aa_basics.cpp b/agg/source/agg_line_aa_basics.cpp
new file mode 100755
index 000000000000..34103178d7b7
--- /dev/null
+++ b/agg/source/agg_line_aa_basics.cpp
@@ -0,0 +1,82 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+
+#include <math.h>
+#include "agg_line_aa_basics.h"
+
+namespace agg
+{
+ //-------------------------------------------------------------------------
+ // The number of the octant is determined as a 3-bit value as follows:
+ // bit 0 = vertical flag
+ // bit 1 = sx < 0
+ // bit 2 = sy < 0
+ //
+ // [N] shows the number of the orthogonal quadrant
+ // <M> shows the number of the diagonal quadrant
+ // <1>
+ // [1] | [0]
+ // . (3)011 | 001(1) .
+ // . | .
+ // . | .
+ // . | .
+ // (2)010 .|. 000(0)
+ // <2> ----------.+.----------- <0>
+ // (6)110 . | . 100(4)
+ // . | .
+ // . | .
+ // . | .
+ // (7)111 | 101(5)
+ // [2] | [3]
+ // <3>
+ // 0,1,2,3,4,5,6,7
+ int8u line_parameters::s_orthogonal_quadrant[8] = { 0,0,1,1,3,3,2,2 };
+ int8u line_parameters::s_diagonal_quadrant[8] = { 0,1,2,1,0,3,2,3 };
+
+
+
+ //-------------------------------------------------------------------------
+ void bisectrix(const line_parameters& l1,
+ const line_parameters& l2,
+ int* x, int* y)
+ {
+ double k = double(l2.len) / double(l1.len);
+ double tx = l2.x2 - (l2.x1 - l1.x1) * k;
+ double ty = l2.y2 - (l2.y1 - l1.y1) * k;
+
+ //All bisectrices must be on the right of the line
+ //If the next point is on the left (l1 => l2.2)
+ //then the bisectix should be rotated by 180 degrees.
+ if(double(l2.x2 - l2.x1) * double(l2.y1 - l1.y1) <
+ double(l2.y2 - l2.y1) * double(l2.x1 - l1.x1) + 100.0)
+ {
+ tx -= (tx - l2.x1) * 2.0;
+ ty -= (ty - l2.y1) * 2.0;
+ }
+
+ // Check if the bisectrix is too short
+ double dx = tx - l2.x1;
+ double dy = ty - l2.y1;
+ if((int)sqrt(dx * dx + dy * dy) < line_subpixel_size)
+ {
+ *x = (l2.x1 + l2.x1 + (l2.y1 - l1.y1) + (l2.y2 - l2.y1)) >> 1;
+ *y = (l2.y1 + l2.y1 - (l2.x1 - l1.x1) - (l2.x2 - l2.x1)) >> 1;
+ return;
+ }
+ *x = int(tx);
+ *y = int(ty);
+ }
+
+}
diff --git a/agg/source/agg_line_profile_aa.cpp b/agg/source/agg_line_profile_aa.cpp
new file mode 100755
index 000000000000..1374475b663f
--- /dev/null
+++ b/agg/source/agg_line_profile_aa.cpp
@@ -0,0 +1,117 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+
+#include "agg_renderer_outline_aa.h"
+
+namespace agg
+{
+
+ //---------------------------------------------------------------------
+ void line_profile_aa::width(double w)
+ {
+ if(w < 0.0) w = 0.0;
+
+ if(w < m_smoother_width) w += w;
+ else w += m_smoother_width;
+
+ w *= 0.5;
+
+ w -= m_smoother_width;
+ double s = m_smoother_width;
+ if(w < 0.0)
+ {
+ s += w;
+ w = 0.0;
+ }
+ set(w, s);
+ }
+
+
+ //---------------------------------------------------------------------
+ line_profile_aa::value_type* line_profile_aa::profile(double w)
+ {
+ m_subpixel_width = int(w * subpixel_size);
+ unsigned size = m_subpixel_width + subpixel_size * 6;
+ if(size > m_size)
+ {
+ delete [] m_profile;
+ m_profile = new value_type[m_size = size];
+ }
+ return m_profile;
+ }
+
+
+ //---------------------------------------------------------------------
+ void line_profile_aa::set(double center_width, double _smoother_width)
+ {
+ double base_val = 1.0;
+ if(center_width == 0.0) center_width = 1.0 / subpixel_size;
+ if(_smoother_width == 0.0) _smoother_width = 1.0 / subpixel_size;
+
+ double _width = center_width + _smoother_width;
+ if(_width < m_min_width)
+ {
+ double k = _width / m_min_width;
+ base_val *= k;
+ center_width /= k;
+ _smoother_width /= k;
+ }
+
+ value_type* ch = profile(center_width + _smoother_width);
+
+ unsigned subpixel_center_width = unsigned(center_width * subpixel_size);
+ unsigned subpixel_smoother_width = unsigned(_smoother_width * subpixel_size);
+
+ value_type* ch_center = ch + subpixel_size*2;
+ value_type* ch_smoother = ch_center + subpixel_center_width;
+
+ unsigned i;
+
+ unsigned val = m_gamma[unsigned(base_val * aa_mask)];
+ ch = ch_center;
+ for(i = 0; i < subpixel_center_width; i++)
+ {
+ *ch++ = (value_type)val;
+ }
+
+ for(i = 0; i < subpixel_smoother_width; i++)
+ {
+ *ch_smoother++ =
+ m_gamma[unsigned((base_val -
+ base_val *
+ (double(i) / subpixel_smoother_width)) * aa_mask)];
+ }
+
+ unsigned n_smoother = profile_size() -
+ subpixel_smoother_width -
+ subpixel_center_width -
+ subpixel_size*2;
+
+ val = m_gamma[0];
+ for(i = 0; i < n_smoother; i++)
+ {
+ *ch_smoother++ = (value_type)val;
+ }
+
+ ch = ch_center;
+ for(i = 0; i < subpixel_size*2; i++)
+ {
+ *--ch = *ch_center++;
+ }
+ }
+
+
+}
+
diff --git a/agg/source/agg_path_storage.cpp b/agg/source/agg_path_storage.cpp
new file mode 100755
index 000000000000..60eafffff14f
--- /dev/null
+++ b/agg/source/agg_path_storage.cpp
@@ -0,0 +1,525 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// Class path_storage
+//
+//----------------------------------------------------------------------------
+#include <string.h>
+#include <math.h>
+#include "agg_path_storage.h"
+#include "agg_math.h"
+#include "agg_bezier_arc.h"
+
+
+namespace agg
+{
+
+ //------------------------------------------------------------------------
+ path_storage::~path_storage()
+ {
+ if(m_total_blocks)
+ {
+ double** coord_blk = m_coord_blocks + m_total_blocks - 1;
+ while(m_total_blocks--)
+ {
+ delete [] *coord_blk;
+ --coord_blk;
+ }
+ delete [] m_coord_blocks;
+ }
+ }
+
+
+ //------------------------------------------------------------------------
+ path_storage::path_storage() :
+ m_total_vertices(0),
+ m_total_blocks(0),
+ m_max_blocks(0),
+ m_coord_blocks(0),
+ m_cmd_blocks(0),
+ m_iterator(0)
+ {
+ }
+
+
+ //------------------------------------------------------------------------
+ path_storage::path_storage(const path_storage& ps) :
+ m_total_vertices(0),
+ m_total_blocks(0),
+ m_max_blocks(0),
+ m_coord_blocks(0),
+ m_cmd_blocks(0),
+ m_iterator(0)
+ {
+ copy_from(ps);
+ }
+
+
+ //------------------------------------------------------------------------
+ void path_storage::remove_all()
+ {
+ m_total_vertices = 0;
+ m_iterator = 0;
+ }
+
+
+ //------------------------------------------------------------------------
+ void path_storage::copy_from(const path_storage& ps)
+ {
+ remove_all();
+ unsigned i;
+ for(i = 0; i < ps.total_vertices(); i++)
+ {
+ double x, y;
+ unsigned cmd = ps.vertex(i, &x, &y);
+ add_vertex(x, y, cmd);
+ }
+ }
+
+
+ //------------------------------------------------------------------------
+ void path_storage::allocate_block(unsigned nb)
+ {
+ if(nb >= m_max_blocks)
+ {
+ double** new_coords =
+ new double* [(m_max_blocks + block_pool) * 2];
+
+ unsigned char** new_cmds =
+ (unsigned char**)(new_coords + m_max_blocks + block_pool);
+
+ if(m_coord_blocks)
+ {
+ memcpy(new_coords,
+ m_coord_blocks,
+ m_max_blocks * sizeof(double*));
+
+ memcpy(new_cmds,
+ m_cmd_blocks,
+ m_max_blocks * sizeof(unsigned char*));
+
+ delete [] m_coord_blocks;
+ }
+ m_coord_blocks = new_coords;
+ m_cmd_blocks = new_cmds;
+ m_max_blocks += block_pool;
+ }
+ m_coord_blocks[nb] =
+ new double [block_size * 2 +
+ block_size /
+ (sizeof(double) / sizeof(unsigned char))];
+
+ m_cmd_blocks[nb] =
+ (unsigned char*)(m_coord_blocks[nb] + block_size * 2);
+
+ m_total_blocks++;
+ }
+
+
+ //------------------------------------------------------------------------
+ void path_storage::rewind(unsigned path_id)
+ {
+ m_iterator = path_id;
+ }
+
+
+
+ //------------------------------------------------------------------------
+ void path_storage::arc_to(double rx, double ry,
+ double angle,
+ bool large_arc_flag,
+ bool sweep_flag,
+ double x, double y)
+ {
+ if(m_total_vertices && is_vertex(command(m_total_vertices - 1)))
+ {
+ const double epsilon = 1e-30;
+ double x0 = 0.0;
+ double y0 = 0.0;
+ last_vertex(&x0, &y0);
+
+ rx = fabs(rx);
+ ry = fabs(ry);
+
+ // Ensure radii are valid
+ //-------------------------
+ if(rx < epsilon || ry < epsilon)
+ {
+ line_to(x, y);
+ return;
+ }
+
+ if(calc_distance(x0, y0, x, y) < epsilon)
+ {
+ // If the endpoints (x, y) and (x0, y0) are identical, then this
+ // is equivalent to omitting the elliptical arc segment entirely.
+ return;
+ }
+ bezier_arc_svg a(x0, y0, rx, ry, angle, large_arc_flag, sweep_flag, x, y);
+ if(a.radii_ok())
+ {
+ add_path(a, 0, true);
+ }
+ else
+ {
+ line_to(x, y);
+ }
+ }
+ else
+ {
+ move_to(x, y);
+ }
+ }
+
+
+ //------------------------------------------------------------------------
+ void path_storage::arc_rel(double rx, double ry,
+ double angle,
+ bool large_arc_flag,
+ bool sweep_flag,
+ double dx, double dy)
+ {
+ rel_to_abs(&dx, &dy);
+ arc_to(rx, ry, angle, large_arc_flag, sweep_flag, dx, dy);
+ }
+
+
+ //------------------------------------------------------------------------
+ void path_storage::curve3(double x_ctrl, double y_ctrl,
+ double x_to, double y_to)
+ {
+ add_vertex(x_ctrl, y_ctrl, path_cmd_curve3);
+ add_vertex(x_to, y_to, path_cmd_curve3);
+ }
+
+ //------------------------------------------------------------------------
+ void path_storage::curve3_rel(double dx_ctrl, double dy_ctrl,
+ double dx_to, double dy_to)
+ {
+ rel_to_abs(&dx_ctrl, &dy_ctrl);
+ rel_to_abs(&dx_to, &dy_to);
+ add_vertex(dx_ctrl, dy_ctrl, path_cmd_curve3);
+ add_vertex(dx_to, dy_to, path_cmd_curve3);
+ }
+
+ //------------------------------------------------------------------------
+ void path_storage::curve3(double x_to, double y_to)
+ {
+ double x0 = 0;
+ double y0 = 0;
+ if(is_vertex(last_vertex(&x0, &y0)))
+ {
+ double x_ctrl = 0;
+ double y_ctrl = 0;
+ unsigned cmd = prev_vertex(&x_ctrl, &y_ctrl);
+ if(is_curve(cmd))
+ {
+ x_ctrl = x0 + x0 - x_ctrl;
+ y_ctrl = y0 + y0 - y_ctrl;
+ }
+ else
+ {
+ x_ctrl = x0;
+ y_ctrl = y0;
+ }
+ curve3(x_ctrl, y_ctrl, x_to, y_to);
+ }
+ }
+
+
+ //------------------------------------------------------------------------
+ void path_storage::curve3_rel(double dx_to, double dy_to)
+ {
+ rel_to_abs(&dx_to, &dy_to);
+ curve3(dx_to, dy_to);
+ }
+
+
+ //------------------------------------------------------------------------
+ void path_storage::curve4(double x_ctrl1, double y_ctrl1,
+ double x_ctrl2, double y_ctrl2,
+ double x_to, double y_to)
+ {
+ add_vertex(x_ctrl1, y_ctrl1, path_cmd_curve4);
+ add_vertex(x_ctrl2, y_ctrl2, path_cmd_curve4);
+ add_vertex(x_to, y_to, path_cmd_curve4);
+ }
+
+ //------------------------------------------------------------------------
+ void path_storage::curve4_rel(double dx_ctrl1, double dy_ctrl1,
+ double dx_ctrl2, double dy_ctrl2,
+ double dx_to, double dy_to)
+ {
+ rel_to_abs(&dx_ctrl1, &dy_ctrl1);
+ rel_to_abs(&dx_ctrl2, &dy_ctrl2);
+ rel_to_abs(&dx_to, &dy_to);
+ add_vertex(dx_ctrl1, dy_ctrl1, path_cmd_curve4);
+ add_vertex(dx_ctrl2, dy_ctrl2, path_cmd_curve4);
+ add_vertex(dx_to, dy_to, path_cmd_curve4);
+ }
+
+
+ //------------------------------------------------------------------------
+ void path_storage::curve4(double x_ctrl2, double y_ctrl2,
+ double x_to, double y_to)
+ {
+ double x0 = 0;
+ double y0 = 0;
+ if(is_vertex(last_vertex(&x0, &y0)))
+ {
+ double x_ctrl1 = 0;
+ double y_ctrl1 = 0;
+ unsigned cmd = prev_vertex(&x_ctrl1, &y_ctrl1);
+ if(is_curve(cmd))
+ {
+ x_ctrl1 = x0 + x0 - x_ctrl1;
+ y_ctrl1 = y0 + y0 - y_ctrl1;
+ }
+ else
+ {
+ x_ctrl1 = x0;
+ y_ctrl1 = y0;
+ }
+ curve4(x_ctrl1, y_ctrl1, x_ctrl2, y_ctrl2, x_to, y_to);
+ }
+ }
+
+
+ //------------------------------------------------------------------------
+ void path_storage::curve4_rel(double dx_ctrl2, double dy_ctrl2,
+ double dx_to, double dy_to)
+ {
+ rel_to_abs(&dx_ctrl2, &dy_ctrl2);
+ rel_to_abs(&dx_to, &dy_to);
+ curve4(dx_ctrl2, dy_ctrl2, dx_to, dy_to);
+ }
+
+
+ //------------------------------------------------------------------------
+ void path_storage::end_poly(unsigned flags)
+ {
+ if(m_total_vertices)
+ {
+ if(is_vertex(command(m_total_vertices - 1)))
+ {
+ add_vertex(0.0, 0.0, path_cmd_end_poly | flags);
+ }
+ }
+ }
+
+
+ //------------------------------------------------------------------------
+ unsigned path_storage::start_new_path()
+ {
+ if(m_total_vertices)
+ {
+ if(!is_stop(command(m_total_vertices - 1)))
+ {
+ add_vertex(0.0, 0.0, path_cmd_stop);
+ }
+ }
+ return m_total_vertices;
+ }
+
+
+ //------------------------------------------------------------------------
+ void path_storage::add_poly(const double* vertices, unsigned num,
+ bool solid_path, unsigned end_flags)
+ {
+ if(num)
+ {
+ if(!solid_path)
+ {
+ move_to(vertices[0], vertices[1]);
+ vertices += 2;
+ --num;
+ }
+ while(num--)
+ {
+ line_to(vertices[0], vertices[1]);
+ vertices += 2;
+ }
+ if(end_flags) end_poly(end_flags);
+ }
+ }
+
+
+ //------------------------------------------------------------------------
+ unsigned path_storage::perceive_polygon_orientation(unsigned idx,
+ double xs, double ys,
+ unsigned* orientation)
+ {
+ unsigned i;
+ double sum = 0.0;
+ double x, y, xn, yn;
+
+ x = xs;
+ y = ys;
+ for(i = idx; i < m_total_vertices; ++i)
+ {
+ if(is_next_poly(vertex(i, &xn, &yn))) break;
+ sum += x * yn - y * xn;
+ x = xn;
+ y = yn;
+ }
+ if(i > idx) sum += x * ys - y * xs;
+ *orientation = path_flags_none;
+ if(sum != 0.0)
+ {
+ *orientation = (sum < 0.0) ? path_flags_cw : path_flags_ccw;
+ }
+ return i;
+ }
+
+
+ //------------------------------------------------------------------------
+ void path_storage::reverse_polygon(unsigned _start, unsigned _end)
+ {
+ unsigned i;
+ unsigned tmp_cmd = command(_start);
+
+ // Shift all commands to one position
+ for(i = _start; i < _end; i++)
+ {
+ modify_command(i, command(i + 1));
+ }
+
+ // Assign starting command to the ending command
+ modify_command(_end, tmp_cmd);
+
+ // Reverse the polygon
+ while(_end > _start)
+ {
+ unsigned start_nb = _start >> block_shift;
+ unsigned end_nb = _end >> block_shift;
+ double* start_ptr = m_coord_blocks[start_nb] + ((_start & block_mask) << 1);
+ double* end_ptr = m_coord_blocks[end_nb] + ((_end & block_mask) << 1);
+ double tmp_xy;
+
+ tmp_xy = *start_ptr;
+ *start_ptr++ = *end_ptr;
+ *end_ptr++ = tmp_xy;
+
+ tmp_xy = *start_ptr;
+ *start_ptr = *end_ptr;
+ *end_ptr = tmp_xy;
+
+ tmp_cmd = m_cmd_blocks[start_nb][_start & block_mask];
+ m_cmd_blocks[start_nb][_start & block_mask] = m_cmd_blocks[end_nb][_end & block_mask];
+ m_cmd_blocks[end_nb][_end & block_mask] = (unsigned char)tmp_cmd;
+
+ ++_start;
+ --_end;
+ }
+ }
+
+
+ //------------------------------------------------------------------------
+ unsigned path_storage::arrange_orientations(unsigned path_id,
+ path_flags_e new_orientation)
+ {
+ unsigned _end = m_total_vertices;
+ if(m_total_vertices && new_orientation != path_flags_none)
+ {
+ unsigned start = path_id;
+
+ double xs, ys;
+ unsigned cmd = vertex(start, &xs, &ys);
+ unsigned inc = 0;
+ for(;;)
+ {
+ unsigned orientation;
+ _end = perceive_polygon_orientation(start + 1, xs, ys,
+ &orientation);
+ if(_end > start + 2 &&
+ orientation &&
+ orientation != unsigned(new_orientation))
+ {
+ reverse_polygon(start + inc, _end - 1);
+ }
+ if(_end >= m_total_vertices) break;
+ cmd = command(_end);
+ if(is_stop(cmd))
+ {
+ ++_end;
+ break;
+ }
+ if(is_end_poly(cmd))
+ {
+ inc = 1;
+ modify_command(_end, set_orientation(cmd, new_orientation));
+ }
+ else
+ {
+ cmd = vertex(++_end, &xs, &ys);
+ inc = 0;
+ }
+ start = _end;
+ }
+ }
+ return _end;
+ }
+
+
+
+ //------------------------------------------------------------------------
+ void path_storage::arrange_orientations_all_paths(path_flags_e new_orientation)
+ {
+ if(new_orientation != path_flags_none)
+ {
+ unsigned start = 0;
+ while(start < m_total_vertices)
+ {
+ start = arrange_orientations(start, new_orientation);
+ }
+ }
+ }
+
+
+
+ //------------------------------------------------------------------------
+ void path_storage::flip_x(double x1, double x2)
+ {
+ unsigned i;
+ double x, y;
+ for(i = 0; i < m_total_vertices; i++)
+ {
+ unsigned cmd = vertex(i, &x, &y);
+ if(is_vertex(cmd))
+ {
+ modify_vertex(i, x2 - x + x1, y);
+ }
+ }
+ }
+
+
+ //------------------------------------------------------------------------
+ void path_storage::flip_y(double y1, double y2)
+ {
+ unsigned i;
+ double x, y;
+ for(i = 0; i < m_total_vertices; i++)
+ {
+ unsigned cmd = vertex(i, &x, &y);
+ if(is_vertex(cmd))
+ {
+ modify_vertex(i, x, y2 - y + y1);
+ }
+ }
+ }
+
+
+}
+
diff --git a/agg/source/agg_rasterizer_scanline_aa.cpp b/agg/source/agg_rasterizer_scanline_aa.cpp
new file mode 100755
index 000000000000..421c0187d0aa
--- /dev/null
+++ b/agg/source/agg_rasterizer_scanline_aa.cpp
@@ -0,0 +1,621 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+// The author gratefully acknowleges the support of David Turner,
+// Robert Wilhelm, and Werner Lemberg - the authors of the FreeType
+// libray - in producing this work. See http://www.freetype.org for details.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// Class outline_aa - implementation.
+//
+// Initially the rendering algorithm was designed by David Turner and the
+// other authors of the FreeType library - see the above notice. I nearly
+// created a similar renderer, but still I was far from David's work.
+// I completely redesigned the original code and adapted it for Anti-Grain
+// ideas. Two functions - render_line and render_hline are the core of
+// the algorithm - they calculate the exact coverage of each pixel cell
+// of the polygon. I left these functions almost as is, because there's
+// no way to improve the perfection - hats off to David and his group!
+//
+// All other code is very different from the original.
+//
+//----------------------------------------------------------------------------
+
+#include <string.h>
+#include "agg_rasterizer_scanline_aa.h"
+
+
+namespace agg
+{
+
+ //------------------------------------------------------------------------
+ AGG_INLINE void cell_aa::set_cover(int c, int a)
+ {
+ cover = c;
+ area = a;
+ }
+
+ //------------------------------------------------------------------------
+ AGG_INLINE void cell_aa::add_cover(int c, int a)
+ {
+ cover += c;
+ area += a;
+ }
+
+ //------------------------------------------------------------------------
+ AGG_INLINE void cell_aa::set_coord(int cx, int cy)
+ {
+ x = int16(cx);
+ y = int16(cy);
+ packed_coord = (cy << 16) + cx;
+ }
+
+ //------------------------------------------------------------------------
+ AGG_INLINE void cell_aa::set(int cx, int cy, int c, int a)
+ {
+ x = int16(cx);
+ y = int16(cy);
+ packed_coord = (cy << 16) + cx;
+ cover = c;
+ area = a;
+ }
+
+ //------------------------------------------------------------------------
+ outline_aa::~outline_aa()
+ {
+ delete [] m_sorted_cells;
+ if(m_num_blocks)
+ {
+ cell_aa** ptr = m_cells + m_num_blocks - 1;
+ while(m_num_blocks--)
+ {
+ delete [] *ptr;
+ ptr--;
+ }
+ delete [] m_cells;
+ }
+ }
+
+
+ //------------------------------------------------------------------------
+ outline_aa::outline_aa() :
+ m_num_blocks(0),
+ m_max_blocks(0),
+ m_cur_block(0),
+ m_num_cells(0),
+ m_cells(0),
+ m_cur_cell_ptr(0),
+ m_sorted_cells(0),
+ m_sorted_size(0),
+ m_cur_x(0),
+ m_cur_y(0),
+ m_min_x(0x7FFFFFFF),
+ m_min_y(0x7FFFFFFF),
+ m_max_x(-0x7FFFFFFF),
+ m_max_y(-0x7FFFFFFF),
+ m_sorted(false)
+ {
+ m_cur_cell.set(0x7FFF, 0x7FFF, 0, 0);
+ }
+
+
+ //------------------------------------------------------------------------
+ void outline_aa::reset()
+ {
+ m_num_cells = 0;
+ m_cur_block = 0;
+ m_cur_cell.set(0x7FFF, 0x7FFF, 0, 0);
+ m_sorted = false;
+ m_min_x = 0x7FFFFFFF;
+ m_min_y = 0x7FFFFFFF;
+ m_max_x = -0x7FFFFFFF;
+ m_max_y = -0x7FFFFFFF;
+ }
+
+
+
+ //------------------------------------------------------------------------
+ void outline_aa::allocate_block()
+ {
+ if(m_cur_block >= m_num_blocks)
+ {
+ if(m_num_blocks >= m_max_blocks)
+ {
+ cell_aa** new_cells = new cell_aa* [m_max_blocks + cell_block_pool];
+ if(m_cells)
+ {
+ memcpy(new_cells, m_cells, m_max_blocks * sizeof(cell_aa*));
+ delete [] m_cells;
+ }
+ m_cells = new_cells;
+ m_max_blocks += cell_block_pool;
+ }
+ m_cells[m_num_blocks++] = new cell_aa [unsigned(cell_block_size)];
+ }
+ m_cur_cell_ptr = m_cells[m_cur_block++];
+ }
+
+
+ //------------------------------------------------------------------------
+ AGG_INLINE void outline_aa::add_cur_cell()
+ {
+ if(m_cur_cell.area | m_cur_cell.cover)
+ {
+ if((m_num_cells & cell_block_mask) == 0)
+ {
+ if(m_num_blocks >= cell_block_limit) return;
+ allocate_block();
+ }
+ *m_cur_cell_ptr++ = m_cur_cell;
+ ++m_num_cells;
+ if(m_cur_cell.x < m_min_x) m_min_x = m_cur_cell.x;
+ if(m_cur_cell.x > m_max_x) m_max_x = m_cur_cell.x;
+ }
+ }
+
+
+
+ //------------------------------------------------------------------------
+ AGG_INLINE void outline_aa::set_cur_cell(int x, int y)
+ {
+ if(m_cur_cell.packed_coord != (y << 16) + x)
+ {
+ add_cur_cell();
+ m_cur_cell.set(x, y, 0, 0);
+ }
+ }
+
+
+
+ //------------------------------------------------------------------------
+ AGG_INLINE void outline_aa::render_hline(int ey, int x1, int y1, int x2, int y2)
+ {
+ int ex1 = x1 >> poly_base_shift;
+ int ex2 = x2 >> poly_base_shift;
+ int fx1 = x1 & poly_base_mask;
+ int fx2 = x2 & poly_base_mask;
+
+ int delta, p, first, dx;
+ int incr, lift, mod, rem;
+
+ //trivial case. Happens often
+ if(y1 == y2)
+ {
+ set_cur_cell(ex2, ey);
+ return;
+ }
+
+ //everything is located in a single cell. That is easy!
+ if(ex1 == ex2)
+ {
+ delta = y2 - y1;
+ m_cur_cell.add_cover(delta, (fx1 + fx2) * delta);
+ return;
+ }
+
+ //ok, we'll have to render a run of adjacent cells on the same
+ //hline...
+ p = (poly_base_size - fx1) * (y2 - y1);
+ first = poly_base_size;
+ incr = 1;
+
+ dx = x2 - x1;
+
+ if(dx < 0)
+ {
+ p = fx1 * (y2 - y1);
+ first = 0;
+ incr = -1;
+ dx = -dx;
+ }
+
+ delta = p / dx;
+ mod = p % dx;
+
+ if(mod < 0)
+ {
+ delta--;
+ mod += dx;
+ }
+
+ m_cur_cell.add_cover(delta, (fx1 + first) * delta);
+
+ ex1 += incr;
+ set_cur_cell(ex1, ey);
+ y1 += delta;
+
+ if(ex1 != ex2)
+ {
+ p = poly_base_size * (y2 - y1 + delta);
+ lift = p / dx;
+ rem = p % dx;
+
+ if (rem < 0)
+ {
+ lift--;
+ rem += dx;
+ }
+
+ mod -= dx;
+
+ while (ex1 != ex2)
+ {
+ delta = lift;
+ mod += rem;
+ if(mod >= 0)
+ {
+ mod -= dx;
+ delta++;
+ }
+
+ m_cur_cell.add_cover(delta, (poly_base_size) * delta);
+ y1 += delta;
+ ex1 += incr;
+ set_cur_cell(ex1, ey);
+ }
+ }
+ delta = y2 - y1;
+ m_cur_cell.add_cover(delta, (fx2 + poly_base_size - first) * delta);
+ }
+
+
+
+
+
+
+ //------------------------------------------------------------------------
+ void outline_aa::render_line(int x1, int y1, int x2, int y2)
+ {
+ int ey1 = y1 >> poly_base_shift;
+ int ey2 = y2 >> poly_base_shift;
+ int fy1 = y1 & poly_base_mask;
+ int fy2 = y2 & poly_base_mask;
+
+ int dx, dy, x_from, x_to;
+ int p, rem, mod, lift, delta, first, incr;
+
+ dx = x2 - x1;
+ dy = y2 - y1;
+
+ //everything is on a single hline
+ if(ey1 == ey2)
+ {
+ render_hline(ey1, x1, fy1, x2, fy2);
+ return;
+ }
+
+ //Vertical line - we have to calculate start and end cells,
+ //and then - the common values of the area and coverage for
+ //all cells of the line. We know exactly there's only one
+ //cell, so, we don't have to call render_hline().
+ incr = 1;
+ if(dx == 0)
+ {
+ int ex = x1 >> poly_base_shift;
+ int two_fx = (x1 - (ex << poly_base_shift)) << 1;
+ int area;
+
+ first = poly_base_size;
+ if(dy < 0)
+ {
+ first = 0;
+ incr = -1;
+ }
+
+ x_from = x1;
+
+ //render_hline(ey1, x_from, fy1, x_from, first);
+ delta = first - fy1;
+ m_cur_cell.add_cover(delta, two_fx * delta);
+
+ ey1 += incr;
+ set_cur_cell(ex, ey1);
+
+ delta = first + first - poly_base_size;
+ area = two_fx * delta;
+ while(ey1 != ey2)
+ {
+ //render_hline(ey1, x_from, poly_base_size - first, x_from, first);
+ m_cur_cell.set_cover(delta, area);
+ ey1 += incr;
+ set_cur_cell(ex, ey1);
+ }
+ //render_hline(ey1, x_from, poly_base_size - first, x_from, fy2);
+ delta = fy2 - poly_base_size + first;
+ m_cur_cell.add_cover(delta, two_fx * delta);
+ return;
+ }
+
+ //ok, we have to render several hlines
+ p = (poly_base_size - fy1) * dx;
+ first = poly_base_size;
+
+ if(dy < 0)
+ {
+ p = fy1 * dx;
+ first = 0;
+ incr = -1;
+ dy = -dy;
+ }
+
+ delta = p / dy;
+ mod = p % dy;
+
+ if(mod < 0)
+ {
+ delta--;
+ mod += dy;
+ }
+
+ x_from = x1 + delta;
+ render_hline(ey1, x1, fy1, x_from, first);
+
+ ey1 += incr;
+ set_cur_cell(x_from >> poly_base_shift, ey1);
+
+ if(ey1 != ey2)
+ {
+ p = poly_base_size * dx;
+ lift = p / dy;
+ rem = p % dy;
+
+ if(rem < 0)
+ {
+ lift--;
+ rem += dy;
+ }
+ mod -= dy;
+
+ while(ey1 != ey2)
+ {
+ delta = lift;
+ mod += rem;
+ if (mod >= 0)
+ {
+ mod -= dy;
+ delta++;
+ }
+
+ x_to = x_from + delta;
+ render_hline(ey1, x_from, poly_base_size - first, x_to, first);
+ x_from = x_to;
+
+ ey1 += incr;
+ set_cur_cell(x_from >> poly_base_shift, ey1);
+ }
+ }
+ render_hline(ey1, x_from, poly_base_size - first, x2, fy2);
+ }
+
+
+ //------------------------------------------------------------------------
+ void outline_aa::move_to(int x, int y)
+ {
+ if(m_sorted) reset();
+ set_cur_cell(x >> poly_base_shift, y >> poly_base_shift);
+ m_cur_x = x;
+ m_cur_y = y;
+ }
+
+
+
+ //------------------------------------------------------------------------
+ void outline_aa::line_to(int x, int y)
+ {
+ render_line(m_cur_x, m_cur_y, x, y);
+ m_cur_x = x;
+ m_cur_y = y;
+ m_sorted = false;
+ }
+
+
+ //------------------------------------------------------------------------
+ enum
+ {
+ qsort_threshold = 9
+ };
+
+
+ //------------------------------------------------------------------------
+ template <class T> AGG_INLINE void swap_cells(T* a, T* b)
+ {
+ T temp = *a;
+ *a = *b;
+ *b = temp;
+ }
+
+ //------------------------------------------------------------------------
+ template <class T> AGG_INLINE bool less_than(T* a, T* b)
+ {
+ return (*a)->packed_coord < (*b)->packed_coord;
+ }
+
+
+
+ //------------------------------------------------------------------------
+ void outline_aa::qsort_cells(cell_aa** start, unsigned num)
+ {
+ cell_aa** stack[80];
+ cell_aa*** top;
+ cell_aa** limit;
+ cell_aa** base;
+
+ limit = start + num;
+ base = start;
+ top = stack;
+
+ for (;;)
+ {
+ int len = int(limit - base);
+
+ cell_aa** i;
+ cell_aa** j;
+ cell_aa** pivot;
+
+ if(len > qsort_threshold)
+ {
+ // we use base + len/2 as the pivot
+ pivot = base + len / 2;
+ swap_cells(base, pivot);
+
+ i = base + 1;
+ j = limit - 1;
+
+ // now ensure that *i <= *base <= *j
+ if(less_than(j, i))
+ {
+ swap_cells(i, j);
+ }
+
+ if(less_than(base, i))
+ {
+ swap_cells(base, i);
+ }
+
+ if(less_than(j, base))
+ {
+ swap_cells(base, j);
+ }
+
+ for(;;)
+ {
+ do i++; while( less_than(i, base) );
+ do j--; while( less_than(base, j) );
+
+ if ( i > j )
+ {
+ break;
+ }
+
+ swap_cells(i, j);
+ }
+
+ swap_cells(base, j);
+
+ // now, push the largest sub-array
+ if(j - base > limit - i)
+ {
+ top[0] = base;
+ top[1] = j;
+ base = i;
+ }
+ else
+ {
+ top[0] = i;
+ top[1] = limit;
+ limit = j;
+ }
+ top += 2;
+ }
+ else
+ {
+ // the sub-array is small, perform insertion sort
+ j = base;
+ i = j + 1;
+
+ for(; i < limit; j = i, i++)
+ {
+ for(; less_than(j + 1, j); j--)
+ {
+ swap_cells(j + 1, j);
+ if (j == base)
+ {
+ break;
+ }
+ }
+ }
+ if(top > stack)
+ {
+ top -= 2;
+ base = top[0];
+ limit = top[1];
+ }
+ else
+ {
+ break;
+ }
+ }
+ }
+ }
+
+
+
+
+
+ //------------------------------------------------------------------------
+ void outline_aa::sort_cells()
+ {
+ if(m_num_cells == 0) return;
+ if(m_num_cells > m_sorted_size)
+ {
+ delete [] m_sorted_cells;
+ m_sorted_size = m_num_cells;
+ m_sorted_cells = new cell_aa* [m_num_cells + 1];
+ }
+
+ cell_aa** sorted_ptr = m_sorted_cells;
+ cell_aa** block_ptr = m_cells;
+ cell_aa* cell_ptr;
+
+ unsigned nb = m_num_cells >> cell_block_shift;
+ unsigned i;
+
+ while(nb--)
+ {
+ cell_ptr = *block_ptr++;
+ i = cell_block_size;
+ while(i--)
+ {
+ *sorted_ptr++ = cell_ptr++;
+ }
+ }
+
+ cell_ptr = *block_ptr++;
+ i = m_num_cells & cell_block_mask;
+ while(i--)
+ {
+ *sorted_ptr++ = cell_ptr++;
+ }
+ m_sorted_cells[m_num_cells] = 0;
+ qsort_cells(m_sorted_cells, m_num_cells);
+ m_min_y = m_sorted_cells[0]->y;
+ m_max_y = m_sorted_cells[m_num_cells - 1]->y;
+ }
+
+
+
+
+ //------------------------------------------------------------------------
+ const cell_aa* const* outline_aa::cells()
+ {
+ //Perform sort only the first time.
+ if(!m_sorted)
+ {
+ add_cur_cell();
+ sort_cells();
+ m_sorted = true;
+ }
+ return m_sorted_cells;
+ }
+
+
+
+
+
+}
+
+
+
+
+
diff --git a/agg/source/agg_rounded_rect.cpp b/agg/source/agg_rounded_rect.cpp
new file mode 100755
index 000000000000..8f6e532e7096
--- /dev/null
+++ b/agg/source/agg_rounded_rect.cpp
@@ -0,0 +1,164 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// Rounded rectangle vertex generator
+//
+//----------------------------------------------------------------------------
+
+#include <math.h>
+#include "agg_rounded_rect.h"
+
+
+namespace agg
+{
+ //------------------------------------------------------------------------
+ rounded_rect::rounded_rect(double x1, double y1, double x2, double y2, double r) :
+ m_x1(x1), m_y1(y1), m_x2(x2), m_y2(y2),
+ m_rx1(r), m_ry1(r), m_rx2(r), m_ry2(r),
+ m_rx3(r), m_ry3(r), m_rx4(r), m_ry4(r)
+ {
+ if(x1 > x2) { m_x1 = x2; m_x2 = x1; }
+ if(y1 > y2) { m_y1 = y2; m_y2 = y1; }
+ }
+
+ //--------------------------------------------------------------------
+ void rounded_rect::rect(double x1, double y1, double x2, double y2)
+ {
+ m_x1 = x1;
+ m_y1 = y1;
+ m_x2 = x2;
+ m_y2 = y2;
+ if(x1 > x2) { m_x1 = x2; m_x2 = x1; }
+ if(y1 > y2) { m_y1 = y2; m_y2 = y1; }
+ }
+
+ //--------------------------------------------------------------------
+ void rounded_rect::radius(double r)
+ {
+ m_rx1 = m_ry1 = m_rx2 = m_ry2 = m_rx3 = m_ry3 = m_rx4 = m_ry4 = r;
+ }
+
+ //--------------------------------------------------------------------
+ void rounded_rect::radius(double rx, double ry)
+ {
+ m_rx1 = m_rx2 = m_rx3 = m_rx4 = rx;
+ m_ry1 = m_ry2 = m_ry3 = m_ry4 = ry;
+ }
+
+ //--------------------------------------------------------------------
+ void rounded_rect::radius(double rx_bottom, double ry_bottom,
+ double rx_top, double ry_top)
+ {
+ m_rx1 = m_rx2 = rx_bottom;
+ m_rx3 = m_rx4 = rx_top;
+ m_ry1 = m_ry2 = ry_bottom;
+ m_ry3 = m_ry4 = ry_top;
+ }
+
+ //--------------------------------------------------------------------
+ void rounded_rect::radius(double rx1, double ry1, double rx2, double ry2,
+ double rx3, double ry3, double rx4, double ry4)
+ {
+ m_rx1 = rx1; m_ry1 = ry1; m_rx2 = rx2; m_ry2 = ry2;
+ m_rx3 = rx3; m_ry3 = ry3; m_rx4 = rx4; m_ry4 = ry4;
+ }
+
+ //--------------------------------------------------------------------
+ void rounded_rect::normalize_radius()
+ {
+ double dx = fabs(m_y2 - m_y1);
+ double dy = fabs(m_x2 - m_x1);
+
+ double k = 1.0;
+ double t;
+ t = dx / (m_rx1 + m_rx2); if(t < k) k = t;
+ t = dx / (m_rx3 + m_rx4); if(t < k) k = t;
+ t = dy / (m_ry1 + m_ry2); if(t < k) k = t;
+ t = dy / (m_ry3 + m_ry4); if(t < k) k = t;
+
+ if(k < 1.0)
+ {
+ m_rx1 *= k; m_ry1 *= k; m_rx2 *= k; m_ry2 *= k;
+ m_rx3 *= k; m_ry3 *= k; m_rx4 *= k; m_ry4 *= k;
+ }
+ }
+
+ //--------------------------------------------------------------------
+ void rounded_rect::rewind(unsigned)
+ {
+ m_status = 0;
+ }
+
+ //--------------------------------------------------------------------
+ unsigned rounded_rect::vertex(double* x, double* y)
+ {
+ unsigned cmd = path_cmd_stop;
+ switch(m_status)
+ {
+ case 0:
+ m_arc.init(m_x1 + m_rx1, m_y1 + m_ry1, m_rx1, m_ry1,
+ pi, pi+pi*0.5);
+ m_arc.rewind(0);
+ m_status++;
+
+ case 1:
+ cmd = m_arc.vertex(x, y);
+ if(is_stop(cmd)) m_status++;
+ else return cmd;
+
+ case 2:
+ m_arc.init(m_x2 - m_rx2, m_y1 + m_ry2, m_rx2, m_ry2,
+ pi+pi*0.5, 0.0);
+ m_arc.rewind(0);
+ m_status++;
+
+ case 3:
+ cmd = m_arc.vertex(x, y);
+ if(is_stop(cmd)) m_status++;
+ else return path_cmd_line_to;
+
+ case 4:
+ m_arc.init(m_x2 - m_rx3, m_y2 - m_ry3, m_rx3, m_ry3,
+ 0.0, pi*0.5);
+ m_arc.rewind(0);
+ m_status++;
+
+ case 5:
+ cmd = m_arc.vertex(x, y);
+ if(is_stop(cmd)) m_status++;
+ else return path_cmd_line_to;
+
+ case 6:
+ m_arc.init(m_x1 + m_rx4, m_y2 - m_ry4, m_rx4, m_ry4,
+ pi*0.5, pi);
+ m_arc.rewind(0);
+ m_status++;
+
+ case 7:
+ cmd = m_arc.vertex(x, y);
+ if(is_stop(cmd)) m_status++;
+ else return path_cmd_line_to;
+
+ case 8:
+ cmd = (unsigned)path_cmd_end_poly | (unsigned)path_flags_close | (unsigned)path_flags_ccw;
+ m_status++;
+ break;
+ }
+ return cmd;
+ }
+
+
+}
+
diff --git a/agg/source/agg_sqrt_tables.cpp b/agg/source/agg_sqrt_tables.cpp
new file mode 100755
index 000000000000..e2f88f5a7fef
--- /dev/null
+++ b/agg/source/agg_sqrt_tables.cpp
@@ -0,0 +1,115 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// static tables for fast integer sqrt
+//
+//----------------------------------------------------------------------------
+
+#include "agg_basics.h"
+
+namespace agg
+{
+ int16u g_sqrt_table[1024] =
+ {
+ 0,
+ 2048,2896,3547,4096,4579,5017,5418,5793,6144,6476,6792,7094,7384,7663,7932,8192,8444,
+ 8689,8927,9159,9385,9606,9822,10033,10240,10443,10642,10837,11029,11217,11403,11585,
+ 11765,11942,12116,12288,12457,12625,12790,12953,13114,13273,13430,13585,13738,13890,
+ 14040,14189,14336,14482,14626,14768,14910,15050,15188,15326,15462,15597,15731,15864,
+ 15995,16126,16255,16384,16512,16638,16764,16888,17012,17135,17257,17378,17498,17618,
+ 17736,17854,17971,18087,18203,18318,18432,18545,18658,18770,18882,18992,19102,19212,
+ 19321,19429,19537,19644,19750,19856,19961,20066,20170,20274,20377,20480,20582,20684,
+ 20785,20886,20986,21085,21185,21283,21382,21480,21577,21674,21771,21867,21962,22058,
+ 22153,22247,22341,22435,22528,22621,22713,22806,22897,22989,23080,23170,23261,23351,
+ 23440,23530,23619,23707,23796,23884,23971,24059,24146,24232,24319,24405,24491,24576,
+ 24661,24746,24831,24915,24999,25083,25166,25249,25332,25415,25497,25580,25661,25743,
+ 25824,25905,25986,26067,26147,26227,26307,26387,26466,26545,26624,26703,26781,26859,
+ 26937,27015,27092,27170,27247,27324,27400,27477,27553,27629,27705,27780,27856,27931,
+ 28006,28081,28155,28230,28304,28378,28452,28525,28599,28672,28745,28818,28891,28963,
+ 29035,29108,29180,29251,29323,29394,29466,29537,29608,29678,29749,29819,29890,29960,
+ 30030,30099,30169,30238,30308,30377,30446,30515,30583,30652,30720,30788,30856,30924,
+ 30992,31059,31127,31194,31261,31328,31395,31462,31529,31595,31661,31727,31794,31859,
+ 31925,31991,32056,32122,32187,32252,32317,32382,32446,32511,32575,32640,32704,32768,
+ 32832,32896,32959,33023,33086,33150,33213,33276,33339,33402,33465,33527,33590,33652,
+ 33714,33776,33839,33900,33962,34024,34086,34147,34208,34270,34331,34392,34453,34514,
+ 34574,34635,34695,34756,34816,34876,34936,34996,35056,35116,35176,35235,35295,35354,
+ 35413,35472,35531,35590,35649,35708,35767,35825,35884,35942,36001,36059,36117,36175,
+ 36233,36291,36348,36406,36464,36521,36578,36636,36693,36750,36807,36864,36921,36978,
+ 37034,37091,37147,37204,37260,37316,37372,37429,37485,37540,37596,37652,37708,37763,
+ 37819,37874,37929,37985,38040,38095,38150,38205,38260,38315,38369,38424,38478,38533,
+ 38587,38642,38696,38750,38804,38858,38912,38966,39020,39073,39127,39181,39234,39287,
+ 39341,39394,39447,39500,39553,39606,39659,39712,39765,39818,39870,39923,39975,40028,
+ 40080,40132,40185,40237,40289,40341,40393,40445,40497,40548,40600,40652,40703,40755,
+ 40806,40857,40909,40960,41011,41062,41113,41164,41215,41266,41317,41368,41418,41469,
+ 41519,41570,41620,41671,41721,41771,41821,41871,41922,41972,42021,42071,42121,42171,
+ 42221,42270,42320,42369,42419,42468,42518,42567,42616,42665,42714,42763,42813,42861,
+ 42910,42959,43008,43057,43105,43154,43203,43251,43300,43348,43396,43445,43493,43541,
+ 43589,43637,43685,43733,43781,43829,43877,43925,43972,44020,44068,44115,44163,44210,
+ 44258,44305,44352,44400,44447,44494,44541,44588,44635,44682,44729,44776,44823,44869,
+ 44916,44963,45009,45056,45103,45149,45195,45242,45288,45334,45381,45427,45473,45519,
+ 45565,45611,45657,45703,45749,45795,45840,45886,45932,45977,46023,46069,46114,46160,
+ 46205,46250,46296,46341,46386,46431,46477,46522,46567,46612,46657,46702,46746,46791,
+ 46836,46881,46926,46970,47015,47059,47104,47149,47193,47237,47282,47326,47370,47415,
+ 47459,47503,47547,47591,47635,47679,47723,47767,47811,47855,47899,47942,47986,48030,
+ 48074,48117,48161,48204,48248,48291,48335,48378,48421,48465,48508,48551,48594,48637,
+ 48680,48723,48766,48809,48852,48895,48938,48981,49024,49067,49109,49152,49195,49237,
+ 49280,49322,49365,49407,49450,49492,49535,49577,49619,49661,49704,49746,49788,49830,
+ 49872,49914,49956,49998,50040,50082,50124,50166,50207,50249,50291,50332,50374,50416,
+ 50457,50499,50540,50582,50623,50665,50706,50747,50789,50830,50871,50912,50954,50995,
+ 51036,51077,51118,51159,51200,51241,51282,51323,51364,51404,51445,51486,51527,51567,
+ 51608,51649,51689,51730,51770,51811,51851,51892,51932,51972,52013,52053,52093,52134,
+ 52174,52214,52254,52294,52334,52374,52414,52454,52494,52534,52574,52614,52654,52694,
+ 52734,52773,52813,52853,52892,52932,52972,53011,53051,53090,53130,53169,53209,53248,
+ 53287,53327,53366,53405,53445,53484,53523,53562,53601,53640,53679,53719,53758,53797,
+ 53836,53874,53913,53952,53991,54030,54069,54108,54146,54185,54224,54262,54301,54340,
+ 54378,54417,54455,54494,54532,54571,54609,54647,54686,54724,54762,54801,54839,54877,
+ 54915,54954,54992,55030,55068,55106,55144,55182,55220,55258,55296,55334,55372,55410,
+ 55447,55485,55523,55561,55599,55636,55674,55712,55749,55787,55824,55862,55900,55937,
+ 55975,56012,56049,56087,56124,56162,56199,56236,56273,56311,56348,56385,56422,56459,
+ 56497,56534,56571,56608,56645,56682,56719,56756,56793,56830,56867,56903,56940,56977,
+ 57014,57051,57087,57124,57161,57198,57234,57271,57307,57344,57381,57417,57454,57490,
+ 57527,57563,57599,57636,57672,57709,57745,57781,57817,57854,57890,57926,57962,57999,
+ 58035,58071,58107,58143,58179,58215,58251,58287,58323,58359,58395,58431,58467,58503,
+ 58538,58574,58610,58646,58682,58717,58753,58789,58824,58860,58896,58931,58967,59002,
+ 59038,59073,59109,59144,59180,59215,59251,59286,59321,59357,59392,59427,59463,59498,
+ 59533,59568,59603,59639,59674,59709,59744,59779,59814,59849,59884,59919,59954,59989,
+ 60024,60059,60094,60129,60164,60199,60233,60268,60303,60338,60373,60407,60442,60477,
+ 60511,60546,60581,60615,60650,60684,60719,60753,60788,60822,60857,60891,60926,60960,
+ 60995,61029,61063,61098,61132,61166,61201,61235,61269,61303,61338,61372,61406,61440,
+ 61474,61508,61542,61576,61610,61644,61678,61712,61746,61780,61814,61848,61882,61916,
+ 61950,61984,62018,62051,62085,62119,62153,62186,62220,62254,62287,62321,62355,62388,
+ 62422,62456,62489,62523,62556,62590,62623,62657,62690,62724,62757,62790,62824,62857,
+ 62891,62924,62957,62991,63024,63057,63090,63124,63157,63190,63223,63256,63289,63323,
+ 63356,63389,63422,63455,63488,63521,63554,63587,63620,63653,63686,63719,63752,63785,
+ 63817,63850,63883,63916,63949,63982,64014,64047,64080,64113,64145,64178,64211,64243,
+ 64276,64309,64341,64374,64406,64439,64471,64504,64536,64569,64601,64634,64666,64699,
+ 64731,64763,64796,64828,64861,64893,64925,64957,64990,65022,65054,65086,65119,65151,
+ 65183,65215,65247,65279,65312,65344,65376,65408,65440,65472,65504
+ };
+
+
+ int8 g_elder_bit_table[256] =
+ {
+ 0,0,1,1,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
+ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+ 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
+ 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
+ 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
+ 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
+ 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
+ 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7
+ };
+
+}
diff --git a/agg/source/agg_trans_affine.cpp b/agg/source/agg_trans_affine.cpp
new file mode 100755
index 000000000000..f81050d3e42f
--- /dev/null
+++ b/agg/source/agg_trans_affine.cpp
@@ -0,0 +1,195 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// Affine transformations
+//
+//----------------------------------------------------------------------------
+#include "agg_trans_affine.h"
+
+
+
+namespace agg
+{
+
+ //------------------------------------------------------------------------
+ const trans_affine& trans_affine::parl_to_parl(const double* src,
+ const double* dst)
+ {
+ m0 = src[2] - src[0];
+ m1 = src[3] - src[1];
+ m2 = src[4] - src[0];
+ m3 = src[5] - src[1];
+ m4 = src[0];
+ m5 = src[1];
+ invert();
+ multiply(trans_affine(dst[2] - dst[0], dst[3] - dst[1],
+ dst[4] - dst[0], dst[5] - dst[1],
+ dst[0], dst[1]));
+ return *this;
+ }
+
+ //------------------------------------------------------------------------
+ const trans_affine& trans_affine::rect_to_parl(double x1, double y1,
+ double x2, double y2,
+ const double* parl)
+ {
+ double src[6];
+ src[0] = x1; src[1] = y1;
+ src[2] = x2; src[3] = y1;
+ src[4] = x2; src[5] = y2;
+ parl_to_parl(src, parl);
+ return *this;
+ }
+
+ //------------------------------------------------------------------------
+ const trans_affine& trans_affine::parl_to_rect(const double* parl,
+ double x1, double y1,
+ double x2, double y2)
+ {
+ double dst[6];
+ dst[0] = x1; dst[1] = y1;
+ dst[2] = x2; dst[3] = y1;
+ dst[4] = x2; dst[5] = y2;
+ parl_to_parl(parl, dst);
+ return *this;
+ }
+
+ //------------------------------------------------------------------------
+ const trans_affine& trans_affine::multiply(const trans_affine& m)
+ {
+ double t0 = m0 * m.m0 + m1 * m.m2;
+ double t2 = m2 * m.m0 + m3 * m.m2;
+ double t4 = m4 * m.m0 + m5 * m.m2 + m.m4;
+ m1 = m0 * m.m1 + m1 * m.m3;
+ m3 = m2 * m.m1 + m3 * m.m3;
+ m5 = m4 * m.m1 + m5 * m.m3 + m.m5;
+ m0 = t0;
+ m2 = t2;
+ m4 = t4;
+ return *this;
+ }
+
+
+ //------------------------------------------------------------------------
+ const trans_affine& trans_affine::invert()
+ {
+ double d = determinant();
+
+ double t0 = m3 * d;
+ m3 = m0 * d;
+ m1 = -m1 * d;
+ m2 = -m2 * d;
+
+ double t4 = -m4 * t0 - m5 * m2;
+ m5 = -m4 * m1 - m5 * m3;
+
+ m0 = t0;
+ m4 = t4;
+ return *this;
+ }
+
+
+ //------------------------------------------------------------------------
+ const trans_affine& trans_affine::flip_x()
+ {
+ m0 = -m0;
+ m1 = -m1;
+ m4 = -m4;
+ return *this;
+ }
+
+ //------------------------------------------------------------------------
+ const trans_affine& trans_affine::flip_y()
+ {
+ m2 = -m2;
+ m3 = -m3;
+ m5 = -m5;
+ return *this;
+ }
+
+ //------------------------------------------------------------------------
+ const trans_affine& trans_affine::reset()
+ {
+ m0 = m3 = 1.0;
+ m1 = m2 = m4 = m5 = 0.0;
+ return *this;
+ }
+
+ //------------------------------------------------------------------------
+ inline bool is_equal_eps(double v1, double v2, double epsilon)
+ {
+ return fabs(v1 - v2) < epsilon;
+ }
+
+ //------------------------------------------------------------------------
+ bool trans_affine::is_identity(double epsilon) const
+ {
+ return is_equal_eps(m0, 1.0, epsilon) &&
+ is_equal_eps(m1, 0.0, epsilon) &&
+ is_equal_eps(m2, 0.0, epsilon) &&
+ is_equal_eps(m3, 1.0, epsilon) &&
+ is_equal_eps(m4, 0.0, epsilon) &&
+ is_equal_eps(m5, 0.0, epsilon);
+ }
+
+ //------------------------------------------------------------------------
+ bool trans_affine::is_equal(const trans_affine& m, double epsilon) const
+ {
+ return is_equal_eps(m0, m.m0, epsilon) &&
+ is_equal_eps(m1, m.m1, epsilon) &&
+ is_equal_eps(m2, m.m2, epsilon) &&
+ is_equal_eps(m3, m.m3, epsilon) &&
+ is_equal_eps(m4, m.m4, epsilon) &&
+ is_equal_eps(m5, m.m5, epsilon);
+ }
+
+ //------------------------------------------------------------------------
+ double trans_affine::rotation() const
+ {
+ double x1 = 0.0;
+ double y1 = 0.0;
+ double x2 = 1.0;
+ double y2 = 0.0;
+ transform(&x1, &y1);
+ transform(&x2, &y2);
+ return atan2(y2-y1, x2-x1);
+ }
+
+ //------------------------------------------------------------------------
+ void trans_affine::translation(double* dx, double* dy) const
+ {
+ trans_affine t(*this);
+ t *= trans_affine_rotation(-rotation());
+ t.transform(dx, dy);
+ }
+
+ //------------------------------------------------------------------------
+ void trans_affine::scaling(double* sx, double* sy) const
+ {
+ double x1 = 0.0;
+ double y1 = 0.0;
+ double x2 = 1.0;
+ double y2 = 1.0;
+ trans_affine t(*this);
+ t *= trans_affine_rotation(-rotation());
+ t.transform(&x1, &y1);
+ t.transform(&x2, &y2);
+ *sx = x2 - x1;
+ *sy = y2 - y1;
+ }
+
+
+}
+
diff --git a/agg/source/agg_trans_double_path.cpp b/agg/source/agg_trans_double_path.cpp
new file mode 100755
index 000000000000..5fc83ea50391
--- /dev/null
+++ b/agg/source/agg_trans_double_path.cpp
@@ -0,0 +1,273 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+
+#include "agg_math.h"
+#include "agg_trans_double_path.h"
+
+namespace agg
+{
+
+ //------------------------------------------------------------------------
+ trans_double_path::trans_double_path() :
+ m_base_length(0.0),
+ m_base_height(1.0),
+ m_kindex1(0.0),
+ m_kindex2(0.0),
+ m_status1(initial),
+ m_status2(initial),
+ m_preserve_x_scale(true)
+ {
+ }
+
+
+ //------------------------------------------------------------------------
+ void trans_double_path::reset()
+ {
+ m_src_vertices1.remove_all();
+ m_src_vertices2.remove_all();
+ m_kindex1 = 0.0;
+ m_kindex1 = 0.0;
+ m_status1 = initial;
+ m_status2 = initial;
+ }
+
+
+ //------------------------------------------------------------------------
+ void trans_double_path::move_to1(double x, double y)
+ {
+ if(m_status1 == initial)
+ {
+ m_src_vertices1.modify_last(vertex_dist(x, y));
+ m_status1 = making_path;
+ }
+ else
+ {
+ line_to1(x, y);
+ }
+ }
+
+
+ //------------------------------------------------------------------------
+ void trans_double_path::line_to1(double x, double y)
+ {
+ if(m_status1 == making_path)
+ {
+ m_src_vertices1.add(vertex_dist(x, y));
+ }
+ }
+
+
+ //------------------------------------------------------------------------
+ void trans_double_path::move_to2(double x, double y)
+ {
+ if(m_status2 == initial)
+ {
+ m_src_vertices2.modify_last(vertex_dist(x, y));
+ m_status2 = making_path;
+ }
+ else
+ {
+ line_to2(x, y);
+ }
+ }
+
+
+ //------------------------------------------------------------------------
+ void trans_double_path::line_to2(double x, double y)
+ {
+ if(m_status2 == making_path)
+ {
+ m_src_vertices2.add(vertex_dist(x, y));
+ }
+ }
+
+
+ //------------------------------------------------------------------------
+ double trans_double_path::finalize_path(vertex_storage& vertices)
+ {
+ unsigned i;
+ double dist;
+ double d;
+
+ if(vertices.size() > 2)
+ {
+ if(vertices[vertices.size() - 2].dist * 10.0 <
+ vertices[vertices.size() - 3].dist)
+ {
+ d = vertices[vertices.size() - 3].dist +
+ vertices[vertices.size() - 2].dist;
+
+ vertices[vertices.size() - 2] =
+ vertices[vertices.size() - 1];
+
+ vertices.remove_last();
+ vertices[vertices.size() - 2].dist = d;
+ }
+ }
+
+ dist = 0;
+ vertices.close(false);
+ for(i = 0; i < vertices.size(); i++)
+ {
+ vertex_dist& v = vertices[i];
+ d = v.dist;
+ v.dist = dist;
+ dist += d;
+ }
+
+ return (vertices.size() - 1) / dist;
+ }
+
+
+ //------------------------------------------------------------------------
+ void trans_double_path::finalize_paths()
+ {
+ if(m_status1 == making_path && m_src_vertices1.size() > 1 &&
+ m_status2 == making_path && m_src_vertices2.size() > 1)
+ {
+ m_kindex1 = finalize_path(m_src_vertices1);
+ m_kindex2 = finalize_path(m_src_vertices2);
+ m_status1 = ready;
+ m_status2 = ready;
+ }
+ }
+
+
+ //------------------------------------------------------------------------
+ double trans_double_path::total_length1() const
+ {
+ if(m_base_length >= 1e-10) return m_base_length;
+ return (m_status1 == ready) ?
+ m_src_vertices1[m_src_vertices1.size() - 1].dist :
+ 0.0;
+ }
+
+
+ //------------------------------------------------------------------------
+ double trans_double_path::total_length2() const
+ {
+ if(m_base_length >= 1e-10) return m_base_length;
+ return (m_status2 == ready) ?
+ m_src_vertices2[m_src_vertices2.size() - 1].dist :
+ 0.0;
+ }
+
+
+ //------------------------------------------------------------------------
+ void trans_double_path::transform1(const vertex_storage& vertices,
+ double kindex, double kx,
+ double *x, double* y) const
+ {
+ double x1 = 0.0;
+ double y1 = 0.0;
+ double dx = 1.0;
+ double dy = 1.0;
+ double d = 0.0;
+ double dd = 1.0;
+ *x *= kx;
+ if(*x < 0.0)
+ {
+ // Extrapolation on the left
+ //--------------------------
+ x1 = vertices[0].x;
+ y1 = vertices[0].y;
+ dx = vertices[1].x - x1;
+ dy = vertices[1].y - y1;
+ dd = vertices[1].dist - vertices[0].dist;
+ d = *x;
+ }
+ else
+ if(*x > vertices[vertices.size() - 1].dist)
+ {
+ // Extrapolation on the right
+ //--------------------------
+ unsigned i = vertices.size() - 2;
+ unsigned j = vertices.size() - 1;
+ x1 = vertices[j].x;
+ y1 = vertices[j].y;
+ dx = x1 - vertices[i].x;
+ dy = y1 - vertices[i].y;
+ dd = vertices[j].dist - vertices[i].dist;
+ d = *x - vertices[j].dist;
+ }
+ else
+ {
+ // Interpolation
+ //--------------------------
+ unsigned i = 0;
+ unsigned j = vertices.size() - 1;
+ if(m_preserve_x_scale)
+ {
+ unsigned k;
+ for(i = 0; (j - i) > 1; )
+ {
+ if(*x < vertices[k = (i + j) >> 1].dist)
+ {
+ j = k;
+ }
+ else
+ {
+ i = k;
+ }
+ }
+ d = vertices[i].dist;
+ dd = vertices[j].dist - d;
+ d = *x - d;
+ }
+ else
+ {
+ i = (unsigned)floor(*x * kindex);
+ j = i + 1;
+ dd = vertices[j].dist - vertices[i].dist;
+ d = ((*x * kindex) - i) * dd;
+ }
+ x1 = vertices[i].x;
+ y1 = vertices[i].y;
+ dx = vertices[j].x - x1;
+ dy = vertices[j].y - y1;
+ }
+ *x = x1 + dx * d / dd;
+ *y = y1 + dy * d / dd;
+ }
+
+
+ //------------------------------------------------------------------------
+ void trans_double_path::transform(double *x, double *y) const
+ {
+ if(m_status1 == ready && m_status2 == ready)
+ {
+ if(m_base_length > 1e-10)
+ {
+ *x *= m_src_vertices1[m_src_vertices1.size() - 1].dist /
+ m_base_length;
+ }
+
+ double x1 = *x;
+ double y1 = *y;
+ double x2 = *x;
+ double y2 = *y;
+ double dd = m_src_vertices2[m_src_vertices2.size() - 1].dist /
+ m_src_vertices1[m_src_vertices1.size() - 1].dist;
+
+ transform1(m_src_vertices1, m_kindex1, 1.0, &x1, &y1);
+ transform1(m_src_vertices2, m_kindex2, dd, &x2, &y2);
+
+ *x = x1 + *y * (x2 - x1) / m_base_height;
+ *y = y1 + *y * (y2 - y1) / m_base_height;
+ }
+ }
+
+}
+
diff --git a/agg/source/agg_trans_single_path.cpp b/agg/source/agg_trans_single_path.cpp
new file mode 100755
index 000000000000..cc4fb5356267
--- /dev/null
+++ b/agg/source/agg_trans_single_path.cpp
@@ -0,0 +1,202 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+
+#include "agg_math.h"
+#include "agg_vertex_sequence.h"
+#include "agg_trans_single_path.h"
+
+namespace agg
+{
+
+ //------------------------------------------------------------------------
+ trans_single_path::trans_single_path() :
+ m_base_length(0.0),
+ m_kindex(0.0),
+ m_status(initial),
+ m_preserve_x_scale(true)
+ {
+ }
+
+ //------------------------------------------------------------------------
+ void trans_single_path::reset()
+ {
+ m_src_vertices.remove_all();
+ m_kindex = 0.0;
+ m_status = initial;
+ }
+
+ //------------------------------------------------------------------------
+ void trans_single_path::move_to(double x, double y)
+ {
+ if(m_status == initial)
+ {
+ m_src_vertices.modify_last(vertex_dist(x, y));
+ m_status = making_path;
+ }
+ else
+ {
+ line_to(x, y);
+ }
+ }
+
+ //------------------------------------------------------------------------
+ void trans_single_path::line_to(double x, double y)
+ {
+ if(m_status == making_path)
+ {
+ m_src_vertices.add(vertex_dist(x, y));
+ }
+ }
+
+
+ //------------------------------------------------------------------------
+ void trans_single_path::finalize_path()
+ {
+ if(m_status == making_path && m_src_vertices.size() > 1)
+ {
+ unsigned i;
+ double dist;
+ double d;
+
+ if(m_src_vertices.size() > 2)
+ {
+ if(m_src_vertices[m_src_vertices.size() - 2].dist * 10.0 <
+ m_src_vertices[m_src_vertices.size() - 3].dist)
+ {
+ d = m_src_vertices[m_src_vertices.size() - 3].dist +
+ m_src_vertices[m_src_vertices.size() - 2].dist;
+
+ m_src_vertices[m_src_vertices.size() - 2] =
+ m_src_vertices[m_src_vertices.size() - 1];
+
+ m_src_vertices.remove_last();
+ m_src_vertices[m_src_vertices.size() - 2].dist = d;
+ }
+ }
+
+ dist = 0.0;
+ m_src_vertices.close(false);
+ for(i = 0; i < m_src_vertices.size(); i++)
+ {
+ vertex_dist& v = m_src_vertices[i];
+ double _d = v.dist;
+ v.dist = dist;
+ dist += _d;
+ }
+ m_kindex = (m_src_vertices.size() - 1) / dist;
+ m_status = ready;
+ }
+ }
+
+
+
+ //------------------------------------------------------------------------
+ double trans_single_path::total_length() const
+ {
+ if(m_base_length >= 1e-10) return m_base_length;
+ return (m_status == ready) ?
+ m_src_vertices[m_src_vertices.size() - 1].dist :
+ 0.0;
+ }
+
+
+ //------------------------------------------------------------------------
+ void trans_single_path::transform(double *x, double *y) const
+ {
+ if(m_status == ready)
+ {
+ if(m_base_length > 1e-10)
+ {
+ *x *= m_src_vertices[m_src_vertices.size() - 1].dist /
+ m_base_length;
+ }
+
+ double x1 = 0.0;
+ double y1 = 0.0;
+ double dx = 1.0;
+ double dy = 1.0;
+ double d = 0.0;
+ double dd = 1.0;
+ if(*x < 0.0)
+ {
+ // Extrapolation on the left
+ //--------------------------
+ x1 = m_src_vertices[0].x;
+ y1 = m_src_vertices[0].y;
+ dx = m_src_vertices[1].x - x1;
+ dy = m_src_vertices[1].y - y1;
+ dd = m_src_vertices[1].dist - m_src_vertices[0].dist;
+ d = *x;
+ }
+ else
+ if(*x > m_src_vertices[m_src_vertices.size() - 1].dist)
+ {
+ // Extrapolation on the right
+ //--------------------------
+ unsigned i = m_src_vertices.size() - 2;
+ unsigned j = m_src_vertices.size() - 1;
+ x1 = m_src_vertices[j].x;
+ y1 = m_src_vertices[j].y;
+ dx = x1 - m_src_vertices[i].x;
+ dy = y1 - m_src_vertices[i].y;
+ dd = m_src_vertices[j].dist - m_src_vertices[i].dist;
+ d = *x - m_src_vertices[j].dist;
+ }
+ else
+ {
+ // Interpolation
+ //--------------------------
+ unsigned i = 0;
+ unsigned j = m_src_vertices.size() - 1;
+ if(m_preserve_x_scale)
+ {
+ unsigned k;
+ for(i = 0; (j - i) > 1; )
+ {
+ if(*x < m_src_vertices[k = (i + j) >> 1].dist)
+ {
+ j = k;
+ }
+ else
+ {
+ i = k;
+ }
+ }
+ d = m_src_vertices[i].dist;
+ dd = m_src_vertices[j].dist - d;
+ d = *x - d;
+ }
+ else
+ {
+ i = (unsigned)floor(*x * m_kindex);
+ j = i + 1;
+ dd = m_src_vertices[j].dist - m_src_vertices[i].dist;
+ d = ((*x * m_kindex) - i) * dd;
+ }
+ x1 = m_src_vertices[i].x;
+ y1 = m_src_vertices[i].y;
+ dx = m_src_vertices[j].x - x1;
+ dy = m_src_vertices[j].y - y1;
+ }
+ double x2 = x1 + dx * d / dd;
+ double y2 = y1 + dy * d / dd;
+ *x = x2 - *y * dy / dd;
+ *y = y2 + *y * dx / dd;
+ }
+ }
+
+
+}
+
diff --git a/agg/source/agg_trans_warp_magnifier.cpp b/agg/source/agg_trans_warp_magnifier.cpp
new file mode 100755
index 000000000000..4f9d28233907
--- /dev/null
+++ b/agg/source/agg_trans_warp_magnifier.cpp
@@ -0,0 +1,50 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+
+#include <math.h>
+#include "agg_trans_warp_magnifier.h"
+
+namespace agg
+{
+
+ //------------------------------------------------------------------------
+ void trans_warp_magnifier::transform(double* x, double* y) const
+ {
+ double dx = *x - m_xc;
+ double dy = *y - m_yc;
+ double r = sqrt(dx * dx + dy * dy);
+ if(r < m_radius)
+ {
+ *x = m_xc + dx * m_magn;
+ *y = m_yc + dy * m_magn;
+ return;
+ }
+
+ double m = (r + m_radius * (m_magn - 1.0)) / r;
+ *x = m_xc + dx * m;
+ *y = m_yc + dy * m;
+ }
+
+ //------------------------------------------------------------------------
+ void trans_warp_magnifier::inverse_transform(double* x, double* y) const
+ {
+ trans_warp_magnifier t(*this);
+ t.magnification(1.0 / m_magn);
+ t.radius(m_radius * m_magn);
+ t.transform(x, y);
+ }
+
+
+}
diff --git a/agg/source/agg_vcgen_bspline.cpp b/agg/source/agg_vcgen_bspline.cpp
new file mode 100755
index 000000000000..9ca4df9b44f4
--- /dev/null
+++ b/agg/source/agg_vcgen_bspline.cpp
@@ -0,0 +1,194 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+
+#include "agg_vcgen_bspline.h"
+
+namespace agg
+{
+
+ //------------------------------------------------------------------------
+ vcgen_bspline::vcgen_bspline() :
+ m_src_vertices(),
+ m_spline_x(),
+ m_spline_y(),
+ m_interpolation_step(1.0/50.0),
+ m_closed(0),
+ m_status(initial),
+ m_src_vertex(0)
+ {
+ }
+
+
+ //------------------------------------------------------------------------
+ void vcgen_bspline::remove_all()
+ {
+ m_src_vertices.remove_all();
+ m_closed = 0;
+ m_status = initial;
+ m_src_vertex = 0;
+ }
+
+
+ //------------------------------------------------------------------------
+ void vcgen_bspline::add_vertex(double x, double y, unsigned cmd)
+ {
+ m_status = initial;
+ if(is_move_to(cmd))
+ {
+ m_src_vertices.modify_last(point_type(x, y));
+ }
+ else
+ {
+ if(is_vertex(cmd))
+ {
+ m_src_vertices.add(point_type(x, y));
+ }
+ else
+ {
+ m_closed = get_close_flag(cmd);
+ }
+ }
+ }
+
+
+ //------------------------------------------------------------------------
+ void vcgen_bspline::rewind(unsigned)
+ {
+ m_cur_abscissa = 0.0;
+ m_max_abscissa = 0.0;
+ m_src_vertex = 0;
+ if(m_status == initial && m_src_vertices.size() > 2)
+ {
+ if(m_closed)
+ {
+ m_spline_x.init(m_src_vertices.size() + 8);
+ m_spline_y.init(m_src_vertices.size() + 8);
+ m_spline_x.add_point(0.0, m_src_vertices.prev(m_src_vertices.size() - 3).x);
+ m_spline_y.add_point(0.0, m_src_vertices.prev(m_src_vertices.size() - 3).y);
+ m_spline_x.add_point(1.0, m_src_vertices[m_src_vertices.size() - 3].x);
+ m_spline_y.add_point(1.0, m_src_vertices[m_src_vertices.size() - 3].y);
+ m_spline_x.add_point(2.0, m_src_vertices[m_src_vertices.size() - 2].x);
+ m_spline_y.add_point(2.0, m_src_vertices[m_src_vertices.size() - 2].y);
+ m_spline_x.add_point(3.0, m_src_vertices[m_src_vertices.size() - 1].x);
+ m_spline_y.add_point(3.0, m_src_vertices[m_src_vertices.size() - 1].y);
+ }
+ else
+ {
+ m_spline_x.init(m_src_vertices.size());
+ m_spline_y.init(m_src_vertices.size());
+ }
+ unsigned i;
+ for(i = 0; i < m_src_vertices.size(); i++)
+ {
+ double x = m_closed ? i + 4 : i;
+ m_spline_x.add_point(x, m_src_vertices[i].x);
+ m_spline_y.add_point(x, m_src_vertices[i].y);
+ }
+ m_cur_abscissa = 0.0;
+ m_max_abscissa = m_src_vertices.size() - 1;
+ if(m_closed)
+ {
+ m_cur_abscissa = 4.0;
+ m_max_abscissa += 5.0;
+ m_spline_x.add_point(m_src_vertices.size() + 4, m_src_vertices[0].x);
+ m_spline_y.add_point(m_src_vertices.size() + 4, m_src_vertices[0].y);
+ m_spline_x.add_point(m_src_vertices.size() + 5, m_src_vertices[1].x);
+ m_spline_y.add_point(m_src_vertices.size() + 5, m_src_vertices[1].y);
+ m_spline_x.add_point(m_src_vertices.size() + 6, m_src_vertices[2].x);
+ m_spline_y.add_point(m_src_vertices.size() + 6, m_src_vertices[2].y);
+ m_spline_x.add_point(m_src_vertices.size() + 7, m_src_vertices.next(2).x);
+ m_spline_y.add_point(m_src_vertices.size() + 7, m_src_vertices.next(2).y);
+ }
+ m_spline_x.prepare();
+ m_spline_y.prepare();
+ m_status = ready;
+ }
+ }
+
+
+
+
+
+
+ //------------------------------------------------------------------------
+ unsigned vcgen_bspline::vertex(double* x, double* y)
+ {
+ unsigned cmd = path_cmd_line_to;
+ while(!is_stop(cmd))
+ {
+ switch(m_status)
+ {
+ case initial:
+ rewind(0);
+
+ case ready:
+ if(m_src_vertices.size() < 2)
+ {
+ cmd = path_cmd_stop;
+ break;
+ }
+
+ if(m_src_vertices.size() == 2)
+ {
+ *x = m_src_vertices[m_src_vertex].x;
+ *y = m_src_vertices[m_src_vertex].y;
+ m_src_vertex++;
+ if(m_src_vertex == 1) return path_cmd_move_to;
+ if(m_src_vertex == 2) return path_cmd_line_to;
+ cmd = path_cmd_stop;
+ break;
+ }
+
+ cmd = path_cmd_move_to;
+ m_status = polygon;
+ m_src_vertex = 0;
+
+ case polygon:
+ if(m_cur_abscissa >= m_max_abscissa)
+ {
+ if(m_closed)
+ {
+ m_status = end_poly;
+ break;
+ }
+ else
+ {
+ *x = m_src_vertices[m_src_vertices.size() - 1].x;
+ *y = m_src_vertices[m_src_vertices.size() - 1].y;
+ m_status = end_poly;
+ return path_cmd_line_to;
+ }
+ }
+
+ *x = m_spline_x.get_stateful(m_cur_abscissa);
+ *y = m_spline_y.get_stateful(m_cur_abscissa);
+ m_src_vertex++;
+ m_cur_abscissa += m_interpolation_step;
+ return (m_src_vertex == 1) ? path_cmd_move_to : path_cmd_line_to;
+
+ case end_poly:
+ m_status = stop;
+ return path_cmd_end_poly | m_closed;
+
+ case stop:
+ return path_cmd_stop;
+ }
+ }
+ return cmd;
+ }
+
+
+}
+
diff --git a/agg/source/agg_vcgen_contour.cpp b/agg/source/agg_vcgen_contour.cpp
new file mode 100755
index 000000000000..979407417e75
--- /dev/null
+++ b/agg/source/agg_vcgen_contour.cpp
@@ -0,0 +1,191 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// Contour generator
+//
+//----------------------------------------------------------------------------
+
+#include <math.h>
+#include "agg_vcgen_contour.h"
+
+namespace agg
+{
+
+ //------------------------------------------------------------------------
+ vcgen_contour::vcgen_contour() :
+ m_src_vertices(),
+ m_out_vertices(),
+ m_width(1.0),
+ m_line_join(bevel_join),
+ m_inner_line_join(miter_join_revert),
+ m_approx_scale(1.0),
+ m_abs_width(1.0),
+ m_signed_width(1.0),
+ m_miter_limit(4.0),
+ m_inner_miter_limit(1.0 + 1.0/64.0),
+ m_status(initial),
+ m_src_vertex(0),
+ m_closed(0),
+ m_orientation(0),
+ m_auto_detect(false)
+ {
+ }
+
+
+ //------------------------------------------------------------------------
+ void vcgen_contour::remove_all()
+ {
+ m_src_vertices.remove_all();
+ m_closed = 0;
+ m_orientation = 0;
+ m_abs_width = fabs(m_width);
+ m_signed_width = m_width;
+ m_status = initial;
+ }
+
+
+ //------------------------------------------------------------------------
+ void vcgen_contour::miter_limit_theta(double t)
+ {
+ m_miter_limit = 1.0 / sin(t * 0.5) ;
+ }
+
+
+ //------------------------------------------------------------------------
+ void vcgen_contour::add_vertex(double x, double y, unsigned cmd)
+ {
+ m_status = initial;
+ if(is_move_to(cmd))
+ {
+ m_src_vertices.modify_last(vertex_dist(x, y));
+ }
+ else
+ {
+ if(is_vertex(cmd))
+ {
+ m_src_vertices.add(vertex_dist(x, y));
+ }
+ else
+ {
+ if(is_end_poly(cmd))
+ {
+ m_closed = get_close_flag(cmd);
+ if(m_orientation == path_flags_none)
+ {
+ m_orientation = get_orientation(cmd);
+ }
+ }
+ }
+ }
+ }
+
+
+ //------------------------------------------------------------------------
+ void vcgen_contour::rewind(unsigned)
+ {
+ if(m_status == initial)
+ {
+ m_src_vertices.close(true);
+ m_signed_width = m_width;
+ if(m_auto_detect)
+ {
+ if(!is_oriented(m_orientation))
+ {
+ m_orientation = (calc_polygon_area(m_src_vertices) > 0.0) ?
+ path_flags_ccw :
+ path_flags_cw;
+ }
+ }
+ if(is_oriented(m_orientation))
+ {
+ m_signed_width = is_ccw(m_orientation) ? m_width : -m_width;
+ }
+ }
+ m_status = ready;
+ m_src_vertex = 0;
+ }
+
+
+ //------------------------------------------------------------------------
+ unsigned vcgen_contour::vertex(double* x, double* y)
+ {
+ unsigned cmd = path_cmd_line_to;
+ while(!is_stop(cmd))
+ {
+ switch(m_status)
+ {
+ case initial:
+ rewind(0);
+
+ case ready:
+ if(m_src_vertices.size() < 2 + unsigned(m_closed != 0))
+ {
+ cmd = path_cmd_stop;
+ break;
+ }
+ m_status = outline;
+ cmd = path_cmd_move_to;
+ m_src_vertex = 0;
+ m_out_vertex = 0;
+
+ case outline:
+ if(m_src_vertex >= m_src_vertices.size())
+ {
+ m_status = end_poly;
+ break;
+ }
+ stroke_calc_join(m_out_vertices,
+ m_src_vertices.prev(m_src_vertex),
+ m_src_vertices.curr(m_src_vertex),
+ m_src_vertices.next(m_src_vertex),
+ m_src_vertices.prev(m_src_vertex).dist,
+ m_src_vertices.curr(m_src_vertex).dist,
+ m_signed_width,
+ m_line_join,
+ m_inner_line_join,
+ m_miter_limit,
+ m_inner_miter_limit,
+ m_approx_scale);
+ ++m_src_vertex;
+ m_status = out_vertices;
+ m_out_vertex = 0;
+
+ case out_vertices:
+ if(m_out_vertex >= m_out_vertices.size())
+ {
+ m_status = outline;
+ }
+ else
+ {
+ const point_type& c = m_out_vertices[m_out_vertex++];
+ *x = c.x;
+ *y = c.y;
+ return cmd;
+ }
+ break;
+
+ case end_poly:
+ if(!m_closed) return path_cmd_stop;
+ m_status = stop;
+ return (unsigned)path_cmd_end_poly | (unsigned)path_flags_close | (unsigned)path_flags_ccw;
+
+ case stop:
+ return path_cmd_stop;
+ }
+ }
+ return cmd;
+ }
+
+}
diff --git a/agg/source/agg_vcgen_dash.cpp b/agg/source/agg_vcgen_dash.cpp
new file mode 100755
index 000000000000..96783abe9952
--- /dev/null
+++ b/agg/source/agg_vcgen_dash.cpp
@@ -0,0 +1,237 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// Line dash generator
+//
+//----------------------------------------------------------------------------
+
+#include <math.h>
+#include "agg_vcgen_dash.h"
+#include "agg_shorten_path.h"
+
+namespace agg
+{
+
+ //------------------------------------------------------------------------
+ vcgen_dash::vcgen_dash() :
+ m_total_dash_len(0.0),
+ m_num_dashes(0),
+ m_dash_start(0.0),
+ m_shorten(0.0),
+ m_curr_dash_start(0.0),
+ m_curr_dash(0),
+ m_src_vertices(),
+ m_closed(0),
+ m_status(initial),
+ m_src_vertex(0)
+ {
+ }
+
+
+
+ //------------------------------------------------------------------------
+ void vcgen_dash::remove_all_dashes()
+ {
+ m_total_dash_len = 0.0;
+ m_num_dashes = 0;
+ m_curr_dash_start = 0.0;
+ m_curr_dash = 0;
+ }
+
+
+ //------------------------------------------------------------------------
+ void vcgen_dash::add_dash(double dash_len, double gap_len)
+ {
+ if(m_num_dashes < max_dashes)
+ {
+ m_total_dash_len += dash_len + gap_len;
+ m_dashes[m_num_dashes++] = dash_len;
+ m_dashes[m_num_dashes++] = gap_len;
+ }
+ }
+
+
+ //------------------------------------------------------------------------
+ void vcgen_dash::dash_start(double ds)
+ {
+ m_dash_start = ds;
+ calc_dash_start(fabs(ds));
+ }
+
+
+ //------------------------------------------------------------------------
+ void vcgen_dash::calc_dash_start(double ds)
+ {
+ m_curr_dash = 0;
+ m_curr_dash_start = 0.0;
+ while(ds > 0.0)
+ {
+ if(ds > m_dashes[m_curr_dash])
+ {
+ ds -= m_dashes[m_curr_dash];
+ ++m_curr_dash;
+ m_curr_dash_start = 0.0;
+ if(m_curr_dash >= m_num_dashes) m_curr_dash = 0;
+ }
+ else
+ {
+ m_curr_dash_start = ds;
+ ds = 0.0;
+ }
+ }
+ }
+
+
+ //------------------------------------------------------------------------
+ void vcgen_dash::remove_all()
+ {
+ m_status = initial;
+ m_src_vertices.remove_all();
+ m_closed = 0;
+ }
+
+
+ //------------------------------------------------------------------------
+ void vcgen_dash::add_vertex(double x, double y, unsigned cmd)
+ {
+ m_status = initial;
+ if(is_move_to(cmd))
+ {
+ m_src_vertices.modify_last(vertex_dist(x, y));
+ }
+ else
+ {
+ if(is_vertex(cmd))
+ {
+ m_src_vertices.add(vertex_dist(x, y));
+ }
+ else
+ {
+ m_closed = get_close_flag(cmd);
+ }
+ }
+ }
+
+
+ //------------------------------------------------------------------------
+ void vcgen_dash::rewind(unsigned)
+ {
+ if(m_status == initial)
+ {
+ m_src_vertices.close(m_closed != 0);
+ shorten_path(m_src_vertices, m_shorten, m_closed);
+ }
+ m_status = ready;
+ m_src_vertex = 0;
+ }
+
+
+ //------------------------------------------------------------------------
+ unsigned vcgen_dash::vertex(double* x, double* y)
+ {
+ unsigned cmd = path_cmd_move_to;
+ while(!is_stop(cmd))
+ {
+ switch(m_status)
+ {
+ case initial:
+ rewind(0);
+
+ case ready:
+ if(m_num_dashes < 2 || m_src_vertices.size() < 2)
+ {
+ cmd = path_cmd_stop;
+ break;
+ }
+ m_status = polyline;
+ m_src_vertex = 1;
+ m_v1 = &m_src_vertices[0];
+ m_v2 = &m_src_vertices[1];
+ m_curr_rest = m_v1->dist;
+ *x = m_v1->x;
+ *y = m_v1->y;
+ if(m_dash_start >= 0.0) calc_dash_start(m_dash_start);
+ return path_cmd_move_to;
+
+ case polyline:
+ {
+ double dash_rest = m_dashes[m_curr_dash] - m_curr_dash_start;
+
+ unsigned _cmd = (m_curr_dash & 1) ?
+ path_cmd_move_to :
+ path_cmd_line_to;
+
+ if(m_curr_rest > dash_rest)
+ {
+ m_curr_rest -= dash_rest;
+ ++m_curr_dash;
+ if(m_curr_dash >= m_num_dashes) m_curr_dash = 0;
+ m_curr_dash_start = 0.0;
+ *x = m_v2->x - (m_v2->x - m_v1->x) * m_curr_rest / m_v1->dist;
+ *y = m_v2->y - (m_v2->y - m_v1->y) * m_curr_rest / m_v1->dist;
+ }
+ else
+ {
+ m_curr_dash_start += m_curr_rest;
+ *x = m_v2->x;
+ *y = m_v2->y;
+ ++m_src_vertex;
+ m_v1 = m_v2;
+ m_curr_rest = m_v1->dist;
+ if(m_closed)
+ {
+ if(m_src_vertex > m_src_vertices.size())
+ {
+ m_status = stop;
+ }
+ else
+ {
+ m_v2 = &m_src_vertices
+ [
+ (m_src_vertex >= m_src_vertices.size()) ? 0 :
+ m_src_vertex
+ ];
+ }
+ }
+ else
+ {
+ if(m_src_vertex >= m_src_vertices.size())
+ {
+ m_status = stop;
+ }
+ else
+ {
+ m_v2 = &m_src_vertices[m_src_vertex];
+ }
+ }
+ }
+ return _cmd;
+ }
+
+ // statement unreachable
+ //break;
+
+ case stop:
+ cmd = path_cmd_stop;
+ break;
+ }
+
+ }
+ return path_cmd_stop;
+ }
+
+
+}
+
diff --git a/agg/source/agg_vcgen_markers_term.cpp b/agg/source/agg_vcgen_markers_term.cpp
new file mode 100755
index 000000000000..0daa40793764
--- /dev/null
+++ b/agg/source/agg_vcgen_markers_term.cpp
@@ -0,0 +1,103 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// Terminal markers generator (arrowhead/arrowtail)
+//
+//----------------------------------------------------------------------------
+
+#include "agg_vcgen_markers_term.h"
+
+namespace agg
+{
+
+ //------------------------------------------------------------------------
+ void vcgen_markers_term::remove_all()
+ {
+ m_markers.remove_all();
+ }
+
+
+ //------------------------------------------------------------------------
+ void vcgen_markers_term::add_vertex(double x, double y, unsigned cmd)
+ {
+ if(is_move_to(cmd))
+ {
+ if(m_markers.size() & 1)
+ {
+ // Initial state, the first coordinate was added.
+ // If two of more calls of start_vertex() occures
+ // we just modify the last one.
+ m_markers.modify_last(coord_type(x, y));
+ }
+ else
+ {
+ m_markers.add(coord_type(x, y));
+ }
+ }
+ else
+ {
+ if(is_vertex(cmd))
+ {
+ if(m_markers.size() & 1)
+ {
+ // Initial state, the first coordinate was added.
+ // Add three more points, 0,1,1,0
+ m_markers.add(coord_type(x, y));
+ m_markers.add(m_markers[m_markers.size() - 1]);
+ m_markers.add(m_markers[m_markers.size() - 3]);
+ }
+ else
+ {
+ if(m_markers.size())
+ {
+ // Replace two last points: 0,1,1,0 -> 0,1,2,1
+ m_markers[m_markers.size() - 1] = m_markers[m_markers.size() - 2];
+ m_markers[m_markers.size() - 2] = coord_type(x, y);
+ }
+ }
+ }
+ }
+ }
+
+
+ //------------------------------------------------------------------------
+ void vcgen_markers_term::rewind(unsigned id)
+ {
+ m_curr_id = id * 2;
+ m_curr_idx = m_curr_id;
+ }
+
+
+ //------------------------------------------------------------------------
+ unsigned vcgen_markers_term::vertex(double* x, double* y)
+ {
+ if(m_curr_id > 2 || m_curr_idx >= m_markers.size())
+ {
+ return path_cmd_stop;
+ }
+ const coord_type& c = m_markers[m_curr_idx];
+ *x = c.x;
+ *y = c.y;
+ if(m_curr_idx & 1)
+ {
+ m_curr_idx += 3;
+ return path_cmd_line_to;
+ }
+ ++m_curr_idx;
+ return path_cmd_move_to;
+ }
+
+
+}
diff --git a/agg/source/agg_vcgen_smooth_poly1.cpp b/agg/source/agg_vcgen_smooth_poly1.cpp
new file mode 100755
index 000000000000..1df1edb5c72c
--- /dev/null
+++ b/agg/source/agg_vcgen_smooth_poly1.cpp
@@ -0,0 +1,226 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// Smooth polygon generator
+//
+//----------------------------------------------------------------------------
+
+#include "agg_vcgen_smooth_poly1.h"
+
+namespace agg
+{
+
+ //------------------------------------------------------------------------
+ vcgen_smooth_poly1::vcgen_smooth_poly1() :
+ m_src_vertices(),
+ m_smooth_value(0.5),
+ m_closed(0),
+ m_status(initial),
+ m_src_vertex(0)
+ {
+ }
+
+
+ //------------------------------------------------------------------------
+ void vcgen_smooth_poly1::remove_all()
+ {
+ m_src_vertices.remove_all();
+ m_closed = 0;
+ m_status = initial;
+ }
+
+
+ //------------------------------------------------------------------------
+ void vcgen_smooth_poly1::add_vertex(double x, double y, unsigned cmd)
+ {
+ m_status = initial;
+ if(is_move_to(cmd))
+ {
+ m_src_vertices.modify_last(vertex_dist(x, y));
+ }
+ else
+ {
+ if(is_vertex(cmd))
+ {
+ m_src_vertices.add(vertex_dist(x, y));
+ }
+ else
+ {
+ m_closed = get_close_flag(cmd);
+ }
+ }
+ }
+
+
+ //------------------------------------------------------------------------
+ void vcgen_smooth_poly1::rewind(unsigned)
+ {
+ if(m_status == initial)
+ {
+ m_src_vertices.close(m_closed != 0);
+ }
+ m_status = ready;
+ m_src_vertex = 0;
+ }
+
+
+ //------------------------------------------------------------------------
+ void vcgen_smooth_poly1::calculate(const vertex_dist& v0,
+ const vertex_dist& v1,
+ const vertex_dist& v2,
+ const vertex_dist& v3)
+ {
+
+ double k1 = v0.dist / (v0.dist + v1.dist);
+ double k2 = v1.dist / (v1.dist + v2.dist);
+
+ double xm1 = v0.x + (v2.x - v0.x) * k1;
+ double ym1 = v0.y + (v2.y - v0.y) * k1;
+ double xm2 = v1.x + (v3.x - v1.x) * k2;
+ double ym2 = v1.y + (v3.y - v1.y) * k2;
+
+ m_ctrl1_x = v1.x + m_smooth_value * (v2.x - xm1);
+ m_ctrl1_y = v1.y + m_smooth_value * (v2.y - ym1);
+ m_ctrl2_x = v2.x + m_smooth_value * (v1.x - xm2);
+ m_ctrl2_y = v2.y + m_smooth_value * (v1.y - ym2);
+ }
+
+
+ //------------------------------------------------------------------------
+ unsigned vcgen_smooth_poly1::vertex(double* x, double* y)
+ {
+ unsigned cmd = path_cmd_line_to;
+ while(!is_stop(cmd))
+ {
+ switch(m_status)
+ {
+ case initial:
+ rewind(0);
+
+ case ready:
+ if(m_src_vertices.size() < 2)
+ {
+ cmd = path_cmd_stop;
+ break;
+ }
+
+ if(m_src_vertices.size() == 2)
+ {
+ *x = m_src_vertices[m_src_vertex].x;
+ *y = m_src_vertices[m_src_vertex].y;
+ m_src_vertex++;
+ if(m_src_vertex == 1) return path_cmd_move_to;
+ if(m_src_vertex == 2) return path_cmd_line_to;
+ cmd = path_cmd_stop;
+ break;
+ }
+
+ cmd = path_cmd_move_to;
+ m_status = polygon;
+ m_src_vertex = 0;
+
+ case polygon:
+ if(m_closed)
+ {
+ if(m_src_vertex >= m_src_vertices.size())
+ {
+ *x = m_src_vertices[0].x;
+ *y = m_src_vertices[0].y;
+ m_status = end_poly;
+ return path_cmd_curve4;
+ }
+ }
+ else
+ {
+ if(m_src_vertex >= m_src_vertices.size() - 1)
+ {
+ *x = m_src_vertices[m_src_vertices.size() - 1].x;
+ *y = m_src_vertices[m_src_vertices.size() - 1].y;
+ m_status = end_poly;
+ return path_cmd_curve3;
+ }
+ }
+
+ calculate(m_src_vertices.prev(m_src_vertex),
+ m_src_vertices.curr(m_src_vertex),
+ m_src_vertices.next(m_src_vertex),
+ m_src_vertices.next(m_src_vertex + 1));
+
+ *x = m_src_vertices[m_src_vertex].x;
+ *y = m_src_vertices[m_src_vertex].y;
+ m_src_vertex++;
+
+ if(m_closed)
+ {
+ m_status = ctrl1;
+ return ((m_src_vertex == 1) ?
+ path_cmd_move_to :
+ path_cmd_curve4);
+ }
+ else
+ {
+ if(m_src_vertex == 1)
+ {
+ m_status = ctrl_b;
+ return path_cmd_move_to;
+ }
+ if(m_src_vertex >= m_src_vertices.size() - 1)
+ {
+ m_status = ctrl_e;
+ return path_cmd_curve3;
+ }
+ m_status = ctrl1;
+ return path_cmd_curve4;
+ }
+ // statement unreachable
+ //break;
+
+ case ctrl_b:
+ *x = m_ctrl2_x;
+ *y = m_ctrl2_y;
+ m_status = polygon;
+ return path_cmd_curve3;
+
+ case ctrl_e:
+ *x = m_ctrl1_x;
+ *y = m_ctrl1_y;
+ m_status = polygon;
+ return path_cmd_curve3;
+
+ case ctrl1:
+ *x = m_ctrl1_x;
+ *y = m_ctrl1_y;
+ m_status = ctrl2;
+ return path_cmd_curve4;
+
+ case ctrl2:
+ *x = m_ctrl2_x;
+ *y = m_ctrl2_y;
+ m_status = polygon;
+ return path_cmd_curve4;
+
+ case end_poly:
+ m_status = stop;
+ return path_cmd_end_poly | m_closed;
+
+ case stop:
+ return path_cmd_stop;
+ }
+ }
+ return cmd;
+ }
+
+}
+
diff --git a/agg/source/agg_vcgen_stroke.cpp b/agg/source/agg_vcgen_stroke.cpp
new file mode 100755
index 000000000000..a8a4481ec25b
--- /dev/null
+++ b/agg/source/agg_vcgen_stroke.cpp
@@ -0,0 +1,246 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// Stroke generator
+//
+//----------------------------------------------------------------------------
+#include <math.h>
+#include "agg_vcgen_stroke.h"
+#include "agg_shorten_path.h"
+
+namespace agg
+{
+
+ //------------------------------------------------------------------------
+ vcgen_stroke::vcgen_stroke() :
+ m_src_vertices(),
+ m_out_vertices(),
+ m_width(0.5),
+ m_miter_limit(4.0),
+ m_inner_miter_limit(1.0 + 1.0/64.0),
+ m_approx_scale(1.0),
+ m_shorten(0.0),
+ m_line_cap(butt_cap),
+ m_line_join(miter_join),
+ m_inner_line_join(miter_join_revert),
+ m_closed(0),
+ m_status(initial),
+ m_src_vertex(0),
+ m_out_vertex(0)
+ {
+ }
+
+
+ //------------------------------------------------------------------------
+ void vcgen_stroke::miter_limit_theta(double t)
+ {
+ m_miter_limit = 1.0 / sin(t * 0.5) ;
+ }
+
+
+ //------------------------------------------------------------------------
+ void vcgen_stroke::remove_all()
+ {
+ m_src_vertices.remove_all();
+ m_closed = 0;
+ m_status = initial;
+ }
+
+
+ //------------------------------------------------------------------------
+ void vcgen_stroke::add_vertex(double x, double y, unsigned cmd)
+ {
+ m_status = initial;
+ if(is_move_to(cmd))
+ {
+ m_src_vertices.modify_last(vertex_dist(x, y));
+ }
+ else
+ {
+ if(is_vertex(cmd))
+ {
+ m_src_vertices.add(vertex_dist(x, y));
+ }
+ else
+ {
+ m_closed = get_close_flag(cmd);
+ }
+ }
+ }
+
+
+ //------------------------------------------------------------------------
+ void vcgen_stroke::rewind(unsigned)
+ {
+ if(m_status == initial)
+ {
+ m_src_vertices.close(m_closed != 0);
+ shorten_path(m_src_vertices, m_shorten, m_closed);
+ if(m_src_vertices.size() < 3) m_closed = 0;
+ }
+ m_status = ready;
+ m_src_vertex = 0;
+ m_out_vertex = 0;
+ }
+
+
+ //------------------------------------------------------------------------
+ unsigned vcgen_stroke::vertex(double* x, double* y)
+ {
+ unsigned cmd = path_cmd_line_to;
+ while(!is_stop(cmd))
+ {
+ switch(m_status)
+ {
+ case initial:
+ rewind(0);
+
+ case ready:
+ if(m_src_vertices.size() < 2 + unsigned(m_closed != 0))
+ {
+ cmd = path_cmd_stop;
+ break;
+ }
+ m_status = m_closed ? outline1 : cap1;
+ cmd = path_cmd_move_to;
+ m_src_vertex = 0;
+ m_out_vertex = 0;
+ break;
+
+ case cap1:
+ stroke_calc_cap(m_out_vertices,
+ m_src_vertices[0],
+ m_src_vertices[1],
+ m_src_vertices[0].dist,
+ m_line_cap,
+ m_width,
+ m_approx_scale);
+ m_src_vertex = 1;
+ m_prev_status = outline1;
+ m_status = out_vertices;
+ m_out_vertex = 0;
+ break;
+
+ case cap2:
+ stroke_calc_cap(m_out_vertices,
+ m_src_vertices[m_src_vertices.size() - 1],
+ m_src_vertices[m_src_vertices.size() - 2],
+ m_src_vertices[m_src_vertices.size() - 2].dist,
+ m_line_cap,
+ m_width,
+ m_approx_scale);
+ m_prev_status = outline2;
+ m_status = out_vertices;
+ m_out_vertex = 0;
+ break;
+
+ case outline1:
+ if(m_closed)
+ {
+ if(m_src_vertex >= m_src_vertices.size())
+ {
+ m_prev_status = close_first;
+ m_status = end_poly1;
+ break;
+ }
+ }
+ else
+ {
+ if(m_src_vertex >= m_src_vertices.size() - 1)
+ {
+ m_status = cap2;
+ break;
+ }
+ }
+ stroke_calc_join(m_out_vertices,
+ m_src_vertices.prev(m_src_vertex),
+ m_src_vertices.curr(m_src_vertex),
+ m_src_vertices.next(m_src_vertex),
+ m_src_vertices.prev(m_src_vertex).dist,
+ m_src_vertices.curr(m_src_vertex).dist,
+ m_width,
+ m_line_join,
+ m_inner_line_join,
+ m_miter_limit,
+ m_inner_miter_limit,
+ m_approx_scale);
+ ++m_src_vertex;
+ m_prev_status = m_status;
+ m_status = out_vertices;
+ m_out_vertex = 0;
+ break;
+
+ case close_first:
+ m_status = outline2;
+ cmd = path_cmd_move_to;
+
+ case outline2:
+ if(m_src_vertex <= unsigned(m_closed == 0))
+ {
+ m_status = end_poly2;
+ m_prev_status = stop;
+ break;
+ }
+
+ --m_src_vertex;
+ stroke_calc_join(m_out_vertices,
+ m_src_vertices.next(m_src_vertex),
+ m_src_vertices.curr(m_src_vertex),
+ m_src_vertices.prev(m_src_vertex),
+ m_src_vertices.curr(m_src_vertex).dist,
+ m_src_vertices.prev(m_src_vertex).dist,
+ m_width,
+ m_line_join,
+ m_inner_line_join,
+ m_miter_limit,
+ m_inner_miter_limit,
+ m_approx_scale);
+
+ m_prev_status = m_status;
+ m_status = out_vertices;
+ m_out_vertex = 0;
+ break;
+
+ case out_vertices:
+ if(m_out_vertex >= m_out_vertices.size())
+ {
+ m_status = m_prev_status;
+ }
+ else
+ {
+ const point_type& c = m_out_vertices[m_out_vertex++];
+ *x = c.x;
+ *y = c.y;
+ return cmd;
+ }
+ break;
+
+ case end_poly1:
+ m_status = m_prev_status;
+ return (unsigned)path_cmd_end_poly | (unsigned)path_flags_close | (unsigned)path_flags_ccw;
+
+ case end_poly2:
+ m_status = m_prev_status;
+ return (unsigned)path_cmd_end_poly | (unsigned)path_flags_close | (unsigned)path_flags_cw;
+
+ case stop:
+ cmd = path_cmd_stop;
+ break;
+ }
+ }
+ return cmd;
+ }
+
+}
diff --git a/agg/source/agg_vpgen_clip_polygon.cpp b/agg/source/agg_vpgen_clip_polygon.cpp
new file mode 100755
index 000000000000..e3a0b71d821b
--- /dev/null
+++ b/agg/source/agg_vpgen_clip_polygon.cpp
@@ -0,0 +1,133 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+
+#include "agg_vpgen_clip_polygon.h"
+#include "agg_clip_liang_barsky.h"
+
+namespace agg
+{
+
+ //------------------------------------------------------------------------
+ // Determine the clipping code of the vertex according to the
+ // Cyrus-Beck line clipping algorithm
+ //
+ // | |
+ // 0110 | 0010 | 0011
+ // | |
+ // -------+--------+-------- clip_box.y2
+ // | |
+ // 0100 | 0000 | 0001
+ // | |
+ // -------+--------+-------- clip_box.y1
+ // | |
+ // 1100 | 1000 | 1001
+ // | |
+ // clip_box.x1 clip_box.x2
+ //
+ //
+ unsigned vpgen_clip_polygon::clipping_flags(double x, double y)
+ {
+ if(x < m_clip_box.x1)
+ {
+ if(y > m_clip_box.y2) return 6;
+ if(y < m_clip_box.y1) return 12;
+ return 4;
+ }
+
+ if(x > m_clip_box.x2)
+ {
+ if(y > m_clip_box.y2) return 3;
+ if(y < m_clip_box.y1) return 9;
+ return 1;
+ }
+
+ if(y > m_clip_box.y2) return 2;
+ if(y < m_clip_box.y1) return 8;
+
+ return 0;
+ }
+
+ //----------------------------------------------------------------------------
+ void vpgen_clip_polygon::reset()
+ {
+ m_vertex = 0;
+ m_num_vertices = 0;
+ }
+
+ //----------------------------------------------------------------------------
+ void vpgen_clip_polygon::move_to(double x, double y)
+ {
+ m_vertex = 0;
+ m_num_vertices = 0;
+ m_clip_flags = clipping_flags(x, y);
+ if(m_clip_flags == 0)
+ {
+ m_x[0] = x;
+ m_y[0] = y;
+ m_num_vertices = 1;
+ }
+ m_x1 = x;
+ m_y1 = y;
+ m_cmd = path_cmd_move_to;
+ }
+
+
+ //----------------------------------------------------------------------------
+ void vpgen_clip_polygon::line_to(double x, double y)
+ {
+ m_vertex = 0;
+ m_num_vertices = 0;
+ unsigned flags = clipping_flags(x, y);
+
+ if(m_clip_flags == flags)
+ {
+ if(flags == 0)
+ {
+ m_x[0] = x;
+ m_y[0] = y;
+ m_num_vertices = 1;
+ }
+ }
+ else
+ {
+ m_num_vertices = clip_liang_barsky(m_x1, m_y1,
+ x, y,
+ m_clip_box,
+ m_x, m_y);
+ }
+
+ m_clip_flags = flags;
+ m_x1 = x;
+ m_y1 = y;
+ }
+
+
+ //----------------------------------------------------------------------------
+ unsigned vpgen_clip_polygon::vertex(double* x, double* y)
+ {
+ if(m_vertex < m_num_vertices)
+ {
+ *x = m_x[m_vertex];
+ *y = m_y[m_vertex];
+ ++m_vertex;
+ unsigned cmd = m_cmd;
+ m_cmd = path_cmd_line_to;
+ return cmd;
+ }
+ return path_cmd_stop;
+ }
+
+
+}
diff --git a/agg/source/agg_vpgen_clip_polyline.cpp b/agg/source/agg_vpgen_clip_polyline.cpp
new file mode 100755
index 000000000000..b3b60c96a70d
--- /dev/null
+++ b/agg/source/agg_vpgen_clip_polyline.cpp
@@ -0,0 +1,142 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+
+#include <math.h>
+#include "agg_vpgen_clip_polyline.h"
+
+namespace agg
+{
+ static double clip_epsilon = 1e-10;
+
+
+ //----------------------------------------------------------------------------
+ void vpgen_clip_polyline::reset()
+ {
+ m_vertex = 0;
+ m_num_vertices = 0;
+ }
+
+ //----------------------------------------------------------------------------
+ void vpgen_clip_polyline::move_to(double x, double y)
+ {
+ m_vertex = 0;
+ m_num_vertices = 0;
+ m_f1 = clipping_flags(x, y);
+ if(m_f1 == 0)
+ {
+ m_x[0] = x;
+ m_y[0] = y;
+ m_cmd[0] = path_cmd_move_to;
+ m_num_vertices = 1;
+ }
+ m_x1 = x;
+ m_y1 = y;
+ }
+
+
+ //----------------------------------------------------------------------------
+ bool vpgen_clip_polyline::move_point(double& x, double& y, unsigned& flags)
+ {
+ double bound;
+
+ if(flags & (clip_x1 | clip_x2))
+ {
+ bound = (flags & clip_x1) ? m_clip_box.x1 : m_clip_box.x2;
+ y = (bound - m_x1) * (m_y2 - m_y1) / (m_x2 - m_x1) + m_y1;
+ x = bound;
+ flags = clipping_flags_y(y);
+ }
+ if(fabs(m_y2 - m_y1) < clip_epsilon && fabs(m_x2 - m_x1) < clip_epsilon)
+ {
+ return false;
+ }
+ if(flags & (clip_y1 | clip_y2))
+ {
+ bound = (flags & clip_y1) ? m_clip_box.y1 : m_clip_box.y2;
+ x = (bound - m_y1) * (m_x2 - m_x1) / (m_y2 - m_y1) + m_x1;
+ y = bound;
+ }
+ flags = 0;
+ return true;
+ }
+
+ //----------------------------------------------------------------------------
+ void vpgen_clip_polyline::clip_line_segment()
+ {
+ if((m_f1 & m_f2) == 0)
+ {
+ if(m_f1)
+ {
+ if(!move_point(m_x1, m_y1, m_f1)) return;
+ if(m_f1) return;
+ m_x[0] = m_x1;
+ m_y[0] = m_y1;
+ m_cmd[0] = path_cmd_move_to;
+ m_num_vertices = 1;
+ }
+ if(m_f2)
+ { // Move Point 2
+ if(!move_point(m_x2, m_y2, m_f2)) return;
+ }
+ m_x[m_num_vertices] = m_x2;
+ m_y[m_num_vertices] = m_y2;
+ m_cmd[m_num_vertices++] = path_cmd_line_to;
+ }
+ }
+
+
+
+ //----------------------------------------------------------------------------
+ void vpgen_clip_polyline::line_to(double x, double y)
+ {
+ m_vertex = 0;
+ m_num_vertices = 0;
+ unsigned f = m_f2 = clipping_flags(m_x2 = x, m_y2 = y);
+
+ if(m_f2 == m_f1)
+ {
+ if(m_f2 == 0)
+ {
+ m_x[0] = x;
+ m_y[0] = y;
+ m_cmd[0] = path_cmd_line_to;
+ m_num_vertices = 1;
+ }
+ }
+ else
+ {
+ clip_line_segment();
+ }
+
+ m_f1 = f;
+ m_x1 = x;
+ m_y1 = y;
+ }
+
+
+ //----------------------------------------------------------------------------
+ unsigned vpgen_clip_polyline::vertex(double* x, double* y)
+ {
+ if(m_vertex < m_num_vertices)
+ {
+ *x = m_x[m_vertex];
+ *y = m_y[m_vertex];
+ return m_cmd[m_vertex++];
+ }
+ return path_cmd_stop;
+ }
+
+
+}
diff --git a/agg/source/agg_vpgen_segmentator.cpp b/agg/source/agg_vpgen_segmentator.cpp
new file mode 100755
index 000000000000..97e76707c1cb
--- /dev/null
+++ b/agg/source/agg_vpgen_segmentator.cpp
@@ -0,0 +1,67 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+
+#include <math.h>
+#include "agg_vpgen_segmentator.h"
+
+namespace agg
+{
+
+ void vpgen_segmentator::move_to(double x, double y)
+ {
+ m_x1 = x;
+ m_y1 = y;
+ m_dx = 0.0;
+ m_dy = 0.0;
+ m_dl = 2.0;
+ m_ddl = 2.0;
+ m_cmd = path_cmd_move_to;
+ }
+
+ void vpgen_segmentator::line_to(double x, double y)
+ {
+ m_x1 += m_dx;
+ m_y1 += m_dy;
+ m_dx = x - m_x1;
+ m_dy = y - m_y1;
+ double len = sqrt(m_dx * m_dx + m_dy * m_dy) * m_approximation_scale;
+ if(len < 1e-30) len = 1e-30;
+ m_ddl = 1.0 / len;
+ m_dl = (m_cmd == path_cmd_move_to) ? 0.0 : m_ddl;
+ if(m_cmd == path_cmd_stop) m_cmd = path_cmd_line_to;
+ }
+
+ unsigned vpgen_segmentator::vertex(double* x, double* y)
+ {
+ if(m_cmd == path_cmd_stop) return path_cmd_stop;
+
+ unsigned cmd = m_cmd;
+ m_cmd = path_cmd_line_to;
+ if(m_dl >= 1.0 - m_ddl)
+ {
+ m_dl = 1.0;
+ m_cmd = path_cmd_stop;
+ *x = m_x1 + m_dx;
+ *y = m_y1 + m_dy;
+ return cmd;
+ }
+ *x = m_x1 + m_dx * m_dl;
+ *y = m_y1 + m_dy * m_dl;
+ m_dl += m_ddl;
+ return cmd;
+ }
+
+}
+
diff --git a/agg/source/makefile.mk b/agg/source/makefile.mk
new file mode 100755
index 000000000000..e29f2c3b8891
--- /dev/null
+++ b/agg/source/makefile.mk
@@ -0,0 +1,91 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..
+PRJNAME=agg
+TARGET=agg
+ENABLE_EXCEPTIONS=TRUE
+
+# --- Settings ----------------------------------
+
+.INCLUDE : settings.mk
+.IF "$(L10N_framework)"==""
+# don't link default libraries from sal
+UWINAPILIB=
+LIBSALCPPRT=
+# --- Files -------------------------------------
+
+SLOFILES= \
+ $(SLO)$/agg_arc.obj \
+ $(SLO)$/agg_arrowhead.obj \
+ $(SLO)$/agg_bezier_arc.obj \
+ $(SLO)$/agg_bspline.obj \
+ $(SLO)$/agg_curves.obj \
+ $(SLO)$/agg_embedded_raster_fonts.obj \
+ $(SLO)$/agg_gsv_text.obj \
+ $(SLO)$/agg_image_filters.obj \
+ $(SLO)$/agg_line_aa_basics.obj \
+ $(SLO)$/agg_line_profile_aa.obj \
+ $(SLO)$/agg_path_storage.obj \
+ $(SLO)$/agg_rasterizer_scanline_aa.obj \
+ $(SLO)$/agg_rounded_rect.obj \
+ $(SLO)$/agg_sqrt_tables.obj \
+ $(SLO)$/agg_trans_affine.obj \
+ $(SLO)$/agg_trans_double_path.obj \
+ $(SLO)$/agg_trans_single_path.obj \
+ $(SLO)$/agg_trans_warp_magnifier.obj \
+ $(SLO)$/agg_vcgen_bspline.obj \
+ $(SLO)$/agg_vcgen_contour.obj \
+ $(SLO)$/agg_vcgen_dash.obj \
+ $(SLO)$/agg_vcgen_markers_term.obj \
+ $(SLO)$/agg_vcgen_smooth_poly1.obj \
+ $(SLO)$/agg_vcgen_stroke.obj \
+ $(SLO)$/agg_vpgen_clip_polygon.obj \
+ $(SLO)$/agg_vpgen_clip_polyline.obj \
+ $(SLO)$/agg_vpgen_segmentator.obj
+
+SHL1TARGET = $(TARGET)$(DLLPOSTFIX)
+SHL1IMPLIB = i$(TARGET)
+SHL1LIBS = $(SLB)$/$(TARGET).lib
+SHL1DEF = $(MISC)$/$(SHL1TARGET).def
+DEF1NAME = $(SHL1TARGET)
+
+DEF1DEPN =$(MISC)$/$(SHL1TARGET).flt \
+ $(LIB1TARGET)
+
+DEF1DES =agg
+DEFLIB1NAME =$(TARGET)
+
+# --- Targets ----------------------------------
+
+.ENDIF # L10N_framework
+.INCLUDE : target.mk
+.IF "$(L10N_framework)"==""
+$(MISC)$/$(SHL1TARGET).flt : makefile.mk $(TARGET).flt
+ @$(TYPE) $(TARGET).flt > $@
+
+.ENDIF # L10N_framework
diff --git a/animations/inc/animations/animationnodehelper.hxx b/animations/inc/animations/animationnodehelper.hxx
new file mode 100644
index 000000000000..8857c52942ce
--- /dev/null
+++ b/animations/inc/animations/animationnodehelper.hxx
@@ -0,0 +1,130 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_ANIMATIONS_ANIMATIONNODEHELPER_HXX
+#define INCLUDED_ANIMATIONS_ANIMATIONNODEHELPER_HXX
+
+#include <com/sun/star/uno/Reference.hxx>
+#include <com/sun/star/animations/XAnimationNode.hpp>
+#include <com/sun/star/container/XEnumerationAccess.hpp>
+#include <com/sun/star/container/XEnumeration.hpp>
+
+#include <vector>
+
+/* Declaration and definition of AnimationNode helper */
+
+namespace anim
+{
+ // TODO(Q1): this could possibly be implemented with a somewhat
+ // more lightweight template, by having the actual worker receive
+ // only a function pointer, and a thin templated wrapper around
+ // that which converts member functions into that.
+
+ /** Apply given functor to every animation node child.
+
+ @param xNode
+ Parent node
+
+ @param rFunctor
+ Functor to apply. The functor must have an appropriate
+ operator()( const ::com::sun::star::uno::Reference<
+ ::com::sun::star::animations::XAnimationNode >& ) member.
+
+ @return true, if the functor was successfully applied to
+ all children, false otherwise.
+ */
+ template< typename Functor > inline bool for_each_childNode( const ::com::sun::star::uno::Reference< ::com::sun::star::animations::XAnimationNode >& xNode,
+ Functor& rFunctor )
+ {
+ try
+ {
+ // get an XEnumerationAccess to the children
+ ::com::sun::star::uno::Reference< ::com::sun::star::container::XEnumerationAccess >
+ xEnumerationAccess( xNode,
+ ::com::sun::star::uno::UNO_QUERY_THROW );
+ ::com::sun::star::uno::Reference< ::com::sun::star::container::XEnumeration >
+ xEnumeration( xEnumerationAccess->createEnumeration(),
+ ::com::sun::star::uno::UNO_QUERY_THROW );
+
+ while( xEnumeration->hasMoreElements() )
+ {
+ ::com::sun::star::uno::Reference< ::com::sun::star::animations::XAnimationNode >
+ xChildNode( xEnumeration->nextElement(),
+ ::com::sun::star::uno::UNO_QUERY_THROW );
+
+ rFunctor( xChildNode );
+ }
+
+ return true;
+ }
+ catch( ::com::sun::star::uno::Exception& )
+ {
+ return false;
+ }
+ }
+
+
+ /** pushes the given node to the given vector and recursivly calls itself for each child node.
+ */
+ inline void create_deep_vector( const ::com::sun::star::uno::Reference< ::com::sun::star::animations::XAnimationNode >& xNode,
+ std::vector< ::com::sun::star::uno::Reference< ::com::sun::star::animations::XAnimationNode > >& rVector )
+ {
+ rVector.push_back( xNode );
+
+ try
+ {
+ // get an XEnumerationAccess to the children
+ ::com::sun::star::uno::Reference< ::com::sun::star::container::XEnumerationAccess >
+ xEnumerationAccess( xNode,
+ ::com::sun::star::uno::UNO_QUERY );
+
+ if( xEnumerationAccess.is() )
+ {
+ ::com::sun::star::uno::Reference< ::com::sun::star::container::XEnumeration >
+ xEnumeration( xEnumerationAccess->createEnumeration(),
+ ::com::sun::star::uno::UNO_QUERY );
+
+ if( xEnumeration.is() )
+ {
+ while( xEnumeration->hasMoreElements() )
+ {
+ ::com::sun::star::uno::Reference< ::com::sun::star::animations::XAnimationNode >
+ xChildNode( xEnumeration->nextElement(),
+ ::com::sun::star::uno::UNO_QUERY_THROW );
+
+ create_deep_vector( xChildNode, rVector );
+ }
+ }
+ }
+ }
+ catch( ::com::sun::star::uno::Exception& )
+ {
+ }
+ }
+}
+
+#endif /* INCLUDED_ANIMATIONS_ANIMATIONNODEHELPER_HXX */
diff --git a/animations/prj/build.lst b/animations/prj/build.lst
new file mode 100644
index 000000000000..00a1eb69c743
--- /dev/null
+++ b/animations/prj/build.lst
@@ -0,0 +1,3 @@
+animations animations : cppuhelper comphelper offuh NULL
+animations animations usr1 - all animations_mkout NULL
+animations animations\source\animcore nmake - all animations_animcore NULL
diff --git a/animations/prj/d.lst b/animations/prj/d.lst
new file mode 100644
index 000000000000..bdab238656c3
--- /dev/null
+++ b/animations/prj/d.lst
@@ -0,0 +1,9 @@
+..\%__SRC%\bin\animcore.dll %_DEST%\bin%_EXT%\animcore.dll
+..\%__SRC%\lib\libanimcore.so %_DEST%\lib%_EXT%\libanimcore.so
+..\%__SRC%\lib\*.dylib %_DEST%\lib%_EXT%\*
+..\source\animcore\animcore.xml %_DEST%\xml%_EXT%\animcore.xml
+
+..\%__SRC%\lib\lib*static*.dylib %_DEST%\lib%_EXT%\lib*static*.dylib
+
+mkdir: %_DEST%\inc%_EXT%\animations
+..\inc\animations\animationnodehelper.hxx %_DEST%\inc%_EXT%\animations\animationnodehelper.hxx
diff --git a/animations/source/animcore/animcore.cxx b/animations/source/animcore/animcore.cxx
new file mode 100644
index 000000000000..7b18a83e2fe4
--- /dev/null
+++ b/animations/source/animcore/animcore.cxx
@@ -0,0 +1,2089 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <com/sun/star/util/XCloneable.hpp>
+#include <com/sun/star/uno/XComponentContext.hpp>
+#include <com/sun/star/lang/XServiceInfo.hpp>
+#include <com/sun/star/lang/XTypeProvider.hpp>
+#include <com/sun/star/animations/XAnimateColor.hpp>
+#include <com/sun/star/animations/XAnimateSet.hpp>
+#include <com/sun/star/animations/XAnimateMotion.hpp>
+#include <com/sun/star/animations/XAnimateTransform.hpp>
+#include <com/sun/star/animations/XTransitionFilter.hpp>
+#include <com/sun/star/animations/XTimeContainer.hpp>
+#include <com/sun/star/animations/XIterateContainer.hpp>
+#include <com/sun/star/animations/XAudio.hpp>
+#include <com/sun/star/animations/XCommand.hpp>
+#include <com/sun/star/animations/AnimationNodeType.hpp>
+#include <com/sun/star/animations/AnimationCalcMode.hpp>
+#include <com/sun/star/animations/AnimationFill.hpp>
+#include <com/sun/star/animations/AnimationRestart.hpp>
+#include <com/sun/star/animations/AnimationColorSpace.hpp>
+#include <com/sun/star/animations/AnimationAdditiveMode.hpp>
+#include <com/sun/star/animations/AnimationTransformType.hpp>
+#include <com/sun/star/animations/TransitionType.hpp>
+#include <com/sun/star/animations/TransitionSubType.hpp>
+#include <com/sun/star/presentation/ShapeAnimationSubType.hpp>
+#include <com/sun/star/container/XEnumerationAccess.hpp>
+#include <com/sun/star/beans/NamedValue.hpp>
+#include <com/sun/star/util/XChangesNotifier.hpp>
+#include <com/sun/star/lang/XUnoTunnel.hpp>
+#include <cppuhelper/interfacecontainer.hxx>
+
+#include <cppuhelper/implbase1.hxx>
+#include <rtl/uuid.h>
+
+#include <osl/mutex.hxx>
+#include <list>
+#include <algorithm>
+
+using ::osl::Mutex;
+using ::osl::Guard;
+using ::rtl::OUString;
+using ::cppu::OInterfaceContainerHelper;
+using ::cppu::OInterfaceIteratorHelper;
+using ::com::sun::star::uno::Any;
+using ::com::sun::star::uno::UNO_QUERY;
+using ::com::sun::star::uno::XInterface;
+using ::com::sun::star::uno::RuntimeException;
+using ::com::sun::star::uno::Sequence;
+using ::com::sun::star::uno::Reference;
+using ::com::sun::star::uno::XComponentContext;
+using ::com::sun::star::uno::Exception;
+using ::com::sun::star::uno::XWeak;
+using ::com::sun::star::uno::Type;
+using ::com::sun::star::uno::makeAny;
+using ::com::sun::star::lang::NoSupportException;
+using ::com::sun::star::lang::IllegalArgumentException;
+using ::com::sun::star::lang::WrappedTargetException;
+using ::com::sun::star::lang::NoSupportException;
+using ::com::sun::star::lang::XServiceInfo;
+using ::com::sun::star::lang::XTypeProvider;
+using ::com::sun::star::container::NoSuchElementException;
+using ::com::sun::star::container::ElementExistException;
+using ::com::sun::star::container::XEnumeration;
+using ::com::sun::star::container::XEnumerationAccess;
+using ::com::sun::star::beans::NamedValue;
+using ::com::sun::star::util::XCloneable;
+using ::com::sun::star::lang::XUnoTunnel;
+using ::com::sun::star::util::XChangesNotifier;
+using ::com::sun::star::util::XChangesListener;
+using ::com::sun::star::util::ElementChange;
+using ::com::sun::star::util::ChangesEvent;
+
+using ::cppu::OWeakObject;
+
+using namespace ::com::sun::star::animations;
+using namespace ::com::sun::star::animations::AnimationNodeType;
+
+namespace animcore
+{
+
+// ====================================================================
+
+typedef ::std::list< Reference< XAnimationNode > > ChildList_t;
+
+// ====================================================================
+
+class AnimationNodeBase : public XAnimateMotion,
+ public XAnimateColor,
+ public XTransitionFilter,
+ public XAnimateSet,
+ public XAnimateTransform,
+ public XIterateContainer,
+ public XEnumerationAccess,
+ public XServiceInfo,
+ public XTypeProvider,
+ public XAudio,
+ public XCommand,
+ public XCloneable,
+ public XChangesNotifier,
+ public XUnoTunnel,
+ public OWeakObject
+{
+public:
+ // our first, last and only protection from mutli-threads!
+ Mutex maMutex;
+};
+
+class AnimationNode : public AnimationNodeBase
+{
+public:
+ AnimationNode( sal_Int16 nNodeType );
+ AnimationNode( const AnimationNode& rNode );
+ virtual ~AnimationNode();
+
+ // XInterface
+ virtual Any SAL_CALL queryInterface( const Type& aType ) throw (RuntimeException);
+ virtual void SAL_CALL acquire() throw ();
+ virtual void SAL_CALL release() throw ();
+
+ // XTypeProvider
+ virtual Sequence< Type > SAL_CALL getTypes() throw (RuntimeException);
+ virtual Sequence< sal_Int8 > SAL_CALL getImplementationId() throw (RuntimeException);
+
+ // XServiceInfo
+ OUString SAL_CALL getImplementationName() throw();
+ Sequence< OUString > SAL_CALL getSupportedServiceNames(void) throw();
+ sal_Bool SAL_CALL supportsService(const OUString& ServiceName) throw();
+
+ // XChild
+ virtual Reference< XInterface > SAL_CALL getParent() throw (RuntimeException);
+ virtual void SAL_CALL setParent( const Reference< XInterface >& Parent ) throw (NoSupportException, RuntimeException);
+
+ // XCloneable
+ virtual Reference< XCloneable > SAL_CALL createClone() throw (RuntimeException);
+
+ // XAnimationNode
+ virtual sal_Int16 SAL_CALL getType() throw (RuntimeException);
+ virtual Any SAL_CALL getBegin() throw (RuntimeException);
+ virtual void SAL_CALL setBegin( const Any& _begin ) throw (RuntimeException);
+ virtual Any SAL_CALL getDuration() throw (RuntimeException);
+ virtual void SAL_CALL setDuration( const Any& _duration ) throw (RuntimeException);
+ virtual Any SAL_CALL getEnd() throw (RuntimeException);
+ virtual void SAL_CALL setEnd( const Any& _end ) throw (RuntimeException);
+ virtual Any SAL_CALL getEndSync() throw (RuntimeException);
+ virtual void SAL_CALL setEndSync( const Any& _endsync ) throw (RuntimeException);
+ virtual Any SAL_CALL getRepeatCount() throw (RuntimeException);
+ virtual void SAL_CALL setRepeatCount( const Any& _repeatcount ) throw (RuntimeException);
+ virtual Any SAL_CALL getRepeatDuration() throw (RuntimeException);
+ virtual void SAL_CALL setRepeatDuration( const Any& _repeatduration ) throw (RuntimeException);
+ virtual sal_Int16 SAL_CALL getFill() throw (RuntimeException);
+ virtual void SAL_CALL setFill( sal_Int16 _fill ) throw (RuntimeException);
+ virtual sal_Int16 SAL_CALL getFillDefault() throw (RuntimeException);
+ virtual void SAL_CALL setFillDefault( sal_Int16 _filldefault ) throw (RuntimeException);
+ virtual sal_Int16 SAL_CALL getRestart() throw (RuntimeException);
+ virtual void SAL_CALL setRestart( sal_Int16 _restart ) throw (RuntimeException);
+ virtual sal_Int16 SAL_CALL getRestartDefault() throw (RuntimeException);
+ virtual void SAL_CALL setRestartDefault( sal_Int16 _restartdefault ) throw (RuntimeException);
+ virtual double SAL_CALL getAcceleration() throw (RuntimeException);
+ virtual void SAL_CALL setAcceleration( double _acceleration ) throw (RuntimeException);
+ virtual double SAL_CALL getDecelerate() throw (RuntimeException);
+ virtual void SAL_CALL setDecelerate( double _decelerate ) throw (RuntimeException);
+ virtual sal_Bool SAL_CALL getAutoReverse() throw (RuntimeException);
+ virtual void SAL_CALL setAutoReverse( sal_Bool _autoreverse ) throw (RuntimeException);
+ virtual Sequence< NamedValue > SAL_CALL getUserData() throw (RuntimeException);
+ virtual void SAL_CALL setUserData( const Sequence< NamedValue >& _userdata ) throw (RuntimeException);
+
+ // XAnimate
+ virtual Any SAL_CALL getTarget() throw (RuntimeException);
+ virtual void SAL_CALL setTarget( const Any& _target ) throw (RuntimeException);
+ virtual sal_Int16 SAL_CALL getSubItem() throw (RuntimeException);
+ virtual void SAL_CALL setSubItem( sal_Int16 _subitem ) throw (RuntimeException);
+ virtual OUString SAL_CALL getAttributeName() throw (RuntimeException);
+ virtual void SAL_CALL setAttributeName( const OUString& _attribute ) throw (RuntimeException);
+ virtual Sequence< Any > SAL_CALL getValues() throw (RuntimeException);
+ virtual void SAL_CALL setValues( const Sequence< Any >& _values ) throw (RuntimeException);
+ virtual Sequence< double > SAL_CALL getKeyTimes() throw (RuntimeException);
+ virtual void SAL_CALL setKeyTimes( const Sequence< double >& _keytimes ) throw (RuntimeException);
+ virtual sal_Int16 SAL_CALL getValueType() throw (RuntimeException);
+ virtual void SAL_CALL setValueType( sal_Int16 _valuetype ) throw (RuntimeException);
+ virtual sal_Int16 SAL_CALL getCalcMode() throw (RuntimeException);
+ virtual void SAL_CALL setCalcMode( sal_Int16 _calcmode ) throw (RuntimeException);
+ virtual sal_Bool SAL_CALL getAccumulate() throw (RuntimeException);
+ virtual void SAL_CALL setAccumulate( sal_Bool _accumulate ) throw (RuntimeException);
+ virtual sal_Int16 SAL_CALL getAdditive() throw (RuntimeException);
+ virtual void SAL_CALL setAdditive( sal_Int16 _additive ) throw (RuntimeException);
+ virtual Any SAL_CALL getFrom() throw (RuntimeException);
+ virtual void SAL_CALL setFrom( const Any& _from ) throw (RuntimeException);
+ virtual Any SAL_CALL getTo() throw (RuntimeException);
+ virtual void SAL_CALL setTo( const Any& _to ) throw (RuntimeException);
+ virtual Any SAL_CALL getBy() throw (RuntimeException);
+ virtual void SAL_CALL setBy( const Any& _by ) throw (RuntimeException);
+ virtual Sequence< TimeFilterPair > SAL_CALL getTimeFilter() throw (RuntimeException);
+ virtual void SAL_CALL setTimeFilter( const Sequence< TimeFilterPair >& _timefilter ) throw (RuntimeException);
+ virtual OUString SAL_CALL getFormula() throw (RuntimeException);
+ virtual void SAL_CALL setFormula( const OUString& _formula ) throw (RuntimeException);
+
+ // XAnimateColor
+ virtual sal_Int16 SAL_CALL getColorInterpolation() throw (RuntimeException);
+ virtual void SAL_CALL setColorInterpolation( sal_Int16 _colorspace ) throw (RuntimeException);
+ virtual sal_Bool SAL_CALL getDirection() throw (RuntimeException);
+ virtual void SAL_CALL setDirection( sal_Bool _direction ) throw (RuntimeException);
+
+ // XAnimateMotion
+ virtual Any SAL_CALL getPath() throw (RuntimeException);
+ virtual void SAL_CALL setPath( const Any& _path ) throw (RuntimeException);
+ virtual Any SAL_CALL getOrigin() throw (RuntimeException);
+ virtual void SAL_CALL setOrigin( const Any& _origin ) throw (RuntimeException);
+
+ // XAnimateTransform
+ virtual sal_Int16 SAL_CALL getTransformType() throw (RuntimeException);
+ virtual void SAL_CALL setTransformType( sal_Int16 _transformtype ) throw (RuntimeException);
+
+ // XTransitionFilter
+ virtual sal_Int16 SAL_CALL getTransition() throw (RuntimeException);
+ virtual void SAL_CALL setTransition( sal_Int16 _transition ) throw (RuntimeException);
+ virtual sal_Int16 SAL_CALL getSubtype() throw (RuntimeException);
+ virtual void SAL_CALL setSubtype( sal_Int16 _subtype ) throw (RuntimeException);
+ virtual sal_Bool SAL_CALL getMode() throw (RuntimeException);
+ virtual void SAL_CALL setMode( sal_Bool _mode ) throw (RuntimeException);
+// virtual sal_Bool SAL_CALL getDirection() throw (RuntimeException);
+// virtual void SAL_CALL setDirection( sal_Bool _direction ) throw (RuntimeException);
+ virtual sal_Int32 SAL_CALL getFadeColor() throw (RuntimeException);
+ virtual void SAL_CALL setFadeColor( sal_Int32 _fadecolor ) throw (RuntimeException);
+
+ // XAudio
+ virtual Any SAL_CALL getSource() throw (RuntimeException);
+ virtual void SAL_CALL setSource( const Any& _source ) throw (RuntimeException);
+ virtual double SAL_CALL getVolume() throw (RuntimeException);
+ virtual void SAL_CALL setVolume( double _volume ) throw (RuntimeException);
+
+
+ // XCommand
+// virtual Any SAL_CALL getTarget() throw (RuntimeException);
+// virtual void SAL_CALL setTarget( const Any& _target ) throw (RuntimeException);
+ virtual sal_Int16 SAL_CALL getCommand() throw (RuntimeException);
+ virtual void SAL_CALL setCommand( sal_Int16 _command ) throw (RuntimeException);
+ virtual Any SAL_CALL getParameter() throw (RuntimeException);
+ virtual void SAL_CALL setParameter( const Any& _parameter ) throw (RuntimeException);
+
+ // XElementAccess
+ virtual Type SAL_CALL getElementType() throw (RuntimeException);
+ virtual sal_Bool SAL_CALL hasElements() throw (RuntimeException);
+
+ // XEnumerationAccess
+ virtual Reference< XEnumeration > SAL_CALL createEnumeration() throw (RuntimeException);
+
+ // XTimeContainer
+ virtual Reference< XAnimationNode > SAL_CALL insertBefore( const Reference< XAnimationNode >& newChild, const Reference< XAnimationNode >& refChild ) throw (IllegalArgumentException, NoSuchElementException, ElementExistException, WrappedTargetException, RuntimeException);
+ virtual Reference< XAnimationNode > SAL_CALL insertAfter( const Reference< XAnimationNode >& newChild, const Reference< XAnimationNode >& refChild ) throw (IllegalArgumentException, NoSuchElementException, ElementExistException, WrappedTargetException, RuntimeException);
+ virtual Reference< XAnimationNode > SAL_CALL replaceChild( const Reference< XAnimationNode >& newChild, const Reference< XAnimationNode >& oldChild ) throw( IllegalArgumentException, NoSuchElementException, ElementExistException, WrappedTargetException, RuntimeException);
+ virtual Reference< XAnimationNode > SAL_CALL removeChild( const Reference< XAnimationNode >& oldChild ) throw(IllegalArgumentException, NoSuchElementException, WrappedTargetException, RuntimeException);
+ virtual Reference< XAnimationNode > SAL_CALL appendChild( const Reference< XAnimationNode >& newChild ) throw(IllegalArgumentException, ElementExistException, WrappedTargetException, RuntimeException);
+
+ // XIterateContainer
+ virtual sal_Int16 SAL_CALL getIterateType() throw (RuntimeException);
+ virtual void SAL_CALL setIterateType( sal_Int16 _iteratetype ) throw (RuntimeException);
+ virtual double SAL_CALL getIterateInterval() throw (RuntimeException);
+ virtual void SAL_CALL setIterateInterval( double _iterateinterval ) throw (RuntimeException);
+
+ // XChangesNotifier
+ virtual void SAL_CALL addChangesListener( const Reference< XChangesListener >& aListener ) throw (RuntimeException);
+ virtual void SAL_CALL removeChangesListener( const Reference< XChangesListener >& aListener ) throw (RuntimeException);
+
+ // XUnoTunnel
+ virtual ::sal_Int64 SAL_CALL getSomething( const Sequence< ::sal_Int8 >& aIdentifier ) throw (RuntimeException);
+
+ static const Sequence< sal_Int8 > & getUnoTunnelId();
+ void fireChangeListener();
+
+private:
+ OInterfaceContainerHelper maChangeListener;
+
+ static void initTypeProvider( sal_Int16 nNodeType ) throw();
+
+ const sal_Int16 mnNodeType;
+
+ // for XTypeProvider
+ static Sequence< Type >* mpTypes[12];
+ static Sequence< sal_Int8 >* mpId[12];
+
+ // attributes for the XAnimationNode interface implementation
+ Any maBegin, maDuration, maEnd, maEndSync, maRepeatCount, maRepeatDuration;
+ sal_Int16 mnFill, mnFillDefault, mnRestart, mnRestartDefault;
+ double mfAcceleration, mfDecelerate;
+ sal_Bool mbAutoReverse;
+ Sequence< NamedValue > maUserData;
+
+ // parent interface for XChild interface implementation
+ Reference<XInterface> mxParent;
+ AnimationNode* mpParent;
+
+ // attributes for XAnimate
+ Any maTarget;
+ OUString maAttributeName, maFormula;
+ Sequence< Any > maValues;
+ Sequence< double > maKeyTimes;
+ sal_Int16 mnValueType, mnSubItem;
+ sal_Int16 mnCalcMode, mnAdditive;
+ sal_Bool mbAccumulate;
+ Any maFrom, maTo, maBy;
+ Sequence< TimeFilterPair > maTimeFilter;
+
+ // attributes for XAnimateColor
+ sal_Int16 mnColorSpace;
+ sal_Bool mbDirection;
+
+ // atributes for XAnimateMotion
+ Any maPath, maOrigin;
+
+ // attributes for XAnimateTransform
+ sal_Int16 mnTransformType;
+
+ // attributes for XTransitionFilter
+ sal_Int16 mnTransition;
+ sal_Int16 mnSubtype;
+ sal_Bool mbMode;
+ sal_Int32 mnFadeColor;
+
+ // XAudio
+ double mfVolume;
+
+ // XCommand
+ sal_Int16 mnCommand;
+ Any maParameter;
+
+ // XIterateContainer
+ sal_Int16 mnIterateType;
+ double mfIterateInterval;
+
+ /** sorted list of child nodes for XTimeContainer*/
+ ChildList_t maChilds;
+};
+
+// ====================================================================
+
+class TimeContainerEnumeration : public ::cppu::WeakImplHelper1< XEnumeration >
+{
+public:
+ TimeContainerEnumeration( const ChildList_t &rChilds );
+ virtual ~TimeContainerEnumeration();
+
+ // Methods
+ virtual sal_Bool SAL_CALL hasMoreElements() throw (RuntimeException);
+ virtual Any SAL_CALL nextElement( ) throw (NoSuchElementException, WrappedTargetException, RuntimeException);
+
+private:
+ /** sorted list of child nodes */
+ ChildList_t maChilds;
+
+ /** current iteration position */
+ ChildList_t::iterator maIter;
+
+ /** our first, last and only protection from mutli-threads! */
+ Mutex maMutex;
+};
+
+TimeContainerEnumeration::TimeContainerEnumeration( const ChildList_t &rChilds )
+: maChilds( rChilds )
+{
+ maIter = maChilds.begin();
+}
+
+TimeContainerEnumeration::~TimeContainerEnumeration()
+{
+}
+
+// Methods
+sal_Bool SAL_CALL TimeContainerEnumeration::hasMoreElements() throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+
+ return maIter != maChilds.end();
+}
+
+Any SAL_CALL TimeContainerEnumeration::nextElement()
+ throw (NoSuchElementException, WrappedTargetException, RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+
+ if( maIter == maChilds.end() )
+ throw NoSuchElementException();
+
+ return makeAny( (*maIter++) );
+}
+
+// ====================================================================
+
+Sequence< Type >* AnimationNode::mpTypes[] = { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL };
+Sequence< sal_Int8 >* AnimationNode::mpId[] = { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL };
+
+AnimationNode::AnimationNode( sal_Int16 nNodeType )
+: maChangeListener(maMutex),
+ mnNodeType( nNodeType ),
+ mnFill( AnimationFill::DEFAULT ),
+ mnFillDefault( AnimationFill::INHERIT ),
+ mnRestart( AnimationRestart:: DEFAULT ),
+ mnRestartDefault( AnimationRestart:: INHERIT ),
+ mfAcceleration( 0.0 ),
+ mfDecelerate( 0.0 ),
+ mbAutoReverse( sal_False ),
+ mpParent(0),
+ mnValueType( 0 ),
+ mnSubItem( 0 ),
+ mnCalcMode( (nNodeType == AnimationNodeType::ANIMATEMOTION) ? AnimationCalcMode::PACED : AnimationCalcMode::LINEAR),
+ mnAdditive(AnimationAdditiveMode::REPLACE),
+ mbAccumulate(sal_False),
+ mnColorSpace( AnimationColorSpace::RGB ),
+ mbDirection( sal_True ),
+ mnTransformType( AnimationTransformType::TRANSLATE ),
+ mnTransition(TransitionType::BARWIPE),
+ mnSubtype(TransitionSubType::DEFAULT),
+ mbMode(true),
+ mnFadeColor(0),
+ mfVolume(1.0),
+ mnCommand(0),
+ mnIterateType( ::com::sun::star::presentation::ShapeAnimationSubType::AS_WHOLE ),
+ mfIterateInterval(0.0)
+{
+ OSL_ENSURE((sal_uInt32)nNodeType < sizeof(mpTypes)/sizeof(Sequence<Type>*), "NodeType out of range");
+}
+
+AnimationNode::AnimationNode( const AnimationNode& rNode )
+: AnimationNodeBase(),
+ maChangeListener(maMutex),
+ mnNodeType( rNode.mnNodeType ),
+
+ // attributes for the XAnimationNode interface implementation
+ maBegin( rNode.maBegin ),
+ maDuration( rNode.maDuration ),
+ maEnd( rNode.maEnd ),
+ maEndSync( rNode.maEndSync ),
+ maRepeatCount( rNode.maRepeatCount ),
+ maRepeatDuration( rNode.maRepeatDuration ),
+ mnFill( rNode.mnFill ),
+ mnFillDefault( rNode.mnFillDefault ),
+ mnRestart( rNode.mnRestart ),
+ mnRestartDefault( rNode.mnRestartDefault ),
+ mfAcceleration( rNode.mfAcceleration ),
+ mfDecelerate( rNode.mfDecelerate ),
+ mbAutoReverse( rNode.mbAutoReverse ),
+ maUserData( rNode.maUserData ),
+ mpParent(0),
+
+ // attributes for XAnimate
+ maTarget( rNode.maTarget ),
+ maAttributeName( rNode.maAttributeName ),
+ maFormula( rNode.maFormula ),
+ maValues( rNode.maValues ),
+ maKeyTimes( rNode.maKeyTimes ),
+ mnValueType( rNode.mnValueType ),
+ mnSubItem( rNode.mnSubItem ),
+ mnCalcMode( rNode.mnCalcMode ),
+ mnAdditive( rNode.mnAdditive ),
+ mbAccumulate( rNode.mbAccumulate ),
+ maFrom( rNode.maFrom ),
+ maTo( rNode.maTo ),
+ maBy( rNode.maBy ),
+ maTimeFilter( rNode.maTimeFilter ),
+
+ // attributes for XAnimateColor
+ mnColorSpace( rNode.mnColorSpace ),
+ mbDirection( rNode.mbDirection ),
+
+ // atributes for XAnimateMotion
+ maPath( rNode.maPath ),
+ maOrigin( rNode.maOrigin ),
+
+ // attributes for XAnimateTransform
+ mnTransformType( rNode.mnTransformType ),
+
+ // attributes for XTransitionFilter
+ mnTransition( rNode.mnTransition ),
+ mnSubtype( rNode.mnSubtype ),
+ mbMode( rNode.mbMode ),
+ mnFadeColor( rNode.mnFadeColor ),
+
+ // XAudio
+ mfVolume( rNode.mfVolume ),
+
+ // XCommand
+ mnCommand( rNode.mnCommand ),
+ maParameter( rNode.maParameter ),
+
+ // XIterateContainer
+ mnIterateType( rNode.mnIterateType ),
+ mfIterateInterval( rNode.mfIterateInterval )
+{
+}
+
+AnimationNode::~AnimationNode()
+{
+}
+
+// --------------------------------------------------------------------
+
+#define IMPL_NODE_FACTORY(N,IN,SN)\
+Reference< XInterface > SAL_CALL createInstance_##N( const Reference< XComponentContext > & ) throw (Exception)\
+{\
+ return Reference < XInterface > ( SAL_STATIC_CAST( ::cppu::OWeakObject * , new AnimationNode( N ) ) );\
+}\
+OUString getImplementationName_##N()\
+{\
+ return OUString( RTL_CONSTASCII_USTRINGPARAM ( IN ) );\
+}\
+Sequence<OUString> getSupportedServiceNames_##N(void)\
+{\
+ Sequence<OUString> aRet(1);\
+ aRet.getArray()[0] = OUString( RTL_CONSTASCII_USTRINGPARAM( SN ));\
+ return aRet;\
+}
+
+IMPL_NODE_FACTORY( PAR, "animcore::ParallelTimeContainer", "com.sun.star.animations.ParallelTimeContainer" )
+IMPL_NODE_FACTORY( SEQ, "animcore::SequenceTimeContainer", "com.sun.star.animations.SequenceTimeContainer" )
+IMPL_NODE_FACTORY( ITERATE, "animcore::IterateContainer", "com.sun.star.animations.IterateContainer" )
+IMPL_NODE_FACTORY( ANIMATE, "animcore::Animate", "com.sun.star.animations.Animate" )
+IMPL_NODE_FACTORY( SET, "animcore::AnimateSet", "com.sun.star.animations.AnimateSet" )
+IMPL_NODE_FACTORY( ANIMATECOLOR, "animcore::AnimateColor", "com.sun.star.animations.AnimateColor" )
+IMPL_NODE_FACTORY( ANIMATEMOTION, "animcore::AnimateMotion", "com.sun.star.animations.AnimateMotion" )
+IMPL_NODE_FACTORY( ANIMATETRANSFORM, "animcore::AnimateTransform", "com.sun.star.animations.AnimateTransform" )
+IMPL_NODE_FACTORY( TRANSITIONFILTER, "animcore::TransitionFilter", "com.sun.star.animations.TransitionFilter" )
+IMPL_NODE_FACTORY( AUDIO, "animcore::Audio", "com.sun.star.animations.Audio" );
+IMPL_NODE_FACTORY( COMMAND, "animcore::Command", "com.sun.star.animations.Command" );
+
+// --------------------------------------------------------------------
+
+// XInterface
+Any SAL_CALL AnimationNode::queryInterface( const Type& aType ) throw (RuntimeException)
+{
+ Any aRet( ::cppu::queryInterface(
+ aType,
+ static_cast< XServiceInfo * >( this ),
+ static_cast< XTypeProvider * >( this ),
+ static_cast< XChild * >( static_cast< XTimeContainer * >(this) ),
+ static_cast< XCloneable* >( this ),
+ static_cast< XAnimationNode* >( static_cast< XTimeContainer * >(this) ),
+ static_cast< XInterface* >(static_cast< OWeakObject * >(this)),
+ static_cast< XWeak* >(static_cast< OWeakObject * >(this)),
+ static_cast< XChangesNotifier* >( this ),
+ static_cast< XUnoTunnel* >( this ) ) );
+
+ if(!aRet.hasValue())
+ {
+ switch( mnNodeType )
+ {
+ case AnimationNodeType::PAR:
+ case AnimationNodeType::SEQ:
+ aRet = ::cppu::queryInterface(
+ aType,
+ static_cast< XTimeContainer * >( this ),
+ static_cast< XEnumerationAccess * >( this ),
+ static_cast< XElementAccess * >( this ) );
+ break;
+ case AnimationNodeType::ITERATE:
+ aRet = ::cppu::queryInterface(
+ aType,
+ static_cast< XTimeContainer * >( this ),
+ static_cast< XIterateContainer * >( this ),
+ static_cast< XEnumerationAccess * >( this ),
+ static_cast< XElementAccess * >( this ) );
+ break;
+ case AnimationNodeType::ANIMATE:
+ aRet = ::cppu::queryInterface(
+ aType,
+ static_cast< XAnimate * >( static_cast< XAnimateMotion * >(this) ) );
+ break;
+ case AnimationNodeType::ANIMATEMOTION:
+ aRet = ::cppu::queryInterface(
+ aType,
+ static_cast< XAnimate * >( static_cast< XAnimateMotion * >(this) ),
+ static_cast< XAnimateMotion * >( this ) );
+ break;
+ case AnimationNodeType::ANIMATECOLOR:
+ aRet = ::cppu::queryInterface(
+ aType,
+ static_cast< XAnimate * >( static_cast< XAnimateColor * >(this) ),
+ static_cast< XAnimateColor * >( this ) );
+ break;
+ case AnimationNodeType::SET:
+ aRet = ::cppu::queryInterface(
+ aType,
+ static_cast< XAnimate * >( static_cast< XAnimateSet * >(this) ),
+ static_cast< XAnimateSet * >( this ) );
+ break;
+ case AnimationNodeType::ANIMATETRANSFORM:
+ aRet = ::cppu::queryInterface(
+ aType,
+ static_cast< XAnimate * >( static_cast< XAnimateTransform * >(this) ),
+ static_cast< XAnimateTransform * >( this ) );
+ break;
+ case AnimationNodeType::AUDIO:
+ aRet = ::cppu::queryInterface(
+ aType,
+ static_cast< XAudio * >( static_cast< XAudio * >(this) ) );
+ break;
+ case AnimationNodeType::COMMAND:
+ aRet = ::cppu::queryInterface(
+ aType,
+ static_cast< XCommand * >( static_cast< XCommand * >(this) ) );
+ break;
+ case AnimationNodeType::TRANSITIONFILTER:
+ aRet = ::cppu::queryInterface(
+ aType,
+ static_cast< XAnimate * >( static_cast< XTransitionFilter * >(this) ),
+ static_cast< XTransitionFilter * >( this ) );
+ break;
+ }
+ }
+
+ return aRet.hasValue() ? aRet : OWeakObject::queryInterface( aType );
+}
+
+// --------------------------------------------------------------------
+
+void AnimationNode::initTypeProvider( sal_Int16 nNodeType ) throw()
+{
+ ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() );
+
+ if(! mpTypes[nNodeType] )
+ {
+ // create id
+ mpId[nNodeType] = new Sequence< sal_Int8 >( 16 );
+ rtl_createUuid( (sal_uInt8 *)mpId[nNodeType]->getArray(), 0, sal_True );
+
+ static sal_Int32 type_numbers[] =
+ {
+ 7, // CUSTOM
+ 9, // PAR
+ 9, // SEQ
+ 9, // ITERATE
+ 8, // ANIMATE
+ 8, // SET
+ 8, // ANIMATEMOTION
+ 8, // ANIMATECOLOR
+ 8, // ANIMATETRANSFORM
+ 8, // TRANSITIONFILTER
+ 8, // AUDIO
+ 8, // COMMAND
+ };
+
+ // collect types
+ Sequence< Type > * types = new Sequence< Type >( type_numbers[nNodeType] );
+ Type * pTypeAr = types->getArray();
+ sal_Int32 nPos = 0;
+
+ pTypeAr[nPos++] = ::getCppuType( (const Reference< XWeak > *)0 );
+ pTypeAr[nPos++] = ::getCppuType( (const Reference< XChild > *)0 );
+ pTypeAr[nPos++] = ::getCppuType( (const Reference< XCloneable > *)0 );
+ pTypeAr[nPos++] = ::getCppuType( (const Reference< XTypeProvider > *)0 );
+ pTypeAr[nPos++] = ::getCppuType( (const Reference< XServiceInfo > *)0 );
+ pTypeAr[nPos++] = ::getCppuType( (const Reference< XUnoTunnel > *)0 );
+ pTypeAr[nPos++] = ::getCppuType( (const Reference< XChangesNotifier> *)0 );
+
+ switch( nNodeType )
+ {
+ case AnimationNodeType::PAR:
+ case AnimationNodeType::SEQ:
+ pTypeAr[nPos++] = ::getCppuType( (const Reference< XTimeContainer > *)0 );
+ pTypeAr[nPos++] = ::getCppuType( (const Reference< XEnumerationAccess > *)0 );
+ break;
+ case AnimationNodeType::ITERATE:
+ pTypeAr[nPos++] = ::getCppuType( (const Reference< XIterateContainer > *)0 );
+ pTypeAr[nPos++] = ::getCppuType( (const Reference< XEnumerationAccess > *)0 );
+ break;
+ case AnimationNodeType::ANIMATE:
+ pTypeAr[nPos++] = ::getCppuType( (const Reference< XAnimate > *)0 );
+ break;
+ case AnimationNodeType::ANIMATEMOTION:
+ pTypeAr[nPos++] = ::getCppuType( (const Reference< XAnimateMotion > *)0 );
+ break;
+ case AnimationNodeType::ANIMATECOLOR:
+ pTypeAr[nPos++] = ::getCppuType( (const Reference< XAnimateColor > *)0 );
+ break;
+ case AnimationNodeType::ANIMATETRANSFORM:
+ pTypeAr[nPos++] = ::getCppuType( (const Reference< XAnimateTransform > *)0 );
+ break;
+ case AnimationNodeType::SET:
+ pTypeAr[nPos++] = ::getCppuType( (const Reference< XAnimateSet > *)0 );
+ break;
+ case AnimationNodeType::TRANSITIONFILTER:
+ pTypeAr[nPos++] = ::getCppuType( (const Reference< XTransitionFilter > *)0 );
+ break;
+ case AnimationNodeType::AUDIO:
+ pTypeAr[nPos++] = ::getCppuType( (const Reference< XAudio > *)0 );
+ break;
+ case AnimationNodeType::COMMAND:
+ pTypeAr[nPos++] = ::getCppuType( ( const Reference< XCommand > *)0 );
+ break;
+ }
+ mpTypes[nNodeType] = types;
+ }
+}
+
+// --------------------------------------------------------------------
+
+Sequence< Type > AnimationNode::getTypes() throw (RuntimeException)
+{
+ if (! mpTypes[mnNodeType])
+ initTypeProvider(mnNodeType);
+ return *mpTypes[mnNodeType];
+}
+// --------------------------------------------------------------------
+
+Sequence< sal_Int8 > AnimationNode::getImplementationId() throw (RuntimeException)
+{
+ if (! mpId[mnNodeType])
+ initTypeProvider(mnNodeType);
+ return *mpId[mnNodeType];
+}
+
+// --------------------------------------------------------------------
+
+// XInterface
+void SAL_CALL AnimationNode::acquire( ) throw ()
+{
+ OWeakObject::acquire();
+}
+
+// --------------------------------------------------------------------
+
+// XInterface
+void SAL_CALL AnimationNode::release( ) throw ()
+{
+ OWeakObject::acquire();
+}
+
+// --------------------------------------------------------------------
+
+// XServiceInfo
+OUString AnimationNode::getImplementationName() throw()
+{
+ switch( mnNodeType )
+ {
+ case AnimationNodeType::PAR:
+ return getImplementationName_PAR();
+ case AnimationNodeType::SEQ:
+ return getImplementationName_SEQ();
+ case AnimationNodeType::ITERATE:
+ return getImplementationName_ITERATE();
+ case AnimationNodeType::SET:
+ return getImplementationName_SET();
+ case AnimationNodeType::ANIMATECOLOR:
+ return getImplementationName_ANIMATECOLOR();
+ case AnimationNodeType::ANIMATEMOTION:
+ return getImplementationName_ANIMATEMOTION();
+ case AnimationNodeType::TRANSITIONFILTER:
+ return getImplementationName_TRANSITIONFILTER();
+ case AnimationNodeType::ANIMATETRANSFORM:
+ return getImplementationName_ANIMATETRANSFORM();
+ case AnimationNodeType::AUDIO:
+ return getImplementationName_AUDIO();
+ case AnimationNodeType::COMMAND:
+ return getImplementationName_COMMAND();
+ case AnimationNodeType::ANIMATE:
+ default:
+ return getImplementationName_ANIMATE();
+ }
+}
+
+// --------------------------------------------------------------------
+
+// XServiceInfo
+sal_Bool AnimationNode::supportsService(const OUString& ServiceName) throw()
+{
+ Sequence< OUString > aSNL( getSupportedServiceNames() );
+ const OUString * pArray = aSNL.getConstArray();
+
+ for( sal_Int32 i = 0; i < aSNL.getLength(); i++ )
+ if( pArray[i] == ServiceName )
+ return sal_True;
+
+ return sal_False;
+}
+
+// --------------------------------------------------------------------
+
+// XServiceInfo
+Sequence< OUString > AnimationNode::getSupportedServiceNames(void) throw()
+{
+ switch( mnNodeType )
+ {
+ case AnimationNodeType::PAR:
+ return getSupportedServiceNames_PAR();
+ case AnimationNodeType::SEQ:
+ return getSupportedServiceNames_SEQ();
+ case AnimationNodeType::ITERATE:
+ return getSupportedServiceNames_ITERATE();
+ case AnimationNodeType::SET:
+ return getSupportedServiceNames_SET();
+ case AnimationNodeType::ANIMATECOLOR:
+ return getSupportedServiceNames_ANIMATECOLOR();
+ case AnimationNodeType::ANIMATEMOTION:
+ return getSupportedServiceNames_ANIMATEMOTION();
+ case AnimationNodeType::TRANSITIONFILTER:
+ return getSupportedServiceNames_TRANSITIONFILTER();
+ case AnimationNodeType::AUDIO:
+ return getSupportedServiceNames_AUDIO();
+ case AnimationNodeType::COMMAND:
+ return getSupportedServiceNames_COMMAND();
+ case AnimationNodeType::ANIMATE:
+ default:
+ return getSupportedServiceNames_ANIMATE();
+ }
+}
+
+// --------------------------------------------------------------------
+
+// XAnimationNode
+sal_Int16 SAL_CALL AnimationNode::getType() throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ return mnNodeType;
+}
+
+// --------------------------------------------------------------------
+
+// XAnimationNode
+Any SAL_CALL AnimationNode::getBegin() throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ return maBegin;
+}
+
+// --------------------------------------------------------------------
+
+// XAnimationNode
+void SAL_CALL AnimationNode::setBegin( const Any& _begin ) throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ if( _begin != maBegin )
+ {
+ maBegin = _begin;
+ fireChangeListener();
+ }
+}
+
+// --------------------------------------------------------------------
+
+// XAnimationNode
+Any SAL_CALL AnimationNode::getDuration() throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ return maDuration;
+}
+
+// --------------------------------------------------------------------
+
+// XAnimationNode
+void SAL_CALL AnimationNode::setDuration( const Any& _duration ) throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ if( _duration != maDuration )
+ {
+ maDuration = _duration;
+ fireChangeListener();
+ }
+}
+
+// --------------------------------------------------------------------
+
+// XAnimationNode
+Any SAL_CALL AnimationNode::getEnd() throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ return maEnd;
+}
+
+// --------------------------------------------------------------------
+
+// XAnimationNode
+void SAL_CALL AnimationNode::setEnd( const Any& _end ) throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ if( _end != maEnd )
+ {
+ maEnd = _end;
+ fireChangeListener();
+ }
+}
+
+// --------------------------------------------------------------------
+
+// XAnimationNode
+Any SAL_CALL AnimationNode::getEndSync() throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ return maEndSync;
+}
+
+// --------------------------------------------------------------------
+
+// XAnimationNode
+void SAL_CALL AnimationNode::setEndSync( const Any& _endsync ) throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ if( _endsync != maEndSync )
+ {
+ maEndSync = _endsync;
+ fireChangeListener();
+ }
+}
+
+// --------------------------------------------------------------------
+
+// XAnimationNode
+Any SAL_CALL AnimationNode::getRepeatCount() throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ return maRepeatCount;
+}
+
+// --------------------------------------------------------------------
+
+// XAnimationNode
+void SAL_CALL AnimationNode::setRepeatCount( const Any& _repeatcount ) throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ if( _repeatcount != maRepeatCount )
+ {
+ maRepeatCount = _repeatcount;
+ fireChangeListener();
+ }
+}
+
+// --------------------------------------------------------------------
+
+// XAnimationNode
+Any SAL_CALL AnimationNode::getRepeatDuration() throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ return maRepeatDuration;
+}
+
+// --------------------------------------------------------------------
+
+// XAnimationNode
+void SAL_CALL AnimationNode::setRepeatDuration( const Any& _repeatduration ) throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ if( _repeatduration != maRepeatDuration )
+ {
+ maRepeatDuration = _repeatduration;
+ fireChangeListener();
+ }
+}
+
+// --------------------------------------------------------------------
+
+// XAnimationNode
+sal_Int16 SAL_CALL AnimationNode::getFill() throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ return mnFill;
+}
+
+// --------------------------------------------------------------------
+
+// XAnimationNode
+void SAL_CALL AnimationNode::setFill( sal_Int16 _fill ) throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ if( _fill != mnFill )
+ {
+ mnFill = _fill;
+ fireChangeListener();
+ }
+}
+
+// --------------------------------------------------------------------
+
+// XAnimationNode
+sal_Int16 SAL_CALL AnimationNode::getFillDefault() throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ return mnFillDefault;
+}
+
+// --------------------------------------------------------------------
+
+// XAnimationNode
+void SAL_CALL AnimationNode::setFillDefault( sal_Int16 _filldefault ) throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ if( _filldefault != mnFillDefault )
+ {
+ mnFillDefault = _filldefault;
+ fireChangeListener();
+ }
+}
+
+// --------------------------------------------------------------------
+
+// XAnimationNode
+sal_Int16 SAL_CALL AnimationNode::getRestart() throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ return mnRestart;
+}
+
+// --------------------------------------------------------------------
+
+// XAnimationNode
+void SAL_CALL AnimationNode::setRestart( sal_Int16 _restart ) throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ if( _restart != mnRestart )
+ {
+ mnRestart = _restart;
+ fireChangeListener();
+ }
+}
+
+// --------------------------------------------------------------------
+
+// XAnimationNode
+sal_Int16 SAL_CALL AnimationNode::getRestartDefault() throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ return mnRestartDefault;
+}
+
+// --------------------------------------------------------------------
+
+// XAnimationNode
+void SAL_CALL AnimationNode::setRestartDefault( sal_Int16 _restartdefault ) throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ if( _restartdefault != mnRestartDefault )
+ {
+ mnRestartDefault = _restartdefault;
+ fireChangeListener();
+ }
+}
+
+// --------------------------------------------------------------------
+
+// XAnimationNode
+double SAL_CALL AnimationNode::getAcceleration() throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ return mfAcceleration;
+}
+
+// --------------------------------------------------------------------
+
+// XAnimationNode
+void SAL_CALL AnimationNode::setAcceleration( double _acceleration ) throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ if( _acceleration != mfAcceleration )
+ {
+ mfAcceleration = _acceleration;
+ fireChangeListener();
+ }
+}
+
+// --------------------------------------------------------------------
+
+// XAnimationNode
+double SAL_CALL AnimationNode::getDecelerate() throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ return mfDecelerate;
+}
+
+// --------------------------------------------------------------------
+
+// XAnimationNode
+void SAL_CALL AnimationNode::setDecelerate( double _decelerate ) throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ if( _decelerate != mfDecelerate )
+ {
+ mfDecelerate = _decelerate;
+ fireChangeListener();
+ }
+}
+
+// --------------------------------------------------------------------
+
+// XAnimationNode
+sal_Bool SAL_CALL AnimationNode::getAutoReverse() throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ return mbAutoReverse;
+}
+
+// --------------------------------------------------------------------
+
+// XAnimationNode
+void SAL_CALL AnimationNode::setAutoReverse( sal_Bool _autoreverse ) throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ if( _autoreverse != mbAutoReverse )
+ {
+ mbAutoReverse = _autoreverse;
+ fireChangeListener();
+ }
+}
+
+// --------------------------------------------------------------------
+
+Sequence< NamedValue > SAL_CALL AnimationNode::getUserData() throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ return maUserData;
+}
+
+// --------------------------------------------------------------------
+
+void SAL_CALL AnimationNode::setUserData( const Sequence< NamedValue >& _userdata ) throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ maUserData = _userdata;
+ fireChangeListener();
+}
+
+// --------------------------------------------------------------------
+
+// XChild
+Reference< XInterface > SAL_CALL AnimationNode::getParent() throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ return mxParent;
+}
+
+// --------------------------------------------------------------------
+
+// XChild
+void SAL_CALL AnimationNode::setParent( const Reference< XInterface >& Parent ) throw (NoSupportException, RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ if( Parent != mxParent )
+ {
+ mxParent = Parent;
+
+ mpParent = 0;
+ Reference< XUnoTunnel > xTunnel( mxParent, UNO_QUERY );
+ if( xTunnel.is() )
+ mpParent = reinterpret_cast< AnimationNode* >( sal::static_int_cast< sal_IntPtr >(xTunnel->getSomething( getUnoTunnelId() )));
+
+ fireChangeListener();
+ }
+}
+
+// --------------------------------------------------------------------
+
+// XCloneable
+Reference< XCloneable > SAL_CALL AnimationNode::createClone() throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+
+ Reference< XCloneable > xNewNode;
+ try
+ {
+ xNewNode = new AnimationNode( *this );
+
+ if( maChilds.size() )
+ {
+ Reference< XTimeContainer > xContainer( xNewNode, UNO_QUERY );
+ if( xContainer.is() )
+ {
+ ChildList_t::iterator aIter( maChilds.begin() );
+ ChildList_t::iterator aEnd( maChilds.end() );
+ while( aIter != aEnd )
+ {
+ Reference< XCloneable > xCloneable((*aIter++), UNO_QUERY );
+ if( xCloneable.is() ) try
+ {
+ Reference< XAnimationNode > xNewChildNode( xCloneable->createClone(), UNO_QUERY );
+ if( xNewChildNode.is() )
+ xContainer->appendChild( xNewChildNode );
+ }
+ catch( Exception& e )
+ {
+ (void)e;
+ OSL_TRACE( "animations::AnimationNode::createClone(), exception caught!" );
+ }
+ }
+ }
+ }
+ }
+ catch( Exception& e )
+ {
+ (void)e;
+ OSL_TRACE( "animations::AnimationNode::createClone(), exception caught!" );
+ }
+
+ return xNewNode;
+}
+
+// --------------------------------------------------------------------
+
+// XAnimate
+Any SAL_CALL AnimationNode::getTarget()
+ throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ return maTarget;
+}
+
+// --------------------------------------------------------------------
+
+// XAnimate
+void SAL_CALL AnimationNode::setTarget( const Any& _target )
+ throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ if( _target != maTarget )
+ {
+ maTarget= _target;
+ fireChangeListener();
+ }
+}
+
+// --------------------------------------------------------------------
+
+// XAnimate
+OUString SAL_CALL AnimationNode::getAttributeName() throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ return maAttributeName;
+}
+
+// --------------------------------------------------------------------
+
+// XAnimate
+void SAL_CALL AnimationNode::setAttributeName( const OUString& _attribute )
+ throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ if( _attribute != maAttributeName )
+ {
+ maAttributeName = _attribute;
+ fireChangeListener();
+ }
+}
+
+// --------------------------------------------------------------------
+
+// XAnimate
+Sequence< Any > SAL_CALL AnimationNode::getValues()
+ throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ return maValues;
+}
+
+// --------------------------------------------------------------------
+
+// XAnimate
+void SAL_CALL AnimationNode::setValues( const Sequence< Any >& _values )
+ throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ maValues = _values;
+ fireChangeListener();
+}
+
+// --------------------------------------------------------------------
+
+// XAnimate
+sal_Int16 SAL_CALL AnimationNode::getSubItem() throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ return mnSubItem;
+}
+
+// --------------------------------------------------------------------
+
+// XAnimate
+void SAL_CALL AnimationNode::setSubItem( sal_Int16 _subitem ) throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ if( _subitem != mnSubItem )
+ {
+ mnSubItem = _subitem;
+ fireChangeListener();
+ }
+}
+
+// --------------------------------------------------------------------
+
+// XAnimate
+Sequence< double > SAL_CALL AnimationNode::getKeyTimes() throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ return maKeyTimes;
+}
+
+// --------------------------------------------------------------------
+
+// XAnimate
+void SAL_CALL AnimationNode::setKeyTimes( const Sequence< double >& _keytimes ) throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ maKeyTimes = _keytimes;
+ fireChangeListener();
+}
+
+// --------------------------------------------------------------------
+
+// XAnimate
+sal_Int16 SAL_CALL AnimationNode::getValueType() throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ return mnValueType;
+}
+
+// --------------------------------------------------------------------
+
+void SAL_CALL AnimationNode::setValueType( sal_Int16 _valuetype ) throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ if( _valuetype != mnValueType )
+ {
+ mnValueType = _valuetype;
+ fireChangeListener();
+ }
+}
+
+// --------------------------------------------------------------------
+
+// XAnimate
+sal_Int16 SAL_CALL AnimationNode::getCalcMode()
+ throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ return mnCalcMode;
+}
+
+// --------------------------------------------------------------------
+
+// XAnimate
+void SAL_CALL AnimationNode::setCalcMode( sal_Int16 _calcmode )
+ throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ if( _calcmode != mnCalcMode )
+ {
+ mnCalcMode = _calcmode;
+ fireChangeListener();
+ }
+}
+
+// --------------------------------------------------------------------
+
+// XAnimate
+sal_Bool SAL_CALL AnimationNode::getAccumulate()
+ throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ return mbAccumulate;
+}
+
+// --------------------------------------------------------------------
+
+// XAnimate
+void SAL_CALL AnimationNode::setAccumulate( sal_Bool _accumulate )
+ throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ if( _accumulate != mbAccumulate )
+ {
+ mbAccumulate = _accumulate;
+ fireChangeListener();
+ }
+}
+
+// --------------------------------------------------------------------
+
+// XAnimate
+sal_Int16 SAL_CALL AnimationNode::getAdditive()
+ throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ return mnAdditive;
+}
+
+// --------------------------------------------------------------------
+
+// XAnimate
+void SAL_CALL AnimationNode::setAdditive( sal_Int16 _additive )
+ throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ if( _additive != mnAdditive )
+ {
+ mnAdditive = _additive;
+ fireChangeListener();
+ }
+}
+
+// --------------------------------------------------------------------
+
+// XAnimate
+Any SAL_CALL AnimationNode::getFrom()
+ throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ return maFrom;
+}
+
+// --------------------------------------------------------------------
+
+// XAnimate
+void SAL_CALL AnimationNode::setFrom( const Any& _from )
+ throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ if( _from != maFrom )
+ {
+ maFrom = _from;
+ fireChangeListener();
+ }
+}
+
+// --------------------------------------------------------------------
+
+// XAnimate
+Any SAL_CALL AnimationNode::getTo()
+ throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ return maTo;
+}
+
+// --------------------------------------------------------------------
+
+// XAnimate
+void SAL_CALL AnimationNode::setTo( const Any& _to )
+ throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ if( _to != maTo )
+ {
+ maTo = _to;
+ fireChangeListener();
+ }
+}
+
+// --------------------------------------------------------------------
+
+// XAnimate
+Any SAL_CALL AnimationNode::getBy()
+ throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ return maBy;
+}
+
+// --------------------------------------------------------------------
+
+// XAnimate
+void SAL_CALL AnimationNode::setBy( const Any& _by )
+ throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ if( _by != maBy )
+ {
+ maBy = _by;
+ fireChangeListener();
+ }
+}
+
+// --------------------------------------------------------------------
+
+// XAnimate
+Sequence< TimeFilterPair > SAL_CALL AnimationNode::getTimeFilter()
+ throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ return maTimeFilter;
+}
+
+// --------------------------------------------------------------------
+
+// XAnimate
+void SAL_CALL AnimationNode::setTimeFilter( const Sequence< TimeFilterPair >& _timefilter )
+ throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ maTimeFilter = _timefilter;
+ fireChangeListener();
+}
+
+// --------------------------------------------------------------------
+
+OUString SAL_CALL AnimationNode::getFormula() throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ return maFormula;
+}
+
+// --------------------------------------------------------------------
+
+void SAL_CALL AnimationNode::setFormula( const OUString& _formula ) throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ if( _formula != maFormula )
+ {
+ maFormula = _formula;
+ fireChangeListener();
+ }
+}
+
+// --------------------------------------------------------------------
+
+// XAnimateColor
+sal_Int16 SAL_CALL AnimationNode::getColorInterpolation() throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ return mnColorSpace;
+}
+
+// --------------------------------------------------------------------
+
+// XAnimateColor
+void SAL_CALL AnimationNode::setColorInterpolation( sal_Int16 _colorspace ) throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ if( _colorspace != mnColorSpace )
+ {
+ mnColorSpace = _colorspace;
+ fireChangeListener();
+ }
+}
+
+// --------------------------------------------------------------------
+
+// XAnimateColor
+sal_Bool SAL_CALL AnimationNode::getDirection() throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ return mbDirection;
+}
+
+// --------------------------------------------------------------------
+
+// XAnimateColor
+void SAL_CALL AnimationNode::setDirection( sal_Bool _direction ) throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ if( _direction != mbDirection )
+ {
+ mbDirection = _direction;
+ fireChangeListener();
+ }
+}
+
+// --------------------------------------------------------------------
+
+// XAnimateMotion
+Any SAL_CALL AnimationNode::getPath() throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ return maPath;
+}
+
+// --------------------------------------------------------------------
+
+// XAnimateMotion
+void SAL_CALL AnimationNode::setPath( const Any& _path ) throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ maPath = _path;
+ fireChangeListener();
+}
+
+// --------------------------------------------------------------------
+
+// XAnimateMotion
+Any SAL_CALL AnimationNode::getOrigin() throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ return maOrigin;
+}
+
+// --------------------------------------------------------------------
+
+// XAnimateMotion
+void SAL_CALL AnimationNode::setOrigin( const Any& _origin ) throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ maOrigin = _origin;
+ fireChangeListener();
+}
+
+// --------------------------------------------------------------------
+
+// XAnimateTransform
+sal_Int16 SAL_CALL AnimationNode::getTransformType() throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ return mnTransformType;
+}
+
+// --------------------------------------------------------------------
+
+// XAnimateTransform
+void SAL_CALL AnimationNode::setTransformType( sal_Int16 _transformtype ) throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ if( _transformtype != mnTransformType )
+ {
+ mnTransformType = _transformtype;
+ fireChangeListener();
+ }
+}
+
+// --------------------------------------------------------------------
+
+// XTransitionFilter
+sal_Int16 SAL_CALL AnimationNode::getTransition() throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ return mnTransition;
+}
+
+// --------------------------------------------------------------------
+
+// XTransitionFilter
+void SAL_CALL AnimationNode::setTransition( sal_Int16 _transition ) throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ if( _transition != mnTransition )
+ {
+ mnTransition = _transition;
+ fireChangeListener();
+ }
+}
+
+// --------------------------------------------------------------------
+
+// XTransitionFilter
+sal_Int16 SAL_CALL AnimationNode::getSubtype() throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ return mnSubtype;
+}
+
+// --------------------------------------------------------------------
+
+// XTransitionFilter
+void SAL_CALL AnimationNode::setSubtype( sal_Int16 _subtype ) throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ if( _subtype != mnSubtype )
+ {
+ mnSubtype = _subtype;
+ fireChangeListener();
+ }
+}
+
+// --------------------------------------------------------------------
+
+// XTransitionFilter
+sal_Bool SAL_CALL AnimationNode::getMode() throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ return mbMode;
+}
+
+// --------------------------------------------------------------------
+
+// XTransitionFilter
+void SAL_CALL AnimationNode::setMode( sal_Bool _mode ) throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ if( _mode != mbMode )
+ {
+ mbMode = _mode;
+ fireChangeListener();
+ }
+}
+
+// --------------------------------------------------------------------
+
+// XTransitionFilter
+sal_Int32 SAL_CALL AnimationNode::getFadeColor() throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ return mnFadeColor;
+}
+
+// --------------------------------------------------------------------
+
+// XTransitionFilter
+void SAL_CALL AnimationNode::setFadeColor( sal_Int32 _fadecolor ) throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ if( _fadecolor != mnFadeColor )
+ {
+ mnFadeColor = _fadecolor;
+ fireChangeListener();
+ }
+}
+
+// --------------------------------------------------------------------
+
+// XAudio
+Any SAL_CALL AnimationNode::getSource() throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ return maTarget;
+}
+
+// --------------------------------------------------------------------
+
+// XAudio
+void SAL_CALL AnimationNode::setSource( const Any& _source ) throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ maTarget = _source;
+ fireChangeListener();
+}
+
+// --------------------------------------------------------------------
+
+// XAudio
+double SAL_CALL AnimationNode::getVolume() throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ return mfVolume;
+}
+
+// --------------------------------------------------------------------
+
+// XAudio
+void SAL_CALL AnimationNode::setVolume( double _volume ) throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ if( _volume != mfVolume )
+ {
+ mfVolume = _volume;
+ fireChangeListener();
+ }
+}
+
+// --------------------------------------------------------------------
+
+// XCommand
+sal_Int16 SAL_CALL AnimationNode::getCommand() throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ return mnCommand;
+}
+
+// --------------------------------------------------------------------
+
+// XCommand
+void SAL_CALL AnimationNode::setCommand( sal_Int16 _command ) throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ if( _command != mnCommand )
+ {
+ mnCommand = _command;
+ fireChangeListener();
+ }
+}
+
+// --------------------------------------------------------------------
+
+// XCommand
+Any SAL_CALL AnimationNode::getParameter() throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ return maParameter;
+}
+
+// --------------------------------------------------------------------
+
+// XCommand
+void SAL_CALL AnimationNode::setParameter( const Any& _parameter ) throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ maParameter = _parameter;
+ fireChangeListener();
+}
+
+// --------------------------------------------------------------------
+
+// XElementAccess
+Type SAL_CALL AnimationNode::getElementType() throw (RuntimeException)
+{
+ return ::getCppuType((const Reference< XAnimationNode >*)0);
+}
+
+// --------------------------------------------------------------------
+
+// XElementAccess
+sal_Bool SAL_CALL AnimationNode::hasElements() throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ return !maChilds.empty();
+}
+
+// --------------------------------------------------------------------
+
+// XEnumerationAccess
+Reference< XEnumeration > SAL_CALL AnimationNode::createEnumeration()
+ throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+
+ return new TimeContainerEnumeration( maChilds);
+}
+
+// --------------------------------------------------------------------
+
+
+// XTimeContainer
+Reference< XAnimationNode > SAL_CALL AnimationNode::insertBefore( const Reference< XAnimationNode >& newChild, const Reference< XAnimationNode >& refChild )
+ throw (IllegalArgumentException, NoSuchElementException, ElementExistException, WrappedTargetException, RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+
+ if( !newChild.is() || !refChild.is() )
+ throw IllegalArgumentException();
+
+ ChildList_t::iterator before = ::std::find(maChilds.begin(), maChilds.end(), refChild);
+ if( before == maChilds.end() )
+ throw NoSuchElementException();
+
+ if( ::std::find(maChilds.begin(), maChilds.end(), newChild) != maChilds.end() )
+ throw ElementExistException();
+
+ maChilds.insert( before, newChild );
+
+ Reference< XInterface > xThis( static_cast< OWeakObject * >(this) );
+ newChild->setParent( xThis );
+
+ return newChild;
+}
+
+// --------------------------------------------------------------------
+
+// XTimeContainer
+Reference< XAnimationNode > SAL_CALL AnimationNode::insertAfter( const Reference< XAnimationNode >& newChild, const Reference< XAnimationNode >& refChild )
+ throw (IllegalArgumentException, NoSuchElementException, ElementExistException, WrappedTargetException, RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+
+ if( !newChild.is() || !refChild.is() )
+ throw IllegalArgumentException();
+
+ ChildList_t::iterator before = ::std::find(maChilds.begin(), maChilds.end(), refChild);
+ if( before == maChilds.end() )
+ throw NoSuchElementException();
+
+ if( ::std::find(maChilds.begin(), maChilds.end(), newChild) != maChilds.end() )
+ throw ElementExistException();
+
+ before++;
+ if( before != maChilds.end() )
+ maChilds.insert( before, newChild );
+ else
+ maChilds.push_back( newChild );
+
+ Reference< XInterface > xThis( static_cast< OWeakObject * >(this) );
+ newChild->setParent( xThis );
+
+ return newChild;
+}
+
+// --------------------------------------------------------------------
+
+// XTimeContainer
+Reference< XAnimationNode > SAL_CALL AnimationNode::replaceChild( const Reference< XAnimationNode >& newChild, const Reference< XAnimationNode >& oldChild )
+ throw( IllegalArgumentException, NoSuchElementException, ElementExistException, WrappedTargetException, RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+
+ if( !newChild.is() || !oldChild.is() )
+ throw IllegalArgumentException();
+
+ ChildList_t::iterator replace = ::std::find(maChilds.begin(), maChilds.end(), oldChild);
+ if( replace == maChilds.end() )
+ throw NoSuchElementException();
+
+ if( ::std::find(maChilds.begin(), maChilds.end(), newChild) != maChilds.end() )
+ throw ElementExistException();
+
+ Reference< XInterface > xNull( 0 );
+ oldChild->setParent( xNull );
+
+ (*replace) = newChild;
+
+ Reference< XInterface > xThis( static_cast< OWeakObject * >(this) );
+ newChild->setParent( xThis );
+
+ return newChild;
+}
+
+// --------------------------------------------------------------------
+
+// XTimeContainer
+Reference< XAnimationNode > SAL_CALL AnimationNode::removeChild( const Reference< XAnimationNode >& oldChild )
+ throw(IllegalArgumentException, NoSuchElementException, WrappedTargetException, RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+
+ if( !oldChild.is() )
+ throw IllegalArgumentException();
+
+ ChildList_t::iterator old = ::std::find(maChilds.begin(), maChilds.end(), oldChild);
+ if( old == maChilds.end() )
+ throw NoSuchElementException();
+
+ Reference< XInterface > xNull( 0 );
+ oldChild->setParent( xNull );
+
+ maChilds.erase( old );
+
+ return oldChild;
+}
+
+// --------------------------------------------------------------------
+
+// XTimeContainer
+Reference< XAnimationNode > SAL_CALL AnimationNode::appendChild( const Reference< XAnimationNode >& newChild )
+ throw(IllegalArgumentException, ElementExistException, WrappedTargetException, RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+
+ if( !newChild.is() )
+ throw IllegalArgumentException();
+
+ if( ::std::find(maChilds.begin(), maChilds.end(), newChild) != maChilds.end() )
+ throw ElementExistException();
+
+ Reference< XInterface > xThis( static_cast< OWeakObject * >(this) );
+ Reference< XInterface > xChild( newChild );
+
+ if( xThis == xChild )
+ throw IllegalArgumentException();
+
+ maChilds.push_back( newChild );
+
+ newChild->setParent( xThis );
+
+ return newChild;
+}
+
+// --------------------------------------------------------------------
+
+// XIterateContainer
+sal_Int16 SAL_CALL AnimationNode::getIterateType() throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ return mnIterateType;
+}
+
+// --------------------------------------------------------------------
+
+// XIterateContainer
+void SAL_CALL AnimationNode::setIterateType( sal_Int16 _iteratetype ) throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ if( _iteratetype != mnIterateType )
+ {
+ mnIterateType = _iteratetype;
+ fireChangeListener();
+ }
+}
+
+// --------------------------------------------------------------------
+
+// XIterateContainer
+double SAL_CALL AnimationNode::getIterateInterval() throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ return mfIterateInterval;
+}
+
+// --------------------------------------------------------------------
+
+// XIterateContainer
+void SAL_CALL AnimationNode::setIterateInterval( double _iterateinterval ) throw (RuntimeException)
+{
+ Guard< Mutex > aGuard( maMutex );
+ if( _iterateinterval != mfIterateInterval )
+ {
+ mfIterateInterval = _iterateinterval;
+ fireChangeListener();
+ }
+}
+
+// --------------------------------------------------------------------
+
+// XChangesNotifier
+void SAL_CALL AnimationNode::addChangesListener( const Reference< XChangesListener >& aListener ) throw (RuntimeException)
+{
+ maChangeListener.addInterface( aListener );
+}
+
+// --------------------------------------------------------------------
+
+// XChangesNotifier
+void SAL_CALL AnimationNode::removeChangesListener( const Reference< XChangesListener >& aListener ) throw (RuntimeException)
+{
+ maChangeListener.removeInterface(aListener);
+}
+
+// --------------------------------------------------------------------
+
+// XUnoTunnel
+::sal_Int64 SAL_CALL AnimationNode::getSomething( const Sequence< ::sal_Int8 >& rId ) throw (RuntimeException)
+{
+ if( rId.getLength() == 16 && 0 == rtl_compareMemory( getUnoTunnelId().getConstArray(), rId.getConstArray(), 16 ) )
+ {
+ return sal::static_int_cast< sal_Int64 >(reinterpret_cast< sal_IntPtr >(this));
+
+ }
+ else
+ {
+ return 0;
+ }
+}
+
+// --------------------------------------------------------------------
+
+const ::com::sun::star::uno::Sequence< sal_Int8 > & AnimationNode::getUnoTunnelId()
+{
+ static ::com::sun::star::uno::Sequence< sal_Int8 > * pSeq = 0;
+ if( !pSeq )
+ {
+ ::osl::Guard< ::osl::Mutex > aGuard( ::osl::Mutex::getGlobalMutex() );
+ if( !pSeq )
+ {
+ static ::com::sun::star::uno::Sequence< sal_Int8 > aSeq( 16 );
+ rtl_createUuid( (sal_uInt8*)aSeq.getArray(), 0, sal_True );
+ pSeq = &aSeq;
+ }
+ }
+ return *pSeq;
+}
+
+// --------------------------------------------------------------------
+
+void AnimationNode::fireChangeListener()
+{
+ Guard< Mutex > aGuard( maMutex );
+
+ OInterfaceIteratorHelper aIterator( maChangeListener );
+ if( aIterator.hasMoreElements() )
+ {
+ Reference< XInterface > xSource( static_cast<OWeakObject*>(this), UNO_QUERY );
+ Sequence< ElementChange > aChanges;
+ const ChangesEvent aEvent( xSource, makeAny( mxParent ), aChanges );
+ while( aIterator.hasMoreElements() )
+ {
+ Reference< XChangesListener > xListener( aIterator.next(), UNO_QUERY );
+ if( xListener.is() )
+ xListener->changesOccurred( aEvent );
+ }
+ }
+
+ if( mpParent )
+ mpParent->fireChangeListener();
+}
+
+// --------------------------------------------------------------------
+
+} // namespace animcore
diff --git a/animations/source/animcore/animcore.xml b/animations/source/animcore/animcore.xml
new file mode 100644
index 000000000000..9ccca0f02081
--- /dev/null
+++ b/animations/source/animcore/animcore.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE module-description PUBLIC "-//StarOffice//DTD ComponentDescription 1.0//EN" "module-description.dtd">
+<module-description xmlns:xlink="http://www.w3.org/1999/xlink">
+ <module-name> animations </module-name>
+
+ <component-description>
+ <author> Christian Lippka </author>
+ <name> todo </name>
+ <description>
+ This component provides ...
+ </description>
+ <loader-name> com.sun.star.loader.SharedLibrary </loader-name>
+ <language> c++ </language>
+ <status value="draft"/>
+ <supported-service> </supported-service>
+ <service-dependency> ... </service-dependency>
+ <type> ... </type>
+ </component-description>
+
+ <project-build-dependency> cppuhelper </project-build-dependency>
+ <project-build-dependency> cppu </project-build-dependency>
+ <project-build-dependency> vos </project-build-dependency>
+ <project-build-dependency> sal </project-build-dependency>
+
+ <runtime-module-dependency> cppuhelper </runtime-module-dependency>
+ <runtime-module-dependency> cppu2 </runtime-module-dependency>
+ <runtime-module-dependency> vos2MSC </runtime-module-dependency>
+ <runtime-module-dependency> sal2 </runtime-module-dependency>
+</module-description>
+
diff --git a/animations/source/animcore/factreg.cxx b/animations/source/animcore/factreg.cxx
new file mode 100644
index 000000000000..3cfc350d405d
--- /dev/null
+++ b/animations/source/animcore/factreg.cxx
@@ -0,0 +1,100 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <osl/diagnose.h>
+#include <cppuhelper/factory.hxx>
+#include <cppuhelper/implementationentry.hxx>
+
+#include <com/sun/star/registry/XRegistryKey.hpp>
+
+using namespace ::rtl;
+using namespace ::cppu;
+using namespace ::com::sun::star::uno;
+using namespace ::com::sun::star::lang;
+using namespace ::com::sun::star::registry;
+
+#include "factreg.hxx"
+
+namespace animcore
+{
+ rtl_StandardModuleCount g_moduleCount = MODULE_COUNT_INIT;
+}
+
+using namespace animcore;
+
+#define IMPLEMENTATION_ENTRY(N)\
+{\
+ createInstance_##N, getImplementationName_##N ,\
+ getSupportedServiceNames_##N, createSingleComponentFactory ,\
+ &g_moduleCount.modCnt , 0\
+}\
+
+static struct ImplementationEntry g_entries[] =
+{
+ IMPLEMENTATION_ENTRY( PAR ),
+ IMPLEMENTATION_ENTRY( SEQ ),
+ IMPLEMENTATION_ENTRY( ITERATE ),
+ IMPLEMENTATION_ENTRY( ANIMATE ),
+ IMPLEMENTATION_ENTRY( SET ),
+ IMPLEMENTATION_ENTRY( ANIMATECOLOR ),
+ IMPLEMENTATION_ENTRY( ANIMATEMOTION ),
+ IMPLEMENTATION_ENTRY( ANIMATETRANSFORM ),
+ IMPLEMENTATION_ENTRY( TRANSITIONFILTER ),
+ IMPLEMENTATION_ENTRY( AUDIO ),
+ IMPLEMENTATION_ENTRY( COMMAND ),
+ IMPLEMENTATION_ENTRY( TargetPropertiesCreator ),
+ { 0, 0, 0, 0, 0, 0 }
+};
+
+extern "C"
+{
+
+sal_Bool SAL_CALL component_canUnload( TimeValue *pTime )
+{
+ return g_moduleCount.canUnload( &g_moduleCount , pTime );
+}
+
+//==================================================================================================
+void SAL_CALL component_getImplementationEnvironment(
+ const sal_Char ** ppEnvTypeName, uno_Environment ** )
+{
+ *ppEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME;
+}
+//==================================================================================================
+sal_Bool SAL_CALL component_writeInfo(
+ void * pServiceManager, void * pRegistryKey )
+{
+ return component_writeInfoHelper( pServiceManager, pRegistryKey, g_entries );
+}
+//==================================================================================================
+void * SAL_CALL component_getFactory(
+ const sal_Char * pImplName, void * pServiceManager, void * pRegistryKey )
+{
+ return component_getFactoryHelper( pImplName, pServiceManager, pRegistryKey , g_entries );
+}
+
+}
diff --git a/animations/source/animcore/factreg.hxx b/animations/source/animcore/factreg.hxx
new file mode 100644
index 000000000000..b76fc1067e0c
--- /dev/null
+++ b/animations/source/animcore/factreg.hxx
@@ -0,0 +1,51 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#include <rtl/unload.h>
+
+namespace animcore {
+
+extern rtl_StandardModuleCount g_moduleCount;
+
+#define DECL_NODE_FACTORY(N)\
+extern ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL createInstance_##N( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > & rSMgr ) throw (::com::sun::star::uno::Exception);\
+extern ::rtl::OUString getImplementationName_##N();\
+extern ::com::sun::star::uno::Sequence< ::rtl::OUString> getSupportedServiceNames_##N(void)
+
+DECL_NODE_FACTORY( PAR );
+DECL_NODE_FACTORY( SEQ );
+DECL_NODE_FACTORY( ITERATE );
+DECL_NODE_FACTORY( ANIMATE );
+DECL_NODE_FACTORY( SET );
+DECL_NODE_FACTORY( ANIMATECOLOR );
+DECL_NODE_FACTORY( ANIMATEMOTION );
+DECL_NODE_FACTORY( ANIMATETRANSFORM );
+DECL_NODE_FACTORY( TRANSITIONFILTER );
+DECL_NODE_FACTORY( AUDIO );
+DECL_NODE_FACTORY( COMMAND );
+DECL_NODE_FACTORY( TargetPropertiesCreator );
+
+}
diff --git a/animations/source/animcore/makefile.mk b/animations/source/animcore/makefile.mk
new file mode 100644
index 000000000000..b78460ada157
--- /dev/null
+++ b/animations/source/animcore/makefile.mk
@@ -0,0 +1,70 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+PRJ=..$/..
+
+PRJNAME=animations
+TARGET=animcore
+ENABLE_EXCEPTIONS=TRUE
+NO_BSYMBOLIC=TRUE
+#COMP1TYPELIST=$(TARGET)
+#COMPRDB=$(SOLARBINDIR)$/offapi.rdb
+
+# --- Settings -----------------------------------------------------
+.INCLUDE : settings.mk
+.IF "$(L10N_framework)"==""
+# --- Files --------------------------------------------------------
+#UNOUCRDEP=$(SOLARBINDIR)$/offapi.rdb
+#UNOUCRRDB=$(SOLARBINDIR)$/offapi.rdb
+#UNOUCROUT=$(OUT)$/inc$/animations
+#INCPRE+= $(UNOUCROUT)
+
+
+SLOFILES = $(SLO)$/animcore.obj\
+ $(SLO)$/factreg.obj\
+ $(SLO)$/targetpropertiescreator.obj
+
+SHL1TARGET= $(TARGET)
+SHL1VERSIONMAP=$(SOLARENV)/src/unloadablecomponent.map
+
+SHL1STDLIBS= \
+ $(SALLIB) \
+ $(CPPULIB) \
+ $(CPPUHELPERLIB)
+
+
+SHL1DEPN=
+SHL1IMPLIB= i$(TARGET)
+SHL1LIBS= $(SLB)$/$(TARGET).lib
+SHL1DEF= $(MISC)$/$(SHL1TARGET).def
+
+DEF1NAME= $(SHL1TARGET)
+
+.ENDIF # L10N_framework
+
+# --- Targets ------------------------------------------------------
+.INCLUDE : target.mk
+
diff --git a/animations/source/animcore/targetpropertiescreator.cxx b/animations/source/animcore/targetpropertiescreator.cxx
new file mode 100644
index 000000000000..0bba7b55d918
--- /dev/null
+++ b/animations/source/animcore/targetpropertiescreator.cxx
@@ -0,0 +1,504 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <com/sun/star/uno/XComponentContext.hpp>
+#include <com/sun/star/lang/XServiceInfo.hpp>
+#include <com/sun/star/lang/XTypeProvider.hpp>
+#include <com/sun/star/animations/XTargetPropertiesCreator.hpp>
+#include <com/sun/star/animations/XIterateContainer.hpp>
+#include <com/sun/star/animations/TargetProperties.hpp>
+#include <com/sun/star/presentation/ParagraphTarget.hpp>
+#include <com/sun/star/registry/XRegistryKey.hpp>
+#include <com/sun/star/lang/XInitialization.hpp>
+#include <com/sun/star/lang/XServiceName.hpp>
+#include <com/sun/star/lang/XSingleServiceFactory.hpp>
+#include <com/sun/star/drawing/XShape.hpp>
+#include <com/sun/star/animations/AnimationNodeType.hpp>
+#include <com/sun/star/animations/XAnimate.hpp>
+#include <cppuhelper/compbase3.hxx>
+#include <cppuhelper/factory.hxx>
+#include <cppuhelper/implementationentry.hxx>
+#include <comphelper/optionalvalue.hxx>
+#include <comphelper/broadcasthelper.hxx>
+#include <comphelper/sequence.hxx>
+
+#include <animations/animationnodehelper.hxx>
+
+#include <vector>
+#include <hash_map>
+
+
+using namespace ::com::sun::star;
+
+#define IMPLEMENTATION_NAME "animcore::TargetPropertiesCreator"
+#define SERVICE_NAME "com.sun.star.animations.TargetPropertiesCreator"
+
+namespace animcore
+{
+ typedef ::cppu::WeakComponentImplHelper3< ::com::sun::star::animations::XTargetPropertiesCreator,
+ lang::XServiceInfo,
+ lang::XServiceName > TargetPropertiesCreator_Base;
+
+ class TargetPropertiesCreator : public ::comphelper::OBaseMutex,
+ public TargetPropertiesCreator_Base
+ {
+ public:
+ static uno::Reference< uno::XInterface > SAL_CALL createInstance( const uno::Reference< uno::XComponentContext >& xContext ) throw ( uno::Exception )
+ {
+ return uno::Reference< uno::XInterface >( static_cast<cppu::OWeakObject*>(new TargetPropertiesCreator( xContext )) );
+ }
+
+ /// Dispose all internal references
+ virtual void SAL_CALL disposing();
+
+ // XTargetPropertiesCreator
+ virtual uno::Sequence< animations::TargetProperties > SAL_CALL createInitialTargetProperties( const uno::Reference< animations::XAnimationNode >& rootNode ) throw (uno::RuntimeException);
+
+ // XServiceInfo
+ virtual ::rtl::OUString SAL_CALL getImplementationName() throw( uno::RuntimeException );
+ virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw( uno::RuntimeException );
+ virtual uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames() throw( uno::RuntimeException );
+
+ // XServiceName
+ virtual ::rtl::OUString SAL_CALL getServiceName( ) throw (uno::RuntimeException);
+
+ protected:
+ ~TargetPropertiesCreator(); // we're a ref-counted UNO class. _We_ destroy ourselves.
+
+ private:
+ // default: disabled copy/assignment
+ TargetPropertiesCreator(const TargetPropertiesCreator&);
+ TargetPropertiesCreator& operator=( const TargetPropertiesCreator& );
+
+ TargetPropertiesCreator( const uno::Reference< uno::XComponentContext >& rxContext );
+ };
+
+ // --------------------------------------------------------------------
+
+ uno::Reference< uno::XInterface > SAL_CALL createInstance_TargetPropertiesCreator( const uno::Reference< uno::XComponentContext > & rSMgr ) throw (uno::Exception)
+ {
+ return TargetPropertiesCreator::createInstance( rSMgr );
+ }
+
+ ::rtl::OUString getImplementationName_TargetPropertiesCreator()
+ {
+ return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( IMPLEMENTATION_NAME ) );
+ }
+
+ uno::Sequence< ::rtl::OUString > getSupportedServiceNames_TargetPropertiesCreator(void)
+ {
+ uno::Sequence< ::rtl::OUString > aRet(1);
+ aRet.getArray()[0] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( SERVICE_NAME ) );
+ return aRet;
+ }
+
+ // --------------------------------------------------------------------
+
+ namespace
+ {
+ // Vector containing all properties for a given shape
+ typedef ::std::vector< beans::NamedValue > VectorOfNamedValues;
+
+ /** The hash map key
+
+ This key contains both XShape reference and a paragraph
+ index, as we somehow have to handle shape and paragraph
+ targets with the same data structure.
+ */
+ struct ShapeHashKey
+ {
+ /// Shape target
+ uno::Reference< drawing::XShape > mxRef;
+
+ /** Paragraph index.
+
+ If this is a pure shape target, mnParagraphIndex is
+ set to -1.
+ */
+ sal_Int16 mnParagraphIndex;
+
+ /// Comparison needed for hash_map
+ bool operator==( const ShapeHashKey& rRHS ) const
+ {
+ return mxRef == rRHS.mxRef && mnParagraphIndex == rRHS.mnParagraphIndex;
+ }
+ };
+
+ // A hash map which maps a XShape to the corresponding vector of initial properties
+ typedef ::std::hash_map< ShapeHashKey,
+ VectorOfNamedValues,
+ ::std::size_t (*)(const ShapeHashKey&) > XShapeHash;
+
+ ::std::size_t refhasher( const ShapeHashKey& rKey )
+ {
+ // TODO(P2): Maybe a better hash function would be to
+ // spread mnParagraphIndex to 32 bit: a0b0c0d0e0... Hakmem
+ // should have a formula.
+ //
+ // Yes it has:
+ // x = (x & 0x0000FF00) << 8) | (x >> 8) & 0x0000FF00 | x & 0xFF0000FF;
+ // x = (x & 0x00F000F0) << 4) | (x >> 4) & 0x00F000F0 | x & 0xF00FF00F;
+ // x = (x & 0x0C0C0C0C) << 2) | (x >> 2) & 0x0C0C0C0C | x & 0xC3C3C3C3;
+ // x = (x & 0x22222222) << 1) | (x >> 1) & 0x22222222 | x & 0x99999999;
+ //
+ // Costs about 17 cycles on a RISC machine with infinite
+ // instruction level parallelism (~42 basic
+ // instructions). Thus I truly doubt this pays off...
+ return reinterpret_cast< ::std::size_t >(rKey.mxRef.get()) ^ (rKey.mnParagraphIndex << 16L);
+ }
+
+
+ class NodeFunctor
+ {
+ public:
+ explicit NodeFunctor( XShapeHash& rShapeHash ) :
+ mrShapeHash( rShapeHash ),
+ mxTargetShape(),
+ mnParagraphIndex( -1 )
+ {
+ }
+
+ NodeFunctor( XShapeHash& rShapeHash,
+ const uno::Reference< drawing::XShape >& rTargetShape,
+ sal_Int16 nParagraphIndex ) :
+ mrShapeHash( rShapeHash ),
+ mxTargetShape( rTargetShape ),
+ mnParagraphIndex( nParagraphIndex )
+ {
+ }
+
+ void operator()( const uno::Reference< animations::XAnimationNode >& xNode ) const
+ {
+ if( !xNode.is() )
+ {
+ OSL_ENSURE( false,
+ "AnimCore: NodeFunctor::operator(): invalid XAnimationNode" );
+ return;
+ }
+
+ uno::Reference< drawing::XShape > xTargetShape( mxTargetShape );
+ sal_Int16 nParagraphIndex( mnParagraphIndex );
+
+ switch( xNode->getType() )
+ {
+ case animations::AnimationNodeType::ITERATE:
+ {
+ // extract target shape from iterate node
+ // (will override the target for all children)
+ // --------------------------------------------------
+
+ uno::Reference< animations::XIterateContainer > xIterNode( xNode,
+ uno::UNO_QUERY );
+
+ // TODO(E1): I'm not too sure what to expect here...
+ if( !xIterNode->getTarget().hasValue() )
+ {
+ OSL_ENSURE( false,
+ "animcore: NodeFunctor::operator(): no target on ITERATE node" );
+ return;
+ }
+
+ xTargetShape.set( xIterNode->getTarget(),
+ uno::UNO_QUERY );
+
+ if( !xTargetShape.is() )
+ {
+ ::com::sun::star::presentation::ParagraphTarget aTarget;
+
+ // no shape provided. Maybe a ParagraphTarget?
+ if( !(xIterNode->getTarget() >>= aTarget) )
+ {
+ OSL_ENSURE( false,
+ "animcore: NodeFunctor::operator(): could not extract any "
+ "target information" );
+ return;
+ }
+
+ xTargetShape = aTarget.Shape;
+ nParagraphIndex = aTarget.Paragraph;
+
+ if( !xTargetShape.is() )
+ {
+ OSL_ENSURE( false,
+ "animcore: NodeFunctor::operator(): invalid shape in ParagraphTarget" );
+ return;
+ }
+ }
+ }
+ // FALLTHROUGH intended
+ case animations::AnimationNodeType::PAR:
+ // FALLTHROUGH intended
+ case animations::AnimationNodeType::SEQ:
+ {
+ NodeFunctor aFunctor( mrShapeHash,
+ xTargetShape,
+ nParagraphIndex );
+ if( !::anim::for_each_childNode( xNode,
+ aFunctor ) )
+ {
+ OSL_ENSURE( false,
+ "AnimCore: NodeFunctor::operator(): child node iteration failed, "
+ "or extraneous container nodes encountered" );
+ }
+ }
+ break;
+
+ case animations::AnimationNodeType::CUSTOM:
+ // FALLTHROUGH intended
+ case animations::AnimationNodeType::ANIMATE:
+ // FALLTHROUGH intended
+ case animations::AnimationNodeType::ANIMATEMOTION:
+ // FALLTHROUGH intended
+ case animations::AnimationNodeType::ANIMATECOLOR:
+ // FALLTHROUGH intended
+ case animations::AnimationNodeType::ANIMATETRANSFORM:
+ // FALLTHROUGH intended
+ case animations::AnimationNodeType::TRANSITIONFILTER:
+ // FALLTHROUGH intended
+ case animations::AnimationNodeType::AUDIO:
+ // FALLTHROUGH intended
+ default:
+ // ignore this node, no valuable content for now.
+ break;
+
+ case animations::AnimationNodeType::SET:
+ {
+ // evaluate set node content
+ uno::Reference< animations::XAnimate > xAnimateNode( xNode,
+ uno::UNO_QUERY );
+
+ if( !xAnimateNode.is() )
+ break; // invalid node
+
+ // determine target shape (if any)
+ ShapeHashKey aTarget;
+ if( xTargetShape.is() )
+ {
+ // override target shape with parent-supplied
+ aTarget.mxRef = xTargetShape;
+ aTarget.mnParagraphIndex = nParagraphIndex;
+ }
+ else
+ {
+ // no parent-supplied target, retrieve
+ // node target
+ if( (xAnimateNode->getTarget() >>= aTarget.mxRef) )
+ {
+ // pure shape target - set paragraph
+ // index to magic
+ aTarget.mnParagraphIndex = -1;
+ }
+ else
+ {
+ // not a pure shape target - maybe a
+ // ParagraphTarget?
+ presentation::ParagraphTarget aUnoTarget;
+
+ if( !(xAnimateNode->getTarget() >>= aUnoTarget) )
+ {
+ OSL_ENSURE( false,
+ "AnimCore: NodeFunctor::operator(): unknown target type encountered" );
+ break;
+ }
+
+ aTarget.mxRef = aUnoTarget.Shape;
+ aTarget.mnParagraphIndex = aUnoTarget.Paragraph;
+ }
+ }
+
+ if( !aTarget.mxRef.is() )
+ {
+ OSL_ENSURE( false,
+ "AnimCore: NodeFunctor::operator(): Found target, but XShape is NULL" );
+ break; // invalid target XShape
+ }
+
+ // check whether we already have an entry for
+ // this target (we only take the first set
+ // effect for every shape)
+ XShapeHash::const_iterator aIter;
+ if( (aIter=mrShapeHash.find( aTarget )) != mrShapeHash.end() )
+ break; // already an entry in existence for given XShape
+
+ // if this is an appear effect, hide shape
+ // initially. This is currently the only place
+ // where a shape effect influences shape
+ // attributes outside it's effective duration.
+ if( xAnimateNode->getAttributeName().equalsIgnoreAsciiCaseAscii("visibility") )
+ {
+ sal_Bool bVisible( sal_False );
+
+ uno::Any aAny( xAnimateNode->getTo() );
+
+ // try to extract bool value
+ if( !(aAny >>= bVisible) )
+ {
+ // try to extract string
+ ::rtl::OUString aString;
+ if( (aAny >>= aString) )
+ {
+ // we also take the strings "true" and "false",
+ // as well as "on" and "off" here
+ if( aString.equalsIgnoreAsciiCaseAscii("true") ||
+ aString.equalsIgnoreAsciiCaseAscii("on") )
+ {
+ bVisible = sal_True;
+ }
+ if( aString.equalsIgnoreAsciiCaseAscii("false") ||
+ aString.equalsIgnoreAsciiCaseAscii("off") )
+ {
+ bVisible = sal_False;
+ }
+ }
+ }
+
+ if( bVisible )
+ {
+ // target is set to 'visible' at the
+ // first relevant effect. Thus, target
+ // must be initially _hidden_, for the
+ // effect to have visible impact.
+ mrShapeHash.insert(
+ XShapeHash::value_type(
+ aTarget,
+ VectorOfNamedValues(
+ 1,
+ beans::NamedValue(
+ xAnimateNode->getAttributeName(),
+ uno::makeAny( sal_False ) ) ) ) );
+ }
+ }
+ }
+ break;
+ }
+ }
+
+ private:
+ XShapeHash& mrShapeHash;
+ uno::Reference< drawing::XShape > mxTargetShape;
+ sal_Int16 mnParagraphIndex;
+ };
+ }
+
+ // --------------------------------------------------------------------
+
+ TargetPropertiesCreator::TargetPropertiesCreator( const uno::Reference< uno::XComponentContext >& ) :
+ TargetPropertiesCreator_Base( m_aMutex )
+ {
+ }
+
+ TargetPropertiesCreator::~TargetPropertiesCreator()
+ {
+ }
+
+ void SAL_CALL TargetPropertiesCreator::disposing()
+ {
+ ::osl::MutexGuard aGuard( m_aMutex );
+ }
+
+ // XTargetPropertiesCreator
+ uno::Sequence< animations::TargetProperties > SAL_CALL TargetPropertiesCreator::createInitialTargetProperties
+ (
+ const uno::Reference< animations::XAnimationNode >& xRootNode
+ ) throw (uno::RuntimeException)
+ {
+ ::osl::MutexGuard aGuard( m_aMutex );
+
+ // scan all nodes for visibility changes, and record first
+ // 'visibility=true' for each shape
+ XShapeHash aShapeHash( 101,
+ &refhasher );
+
+ NodeFunctor aFunctor( aShapeHash );
+
+ // TODO(F1): Maybe limit functor application to main sequence
+ // alone (CL said something that shape visibility is only
+ // affected by effects in the main sequence for PPT).
+ //
+ // OTOH, client code can pass us only the main sequence (which
+ // it actually does right now, for the slideshow implementation).
+ aFunctor( xRootNode );
+
+
+ // output to result sequence
+ // ----------------------------------------------------------------------
+
+ uno::Sequence< animations::TargetProperties > aRes( aShapeHash.size() );
+
+ ::std::size_t nCurrIndex(0);
+ XShapeHash::const_iterator aCurr( aShapeHash.begin() );
+ const XShapeHash::const_iterator aEnd ( aShapeHash.end() );
+ while( aCurr != aEnd )
+ {
+ animations::TargetProperties& rCurrProps( aRes[ nCurrIndex++ ] );
+
+ if( aCurr->first.mnParagraphIndex == -1 )
+ {
+ rCurrProps.Target = uno::makeAny( aCurr->first.mxRef );
+ }
+ else
+ {
+ rCurrProps.Target = uno::makeAny(
+ presentation::ParagraphTarget(
+ aCurr->first.mxRef,
+ aCurr->first.mnParagraphIndex ) );
+ }
+
+ rCurrProps.Properties = ::comphelper::containerToSequence( aCurr->second );
+
+ ++aCurr;
+ }
+
+ return aRes;
+ }
+
+ // XServiceInfo
+ ::rtl::OUString SAL_CALL TargetPropertiesCreator::getImplementationName() throw( uno::RuntimeException )
+ {
+ return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( IMPLEMENTATION_NAME ) );
+ }
+
+ sal_Bool SAL_CALL TargetPropertiesCreator::supportsService( const ::rtl::OUString& ServiceName ) throw( uno::RuntimeException )
+ {
+ return ServiceName.equalsIgnoreAsciiCaseAscii( SERVICE_NAME );
+ }
+
+ uno::Sequence< ::rtl::OUString > SAL_CALL TargetPropertiesCreator::getSupportedServiceNames() throw( uno::RuntimeException )
+ {
+ uno::Sequence< ::rtl::OUString > aRet(1);
+ aRet[0] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( SERVICE_NAME ) );
+
+ return aRet;
+ }
+
+ // XServiceName
+ ::rtl::OUString SAL_CALL TargetPropertiesCreator::getServiceName( ) throw (uno::RuntimeException)
+ {
+ return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( SERVICE_NAME ) );
+ }
+
+} // namespace animcore
diff --git a/apache-commons/java/codec/makefile.mk b/apache-commons/java/codec/makefile.mk
new file mode 100644
index 000000000000..6976731477de
--- /dev/null
+++ b/apache-commons/java/codec/makefile.mk
@@ -0,0 +1,74 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..$/..
+
+PRJNAME=apache-commons
+TARGET=commons-codec
+
+# --- Settings -----------------------------------------------------
+
+.INCLUDE : settings.mk
+
+# override buildfile
+ANT_BUILDFILE=build.xml
+
+.INCLUDE : antsettings.mk
+
+.IF "$(SOLAR_JAVA)" != "" && "$(ENABLE_MEDIAWIKI)" == "YES"
+# --- Files --------------------------------------------------------
+
+TARFILE_NAME=commons-codec-1.3-src
+TARFILE_MD5=af3c3acf618de6108d65fcdc92b492e1
+
+TARFILE_ROOTDIR=commons-codec-1.3
+
+PATCH_FILES=$(PRJ)$/patches$/codec.patch
+
+#CONVERTFILES=build.xml
+
+OUT2CLASS=dist$/commons-codec-1.3.jar
+
+.IF "$(JAVACISGCJ)"=="yes"
+JAVA_HOME=
+.EXPORT : JAVA_HOME
+BUILD_ACTION=$(ANT) -Dbuild.label="build-$(RSCREVISION)" -Dbuild.compiler=gcj -f $(ANT_BUILDFILE) jar
+.ELSE
+BUILD_ACTION=$(ANT) -Dbuild.label="build-$(RSCREVISION)" -f $(ANT_BUILDFILE) jar
+.ENDIF
+
+.ENDIF # $(SOLAR_JAVA)!= ""
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : set_ext.mk
+.INCLUDE : target.mk
+
+.IF "$(SOLAR_JAVA)" != "" && "$(ENABLE_MEDIAWIKI)" == "YES"
+.INCLUDE : tg_ext.mk
+.ENDIF
+
diff --git a/apache-commons/java/httpclient/makefile.mk b/apache-commons/java/httpclient/makefile.mk
new file mode 100644
index 000000000000..6e05150c7c20
--- /dev/null
+++ b/apache-commons/java/httpclient/makefile.mk
@@ -0,0 +1,79 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..$/..
+
+PRJNAME=apache-commons
+TARGET=commons-httpclient
+
+# --- Settings -----------------------------------------------------
+
+.INCLUDE : settings.mk
+
+# override buildfile
+ANT_BUILDFILE=build.xml
+
+.INCLUDE : antsettings.mk
+
+TAR!:=$(GNUTAR)
+
+.IF "$(SOLAR_JAVA)" != "" && "$(ENABLE_MEDIAWIKI)" == "YES"
+# --- Files --------------------------------------------------------
+
+TARFILE_NAME=commons-httpclient-3.1-src
+TARFILE_MD5=2c9b0f83ed5890af02c0df1c1776f39b
+
+TARFILE_ROOTDIR=commons-httpclient-3.1
+
+#PATCH_FILES=$(PRJ)$/patches$/httpclient.patch
+
+#CONVERTFILES=build.xml
+
+OUT2CLASS=dist$/commons-httpclient.jar
+
+COMMONS_LOGGING_JAR=..$/..$/..$/..$/$(INPATH)$/class$/commons-logging-1.1.1-SNAPSHOT.jar
+COMMONS_CODEC_JAR=..$/..$/..$/..$/$/$(INPATH)$/class$/commons-codec-1.3.jar
+
+.IF "$(JAVACISGCJ)"=="yes"
+JAVA_HOME=
+.EXPORT : JAVA_HOME
+BUILD_ACTION=$(ANT) -Dbuild.label="build-$(RSCREVISION)" -Dbuild.compiler=gcj -Dcommons-logging.jar=$(COMMONS_LOGGING_JAR) -Dcommons-codec.jar=$(COMMONS_CODEC_JAR) -f $(ANT_BUILDFILE) dist
+.ELSE
+BUILD_ACTION=$(ANT) -Dbuild.label="build-$(RSCREVISION)" -Dcommons-logging.jar=$(COMMONS_LOGGING_JAR) -Dcommons-codec.jar=$(COMMONS_CODEC_JAR) -f $(ANT_BUILDFILE) dist
+.ENDIF
+
+.ENDIF # $(SOLAR_JAVA)!= ""
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : set_ext.mk
+.INCLUDE : target.mk
+
+.IF "$(SOLAR_JAVA)" != "" && "$(ENABLE_MEDIAWIKI)" == "YES"
+.INCLUDE : tg_ext.mk
+.ENDIF
+
diff --git a/apache-commons/java/lang/makefile.mk b/apache-commons/java/lang/makefile.mk
new file mode 100644
index 000000000000..0bf15d0020ce
--- /dev/null
+++ b/apache-commons/java/lang/makefile.mk
@@ -0,0 +1,76 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..$/..
+
+PRJNAME=apache-commons
+TARGET=commons-lang
+
+# --- Settings -----------------------------------------------------
+
+.INCLUDE : settings.mk
+
+# override buildfile
+ANT_BUILDFILE=build.xml
+
+.INCLUDE : antsettings.mk
+
+TAR!:=$(GNUTAR)
+
+.IF "$(SOLAR_JAVA)" != "" && "$(ENABLE_MEDIAWIKI)" == "YES"
+# --- Files --------------------------------------------------------
+
+TARFILE_NAME=commons-lang-2.3-src
+TARFILE_MD5=2ae988b339daec234019a7066f96733e
+
+TARFILE_ROOTDIR=commons-lang-2.3-src
+
+#PATCH_FILES=$(PRJ)$/patches$/logging.patch
+
+#CONVERTFILES=build.xml
+
+OUT2CLASS=dist$/commons-lang-2.3.jar
+
+.IF "$(JAVACISGCJ)"=="yes"
+JAVA_HOME=
+.EXPORT : JAVA_HOME
+BUILD_ACTION=$(ANT) -Dbuild.label="build-$(RSCREVISION)" -Dbuild.compiler=gcj -f $(ANT_BUILDFILE) jar
+.ELSE
+BUILD_ACTION=$(ANT) -Dbuild.label="build-$(RSCREVISION)" -f $(ANT_BUILDFILE) jar
+.ENDIF
+
+.ENDIF # $(SOLAR_JAVA)!= ""
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : set_ext.mk
+.INCLUDE : target.mk
+
+.IF "$(SOLAR_JAVA)" != "" && "$(ENABLE_MEDIAWIKI)" == "YES"
+.INCLUDE : tg_ext.mk
+.ENDIF
+
diff --git a/apache-commons/java/logging/makefile.mk b/apache-commons/java/logging/makefile.mk
new file mode 100644
index 000000000000..5df8c34dde3a
--- /dev/null
+++ b/apache-commons/java/logging/makefile.mk
@@ -0,0 +1,78 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..$/..
+
+PRJNAME=apache-commons
+TARGET=commons-logging
+
+# --- Settings -----------------------------------------------------
+
+.INCLUDE : settings.mk
+
+# override buildfile
+ANT_BUILDFILE=build.xml
+
+.INCLUDE : antsettings.mk
+
+.IF "$(SOLAR_JAVA)" != "" && ( "$(ENABLE_MEDIAWIKI)" == "YES" || "$(ENABLE_REPORTBUILDER)" == "YES" )
+# --- Files --------------------------------------------------------
+
+TARFILE_NAME=commons-logging-1.1.1-src
+TARFILE_MD5=3c219630e4302863a9a83d0efde889db
+
+TARFILE_ROOTDIR=commons-logging-1.1.1-src
+
+PATCH_FILES=$(PRJ)$/patches$/logging.patch
+
+CONVERTFILES=build.xml
+
+OUT2CLASS=target$/commons-logging-1.1.1-SNAPSHOT.jar
+
+.IF "$(SYSTEM_TOMCAT)" != "YES"
+SERVLETAPI_JAR := $(SOLARVER)$/$(INPATH)$/bin$(UPDMINOREXT)$/servlet-api.jar
+.ENDIF
+
+.IF "$(JAVACISGCJ)"=="yes"
+JAVA_HOME=
+.EXPORT : JAVA_HOME
+BUILD_ACTION=$(ANT) -Dbuild.label="build-$(RSCREVISION)" -Dbuild.compiler=gcj -Dservletapi.jar=$(SERVLETAPI_JAR) -f $(ANT_BUILDFILE) compile build-jar
+.ELSE
+BUILD_ACTION=$(ANT) -Dbuild.label="build-$(RSCREVISION)" -f $(ANT_BUILDFILE) -Dservletapi.jar=$(SERVLETAPI_JAR) compile build-jar
+.ENDIF
+
+.ENDIF # $(SOLAR_JAVA)!= ""
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : set_ext.mk
+.INCLUDE : target.mk
+
+.IF "$(SOLAR_JAVA)" != "" && ( "$(ENABLE_MEDIAWIKI)" == "YES" || "$(ENABLE_REPORTBUILDER)" == "YES" )
+.INCLUDE : tg_ext.mk
+.ENDIF
+
diff --git a/apache-commons/patches/codec.patch b/apache-commons/patches/codec.patch
new file mode 100644
index 000000000000..dea25ad263d2
--- /dev/null
+++ b/apache-commons/patches/codec.patch
@@ -0,0 +1,17 @@
+--- misc/build/commons-codec-1.3/build.xml-old 2008-01-31 15:28:58.000000000 +0100
++++ misc/build/commons-codec-1.3/build.xml 2008-01-31 15:29:21.000000000 +0100
+@@ -90,14 +90,12 @@
+ </target>
+ <target name="dist" depends="compile,javadoc" description="Create binary distribution">
+ <mkdir dir="${dist.home}"/>
+- <copy file="../LICENSE" todir="${dist.home}"/>
+ <copy file="${basedir}/RELEASE-NOTES.txt" todir="${dist.home}"/>
+ <antcall target="jar"/>
+ </target>
+ <target name="jar" depends="compile" description="Create jar">
+ <mkdir dir="${dist.home}"/>
+ <mkdir dir="${build.home}/classes/META-INF"/>
+- <copy file="../LICENSE" tofile="${build.home}/classes/META-INF/LICENSE.txt"/>
+ <jar jarfile="${dist.home}/${final.name}.jar" basedir="${build.home}/classes" manifest="${build.home}/conf/MANIFEST.MF"/>
+ </target>
+ <target name="install-jar" depends="jar" description="--> Installs jar file in ${lib.repo}">
diff --git a/apache-commons/patches/logging.patch b/apache-commons/patches/logging.patch
new file mode 100644
index 000000000000..63b93dcbd6f2
--- /dev/null
+++ b/apache-commons/patches/logging.patch
@@ -0,0 +1,15 @@
+--- misc/commons-logging-1.1.1-src/build.xml 2007-11-22 00:27:52.000000000 +0100
++++ misc/build/commons-logging-1.1.1-src/build.xml 2008-06-24 14:23:56.316301736 +0200
+@@ -127,10 +127,10 @@
+ <!-- ========== Compiler Defaults ========================================= -->
+
+ <!-- Version of java class files to generate. -->
+- <property name="target.version" value="1.1"/>
++ <property name="target.version" value="1.3"/>
+
+ <!-- Version of java source to accept -->
+- <property name="source.version" value="1.2"/>
++ <property name="source.version" value="1.3"/>
+
+ <!-- Should Java compilations set the 'debug' compiler option? -->
+ <property name="compile.debug" value="true"/>
diff --git a/apache-commons/prj/build.lst b/apache-commons/prj/build.lst
new file mode 100644
index 000000000000..c509ce0336dd
--- /dev/null
+++ b/apache-commons/prj/build.lst
@@ -0,0 +1,6 @@
+ac apache-commons : solenv TOMCAT:tomcat NULL
+ac apache-commons usr1 - all ac_mkout NULL
+ac apache-commons\java\codec nmake - all ac_codec NULL
+ac apache-commons\java\lang nmake - all ac_lang NULL
+ac apache-commons\java\logging nmake - all ac_logging NULL
+ac apache-commons\java\httpclient nmake - all ac_httpclient ac_logging ac_codec NULL
diff --git a/apache-commons/prj/d.lst b/apache-commons/prj/d.lst
new file mode 100644
index 000000000000..21f6e01700ea
--- /dev/null
+++ b/apache-commons/prj/d.lst
@@ -0,0 +1,5 @@
+..\%__SRC%\class\commons-logging-1.1.1-SNAPSHOT.jar %_DEST%\bin%_EXT%\commons-logging-1.1.1.jar
+..\%__SRC%\class\commons-codec-1.3.jar %_DEST%\bin%_EXT%\commons-codec-1.3.jar
+..\%__SRC%\class\commons-httpclient.jar %_DEST%\bin%_EXT%\commons-httpclient-3.1.jar
+..\%__SRC%\class\commons-lang-2.3.jar %_DEST%\bin%_EXT%\commons-lang-2.3.jar
+
diff --git a/apple_remote/AppleRemote.m b/apple_remote/AppleRemote.m
new file mode 100644
index 000000000000..a65cc6440b41
--- /dev/null
+++ b/apple_remote/AppleRemote.m
@@ -0,0 +1,125 @@
+/*****************************************************************************
+ * RemoteControlWrapper.m
+ * RemoteControlWrapper
+ *
+ * Created by Martin Kahr on 11.03.06 under a MIT-style license.
+ * Copyright (c) 2006 martinkahr.com. All rights reserved.
+ *
+ * Code modified and adapted to OpenOffice.org
+ * by Eric Bachard on 11.08.2008 under the same license
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ *****************************************************************************/
+
+#import "AppleRemote.h"
+
+#import <mach/mach.h>
+#import <mach/mach_error.h>
+#import <IOKit/IOKitLib.h>
+#import <IOKit/IOCFPlugIn.h>
+#import <IOKit/hid/IOHIDKeys.h>
+
+const char* AppleRemoteDeviceName = "AppleIRController";
+
+// the WWDC 07 Leopard Build is missing the constant
+#ifndef NSAppKitVersionNumber10_4
+ #define NSAppKitVersionNumber10_4 824
+#endif
+#ifndef NSAppKitVersionNumber10_5
+ #define NSAppKitVersionNumber10_5 949
+#endif
+
+@implementation AppleRemote
+
++ (const char*) remoteControlDeviceName {
+ return AppleRemoteDeviceName;
+}
+
+- (void) setCookieMappingInDictionary: (NSMutableDictionary*) _cookieToButtonMapping {
+
+ // TODO : avoid such magics
+ if (floor(NSAppKitVersionNumber) <= NSAppKitVersionNumber10_4) {
+ #ifdef DEBUG
+ NSLog( @"setting 10.4 cookies" );
+ #endif
+ // 10.4.x Tiger
+ [_cookieToButtonMapping setObject:[NSNumber numberWithInt:kRemoteButtonPlus] forKey:@"14_12_11_6_"];
+ [_cookieToButtonMapping setObject:[NSNumber numberWithInt:kRemoteButtonMinus] forKey:@"14_13_11_6_"];
+ [_cookieToButtonMapping setObject:[NSNumber numberWithInt:kRemoteButtonMenu] forKey:@"14_7_6_14_7_6_"];
+ [_cookieToButtonMapping setObject:[NSNumber numberWithInt:kRemoteButtonPlay] forKey:@"14_8_6_14_8_6_"];
+ [_cookieToButtonMapping setObject:[NSNumber numberWithInt:kRemoteButtonRight] forKey:@"14_9_6_14_9_6_"];
+ [_cookieToButtonMapping setObject:[NSNumber numberWithInt:kRemoteButtonLeft] forKey:@"14_10_6_14_10_6_"];
+ [_cookieToButtonMapping setObject:[NSNumber numberWithInt:kRemoteButtonRight_Hold] forKey:@"14_6_4_2_"];
+ [_cookieToButtonMapping setObject:[NSNumber numberWithInt:kRemoteButtonLeft_Hold] forKey:@"14_6_3_2_"];
+ [_cookieToButtonMapping setObject:[NSNumber numberWithInt:kRemoteButtonMenu_Hold] forKey:@"14_6_14_6_"];
+ [_cookieToButtonMapping setObject:[NSNumber numberWithInt:kRemoteButtonPlay_Hold] forKey:@"18_14_6_18_14_6_"];
+ [_cookieToButtonMapping setObject:[NSNumber numberWithInt:kRemoteControl_Switched] forKey:@"19_"];
+ } else if( floor(NSAppKitVersionNumber) <= NSAppKitVersionNumber10_5 ) {
+ #ifdef DEBUG
+ NSLog( @"setting 10.5 cookies" );
+ #endif
+ // 10.5.x Leopard
+ [_cookieToButtonMapping setObject:[NSNumber numberWithInt:kRemoteButtonPlus] forKey:@"31_29_28_19_18_"];
+ [_cookieToButtonMapping setObject:[NSNumber numberWithInt:kRemoteButtonMinus] forKey:@"31_30_28_19_18_"];
+ [_cookieToButtonMapping setObject:[NSNumber numberWithInt:kRemoteButtonMenu] forKey:@"31_20_19_18_31_20_19_18_"];
+ [_cookieToButtonMapping setObject:[NSNumber numberWithInt:kRemoteButtonPlay] forKey:@"31_21_19_18_31_21_19_18_"];
+ [_cookieToButtonMapping setObject:[NSNumber numberWithInt:kRemoteButtonRight] forKey:@"31_22_19_18_31_22_19_18_"];
+ [_cookieToButtonMapping setObject:[NSNumber numberWithInt:kRemoteButtonLeft] forKey:@"31_23_19_18_31_23_19_18_"];
+ [_cookieToButtonMapping setObject:[NSNumber numberWithInt:kRemoteButtonRight_Hold] forKey:@"31_19_18_4_2_"];
+ [_cookieToButtonMapping setObject:[NSNumber numberWithInt:kRemoteButtonLeft_Hold] forKey:@"31_19_18_3_2_"];
+ [_cookieToButtonMapping setObject:[NSNumber numberWithInt:kRemoteButtonMenu_Hold] forKey:@"31_19_18_31_19_18_"];
+ [_cookieToButtonMapping setObject:[NSNumber numberWithInt:kRemoteButtonPlay_Hold] forKey:@"35_31_19_18_35_31_19_18_"];
+ [_cookieToButtonMapping setObject:[NSNumber numberWithInt:kRemoteControl_Switched] forKey:@"19_"];
+ }
+ else
+ {
+ #ifdef DEBUG
+ NSLog( @"setting 10.6 cookies" );
+ #endif
+ // 10.6.x Snow Leopard
+ [_cookieToButtonMapping setObject:[NSNumber numberWithInt:kRemoteButtonPlus] forKey:@"33_31_30_21_20_2_"];
+ [_cookieToButtonMapping setObject:[NSNumber numberWithInt:kRemoteButtonMinus] forKey:@"33_32_30_21_20_2_"];
+ [_cookieToButtonMapping setObject:[NSNumber numberWithInt:kRemoteButtonMenu] forKey:@"33_22_21_20_2_33_22_21_20_2_"];
+ [_cookieToButtonMapping setObject:[NSNumber numberWithInt:kRemoteButtonPlay] forKey:@"33_23_21_20_2_33_23_21_20_2_"];
+ [_cookieToButtonMapping setObject:[NSNumber numberWithInt:kRemoteButtonRight] forKey:@"33_24_21_20_2_33_24_21_20_2_"];
+ [_cookieToButtonMapping setObject:[NSNumber numberWithInt:kRemoteButtonLeft] forKey:@"33_25_21_20_2_33_25_21_20_2_"];
+ [_cookieToButtonMapping setObject:[NSNumber numberWithInt:kRemoteButtonRight_Hold] forKey:@"33_21_20_14_12_2_"];
+ [_cookieToButtonMapping setObject:[NSNumber numberWithInt:kRemoteButtonLeft_Hold] forKey:@"33_21_20_13_12_2_"];
+ [_cookieToButtonMapping setObject:[NSNumber numberWithInt:kRemoteButtonMenu_Hold] forKey:@"33_21_20_2_33_21_20_2_"];
+ [_cookieToButtonMapping setObject:[NSNumber numberWithInt:kRemoteButtonPlay_Hold] forKey:@"37_33_21_20_2_37_33_21_20_2_"];
+ [_cookieToButtonMapping setObject:[NSNumber numberWithInt:kRemoteControl_Switched] forKey:@"19_"];
+ }
+}
+
+- (void) sendRemoteButtonEvent: (RemoteControlEventIdentifier) event pressedDown: (BOOL) pressedDown {
+ if (pressedDown == NO && event == kRemoteButtonMenu_Hold) {
+ // There is no seperate event for pressed down on menu hold. We are simulating that event here
+ [super sendRemoteButtonEvent:event pressedDown:YES];
+ }
+
+ [super sendRemoteButtonEvent:event pressedDown:pressedDown];
+
+ if (pressedDown && (event == kRemoteButtonRight || event == kRemoteButtonLeft || event == kRemoteButtonPlay || event == kRemoteButtonMenu || event == kRemoteButtonPlay_Hold)) {
+ // There is no seperate event when the button is being released. We are simulating that event here
+ [super sendRemoteButtonEvent:event pressedDown:NO];
+ }
+}
+
+@end
diff --git a/apple_remote/GlobalKeyboardDevice.m b/apple_remote/GlobalKeyboardDevice.m
new file mode 100644
index 000000000000..14bf558a0511
--- /dev/null
+++ b/apple_remote/GlobalKeyboardDevice.m
@@ -0,0 +1,249 @@
+/*****************************************************************************
+ * GlobalKeyboardDevice.m
+ * RemoteControlWrapper
+ *
+ * Created by Martin Kahr on 11.03.06 under a MIT-style license.
+ * Copyright (c) 2006 martinkahr.com. All rights reserved.
+ *
+ * Code modified and adapted to OpenOffice.org
+ * by Eric Bachard on 11.08.2008 under the same license
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ *****************************************************************************/
+
+
+#import "GlobalKeyboardDevice.h"
+
+#define F1 122
+#define F2 120
+#define F3 99
+#define F4 118
+#define F5 96
+#define F6 97
+#define F7 98
+
+/*
+ the following default keys are read and shall be used to change the keyboard mapping
+
+ mac.remotecontrols.GlobalKeyboardDevice.plus_modifiers
+ mac.remotecontrols.GlobalKeyboardDevice.plus_keycode
+ mac.remotecontrols.GlobalKeyboardDevice.minus_modifiers
+ mac.remotecontrols.GlobalKeyboardDevice.minus_keycode
+ mac.remotecontrols.GlobalKeyboardDevice.play_modifiers
+ mac.remotecontrols.GlobalKeyboardDevice.play_keycode
+ mac.remotecontrols.GlobalKeyboardDevice.left_modifiers
+ mac.remotecontrols.GlobalKeyboardDevice.left_keycode
+ mac.remotecontrols.GlobalKeyboardDevice.right_modifiers
+ mac.remotecontrols.GlobalKeyboardDevice.right_keycode
+ mac.remotecontrols.GlobalKeyboardDevice.menu_modifiers
+ mac.remotecontrols.GlobalKeyboardDevice.menu_keycode
+ mac.remotecontrols.GlobalKeyboardDevice.playhold_modifiers
+ mac.remotecontrols.GlobalKeyboardDevice.playhold_keycode
+ */
+
+static OSStatus hotKeyEventHandler(EventHandlerCallRef, EventRef, void*);
+
+@implementation GlobalKeyboardDevice
+
+- (id) initWithDelegate: (id) _remoteControlDelegate {
+ if ( (self = [super initWithDelegate: _remoteControlDelegate]) ) {
+ hotKeyRemoteEventMapping = [[NSMutableDictionary alloc] init];
+
+ unsigned int modifiers = cmdKey + shiftKey /*+ optionKey*/ + controlKey;
+
+ [self mapRemoteButton:kRemoteButtonPlus defaultKeycode:F1 defaultModifiers:modifiers];
+ [self mapRemoteButton:kRemoteButtonMinus defaultKeycode:F2 defaultModifiers:modifiers];
+ [self mapRemoteButton:kRemoteButtonPlay defaultKeycode:F3 defaultModifiers:modifiers];
+ [self mapRemoteButton:kRemoteButtonLeft defaultKeycode:F4 defaultModifiers:modifiers];
+ [self mapRemoteButton:kRemoteButtonRight defaultKeycode:F5 defaultModifiers:modifiers];
+ [self mapRemoteButton:kRemoteButtonMenu defaultKeycode:F6 defaultModifiers:modifiers];
+ [self mapRemoteButton:kRemoteButtonPlay_Hold defaultKeycode:F7 defaultModifiers:modifiers];
+ }
+ return self;
+}
+
+- (void) dealloc {
+ [hotKeyRemoteEventMapping release];
+ [super dealloc];
+}
+
+- (void) mapRemoteButton: (RemoteControlEventIdentifier) remoteButtonIdentifier defaultKeycode: (unsigned int) defaultKeycode defaultModifiers: (unsigned int) defaultModifiers {
+ NSString* defaultsKey = NULL;
+
+ switch(remoteButtonIdentifier) {
+ case kRemoteButtonPlus:
+ defaultsKey = @"plus";
+ break;
+ case kRemoteButtonMinus:
+ defaultsKey = @"minus";
+ break;
+ case kRemoteButtonMenu:
+ defaultsKey = @"menu";
+ break;
+ case kRemoteButtonPlay:
+ defaultsKey = @"play";
+ break;
+ case kRemoteButtonRight:
+ defaultsKey = @"right";
+ break;
+ case kRemoteButtonLeft:
+ defaultsKey = @"left";
+ break;
+ case kRemoteButtonPlay_Hold:
+ defaultsKey = @"playhold";
+ break;
+ default:
+#ifdef DEBUG
+ NSLog(@"Unknown global keyboard defaults key for remote button identifier %d", remoteButtonIdentifier);
+#endif
+ break;
+ }
+
+ NSNumber* modifiersCfg = [[NSUserDefaults standardUserDefaults] objectForKey: [NSString stringWithFormat: @"mac.remotecontrols.GlobalKeyboardDevice.%@_modifiers", defaultsKey]];
+ NSNumber* keycodeCfg = [[NSUserDefaults standardUserDefaults] objectForKey: [NSString stringWithFormat: @"mac.remotecontrols.GlobalKeyboardDevice.%@_keycode", defaultsKey]];
+
+ unsigned int modifiers = defaultModifiers;
+ if (modifiersCfg) modifiers = [modifiersCfg unsignedIntValue];
+
+ unsigned int keycode = defaultKeycode;
+ if (keycodeCfg) keycode = [keycodeCfg unsignedIntValue];
+
+ [self registerHotKeyCode: keycode modifiers: modifiers remoteEventIdentifier: remoteButtonIdentifier];
+}
+
+- (void) setListeningToRemote: (BOOL) value {
+ if (value == [self isListeningToRemote]) return;
+ if (value) {
+ [self startListening: self];
+ } else {
+ [self stopListening: self];
+ }
+}
+- (BOOL) isListeningToRemote {
+ return (eventHandlerRef!=NULL);
+}
+
+- (void) startListening: (id) sender {
+
+ if (eventHandlerRef) return;
+
+ EventTypeSpec eventSpec[2] = {
+ { kEventClassKeyboard, kEventHotKeyPressed },
+ { kEventClassKeyboard, kEventHotKeyReleased }
+ };
+
+ InstallEventHandler( GetEventDispatcherTarget(),
+ (EventHandlerProcPtr)hotKeyEventHandler,
+ 2, eventSpec, self, &eventHandlerRef);
+}
+- (void) stopListening: (id) sender {
+ RemoveEventHandler(eventHandlerRef);
+ eventHandlerRef = NULL;
+}
+
+- (BOOL) sendsEventForButtonIdentifier: (RemoteControlEventIdentifier) identifier {
+ NSEnumerator* values = [hotKeyRemoteEventMapping objectEnumerator];
+ NSNumber* remoteIdentifier;
+ while( (remoteIdentifier = [values nextObject]) ) {
+ if ([remoteIdentifier unsignedIntValue] == identifier) return YES;
+ }
+ return NO;
+}
+
++ (const char*) remoteControlDeviceName {
+ return "Keyboard";
+}
+
+- (BOOL)registerHotKeyCode: (unsigned int) keycode modifiers: (unsigned int) modifiers remoteEventIdentifier: (RemoteControlEventIdentifier) identifier {
+ OSStatus err;
+ EventHotKeyID hotKeyID;
+ EventHotKeyRef carbonHotKey;
+
+ hotKeyID.signature = 'PTHk';
+ hotKeyID.id = (long)keycode;
+
+ err = RegisterEventHotKey(keycode, modifiers, hotKeyID, GetEventDispatcherTarget(), 0, &carbonHotKey );
+
+ if( err )
+ return NO;
+
+ [hotKeyRemoteEventMapping setObject: [NSNumber numberWithInt:identifier] forKey: [NSNumber numberWithUnsignedInt: hotKeyID.id]];
+
+ return YES;
+}
+/*
+- (void)unregisterHotKey: (PTHotKey*)hotKey
+{
+ OSStatus err;
+ EventHotKeyRef carbonHotKey;
+ NSValue* key;
+
+ if( [[self allHotKeys] containsObject: hotKey] == NO )
+ return;
+
+ carbonHotKey = [self _carbonHotKeyForHotKey: hotKey];
+ NSAssert( carbonHotKey != nil, @"" );
+
+ err = UnregisterEventHotKey( carbonHotKey );
+ //Watch as we ignore 'err':
+
+ key = [NSValue valueWithPointer: carbonHotKey];
+ [mHotKeys removeObjectForKey: key];
+
+ [self _updateEventHandler];
+
+ //See that? Completely ignored
+}
+*/
+
+- (RemoteControlEventIdentifier) remoteControlEventIdentifierForID: (unsigned int) id {
+ NSNumber* remoteEventIdentifier = [hotKeyRemoteEventMapping objectForKey:[NSNumber numberWithUnsignedInt: id]];
+ return [remoteEventIdentifier unsignedIntValue];
+}
+
+- (void) sendRemoteButtonEvent: (RemoteControlEventIdentifier) event pressedDown: (BOOL) pressedDown {
+ [delegate sendRemoteButtonEvent: event pressedDown: pressedDown remoteControl:self];
+}
+
+static RemoteControlEventIdentifier lastEvent;
+
+
+static OSStatus hotKeyEventHandler(EventHandlerCallRef inHandlerRef, EventRef inEvent, void* userData )
+{
+ GlobalKeyboardDevice* keyboardDevice = (GlobalKeyboardDevice*) userData;
+ EventHotKeyID hkCom;
+ GetEventParameter(inEvent,kEventParamDirectObject,typeEventHotKeyID,NULL,sizeof(hkCom),NULL,&hkCom);
+
+ RemoteControlEventIdentifier identifier = [keyboardDevice remoteControlEventIdentifierForID:hkCom.id];
+ if (identifier == 0) return noErr;
+
+ BOOL pressedDown = YES;
+ if (identifier != lastEvent) {
+ lastEvent = identifier;
+ } else {
+ lastEvent = 0;
+ pressedDown = NO;
+ }
+ [keyboardDevice sendRemoteButtonEvent: identifier pressedDown: pressedDown];
+
+ return noErr;
+}
+
+@end
diff --git a/apple_remote/HIDRemoteControlDevice.m b/apple_remote/HIDRemoteControlDevice.m
new file mode 100644
index 000000000000..94215900717b
--- /dev/null
+++ b/apple_remote/HIDRemoteControlDevice.m
@@ -0,0 +1,518 @@
+/*****************************************************************************
+ * HIDRemoteControlDevice.m
+ * RemoteControlWrapper
+ *
+ * Created by Martin Kahr on 11.03.06 under a MIT-style license.
+ * Copyright (c) 2006 martinkahr.com. All rights reserved.
+ *
+ * Code modified and adapted to OpenOffice.org
+ * by Eric Bachard on 11.08.2008 under the same license
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ *****************************************************************************/
+
+#import "HIDRemoteControlDevice.h"
+
+#import <mach/mach.h>
+#import <mach/mach_error.h>
+#import <IOKit/IOKitLib.h>
+#import <IOKit/IOCFPlugIn.h>
+#import <IOKit/hid/IOHIDKeys.h>
+#import <Carbon/Carbon.h>
+
+@interface HIDRemoteControlDevice (PrivateMethods)
+- (NSDictionary*) cookieToButtonMapping; // Creates the dictionary using the magics, depending on the remote
+- (IOHIDQueueInterface**) queue;
+- (IOHIDDeviceInterface**) hidDeviceInterface;
+- (void) handleEventWithCookieString: (NSString*) cookieString sumOfValues: (SInt32) sumOfValues;
+- (void) removeNotifcationObserver;
+- (void) remoteControlAvailable:(NSNotification *)notification;
+
+@end
+
+@interface HIDRemoteControlDevice (IOKitMethods)
++ (io_object_t) findRemoteDevice;
+- (IOHIDDeviceInterface**) createInterfaceForDevice: (io_object_t) hidDevice;
+- (BOOL) initializeCookies;
+- (BOOL) openDevice;
+@end
+
+@implementation HIDRemoteControlDevice
+
++ (const char*) remoteControlDeviceName {
+ return "";
+}
+
++ (BOOL) isRemoteAvailable {
+ io_object_t hidDevice = [self findRemoteDevice];
+ if (hidDevice != 0) {
+ IOObjectRelease(hidDevice);
+ return YES;
+ } else {
+ return NO;
+ }
+}
+
+- (id) initWithDelegate: (id) _remoteControlDelegate {
+ if ([[self class] isRemoteAvailable] == NO) return nil;
+
+ if ( (self = [super initWithDelegate: _remoteControlDelegate]) ) {
+ openInExclusiveMode = YES;
+ queue = NULL;
+ hidDeviceInterface = NULL;
+ cookieToButtonMapping = [[NSMutableDictionary alloc] init];
+
+ [self setCookieMappingInDictionary: cookieToButtonMapping];
+
+ NSEnumerator* enumerator = [cookieToButtonMapping objectEnumerator];
+ NSNumber* identifier;
+ supportedButtonEvents = 0;
+ while( (identifier = [enumerator nextObject]) ) {
+ supportedButtonEvents |= [identifier intValue];
+ }
+
+ fixSecureEventInputBug = [[NSUserDefaults standardUserDefaults] boolForKey: @"remoteControlWrapperFixSecureEventInputBug"];
+ }
+
+ return self;
+}
+
+- (void) dealloc {
+ [self removeNotifcationObserver];
+ [self stopListening:self];
+ [cookieToButtonMapping release];
+ [super dealloc];
+}
+
+- (void) sendRemoteButtonEvent: (RemoteControlEventIdentifier) event pressedDown: (BOOL) pressedDown {
+ [delegate sendRemoteButtonEvent: event pressedDown: pressedDown remoteControl:self];
+}
+
+- (void) setCookieMappingInDictionary: (NSMutableDictionary*) cookieToButtonMapping {
+}
+- (int) remoteIdSwitchCookie {
+ return 0;
+}
+
+- (BOOL) sendsEventForButtonIdentifier: (RemoteControlEventIdentifier) identifier {
+ return (supportedButtonEvents & identifier) == identifier;
+}
+
+- (BOOL) isListeningToRemote {
+ return (hidDeviceInterface != NULL && allCookies != NULL && queue != NULL);
+}
+
+- (void) setListeningToRemote: (BOOL) value {
+ if (value == NO) {
+ [self stopListening:self];
+ } else {
+ [self startListening:self];
+ }
+}
+
+- (BOOL) isOpenInExclusiveMode {
+ return openInExclusiveMode;
+}
+- (void) setOpenInExclusiveMode: (BOOL) value {
+ openInExclusiveMode = value;
+}
+
+- (BOOL) processesBacklog {
+ return processesBacklog;
+}
+- (void) setProcessesBacklog: (BOOL) value {
+ processesBacklog = value;
+}
+
+- (void) startListening: (id) sender {
+ if ([self isListeningToRemote]) return;
+
+ // 4th July 2007
+ //
+ // A security update in february of 2007 introduced an odd behavior.
+ // Whenever SecureEventInput is activated or deactivated the exclusive access
+ // to the remote control device is lost. This leads to very strange behavior where
+ // a press on the Menu button activates FrontRow while your app still gets the event.
+ // A great number of people have complained about this.
+ //
+ // Enabling the SecureEventInput and keeping it enabled does the trick.
+ //
+ // I'm pretty sure this is a kind of bug at Apple and I'm in contact with the responsible
+ // Apple Engineer. This solution is not a perfect one - I know.
+ // One of the side effects is that applications that listen for special global keyboard shortcuts (like Quicksilver)
+ // may get into problems as they no longer get the events.
+ // As there is no official Apple Remote API from Apple I also failed to open a technical incident on this.
+ //
+ // Note that there is a corresponding DisableSecureEventInput in the stopListening method below.
+ //
+ if ([self isOpenInExclusiveMode] && fixSecureEventInputBug) EnableSecureEventInput();
+
+ [self removeNotifcationObserver];
+
+ io_object_t hidDevice = [[self class] findRemoteDevice];
+ if (hidDevice == 0) return;
+
+ if ([self createInterfaceForDevice:hidDevice] == NULL) {
+ goto error;
+ }
+
+ if ([self initializeCookies]==NO) {
+ goto error;
+ }
+
+ if ([self openDevice]==NO) {
+ goto error;
+ }
+ // be KVO friendly
+ [self willChangeValueForKey:@"listeningToRemote"];
+ [self didChangeValueForKey:@"listeningToRemote"];
+ goto cleanup;
+
+error:
+ [self stopListening:self];
+ DisableSecureEventInput();
+
+cleanup:
+ IOObjectRelease(hidDevice);
+}
+
+- (void) stopListening: (id) sender {
+ if ([self isListeningToRemote]==NO) return;
+
+ BOOL sendNotification = NO;
+
+ if (eventSource != NULL) {
+ CFRunLoopRemoveSource(CFRunLoopGetCurrent(), eventSource, kCFRunLoopDefaultMode);
+ CFRelease(eventSource);
+ eventSource = NULL;
+ }
+ if (queue != NULL) {
+ (*queue)->stop(queue);
+
+ //dispose of queue
+ (*queue)->dispose(queue);
+
+ //release the queue we allocated
+ (*queue)->Release(queue);
+
+ queue = NULL;
+
+ sendNotification = YES;
+ }
+
+ if (allCookies != nil) {
+ [allCookies autorelease];
+ allCookies = nil;
+ }
+
+ if (hidDeviceInterface != NULL) {
+ //close the device
+ (*hidDeviceInterface)->close(hidDeviceInterface);
+
+ //release the interface
+ (*hidDeviceInterface)->Release(hidDeviceInterface);
+
+ hidDeviceInterface = NULL;
+ }
+
+ if ([self isOpenInExclusiveMode] && fixSecureEventInputBug) DisableSecureEventInput();
+
+ if ([self isOpenInExclusiveMode] && sendNotification) {
+ [[self class] sendFinishedNotifcationForAppIdentifier: nil];
+ }
+ // be KVO friendly
+ [self willChangeValueForKey:@"listeningToRemote"];
+ [self didChangeValueForKey:@"listeningToRemote"];
+}
+
+@end
+
+@implementation HIDRemoteControlDevice (PrivateMethods)
+
+- (IOHIDQueueInterface**) queue {
+ return queue;
+}
+
+- (IOHIDDeviceInterface**) hidDeviceInterface {
+ return hidDeviceInterface;
+}
+
+
+- (NSDictionary*) cookieToButtonMapping {
+ return cookieToButtonMapping;
+}
+
+- (NSString*) validCookieSubstring: (NSString*) cookieString {
+ if (cookieString == nil || [cookieString length] == 0) return nil;
+ NSEnumerator* keyEnum = [[self cookieToButtonMapping] keyEnumerator];
+ NSString* key;
+ while( (key = [keyEnum nextObject]) ) {
+ NSRange range = [cookieString rangeOfString:key];
+ if (range.location == 0) return key;
+ }
+ return nil;
+}
+
+- (void) handleEventWithCookieString: (NSString*) cookieString sumOfValues: (SInt32) sumOfValues {
+ /*
+ if (previousRemainingCookieString) {
+ cookieString = [previousRemainingCookieString stringByAppendingString: cookieString];
+ NSLog(@"New cookie string is %@", cookieString);
+ [previousRemainingCookieString release], previousRemainingCookieString=nil;
+ }*/
+ if (cookieString == nil || [cookieString length] == 0) return;
+
+ NSNumber* buttonId = [[self cookieToButtonMapping] objectForKey: cookieString];
+ if (buttonId != nil) {
+ [self sendRemoteButtonEvent: [buttonId intValue] pressedDown: (sumOfValues>0)];
+ } else {
+ // let's see if a number of events are stored in the cookie string. this does
+ // happen when the main thread is too busy to handle all incoming events in time.
+ NSString* subCookieString;
+ NSString* lastSubCookieString=nil;
+ while( (subCookieString = [self validCookieSubstring: cookieString]) ) {
+ cookieString = [cookieString substringFromIndex: [subCookieString length]];
+ lastSubCookieString = subCookieString;
+ if (processesBacklog) [self handleEventWithCookieString: subCookieString sumOfValues:sumOfValues];
+ }
+ if (processesBacklog == NO && lastSubCookieString != nil) {
+ // process the last event of the backlog and assume that the button is not pressed down any longer.
+ // The events in the backlog do not seem to be in order and therefore (in rare cases) the last event might be
+ // a button pressed down event while in reality the user has released it.
+ // NSLog(@"processing last event of backlog");
+ [self handleEventWithCookieString: lastSubCookieString sumOfValues:0];
+ }
+ if ([cookieString length] > 0) {
+ NSLog(@"Unknown button for cookiestring %@", cookieString);
+ }
+ }
+}
+
+- (void) removeNotifcationObserver {
+ [[NSDistributedNotificationCenter defaultCenter] removeObserver:self name:FINISHED_USING_REMOTE_CONTROL_NOTIFICATION object:nil];
+}
+
+- (void) remoteControlAvailable:(NSNotification *)notification {
+ [self removeNotifcationObserver];
+ [self startListening: self];
+}
+
+@end
+
+/* Callback method for the device queue
+Will be called for any event of any type (cookie) to which we subscribe
+*/
+static void QueueCallbackFunction(void* target, IOReturn result, void* refcon, void* sender) {
+ if (target < 0) {
+ NSLog(@"QueueCallbackFunction called with invalid target!");
+ return;
+ }
+ NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
+
+ HIDRemoteControlDevice* remote = (HIDRemoteControlDevice*)target;
+ IOHIDEventStruct event;
+ AbsoluteTime zeroTime = {0,0};
+ NSMutableString* cookieString = [NSMutableString string];
+ SInt32 sumOfValues = 0;
+ while (result == kIOReturnSuccess)
+ {
+ result = (*[remote queue])->getNextEvent([remote queue], &event, zeroTime, 0);
+ if ( result != kIOReturnSuccess )
+ continue;
+
+ //printf("%d %d %d\n", event.elementCookie, event.value, event.longValue);
+
+ if (((int)event.elementCookie)!=5) {
+ sumOfValues+=event.value;
+ [cookieString appendString:[NSString stringWithFormat:@"%d_", event.elementCookie]];
+ }
+ }
+ [remote handleEventWithCookieString: cookieString sumOfValues: sumOfValues];
+
+ [pool release];
+}
+
+@implementation HIDRemoteControlDevice (IOKitMethods)
+
+- (IOHIDDeviceInterface**) createInterfaceForDevice: (io_object_t) hidDevice {
+ io_name_t className;
+ IOCFPlugInInterface** plugInInterface = NULL;
+ HRESULT plugInResult = S_OK;
+ SInt32 score = 0;
+ IOReturn ioReturnValue = kIOReturnSuccess;
+
+ hidDeviceInterface = NULL;
+
+ ioReturnValue = IOObjectGetClass(hidDevice, className);
+
+ if (ioReturnValue != kIOReturnSuccess) {
+ NSLog(@"Error: Failed to get class name.");
+ return NULL;
+ }
+
+ ioReturnValue = IOCreatePlugInInterfaceForService(hidDevice,
+ kIOHIDDeviceUserClientTypeID,
+ kIOCFPlugInInterfaceID,
+ &plugInInterface,
+ &score);
+ if (ioReturnValue == kIOReturnSuccess)
+ {
+ //Call a method of the intermediate plug-in to create the device interface
+ plugInResult = (*plugInInterface)->QueryInterface(plugInInterface, CFUUIDGetUUIDBytes(kIOHIDDeviceInterfaceID), (LPVOID) &hidDeviceInterface);
+
+ if (plugInResult != S_OK) {
+ NSLog(@"Error: Couldn't create HID class device interface");
+ }
+ // Release
+ if (plugInInterface) (*plugInInterface)->Release(plugInInterface);
+ }
+ return hidDeviceInterface;
+}
+
+- (BOOL) initializeCookies {
+ IOHIDDeviceInterface122** handle = (IOHIDDeviceInterface122**)hidDeviceInterface;
+ IOHIDElementCookie cookie;
+ long usage;
+ long usagePage;
+ id object;
+ NSArray* elements = nil;
+ NSDictionary* element;
+ IOReturn success;
+
+ if (!handle || !(*handle)) return NO;
+
+ // Copy all elements, since we're grabbing most of the elements
+ // for this device anyway, and thus, it's faster to iterate them
+ // ourselves. When grabbing only one or two elements, a matching
+ // dictionary should be passed in here instead of NULL.
+ success = (*handle)->copyMatchingElements(handle, NULL, (CFArrayRef*)&elements);
+
+ if (success == kIOReturnSuccess) {
+
+ [elements autorelease];
+ /*
+ cookies = calloc(NUMBER_OF_APPLE_REMOTE_ACTIONS, sizeof(IOHIDElementCookie));
+ memset(cookies, 0, sizeof(IOHIDElementCookie) * NUMBER_OF_APPLE_REMOTE_ACTIONS);
+ */
+ allCookies = [[NSMutableArray alloc] init];
+
+ NSEnumerator *elementsEnumerator = [elements objectEnumerator];
+
+ while ( (element = [elementsEnumerator nextObject]) ) {
+ //Get cookie
+ object = [element valueForKey: (NSString*)CFSTR(kIOHIDElementCookieKey) ];
+ if (object == nil || ![object isKindOfClass:[NSNumber class]]) continue;
+ if (object == 0 || CFGetTypeID(object) != CFNumberGetTypeID()) continue;
+ cookie = (IOHIDElementCookie) [object longValue];
+
+ //Get usage
+ object = [element valueForKey: (NSString*)CFSTR(kIOHIDElementUsageKey) ];
+ if (object == nil || ![object isKindOfClass:[NSNumber class]]) continue;
+ usage = [object longValue];
+
+ //Get usage page
+ object = [element valueForKey: (NSString*)CFSTR(kIOHIDElementUsagePageKey) ];
+ if (object == nil || ![object isKindOfClass:[NSNumber class]]) continue;
+ usagePage = [object longValue];
+
+ [allCookies addObject: [NSNumber numberWithInt:(int)cookie]];
+ }
+ } else {
+ return NO;
+ }
+
+ return YES;
+}
+
+- (BOOL) openDevice {
+ HRESULT result;
+
+ IOHIDOptionsType openMode = kIOHIDOptionsTypeNone;
+ if ([self isOpenInExclusiveMode]) openMode = kIOHIDOptionsTypeSeizeDevice;
+ IOReturn ioReturnValue = (*hidDeviceInterface)->open(hidDeviceInterface, openMode);
+
+ if (ioReturnValue == KERN_SUCCESS) {
+ queue = (*hidDeviceInterface)->allocQueue(hidDeviceInterface);
+ if (queue) {
+ result = (*queue)->create(queue, 0, 12); //depth: maximum number of elements in queue before oldest elements in queue begin to be lost.
+
+ IOHIDElementCookie cookie;
+ NSEnumerator *allCookiesEnumerator = [allCookies objectEnumerator];
+
+ while ( (cookie = (IOHIDElementCookie)[[allCookiesEnumerator nextObject] intValue]) ) {
+ (*queue)->addElement(queue, cookie, 0);
+ }
+
+ // add callback for async events
+ ioReturnValue = (*queue)->createAsyncEventSource(queue, &eventSource);
+ if (ioReturnValue == KERN_SUCCESS) {
+ ioReturnValue = (*queue)->setEventCallout(queue,QueueCallbackFunction, self, NULL);
+ if (ioReturnValue == KERN_SUCCESS) {
+ CFRunLoopAddSource(CFRunLoopGetCurrent(), eventSource, kCFRunLoopDefaultMode);
+
+ //start data delivery to queue
+ (*queue)->start(queue);
+ return YES;
+ } else {
+ NSLog(@"Error when setting event callback");
+ }
+ } else {
+ NSLog(@"Error when creating async event source");
+ }
+ } else {
+ NSLog(@"Error when opening device");
+ }
+ } else if (ioReturnValue == kIOReturnExclusiveAccess) {
+ // the device is used exclusive by another application
+
+ // 1. we register for the FINISHED_USING_REMOTE_CONTROL_NOTIFICATION notification
+ [[NSDistributedNotificationCenter defaultCenter] addObserver:self selector:@selector(remoteControlAvailable:) name:FINISHED_USING_REMOTE_CONTROL_NOTIFICATION object:nil];
+
+ // 2. send a distributed notification that we wanted to use the remote control
+ [[self class] sendRequestForRemoteControlNotification];
+ }
+ return NO;
+}
+
++ (io_object_t) findRemoteDevice {
+ CFMutableDictionaryRef hidMatchDictionary = NULL;
+ IOReturn ioReturnValue = kIOReturnSuccess;
+ io_iterator_t hidObjectIterator = 0;
+ io_object_t hidDevice = 0;
+
+ // Set up a matching dictionary to search the I/O Registry by class
+ // name for all HID class devices
+ hidMatchDictionary = IOServiceMatching([self remoteControlDeviceName]);
+
+ // Now search I/O Registry for matching devices.
+ ioReturnValue = IOServiceGetMatchingServices(kIOMasterPortDefault, hidMatchDictionary, &hidObjectIterator);
+
+ if ((ioReturnValue == kIOReturnSuccess) && (hidObjectIterator != 0)) {
+ hidDevice = IOIteratorNext(hidObjectIterator);
+ }
+
+ // release the iterator
+ IOObjectRelease(hidObjectIterator);
+
+ return hidDevice;
+}
+
+@end
+
diff --git a/apple_remote/KeyspanFrontRowControl.m b/apple_remote/KeyspanFrontRowControl.m
new file mode 100644
index 000000000000..dd86475b12b1
--- /dev/null
+++ b/apple_remote/KeyspanFrontRowControl.m
@@ -0,0 +1,97 @@
+/*****************************************************************************
+ * KeyspanFrontRowControl.m
+ * RemoteControlWrapper
+ *
+ * Created by Martin Kahr on 11.03.06 under a MIT-style license.
+ * Copyright (c) 2006 martinkahr.com. All rights reserved.
+ *
+ * Code modified and adapted to OpenOffice.org
+ * by Eric Bachard on 11.08.2008 under the same License
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ *****************************************************************************/
+
+#import "KeyspanFrontRowControl.h"
+#import <mach/mach.h>
+#import <mach/mach_error.h>
+#import <IOKit/IOKitLib.h>
+#import <IOKit/IOCFPlugIn.h>
+#import <IOKit/hid/IOHIDKeys.h>
+
+@implementation KeyspanFrontRowControl
+
+- (void) setCookieMappingInDictionary: (NSMutableDictionary*) _cookieToButtonMapping {
+ [_cookieToButtonMapping setObject:[NSNumber numberWithInt:kRemoteButtonPlus] forKey:@"11_18_99_10_"];
+ [_cookieToButtonMapping setObject:[NSNumber numberWithInt:kRemoteButtonMinus] forKey:@"11_18_98_10_"];
+ [_cookieToButtonMapping setObject:[NSNumber numberWithInt:kRemoteButtonMenu] forKey:@"11_18_58_10_"];
+ [_cookieToButtonMapping setObject:[NSNumber numberWithInt:kRemoteButtonPlay] forKey:@"11_18_61_10_"];
+ [_cookieToButtonMapping setObject:[NSNumber numberWithInt:kRemoteButtonRight] forKey:@"11_18_96_10_"];
+ [_cookieToButtonMapping setObject:[NSNumber numberWithInt:kRemoteButtonLeft] forKey:@"11_18_97_10_"];
+ /* hold events are not being send by this device
+ [_cookieToButtonMapping setObject:[NSNumber numberWithInt:kRemoteButtonRight_Hold] forKey:@"14_6_4_2_"];
+ [_cookieToButtonMapping setObject:[NSNumber numberWithInt:kRemoteButtonLeft_Hold] forKey:@"14_6_3_2_"];
+ [_cookieToButtonMapping setObject:[NSNumber numberWithInt:kRemoteButtonMenu_Hold] forKey:@"14_6_14_6_"];
+ [_cookieToButtonMapping setObject:[NSNumber numberWithInt:kRemoteButtonPlay_Sleep] forKey:@"18_14_6_18_14_6_"];
+ [_cookieToButtonMapping setObject:[NSNumber numberWithInt:kRemoteControl_Switched] forKey:@"19_"];
+ */
+}
+
++ (io_object_t) findRemoteDevice {
+ CFMutableDictionaryRef hidMatchDictionary = NULL;
+ IOReturn ioReturnValue = kIOReturnSuccess;
+ io_iterator_t hidObjectIterator = 0;
+ io_object_t hidDevice = 0;
+ SInt32 idVendor = 1741;
+ SInt32 idProduct = 0x420;
+
+ // Set up a matching dictionary to search the I/O Registry by class
+ // name for all HID class devices
+ hidMatchDictionary = IOServiceMatching(kIOHIDDeviceKey);
+
+ CFNumberRef numberRefVendor = CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt32Type, &idVendor);
+ if ( numberRefVendor )
+ {
+ CFDictionaryAddValue(hidMatchDictionary, CFSTR(kIOHIDVendorIDKey), numberRefVendor);
+ CFRelease(numberRefVendor);
+ }
+
+ CFNumberRef numberRefProduct = CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt32Type, &idProduct);
+ if ( numberRefProduct )
+ {
+ CFDictionaryAddValue(hidMatchDictionary, CFSTR(kIOHIDProductIDKey), numberRefProduct);
+ CFRelease(numberRefProduct);
+ }
+
+ // Now search I/O Registry for matching devices.
+ ioReturnValue = IOServiceGetMatchingServices(kIOMasterPortDefault, hidMatchDictionary, &hidObjectIterator);
+
+ if ((ioReturnValue == kIOReturnSuccess) && (hidObjectIterator != 0)) {
+ hidDevice = IOIteratorNext(hidObjectIterator);
+ }
+
+ // release the iterator
+ if ( hidObjectIterator )
+ IOObjectRelease(hidObjectIterator);
+
+ return hidDevice;
+
+}
+
+@end
diff --git a/apple_remote/MultiClickRemoteBehavior.m b/apple_remote/MultiClickRemoteBehavior.m
new file mode 100644
index 000000000000..03b24978d93b
--- /dev/null
+++ b/apple_remote/MultiClickRemoteBehavior.m
@@ -0,0 +1,213 @@
+/*****************************************************************************
+ * MultiClickRemoteBehavior.m
+ * RemoteControlWrapper
+ *
+ * Created by Martin Kahr on 11.03.06 under a MIT-style license.
+ * Copyright (c) 2006 martinkahr.com. All rights reserved.
+ *
+ * Code modified and adapted to OpenOffice.org
+ * by Eric Bachard on 11.08.2008 under the same License
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ *****************************************************************************/
+
+#import "MultiClickRemoteBehavior.h"
+
+const NSTimeInterval DEFAULT_MAXIMUM_CLICK_TIME_DIFFERENCE = 0.35;
+const NSTimeInterval HOLD_RECOGNITION_TIME_INTERVAL = 0.4;
+
+@implementation MultiClickRemoteBehavior
+
+- (id) init {
+ if ( (self = [super init]) ) {
+ maxClickTimeDifference = DEFAULT_MAXIMUM_CLICK_TIME_DIFFERENCE;
+ }
+ return self;
+}
+
+// Delegates are not retained!
+// http://developer.apple.com/documentation/Cocoa/Conceptual/CocoaFundamentals/CommunicatingWithObjects/chapter_6_section_4.html
+// Delegating objects do not (and should not) retain their delegates.
+// However, clients of delegating objects (applications, usually) are responsible for ensuring that their delegates are around
+// to receive delegation messages. To do this, they may have to retain the delegate.
+- (void) setDelegate: (id) _delegate {
+ if ( _delegate && ( [_delegate respondsToSelector:@selector(remoteButton:pressedDown:clickCount:)] == NO )) return; // return what ?
+
+ delegate = _delegate;
+}
+- (id) delegate {
+ return delegate;
+}
+
+- (BOOL) simulateHoldEvent {
+ return simulateHoldEvents;
+}
+- (void) setSimulateHoldEvent: (BOOL) value {
+ simulateHoldEvents = value;
+}
+
+- (BOOL) simulatesHoldForButtonIdentifier: (RemoteControlEventIdentifier) identifier remoteControl: (RemoteControl*) remoteControl {
+ // we do that check only for the normal button identifiers as we would check for hold support for hold events instead
+ if (identifier > (1 << EVENT_TO_HOLD_EVENT_OFFSET)) return NO;
+
+ return [self simulateHoldEvent] && [remoteControl sendsEventForButtonIdentifier: (identifier << EVENT_TO_HOLD_EVENT_OFFSET)]==NO;
+}
+
+- (BOOL) clickCountingEnabled {
+ return clickCountEnabledButtons != 0;
+}
+- (void) setClickCountingEnabled: (BOOL) value {
+ if (value) {
+ [self setClickCountEnabledButtons: kRemoteButtonPlus | kRemoteButtonMinus | kRemoteButtonPlay | kRemoteButtonLeft | kRemoteButtonRight | kRemoteButtonMenu];
+ } else {
+ [self setClickCountEnabledButtons: 0];
+ }
+}
+
+- (unsigned int) clickCountEnabledButtons {
+ return clickCountEnabledButtons;
+}
+- (void) setClickCountEnabledButtons: (unsigned int)value {
+ clickCountEnabledButtons = value;
+}
+
+- (NSTimeInterval) maximumClickCountTimeDifference {
+ return maxClickTimeDifference;
+}
+- (void) setMaximumClickCountTimeDifference: (NSTimeInterval) timeDiff {
+ maxClickTimeDifference = timeDiff;
+}
+
+- (void) sendSimulatedHoldEvent: (id) time {
+ BOOL startSimulateHold = NO;
+ RemoteControlEventIdentifier event = lastHoldEvent;
+ @synchronized(self) {
+ startSimulateHold = (lastHoldEvent>0 && lastHoldEventTime == [time doubleValue]);
+ }
+ if (startSimulateHold) {
+ lastEventSimulatedHold = YES;
+ event = (event << EVENT_TO_HOLD_EVENT_OFFSET);
+ [delegate remoteButton:event pressedDown: YES clickCount: 1];
+ }
+}
+
+- (void) executeClickCountEvent: (NSArray*) values {
+ RemoteControlEventIdentifier event = [[values objectAtIndex: 0] unsignedIntValue];
+ NSTimeInterval eventTimePoint = [[values objectAtIndex: 1] doubleValue];
+
+ BOOL finishedClicking = NO;
+ int finalClickCount = eventClickCount;
+
+ @synchronized(self) {
+ finishedClicking = (event != lastClickCountEvent || eventTimePoint == lastClickCountEventTime);
+ if (finishedClicking) {
+ eventClickCount = 0;
+ lastClickCountEvent = 0;
+ lastClickCountEventTime = 0;
+ }
+ }
+
+ if (finishedClicking) {
+ [delegate remoteButton:event pressedDown: YES clickCount:finalClickCount];
+ // trigger a button release event, too
+ [NSThread sleepUntilDate: [NSDate dateWithTimeIntervalSinceNow:0.1]];
+ [delegate remoteButton:event pressedDown: NO clickCount:finalClickCount];
+ }
+}
+
+- (void) sendRemoteButtonEvent: (RemoteControlEventIdentifier) event pressedDown: (BOOL) pressedDown remoteControl: (RemoteControl*) remoteControl {
+ if (!delegate) return;
+
+ BOOL clickCountingForEvent = ([self clickCountEnabledButtons] & event) == event;
+
+ if ([self simulatesHoldForButtonIdentifier: event remoteControl: remoteControl] && lastClickCountEvent==0) {
+ if (pressedDown) {
+ // wait to see if it is a hold
+ lastHoldEvent = event;
+ lastHoldEventTime = [NSDate timeIntervalSinceReferenceDate];
+ [self performSelector:@selector(sendSimulatedHoldEvent:)
+ withObject:[NSNumber numberWithDouble:lastHoldEventTime]
+ afterDelay:HOLD_RECOGNITION_TIME_INTERVAL];
+ return;
+ } else {
+ if (lastEventSimulatedHold) {
+ // it was a hold
+ // send an event for "hold release"
+ event = (event << EVENT_TO_HOLD_EVENT_OFFSET);
+ lastHoldEvent = 0;
+ lastEventSimulatedHold = NO;
+
+ [delegate remoteButton:event pressedDown: pressedDown clickCount:1];
+ return;
+ } else {
+ RemoteControlEventIdentifier previousEvent = lastHoldEvent;
+ @synchronized(self) {
+ lastHoldEvent = 0;
+ }
+
+ // in case click counting is enabled we have to setup the state for that, too
+ if (clickCountingForEvent) {
+ lastClickCountEvent = previousEvent;
+ lastClickCountEventTime = lastHoldEventTime;
+ NSNumber* eventNumber;
+ NSNumber* timeNumber;
+ eventClickCount = 1;
+ timeNumber = [NSNumber numberWithDouble:lastClickCountEventTime];
+ eventNumber= [NSNumber numberWithUnsignedInt:previousEvent];
+ NSTimeInterval diffTime = maxClickTimeDifference-([NSDate timeIntervalSinceReferenceDate]-lastHoldEventTime);
+ [self performSelector: @selector(executeClickCountEvent:)
+ withObject: [NSArray arrayWithObjects:eventNumber, timeNumber, nil]
+ afterDelay: diffTime];
+ // we do not return here because we are still in the press-release event
+ // that will be consumed below
+ } else {
+ // trigger the pressed down event that we consumed first
+ [delegate remoteButton:event pressedDown: YES clickCount:1];
+ }
+ }
+ }
+ }
+
+ if (clickCountingForEvent) {
+ if (pressedDown == NO) return;
+
+ NSNumber* eventNumber;
+ NSNumber* timeNumber;
+ @synchronized(self) {
+ lastClickCountEventTime = [NSDate timeIntervalSinceReferenceDate];
+ if (lastClickCountEvent == event) {
+ eventClickCount = eventClickCount + 1;
+ } else {
+ eventClickCount = 1;
+ }
+ lastClickCountEvent = event;
+ timeNumber = [NSNumber numberWithDouble:lastClickCountEventTime];
+ eventNumber= [NSNumber numberWithUnsignedInt:event];
+ }
+ [self performSelector: @selector(executeClickCountEvent:)
+ withObject: [NSArray arrayWithObjects:eventNumber, timeNumber, nil]
+ afterDelay: maxClickTimeDifference];
+ } else {
+ [delegate remoteButton:event pressedDown: pressedDown clickCount:1];
+ }
+
+}
+
+@end
diff --git a/apple_remote/RemoteControl.m b/apple_remote/RemoteControl.m
new file mode 100644
index 000000000000..d0812d384b3e
--- /dev/null
+++ b/apple_remote/RemoteControl.m
@@ -0,0 +1,146 @@
+/*****************************************************************************
+ * RemoteControl.m
+ * RemoteControlWrapper
+ *
+ * Created by Martin Kahr on 11.03.06 under a MIT-style license.
+ * Copyright (c) 2006 martinkahr.com. All rights reserved.
+ *
+ * Code modified and adapted to OpenOffice.org
+ * by Eric Bachard on 11.08.2008 under the same License
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ *****************************************************************************/
+
+#import "RemoteControl.h"
+
+// notifaction names that are being used to signal that an application wants to
+// have access to the remote control device or if the application has finished
+// using the remote control device
+NSString* REQUEST_FOR_REMOTE_CONTROL_NOTIFCATION = @"mac.remotecontrols.RequestForRemoteControl";
+NSString* FINISHED_USING_REMOTE_CONTROL_NOTIFICATION = @"mac.remotecontrols.FinishedUsingRemoteControl";
+
+// keys used in user objects for distributed notifications
+NSString* kRemoteControlDeviceName = @"RemoteControlDeviceName";
+NSString* kApplicationIdentifier = @"CFBundleIdentifier";
+// bundle identifier of the application that should get access to the remote control
+// this key is being used in the FINISHED notification only
+NSString* kTargetApplicationIdentifier = @"TargetBundleIdentifier";
+
+
+@implementation RemoteControl
+
+// returns nil if the remote control device is not available
+- (id) initWithDelegate: (id) _remoteControlDelegate {
+ if ( (self = [super init]) ) {
+ delegate = [_remoteControlDelegate retain];
+#ifdef DEBUG
+ NSLog(@"RemoteControl initWithDelegate ok");
+#endif
+ }
+ return self;
+}
+
+- (void) dealloc {
+ [delegate release];
+ [super dealloc];
+}
+
+- (void) setListeningToRemote: (BOOL) value {
+#ifdef DEBUG
+ NSLog(@"setListeningToRemote ok");
+#endif
+}
+- (BOOL) isListeningToRemote {
+ return NO;
+}
+
+- (void) startListening: (id) sender {
+#ifdef DEBUG
+ NSLog(@"startListening ok");
+#endif
+}
+- (void) stopListening: (id) sender {
+#ifdef DEBUG
+ NSLog(@"stopListening ok");
+#endif
+}
+
+- (BOOL) isOpenInExclusiveMode {
+ return YES;
+}
+- (void) setOpenInExclusiveMode: (BOOL) value {
+}
+
+- (BOOL) sendsEventForButtonIdentifier: (RemoteControlEventIdentifier) identifier {
+#ifdef DEBUG
+ NSLog(@"sending event for button identifier \n");
+#endif
+ return YES;
+}
+
++ (void) sendDistributedNotification: (NSString*) notificationName targetBundleIdentifier: (NSString*) targetIdentifier
+{
+ if ( (self = [super init]) ) {
+ NSDictionary* userInfo = [NSDictionary dictionaryWithObjectsAndKeys: [NSString stringWithCString:[self remoteControlDeviceName] encoding:NSASCIIStringEncoding],
+ kRemoteControlDeviceName /* key = RemoteControlDeviceName -> OK */,
+ [[NSBundle mainBundle] bundleIdentifier] /* value = org.openoffice.script -> OK */,
+ kApplicationIdentifier/* key = CFBundleIdentifier -> OK */,
+ targetIdentifier /*value = AppleIRController -> OK */,
+ kTargetApplicationIdentifier /*targetBundleIdentifier -> does not appear, since the peer is nil*/,
+ nil];
+#ifdef DEBUG
+ // Debug purpose: returns all the existing dictionary keys.
+ NSString *s;
+ NSEnumerator *e = [userInfo keyEnumerator];
+ while ( (s = [e nextObject]) ) {
+ NSLog(@"key = %@ ",s);
+ }
+ NSEnumerator *f = [userInfo objectEnumerator ];
+ while ( (s = [f nextObject]) ) {
+ NSLog(@"value = %@ ",s);
+ }
+ NSLog(@"sendDistributedNotification ...");
+#endif
+
+ [[NSDistributedNotificationCenter defaultCenter] postNotificationName:notificationName
+ object:nil
+ userInfo:userInfo
+ deliverImmediately:YES];
+ }
+}
+
++ (void) sendFinishedNotifcationForAppIdentifier: (NSString*) identifier {
+ [self sendDistributedNotification:FINISHED_USING_REMOTE_CONTROL_NOTIFICATION targetBundleIdentifier:identifier];
+#ifdef DEBUG
+ NSLog(@"sendFinishedNotifcationForAppIdentifier ...");
+#endif
+}
++ (void) sendRequestForRemoteControlNotification {
+ [self sendDistributedNotification:REQUEST_FOR_REMOTE_CONTROL_NOTIFCATION targetBundleIdentifier:nil];
+#ifdef DEBUG
+ NSLog(@"sendRequestForRemoteControlNotification ...");
+#endif
+}
+
++ (const char*) remoteControlDeviceName {
+ return NULL;
+}
+
+@end
diff --git a/apple_remote/RemoteControlContainer.m b/apple_remote/RemoteControlContainer.m
new file mode 100644
index 000000000000..40a222f2d829
--- /dev/null
+++ b/apple_remote/RemoteControlContainer.m
@@ -0,0 +1,140 @@
+/*****************************************************************************
+ * RemoteControlContainer.m
+ * RemoteControlWrapper
+ *
+ * Created by Martin Kahr on 11.03.06 under a MIT-style license.
+ * Copyright (c) 2006 martinkahr.com. All rights reserved.
+ *
+ * Code modified and adapted to OpenOffice.org
+ * by Eric Bachard on 11.08.2008 under the same License
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ *****************************************************************************/
+
+#import "RemoteControlContainer.h"
+
+@implementation RemoteControlContainer
+
+- (id) initWithDelegate: (id) _remoteControlDelegate {
+ if ( (self = [super initWithDelegate:_remoteControlDelegate]) ) {
+ remoteControls = [[NSMutableArray alloc] init];
+#ifdef DEBUG
+ NSLog(@"RemoteControlContainer initWithDelegate ok");
+ }
+ else {
+ NSLog(@"RemoteControlContainer initWithDelegate failed");
+#endif
+ }
+
+ return self;
+}
+
+- (void) dealloc {
+ [self stopListening: self];
+ [remoteControls release];
+ [super dealloc];
+}
+
+- (BOOL) instantiateAndAddRemoteControlDeviceWithClass: (Class) clazz {
+ BOOL toReturn = NO;
+ RemoteControl* remoteControl = [[clazz alloc] initWithDelegate: delegate];
+ if (remoteControl) {
+ [remoteControls addObject: remoteControl];
+ [remoteControl addObserver: self forKeyPath:@"listeningToRemote" options:NSKeyValueObservingOptionNew context:nil];
+ toReturn = YES;
+ }
+#ifdef DEBUG
+ else {
+ NSLog(@"RemoteControlContainer instantiateAndAddRemoteControlDeviceWithClass failed");
+ toReturn = NO;
+ }
+#endif
+ return toReturn;
+}
+
+- (unsigned int) count {
+ return [remoteControls count];
+}
+
+- (void) reset {
+ [self willChangeValueForKey:@"listeningToRemote"];
+ [self didChangeValueForKey:@"listeningToRemote"];
+#ifdef DEBUG
+ // debug purpose
+ NSLog(@"reset... (after listening to remote)");
+#endif
+}
+
+- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
+ [self reset];
+}
+
+- (void) setListeningToRemote: (BOOL) value {
+ int i;
+ for(i=0; i < [remoteControls count]; i++) {
+ [[remoteControls objectAtIndex: i] setListeningToRemote: value];
+ }
+ if (value && value != [self isListeningToRemote]) [self performSelector:@selector(reset) withObject:nil afterDelay:0.01];
+}
+- (BOOL) isListeningToRemote {
+ int i;
+ for(i=0; i < [remoteControls count]; i++) {
+ if ([[remoteControls objectAtIndex: i] isListeningToRemote]) {
+ return YES;
+ }
+ }
+ return NO;
+}
+
+- (void) startListening: (id) sender {
+#ifdef DEBUG
+ NSLog(@"startListening to events... ");
+#endif
+ int i;
+ for(i=0; i < [remoteControls count]; i++) {
+ [[remoteControls objectAtIndex: i] startListening: sender];
+ }
+}
+- (void) stopListening: (id) sender {
+#ifdef DEBUG
+ NSLog(@"stopListening to events... ");
+#endif
+ int i;
+ for(i=0; i < [remoteControls count]; i++) {
+ [[remoteControls objectAtIndex: i] stopListening: sender];
+ }
+}
+
+- (BOOL) isOpenInExclusiveMode {
+ BOOL mode = YES;
+ int i;
+ for(i=0; i < [remoteControls count]; i++) {
+ mode = mode && ([[remoteControls objectAtIndex: i] isOpenInExclusiveMode]);
+ }
+ return mode;
+}
+- (void) setOpenInExclusiveMode: (BOOL) value {
+ int i;
+ for(i=0; i < [remoteControls count]; i++) {
+ [[remoteControls objectAtIndex: i] setOpenInExclusiveMode:value];
+ }
+}
+
+@end
diff --git a/apple_remote/RemoteMainController.m b/apple_remote/RemoteMainController.m
new file mode 100644
index 000000000000..5b3b893adafc
--- /dev/null
+++ b/apple_remote/RemoteMainController.m
@@ -0,0 +1,177 @@
+/*****************************************************************************
+ * RemoteMainController.m
+ *
+ * Created by Martin Kahr on 11.03.06 under a MIT-style license.
+ * Copyright (c) 2006 martinkahr.com. All rights reserved.
+ *
+ * Code modified and adapted to OpenOffice.org
+ * by Eric Bachard on 11.08.2008 under the same License
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ *****************************************************************************/
+
+#import "RemoteMainController.h"
+#import "AppleRemote.h"
+#import "KeyspanFrontRowControl.h"
+#import "GlobalKeyboardDevice.h"
+#import "RemoteControlContainer.h"
+#import "MultiClickRemoteBehavior.h"
+
+// -------------------------------------------------------------------------------------------
+// Sample Code 3: Multi Click Behavior and Hold Event Simulation
+// -------------------------------------------------------------------------------------------
+
+@implementation MainController
+
+- (id) init {
+ self = [super init]; // because we redefined our own init instead of use the fu..nny awakeFromNib
+ if (self != nil) {
+
+ // 1. instantiate the desired behavior for the remote control device
+ remoteControlBehavior = [[MultiClickRemoteBehavior alloc] init];
+
+ // 2. configure the behavior
+ [remoteControlBehavior setDelegate: self];
+
+ // 3. a Remote Control Container manages a number of devices and conforms to the RemoteControl interface
+ // Therefore you can enable or disable all the devices of the container with a single "startListening:" call.
+ RemoteControlContainer* container = [[RemoteControlContainer alloc] initWithDelegate: remoteControlBehavior];
+
+ if ( [container instantiateAndAddRemoteControlDeviceWithClass: [AppleRemote class]] != 0 ) {
+#ifdef DEBUG
+ NSLog(@"[container instantiateAndAddRemoteControlDeviceWithClass: [AppleRemote class]] successfull");
+ }
+ else {
+ NSLog(@"[container instantiateAndAddRemoteControlDeviceWithClass: [AppleRemote class]] failed");
+#endif
+ }
+
+ if ( [container instantiateAndAddRemoteControlDeviceWithClass: [KeyspanFrontRowControl class]] != 0 ) {
+#ifdef DEBUG
+ NSLog(@"[container instantiateAndAddRemoteControlDeviceWithClass: [KeyspanFrontRowControl class]] successfull");
+ }
+ else {
+ NSLog(@"[container instantiateAndAddRemoteControlDeviceWithClass: [KeyspanFrontRowControl class]] failed");
+#endif
+ }
+
+ if ( [container instantiateAndAddRemoteControlDeviceWithClass: [GlobalKeyboardDevice class]] != 0 ) {
+#ifdef DEBUG
+ NSLog(@"[container instantiateAndAddRemoteControlDeviceWithClass: [GlobalKeyboardDevice class]] successfull");
+ }
+ else {
+ NSLog(@"[container instantiateAndAddRemoteControlDeviceWithClass: [GlobalKeyboardDevice class]] failed");
+#endif
+ }
+ // to give the binding mechanism a chance to see the change of the attribute
+ [self setValue: container forKey: @"remoteControl"];
+#ifdef DEBUG
+ NSLog(@"MainController init done");
+#endif
+ }
+ else
+ NSLog(@"MainController init failed");
+ return self;
+}
+
+- (void) postTheEvent: (short int)buttonIdentifier modifierFlags:(int)modifierFlags
+{
+ [NSApp postEvent:
+ [NSEvent otherEventWithType:NSApplicationDefined
+ location:NSZeroPoint
+ modifierFlags:modifierFlags
+ timestamp: 0
+ windowNumber:[[NSApp keyWindow] windowNumber]
+ context:nil
+ subtype:AppleRemoteControlEvent
+ data1: buttonIdentifier
+ data2: 0]
+ atStart: NO];
+}
+
+
+- (void) remoteButton: (RemoteControlEventIdentifier)buttonIdentifier pressedDown: (BOOL) pressedDown clickCount: (unsigned int)clickCount
+{
+ NSString* pressed = @"";
+#ifdef DEBUG
+ NSString* buttonName = nil;
+#endif
+ if (pressedDown)
+ {
+ pressed = @"(pressed)";
+
+#ifdef DEBUG
+ switch(buttonIdentifier)
+ {
+ case kRemoteButtonPlus: buttonName = @"Volume up"; break; // MEDIA_COMMAND_VOLUME_UP ( see vcl/inc/vcl/cmdevt.hxx )
+ case kRemoteButtonMinus: buttonName = @"Volume down"; break; // MEDIA_COMMAND_VOLUME_DOWN
+ case kRemoteButtonMenu: buttonName = @"Menu"; break; // MEDIA_COMMAND_MENU
+ case kRemoteButtonPlay: buttonName = @"Play"; break; // MEDIA_COMMAND_PLAY
+ case kRemoteButtonRight: buttonName = @"Next slide"; break; // MEDIA_COMMAND_NEXTTRACK
+ case kRemoteButtonLeft: buttonName = @"Left"; break; // MEDIA_COMMAND_PREVIOUSTRACK
+ case kRemoteButtonRight_Hold: buttonName = @"Last slide"; break; // MEDIA_COMMAND_NEXTTRACK_HOLD
+ case kRemoteButtonLeft_Hold: buttonName = @"First slide"; break; // MEDIA_COMMAND_PREVIOUSTRACK_HOLD
+ case kRemoteButtonPlus_Hold: buttonName = @"Volume up holding"; break;
+ case kRemoteButtonMinus_Hold: buttonName = @"Volume down holding"; break;
+ case kRemoteButtonPlay_Hold: buttonName = @"Play (sleep mode)"; break; // MEDIA_COMMAND_PLAY_HOLD
+ case kRemoteButtonMenu_Hold: buttonName = @"Menu (long)"; break; // MEDIA_COMMAND_MENU_HOLD
+ case kRemoteControl_Switched: buttonName = @"Remote Control Switched";break;
+
+ default: NSLog(@"Unmapped event for button %d", buttonIdentifier); break;
+ }
+#endif
+ [ self postTheEvent:buttonIdentifier modifierFlags: 0 ];
+ }
+ else // not pressed
+ {
+ pressed = @"(released)";
+ }
+
+#ifdef DEBUG
+ //NSLog(@"Button %@ pressed %@", buttonName, pressed);
+ NSString* clickCountString = @"";
+ if (clickCount > 1) clickCountString = [NSString stringWithFormat: @"%d clicks", clickCount];
+ NSString* feedbackString = [NSString stringWithFormat:@"(Value:%4d) %@ %@ %@",buttonIdentifier, buttonName, pressed, clickCountString];
+
+ // print out events
+ NSLog(@"%@", feedbackString);
+
+ if (pressedDown == NO) printf("\n");
+ // simulate slow processing of events
+ // [NSThread sleepUntilDate: [NSDate dateWithTimeIntervalSinceNow: 0.5]];
+#endif
+}
+
+- (void) dealloc {
+ [remoteControl autorelease];
+ [remoteControlBehavior autorelease];
+ [super dealloc];
+}
+
+// for bindings access
+- (RemoteControl*) remoteControl {
+ return remoteControl;
+}
+
+- (MultiClickRemoteBehavior*) remoteBehavior {
+ return remoteControlBehavior;
+}
+
+@end \ No newline at end of file
diff --git a/apple_remote/inc/AppleRemote.h b/apple_remote/inc/AppleRemote.h
new file mode 100644
index 000000000000..aeb32f9f3892
--- /dev/null
+++ b/apple_remote/inc/AppleRemote.h
@@ -0,0 +1,40 @@
+/*****************************************************************************
+ * RemoteControlWrapper.h
+ * RemoteControlWrapper
+ *
+ * Created by Martin Kahr on 11.03.06 under a MIT-style license.
+ * Copyright (c) 2006 martinkahr.com. All rights reserved.
+ *
+ * Code modified and adapted to OpenOffice.org
+ * by Eric Bachard on 11.08.2008 under the same license
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ *****************************************************************************/
+
+#import <Cocoa/Cocoa.h>
+#import "HIDRemoteControlDevice.h"
+
+/* Interacts with the Apple Remote Control HID device
+ The class is not thread safe
+*/
+@interface AppleRemote : HIDRemoteControlDevice {
+}
+
+@end
diff --git a/apple_remote/inc/GlobalKeyboardDevice.h b/apple_remote/inc/GlobalKeyboardDevice.h
new file mode 100644
index 000000000000..8e2aede3f34c
--- /dev/null
+++ b/apple_remote/inc/GlobalKeyboardDevice.h
@@ -0,0 +1,54 @@
+/*****************************************************************************
+ * GlobalKeyboardDevice.h
+ * RemoteControlWrapper
+ *
+ * Created by Martin Kahr on 11.03.06 under a MIT-style license.
+ * Copyright (c) 2006 martinkahr.com. All rights reserved.
+ *
+ * Code modified and adapted to OpenOffice.org
+ * by Eric Bachard on 11.08.2008 under the same license
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ *****************************************************************************/
+
+#import <Cocoa/Cocoa.h>
+#import <Carbon/Carbon.h>
+
+#import "RemoteControl.h"
+
+
+/*
+ This class registers for a number of global keyboard shortcuts to simulate a remote control
+ */
+
+@interface GlobalKeyboardDevice : RemoteControl {
+
+ NSMutableDictionary* hotKeyRemoteEventMapping;
+ EventHandlerRef eventHandlerRef;
+
+}
+
+- (void) mapRemoteButton: (RemoteControlEventIdentifier) remoteButtonIdentifier defaultKeycode: (unsigned int) defaultKeycode defaultModifiers: (unsigned int) defaultModifiers;
+
+- (BOOL)registerHotKeyCode: (unsigned int) keycode modifiers: (unsigned int) modifiers remoteEventIdentifier: (RemoteControlEventIdentifier) identifier;
+
+
+
+@end
diff --git a/apple_remote/inc/HIDRemoteControlDevice.h b/apple_remote/inc/HIDRemoteControlDevice.h
new file mode 100644
index 000000000000..622441fce83c
--- /dev/null
+++ b/apple_remote/inc/HIDRemoteControlDevice.h
@@ -0,0 +1,67 @@
+/*****************************************************************************
+ * HIDRemoteControlDevice.h
+ * RemoteControlWrapper
+ *
+ * Created by Martin Kahr on 11.03.06 under a MIT-style license.
+ * Copyright (c) 2006 martinkahr.com. All rights reserved.
+ *
+ * Code modified and adapted to OpenOffice.org
+ * by Eric Bachard on 11.08.2008 under the same license
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ *****************************************************************************/
+
+#import <Cocoa/Cocoa.h>
+#import <IOKit/hid/IOHIDLib.h>
+
+#import "RemoteControl.h"
+
+/*
+ Base class for HID based remote control devices
+ */
+@interface HIDRemoteControlDevice : RemoteControl {
+ IOHIDDeviceInterface** hidDeviceInterface; // see IOKit/hid/IOHIDLib.h
+ IOHIDQueueInterface** queue; // IOKit/hid/IOHIDLib.h
+ NSMutableArray* allCookies;
+ NSMutableDictionary* cookieToButtonMapping;
+ CFRunLoopSourceRef eventSource;
+
+ BOOL fixSecureEventInputBug;
+ BOOL openInExclusiveMode;
+ BOOL processesBacklog;
+
+ int supportedButtonEvents;
+}
+
+// When your application needs to much time on the main thread when processing an event other events
+// may already be received which are put on a backlog. As soon as your main thread
+// has some spare time this backlog is processed and may flood your delegate with calls.
+// Backlog processing is turned off by default.
+- (BOOL) processesBacklog;
+- (void) setProcessesBacklog: (BOOL) value;
+
+// methods that should be overwritten by subclasses
+- (void) setCookieMappingInDictionary: (NSMutableDictionary*) cookieToButtonMapping;
+
+- (void) sendRemoteButtonEvent: (RemoteControlEventIdentifier) event pressedDown: (BOOL) pressedDown;
+
++ (BOOL) isRemoteAvailable;
+
+@end
diff --git a/apple_remote/inc/KeyspanFrontRowControl.h b/apple_remote/inc/KeyspanFrontRowControl.h
new file mode 100644
index 000000000000..a67ce4a96111
--- /dev/null
+++ b/apple_remote/inc/KeyspanFrontRowControl.h
@@ -0,0 +1,42 @@
+/*****************************************************************************
+ * KeyspanFrontRowControl.h
+ * RemoteControlWrapper
+ *
+ * Created by Martin Kahr on 11.03.06 under a MIT-style license.
+ * Copyright (c) 2006 martinkahr.com. All rights reserved.
+ *
+ * Code modified and adapted to OpenOffice.org
+ * by Eric Bachard on 11.08.2008 under the same License
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ *****************************************************************************/
+
+
+#import <Cocoa/Cocoa.h>
+#import "HIDRemoteControlDevice.h"
+
+/* Interacts with the Keyspan FrontRow Remote Control HID device
+ The class is not thread safe
+*/
+@interface KeyspanFrontRowControl : HIDRemoteControlDevice {
+
+}
+
+@end
diff --git a/apple_remote/inc/MultiClickRemoteBehavior.h b/apple_remote/inc/MultiClickRemoteBehavior.h
new file mode 100644
index 000000000000..9cffa35fae2f
--- /dev/null
+++ b/apple_remote/inc/MultiClickRemoteBehavior.h
@@ -0,0 +1,93 @@
+/*****************************************************************************
+ * MultiClickRemoteBehavior.h
+ * RemoteControlWrapper
+ *
+ * Created by Martin Kahr on 11.03.06 under a MIT-style license.
+ * Copyright (c) 2006 martinkahr.com. All rights reserved.
+ *
+ * Code modified and adapted to OpenOffice.org
+ * by Eric Bachard on 11.08.2008 under the same License
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ *****************************************************************************/
+
+
+#import <Cocoa/Cocoa.h>
+#import "RemoteControl.h"
+
+/**
+ A behavior that adds multiclick and hold events on top of a device.
+ Events are generated and send to a delegate
+ */
+@interface MultiClickRemoteBehavior : NSObject {
+ id delegate;
+
+ // state for simulating plus/minus hold
+ BOOL simulateHoldEvents;
+ BOOL lastEventSimulatedHold;
+ RemoteControlEventIdentifier lastHoldEvent;
+ NSTimeInterval lastHoldEventTime;
+
+ // state for multi click
+ unsigned int clickCountEnabledButtons;
+ NSTimeInterval maxClickTimeDifference;
+ NSTimeInterval lastClickCountEventTime;
+ RemoteControlEventIdentifier lastClickCountEvent;
+ unsigned int eventClickCount;
+}
+
+- (id) init;
+
+// Delegates are not retained
+- (void) setDelegate: (id) delegate;
+- (id) delegate;
+
+// Simulating hold events does deactivate sending of individual requests for pressed down/released.
+// Instead special hold events are being triggered when the user is pressing and holding a button for a small period.
+// Simulation is activated only for those buttons and remote control that do not have a seperate event already
+- (BOOL) simulateHoldEvent;
+- (void) setSimulateHoldEvent: (BOOL) value;
+
+// click counting makes it possible to recognize if the user has pressed a button repeatedly
+// click counting does delay each event as it has to wait if there is another event (second click)
+// therefore there is a slight time difference (maximumClickCountTimeDifference) between a single click
+// of the user and the call of your delegate method
+// click counting can be enabled individually for specific buttons. Use the property clickCountEnableButtons to
+// set the buttons for which click counting shall be enabled
+- (BOOL) clickCountingEnabled;
+- (void) setClickCountingEnabled: (BOOL) value;
+
+- (unsigned int) clickCountEnabledButtons;
+- (void) setClickCountEnabledButtons: (unsigned int)value;
+
+// the maximum time difference till which clicks are recognized as multi clicks
+- (NSTimeInterval) maximumClickCountTimeDifference;
+- (void) setMaximumClickCountTimeDifference: (NSTimeInterval) timeDiff;
+
+@end
+
+/*
+ * Method definitions for the delegate of the MultiClickRemoteBehavior class
+ */
+@interface NSObject(MultiClickRemoteBehaviorDelegate)
+
+- (void) remoteButton: (RemoteControlEventIdentifier)buttonIdentifier pressedDown: (BOOL) pressedDown clickCount: (unsigned int) count;
+
+@end
diff --git a/apple_remote/inc/RemoteControl.h b/apple_remote/inc/RemoteControl.h
new file mode 100644
index 000000000000..cbf8fd856235
--- /dev/null
+++ b/apple_remote/inc/RemoteControl.h
@@ -0,0 +1,105 @@
+/*****************************************************************************
+ * RemoteControl.h
+ * RemoteControlWrapper
+ *
+ * Created by Martin Kahr on 11.03.06 under a MIT-style license.
+ * Copyright (c) 2006 martinkahr.com. All rights reserved.
+ *
+ * Code modified and adapted to OpenOffice.org
+ * by Eric Bachard on 11.08.2008 under the same License
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ *****************************************************************************/
+
+#import <Cocoa/Cocoa.h>
+
+// notifaction names that are being used to signal that an application wants to
+// have access to the remote control device or if the application has finished
+// using the remote control device
+extern NSString* REQUEST_FOR_REMOTE_CONTROL_NOTIFCATION;
+extern NSString* FINISHED_USING_REMOTE_CONTROL_NOTIFICATION;
+
+// keys used in user objects for distributed notifications
+extern NSString* kRemoteControlDeviceName;
+extern NSString* kApplicationIdentifier;
+extern NSString* kTargetApplicationIdentifier;
+
+// we have a 6 bit offset to make a hold event out of a normal event
+#define EVENT_TO_HOLD_EVENT_OFFSET 6
+
+@class RemoteControl;
+
+typedef enum _RemoteControlEventIdentifier {
+ // normal events
+ kRemoteButtonPlus =1<<1,
+ kRemoteButtonMinus =1<<2,
+ kRemoteButtonMenu =1<<3,
+ kRemoteButtonPlay =1<<4,
+ kRemoteButtonRight =1<<5,
+ kRemoteButtonLeft =1<<6,
+
+ // hold events
+ kRemoteButtonPlus_Hold =1<<7,
+ kRemoteButtonMinus_Hold =1<<8,
+ kRemoteButtonMenu_Hold =1<<9,
+ kRemoteButtonPlay_Hold =1<<10,
+ kRemoteButtonRight_Hold =1<<11,
+ kRemoteButtonLeft_Hold =1<<12,
+
+ // special events (not supported by all devices)
+ kRemoteControl_Switched =1<<13,
+} RemoteControlEventIdentifier;
+
+@interface NSObject(RemoteControlDelegate)
+
+- (void) sendRemoteButtonEvent: (RemoteControlEventIdentifier) event pressedDown: (BOOL) pressedDown remoteControl: (RemoteControl*) remoteControl;
+
+@end
+
+/*
+ Base Interface for Remote Control devices
+*/
+@interface RemoteControl : NSObject {
+ id delegate;
+}
+
+// returns nil if the remote control device is not available
+- (id) initWithDelegate: (id) remoteControlDelegate;
+
+- (void) setListeningToRemote: (BOOL) value;
+- (BOOL) isListeningToRemote;
+
+- (BOOL) isOpenInExclusiveMode;
+- (void) setOpenInExclusiveMode: (BOOL) value;
+
+- (void) startListening: (id) sender;
+- (void) stopListening: (id) sender;
+
+// is this remote control sending the given event?
+- (BOOL) sendsEventForButtonIdentifier: (RemoteControlEventIdentifier) identifier;
+
+// sending of notifications between applications
++ (void) sendFinishedNotifcationForAppIdentifier: (NSString*) identifier;
++ (void) sendRequestForRemoteControlNotification;
+
+// name of the device
++ (const char*) remoteControlDeviceName;
+
+@end
diff --git a/apple_remote/inc/RemoteControlContainer.h b/apple_remote/inc/RemoteControlContainer.h
new file mode 100644
index 000000000000..f6cd40ba1178
--- /dev/null
+++ b/apple_remote/inc/RemoteControlContainer.h
@@ -0,0 +1,41 @@
+/*****************************************************************************
+ * RemoteControlContainer.h
+ * RemoteControlWrapper
+ *
+ * Created by Martin Kahr on 11.03.06 under a MIT-style license.
+ * Copyright (c) 2006 martinkahr.com. All rights reserved.
+ *
+ * Code modified and adapted to OpenOffice.org
+ * by Eric Bachard on 11.08.2008 under the same License
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ *****************************************************************************/
+
+#import <Cocoa/Cocoa.h>
+#import "RemoteControl.h"
+
+@interface RemoteControlContainer : RemoteControl {
+ NSMutableArray* remoteControls;
+}
+
+- (BOOL) instantiateAndAddRemoteControlDeviceWithClass: (Class) clazz;
+- (unsigned int) count;
+
+@end
diff --git a/apple_remote/inc/RemoteMainController.h b/apple_remote/inc/RemoteMainController.h
new file mode 100644
index 000000000000..7143f1f1eda9
--- /dev/null
+++ b/apple_remote/inc/RemoteMainController.h
@@ -0,0 +1,49 @@
+/*****************************************************************************
+ * RemoteMainController.h
+ *
+ *
+ * Created by Martin Kahr on 11.03.06 under a MIT-style license.
+ * Copyright (c) 2006 martinkahr.com. All rights reserved.
+ *
+ * Code modified and adapted to OpenOffice.org
+ * by Eric Bachard on 11.08.2008 under the same License
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ *****************************************************************************/
+
+#import <Cocoa/Cocoa.h>
+
+#define AppleRemoteControlEvent 15
+
+@class RemoteControl;
+@class MultiClickRemoteBehavior;
+
+//static void sendTheEvent( unichar, int );
+
+@interface MainController : NSObject {
+@public // else remoteControl is not reachable from GetSalData()->mpMainController
+ RemoteControl* remoteControl;
+@private
+ MultiClickRemoteBehavior* remoteControlBehavior;
+}
+- (RemoteControl*) remoteControl;
+- (MultiClickRemoteBehavior*) remoteBehavior;
+
+@end
diff --git a/apple_remote/makefile.mk b/apple_remote/makefile.mk
new file mode 100644
index 000000000000..d261d5192708
--- /dev/null
+++ b/apple_remote/makefile.mk
@@ -0,0 +1,82 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=.
+
+PRJNAME=external
+TARGET=AppleRemote
+
+ENABLE_EXCEPTIONS=TRUE
+
+# --- Settings -----------------------------------------------------
+
+.INCLUDE : settings.mk
+
+# --- Files --------------------------------------------------------
+
+.IF "$(GUIBASE)"!="aqua"
+
+dummy:
+ @echo "Nothing to build for GUIBASE $(GUIBASE)"
+
+.ELSE # "$(GUIBASE)"!="aqua"
+
+SHL1STDLIBS+= \
+ -framework Cocoa -framework Carbon -framework IOKit
+
+LIB1FILES+= \
+ $(SLB)$/AppleRemote.lib
+
+SLOFILES= \
+ $(SLO)$/KeyspanFrontRowControl.obj \
+ $(SLO)$/AppleRemote.obj \
+ $(SLO)$/RemoteControl.obj \
+ $(SLO)$/RemoteControlContainer.obj \
+ $(SLO)$/GlobalKeyboardDevice.obj \
+ $(SLO)$/HIDRemoteControlDevice.obj \
+ $(SLO)$/MultiClickRemoteBehavior.obj \
+ $(SLO)$/RemoteMainController.obj
+
+SHL1TARGET= $(TARGET)$(DLLPOSTFIX)
+SHL1OBJS= $(SLOFILES)
+
+OUT2INC = \
+ $(BUILDDIR)$/KeyspaFrontRowControl.h \
+ $(BUILDDIR)$/AppleRemote.h \
+ $(BUILDDIR)$/RemoteControl.h \
+ $(BUILDDIR)$/RemoteControlContainer.h \
+ $(BUILDDIR)$/GlobalKeyboardDevice.h \
+ $(BUILDDIR)$/HIDRemoteControlDevice.h \
+ $(BUILDDIR)$/MultiClickRemoteBehavior.h \
+ $(BUILDDIR)$/RemoteMainController.h
+
+
+.ENDIF # "$(GUIBASE)"!="aqua"
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : target.mk
diff --git a/apple_remote/prj/build.lst b/apple_remote/prj/build.lst
new file mode 100644
index 000000000000..ff4ee577408a
--- /dev/null
+++ b/apple_remote/prj/build.lst
@@ -0,0 +1,2 @@
+apr apple_remote : solenv soltools NULL
+apr apple_remote nmake - u apr_aprem NULL
diff --git a/apple_remote/prj/d.lst b/apple_remote/prj/d.lst
new file mode 100644
index 000000000000..ef6dd4613f43
--- /dev/null
+++ b/apple_remote/prj/d.lst
@@ -0,0 +1,5 @@
+mkdir: %_DEST%\inc%_EXT%\apple_remote
+..\inc\*.h %_DEST%\inc%_EXT%\apple_remote\*
+
+..\%__SRC%\lib\*.dylib %_DEST%\lib%_EXT%\*.dylib
+
diff --git a/autodoc/inc/ary/actions.hxx b/autodoc/inc/ary/actions.hxx
new file mode 100644
index 000000000000..8468c1a820ec
--- /dev/null
+++ b/autodoc/inc/ary/actions.hxx
@@ -0,0 +1,103 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_ACTIONS_HXX
+#define ARY_ACTIONS_HXX
+// KORR_DEPRECATED_3.0
+
+
+// USED SERVICES
+ // BASE CLASSES
+ // COMPONENTS
+ // PARAMETERS
+
+
+namespace ary
+{
+ class RepositoryCenter;
+
+
+/*
+enum E_Action
+{
+ action_Parse,
+ action_SecondaryProductions,
+ action_Save,
+ action_Load,
+ action_ReadyForRead
+};
+*/
+
+
+/** @resp
+ Performs such commands on the repository, which refer to
+ large parts of it.
+
+ @collab ::ary::Repository
+ and its components and derivates.
+ @descr
+ This class works in kind of double dispatch way:
+
+ // Client code:
+ Command_Xy aMyCommand;
+ ary::Repository::The_().PerformCommand( aMyCommand );
+
+ // Repository_Implementation::PerformCommand() code:
+ aMyCommand.Run(*this);
+
+ // Command_Xy::Run(Repository_Implementation & rRepository) code:
+ rRepository.Run_Command_Xy(*this);
+*/
+class Command
+{
+ public:
+ virtual ~Command() {}
+
+ void Run(
+ n22::RepositoryCenter &
+ io_rReposy );
+ private:
+ virtual void do_Run(
+ n22::RepositoryCenter &
+ io_rReposy ) = 0;
+};
+
+
+// IMPLEMENTATION
+
+inline void
+Command::Run(n22::RepositoryCenter & io_rReposy)
+ { do_Run(io_rReposy); }
+
+
+} // namespace ary
+
+
+#endif
+
+
+
diff --git a/autodoc/inc/ary/ary.hxx b/autodoc/inc/ary/ary.hxx
new file mode 100644
index 000000000000..9b1afeebba3f
--- /dev/null
+++ b/autodoc/inc/ary/ary.hxx
@@ -0,0 +1,90 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_ARY_HXX
+#define ARY_ARY_HXX
+
+
+// USED SERVICES
+ // BASE CLASSES
+ // OTHER
+
+namespace ary
+{
+namespace idl
+{
+ class Gate;
+}
+
+namespace cpp
+{
+ class Gate;
+}
+}
+
+
+
+namespace ary
+{
+
+/** Starting point for all work with the
+ Autodoc Sourcecode Repository.
+
+ Create and destroy the repository and
+ give access to the "Gates" for different tasks.
+
+ @collab ::ary::cpp::Gate
+ @collab ::ary::idl::Gate
+*/
+
+class Repository
+{
+ public:
+ // LIFECYCLE
+ virtual ~Repository() {}
+ static DYN Repository &
+ Create_();
+ // INQUIRY
+ virtual const String &
+ Title() const = 0;
+ virtual const ::ary::cpp::Gate &
+ Gate_Cpp() const = 0;
+ virtual const ::ary::idl::Gate &
+ Gate_Idl() const = 0;
+ // ACCESS
+ virtual ::ary::cpp::Gate &
+ Gate_Cpp() = 0;
+ virtual ::ary::idl::Gate &
+ Gate_Idl() = 0;
+ virtual void Set_Title(
+ const String & i_sName ) = 0;
+};
+
+
+
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/ary_disp.hxx b/autodoc/inc/ary/ary_disp.hxx
new file mode 100644
index 000000000000..5e8194d6d049
--- /dev/null
+++ b/autodoc/inc/ary/ary_disp.hxx
@@ -0,0 +1,111 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_ARY_DISP_HXX
+#define ARY_ARY_DISP_HXX
+// KORR_DEPRECATED_3.0
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <cosv/tpl/processor.hxx>
+ // COMPONENTS
+ // PARAMETERS
+#include <ary/types.hxx>
+#include <ary/cpp/c_types4cpp.hxx>
+
+namespace ary
+{
+namespace cpp
+{
+ class Gate;
+}
+
+class Display : public csv::ProcessorIfc
+{
+ public:
+ virtual ~Display() {}
+
+ // OPERATIONS
+ void StartSlot();
+ void FinishSlot();
+
+ /** This method depends on the result of Get_ReFinder().
+ If Get_ReFinder() != 0, then DisplayGate::Find_Re() is called
+ and if valid, cpp::CppEntity::Accept( *this ) is called.
+ If Get_ReFinder() == 0, simply do_DisplaySlot_Rid() is called
+ with just the id as parameter.
+ */
+ void DisplaySlot_Rid(
+ ary::Rid i_nId );
+// void DisplaySlot_Lid(
+// ary::Lid i_nId );
+ /** This method depends on the result of Get_ReFinder().
+ If Get_ReFinder() != 0, then DisplayGate::Find_Re() is called
+ and if valid, cpp::CppEntity::Accept( *this ) is called.
+ If Get_ReFinder() == 0, simply do_DisplaySlot_LocalCe() is called
+ with just the id as parameter.
+ */
+ void DisplaySlot_LocalCe(
+ ary::cpp::Ce_id i_nId,
+ const String & i_sName );
+ // INQUIRY
+ const cpp::Gate * Get_ReFinder() const;
+
+ private:
+ virtual void do_StartSlot();
+ virtual void do_FinishSlot();
+
+
+ virtual void do_DisplaySlot_Rid(
+ ary::Rid i_nId );
+ virtual void do_DisplaySlot_LocalCe(
+ ary::cpp::Ce_id i_nId,
+ const String & i_sName );
+ virtual const cpp::Gate *
+ inq_Get_ReFinder() const = 0;
+};
+
+
+// IMPLEMENTATION
+
+
+inline void
+Display::StartSlot()
+ { do_StartSlot(); }
+inline void
+Display::FinishSlot()
+ { do_FinishSlot(); }
+inline const cpp::Gate *
+Display::Get_ReFinder() const
+ { return inq_Get_ReFinder(); }
+
+
+
+
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/arygroup.hxx b/autodoc/inc/ary/arygroup.hxx
new file mode 100644
index 000000000000..68de399f99c5
--- /dev/null
+++ b/autodoc/inc/ary/arygroup.hxx
@@ -0,0 +1,107 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_ARYGROUP_HXX
+#define ARY_ARYGROUP_HXX
+// KORR_DEPRECATED_3.0
+
+
+// USED SERVICES
+ // BASE CLASSES
+ // OTHER
+#include <ary/types.hxx>
+
+
+namespace ary
+{
+namespace cpp
+{
+ class CppEntity;
+}
+
+class Slot;
+
+namespace group
+{
+ typedef std::vector< SlotAccessId > SlotList;
+}
+}
+
+
+
+
+namespace ary
+{
+
+
+
+class AryGroup
+{
+ public:
+ // LIFECYCLE
+ virtual ~AryGroup() {}
+
+ // INQUIRY
+ Gid Id_Group() const;
+ const cpp::CppEntity &
+ RE_Group() const;
+ const group::SlotList &
+ Slots() const;
+ DYN Slot * Create_Slot(
+ SlotAccessId i_nSlot ) const;
+
+
+ private:
+ virtual Gid inq_Id_Group() const = 0;
+ virtual const cpp::CppEntity &
+ inq_RE_Group() const = 0;
+ virtual const group::SlotList &
+ inq_Slots() const = 0;
+ virtual DYN Slot * inq_Create_Slot(
+ SlotAccessId i_nSlot ) const = 0;
+};
+
+
+
+// IMPLEMENTATION
+inline Gid
+AryGroup::Id_Group() const
+ { return inq_Id_Group(); }
+inline const cpp::CppEntity &
+AryGroup::RE_Group() const
+ { return inq_RE_Group(); }
+inline const group::SlotList &
+AryGroup::Slots() const
+ { return inq_Slots(); }
+inline DYN Slot *
+AryGroup::Create_Slot( SlotAccessId i_nSlot ) const
+ { return inq_Create_Slot(i_nSlot); }
+
+
+
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/ceslot.hxx b/autodoc/inc/ary/ceslot.hxx
new file mode 100644
index 000000000000..f113d26d7372
--- /dev/null
+++ b/autodoc/inc/ary/ceslot.hxx
@@ -0,0 +1,103 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_CESLOT_HXX
+#define ARY_CESLOT_HXX
+// KORR_DEPRECATED_3.0
+
+
+// USED SERVICES
+ // BASE CLASSES
+ // COMPONENTS
+ // PARAMETERS
+
+namespace ary
+{
+
+class Display;
+
+/** Unterscheidungen von Slots
+
+ Slots:
+ - ReadWrite or ReadOnly
+ - ContentType
+ - Groups
+ - MemberLink 'EnumValue from Enum' or 'Class from Namespace'
+ - MemberData 'Parameter from Operation'
+ - SimpleLink
+ - CommentedLink 'Baseclass from Class'
+ - DefaultCommentedLink 'Class from GlobaIndex'
+*/
+
+class Slot
+{
+ public:
+ virtual ~Slot() {}
+
+ virtual void StoreAt(
+ Display & o_rDestination ) const;
+ virtual uintt Size() const = 0;
+
+ private:
+ virtual void StoreEntries(
+ Display & o_rDestination ) const = 0;
+};
+
+class Slot_AutoPtr
+{
+ public:
+ Slot_AutoPtr(
+ Slot * i_pSlot = 0 )
+ : pSlot(i_pSlot) {}
+ ~Slot_AutoPtr() { if (pSlot != 0) delete pSlot; }
+
+ Slot_AutoPtr & operator=(
+ Slot * i_pSlot )
+ { if (pSlot != 0) delete pSlot;
+ pSlot = i_pSlot;
+ return *this; }
+ operator bool() const { return pSlot != 0; }
+
+ const Slot & operator*() { csv_assert(pSlot != 0);
+ return *pSlot; }
+ const Slot * operator->() { csv_assert(pSlot != 0);
+ return pSlot; }
+
+ private:
+ // Forbidden functions
+ Slot_AutoPtr(const Slot_AutoPtr &);
+ Slot_AutoPtr & operator=(const Slot_AutoPtr &);
+
+ // DATA
+ Slot * pSlot;
+};
+
+
+
+
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/cessentl.hxx b/autodoc/inc/ary/cessentl.hxx
new file mode 100644
index 000000000000..bd724b9c8fe6
--- /dev/null
+++ b/autodoc/inc/ary/cessentl.hxx
@@ -0,0 +1,88 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_CESSENTL_HXX
+#define ARY_CESSENTL_HXX
+// KORR_DEPRECATED_3.0
+
+
+// USED SERVICES
+ // BASE CLASSES
+ // COMPONENTS
+ // PARAMETERS
+#include <ary/cpp/c_types4cpp.hxx>
+#include <ary/loc/loc_types4loc.hxx>
+
+
+
+namespace ary
+{
+namespace cpp
+{
+
+
+class CeEssentials
+{ // Non inline functions are implemented in ceworker.cxx .
+ public:
+ // LIFECYCLE
+ CeEssentials();
+ CeEssentials(
+ const String & i_sLocalName,
+ Ce_id i_nOwner,
+ loc::Le_id i_nLocation );
+ ~CeEssentials();
+ // INQUIRY
+ const String & LocalName() const;
+ Ce_id Owner() const;
+ loc::Le_id Location() const;
+
+ // ACCESS
+ private:
+ String sLocalName;
+ Ce_id nOwner;
+ loc::Le_id nLocation;
+};
+
+
+
+// IMPLEMENTATION
+inline const String &
+CeEssentials::LocalName() const
+ { return sLocalName; }
+inline Ce_id
+CeEssentials::Owner() const
+ { return nOwner; }
+inline loc::Le_id
+CeEssentials::Location() const
+ { return nLocation; }
+
+
+
+
+} // namespace cpp
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/cpp/c_builtintype.hxx b/autodoc/inc/ary/cpp/c_builtintype.hxx
new file mode 100644
index 000000000000..1bb6bec86b9c
--- /dev/null
+++ b/autodoc/inc/ary/cpp/c_builtintype.hxx
@@ -0,0 +1,97 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_CPP_C_BUILTINTYPE_HXX
+#define ARY_CPP_C_BUILTINTYPE_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <ary/cpp/c_type.hxx>
+ // COMPONENTS
+ // PARAMETERS
+
+
+namespace ary
+{
+namespace cpp
+{
+
+
+/** Represents types like void, int, double.
+*/
+class BuiltInType : public Type
+{
+ public:
+ enum E_ClassId { class_id = 1200 };
+
+ BuiltInType(
+ const String & i_sName,
+ E_TypeSpecialisation
+ i_Specialisation );
+
+ String SpecializedName() const;
+
+ static String SpecializedName_(
+ const char * i_sName,
+ E_TypeSpecialisation
+ i_eTypeSpecialisation );
+ private:
+ // Interface csv::ConstProcessorClient
+ virtual void do_Accept(
+ csv::ProcessorIfc & io_processor ) const;
+ // Interface Object:
+ virtual ClassId get_AryClass() const;
+
+ // Interface Type:
+ virtual bool inq_IsConst() const;
+ virtual void inq_Get_Text(
+ StreamStr & o_rPreName,
+ StreamStr & o_rName,
+ StreamStr & o_rPostName,
+ const Gate & i_rGate ) const;
+ // DATA
+ String sName;
+ E_TypeSpecialisation
+ eSpecialisation;
+};
+
+
+
+inline String
+BuiltInType::SpecializedName() const
+{
+ return SpecializedName_(sName, eSpecialisation);
+}
+
+
+
+
+} // namespace cpp
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/cpp/c_ce.hxx b/autodoc/inc/ary/cpp/c_ce.hxx
new file mode 100644
index 000000000000..5bec606630fa
--- /dev/null
+++ b/autodoc/inc/ary/cpp/c_ce.hxx
@@ -0,0 +1,103 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_CPP_C_CE_HXX
+#define ARY_CPP_C_CE_HXX
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <ary/cpp/c_cppentity.hxx>
+ // COMPONENTS
+#include <ary/doc/d_docu.hxx>
+ // PARAMETERS
+#include <ary/cpp/c_types4cpp.hxx>
+#include <ary/cpp/c_traits.hxx>
+#include <ary/loc/loc_types4loc.hxx>
+
+
+namespace ary
+{
+namespace cpp
+{
+
+typedef loc::Le_id Lid;
+
+
+
+/** Represents a C++ code entity.
+*/
+class CodeEntity : public ary::cpp::CppEntity
+{
+ public:
+ typedef Ce_Traits traits_t;
+
+ // LIFECYCLE
+ virtual ~CodeEntity() {}
+
+ // INQUIRY
+ Ce_id CeId() const { return Ce_id(Id()); }
+ const String & LocalName() const;
+ Cid Owner() const;
+ Lid Location() const;
+ bool IsVisible() const;
+
+ // ACCESS
+ void Set_InVisible() { bIsVisible = false; }
+
+ protected:
+ CodeEntity() : bIsVisible(true) {}
+
+ private:
+ // Locals
+ virtual const String &
+ inq_LocalName() const = 0;
+ virtual Cid inq_Owner() const = 0;
+ virtual Lid inq_Location() const = 0;
+
+ // DATA
+ mutable bool bIsVisible;
+};
+
+
+// IMPLEMENTATION
+inline const String &
+CodeEntity::LocalName() const
+ { return inq_LocalName(); }
+inline Cid
+CodeEntity::Owner() const
+ { return inq_Owner(); }
+inline Lid
+CodeEntity::Location() const
+ { return inq_Location(); }
+
+
+
+
+} // namespace cpp
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/cpp/c_class.hxx b/autodoc/inc/ary/cpp/c_class.hxx
new file mode 100644
index 000000000000..60a81e81be3c
--- /dev/null
+++ b/autodoc/inc/ary/cpp/c_class.hxx
@@ -0,0 +1,245 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_CPP_C_CLASS_HXX
+#define ARY_CPP_C_CLASS_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <ary/cpp/c_ce.hxx>
+#include <ary/arygroup.hxx>
+ // OTHER
+#include <ary/symtreenode.hxx>
+#include <ary/cessentl.hxx>
+#include <ary/sequentialids.hxx>
+#include <ary/cpp/c_types4cpp.hxx>
+#include <ary/cpp/c_slntry.hxx>
+
+namespace ary
+{
+namespace cpp
+{
+ class Enum;
+ class Typedef;
+ class Function;
+ class Variable;
+}
+}
+
+
+
+namespace ary
+{
+namespace cpp
+{
+
+
+/** A C++ class.
+*/
+class Class : public CodeEntity,
+ public AryGroup
+{
+ public:
+ enum E_ClassId { class_id = 1001 };
+
+ enum E_Slots
+ {
+ SLOT_Bases = 1,
+ SLOT_NestedClasses,
+ SLOT_Enums,
+ SLOT_Typedefs,
+ SLOT_Operations,
+ SLOT_StaticOperations,
+ SLOT_Data,
+ SLOT_StaticData,
+ SLOT_FriendClasses,
+ SLOT_FriendOperations
+ };
+
+ typedef ::ary::symtree::Node<CeNode_Traits> node_t;
+
+
+ // LIFECYCLE
+ Class(
+ const String & i_sLocalName,
+ Ce_id i_nOwner,
+ E_Protection i_eProtection,
+ loc::Le_id i_nFile,
+ E_ClassKey i_eClassKey );
+ ~Class();
+
+ // OPERATIONS
+ void Add_BaseClass(
+ const S_Classes_Base &
+ i_rBaseClass );
+ void Add_TemplateParameterType(
+ const String & i_sLocalName,
+ Type_id i_nIdAsType );
+ void Add_KnownDerivative(
+ Ce_id i_nId )
+ { aKnownDerivatives.Add(i_nId); }
+
+ void Add_LocalClass(
+ const String & i_sLocalName,
+ Cid i_nId );
+ void Add_LocalEnum(
+ const String & i_sLocalName,
+ Cid i_nId );
+ void Add_LocalTypedef(
+ const String & i_sLocalName,
+ Cid i_nId );
+ void Add_LocalOperation(
+ const String & i_sLocalName,
+ Cid i_nId );
+ void Add_LocalStaticOperation(
+ const String & i_sLocalName,
+ Cid i_nId );
+ void Add_LocalData(
+ const String & i_sLocalName,
+ Cid i_nId );
+ void Add_LocalStaticData(
+ const String & i_sLocalName,
+ Cid i_nId );
+
+ void UpdateVirtuality(
+ E_Virtuality i_eVirtuality )
+ { if ( int(i_eVirtuality) > int(eVirtuality) )
+ eVirtuality = i_eVirtuality; }
+ const List_TplParam &
+ TemplateParameters() const
+ { return aTemplateParameterTypes; }
+ const List_Bases & BaseClasses() const { return aBaseClasses; }
+ const SequentialIds<Ce_id> &
+ KnownDerivatives() const
+ { return aKnownDerivatives; }
+
+ // INQUIRY
+ E_ClassKey ClassKey() const;
+ E_Protection Protection() const;
+ E_Virtuality Virtuality() const { return eVirtuality; }
+
+ Ce_id Search_Child(
+ const String & i_key ) const;
+ Rid Search_LocalClass(
+ const String & i_sName ) const;
+ const node_t & AsNode() const;
+
+ // ACCESS
+ node_t & AsNode();
+
+ private:
+ NON_COPYABLE(Class);
+
+ // Interface csv::ConstProcessorClient
+ virtual void do_Accept(
+ csv::ProcessorIfc & io_processor ) const;
+
+ // Interface ary::cpp::CodeEntity
+ virtual const String &
+ inq_LocalName() const;
+ virtual Cid inq_Owner() const;
+ virtual loc::Le_id inq_Location() const;
+
+ // Interface ary::cpp::CppEntity
+ virtual ClassId get_AryClass() const;
+
+ // Interface ary::AryGroup
+ virtual Gid inq_Id_Group() const;
+ virtual const cpp::CppEntity &
+ inq_RE_Group() const;
+ virtual const group::SlotList &
+ inq_Slots() const;
+ virtual DYN Slot * inq_Create_Slot(
+ SlotAccessId i_nSlot ) const;
+ // Local
+ typedef List_LocalCe::const_iterator CIterator_Locals;
+ typedef List_LocalCe::iterator Iterator_Locals;
+ typedef SequentialIds<Ce_id> IdSequence;
+
+ CIterator_Locals PosOfName(
+ const List_LocalCe& i_rList,
+ const String & i_sName ) const;
+ // DATA
+ CeEssentials aEssentials;
+ node_t aAssignedNode;
+
+ List_Bases aBaseClasses;
+ List_TplParam aTemplateParameterTypes;
+
+ List_LocalCe aClasses;
+ List_LocalCe aEnums;
+ List_LocalCe aTypedefs;
+ List_LocalCe aOperations;
+ List_LocalCe aStaticOperations;
+ List_LocalCe aData;
+ List_LocalCe aStaticData;
+
+ IdSequence aFriendClasses;
+ IdSequence aFriendOperations;
+ IdSequence aKnownDerivatives;
+
+ E_ClassKey eClassKey;
+ E_Protection eProtection;
+ E_Virtuality eVirtuality;
+};
+
+
+
+
+// IMPLEMENTATION
+inline E_ClassKey
+Class::ClassKey() const
+{
+ return eClassKey;
+}
+
+inline E_Protection
+Class::Protection() const
+{
+ return eProtection;
+}
+
+inline const Class::node_t &
+Class::AsNode() const
+{
+ return aAssignedNode;
+}
+
+inline Class::node_t &
+Class::AsNode()
+{
+ return aAssignedNode;
+}
+
+
+
+
+} // namespace cpp
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/cpp/c_cppentity.hxx b/autodoc/inc/ary/cpp/c_cppentity.hxx
new file mode 100644
index 000000000000..e487f77102c7
--- /dev/null
+++ b/autodoc/inc/ary/cpp/c_cppentity.hxx
@@ -0,0 +1,91 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_CPP_C_CPPENTITY_HXX
+#define ARY_CPP_C_CPPENTITY_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <ary/entity.hxx>
+ // OTHER
+#include <ary/doc/d_docu.hxx>
+
+
+
+namespace ary
+{
+namespace cpp
+{
+
+
+/** A C++ code entity as parsed by Autodoc.
+*/
+class CppEntity : public Entity
+{
+ public:
+ // LIFECYCLE
+ virtual ~CppEntity() {}
+
+ // OPERATIONS
+
+ // INQUIRY
+ const ary::doc::Documentation &
+ Docu() const;
+ // ACCESS
+ void Set_Docu(
+ DYN ary::doc::Node &
+ pass_docudata );
+ private:
+ // DATA
+ ary::doc::Documentation
+ aDocu;
+};
+
+
+
+
+// IMPLEMENTATION
+inline const doc::Documentation &
+CppEntity::Docu() const
+{
+ return aDocu;
+}
+
+inline void
+CppEntity::Set_Docu(ary::doc::Node & pass_docudata)
+{
+ aDocu.Set_Data(pass_docudata);
+}
+
+
+
+
+} // namespace cpp
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/cpp/c_de.hxx b/autodoc/inc/ary/cpp/c_de.hxx
new file mode 100644
index 000000000000..46c565b07c15
--- /dev/null
+++ b/autodoc/inc/ary/cpp/c_de.hxx
@@ -0,0 +1,104 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_CPP_C_DE_HXX
+#define ARY_CPP_C_DE_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <ary/cpp/c_cppentity.hxx>
+ // OTHER
+#include <ary/loc/loc_types4loc.hxx>
+#include <ary/cpp/c_traits.hxx>
+
+
+
+
+namespace ary
+{
+namespace cpp
+{
+
+
+/** Describes a C/C++ #define statement. May be a define or a macro, for which
+ two cases the two different constructors are to be used.
+
+ This class is used by cpp::PreProcessor.
+*/
+class DefineEntity : public ary::cpp::CppEntity
+{
+ public:
+ typedef Def_Traits traits_t;
+
+ virtual ~DefineEntity() {}
+
+ // INQUIRY
+ De_id DefId() const { return De_id(Id()); }
+ const String & LocalName() const;
+ loc::Le_id Location() const;
+ const StringVector &
+ DefinitionText() const;
+ // ACCESS
+ protected:
+ DefineEntity(
+ const String & i_name,
+ loc::Le_id i_declaringFile );
+ private:
+ // Locals
+ virtual const StringVector &
+ inq_DefinitionText() const = 0;
+
+ // DATA
+ String sName;
+ loc::Le_id nLocation;
+};
+
+
+
+
+// IMPLEMENTATION
+inline const String &
+DefineEntity::LocalName() const
+ { return sName; }
+
+inline loc::Le_id
+DefineEntity::Location() const
+ { return nLocation; }
+
+inline const StringVector &
+DefineEntity::DefinitionText() const
+ { return inq_DefinitionText(); }
+
+
+
+
+
+} // end namespace cpp
+} // end namespace ary
+#endif
diff --git a/autodoc/inc/ary/cpp/c_define.hxx b/autodoc/inc/ary/cpp/c_define.hxx
new file mode 100644
index 000000000000..2ad480090c81
--- /dev/null
+++ b/autodoc/inc/ary/cpp/c_define.hxx
@@ -0,0 +1,82 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_CPP_C_DEFINE_HXX
+#define ARY_CPP_C_DEFINE_HXX
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <ary/cpp/c_de.hxx>
+ // OTHER
+
+
+
+
+namespace ary
+{
+namespace cpp
+{
+
+
+/** A C/C++ #define ("#define DEF") statement, but no macro.
+
+ @see Macro
+*/
+class Define : public DefineEntity
+{
+ public:
+ enum E_ClassId { class_id = 1601 };
+
+ Define( /// Used for: #define DEFINE xyz
+ const String & i_name,
+ const StringVector &
+ i_definition,
+ loc::Le_id i_declaringFile );
+ virtual ~Define();
+ private:
+ // Interface csv::ConstProcessorClient
+ virtual void do_Accept(
+ csv::ProcessorIfc & io_processor ) const;
+
+ // Interface ary::Object:
+ virtual ClassId get_AryClass() const;
+
+ // Interface DefineEntity:
+ virtual const StringVector &
+ inq_DefinitionText() const;
+ // DATA
+ StringVector aDefinition;
+};
+
+
+
+
+
+} // namespace cpp
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/cpp/c_enum.hxx b/autodoc/inc/ary/cpp/c_enum.hxx
new file mode 100644
index 000000000000..19e04f61a7f8
--- /dev/null
+++ b/autodoc/inc/ary/cpp/c_enum.hxx
@@ -0,0 +1,116 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_CPP_C_ENUM_HXX
+#define ARY_CPP_C_ENUM_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <ary/cpp/c_ce.hxx>
+#include <ary/arygroup.hxx>
+ // OTHER
+#include <ary/cessentl.hxx>
+#include <ary/cpp/c_types4cpp.hxx>
+#include <ary/sequentialids.hxx>
+
+
+
+
+
+namespace ary
+{
+namespace cpp
+{
+
+
+/** A C++ enum declaration.
+*/
+class Enum : public CodeEntity,
+ public AryGroup
+{
+ public:
+ enum E_ClassId { class_id = 1002 };
+
+ enum E_Slots
+ {
+ SLOT_Values = 1
+ };
+
+ // LIFECYCLE
+ Enum(
+ const String & i_sLocalName,
+ Ce_id i_nOwner,
+ E_Protection i_eProtection,
+ Lid i_nFile );
+ ~Enum();
+
+ // OPERATIONS
+ void Add_Value(
+ Ce_id i_nId );
+
+ // INQUIRY
+ E_Protection Protection() const { return eProtection; }
+
+ private:
+ // Interface csv::ConstProcessorClient
+ virtual void do_Accept(
+ csv::ProcessorIfc & io_processor ) const;
+
+ // Interface ary::cpp::CodeEntity
+ virtual const String &
+ inq_LocalName() const;
+ virtual Cid inq_Owner() const;
+ virtual Lid inq_Location() const;
+
+ // Interface ary::cpp::CppEntity
+ virtual ClassId get_AryClass() const;
+
+ // Interface ary::AryGroup
+ virtual Gid inq_Id_Group() const;
+ virtual const cpp::CppEntity &
+ inq_RE_Group() const;
+ virtual const group::SlotList &
+ inq_Slots() const;
+ virtual DYN Slot * inq_Create_Slot(
+ SlotAccessId i_nSlot ) const;
+
+ // DATA
+ CeEssentials aEssentials;
+ SequentialIds<Ce_id>
+ aValues;
+ E_Protection eProtection;
+};
+
+
+
+
+
+} // namespace cpp
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/cpp/c_enuval.hxx b/autodoc/inc/ary/cpp/c_enuval.hxx
new file mode 100644
index 000000000000..f2710689a497
--- /dev/null
+++ b/autodoc/inc/ary/cpp/c_enuval.hxx
@@ -0,0 +1,96 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_CPP_C_ENUVAL_HXX
+#define ARY_CPP_C_ENUVAL_HXX
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <ary/cpp/c_ce.hxx>
+ // OTHER
+#include <ary/cessentl.hxx>
+#include <ary/cpp/c_types4cpp.hxx>
+
+
+
+namespace ary
+{
+namespace cpp
+{
+
+
+
+/** A C++ enum value declaration and definition.
+*/
+class EnumValue : public CodeEntity
+{
+ public:
+ enum E_ClassId { class_id = 1006 };
+
+ // LIFECYCLE
+ EnumValue(
+ const String & i_sLocalName,
+ Ce_id i_nOwner,
+ String i_sInitialisation );
+ ~EnumValue();
+ // INQUIRY
+ const String & Initialisation() const;
+
+ private:
+ // Interface csv::ConstProcessorClient
+ virtual void do_Accept(
+ csv::ProcessorIfc & io_processor ) const;
+
+ // Interface ary::cpp::CodeEntity
+ virtual const String &
+ inq_LocalName() const;
+ virtual Cid inq_Owner() const;
+ virtual Lid inq_Location() const;
+
+ // Interface ary::cpp::CppEntity
+ virtual ClassId get_AryClass() const;
+
+ // DATA
+ CeEssentials aEssentials;
+ String sInitialisation;
+};
+
+
+
+
+// IMPLEMENTATION
+inline const String &
+EnumValue::Initialisation() const
+ { return sInitialisation; }
+
+
+
+
+} // namespace cpp
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/cpp/c_funct.hxx b/autodoc/inc/ary/cpp/c_funct.hxx
new file mode 100644
index 000000000000..94c4a06cad2b
--- /dev/null
+++ b/autodoc/inc/ary/cpp/c_funct.hxx
@@ -0,0 +1,149 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_CPP_C_FUNCT_HXX
+#define ARY_CPP_C_FUNCT_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <ary/cpp/c_ce.hxx>
+ // OTHER
+#include <ary/cessentl.hxx>
+#include <ary/cpp/c_types4cpp.hxx>
+#include <ary/cpp/c_slntry.hxx>
+#include <ary/cpp/c_vfflag.hxx>
+#include <ary/cpp/c_osigna.hxx>
+
+
+
+
+namespace ary
+{
+namespace cpp
+{
+
+
+
+/** A C++ function declaration.
+*/
+class Function : public CodeEntity
+{
+ public:
+ enum E_ClassId { class_id = 1004 };
+
+ Function(
+ const String & i_sLocalName,
+ Ce_id i_nOwner,
+ E_Protection i_eProtection,
+ loc::Le_id i_nFile,
+ Type_id i_nReturnType,
+ const std::vector<S_Parameter> &
+ i_parameters,
+ E_ConVol i_conVol,
+ E_Virtuality i_eVirtuality,
+ FunctionFlags i_aFlags,
+ bool i_bThrowExists,
+ const std::vector<Type_id> &
+ i_rExceptions );
+ ~Function();
+
+
+ // OPERATIONS
+ void Add_TemplateParameterType(
+ const String & i_sLocalName,
+ Type_id i_nIdAsType );
+
+ // INQUIRY
+ const OperationSignature &
+ Signature() const;
+ Type_id ReturnType() const;
+ E_Protection Protection() const { return eProtection; }
+ E_Virtuality Virtuality() const { return eVirtuality; }
+ const FunctionFlags &
+ Flags() const { return aFlags; }
+ const StringVector &
+ ParamInfos() const { return aParameterInfos; }
+ const std::vector<Type_id> *
+ Exceptions() const { return pExceptions.Ptr(); }
+
+ const List_TplParam &
+ TemplateParameters() const
+ { return aTemplateParameterTypes; }
+ bool IsIdentical(
+ const Function & i_f ) const;
+
+ private:
+ // Interface csv::ConstProcessorClient
+ virtual void do_Accept(
+ csv::ProcessorIfc & io_processor ) const;
+
+ // Interface ary::cpp::CodeEntity
+ virtual const String &
+ inq_LocalName() const;
+ virtual Cid inq_Owner() const;
+ virtual Lid inq_Location() const;
+
+ // Interface ary::cpp::CppEntity
+ virtual ClassId get_AryClass() const;
+
+ // Local Types
+ typedef StringVector ParameterInfoList;
+ typedef std::vector<Type_id> ExceptionTypeList;
+
+ // DATA
+ CeEssentials aEssentials;
+ List_TplParam aTemplateParameterTypes;
+ OperationSignature aSignature;
+ Type_id nReturnType;
+ E_Protection eProtection;
+ E_Virtuality eVirtuality;
+ FunctionFlags aFlags;
+ ParameterInfoList aParameterInfos;
+ Dyn<ExceptionTypeList>
+ pExceptions; // if (NOT pExceptions) there is no throw,
+ // else, there is one, but the list still may be empty.
+};
+
+
+
+
+// IMPLEMENTATION
+inline const OperationSignature &
+Function::Signature() const
+ { return aSignature; }
+inline Type_id
+Function::ReturnType() const
+ { return nReturnType; }
+
+
+
+
+} // namespace cpp
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/cpp/c_gate.hxx b/autodoc/inc/ary/cpp/c_gate.hxx
new file mode 100644
index 000000000000..ea9d09078397
--- /dev/null
+++ b/autodoc/inc/ary/cpp/c_gate.hxx
@@ -0,0 +1,121 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_CPP_C_GATE_HXX
+#define ARY_CPP_C_GATE_HXX
+
+
+// USED SERVICES
+ // BASE CLASSES
+ // OTHER
+#include <ary/cpp/c_types4cpp.hxx>
+
+
+
+namespace autodoc
+{
+ class Options;
+}
+namespace ary
+{
+ class Entity;
+
+namespace cpp
+{
+ class CodeEntity;
+ class CppEntity;
+ class CePilot;
+ class DefPilot;
+ class TypePilot;
+}
+namespace loc
+{
+ class LocationPilot;
+}
+}
+
+
+
+
+
+namespace ary
+{
+namespace cpp
+{
+
+
+
+/** Acess to all stored objcts in the repository, which are
+ relevant to C++.
+*/
+class Gate
+{
+ public:
+ // LIFECYCLE
+ virtual ~Gate() {}
+
+
+ // OPERATIONS
+ virtual void Calculate_AllSecondaryInformation() = 0;
+// const ::autodoc::Options &
+// i_options ) = 0;
+
+ // INQUIRY
+ virtual const String &
+ RepositoryTitle() const = 0;
+ virtual const CodeEntity *
+ Search_RelatedCe(
+ Type_id i_type ) const = 0;
+ virtual const ::ary::cpp::CppEntity *
+ Search_Entity(
+ GlobalId i_id ) const = 0;
+ virtual uintt Get_AlphabeticalList(
+ List_GlobalIds & o_result,
+ const char * i_begin,
+ const char * i_end ) const = 0;
+ virtual const CePilot &
+ Ces() const = 0;
+ virtual const DefPilot &
+ Defs() const = 0;
+ virtual const TypePilot &
+ Types() const = 0;
+ virtual const loc::LocationPilot &
+ Locations() const = 0;
+
+ // ACCESS
+ virtual CePilot & Ces() = 0;
+ virtual DefPilot & Defs() = 0;
+ virtual TypePilot & Types() = 0;
+ virtual loc::LocationPilot &
+ Locations() = 0;
+};
+
+
+
+} // namespace cpp
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/cpp/c_macro.hxx b/autodoc/inc/ary/cpp/c_macro.hxx
new file mode 100644
index 000000000000..35fe6c17c623
--- /dev/null
+++ b/autodoc/inc/ary/cpp/c_macro.hxx
@@ -0,0 +1,84 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_CPP_C_MACRO_HXX
+#define ARY_CPP_C_MACRO_HXX
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <ary/cpp/c_de.hxx>
+
+
+
+namespace ary
+{
+namespace cpp
+{
+
+
+/** A C/C++ macro ("#define ABC(a,b)") statement, but no simple define.
+
+ @see Define
+*/
+class Macro : public DefineEntity
+{
+ public:
+ enum E_ClassId { class_id = 1602 };
+
+ Macro();
+ Macro( /// Used for: #define DEFINE xyz
+ const String & i_name,
+ const StringVector &
+ i_params,
+ const StringVector &
+ i_definition,
+ loc::Le_id i_declaringFile );
+ ~Macro();
+ const StringVector & Params() const { return aParams; }
+
+ private:
+ // Interface csv::ConstProcessorClient
+ virtual void do_Accept(
+ csv::ProcessorIfc & io_processor ) const;
+ // Interface ary::Object
+ virtual ClassId get_AryClass() const;
+
+ // Interface DefineEntity:
+ virtual const StringVector &
+ inq_DefinitionText() const;
+ // DATA
+ StringVector aParams;
+ StringVector aDefinition;
+};
+
+
+
+
+} // namespace cpp
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/cpp/c_namesp.hxx b/autodoc/inc/ary/cpp/c_namesp.hxx
new file mode 100644
index 000000000000..2cb0f6878169
--- /dev/null
+++ b/autodoc/inc/ary/cpp/c_namesp.hxx
@@ -0,0 +1,194 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_CPP_C_NAMESP_HXX
+#define ARY_CPP_C_NAMESP_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <ary/cpp/c_ce.hxx>
+#include <ary/arygroup.hxx>
+ // OTHER
+#include <ary/symtreenode.hxx>
+#include <ary/cessentl.hxx>
+#include <ary/cpp/c_types4cpp.hxx>
+#include <ary/cpp/c_slntry.hxx>
+
+namespace ary
+{
+namespace cpp
+{
+ class Gate;
+ class OperationSignature;
+}
+}
+
+
+
+namespace ary
+{
+namespace cpp
+{
+
+
+
+/** A C++ namespace.
+*/
+class Namespace : public CodeEntity,
+ public AryGroup
+{
+ public:
+ enum E_ClassId { class_id = 1000 };
+
+ enum E_Slots
+ {
+ SLOT_SubNamespaces = 1,
+ SLOT_Classes,
+ SLOT_Enums,
+ SLOT_Typedefs,
+ SLOT_Operations,
+ SLOT_Variables,
+ SLOT_Constants
+ };
+
+ typedef ::ary::symtree::Node<CeNode_Traits> node_t;
+
+ Namespace();
+ Namespace(
+ const String & i_sName,
+ Namespace & i_rParent );
+ ~Namespace();
+ // OPERATIONS
+ void Add_LocalNamespace(
+ Namespace & io_rLocalNamespace );
+ void Add_LocalClass(
+ const String & i_sLocalName,
+ Cid i_nId );
+ void Add_LocalEnum(
+ const String & i_sLocalName,
+ Cid i_nId );
+ void Add_LocalTypedef(
+ const String & i_sLocalName,
+ Cid i_nId );
+ void Add_LocalOperation(
+ const String & i_sLocalName,
+ Cid i_nId );
+ void Add_LocalVariable(
+ const String & i_sLocalName,
+ Cid i_nId );
+ void Add_LocalConstant(
+ const String & i_sLocalName,
+ Cid i_nId );
+
+ // INQUIRY
+ virtual uintt Depth() const;
+ Namespace * Parent() const;
+
+ Ce_id Search_Child(
+ const String & i_key ) const;
+ Namespace * Search_LocalNamespace(
+ const String & i_sLocalName ) const;
+ uintt Get_SubNamespaces(
+ std::vector< const Namespace* > &
+ o_rResultList ) const;
+ Ce_id Search_LocalClass(
+ const String & i_sName ) const;
+ void Search_LocalOperations(
+ std::vector<Ce_id> &
+ o_result,
+ const String & i_sName ) const;
+ const node_t & AsNode() const;
+
+ // ACCESS
+ node_t & AsNode();
+
+ private:
+ NON_COPYABLE(Namespace);
+
+ // Interface csv::ConstProcessorClient
+ virtual void do_Accept(
+ csv::ProcessorIfc & io_processor ) const;
+
+ // Interface CodeEntity
+ virtual const String &
+ inq_LocalName() const;
+ virtual Cid inq_Owner() const;
+ virtual Lid inq_Location() const;
+
+ // Interface ary::cpp::CppEntity
+ virtual ClassId get_AryClass() const;
+
+ // Interface AryGroup
+ virtual Gid inq_Id_Group() const;
+ virtual const cpp::CppEntity &
+ inq_RE_Group() const;
+ virtual const ary::group::SlotList &
+ inq_Slots() const;
+ virtual DYN Slot * inq_Create_Slot(
+ SlotAccessId i_nSlot ) const;
+ // Local
+ typedef std::multimap<String, Ce_id> Map_Operations;
+
+ // DATA
+ CeEssentials aEssentials;
+ node_t aAssignedNode;
+
+ Map_NamespacePtr aLocalNamespaces;
+ Map_LocalCe aLocalClasses;
+ Map_LocalCe aLocalEnums;
+ Map_LocalCe aLocalTypedefs;
+ Map_Operations aLocalOperations;
+ Map_LocalCe aLocalVariables;
+ Map_LocalCe aLocalConstants;
+
+ Namespace * pParent;
+ uintt nDepth;
+};
+
+
+
+// IMPLEMENTATION
+inline const Namespace::node_t &
+Namespace::AsNode() const
+{
+ return aAssignedNode;
+}
+
+inline Namespace::node_t &
+Namespace::AsNode()
+{
+ return aAssignedNode;
+}
+
+
+
+
+} // namespace cpp
+} // ary
+#endif
diff --git a/autodoc/inc/ary/cpp/c_osigna.hxx b/autodoc/inc/ary/cpp/c_osigna.hxx
new file mode 100644
index 000000000000..60596e327191
--- /dev/null
+++ b/autodoc/inc/ary/cpp/c_osigna.hxx
@@ -0,0 +1,122 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_CPP_C_OSIGNA_HXX
+#define ARY_CPP_C_OSIGNA_HXX
+
+// USED SERVICES
+ // BASE CLASSES
+ // OTHER
+#include <ary/cpp/c_types4cpp.hxx>
+
+namespace ary
+{
+namespace cpp
+{
+ class Gate;
+}
+}
+
+
+
+namespace ary
+{
+namespace cpp
+{
+
+
+/** The signature of a C++ function. That is: parameter types and
+ const/volatile modifiers.
+*/
+class OperationSignature
+{
+ public:
+ typedef std::vector<Type_id> ParameterTypeList;
+
+ OperationSignature(
+ ParameterTypeList i_parameterTypes, // Non const, because it will be swapped with aParameterTypes.
+ E_ConVol i_conVol );
+
+ bool operator==(
+ const OperationSignature &
+ i_rSig ) const;
+ bool operator<(
+ const OperationSignature &
+ i_rSig ) const;
+
+ // INQUIRY
+ const ParameterTypeList &
+ Parameters() const;
+ E_ConVol ConVol() const;
+
+ /** Compares the signatures by length an then by ids of
+ parameter types. So the result is not always human
+ reconstructable.
+ @return like in strcmp().
+ */
+ int Compare(
+ const OperationSignature &
+ i_rSig ) const;
+ private:
+ // DATA
+ ParameterTypeList aParameterTypes;
+ E_ConVol eConVol;
+};
+
+
+
+
+// IMPLEMENTATION
+inline bool
+OperationSignature::operator==( const OperationSignature & i_rSign ) const
+{
+ return Compare(i_rSign) == 0;
+}
+
+inline bool
+OperationSignature::operator<( const OperationSignature & i_rSign ) const
+{
+ return Compare(i_rSign) < 0;
+}
+
+inline const OperationSignature::ParameterTypeList &
+OperationSignature::Parameters() const
+{
+ return aParameterTypes;
+}
+
+inline E_ConVol
+OperationSignature::ConVol() const
+{
+ return eConVol;
+}
+
+
+
+} // namespace cpp
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/cpp/c_slntry.hxx b/autodoc/inc/ary/cpp/c_slntry.hxx
new file mode 100644
index 000000000000..0c6ef0d9c74a
--- /dev/null
+++ b/autodoc/inc/ary/cpp/c_slntry.hxx
@@ -0,0 +1,110 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_CPP_C_SLNTRY_HXX
+#define ARY_CPP_C_SLNTRY_HXX
+// KORR_DEPRECATED_3.0
+
+// USED SERVICES
+#include <ary/cpp/c_types4cpp.hxx>
+#include <ary/namesort.hxx>
+
+
+namespace ary
+{
+namespace cpp
+{
+ class Namespace;
+
+
+
+typedef Namespace * NamespacePtr;
+struct Less_NamespacePtr
+{
+ bool operator()( /// @return true if (i_p1->Name() < i_p2->Name()) .
+ const NamespacePtr& i_p1,
+ const NamespacePtr& i_p2 );
+};
+
+
+
+
+struct S_Classes_Base
+{
+ Type_id nId;
+ E_Protection eProtection;
+ E_Virtuality eVirtuality;
+ String sComment;
+
+ S_Classes_Base()
+ : nId(0),
+ eProtection(PROTECT_global),
+ eVirtuality(VIRTUAL_none)
+ // sComment
+ { }
+};
+
+struct S_TplParam
+{
+ String sName;
+ Type_id nId;
+
+ S_TplParam(
+ String i_sName,
+ Type_id i_nId )
+ : sName(i_sName), nId(i_nId) {}
+ const String & Name() const { return sName; }
+};
+
+
+struct S_LocalCe
+{
+ String sLocalName;
+ Ce_id nId;
+
+ S_LocalCe() : nId(0) {}
+ S_LocalCe(
+ const String & i_sLocalName,
+ Cid i_nId )
+ : sLocalName(i_sLocalName), nId(i_nId) {}
+ bool operator<(
+ const S_LocalCe & i_rCe ) const
+ { return LesserName()(sLocalName,i_rCe.sLocalName); }
+};
+
+typedef std::vector< S_LocalCe > List_LocalCe;
+
+
+typedef std::map<String, NamespacePtr> Map_NamespacePtr;
+typedef std::vector< S_Classes_Base > List_Bases;
+typedef std::vector< S_TplParam > List_TplParam;
+
+
+
+} // namespace cpp
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/cpp/c_traits.hxx b/autodoc/inc/ary/cpp/c_traits.hxx
new file mode 100644
index 000000000000..70db38ce0400
--- /dev/null
+++ b/autodoc/inc/ary/cpp/c_traits.hxx
@@ -0,0 +1,216 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_CPP_C_TRAITS_HXX
+#define ARY_CPP_C_TRAITS_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+ // OTHER
+#include <ary/cpp/c_types4cpp.hxx>
+
+
+
+namespace ary
+{
+namespace symtree
+{
+ template <class X> class Node;
+}
+}
+
+
+
+
+namespace ary
+{
+namespace cpp
+{
+
+
+/** Basic traits for derived ones of ->CodeEntity.
+*/
+struct Ce_Traits
+{
+ typedef CodeEntity entity_base_type;
+ typedef Ce_id id_type;
+
+ static entity_base_type &
+ EntityOf_(
+ id_type i_id );
+};
+
+
+/** An instance of SYMBOL_TRAITS for ->::ary::SortedIds<>.
+
+ @see ::ary::SortedIds<>
+*/
+struct CeNode_Traits : public Ce_Traits
+{
+ static const symtree::Node<CeNode_Traits> *
+ NodeOf_(
+ const entity_base_type &
+ i_entity );
+ static symtree::Node<CeNode_Traits> *
+ NodeOf_(
+ entity_base_type & i_entity );
+ static entity_base_type *
+ ParentOf_(
+ const entity_base_type &
+ i_entity );
+ template <class KEY>
+ static id_type Search_(
+ const entity_base_type &
+ i_entity,
+ const KEY & i_localKey );
+};
+
+
+/** An instance of COMPARE for ->::ary::SortedIds<>.
+
+ @see ::ary::SortedIds<>
+*/
+struct Ce_Compare : public Ce_Traits
+{
+ typedef String key_type;
+
+ static const key_type &
+ KeyOf_(
+ const entity_base_type &
+ i_entity );
+ static bool Lesser_(
+ const key_type & i_1,
+ const key_type & i_2 );
+};
+
+/** An instance of COMPARE for ->::ary::SortedIds<>.
+
+ @see ::ary::SortedIds<>
+*/
+struct Ce_GlobalCompare : public Ce_Traits
+{
+ typedef entity_base_type key_type;
+
+ static const key_type &
+ KeyOf_(
+ const entity_base_type &
+ i_entity )
+ { return i_entity; }
+ static bool Lesser_(
+ const key_type & i_1,
+ const key_type & i_2 );
+};
+
+
+/** Basic traits for derivd ones of ->DefineEntity.
+*/
+struct Def_Traits
+{
+ typedef DefineEntity entity_base_type;
+ typedef De_id id_type;
+
+ static entity_base_type &
+ EntityOf_(
+ id_type i_id );
+};
+
+
+/** An instance of COMPARE for ->::ary::SortedIds<>.
+
+ @see ::ary::SortedIds<>
+*/
+struct Def_Compare : public Def_Traits
+{
+ typedef String key_type;
+
+ static const key_type &
+ KeyOf_(
+ const entity_base_type &
+ i_entity );
+ static bool Lesser_(
+ const key_type & i_1,
+ const key_type & i_2 );
+};
+
+/** Basic traits for derivd ones of ->Type.
+*/
+struct Type_Traits
+{
+ typedef Type entity_base_type;
+ typedef Type_id id_type;
+
+ static entity_base_type &
+ EntityOf_(
+ id_type i_id );
+};
+
+/** An instance of COMPARE for ->::ary::SortedIds<>.
+
+ @see ::ary::SortedIds<>
+*/
+struct UsedType_Compare : public Type_Traits
+{
+ typedef UsedType key_type;
+
+ static const key_type &
+ KeyOf_(
+ const entity_base_type &
+ i_entity );
+ static bool Lesser_(
+ const key_type & i_1,
+ const key_type & i_2 );
+};
+
+
+
+
+
+
+// IMPLEMENTATION
+
+/// Implementation helper for ->CeNode_Traits::Search_ .
+Ce_id CeNode_Search(
+ const CodeEntity & i_entity,
+ const String & i_localKey );
+
+
+template <class KEY>
+Ce_Traits::id_type
+CeNode_Traits::Search_( const entity_base_type & i_entity,
+ const KEY & i_localKey )
+{
+ return CeNode_Search(i_entity, i_localKey);
+}
+
+
+
+
+} // namespace cpp
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/cpp/c_tydef.hxx b/autodoc/inc/ary/cpp/c_tydef.hxx
new file mode 100644
index 000000000000..398b140215d2
--- /dev/null
+++ b/autodoc/inc/ary/cpp/c_tydef.hxx
@@ -0,0 +1,100 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_CPP_C_TYDEF_HXX
+#define ARY_CPP_C_TYDEF_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <ary/cpp/c_ce.hxx>
+ // OTHER
+#include <ary/cessentl.hxx>
+#include <ary/cpp/c_types4cpp.hxx>
+
+
+
+namespace ary
+{
+namespace cpp
+{
+
+
+/** A C++ typedef declaration.
+*/
+class Typedef : public CodeEntity
+{
+ public:
+ // LIFECYCLE
+ enum E_ClassId { class_id = 1003 };
+
+ Typedef(
+ const String & i_sLocalName,
+ Ce_id i_nOwner,
+ E_Protection i_eProtection,
+ Lid i_nFile,
+ Type_id i_nDescribingType );
+ ~Typedef();
+ // INQUIRY
+ Type_id DescribingType() const;
+ E_Protection Protection() const { return eProtection; }
+
+ private:
+ // Interface csv::ConstProcessorClient
+ virtual void do_Accept(
+ csv::ProcessorIfc & io_processor ) const;
+
+ // Interface ary::cpp::CodeEntity
+ virtual const String &
+ inq_LocalName() const;
+ virtual Cid inq_Owner() const;
+ virtual Lid inq_Location() const;
+
+ // Interface ary::cpp::CppEntity
+ virtual ClassId get_AryClass() const;
+
+ // DATA
+ CeEssentials aEssentials;
+ Type_id nDescribingType;
+ E_Protection eProtection;
+};
+
+
+
+// IMPLEMENTATION
+inline Type_id
+Typedef::DescribingType() const
+{
+ return nDescribingType;
+}
+
+
+
+} // namespace cpp
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/cpp/c_type.hxx b/autodoc/inc/ary/cpp/c_type.hxx
new file mode 100644
index 000000000000..b404c890ec54
--- /dev/null
+++ b/autodoc/inc/ary/cpp/c_type.hxx
@@ -0,0 +1,133 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_CPP_C_TYPE_HXX
+#define ARY_CPP_C_TYPE_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <ary/entity.hxx>
+ // OTHER
+#include <ary/cpp/c_types4cpp.hxx>
+#include <ary/cpp/c_traits.hxx>
+
+
+namespace ary
+{
+namespace cpp
+{
+ class Gate;
+}
+}
+
+
+
+
+
+namespace ary
+{
+namespace cpp
+{
+
+
+
+/** Base of all C++ types
+*/
+class Type : public ::ary::Entity
+{
+ public:
+ typedef Type_Traits traits_t;
+
+ virtual ~Type() {}
+
+ Type_id TypeId() const { return Type_id(Id()); }
+ Ce_id RelatedCe() const;
+ bool IsConst() const;
+ void Get_Text(
+ StreamStr & o_rOut,
+ const Gate & i_rGate ) const;
+
+ /** It is guaranteed, that the output is correct, also,
+ if all three output-streams are the same instance.
+ */
+ void Get_Text(
+ StreamStr & o_rPreName,
+ StreamStr & o_rName,
+ StreamStr & o_rPostName,
+ const Gate & i_rGate ) const;
+
+ private:
+ virtual Rid inq_RelatedCe() const; // Defaulted to 0. Implemented in c_builtintype.cxx.
+ virtual bool inq_IsConst() const = 0;
+ virtual void inq_Get_Text(
+ StreamStr & o_rPreName,
+ StreamStr & o_rName,
+ StreamStr & o_rPostName,
+ const Gate & i_rGate ) const = 0;
+};
+
+
+
+
+// IMPLEMENTATION
+inline Ce_id
+Type::RelatedCe() const
+{
+ return Ce_id(inq_RelatedCe());
+}
+
+inline bool
+Type::IsConst() const
+{
+ return inq_IsConst();
+}
+
+inline void
+Type::Get_Text( StreamStr & o_rOut,
+ const Gate & i_rGate ) const
+{
+ inq_Get_Text( o_rOut, o_rOut, o_rOut, i_rGate );
+}
+
+inline void
+Type::Get_Text( StreamStr & o_rPreName,
+ StreamStr & o_rName,
+ StreamStr & o_rPostName,
+ const Gate & i_rGate ) const
+{
+ inq_Get_Text( o_rPreName,o_rName,o_rPostName, i_rGate );
+}
+
+
+
+
+
+} // namespace cpp
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/cpp/c_types4cpp.hxx b/autodoc/inc/ary/cpp/c_types4cpp.hxx
new file mode 100644
index 000000000000..230578054051
--- /dev/null
+++ b/autodoc/inc/ary/cpp/c_types4cpp.hxx
@@ -0,0 +1,134 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_CPP_C_TYPES4CPP_HXX
+#define ARY_CPP_C_TYPES4CPP_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+ // OTHER
+#include <cosv/tpl/range.hxx>
+#include <ary/types.hxx>
+
+
+
+namespace ary
+{
+namespace cpp
+{
+
+class Namespace;
+class CodeEntity;
+class Type;
+class DefineEntity;
+class Gate;
+class CePilot;
+class TypePilot;
+class SecondariesPilot;
+class Ce_Storage;
+class Def_Storage;
+class Type_Storage;
+class UsedType;
+
+
+typedef TypedId< ::ary::cpp::CodeEntity > Ce_id;
+typedef TypedId< ::ary::cpp::Type > Type_id;
+typedef TypedId< ::ary::cpp::DefineEntity > De_id;
+
+
+typedef std::vector<Ce_id> CesList;
+typedef std::vector<De_id> DefsList;
+typedef std::vector<Type_id> TypesList;
+
+typedef std::vector<Ce_id>::const_iterator CesConstIterator;
+typedef std::vector<De_id>::const_iterator DefsConstIterator;
+typedef std::vector<Type_id>::const_iterator TypesConstIterator;
+
+typedef csv::range< CesConstIterator > CesResultList;
+typedef csv::range< DefsConstIterator > DefsResultList;
+typedef csv::range< TypesConstIterator > TypesResultList;
+
+
+typedef std::map<String, Ce_id> Map_LocalCe;
+
+
+
+enum E_Protection
+{
+ PROTECT_global = 0,
+ PROTECT_local, /// within Functions
+ PROTECT_public,
+ PROTECT_protected,
+ PROTECT_private
+};
+
+/** The sequence of E_Virtuality's values must not be changed,
+ because they are used in int-comparisons.
+*/
+enum E_Virtuality
+{
+ VIRTUAL_none = 0,
+ VIRTUAL_virtual,
+ VIRTUAL_abstract
+};
+
+enum E_ClassKey
+{
+ CK_class,
+ CK_struct,
+ CK_union
+};
+
+enum E_TypeSpecialisation
+{
+ TYSP_none = 0,
+ TYSP_unsigned,
+ TYSP_signed
+};
+
+enum E_ConVol
+{
+ CONVOL_none = 0,
+ CONVOL_const = 0x0001,
+ CONVOL_volatile = 0x0002,
+ CONVOL_both = 0x0003
+};
+
+
+
+// Backwards compatibility:
+typedef Ce_id Cid;
+typedef Type_id Tid;
+
+
+
+
+} // namespace cpp
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/cpp/c_vari.hxx b/autodoc/inc/ary/cpp/c_vari.hxx
new file mode 100644
index 000000000000..42f3e76a5e83
--- /dev/null
+++ b/autodoc/inc/ary/cpp/c_vari.hxx
@@ -0,0 +1,114 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_CPP_C_VARI_HXX
+#define ARY_CPP_C_VARI_HXX
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <ary/cpp/c_ce.hxx>
+ // OTHER
+#include <ary/cessentl.hxx>
+#include <ary/cpp/c_types4cpp.hxx>
+#include <ary/cpp/c_vfflag.hxx>
+
+
+
+namespace ary
+{
+namespace cpp
+{
+
+
+/** A C++ variable or constant declaration.
+*/
+class Variable : public CodeEntity
+{
+ public:
+ // LIFECYCLE
+ enum E_ClassId { class_id = 1005 };
+
+ Variable(
+ const String & i_sLocalName,
+ Ce_id i_nOwner,
+ E_Protection i_eProtection,
+ loc::Le_id i_nFile,
+ Type_id i_nType,
+ VariableFlags i_aFlags,
+ const String & i_sArraySize,
+ const String & i_sInitValue );
+ ~Variable();
+
+
+ // INQUIRY
+ Type_id Type() const;
+ const String & ArraySize() const;
+ const String & Initialisation() const;
+ E_Protection Protection() const { return eProtection; }
+
+ private:
+ // Interface csv::ConstProcessorClient
+ virtual void do_Accept(
+ csv::ProcessorIfc & io_processor ) const;
+
+ // Interface ary::cpp::CodeEntity
+ virtual const String &
+ inq_LocalName() const;
+ virtual Cid inq_Owner() const;
+ virtual Lid inq_Location() const;
+
+ // Interface ary::cpp::CppEntity
+ virtual ClassId get_AryClass() const;
+
+ // DATA
+ CeEssentials aEssentials;
+ Type_id nType;
+ E_Protection eProtection;
+ VariableFlags aFlags;
+ String sArraySize;
+ String sInitialisation;
+};
+
+
+
+// IMPLEMENTATION
+inline Type_id
+Variable::Type() const
+ { return nType; }
+inline const String &
+Variable::ArraySize() const
+ { return sArraySize; }
+inline const String &
+Variable::Initialisation() const
+ { return sInitialisation; }
+
+
+
+} // namespace cpp
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/cpp/c_vfflag.hxx b/autodoc/inc/ary/cpp/c_vfflag.hxx
new file mode 100644
index 000000000000..f9e3532e0f2b
--- /dev/null
+++ b/autodoc/inc/ary/cpp/c_vfflag.hxx
@@ -0,0 +1,151 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_CPP_C_VFFLAG_HXX
+#define ARY_CPP_C_VFFLAG_HXX
+
+// USED SERVICES
+
+
+namespace ary
+{
+namespace cpp
+{
+
+
+/** Properties of C++ variables.
+*/
+struct VariableFlags
+{
+ public:
+ enum E_Flags
+ {
+ f_static_local = 0x0001,
+ f_static_member = 0x0002,
+ f_extern = 0x0004,
+ f_mutable = 0x0008
+ };
+
+ VariableFlags(
+ UINT16 i_nFlags = 0 )
+ : nFlags(i_nFlags) {}
+
+ void Reset() { nFlags = 0; }
+
+ void SetStaticLocal() { nFlags |= f_static_local; }
+ void SetStaticMember() { nFlags |= f_static_member; }
+ void SetExtern() { nFlags |= f_extern; }
+ void SetMutable() { nFlags |= f_mutable; }
+
+ bool IsStaticLocal() const { return (nFlags & f_static_local) != 0; }
+ bool IsStaticMember() const { return (nFlags & f_static_member) != 0; }
+ bool IsExtern() const { return (nFlags & f_extern) != 0; }
+ bool IsMutable() const { return (nFlags & f_mutable) != 0; }
+
+ private:
+ UINT16 nFlags;
+};
+
+
+/** Properties of C++ functions.
+*/
+struct FunctionFlags
+{
+ public:
+ enum E_Flags
+ {
+ f_static_local = 0x0001,
+ f_static_member = 0x0002,
+ f_extern = 0x0004,
+ f_externC = 0x0008,
+ f_mutable = 0x0010,
+ f_inline = 0x0100,
+ f_register = 0x0200,
+ f_explicit = 0x0400
+ };
+
+ FunctionFlags(
+ UINT16 i_nFlags = 0 )
+ : nFlags(i_nFlags) {}
+
+ bool operator==(
+ const FunctionFlags &
+ i_ff ) const
+ { return nFlags == i_ff.nFlags; }
+ bool operator!=(
+ const FunctionFlags &
+ i_ff ) const
+ { return NOT operator==(i_ff); }
+
+ void Reset() { nFlags = 0; }
+
+ void SetStaticLocal() { nFlags |= f_static_local; }
+ void SetStaticMember() { nFlags |= f_static_member; }
+ void SetExtern() { nFlags |= f_extern; }
+ void SetExternC() { nFlags |= f_externC; }
+ void SetMutable() { nFlags |= f_mutable; }
+ void SetInline() { nFlags |= f_inline; }
+ void SetRegister() { nFlags |= f_register; }
+ void SetExplicit() { nFlags |= f_explicit; }
+
+ bool IsStaticLocal() const { return (nFlags & f_static_local) != 0; }
+ bool IsStaticMember() const { return (nFlags & f_static_member) != 0; }
+ bool IsExtern() const { return (nFlags & f_extern) != 0; }
+ bool IsExternC() const { return (nFlags & f_externC) != 0; }
+ bool IsMutable() const { return (nFlags & f_mutable) != 0; }
+ bool IsInline() const { return (nFlags & f_inline) != 0; }
+ bool IsRegister() const { return (nFlags & f_register) != 0; }
+ bool IsExplicit() const { return (nFlags & f_explicit) != 0; }
+
+ private:
+ UINT16 nFlags;
+};
+
+
+/** A C++ function parameter.
+*/
+struct S_Parameter
+{
+ String sName;
+ String sSizeExpression;
+ String sInitExpression;
+ Type_id nType;
+
+ S_Parameter() : nType(0) {}
+ ~S_Parameter() {}
+ void Empty() { nType = Type_id(0);
+ sName.clear();
+ sSizeExpression.clear();
+ sInitExpression.clear(); }
+};
+
+
+
+
+} // namespace cpp
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/cpp/cp_ce.hxx b/autodoc/inc/ary/cpp/cp_ce.hxx
new file mode 100644
index 000000000000..93b56536dbbb
--- /dev/null
+++ b/autodoc/inc/ary/cpp/cp_ce.hxx
@@ -0,0 +1,173 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_CPP_CP_CE_HXX
+#define ARY_CPP_CP_CE_HXX
+
+
+// USED SERVICES
+ // BASE CLASSES
+ // OTHER
+#include <ary/cpp/c_types4cpp.hxx>
+
+namespace ary
+{
+ class QualifiedName;
+
+namespace cpp
+{
+ class Class;
+ class CodeEntity;
+ class Enum;
+ class EnumValue;
+ class Function;
+ class InputContext;
+ class Namespace;
+ class OperationSignature;
+ class Typedef;
+ class Variable;
+
+ struct FunctionFlags;
+ struct S_Parameter;
+ struct VariableFlags;
+}
+}
+
+
+
+
+
+namespace ary
+{
+namespace cpp
+{
+
+
+
+/** Acess to all declared C++ code entites (types, variables, operations)
+ in the repository.
+*/
+class CePilot
+{
+ public:
+ // LIFECYCLE
+ virtual ~CePilot() {}
+
+ // OPERATIONS
+ virtual Namespace &
+ CheckIn_Namespace(
+ const InputContext &
+ i_context,
+ const String & i_localName ) = 0;
+ virtual Class & Store_Class(
+ const InputContext &
+ i_context,
+ const String & i_localName,
+ E_ClassKey i_classKey ) = 0;
+ virtual Enum & Store_Enum(
+ const InputContext &
+ i_context,
+ const String & i_localName ) = 0;
+ virtual Typedef & Store_Typedef(
+ const InputContext &
+ i_context,
+ const String & i_localName,
+ Type_id i_referredType ) = 0;
+
+ /// @return 0, if the function is duplicate.
+ virtual Function * Store_Operation(
+ const InputContext &
+ i_context,
+ const String & i_localName,
+ Type_id i_returnType,
+ const std::vector<S_Parameter> &
+ i_parameters,
+ E_Virtuality i_virtuality,
+ E_ConVol i_conVol,
+ FunctionFlags i_flags,
+ bool i_throwExists,
+ const std::vector<Tid> &
+ i_exceptions ) = 0;
+ virtual Variable & Store_Variable(
+ const InputContext &
+ i_context,
+ const String & i_localName,
+ Type_id i_type,
+ VariableFlags i_flags,
+ const String & i_arraySize,
+ const String & i_initValue ) = 0;
+ virtual EnumValue & Store_EnumValue(
+ const InputContext &
+ i_context,
+ const String & i_localName,
+ const String & i_initValue ) = 0;
+ // INQUIRY
+ virtual const Namespace &
+ GlobalNamespace() const = 0;
+ virtual const CodeEntity &
+ Find_Ce(
+ Ce_id i_id ) const = 0;
+ virtual const CodeEntity *
+ Search_Ce(
+ Ce_id i_id ) const = 0;
+
+ /// It's assumed that i_rSearchedName is an absolute name.
+ virtual const CodeEntity *
+ Search_CeAbsolute(
+ const CodeEntity & i_curScope,
+ const QualifiedName &
+ i_absoluteName ) const = 0;
+ virtual const CodeEntity *
+ Search_CeLocal(
+ const String & i_relativeName,
+ bool i_isFunction,
+ const Namespace & i_curNamespace,
+ const Class * i_curClass ) const = 0;
+ virtual void Get_QualifiedName(
+ StreamStr & o_result,
+ const String & i_localName,
+ Ce_id i_owner,
+ const char * i_delimiter = "::" ) const = 0;
+ virtual void Get_SignatureText(
+ StreamStr & o_rOut,
+ const OperationSignature &
+ i_signature,
+ const StringVector *
+ i_sParameterNames = 0 ) const = 0;
+ virtual CesResultList
+ Search_TypeName(
+ const String & i_sName ) const = 0;
+ // ACCESS
+ virtual Namespace & GlobalNamespace() = 0;
+};
+
+
+
+
+} // namespace cpp
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/cpp/cp_def.hxx b/autodoc/inc/ary/cpp/cp_def.hxx
new file mode 100644
index 000000000000..5f58634b4716
--- /dev/null
+++ b/autodoc/inc/ary/cpp/cp_def.hxx
@@ -0,0 +1,99 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_CPP_CP_DEF_HXX
+#define ARY_CPP_CP_DEF_HXX
+
+
+// USED SERVICES
+ // BASE CLASSES
+ // OTHER
+#include <ary/cpp/c_types4cpp.hxx>
+
+namespace ary
+{
+namespace cpp
+{
+ class Define;
+ class InputContext;
+ class Macro;
+}
+}
+
+
+
+
+namespace ary
+{
+namespace cpp
+{
+
+
+
+/** Acess to C++ defines and macros in the repository.
+*/
+class DefPilot
+{
+ public:
+ typedef DefsList::const_iterator DefsIterator;
+
+
+
+ // LIFECYCLE
+ virtual ~DefPilot() {}
+
+
+ // OPERATIONS
+ virtual Define & Store_Define(
+ const InputContext& i_rContext,
+ const String & i_sName,
+ const StringVector &
+ i_rDefinition ) = 0;
+ virtual Macro & Store_Macro(
+ const InputContext& i_rContext,
+ const String & i_sName,
+ const StringVector &
+ i_rParams,
+ const StringVector &
+ i_rDefinition ) = 0;
+ // INQUIRY
+ virtual const DefineEntity &
+ Find_Def(
+ De_id i_id ) const = 0;
+ virtual DefsResultList
+ AllDefines() const = 0;
+ virtual DefsResultList
+ AllMacros() const = 0;
+};
+
+
+
+
+
+} // namespace cpp
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/cpp/cp_type.hxx b/autodoc/inc/ary/cpp/cp_type.hxx
new file mode 100644
index 000000000000..c8ebd6450f59
--- /dev/null
+++ b/autodoc/inc/ary/cpp/cp_type.hxx
@@ -0,0 +1,96 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_CPP_CP_TYPE_HXX
+#define ARY_CPP_CP_TYPE_HXX
+
+
+// USED SERVICES
+ // BASE CLASSES
+ // OTHER
+#include <ary/cpp/c_types4cpp.hxx>
+
+namespace ary
+{
+namespace cpp
+{
+ class InputContext;
+ class Type;
+ class UsedType;
+}
+}
+
+
+
+
+
+namespace ary
+{
+namespace cpp
+{
+
+
+
+
+/** Acess to all found C++ types (as they are used in declarations)
+ in the repository.
+*/
+class TypePilot
+{
+ public:
+
+ // LIFECYCLE
+ virtual ~TypePilot() {}
+
+
+ // OPERATIONS
+ virtual const Type &
+ CheckIn_UsedType(
+ const InputContext &
+ i_context,
+ DYN UsedType & pass_type ) = 0;
+ // INQUIRY
+ virtual const Type &
+ Find_Type(
+ Type_id i_type ) const = 0;
+ virtual bool Get_TypeText(
+ StreamStr & o_result,
+ Type_id i_type ) const = 0;
+ virtual bool Get_TypeText(
+ StreamStr & o_preName, /// ::ary::cpp::
+ StreamStr & o_name, /// MyClass
+ StreamStr & o_postName, /// <TplArgument> * const &
+ Type_id i_type ) const = 0;
+ virtual Type_id Tid_Ellipse() const = 0;
+};
+
+
+
+
+} // namespace cpp
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/cpp/inpcontx.hxx b/autodoc/inc/ary/cpp/inpcontx.hxx
new file mode 100644
index 000000000000..69d0d3f41337
--- /dev/null
+++ b/autodoc/inc/ary/cpp/inpcontx.hxx
@@ -0,0 +1,216 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_CPP_INPCONTX_HXX
+#define ARY_CPP_INPCONTX_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+ // OTHER
+#include <ary/cpp/c_types4cpp.hxx>
+
+
+
+namespace ary
+{
+namespace loc
+{
+ class File;
+}
+namespace cpp
+{
+ class Gate;
+ class Namespace;
+ class Class;
+ class Enum;
+
+ class OperationSignature;
+}
+}
+
+
+
+namespace ary
+{
+namespace cpp
+{
+
+
+/** The context of a CodeEntity, which is going to be stored in the
+ repository. The information is used mainly by ->ary::cpp::CeAdmin.
+*/
+class InputContext
+{
+ public:
+ class Owner
+ {
+ public:
+ // LIFECYCLE
+ virtual ~Owner() {}
+
+ // OPERATIONS
+ /// Adds Class data to current inner scope (Namespace or Class).
+ void Add_Class(
+ const String & i_sLocalName,
+ Cid i_nId );
+ /// Adds Enum data to current inner scope (Namespace or Class).
+ void Add_Enum(
+ const String & i_sLocalName,
+ Cid i_nId );
+ /// Adds Typedef data to current inner scope (Namespace or Class).
+ void Add_Typedef(
+ const String & i_sLocalName,
+ Cid i_nId );
+ /// Adds Operation data to current inner scope (Namespace or Class).
+ void Add_Operation(
+ const String & i_sLocalName,
+ Cid i_nId,
+ bool i_bIsStaticMember ); /// True only for static class members.
+ /// Adds Variable data to current inner scope (Namespace or Class).
+ void Add_Variable(
+ const String & i_sLocalName,
+ Cid i_nId,
+ bool i_bIsConst,
+ bool i_bIsStaticMember ); /// True only for static class members.
+ // INQUIRY
+ Ce_id CeId() const;
+
+ /** @attention Must only be used by ary::cpp::GatePilot!
+ Will work nowhere else!
+ */
+ virtual bool HasClass(
+ const String & i_sLocalName ) = 0;
+ private:
+ virtual void do_Add_Class(
+ const String & i_sLocalName,
+ Cid i_nId ) = 0;
+ virtual void do_Add_Enum(
+ const String & i_sLocalName,
+ Cid i_nId ) = 0;
+ virtual void do_Add_Typedef(
+ const String & i_sLocalName,
+ Cid i_nId ) = 0;
+ virtual void do_Add_Operation(
+ const String & i_sLocalName,
+ Cid i_nId,
+ bool i_bIsStatic ) = 0;
+ virtual void do_Add_Variable(
+ const String & i_sLocalName,
+ Cid i_nId,
+ bool i_bIsConst,
+ bool i_bIsStatic ) = 0;
+ virtual Ce_id inq_CeId() const = 0;
+ };
+
+ // LIFECYCLE
+ virtual ~InputContext() {}
+
+ // OPERATIONS
+
+ // INQUIRY
+ loc::File & CurFile() const;
+
+ Namespace & CurNamespace() const;
+ Class * CurClass() const;
+ Enum * CurEnum() const;
+
+ Owner & CurOwner() const;
+ E_Protection CurProtection() const;
+
+ private:
+ virtual loc::File & inq_CurFile() const = 0;
+
+ virtual Namespace & inq_CurNamespace() const = 0;
+ virtual Class * inq_CurClass() const = 0;
+ virtual Enum * inq_CurEnum() const = 0;
+
+ virtual Owner & inq_CurOwner() const = 0;
+ virtual E_Protection
+ inq_CurProtection() const = 0;
+};
+
+
+
+
+// IMPLEMENTATION
+inline loc::File &
+InputContext::CurFile() const
+ { return inq_CurFile(); }
+
+inline Namespace &
+InputContext::CurNamespace() const
+ { return inq_CurNamespace(); }
+inline Class *
+InputContext::CurClass() const
+ { return inq_CurClass(); }
+inline Enum *
+InputContext::CurEnum() const
+ { return inq_CurEnum(); }
+inline InputContext::Owner &
+InputContext::CurOwner() const
+ { return inq_CurOwner(); }
+inline E_Protection
+InputContext::CurProtection() const
+ { return inq_CurProtection(); }
+
+
+inline void
+InputContext::Owner::Add_Class( const String & i_sLocalName,
+ Cid i_nId )
+ { do_Add_Class(i_sLocalName, i_nId); }
+inline void
+InputContext::Owner::Add_Enum( const String & i_sLocalName,
+ Cid i_nId )
+ { do_Add_Enum(i_sLocalName, i_nId); }
+inline void
+InputContext::Owner::Add_Typedef( const String & i_sLocalName,
+ Cid i_nId )
+ { do_Add_Typedef(i_sLocalName, i_nId); }
+inline void
+InputContext::Owner::Add_Operation( const String & i_sLocalName,
+ Cid i_nId,
+ bool i_bIsStatic )
+ { do_Add_Operation( i_sLocalName, i_nId, i_bIsStatic ); }
+inline void
+InputContext::Owner::Add_Variable( const String & i_sLocalName,
+ Cid i_nId,
+ bool i_bIsConst,
+ bool i_bIsStatic )
+ { do_Add_Variable( i_sLocalName, i_nId, i_bIsConst, i_bIsStatic ); }
+inline Ce_id
+InputContext::Owner::CeId() const
+ { return inq_CeId(); }
+
+
+
+
+
+} // namespace cpp
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/cpp/namechain.hxx b/autodoc/inc/ary/cpp/namechain.hxx
new file mode 100644
index 000000000000..094abd755981
--- /dev/null
+++ b/autodoc/inc/ary/cpp/namechain.hxx
@@ -0,0 +1,140 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_CPP_NAMECHAI_HXX
+#define ARY_CPP_NAMECHAI_HXX
+
+
+// USED SERVICES
+ // BASE CLASSES
+ // OTHER
+
+
+namespace ary
+{
+namespace cpp
+{
+ class Gate;
+
+namespace ut
+{
+ class List_TplParameter;
+
+class NameSegment
+{
+ public:
+ NameSegment(
+ const char * i_sName );
+ /** @precond MPT pTemplate.
+ This cannot be used, except of inserting a new element
+ in the segment list of ary::cpp::ut::NameChain. In that
+ case, the template parameter list doe snot yet exist.
+ */
+ NameSegment(
+ const NameSegment & i_rSeg );
+ ~NameSegment();
+
+ // OPERATIONS
+ List_TplParameter & AddTemplate();
+
+ // INQUIRY
+ const String & Name() const;
+
+ /// @return as strcmp().
+ intt Compare(
+ const NameSegment & i_rOther ) const;
+ void Get_Text_AsScope(
+ StreamStr & o_rOut,
+ const ary::cpp::Gate &
+ i_rGate ) const;
+ void Get_Text_AsMainType(
+ StreamStr & o_rName,
+ StreamStr & o_rPostName,
+ const ary::cpp::Gate &
+ i_rGate ) const;
+
+ NameSegment& operator=(const NameSegment&);
+ private:
+ String sName;
+ Dyn<List_TplParameter>
+ pTemplate;
+};
+
+class NameChain
+{
+ public:
+ typedef std::vector<NameSegment>::const_iterator
+ const_iterator;
+
+ NameChain();
+ ~NameChain();
+
+ // OPERATIONS
+ void Add_Segment(
+ const char * i_sSeg );
+ /** @precond aSegments.size() > 0.
+ Which means: Add_Segment() has to be called at least once before.
+ */
+ List_TplParameter & Templatize_LastSegment();
+
+ // INQUIRY
+ const_iterator begin() const { return aSegments.begin(); }
+ const_iterator end() const { return aSegments.end(); }
+
+ /// @return like strcmp.
+ intt Compare(
+ const NameChain & i_rChain ) const;
+ /// @ATTENTION Return value is volatile. Not reentrance enabled.
+ const String & LastSegment() const;
+
+ void Get_Text(
+ StreamStr & o_rPreName,
+ StreamStr & o_rName,
+ StreamStr & o_rPostName,
+ const ary::cpp::Gate &
+ i_rGate ) const;
+ private:
+ std::vector< NameSegment >
+ aSegments;
+};
+
+
+
+// IMPLEMENTATION
+inline const String &
+NameSegment::Name() const
+ { return sName; }
+
+
+
+
+
+
+} // namespace ut
+} // namespace cpp
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/cpp/usedtype.hxx b/autodoc/inc/ary/cpp/usedtype.hxx
new file mode 100644
index 000000000000..594be2a948a4
--- /dev/null
+++ b/autodoc/inc/ary/cpp/usedtype.hxx
@@ -0,0 +1,212 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_CPP_USEDTYPE_HXX
+#define ARY_CPP_USEDTYPE_HXX
+
+// USED SERVICES
+ // BASE CLASSES
+#include <ary/cpp/c_type.hxx>
+ // OTHER
+#include <ary/cpp/namechain.hxx>
+
+namespace ary
+{
+namespace cpp
+{
+ class CePilot;
+
+namespace ut
+{
+ class List_TplParameter;
+}
+}
+}
+
+
+
+
+namespace ary
+{
+namespace cpp
+{
+
+
+/** This class represents a type in textual form, like it is parsed out of
+ source code as a variable type or function return type.
+*/
+class UsedType : public Type
+{
+ public:
+ enum E_ClassId { class_id = 1203 };
+
+ explicit UsedType(
+ Ce_id i_scope );
+ ~UsedType();
+ // OPERATORS
+ bool operator<(
+ const UsedType & i_rType ) const;
+ // OPERATIONS
+
+ // Operations to build up the used type from parsing:
+ void Set_Absolute(); /// "::" is in front.
+ void Add_NameSegment(
+ const char * i_sSeg );
+ ut::List_TplParameter &
+ Enter_Template();
+ void Set_Unsigned();
+ void Set_Signed();
+ void Set_BuiltIn(
+ const char * i_sType );
+ void Set_Const(); /// Sets CV to the type or the present pointer level, whatever is highest.
+ void Set_Volatile(); /// Sets CV to the type or the present pointer level, whatever is highest.
+ void Add_PtrLevel(); /// For an '*'.
+ void Set_Reference(); /// For an '&'.
+
+ // Operations to find the relating CodeEntity:
+ /** This needs to be called only one time. After that
+ RelatedCe() will return the value.
+
+ When connectiing all parsed types, there are three steps:
+ 1. Find related types in the same scope and namespaces above.
+ 2. Then all classes can be connected to their base classes.
+ 3. Lastly types can be connected to Ces only known via their base
+ classes. This is not possible at step 1.
+
+ @see Connect2CeOnlyKnownViaBaseClass()
+ */
+ void Connect2Ce(
+ const CePilot & i_ces );
+
+ /** @see Connect2Ce()
+ */
+ void Connect2CeOnlyKnownViaBaseClass(
+ const Gate & i_gate );
+
+ // INQUIRY
+ /** @return True, if type consists of one built-in typename and
+ nothing else.
+ */
+ bool IsBuiltInType() const;
+ /** @return the full local name, including template instantiation, but without
+ '*','&' or modifiers.
+ */
+ const String & LocalName() const;
+ E_TypeSpecialisation
+ TypeSpecialisation() const;
+
+ private:
+ // Interface csv::ConstProcessorClient
+ virtual void do_Accept(
+ csv::ProcessorIfc & io_processor ) const;
+
+ // Interface ary::Object:
+ virtual ClassId get_AryClass() const;
+
+ // Interface ary::cpp::Type:
+ virtual Rid inq_RelatedCe() const;
+ virtual bool inq_IsConst() const;
+ virtual void inq_Get_Text(
+ StreamStr & o_rPreName,
+ StreamStr & o_rName,
+ StreamStr & o_rPostName,
+ const ary::cpp::Gate &
+ i_rGate ) const;
+ // Local
+ typedef std::vector< ary::cpp::E_ConVol > PtrLevelVector;
+
+ uintt PtrLevel() const { return uintt(aPtrLevels.size()); }
+ Ce_id RecursiveSearchCe_InBaseClassesOf(
+ const CodeEntity & i_mayBeClass,
+ const StringVector &
+ i_myQualification,
+ const String & i_myName,
+ const Gate & i_gate ) const;
+ void Get_NameParts(
+ StringVector & o_qualification,
+ String & o_name );
+
+ // Forbidden functions
+ UsedType(
+ const UsedType & i_rType );
+ bool operator=(
+ const UsedType & i_rType );
+
+ // DATA
+ ut::NameChain aPath;
+ PtrLevelVector aPtrLevels;
+ ary::cpp::E_ConVol eConVol_Type;
+ bool bIsReference;
+ bool bIsAbsolute;
+ bool bRefers2BuiltInType;
+ E_TypeSpecialisation
+ eTypeSpecialisation;
+ Ce_id nRelatedCe;
+
+ /// Namespace or class scope where the type occurred.
+ Ce_id nScope;
+};
+
+
+namespace ut
+{
+ class TemplateParameter;
+
+class List_TplParameter
+{
+ public:
+ typedef std::vector< DYN TemplateParameter * >::const_iterator const_iterator;
+
+ List_TplParameter();
+ ~List_TplParameter();
+
+ void AddParam_Type(
+ Type_id i_nType );
+ /// puts "< " TemplateArgumentList " >" to o_rOut.
+ void Get_Text(
+ StreamStr & o_rOut,
+ const ary::cpp::Gate &
+ i_rGate ) const;
+ /// @return as strcmp().
+ intt Compare(
+ const List_TplParameter &
+ i_rOther ) const;
+
+ private:
+ typedef std::vector< DYN TemplateParameter * > Vector_TplArgument;
+
+ Vector_TplArgument aTplParameters;
+};
+
+} // namespace ut
+
+
+
+
+} // namespace cpp
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/doc/d_boolean.hxx b/autodoc/inc/ary/doc/d_boolean.hxx
new file mode 100644
index 000000000000..58dd45008919
--- /dev/null
+++ b/autodoc/inc/ary/doc/d_boolean.hxx
@@ -0,0 +1,96 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_DOC_D_BOOLEAN_HXX
+#define ARY_DOC_D_BOOLEAN_HXX
+
+// BASE CLASSES
+#include <ary/doc/d_node.hxx>
+
+// USED SERVICES
+
+
+
+
+namespace ary
+{
+namespace doc
+{
+
+
+/** Repesents a boolean documentation item like "optional" or "not optional".
+*/
+class Boolean : public Node
+{
+ public:
+ // LIFECYCLE
+ explicit Boolean(
+ nodetype::id i_type );
+ virtual ~Boolean();
+
+ // OPERATIONS
+ void Set(
+ bool i_b );
+ // INQUIRY
+ bool IsTrue() const;
+
+ private:
+ // Interface csv::ConstProcessorClient:
+ virtual void do_Accept(
+ csv::ProcessorIfc & io_processor ) const;
+ // DATA
+ bool b;
+};
+
+
+
+
+// IMPLEMENTATION
+inline
+Boolean::Boolean(nodetype::id i_type)
+ : Node(i_type),
+ b(false)
+{
+}
+
+inline bool
+Boolean::IsTrue() const
+{
+ return b;
+}
+
+inline void
+Boolean::Set( bool i_b )
+{
+ b = i_b;
+}
+
+
+
+} // namespace doc
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/doc/d_docu.hxx b/autodoc/inc/ary/doc/d_docu.hxx
new file mode 100644
index 000000000000..ad9c895a2a6e
--- /dev/null
+++ b/autodoc/inc/ary/doc/d_docu.hxx
@@ -0,0 +1,106 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_DOC_D_DOCU_HXX
+#define ARY_DOC_D_DOCU_HXX
+
+// BASE CLASSES
+#include <cosv/tpl/processor.hxx>
+
+// USED SERVICES
+#include <ary/doc/d_node.hxx>
+
+
+
+
+namespace ary
+{
+namespace doc
+{
+
+
+/** Represents a documentation which is assigned to an Autodoc
+ repository entity.
+*/
+class Documentation : public csv::ConstProcessorClient
+{
+ public:
+ Documentation();
+ ~Documentation();
+ // OPERATIONS
+ void Clear();
+
+ // INQUIRY
+ const Node * Data() const;
+
+ // ACCESS
+ Node * Data();
+ void Set_Data(
+ ary::doc::Node & i_data );
+
+ private:
+ // Interface csv::ConstProcessorClient:
+ virtual void do_Accept(
+ csv::ProcessorIfc & io_processor ) const;
+ // DATA
+ Dyn<Node> pData;
+};
+
+
+
+
+// IMPLEMENTATION
+inline void
+Documentation::Clear()
+{
+ pData = 0;
+}
+
+inline const Node *
+Documentation::Data() const
+{
+ return pData.Ptr();
+}
+
+inline Node *
+Documentation::Data()
+{
+ return pData.Ptr();
+}
+
+inline void
+Documentation::Set_Data(ary::doc::Node & i_data)
+{
+ pData = &i_data;
+}
+
+
+
+
+} // namespace doc
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/doc/d_node.hxx b/autodoc/inc/ary/doc/d_node.hxx
new file mode 100644
index 000000000000..e5b29d7b5a7f
--- /dev/null
+++ b/autodoc/inc/ary/doc/d_node.hxx
@@ -0,0 +1,109 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_DOC_D_NODE_HXX
+#define ARY_DOC_D_NODE_HXX
+
+// BASE CLASSES
+#include <cosv/tpl/processor.hxx>
+// USED SERVICES
+#include <cosv/tpl/vvector.hxx>
+#include <ary/doc/d_types4doc.hxx>
+
+
+
+
+namespace ary
+{
+namespace doc
+{
+
+
+/** The abstract base class for any type of documentation content.
+
+ A ->Documentation has as content a hierarchy of Nodes, each can be a
+ different kind of content, like descriptions of single items or structs
+ or lists of Nodes.
+*/
+class Node : public csv::ConstProcessorClient
+{
+ public:
+ // LIFECYCLE
+ virtual ~Node();
+
+ // OPERATIONS
+ void Add_toChain(
+ DYN Node & pass_nextNode );
+ // INQUIRY
+ nodetype::id Type() const;
+ const Node * Next() const;
+ bool IsSingle() const;
+ uintt ListSize() const;
+
+ protected:
+ explicit Node(
+ nodetype::id i_type);
+ private:
+ // Forbid copies:
+ Node(const Node&);
+ Node & operator=(const Node&);
+
+ // DATA
+ nodetype::id nType;
+ Dyn<Node> pNext; /// Next ->Node in same list.
+};
+
+typedef csv::VirtualVector<Node> NodeList;
+
+
+
+
+// IMPLEMENTATION
+inline nodetype::id
+Node::Type() const
+{
+ return nType;
+}
+
+inline const Node *
+Node::Next() const
+{
+ return pNext.Ptr();
+}
+
+inline bool
+Node::IsSingle() const
+{
+ return pNext.operator bool();
+}
+
+
+
+
+} // namespace doc
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/doc/d_oldcppdocu.hxx b/autodoc/inc/ary/doc/d_oldcppdocu.hxx
new file mode 100644
index 000000000000..79bc4ab33aaf
--- /dev/null
+++ b/autodoc/inc/ary/doc/d_oldcppdocu.hxx
@@ -0,0 +1,130 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_DOC_D_OLDCPPDOCU_HXX
+#define ARY_DOC_D_OLDCPPDOCU_HXX
+// KORR_DEPRECATED_3.0
+
+// BASE CLASSES
+#include <ary/doc/d_node.hxx>
+// USED SERVICES
+#include <ary/info/inftypes.hxx>
+#include <ary/ary_disp.hxx>
+
+namespace ary
+{
+namespace info
+{
+ class AtTag;
+ class DocuStore;
+}
+}
+
+
+
+
+namespace ary
+{
+namespace doc
+{
+ using ::ary::info::AtTag;
+ using ::ary::info::E_AtTagId;
+
+
+/** Wrapper class for old C++ documentation format.
+
+ To be replaced by using the standard format.
+*/
+class OldCppDocu : public Node
+{
+ public:
+ typedef std::vector< DYN AtTag * > TagList;
+
+ // LIFECYCLE
+ OldCppDocu();
+ virtual ~OldCppDocu();
+
+ void Store2(
+ info::DocuStore & o_rDocuStore );
+
+ virtual AtTag * Create_StdTag(
+ E_AtTagId i_eId );
+ virtual AtTag * CheckIn_BaseTag();
+ virtual AtTag * CheckIn_ExceptionTag();
+ virtual AtTag * Create_ImplementsTag();
+ virtual AtTag * Create_KeywordTag();
+ virtual AtTag * CheckIn_ParameterTag();
+ virtual AtTag * CheckIn_SeeTag();
+ virtual AtTag * CheckIn_TemplateTag();
+ virtual AtTag * Create_LabelTag();
+ virtual AtTag * Create_DefaultTag();
+ virtual AtTag * Create_SinceTag(); /// @return always the first one created.
+
+ virtual void Replace_AtShort_By_AtDescr();
+
+ virtual void Set_Obsolete();
+ virtual void Set_Internal();
+ virtual void Set_Interface() { bIsInterface = true; }
+
+ // INQUIRY
+ const TagList & Tags() const { return aTags; }
+ const AtTag & Short() const;
+ bool IsObsolete() const { return bIsObsolete; }
+ virtual bool IsInternal() const;
+ virtual bool IsInterface() const;
+
+ private:
+ // Interface csv::ConstProcessorClient:
+ virtual void do_Accept(
+ csv::ProcessorIfc & io_processor ) const;
+ // DATA
+ unsigned char nTags[ary::info::C_eAtTag_NrOfClasses];
+
+ /** Creates a new AtTag at the end of aTags.
+ The index of this new AtTag is inserted in nTags at position
+ i_nIndex.
+ */
+ AtTag * & NewTag(
+ UINT8 i_nIndex );
+ /** Returns the Tag with the position nTags[i_nIndex]
+ in aTags.
+ */
+ AtTag & GetTag(
+ UINT8 i_nIndex );
+
+ TagList aTags;
+ bool bIsObsolete;
+ bool bIsInternal;
+ bool bIsInterface;
+};
+
+
+
+
+} // namespace doc
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/doc/d_oldidldocu.hxx b/autodoc/inc/ary/doc/d_oldidldocu.hxx
new file mode 100644
index 000000000000..6c4d2bdc2cc7
--- /dev/null
+++ b/autodoc/inc/ary/doc/d_oldidldocu.hxx
@@ -0,0 +1,111 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_DOC_D_OLDIDLDOCU_HXX
+#define ARY_DOC_D_OLDIDLDOCU_HXX
+
+// BASE CLASSES
+#include <ary/doc/d_node.hxx>
+// USED SERVICES
+#include <ary_i/ci_text2.hxx>
+
+
+
+
+namespace ary
+{
+namespace inf
+{
+ class AtTag2;
+ class DocuToken;
+ class DocuTex2;
+}
+namespace doc
+{
+ using ::ary::inf::AtTag2;
+ using ::ary::inf::DocuToken;
+ using ::ary::inf::DocuTex2;
+
+
+
+/** Wrapper for the old idl documentation format.
+*/
+class OldIdlDocu : public Node
+{
+ public:
+ OldIdlDocu();
+ ~OldIdlDocu();
+
+ void AddToken2Short(
+ DYN DocuToken & let_drToken )
+ { aShort.AddToken(let_drToken); }
+ void AddToken2Description(
+ DYN DocuToken & let_drToken )
+ { aDescription.AddToken(let_drToken); }
+ void AddToken2DeprecatedText(
+ DYN DocuToken & let_drToken );
+ void AddAtTag(
+ DYN AtTag2 & let_drAtTag )
+ { aTags.push_back(&let_drAtTag); }
+ void SetPublished() { bIsPublished = true; }
+ void SetDeprecated() { bIsDeprecated = true; }
+ void SetOptional() { bIsOptional = true; }
+ void SetExternShort(
+ const DocuTex2 & i_pExternShort )
+ { pExternShort = &i_pExternShort; }
+
+ const DocuTex2 & Short() const { return pExternShort != 0 ? *pExternShort : aShort; }
+ const DocuTex2 & Description() const { return aDescription; }
+ const DocuTex2 & DeprecatedText() const { return aDeprecatedText; }
+ const std::vector< AtTag2* > &
+ Tags() const { return aTags; }
+ bool IsPublished() const { return bIsPublished; }
+ bool IsDeprecated() const { return bIsDeprecated; }
+ bool IsOptional() const { return bIsOptional; }
+
+ private:
+ // Interface csv::ConstProcessorClient:
+ virtual void do_Accept(
+ csv::ProcessorIfc & io_processor ) const;
+ // DATA
+ DocuTex2 aShort;
+ DocuTex2 aDescription;
+ DocuTex2 aDeprecatedText;
+ std::vector< AtTag2* >
+ aTags;
+ const DocuTex2 * pExternShort;
+ bool bIsPublished;
+ bool bIsDeprecated;
+ bool bIsOptional;
+};
+
+
+
+
+} // namespace doc
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/doc/d_parametrized.hxx b/autodoc/inc/ary/doc/d_parametrized.hxx
new file mode 100644
index 000000000000..21f699e180d9
--- /dev/null
+++ b/autodoc/inc/ary/doc/d_parametrized.hxx
@@ -0,0 +1,121 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_DOC_D_PARAMETER_HXX
+#define ARY_DOC_D_PARAMETER_HXX
+
+// USED SERVICES
+ // BASE CLASSES
+#include <ary/doc/d_node.hxx>
+
+namespace ary
+{
+namespace doc
+{
+
+
+/** Documentation unit with Parameter.
+*/
+template <class T>
+class Parametrized : public Node
+{
+ public:
+ // LIFECYCLE
+ explicit Parametrized(
+ nodetype::id i_id,
+ T i_Parameter );
+ virtual ~Parametrized();
+
+ // INQUIRY
+ const HyperText & Doc() const;
+ const T & Parameter() const;
+
+ // ACESS
+ HyperText & Doc();
+ void Set_Parameter(
+ const T & i_param );
+ private:
+ // Interface csv::ConstProcessorClient:
+ virtual void do_Accept(
+ csv::ProcessorIfc & io_processor ) const;
+ // DATA
+ HyperText aDoc;
+ T aParameter;
+};
+
+
+
+
+// IMPLEMENTATION
+template <class T>
+Parametrized<T>::Parametrized( nodetype::id i_id,
+ T i_Parameter )
+ : Node(i_id),
+ aDoc(),
+ aParameter(i_Parameter)
+{
+}
+
+template <class T>
+Parametrized<T>::~Parametrized()
+{
+}
+
+template <class T>
+const HyperText &
+Parametrized<T>::Doc() const
+{
+ return aDoc;
+}
+
+template <class T>
+const T &
+Parametrized<T>::Parameter() const
+{
+ return aParameter;
+}
+
+template <class T>
+HyperText &
+Parametrized<T>::Doc()
+{
+ return aDoc;
+}
+
+template <class T>
+inline void
+Parametrized<T>::Set_Parameter(const T & i_param)
+{
+ aParameter = i_param;
+}
+
+
+
+
+} // namespace doc
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/doc/d_types4doc.hxx b/autodoc/inc/ary/doc/d_types4doc.hxx
new file mode 100644
index 000000000000..754a1b414a1d
--- /dev/null
+++ b/autodoc/inc/ary/doc/d_types4doc.hxx
@@ -0,0 +1,70 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_DOC_D_TYPES4DOC_HXX
+#define ARY_DOC_D_TYPES4DOC_HXX
+
+// USED SERVICES
+
+
+
+namespace ary
+{
+namespace doc
+{
+
+
+/** Type of a documentation: multiple lines or single line.
+*/
+enum E_BlockType
+{
+ dbt_none = 0,
+ dbt_multiline,
+ dbt_singleline
+};
+
+/** Type of documentation text: with html or without.
+*/
+enum E_TextType
+{
+ dtt_none = 0,
+ dtt_plain,
+ dtt_html
+};
+
+namespace nodetype
+{
+
+typedef int id;
+
+} // namespace nodetype
+
+
+
+} // namespace doc
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/doc/ht/dht_interpreter.hxx b/autodoc/inc/ary/doc/ht/dht_interpreter.hxx
new file mode 100644
index 000000000000..3659654c03d4
--- /dev/null
+++ b/autodoc/inc/ary/doc/ht/dht_interpreter.hxx
@@ -0,0 +1,76 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_DHT_INTERPRETER_HXX
+#define ARY_DHT_INTERPRETER_HXX
+
+
+
+
+namespace ary
+{
+namespace doc
+{
+namespace ht
+{
+ class Processor;
+
+
+/** Interface for all interpreters of a ->Component.
+*/
+class Interpreter
+{
+ public:
+ virtual ~Interpreter() {}
+
+ void Accept(
+ Processor & io_processor,
+ const String & i_data ) const;
+ private:
+ virtual void do_Accept(
+ Processor & io_processor,
+ const String & i_data ) const = 0;
+};
+
+
+
+
+// IMPLEMENTATION
+inline void
+Interpreter::Accept( Processor & io_processor,
+ const String & i_data ) const
+{
+ do_Accept(io_processor, i_data);
+}
+
+
+
+
+} // namespace ht
+} // namespace doc
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/entity.hxx b/autodoc/inc/ary/entity.hxx
new file mode 100644
index 000000000000..2b51fb37cb1d
--- /dev/null
+++ b/autodoc/inc/ary/entity.hxx
@@ -0,0 +1,81 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_ENTITY_HXX
+#define ARY_ENTITY_HXX
+
+// BASE CLASSES
+#include <ary/object.hxx>
+
+
+
+
+namespace ary
+{
+
+
+/** Interface for every class, whose objects are searchable within the
+ Autodoc Repository by an id.
+
+ @todo
+ Possibly make ->Set_Id() less public accessible.
+*/
+class Entity : public Object
+{
+ public:
+ virtual ~Entity() {}
+
+ Rid Id() const;
+
+ /// @attention Must be used only by ->ary::stg::Storage<>
+ void Set_Id(
+ Rid i_nId );
+ protected:
+ Entity() : nId(0) {}
+ private:
+ // DATA
+ Rid nId;
+};
+
+
+inline Rid
+Entity::Id() const
+{
+ return nId;
+}
+
+inline void
+Entity::Set_Id(Rid i_nId)
+{
+ nId = i_nId;
+}
+
+
+
+
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/getncast.hxx b/autodoc/inc/ary/getncast.hxx
new file mode 100644
index 000000000000..01b286fe1a0a
--- /dev/null
+++ b/autodoc/inc/ary/getncast.hxx
@@ -0,0 +1,88 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_GETNCAST_HXX
+#define ARY_GETNCAST_HXX
+
+
+// USED SERVICES
+#include <ary/object.hxx>
+
+
+
+
+namespace ary
+{
+
+
+template <class DEST>
+inline bool
+is_type(const ary::Object & i_obj)
+{
+ return i_obj.AryClass() == DEST::class_id;
+}
+
+
+template <class DEST>
+inline const DEST &
+ary_cast( const Object & ce)
+{
+ csv_assert( is_type<DEST>(ce) );
+ return static_cast< const DEST& >(ce);
+}
+
+template <class DEST>
+inline DEST &
+ary_cast( Object & ce)
+{
+ csv_assert( is_type<DEST>(ce) );
+ return static_cast< DEST& >(ce);
+}
+
+template <class DEST>
+inline const DEST *
+ary_cast( const Object * ce)
+{
+ if ( ce ? is_type<DEST>(*ce) : false )
+ return static_cast< const DEST* >(ce);
+ return 0;
+}
+
+template <class DEST>
+inline DEST *
+ary_cast( Object * ce)
+{
+ if ( ce ? is_type<DEST>(*ce) : false )
+ return static_cast< DEST* >(ce);
+ return 0;
+}
+
+
+
+
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/idl/i_attribute.hxx b/autodoc/inc/ary/idl/i_attribute.hxx
new file mode 100644
index 000000000000..1a14f5c6f716
--- /dev/null
+++ b/autodoc/inc/ary/idl/i_attribute.hxx
@@ -0,0 +1,135 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_IDL_I_ATTRIBUTE_HXX
+#define ARY_IDL_I_ATTRIBUTE_HXX
+
+// BASE CLASSES
+#include <ary/idl/i_ce.hxx>
+
+
+
+
+namespace ary
+{
+namespace idl
+{
+namespace ifc_attribute
+{
+ struct attr;
+}
+
+
+
+
+/** @resp
+ Represents an IDL property.
+*/
+class Attribute : public CodeEntity
+{
+ public:
+ enum E_ClassId { class_id = 2014 };
+
+ // LIFECYCLE
+ Attribute(
+ const String & i_sName,
+ Ce_id i_nInterface,
+ Ce_id i_nModule,
+ Type_id i_nType,
+ bool i_bReadonly,
+ bool i_bBound );
+ ~Attribute();
+ // OPERATIONS
+ void Add_GetException(
+ Type_id i_nException );
+ void Add_SetException(
+ Type_id i_nException );
+
+ // INQUIRY
+ Type_id Type() const;
+ bool IsReadonly() const;
+ bool IsBound() const;
+
+ private:
+ // Interface csv::ConstProcessorClient:
+ virtual void do_Accept(
+ csv::ProcessorIfc & io_processor ) const;
+ // Interface ary::Object
+ virtual ClassId get_AryClass() const;
+
+ // Interface CodeEntity
+ virtual const String & inq_LocalName() const;
+ virtual Ce_id inq_NameRoom() const;
+ virtual Ce_id inq_Owner() const;
+ virtual E_SightLevel inq_SightLevel() const;
+
+ // Local
+ typedef std::vector< Type_id > ExceptionList;
+ friend struct ifc_attribute::attr;
+
+ // DATA
+ String sName;
+ Ce_id nOwner;
+ Ce_id nNameRoom;
+
+ Type_id nType;
+ ExceptionList aGetExceptions;
+ ExceptionList aSetExceptions;
+ bool bReadonly;
+ bool bBound;
+};
+
+
+
+
+// IMPLEMENTATION
+inline void
+Attribute::Add_GetException( Type_id i_nException )
+ { aGetExceptions.push_back(i_nException); }
+
+inline void
+Attribute::Add_SetException( Type_id i_nException )
+ { aSetExceptions.push_back(i_nException); }
+
+inline Type_id
+Attribute::Type() const
+ { return nType; }
+
+inline bool
+Attribute::IsReadonly() const
+ { return bReadonly; }
+
+inline bool
+Attribute::IsBound() const
+ { return bBound; }
+
+
+
+
+} // namespace idl
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/idl/i_ce.hxx b/autodoc/inc/ary/idl/i_ce.hxx
new file mode 100644
index 000000000000..1c2414a22023
--- /dev/null
+++ b/autodoc/inc/ary/idl/i_ce.hxx
@@ -0,0 +1,135 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_IDL_I_CE_HXX
+#define ARY_IDL_I_CE_HXX
+
+// BASE CLASSES
+#include <ary/entity.hxx>
+// USED SERVICES
+#include <ary/doc/d_docu.hxx>
+#include <ary/idl/i_ce2s.hxx>
+#include <ary/idl/i_types4idl.hxx>
+
+
+
+
+
+
+namespace ary
+{
+namespace idl
+{
+
+
+/** @resp Base class for all IDL code entities.
+
+ A @->CodeEntity is a namespace, type, data or function, which occures in
+ the parsed UNO IDL code and is described and/or commented within the
+ Autodoc repository.
+
+ This is a storage base class, where more special classes are
+ derived from.
+*/
+class CodeEntity : public ary::Entity
+{
+ public:
+ // LIFECYCLE
+ virtual ~CodeEntity();
+
+ // OPERATION
+
+ // INQUIRY
+ Ce_id CeId() const { return Ce_id(Id()); }
+ const String & LocalName() const;
+ Ce_id NameRoom() const;
+ Ce_id Owner() const;
+ E_SightLevel SightLevel() const;
+
+ const ary::doc::Documentation &
+ Docu() const;
+ const Ce_2s & Secondaries() const;
+
+ static const CodeEntity &
+ Null_();
+ // ACCESS
+ void Set_Docu(
+ DYN ary::doc::Node &
+ pass_data );
+ Ce_2s & Secondaries();
+
+ protected:
+ CodeEntity();
+ private:
+ // Locals
+ virtual const String & inq_LocalName() const = 0;
+ virtual Ce_id inq_NameRoom() const = 0;
+ virtual Ce_id inq_Owner() const = 0;
+ virtual E_SightLevel inq_SightLevel() const = 0;
+
+ // DATA
+ ary::doc::Documentation
+ aDocu;
+ Dyn<Ce_2s> p2s;
+};
+
+
+
+
+// IMPLEMENTATION
+inline const String &
+CodeEntity::LocalName() const
+ { return inq_LocalName(); }
+
+inline Ce_id
+CodeEntity::NameRoom() const
+ { return inq_NameRoom(); }
+
+inline Ce_id
+CodeEntity::Owner() const
+ { return inq_Owner(); }
+
+inline E_SightLevel
+CodeEntity::SightLevel() const
+ { return inq_SightLevel(); }
+
+inline const ary::doc::Documentation &
+CodeEntity::Docu() const
+ { return aDocu; }
+
+inline void
+CodeEntity::Set_Docu(DYN ary::doc::Node & pass_data)
+{
+ aDocu.Set_Data(pass_data);
+}
+
+
+
+
+} // namespace idl
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/idl/i_ce2s.hxx b/autodoc/inc/ary/idl/i_ce2s.hxx
new file mode 100644
index 000000000000..f3b3140f48c3
--- /dev/null
+++ b/autodoc/inc/ary/idl/i_ce2s.hxx
@@ -0,0 +1,95 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_IDL_I_CE2S_HXX
+#define ARY_IDL_I_CE2S_HXX
+
+
+// USED SERVICES
+ // BASE CLASSES
+ // COMPONENTS
+ // PARAMETERS
+#include <ary/idl/i_types4idl.hxx>
+
+
+namespace ary
+{
+
+namespace idl
+{
+
+
+
+/** Abstract base for all secondary productions of code entities
+*/
+class Ce_2s
+{
+ public:
+ // LIFECYCLE
+ virtual ~Ce_2s();
+
+ static DYN Ce_2s * Create_(
+ ClassId i_nCeClass );
+ // OPERATIONS
+ void Add_Link2DescriptionInManual(
+ const String & i_link,
+ const String & i_linkUI )
+ { aDescriptionsInManual.push_back(i_link); aDescriptionsInManual.push_back(i_linkUI); }
+ void Add_Link2RefInManual(
+ const String & i_link,
+ const String & i_linkUI )
+ { aRefsInManual.push_back(i_link); aRefsInManual.push_back(i_linkUI); }
+ std::vector<Ce_id> &
+ Access_List(
+ int i_indexOfList );
+ // INQUIRY
+ const StringVector &
+ Links2DescriptionInManual() const
+ { return aDescriptionsInManual; }
+ const StringVector &
+ Links2RefsInManual() const
+ { return aRefsInManual; }
+ int CountXrefLists() const { return aXrefLists.size(); }
+ const std::vector<Ce_id> &
+ List(
+ int i_indexOfList ) const;
+ private:
+ typedef DYN std::vector<Ce_id> * ListPtr;
+
+ // DATA
+ StringVector aDescriptionsInManual;
+ StringVector aRefsInManual;
+ std::vector<ListPtr>
+ aXrefLists;
+};
+
+
+
+
+} // namespace idl
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/idl/i_comrela.hxx b/autodoc/inc/ary/idl/i_comrela.hxx
new file mode 100644
index 000000000000..1e3a040291eb
--- /dev/null
+++ b/autodoc/inc/ary/idl/i_comrela.hxx
@@ -0,0 +1,80 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_IDL_I_COMRELA_HXX
+#define ARY_IDL_I_COMRELA_HXX
+
+// USED SERVICES
+#include <ary/idl/i_types4idl.hxx>
+
+namespace ary
+{
+namespace doc
+{
+ class OldIdlDocu;
+}
+}
+
+
+
+
+namespace ary
+{
+namespace idl
+{
+
+
+/** Contains data for an IDL code entity related to another one like a base of
+ an interface or of a service or the supported interface of a service.
+*/
+class CommentedRelation
+{
+ public:
+ // LIFECYCLE
+
+ CommentedRelation(
+ Type_id i_nType,
+ doc::OldIdlDocu * i_pInfo )
+ : nType(i_nType),
+ pInfo(i_pInfo)
+ {}
+ // INQUIRY
+ Type_id Type() const { return nType; }
+ doc::OldIdlDocu * Info() const { return pInfo; }
+
+ private:
+ // DATA
+ Type_id nType;
+ doc::OldIdlDocu * pInfo;
+};
+
+
+
+
+} // namespace idl
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/idl/i_constant.hxx b/autodoc/inc/ary/idl/i_constant.hxx
new file mode 100644
index 000000000000..f822e780f4d2
--- /dev/null
+++ b/autodoc/inc/ary/idl/i_constant.hxx
@@ -0,0 +1,112 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_IDL_I_CONSTANT_HXX
+#define ARY_IDL_I_CONSTANT_HXX
+
+// BASE CLASSES
+#include <ary/idl/i_ce.hxx>
+
+
+
+
+namespace ary
+{
+namespace idl
+{
+namespace ifc_constant
+{
+ struct attr;
+}
+
+
+/** Represents an IDL constant.
+*/
+class Constant : public CodeEntity
+{
+ public:
+ enum E_ClassId { class_id = 2012 };
+
+ // LIFECYCLE
+ Constant(
+ const String & i_sName,
+ Ce_id i_nOwner,
+ Ce_id i_nNameRoom,
+ Type_id i_nType,
+ const String & i_sInitValue );
+ ~Constant();
+ // INQUIRY
+ Type_id Type() const;
+ const String & Value() const;
+
+
+ private:
+ // Interface csv::ConstProcessorClient:
+ virtual void do_Accept(
+ csv::ProcessorIfc & io_processor ) const;
+ // Interface ary::Object
+ virtual ClassId get_AryClass() const;
+
+ // Interface CodeEntity
+ virtual const String & inq_LocalName() const;
+ virtual Ce_id inq_NameRoom() const;
+ virtual Ce_id inq_Owner() const;
+ virtual E_SightLevel inq_SightLevel() const;
+
+ friend struct ifc_constant::attr;
+
+ // DATA
+ String sName;
+ Ce_id nNameRoom;
+ Ce_id nOwner;
+
+ Type_id nType;
+ String sInitValue;
+};
+
+
+
+
+// IMPLEMENTATION
+inline Type_id
+Constant::Type() const
+{
+ return nType;
+}
+
+inline const String &
+Constant::Value() const
+{
+ return sInitValue;
+}
+
+
+
+
+} // namespace idl
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/idl/i_constgroup.hxx b/autodoc/inc/ary/idl/i_constgroup.hxx
new file mode 100644
index 000000000000..961daf6678ab
--- /dev/null
+++ b/autodoc/inc/ary/idl/i_constgroup.hxx
@@ -0,0 +1,101 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_IDL_I_CONSTGROUP_HXX
+#define ARY_IDL_I_CONSTGROUP_HXX
+
+// BASE CLASSES
+#include <ary/idl/i_ce.hxx>
+
+
+
+
+namespace ary
+{
+namespace idl
+{
+namespace ifc_constgroup
+{
+ struct attr;
+}
+
+
+/** Represents an IDL constants group.
+*/
+class ConstantsGroup : public CodeEntity
+{
+ public:
+ enum E_ClassId { class_id = 2011 };
+
+ // LIFECYCLE
+ ConstantsGroup(
+ const String & i_sName,
+ Ce_id i_nModule );
+ ~ConstantsGroup();
+ // ACCESS
+ void Add_Constant(
+ Ce_id i_nConstant );
+ private:
+ // Interface csv::ConstProcessorClient:
+ virtual void do_Accept(
+ csv::ProcessorIfc & io_processor ) const;
+ // Interface ary::Object
+ virtual ClassId get_AryClass() const;
+
+ // Interface CodeEntity
+ virtual const String & inq_LocalName() const;
+ virtual Ce_id inq_NameRoom() const;
+ virtual Ce_id inq_Owner() const;
+ virtual E_SightLevel inq_SightLevel() const;
+
+ // Locals
+ typedef std::vector<Ce_id> ConstantList;
+ friend struct ifc_constgroup::attr;
+
+ // DATA
+ String sName;
+ Ce_id nModule;
+
+ ConstantList aConstants;
+};
+
+
+
+
+// IMPLEMENTATION
+inline void
+ConstantsGroup::Add_Constant( Ce_id i_nConstant )
+{
+ aConstants.push_back(i_nConstant);
+}
+
+
+
+
+} // namespace idl
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/idl/i_enum.hxx b/autodoc/inc/ary/idl/i_enum.hxx
new file mode 100644
index 000000000000..36e1244460dd
--- /dev/null
+++ b/autodoc/inc/ary/idl/i_enum.hxx
@@ -0,0 +1,100 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_IDL_I_ENUM_HXX
+#define ARY_IDL_I_ENUM_HXX
+
+// BASE CLASSES
+#include <ary/idl/i_ce.hxx>
+
+
+
+
+namespace ary
+{
+namespace idl
+{
+namespace ifc_enum
+{
+ struct attr;
+}
+
+
+/** Represents an IDL enum.
+*/
+class Enum : public CodeEntity
+{
+ public:
+ enum E_ClassId { class_id = 2005 };
+ // LIFECYCLE
+ Enum(
+ const String & i_sName,
+ Ce_id i_nOwner );
+ ~Enum();
+ // ACCESS
+ void Add_Value(
+ Ce_id i_nValue );
+ private:
+ // Interface csv::ConstProcessorClient:
+ virtual void do_Accept(
+ csv::ProcessorIfc & io_processor ) const;
+ // Interface ary::Object
+ virtual ClassId get_AryClass() const;
+
+ // Interface CodeEntity
+ virtual const String & inq_LocalName() const;
+ virtual Ce_id inq_NameRoom() const;
+ virtual Ce_id inq_Owner() const;
+ virtual E_SightLevel inq_SightLevel() const;
+
+ // Locals
+ typedef std::vector<Ce_id> ValueList;
+ friend struct ifc_enum::attr;
+
+ // DATA
+ String sName;
+ Ce_id nOwner;
+
+ ValueList aValues;
+};
+
+
+
+
+// IMPLEMENTATION
+inline void
+Enum::Add_Value( Ce_id i_nValue )
+{
+ aValues.push_back(i_nValue);
+}
+
+
+
+
+} // namespace idl
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/idl/i_enumvalue.hxx b/autodoc/inc/ary/idl/i_enumvalue.hxx
new file mode 100644
index 000000000000..ea3d1df74c5d
--- /dev/null
+++ b/autodoc/inc/ary/idl/i_enumvalue.hxx
@@ -0,0 +1,103 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_IDL_I_ENUMVALUE_HXX
+#define ARY_IDL_I_ENUMVALUE_HXX
+
+// BASE CLASSES
+#include <ary/idl/i_ce.hxx>
+
+
+
+
+namespace ary
+{
+namespace idl
+{
+namespace ifc_enumvalue
+{
+ struct attr;
+}
+
+
+/** @resp
+ Represents an IDL enum value.
+*/
+class EnumValue : public CodeEntity
+{
+ public:
+ enum E_ClassId { class_id = 2006 };
+
+ // LIFECYCLE
+ EnumValue(
+ const String & i_sName,
+ Ce_id i_nOwner,
+ Ce_id i_nNameRoom,
+ const String & i_sInitValue );
+ ~EnumValue();
+ // INQUIRY
+ const String & Value() const;
+
+ private:
+ // Interface csv::ConstProcessorClient:
+ virtual void do_Accept(
+ csv::ProcessorIfc & io_processor ) const;
+ // Interface ary::Object
+ virtual ClassId get_AryClass() const;
+
+ // Interface CodeEntity
+ virtual const String & inq_LocalName() const;
+ virtual Ce_id inq_NameRoom() const;
+ virtual Ce_id inq_Owner() const;
+ virtual E_SightLevel inq_SightLevel() const;
+
+ friend struct ifc_enumvalue::attr;
+
+ // DATA
+ String sName;
+ Ce_id nOwner;
+ Ce_id nNameRoom;
+
+ String sValue;
+};
+
+
+
+
+// IMPLEMENTATION
+inline const String &
+EnumValue::Value() const
+{
+ return sValue;
+}
+
+
+
+
+} // namespace idl
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/idl/i_exception.hxx b/autodoc/inc/ary/idl/i_exception.hxx
new file mode 100644
index 000000000000..bed245e884c7
--- /dev/null
+++ b/autodoc/inc/ary/idl/i_exception.hxx
@@ -0,0 +1,107 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_IDL_I_EXCEPTION_HXX
+#define ARY_IDL_I_EXCEPTION_HXX
+
+// BASE CLASSES
+#include <ary/idl/i_ce.hxx>
+
+
+
+
+namespace ary
+{
+namespace idl
+{
+namespace ifc_exception
+{
+ struct attr;
+}
+
+
+/** Represents an IDL exception.
+*/
+class Exception : public CodeEntity
+{
+ public:
+ enum E_ClassId { class_id = 2010 };
+
+ // LIFECYCLE
+ Exception(
+ const String & i_sName,
+ Ce_id i_nOwner,
+ Type_id i_nBase );
+ ~Exception();
+ // INQUIRY
+ Type_id Base() const { return nBase; }
+
+ // ACCESS
+ void Add_Member(
+ Ce_id i_nMember );
+
+ private:
+ // Interface csv::ConstProcessorClient:
+ virtual void do_Accept(
+ csv::ProcessorIfc & io_processor ) const;
+ // Interface ary::Object:
+ virtual ClassId get_AryClass() const;
+
+ // Interface CodeEntity
+ virtual const String & inq_LocalName() const;
+ virtual Ce_id inq_NameRoom() const;
+ virtual Ce_id inq_Owner() const;
+ virtual E_SightLevel inq_SightLevel() const;
+
+ // Locals
+ typedef std::vector<Ce_id> ElementList;
+ friend struct ifc_exception::attr;
+
+ // DATA
+ String sName;
+ Ce_id nOwner;
+
+ Type_id nBase;
+ ElementList aElements;
+};
+
+
+
+
+// IMPLEMENTATION
+inline void
+Exception::Add_Member( Ce_id i_nMember )
+{
+ aElements.push_back(i_nMember);
+}
+
+
+
+
+} // namespace idl
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/idl/i_function.hxx b/autodoc/inc/ary/idl/i_function.hxx
new file mode 100644
index 000000000000..45cac1ffc55a
--- /dev/null
+++ b/autodoc/inc/ary/idl/i_function.hxx
@@ -0,0 +1,160 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_IDL_I_FUNCTION_HXX
+#define ARY_IDL_I_FUNCTION_HXX
+
+// BASE CLASSES
+#include <ary/idl/i_ce.hxx>
+
+// USED SERVICES
+#include <ary/idl/i_param.hxx>
+#include <ary/idl/ik_function.hxx>
+#include <ary/stdconstiter.hxx>
+
+
+
+
+namespace ary
+{
+namespace idl
+{
+
+
+/** Represents an IDL function.
+
+ Special case constructor:
+ Constructors have return type "0".
+*/
+class Function : public CodeEntity
+{
+ public:
+ enum E_ClassId { class_id = 2002 };
+
+ typedef std::vector< Parameter > ParamList;
+ typedef std::vector< Type_id > ExceptionList;
+
+ // LIFECYCLE
+ /// Normal function
+ Function(
+ const String & i_sName,
+ Ce_id i_nOwner,
+ Ce_id i_nNameRoom,
+ Type_id i_nReturnType,
+ bool i_bOneWay );
+ /// Constructor
+ Function(
+ const String & i_sName,
+ Ce_id i_nOwner,
+ Ce_id i_nNameRoom );
+ ~Function();
+
+ // OPERATIONS
+ void Add_Parameter(
+ const String & i_sName,
+ Type_id i_nType,
+ E_ParameterDirection
+ i_eDirection );
+ /// The function's parameter list ends with the ellipse "..." .
+ void Set_Ellipse();
+ void Add_Exception(
+ Type_id i_nException );
+
+ // INQUIRY
+ Type_id ReturnType() const;
+ const ParamList & Parameters() const { return aParameters; }
+ const ExceptionList &
+ Exceptions() const { return aExceptions; }
+ bool IsOneway() const;
+ bool HasEllipse() const { return bEllipse; }
+
+ private:
+ // Interface csv::ConstProcessorClient:
+ virtual void do_Accept(
+ csv::ProcessorIfc & io_processor ) const;
+ // Interface ary::Object:
+ virtual ClassId get_AryClass() const;
+
+ // Interface CodeEntity
+ virtual const String & inq_LocalName() const;
+ virtual Ce_id inq_NameRoom() const;
+ virtual Ce_id inq_Owner() const;
+ virtual E_SightLevel inq_SightLevel() const;
+
+ // Locals
+ friend struct ifc_function::attr;
+
+ // DATA
+ String sName;
+ Ce_id nOwner;
+ Ce_id nNameRoom;
+
+ Type_id nReturnType;
+ ParamList aParameters;
+ ExceptionList aExceptions;
+ bool bOneWay;
+ bool bEllipse;
+};
+
+
+
+
+// IMPLEMENTATION
+inline void
+Function::Add_Parameter( const String & i_sName,
+ Type_id i_nType,
+ E_ParameterDirection i_eDirection )
+{
+ aParameters.push_back( Parameter(i_sName,i_nType,i_eDirection) );
+}
+
+inline void
+Function::Set_Ellipse()
+{
+ bEllipse = true;
+}
+
+inline void
+Function::Add_Exception( Type_id i_nException )
+{
+ aExceptions.push_back(i_nException);
+}
+
+inline Type_id
+Function::ReturnType() const
+ { return nReturnType; }
+
+inline bool
+Function::IsOneway() const
+ { return bOneWay; }
+
+
+
+
+} // namespace idl
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/idl/i_gate.hxx b/autodoc/inc/ary/idl/i_gate.hxx
new file mode 100644
index 000000000000..923ee68998a3
--- /dev/null
+++ b/autodoc/inc/ary/idl/i_gate.hxx
@@ -0,0 +1,83 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_IDL_I_GATE_HXX
+#define ARY_IDL_I_GATE_HXX
+
+// USED SERVICES
+
+namespace autodoc
+{
+ class Options;
+}
+namespace ary
+{
+namespace idl
+{
+ class CePilot;
+ class TypePilot;
+}
+}
+
+
+
+
+namespace ary
+{
+namespace idl
+{
+
+
+/** Main entry to access the IDL parts of the repository.
+*/
+class Gate
+{
+ public:
+ // LIFECYCLE
+ virtual ~Gate() {}
+
+ // OPERATIONS
+ virtual void Calculate_AllSecondaryInformation(
+ const String & i_devman_reffilepath ) = 0;
+// const ::autodoc::Options &
+// i_options ) = 0;
+ // INQUIRY
+ virtual const CePilot &
+ Ces() const = 0;
+ virtual const TypePilot &
+ Types() const = 0;
+ // ACCESS
+ virtual CePilot & Ces() = 0;
+ virtual TypePilot & Types() = 0;
+};
+
+
+
+
+} // namespace idl
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/idl/i_interface.hxx b/autodoc/inc/ary/idl/i_interface.hxx
new file mode 100644
index 000000000000..4c68d1703b1b
--- /dev/null
+++ b/autodoc/inc/ary/idl/i_interface.hxx
@@ -0,0 +1,127 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_IDL_I_INTERFACE_HXX
+#define ARY_IDL_I_INTERFACE_HXX
+
+// BASE CLASSES
+#include <ary/idl/i_ce.hxx>
+
+// USED SERVICES
+#include <ary/idl/i_comrela.hxx>
+#include <ary/stdconstiter.hxx>
+
+
+
+
+namespace ary
+{
+namespace idl
+{
+namespace ifc_interface
+{
+ struct attr;
+}
+ class Interface_2s;
+
+
+/** Represents an IDL interface.
+*/
+class Interface : public CodeEntity
+{
+ public:
+ enum E_ClassId { class_id = 2001 };
+
+ // LIFECYCLE
+ Interface(
+ const String & i_sName,
+ Ce_id i_nOwner );
+ ~Interface();
+ // INQUIRY
+ bool HasBase() const;
+
+ // ACCESS
+ void Add_Function(
+ Ce_id i_nId );
+ void Add_Attribute(
+ Ce_id i_nId );
+ void Add_Base(
+ Type_id i_nInterface,
+ DYN doc::OldIdlDocu *
+ pass_dpDocu );
+
+ private:
+ // Interface csv::ConstProcessorClient:
+ virtual void do_Accept(
+ csv::ProcessorIfc & io_processor ) const;
+ // Interface ary::Object:
+ virtual ClassId get_AryClass() const;
+
+ // Interface CodeEntity:
+ virtual const String & inq_LocalName() const;
+ virtual Ce_id inq_NameRoom() const;
+ virtual Ce_id inq_Owner() const;
+ virtual E_SightLevel inq_SightLevel() const;
+
+ // Local
+ typedef std::vector< CommentedRelation > RelationList;
+ typedef std::vector<Ce_id> MemberList;
+ friend struct ifc_interface::attr;
+
+ // DATA
+ String sName;
+ Ce_id nOwner;
+ RelationList aBases;
+ MemberList aFunctions;
+ MemberList aAttributes;
+ Dyn<Interface_2s> p2s;
+};
+
+
+
+
+// IMPLEMENTATION
+inline bool
+Interface::HasBase() const
+ { return aBases.size() > 0; }
+inline void
+Interface::Add_Function( Ce_id i_nId )
+ { aFunctions.push_back(i_nId); }
+inline void
+Interface::Add_Attribute( Ce_id i_nId )
+ { aAttributes.push_back(i_nId); }
+inline void
+Interface::Add_Base( Type_id i_nInterface,
+ DYN doc::OldIdlDocu * pass_dpDocu )
+ { aBases.push_back( CommentedRelation(i_nInterface, pass_dpDocu) ); }
+
+
+
+
+} // namespace idl
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/idl/i_module.hxx b/autodoc/inc/ary/idl/i_module.hxx
new file mode 100644
index 000000000000..feaa520faa3a
--- /dev/null
+++ b/autodoc/inc/ary/idl/i_module.hxx
@@ -0,0 +1,114 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_IDL_I_MODULE_HXX
+#define ARY_IDL_I_MODULE_HXX
+
+// BASE CLASSES
+#include <ary/idl/i_ce.hxx>
+
+// USED SERVICES
+#include <ary/stdconstiter.hxx>
+
+
+
+
+namespace ary
+{
+ template <class> class NameTreeNode;
+
+namespace idl
+{
+namespace ifc_module
+{
+ struct attr;
+}
+ class Gate;
+
+
+/** Represents an IDL module.
+
+ "Name" in methods means all code entities which belong into
+ this namespace (not in a subnamespace of this one), but not
+ to the subnamespaces.
+
+ "SubNamespace" in method names refers to all direct subnamespaces.
+*/
+class Module : public CodeEntity
+{
+ public:
+ enum E_ClassId { class_id = 2000 };
+
+ // LIFECYCLE
+ Module();
+ Module(
+ const String & i_sName,
+ const Module & i_rParent );
+ ~Module();
+ // OPERATIONS
+ void Add_Name(
+ const String & i_sName,
+ Ce_id i_nId );
+ // INQUIRY
+ Ce_id Search_Name(
+ const String & i_sName ) const;
+ void Get_Names(
+ Dyn_StdConstIterator<Ce_id> &
+ o_rResult ) const;
+ private:
+ // Interface csv::ConstProcessorClient:
+ virtual void do_Accept(
+ csv::ProcessorIfc & io_processor ) const;
+ // Interface ary::Object:
+ virtual ClassId get_AryClass() const;
+
+ // Interface CodeEntity
+ virtual const String & inq_LocalName() const;
+ virtual Ce_id inq_NameRoom() const;
+ virtual Ce_id inq_Owner() const;
+ virtual E_SightLevel inq_SightLevel() const;
+
+ friend struct ifc_module::attr;
+
+ // DATA
+ Dyn< NameTreeNode<Ce_id> >
+ pImpl;
+};
+
+
+inline bool
+is_Module( const CodeEntity & i_rCe )
+{
+ return i_rCe.AryClass() == Module::class_id;
+}
+
+
+
+
+} // namespace idl
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/idl/i_namelookup.hxx b/autodoc/inc/ary/idl/i_namelookup.hxx
new file mode 100644
index 000000000000..917c36f8e9d6
--- /dev/null
+++ b/autodoc/inc/ary/idl/i_namelookup.hxx
@@ -0,0 +1,95 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_IDL_I_NAMELOOKUP_HXX
+#define ARY_IDL_I_NAMELOOKUP_HXX
+
+// BASE CLASSES
+#include <ary/idl/i_types4idl.hxx>
+
+// USED SERVICES
+#include <ary/stdconstiter.hxx>
+#include <ary/itrange.hxx>
+#include <vector>
+#include <map>
+
+
+
+
+namespace ary
+{
+namespace idl
+{
+
+
+/** This class finds all occurrences in the current language of a
+ name in the repository.
+*/
+class NameLookup
+{
+ public:
+ struct NameProperties
+ {
+ NameProperties()
+ : nId(0),
+ nClass(0),
+ nOwner(0) {}
+ NameProperties(
+ Ce_id i_id,
+ ClassId i_class,
+ Ce_id i_owner )
+ : nId(i_id),
+ nClass(i_class),
+ nOwner(i_owner) {}
+ Ce_id nId;
+ ClassId nClass;
+ Ce_id nOwner;
+ };
+
+ /// Map from Name to NameProperties.
+ typedef std::multimap<String, NameProperties> Map_Names;
+
+ // LIFECYCLE
+ NameLookup();
+ ~NameLookup();
+ // OPERATIONS
+ void Add_Name(
+ const String & i_name,
+ Ce_id i_id,
+ ClassId i_class,
+ Ce_id i_owner );
+ private:
+ // DATA
+ Map_Names aNames;
+};
+
+
+
+
+} // namespace idl
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/idl/i_param.hxx b/autodoc/inc/ary/idl/i_param.hxx
new file mode 100644
index 000000000000..726a1403f29a
--- /dev/null
+++ b/autodoc/inc/ary/idl/i_param.hxx
@@ -0,0 +1,75 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_IDL_I_PARAM_HXX
+#define ARY_IDL_I_PARAM_HXX
+
+// BASE CLASSES
+#include <ary/idl/i_types4idl.hxx>
+
+
+
+
+namespace ary
+{
+namespace idl
+{
+
+
+/** Represents a parameter in an IDL function.
+*/
+class Parameter
+{
+ public:
+ // LIFECYCLE
+ Parameter(
+ const String & i_sName,
+ Type_id i_nType,
+ E_ParameterDirection
+ i_eDirection );
+ ~Parameter();
+
+ // INQUIRY
+ const String & Name() const { return sName; }
+ Type_id Type() const { return nType; }
+ E_ParameterDirection
+ Direction() const { return eDirection; }
+
+ private:
+ // DATA
+ String sName;
+ Type_id nType;
+ E_ParameterDirection
+ eDirection;
+};
+
+
+
+
+} // namespace idl
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/idl/i_property.hxx b/autodoc/inc/ary/idl/i_property.hxx
new file mode 100644
index 000000000000..b0a5739dd6ab
--- /dev/null
+++ b/autodoc/inc/ary/idl/i_property.hxx
@@ -0,0 +1,143 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_IDL_I_PROPERTY_HXX
+#define ARY_IDL_I_PROPERTY_HXX
+
+// BASE CLASSES
+#include <ary/idl/i_ce.hxx>
+
+
+
+
+namespace ary
+{
+namespace idl
+{
+namespace ifc_property
+{
+ struct attr;
+}
+
+
+/** Represents an IDL property.
+*/
+class Property : public CodeEntity
+{
+ public:
+ enum E_ClassId { class_id = 2004 };
+
+ class Stereotypes
+ {
+ public:
+ enum E_Flags
+ {
+ readonly = 1,
+ bound = 2,
+ constrained = 4,
+ maybeambiguous = 8,
+ maybedefault = 16,
+ maybevoid = 32,
+ removable = 64,
+ transient = 128,
+ s_MAX
+ };
+ Stereotypes() : nFlags(0) {}
+
+ bool HasAny() const { return nFlags != 0; }
+ bool IsReadOnly() const { return (nFlags & UINT32(readonly)) != 0; }
+ bool IsBound() const { return (nFlags & UINT32(bound)) != 0; }
+ bool IsConstrained() const
+ { return (nFlags & UINT32(constrained)) != 0; }
+ bool IsMayBeAmbiguous() const
+ { return (nFlags & UINT32(maybeambiguous)) != 0; }
+ bool IsMayBeDefault() const
+ { return (nFlags & UINT32(maybedefault)) != 0; }
+ bool IsMayBeVoid() const { return (nFlags & UINT32(maybevoid)) != 0; }
+ bool IsRemovable() const { return (nFlags & UINT32(removable)) != 0; }
+ bool IsTransient() const { return (nFlags & UINT32(transient)) != 0; }
+
+ void Set_Flag(
+ E_Flags i_flag )
+ { nFlags |= UINT32(i_flag); }
+ private:
+ // DATA
+ UINT32 nFlags;
+ };
+
+
+ // LIFECYCLE
+ Property(
+ const String & i_sName,
+ Ce_id i_nService,
+ Ce_id i_nModule,
+ Type_id i_nType,
+ Stereotypes i_stereotypes );
+ ~Property();
+ // INQUIRY
+ Type_id Type() const;
+
+ private:
+ // Interface csv::ConstProcessorClient:
+ virtual void do_Accept(
+ csv::ProcessorIfc & io_processor ) const;
+ // Interface ary::Object:
+ virtual ClassId get_AryClass() const;
+
+ // Interface CodeEntity
+ virtual const String & inq_LocalName() const;
+ virtual Ce_id inq_NameRoom() const;
+ virtual Ce_id inq_Owner() const;
+ virtual E_SightLevel inq_SightLevel() const;
+
+ friend struct ifc_property::attr;
+
+ // DATA
+ String sName;
+ Ce_id nOwner;
+ Ce_id nNameRoom;
+
+ Type_id nType;
+ Stereotypes aStereotypes;
+};
+
+
+
+
+// IMPLEMENTATION
+inline Type_id
+Property::Type() const
+{
+ return nType;
+}
+
+
+
+
+} // namespace idl
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/idl/i_service.hxx b/autodoc/inc/ary/idl/i_service.hxx
new file mode 100644
index 000000000000..a1cdb400dcda
--- /dev/null
+++ b/autodoc/inc/ary/idl/i_service.hxx
@@ -0,0 +1,139 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_IDL_I_SERVICE_HXX
+#define ARY_IDL_I_SERVICE_HXX
+
+// BASE CLASSES
+#include <ary/idl/i_ce.hxx>
+
+// USED SERVICES
+#include <ary/idl/i_comrela.hxx>
+#include <ary/stdconstiter.hxx>
+#include <ary/idl/ik_service.hxx>
+
+
+
+
+namespace ary
+{
+namespace info
+{
+ class CodeInformation;
+}
+namespace idl
+{
+namespace ifc_service
+{
+ struct attr;
+}
+
+
+/** Represents an IDL service.
+*/
+class Service : public CodeEntity
+{
+ public:
+ enum E_ClassId { class_id = 2003 }; // See reposy.cxx
+
+ // LIFECYCLE
+ Service(
+ const String & i_sName,
+ Ce_id i_nOwner );
+ ~Service();
+
+ // INQUIRY
+ void Get_SupportedInterfaces(
+ Dyn_StdConstIterator<CommentedRelation> &
+ o_rResult ) const;
+ void Get_IncludedServices(
+ Dyn_StdConstIterator<CommentedRelation> &
+ o_rResult ) const;
+
+ // ACCESS
+ void Add_Property(
+ Ce_id i_nProperty );
+ void AddRef_IncludedService(
+ Type_id i_nService,
+ DYN doc::OldIdlDocu *
+ pass_dpDocu );
+ void AddRef_SupportedInterface(
+ Type_id i_nInterface,
+ DYN doc::OldIdlDocu *
+ pass_dpDocu );
+ private:
+ // Interface csv::ConstProcessorClient:
+ virtual void do_Accept(
+ csv::ProcessorIfc & io_processor ) const;
+ // Interface ary::Object:
+ virtual ClassId get_AryClass() const;
+
+ // Interface CodeEntity
+ virtual const String & inq_LocalName() const;
+ virtual Ce_id inq_NameRoom() const;
+ virtual Ce_id inq_Owner() const;
+ virtual E_SightLevel inq_SightLevel() const;
+
+ // Locals
+ typedef std::vector< CommentedRelation > RelationList;
+ typedef std::vector<Ce_id> PropertyList;
+ friend struct ifc_service::attr;
+
+ // DATA
+ String sName;
+ Ce_id nOwner;
+
+ RelationList aIncludedServices;
+ RelationList aSupportedInterfaces;
+ PropertyList aProperties;
+};
+
+
+
+
+// IMPLEMENTATION
+inline void
+Service::Add_Property( Ce_id i_nProperty )
+ { aProperties.push_back(i_nProperty); }
+
+inline void
+Service::AddRef_IncludedService( Type_id i_nService,
+ DYN doc::OldIdlDocu * pass_dpDocu )
+ { aIncludedServices.push_back( CommentedRelation(i_nService, pass_dpDocu) ); }
+
+inline void
+Service::AddRef_SupportedInterface( Type_id i_nInterface,
+ DYN doc::OldIdlDocu * pass_dpDocu )
+ { aSupportedInterfaces.push_back( CommentedRelation(i_nInterface, pass_dpDocu) ); }
+
+
+
+
+
+} // namespace idl
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/idl/i_singleton.hxx b/autodoc/inc/ary/idl/i_singleton.hxx
new file mode 100644
index 000000000000..dbfca6d93087
--- /dev/null
+++ b/autodoc/inc/ary/idl/i_singleton.hxx
@@ -0,0 +1,105 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_IDL_I_SINGLETON_HXX
+#define ARY_IDL_I_SINGLETON_HXX
+
+// BASE CLASSES
+#include <ary/idl/i_ce.hxx>
+
+
+
+
+namespace ary
+{
+namespace idl
+{
+namespace ifc_singleton
+{
+ struct attr;
+}
+
+
+/** Represents an IDL singleton.
+*/
+class Singleton : public CodeEntity
+{
+ public:
+ enum E_ClassId { class_id = 2013 };
+
+ // LIFECYCLE
+ Singleton(
+ const String & i_sName,
+ Ce_id i_nOwner );
+ ~Singleton();
+ // INQUIRY
+ Type_id AssociatedService() const
+ { return nService; }
+
+ // ACCESS
+ void Set_Service(
+ Type_id i_nService );
+ private:
+ // Interface csv::ConstProcessorClient:
+ virtual void do_Accept(
+ csv::ProcessorIfc & io_processor ) const;
+ // Interface ary::Object:
+ virtual ClassId get_AryClass() const;
+
+ // Interface CodeEntity
+ virtual const String & inq_LocalName() const;
+ virtual Ce_id inq_NameRoom() const;
+ virtual Ce_id inq_Owner() const;
+ virtual E_SightLevel inq_SightLevel() const;
+
+ // Locals
+ friend struct ifc_singleton::attr;
+
+ // DATA
+ String sName;
+ Ce_id nOwner;
+
+ Type_id nService;
+};
+
+
+
+
+
+// IMPLEMENTATION
+inline void
+Singleton::Set_Service( Type_id i_nService )
+{
+ nService = i_nService;
+}
+
+
+
+
+} // namespace idl
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/idl/i_siservice.hxx b/autodoc/inc/ary/idl/i_siservice.hxx
new file mode 100644
index 000000000000..c38e90610a74
--- /dev/null
+++ b/autodoc/inc/ary/idl/i_siservice.hxx
@@ -0,0 +1,107 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_IDL_I_SISERVICE_HXX
+#define ARY_IDL_I_SISERVICE_HXX
+
+// BASE CLASSES
+#include <ary/idl/i_ce.hxx>
+
+
+
+
+namespace ary
+{
+namespace idl
+{
+namespace ifc_sglifcservice
+{
+ struct attr;
+}
+
+
+/** Represents an IDL single interface service.
+*/
+class SglIfcService : public CodeEntity
+{
+ public:
+ enum E_ClassId { class_id = 2015 }; // See reposy.cxx
+
+ // LIFECYCLE
+ SglIfcService(
+ const String & i_sName,
+ Ce_id i_nOwner,
+ Type_id i_nBaseInterface );
+ ~SglIfcService();
+ // ACCESS
+ void Add_Constructor(
+ Ce_id i_nId );
+
+ // INFO
+ Type_id BaseInterface() const { return nBaseInterface; }
+
+ private:
+ // Interface csv::ConstProcessorClient:
+ virtual void do_Accept(
+ csv::ProcessorIfc & io_processor ) const;
+ // Interface ary::Object:
+ virtual ClassId get_AryClass() const;
+
+ // Interface CodeEntity:
+ virtual const String & inq_LocalName() const;
+ virtual Ce_id inq_NameRoom() const;
+ virtual Ce_id inq_Owner() const;
+ virtual E_SightLevel inq_SightLevel() const;
+
+ // Local
+ typedef std::vector<Ce_id> CtorList;
+ friend struct ifc_sglifcservice::attr;
+
+ // DATA
+ String sName;
+ Ce_id nOwner;
+ Type_id nBaseInterface;
+
+ CtorList aConstructors;
+};
+
+
+
+
+// IMPLEMENTATION
+inline void
+SglIfcService::Add_Constructor( Ce_id i_nId )
+{
+ aConstructors.push_back(i_nId);
+}
+
+
+
+
+} // namespace idl
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/idl/i_sisingleton.hxx b/autodoc/inc/ary/idl/i_sisingleton.hxx
new file mode 100644
index 000000000000..6dd288c048d3
--- /dev/null
+++ b/autodoc/inc/ary/idl/i_sisingleton.hxx
@@ -0,0 +1,100 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_IDL_I_SISINGLETON_HXX
+#define ARY_IDL_I_SISINGLETON_HXX
+
+// BASE CLASSES
+#include <ary/idl/i_ce.hxx>
+
+
+
+
+namespace ary
+{
+namespace idl
+{
+namespace ifc_sglifcsingleton
+{
+ struct attr;
+}
+
+
+/** Represents an IDL interface.
+*/
+class SglIfcSingleton : public CodeEntity
+{
+ public:
+ enum E_ClassId { class_id = 2016 }; // See reposy.cxx
+
+ // LIFECYCLE
+ SglIfcSingleton(
+ const String & i_sName,
+ Ce_id i_nOwner,
+ Type_id i_nBaseInterface );
+ ~SglIfcSingleton();
+ // INQUIRY
+ Type_id BaseInterface() const;
+
+ private:
+ // Interface csv::ConstProcessorClient:
+ virtual void do_Accept(
+ csv::ProcessorIfc & io_processor ) const;
+ // Interface ary::Object:
+ virtual ClassId get_AryClass() const;
+
+ // Interface CodeEntity:
+ virtual const String & inq_LocalName() const;
+ virtual Ce_id inq_NameRoom() const;
+ virtual Ce_id inq_Owner() const;
+ virtual E_SightLevel inq_SightLevel() const;
+
+ // Local
+ friend struct ifc_sglifcsingleton::attr;
+
+ // DATA
+ String sName;
+ Ce_id nOwner;
+ Type_id nBaseInterface;
+};
+
+
+
+
+// IMPLEMENTATION
+inline Type_id
+SglIfcSingleton::BaseInterface() const
+{
+ return nBaseInterface;
+}
+
+
+
+
+} // namespace idl
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/idl/i_struct.hxx b/autodoc/inc/ary/idl/i_struct.hxx
new file mode 100644
index 000000000000..c73eb1517f7b
--- /dev/null
+++ b/autodoc/inc/ary/idl/i_struct.hxx
@@ -0,0 +1,130 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_IDL_I_STRUCT_HXX
+#define ARY_IDL_I_STRUCT_HXX
+
+// BASE CLASSES
+#include <ary/idl/i_ce.hxx>
+
+
+
+
+namespace ary
+{
+namespace idl
+{
+namespace ifc_struct
+{
+ struct attr;
+}
+
+
+/** Represents an IDL struct.
+*/
+class Struct : public CodeEntity
+{
+ public:
+ enum E_ClassId { class_id = 2008 };
+
+ // LIFECYCLE
+ Struct(
+ const String & i_sName,
+ Ce_id i_nOwner,
+ Type_id i_nBase,
+ const String & i_sTemplateParameter,
+ Type_id i_nTemplateParameterType );
+ ~Struct();
+ // INQUIRY
+ Type_id Base() const;
+ String TemplateParameter() const;
+ Type_id TemplateParameterType() const;
+
+ // ACCESS
+ void Add_Member(
+ Ce_id i_nMember );
+ private:
+ // Interface csv::ConstProcessorClient:
+ virtual void do_Accept(
+ csv::ProcessorIfc & io_processor ) const;
+ // Interface ary::Object:
+ virtual ClassId get_AryClass() const;
+
+ // Interface CodeEntity
+ virtual const String & inq_LocalName() const;
+ virtual Ce_id inq_NameRoom() const;
+ virtual Ce_id inq_Owner() const;
+ virtual E_SightLevel inq_SightLevel() const;
+
+ // Locals
+ typedef std::vector<Ce_id> ElementList;
+ friend struct ifc_struct::attr;
+
+ // DATA
+ String sName;
+ Ce_id nOwner;
+
+ Type_id nBase;
+ String sTemplateParameter;
+ Type_id nTemplateParameterType;
+ ElementList aElements;
+};
+
+
+
+
+// IMPLEMENTATION
+inline Type_id
+Struct::Base() const
+{
+ return nBase;
+}
+
+inline String
+Struct::TemplateParameter() const
+{
+ return sTemplateParameter;
+}
+
+inline Type_id
+Struct::TemplateParameterType() const
+{
+ return nTemplateParameterType;
+}
+
+inline void
+Struct::Add_Member( Ce_id i_nMember )
+{
+ aElements.push_back(i_nMember);
+}
+
+
+
+
+} // namespace idl
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/idl/i_structelem.hxx b/autodoc/inc/ary/idl/i_structelem.hxx
new file mode 100644
index 000000000000..f7544f027f2d
--- /dev/null
+++ b/autodoc/inc/ary/idl/i_structelem.hxx
@@ -0,0 +1,103 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_IDL_I_STRUCTELEM_HXX
+#define ARY_IDL_I_STRUCTELEM_HXX
+
+// BASE CLASSES
+#include <ary/idl/i_ce.hxx>
+
+
+
+
+namespace ary
+{
+namespace idl
+{
+namespace ifc_structelement
+{
+ struct attr;
+}
+
+
+/** Represents an IDL struct element.
+*/
+class StructElement : public CodeEntity
+{
+ public:
+ enum E_ClassId { class_id = 2009 };
+
+ // LIFECYCLE
+ StructElement(
+ const String & i_sName,
+ Ce_id i_nOwner,
+ Ce_id i_nNameRoom,
+ Type_id i_nType );
+ ~StructElement();
+
+ // INQUIRY
+ Type_id Type() const;
+
+ private:
+ // Interface csv::ConstProcessorClient:
+ virtual void do_Accept(
+ csv::ProcessorIfc & io_processor ) const;
+ // Interface ary::Object:
+ virtual ClassId get_AryClass() const;
+
+ // Interface CodeEntity
+ virtual const String & inq_LocalName() const;
+ virtual Ce_id inq_NameRoom() const;
+ virtual Ce_id inq_Owner() const;
+ virtual E_SightLevel inq_SightLevel() const;
+
+ friend struct ifc_structelement::attr;
+
+ // DATA
+ String sName;
+ Ce_id nOwner;
+ Ce_id nNameRoom;
+
+ Type_id nType;
+};
+
+
+
+
+// IMPLEMENTATION
+inline Type_id
+StructElement::Type() const
+{
+ return nType;
+}
+
+
+
+
+} // namespace idl
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/idl/i_traits.hxx b/autodoc/inc/ary/idl/i_traits.hxx
new file mode 100644
index 000000000000..c34704537794
--- /dev/null
+++ b/autodoc/inc/ary/idl/i_traits.hxx
@@ -0,0 +1,78 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_IDL_I_TRAITS_HXX
+#define ARY_IDL_I_TRAITS_HXX
+
+// USED SERVICES
+#include <ary/idl/i_types4idl.hxx>
+
+
+
+
+namespace ary
+{
+namespace idl
+{
+
+
+/** Basic traits for derivd ones of ->CodeEntity.
+*/
+struct Ce_Traits
+{
+ typedef CodeEntity entity_base_type;
+ typedef Ce_id id_type;
+
+ static entity_base_type &
+ EntityOf_(
+ id_type i_id );
+};
+
+
+/** An instance of COMPARE for ->::ary::SortedIds<>.
+
+ @see ::ary::SortedIds<>
+*/
+struct Ce_Compare : public Ce_Traits
+{
+ typedef String key_type;
+
+ static const key_type &
+ KeyOf_(
+ const entity_base_type &
+ i_entity );
+ static bool Lesser_(
+ const key_type & i_1,
+ const key_type & i_2 );
+};
+
+
+
+
+} // namespace idl
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/idl/i_type.hxx b/autodoc/inc/ary/idl/i_type.hxx
new file mode 100644
index 000000000000..75f9737f1468
--- /dev/null
+++ b/autodoc/inc/ary/idl/i_type.hxx
@@ -0,0 +1,142 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_IDL_I_TYPE_HXX
+#define ARY_IDL_I_TYPE_HXX
+
+// USED SERVICES
+#include <ary/entity.hxx>
+#include <ary/idl/i_types4idl.hxx>
+
+
+
+
+namespace ary
+{
+namespace idl
+{
+ class Gate;
+
+
+/** Abstract base for all secondary productions of types
+*/
+class Type_2s
+{
+ public:
+ virtual ~Type_2s() {}
+
+ static DYN Type_2s *
+ Create_(
+ ClassId i_nCeId );
+};
+
+
+/** Base of all IDL types.
+
+ Type represents the occurence of a type as base,
+ parameter, return type or element type in UNO IDL code.
+ Some of them relate to a ->CodeEntity, but
+ the ->Type "MyInterface" is something different than
+ the ->CodeEntity "MyInterface".
+
+ This is a storage base class, where more special
+ classes are derived from.
+*/
+class Type : public ary::Entity
+{
+ public:
+ typedef Type_2s secondary_productions;
+
+ // LIFECYCLE
+ virtual ~Type() {}
+
+ // INQUIRY
+ Type_id TypeId() const { return Type_id(Id()); }
+
+ /** Does NOT clear the output-parameters.
+
+ @attention
+ If this is a sequence, the text of the first non-sequence, enclosed type
+ is returned.
+ */
+ void Get_Text(
+ StringVector & o_module,
+ String & o_name,
+ Ce_id & o_nRelatedCe,
+ int & o_nSequenceCount,
+ const Gate & i_rGate ) const;
+ const std::vector<Type_id> *
+ TemplateParameters() const;
+ const Type & FirstEnclosedNonSequenceType( /// @return *this, if this is not a ->Sequence.
+ const Gate & i_rGate ) const;
+
+ private:
+ virtual void inq_Get_Text(
+ StringVector & o_module,
+ String & o_name,
+ Ce_id & o_nRelatedCe,
+ int & o_nSequemceCount,
+ const Gate & i_rGate ) const = 0;
+ virtual const std::vector<Type_id> *
+ inq_TemplateParameters() const;
+ virtual const Type &
+ inq_FirstEnclosedNonSequenceType(
+ const Gate & i_rGate ) const;
+};
+
+
+
+
+// IMPLEMENTATION
+inline void
+Type::Get_Text( StringVector & o_module,
+ String & o_name,
+ Ce_id & o_nRelatedCe,
+ int & o_nSequenceCount,
+ const Gate & i_rGate ) const
+{
+ inq_Get_Text(o_module,o_name,o_nRelatedCe,o_nSequenceCount,i_rGate);
+}
+
+inline const std::vector<Type_id> *
+Type::TemplateParameters() const
+{
+ return inq_TemplateParameters();
+}
+
+inline const Type &
+Type::FirstEnclosedNonSequenceType(const Gate & i_rGate) const
+{
+ return inq_FirstEnclosedNonSequenceType(i_rGate);
+}
+
+
+
+
+} // namespace idl
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/idl/i_typedef.hxx b/autodoc/inc/ary/idl/i_typedef.hxx
new file mode 100644
index 000000000000..9d315c2f12d9
--- /dev/null
+++ b/autodoc/inc/ary/idl/i_typedef.hxx
@@ -0,0 +1,90 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_IDL_I_TYPEDEF_HXX
+#define ARY_IDL_I_TYPEDEF_HXX
+
+// BASE CLASSES
+#include <ary/idl/i_ce.hxx>
+
+
+
+
+namespace ary
+{
+namespace idl
+{
+namespace ifc_typedef
+{
+ struct attr;
+}
+
+
+/** Represents an IDL typedef.
+*/
+class Typedef : public CodeEntity
+{
+ public:
+ enum E_ClassId { class_id = 2007 };
+
+ // LIFECYCLE
+ Typedef(
+ const String & i_sName,
+ Ce_id i_nOwner,
+ Type_id i_nDefiningType );
+ ~Typedef();
+
+ Type_id DefiningType() const { return nDefiningType; }
+
+ private:
+ // Interface csv::ConstProcessorClient:
+ virtual void do_Accept(
+ csv::ProcessorIfc & io_processor ) const;
+ // Interface ary::Object:
+ virtual ClassId get_AryClass() const;
+
+ // Interface CodeEntity
+ virtual const String & inq_LocalName() const;
+ virtual Ce_id inq_NameRoom() const;
+ virtual Ce_id inq_Owner() const;
+ virtual E_SightLevel inq_SightLevel() const;
+
+ friend struct ifc_typedef::attr;
+
+ // DATA
+ String sName;
+ Ce_id nOwner;
+
+ Type_id nDefiningType;
+};
+
+
+
+
+} // namespace idl
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/idl/i_types4idl.hxx b/autodoc/inc/ary/idl/i_types4idl.hxx
new file mode 100644
index 000000000000..046b47f4bb0c
--- /dev/null
+++ b/autodoc/inc/ary/idl/i_types4idl.hxx
@@ -0,0 +1,142 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_IDL_I_TYPES4IDL_HXX
+#define ARY_IDL_I_TYPES4IDL_HXX
+
+// USED SERVICES
+#include <ary/types.hxx>
+
+
+
+
+namespace ary
+{
+namespace idl
+{
+ class Module;
+ class CodeEntity;
+ class Type;
+ class Gate;
+ class CePilot;
+ class TypePilot;
+
+
+typedef TypedId<CodeEntity> Ce_id;
+typedef TypedId<Type> Type_id;
+
+
+/** This is used when an ->ary::idl::ExplicitType
+ represents a templated struct and is sorted into the
+ dictionary of an ->ary::idl::XNameRoom.
+ Then local type name and template type id are concatenated
+ to one string with this char as delimiter.
+*/
+const char C_cTemplateDelimiter = '<';
+
+typedef std::vector<Ce_id> Ce_idList;
+
+
+enum E_ParameterDirection
+{
+ param_in,
+ param_out,
+ param_inout
+};
+
+
+enum E_SightLevel
+{
+ sl_Module, // not file bound entities, like modules
+ sl_File, // entities on top level within one file, like interface or enum
+ sl_Member // member entities, like enumvalue or function
+};
+
+inline Ce_id
+Ce_id_Null()
+{
+ return Ce_id(0);
+}
+
+inline void
+NullPush_IdList(Ce_idList * o_pList)
+{
+ if (o_pList)
+ o_pList->push_back( Ce_id_Null() );
+}
+
+inline void
+NullPush_IdList_2(Ce_idList * o_pList)
+{
+ if (o_pList)
+ {
+ o_pList->push_back( Ce_id_Null() );
+ o_pList->push_back( Ce_id_Null() );
+ }
+}
+
+namespace alphabetical_index
+{
+ enum E_Letter
+ {
+ a = int('a'),
+ b,
+ c,
+ d,
+ e,
+ f,
+ g,
+ h,
+ i,
+ j,
+ k,
+ l,
+ m,
+ n,
+ o,
+ p,
+ q,
+ r,
+ s,
+ t,
+ u,
+ v,
+ w,
+ x,
+ y,
+ z,
+ non_alpha = int('_'),
+ MAX
+ };
+}
+
+
+
+
+} // namespace idl
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/idl/ik_attribute.hxx b/autodoc/inc/ary/idl/ik_attribute.hxx
new file mode 100644
index 000000000000..6e8822111d1e
--- /dev/null
+++ b/autodoc/inc/ary/idl/ik_attribute.hxx
@@ -0,0 +1,85 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_IDL_IK_ATTRIBUTE_HXX
+#define ARY_IDL_IK_ATTRIBUTE_HXX
+// KORR_DEPRECATED_3.0
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <ary/idl/ik_ce.hxx>
+ // COMPONENTS
+ // PARAMETERS
+
+
+namespace ary
+{
+namespace idl
+{
+
+namespace ifc_attribute
+{
+
+using ifc_ce::DocText;
+using ::ary::idl::ifc_ce::Dyn_TypeIterator;
+
+
+struct attr: public ifc_ce::attr
+{
+ static bool HasAnyStereotype(
+ const CodeEntity & i_ce );
+ static bool IsReadOnly(
+ const CodeEntity & i_ce );
+ static bool IsBound(
+ const CodeEntity & i_ce );
+ static Type_id Type(
+ const CodeEntity & i_ce );
+ static void Get_GetExceptions(
+ Dyn_TypeIterator & o_result,
+ const CodeEntity & i_ce );
+ static void Get_SetExceptions(
+ Dyn_TypeIterator & o_result,
+ const CodeEntity & i_ce );
+};
+
+struct xref : public ifc_ce::xref
+{
+};
+
+struct doc : public ifc_ce::doc
+{
+};
+
+
+} // namespace ifc_attribute
+
+} // namespace idl
+} // namespace ary
+
+
+#endif
diff --git a/autodoc/inc/ary/idl/ik_ce.hxx b/autodoc/inc/ary/idl/ik_ce.hxx
new file mode 100644
index 000000000000..ffa9363a6543
--- /dev/null
+++ b/autodoc/inc/ary/idl/ik_ce.hxx
@@ -0,0 +1,146 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_IDL_IK_CE_HXX
+#define ARY_IDL_IK_CE_HXX
+// KORR_DEPRECATED_3.0
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+ // COMPONENTS
+ // PARAMETERS
+#include <ary/idl/i_types4idl.hxx>
+#include <ary/stdconstiter.hxx>
+
+namespace ary
+{
+namespace info
+{
+ class Text;
+}
+namespace idl
+{
+
+
+namespace ifc_ce
+{
+
+
+typedef ::ary::Dyn_StdConstIterator<Ce_id> Dyn_CeIterator;
+typedef ::ary::Dyn_StdConstIterator<Type_id> Dyn_TypeIterator;
+typedef ::ary::info::Text DocText;
+
+
+
+struct attr
+{
+ static Ce_id CeId(
+ const CodeEntity & i_ce );
+ static const String &
+ LocalName(
+ const CodeEntity & i_ce );
+ static Ce_id NameRoom(
+ const CodeEntity & i_ce );
+ static Rid Owner(
+ const CodeEntity & i_ce );
+ static E_SightLevel SightLevel(
+ const CodeEntity & i_ce );
+ static bool Search_Member(
+ const CodeEntity & ,
+ const String & )
+ { return true; } // KORR_FUTURE
+};
+
+struct xref
+{
+};
+
+struct doc
+{
+ static const DocText &
+ ShortInfo( /// @return a short description of the CodeEntity
+ const CodeEntity & i_ce );
+
+ static const DocText &
+ TagAuthor(
+ const CodeEntity & i_ce );
+ static const DocText &
+ TagExample(
+ const CodeEntity & i_ce );
+ static const DocText &
+ TagDescr(
+ const CodeEntity & i_ce );
+ static const DocText &
+ TagGuarantees(
+ const CodeEntity & i_ce );
+ static const DocText &
+ TagKey(
+ const CodeEntity & i_ce );
+ static const DocText &
+ TagMissing(
+ const CodeEntity & i_ce );
+ static const DocText &
+ TagSee(
+ const CodeEntity & i_ce );
+ static const DocText &
+ TagShort(
+ const CodeEntity & i_ce );
+ static const DocText &
+ TagVersion(
+ const CodeEntity & i_ce );
+
+ void Get_UnkownTags(
+ Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce );
+
+ bool IsDeprecated(
+ const CodeEntity & i_ce );
+ bool IsIncomplete(
+ const CodeEntity & i_ce );
+ bool IsInternal(
+ const CodeEntity & i_ce );
+ bool IsNodoc(
+ const CodeEntity & i_ce );
+ bool IsOptional(
+ const CodeEntity & i_ce );
+ bool IsSuspicious(
+ const CodeEntity & i_ce );
+
+};
+
+
+} // namespace ifc_ce
+
+
+} // namspace idl
+} // namspace ary
+
+#endif
+
+
diff --git a/autodoc/inc/ary/idl/ik_constant.hxx b/autodoc/inc/ary/idl/ik_constant.hxx
new file mode 100644
index 000000000000..61b7fb7c87e0
--- /dev/null
+++ b/autodoc/inc/ary/idl/ik_constant.hxx
@@ -0,0 +1,76 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_IDL_IK_CONSTANT_HXX
+#define ARY_IDL_IK_CONSTANT_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <ary/idl/ik_ce.hxx>
+ // COMPONENTS
+ // PARAMETERS
+
+
+namespace ary
+{
+namespace idl
+{
+
+namespace ifc_constant
+{
+
+using ifc_ce::DocText;
+
+
+struct attr: public ifc_ce::attr
+{
+ static Type_id Type(
+ const CodeEntity & i_ce );
+ static const String &
+ Value(
+ const CodeEntity & i_ce );
+};
+
+struct xref : public ifc_ce::xref
+{
+};
+
+struct doc : public ifc_ce::doc
+{
+};
+
+
+} // namespace ifc_constant
+
+} // namespace idl
+} // namespace ary
+
+
+#endif
+
diff --git a/autodoc/inc/ary/idl/ik_constgroup.hxx b/autodoc/inc/ary/idl/ik_constgroup.hxx
new file mode 100644
index 000000000000..df55fda2ce03
--- /dev/null
+++ b/autodoc/inc/ary/idl/ik_constgroup.hxx
@@ -0,0 +1,73 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_IDL_IK_CONSTGROUP_HXX
+#define ARY_IDL_IK_CONSTGROUP_HXX
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <ary/idl/ik_ce.hxx>
+ // COMPONENTS
+ // PARAMETERS
+
+
+namespace ary
+{
+namespace idl
+{
+
+namespace ifc_constgroup
+{
+
+using ifc_ce::Dyn_CeIterator;
+using ifc_ce::DocText;
+
+
+struct attr: public ifc_ce::attr
+{
+ static void Get_Constants(
+ Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce );
+};
+
+struct xref : public ifc_ce::xref
+{
+};
+
+struct doc : public ifc_ce::doc
+{
+};
+
+} // namespace ifc_constgroup
+
+} // namespace idl
+} // namespace ary
+
+
+#endif
+
diff --git a/autodoc/inc/ary/idl/ik_enum.hxx b/autodoc/inc/ary/idl/ik_enum.hxx
new file mode 100644
index 000000000000..229d945b06f9
--- /dev/null
+++ b/autodoc/inc/ary/idl/ik_enum.hxx
@@ -0,0 +1,85 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_IDL_IK_ENUM_HXX
+#define ARY_IDL_IK_ENUM_HXX
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <ary/idl/ik_ce.hxx>
+ // COMPONENTS
+ // PARAMETERS
+
+
+namespace ary
+{
+namespace idl
+{
+
+namespace ifc_enum
+{
+
+using ifc_ce::Dyn_CeIterator;
+using ifc_ce::DocText;
+
+
+struct attr: public ifc_ce::attr
+{
+ static void Get_Values(
+ Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce );
+};
+
+struct xref : public ifc_ce::xref
+{
+ static void Get_SynonymTypedefs(
+ Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce );
+ static void Get_AsReturns(
+ Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce );
+ static void Get_AsParameters(
+ Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce );
+ static void Get_AsDataTypes(
+ Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce );
+};
+
+struct doc : public ifc_ce::doc
+{
+};
+
+} // namespace ifc_enum
+
+} // namespace idl
+} // namespace ary
+
+
+#endif
+
diff --git a/autodoc/inc/ary/idl/ik_enumvalue.hxx b/autodoc/inc/ary/idl/ik_enumvalue.hxx
new file mode 100644
index 000000000000..4071199a9f12
--- /dev/null
+++ b/autodoc/inc/ary/idl/ik_enumvalue.hxx
@@ -0,0 +1,73 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_IDL_IK_ENUMVALUE_HXX
+#define ARY_IDL_IK_ENUMVALUE_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <ary/idl/ik_ce.hxx>
+ // COMPONENTS
+ // PARAMETERS
+
+
+namespace ary
+{
+namespace idl
+{
+
+namespace ifc_enumvalue
+{
+
+using ifc_ce::DocText;
+
+
+struct attr: public ifc_ce::attr
+{
+ static const String &
+ Value(
+ const CodeEntity & i_ce );
+};
+
+struct xref : public ifc_ce::xref
+{
+};
+
+struct doc : public ifc_ce::doc
+{
+};
+
+
+} // namespace ifc_enumvalue
+
+} // namespace idl
+} // namespace ary
+
+
+#endif
diff --git a/autodoc/inc/ary/idl/ik_exception.hxx b/autodoc/inc/ary/idl/ik_exception.hxx
new file mode 100644
index 000000000000..6bd9eaa58109
--- /dev/null
+++ b/autodoc/inc/ary/idl/ik_exception.hxx
@@ -0,0 +1,82 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_IDL_IK_EXCEPTION_HXX
+#define ARY_IDL_IK_EXCEPTION_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <ary/idl/ik_ce.hxx>
+ // COMPONENTS
+ // PARAMETERS
+
+
+namespace ary
+{
+namespace idl
+{
+
+namespace ifc_exception
+{
+
+using ifc_ce::Dyn_CeIterator;
+using ifc_ce::DocText;
+
+
+struct attr: public ifc_ce::attr
+{
+ static Type_id Base(
+ const CodeEntity & i_ce );
+ static void Get_Elements(
+ Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce );
+};
+
+struct xref : public ifc_ce::xref
+{
+ static void Get_Derivations(
+ Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce );
+ static void Get_RaisingFunctions(
+ Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce );
+};
+
+struct doc : public ifc_ce::doc
+{
+};
+
+} // namespace ifc_exception
+
+} // namespace idl
+} // namespace ary
+
+
+#endif
+
diff --git a/autodoc/inc/ary/idl/ik_function.hxx b/autodoc/inc/ary/idl/ik_function.hxx
new file mode 100644
index 000000000000..b52264440405
--- /dev/null
+++ b/autodoc/inc/ary/idl/ik_function.hxx
@@ -0,0 +1,96 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_IDL_IK_SERVICE_HXX
+#define ARY_IDL_IK_SERVICE_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <ary/idl/i_param.hxx>
+#include <ary/idl/ik_ce.hxx>
+ // COMPONENTS
+ // PARAMETERS
+
+
+namespace ary
+{
+namespace idl
+{
+
+
+
+namespace ifc_function
+{
+
+using ::ary::idl::ifc_ce::Dyn_CeIterator;
+using ::ary::idl::ifc_ce::Dyn_TypeIterator;
+using ::ary::idl::ifc_ce::DocText;
+
+
+struct attr: public ifc_ce::attr
+{
+ static Type_id ReturnType(
+ const CodeEntity & i_ce );
+ static bool IsOneway(
+ const CodeEntity & i_ce );
+ static bool HasEllipse(
+ const CodeEntity & i_ce );
+ static void Get_Parameters(
+ Dyn_StdConstIterator<ary::idl::Parameter> &
+ o_result,
+ const CodeEntity & i_ce );
+ static void Get_Exceptions(
+ Dyn_TypeIterator & o_result,
+ const CodeEntity & i_ce );
+};
+
+struct xref : public ifc_ce::xref
+{
+};
+
+struct doc : public ifc_ce::doc
+{
+// aStateMachine.AddToken( "@param", nTok_at_param, A_nAtTagDefStatus, finAtTag );
+// aStateMachine.AddToken( "@throws", nTok_at_throws, A_nAtTagDefStatus, finAtTag );
+// aStateMachine.AddToken( "@exception",
+// aStateMachine.AddToken( "@return", nTok_at_return, A_nAtTagDefStatus, finAtTag );
+// aStateMachine.AddToken( "@returns", nTok_at_return, A_nAtTagDefStatus, finAtTag );
+};
+
+
+} // namespace ifc_function
+
+
+
+} // namespace idl
+} // namespace ary
+
+
+#endif
+
diff --git a/autodoc/inc/ary/idl/ik_interface.hxx b/autodoc/inc/ary/idl/ik_interface.hxx
new file mode 100644
index 000000000000..c6fb059fea48
--- /dev/null
+++ b/autodoc/inc/ary/idl/ik_interface.hxx
@@ -0,0 +1,112 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_IDL_IK_INTERFACE_HXX
+#define ARY_IDL_IK_INTERFACE_HXX
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <ary/idl/ik_ce.hxx>
+ // COMPONENTS
+ // PARAMETERS
+
+
+namespace ary
+{
+namespace idl
+{
+class CommentedRelation;
+
+namespace ifc_interface
+{
+
+using ifc_ce::Dyn_CeIterator;
+using ifc_ce::DocText;
+
+
+struct attr: public ifc_ce::attr
+{
+ static void Get_Bases(
+ Dyn_StdConstIterator<CommentedRelation> &
+ o_result,
+ const CodeEntity & i_ce );
+ static void Get_Functions(
+ Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce );
+ static void Get_Attributes(
+ Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce );
+};
+
+struct xref : public ifc_ce::xref
+{
+ static void Get_Derivations(
+ Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce );
+ static void Get_SynonymTypedefs( /// like: typedef i_ce.LocalName() newName;
+ Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce );
+ static void Get_ExportingServices(
+ Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce );
+ static void Get_ExportingSingletons(
+ Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce );
+ static void Get_AsReturns(
+ Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce );
+ static void Get_AsParameters(
+ Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce );
+ static void Get_AsDataTypes(
+ Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce );
+
+#if 0
+ static void Get_UsingTypedefs( /// like: typedef sequence<i_ce.LocalName()> newNameSeq;
+ Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce );
+ static void Get_AsIndirectReturns(
+ Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce );
+ static void Get_AsIndirectParameters(
+ Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce );
+#endif // 0
+};
+
+struct doc : public ifc_ce::doc
+{
+};
+
+} // namespace ifc_interface
+
+} // namespace idl
+} // namespace ary
+
+#endif
diff --git a/autodoc/inc/ary/idl/ik_module.hxx b/autodoc/inc/ary/idl/ik_module.hxx
new file mode 100644
index 000000000000..e4b5e5b0a6b1
--- /dev/null
+++ b/autodoc/inc/ary/idl/ik_module.hxx
@@ -0,0 +1,114 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_IDL_IK_MODULE_HXX
+#define ARY_IDL_IK_MODULE_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <ary/idl/ik_ce.hxx>
+ // COMPONENTS
+ // PARAMETERS
+
+
+namespace ary
+{
+namespace idl
+{
+
+class CePilot;
+
+namespace ifc_module
+{
+
+using ifc_ce::Dyn_CeIterator;
+using ifc_ce::DocText;
+
+
+struct attr : public ifc_ce::attr
+{
+ // KORR_FUTURE
+ // This has to be changed that way, that the differencing takes place
+ // within hfi_module.cxx and not here.
+ // So the class CePilot is not needed here, etc.
+ // Too much scope pollution.
+ static void Get_AllChildrenSeparated(
+ std::vector< const CodeEntity* > & o_nestedModules,
+ std::vector< const CodeEntity* > & o_services,
+ std::vector< const CodeEntity* > & o_interfaces,
+ std::vector< const CodeEntity* > & o_structs,
+ std::vector< const CodeEntity* > & o_exceptions,
+ std::vector< const CodeEntity* > & o_enums,
+ std::vector< const CodeEntity* > & o_typedefs,
+ std::vector< const CodeEntity* > & o_constantGroups,
+ std::vector< const CodeEntity* > & o_singletons,
+ const CePilot & i_pilot,
+ const CodeEntity & i_ce );
+
+ static void Get_SubModules(
+ Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce );
+ static void Get_Services(
+ Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce );
+ static void Get_Interfaces(
+ Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce );
+ static void Get_Structs(
+ Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce );
+ static void Get_Exceptions(
+ Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce );
+ static void Get_Enums(
+ Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce );
+ static void Get_Typedefs(
+ Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce );
+ static void Get_ConstantsGroups(
+ Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce );
+};
+
+struct xref : public ifc_ce::xref
+{
+};
+
+struct doc : public ifc_ce::doc
+{
+};
+
+} // namespace ifc_module
+
+} // namespace idl
+} // namespace ary
+
+
+#endif
diff --git a/autodoc/inc/ary/idl/ik_property.hxx b/autodoc/inc/ary/idl/ik_property.hxx
new file mode 100644
index 000000000000..874eb91edce4
--- /dev/null
+++ b/autodoc/inc/ary/idl/ik_property.hxx
@@ -0,0 +1,89 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_IDL_IK_PROPERTY_HXX
+#define ARY_IDL_IK_PROPERTY_HXX
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <ary/idl/ik_ce.hxx>
+ // COMPONENTS
+ // PARAMETERS
+
+
+namespace ary
+{
+namespace idl
+{
+
+namespace ifc_property
+{
+
+using ifc_ce::DocText;
+
+
+struct attr: public ifc_ce::attr
+{
+ static bool HasAnyStereotype(
+ const CodeEntity & i_ce );
+ static bool IsReadOnly(
+ const CodeEntity & i_ce );
+ static bool IsBound(
+ const CodeEntity & i_ce );
+ static bool IsConstrained(
+ const CodeEntity & i_ce );
+ static bool IsMayBeAmbiguous(
+ const CodeEntity & i_ce );
+ static bool IsMayBeDefault(
+ const CodeEntity & i_ce );
+ static bool IsMayBeVoid(
+ const CodeEntity & i_ce );
+ static bool IsRemovable(
+ const CodeEntity & i_ce );
+ static bool IsTransient(
+ const CodeEntity & i_ce );
+ static Type_id Type(
+ const CodeEntity & i_ce );
+};
+
+struct xref : public ifc_ce::xref
+{
+};
+
+struct doc : public ifc_ce::doc
+{
+};
+
+
+} // namespace ifc_property
+
+} // namespace idl
+} // namespace ary
+
+
+#endif
diff --git a/autodoc/inc/ary/idl/ik_service.hxx b/autodoc/inc/ary/idl/ik_service.hxx
new file mode 100644
index 000000000000..6a7561375a4a
--- /dev/null
+++ b/autodoc/inc/ary/idl/ik_service.hxx
@@ -0,0 +1,88 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_IDL_IK_SERVICE_HXX
+#define ARY_IDL_IK_SERVICE_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <ary/idl/ik_ce.hxx>
+ // COMPONENTS
+ // PARAMETERS
+
+
+namespace ary
+{
+namespace idl
+{
+
+namespace ifc_service
+{
+
+using ifc_ce::Dyn_CeIterator;
+using ifc_ce::DocText;
+
+
+struct attr: public ifc_ce::attr
+{
+ static void Get_IncludedServices(
+ Dyn_StdConstIterator<CommentedRelation> &
+ o_result,
+ const CodeEntity & i_ce );
+ static void Get_ExportedInterfaces(
+ Dyn_StdConstIterator<CommentedRelation> &
+ o_result,
+ const CodeEntity & i_ce );
+ static void Get_Properties(
+ Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce );
+};
+
+struct xref : public ifc_ce::xref
+{
+ static void Get_IncludingServices(
+ Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce );
+ static void Get_InstantiatingSingletons(
+ Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce );
+};
+
+struct doc : public ifc_ce::doc
+{
+};
+
+
+} // namespace ifc_service
+
+} // namespace idl
+} // namespace ary
+
+
+#endif
diff --git a/autodoc/inc/ary/idl/ik_singleton.hxx b/autodoc/inc/ary/idl/ik_singleton.hxx
new file mode 100644
index 000000000000..e4af7af5b810
--- /dev/null
+++ b/autodoc/inc/ary/idl/ik_singleton.hxx
@@ -0,0 +1,73 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_IDL_IK_SINGLETON_HXX
+#define ARY_IDL_IK_SINGLETON_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <ary/idl/ik_ce.hxx>
+ // COMPONENTS
+ // PARAMETERS
+
+
+namespace ary
+{
+namespace idl
+{
+
+namespace ifc_singleton
+{
+
+using ifc_ce::Dyn_CeIterator;
+using ifc_ce::DocText;
+
+
+struct attr: public ifc_ce::attr
+{
+ static Type_id AssociatedService(
+ const CodeEntity & i_ce );
+};
+
+struct xref : public ifc_ce::xref
+{
+};
+
+struct doc : public ifc_ce::doc
+{
+};
+
+
+} // namespace ifc_singleton
+
+} // namespace idl
+} // namespace ary
+
+
+#endif
diff --git a/autodoc/inc/ary/idl/ik_siservice.hxx b/autodoc/inc/ary/idl/ik_siservice.hxx
new file mode 100644
index 000000000000..8a42f899b6a3
--- /dev/null
+++ b/autodoc/inc/ary/idl/ik_siservice.hxx
@@ -0,0 +1,75 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_IDL_IK_SISERVICE_HXX
+#define ARY_IDL_IK_SISERVICE_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <ary/idl/ik_ce.hxx>
+ // COMPONENTS
+ // PARAMETERS
+
+
+namespace ary
+{
+namespace idl
+{
+
+namespace ifc_sglifcservice
+{
+
+using ifc_ce::Dyn_CeIterator;
+
+
+struct attr: public ifc_ce::attr
+{
+ static Type_id BaseInterface(
+ const CodeEntity & i_ce );
+ static void Get_Constructors(
+ Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce );
+};
+
+struct xref : public ifc_ce::xref
+{
+};
+
+struct doc : public ifc_ce::doc
+{
+};
+
+
+} // namespace ifc_sglifcservice
+
+} // namespace idl
+} // namespace ary
+
+
+#endif
diff --git a/autodoc/inc/ary/idl/ik_sisingleton.hxx b/autodoc/inc/ary/idl/ik_sisingleton.hxx
new file mode 100644
index 000000000000..13ba8b810251
--- /dev/null
+++ b/autodoc/inc/ary/idl/ik_sisingleton.hxx
@@ -0,0 +1,73 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_IDL_IK_SISINGLETON_HXX
+#define ARY_IDL_IK_SISINGLETON_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <ary/idl/ik_ce.hxx>
+ // COMPONENTS
+ // PARAMETERS
+
+
+namespace ary
+{
+namespace idl
+{
+
+namespace ifc_sglifcsingleton
+{
+
+using ifc_ce::Dyn_CeIterator;
+using ifc_ce::DocText;
+
+
+struct attr: public ifc_ce::attr
+{
+ static Type_id BaseInterface(
+ const CodeEntity & i_ce );
+};
+
+struct xref : public ifc_ce::xref
+{
+};
+
+struct doc : public ifc_ce::doc
+{
+};
+
+
+} // namespace ifc_sglifcsingleton
+
+} // namespace idl
+} // namespace ary
+
+
+#endif
diff --git a/autodoc/inc/ary/idl/ik_struct.hxx b/autodoc/inc/ary/idl/ik_struct.hxx
new file mode 100644
index 000000000000..b5908d3a1e0c
--- /dev/null
+++ b/autodoc/inc/ary/idl/ik_struct.hxx
@@ -0,0 +1,91 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_IDL_IK_STRUCT_HXX
+#define ARY_IDL_IK_STRUCT_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <ary/idl/ik_ce.hxx>
+ // COMPONENTS
+ // PARAMETERS
+
+
+namespace ary
+{
+namespace idl
+{
+
+namespace ifc_struct
+{
+
+using ifc_ce::Dyn_CeIterator;
+using ifc_ce::DocText;
+
+
+struct attr: public ifc_ce::attr
+{
+ static Type_id Base(
+ const CodeEntity & i_ce );
+ static void Get_Elements(
+ Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce );
+};
+
+struct xref : public ifc_ce::xref
+{
+ static void Get_Derivations(
+ Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce );
+ static void Get_SynonymTypedefs(
+ Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce );
+ static void Get_AsReturns(
+ Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce );
+ static void Get_AsParameters(
+ Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce );
+ static void Get_AsDataTypes(
+ Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce );
+};
+
+struct doc : public ifc_ce::doc
+{
+};
+
+} // namespace ifc_struct
+
+} // namespace idl
+} // namespace ary
+
+
+#endif
+
diff --git a/autodoc/inc/ary/idl/ik_structelem.hxx b/autodoc/inc/ary/idl/ik_structelem.hxx
new file mode 100644
index 000000000000..2b8f95587463
--- /dev/null
+++ b/autodoc/inc/ary/idl/ik_structelem.hxx
@@ -0,0 +1,72 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_IDL_IK_STRUCTELEM_HXX
+#define ARY_IDL_IK_STRUCTELEM_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <ary/idl/ik_ce.hxx>
+ // COMPONENTS
+ // PARAMETERS
+
+
+namespace ary
+{
+namespace idl
+{
+
+namespace ifc_structelement
+{
+
+using ifc_ce::DocText;
+
+
+struct attr: public ifc_ce::attr
+{
+ static Type_id Type(
+ const CodeEntity & i_ce );
+};
+
+struct xref : public ifc_ce::xref
+{
+};
+
+struct doc : public ifc_ce::doc
+{
+};
+
+
+} // namespace ifc_structelement
+
+} // namespace idl
+} // namespace ary
+
+
+#endif
diff --git a/autodoc/inc/ary/idl/ik_typedef.hxx b/autodoc/inc/ary/idl/ik_typedef.hxx
new file mode 100644
index 000000000000..1d4a88d5d287
--- /dev/null
+++ b/autodoc/inc/ary/idl/ik_typedef.hxx
@@ -0,0 +1,83 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_IDL_IK_TYPEDEF_HXX
+#define ARY_IDL_IK_TYPEDEF_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <ary/idl/ik_ce.hxx>
+ // COMPONENTS
+ // PARAMETERS
+
+namespace ary
+{
+namespace idl
+{
+
+namespace ifc_typedef
+{
+
+using ifc_ce::Dyn_CeIterator;
+using ifc_ce::DocText;
+
+
+struct attr: public ifc_ce::attr
+{
+ static Type_id DefiningType(
+ const CodeEntity & i_ce );
+};
+
+struct xref : public ifc_ce::xref
+{
+ static void Get_SynonymTypedefs(
+ Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce );
+ static void Get_AsReturns(
+ Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce );
+ static void Get_AsParameters(
+ Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce );
+ static void Get_AsDataTypes(
+ Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce );
+};
+
+struct doc : public ifc_ce::doc
+{
+};
+
+} // namespace ifc_typedef
+
+} // namespace idl
+} // namespace ary
+
+
+#endif
diff --git a/autodoc/inc/ary/idl/ip_ce.hxx b/autodoc/inc/ary/idl/ip_ce.hxx
new file mode 100644
index 000000000000..d2b7773d62df
--- /dev/null
+++ b/autodoc/inc/ary/idl/ip_ce.hxx
@@ -0,0 +1,210 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_IDL_IP_CE_HXX
+#define ARY_IDL_IP_CE_HXX
+
+// USED SERVICES
+#include <ary/idl/i_types4idl.hxx>
+#include <ary/idl/i_property.hxx>
+
+
+
+
+namespace ary
+{
+namespace idl
+{
+ class Module;
+
+ class ConstantsGroup;
+ class Enum;
+ class Exception;
+ class Interface;
+ class Service;
+ class SglIfcService;
+ class Singleton;
+ class SglIfcSingleton;
+ class Struct;
+ class Typedef;
+
+ class Attribute;
+ class Constant;
+ class EnumValue;
+ class Function;
+ class Property;
+ class StructElement;
+ class Variable;
+
+ class NameLookup;
+
+
+/** Provides the access logic for all code entities.
+*/
+class CePilot
+{
+ public:
+ // LIFECYCLE
+ virtual ~CePilot() {}
+
+ // OPERATIONS
+ virtual Module & CheckIn_Module(
+ Ce_id i_nParentId,
+ const String & i_sName ) = 0;
+ virtual Service & Store_Service(
+ Ce_id i_nOwner,
+ const String & i_sName ) = 0;
+ virtual SglIfcService &
+ Store_SglIfcService(
+ Ce_id i_nOwner,
+ const String & i_sName,
+ Type_id i_nBaseInterface ) = 0;
+ virtual Interface & Store_Interface(
+ Ce_id i_nOwner,
+ const String & i_sName,
+ Type_id i_nBase ) = 0;
+ virtual Struct & Store_Struct(
+ Ce_id i_nOwner,
+ const String & i_sName,
+ Type_id i_nBase,
+ const String & i_sTemplateParam = String::Null_() ) = 0;
+ virtual Exception & Store_Exception(
+ Ce_id i_nOwner,
+ const String & i_sName,
+ Type_id i_nBase ) = 0;
+ virtual Enum & Store_Enum(
+ Ce_id i_nOwner,
+ const String & i_sName ) = 0;
+ virtual Typedef & Store_Typedef(
+ Ce_id i_nOwner,
+ const String & i_sName,
+ Type_id i_nDefiningType ) = 0;
+ virtual ConstantsGroup &
+ Store_ConstantsGroup(
+ Ce_id i_nOwner,
+ const String & i_sName ) = 0;
+ virtual Singleton & Store_Singleton(
+ Ce_id i_nOwner,
+ const String & i_sName ) = 0;
+ virtual SglIfcSingleton &
+ Store_SglIfcSingleton(
+ Ce_id i_nOwner,
+ const String & i_sName,
+ Type_id i_nBaseInterface ) = 0;
+
+ virtual Constant & Store_Constant(
+ Ce_id i_nOwner,
+ const String & i_sName,
+ Type_id i_nType,
+ const String & i_sValue ) = 0;
+ virtual Property & Store_Property(
+ Ce_id i_nOwner,
+ const String & i_sName,
+ Type_id i_nType,
+ Property::Stereotypes
+ i_stereotypes ) = 0;
+ virtual Function & Store_Function(
+ Ce_id i_nOwner,
+ const String & i_sName,
+ Type_id i_nReturnType,
+ bool i_bOneWay ) = 0;
+ virtual Function & Store_ServiceConstructor(
+ Ce_id i_nOwner,
+ const String & i_sName ) = 0;
+ virtual StructElement &
+ Store_StructMember(
+ Ce_id i_nOwner,
+ const String & i_sName,
+ Type_id i_nType ) = 0;
+ virtual StructElement &
+ Store_ExceptionMember(
+ Ce_id i_nOwner,
+ const String & i_sName,
+ Type_id i_nType ) = 0;
+ virtual EnumValue & Store_EnumValue(
+ Ce_id i_nOwner,
+ const String & i_sName,
+ const String & i_sValue ) = 0;
+ virtual Attribute & Store_Attribute(
+ Ce_id i_nOwner,
+ const String & i_sName,
+ Type_id i_nType,
+ bool i_bReadOnly,
+ bool i_bBound ) = 0;
+ // INQUIRY
+ virtual const Module &
+ GlobalNamespace() const = 0;
+ virtual const CodeEntity &
+ Find_Ce(
+ Ce_id i_nId ) const = 0;
+
+ virtual const Module &
+ Find_Module(
+ Ce_id i_nId ) const = 0;
+ virtual const Module *
+ Search_Module(
+ Ce_id i_nId ) const = 0;
+ virtual const Function &
+ Find_Function(
+ Ce_id i_nId ) const = 0;
+ virtual const Property &
+ Find_Property(
+ Ce_id i_nId ) const = 0;
+ virtual const EnumValue &
+ Find_EnumValue(
+ Ce_id i_nId ) const = 0;
+ virtual const Constant &
+ Find_Constant(
+ Ce_id i_nId ) const = 0;
+ virtual const StructElement &
+ Find_StructElement(
+ Ce_id i_nId ) const = 0;
+ virtual void Get_Text(
+ StringVector & o_module,
+ String & o_ce,
+ String & o_member,
+ const CodeEntity & i_ce ) const = 0;
+ virtual const NameLookup &
+ NameDictionary() const = 0;
+ virtual void Get_AlphabeticalIndex(
+ std::vector<Ce_id> &
+ o_rResult,
+ alphabetical_index::E_Letter
+ i_cLetter) const = 0;
+ // ACCESS
+ virtual Module & GlobalNamespace() = 0;
+ virtual CodeEntity &
+ Find_Ce(
+ Ce_id i_nId ) = 0;
+};
+
+
+
+
+} // namespace idl
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/idl/ip_type.hxx b/autodoc/inc/ary/idl/ip_type.hxx
new file mode 100644
index 000000000000..7936bab40bff
--- /dev/null
+++ b/autodoc/inc/ary/idl/ip_type.hxx
@@ -0,0 +1,83 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_IDL_IP_TYPE_HXX
+#define ARY_IDL_IP_TYPE_HXX
+
+// USED SERVICES
+#include <ary/idl/i_types4idl.hxx>
+
+
+
+
+namespace ary
+{
+ class QualifiedName;
+
+namespace idl
+{
+ class Type;
+ class ExplicitNameRoom;
+
+
+/** Access point to all {->Type}s in IDL.
+*/
+class TypePilot
+{
+ public:
+ // LIFECYCLE
+ virtual ~TypePilot() {}
+
+ // OPERATIONS
+ virtual const Type &
+ CheckIn_Type(
+ QualifiedName & i_rFullName,
+ uintt i_nSequenceCount,
+ Ce_id i_nModuleOfOccurrence,
+ const std::vector<Type_id> *
+ i_templateParameters ) = 0;
+ // INQUIRY
+ virtual const Type &
+ Find_Type(
+ Type_id i_nType ) const = 0;
+ virtual String Search_LocalNameOf(
+ Type_id i_nType ) const = 0;
+ virtual Ce_id Search_CeRelatedTo(
+ Type_id i_nType ) const = 0;
+ virtual const ExplicitNameRoom &
+ Find_XNameRoom(
+ Type_id i_nType ) const = 0;
+ virtual bool IsBuiltInOrRelated(
+ const Type & i_rType ) const = 0;
+};
+
+
+
+
+} // namespace idl
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/info/all_dts.hxx b/autodoc/inc/ary/info/all_dts.hxx
new file mode 100644
index 000000000000..58aee2a5e50d
--- /dev/null
+++ b/autodoc/inc/ary/info/all_dts.hxx
@@ -0,0 +1,160 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_INFO_ALL_DTS_HXX
+#define ARY_INFO_ALL_DTS_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+ // COMPONENTS
+ // PARAMETERS
+
+
+namespace ary
+{
+namespace info
+{
+
+class DocuDisplay;
+
+class DocuToken
+{
+ public:
+ virtual ~DocuToken() {}
+
+ void StoreAt(
+ DocuDisplay & o_rDisplay ) const;
+ bool IsWhite() const;
+
+ private:
+ virtual void do_StoreAt(
+ DocuDisplay & o_rDisplay ) const = 0;
+ virtual bool inq_IsWhite() const = 0;
+};
+
+class DT_Text : public DocuToken
+{
+ public:
+ DT_Text(
+ const char * i_sText )
+ : sText( i_sText ) {}
+
+ const String & Text() const { return sText; }
+
+ private:
+ virtual void do_StoreAt(
+ DocuDisplay & o_rDisplay ) const;
+ virtual bool inq_IsWhite() const;
+
+ String sText;
+};
+
+class DT_MaybeLink : public DocuToken
+{
+ public:
+ DT_MaybeLink(
+ const char * i_sText,
+ bool i_bIsGlobal,
+ bool i_bIsFunction )
+ : sText( i_sText ),
+ bIsGlobal(i_bIsGlobal),
+ bIsFunction(i_bIsFunction) { }
+
+ const String & Text() const { return sText; }
+ bool IsAbsolute() const { return bIsGlobal; }
+ bool IsFunction() const { return bIsFunction; }
+
+ private:
+ virtual void do_StoreAt(
+ DocuDisplay & o_rDisplay ) const;
+ virtual bool inq_IsWhite() const;
+
+ String sText;
+ bool bIsGlobal;
+ bool bIsFunction;
+};
+
+class DT_Whitespace : public DocuToken
+{
+ public:
+ DT_Whitespace(
+ UINT8 i_nLength )
+ : nLength( i_nLength ) {}
+ UINT8 Length() const { return nLength; }
+
+ private:
+ virtual void do_StoreAt(
+ DocuDisplay & o_rDisplay ) const;
+ virtual bool inq_IsWhite() const;
+
+ UINT8 nLength;
+};
+
+
+class DT_Eol : public DocuToken
+{
+ virtual void do_StoreAt(
+ DocuDisplay & o_rDisplay ) const;
+ virtual bool inq_IsWhite() const;
+};
+
+class DT_Xml : public DocuToken
+{
+ public:
+ DT_Xml(
+ const char * i_sText )
+ : sText( i_sText ) {}
+
+ const String & Text() const { return sText; }
+
+ private:
+ virtual void do_StoreAt(
+ DocuDisplay & o_rDisplay ) const;
+ virtual bool inq_IsWhite() const;
+
+ String sText;
+};
+
+
+// IMPLEMENTATION
+
+inline void
+DocuToken::StoreAt( DocuDisplay & o_rDisplay ) const
+ { do_StoreAt(o_rDisplay); }
+inline bool
+DocuToken::IsWhite() const
+ { return inq_IsWhite(); }
+
+
+
+}
+}
+
+#endif
+
diff --git a/autodoc/inc/ary/info/all_tags.hxx b/autodoc/inc/ary/info/all_tags.hxx
new file mode 100644
index 000000000000..bd2de713f22c
--- /dev/null
+++ b/autodoc/inc/ary/info/all_tags.hxx
@@ -0,0 +1,289 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_INFO_ALL_TAGS_HXX
+#define ARY_INFO_ALL_TAGS_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <ary/info/ci_attag.hxx>
+ // COMPONENTS
+#include <ary/info/inftypes.hxx>
+#include <ary/info/ci_text.hxx>
+#include <ary/qualiname.hxx>
+ // PARAMETERS
+
+
+
+namespace ary
+{
+namespace info
+{
+
+
+class StdTag : public AtTag
+{
+ public:
+ StdTag(
+ E_AtTagId i_eId );
+
+ virtual bool Add_SpecialMeaningToken(
+ const char * i_sText,
+ intt i_nNr );
+ void ChangeId2(
+ E_AtTagId i_eId )
+ { eId = i_eId; }
+
+ virtual UINT8 NrOfSpecialMeaningTokens() const;
+ virtual AtTag * GetFollower();
+
+ E_AtTagId Std_Id() const { return eId; }
+
+ private:
+ virtual void do_StoreAt(
+ DocuDisplay & o_rDisplay ) const;
+ virtual DocuText * Text();
+
+ E_AtTagId eId;
+ DocuText aText;
+ StdTag * pNext;
+};
+
+class BaseTag : public AtTag
+{
+ public:
+ BaseTag();
+
+ virtual bool Add_SpecialMeaningToken(
+ const char * i_sText,
+ intt i_nNr );
+ virtual const char *
+ Title() const;
+ virtual UINT8 NrOfSpecialMeaningTokens() const;
+ virtual AtTag * GetFollower();
+
+ private:
+ virtual DocuText * Text();
+
+ QualifiedName sBase;
+ DocuText aText;
+ AtTag * pNext;
+};
+
+class ExceptionTag : public AtTag
+{
+ public:
+ ExceptionTag();
+
+ virtual bool Add_SpecialMeaningToken(
+ const char * i_sText,
+ intt i_nNr );
+ virtual const char *
+ Title() const;
+ virtual UINT8 NrOfSpecialMeaningTokens() const;
+ virtual AtTag * GetFollower();
+
+ private:
+ virtual DocuText * Text();
+
+ QualifiedName sException;
+ DocuText aText;
+ AtTag * pNext;
+};
+
+class ImplementsTag : public AtTag
+{
+ public:
+ ImplementsTag();
+
+ virtual bool Add_SpecialMeaningToken(
+ const char * i_sText,
+ intt i_nNr );
+ virtual const char *
+ Title() const;
+ virtual UINT8 NrOfSpecialMeaningTokens() const;
+ virtual AtTag * GetFollower();
+
+ private:
+ virtual DocuText * Text();
+
+ QualifiedName sName;
+ AtTag * pNext;
+};
+
+class KeywordTag : public AtTag
+{
+ public:
+ KeywordTag();
+
+ virtual bool Add_SpecialMeaningToken(
+ const char * i_sText,
+ intt i_nNr );
+ virtual const char *
+ Title() const;
+ virtual UINT8 NrOfSpecialMeaningTokens() const;
+ virtual AtTag * GetFollower();
+
+ private:
+ virtual DocuText * Text();
+
+ StringVector sKeys;
+};
+
+class ParameterTag : public AtTag
+{
+ public:
+ ParameterTag();
+
+ virtual bool Add_SpecialMeaningToken(
+ const char * i_sText,
+ intt i_nNr );
+
+ const String & ParamName() const { return sName; }
+ const DocuText & CText() const { return aText; }
+ virtual UINT8 NrOfSpecialMeaningTokens() const;
+ virtual const ParameterTag *
+ GetNext() const { return dynamic_cast< ParameterTag* >(pNext); }
+ virtual AtTag * GetFollower();
+
+ private:
+ virtual void do_StoreAt(
+ DocuDisplay & o_rDisplay ) const;
+ virtual DocuText * Text();
+
+ String sName;
+ String sValidRange;
+ DocuText aText;
+ AtTag * pNext;
+};
+
+class SeeTag : public AtTag
+{
+ public:
+ SeeTag();
+
+ virtual bool Add_SpecialMeaningToken(
+ const char * i_sText,
+ intt i_nNr );
+ virtual const char *
+ Title() const;
+ virtual UINT8 NrOfSpecialMeaningTokens() const;
+ virtual AtTag * GetFollower();
+
+ const std::vector< QualifiedName > &
+ References() const { return sReferences; }
+ private:
+ virtual void do_StoreAt(
+ DocuDisplay & o_rDisplay ) const;
+ virtual DocuText * Text();
+
+ std::vector< QualifiedName >
+ sReferences;
+};
+
+class TemplateTag : public AtTag
+{
+ public:
+ TemplateTag();
+
+ virtual bool Add_SpecialMeaningToken(
+ const char * i_sText,
+ intt i_nNr );
+ const DocuText & CText() const { return aText; }
+ virtual const char *
+ Title() const;
+ const String & TplParamName() const { return sName; }
+ virtual UINT8 NrOfSpecialMeaningTokens() const;
+ virtual const TemplateTag *
+ GetNext() const { return dynamic_cast< TemplateTag* >(pNext); }
+ virtual AtTag * GetFollower();
+
+ private:
+ virtual void do_StoreAt(
+ DocuDisplay & o_rDisplay ) const;
+ virtual DocuText * Text();
+
+ String sName;
+ DocuText aText;
+ AtTag * pNext;
+};
+
+class LabelTag : public AtTag
+{
+ public:
+ LabelTag();
+
+ virtual bool Add_SpecialMeaningToken(
+ const char * i_sText,
+ intt i_nNr );
+ virtual const char *
+ Title() const;
+ virtual UINT8 NrOfSpecialMeaningTokens() const;
+ virtual AtTag * GetFollower();
+
+ private:
+ virtual DocuText * Text();
+
+ String sLabel;
+};
+
+class SinceTag : public AtTag
+{
+ public:
+ SinceTag();
+
+ virtual bool Add_SpecialMeaningToken(
+ const char * i_sText,
+ intt i_nNr );
+ virtual const char *
+ Title() const;
+ virtual UINT8 NrOfSpecialMeaningTokens() const;
+ virtual AtTag * GetFollower();
+
+ const String & Version() const { return sVersion; }
+
+ private:
+ virtual void do_StoreAt(
+ DocuDisplay & o_rDisplay ) const;
+ virtual DocuText * Text();
+
+ // Data
+ String sVersion;
+};
+
+
+
+// IMPLEMENTATION
+
+
+}
+}
+
+#endif
+
diff --git a/autodoc/inc/ary/info/ci_attag.hxx b/autodoc/inc/ary/info/ci_attag.hxx
new file mode 100644
index 000000000000..da487a86f7fb
--- /dev/null
+++ b/autodoc/inc/ary/info/ci_attag.hxx
@@ -0,0 +1,101 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_INFO_CI_ATTAG_HXX
+#define ARY_INFO_CI_ATTAG_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+ // COMPONENTS
+ // PARAMETERS
+
+
+
+namespace ary
+{
+namespace info
+{
+
+class DocuText;
+class DocuDisplay;
+
+class AtTag
+{
+ public:
+ virtual ~AtTag() {}
+
+ void Set_HtmlUseInDocuText(
+ bool i_bUseIt );
+ virtual bool Add_SpecialMeaningToken( /// @return false, if token was not special.
+ const char * i_sText,
+ intt i_nNr ) = 0;
+ virtual void Add_Token(
+ const char * i_sText );
+ virtual void Add_PotentialLink(
+ const char * i_sText,
+ bool i_bIsGlobal,
+ bool i_bIsFunction );
+ virtual void Add_Whitespace(
+ UINT8 i_nLength );
+ virtual void Add_Eol();
+
+ virtual UINT8 NrOfSpecialMeaningTokens() const = 0;
+ virtual AtTag * GetFollower() = 0;
+
+ void StoreAt(
+ DocuDisplay & o_rDisplay ) const;
+ const DocuText & CText() const;
+
+ private:
+ virtual void do_StoreAt(
+ DocuDisplay & o_rDisplay ) const; // later becoming abstract
+
+ virtual DocuText * Text() = 0;
+};
+
+
+
+// IMPLEMENTATION
+
+inline void
+AtTag::StoreAt( DocuDisplay & o_rDisplay ) const
+ { do_StoreAt(o_rDisplay); }
+inline const DocuText &
+AtTag::CText() const
+ { DocuText * ret = const_cast< AtTag* >(this)->Text();
+ csv_assert( ret != 0 );
+ return *ret;
+ }
+
+
+}
+}
+
+#endif
+
diff --git a/autodoc/inc/ary/info/ci_text.hxx b/autodoc/inc/ary/info/ci_text.hxx
new file mode 100644
index 000000000000..c2dce2bfd11a
--- /dev/null
+++ b/autodoc/inc/ary/info/ci_text.hxx
@@ -0,0 +1,85 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_INFO_CI_TEXT_HXX
+#define ARY_INFO_CI_TEXT_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+ // COMPONENTS
+ // PARAMETERS
+
+
+namespace ary
+{
+namespace info
+{
+
+class DocuToken;
+class DocuDisplay;
+
+
+class DocuText
+{
+ public:
+ typedef std::vector< DocuToken * > TokenList;
+
+ DocuText();
+ ~DocuText();
+
+ void Set_HtmlUse(
+ bool i_bUseIt )
+ { bUsesHtml = i_bUseIt; }
+ void Add_Token(
+ DYN DocuToken & let_drToken )
+ { aTokens.push_back(&let_drToken); }
+ const TokenList & Tokens() const { return aTokens; }
+ void StoreAt(
+ DocuDisplay & o_rDisplay ) const;
+ bool IsNoHtml() const { return NOT bUsesHtml; }
+ bool IsEmpty() const { return aTokens.size() == 0; }
+
+ private:
+ TokenList aTokens;
+ bool bUsesHtml;
+};
+
+
+
+
+
+
+// IMPLEMENTATION
+
+
+}
+}
+
+#endif
+
diff --git a/autodoc/inc/ary/info/docstore.hxx b/autodoc/inc/ary/info/docstore.hxx
new file mode 100644
index 000000000000..421904ab94fd
--- /dev/null
+++ b/autodoc/inc/ary/info/docstore.hxx
@@ -0,0 +1,116 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_INFO_DOCSTORE_HXX
+#define ARY_INFO_DOCSTORE_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+ // COMPONENTS
+ // PARAMETERS
+#include <ary/info/inftypes.hxx>
+
+namespace ary
+{
+namespace doc
+{
+ class Node;
+}
+
+
+
+namespace info
+{
+
+class DocuStore
+{
+ public:
+ virtual ~DocuStore() {}
+
+ void Store2CurFile(
+ DYN doc::Node & let_drDocu );
+ void Store2CurNamespace(
+ DYN doc::Node & let_drDocu );
+
+ void Store2ConnectedDeclaration(
+ DYN doc::Node & let_drDocu );
+
+ void Store2Glossary(
+ DYN doc::Node & let_drDocu,
+ const String & i_sExplainedTerm );
+ void Store2GlobalTexts(
+ DYN doc::Node & let_drDocu,
+ ary::info::GlobalTextId
+ i_nId );
+ private:
+ virtual void do_Store2CurFile(
+ DYN doc::Node & let_drDocu ) = 0;
+ virtual void do_Store2CurNamespace(
+ DYN doc::Node & let_drDocu ) = 0;
+
+ virtual void do_Store2ConnectedDeclaration(
+ DYN doc::Node & let_drDocu ) = 0;
+
+ virtual void do_Store2Glossary(
+ DYN doc::Node & let_drDocu,
+ const String & i_sExplainedTerm ) = 0;
+ virtual void do_Store2GlobalTexts(
+ DYN doc::Node & let_drDocu,
+ ary::info::GlobalTextId
+ i_nId ) = 0;
+};
+
+
+
+
+// IMPLEMENTATION
+inline void
+DocuStore::Store2CurFile( DYN doc::Node & let_drDocu )
+ { do_Store2CurFile(let_drDocu); }
+inline void
+DocuStore::Store2CurNamespace( DYN doc::Node & let_drDocu )
+ { do_Store2CurNamespace(let_drDocu); }
+inline void
+DocuStore::Store2ConnectedDeclaration( DYN doc::Node & let_drDocu )
+ { do_Store2ConnectedDeclaration(let_drDocu); }
+inline void
+DocuStore::Store2Glossary( DYN doc::Node & let_drDocu,
+ const String & i_sExplainedTerm )
+ { do_Store2Glossary(let_drDocu, i_sExplainedTerm); }
+inline void
+DocuStore::Store2GlobalTexts( DYN doc::Node & let_drDocu,
+ ary::info::GlobalTextId i_nId )
+ { do_Store2GlobalTexts(let_drDocu, i_nId); }
+
+
+
+
+} // namespace info
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/info/infodisp.hxx b/autodoc/inc/ary/info/infodisp.hxx
new file mode 100644
index 000000000000..f486a2292f8d
--- /dev/null
+++ b/autodoc/inc/ary/info/infodisp.hxx
@@ -0,0 +1,114 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_INFO_INFODISP_HXX
+#define ARY_INFO_INFODISP_HXX
+// KORR_DEPRECATED_3.0
+
+// BASE CLASSES
+// USED SERVICES
+
+
+
+
+namespace ary
+{
+namespace info
+{
+ class StdTag;
+ class BaseTag;
+ class ExceptionTag;
+ class ImplementsTag;
+ class KeywordTag;
+ class ParameterTag;
+ class SeeTag;
+ class TemplateTag;
+ class LabelTag;
+ class SinceTag;
+ class DT_Text;
+ class DT_MaybeLink;
+ class DT_Whitespace;
+ class DT_Eol;
+ class DT_Xml;
+
+
+
+/** Displaying an ary::doc::OldCppDocu.
+
+ @descr
+ This class is an interface, but the functions are defaulted,
+ to do nothing. so a derived class needn't implement all of them.
+*/
+class DocuDisplay
+{
+ public:
+ virtual ~DocuDisplay() {}
+
+ virtual void Display_StdTag(
+ const StdTag & i_rData ) = 0;
+ virtual void Display_BaseTag(
+ const BaseTag & i_rData ) = 0;
+ virtual void Display_ExceptionTag(
+ const ExceptionTag &
+ i_rData ) = 0;
+ virtual void Display_ImplementsTag(
+ const ImplementsTag &
+ i_rData ) = 0;
+ virtual void Display_KeywordTag(
+ const KeywordTag & i_rData ) = 0;
+ virtual void Display_ParameterTag(
+ const ParameterTag &
+ i_rData ) = 0;
+ virtual void Display_SeeTag(
+ const SeeTag & i_rData ) = 0;
+ virtual void Display_TemplateTag(
+ const TemplateTag & i_rData ) = 0;
+ virtual void Display_LabelTag(
+ const LabelTag & i_rData ) = 0;
+ virtual void Display_SinceTag(
+ const ary::info::SinceTag &
+ i_rData ) = 0;
+ virtual void Display_DT_Text(
+ const DT_Text & i_rData ) = 0;
+ virtual void Display_DT_MaybeLink(
+ const DT_MaybeLink& i_rData ) = 0;
+ virtual void Display_DT_Whitespace(
+ const DT_Whitespace &
+ i_rData ) = 0;
+ virtual void Display_DT_Eol(
+ const DT_Eol & i_rData ) = 0;
+ virtual void Display_DT_Xml(
+ const ary::info::DT_Xml &
+ i_rData ) = 0;
+};
+
+
+
+
+}
+}
+#endif
diff --git a/autodoc/inc/ary/info/inftypes.hxx b/autodoc/inc/ary/info/inftypes.hxx
new file mode 100644
index 000000000000..0bf330670063
--- /dev/null
+++ b/autodoc/inc/ary/info/inftypes.hxx
@@ -0,0 +1,122 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_INFO_INFTYPES_HXX
+#define ARY_INFO_INFTYPES_HXX
+
+
+// USED SERVICES
+ // BASE CLASSES
+ // COMPONENTS
+ // PARAMETERS
+
+
+namespace ary
+{
+namespace info
+{
+
+
+
+
+typedef uintt GlobalTextId;
+
+
+
+/** Because this enum is used as index list for displayed
+ tag headlines, the items must neither be moved nor deleted.
+ Only adding to the end is allowed. atid_MAX always has to exist
+ and to be the last used value.
+ Also assigning numbers to the values is forbidden.
+*/
+enum E_AtTagId
+{
+ atid_ATT = 0,
+ atid_author,
+ atid_change,
+ atid_collab,
+ atid_contact,
+
+ atid_copyright,
+ atid_deprecated,
+ atid_descr,
+ atid_docdate,
+ atid_derive,
+
+ atid_dyn,
+ atid_instance,
+ atid_interface,
+ atid_invariant,
+ atid_life,
+
+ atid_multi,
+ atid_onerror,
+ atid_persist,
+ atid_postcond,
+ atid_precond,
+
+ atid_resp,
+ atid_return,
+ atid_short,
+ atid_todo,
+ atid_version,
+
+ atid_MAX
+};
+
+/** Because this enum is used as index list for displayed
+ tag headlines, the items must neither be moved nor deleted.
+ Only adding to the end is allowed. C_eAtTag_NrOfClasses always has to exist
+ and to be the last used value.
+ Also assigning other numbers to the values, than in this
+ existing scheme, is forbidden.
+*/
+enum E_AtTagClass
+{
+ atc_std = 0,
+
+ atc_base = atid_MAX,
+ atc_exception = atid_MAX + 1,
+ atc_implements = atid_MAX + 2,
+ atc_keyword = atid_MAX + 3,
+ atc_parameter = atid_MAX + 4,
+
+ atc_see = atid_MAX + 5,
+ atc_template = atid_MAX + 6,
+ atc_label = atid_MAX + 7,
+ atc_since = atid_MAX + 8,
+ C_eAtTag_NrOfClasses
+};
+
+
+
+} // namespace info
+} // namespace ary
+
+
+#endif
+
diff --git a/autodoc/inc/ary/itrange.hxx b/autodoc/inc/ary/itrange.hxx
new file mode 100644
index 000000000000..2c8b625b0c16
--- /dev/null
+++ b/autodoc/inc/ary/itrange.hxx
@@ -0,0 +1,80 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_ITRANGE_HXX
+#define ARY_ITRANGE_HXX
+// KORR_DEPRECATED_3.0
+
+
+// USED SERVICES
+ // BASE CLASSES
+ // COMPONENTS
+ // PARAMETERS
+#include <utility>
+
+
+
+
+namespace ary
+{
+
+template <typename ITER>
+class IteratorRange
+{
+ public:
+ IteratorRange(
+ ITER i_begin,
+ ITER i_end )
+ : itCurrent(i_begin),
+ itEnd(i_end)
+ {}
+ IteratorRange(
+ std::pair<ITER,ITER>
+ i_range )
+ : itCurrent(i_range.first),
+ itEnd(i_range.second)
+ {}
+
+ operator bool() const { return itCurrent != itEnd; }
+ IteratorRange & operator++() { ++itCurrent; return *this; }
+
+ ITER cur() const { return itCurrent; }
+ ITER end() const { return itEnd; }
+
+
+ private:
+ // DATA
+ ITER itCurrent;
+ ITER itEnd;
+};
+
+
+
+
+
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/loc/loc_dir.hxx b/autodoc/inc/ary/loc/loc_dir.hxx
new file mode 100644
index 000000000000..4d63d526b6df
--- /dev/null
+++ b/autodoc/inc/ary/loc/loc_dir.hxx
@@ -0,0 +1,145 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_LOC_DIR_HXX
+#define ARY_LOC_DIR_HXX
+
+// BASE CLASSES
+#include <ary/loc/loc_le.hxx>
+
+// USED SERVICES
+#include <ary/loc/loc_traits.hxx>
+#include <ary/symtreenode.hxx>
+
+namespace ary
+{
+namespace loc
+{
+ class File;
+}
+}
+
+
+
+
+namespace ary
+{
+namespace loc
+{
+
+
+/** Represents a directory for source code files.
+*/
+class Directory : public LocationEntity
+{
+ public:
+ enum E_ClassId { class_id = 7030 };
+
+ typedef ::ary::symtree::Node<LeNode_Traits> node_t;
+
+ /// Used for root directories.
+ explicit Directory(
+ Le_id i_assignedRoot );
+
+ /// Used for subdirectories which have a parent directory.
+ Directory(
+ const String & i_localName,
+ Le_id i_parentDirectory );
+ virtual ~Directory();
+
+ void Add_Dir(
+ const Directory & i_dir );
+ void Add_File(
+ const File & i_file );
+
+ Le_id Parent() const;
+ Le_id AssignedRoot() const;
+
+ Le_id Search_Dir(
+ const String & i_name ) const;
+ Le_id Search_File(
+ const String & i_name ) const;
+
+ const node_t & AsNode() const;
+ node_t & AsNode();
+
+ private:
+ struct Container;
+
+ // Interface csv::ConstProcessorClient:
+ virtual void do_Accept(
+ csv::ProcessorIfc & io_processor ) const;
+ // Interface ary::Object:
+ virtual ClassId get_AryClass() const;
+
+ // Interface LocationEntity:
+ virtual const String &
+ inq_LocalName() const;
+ virtual Le_id inq_ParentDirectory() const;
+
+ // DATA
+ String sLocalName;
+ Le_id nParentDirectory;
+ Le_id nAssignedRoot;
+ node_t aAssignedNode;
+ Dyn<Container> pChildren;
+};
+
+
+
+
+// IMPLEMENTATION
+inline Le_id
+Directory::Parent() const
+{
+ return nParentDirectory;
+}
+
+inline Le_id
+Directory::AssignedRoot() const
+{
+ return nAssignedRoot;
+}
+
+inline const Directory::node_t &
+Directory::AsNode() const
+{
+ return aAssignedNode;
+}
+
+inline Directory::node_t &
+Directory::AsNode()
+{
+ return aAssignedNode;
+}
+
+
+
+
+} // namespace loc
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/loc/loc_file.hxx b/autodoc/inc/ary/loc/loc_file.hxx
new file mode 100644
index 000000000000..63586ad4977d
--- /dev/null
+++ b/autodoc/inc/ary/loc/loc_file.hxx
@@ -0,0 +1,68 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_LOC_FILE_HXX
+#define ARY_LOC_FILE_HXX
+
+// BASE CLASSES
+#include <ary/loc/loc_filebase.hxx>
+
+
+
+
+namespace ary
+{
+namespace loc
+{
+
+
+/** Represents an unspecified source code file.
+*/
+class File : public FileBase
+{
+ public:
+ enum E_ClassId { class_id = 7100 };
+
+ File(
+ const String & i_sLocalName,
+ Le_id i_nParentDirectory );
+ virtual ~File();
+
+ private:
+ // Interface csv::ConstProcessorClient:
+ virtual void do_Accept(
+ csv::ProcessorIfc & io_processor ) const;
+ // Interface ary::Object:
+ virtual ClassId get_AryClass() const;
+};
+
+
+
+
+} // namespace loc
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/loc/loc_filebase.hxx b/autodoc/inc/ary/loc/loc_filebase.hxx
new file mode 100644
index 000000000000..8cb5c98cbc85
--- /dev/null
+++ b/autodoc/inc/ary/loc/loc_filebase.hxx
@@ -0,0 +1,72 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_LOC_FILEBASE_HXX
+#define ARY_LOC_FILEBASE_HXX
+
+// USED SERVICES
+ // BASE CLASSES
+#include <ary/loc/loc_le.hxx>
+ // COMPONENTS
+ // PARAMETERS
+
+
+namespace ary
+{
+namespace loc
+{
+
+
+
+/** Base class for classes representing source code files.
+*/
+class FileBase : public LocationEntity
+{
+ public:
+ virtual ~FileBase() {}
+
+ protected:
+ FileBase(
+ const String & i_localName ,
+ Le_id i_parentDirectory );
+ private:
+ // Interface LocationEntity:
+ virtual const String &
+ inq_LocalName() const;
+ virtual Le_id inq_ParentDirectory() const;
+
+ // DATA
+ String sLocalName;
+ Le_id nParentDirectory;
+};
+
+
+
+
+} // namespace loc
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/loc/loc_le.hxx b/autodoc/inc/ary/loc/loc_le.hxx
new file mode 100644
index 000000000000..fdf3ad077df5
--- /dev/null
+++ b/autodoc/inc/ary/loc/loc_le.hxx
@@ -0,0 +1,94 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_LOC_LE_HXX
+#define ARY_LOC_LE_HXX
+
+// USED SERVICES
+ // BASE CLASSES
+#include <ary/entity.hxx>
+ // COMPONENTS
+ // PARAMETERS
+#include <ary/loc/loc_types4loc.hxx>
+#include <ary/loc/loc_traits.hxx>
+
+
+
+namespace ary
+{
+namespace loc
+{
+
+
+/** Base class for all file locations in the Autodoc repository.
+*/
+class LocationEntity : public ::ary::Entity
+{
+ public:
+ typedef Le_Traits traits_t;
+
+ virtual ~LocationEntity() {}
+
+ Le_id LeId() const;
+ const String & LocalName() const;
+ Le_id ParentDirectory() const;
+
+ private:
+ virtual const String &
+ inq_LocalName() const = 0;
+ virtual Le_id inq_ParentDirectory() const = 0;
+};
+
+
+
+
+// IMPLEMENTATION
+inline Le_id
+LocationEntity::LeId() const
+{
+ return TypedId<LocationEntity>(Id());
+}
+
+inline const String &
+LocationEntity::LocalName() const
+{
+ return inq_LocalName();
+}
+
+inline Le_id
+LocationEntity::ParentDirectory() const
+{
+ return inq_ParentDirectory();
+}
+
+
+
+
+
+} // namespace loc
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/loc/loc_root.hxx b/autodoc/inc/ary/loc/loc_root.hxx
new file mode 100644
index 000000000000..5b789a8cbeaa
--- /dev/null
+++ b/autodoc/inc/ary/loc/loc_root.hxx
@@ -0,0 +1,110 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_LOC_PROJECT_HXX
+#define ARY_LOC_PROJECT_HXX
+
+// BASE CLASSES
+#include <ary/loc/loc_le.hxx>
+// USED SERVICES
+#include <cosv/ploc.hxx>
+#include <ary/loc/loc_dir.hxx>
+
+
+
+
+namespace ary
+{
+namespace loc
+{
+
+
+/** Represents a root directory for source files.
+*/
+class Root : public LocationEntity
+{
+ public:
+ enum E_ClassId { class_id = 7000 };
+
+ explicit Root(
+ const csv::ploc::Path &
+ i_rRootDirectoryPath );
+ void Assign_Directory(
+ Le_id i_assignedDirectory );
+ virtual ~Root();
+
+ // INQUIRY
+ const csv::ploc::Path &
+ Path() const;
+ Le_id MyDir() const;
+
+ private:
+ // Interface csv::ConstProcessorClient:
+ virtual void do_Accept(
+ csv::ProcessorIfc & io_processor ) const;
+ // Interface ary::Object:
+ virtual ClassId get_AryClass() const;
+
+ // Interface LocationEntity:
+ virtual const String &
+ inq_LocalName() const;
+ virtual Le_id inq_ParentDirectory() const;
+
+ // DATA
+ csv::ploc::Path aPath;
+ String sPathAsString;
+ Le_id aMyDirectory;
+};
+
+
+
+
+// IMPLEMENTATION
+inline void
+Root::Assign_Directory(Le_id i_assignedDirectory)
+{
+ aMyDirectory = i_assignedDirectory;
+}
+
+inline const csv::ploc::Path &
+Root::Path() const
+{
+ return aPath;
+}
+
+inline Le_id
+Root::MyDir() const
+{
+ return aMyDirectory;
+}
+
+
+
+
+} // namespace loc
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/loc/loc_traits.hxx b/autodoc/inc/ary/loc/loc_traits.hxx
new file mode 100644
index 000000000000..52cd6dd9b22b
--- /dev/null
+++ b/autodoc/inc/ary/loc/loc_traits.hxx
@@ -0,0 +1,115 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_LOC_TRAITS_HXX
+#define ARY_LOC_TRAITS_HXX
+
+// USED SERVICES
+ // BASE CLASSES
+ // COMPONENTS
+ // PARAMETERS
+#include <ary/loc/loc_types4loc.hxx>
+
+
+namespace ary
+{
+namespace symtree
+{
+ template <class> class Node;
+}
+}
+
+
+
+
+namespace ary
+{
+namespace loc
+{
+
+
+
+/** Basic traits for derived ones of ->LocationEntity.
+*/
+struct Le_Traits
+{
+ typedef LocationEntity entity_base_type;
+ typedef Le_id id_type;
+
+ static entity_base_type &
+ EntityOf_(
+ id_type i_id );
+};
+
+
+/** An instance of SYMBOL_TRAITS for ->::ary::symtree::Node.
+
+ @see ::ary::symtree::Node
+*/
+struct LeNode_Traits : public Le_Traits
+{
+ static symtree::Node<LeNode_Traits> *
+ NodeOf_(
+ entity_base_type & i_entity );
+
+ static entity_base_type *
+ ParentOf_(
+ const entity_base_type &
+ i_entity );
+ template <class KEY>
+ static id_type Search_(
+ const entity_base_type &
+ i_entity,
+ const KEY & i_localKey );
+};
+
+
+
+/** An instance of COMPARE for ->::ary::SortedIds<>.
+
+ @see ::ary::SortedIds<>
+*/
+struct Le_Compare : public Le_Traits
+{
+ typedef String key_type;
+
+ static const key_type &
+ KeyOf_(
+ const entity_base_type &
+ i_entity );
+ static bool Lesser_(
+ const key_type & i_1,
+ const key_type & i_2 );
+};
+
+
+
+
+
+} // namespace loc
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/loc/loc_types4loc.hxx b/autodoc/inc/ary/loc/loc_types4loc.hxx
new file mode 100644
index 000000000000..fd45476a7187
--- /dev/null
+++ b/autodoc/inc/ary/loc/loc_types4loc.hxx
@@ -0,0 +1,54 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_LOC_TYPES4LOC_HXX
+#define ARY_LOC_TYPES4LOC_HXX
+
+// USED SERVICES
+ // BASE CLASSES
+ // COMPONENTS
+ // PARAMETERS
+#include <ary/types.hxx>
+
+
+namespace ary
+{
+namespace loc
+{
+
+class LocationEntity;
+
+
+
+typedef ::ary::TypedId<LocationEntity> Le_id;
+
+
+
+
+} // namespace loc
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/loc/locp_le.hxx b/autodoc/inc/ary/loc/locp_le.hxx
new file mode 100644
index 000000000000..585282f233f6
--- /dev/null
+++ b/autodoc/inc/ary/loc/locp_le.hxx
@@ -0,0 +1,88 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_LOCP_LE_HXX
+#define ARY_LOCP_LE_HXX
+
+
+// USED SERVICES
+ // BASE CLASSES
+ // COMPONENTS
+ // PARAMETERS
+#include <cosv/ploc.hxx>
+#include <ary/loc/loc_types4loc.hxx>
+
+
+namespace ary
+{
+namespace loc
+{
+ class Root;
+ class Directory;
+ class File;
+}
+}
+
+
+namespace ary
+{
+namespace loc
+{
+
+
+
+/** Provides access to files and directories stored in the
+ repository.
+*/
+class LocationPilot
+{
+ public:
+ virtual ~LocationPilot() {}
+
+ virtual Root & CheckIn_Root(
+ const csv::ploc::Path &
+ i_rPath ) = 0;
+ virtual File & CheckIn_File(
+ const String & i_name,
+ const csv::ploc::DirectoryChain &
+ i_subPath,
+ Le_id i_root ) = 0;
+
+ virtual Root & Find_Root(
+ Le_id i_id ) const = 0;
+ virtual Directory & Find_Directory(
+ Le_id i_id ) const = 0;
+ virtual File & Find_File(
+ Le_id i_id ) const = 0;
+};
+
+
+
+
+} // namespace loc
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/namesort.hxx b/autodoc/inc/ary/namesort.hxx
new file mode 100644
index 000000000000..bb766a3773d1
--- /dev/null
+++ b/autodoc/inc/ary/namesort.hxx
@@ -0,0 +1,75 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_NAMESORT_HXX
+#define ARY_NAMESORT_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+ // COMPONENTS
+ // PARAMETERS
+
+namespace ary
+{
+
+/** Provides sensible sorting of ASCII names in programming languages.
+
+ @descr
+ Names are compared case insensitive first. Only after they appear
+ equal that way, there is an additional case sensitive comparison.
+ The second comparison sorts upper case before lower case.
+
+*/
+struct LesserName
+{
+ bool operator()(
+ const String & i_s1,
+ const String & i_s2 ) const;
+ private:
+ // DATA
+
+ static const csv::CharOrder_Table
+ aOrdering1_;
+ static const csv::CharOrder_Table
+ aOrdering2_;
+};
+
+inline bool
+LesserName::operator()( const String & i_s1,
+ const String & i_s2 ) const
+{
+ int result = i_s1.compare(aOrdering1_,i_s2);
+ if (result == 0)
+ result = i_s1.compare(aOrdering2_,i_s2);
+ return result < 0;
+}
+
+
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/object.hxx b/autodoc/inc/ary/object.hxx
new file mode 100644
index 000000000000..8212312f8ec7
--- /dev/null
+++ b/autodoc/inc/ary/object.hxx
@@ -0,0 +1,70 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_OBJECT_HXX
+#define ARY_OBJECT_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <cosv/tpl/processor.hxx>
+ // COMPONENTS
+ // PARAMETERS
+#include <ary/types.hxx>
+
+
+namespace ary
+{
+
+
+/** Interface for every class, that is stored within the
+ Autodoc Repository.
+*/
+class Object : public csv::ConstProcessorClient
+{
+ public:
+ virtual ~Object() {}
+
+ /// @return Type id of most derived class.
+ ClassId AryClass() const;
+
+ private:
+ virtual ClassId get_AryClass() const = 0;
+};
+
+
+
+inline ClassId
+Object::AryClass() const
+{
+ return get_AryClass();
+}
+
+
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/qualiname.hxx b/autodoc/inc/ary/qualiname.hxx
new file mode 100644
index 000000000000..94a886968d10
--- /dev/null
+++ b/autodoc/inc/ary/qualiname.hxx
@@ -0,0 +1,103 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_QUALINAME_HXX
+#define ARY_QUALINAME_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+ // COMPONENTS
+ // PARAMETERS
+#include <cosv/tpl/tpltools.hxx>
+
+
+namespace ary
+{
+
+class QualifiedName
+{
+ public:
+ typedef StringVector::const_iterator namespace_iterator;
+
+ QualifiedName(
+ uintt i_nSize = 0);
+
+ /// @see AssignText()
+ QualifiedName(
+ const char * i_sText,
+ const char * i_sSeparator );
+ ~QualifiedName();
+
+ QualifiedName & operator+=(
+ const String & i_sNamespaceName )
+ { if (i_sNamespaceName.length() > 0)
+ aNamespace.push_back(i_sNamespaceName);
+ return *this; }
+ /// @precond i_nIndex < NamespaceDepth().
+ String & operator[](
+ uintt i_nIndex )
+ { csv_assert(i_nIndex < aNamespace.size());
+ return aNamespace[i_nIndex]; }
+ void Init(
+ bool i_bAbsolute )
+ { Empty(); bIsAbsolute = i_bAbsolute; }
+ /** Reads a qualified name from a string.
+ If the last two charcters are "()", the inquiry IsFunction() will return
+ true.
+ */
+ void AssignText(
+ const char * i_sText,
+ const char * i_sSeparator );
+ void SetLocalName(
+ const String & i_sLocalName )
+ { sLocalName = i_sLocalName; }
+ void Empty() { csv::erase_container(aNamespace); sLocalName.clear(); bIsAbsolute = false; }
+
+ const String & LocalName() const { return sLocalName; }
+ namespace_iterator first_namespace() const { return aNamespace.begin(); }
+ namespace_iterator end_namespace() const { return aNamespace.end(); }
+ uintt NamespaceDepth() const { return aNamespace.size(); }
+
+ bool IsAbsolute() const { return bIsAbsolute; }
+ bool IsQualified() const { return aNamespace.size() > 0; }
+ bool IsFunction() const { return bIsFunction; }
+
+ private:
+ // DATA
+ StringVector aNamespace;
+ String sLocalName;
+ bool bIsAbsolute; /// true := beginning with "::".
+ bool bIsFunction; /// true := ending with "()"
+};
+
+
+
+
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/sequentialids.hxx b/autodoc/inc/ary/sequentialids.hxx
new file mode 100644
index 000000000000..94b6cfa4823e
--- /dev/null
+++ b/autodoc/inc/ary/sequentialids.hxx
@@ -0,0 +1,153 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_SEQUENTIALIDS_HXX
+#define ARY_SEQUENTIALIDS_HXX
+
+
+// USED SERVICES
+ // BASE CLASSES
+ // OTHER
+#include <algorithm>
+
+
+
+namespace ary
+{
+
+
+/** Implementation of a set of children to an entity in the Autodoc
+ repository. The children are in the sequence of addition.
+*/
+template<class ID>
+class SequentialIds
+{
+ public:
+ typedef std::vector<ID> data_t;
+ typedef typename data_t::const_iterator const_iterator;
+
+ // LIFECYCLE
+ explicit SequentialIds(
+ std::size_t i_reserve = 0 );
+ ~SequentialIds();
+
+ // OPERATIONS
+ void Add(
+ const ID & i_child );
+ // INQUIRY
+ const_iterator Begin() const;
+ const_iterator End() const;
+ std::size_t Size() const;
+
+ template <class IDENTIFY>
+ ID Find(
+ IDENTIFY i_find ) const;
+ template <class IDENTIFY>
+ // Workaround for Solaris8 compiler: return type has to match alphabetically
+ typename std::vector<ID>::const_iterator
+ Search(
+ IDENTIFY i_find ) const;
+ private:
+ // DATA
+ data_t aData;
+};
+
+
+
+
+
+
+
+// IMPLEMENTATION
+
+template <class ID>
+SequentialIds<ID>::SequentialIds(std::size_t i_reserve)
+ : aData()
+{
+ if (i_reserve > 0)
+ aData.reserve(i_reserve);
+}
+
+template <class ID>
+SequentialIds<ID>::~SequentialIds()
+{
+}
+
+template <class ID>
+inline void
+SequentialIds<ID>::Add(const ID & i_child)
+{
+ aData.push_back(i_child);
+}
+
+template <class ID>
+inline typename SequentialIds<ID>::const_iterator
+SequentialIds<ID>::Begin() const
+{
+ return aData.begin();
+}
+
+template <class ID>
+inline typename SequentialIds<ID>::const_iterator
+SequentialIds<ID>::End() const
+{
+ return aData.end();
+}
+
+template <class ID>
+inline std::size_t
+SequentialIds<ID>::Size() const
+{
+ return aData.size();
+}
+
+template <class ID>
+template <class IDENTIFY>
+ID
+SequentialIds<ID>::Find(IDENTIFY i_find) const
+{
+ const_iterator
+ ret = std::find_if(aData.begin(), aData.end(), i_find);
+ csv_assert(ret != aData.end());
+ return *ret;
+}
+
+template <class ID>
+template <class IDENTIFY>
+// Workaround for Solaris8 compiler: return type has to match alphabetically
+// typename SequentialIds<ID>::const_iterator
+typename std::vector<ID>::const_iterator
+SequentialIds<ID>::Search(IDENTIFY i_find) const
+{
+ return std::find_if(aData.begin(), aData.end(), i_find);
+}
+
+
+
+
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/stdconstiter.hxx b/autodoc/inc/ary/stdconstiter.hxx
new file mode 100644
index 000000000000..5b05ff6279ea
--- /dev/null
+++ b/autodoc/inc/ary/stdconstiter.hxx
@@ -0,0 +1,98 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_STDCONSTITER_HXX
+#define ARY_STDCONSTITER_HXX
+// KORR_DEPRECATED_3.0
+
+
+// USED SERVICES
+ // BASE CLASSES
+ // COMPONENTS
+ // PARAMETERS
+
+
+namespace ary
+{
+
+template <class ELEM>
+
+class StdConstIterator
+{
+ public:
+ virtual ~StdConstIterator() {}
+
+ void operator++() { do_Advance(); }
+ const ELEM & operator*() const { return *inq_CurElement(); }
+ operator bool() const { return inq_CurElement() != 0; }
+
+ /// Needed as replacement for operator bool() in gcc 2.95.
+ bool IsValid() const { return operator bool(); }
+ bool IsSorted() const { return inq_IsSorted(); }
+
+ protected:
+ StdConstIterator() {}
+
+ private:
+ //Locals
+ virtual void do_Advance() = 0;
+ virtual const ELEM *
+ inq_CurElement() const = 0;
+ virtual bool inq_IsSorted() const = 0;
+
+ // Forbidden:
+ StdConstIterator(const StdConstIterator<ELEM>&);
+ StdConstIterator<ELEM> & operator=(const StdConstIterator<ELEM>&);
+};
+
+
+template <class ELEM>
+class Dyn_StdConstIterator
+{
+ public:
+ typedef StdConstIterator<ELEM> client_type;
+
+ Dyn_StdConstIterator(
+ DYN client_type * pass_dpIterator = 0 )
+ : pClient(pass_dpIterator) {}
+ Dyn_StdConstIterator<ELEM> &
+ operator=(
+ DYN client_type * pass_dpIterator )
+ { pClient = pass_dpIterator;
+ return *this; }
+ client_type & operator*() const { return *pClient.MutablePtr(); }
+
+ private:
+ Dyn<client_type> pClient;
+};
+
+
+
+
+
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/symtreenode.hxx b/autodoc/inc/ary/symtreenode.hxx
new file mode 100644
index 000000000000..8d2f07165ee2
--- /dev/null
+++ b/autodoc/inc/ary/symtreenode.hxx
@@ -0,0 +1,344 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_SYMTREE_NODE_HXX
+#define ARY_SYMTREE_NODE_HXX
+
+
+// USED SERVICES
+ // BASE CLASSES
+ // OTHER
+
+
+
+namespace ary
+{
+namespace symtree
+{
+
+
+
+/** Represents a node in a tree of symbols like a namespace tree or a
+ directory tree.
+
+ @tpl NODE_TRAITS
+ Needs to define the types:
+ entity_base_type: The type of the entities in that storage,
+ e.g. ->ary::cpp::CodeEntity.
+ id_type: The type of the ids of those entities,
+ e.g. ->ary::cpp::Ce_id.
+
+ Needs to define the functions:
+ 1. static entity_base_type &
+ EntityOf_(
+ id_type i_id );
+ 2. static symtree::Node<LeNode_Traits> *
+ NodeOf_(
+ const entity_base_type &
+ i_entity );
+ 3. static const String &
+ LocalNameOf_(
+ const entity_base_type &
+ i_entity );
+ 4. static entity_base_type *
+ ParentOf_(
+ const entity_base_type &
+ i_entity );
+ 5. template <class KEY>
+ static id_t Search_(
+ const entity_base_type &
+ i_entity,
+ const KEY & i_localKey );
+*/
+template <class NODE_TRAITS>
+class Node
+{
+ public:
+ typedef Node<NODE_TRAITS> node_self;
+ typedef typename NODE_TRAITS::entity_base_type entity_t;
+ typedef typename NODE_TRAITS::id_type id_t;
+
+
+ // LIFECYCLE
+ /// @attention Always needs to be followed by ->Assign_Entity()!
+ Node();
+ explicit Node(
+ entity_t & i_entity );
+ void Assign_Entity(
+ entity_t & i_entity );
+ ~Node();
+ // INQUIRY
+ id_t Id();
+ const String Name() const;
+ int Depth() const;
+ const entity_t & Entity() const;
+ const node_self * Parent() const;
+
+ /** Gets a child with a specific name and of a specific type.
+
+ There may be more childs with the same name.
+
+ @return id_t(0), if no matching child is found.
+ */
+ template <class KEY>
+ typename NODE_TRAITS::id_type
+ Search(
+ const KEY & i_localKey ) const
+ {
+ // Inline here to workaround SUNW8 compiler bug, works in SUNW12.
+ return NODE_TRAITS::Search_(Entity(), i_localKey);
+ }
+
+
+ /** Gets a child with a specific qualified name below this node.
+
+ The child may not exists.
+ */
+ template <class KEY>
+ void SearchBelow(
+ id_t & o_return, // Workaround SUNW8 compiler bug
+ StringVector::const_iterator
+ i_qualifiedSearchedName_begin,
+ StringVector::const_iterator
+ i_qualifiedSearchedName_end,
+ const KEY & i_localKey ) const;
+
+ /** Gets a child with a specific qualified name, either below this node
+ or below any of the parent nodes.
+
+ The child may not exists.
+ */
+ template <class KEY>
+ void SearchUp(
+ id_t & o_return, // Workaround SUNW8 compiler bug
+ StringVector::const_iterator
+ i_qualifiedSearchedName_begin,
+ StringVector::const_iterator
+ i_qualifiedSearchedName_end,
+ const KEY & i_localKey ) const;
+ // ACCESS
+ entity_t & Entity();
+ node_self * Parent();
+
+ private:
+ // Forbid copying:
+ Node(const node_self&);
+ node_self& operator=(const node_self&);
+
+ // Locals
+ void InitDepth();
+ node_self * Get_Parent() const;
+ node_self * NodeOf(
+ id_t i_id ) const;
+
+ // DATA
+ entity_t * pEntity;
+ int nDepth;
+};
+
+
+
+
+// IMPLEMENTATION
+
+template <class NODE_TRAITS>
+inline const typename Node<NODE_TRAITS>::entity_t &
+Node<NODE_TRAITS>::Entity() const
+{
+ csv_assert(pEntity != 0);
+ return *pEntity;
+}
+
+template <class NODE_TRAITS>
+inline Node<NODE_TRAITS> *
+Node<NODE_TRAITS>::NodeOf(id_t i_id) const
+{
+ if (i_id.IsValid())
+ return NODE_TRAITS::NodeOf_(NODE_TRAITS::EntityOf_(i_id));
+ return 0;
+}
+
+template <class NODE_TRAITS>
+inline Node<NODE_TRAITS> *
+Node<NODE_TRAITS>::Get_Parent() const
+{
+ entity_t *
+ parent = NODE_TRAITS::ParentOf_(Entity());
+ if (parent != 0)
+ return NODE_TRAITS::NodeOf_(*parent);
+ return 0;
+}
+
+template <class NODE_TRAITS>
+Node<NODE_TRAITS>::Node()
+ : pEntity(0),
+ nDepth(0)
+{
+}
+
+template <class NODE_TRAITS>
+Node<NODE_TRAITS>::Node(entity_t & i_entity)
+ : pEntity(&i_entity),
+ nDepth(0)
+{
+ InitDepth();
+}
+
+template <class NODE_TRAITS>
+void
+Node<NODE_TRAITS>::Assign_Entity(entity_t & i_entity)
+{
+ pEntity = &i_entity;
+ InitDepth();
+}
+
+template <class NODE_TRAITS>
+Node<NODE_TRAITS>::~Node()
+{
+}
+
+template <class NODE_TRAITS>
+inline typename Node<NODE_TRAITS>::id_t
+Node<NODE_TRAITS>::Id()
+{
+ return NODE_TRAITS::IdOf(Entity());
+}
+
+template <class NODE_TRAITS>
+inline const String
+Node<NODE_TRAITS>::Name() const
+{
+ return NODE_TRAITS::LocalNameOf_(Entity());
+}
+
+template <class NODE_TRAITS>
+inline int
+Node<NODE_TRAITS>::Depth() const
+{
+ return nDepth;
+}
+
+template <class NODE_TRAITS>
+inline const Node<NODE_TRAITS> *
+Node<NODE_TRAITS>::Parent() const
+{
+ return Get_Parent();
+}
+
+template <class NODE_TRAITS>
+template <class KEY>
+void
+Node<NODE_TRAITS>::SearchBelow(
+ id_t & o_return, // Workaround SUNW8 compiler bug
+ StringVector::const_iterator i_qualifiedSearchedName_begin,
+ StringVector::const_iterator i_qualifiedSearchedName_end,
+ const KEY & i_localKey ) const
+{
+ if (i_qualifiedSearchedName_begin != i_qualifiedSearchedName_end)
+ {
+ id_t
+ next = Search(*i_qualifiedSearchedName_begin);
+ if (next.IsValid())
+ {
+ const node_self *
+ subnode = NodeOf(next);
+ if (subnode != 0)
+ {
+ subnode->SearchBelow( o_return,
+ i_qualifiedSearchedName_begin+1,
+ i_qualifiedSearchedName_end ,
+ i_localKey );
+ return;
+ }
+ }
+ o_return = id_t(0);
+ return;
+ }
+
+ o_return = Search(i_localKey);
+}
+
+template <class NODE_TRAITS>
+template <class KEY>
+void
+Node<NODE_TRAITS>::SearchUp(
+ id_t & o_return, // Workaround SUNW8 compiler bug
+ StringVector::const_iterator i_qualifiedSearchedName_begin,
+ StringVector::const_iterator i_qualifiedSearchedName_end,
+ const KEY & i_localKey ) const
+{
+ SearchBelow( o_return,
+ i_qualifiedSearchedName_begin,
+ i_qualifiedSearchedName_end,
+ i_localKey );
+ if (o_return.IsValid())
+ return;
+
+ node_self *
+ parent = Get_Parent();
+ if (parent != 0)
+ {
+ parent->SearchUp( o_return,
+ i_qualifiedSearchedName_begin,
+ i_qualifiedSearchedName_end,
+ i_localKey );
+ }
+}
+
+template <class NODE_TRAITS>
+typename Node<NODE_TRAITS>::entity_t &
+Node<NODE_TRAITS>::Entity()
+{
+ csv_assert(pEntity != 0);
+ return *pEntity;
+}
+
+template <class NODE_TRAITS>
+inline Node<NODE_TRAITS> *
+Node<NODE_TRAITS>::Parent()
+{
+ return Get_Parent();
+}
+
+template <class NODE_TRAITS>
+void
+Node<NODE_TRAITS>::InitDepth()
+{
+ Node<NODE_TRAITS> *
+ pp = Get_Parent();
+ if (pp != 0)
+ nDepth = pp->Depth() + 1;
+ else
+ nDepth = 0;
+}
+
+
+
+
+} // namespace symtree
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/types.hxx b/autodoc/inc/ary/types.hxx
new file mode 100644
index 000000000000..0f8d28c6b151
--- /dev/null
+++ b/autodoc/inc/ary/types.hxx
@@ -0,0 +1,130 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_TYPES_HXX
+#define ARY_TYPES_HXX
+
+// USED SERVICES
+ // BASE CLASSES
+ // OTHER
+
+
+namespace ary
+{
+
+
+typedef uintt Rid;
+typedef uintt ClassId;
+
+
+
+// Deprecated:
+typedef Rid Gid; /// Group Id. Id of a group.
+typedef UINT8 SlotAccessId; /// Access to a Slot
+typedef std::set< Rid, std::less< Rid > > Set_Rid;
+typedef std::vector<Rid> List_Rid;
+
+
+
+
+
+/** This is a global id, providing as well an entity's class as its
+ id.
+*/
+class GlobalId
+{
+ public:
+ GlobalId()
+ : nClass(0),
+ nId(0) {}
+ GlobalId(
+ ClassId i_class,
+ Rid i_id )
+ : nClass(i_class),
+ nId(i_id) {}
+ ~GlobalId() {}
+
+ bool IsValid() const { return nClass != 0
+ AND
+ nId != 0; }
+ ClassId Class() const { return nClass; }
+ Rid Id() const { return nId; }
+
+ private:
+ // DATA
+ ClassId nClass;
+ Rid nId;
+};
+
+
+typedef std::vector<GlobalId> List_GlobalIds;
+
+
+/** This is a typed repository id. It allows to get
+ an object of a specific type.
+*/
+template <class IFC>
+class TypedId
+{
+ public:
+ typedef TypedId<IFC> self;
+
+
+ explicit TypedId(
+ Rid i_nId = 0 )
+ : nId(i_nId) {}
+ TypedId<IFC> & operator=(
+ Rid i_nId )
+ { nId = i_nId; return *this; }
+ bool operator==(
+ const TypedId<IFC> &
+ i_nId ) const
+ { return nId == i_nId.nId; }
+ bool operator!=(
+ const TypedId<IFC> &
+ i_nId ) const
+ { return NOT operator==(i_nId); }
+ bool operator<(
+ const TypedId<IFC> &
+ i_nId ) const
+ { return nId < i_nId.nId; }
+
+ bool IsValid() const { return nId != 0; }
+ Rid Value() const { return nId; }
+
+ static self Null_() { return self(0); }
+
+ private:
+ // DATA
+ Rid nId;
+};
+
+
+
+
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary/udmhost.hxx b/autodoc/inc/ary/udmhost.hxx
new file mode 100644
index 000000000000..eca8b89c2894
--- /dev/null
+++ b/autodoc/inc/ary/udmhost.hxx
@@ -0,0 +1,62 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_UDMHOST_HXX
+#define ARY_UDMHOST_HXX
+// KORR_DEPRECATED_3.0
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <ary/host.hxx>
+ // COMPONENTS
+ // PARAMETERS
+
+namespace ary
+{
+
+
+
+class UdmHost : public Host
+{
+ public:
+ enum E_ClassId { class_id = 1000 };
+
+ UdmHost();
+ virtual ~UdmHost();
+
+ private:
+ virtual Host_ClassId
+ inq_ClassId() const;
+};
+
+
+
+
+} // namespace ary
+#endif
diff --git a/autodoc/inc/ary_i/ci_atag2.hxx b/autodoc/inc/ary_i/ci_atag2.hxx
new file mode 100644
index 000000000000..db0caaa5d673
--- /dev/null
+++ b/autodoc/inc/ary_i/ci_atag2.hxx
@@ -0,0 +1,79 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_CI_ATAG2_HXX
+#define ARY_CI_ATAG2_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+ // COMPONENTS
+#include <ary_i/ci_text2.hxx>
+ // PARAMETERS
+
+
+
+namespace ary
+{
+namespace inf
+{
+
+
+class DocumentationDisplay;
+
+class AtTag2
+{
+ public:
+ virtual ~AtTag2() {}
+
+ virtual void DisplayAt(
+ DocumentationDisplay &
+ o_rDisplay ) const = 0;
+
+ const char * Title() const { return sTitle; }
+ const DocuTex2 & Text() const { return aText; }
+ DocuTex2 & Access_Text() { return aText; }
+
+ protected:
+ AtTag2(
+ const char * i_sTitle)
+ : sTitle(i_sTitle) {}
+ String sTitle;
+ DocuTex2 aText;
+};
+
+
+
+// IMPLEMENTATION
+
+} // namespace inf
+} // namespace ary
+
+
+#endif
+
diff --git a/autodoc/inc/ary_i/ci_text2.hxx b/autodoc/inc/ary_i/ci_text2.hxx
new file mode 100644
index 000000000000..fbc7fcbc4095
--- /dev/null
+++ b/autodoc/inc/ary_i/ci_text2.hxx
@@ -0,0 +1,92 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_CINFO_CI_TEXT2_HXX
+#define ARY_CINFO_CI_TEXT2_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+ // COMPONENTS
+ // PARAMETERS
+
+
+namespace ary
+{
+namespace inf
+{
+
+
+class DocumentationDisplay;
+
+
+class DocuToken
+{
+ public:
+ virtual ~DocuToken() {}
+ virtual void DisplayAt(
+ DocumentationDisplay &
+ o_rDisplay ) const = 0;
+ virtual bool IsWhiteOnly() const = 0;
+};
+
+
+class DocuTex2
+{
+ public:
+ typedef std::vector< DocuToken * > TokenList;
+
+ DocuTex2();
+ virtual ~DocuTex2();
+
+ virtual void DisplayAt(
+ DocumentationDisplay &
+ o_rDisplay ) const;
+ void AddToken(
+ DYN DocuToken & let_drToken );
+
+ const TokenList & Tokens() const { return aTokens; }
+ bool IsEmpty() const;
+ const String & TextOfFirstToken() const;
+
+ String & Access_TextOfFirstToken();
+
+ private:
+ TokenList aTokens;
+};
+
+
+
+// IMPLEMENTATION
+
+} // namespace inf
+} // namespace ary
+
+
+#endif
+
diff --git a/autodoc/inc/ary_i/d_token.hxx b/autodoc/inc/ary_i/d_token.hxx
new file mode 100644
index 000000000000..39303321c015
--- /dev/null
+++ b/autodoc/inc/ary_i/d_token.hxx
@@ -0,0 +1,282 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef CSI_DSAPI_D_TOKEN_HXX
+#define CSI_DSAPI_D_TOKEN_HXX
+
+// BASE CLASSES
+#include <ary_i/ci_text2.hxx>
+#include <ary_i/ci_atag2.hxx>
+
+
+namespace ary
+{
+namespace inf
+{
+ class DocumentationDisplay;
+}
+}
+
+
+
+namespace csi
+{
+namespace dsapi
+{
+
+using ary::inf::DocumentationDisplay;
+
+
+class DT_Dsapi : public ary::inf::DocuToken
+{
+ public:
+ virtual void DisplayAt(
+ DocumentationDisplay &
+ o_rDisplay ) const = 0;
+ virtual bool IsWhiteOnly() const;
+};
+
+
+
+class DT_TextToken : public DT_Dsapi
+{
+ public:
+ explicit DT_TextToken(
+ const char * i_sText )
+ : sText(i_sText) {}
+ explicit DT_TextToken(
+ const String & i_sText )
+ : sText(i_sText) {}
+ virtual ~DT_TextToken();
+
+ virtual void DisplayAt(
+ DocumentationDisplay &
+ o_rDisplay ) const;
+ const char * GetText() const { return sText; }
+ const String & GetTextStr() const { return sText; }
+
+ String & Access_Text() { return sText; }
+
+ virtual bool IsWhiteOnly() const;
+
+ private:
+ String sText;
+};
+
+class DT_White : public DT_Dsapi
+{
+ public:
+ DT_White() {}
+ virtual ~DT_White();
+
+ virtual void DisplayAt(
+ DocumentationDisplay &
+ o_rDisplay ) const;
+ virtual bool IsWhiteOnly() const;
+};
+
+
+class DT_MLTag : public DT_Dsapi
+{
+ public:
+ enum E_Kind
+ {
+ k_unknown = 0,
+ k_begin,
+ k_end,
+ k_single
+ };
+};
+
+class DT_MupType : public DT_MLTag
+{
+ public:
+ explicit DT_MupType( /// Constructor for End-Tag
+ bool ) /// Must be there, but is not evaluated.
+ : bIsBegin(false) {}
+ explicit DT_MupType( /// Constructor for Begin-Tag
+ const String & i_sScope )
+ : sScope(i_sScope), bIsBegin(true) {}
+ virtual ~DT_MupType();
+
+ virtual void DisplayAt(
+ DocumentationDisplay &
+ o_rDisplay ) const;
+ const String & Scope() const { return sScope; }
+ bool IsBegin() const { return bIsBegin; }
+
+ private:
+ String sScope;
+ bool bIsBegin;
+};
+
+class DT_MupMember : public DT_MLTag
+{
+ public:
+ explicit DT_MupMember( /// Constructor for End-Tag
+ bool ) /// Must be there, but is not evaluated.
+ : bIsBegin(false) {}
+ DT_MupMember( /// Constructor for Begin-Tag
+ const String & i_sScope )
+ : sScope(i_sScope), bIsBegin(true) {}
+ virtual ~DT_MupMember();
+
+ virtual void DisplayAt(
+ DocumentationDisplay &
+ o_rDisplay ) const;
+ const String & Scope() const { return sScope; }
+ bool IsBegin() const { return bIsBegin; }
+
+ private:
+ String sScope;
+ bool bIsBegin;
+};
+
+class DT_MupConst : public DT_Dsapi
+{
+ public:
+ DT_MupConst(
+ const char * i_sConstText )
+ : sConstText(i_sConstText) {}
+ virtual ~DT_MupConst();
+
+ virtual void DisplayAt(
+ DocumentationDisplay &
+ o_rDisplay ) const;
+ const char * GetText() const { return sConstText; }
+
+ private:
+ String sConstText; /// Without HTML.
+};
+
+
+class DT_Style : public DT_MLTag
+{
+ public:
+ DT_Style(
+ const char * i_sPlainHtmlTag,
+ bool i_bNewLine )
+ : sText(i_sPlainHtmlTag), bNewLine(i_bNewLine) {}
+ virtual ~DT_Style();
+
+ virtual void DisplayAt(
+ DocumentationDisplay &
+ o_rDisplay ) const;
+ const char * GetText() const { return sText; }
+ bool IsStartOfNewLine() const
+ { return bNewLine; }
+ private:
+ String sText; /// With HTML.
+ E_Kind eKind;
+ bool bNewLine;
+};
+
+class DT_EOL : public DT_Dsapi
+{
+ public:
+ DT_EOL() {}
+ virtual ~DT_EOL();
+
+ virtual void DisplayAt(
+ DocumentationDisplay &
+ o_rDisplay ) const;
+ virtual bool IsWhiteOnly() const;
+};
+
+
+class DT_AtTag : public ary::inf::AtTag2
+{
+ public:
+ void AddToken(
+ DYN ary::inf::DocuToken &
+ let_drToken )
+ { aText.AddToken(let_drToken); }
+ void SetName(
+ const char * i_sName )
+ { sTitle = i_sName; }
+
+ protected:
+ DT_AtTag(
+ const char * i_sTitle )
+ : ary::inf::AtTag2(i_sTitle) {}
+};
+
+class DT_StdAtTag : public DT_AtTag
+{
+ public:
+ explicit DT_StdAtTag(
+ const char * i_sTitle )
+ : DT_AtTag(i_sTitle) {}
+ virtual ~DT_StdAtTag();
+
+ virtual void DisplayAt(
+ DocumentationDisplay &
+ o_rDisplay ) const;
+};
+
+class DT_SeeAlsoAtTag : public DT_AtTag
+{
+ public:
+ DT_SeeAlsoAtTag() : DT_AtTag("") {}
+ virtual ~DT_SeeAlsoAtTag();
+
+ virtual void DisplayAt(
+ DocumentationDisplay &
+ o_rDisplay ) const;
+ const String & LinkText() const { return sTitle; } // Missbrauch von sTitle
+};
+
+class DT_ParameterAtTag : public DT_AtTag
+{
+ public:
+ DT_ParameterAtTag() : DT_AtTag("") {}
+ virtual ~DT_ParameterAtTag();
+
+ void SetTitle(
+ const char * i_sTitle );
+ virtual void DisplayAt(
+ DocumentationDisplay &
+ o_rDisplay ) const;
+};
+
+class DT_SinceAtTag : public DT_AtTag
+{
+ public:
+ DT_SinceAtTag() : DT_AtTag("Since version") {}
+ virtual ~DT_SinceAtTag();
+
+ virtual void DisplayAt(
+ DocumentationDisplay &
+ o_rDisplay ) const;
+};
+
+
+} // namespace dsapi
+} // namespace csi
+
+#endif
+
diff --git a/autodoc/inc/ary_i/disdocum.hxx b/autodoc/inc/ary_i/disdocum.hxx
new file mode 100644
index 000000000000..51f708a751ea
--- /dev/null
+++ b/autodoc/inc/ary_i/disdocum.hxx
@@ -0,0 +1,146 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_DISDOCUM_HXX
+#define ARY_DISDOCUM_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+ // COMPONENTS
+ // PARAMETERS
+
+
+namespace csi
+{
+namespace dsapi
+{
+class DT_TextToken;
+class DT_MupType;
+class DT_MupMember;
+class DT_MupConst;
+class DT_Style;
+class DT_EOL;
+class DT_StdAtTag;
+class DT_SeeAlsoAtTag;
+class DT_ParameterAtTag;
+class DT_SinceAtTag;
+} // namespace dsapi
+} // namespace csi
+
+
+namespace ary
+{
+namespace inf
+{
+
+
+
+class DocumentationDisplay
+{
+ public:
+
+ virtual ~DocumentationDisplay() { }
+
+ virtual void Display_TextToken(
+ const csi::dsapi::DT_TextToken &
+ i_rToken ) = 0;
+ virtual void Display_White() = 0;
+ virtual void Display_MupType(
+ const csi::dsapi::DT_MupType & i_rToken ) = 0;
+ virtual void Display_MupMember(
+ const csi::dsapi::DT_MupMember &
+ i_rToken ) = 0;
+ virtual void Display_MupConst(
+ const csi::dsapi::DT_MupConst &
+ i_rToken ) = 0;
+ virtual void Display_Style(
+ const csi::dsapi::DT_Style & i_rToken ) = 0;
+ virtual void Display_EOL() = 0;
+ virtual void Display_StdAtTag(
+ const csi::dsapi::DT_StdAtTag &
+ i_rToken ) = 0;
+ virtual void Display_SeeAlsoAtTag(
+ const csi::dsapi::DT_SeeAlsoAtTag &
+ i_rToken ) = 0;
+ virtual void Display_ParameterAtTag(
+ const csi::dsapi::DT_ParameterAtTag &
+ i_rToken ) = 0;
+ virtual void Display_SinceAtTag(
+ const csi::dsapi::DT_SinceAtTag &
+ i_rToken ) = 0;
+};
+
+
+class DocuTag_Display : public DocumentationDisplay
+{
+ public:
+ // Dummies, implemented in source\ary_i\kernel\ci_atag2.cxx
+ virtual void Display_TextToken(
+ const csi::dsapi::DT_TextToken &
+ i_rToken );
+ virtual void Display_White();
+ virtual void Display_MupType(
+ const csi::dsapi::DT_MupType & i_rToken );
+ virtual void Display_MupMember(
+ const csi::dsapi::DT_MupMember &
+ i_rToken );
+ virtual void Display_MupConst(
+ const csi::dsapi::DT_MupConst &
+ i_rToken );
+ virtual void Display_Style(
+ const csi::dsapi::DT_Style & i_rToken );
+ virtual void Display_EOL();
+};
+
+class DocuText_Display : public DocumentationDisplay
+{
+ public:
+ // Dummies, implemented in source\ary_i\kernel\ci_text2.cxx
+ virtual void Display_StdAtTag(
+ const csi::dsapi::DT_StdAtTag &
+ i_rToken );
+ virtual void Display_SeeAlsoAtTag(
+ const csi::dsapi::DT_SeeAlsoAtTag &
+ i_rToken );
+ virtual void Display_ParameterAtTag(
+ const csi::dsapi::DT_ParameterAtTag &
+ i_rToken );
+ virtual void Display_SinceAtTag(
+ const csi::dsapi::DT_SinceAtTag &
+ i_rToken );
+};
+
+
+
+} // namespace inf
+} // namespace ary
+
+
+#endif
+
diff --git a/autodoc/inc/autodoc/displaying.hxx b/autodoc/inc/autodoc/displaying.hxx
new file mode 100644
index 000000000000..8fb21c6b6ecb
--- /dev/null
+++ b/autodoc/inc/autodoc/displaying.hxx
@@ -0,0 +1,76 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef AUTODOC_DISPLAYING_HXX
+#define AUTODOC_DISPLAYING_HXX
+
+
+namespace display
+{
+ class CorporateFrame;
+}
+
+
+
+namespace autodoc
+{
+
+class HtmlDisplay_UdkStd;
+class HtmlDisplay_Idl_Ifc;
+
+// class TextDisplay_FunctionList_Ifc;
+
+
+/** Interface for parsing code of a programming language and
+ delivering the information into an Autodoc Repository.
+**/
+class DisplayToolsFactory_Ifc
+{
+ public:
+ virtual ~DisplayToolsFactory_Ifc() {}
+ static DisplayToolsFactory_Ifc &
+ GetIt_();
+
+// virtual DYN autodoc::TextDisplay_FunctionList_Ifc *
+// Create_TextDisplay_FunctionList() const = 0;
+
+ virtual DYN autodoc::HtmlDisplay_UdkStd *
+ Create_HtmlDisplay_UdkStd() const = 0;
+ virtual DYN autodoc::HtmlDisplay_Idl_Ifc *
+ Create_HtmlDisplay_Idl() const = 0;
+
+ virtual const display::CorporateFrame &
+ Create_StdFrame() const = 0;
+};
+
+
+} // namespace autodoc
+
+
+
+#endif
+
diff --git a/autodoc/inc/autodoc/dsp_html_std.hxx b/autodoc/inc/autodoc/dsp_html_std.hxx
new file mode 100644
index 000000000000..ff3beae8ff31
--- /dev/null
+++ b/autodoc/inc/autodoc/dsp_html_std.hxx
@@ -0,0 +1,213 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef AUTODOC_DSP_HTML_STD_HXX
+#define AUTODOC_DSP_HTML_STD_HXX
+
+
+
+namespace ary
+{
+ namespace cpp
+ {
+ class Gate;
+ }
+ namespace idl
+ {
+ class Gate;
+ }
+}
+
+namespace display
+{
+ class CorporateFrame;
+}
+
+
+namespace autodoc
+{
+
+
+class HtmlDisplay_UdkStd
+{
+ public:
+ virtual ~HtmlDisplay_UdkStd() {}
+
+ /** Displays the names of several C++ code entities within the
+ given namespace (or the global namespace as default). All
+ subnamespaces are included.
+
+ Output has following format:
+
+ =========================================================================
+ OutputDirectory
+ index.html
+ def-all.html
+ prj\
+ sal\
+ index.html // Overview about project
+
+ f-FileName[1,2,...] // Overview about file
+ f-OtherFileName[1,2,...]
+ ...
+ def-FileName[1,2,...] // #defines and macros in file
+ def-OtherFileName[1,2,...]
+ ...
+ rtl\
+ ...
+ cppu\
+ ...
+ cppuhelper\
+ ...
+ ...
+ ix\
+ ix-a.html
+ ix-b.html
+ ...
+ ix-z.html
+ ix-_.html
+ ix-other.html
+
+ cpp\
+ index.html // Overview about global namespace
+
+ Namespace_A\
+ Namespace_C\
+ index.html // Overview about namespace C
+ ...
+ ...
+
+ index.html // Overview about namespace A
+
+ c-ClassName_X.html // Description of class
+ ...
+ e-EnumName.html // Description of enum
+ ...
+ t-TypedefName.html // Description of typedef
+ ...
+ o-Filename.html // Descriptions of operations in this file in this namespace
+ ...
+ d-Filename.html // Descriptions of data in this file in this namespace
+ ...
+
+ ClassName_X\
+ c-ClassName_Y.html
+ e-EnumName.html
+ t-TypedefName.html
+ o.html // Descriptions of operations in class X
+ d.html // Descriptions of data in class X
+
+ ClassName_Y\
+ ...
+ ...
+
+ idl\
+ ...
+ java\
+ ...
+ =========================================================================
+
+
+ @param i_sOutputDirectory
+ Directory for output. Path must be given in correct
+ syntax for the actual operating system without final
+ path delimiter. If this is 0 or "", the current
+ working directory is chosen.
+ @param i_rAryGate
+ The access to the Autodoc Repository.
+ @param i_rLayout
+ Gives parameters for the appearance of the HTML output.
+ @param i_pProjectList
+ If this is != 0, then only code entities which are declared
+ in this projects are displayed.
+ */
+ void Run(
+ const char * i_sOutputDirectory,
+ const ary::cpp::Gate &
+ i_rAryGate,
+ const display::CorporateFrame &
+ i_rLayout );
+ private:
+ virtual void do_Run(
+ const char * i_sOutputDirectory,
+ const ary::cpp::Gate &
+ i_rAryGate,
+ const display::CorporateFrame &
+ i_rLayout ) = 0;
+};
+
+// IMPLEMENTATION
+
+inline void
+HtmlDisplay_UdkStd::Run( const char * i_sOutputDirectory,
+ const ary::cpp::Gate & i_rAryGate,
+ const display::CorporateFrame & i_rLayout )
+{
+ do_Run( i_sOutputDirectory, i_rAryGate, i_rLayout );
+}
+
+
+
+// class HtmlDisplay_Idl_Ifc
+
+class HtmlDisplay_Idl_Ifc
+{
+ public:
+ virtual ~HtmlDisplay_Idl_Ifc() {}
+
+ void Run(
+ const char * i_sOutputDirectory,
+ const ary::idl::Gate &
+ i_rAryGate,
+ const display::CorporateFrame &
+ i_rLayout );
+ private:
+ virtual void do_Run(
+ const char * i_sOutputDirectory,
+ const ary::idl::Gate &
+ i_rAryGate,
+ const display::CorporateFrame &
+ i_rLayout ) = 0;
+};
+
+
+
+
+// IMPLEMENTATION
+inline void
+HtmlDisplay_Idl_Ifc::Run( const char * i_sOutputDirectory,
+ const ary::idl::Gate & i_rAryGate,
+ const display::CorporateFrame & i_rLayout )
+{
+ do_Run( i_sOutputDirectory, i_rAryGate, i_rLayout );
+}
+
+
+
+
+} // namespace autodoc
+#endif
diff --git a/autodoc/inc/autodoc/dsp_txt_flist.hxx b/autodoc/inc/autodoc/dsp_txt_flist.hxx
new file mode 100644
index 000000000000..a8015a1d9537
--- /dev/null
+++ b/autodoc/inc/autodoc/dsp_txt_flist.hxx
@@ -0,0 +1,65 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef AUTODOC_DSP_TXT_FLIST_HXX
+#define AUTODOC_DSP_TXT_FLIST_HXX
+
+#include <iostream>
+
+
+namespace ary
+{
+ namespace cpp
+ {
+ class DisplayGate;
+ }
+}
+
+
+namespace autodoc
+{
+
+class TextDisplay_FunctionList_Ifc
+{
+ public:
+ virtual ~TextDisplay_FunctionList_Ifc() {}
+
+ /** Displays the names of all C++ functions and methods within the
+ given namespace (or the global namespace as default). All
+ subnamespaces are included.
+ */
+ virtual void Run(
+ ostream & o_rStream,
+ const ary::cpp::DisplayGate &
+ i_rAryGate ) = 0; /// If i_pNamespace == 0, the global namespace is displayed.
+};
+
+
+} // namespace autodoc
+
+#endif
+
diff --git a/autodoc/inc/autodoc/filecoli.hxx b/autodoc/inc/autodoc/filecoli.hxx
new file mode 100644
index 000000000000..8b13d18649ef
--- /dev/null
+++ b/autodoc/inc/autodoc/filecoli.hxx
@@ -0,0 +1,72 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_PARSER_FILECOLI_HXX
+#define ADC_PARSER_FILECOLI_HXX
+
+
+namespace autodoc
+{
+
+class FileCollector_Ifc
+{
+ public:
+ // TYPES
+ typedef StringVector::const_iterator const_iterator;
+
+ enum E_SearchMode
+ {
+ flat,
+ recursive
+ };
+
+ // LIFECYCLE
+ virtual ~FileCollector_Ifc() {}
+
+ // OPERATIONS
+ virtual uintt AddFilesFrom(
+ const char * i_sRootDir,
+ const char * i_sFilter,
+ E_SearchMode i_eSearchMode ) = 0;
+ virtual uintt AddFile(
+ const char * i_sFilePath ) = 0;
+ virtual void EraseAll() = 0;
+
+ // INQUIRY
+ virtual const_iterator
+ Begin() const = 0;
+ virtual const_iterator
+ End() const = 0;
+ virtual uintt Size() const = 0;
+};
+
+
+} // namespace autodoc
+
+
+#endif
+
diff --git a/autodoc/inc/autodoc/parsing.hxx b/autodoc/inc/autodoc/parsing.hxx
new file mode 100644
index 000000000000..825e84261f89
--- /dev/null
+++ b/autodoc/inc/autodoc/parsing.hxx
@@ -0,0 +1,78 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef AUTODOC_PARSING_HXX
+#define AUTODOC_PARSING_HXX
+
+
+
+namespace autodoc
+{
+
+class CodeParser_Ifc;
+class DocumentationParser_Ifc;
+class FileCollector_Ifc;
+
+
+/** Interface for parsing code of a programming language and
+ delivering the information into an Autodoc Repository.
+**/
+class ParseToolsFactory_Ifc
+{
+ public:
+ virtual ~ParseToolsFactory_Ifc() {}
+ static ParseToolsFactory_Ifc &
+ GetIt_();
+
+ virtual DYN autodoc::CodeParser_Ifc *
+ Create_Parser_Cplusplus() const = 0;
+
+// virtual DYN autodoc::CodeParser_Ifc *
+// CreateParser_UnoIDL() const = 0;
+// virtual DYN autodoc::CodeParser_Ifc *
+// CreateParser_Java() const = 0;
+// virtual DYN autodoc::CodeParser_Ifc *
+// CreateParser_StoredProcedures() const = 0;
+
+ virtual DYN autodoc::DocumentationParser_Ifc *
+ Create_DocuParser_AutodocStyle() const = 0;
+
+// virtual DYN autodoc::DocumentationParser_Ifc *
+// CreateDocuParser_StarOfficeAPIStyle() const = 0;
+
+ virtual DYN autodoc::FileCollector_Ifc *
+ Create_FileCollector(
+ uintt i_nEstimatedNrOfFiles ) const = 0; /// Should be somewhat larger than the maximal estimated number of files.
+};
+
+
+} // namespace autodoc
+
+
+
+#endif
+
diff --git a/autodoc/inc/autodoc/prs_code.hxx b/autodoc/inc/autodoc/prs_code.hxx
new file mode 100644
index 000000000000..e50dba1ad7bc
--- /dev/null
+++ b/autodoc/inc/autodoc/prs_code.hxx
@@ -0,0 +1,76 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef AUTODOC_PRS_CODE_HXX
+#define AUTODOC_PRS_CODE_HXX
+
+
+
+namespace csv
+{
+ namespace ploc
+ {
+ class Path;
+ }
+}
+
+namespace ary
+{
+ class Repository;
+}
+
+namespace autodoc
+{
+ class FileCollector_Ifc;
+ class DocumentationParser_Ifc;
+
+
+
+
+/** Interface for parsing code of a programming language and
+ delivering the information into an Autodoc Repository.
+**/
+class CodeParser_Ifc
+{
+ public:
+ virtual ~CodeParser_Ifc() {}
+
+ virtual void Setup(
+ ary::Repository & o_rRepository,
+ const autodoc::DocumentationParser_Ifc &
+ i_rDocumentationInterpreter ) = 0;
+
+ virtual void Run(
+ const autodoc::FileCollector_Ifc &
+ i_rFiles ) = 0;
+};
+
+
+
+
+} // namespace autodoc
+#endif
diff --git a/autodoc/inc/autodoc/prs_docu.hxx b/autodoc/inc/autodoc/prs_docu.hxx
new file mode 100644
index 000000000000..f73b2631af90
--- /dev/null
+++ b/autodoc/inc/autodoc/prs_docu.hxx
@@ -0,0 +1,59 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_PARSER_PRS_DOCU_HXX
+#define ADC_PARSER_PRS_DOCU_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+ // COMPONENTS
+ // PARAMETERS
+
+
+
+namespace autodoc
+{
+
+class TkpDocuContext;
+
+class DocumentationParser_Ifc
+{
+ public:
+ virtual ~DocumentationParser_Ifc() {}
+
+ virtual DYN TkpDocuContext *
+ Create_DocuContext() const = 0;
+};
+
+
+} // namespace autodoc
+
+
+#endif
+
diff --git a/autodoc/inc/autodoc/x_parsing.hxx b/autodoc/inc/autodoc/x_parsing.hxx
new file mode 100644
index 000000000000..36f7d71155be
--- /dev/null
+++ b/autodoc/inc/autodoc/x_parsing.hxx
@@ -0,0 +1,73 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef AUTODOC_X_PARSING_HXX
+#define AUTODOC_X_PARSING_HXX
+
+// USED SERVICES
+#include <iostream>
+
+
+
+
+namespace autodoc
+{
+
+class X_Parser_Ifc
+{
+ public:
+ // TYPES
+ enum E_Event
+ {
+ x_Any = 0,
+ x_InvalidChar,
+ x_UnexpectedToken,
+ x_UnexpectedEOF,
+ x_UnspecifiedSyntaxError
+ };
+
+ // LIFECYCLE
+ virtual ~X_Parser_Ifc() {}
+
+ // INQUIRY
+ virtual E_Event GetEvent() const = 0;
+ virtual void GetInfo(
+ std::ostream & o_rOutputMedium ) const = 0;
+};
+
+
+} // namespace autodoc
+
+std::ostream & operator<<(
+ std::ostream & o_rOut,
+ const autodoc::X_Parser_Ifc &
+ i_rException );
+
+
+
+
+#endif
diff --git a/autodoc/inc/display/corframe.hxx b/autodoc/inc/display/corframe.hxx
new file mode 100644
index 000000000000..e03659807bec
--- /dev/null
+++ b/autodoc/inc/display/corframe.hxx
@@ -0,0 +1,82 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_CORFRAME_HXX
+#define ADC_CORFRAME_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+ // COMPONENTS
+ // PARAMETERS
+
+class Html_Image;
+
+
+namespace display
+{
+
+
+class CorporateFrame
+{
+ public:
+ // LIFECYCLE
+ virtual ~CorporateFrame() {}
+
+ // INQUIRY
+ virtual DYN Html_Image *
+ LogoSrc() const = 0;
+ virtual const char *
+ LogoLink() const = 0;
+ virtual const char *
+ CopyrightText() const = 0;
+
+ virtual const char *
+ CssStyle() const = 0;
+ virtual const char *
+ CssStylesExplanation() const = 0;
+ virtual const char *
+ DevelopersGuideHtmlRoot() const = 0;
+ virtual bool SimpleLinks() const = 0;
+
+ // ACCESS
+ virtual void Set_DevelopersGuideHtmlRoot(
+ const String & i_directory ) = 0;
+ virtual void Set_SimpleLinks() = 0;
+};
+
+
+
+// IMPLEMENTATION
+
+
+} // namespace display
+
+
+#endif
+
diff --git a/autodoc/inc/parser/parser.hxx b/autodoc/inc/parser/parser.hxx
new file mode 100644
index 000000000000..ad5f9a7adac4
--- /dev/null
+++ b/autodoc/inc/parser/parser.hxx
@@ -0,0 +1,57 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_PARSER_HXX
+#define ADC_PARSER_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+ // COMPONENTS
+ // PARAMETERS
+
+namespace autodoc
+{
+ class FileCollector_Ifc;
+}
+
+
+class CodeParser
+{
+ public:
+ virtual ~CodeParser() {}
+
+ virtual void Run(
+ const autodoc::FileCollector_Ifc &
+ i_rFiles ) = 0;
+};
+
+
+
+#endif
+
diff --git a/autodoc/inc/parser/parserinfo.hxx b/autodoc/inc/parser/parserinfo.hxx
new file mode 100644
index 000000000000..3afe646dd4f0
--- /dev/null
+++ b/autodoc/inc/parser/parserinfo.hxx
@@ -0,0 +1,64 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_PARSERINFO_HXX
+#define ADC_PARSERINFO_HXX
+
+// USED SERVICES
+ // BASE CLASSES
+ // COMPONENTS
+ // PARAMETERS
+
+/** Interface about current state of parsing.
+*/
+class ParserInfo
+{
+ public:
+ // OPERATIONS
+ void Set_CurFile(
+ const String & i_file,
+ bool i_bUseLines = false)
+ { sCurFile = i_file;
+ nCurLine = i_bUseLines ? 1 : 0; }
+ void Increment_CurLine()
+ { ++nCurLine; }
+
+ // INQUIRY
+ const String & CurFile() const { return sCurFile; }
+ uintt CurLine() const { return nCurLine; }
+
+ protected:
+ // LIFECYCLE
+ ParserInfo() : sCurFile(), nCurLine(0) {}
+ ~ParserInfo() {}
+ private:
+ String sCurFile;
+ uintt nCurLine;
+
+};
+
+#endif
diff --git a/autodoc/inc/parser/unoidl.hxx b/autodoc/inc/parser/unoidl.hxx
new file mode 100644
index 000000000000..2ec434304756
--- /dev/null
+++ b/autodoc/inc/parser/unoidl.hxx
@@ -0,0 +1,79 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_UNOIDL_HXX
+#define ADC_UNOIDL_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <parser/parser.hxx>
+#include <parser/parserinfo.hxx>
+ // COMPONENTS
+ // PARAMETERS
+
+
+namespace ary
+{
+ class Repository;
+}
+namespace autodoc
+{
+ class FileCollector_Ifc;
+}
+
+namespace autodoc
+{
+
+
+class IdlParser : public ::CodeParser,
+ public ::ParserInfo
+{
+ public:
+ IdlParser(
+ ary::Repository & io_rRepository );
+
+ virtual void Run(
+ const autodoc::FileCollector_Ifc &
+ i_rFiles );
+
+ private:
+ // DATA
+ ary::Repository * pRepository;
+};
+
+
+
+// IMPLEMENTATION
+
+
+} // namespace autodoc
+
+
+#endif
+
diff --git a/autodoc/prj/build.lst b/autodoc/prj/build.lst
new file mode 100644
index 000000000000..fd4d3f7c7963
--- /dev/null
+++ b/autodoc/prj/build.lst
@@ -0,0 +1,67 @@
+ar autodoc : cosv udm sal NULL
+ar autodoc usr1 - all ar_mkout NULL
+ar autodoc\inc get - all ar_i NULL
+ar autodoc\inc\ary get - all ar_ir NULL
+ar autodoc\inc\ary\cpp get - all ar_ir_cpp NULL
+ar autodoc\inc\ary\idl get - all ar_ir_idl NULL
+ar autodoc\inc\ary\info get - all ar_ir_info NULL
+ar autodoc\inc\ary\loc get - all ar_ir_loc NULL
+ar autodoc\inc\ary\task get - all ar_ir_task NULL
+ar autodoc\inc\ary_i get - all ar_ir_cinfo NULL
+ar autodoc\inc\autodoc get - all ar_iau NULL
+ar autodoc\inc\display get - all ar_idispl2 NULL
+ar autodoc\inc\parser get - all ar_iparse2 NULL
+ar autodoc\prj get - all ar_prj NULL
+ar autodoc\util get - all ar_util NULL
+ar autodoc\source get - all ar_s NULL
+ar autodoc\source\inc get - all ar_si NULL
+ar autodoc\source\inc\display get - all ar_si_display NULL
+ar autodoc\source\inc\oodb get - all ar_si_oodb2 NULL
+ar autodoc\source\inc\tools get - all ar_si_tools NULL
+ar autodoc\source\inc\utility get - all ar_si_util2 NULL
+ar autodoc\source\ary get - all ar_sr NULL
+ar autodoc\source\ary\inc get - all ar_sri NULL
+ar autodoc\source\ary\inc\cpp get - all ar_sri_cpp NULL
+ar autodoc\source\ary\inc\idl get - all ar_sri_idl NULL
+ar autodoc\source\ary\inc\loc get - all ar_sri_loc NULL
+ar autodoc\source\ary\inc\store get - all ar_sri_store NULL
+ar autodoc\source\ary\cpp nmake - all ar_sr_cpp NULL
+ar autodoc\source\ary\doc nmake - all ar_sr_doc NULL
+ar autodoc\source\ary\idl nmake - all ar_sr_idl NULL
+ar autodoc\source\ary\info nmake - all ar_sr_info NULL
+ar autodoc\source\ary\kernel nmake - all ar_sr_kernel NULL
+ar autodoc\source\ary\loc nmake - all ar_sr_loc NULL
+ar autodoc\source\ary_i get - all ar_sr_i NULL
+ar autodoc\source\ary_i\kernel nmake - all ar_sr_cinfo NULL
+ar autodoc\source\display get - all ar_sd NULL
+ar autodoc\source\display\inc get - all ar_sdi NULL
+ar autodoc\source\display\inc\funclist get - all ar_sdi_flist NULL
+ar autodoc\source\display\inc\html get - all ar_sdi_html NULL
+ar autodoc\source\display\html nmake - all ar_sd_html NULL
+ar autodoc\source\display\kernel nmake - all ar_sd_kernel NULL
+ar autodoc\source\display\idl nmake - all ar_sd_idl NULL
+ar autodoc\source\display\toolkit nmake - all ar_sd_tkit NULL
+ar autodoc\source\parser get - all ar_sp NULL
+ar autodoc\source\parser\inc get - all ar_spi NULL
+ar autodoc\source\parser\inc\adoc get - all ar_spi_adoc NULL
+ar autodoc\source\parser\inc\cpp get - all ar_spi_cpp NULL
+ar autodoc\source\parser\inc\semantic get - all ar_spi_sem NULL
+ar autodoc\source\parser\inc\tokens get - all ar_spi_tok NULL
+ar autodoc\source\parser\adoc nmake - all ar_sp_adoc NULL
+ar autodoc\source\parser\cpp nmake - all ar_sp_cpp NULL
+ar autodoc\source\parser\kernel nmake - all ar_sp_krnl NULL
+ar autodoc\source\parser\semantic nmake - all ar_sp_sem NULL
+ar autodoc\source\parser\tokens nmake - all ar_sp_tok NULL
+ar autodoc\source\parser_i get - all ar_sp2 NULL
+ar autodoc\source\parser_i\inc get - all ar_sp2i NULL
+ar autodoc\source\parser_i\inc\s2_dsapi get - all ar_sp2i_idoc NULL
+ar autodoc\source\parser_i\inc\s2_luidl get - all ar_sp2i_cpp NULL
+ar autodoc\source\parser_i\inc\semantic get - all ar_sp2i_sem NULL
+ar autodoc\source\parser_i\inc\tokens get - all ar_sp2i_tok NULL
+ar autodoc\source\parser_i\idl nmake - all ar_sp2_idl NULL
+ar autodoc\source\parser_i\idoc nmake - all ar_sp2_idoc NULL
+ar autodoc\source\parser_i\tokens nmake - all ar_sp2_tok NULL
+ar autodoc\source\tools nmake - all ar_st NULL
+ar autodoc\source\mkinc get - all ar_smk NULL
+ar autodoc\source\exes get - all ar_se NULL
+ar autodoc\source\exes\adc_uni nmake - all ar_se_uni ar_sr_cpp ar_sr_doc ar_sr_idl ar_sr_info ar_sr_kernel ar_sr_loc ar_sr_cinfo ar_sd_html ar_sd_kernel ar_sd_idl ar_sp_adoc ar_sp_cpp ar_sp_krnl ar_sp_sem ar_sp_tok ar_sp2_idl ar_sd_tkit ar_sp2_idoc ar_sp2_tok ar_st NULL
diff --git a/autodoc/prj/d.lst b/autodoc/prj/d.lst
new file mode 100644
index 000000000000..c73e559f0729
--- /dev/null
+++ b/autodoc/prj/d.lst
@@ -0,0 +1,3 @@
+..\%__SRC%\bin\autodoc.exe %_DEST%\bin%_EXT%\autodoc.exe
+..\%__SRC%\bin\autodoc %_DEST%\bin%_EXT%\autodoc
+
diff --git a/autodoc/source/ary/cpp/c_builtintype.cxx b/autodoc/source/ary/cpp/c_builtintype.cxx
new file mode 100644
index 000000000000..fc245ae0985b
--- /dev/null
+++ b/autodoc/source/ary/cpp/c_builtintype.cxx
@@ -0,0 +1,127 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <ary/cpp/c_builtintype.hxx>
+
+
+// NOT FULLY DEFINED SERVICES
+#include <ary/cpp/c_type.hxx>
+
+
+namespace ary
+{
+namespace cpp
+{
+
+
+
+
+//********************** Type **************************//
+Rid
+Type::inq_RelatedCe() const
+{
+ return 0;
+}
+
+
+//********************** BuiltInType **************************//
+
+BuiltInType::BuiltInType( const String & i_sName,
+ E_TypeSpecialisation i_eSpecialisation )
+ : sName( i_sName ),
+ eSpecialisation( i_eSpecialisation )
+{
+}
+
+String
+BuiltInType::SpecializedName_( const char * i_sName,
+ E_TypeSpecialisation i_eTypeSpecialisation )
+{
+ StreamLock
+ aStrLock(60);
+ StreamStr &
+ ret = aStrLock();
+
+ switch ( i_eTypeSpecialisation )
+ {
+ case TYSP_unsigned:
+ ret << "u_";
+ break;
+ case TYSP_signed:
+ if (strcmp(i_sName,"char") == 0)
+ ret << "s_";
+ break;
+ default:
+ ;
+
+ } // end switch
+
+ ret << i_sName;
+ return String(ret.c_str());
+}
+
+void
+BuiltInType::do_Accept(csv::ProcessorIfc & io_processor) const
+{
+ csv::CheckedCall(io_processor,*this);
+}
+
+ary::ClassId
+BuiltInType::get_AryClass() const
+{
+ return class_id;
+}
+
+bool
+BuiltInType::inq_IsConst() const
+{
+ return false;
+}
+
+void
+BuiltInType::inq_Get_Text( StreamStr & , // o_rPreName
+ StreamStr & o_rName,
+ StreamStr & , // o_rPostName
+ const Gate & ) const // i_rGate
+{
+ switch (eSpecialisation)
+ {
+ case TYSP_unsigned: o_rName << "unsigned "; break;
+ case TYSP_signed: o_rName << "signed "; break;
+
+ default: // Does nothing.
+ ;
+ }
+ o_rName << sName;
+}
+
+
+
+
+} // namespace cpp
+} // namespace ary
diff --git a/autodoc/source/ary/cpp/c_class.cxx b/autodoc/source/ary/cpp/c_class.cxx
new file mode 100644
index 000000000000..8867c1d9e856
--- /dev/null
+++ b/autodoc/source/ary/cpp/c_class.cxx
@@ -0,0 +1,284 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <ary/cpp/c_class.hxx>
+
+
+// NOT FULLY DECLARED SERVICES
+#include <slots.hxx>
+#include "c_slots.hxx"
+
+
+
+namespace ary
+{
+namespace cpp
+{
+
+Class::Class( const String & i_sLocalName,
+ Ce_id i_nOwner,
+ E_Protection i_eProtection,
+ loc::Le_id i_nFile,
+ E_ClassKey i_eClassKey )
+ : aEssentials( i_sLocalName,
+ i_nOwner,
+ i_nFile ),
+ aAssignedNode(),
+ aBaseClasses(),
+ aTemplateParameterTypes(),
+ aClasses(),
+ aEnums(),
+ aTypedefs(),
+ aOperations(),
+ aStaticOperations(),
+ aData(),
+ aStaticData(),
+ aFriendClasses(),
+ aFriendOperations(),
+ aKnownDerivatives(),
+ eClassKey(i_eClassKey),
+ eProtection(i_eProtection),
+ eVirtuality(VIRTUAL_none)
+{
+ aAssignedNode.Assign_Entity(*this);
+}
+
+Class::~Class()
+{
+}
+
+void
+Class::Add_BaseClass( const S_Classes_Base & i_rBaseClass )
+{
+ aBaseClasses.push_back(i_rBaseClass);
+}
+
+void
+Class::Add_TemplateParameterType( const String & i_sLocalName,
+ Type_id i_nIdAsType )
+{
+ aTemplateParameterTypes.push_back(
+ List_TplParam::value_type(i_sLocalName,i_nIdAsType) );
+}
+
+void
+Class::Add_LocalClass( const String & i_sLocalName,
+ Cid i_nId )
+{
+ aClasses.push_back( S_LocalCe(i_sLocalName, i_nId) );
+}
+
+void
+Class::Add_LocalEnum( const String & i_sLocalName,
+ Cid i_nId )
+{
+ aEnums.push_back( S_LocalCe(i_sLocalName, i_nId) );
+}
+
+void
+Class::Add_LocalTypedef( const String & i_sLocalName,
+ Cid i_nId )
+{
+ aTypedefs.push_back( S_LocalCe(i_sLocalName, i_nId) );
+}
+
+void
+Class::Add_LocalOperation( const String & i_sLocalName,
+ Cid i_nId )
+{
+ aOperations.push_back( S_LocalCe(i_sLocalName, i_nId) );
+}
+
+void
+Class::Add_LocalStaticOperation( const String & i_sLocalName,
+ Cid i_nId )
+{
+ aStaticOperations.push_back( S_LocalCe(i_sLocalName, i_nId) );
+}
+
+void
+Class::Add_LocalData( const String & i_sLocalName,
+ Cid i_nId )
+{
+ aData.push_back( S_LocalCe(i_sLocalName, i_nId) );
+}
+
+void
+Class::Add_LocalStaticData( const String & i_sLocalName,
+ Cid i_nId )
+{
+ aStaticData.push_back( S_LocalCe(i_sLocalName, i_nId) );
+}
+
+
+struct find_name
+{
+ find_name(
+ const String & i_name )
+ : sName(i_name) {}
+
+ bool operator()(
+ const S_LocalCe & i_lce ) const
+ { return i_lce.sLocalName == sName; }
+ private:
+ String sName;
+};
+
+Ce_id
+Class::Search_Child(const String & i_key) const
+{
+ Ce_id
+ ret = Ce_id(Search_LocalClass(i_key));
+ if (ret.IsValid())
+ return ret;
+
+ CIterator_Locals
+ itret = std::find_if(aEnums.begin(), aEnums.end(), find_name(i_key));
+ if (itret != aEnums.end())
+ return (*itret).nId;
+ itret = std::find_if(aTypedefs.begin(), aTypedefs.end(), find_name(i_key));
+ if (itret != aTypedefs.end())
+ return (*itret).nId;
+ itret = std::find_if(aData.begin(), aData.end(), find_name(i_key));
+ if (itret != aData.end())
+ return (*itret).nId;
+ itret = std::find_if(aStaticData.begin(), aStaticData.end(), find_name(i_key));
+ if (itret != aStaticData.end())
+ return (*itret).nId;
+ return Ce_id(0);
+}
+
+Rid
+Class::Search_LocalClass( const String & i_sName ) const
+{
+ CIterator_Locals itFound = PosOfName(aClasses, i_sName);
+ if (itFound != aClasses.end())
+ return (*itFound).nId.Value();
+ return 0;
+}
+
+const String &
+Class::inq_LocalName() const
+{
+ return aEssentials.LocalName();
+}
+
+Cid
+Class::inq_Owner() const
+{
+ return aEssentials.Owner();
+}
+
+loc::Le_id
+Class::inq_Location() const
+{
+ return aEssentials.Location();
+}
+
+void
+Class::do_Accept(csv::ProcessorIfc & io_processor) const
+{
+ csv::CheckedCall(io_processor,*this);
+}
+
+ClassId
+Class::get_AryClass() const
+{
+ return class_id;
+}
+
+Gid
+Class::inq_Id_Group() const
+{
+ return static_cast<Gid>(Id());
+}
+
+const ary::cpp::CppEntity &
+Class::inq_RE_Group() const
+{
+ return *this;
+}
+
+const group::SlotList &
+Class::inq_Slots() const
+{
+ static const SlotAccessId aProjectSlotData[]
+ = { SLOT_Bases,
+ SLOT_NestedClasses,
+ SLOT_Enums,
+ SLOT_Typedefs,
+ SLOT_Operations,
+ SLOT_StaticOperations,
+ SLOT_Data,
+ SLOT_StaticData,
+ SLOT_FriendClasses,
+ SLOT_FriendOperations };
+ static const std::vector< SlotAccessId >
+ aSlots( &aProjectSlotData[0],
+ &aProjectSlotData[0]
+ + sizeof aProjectSlotData / sizeof (SlotAccessId) );
+ return aSlots;
+}
+
+
+DYN Slot *
+Class::inq_Create_Slot( SlotAccessId i_nSlot ) const
+{
+ switch ( i_nSlot )
+ {
+ case SLOT_Bases: return new Slot_BaseClass(aBaseClasses);
+ case SLOT_NestedClasses: return new Slot_ListLocalCe(aClasses);
+ case SLOT_Enums: return new Slot_ListLocalCe(aEnums);
+ case SLOT_Typedefs: return new Slot_ListLocalCe(aTypedefs);
+ case SLOT_Operations: return new Slot_ListLocalCe(aOperations);
+ case SLOT_StaticOperations: return new Slot_ListLocalCe(aStaticOperations);
+ case SLOT_Data: return new Slot_ListLocalCe(aData);
+ case SLOT_StaticData: return new Slot_ListLocalCe(aStaticData);
+ case SLOT_FriendClasses: return new Slot_SequentialIds<Ce_id>(aFriendClasses);
+ case SLOT_FriendOperations: return new Slot_SequentialIds<Ce_id>(aFriendOperations);
+ default:
+ return new Slot_Null;
+ } // end switch
+}
+
+Class::CIterator_Locals
+Class::PosOfName( const List_LocalCe & i_rList,
+ const String & i_sName ) const
+{
+ for ( CIterator_Locals ret = i_rList.begin();
+ ret != i_rList.end();
+ ++ret )
+ {
+ if ( (*ret).sLocalName == i_sName )
+ return ret;
+ }
+ return i_rList.end();
+}
+
+} // namespace cpp
+} // namespace ary
diff --git a/autodoc/source/ary/cpp/c_de.cxx b/autodoc/source/ary/cpp/c_de.cxx
new file mode 100644
index 000000000000..4c8024bbef47
--- /dev/null
+++ b/autodoc/source/ary/cpp/c_de.cxx
@@ -0,0 +1,51 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <ary/cpp/c_de.hxx>
+
+
+
+namespace ary
+{
+namespace cpp
+{
+
+
+
+DefineEntity::DefineEntity( const String & i_name,
+ loc::Le_id i_declaringFile )
+ : sName(i_name),
+ nLocation(i_declaringFile)
+{
+}
+
+
+
+
+} // end namespace cpp
+} // end namespace ary
diff --git a/autodoc/source/ary/cpp/c_define.cxx b/autodoc/source/ary/cpp/c_define.cxx
new file mode 100644
index 000000000000..4f91ea38c8e6
--- /dev/null
+++ b/autodoc/source/ary/cpp/c_define.cxx
@@ -0,0 +1,76 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <ary/cpp/c_define.hxx>
+
+
+// NOT FULLY DECLARED SERVICES
+#include <prprpr.hxx>
+
+
+
+
+namespace ary
+{
+namespace cpp
+{
+
+
+
+Define::Define( const String & i_name,
+ const StringVector & i_definition,
+ loc::Le_id i_declaringFile)
+ : DefineEntity(i_name, i_declaringFile),
+ aDefinition(i_definition)
+{
+}
+
+Define::~Define()
+{
+}
+
+void
+Define::do_Accept(csv::ProcessorIfc & io_processor) const
+{
+ csv::CheckedCall(io_processor, *this);
+}
+
+ClassId
+Define::get_AryClass() const
+{
+ return class_id;
+}
+
+const StringVector &
+Define::inq_DefinitionText() const
+{
+ return aDefinition;
+}
+
+} // namespace cpp
+} // namespace ary
diff --git a/autodoc/source/ary/cpp/c_enum.cxx b/autodoc/source/ary/cpp/c_enum.cxx
new file mode 100644
index 000000000000..6dd76f183e16
--- /dev/null
+++ b/autodoc/source/ary/cpp/c_enum.cxx
@@ -0,0 +1,134 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <ary/cpp/c_enum.hxx>
+
+
+// NOT FULLY DECLARED SERVICES
+#include <slots.hxx>
+#include "c_slots.hxx"
+
+
+
+
+namespace ary
+{
+namespace cpp
+{
+
+Enum::Enum( const String & i_sLocalName,
+ Ce_id i_nOwner,
+ E_Protection i_eProtection,
+ Lid i_nFile )
+ : aEssentials( i_sLocalName,
+ i_nOwner,
+ i_nFile ),
+ aValues(),
+ eProtection(i_eProtection)
+{
+}
+
+Enum::~Enum()
+{
+}
+
+void
+Enum::Add_Value( Ce_id i_nId )
+{
+ aValues.Add( i_nId );
+}
+
+const String &
+Enum::inq_LocalName() const
+{
+ return aEssentials.LocalName();
+}
+
+Cid
+Enum::inq_Owner() const
+{
+ return aEssentials.Owner();
+}
+
+Lid
+Enum::inq_Location() const
+{
+ return aEssentials.Location();
+}
+
+void
+Enum::do_Accept(csv::ProcessorIfc & io_processor) const
+{
+ csv::CheckedCall(io_processor,*this);
+}
+
+ClassId
+Enum::get_AryClass() const
+{
+ return class_id;
+}
+
+Gid
+Enum::inq_Id_Group() const
+{
+ return static_cast<Gid>(Id());
+}
+
+const ary::cpp::CppEntity &
+Enum::inq_RE_Group() const
+{
+ return *this;
+}
+
+const group::SlotList &
+Enum::inq_Slots() const
+{
+ static const SlotAccessId aProjectSlotData[]
+ = { SLOT_Values };
+ static const std::vector< SlotAccessId >
+ aSlots( &aProjectSlotData[0],
+ &aProjectSlotData[0]
+ + sizeof aProjectSlotData / sizeof (SlotAccessId) );
+ return aSlots;
+}
+
+DYN Slot *
+Enum::inq_Create_Slot( SlotAccessId i_nSlot ) const
+{
+ switch ( i_nSlot )
+ {
+ case SLOT_Values: return new Slot_SequentialIds<Ce_id>(aValues);
+ default:
+ return new Slot_Null;
+ } // end switch
+}
+
+
+
+} // namespace cpp
+} // namespace ary
diff --git a/autodoc/source/ary/cpp/c_enuval.cxx b/autodoc/source/ary/cpp/c_enuval.cxx
new file mode 100644
index 000000000000..d133546449bd
--- /dev/null
+++ b/autodoc/source/ary/cpp/c_enuval.cxx
@@ -0,0 +1,87 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <ary/cpp/c_enuval.hxx>
+
+
+// NOT FULLY DECLARED SERVICES
+
+
+namespace ary
+{
+namespace cpp
+{
+
+
+EnumValue::EnumValue( const String & i_sLocalName,
+ Ce_id i_nOwner,
+ String i_sInitialisation )
+ : aEssentials( i_sLocalName,
+ i_nOwner,
+ Lid(0) ),
+ sInitialisation(i_sInitialisation)
+{
+}
+
+EnumValue::~EnumValue()
+{
+}
+
+const String &
+EnumValue::inq_LocalName() const
+{
+ return aEssentials.LocalName();
+}
+
+Cid
+EnumValue::inq_Owner() const
+{
+ return aEssentials.Owner();
+}
+
+Lid
+EnumValue::inq_Location() const
+{
+ return aEssentials.Location();
+}
+
+void
+EnumValue::do_Accept(csv::ProcessorIfc & io_processor) const
+{
+ csv::CheckedCall(io_processor,*this);
+}
+
+ClassId
+EnumValue::get_AryClass() const
+{
+ return class_id;
+}
+
+
+} // namespace cpp
+} // namespace ary
diff --git a/autodoc/source/ary/cpp/c_funct.cxx b/autodoc/source/ary/cpp/c_funct.cxx
new file mode 100644
index 000000000000..cfc0a61909b2
--- /dev/null
+++ b/autodoc/source/ary/cpp/c_funct.cxx
@@ -0,0 +1,247 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <ary/cpp/c_funct.hxx>
+
+
+
+// NOT FULLY DECLARED SERVICES
+#include <algorithm>
+#include <ary/cpp/c_funct.hxx>
+
+
+
+
+
+namespace
+{
+using namespace ::ary::cpp;
+
+
+class Parameter_2_NonTypeParamInfo
+{
+ public:
+ String operator()(
+ const S_Parameter & i_rParam ) const;
+};
+
+class Parameter_2_Type
+{
+ public:
+ Type_id operator()(
+ const S_Parameter & i_rParam ) const
+ { return i_rParam.nType; }
+};
+
+/** @return
+ A vector with Strings like this:
+ "ParamName" or "ParamName[ArraySize]" or "ParamName = InitValue".
+*/
+StringVector Create_NonTypeParameterInfos(
+ const std::vector<S_Parameter> &
+ i_rParameters );
+/** @return
+ A vector of the parameters' type ids.
+*/
+std::vector<Type_id>
+ Create_ParameterTypeList(
+ const std::vector<S_Parameter> &
+ i_rParameters );
+
+} // namspace anonymous
+
+
+namespace ary
+{
+namespace cpp
+{
+
+Function::Function( const String & i_sLocalName,
+ Ce_id i_nOwner,
+ E_Protection i_eProtection,
+ Lid i_nFile,
+ Type_id i_nReturnType,
+ const std::vector<S_Parameter> &
+ i_parameters,
+ E_ConVol i_conVol,
+ E_Virtuality i_eVirtuality,
+ FunctionFlags i_aFlags,
+ bool i_bThrowExists,
+ const std::vector<Type_id> &
+ i_rExceptions )
+ : aEssentials( i_sLocalName,
+ i_nOwner,
+ i_nFile ),
+ aTemplateParameterTypes(),
+ aSignature( Create_ParameterTypeList(i_parameters),
+ i_conVol ),
+ nReturnType(i_nReturnType),
+ eProtection(i_eProtection),
+ eVirtuality(i_eVirtuality),
+ aFlags(i_aFlags),
+ aParameterInfos( Create_NonTypeParameterInfos(i_parameters) ),
+ pExceptions( i_bThrowExists ? new ExceptionTypeList(i_rExceptions) : 0 )
+{
+}
+
+Function::~Function()
+{
+}
+
+bool
+Function::IsIdentical( const Function & i_f ) const
+{
+ return
+ LocalName() == i_f.LocalName()
+ AND
+ Owner() == i_f.Owner()
+ AND
+ aSignature == i_f.aSignature
+ AND
+ nReturnType == i_f.nReturnType
+ AND
+ eProtection == i_f.eProtection
+ AND
+ eVirtuality == i_f.eVirtuality
+ AND
+ aFlags == i_f.aFlags
+ AND
+ ( ( NOT pExceptions AND NOT i_f.pExceptions )
+ OR
+ ( pExceptions AND i_f.pExceptions
+ ? *pExceptions == *i_f.pExceptions
+ : false )
+ )
+ AND
+ aTemplateParameterTypes.size() == i_f.aTemplateParameterTypes.size();
+}
+
+void
+Function::Add_TemplateParameterType( const String & i_sLocalName,
+ Type_id i_nIdAsType )
+{
+ aTemplateParameterTypes.push_back(
+ List_TplParam::value_type(i_sLocalName, i_nIdAsType) );
+}
+
+
+const String &
+Function::inq_LocalName() const
+{
+ return aEssentials.LocalName();
+}
+
+Cid
+Function::inq_Owner() const
+{
+ return aEssentials.Owner();
+}
+
+Lid
+Function::inq_Location() const
+{
+ return aEssentials.Location();
+}
+
+void
+Function::do_Accept(csv::ProcessorIfc & io_processor) const
+{
+ csv::CheckedCall(io_processor,*this);
+}
+
+ClassId
+Function::get_AryClass() const
+{
+ return class_id;
+}
+
+
+
+} // namespace cpp
+} // namespace ary
+
+
+
+namespace
+{
+
+String
+Parameter_2_NonTypeParamInfo::operator()( const ary::cpp::S_Parameter & i_rParam ) const
+{
+ static StreamStr aParamName_(1020);
+ aParamName_.seekp(0);
+
+ aParamName_ << i_rParam.sName;
+ if ( i_rParam.sSizeExpression.length() > 0 )
+ {
+ aParamName_ << '['
+ << i_rParam.sSizeExpression
+ << ']';
+ }
+ if ( i_rParam.sInitExpression.length() > 0 )
+ {
+ aParamName_ << " = "
+ << i_rParam.sInitExpression;
+ }
+
+ return aParamName_.c_str();
+}
+
+
+StringVector
+Create_NonTypeParameterInfos( const std::vector<S_Parameter> & i_rParameters )
+{
+ static Parameter_2_NonTypeParamInfo
+ aTransformFunction_;
+
+ StringVector
+ ret(i_rParameters.size(), String::Null_());
+ std::transform( i_rParameters.begin(), i_rParameters.end(),
+ ret.begin(),
+ aTransformFunction_ );
+ return ret;
+}
+
+std::vector<Type_id>
+Create_ParameterTypeList( const std::vector<S_Parameter> & i_rParameters )
+{
+ static Parameter_2_Type
+ aTransformFunction_;
+
+ std::vector<Type_id>
+ ret(i_rParameters.size(), Type_id(0));
+ std::transform( i_rParameters.begin(), i_rParameters.end(),
+ ret.begin(),
+ aTransformFunction_ );
+ return ret;
+}
+
+
+
+
+} // namespace anonymous
diff --git a/autodoc/source/ary/cpp/c_macro.cxx b/autodoc/source/ary/cpp/c_macro.cxx
new file mode 100644
index 000000000000..6d0e546d4da7
--- /dev/null
+++ b/autodoc/source/ary/cpp/c_macro.cxx
@@ -0,0 +1,78 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <ary/cpp/c_macro.hxx>
+
+
+// NOT FULLY DECLARED SERVICES
+#include <prprpr.hxx>
+
+
+
+namespace ary
+{
+namespace cpp
+{
+
+
+Macro::Macro( const String & i_name,
+ const StringVector & i_params,
+ const StringVector & i_definition,
+ loc::Le_id i_declaringFile )
+ : DefineEntity(i_name, i_declaringFile),
+ aParams(i_params),
+ aDefinition(i_definition)
+{
+}
+
+Macro::~Macro()
+{
+}
+
+void
+Macro::do_Accept(csv::ProcessorIfc & io_processor) const
+{
+ csv::CheckedCall(io_processor,*this);
+}
+
+ClassId
+Macro::get_AryClass() const
+{
+ return class_id;
+
+ // return RCID_MACRO;
+}
+
+const StringVector &
+Macro::inq_DefinitionText() const
+{
+ return aDefinition;
+}
+
+} // namespace cpp
+} // namespace ary
diff --git a/autodoc/source/ary/cpp/c_namesp.cxx b/autodoc/source/ary/cpp/c_namesp.cxx
new file mode 100644
index 000000000000..bc49099a824a
--- /dev/null
+++ b/autodoc/source/ary/cpp/c_namesp.cxx
@@ -0,0 +1,294 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <ary/cpp/c_namesp.hxx>
+
+
+// NOT FULLY DECLARED SERVICES
+#include <algorithm>
+#include <cosv/tpl/tpltools.hxx>
+#include <ary/cpp/c_funct.hxx>
+#include <ary/cpp/c_gate.hxx>
+#include <ary/getncast.hxx>
+#include <slots.hxx>
+#include "c_slots.hxx"
+
+
+namespace ary
+{
+namespace cpp
+{
+
+typedef std::multimap<String, Ce_id>::const_iterator operations_citer;
+
+Namespace::Namespace()
+ : aEssentials(),
+ aAssignedNode(),
+ // aLocalNamespaces,
+ // aLocalClasses,
+ // aLocalEnums,
+ // aLocalTypedefs,
+ // aLocalOperations,
+ // aLocalVariables,
+ // aLocalConstants,
+ pParent(0),
+ nDepth(0)
+{
+ aAssignedNode.Assign_Entity(*this);
+}
+
+Namespace::Namespace( const String & i_sLocalName,
+ Namespace & i_rParent )
+ : aEssentials( i_sLocalName,
+ i_rParent.CeId(),
+ Lid(0) ),
+ aAssignedNode(),
+ // aLocalNamespaces,
+ // aLocalClasses,
+ // aLocalEnums,
+ // aLocalTypedefs,
+ // aLocalOperations,
+ // aLocalVariables,
+ // aLocalConstants,
+ pParent(&i_rParent),
+ nDepth(i_rParent.Depth()+1)
+{
+ aAssignedNode.Assign_Entity(*this);
+}
+
+Namespace::~Namespace()
+{
+}
+
+void
+Namespace::Add_LocalNamespace( DYN Namespace & io_rLocalNamespace )
+{
+ aLocalNamespaces[io_rLocalNamespace.LocalName()] = &io_rLocalNamespace;
+}
+
+void
+Namespace::Add_LocalClass( const String & i_sLocalName,
+ Cid i_nId )
+{
+ aLocalClasses[i_sLocalName] = i_nId;
+}
+
+void
+Namespace::Add_LocalEnum( const String & i_sLocalName,
+ Cid i_nId )
+{
+ aLocalEnums[i_sLocalName] = i_nId;
+}
+
+void
+Namespace::Add_LocalTypedef( const String & i_sLocalName,
+ Cid i_nId )
+{
+ aLocalTypedefs[i_sLocalName] = i_nId;
+}
+
+void
+Namespace::Add_LocalOperation( const String & i_sLocalName,
+ Cid i_nId )
+{
+ aLocalOperations.insert( Map_Operations::value_type(i_sLocalName, i_nId) );
+}
+
+
+void
+Namespace::Add_LocalVariable( const String & i_sLocalName,
+ Cid i_nId )
+{
+ aLocalVariables[i_sLocalName] = i_nId;
+}
+
+void
+Namespace::Add_LocalConstant( const String & i_sLocalName,
+ Cid i_nId )
+{
+ aLocalConstants[i_sLocalName] = i_nId;
+}
+
+uintt
+Namespace::Depth() const
+{
+ return nDepth;
+}
+
+Namespace *
+Namespace::Parent() const
+{
+ return pParent;
+}
+
+Ce_id
+Namespace::Search_Child(const String & i_key) const
+{
+ Namespace *
+ ret_nsp = Search_LocalNamespace(i_key);
+ if (ret_nsp != 0)
+ return ret_nsp->CeId();
+
+ Ce_id
+ ret = Search_LocalClass(i_key);
+ if (ret.IsValid())
+ return ret;
+
+ ret = csv::value_from_map(aLocalEnums, i_key, Ce_id(0));
+ if (ret.IsValid())
+ return ret;
+ ret = csv::value_from_map(aLocalTypedefs, i_key, Ce_id(0));
+ if (ret.IsValid())
+ return ret;
+ ret = csv::value_from_map(aLocalVariables, i_key, Ce_id(0));
+ if (ret.IsValid())
+ return ret;
+ return csv::value_from_map(aLocalConstants, i_key, Ce_id(0));
+}
+
+Namespace *
+Namespace::Search_LocalNamespace( const String & i_sLocalName ) const
+{
+ return csv::value_from_map(aLocalNamespaces, i_sLocalName, (Namespace*)(0));
+}
+
+uintt
+Namespace::Get_SubNamespaces( std::vector< const Namespace* > & o_rResultList ) const
+{
+ for ( Map_NamespacePtr::const_iterator it = aLocalNamespaces.begin();
+ it != aLocalNamespaces.end();
+ ++it )
+ {
+ o_rResultList.push_back( (*it).second );
+ }
+ return o_rResultList.size();
+}
+
+Ce_id
+Namespace::Search_LocalClass( const String & i_sName ) const
+{
+ return csv::value_from_map(aLocalClasses, i_sName, Ce_id(0));
+}
+
+void
+Namespace::Search_LocalOperations( std::vector<Ce_id> & o_result,
+ const String & i_sName ) const
+{
+ operations_citer
+ itLower = aLocalOperations.lower_bound(i_sName);
+ if (itLower == aLocalOperations.end())
+ return;
+ if ( (*itLower).first != i_sName )
+ return;
+
+ operations_citer
+ itEnd = aLocalOperations.end();
+ for ( operations_citer it = itLower;
+ it != aLocalOperations.end() ? (*itLower).first == i_sName : false;
+ ++it )
+ {
+ o_result.push_back((*it).second);
+ }
+}
+
+
+const String &
+Namespace::inq_LocalName() const
+{
+ return aEssentials.LocalName();
+}
+
+Cid
+Namespace::inq_Owner() const
+{
+ return aEssentials.Owner();
+}
+
+Lid
+Namespace::inq_Location() const
+{
+ return Lid(0);
+}
+
+void
+Namespace::do_Accept(csv::ProcessorIfc & io_processor) const
+{
+ csv::CheckedCall(io_processor,*this);
+}
+
+ClassId
+Namespace::get_AryClass() const
+{
+ return class_id;
+}
+
+Gid
+Namespace::inq_Id_Group() const
+{
+ return static_cast<Gid>(Id());
+}
+
+const ary::cpp::CppEntity &
+Namespace::inq_RE_Group() const
+{
+ return *this;
+}
+
+const ary::group::SlotList &
+Namespace::inq_Slots() const
+{
+ static const SlotAccessId aProjectSlotData[]
+ = { SLOT_SubNamespaces, SLOT_Classes, SLOT_Enums, SLOT_Typedefs, SLOT_Operations,
+ SLOT_Variables, SLOT_Constants };
+ static const std::vector< SlotAccessId >
+ aSlots( &aProjectSlotData[0],
+ &aProjectSlotData[0]
+ + sizeof aProjectSlotData / sizeof (SlotAccessId) );
+ return aSlots;
+}
+
+DYN Slot *
+Namespace::inq_Create_Slot( SlotAccessId i_nSlot ) const
+{
+ switch ( i_nSlot )
+ {
+ case SLOT_SubNamespaces: return new Slot_SubNamespaces(aLocalNamespaces);
+ case SLOT_Classes: return new Slot_MapLocalCe(aLocalClasses);
+ case SLOT_Enums: return new Slot_MapLocalCe(aLocalEnums);
+ case SLOT_Typedefs: return new Slot_MapLocalCe(aLocalTypedefs);
+ case SLOT_Operations: return new Slot_MapOperations(aLocalOperations);
+ case SLOT_Variables: return new Slot_MapLocalCe(aLocalVariables);
+ case SLOT_Constants: return new Slot_MapLocalCe(aLocalConstants);
+ default:
+ return new Slot_Null;
+ } // end switch
+}
+
+
+} // namespace cpp
+} // namespace ary
diff --git a/autodoc/source/ary/cpp/c_osigna.cxx b/autodoc/source/ary/cpp/c_osigna.cxx
new file mode 100644
index 000000000000..70aa1840ef81
--- /dev/null
+++ b/autodoc/source/ary/cpp/c_osigna.cxx
@@ -0,0 +1,76 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <ary/cpp/c_osigna.hxx>
+
+
+// NOT FULLY DEFINED SERVICES
+
+
+namespace ary
+{
+namespace cpp
+{
+
+
+OperationSignature::OperationSignature( std::vector<Type_id> i_parameterTypes,
+ E_ConVol i_conVol )
+ : aParameterTypes(i_parameterTypes),
+ eConVol(i_conVol)
+{
+}
+
+int
+OperationSignature::Compare( const OperationSignature & i_rSig ) const
+{
+ if ( aParameterTypes.size() < i_rSig.aParameterTypes.size() )
+ return -1;
+ else if ( i_rSig.aParameterTypes.size() < aParameterTypes.size() )
+ return 1;
+
+ ParameterTypeList::const_iterator iMe = aParameterTypes.begin();
+ ParameterTypeList::const_iterator iOther = i_rSig.aParameterTypes.begin();
+ for ( ; iMe != aParameterTypes.end(); ++iMe, ++iOther )
+ {
+ if ( *iMe < *iOther )
+ return -1;
+ else if ( *iOther < *iMe )
+ return 1;
+ }
+
+ if ( eConVol < i_rSig.eConVol )
+ return -1;
+ else if ( eConVol != i_rSig.eConVol )
+ return 1;
+
+ return 0;
+}
+
+
+} // namespace cpp
+} // namespace ary
diff --git a/autodoc/source/ary/cpp/c_reposypart.cxx b/autodoc/source/ary/cpp/c_reposypart.cxx
new file mode 100644
index 000000000000..e1e8085672be
--- /dev/null
+++ b/autodoc/source/ary/cpp/c_reposypart.cxx
@@ -0,0 +1,523 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "c_reposypart.hxx"
+
+
+// NOT FULLY DECLARED SERVICES
+#include <ary/getncast.hxx>
+#include <ary/namesort.hxx>
+#include <ary/cpp/c_builtintype.hxx>
+#include <ary/cpp/c_class.hxx>
+#include <ary/cpp/c_cppentity.hxx>
+#include <ary/cpp/c_define.hxx>
+#include <ary/cpp/c_enum.hxx>
+#include <ary/cpp/c_enuval.hxx>
+#include <ary/cpp/c_funct.hxx>
+#include <ary/cpp/c_macro.hxx>
+#include <ary/cpp/c_namesp.hxx>
+#include <ary/cpp/c_tydef.hxx>
+#include <ary/cpp/c_type.hxx>
+#include <ary/cpp/usedtype.hxx>
+#include <ary/cpp/c_vari.hxx>
+#include <ary/loc/locp_le.hxx>
+#include <ary/getncast.hxx>
+#include <loc_internalgate.hxx>
+#include <reposy.hxx>
+#include "ca_ce.hxx"
+#include "ca_def.hxx"
+#include "ca_type.hxx"
+#include "cs_ce.hxx"
+#include "cs_def.hxx"
+#include "cs_type.hxx"
+
+
+
+namespace
+{
+
+using ::ary::GlobalId;
+using ::ary::Rid;
+using namespace ::ary::cpp;
+
+
+inline bool
+IsDefine( const GlobalId & i_id )
+{
+ return i_id.Class() == Define::class_id
+ OR
+ i_id.Class() == Macro::class_id;
+}
+
+
+/// Find Ces
+class TypeConnector
+{
+ public:
+ TypeConnector(
+ Gate & i_gate )
+ : pGate(&i_gate) {}
+ ~TypeConnector() {}
+
+ void operator()(
+ Type & io_rType ) const;
+ private:
+ // DATA
+ Gate * pGate;
+};
+
+/// Find Ces only known from base class name scope.
+class TypeConnector2ndTry
+{
+ public:
+ TypeConnector2ndTry(
+ Gate & i_gate )
+ : pGate(&i_gate) {}
+ ~TypeConnector2ndTry() {}
+
+ void operator()(
+ Type & io_rType ) const;
+ private:
+ // DATA
+ Gate * pGate;
+};
+
+/// Reconnect (in both directions) base-derived relations of classes.
+class HierarchyLinker
+{
+ public:
+ HierarchyLinker(
+ Gate & i_gate )
+ : pGate(&i_gate) {}
+
+ ~HierarchyLinker() {}
+
+ void operator()(
+ Class & io_rCe ) const;
+ private:
+ // DATA
+ Gate * pGate;
+};
+
+
+
+/// Helper functor for ->RepositoryPartition::Get_AlphabeticalList().
+template <class TRAITS>
+struct MakeGlobalId
+{
+ GlobalId operator()(
+ typename TRAITS::id_type
+ i_id ) const
+ {
+ return GlobalId( TRAITS::EntityOf_(i_id).AryClass(),
+ i_id.Value() );
+ }
+};
+
+
+
+
+/** Compare two {->GlobalId}s.
+
+
+ @todo Move this up to the definition of GlobalId<>.
+*/
+struct LesserGlobal
+{
+ LesserGlobal(
+ const Ce_Storage & i_ces,
+ const Def_Storage & i_des )
+ : rCes(i_ces), rDes(i_des) {}
+
+ bool operator()(
+ GlobalId i_1,
+ GlobalId i_2 ) const;
+
+ private:
+ const String & NameOf(
+ GlobalId i_id ) const;
+ // DATA
+ const Ce_Storage & rCes;
+ const Def_Storage & rDes;
+ ::ary::LesserName aLess;
+};
+
+
+bool
+LesserGlobal::operator()( GlobalId i_1,
+ GlobalId i_2 ) const
+ {
+ String s1 = NameOf(i_1);
+ String s2 = NameOf(i_2);
+
+ if (s1 != s2)
+ return aLess(s1, s2);
+
+ if ( IsDefine(i_1) != IsDefine(i_2) )
+ {
+ return NOT IsDefine(i_2);
+ }
+ else if (IsDefine(i_1))
+ {
+ return i_1.Class() < i_2.Class();
+ }
+
+ return Ce_GlobalCompare::Lesser_(
+ rCes[i_1.Id()],
+ rCes[i_2.Id()] );
+ }
+
+
+} // namespace anonymous
+
+
+
+
+
+
+namespace ary
+{
+namespace cpp
+{
+
+DYN InternalGate &
+InternalGate::Create_Partition_(RepositoryCenter & i_center)
+{
+ return *new RepositoryPartition(i_center);
+}
+
+
+RepositoryPartition::RepositoryPartition(RepositoryCenter & i_center)
+ : pRepositoryCenter(&i_center),
+ pCes(0),
+ pTypes(0),
+ pDefs(0),
+ pLocations(& loc::InternalGate::Create_Locations_())
+{
+ pCes = new CeAdmin(*this);
+ pTypes = new TypeAdmin(*this);
+ pDefs = new DefAdmin(*this);
+ pCes->Set_Related(*pTypes);
+}
+
+RepositoryPartition::~RepositoryPartition()
+{
+}
+
+void
+RepositoryPartition::Calculate_AllSecondaryInformation()
+// const ::autodoc::Options & )
+{
+ // KORR_FUTURE
+ // Forward the options from here.
+
+ Connect_AllTypes_2_TheirRelated_CodeEntites();
+}
+
+const String &
+RepositoryPartition::RepositoryTitle() const
+{
+ return static_cast< ary::Repository* >(pRepositoryCenter)->Title();
+}
+
+const CodeEntity *
+RepositoryPartition::Search_RelatedCe(Type_id i_type) const
+{
+ if (NOT i_type.IsValid())
+ return 0;
+
+ Ce_id
+ ce_id = pTypes->Find_Type(i_type).RelatedCe();
+ return ce_id.IsValid()
+ ? & pCes->Find_Ce(ce_id)
+ : (CodeEntity*)(0);
+}
+
+const ::ary::cpp::CppEntity *
+RepositoryPartition::Search_Entity(GlobalId i_id) const
+{
+ if (i_id.Id() == 0)
+ return 0;
+
+ if ( NOT IsDefine(i_id) )
+ {
+ // Shall make sure this is a C++ CodeEntity:
+ csv_assert( i_id.Class() >= Namespace::class_id
+ AND
+ i_id.Class() < BuiltInType::class_id
+ && "Unexpected entity type in cpp::RepositoryPartition"
+ "::Search_Entity()." );
+ return & Ces().Find_Ce( Ce_id(i_id.Id()) );
+ }
+ else
+ {
+ return & Defs().Find_Def( De_id(i_id.Id()) );
+ }
+}
+
+
+const CePilot &
+RepositoryPartition::Ces() const
+{
+ csv_assert(pCes != 0);
+ return *pCes;
+}
+
+const DefPilot &
+RepositoryPartition::Defs() const
+{
+ csv_assert(pDefs != 0);
+ return *pDefs;
+}
+
+const TypePilot &
+RepositoryPartition::Types() const
+{
+ csv_assert(pTypes != 0);
+ return *pTypes;
+}
+
+const loc::LocationPilot &
+RepositoryPartition::Locations() const
+{
+ csv_assert(pLocations != 0);
+ return *pLocations;
+}
+
+CePilot &
+RepositoryPartition::Ces()
+{
+ csv_assert(pCes != 0);
+ return *pCes;
+}
+
+DefPilot &
+RepositoryPartition::Defs()
+{
+ csv_assert(pDefs != 0);
+ return *pDefs;
+}
+
+TypePilot &
+RepositoryPartition::Types()
+{
+ csv_assert(pTypes != 0);
+ return *pTypes;
+}
+
+loc::LocationPilot &
+RepositoryPartition::Locations()
+{
+ csv_assert(pLocations != 0);
+ return *pLocations;
+}
+
+
+void
+RepositoryPartition::Connect_AllTypes_2_TheirRelated_CodeEntites()
+{
+ TypeConnector
+ aConnector(*this);
+ std::for_each( pTypes->Storage().BeginUnreserved(),
+ pTypes->Storage().End(),
+ aConnector );
+
+ typedef ::ary::stg::filter_iterator<CodeEntity,Class>
+ filter_class_iter;
+
+ HierarchyLinker
+ aHierarchyLinker(*this);
+ filter_class_iter itEnd( pCes->Storage().End() );
+ for ( filter_class_iter it( pCes->Storage().BeginUnreserved() );
+ it != itEnd;
+ ++it )
+ {
+ if (NOT it.IsValid())
+ continue;
+
+ if (is_type<Class>(*it))
+ aHierarchyLinker(ary_cast<Class>(*it));
+ }
+
+ TypeConnector2ndTry
+ aConnector2ndTry(*this);
+ std::for_each( pTypes->Storage().BeginUnreserved(),
+ pTypes->Storage().End(),
+ aConnector2ndTry );
+}
+
+template <class COMPARE>
+void Add2Result(
+ List_GlobalIds & o_result,
+ const SortedIds<COMPARE> &
+ i_data,
+ const char * i_begin,
+ const char * i_end );
+template <class COMPARE>
+void
+Add2Result( List_GlobalIds & o_result,
+ const SortedIds<COMPARE> & i_data,
+ const char * i_begin,
+ const char * i_end )
+{
+ const size_t
+ previous_size = o_result.size();
+ typename std::vector<typename COMPARE::id_type>::const_iterator
+ it_beg = i_data.LowerBound(i_begin);
+ typename std::vector<typename COMPARE::id_type>::const_iterator
+ it_end = i_data.LowerBound(i_end);
+ size_t
+ count_added = static_cast<size_t>( std::distance(it_beg,it_end) );
+ o_result.insert( o_result.end(),
+ count_added,
+ GlobalId() );
+ List_GlobalIds::iterator
+ it_out = o_result.begin() + previous_size;
+ std::transform( it_beg, it_end,
+ it_out,
+ MakeGlobalId<COMPARE>() );
+}
+
+
+uintt
+RepositoryPartition::Get_AlphabeticalList( List_GlobalIds & o_result,
+ const char * i_begin,
+ const char * i_end ) const
+{
+ size_t
+ ret = o_result.size();
+
+ const Ce_Storage &
+ ce_storage = pCes->Storage();
+ const Def_Storage &
+ def_storage = pDefs->Storage();
+
+ Add2Result( o_result,
+ ce_storage.TypeIndex(),
+ i_begin, i_end );
+ Add2Result( o_result,
+ ce_storage.OperationIndex(),
+ i_begin, i_end );
+ Add2Result( o_result,
+ ce_storage.DataIndex(),
+ i_begin, i_end );
+ Add2Result( o_result,
+ def_storage.DefineIndex(),
+ i_begin, i_end );
+ Add2Result( o_result,
+ def_storage.MacroIndex(),
+ i_begin, i_end );
+
+ LesserGlobal
+ aLess(ce_storage, def_storage);
+
+ std::sort(o_result.begin(), o_result.end(), aLess);
+
+ return o_result.size() - ret;
+}
+
+
+
+
+} // namespace cpp
+} // namespace ary
+
+
+
+
+
+namespace
+{
+
+
+void
+TypeConnector::operator()( Type & io_rType ) const
+{
+ csv_assert(pGate != 0);
+ UsedType *
+ pt = ::ary::ary_cast<UsedType>(&io_rType);
+ if (pt != 0)
+ pt->Connect2Ce(pGate->Ces());
+}
+
+void
+TypeConnector2ndTry::operator()( Type & io_rType ) const
+{
+ csv_assert(pGate != 0);
+ UsedType *
+ pt = ::ary::ary_cast<UsedType>(&io_rType);
+ if (pt != 0)
+ pt->Connect2CeOnlyKnownViaBaseClass(*pGate);
+}
+
+void
+HierarchyLinker::operator()( Class & io_rCe ) const
+{
+ csv_assert( ::ary::is_type<Class>(io_rCe) );
+ Class &
+ rClass = io_rCe;
+
+ for ( List_Bases::const_iterator it = rClass.BaseClasses().begin();
+ it != rClass.BaseClasses().end();
+ ++it )
+ {
+ const CodeEntity *
+ pCe = 0;
+ Type_id
+ nTid = (*it).nId;
+ for ( pCe = pGate->Search_RelatedCe(nTid);
+ ary::ary_cast<Typedef>(pCe) != 0;
+ pCe = pGate->Search_RelatedCe(nTid) )
+ {
+ nTid = static_cast< const Typedef* >(pCe)->DescribingType();
+ }
+ const Class *
+ pClass = ary::ary_cast<Class>(pCe);
+ if (pClass == 0)
+ return;
+ // KORR_FUTURE: we need a non const Find_Class()
+ const_cast< Class* >(pClass)->Add_KnownDerivative( io_rCe.CeId() );
+ }
+}
+
+const String &
+LesserGlobal::NameOf(GlobalId i_id) const
+{
+ if ( NOT IsDefine(i_id) )
+ {
+ return rCes[i_id.Id()].LocalName();
+ }
+ else
+ {
+ return rDes[i_id.Id()].LocalName();
+ }
+}
+
+
+
+} // namespace anonymous
diff --git a/autodoc/source/ary/cpp/c_reposypart.hxx b/autodoc/source/ary/cpp/c_reposypart.hxx
new file mode 100644
index 000000000000..355af34eb7c6
--- /dev/null
+++ b/autodoc/source/ary/cpp/c_reposypart.hxx
@@ -0,0 +1,114 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_CPP_C_REPOSYPART_HXX
+#define ARY_CPP_C_REPOSYPART_HXX
+
+
+
+// BASE CLASSES
+#include <cpp_internalgate.hxx>
+
+namespace ary
+{
+namespace cpp
+{
+ class CeAdmin;
+ class DefAdmin;
+ class TypeAdmin;
+}
+}
+
+
+
+
+namespace ary
+{
+namespace cpp
+{
+
+
+
+/** The C++ partition of the repository.
+*/
+class RepositoryPartition : public InternalGate
+{
+ public:
+ RepositoryPartition(
+ RepositoryCenter & i_reposyImpl );
+ virtual ~RepositoryPartition();
+
+ // INHERITED
+ // Interface Gate:
+ virtual void Calculate_AllSecondaryInformation();
+// const ::autodoc::Options &
+// i_options );
+ virtual const String &
+ RepositoryTitle() const;
+ virtual const CodeEntity *
+ Search_RelatedCe(
+ Type_id i_type ) const;
+ virtual const ::ary::cpp::CppEntity *
+ Search_Entity(
+ GlobalId i_id ) const;
+ virtual uintt Get_AlphabeticalList(
+ List_GlobalIds & o_result,
+ const char * i_begin,
+ const char * i_end ) const;
+ virtual const CePilot &
+ Ces() const;
+ virtual const DefPilot &
+ Defs() const;
+ virtual const TypePilot &
+ Types() const;
+ virtual const loc::LocationPilot &
+ Locations() const;
+ virtual CePilot & Ces();
+ virtual DefPilot & Defs();
+ virtual TypePilot & Types();
+ virtual loc::LocationPilot &
+ Locations();
+ private:
+ // Locals
+ void Connect_AllTypes_2_TheirRelated_CodeEntites();
+
+ // DATA
+ RepositoryCenter * pRepositoryCenter;
+
+ Dyn<CeAdmin> pCes;
+ Dyn<TypeAdmin> pTypes;
+ Dyn<DefAdmin> pDefs;
+ Dyn<loc::LocationPilot>
+ pLocations;
+};
+
+
+
+
+} // namespace cpp
+} // namespace ary
+#endif
diff --git a/autodoc/source/ary/cpp/c_slots.cxx b/autodoc/source/ary/cpp/c_slots.cxx
new file mode 100644
index 000000000000..bdb2351f1aad
--- /dev/null
+++ b/autodoc/source/ary/cpp/c_slots.cxx
@@ -0,0 +1,106 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <c_slots.hxx>
+
+
+// NOT FULLY DEFINED SERVICES
+#include <ary/ary_disp.hxx>
+#include <ary/cpp/c_namesp.hxx>
+
+
+
+namespace ary
+{
+namespace cpp
+{
+
+
+
+//*********************** Slot_SubNamespaces ********************//
+
+
+Slot_SubNamespaces::Slot_SubNamespaces( const Map_NamespacePtr & i_rData )
+ : pData( &i_rData )
+{
+}
+
+Slot_SubNamespaces::~Slot_SubNamespaces()
+{
+}
+
+uintt
+Slot_SubNamespaces::Size() const
+{
+ return pData->size();
+}
+
+void
+Slot_SubNamespaces::StoreEntries( ary::Display & o_rDestination ) const
+{
+ for ( Map_NamespacePtr::const_iterator it = pData->begin();
+ it != pData->end();
+ ++it )
+ {
+ (*(*it).second).Accept(o_rDestination);
+ }
+}
+
+
+//*********************** Slot_BaseClass ********************//
+
+Slot_BaseClass::Slot_BaseClass( const List_Bases & i_rData )
+ : pData( &i_rData )
+{
+}
+
+Slot_BaseClass::~Slot_BaseClass()
+{
+}
+
+uintt
+Slot_BaseClass::Size() const
+{
+ return pData->size();
+}
+
+void
+Slot_BaseClass::StoreEntries( ary::Display & o_rDestination ) const
+{
+ for ( List_Bases::const_iterator it = pData->begin();
+ it != pData->end();
+ ++it )
+ {
+ csv::CheckedCall(o_rDestination, *it);
+ }
+}
+
+
+
+} // namespace cpp
+} // namespace ary
diff --git a/autodoc/source/ary/cpp/c_slots.hxx b/autodoc/source/ary/cpp/c_slots.hxx
new file mode 100644
index 000000000000..b2b662dbed39
--- /dev/null
+++ b/autodoc/source/ary/cpp/c_slots.hxx
@@ -0,0 +1,84 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_CPP_C_SLOTS_HXX
+#define ARY_CPP_C_SLOTS_HXX
+
+// BASE CLASSES
+#include <ary/ceslot.hxx>
+// USED SERVICES
+#include <ary/cpp/c_slntry.hxx>
+
+
+
+
+namespace ary
+{
+namespace cpp
+{
+
+
+class Slot_SubNamespaces : public ary::Slot
+{
+ public:
+ Slot_SubNamespaces(
+ const Map_NamespacePtr &
+ i_rData );
+ virtual ~Slot_SubNamespaces();
+
+ virtual uintt Size() const;
+
+ private:
+ virtual void StoreEntries(
+ ary::Display & o_rDestination ) const;
+ // DATA
+ const Map_NamespacePtr *
+ pData;
+};
+
+class Slot_BaseClass : public ary::Slot
+{
+ public:
+ Slot_BaseClass(
+ const List_Bases & i_rData );
+ virtual ~Slot_BaseClass();
+
+ virtual uintt Size() const;
+
+ private:
+ virtual void StoreEntries(
+ ary::Display & o_rDestination ) const;
+ // DATA
+ const List_Bases * pData;
+};
+
+
+
+
+} // namespace cpp
+} // namespace ary
+#endif
diff --git a/autodoc/source/ary/cpp/c_traits.cxx b/autodoc/source/ary/cpp/c_traits.cxx
new file mode 100644
index 000000000000..f269adaf9b65
--- /dev/null
+++ b/autodoc/source/ary/cpp/c_traits.cxx
@@ -0,0 +1,223 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <ary/cpp/c_traits.hxx>
+
+
+// NOT FULLY DEFINED SERVICES
+#include <ary/namesort.hxx>
+#include <ary/cpp/c_class.hxx>
+#include <ary/cpp/c_enuval.hxx>
+#include <ary/cpp/c_namesp.hxx>
+#include <ary/cpp/usedtype.hxx>
+#include <ary/getncast.hxx>
+#include "cs_ce.hxx"
+#include "cs_def.hxx"
+#include "cs_type.hxx"
+
+
+
+
+namespace ary
+{
+namespace cpp
+{
+
+
+
+//******************** Ce_Traits ********************//
+Ce_Traits::entity_base_type &
+Ce_Traits::EntityOf_(id_type i_id)
+{
+ csv_assert(i_id.IsValid());
+ return Ce_Storage::Instance_()[i_id];
+}
+
+//******************** CeNode_Traits ********************//
+const symtree::Node<CeNode_Traits> *
+CeNode_Traits::NodeOf_(const entity_base_type & i_entity)
+{
+ if (is_type<Namespace>(i_entity))
+ return & ary_cast<Namespace>(i_entity).AsNode();
+ else if (is_type<Class>(i_entity))
+ return & ary_cast<Class>(i_entity).AsNode();
+ return 0;
+}
+
+symtree::Node<CeNode_Traits> *
+CeNode_Traits::NodeOf_(entity_base_type & io_entity)
+{
+ if (is_type<Namespace>(io_entity))
+ return & ary_cast<Namespace>(io_entity).AsNode();
+ else if (is_type<Class>(io_entity))
+ return & ary_cast<Class>(io_entity).AsNode();
+ return 0;
+}
+
+Ce_Traits::entity_base_type *
+CeNode_Traits::ParentOf_(const entity_base_type & i_entity)
+{
+ Ce_Traits::id_type
+ ret = i_entity.Owner();
+ if (ret.IsValid())
+ {
+ if (is_type<EnumValue>(i_entity))
+ { // Return not the Enum, but the owner of the Enum:
+ ret = EntityOf_(ret).Owner();
+ csv_assert(ret.IsValid());
+ }
+ return &EntityOf_(ret);
+ }
+ return 0;
+}
+
+Ce_id
+CeNode_Search( const CodeEntity & i_entity,
+ const String & i_localKey )
+{
+ if (is_type<Namespace>(i_entity))
+ return ary_cast<Namespace>(i_entity).Search_Child(i_localKey);
+ else if (is_type<Class>(i_entity))
+ return ary_cast<Class>(i_entity).Search_Child(i_localKey);
+ return Ce_id(0);
+}
+
+
+
+
+//******************** Ce_Compare ********************//
+const Ce_Compare::key_type &
+Ce_Compare::KeyOf_(const entity_base_type & i_entity)
+{
+ return i_entity.LocalName();
+}
+
+bool
+Ce_Compare::Lesser_( const key_type & i_1,
+ const key_type & i_2 )
+{
+ static ::ary::LesserName less_;
+ return less_(i_1,i_2);
+}
+
+
+//******************** Ce_GlobalCompare ********************//
+void
+Get_Qualified( StreamStr & o_out,
+ const CodeEntity & i_ce )
+{
+ if (i_ce.LocalName().empty())
+ return;
+ if (i_ce.Owner().IsValid())
+ Get_Qualified(o_out, Ce_Traits::EntityOf_(i_ce.Owner()));
+
+ o_out << i_ce.LocalName() << "::";
+}
+
+
+bool
+Ce_GlobalCompare::Lesser_( const key_type & i_1,
+ const key_type & i_2 )
+{
+ static ::ary::LesserName less_;
+
+ if (i_1.LocalName() != i_2.LocalName())
+ return less_(i_1.LocalName(), i_2.LocalName());
+
+ csv_assert(i_1.Owner().IsValid() AND i_2.Owner().IsValid());
+
+ static StreamStr
+ aBuffer1_(300);
+ static StreamStr
+ aBuffer2_(300);
+ aBuffer1_.reset();
+ aBuffer2_.reset();
+
+ Get_Qualified(aBuffer1_, Ce_Traits::EntityOf_(i_1.Owner()));
+ Get_Qualified(aBuffer2_, Ce_Traits::EntityOf_(i_2.Owner()));
+ if (aBuffer1_.size() >= 2)
+ aBuffer1_.pop_back(2);
+ if (aBuffer2_.size() >= 2)
+ aBuffer2_.pop_back(2);
+ return less_(aBuffer1_.c_str(), aBuffer2_.c_str());
+}
+
+
+
+//******************** Def_Traits ********************//
+Def_Traits::entity_base_type &
+Def_Traits::EntityOf_(id_type i_id)
+{
+ csv_assert(i_id.IsValid());
+ return Def_Storage::Instance_()[i_id];
+}
+
+//******************** Def_Compare ********************//
+const Def_Compare::key_type &
+Def_Compare::KeyOf_(const entity_base_type & i_entity)
+{
+ return i_entity.LocalName();
+}
+
+bool
+Def_Compare::Lesser_( const key_type & i_1,
+ const key_type & i_2 )
+{
+ static ::ary::LesserName less_;
+ return less_(i_1,i_2);
+}
+
+
+
+//******************** Type_Traits ********************//
+Type_Traits::entity_base_type &
+Type_Traits::EntityOf_(id_type i_id)
+{
+ csv_assert(i_id.IsValid());
+ return Type_Storage::Instance_()[i_id];
+}
+
+//******************** Type_Compare ********************//
+const UsedType_Compare::key_type &
+UsedType_Compare::KeyOf_(const entity_base_type & i_entity)
+{
+ csv_assert( is_type<UsedType>(i_entity) );
+ return ary_cast<UsedType>(i_entity);
+}
+
+bool
+UsedType_Compare::Lesser_( const key_type & i_1,
+ const key_type & i_2 )
+{
+ return i_1 < i_2;
+}
+
+
+
+} // namespace cpp
+} // namespace ary
diff --git a/autodoc/source/ary/cpp/c_tydef.cxx b/autodoc/source/ary/cpp/c_tydef.cxx
new file mode 100644
index 000000000000..284e30810e18
--- /dev/null
+++ b/autodoc/source/ary/cpp/c_tydef.cxx
@@ -0,0 +1,94 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <ary/cpp/c_tydef.hxx>
+
+
+// NOT FULLY DECLARED SERVICES
+#include <slots.hxx>
+#include "c_slots.hxx"
+
+
+
+
+namespace ary
+{
+namespace cpp
+{
+
+Typedef::Typedef( const String & i_sLocalName,
+ Cid i_nOwner,
+ E_Protection i_eProtection,
+ Lid i_nFile,
+ Tid i_nDescribingType )
+ : aEssentials( i_sLocalName,
+ i_nOwner,
+ i_nFile ),
+ nDescribingType(i_nDescribingType),
+ eProtection(i_eProtection)
+{
+}
+
+Typedef::~Typedef()
+{
+
+}
+
+const String &
+Typedef::inq_LocalName() const
+{
+ return aEssentials.LocalName();
+}
+
+Cid
+Typedef::inq_Owner() const
+{
+ return aEssentials.Owner();
+}
+
+Lid
+Typedef::inq_Location() const
+{
+ return aEssentials.Location();
+}
+
+void
+Typedef::do_Accept(csv::ProcessorIfc & io_processor) const
+{
+ csv::CheckedCall(io_processor,*this);
+}
+
+ClassId
+Typedef::get_AryClass() const
+{
+ return class_id;
+}
+
+
+} // namespace cpp
+} // namespace ary
diff --git a/autodoc/source/ary/cpp/c_vari.cxx b/autodoc/source/ary/cpp/c_vari.cxx
new file mode 100644
index 000000000000..111eddee277b
--- /dev/null
+++ b/autodoc/source/ary/cpp/c_vari.cxx
@@ -0,0 +1,96 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <ary/cpp/c_vari.hxx>
+
+
+// NOT FULLY DECLARED SERVICES
+
+
+
+namespace ary
+{
+namespace cpp
+{
+
+Variable::Variable( const String & i_sLocalName,
+ Cid i_nOwner,
+ E_Protection i_eProtection,
+ Lid i_nFile,
+ Tid i_nType,
+ VariableFlags i_aFlags,
+ const String & i_sArraySize,
+ const String & i_sInitValue )
+ : aEssentials( i_sLocalName,
+ i_nOwner,
+ i_nFile ),
+ nType(i_nType),
+ eProtection(i_eProtection),
+ aFlags(i_aFlags),
+ sArraySize(i_sArraySize),
+ sInitialisation(i_sInitValue)
+{
+}
+
+Variable::~Variable()
+{
+}
+
+const String &
+Variable::inq_LocalName() const
+{
+ return aEssentials.LocalName();
+}
+
+Cid
+Variable::inq_Owner() const
+{
+ return aEssentials.Owner();
+}
+
+Lid
+Variable::inq_Location() const
+{
+ return aEssentials.Location();
+}
+
+void
+Variable::do_Accept(csv::ProcessorIfc & io_processor) const
+{
+ csv::CheckedCall(io_processor,*this);
+}
+
+ClassId
+Variable::get_AryClass() const
+{
+ return class_id;
+}
+
+
+} // namespace cpp
+} // namespace ary
diff --git a/autodoc/source/ary/cpp/ca_ce.cxx b/autodoc/source/ary/cpp/ca_ce.cxx
new file mode 100644
index 000000000000..0bdbc41861a8
--- /dev/null
+++ b/autodoc/source/ary/cpp/ca_ce.cxx
@@ -0,0 +1,622 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+
+#include <precomp.h>
+#include "ca_ce.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include <ary/qualiname.hxx>
+#include <ary/cpp/inpcontx.hxx>
+#include <ary/cpp/c_namesp.hxx>
+#include <ary/cpp/c_class.hxx>
+#include <ary/cpp/c_enum.hxx>
+#include <ary/cpp/c_enuval.hxx>
+#include <ary/cpp/c_funct.hxx>
+#include <ary/cpp/c_tydef.hxx>
+#include <ary/cpp/c_type.hxx>
+#include <ary/cpp/c_vari.hxx>
+#include <ary/cpp/cp_type.hxx>
+#include <ary/loc/loc_file.hxx>
+#include <ary/getncast.hxx>
+
+
+
+
+
+
+namespace
+{
+
+String Get_NewAnonymousNamespaceName();
+String Get_NewAnonymousName(
+ char i_start );
+
+
+} // anonymous namespace
+
+
+
+
+namespace ary
+{
+namespace cpp
+{
+
+
+// KORR_FUTURE
+// What about namespace visibility ?
+// Perhaps handle all/some visibility transfer only after parse is complete.
+void
+transfer_visibility( const Class * i_owner,
+ CodeEntity & o_child )
+{
+ if ( i_owner != 0 ? NOT i_owner->IsVisible() : false )
+ o_child.Set_InVisible();
+}
+
+inline const TypePilot &
+CeAdmin::Types() const
+{
+ csv_assert(pTypes != 0);
+ return *pTypes;
+}
+
+
+
+
+
+
+CeAdmin::CeAdmin(RepositoryPartition & io_myReposyPartition)
+ : aStorage(),
+ pTypes(0),
+ pCppRepositoryPartition(&io_myReposyPartition)
+{
+}
+
+void
+CeAdmin::Set_Related(const TypePilot & i_types)
+{
+ pTypes = &i_types;
+}
+
+CeAdmin::~CeAdmin()
+{
+}
+
+Namespace &
+CeAdmin::CheckIn_Namespace( const InputContext & i_context,
+ const String & i_localName )
+{
+ const String
+ local_name = NOT i_localName.empty()
+ ? i_localName
+ : Get_NewAnonymousNamespaceName();
+ Namespace &
+ rParent = i_context.CurNamespace();
+ Namespace *
+ ret = rParent.Search_LocalNamespace(local_name);
+ if ( ret == 0 )
+ {
+ ret = &Create_Namespace(rParent, local_name);
+ }
+ return *ret;
+}
+
+Class &
+CeAdmin::Store_Class( const InputContext & i_context,
+ const String & i_localName,
+ E_ClassKey i_eClassKey )
+{
+ const String
+ local_name = i_localName.empty()
+ ? Get_NewAnonymousName( i_eClassKey == CK_class
+ ? 'c'
+ : i_eClassKey == CK_struct
+ ? 's'
+ : 'u' )
+ : i_localName;
+
+ Class &
+ ret = * new Class( local_name,
+ i_context.CurOwner().CeId(),
+ i_context.CurProtection(),
+ i_context.CurFile().LeId(),
+ i_eClassKey );
+ aStorage.Store_Type(ret);
+ i_context.CurOwner().Add_Class(local_name, ret.CeId());
+ transfer_visibility(i_context.CurClass(), ret);
+
+ return ret;
+}
+
+Enum &
+CeAdmin::Store_Enum( const InputContext & i_context,
+ const String & i_localName )
+{
+ const String
+ local_name = i_localName.empty()
+ ? Get_NewAnonymousName('e')
+ : i_localName;
+ Enum &
+ ret = * new Enum( local_name,
+ i_context.CurOwner().CeId(),
+ i_context.CurProtection(),
+ i_context.CurFile().LeId() );
+ aStorage.Store_Type(ret);
+ i_context.CurOwner().Add_Enum(local_name, ret.CeId());
+ transfer_visibility(i_context.CurClass(), ret);
+
+ return ret;
+}
+
+Typedef &
+CeAdmin::Store_Typedef( const InputContext& i_context,
+ const String & i_localName,
+ Type_id i_referredType )
+{
+ Typedef &
+ ret = * new Typedef( i_localName,
+ i_context.CurOwner().CeId(),
+ i_context.CurProtection(),
+ i_context.CurFile().LeId(),
+ i_referredType );
+ aStorage.Store_Type(ret);
+ i_context.CurOwner().Add_Typedef(i_localName, ret.CeId());
+ transfer_visibility(i_context.CurClass(), ret);
+
+ return ret;
+}
+
+Function *
+CeAdmin::Store_Operation( const InputContext & i_context,
+ const String & i_localName,
+ Type_id i_returnType,
+ const std::vector<S_Parameter> & i_parameters,
+ E_Virtuality i_virtuality,
+ E_ConVol i_conVol,
+ FunctionFlags i_flags,
+ bool i_throwExists,
+ const std::vector<Type_id> & i_exceptions )
+{
+ Function &
+ ret = * new Function( i_localName,
+ i_context.CurOwner().CeId(),
+ i_context.CurProtection(),
+ i_context.CurFile().LeId(),
+ i_returnType,
+ i_parameters,
+ i_conVol,
+ i_virtuality,
+ i_flags,
+ i_throwExists,
+ i_exceptions );
+
+ // Check for double declaration:
+ Ce_id
+ nAlreadyExistingFunction(0);
+ switch ( lhf_CheckAndHandle_DuplicateOperation(
+ nAlreadyExistingFunction,
+ i_context,
+ ret) )
+ {
+ case df_discard_new:
+ delete &ret;
+ return 0;
+ case df_replace:
+ csv_assert(nAlreadyExistingFunction.IsValid());
+ aStorage.Replace_Entity(
+ nAlreadyExistingFunction,
+ ret );
+ break;
+ case df_no:
+ aStorage.Store_Operation(ret); // Now it has a valid id.
+ i_context.CurOwner().Add_Operation( i_localName, ret.CeId(), i_flags.IsStaticMember() );
+ break;
+ default:
+ csv_assert(false);
+ }
+
+ transfer_visibility(i_context.CurClass(), ret);
+ if ( i_context.CurProtection() != PROTECT_global )
+ {
+ Class *
+ pClass = i_context.CurClass();
+ if ( pClass != 0 AND i_virtuality != VIRTUAL_none)
+ {
+ pClass->UpdateVirtuality(i_virtuality);
+ }
+ }
+
+ return &ret;
+}
+
+Variable &
+CeAdmin::Store_Variable( const InputContext& i_context,
+ const String & i_localName,
+ Type_id i_type,
+ VariableFlags i_flags,
+ const String & i_arraySize,
+ const String & i_initValue )
+{
+ Variable &
+ ret = * new Variable( i_localName,
+ i_context.CurOwner().CeId(),
+ i_context.CurProtection(),
+ i_context.CurFile().LeId(),
+ i_type,
+ i_flags,
+ i_arraySize,
+ i_initValue );
+
+ bool
+ is_const = Types().Find_Type(i_type).IsConst();
+ aStorage.Store_Datum(ret);
+ i_context.CurOwner().Add_Variable(
+ i_localName,
+ ret.CeId(),
+ is_const,
+ i_flags.IsStaticMember() );
+ transfer_visibility(i_context.CurClass(), ret);
+
+ return ret;
+}
+
+EnumValue &
+CeAdmin::Store_EnumValue( const InputContext & i_context,
+ const String & i_localName,
+ const String & i_initValue )
+{
+ Enum *
+ parent = i_context.CurEnum();
+ csv_assert( parent != 0 );
+
+ EnumValue &
+ ret = * new EnumValue( i_localName,
+ parent->CeId(),
+ i_initValue );
+ aStorage.Store_Datum(ret);
+ parent->Add_Value(ret.CeId());
+
+ // KORR also for current enum:
+ transfer_visibility(i_context.CurClass(), ret);
+
+ return ret;
+}
+
+const Namespace &
+CeAdmin::GlobalNamespace() const
+{
+ return ary_cast<Namespace>( aStorage[predefined::ce_GlobalNamespace] );
+}
+
+const CodeEntity &
+CeAdmin::Find_Ce(Ce_id i_id) const
+{
+ return aStorage[i_id];
+}
+
+const CodeEntity *
+CeAdmin::Search_Ce(Ce_id i_id) const
+{
+ return aStorage.Exists(i_id)
+ ? & aStorage[i_id]
+ : (const CodeEntity*)(0);
+}
+
+const CodeEntity *
+CeAdmin::Search_CeAbsolute( const CodeEntity & i_curScope,
+ const QualifiedName & i_rSearchedName ) const
+{
+ const symtree::Node<CeNode_Traits> *
+ cur_node = CeNode_Traits::NodeOf_(i_curScope);
+ csv_assert(cur_node != 0);
+
+ Ce_id
+ ret(0);
+ cur_node->SearchUp( ret,
+ i_rSearchedName.first_namespace(),
+ i_rSearchedName.end_namespace(),
+ i_rSearchedName.LocalName() );
+ return Search_Ce(ret);
+}
+
+const CodeEntity *
+CeAdmin::Search_CeLocal( const String & i_localName,
+ bool i_bIsFunction,
+ const Namespace & i_rCurNamespace,
+ const Class * i_pCurClass ) const
+{
+ // KORR_FUTURE
+ // See if this is correct.
+
+ Ce_id
+ ret(0);
+
+ if ( NOT i_bIsFunction )
+ {
+ CesResultList
+ type_instances = aStorage.TypeIndex().SearchAll(i_localName);
+ CesResultList
+ data_instances = aStorage.DataIndex().SearchAll(i_localName);
+ Ce_id
+ ret1 = Search_MatchingInstance(
+ type_instances,
+ (i_pCurClass
+ ? i_pCurClass->CeId()
+ : i_rCurNamespace.CeId())
+ );
+ Ce_id
+ ret2 = Search_MatchingInstance(
+ data_instances,
+ (i_pCurClass
+ ? i_pCurClass->CeId()
+ : i_rCurNamespace.CeId())
+ );
+ if (NOT ret2.IsValid())
+ ret = ret1;
+ else if (NOT ret1.IsValid())
+ ret = ret2;
+ }
+ else
+ {
+ CesResultList
+ function_instances = aStorage.OperationIndex().SearchAll(i_localName);
+ if ( function_instances.size() == 1 )
+ ret = *function_instances.begin();
+ else
+ {
+ ret = Search_MatchingInstance(
+ function_instances,
+ (i_pCurClass
+ ? i_pCurClass->CeId()
+ : i_rCurNamespace.CeId())
+ );
+ }
+ }
+
+ if ( ret.IsValid() )
+ return & Find_Ce(ret);
+
+ return 0;
+}
+
+void
+CeAdmin::Get_QualifiedName( StreamStr & o_rOut,
+ const String & i_localName,
+ Ce_id i_nOwner,
+ const char * i_sDelimiter ) const
+{
+ if ( i_localName.empty() OR NOT i_nOwner.IsValid() )
+ return;
+
+ const CodeEntity *
+ pOwner = & Find_Ce( i_nOwner );
+ if ( is_type<Enum>(*pOwner) )
+ pOwner = &Find_Ce( Ce_id(pOwner->Owner()) );
+
+ Get_QualifiedName( o_rOut,
+ pOwner->LocalName(),
+ Ce_id(pOwner->Owner()),
+ i_sDelimiter );
+ o_rOut
+ << i_sDelimiter
+ << i_localName;
+}
+
+void
+CeAdmin::Get_SignatureText( StreamStr & o_rOut,
+ const OperationSignature & i_signature,
+ const StringVector * i_sParameterNames ) const
+{
+ OperationSignature::ParameterTypeList::const_iterator
+ it = i_signature.Parameters().begin();
+ OperationSignature::ParameterTypeList::const_iterator
+ it_end = i_signature.Parameters().end();
+
+ const StringVector aDummy;
+ StringVector::const_iterator
+ itName = i_sParameterNames != 0
+ ? i_sParameterNames->begin()
+ : aDummy.begin();
+ StringVector::const_iterator
+ itName_end = i_sParameterNames != 0
+ ? i_sParameterNames->end()
+ : aDummy.end();
+
+ bool
+ bEmpty = (it == it_end);
+ if (NOT bEmpty)
+ {
+ o_rOut << "( ";
+ Types().Get_TypeText(o_rOut, *it);
+ if (itName != itName_end)
+ o_rOut << " " << (*itName);
+
+ for ( ++it; it != it_end; ++it )
+ {
+ o_rOut << ", ";
+ Types().Get_TypeText(o_rOut, *it);
+ if (itName != itName_end)
+ {
+ ++itName;
+ if (itName != itName_end)
+ o_rOut << " " << (*itName);
+ }
+ }
+ o_rOut << " )";
+ }
+ else
+ {
+ o_rOut << "( )";
+ }
+
+ if ( intt(i_signature.ConVol()) & intt(ary::cpp::CONVOL_const) )
+ o_rOut << " const";
+ if ( intt(i_signature.ConVol()) & intt(ary::cpp::CONVOL_volatile) )
+ o_rOut << " volatile";
+}
+
+CesResultList
+CeAdmin::Search_TypeName(const String & i_sName) const
+{
+ return aStorage.TypeIndex().SearchAll(i_sName);
+}
+
+Namespace &
+CeAdmin::GlobalNamespace()
+{
+ return ary_cast<Namespace>( aStorage[predefined::ce_GlobalNamespace] );
+}
+
+CeAdmin::E_DuplicateFunction
+CeAdmin::lhf_CheckAndHandle_DuplicateOperation(
+ Ce_id & o_existentFunction,
+ const InputContext & i_context,
+ const Function & i_newFunction )
+{
+ if (i_context.CurProtection() != PROTECT_global)
+ {
+ // Assume, there will be no duplicates within the same class.
+
+ // KORR_FUTURE
+ // Assumption may be wrong in case of #defines providing different
+ // versions for different compilers.
+ return df_no;
+ }
+
+ std::vector<Ce_id>
+ aOperationsWithSameName;
+ i_context.CurNamespace().Search_LocalOperations(
+ aOperationsWithSameName,
+ i_newFunction.LocalName() );
+
+ for ( std::vector<Ce_id>::const_iterator
+ it = aOperationsWithSameName.begin();
+ it != aOperationsWithSameName.end();
+ ++it )
+ {
+ const Function &
+ rFunction = ary_cast<Function>(aStorage[*it]);
+ if ( rFunction.LocalName() == i_newFunction.LocalName()
+ AND rFunction.Signature() == i_newFunction.Signature() )
+ {
+ if (NOT rFunction.IsIdentical(i_newFunction))
+ {
+ // KORR_FUTURE Make this more detailed.
+ Cerr() << "Non identical function with same signature "
+ << "found: "
+ << i_context.CurNamespace().LocalName()
+ << "::"
+ << i_newFunction.LocalName()
+ << "(..)"
+ << Endl();
+ }
+ o_existentFunction = rFunction.CeId();
+ if (rFunction.Docu().Data() == 0)
+ return df_replace;
+ else
+ return df_discard_new;
+ }
+ } // end for
+
+ return df_no;
+}
+
+Namespace &
+CeAdmin::Create_Namespace( Namespace & o_parent,
+ const String & i_localName )
+{
+ DYN Namespace &
+ ret = *new Namespace(i_localName, o_parent);
+ aStorage.Store_Entity(ret);
+ o_parent.Add_LocalNamespace(ret);
+ return ret;
+}
+
+Ce_id
+CeAdmin::Search_MatchingInstance( CesResultList i_list,
+ Ce_id i_owner ) const
+{
+ // KORR
+ // Multiple results?
+
+ for ( CesList::const_iterator it = i_list.begin();
+ it != i_list.end();
+ ++it )
+ {
+ const CodeEntity &
+ ce = aStorage[*it];
+ if ( ce.Owner() == i_owner)
+ {
+ return *it;
+ }
+ }
+ return Ce_id(0);
+}
+
+
+
+} // namespace cpp
+} // namespace ary
+
+
+
+namespace
+{
+
+uintt G_nLastFreeAnonymousNamespaceNr = 0;
+uintt G_nLastFreeAnonymousEntityNr = 0;
+
+String
+Get_NewAnonymousNamespaceName()
+{
+ StreamLock
+ sl(100);
+ return String( sl()
+ << "namespace_anonymous_"
+ << ++G_nLastFreeAnonymousNamespaceNr
+ << csv::c_str );
+
+}
+
+String
+Get_NewAnonymousName(char i_cStart)
+{
+ StreamLock
+ sl(100);
+ return String( sl()
+ << i_cStart
+ << "_Anonymous__"
+ << ++G_nLastFreeAnonymousEntityNr
+ << c_str );
+}
+
+
+
+} // namespace anonymous
diff --git a/autodoc/source/ary/cpp/ca_ce.hxx b/autodoc/source/ary/cpp/ca_ce.hxx
new file mode 100644
index 000000000000..67f9c444e95b
--- /dev/null
+++ b/autodoc/source/ary/cpp/ca_ce.hxx
@@ -0,0 +1,213 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_CPP_CA_CE_HXX
+#define ARY_CPP_CA_CE_HXX
+
+// USED SERVICES
+ // BASE CLASSES
+#include <ary/cpp/cp_ce.hxx>
+ // OTHER
+#include "cs_ce.hxx"
+
+
+namespace ary
+{
+namespace cpp
+{
+ class Ce_Storage;
+ class RepositoryPartition;
+}
+}
+
+
+
+
+
+namespace ary
+{
+namespace cpp
+{
+
+
+
+/** Administrates all C++ code entities (types, operations, variables).
+*/
+class CeAdmin : public CePilot
+{
+ public:
+ // LIFECYCLE
+ CeAdmin(
+ RepositoryPartition &
+ io_myReposyPartition );
+ void Set_Related(
+ const TypePilot & i_types );
+ virtual ~CeAdmin();
+
+ // INQUIRY
+ const Ce_Storage & Storage() const;
+
+ // ACCESS
+ Ce_Storage & Storage();
+
+ // INHERITED
+ // Interface CePilot:
+ virtual Namespace & CheckIn_Namespace(
+ const InputContext &
+ i_context,
+ const String & i_localName );
+ virtual Class & Store_Class(
+ const InputContext &
+ i_context,
+ const String & i_localName,
+ E_ClassKey i_classKey );
+ virtual Enum & Store_Enum(
+ const InputContext &
+ i_context,
+ const String & i_localName );
+ virtual Typedef & Store_Typedef(
+ const InputContext &
+ i_context,
+ const String & i_localName,
+ Type_id i_referredType );
+ virtual Function * Store_Operation(
+ const InputContext &
+ i_context,
+ const String & i_localName,
+ Type_id i_returnType,
+ const std::vector<S_Parameter> &
+ i_parameters,
+ E_Virtuality i_virtuality,
+ E_ConVol i_conVol,
+ FunctionFlags i_flags,
+ bool i_throwExists,
+ const std::vector<Type_id> &
+ i_exceptions );
+ virtual Variable & Store_Variable(
+ const InputContext &
+ i_context,
+ const String & i_localName,
+ Type_id i_type,
+ VariableFlags i_flags,
+ const String & i_arraySize,
+ const String & i_initValue );
+ virtual EnumValue & Store_EnumValue(
+ const InputContext &
+ i_context,
+ const String & i_localName,
+ const String & i_initValue );
+ virtual const Namespace &
+ GlobalNamespace() const;
+ virtual const CodeEntity &
+ Find_Ce(
+ Ce_id i_id ) const;
+ virtual const CodeEntity *
+ Search_Ce(
+ Ce_id i_id ) const;
+ virtual const CodeEntity *
+ Search_CeAbsolute(
+ const CodeEntity & i_curScope,
+ const QualifiedName &
+ i_absoluteName ) const;
+ virtual const CodeEntity *
+ Search_CeLocal(
+ const String & i_relativeName,
+ bool i_isFunction,
+ const Namespace & i_curNamespace,
+ const Class * i_curClass ) const;
+ virtual void Get_QualifiedName(
+ StreamStr & o_result,
+ const String & i_localName,
+ Ce_id i_owner,
+ const char * i_delimiter = "::" ) const;
+ virtual void Get_SignatureText(
+ StreamStr & o_rOut,
+ const OperationSignature &
+ i_signature,
+ const StringVector *
+ i_sParameterNames = 0 ) const;
+ virtual CesResultList
+ Search_TypeName(
+ const String & i_sName ) const;
+ virtual Namespace & GlobalNamespace();
+
+ private:
+ // Locals
+ /// @return true, if function is duplicate.
+ enum E_DuplicateFunction
+ {
+ df_no,
+ df_replace,
+ df_discard_new
+ };
+
+ /** @param o_existentFunction
+ The id of the already existing function, else unset.
+ */
+ E_DuplicateFunction lhf_CheckAndHandle_DuplicateOperation(
+ Ce_id & o_existentFunction,
+ const InputContext &
+ i_context,
+ const Function & i_newFunction );
+ Namespace & Create_Namespace(
+ Namespace & o_parent,
+ const String & i_localName );
+ Ce_id Search_MatchingInstance(
+ CesResultList i_list,
+ Ce_id i_owner ) const;
+ const TypePilot & Types() const;
+
+ // DATA
+ Ce_Storage aStorage;
+ const TypePilot * pTypes;
+ RepositoryPartition *
+ pCppRepositoryPartition;
+};
+
+
+
+
+// IMPLEMENTATION
+inline const Ce_Storage &
+CeAdmin::Storage() const
+{
+ return aStorage;
+}
+
+inline Ce_Storage &
+CeAdmin::Storage()
+{
+ return aStorage;
+}
+
+
+
+
+
+} // namespace cpp
+} // namespace ary
+#endif
diff --git a/autodoc/source/ary/cpp/ca_def.cxx b/autodoc/source/ary/cpp/ca_def.cxx
new file mode 100644
index 000000000000..6fa2bf087996
--- /dev/null
+++ b/autodoc/source/ary/cpp/ca_def.cxx
@@ -0,0 +1,111 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "ca_def.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include <ary/cpp/c_define.hxx>
+#include <ary/cpp/c_macro.hxx>
+#include <ary/loc/loc_file.hxx>
+#include <ary/cpp/inpcontx.hxx>
+
+
+
+
+namespace ary
+{
+namespace cpp
+{
+
+
+DefAdmin::DefAdmin(RepositoryPartition & io_myReposyPartition)
+ : aStorage(),
+ pCppRepositoryPartition(&io_myReposyPartition)
+{
+}
+
+DefAdmin::~DefAdmin()
+{
+}
+
+Define &
+DefAdmin::Store_Define( const InputContext& i_rContext,
+ const String & i_sName,
+ const StringVector & i_rDefinition )
+{
+ Define &
+ ret = *new Define( i_sName,
+ i_rDefinition,
+ i_rContext.CurFile().LeId() );
+ aStorage.Store_Define(ret);
+ return ret;
+
+}
+
+Macro &
+DefAdmin::Store_Macro( const InputContext& i_rContext,
+ const String & i_sName,
+ const StringVector & i_rParams,
+ const StringVector & i_rDefinition )
+{
+ Macro &
+ ret = *new Macro( i_sName,
+ i_rParams,
+ i_rDefinition,
+ i_rContext.CurFile().LeId() );
+ aStorage.Store_Macro(ret);
+ return ret;
+}
+
+const DefineEntity &
+DefAdmin::Find_Def(De_id i_id) const
+{
+ return aStorage[i_id];
+}
+
+DefsResultList
+DefAdmin::AllDefines() const
+{
+ return csv::make_range( aStorage.DefineIndex().Begin(),
+ aStorage.DefineIndex().End() );
+}
+
+DefsResultList
+DefAdmin::AllMacros() const
+{
+ return csv::make_range( aStorage.MacroIndex().Begin(),
+ aStorage.MacroIndex().End() );
+}
+
+
+
+
+
+} // namespace cpp
+} // namespace ary
diff --git a/autodoc/source/ary/cpp/ca_def.hxx b/autodoc/source/ary/cpp/ca_def.hxx
new file mode 100644
index 000000000000..266382c8577f
--- /dev/null
+++ b/autodoc/source/ary/cpp/ca_def.hxx
@@ -0,0 +1,115 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_CPP_CA_DEF_HXX
+#define ARY_CPP_CA_DEF_HXX
+
+// USED SERVICES
+ // BASE CLASSES
+#include <ary/cpp/cp_def.hxx>
+ // OTHER
+#include "cs_def.hxx"
+
+
+
+namespace ary
+{
+namespace cpp
+{
+ class Def_Storage;
+ class RepositoryPartition;
+}
+}
+
+
+
+
+
+namespace ary
+{
+namespace cpp
+{
+
+
+
+
+class DefAdmin : public DefPilot
+{
+ public:
+ // LIFECYCLE
+ DefAdmin(
+ RepositoryPartition &
+ io_myReposyPartition );
+ ~DefAdmin();
+
+ // INQUIRY
+ const Def_Storage & Storage() const;
+
+ // INHERITED
+ // Interface DefPilot:
+ virtual Define & Store_Define(
+ const InputContext& i_rContext,
+ const String & i_sName,
+ const StringVector &
+ i_rDefinition );
+ virtual Macro & Store_Macro(
+ const InputContext& i_rContext,
+ const String & i_sName,
+ const StringVector &
+ i_rParams,
+ const StringVector &
+ i_rDefinition );
+ virtual const DefineEntity &
+ Find_Def(
+ De_id i_id ) const;
+ virtual DefsResultList
+ AllDefines() const;
+ virtual DefsResultList
+ AllMacros() const;
+
+ private:
+ // DATA
+ Def_Storage aStorage;
+ RepositoryPartition *
+ pCppRepositoryPartition;
+};
+
+
+
+
+// IMPLEMENTATION
+inline const Def_Storage &
+DefAdmin::Storage() const
+{
+ return aStorage;
+}
+
+
+
+} // namespace cpp
+} // namespace ary
+#endif
diff --git a/autodoc/source/ary/cpp/ca_type.cxx b/autodoc/source/ary/cpp/ca_type.cxx
new file mode 100644
index 000000000000..4ebfae31b869
--- /dev/null
+++ b/autodoc/source/ary/cpp/ca_type.cxx
@@ -0,0 +1,136 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "ca_type.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include <ary/cpp/c_builtintype.hxx>
+#include <ary/cpp/c_class.hxx>
+#include <ary/cpp/c_namesp.hxx>
+#include <ary/cpp/cp_ce.hxx>
+#include <ary/cpp/inpcontx.hxx>
+#include <ary/cpp/usedtype.hxx>
+#include <ary/getncast.hxx>
+#include "c_reposypart.hxx"
+#include "cs_type.hxx"
+
+
+
+
+namespace ary
+{
+namespace cpp
+{
+
+
+TypeAdmin::TypeAdmin(RepositoryPartition & io_myReposyPartition)
+ : aStorage(),
+ pCppRepositoryPartition(&io_myReposyPartition)
+{
+}
+
+TypeAdmin::~TypeAdmin()
+{
+}
+
+
+// KORR_FUTURE
+// Remove unused parameter.
+
+const Type &
+TypeAdmin::CheckIn_UsedType( const InputContext & ,
+ DYN UsedType & pass_type )
+{
+ Dyn<UsedType>
+ pNewType(&pass_type); // Ensure clean up of heap object.
+
+ Type_id
+ tid(0);
+ if (pass_type.IsBuiltInType())
+ {
+ tid = aStorage.Search_BuiltInType(
+ BuiltInType::SpecializedName_( pass_type.LocalName().c_str(),
+ pass_type.TypeSpecialisation() ));
+ csv_assert(tid.IsValid());
+ return aStorage[tid];
+ }
+
+ tid = aStorage.UsedTypeIndex().Search(pass_type);
+ if (tid.IsValid())
+ {
+ return aStorage[tid];
+ }
+
+ // Type does not yet exist:
+ // Transfer ownership from pNewTypeand assign id:
+ aStorage.Store_Entity(*pNewType.Release());
+
+ aStorage.UsedTypeIndex().Add(pass_type.TypeId());
+ return pass_type;
+}
+
+const Type &
+TypeAdmin::Find_Type(Type_id i_type) const
+{
+ return aStorage[i_type];
+}
+
+bool
+TypeAdmin::Get_TypeText( StreamStr & o_result,
+ Type_id i_type ) const
+{
+ if (NOT i_type.IsValid())
+ return false;
+ aStorage[i_type].Get_Text(o_result, *pCppRepositoryPartition);
+ return true;
+}
+
+bool
+TypeAdmin::Get_TypeText( StreamStr & o_preName,
+ StreamStr & o_name,
+ StreamStr & o_postName,
+ Type_id i_type ) const
+{
+ if (NOT i_type.IsValid())
+ return false;
+ aStorage[i_type].Get_Text(o_preName, o_name, o_postName, *pCppRepositoryPartition);
+ return true;
+}
+
+Type_id
+TypeAdmin::Tid_Ellipse() const
+{
+ return Type_id(predefined::t_ellipse);
+}
+
+
+
+
+} // namespace cpp
+} // namespace ary
diff --git a/autodoc/source/ary/cpp/ca_type.hxx b/autodoc/source/ary/cpp/ca_type.hxx
new file mode 100644
index 000000000000..ae0580709ce8
--- /dev/null
+++ b/autodoc/source/ary/cpp/ca_type.hxx
@@ -0,0 +1,127 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_CPP_CA_TYPE_HXX
+#define ARY_CPP_CA_TYPE_HXX
+
+// USED SERVICES
+ // BASE CLASSES
+#include <ary/cpp/cp_type.hxx>
+ // OTHER
+#include "cs_type.hxx"
+
+
+
+namespace ary
+{
+namespace cpp
+{
+ class RepositoryPartition;
+}
+}
+
+
+
+
+
+namespace ary
+{
+namespace cpp
+{
+
+
+
+/** Administrates all C++ types as uses in user declarations
+ as return-, parameter- or variable-types.
+*/
+class TypeAdmin : public TypePilot
+{
+ public:
+ // LIFECYCLE
+ TypeAdmin(
+ RepositoryPartition &
+ io_myReposyPartition );
+ virtual ~TypeAdmin();
+
+ // INQUIRY
+ /// @return A list of all stored types that are not C++ or STL builtin types.
+ const Type_Storage &
+ Storage() const;
+
+ // ACCESS
+ Type_Storage & Storage();
+
+ // INHERITED
+ // Interface TypePilot:
+ virtual const Type &
+ CheckIn_UsedType(
+ const InputContext &
+ i_context,
+ DYN UsedType & pass_type );
+ virtual const Type &
+ Find_Type(
+ Type_id i_type ) const;
+ virtual bool Get_TypeText(
+ StreamStr & o_result,
+ Type_id i_type ) const;
+ virtual bool Get_TypeText(
+ StreamStr & o_preName, /// ::ary::cpp::
+ StreamStr & o_name, /// MyClass
+ StreamStr & o_postName, /// <TplArgument> * const &
+ Type_id i_type ) const;
+ virtual Type_id Tid_Ellipse() const;
+
+ private:
+ // DATA
+ Type_Storage aStorage;
+ RepositoryPartition *
+ pCppRepositoryPartition;
+};
+
+
+
+
+// IMPLEMENTATION
+inline const Type_Storage &
+TypeAdmin::Storage() const
+{
+ return aStorage;
+}
+
+inline Type_Storage &
+TypeAdmin::Storage()
+{
+ return aStorage;
+}
+
+
+
+
+
+} // namespace cpp
+} // namespace ary
+#endif
diff --git a/autodoc/source/ary/cpp/cs_ce.cxx b/autodoc/source/ary/cpp/cs_ce.cxx
new file mode 100644
index 000000000000..e8c34567e4fd
--- /dev/null
+++ b/autodoc/source/ary/cpp/cs_ce.cxx
@@ -0,0 +1,104 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "cs_ce.hxx"
+
+// NOT FULLY DEFINED SERVICES
+#include <ary/cpp/c_namesp.hxx>
+
+
+
+namespace
+{
+const uintt
+ C_nReservedElements = ::ary::cpp::predefined::ce_MAX; // Skipping "0" and the GlobalNamespace
+}
+
+
+
+
+namespace ary
+{
+namespace cpp
+{
+
+Ce_Storage * Ce_Storage::pInstance_ = 0;
+
+
+
+Ce_Storage::Ce_Storage()
+ : stg::Storage<CodeEntity>(C_nReservedElements),
+ aTypes(),
+ aOperations(),
+ aData()
+
+{
+ Set_Reserved( predefined::ce_GlobalNamespace,
+ *new Namespace );
+
+ csv_assert(pInstance_ == 0);
+ pInstance_ = this;
+}
+
+Ce_Storage::~Ce_Storage()
+{
+ csv_assert(pInstance_ != 0);
+ pInstance_ = 0;
+}
+
+Ce_id
+Ce_Storage::Store_Type(DYN CodeEntity & pass_ce)
+{
+ Ce_id
+ ret = Store_Entity(pass_ce);
+ aTypes.Add(ret);
+ return ret;
+}
+
+Ce_id
+Ce_Storage::Store_Operation(DYN CodeEntity & pass_ce)
+{
+ Ce_id
+ ret = Store_Entity(pass_ce);
+ aOperations.Add(ret);
+ return ret;
+}
+
+Ce_id
+Ce_Storage::Store_Datum(DYN CodeEntity & pass_ce)
+{
+ Ce_id
+ ret = Store_Entity(pass_ce);
+ aData.Add(ret);
+ return ret;
+}
+
+
+
+} // namespace cpp
+} // namespace ary
diff --git a/autodoc/source/ary/cpp/cs_ce.hxx b/autodoc/source/ary/cpp/cs_ce.hxx
new file mode 100644
index 000000000000..fa150aa71664
--- /dev/null
+++ b/autodoc/source/ary/cpp/cs_ce.hxx
@@ -0,0 +1,105 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_CPP_CS_CE_HXX
+#define ARY_CPP_CS_CE_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <store/s_storage.hxx>
+ // OTHER
+#include <ary/cpp/c_ce.hxx>
+#include <ary/cpp/c_traits.hxx>
+#include <sortedids.hxx>
+
+
+
+namespace ary
+{
+namespace cpp
+{
+
+
+/** The data base for all ->ary::cpp::CodeEntity objects.
+*/
+class Ce_Storage : public ::ary::stg::Storage<CodeEntity>
+{
+ public:
+ typedef SortedIds<Ce_Compare> Index;
+
+ Ce_Storage();
+ virtual ~Ce_Storage();
+
+ Ce_id Store_Type(
+ DYN CodeEntity & pass_ce );
+ Ce_id Store_Operation(
+ DYN CodeEntity & pass_ce );
+ Ce_id Store_Datum(
+ DYN CodeEntity & pass_ce );
+
+ const Index & TypeIndex() const { return aTypes; }
+ const Index & OperationIndex() const { return aOperations; }
+ const Index & DataIndex() const { return aData; }
+
+ Index & TypeIndex() { return aTypes; }
+ Index & OperationIndex() { return aOperations; }
+ Index & DataIndex() { return aData; }
+
+ static Ce_Storage & Instance_() { csv_assert(pInstance_ != 0);
+ return *pInstance_; }
+ private:
+ // DATA
+ Index aTypes;
+ Index aOperations;
+ Index aData;
+
+ static Ce_Storage * pInstance_;
+};
+
+
+
+
+namespace predefined
+{
+
+enum E_CodeEntity
+{
+ ce_GlobalNamespace = 1,
+ ce_MAX
+};
+
+} // namespace predefined
+
+
+
+
+
+} // namespace cpp
+} // namespace ary
+#endif
diff --git a/autodoc/source/ary/cpp/cs_def.cxx b/autodoc/source/ary/cpp/cs_def.cxx
new file mode 100644
index 000000000000..d12e5de24164
--- /dev/null
+++ b/autodoc/source/ary/cpp/cs_def.cxx
@@ -0,0 +1,86 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "cs_def.hxx"
+
+// NOT FULLY DEFINED SERVICES
+
+
+namespace
+{
+const uintt
+ C_nReservedElements = ::ary::cpp::predefined::de_MAX; // Skipping "0"
+}
+
+
+
+namespace ary
+{
+namespace cpp
+{
+
+Def_Storage * Def_Storage::pInstance_ = 0;
+
+
+
+
+Def_Storage::Def_Storage()
+ : stg::Storage<DefineEntity>(C_nReservedElements)
+{
+ csv_assert(pInstance_ == 0);
+ pInstance_ = this;
+}
+
+Def_Storage::~Def_Storage()
+{
+ csv_assert(pInstance_ != 0);
+ pInstance_ = 0;
+}
+
+De_id
+Def_Storage::Store_Define(DYN DefineEntity & pass_de)
+{
+ De_id
+ ret = Store_Entity(pass_de);
+ aDefines.Add(ret);
+ return ret;
+}
+
+De_id
+Def_Storage::Store_Macro(DYN DefineEntity & pass_de)
+{
+ De_id
+ ret = Store_Entity(pass_de);
+ aMacros.Add(ret);
+ return ret;
+}
+
+
+
+} // namespace cpp
+} // namespace ary
diff --git a/autodoc/source/ary/cpp/cs_def.hxx b/autodoc/source/ary/cpp/cs_def.hxx
new file mode 100644
index 000000000000..6e1e2ad380c3
--- /dev/null
+++ b/autodoc/source/ary/cpp/cs_def.hxx
@@ -0,0 +1,107 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_CPP_CS_DE_HXX
+#define ARY_CPP_CS_DE_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <store/s_storage.hxx>
+ // OTHER
+#include <ary/cpp/c_de.hxx>
+#include <ary/cpp/c_traits.hxx>
+#include <sortedids.hxx>
+
+
+
+namespace ary
+{
+namespace cpp
+{
+
+
+
+
+/** The data base for all ->ary::cpp::Type objects.
+*/
+class Def_Storage : public ::ary::stg::Storage<DefineEntity>
+{
+ public:
+ typedef SortedIds<Def_Compare> Index;
+
+ // LIFECYCLE
+ Def_Storage();
+ virtual ~Def_Storage();
+
+ De_id Store_Define(
+ DYN DefineEntity & pass_de );
+ De_id Store_Macro(
+ DYN DefineEntity & pass_de );
+
+ const Index & DefineIndex() const { return aDefines; }
+ const Index & MacroIndex() const { return aMacros; }
+
+ Index & DefineIndex() { return aDefines; }
+ Index & MacroIndex() { return aMacros; }
+
+ static Def_Storage &
+ Instance_() { csv_assert(pInstance_ != 0);
+ return *pInstance_; }
+ private:
+ // DATA
+ Index aDefines;
+ Index aMacros;
+
+
+ static Def_Storage *
+ pInstance_;
+};
+
+
+
+
+namespace predefined
+{
+
+enum E_DefineEntity
+{
+ // 0 is always unused with repository storages.
+ de_MAX = 1
+};
+
+} // namespace predefined
+
+
+
+
+
+
+} // namespace cpp
+} // namespace ary
+#endif
diff --git a/autodoc/source/ary/cpp/cs_type.cxx b/autodoc/source/ary/cpp/cs_type.cxx
new file mode 100644
index 000000000000..723108dbc49e
--- /dev/null
+++ b/autodoc/source/ary/cpp/cs_type.cxx
@@ -0,0 +1,112 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "cs_type.hxx"
+
+// NOT FULLY DEFINED SERVICES
+#include <ary/cpp/c_builtintype.hxx>
+
+
+namespace
+{
+ const uintt
+ C_nReservedElements = ary::cpp::predefined::t_MAX; // Skipping "0" and the builtin types
+}
+
+
+namespace ary
+{
+namespace cpp
+{
+
+
+
+Type_Storage * Type_Storage::pInstance_ = 0;
+
+
+
+
+Type_Storage::Type_Storage()
+ : stg::Storage<Type>(C_nReservedElements),
+ aBuiltInTypes()
+{
+ Setup_BuiltInTypes();
+
+ csv_assert(pInstance_ == 0);
+ pInstance_ = this;
+}
+
+Type_Storage::~Type_Storage()
+{
+ csv_assert(pInstance_ != 0);
+ pInstance_ = 0;
+}
+
+Type_id
+Type_Storage::Search_BuiltInType( const String & i_specializedName ) const
+{
+ return csv::value_from_map(aBuiltInTypes, i_specializedName, Tid(0));
+}
+
+void
+Type_Storage::Setup_BuiltInTypes()
+{
+ Set_BuiltInType( predefined::t_void, "void" );
+ Set_BuiltInType( predefined::t_bool, "bool" );
+ Set_BuiltInType( predefined::t_char, "char" );
+ Set_BuiltInType( predefined::t_signed_char, "char", TYSP_signed );
+ Set_BuiltInType( predefined::t_unsigned_char, "char", TYSP_unsigned );
+ Set_BuiltInType( predefined::t_short, "short" );
+ Set_BuiltInType( predefined::t_unsigned_short, "short", TYSP_unsigned );
+ Set_BuiltInType( predefined::t_int, "int" );
+ Set_BuiltInType( predefined::t_unsigned_int, "int", TYSP_unsigned );
+ Set_BuiltInType( predefined::t_long, "long" );
+ Set_BuiltInType( predefined::t_unsigned_long, "long", TYSP_unsigned );
+ Set_BuiltInType( predefined::t_float, "float" );
+ Set_BuiltInType( predefined::t_double, "double" );
+ Set_BuiltInType( predefined::t_size_t, "size_t" );
+ Set_BuiltInType( predefined::t_wchar_t, "wchar_t" );
+ Set_BuiltInType( predefined::t_ptrdiff_t, "ptrdiff_t" );
+ Set_BuiltInType( predefined::t_ellipse, "..." );
+}
+
+void
+Type_Storage::Set_BuiltInType( Rid i_id,
+ const char * i_sName,
+ ary::cpp::E_TypeSpecialisation i_eSpecialisation )
+{
+ DYN BuiltInType &
+ rNew = *new BuiltInType(i_sName, i_eSpecialisation);
+ Set_Reserved( i_id, rNew); // Here goes the ownership for rNew.
+ aBuiltInTypes[rNew.SpecializedName()] = rNew.TypeId();
+}
+
+
+
+} // namespace cpp
+} // namespace ary
diff --git a/autodoc/source/ary/cpp/cs_type.hxx b/autodoc/source/ary/cpp/cs_type.hxx
new file mode 100644
index 000000000000..ee8ceee06c12
--- /dev/null
+++ b/autodoc/source/ary/cpp/cs_type.hxx
@@ -0,0 +1,138 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_CPP_CS_TYPE_HXX
+#define ARY_CPP_CS_TYPE_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <store/s_storage.hxx>
+ // COMPONENTS
+ // PARAMETERS
+#include <ary/cpp/c_type.hxx>
+#include <ary/cpp/c_traits.hxx>
+#include <ary/cpp/usedtype.hxx>
+#include <sortedids.hxx>
+
+
+
+namespace ary
+{
+namespace cpp
+{
+
+
+
+/** The data base for all ->ary::cpp::Type objects.
+*/
+class Type_Storage : public ::ary::stg::Storage<Type>
+{
+ public:
+ typedef SortedIds<UsedType_Compare> UT_Index;
+
+ Type_Storage();
+ virtual ~Type_Storage();
+
+ const UT_Index & UsedTypeIndex() const;
+
+ UT_Index & UsedTypeIndex();
+ Type_id Search_BuiltInType(
+ const String & i_specializedName ) const;
+
+ static Type_Storage &
+ Instance_() { csv_assert(pInstance_ != 0);
+ return *pInstance_; }
+ private:
+ // Locals
+ void Setup_BuiltInTypes();
+ void Set_BuiltInType(
+ Rid i_nId,
+ const char * i_sName,
+ ary::cpp::E_TypeSpecialisation
+ i_eSpecialisation = TYSP_none );
+ // DATA
+ UT_Index aUsedTypes;
+ std::map<String,Type_id>
+ aBuiltInTypes;
+
+
+ static Type_Storage *
+ pInstance_;
+};
+
+
+
+
+namespace predefined
+{
+
+enum E_Type
+{
+ // 0 is always unused with repository storages.
+ t_void = 1,
+ t_bool,
+ t_char,
+ t_signed_char,
+ t_unsigned_char,
+ t_short,
+ t_unsigned_short,
+ t_int,
+ t_unsigned_int,
+ t_long,
+ t_unsigned_long,
+ t_float,
+ t_double,
+ t_size_t,
+ t_wchar_t,
+ t_ptrdiff_t,
+ t_ellipse,
+ t_MAX
+};
+
+} // namespace predefined
+
+
+
+// IMPLEMENTATION
+inline const Type_Storage::UT_Index &
+Type_Storage::UsedTypeIndex() const
+{
+ return aUsedTypes;
+}
+
+inline Type_Storage::UT_Index &
+Type_Storage::UsedTypeIndex()
+{
+ return aUsedTypes;
+}
+
+
+} // namespace cpp
+} // namespace ary
+#endif
diff --git a/autodoc/source/ary/cpp/makefile.mk b/autodoc/source/ary/cpp/makefile.mk
new file mode 100644
index 000000000000..5c20a59bd82e
--- /dev/null
+++ b/autodoc/source/ary/cpp/makefile.mk
@@ -0,0 +1,80 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..$/..$/..
+
+PRJNAME=autodoc
+TARGET=ary_cpp
+
+
+
+# --- Settings -----------------------------------------------------
+
+ENABLE_EXCEPTIONS=true
+PRJINC=$(PRJ)$/source
+
+.INCLUDE : settings.mk
+.INCLUDE : $(PRJ)$/source$/mkinc$/fullcpp.mk
+
+
+# --- Files --------------------------------------------------------
+
+
+OBJFILES= \
+ $(OBJ)$/c_builtintype.obj \
+ $(OBJ)$/c_class.obj \
+ $(OBJ)$/c_de.obj \
+ $(OBJ)$/c_define.obj \
+ $(OBJ)$/c_enum.obj \
+ $(OBJ)$/c_enuval.obj \
+ $(OBJ)$/c_funct.obj \
+ $(OBJ)$/c_macro.obj \
+ $(OBJ)$/c_namesp.obj \
+ $(OBJ)$/c_osigna.obj \
+ $(OBJ)$/c_reposypart.obj \
+ $(OBJ)$/c_slots.obj \
+ $(OBJ)$/c_traits.obj \
+ $(OBJ)$/c_tydef.obj \
+ $(OBJ)$/c_vari.obj \
+ $(OBJ)$/ca_ce.obj \
+ $(OBJ)$/ca_def.obj \
+ $(OBJ)$/ca_type.obj \
+ $(OBJ)$/cs_ce.obj \
+ $(OBJ)$/cs_def.obj \
+ $(OBJ)$/cs_type.obj \
+ $(OBJ)$/namechain.obj \
+ $(OBJ)$/tplparam.obj \
+ $(OBJ)$/usedtype.obj
+
+
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : target.mk
+
+
+
diff --git a/autodoc/source/ary/cpp/namechain.cxx b/autodoc/source/ary/cpp/namechain.cxx
new file mode 100644
index 000000000000..d164a588dcb9
--- /dev/null
+++ b/autodoc/source/ary/cpp/namechain.cxx
@@ -0,0 +1,196 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <ary/cpp/namechain.hxx>
+
+
+// NOT FULLY DEFINED SERVICES
+#include <ary/cpp/usedtype.hxx>
+#include <ary/cpp/c_gate.hxx>
+#include "tplparam.hxx"
+
+
+
+namespace ary
+{
+namespace cpp
+{
+namespace ut
+{
+
+
+//********************* NameSegment ******************//
+
+NameSegment::NameSegment( const char * i_sName )
+ : sName( i_sName )
+ // pTemplate
+{
+}
+
+NameSegment::NameSegment( const NameSegment & i_rSeg )
+ : sName(i_rSeg.sName)
+ // pTemplate
+{
+ // KORR_FUTURE : Handling of copying of templates.
+// csv_assert( NOT i_rSeg.pTemplate );
+}
+
+NameSegment& NameSegment::operator=(const NameSegment & i_rSeg)
+{
+ sName = i_rSeg.sName;
+ return *this;
+}
+
+NameSegment::~NameSegment()
+{
+}
+
+List_TplParameter &
+NameSegment::AddTemplate()
+{
+ return * (pTemplate = new List_TplParameter);
+}
+
+intt
+NameSegment::Compare( const NameSegment & i_rOther ) const
+{
+ intt nResult = strcmp( sName.c_str(), i_rOther.sName.c_str() );
+ if (nResult != 0)
+ return nResult;
+ if ( bool(pTemplate) != bool(i_rOther.pTemplate) )
+ {
+ if ( NOT pTemplate )
+ return -1;
+ else
+ return +1;
+ }
+ else if ( NOT pTemplate )
+ return 0;
+ else
+ return pTemplate->Compare( *i_rOther.pTemplate );
+}
+
+void
+NameSegment::Get_Text_AsScope( StreamStr & o_rOut,
+ const Gate & i_rGate ) const
+{
+ o_rOut << sName;
+ if ( pTemplate )
+ pTemplate->Get_Text( o_rOut, i_rGate );
+}
+
+void
+NameSegment::Get_Text_AsMainType( StreamStr & o_rName,
+ StreamStr & o_rPostName,
+ const Gate & i_rGate ) const
+{
+ o_rName << sName;
+ if ( pTemplate )
+ pTemplate->Get_Text( o_rPostName, i_rGate );
+}
+
+
+//********************* NameChain ******************//
+
+NameChain::NameChain()
+// : aSegments
+{
+}
+
+NameChain::~NameChain()
+{
+}
+
+void
+NameChain::Add_Segment( const char * i_sSeg )
+{
+ aSegments.push_back( NameSegment(i_sSeg) );
+}
+
+List_TplParameter &
+NameChain::Templatize_LastSegment()
+{
+ csv_assert( aSegments.size() > 0 );
+
+ return aSegments.back().AddTemplate();
+}
+
+intt
+NameChain::Compare( const NameChain & i_rChain ) const
+{
+ intt nResult = intt(aSegments.size()) - intt(i_rChain.aSegments.size());
+ if (nResult != 0)
+ return nResult;
+
+ std::vector< NameSegment >::const_iterator it1 = aSegments.begin();
+ std::vector< NameSegment >::const_iterator it1End = aSegments.end();
+ std::vector< NameSegment >::const_iterator it2 = i_rChain.aSegments.begin();
+
+ for ( ; it1 != it1End; ++it1, ++it2 )
+ {
+ nResult = (*it1).Compare(*it2);
+ if (nResult != 0)
+ return nResult;
+ }
+
+ return 0;
+}
+
+const String &
+NameChain::LastSegment() const
+{
+ if ( aSegments.size() > 0 )
+ return aSegments.back().Name();
+ return String::Null_();
+}
+
+void
+NameChain::Get_Text( StreamStr & o_rPreName,
+ StreamStr & o_rName,
+ StreamStr & o_rPostName,
+ const Gate & i_rGate ) const
+{
+ std::vector< NameSegment >::const_iterator it = aSegments.begin();
+ std::vector< NameSegment >::const_iterator itEnd = aSegments.end();
+
+ if ( it == itEnd )
+ return;
+
+ for ( --itEnd; it != itEnd; ++it )
+ {
+ (*it).Get_Text_AsScope( o_rPreName, i_rGate );
+ o_rPreName << "::";
+ }
+ (*it).Get_Text_AsMainType( o_rName, o_rPostName, i_rGate );
+}
+
+
+
+} // namespace ut
+} // namespace cpp
+} // namespace ary
diff --git a/autodoc/source/ary/cpp/tplparam.cxx b/autodoc/source/ary/cpp/tplparam.cxx
new file mode 100644
index 000000000000..67f8439c0c59
--- /dev/null
+++ b/autodoc/source/ary/cpp/tplparam.cxx
@@ -0,0 +1,74 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "tplparam.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include <ary/cpp/c_gate.hxx>
+#include <ary/cpp/cp_type.hxx>
+
+
+namespace ary
+{
+namespace cpp
+{
+namespace ut
+{
+
+TplParameter_Type::TplParameter_Type( Tid i_nType )
+ : nType(i_nType)
+{
+}
+
+TplParameter_Type::~TplParameter_Type()
+{
+}
+
+intt
+TplParameter_Type::Compare( const TemplateParameter & i_rOther ) const
+{
+ const TplParameter_Type * pOther
+ = dynamic_cast< const TplParameter_Type* >( &i_rOther );
+ if (pOther == 0)
+ return -1;
+
+ return static_cast<long>(nType.Value())
+ - static_cast<long>(pOther->nType.Value());
+}
+
+void
+TplParameter_Type::Get_Text( StreamStr & o_rOut,
+ const ary::cpp::Gate & i_rGate ) const
+{
+ i_rGate.Types().Get_TypeText( o_rOut, nType );
+}
+
+} // namespace ut
+} // namespace cpp
+} // namespace ary
diff --git a/autodoc/source/ary/cpp/tplparam.hxx b/autodoc/source/ary/cpp/tplparam.hxx
new file mode 100644
index 000000000000..f8ee57b968c7
--- /dev/null
+++ b/autodoc/source/ary/cpp/tplparam.hxx
@@ -0,0 +1,84 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_CPP_TPLPARAM_HXX
+#define ARY_CPP_TPLPARAM_HXX
+
+// USED SERVICES
+#include <ary/cpp/c_types4cpp.hxx>
+
+
+
+
+namespace ary
+{
+namespace cpp
+{
+ class UsedType;
+ class Gate;
+
+namespace ut
+{
+
+
+class TemplateParameter
+{
+ public:
+ virtual ~TemplateParameter() {}
+
+ virtual intt Compare(
+ const TemplateParameter &
+ i_rOther ) const = 0;
+ virtual void Get_Text(
+ StreamStr & o_rOut,
+ const ary::cpp::Gate &
+ i_rGate ) const = 0;
+};
+
+
+class TplParameter_Type : public TemplateParameter
+{
+ public:
+ TplParameter_Type(
+ Tid i_nType );
+ ~TplParameter_Type();
+
+ virtual intt Compare(
+ const TemplateParameter &
+ i_rOther ) const;
+ virtual void Get_Text(
+ StreamStr & o_rOut,
+ const ary::cpp::Gate &
+ i_rGate ) const;
+ private:
+ Tid nType;
+};
+
+} // namespace ut
+} // namespace cpp
+} // namespace ary
+#endif
diff --git a/autodoc/source/ary/cpp/usedtype.cxx b/autodoc/source/ary/cpp/usedtype.cxx
new file mode 100644
index 000000000000..bf1d864ad68b
--- /dev/null
+++ b/autodoc/source/ary/cpp/usedtype.cxx
@@ -0,0 +1,575 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <ary/cpp/usedtype.hxx>
+
+
+// NOT FULLY DEFINED SERVICES
+#include <cosv/tpl/tpltools.hxx>
+#include <ary/symtreenode.hxx>
+#include <ary/cpp/c_ce.hxx>
+#include <ary/cpp/c_class.hxx>
+#include <ary/cpp/c_namesp.hxx>
+#include <ary/cpp/c_slntry.hxx>
+#include <ary/cpp/c_tydef.hxx>
+#include <ary/cpp/c_traits.hxx>
+#include <ary/cpp/c_types4cpp.hxx>
+#include <ary/cpp/c_gate.hxx>
+#include <ary/cpp/cp_ce.hxx>
+#include <ary/cpp/cp_type.hxx>
+#include <ary/doc/d_oldcppdocu.hxx>
+#include <ary/getncast.hxx>
+#include "tplparam.hxx"
+
+
+
+namespace
+{
+
+using namespace ::ary::cpp;
+typedef std::vector< ary::cpp::E_ConVol > PtrLevelVector;
+
+
+inline bool
+result2bool( intt i_nResult )
+ { return i_nResult < 0; }
+
+
+intt compare_PtrLevelVector(
+ const PtrLevelVector &
+ i_r1,
+ const PtrLevelVector &
+ i_r2 );
+inline intt
+compare_ConVol( E_ConVol i_e1,
+ E_ConVol i_e2 )
+ { return intt(i_e1) - intt(i_e2); }
+
+inline intt
+compare_bool( bool i_b1,
+ bool i_b2 )
+ { return i_b1 == i_b2
+ ? 0
+ : i_b1
+ ? -1
+ : +1; }
+inline intt
+compare_Specialisation( E_TypeSpecialisation i_e1,
+ E_TypeSpecialisation i_e2 )
+ { return intt(i_e1) - intt(i_e2); }
+
+inline bool
+is_const( E_ConVol i_eCV )
+ { return ( intt(i_eCV) & intt(CONVOL_const) ) != 0; }
+
+inline bool
+is_volatile( E_ConVol i_eCV )
+ { return ( intt(i_eCV) & intt(CONVOL_volatile) ) != 0; }
+
+
+intt
+compare_PtrLevelVector( const PtrLevelVector & i_r1,
+ const PtrLevelVector & i_r2 )
+{
+ intt nResult = i_r1.size() - i_r2.size();
+ if ( nResult != 0 )
+ return nResult;
+
+ PtrLevelVector::const_iterator it1 = i_r1.begin();
+ PtrLevelVector::const_iterator it1End = i_r1.end();
+ PtrLevelVector::const_iterator it2 = i_r2.begin();
+
+ for ( ; it1 != it1End; ++it1, ++it2 )
+ {
+ nResult = compare_ConVol(*it1, *it2);
+ if ( nResult != 0 )
+ return nResult;
+ }
+
+ return 0;
+}
+
+
+} // anonymous namespace
+
+
+
+
+namespace ary
+{
+namespace cpp
+{
+
+typedef symtree::Node<CeNode_Traits> CeNode;
+typedef ut::NameChain::const_iterator nc_iter;
+
+Ce_id CheckForRelatedCe_inNode(
+ const CeNode & i_node,
+ const StringVector& i_qualification,
+ const String & i_name );
+
+
+UsedType::UsedType(Ce_id i_scope )
+ : aPath(),
+ aPtrLevels(),
+ eConVol_Type(CONVOL_none),
+ bIsReference(false),
+ bIsAbsolute(false),
+ bRefers2BuiltInType(false),
+ eTypeSpecialisation(TYSP_none),
+ nRelatedCe(0),
+ nScope(i_scope)
+{
+}
+
+UsedType::~UsedType()
+{
+}
+
+
+bool
+UsedType::operator<( const UsedType & i_rType ) const
+{
+ intt nResult = compare_bool( bIsAbsolute, i_rType.bIsAbsolute );
+ if ( nResult != 0 )
+ return result2bool(nResult);
+
+ nResult = static_cast<intt>(nScope.Value())
+ -
+ static_cast<intt>(i_rType.nScope.Value());
+ if ( nResult != 0 )
+ return result2bool(nResult);
+
+ nResult = aPath.Compare( i_rType.aPath );
+ if ( nResult != 0 )
+ return result2bool(nResult);
+
+ nResult = compare_ConVol( eConVol_Type, i_rType.eConVol_Type );
+ if ( nResult != 0 )
+ return result2bool(nResult);
+
+ nResult = compare_PtrLevelVector( aPtrLevels, i_rType.aPtrLevels );
+ if ( nResult != 0 )
+ return result2bool(nResult);
+
+ nResult = compare_bool( bIsReference, i_rType.bIsReference );
+ if ( nResult != 0 )
+ return result2bool(nResult);
+
+ nResult = compare_Specialisation( eTypeSpecialisation, i_rType.eTypeSpecialisation );
+ if ( nResult != 0 )
+ return result2bool(nResult);
+
+ return false;
+}
+
+void
+UsedType::Set_Absolute()
+{
+ bIsAbsolute = true;
+}
+
+void
+UsedType::Add_NameSegment( const char * i_sSeg )
+{
+ aPath.Add_Segment(i_sSeg);
+}
+
+ut::List_TplParameter &
+UsedType::Enter_Template()
+{
+ return aPath.Templatize_LastSegment();
+}
+
+void
+UsedType::Set_Unsigned()
+{
+ eTypeSpecialisation = TYSP_unsigned;
+}
+
+void
+UsedType::Set_Signed()
+{
+ eTypeSpecialisation = TYSP_signed;
+}
+
+void
+UsedType::Set_BuiltIn( const char * i_sType )
+{
+ aPath.Add_Segment(i_sType);
+ bRefers2BuiltInType = true;
+}
+
+void
+UsedType::Set_Const()
+{
+ if (PtrLevel() == 0)
+ eConVol_Type = E_ConVol(eConVol_Type | CONVOL_const);
+ else
+ aPtrLevels.back() = E_ConVol(aPtrLevels.back() | CONVOL_const);
+}
+
+void
+UsedType::Set_Volatile()
+{
+ if (PtrLevel() == 0)
+ eConVol_Type = E_ConVol(eConVol_Type | CONVOL_volatile);
+ else
+ aPtrLevels.back() = E_ConVol(aPtrLevels.back() | CONVOL_volatile);
+}
+
+void
+UsedType::Add_PtrLevel()
+{
+ aPtrLevels.push_back(CONVOL_none);
+}
+
+void
+UsedType::Set_Reference()
+{
+ bIsReference = true;
+}
+
+inline bool
+IsInternal(const ary::cpp::CodeEntity & i_ce)
+{
+ const ary::doc::OldCppDocu *
+ docu = dynamic_cast< const ary::doc::OldCppDocu* >(i_ce.Docu().Data());
+ if (docu != 0)
+ return docu->IsInternal();
+ return false;
+}
+
+
+void
+UsedType::Connect2Ce( const CePilot & i_ces)
+{
+ StringVector
+ qualification;
+ String
+ name;
+ Get_NameParts(qualification, name);
+
+ for ( const CeNode * scope_node = CeNode_Traits::NodeOf_(
+ i_ces.Find_Ce(nScope));
+ scope_node != 0;
+ scope_node = scope_node->Parent() )
+ {
+ nRelatedCe = CheckForRelatedCe_inNode(*scope_node, qualification, name);
+ if ( nRelatedCe.IsValid() )
+ {
+ if ( IsInternal(i_ces.Find_Ce(nRelatedCe)) )
+ nRelatedCe = Ce_id(0);
+ return;
+ }
+ } // end for
+}
+
+void
+UsedType::Connect2CeOnlyKnownViaBaseClass(const Gate & i_gate)
+{
+ csv_assert(nScope.IsValid());
+ CesResultList
+ instances = i_gate.Ces().Search_TypeName( LocalName() );
+
+ // If there are no matches, or only one match that was already
+ // accepted, all work is done.
+ if ( (nRelatedCe.IsValid() AND instances.size() == 1)
+ OR instances.size() == 0 )
+ return;
+
+ StringVector
+ qualification;
+ String
+ name;
+ Get_NameParts(qualification, name);
+
+ const CodeEntity &
+ scopece = i_gate.Ces().Find_Ce(nScope);
+
+ // Else search for declaration in own class and then in base classes.
+ // These would be of higher priority than those in parent namespaces.
+ Ce_id
+ foundce = RecursiveSearchCe_InBaseClassesOf(
+ scopece, qualification, name, i_gate);
+ if (foundce.IsValid())
+ nRelatedCe = foundce;
+
+ if ( nRelatedCe.IsValid() AND IsInternal(i_gate.Ces().Find_Ce(nRelatedCe)) )
+ {
+ nRelatedCe = Ce_id(0);
+ }
+}
+
+bool
+UsedType::IsBuiltInType() const
+{
+ return bRefers2BuiltInType
+ AND aPtrLevels.size() == 0
+ AND NOT bIsReference
+ AND eConVol_Type == ary::cpp::CONVOL_none;
+}
+
+const String &
+UsedType::LocalName() const
+{
+ return aPath.LastSegment();
+}
+
+E_TypeSpecialisation
+UsedType::TypeSpecialisation() const
+{
+ return eTypeSpecialisation;
+}
+
+void
+UsedType::do_Accept(csv::ProcessorIfc & io_processor) const
+{
+ csv::CheckedCall(io_processor,*this);
+}
+
+ary::ClassId
+UsedType::get_AryClass() const
+{
+ return class_id;
+}
+
+Rid
+UsedType::inq_RelatedCe() const
+{
+ return nRelatedCe.Value();
+}
+
+bool
+UsedType::inq_IsConst() const
+{
+ if ( is_const(eConVol_Type) )
+ return true;
+ for ( PtrLevelVector::const_iterator it = aPtrLevels.begin();
+ it != aPtrLevels.end();
+ ++it )
+ {
+ if ( is_const(*it) )
+ return true;
+ }
+
+ return false;
+}
+
+void
+UsedType::inq_Get_Text( StreamStr & o_rPreName,
+ StreamStr & o_rName,
+ StreamStr & o_rPostName,
+ const Gate & i_rGate ) const
+{
+ if ( is_const(eConVol_Type) )
+ o_rPreName << "const ";
+ if ( is_volatile(eConVol_Type) )
+ o_rPreName << "volatile ";
+ if ( bIsAbsolute )
+ o_rPreName << "::";
+
+ aPath.Get_Text( o_rPreName, o_rName, o_rPostName, i_rGate );
+
+ for ( PtrLevelVector::const_iterator it = aPtrLevels.begin();
+ it != aPtrLevels.end();
+ ++it )
+ {
+ o_rPostName << " *";
+ if ( is_const(*it) )
+ o_rPostName << " const";
+ if ( is_volatile(*it) )
+ o_rPostName << " volatile";
+ }
+ if ( bIsReference )
+ o_rPostName << " &";
+}
+
+Ce_id
+UsedType::RecursiveSearchCe_InBaseClassesOf( const CodeEntity & i_mayBeClass,
+ const StringVector & i_myQualification,
+ const String & i_myName,
+ const Gate & i_gate ) const
+{
+ // Find in this class?
+ const CeNode *
+ basenode = CeNode_Traits::NodeOf_(i_mayBeClass);
+ if (basenode == 0)
+ return Ce_id(0);
+ Ce_id
+ found = CheckForRelatedCe_inNode(*basenode, i_myQualification, i_myName);
+ if (found.IsValid())
+ return found;
+
+
+ const Class *
+ cl = ary_cast<Class>(&i_mayBeClass);
+ if (cl == 0)
+ return Ce_id(0);
+
+ for ( List_Bases::const_iterator it = cl->BaseClasses().begin();
+ it != cl->BaseClasses().end();
+ ++it )
+ {
+ csv_assert((*it).nId.IsValid());
+ Ce_id
+ base = i_gate.Types().Find_Type((*it).nId).RelatedCe();
+ while (base.IsValid() AND is_type<Typedef>(i_gate.Ces().Find_Ce(base)) )
+ {
+ base = i_gate.Types().Find_Type(
+ ary_cast<Typedef>(i_gate.Ces().Find_Ce(base))
+ .DescribingType() )
+ .RelatedCe();
+ }
+
+ if (base.IsValid())
+ {
+ const CodeEntity &
+ basece = i_gate.Ces().Find_Ce(base);
+ found = RecursiveSearchCe_InBaseClassesOf(
+ basece, i_myQualification, i_myName, i_gate);
+ if (found.IsValid())
+ return found;
+ }
+ } // end for
+
+ return Ce_id(0);
+}
+
+
+void
+UsedType::Get_NameParts( StringVector & o_qualification,
+ String & o_name )
+{
+ nc_iter nit = aPath.begin();
+ nc_iter nit_end = aPath.end();
+ csv_assert(nit != nit_end); // Each UsedType has to have a local name.
+
+ --nit_end;
+ o_name = (*nit_end).Name();
+ for ( ;
+ nit != nit_end;
+ ++nit )
+ {
+ o_qualification.push_back( (*nit).Name() );
+ }
+}
+
+Ce_id
+CheckForRelatedCe_inNode( const CeNode & i_node,
+ const StringVector & i_qualification,
+ const String & i_name )
+{
+ if (i_qualification.size() > 0)
+ {
+ Ce_id
+ ret(0);
+ i_node.SearchBelow( ret,
+ i_qualification.begin(),
+ i_qualification.end(),
+ i_name );
+ return ret;
+ }
+ else
+ {
+ return i_node.Search(i_name);
+ }
+}
+
+
+namespace ut
+{
+
+List_TplParameter::List_TplParameter()
+ : aTplParameters()
+{
+}
+
+List_TplParameter::~List_TplParameter()
+{
+ csv::erase_container_of_heap_ptrs(aTplParameters);
+}
+
+void
+List_TplParameter::AddParam_Type( Type_id i_nType )
+{
+ aTplParameters.push_back( new TplParameter_Type(i_nType) );
+}
+
+void
+List_TplParameter::Get_Text( StreamStr & o_rOut,
+ const ary::cpp::Gate & i_rGate ) const
+{
+ Vector_TplArgument::const_iterator it = aTplParameters.begin();
+ Vector_TplArgument::const_iterator itEnd = aTplParameters.end();
+
+ if ( it == itEnd )
+ {
+ o_rOut << "<>";
+ return;
+ }
+
+ o_rOut << "< ";
+
+ (*it)->Get_Text( o_rOut, i_rGate );
+
+ for ( ++it; it != itEnd; ++it )
+ {
+ o_rOut << ", ";
+ (*it)->Get_Text( o_rOut, i_rGate );
+ }
+
+ o_rOut << " >";
+}
+
+intt
+List_TplParameter::Compare( const List_TplParameter & i_rOther ) const
+{
+ intt nResult = intt(aTplParameters.size()) - intt(i_rOther.aTplParameters.size());
+
+ if (nResult != 0)
+ return nResult;
+
+ Vector_TplArgument::const_iterator it1 = aTplParameters.begin();
+ Vector_TplArgument::const_iterator it1End = aTplParameters.end();
+ Vector_TplArgument::const_iterator it2 = i_rOther.aTplParameters.begin();
+
+ for ( ; it1 != it1End; ++it1, ++it2 )
+ {
+ nResult = (*it1)->Compare( *(*it2) );
+ if (nResult != 0)
+ return nResult;
+ }
+
+ return 0;
+}
+
+
+} // namespace ut
+} // namespace cpp
+} // namespace ary
diff --git a/autodoc/source/ary/doc/d_boolean.cxx b/autodoc/source/ary/doc/d_boolean.cxx
new file mode 100644
index 000000000000..9d28b822ce1b
--- /dev/null
+++ b/autodoc/source/ary/doc/d_boolean.cxx
@@ -0,0 +1,55 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <ary/doc/d_boolean.hxx>
+
+
+// NOT FULLY DEFINED SERVICES
+
+
+
+namespace ary
+{
+namespace doc
+{
+
+Boolean::~Boolean()
+{
+}
+
+void
+Boolean::do_Accept(csv::ProcessorIfc & io_processor ) const
+{
+ csv::CheckedCall(io_processor,*this);
+}
+
+
+
+
+} // namespace doc
+} // namespace ary
diff --git a/autodoc/source/ary/doc/d_docu.cxx b/autodoc/source/ary/doc/d_docu.cxx
new file mode 100644
index 000000000000..50c841e2fb00
--- /dev/null
+++ b/autodoc/source/ary/doc/d_docu.cxx
@@ -0,0 +1,59 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <ary/doc/d_docu.hxx>
+
+
+// NOT FULLY DEFINED SERVICES
+#include <ary/doc/d_node.hxx>
+
+namespace ary
+{
+namespace doc
+{
+
+Documentation::Documentation()
+ : pData(0)
+{
+}
+
+Documentation::~Documentation()
+{
+}
+
+void
+Documentation::do_Accept(csv::ProcessorIfc & io_processor) const
+{
+ csv::CheckedCall(io_processor,*this);
+}
+
+
+
+
+} // namespace doc
+} // namespace ary
diff --git a/autodoc/source/ary/doc/d_node.cxx b/autodoc/source/ary/doc/d_node.cxx
new file mode 100644
index 000000000000..23e30c6ca286
--- /dev/null
+++ b/autodoc/source/ary/doc/d_node.cxx
@@ -0,0 +1,69 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <ary/doc/d_node.hxx>
+
+
+namespace ary
+{
+namespace doc
+{
+
+
+
+Node::~Node()
+{
+}
+
+Node::Node(nodetype::id i_type)
+ : nType(i_type),
+ pNext(0)
+{
+}
+
+void
+Node::Add_toChain( DYN Node & pass_nextNode )
+{
+ if (NOT pNext)
+ pNext = &pass_nextNode;
+ else
+ pNext->Add_toChain(pass_nextNode);
+}
+
+uintt
+Node::ListSize() const
+{
+ return pNext
+ ? pNext->ListSize() + 1
+ : 1;
+}
+
+
+
+} // namespace doc
+} // namespace ary
diff --git a/autodoc/source/ary/doc/d_oldcppdocu.cxx b/autodoc/source/ary/doc/d_oldcppdocu.cxx
new file mode 100644
index 000000000000..26ab84fb768e
--- /dev/null
+++ b/autodoc/source/ary/doc/d_oldcppdocu.cxx
@@ -0,0 +1,336 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <ary/doc/d_oldcppdocu.hxx>
+
+
+// NOT FULLY DEFINED SERVICES
+#include <ary/info/all_tags.hxx>
+#include <ary/info/docstore.hxx>
+#include <ary/info/infodisp.hxx>
+#include <docu_node_ids.hxx>
+
+
+
+
+namespace ary
+{
+namespace doc
+{
+
+using namespace info;
+
+
+
+
+unsigned char C_ucNO_INDEX = 255;
+typedef DYN StdTag * (F_CREATE)();
+
+
+OldCppDocu::OldCppDocu()
+ : Node(docnt::nt_OldCppDocu),
+ bIsObsolete(false),
+ bIsInternal(false),
+ bIsInterface(false)
+{
+ memset( nTags, C_ucNO_INDEX, size_t(C_eAtTag_NrOfClasses) );
+}
+
+OldCppDocu::~OldCppDocu()
+{
+}
+
+void
+OldCppDocu::Store2( info::DocuStore & o_rDocuStore )
+{
+ o_rDocuStore.Store2ConnectedDeclaration(*this);
+}
+
+AtTag *
+OldCppDocu::Create_StdTag( E_AtTagId i_eId )
+{
+ UINT8 nIndex = static_cast<UINT8>(i_eId);
+ if ( nTags[nIndex] == C_ucNO_INDEX )
+ {
+ AtTag * ret = new StdTag(i_eId);
+ NewTag(nIndex) = ret;
+ return ret;
+ }
+ else
+ {
+ return GetTag(nIndex).GetFollower();
+ }
+}
+
+AtTag *
+OldCppDocu::CheckIn_BaseTag()
+{
+ UINT8 nIndex = atc_base;
+ if ( nTags[nIndex] == C_ucNO_INDEX )
+ {
+ AtTag * ret = new BaseTag();
+ NewTag(nIndex) = ret;
+ return ret;
+ }
+ else
+ {
+ return GetTag(nIndex).GetFollower();
+ }
+}
+
+AtTag *
+OldCppDocu::CheckIn_ExceptionTag()
+{
+ UINT8 nIndex = atc_exception;
+ if ( nTags[nIndex] == C_ucNO_INDEX )
+ {
+ AtTag * ret = new ExceptionTag();
+ NewTag(nIndex) = ret;
+ return ret;
+ }
+ else
+ {
+ return GetTag(nIndex).GetFollower();
+ }
+}
+
+AtTag *
+OldCppDocu::Create_ImplementsTag()
+{
+ UINT8 nIndex = atc_implements;
+ if ( nTags[nIndex] == C_ucNO_INDEX )
+ {
+ AtTag * ret = new ImplementsTag();
+ NewTag(nIndex) = ret;
+ return ret;
+ }
+ else
+ {
+ return GetTag(nIndex).GetFollower();
+ }
+}
+
+AtTag *
+OldCppDocu::Create_KeywordTag()
+{
+ UINT8 nIndex = atc_keyword;
+ if ( nTags[nIndex] == C_ucNO_INDEX )
+ {
+ AtTag * ret = new KeywordTag();
+ NewTag(nIndex) = ret;
+ return ret;
+ }
+ else
+ {
+ return GetTag(nIndex).GetFollower();
+ }
+}
+
+AtTag *
+OldCppDocu::CheckIn_ParameterTag()
+{
+ UINT8 nIndex = atc_parameter;
+ if ( nTags[nIndex] == C_ucNO_INDEX )
+ {
+ AtTag * ret = new ParameterTag();
+ NewTag(nIndex) = ret;
+ return ret;
+ }
+ else
+ {
+ return GetTag(nIndex).GetFollower();
+ }
+}
+
+AtTag *
+OldCppDocu::CheckIn_SeeTag()
+{
+ UINT8 nIndex = atc_see;
+ if ( nTags[nIndex] == C_ucNO_INDEX )
+ {
+ AtTag * ret = new SeeTag();
+ NewTag(nIndex) = ret;
+ return ret;
+ }
+ else
+ {
+ return GetTag(nIndex).GetFollower();
+ }
+}
+
+AtTag *
+OldCppDocu::CheckIn_TemplateTag()
+{
+ UINT8 nIndex = atc_template;
+ if ( nTags[nIndex] == C_ucNO_INDEX )
+ {
+ AtTag * ret = new TemplateTag();
+ NewTag(nIndex) = ret;
+ return ret;
+ }
+ else
+ {
+ return GetTag(nIndex).GetFollower();
+ }
+}
+
+AtTag *
+OldCppDocu::Create_LabelTag()
+{
+ UINT8 nIndex = atc_label;
+ if ( nTags[nIndex] == C_ucNO_INDEX )
+ {
+ AtTag * ret = new LabelTag();
+ NewTag(nIndex) = ret;
+ return ret;
+ }
+ else
+ {
+ return GetTag(nIndex).GetFollower();
+ }
+}
+
+AtTag *
+OldCppDocu::Create_DefaultTag()
+{
+ UINT8 nIndex = atid_descr;
+ if ( nTags[nIndex] == C_ucNO_INDEX )
+ {
+ AtTag * ret = new StdTag(atid_descr);
+ NewTag(nIndex) = ret;
+ return ret;
+ }
+ else
+ {
+ return GetTag(nIndex).GetFollower();
+ }
+}
+
+AtTag *
+OldCppDocu::Create_SinceTag()
+{
+ UINT8 nIndex = atc_since;
+ if ( nTags[nIndex] == C_ucNO_INDEX )
+ {
+ AtTag * ret = new SinceTag();
+ NewTag(nIndex) = ret;
+ return ret;
+ }
+ else
+ {
+ return GetTag(nIndex).GetFollower();
+ }
+}
+
+
+void
+OldCppDocu::Replace_AtShort_By_AtDescr()
+{
+ unsigned char nPosInTags = nTags[atid_short];
+ if ( nPosInTags == C_ucNO_INDEX )
+ return;
+
+ AtTag * pTag = aTags[ nPosInTags ];
+ if ( pTag == 0 ) // Should be csv_assert().
+ return;
+
+ csv_assert( dynamic_cast< StdTag* >(pTag) != 0 );
+ StdTag * pStdTag = static_cast< StdTag* >(pTag);
+
+ pStdTag->ChangeId2(atid_descr);
+ nTags[atid_short] = C_ucNO_INDEX;
+ nTags[atid_descr] = nPosInTags;
+}
+
+void
+OldCppDocu::Set_Obsolete()
+{
+ bIsObsolete = true;
+}
+
+void
+OldCppDocu::Set_Internal()
+{
+ bIsInternal = true;
+}
+
+const AtTag &
+OldCppDocu::Short() const
+{
+ static const StdTag aNull_(atid_short);
+
+ unsigned char nPosInTags = nTags[atid_short];
+ if ( nPosInTags != C_ucNO_INDEX )
+ {
+ AtTag * pTag = aTags[ nPosInTags ];
+ if ( pTag != 0 ) // Should be csv_assert().
+ {
+ return *pTag;
+ }
+ }
+
+ return aNull_;
+}
+
+AtTag * &
+OldCppDocu::NewTag(UINT8 i_nIndex)
+{
+ nTags[i_nIndex] = static_cast<UINT8>(aTags.size());
+ aTags.push_back(0);
+ return aTags.back();
+}
+
+AtTag &
+OldCppDocu::GetTag( UINT8 i_nIndex )
+{
+ csv_assert( i_nIndex < C_eAtTag_NrOfClasses );
+ csv_assert( nTags[i_nIndex] != C_ucNO_INDEX );
+ csv_assert( aTags[nTags[i_nIndex]] != 0 );
+ return * aTags[nTags[i_nIndex]];
+}
+
+bool
+OldCppDocu::IsInternal() const
+{
+ return bIsInternal;
+}
+
+bool
+OldCppDocu::IsInterface() const
+{
+ return bIsInterface;
+}
+
+void
+OldCppDocu::do_Accept(csv::ProcessorIfc & io_processor) const
+{
+ csv::CheckedCall(io_processor, *this);
+}
+
+} // namespace doc
+} // namespace ary
diff --git a/autodoc/source/ary/doc/d_oldidldocu.cxx b/autodoc/source/ary/doc/d_oldidldocu.cxx
new file mode 100644
index 000000000000..1c61a6ac0fb0
--- /dev/null
+++ b/autodoc/source/ary/doc/d_oldidldocu.cxx
@@ -0,0 +1,76 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <ary/doc/d_oldidldocu.hxx>
+
+// NOT FULLY DEFINED SERVICES
+#include <docu_node_ids.hxx>
+
+
+
+namespace ary
+{
+namespace doc
+{
+
+using namespace ::ary::inf;
+
+
+OldIdlDocu::OldIdlDocu()
+ : Node(docnt::nt_OldIdlDocu),
+ aShort(),
+ aDescription(),
+ aDeprecatedText(),
+ aTags(),
+ pExternShort(0),
+ bIsPublished(false),
+ bIsDeprecated(false),
+ bIsOptional(false)
+{
+}
+
+OldIdlDocu::~OldIdlDocu()
+{
+}
+
+void
+OldIdlDocu::AddToken2DeprecatedText( DYN DocuToken & let_drToken )
+{
+ aDeprecatedText.AddToken(let_drToken);
+}
+
+void
+OldIdlDocu::do_Accept(csv::ProcessorIfc & io_processor) const
+{
+ csv::CheckedCall(io_processor, *this);
+}
+
+
+
+} // namespace info
+} // namespace ary
diff --git a/autodoc/source/ary/doc/makefile.mk b/autodoc/source/ary/doc/makefile.mk
new file mode 100644
index 000000000000..21989dcc5827
--- /dev/null
+++ b/autodoc/source/ary/doc/makefile.mk
@@ -0,0 +1,58 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..$/..$/..
+
+PRJNAME=autodoc
+TARGET=ary_doc
+
+
+
+# --- Settings -----------------------------------------------------
+
+ENABLE_EXCEPTIONS=true
+PRJINC=$(PRJ)$/source
+
+.INCLUDE : settings.mk
+.INCLUDE : $(PRJ)$/source$/mkinc$/fullcpp.mk
+
+
+
+# --- Files --------------------------------------------------------
+
+
+OBJFILES= \
+ $(OBJ)$/d_boolean.obj \
+ $(OBJ)$/d_docu.obj \
+ $(OBJ)$/d_node.obj \
+ $(OBJ)$/d_oldcppdocu.obj \
+ $(OBJ)$/d_oldidldocu.obj
+
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : target.mk
diff --git a/autodoc/source/ary/idl/i2s_calculator.cxx b/autodoc/source/ary/idl/i2s_calculator.cxx
new file mode 100644
index 000000000000..111e9548b941
--- /dev/null
+++ b/autodoc/source/ary/idl/i2s_calculator.cxx
@@ -0,0 +1,992 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "i2s_calculator.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include <algorithm>
+#include <string.h>
+#include <cosv/file.hxx>
+//#include <adc_manager.hxx>
+//#include <adc_options.hxx>
+#include <ary/qualiname.hxx>
+#include <ary/idl/i_enum.hxx>
+#include <ary/idl/i_exception.hxx>
+#include <ary/idl/i_function.hxx>
+#include <ary/idl/i_gate.hxx>
+#include <ary/idl/i_interface.hxx>
+#include <ary/idl/ik_interface.hxx>
+#include <ary/idl/i_module.hxx>
+#include <ary/idl/i_property.hxx>
+#include <ary/idl/i_service.hxx>
+#include <ary/idl/i_singleton.hxx>
+#include <ary/idl/i_siservice.hxx>
+#include <ary/idl/i_sisingleton.hxx>
+#include <ary/idl/i_struct.hxx>
+#include <ary/idl/i_structelem.hxx>
+#include <ary/idl/i_typedef.hxx>
+#include <ary/idl/ip_ce.hxx>
+#include <ary/idl/ip_type.hxx>
+#include <ary/namesort.hxx>
+#include <nametreenode.hxx>
+#include "i_nnfinder.hxx"
+#include "ia_ce.hxx"
+#include "ia_type.hxx"
+#include "is_ce.hxx"
+#include "is_type.hxx"
+#include "it_ce.hxx"
+#include "it_explicit.hxx"
+#include "it_sequence.hxx"
+#include "it_xnameroom.hxx"
+
+
+
+namespace ary
+{
+namespace idl
+{
+
+template <class DEST>
+DEST *
+SecondariesCalculator::SearchCe4Type(Type_id i_type)
+{
+ Ce_id
+ ce = lhf_Search_CeFromTypeId(i_type);
+ if (ce.IsValid())
+ return ary_cast<DEST>(& my_CeStorage()[ce]);
+ return 0;
+}
+
+
+typedef stg::const_iterator<CodeEntity> stg_citerator;
+typedef stg::iterator<CodeEntity> stg_iterator;
+
+typedef stg::filter_iterator<CodeEntity,Interface>
+ interface_iterator;
+
+typedef stg::filter_iterator<Type,ExplicitType>
+ explicittype_iterator;
+
+typedef ary::stg::const_filter_iterator<CodeEntity,Typedef>
+ typedef_citerator;
+
+
+inline Service *
+SecondariesCalculator::lhf_SearchService( Type_id i_nType )
+{
+ return SearchCe4Type<Service>(i_nType);
+}
+
+inline Interface *
+SecondariesCalculator::lhf_SearchInterface( Type_id i_nType )
+{
+ return SearchCe4Type<Interface>(i_nType);
+}
+
+inline Struct *
+SecondariesCalculator::lhf_SearchStruct( Type_id i_nType )
+{
+ return SearchCe4Type<Struct>(i_nType);
+}
+
+inline Exception *
+SecondariesCalculator::lhf_SearchException( Type_id i_nType )
+{
+ return SearchCe4Type<Exception>(i_nType);
+}
+
+inline const Ce_Storage &
+SecondariesCalculator::my_CeStorage() const
+{
+ csv_assert(pCes != 0);
+ return pCes->Storage();
+}
+
+inline const Type_Storage &
+SecondariesCalculator::my_TypeStorage() const
+{
+ csv_assert(pTypes != 0);
+ return pTypes->Storage();
+}
+
+inline Ce_Storage &
+SecondariesCalculator::my_CeStorage()
+{
+ csv_assert(pCes != 0);
+ return pCes->Storage();
+}
+
+inline Type_Storage &
+SecondariesCalculator::my_TypeStorage()
+{
+ csv_assert(pTypes != 0);
+ return pTypes->Storage();
+}
+
+inline void
+SecondariesCalculator::insert_into2sList( CodeEntity & o_out,
+ int i_listIndex,
+ Ce_id i_nCe )
+ { o_out.Secondaries().Access_List(i_listIndex).push_back(i_nCe); }
+
+
+SecondariesCalculator::SecondariesCalculator( CeAdmin & i_ces,
+ TypeAdmin & i_types )
+ : pCes(&i_ces),
+ pTypes(&i_types)
+{
+}
+
+SecondariesCalculator::~SecondariesCalculator()
+{
+}
+
+
+void
+SecondariesCalculator::CheckAllInterfaceBases()
+{
+ Module &
+ rGlobalNamespace = pCes->GlobalNamespace();
+ QualifiedName
+ aXInterface("::com::sun::star::uno::XInterface","::");
+
+ const Type &
+ rType = pTypes->CheckIn_Type( aXInterface,
+ 0,
+ rGlobalNamespace.CeId(),
+ 0 );
+ Type_id
+ nTypeXInterface = rType.TypeId();
+ const ExplicitType &
+ rExplType = ary_cast<ExplicitType>(rType);
+ Ce_id
+ nCeXInterface = lhf_Search_CeForType(rExplType);
+
+ interface_iterator itEnd( my_CeStorage().End() );
+ for ( interface_iterator it( my_CeStorage().BeginUnreserved() );
+ it != itEnd;
+ ++it )
+ {
+ if (NOT it.IsValid())
+ continue;
+
+ Interface &
+ rInterface = *it;
+ if ( NOT rInterface.HasBase() // According to UNO IDL syntax, an interface without base has com::sun::star::uno::XInterface as base.
+ AND rInterface.CeId() != nCeXInterface ) // XInterface must not be base of itself.
+ {
+ rInterface.Add_Base(nTypeXInterface, 0);
+ }
+ } // end for
+}
+
+void
+SecondariesCalculator::Connect_Types2Ces()
+{
+ explicittype_iterator itEnd( my_TypeStorage().End() );
+ for ( explicittype_iterator it( my_TypeStorage().BeginUnreserved() );
+ it != itEnd;
+ ++it )
+ {
+ if (NOT it.IsValid())
+ continue;
+
+ ExplicitType &
+ rType = ary_cast<ExplicitType>(*it);
+ Ce_id
+ nRelatedCe = lhf_Search_CeForType(rType);
+ if (nRelatedCe.IsValid())
+ {
+ Ce_Type *
+ pNew = new Ce_Type(nRelatedCe, rType.TemplateParameters());
+ my_TypeStorage().Replace_Entity( rType.TypeId(),
+ *pNew );
+ }
+ } // end for
+}
+
+void
+SecondariesCalculator::Gather_CrossReferences()
+{
+ gather_Synonyms();
+
+ for ( stg_iterator it = my_CeStorage().Begin();
+ it != my_CeStorage().End();
+ ++it )
+ {
+ (*it).Accept( static_cast< SPInst_asHost& >(*this) );
+
+ } // end for
+
+ sort_All2s();
+}
+
+void
+SecondariesCalculator::Make_Links2DeveloperManual(
+ const String & i_devman_reffilepath )
+{
+// const autodoc::Options &
+// rOptions = TheAutodocManager().TheOptions();
+//
+// const String &
+// rDeveloperManual_URL
+// = rOptions.Get_Extra(autodoc::OPT_developer_guide);
+// const String
+// rDeveloperManual_ReferenceFile
+// = rOptions.Get_Extra(autodoc::OPT_developer_guide_refs_file);
+
+// if ( rDeveloperManual_URL.length() == 0
+// OR
+// rDeveloperManual_ReferenceFile.length() == 0 )
+// {
+// return;
+// }
+
+ csv::File
+ aFile(i_devman_reffilepath, csv::CFM_READ);
+ csv::OpenCloseGuard
+ aFileOpener(aFile);
+ if (aFileOpener)
+ {
+ Read_Links2DevManual(aFile);
+ }
+}
+
+namespace
+{
+
+enum E_LinkMode
+{
+ link2descr,
+ link2ref
+};
+
+struct OrderCeIdsByName
+{
+ OrderCeIdsByName(
+ const Ce_Storage & i_storage )
+ : rStorage(i_storage),
+ aNameComparison() {}
+ bool operator()(
+ Ce_id i_ce1,
+ Ce_id i_ce2 ) const
+ {
+ return aNameComparison( rStorage[i_ce1].LocalName(),
+ rStorage[i_ce2].LocalName() );
+ }
+
+ private:
+ const Ce_Storage & rStorage;
+ LesserName aNameComparison;
+};
+
+
+}
+
+
+
+void
+SecondariesCalculator::do_Process( const Service & i_rData )
+{
+ const Service &
+ rService = ary_cast<Service>(i_rData);
+
+ // Interfaces:
+ assignImplementation_toAServicesInterfaces( rService.CeId(),
+ rService.CeId(),
+ interface_2s_ExportingServices );
+ // Services and their interfaces:
+ recursive_AssignIncludingService(rService.CeId(), rService);
+}
+
+void
+SecondariesCalculator::do_Process( const Interface & i_rData )
+{
+ assign_AsDerivedInterface( ary_cast<Interface>(i_rData) );
+}
+
+void
+SecondariesCalculator::do_Process( const Struct & i_rData )
+{
+ assign_AsDerivedStruct( ary_cast<Struct>(i_rData) );
+}
+
+void
+SecondariesCalculator::do_Process( const Exception & i_rData )
+{
+ assign_AsDerivedException( ary_cast<Exception>(i_rData) );
+}
+
+void
+SecondariesCalculator::do_Process( const Typedef & )
+{
+ // KORR_FUTURE
+ // Find out what was meant here ???
+
+// const Typedef &
+// rTypedef = ary_cast<Typedef>(i_rData);
+}
+
+void
+SecondariesCalculator::do_Process( const Singleton & i_rData )
+{
+ const Singleton &
+ rSingleton = ary_cast<Singleton>(i_rData);
+
+ Service *
+ pServ = lhf_SearchService(rSingleton.AssociatedService());
+ if (pServ != 0)
+ {
+ insert_into2sUnique( *pServ,
+ service_2s_InstantiatingSingletons,
+ rSingleton.CeId() );
+ }
+
+ // Interfaces:
+ assignImplementation_toAServicesInterfaces( rSingleton.CeId(),
+ lhf_Search_CeFromTypeId(rSingleton.AssociatedService()),
+ interface_2s_ExportingSingletons );
+}
+
+void
+SecondariesCalculator::do_Process( const SglIfcService & i_rData )
+{
+ const SglIfcService &
+ rSglIfcService = ary_cast<SglIfcService>(i_rData);
+
+ assignImplementation_toAServicesInterfaces( rSglIfcService.CeId(),
+ rSglIfcService.CeId(),
+ interface_2s_ExportingServices );
+}
+
+void
+SecondariesCalculator::do_Process( const SglIfcSingleton & i_rData )
+{
+ const SglIfcSingleton &
+ rSglIfcSingleton = ary_cast<SglIfcSingleton>(i_rData);
+
+ Type_id nBase = rSglIfcSingleton.BaseInterface();
+ recursive_AssignImplementation_toExportedInterface( rSglIfcSingleton.CeId(),
+ nBase,
+ interface_2s_ExportingSingletons );
+}
+
+void
+SecondariesCalculator::do_Process( const Function & i_rData )
+{
+ const Function &
+ rFunction = ary_cast<Function>(i_rData);
+
+ recursive_AssignFunction_toCeAsReturn(rFunction.CeId(), rFunction.ReturnType());
+
+ for ( Function::ParamList::const_iterator itp = rFunction.Parameters().begin();
+ itp != rFunction.Parameters().end();
+ ++itp )
+ {
+ recursive_AssignFunction_toCeAsParameter(rFunction.CeId(), (*itp).Type());
+ } // end for (itp)
+
+ for ( Function::ExceptionList::const_iterator itx = rFunction.Exceptions().begin();
+ itx != rFunction.Exceptions().end();
+ ++itx )
+ {
+ Exception *
+ pX = lhf_SearchException(*itx);
+ if (pX != 0)
+ {
+ insert_into2sUnique(*pX, exception_2s_RaisingFunctions, rFunction.CeId());
+ }
+ } // end for (itx)
+}
+
+void
+SecondariesCalculator::do_Process( const StructElement & i_rData )
+{
+ const StructElement &
+ rStructElement = ary_cast<StructElement>(i_rData);
+
+ recursive_AssignStructElement_toCeAsDataType(rStructElement.CeId(), rStructElement.Type());
+}
+
+void
+SecondariesCalculator::do_Process( const Property & i_rData )
+{
+ const Property &
+ rProperty = ary_cast<Property>(i_rData);
+
+ recursive_AssignStructElement_toCeAsDataType(rProperty.CeId(), rProperty.Type());
+}
+
+Ce_id
+SecondariesCalculator::lhf_Search_CeForType( const ExplicitType & i_rType ) const
+{
+ const ExplicitNameRoom &
+ rExplicitNameRoom = ary_cast<ExplicitNameRoom>(
+ my_TypeStorage()[i_rType.NameRoom()] );
+ Find_ModuleNode
+ rNodeFinder( my_CeStorage(),
+ rExplicitNameRoom.NameChain_Begin(),
+ rExplicitNameRoom.NameChain_End(),
+ i_rType.Name() );
+
+ if ( rExplicitNameRoom.IsAbsolute() )
+ {
+ const Module &
+ rGlobalNamespace = ary_cast<Module>(
+ my_CeStorage()[predefined::ce_GlobalNamespace]);
+ return Search_SubTree( rGlobalNamespace,
+ rNodeFinder );
+ }
+ else
+ {
+ const Module &
+ rStartModule = ary_cast<Module>(
+ my_CeStorage()[i_rType.ModuleOfOccurrence()]);
+ Ce_id ret = Search_SubTree_UpTillRoot( rStartModule,
+ rNodeFinder );
+ return ret;
+ } // endif (rExplicitNameRoom.IsAbsolute()) else
+}
+
+Ce_id
+SecondariesCalculator::lhf_Search_CeFromTypeId( Type_id i_nType ) const
+{
+ if (NOT i_nType.IsValid())
+ return Ce_id(0);
+ const Ce_Type *
+ pType = ary_cast<Ce_Type>( & my_TypeStorage()[i_nType] );
+ return pType != 0
+ ? pType->RelatedCe()
+ : Ce_id_Null();
+}
+
+void
+SecondariesCalculator::assign_CurLink( char * i_text,
+ const String & i_link,
+ const String & i_linkUI,
+ bool i_isDescr,
+ int i_lineCount )
+{
+ csv_assert(i_text != 0);
+
+ const ary::idl::Module *
+ pModule = & ary_cast<Module>(
+ my_CeStorage()[predefined::ce_GlobalNamespace]);
+
+ char * pPastNext = 0;
+ char * pNext = i_text;
+ for ( ;
+ (pPastNext = strstr(pNext,".")) != 0;
+ pNext = pPastNext + 1 )
+ {
+ String sNext(pNext, pPastNext-pNext);
+ Ce_id nModule = pModule->Search_Name(sNext);
+ if (nModule.IsValid())
+ {
+ pModule = ary_cast<Module>( & my_CeStorage()[nModule] );
+ }
+ else
+ {
+ pModule = 0;
+ }
+
+ if (pModule == 0)
+ {
+ Cerr() << "Warning: Invalid line nr. "
+ << i_lineCount
+ << " in DevelopersGuide reference file:\n"
+ << reinterpret_cast< const char* >(i_text)
+ << "\n"
+ << Endl();
+ return;
+ }
+ } // end for
+
+ pPastNext = strchr(pNext,':');
+ bool bMember = pPastNext != 0;
+ String sCe( pNext, (bMember ? csv::str::size(pPastNext-pNext) : csv::str::maxsize) );
+
+// KORR_FUTURE
+// String sMember(bMember ? pPastNext+1, "");
+
+ Ce_id nCe = pModule->Search_Name(sCe);
+ if (NOT nCe.IsValid())
+ {
+ Cerr() << "Warning: Invalid line nr. "
+ << i_lineCount
+ << " in DevelopersGuide reference file:\n"
+ << reinterpret_cast< const char* >(i_text)
+ << "\n"
+ << Endl();
+ return;
+ }
+
+ CodeEntity &
+ rCe = my_CeStorage()[nCe];
+ if (NOT bMember)
+ {
+ if (i_isDescr)
+ rCe.Secondaries().Add_Link2DescriptionInManual(i_link, i_linkUI);
+ else
+ rCe.Secondaries().Add_Link2RefInManual(i_link, i_linkUI);
+ return;
+ }
+ else
+ {
+ // KORR_FUTURE
+ // Provisorial just doing nothing (or may be
+ // adding a link at main Ces lists).
+// if (i_isDescr)
+// rCe.Secondaries().Add_Link2DescriptionInManual(i_link);
+// else
+// rCe.Secondaries().Add_Link2RefInManual(i_link);
+ }
+}
+
+void
+SecondariesCalculator::gather_Synonyms()
+{
+ const Ce_Storage &
+ cstrg = my_CeStorage();
+ typedef_citerator itEnd(cstrg.End());
+ for ( typedef_citerator it(cstrg.Begin());
+ it != itEnd;
+ ++it )
+ {
+ if (NOT it.IsValid())
+ continue;
+
+ const Typedef &
+ rTypedef = *it;
+ recursive_AssignAsSynonym(rTypedef.CeId(), rTypedef);
+ } // end for (itTd)
+}
+
+void
+SecondariesCalculator::recursive_AssignAsSynonym( Ce_id i_synonymousTypedefsId,
+ const Typedef & i_TypedefToCheck )
+{
+ Ce_id
+ nCe = lhf_Search_CeFromTypeId(i_TypedefToCheck.DefiningType());
+ if (NOT nCe.IsValid())
+ return;
+ CodeEntity &
+ rCe = my_CeStorage()[nCe];
+
+ switch (rCe.AryClass()) // KORR_FUTURE: make this faster, remove switch.
+ {
+ case Interface::class_id:
+ insert_into2sList( rCe,
+ interface_2s_SynonymTypedefs,
+ i_synonymousTypedefsId );
+ break;
+ case Struct::class_id:
+ insert_into2sList( rCe,
+ struct_2s_SynonymTypedefs,
+ i_synonymousTypedefsId );
+ break;
+ case Enum::class_id:
+ insert_into2sList( rCe,
+ enum_2s_SynonymTypedefs,
+ i_synonymousTypedefsId );
+ break;
+ case Typedef::class_id:
+ insert_into2sList( rCe,
+ typedef_2s_SynonymTypedefs,
+ i_synonymousTypedefsId );
+ recursive_AssignAsSynonym( i_synonymousTypedefsId,
+ static_cast< Typedef& >(rCe) );
+ break;
+ // default: do nothing.
+ }
+}
+
+void
+SecondariesCalculator::recursive_AssignIncludingService( Ce_id i_includingServicesId,
+ const Service & i_ServiceToCheckItsIncludes )
+{
+ Dyn_StdConstIterator<CommentedRelation>
+ pIncludedServices;
+ i_ServiceToCheckItsIncludes.Get_IncludedServices(pIncludedServices);
+
+ for ( StdConstIterator<CommentedRelation> &
+ itServ = *pIncludedServices;
+ itServ;
+ ++itServ )
+ {
+ Service *
+ pServ = lhf_SearchService((*itServ).Type());
+ if (pServ != 0)
+ {
+ insert_into2sUnique( *pServ,
+ service_2s_IncludingServices,
+ i_includingServicesId
+ );
+ recursive_AssignIncludingService(i_includingServicesId, *pServ);
+
+ } // end if
+
+ assignImplementation_toAServicesInterfaces( i_includingServicesId,
+ lhf_Search_CeFromTypeId( (*itServ).Type() ),
+ interface_2s_ExportingServices );
+ } // end for
+}
+
+void
+SecondariesCalculator::assign_AsDerivedInterface( const Interface & i_rDerived )
+{
+ ary::Dyn_StdConstIterator<ary::idl::CommentedRelation>
+ pHelp;
+ ary::idl::ifc_interface::attr::Get_Bases(pHelp, i_rDerived);
+
+ for ( ary::StdConstIterator<ary::idl::CommentedRelation> & it = *pHelp;
+ it.operator bool();
+ ++it )
+ {
+ Interface *
+ pIfc = lhf_SearchInterface( (*it).Type() );
+ if (pIfc == 0)
+ continue;
+
+ insert_into2sList( *pIfc,
+ interface_2s_Derivations,
+ i_rDerived.CeId() );
+ } // end for
+}
+
+void
+SecondariesCalculator::assign_AsDerivedStruct( const Struct & i_rDerived )
+{
+ Type_id
+ nBase = i_rDerived.Base();
+ if (nBase.IsValid())
+ {
+ Struct *
+ pParent = lhf_SearchStruct(nBase);
+ if (pParent != 0)
+ {
+ insert_into2sList( *pParent,
+ struct_2s_Derivations,
+ i_rDerived.CeId() );
+ }
+ }
+}
+
+void
+SecondariesCalculator::assign_AsDerivedException( const Exception & i_rDerived )
+{
+ Type_id
+ nBase = i_rDerived.Base();
+ if (nBase.IsValid())
+ {
+ Exception *
+ pParent = lhf_SearchException(nBase);
+ if (pParent != 0)
+ {
+ insert_into2sList( *pParent,
+ exception_2s_Derivations,
+ i_rDerived.CeId() );
+ } // end if
+ } // end if
+}
+
+void
+SecondariesCalculator::assignImplementation_toAServicesInterfaces(
+ Ce_id i_nImpl,
+ Ce_id i_nService,
+ E_2s_of_Interface i_eList )
+{
+ if (NOT i_nService.IsValid())
+ return;
+ Service *
+ pService = ary_cast<Service>( & my_CeStorage()[i_nService] );
+ SglIfcService *
+ pSglIfcService = ary_cast<SglIfcService>( & my_CeStorage()[i_nService] );
+
+ if (pService != 0)
+ {
+ Dyn_StdConstIterator<CommentedRelation>
+ pSupportedInterfaces;
+ pService->Get_SupportedInterfaces(pSupportedInterfaces);
+
+ for ( StdConstIterator<CommentedRelation> &
+ itInfc = *pSupportedInterfaces;
+ itInfc.operator bool();
+ ++itInfc )
+ {
+ recursive_AssignImplementation_toExportedInterface( i_nImpl,
+ (*itInfc).Type(),
+ i_eList );
+ } // end for
+ }
+ else if (pSglIfcService != 0)
+ {
+ Type_id nBase = pSglIfcService->BaseInterface();
+ recursive_AssignImplementation_toExportedInterface( i_nImpl,
+ nBase,
+ i_eList );
+ } // end if
+}
+
+void
+SecondariesCalculator::recursive_AssignImplementation_toExportedInterface(
+ Ce_id i_nService,
+ Type_id i_nExportedInterface,
+ E_2s_of_Interface i_eList )
+{
+ Interface *
+ pIfc = lhf_SearchInterface(i_nExportedInterface);
+ if (pIfc == 0)
+ return;
+
+ insert_into2sUnique( *pIfc,
+ i_eList,
+ i_nService );
+ Dyn_StdConstIterator<CommentedRelation>
+ pBases;
+ ary::idl::ifc_interface::attr::Get_Bases(pBases, *pIfc);
+ for ( StdConstIterator<CommentedRelation> & it = *pBases;
+ it.operator bool();
+ ++it )
+ {
+ recursive_AssignImplementation_toExportedInterface(i_nService, (*it).Type(), i_eList);
+ }
+}
+
+void
+SecondariesCalculator::recursive_AssignFunction_toCeAsReturn( Ce_id i_nFunction,
+ Type_id i_nReturnType )
+{
+ Ce_id
+ nCe = lhf_Search_CeFromTypeId(i_nReturnType);
+ if (NOT nCe.IsValid())
+ return;
+
+ CodeEntity &
+ rCe = my_CeStorage()[nCe];
+ switch (rCe.AryClass()) // KORR_FUTURE: make this faster, remove switch.
+ {
+ case Interface::class_id:
+ insert_into2sList( rCe,
+ interface_2s_AsReturns,
+ i_nFunction );
+ break;
+ case Struct::class_id:
+ insert_into2sList( rCe,
+ struct_2s_AsReturns,
+ i_nFunction );
+ break;
+ case Enum::class_id:
+ insert_into2sList( rCe,
+ enum_2s_AsReturns,
+ i_nFunction );
+ break;
+ case Typedef::class_id:
+ insert_into2sList( rCe,
+ typedef_2s_AsReturns,
+ i_nFunction );
+ recursive_AssignFunction_toCeAsReturn( i_nFunction,
+ static_cast< Typedef& >(rCe).DefiningType() );
+ break;
+ // default: do nothing.
+ }
+}
+
+void
+SecondariesCalculator::recursive_AssignFunction_toCeAsParameter( Ce_id i_nFunction,
+ Type_id i_nParameterType )
+{
+ Ce_id
+ nCe = lhf_Search_CeFromTypeId(i_nParameterType);
+ if (NOT nCe.IsValid())
+ return;
+
+ CodeEntity &
+ rCe = my_CeStorage()[nCe];
+ switch (rCe.AryClass()) // KORR_FUTURE: make this faster, remove switch.
+ {
+ case Interface::class_id:
+ insert_into2sList( rCe,
+ interface_2s_AsParameters,
+ i_nFunction );
+ break;
+ case Struct::class_id:
+ insert_into2sList( rCe,
+ struct_2s_AsParameters,
+ i_nFunction );
+ break;
+ case Enum::class_id:
+ insert_into2sList( rCe,
+ enum_2s_AsParameters,
+ i_nFunction );
+ break;
+ case Typedef::class_id:
+ insert_into2sList( rCe,
+ typedef_2s_AsParameters,
+ i_nFunction );
+ recursive_AssignFunction_toCeAsParameter( i_nFunction,
+ static_cast< Typedef& >(rCe).DefiningType() );
+ break;
+ // default: do nothing.
+ }
+}
+
+void
+SecondariesCalculator::recursive_AssignStructElement_toCeAsDataType( Ce_id i_nDataElement,
+ Type_id i_nDataType )
+{
+ Ce_id
+ nCe = lhf_Search_CeFromTypeId(i_nDataType);
+ if (NOT nCe.IsValid())
+ return;
+
+ CodeEntity &
+ rCe = my_CeStorage()[nCe];
+ switch (rCe.AryClass()) // KORR_FUTURE: make this faster, remove switch.
+ {
+ case Interface::class_id:
+ insert_into2sList( rCe,
+ interface_2s_AsDataTypes,
+ i_nDataElement );
+ break;
+ case Struct::class_id:
+ insert_into2sList( rCe,
+ struct_2s_AsDataTypes,
+ i_nDataElement );
+ break;
+ case Enum::class_id:
+ insert_into2sList( rCe,
+ enum_2s_AsDataTypes,
+ i_nDataElement );
+ break;
+ case Typedef::class_id:
+ insert_into2sList( rCe,
+ typedef_2s_AsDataTypes,
+ i_nDataElement );
+ recursive_AssignFunction_toCeAsParameter( i_nDataElement,
+ static_cast< Typedef& >(rCe).DefiningType() );
+ break;
+ // default: do nothing.
+ } // end switch
+}
+
+void
+SecondariesCalculator::insert_into2sUnique( CodeEntity & o_out,
+ int i_listIndex,
+ Ce_id i_nCe )
+{
+ std::vector<Ce_id> &
+ rOut = o_out.Secondaries().Access_List(i_listIndex);
+ if (std::find(rOut.begin(),rOut.end(),i_nCe) != rOut.end())
+ return;
+ rOut.push_back(i_nCe);
+}
+
+void
+SecondariesCalculator::sort_All2s()
+{
+ OrderCeIdsByName
+ aIdOrdering(my_CeStorage());
+
+ for ( stg_iterator it = my_CeStorage().Begin();
+ it != my_CeStorage().End();
+ ++it )
+ {
+ Ce_2s &
+ r2s = (*it).Secondaries();
+ int iCount = r2s.CountXrefLists();
+ for (int i = 0; i < iCount; ++i)
+ {
+ std::sort( r2s.Access_List(i).begin(),
+ r2s.Access_List(i).end(),
+ aIdOrdering );
+ } // end for (i)
+ } // end for (it)
+}
+
+void
+SecondariesCalculator::Read_Links2DevManual( csv::bstream & i_file )
+{
+ StreamLock aLine(300);
+ StreamStr & rLine = aLine();
+
+
+ String sCurLink;
+ String sCurLinkUI;
+ E_LinkMode eCurMode = link2ref;
+
+ int lineCount = 0;
+ const char * sLink = "LINK:";
+ const char * sDescr = "DESCR:";
+ const char * sTopic = "TOPIC:";
+ const char * sRef = "REF:";
+ const UINT8 cMaxASCIINumWhiteSpace = 32;
+
+ while (NOT i_file.eod())
+ {
+ ++lineCount;
+
+ rLine.reset();
+ rLine.operator_read_line(i_file);
+
+ if ( *rLine.c_str() >= 'a' )
+ {
+ assign_CurLink(rLine.begin(), sCurLink, sCurLinkUI, eCurMode == link2descr, lineCount);
+ }
+ else if ( strncmp(rLine.c_str(), sLink, strlen(sLink)) == 0 )
+ {
+ sCurLink = rLine.c_str()+5;
+ sCurLinkUI.clear();
+ }
+ else if ( strncmp(rLine.c_str(), sDescr, strlen(sDescr)) == 0 )
+ {
+ sCurLinkUI = rLine.c_str()+6;
+ }
+ else if ( strncmp(rLine.c_str(), sTopic, strlen(sTopic)) == 0 )
+ {
+ eCurMode = link2descr;
+ }
+ else if ( strncmp(rLine.c_str(), sRef, strlen(sRef)) == 0 )
+ {
+ eCurMode = link2ref;
+ }
+ else if (static_cast<UINT8>(*rLine.c_str()) > cMaxASCIINumWhiteSpace)
+ {
+ assign_CurLink(rLine.begin(), sCurLink, sCurLinkUI, eCurMode == link2descr, lineCount);
+ }
+ // else
+ // Ignore empty line.
+
+ } // end while
+}
+
+
+
+} // namespace idl
+} // namespace ary
diff --git a/autodoc/source/ary/idl/i2s_calculator.hxx b/autodoc/source/ary/idl/i2s_calculator.hxx
new file mode 100644
index 000000000000..2ebde4d9400c
--- /dev/null
+++ b/autodoc/source/ary/idl/i2s_calculator.hxx
@@ -0,0 +1,295 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_IDL_I2S_CALCULATOR_HXX
+#define ARY_IDL_I2S_CALCULATOR_HXX
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <cosv/tpl/processor.hxx>
+ // PARAMETERS
+#include <ary/idl/i_types4idl.hxx>
+
+
+namespace ary
+{
+namespace idl
+{
+ class CeAdmin;
+ class Ce_Storage;
+ class TypeAdmin;
+ class Type_Storage;
+ class Module;
+ class ExplicitType;
+ class Function;
+ class Interface;
+ class Property;
+ class Typedef;
+ class Service;
+ class Singleton;
+ class SglIfcService;
+ class SglIfcSingleton;
+ class Struct;
+ class StructElement;
+ class Exception;
+ class Ce_2s;
+}
+}
+
+
+
+
+
+
+namespace ary
+{
+namespace idl
+{
+
+
+enum E_2s_of_Service
+{
+ service_2s_IncludingServices,
+ service_2s_InstantiatingSingletons
+};
+
+enum E_2s_of_Interface
+{
+ interface_2s_Derivations,
+ interface_2s_ExportingServices,
+ interface_2s_ExportingSingletons,
+ interface_2s_SynonymTypedefs,
+// interface_2s_UsingTypedefs,
+ interface_2s_AsReturns,
+// interface_2s_AsIndirectReturns,
+ interface_2s_AsParameters,
+// interface_2s_AsIndirectParameters,
+ interface_2s_AsDataTypes
+};
+
+enum E_2s_of_Struct
+{
+ struct_2s_Derivations,
+ struct_2s_SynonymTypedefs,
+// struct_2s_UsingTypedefs,
+ struct_2s_AsReturns,
+// struct_2s_AsIndirectReturns,
+ struct_2s_AsParameters,
+// struct_2s_AsIndirectParameters,
+ struct_2s_AsDataTypes
+};
+
+enum E_2s_of_Enum
+{
+ enum_2s_SynonymTypedefs,
+// enum_2s_UsingTypedefs,
+ enum_2s_AsReturns,
+// enum_2s_AsIndirectReturns,
+ enum_2s_AsParameters,
+// enum_2s_AsIndirectParameters,
+ enum_2s_AsDataTypes
+};
+
+enum E_2s_of_Typedef
+{
+ typedef_2s_SynonymTypedefs,
+// typedef_2s_UsingTypedefs,
+ typedef_2s_AsReturns,
+// typedef_2s_AsIndirectReturns,
+ typedef_2s_AsParameters,
+// typedef_2s_AsIndirectParameters,
+ typedef_2s_AsDataTypes
+};
+
+enum E_2s_of_Exceptions
+{
+ exception_2s_Derivations,
+ exception_2s_RaisingFunctions
+};
+
+
+
+class SPInst_asHost : public csv::ProcessorIfc,
+ public csv::ConstProcessor<Service>,
+ public csv::ConstProcessor<Interface>,
+ public csv::ConstProcessor<Struct>,
+ public csv::ConstProcessor<Exception>,
+ public csv::ConstProcessor<Typedef>,
+ public csv::ConstProcessor<Singleton>,
+ public csv::ConstProcessor<Function>,
+ public csv::ConstProcessor<StructElement>,
+ public csv::ConstProcessor<Property>,
+ public csv::ConstProcessor<SglIfcService>,
+ public csv::ConstProcessor<SglIfcSingleton>
+{
+};
+
+
+
+
+/** This class scans the parsed data and produces several
+ secondary data like cross references and alphabetical indices.
+
+ In this declaration "Secondaries" or "2s" mean those secondary data.
+
+ @see Ce_2s
+*/
+class SecondariesCalculator : public SPInst_asHost
+{
+ public:
+ // LIFECYCLE
+ SecondariesCalculator(
+ CeAdmin & i_ces,
+ TypeAdmin & i_types );
+ virtual ~SecondariesCalculator();
+
+ // OPERATIONS
+ void CheckAllInterfaceBases();
+ void Connect_Types2Ces();
+ void Gather_CrossReferences();
+ void Make_Links2DeveloperManual(
+ const String & i_devman_reffilepath );
+
+ private:
+ // Interface CeHost These are the points to gather cross
+ // references:
+ virtual void do_Process(
+ const Service & i_rData );
+ virtual void do_Process(
+ const Interface & i_rData );
+ virtual void do_Process(
+ const Struct & i_rData );
+ virtual void do_Process(
+ const Exception & i_rData );
+ virtual void do_Process(
+ const Typedef & i_rData );
+ virtual void do_Process(
+ const Singleton & i_rData );
+ virtual void do_Process(
+ const Function & i_rData );
+ virtual void do_Process(
+ const StructElement &
+ i_rData );
+ virtual void do_Process(
+ const Property & i_rData );
+ virtual void do_Process(
+ const SglIfcService &
+ i_rData );
+ virtual void do_Process(
+ const SglIfcSingleton &
+ i_rData );
+
+ // Locals
+ const Ce_Storage & my_CeStorage() const;
+ const Type_Storage &
+ my_TypeStorage() const;
+ Ce_Storage & my_CeStorage();
+ Type_Storage & my_TypeStorage();
+
+ template <class DEST>
+ DEST * SearchCe4Type(
+ Type_id i_type );
+ Ce_id lhf_Search_CeForType(
+ const ExplicitType &
+ i_rType ) const;
+ Ce_id lhf_Search_CeFromTypeId(
+ Type_id i_nType ) const;
+ Service * lhf_SearchService(
+ Type_id i_nServ );
+ Interface * lhf_SearchInterface(
+ Type_id i_nIfc );
+ Struct * lhf_SearchStruct(
+ Type_id i_nIfc );
+ Exception * lhf_SearchException(
+ Type_id i_nIfc );
+ void assign_CurLink(
+ char * i_text,
+ const String & i_link,
+ const String & i_linkUI,
+ bool i_isDescr, /// @descr true: description, false: reference.
+ int i_lineCount );
+ void gather_Synonyms();
+ void recursive_AssignAsSynonym(
+ Ce_id i_synonymousTypedefsId,
+ const Typedef & i_TypedefToCheck );
+ void recursive_AssignIncludingService(
+ Ce_id i_includingServicesId,
+ const Service & i_ServiceToCheckItsIncludes );
+ void assign_AsDerivedInterface(
+ const Interface & i_rDerived );
+ void assign_AsDerivedStruct(
+ const Struct & i_rDerived );
+ void assign_AsDerivedException(
+ const Exception & i_rDerived );
+ void assignImplementation_toAServicesInterfaces(
+ Ce_id i_nImpl,
+ Ce_id i_nService,
+ E_2s_of_Interface i_eList );
+ void recursive_AssignImplementation_toExportedInterface(
+ Ce_id i_nService,
+ Type_id i_nExportedInterface,
+ E_2s_of_Interface i_eList );
+ void recursive_AssignFunction_toCeAsReturn(
+ Ce_id i_nFunction,
+ Type_id i_nReturnType );
+ void recursive_AssignFunction_toCeAsParameter(
+ Ce_id i_nFunction,
+ Type_id i_nParameterType );
+
+ /** @param i_nDataElement
+ May be the ID of an struct element as well as an exception element
+ or a property.
+ */
+ void recursive_AssignStructElement_toCeAsDataType(
+ Ce_id i_nDataElement,
+ Type_id i_nDataType );
+ void insert_into2sList(
+ CodeEntity & o_out,
+ int i_listIndex,
+ Ce_id i_nCe );
+ void insert_into2sUnique(
+ CodeEntity & o_out,
+ int i_listIndex,
+ Ce_id i_nCe );
+ /// Sorts secondary production lists alphabetical.
+ void sort_All2s();
+
+ void Read_Links2DevManual(
+ csv::bstream & i_file );
+
+ // DATA
+ CeAdmin * pCes;
+ TypeAdmin * pTypes;
+};
+
+
+
+
+} // namespace idl
+} // namespace ary
+#endif
diff --git a/autodoc/source/ary/idl/i_attribute.cxx b/autodoc/source/ary/idl/i_attribute.cxx
new file mode 100644
index 000000000000..ec78a58bd758
--- /dev/null
+++ b/autodoc/source/ary/idl/i_attribute.cxx
@@ -0,0 +1,159 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <ary/idl/i_attribute.hxx>
+#include <ary/idl/ik_attribute.hxx>
+
+
+// NOT FULLY DECLARED SERVICES
+#include <cosv/tpl/processor.hxx>
+#include <ary/getncast.hxx>
+#include <sci_impl.hxx>
+
+
+namespace ary
+{
+namespace idl
+{
+
+
+Attribute::Attribute( const String & i_sName,
+ Ce_id i_nService,
+ Ce_id i_nModule,
+ Type_id i_nType,
+ bool i_bReadonly,
+ bool i_bBound )
+ : sName(i_sName),
+ nOwner(i_nService),
+ nNameRoom(i_nModule),
+ nType(i_nType),
+ aGetExceptions(),
+ aSetExceptions(),
+ bReadonly(i_bReadonly),
+ bBound(i_bBound)
+{
+}
+
+Attribute::~Attribute()
+{
+}
+
+
+void
+Attribute::do_Accept(csv::ProcessorIfc & io_processor) const
+{
+ csv::CheckedCall(io_processor,*this);
+}
+
+ClassId
+Attribute::get_AryClass() const
+{
+ return class_id;
+}
+
+const String &
+Attribute::inq_LocalName() const
+{
+ return sName;
+}
+
+Ce_id
+Attribute::inq_NameRoom() const
+{
+ return nNameRoom;
+}
+
+Ce_id
+Attribute::inq_Owner() const
+{
+ return nOwner;
+}
+
+E_SightLevel
+Attribute::inq_SightLevel() const
+{
+ return sl_Member;
+}
+
+namespace ifc_attribute
+{
+
+inline const Attribute &
+attribute_cast( const CodeEntity & i_ce )
+{
+ csv_assert( is_type<Attribute>(i_ce) );
+ return static_cast< const Attribute& >(i_ce);
+}
+
+bool
+attr::HasAnyStereotype( const CodeEntity & i_ce )
+{
+ const Attribute & rAttr = attribute_cast(i_ce);
+ return rAttr.bReadonly OR rAttr.bBound;
+}
+
+bool
+attr::IsReadOnly( const CodeEntity & i_ce )
+{
+ return attribute_cast(i_ce).bReadonly;
+}
+
+bool
+attr::IsBound( const CodeEntity & i_ce )
+{
+ return attribute_cast(i_ce).bBound;
+}
+
+Type_id
+attr::Type( const CodeEntity & i_ce )
+{
+ return attribute_cast(i_ce).nType;
+}
+
+void
+attr::Get_GetExceptions( Dyn_TypeIterator & o_result,
+ const CodeEntity & i_ce )
+{
+ o_result
+ = new SCI_Vector<Type_id>( attribute_cast(i_ce).aGetExceptions );
+}
+
+void
+attr::Get_SetExceptions( Dyn_TypeIterator & o_result,
+ const CodeEntity & i_ce )
+{
+ o_result
+ = new SCI_Vector<Type_id>( attribute_cast(i_ce).aSetExceptions );
+}
+
+
+} // namespace ifc_attribute
+
+
+} // namespace idl
+} // namespace ary
diff --git a/autodoc/source/ary/idl/i_ce.cxx b/autodoc/source/ary/idl/i_ce.cxx
new file mode 100644
index 000000000000..783e3a9b93f7
--- /dev/null
+++ b/autodoc/source/ary/idl/i_ce.cxx
@@ -0,0 +1,80 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <ary/idl/i_ce.hxx>
+
+
+// NOT FULLY DEFINED SERVICES
+#include <ary/doc/d_oldidldocu.hxx>
+#include <ary/getncast.hxx>
+
+
+namespace ary
+{
+namespace idl
+{
+
+namespace
+{
+ const Ce_2s aConstCe2sDummy;
+}
+
+
+
+CodeEntity::CodeEntity()
+ : aDocu(),
+ p2s(0)
+{
+}
+
+CodeEntity::~CodeEntity()
+{
+}
+
+const Ce_2s &
+CodeEntity::Secondaries() const
+{
+ if (p2s)
+ return *p2s;
+ return aConstCe2sDummy;
+}
+
+Ce_2s &
+CodeEntity::Secondaries()
+{
+ if (p2s)
+ return *p2s;
+ p2s = Ce_2s::Create_(AryClass());
+ return *p2s;
+}
+
+
+
+
+} // namespace idl
+} // namespace ary
diff --git a/autodoc/source/ary/idl/i_ce2s.cxx b/autodoc/source/ary/idl/i_ce2s.cxx
new file mode 100644
index 000000000000..0898b7867086
--- /dev/null
+++ b/autodoc/source/ary/idl/i_ce2s.cxx
@@ -0,0 +1,84 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <ary/idl/i_ce.hxx>
+
+
+// NOT FULLY DEFINED SERVICES
+#include <cosv/tpl/tpltools.hxx>
+#include <ary/doc/d_oldidldocu.hxx>
+#include <ary/getncast.hxx>
+
+
+namespace ary
+{
+namespace idl
+{
+
+namespace
+{
+const std::vector<Ce_id> C_sNullVector_Ce_ids;
+}
+
+
+Ce_2s::~Ce_2s()
+{
+ csv::erase_container_of_heap_ptrs(aXrefLists);
+}
+
+DYN Ce_2s *
+Ce_2s::Create_( ClassId )
+{
+ return new Ce_2s;
+}
+
+
+std::vector<Ce_id> &
+Ce_2s::Access_List( int i_indexOfList )
+{
+ csv_assert(i_indexOfList >= 0 AND i_indexOfList < 1000);
+
+ while (i_indexOfList >= (int) aXrefLists.size())
+ {
+ aXrefLists.push_back(new std::vector<Ce_id>);
+ }
+ return *aXrefLists[i_indexOfList];
+}
+
+const std::vector<Ce_id> &
+Ce_2s::List( int i_indexOfList ) const
+{
+ if (uintt(i_indexOfList) < aXrefLists.size())
+ return *aXrefLists[i_indexOfList];
+ else
+ return C_sNullVector_Ce_ids;
+}
+
+
+} // namespace idl
+} // namespace ary
diff --git a/autodoc/source/ary/idl/i_comrela.cxx b/autodoc/source/ary/idl/i_comrela.cxx
new file mode 100644
index 000000000000..8f5d164b5479
--- /dev/null
+++ b/autodoc/source/ary/idl/i_comrela.cxx
@@ -0,0 +1,47 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <ary/idl/i_comrela.hxx>
+
+
+// NOT FULLY DEFINED SERVICES
+#include <ary/ary.hxx>
+#include <ary/idl/i_gate.hxx>
+#include <ary/idl/ip_ce.hxx>
+#include <ary/idl/ip_type.hxx>
+
+
+namespace ary
+{
+namespace idl
+{
+
+// KORR_FUTURE Currently unneeded file. May become useful later.
+
+} // namespace idl
+} // namespace ary
diff --git a/autodoc/source/ary/idl/i_constant.cxx b/autodoc/source/ary/idl/i_constant.cxx
new file mode 100644
index 000000000000..ac6a7124935f
--- /dev/null
+++ b/autodoc/source/ary/idl/i_constant.cxx
@@ -0,0 +1,123 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <ary/idl/i_constant.hxx>
+
+
+// NOT FULLY DECLARED SERVICES
+#include <cosv/tpl/processor.hxx>
+#include <ary/idl/ik_constant.hxx>
+
+
+namespace ary
+{
+namespace idl
+{
+
+Constant::Constant( const String & i_sName,
+ Ce_id i_nOwner,
+ Ce_id i_nNameRoom,
+ Type_id i_nType,
+ const String & i_sInitValue )
+ : sName(i_sName),
+ nNameRoom(i_nNameRoom),
+ nOwner(i_nOwner),
+ nType(i_nType),
+ sInitValue(i_sInitValue)
+{
+}
+
+Constant::~Constant()
+{
+}
+
+void
+Constant::do_Accept( csv::ProcessorIfc & io_processor ) const
+{
+ csv::CheckedCall(io_processor, *this);
+}
+
+
+ClassId
+Constant::get_AryClass() const
+{
+ return class_id;
+}
+
+const String &
+Constant::inq_LocalName() const
+{
+ return sName;
+}
+
+Ce_id
+Constant::inq_NameRoom() const
+{
+ return nNameRoom;
+}
+
+Ce_id
+Constant::inq_Owner() const
+{
+ return nOwner;
+}
+
+E_SightLevel
+Constant::inq_SightLevel() const
+{
+ return sl_Member;
+}
+
+
+namespace ifc_constant
+{
+
+inline const Constant &
+constant_cast( const CodeEntity & i_ce )
+{
+ csv_assert( i_ce.AryClass() == Constant::class_id );
+ return static_cast< const Constant& >(i_ce);
+}
+
+Type_id
+attr::Type( const CodeEntity & i_ce )
+{
+ return constant_cast(i_ce).nType;
+}
+
+const String &
+attr::Value( const CodeEntity & i_ce )
+{
+ return constant_cast(i_ce).sInitValue;
+}
+
+} // namespace ifc_constant
+
+
+} // namespace idl
+} // namespace ary
diff --git a/autodoc/source/ary/idl/i_constgroup.cxx b/autodoc/source/ary/idl/i_constgroup.cxx
new file mode 100644
index 000000000000..434b054ea3f1
--- /dev/null
+++ b/autodoc/source/ary/idl/i_constgroup.cxx
@@ -0,0 +1,114 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <ary/idl/i_constgroup.hxx>
+#include <ary/idl/ik_constgroup.hxx>
+
+
+// NOT FULLY DECLARED SERVICES
+#include <cosv/tpl/processor.hxx>
+#include <sci_impl.hxx>
+
+
+namespace ary
+{
+namespace idl
+{
+
+
+ConstantsGroup::ConstantsGroup( const String & i_sName,
+ Ce_id i_nModule )
+ : sName(i_sName),
+ nModule(i_nModule),
+ aConstants()
+{
+}
+
+ConstantsGroup::~ConstantsGroup()
+{
+}
+
+void
+ConstantsGroup::do_Accept( csv::ProcessorIfc & io_processor ) const
+{
+ csv::CheckedCall(io_processor, *this);
+}
+
+ClassId
+ConstantsGroup::get_AryClass() const
+{
+ return class_id;
+}
+
+const String &
+ConstantsGroup::inq_LocalName() const
+{
+ return sName;
+}
+
+Ce_id
+ConstantsGroup::inq_NameRoom() const
+{
+ return nModule;
+}
+
+Ce_id
+ConstantsGroup::inq_Owner() const
+{
+ return nModule;
+}
+
+E_SightLevel
+ConstantsGroup::inq_SightLevel() const
+{
+ return sl_File;
+}
+
+
+namespace ifc_constgroup
+{
+
+inline const ConstantsGroup &
+constgroup_cast( const CodeEntity & i_ce )
+{
+ csv_assert( i_ce.AryClass() == ConstantsGroup::class_id );
+ return static_cast< const ConstantsGroup& >(i_ce);
+}
+
+void
+attr::Get_Constants( Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce )
+{
+ o_result = new SCI_Vector<Ce_id>(constgroup_cast(i_ce).aConstants);
+}
+
+} // namespace ifc_constgroup
+
+
+} // namespace idl
+} // namespace ary
diff --git a/autodoc/source/ary/idl/i_enum.cxx b/autodoc/source/ary/idl/i_enum.cxx
new file mode 100644
index 000000000000..30ee8e39e146
--- /dev/null
+++ b/autodoc/source/ary/idl/i_enum.cxx
@@ -0,0 +1,143 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <ary/idl/i_enum.hxx>
+#include <ary/idl/ik_enum.hxx>
+
+
+// NOT FULLY DECLARED SERVICES
+#include <cosv/tpl/processor.hxx>
+#include <sci_impl.hxx>
+#include "i2s_calculator.hxx"
+
+
+namespace ary
+{
+namespace idl
+{
+
+Enum::Enum( const String & i_sName,
+ Ce_id i_nOwner )
+ : sName(i_sName),
+ nOwner(i_nOwner),
+ aValues()
+{
+}
+
+Enum::~Enum()
+{
+}
+
+void
+Enum::do_Accept( csv::ProcessorIfc & io_processor ) const
+{
+ csv::CheckedCall(io_processor, *this);
+}
+
+ClassId
+Enum::get_AryClass() const
+{
+ return class_id;
+}
+
+const String &
+Enum::inq_LocalName() const
+{
+ return sName;
+}
+
+Ce_id
+Enum::inq_NameRoom() const
+{
+ return nOwner;
+}
+
+Ce_id
+Enum::inq_Owner() const
+{
+ return nOwner;
+}
+
+E_SightLevel
+Enum::inq_SightLevel() const
+{
+ return sl_File;
+}
+
+
+namespace ifc_enum
+{
+
+inline const Enum &
+enum_cast( const CodeEntity & i_ce )
+{
+ csv_assert( i_ce.AryClass() == Enum::class_id );
+ return static_cast< const Enum& >(i_ce);
+}
+
+void
+attr::Get_Values( Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce )
+{
+ o_result = new SCI_Vector<Ce_id>(enum_cast(i_ce).aValues);
+}
+
+
+void
+xref::Get_SynonymTypedefs( Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce )
+{
+ o_result = new SCI_Vector<Ce_id>(i_ce.Secondaries().List(enum_2s_SynonymTypedefs));
+}
+
+void
+xref::Get_AsReturns( Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce )
+{
+ o_result = new SCI_Vector<Ce_id>(i_ce.Secondaries().List(enum_2s_AsReturns));
+}
+
+void
+xref::Get_AsParameters( Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce )
+{
+ o_result = new SCI_Vector<Ce_id>(i_ce.Secondaries().List(enum_2s_AsParameters));
+}
+
+void
+xref::Get_AsDataTypes( Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce )
+{
+ o_result = new SCI_Vector<Ce_id>(i_ce.Secondaries().List(enum_2s_AsDataTypes));
+}
+
+} // namespace ifc_enum
+
+
+} // namespace idl
+} // namespace ary
diff --git a/autodoc/source/ary/idl/i_enumvalue.cxx b/autodoc/source/ary/idl/i_enumvalue.cxx
new file mode 100644
index 000000000000..7ee139f9ba4c
--- /dev/null
+++ b/autodoc/source/ary/idl/i_enumvalue.cxx
@@ -0,0 +1,116 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <ary/idl/i_enumvalue.hxx>
+
+
+// NOT FULLY DECLARED SERVICES
+#include <cosv/tpl/processor.hxx>
+#include <ary/idl/ik_enumvalue.hxx>
+
+
+namespace ary
+{
+namespace idl
+{
+
+EnumValue::EnumValue( const String & i_sName,
+ Ce_id i_nOwner,
+ Ce_id i_nNameRoom,
+ const String & i_sInitValue )
+ : sName(i_sName),
+ nOwner(i_nOwner),
+ nNameRoom(i_nNameRoom),
+ sValue(i_sInitValue)
+{
+}
+
+EnumValue::~EnumValue()
+{
+}
+
+void
+EnumValue::do_Accept( csv::ProcessorIfc & io_processor ) const
+{
+ csv::CheckedCall(io_processor, *this);
+}
+
+ClassId
+EnumValue::get_AryClass() const
+{
+ return class_id;
+}
+
+const String &
+EnumValue::inq_LocalName() const
+{
+ return sName;
+}
+
+Ce_id
+EnumValue::inq_NameRoom() const
+{
+ return nNameRoom;
+}
+
+Ce_id
+EnumValue::inq_Owner() const
+{
+ return nOwner;
+}
+
+E_SightLevel
+EnumValue::inq_SightLevel() const
+{
+ return sl_Member;
+}
+
+
+
+namespace ifc_enumvalue
+{
+
+inline const EnumValue &
+enumvalue_cast( const CodeEntity & i_ce )
+{
+ csv_assert( i_ce.AryClass() == EnumValue::class_id );
+ return static_cast< const EnumValue& >(i_ce);
+}
+
+const String &
+attr::Value( const CodeEntity & i_ce )
+{
+ return enumvalue_cast(i_ce).sValue;
+}
+
+
+} // namespace ifc_enumvalue
+
+
+} // namespace idl
+} // namespace ary
diff --git a/autodoc/source/ary/idl/i_exception.cxx b/autodoc/source/ary/idl/i_exception.cxx
new file mode 100644
index 000000000000..cf98da1719a7
--- /dev/null
+++ b/autodoc/source/ary/idl/i_exception.cxx
@@ -0,0 +1,139 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <ary/idl/i_exception.hxx>
+#include <ary/idl/ik_exception.hxx>
+
+
+// NOT FULLY DECLARED SERVICES
+#include <cosv/tpl/processor.hxx>
+#include <sci_impl.hxx>
+#include "i2s_calculator.hxx"
+
+
+
+namespace ary
+{
+namespace idl
+{
+
+Exception::Exception( const String & i_sName,
+ Ce_id i_nOwner,
+ Type_id i_nBase )
+ : sName(i_sName),
+ nOwner(i_nOwner),
+ nBase(i_nBase),
+ aElements()
+{
+}
+
+Exception::~Exception()
+{
+}
+
+void
+Exception::do_Accept( csv::ProcessorIfc & io_processor ) const
+{
+ csv::CheckedCall(io_processor, *this);
+}
+
+ClassId
+Exception::get_AryClass() const
+{
+ return class_id;
+}
+
+const String &
+Exception::inq_LocalName() const
+{
+ return sName;
+}
+
+Ce_id
+Exception::inq_NameRoom() const
+{
+ return nOwner;
+}
+
+Ce_id
+Exception::inq_Owner() const
+{
+ return nOwner;
+}
+
+E_SightLevel
+Exception::inq_SightLevel() const
+{
+ return sl_File;
+}
+
+
+namespace ifc_exception
+{
+
+inline const Exception &
+exception_cast( const CodeEntity & i_ce )
+{
+ csv_assert( i_ce.AryClass() == Exception::class_id );
+ return static_cast< const Exception& >(i_ce);
+}
+
+Type_id
+attr::Base( const CodeEntity & i_ce )
+{
+ return exception_cast(i_ce).nBase;
+}
+
+void
+attr::Get_Elements( Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce )
+{
+ o_result = new SCI_Vector<Ce_id>( exception_cast(i_ce).aElements );
+}
+
+
+void
+xref::Get_Derivations( Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce )
+{
+ o_result = new SCI_Vector<Ce_id>(i_ce.Secondaries().List(exception_2s_Derivations));
+}
+
+void
+xref::Get_RaisingFunctions( Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce )
+{
+ o_result = new SCI_Vector<Ce_id>(i_ce.Secondaries().List(exception_2s_RaisingFunctions));
+}
+
+
+} // namespace ifc_exception
+
+
+} // namespace idl
+} // namespace ary
diff --git a/autodoc/source/ary/idl/i_function.cxx b/autodoc/source/ary/idl/i_function.cxx
new file mode 100644
index 000000000000..141ebb084c32
--- /dev/null
+++ b/autodoc/source/ary/idl/i_function.cxx
@@ -0,0 +1,165 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <ary/idl/i_function.hxx>
+
+
+// NOT FULLY DECLARED SERVICES
+#include <cosv/tpl/processor.hxx>
+#include <sci_impl.hxx>
+
+
+
+namespace ary
+{
+namespace idl
+{
+
+Function::Function( const String & i_sName,
+ Ce_id i_nOwner,
+ Ce_id i_nNameRoom,
+ Type_id i_nReturnType,
+ bool i_bOneWay )
+ : sName(i_sName),
+ nOwner(i_nOwner),
+ nNameRoom(i_nNameRoom),
+ nReturnType(i_nReturnType),
+ aParameters(),
+ aExceptions(),
+ bOneWay(i_bOneWay),
+ bEllipse(false)
+{
+}
+
+Function::Function( const String & i_sName,
+ Ce_id i_nOwner,
+ Ce_id i_nNameRoom )
+ : sName(i_sName),
+ nOwner(i_nOwner),
+ nNameRoom(i_nNameRoom),
+ nReturnType(0),
+ aParameters(),
+ aExceptions(),
+ bOneWay(false),
+ bEllipse(false)
+{
+}
+
+Function::~Function()
+{
+}
+
+void
+Function::do_Accept( csv::ProcessorIfc & io_processor ) const
+{
+ csv::CheckedCall(io_processor, *this);
+}
+
+ClassId
+Function::get_AryClass() const
+{
+ return class_id;
+}
+
+const String &
+Function::inq_LocalName() const
+{
+ return sName;
+}
+
+Ce_id
+Function::inq_NameRoom() const
+{
+ return nNameRoom;
+}
+
+Ce_id
+Function::inq_Owner() const
+{
+ return nOwner;
+}
+
+E_SightLevel
+Function::inq_SightLevel() const
+{
+ return sl_Member;
+}
+
+
+namespace ifc_function
+{
+
+inline const Function &
+function_cast( const CodeEntity & i_ce )
+{
+ csv_assert( i_ce.AryClass() == Function::class_id );
+ return static_cast< const Function& >(i_ce);
+}
+
+Type_id
+attr::ReturnType( const CodeEntity & i_ce )
+{
+ return function_cast(i_ce).nReturnType;
+}
+
+bool
+attr::IsOneway( const CodeEntity & i_ce )
+{
+ return function_cast(i_ce).bOneWay;
+}
+
+bool
+attr::HasEllipse( const CodeEntity & i_ce )
+{
+ return function_cast(i_ce).bEllipse;
+}
+
+void
+attr::Get_Parameters( Dyn_StdConstIterator<ary::idl::Parameter> & o_result,
+ const CodeEntity & i_ce )
+{
+ o_result
+ = new SCI_Vector<Parameter>( function_cast(i_ce).aParameters );
+}
+
+void
+attr::Get_Exceptions( Dyn_TypeIterator & o_result,
+ const CodeEntity & i_ce )
+{
+ o_result
+ = new SCI_Vector<Type_id>( function_cast(i_ce).aExceptions );
+}
+
+
+
+
+
+} // namespace ifc_function
+
+} // namespace idl
+} // namespace ary
diff --git a/autodoc/source/ary/idl/i_interface.cxx b/autodoc/source/ary/idl/i_interface.cxx
new file mode 100644
index 000000000000..4e4b61a071eb
--- /dev/null
+++ b/autodoc/source/ary/idl/i_interface.cxx
@@ -0,0 +1,196 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <ary/idl/i_interface.hxx>
+
+
+// NOT FULLY DECLARED SERVICES
+#include <cosv/tpl/processor.hxx>
+#include <ary/idl/ik_interface.hxx>
+#include <ary/doc/d_oldidldocu.hxx>
+#include <sci_impl.hxx>
+#include "i2s_calculator.hxx"
+
+
+namespace ary
+{
+namespace idl
+{
+
+
+class Interface_2s
+{
+};
+
+
+Interface::Interface( const String & i_sName,
+ Ce_id i_nOwner )
+ : sName(i_sName),
+ nOwner(i_nOwner),
+ aBases(),
+ aFunctions(),
+ aAttributes(),
+ p2s()
+{
+}
+
+Interface::~Interface()
+{
+ for ( RelationList::iterator it = aBases.begin();
+ it != aBases.end();
+ ++it )
+ {
+ delete (*it).Info();
+ }
+}
+
+void
+Interface::do_Accept( csv::ProcessorIfc & io_processor ) const
+{
+ csv::CheckedCall(io_processor, *this);
+}
+
+ClassId
+Interface::get_AryClass() const
+{
+ return class_id;
+}
+
+const String &
+Interface::inq_LocalName() const
+{
+ return sName;
+}
+
+Ce_id
+Interface::inq_NameRoom() const
+{
+ return nOwner;
+}
+
+Ce_id
+Interface::inq_Owner() const
+{
+ return nOwner;
+}
+
+E_SightLevel
+Interface::inq_SightLevel() const
+{
+ return sl_File;
+}
+
+
+namespace ifc_interface
+{
+
+inline const Interface &
+interface_cast( const CodeEntity & i_ce )
+{
+ csv_assert( i_ce.AryClass() == Interface::class_id );
+ return static_cast< const Interface& >(i_ce);
+}
+
+void
+attr::Get_Bases( Dyn_StdConstIterator<CommentedRelation> & o_result,
+ const CodeEntity & i_ce )
+{
+ o_result = new SCI_Vector<CommentedRelation>(interface_cast(i_ce).aBases);
+}
+
+void
+attr::Get_Functions( Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce )
+{
+ o_result = new SCI_Vector<Ce_id>(interface_cast(i_ce).aFunctions);
+}
+
+void
+attr::Get_Attributes( Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce )
+{
+ o_result = new SCI_Vector<Ce_id>(interface_cast(i_ce).aAttributes);
+}
+
+void
+xref::Get_Derivations( Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce )
+{
+ o_result = new SCI_Vector<Ce_id>(i_ce.Secondaries().List(interface_2s_Derivations));
+}
+
+void
+xref::Get_SynonymTypedefs( Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce )
+{
+ o_result = new SCI_Vector<Ce_id>(i_ce.Secondaries().List(interface_2s_SynonymTypedefs));
+}
+
+void
+xref::Get_ExportingServices( Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce )
+{
+ o_result = new SCI_Vector<Ce_id>(i_ce.Secondaries().List(interface_2s_ExportingServices));
+}
+
+void
+xref::Get_ExportingSingletons( Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce )
+{
+ o_result = new SCI_Vector<Ce_id>(i_ce.Secondaries().List(interface_2s_ExportingSingletons));
+}
+
+void
+xref::Get_AsReturns( Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce )
+{
+ o_result = new SCI_Vector<Ce_id>(i_ce.Secondaries().List(interface_2s_AsReturns));
+}
+
+void
+xref::Get_AsParameters( Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce )
+{
+ o_result = new SCI_Vector<Ce_id>(i_ce.Secondaries().List(interface_2s_AsParameters));
+}
+
+void
+xref::Get_AsDataTypes( Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce )
+{
+ o_result = new SCI_Vector<Ce_id>(i_ce.Secondaries().List(interface_2s_AsDataTypes));
+}
+
+
+
+
+} // namespace ifc_interface
+
+
+} // namespace idl
+} // namespace ary
diff --git a/autodoc/source/ary/idl/i_module.cxx b/autodoc/source/ary/idl/i_module.cxx
new file mode 100644
index 000000000000..b5b7453fa3b0
--- /dev/null
+++ b/autodoc/source/ary/idl/i_module.cxx
@@ -0,0 +1,204 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <ary/idl/i_module.hxx>
+#include <ary/idl/ik_module.hxx>
+
+// NOT FULLY DECLARED SERVICES
+#include <cosv/tpl/processor.hxx>
+#include <ary/idl/i_gate.hxx>
+#include <ary/idl/i_module.hxx>
+#include <ary/idl/i_service.hxx>
+#include <ary/idl/i_interface.hxx>
+#include <ary/idl/i_struct.hxx>
+#include <ary/idl/i_exception.hxx>
+#include <ary/idl/i_enum.hxx>
+#include <ary/idl/i_typedef.hxx>
+#include <ary/idl/i_constgroup.hxx>
+#include <ary/idl/i_singleton.hxx>
+#include <ary/idl/i_siservice.hxx>
+#include <ary/idl/i_sisingleton.hxx>
+#include <ary/idl/ip_ce.hxx>
+#include <nametreenode.hxx>
+
+
+namespace ary
+{
+namespace idl
+{
+
+Module::Module()
+ : pImpl( new NameTreeNode<Ce_id> )
+{
+}
+
+Module::Module( const String & i_sName,
+ const Module & i_rParent )
+ : pImpl( new NameTreeNode<Ce_id>( i_sName,
+ *i_rParent.pImpl,
+ i_rParent.CeId() ) )
+{
+}
+
+Module::~Module()
+{
+}
+
+void
+Module::Add_Name( const String & i_sName,
+ Ce_id i_nCodeEntity )
+{
+ pImpl->Add_Name(i_sName, i_nCodeEntity);
+}
+
+Ce_id
+Module::Search_Name( const String & i_sName ) const
+{
+ return pImpl->Search_Name(i_sName);
+}
+
+void
+Module::Get_Names( Dyn_StdConstIterator<Ce_id> & o_rResult ) const
+{
+ pImpl->Get_Names( o_rResult );
+}
+
+void
+Module::do_Accept( csv::ProcessorIfc & io_processor ) const
+{
+ csv::CheckedCall(io_processor, *this);
+}
+
+ClassId
+Module::get_AryClass() const
+{
+ return class_id;
+}
+
+const String &
+Module::inq_LocalName() const
+{
+ return pImpl->Name();
+}
+
+Ce_id
+Module::inq_NameRoom() const
+{
+ return pImpl->Parent();
+}
+
+Ce_id
+Module::inq_Owner() const
+{
+ return pImpl->Parent();
+}
+
+E_SightLevel
+Module::inq_SightLevel() const
+{
+ return sl_Module;
+}
+
+
+namespace ifc_module
+{
+
+inline const Module &
+module_cast( const CodeEntity & i_ce )
+{
+ csv_assert( i_ce.AryClass() == Module::class_id );
+ return static_cast< const Module& >(i_ce);
+}
+
+typedef NameTreeNode<Ce_id>::Map_LocalNames NameMap;
+
+void
+attr::Get_AllChildrenSeparated( std::vector< const CodeEntity* > & o_nestedModules,
+ std::vector< const CodeEntity* > & o_services,
+ std::vector< const CodeEntity* > & o_interfaces,
+ std::vector< const CodeEntity* > & o_structs,
+ std::vector< const CodeEntity* > & o_exceptions,
+ std::vector< const CodeEntity* > & o_enums,
+ std::vector< const CodeEntity* > & o_typedefs,
+ std::vector< const CodeEntity* > & o_constantGroups,
+ std::vector< const CodeEntity* > & o_singletons,
+ const CePilot & i_pilot,
+ const CodeEntity & i_ce )
+{
+ const CodeEntity *
+ pCe = 0;
+ NameMap::const_iterator
+ itEnd = module_cast(i_ce).pImpl->LocalNames().end();
+ for ( NameMap::const_iterator
+ it = module_cast(i_ce).pImpl->LocalNames().begin();
+ it != itEnd;
+ ++it )
+ {
+ pCe = &i_pilot.Find_Ce( (*it).second );
+ switch (pCe->AryClass())
+ {
+ case Module::class_id:
+ o_nestedModules.push_back(pCe);
+ break;
+ case SglIfcService::class_id:
+ case Service::class_id:
+ o_services.push_back(pCe);
+ break;
+ case Interface::class_id:
+ o_interfaces.push_back(pCe);
+ break;
+ case Struct::class_id:
+ o_structs.push_back(pCe);
+ break;
+ case Exception::class_id:
+ o_exceptions.push_back(pCe);
+ break;
+ case Enum::class_id:
+ o_enums.push_back(pCe);
+ break;
+ case Typedef::class_id:
+ o_typedefs.push_back(pCe);
+ break;
+ case ConstantsGroup::class_id:
+ o_constantGroups.push_back(pCe);
+ break;
+ case SglIfcSingleton::class_id:
+ case Singleton::class_id:
+ o_singletons.push_back(pCe);
+ break;
+ }
+ } // end for
+}
+
+
+} // namespace ifc_module
+
+
+
+} // namespace idl
+} // namespace ary
diff --git a/autodoc/source/ary/idl/i_namelookup.cxx b/autodoc/source/ary/idl/i_namelookup.cxx
new file mode 100644
index 000000000000..5b07d5a73c16
--- /dev/null
+++ b/autodoc/source/ary/idl/i_namelookup.cxx
@@ -0,0 +1,62 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <ary/idl/i_namelookup.hxx>
+
+// NOT FULLY DECLARED SERVICES
+#include <sci_impl.hxx>
+
+namespace ary
+{
+namespace idl
+{
+
+NameLookup::NameLookup()
+ : aNames()
+{
+}
+
+NameLookup::~NameLookup()
+{
+}
+
+void
+NameLookup::Add_Name( const String & i_name,
+ Ce_id i_id,
+ ClassId i_class,
+ Ce_id i_owner )
+{
+ aNames.insert( std::pair< const String, NameProperties>(
+ i_name,
+ NameProperties( i_id,
+ i_class,
+ i_owner )));
+}
+
+} // namespace idl
+} // namespace ary
diff --git a/autodoc/source/ary/idl/i_nnfinder.hxx b/autodoc/source/ary/idl/i_nnfinder.hxx
new file mode 100644
index 000000000000..3355a5f89030
--- /dev/null
+++ b/autodoc/source/ary/idl/i_nnfinder.hxx
@@ -0,0 +1,118 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_IDL_NNFINDER_HXX
+#define ARY_IDL_NNFINDER_HXX
+
+// USED SERVICES
+#include "is_ce.hxx"
+
+
+
+
+namespace ary
+{
+namespace idl
+{
+
+
+/** Gives context info for tree search functions.
+
+ @collab ->ary::Search_SubTree<>()
+ @collab ->ary::Search_SubTree_UpTillRoot<>()
+*/
+class Find_ModuleNode
+{
+ public:
+ typedef Ce_id id_type;
+ typedef StringVector::const_iterator name_iterator;
+
+ // LIFECYCLE
+ Find_ModuleNode(
+ const Ce_Storage & i_rStorage,
+ name_iterator it_begin,
+ name_iterator it_end,
+ const String & i_sName )
+ : rStorage(i_rStorage),
+ itBegin(it_begin),
+ itEnd(it_end),
+ sName2Search(i_sName) { if (itBegin != itEnd ? (*itBegin).empty() : false) ++itBegin; }
+ // OPERATIONS
+ const Module * operator()(
+ id_type i_id ) const
+ { return i_id.IsValid()
+ ? & ary_cast<Module>(rStorage[i_id])
+ : 0; }
+
+ name_iterator Begin() const { return itBegin; }
+ name_iterator End() const { return itEnd; }
+ const String & Name2Search() const { return sName2Search; }
+
+ private:
+ // DATA
+ const Ce_Storage & rStorage;
+ name_iterator itBegin;
+ name_iterator itEnd;
+ String sName2Search;
+};
+
+
+
+
+class Types_forSetCe_Id
+{
+ public:
+ typedef Ce_id element_type;
+ typedef Ce_Storage find_type;
+
+ // KORR_FUTURE: Check, if this sorting is right or the ary standard
+ // sorting should be used.
+ struct sort_type
+ {
+ sort_type(
+ const find_type & i_rFinder )
+ : rFinder(i_rFinder) {}
+ bool operator()(
+ const element_type &
+ i_r1,
+ const element_type &
+ i_r2 ) const
+ {
+ return rFinder[i_r1].LocalName()
+ < rFinder[i_r2].LocalName();
+ }
+
+ private:
+ const find_type & rFinder;
+
+ };
+};
+
+
+} // namespace idl
+} // namespace ary
+#endif
diff --git a/autodoc/source/ary/idl/i_param.cxx b/autodoc/source/ary/idl/i_param.cxx
new file mode 100644
index 000000000000..bdaadeee0964
--- /dev/null
+++ b/autodoc/source/ary/idl/i_param.cxx
@@ -0,0 +1,57 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <ary/idl/i_param.hxx>
+
+
+// NOT FULLY DEFINED SERVICES
+
+
+
+namespace ary
+{
+namespace idl
+{
+
+Parameter::Parameter( const String & i_sName,
+ Type_id i_nType,
+ E_ParameterDirection i_eDirection )
+ : sName(i_sName),
+ nType(i_nType),
+ eDirection(i_eDirection)
+{
+}
+
+Parameter::~Parameter()
+{
+}
+
+
+
+} // namespace idl
+} // namespace ary
diff --git a/autodoc/source/ary/idl/i_property.cxx b/autodoc/source/ary/idl/i_property.cxx
new file mode 100644
index 000000000000..852e06f4ced0
--- /dev/null
+++ b/autodoc/source/ary/idl/i_property.cxx
@@ -0,0 +1,171 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <ary/idl/i_property.hxx>
+#include <ary/idl/ik_property.hxx>
+
+
+// NOT FULLY DECLARED SERVICES
+#include <cosv/tpl/processor.hxx>
+
+
+namespace ary
+{
+namespace idl
+{
+
+
+Property::Property( const String & i_sName,
+ Ce_id i_nService,
+ Ce_id i_nModule,
+ Type_id i_nType,
+ Stereotypes i_stereotypes )
+ : sName(i_sName),
+ nOwner(i_nService),
+ nNameRoom(i_nModule),
+ nType(i_nType),
+ aStereotypes(i_stereotypes)
+{
+}
+
+Property::~Property()
+{
+}
+
+
+void
+Property::do_Accept( csv::ProcessorIfc & io_processor ) const
+{
+ csv::CheckedCall(io_processor, *this);
+}
+
+ClassId
+Property::get_AryClass() const
+{
+ return class_id;
+}
+
+const String &
+Property::inq_LocalName() const
+{
+ return sName;
+}
+
+Ce_id
+Property::inq_NameRoom() const
+{
+ return nNameRoom;
+}
+
+Ce_id
+Property::inq_Owner() const
+{
+ return nOwner;
+}
+
+E_SightLevel
+Property::inq_SightLevel() const
+{
+ return sl_Member;
+}
+
+namespace ifc_property
+{
+
+inline const Property &
+property_cast( const CodeEntity & i_ce )
+{
+ csv_assert( i_ce.AryClass() == Property::class_id );
+ return static_cast< const Property& >(i_ce);
+}
+
+bool
+attr::HasAnyStereotype( const CodeEntity & i_ce )
+{
+ return property_cast(i_ce).aStereotypes.HasAny();
+}
+
+bool
+attr::IsReadOnly( const CodeEntity & i_ce )
+{
+ return property_cast(i_ce).aStereotypes.IsReadOnly();
+}
+
+bool
+attr::IsBound( const CodeEntity & i_ce )
+{
+ return property_cast(i_ce).aStereotypes.IsBound();
+}
+
+bool
+attr::IsConstrained( const CodeEntity & i_ce )
+{
+ return property_cast(i_ce).aStereotypes.IsConstrained();
+}
+
+bool
+attr::IsMayBeAmbiguous( const CodeEntity & i_ce )
+{
+ return property_cast(i_ce).aStereotypes.IsMayBeAmbiguous();
+}
+
+bool
+attr::IsMayBeDefault( const CodeEntity & i_ce )
+{
+ return property_cast(i_ce).aStereotypes.IsMayBeDefault();
+}
+
+bool
+attr::IsMayBeVoid( const CodeEntity & i_ce )
+{
+ return property_cast(i_ce).aStereotypes.IsMayBeVoid();
+}
+
+bool
+attr::IsRemovable( const CodeEntity & i_ce )
+{
+ return property_cast(i_ce).aStereotypes.IsRemovable();
+}
+
+bool
+attr::IsTransient( const CodeEntity & i_ce )
+{
+ return property_cast(i_ce).aStereotypes.IsTransient();
+}
+
+Type_id
+attr::Type( const CodeEntity & i_ce )
+{
+ return property_cast(i_ce).nType;
+}
+
+} // namespace ifc_property
+
+
+} // namespace idl
+} // namespace ary
diff --git a/autodoc/source/ary/idl/i_reposypart.cxx b/autodoc/source/ary/idl/i_reposypart.cxx
new file mode 100644
index 000000000000..c0edd33feeb7
--- /dev/null
+++ b/autodoc/source/ary/idl/i_reposypart.cxx
@@ -0,0 +1,119 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "i_reposypart.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include <ary/idl/i_namelookup.hxx>
+#include <idl_internalgate.hxx>
+#include "ia_ce.hxx"
+#include "ia_type.hxx"
+#include "i2s_calculator.hxx"
+#include "is_ce.hxx"
+#include "is_type.hxx"
+
+
+
+
+namespace ary
+{
+namespace idl
+{
+
+
+DYN InternalGate &
+InternalGate::Create_Partition_(RepositoryCenter & i_center)
+{
+ return *new RepositoryPartition(i_center);
+}
+
+
+
+RepositoryPartition::RepositoryPartition( RepositoryCenter & i_repository )
+ : pCenter(&i_repository),
+ pCes(0),
+ pTypes(0),
+ pNamesDictionary(new NameLookup)
+{
+ pTypes = new TypeAdmin;
+ pCes = new CeAdmin(*pNamesDictionary, *pTypes);
+}
+
+RepositoryPartition::~RepositoryPartition()
+{
+}
+
+void
+RepositoryPartition::Calculate_AllSecondaryInformation(
+ const String & i_devman_reffilepath )
+{
+ // KORR_FUTURE
+ // Forward the options from here.
+
+ SecondariesCalculator
+ secalc(*pCes,*pTypes);
+
+ secalc.CheckAllInterfaceBases();
+ secalc.Connect_Types2Ces();
+ secalc.Gather_CrossReferences();
+
+ if ( NOT i_devman_reffilepath.empty() )
+ {
+ secalc.Make_Links2DeveloperManual(i_devman_reffilepath);
+ }
+}
+
+const CePilot &
+RepositoryPartition::Ces() const
+{
+ return *pCes;
+}
+
+const TypePilot &
+RepositoryPartition::Types() const
+{
+ return *pTypes;
+}
+
+CePilot &
+RepositoryPartition::Ces()
+{
+ return *pCes;
+}
+
+TypePilot &
+RepositoryPartition::Types()
+{
+ return *pTypes;
+}
+
+
+
+} // namespace idl
+} // namespace ary
diff --git a/autodoc/source/ary/idl/i_reposypart.hxx b/autodoc/source/ary/idl/i_reposypart.hxx
new file mode 100644
index 000000000000..f28e1f1364d7
--- /dev/null
+++ b/autodoc/source/ary/idl/i_reposypart.hxx
@@ -0,0 +1,96 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_IDL_I_REPOSYPART_HXX
+#define ARY_IDL_I_REPOSYPART_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <idl_internalgate.hxx>
+ // OTHER
+
+
+namespace ary
+{
+namespace idl
+{
+ class CeAdmin;
+ class TypeAdmin;
+ class NameLookup;
+}
+}
+
+
+
+
+
+namespace ary
+{
+namespace idl
+{
+
+
+
+/** The idl part of the Autodoc repository.
+*/
+class RepositoryPartition : public InternalGate
+{
+ public:
+ // LIFECYCLE
+ RepositoryPartition(
+ RepositoryCenter & i_repository );
+ ~RepositoryPartition();
+ // INHERITED
+ // Interface Gate:
+ virtual void Calculate_AllSecondaryInformation(
+ const String & i_devman_reffilepath );
+// const ::autodoc::Options &
+// i_options );
+ virtual const CePilot &
+ Ces() const;
+ virtual const TypePilot &
+ Types() const;
+ virtual CePilot & Ces();
+ virtual TypePilot & Types();
+
+ private:
+ // DATA
+ RepositoryCenter * pCenter;
+
+ Dyn<CeAdmin> pCes;
+ Dyn<TypeAdmin> pTypes;
+ Dyn<NameLookup> pNamesDictionary;
+};
+
+
+
+
+} // namespace idl
+} // namespace ary
+#endif
diff --git a/autodoc/source/ary/idl/i_service.cxx b/autodoc/source/ary/idl/i_service.cxx
new file mode 100644
index 000000000000..14eb20a1096d
--- /dev/null
+++ b/autodoc/source/ary/idl/i_service.cxx
@@ -0,0 +1,171 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <ary/idl/i_service.hxx>
+
+
+// NOT FULLY DECLARED SERVICES
+#include <cosv/tpl/processor.hxx>
+#include <ary/idl/ik_service.hxx>
+#include <ary/doc/d_oldidldocu.hxx>
+#include <sci_impl.hxx>
+#include "i2s_calculator.hxx"
+
+
+namespace ary
+{
+namespace idl
+{
+
+Service::Service( const String & i_sName,
+ Ce_id i_nOwner )
+ : sName(i_sName),
+ nOwner(i_nOwner),
+ aIncludedServices(),
+ aSupportedInterfaces(),
+ aProperties()
+{
+}
+
+Service::~Service()
+{
+ for ( RelationList::iterator it = aIncludedServices.begin();
+ it != aIncludedServices.end();
+ ++it )
+ {
+ delete (*it).Info();
+ }
+
+ for ( RelationList::iterator it = aSupportedInterfaces.begin();
+ it != aSupportedInterfaces.end();
+ ++it )
+ {
+ delete (*it).Info();
+ }
+}
+
+void
+Service::Get_SupportedInterfaces( Dyn_StdConstIterator<CommentedRelation> & o_rResult ) const
+{
+ o_rResult = new SCI_Vector<CommentedRelation>(aSupportedInterfaces);
+}
+
+void
+Service::Get_IncludedServices( Dyn_StdConstIterator<CommentedRelation> & o_rResult ) const
+{
+ o_rResult = new SCI_Vector<CommentedRelation>(aIncludedServices);
+}
+
+void
+Service::do_Accept( csv::ProcessorIfc & io_processor ) const
+{
+ csv::CheckedCall(io_processor, *this);
+}
+
+ClassId
+Service::get_AryClass() const
+{
+ return class_id;
+}
+
+const String &
+Service::inq_LocalName() const
+{
+ return sName;
+}
+
+Ce_id
+Service::inq_NameRoom() const
+{
+ return nOwner;
+}
+
+Ce_id
+Service::inq_Owner() const
+{
+ return nOwner;
+}
+
+E_SightLevel
+Service::inq_SightLevel() const
+{
+ return sl_File;
+}
+
+
+namespace ifc_service
+{
+
+inline const Service &
+service_cast( const CodeEntity & i_ce )
+{
+ csv_assert( i_ce.AryClass() == Service::class_id );
+ return static_cast< const Service& >(i_ce);
+}
+
+void
+attr::Get_IncludedServices( Dyn_StdConstIterator<CommentedRelation> & o_result,
+ const CodeEntity & i_ce )
+{
+ o_result = new SCI_Vector<CommentedRelation>( service_cast(i_ce).aIncludedServices );
+}
+
+void
+attr::Get_ExportedInterfaces( Dyn_StdConstIterator<CommentedRelation> & o_result,
+ const CodeEntity & i_ce )
+{
+ o_result = new SCI_Vector<CommentedRelation>( service_cast(i_ce).aSupportedInterfaces );
+}
+
+void
+attr::Get_Properties( Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce )
+{
+ o_result = new SCI_Vector<Ce_id>( service_cast(i_ce).aProperties );
+}
+
+void
+xref::Get_IncludingServices( Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce )
+{
+ o_result = new SCI_Vector<Ce_id>(i_ce.Secondaries().List(service_2s_IncludingServices));
+}
+
+void
+xref::Get_InstantiatingSingletons( Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce )
+{
+ o_result = new SCI_Vector<Ce_id>(i_ce.Secondaries().List(service_2s_InstantiatingSingletons));
+}
+
+
+} // namespace ifc_service
+
+
+} // namespace idl
+} // namespace ary
diff --git a/autodoc/source/ary/idl/i_singleton.cxx b/autodoc/source/ary/idl/i_singleton.cxx
new file mode 100644
index 000000000000..fcc6ef580756
--- /dev/null
+++ b/autodoc/source/ary/idl/i_singleton.cxx
@@ -0,0 +1,112 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <ary/idl/i_singleton.hxx>
+
+
+// NOT FULLY DECLARED SERVICES
+#include <cosv/tpl/processor.hxx>
+#include <ary/idl/ik_singleton.hxx>
+#include <sci_impl.hxx>
+
+
+namespace ary
+{
+namespace idl
+{
+
+Singleton::Singleton( const String & i_sName,
+ Ce_id i_nOwner )
+ : sName(i_sName),
+ nOwner(i_nOwner),
+ nService()
+{
+}
+
+Singleton::~Singleton()
+{
+}
+
+void
+Singleton::do_Accept( csv::ProcessorIfc & io_processor ) const
+{
+ csv::CheckedCall(io_processor, *this);
+}
+
+ClassId
+Singleton::get_AryClass() const
+{
+ return class_id;
+}
+
+const String &
+Singleton::inq_LocalName() const
+{
+ return sName;
+}
+
+Ce_id
+Singleton::inq_NameRoom() const
+{
+ return nOwner;
+}
+
+Ce_id
+Singleton::inq_Owner() const
+{
+ return nOwner;
+}
+
+E_SightLevel
+Singleton::inq_SightLevel() const
+{
+ return sl_File;
+}
+
+
+namespace ifc_singleton
+{
+
+inline const Singleton &
+singleton_cast( const CodeEntity & i_ce )
+{
+ csv_assert( i_ce.AryClass() == Singleton::class_id );
+ return static_cast< const Singleton& >(i_ce);
+}
+
+Type_id
+attr::AssociatedService( const CodeEntity & i_ce )
+{
+ return singleton_cast(i_ce).nService;
+}
+
+} // namespace ifc_singleton
+
+
+} // namespace idl
+} // namespace ary
diff --git a/autodoc/source/ary/idl/i_siservice.cxx b/autodoc/source/ary/idl/i_siservice.cxx
new file mode 100644
index 000000000000..2aff0288cec3
--- /dev/null
+++ b/autodoc/source/ary/idl/i_siservice.cxx
@@ -0,0 +1,121 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <ary/idl/i_siservice.hxx>
+#include <ary/idl/ik_siservice.hxx>
+
+
+// NOT FULLY DECLARED SERVICES
+#include <cosv/tpl/processor.hxx>
+#include <sci_impl.hxx>
+
+
+namespace ary
+{
+namespace idl
+{
+
+SglIfcService::SglIfcService( const String & i_sName,
+ Ce_id i_nOwner,
+ Type_id i_nBaseInterface )
+ : sName(i_sName),
+ nOwner(i_nOwner),
+ nBaseInterface(i_nBaseInterface),
+ aConstructors()
+{
+}
+
+SglIfcService::~SglIfcService()
+{
+}
+
+void
+SglIfcService::do_Accept( csv::ProcessorIfc & io_processor ) const
+{
+ csv::CheckedCall(io_processor, *this);
+}
+
+ClassId
+SglIfcService::get_AryClass() const
+{
+ return class_id;
+}
+
+const String &
+SglIfcService::inq_LocalName() const
+{
+ return sName;
+}
+
+Ce_id
+SglIfcService::inq_NameRoom() const
+{
+ return nOwner;
+}
+
+Ce_id
+SglIfcService::inq_Owner() const
+{
+ return nOwner;
+}
+
+E_SightLevel
+SglIfcService::inq_SightLevel() const
+{
+ return sl_File;
+}
+
+
+namespace ifc_sglifcservice
+{
+
+inline const SglIfcService &
+sglifcservice_cast( const CodeEntity & i_ce )
+{
+ csv_assert( i_ce.AryClass() == SglIfcService::class_id );
+ return static_cast< const SglIfcService& >(i_ce);
+}
+
+Type_id
+attr::BaseInterface( const CodeEntity & i_ce )
+{
+ return sglifcservice_cast(i_ce).nBaseInterface;
+}
+
+void
+attr::Get_Constructors( Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce )
+{
+ o_result = new SCI_Vector<Ce_id>( sglifcservice_cast(i_ce).aConstructors );
+}
+
+} // namespace ifc_sglifcservice
+
+
+} // namespace idl
+} // namespace ary
diff --git a/autodoc/source/ary/idl/i_sisingleton.cxx b/autodoc/source/ary/idl/i_sisingleton.cxx
new file mode 100644
index 000000000000..d731f341153b
--- /dev/null
+++ b/autodoc/source/ary/idl/i_sisingleton.cxx
@@ -0,0 +1,113 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <ary/idl/i_sisingleton.hxx>
+
+
+// NOT FULLY DECLARED SERVICES
+#include <cosv/tpl/processor.hxx>
+#include <ary/idl/ik_sisingleton.hxx>
+
+
+
+namespace ary
+{
+namespace idl
+{
+
+SglIfcSingleton::SglIfcSingleton( const String & i_sName,
+ Ce_id i_nOwner,
+ Type_id i_nBaseInterface )
+ : sName(i_sName),
+ nOwner(i_nOwner),
+ nBaseInterface(i_nBaseInterface)
+{
+}
+
+SglIfcSingleton::~SglIfcSingleton()
+{
+}
+
+void
+SglIfcSingleton::do_Accept( csv::ProcessorIfc & io_processor ) const
+{
+ csv::CheckedCall(io_processor, *this);
+}
+
+ClassId
+SglIfcSingleton::get_AryClass() const
+{
+ return class_id;
+}
+
+const String &
+SglIfcSingleton::inq_LocalName() const
+{
+ return sName;
+}
+
+Ce_id
+SglIfcSingleton::inq_NameRoom() const
+{
+ return nOwner;
+}
+
+Ce_id
+SglIfcSingleton::inq_Owner() const
+{
+ return nOwner;
+}
+
+E_SightLevel
+SglIfcSingleton::inq_SightLevel() const
+{
+ return sl_File;
+}
+
+namespace ifc_sglifcsingleton
+{
+
+inline const SglIfcSingleton &
+sglifcsingleton_cast( const CodeEntity & i_ce )
+{
+ csv_assert( i_ce.AryClass() == SglIfcSingleton::class_id );
+ return static_cast< const SglIfcSingleton& >(i_ce);
+}
+
+Type_id
+attr::BaseInterface( const CodeEntity & i_ce )
+{
+ return sglifcsingleton_cast(i_ce).nBaseInterface;
+}
+
+
+} // namespace ifc_sglifcsingleton
+
+
+} // namespace idl
+} // namespace ary
diff --git a/autodoc/source/ary/idl/i_struct.cxx b/autodoc/source/ary/idl/i_struct.cxx
new file mode 100644
index 000000000000..dfffa3522813
--- /dev/null
+++ b/autodoc/source/ary/idl/i_struct.cxx
@@ -0,0 +1,163 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <ary/idl/i_struct.hxx>
+#include <ary/idl/ik_struct.hxx>
+
+
+// NOT FULLY DECLARED SERVICES
+#include <cosv/tpl/processor.hxx>
+#include <sci_impl.hxx>
+#include "i2s_calculator.hxx"
+
+
+namespace ary
+{
+namespace idl
+{
+
+Struct::Struct( const String & i_sName,
+ Ce_id i_nOwner,
+ Type_id i_nBase,
+ const String & i_sTemplateParameter,
+ Type_id i_nTemplateParameterType )
+ : sName(i_sName),
+ nOwner(i_nOwner),
+ nBase(i_nBase),
+ sTemplateParameter(i_sTemplateParameter),
+ nTemplateParameterType(i_nTemplateParameterType),
+ aElements()
+{
+}
+
+Struct::~Struct()
+{
+}
+
+void
+Struct::do_Accept( csv::ProcessorIfc & io_processor ) const
+{
+ csv::CheckedCall(io_processor, *this);
+}
+
+ClassId
+Struct::get_AryClass() const
+{
+ return class_id;
+}
+
+const String &
+Struct::inq_LocalName() const
+{
+ return sName;
+}
+
+Ce_id
+Struct::inq_NameRoom() const
+{
+ return nOwner;
+}
+
+Ce_id
+Struct::inq_Owner() const
+{
+ return nOwner;
+}
+
+E_SightLevel
+Struct::inq_SightLevel() const
+{
+ return sl_File;
+}
+
+
+namespace ifc_struct
+{
+
+inline const Struct &
+struct_cast( const CodeEntity & i_ce )
+{
+ csv_assert( i_ce.AryClass() == Struct::class_id );
+ return static_cast< const Struct& >(i_ce);
+}
+
+Type_id
+attr::Base( const CodeEntity & i_ce )
+{
+ return struct_cast(i_ce).nBase;
+}
+
+void
+attr::Get_Elements( Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce )
+{
+ o_result = new SCI_Vector<Ce_id>( struct_cast(i_ce).aElements );
+}
+
+
+void
+xref::Get_Derivations( Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce )
+{
+ o_result = new SCI_Vector<Ce_id>(i_ce.Secondaries().List(struct_2s_Derivations));
+}
+
+void
+xref::Get_SynonymTypedefs( Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce )
+{
+ o_result = new SCI_Vector<Ce_id>(i_ce.Secondaries().List(struct_2s_SynonymTypedefs));
+}
+
+void
+xref::Get_AsReturns( Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce )
+{
+ o_result = new SCI_Vector<Ce_id>(i_ce.Secondaries().List(struct_2s_AsReturns));
+}
+
+void
+xref::Get_AsParameters( Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce )
+{
+ o_result = new SCI_Vector<Ce_id>(i_ce.Secondaries().List(struct_2s_AsParameters));
+}
+
+void
+xref::Get_AsDataTypes( Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce )
+{
+ o_result = new SCI_Vector<Ce_id>(i_ce.Secondaries().List(struct_2s_AsDataTypes));
+}
+
+} // namespace ifc_struct
+
+
+
+} // namespace idl
+} // namespace ary
diff --git a/autodoc/source/ary/idl/i_structelem.cxx b/autodoc/source/ary/idl/i_structelem.cxx
new file mode 100644
index 000000000000..1a19d195f457
--- /dev/null
+++ b/autodoc/source/ary/idl/i_structelem.cxx
@@ -0,0 +1,117 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <ary/idl/i_structelem.hxx>
+#include <ary/idl/ik_structelem.hxx>
+
+
+// NOT FULLY DECLARED SERVICES
+#include <cosv/tpl/processor.hxx>
+#include <sci_impl.hxx>
+
+
+namespace ary
+{
+namespace idl
+{
+
+
+StructElement::StructElement( const String & i_sName,
+ Ce_id i_nOwner,
+ Ce_id i_nNameRoom,
+ Type_id i_nType )
+ : sName(i_sName),
+ nOwner(i_nOwner),
+ nNameRoom(i_nNameRoom),
+ nType(i_nType)
+{
+}
+
+StructElement::~StructElement()
+{
+}
+
+void
+StructElement::do_Accept( csv::ProcessorIfc & io_processor ) const
+{
+ csv::CheckedCall(io_processor, *this);
+}
+
+ClassId
+StructElement::get_AryClass() const
+{
+ return class_id;
+}
+
+const String &
+StructElement::inq_LocalName() const
+{
+ return sName;
+}
+
+Ce_id
+StructElement::inq_NameRoom() const
+{
+ return nNameRoom;
+}
+
+Ce_id
+StructElement::inq_Owner() const
+{
+ return nOwner;
+}
+
+E_SightLevel
+StructElement::inq_SightLevel() const
+{
+ return sl_Member;
+}
+
+
+namespace ifc_structelement
+{
+
+inline const StructElement &
+selem_cast( const CodeEntity & i_ce )
+{
+ csv_assert( i_ce.AryClass() == StructElement::class_id );
+ return static_cast< const StructElement& >(i_ce);
+}
+
+Type_id
+attr::Type( const CodeEntity & i_ce )
+{
+ return selem_cast(i_ce).nType;
+}
+
+} // namespace ifc_structelement
+
+
+
+} // namespace idl
+} // namespace ary
diff --git a/autodoc/source/ary/idl/i_traits.cxx b/autodoc/source/ary/idl/i_traits.cxx
new file mode 100644
index 000000000000..1c12c5bc996f
--- /dev/null
+++ b/autodoc/source/ary/idl/i_traits.cxx
@@ -0,0 +1,72 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <ary/idl/i_traits.hxx>
+
+
+// NOT FULLY DEFINED SERVICES
+#include <ary/namesort.hxx>
+#include "is_ce.hxx"
+
+
+
+namespace ary
+{
+namespace idl
+{
+
+
+
+//******************** Ce_Traits ********************//
+Ce_Traits::entity_base_type &
+Ce_Traits::EntityOf_(id_type i_id)
+{
+ csv_assert(i_id.IsValid());
+ return Ce_Storage::Instance_()[i_id];
+}
+
+//******************** Ce_Compare ********************//
+const Ce_Compare::key_type &
+Ce_Compare::KeyOf_(const entity_base_type & i_entity)
+{
+ return i_entity.LocalName();
+}
+
+bool
+Ce_Compare::Lesser_( const key_type & i_1,
+ const key_type & i_2 )
+{
+ static ::ary::LesserName less_;
+ return less_(i_1,i_2);
+}
+
+
+
+
+} // namespace idl
+} // namespace ary
diff --git a/autodoc/source/ary/idl/i_typedef.cxx b/autodoc/source/ary/idl/i_typedef.cxx
new file mode 100644
index 000000000000..f33ef60921ca
--- /dev/null
+++ b/autodoc/source/ary/idl/i_typedef.cxx
@@ -0,0 +1,145 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <ary/idl/i_typedef.hxx>
+#include <ary/idl/ik_typedef.hxx>
+
+
+// NOT FULLY DECLARED SERVICES
+#include <cosv/tpl/processor.hxx>
+#include <sci_impl.hxx>
+#include "i2s_calculator.hxx"
+
+
+namespace ary
+{
+namespace idl
+{
+
+
+Typedef::Typedef( const String & i_sName,
+ Ce_id i_nOwner,
+ Type_id i_nDefiningType )
+ : sName(i_sName),
+ nOwner(i_nOwner),
+ nDefiningType(i_nDefiningType)
+{
+}
+
+Typedef::~Typedef()
+{
+}
+
+void
+Typedef::do_Accept( csv::ProcessorIfc & io_processor ) const
+{
+ csv::CheckedCall(io_processor, *this);
+}
+
+ClassId
+Typedef::get_AryClass() const
+{
+ return class_id;
+}
+
+const String &
+Typedef::inq_LocalName() const
+{
+ return sName;
+}
+
+Ce_id
+Typedef::inq_NameRoom() const
+{
+ return nOwner;
+}
+
+Ce_id
+Typedef::inq_Owner() const
+{
+ return nOwner;
+}
+
+E_SightLevel
+Typedef::inq_SightLevel() const
+{
+ return sl_File;
+}
+
+
+namespace ifc_typedef
+{
+
+inline const Typedef &
+typedef_cast( const CodeEntity & i_ce )
+{
+ csv_assert( i_ce.AryClass() == Typedef::class_id );
+ return static_cast< const Typedef& >(i_ce);
+}
+
+Type_id
+attr::DefiningType( const CodeEntity & i_ce )
+{
+ return typedef_cast(i_ce).nDefiningType;
+}
+
+
+void
+xref::Get_SynonymTypedefs( Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce )
+{
+ o_result = new SCI_Vector<Ce_id>(i_ce.Secondaries().List(typedef_2s_SynonymTypedefs));
+}
+
+void
+xref::Get_AsReturns( Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce )
+{
+ o_result = new SCI_Vector<Ce_id>(i_ce.Secondaries().List(typedef_2s_AsReturns));
+}
+
+void
+xref::Get_AsParameters( Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce )
+{
+ o_result = new SCI_Vector<Ce_id>(i_ce.Secondaries().List(typedef_2s_AsParameters));
+}
+
+void
+xref::Get_AsDataTypes( Dyn_CeIterator & o_result,
+ const CodeEntity & i_ce )
+{
+ o_result = new SCI_Vector<Ce_id>(i_ce.Secondaries().List(typedef_2s_AsDataTypes));
+}
+
+} // namespace ifc_typedef
+
+
+
+} // namespace idl
+} // namespace ary
diff --git a/autodoc/source/ary/idl/ia_ce.cxx b/autodoc/source/ary/idl/ia_ce.cxx
new file mode 100644
index 000000000000..f78f5050a7db
--- /dev/null
+++ b/autodoc/source/ary/idl/ia_ce.cxx
@@ -0,0 +1,581 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "ia_ce.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include <algorithm>
+#include <cosv/tpl/tpltools.hxx>
+#include <ary/idl/i_attribute.hxx>
+#include <ary/idl/i_constant.hxx>
+#include <ary/idl/i_constgroup.hxx>
+#include <ary/idl/i_enum.hxx>
+#include <ary/idl/i_enumvalue.hxx>
+#include <ary/idl/i_exception.hxx>
+#include <ary/idl/i_function.hxx>
+#include <ary/idl/i_interface.hxx>
+#include <ary/idl/i_module.hxx>
+#include <ary/idl/i_namelookup.hxx>
+#include <ary/idl/i_property.hxx>
+#include <ary/idl/i_service.hxx>
+#include <ary/idl/i_singleton.hxx>
+#include <ary/idl/i_siservice.hxx>
+#include <ary/idl/i_sisingleton.hxx>
+#include <ary/idl/i_struct.hxx>
+#include <ary/idl/i_structelem.hxx>
+#include <ary/idl/i_traits.hxx>
+#include <ary/idl/i_typedef.hxx>
+#include <idsort.hxx>
+#include "ia_type.hxx"
+#include "is_ce.hxx"
+#include "it_tplparam.hxx"
+
+
+
+
+namespace ary
+{
+namespace idl
+{
+
+inline Module &
+CeAdmin::lhf_Access_Module( Ce_id i_nId )
+ { return ary_cast<Module>(Storage()[i_nId]); }
+
+inline void
+CeAdmin::lhf_Put2Storage_and_AssignId( CodeEntity & pass_io_rCe )
+ { // This also assigns an ID to pass_io_rCe:
+ Storage().Store_Entity(pass_io_rCe);
+ my_NameDictionary().Add_Name( pass_io_rCe.LocalName(),
+ pass_io_rCe.CeId(),
+ pass_io_rCe.AryClass(),
+ pass_io_rCe.Owner() );
+ }
+
+inline void
+CeAdmin::lhf_Store_NewEntity( DYN CodeEntity & pass_io_rCe,
+ Module & i_rOwner )
+{
+ lhf_Put2Storage_and_AssignId(pass_io_rCe);
+ i_rOwner.Add_Name(pass_io_rCe.LocalName(), pass_io_rCe.CeId());
+}
+
+inline void
+CeAdmin::lhf_Store_NewEntity( DYN CodeEntity & pass_io_rCe,
+ Ce_id i_nOwnerModule )
+{
+ lhf_Store_NewEntity(pass_io_rCe, lhf_Access_Module(i_nOwnerModule));
+}
+
+
+
+CeAdmin::CeAdmin( NameLookup & io_rNameDictionary,
+ TypeAdmin & io_rTypePilot )
+ : pStorage(new Ce_Storage),
+ pGlobalNamespace(0),
+ pNameDictionary(&io_rNameDictionary),
+ pTypePilot(&io_rTypePilot)
+{
+ Storage().Set_Reserved(
+ predefined::ce_GlobalNamespace,
+ *new Module );
+ pGlobalNamespace = &lhf_Access_Module(Ce_id(predefined::ce_GlobalNamespace));
+}
+
+CeAdmin::~CeAdmin()
+{
+}
+
+
+
+Module &
+CeAdmin::CheckIn_Module( Ce_id i_nParentId,
+ const String & i_sName )
+{
+ Module & rOwner = lhf_Access_Module(i_nParentId);
+ Ce_id nId = rOwner.Search_Name(i_sName);
+ if (nId.IsValid())
+ {
+ return lhf_Access_Module(nId);
+ }
+
+ Module & ret = *new Module( i_sName,
+ rOwner );
+ lhf_Store_NewEntity(ret, rOwner);
+ return ret;
+}
+
+Service &
+CeAdmin::Store_Service( Ce_id i_nOwner,
+ const String & i_sName )
+{
+ Service & ret = *new Service( i_sName,
+ i_nOwner );
+ lhf_Store_NewEntity(ret, i_nOwner);
+ return ret;
+}
+
+SglIfcService &
+CeAdmin::Store_SglIfcService( Ce_id i_nOwner,
+ const String & i_sName,
+ Type_id i_nBaseInterface )
+{
+ SglIfcService &
+ ret = *new SglIfcService( i_sName,
+ i_nOwner,
+ i_nBaseInterface );
+ lhf_Store_NewEntity(ret, i_nOwner);
+ return ret;
+}
+
+Interface &
+CeAdmin::Store_Interface( Ce_id i_nOwner,
+ const String & i_sName,
+ Type_id i_nBase )
+{
+ Interface & ret = *new Interface( i_sName,
+ i_nOwner );
+ lhf_Store_NewEntity(ret, i_nOwner);
+ if (i_nBase.IsValid())
+ ret.Add_Base(i_nBase, 0);
+ return ret;
+}
+
+Struct &
+CeAdmin::Store_Struct( Ce_id i_nOwner,
+ const String & i_sName,
+ Type_id i_nBase,
+ const String & i_sTemplateParam )
+{
+ if (NOT i_sTemplateParam.empty())
+ {
+ return lhf_Store_TplStruct( i_nOwner,
+ i_sName,
+ i_nBase,
+ i_sTemplateParam );
+ }
+
+ Struct & ret = *new Struct( i_sName,
+ i_nOwner,
+ i_nBase,
+ String::Null_(),
+ Type_id::Null_() );
+ lhf_Store_NewEntity(ret, i_nOwner);
+
+ return ret;
+}
+
+Exception &
+CeAdmin::Store_Exception( Ce_id i_nOwner,
+ const String & i_sName,
+ Type_id i_nBase )
+{
+ Exception & ret = *new Exception( i_sName,
+ i_nOwner,
+ i_nBase );
+ lhf_Store_NewEntity(ret, i_nOwner);
+ return ret;
+}
+
+Enum &
+CeAdmin::Store_Enum( Ce_id i_nOwner,
+ const String & i_sName )
+{
+ Enum & ret = *new Enum( i_sName,
+ i_nOwner );
+ lhf_Store_NewEntity(ret, i_nOwner);
+ return ret;
+}
+
+Typedef &
+CeAdmin::Store_Typedef( Ce_id i_nOwner,
+ const String & i_sName,
+ Type_id i_nDefiningType )
+{
+ Typedef & ret = *new Typedef( i_sName,
+ i_nOwner,
+ i_nDefiningType );
+ lhf_Store_NewEntity(ret, i_nOwner);
+ return ret;
+}
+
+
+ConstantsGroup &
+CeAdmin::Store_ConstantsGroup( Ce_id i_nOwner,
+ const String & i_sName )
+{
+ ConstantsGroup & ret = *new ConstantsGroup( i_sName,
+ i_nOwner );
+ lhf_Store_NewEntity(ret, i_nOwner);
+ return ret;
+}
+
+Singleton &
+CeAdmin::Store_Singleton( Ce_id i_nOwner,
+ const String & i_sName )
+{
+ Singleton & ret = *new Singleton( i_sName,
+ i_nOwner );
+ lhf_Store_NewEntity(ret, i_nOwner);
+ return ret;
+}
+
+SglIfcSingleton &
+CeAdmin::Store_SglIfcSingleton( Ce_id i_nOwner,
+ const String & i_sName,
+ Type_id i_nBaseInterface )
+{
+ SglIfcSingleton &
+ ret = *new SglIfcSingleton( i_sName,
+ i_nOwner,
+ i_nBaseInterface );
+ lhf_Store_NewEntity(ret, i_nOwner);
+ return ret;
+}
+
+Constant &
+CeAdmin::Store_Constant( Ce_id i_nOwner,
+ const String & i_sName,
+ Type_id i_nType,
+ const String & i_sValue )
+{
+ ConstantsGroup &
+ rOwner = ary_cast<ConstantsGroup>(Storage()[i_nOwner]);
+ Constant & ret = *new Constant( i_sName,
+ i_nOwner,
+ rOwner.NameRoom(),
+ i_nType,
+ i_sValue );
+ lhf_Put2Storage_and_AssignId(ret);
+ rOwner.Add_Constant(ret.CeId());
+ return ret;
+}
+
+Property &
+CeAdmin::Store_Property( Ce_id i_nOwner,
+ const String & i_sName,
+ Type_id i_nType,
+ Property::Stereotypes i_stereotypes )
+{
+ Service &
+ rOwner = ary_cast<Service>(Storage()[i_nOwner]);
+ Property & ret = *new Property( i_sName,
+ i_nOwner,
+ rOwner.NameRoom(),
+ i_nType,
+ i_stereotypes );
+ lhf_Put2Storage_and_AssignId(ret);
+ rOwner.Add_Property(ret.CeId());
+ return ret;
+}
+
+Function &
+CeAdmin::Store_Function( Ce_id i_nOwner,
+ const String & i_sName,
+ Type_id i_nReturnType,
+ bool i_bOneWay )
+{
+ Interface &
+ rOwner = ary_cast<Interface>(Storage()[i_nOwner]);
+ Function & ret = *new Function( i_sName,
+ i_nOwner,
+ rOwner.NameRoom(),
+ i_nReturnType,
+ i_bOneWay);
+ lhf_Put2Storage_and_AssignId(ret);
+ rOwner.Add_Function(ret.CeId());
+ return ret;
+}
+
+Function &
+CeAdmin::Store_ServiceConstructor( Ce_id i_nOwner,
+ const String & i_sName )
+{
+ SglIfcService &
+ rOwner = ary_cast<SglIfcService>(Storage()[i_nOwner]);
+ Function & ret = *new Function( i_sName,
+ i_nOwner,
+ rOwner.NameRoom() );
+ lhf_Put2Storage_and_AssignId(ret);
+ rOwner.Add_Constructor(ret.CeId());
+ return ret;
+}
+
+StructElement &
+CeAdmin::Store_StructMember( Ce_id i_nOwner,
+ const String & i_sName,
+ Type_id i_nType )
+{
+ Struct &
+ rOwner = ary_cast<Struct>(Storage()[i_nOwner]);
+ StructElement & ret = *new StructElement( i_sName,
+ i_nOwner,
+ rOwner.NameRoom(),
+ i_nType );
+ lhf_Put2Storage_and_AssignId(ret);
+ rOwner.Add_Member(ret.CeId());
+ return ret;
+}
+
+StructElement &
+CeAdmin::Store_ExceptionMember( Ce_id i_nOwner,
+ const String & i_sName,
+ Type_id i_nType )
+{
+ Exception &
+ rOwner = ary_cast<Exception>(Storage()[i_nOwner]);
+ StructElement & ret = *new StructElement( i_sName,
+ i_nOwner,
+ rOwner.NameRoom(),
+ i_nType );
+ lhf_Put2Storage_and_AssignId(ret);
+ rOwner.Add_Member(ret.CeId());
+ return ret;
+}
+
+EnumValue &
+CeAdmin::Store_EnumValue( Ce_id i_nOwner,
+ const String & i_sName,
+ const String & i_sValue )
+{
+ Enum &
+ rOwner = ary_cast<Enum>(Storage()[i_nOwner]);
+ EnumValue & ret = *new EnumValue( i_sName,
+ i_nOwner,
+ rOwner.NameRoom(),
+ i_sValue );
+ lhf_Put2Storage_and_AssignId(ret);
+ rOwner.Add_Value(ret.CeId());
+ return ret;
+}
+
+Attribute &
+CeAdmin::Store_Attribute( Ce_id i_nOwner,
+ const String & i_sName,
+ Type_id i_nType,
+ bool i_bReadOnly,
+ bool i_bBound )
+{
+ Interface &
+ rOwner = ary_cast<Interface>(Storage()[i_nOwner]);
+
+ Attribute & ret = *new Attribute ( i_sName,
+ i_nOwner,
+ rOwner.NameRoom(),
+ i_nType,
+ i_bReadOnly,
+ i_bBound );
+ lhf_Put2Storage_and_AssignId(ret);
+ rOwner.Add_Attribute(ret.CeId());
+ return ret;
+}
+
+const Module &
+CeAdmin::GlobalNamespace() const
+{
+ csv_assert(pGlobalNamespace);
+ return *pGlobalNamespace;
+}
+
+const CodeEntity &
+CeAdmin::Find_Ce( Ce_id i_nId ) const
+{
+ return Storage()[i_nId];
+
+}
+
+const Module &
+CeAdmin::Find_Module( Ce_id i_nId ) const
+{
+ return ary_cast<Module>(Storage()[i_nId]);
+}
+
+const Module *
+CeAdmin::Search_Module( Ce_id i_nId ) const
+{
+ if (NOT i_nId.IsValid())
+ return 0;
+ return ary_cast<Module>( & Storage()[i_nId] );
+}
+
+const Function &
+CeAdmin::Find_Function( Ce_id i_nId ) const
+{
+ return ary_cast<Function>(Storage()[i_nId]);
+}
+
+const Property &
+CeAdmin::Find_Property( Ce_id i_nId ) const
+{
+ return ary_cast<Property>(Storage()[i_nId]);
+}
+
+const EnumValue &
+CeAdmin::Find_EnumValue( Ce_id i_nId ) const
+{
+ return ary_cast<EnumValue>(Storage()[i_nId]);
+}
+
+const Constant &
+CeAdmin::Find_Constant( Ce_id i_nId ) const
+{
+ return ary_cast<Constant>(Storage()[i_nId]);
+}
+
+const StructElement &
+CeAdmin::Find_StructElement( Ce_id i_nId ) const
+{
+ return ary_cast<StructElement>(Storage()[i_nId]);
+}
+
+void
+CeAdmin::Get_Text( StringVector & o_module,
+ String & o_ce,
+ String & o_member,
+ const CodeEntity & i_ce ) const
+{
+ const CodeEntity * pCe = &i_ce;
+ csv::erase_container(o_module);
+ o_ce.clear();
+ o_member.clear();
+
+ switch ( pCe->SightLevel() )
+ {
+ // Here are intentionally no breaks!
+ case sl_Member:
+ if ( is_type<Function>(*pCe) )
+ o_member = StreamLock(200)()
+ << pCe->LocalName()
+ << "()"
+ << c_str;
+ else
+ o_member = pCe->LocalName();
+ pCe = & Storage()[pCe->Owner()];
+ case sl_File:
+ o_ce = pCe->LocalName();
+ pCe = & Storage()[pCe->NameRoom()];
+ case sl_Module:
+ get_ModuleText(o_module,*pCe);
+ break;
+ default:
+ csv_assert(false);
+ } // end switch
+}
+
+const NameLookup &
+CeAdmin::NameDictionary() const
+{
+ return *pNameDictionary;
+}
+
+
+void
+CeAdmin::Get_AlphabeticalIndex( std::vector<Ce_id> & o_rResult,
+ alphabetical_index::E_Letter i_cLetter ) const
+{
+ const int C_nLowerUpperDiff = 'a'-'A';
+
+ // Establishing filter:
+ UINT8 filter[256];
+
+ UINT8 nLetter = static_cast<UINT8>(i_cLetter);
+ memset(filter, 0, 256);
+ filter[nLetter] = 1;
+ if ( i_cLetter != alphabetical_index::non_alpha )
+ filter[nLetter - C_nLowerUpperDiff] = 1;
+
+ // Gather entities which start with i_cLetter:
+ o_rResult.reserve(1000);
+ idl::Ce_Storage::c_iter
+ itEnd = Storage().End();
+ for ( idl::Ce_Storage::c_iter it = Storage().BeginUnreserved();
+ it != itEnd;
+ ++it )
+ {
+ if ( filter[ static_cast<UINT8>(*(*it).LocalName().c_str()) ] == 1 )
+ o_rResult.push_back( (*it).CeId() );
+ }
+
+ std::sort( o_rResult.begin(),
+ o_rResult.end(),
+ IdSorter<Ce_Compare>() );
+}
+
+
+Module &
+CeAdmin::GlobalNamespace()
+{
+ csv_assert(pGlobalNamespace);
+ return *pGlobalNamespace;
+}
+
+CodeEntity &
+CeAdmin::Find_Ce( Ce_id i_nId )
+{
+ return Storage()[i_nId];
+}
+
+void
+CeAdmin::get_ModuleText( StringVector & o_module,
+ const CodeEntity & i_ce ) const
+{
+ if (i_ce.NameRoom().IsValid())
+ {
+ const CodeEntity &
+ rParent = Storage()[i_ce.NameRoom()];
+ get_ModuleText(o_module, rParent);
+ o_module.push_back(i_ce.LocalName());
+ }
+}
+
+Struct &
+CeAdmin::lhf_Store_TplStruct( Ce_id i_nOwner,
+ const String & i_sName,
+ Type_id i_nBase,
+ const String & i_sTemplateParam )
+{
+ csv_assert(NOT i_sTemplateParam.empty());
+
+ TemplateParamType &
+ rTpt = pTypePilot->Store_TemplateParamType(i_sTemplateParam);
+
+ Struct & ret = *new Struct( i_sName,
+ i_nOwner,
+ i_nBase,
+ i_sTemplateParam,
+ rTpt.TypeId() );
+ lhf_Store_NewEntity(ret, i_nOwner);
+ rTpt.Set_StructId(ret.CeId());
+
+ return ret;
+}
+
+
+} // namespace idl
+} // namespace ary
diff --git a/autodoc/source/ary/idl/ia_ce.hxx b/autodoc/source/ary/idl/ia_ce.hxx
new file mode 100644
index 000000000000..48d8907eb3a3
--- /dev/null
+++ b/autodoc/source/ary/idl/ia_ce.hxx
@@ -0,0 +1,253 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_IDL_IA_CE_HXX
+#define ARY_IDL_IA_CE_HXX
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <ary/idl/ip_ce.hxx>
+ // COMPONENTS
+ // PARAMETERS
+
+
+namespace ary
+{
+namespace idl
+{
+
+class Ce_Storage;
+class TypeAdmin;
+
+
+/** @resp
+ Implements ::ary::idl::CePilot. Provides the access logic for all
+ IDL code entities.
+
+ @collab Ce_Storage
+ @collab TypeAdmin
+
+ @see CodeEntity
+*/
+class CeAdmin : public CePilot
+{
+ public:
+ // LIFECYCLE
+ CeAdmin(
+ NameLookup & io_rNameDictionary,
+ TypeAdmin & io_rTypePilot );
+ virtual ~CeAdmin();
+
+ // OPERATIONS
+
+ // INQUIRY
+ const Ce_Storage & Storage() const;
+
+ // ACCESS
+ Ce_Storage & Storage();
+
+ // INHERITED
+ // Interface ::ary::idl::CePilot:
+ virtual Module & CheckIn_Module(
+ Ce_id i_nParentId,
+ const String & i_sName );
+ virtual Service & Store_Service(
+ Ce_id i_nOwner,
+ const String & i_sName );
+ virtual SglIfcService &
+ Store_SglIfcService(
+ Ce_id i_nOwner,
+ const String & i_sName,
+ Type_id i_nBaseInterface );
+ virtual Interface & Store_Interface(
+ Ce_id i_nOwner,
+ const String & i_sName,
+ Type_id i_nBase );
+ virtual Struct & Store_Struct(
+ Ce_id i_nOwner,
+ const String & i_sName,
+ Type_id i_nBase,
+ const String & i_sTemplateParam );
+ virtual Exception & Store_Exception(
+ Ce_id i_nOwner,
+ const String & i_sName,
+ Type_id i_nBase );
+ virtual Enum & Store_Enum(
+ Ce_id i_nOwner,
+ const String & i_sName );
+ virtual Typedef & Store_Typedef(
+ Ce_id i_nOwner,
+ const String & i_sName,
+ Type_id i_nDefiningType );
+ virtual ConstantsGroup &
+ Store_ConstantsGroup(
+ Ce_id i_nOwner,
+ const String & i_sName );
+ virtual Singleton & Store_Singleton(
+ Ce_id i_nOwner,
+ const String & i_sName );
+ virtual SglIfcSingleton &
+ Store_SglIfcSingleton(
+ Ce_id i_nOwner,
+ const String & i_sName,
+ Type_id i_nBaseInterface );
+
+ virtual Constant & Store_Constant(
+ Ce_id i_nOwner,
+ const String & i_sName,
+ Type_id i_nType,
+ const String & i_sValue );
+ virtual Property & Store_Property(
+ Ce_id i_nOwner,
+ const String & i_sName,
+ Type_id i_nType,
+ Property::Stereotypes
+ i_stereotypes );
+ virtual Function & Store_Function(
+ Ce_id i_nOwner,
+ const String & i_sName,
+ Type_id i_nReturnType,
+ bool i_bOneWay );
+ virtual Function & Store_ServiceConstructor(
+ Ce_id i_nOwner,
+ const String & i_sName );
+ virtual StructElement &
+ Store_StructMember(
+ Ce_id i_nOwner,
+ const String & i_sName,
+ Type_id i_nType );
+ virtual StructElement &
+ Store_ExceptionMember(
+ Ce_id i_nOwner,
+ const String & i_sName,
+ Type_id i_nType );
+ virtual EnumValue & Store_EnumValue(
+ Ce_id i_nOwner,
+ const String & i_sName,
+ const String & i_sValue );
+ virtual Attribute & Store_Attribute(
+ Ce_id i_nOwner,
+ const String & i_sName,
+ Type_id i_nType,
+ bool i_bReadOnly,
+ bool i_bBound );
+
+ virtual const Module &
+ GlobalNamespace() const;
+ virtual const CodeEntity &
+ Find_Ce(
+ Ce_id i_nId ) const;
+ virtual const Module &
+ Find_Module(
+ Ce_id i_nId ) const;
+ virtual const Module *
+ Search_Module(
+ Ce_id i_nId ) const;
+ virtual const Function &
+ Find_Function(
+ Ce_id i_nId ) const;
+ virtual const Property &
+ Find_Property(
+ Ce_id i_nId ) const;
+ virtual const EnumValue &
+ Find_EnumValue(
+ Ce_id i_nId ) const;
+ virtual const Constant &
+ Find_Constant(
+ Ce_id i_nId ) const;
+ virtual const StructElement &
+ Find_StructElement(
+ Ce_id i_nId ) const;
+ virtual void Get_Text(
+ StringVector & o_module,
+ String & o_ce,
+ String & o_member,
+ const CodeEntity & i_ce ) const;
+ virtual const NameLookup &
+ NameDictionary() const;
+ virtual void Get_AlphabeticalIndex(
+ std::vector<Ce_id> &
+ o_rResult,
+ alphabetical_index::E_Letter
+ i_cLetter) const;
+ // ACCESS
+ virtual Module & GlobalNamespace();
+ virtual CodeEntity &
+ Find_Ce(
+ Ce_id i_nId );
+ private:
+ // Locals
+ Module & lhf_Access_Module(
+ Ce_id i_nId );
+ void lhf_Put2Storage_and_AssignId(
+ CodeEntity & pass_io_rCe );
+ void lhf_Store_NewEntity(
+ DYN CodeEntity & pass_io_rCe,
+ Module & i_rOwner );
+ void lhf_Store_NewEntity(
+ DYN CodeEntity & pass_io_rCe,
+ Ce_id i_nOwnerModule );
+ void get_ModuleText(
+ StringVector & o_module,
+ const CodeEntity & i_ce ) const;
+ Struct & lhf_Store_TplStruct(
+ Ce_id i_nOwner,
+ const String & i_sName,
+ Type_id i_nBase,
+ const String & i_sTemplateParam );
+
+ const Ce_Storage & my_Storage() const;
+ Ce_Storage & my_Storage();
+ NameLookup & my_NameDictionary() { return *pNameDictionary; }
+
+ // DATA
+ Dyn<Ce_Storage> pStorage; /// @inv pStorage != 0;
+ Module * pGlobalNamespace;
+ NameLookup * pNameDictionary;
+ TypeAdmin * pTypePilot;
+};
+
+
+// IMPLEMENTATION
+inline const Ce_Storage &
+CeAdmin::Storage() const
+{
+ return *pStorage;
+}
+
+inline Ce_Storage &
+CeAdmin::Storage()
+{
+ return *pStorage;
+}
+
+
+
+} // namespace idl
+} // namespace ary
+#endif
diff --git a/autodoc/source/ary/idl/ia_type.cxx b/autodoc/source/ary/idl/ia_type.cxx
new file mode 100644
index 000000000000..eb47d355c9ae
--- /dev/null
+++ b/autodoc/source/ary/idl/ia_type.cxx
@@ -0,0 +1,364 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "ia_type.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include <ary/qualiname.hxx>
+#include <ary/idl/i_module.hxx>
+#include <ary/idl/i_type.hxx>
+#include <ary/idl/ip_ce.hxx>
+#include "ia_ce.hxx"
+#include "is_type.hxx"
+#include "it_builtin.hxx"
+#include "it_ce.hxx"
+#include "it_explicit.hxx"
+#include "it_sequence.hxx"
+#include "it_tplparam.hxx"
+#include "it_xnameroom.hxx"
+
+
+
+namespace ary
+{
+namespace idl
+{
+
+String MakeTemplateName(
+ const String & i_localName,
+ const std::vector<Type_id> &
+ i_templateParameters );
+
+
+
+inline CeAdmin &
+TypeAdmin::my_Ces() const
+ { return *pCes; }
+
+inline void
+TypeAdmin::lhf_Put2Storage_and_AssignId( DYN Type & pass_io_rType )
+ { // This also assigns an ID to pass_io_rType:
+ Storage().Store_Entity(pass_io_rType); }
+
+inline Type_id
+TypeAdmin::lhf_findBuiltInType( const String & i_sName )
+ { return ary_cast<ExplicitNameRoom>(Storage()[nXNameRoom_Root])
+ .Search_Name(i_sName); }
+
+inline const ExplicitNameRoom &
+TypeAdmin::find_ExplicitNameRoom( Type_id i_nType ) const
+{
+ return ary_cast<ExplicitNameRoom>(Storage()[i_nType]);
+}
+
+inline ExplicitNameRoom &
+TypeAdmin::find_ExplicitNameRoom( Type_id i_nType )
+{
+ return ary_cast<ExplicitNameRoom>(Storage()[i_nType]);
+}
+
+ExplicitNameRoom &
+TypeAdmin::lhf_CheckIn_XNameRoom( const QualifiedName & i_rName,
+ Ce_id i_nModuleOfOccurrence )
+{
+ Type_id nRoot = i_rName.IsAbsolute()
+ ? Type_id( predefined::type_GlobalXNameRoom )
+ : lhf_Get_NameRoomRoot_forModuleofOccurrence( i_nModuleOfOccurrence ).TypeId();
+
+ if ( i_rName.NamespaceDepth() == 0 )
+ return find_ExplicitNameRoom(nRoot);
+
+ QualifiedName::namespace_iterator it = i_rName.first_namespace();
+ ExplicitNameRoom *
+ ret = & find_ExplicitNameRoom(nRoot);
+ for ( ; it != i_rName.end_namespace(); ++it )
+ {
+ Type_id
+ found = ret->Search_Name(*it);
+ if (found.IsValid())
+ {
+ ret = & find_ExplicitNameRoom(found);
+ }
+ else
+ {
+ ExplicitNameRoom &
+ rNew = *new ExplicitNameRoom(*it, *ret);
+ lhf_Put2Storage_and_AssignId(rNew);
+ ret->Add_Name( rNew.Name(), rNew.TypeId() );
+ ret = &rNew;
+ }
+
+ } // end for
+ return *ret;
+}
+
+Type_id
+TypeAdmin::lhf_CheckIn_TypeName( const String & i_sLocalName,
+ ExplicitNameRoom & io_rXNameRoom,
+ Ce_id i_nModuleOfOccurrence,
+ const std::vector<Type_id> * i_templateParameters )
+{
+ String sSearchLocalName( i_sLocalName );
+ if ( i_templateParameters != 0
+ ? i_templateParameters->size() > 0
+ : false )
+ {
+ sSearchLocalName = MakeTemplateName(
+ i_sLocalName,
+ *i_templateParameters);
+ }
+
+ Type_id
+ ret = io_rXNameRoom.Search_Name(sSearchLocalName);
+ if (NOT ret.IsValid())
+ {
+ DYN Type &
+ rNewType = *new ExplicitType( i_sLocalName,
+ io_rXNameRoom.TypeId(),
+ i_nModuleOfOccurrence,
+ i_templateParameters );
+ lhf_Put2Storage_and_AssignId(rNewType);
+ ret = rNewType.TypeId();
+ io_rXNameRoom.Add_Name( sSearchLocalName, ret );
+ }
+ return ret;
+}
+
+Type_id
+TypeAdmin::lhf_CheckIn_Sequence(Type_id i_nType)
+{
+ Type_id
+ ret = Storage().Search_SequenceOf(i_nType);
+
+ if (NOT ret.IsValid())
+ {
+ DYN Type &
+ rNewSeq = *new Sequence(i_nType);
+ lhf_Put2Storage_and_AssignId(rNewSeq);
+ ret = rNewSeq.Id();
+ Storage().Add_Sequence(i_nType, ret);
+ }
+ return ret;
+}
+
+void
+TypeAdmin::lhf_CheckIn_BuiltInType( const char * i_sName,
+ Rid i_nId )
+{
+ DYN BuiltInType &
+ rNewType = *new BuiltInType(i_sName);
+ Storage().Set_Reserved(i_nId, rNewType);
+
+ // Put them into both roots, to catch the syntactically correct
+ // (though unlikely) ::Any, ::long etc.
+ Type_id
+ nId(i_nId);
+ find_ExplicitNameRoom(nXNameRoom_Root).Add_Name(i_sName, nId);
+ find_ExplicitNameRoom(nXNameRoom_Global).Add_Name(i_sName, nId);
+}
+
+ExplicitNameRoom &
+TypeAdmin::lhf_Get_NameRoomRoot_forModuleofOccurrence( Ce_id i_nModuleOfOccurrence )
+{
+ const Type_id *
+ pFound = csv::find_in_map( aMap_ModuleOfOccurrence2NameRoomRoot,
+ i_nModuleOfOccurrence );
+ if (pFound != 0)
+ return find_ExplicitNameRoom(*pFound);
+
+ ExplicitNameRoom &
+ ret = *new ExplicitNameRoom;
+ lhf_Put2Storage_and_AssignId(ret);
+ aMap_ModuleOfOccurrence2NameRoomRoot.insert(std::pair< const Ce_id, Type_id>(i_nModuleOfOccurrence,ret.TypeId()));
+ return ret;
+}
+
+TypeAdmin::TypeAdmin()
+ : pStorage(new Type_Storage),
+ pCes(0), // Needs to be set directly after creation.
+ nXNameRoom_Root( static_cast<ary::Rid>(predefined::type_Root_ofXNameRooms) ),
+ nXNameRoom_Global( static_cast<ary::Rid>(predefined::type_GlobalXNameRoom) ),
+ aMap_ModuleOfOccurrence2NameRoomRoot()
+{
+ DYN ExplicitNameRoom &
+ drRoot = *new ExplicitNameRoom;
+ Storage().Set_Reserved( nXNameRoom_Root.Value(), drRoot );
+
+ DYN ExplicitNameRoom &
+ drGlobal = *new ExplicitNameRoom(String::Null_(), drRoot);
+ Storage().Set_Reserved( nXNameRoom_Global.Value(), drGlobal );
+ drRoot.Add_Name( drGlobal.Name(), nXNameRoom_Global );
+
+ lhf_Setup_BuildInTypes();
+}
+
+TypeAdmin::~TypeAdmin()
+{
+}
+
+void
+TypeAdmin::lhf_Setup_BuildInTypes()
+{
+ lhf_CheckIn_BuiltInType("any", predefined::type_any);
+ lhf_CheckIn_BuiltInType("boolean", predefined::type_boolean);
+ lhf_CheckIn_BuiltInType("byte", predefined::type_byte);
+ lhf_CheckIn_BuiltInType("char", predefined::type_char);
+ lhf_CheckIn_BuiltInType("double", predefined::type_double);
+ lhf_CheckIn_BuiltInType("float", predefined::type_float);
+ lhf_CheckIn_BuiltInType("hyper", predefined::type_hyper);
+ lhf_CheckIn_BuiltInType("long", predefined::type_long);
+ lhf_CheckIn_BuiltInType("short", predefined::type_short);
+ lhf_CheckIn_BuiltInType("string", predefined::type_string);
+ lhf_CheckIn_BuiltInType("type", predefined::type_type);
+ lhf_CheckIn_BuiltInType("void", predefined::type_void);
+ lhf_CheckIn_BuiltInType("unsigned hyper", predefined::type_u_hyper);
+ lhf_CheckIn_BuiltInType("unsigned long", predefined::type_u_long);
+ lhf_CheckIn_BuiltInType("unsigned short", predefined::type_u_short);
+}
+
+const Type &
+TypeAdmin::CheckIn_Type( QualifiedName & i_rFullName,
+ uintt i_nSequenceCount,
+ Ce_id i_nModuleOfOccurrence,
+ const std::vector<Type_id> * i_templateParameters )
+{
+ // Look in built-in types:
+ Type_id
+ nType = lhf_findBuiltInType(i_rFullName.LocalName());
+ if (NOT nType.IsValid())
+ { // No built-in type:
+ ExplicitNameRoom &
+ rNameRoom = lhf_CheckIn_XNameRoom(i_rFullName,i_nModuleOfOccurrence);
+ nType = lhf_CheckIn_TypeName( i_rFullName.LocalName(),
+ rNameRoom,
+ i_nModuleOfOccurrence,
+ i_templateParameters );
+ } // endif
+
+ for ( uintt s = 0; s < i_nSequenceCount; ++s )
+ {
+ nType = lhf_CheckIn_Sequence(nType);
+ }
+
+ return Storage()[nType];
+}
+
+TemplateParamType &
+TypeAdmin::Store_TemplateParamType( String i_sName )
+{
+ DYN TemplateParamType &
+ ret = *new TemplateParamType( i_sName );
+ lhf_Put2Storage_and_AssignId(ret);
+ return ret;
+}
+
+const Type &
+TypeAdmin::Find_Type( Type_id i_nType ) const
+{
+ return Storage()[i_nType];
+}
+
+String
+TypeAdmin::Search_LocalNameOf( Type_id i_nType ) const
+{
+ const Type *
+ pType = Storage().Exists(i_nType)
+ ? 0
+ : & Storage()[i_nType];
+ if (pType != 0)
+ {
+ switch (pType->AryClass())
+ {
+ case Ce_Type::class_id:
+ case ExplicitType::class_id:
+ case BuiltInType::class_id:
+ return static_cast< const Named_Type& >(*pType).Name();
+ }
+ }
+ return String::Null_();
+}
+
+Ce_id
+TypeAdmin::Search_CeRelatedTo( Type_id i_nType ) const
+{
+ const Ce_Type *
+ ret = ary_cast<Ce_Type>( & Storage()[i_nType] );
+ return ret != 0
+ ? ret->RelatedCe()
+ : Ce_id_Null();
+}
+
+const ExplicitNameRoom &
+TypeAdmin::Find_XNameRoom( Type_id i_nType ) const
+{
+ return find_ExplicitNameRoom(i_nType);
+}
+
+bool
+TypeAdmin::IsBuiltInOrRelated( const Type & i_rType ) const
+{
+ if ( is_type<BuiltInType>(i_rType) )
+ return true;
+ else
+ {
+ const Type *
+ pType = &i_rType;
+ while (is_type<Sequence>(*pType))
+ {
+ Type_id
+ nt = ary_cast<Sequence>(pType)->RelatedType();
+ if (NOT nt.IsValid())
+ return false;
+ pType = & Storage()[nt];
+ }
+ return is_type<BuiltInType>(*pType);
+ }
+}
+
+
+String
+MakeTemplateName( const String & i_localName,
+ const std::vector<Type_id> & )
+{
+ StreamLock
+ sl(200);
+
+ // This is the simple solution, assuming that there is only
+ // one version of templatisation allowed with a given name.
+ return
+ sl()
+ << i_localName
+ << C_cTemplateDelimiter
+ << c_str;
+}
+
+
+
+} // namespace idl
+} // namespace ary
diff --git a/autodoc/source/ary/idl/ia_type.hxx b/autodoc/source/ary/idl/ia_type.hxx
new file mode 100644
index 000000000000..050519234626
--- /dev/null
+++ b/autodoc/source/ary/idl/ia_type.hxx
@@ -0,0 +1,170 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_IDL_IA_TYPE_HXX
+#define ARY_IDL_IA_TYPE_HXX
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <ary/idl/ip_type.hxx>
+ // COMPONENTS
+ // PARAMETERS
+#include "is_type.hxx"
+
+
+namespace ary
+{
+namespace idl
+{
+
+
+class Type_Storage;
+class CeAdmin;
+class TemplateParamType;
+
+
+class TypeAdmin : public TypePilot
+{
+ public:
+ // LIFECYCLE
+ TypeAdmin();
+
+ void Assign_CePilot(
+ CeAdmin & io_rCes );
+ virtual ~TypeAdmin();
+
+ // OPERATIONS
+ TemplateParamType & Store_TemplateParamType(
+ String i_sName );
+ // INQUIRY
+ const Type_Storage &
+ Storage() const;
+ // ACCESS
+ Type_Storage & Storage();
+
+ // INHERITED
+ // Interface TypePilot:
+ virtual const Type &
+ CheckIn_Type(
+ QualifiedName & i_rFullName,
+ uintt i_nSequenceCount,
+ Ce_id i_nModuleOfOccurrence,
+ const std::vector<Type_id> *
+ i_templateParameters );
+ virtual const Type &
+ Find_Type(
+ Type_id i_nType ) const;
+ virtual String Search_LocalNameOf(
+ Type_id i_nType ) const;
+ virtual Ce_id Search_CeRelatedTo(
+ Type_id i_nType ) const;
+ virtual const ExplicitNameRoom &
+ Find_XNameRoom(
+ Type_id i_nType ) const;
+ virtual bool IsBuiltInOrRelated(
+ const Type & i_rType ) const;
+ private:
+ // Locals
+ CeAdmin & my_Ces() const;
+
+ void lhf_Put2Storage_and_AssignId(
+ DYN Type & pass_io_rType );
+
+ ExplicitNameRoom & lhf_CheckIn_XNameRoom(
+ const QualifiedName &
+ i_rName,
+ Ce_id i_nModuleOfOccurrence );
+ Type_id lhf_CheckIn_TypeName(
+ const String & i_sLocalName,
+ ExplicitNameRoom & io_rExplicitNameRoom,
+ Ce_id i_nModuleOfOccurrence,
+ const std::vector<Type_id> *
+ i_templateParameters );
+ Type_id lhf_CheckIn_Sequence(
+ Type_id i_nType );
+ void lhf_CheckIn_BuiltInType(
+ const char * i_sName,
+ Rid i_nId );
+ const ExplicitNameRoom &
+ find_ExplicitNameRoom(
+ Type_id i_nType ) const;
+ ExplicitNameRoom & find_ExplicitNameRoom(
+ Type_id i_nType );
+ ExplicitNameRoom & lhf_Get_NameRoomRoot_forModuleofOccurrence(
+ Ce_id i_nModuleOfOccurrence );
+
+ /// @return Type_id::Null_(), if not found.
+ Type_id lhf_findBuiltInType(
+ const String & i_sName );
+ /// @precond nGlobalNamespace must be valid.
+ void lhf_Setup_BuildInTypes();
+
+ // DATA
+ Type_Storage * pStorage; /// @inv pStorage != 0
+ CeAdmin * pCes; /// @inv pCes != 0
+
+ // Data for saving time:
+ Type_id nXNameRoom_Root; /** @descr This is different from nXNameRoom_Global, because
+ the root of explicit name rooms in code without leading "::" is unknown.
+ */
+ Type_id nXNameRoom_Global;
+
+ // HACK, because this needs to be saved somehow and is not in storage:
+ std::map<Ce_id, Type_id>
+ aMap_ModuleOfOccurrence2NameRoomRoot;
+};
+
+
+
+
+
+// IMPLEMENTATION
+inline const Type_Storage &
+TypeAdmin::Storage() const
+{
+ return *pStorage;
+}
+
+inline Type_Storage &
+TypeAdmin::Storage()
+{
+ return *pStorage;
+}
+
+inline void
+TypeAdmin::Assign_CePilot( CeAdmin & io_rCes )
+{
+ pCes = &io_rCes;
+}
+
+
+
+
+} // namespace idl
+} // namespace ary
+#endif
diff --git a/autodoc/source/ary/idl/is_ce.cxx b/autodoc/source/ary/idl/is_ce.cxx
new file mode 100644
index 000000000000..eb4b93a6dfce
--- /dev/null
+++ b/autodoc/source/ary/idl/is_ce.cxx
@@ -0,0 +1,65 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "is_ce.hxx"
+
+// NOT FULLY DEFINED SERVICES
+
+namespace
+{
+ const uintt
+ C_nReservedElements = ary::idl::predefined::ce_MAX; // Skipping "0" and the GlobalNamespace
+}
+
+
+namespace ary
+{
+namespace idl
+{
+
+Ce_Storage * Ce_Storage::pInstance_ = 0;
+
+
+
+
+Ce_Storage::Ce_Storage()
+ : stg::Storage<CodeEntity>(C_nReservedElements)
+{
+ csv_assert(pInstance_ == 0);
+ pInstance_ = this;
+}
+
+Ce_Storage::~Ce_Storage()
+{
+ csv_assert(pInstance_ != 0);
+ pInstance_ = 0;
+}
+
+
+} // namespace idl
+} // namespace ary
diff --git a/autodoc/source/ary/idl/is_ce.hxx b/autodoc/source/ary/idl/is_ce.hxx
new file mode 100644
index 000000000000..c1edee0b23ff
--- /dev/null
+++ b/autodoc/source/ary/idl/is_ce.hxx
@@ -0,0 +1,79 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_IDL_IS_CE_HXX
+#define ARY_IDL_IS_CE_HXX
+
+// BASE CLASSES
+#include <store/s_storage.hxx>
+// USED SERVICES
+#include <ary/idl/i_ce.hxx>
+
+
+
+
+namespace ary
+{
+namespace idl
+{
+
+
+/** The data base for all ->ary::idl::CodeEntity objects.
+*/
+class Ce_Storage : public ::ary::stg::Storage< ::ary::idl::CodeEntity >
+{
+ public:
+ Ce_Storage();
+ virtual ~Ce_Storage();
+
+ static Ce_Storage & Instance_() { csv_assert(pInstance_ != 0);
+ return *pInstance_; }
+ private:
+ // DATA
+ static Ce_Storage * pInstance_;
+};
+
+
+
+
+namespace predefined
+{
+
+enum E_CodeEntity
+{
+ ce_GlobalNamespace = 1,
+ ce_MAX
+};
+
+} // namespace predefined
+
+
+
+
+} // namespace idl
+} // namespace ary
+#endif
diff --git a/autodoc/source/ary/idl/is_type.cxx b/autodoc/source/ary/idl/is_type.cxx
new file mode 100644
index 000000000000..269286413b17
--- /dev/null
+++ b/autodoc/source/ary/idl/is_type.cxx
@@ -0,0 +1,83 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "is_type.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include <cosv/tpl/tpltools.hxx>
+
+namespace
+{
+
+const uintt
+ C_nReservedElements = ary::idl::predefined::type_MAX; // Skipping "0" and the built in types.
+}
+
+
+namespace ary
+{
+namespace idl
+{
+
+Type_Storage * Type_Storage::pInstance_ = 0;
+
+
+
+Type_Storage::Type_Storage()
+ : stg::Storage<Type>(C_nReservedElements),
+ aSequenceIndex()
+{
+ csv_assert(pInstance_ == 0);
+ pInstance_ = this;
+}
+
+Type_Storage::~Type_Storage()
+{
+ csv_assert(pInstance_ != 0);
+ pInstance_ = 0;
+}
+
+void
+Type_Storage::Add_Sequence( Type_id i_nRelatedType,
+ Type_id i_nSequence )
+{
+ aSequenceIndex[i_nRelatedType] = i_nSequence;
+}
+
+Type_id
+Type_Storage::Search_SequenceOf( Type_id i_nRelatedType )
+{
+ return csv::value_from_map(aSequenceIndex, i_nRelatedType);
+}
+
+
+
+
+} // namespace idl
+} // namespace ary
diff --git a/autodoc/source/ary/idl/is_type.hxx b/autodoc/source/ary/idl/is_type.hxx
new file mode 100644
index 000000000000..b905602238f0
--- /dev/null
+++ b/autodoc/source/ary/idl/is_type.hxx
@@ -0,0 +1,122 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_IDL_IS_TYPE_HXX
+#define ARY_IDL_IS_TYPE_HXX
+
+// BASE CLASSES
+#include <store/s_storage.hxx>
+// USED SERVICES
+#include <ary/idl/i_type.hxx>
+
+
+
+
+namespace ary
+{
+namespace idl
+{
+
+
+/** The data base for all ->ary::idl::CodeEntity objects.
+*/
+class Type_Storage : public ::ary::stg::Storage< ::ary::idl::Type >
+{
+ public:
+ Type_Storage();
+ ~Type_Storage();
+
+
+ void Add_Sequence(
+ Type_id i_nRelatedType,
+ Type_id i_nSequence );
+
+ Type_id Search_SequenceOf(
+ Type_id i_nRelatedType );
+
+ static Type_Storage &
+ Instance_();
+ private:
+ /** value_type.first := id of the base type
+ value_type.second := id of the sequence<base type>
+ */
+ typedef std::map<Type_id,Type_id> Map_Sequences;
+
+ // DATA
+ Map_Sequences aSequenceIndex;
+
+ static Type_Storage *
+ pInstance_;
+};
+
+
+
+namespace predefined
+{
+
+enum E_Type
+{
+ type_Root_ofXNameRooms = 1,
+ type_GlobalXNameRoom,
+ type_any,
+ type_boolean,
+ type_byte,
+ type_char,
+ type_double,
+ type_float,
+ type_hyper,
+ type_long,
+ type_short,
+ type_string,
+ type_type,
+ type_void,
+ type_u_hyper,
+ type_u_long,
+ type_u_short,
+ type_ellipse, // ...
+ type_MAX
+};
+
+} // namespace predefined
+
+
+
+
+// IMPLEMENTATION
+inline Type_Storage &
+Type_Storage::Instance_()
+{
+ csv_assert(pInstance_ != 0);
+ return *pInstance_;
+}
+
+
+
+
+} // namespace idl
+} // namespace ary
+#endif
diff --git a/autodoc/source/ary/idl/it_builtin.cxx b/autodoc/source/ary/idl/it_builtin.cxx
new file mode 100644
index 000000000000..9c543a7bc798
--- /dev/null
+++ b/autodoc/source/ary/idl/it_builtin.cxx
@@ -0,0 +1,79 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "it_builtin.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include <cosv/tpl/processor.hxx>
+
+
+
+namespace ary
+{
+namespace idl
+{
+
+
+
+BuiltInType::BuiltInType( const char * i_sName )
+ : Named_Type(i_sName)
+{
+}
+
+BuiltInType::~BuiltInType()
+{
+}
+
+ClassId
+BuiltInType::get_AryClass() const
+{
+ return class_id;
+}
+
+void
+BuiltInType::do_Accept( csv::ProcessorIfc & io_processor ) const
+{
+ csv::CheckedCall(io_processor, *this);
+}
+
+void
+BuiltInType::inq_Get_Text( StringVector & , // o_module
+ String & o_name,
+ Ce_id & , // o_nRelatedCe
+ int & , // o_nSequenceCount
+ const Gate & ) const // i_rGate
+{
+ o_name = Name();
+}
+
+
+
+
+} // namespace idl
+} // namespace ary
diff --git a/autodoc/source/ary/idl/it_builtin.hxx b/autodoc/source/ary/idl/it_builtin.hxx
new file mode 100644
index 000000000000..1e3ca7fcc90f
--- /dev/null
+++ b/autodoc/source/ary/idl/it_builtin.hxx
@@ -0,0 +1,76 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_IDL_IT_BUILTIN_HXX
+#define ARY_IDL_IT_BUILTIN_HXX
+
+// BASE CLASSES
+#include "it_named.hxx"
+
+
+
+
+namespace ary
+{
+namespace idl
+{
+
+
+/** A type defined by the IDL language.
+*/
+class BuiltInType : public Named_Type
+{
+ public:
+ enum E_ClassId { class_id = 2200 };
+
+ // LIFECYCLE
+ BuiltInType(
+ const char * i_sName );
+ virtual ~BuiltInType();
+
+ private:
+ // Interface csv::ConstProcessorClient:
+ virtual void do_Accept(
+ csv::ProcessorIfc & io_processor ) const;
+ // Interface Object:
+ virtual ClassId get_AryClass() const;
+
+ // Interface Type:
+ virtual void inq_Get_Text(
+ StringVector & o_module,
+ String & o_name,
+ Ce_id & o_nRelatedCe,
+ int & o_nSequenceCount,
+ const Gate & i_rGate ) const;
+};
+
+
+
+
+} // namespace idl
+} // namespace ary
+#endif
diff --git a/autodoc/source/ary/idl/it_ce.cxx b/autodoc/source/ary/idl/it_ce.cxx
new file mode 100644
index 000000000000..1fca8585f941
--- /dev/null
+++ b/autodoc/source/ary/idl/it_ce.cxx
@@ -0,0 +1,100 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "it_ce.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include <cosv/tpl/processor.hxx>
+#include <ary/idl/i_ce.hxx>
+#include <ary/idl/i_gate.hxx>
+#include <ary/idl/i_module.hxx>
+#include <ary/idl/ip_ce.hxx>
+
+
+
+namespace ary
+{
+namespace idl
+{
+
+
+Ce_Type::Ce_Type( Ce_id i_relatedCe,
+ const std::vector<Type_id> * i_templateParameters )
+ : nRelatedCe(i_relatedCe),
+ pTemplateParameters(0)
+{
+ if (i_templateParameters != 0)
+ pTemplateParameters = new std::vector<Type_id>(*i_templateParameters);
+}
+
+Ce_Type::~Ce_Type()
+{
+}
+
+ClassId
+Ce_Type::get_AryClass() const
+{
+ return class_id;
+}
+
+void
+Ce_Type::do_Accept( csv::ProcessorIfc & io_processor ) const
+{
+ csv::CheckedCall(io_processor, *this);
+}
+
+void
+Ce_Type::inq_Get_Text( StringVector & o_module,
+ String & o_name,
+ Ce_id & o_nRelatedCe,
+ int & , // o_nSequenceCount
+ const Gate & i_rGate ) const
+{
+ String sDummyMember;
+
+ const CodeEntity &
+ rCe = i_rGate.Ces().Find_Ce(nRelatedCe);
+ i_rGate.Ces().Get_Text( o_module,
+ o_name,
+ sDummyMember,
+ rCe );
+ o_nRelatedCe = nRelatedCe;
+}
+
+const std::vector<Type_id> *
+Ce_Type::inq_TemplateParameters() const
+{
+ return pTemplateParameters.Ptr();
+}
+
+
+
+
+} // namespace idl
+} // namespace ary
diff --git a/autodoc/source/ary/idl/it_ce.hxx b/autodoc/source/ary/idl/it_ce.hxx
new file mode 100644
index 000000000000..f2de201503d8
--- /dev/null
+++ b/autodoc/source/ary/idl/it_ce.hxx
@@ -0,0 +1,88 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_IDL_IT_CE_HXX
+#define ARY_IDL_IT_CE_HXX
+
+// BASE CLASSES
+#include <ary/idl/i_type.hxx>
+
+
+
+
+namespace ary
+{
+namespace idl
+{
+
+
+/** A named ->Type related to its corresponding
+ ->CodeEntity.
+*/
+class Ce_Type : public Type
+{
+ public:
+ enum E_ClassId { class_id = 2201 };
+
+ // LIFECYCLE
+ Ce_Type(
+ Ce_id i_relatedCe,
+ const std::vector<Type_id> *
+ i_templateParameters );
+ virtual ~Ce_Type();
+
+ // INQUIRY
+ Ce_id RelatedCe() const { return nRelatedCe; }
+
+ private:
+ // Interface csv::ConstProcessorClient:
+ virtual void do_Accept(
+ csv::ProcessorIfc & io_processor ) const;
+ // Interface Object:
+ virtual ClassId get_AryClass() const;
+
+ // Interface Type:
+ virtual void inq_Get_Text(
+ StringVector & o_module,
+ String & o_name,
+ Ce_id & o_nRelatedCe,
+ int & o_nSequemceCount,
+ const Gate & i_rGate ) const;
+ virtual const std::vector<Type_id> *
+ inq_TemplateParameters() const;
+ // DATA
+ Ce_id nRelatedCe;
+ Dyn< std::vector<Type_id> >
+ pTemplateParameters;
+};
+
+
+
+
+} // namespace idl
+} // namespace ary
+#endif
diff --git a/autodoc/source/ary/idl/it_explicit.cxx b/autodoc/source/ary/idl/it_explicit.cxx
new file mode 100644
index 000000000000..552abe5b586b
--- /dev/null
+++ b/autodoc/source/ary/idl/it_explicit.cxx
@@ -0,0 +1,100 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "it_explicit.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include <cosv/tpl/processor.hxx>
+#include <ary/idl/i_module.hxx>
+#include <ary/idl/i_gate.hxx>
+#include <ary/idl/ip_ce.hxx>
+#include <ary/idl/ip_type.hxx>
+#include "it_xnameroom.hxx"
+
+
+
+namespace ary
+{
+namespace idl
+{
+
+
+ExplicitType::ExplicitType( const String & i_sName,
+ Type_id i_nXNameRoom,
+ Ce_id i_nModuleOfOccurrence,
+ const std::vector<Type_id> *
+ i_templateParameters )
+ : Named_Type(i_sName),
+ nXNameRoom(i_nXNameRoom),
+ nModuleOfOccurrence(i_nModuleOfOccurrence),
+ pTemplateParameters(0)
+{
+ if (i_templateParameters != 0)
+ pTemplateParameters = new std::vector<Type_id>(*i_templateParameters);
+}
+
+ExplicitType::~ExplicitType()
+{
+}
+
+ClassId
+ExplicitType::get_AryClass() const
+{
+ return class_id;
+}
+
+void
+ExplicitType::do_Accept( csv::ProcessorIfc & io_processor ) const
+{
+ csv::CheckedCall(io_processor, *this);
+}
+
+void
+ExplicitType::inq_Get_Text( StringVector & o_module,
+ String & o_name,
+ Ce_id & o_nRelatedCe,
+ int & o_nSequenceCount,
+ const Gate & i_rGate ) const
+{
+ const ExplicitNameRoom &
+ rNameRoom = i_rGate.Types().Find_XNameRoom(nXNameRoom);
+ rNameRoom.Get_Text(o_module,o_name,o_nRelatedCe,o_nSequenceCount,i_rGate);
+
+ o_name = Name();
+}
+
+const std::vector<Type_id> *
+ExplicitType::inq_TemplateParameters() const
+{
+ return pTemplateParameters.Ptr();
+}
+
+
+} // namespace idl
+} // namespace ary
diff --git a/autodoc/source/ary/idl/it_explicit.hxx b/autodoc/source/ary/idl/it_explicit.hxx
new file mode 100644
index 000000000000..8a3d8d76a24d
--- /dev/null
+++ b/autodoc/source/ary/idl/it_explicit.hxx
@@ -0,0 +1,93 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_IDL_IT_EXPLICIT_HXX
+#define ARY_IDL_IT_EXPLICIT_HXX
+
+// BASE CLASSES
+#include "it_named.hxx"
+
+
+
+
+namespace ary
+{
+namespace idl
+{
+
+
+/** A named @->Type, not yet related to its corresponding
+ @->CodeEntity.
+*/
+class ExplicitType : public Named_Type
+{
+ public:
+ enum E_ClassId { class_id = 2203 };
+
+ // LIFECYCLE
+ ExplicitType(
+ const String & i_sName,
+ Type_id i_nXNameRoom,
+ Ce_id i_nModuleOfOccurrence,
+ const std::vector<Type_id> *
+ i_templateParameters );
+ virtual ~ExplicitType();
+
+ // INQUIRY
+ Ce_id ModuleOfOccurrence() const
+ { return nModuleOfOccurrence; }
+ Type_id NameRoom() const { return nXNameRoom; }
+
+ private:
+ // Interface csv::ConstProcessorClient:
+ virtual void do_Accept(
+ csv::ProcessorIfc & io_processor ) const;
+ // Interface CppEntity:
+ virtual ClassId get_AryClass() const;
+
+ // Interface Type:
+ virtual void inq_Get_Text(
+ StringVector & o_module,
+ String & o_name,
+ Ce_id & o_nRelatedCe,
+ int & o_nSequemceCount,
+ const Gate & i_rGate ) const;
+ virtual const std::vector<Type_id> *
+ inq_TemplateParameters() const;
+ // DATA
+ Type_id nXNameRoom; // As written in code.
+ Ce_id nModuleOfOccurrence;
+ Dyn< const std::vector<Type_id> >
+ pTemplateParameters;
+};
+
+
+
+
+} // namespace idl
+} // namespace ary
+#endif
diff --git a/autodoc/source/ary/idl/it_named.hxx b/autodoc/source/ary/idl/it_named.hxx
new file mode 100644
index 000000000000..a1f431368b6d
--- /dev/null
+++ b/autodoc/source/ary/idl/it_named.hxx
@@ -0,0 +1,76 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_IDL_IT_NAMED_HXX
+#define ARY_IDL_IT_NAMED_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <ary/idl/i_type.hxx>
+ // COMPONENTS
+ // PARAMETERS
+
+
+namespace ary
+{
+namespace idl
+{
+
+
+
+
+/** Represents types with a name - in opposite to e.g. sequences,
+ which do not have one.
+*/
+class Named_Type : public Type
+{
+ public:
+ // LIFECYCLE
+ virtual ~Named_Type() {}
+
+ // INQUIRY
+ const String & Name() const { return sName; }
+
+ protected:
+ Named_Type(
+ const String & i_sName )
+ : sName(i_sName) { }
+ private:
+ // DATA
+ String sName;
+};
+
+
+
+} // namespace idl
+} // namespace ary
+
+
+#endif
+
diff --git a/autodoc/source/ary/idl/it_sequence.cxx b/autodoc/source/ary/idl/it_sequence.cxx
new file mode 100644
index 000000000000..144c64ca6c80
--- /dev/null
+++ b/autodoc/source/ary/idl/it_sequence.cxx
@@ -0,0 +1,91 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "it_sequence.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include <cosv/tpl/processor.hxx>
+#include <ary/idl/i_gate.hxx>
+#include <ary/idl/ip_type.hxx>
+
+
+
+namespace ary
+{
+namespace idl
+{
+
+
+Sequence::Sequence( Type_id i_nRelatedType )
+ : nRelatedType(i_nRelatedType)
+{
+}
+
+Sequence::~Sequence()
+{
+}
+
+ClassId
+Sequence::get_AryClass() const
+{
+ return class_id;
+}
+
+void
+Sequence::do_Accept( csv::ProcessorIfc & io_processor ) const
+{
+ csv::CheckedCall(io_processor, *this);
+}
+
+void
+Sequence::inq_Get_Text( StringVector & o_module,
+ String & o_name,
+ Ce_id & o_nRelatedCe,
+ int & o_nSequenceCount,
+ const Gate & i_rGate ) const
+{
+ ++o_nSequenceCount;
+
+ i_rGate.Types().Find_Type(nRelatedType)
+ .Get_Text( o_module,
+ o_name,
+ o_nRelatedCe,
+ o_nSequenceCount,
+ i_rGate );
+}
+
+const Type &
+Sequence::inq_FirstEnclosedNonSequenceType(const Gate & i_rGate) const
+{
+ return i_rGate.Types().Find_Type(nRelatedType).FirstEnclosedNonSequenceType(i_rGate);
+}
+
+
+} // namespace idl
+} // namespace ary
diff --git a/autodoc/source/ary/idl/it_sequence.hxx b/autodoc/source/ary/idl/it_sequence.hxx
new file mode 100644
index 000000000000..c4a29d410fd5
--- /dev/null
+++ b/autodoc/source/ary/idl/it_sequence.hxx
@@ -0,0 +1,84 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_IDL_IT_SEQUENCE_HXX
+#define ARY_IDL_IT_SEQUENCE_HXX
+
+// BASE CLASSES
+#include <ary/idl/i_type.hxx>
+
+
+
+
+namespace ary
+{
+namespace idl
+{
+
+
+/** A sequence (an array of a type).
+*/
+class Sequence : public Type
+{
+ public:
+ enum E_ClassId { class_id = 2202 };
+
+ // LIFECYCLE
+ Sequence(
+ Type_id i_nRelatedType );
+ virtual ~Sequence();
+
+ // INQUIRY
+ Type_id RelatedType() const { return nRelatedType; }
+
+ private:
+ // Interface csv::ConstProcessorClient:
+ virtual void do_Accept(
+ csv::ProcessorIfc & io_processor ) const;
+ // Interface Object:
+ virtual ClassId get_AryClass() const;
+
+ // Interface Type:
+ virtual void inq_Get_Text(
+ StringVector & o_module,
+ String & o_name,
+ Ce_id & o_nRelatedCe,
+ int & o_nSequemceCount,
+ const Gate & i_rGate ) const;
+ virtual const Type &
+ inq_FirstEnclosedNonSequenceType(
+ const Gate & i_rGate ) const;
+ // DATA
+ Type_id nRelatedType;
+};
+
+
+
+
+} // namespace idl
+} // namespace ary
+#endif
diff --git a/autodoc/source/ary/idl/it_tplparam.cxx b/autodoc/source/ary/idl/it_tplparam.cxx
new file mode 100644
index 000000000000..cde0d096c85f
--- /dev/null
+++ b/autodoc/source/ary/idl/it_tplparam.cxx
@@ -0,0 +1,92 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "it_tplparam.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include <cosv/tpl/processor.hxx>
+
+
+
+namespace ary
+{
+namespace idl
+{
+
+
+
+TemplateParamType::TemplateParamType( const char * i_sName )
+ : Named_Type(i_sName)
+{
+}
+
+TemplateParamType::~TemplateParamType()
+{
+}
+
+ClassId
+TemplateParamType::get_AryClass() const
+{
+ return class_id;
+}
+
+void
+TemplateParamType::do_Accept( csv::ProcessorIfc & io_processor ) const
+{
+ csv::CheckedCall(io_processor, *this);
+}
+
+void
+TemplateParamType::inq_Get_Text( StringVector & , // o_module
+ String & o_name,
+ Ce_id & , // o_nRelatedCe
+ int & , // o_nSequenceCount
+ const Gate & ) const // i_rGate
+{
+ o_name = Name();
+}
+
+
+//************* Implemented default function for idl::Type ********//
+
+const std::vector<Type_id> *
+Type::inq_TemplateParameters() const
+{
+ return 0;
+}
+
+const Type &
+Type::inq_FirstEnclosedNonSequenceType(const Gate & ) const
+{
+ return *this;
+}
+
+
+} // namespace idl
+} // namespace ary
diff --git a/autodoc/source/ary/idl/it_tplparam.hxx b/autodoc/source/ary/idl/it_tplparam.hxx
new file mode 100644
index 000000000000..608332d6c9de
--- /dev/null
+++ b/autodoc/source/ary/idl/it_tplparam.hxx
@@ -0,0 +1,98 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_IDL_IT_TPLPARAM_HXX
+#define ARY_IDL_IT_TPLPARAM_HXX
+
+// BASE CLASSES
+#include "it_named.hxx"
+
+
+
+
+namespace ary
+{
+namespace idl
+{
+
+
+/** @resp Represents a template type when it is used within the
+ declaring struct.
+*/
+class TemplateParamType : public Named_Type
+{
+ public:
+ enum E_ClassId { class_id = 2205 };
+
+ // LIFECYCLE
+ TemplateParamType(
+ const char * i_sName );
+ virtual ~TemplateParamType();
+
+ Ce_id StructId() const; /// The struct which declares this type.
+ void Set_StructId(
+ Ce_id i_nStruct );
+ private:
+ // Interface csv::ConstProcessorClient:
+ virtual void do_Accept(
+ csv::ProcessorIfc & io_processor ) const;
+ // Interface Object:
+ virtual ClassId get_AryClass() const;
+
+ // Interface Type:
+ virtual void inq_Get_Text(
+ StringVector & o_module,
+ String & o_name,
+ Ce_id & o_nRelatedCe,
+ int & o_nSequenceCount,
+ const Gate & i_rGate ) const;
+ // DATA
+ Ce_id nStruct; /// The struct which declares this type.
+};
+
+
+
+
+// IMPLEMENTATION
+inline Ce_id
+TemplateParamType::StructId() const
+{
+ return nStruct;
+}
+
+inline void
+TemplateParamType::Set_StructId( Ce_id i_nStruct )
+{
+ nStruct = i_nStruct;
+}
+
+
+
+
+} // namespace idl
+} // namespace ary
+#endif
diff --git a/autodoc/source/ary/idl/it_xnameroom.cxx b/autodoc/source/ary/idl/it_xnameroom.cxx
new file mode 100644
index 000000000000..a990fdb7982e
--- /dev/null
+++ b/autodoc/source/ary/idl/it_xnameroom.cxx
@@ -0,0 +1,100 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "it_xnameroom.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include <cosv/tpl/processor.hxx>
+#include <cosv/tpl/tpltools.hxx>
+#include <ary/idl/i_gate.hxx>
+#include <ary/idl/ip_type.hxx>
+
+
+
+namespace ary
+{
+namespace idl
+{
+
+
+ExplicitNameRoom::ExplicitNameRoom()
+ : aImpl()
+{
+}
+
+ExplicitNameRoom::ExplicitNameRoom( const String & i_sName,
+ const ExplicitNameRoom & i_rParent )
+ : aImpl( i_sName, i_rParent.aImpl, i_rParent.TypeId() )
+{
+}
+
+ExplicitNameRoom::~ExplicitNameRoom()
+{
+}
+
+ClassId
+ExplicitNameRoom::get_AryClass() const
+{
+ return class_id;
+}
+
+void
+ExplicitNameRoom::do_Accept( csv::ProcessorIfc & io_processor ) const
+{
+ csv::CheckedCall(io_processor, *this);
+}
+
+void
+ExplicitNameRoom::inq_Get_Text( StringVector & o_module,
+ String & , // o_name
+ Ce_id & , // o_nRelatedCe
+ int & , // o_nSequemceCount
+ const Gate & ) const // i_rGate
+{
+ StringVector::const_iterator it = NameChain_Begin();
+ if ( it != NameChain_End()
+ ? (*it).empty()
+ : false )
+ { // Don't put out the root global namespace
+ ++it;
+ }
+
+ for ( ;
+ it != NameChain_End();
+ ++it )
+ {
+ o_module.push_back(*it);
+ }
+}
+
+
+
+
+} // namespace idl
+} // namespace ary
diff --git a/autodoc/source/ary/idl/it_xnameroom.hxx b/autodoc/source/ary/idl/it_xnameroom.hxx
new file mode 100644
index 000000000000..ea9513605cb6
--- /dev/null
+++ b/autodoc/source/ary/idl/it_xnameroom.hxx
@@ -0,0 +1,123 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_IDL_IT_XNAMEROOM_HXX
+#define ARY_IDL_IT_XNAMEROOM_HXX
+
+// BASE CLASSES
+#include <ary/idl/i_type.hxx>
+#include <nametreenode.hxx>
+
+
+
+
+namespace ary
+{
+namespace idl
+{
+
+
+/** A namespace for ->Type s, as they are explicitely written in code.
+
+ The search/identification string is usually the local name of
+ the Type. But for templated structs, the search string has this
+ pattern:
+ <LocalName> '<' <StringOfTemplateTypeId>
+*/
+class ExplicitNameRoom : public Type
+{
+ public:
+ enum E_ClassId { class_id = 2204 };
+
+ // LIFECYCLE
+ ExplicitNameRoom();
+ ExplicitNameRoom(
+ const String & i_sName,
+ const ExplicitNameRoom &
+ i_rParent );
+ virtual ~ExplicitNameRoom();
+
+ // OPERATIONS
+ /** @param i_sSearchString
+ A local type name usually.
+ For templated types see class docu.
+ @see ExplicitNameRoom
+ */
+ void Add_Name(
+ const String & i_sSearchString,
+ Type_id i_nId )
+ { aImpl.Add_Name(i_sSearchString,i_nId); }
+ // INQUIRY
+ const String & Name() const { return aImpl.Name(); }
+ intt Depth() const { return aImpl.Depth(); }
+ void Get_FullName(
+ StringVector & o_rText,
+ Ce_idList * o_pRelatedCes,
+ const Gate & i_rGate ) const;
+ bool IsAbsolute() const { return Depth() > 0
+ ? (*NameChain_Begin()).empty()
+ : false; }
+ /** @param i_sSearchString
+ A local type name usually.
+ For templated types see class docu.
+ @see ExplicitNameRoom
+ */
+ Type_id Search_Name(
+ const String & i_sSearchString ) const
+ { return aImpl.Search_Name(i_sSearchString); }
+
+ StringVector::const_iterator
+ NameChain_Begin() const
+ { return aImpl.NameChain_Begin(); }
+ StringVector::const_iterator
+ NameChain_End() const
+ { return aImpl.NameChain_End(); }
+ private:
+ // Interface csv::ConstProcessorClient:
+ virtual void do_Accept(
+ csv::ProcessorIfc & io_processor ) const;
+ // Interface Object:
+ virtual ClassId get_AryClass() const;
+
+ // Interface Type:
+ virtual void inq_Get_Text(
+ StringVector & o_module,
+ String & o_name,
+ Ce_id & o_nRelatedCe,
+ int & o_nSequemceCount,
+ const Gate & i_rGate ) const;
+ // DATA
+ NameTreeNode<Type_id>
+ aImpl;
+};
+
+
+
+
+} // namespace idl
+} // namespace ary
+#endif
diff --git a/autodoc/source/ary/idl/makefile.mk b/autodoc/source/ary/idl/makefile.mk
new file mode 100644
index 000000000000..bf260e2c521e
--- /dev/null
+++ b/autodoc/source/ary/idl/makefile.mk
@@ -0,0 +1,87 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..$/..$/..
+
+PRJNAME=autodoc
+TARGET=ary_idl
+
+
+# --- Settings -----------------------------------------------------
+
+ENABLE_EXCEPTIONS=true
+PRJINC=$(PRJ)$/source
+
+.INCLUDE : settings.mk
+.INCLUDE : $(PRJ)$/source$/mkinc$/fullcpp.mk
+
+
+# --- Files --------------------------------------------------------
+
+
+OBJFILES= \
+ $(OBJ)$/i_attribute.obj \
+ $(OBJ)$/i_ce.obj \
+ $(OBJ)$/i_ce2s.obj \
+ $(OBJ)$/i_comrela.obj \
+ $(OBJ)$/i_constant.obj \
+ $(OBJ)$/i_constgroup.obj \
+ $(OBJ)$/i_enum.obj \
+ $(OBJ)$/i_enumvalue.obj \
+ $(OBJ)$/i_exception.obj \
+ $(OBJ)$/i_function.obj \
+ $(OBJ)$/i_interface.obj \
+ $(OBJ)$/i_module.obj \
+ $(OBJ)$/i_namelookup.obj \
+ $(OBJ)$/i_param.obj \
+ $(OBJ)$/i_property.obj \
+ $(OBJ)$/i_reposypart.obj \
+ $(OBJ)$/i_service.obj \
+ $(OBJ)$/i_singleton.obj \
+ $(OBJ)$/i_siservice.obj \
+ $(OBJ)$/i_sisingleton.obj \
+ $(OBJ)$/i_struct.obj \
+ $(OBJ)$/i_structelem.obj \
+ $(OBJ)$/i_traits.obj \
+ $(OBJ)$/i_typedef.obj \
+ $(OBJ)$/i2s_calculator.obj \
+ $(OBJ)$/ia_ce.obj \
+ $(OBJ)$/ia_type.obj \
+ $(OBJ)$/is_ce.obj \
+ $(OBJ)$/is_type.obj \
+ $(OBJ)$/it_builtin.obj \
+ $(OBJ)$/it_ce.obj \
+ $(OBJ)$/it_explicit.obj \
+ $(OBJ)$/it_sequence.obj \
+ $(OBJ)$/it_tplparam.obj \
+ $(OBJ)$/it_xnameroom.obj
+
+
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : target.mk
diff --git a/autodoc/source/ary/inc/cpp_internalgate.hxx b/autodoc/source/ary/inc/cpp_internalgate.hxx
new file mode 100644
index 000000000000..723e019cb4f6
--- /dev/null
+++ b/autodoc/source/ary/inc/cpp_internalgate.hxx
@@ -0,0 +1,66 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_CPP_INTERNALGATE_HXX
+#define ARY_CPP_INTERNALGATE_HXX
+
+// BASE CLASSES
+#include <ary/cpp/c_gate.hxx>
+
+namespace ary
+{
+ class RepositoryCenter;
+}
+
+
+
+
+namespace ary
+{
+namespace cpp
+{
+
+
+/** Provides access to the ->cpp::RepositoryPartition as far as is needed
+ by the ->RepositoryCenter.
+*/
+class InternalGate : public ::ary::cpp::Gate
+{
+ public:
+ virtual ~InternalGate() {}
+
+ static DYN InternalGate &
+ Create_Partition_(
+ RepositoryCenter & i_center );
+};
+
+
+
+
+} // namespace cpp
+} // namespace ary
+#endif
diff --git a/autodoc/source/ary/inc/cross_refs.hxx b/autodoc/source/ary/inc/cross_refs.hxx
new file mode 100644
index 000000000000..8f6b98aabc05
--- /dev/null
+++ b/autodoc/source/ary/inc/cross_refs.hxx
@@ -0,0 +1,99 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_CROSS_REFS_HXX
+#define ARY_CROSS_REFS_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+ // COMPONENTS
+ // PARAMETERS
+#include "sorted_idset.hxx"
+
+
+template <class VALUE_LIST, class TYPES>
+class CrossReferences
+{
+ public:
+ typedef TYPES::element_type element;
+
+ /// Checks for double occurences
+ void Add(
+ VALUE_LIST::index_type
+ i_nPosition
+ const element & i_rElem );
+ void Get_List(
+ Dyn_StdConstIterator<element> &
+ o_rResult ) const;
+ private:
+ SortedIdSet<TYPES> aData[VALUE_LIST::max];
+};
+
+
+
+namespace ary
+{
+
+template <class TYPES>
+class SortedIdSet
+{
+ public:
+ typedef typename TYPES::element_type element;
+ typedef typename TYPES::sort_type sorter;
+ typedef typename TYPES::find_type finder;
+
+ SortedIdSet(
+ const finder & i_rFinder )
+ : aSorter(i_rFinder),
+ aData(aSorter) {}
+ ~SortedIdSet() {}
+
+ void Get_Begin(
+ Dyn_StdConstIterator<element> &
+ o_rResult )
+ { o_rResult = new SCI_Set<FINDER>(aData); }
+ void Add(
+ const element & i_rElement )
+ { aData.insert(i_rElement); }
+
+ private:
+ typedef std::set<element, sorter> Set;
+
+ // DATA
+ sorter aSorter;
+ Set aData;
+};
+
+
+} // namespace ary
+
+
+
+#endif
+
diff --git a/autodoc/source/ary/inc/idl_internalgate.hxx b/autodoc/source/ary/inc/idl_internalgate.hxx
new file mode 100644
index 000000000000..783971f7295f
--- /dev/null
+++ b/autodoc/source/ary/inc/idl_internalgate.hxx
@@ -0,0 +1,66 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_IDL_INTERNALGATE_HXX
+#define ARY_IDL_INTERNALGATE_HXX
+
+// BASE CLASSES
+#include <ary/idl/i_gate.hxx>
+
+namespace ary
+{
+ class RepositoryCenter;
+}
+
+
+
+
+namespace ary
+{
+namespace idl
+{
+
+
+/** Provides access to the ->idl::RepositoryPartition as far as is needed
+ by the ->RepositoryCenter.
+*/
+class InternalGate : public ::ary::idl::Gate
+{
+ public:
+ virtual ~InternalGate() {}
+
+ static DYN InternalGate &
+ Create_Partition_(
+ RepositoryCenter & i_center );
+};
+
+
+
+
+} // namespace idl
+} // namespace ary
+#endif
diff --git a/autodoc/source/ary/inc/idsort.hxx b/autodoc/source/ary/inc/idsort.hxx
new file mode 100644
index 000000000000..d0bbaa37e7a2
--- /dev/null
+++ b/autodoc/source/ary/inc/idsort.hxx
@@ -0,0 +1,52 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_IDSORT_HXX
+#define ARY_IDSORT_HXX
+
+
+/** A compare function that sorts ids of repository entities in the same
+ storage.
+
+ @see ::ary::SortedIds
+*/
+template<class COMPARE>
+struct IdSorter
+{
+ bool operator()(
+ typename COMPARE::id_type
+ i_1,
+ typename COMPARE::id_type
+ i_2 ) const
+ { return COMPARE::Lesser_(
+ COMPARE::KeyOf_(COMPARE::EntityOf_(i_1)),
+ COMPARE::KeyOf_(COMPARE::EntityOf_(i_2)) );
+ }
+};
+
+
+#endif
diff --git a/autodoc/source/ary/inc/loc_internalgate.hxx b/autodoc/source/ary/inc/loc_internalgate.hxx
new file mode 100644
index 000000000000..13409e6364de
--- /dev/null
+++ b/autodoc/source/ary/inc/loc_internalgate.hxx
@@ -0,0 +1,63 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_LOC_INTERNALGATE_HXX
+#define ARY_LOC_INTERNALGATE_HXX
+
+// USED SERVICES
+
+namespace ary
+{
+namespace loc
+{
+ class LocationPilot;
+}
+}
+
+
+
+
+namespace ary
+{
+namespace loc
+{
+
+
+/** Additional access to locations for the repository implementation.
+*/
+class InternalGate
+{
+ public:
+
+ static DYN LocationPilot &
+ Create_Locations_();
+};
+
+
+} // namespace loc
+} // namespace ary
+#endif
diff --git a/autodoc/source/ary/inc/nametreenode.hxx b/autodoc/source/ary/inc/nametreenode.hxx
new file mode 100644
index 000000000000..c7d77faaab34
--- /dev/null
+++ b/autodoc/source/ary/inc/nametreenode.hxx
@@ -0,0 +1,210 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_NAMETREENODE_HXX
+#define ARY_NAMETREENODE_HXX
+// KORR_DEPRECATED_3.0
+// Replace by ::ary::symtree::Node.
+
+// USED SERVICES
+#include <cosv/tpl/tpltools.hxx>
+#include <sci_impl.hxx>
+// HACK because of SunPro 5.2 compiler bug with templates:
+#include <ary/idl/i_module.hxx>
+
+
+
+
+namespace ary
+{
+
+
+/** Implementation of a node in a namespace-tree.
+*/
+template<class ITEM_ID>
+class NameTreeNode
+{
+ public:
+ typedef NameTreeNode self;
+ typedef ITEM_ID item_id;
+ typedef StringVector::const_iterator name_iterator;
+ typedef std::map<String, item_id> Map_LocalNames;
+
+ // LIFECYCLE
+ NameTreeNode();
+ NameTreeNode(
+ const String & i_sName,
+ const self & i_rParent,
+ ITEM_ID i_nParentId );
+ virtual ~NameTreeNode();
+
+ // OPERATIONS
+ void Add_Name(
+ const String & i_sName,
+ item_id i_nId );
+ // INQUIRY
+ const String & Name() const { return Depth() > 0 ? aCompleteNameChain.back() : String::Null_(); }
+ item_id Parent() const { return nParent; }
+ intt Depth() const { return aCompleteNameChain.size(); }
+
+ bool IsEquivalent(
+ const NameTreeNode &
+ i_rNode ) const;
+ name_iterator NameChain_Begin() const { return aCompleteNameChain.begin(); }
+ name_iterator NameChain_End() const { return aCompleteNameChain.end(); }
+
+ item_id Search_Name(
+ const String & i_sName ) const;
+ void Get_Names(
+ Dyn_StdConstIterator<ITEM_ID> &
+ o_rResult ) const;
+ const Map_LocalNames &
+ LocalNames() const { return aLocalNames; }
+ private:
+ // Locals
+ Map_LocalNames & LocalNames() { return aLocalNames; }
+
+ // DATA
+ Map_LocalNames aLocalNames;
+ StringVector aCompleteNameChain;
+ item_id nParent;
+};
+
+
+
+
+// IMPLEMENTATION
+template<class ITEM_ID>
+NameTreeNode<ITEM_ID>::NameTreeNode()
+ : aLocalNames(),
+ aCompleteNameChain(),
+ nParent(0)
+{
+}
+
+template<class ITEM_ID>
+NameTreeNode<ITEM_ID>::NameTreeNode( const String & i_sName,
+ const self & i_rParent,
+ ITEM_ID i_nParentId )
+ : aLocalNames(),
+ aCompleteNameChain(),
+ nParent(i_nParentId)
+{
+ aCompleteNameChain.reserve(i_rParent.Depth()+1);
+ for ( name_iterator it = i_rParent.NameChain_Begin();
+ it != i_rParent.NameChain_End();
+ ++it )
+ {
+ aCompleteNameChain.push_back(*it);
+ }
+ aCompleteNameChain.push_back(i_sName);
+}
+
+template<class ITEM_ID>
+NameTreeNode<ITEM_ID>::~NameTreeNode()
+{
+}
+
+
+template<class ITEM_ID>
+inline void
+NameTreeNode<ITEM_ID>::Add_Name( const String & i_sName,
+ item_id i_nId )
+{
+ LocalNames().insert( typename Map_LocalNames::value_type(i_sName, i_nId) );
+}
+
+
+template<class ITEM_ID>
+inline bool
+NameTreeNode<ITEM_ID>::IsEquivalent( const NameTreeNode & i_rNode ) const
+{
+ return aCompleteNameChain == i_rNode.aCompleteNameChain;
+}
+
+template<class ITEM_ID>
+inline ITEM_ID
+NameTreeNode<ITEM_ID>::Search_Name( const String & i_sName ) const
+{
+ return csv::value_from_map(LocalNames(),i_sName, ITEM_ID(0));
+}
+
+template<class ITEM_ID>
+inline void
+NameTreeNode<ITEM_ID>::Get_Names( Dyn_StdConstIterator<ITEM_ID> & o_rResult ) const
+{
+ o_rResult = new SCI_DataInMap<String,item_id>(LocalNames());
+}
+
+
+// HACK because of SunPro 5.2 compiler bug with templates:
+// ary::idl::Module has to be "FIND_NODE::node_type"
+// must be solved later somehow.
+template <class FIND_NODE>
+typename FIND_NODE::id_type
+Search_SubTree( const ary::idl::Module & i_rStart,
+ const FIND_NODE & i_rNodeFinder )
+{
+ const ary::idl::Module *
+ ret = &i_rStart;
+
+ for ( StringVector::const_iterator it = i_rNodeFinder.Begin();
+ it != i_rNodeFinder.End() AND ret != 0;
+ ++it )
+ {
+ ret = i_rNodeFinder(ret->Search_Name(*it));
+ }
+
+ typename FIND_NODE::id_type nret(0);
+ return ret != 0
+ ? ret->Search_Name(i_rNodeFinder.Name2Search())
+ : nret;
+}
+
+template <class FIND_NODE>
+typename FIND_NODE::id_type
+Search_SubTree_UpTillRoot( const ary::idl::Module & i_rStart,
+ const FIND_NODE & i_rNodeFinder )
+{
+ typename FIND_NODE::id_type
+ ret(0);
+ for ( const ary::idl::Module * start = &i_rStart;
+ start != 0 AND NOT ret.IsValid();
+ start = i_rNodeFinder(start->Owner()) )
+ {
+ ret = Search_SubTree( *start,
+ i_rNodeFinder );
+ }
+ return ret;
+}
+// END Hack for SunPro 5.2 compiler bug.
+
+
+
+
+} // namespace ary
+#endif
diff --git a/autodoc/source/ary/inc/reposy.hxx b/autodoc/source/ary/inc/reposy.hxx
new file mode 100644
index 000000000000..6bdfd907ce04
--- /dev/null
+++ b/autodoc/source/ary/inc/reposy.hxx
@@ -0,0 +1,91 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_REPOSY_HXX
+#define ARY_REPOSY_HXX
+
+// BASE CLASSES
+#include <ary/ary.hxx>
+// USED SERVICES
+#include <cosv/ploc_dir.hxx>
+
+namespace ary
+{
+namespace cpp
+{
+ class InternalGate;
+}
+namespace idl
+{
+ class InternalGate;
+}
+} // namespace ary
+
+
+
+
+namespace ary
+{
+
+
+/** Implements ::ary::Repository.
+
+ @see Repository
+*/
+
+class RepositoryCenter : public ::ary::Repository
+{
+ public:
+ // LIFECYCLE
+ RepositoryCenter();
+ virtual ~RepositoryCenter();
+
+ // INHERITED
+ // Interface Repository:
+ virtual const cpp::Gate & Gate_Cpp() const;
+ virtual const idl::Gate & Gate_Idl() const;
+ virtual const String & Title() const;
+ virtual cpp::Gate & Gate_Cpp();
+ virtual idl::Gate & Gate_Idl();
+ virtual void Set_Title(const String & i_sName );
+
+ private:
+ // DATA
+ String sDisplayedName; /// Name to be displayed for human users.
+ csv::ploc::Directory
+ aLocation;
+ Dyn<cpp::InternalGate>
+ pCppPartition;
+ Dyn<idl::InternalGate>
+ pIdlPartition;
+};
+
+
+
+
+} // namespace ary
+#endif
diff --git a/autodoc/source/ary/inc/sci_impl.hxx b/autodoc/source/ary/inc/sci_impl.hxx
new file mode 100644
index 000000000000..26c5236904b9
--- /dev/null
+++ b/autodoc/source/ary/inc/sci_impl.hxx
@@ -0,0 +1,413 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_SCI_IMPL_HXX
+#define ARY_SCI_IMPL_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <ary/stdconstiter.hxx>
+ // COMPONENTS
+ // PARAMETERS
+
+
+namespace ary
+{
+
+
+//************************* SCI_Vector **********************************//
+
+template <class ELEM>
+class SCI_Vector : public StdConstIterator<ELEM>
+{
+ public:
+ typedef std::vector<ELEM> source;
+ typedef typename source::const_iterator source_iterator;
+
+ SCI_Vector(
+ const source & i_rSource );
+ virtual ~SCI_Vector();
+
+ private:
+ // Interface StdConstIterator<>:
+ virtual void do_Advance();
+ virtual const ELEM *
+ inq_CurElement() const;
+ virtual bool inq_IsSorted() const;
+
+ // DATA
+ source_iterator itRun;
+ source_iterator itEnd;
+};
+
+
+
+//************************* SCI_Map **********************************//
+
+template <class KEY, class VALUE>
+class SCI_Map : public StdConstIterator< typename std::map<KEY,VALUE>::value_type >
+{
+ public:
+ typedef std::map<KEY,VALUE> source;
+ typedef typename source::const_iterator source_iterator;
+
+ SCI_Map(
+ const source & i_rSource );
+ virtual ~SCI_Map();
+
+ private:
+ // Interface StdConstIterator<>:
+ virtual void do_Advance();
+ virtual const typename std::map<KEY,VALUE>::value_type *
+ inq_CurElement() const;
+ virtual bool inq_IsSorted() const;
+
+ // DATA
+ source_iterator itRun;
+ source_iterator itEnd;
+};
+
+
+//************************* SCI_MultiMap **********************************//
+
+template <class KEY, class VALUE>
+class SCI_MultiMap : public StdConstIterator< typename std::multimap<KEY,VALUE>::value_type >
+{
+ public:
+ typedef std::multimap<KEY,VALUE> source;
+ typedef typename source::const_iterator source_iterator;
+
+ SCI_MultiMap(
+ const source & i_rSource );
+ SCI_MultiMap(
+ source_iterator i_begin,
+ source_iterator i_end );
+ virtual ~SCI_MultiMap();
+
+ private:
+ // Interface StdConstIterator<>:
+ virtual void do_Advance();
+ virtual const typename std::multimap<KEY,VALUE>::value_type *
+ inq_CurElement() const;
+ virtual bool inq_IsSorted() const;
+
+ // DATA
+ source_iterator itRun;
+ source_iterator itEnd;
+};
+
+
+
+//************************* SCI_Set **********************************//
+
+
+template <class TYPES>
+class SCI_Set : public StdConstIterator<typename TYPES::element_type>
+{
+ public:
+ typedef typename TYPES::element_type element;
+ typedef typename TYPES::sort_type sorter;
+ typedef std::set<element, sorter> source;
+ typedef typename source::const_iterator source_iterator;
+
+ SCI_Set(
+ const source & i_rSource );
+ virtual ~SCI_Set();
+
+ private:
+ // Interface StdConstIterator<>:
+ virtual void do_Advance();
+ virtual const element *
+ inq_CurElement() const;
+ virtual bool inq_IsSorted() const;
+
+ // DATA
+ source_iterator itRun;
+ source_iterator itEnd;
+};
+
+//************************* SCI_DataInMap **********************************//
+
+template <class KEY, class VALUE>
+class SCI_DataInMap : public StdConstIterator<VALUE>
+{
+ public:
+ typedef std::map<KEY,VALUE> source;
+ typedef typename source::const_iterator source_iterator;
+
+ SCI_DataInMap(
+ const source & i_rSource );
+ virtual ~SCI_DataInMap();
+
+ private:
+ // Interface StdConstIterator<>:
+ virtual void do_Advance();
+ virtual const VALUE *
+ inq_CurElement() const;
+ virtual bool inq_IsSorted() const;
+
+ // DATA
+ source_iterator itRun;
+ source_iterator itEnd;
+};
+
+
+
+
+
+//********************************************************************//
+
+
+// IMPLEMENTATION
+
+template <class ELEM>
+SCI_Vector<ELEM>::SCI_Vector( const source & i_rSource )
+ : itRun(i_rSource.begin()),
+ itEnd(i_rSource.end())
+{
+}
+
+template <class ELEM>
+SCI_Vector<ELEM>::~SCI_Vector()
+{
+}
+
+
+template <class ELEM>
+void
+SCI_Vector<ELEM>::do_Advance()
+{
+ if (itRun != itEnd)
+ ++itRun;
+}
+
+template <class ELEM>
+const ELEM *
+SCI_Vector<ELEM>::inq_CurElement() const
+{
+ if (itRun != itEnd)
+ return &(*itRun);
+ return 0;
+}
+
+template <class ELEM>
+bool
+SCI_Vector<ELEM>::inq_IsSorted() const
+{
+ return false;
+}
+
+
+
+
+template <class KEY, class VALUE>
+SCI_Map<KEY,VALUE>::SCI_Map( const source & i_rSource )
+ : itRun(i_rSource.begin()),
+ itEnd(i_rSource.end())
+{
+}
+
+template <class KEY, class VALUE>
+SCI_Map<KEY,VALUE>::~SCI_Map()
+{
+}
+
+template <class KEY, class VALUE>
+void
+SCI_Map<KEY,VALUE>::do_Advance()
+{
+ if (itRun != itEnd)
+ ++itRun;
+}
+
+template <class KEY, class VALUE>
+const typename std::map<KEY,VALUE>::value_type *
+SCI_Map<KEY,VALUE>::inq_CurElement() const
+{
+ if (itRun != itEnd)
+ return &(*itRun);
+ return 0;
+}
+
+
+template <class KEY, class VALUE>
+bool
+SCI_Map<KEY,VALUE>::inq_IsSorted() const
+{
+ return true;
+}
+
+
+
+
+
+
+
+template <class KEY, class VALUE>
+SCI_MultiMap<KEY,VALUE>::SCI_MultiMap( const source & i_rSource )
+ : itRun(i_rSource.begin()),
+ itEnd(i_rSource.end())
+{
+}
+
+template <class KEY, class VALUE>
+SCI_MultiMap<KEY,VALUE>::SCI_MultiMap( source_iterator i_begin,
+ source_iterator i_end )
+ : itRun(i_begin),
+ itEnd(i_end)
+{
+}
+
+template <class KEY, class VALUE>
+SCI_MultiMap<KEY,VALUE>::~SCI_MultiMap()
+{
+}
+
+template <class KEY, class VALUE>
+void
+SCI_MultiMap<KEY,VALUE>::do_Advance()
+{
+ if (itRun != itEnd)
+ ++itRun;
+}
+
+template <class KEY, class VALUE>
+const typename std::multimap<KEY,VALUE>::value_type *
+SCI_MultiMap<KEY,VALUE>::inq_CurElement() const
+{
+ if (itRun != itEnd)
+ return &(*itRun);
+ return 0;
+}
+
+
+template <class KEY, class VALUE>
+bool
+SCI_MultiMap<KEY,VALUE>::inq_IsSorted() const
+{
+ return true;
+}
+
+
+
+
+
+
+
+
+template <class ELEM>
+SCI_Set<ELEM>::SCI_Set( const source & i_rSource )
+ : itRun(i_rSource.begin()),
+ itEnd(i_rSource.end())
+{
+}
+
+template <class ELEM>
+SCI_Set<ELEM>::~SCI_Set()
+{
+}
+
+
+template <class ELEM>
+void
+SCI_Set<ELEM>::do_Advance()
+{
+ if (itRun != itEnd)
+ ++itRun;
+}
+
+template <class ELEM>
+const typename SCI_Set<ELEM>::element *
+SCI_Set<ELEM>::inq_CurElement() const
+{
+ if (itRun != itEnd)
+ return &(*itRun);
+ return 0;
+}
+
+template <class ELEM>
+bool
+SCI_Set<ELEM>::inq_IsSorted() const
+{
+ return true;
+}
+
+
+
+
+
+
+
+template <class KEY, class VALUE>
+SCI_DataInMap<KEY,VALUE>::SCI_DataInMap( const source & i_rSource )
+ : itRun(i_rSource.begin()),
+ itEnd(i_rSource.end())
+{
+}
+
+template <class KEY, class VALUE>
+SCI_DataInMap<KEY,VALUE>::~SCI_DataInMap()
+{
+}
+
+template <class KEY, class VALUE>
+void
+SCI_DataInMap<KEY,VALUE>::do_Advance()
+{
+ if (itRun != itEnd)
+ ++itRun;
+}
+
+template <class KEY, class VALUE>
+const VALUE *
+SCI_DataInMap<KEY,VALUE>::inq_CurElement() const
+{
+ if (itRun != itEnd)
+ return &(*itRun).second;
+ return 0;
+}
+
+
+template <class KEY, class VALUE>
+bool
+SCI_DataInMap<KEY,VALUE>::inq_IsSorted() const
+{
+ return true;
+}
+
+
+
+
+
+
+
+} // namespace ary
+
+
+#endif
diff --git a/autodoc/source/ary/inc/slots.hxx b/autodoc/source/ary/inc/slots.hxx
new file mode 100644
index 000000000000..f5c449f7a30a
--- /dev/null
+++ b/autodoc/source/ary/inc/slots.hxx
@@ -0,0 +1,163 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_SLOTS_HXX
+#define ARY_SLOTS_HXX
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <ary/ceslot.hxx>
+ // COMPONENTS
+ // PARAMETERS
+#include <ary/ary_disp.hxx>
+#include <ary/types.hxx>
+#include <ary/sequentialids.hxx>
+#include <ary/cpp/c_types4cpp.hxx>
+#include <ary/cpp/c_slntry.hxx>
+
+
+
+namespace ary
+{
+
+
+class Slot_Null : public Slot
+{
+ public:
+ virtual ~Slot_Null();
+
+ virtual void StoreAt(
+ Display & o_rDestination ) const;
+ virtual uintt Size() const;
+
+ private:
+ virtual void StoreEntries(
+ Display & o_rDestination ) const;
+};
+
+class Slot_MapLocalCe : public Slot
+{
+ public:
+ Slot_MapLocalCe(
+ const cpp::Map_LocalCe & i_rData );
+ virtual ~Slot_MapLocalCe();
+ virtual uintt Size() const;
+
+ private:
+ virtual void StoreEntries(
+ Display & o_rDestination ) const;
+ // DATA
+ const cpp::Map_LocalCe *
+ pData;
+};
+
+class Slot_MapOperations : public Slot
+{
+ public:
+ Slot_MapOperations(
+ const std::multimap<String, cpp::Ce_id> &
+ i_rData );
+ virtual ~Slot_MapOperations();
+ virtual uintt Size() const;
+
+ private:
+ virtual void StoreEntries(
+ Display & o_rDestination ) const;
+ // DATA
+ const std::multimap<String, cpp::Ce_id> *
+ pData;
+};
+
+class Slot_ListLocalCe : public Slot
+{
+ public:
+ Slot_ListLocalCe(
+ const cpp::List_LocalCe &
+ i_rData );
+ virtual ~Slot_ListLocalCe();
+
+ virtual uintt Size() const;
+
+ private:
+ virtual void StoreEntries(
+ Display & o_rDestination ) const;
+ // DATA
+ const cpp::List_LocalCe *
+ pData;
+};
+
+template <class ID>
+class Slot_SequentialIds : public Slot
+{
+ public:
+ Slot_SequentialIds(
+ const SequentialIds<ID> &
+ i_rData )
+ : pData(&i_rData) {}
+ virtual ~Slot_SequentialIds();
+
+ virtual uintt Size() const;
+
+ private:
+ virtual void StoreEntries(
+ Display & o_rDestination ) const;
+ // DATA
+ const SequentialIds<ID> *
+ pData;
+};
+
+
+template <class ID>
+Slot_SequentialIds<ID>::~Slot_SequentialIds()
+{
+}
+
+template <class ID>
+uintt
+Slot_SequentialIds<ID>::Size() const
+{
+ return pData->Size();
+}
+
+template <class ID>
+void
+Slot_SequentialIds<ID>::StoreEntries( Display & o_rDestination ) const
+{
+ for ( typename SequentialIds<ID>::const_iterator it = pData->Begin();
+ it != pData->End();
+ ++it )
+ {
+ o_rDestination.DisplaySlot_Rid( (*it).Value() );
+ }
+}
+
+
+
+
+} // namespace ary
+#endif
diff --git a/autodoc/source/ary/inc/sorted_idset.hxx b/autodoc/source/ary/inc/sorted_idset.hxx
new file mode 100644
index 000000000000..93c00a1091ca
--- /dev/null
+++ b/autodoc/source/ary/inc/sorted_idset.hxx
@@ -0,0 +1,97 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_SORTED_IDSET_HXX
+#define ARY_SORTED_IDSET_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+ // COMPONENTS
+#include <set>
+ // PARAMETERS
+#include "csi_impl.hxx"
+
+
+template <class XY> class SortedIdSet;
+
+class Interface_2s
+{
+ public:
+ /// Checks for double occurences
+ void Add_ExportingService(
+ Ce_id i_nId );
+ void Get_ExportingServices(
+ Dyn_StdConstIterator<Ce_id> &
+ o_rResult ) const;
+ private:
+ Dyn<SortedIdSet> pExportingServices;
+};
+
+
+
+namespace ary
+{
+
+template <class TYPES>
+class SortedIdSet
+{
+ public:
+ typedef typename TYPES::element_type element;
+ typedef typename TYPES::sort_type sorter;
+ typedef typename TYPES::find_type finder;
+
+ SortedIdSet(
+ const finder & i_rFinder )
+ : aSorter(i_rFinder),
+ aData(aSorter) {}
+ ~SortedIdSet() {}
+
+ void Get_Begin(
+ Dyn_StdConstIterator<element> &
+ o_rResult )
+ { o_rResult = new SCI_Set<FINDER>(aData); }
+ void Add(
+ const element & i_rElement )
+ { aData.insert(i_rElement); }
+
+ private:
+ typedef std::set<element, sorter> Set;
+
+ // DATA
+ sorter aSorter;
+ Set aData;
+};
+
+
+} // namespace ary
+
+
+
+#endif
+
diff --git a/autodoc/source/ary/inc/sortedids.hxx b/autodoc/source/ary/inc/sortedids.hxx
new file mode 100644
index 000000000000..9bebaa9b19a5
--- /dev/null
+++ b/autodoc/source/ary/inc/sortedids.hxx
@@ -0,0 +1,237 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_SORTEDIDS_HXX
+#define ARY_SORTEDIDS_HXX
+
+
+// USED SERVICES
+#include <algorithm>
+#include <cosv/tpl/range.hxx>
+
+
+
+
+namespace ary
+{
+
+
+/** Implementation of a set of children to an entity in the Autodoc
+ repository. The children are sorted.
+
+ @tpl COMPARE
+ Needs to provide types:
+ entity_base_type
+ id_type
+ key_type
+
+ and functions:
+ static entity_base_type &
+ EntityOf_(
+ id_type i_id );
+ static const key_type &
+ KeyOf_(
+ const entity_type & i_entity );
+ static bool Lesser_(
+ const key_type & i_1,
+ const key_type & i_2 );
+*/
+template<class COMPARE>
+class SortedIds
+{
+ public:
+ typedef typename COMPARE::id_type element_t;
+ typedef typename COMPARE::key_type key_t;
+ typedef std::vector<element_t> data_t;
+ typedef typename data_t::const_iterator const_iterator;
+ typedef typename data_t::iterator iterator;
+ typedef csv::range<const_iterator> search_result_t;
+
+ // LIFECYCLE
+ explicit SortedIds(
+ std::size_t i_reserve = 0 );
+ ~SortedIds();
+
+ // OPERATIONS
+ void Add(
+ element_t i_elem );
+ // INQUIRY
+ const_iterator Begin() const;
+ const_iterator End() const;
+
+ element_t Search(
+ const key_t & i_key ) const;
+ search_result_t SearchAll(
+ const key_t & i_key ) const;
+ const_iterator LowerBound(
+ const key_t & i_key ) const;
+
+ private:
+ typedef typename COMPARE::entity_base_type entity_t;
+
+ // Locals
+ iterator LowerBound(
+ const key_t & i_key );
+
+ static const key_t &
+ KeyOf_(
+ element_t i_child );
+ template <class ITER>
+ static ITER impl_LowerBound_(
+ ITER i_begin,
+ ITER i_end,
+ const key_t & i_key );
+
+ // DATA
+ data_t aData;
+};
+
+
+
+
+// IMPLEMENTATION
+template<class COMPARE>
+inline const typename SortedIds<COMPARE>::key_t &
+SortedIds<COMPARE>::KeyOf_(element_t i_child)
+{
+ return COMPARE::KeyOf_(COMPARE::EntityOf_(i_child));
+}
+
+template<class COMPARE>
+SortedIds<COMPARE>::SortedIds(std::size_t i_reserve)
+ : aData()
+{
+ if (i_reserve > 0)
+ aData.reserve(i_reserve);
+}
+
+template<class COMPARE>
+SortedIds<COMPARE>::~SortedIds()
+{
+}
+
+template<class COMPARE>
+void
+SortedIds<COMPARE>::Add(element_t i_elem)
+{
+ aData.insert( LowerBound( KeyOf_(i_elem) ),
+ i_elem );
+}
+
+template<class COMPARE>
+inline typename SortedIds<COMPARE>::const_iterator
+SortedIds<COMPARE>::Begin() const
+{
+ return aData.begin();
+}
+
+template<class COMPARE>
+inline typename SortedIds<COMPARE>::const_iterator
+SortedIds<COMPARE>::End() const
+{
+ return aData.end();
+}
+
+template<class COMPARE>
+typename SortedIds<COMPARE>::element_t
+SortedIds<COMPARE>::Search(const key_t & i_key) const
+{
+ const_iterator
+ ret = LowerBound(i_key);
+ return ret != aData.end() AND NOT COMPARE::Lesser_(i_key, KeyOf_(*ret))
+ ? *ret
+ : element_t(0);
+}
+
+template<class COMPARE>
+typename SortedIds<COMPARE>::search_result_t
+SortedIds<COMPARE>::SearchAll(const key_t & i_key) const
+{
+ const_iterator
+ r1 = LowerBound(i_key);
+ const_iterator
+ r2 = r1;
+ while ( r2 != aData.end()
+ AND NOT COMPARE::Lesser_(i_key, KeyOf_(*r2)) )
+ {
+ ++r2;
+ }
+
+ return csv::make_range(r1,r2);
+}
+
+template<class COMPARE>
+inline typename SortedIds<COMPARE>::const_iterator
+SortedIds<COMPARE>::LowerBound(const key_t & i_key) const
+{
+ return impl_LowerBound_( aData.begin(),
+ aData.end(),
+ i_key );
+}
+
+template<class COMPARE>
+inline typename SortedIds<COMPARE>::iterator
+SortedIds<COMPARE>::LowerBound(const key_t & i_key)
+{
+ return impl_LowerBound_( aData.begin(),
+ aData.end(),
+ i_key );
+}
+
+template<class COMPARE>
+template <class ITER>
+ITER
+SortedIds<COMPARE>::impl_LowerBound_( ITER i_begin,
+ ITER i_end,
+ const key_t & i_key )
+{
+ ITER i1 = i_begin;
+ ITER i2 = i_end;
+
+ for ( ITER it = i1 + (i2-i1)/2;
+ i1 != i2;
+ it = i1 + (i2-i1)/2 )
+ {
+ if ( COMPARE::Lesser_(KeyOf_(*it), i_key) )
+ {
+ i1 = it;
+ ++i1;
+ }
+ else
+ {
+ i2 = it;
+ }
+ } // end for
+
+ return i1;
+}
+
+
+
+
+} // namespace ary
+#endif
diff --git a/autodoc/source/ary/inc/store/s_base.hxx b/autodoc/source/ary/inc/store/s_base.hxx
new file mode 100644
index 000000000000..e14fc2652293
--- /dev/null
+++ b/autodoc/source/ary/inc/store/s_base.hxx
@@ -0,0 +1,180 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_STORE_S_BASE_HXX
+#define ARY_STORE_S_BASE_HXX
+
+// USED SERVICES
+#include <deque>
+#include <cosv/tpl/tpltools.hxx>
+
+
+
+
+namespace ary
+{
+namespace stg
+{
+
+
+/** The basic storage container of the repository.
+
+ @collab Storage
+ Implements Storage. Not used elsewhere.
+
+ @tpl ENTITY
+ The type of *it, where it is of type c_iter, has to be ENTITY * const.
+*/
+template <class ENTITY>
+class Base
+{
+ public:
+ // LIFECYCLE
+ typedef std::deque< ENTITY* > impl_type;
+ typedef typename impl_type::const_iterator c_iter;
+
+
+ /** @param i_nrOfReservedItems
+ The number of actual items to reserve, including the item
+ at index [0] that is always empty and unused.
+ */
+ Base(
+ uintt i_nrOfReservedItems );
+ ~Base();
+
+ // OPERATORS
+ ENTITY * operator[](
+ uintt i_index ) const;
+ // OPERATIONS
+ uintt Add_Entity( /// @return the index of the new element.
+ DYN ENTITY & pass_newEntity );
+ DYN ENTITY * Set_Entity( /// @return the previous value.
+ uintt i_index,
+ DYN ENTITY & pass_newEntity );
+ // INQUIRY
+ uintt Size() const; /// Incl. reserved size.
+ uintt ReservedSize() const; /// Incl. zero for element at [0].
+
+ c_iter Begin() const; /// @return location of index 1, because 0 is always empty.
+ c_iter BeginUnreserved() const;
+ c_iter End() const;
+
+ private:
+ // DATA
+ impl_type aData;
+ uintt nReservedSize;
+};
+
+
+
+// IMPLEMENTATION
+
+template <class ENTITY>
+Base<ENTITY>::Base(uintt i_nrOfReservedItems)
+ : aData(i_nrOfReservedItems, 0),
+ nReservedSize(i_nrOfReservedItems)
+{
+}
+
+template <class ENTITY>
+Base<ENTITY>::~Base()
+{
+ csv::erase_container_of_heap_ptrs(aData);
+}
+
+
+template <class ENTITY>
+ENTITY *
+Base<ENTITY>::operator[](uintt i_index) const
+{
+ if (i_index < aData.size())
+ return aData[i_index];
+ return 0;
+}
+
+template <class ENTITY>
+uintt
+Base<ENTITY>::Add_Entity(DYN ENTITY & pass_newEntity)
+{
+ aData.push_back(&pass_newEntity);
+ return aData.size() - 1;
+}
+
+template <class ENTITY>
+DYN ENTITY *
+Base<ENTITY>::Set_Entity( uintt i_index,
+ DYN ENTITY & pass_newEntity )
+{
+ csv_assert(i_index != 0 AND i_index < aData.size());
+
+ Dyn<ENTITY>
+ ret(aData[i_index]);
+ aData[i_index] = &pass_newEntity;
+ return ret.Release();
+}
+
+template <class ENTITY>
+uintt
+Base<ENTITY>::Size() const
+{
+ return aData.size();
+}
+
+template <class ENTITY>
+uintt
+Base<ENTITY>::ReservedSize() const
+{
+ return nReservedSize;
+}
+
+template <class ENTITY>
+typename Base<ENTITY>::c_iter
+Base<ENTITY>::Begin() const
+{
+ return aData.begin() + 1;
+}
+
+template <class ENTITY>
+typename Base<ENTITY>::c_iter
+Base<ENTITY>::BeginUnreserved() const
+{
+ return aData.begin() + nReservedSize;
+}
+
+template <class ENTITY>
+typename Base<ENTITY>::c_iter
+Base<ENTITY>::End() const
+{
+ return aData.end();
+}
+
+
+
+
+} // namespace stg
+} // namespace ary
+#endif
diff --git a/autodoc/source/ary/inc/store/s_iterator.hxx b/autodoc/source/ary/inc/store/s_iterator.hxx
new file mode 100644
index 000000000000..af5c991ba9a9
--- /dev/null
+++ b/autodoc/source/ary/inc/store/s_iterator.hxx
@@ -0,0 +1,237 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_STORE_S_ITERATOR_HXX
+#define ARY_STORE_S_ITERATOR_HXX
+
+// USED SERVICES
+#include <ary/getncast.hxx>
+#include "s_base.hxx"
+
+
+
+
+namespace ary
+{
+namespace stg
+{
+
+
+template <class> class const_iterator;
+template <class, class> class const_filter_iterator;
+
+
+/** A non-const iterator that runs on a ->Storage<>.
+
+ @collab Storage<>
+*/
+template <class ENTITY>
+class iterator : public std::iterator<std::forward_iterator_tag, ENTITY>
+{
+ public:
+ typedef iterator<ENTITY> self;
+ typedef typename Base<ENTITY>::impl_type impl_container;
+ typedef typename impl_container::const_iterator impl_type;
+
+ // OPERATORS
+ iterator()
+ : itImpl() {}
+ explicit iterator(
+ impl_type i_impl)
+ : itImpl(i_impl) {}
+ ~iterator() {}
+
+ bool operator==(
+ self i_other ) const
+ { return itImpl == i_other.itImpl; }
+ bool operator!=(
+ self i_other ) const
+ { return itImpl != i_other.itImpl; }
+ ENTITY & operator*() const { csv_assert(*itImpl != 0);
+ return *(*itImpl); }
+ self & operator++() { ++itImpl; return *this; }
+ self operator++(int) { return self(itImpl++); }
+
+ private:
+ friend class const_iterator<ENTITY>; // For const_iterator(iterator);
+ impl_type ImplIterator() const { return itImpl; }
+
+ // DATA
+ impl_type itImpl;
+};
+
+
+/** A const iterator that runs on a ->Storage<>.
+
+ @collab Storage<>
+*/
+template <class ENTITY>
+class const_iterator :
+ public std::iterator<std::forward_iterator_tag, const ENTITY>
+{
+ public:
+ typedef const_iterator<ENTITY> self;
+ typedef typename Base<ENTITY>::impl_type impl_container;
+ typedef typename impl_container::const_iterator impl_type;
+
+ // OPERATORS
+ const_iterator()
+ : itImpl() {}
+ explicit const_iterator(
+ impl_type i_impl)
+ : itImpl(i_impl) {}
+ const_iterator( // implicit conversions allowed
+ ::ary::stg::iterator<ENTITY> i_it )
+ : itImpl(i_it.ImplIterator()) {}
+ ~const_iterator() {}
+
+ bool operator==(
+ self i_other ) const
+ { return itImpl == i_other.itImpl; }
+ bool operator!=(
+ self i_other ) const
+ { return itImpl != i_other.itImpl; }
+ const ENTITY & operator*() const { csv_assert(*itImpl != 0);
+ return *(*itImpl); }
+ self & operator++() { ++itImpl; return *this; }
+ self operator++(int) { return self(itImpl++); }
+
+ private:
+ // DATA
+ impl_type itImpl;
+};
+
+
+
+
+
+/** A non const iterator that runs on a ->Storage<> and returns only
+ the elements of a specific type.
+
+ @tpl ENTITY
+ The element type of the ->Storage<>
+
+ @tpl FILTER
+ The actual type of the returned items. FILTER needs to be derived from
+ ENTITY.
+
+ @collab Storage<>
+*/
+template <class ENTITY, class FILTER>
+class filter_iterator :
+ public std::iterator<std::forward_iterator_tag, FILTER>
+{
+ public:
+ typedef filter_iterator<ENTITY,FILTER> self;
+ typedef ::ary::stg::iterator<ENTITY> impl_type;
+
+ // OPERATORS
+ filter_iterator()
+ : itCur() {}
+ explicit filter_iterator(
+ impl_type i_cur )
+ : itCur(i_cur) {}
+ ~filter_iterator() {}
+
+ bool operator==(
+ self i_other ) const
+ { return itCur == i_other.itCur; }
+ bool operator!=(
+ self i_other ) const
+ { return itCur != i_other.itCur; }
+ FILTER & operator*() const { csv_assert(IsValid());
+ return static_cast< FILTER& >(*itCur); }
+ self & operator++() { ++itCur;
+ return *this; }
+ self operator++(int) { return self(itCur++); }
+ bool IsValid() const { return ary::is_type<FILTER>(*itCur); }
+
+ private:
+ friend class const_filter_iterator<ENTITY,FILTER>; // For const_filter_iterator(filter_iterator);
+ impl_type ImplCur() const { return itCur; }
+
+ // DATA
+ impl_type itCur;
+};
+
+
+/** A const iterator that runs on a ->Storage<> and returns only
+ the elements of a specific type.
+
+ @tpl ENTITY
+ The element type of the ->Storage<>
+
+ @tpl FILTER
+ The actual type of the returned items. FILTER needs to be derived from
+ ENTITY.
+
+ @collab Storage<>
+*/
+template <class ENTITY, class FILTER>
+class const_filter_iterator :
+ public std::iterator<std::forward_iterator_tag, const FILTER>
+{
+ public:
+ typedef const_filter_iterator<ENTITY,FILTER> self;
+ typedef ::ary::stg::const_iterator<ENTITY> impl_type;
+
+ // OPERATORS
+ const_filter_iterator()
+ : itCur() {}
+ explicit const_filter_iterator(
+ impl_type i_cur )
+ : itCur(i_cur) {}
+ explicit const_filter_iterator( // implicit conversions allowed
+ filter_iterator<ENTITY,FILTER>
+ i_it )
+ : itCur(i_it.ImplCur()) {}
+ ~const_filter_iterator()
+ {}
+ bool operator==(
+ self i_other ) const
+ { return itCur == i_other.itCur; }
+ bool operator!=(
+ self i_other ) const
+ { return itCur != i_other.itCur; }
+ const FILTER & operator*() const { csv_assert(IsValid());
+ return static_cast< const FILTER& >(*itCur); }
+ self & operator++() { ++itCur;
+ return *this; }
+ self operator++(int) { return self(itCur++); }
+ bool IsValid() const { return ary::is_type<FILTER>(*itCur); }
+
+ private:
+ // DATA
+ impl_type itCur;
+};
+
+
+
+
+} // namespace stg
+} // namespace ary
+#endif
diff --git a/autodoc/source/ary/inc/store/s_storage.hxx b/autodoc/source/ary/inc/store/s_storage.hxx
new file mode 100644
index 000000000000..aace69ef6678
--- /dev/null
+++ b/autodoc/source/ary/inc/store/s_storage.hxx
@@ -0,0 +1,294 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_STORE_S_STORAGE_HXX
+#define ARY_STORE_S_STORAGE_HXX
+
+// USED SERVICES
+#include <ary/types.hxx>
+#include "s_iterator.hxx"
+
+
+
+
+namespace ary
+{
+namespace stg
+{
+
+
+/** The storage unit of one class of commomly stored repository
+ entities.
+*/
+template <class ENTITY>
+class Storage
+{
+ public:
+ typedef Base<ENTITY> container_type;
+ typedef ary::TypedId<ENTITY> key_type;
+ typedef stg::const_iterator<ENTITY> c_iter;
+ typedef stg::iterator<ENTITY> iter;
+
+ // LIFECYCLE
+ virtual ~Storage() {}
+
+ // OPERATORS
+ const ENTITY & operator[](
+ key_type i_id ) const;
+ ENTITY & operator[](
+ key_type i_id );
+ const ENTITY & operator[](
+ Rid i_index ) const;
+ ENTITY & operator[](
+ Rid i_index );
+ // OPERATIONS
+ /// Sets the id of the new entity.
+ key_type Store_Entity(
+ DYN ENTITY & pass_newEntity );
+ /// Sets the id of the new entity.
+ void Set_Reserved(
+ uintt i_index,
+ DYN ENTITY & pass_newEntity );
+ /// Sets the id of the new entity.
+ void Replace_Entity(
+ key_type i_index,
+ DYN ENTITY & pass_newEntity );
+ // INQUIRY
+ bool Exists(
+ key_type i_id ) const;
+ bool Exists(
+ Rid i_index ) const;
+
+ c_iter Begin() const;
+ c_iter BeginUnreserved() const;
+ c_iter End() const;
+
+ // ACCESS
+ iter Begin();
+ iter BeginUnreserved();
+ iter End();
+
+ protected:
+ Storage(
+ uintt i_nrOfReservedItems );
+ private:
+ // DATA
+ container_type aData;
+};
+
+
+
+
+
+
+// IMPLEMENTATION
+
+// Used later, so implemented first.
+template <class ENTITY>
+inline bool
+Storage<ENTITY>::Exists(Rid i_index) const
+{
+ return 0 < i_index AND i_index < aData.Size();
+}
+
+template <class ENTITY>
+inline bool
+Storage<ENTITY>::Exists(key_type i_id) const
+{
+ return Exists(i_id.Value());
+}
+
+template <class ENTITY>
+inline const ENTITY &
+Storage<ENTITY>::operator[](Rid i_index) const
+{
+ csv_assert(Exists(i_index));
+ return * aData[i_index];
+}
+
+template <class ENTITY>
+inline ENTITY &
+Storage<ENTITY>::operator[](Rid i_index)
+{
+ csv_assert(Exists(i_index));
+ return * aData[i_index];
+}
+
+template <class ENTITY>
+inline const ENTITY &
+Storage<ENTITY>::operator[](key_type i_id) const
+{
+ return operator[](i_id.Value());
+}
+
+template <class ENTITY>
+inline ENTITY &
+Storage<ENTITY>::operator[](key_type i_id)
+{
+ return operator[](i_id.Value());
+}
+
+template <class ENTITY>
+typename Storage<ENTITY>::key_type
+Storage<ENTITY>::Store_Entity(DYN ENTITY & pass_newEntity)
+{
+ csv_assert( aData.Size() >= aData.ReservedSize() );
+ Rid
+ ret( aData.Add_Entity(pass_newEntity) );
+ pass_newEntity.Set_Id(ret);
+ return key_type(ret);
+}
+
+template <class ENTITY>
+void
+Storage<ENTITY>::Set_Reserved(uintt i_index,
+ DYN ENTITY & pass_newEntity)
+{
+ // 0 must not be used.
+ csv_assert( i_index != 0 );
+ // Make sure, i_index actually is the id of a reserved item.
+ csv_assert( i_index < aData.ReservedSize() );
+
+ // If there was a previous entity, it will be deleted by
+ // the destructor of pOldEntity.
+ Dyn<ENTITY>
+ pOldEntity(aData.Set_Entity(i_index, pass_newEntity));
+ pass_newEntity.Set_Id(i_index);
+}
+
+template <class ENTITY>
+void
+Storage<ENTITY>::Replace_Entity( key_type i_index,
+ DYN ENTITY & pass_newEntity )
+{
+ uintt
+ nIndex = i_index.Value();
+ // Make sure, i_index actually is the id of an existing,
+ // non reserved entity.
+ csv_assert( csv::in_range(aData.ReservedSize(), nIndex, aData.Size()) );
+
+ // If there was a previous entity, it will be deleted by
+ // the destructor of pOldEntity.
+ Dyn<ENTITY>
+ pOldEntity(aData.Set_Entity(nIndex, pass_newEntity));
+ pass_newEntity.Set_Id(nIndex);
+}
+
+template <class ENTITY>
+inline
+typename Storage<ENTITY>::c_iter
+Storage<ENTITY>::Begin() const
+{
+ return c_iter(aData.Begin());
+}
+
+template <class ENTITY>
+inline
+typename Storage<ENTITY>::c_iter
+Storage<ENTITY>::BeginUnreserved() const
+{
+ return c_iter(aData.BeginUnreserved());
+}
+
+template <class ENTITY>
+inline
+typename Storage<ENTITY>::c_iter
+Storage<ENTITY>::End() const
+{
+ return c_iter(aData.End());
+}
+
+template <class ENTITY>
+inline
+typename Storage<ENTITY>::iter
+Storage<ENTITY>::Begin()
+{
+ return iter(aData.Begin());
+}
+
+template <class ENTITY>
+inline
+typename Storage<ENTITY>::iter
+Storage<ENTITY>::BeginUnreserved()
+{
+ return iter(aData.BeginUnreserved());
+}
+
+template <class ENTITY>
+inline
+typename Storage<ENTITY>::iter
+Storage<ENTITY>::End()
+{
+ return iter(aData.End());
+}
+
+template <class ENTITY>
+inline
+Storage<ENTITY>::Storage(uintt i_nrOfReservedItems)
+ : aData(i_nrOfReservedItems)
+{
+ // Make sure Rid and uintt are the same type, because
+ // the interface of this uses Rid, but the interface of
+ // container_type uses uintt.
+ csv_assert( sizeof(uintt) == sizeof(Rid) );
+}
+
+
+
+
+// HELPER FUNCTIONS
+
+/** @return 0, if data are not there.
+*/
+template <class ENTITY>
+inline const ENTITY *
+Search( const Storage<ENTITY> & i_storage,
+ Rid i_id )
+{
+ if (NOT i_storage.Exists(i_id))
+ return 0;
+ return &i_storage[i_id];
+}
+
+/** @return 0, if data are not there.
+*/
+template <class ENTITY>
+inline ENTITY *
+SearchAccess( const Storage<ENTITY> & i_storage,
+ Rid i_id )
+{
+ if (NOT i_storage.Exists(i_id))
+ return 0;
+ return &i_storage[i_id];
+}
+
+
+
+
+} // namespace stg
+} // namespace ary
+#endif
diff --git a/autodoc/source/ary/inc/traits_impl.hxx b/autodoc/source/ary/inc/traits_impl.hxx
new file mode 100644
index 000000000000..77c84c819ba6
--- /dev/null
+++ b/autodoc/source/ary/inc/traits_impl.hxx
@@ -0,0 +1,119 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_TRAITS_IMPL_HXX
+#define ARY_TRAITS_IMPL_HXX
+
+
+// USED SERVICES
+#include <ary/getncast.hxx>
+
+
+namespace ary
+{
+namespace traits
+{
+
+
+/** Finds the node assigned to an entity, if that entity has a specific
+ actual type.
+
+ @tpl NODE
+ The assumed actual type of io_node.
+*/
+template<class NODE>
+const typename NODE::node_t *
+ NodeOf(
+ const typename NODE::traits_t::entity_base_type &
+ io_node );
+
+/** Finds the node assigned to an entity, if that entity has a specific
+ actual type.
+
+ @tpl NODE
+ The assumed actual type of io_node.
+*/
+template<class NODE>
+typename NODE::node_t *
+ NodeOf(
+ typename NODE::traits_t::entity_base_type &
+ io_node );
+
+/** Finds a child to a node.
+*/
+template<class NODE, class KEY>
+typename NODE::traits_t::id_type
+ Search_Child(
+ const typename NODE::traits_t::entity_base_type &
+ i_node,
+ const KEY & i_localKey );
+
+
+
+
+// IMPLEMENTATION
+
+template<class NODE>
+const typename NODE::node_t *
+NodeOf(const typename NODE::traits_t::entity_base_type & io_node)
+{
+ const NODE *
+ pn = ary_cast<NODE>(&io_node);
+ if (pn != 0)
+ return & pn->AsNode();
+ return 0;
+}
+
+template<class NODE>
+typename NODE::node_t *
+NodeOf(typename NODE::traits_t::entity_base_type & io_node)
+{
+ NODE *
+ pn = ary_cast<NODE>(&io_node);
+ if (pn != 0)
+ return & pn->AsNode();
+ return 0;
+}
+
+template<class NODE, class KEY>
+typename NODE::traits_t::id_type
+Search_Child( const typename NODE::traits_t::entity_base_type & i_node,
+ const KEY & i_localKey )
+{
+ const NODE *
+ pn = ary_cast<NODE>(&i_node);
+ if (pn != 0)
+ return pn->Search_Child(i_localKey);
+ return typename NODE::traits_t::id_type(0);
+}
+
+
+
+
+} // namespace traits
+} // namespace ary
+#endif
diff --git a/autodoc/source/ary/info/all_dts.cxx b/autodoc/source/ary/info/all_dts.cxx
new file mode 100644
index 000000000000..7dfbf737538b
--- /dev/null
+++ b/autodoc/source/ary/info/all_dts.cxx
@@ -0,0 +1,105 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <ary/info/all_dts.hxx>
+
+
+// NOT FULLY DEFINED SERVICES
+#include <ary/info/infodisp.hxx>
+
+
+namespace ary
+{
+namespace info
+{
+
+
+void
+DT_Text::do_StoreAt( DocuDisplay & o_rDisplay ) const
+{
+ o_rDisplay.Display_DT_Text(*this);
+}
+
+bool
+DT_Text::inq_IsWhite() const
+{
+ return false;
+}
+
+void
+DT_MaybeLink::do_StoreAt( DocuDisplay & o_rDisplay ) const
+{
+ o_rDisplay.Display_DT_MaybeLink(*this);
+}
+
+bool
+DT_MaybeLink::inq_IsWhite() const
+{
+ return false;
+}
+
+void
+DT_Whitespace::do_StoreAt( DocuDisplay & o_rDisplay ) const
+{
+ o_rDisplay.Display_DT_Whitespace(*this);
+}
+
+bool
+DT_Whitespace::inq_IsWhite() const
+{
+ return true;
+}
+
+void
+DT_Eol::do_StoreAt( DocuDisplay & o_rDisplay ) const
+{
+ o_rDisplay.Display_DT_Eol(*this);
+}
+
+bool
+DT_Eol::inq_IsWhite() const
+{
+ return true;
+}
+
+void
+DT_Xml::do_StoreAt( DocuDisplay & o_rDisplay ) const
+{
+ o_rDisplay.Display_DT_Xml(*this);
+}
+
+bool
+DT_Xml::inq_IsWhite() const
+{
+ return false;
+}
+
+
+} // namespace info
+} // namespace ary
+
diff --git a/autodoc/source/ary/info/all_tags.cxx b/autodoc/source/ary/info/all_tags.cxx
new file mode 100644
index 000000000000..76d8192690ff
--- /dev/null
+++ b/autodoc/source/ary/info/all_tags.cxx
@@ -0,0 +1,569 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <ary/info/all_tags.hxx>
+
+
+// NOT FULLY DEFINED SERVICES
+#include <limits>
+#include <ary/info/infodisp.hxx>
+#include <adc_cl.hxx>
+
+
+namespace ary
+{
+namespace info
+{
+
+
+
+//***************************** StdTag ***********************//
+
+
+StdTag::StdTag( E_AtTagId i_eId )
+ : eId(i_eId),
+ // aText,
+ pNext(0)
+{
+}
+
+bool
+StdTag::Add_SpecialMeaningToken( const char * ,
+ intt )
+{
+ // Does nothing
+
+ // KORR_FUTURE
+ // Should be a logical exception:
+ // csv_assert(false);
+ return false;
+}
+
+UINT8
+StdTag::NrOfSpecialMeaningTokens() const
+{
+ return 0;
+}
+
+AtTag *
+StdTag::GetFollower()
+{
+ if (pNext != 0)
+ return pNext->GetFollower();
+ pNext = new StdTag(eId);
+ return pNext;
+}
+
+void
+StdTag::do_StoreAt( DocuDisplay & o_rDisplay ) const
+{
+ o_rDisplay.Display_StdTag( *this );
+}
+
+DocuText *
+StdTag::Text()
+{
+ return &aText;
+}
+
+
+
+//***************************** BaseTag ***********************//
+
+BaseTag::BaseTag()
+ : // sBase
+ // aText
+ pNext(0)
+{
+}
+
+bool
+BaseTag::Add_SpecialMeaningToken( const char * i_sText,
+ intt i_nNr )
+{
+ if ( i_nNr == 1 )
+ {
+ sBase.AssignText(i_sText,"::");
+ return true;
+ }
+ return false;
+}
+
+const char *
+BaseTag::Title() const
+{
+ return "Base Classes";
+}
+
+UINT8
+BaseTag::NrOfSpecialMeaningTokens() const
+{
+ return 1;
+}
+
+AtTag *
+BaseTag::GetFollower()
+{
+ if (pNext != 0)
+ return pNext->GetFollower();
+ pNext = new BaseTag;
+ return pNext;
+}
+
+DocuText *
+BaseTag::Text()
+{
+ return &aText;
+}
+
+
+
+//***************************** ExceptionTag ***********************//
+
+ExceptionTag::ExceptionTag()
+ : // sException,
+ // aText
+ pNext(0)
+{
+}
+
+bool
+ExceptionTag::Add_SpecialMeaningToken( const char * i_sText,
+ intt i_nNr )
+{
+ if ( i_nNr == 1 )
+ {
+ sException.AssignText(i_sText,"::");
+ return true;
+ }
+ return false;
+}
+
+const char *
+ExceptionTag::Title() const
+{
+ return "Thrown Exceptions";
+}
+
+UINT8
+ExceptionTag::NrOfSpecialMeaningTokens() const
+{
+ return 1;
+}
+
+AtTag *
+ExceptionTag::GetFollower()
+{
+ if (pNext != 0)
+ return pNext->GetFollower();
+ pNext = new ExceptionTag;
+ return pNext;
+}
+
+DocuText *
+ExceptionTag::Text()
+{
+ return &aText;
+}
+
+
+//***************************** ImplementsTag ***********************//
+
+ImplementsTag::ImplementsTag()
+ : // sBase
+ // aText
+ pNext(0)
+{
+}
+
+bool
+ImplementsTag::Add_SpecialMeaningToken( const char * i_sText,
+ intt i_nNr )
+{
+ if ( i_nNr == 1 )
+ {
+ sName.AssignText(i_sText,"::");
+ }
+ else
+ {
+ GetFollower()->Add_SpecialMeaningToken(i_sText,1);
+ }
+ return true;
+}
+
+const char *
+ImplementsTag::Title() const
+{
+ return "Implements";
+}
+
+UINT8
+ImplementsTag::NrOfSpecialMeaningTokens() const
+{
+ return std::numeric_limits<UINT8>::max();
+}
+
+AtTag *
+ImplementsTag::GetFollower()
+{
+ if (pNext != 0)
+ return pNext->GetFollower();
+ pNext = new ImplementsTag;
+ return pNext;
+}
+
+DocuText *
+ImplementsTag::Text()
+{
+ return 0;
+}
+
+
+//***************************** KeywordTag ***********************//
+
+
+KeywordTag::KeywordTag()
+// : sKeys
+{
+}
+
+bool
+KeywordTag::Add_SpecialMeaningToken( const char * i_sText,
+ intt )
+{
+ sKeys.push_back(i_sText);
+ return true;
+}
+
+const char *
+KeywordTag::Title() const
+{
+ return "Keywords";
+}
+
+UINT8
+KeywordTag::NrOfSpecialMeaningTokens() const
+{
+ return std::numeric_limits<UINT8>::max();
+}
+
+AtTag *
+KeywordTag::GetFollower()
+{
+ return this;
+}
+
+DocuText *
+KeywordTag::Text()
+{
+ return 0;
+}
+
+
+
+//***************************** ParameterTag ***********************//
+
+
+ParameterTag::ParameterTag()
+ : // sName
+ // aText
+ pNext(0)
+{
+}
+
+bool
+ParameterTag::Add_SpecialMeaningToken( const char * i_sText,
+ intt i_nNr )
+{
+ if ( i_nNr == 1 )
+ {
+ sName = i_sText;
+ return true;
+ }
+ else if (i_nNr == 2)
+ {
+ uintt nLen = strlen(i_sText);
+ if (*i_sText == '[' AND i_sText[nLen-1] == ']')
+ {
+ sValidRange = String(i_sText+1, nLen-2);
+ return true;
+ }
+ }
+ return false;
+}
+
+UINT8
+ParameterTag::NrOfSpecialMeaningTokens() const
+{
+ return 2;
+}
+
+AtTag *
+ParameterTag::GetFollower()
+{
+ if (pNext != 0)
+ return pNext->GetFollower();
+ return pNext = new ParameterTag;
+}
+
+DocuText *
+ParameterTag::Text()
+{
+ return &aText;
+}
+
+void
+ParameterTag::do_StoreAt( DocuDisplay & o_rDisplay ) const
+{
+ o_rDisplay.Display_ParameterTag( *this );
+}
+
+
+
+//***************************** SeeTag ***********************//
+
+
+
+SeeTag::SeeTag()
+// : sReferences
+{
+}
+
+bool
+SeeTag::Add_SpecialMeaningToken( const char * i_sText,
+ intt )
+{
+ static QualifiedName aNull_;
+ sReferences.push_back(aNull_);
+ sReferences.back().AssignText(i_sText,"::");
+
+ return true;
+}
+
+const char *
+SeeTag::Title() const
+{
+ return "See Also";
+}
+
+UINT8
+SeeTag::NrOfSpecialMeaningTokens() const
+{
+ return std::numeric_limits<UINT8>::max();
+}
+
+AtTag *
+SeeTag::GetFollower()
+{
+ return this;
+}
+
+void
+SeeTag::do_StoreAt( DocuDisplay & o_rDisplay ) const
+{
+ o_rDisplay.Display_SeeTag( *this );
+}
+
+DocuText *
+SeeTag::Text()
+{
+ return 0;
+}
+
+
+
+//***************************** TemplateTag ***********************//
+
+
+TemplateTag::TemplateTag()
+ : // sName
+ // aText
+ pNext(0)
+{
+}
+
+bool
+TemplateTag::Add_SpecialMeaningToken( const char * i_sText,
+ intt i_nNr )
+{
+ if ( i_nNr == 1 )
+ {
+ sName = i_sText;
+ return true;
+ }
+ return false;
+}
+
+const char *
+TemplateTag::Title() const
+{
+ return "Template Parameters";
+}
+
+UINT8
+TemplateTag::NrOfSpecialMeaningTokens() const
+{
+ return 1;
+}
+
+AtTag *
+TemplateTag::GetFollower()
+{
+ if (pNext != 0)
+ return pNext->GetFollower();
+ return pNext = new TemplateTag;
+}
+
+void
+TemplateTag::do_StoreAt( DocuDisplay & o_rDisplay ) const
+{
+ o_rDisplay.Display_TemplateTag( *this );
+}
+
+
+DocuText *
+TemplateTag::Text()
+{
+ return &aText;
+}
+
+
+//***************************** LabelTag ***********************//
+
+
+
+LabelTag::LabelTag()
+ : sLabel()
+{
+}
+
+bool
+LabelTag::Add_SpecialMeaningToken( const char * i_sText,
+ intt i_nNr )
+{
+ if ( i_nNr == 1 AND sLabel.length() == 0 )
+ {
+ sLabel = i_sText;
+ return true;
+ }
+ // KORR_FUTURE
+// else // Throw exception because of double label.
+ return false;
+}
+
+const char *
+LabelTag::Title() const
+{
+ return "Label";
+}
+
+UINT8
+LabelTag::NrOfSpecialMeaningTokens() const
+{
+ return 1;
+}
+
+AtTag *
+LabelTag::GetFollower()
+{
+ return this;
+}
+
+DocuText *
+LabelTag::Text()
+{
+ return 0;
+}
+
+
+//***************************** SinceTag ***********************//
+
+SinceTag::SinceTag()
+ : sVersion()
+{
+}
+
+bool
+SinceTag::Add_SpecialMeaningToken( const char * i_sText,
+ intt )
+{
+ const char cCiphersend = '9' + 1;
+ if ( sVersion.empty()
+ AND NOT csv::in_range('0', *i_sText, cCiphersend)
+ AND autodoc::CommandLine::Get_().DoesTransform_SinceTag() )
+ {
+ return true;
+ }
+
+ if (sVersion.empty())
+ {
+ sVersion = i_sText;
+ }
+ else
+ {
+ StreamLock sHelp(100);
+ sVersion = sHelp() << sVersion << " " << i_sText << c_str;
+ }
+
+ return true;
+}
+
+const char *
+SinceTag::Title() const
+{
+ return "Label";
+}
+
+UINT8
+SinceTag::NrOfSpecialMeaningTokens() const
+{
+ return UINT8(-1);
+}
+
+AtTag *
+SinceTag::GetFollower()
+{
+ return this;
+}
+
+void
+SinceTag::do_StoreAt( DocuDisplay & o_rDisplay ) const
+{
+ o_rDisplay.Display_SinceTag( *this );
+}
+
+DocuText *
+SinceTag::Text()
+{
+ return 0;
+}
+
+
+} // namespace info
+} // namespace ary
+
diff --git a/autodoc/source/ary/info/ci_attag.cxx b/autodoc/source/ary/info/ci_attag.cxx
new file mode 100644
index 000000000000..e9afb6e106f7
--- /dev/null
+++ b/autodoc/source/ary/info/ci_attag.cxx
@@ -0,0 +1,93 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <ary/info/ci_attag.hxx>
+
+
+// NOT FULLY DEFINED SERVICES
+#include <ary/info/all_dts.hxx>
+#include <ary/info/ci_text.hxx>
+
+
+namespace ary
+{
+namespace info
+{
+
+void
+AtTag::Set_HtmlUseInDocuText( bool i_bUseIt )
+{
+ DocuText * pText = Text();
+ if ( pText != 0 )
+ pText->Set_HtmlUse(i_bUseIt);
+}
+
+void
+AtTag::Add_Token( const char * i_sText )
+{
+ DocuText * pText = Text();
+ if (pText != 0)
+ pText->Add_Token( *new DT_Text(i_sText) );
+}
+
+void
+AtTag::Add_PotentialLink( const char * i_sText,
+ bool i_bIsGlobal,
+ bool i_bIsFunction )
+{
+ DocuText * pText = Text();
+ if (pText != 0)
+ pText->Add_Token( *new DT_MaybeLink(i_sText, i_bIsGlobal, i_bIsFunction) );
+}
+
+void
+AtTag::Add_Whitespace( UINT8 i_nLength )
+{
+ DocuText * pText = Text();
+ if (pText != 0)
+ pText->Add_Token( *new DT_Whitespace(i_nLength) );
+}
+
+void
+AtTag::Add_Eol()
+{
+ DocuText * pText = Text();
+ if (pText != 0)
+ pText->Add_Token( *new DT_Eol );
+}
+
+void
+AtTag::do_StoreAt( DocuDisplay & ) const
+{
+ // Dummy
+}
+
+} // namespace info
+} // namespace ary
+
+
diff --git a/autodoc/source/ary/info/ci_text.cxx b/autodoc/source/ary/info/ci_text.cxx
new file mode 100644
index 000000000000..12710c5fd53b
--- /dev/null
+++ b/autodoc/source/ary/info/ci_text.cxx
@@ -0,0 +1,71 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <ary/info/ci_text.hxx>
+
+
+// NOT FULLY DEFINED SERVICES
+#include <ary/info/all_dts.hxx>
+
+
+namespace ary
+{
+namespace info
+{
+
+DocuText::DocuText()
+ : bUsesHtml(false)
+{
+}
+
+DocuText::~DocuText()
+{
+ for ( TokenList::iterator iter = aTokens.begin();
+ iter != aTokens.end();
+ ++iter )
+ {
+ delete (*iter);
+ }
+}
+
+void
+DocuText::StoreAt( DocuDisplay & o_rDisplay ) const
+{
+ ary::info::DocuText::TokenList::const_iterator itEnd = aTokens.end();
+ for ( ary::info::DocuText::TokenList::const_iterator it = aTokens.begin();
+ it != itEnd;
+ ++it )
+ {
+ (*it)->StoreAt(o_rDisplay);
+ }
+}
+
+} // namespace info
+} // namespace ary
+
+
diff --git a/autodoc/source/ary/info/makefile.mk b/autodoc/source/ary/info/makefile.mk
new file mode 100644
index 000000000000..0c507ba3f4fe
--- /dev/null
+++ b/autodoc/source/ary/info/makefile.mk
@@ -0,0 +1,60 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..$/..$/..
+
+PRJNAME=autodoc
+TARGET=ary_info
+
+
+
+# --- Settings -----------------------------------------------------
+
+ENABLE_EXCEPTIONS=true
+PRJINC=$(PRJ)$/source
+
+.INCLUDE : settings.mk
+.INCLUDE : $(PRJ)$/source$/mkinc$/fullcpp.mk
+
+
+
+# --- Files --------------------------------------------------------
+
+
+OBJFILES= \
+ $(OBJ)$/all_dts.obj \
+ $(OBJ)$/all_tags.obj \
+ $(OBJ)$/ci_attag.obj \
+ $(OBJ)$/ci_text.obj
+
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : target.mk
+
+
+
diff --git a/autodoc/source/ary/kernel/ary_disp.cxx b/autodoc/source/ary/kernel/ary_disp.cxx
new file mode 100644
index 000000000000..2e652f28a664
--- /dev/null
+++ b/autodoc/source/ary/kernel/ary_disp.cxx
@@ -0,0 +1,108 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <ary/ary_disp.hxx>
+
+
+// NOT FULLY DECLARED SERVICES
+#include <ary/cpp/c_ce.hxx>
+#include <ary/cpp/c_gate.hxx>
+#include <ary/cpp/cp_ce.hxx>
+
+
+
+namespace ary
+{
+
+void
+Display::DisplaySlot_Rid( ary::Rid i_nId )
+{
+ const cpp::Gate *
+ pGate = Get_ReFinder();
+ if (pGate != 0)
+ {
+ const ary::cpp::CodeEntity *
+ pRE = pGate->Ces().Search_Ce( cpp::Ce_id(i_nId) );
+ if (pRE != 0)
+ {
+ pRE->Accept( *this );
+ return;
+ }
+ }
+
+ do_DisplaySlot_Rid( i_nId );
+}
+
+
+void
+Display::DisplaySlot_LocalCe( ary::cpp::Ce_id i_nId,
+ const String & i_sName )
+{
+ const cpp::Gate *
+ pGate = Get_ReFinder();
+ if (pGate != 0)
+ {
+ const ary::cpp::CodeEntity *
+ pRE = pGate->Ces().Search_Ce(i_nId);
+ if (pRE != 0)
+ {
+ pRE->Accept( *this );
+ return;
+ }
+ }
+
+ do_DisplaySlot_LocalCe( i_nId, i_sName );
+}
+
+
+
+// Dummy implementations for class Display
+
+void
+Display::do_StartSlot()
+{
+}
+
+void
+Display::do_FinishSlot()
+{
+}
+
+void
+Display::do_DisplaySlot_Rid( ary::Rid )
+{
+}
+
+void
+Display::do_DisplaySlot_LocalCe( ary::cpp::Ce_id ,
+ const String & )
+{
+}
+
+
+} // namespace ary
diff --git a/autodoc/source/ary/kernel/cessentl.cxx b/autodoc/source/ary/kernel/cessentl.cxx
new file mode 100644
index 000000000000..ea32736b6a2a
--- /dev/null
+++ b/autodoc/source/ary/kernel/cessentl.cxx
@@ -0,0 +1,86 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <ary/cessentl.hxx>
+
+
+// NOT FULLY DEFINED SERVICES
+#include <ary/cpp/c_ce.hxx>
+#include <ary/doc/d_oldcppdocu.hxx>
+
+
+namespace ary
+{
+namespace cpp
+{
+
+
+CeEssentials::CeEssentials()
+ : sLocalName(),
+ nOwner(0),
+ nLocation(0)
+{
+}
+
+CeEssentials::CeEssentials( const String & i_sLocalName,
+ Cid i_nOwner,
+ loc::Le_id i_nLocation )
+ : sLocalName(i_sLocalName),
+ nOwner(i_nOwner),
+ nLocation(i_nLocation)
+{
+}
+
+CeEssentials::~CeEssentials()
+{
+}
+
+
+
+inline bool
+IsInternal(const doc::Documentation & i_doc)
+{
+ const ary::doc::OldCppDocu *
+ docu = dynamic_cast< const ary::doc::OldCppDocu* >(i_doc.Data());
+ if (docu != 0)
+ return docu->IsInternal();
+ return false;
+}
+
+
+bool
+CodeEntity::IsVisible() const
+{
+ // KORR_FUTURE: Improve the whole handling of internal and visibility.
+ return bIsVisible && NOT IsInternal(Docu());
+}
+
+
+
+} // namespace cpp
+} // namespace ary
diff --git a/autodoc/source/ary/kernel/makefile.mk b/autodoc/source/ary/kernel/makefile.mk
new file mode 100644
index 000000000000..6c90252bc3b8
--- /dev/null
+++ b/autodoc/source/ary/kernel/makefile.mk
@@ -0,0 +1,63 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..$/..$/..
+
+PRJNAME=autodoc
+TARGET=ary_kernel
+
+
+
+# --- Settings -----------------------------------------------------
+
+ENABLE_EXCEPTIONS=true
+PRJINC=$(PRJ)$/source
+
+.INCLUDE : settings.mk
+.INCLUDE : $(PRJ)$/source$/mkinc$/fullcpp.mk
+
+
+
+# --- Files --------------------------------------------------------
+
+
+OBJFILES= \
+ $(OBJ)$/ary_disp.obj \
+ $(OBJ)$/cessentl.obj \
+ $(OBJ)$/namesort.obj \
+ $(OBJ)$/qualiname.obj \
+ $(OBJ)$/reposy.obj \
+ $(OBJ)$/slots.obj
+
+
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : target.mk
+
+
+
diff --git a/autodoc/source/ary/kernel/namesort.cxx b/autodoc/source/ary/kernel/namesort.cxx
new file mode 100644
index 000000000000..a404d754fb07
--- /dev/null
+++ b/autodoc/source/ary/kernel/namesort.cxx
@@ -0,0 +1,100 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <ary/namesort.hxx>
+
+
+// NOT FULLY DEFINED SERVICES
+
+
+
+namespace
+{
+
+
+int C_cAutodocNameOrdering1[256] =
+ { 0,255,255,255, 255,255,255,255, 255,255,255,255, 255,255,255,255, // 0 ..
+ 255,255,255,255, 255,255,255,255, 255,255,255,255, 255,255,255,255,
+ 255,255,255,255, 255,255,255,255, 255,255,255,255, 255,255,255,255, // 32 ..
+ 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,255,255, 255,255,255,255,
+
+ 255, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, // 64 ..
+ 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61,255, 255,255,255, 63,
+ 255, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, // 96 ..
+ 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61,255, 255,255,255,255,
+
+ 255,255,255,255, 255,255,255,255, 255,255,255,255, 255,255,255,255, //128 ..
+ 255,255,255,255, 255,255,255,255, 255,255,255,255, 255,255,255,255,
+ 255,255,255,255, 255,255,255,255, 255,255,255,255, 255,255,255,255, //160 ..
+ 255,255,255,255, 255,255,255,255, 255,255,255,255, 255,255,255,255,
+
+ 255,255,255,255, 255,255,255,255, 255,255,255,255, 255,255,255,255,
+ 255,255,255,255, 255,255,255,255, 255,255,255,255, 255,255,255,255,
+ 255,255,255,255, 255,255,255,255, 255,255,255,255, 255,255,255,255,
+ 255,255,255,255, 255,255,255,255, 255,255,255,255, 255,255,255,255
+ };
+
+int C_cAutodocNameOrdering2[256] =
+ { 0,255,255,255, 255,255,255,255, 255,255,255,255, 255,255,255,255, // 0 ..
+ 255,255,255,255, 255,255,255,255, 255,255,255,255, 255,255,255,255,
+ 255,255,255,255, 255,255,255,255, 255,255,255,255, 255,255,255,255, // 32 ..
+ 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,255,255, 255,255,255,255,
+
+ 255, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, // 64 ..
+ 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61,255, 255,255,255, 63,
+ 255, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, // 96 ..
+ 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62,255, 255,255,255,255,
+
+ 255,255,255,255, 255,255,255,255, 255,255,255,255, 255,255,255,255, //128 ..
+ 255,255,255,255, 255,255,255,255, 255,255,255,255, 255,255,255,255,
+ 255,255,255,255, 255,255,255,255, 255,255,255,255, 255,255,255,255, //160 ..
+ 255,255,255,255, 255,255,255,255, 255,255,255,255, 255,255,255,255,
+
+ 255,255,255,255, 255,255,255,255, 255,255,255,255, 255,255,255,255,
+ 255,255,255,255, 255,255,255,255, 255,255,255,255, 255,255,255,255,
+ 255,255,255,255, 255,255,255,255, 255,255,255,255, 255,255,255,255,
+ 255,255,255,255, 255,255,255,255, 255,255,255,255, 255,255,255,255
+ };
+
+
+} // namespace anonymous
+
+
+namespace ary
+{
+
+
+const csv::CharOrder_Table
+LesserName::aOrdering1_(C_cAutodocNameOrdering1);
+
+const csv::CharOrder_Table
+LesserName::aOrdering2_(C_cAutodocNameOrdering2);
+
+
+
+} // namespace ary
diff --git a/autodoc/source/ary/kernel/qualiname.cxx b/autodoc/source/ary/kernel/qualiname.cxx
new file mode 100644
index 000000000000..1c844b20a731
--- /dev/null
+++ b/autodoc/source/ary/kernel/qualiname.cxx
@@ -0,0 +1,105 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <ary/qualiname.hxx>
+
+
+// NOT FULLY DECLARED SERVICES
+
+
+namespace ary
+{
+
+
+QualifiedName::QualifiedName( uintt i_nSize )
+ : aNamespace(),
+ sLocalName(),
+ bIsAbsolute(false),
+ bIsFunction()
+{
+ if (i_nSize > 0)
+ aNamespace.reserve(i_nSize);
+}
+
+QualifiedName::QualifiedName( const char * i_sText,
+ const char * i_sSeparator )
+ : aNamespace(),
+ sLocalName(),
+ bIsAbsolute(false),
+ bIsFunction()
+{
+ AssignText(i_sText,i_sSeparator);
+}
+
+QualifiedName::~QualifiedName()
+{
+}
+
+void
+QualifiedName::AssignText( const char * i_sText,
+ const char * i_sSeparator )
+{
+ csv_assert(NOT csv::no_str(i_sText) AND NOT csv::no_str(i_sSeparator));
+ bIsAbsolute = false;
+ bIsFunction = false;
+ csv::erase_container( aNamespace );
+
+ uintt nSepLen = strlen(i_sSeparator);
+ const char * sNext = i_sText;
+
+ const char * ps = strstr( i_sText, i_sSeparator );
+ if (ps == i_sText)
+ {
+ bIsAbsolute = true;
+ sNext = ps + nSepLen;
+ }
+
+ for ( ps = strstr(sNext, i_sSeparator);
+ ps != 0;
+ ps = strstr(sNext, i_sSeparator) )
+ {
+ String sPart(sNext, ps - sNext);
+ aNamespace.push_back(sPart);
+ sNext = ps + nSepLen;
+ }
+
+ uintt sNameLen = strlen(sNext);
+ if ( sNameLen > 2 )
+ {
+ ps = sNext + sNameLen - 2;
+ if (*ps == '(' AND *(ps+1) == ')')
+ {
+ sNameLen -= 2;
+ bIsFunction = true;
+ }
+ }
+ sLocalName = String(sNext,sNameLen);
+}
+
+
+} // namespace ary
diff --git a/autodoc/source/ary/kernel/reposy.cxx b/autodoc/source/ary/kernel/reposy.cxx
new file mode 100644
index 000000000000..9ef4b3f4ca7f
--- /dev/null
+++ b/autodoc/source/ary/kernel/reposy.cxx
@@ -0,0 +1,218 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <reposy.hxx>
+
+
+// NOT FULLY DECLARED SERVICES
+#include <cpp_internalgate.hxx>
+#include <idl_internalgate.hxx>
+
+
+namespace ary
+{
+
+
+//***************** Repository ************//
+
+DYN Repository &
+Repository::Create_()
+{
+ return *new RepositoryCenter;
+}
+
+
+
+
+RepositoryCenter::RepositoryCenter()
+ : sDisplayedName(),
+ aLocation(),
+ pCppPartition(0),
+ pIdlPartition(0)
+{
+ pCppPartition = & cpp::InternalGate::Create_Partition_(*this);
+ pIdlPartition = & idl::InternalGate::Create_Partition_(*this);
+}
+
+RepositoryCenter::~RepositoryCenter()
+{
+}
+
+const ::ary::cpp::Gate &
+RepositoryCenter::Gate_Cpp() const
+{
+ csv_assert(pCppPartition);
+ return *pCppPartition;
+}
+
+const ::ary::idl::Gate &
+RepositoryCenter::Gate_Idl() const
+{
+ csv_assert(pIdlPartition);
+ return *pIdlPartition;
+}
+
+const String &
+RepositoryCenter::Title() const
+{
+ return sDisplayedName;
+}
+
+
+::ary::cpp::Gate &
+RepositoryCenter::Gate_Cpp()
+{
+ csv_assert(pCppPartition);
+ return *pCppPartition;
+}
+
+::ary::idl::Gate &
+RepositoryCenter::Gate_Idl()
+{
+ csv_assert(pIdlPartition);
+ return *pIdlPartition;
+}
+
+void
+RepositoryCenter::Set_Title(const String & i_sName)
+{
+ sDisplayedName = i_sName;
+}
+
+
+
+
+//********************* Repository Type Info Data ****************//
+
+// !!! IMPORTANT - NEVER DELETE OR CHANGE - ADDING ALLOWED
+
+
+
+/* ClassType-Ids
+ -------------
+
+ cpp 1000
+ idl 2000
+ corba 3000
+ java 4000
+ information 5000
+ logic location 6000
+ phys location 7000
+ sec. prod. 8000
+
+
+ cpp
+ ---
+ Namespace 1000
+ Class 1001
+ Enum 1002
+ Typedef 1003
+ Function 1004
+ Variable 1005
+ EnumValue 1006
+ NamespaceAlias 1007
+
+ BuiltInType 1200
+ CeType_Final 1201
+ CeType_Extern 1202
+ UsedType 1203
+ PtrType 1211
+ RefType 1212
+ ConstType 1221
+ VolatileType 1222
+ ArrayType 1230
+ TemplateInstance 1235
+ FunctionPtr 1240
+ DataMemberPtr 1250
+ OperationMemberPtr 1260
+
+ TplParam_Type 1301
+ TplParam_Value 1302
+
+ OpSignature 1400
+
+ Define 1601
+ Macro 1602
+
+ ProjectGroup 1901
+ FileGroup 1902
+
+ TopProject 1921
+
+
+
+ idl
+ ---
+
+ Module 2000
+ Interface 2001
+ Function 2002
+ Service 2003
+ Property 2004
+ Enum 2005
+ EnumValue 2006
+ Typedef 2007
+ Struct 2008
+ StructElement 2009
+ Exception 2010
+ ConstantGroup 2011
+ Constant 2012
+ Singleton 2013
+ Attribute 2014
+ SglIfcService 2015
+ SglIfcSingleton 2016
+
+ BuiltInType 2200
+ CeType 2201
+ Sequence 2202
+ ExplicitType 2203
+ ExplicitNameRoom 2204
+ TemplateParamType 2205
+
+
+ java
+ ----
+ Package 4000
+ Interface 4001
+ Class 4002
+
+ physical location
+ -----------------
+ Root 7000
+ Directory 7030
+ File 7100
+
+
+ info
+ ----
+ CodeInformation
+ (IDL) 11002
+*/
+
+
+} // namespace ary
diff --git a/autodoc/source/ary/kernel/slots.cxx b/autodoc/source/ary/kernel/slots.cxx
new file mode 100644
index 000000000000..ef2e06ae8388
--- /dev/null
+++ b/autodoc/source/ary/kernel/slots.cxx
@@ -0,0 +1,164 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <slots.hxx>
+
+
+// NOT FULLY DEFINED SERVICES
+#include <ary/ary_disp.hxx>
+
+
+
+namespace ary
+{
+
+
+//*********************** Slot ********************//
+
+
+void
+Slot::StoreAt( Display & o_rDestination ) const
+{
+ o_rDestination.StartSlot();
+ StoreEntries(o_rDestination);
+ o_rDestination.FinishSlot();
+}
+
+
+//*********************** Slot_Null ********************//
+
+Slot_Null::~Slot_Null()
+{
+}
+
+void
+Slot_Null::StoreAt( Display & ) const
+{
+ // Does nothing
+}
+
+uintt
+Slot_Null::Size() const
+{
+ return 0;
+}
+
+void
+Slot_Null::StoreEntries( Display & ) const
+{
+ // Does nothing
+}
+
+//*********************** Slot_MapLocalCe ********************//
+
+Slot_MapLocalCe::Slot_MapLocalCe( const cpp::Map_LocalCe & i_rData )
+ : pData(&i_rData)
+{
+}
+
+Slot_MapLocalCe::~Slot_MapLocalCe()
+{
+}
+
+uintt
+Slot_MapLocalCe::Size() const
+{
+ return pData->size();;
+}
+
+void
+Slot_MapLocalCe::StoreEntries( Display & o_rDestination ) const
+{
+ for ( cpp::Map_LocalCe::const_iterator it = pData->begin();
+ it != pData->end();
+ ++it )
+ {
+ o_rDestination.DisplaySlot_LocalCe( (*it).second, (*it).first );
+ }
+}
+
+
+
+//*********************** Slot_MapOperations ********************//
+
+Slot_MapOperations::Slot_MapOperations( const std::multimap<String, cpp::Ce_id> & i_rData )
+ : pData(&i_rData)
+{
+}
+
+Slot_MapOperations::~Slot_MapOperations()
+{
+}
+
+uintt
+Slot_MapOperations::Size() const
+{
+ return pData->size();;
+}
+
+void
+Slot_MapOperations::StoreEntries( Display & o_rDestination ) const
+{
+ for ( std::multimap<String, cpp::Ce_id>::const_iterator it = pData->begin();
+ it != pData->end();
+ ++it )
+ {
+ o_rDestination.DisplaySlot_LocalCe( (*it).second, (*it).first );
+ }
+}
+
+//*********************** Slot_ListLocalCe ********************//
+
+Slot_ListLocalCe::Slot_ListLocalCe( const cpp::List_LocalCe & i_rData )
+ : pData(&i_rData)
+{
+}
+
+Slot_ListLocalCe::~Slot_ListLocalCe()
+{
+}
+
+uintt
+Slot_ListLocalCe::Size() const
+{
+ return pData->size();;
+}
+
+void
+Slot_ListLocalCe::StoreEntries( Display & o_rDestination ) const
+{
+ for ( cpp::List_LocalCe::const_iterator it = pData->begin();
+ it != pData->end();
+ ++it )
+ {
+ o_rDestination.DisplaySlot_LocalCe( (*it).nId, (*it).sLocalName );
+ }
+}
+
+
+} // namespace ary
diff --git a/autodoc/source/ary/loc/loc_dir.cxx b/autodoc/source/ary/loc/loc_dir.cxx
new file mode 100644
index 000000000000..616b8775eca0
--- /dev/null
+++ b/autodoc/source/ary/loc/loc_dir.cxx
@@ -0,0 +1,134 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <ary/loc/loc_dir.hxx>
+
+
+// NOT FULLY DEFINED SERVICES
+#include <ary/loc/loc_file.hxx>
+#include <sortedids.hxx>
+#include "locs_le.hxx"
+
+
+namespace ary
+{
+namespace loc
+{
+
+struct Directory::Container
+{
+ typedef SortedIds<Le_Compare> SortedChildList;
+
+ SortedChildList aSubDirectories;
+ SortedChildList aFiles;
+
+ Container()
+ : aSubDirectories(),
+ aFiles()
+ {}
+};
+
+
+
+
+Directory::Directory(Le_id i_assignedRoot)
+ : sLocalName(),
+ nParentDirectory(0),
+ nAssignedRoot(i_assignedRoot),
+ aAssignedNode(),
+ pChildren(new Container)
+{
+ aAssignedNode.Assign_Entity(*this);
+}
+
+Directory::Directory( const String & i_localName,
+ Le_id i_parentDirectory )
+ : sLocalName(i_localName),
+ nParentDirectory(i_parentDirectory),
+ nAssignedRoot(0),
+ aAssignedNode(),
+ pChildren(new Container)
+{
+ aAssignedNode.Assign_Entity(*this);
+}
+
+Directory::~Directory()
+{
+}
+
+void
+Directory::Add_Dir(const Directory & i_dir)
+{
+ pChildren->aSubDirectories.Add(i_dir.LeId());
+}
+
+void
+Directory::Add_File(const File & i_file)
+{
+ pChildren->aFiles.Add(i_file.LeId());
+}
+
+Le_id
+Directory::Search_Dir(const String & i_name) const
+{
+ return pChildren->aSubDirectories.Search(i_name);
+}
+
+Le_id
+Directory::Search_File(const String & i_name) const
+{
+ return pChildren->aFiles.Search(i_name);
+}
+
+void
+Directory::do_Accept(csv::ProcessorIfc & io_processor) const
+{
+ csv::CheckedCall(io_processor,*this);
+}
+
+ClassId
+Directory::get_AryClass() const
+{
+ return class_id;
+}
+
+const String &
+Directory::inq_LocalName() const
+{
+ return sLocalName;
+}
+
+Le_id
+Directory::inq_ParentDirectory() const
+{
+ return nParentDirectory;
+}
+
+
+} // namespace loc
+} // namespace ary
diff --git a/autodoc/source/ary/loc/loc_file.cxx b/autodoc/source/ary/loc/loc_file.cxx
new file mode 100644
index 000000000000..5a7a67089e17
--- /dev/null
+++ b/autodoc/source/ary/loc/loc_file.cxx
@@ -0,0 +1,66 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <ary/loc/loc_file.hxx>
+
+
+// NOT FULLY DEFINED SERVICES
+
+
+
+namespace ary
+{
+namespace loc
+{
+
+File::File( const String & i_sLocalName,
+ Le_id i_nParentDirectory )
+ : FileBase(i_sLocalName, i_nParentDirectory)
+{
+}
+
+File::~File()
+{
+}
+
+void
+File::do_Accept(csv::ProcessorIfc & io_processor) const
+{
+ csv::CheckedCall(io_processor, *this);
+}
+
+ClassId
+File::get_AryClass() const
+{
+ return class_id;
+}
+
+
+
+} // namespace loc
+} // namespace ary
diff --git a/autodoc/source/ary/loc/loc_filebase.cxx b/autodoc/source/ary/loc/loc_filebase.cxx
new file mode 100644
index 000000000000..f7a6afcc4858
--- /dev/null
+++ b/autodoc/source/ary/loc/loc_filebase.cxx
@@ -0,0 +1,63 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <ary/loc/loc_filebase.hxx>
+
+
+// NOT FULLY DEFINED SERVICES
+
+
+
+namespace ary
+{
+namespace loc
+{
+
+FileBase::FileBase( const String & i_localName,
+ Le_id i_parentDirectory )
+ : sLocalName(i_localName),
+ nParentDirectory(i_parentDirectory)
+{
+}
+
+const String &
+FileBase::inq_LocalName() const
+{
+ return sLocalName;
+}
+
+Le_id
+FileBase::inq_ParentDirectory() const
+{
+ return nParentDirectory;
+}
+
+
+
+} // namespace loc
+} // namespace ary
diff --git a/autodoc/source/ary/loc/loc_root.cxx b/autodoc/source/ary/loc/loc_root.cxx
new file mode 100644
index 000000000000..3cf8e47c1181
--- /dev/null
+++ b/autodoc/source/ary/loc/loc_root.cxx
@@ -0,0 +1,83 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <ary/loc/loc_root.hxx>
+
+
+// NOT FULLY DEFINED SERVICES
+
+
+namespace ary
+{
+namespace loc
+{
+
+
+Root::Root(const csv::ploc::Path & i_path)
+ : aPath(i_path),
+ sPathAsString(),
+ aMyDirectory(0)
+{
+ StreamLock
+ path_string(700);
+ path_string() << i_path;
+ sPathAsString = path_string().c_str();
+}
+
+Root::~Root()
+{
+}
+
+void
+Root::do_Accept(csv::ProcessorIfc & io_processor) const
+{
+ csv::CheckedCall(io_processor,*this);
+}
+
+ClassId
+Root::get_AryClass() const
+{
+ return class_id;
+}
+
+const String &
+Root::inq_LocalName() const
+{
+ return sPathAsString;
+}
+
+Le_id
+Root::inq_ParentDirectory() const
+{
+ return Le_id::Null_();
+}
+
+
+
+} // namespace loc
+} // namespace ary
diff --git a/autodoc/source/ary/loc/loc_traits.cxx b/autodoc/source/ary/loc/loc_traits.cxx
new file mode 100644
index 000000000000..875b6aae17ee
--- /dev/null
+++ b/autodoc/source/ary/loc/loc_traits.cxx
@@ -0,0 +1,91 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <ary/loc/loc_traits.hxx>
+
+
+// NOT FULLY DEFINED SERVICES
+#include <ary/namesort.hxx>
+#include <ary/getncast.hxx>
+#include "locs_le.hxx"
+
+
+
+namespace ary
+{
+namespace loc
+{
+
+
+//******************** Le_Traits ************************//
+Le_Traits::entity_base_type &
+Le_Traits::EntityOf_(id_type i_id)
+{
+ csv_assert(i_id.IsValid());
+ return Le_Storage::Instance_()[i_id];
+}
+
+//******************** LeNode_Traits ************************//
+symtree::Node<LeNode_Traits> *
+LeNode_Traits::NodeOf_(entity_base_type & io_entity)
+{
+ if (is_type<Directory>(io_entity))
+ return & ary_cast<Directory>(io_entity).AsNode();
+ return 0;
+}
+
+Le_Traits::entity_base_type *
+LeNode_Traits::ParentOf_(const entity_base_type & i_entity)
+{
+ Le_Traits::id_type
+ ret = i_entity.ParentDirectory();
+ if (ret.IsValid())
+ return &EntityOf_(ret);
+ return 0;
+}
+
+//******************** Le_Compare ************************//
+const Le_Compare::key_type &
+Le_Compare::KeyOf_(const entity_base_type & i_entity)
+{
+ return i_entity.LocalName();
+}
+
+bool
+Le_Compare::Lesser_( const key_type & i_1,
+ const key_type & i_2 )
+{
+ static ::ary::LesserName less_;
+ return less_(i_1,i_2);
+}
+
+
+
+
+} // namespace loc
+} // namespace ary
diff --git a/autodoc/source/ary/loc/loca_le.cxx b/autodoc/source/ary/loc/loca_le.cxx
new file mode 100644
index 000000000000..27a4339fc93d
--- /dev/null
+++ b/autodoc/source/ary/loc/loca_le.cxx
@@ -0,0 +1,181 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "loca_le.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include <ary/loc/loc_dir.hxx>
+#include <ary/loc/loc_file.hxx>
+#include <ary/loc/loc_root.hxx>
+#include <loc_internalgate.hxx>
+#include "locs_le.hxx"
+
+
+
+
+namespace ary
+{
+namespace loc
+{
+
+DYN LocationPilot &
+InternalGate::Create_Locations_()
+{
+ return *new LocationAdmin;
+}
+
+
+
+
+inline Le_Storage &
+LocationAdmin::Storage() const
+{
+ csv_assert(pStorage);
+ return *pStorage.MutablePtr();
+}
+
+
+LocationAdmin::LocationAdmin()
+ : pStorage(new Le_Storage)
+{
+}
+
+LocationAdmin::~LocationAdmin()
+{
+}
+
+Root &
+LocationAdmin::CheckIn_Root(const csv::ploc::Path & i_path)
+{
+ Dyn<Root>
+ p_new( new Root(i_path) );
+
+ Le_id
+ id = Storage().RootIndex().Search(p_new->LocalName());
+ if ( id.IsValid() )
+ {
+ return ary_cast<Root>(Storage()[id]);
+ }
+
+ Root *
+ ret = p_new.Ptr();
+ Storage().Store_Entity(*p_new.Release());
+ Storage().RootIndex().Add(ret->LeId());
+
+ Directory *
+ p_rootdir = new Directory(ret->LeId());
+ Storage().Store_Entity(*p_rootdir);
+ ret->Assign_Directory(p_rootdir->LeId());
+
+ return *ret;
+}
+
+File &
+LocationAdmin::CheckIn_File( const String & i_name,
+ const csv::ploc::DirectoryChain & i_subPath,
+ Le_id i_root )
+{
+ Root &
+ root = Find_Root(i_root);
+ Directory &
+ parent_dir = CheckIn_Directories(
+ Find_Directory(root.MyDir()),
+ i_subPath.Begin(),
+ i_subPath.End() );
+ Le_id
+ fid = parent_dir.Search_File(i_name);
+ if (NOT fid.IsValid())
+ {
+ File *
+ ret = new File(i_name, parent_dir.LeId());
+ Storage().Store_Entity(*ret);
+ parent_dir.Add_File(*ret);
+ return *ret;
+ }
+ else
+ {
+ return Find_File(fid);
+ }
+}
+
+Root &
+LocationAdmin::Find_Root(Le_id i_id) const
+{
+ return ary_cast<Root>(Storage()[i_id]);
+}
+
+Directory &
+LocationAdmin::Find_Directory(Le_id i_id) const
+{
+ return ary_cast<Directory>(Storage()[i_id]);
+}
+
+File &
+LocationAdmin::Find_File(Le_id i_id) const
+{
+ return ary_cast<File>(Storage()[i_id]);
+}
+
+Directory &
+LocationAdmin::CheckIn_Directory( Directory & io_parent,
+ const String & i_name )
+{
+ Le_id
+ did = io_parent.Search_Dir(i_name);
+ if (NOT did.IsValid())
+ {
+ Directory *
+ ret = new Directory(i_name, io_parent.LeId());
+ Storage().Store_Entity(*ret);
+ io_parent.Add_Dir(*ret);
+ return *ret;
+ }
+ else
+ {
+ return Find_Directory(did);
+ }
+}
+
+Directory &
+LocationAdmin::CheckIn_Directories(
+ Directory & io_root,
+ StringVector::const_iterator i_beginSubPath,
+ StringVector::const_iterator i_endSubPath )
+{
+ if (i_beginSubPath == i_endSubPath)
+ return io_root;
+
+ Directory &
+ next = CheckIn_Directory(io_root, *i_beginSubPath);
+ return CheckIn_Directories(next, i_beginSubPath+1, i_endSubPath);
+}
+
+
+} // namespace loc
+} // namespace ary
diff --git a/autodoc/source/ary/loc/loca_le.hxx b/autodoc/source/ary/loc/loca_le.hxx
new file mode 100644
index 000000000000..a898f34c104f
--- /dev/null
+++ b/autodoc/source/ary/loc/loca_le.hxx
@@ -0,0 +1,98 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_LOC_LOCA_LE_HXX
+#define ARY_LOC_LOCA_LE_HXX
+
+// BASE CLASSES
+#include <ary/loc/locp_le.hxx>
+
+namespace ary
+{
+namespace loc
+{
+ class Le_Storage;
+}
+}
+
+
+
+
+namespace ary
+{
+namespace loc
+{
+
+
+/** Provides access to files and directories stored in the
+ repository.
+*/
+class LocationAdmin : public LocationPilot
+{
+ public:
+ LocationAdmin();
+ virtual ~LocationAdmin();
+
+ // INHERITED
+ // Interface LocationPilot:
+ virtual Root & CheckIn_Root(
+ const csv::ploc::Path &
+ i_rPath );
+ virtual File & CheckIn_File(
+ const String & i_name,
+ const csv::ploc::DirectoryChain &
+ i_subPath,
+ Le_id i_root );
+
+ virtual Root & Find_Root(
+ Le_id i_id ) const;
+ virtual Directory & Find_Directory(
+ Le_id i_id ) const;
+ virtual File & Find_File(
+ Le_id i_id ) const;
+ private:
+ // Locals
+ Le_Storage & Storage() const;
+ Directory & CheckIn_Directory(
+ Directory & io_parent,
+ const String & i_name );
+ Directory & CheckIn_Directories(
+ Directory & io_root,
+ StringVector::const_iterator
+ i_beginSubPath,
+ StringVector::const_iterator
+ i_endSubPath );
+ // DATA
+ Dyn<Le_Storage> pStorage;
+};
+
+
+
+
+} // namespace loc
+} // namespace ary
+#endif
diff --git a/autodoc/source/ary/loc/locs_le.cxx b/autodoc/source/ary/loc/locs_le.cxx
new file mode 100644
index 000000000000..6031dc2c92d4
--- /dev/null
+++ b/autodoc/source/ary/loc/locs_le.cxx
@@ -0,0 +1,67 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "locs_le.hxx"
+
+// NOT FULLY DEFINED SERVICES
+
+
+namespace
+{
+ const uintt
+ C_nReservedElements = ary::loc::predefined::le_MAX; // Skipping "0"
+}
+
+
+
+namespace ary
+{
+namespace loc
+{
+
+Le_Storage * Le_Storage::pInstance_ = 0;
+
+
+
+
+Le_Storage::Le_Storage()
+ : stg::Storage<LocationEntity>(C_nReservedElements)
+{
+ csv_assert(pInstance_ == 0);
+ pInstance_ = this;
+}
+
+Le_Storage::~Le_Storage()
+{
+ csv_assert(pInstance_ != 0);
+ pInstance_ = 0;
+}
+
+
+} // namespace loc
+} // namespace ary
diff --git a/autodoc/source/ary/loc/locs_le.hxx b/autodoc/source/ary/loc/locs_le.hxx
new file mode 100644
index 000000000000..19301dffa2f2
--- /dev/null
+++ b/autodoc/source/ary/loc/locs_le.hxx
@@ -0,0 +1,88 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_LOC_LOCS_LE_HXX
+#define ARY_LOC_LOCS_LE_HXX
+
+// BASE CLASSES
+#include <store/s_storage.hxx>
+// USED SERVICES
+#include <cosv/tpl/tpltools.hxx>
+#include <ary/loc/loc_le.hxx>
+#include <ary/loc/loc_root.hxx>
+#include <sortedids.hxx>
+
+
+
+
+namespace ary
+{
+namespace loc
+{
+
+
+/** The data base for all ->ary::cpp::CodeEntity objects.
+*/
+class Le_Storage : public ::ary::stg::Storage<LocationEntity>
+{
+ public:
+ typedef SortedIds<Le_Compare> Index;
+
+ Le_Storage();
+ virtual ~Le_Storage();
+
+ const Index & RootIndex() const { return aRoots; }
+ Index & RootIndex() { return aRoots; }
+
+ static Le_Storage & Instance_() { csv_assert(pInstance_ != 0);
+ return *pInstance_; }
+ private:
+ // DATA
+ Index aRoots;
+
+ static Le_Storage * pInstance_;
+};
+
+
+
+
+namespace predefined
+{
+
+enum E_LocationEntity
+{
+ le_MAX = 1
+};
+
+} // namespace predefined
+
+
+
+
+} // namespace cpp
+} // namespace ary
+#endif
diff --git a/autodoc/source/ary/loc/makefile.mk b/autodoc/source/ary/loc/makefile.mk
new file mode 100644
index 000000000000..e4aa0e9b43f5
--- /dev/null
+++ b/autodoc/source/ary/loc/makefile.mk
@@ -0,0 +1,61 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..$/..$/..
+
+PRJNAME=autodoc
+TARGET=ary_loc
+
+
+
+# --- Settings -----------------------------------------------------
+
+ENABLE_EXCEPTIONS=true
+PRJINC=$(PRJ)$/source
+
+.INCLUDE : settings.mk
+.INCLUDE : $(PRJ)$/source$/mkinc$/fullcpp.mk
+
+
+
+# --- Files --------------------------------------------------------
+
+
+OBJFILES= \
+ $(OBJ)$/loc_dir.obj \
+ $(OBJ)$/loc_file.obj \
+ $(OBJ)$/loc_filebase.obj \
+ $(OBJ)$/loc_root.obj \
+ $(OBJ)$/loc_traits.obj \
+ $(OBJ)$/loca_le.obj \
+ $(OBJ)$/locs_le.obj
+
+
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : target.mk
diff --git a/autodoc/source/ary_i/kernel/ci_atag2.cxx b/autodoc/source/ary_i/kernel/ci_atag2.cxx
new file mode 100644
index 000000000000..d15a86f8aa9d
--- /dev/null
+++ b/autodoc/source/ary_i/kernel/ci_atag2.cxx
@@ -0,0 +1,57 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <ary_i/ci_atag2.hxx>
+
+
+// NOT FULLY DEFINED SERVICES
+#include <ary_i/disdocum.hxx>
+
+
+namespace ary
+{
+namespace inf
+{
+
+void DocuTag_Display::Display_TextToken(
+ const csi::dsapi::DT_TextToken & ) {}
+void DocuTag_Display::Display_White() {}
+void DocuTag_Display::Display_MupType(
+ const csi::dsapi::DT_MupType & ) {}
+void DocuTag_Display::Display_MupMember(
+ const csi::dsapi::DT_MupMember & ) {}
+void DocuTag_Display::Display_MupConst(
+ const csi::dsapi::DT_MupConst & ) {}
+void DocuTag_Display::Display_Style(
+ const csi::dsapi::DT_Style & ) {}
+void DocuTag_Display::Display_EOL() {}
+
+
+} // namespace inf
+} // namespace ary
+
diff --git a/autodoc/source/ary_i/kernel/ci_text2.cxx b/autodoc/source/ary_i/kernel/ci_text2.cxx
new file mode 100644
index 000000000000..37dbe4b159a8
--- /dev/null
+++ b/autodoc/source/ary_i/kernel/ci_text2.cxx
@@ -0,0 +1,139 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <ary_i/ci_text2.hxx>
+
+
+// NOT FULLY DEFINED SERVICES
+#include <ary_i/disdocum.hxx>
+#include <ary_i/d_token.hxx>
+
+
+namespace ary
+{
+namespace inf
+{
+
+DocuTex2::DocuTex2()
+{
+}
+
+DocuTex2::~DocuTex2()
+{
+ for ( TokenList::iterator iter = aTokens.begin();
+ iter != aTokens.end();
+ ++iter )
+ {
+ delete (*iter);
+ }
+}
+
+void
+DocuTex2::DisplayAt( DocumentationDisplay & o_rDisplay ) const
+{
+ for ( ary::inf::DocuTex2::TokenList::const_iterator
+ iter = aTokens.begin();
+ iter != aTokens.end();
+ ++iter )
+ {
+ (*iter)->DisplayAt(o_rDisplay);
+ }
+}
+
+void
+DocuTex2::AddToken( DYN DocuToken & let_drToken )
+{
+ if (aTokens.empty())
+ {
+ if (let_drToken.IsWhiteOnly())
+ return;
+ }
+ aTokens.push_back(&let_drToken);
+}
+
+bool
+DocuTex2::IsEmpty() const
+{
+ for ( ary::inf::DocuTex2::TokenList::const_iterator
+ iter = aTokens.begin();
+ iter != aTokens.end();
+ ++iter )
+ {
+ return false;
+ }
+ return true;
+}
+
+using csi::dsapi::DT_TextToken;
+
+const String &
+DocuTex2::TextOfFirstToken() const
+{
+ if (NOT aTokens.empty())
+ {
+ const DT_TextToken *
+ pTok = dynamic_cast< const DT_TextToken* >(*aTokens.begin());
+
+ if (pTok != 0)
+ return pTok->GetTextStr();
+ }
+ return String::Null_();
+}
+
+String &
+DocuTex2::Access_TextOfFirstToken()
+{
+ if (NOT aTokens.empty())
+ {
+ DT_TextToken *
+ pTok = dynamic_cast< DT_TextToken* >(*aTokens.begin());
+
+ if (pTok != 0)
+ return pTok->Access_Text();
+ }
+
+ static String sDummy_;
+ return sDummy_;
+}
+
+
+
+void DocuText_Display::Display_StdAtTag(
+ const csi::dsapi::DT_StdAtTag & ) {}
+void DocuText_Display::Display_SeeAlsoAtTag(
+ const csi::dsapi::DT_SeeAlsoAtTag & ) {}
+void DocuText_Display::Display_ParameterAtTag(
+ const csi::dsapi::DT_ParameterAtTag & ) {}
+void DocuText_Display::Display_SinceAtTag(
+ const csi::dsapi::DT_SinceAtTag & ) {}
+
+
+
+} // namespace inf
+} // namespace ary
+
diff --git a/autodoc/source/ary_i/kernel/d_token.cxx b/autodoc/source/ary_i/kernel/d_token.cxx
new file mode 100644
index 000000000000..469c553c965c
--- /dev/null
+++ b/autodoc/source/ary_i/kernel/d_token.cxx
@@ -0,0 +1,187 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <ary_i/d_token.hxx>
+
+
+// NOT FULLY DEFINED SERVICES
+#include <ary_i/disdocum.hxx>
+
+
+
+
+namespace csi
+{
+namespace dsapi
+{
+
+bool
+DT_Dsapi::IsWhiteOnly() const
+{
+ return false;
+}
+
+DT_TextToken::~DT_TextToken()
+{
+}
+
+void
+DT_TextToken::DisplayAt( DocumentationDisplay & o_rDisplay ) const
+{
+ o_rDisplay.Display_TextToken( *this );
+}
+
+bool
+DT_TextToken::IsWhiteOnly() const
+{
+ for ( const char * it = sText.c_str();
+ static_cast<UINT8>(*it) > 32;
+ ++it )
+ {
+ return false;
+ }
+ return true;
+}
+
+DT_White::~DT_White()
+{
+}
+
+void
+DT_White::DisplayAt( DocumentationDisplay & o_rDisplay ) const
+{
+ o_rDisplay.Display_White();
+}
+
+bool
+DT_White::IsWhiteOnly() const
+{
+ return true;
+}
+
+DT_MupType::~DT_MupType()
+{
+}
+
+void
+DT_MupType::DisplayAt( DocumentationDisplay & o_rDisplay ) const
+{
+ o_rDisplay.Display_MupType( *this );
+}
+
+DT_MupMember::~DT_MupMember()
+{
+}
+
+void
+DT_MupMember::DisplayAt( DocumentationDisplay & o_rDisplay ) const
+{
+ o_rDisplay.Display_MupMember( *this );
+}
+
+DT_MupConst::~DT_MupConst()
+{
+}
+
+void
+DT_MupConst::DisplayAt( DocumentationDisplay & o_rDisplay ) const
+{
+ o_rDisplay.Display_MupConst( *this );
+}
+
+DT_Style::~DT_Style()
+{
+}
+
+void
+DT_Style::DisplayAt( DocumentationDisplay & o_rDisplay ) const
+{
+ o_rDisplay.Display_Style( *this );
+}
+
+DT_EOL::~DT_EOL()
+{
+}
+
+void
+DT_EOL::DisplayAt( DocumentationDisplay & o_rDisplay ) const
+{
+ o_rDisplay.Display_EOL();
+}
+
+bool
+DT_EOL::IsWhiteOnly() const
+{
+ return true;
+}
+
+DT_StdAtTag::~DT_StdAtTag()
+{
+}
+
+void
+DT_StdAtTag::DisplayAt( DocumentationDisplay & o_rDisplay ) const
+{
+ o_rDisplay.Display_StdAtTag( *this );
+}
+
+DT_SeeAlsoAtTag::~DT_SeeAlsoAtTag()
+{
+}
+
+void
+DT_SeeAlsoAtTag::DisplayAt( DocumentationDisplay & o_rDisplay ) const
+{
+ o_rDisplay.Display_SeeAlsoAtTag( *this );
+}
+
+DT_ParameterAtTag::~DT_ParameterAtTag()
+{
+}
+
+void
+DT_ParameterAtTag::DisplayAt( DocumentationDisplay & o_rDisplay ) const
+{
+ o_rDisplay.Display_ParameterAtTag( *this );
+}
+
+DT_SinceAtTag::~DT_SinceAtTag()
+{
+}
+
+void
+DT_SinceAtTag::DisplayAt( DocumentationDisplay & o_rDisplay ) const
+{
+ o_rDisplay.Display_SinceAtTag( *this );
+}
+
+
+
+
+} // namespace dsapi
+} // namespace csi
diff --git a/autodoc/source/ary_i/kernel/makefile.mk b/autodoc/source/ary_i/kernel/makefile.mk
new file mode 100644
index 000000000000..79675bc03c81
--- /dev/null
+++ b/autodoc/source/ary_i/kernel/makefile.mk
@@ -0,0 +1,60 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..$/..$/..
+
+PRJNAME=autodoc
+TARGET=ary2_cinfo
+
+
+
+# --- Settings -----------------------------------------------------
+
+ENABLE_EXCEPTIONS=true
+PRJINC=$(PRJ)$/source
+
+.INCLUDE : settings.mk
+.INCLUDE : $(PRJ)$/source$/mkinc$/fullcpp.mk
+
+
+
+# --- Files --------------------------------------------------------
+
+
+OBJFILES= \
+ $(OBJ)$/ci_atag2.obj \
+ $(OBJ)$/ci_text2.obj \
+ $(OBJ)$/d_token.obj
+
+
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : target.mk
+
+
+
diff --git a/autodoc/source/display/html/aryattrs.cxx b/autodoc/source/display/html/aryattrs.cxx
new file mode 100644
index 000000000000..7b0fcea14cd7
--- /dev/null
+++ b/autodoc/source/display/html/aryattrs.cxx
@@ -0,0 +1,248 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "aryattrs.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include <ary/getncast.hxx>
+#include <ary/cpp/c_class.hxx>
+#include <ary/cpp/c_enum.hxx>
+#include <ary/cpp/c_funct.hxx>
+#include <ary/cpp/c_gate.hxx>
+#include <ary/cpp/c_namesp.hxx>
+#include <ary/cpp/cp_ce.hxx>
+#include <ary/cpp/cp_type.hxx>
+#include "strconst.hxx"
+
+
+
+
+//******************** HtmlDisplay_Impl *********************//
+
+const char *
+Get_ClassTypeKey( const ary::cpp::Class & i_rClass )
+{
+ return i_rClass.ClassKey() == ary::cpp::CK_class
+ ? C_sHFTypeTitle_Class
+ : i_rClass.ClassKey() == ary::cpp::CK_struct
+ ? C_sHFTypeTitle_Struct
+ : C_sHFTypeTitle_Union;
+
+}
+
+const char *
+Get_TypeKey( const ary::cpp::CodeEntity & i_rCe )
+{
+ if ( ary::is_type<ary::cpp::Class>(i_rCe) )
+ {
+ return Get_ClassTypeKey(
+ ary::ary_cast<ary::cpp::Class>(i_rCe) );
+ }
+ if ( ary::is_type<ary::cpp::Enum>(i_rCe) )
+ {
+ return "enum";
+ }
+ return "";
+}
+
+bool
+Ce_IsInternal( const ary::cpp::CodeEntity & i_rCe )
+{
+ return NOT i_rCe.IsVisible();
+}
+
+const char *
+SyntaxText_PreName( const ary::cpp::Function & i_rFunction,
+ const ary::cpp::Gate & i_rAryGate )
+{
+ static StreamStr sResult( 150 );
+ sResult.seekp(0);
+
+ // write pre-name:
+ const ary::cpp::FunctionFlags & rFlags = i_rFunction.Flags();
+ if ( rFlags.IsStaticLocal() OR rFlags.IsStaticMember() )
+ sResult << "static ";
+ if ( rFlags.IsExplicit() )
+ sResult << "explicit ";
+ if ( rFlags.IsMutable() )
+ sResult << "mutable ";
+ if ( i_rFunction.Virtuality() != ary::cpp::VIRTUAL_none )
+ sResult << "virtual ";
+ i_rAryGate.Types().Get_TypeText( sResult, i_rFunction.ReturnType() );
+ sResult << " ";
+
+ return sResult.c_str();
+}
+
+const char *
+SyntaxText_PostName( const ary::cpp::Function & i_rFunction,
+ const ary::cpp::Gate & i_rAryGate )
+{
+ static StreamStr sResult( 850 );
+ sResult.seekp(0);
+
+ // parameters and con_vol
+ i_rAryGate.Ces().Get_SignatureText( sResult, i_rFunction.Signature(), &i_rFunction.ParamInfos() );
+
+ // write Exceptions:
+ const std::vector< ary::cpp::Type_id > *
+ pThrow = i_rFunction.Exceptions();
+ if ( pThrow)
+ {
+
+ std::vector< ary::cpp::Type_id >::const_iterator
+ it = pThrow->begin();
+ std::vector< ary::cpp::Type_id >::const_iterator
+ it_end = pThrow->end();
+
+ if (it != it_end)
+ {
+ sResult << " throw( ";
+ i_rAryGate.Types().Get_TypeText(sResult, *it);
+
+ for ( ++it; it != it_end; ++it )
+ {
+ sResult << ", ";
+ i_rAryGate.Types().Get_TypeText(sResult, *it);
+ }
+ sResult << " )";
+ }
+ else
+ {
+ sResult << " throw( )";
+ }
+ } // endif // pThrow
+
+ // abstractness:
+ if ( i_rFunction.Virtuality() == ary::cpp::VIRTUAL_abstract )
+ sResult << " = 0";
+
+ // finish:
+ sResult << ";";
+
+ return sResult.c_str();
+}
+
+bool
+Get_TypeText( const char * & o_rPreName,
+ const char * & o_rName,
+ const char * & o_rPostName,
+ ary::cpp::Type_id i_nTypeid,
+ const ary::cpp::Gate & i_rAryGate )
+{
+ static StreamStr sResult_PreName(250);
+ static StreamStr sResult_Name(250);
+ static StreamStr sResult_PostName(250);
+
+ sResult_PreName.seekp(0);
+ sResult_Name.seekp(0);
+ sResult_PostName.seekp(0);
+
+ bool ret = i_rAryGate.Types().Get_TypeText(
+ sResult_PreName,
+ sResult_Name,
+ sResult_PostName,
+ i_nTypeid );
+ if ( sResult_PreName.tellp() > 0 )
+ {
+ char cLast = *( sResult_PreName.c_str() + (sResult_PreName.tellp() - 1) );
+ if (cLast != ':' AND cLast != ' ')
+ sResult_PreName << " ";
+ }
+
+
+ if (ret)
+ {
+ o_rPreName = sResult_PreName.c_str();
+ o_rName = sResult_Name.c_str();
+ o_rPostName = sResult_PostName.c_str();
+ }
+ else
+ {
+ o_rPreName = o_rName = o_rPostName = "";
+ }
+ return ret;
+}
+
+
+
+
+//********************* FunctionParam_Iterator *****************//
+
+
+FunctionParam_Iterator::FunctionParam_Iterator()
+ : // itTypes
+ // itTypes_end
+ // itNames_andMore
+ // itNames_andMore_end
+ eConVol(ary::cpp::CONVOL_none)
+{
+ static std::vector<ary::cpp::Type_id> aTypesNull_;
+ static StringVector aNamesNull_;
+
+ itTypes = itTypes_end = aTypesNull_.end();
+ itNames_andMore = itNames_andMore_end = aNamesNull_.end();
+}
+
+FunctionParam_Iterator::~FunctionParam_Iterator()
+{
+}
+
+FunctionParam_Iterator &
+FunctionParam_Iterator::operator++()
+{
+ if ( IsValid() )
+ {
+ ++itTypes;
+ ++itNames_andMore;
+ }
+ return *this;
+}
+
+void
+FunctionParam_Iterator::Assign( const ary::cpp::Function & i_rFunction )
+{
+ const ary::cpp::OperationSignature &
+ rSigna = i_rFunction.Signature();
+
+ const std::vector<ary::cpp::Type_id> &
+ rTypes = rSigna.Parameters();
+ const StringVector &
+ rNames = i_rFunction.ParamInfos();
+
+ if ( rTypes.size() != rNames.size() OR rTypes.size() == 0 )
+ return;
+
+ itTypes = rTypes.begin();
+ itTypes_end = rTypes.end();
+ itNames_andMore = rNames.begin();
+ itNames_andMore_end = rNames.end();
+
+ eConVol = rSigna.ConVol();
+}
diff --git a/autodoc/source/display/html/aryattrs.hxx b/autodoc/source/display/html/aryattrs.hxx
new file mode 100644
index 000000000000..053b445ac7eb
--- /dev/null
+++ b/autodoc/source/display/html/aryattrs.hxx
@@ -0,0 +1,154 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_DISPLAY_ARYATTRS_HXX
+#define ADC_DISPLAY_ARYATTRS_HXX
+
+// USED SERVICES
+#include <ary/cpp/c_types4cpp.hxx>
+#include <ary/doc/d_docu.hxx>
+#include <ary/doc/d_oldcppdocu.hxx>
+
+namespace ary
+{
+ namespace cpp
+ {
+ class CodeEntity;
+ class Class;
+ class DisplayGate;
+ class Function;
+ class Namespace;
+ }
+}
+
+
+
+
+const char * Get_ClassTypeKey(
+ const ary::cpp::Class & i_rClass );
+const char * Get_TypeKey(
+ const ary::cpp::CodeEntity &
+ i_rCe );
+bool Ce_IsInternal(
+ const ary::cpp::CodeEntity &
+ i_rCe );
+const char * SyntaxText_PreName(
+ const ary::cpp::Function &
+ i_rFunction,
+ const ary::cpp::Gate & i_rAryGate );
+const char * SyntaxText_PostName(
+ const ary::cpp::Function &
+ i_rFunction,
+ const ary::cpp::Gate & i_rAryGate );
+
+bool Get_TypeText(
+ const char * & o_rPreName,
+ const char * & o_rName,
+ const char * & o_rPostName,
+ ary::cpp::Type_id i_nTypeid,
+ const ary::cpp::Gate & i_rAryGate );
+
+
+inline const ary::doc::OldCppDocu *
+Get_CppDocu(const ary::doc::Documentation & i_doc)
+{
+ return dynamic_cast< const ary::doc::OldCppDocu* >(i_doc.Data());
+}
+
+
+class FunctionParam_Iterator
+{
+ public:
+ FunctionParam_Iterator();
+ ~FunctionParam_Iterator();
+
+ operator bool() const;
+ FunctionParam_Iterator &
+ operator++();
+
+ void Assign(
+ const ary::cpp::Function &
+ i_rFunction );
+
+ ary::cpp::Type_id
+ CurType() const;
+ const String & CurName() const;
+
+ bool IsFunctionConst() const;
+ bool IsFunctionVolatile() const;
+
+ private:
+ typedef std::vector<ary::cpp::Type_id>::const_iterator Type_Iterator;
+ typedef StringVector::const_iterator Name_Iterator;
+
+ bool IsValid() const;
+
+ // Forbidden
+ FunctionParam_Iterator &
+ operator++(int);
+ // DATA
+ Type_Iterator itTypes;
+ Type_Iterator itTypes_end;
+ Name_Iterator itNames_andMore; /// Name, init-value.
+ Name_Iterator itNames_andMore_end;
+
+ ary::cpp::E_ConVol eConVol;
+};
+
+
+
+
+// IMPLEMENTATION
+inline
+FunctionParam_Iterator::operator bool() const
+ { return IsValid(); }
+
+inline bool
+FunctionParam_Iterator::IsValid() const
+{
+ // By C'tor and Assign(), it is assured, that
+ // both iterators are valid, if one is valid.
+ return itTypes != itTypes_end;
+}
+
+inline ary::cpp::Type_id
+FunctionParam_Iterator::CurType() const
+ { return IsValid() ? *itTypes : ary::cpp::Type_id(0); }
+inline const String &
+FunctionParam_Iterator::CurName() const
+ { return IsValid() ? *itNames_andMore : String::Null_(); }
+inline bool
+FunctionParam_Iterator::IsFunctionConst() const
+ { return (eConVol & ary::cpp::CONVOL_const) != 0; }
+inline bool
+FunctionParam_Iterator::IsFunctionVolatile() const
+ { return (eConVol & ary::cpp::CONVOL_volatile) != 0; }
+
+
+
+
+#endif
diff --git a/autodoc/source/display/html/cfrstd.cxx b/autodoc/source/display/html/cfrstd.cxx
new file mode 100644
index 000000000000..3b45576c17ae
--- /dev/null
+++ b/autodoc/source/display/html/cfrstd.cxx
@@ -0,0 +1,344 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <cfrstd.hxx>
+
+
+// NOT FULLY DEFINED SERVICES
+#include <time.h>
+
+
+/* CSS Styles
+ ----------
+
+Colors:
+- light background color #eeeeff
+- dark background color #ccccff
+- self in navibar background color #2222ad
+
+
+Fonts:
+- page title 20, bold, Arial
+- navibar main 12, bold, Arial
+- navibar sub 8, Arial, kapitlchen
+- attrtable title line 8, bold, Arial, kapitlchen
+- attrtable value line 8, Arial kapitlchen
+
+- namespace chain 13, bold
+- table title 13, bold
+- template line 13
+
+- member paragraph title 12, bold
+
+- docu paragraph title 11, bold
+- standard text 11
+
+- hierarchy 11, monospace
+
+
+classes:
+
+ td.title page title
+ h3 table title
+ h4 member paragraph title
+
+ td.nmain navigation main bar
+ td.nsub navigation sub bar
+ a.nmain links in navigation main bar
+ a.nsub links in navigation sub bar
+
+ td.attr1 attribute table head line
+ td.attr2 attribute table value line
+
+ p.namechain namespace chain in head of pages
+ p.tpl template line in head of pages
+
+ pre.doc preformatted docu
+ pre.hierarchy class bases hierarchy graphic
+
+ dl.syntax function- or variable-declaration field
+ a.syntax link in function- or variable-declaration field
+
+ p.dt docu paragraph title
+ dl.dt docu paragraph title
+
+ p standard text
+ dl standard text
+ dd standard text
+*/
+
+
+#define CRLF "\n"
+
+namespace
+{
+
+bool bUse_OOoFrameDiv = true;
+
+
+//*************** These are used for IDL currently only! ********************
+
+const char * const C_sStdStyle =
+ "/*See bottom of file for explanations.*/"CRLF
+ CRLF
+ "body { background-color:#ffffff; }"CRLF
+ CRLF
+ "h3 { font-size:13pt; font-weight:bold;"CRLF
+ " margin-top:3pt; margin-bottom:1pt; }"CRLF
+ "p, dt, dd, pre { font-size:11pt;"CRLF
+ " margin-top:3pt; margin-bottom:1pt; }"CRLF
+ "pre { font-family:monospace; }"CRLF
+ CRLF
+ "table.navimain { background-color:#eeeeff; }"CRLF
+ "table.subtitle { margin-top:6pt; margin-bottom:6pt; }"CRLF
+ CRLF
+ "td { font-size:11pt; }"CRLF
+ "td.title { font-family: Arial; font-size:19pt; font-weight:bold;"CRLF
+ " line-height:30pt; background-color:#ccccff; text-align:center; }"CRLF
+ "td.subtitle { font-family: Arial; font-size:13pt;"CRLF
+ " line-height:20pt; background-color:#ccccff; }"CRLF
+ "td.crosstitle { font-size:12pt; font-weight:bold;"CRLF
+ " line-height:15pt; background-color:#eeeeff; }"CRLF
+ "td.imdetail { width:100%; background-color:#eeeeff; }"CRLF
+ CRLF
+ "td.imsum_left { width:30%; }"CRLF
+ "td.imsum_right { width:70%; }"CRLF
+ CRLF
+ "td.navimain, a.navimain"CRLF
+ " { text-align:center; font-family: Arial; font-size:12pt; font-weight:bold; }"CRLF
+ "td.navimainself { text-align:center; font-family: Arial; font-size:12pt; font-weight:bold;"CRLF
+ " color:#ffffff; background-color:#2222ad; }"CRLF
+ "td.navimainnone { text-align:center; font-family: Arial; font-size:12pt; }"CRLF
+ "td.navisub, a.navisub"CRLF
+ " { text-align:center; font-family: Arial; font-size:9pt; font-variant:small-caps; }"CRLF
+ "td.navimain, td.navisub"CRLF
+ " { padding-left:7pt; padding-right:7pt; }"CRLF
+ CRLF
+ "a.membertitle { font-size:12pt; font-weight:bold; line-height:18pt; }"CRLF
+ "a.navimain, a.navisub { color:#000000; }"CRLF
+ ".dt { font-weight:bold; }"CRLF
+ ".namechain { font-size:13pt; font-weight:bold;"CRLF
+ " margin-top:3pt; margin-bottom:6pt; }"CRLF
+ ".title2 { font-size:13pt; font-style:italic; font-weight:bold; text-align:left; }"CRLF
+ ;
+
+
+const char * const C_sCssExplanations =
+ "/* Explanation of CSS classes:"CRLF
+ CRLF
+ ".navimain Text in main navigation bar."CRLF
+ ".navisub Text in lower navigation bar."CRLF
+ "td.navimainself Cell in main navigation bar with \"selected\" shadow: You are here."CRLF
+ "td.navimainnone Cell in main navigation bar with no link."CRLF
+ CRLF
+ ".namechain Line with current module path."CRLF
+ CRLF
+ "td.crosstitle Comment box for bases (base interfaces etc.)"CRLF
+ "td.imsum_left Left part of such boxes."CRLF
+ "td.imsum_right Right part of such boxes."CRLF
+ CRLF
+ "td.title Main title of the page like \"interface XYz\""CRLF
+ ".subtitle Tables, and head cells of those, which list members"CRLF
+ " like \"method summary\" and \"method details\"."CRLF
+ CRLF
+ "td.imdetail Background table of method's detail description."CRLF
+ "a.membertitle Method name (as jump label) in method's detail"CRLF
+ " description."CRLF
+ ".title2 smaller font prefixes to page titles"CRLF
+ "*/"CRLF
+ ;
+
+const char * const C_sStdStyle_withDivFrame =
+ "/*See bottom of file for explanations.*/"CRLF
+ CRLF
+ "body { background-color:#ffffff; }"CRLF
+ CRLF
+ "#adc-idlref h3 { font-size:13pt; font-weight:bold;"CRLF
+ " margin-top:3pt; margin-bottom:1pt; }"CRLF
+ "#adc-idlref p, #adc-idlref dt, #adc-idlref dd, #adc-idlref pre"CRLF
+ " { font-size:11pt;"CRLF
+ " margin-top:3pt; margin-bottom:1pt; }"CRLF
+ "#adc-idlref pre { font-family:monospace; }"CRLF
+ CRLF
+ "#adc-idlref table.navimain { background-color:#eeeeff; }"CRLF
+ "#adc-idlref table.subtitle { margin-top:6pt; margin-bottom:6pt; }"CRLF
+ CRLF
+ "#adc-idlref td { font-size:11pt; }"CRLF
+ "#adc-idlref td.title { font-family: Arial; font-size:19pt; font-weight:bold;"CRLF
+ " line-height:30pt; background-color:#ccccff; text-align:center; }"CRLF
+ "#adc-idlref td.subtitle { font-family: Arial; font-size:13pt;"CRLF
+ " line-height:20pt; background-color:#ccccff; }"CRLF
+ "#adc-idlref td.crosstitle { font-size:12pt; font-weight:bold;"CRLF
+ " line-height:15pt; background-color:#eeeeff; }"CRLF
+ "#adc-idlref td.imdetail { width:100%; background-color:#eeeeff; }"CRLF
+ CRLF
+ "#adc-idlref td.imsum_left { width:30%; }"CRLF
+ "#adc-idlref td.imsum_right { width:70%; }"CRLF
+ CRLF
+ "#adc-idlref td.navimain, #adc-idlref a.navimain"CRLF
+ " { text-align:center; font-family: Arial; font-size:12pt; font-weight:bold; }"CRLF
+ "#adc-idlref td.navimainself { text-align:center; font-family: Arial; font-size:12pt; font-weight:bold;"CRLF
+ " color:#ffffff; background-color:#2222ad; }"CRLF
+ "#adc-idlref td.navimainnone { text-align:center; font-family: Arial; font-size:12pt; }"CRLF
+ "#adc-idlref td.navisub, #adc-idlref a.navisub"CRLF
+ " { text-align:center; font-family: Arial; font-size:9pt; font-variant:small-caps; }"CRLF
+ "#adc-idlref td.navimain, #adc-idlref td.navisub"CRLF
+ " { padding-left:7pt; padding-right:7pt; }"CRLF
+ CRLF
+ "#adc-idlref a.membertitle { font-size:12pt; font-weight:bold; line-height:18pt; }"CRLF
+ "#adc-idlref a.navimain, #adc-idlref a.navisub { color:#000000; }"CRLF
+ "#adc-idlref .dt { font-weight:bold; }"CRLF
+ "#adc-idlref .namechain { font-size:13pt; font-weight:bold;"CRLF
+ " margin-top:3pt; margin-bottom:6pt; }"CRLF
+ "#adc-idlref .title2 { font-size:13pt; font-style:italic; font-weight:bold; text-align:left; }"CRLF
+ ""CRLF
+ "#adc-idlref table { empty-cells:show; }"CRLF
+ ""CRLF
+ "#adc-idlref .childlist td, "CRLF
+ "#adc-idlref .commentedlinks td, "CRLF
+ "#adc-idlref .memberlist td, "CRLF
+ "#adc-idlref .subtitle td, "CRLF
+ "#adc-idlref .crosstitle td { border: .1pt solid #000000; }"CRLF
+ ""CRLF
+ "#adc-idlref .flag-table td { border: .1pt solid #cccccc; } "CRLF
+ ""CRLF
+ "#adc-idlref .title-table td, "CRLF
+ "#adc-idlref .table-in-method td, "CRLF
+ "#adc-idlref .table-in-data td, "CRLF
+ "#adc-idlref .navimain td, "CRLF
+ "#adc-idlref .navisub td, "CRLF
+ "#adc-idlref .expl-table td, "CRLF
+ "#adc-idlref .param-table td { border: none; }"CRLF
+ ;
+
+
+} // anonymous namespace
+
+
+StdFrame::StdFrame()
+ : sDevelopersGuideHtmlRoot(),
+ bSimpleLinks(false)
+{
+}
+
+DYN Html_Image *
+StdFrame::LogoSrc() const
+{
+ return 0;
+
+// return new Html_Image( "logodot-blu.gif",
+// "109",
+// "54",
+// "RIGHT",
+// "0",
+// "OpenOffice" );
+
+}
+
+const char *
+StdFrame::LogoLink() const
+{
+ return "";
+// return "http://www.sun.com";
+// return "http://www.openoffice.org";
+}
+
+
+String MakeCopyRight();
+
+const char *
+StdFrame::CopyrightText() const
+{
+ static String sCopyRight_( MakeCopyRight() );
+ return sCopyRight_.c_str();
+}
+
+const char *
+StdFrame::CssStyle() const
+{
+ if (bUse_OOoFrameDiv)
+ return C_sStdStyle_withDivFrame;
+ else
+ return C_sStdStyle;
+}
+
+const char *
+StdFrame::CssStylesExplanation() const
+{
+ return C_sCssExplanations;
+}
+
+const char *
+StdFrame::DevelopersGuideHtmlRoot() const
+{
+ return sDevelopersGuideHtmlRoot;
+}
+
+bool
+StdFrame::SimpleLinks() const
+{
+ return bSimpleLinks;
+}
+
+void
+StdFrame::Set_DevelopersGuideHtmlRoot( const String & i_directory )
+{
+ if (NOT i_directory.empty())
+ {
+ if (i_directory.char_at(i_directory.length()-1) == '/')
+ {
+ sDevelopersGuideHtmlRoot.assign(i_directory,i_directory.length()-1);
+ return;
+ }
+ }
+ sDevelopersGuideHtmlRoot = i_directory;
+}
+
+void
+StdFrame::Set_SimpleLinks()
+{
+ bSimpleLinks = true;
+}
+
+String
+MakeCopyRight()
+{
+ StreamStr cr(700);
+ time_t
+ gt;
+ time(&gt);
+ tm *
+ plt = localtime(&gt);
+ int year = 1900 + plt->tm_year;
+
+ cr << "Copyright &copy; 1995, "
+ << year
+ << ", Oracle and/or its affiliates. All rights reserved. Oracle and Java are registered trademarks of Oracle and/or its affiliates. Other names may be trademarks of their respective owners.";
+ return String(cr.c_str());
+
+}
diff --git a/autodoc/source/display/html/chd_udk2.cxx b/autodoc/source/display/html/chd_udk2.cxx
new file mode 100644
index 000000000000..f03a9a297c40
--- /dev/null
+++ b/autodoc/source/display/html/chd_udk2.cxx
@@ -0,0 +1,201 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <html/chd_udk2.hxx>
+
+
+// NOT FULLY DEFINED SERVICES
+#include <cosv/tpl/tpltools.hxx>
+#include <ary/ary_disp.hxx>
+#include <ary/ceslot.hxx>
+#include <ary/cpp/c_gate.hxx>
+#include <ary/cpp/c_namesp.hxx>
+#include <ary/cpp/cp_ce.hxx>
+
+#include "dsply_cl.hxx"
+#include "dsply_da.hxx"
+#include "dsply_op.hxx"
+#include "opageenv.hxx"
+#include "outfile.hxx"
+#include "pagemake.hxx"
+
+
+
+//******************** CppHtmlDisplay_Udk2 ********************//
+
+
+CppHtmlDisplay_Udk2::CppHtmlDisplay_Udk2()
+ : pCurPageEnv(0)
+{
+}
+
+CppHtmlDisplay_Udk2::~CppHtmlDisplay_Udk2()
+{
+}
+
+void
+CppHtmlDisplay_Udk2::do_Run( const char * i_sOutputDirectory,
+ const ary::cpp::Gate & i_rAryGate,
+ const display::CorporateFrame & i_rLayout )
+{
+ SetRunData( i_sOutputDirectory, i_rAryGate, i_rLayout );
+
+ Create_Css_File();
+ Create_Overview_File();
+ Create_Help_File();
+ Create_AllDefs_File();
+
+ CreateFiles_InSubTree_Namespaces();
+ CreateFiles_InSubTree_Index();
+}
+
+void
+CppHtmlDisplay_Udk2::SetRunData( const char * i_sOutputDirectory,
+ const ary::cpp::Gate & i_rAryGate,
+ const display::CorporateFrame & i_rLayout )
+{
+ csv::ploc::Path aOutputDir( i_sOutputDirectory, true );
+ pCurPageEnv = new OuputPage_Environment( aOutputDir, i_rAryGate, i_rLayout );
+}
+
+void
+CppHtmlDisplay_Udk2::Create_Css_File()
+{
+ pCurPageEnv->MoveDir_2Root();
+ pCurPageEnv->SetFile_Css();
+ HtmlDocuFile::WriteCssFile(pCurPageEnv->CurPath());
+}
+
+void
+CppHtmlDisplay_Udk2::Create_Overview_File()
+{
+ pCurPageEnv->MoveDir_2Root();
+ PageDisplay aPageMaker( *pCurPageEnv );
+ aPageMaker.Create_OverviewFile();
+}
+
+void
+CppHtmlDisplay_Udk2::Create_Help_File()
+{
+ PageDisplay aPageMaker( *pCurPageEnv );
+ aPageMaker.Create_HelpFile();
+}
+
+void
+CppHtmlDisplay_Udk2::Create_AllDefs_File()
+{
+ PageDisplay aPageMaker( *pCurPageEnv );
+ aPageMaker.Create_AllDefsFile();
+}
+
+void
+CppHtmlDisplay_Udk2::CreateFiles_InSubTree_Namespaces()
+{
+ Cout() << "\nCreate files in subtree namespaces" << Endl();
+
+ const ary::cpp::Namespace &
+ rGlobalNsp = Gate().Ces().GlobalNamespace();
+
+ RecursiveDisplay_Namespace(rGlobalNsp);
+ Cout() << Endl();
+}
+
+void
+CppHtmlDisplay_Udk2::CreateFiles_InSubTree_Index()
+{
+ Cout() << "\nCreate files in subtree index" << Endl();
+ Cout() << Endl();
+
+ PageDisplay aPageMaker( *pCurPageEnv );
+ aPageMaker.Create_IndexFiles();
+}
+
+void
+CppHtmlDisplay_Udk2::RecursiveDisplay_Namespace( const ary::cpp::Namespace & i_rNsp )
+{
+ if (i_rNsp.Owner().IsValid())
+ pCurPageEnv->MoveDir_Down2( i_rNsp );
+ else
+ pCurPageEnv->MoveDir_2Names();
+ DisplayFiles_InNamespace( i_rNsp );
+
+ typedef std::vector< const ary::cpp::Namespace* > NspList;
+ NspList aSubNspList;
+ i_rNsp.Get_SubNamespaces( aSubNspList );
+ for ( NspList::const_iterator it = aSubNspList.begin();
+ it != aSubNspList.end();
+ ++it )
+ {
+ RecursiveDisplay_Namespace( *(*it) );
+ } // end for
+
+ pCurPageEnv->MoveDir_Up();
+}
+
+void
+CppHtmlDisplay_Udk2::DisplayFiles_InNamespace( const ary::cpp::Namespace & i_rNsp )
+{
+ PageDisplay aPageMaker( *pCurPageEnv );
+
+ ary::Slot_AutoPtr pSlot;
+
+ // Namespace
+ aPageMaker.Create_NamespaceFile();
+
+ // Classes
+ ClassDisplayer aClassDisplayer( *pCurPageEnv );
+ DisplaySlot( aClassDisplayer, i_rNsp, ary::cpp::Namespace::SLOT_Classes );
+
+ // Enums
+ DisplaySlot( aPageMaker, i_rNsp, ary::cpp::Namespace::SLOT_Enums );
+
+ // Typedefs
+ DisplaySlot( aPageMaker, i_rNsp, ary::cpp::Namespace::SLOT_Typedefs );
+
+ // Operations
+ OperationsDisplay aOperationsDisplayer( *pCurPageEnv );
+ DisplaySlot( aOperationsDisplayer, i_rNsp, ary::cpp::Namespace::SLOT_Operations );
+ aOperationsDisplayer.Create_Files();
+
+ // Data
+ DataDisplay aDataDisplayer( *pCurPageEnv );
+
+ aDataDisplayer.PrepareForConstants();
+ DisplaySlot( aDataDisplayer, i_rNsp, ary::cpp::Namespace::SLOT_Constants );
+
+ aDataDisplayer.PrepareForVariables();
+ DisplaySlot( aDataDisplayer, i_rNsp, ary::cpp::Namespace::SLOT_Variables );
+
+ aDataDisplayer.Create_Files();
+}
+
+const ary::cpp::Gate &
+CppHtmlDisplay_Udk2::Gate() const
+{
+ return pCurPageEnv->Gate();
+}
diff --git a/autodoc/source/display/html/cre_link.cxx b/autodoc/source/display/html/cre_link.cxx
new file mode 100644
index 000000000000..688464d53969
--- /dev/null
+++ b/autodoc/source/display/html/cre_link.cxx
@@ -0,0 +1,269 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "cre_link.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include <ary/cpp/c_class.hxx>
+#include <ary/cpp/c_define.hxx>
+#include <ary/cpp/c_enum.hxx>
+#include <ary/cpp/c_enuval.hxx>
+#include <ary/cpp/c_funct.hxx>
+#include <ary/cpp/c_gate.hxx>
+#include <ary/cpp/c_macro.hxx>
+#include <ary/cpp/c_namesp.hxx>
+#include <ary/cpp/c_tydef.hxx>
+#include <ary/cpp/c_vari.hxx>
+#include <ary/cpp/cp_ce.hxx>
+#include <ary/loc/loc_file.hxx>
+#include <ary/loc/locp_le.hxx>
+#include "hdimpl.hxx"
+#include "opageenv.hxx"
+#include "strconst.hxx"
+
+
+
+
+
+LinkCreator::LinkCreator( char * o_rOutput,
+ uintt i_nOutputSize )
+ : pOut(o_rOutput),
+ nOutMaxSize(i_nOutputSize),
+ pEnv(0)
+{
+}
+
+LinkCreator::~LinkCreator()
+{
+}
+
+void
+LinkCreator::do_Process( const ary::cpp::Namespace & i_rData )
+{
+ Create_PrePath( i_rData );
+ strcat( pOut, "index.html" ); // KORR_FUTURE // SAFE STRCAT (#100211# - checked)
+}
+
+void
+LinkCreator::do_Process( const ary::cpp::Class & i_rData )
+{
+ Create_PrePath( i_rData );
+ strcat( pOut, ClassFileName(i_rData.LocalName().c_str()) ); // SAFE STRCAT (#100211# - checked)
+}
+
+void
+LinkCreator::do_Process( const ary::cpp::Enum & i_rData )
+{
+ Create_PrePath( i_rData );
+ strcat( pOut, EnumFileName(i_rData.LocalName().c_str()) ); // SAFE STRCAT (#100211# - checked)
+}
+
+void
+LinkCreator::do_Process( const ary::cpp::Typedef & i_rData )
+{
+ Create_PrePath( i_rData );
+ strcat( pOut, TypedefFileName(i_rData.LocalName().c_str()) ); // SAFE STRCAT (#100211# - checked)
+}
+
+void
+LinkCreator::do_Process( const ary::cpp::Function & i_rData )
+{
+ Create_PrePath( i_rData );
+
+ if ( i_rData.Protection() != ary::cpp::PROTECT_global )
+ {
+ strcat( pOut, "o.html" ); // SAFE STRCAT (#100211# - checked)
+ }
+ else
+ {
+ csv_assert(i_rData.Location().IsValid());
+ const ary::loc::File &
+ rFile = pEnv->Gate().Locations().Find_File(i_rData.Location());
+ strcat( pOut, HtmlFileName("o-", rFile.LocalName().c_str()) ); // SAFE STRCAT (#100211# - checked)
+ }
+
+ csv_assert(pEnv != 0);
+ strcat( pOut, OperationLink(pEnv->Gate(), i_rData.LocalName(), i_rData.CeId()) ); // SAFE STRCAT (#100211# - checked)
+}
+
+void
+LinkCreator::do_Process( const ary::cpp::Variable & i_rData )
+{
+ Create_PrePath( i_rData );
+
+ if ( i_rData.Protection() != ary::cpp::PROTECT_global )
+ {
+ strcat( pOut, "d.html" ); // SAFE STRCAT (#100211# - checked)
+ }
+ else
+ {
+ csv_assert(i_rData.Location().IsValid());
+ const ary::loc::File &
+ rFile = pEnv->Gate().Locations().Find_File(i_rData.Location());
+ strcat( pOut, HtmlFileName("d-", rFile.LocalName().c_str()) ); // SAFE STRCAT (#100211# - checked)
+ }
+
+ strcat( pOut, DataLink(i_rData.LocalName()) ); // SAFE STRCAT (#100211# - checked)
+}
+
+void
+LinkCreator::do_Process( const ary::cpp::EnumValue & i_rData )
+{
+ const ary::cpp::CodeEntity *
+ pEnum = pEnv->Gate().Ces().Search_Ce(i_rData.Owner());
+ if (pEnum == 0)
+ return;
+
+ pEnum->Accept(*this);
+ strcat(pOut, "#"); // SAFE STRCAT (#100211# - checked)
+ strcat(pOut, i_rData.LocalName().c_str()); // SAFE STRCAT (#100211# - checked)
+}
+
+void
+LinkCreator::do_Process( const ary::cpp::Define & i_rData )
+{
+ // KORR_FUTURE
+ // Only valid from Index:
+
+ *pOut = '\0';
+ strcat(pOut, "../def-all.html#"); // SAFE STRCAT (#100211# - checked)
+ strcat(pOut, i_rData.LocalName().c_str()); // SAFE STRCAT (#100211# - checked)
+}
+
+void
+LinkCreator::do_Process( const ary::cpp::Macro & i_rData )
+{
+ // KORR_FUTURE
+ // Only valid from Index:
+
+ *pOut = '\0';
+ strcat(pOut, "../def-all.html#"); // SAFE STRCAT (#100211# - checked)
+ strcat(pOut, i_rData.LocalName().c_str()); // SAFE STRCAT (#100211# - checked)
+}
+
+
+namespace
+{
+
+class NameScope_const_iterator
+{
+ public:
+ NameScope_const_iterator(
+ ary::cpp::Ce_id i_nId,
+ const ary::cpp::Gate &
+ i_rGate );
+
+ operator bool() const { return pCe != 0; }
+ const String & operator*() const;
+
+ void go_up();
+
+ private:
+ const ary::cpp::CodeEntity *
+ pCe;
+ const ary::cpp::Gate *
+ pGate;
+};
+
+
+NameScope_const_iterator::NameScope_const_iterator(
+ ary::cpp::Ce_id i_nId,
+ const ary::cpp::Gate & i_rGate )
+ : pCe(i_rGate.Ces().Search_Ce(i_nId)),
+ pGate(&i_rGate)
+{
+}
+
+const String &
+NameScope_const_iterator::operator*() const
+{
+ return pCe ? pCe->LocalName()
+ : String::Null_();
+}
+
+void
+NameScope_const_iterator::go_up()
+{
+ if (pCe == 0)
+ return;
+ pCe = pGate->Ces().Search_Ce(pCe->Owner());
+}
+
+
+void Recursive_CreatePath(
+ char * o_pOut,
+ const NameScope_const_iterator &
+ i_it );
+
+void
+Recursive_CreatePath( char * o_pOut,
+ const NameScope_const_iterator & i_it )
+{
+ if (NOT i_it)
+ return;
+
+ NameScope_const_iterator it( i_it );
+ it.go_up();
+ if (NOT it)
+ return; // Global Namespace
+ Recursive_CreatePath( o_pOut, it );
+
+ strcat( o_pOut, (*i_it).c_str() ); // SAFE STRCAT (#100211# - checked)
+ strcat( o_pOut, "/" ); // SAFE STRCAT (#100211# - checked)
+}
+
+
+} // anonymous namespace
+
+
+
+
+
+void
+LinkCreator::Create_PrePath( const ary::cpp::CodeEntity & i_rData )
+{
+ *pOut = NULCH;
+
+ if ( pEnv->CurNamespace() != 0 )
+ {
+ if ( pEnv->CurClass()
+ ? pEnv->CurClass()->CeId() == i_rData.Owner()
+ : pEnv->CurNamespace()->CeId() == i_rData.Owner() )
+ return;
+
+ strcat( pOut, PathUp(pEnv->Depth() - 1) ); // SAFE STRCAT (#100211# - checked)
+ }
+ else
+ { // Within Index
+ strcat( pOut, "../names/" ); // SAFE STRCAT (#100211# - checked)
+ }
+
+ NameScope_const_iterator it( i_rData.Owner(), pEnv->Gate() );
+ Recursive_CreatePath( pOut, it );
+}
diff --git a/autodoc/source/display/html/cre_link.hxx b/autodoc/source/display/html/cre_link.hxx
new file mode 100644
index 000000000000..bd37e83384f4
--- /dev/null
+++ b/autodoc/source/display/html/cre_link.hxx
@@ -0,0 +1,133 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_DISPLAY_CRE_LINK_HXX
+#define ADC_DISPLAY_CRE_LINK_HXX
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <cosv/tpl/processor.hxx>
+ // COMPONENTS
+ // PARAMETERS
+
+namespace ary
+{
+namespace cpp
+{
+ class CodeEntity;
+ class Namespace;
+ class Class;
+ class Enum;
+ class Typedef;
+ class Function;
+ class Variable;
+ class EnumValue;
+ class Define;
+ class Macro;
+}
+}
+
+
+class OuputPage_Environment;
+
+
+
+/** Displays links to ->{ary::cpp::CodeEntity CodeEntites}.
+*/
+class LinkCreator : public csv::ProcessorIfc,
+ public csv::ConstProcessor<ary::cpp::Namespace>,
+ public csv::ConstProcessor<ary::cpp::Class>,
+ public csv::ConstProcessor<ary::cpp::Enum>,
+ public csv::ConstProcessor<ary::cpp::Typedef>,
+ public csv::ConstProcessor<ary::cpp::Function>,
+ public csv::ConstProcessor<ary::cpp::Variable>,
+ public csv::ConstProcessor<ary::cpp::EnumValue>,
+ public csv::ConstProcessor<ary::cpp::Define>,
+ public csv::ConstProcessor<ary::cpp::Macro>
+{
+ public:
+ LinkCreator(
+ char * o_rOutput,
+ uintt i_nOutputSize );
+ ~LinkCreator();
+
+
+ void SetEnv(
+ const OuputPage_Environment &
+ i_rEnv );
+ private:
+ void Create_PrePath(
+ const ary::cpp::CodeEntity &
+ i_rData );
+ // Interface csv::ConstProcessor<>
+ virtual void do_Process(
+ const ary::cpp::Namespace &
+ i_rData );
+ virtual void do_Process(
+ const ary::cpp::Class &
+ i_rData );
+ virtual void do_Process(
+ const ary::cpp::Enum &
+ i_rData );
+ virtual void do_Process(
+ const ary::cpp::Typedef &
+ i_rData );
+ virtual void do_Process(
+ const ary::cpp::Function &
+ i_rData );
+ virtual void do_Process(
+ const ary::cpp::Variable &
+ i_rData );
+ virtual void do_Process(
+ const ary::cpp::EnumValue &
+ i_rData );
+ virtual void do_Process(
+ const ary::cpp::Define &
+ i_rData );
+ virtual void do_Process(
+ const ary::cpp::Macro &
+ i_rData );
+ // DATA
+ char * pOut;
+ uintt nOutMaxSize;
+ const OuputPage_Environment *
+ pEnv;
+};
+
+
+
+
+// IMPLEMENTATION
+inline void
+LinkCreator::SetEnv( const OuputPage_Environment & i_rEnv )
+ { pEnv = &i_rEnv; }
+
+
+
+
+#endif
diff --git a/autodoc/source/display/html/dsply_cl.cxx b/autodoc/source/display/html/dsply_cl.cxx
new file mode 100644
index 000000000000..656bca79c2cf
--- /dev/null
+++ b/autodoc/source/display/html/dsply_cl.cxx
@@ -0,0 +1,108 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "dsply_cl.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include <ary/cpp/c_class.hxx>
+#include <ary/cpp/c_gate.hxx>
+#include "dsply_da.hxx"
+#include "dsply_op.hxx"
+#include "hdimpl.hxx"
+#include "opageenv.hxx"
+#include "pagemake.hxx"
+
+
+
+
+ClassDisplayer::ClassDisplayer( OuputPage_Environment & io_rEnv )
+ : pEnv(&io_rEnv)
+{
+}
+
+ClassDisplayer::~ClassDisplayer()
+{
+}
+
+void
+ClassDisplayer::DisplayFiles_InClass( const ary::cpp::Class & i_rData,
+ PageDisplay & io_rPageMaker )
+{
+ // Classes
+ ClassDisplayer aClassDisplayer( Env() );
+ DisplaySlot( aClassDisplayer, i_rData, ary::cpp::Class::SLOT_NestedClasses );
+
+ // Enums
+ DisplaySlot( io_rPageMaker, i_rData, ary::cpp::Class::SLOT_Enums );
+
+ // Typedefs
+ DisplaySlot( io_rPageMaker, i_rData, ary::cpp::Class::SLOT_Typedefs );
+
+ // Operations
+ OperationsDisplay aOperationsDisplayer( Env() );
+
+ aOperationsDisplayer.PrepareForStdMembers();
+ DisplaySlot( aOperationsDisplayer, i_rData, ary::cpp::Class::SLOT_Operations );
+
+ aOperationsDisplayer.PrepareForStaticMembers();
+ DisplaySlot( aOperationsDisplayer, i_rData, ary::cpp::Class::SLOT_StaticOperations );
+
+ aOperationsDisplayer.Create_Files();
+
+ // Data
+ DataDisplay aDataDisplayer( Env() );
+
+ aDataDisplayer.PrepareForStdMembers();
+ DisplaySlot( aDataDisplayer, i_rData, ary::cpp::Class::SLOT_Data );
+
+ aDataDisplayer.PrepareForStaticMembers();
+ DisplaySlot( aDataDisplayer, i_rData, ary::cpp::Class::SLOT_StaticData );
+
+ aDataDisplayer.Create_Files();
+}
+
+void
+ClassDisplayer::do_Process( const ary::cpp::Class & i_rData )
+{
+ if ( Ce_IsInternal(i_rData) )
+ return;
+
+ PageDisplay aPageMaker( Env() );
+ aPageMaker.Process(i_rData);
+
+ Env().MoveDir_Down2( i_rData );
+ DisplayFiles_InClass( i_rData, aPageMaker );
+ Env().MoveDir_Up();
+}
+
+const ary::cpp::Gate *
+ClassDisplayer::inq_Get_ReFinder() const
+{
+ return & pEnv->Gate();
+}
diff --git a/autodoc/source/display/html/dsply_cl.hxx b/autodoc/source/display/html/dsply_cl.hxx
new file mode 100644
index 000000000000..8f81e4f8c1b0
--- /dev/null
+++ b/autodoc/source/display/html/dsply_cl.hxx
@@ -0,0 +1,87 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_DISPLAY_HTML_HD_PAGE_HXX
+#define ADC_DISPLAY_HTML_HD_PAGE_HXX
+
+// BASE CLASSES
+#include <ary/ary_disp.hxx>
+#include <cosv/tpl/processor.hxx>
+// USED SERVICES
+#include <ary/types.hxx>
+
+class OuputPage_Environment;
+
+namespace ary
+{
+namespace cpp
+{
+ class Class;
+}
+}
+
+class PageDisplay;
+
+
+
+
+class ClassDisplayer : public ary::Display,
+ public csv::ConstProcessor<ary::cpp::Class>
+{
+ public:
+ ClassDisplayer( // TODO
+ OuputPage_Environment &
+ io_rEnv );
+ virtual ~ClassDisplayer();
+
+ private:
+ // Interface csv::ConstProcessor<>:
+ virtual void do_Process(
+ const ary::cpp::Class &
+ i_data );
+ // Interface ary::Display:
+ virtual const ary::cpp::Gate *
+ inq_Get_ReFinder() const;
+
+ // Locals
+ void DisplayFiles_InClass(
+ const ary::cpp::Class &
+ i_rData,
+ PageDisplay & io_rPageMaker );
+
+ OuputPage_Environment &
+ Env() { return *pEnv; }
+
+ // DATA
+ OuputPage_Environment *
+ pEnv;
+};
+
+
+
+
+#endif
diff --git a/autodoc/source/display/html/dsply_da.cxx b/autodoc/source/display/html/dsply_da.cxx
new file mode 100644
index 000000000000..4a8055f74d55
--- /dev/null
+++ b/autodoc/source/display/html/dsply_da.cxx
@@ -0,0 +1,199 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "dsply_da.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include <cosv/tpl/tpltools.hxx>
+#include <ary/cpp/c_gate.hxx>
+#include <ary/cpp/c_vari.hxx>
+#include <ary/doc/d_docu.hxx>
+#include <ary/loc/loc_file.hxx>
+#include <ary/loc/locp_le.hxx>
+#include <udm/html/htmlitem.hxx>
+#include "hd_docu.hxx"
+#include "hdimpl.hxx"
+#include "html_kit.hxx"
+#include "opageenv.hxx"
+#include "pagemake.hxx"
+
+
+using namespace csi;
+
+
+
+DataDisplay::DataDisplay( OuputPage_Environment & io_rEnv )
+ : aMap_GlobalDataDisplay(),
+ pClassMembersDisplay(0),
+ pEnv( &io_rEnv ),
+ pDocuShow( new Docu_Display(io_rEnv) )
+{
+}
+
+DataDisplay::~DataDisplay()
+{
+ csv::erase_map_of_heap_ptrs( aMap_GlobalDataDisplay );
+}
+
+void
+DataDisplay::PrepareForConstants()
+{
+ if (pClassMembersDisplay)
+ pClassMembersDisplay = 0;
+
+ csv::erase_map_of_heap_ptrs( aMap_GlobalDataDisplay );
+}
+
+void
+DataDisplay::PrepareForVariables()
+{
+ // Doesn't need to do anything yet.
+}
+
+void
+DataDisplay::PrepareForStdMembers()
+{
+ csv::erase_map_of_heap_ptrs( aMap_GlobalDataDisplay );
+
+ pClassMembersDisplay = new PageDisplay(*pEnv);
+ const ary::cpp::Class * pClass = pEnv->CurClass();
+ csv_assert( pClass != 0 );
+ pClassMembersDisplay->Setup_DataFile_for(*pClass);
+}
+
+void
+DataDisplay::PrepareForStaticMembers()
+{
+ // Doesn't need to do anything yet.
+}
+
+void
+DataDisplay::Create_Files()
+{
+ if (pClassMembersDisplay)
+ {
+ pClassMembersDisplay->Create_File();
+ pClassMembersDisplay = 0;
+ }
+ else
+ {
+ for ( Map_FileId2PagePtr::const_iterator it = aMap_GlobalDataDisplay.begin();
+ it != aMap_GlobalDataDisplay.end();
+ ++it )
+ {
+ (*it).second->Create_File();
+ }
+ csv::erase_map_of_heap_ptrs( aMap_GlobalDataDisplay );
+ }
+}
+
+void
+DataDisplay::do_Process( const ary::cpp::Variable & i_rData )
+{
+ if ( Ce_IsInternal(i_rData) )
+ return;
+
+ PageDisplay & rPage = FindPage_for( i_rData );
+
+ csi::xml::Element & rOut = rPage.CurOut();
+ Display_SglDatum( rOut, i_rData );
+}
+
+const ary::cpp::Gate *
+DataDisplay::inq_Get_ReFinder() const
+{
+ return & pEnv->Gate();
+}
+
+PageDisplay &
+DataDisplay::FindPage_for( const ary::cpp::Variable & i_rData )
+{
+ if ( pClassMembersDisplay )
+ return *pClassMembersDisplay;
+
+ SourceFileId
+ nSourceFile = i_rData.Location();
+ PageDisplay *
+ pFound = csv::value_from_map( aMap_GlobalDataDisplay, nSourceFile, (PageDisplay*)0 );
+ if ( pFound == 0 )
+ {
+ pFound = new PageDisplay( *pEnv );
+ const ary::loc::File &
+ rFile = pEnv->Gate().Locations().Find_File( nSourceFile );
+ pFound->Setup_DataFile_for(rFile);
+ aMap_GlobalDataDisplay[nSourceFile] = pFound;
+ }
+
+ return *pFound;
+}
+
+void
+DataDisplay::Display_SglDatum( csi::xml::Element & rOut,
+ const ary::cpp::Variable & i_rData )
+{
+ adcdisp::ExplanationList aDocu(rOut, true);
+ aDocu.AddEntry( 0 );
+
+ aDocu.Term()
+ >> *new html::Label( DataLabel(i_rData.LocalName()) )
+ << " ";
+ aDocu.Term()
+ << i_rData.LocalName();
+
+ dshelp::Get_LinkedTypeText( aDocu.Def(), *pEnv, i_rData.Type() );
+ aDocu.Def()
+ << " "
+ >> *new html::Strong
+ << i_rData.LocalName();
+ if ( i_rData.ArraySize().length() > 0 )
+ {
+ aDocu.Def()
+ << "["
+ << i_rData.ArraySize()
+ << "]";
+ }
+ if ( i_rData.Initialisation().length() > 0 )
+ {
+ aDocu.Def()
+ << " = "
+ << i_rData.Initialisation();
+ }
+ aDocu.Def()
+ << ";"
+ << new html::LineBreak
+ << new html::LineBreak;
+
+ aDocu.AddEntry_NoTerm();
+
+ pDocuShow->Assign_Out(aDocu.Def());
+ pDocuShow->Process(i_rData.Docu());
+ pDocuShow->Unassign_Out();
+
+ rOut << new html::HorizontalLine;
+}
diff --git a/autodoc/source/display/html/dsply_da.hxx b/autodoc/source/display/html/dsply_da.hxx
new file mode 100644
index 000000000000..f3cf563c0f72
--- /dev/null
+++ b/autodoc/source/display/html/dsply_da.hxx
@@ -0,0 +1,107 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_DISPLAY_HTML_DSPLY_DA_HXX
+#define ADC_DISPLAY_HTML_DSPLY_DA_HXX
+
+// BASE CLASSES
+#include <ary/ary_disp.hxx>
+#include <cosv/tpl/processor.hxx>
+// USED SERVICES
+#include <ary/cpp/c_ce.hxx>
+
+namespace ary
+{
+ namespace cpp
+ {
+ class Variable;
+ }
+}
+namespace csi
+{
+ namespace xml
+ {
+ class Element;
+ }
+}
+
+
+
+
+class OuputPage_Environment;
+class PageDisplay;
+class Docu_Display;
+
+class DataDisplay : public ary::Display,
+ public csv::ConstProcessor<ary::cpp::Variable>
+{
+ public:
+ DataDisplay(
+ OuputPage_Environment &
+ io_rInfo );
+ virtual ~DataDisplay();
+
+ void PrepareForConstants();
+ void PrepareForVariables();
+ void PrepareForStdMembers();
+ void PrepareForStaticMembers();
+
+ void Create_Files();
+
+ private:
+ // Interface csv::ConstProcessor<>:
+ virtual void do_Process(
+ const ary::cpp::Variable &
+ i_rData );
+ // Interface ary::cpp::Display:
+ virtual const ary::cpp::Gate *
+ inq_Get_ReFinder() const;
+
+ // Locals
+ typedef ary::cpp::Lid SourceFileId;
+ typedef std::map< SourceFileId, DYN PageDisplay* > Map_FileId2PagePtr;
+
+ PageDisplay & FindPage_for(
+ const ary::cpp::Variable &
+ i_rData );
+ void Display_SglDatum(
+ csi::xml::Element & rOut,
+ const ary::cpp::Variable &
+ i_rData );
+ // DATA
+ Map_FileId2PagePtr aMap_GlobalDataDisplay;
+ Dyn<PageDisplay> pClassMembersDisplay;
+
+ OuputPage_Environment *
+ pEnv;
+ Dyn<Docu_Display> pDocuShow;
+};
+
+
+
+
+#endif
diff --git a/autodoc/source/display/html/dsply_op.cxx b/autodoc/source/display/html/dsply_op.cxx
new file mode 100644
index 000000000000..1bae518aae18
--- /dev/null
+++ b/autodoc/source/display/html/dsply_op.cxx
@@ -0,0 +1,207 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "dsply_op.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include <cosv/tpl/tpltools.hxx>
+#include <ary/cpp/c_funct.hxx>
+#include <ary/cpp/c_gate.hxx>
+#include <ary/loc/locp_le.hxx>
+#include <udm/html/htmlitem.hxx>
+#include "hd_docu.hxx"
+#include "hdimpl.hxx"
+#include "html_kit.hxx"
+#include "opageenv.hxx"
+#include "pagemake.hxx"
+
+using namespace csi;
+using namespace adcdisp;
+
+
+
+
+OperationsDisplay::OperationsDisplay( OuputPage_Environment & io_rEnv )
+ : // aMap_GlobalFunctionsDisplay,
+ // pClassMembersDisplay,
+ pEnv( &io_rEnv ),
+ pDocuShow( new Docu_Display(io_rEnv) )
+{
+}
+
+OperationsDisplay::~OperationsDisplay()
+{
+ csv::erase_map_of_heap_ptrs( aMap_GlobalFunctionsDisplay );
+}
+
+void
+OperationsDisplay::PrepareForStdMembers()
+{
+ csv::erase_map_of_heap_ptrs( aMap_GlobalFunctionsDisplay );
+
+ pClassMembersDisplay = new PageDisplay(*pEnv);
+ const ary::cpp::Class * pClass = pEnv->CurClass();
+ csv_assert( pClass != 0 );
+ pClassMembersDisplay->Setup_OperationsFile_for(*pClass);
+}
+
+void
+OperationsDisplay::PrepareForStaticMembers()
+{
+ // Doesn't need to do anything yet.
+}
+
+void
+OperationsDisplay::Create_Files()
+{
+ if (pClassMembersDisplay)
+ pClassMembersDisplay->Create_File();
+ else
+ {
+ for ( Map_FileId2PagePtr::const_iterator it = aMap_GlobalFunctionsDisplay.begin();
+ it != aMap_GlobalFunctionsDisplay.end();
+ ++it )
+ {
+ (*it).second->Create_File();
+ }
+ }
+}
+
+void
+OperationsDisplay::do_Process( const ary::cpp::Function & i_rData )
+{
+ if ( Ce_IsInternal(i_rData) )
+ return;
+
+ PageDisplay & rPage = FindPage_for( i_rData );
+
+ csi::xml::Element & rOut = rPage.CurOut();
+ Display_SglOperation( rOut, i_rData );
+}
+
+const ary::cpp::Gate *
+OperationsDisplay::inq_Get_ReFinder() const
+{
+ return & pEnv->Gate();
+}
+
+PageDisplay &
+OperationsDisplay::FindPage_for( const ary::cpp::Function & i_rData )
+{
+ if ( pClassMembersDisplay )
+ return *pClassMembersDisplay;
+
+ SourceFileId
+ nSourceFile = i_rData.Location();
+ PageDisplay *
+ pFound = csv::value_from_map( aMap_GlobalFunctionsDisplay, nSourceFile, (PageDisplay*)0 );
+ if ( pFound == 0 )
+ {
+ pFound = new PageDisplay( *pEnv );
+ const ary::loc::File &
+ rFile = pEnv->Gate().Locations().Find_File( nSourceFile );
+ pFound->Setup_OperationsFile_for(rFile);
+ aMap_GlobalFunctionsDisplay[nSourceFile] = pFound;
+ }
+
+ return *pFound;
+}
+
+void
+OperationsDisplay::Display_SglOperation( csi::xml::Element & rOut,
+ const ary::cpp::Function & i_rData )
+{
+ adcdisp::ExplanationList aDocu(rOut, true);
+ aDocu.AddEntry( 0 );
+
+
+ adcdisp::OperationTitle fTitle;
+ fTitle( aDocu.Term(),
+ i_rData.LocalName(),
+ i_rData.CeId(),
+ pEnv->Gate() );
+
+ // Syntax
+ adcdisp::ExplanationList aSyntaxHeader(aDocu.Def());
+ aSyntaxHeader.AddEntry( 0, "simple" );
+ csi::xml::Element & rHeader = aSyntaxHeader.Term();
+
+ adcdisp::ParameterTable
+ aParams( aSyntaxHeader.Def() );
+
+ if (i_rData.TemplateParameters().size() > 0)
+ {
+ TemplateClause fTemplateClause;
+ fTemplateClause( rHeader, i_rData.TemplateParameters() );
+ rHeader << new html::LineBreak;
+ }
+ if ( i_rData.Flags().IsExternC() )
+ {
+ rHeader
+ << "extern \"C\""
+ << new html::LineBreak;
+ }
+
+ bool bConst = false;
+ bool bVolatile = false;
+ WriteOut_LinkedFunctionText( rHeader, aParams, i_rData, *pEnv,
+ &bConst, &bVolatile );
+ aDocu.Def() << new html::LineBreak;
+
+ // Flags
+ aDocu.AddEntry_NoTerm();
+ adcdisp::FlagTable
+ aFlags( aDocu.Def(), 8 );
+
+ const ary::cpp::FunctionFlags &
+ rFFlags = i_rData.Flags();
+ aFlags.SetColumn( 0, "virtual",
+ i_rData.Virtuality() != ary::cpp::VIRTUAL_none );
+ aFlags.SetColumn( 1, "abstract",
+ i_rData.Virtuality() == ary::cpp::VIRTUAL_abstract );
+ aFlags.SetColumn( 2, "const", bConst );
+ aFlags.SetColumn( 3, "volatile", bVolatile );
+ aFlags.SetColumn( 4, "template",
+ i_rData.TemplateParameters().size() > 0 );
+ aFlags.SetColumn( 5, "static",
+ rFFlags.IsStaticLocal() OR rFFlags.IsStaticMember() );
+ aFlags.SetColumn( 6, "inline",
+ rFFlags.IsInline() );
+ aFlags.SetColumn( 7, "C-linkage",
+ rFFlags.IsExternC() );
+ aDocu.Def() << new html::LineBreak;
+
+ // Docu
+ aDocu.AddEntry_NoTerm();
+ pDocuShow->Assign_Out(aDocu.Def());
+ pDocuShow->Process(i_rData.Docu());
+ pDocuShow->Unassign_Out();
+
+ rOut << new html::HorizontalLine;
+}
diff --git a/autodoc/source/display/html/dsply_op.hxx b/autodoc/source/display/html/dsply_op.hxx
new file mode 100644
index 000000000000..e17989f62c47
--- /dev/null
+++ b/autodoc/source/display/html/dsply_op.hxx
@@ -0,0 +1,104 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_DISPLAY_HTML_DSPLY_OP_HXX
+#define ADC_DISPLAY_HTML_DSPLY_OP_HXX
+
+// BASE CLASSES
+#include <ary/ary_disp.hxx>
+#include <cosv/tpl/processor.hxx>
+// USED SERVICES
+#include <ary/cpp/c_ce.hxx>
+
+namespace ary
+{
+ namespace cpp
+ {
+ class Function;
+ }
+}
+namespace csi
+{
+ namespace xml
+ {
+ class Element;
+ }
+}
+
+class OuputPage_Environment;
+class PageDisplay;
+class Docu_Display;
+
+
+
+
+class OperationsDisplay : public ary::Display,
+ public csv::ConstProcessor<ary::cpp::Function>
+{
+ public:
+ OperationsDisplay(
+ OuputPage_Environment &
+ io_rInfo );
+ virtual ~OperationsDisplay();
+
+ void PrepareForStdMembers();
+ void PrepareForStaticMembers();
+ void Create_Files();
+
+ private:
+ // Interface csv::ConstProcessor<>:
+ virtual void do_Process(
+ const ary::cpp::Function &
+ i_rData );
+ // Interface ary::Display:
+ virtual const ary::cpp::Gate *
+ inq_Get_ReFinder() const;
+
+ // Locals
+ typedef ary::cpp::Lid SourceFileId;
+ typedef std::map< SourceFileId, DYN PageDisplay* > Map_FileId2PagePtr;
+
+ PageDisplay & FindPage_for(
+ const ary::cpp::Function &
+ i_rData );
+ void Display_SglOperation(
+ csi::xml::Element & rOut,
+ const ary::cpp::Function &
+ i_rData );
+ // DATA
+ Map_FileId2PagePtr aMap_GlobalFunctionsDisplay;
+ Dyn<PageDisplay> pClassMembersDisplay;
+
+ OuputPage_Environment *
+ pEnv;
+ Dyn<Docu_Display> pDocuShow;
+};
+
+
+
+
+#endif
diff --git a/autodoc/source/display/html/easywri.cxx b/autodoc/source/display/html/easywri.cxx
new file mode 100644
index 000000000000..47c6196e5322
--- /dev/null
+++ b/autodoc/source/display/html/easywri.cxx
@@ -0,0 +1,65 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "easywri.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+
+
+using namespace csi::html;
+
+
+EasyWriter::EasyWriter()
+{
+}
+
+EasyWriter::~EasyWriter()
+{
+}
+
+void
+EasyWriter::Open_OutputNode( csi::xml::Element & io_rDestination )
+{
+ aCurDestination.push(&io_rDestination);
+}
+
+void
+EasyWriter::Finish_OutputNode()
+{
+ csv_assert( NOT aCurDestination.empty() );
+ aCurDestination.pop();
+}
+
+csi::xml::Element &
+EasyWriter::Out()
+{
+ csv_assert( aCurDestination.size() > 0);
+ return *aCurDestination.top();
+}
+
diff --git a/autodoc/source/display/html/easywri.hxx b/autodoc/source/display/html/easywri.hxx
new file mode 100644
index 000000000000..d5490b0f6133
--- /dev/null
+++ b/autodoc/source/display/html/easywri.hxx
@@ -0,0 +1,80 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_DISPLAY_HTML_EASYWRI_HXX
+#define ADC_DISPLAY_HTML_EASYWRI_HXX
+
+
+// USED SERVICES
+ // BASE CLASSES
+ // COMPONENTS
+#include <estack.hxx>
+ // PARAMETERS
+#include <udm/html/htmlitem.hxx>
+
+
+class EasyWriter
+{
+ public:
+ // LIFECYCLE
+ EasyWriter();
+ ~EasyWriter();
+
+ // OPERATIONS
+ /// Pushes csi::xml::Element on stack.
+ void Open_OutputNode(
+ csi::xml::Element & io_rDestination );
+ /// Pops front csi::xml::Element from stack.
+ void Finish_OutputNode();
+
+ void Enter(
+ csi::xml::Element & io_rDestination )
+ { Open_OutputNode(io_rDestination); }
+ void Leave() { Finish_OutputNode(); }
+
+ // ACCESS
+ csi::xml::Element & Out(); // CurOutputNode
+
+ private:
+ EStack< csi::xml::Element * >
+ aCurDestination; // The front element is the currently used.
+ // The later ones are the parents.
+};
+
+/*
+inline csi::xml::Element &
+EasyWriter::Out()
+ { csv_assert( aCurDestination.size() > 0 );
+ return *aCurDestination.top(); }
+*/
+
+// IMPLEMENTATION
+
+
+#endif
+
+
diff --git a/autodoc/source/display/html/hd_chlst.cxx b/autodoc/source/display/html/hd_chlst.cxx
new file mode 100644
index 000000000000..4647289a7bc4
--- /dev/null
+++ b/autodoc/source/display/html/hd_chlst.cxx
@@ -0,0 +1,589 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "hd_chlst.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include <ary/ceslot.hxx>
+#include <ary/cpp/c_gate.hxx>
+#include <ary/cpp/c_namesp.hxx>
+#include <ary/cpp/c_class.hxx>
+#include <ary/cpp/c_enum.hxx>
+#include <ary/cpp/c_tydef.hxx>
+#include <ary/cpp/c_funct.hxx>
+#include <ary/cpp/c_vari.hxx>
+#include <ary/cpp/c_enuval.hxx>
+#include <ary/loc/loc_file.hxx>
+#include <ary/loc/locp_le.hxx>
+#include <ary/doc/d_oldcppdocu.hxx>
+#include <ary/info/ci_attag.hxx>
+#include <ary/info/ci_text.hxx>
+#include <ary/info/all_dts.hxx>
+#include "hd_docu.hxx"
+#include "opageenv.hxx"
+#include "protarea.hxx"
+#include "strconst.hxx"
+
+
+using namespace csi;
+using html::Table;
+using html::TableRow;
+using html::TableCell;
+using html::Font;
+using html::SizeAttr;
+using html::BgColorAttr;
+using html::WidthAttr;
+
+
+const int ixPublic = 0;
+const int ixProtected = 1;
+const int ixPrivate = 2;
+
+struct ChildList_Display::S_AreaCo
+{
+ public:
+ ProtectionArea aArea;
+ Area_Result * pResult;
+
+ S_AreaCo(
+ Area_Result & o_rResult,
+ const char * i_sLabel,
+ const char * i_sTitle );
+ ~S_AreaCo();
+
+ void PerformResult();
+
+ private:
+ csi::xml::Element & Out() { return pResult->rOut; }
+};
+
+
+const ary::info::DocuText &
+ShortDocu( const ary::cpp::CodeEntity & i_rCe )
+{
+ static const ary::info::DocuText
+ aNull_;
+
+ const ary::doc::OldCppDocu *
+ pInfo = dynamic_cast< const ary::doc::OldCppDocu* >( i_rCe.Docu().Data() );
+ if (pInfo == 0)
+ return aNull_;
+
+ return pInfo->Short().CText();
+}
+
+
+ChildList_Display::ChildList_Display( OuputPage_Environment & io_rEnv )
+ : HtmlDisplay_Impl( io_rEnv ),
+ pShortDocu_Display( new Docu_Display(io_rEnv) ),
+ pActiveParentClass(0),
+ pActiveParentEnum(0),
+ // pSglArea,
+ // aMemberAreas,
+ peClassesFilter(0)
+{
+}
+
+ChildList_Display::ChildList_Display( OuputPage_Environment & io_rEnv,
+ const ary::cpp::Class & i_rClass )
+ : HtmlDisplay_Impl( io_rEnv ),
+ pShortDocu_Display( new Docu_Display(io_rEnv) ),
+ pActiveParentClass(&i_rClass),
+ pActiveParentEnum(0),
+ // pSglArea,
+ // aMemberAreas,
+ peClassesFilter(0)
+{
+}
+
+ChildList_Display::ChildList_Display( OuputPage_Environment & io_rEnv,
+ const ary::cpp::Enum & i_rEnum )
+ : HtmlDisplay_Impl( io_rEnv ),
+ pShortDocu_Display( new Docu_Display(io_rEnv) ),
+ pActiveParentClass(0),
+ pActiveParentEnum(&i_rEnum),
+ // pSglArea,
+ // aMemberAreas,
+ peClassesFilter(0)
+{
+}
+
+ChildList_Display::~ChildList_Display()
+{
+}
+
+void
+ChildList_Display::Run_Simple( Area_Result & o_rResult,
+ ary::SlotAccessId i_nSlot,
+ const char * i_sListLabel,
+ const char * i_sListTitle )
+{
+ ary::Slot_AutoPtr
+ pSlot( ActiveParent().Create_Slot( i_nSlot ) );
+ if ( pSlot->Size() == 0 )
+ return;
+
+ pSglArea = new S_AreaCo( o_rResult,
+ i_sListLabel,
+ i_sListTitle );
+
+ pSlot->StoreAt(*this);
+
+ pSglArea->PerformResult();
+ pSglArea = 0;
+}
+
+void
+ChildList_Display::Run_GlobalClasses( Area_Result & o_rResult,
+ ary::SlotAccessId i_nSlot,
+ const char * i_sListLabel,
+ const char * i_sListTitle,
+ ary::cpp::E_ClassKey i_eFilter )
+{
+ ary::Slot_AutoPtr
+ pSlot( ActiveParent().Create_Slot( i_nSlot ) );
+ if ( pSlot->Size() == 0 )
+ return;
+
+ pSglArea = new S_AreaCo( o_rResult,
+ i_sListLabel,
+ i_sListTitle );
+
+ SetClassesFilter(i_eFilter);
+ pSlot->StoreAt(*this);
+ UnsetClassesFilter();
+
+ pSglArea->PerformResult();
+ pSglArea = 0;
+}
+
+void
+ChildList_Display::Run_Members( Area_Result & o_rResult_public,
+ Area_Result & o_rResult_protected,
+ Area_Result & o_rResult_private,
+ ary::SlotAccessId i_nSlot,
+ const char * i_sListLabel_public,
+ const char * i_sListLabel_protected,
+ const char * i_sListLabel_private,
+ const char * i_sListTitle )
+{
+ ary::Slot_AutoPtr
+ pSlot( ActiveParent().Create_Slot(i_nSlot) );
+ if ( pSlot->Size() == 0 )
+ return;
+
+ aMemberAreas[ixPublic] = new S_AreaCo( o_rResult_public,
+ i_sListLabel_public,
+ i_sListTitle );
+ aMemberAreas[ixProtected] = new S_AreaCo( o_rResult_protected,
+ i_sListLabel_protected,
+ i_sListTitle );
+ aMemberAreas[ixPrivate] = new S_AreaCo( o_rResult_private,
+ i_sListLabel_private,
+ i_sListTitle );
+
+ pSlot->StoreAt(*this);
+
+ aMemberAreas[ixPublic]->PerformResult();
+ aMemberAreas[ixProtected]->PerformResult();
+ aMemberAreas[ixPrivate]->PerformResult();
+
+ aMemberAreas[ixPublic] = 0;
+ aMemberAreas[ixProtected] = 0;
+ aMemberAreas[ixPrivate] = 0;
+}
+
+void
+ChildList_Display::Run_MemberClasses( Area_Result & o_rResult_public,
+ Area_Result & o_rResult_protected,
+ Area_Result & o_rResult_private,
+ ary::SlotAccessId i_nSlot,
+ const char * i_sListLabel_public,
+ const char * i_sListLabel_protected,
+ const char * i_sListLabel_private,
+ const char * i_sListTitle,
+ ary::cpp::E_ClassKey i_eFilter )
+{
+ ary::Slot_AutoPtr
+ pSlot( ActiveParent().Create_Slot(i_nSlot) );
+ if ( pSlot->Size() == 0 )
+ return;
+
+ aMemberAreas[ixPublic] = new S_AreaCo( o_rResult_public,
+ i_sListLabel_public,
+ i_sListTitle );
+ aMemberAreas[ixProtected] = new S_AreaCo( o_rResult_protected,
+ i_sListLabel_protected,
+ i_sListTitle );
+ aMemberAreas[ixPrivate] = new S_AreaCo( o_rResult_private,
+ i_sListLabel_private,
+ i_sListTitle );
+
+ SetClassesFilter(i_eFilter);
+ pSlot->StoreAt(*this);
+ UnsetClassesFilter();
+
+ aMemberAreas[ixPublic]->PerformResult();
+ aMemberAreas[ixProtected]->PerformResult();
+ aMemberAreas[ixPrivate]->PerformResult();
+
+ aMemberAreas[ixPublic] = 0;
+ aMemberAreas[ixProtected] = 0;
+ aMemberAreas[ixPrivate] = 0;
+}
+
+void
+ChildList_Display::do_Process( const ary::cpp::Namespace & i_rData )
+{
+ Write_ListItem( i_rData.LocalName(),
+ Path2ChildNamespace(i_rData.LocalName()),
+ ShortDocu( i_rData ),
+ GetArea().GetTable() );
+}
+
+void
+ChildList_Display::do_Process( const ary::cpp::Class & i_rData )
+{
+ if ( Ce_IsInternal(i_rData) )
+ return;
+
+ if (peClassesFilter)
+ {
+ if (*peClassesFilter != i_rData.ClassKey() )
+ return;
+ }
+
+ String sLink;
+ if ( i_rData.Protection() == ary::cpp::PROTECT_global )
+ {
+ sLink = ClassFileName(i_rData.LocalName());
+
+ }
+ else
+ {
+ csv_assert( pActiveParentClass != 0 );
+ sLink = Path2Child( ClassFileName(i_rData.LocalName()), pActiveParentClass->LocalName() );
+ }
+
+ if (peClassesFilter)
+ {
+ Write_ListItem( i_rData.LocalName(),
+ sLink,
+ ShortDocu( i_rData ),
+ GetArea(i_rData.Protection())
+ .GetTable() );
+ }
+ else
+ {
+ Write_ListItem( i_rData.LocalName(),
+ sLink,
+ ShortDocu( i_rData ),
+ GetArea(i_rData.Protection())
+ .GetTable(i_rData.ClassKey()) );
+ }
+}
+
+void
+ChildList_Display::do_Process( const ary::cpp::Enum & i_rData )
+{
+ if ( Ce_IsInternal(i_rData) )
+ return;
+
+ String sLink;
+ if ( i_rData.Protection() == ary::cpp::PROTECT_global )
+ {
+ sLink = EnumFileName(i_rData.LocalName());
+ }
+ else
+ {
+ csv_assert( pActiveParentClass != 0 );
+ sLink = Path2Child( EnumFileName(i_rData.LocalName()),
+ pActiveParentClass->LocalName() );
+ }
+
+ Write_ListItem( i_rData.LocalName(),
+ sLink,
+ ShortDocu( i_rData ),
+ GetArea(i_rData.Protection()).GetTable() );
+}
+
+void
+ChildList_Display::do_Process( const ary::cpp::Typedef & i_rData )
+{
+ if ( Ce_IsInternal(i_rData) )
+ return;
+
+ String sLink;
+ if ( i_rData.Protection() == ary::cpp::PROTECT_global )
+ {
+ sLink = TypedefFileName(i_rData.LocalName());
+ }
+ else
+ {
+ csv_assert( pActiveParentClass != 0 );
+ sLink = Path2Child( TypedefFileName(i_rData.LocalName()),
+ pActiveParentClass->LocalName() );
+ }
+
+ Write_ListItem( i_rData.LocalName(),
+ sLink,
+ ShortDocu( i_rData ),
+ GetArea(i_rData.Protection()).GetTable() );
+}
+
+void
+ChildList_Display::do_Process( const ary::cpp::Function & i_rData )
+{
+ if ( Ce_IsInternal(i_rData) )
+ return;
+
+ String sLinkPrePath;
+ if ( i_rData.Protection() == ary::cpp::PROTECT_global )
+ {
+ const ary::loc::File &
+ rFile = Env().Gate().Locations().Find_File( i_rData.Location() );
+ sLinkPrePath = HtmlFileName( "o-", rFile.LocalName() );
+ }
+ else
+ {
+ csv_assert( pActiveParentClass != 0 );
+ sLinkPrePath = Path2Child( HtmlFileName( "o", "" ),
+ pActiveParentClass->LocalName() );
+ }
+
+ // Out
+ Table & rOut = GetArea(i_rData.Protection()).GetTable();
+ TableRow * dpRow = new TableRow;
+ rOut << dpRow;
+ TableCell & rCell1 = dpRow->AddCell();
+
+ rCell1
+ << SyntaxText_PreName( i_rData, Env().Gate() )
+ << new html::LineBreak;
+ rCell1
+ >> *new html::Link( OperationLink(
+ Env().Gate(),
+ i_rData.LocalName(),
+ i_rData.CeId(),
+ sLinkPrePath) )
+ << i_rData.LocalName();
+ rCell1
+ << SyntaxText_PostName( i_rData, Env().Gate() );
+ TableCell &
+ rCell2 = dpRow->AddCell();
+ rCell2
+ << new WidthAttr("50%")
+ << " ";
+
+ pShortDocu_Display->Assign_Out( rCell2 );
+ ShortDocu( i_rData ).StoreAt( *pShortDocu_Display );
+ pShortDocu_Display->Unassign_Out();
+}
+
+void
+ChildList_Display::do_Process( const ary::cpp::Variable & i_rData )
+{
+ if ( Ce_IsInternal(i_rData) )
+ return;
+
+ String sLinkPrePath;
+ if ( i_rData.Protection() == ary::cpp::PROTECT_global )
+ {
+ const ary::loc::File &
+ rFile = Env().Gate().Locations().Find_File( i_rData.Location() );
+ sLinkPrePath = HtmlFileName( "d-", rFile.LocalName() );
+ }
+ else
+ {
+ csv_assert( pActiveParentClass != 0 );
+ sLinkPrePath = Path2Child( HtmlFileName( "d", "" ),
+ pActiveParentClass->LocalName() );
+ }
+
+ TableRow * dpRow = new TableRow;
+ GetArea(i_rData.Protection()).GetTable() << dpRow;
+
+ *dpRow << new html::BgColorAttr("white");
+ csi::xml::Element &
+ rCell1 = dpRow->AddCell();
+
+ dshelp::Get_LinkedTypeText( rCell1, Env(), i_rData.Type() );
+ rCell1
+ << " "
+ >> *new html::Link( DataLink(i_rData.LocalName(), sLinkPrePath.c_str()) )
+ >> *new html::Strong
+ << i_rData.LocalName()
+ << ";";
+
+ TableCell & rShortDocu = dpRow->AddCell();
+ pShortDocu_Display->Assign_Out( rShortDocu );
+ ShortDocu( i_rData ).StoreAt( *pShortDocu_Display );
+ pShortDocu_Display->Unassign_Out();
+}
+
+void
+ChildList_Display::do_Process( const ary::cpp::EnumValue & i_rData )
+{
+ if ( Ce_IsInternal(i_rData) )
+ return;
+
+ Table & rOut = GetArea().GetTable();
+
+ TableRow * dpRow = new TableRow;
+ rOut << dpRow;
+
+ *dpRow << new html::BgColorAttr("white");
+ dpRow->AddCell()
+ << new WidthAttr("20%")
+ << new xml::AnAttribute("valign", "top")
+ >> *new html::Label(i_rData.LocalName())
+ >> *new html::Bold
+ << i_rData.LocalName();
+
+ TableCell & rValueDocu = dpRow->AddCell();
+ pShortDocu_Display->Assign_Out( rValueDocu );
+ i_rData.Docu().Accept( *pShortDocu_Display );
+ pShortDocu_Display->Unassign_Out();
+}
+
+void
+ChildList_Display::do_StartSlot()
+{
+}
+
+void
+ChildList_Display::do_FinishSlot()
+{
+}
+
+const ary::cpp::Gate *
+ChildList_Display::inq_Get_ReFinder() const
+{
+ return & Env().Gate();
+}
+
+void
+ChildList_Display::Write_ListItem( const String & i_sLeftText,
+ const char * i_sLink,
+ const ary::info::DocuText & i_rRightText,
+ csi::xml::Element & o_rOut )
+{
+ TableRow * dpRow = new TableRow;
+ o_rOut << dpRow;
+
+ *dpRow << new html::BgColorAttr("white");
+ dpRow->AddCell()
+ << new WidthAttr("20%")
+ >> *new html::Link( i_sLink )
+ >> *new html::Bold
+ << i_sLeftText;
+
+ TableCell & rShortDocu = dpRow->AddCell();
+ pShortDocu_Display->Assign_Out( rShortDocu );
+ i_rRightText.StoreAt( *pShortDocu_Display );
+ pShortDocu_Display->Unassign_Out();
+}
+
+const ary::AryGroup &
+ChildList_Display::ActiveParent()
+{
+ return pActiveParentClass != 0
+ ? static_cast< const ary::AryGroup& >(*pActiveParentClass)
+ : pActiveParentEnum != 0
+ ? static_cast< const ary::AryGroup& >(*pActiveParentEnum)
+ : static_cast< const ary::AryGroup& >(*Env().CurNamespace());
+}
+
+ProtectionArea &
+ChildList_Display::GetArea()
+{
+ return pSglArea->aArea;
+}
+
+ProtectionArea &
+ChildList_Display::GetArea( ary::cpp::E_Protection i_eProtection )
+{
+ switch ( i_eProtection )
+ {
+ case ary::cpp::PROTECT_public:
+ return aMemberAreas[ixPublic]->aArea;
+ case ary::cpp::PROTECT_protected:
+ return aMemberAreas[ixProtected]->aArea;
+ case ary::cpp::PROTECT_private:
+ return aMemberAreas[ixPrivate]->aArea;
+ default:
+ return pSglArea->aArea;
+ }
+}
+
+
+//******************* ********************//
+
+ChildList_Display::
+S_AreaCo::S_AreaCo( Area_Result & o_rResult,
+ const char * i_sLabel,
+ const char * i_sTitle )
+ : aArea(i_sLabel, i_sTitle),
+ pResult(&o_rResult)
+{
+}
+
+ChildList_Display::
+S_AreaCo::~S_AreaCo()
+{
+}
+
+void
+ChildList_Display::
+S_AreaCo::PerformResult()
+{
+ bool bUsed = aArea.WasUsed_Area();
+ pResult->rChildrenExist = bUsed;
+ if ( bUsed )
+ {
+ Create_ChildListLabel( Out(), aArea.Label() );
+
+ if ( aArea.Size() == 1 )
+ {
+ Out() << aArea.ReleaseTable();
+ }
+ else
+ {
+ Table * pTable = aArea.ReleaseTable( ary::cpp::CK_class );
+ if (pTable != 0)
+ Out() << pTable;
+ pTable = aArea.ReleaseTable( ary::cpp::CK_struct );
+ if (pTable != 0)
+ Out() << pTable;
+ pTable = aArea.ReleaseTable( ary::cpp::CK_union );
+ if (pTable != 0)
+ Out() << pTable;
+ }
+ }
+}
diff --git a/autodoc/source/display/html/hd_chlst.hxx b/autodoc/source/display/html/hd_chlst.hxx
new file mode 100644
index 000000000000..d7d530ce934a
--- /dev/null
+++ b/autodoc/source/display/html/hd_chlst.hxx
@@ -0,0 +1,206 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_DISPLAY_HTML_HD_CHLST_HXX
+#define ADC_DISPLAY_HTML_HD_CHLST_HXX
+
+// BASE CLASSES
+#include <ary/ary_disp.hxx>
+#include <cosv/tpl/processor.hxx>
+
+// USED SERVICES
+#include <ary/cpp/c_types4cpp.hxx>
+#include "hdimpl.hxx"
+
+
+
+namespace ary
+{
+ namespace cpp
+ {
+ class Namespace;
+ class Class;
+ class Enum;
+ class Typedef;
+ class Function;
+ class Variable;
+ class EnumValue;
+ }
+ namespace info
+ {
+ class DocuText;
+ }
+}
+
+class Docu_Display;
+class ProtectionArea;
+
+class ChildList_Display : public ary::Display,
+ public csv::ConstProcessor<ary::cpp::Namespace>,
+ public csv::ConstProcessor<ary::cpp::Class>,
+ public csv::ConstProcessor<ary::cpp::Enum>,
+ public csv::ConstProcessor<ary::cpp::Typedef>,
+ public csv::ConstProcessor<ary::cpp::Function>,
+ public csv::ConstProcessor<ary::cpp::Variable>,
+ public csv::ConstProcessor<ary::cpp::EnumValue>,
+ private HtmlDisplay_Impl
+{
+ public:
+ struct Area_Result
+ {
+ bool & rChildrenExist;
+ csi::xml::Element & rOut;
+
+ Area_Result(
+ bool & o_rChildrenExist,
+ csi::xml::Element & o_rOut )
+ : rChildrenExist(o_rChildrenExist),
+ rOut(o_rOut) {}
+ };
+
+
+ ChildList_Display(
+ OuputPage_Environment &
+ io_rEnv );
+ ChildList_Display(
+ OuputPage_Environment &
+ io_rEnv,
+ const ary::cpp::Class &
+ i_rClass );
+ ChildList_Display(
+ OuputPage_Environment &
+ io_rEnv,
+ const ary::cpp::Enum &
+ i_rEnum );
+
+ virtual ~ChildList_Display();
+
+ void Run_Simple(
+ Area_Result & o_rResult,
+ ary::SlotAccessId i_nSlot,
+ const char * i_sListLabel,
+ const char * i_sListTitle );
+ void Run_GlobalClasses(
+ Area_Result & o_rResult,
+ ary::SlotAccessId i_nSlot,
+ const char * i_sListLabel,
+ const char * i_sListTitle,
+ ary::cpp::E_ClassKey
+ i_eFilter );
+ void Run_Members(
+ Area_Result & o_rResult_public,
+ Area_Result & o_rResult_protected,
+ Area_Result & o_rResult_private,
+ ary::SlotAccessId i_nSlot,
+ const char * i_sListLabel_public,
+ const char * i_sListLabel_protected,
+ const char * i_sListLabel_private,
+ const char * i_sListTitle );
+ void Run_MemberClasses(
+ Area_Result & o_rResult_public,
+ Area_Result & o_rResult_protected,
+ Area_Result & o_rResult_private,
+ ary::SlotAccessId i_nSlot,
+ const char * i_sListLabel_public,
+ const char * i_sListLabel_protected,
+ const char * i_sListLabel_private,
+ const char * i_sListTitle,
+ ary::cpp::E_ClassKey
+ i_eFilter );
+ private:
+ // Interface csv::ConstProcessor<>:
+ virtual void do_Process(
+ const ary::cpp::Namespace &
+ i_rData );
+ /** i_rData is shown only, if it passes two filters:
+ it must have the right protection, checked with pFilter,
+ and the right class key (class,struct,union), checked with
+ pClassFilter. A not exsting filter allows i_rData to be
+ displayed.
+ */
+ virtual void do_Process(
+ const ary::cpp::Class &
+ i_rData );
+ virtual void do_Process(
+ const ary::cpp::Enum &
+ i_rData );
+ virtual void do_Process(
+ const ary::cpp::Typedef &
+ i_rData );
+ virtual void do_Process(
+ const ary::cpp::Function &
+ i_rData );
+ virtual void do_Process(
+ const ary::cpp::Variable &
+ i_rData );
+ virtual void do_Process(
+ const ary::cpp::EnumValue &
+ i_rData );
+ private:
+ // Interface ary::Display:
+ virtual void do_StartSlot();
+ virtual void do_FinishSlot();
+ virtual const ary::cpp::Gate *
+ inq_Get_ReFinder() const;
+ // Locals
+ struct S_AreaCo;
+ void Write_ListItem(
+ const String & i_sLeftText,
+ const char * i_sLink,
+ const ary::info::DocuText &
+ i_rRightText,
+ csi::xml::Element & rOut );
+ const ary::AryGroup &
+ ActiveParent();
+ ProtectionArea & GetArea();
+ ProtectionArea & GetArea(
+ ary::cpp::E_Protection
+ i_eProtection );
+ void SetClassesFilter(
+ ary::cpp::E_ClassKey
+ i_eFilter )
+ { peClassesFilter = new ary::cpp::E_ClassKey(i_eFilter); }
+ void UnsetClassesFilter() { peClassesFilter = 0; }
+
+ // DATA
+ Dyn<Docu_Display> pShortDocu_Display;
+ const ary::cpp::Class *
+ pActiveParentClass;
+ const ary::cpp::Enum *
+ pActiveParentEnum;
+
+ Dyn<S_AreaCo> pSglArea;
+ Dyn<S_AreaCo> aMemberAreas[3];
+
+ Dyn<ary::cpp::E_ClassKey>
+ peClassesFilter;
+};
+
+
+
+
+#endif
diff --git a/autodoc/source/display/html/hd_docu.cxx b/autodoc/source/display/html/hd_docu.cxx
new file mode 100644
index 000000000000..5fa62b3ecb14
--- /dev/null
+++ b/autodoc/source/display/html/hd_docu.cxx
@@ -0,0 +1,486 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "hd_docu.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include <ary/cpp/c_gate.hxx>
+#include <ary/cpp/c_namesp.hxx>
+#include <ary/cpp/c_class.hxx>
+#include <ary/cpp/c_enum.hxx>
+#include <ary/cpp/c_tydef.hxx>
+#include <ary/cpp/c_funct.hxx>
+#include <ary/cpp/c_vari.hxx>
+#include <ary/cpp/c_enuval.hxx>
+#include <ary/doc/d_oldcppdocu.hxx>
+#include <ary/info/all_tags.hxx>
+#include <ary/info/all_dts.hxx>
+#include <adc_cl.hxx>
+#include "html_kit.hxx"
+#include "opageenv.hxx"
+
+
+
+using namespace ary::info;
+using namespace csi;
+
+using html::DefList;
+using html::DefListTerm;
+using html::DefListDefinition;
+using html::Headline;
+using html::Link;
+
+
+const char *
+C_sTagHeadlines[ ary::info::C_eAtTag_NrOfClasses ] =
+ {
+ "ATTENTION!", "Author", "Changes", "Collaborators",
+ "Contact", // Contact may be unused
+ "Copyright", "Deprecated", "Description", "Date of Documentation",
+ "How to Derive from this Class",
+ "Heap object - owner is responsible for deletion.",
+ "Important Instances",
+ "Interface Only",
+ "Invariant", "Lifecycle",
+ "Multiplicity", "On Error", "Persistency", "Postcondition",
+ "Precondition",
+ "Responsibilities",
+ "Return", "Summary", "Todos", "Version",
+ "Base Classes", "Exceptions", "Implements", "Keywords", "Parameters",
+ "See Also", "Template Parameters",
+ "", "Since "
+ };
+
+
+
+Docu_Display::Docu_Display( OuputPage_Environment & io_rEnv )
+ : HtmlDisplay_Impl(io_rEnv),
+ bUseHtmlInDocuTokens(false),
+ pCurClassOverwrite(0)
+{
+}
+
+Docu_Display::~Docu_Display()
+{
+}
+
+void
+Docu_Display::Assign_Out( csi::xml::Element & o_rOut )
+{
+ Easy().Enter(o_rOut);
+}
+
+void
+Docu_Display::Unassign_Out()
+{
+ Easy().Leave();
+}
+
+void
+Docu_Display::do_Process( const ary::cpp::Namespace & i_rData )
+{
+ Process(i_rData.Docu());
+}
+
+void
+Docu_Display::do_Process( const ary::cpp::Class & i_rData )
+{
+ pCurClassOverwrite = &i_rData;
+ Process(i_rData.Docu());
+ pCurClassOverwrite = 0;
+}
+
+void
+Docu_Display::do_Process( const ary::cpp::Enum & i_rData )
+{
+ Process(i_rData.Docu());
+}
+
+void
+Docu_Display::do_Process( const ary::cpp::Typedef & i_rData )
+{
+ Process(i_rData.Docu());
+}
+
+void
+Docu_Display::do_Process( const ary::cpp::Function & i_rData )
+{
+ Process(i_rData.Docu());
+}
+
+void
+Docu_Display::do_Process( const ary::cpp::Variable & i_rData )
+{
+ Process(i_rData.Docu());
+}
+
+
+
+// -------------- Interface ary::info::DocuDisplay ------------------ //
+
+
+void
+Docu_Display::do_Process(const ary::doc::Documentation & i_rData)
+{
+ if (i_rData.Data() == 0)
+ return;
+
+ const ary::doc::OldCppDocu *
+ docdata = dynamic_cast< const ary::doc::OldCppDocu* >(i_rData.Data());
+ csv_assert(docdata != 0);
+
+ Start_DocuBlock();
+
+ if ( docdata->IsObsolete() )
+ {
+ CurOut()
+ >> *new html::DefListTerm
+ >> *new html::Strong
+ << "D E P R E C A T E D";
+
+ }
+
+ ary::doc::OldCppDocu::TagList::const_iterator
+ itEnd = docdata->Tags().end();
+ for ( ary::doc::OldCppDocu::TagList::const_iterator it = docdata->Tags().begin();
+ it != itEnd;
+ ++it )
+ {
+ (*it)->StoreAt( *this );
+ }
+
+ Finish_DocuBlock();
+}
+
+void
+Docu_Display::Display_StdTag( const StdTag & i_rData )
+{
+ csv_assert( uintt(i_rData.Std_Id()) < uintt(ary::info::C_eAtTag_NrOfClasses) );
+
+ const ary::info::DocuText::TokenList &
+ rText = i_rData.CText().Tokens();
+ typedef ary::info::DocuText::TokenList::const_iterator TokenIterator;
+
+ if ( rText.empty() )
+ return;
+ else if ( rText.size() < 3 )
+ {
+ bool bIsWhite = true;
+ for ( TokenIterator it = rText.begin();
+ it != rText.end();
+ ++it )
+ {
+ if (bIsWhite)
+ bIsWhite = (*it)->IsWhite();
+ }
+ if (bIsWhite)
+ return;
+ }
+
+ Write_TagTitle( C_sTagHeadlines[i_rData.Std_Id()] );
+ Write_TagContents( i_rData.CText() );
+}
+
+void
+Docu_Display::Display_BaseTag( const BaseTag & )
+{
+}
+
+void
+Docu_Display::Display_ExceptionTag( const ExceptionTag & )
+{
+}
+
+void
+Docu_Display::Display_ImplementsTag( const ImplementsTag & )
+{
+}
+
+void
+Docu_Display::Display_KeywordTag( const KeywordTag & )
+{
+}
+
+void
+Docu_Display::Display_ParameterTag( const ParameterTag & i_rData )
+{
+ Write_TagTitle( "Parameters" );
+
+ adcdisp::ExplanationTable
+ aParams( CurOut() >> *new DefListDefinition );
+
+ for ( const ParameterTag * pParam = &i_rData;
+ pParam != 0;
+ pParam = pParam->GetNext() ) // KORR_FUTURE
+ {
+ aParams.AddEntry( pParam->ParamName().c_str() );
+
+ Easy().Enter( aParams.Def() );
+ Write_Text( pParam->CText() );
+ Easy().Leave();
+ } // end for
+}
+
+void
+Docu_Display::Display_SeeTag( const SeeTag & i_rData )
+{
+ Write_TagTitle( "See Also" );
+
+ DefListDefinition * dpDef = new DefListDefinition;
+ CurOut() << dpDef;
+ Easy().Enter(*dpDef);
+
+ for ( std::vector< ary::QualifiedName >::const_iterator
+ it = i_rData.References().begin();
+ it != i_rData.References().end();
+ ++it )
+ {
+ Write_LinkableText( (*it) );
+ CurOut() << new html::LineBreak;
+ }
+
+ Easy().Leave();
+}
+
+void
+Docu_Display::Display_TemplateTag( const TemplateTag & i_rData )
+{
+ Write_TagTitle( "Template Parameters" );
+
+ adcdisp::ExplanationTable
+ aTplParams( CurOut() >> *new DefListDefinition );
+
+ for ( const TemplateTag * pTplParam = &i_rData;
+ pTplParam != 0;
+ pTplParam = pTplParam->GetNext() )
+ {
+ aTplParams.AddEntry( pTplParam->TplParamName().c_str() );
+
+ Easy().Enter( aTplParams.Def() );
+ Write_Text( pTplParam->CText() );
+ Easy().Leave();
+ } // end for
+}
+
+void
+Docu_Display::Display_LabelTag( const LabelTag & )
+{
+}
+
+void
+Docu_Display::Display_SinceTag( const ary::info::SinceTag & i_rData )
+{
+ if ( i_rData.Version().empty() )
+ {
+ return;
+ }
+
+ // Transform the value of the @since tag into the text to be displayed.
+ String sDisplay;
+ if ( autodoc::CommandLine::Get_().DoesTransform_SinceTag() )
+ {
+ sDisplay = autodoc::CommandLine::Get_()
+ .DisplayOf_SinceTagValue( i_rData.Version() );
+ }
+ else
+ {
+ sDisplay = i_rData.Version();
+ }
+
+ if (sDisplay.empty())
+ return;
+
+ Write_TagTitle( "Since " );
+
+ DefListDefinition * dpDef = new DefListDefinition;
+ CurOut() << dpDef;
+
+ Easy().Enter(*dpDef);
+ CurOut() << sDisplay;
+ Easy().Leave();
+}
+
+void
+Docu_Display::Display_DT_Text( const DT_Text & i_rData )
+{
+ Write_TextToken( i_rData.Text() );
+}
+
+void
+Docu_Display::Display_DT_MaybeLink( const DT_MaybeLink & i_rData )
+{
+ // KORR_FUTURE
+ Write_TextToken( i_rData.Text() );
+}
+
+void
+Docu_Display::Display_DT_Whitespace( const DT_Whitespace & i_rData )
+{
+ static char sSpace[300] =
+ " "
+ " "
+ " "
+ " "
+ " "
+ " ";
+ UINT8 nLength = i_rData.Length();
+ sSpace[nLength] = NULCH;
+ CurOut() << sSpace;
+ sSpace[nLength] = ' ';
+}
+
+void
+Docu_Display::Display_DT_Eol( const DT_Eol & )
+{
+ CurOut() << new html::Sbr;
+}
+
+void
+Docu_Display::Display_DT_Xml( const ary::info::DT_Xml & i_rData )
+{
+ CurOut() << new xml::XmlCode( i_rData.Text() );
+}
+
+const ary::cpp::Gate *
+Docu_Display::inq_Get_ReFinder() const
+{
+ return &Env().Gate();
+}
+
+void
+Docu_Display::Start_DocuBlock()
+{
+ DYN DefList * dpDefList = new DefList;
+ CurOut() << dpDefList;
+ Easy().Enter( *dpDefList );
+}
+
+void
+Docu_Display::Finish_DocuBlock()
+{
+ Easy().Leave();
+}
+
+void
+Docu_Display::Write_TagTitle( const char * i_sText,
+ const char * )
+{
+ if ( strcmp(i_sText,"ATTENTION!") == 0 )
+ {
+ CurOut()
+ >> *new html::DefListTerm
+ << new html::ClassAttr("attention")
+ << i_sText;
+ }
+ else
+ {
+ CurOut()
+ >> *new html::DefListTerm
+ << i_sText;
+ }
+}
+
+void
+Docu_Display::Write_TagContents( const DocuText & i_rDocuText )
+{
+ DefListDefinition * dpDef = new DefListDefinition;
+ CurOut() << dpDef;
+
+ Easy().Enter(*dpDef);
+ Write_Text(i_rDocuText);
+ Easy().Leave();
+}
+
+void
+Docu_Display::Write_Text( const ary::info::DocuText & i_rDocuText )
+{
+ if ( i_rDocuText.IsNoHtml() )
+ {
+ CurOut()
+ << new xml::XmlCode("<pre>");
+ bUseHtmlInDocuTokens = false;
+ }
+ else
+ {
+ bUseHtmlInDocuTokens = true;
+ }
+ i_rDocuText.StoreAt( *this );
+ if ( i_rDocuText.IsNoHtml() )
+ {
+ CurOut()
+ << new xml::XmlCode("</pre>");
+ }
+}
+
+void
+Docu_Display::Write_TextToken( const String & i_sText )
+{
+ if ( bUseHtmlInDocuTokens )
+ CurOut() << new xml::XmlCode(i_sText);
+ else
+ CurOut() << i_sText;
+}
+
+void
+Docu_Display::Write_LinkableText( const ary::QualifiedName & i_sQuName )
+{
+ const ary::cpp::CodeEntity *
+ pCe = FindUnambiguousCe( Env(), i_sQuName, pCurClassOverwrite );
+ if ( pCe != 0 )
+ {
+ csi::xml::Element *
+ pLink = new csi::html::Link( Link2Ce(Env(), *pCe) );
+ CurOut() << pLink;
+ Easy().Enter(*pLink);
+ Write_QualifiedName(i_sQuName);
+ Easy().Leave();
+ }
+ else
+ {
+ Write_QualifiedName(i_sQuName);
+ }
+ CurOut() << " ";
+}
+
+void
+Docu_Display::Write_QualifiedName( const ary::QualifiedName & i_sQuName )
+{
+ if ( i_sQuName.IsAbsolute() )
+ CurOut() << "::";
+ for ( ary::QualifiedName::namespace_iterator it = i_sQuName.first_namespace();
+ it != i_sQuName.end_namespace();
+ ++it )
+ {
+ CurOut() << (*it) << "::";
+ }
+ CurOut() << i_sQuName.LocalName();
+ if ( i_sQuName.IsFunction() )
+ CurOut() << "()";
+}
+
diff --git a/autodoc/source/display/html/hd_docu.hxx b/autodoc/source/display/html/hd_docu.hxx
new file mode 100644
index 000000000000..812cc7054718
--- /dev/null
+++ b/autodoc/source/display/html/hd_docu.hxx
@@ -0,0 +1,196 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_DISPLAY_HTML_HD_DOCU_HXX
+#define ADC_DISPLAY_HTML_HD_DOCU_HXX
+
+// BASE CLASSES
+#include <ary/ary_disp.hxx>
+#include <ary/info/infodisp.hxx>
+#include <cosv/tpl/processor.hxx>
+#include "hdimpl.hxx"
+
+namespace ary
+{
+ namespace cpp
+ {
+ class Namespace;
+ class Class;
+ class Enum;
+ class Typedef;
+ class Function;
+ class Variable;
+ }
+
+ namespace doc
+ {
+ class Documentation;
+ }
+ namespace info
+ {
+ class DocuText;
+ }
+
+ class QualifiedName;
+}
+
+class OuputPage_Environment;
+
+
+class Docu_Display : public ary::Display,
+ public csv::ConstProcessor<ary::cpp::Namespace>,
+ public csv::ConstProcessor<ary::cpp::Class>,
+ public csv::ConstProcessor<ary::cpp::Enum>,
+ public csv::ConstProcessor<ary::cpp::Typedef>,
+ public csv::ConstProcessor<ary::cpp::Function>,
+ public csv::ConstProcessor<ary::cpp::Variable>,
+ public csv::ConstProcessor<ary::doc::Documentation>,
+ public ary::info::DocuDisplay,
+ private HtmlDisplay_Impl
+{
+ public:
+ Docu_Display(
+ OuputPage_Environment &
+ io_rEnv );
+ virtual ~Docu_Display();
+
+ void Assign_Out(
+ csi::xml::Element & o_rOut );
+ void Unassign_Out();
+
+ virtual void Display_StdTag(
+ const ary::info::StdTag &
+ i_rData );
+ virtual void Display_BaseTag(
+ const ary::info::BaseTag &
+ i_rData );
+ virtual void Display_ExceptionTag(
+ const ary::info::ExceptionTag &
+ i_rData );
+ virtual void Display_ImplementsTag(
+ const ary::info::ImplementsTag &
+ i_rData );
+ virtual void Display_KeywordTag(
+ const ary::info::KeywordTag &
+ i_rData );
+ virtual void Display_ParameterTag(
+ const ary::info::ParameterTag &
+ i_rData );
+ virtual void Display_SeeTag(
+ const ary::info::SeeTag &
+ i_rData );
+ virtual void Display_TemplateTag(
+ const ary::info::TemplateTag &
+ i_rData );
+ virtual void Display_LabelTag(
+ const ary::info::LabelTag &
+ i_rData );
+ virtual void Display_SinceTag(
+ const ary::info::SinceTag &
+ i_rData );
+
+ virtual void Display_DT_Text(
+ const ary::info::DT_Text &
+ i_rData );
+ virtual void Display_DT_MaybeLink(
+ const ary::info::DT_MaybeLink &
+ i_rData );
+ virtual void Display_DT_Whitespace(
+ const ary::info::DT_Whitespace &
+ i_rData );
+ virtual void Display_DT_Eol(
+ const ary::info::DT_Eol &
+ i_rData );
+ virtual void Display_DT_Xml(
+ const ary::info::DT_Xml &
+ i_rData );
+
+ using csv::ConstProcessor<ary::doc::Documentation>::Process;
+
+ private:
+ // Interface csv::ConstProcessor<>:
+ virtual void do_Process(
+ const ary::cpp::Namespace &
+ i_rData );
+ virtual void do_Process(
+ const ary::cpp::Class &
+ i_rData );
+ virtual void do_Process(
+ const ary::cpp::Enum &
+ i_rData );
+ virtual void do_Process(
+ const ary::cpp::Typedef &
+ i_rData );
+ virtual void do_Process(
+ const ary::cpp::Function &
+ i_rData );
+ virtual void do_Process(
+ const ary::cpp::Variable &
+ i_rData );
+ virtual void do_Process(
+ const ary::doc::Documentation &
+ i_rData );
+ // Interface ary::Display:
+ virtual const ary::cpp::Gate *
+ inq_Get_ReFinder() const;
+ // Locals
+ void Start_DocuBlock();
+ void Finish_DocuBlock();
+
+ void Write_TagTitle(
+ const char * i_sText,
+ const char * i_nFontSize = "+0" );
+ void Write_TagContents(
+ const ary::info::DocuText &
+ i_rDocuText );
+ void Write_Text(
+ const ary::info::DocuText &
+ i_rDocuText );
+ void Write_TextToken(
+ const String & i_sText );
+ void Write_LinkableText(
+ const ary::QualifiedName &
+ i_sQuName );
+ void Write_QualifiedName(
+ const ary::QualifiedName &
+ i_sQuName );
+
+ // DATA
+ bool bUseHtmlInDocuTokens;
+
+ /** This is used, if a class documentation is displayed,
+ because for links to members then the "current class"
+ is not the parent, but this class itself.
+ */
+ const ary::cpp::Class *
+ pCurClassOverwrite;
+};
+
+
+
+
+#endif
diff --git a/autodoc/source/display/html/hdimpl.cxx b/autodoc/source/display/html/hdimpl.cxx
new file mode 100644
index 000000000000..fdd23be5b2e6
--- /dev/null
+++ b/autodoc/source/display/html/hdimpl.cxx
@@ -0,0 +1,546 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "hdimpl.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include <stdlib.h>
+#include <stdio.h>
+#include <ary/ceslot.hxx>
+#include <ary/qualiname.hxx>
+#include <ary/cpp/c_class.hxx>
+#include <ary/cpp/c_de.hxx>
+#include <ary/cpp/c_enum.hxx>
+#include <ary/cpp/c_funct.hxx>
+#include <ary/cpp/c_gate.hxx>
+#include <ary/cpp/cp_ce.hxx>
+#include <udm/html/htmlitem.hxx>
+#include "cre_link.hxx"
+#include "hd_docu.hxx"
+#include "html_kit.hxx"
+#include "opageenv.hxx"
+#include "pagemake.hxx"
+#include "strconst.hxx"
+
+
+using namespace csi;
+
+
+//******************** HtmlDisplay_Impl *********************//
+
+HtmlDisplay_Impl::~HtmlDisplay_Impl()
+{
+}
+
+HtmlDisplay_Impl::HtmlDisplay_Impl( OuputPage_Environment & io_rEnv )
+ : pEnv(&io_rEnv)
+ // aWriteHelper
+{
+}
+
+
+//******************** Free Functions *********************//
+
+
+
+namespace dshelp
+{
+
+void
+DisplaySlot( ary::Display & o_rDisplay,
+ const ary::AryGroup & i_rGroup,
+ ary::SlotAccessId i_nSlot )
+{
+ ary::Slot_AutoPtr pSlot( i_rGroup.Create_Slot(i_nSlot) );
+ pSlot->StoreAt( o_rDisplay );
+}
+
+
+const char *
+PathUp( uintt i_nLevels )
+{
+ static char sResult[300];
+
+ sResult[0] = NULCH;
+ for ( uintt lev = 0; lev < i_nLevels; ++lev )
+ {
+ strcat( sResult, "../"); // SAFE STRCAT (#100211# - checked)
+ }
+ return sResult;
+}
+
+const char *
+PathPerLevelsUp( uintt i_nLevels,
+ const char * i_nPathBelowDestinationLevel )
+{
+ static char sResult[500];
+ strcpy( sResult, PathUp(i_nLevels) ); // SAFE STRCPY (#100211# - checked)
+ // KORR_FUTURE: Make it still safer here:
+ strcat( sResult, i_nPathBelowDestinationLevel ); // SAFE STRCAT (#100211# - checked)
+ return sResult;
+}
+
+
+const char *
+PathPerRoot( const OuputPage_Environment & i_rEnv,
+ const char * i_sPathFromRootDir )
+{
+ return PathPerLevelsUp( i_rEnv.Depth(), i_sPathFromRootDir );
+}
+
+const char *
+PathPerNamespace( const OuputPage_Environment & i_rEnv,
+ const char * i_sPathFromNamespaceDir )
+{
+ const ary::cpp::Namespace * pNsp = i_rEnv.CurNamespace();
+ if ( pNsp == 0 )
+ return "";
+
+ uintt nCount = i_rEnv.Depth() - (pNsp->Depth() + 1) ;
+ csv_assert( nCount < 100 );
+ return PathPerLevelsUp( nCount, i_sPathFromNamespaceDir );
+}
+
+const char *
+HtmlFileName( const char * i_sPrefix,
+ const char * i_sEntityName )
+{
+ // KORR_FUTURE: Make it still safer here:
+ static char sResult[300];
+ strcpy( sResult, i_sPrefix ); // SAFE STRCPY (#100211# - checked)
+ strcat( sResult, i_sEntityName ); // SAFE STRCAT (#100211# - checked)
+ strcat( sResult, ".html" ); // SAFE STRCAT (#100211# - checked)
+ return sResult;
+}
+
+const char *
+Path2Class( uintt i_nLevelsUp,
+ const char * i_sClassLocalName )
+{
+ return PathPerLevelsUp( i_nLevelsUp, ClassFileName(i_sClassLocalName) );
+}
+
+const char *
+Path2Child( const char * i_sFileName,
+ const char * i_sSubDir )
+{
+ static char sResult[400];
+ if ( i_sSubDir != 0 )
+ {
+ // KORR_FUTURE: Make it still safer here:
+ strcpy( sResult, i_sSubDir ); // SAFE STRCPY (#100211# - checked)
+ strcat( sResult, "/" ); // SAFE STRCAT (#100211# - checked)
+ }
+ else
+ {
+ sResult[0] = NULCH;
+ }
+
+ strcat( sResult, i_sFileName ); // SAFE STRCAT (#100211# - checked)
+ return sResult;
+}
+
+const char *
+Path2ChildNamespace( const char * i_sLocalName )
+{
+ return Path2Child( C_sHFN_Namespace, i_sLocalName );
+}
+
+String
+OperationLink( const ary::cpp::Gate & ,
+ const String & i_sOpName,
+ ary::cpp::Ce_id i_nOpId,
+ const char * i_sPrePath )
+{
+ StreamLock
+ slResult(3000);
+ StreamStr &
+ sResult = slResult();
+
+ sResult
+ << i_sPrePath
+ << "#"
+ << i_sOpName
+ << "-"
+ << i_nOpId.Value();
+
+
+
+ return sResult.c_str();
+}
+
+const char *
+DataLink( const String & i_sLocalName,
+ const char * i_sPrePath )
+{
+ StreamLock
+ slResult(3000);
+ StreamStr &
+ sResult = slResult();
+
+ sResult
+ << i_sPrePath
+ << "#"
+ << i_sLocalName;
+
+ return sResult.c_str();
+}
+
+void
+Get_LinkedTypeText( csi::xml::Element & o_rOut,
+ const OuputPage_Environment & i_rEnv,
+ ary::cpp::Type_id i_nId,
+ bool i_bWithAbsolutifier )
+{
+ if (NOT i_nId.IsValid())
+ return;
+
+ const char * sPreName = "";
+ const char * sName = "";
+ const char * sPostName = "";
+
+ bool bTypeExists = Get_TypeText( sPreName,
+ sName,
+ sPostName,
+ i_nId,
+ i_rEnv.Gate() );
+ if ( NOT bTypeExists )
+ return;
+
+ if ( NOT i_bWithAbsolutifier AND strncmp(sPreName,"::",2) == 0 )
+ sPreName+=2;
+
+ const ary::cpp::CodeEntity *
+ pCe = i_rEnv.Gate().Search_RelatedCe(i_nId);
+
+ String sLink;
+ if ( pCe != 0 )
+ {
+ sLink = Link2Ce(i_rEnv,*pCe);
+ }
+ else
+ {
+ if ( strstr(sPreName,"com::sun::star") != 0 )
+ {
+ static StreamStr aLink(400);
+ aLink.seekp(0);
+ aLink << PathPerRoot(i_rEnv, "../../common/ref");
+ if ( *sPreName != ':' )
+ aLink << '/';
+ for ( const char * s = sPreName;
+ *s != 0;
+ ++s )
+ {
+ if ( *s == ':' )
+ {
+ aLink << '/';
+ ++s;
+ }
+ else
+ {
+ aLink << *s;
+ }
+ } // end for
+ aLink << sName
+ << ".html";
+ sLink = aLink.c_str();
+ }
+ } // endif( pCe != 0 )
+
+ o_rOut
+ << sPreName;
+ csi::xml::Element &
+ o_Goon = sLink.length() > 0
+ ? o_rOut >> * new html::Link( sLink.c_str() )
+ : o_rOut;
+ o_Goon
+ << sName;
+ o_rOut
+ << sPostName;
+}
+
+void
+Create_ChildListLabel( csi::xml::Element & o_rParentElement,
+ const char * i_sLabel )
+{
+ if ( NOT csv::no_str(i_sLabel) )
+ {
+ o_rParentElement
+ >> *new html::Label(i_sLabel)
+ << " ";
+ }
+}
+
+DYN csi::html::Table &
+Create_ChildListTable( const char * i_sTitle )
+{
+ html::Table *
+ dpTable = new html::Table;
+ *dpTable
+ << new html::ClassAttr( "childlist")
+ << new xml::AnAttribute( "border", "1" )
+ << new xml::AnAttribute( "cellpadding", "5" )
+ << new xml::AnAttribute( "cellspacing", "0" )
+ << new html::WidthAttr( "100%" );
+
+ html::TableRow &
+ rRow = dpTable->AddRow();
+ rRow
+ << new html::ClassAttr("subtitle")
+ >> *new html::TableCell
+ << new xml::AnAttribute( "colspan","2" )
+ >> *new html::Headline(4)
+ << i_sTitle;
+ return *dpTable;
+}
+
+const char *
+Link2Ce( const OuputPage_Environment & i_rEnv,
+ const ary::cpp::CodeEntity & i_rCe )
+{
+ const uintt nMaxSize
+ = 3000;
+ static char sLink[nMaxSize];
+ static LinkCreator aLinkCreator( &sLink[0], nMaxSize );
+ sLink[0] = NULCH;
+
+ aLinkCreator.SetEnv(i_rEnv);
+ i_rCe.Accept(aLinkCreator);
+
+ return sLink;
+}
+
+const char *
+Link2CppDefinition( const OuputPage_Environment & i_rEnv,
+ const ary::cpp::DefineEntity & i_rDef )
+{
+ const uintt nMaxSize
+ = 1000;
+ static char sLink[nMaxSize];
+ static LinkCreator aLinkCreator( &sLink[0], nMaxSize );
+ sLink[0] = NULCH;
+
+ aLinkCreator.SetEnv(i_rEnv);
+ i_rDef.Accept(aLinkCreator);
+
+ return sLink;
+}
+
+const ary::cpp::CodeEntity *
+FindUnambiguousCe( const OuputPage_Environment & i_rEnv,
+ const ary::QualifiedName & i_rQuName,
+ const ary::cpp::Class * i_pJustDocumentedClass )
+{
+ if ( i_rEnv.CurNamespace() == 0 )
+ return 0;
+
+ const ary::cpp::CodeEntity * ret = 0;
+
+ if ( NOT i_rQuName.IsQualified() )
+ {
+ if ( i_pJustDocumentedClass != 0 )
+ ret = i_rEnv.Gate().Ces().Search_CeLocal( i_rQuName.LocalName(),
+ i_rQuName.IsFunction(),
+ *i_rEnv.CurNamespace(),
+ i_pJustDocumentedClass );
+ if (ret != 0)
+ return ret;
+
+ ret = i_rEnv.Gate().Ces().Search_CeLocal( i_rQuName.LocalName(),
+ i_rQuName.IsFunction(),
+ *i_rEnv.CurNamespace(),
+ i_rEnv.CurClass() );
+ }
+ if (ret != 0)
+ return ret;
+
+ return i_rEnv.Gate().Ces().Search_CeAbsolute( *i_rEnv.CurNamespace(),
+ i_rQuName );
+}
+
+void
+ShowDocu_On( csi::xml::Element & o_rOut,
+ Docu_Display & io_rDisplay,
+ const ary::cpp::CppEntity & i_rRE )
+{
+ if (i_rRE.Docu().Data() != 0)
+ {
+ io_rDisplay.Assign_Out( o_rOut );
+ io_rDisplay.Process(i_rRE.Docu());
+ io_rDisplay.Unassign_Out();
+ }
+}
+
+void
+WriteOut_TokenList( csi::xml::Element & o_rOut,
+ const StringVector & i_rTokens,
+ const char * i_sSeparator )
+{
+ if ( i_rTokens.size() > 0 )
+ {
+ StringVector::const_iterator
+ it = i_rTokens.begin();
+ StringVector::const_iterator
+ itEnd = i_rTokens.end();
+
+ o_rOut << *it;
+ for ( ++it; it != itEnd; ++it )
+ {
+ o_rOut << i_sSeparator << *it;
+ }
+ };
+
+}
+
+void
+EraseLeadingSpace( String & io_rStr )
+{
+ if ( *io_rStr.c_str() < 33 AND io_rStr.length() > 0 )
+ {
+ const unsigned char * pNew;
+ for ( pNew = (const unsigned char * ) io_rStr.c_str();
+ *pNew < 33 AND *pNew != 0;
+ ++pNew ) {}
+ String sNew( (const char*)pNew );
+ io_rStr = sNew;
+ }
+}
+
+void
+WriteOut_LinkedFunctionText( csi::xml::Element & o_rTitleOut,
+ adcdisp::ParameterTable & o_rParameters,
+ const ary::cpp::Function & i_rFunction,
+ const OuputPage_Environment & i_rEnv,
+ bool * o_bIsConst,
+ bool * o_bIsVirtual )
+{
+ // write pre-name:
+ const ary::cpp::FunctionFlags & rFlags = i_rFunction.Flags();
+ if ( rFlags.IsStaticLocal() OR rFlags.IsStaticMember() )
+ o_rTitleOut << "static ";
+ if ( rFlags.IsExplicit() )
+ o_rTitleOut << "explicit ";
+ if ( rFlags.IsMutable() )
+ o_rTitleOut << "mutable ";
+ if ( i_rFunction.Virtuality() != ary::cpp::VIRTUAL_none )
+ o_rTitleOut << "virtual ";
+// o_rTitleOut << new html::LineBreak;
+
+ Get_LinkedTypeText( o_rTitleOut, i_rEnv, i_rFunction.ReturnType() );
+
+ // write name:
+ o_rTitleOut
+ << " "
+ >> *new html::Strong
+ << i_rFunction.LocalName();
+ o_rTitleOut
+ << "(";
+
+
+ csi::xml::Element * pOutLast = &o_rTitleOut;
+
+ // write post-name:
+ FunctionParam_Iterator fit;
+ fit.Assign(i_rFunction);
+
+ if (fit)
+ {
+ o_rParameters.AddEntry();
+ Get_LinkedTypeText( o_rParameters.Type(), i_rEnv, fit.CurType() );
+ o_rParameters.Type() << " ";
+ o_rParameters.Name() << " " << fit.CurName();
+
+ for ( ++fit; fit; ++fit )
+ {
+ o_rParameters.Name() << ",";
+ o_rParameters.AddEntry();
+ Get_LinkedTypeText( o_rParameters.Type(), i_rEnv, fit.CurType() );
+ o_rParameters.Name() << fit.CurName();
+ }
+
+ pOutLast = &o_rParameters.Name();
+ o_rParameters.Name() << " ";
+ }
+
+ *pOutLast << ")";
+ if ( fit.IsFunctionConst() )
+ {
+ *pOutLast << " const";
+ if ( o_bIsConst != 0 )
+ *o_bIsConst = true;
+ }
+ if ( fit.IsFunctionVolatile() )
+ {
+ *pOutLast << " volatile";
+ if ( o_bIsVirtual != 0 )
+ *o_bIsVirtual = true;
+ }
+
+ // write Exceptions:
+ const std::vector< ary::cpp::Type_id > *
+ pThrow = i_rFunction.Exceptions();
+ if ( pThrow)
+ {
+ std::vector< ary::cpp::Type_id >::const_iterator
+ it = pThrow->begin();
+ std::vector< ary::cpp::Type_id >::const_iterator
+ it_end = pThrow->end();
+
+ if (it != it_end)
+ {
+ o_rParameters.AddEntry();
+ pOutLast = &o_rParameters.Name();
+
+ o_rParameters.Name() << " throw( ";
+ Get_LinkedTypeText(o_rParameters.Name(), i_rEnv, *it);
+
+ for ( ++it; it != it_end; ++it )
+ {
+ o_rParameters.Name() << ", ";
+ Get_LinkedTypeText(o_rParameters.Name(), i_rEnv, *it);
+ }
+ o_rParameters.Name() << " )";
+ }
+ else
+ {
+ *pOutLast << " throw()";
+ }
+ } // endif // pThrow
+
+ // abstractness:
+ if ( i_rFunction.Virtuality() == ary::cpp::VIRTUAL_abstract )
+ *pOutLast << " = 0";
+
+ // finish:
+ *pOutLast << ";";
+}
+
+
+
+} // namespace dshelp
diff --git a/autodoc/source/display/html/hdimpl.hxx b/autodoc/source/display/html/hdimpl.hxx
new file mode 100644
index 000000000000..ca882ec4152f
--- /dev/null
+++ b/autodoc/source/display/html/hdimpl.hxx
@@ -0,0 +1,247 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_DISPLAY_HDIMPL_HXX
+#define ADC_DISPLAY_HDIMPL_HXX
+
+// BASE CLASSES
+#include <udm/html/htmlitem.hxx>
+// USED SERVICES
+#include "easywri.hxx"
+#include <cosv/bstream.hxx>
+#include <ary/ary_disp.hxx>
+#include <ary/cpp/c_namesp.hxx>
+#include <ary/cpp/c_ce.hxx>
+#include "aryattrs.hxx" // For compatibility with earlier times, when those funtions were in this header.
+
+
+namespace ary
+{
+ namespace cpp
+ {
+ class CodeEntity;
+ class Class;
+ class DisplayGate;
+ class Function;
+ class DefineEntity;
+ class OperationSignature;
+ }
+
+ class QualifiedName;
+}
+namespace csi
+{
+ namespace xml
+ {
+ class Element;
+ }
+ namespace html
+ {
+ class Table;
+ }
+}
+
+namespace adcdisp
+{
+ class ParameterTable;
+}
+
+class OuputPage_Environment;
+class Docu_Display;
+
+class HtmlDisplay_Impl
+{
+ public:
+ ~HtmlDisplay_Impl();
+
+ const OuputPage_Environment &
+ Env() const { return *pEnv; }
+
+ // ACCESS
+ OuputPage_Environment &
+ Env() { return *pEnv; }
+ EasyWriter & Easy() { return aWriteHelper; }
+ csi::xml::Element & CurOut() { return aWriteHelper.Out(); }
+
+ protected:
+ HtmlDisplay_Impl(
+ OuputPage_Environment &
+ io_rEnv );
+ private:
+ // DATA
+ OuputPage_Environment *
+ pEnv;
+ EasyWriter aWriteHelper;
+};
+
+
+namespace dshelp
+{
+
+void DisplaySlot(
+ ary::Display & o_rDisplay,
+ const ary::AryGroup &
+ i_rGroup,
+ ary::SlotAccessId i_nSlot );
+
+
+const char * PathUp(
+ uintt i_nLevels );
+const char * PathPerLevelsUp(
+ uintt i_nLevels,
+ const char * i_nPathBelowDestinationLevel );
+
+const char * PathPerRoot(
+ const OuputPage_Environment &
+ i_rEnv,
+ const char * i_sPathFromRootDir );
+const char * PathPerNamespace(
+ const OuputPage_Environment &
+ i_rEnv,
+ const char * i_sPathFromNamespaceDir );
+
+void Create_ChildListLabel(
+ csi::xml::Element & o_rParentElement,
+ const char * i_sLabel );
+DYN csi::html::Table &
+ Create_ChildListTable(
+ const char * i_sTitle );
+
+const char * HtmlFileName(
+ const char * i_sPrefix,
+ const char * i_sEntityName );
+
+inline const char *
+ClassFileName( const char * i_sClassLocalName )
+ { return HtmlFileName( "c-", i_sClassLocalName); }
+inline const char *
+EnumFileName( const char * i_sEnumLocalName )
+ { return HtmlFileName( "e-", i_sEnumLocalName); }
+inline const char *
+TypedefFileName( const char * i_sTypedefLocalName )
+ { return HtmlFileName( "t-", i_sTypedefLocalName); }
+inline const char *
+FileFileName( const char * i_sFileLocalName )
+ { return HtmlFileName( "f-", i_sFileLocalName); }
+
+const char * Path2Class(
+ uintt i_nLevelsUp,
+ const char * i_sClassLocalName );
+
+const char * Path2Child(
+ const char * i_sFileName,
+ const char * i_sSubDir = 0 );
+
+const char * Path2ChildNamespace(
+ const char * i_sLocalName );
+
+String OperationLink(
+ const ary::cpp::Gate & i_gate,
+ const String & i_sOpName,
+ ary::cpp::Ce_id i_nOpId,
+ const char * i_sPrePath = "" );
+const char * DataLink(
+ const String & i_sLocalName,
+ const char * i_sPrePath = "" );
+
+inline String
+OperationLabel( const String & i_sOpName,
+ ary::cpp::Ce_id i_nOpId,
+ const ary::cpp::Gate & i_gate )
+ { return String(OperationLink(i_gate, i_sOpName, i_nOpId) + 1); } // Skip '#' in front.
+inline const char *
+DataLabel( const String & i_sLocalName )
+ { return DataLink(i_sLocalName) + 1; } // Skip '#' in front.
+
+
+void Get_LinkedTypeText(
+ csi::xml::Element & o_rOut,
+ const OuputPage_Environment &
+ i_rEnv,
+ ary::cpp::Type_id i_nId,
+ bool i_bWithAbsolutifier = true );
+
+
+const char * Link2Ce(
+ const OuputPage_Environment &
+ i_rEnv,
+ const ary::cpp::CodeEntity &
+ i_rCe );
+
+const char * Link2CppDefinition(
+ const OuputPage_Environment &
+ i_rEnv,
+ const ary::cpp::DefineEntity &
+ i_rDef );
+
+const ary::cpp::CodeEntity *
+ FindUnambiguousCe(
+ const OuputPage_Environment &
+ i_rEnv,
+ const ary::QualifiedName &
+ i_rQuName,
+ const ary::cpp::Class * i_pJustDocumentedClass );
+
+void ShowDocu_On(
+ csi::xml::Element & o_rOut,
+ Docu_Display & io_rDisplay,
+ const ary::cpp::CppEntity &
+ i_rRE );
+
+void WriteOut_TokenList(
+ csi::xml::Element & o_rOut,
+ const StringVector & i_rTokens,
+ const char * i_sSeparator );
+
+void EraseLeadingSpace(
+ String & io_rStr );
+
+/** @param o_bIsConst
+ *o_bIsConst will be set to true, if o_bIsConst != 0 and function is const.
+ If the function is not const, *o_bIsConst remains unchanged!
+
+ @param o_bIsVirtual
+ The same as o_bIsConst.
+*/
+void WriteOut_LinkedFunctionText(
+ csi::xml::Element & o_rTitleOut,
+ adcdisp::ParameterTable &
+ o_rParameters,
+ const ary::cpp::Function &
+ i_rFunction,
+ const OuputPage_Environment &
+ i_rEnv,
+ bool * o_bIsConst = 0,
+ bool * o_bIsVirtual = 0 );
+
+
+
+} // namespace dshelp
+
+using namespace dshelp;
+
+#endif
diff --git a/autodoc/source/display/html/html_kit.cxx b/autodoc/source/display/html/html_kit.cxx
new file mode 100644
index 000000000000..8b43373505fb
--- /dev/null
+++ b/autodoc/source/display/html/html_kit.cxx
@@ -0,0 +1,305 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "html_kit.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include <stdio.h>
+#include <ary/cpp/c_slntry.hxx>
+#include "hdimpl.hxx"
+
+
+namespace adcdisp
+{
+
+
+using namespace csi::xml;
+using namespace csi::html;
+
+
+void
+PageTitle_Left::operator()( XmlElement & o_rOwner,
+ const char * i_sTypeTitle,
+ const String & i_sLocalName )
+{
+ o_rOwner
+ >> *new Headline(2)
+ << i_sTypeTitle
+ << " "
+ << i_sLocalName;
+}
+
+void
+PageTitle_Std::operator()( XmlElement & o_rOwner,
+ const char * i_sTypeTitle,
+ const String & i_sLocalName )
+{
+ o_rOwner
+ >> *new AnElement("div")
+ << new ClassAttr("title")
+ >> *new Headline(2)
+ << i_sTypeTitle
+ << " "
+ << i_sLocalName;
+}
+
+XmlElement &
+PageTitle_Std::operator()( XmlElement & o_rOwner )
+{
+ XmlElement & ret =
+ o_rOwner
+ >> *new AnElement("div")
+ << new ClassAttr("title")
+ >> *new Headline(2);
+ return ret;
+}
+
+void
+OperationTitle::operator()( XmlElement & o_owner,
+ const char * i_itemName,
+ ary::cpp::Ce_id i_id,
+ const ::ary::cpp::Gate & i_gate )
+{
+ o_owner
+ >> *new Label( OperationLabel(i_itemName, i_id, i_gate) )
+ << " ";
+ o_owner
+ << i_itemName;
+}
+
+
+void
+TemplateClause::operator()( XmlElement & o_rOwner,
+ const List_TplParams & i_rTplParams )
+{
+ if ( i_rTplParams.size() == 0 )
+ return;
+
+ Element & rOut =
+ o_rOwner
+ << new LineBreak
+ >> *new Paragraph
+ >> *new Strong
+ << "template< ";
+
+ List_TplParams::const_iterator
+ it = i_rTplParams.begin();
+ List_TplParams::const_iterator
+ itEnd = i_rTplParams.end();
+
+ rOut
+ << (*it).Name();
+ for ( ++it; it != itEnd; ++it )
+ {
+ rOut
+ << ", "
+ << (*it).Name();
+ } // end for
+ rOut << " >";
+}
+
+ExplanationList::ExplanationList( XmlElement & o_rOwner,
+ bool i_bMemberStyle )
+ : pList( new DefList),
+ pTerm(0),
+ pDefinition(0),
+ bMemberStyle(i_bMemberStyle)
+{
+ if (bMemberStyle)
+ *pList << new ClassAttr("member");
+
+ o_rOwner << pList;
+}
+
+void
+ExplanationList::AddEntry( const char * i_sTerm,
+ const char * i_sDifferentClass )
+{
+ DefListTerm & rNewTerm = pList->AddTerm();
+ if ( i_sDifferentClass != 0 )
+ {
+ rNewTerm << new ClassAttr(i_sDifferentClass);
+ }
+ else if (bMemberStyle)
+ {
+ rNewTerm << new ClassAttr("member");
+ }
+ if ( i_sTerm != 0 )
+ rNewTerm << i_sTerm;
+
+ pTerm = &rNewTerm;
+ pDefinition = &pList->AddDefinition();
+ if (bMemberStyle)
+ *pDefinition << new ClassAttr("member");
+}
+
+void
+ExplanationList::AddEntry_NoTerm()
+{
+ pTerm = 0;
+ pDefinition = &pList->AddDefinition();
+ if (bMemberStyle)
+ *pDefinition << new ClassAttr("member");
+}
+
+ExplanationTable::ExplanationTable( XmlElement & o_rOwner )
+ : pTable(0),
+ pTerm(0),
+ pDefinition(0)
+{
+ pTable = new Table("0", "100%", "3", "0");
+ *pTable << new AnAttribute("class", "expl-table");
+ o_rOwner << pTable;
+}
+
+void
+ExplanationTable::AddEntry( const char * i_sTerm,
+ const char * i_sDifferentStyle )
+{
+ TableRow &
+ rNewRow = pTable->AddRow();
+ TableCell &
+ rNewTerm = rNewRow.AddCell();
+ TableCell &
+ rNewDefinition = rNewRow.AddCell();
+
+ if ( i_sDifferentStyle == 0 )
+ {
+ rNewTerm << new WidthAttr("15%")
+ << new StyleAttr("vertical-align:top; font-weight:bold");
+ }
+ else
+ {
+ rNewTerm << new StyleAttr(i_sDifferentStyle);
+ }
+ if ( i_sTerm != 0 )
+ rNewTerm << i_sTerm;
+
+ pTerm = &rNewTerm;
+ pDefinition = & (rNewDefinition >> *new APureElement("pre"));
+}
+
+ParameterTable::ParameterTable( XmlElement & o_rOwner )
+ : pTable(0),
+ pTerm(0),
+ pDefinition(0)
+{
+ pTable = new Table;
+ *pTable << new AnAttribute("class", "param-table");
+ o_rOwner << pTable;
+}
+
+void
+ParameterTable::AddEntry()
+{
+ TableRow &
+ rNewRow = pTable->AddRow();
+ TableCell &
+ rNewTerm = rNewRow.AddCell();
+ TableCell &
+ rNewDefinition = rNewRow.AddCell();
+
+ pTerm = &rNewTerm;
+ pDefinition = &rNewDefinition;
+}
+
+FlagTable::FlagTable( XmlElement & o_rOwner,
+ uintt i_nNrOfColumns )
+{
+ pTable = new Table;
+ *pTable << new AnAttribute("class", "flag-table");
+ *pTable << new AnAttribute("border", "1");
+ *pTable << new AnAttribute("cellspacing", "0");
+ o_rOwner << pTable;
+
+ TableRow & rRow1 = pTable->AddRow();
+ TableRow & rRow2 = pTable->AddRow();
+
+ for ( uintt c = 0; c < i_nNrOfColumns; ++c )
+ {
+ TableCell & rCell1 = rRow1.AddCell();
+ int nWidth = 100 / i_nNrOfColumns;
+ static char sWidth[20];
+ sprintf( sWidth, "%d%%", nWidth ); // SAFE SPRINTF (#100211# - checked)
+
+ rCell1
+ << new WidthAttr( sWidth )
+ << new ClassAttr( "flagname" );
+ TableCell & rCell2 = rRow2.AddCell();
+ aCells.push_back( CellPair(&rCell1, &rCell2) );
+ } // end for
+}
+
+void
+FlagTable::SetColumn( uintt i_nColumnPosition,
+ const char * i_sColumnName,
+ bool i_bValue )
+{
+ csv_assert( i_nColumnPosition < aCells.size() );
+
+ TableCell &
+ rCell1 = *aCells[i_nColumnPosition].first;
+ TableCell &
+ rCell2 = *aCells[i_nColumnPosition].second;
+ rCell1
+ << i_sColumnName;
+ if (i_bValue)
+ {
+ rCell2
+ << new ClassAttr("flagyes")
+ << "YES";
+ }
+ else //
+ {
+ rCell2
+ << new ClassAttr("flagno")
+ << "NO";
+ } // endif
+}
+
+IndexList::IndexList( XmlElement & o_rOwner )
+ : pList( new DefList ),
+ pTerm(0),
+ pDefinition(0)
+{
+ o_rOwner << pList;
+}
+
+void
+IndexList::AddEntry()
+{
+ pTerm = &pList->AddTerm();
+ pDefinition = &pList->AddDefinition();
+}
+
+
+} // namespace adcdisp
+
+
+
diff --git a/autodoc/source/display/html/html_kit.hxx b/autodoc/source/display/html/html_kit.hxx
new file mode 100644
index 000000000000..ad321d05aac7
--- /dev/null
+++ b/autodoc/source/display/html/html_kit.hxx
@@ -0,0 +1,198 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_DISPLAY_HTML_KIT_HXX
+#define ADC_DISPLAY_HTML_KIT_HXX
+
+// BASE CLASSES
+#include <udm/xml/xmlitem.hxx>
+#include <udm/html/htmlitem.hxx>
+// USED SERVICES
+#include <ary/cpp/c_types4cpp.hxx>
+
+namespace ary
+{
+ namespace cpp
+ {
+ struct S_TplParam;
+ class OperationSignature;
+ class Gate;
+ }
+}
+
+
+
+
+namespace adcdisp
+{
+
+typedef csi::xml::Element XmlElement;
+
+class PageTitle_Left
+{
+ public:
+ void operator()(
+ XmlElement & o_rOwner,
+ const char * i_sTypeTitle,
+ const String & i_sLocalName );
+};
+
+class PageTitle_Std
+{
+ public:
+ void operator()(
+ XmlElement & o_rOwner,
+ const char * i_sTypeTitle,
+ const String & i_sLocalName );
+ XmlElement & operator()(
+ XmlElement & o_rOwner );
+};
+
+class OperationTitle
+{
+ public:
+ void operator()(
+ XmlElement & o_rOwner,
+ const char * i_sItemName,
+ ary::cpp::Ce_id i_nId,
+ const ::ary::cpp::Gate &
+ i_gate );
+};
+
+
+class TemplateClause
+{
+ public:
+ typedef std::vector< ary::cpp::S_TplParam> List_TplParams;
+
+ void operator()(
+ XmlElement & o_rOwner,
+ const List_TplParams &
+ i_rTplParams );
+};
+
+
+class ExplanationList
+{
+ public:
+ ExplanationList(
+ XmlElement & o_rOwner,
+ bool i_bMemberStyle = false );
+
+ void AddEntry(
+ const char * i_sTerm = 0,
+ const char * i_sDifferentClass = 0 );
+ void AddEntry_NoTerm();
+
+ XmlElement & Term() { return *pTerm; }
+ XmlElement & Def() { return *pDefinition; }
+
+ private:
+ csi::html::DefList* pList;
+ XmlElement * pTerm;
+ XmlElement * pDefinition;
+ bool bMemberStyle;
+};
+
+class ExplanationTable
+{
+ public:
+ ExplanationTable(
+ XmlElement & o_rOwner );
+
+ void AddEntry(
+ const char * i_sTerm = 0,
+ const char * i_sDifferentStyle = 0 );
+
+ XmlElement & Term() { return *pTerm; }
+ XmlElement & Def() { return *pDefinition; }
+
+ private:
+ csi::html::Table* pTable;
+ XmlElement * pTerm;
+ XmlElement * pDefinition;
+};
+
+class ParameterTable
+{
+ public:
+ ParameterTable(
+ XmlElement & o_rOwner );
+
+ void AddEntry();
+
+ XmlElement & Type() { return *pTerm; }
+ XmlElement & Name() { return *pDefinition; }
+
+ private:
+ csi::html::Table* pTable;
+ XmlElement * pTerm;
+ XmlElement * pDefinition;
+};
+
+class FlagTable
+{
+ public:
+ FlagTable(
+ XmlElement & o_rOwner,
+ uintt i_nNrOfColumns );
+
+ void SetColumn(
+ uintt i_nColumnPosition, /// Starting with 0.
+ const char * i_sColumnName,
+ bool i_bValue ); /// "YES" or "NO"
+ private:
+ typedef std::pair< csi::html::TableCell*, csi::html::TableCell* > CellPair;
+
+ // DATA
+ csi::html::Table* pTable;
+ std::vector<CellPair>
+ aCells;
+};
+
+class IndexList
+{
+ public:
+ IndexList(
+ XmlElement & o_rOwner );
+
+ void AddEntry();
+
+ XmlElement & Term() { return *pTerm; }
+ XmlElement & Def() { return *pDefinition; }
+
+ private:
+ csi::html::DefList* pList;
+ XmlElement * pTerm;
+ XmlElement * pDefinition;
+};
+
+
+
+
+} // namespace adcdisp
+#endif
diff --git a/autodoc/source/display/html/makefile.mk b/autodoc/source/display/html/makefile.mk
new file mode 100644
index 000000000000..58046760ebd7
--- /dev/null
+++ b/autodoc/source/display/html/makefile.mk
@@ -0,0 +1,78 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..$/..$/..
+
+PRJNAME=autodoc
+TARGET=display_html
+
+
+# --- Settings -----------------------------------------------------
+
+ENABLE_EXCEPTIONS=true
+PRJINC=$(PRJ)$/source
+
+.INCLUDE : settings.mk
+.INCLUDE : $(PRJ)$/source$/mkinc$/fullcpp.mk
+
+
+# --- Files --------------------------------------------------------
+
+OBJFILES= \
+ $(OBJ)$/aryattrs.obj \
+ $(OBJ)$/cfrstd.obj \
+ $(OBJ)$/chd_udk2.obj \
+ $(OBJ)$/cre_link.obj \
+ $(OBJ)$/dsply_cl.obj \
+ $(OBJ)$/dsply_da.obj \
+ $(OBJ)$/dsply_op.obj \
+ $(OBJ)$/easywri.obj \
+ $(OBJ)$/hd_chlst.obj \
+ $(OBJ)$/hd_docu.obj \
+ $(OBJ)$/hdimpl.obj \
+ $(OBJ)$/html_kit.obj \
+ $(OBJ)$/nav_main.obj \
+ $(OBJ)$/navibar.obj \
+ $(OBJ)$/outfile.obj \
+ $(OBJ)$/opageenv.obj \
+ $(OBJ)$/pagemake.obj \
+ $(OBJ)$/pm_aldef.obj \
+ $(OBJ)$/pm_base.obj \
+ $(OBJ)$/pm_class.obj \
+ $(OBJ)$/pm_help.obj \
+ $(OBJ)$/pm_index.obj \
+ $(OBJ)$/pm_namsp.obj \
+ $(OBJ)$/pm_start.obj \
+ $(OBJ)$/protarea.obj
+
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : target.mk
+
+
+
diff --git a/autodoc/source/display/html/nav_main.cxx b/autodoc/source/display/html/nav_main.cxx
new file mode 100644
index 000000000000..e61099fc502f
--- /dev/null
+++ b/autodoc/source/display/html/nav_main.cxx
@@ -0,0 +1,377 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "nav_main.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include <cosv/tpl/tpltools.hxx>
+#include <ary/cpp/c_ce.hxx>
+#include <ary/cpp/c_gate.hxx>
+#include <ary/cpp/c_namesp.hxx>
+#include <ary/cpp/c_class.hxx>
+#include <ary/loc/loc_file.hxx>
+#include <udm/html/htmlitem.hxx>
+#include "hdimpl.hxx"
+#include "opageenv.hxx"
+#include "strconst.hxx"
+
+
+using namespace ::csi::html;
+using namespace ::csi::xml;
+
+
+const String sOverview("Overview");
+const String sNamespace("Namespace");
+const String sClass("Class");
+const String sTree("Tree");
+const String sProject("Project");
+const String sFile("File");
+const String sIndex("Index");
+const String sHelp("Help");
+
+
+
+//******************** MainItem and derived ones ***************//
+class MainItem
+{
+ public:
+ virtual ~MainItem() {}
+ void Write2(
+ TableRow & o_rOut );
+ private:
+ virtual void do_Write2(
+ TableRow & o_rOut ) = 0;
+};
+
+inline void
+MainItem::Write2( TableRow & o_rOut )
+ { do_Write2(o_rOut); }
+
+
+namespace
+{
+
+class MainRowItem : public MainItem
+{
+ public:
+ MainRowItem(
+ const String & i_sText,
+ const char * i_sLink,
+ const char * i_sTip );
+ ~MainRowItem();
+ private:
+ enum E_Style { eSelf, eNo, eStd };
+
+ virtual void do_Write2(
+ TableRow & o_rOut );
+ String sText;
+ String sLink;
+ String sTip;
+};
+
+MainRowItem::MainRowItem( const String & i_sText,
+ const char * i_sLink,
+ const char * i_sTip )
+ : sText(i_sText),
+ sLink(i_sLink),
+ sTip(i_sTip)
+{
+}
+
+MainRowItem::~MainRowItem()
+{
+}
+
+void
+MainRowItem::do_Write2( TableRow & o_rOut )
+{
+ TableCell & rCell = o_rOut.AddCell();
+
+ rCell
+ << new ClassAttr( "navimain" )
+ << new XmlCode("&nbsp;")
+ >> *new Link(sLink.c_str())
+ << sText.c_str();
+ rCell
+ << new XmlCode("&nbsp;");
+}
+
+
+class SelectedItem : public MainItem
+{
+ public:
+ SelectedItem(
+ const String & i_sText )
+ : sText(i_sText) {}
+ private:
+ virtual void do_Write2(
+ TableRow & o_rOut );
+ String sText;
+};
+
+void
+SelectedItem::do_Write2( TableRow & o_rOut )
+{
+ TableCell & rCell = o_rOut.AddCell();
+
+ rCell
+ << new ClassAttr( "navimainself" )
+ << new XmlCode("&nbsp;")
+ << sText.c_str()
+ << new XmlCode("&nbsp;");
+}
+
+class UnavailableItem : public MainItem
+{
+ public:
+ UnavailableItem(
+ const String & i_sText )
+ : sText(i_sText) {}
+ private:
+ virtual void do_Write2(
+ TableRow & o_rOut );
+ String sText;
+};
+
+void
+UnavailableItem::do_Write2( TableRow & o_rOut )
+{
+ TableCell & rCell = o_rOut.AddCell();
+
+ rCell
+ << new ClassAttr( "navimainnone" )
+ << new XmlCode("&nbsp;")
+ << sText.c_str()
+ << new XmlCode("&nbsp;");
+}
+
+} // anonymous namespace
+
+//************************ MainRow ***************************//
+
+MainRow::MainRow( const OuputPage_Environment & i_rEnv )
+ : // aItems,
+ pEnv(&i_rEnv)
+{
+}
+
+MainRow::~MainRow()
+{
+ csv::erase_container_of_heap_ptrs(aItems);
+}
+
+void
+MainRow::SetupItems_Overview()
+{
+ Create_ItemList_Global( eSelf, eStd, eStd );
+}
+
+void
+MainRow::SetupItems_AllDefs()
+{
+ Create_ItemList_Global( eStd, eStd, eStd );
+}
+
+void
+MainRow::SetupItems_Index()
+{
+ Create_ItemList_Global( eStd, eSelf, eStd );
+}
+
+void
+MainRow::SetupItems_Help()
+{
+ Create_ItemList_Global( eStd, eStd, eSelf );
+}
+
+void
+MainRow::SetupItems_Ce( const ary::cpp::CodeEntity & i_rCe )
+{
+ csv_assert( pEnv->CurNamespace() != 0 );
+ bool bIsNamespace = i_rCe.Id() == pEnv->CurNamespace()->Id();
+ bool bHasClass = pEnv->CurClass() != 0;
+ bool bIsClass = dynamic_cast< const ary::cpp::Class * >(&i_rCe) != 0;
+
+ Create_ItemList_InDirTree_Cpp(
+ ( bIsNamespace ? eSelf : eStd ),
+ ( bIsClass ? eSelf : bHasClass ? eStd : eNo ),
+ eNo, 0 );
+}
+
+void
+MainRow::SetupItems_FunctionGroup()
+{
+ Create_ItemList_InDirTree_Cpp(
+ eStd,
+ (pEnv->CurClass() != 0 ? eStd : eNo),
+ eNo, 0 );
+}
+
+void
+MainRow::SetupItems_DataGroup()
+{
+ SetupItems_FunctionGroup();
+}
+
+void
+MainRow::Write2( csi::xml::Element & o_rOut ) const
+{
+ Table * pTable = new Table;
+ o_rOut
+ >> *pTable
+ << new AnAttribute( "class", "navimain" )
+ << new AnAttribute( "border", "0" )
+ << new AnAttribute( "cellpadding", "1" )
+ << new AnAttribute( "cellspacing", "0" );
+ TableRow & rRow = pTable->AddRow();
+ rRow
+ << new AnAttribute( "align", "center" )
+ << new AnAttribute( "valign", "top" );
+ for ( ItemList::const_iterator it = aItems.begin();
+ it != aItems.end();
+ ++it )
+ {
+ (*it)->Write2( rRow );
+ }
+}
+
+void
+MainRow::Create_ItemList_Global( E_Style i_eOverview,
+ E_Style i_eIndex,
+ E_Style i_eHelp )
+{
+ if ( i_eOverview == eStd )
+ {
+ String sLinkOverview = ( i_eIndex == eSelf
+ ? dshelp::PathPerLevelsUp(
+ 1,
+ C_sHFN_Overview )
+ : C_sHFN_Overview );
+ Add_Item( i_eOverview, sOverview, sLinkOverview.c_str(), "" );
+ }
+ else
+ {
+ Add_Item( i_eOverview, sOverview, "", "" );
+ }
+
+ if ( i_eIndex == eSelf )
+ Add_Item( eStd, sNamespace, "../names/index.html", "" );
+ else
+ Add_Item( eStd, sNamespace, "names/index.html", "" );
+
+ Add_Item( eNo, sClass, "", "" );
+
+ if ( i_eIndex == eStd )
+ {
+ Add_Item( i_eIndex, sIndex, C_sPath_Index, "" );
+ }
+ else
+ {
+ Add_Item( i_eIndex, sIndex, "", "" );
+ }
+
+ if ( i_eHelp == eStd )
+ {
+ String sLinkHelp = ( i_eIndex == eSelf
+ ? PathPerLevelsUp(1,C_sHFN_Help)
+ : C_sHFN_Help );
+ Add_Item( i_eHelp, sHelp, sLinkHelp.c_str(), "" );
+ }
+ else
+ {
+ Add_Item( i_eHelp, sHelp, "", "" );
+ }
+}
+
+void
+MainRow::Create_ItemList_InDirTree_Cpp( E_Style i_eNsp,
+ E_Style i_eClass,
+ E_Style ,
+ const char * )
+{
+ String
+ sLinkOverview = PathPerRoot(*pEnv, C_sHFN_Overview);
+ Add_Item( eStd, sOverview, sLinkOverview.c_str(), "" );
+
+ if (i_eNsp == eStd)
+ {
+ String sLinkNamespace = PathPerNamespace(*pEnv, "index.html");
+ Add_Item( i_eNsp, sNamespace, sLinkNamespace.c_str(), "" );
+ }
+ else
+ {
+ Add_Item( i_eNsp, sNamespace, "", "" );
+ }
+
+ if (i_eClass == eStd)
+ {
+ csv_assert( pEnv->CurClass() != 0 );
+
+ StreamLock sLinkClass(300);
+ sLinkClass() << PathPerNamespace(*pEnv, "c-")
+ << pEnv->CurClass()->LocalName()
+ << ".html";
+ StreamLock sTipClass(300);
+ sTipClass() << "Class "
+ << pEnv->CurClass()->LocalName();
+ Add_Item( i_eClass, sClass, sLinkClass().c_str(), sTipClass().c_str() );
+ }
+ else
+ {
+ Add_Item( i_eClass, sClass, "", "" );
+ }
+
+
+ Add_Item( eStd, sIndex, PathPerRoot(*pEnv, C_sPath_Index), "" );
+ String
+ sLinkHelp = PathPerRoot(*pEnv, "help.html");
+ Add_Item( eStd, sHelp, sLinkHelp.c_str(), "" );
+}
+
+void
+MainRow::Add_Item( E_Style i_eStyle,
+ const String & i_sText,
+ const char * i_sLink,
+ const char * i_sTip )
+{
+ switch (i_eStyle)
+ {
+ case eStd: aItems.push_back( new MainRowItem(i_sText, i_sLink, i_sTip) );
+ break;
+ case eNo: aItems.push_back( new UnavailableItem(i_sText) );
+ break;
+ case eSelf: aItems.push_back( new SelectedItem(i_sText) );
+ break;
+ default:
+ csv_assert(false);
+ }
+}
+
+
+
diff --git a/autodoc/source/display/html/nav_main.hxx b/autodoc/source/display/html/nav_main.hxx
new file mode 100644
index 000000000000..f05bebe47969
--- /dev/null
+++ b/autodoc/source/display/html/nav_main.hxx
@@ -0,0 +1,118 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_DISPLAY_HTML_NAV_MAIN_HXX
+#define ADC_DISPLAY_HTML_NAV_MAIN_HXX
+
+// USED SERVICES
+
+namespace ary
+{
+namespace cpp
+{
+ class CodeEntity;
+}
+namespace loc
+{
+ class File;
+}
+}
+namespace csi
+{
+namespace xml
+{
+ class Element;
+}
+}
+
+class OuputPage_Environment;
+class MainItem;
+
+
+
+
+class MainRow
+{
+ public:
+ MainRow(
+ const OuputPage_Environment &
+ i_rEnv );
+ ~MainRow();
+
+ void SetupItems_Overview();
+ void SetupItems_AllDefs();
+ void SetupItems_Index();
+ void SetupItems_Help();
+
+ void SetupItems_Ce(
+ const ary::cpp::CodeEntity &
+ i_rCe );
+ void SetupItems_FunctionGroup(); /// For class member methods.
+ void SetupItems_DataGroup(); /// For class member data.
+
+ void Write2(
+ csi::xml::Element & o_rOut ) const;
+ private:
+ // Local
+ enum E_Style
+ {
+ eSelf,
+ eNo,
+ eStd
+ };
+
+ /** @precond
+ Only combinations of 1 eSelf and 2 eStd are allowed
+ as arguments, here.
+ */
+ void Create_ItemList_Global(
+ E_Style i_eOverview,
+ E_Style i_eIndex,
+ E_Style i_eHelp );
+ void Create_ItemList_InDirTree_Cpp(
+ E_Style i_eNsp,
+ E_Style i_eClass,
+ E_Style i_eTree,
+ const char * i_sTreeLink );
+ void Add_Item(
+ E_Style i_eStyle,
+ const String & i_sText,
+ const char * i_sLink,
+ const char * i_sTip );
+ // DATA
+ typedef std::vector< DYN MainItem* > ItemList;
+
+
+ ItemList aItems;
+ const OuputPage_Environment *
+ pEnv;
+};
+
+
+
+
+#endif
diff --git a/autodoc/source/display/html/navibar.cxx b/autodoc/source/display/html/navibar.cxx
new file mode 100644
index 000000000000..06f3e9397b8e
--- /dev/null
+++ b/autodoc/source/display/html/navibar.cxx
@@ -0,0 +1,315 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "navibar.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include <cosv/tpl/tpltools.hxx>
+#include "nav_main.hxx"
+#include "opageenv.hxx"
+
+
+using namespace csi::xml;
+using namespace csi::html;
+
+
+namespace
+{
+
+//************************ SubRowItem ***************************//
+
+class SubRowItem
+{
+ public:
+ SubRowItem(
+ const char * i_sText,
+ const char * i_sLink,
+ bool i_bActive,
+ bool i_bFirstOfRow = false );
+ ~SubRowItem();
+
+ void Write2(
+ Element & o_rOut ) const;
+ private:
+ String sText;
+ String sLink;
+ bool bIsActive;
+ bool bFirstOfRow;
+};
+
+SubRowItem::SubRowItem( const char * i_sText,
+ const char * i_sLink,
+ bool i_bActive,
+ bool i_bFirstOfRow )
+ : sText(i_sText),
+ sLink(i_sLink),
+ bIsActive(i_bActive),
+ bFirstOfRow(i_bFirstOfRow)
+{
+ csv_assert( NOT csv::no_str(i_sLink) );
+}
+
+SubRowItem::~SubRowItem()
+{
+}
+
+void
+SubRowItem::Write2( Element & o_rOut ) const
+{
+ o_rOut << new Sbr;
+ if ( NOT bFirstOfRow )
+ o_rOut << new XmlCode( "|&nbsp;" );
+ else
+ o_rOut << new XmlCode( "&nbsp;" );
+
+ if ( bIsActive )
+ {
+ o_rOut
+ >> *new Link( sLink.c_str() )
+ >> *new AnElement( "font" )
+ << new AnAttribute("size","-2")
+ >> *new Bold
+ << sText.c_str();
+ }
+ else
+ {
+ o_rOut
+ >> *new AnElement( "font" )
+ << new AnAttribute("size","-2")
+ << sText.c_str();
+ }
+}
+
+
+
+//************************ SubRow ***************************//
+
+class SubRow
+{
+ public:
+ SubRow(
+ const char * i_sTitle );
+ ~SubRow();
+
+ void AddItem(
+ const char * i_sText,
+ const char * i_sLink,
+ bool i_bActive );
+ void Write2(
+ Table & o_rOut ) const;
+ private:
+ typedef std::vector< DYN SubRowItem * > List_Items;
+
+ List_Items aItemList;
+ String sTitle;
+};
+
+SubRow::SubRow( const char * i_sTitle )
+// : // aItemList,
+ // sTitle
+{
+ StreamStr sUp(i_sTitle,0);
+ sUp.to_upper();
+ sTitle = sUp.c_str();
+}
+
+SubRow::~SubRow()
+{
+ for ( List_Items::iterator it = aItemList.begin();
+ it != aItemList.end();
+ ++it )
+ {
+ delete (*it);
+ }
+}
+
+inline void
+SubRow::AddItem( const char * i_sText,
+ const char * i_sLink,
+ bool i_bActive )
+{
+ aItemList.push_back( new SubRowItem(i_sText, i_sLink, i_bActive, aItemList.empty()) );
+}
+
+void
+SubRow::Write2( Table & o_rOut ) const
+{
+ TableRow * pRow = new TableRow;
+ o_rOut << pRow;
+
+ if (sTitle.length() > 0)
+ {
+ Element & rCell1 = pRow->AddCell();
+ rCell1
+ << new WidthAttr("20%")
+ >> *new AnElement( "font" )
+ << new AnAttribute("size","-2")
+ << sTitle
+ << ":";
+ }
+
+ Element & rCell2 = pRow->AddCell();
+ for ( List_Items::const_iterator it = aItemList.begin();
+ it != aItemList.end();
+ ++it )
+ {
+ (*it)->Write2( rCell2 );
+ }
+}
+
+
+} // anonymous namespace
+
+
+
+//************************* CheshireCat ***********************//
+
+
+typedef std::vector< DYN SubRow * > List_SubRows;
+
+struct NavigationBar::CheshireCat
+{
+ MainRow aMainRow;
+ List_SubRows aSubRows;
+ const OuputPage_Environment *
+ pEnv;
+
+
+ CheshireCat(
+ const OuputPage_Environment &
+ i_rEnv );
+ ~CheshireCat();
+};
+
+NavigationBar::
+CheshireCat::CheshireCat( const OuputPage_Environment & i_rEnv )
+ : aMainRow( i_rEnv ),
+ pEnv( & i_rEnv )
+{
+}
+
+NavigationBar::
+CheshireCat::~CheshireCat()
+{
+ csv::erase_container_of_heap_ptrs( aSubRows );
+}
+
+
+//************************ NavigationBar *******************//
+
+NavigationBar::NavigationBar( const OuputPage_Environment & i_rEnv,
+ E_GlobalLocation i_eLocation )
+ : pi( new CheshireCat(i_rEnv) )
+{
+ switch (i_eLocation)
+ {
+ case LOC_Overview: pi->aMainRow.SetupItems_Overview(); break;
+ case LOC_AllDefs: pi->aMainRow.SetupItems_AllDefs(); break;
+ case LOC_Index: pi->aMainRow.SetupItems_Index(); break;
+ case LOC_Help: pi->aMainRow.SetupItems_Help(); break;
+ default:
+ csv_assert(false);
+ }
+}
+
+NavigationBar::NavigationBar( const OuputPage_Environment & i_rEnv,
+ const ary::cpp::CodeEntity & i_rCe )
+ : pi( new CheshireCat(i_rEnv) )
+{
+ pi->aMainRow.SetupItems_Ce( i_rCe );
+}
+
+NavigationBar::NavigationBar( const OuputPage_Environment & i_rEnv,
+ E_CeGatheringType i_eCeGatheringType )
+ : pi( new CheshireCat(i_rEnv) )
+{
+ switch (i_eCeGatheringType)
+ {
+ case CEGT_operations: pi->aMainRow.SetupItems_FunctionGroup(); break;
+ case CEGT_data: pi->aMainRow.SetupItems_DataGroup(); break;
+ default:
+ csv_assert(false);
+ }
+}
+
+NavigationBar::~NavigationBar()
+{
+ csv::erase_container_of_heap_ptrs( pi->aSubRows );
+}
+
+void
+NavigationBar::MakeSubRow( const char * i_sTitle )
+{
+ pi->aSubRows.push_back( new SubRow(i_sTitle) );
+}
+
+void
+NavigationBar::AddItem( const char * i_sName,
+ const char * i_sLink,
+ bool i_bValid )
+{
+ csv_assert( pi->aSubRows.size() > 0 );
+ StreamStr sName(i_sName, 0);
+ sName.to_upper();
+
+ StreamLock aSum(100);
+ pi->aSubRows.back()->AddItem( sName.c_str(),
+ aSum() << "#" << i_sLink << c_str,
+ i_bValid );
+}
+
+void
+NavigationBar::Write( Element & o_rOut,
+ bool i_bWithSubRows ) const
+{
+ pi->aMainRow.Write2( o_rOut );
+
+ const_cast< NavigationBar* >(this)->pSubRowsTable = new Table;
+ o_rOut << pSubRowsTable;
+ *pSubRowsTable
+ << new AnAttribute( "class", "navisub" )
+ << new AnAttribute( "cellpadding", "0" )
+ << new AnAttribute( "cellspacing", "3" );
+
+ if (i_bWithSubRows)
+ {
+ Write_SubRows();
+ }
+}
+
+void
+NavigationBar::Write_SubRows() const
+{
+ for ( List_SubRows::const_iterator it = pi->aSubRows.begin();
+ it != pi->aSubRows.end();
+ ++it )
+ {
+ (*it)->Write2( *pSubRowsTable );
+ }
+}
diff --git a/autodoc/source/display/html/navibar.hxx b/autodoc/source/display/html/navibar.hxx
new file mode 100644
index 000000000000..4b90985d29a4
--- /dev/null
+++ b/autodoc/source/display/html/navibar.hxx
@@ -0,0 +1,118 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_DISPLAY_HTML_NAVIBAR_HXX
+#define ADC_DISPLAY_HTML_NAVIBAR_HXX
+
+// BASE CLASSES
+#include "hdimpl.hxx"
+
+namespace ary
+{
+namespace cpp
+{
+ class CodeEntity;
+}
+namespace loc
+{
+ class File;
+}
+}
+
+
+
+
+/** Creates a HTML navigation bar wth the following parts:
+
+ A main bar with fixed items.
+ Zero to several subbars with user defined items, depending of
+ the contents of the page.
+
+ The main bar contains those items:
+
+ Overview | Namespace | Class | Tree | Project | File | Index | Help
+*/
+class NavigationBar
+{
+ public:
+ enum E_GlobalLocation
+ {
+ LOC_Overview,
+ LOC_AllDefs,
+ LOC_Index,
+ LOC_Help
+ };
+ enum E_CeGatheringType
+ {
+ CEGT_operations,
+ CEGT_data
+ };
+
+ /// Used for Overview, Index and Help.
+ NavigationBar(
+ const OuputPage_Environment &
+ i_rEnv,
+ E_GlobalLocation i_eLocation );
+ /// Used for all Ces except operations and data.
+ NavigationBar(
+ const OuputPage_Environment &
+ i_rEnv,
+ const ary::cpp::CodeEntity &
+ i_rCe );
+ /** Used for operations and data.
+ */
+ NavigationBar(
+ const OuputPage_Environment &
+ i_rEnv,
+ E_CeGatheringType i_eCeGatheringType );
+ ~NavigationBar();
+
+ void MakeSubRow(
+ const char * i_sTitle );
+ void AddItem( /// Items are added to last made sub-row.
+ const char * i_sName,
+ const char * i_sLink,
+ bool i_bValid );
+ /** This writes the main bar and the pSubRowTable to o_rOut.
+ The pSubRowsTable stays in memory and can be filled later,
+ when all SubRow items are known.
+ */
+ void Write(
+ csi::xml::Element & o_rOut,
+ bool i_bWithSubRows = false ) const;
+ void Write_SubRows() const;
+
+ private:
+ struct CheshireCat;
+ Dyn<CheshireCat> pi;
+ csi::html::Table * pSubRowsTable;
+};
+
+
+
+
+#endif
diff --git a/autodoc/source/display/html/opageenv.cxx b/autodoc/source/display/html/opageenv.cxx
new file mode 100644
index 000000000000..49661f06d15f
--- /dev/null
+++ b/autodoc/source/display/html/opageenv.cxx
@@ -0,0 +1,489 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "opageenv.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include <cosv/ploc_dir.hxx>
+#include <ary/cpp/c_ce.hxx>
+#include <ary/cpp/c_class.hxx>
+#include <ary/cpp/c_enum.hxx>
+#include <ary/cpp/c_gate.hxx>
+#include <ary/cpp/c_namesp.hxx>
+#include <ary/cpp/c_tydef.hxx>
+#include <ary/cpp/cp_ce.hxx>
+#include <ary/loc/loc_file.hxx>
+#include <udm/html/htmlitem.hxx>
+#include <estack.hxx>
+#include "hdimpl.hxx"
+#include "strconst.hxx"
+
+
+const String C_sCppDir( "names" );
+const String C_sIndexDir( "ix" );
+
+
+//************************ Implementation ********************//
+
+namespace
+{
+
+void CreateDirectory( const csv::ploc::Path & i_rPath );
+
+void
+CreateDirectory( const csv::ploc::Path & i_rPath )
+{
+ csv::ploc::Directory aDirectory(i_rPath);
+ if (NOT aDirectory.Exists())
+ aDirectory.PhysicalCreate();
+}
+
+//************************ CheshireCat ********************//
+
+struct InNamespaceTree
+{
+ enum E_Type
+ {
+ t_unknown,
+ t_namespace,
+ t_type,
+ t_operations,
+ t_data
+ };
+
+ EStack< const ary::cpp::Namespace * >
+ aNamespaces; /// never empty.
+ EStack< const ary::cpp::Class * >
+ aClasses; /// maybe empty.
+ const ary::cpp::CodeEntity *
+ pCe; /// CurFileCe, maybe 0
+ E_Type eType;
+
+ InNamespaceTree(
+ const ary::cpp::Namespace &
+ i_rNsp );
+ ~InNamespaceTree();
+ void GoDown(
+ const ary::cpp::Namespace &
+ i_rNsp );
+ void GoDown(
+ const ary::cpp::Class &
+ i_rClass );
+ void GoUp();
+};
+
+InNamespaceTree::InNamespaceTree( const ary::cpp::Namespace & i_rNsp )
+ : // aNamespaces,
+ // aClasses,
+ pCe(0),
+ eType(t_unknown)
+{
+ aNamespaces.push( &i_rNsp );
+}
+
+InNamespaceTree::~InNamespaceTree()
+{
+}
+
+void
+InNamespaceTree::GoDown( const ary::cpp::Namespace & i_rNsp )
+{
+ aNamespaces.push(&i_rNsp);
+ aClasses.erase_all();
+ pCe = 0;
+ eType = t_unknown;
+}
+
+void
+InNamespaceTree::GoDown( const ary::cpp::Class & i_rClass )
+{
+ aClasses.push(&i_rClass);
+ pCe = 0;
+ eType = t_unknown;
+}
+
+void
+InNamespaceTree::GoUp()
+{
+ if ( NOT aClasses.empty() )
+ aClasses.pop();
+ else
+ aNamespaces.pop();
+ pCe = 0;
+ eType = t_unknown;
+}
+
+struct InIndex
+{
+ char cLetter;
+
+ InIndex() : cLetter('A') {}
+};
+
+
+} // anonymous namespace
+
+
+
+
+
+struct OuputPage_Environment::CheshireCat
+{
+ csv::ploc::Path aOutputRoot;
+ csv::ploc::Path aMyPath;
+ csv::StreamStr aFileName;
+
+ const ary::cpp::Gate *
+ pGate;
+ const display::CorporateFrame *
+ pLayout;
+ intt nDepth;
+
+ Dyn<InNamespaceTree>
+ pInNamespace;
+ Dyn<InIndex> pInIndex;
+
+ CheshireCat(
+ const csv::ploc::Path &
+ io_rOutputDir,
+ const ary::cpp::Gate &
+ i_rGate,
+ const display::CorporateFrame &
+ i_rLayout );
+ ~CheshireCat();
+ void AddQualifiedName2Path(
+ const ary::cpp::CodeEntity &
+ i_rCe,
+ bool i_bIncludeLocalName );
+
+ const Dyn<InNamespaceTree> &
+ NspEnv() const { return pInNamespace; }
+ Dyn<InNamespaceTree> &
+ NspEnv() { return pInNamespace; }
+ const ary::cpp::Namespace *
+ Namespace() const { return pInNamespace ? pInNamespace->aNamespaces.top() : 0; }
+ const ary::cpp::Class *
+ Class() const { return pInNamespace ? (pInNamespace->aClasses.empty() ? 0 : pInNamespace->aClasses.top()) : 0; }
+};
+
+OuputPage_Environment::
+CheshireCat::CheshireCat( const csv::ploc::Path & io_rOutputDir,
+ const ary::cpp::Gate & i_rGate,
+ const display::CorporateFrame & i_rLayout )
+ : aOutputRoot(io_rOutputDir),
+ aMyPath(io_rOutputDir),
+ aFileName(500),
+ pGate(&i_rGate),
+ pLayout(&i_rLayout),
+ nDepth(0),
+ pInNamespace(),
+ pInIndex()
+{
+}
+
+OuputPage_Environment::
+CheshireCat::~CheshireCat()
+{
+}
+
+void
+OuputPage_Environment::
+CheshireCat::AddQualifiedName2Path( const ary::cpp::CodeEntity & i_rCe,
+ bool i_bIncludeLocalName )
+{
+ if (NOT i_rCe.Owner().IsValid())
+ {
+ aMyPath.DirChain().PushBack( C_sCppDir );
+ return;
+ }
+
+ const ary::cpp::CodeEntity &
+ rParent = pGate->Ces().Find_Ce( i_rCe.Owner() );
+ AddQualifiedName2Path( rParent, true );
+
+ if ( i_bIncludeLocalName )
+ aMyPath.DirChain().PushBack( i_rCe.LocalName() );
+}
+
+
+
+//************************ OuputPage_Environment ********************//
+
+OuputPage_Environment::OuputPage_Environment( const csv::ploc::Path & io_rOutputDir,
+ const ary::cpp::Gate & i_rGate,
+ const display::CorporateFrame & i_rLayout )
+ : pi( new CheshireCat(io_rOutputDir, i_rGate, i_rLayout) )
+{
+}
+
+OuputPage_Environment::~OuputPage_Environment()
+{
+}
+
+void
+OuputPage_Environment::MoveDir_2Root()
+{
+ pi->NspEnv() = 0;
+ pi->pInIndex = 0;
+ pi->nDepth = 0;
+ while ( pi->aMyPath.DirChain().Size() > pi->aOutputRoot.DirChain().Size() )
+ pi->aMyPath.DirChain().PopBack();
+ pi->aMyPath.SetFile(String ::Null_());
+}
+
+void
+OuputPage_Environment::MoveDir_2Names()
+{
+ pi->NspEnv() = new InNamespaceTree( Gate().Ces().GlobalNamespace() );
+ pi->aMyPath.DirChain().PushBack( C_sCppDir );
+ pi->aMyPath.SetFile(String ::Null_());
+ ++pi->nDepth;
+
+ CreateDirectory( pi->aMyPath );
+}
+
+void
+OuputPage_Environment::MoveDir_Down2( const ary::cpp::Namespace & i_rNsp )
+{
+ csv_assert(i_rNsp.Depth() > 0);
+ csv_assert( pi->NspEnv() );
+ csv_assert( pi->Namespace()->CeId() == i_rNsp.Owner() );
+
+ pi->NspEnv()->GoDown( i_rNsp );
+ pi->aMyPath.DirChain().PushBack(i_rNsp.LocalName());
+ ++pi->nDepth;
+ pi->aMyPath.SetFile(String ::Null_());
+
+ CreateDirectory( pi->aMyPath );
+}
+
+void
+OuputPage_Environment::MoveDir_Down2( const ary::cpp::Class & i_rClass )
+{
+ csv_assert( pi->NspEnv() );
+ if ( i_rClass.Protection() == ary::cpp::PROTECT_global )
+ {
+ csv_assert( pi->Namespace()->CeId() == i_rClass.Owner() );
+ }
+ else
+ {
+ csv_assert( pi->Class() != 0 );
+ csv_assert( pi->Class()->CeId() == i_rClass.Owner() );
+ }
+
+ pi->NspEnv()->GoDown(i_rClass);
+ pi->aMyPath.DirChain().PushBack(i_rClass.LocalName());
+ pi->aMyPath.SetFile(String ::Null_());
+ ++pi->nDepth;
+
+ CreateDirectory( pi->aMyPath );
+}
+
+void
+OuputPage_Environment::MoveDir_2Index()
+{
+ MoveDir_2Root();
+ pi->pInIndex = new InIndex;
+ pi->aMyPath.DirChain().PushBack( String (C_sDIR_Index) );
+ pi->aMyPath.SetFile(String ::Null_());
+ pi->nDepth = 1;
+
+ CreateDirectory( pi->aMyPath );
+}
+
+void
+OuputPage_Environment::MoveDir_Up()
+{
+ if ( pi->nDepth == 1 )
+ {
+ MoveDir_2Root();
+ return;
+ }
+ else if ( pi->NspEnv() )
+ {
+ pi->NspEnv()->GoUp();
+ pi->aMyPath.DirChain().PopBack();
+ pi->aMyPath.SetFile(String ::Null_());
+ --pi->nDepth;
+ }
+}
+
+void
+OuputPage_Environment::SetFile_Css()
+{
+ pi->aMyPath.SetFile( C_sHFN_Css );
+}
+
+void
+OuputPage_Environment::SetFile_Overview()
+{
+ pi->aMyPath.SetFile( C_sHFN_Overview );
+}
+
+void
+OuputPage_Environment::SetFile_AllDefs()
+{
+ // Provisorium
+ pi->aMyPath.SetFile("def-all.html");
+}
+
+void
+OuputPage_Environment::SetFile_Index( char i_cLetter )
+{
+ csv_assert( 'A' <= i_cLetter AND i_cLetter <= 'Z' OR i_cLetter == '_' );
+
+ static StreamStr sIndexFileName(40);
+ sIndexFileName.seekp(0);
+ sIndexFileName << "index-";
+ if ( i_cLetter == '_' )
+ {
+ sIndexFileName << "27";
+ }
+ else
+ {
+ sIndexFileName << int(i_cLetter -'A' + 1);
+ }
+ sIndexFileName << ".html";
+
+ pi->aMyPath.SetFile( sIndexFileName.c_str() );
+}
+
+void
+OuputPage_Environment::SetFile_Help()
+{
+ pi->aMyPath.SetFile( C_sHFN_Help );
+}
+
+void
+OuputPage_Environment::SetFile_CurNamespace()
+{
+ csv_assert( pi->NspEnv() );
+ pi->aMyPath.SetFile("index.html");
+ pi->NspEnv()->pCe = pi->Namespace();
+ pi->NspEnv()->eType = InNamespaceTree::t_namespace;
+}
+
+void
+OuputPage_Environment::SetFile_Class( const ary::cpp::Class & i_rClass )
+{
+ csv_assert( pi->NspEnv() );
+ pi->aMyPath.SetFile( ClassFileName(i_rClass.LocalName()) );
+ pi->NspEnv()->pCe = &i_rClass;
+ pi->NspEnv()->eType = InNamespaceTree::t_type;
+}
+
+void
+OuputPage_Environment::SetFile_Enum( const ary::cpp::Enum & i_rEnum )
+{
+ csv_assert( pi->NspEnv() );
+ pi->aMyPath.SetFile( EnumFileName(i_rEnum.LocalName()) );
+ pi->NspEnv()->pCe = &i_rEnum;
+ pi->NspEnv()->eType = InNamespaceTree::t_type;
+}
+
+void
+OuputPage_Environment::SetFile_Typedef( const ary::cpp::Typedef & i_rTypedef )
+{
+ csv_assert( pi->NspEnv() );
+ pi->aMyPath.SetFile( TypedefFileName(i_rTypedef.LocalName()) );
+ pi->NspEnv()->pCe = &i_rTypedef;
+ pi->NspEnv()->eType = InNamespaceTree::t_type;
+}
+
+void
+OuputPage_Environment::SetFile_Operations( const ary::loc::File * i_pFile )
+{
+ csv_assert( pi->NspEnv() );
+ if ( CurClass() != 0 )
+ pi->aMyPath.SetFile( "o.html" );
+ else
+ {
+ csv_assert( i_pFile != 0 );
+ pi->aMyPath.SetFile( HtmlFileName("o-", i_pFile->LocalName()) );
+ }
+ pi->NspEnv()->pCe = 0;
+ pi->NspEnv()->eType = InNamespaceTree::t_operations;
+}
+
+void
+OuputPage_Environment::SetFile_Data( const ary::loc::File * i_pFile )
+{
+ csv_assert( pi->NspEnv() );
+ if ( CurClass() != 0 )
+ pi->aMyPath.SetFile( "d.html" );
+ else
+ {
+ csv_assert( i_pFile != 0 );
+ pi->aMyPath.SetFile( HtmlFileName("d-", i_pFile->LocalName()) );
+ }
+ pi->NspEnv()->pCe = 0;
+ pi->NspEnv()->eType = InNamespaceTree::t_data;
+}
+
+const ary::cpp::Namespace *
+OuputPage_Environment::CurNamespace() const
+{
+ return pi->Namespace();
+}
+
+const ary::cpp::Class *
+OuputPage_Environment::CurClass() const
+{
+ return pi->Class();
+}
+
+const csv::ploc::Path &
+OuputPage_Environment::CurPath() const
+{
+ return pi->aMyPath;
+}
+
+const ary::cpp::Gate &
+OuputPage_Environment::Gate() const
+{
+ return *pi->pGate;
+}
+
+const display::CorporateFrame &
+OuputPage_Environment::Layout() const
+{
+ return *pi->pLayout;
+}
+
+uintt
+OuputPage_Environment::Depth() const
+{
+ return static_cast<uintt>(pi->nDepth);
+}
+
+const String &
+OuputPage_Environment::RepositoryTitle() const
+{
+ return Gate().RepositoryTitle();
+}
diff --git a/autodoc/source/display/html/opageenv.hxx b/autodoc/source/display/html/opageenv.hxx
new file mode 100644
index 000000000000..953a615d0023
--- /dev/null
+++ b/autodoc/source/display/html/opageenv.hxx
@@ -0,0 +1,128 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_DISPLAY_HTML_OPAGEENV_HXX
+#define ADC_DISPLAY_HTML_OPAGEENV_HXX
+
+
+// USED SERVICES
+ // BASE CLASSES
+ // COMPONENTS
+#include <cosv/ploc.hxx>
+ // PARAMETERS
+
+namespace ary
+{
+ namespace cpp
+ {
+ class Gate;
+
+ class Namespace;
+ class Class;
+ class Enum;
+ class Typedef;
+ }
+ namespace loc
+ {
+ class File;
+ }
+}
+namespace display
+{
+ class CorporateFrame;
+}
+
+class OuputPage_Environment
+{
+ public:
+ // LIFECYCLE
+ OuputPage_Environment(
+ const csv::ploc::Path &
+ io_rOutputDir,
+ const ary::cpp::Gate &
+ i_rGate,
+ const display::CorporateFrame &
+ i_rLayout );
+ ~OuputPage_Environment();
+
+ // OPERATIONS
+ void MoveDir_2Root();
+ void MoveDir_2Names();
+ void MoveDir_Down2( /// Only one level.
+ const ary::cpp::Namespace &
+ i_rNsp );
+ void MoveDir_Down2( /// Only one level.
+ const ary::cpp::Class &
+ i_rClass );
+ void MoveDir_2Index();
+ void MoveDir_Up();
+
+ void SetFile_Css();
+ void SetFile_Overview();
+ void SetFile_AllDefs();
+ void SetFile_Index(
+ char i_cLetter );
+ void SetFile_Help();
+ void SetFile_CurNamespace();
+ void SetFile_Class(
+ const ary::cpp::Class &
+ i_rClass );
+ void SetFile_Enum(
+ const ary::cpp::Enum &
+ i_rEnum );
+ void SetFile_Typedef(
+ const ary::cpp::Typedef &
+ i_typedef );
+ void SetFile_Operations(
+ const ary::loc::File *
+ i_pFile = 0 ); /// Only needed for global functions.
+ void SetFile_Data(
+ const ary::loc::File *
+ i_pFile = 0 ); /// Only needed for global variables.
+ // INQUIRY
+ const ary::cpp::Namespace *
+ CurNamespace() const;
+ const ary::cpp::Class *
+ CurClass() const;
+ const csv::ploc::Path &
+ CurPath() const;
+ const ary::cpp::Gate &
+ Gate() const;
+ const display::CorporateFrame &
+ Layout() const;
+ uintt Depth() const;
+ const String & RepositoryTitle() const;
+
+ private:
+ struct CheshireCat;
+ Dyn<CheshireCat> pi;
+};
+
+
+
+
+#endif
diff --git a/autodoc/source/display/html/outfile.cxx b/autodoc/source/display/html/outfile.cxx
new file mode 100644
index 000000000000..dcf999bf0a1f
--- /dev/null
+++ b/autodoc/source/display/html/outfile.cxx
@@ -0,0 +1,392 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "outfile.hxx"
+
+// NOT FULLY DECLARED SERVICES
+#include <cosv/file.hxx>
+#include <udm/html/htmlitem.hxx>
+#include <toolkit/out_position.hxx>
+#include "strconst.hxx"
+
+
+namespace
+{
+bool bUse_OOoFrameDiv = true;
+const String C_sOOoFrameDiv_CppId("adc-cppref");
+}
+
+
+using namespace csi;
+using csi::xml::AnAttribute;
+
+
+
+#define CRLF "\n"
+
+const char * const
+ C_sStdStyle =
+ "body { background-color:#ffffff; }"CRLF
+ "h1 { font-size:20pt; margin-top:3pt; margin-bottom:7pt; }"CRLF
+ "h2 { font-family:Arial; font-size:16pt; margin-top:3pt; margin-bottom:5pt; }"CRLF
+ "h3 { font-size:13pt; margin-top:2pt; margin-bottom:3pt; }"CRLF
+ "h4 { font-size:10pt; font-weight:bold; margin-top:2pt; margin-bottom:1pt; }"CRLF
+ "dl { margin-top:1pt; margin-bottom:1pt; }"CRLF
+ "dl.member { margin-top:1pt; margin-bottom:1pt; background-color:#eeeeff; }"CRLF
+ "dt { font-size:10pt; font-weight:bold; margin-top:2pt; margin-bottom:1pt; }"CRLF
+ "dt.member { font-size:13pt; font-weight:bold; margin-top:2pt; margin-bottom:1pt; }"CRLF
+ "dt.simple { font-size:10pt; font-weight:normal; margin-top:2pt; margin-bottom:1pt; }"CRLF
+ "dd { font-size:10pt; margin-top:1pt; margin-bottom:1pt; }"CRLF
+ "dd.member { font-size:10pt; margin-top:1pt; margin-bottom:1pt; background-color:#ffffff; }"CRLF
+ "p { font-size:10pt; margin-top:3pt; margin-bottom:1pt; }"CRLF
+ "pre { font-family:monospace; font-size:10pt; margin-top:1pt; margin-bottom:1pt; }"CRLF
+ "tr { font-size:10pt; }"CRLF
+ "td { font-size:10pt; }"CRLF
+ CRLF
+ "dt.attention { color:#dd0000; }"CRLF
+ CRLF
+ "div.title { text-align:center; line-height:26pt; background-color:#ccccff; }"CRLF
+ ".subtitle { background-color:#ccccff; }"CRLF
+ CRLF
+ "td.flagname { background-color:#eeeeff; font-family:Arial; font-size:8pt; font-weight:bold; }"CRLF
+ "td.flagyes { font-family:Arial; font-size:8pt; font-weight:bold; }"CRLF
+ "td.flagno { font-family:Arial; font-size:8pt; }"CRLF
+ "td.flagtext { font-family:Arial; font-size:8pt; font-weight:bold; }"CRLF
+ CRLF
+ "td.navimain, td.navimain a"CRLF
+ " { background-color:#eeeeff; color:#000000;"CRLF
+ " font-family:Arial; font-size:12pt; font-weight:bold; }"CRLF
+ "td.navimainself"CRLF
+ " { background-color:#2222ad; color:#ffffff;"CRLF
+ " font-family:Arial; font-size:12pt; font-weight:bold; }"CRLF
+ "td.navimainnone"CRLF
+ " { background-color:#eeeeff; color:#000000;"CRLF
+ " font-family:Arial; font-size:12pt; }"CRLF
+ CRLF
+ "div.define { font-family:Arial; background-color:#ccccff; }"CRLF
+ CRLF
+ ".nqclass { color:#008800; }"CRLF
+ CRLF
+ "h3.help { background-color:#eeeeff; margin-top:12pt; }"CRLF
+ CRLF
+ ".btpubl { color:#33ff33; }"CRLF
+ ".btprot { color:#cc9933; }"CRLF
+ ".btpriv { color:#ff6666; }"CRLF
+ ".btvpubl { color:#33ff33; font-style:italic; }"CRLF
+ ".btvprot { color:#cc9933; font-style:italic; }"CRLF
+ ".btvpriv { color:#ff6666; font-style:italic; }"CRLF
+ ".btself { font-weight:bold; }"CRLF
+ ;
+
+
+const char * const
+ C_sCssExplanations =
+ "/* Explanation of CSS classes:"CRLF
+ CRLF
+ "dl.member provides coloured frame for function descriptions."CRLF
+ "dd.member makes the content of this frame white"CRLF
+ CRLF
+ "dt.attention special colour for @attention remarks"CRLF
+ CRLF
+ "div.title HTML page headline"CRLF
+ ".subtitle headline of lists of members and similar"CRLF
+ CRLF
+ " These are for the flagtables in classes:"CRLF
+ "td.flagname Flag name."CRLF
+ "td.flagyes flag value \"yes\""CRLF
+ "td.flagno flag value \"no\""CRLF
+ "td.flagtext other flag value"CRLF
+ CRLF
+ CRLF
+ " These are for the main navigationbar:"CRLF
+ "td.navimain, td.navimain a"CRLF
+ " Links in navibar."CRLF
+ "td.navimainself Text in navibar which refers to current page."CRLF
+ "td.navimainnone Text which links to nothing."CRLF
+ CRLF
+ CRLF
+ "div.define Subtitles on the #define/macro descriptions page"CRLF
+ CRLF
+ ".nqclass special color for classes in the qualification"CRLF
+ " on top of type pages like in:"CRLF
+ " ::nsp1::nsp2::_ClassXY_::"CRLF
+ CRLF
+ "h3.help Subtitles on the help page"CRLF
+ CRLF
+ " These are for the base class tree on class pages:"CRLF
+ ".btpubl public base class"CRLF
+ ".btprot protected"CRLF
+ ".btpriv private"CRLF
+ ".btvpubl virtual public"CRLF
+ ".btvprot virtual protected"CRLF
+ ".btvpriv virtual private"CRLF
+ ".btself placeholder for currently displayed class"CRLF
+ CRLF
+ "*/"CRLF
+ ;
+
+
+const char * const
+ C_sStdStyle_withDivFrame =
+ "body { background-color:#ffffff; }"CRLF
+ "#adc-cppref h1 { font-size:20pt; margin-top:3pt; margin-bottom:7pt; }"CRLF
+ "#adc-cppref h2 { font-family:Arial; font-size:16pt; margin-top:3pt; margin-bottom:5pt; }"CRLF
+ "#adc-cppref h3 { font-size:13pt; margin-top:2pt; margin-bottom:3pt; }"CRLF
+ "#adc-cppref h4 { font-size:10pt; font-weight:bold; margin-top:2pt; margin-bottom:1pt; }"CRLF
+ "#adc-cppref dl { margin-top:1pt; margin-bottom:1pt; }"CRLF
+ "#adc-cppref dl.member { margin-top:1pt; margin-bottom:1pt; background-color:#eeeeff; }"CRLF
+ "#adc-cppref dt { font-size:10pt; font-weight:bold; margin-top:2pt; margin-bottom:1pt; }"CRLF
+ "#adc-cppref dt.member { font-size:13pt; font-weight:bold; margin-top:2pt; margin-bottom:1pt; }"CRLF
+ "#adc-cppref dt.simple { font-size:10pt; font-weight:normal; margin-top:2pt; margin-bottom:1pt; }"CRLF
+ "#adc-cppref dd { font-size:10pt; margin-top:1pt; margin-bottom:1pt; }"CRLF
+ "#adc-cppref dd.member { font-size:10pt; margin-top:1pt; margin-bottom:1pt; background-color:#ffffff; }"CRLF
+ "#adc-cppref p { font-size:10pt; margin-top:3pt; margin-bottom:1pt; }"CRLF
+ "#adc-cppref pre { font-family:monospace; font-size:10pt; margin-top:1pt; margin-bottom:1pt; }"CRLF
+ "#adc-cppref tr { font-size:10pt; }"CRLF
+ "#adc-cppref td { font-size:10pt; }"CRLF
+ CRLF
+ "#adc-cppref dt.attention { color:#dd0000; }"CRLF
+ CRLF
+ "#adc-cppref div.title { text-align:center; line-height:26pt; background-color:#ccccff; }"CRLF
+ "#adc-cppref .subtitle { background-color:#ccccff; }"CRLF
+ CRLF
+ "#adc-cppref td.flagname { background-color:#eeeeff; font-family:Arial; font-size:8pt; font-weight:bold; }"CRLF
+ "#adc-cppref td.flagyes { font-family:Arial; font-size:8pt; font-weight:bold; }"CRLF
+ "#adc-cppref td.flagno { font-family:Arial; font-size:8pt; }"CRLF
+ "#adc-cppref td.flagtext { font-family:Arial; font-size:8pt; font-weight:bold; }"CRLF
+ CRLF
+ "#adc-cppref td.navimain, #adc-cppref td.navimain a"CRLF
+ " { background-color:#eeeeff; color:#000000;"CRLF
+ " font-family:Arial; font-size:12pt; font-weight:bold; }"CRLF
+ "#adc-cppref td.navimainself"CRLF
+ " { background-color:#2222ad; color:#ffffff;"CRLF
+ " font-family:Arial; font-size:12pt; font-weight:bold; }"CRLF
+ "#adc-cppref td.navimainnone"CRLF
+ " { background-color:#eeeeff; color:#000000;"CRLF
+ " font-family:Arial; font-size:12pt; }"CRLF
+ CRLF
+ "#adc-cppref div.define { font-family:Arial; background-color:#ccccff; }"CRLF
+ CRLF
+ "#adc-cppref .nqclass { color:#008800; }"CRLF
+ CRLF
+ "#adc-cppref h3.help { background-color:#eeeeff; margin-top:12pt; }"CRLF
+ CRLF
+ "#adc-cppref .btpubl { color:#33ff33; }"CRLF
+ "#adc-cppref .btprot { color:#cc9933; }"CRLF
+ "#adc-cppref .btpriv { color:#ff6666; }"CRLF
+ "#adc-cppref .btvpubl { color:#33ff33; font-style:italic; }"CRLF
+ "#adc-cppref .btvprot { color:#cc9933; font-style:italic; }"CRLF
+ "#adc-cppref .btvpriv { color:#ff6666; font-style:italic; }"CRLF
+ "#adc-cppref .btself { font-weight:bold; }"CRLF
+ ""CRLF
+ "#adc-cppref table { empty-cells:show; }"CRLF
+ ""CRLF
+ "#adc-cppref .childlist td, "CRLF
+ "#adc-cppref .commentedlinks td, "CRLF
+ "#adc-cppref .memberlist td, "CRLF
+ "#adc-cppref .subtitle td, "CRLF
+ "#adc-cppref .crosstitle td { border: .1pt solid #000000; }"CRLF
+ ""CRLF
+ "#adc-cppref .flag-table td { border: .1pt solid #cccccc; } "CRLF
+ ""CRLF
+ "#adc-cppref .title-table td, "CRLF
+ "#adc-cppref .table-in-method td, "CRLF
+ "#adc-cppref .table-in-data td, "CRLF
+ "#adc-cppref .navimain td, "CRLF
+ "#adc-cppref .navisub td, "CRLF
+ "#adc-cppref .expl-table td, "CRLF
+ "#adc-cppref .param-table td { border: none; }"CRLF
+ ;
+
+
+
+HtmlDocuFile::HtmlDocuFile()
+ : sFilePath(),
+ sTitle(),
+ sLocation(),
+ sCopyright(),
+ nDepthInOutputTree(0),
+ aBodyData(),
+ aBuffer(60000) // Grows dynamically when necessary.
+{
+}
+
+void
+HtmlDocuFile::SetLocation( const csv::ploc::Path & i_rFilePath,
+ uintt i_depthInOutputTree )
+{
+ static StreamStr sPath_(1000);
+ sPath_.seekp(0);
+ i_rFilePath.Get( sPath_ );
+
+ sFilePath = sPath_.c_str();
+ nDepthInOutputTree = i_depthInOutputTree;
+}
+
+void
+HtmlDocuFile::SetTitle( const char * i_sTitle )
+{
+ sTitle = i_sTitle;
+}
+
+void
+HtmlDocuFile::SetCopyright( const char * i_sCopyright )
+{
+ sCopyright = i_sCopyright;
+}
+
+void
+HtmlDocuFile::EmptyBody()
+{
+ aBodyData.SetContent(0);
+
+ if (bUse_OOoFrameDiv)
+ {
+ // Insert <div> tag to allow better formatting for OOo.
+ aBodyData
+ << new xml::XmlCode("<div id=\"")
+ << new xml::XmlCode(C_sOOoFrameDiv_CppId)
+ << new xml::XmlCode("\">\n\n");
+ }
+
+ aBodyData
+ >> *new html::Label( "_top_" )
+ << " ";
+}
+
+bool
+HtmlDocuFile::CreateFile()
+{
+ csv::File aFile(sFilePath, csv::CFM_CREATE);
+ if (NOT aFile.open())
+ {
+ Cerr() << "Can't create file " << sFilePath << "." << Endl();
+ return false;
+ }
+
+ WriteHeader(aFile);
+ WriteBody(aFile);
+
+ // Write end
+ static const char sCompletion[] = "\n</html>\n";
+ aFile.write( sCompletion );
+
+ aFile.close();
+ Cout() << '.' << Flush();
+ return true;
+}
+
+void
+HtmlDocuFile::WriteCssFile( const csv::ploc::Path & i_rFilePath )
+{
+ Cout() << "\nCreate css file ..." << Endl();
+
+ csv::File
+ aCssFile(i_rFilePath, csv::CFM_CREATE);
+ csv::OpenCloseGuard
+ aOpenGuard(aCssFile);
+ if (NOT aOpenGuard)
+ {
+ Cerr() << "Can't create file " << "cpp.css" << "." << Endl();
+ return;
+ }
+
+ aCssFile.write("/* Autodoc css file for C++ documentation */\n\n\n");
+
+ if (bUse_OOoFrameDiv)
+ aCssFile.write(C_sStdStyle_withDivFrame);
+ else
+ aCssFile.write(C_sStdStyle);
+
+ aCssFile.write("\n\n\n");
+ aCssFile.write(C_sCssExplanations);
+}
+
+void
+HtmlDocuFile::WriteHeader( csv::File & io_aFile )
+{
+ aBuffer.reset();
+
+ static const char s1[] =
+ "<html>\n<head>\n"
+ "<title>";
+ static const char s2[] =
+ "</title>\n"
+ "<link rel=\"stylesheet\" type=\"text/css\" href=\"";
+ static const char s3[] =
+ "\">\n</head>\n";
+
+ aBuffer.write( s1 );
+ aBuffer.write( sTitle );
+ aBuffer.write( s2 );
+ aBuffer.write( output::get_UpLink(nDepthInOutputTree) );
+ aBuffer.write( C_sHFN_Css );
+ aBuffer.write( s3 );
+
+ io_aFile.write(aBuffer.c_str(), aBuffer.size());
+}
+
+void
+HtmlDocuFile::WriteBody( csv::File & io_aFile )
+{
+ aBuffer.reset();
+
+ aBodyData
+ >> *new html::Link( "#_top_" )
+ << new html::ClassAttr( "objchapter" )
+ << "Top of Page";
+
+ if ( sCopyright.length() > 0 )
+ {
+ aBodyData
+#ifndef COMPATIBLE_NETSCAPE_47
+ >> *new html::HorizontalLine
+ << new html::SizeAttr( "3" );
+#else
+ << new xml::XmlCode("<hr size=\"3\">");
+#endif
+
+ aBodyData
+ >> *new html::Paragraph
+ << new html::ClassAttr( "copyright" )
+ << new xml::AnAttribute( "align", "center" )
+ << new xml::XmlCode(sCopyright);
+ }
+
+ if (bUse_OOoFrameDiv)
+ {
+ // Insert <div> tag to allow better formatting for OOo.
+ aBodyData
+ << new xml::XmlCode("\n</div> <!-- id=\"")
+ << new xml::XmlCode(C_sOOoFrameDiv_CppId)
+ << new xml::XmlCode("\" -->\n");
+ }
+
+ aBodyData.WriteOut(aBuffer);
+ io_aFile.write(aBuffer.c_str(), aBuffer.size());
+}
diff --git a/autodoc/source/display/html/outfile.hxx b/autodoc/source/display/html/outfile.hxx
new file mode 100644
index 000000000000..7302baec7432
--- /dev/null
+++ b/autodoc/source/display/html/outfile.hxx
@@ -0,0 +1,86 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_DISPLAY_HTML_OUTFILE_HXX
+#define ADC_DISPLAY_HTML_OUTFILE_HXX
+
+// USED SERVICES
+#include <udm/html/htmlitem.hxx>
+#include <cosv/ploc.hxx>
+
+
+namespace csv
+{
+ class File;
+}
+
+
+
+
+class HtmlDocuFile
+{
+ public:
+ // LIFECYCLE
+ HtmlDocuFile();
+
+ void SetLocation(
+ const csv::ploc::Path &
+ i_rFilePath,
+ uintt i_depthInOutputTree );
+ void SetTitle(
+ const char * i_sTitle );
+ void SetCopyright(
+ const char * i_sCopyright );
+ void EmptyBody();
+
+ Html::Body & Body() { return aBodyData; }
+ bool CreateFile();
+
+ static void WriteCssFile(
+ const csv::ploc::Path &
+ i_rFilePath );
+ private:
+ void WriteHeader(
+ csv::File & io_aFile );
+ void WriteBody(
+ csv::File & io_aFile );
+
+ // DATA
+ String sFilePath;
+ String sTitle;
+ String sLocation;
+ String sCopyright;
+ uintt nDepthInOutputTree;
+
+ Html::Body aBodyData;
+ StreamStr aBuffer; // Output buffer, should be transfered into csv::File.
+};
+
+
+
+
+#endif
diff --git a/autodoc/source/display/html/pagemake.cxx b/autodoc/source/display/html/pagemake.cxx
new file mode 100644
index 000000000000..4608fd5b4e0a
--- /dev/null
+++ b/autodoc/source/display/html/pagemake.cxx
@@ -0,0 +1,576 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "pagemake.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include <ary/cpp/c_gate.hxx>
+#include <ary/cpp/c_namesp.hxx>
+#include <ary/cpp/c_class.hxx>
+#include <ary/cpp/c_enum.hxx>
+#include <ary/cpp/c_tydef.hxx>
+#include <ary/cpp/cp_ce.hxx>
+#include <ary/loc/loc_file.hxx>
+#include <display/corframe.hxx>
+#include "hd_chlst.hxx"
+#include "hd_docu.hxx"
+#include "hdimpl.hxx"
+#include "html_kit.hxx"
+#include "navibar.hxx"
+#include "opageenv.hxx"
+#include "outfile.hxx"
+#include "pm_aldef.hxx"
+#include "pm_class.hxx"
+#include "pm_help.hxx"
+#include "pm_index.hxx"
+#include "pm_namsp.hxx"
+#include "pm_start.hxx"
+#include "strconst.hxx"
+
+
+using namespace csi;
+using csi::html::Link;
+using csi::html::HorizontalLine;
+
+
+const int C_nNrOfIndexLetters = 27;
+
+
+template <class SPECIAL_MAKER>
+inline void
+Make_SpecialPage( DYN SPECIAL_MAKER * let_dpMaker )
+{
+ Dyn< SPECIAL_MAKER > pMaker( let_dpMaker );
+ pMaker->MakePage();
+ pMaker = 0;
+}
+
+
+PageDisplay::PageDisplay( OuputPage_Environment & io_rEnv )
+ : HtmlDisplay_Impl( io_rEnv ),
+ pMyFile( new HtmlDocuFile )
+{
+}
+
+PageDisplay::~PageDisplay()
+{
+
+}
+
+void
+PageDisplay::Create_OverviewFile()
+{
+ Env().SetFile_Overview();
+ File().SetLocation( Env().CurPath(), 0 );
+
+ SetupFileOnCurEnv( C_sHFTitle_Overview );
+ Make_SpecialPage( new PageMaker_Overview(*this) );
+ Create_File();
+}
+
+void
+PageDisplay::Create_AllDefsFile()
+{
+ // This method is a provisorium, because later this will
+ // be spreaded over the files.
+
+ Env().MoveDir_2Root();
+ Env().SetFile_AllDefs();
+ File().SetLocation( Env().CurPath(), 0 );
+
+ SetupFileOnCurEnv( "Defines and Macros" );
+ Make_SpecialPage( new PageMaker_AllDefs(*this) );
+ Create_File();
+}
+
+void
+PageDisplay::Create_IndexFiles()
+{
+ Env().MoveDir_2Index();
+
+ for ( int i = 0; i < C_nNrOfIndexLetters; ++i )
+ Create_IndexFile(i);
+}
+
+void
+PageDisplay::Create_HelpFile()
+{
+ Env().SetFile_Help();
+ File().SetLocation( Env().CurPath(), 0 );
+
+ SetupFileOnCurEnv( C_sHFTitle_Help );
+ Make_SpecialPage( new PageMaker_Help(*this) );
+ Create_File();
+}
+
+void
+PageDisplay::Create_NamespaceFile()
+{
+ csv_assert( Env().CurNamespace() != 0 );
+ Env().SetFile_CurNamespace();
+ File().SetLocation( Env().CurPath(), Env().Depth() );
+ if (Env().CurNamespace()->Owner().IsValid())
+ {
+ StreamLock sNsp(100);
+ SetupFileOnCurEnv( sNsp() << C_sHFTypeTitle_Namespace
+ << " "
+ << Env().CurNamespace()->LocalName()
+ << c_str );
+ }
+ else
+ {
+ SetupFileOnCurEnv( C_sHFTitle_GlobalNamespaceCpp );
+ }
+
+ Make_SpecialPage( new PageMaker_Namespace(*this) );
+
+ Create_File();
+}
+
+void
+PageDisplay::Setup_OperationsFile_for( const ary::loc::File & i_rFile )
+{
+ csv_assert( Env().CurNamespace() != 0 );
+ Env().SetFile_Operations(&i_rFile);
+ File().SetLocation( Env().CurPath(), Env().Depth() );
+
+ StreamLock sOpFile(100);
+ SetupFileOnCurEnv( sOpFile() << "Global Functions in Namespace "
+ << Env().CurNamespace()->LocalName()
+ << " in Sourcefile "
+ << i_rFile.LocalName()
+ << c_str );
+ NavigationBar
+ aNavi( Env(),
+ NavigationBar::CEGT_operations );
+ aNavi.Write( CurOut() );
+ CurOut() << new HorizontalLine;
+
+ adcdisp::PageTitle_Std fTitle;
+ csi::xml::Element & rTitle = fTitle( CurOut() );
+ if (Env().CurNamespace()->Owner().IsValid())
+ {
+ rTitle << "Global Functions in Namespace "
+ << Env().CurNamespace()->LocalName();
+ }
+ else
+ {
+ rTitle << "Global Functions in Global Namespace C++";
+ }
+
+ rTitle << new html::LineBreak
+ << "in Sourcefile "
+ << i_rFile.LocalName();
+ CurOut() << new HorizontalLine;
+}
+
+void
+PageDisplay::Setup_OperationsFile_for( const ary::cpp::Class & i_rClass )
+{
+ csv_assert( Env().CurNamespace() != 0 );
+ Env().SetFile_Operations(0);
+ File().SetLocation( Env().CurPath(), Env().Depth() );
+
+ StreamLock sOpFile(100);
+ SetupFileOnCurEnv( sOpFile() << "Methods of Class "
+ << i_rClass.LocalName()
+ << c_str );
+ NavigationBar
+ aNavi( Env(),
+ NavigationBar::CEGT_operations );
+ aNavi.Write( CurOut() );
+ CurOut() << new HorizontalLine;
+
+ adcdisp::PageTitle_Std fTitle;
+ fTitle( CurOut(), "Methods of Class", i_rClass.LocalName() );
+
+ CurOut() << new HorizontalLine;
+}
+
+void
+PageDisplay::Setup_DataFile_for( const ary::loc::File & i_rFile )
+{
+ csv_assert( Env().CurNamespace() != 0 );
+ Env().SetFile_Data(&i_rFile);
+ File().SetLocation( Env().CurPath(), Env().Depth() );
+
+ StreamLock sDataFile(100);
+ SetupFileOnCurEnv( sDataFile() << "Global Data in Namespace "
+ << Env().CurNamespace()->LocalName()
+ << " in Sourcefile "
+ << i_rFile.LocalName()
+ << c_str );
+ NavigationBar
+ aNavi( Env(),
+ NavigationBar::CEGT_data );
+ aNavi.Write( CurOut() );
+ CurOut() << new HorizontalLine;
+
+ adcdisp::PageTitle_Std fTitle;
+ csi::xml::Element & rTitle = fTitle( CurOut() );
+ if ( Env().CurNamespace()->Owner().IsValid() )
+ {
+ rTitle << "Global Data in Namespace "
+ << Env().CurNamespace()->LocalName();
+ }
+ else
+ {
+ rTitle << "Global Data in Global Namespace C++";
+ }
+
+ rTitle
+ << new html::LineBreak
+ << "in Sourcefile "
+ << i_rFile.LocalName();
+ CurOut() << new HorizontalLine;
+}
+
+void
+PageDisplay::Setup_DataFile_for( const ary::cpp::Class & i_rClass )
+{
+ csv_assert( Env().CurNamespace() != 0 );
+ Env().SetFile_Data(0);
+ File().SetLocation( Env().CurPath(), Env().Depth() );
+
+ StreamLock sDataFile(100);
+ SetupFileOnCurEnv( sDataFile() << "Data of Class "
+ << i_rClass.LocalName()
+ << c_str );
+
+ NavigationBar
+ aNavi( Env(),
+ NavigationBar::CEGT_data );
+ aNavi.Write( CurOut() );
+ CurOut() << new HorizontalLine;
+
+ adcdisp::PageTitle_Std fTitle;
+ fTitle( CurOut(), "Data of Class", i_rClass.LocalName() );
+
+ CurOut() << new HorizontalLine;
+}
+
+void
+PageDisplay::Create_File()
+{
+ Easy().Leave();
+ File().CreateFile();
+}
+
+void
+PageDisplay::do_Process(const ary::cpp::Class & i_rData)
+{
+ Env().SetFile_Class(i_rData);
+ File().SetLocation( Env().CurPath(), Env().Depth() );
+
+ const char *
+ sTypeTitle = i_rData.ClassKey() == ary::cpp::CK_class
+ ? C_sHFTypeTitle_Class
+ : i_rData.ClassKey() == ary::cpp::CK_struct
+ ? C_sHFTypeTitle_Struct
+ : C_sHFTypeTitle_Union;
+ StreamLock sClassFile(60);
+ SetupFileOnCurEnv( sClassFile() << sTypeTitle
+ << " "
+ << i_rData.LocalName()
+ << c_str );
+
+ Make_SpecialPage( new PageMaker_Class(*this, i_rData) );
+
+ Create_File();
+}
+
+void
+PageDisplay::do_Process(const ary::cpp::Enum & i_rData)
+{
+ if ( Ce_IsInternal(i_rData) )
+ return;
+
+ Env().SetFile_Enum(i_rData);
+ File().SetLocation( Env().CurPath(), Env().Depth() );
+
+ StreamLock sEnumFile(100);
+ SetupFileOnCurEnv( sEnumFile() << C_sHFTypeTitle_Enum
+ << " "
+ << i_rData.LocalName()
+ << c_str );
+ Write_NavBar_Enum(i_rData);
+ Write_TopArea_Enum(i_rData);
+ Write_DocuArea_Enum(i_rData);
+ Write_ChildList_Enum(i_rData);
+
+ Create_File();
+}
+
+void
+PageDisplay::do_Process(const ary::cpp::Typedef & i_rData)
+{
+ if ( Ce_IsInternal(i_rData) )
+ return;
+
+ Env().SetFile_Typedef(i_rData);
+ File().SetLocation( Env().CurPath(), Env().Depth() );
+
+ StreamLock sTypedefFile(100);
+ SetupFileOnCurEnv( sTypedefFile() << C_sHFTypeTitle_Typedef
+ << " "
+ << i_rData.LocalName()
+ << c_str );
+ Write_NavBar_Typedef(i_rData);
+ Write_TopArea_Typedef(i_rData);
+ Write_DocuArea_Typedef(i_rData);
+
+
+ Create_File();
+}
+
+void
+PageDisplay::Write_NameChainWithLinks( const ary::cpp::CodeEntity & i_rCe )
+{
+ if ( Env().CurNamespace()->Id() != i_rCe.Id() )
+ {
+ RecursiveWrite_NamespaceLink( Env().CurNamespace() );
+ if ( Env().CurClass() != 0 )
+ {
+ CurOut() << new html::Sbr;
+ RecursiveWrite_ClassLink( Env().CurClass(), 1 );
+ }
+ }
+ else
+ {
+ RecursiveWrite_NamespaceLink( Env().CurNamespace()->Parent() );
+ }
+}
+
+const ary::cpp::Gate *
+PageDisplay::inq_Get_ReFinder() const
+{
+ return &Env().Gate();
+}
+
+void
+PageDisplay::RecursiveWrite_NamespaceLink( const ary::cpp::Namespace * i_pNamespace )
+{
+ if ( i_pNamespace == 0 )
+ {
+ return;
+ }
+ else if (NOT i_pNamespace->Owner().IsValid())
+ { // Global namespace:
+ StreamLock sNspDir(50);
+ CurOut()
+ >> *new Link( PathPerRoot(Env(),
+ sNspDir() << C_sDIR_NamespacesCpp
+ << "/"
+ << C_sHFN_Namespace
+ << c_str) )
+ << new xml::AnAttribute( "alt", C_sHFTitle_GlobalNamespaceCpp )
+ >> *new html::Font
+ << new html::SizeAttr("+1")
+ >> *new html::Bold
+ << "::";
+ CurOut()
+ << " ";
+ return;
+ }
+ else
+ {
+ RecursiveWrite_NamespaceLink( i_pNamespace->Parent() );
+ }
+
+ uintt nLevelDistance = Env().Depth() - ( i_pNamespace->Depth() + 1 );
+ csv_assert( nLevelDistance < 100 );
+ CurOut()
+ >> *new Link( PathPerLevelsUp(nLevelDistance, C_sHFN_Namespace) )
+ << new xml::AnAttribute( "alt", C_sHFTypeTitle_Namespace)
+ >> *new html::Font
+ << new html::SizeAttr("+1")
+ >> *new html::Bold
+ << i_pNamespace->LocalName();
+ CurOut()
+ >> *new html::Font
+ << new html::SizeAttr("+1")
+ << " :: ";
+}
+
+void
+PageDisplay::RecursiveWrite_ClassLink( const ary::cpp::Class * i_pClass,
+ uintt i_nLevelDistance )
+{
+ if ( i_pClass == 0 )
+ return;
+
+ if ( i_pClass->Protection() != ary::cpp::PROTECT_global )
+ {
+ RecursiveWrite_ClassLink(
+ dynamic_cast< const ary::cpp::Class* >(
+ Env().Gate().Ces().Search_Ce(i_pClass->Owner())),
+ i_nLevelDistance + 1 );
+ }
+
+ CurOut()
+ >> *new Link( Path2Class(i_nLevelDistance, i_pClass->LocalName()) )
+ << new html::ClassAttr("nqclass")
+ << i_pClass->LocalName()
+ << " :: ";
+}
+
+void
+PageDisplay::SetupFileOnCurEnv( const char * i_sTitle )
+{
+ File().SetLocation( Env().CurPath(), Env().Depth() );
+ File().SetTitle( i_sTitle );
+ File().SetCopyright( Env().Layout().CopyrightText() );
+ File().EmptyBody();
+
+ // This sets CurOut() to the contents of <body></body>
+ // in File() :
+ Easy().Enter( File().Body() );
+}
+
+void
+PageDisplay::Write_NavBar_Enum( const ary::cpp::Enum & i_rData )
+{
+ NavigationBar aNavi( Env(), i_rData );
+ aNavi.MakeSubRow("List of");
+ aNavi.AddItem( C_sTitle_EnumValues, C_sLabel_EnumValues, true );
+ aNavi.Write( CurOut(), true );
+
+ CurOut() << new HorizontalLine;
+}
+
+void
+PageDisplay::Write_TopArea_Enum( const ary::cpp::Enum & i_rData )
+{
+ Write_NameChainWithLinks( i_rData );
+
+ adcdisp::PageTitle_Std fTitle;
+ fTitle( CurOut(), C_sHFTypeTitle_Enum, i_rData.LocalName() );
+
+ CurOut() << new HorizontalLine;
+}
+
+void
+PageDisplay::Write_DocuArea_Enum( const ary::cpp::Enum & i_rData )
+{
+ Docu_Display aDocuShow( Env() );
+
+ aDocuShow.Assign_Out(CurOut());
+ aDocuShow.Process(i_rData.Docu());
+ aDocuShow.Unassign_Out();
+
+ CurOut() << new HorizontalLine;
+}
+
+void
+PageDisplay::Write_ChildList_Enum( const ary::cpp::Enum & i_rData )
+{
+ bool bChildrenExist = false;
+ ChildList_Display::Area_Result
+ aResult( bChildrenExist, CurOut() );
+
+ ChildList_Display aDisplay(Env(), i_rData);
+ aDisplay.Run_Simple( aResult,
+ ary::cpp::Enum::SLOT_Values,
+ C_sLabel_EnumValues,
+ C_sTitle_EnumValues );
+
+ if (NOT bChildrenExist)
+ CurOut() >> *new html::Headline(4) << "This enum has no values.";
+ CurOut() << new HorizontalLine;
+}
+
+void
+PageDisplay::Write_NavBar_Typedef( const ary::cpp::Typedef & i_rData )
+{
+ NavigationBar aNavi( Env(), i_rData );
+ aNavi.Write( CurOut(), true );
+
+ CurOut() << new HorizontalLine;
+}
+
+void
+PageDisplay::Write_TopArea_Typedef( const ary::cpp::Typedef & i_rData )
+{
+ Write_NameChainWithLinks( i_rData );
+
+ adcdisp::PageTitle_Std fTitle;
+ fTitle( CurOut(), C_sHFTypeTitle_Typedef, i_rData.LocalName() );
+
+ CurOut() << new HorizontalLine;
+}
+
+void
+PageDisplay::Write_DocuArea_Typedef( const ary::cpp::Typedef & i_rData )
+{
+ adcdisp::ExplanationList aDef( CurOut() );
+ aDef.AddEntry("Definition:");
+ xml::Element & rDef = aDef.Def();
+
+ ary::cpp::Type_id
+ nDefiningType = i_rData.DescribingType();
+
+ const ary::cpp::CodeEntity *
+ pRelatedCe = Env().Gate().Search_RelatedCe(nDefiningType);
+ if ( pRelatedCe != 0 )
+ {
+ const char * sTypeKey = Get_TypeKey(*pRelatedCe);
+ if ( NOT csv::no_str(sTypeKey) )
+ rDef << sTypeKey << " ";
+ }
+
+ dshelp::Get_LinkedTypeText( rDef, Env(), nDefiningType );
+
+ Docu_Display aDocuShow( Env() );
+
+ aDocuShow.Assign_Out(CurOut());
+ aDocuShow.Process(i_rData.Docu());
+ aDocuShow.Unassign_Out();
+
+ CurOut() << new HorizontalLine;
+}
+
+void
+PageDisplay::Create_IndexFile( int i_nLetter )
+{
+ static char aLetters[C_nNrOfIndexLetters+1] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ_";
+ csv_assert( 0 <= i_nLetter AND i_nLetter < C_nNrOfIndexLetters );
+
+ char cCurLetter = aLetters[i_nLetter];
+ Env().SetFile_Index( cCurLetter );
+
+ static char sIndexFileTitle[] = "Global Index X";
+ const int nPositionOfLetterInTitle = 13;
+ sIndexFileTitle[nPositionOfLetterInTitle] = cCurLetter;
+ SetupFileOnCurEnv( sIndexFileTitle );
+
+ Make_SpecialPage( new PageMaker_Index(*this, cCurLetter ) );
+
+ Create_File();
+}
+
diff --git a/autodoc/source/display/html/pagemake.hxx b/autodoc/source/display/html/pagemake.hxx
new file mode 100644
index 000000000000..b8cc1c50a6ff
--- /dev/null
+++ b/autodoc/source/display/html/pagemake.hxx
@@ -0,0 +1,164 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_DISPLAY_HTML_PAGEMAKE_HXX
+#define ADC_DISPLAY_HTML_PAGEMAKE_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <ary/ary_disp.hxx>
+#include <cosv/tpl/processor.hxx>
+#include "hdimpl.hxx"
+ // COMPONENTS
+ // PARAMETERS
+#include <ary/cpp/c_namesp.hxx>
+
+namespace ary
+{
+ namespace cpp
+ {
+ class Namespace;
+ class Class;
+ class Enum;
+ class Typedef;
+ }
+ namespace loc
+ {
+ class File;
+ }
+}
+
+
+class OuputPage_Environment;
+class HtmlDocuFile;
+
+
+
+class PageDisplay : public ary::Display,
+ public csv::ConstProcessor<ary::cpp::Class>,
+ public csv::ConstProcessor<ary::cpp::Enum>,
+ public csv::ConstProcessor<ary::cpp::Typedef>,
+ public HtmlDisplay_Impl
+{
+ public:
+ PageDisplay(
+ OuputPage_Environment &
+ io_rEnv );
+ virtual ~PageDisplay();
+
+ void Create_OverviewFile();
+ void Create_AllDefsFile();
+ void Create_IndexFiles();
+ void Create_HelpFile();
+
+ void Create_NamespaceFile();
+
+ void Setup_OperationsFile_for(
+ const ary::loc::File &
+ i_rFile );
+ void Setup_OperationsFile_for(
+ const ary::cpp::Class &
+ i_rClass );
+ void Setup_DataFile_for(
+ const ary::loc::File &
+ i_rFile );
+ void Setup_DataFile_for(
+ const ary::cpp::Class &
+ i_rClass );
+ /// Used with Setup_OperatonsFile_for().
+ void Create_File();
+
+
+ // Interface for Children of SpecializedPageMaker:
+ void Write_NameChainWithLinks(
+ const ary::cpp::CodeEntity &
+ i_rCe );
+
+ // Necessary, to call Process() on this class.
+ using csv::ConstProcessor<ary::cpp::Class>::Process;
+ using csv::ConstProcessor<ary::cpp::Enum>::Process;
+ using csv::ConstProcessor<ary::cpp::Typedef>::Process;
+
+ private:
+ // Interface csv::ConstProcessor<>:
+ virtual void do_Process(
+ const ary::cpp::Class &
+ i_rData );
+ virtual void do_Process(
+ const ary::cpp::Enum &
+ i_rData );
+ virtual void do_Process(
+ const ary::cpp::Typedef &
+ i_rData );
+ // Interface ary::cpp::Display:
+ virtual const ary::cpp::Gate *
+ inq_Get_ReFinder() const;
+ // Locals
+ HtmlDocuFile & File() { return *pMyFile; }
+ void RecursiveWrite_NamespaceLink(
+ const ary::cpp::Namespace *
+ i_pNamespace );
+ void RecursiveWrite_ClassLink(
+ const ary::cpp::Class *
+ i_pClass,
+ uintt i_nLevelDistance );
+ void SetupFileOnCurEnv(
+ const char * i_sTitle );
+ void Write_NavBar_Enum(
+ const ary::cpp::Enum &
+ i_rData );
+ void Write_TopArea_Enum(
+ const ary::cpp::Enum &
+ i_rData );
+ void Write_DocuArea_Enum(
+ const ary::cpp::Enum &
+ i_rData );
+ void Write_ChildList_Enum(
+ const ary::cpp::Enum &
+ i_rData );
+ void Write_NavBar_Typedef(
+ const ary::cpp::Typedef &
+ i_rData );
+ void Write_TopArea_Typedef(
+ const ary::cpp::Typedef &
+ i_rData );
+ void Write_DocuArea_Typedef(
+ const ary::cpp::Typedef &
+ i_rData );
+ void Create_IndexFile(
+ int i_nLetter );
+
+ // DATA
+ Dyn<HtmlDocuFile> pMyFile;
+};
+
+
+
+
+#endif
diff --git a/autodoc/source/display/html/pm_aldef.cxx b/autodoc/source/display/html/pm_aldef.cxx
new file mode 100644
index 000000000000..debe4681b0b8
--- /dev/null
+++ b/autodoc/source/display/html/pm_aldef.cxx
@@ -0,0 +1,245 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "pm_aldef.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include <cosv/tpl/tpltools.hxx>
+#include <ary/cpp/c_gate.hxx>
+#include <ary/cpp/c_define.hxx>
+#include <ary/cpp/c_macro.hxx>
+#include <ary/cpp/cp_def.hxx>
+#include <ary/loc/loc_file.hxx>
+#include <ary/loc/locp_le.hxx>
+#include <ary/getncast.hxx>
+#include "hd_docu.hxx"
+#include "html_kit.hxx"
+#include "navibar.hxx"
+#include "opageenv.hxx"
+#include "pagemake.hxx"
+#include "strconst.hxx"
+
+
+using namespace csi;
+using csi::html::HorizontalLine;
+using csi::html::Link;
+using csi::html::Label;
+using csi::html::AlignAttr;
+
+
+
+PageMaker_AllDefs::PageMaker_AllDefs( PageDisplay & io_rPage )
+ : SpecializedPageMaker(io_rPage),
+ pDocuDisplay( new Docu_Display(io_rPage.Env()) ),
+ pNavi(0)
+{
+}
+
+PageMaker_AllDefs::~PageMaker_AllDefs()
+{
+}
+
+void
+PageMaker_AllDefs::MakePage()
+{
+ pNavi = new NavigationBar( Env(), NavigationBar::LOC_AllDefs );
+ Write_NavBar();
+
+ Write_TopArea();
+
+ Write_DefinesList();
+ Write_MacrosList();
+
+ pNavi->Write_SubRows();
+}
+
+void
+PageMaker_AllDefs::Write_NavBar()
+{
+ pNavi->MakeSubRow( "" );
+ pNavi->AddItem( "Defines", "defines", true );
+ pNavi->AddItem( "Macros", "macros", true );
+ pNavi->Write( CurOut() );
+ CurOut() << new HorizontalLine;
+}
+
+void
+PageMaker_AllDefs::Write_TopArea()
+{
+ adcdisp::PageTitle_Std fTitle;
+ fTitle( CurOut(), "Defines and ", "Macros" );
+
+ CurOut() << new HorizontalLine;
+}
+
+void
+PageMaker_AllDefs::Write_DocuArea()
+{
+ // Not needed.
+}
+
+void
+PageMaker_AllDefs::Write_DefinesList()
+{
+ CurOut()
+ << new html::LineBreak
+ << new html::LineBreak
+ >> *new xml::AnElement("div")
+ << new html::ClassAttr("define")
+ >> *new html::Label("defines")
+ >> *new html::Headline(3)
+ << "Defines";
+
+ ary::cpp::DefsResultList
+ aAllDefines = Env().Gate().Defs().AllDefines();
+ ary::cpp::DefsConstIterator
+ itEnd = aAllDefines.end();
+
+ if (aAllDefines.begin() != itEnd)
+ {
+ for ( ary::cpp::DefsConstIterator it = aAllDefines.begin();
+ it != itEnd;
+ ++it )
+ {
+ Write_Define(*it);
+ }
+ }
+ else
+ {
+ CurOut() << "None.";
+ }
+
+ CurOut() << new HorizontalLine;
+}
+
+void
+PageMaker_AllDefs::Write_MacrosList()
+
+{
+ CurOut()
+ << new html::LineBreak
+ << new html::LineBreak
+ >> *new xml::AnElement("div")
+ << new html::ClassAttr("define")
+ >> *new html::Label("macros")
+ >> *new html::Headline(3)
+ << "Macros";
+
+ ary::cpp::DefsResultList
+ aAllMacros = Env().Gate().Defs().AllMacros();
+ ary::cpp::DefsConstIterator
+ itEnd = aAllMacros.end();
+
+ if (aAllMacros.begin() != itEnd)
+ {
+ for ( ary::cpp::DefsConstIterator it = aAllMacros.begin();
+ it != itEnd;
+ ++it )
+ {
+ Write_Macro(*it);
+ }
+ }
+ else
+ {
+ CurOut() << "None.";
+ }
+
+ CurOut() << new HorizontalLine;
+}
+
+void
+PageMaker_AllDefs::Write_Define(De_id i_nId)
+{
+ csv_assert( ary::is_type<ary::cpp::Define>( Env().Gate().Defs().Find_Def(i_nId)) );
+ const ary::cpp::Define &
+ rDef = static_cast< const ary::cpp::Define& >( Env().Gate().Defs().Find_Def(i_nId) );
+
+ CurOut() << new html::HorizontalLine;
+
+ adcdisp::ExplanationList aDocu( CurOut(), true );
+ aDocu.AddEntry();
+
+ aDocu.Term()
+ >> *new html::Label( rDef.LocalName() )
+ << " ";
+ aDocu.Term()
+ << rDef.LocalName();
+
+ Write_DefsDocu( aDocu.Def(), rDef );
+}
+
+void
+PageMaker_AllDefs::Write_Macro(De_id i_nId)
+{
+ csv_assert( Env().Gate().Defs().Find_Def(i_nId).AryClass() == ary::cpp::Macro::class_id );
+ const ary::cpp::Macro &
+ rDef = static_cast< const ary::cpp::Macro& >( Env().Gate().Defs().Find_Def(i_nId) );
+
+ CurOut() << new html::HorizontalLine;
+
+ adcdisp::ExplanationList aDocu( CurOut(), true );
+ aDocu.AddEntry();
+
+ aDocu.Term()
+ >> *new html::Label( rDef.LocalName() )
+ << " ";
+ aDocu.Term()
+ << rDef.LocalName()
+ << "(";
+ WriteOut_TokenList( aDocu.Term(), rDef.Params(), ", " );
+ aDocu.Term()
+ << ")";
+
+ Write_DefsDocu( aDocu.Def(), rDef );
+}
+
+
+void
+PageMaker_AllDefs::Write_DefsDocu( csi::xml::Element & o_rOut,
+ const ary::cpp::DefineEntity & i_rTextReplacement )
+{
+ if ( i_rTextReplacement.DefinitionText().size() > 0 )
+ {
+ EraseLeadingSpace( *const_cast< String * >(
+ &(*i_rTextReplacement.DefinitionText().begin())
+ ) );
+ }
+
+ adcdisp::ExplanationTable rList( o_rOut );
+
+ rList.AddEntry( "Defined As" );
+ WriteOut_TokenList( rList.Def(), i_rTextReplacement.DefinitionText(), " " );
+
+ const ary::loc::File &
+ rFile = Env().Gate().Locations().Find_File( i_rTextReplacement.Location() );
+ rList.AddEntry( "In File" );
+ rList.Def() << rFile.LocalName();
+
+ ShowDocu_On( o_rOut, *pDocuDisplay, i_rTextReplacement );
+}
diff --git a/autodoc/source/display/html/pm_aldef.hxx b/autodoc/source/display/html/pm_aldef.hxx
new file mode 100644
index 000000000000..3971bd0c4a13
--- /dev/null
+++ b/autodoc/source/display/html/pm_aldef.hxx
@@ -0,0 +1,88 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_DISPLAY_HTML_PM_ALDEF_HXX
+#define ADC_DISPLAY_HTML_PM_ALDEF_HXX
+
+// BASE CLASSES
+#include "pm_base.hxx"
+// USED SERVICES
+#include <ary/cpp/c_types4cpp.hxx>
+using ary::cpp::De_id;
+
+namespace ary
+{
+ namespace cpp
+ {
+ class DefineEntity;
+ }
+}
+
+class Docu_Display;
+class NavigationBar;
+
+
+
+
+
+class PageMaker_AllDefs : public SpecializedPageMaker
+{
+ public:
+ PageMaker_AllDefs(
+ PageDisplay & io_rPage );
+
+ virtual ~PageMaker_AllDefs();
+
+ virtual void MakePage();
+
+ private:
+ typedef std::vector<De_id> List_Ids;
+ typedef List_Ids::const_iterator ids_iterator;
+
+ virtual void Write_NavBar();
+ virtual void Write_TopArea();
+ virtual void Write_DocuArea();
+ virtual void Write_DefinesList();
+ virtual void Write_MacrosList();
+ void Write_Define(
+ De_id i_nId );
+ void Write_Macro(
+ De_id i_nId );
+ void Write_DefsDocu(
+ csi::xml::Element & o_rOut,
+ const ary::cpp::DefineEntity &
+ i_rTextReplacement );
+
+ // DATA
+ Dyn<Docu_Display> pDocuDisplay;
+ Dyn<NavigationBar> pNavi;
+};
+
+
+
+
+#endif
diff --git a/autodoc/source/display/html/pm_base.cxx b/autodoc/source/display/html/pm_base.cxx
new file mode 100644
index 000000000000..16ab7bb97ef8
--- /dev/null
+++ b/autodoc/source/display/html/pm_base.cxx
@@ -0,0 +1,77 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "pm_base.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include "opageenv.hxx"
+#include "pagemake.hxx"
+
+
+//******************** SpecializedPageMaker *********************//
+
+SpecializedPageMaker::SpecializedPageMaker( PageDisplay & io_rPage )
+ : pEnv( &io_rPage.Env() ),
+ pCurOut( &io_rPage.CurOut() ),
+ pPage( &io_rPage )
+{
+}
+
+void
+SpecializedPageMaker::Write_NavBar()
+{
+ // Dummy
+}
+
+void
+SpecializedPageMaker::Write_TopArea()
+{
+ // Dummy
+}
+
+void
+SpecializedPageMaker::Write_DocuArea()
+{
+ // Dummy
+}
+
+//void
+//SpecializedPageMaker::Write_ChildList( ary::SlotAccessId ,
+// const char * ,
+// const char * )
+//{
+// // Dummy
+//}
+
+csi::xml::Element &
+SpecializedPageMaker::CurOut()
+{
+ return Page().CurOut();
+}
+
diff --git a/autodoc/source/display/html/pm_base.hxx b/autodoc/source/display/html/pm_base.hxx
new file mode 100644
index 000000000000..9acc2186d5ad
--- /dev/null
+++ b/autodoc/source/display/html/pm_base.hxx
@@ -0,0 +1,88 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_DISPLAY_PM_BASE_HXX
+#define ADC_DISPLAY_PM_BASE_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+ // COMPONENTS
+ // PARAMETERS
+#include "hdimpl.hxx"
+
+
+
+class OuputPage_Environment;
+namespace csi
+{
+ namespace xml
+ {
+ class Element;
+ }
+}
+class PageDisplay;
+
+
+/** Interface for making a special kind of HTML-Page
+*/
+class SpecializedPageMaker
+{
+ public:
+ virtual ~SpecializedPageMaker() {}
+
+ virtual void MakePage() = 0;
+
+ virtual void Write_NavBar();
+ virtual void Write_TopArea();
+ virtual void Write_DocuArea();
+// virtual void Write_ChildList(
+// ary::SlotAccessId i_nSlot,
+// const char * i_nListTitle,
+// const char * i_nLabel );
+
+ protected:
+ SpecializedPageMaker(
+ PageDisplay & io_rPage );
+
+ OuputPage_Environment &
+ Env() const { return *pEnv; }
+ csi::xml::Element & CurOut();
+ PageDisplay & Page() { return *pPage; }
+
+ private:
+ OuputPage_Environment *
+ pEnv;
+ csi::xml::Element * pCurOut;
+ PageDisplay * pPage;
+};
+
+
+
+#endif
+
diff --git a/autodoc/source/display/html/pm_class.cxx b/autodoc/source/display/html/pm_class.cxx
new file mode 100644
index 000000000000..3e22eb5a91a9
--- /dev/null
+++ b/autodoc/source/display/html/pm_class.cxx
@@ -0,0 +1,811 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "pm_class.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include <ary/cpp/c_gate.hxx>
+#include <ary/cpp/c_class.hxx>
+#include <ary/cpp/c_tydef.hxx>
+#include <ary/cpp/cp_ce.hxx>
+#include <ary/loc/loc_file.hxx>
+#include <ary/loc/locp_le.hxx>
+#include <ary/getncast.hxx>
+#include "hd_chlst.hxx"
+#include "hd_docu.hxx"
+#include "hdimpl.hxx"
+#include "html_kit.hxx"
+#include "navibar.hxx"
+#include "opageenv.hxx"
+#include "pagemake.hxx"
+#include "strconst.hxx"
+
+using namespace adcdisp;
+
+using namespace csi;
+using csi::html::HorizontalLine;
+using csi::html::LineBreak;
+using csi::html::Link;
+using csi::html::Table;
+using csi::html::TableRow;
+using csi::html::TableCell;
+
+using ary::cpp::CesConstIterator;
+using ary::doc::OldCppDocu;
+
+const char * const C_sTitle_InnerClasses = "Classes";
+const char * const C_sTitle_InnerStructs = "Structs";
+const char * const C_sTitle_InnerUnions = "Unions";
+const char * const C_sTitle_Methods = "Methods";
+const char * const C_sTitle_StaticMethods = "Static Methods";
+const char * const C_sTitle_Data = "Data";
+const char * const C_sTitle_StaticData = "Static Data";
+
+const char * const C_sLabel_StaticOperations = "static_ops";
+const char * const C_sLabel_StaticVariables = "static_vars";
+
+const char * const C_sTitlePublic = "Public Members";
+const char * const C_sTitleProtected = "Protected Members";
+const char * const C_sTitlePrivate = "Private Members";
+const char * const C_sMprTitles[3] = { C_sTitlePublic,
+ C_sTitleProtected,
+ C_sTitlePrivate
+ };
+const char * const C_sSummaryTitlePublic = "Public Members";
+const char * const C_sSummaryTitleProtected = "Protected Members";
+const char * const C_sSummaryTitlePrivate = "Private Members";
+const char *
+ C_sMprSummaryTitles[3] =
+ { C_sSummaryTitlePublic, C_sSummaryTitleProtected, C_sSummaryTitlePrivate };
+const char *
+ C_sMprPrefixes[3] =
+ { "publ_", "prot_", "priv_" };
+const char *
+ C_sSummaryItems_Titles[PageMaker_Class::cl_MAX] =
+ { C_sTitle_InnerClasses, C_sTitle_InnerStructs, C_sTitle_InnerUnions,
+ C_sTitle_Enums, C_sTitle_Typedefs,
+ C_sTitle_Methods, C_sTitle_StaticMethods, C_sTitle_Data, C_sTitle_StaticData };
+const char *
+ C_sSummaryItems_Labels[PageMaker_Class::cl_MAX] =
+ { C_sLabel_Classes, C_sLabel_Structs, C_sLabel_Unions,
+ C_sLabel_Enums, C_sLabel_Typedefs,
+ C_sLabel_Operations, C_sLabel_StaticOperations,
+ C_sLabel_Variables, C_sLabel_StaticVariables };
+
+
+const ary::cpp::E_Protection
+ aProt[3] = { ary::cpp::PROTECT_public,
+ ary::cpp::PROTECT_protected,
+ ary::cpp::PROTECT_private };
+
+
+PageMaker_Class::PageMaker_Class( PageDisplay & io_rPage,
+ const ary::cpp::Class & i_rClass )
+ : SpecializedPageMaker(io_rPage),
+ pMe( &i_rClass ),
+ pChildDisplay( new ChildList_Display(io_rPage.Env(), i_rClass) ),
+ pNavi(0)
+ // pProtectionArea,
+ // bChildLists_Exist
+{
+ int i_max = 3 * cl_MAX;
+ for (int i = 0; i < i_max; i++)
+ {
+ bChildLists_Exist[i] = false;
+ } // end for
+}
+
+PageMaker_Class::~PageMaker_Class()
+{
+}
+
+void
+PageMaker_Class::MakePage()
+{
+ pNavi = new NavigationBar( Env(), Me() );
+
+ Write_NavBar();
+ Write_TopArea();
+ Write_DocuArea();
+ Write_ChildLists();
+
+ pNavi->Write_SubRows();
+ pNavi = 0;
+}
+
+void
+PageMaker_Class::Write_NavBar()
+{
+ NavigationBar aNavi( Env(), Me() );
+ pNavi->Write( CurOut() );
+ CurOut() << new HorizontalLine;
+}
+
+inline bool
+IsInterface(const ary::doc::Documentation & i_doc)
+{
+ const OldCppDocu *
+ doc = Get_CppDocu(i_doc);
+ return doc != 0
+ ? doc->IsInterface()
+ : false;
+}
+
+void
+PageMaker_Class::Write_TopArea()
+{
+ TemplateClause fTemplateClause;
+ PageTitle_Std fTitle;
+
+ Page().Write_NameChainWithLinks( Me() );
+
+ fTemplateClause( CurOut(), Me().TemplateParameters() );
+ fTitle( CurOut(), Get_ClassTypeKey(Me()), Me().LocalName() );
+
+ CurOut() << new HorizontalLine;
+
+ Write_BaseHierarchy();
+ Write_DerivedList();
+
+ CurOut() << new LineBreak;
+
+ adcdisp::FlagTable
+ aFlags( CurOut(), 4 );
+ aFlags.SetColumn( 0, "virtual",
+ Me().Virtuality() != ary::cpp::VIRTUAL_none );
+ aFlags.SetColumn( 1, "abstract",
+ Me().Virtuality() == ary::cpp::VIRTUAL_abstract );
+ aFlags.SetColumn( 2, "interface",
+ IsInterface(Me().Docu())
+ OR Me().Virtuality() == ary::cpp::VIRTUAL_abstract );
+ aFlags.SetColumn( 3, "template",
+ Me().TemplateParameters().size() > 0 );
+}
+
+void
+PageMaker_Class::Write_DocuArea()
+{
+ Docu_Display aDocuShow( Env() );
+
+ aDocuShow.Assign_Out(CurOut());
+ Me().Accept( aDocuShow );
+ aDocuShow.Unassign_Out();
+
+ ary::loc::File &
+ rFile = Env().Gate().Locations().Find_File( Me().Location() );
+
+ adcdisp::ExplanationList
+ aFileText( CurOut() );
+ aFileText.AddEntry("File");
+ aFileText.Def()
+ << rFile.LocalName();
+
+ CurOut() << new HorizontalLine;
+}
+
+void
+PageMaker_Class::Write_ChildLists()
+{
+ int i_max = 3 * cl_MAX;
+ for (int i = 0; i < i_max; i++)
+ {
+ bChildLists_Exist[i] = false;
+ } // end for
+
+ csi::html::DefListDefinition &
+ rPublic = Setup_MemberSegment_Out( mp_public );
+ csi::html::DefListDefinition &
+ rProtected = Setup_MemberSegment_Out( mp_protected );
+ csi::html::DefListDefinition &
+ rPrivate = Setup_MemberSegment_Out( mp_private );
+
+ Write_ChildList_forClasses( rPublic,
+ rProtected,
+ rPrivate,
+ C_sLabel_Classes,
+ C_sTitle_InnerClasses,
+ ary::cpp::CK_class );
+ Write_ChildList_forClasses( rPublic,
+ rProtected,
+ rPrivate,
+ C_sLabel_Structs,
+ C_sTitle_InnerStructs,
+ ary::cpp::CK_struct );
+ Write_ChildList_forClasses( rPublic,
+ rProtected,
+ rPrivate,
+ C_sLabel_Unions,
+ C_sTitle_InnerUnions,
+ ary::cpp::CK_union );
+
+ Write_ChildList( ary::cpp::Class::SLOT_Enums,
+ cl_Enums,
+ C_sLabel_Enums,
+ C_sTitle_Enums,
+ rPublic,
+ rProtected,
+ rPrivate );
+ Write_ChildList( ary::cpp::Class::SLOT_Typedefs,
+ cl_Typedefs,
+ C_sLabel_Typedefs,
+ C_sTitle_Typedefs,
+ rPublic,
+ rProtected,
+ rPrivate );
+
+ Write_ChildList( ary::cpp::Class::SLOT_Operations,
+ cl_Operations,
+ C_sLabel_Operations,
+ C_sTitle_Methods,
+ rPublic,
+ rProtected,
+ rPrivate );
+ Write_ChildList( ary::cpp::Class::SLOT_StaticOperations,
+ cl_StaticOperations,
+ C_sLabel_StaticOperations,
+ C_sTitle_StaticMethods,
+ rPublic,
+ rProtected,
+ rPrivate );
+ Write_ChildList( ary::cpp::Class::SLOT_Data,
+ cl_Data,
+ C_sLabel_Variables,
+ C_sTitle_Data,
+ rPublic,
+ rProtected,
+ rPrivate );
+ Write_ChildList( ary::cpp::Class::SLOT_StaticData,
+ cl_StaticData,
+ C_sLabel_StaticVariables,
+ C_sTitle_StaticData,
+ rPublic,
+ rProtected,
+ rPrivate );
+
+ Create_NaviSubRow(mp_public); // Also puts out or deletes pPublic.
+ Create_NaviSubRow(mp_protected); // Also puts out or deletes pProtected.
+ Create_NaviSubRow(mp_private); // Also puts out or deletes pPrivate.
+}
+
+void
+PageMaker_Class::Write_ChildList( ary::SlotAccessId i_nSlot,
+ E_ChidList i_eChildListIndex,
+ const char * i_sLabel,
+ const char * i_sListTitle,
+ csi::xml::Element & o_rPublic,
+ csi::xml::Element & o_rProtected,
+ csi::xml::Element & o_rPrivate )
+
+{
+ bool bPublic_ChildrenExist = false;
+ bool bProtected_ChildrenExist = false;
+ bool bPrivate_ChildrenExist = false;
+
+ ChildList_Display::Area_Result
+ aPublic_Result( bPublic_ChildrenExist, o_rPublic );
+ ChildList_Display::Area_Result
+ aProtected_Result( bProtected_ChildrenExist, o_rProtected );
+ ChildList_Display::Area_Result
+ aPrivate_Result( bPrivate_ChildrenExist, o_rPrivate );
+
+ String sLabelPublic = ChildListLabel(i_sLabel, mp_public);
+ String sLabelProtected = ChildListLabel(i_sLabel, mp_protected);
+ String sLabelPrivate = ChildListLabel(i_sLabel, mp_private);
+
+ pChildDisplay->Run_Members( aPublic_Result,
+ aProtected_Result,
+ aPrivate_Result,
+ i_nSlot,
+ sLabelPublic,
+ sLabelProtected,
+ sLabelPrivate,
+ i_sListTitle );
+
+ bChildLists_Exist[i_eChildListIndex]
+ = bPublic_ChildrenExist;
+ bChildLists_Exist[i_eChildListIndex + cl_MAX]
+ = bProtected_ChildrenExist;
+ bChildLists_Exist[i_eChildListIndex + 2*cl_MAX]
+ = bPrivate_ChildrenExist;
+
+ if (bPublic_ChildrenExist)
+ o_rPublic << new HorizontalLine;
+ if (bProtected_ChildrenExist)
+ o_rProtected << new HorizontalLine;
+ if (bPrivate_ChildrenExist)
+ o_rPrivate << new HorizontalLine;
+}
+
+void
+PageMaker_Class::Write_ChildList_forClasses( csi::xml::Element & o_rPublic,
+ csi::xml::Element & o_rProtected,
+ csi::xml::Element & o_rPrivate,
+ const char * i_sLabel,
+ const char * i_sListTitle,
+ ary::cpp::E_ClassKey i_eFilter )
+{
+ bool bPublic_ChildrenExist = false;
+ bool bProtected_ChildrenExist = false;
+ bool bPrivate_ChildrenExist = false;
+
+ ChildList_Display::Area_Result
+ aPublic_Result( bPublic_ChildrenExist, o_rPublic );
+ ChildList_Display::Area_Result
+ aProtected_Result( bProtected_ChildrenExist, o_rProtected );
+ ChildList_Display::Area_Result
+ aPrivate_Result( bPrivate_ChildrenExist, o_rPrivate );
+
+ String sLabelPublic = ChildListLabel(i_sLabel, mp_public);
+ String sLabelProtected = ChildListLabel(i_sLabel, mp_protected);
+ String sLabelPrivate = ChildListLabel(i_sLabel, mp_private);
+
+ pChildDisplay->Run_MemberClasses( aPublic_Result,
+ aProtected_Result,
+ aPrivate_Result,
+ ary::cpp::Class::SLOT_NestedClasses,
+ sLabelPublic,
+ sLabelProtected,
+ sLabelPrivate,
+ i_sListTitle,
+ i_eFilter );
+
+ bChildLists_Exist[int(cl_NestedClasses)+int(i_eFilter)]
+ = bPublic_ChildrenExist;
+ bChildLists_Exist[int(cl_NestedClasses)+int(i_eFilter) + cl_MAX]
+ = bProtected_ChildrenExist;
+ bChildLists_Exist[int(cl_NestedClasses)+int(i_eFilter) + 2*cl_MAX]
+ = bPrivate_ChildrenExist;
+
+ if (bPublic_ChildrenExist)
+ o_rPublic << new HorizontalLine;
+ if (bProtected_ChildrenExist)
+ o_rProtected << new HorizontalLine;
+ if (bPrivate_ChildrenExist)
+ o_rPrivate << new HorizontalLine;
+}
+
+const char *
+PageMaker_Class::ChildListLabel( const char * i_sLabel, E_MemberProtection i_eMpr )
+{
+ static char sResult[100];
+ strcpy( sResult, C_sMprPrefixes[i_eMpr] ); // SAFE STRCPY (#100211# - checked)
+ strcat( sResult, i_sLabel ); // SAFE STRCAT (#100211# - checked)
+ return sResult;
+}
+
+csi::html::DefListDefinition &
+PageMaker_Class::Setup_MemberSegment_Out( E_MemberProtection i_eMpr )
+{
+ html::DefList * pDefList = new html::DefList;
+ pProtectionArea[i_eMpr] = pDefList;
+
+ pDefList->AddTerm()
+ << new html::ClassAttr("subtitle")
+ >> *new html::Label( C_sMprPrefixes[i_eMpr] )
+ >> *new html::Headline(3)
+ << C_sMprTitles[i_eMpr];
+ return pDefList->AddDefinition();
+}
+
+void
+PageMaker_Class::Create_NaviSubRow( E_MemberProtection i_eMpr )
+{
+ int nIndexAdd = int(cl_MAX) * int(i_eMpr);
+
+ bool bEmpty = true;
+ for (int e = 0; e < cl_MAX; e++)
+ {
+ if ( bChildLists_Exist[e + nIndexAdd] )
+ {
+ bEmpty = false;
+ break;
+ }
+ } // end for
+ if (bEmpty)
+ {
+ pProtectionArea[i_eMpr] = 0;
+ return;
+ }
+ else //
+ {
+ CurOut() << pProtectionArea[i_eMpr].Release();
+ } // endif
+
+ pNavi->MakeSubRow( C_sMprSummaryTitles[i_eMpr] );
+ for (int i = 0; i < cl_MAX; i++)
+ {
+ pNavi->AddItem( C_sSummaryItems_Titles[i],
+ ChildListLabel( C_sSummaryItems_Labels[i], i_eMpr ),
+ bChildLists_Exist[i+nIndexAdd] );
+ } // end for
+}
+
+void
+PageMaker_Class::Write_DerivedList()
+{
+ adcdisp::ExplanationList
+ aDeriveds( CurOut() );
+ aDeriveds.AddEntry( "Known Derived Classes" );
+
+ if ( Me().KnownDerivatives().Size() == 0 )
+ {
+ aDeriveds.Def() << "None.";
+ return;
+ }
+
+ typedef ary::List_Rid RidList;
+
+ CesConstIterator
+ itEnd = Me().KnownDerivatives().End();
+ for ( CesConstIterator it = Me().KnownDerivatives().Begin();
+ it != itEnd;
+ ++it )
+ {
+ const ary::cpp::CodeEntity &
+ rCe = Env().Gate().Ces().Find_Ce(*it);
+
+ aDeriveds.Def()
+ >> *new html::Link( Link2Ce(Env(),rCe) )
+ << rCe.LocalName();
+ aDeriveds.Def()
+ << new html::LineBreak;
+ } // end for
+}
+
+
+// ============== Creating a classes base hierarchy ====================== //
+
+
+namespace
+{
+
+class Node
+{
+ public:
+ Node(
+ const ary::cpp::Class &
+ i_rClass,
+ ary::cpp::Type_id i_nClassType,
+ const ary::cpp::Gate &
+ i_rGate,
+ intt i_nPositionOffset,
+ Node * io_pDerived = 0,
+ ary::cpp::E_Protection
+ i_eProtection = ary::cpp::PROTECT_global,
+ bool i_bVirtual = false );
+ ~Node();
+
+ void FillPositionList(
+ std::vector< const Node* > &
+ o_rPositionList ) const;
+ void Write2(
+ csi::xml::Element & o_rOut,
+ const OuputPage_Environment &
+ i_rEnv ) const;
+
+ intt BaseCount() const { return nCountBases; }
+ intt Position() const { return nPosition; }
+ int Xpos() const { return 3*Position(); }
+ int Ypos() const { return 2*Position(); }
+ const Node * Derived() const { return pDerived; }
+
+ private:
+ typedef std::vector< DYN Node* > BaseList;
+
+ void IncrBaseCount();
+
+ // DATA
+ BaseList aBases;
+ intt nCountBases;
+ Node * pDerived;
+
+ String sName;
+ const ary::cpp::Class *
+ pClass;
+ ary::cpp::Type_id nClassType;
+ ary::cpp::E_Protection
+ eProtection;
+ bool bVirtual;
+
+ intt nPosition;
+};
+
+void WriteNodeHierarchy(
+ csi::xml::Element & o_rOut,
+ const OuputPage_Environment &
+ i_rEnv,
+ const Node & i_rClass );
+
+const ary::cpp::Class *
+ HereFind_Class(
+ const ary::cpp::Gate &
+ i_rGate,
+ ary::cpp::Type_id i_nReferingTypeId );
+
+} // anonymous namespace
+
+void
+PageMaker_Class::Write_BaseHierarchy()
+{
+ adcdisp::ExplanationList aBases( CurOut() );
+ aBases.AddEntry( "Base Classes" );
+
+ if ( Me().BaseClasses().size() == 0 )
+ {
+ aBases.Def() << "None.";
+ }
+ else
+ {
+ Dyn< Node >
+ pBaseGraph( new Node(Me(), ary::cpp::Type_id(0), Env().Gate(), 0) );
+ WriteNodeHierarchy( aBases.Def(), Env(), *pBaseGraph );
+ }
+}
+
+
+
+namespace
+{
+
+void
+WriteNodeHierarchy( csi::xml::Element & o_rOut,
+ const OuputPage_Environment & i_rEnv,
+ const Node & i_rClass )
+{
+ typedef const Node * NodePtr;
+ typedef std::vector<NodePtr> NodeList;
+
+ NodeList aPositionList;
+ intt nSize = i_rClass.Position()+1;
+ aPositionList.reserve(nSize);
+ i_rClass.FillPositionList( aPositionList );
+
+ xml::Element &
+ rPre = o_rOut
+ >> *new xml::AnElement("pre")
+ << new html::StyleAttr("font-family:monospace;");
+
+ for ( int line = 0; line < nSize; ++line )
+ {
+ char * sLine1 = new char[2 + line*5];
+ char * sLine2 = new char[1 + line*5];
+ *sLine1 = '\0';
+ *sLine2 = '\0';
+
+ bool bBaseForThisLineReached = false;
+ for ( int col = 0; col < line; ++col )
+ {
+ intt nDerivPos = aPositionList[col]->Derived()->Position();
+
+ if ( nDerivPos >= line )
+ strcat(sLine1, " | ");
+ else
+ strcat(sLine1, " ");
+
+ if ( nDerivPos > line )
+ {
+ strcat(sLine2, " | ");
+ }
+ else if ( nDerivPos == line )
+ {
+ if (bBaseForThisLineReached)
+ strcat(sLine2, "--+--");
+ else
+ {
+ bBaseForThisLineReached = true;
+ strcat(sLine2, " +--");
+ }
+ }
+ else // nDerivPos < line
+ {
+ if (bBaseForThisLineReached)
+ strcat(sLine2, "-----");
+ else
+ strcat(sLine2, " ");
+ }
+ } // end for (col)
+ strcat(sLine1,"\n");
+ rPre
+ << sLine1
+ << sLine2;
+ delete [] sLine1;
+ delete [] sLine2;
+
+ aPositionList[line]->Write2( rPre, i_rEnv );
+ rPre << "\n";
+ } // end for (line)
+}
+
+const ary::cpp::Class *
+HereFind_Class( const ary::cpp::Gate & i_rGate,
+ ary::cpp::Type_id i_nReferingTypeId )
+{
+ const ary::cpp::CodeEntity *
+ pCe = i_rGate.Search_RelatedCe( i_nReferingTypeId );
+
+ if ( pCe != 0 )
+ {
+ if ( ary::is_type<ary::cpp::Class>(*pCe) )
+ {
+ return ary::ary_cast<ary::cpp::Class>(pCe);
+ }
+ else if ( ary::is_type<ary::cpp::Typedef>(*pCe) )
+ {
+ const ary::cpp::Typedef *
+ pTydef = ary::ary_cast<ary::cpp::Typedef>(pCe);
+ return HereFind_Class( i_rGate, pTydef->DescribingType() );
+ }
+ }
+
+ static const ary::cpp::Class aClassNull_( "Base class not found",
+ ary::cpp::Ce_id(0),
+ ary::cpp::PROTECT_global,
+ ary::loc::Le_id(0),
+ ary::cpp::CK_class );
+ return &aClassNull_;
+}
+
+
+
+//********************* Node ***********************//
+
+Node::Node( const ary::cpp::Class & i_rClass,
+ ary::cpp::Type_id i_nClassType,
+ const ary::cpp::Gate & i_rGate,
+ intt i_nPositionOffset,
+ Node * io_pDerived,
+ ary::cpp::E_Protection i_eProtection,
+ bool i_bVirtual )
+ : aBases(),
+ nCountBases(0),
+ pDerived(io_pDerived),
+ pClass(&i_rClass),
+ nClassType(i_nClassType),
+ eProtection(i_eProtection),
+ bVirtual(i_bVirtual),
+ nPosition(i_nPositionOffset)
+{
+ typedef ary::cpp::List_Bases BList;
+
+ for ( BList::const_iterator it = i_rClass.BaseClasses().begin();
+ it != i_rClass.BaseClasses().end();
+ ++it )
+ {
+ const ary::cpp::Class *
+ pBaseClass = HereFind_Class( i_rGate, (*it).nId );
+
+ Dyn<Node>
+ pBase( new Node(*pBaseClass,
+ (*it).nId,
+ i_rGate,
+ nPosition,
+ this,
+ (*it).eProtection,
+ (*it).eVirtuality == ary::cpp::VIRTUAL_virtual)
+ );
+ IncrBaseCount();
+ nPosition += pBase->BaseCount() + 1;
+ aBases.push_back( pBase.Release() );
+ } // end for
+}
+
+Node::~Node()
+{
+}
+
+void
+Node::FillPositionList( std::vector< const Node* > & o_rPositionList ) const
+{
+ for ( BaseList::const_iterator it = aBases.begin();
+ it != aBases.end();
+ ++it )
+ {
+ (*it)->FillPositionList(o_rPositionList);
+ } // end for
+
+ if( o_rPositionList.size() != uintt(Position()) )
+ {
+ csv_assert(false);
+ }
+ o_rPositionList.push_back(this);
+}
+
+void
+Node::Write2( csi::xml::Element & o_rOut,
+ const OuputPage_Environment & i_rEnv ) const
+{
+ if ( Derived() == 0 )
+ {
+ o_rOut
+ >> *new xml::AnElement("span")
+ << new html::ClassAttr("btself")
+ << pClass->LocalName();
+ return;
+ }
+
+ csi::xml::Element *
+ pOut = & ( o_rOut >> *new xml::AnElement("span") );
+ switch ( eProtection )
+ {
+ case ary::cpp::PROTECT_public:
+ if (bVirtual)
+ *pOut << new html::ClassAttr("btvpubl");
+ else
+ *pOut << new html::ClassAttr("btpubl");
+ break;
+ case ary::cpp::PROTECT_protected:
+ if (bVirtual)
+ *pOut << new html::ClassAttr("btvprot");
+ else
+ *pOut << new html::ClassAttr("btprot");
+ break;
+ case ary::cpp::PROTECT_private:
+ if (bVirtual)
+ *pOut << new html::ClassAttr("btvpriv");
+ else
+ *pOut << new html::ClassAttr("btpriv");
+ break;
+ default: // do nothing.
+ ;
+ } // end switch
+
+ csi::xml::Element & rOut = *pOut;
+
+ Get_LinkedTypeText( rOut, i_rEnv, nClassType, false );
+ rOut << " (";
+ if ( bVirtual )
+ rOut << "virtual ";
+ switch ( eProtection )
+ {
+ case ary::cpp::PROTECT_public:
+ rOut << "public)";
+ break;
+ case ary::cpp::PROTECT_protected:
+ rOut << "protected)";
+ break;
+ case ary::cpp::PROTECT_private:
+ rOut << "private)";
+ break;
+ default: // do nothing.
+ ;
+ } // end switch
+}
+
+void
+Node::IncrBaseCount()
+{
+ ++nCountBases;
+ if (pDerived != 0)
+ pDerived->IncrBaseCount();
+}
+
+
+} // anonymous namespace
+
+
diff --git a/autodoc/source/display/html/pm_class.hxx b/autodoc/source/display/html/pm_class.hxx
new file mode 100644
index 000000000000..a2a5b89e7205
--- /dev/null
+++ b/autodoc/source/display/html/pm_class.hxx
@@ -0,0 +1,131 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_DISPLAY_HTML_PM_CLASS_HXX
+#define ADC_DISPLAY_HTML_PM_CLASS_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include "pm_base.hxx"
+ // COMPONENTS
+ // PARAMETERS
+
+
+namespace ary
+{
+ namespace cpp
+ {
+ class Class;
+ }
+}
+
+class ChildList_Display;
+class NavigationBar;
+
+
+class PageMaker_Class : public SpecializedPageMaker
+{
+ public:
+ enum E_ChidList
+ {
+ cl_NestedClasses = 0,
+ cl_NestedStructs,
+ cl_NestedUnions,
+ cl_Enums,
+ cl_Typedefs,
+ cl_Operations,
+ cl_StaticOperations,
+ cl_Data,
+ cl_StaticData,
+ cl_MAX
+ };
+ PageMaker_Class(
+ PageDisplay & io_rPage,
+ const ary::cpp::Class &
+ i_rClass );
+
+ virtual ~PageMaker_Class();
+
+ virtual void MakePage();
+
+ private:
+ enum E_MemberProtection { mp_public = 0, mp_protected, mp_private, mp_MAX };
+
+ virtual void Write_NavBar();
+ virtual void Write_TopArea();
+ virtual void Write_DocuArea();
+ virtual void Write_ChildList(
+ ary::SlotAccessId i_nSlot,
+ E_ChidList i_eChildListIndex,
+ const char * i_sLabel,
+ const char * i_sListTitle,
+ csi::xml::Element & o_rPublic,
+ csi::xml::Element & o_rProtected,
+ csi::xml::Element & o_rPrivate );
+ void Write_ChildList_forClasses(
+ csi::xml::Element & o_rPublic,
+ csi::xml::Element & o_rProtected,
+ csi::xml::Element & o_rPrivate,
+ const char * i_sLabel,
+ const char * i_sListTitle,
+ ary::cpp::E_ClassKey
+ i_eFilter );
+ void Write_ChildLists();
+ static const char * ChildListLabel(
+ const char * i_sLabel,
+ E_MemberProtection i_eMpr );
+ csi::html::DefListDefinition &
+ Setup_MemberSegment_Out(
+ E_MemberProtection i_eMpr );
+ void Create_NaviSubRow(
+ E_MemberProtection i_eMpr );
+ void Write_BaseHierarchy();
+ void Write_DerivedList();
+
+ const ary::cpp::Class &
+ Me() const { return *pMe; }
+ // DATA
+ const ary::cpp::Class *
+ pMe;
+ Dyn<ChildList_Display>
+ pChildDisplay;
+ Dyn<NavigationBar> pNavi;
+
+ Dyn<csi::xml::Element>
+ pProtectionArea[mp_MAX];
+
+ bool bChildLists_Exist[3*cl_MAX];
+};
+
+
+
+
+
+#endif
+
diff --git a/autodoc/source/display/html/pm_help.cxx b/autodoc/source/display/html/pm_help.cxx
new file mode 100644
index 000000000000..2ad3b6fc32e2
--- /dev/null
+++ b/autodoc/source/display/html/pm_help.cxx
@@ -0,0 +1,232 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "pm_help.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include "navibar.hxx"
+#include "html_kit.hxx"
+
+using namespace csi;
+using csi::html::Paragraph;
+using csi::html::HorizontalLine;
+using csi::html::Headline;
+using csi::html::AlignAttr;
+using csi::html::Bold;
+using csi::html::Link;
+using csi::html::Sbr;
+using csi::html::LineBreak;
+using csi::xml::Element;
+
+
+
+const String C_sHelpText(
+"<div style=\"font-size:10pt;\">\n"
+"<h3 class=\"help\">The Main Navigationbar</h3>\n"
+"<p> On top of every page, there is a main navigationbar on a lightly coloured\n"
+"background with the following items:<br>\n"
+"</p>\n"
+"<ul>\n"
+" <li>Overview - the start page for this document,</li>\n"
+" <li>Namespace - the lowest/deepest namespace of the language objects, described\n"
+"on the current page,</li>\n"
+" <li>Class - the class, struct or union, which owns the methods or data,\n"
+"described on the current page,</li>\n"
+" <li>Index - the global alphabetical index,</li>\n"
+" <li>Help - this page.</li>\n"
+"</ul>\n"
+" Each item in this&nbsp; bar can be in three different states:<br>\n"
+"<ul>\n"
+" <li>Link - the item is valid and you can get there,</li>\n"
+" <li>Simple - the item does not apply (if this page described a namespace,\n"
+"there would be no owning class),</li>\n"
+" <li>Reversed (white text on dark background) - this is the current page.</li>\n"
+"</ul>\n"
+"<h3 class=\"help\">Lower Navigationbars</h3>\n"
+" Just below the main navigation bar, there may be zero to three lower navigationbars\n"
+"on white background.<br>\n"
+"<br>\n"
+"Their items are dependent of the context, but they always link to paragraphs\n"
+"on the same, current page.<br>\n"
+"Available items appear as links. Unavailable items appear as simple text.<br>\n"
+"\n"
+"\n"
+"<h3 class=\"help\">Namespace Descriptions</h3>\n"
+"\n"
+"<dl>\n"
+"<dt class=\"simple\">Parent namespaces</dt>\n"
+" </dl>\n"
+" <dl>\n"
+" <dd>In front of the namespace title, there is a linked list of the parent\n"
+"namespaces. The global namespace is linked with the first \"::\",</dd>\n"
+" <dd>the namespaces between the global and the current one are linked\n"
+"by their names.<br>\n"
+" </dd>\n"
+" <dd> </dd>\n"
+" </dl>\n"
+"After the title, the documentation of the namespace follows (which is often\n"
+"missing, because the namespace name may be self-explaining).<br>\n"
+" <br>\n"
+"Below are the lists of nested namspaces and of the classes, functions and\n"
+"other program objects, that belong within this namespace.<br>\n"
+"Each of this lists is accessible by the lower navigationbar on top of the\n"
+"page.<br>\n"
+"\n"
+"<h3 class=\"help\">Class Descriptions</h3>\n"
+"\n"
+" <dl>\n"
+" <dt class=\"simple\">Parent namespaces and classes</dt>\n"
+" </dl>\n"
+" <dl>\n"
+" <dd>In front of the class title, there is a linked list of the\n"
+"parent namespaces or classes. The global namespace is linked with the first\n"
+"\"::\",</dd>\n"
+" <dd>the namespaces between the global and the current one are\n"
+"linked by their names. Enclosing classes are linked as well, but appear in\n"
+"<span class=\"nqclass\">green</font> color.&nbsp;</dd>\n"
+" <dd>So you see on the first glance, that this is a parent class,\n"
+"no namespace.<br>\n"
+" </dd>\n"
+" <dd><br>\n"
+" </dd>\n"
+" </dl>\n"
+"After the title, the bases and derivations of the class follow. <br>\n"
+"Base classes are displayed as a graph. The text around base classes can appear\n"
+"in different styles and colours:<br>\n"
+"<ul>\n"
+" <li><span class=\"btpubl\">Green</span> - public inherited,</li>\n"
+" <li><span class=\"btprot\">Orange</span> - protected inherited,</li>\n"
+" <li><span class=\"btpriv\">Red</span> - private inherited,</li>\n"
+" <li><span class=\"btvpubl\">italic</span> - a (public inherited) virtual base class.</li>\n"
+" <li><span class=\"btself\">Bold and black</span> without a link - the placeholder\n"
+"for the currently described class.<br>\n"
+" </li>\n"
+"</ul>\n"
+"There may be many derivations of a class, but only the known ones, which\n"
+"are described within this document also, are listed.<br>\n"
+"<br>\n"
+"Below the derivations is a little table with some properties of the class:<br>\n"
+"<ul>\n"
+" <li>virtual - the class owns at least one virtual method,</li>\n"
+" <li>abstract - the class owns at least one abstract method,</li>\n"
+" <li>interface - the class may or may be not abstract,\n"
+"but it is intended by its author to be used only as an interface and never\n"
+"to be instantiated,</li>\n"
+" <li>template - the class is a template class.<br>\n"
+" </li>\n"
+"</ul>\n"
+"Next comes further documentation of the class itself.<br>\n"
+"<br>\n"
+"Lastly, there are listed all members of the class. Public members come first,\n"
+"then protected, at last the private ones.<br>\n"
+"All member lists are accessible by the lower navigationbars on top of the\n"
+"page.<br>\n"
+"\n"
+"<h3 class=\"help\">Macros and Defines</h3>\n"
+"In C++ and C, there are also program constructs, which do not fit into the\n"
+"name tree, because they are #define'd: macros and definitions.<br>\n"
+"These may be documented, too. Those comments you find <a href=\"def-all.html\">\n"
+"here</a>\n"
+" or from the \"Overview\" start page.\n"
+"<h3 class=\"help\">Links to IDL-Documentation</h3>\n"
+"Some types, which appear as links, may refer to classes, enums or other\n"
+"entities, which are direct mappings of UNO-IDL entities.<br>\n"
+"In those cases the link doesn't lead to the C++ class, enum or whatever,\n"
+"but to the description of the IDL entity.\n"
+"<h3 class=\"help\">How to Link From Extern Documents</h3>\n"
+"If you wish to write an extern html document, which links to types within\n"
+"this C++ reference, you can do so, if your links have the following format:<br>\n"
+"<br>\n"
+"&lt;RootDirectory-of-this-Document&gt;/names/&lt;Namespace-A&gt;/&lt;Namespace-XY&gt;/EnclosingClass-nn&gt;/&lt;TypePreFix&gt;-&lt;MyTypeName&gt;.html<br>\n"
+"<br>\n"
+"&lt;TypePreFix&gt; can have the following values:<br>\n"
+"<ul>\n"
+"<li>c - class, struct or union</li>\n"
+"<li>e - enum</li>\n"
+"<li>t - typedef</li>\n"
+"</ul>\n"
+"If this document would be located in directory &nbsp;\"/doc/cpp/ref\", examples\n"
+"would look like this:<br>\n"
+"<br>\n"
+"&lt;a href=\"/doc/cpp/ref/names/osl/c-File.html\"&gt;class File&lt;/a&gt;<br>\n"
+"&lt;a href=\"/doc/cpp/ref/names/osl/FileBase/e-RC.html\"&gt;enum FileBase::RC&lt;/a&gt;<br>\n"
+"&lt;a href=\"/doc/cpp/ref/names/t-oslMutex.html\"&gt;typedef oslMutex&lt;/a&gt;<br>\n"
+"<br>\n"
+"Namespaces are described in the index.html file within their directory:<br>\n"
+"<br>\n"
+"&lt;a href=\"/doc/cpp/ref/names/cppu/index.html\"&gt;namespace cppu&lt;/a&gt;<br>\n"
+"</div>" );
+
+
+
+
+PageMaker_Help::PageMaker_Help( PageDisplay & io_rPage )
+ : SpecializedPageMaker(io_rPage),
+ pNavi(0)
+{
+}
+
+PageMaker_Help::~PageMaker_Help()
+{
+}
+
+void
+PageMaker_Help::MakePage()
+{
+ pNavi = new NavigationBar( Env(), NavigationBar::LOC_Help );
+ Write_NavBar();
+
+ Write_TopArea();
+ Write_DocuArea();
+}
+
+void
+PageMaker_Help::Write_NavBar()
+{
+ pNavi->Write( CurOut() );
+ CurOut() << new HorizontalLine;
+}
+
+void
+PageMaker_Help::Write_TopArea()
+{
+ adcdisp::PageTitle_Std fTitle;
+ fTitle( CurOut(), "How to Use", "this Reference Document" );
+
+ CurOut() << new xml::XmlCode(C_sHelpText);
+}
+
+void
+PageMaker_Help::Write_DocuArea()
+{
+ CurOut() << new HorizontalLine;
+}
+
+
+
diff --git a/autodoc/source/display/html/pm_help.hxx b/autodoc/source/display/html/pm_help.hxx
new file mode 100644
index 000000000000..7266c402c991
--- /dev/null
+++ b/autodoc/source/display/html/pm_help.hxx
@@ -0,0 +1,63 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_DISPLAY_HTML_PM_HELP_HXX
+#define ADC_DISPLAY_HTML_PM_HELP_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include "pm_base.hxx"
+ // COMPONENTS
+ // PARAMETERS
+
+class NavigationBar;
+
+class PageMaker_Help : public SpecializedPageMaker
+{
+ public:
+ PageMaker_Help(
+ PageDisplay & io_rPage );
+
+ virtual ~PageMaker_Help();
+
+ virtual void MakePage();
+
+ private:
+ virtual void Write_NavBar();
+ virtual void Write_TopArea();
+ virtual void Write_DocuArea();
+
+ // DATA
+ Dyn<NavigationBar> pNavi;
+};
+
+
+
+#endif
+
diff --git a/autodoc/source/display/html/pm_index.cxx b/autodoc/source/display/html/pm_index.cxx
new file mode 100644
index 000000000000..bb41a8fe8f58
--- /dev/null
+++ b/autodoc/source/display/html/pm_index.cxx
@@ -0,0 +1,317 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "pm_index.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include <ary/cpp/c_gate.hxx>
+#include <ary/cpp/c_class.hxx>
+#include <ary/cpp/c_define.hxx>
+#include <ary/cpp/c_enum.hxx>
+#include <ary/cpp/c_enuval.hxx>
+#include <ary/cpp/c_funct.hxx>
+#include <ary/cpp/c_macro.hxx>
+#include <ary/cpp/c_namesp.hxx>
+#include <ary/cpp/c_tydef.hxx>
+#include <ary/cpp/c_vari.hxx>
+#include <ary/cpp/cp_ce.hxx>
+#include "aryattrs.hxx"
+#include "hd_chlst.hxx"
+#include "hd_docu.hxx"
+#include "html_kit.hxx"
+#include "navibar.hxx"
+#include "opageenv.hxx"
+#include "pagemake.hxx"
+#include "strconst.hxx"
+
+using namespace csi;
+using ary::GlobalId;
+
+
+
+
+namespace
+{
+
+inline const char *
+F_CK_Text( ary::cpp::E_ClassKey i_eCK )
+{
+ switch (i_eCK)
+ {
+ case ary::cpp::CK_class: return "class";
+ case ary::cpp::CK_struct: return "struct";
+ case ary::cpp::CK_union: return "union";
+ } // end switch
+ return "";
+}
+
+template <class CE>
+inline const char *
+F_OwnerType( const CE & i_rData, const ary::cpp::Gate & i_rGate )
+{
+ if ( i_rData.Protection() == ary::cpp::PROTECT_global )
+ return "namespace ";
+
+ const ary::cpp::Class *
+ pClass = dynamic_cast< const ary::cpp::Class* >(
+ i_rGate.Ces().Search_Ce(i_rData.Owner()) );
+ if (pClass != 0)
+ return F_CK_Text(pClass->ClassKey());
+ return "";
+}
+
+} // anonymous namespace
+
+PageMaker_Index::PageMaker_Index( PageDisplay & io_rPage,
+ char i_c )
+ : SpecializedPageMaker(io_rPage),
+ pNavi(0),
+ c(i_c),
+ pCurIndex(0)
+{
+}
+
+PageMaker_Index::~PageMaker_Index()
+{
+}
+
+void
+PageMaker_Index::MakePage()
+{
+ pNavi = new NavigationBar( Env(), NavigationBar::LOC_Index );
+
+ Write_NavBar();
+ Write_TopArea();
+ Write_CompleteAlphabeticalList();
+}
+
+void
+PageMaker_Index::do_Process( const ary::cpp::Namespace & i_rData )
+{
+ Write_CeIndexEntry( i_rData, "namespace", "namespace" );
+}
+
+void
+PageMaker_Index::do_Process( const ary::cpp::Class & i_rData )
+{
+ // KORR_FUTURE
+ // Really throw out all anonymous classes from index?
+
+ if ( strncmp(i_rData.LocalName().c_str()+1,"_Anonymous",10) == 0 )
+ return;
+
+ Write_CeIndexEntry( i_rData,
+ F_CK_Text(i_rData.ClassKey()),
+ F_OwnerType(i_rData, Env().Gate()) );
+}
+
+void
+PageMaker_Index::do_Process( const ary::cpp::Enum & i_rData )
+{
+ Write_CeIndexEntry( i_rData, "enum", F_OwnerType(i_rData, Env().Gate()) );
+}
+
+void
+PageMaker_Index::do_Process( const ary::cpp::Typedef & i_rData )
+{
+ Write_CeIndexEntry( i_rData, "typedef", F_OwnerType(i_rData, Env().Gate()) );
+}
+
+void
+PageMaker_Index::do_Process( const ary::cpp::Function & i_rData )
+{
+ Write_CeIndexEntry( i_rData, "function", F_OwnerType(i_rData, Env().Gate()) );
+}
+
+void
+PageMaker_Index::do_Process( const ary::cpp::Variable & i_rData )
+{
+ Write_CeIndexEntry( i_rData, "variable", F_OwnerType(i_rData, Env().Gate()) );
+}
+
+void
+PageMaker_Index::do_Process( const ary::cpp::EnumValue & i_rData )
+{
+ Write_CeIndexEntry( i_rData, "enum value", "" );
+}
+
+void
+PageMaker_Index::do_Process( const ary::cpp::Define & i_rData )
+{
+ String sFileName;
+
+ pCurIndex->AddEntry();
+ pCurIndex->Term()
+ >> *new html::Link( Link2CppDefinition(Env(), i_rData) )
+ >> *new html::Bold
+ << i_rData.LocalName();
+ pCurIndex->Term()
+ << " - define";
+ pCurIndex->Def() << " ";
+}
+
+void
+PageMaker_Index::do_Process( const ary::cpp::Macro & i_rData )
+{
+ String sFileName;
+
+ pCurIndex->AddEntry();
+ pCurIndex->Term()
+ >> *new html::Link( Link2CppDefinition(Env(), i_rData) )
+ >> *new html::Bold
+ << i_rData.LocalName();
+ pCurIndex->Term()
+ << " - macro";
+
+ pCurIndex->Def() << " ";
+}
+
+const ary::cpp::Gate *
+PageMaker_Index::inq_Get_ReFinder() const
+{
+ return &Env().Gate();
+}
+
+void
+PageMaker_Index::Write_NavBar()
+{
+ pNavi->Write( CurOut() );
+ CurOut() << new html::HorizontalLine;
+}
+
+
+const String C_sAlphabet(
+"<a href=\"index-1.html\"><B>A</B></a> <a href=\"index-2.html\"><B>B</B></a> <a href=\"index-3.html\"><B>C</B></a> <a href=\"index-4.html\"><B>D</B></a> <a href=\"index-5.html\"><B>E</B></a> "
+"<a href=\"index-6.html\"><B>F</B></a> <a href=\"index-7.html\"><B>G</B></a> <a href=\"index-8.html\"><B>H</B></a> <a href=\"index-9.html\"><B>I</B></a> <a href=\"index-10.html\"><B>J</B></a> "
+"<a href=\"index-11.html\"><B>K</B></a> <a href=\"index-12.html\"><B>L</B></a> <a href=\"index-13.html\"><B>M</B></a> <a href=\"index-14.html\"><B>N</B></a> <a href=\"index-15.html\"><B>O</B></a> "
+"<a href=\"index-16.html\"><B>P</B></a> <a href=\"index-17.html\"><B>Q</B></a> <a href=\"index-18.html\"><B>R</B></a> <a href=\"index-19.html\"><B>S</B></a> <a href=\"index-20.html\"><B>T</B></a> "
+"<a href=\"index-21.html\"><B>U</B></a> <a href=\"index-22.html\"><B>V</B></a> <a href=\"index-23.html\"><B>W</B></a> <a href=\"index-24.html\"><B>X</B></a> <a href=\"index-25.html\"><B>Y</B></a> "
+"<a href=\"index-26.html\"><B>Z</B></a> <a href=\"index-27.html\"><B>_</B></a>" );
+
+void
+PageMaker_Index::Write_TopArea()
+{
+ String sLetter(&c, 1);
+
+ adcdisp::PageTitle_Std fTitle;
+ fTitle( CurOut(), "Global Index", sLetter );
+
+ CurOut() >>* new html::Paragraph
+ << new html::AlignAttr("center")
+ << new xml::XmlCode(C_sAlphabet);
+
+ CurOut() << new html::HorizontalLine;
+}
+
+void
+PageMaker_Index::Write_CompleteAlphabeticalList()
+{
+ std::vector<GlobalId>
+ aThisPagesItems;
+ const ary::cpp::Gate &
+ rGate = Env().Gate();
+
+ static char sBegin[] = "X";
+ static char sEnd[] = "Y";
+
+ switch ( c )
+ {
+ case 'Z': sBegin[0] = 'Z';
+ sEnd[0] = '_';
+ break;
+ case '_': sBegin[0] = '_';
+ sEnd[0] = '0';
+ break;
+ default: sBegin[0] = c;
+ sEnd[0] = char(c + 1);
+ break;
+ }
+
+ uintt
+ nCount = rGate.Get_AlphabeticalList( aThisPagesItems, sBegin, sEnd );
+ if (nCount > 0 )
+ {
+ adcdisp::IndexList
+ aIndex(CurOut());
+ pCurIndex = &aIndex;
+
+ std::vector<GlobalId>::const_iterator itEnd = aThisPagesItems.end();
+ for ( std::vector<GlobalId>::const_iterator it = aThisPagesItems.begin();
+ it != itEnd;
+ ++it )
+ {
+ const ary::Entity *
+ pRe = rGate.Search_Entity( *it );
+ if ( pRe != 0 )
+ pRe->Accept(*this);
+ } // end for
+
+ pCurIndex = 0;
+ } // endif (nCount > 0)
+}
+
+void
+PageMaker_Index::Write_CeIndexEntry( const ary::cpp::CodeEntity &
+ i_rCe,
+ const char * i_sType,
+ const char * i_sOwnerType )
+{
+ if ( Ce_IsInternal(i_rCe) )
+ return;
+
+ static csv::StreamStr aQualification(500);
+
+ const ary::cpp::CodeEntity &
+ rOwner = Env().Gate().Ces().Find_Ce(i_rCe.Owner());
+
+ pCurIndex->AddEntry();
+ pCurIndex->Term()
+ >> *new html::Link( Link2Ce(Env(), i_rCe) )
+ >> *new html::Bold
+ << i_rCe.LocalName();
+ pCurIndex->Term()
+ << " - "
+ << i_sType;
+
+ if ( rOwner.Owner().IsValid() )
+ {
+ aQualification.seekp(0);
+ Env().Gate().Ces().Get_QualifiedName( aQualification,
+ rOwner.LocalName(),
+ rOwner.Owner() );
+
+ pCurIndex->Term()
+ << " in "
+ << i_sOwnerType
+ << " "
+ << aQualification.c_str();
+ }
+
+ pCurIndex->Def() << " ";
+}
diff --git a/autodoc/source/display/html/pm_index.hxx b/autodoc/source/display/html/pm_index.hxx
new file mode 100644
index 000000000000..d2dcf8ed422c
--- /dev/null
+++ b/autodoc/source/display/html/pm_index.hxx
@@ -0,0 +1,135 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_DISPLAY_HTML_PM_INDEX_HXX
+#define ADC_DISPLAY_HTML_PM_INDEX_HXX
+
+// BASE CLASSES
+#include "pm_base.hxx"
+#include <ary/ary_disp.hxx>
+#include <cosv/tpl/processor.hxx>
+// USED SERVICES
+namespace adcdisp
+{
+ class IndexList;
+}
+namespace ary
+{
+ namespace cpp
+ {
+ class Namespace;
+ class Class;
+ class Enum;
+ class Typedef;
+ class Function;
+ class Variable;
+ class EnumValue;
+ class Define;
+ class Macro;
+ }
+}
+
+class NavigationBar;
+
+
+
+
+class PageMaker_Index : public SpecializedPageMaker,
+ public ary::Display,
+ public csv::ConstProcessor<ary::cpp::Namespace>,
+ public csv::ConstProcessor<ary::cpp::Class>,
+ public csv::ConstProcessor<ary::cpp::Enum>,
+ public csv::ConstProcessor<ary::cpp::Typedef>,
+ public csv::ConstProcessor<ary::cpp::Function>,
+ public csv::ConstProcessor<ary::cpp::Variable>,
+ public csv::ConstProcessor<ary::cpp::EnumValue>,
+ public csv::ConstProcessor<ary::cpp::Define>,
+ public csv::ConstProcessor<ary::cpp::Macro>
+{
+ public:
+ PageMaker_Index(
+ PageDisplay & io_rPage,
+ char i_c );
+
+ virtual ~PageMaker_Index();
+
+ virtual void MakePage();
+
+ private:
+ // Interface csv::ConstProcessor<>
+ virtual void do_Process(
+ const ary::cpp::Namespace &
+ i_rData );
+ virtual void do_Process(
+ const ary::cpp::Class &
+ i_rData );
+ virtual void do_Process(
+ const ary::cpp::Enum &
+ i_rData );
+ virtual void do_Process(
+ const ary::cpp::Typedef &
+ i_rData );
+ virtual void do_Process(
+ const ary::cpp::Function &
+ i_rData );
+ virtual void do_Process(
+ const ary::cpp::Variable &
+ i_rData );
+ virtual void do_Process(
+ const ary::cpp::EnumValue &
+ i_rData );
+ virtual void do_Process(
+ const ary::cpp::Define &
+ i_rData );
+ virtual void do_Process(
+ const ary::cpp::Macro &
+ i_rData );
+ // Interface ary::cpp::Display:
+ virtual const ary::cpp::Gate *
+ inq_Get_ReFinder() const;
+ // Locals
+ virtual void Write_NavBar();
+ virtual void Write_TopArea();
+ virtual void Write_CompleteAlphabeticalList();
+
+ void Write_CeIndexEntry(
+ const ary::cpp::CodeEntity &
+ i_rCe,
+ const char * i_sType,
+ const char * i_sOwnerType );
+
+ // DATA
+ Dyn<NavigationBar> pNavi;
+ char c;
+ adcdisp::IndexList *
+ pCurIndex;
+};
+
+
+
+
+#endif
diff --git a/autodoc/source/display/html/pm_namsp.cxx b/autodoc/source/display/html/pm_namsp.cxx
new file mode 100644
index 000000000000..ea13c237919f
--- /dev/null
+++ b/autodoc/source/display/html/pm_namsp.cxx
@@ -0,0 +1,173 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "pm_namsp.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include "hd_chlst.hxx"
+#include "hd_docu.hxx"
+#include "html_kit.hxx"
+#include "navibar.hxx"
+#include "opageenv.hxx"
+#include "pagemake.hxx"
+#include "strconst.hxx"
+
+
+using namespace csi;
+using csi::html::HorizontalLine;
+using csi::html::Link;
+using csi::html::Table;
+using csi::html::TableRow;
+using csi::html::TableCell;
+
+
+
+PageMaker_Namespace::PageMaker_Namespace( PageDisplay & io_rPage )
+ : SpecializedPageMaker(io_rPage),
+ pMe( io_rPage.Env().CurNamespace() ),
+ pChildDisplay( new ChildList_Display(io_rPage.Env()) ),
+ pNavi(0)
+{
+ csv_assert( pMe != 0 );
+}
+
+PageMaker_Namespace::~PageMaker_Namespace()
+{
+}
+
+void
+PageMaker_Namespace::MakePage()
+{
+ pNavi = new NavigationBar( Env(), Me() );
+
+ Write_NavBar();
+ Write_TopArea();
+ Write_DocuArea();
+
+ pNavi->MakeSubRow("");
+ Write_ChildList( ary::cpp::Namespace::SLOT_SubNamespaces, C_sTitle_SubNamespaces, C_sLabel_SubNamespaces );
+
+ Write_ChildLists_forClasses( C_sTitle_Classes,
+ C_sLabel_Classes,
+ ary::cpp::CK_class );
+ Write_ChildLists_forClasses( C_sTitle_Structs,
+ C_sLabel_Structs,
+ ary::cpp::CK_struct );
+ Write_ChildLists_forClasses( C_sTitle_Unions,
+ C_sLabel_Unions,
+ ary::cpp::CK_union );
+
+ Write_ChildList( ary::cpp::Namespace::SLOT_Enums, C_sTitle_Enums, C_sLabel_Enums );
+ Write_ChildList( ary::cpp::Namespace::SLOT_Typedefs, C_sTitle_Typedefs, C_sLabel_Typedefs );
+ Write_ChildList( ary::cpp::Namespace::SLOT_Operations, C_sTitle_Operations, C_sLabel_Operations );
+ Write_ChildList( ary::cpp::Namespace::SLOT_Constants, C_sTitle_Constants, C_sLabel_Constants );
+ Write_ChildList( ary::cpp::Namespace::SLOT_Variables, C_sTitle_Variables, C_sLabel_Variables );
+
+ pNavi->Write_SubRows();
+}
+
+void
+PageMaker_Namespace::Write_NavBar()
+{
+ pNavi->Write( CurOut() );
+ CurOut() << new HorizontalLine;
+}
+
+void
+PageMaker_Namespace::Write_TopArea()
+{
+ Page().Write_NameChainWithLinks( Me() );
+
+ adcdisp::PageTitle_Std fTitle;
+ xml::Element & rH3 = fTitle( CurOut() );
+ if ( Env().CurNamespace()->Owner().IsValid() )
+ {
+ rH3 << C_sHFTypeTitle_Namespace
+ << " "
+ << Env().CurNamespace()->LocalName();
+ }
+ else
+ {
+ rH3 << C_sHFTitle_GlobalNamespaceCpp;
+ }
+ CurOut() << new HorizontalLine;
+}
+
+void
+PageMaker_Namespace::Write_DocuArea()
+{
+ Docu_Display aDocuShow( Env() );
+
+ aDocuShow.Assign_Out(CurOut());
+ aDocuShow.Process(Me().Docu());
+ aDocuShow.Unassign_Out();
+
+ CurOut() << new HorizontalLine;
+}
+
+void
+PageMaker_Namespace::Write_ChildList( ary::SlotAccessId i_nSlot,
+ const char * i_sListTitle,
+ const char * i_sLabel )
+
+{
+ bool bChildrenExist = false;
+ ChildList_Display::Area_Result
+ aResult( bChildrenExist, CurOut() );
+
+ pChildDisplay->Run_Simple( aResult,
+ i_nSlot,
+ i_sLabel,
+ i_sListTitle );
+
+ pNavi->AddItem(i_sListTitle, i_sLabel, bChildrenExist);
+ if (bChildrenExist)
+ CurOut() << new HorizontalLine;
+}
+
+void
+PageMaker_Namespace::Write_ChildLists_forClasses( const char * i_sListTitle,
+ const char * i_sLabel,
+ ary::cpp::E_ClassKey i_eFilter )
+
+{
+ bool bChildrenExist = false;
+ ChildList_Display::Area_Result
+ aResult( bChildrenExist, CurOut() );
+
+ pChildDisplay->Run_GlobalClasses( aResult,
+ ary::cpp::Namespace::SLOT_Classes,
+ i_sLabel,
+ i_sListTitle,
+ i_eFilter );
+
+ pNavi->AddItem(i_sListTitle, i_sLabel, bChildrenExist);
+ if ( bChildrenExist )
+ CurOut() << new HorizontalLine;
+}
diff --git a/autodoc/source/display/html/pm_namsp.hxx b/autodoc/source/display/html/pm_namsp.hxx
new file mode 100644
index 000000000000..11501e4dc359
--- /dev/null
+++ b/autodoc/source/display/html/pm_namsp.hxx
@@ -0,0 +1,78 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_DISPLAY_HTML_PM_NAMSP_HXX
+#define ADC_DISPLAY_HTML_PM_NAMSP_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include "pm_base.hxx"
+ // COMPONENTS
+ // PARAMETERS
+
+class ChildList_Display;
+class NavigationBar;
+
+class PageMaker_Namespace : public SpecializedPageMaker
+{
+ public:
+ PageMaker_Namespace(
+ PageDisplay & io_rPage );
+
+ virtual ~PageMaker_Namespace();
+
+ virtual void MakePage();
+
+ private:
+ virtual void Write_NavBar();
+ virtual void Write_TopArea();
+ virtual void Write_DocuArea();
+ virtual void Write_ChildList(
+ ary::SlotAccessId i_nSlot,
+ const char * i_nListTitle,
+ const char * i_nLabel );
+ void Write_ChildLists_forClasses(
+ const char * i_sListTitle,
+ const char * i_sLabel,
+ ary::cpp::E_ClassKey i_eFilter );
+
+ const ary::cpp::Namespace &
+ Me() const { return *pMe; }
+ // DATA
+ const ary::cpp::Namespace *
+ pMe;
+ Dyn<ChildList_Display>
+ pChildDisplay;
+ Dyn<NavigationBar> pNavi;
+};
+
+
+
+#endif
+
diff --git a/autodoc/source/display/html/pm_start.cxx b/autodoc/source/display/html/pm_start.cxx
new file mode 100644
index 000000000000..c5ff38f32eba
--- /dev/null
+++ b/autodoc/source/display/html/pm_start.cxx
@@ -0,0 +1,137 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "pm_start.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include <ary/ary.hxx>
+#include "hd_chlst.hxx"
+#include "hd_docu.hxx"
+#include "navibar.hxx"
+#include "html_kit.hxx"
+#include "opageenv.hxx"
+#include "pagemake.hxx"
+#include "strconst.hxx"
+
+
+using namespace csi;
+using csi::html::Paragraph;
+using csi::html::HorizontalLine;
+using csi::html::AlignAttr;
+using csi::html::Bold;
+using csi::html::Link;
+using csi::html::Sbr;
+using csi::html::LineBreak;
+
+
+
+PageMaker_Overview::PageMaker_Overview( PageDisplay & io_rPage )
+ : SpecializedPageMaker(io_rPage),
+ pNavi(0)
+{
+}
+
+PageMaker_Overview::~PageMaker_Overview()
+{
+}
+
+void
+PageMaker_Overview::MakePage()
+{
+ pNavi = new NavigationBar( Env(), NavigationBar::LOC_Overview );
+ Write_NavBar();
+
+ Write_TopArea();
+ Write_DocuArea();
+}
+
+void
+PageMaker_Overview::Write_NavBar()
+{
+ pNavi->Write( CurOut() );
+ CurOut() << new HorizontalLine;
+}
+
+void
+PageMaker_Overview::Write_TopArea()
+{
+ adcdisp::PageTitle_Std fTitle;
+ fTitle( CurOut(), Env().RepositoryTitle(), "" );
+
+ CurOut()
+ >> *new Paragraph
+ << new html::StyleAttr("font-size:14pt;")
+ << "This is a reference documentation for the C++ source code."
+ << new LineBreak
+ << new LineBreak
+ << "Points to start:";
+
+ html::SimpleList &
+ rList = *new html::SimpleList;
+ CurOut() >> rList;
+
+ html::ListItem & rNamedObjsItem =
+ rList.AddItem();
+
+ StreamLock sNspDir(50);
+ rNamedObjsItem
+ << new html::StyleAttr("font-size:14pt;")
+ >> *new Link( sNspDir() << C_sDIR_NamespacesCpp
+ << "/"
+ << C_sHFN_Namespace
+ << c_str )
+ >> *new Bold
+ << "Named Objects";
+ rNamedObjsItem << " (classes, functions, namespaces, etc.)"
+ << new html::LineBreak;
+ rList.AddItem()
+ << new html::StyleAttr("font-size:14pt;")
+ >> *new Link( "def-all.html" )
+ >> *new Bold
+ << "Defines and Macros"
+ << new html::LineBreak;
+ StreamLock sIndexDir(50);
+ rList.AddItem()
+ << new html::StyleAttr("font-size:14pt;")
+ >> *new Link( sIndexDir() << C_sDIR_Index
+ << "/index-1.html"
+ << c_str )
+ >> *new Bold
+ << "Global Index"
+ << new html::LineBreak;
+}
+
+void
+PageMaker_Overview::Write_DocuArea()
+{
+ CurOut() << new HorizontalLine;
+}
+
+
+
diff --git a/autodoc/source/display/html/pm_start.hxx b/autodoc/source/display/html/pm_start.hxx
new file mode 100644
index 000000000000..96fe9d815efe
--- /dev/null
+++ b/autodoc/source/display/html/pm_start.hxx
@@ -0,0 +1,63 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_DISPLAY_HTML_PM_START_HXX
+#define ADC_DISPLAY_HTML_PM_START_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include "pm_base.hxx"
+ // COMPONENTS
+ // PARAMETERS
+
+class NavigationBar;
+
+class PageMaker_Overview : public SpecializedPageMaker
+{
+ public:
+ PageMaker_Overview(
+ PageDisplay & io_rPage );
+
+ virtual ~PageMaker_Overview();
+
+ virtual void MakePage();
+
+ private:
+ virtual void Write_NavBar();
+ virtual void Write_TopArea();
+ virtual void Write_DocuArea();
+
+ // DATA
+ Dyn<NavigationBar> pNavi;
+};
+
+
+
+#endif
+
diff --git a/autodoc/source/display/html/protarea.cxx b/autodoc/source/display/html/protarea.cxx
new file mode 100644
index 000000000000..8c54212c29f4
--- /dev/null
+++ b/autodoc/source/display/html/protarea.cxx
@@ -0,0 +1,138 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "protarea.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include "hdimpl.hxx"
+
+
+inline UINT8
+ProtectionArea::Index( ary::cpp::E_ClassKey i_eClassKey ) const
+{
+ return i_eClassKey == ary::cpp::CK_class
+ ? 0
+ : i_eClassKey == ary::cpp::CK_struct
+ ? 1
+ : 2;
+}
+
+
+
+ProtectionArea::ProtectionArea( const char * i_sLabel,
+ const char * i_sTitle )
+ : pSglTable( new S_Slot_Table(i_sTitle) ),
+ aClassesTables(),
+ sLabel(i_sLabel)
+{
+}
+
+ProtectionArea::~ProtectionArea()
+{
+
+}
+
+csi::html::Table &
+ProtectionArea::GetTable()
+{
+ csv_assert(pSglTable);
+
+ return pSglTable->GetTable();
+}
+
+csi::html::Table &
+ProtectionArea::GetTable( ary::cpp::E_ClassKey i_eClassKey )
+{
+ csv_assert(aClassesTables[Index(i_eClassKey)]);
+ return aClassesTables[Index(i_eClassKey)]->GetTable();
+}
+
+DYN csi::html::Table *
+ProtectionArea::ReleaseTable()
+{
+ csv_assert(pSglTable);
+ return pSglTable->ReleaseTable();
+}
+
+DYN csi::html::Table *
+ProtectionArea::ReleaseTable( ary::cpp::E_ClassKey i_eClassKey )
+{
+ csv_assert(aClassesTables[Index(i_eClassKey)]);
+ return aClassesTables[Index(i_eClassKey)]->ReleaseTable();
+}
+
+const char *
+ProtectionArea::Label() const
+{
+ return sLabel;
+}
+
+
+bool
+ProtectionArea::WasUsed_Area() const
+{
+ if ( pSglTable )
+ {
+ return pSglTable->WasUsed();
+ }
+
+ typedef const Dyn<ProtectionArea::S_Slot_Table> cdyntab;
+
+ // Workaround a maybe compiler bug in Solaris5-CC ?
+ // should normally work without the cast,
+ // because that is exactly the genuine type, given:
+ return static_cast< cdyntab& >(aClassesTables[0])->WasUsed()
+ OR static_cast< cdyntab& >(aClassesTables[1])->WasUsed()
+ OR static_cast< cdyntab& >(aClassesTables[2])->WasUsed();
+}
+
+//******************* S_Slot_Table **********************//
+
+ProtectionArea::
+S_Slot_Table::S_Slot_Table(const char * i_sTitle)
+ : sTableTitle(i_sTitle)
+{
+}
+
+ProtectionArea::
+S_Slot_Table::~S_Slot_Table()
+{
+}
+
+csi::html::Table &
+ProtectionArea::
+S_Slot_Table::GetTable()
+{
+ return pTable
+ ? *pTable
+ : *( pTable = &Create_ChildListTable(sTableTitle) );
+}
+
+
+
diff --git a/autodoc/source/display/html/protarea.hxx b/autodoc/source/display/html/protarea.hxx
new file mode 100644
index 000000000000..e09904fbc85e
--- /dev/null
+++ b/autodoc/source/display/html/protarea.hxx
@@ -0,0 +1,94 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_DISPLAY_HTML_PROTAREA_HXX
+#define ADC_DISPLAY_HTML_PROTAREA_HXX
+
+// USED SERVICES
+#include <ary/cpp/c_types4cpp.hxx>
+
+namespace csi
+{
+namespace html
+{
+ class Table;
+}
+}
+
+
+
+
+class ProtectionArea
+{
+ public:
+ ProtectionArea(
+ const char * i_sLabel,
+ const char * i_sTitle );
+ ~ProtectionArea();
+
+ csi::html::Table & GetTable();
+ csi::html::Table & GetTable(
+ ary::cpp::E_ClassKey
+ i_eClassKey );
+ DYN csi::html::Table * ReleaseTable();
+ DYN csi::html::Table * ReleaseTable(
+ ary::cpp::E_ClassKey
+ i_eClassKey );
+ const char * Label() const;
+
+ int Size() const { return pSglTable ? 1 : 3; }
+
+ bool WasUsed_Area() const;
+ private:
+ struct S_Slot_Table
+ {
+ const char * sTableTitle;
+ Dyn< csi::html::Table >
+ pTable;
+
+ S_Slot_Table(
+ const char * i_sTitle );
+ ~S_Slot_Table();
+ csi::html::Table & GetTable();
+ DYN csi::html::Table *
+ ReleaseTable() { return pTable.Release(); }
+ bool WasUsed() const { return pTable; }
+ };
+
+ UINT8 Index(
+ ary::cpp::E_ClassKey
+ i_eClassKey ) const;
+ // DATA
+ Dyn<S_Slot_Table> pSglTable;
+ Dyn<S_Slot_Table> aClassesTables[3];
+ const char * sLabel;
+};
+
+
+
+#endif
+
diff --git a/autodoc/source/display/html/strconst.hxx b/autodoc/source/display/html/strconst.hxx
new file mode 100644
index 000000000000..a9e5eaad2101
--- /dev/null
+++ b/autodoc/source/display/html/strconst.hxx
@@ -0,0 +1,78 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_DISPLAY_HTML_STRCONST_HXX
+#define ADC_DISPLAY_HTML_STRCONST_HXX
+
+
+const char * const C_sDIR_NamespacesCpp = "names";
+const char * const C_sDIR_Index = "index-files"; // Convention recognised by Javadoc
+
+const char * const C_sPath_Index = "index-files/index-1.html"; // Convention recognised by Javadoc
+
+const char * const C_sHFN_Css = "cpp.css";
+const char * const C_sHFN_Overview = "index.html";
+const char * const C_sHFN_Help = "help.html";
+
+const char * const C_sHFN_Namespace = "index.html";
+
+const char * const C_sTitle_SubNamespaces = "Nested Namespaces";
+const char * const C_sTitle_Classes = "Classes";
+const char * const C_sTitle_Structs = "Structs";
+const char * const C_sTitle_Unions = "Unions";
+const char * const C_sTitle_Enums = "Enums";
+const char * const C_sTitle_Typedefs = "Typedefs";
+const char * const C_sTitle_Operations = "Functions";
+const char * const C_sTitle_Constants = "Constants";
+const char * const C_sTitle_Variables = "Variables";
+const char * const C_sTitle_EnumValues = "Values";
+
+const char * const C_sLabel_SubNamespaces = "subnsps";
+const char * const C_sLabel_Classes = "classes";
+const char * const C_sLabel_Structs = "structs";
+const char * const C_sLabel_Unions = "unions";
+const char * const C_sLabel_Enums = "enums";
+const char * const C_sLabel_Typedefs = "tydefs";
+const char * const C_sLabel_Operations = "ops";
+const char * const C_sLabel_Constants = "consts";
+const char * const C_sLabel_Variables = "vars";
+const char * const C_sLabel_EnumValues = "envals";
+
+const char * const C_sHFTitle_Overview = "C++ Reference Documentation Overview";
+const char * const C_sHFTitle_Help = "How This Reference Document Is Organized";
+
+const char * const C_sHFTitle_GlobalNamespaceCpp = "Global Namespace in C++";
+const char * const C_sHFTypeTitle_Namespace = "namespace";
+const char * const C_sHFTypeTitle_Class = "class";
+const char * const C_sHFTypeTitle_Struct = "struct";
+const char * const C_sHFTypeTitle_Union = "union";
+const char * const C_sHFTypeTitle_Enum = "enum";
+const char * const C_sHFTypeTitle_Typedef = "typedef";
+
+
+#endif
+
diff --git a/autodoc/source/display/idl/hfi_constgroup.cxx b/autodoc/source/display/idl/hfi_constgroup.cxx
new file mode 100644
index 000000000000..accf58cf290e
--- /dev/null
+++ b/autodoc/source/display/idl/hfi_constgroup.cxx
@@ -0,0 +1,138 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "hfi_constgroup.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include <ary/idl/i_ce.hxx>
+#include <ary/idl/ik_constgroup.hxx>
+#include <toolkit/hf_linachain.hxx>
+#include <toolkit/hf_navi_sub.hxx>
+#include <toolkit/hf_title.hxx>
+#include "hfi_navibar.hxx"
+#include "hfi_property.hxx"
+#include "hi_linkhelper.hxx"
+
+
+extern const String
+ C_sCePrefix_Constants("constants group");
+
+
+namespace
+{
+
+const String
+ C_sList_Constants("Constants");
+const String
+ C_sList_Constants_Label("Constants");
+const String
+ C_sList_ConstantDetails("Constants' Details");
+const String
+ C_sList_ConstantDetails_Label("ConstantDetails");
+
+enum E_SubListIndices
+{
+ sli_ConstantsSummary = 0,
+ sli_ConstantDetails = 1
+};
+
+
+} // anonymous namespace
+
+
+
+HF_IdlConstGroup::HF_IdlConstGroup( Environment & io_rEnv,
+ Xml::Element & o_rOut )
+ : HtmlFactory_Idl(io_rEnv, &o_rOut)
+{
+}
+
+HF_IdlConstGroup::~HF_IdlConstGroup()
+{
+}
+
+void
+HF_IdlConstGroup::Produce_byData( const client & i_ce ) const
+{
+ Dyn<HF_NaviSubRow>
+ pNaviSubRow( &make_Navibar(i_ce) );
+
+ HF_TitleTable
+ aTitle(CurOut());
+ HF_LinkedNameChain
+ aNameChain(aTitle.Add_Row());
+
+ aNameChain.Produce_CompleteChain(Env().CurPosition(), nameChainLinker);
+ produce_Title(aTitle, C_sCePrefix_Constants, i_ce);
+
+ write_Docu(aTitle.Add_Row(), i_ce);
+ CurOut() << new Html::HorizontalLine();
+
+ dyn_ce_list
+ dpConstants;
+ ary::idl::ifc_constgroup::attr::Get_Constants(dpConstants, i_ce);
+
+ if ( (*dpConstants).operator bool() )
+ {
+ produce_Members( *dpConstants,
+ C_sList_Constants,
+ C_sList_Constants_Label,
+ C_sList_ConstantDetails,
+ C_sList_ConstantDetails_Label );
+ pNaviSubRow->SwitchOn(sli_ConstantsSummary);
+ pNaviSubRow->SwitchOn(sli_ConstantDetails);
+ }
+ pNaviSubRow->Produce_Row();
+}
+
+HF_NaviSubRow &
+HF_IdlConstGroup::make_Navibar( const client & i_ce ) const
+{
+ HF_IdlNavigationBar
+ aNaviBar(Env(), CurOut());
+ aNaviBar.Produce_CeMainRow(i_ce,true); // true := avoid link to Use-page.
+
+ DYN HF_NaviSubRow &
+ ret = aNaviBar.Add_SubRow();
+ ret.AddItem(C_sList_Constants, C_sList_Constants_Label, false);
+ ret.AddItem(C_sList_ConstantDetails, C_sList_ConstantDetails_Label, false);
+
+ CurOut() << new Html::HorizontalLine();
+ return ret;
+}
+
+void
+HF_IdlConstGroup::produce_MemberDetails( HF_SubTitleTable & o_table,
+ const client & i_ce ) const
+{
+ HF_IdlConstant
+ aElement( Env(), o_table );
+ aElement.Produce_byData(i_ce);
+}
+
diff --git a/autodoc/source/display/idl/hfi_constgroup.hxx b/autodoc/source/display/idl/hfi_constgroup.hxx
new file mode 100644
index 000000000000..9719d6c131cf
--- /dev/null
+++ b/autodoc/source/display/idl/hfi_constgroup.hxx
@@ -0,0 +1,66 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_DISPLAY_HFI_CONSTGROUP_HXX
+#define ADC_DISPLAY_HFI_CONSTGROUP_HXX
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include "hi_factory.hxx"
+ // COMPONENTS
+ // PARAMETERS
+
+class HF_IdlConstGroup : public HtmlFactory_Idl
+{
+ public:
+ HF_IdlConstGroup(
+ Environment & io_rEnv,
+ Xml::Element & o_rOut );
+ virtual ~HF_IdlConstGroup();
+
+ void Produce_byData(
+ const client & ce ) const;
+ private:
+ HF_NaviSubRow & make_Navibar(
+ const client & ce ) const;
+ virtual void produce_MemberDetails(
+ HF_SubTitleTable & o_table,
+ const client & ce ) const;
+};
+
+
+
+// IMPLEMENTATION
+
+
+extern const String
+ C_sCePrefix_Constants;
+
+#endif
+
+
diff --git a/autodoc/source/display/idl/hfi_doc.cxx b/autodoc/source/display/idl/hfi_doc.cxx
new file mode 100644
index 000000000000..5647ecd753f0
--- /dev/null
+++ b/autodoc/source/display/idl/hfi_doc.cxx
@@ -0,0 +1,191 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "hfi_doc.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include <ary/idl/i_ce.hxx>
+#include <ary/doc/d_oldidldocu.hxx>
+#include <ary_i/d_token.hxx>
+#include <toolkit/hf_docentry.hxx>
+#include "hfi_tag.hxx"
+#include "hi_ary.hxx"
+
+
+
+
+HF_IdlDocu::HF_IdlDocu( Environment & io_rEnv,
+ HF_DocEntryList & o_rOut )
+ : HtmlFactory_Idl( io_rEnv, &o_rOut.CurOut() ),
+ rOut(o_rOut)
+{
+}
+
+HF_IdlDocu::~HF_IdlDocu()
+{
+}
+
+void
+HF_IdlDocu::Produce_fromCodeEntity( const client & i_ce ) const
+{
+ const ce_info *
+ i_pDocu = Get_IdlDocu(i_ce.Docu());
+ if (i_pDocu != 0)
+ Produce_byDocuAndScope(*i_pDocu, &i_ce, i_ce);
+}
+
+void
+HF_IdlDocu::Produce_fromReference( const ce_info & i_rDocuForReference,
+ const client & i_rScopeGivingCe ) const
+{
+ Produce_byDocuAndScope(i_rDocuForReference, 0, i_rScopeGivingCe );
+}
+
+void
+HF_IdlDocu::Produce_byDocuAndScope( const ce_info & i_rDocu,
+ const client * i_pClient,
+ const client & i_rScopeGivingCe ) const
+{
+ bool bShort = NOT i_rDocu.Short().IsEmpty();
+ bool bDescr = NOT i_rDocu.Description().IsEmpty();
+
+ if ( i_rDocu.IsDeprecated()
+ OR (
+ (i_pClient != 0 ? i_pClient->SightLevel() == ary::idl::sl_File : false)
+ AND NOT i_rDocu.IsPublished()
+ )
+ OR i_rDocu.IsOptional() )
+ { // any usage restriction
+ rOut.Produce_Term("Usage Restrictions");
+
+ if ( i_rDocu.IsDeprecated() )
+ rOut.Produce_Definition() >> *new Html::Italic << "deprecated";
+ if ( (i_pClient != 0 ? i_pClient->SightLevel() == ary::idl::sl_File : false)
+ AND NOT i_rDocu.IsPublished() )
+ rOut.Produce_Definition() >> *new Html::Italic << "not published";
+ if ( i_rDocu.IsOptional() )
+ rOut.Produce_Definition() >> *new Html::Italic << "optional";
+
+ if ( i_rDocu.IsDeprecated() AND
+ // KORR_FUTURE
+ // Workaround, because DocuTex2::IsEmpty() does not
+ // calculate whitespace tokens only as empty.
+ i_rDocu.DeprecatedText().Tokens().size() > 1 )
+ {
+ rOut.Produce_Term("Deprecation Info");
+
+ HF_IdlDocuTextDisplay
+ aDescription( Env(), 0, i_rScopeGivingCe);
+ aDescription.Out().Enter( rOut.Produce_Definition() );
+ i_rDocu.DeprecatedText().DisplayAt( aDescription );
+ aDescription.Out().Leave();
+ }
+ } // end if (<any usage restriction>)
+
+ if ( bShort OR bDescr )
+ {
+ rOut.Produce_Term("Description");
+ HF_IdlDocuTextDisplay
+ aDescription( Env(), 0, i_rScopeGivingCe);
+ if (bShort)
+ {
+ aDescription.Out().Enter( rOut.Produce_Definition() );
+ i_rDocu.Short().DisplayAt( aDescription );
+ aDescription.Out().Leave();
+ }
+ if (bDescr)
+ {
+ aDescription.Out().Enter( rOut.Produce_Definition() );
+ i_rDocu.Description().DisplayAt( aDescription );
+ aDescription.Out().Leave();
+ }
+ }
+
+ std::vector< csi::dsapi::DT_SeeAlsoAtTag* >
+ aSeeAlsosWithoutText;
+ std::vector< csi::dsapi::DT_SeeAlsoAtTag* >
+ aSeeAlsosWithText;
+
+ for ( std::vector< ary::inf::AtTag2* >::const_iterator
+ iter = i_rDocu.Tags().begin();
+ iter != i_rDocu.Tags().end();
+ ++iter )
+ {
+ csi::dsapi::DT_SeeAlsoAtTag*
+ pSeeAlso = dynamic_cast< csi::dsapi::DT_SeeAlsoAtTag * >(*iter);
+ if (pSeeAlso != 0 )
+ {
+ if ( pSeeAlso->Text().IsEmpty() )
+ {
+ aSeeAlsosWithoutText.push_back(pSeeAlso);
+ }
+ else
+ {
+ aSeeAlsosWithText.push_back(pSeeAlso);
+ }
+ continue;
+ }
+
+ if ( strlen( (*iter)->Title() ) > 0 )
+ {
+ HF_IdlTag
+ aTag(Env(), i_rScopeGivingCe);
+ Xml::Element &
+ rTerm = rOut.Produce_Term();
+ aTag.Produce_byData( rTerm,
+ rOut.Produce_Definition(),
+ *(*iter) );
+ }
+ } // end for
+
+ if (aSeeAlsosWithoutText.size() > 0)
+ {
+ HF_IdlTag
+ aSeeAlsoTag(Env(), i_rScopeGivingCe);
+ Xml::Element &
+ rTerm = rOut.Produce_Term();
+ aSeeAlsoTag.Produce_byData( rTerm,
+ rOut.Produce_Definition(),
+ aSeeAlsosWithoutText );
+ }
+
+ for ( std::vector< csi::dsapi::DT_SeeAlsoAtTag* >::const_iterator
+ itSee2 = aSeeAlsosWithText.begin();
+ itSee2 != aSeeAlsosWithText.end();
+ ++itSee2 )
+ {
+ HF_IdlTag
+ aTag(Env(), i_rScopeGivingCe);
+ Xml::Element &
+ rTerm = rOut.Produce_Term();
+ aTag.Produce_byData( rTerm,
+ rOut.Produce_Definition(),
+ *(*itSee2) );
+ } // end for
+}
diff --git a/autodoc/source/display/idl/hfi_doc.hxx b/autodoc/source/display/idl/hfi_doc.hxx
new file mode 100644
index 000000000000..424d01cbc5e2
--- /dev/null
+++ b/autodoc/source/display/idl/hfi_doc.hxx
@@ -0,0 +1,85 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_DISPLAY_HFI_DOC_HXX
+#define ADC_DISPLAY_HFI_DOC_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include "hi_factory.hxx"
+ // COMPONENTS
+ // PARAMETERS
+
+
+class HF_DocEntryList;
+
+
+class HF_IdlDocu : public HtmlFactory_Idl
+{
+ public:
+ HF_IdlDocu(
+ Environment & io_rEnv,
+ HF_DocEntryList & o_rOut );
+ virtual ~HF_IdlDocu();
+
+
+ /** Produces documentation by the CodeInfo accompanying
+ ->i_ce.
+ */
+ void Produce_fromCodeEntity(
+ const client & i_ce ) const;
+
+ /** Produces documentation by the CodeInfo accompanying
+ a link or reference to a CodeEntity.
+
+ @param i_rScopeGivingCe
+ Gives the scope from which links are to be calculated.
+ */
+ void Produce_fromReference(
+ const ce_info & i_rDocuForReference,
+ const client & i_rScopeGivingCe ) const;
+
+ private:
+ // Locals
+ /** Produces documentation.
+
+ @param i_rScopeGivingCe
+ Gives the scope from which links are to be calculated.
+ */
+ void Produce_byDocuAndScope(
+ const ce_info & i_rDocu,
+ const client * i_pClient, /// May be 0.
+ const client & i_rScopeGivingCe ) const;
+
+ // DATA
+ HF_DocEntryList & rOut;
+};
+
+
+#endif
diff --git a/autodoc/source/display/idl/hfi_enum.cxx b/autodoc/source/display/idl/hfi_enum.cxx
new file mode 100644
index 000000000000..6532242ebc3c
--- /dev/null
+++ b/autodoc/source/display/idl/hfi_enum.cxx
@@ -0,0 +1,133 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "hfi_enum.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include <ary/idl/i_ce.hxx>
+#include <ary/idl/ik_enum.hxx>
+#include <toolkit/hf_linachain.hxx>
+#include <toolkit/hf_navi_sub.hxx>
+#include <toolkit/hf_title.hxx>
+#include "hfi_navibar.hxx"
+#include "hfi_property.hxx"
+#include "hi_linkhelper.hxx"
+
+
+extern const String
+ C_sCePrefix_Enum("enum");
+
+namespace
+{
+
+const String
+ C_sList_Values("Values");
+const String
+ C_sList_Values_Label("Values");
+const String
+ C_sList_ValueDetails("Values' Details");
+const String
+ C_sList_ValueDetails_Label("ValueDetails");
+
+enum E_SubListIndices
+{
+ sli_ValuesSummary = 0,
+ sli_ValueDetails = 1
+};
+
+} // anonymous namespace
+
+HF_IdlEnum::HF_IdlEnum( Environment & io_rEnv,
+ Xml::Element & o_rOut )
+ : HtmlFactory_Idl(io_rEnv, &o_rOut)
+{
+}
+
+HF_IdlEnum::~HF_IdlEnum()
+{
+}
+
+void
+HF_IdlEnum::Produce_byData( const client & i_ce ) const
+{
+ Dyn<HF_NaviSubRow>
+ pNaviSubRow( &make_Navibar(i_ce) );
+
+ HF_TitleTable
+ aTitle(CurOut());
+
+ HF_LinkedNameChain
+ aNameChain(aTitle.Add_Row());
+
+ aNameChain.Produce_CompleteChain(Env().CurPosition(), nameChainLinker);
+ produce_Title(aTitle, C_sCePrefix_Enum, i_ce);
+
+ write_Docu(aTitle.Add_Row(), i_ce);
+ CurOut() << new Html::HorizontalLine();
+
+ dyn_ce_list
+ dpValues;
+ ary::idl::ifc_enum::attr::Get_Values(dpValues, i_ce);
+ if ( (*dpValues).operator bool() )
+ {
+ produce_Members( *dpValues,
+ C_sList_Values,
+ C_sList_Values_Label,
+ C_sList_ValueDetails,
+ C_sList_ValueDetails_Label );
+ pNaviSubRow->SwitchOn(sli_ValuesSummary);
+ pNaviSubRow->SwitchOn(sli_ValueDetails);
+ }
+ pNaviSubRow->Produce_Row();
+}
+
+HF_NaviSubRow &
+HF_IdlEnum::make_Navibar( const client & i_ce ) const
+{
+ HF_IdlNavigationBar
+ aNaviBar(Env(), CurOut());
+ aNaviBar.Produce_CeMainRow(i_ce);
+
+ DYN HF_NaviSubRow &
+ ret = aNaviBar.Add_SubRow();
+ ret.AddItem(C_sList_Values, C_sList_Values_Label, false);
+ ret.AddItem(C_sList_ValueDetails, C_sList_ValueDetails_Label, false);
+
+ CurOut() << new Html::HorizontalLine();
+ return ret;
+}
+
+void
+HF_IdlEnum::produce_MemberDetails( HF_SubTitleTable & o_table,
+ const client & i_ce) const
+{
+ HF_IdlEnumValue
+ aElement( Env(), o_table );
+ aElement.Produce_byData(i_ce);
+}
diff --git a/autodoc/source/display/idl/hfi_enum.hxx b/autodoc/source/display/idl/hfi_enum.hxx
new file mode 100644
index 000000000000..e04827374a9e
--- /dev/null
+++ b/autodoc/source/display/idl/hfi_enum.hxx
@@ -0,0 +1,68 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_DISPLAY_HFI_ENUM_HXX
+#define ADC_DISPLAY_HFI_ENUM_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include "hi_factory.hxx"
+ // COMPONENTS
+ // PARAMETERS
+
+
+class HF_IdlEnum : public HtmlFactory_Idl
+{
+ public:
+ HF_IdlEnum(
+ Environment & io_rEnv,
+ Xml::Element & o_rOut );
+ virtual ~HF_IdlEnum();
+
+ void Produce_byData(
+ const client & ce ) const;
+ private:
+ HF_NaviSubRow & make_Navibar(
+ const client & ce ) const;
+ virtual void produce_MemberDetails(
+ HF_SubTitleTable & o_table,
+ const client & ce ) const;
+};
+
+
+
+// IMPLEMENTATION
+
+
+extern const String
+ C_sCePrefix_Enum;
+
+#endif
+
+
diff --git a/autodoc/source/display/idl/hfi_globalindex.cxx b/autodoc/source/display/idl/hfi_globalindex.cxx
new file mode 100644
index 000000000000..0e974d61fa42
--- /dev/null
+++ b/autodoc/source/display/idl/hfi_globalindex.cxx
@@ -0,0 +1,275 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "hfi_globalindex.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include <cosv/tpl/tpltools.hxx>
+#include <ary/idl/i_ce.hxx>
+#include <ary/idl/i_types4idl.hxx>
+#include <ary/idl/i_module.hxx>
+#include <toolkit/hf_title.hxx>
+#include "hfi_navibar.hxx"
+#include "hfi_typetext.hxx"
+#include "hi_linkhelper.hxx"
+
+
+
+
+namespace
+{
+
+/**
+*/
+enum E_Types
+{
+ t_service = 0,
+ t_interface = 1,
+ t_struct = 2,
+ t_exception = 3,
+ t_enum = 4,
+ t_typedef = 5,
+ t_constantsgroup = 6,
+ t_property = 7,
+ t_function = 8,
+ t_structelement = 9,
+ t_enumvalue = 10,
+ t_constant = 11,
+ t_module = 12,
+ t_singleton = 13,
+ t_attribute = 14,
+ t_siservice = 15,
+ t_sisingleton = 16,
+ t_MAX
+};
+
+String G_sDummy;
+
+
+/* RC-Ids for IDL types (see reposy.cxx):
+
+ Module 2000
+ Interface 2001
+ Function 2002
+ Service 2003
+ Property 2004
+
+ Enum 2005
+ EnumValue 2006
+ Typedef 2007
+ Struct 2008
+ StructElement 2009
+
+ Exception 2010
+ ConstantGroup 2011
+ Constant 2012
+ Singleton 2013
+ Attribute 2014
+ SglIfcService 2015
+ SglIfcSingleton 2016
+*/
+const int C_nNumberOfIdlTypes = 17;
+const char * C_sTypeNames[C_nNumberOfIdlTypes] =
+ { "module ", "interface ", "function ", "service ", "property ",
+ "enum ", "value ", "typedef ", "struct ", "field ",
+ "exception ", "constants group ", "constant ","singleton ", "attribute ",
+ "service", "singleton"
+ };
+const char * C_sOwnerNames[C_nNumberOfIdlTypes] =
+ { "module ", "module ", "interface ", "module ", "service ",
+ "module ", "enum ", "module ", "module ", "", // could be struct or exception
+ "module ", "module ", "constants group ", "module ", "interface ",
+ "module", "module"
+ };
+const intt C_nNamesArrayOffset = intt(ary::idl::Module::class_id);
+const int C_nIxField = 9;
+
+
+
+
+const char C_cAlphabet[] =
+"<a class=\"inverse\" href=\"index-1.html\"><B>A</B></a> <a class=\"inverse\" href=\"index-2.html\"><B>B</B></a> <a class=\"inverse\" href=\"index-3.html\"><B>C</B></a> <a class=\"inverse\" href=\"index-4.html\"><B>D</B></a> <a class=\"inverse\" href=\"index-5.html\"><B>E</B></a> "
+"<a class=\"inverse\" href=\"index-6.html\"><B>F</B></a> <a class=\"inverse\" href=\"index-7.html\"><B>G</B></a> <a class=\"inverse\" href=\"index-8.html\"><B>H</B></a> <a class=\"inverse\" href=\"index-9.html\"><B>I</B></a> <a class=\"inverse\" href=\"index-10.html\"><B>J</B></a> "
+"<a class=\"inverse\" href=\"index-11.html\"><B>K</B></a> <a class=\"inverse\" href=\"index-12.html\"><B>L</B></a> <a class=\"inverse\" href=\"index-13.html\"><B>M</B></a> <a class=\"inverse\" href=\"index-14.html\"><B>N</B></a> <a class=\"inverse\" href=\"index-15.html\"><B>O</B></a> "
+"<a class=\"inverse\" href=\"index-16.html\"><B>P</B></a> <a class=\"inverse\" href=\"index-17.html\"><B>Q</B></a> <a class=\"inverse\" href=\"index-18.html\"><B>R</B></a> <a class=\"inverse\" href=\"index-19.html\"><B>S</B></a> <a class=\"inverse\" href=\"index-20.html\"><B>T</B></a> "
+"<a class=\"inverse\" href=\"index-21.html\"><B>U</B></a> <a class=\"inverse\" href=\"index-22.html\"><B>V</B></a> <a class=\"inverse\" href=\"index-23.html\"><B>W</B></a> <a class=\"inverse\" href=\"index-24.html\"><B>X</B></a> <a class=\"inverse\" href=\"index-25.html\"><B>Y</B></a> "
+"<a class=\"inverse\" href=\"index-26.html\"><B>Z</B></a>";
+
+
+
+HF_IdlGlobalIndex::PageData G_PageData;
+
+} // end anonymous namespace
+
+
+inline void
+HF_IdlGlobalIndex::write_EntryItself( Xml::Element & o_destination,
+ const ary::idl::CodeEntity & i_ce,
+ const HF_IdlTypeText & i_typeLinkWriter ) const
+{
+ i_typeLinkWriter.Produce_IndexLink(o_destination, i_ce);
+ o_destination << " - ";
+}
+
+
+HF_IdlGlobalIndex::HF_IdlGlobalIndex( Environment & io_rEnv,
+ Xml::Element & o_rOut )
+ : HtmlFactory_Idl(io_rEnv, &o_rOut)
+{
+}
+
+HF_IdlGlobalIndex::~HF_IdlGlobalIndex()
+{
+}
+
+void
+HF_IdlGlobalIndex::Produce_Page(ary::idl::alphabetical_index::E_Letter i_letter) const
+{
+ make_Navibar();
+
+ HF_TitleTable
+ aTitle(CurOut());
+ StreamLock sl(100);
+ aTitle.Produce_Title( sl()
+ << "Global Index "
+ << ( i_letter != ary::idl::alphabetical_index::non_alpha
+ ? char(int(i_letter)-'a'+'A')
+ : '_' )
+ << c_str );
+
+ // Letters Index
+ aTitle.Add_Row()
+ << new Xml::XmlCode(
+ "<p align=\"center\"><a href=\"index-1.html\"><b>A</b></a> <a href=\"index-2.html\"><b>B</b></a> <a href=\"index-3.html\"><b>C</b></a> <a href=\"index-4.html\"><b>D</b></a> <a href=\"index-5.html\"><b>E</b></a> <a href=\"index-6.html\"><b>F</b></a> <a href=\"index-7.html\"><b>G</b></a> <a href=\"index-8.html\"><b>H</b></a> <a href=\"index-9.html\"><b>I</b></a> <a href=\"index-10.html\"><b>J</b></a>"
+ " <a href=\"index-11.html\"><b>K</b></a> <a href=\"index-12.html\"><b>L</b></a> <a href=\"index-13.html\"><b>M</b></a> <a href=\"index-14.html\"><b>N</b></a> <a href=\"index-15.html\"><b>O</b></a> <a href=\"index-16.html\"><b>P</b></a> <a href=\"index-17.html\"><b>Q</b></a> <a href=\"index-18.html\"><b>R</b></a> <a href=\"index-19.html\"><b>S</b></a> <a href=\"index-20.html\"><b>T</b></a>"
+ " <a href=\"index-21.html\"><b>U</b></a> <a href=\"index-22.html\"><b>V</b></a> <a href=\"index-23.html\"><b>W</b></a> <a href=\"index-24.html\"><b>X</b></a> <a href=\"index-25.html\"><b>Y</b></a> <a href=\"index-26.html\"><b>Z</b></a> <a href=\"index-27.html\"><b>_</b></a></p>" );
+
+ Out().Enter(CurOut() >> *new Html::DefList);
+
+ csv::erase_container(G_PageData);
+ Env().Data().Get_IndexData(G_PageData, i_letter);
+
+ // Helper object to produce links to the index Entries.
+ HF_IdlTypeText aTypeLinkWriter(Env(),HF_IdlTypeText::use_for_javacompatible_index);
+
+ PageData::const_iterator itEnd = G_PageData.end();
+ for ( PageData::const_iterator iter = G_PageData.begin();
+ iter != itEnd;
+ ++iter )
+ {
+ produce_Line(iter, aTypeLinkWriter);
+ } // end for
+
+ Out().Leave();
+ CurOut() << new Html::HorizontalLine;
+}
+
+void
+HF_IdlGlobalIndex::make_Navibar() const
+{
+ HF_IdlNavigationBar
+ aNaviBar(Env(), CurOut());
+ aNaviBar.Produce_IndexMainRow();
+
+ CurOut() << new Html::HorizontalLine();
+}
+
+void
+HF_IdlGlobalIndex::produce_Line( PageData::const_iterator i_entry,
+ const HF_IdlTypeText & i_typeLinkWriter) const
+{
+ const client &
+ rCe = Env().Data().Find_Ce(*i_entry);
+ if (NOT rCe.Owner().IsValid())
+ return; // Omit global namespace.
+
+ // The destination for the created output:
+ Xml::Element & rDT = CurOut() >> *new Html::DefListTerm;
+
+ /** The following code is intended to produce an output that
+ will be recognized by the context help system of Forte.
+ That is reached by making it similar to the indices, that
+ Javadoc produces.
+ If the link to the Entry contains a hashmark, the Forte-Help
+ requires following a link to the owner.
+ But if there is no hashmark, the following link must go to
+ the same Entry again. Doesn't make really sense :-(, but that's
+ like it is.
+ */
+ write_EntryItself(rDT,rCe,i_typeLinkWriter);
+ if (rCe.SightLevel() == ary::idl::sl_Member)
+ write_OwnerOfEntry(rDT,rCe,i_typeLinkWriter);
+ else
+ write_EntrySecondTime(rDT,rCe,i_typeLinkWriter);
+
+ // This produces an empty "<dd></dd>", which is also needed to reach
+ // similarity to the Javadoc index:
+ CurOut() << new Html::DefListDefinition;
+}
+
+void
+HF_IdlGlobalIndex::write_OwnerOfEntry( Xml::Element & o_destination,
+ const ary::idl::CodeEntity & i_ce,
+ const HF_IdlTypeText & i_typeLinkWriter ) const
+{
+ const client &
+ rOwner = Env().Data().Find_Ce(i_ce.Owner());
+
+ int nIx = int(i_ce.AryClass() - C_nNamesArrayOffset);
+ csv_assert(csv::in_range(0,nIx,C_nNumberOfIdlTypes));
+
+ o_destination << C_sTypeNames[nIx]
+ << "in ";
+ if (nIx != C_nIxField)
+ {
+ o_destination << C_sOwnerNames[nIx];
+ }
+ else
+ {
+ uintt
+ nOwnerIx = rOwner.AryClass() - C_nNamesArrayOffset;
+ csv_assert(
+ nOwnerIx < static_cast< unsigned int >(C_nNumberOfIdlTypes));
+ o_destination << C_sTypeNames[nOwnerIx];
+ }
+ i_typeLinkWriter.Produce_IndexOwnerLink(o_destination, rOwner);
+}
+
+void
+HF_IdlGlobalIndex::write_EntrySecondTime( Xml::Element & o_destination,
+ const ary::idl::CodeEntity & i_ce,
+ const HF_IdlTypeText & i_typeLinkWriter ) const
+{
+ int nIx = int(i_ce.AryClass() - C_nNamesArrayOffset);
+ csv_assert(csv::in_range(0,nIx,C_nNumberOfIdlTypes));
+
+ o_destination << C_sTypeNames[nIx]
+ << " ";
+ i_typeLinkWriter.Produce_IndexSecondEntryLink(o_destination, i_ce);
+}
diff --git a/autodoc/source/display/idl/hfi_globalindex.hxx b/autodoc/source/display/idl/hfi_globalindex.hxx
new file mode 100644
index 000000000000..45e953baaed5
--- /dev/null
+++ b/autodoc/source/display/idl/hfi_globalindex.hxx
@@ -0,0 +1,89 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_DISPLAY_HFI_GLOBALINDEX_HXX
+#define ADC_DISPLAY_HFI_GLOBALINDEX_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include "hi_factory.hxx"
+ // COMPONENTS
+ // PARAMETERS
+#include <ary/idl/i_gate.hxx>
+
+
+class HF_IdlTypeText;
+
+class HF_IdlGlobalIndex : public HtmlFactory_Idl
+{
+ public:
+ typedef std::vector<ary::idl::Ce_id> PageData;
+
+ HF_IdlGlobalIndex(
+ Environment & io_rEnv,
+ Xml::Element & o_rOut );
+ virtual ~HF_IdlGlobalIndex();
+
+ void Produce_Page(
+ ary::idl::alphabetical_index::E_Letter
+ i_letter ) const;
+ private:
+ void make_Navibar() const; /// Called by @->Produce_Page()
+ void produce_Line( /// Called by @->Produce_Page()
+ PageData::const_iterator
+ i_entry,
+ const HF_IdlTypeText &
+ i_typeLinkWriter ) const;
+
+ void write_EntryItself( /// Called by @->produceLine()
+ Xml::Element & o_destination,
+ const ary::idl::CodeEntity &
+ i_entry,
+ const HF_IdlTypeText &
+ i_typeLinkWriter ) const;
+
+ void write_OwnerOfEntry( /// Called by @->produceLine()
+ Xml::Element & o_destination,
+ const ary::idl::CodeEntity &
+ i_entry,
+ const HF_IdlTypeText &
+ i_typeLinkWriter ) const;
+
+ void write_EntrySecondTime( /// Called by @->produceLine()
+ Xml::Element & o_destination,
+ const ary::idl::CodeEntity &
+ i_entry,
+ const HF_IdlTypeText &
+ i_typeLinkWriter ) const;
+};
+
+
+
+#endif
+
diff --git a/autodoc/source/display/idl/hfi_hierarchy.cxx b/autodoc/source/display/idl/hfi_hierarchy.cxx
new file mode 100644
index 000000000000..d4db7f9028f1
--- /dev/null
+++ b/autodoc/source/display/idl/hfi_hierarchy.cxx
@@ -0,0 +1,202 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "hfi_hierarchy.hxx"
+
+
+// NOT FULLY DECLARED SERVICES
+#include <udm/html/htmlitem.hxx>
+#include <ary/stdconstiter.hxx>
+#include <ary/idl/i_ce.hxx>
+#include <ary/idl/i_gate.hxx>
+#include <ary/idl/i_type.hxx>
+#include <ary/idl/ik_interface.hxx>
+#include <ary/idl/ip_ce.hxx>
+#include <ary/idl/ip_type.hxx>
+#include "hfi_interface.hxx"
+#include "hfi_typetext.hxx"
+#include "hi_env.hxx"
+
+
+
+HF_IdlBaseNode::HF_IdlBaseNode( const TYPE & i_rType,
+ const GATE & i_rGate,
+ intt i_nPositionOffset,
+ HF_IdlBaseNode & io_rDerived )
+ : nType(i_rType.TypeId()),
+ aBases(),
+ nCountBases(0),
+ nPosition(i_nPositionOffset),
+ pDerived(&io_rDerived)
+{
+ Ce_id nCe = i_rGate.Types().Search_CeRelatedTo(nType);
+ if (nCe.IsValid())
+ {
+ GatherBases(i_rGate.Ces().Find_Ce(nCe), i_rGate);
+ }
+}
+
+HF_IdlBaseNode::~HF_IdlBaseNode()
+{
+}
+
+void
+HF_IdlBaseNode::FillPositionList( std::vector< const HF_IdlBaseNode* > & o_rPositionList ) const
+{
+ for ( BaseList::const_iterator it = aBases.begin();
+ it != aBases.end();
+ ++it )
+ {
+ (*it)->FillPositionList(o_rPositionList);
+ } // end for
+
+ o_rPositionList.push_back(this);
+}
+
+void
+HF_IdlBaseNode::GatherBases( const CE & i_rCe,
+ const GATE & i_rGate )
+{
+ ary::Dyn_StdConstIterator<ary::idl::CommentedRelation>
+ aHelp;
+ ary::idl::ifc_interface::attr::Get_Bases(aHelp,i_rCe);
+
+ for ( ary::StdConstIterator<ary::idl::CommentedRelation> & it = *aHelp;
+ it.operator bool();
+ ++it )
+ {
+ const TYPE &
+ rBaseType = i_rGate.Types().Find_Type((*it).Type());
+
+ Dyn<HF_IdlBaseNode>
+ pBaseNode( new HF_IdlBaseNode( rBaseType,
+ i_rGate,
+ nPosition,
+ *this )
+ );
+
+ intt nAddedBases = pBaseNode->BaseCount() + 1;
+ nCountBases += nAddedBases;
+ nPosition += nAddedBases;
+ aBases.push_back( pBaseNode.Release() );
+ } // end for
+}
+
+
+void
+Write_BaseHierarchy( csi::xml::Element & o_rOut,
+ HtmlEnvironment_Idl & i_env,
+ const ary::idl::CodeEntity & i_ce )
+{
+ csi::xml::Element &
+ rPre = o_rOut
+ >> *new csi::xml::AnElement("pre")
+ << new csi::html::StyleAttr("font-family:monospace;");
+
+ std::vector<uintt>
+ aSetColumns;
+ rPre
+ >> *new csi::html::Strong
+ << i_ce.LocalName();
+ rPre
+ << "\n";
+ Write_Bases( rPre,
+ i_env,
+ i_ce,
+ aSetColumns );
+ rPre
+ << "\n";
+
+}
+
+
+void
+Write_Bases( csi::xml::Element & o_out,
+ HtmlEnvironment_Idl & i_env,
+ const ary::idl::CodeEntity & i_rCe,
+ std::vector<uintt> & io_setColumns )
+{
+ ary::Dyn_StdConstIterator<ary::idl::CommentedRelation>
+ aHelp;
+ ary::idl::ifc_interface::attr::Get_Bases(aHelp,i_rCe);
+
+ for ( ary::StdConstIterator<ary::idl::CommentedRelation> & it = *aHelp;
+ it.operator bool();
+ // NO INCREMENT HERE, see below
+ )
+ {
+ ary::idl::Type_id
+ nType = (*it).Type();
+ ++it;
+ bool
+ bThereComesMore = it.operator bool();
+
+ ary::idl::Ce_id
+ nCe = i_env.Gate().Types().Search_CeRelatedTo(nType);
+ if (nCe.IsValid())
+ {
+ // KORR_FUTURE
+ // Rather check for id(!) of com::sun::star::uno::XInterface.
+ if (i_env.Gate().Ces().Find_Ce(nCe).LocalName() == "XInterface")
+ continue;
+ }
+
+ for (uintt i = 0; i < io_setColumns.size(); ++i)
+ {
+ if (io_setColumns[i] == 1)
+ o_out << new csi::xml::XmlCode("&#x2503");
+ else
+ o_out << " ";
+ o_out << " ";
+ }
+
+ if (bThereComesMore)
+ o_out << new csi::xml::XmlCode("&#x2523");
+ else
+ o_out << new csi::xml::XmlCode("&#x2517");
+ o_out << " ";
+
+ HF_IdlTypeText
+ aDisplay( i_env, o_out, true, i_env.CurPageCe());
+ aDisplay.Produce_byData(nType);
+ o_out << "\n";
+
+ if (nCe.IsValid())
+ {
+ io_setColumns.push_back(bThereComesMore ? 1 : 0);
+
+ const ary::idl::CodeEntity &
+ rCe = i_env.Gate().Ces().Find_Ce(nCe);
+ Write_Bases( o_out,
+ i_env,
+ rCe,
+ io_setColumns );
+ io_setColumns.pop_back();
+ }
+ } // end for
+}
diff --git a/autodoc/source/display/idl/hfi_hierarchy.hxx b/autodoc/source/display/idl/hfi_hierarchy.hxx
new file mode 100644
index 000000000000..e918a3345821
--- /dev/null
+++ b/autodoc/source/display/idl/hfi_hierarchy.hxx
@@ -0,0 +1,124 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_DISPLAY_HFI_HIERARCHY_HXX
+#define ADC_DISPLAY_HFI_HIERARCHY_HXX
+
+// USED SERVICES
+ // BASE CLASSES
+ // COMPONENTS
+ // PARAMETERS
+#include <ary/idl/i_comrela.hxx>
+#include <ary/idl/i_types4idl.hxx>
+
+
+namespace csi
+{
+namespace xml
+{
+ class Element;
+}
+}
+
+
+class HF_IdlInterface;
+class HtmlEnvironment_Idl;
+
+
+
+/** Represents a node in an pyramidic inheritance hierarchy which shall be
+ displayed in text mode.
+*/
+class HF_IdlBaseNode
+{
+ public:
+ typedef ary::idl::CodeEntity CE;
+ typedef ary::idl::Type TYPE;
+ typedef ary::idl::Gate GATE;
+ typedef ary::idl::Ce_id Ce_id;
+ typedef ary::idl::Type_id Type_id;
+
+ /** @descr
+ The constructor recursively calls further constructors of
+ HF_IdlBaseNode for the bases of ->i_rType, if ->i_rType matches to a
+ ->CE.
+ So it builds up a complete hierarchy tree of all base classes
+ of ->i_pEntity.
+ */
+ HF_IdlBaseNode(
+ const TYPE & i_rType,
+ const GATE & i_rGate,
+ intt i_nPositionOffset,
+ HF_IdlBaseNode & io_rDerived );
+ ~HF_IdlBaseNode();
+
+ /** Recursively fills ->o_rPositionList with the instances of base
+ classes in the order in which they will be displayed.
+ */
+ void FillPositionList(
+ std::vector< const HF_IdlBaseNode* > &
+ o_rPositionList ) const;
+
+ Type_id Type() const { return nType; }
+ intt BaseCount() const { return nCountBases; }
+ intt Position() const { return nPosition; }
+ int Xpos() const { return 3*Position(); }
+ int Ypos() const { return 2*Position(); }
+ const HF_IdlBaseNode * Derived() const { return pDerived; }
+
+ private:
+ typedef std::vector< DYN HF_IdlBaseNode* > BaseList;
+
+ void GatherBases(
+ const CE & i_rCe,
+ const GATE & i_rGate );
+
+ // DATA
+ Type_id nType;
+ BaseList aBases;
+ intt nCountBases;
+ intt nPosition;
+ HF_IdlBaseNode * pDerived;
+};
+
+void Write_BaseHierarchy(
+ csi::xml::Element & o_rOut,
+ HtmlEnvironment_Idl &
+ i_env,
+ const ary::idl::CodeEntity &
+ i_rCe );
+
+void Write_Bases(
+ csi::xml::Element & o_rOut,
+ HtmlEnvironment_Idl &
+ i_env,
+ const ary::idl::CodeEntity &
+ i_rCe,
+ std::vector<uintt> &
+ io_setColumns );
+
+#endif
diff --git a/autodoc/source/display/idl/hfi_interface.cxx b/autodoc/source/display/idl/hfi_interface.cxx
new file mode 100644
index 000000000000..8e7a637f12c8
--- /dev/null
+++ b/autodoc/source/display/idl/hfi_interface.cxx
@@ -0,0 +1,357 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "hfi_interface.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include <ary/idl/i_ce.hxx>
+#include <ary/idl/i_gate.hxx>
+#include <ary/idl/ik_function.hxx>
+#include <ary/idl/ik_interface.hxx>
+#include <ary/idl/ip_ce.hxx>
+#include <ary/idl/ip_type.hxx>
+#include <toolkit/hf_docentry.hxx>
+#include <toolkit/hf_linachain.hxx>
+#include <toolkit/hf_navi_sub.hxx>
+#include <toolkit/hf_title.hxx>
+#include "hfi_doc.hxx"
+#include "hfi_hierarchy.hxx"
+#include "hfi_method.hxx"
+#include "hfi_navibar.hxx"
+#include "hfi_property.hxx"
+#include "hfi_tag.hxx"
+#include "hfi_typetext.hxx"
+#include "hi_linkhelper.hxx"
+
+
+extern const String
+ C_sCePrefix_Interface("interface");
+
+namespace
+{
+
+const String
+ C_sBaseInterface("Base Interfaces");
+const String
+ C_sList_BaseComments("Comments on Base Interfaces");
+const String
+ C_sList_Methods("Methods' Summary");
+const String
+ C_sList_Methods_Label("MethodsSummary");
+const String
+ C_sDetails_Methods("Methods' Details");
+const String
+ C_sDetails_Methods_Label("MethodsDetails");
+
+const String
+ C_sList_Attributes("Attributes' Summary");
+const String
+ C_sList_Attributes_Label("AttributesSummary");
+const String
+ C_sList_AttributesDetails("Attributes' Details");
+const String
+ C_sList_AttributesDetails_Label("AttributesDetails");
+
+
+
+enum E_SubListIndices
+{
+ sli_MethodsSummay = 0,
+ sli_AttributesSummary = 1,
+ sli_MethodDetails = 2,
+ sli_AttributesDetails = 3
+};
+
+} //anonymous namespace
+
+
+
+
+HF_IdlInterface::HF_IdlInterface( Environment & io_rEnv,
+ Xml::Element & o_rOut )
+ : HtmlFactory_Idl(io_rEnv, &o_rOut),
+ eCurProducedMembers(mem_none)
+{
+}
+
+HF_IdlInterface::~HF_IdlInterface()
+{
+}
+
+void
+HF_IdlInterface::Produce_byData( const client & i_ce ) const
+{
+ Dyn<HF_NaviSubRow>
+ pNaviSubRow( &make_Navibar(i_ce) );
+
+ HF_TitleTable
+ aTitle(CurOut());
+
+ HF_LinkedNameChain
+ aNameChain(aTitle.Add_Row());
+ aNameChain.Produce_CompleteChain(Env().CurPosition(), nameChainLinker);
+
+ produce_Title(aTitle, C_sCePrefix_Interface, i_ce);
+
+ produce_BaseHierarchy( aTitle.Add_Row(),
+ i_ce,
+ C_sBaseInterface );
+
+ write_Docu(aTitle.Add_Row(), i_ce);
+ CurOut() << new Html::HorizontalLine();
+
+ dyn_ce_list dpFunctions;
+ ary::idl::ifc_interface::attr::Get_Functions(dpFunctions, i_ce);
+ if ( (*dpFunctions).operator bool() )
+ {
+ eCurProducedMembers = mem_Functions;
+
+ produce_Members( *dpFunctions,
+ C_sList_Methods,
+ C_sList_Methods_Label,
+ C_sDetails_Methods,
+ C_sDetails_Methods_Label,
+ HtmlFactory_Idl::viewtype_summary );
+ pNaviSubRow->SwitchOn(sli_MethodsSummay);
+ }
+
+ dyn_ce_list
+ dpAttributes;
+ ary::idl::ifc_interface::attr::Get_Attributes(dpAttributes, i_ce);
+ if ( (*dpAttributes).operator bool() )
+ {
+ eCurProducedMembers = mem_Attributes;
+
+ produce_Members( *dpAttributes,
+ C_sList_Attributes,
+ C_sList_Attributes_Label,
+ C_sList_AttributesDetails,
+ C_sList_AttributesDetails_Label,
+ HtmlFactory_Idl::viewtype_summary );
+ pNaviSubRow->SwitchOn(sli_AttributesSummary);
+ }
+
+ ary::idl::ifc_interface::attr::Get_Functions(dpFunctions, i_ce);
+ if ( (*dpFunctions).operator bool() )
+ {
+ eCurProducedMembers = mem_Functions;
+
+ produce_Members( *dpFunctions,
+ C_sList_Methods,
+ C_sList_Methods_Label,
+ C_sDetails_Methods,
+ C_sDetails_Methods_Label,
+ HtmlFactory_Idl::viewtype_details );
+ pNaviSubRow->SwitchOn(sli_MethodDetails);
+ }
+
+ ary::idl::ifc_interface::attr::Get_Attributes(dpAttributes, i_ce);
+ if ( (*dpAttributes).operator bool() )
+ {
+ eCurProducedMembers = mem_Attributes;
+
+ produce_Members( *dpAttributes,
+ C_sList_Attributes,
+ C_sList_Attributes_Label,
+ C_sList_AttributesDetails,
+ C_sList_AttributesDetails_Label,
+ HtmlFactory_Idl::viewtype_details );
+ pNaviSubRow->SwitchOn(sli_AttributesDetails);
+ }
+
+ eCurProducedMembers = mem_none;
+
+ pNaviSubRow->Produce_Row();
+}
+
+DYN HF_NaviSubRow &
+HF_IdlInterface::make_Navibar( const client & i_ce ) const
+{
+ HF_IdlNavigationBar
+ aNaviBar(Env(), CurOut());
+ aNaviBar.Produce_CeMainRow(i_ce);
+
+ DYN HF_NaviSubRow &
+ ret = aNaviBar.Add_SubRow();
+ ret.AddItem(C_sList_Methods, C_sList_Methods_Label, false);
+ ret.AddItem(C_sList_Attributes, C_sList_Attributes_Label, false);
+ ret.AddItem(C_sDetails_Methods, C_sDetails_Methods_Label, false);
+ ret.AddItem(C_sList_AttributesDetails, C_sList_AttributesDetails_Label, false);
+
+ CurOut() << new Html::HorizontalLine();
+ return ret;
+}
+
+void
+HF_IdlInterface::produce_MemberDetails( HF_SubTitleTable & o_table,
+ const client & i_ce ) const
+{
+ switch (eCurProducedMembers)
+ {
+ case mem_Functions:
+ break;
+ case mem_Attributes:
+ {
+ HF_IdlAttribute
+ aAttribute( Env(), o_table);
+ aAttribute.Produce_byData( i_ce );
+ return;
+ };
+ default: //Won't happen.
+ return;
+ } // end switch
+
+ typedef ary::idl::ifc_function::attr funcAttr;
+
+ HF_IdlMethod
+ aFunction( Env(),
+ o_table.Add_Row()
+ >> *new Html::TableCell
+ << new Html::ClassAttr(C_sCellStyle_MDetail) );
+
+ ary::Dyn_StdConstIterator<ary::idl::Parameter>
+ pParameters;
+ funcAttr::Get_Parameters(pParameters, i_ce);
+
+ ary::Dyn_StdConstIterator<ary::idl::Type_id>
+ pExceptions;
+ funcAttr::Get_Exceptions(pExceptions, i_ce);
+
+ aFunction.Produce_byData( i_ce.LocalName(),
+ funcAttr::ReturnType(i_ce),
+ *pParameters,
+ *pExceptions,
+ funcAttr::IsOneway(i_ce),
+ funcAttr::HasEllipse(i_ce),
+ i_ce );
+}
+
+void
+HF_IdlInterface::produce_BaseHierarchy( Xml::Element & o_screen,
+ const client & i_ce,
+ const String & i_sLabel ) const
+{
+ ary::Dyn_StdConstIterator<ary::idl::CommentedRelation>
+ pHelp;
+ ary::idl::ifc_interface::attr::Get_Bases(pHelp, i_ce);
+ if (NOT (*pHelp).operator bool())
+ return;
+
+ // Check for XInterface as only base:
+ ary::StdConstIterator<ary::idl::CommentedRelation> &
+ itTest = *pHelp;
+ ary::idl::Ce_id
+ nCe = Env().Gate().Types().Search_CeRelatedTo((*itTest).Type());
+ if (nCe.IsValid())
+ {
+ // KORR_FUTURE
+ // Rather check for id(!) of com::sun::star::uno::XInterface.
+ if (Env().Gate().Ces().Find_Ce(nCe).LocalName() == "XInterface")
+ {
+ ++itTest;
+ if (NOT itTest.operator bool())
+ return;
+ }
+ }
+
+ // Write hierarchy:
+
+ HF_DocEntryList
+ aDocList( o_screen );
+ aDocList.Produce_Term(i_sLabel);
+ Xml::Element &
+ rBaseList = aDocList.Produce_Definition();
+
+// NEW
+ Write_BaseHierarchy(rBaseList, Env(), i_ce);
+
+ // Write comments:
+ // KORR_FUTURE: Make sure, no empty table is constructed when comments list is empty.
+ HF_SubTitleTable
+ aBaseTable( aDocList.Produce_Definition(),
+ "",
+ C_sList_BaseComments,
+ 2,
+ HF_SubTitleTable::sublevel_3 );
+
+ ary::Dyn_StdConstIterator<ary::idl::CommentedRelation>
+ pBases;
+ ary::idl::ifc_interface::attr::Get_Bases(pBases, i_ce);
+ for ( ary::StdConstIterator<ary::idl::CommentedRelation> & it = *pBases;
+ it.operator bool();
+ ++it )
+ {
+ Xml::Element &
+ rRow = aBaseTable.Add_Row();
+
+ Xml::Element &
+ rTerm = rRow
+ >> *new Html::TableCell
+ << new Html::ClassAttr(C_sCellStyle_SummaryLeft);
+ HF_IdlTypeText
+ aTypeDisplay( Env(), rTerm, false, 0);
+ aTypeDisplay.Produce_byData((*it).Type());
+
+ Xml::Element &
+ rDocu = rRow
+ >> *new Html::TableCell
+ << new Html::ClassAttr(C_sCellStyle_SummaryRight);
+
+ HF_DocEntryList
+ aDocuList(rDocu);
+
+ if ((*it).Info() != 0)
+ {
+// aDocuList.Produce_Term("Comment on Base Reference");
+
+ HF_IdlDocu
+ aDocuDisplay(Env(), aDocuList);
+ aDocuDisplay.Produce_fromReference(*(*it).Info(), i_ce);
+ }
+ else
+ {
+ const client *
+ pCe = Env().Linker().Search_CeFromType((*it).Type());
+ const ce_info *
+ pShort = pCe != 0
+ ? Get_IdlDocu(pCe->Docu())
+ : (const ce_info *)(0);
+ if ( pShort != 0 )
+ {
+ aDocuList.Produce_NormalTerm("(referenced interface's summary:)");
+
+ Xml::Element &
+ rDef = aDocuList.Produce_Definition();
+ HF_IdlDocuTextDisplay
+ aShortDisplay( Env(), &rDef, *pCe);
+ pShort->Short().DisplayAt(aShortDisplay);
+ } // end if (pShort != 0)
+ } // endif ( (*i_commentedRef).Info() != 0 ) else
+ } // end for
+}
diff --git a/autodoc/source/display/idl/hfi_interface.hxx b/autodoc/source/display/idl/hfi_interface.hxx
new file mode 100644
index 000000000000..9f2c77c64a97
--- /dev/null
+++ b/autodoc/source/display/idl/hfi_interface.hxx
@@ -0,0 +1,90 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_DISPLAY_HFI_INTERFACE_HXX
+#define ADC_DISPLAY_HFI_INTERFACE_HXX
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include "hi_factory.hxx"
+ // COMPONENTS
+ // PARAMETERS
+#include <ary/idl/i_types4idl.hxx>
+#include <ary/doc/d_oldidldocu.hxx>
+
+
+class HF_NaviSubRow;
+class HF_SubTitleTable;
+class HF_IdlBaseNode;
+
+class HF_IdlInterface : public HtmlFactory_Idl
+{
+ public:
+ HF_IdlInterface(
+ Environment & io_rEnv,
+ Xml::Element & o_rOut );
+ virtual ~HF_IdlInterface();
+
+ void Produce_byData(
+ const client & i_ce ) const;
+ private:
+ // Locals
+ DYN HF_NaviSubRow & make_Navibar(
+ const client & i_ce ) const;
+
+ virtual void produce_MemberDetails(
+ HF_SubTitleTable & o_table,
+ const client & ce ) const;
+ void produce_BaseHierarchy(
+ Xml::Element & o_screen,
+ const client & i_ce,
+ const String & i_sLabel ) const;
+
+ // Locals
+ enum E_CurProducedMembers
+ {
+ mem_none,
+ mem_Functions,
+ mem_Attributes
+ };
+
+ // DATA
+ mutable E_CurProducedMembers
+ eCurProducedMembers;
+};
+
+
+
+// IMPLEMENTATION
+
+extern const String
+ C_sCePrefix_Interface;
+
+
+
+#endif
diff --git a/autodoc/source/display/idl/hfi_linklist.cxx b/autodoc/source/display/idl/hfi_linklist.cxx
new file mode 100644
index 000000000000..3ab52ab4d722
--- /dev/null
+++ b/autodoc/source/display/idl/hfi_linklist.cxx
@@ -0,0 +1,378 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "hfi_linklist.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include <ary/idl/i_ce.hxx>
+#include <ary/idl/i_gate.hxx>
+#include <ary/idl/ip_ce.hxx>
+#include <ary/idl/ip_type.hxx>
+#include <toolkit/hf_docentry.hxx>
+#include <toolkit/hf_title.hxx>
+#include "hfi_doc.hxx"
+#include "hfi_tag.hxx"
+#include "hfi_typetext.hxx"
+#include "hi_ary.hxx"
+#include "hi_env.hxx"
+
+
+
+
+//******************* HF_CommentedLink_Table **********************************//
+
+HF_CommentedLink_Table::HF_CommentedLink_Table( Environment & io_rEnv,
+ Xml::Element & o_rOut,
+ const String & i_sTitle,
+ const String & i_sLabel,
+ bool i_bBorder )
+ : HtmlFactory_Idl(io_rEnv,&o_rOut),
+ pTable( new Html::Table( (i_bBorder ? "1" : "0"), "100%", "5", "0") ),
+ pCurLinkColumn(0),
+ pCurCommentColumn(0)
+{
+ *pTable
+ << new Html::ClassAttr("commentedlinks");
+
+ CurOut()
+ >> *new Html::Label(i_sLabel)
+ << new Html::LineBreak;
+ CurOut()
+ << pTable;
+// HF_SubTitle aTitle(*pTable);
+// aTitle.Produce_it(i_sTitle);
+}
+
+HF_CommentedLink_Table::~HF_CommentedLink_Table()
+{
+}
+
+void
+HF_CommentedLink_Table::Add_Line()
+{
+ Html::TableRow &
+ rRow = pTable->AddRow();
+
+ pCurLinkColumn = & (rRow.AddCell()
+ << new Html::WidthAttr("30%")
+ << new Xml::AnAttribute("valign","top") );
+ pCurCommentColumn = & rRow.AddCell();
+}
+
+Xml::Element &
+HF_CommentedLink_Table::Cur_LinkColumn()
+{
+ csv_assert(pCurLinkColumn != 0);
+ return *pCurLinkColumn;
+}
+
+Xml::Element &
+HF_CommentedLink_Table::Cur_CommentColumn()
+{
+ csv_assert(pCurCommentColumn != 0);
+ return *pCurCommentColumn;
+}
+
+
+//******************* HF_MemberTable **********************************//
+
+HF_MemberTable::HF_MemberTable( Environment & io_rEnv,
+ Xml::Element & o_rOut,
+ const String & i_sTitle,
+ const String & i_sLabel,
+ bool i_bInline )
+ : HtmlFactory_Idl(io_rEnv,&o_rOut),
+ pTable( new Html::Table("1", "100%", "5", "0") ),
+ pCurDeclaration(0),
+ pCurDescription(0),
+ bInline(i_bInline)
+{
+ *pTable
+ << new Html::ClassAttr("memberlist");
+
+ CurOut()
+ >> *new Html::Label(i_sLabel)
+ << new Html::LineBreak;
+ CurOut()
+ << pTable;
+// HF_SubTitle aTitle(*pTable);
+// aTitle.Produce_it(i_sTitle);
+}
+
+HF_MemberTable::~HF_MemberTable()
+{
+}
+
+void
+HF_MemberTable::Add_Line()
+{
+ if (bInline)
+ {
+ Html::TableRow & rRow = pTable->AddRow();
+
+ pCurDeclaration = &( rRow.AddCell()
+ << new Xml::AnAttribute("valign","top")
+ << new Html::WidthAttr("30%") );
+ pCurDescription = & rRow.AddCell();
+ }
+ else
+ {
+ Html::DefList *
+ pMemberSpace = new Html::DefList;
+ *pMemberSpace
+ << new Html::ClassAttr("member");
+
+ pTable->AddRow().AddCell() << pMemberSpace;
+
+ pCurDeclaration =
+ & ( *pMemberSpace
+ >> *new Html::DefListTerm
+ << new Html::ClassAttr("member") );
+ pCurDescription =
+ & ( *pMemberSpace
+ >> *new Html::DefListDefinition()
+ << new Html::ClassAttr("member") );
+ }
+}
+
+Xml::Element &
+HF_MemberTable::Cur_Declaration()
+{
+ csv_assert(pCurDeclaration != 0);
+ return *pCurDeclaration;
+}
+
+Xml::Element &
+HF_MemberTable::Cur_Description()
+{
+ csv_assert(pCurDescription != 0);
+ return *pCurDescription;
+}
+
+
+
+//******************* HF_IdlLinkList **********************************//
+
+HF_IdlLinkList::HF_IdlLinkList( Environment & io_rEnv,
+ Xml::Element * o_pOut )
+ : HtmlFactory_Idl(io_rEnv,o_pOut)
+{
+}
+
+HF_IdlLinkList::~HF_IdlLinkList()
+{
+}
+
+void
+HF_IdlLinkList::Produce_NamespaceMembers( const String & i_sTitle,
+ const String & i_sLabel,
+ const std::vector<ary::idl::Ce_id> & i_rList,
+ bool i_bNestedNamespaces ) const
+{
+ HF_CommentedLink_Table
+ aTableMaker( Env(), CurOut(),
+ i_sTitle, i_sLabel,
+ true );
+
+ std::vector<ary::idl::Ce_id>::const_iterator itEnd = i_rList.end();
+ for ( std::vector<ary::idl::Ce_id>::const_iterator it = i_rList.begin();
+ it != itEnd;
+ ++it )
+ {
+ static String sEntryName;
+ static String sEntryLink;
+ const ce_info *
+ pDocu = 0;
+ Get_EntryData_NamespaceMembers( sEntryName, sEntryLink, pDocu, *it, i_bNestedNamespaces );
+ aTableMaker.Add_Line();
+
+ aTableMaker.Cur_LinkColumn()
+ >> *new Html::Link(sEntryLink)
+ << sEntryName;
+
+ if ( pDocu != 0 )
+ {
+ HF_IdlShortDocu
+ aTextDisplay(Env(), aTableMaker.Cur_CommentColumn() );
+ aTextDisplay.Produce_byData( pDocu );
+ }
+ } // end for
+}
+
+void
+HF_IdlLinkList::Produce_GlobalLinks( const String & i_sTitle,
+ const String & i_sLabel,
+ ce_list & i_rList ) const
+{
+ HF_CommentedLink_Table
+ aTableMaker( Env(), CurOut(),
+ i_sTitle, i_sLabel,
+ true );
+
+ for ( ; i_rList; ++i_rList )
+ {
+ aTableMaker.Add_Line();
+ HF_IdlTypeText
+ aLinkText( Env(), aTableMaker.Cur_LinkColumn(), true );
+ aLinkText.Produce_byData(*i_rList);
+
+ const ce_info *
+ pDocu = Get_EntryDocu(*i_rList);
+ if ( pDocu != 0 )
+ {
+ HF_IdlShortDocu
+ aTextDisplay(Env(), aTableMaker.Cur_CommentColumn() );
+ aTextDisplay.Produce_byData( pDocu, *i_rList );
+ }
+ }
+}
+
+void
+HF_IdlLinkList::Produce_GlobalCommentedLinks( const String & i_sTitle,
+ const String & i_sLabel,
+ comref_list & i_rList ) const
+{
+ HF_CommentedLink_Table
+ aTableMaker( Env(), CurOut(),
+ i_sTitle, i_sLabel,
+ true );
+/*
+ for ( ; i_rList; ++i_rList )
+ {
+ aTableMaker.Add_Line();
+ HF_IdlTypeText
+ aLinkText( Env(), aTableMaker.Cur_LinkColumn(), true );
+ aLinkText.Produce_byData( (*i_rList).first );
+
+ HF_DocEntryList
+ aDocList( aTableMaker.Cur_CommentColumn() );
+ if ( (*i_rList).second != 0 )
+ {
+ HF_IdlDocu
+ aDocuDisplay( Env(), aDocList );
+ aDocuDisplay.Produce_byData( (*i_rList).second );
+ }
+ else
+ {
+ const ce_info *
+ pShort = Get_EntryDocu(
+ Env().Gate().Types().Search_CeRelatedTo(
+ (*i_rList).first) );
+ if ( pShort != 0 )
+ {
+ if (pShort->IsDeprecated())
+ {
+ aDocList.Produce_Term()
+ << "[ DEPRECATED ]";
+ }
+ if (pShort->IsOptional())
+ {
+ aDocList.Produce_Term()
+ << "[ OPTIONAL ]";
+ }
+
+ aDocList.Produce_Term()
+ << "Description";
+
+ HF_IdlDocuTextDisplay
+ aShortDisplay( Env(), &aDocList.Produce_Definition() );
+ aShortDisplay.Set_CurScopeTo(
+ Env().Gate().Types().Search_CeRelatedTo((*i_rList).first) );
+ pShort->Short().DisplayAt(aShortDisplay);
+ }
+ }
+ }
+*/
+}
+
+void
+HF_IdlLinkList::Produce_MemberLinks( const String & i_sTitle,
+ const String & i_sLabel,
+ ce_list & i_rList ) const
+{
+ HF_CommentedLink_Table
+ aTableMaker( Env(), CurOut(),
+ i_sTitle, i_sLabel,
+ true );
+
+/*
+ for ( ; i_rList; ++i_rList )
+ {
+ const ary::idl::CodeEntity &
+ rCe = Env().Gate().Ces().Find_Ce(*i_rList);
+
+ aTableMaker.Add_Line();
+ aTableMaker.Cur_LinkColumn()
+ >> *new Html::Link(
+ StreamLock(200)() << "#" << rCe.LocalName() << c_str)
+ << rCe.LocalName();
+
+ const ce_info *
+ pDocu = rCe.Docu();
+ if ( pDocu != 0 )
+ {
+ HF_IdlShortDocu
+ aTextDisplay(Env(), aTableMaker.Cur_CommentColumn() );
+ aTextDisplay.Produce_byData( *pDocu );
+ }
+ } // end for
+*/
+}
+
+void
+HF_IdlLinkList::Get_EntryData_NamespaceMembers(
+ String & o_sEntryName,
+ String & o_sEntryLink,
+ const ce_info * & o_pDocu,
+ ce_id i_nMemberId,
+ bool i_bIsNestedNamespace ) const
+{
+ const ary::idl::CodeEntity &
+ rCe = Env().Data().Find_Ce(i_nMemberId);
+
+ o_sEntryName = rCe.LocalName();
+ o_sEntryLink = StreamLock(200)() << rCe.LocalName()
+ << ( i_bIsNestedNamespace
+ ? "/module-ix"
+ : "" )
+ << ".html"
+ << c_str;
+ o_pDocu = rCe.Docu();
+}
+
+const ary::doc::OldIdlDocu *
+HF_IdlLinkList::Get_EntryDocu(ce_id i_nMemberId) const
+{
+ if (i_nMemberId.IsValid())
+ return Env().Data().Find_Ce(i_nMemberId).Docu();
+ else
+ return 0;
+}
+
+
diff --git a/autodoc/source/display/idl/hfi_linklist.hxx b/autodoc/source/display/idl/hfi_linklist.hxx
new file mode 100644
index 000000000000..7a7e12679bca
--- /dev/null
+++ b/autodoc/source/display/idl/hfi_linklist.hxx
@@ -0,0 +1,145 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_DISPLAY_HFI_LINKLIST_HXX
+#define ADC_DISPLAY_HFI_LINKLIST_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include "hi_factory.hxx"
+ // COMPONENTS
+ // PARAMETERS
+#include <ary/idl/i_comrela.hxx>
+#include <ary_i/ci_text2.hxx>
+#include <ary/doc/d_oldidldocu.hxx>
+
+
+
+
+class HF_CommentedLink_Table : public HtmlFactory_Idl
+{
+ public:
+ HF_CommentedLink_Table(
+ Environment & io_rEnv,
+ Xml::Element & o_rOut,
+ const String & i_sTitle,
+ const String & i_sLabel,
+ bool i_bBorder = false );
+ virtual ~HF_CommentedLink_Table();
+
+ void Add_Line();
+ Xml::Element & Cur_LinkColumn();
+ Xml::Element & Cur_CommentColumn();
+
+ private:
+ // DATA
+ Html::Table * pTable;
+ Xml::Element * pCurLinkColumn;
+ Xml::Element * pCurCommentColumn;
+};
+
+class HF_MemberTable : public HtmlFactory_Idl
+{
+ public:
+ HF_MemberTable(
+ Environment & io_rEnv,
+ Xml::Element & o_rOut,
+ const String & i_sTitle,
+ const String & i_sLabel,
+ bool i_bInline = false );
+ virtual ~HF_MemberTable();
+
+ void Add_Line();
+ Xml::Element & Cur_Declaration();
+ Xml::Element & Cur_Description();
+
+ private:
+ // DATA
+ Html::Table * pTable;
+ Xml::Element * pCurDeclaration;
+ Xml::Element * pCurDescription;
+ bool bInline;
+};
+
+
+
+
+class HF_IdlLinkList : public HtmlFactory_Idl
+{
+ public:
+ typedef ary::StdConstIterator<ary::idl::CommentedRelation>
+ comref_list;
+
+ HF_IdlLinkList(
+ Environment & io_rEnv,
+ Xml::Element * o_pOut );
+ virtual ~HF_IdlLinkList();
+
+ void Produce_NamespaceMembers(
+ const String & i_sTitle,
+ const String & i_sLabel,
+ const std::vector<ary::idl::Ce_id> &
+ i_rList,
+ bool i_bNestedNamespaces = false ) const;
+ void Produce_GlobalLinks(
+ const String & i_sTitle,
+ const String & i_sLabel,
+ ce_list & i_rList ) const;
+ void Produce_GlobalCommentedLinks(
+ const String & i_sTitle,
+ const String & i_sLabel,
+ comref_list & i_rList ) const;
+ void Produce_MemberLinks(
+ const String & i_sTitle,
+ const String & i_sLabel,
+ ce_list & i_rList ) const;
+ private:
+ void Get_EntryData_NamespaceMembers(
+ String & o_sEntryName,
+ String & o_sEntryLink,
+ const ce_info * & o_pDocuText,
+ ce_id i_nMemberId,
+ bool i_bIsNestedNamespace ) const;
+ const ce_info * Get_EntryDocu(
+ ce_id i_nMemberId ) const;
+};
+
+
+
+
+
+
+
+
+// IMPLEMENTATION
+
+
+#endif
+
+
diff --git a/autodoc/source/display/idl/hfi_method.cxx b/autodoc/source/display/idl/hfi_method.cxx
new file mode 100644
index 000000000000..a8c6e3e097ca
--- /dev/null
+++ b/autodoc/source/display/idl/hfi_method.cxx
@@ -0,0 +1,357 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "hfi_method.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include <ary/idl/i_exception.hxx>
+#include <ary/idl/i_param.hxx>
+#include <toolkit/hf_docentry.hxx>
+#include <toolkit/hf_funcdecl.hxx>
+#include "hfi_doc.hxx"
+#include "hfi_globalindex.hxx"
+#include "hfi_typetext.hxx"
+
+
+
+
+
+HF_IdlMethod::HF_IdlMethod( Environment & io_rEnv,
+ Xml::Element & o_cell)
+ : HtmlFactory_Idl(io_rEnv,&o_cell)
+{
+}
+
+
+HF_IdlMethod::~HF_IdlMethod()
+{
+}
+
+
+void
+HF_IdlMethod::Produce_byData( const String & i_sName,
+ type_id i_nReturnType,
+ param_list & i_rParams,
+ type_list & i_rExceptions,
+ bool i_bOneway,
+ bool i_bEllipse,
+ const client & i_ce ) const
+{
+ CurOut()
+ >> *new Html::Label(i_sName)
+ << new Html::ClassAttr(C_sMemberTitle)
+ << i_sName;
+ enter_ContentCell();
+ write_Declaration( i_sName,
+ i_nReturnType,
+ i_rParams,
+ i_rExceptions,
+ i_bOneway,
+ i_bEllipse );
+ CurOut() << new Html::HorizontalLine;
+ write_Docu(CurOut(), i_ce);
+ leave_ContentCell();
+}
+
+#if 0 // old
+void
+HF_IdlMethod::write_Declaration( const String & i_sName,
+ type_id i_nReturnType,
+ param_list & i_rParams,
+ type_list & i_rExceptions,
+ bool i_bOneway,
+ bool i_bEllipse ) const
+{
+ HF_FunctionDeclaration
+ aDecl(CurOut()) ;
+ Xml::Element &
+ front = aDecl.Add_ReturnLine();
+
+ // Front:
+ if (i_bOneway)
+ front << "[oneway] ";
+ if (i_nReturnType.IsValid())
+ { // Normal function, but not constructors:
+ HF_IdlTypeText
+ aReturn(Env(), front, true);
+ aReturn.Produce_byData(i_nReturnType);
+ front
+ << new Html::LineBreak;
+
+ }
+ front
+ >> *new Html::Bold
+ << i_sName;
+
+ // Main line:
+ Xml::Element &
+ types = aDecl.Types();
+ Xml::Element &
+ names = aDecl.Names();
+ bool bParams = i_rParams.operator bool();
+ if (bParams)
+ {
+ front
+ << "(";
+ HF_IdlTypeText
+ aType( Env(), types, true );
+
+ write_Param( aType, names, (*i_rParams) );
+
+ for (++i_rParams; i_rParams; ++i_rParams)
+ {
+ types
+ << new Html::LineBreak;
+ names
+ << ","
+ << new Html::LineBreak;
+ write_Param( aType, names, (*i_rParams) );
+ } // end for
+
+ if (i_bEllipse)
+ {
+ names
+ << " ...";
+ }
+ names
+ << " )";
+ }
+ else
+ front
+ << "()";
+
+
+ if ( i_rExceptions.operator bool() )
+ {
+ Xml::Element &
+ rExcOut = aDecl.Add_RaisesLine("raises", NOT bParams);
+ HF_IdlTypeText
+ aExc(Env(), rExcOut, true);
+ aExc.Produce_byData(*i_rExceptions);
+
+ for (++i_rExceptions; i_rExceptions; ++i_rExceptions)
+ {
+ rExcOut
+ << ","
+ << new Html::LineBreak;
+ aExc.Produce_byData(*i_rExceptions);
+ } // end for
+
+ rExcOut << " );";
+ }
+ else
+ {
+ if (bParams)
+ aDecl.Names() << ";";
+ else
+ aDecl.Front() << ";";
+ }
+}
+#endif // 0 old
+
+void
+HF_IdlMethod::write_Declaration( const String & i_sName,
+ type_id i_nReturnType,
+ param_list & i_rParams,
+ type_list & i_rExceptions,
+ bool i_bOneway,
+ bool i_bEllipse ) const
+{
+ HF_FunctionDeclaration
+ aDecl(CurOut(), "raises") ;
+ Xml::Element &
+ rReturnLine = aDecl.ReturnCell();
+
+ // Return line:
+ if (i_bOneway)
+ rReturnLine << "[oneway] ";
+ if (i_nReturnType.IsValid())
+ { // Normal function, but not constructors:
+ HF_IdlTypeText
+ aReturn(Env(), rReturnLine, true);
+ aReturn.Produce_byData(i_nReturnType);
+ }
+
+ // Main line:
+ Xml::Element &
+ rNameCell = aDecl.NameCell();
+ rNameCell
+ >> *new Html::Bold
+ << i_sName;
+
+ Xml::Element *
+ pParamEnd = 0;
+
+ bool bParams = i_rParams.operator bool();
+ if (bParams)
+ {
+ rNameCell
+ << "(";
+
+ pParamEnd = write_Param( aDecl, *i_rParams );
+ for (++i_rParams; i_rParams; ++i_rParams)
+ {
+ *pParamEnd << ",";
+ pParamEnd = write_Param( aDecl, *i_rParams );
+ } // end for
+
+ if (i_bEllipse)
+ {
+ Xml::Element &
+ rParamType = aDecl.NewParamTypeCell();
+ rParamType
+ << " ...";
+ pParamEnd = &rParamType;
+ }
+ *pParamEnd
+ << " )";
+ }
+ else
+ {
+ rNameCell
+ << "()";
+ }
+
+ if ( i_rExceptions.operator bool() )
+ {
+ Xml::Element &
+ rExcOut = aDecl.ExceptionCell();
+ HF_IdlTypeText
+ aExc(Env(), rExcOut, true);
+ aExc.Produce_byData(*i_rExceptions);
+
+ for (++i_rExceptions; i_rExceptions; ++i_rExceptions)
+ {
+ rExcOut
+ << ","
+ << new Html::LineBreak;
+ aExc.Produce_byData(*i_rExceptions);
+ } // end for
+
+ rExcOut << " );";
+ }
+ else if (bParams)
+ {
+ *pParamEnd << ";";
+ }
+ else
+ {
+ rNameCell << ";";
+ }
+}
+
+#if 0 // old
+void
+HF_IdlMethod::write_Param( HF_IdlTypeText & o_type,
+ Xml::Element & o_names,
+ const ary::idl::Parameter & i_param ) const
+{
+ switch ( i_param.Direction() )
+ {
+ case ary::idl::param_in:
+ o_type.CurOut() << "[in] ";
+ break;
+ case ary::idl::param_out:
+ o_type.CurOut() << "[out] ";
+ break;
+ case ary::idl::param_inout:
+ o_type.CurOut() << "[inout] ";
+ break;
+ } // end switch
+
+ o_type.Produce_byData( i_param.Type() );
+ o_names
+ << i_param.Name();
+}
+#endif // 0 old
+
+Xml::Element *
+HF_IdlMethod::write_Param( HF_FunctionDeclaration & o_decl,
+ const ary::idl::Parameter & i_param ) const
+{
+ Xml::Element &
+ rTypeCell = o_decl.NewParamTypeCell();
+ Xml::Element &
+ rNameCell = o_decl.ParamNameCell();
+
+ switch ( i_param.Direction() )
+ {
+ case ary::idl::param_in:
+ rTypeCell << "[in] ";
+ break;
+ case ary::idl::param_out:
+ rTypeCell << "[out] ";
+ break;
+ case ary::idl::param_inout:
+ rTypeCell << "[inout] ";
+ break;
+ } // end switch
+
+ HF_IdlTypeText
+ aTypeWriter(Env(), rTypeCell, true);
+ aTypeWriter.Produce_byData( i_param.Type() );
+
+ rNameCell
+ << i_param.Name();
+ return &rNameCell;
+}
+
+const String sContentBorder("0");
+const String sContentWidth("96%");
+const String sContentPadding("5");
+const String sContentSpacing("0");
+
+const String sBgWhite("#ffffff");
+const String sCenter("center");
+
+void
+HF_IdlMethod::enter_ContentCell() const
+{
+
+ Xml::Element &
+ rContentCell = CurOut()
+ >> *new Html::Table( sContentBorder,
+ sContentWidth,
+ sContentPadding,
+ sContentSpacing )
+ << new Html::ClassAttr("table-in-method")
+ << new Html::BgColorAttr(sBgWhite)
+ << new Html::AlignAttr(sCenter)
+ >> *new Html::TableRow
+ >> *new Html::TableCell;
+ Out().Enter(rContentCell);
+}
+
+
+void
+HF_IdlMethod::leave_ContentCell() const
+{
+ Out().Leave();
+}
+
diff --git a/autodoc/source/display/idl/hfi_method.hxx b/autodoc/source/display/idl/hfi_method.hxx
new file mode 100644
index 000000000000..9f81e16c6d42
--- /dev/null
+++ b/autodoc/source/display/idl/hfi_method.hxx
@@ -0,0 +1,104 @@
+ /*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_DISPLAY_HFI_METHOD_HXX
+#define ADC_DISPLAY_HFI_METHOD_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include "hi_factory.hxx"
+ // COMPONENTS
+ // PARAMETERS
+#include <ary/idl/i_param.hxx>
+#include <ary/doc/d_oldidldocu.hxx>
+typedef ary::doc::OldIdlDocu CodeInfo;
+#include "hfi_linklist.hxx"
+
+
+
+namespace csi
+{
+ namespace idl
+ {
+ class Parameter;
+ }
+}
+
+class HF_FunctionDeclaration;
+
+class HF_IdlMethod : public HtmlFactory_Idl
+{
+ public:
+ typedef ary::StdConstIterator<ary::idl::Parameter> param_list;
+
+ HF_IdlMethod(
+ Environment & io_rEnv,
+ Xml::Element & o_cell );
+ virtual ~HF_IdlMethod();
+
+ void Produce_byData(
+ const String & i_sName,
+ type_id i_nReturnType,
+ param_list & i_rParams,
+ type_list & i_rExceptions,
+ bool i_bOneway,
+ bool i_bEllipse,
+ const client & i_ce ) const;
+ private:
+ void write_Declaration(
+ const String & i_sName,
+ type_id i_nReturnType,
+ param_list & i_rParams,
+ type_list & i_rExceptions,
+ bool i_bOneway,
+ bool i_bEllipse ) const;
+// void write_Param(
+// HF_IdlTypeText & o_type,
+// Xml::Element & o_names,
+// const ary::idl::Parameter &
+// i_param ) const;
+
+ Xml::Element * write_Param(
+ HF_FunctionDeclaration &
+ o_decl,
+ const ary::idl::Parameter &
+ i_param ) const;
+ void enter_ContentCell() const;
+ void leave_ContentCell() const;
+};
+
+
+
+// IMPLEMENTATION
+
+
+
+#endif
+
+
diff --git a/autodoc/source/display/idl/hfi_module.cxx b/autodoc/source/display/idl/hfi_module.cxx
new file mode 100644
index 000000000000..4ab40cfebf89
--- /dev/null
+++ b/autodoc/source/display/idl/hfi_module.cxx
@@ -0,0 +1,299 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "hfi_module.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include <ary/idl/i_ce.hxx>
+#include <ary/idl/i_module.hxx>
+#include <ary/idl/ik_module.hxx>
+#include <ary/doc/d_oldidldocu.hxx>
+#include <ary/getncast.hxx>
+#include <toolkit/hf_docentry.hxx>
+#include <toolkit/hf_linachain.hxx>
+#include <toolkit/hf_navi_sub.hxx>
+#include <toolkit/hf_title.hxx>
+#include "hfi_doc.hxx"
+#include "hfi_navibar.hxx"
+#include "hfi_tag.hxx"
+#include "hfi_typetext.hxx"
+#include "hi_linkhelper.hxx"
+
+
+extern const String
+ C_sCePrefix_Module("module");
+
+namespace
+{
+
+const String
+ C_sList_NestedModules("Nested Modules");
+const String
+ C_sList_NestedModules_Label("NestedModules");
+const String
+ C_sList_Services("Services");
+const String
+ C_sList_Singletons("Singletons");
+const String
+ C_sList_Interfaces("Interfaces");
+const String
+ C_sList_Structs("Structs");
+const String
+ C_sList_Exceptions("Exceptions");
+const String
+ C_sList_Enums("Enums");
+const String
+ C_sList_Typedefs("Typedefs");
+const String
+ C_sList_ConstGroups("Constant Groups");
+const String
+ C_sList_ConstGroups_Label("ConstantGroups");
+
+
+enum E_SubListIndices
+{ // In case of changes, also adapt make_Navibar() !!
+ sli_NestedModules = 0,
+ sli_Services = 1,
+ sli_Singletons = 2,
+ sli_Interfaces = 3,
+ sli_Structs = 4,
+ sli_Exceptions = 5,
+ sli_Enums = 6,
+ sli_Typedefs = 7,
+ sli_ConstGroups = 8
+};
+
+} //anonymous namespace
+
+
+HF_IdlModule::HF_IdlModule( Environment & io_rEnv,
+ Xml::Element & o_rOut )
+ : HtmlFactory_Idl(io_rEnv, &o_rOut)
+{
+}
+
+HF_IdlModule::~HF_IdlModule()
+{
+}
+
+typedef ary::idl::ifc_module::attr ModuleAttr;
+
+
+void
+HF_IdlModule::Produce_byData( const client & i_ce ) const
+{
+ Dyn<HF_NaviSubRow>
+ pNaviSubRow( &make_Navibar(i_ce) );
+
+ HF_TitleTable
+ aTitle(CurOut());
+ HF_LinkedNameChain
+ aNameChain(aTitle.Add_Row());
+
+ if ( Env().CurPosition().Depth() > 0 )
+ {
+ aNameChain.Produce_CompleteChain_forModule(Env().CurPosition(), nameChainLinker);
+
+ StreamLock
+ sl(200);
+ aTitle.Produce_Title( sl()
+ << C_sCePrefix_Module
+ << " "
+ << i_ce.LocalName()
+ << c_str );
+ }
+ else
+ {
+ aTitle.Produce_Title( "Global Module" );
+ }
+
+ write_Docu(aTitle.Add_Row(), i_ce);
+ CurOut() << new Html::HorizontalLine();
+
+
+ // Write children lists:
+ ce_ptr_list aNestedModules;
+ ce_ptr_list aServices;
+ ce_ptr_list aInterfaces;
+ ce_ptr_list aStructs;
+ ce_ptr_list aExceptions;
+ ce_ptr_list aEnums;
+ ce_ptr_list aTypedefs;
+ ce_ptr_list aConstantGroups;
+ ce_ptr_list aSingletons;
+
+ ModuleAttr::Get_AllChildrenSeparated(
+ aNestedModules,
+ aServices,
+ aInterfaces,
+ aStructs,
+ aExceptions,
+ aEnums,
+ aTypedefs,
+ aConstantGroups,
+ aSingletons,
+ Env().Data().Ces(),
+ i_ce );
+
+ // Has this to be in the order of enum E_SubListIndices ???
+ if (produce_ChildList(C_sList_NestedModules, C_sList_NestedModules_Label, aNestedModules ))
+ pNaviSubRow->SwitchOn(sli_NestedModules);
+ if (produce_ChildList(C_sList_Services, C_sList_Services, aServices))
+ pNaviSubRow->SwitchOn(sli_Services);
+ if (produce_ChildList(C_sList_Singletons, C_sList_Singletons, aSingletons))
+ pNaviSubRow->SwitchOn(sli_Singletons);
+ if (produce_ChildList(C_sList_Interfaces, C_sList_Interfaces, aInterfaces))
+ pNaviSubRow->SwitchOn(sli_Interfaces);
+ if (produce_ChildList(C_sList_Structs, C_sList_Structs, aStructs))
+ pNaviSubRow->SwitchOn(sli_Structs);
+ if (produce_ChildList(C_sList_Exceptions, C_sList_Exceptions, aExceptions))
+ pNaviSubRow->SwitchOn(sli_Exceptions);
+ if (produce_ChildList(C_sList_Enums, C_sList_Enums, aEnums))
+ pNaviSubRow->SwitchOn(sli_Enums);
+ if (produce_ChildList(C_sList_Typedefs, C_sList_Typedefs, aTypedefs))
+ pNaviSubRow->SwitchOn(sli_Typedefs);
+ if (produce_ChildList(C_sList_ConstGroups, C_sList_ConstGroups_Label, aConstantGroups))
+ pNaviSubRow->SwitchOn(sli_ConstGroups);
+ pNaviSubRow->Produce_Row();
+}
+
+DYN HF_NaviSubRow &
+HF_IdlModule::make_Navibar( const client & i_ce ) const
+{
+ HF_IdlNavigationBar
+ aNaviBar(Env(), CurOut());
+ aNaviBar.Produce_ModuleMainRow(i_ce);
+
+ DYN HF_NaviSubRow &
+ ret = aNaviBar.Add_SubRow();
+
+ // Has to be in the order of E_SubListIndices:
+ ret.AddItem(C_sList_NestedModules, C_sList_NestedModules_Label, false);
+ ret.AddItem(C_sList_Services, C_sList_Services, false);
+ ret.AddItem(C_sList_Singletons, C_sList_Singletons, false);
+ ret.AddItem(C_sList_Interfaces, C_sList_Interfaces, false);
+ ret.AddItem(C_sList_Structs, C_sList_Structs, false);
+ ret.AddItem(C_sList_Exceptions, C_sList_Exceptions, false);
+ ret.AddItem(C_sList_Enums, C_sList_Enums, false);
+ ret.AddItem(C_sList_Typedefs, C_sList_Typedefs, false);
+ ret.AddItem(C_sList_ConstGroups, C_sList_ConstGroups_Label, false);
+
+ CurOut() << new Html::HorizontalLine();
+ return ret;
+}
+
+bool
+HF_IdlModule::produce_ChildList( const String & i_sName,
+ const String & i_sLabel,
+ const ce_ptr_list & i_list ) const
+{
+ if ( i_list.size() == 0 )
+ return false;
+
+ HF_SubTitleTable
+ aTable( CurOut(),
+ i_sLabel,
+ i_sName,
+ 2 );
+
+ ce_ptr_list::const_iterator
+ itEnd = i_list.end();
+ for ( ce_ptr_list::const_iterator it = i_list.begin();
+ it != itEnd;
+ ++it )
+ {
+ Xml::Element &
+ rRow = aTable.Add_Row();
+ produce_Link(rRow, *it);
+ produce_LinkDoc(rRow, *it);
+ } // end for
+
+ return true;
+}
+
+void
+HF_IdlModule::produce_Link( Xml::Element & o_row,
+ const client * i_ce ) const
+{
+ csv_assert(i_ce != 0);
+ Xml::Element &
+ rCell = o_row
+ >> *new Html::TableCell
+ << new Html::ClassAttr(C_sCellStyle_SummaryLeft);
+
+ if ( NOT ary::is_type<ary::idl::Module>(*i_ce) )
+ {
+ HF_IdlTypeText
+ aText(Env(), rCell, true);
+ aText.Produce_byData(i_ce->CeId());
+ }
+ else
+ {
+ StreamLock slBuf(100);
+ rCell
+ >> *new Html::Link( slBuf() << i_ce->LocalName()
+ << "/module-ix.html"
+ << c_str )
+ << i_ce->LocalName();
+ }
+}
+
+void
+HF_IdlModule::produce_LinkDoc( Xml::Element & o_row,
+ const client * i_ce ) const
+{
+ csv_assert(i_ce != 0);
+
+ // We need the cell in any case, because, the rendering may be hurt else.
+ Xml::Element &
+ rCell = o_row
+ >> *new Html::TableCell
+ << new Html::ClassAttr(C_sCellStyle_SummaryRight);
+
+ const client &
+ rCe = *i_ce;
+ const ce_info *
+ pShort = Get_IdlDocu(rCe.Docu());
+ if ( pShort == 0 )
+ return;
+
+
+ if (pShort->IsDeprecated())
+ {
+ rCell << "[ DEPRECATED ]" << new Html::LineBreak;
+ }
+ if (pShort->IsOptional())
+ {
+ rCell << "[ OPTIONAL ]" << new Html::LineBreak;
+ }
+
+ HF_IdlDocuTextDisplay
+ aShortDisplay(Env(), &rCell, *i_ce);
+ pShort->Short().DisplayAt(aShortDisplay);
+}
diff --git a/autodoc/source/display/idl/hfi_module.hxx b/autodoc/source/display/idl/hfi_module.hxx
new file mode 100644
index 000000000000..f1eab57050bf
--- /dev/null
+++ b/autodoc/source/display/idl/hfi_module.hxx
@@ -0,0 +1,83 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_DISPLAY_HFI_MODULE_HXX
+#define ADC_DISPLAY_HFI_MODULE_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include "hi_factory.hxx"
+ // COMPONENTS
+ // PARAMETERS
+
+
+class HF_NaviSubRow;
+
+class HF_IdlModule : public HtmlFactory_Idl
+{
+ public:
+ HF_IdlModule(
+ Environment & io_rEnv, // The CurDirectory() is the one of the here displayed Module.
+ Xml::Element & o_rOut );
+ virtual ~HF_IdlModule();
+
+ void Produce_byData(
+ const client & i_ce ) const;
+ private:
+ typedef std::vector< const ary::idl::CodeEntity* > ce_ptr_list;
+
+ DYN HF_NaviSubRow & make_Navibar(
+ const client & i_ce ) const;
+ bool produce_ChildList(
+ const String & i_sName,
+ const String & i_sLabel,
+ const ce_ptr_list & i_list ) const;
+ void produce_Link(
+ Xml::Element & o_row,
+ const client * i_ce ) const;
+ void produce_LinkDoc(
+ Xml::Element & o_row,
+ const client * i_ce ) const;
+};
+
+
+
+// IMPLEMENTATION
+
+
+extern const String
+ C_sCePrefix_Module;
+
+
+
+
+
+#endif
+
+
diff --git a/autodoc/source/display/idl/hfi_navibar.cxx b/autodoc/source/display/idl/hfi_navibar.cxx
new file mode 100644
index 000000000000..5a9f32dacb1b
--- /dev/null
+++ b/autodoc/source/display/idl/hfi_navibar.cxx
@@ -0,0 +1,225 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "hfi_navibar.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include <ary/idl/i_ce.hxx>
+#include <toolkit/hf_navi_main.hxx>
+#include <toolkit/hf_navi_sub.hxx>
+#include "hfi_interface.hxx"
+#include "hfi_module.hxx"
+#include "hfi_service.hxx"
+#include "hi_linkhelper.hxx"
+
+
+extern const String
+ C_sLocalManualLinks("#devmanual");
+
+
+const String C_sTop = "Overview";
+const String C_sModule = "Module";
+const String C_sUse = "Use";
+const String C_sManual = "Devguide";
+const String C_sIndex = "Index";
+
+
+
+
+HF_IdlNavigationBar::HF_IdlNavigationBar( Environment & io_rEnv,
+ Xml::Element & o_rOut )
+ : HtmlFactory_Idl(io_rEnv, &o_rOut)
+{
+}
+
+HF_IdlNavigationBar::~HF_IdlNavigationBar()
+{
+}
+
+void
+HF_IdlNavigationBar::Produce_CeMainRow( const client & i_ce,
+ bool i_bNoUsePage )
+{
+ HF_NaviMainRow
+ aNaviMain( CurOut() );
+
+ StreamLock aLink(500);
+ StreamStr & rLink = aLink();
+
+ Env().Get_LinkTo( rLink.reset(),
+ Env().OutputTree().Overview() );
+ aNaviMain.Add_StdItem( C_sTop, rLink.c_str() );
+
+ Env().Get_LinkTo( rLink.reset(),
+ Env().Linker().PositionOf_CurModule() );
+ aNaviMain.Add_StdItem( C_sModule, rLink.c_str() );
+
+ if (i_bNoUsePage)
+ {
+ aNaviMain.Add_NoneItem( C_sUse );
+ }
+ else
+ {
+ Env().Get_LinkTo( rLink.reset(),
+ Env().Linker().PositionOf_CurXRefs(i_ce.LocalName()) );
+ aNaviMain.Add_StdItem( C_sUse, rLink.c_str() );
+ }
+
+ const StringVector &
+ rManualDescrs = i_ce.Secondaries().Links2DescriptionInManual();
+ if (rManualDescrs.size() == 2)
+ {
+ aNaviMain.Add_StdItem(C_sManual, Env().Link2Manual( rManualDescrs.front() ));
+ }
+ else if (rManualDescrs.size() > 2)
+ {
+ aNaviMain.Add_StdItem(C_sManual, C_sLocalManualLinks);
+ }
+ else
+ {
+ aNaviMain.Add_NoneItem( C_sManual );
+ }
+
+ Env().Get_LinkTo( rLink.reset(),
+ Env().Linker().PositionOf_Index() );
+ aNaviMain.Add_StdItem( C_sIndex, rLink.c_str() );
+
+ aNaviMain.Produce_Row();
+}
+
+void
+HF_IdlNavigationBar::Produce_CeXrefsMainRow( const client & i_ce )
+{
+ HF_NaviMainRow
+ aNaviMain( CurOut() );
+
+ StreamLock aLink(500);
+ StreamStr & rLink = aLink();
+
+ Env().Get_LinkTo( rLink.reset(),
+ Env().OutputTree().Overview() );
+ aNaviMain.Add_StdItem( C_sTop, rLink.c_str() );
+
+ Env().Get_LinkTo( rLink.reset(),
+ Env().Linker().PositionOf_CurModule() );
+ aNaviMain.Add_StdItem( C_sModule, rLink.c_str() );
+
+ aNaviMain.Add_SelfItem( C_sUse );
+
+ const StringVector &
+ rManualDescrs = i_ce.Secondaries().Links2DescriptionInManual();
+ if (rManualDescrs.size() == 2)
+ {
+ aNaviMain.Add_StdItem(C_sManual, Env().Link2Manual( rManualDescrs.front() ));
+ }
+ else if (rManualDescrs.size() > 2)
+ {
+ aNaviMain.Add_StdItem(C_sManual, C_sLocalManualLinks);
+ }
+ else
+ {
+ aNaviMain.Add_NoneItem( C_sManual );
+ }
+
+ Env().Get_LinkTo( rLink.reset(),
+ Env().Linker().PositionOf_Index() );
+ aNaviMain.Add_StdItem( C_sIndex, rLink.c_str() );
+
+ aNaviMain.Produce_Row();
+}
+
+void
+HF_IdlNavigationBar::Produce_ModuleMainRow( const client & i_ce )
+{
+ HF_NaviMainRow
+ aNaviMain( CurOut() );
+
+ StreamLock aLink(500);
+ StreamStr & rLink = aLink();
+
+ Env().Get_LinkTo( rLink.reset(),
+ Env().OutputTree().Overview() );
+ aNaviMain.Add_StdItem( C_sTop, rLink.c_str() );
+
+ aNaviMain.Add_SelfItem( C_sModule );
+
+ aNaviMain.Add_NoneItem( C_sUse );
+
+ const StringVector &
+ rManualDescrs = i_ce.Secondaries().Links2DescriptionInManual();
+ if (rManualDescrs.size() == 1)
+ {
+ aNaviMain.Add_StdItem(C_sManual, Env().Link2Manual( rManualDescrs.front() ));
+ }
+ else if (rManualDescrs.size() > 1)
+ {
+ aNaviMain.Add_StdItem(C_sManual, C_sLocalManualLinks);
+ }
+ else
+ {
+ aNaviMain.Add_NoneItem( C_sManual );
+ }
+
+ Env().Get_LinkTo( rLink.reset(),
+ Env().Linker().PositionOf_Index() );
+ aNaviMain.Add_StdItem( C_sIndex, rLink.c_str() );
+
+ aNaviMain.Produce_Row();
+}
+
+void
+HF_IdlNavigationBar::Produce_IndexMainRow()
+{
+ HF_NaviMainRow
+ aNaviMain( CurOut() );
+
+ StreamLock aLink(500);
+ StreamStr & rLink = aLink();
+
+ Env().Get_LinkTo( rLink.reset(),
+ Env().OutputTree().Overview() );
+ aNaviMain.Add_StdItem( C_sTop, rLink.c_str() );
+
+ aNaviMain.Add_NoneItem( C_sModule );
+ aNaviMain.Add_NoneItem( C_sUse );
+ aNaviMain.Add_NoneItem( C_sManual );
+
+ aNaviMain.Add_SelfItem( C_sIndex );
+
+ aNaviMain.Produce_Row();
+
+ CurOut() << new Html::HorizontalLine();
+}
+
+DYN HF_NaviSubRow &
+HF_IdlNavigationBar::Add_SubRow()
+{
+ return *new HF_NaviSubRow( CurOut() );
+}
+
diff --git a/autodoc/source/display/idl/hfi_navibar.hxx b/autodoc/source/display/idl/hfi_navibar.hxx
new file mode 100644
index 000000000000..b84264d3ac25
--- /dev/null
+++ b/autodoc/source/display/idl/hfi_navibar.hxx
@@ -0,0 +1,82 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_DISPLAY_HFI_NAVIBAR_HXX
+#define ADC_DISPLAY_HFI_NAVIBAR_HXX
+
+
+// USED SERVICES
+ // BASE CLASSES
+ // COMPONENTS
+#include "hi_factory.hxx"
+ // PARAMETERS
+
+namespace ary
+{
+namespace idl
+{
+class CodeEntity;
+}
+}
+
+
+class HF_NaviSubRow;
+
+/** @resp
+ Creates a navigation bar for an IDL HTML documentation page.
+*/
+class HF_IdlNavigationBar : public HtmlFactory_Idl
+{
+ public:
+ HF_IdlNavigationBar(
+ HtmlEnvironment_Idl &
+ io_rEnv,
+ Xml::Element & o_rOut );
+ virtual ~HF_IdlNavigationBar();
+
+ void Produce_CeMainRow(
+ const client & i_ce,
+ bool i_bNoUsePage = false );
+ void Produce_CeXrefsMainRow(
+ const client & i_ce );
+ void Produce_ModuleMainRow(
+ const client & i_ce );
+ void Produce_IndexMainRow();
+
+ /** Adds the subrow to the o_rOut argument of the constructor.
+ */
+ DYN HF_NaviSubRow & Add_SubRow();
+
+ private:
+ const ary::idl::CodeEntity *
+ pCe;
+};
+
+extern const String
+ C_sLocalManualLinks;
+
+#endif
diff --git a/autodoc/source/display/idl/hfi_property.cxx b/autodoc/source/display/idl/hfi_property.cxx
new file mode 100644
index 000000000000..e92ddc201b25
--- /dev/null
+++ b/autodoc/source/display/idl/hfi_property.cxx
@@ -0,0 +1,451 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "hfi_property.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include <ary/idl/i_ce.hxx>
+#include <ary/idl/ik_attribute.hxx>
+#include <ary/idl/ik_constant.hxx>
+#include <ary/idl/ik_enumvalue.hxx>
+#include <ary/idl/ik_property.hxx>
+#include <ary/idl/ik_structelem.hxx>
+#include <toolkit/hf_docentry.hxx>
+#include <toolkit/hf_title.hxx>
+#include "hfi_typetext.hxx"
+#include "hfi_doc.hxx"
+#include "hfi_tag.hxx"
+#include "hi_env.hxx"
+#include "hi_ary.hxx"
+#include "hi_linkhelper.hxx"
+
+void
+HF_IdlDataMember::Produce_byData( const client & ce ) const
+{
+ write_Title(ce);
+ enter_ContentCell();
+ write_Declaration(ce);
+ write_Description(ce);
+ leave_ContentCell();
+}
+
+HF_IdlDataMember::HF_IdlDataMember( Environment & io_rEnv,
+ HF_SubTitleTable & o_table )
+ : HtmlFactory_Idl( io_rEnv,
+ &(o_table.Add_Row()
+ >> *new Html::TableCell
+ << new Html::ClassAttr(C_sCellStyle_MDetail))
+ )
+{
+}
+
+const String sContentBorder("0");
+const String sContentWidth("96%");
+const String sContentPadding("5");
+const String sContentSpacing("0");
+
+const String sBgWhite("#ffffff");
+const String sCenter("center");
+
+void
+HF_IdlDataMember::write_Title( const client & i_ce ) const
+{
+ CurOut()
+ >> *new Html::Label(i_ce.LocalName())
+ << new Html::ClassAttr(C_sMemberTitle)
+ << i_ce.LocalName();
+}
+
+void
+HF_IdlDataMember::write_Description( const client & i_ce ) const
+{
+ CurOut() << new Html::HorizontalLine;
+ write_Docu(CurOut(), i_ce);
+}
+
+void
+HF_IdlDataMember::enter_ContentCell() const
+{
+
+ Xml::Element &
+ rContentCell = CurOut()
+ >> *new Html::Table( sContentBorder,
+ sContentWidth,
+ sContentPadding,
+ sContentSpacing )
+ << new Html::ClassAttr("table-in-data")
+ << new Html::BgColorAttr(sBgWhite)
+ << new Html::AlignAttr(sCenter)
+ >> *new Html::TableRow
+ >> *new Html::TableCell;
+ Out().Enter(rContentCell);
+}
+
+
+void
+HF_IdlDataMember::leave_ContentCell() const
+{
+ Out().Leave();
+}
+
+
+HF_IdlProperty::~HF_IdlProperty()
+{
+}
+
+typedef ary::idl::ifc_property::attr PropertyAttr;
+
+void
+HF_IdlProperty::write_Declaration( const client & i_ce ) const
+{
+ if (PropertyAttr::HasAnyStereotype(i_ce))
+ {
+ CurOut() << "[ ";
+ if (PropertyAttr::IsReadOnly(i_ce))
+ CurOut() << "readonly ";
+ if (PropertyAttr::IsBound(i_ce))
+ CurOut() << "bound ";
+ if (PropertyAttr::IsConstrained(i_ce))
+ CurOut() << "constrained ";
+ if (PropertyAttr::IsMayBeAmbiguous(i_ce))
+ CurOut() << "maybeambiguous ";
+ if (PropertyAttr::IsMayBeDefault(i_ce))
+ CurOut() << "maybedefault ";
+ if (PropertyAttr::IsMayBeVoid(i_ce))
+ CurOut() << "maybevoid ";
+ if (PropertyAttr::IsRemovable(i_ce))
+ CurOut() << "removable ";
+ if (PropertyAttr::IsTransient(i_ce))
+ CurOut() << "transient ";
+ CurOut() << "] ";
+ } // end if
+
+ HF_IdlTypeText
+ aType( Env(), CurOut(), true );
+ aType.Produce_byData( PropertyAttr::Type(i_ce) );
+
+ CurOut() << " " >> *new Html::Bold << i_ce.LocalName();
+ CurOut() << ";";
+}
+
+
+
+
+HF_IdlAttribute::~HF_IdlAttribute()
+{
+}
+
+typedef ary::idl::ifc_attribute::attr AttributeAttr;
+
+void
+HF_IdlAttribute::write_Declaration( const client & i_ce ) const
+{
+ if (AttributeAttr::HasAnyStereotype(i_ce))
+ {
+ CurOut() << "[ ";
+ if (AttributeAttr::IsReadOnly(i_ce))
+ CurOut() << "readonly ";
+ if (AttributeAttr::IsBound(i_ce))
+ CurOut() << "bound ";
+ CurOut() << "] ";
+ }
+
+ HF_IdlTypeText
+ aType( Env(), CurOut(), true );
+ aType.Produce_byData( AttributeAttr::Type(i_ce) );
+
+ CurOut()
+ << " "
+ >> *new Html::Bold
+ << i_ce.LocalName();
+
+ dyn_type_list pGetExceptions;
+ dyn_type_list pSetExceptions;
+ AttributeAttr::Get_GetExceptions(pGetExceptions, i_ce);
+ AttributeAttr::Get_SetExceptions(pSetExceptions, i_ce);
+
+ bool bGetRaises = (*pGetExceptions).IsValid();
+ bool bSetRaises = (*pSetExceptions).IsValid();
+ bool bRaises = bGetRaises OR bSetRaises;
+ if (bRaises)
+ {
+ HF_DocEntryList aSub(CurOut());
+
+ if (bGetRaises)
+ {
+ Xml::Element &
+ rGet = aSub.Produce_Definition();
+ HF_IdlTypeText
+ aExc(Env(), rGet, true);
+ type_list & itExc = *pGetExceptions;
+
+ rGet << "get raises (";
+ aExc.Produce_byData(*itExc);
+ for (++itExc; itExc.operator bool(); ++itExc)
+ {
+ rGet
+ << ",";
+ aExc.Produce_byData(*itExc);
+ } // end for
+ rGet << ")";
+ if (NOT bSetRaises)
+ rGet << ";";
+ } // end if (bGetRaises)
+
+ if (bSetRaises)
+ {
+ Xml::Element &
+ rSet = aSub.Produce_Definition();
+ HF_IdlTypeText
+ aExc(Env(), rSet, true);
+ type_list & itExc = *pSetExceptions;
+
+ rSet << "set raises (";
+ aExc.Produce_byData(*itExc);
+ for (++itExc; itExc.operator bool(); ++itExc)
+ {
+ rSet
+ << ",";
+ aExc.Produce_byData(*itExc);
+ } // end for
+ rSet << ");";
+ } // end if (bSetRaises)
+ }
+ else
+ {
+ CurOut() << ";";
+ }
+}
+
+
+
+
+HF_IdlEnumValue::~HF_IdlEnumValue()
+{
+}
+
+typedef ary::idl::ifc_enumvalue::attr EnumValueAttr;
+
+void
+HF_IdlEnumValue::write_Declaration( const client & i_ce ) const
+{
+ CurOut()
+ >> *new Html::Bold
+ << i_ce.LocalName();
+
+ const String &
+ rValue = EnumValueAttr::Value(i_ce);
+ if ( NOT rValue.empty() )
+ { CurOut() << " " // << " = " // In the moment this is somehow in the value
+ << rValue;
+ // CurOut() << ","; // In the moment this is somehow in the value
+ }
+ else
+ CurOut() << ",";
+}
+
+
+HF_IdlConstant::~HF_IdlConstant()
+{
+}
+
+typedef ary::idl::ifc_constant::attr ConstantAttr;
+
+void
+HF_IdlConstant::write_Declaration( const client & i_ce ) const
+{
+ CurOut() << "const ";
+ HF_IdlTypeText
+ aType( Env(), CurOut(), true );
+ aType.Produce_byData(ConstantAttr::Type(i_ce));
+ CurOut()
+ << " "
+ >> *new Html::Bold
+ << i_ce.LocalName();
+ const String &
+ rValue = ConstantAttr::Value(i_ce);
+ CurOut() << " " // << " = " // In the moment this is somehow in the value
+ << rValue;
+ // << ";"; // In the moment this is somehow in the value
+}
+
+
+HF_IdlStructElement::~HF_IdlStructElement()
+{
+}
+
+typedef ary::idl::ifc_structelement::attr StructElementAttr;
+
+void
+HF_IdlStructElement::write_Declaration( const client & i_ce ) const
+{
+ HF_IdlTypeText
+ aType( Env(), CurOut(), true );
+ aType.Produce_byData(StructElementAttr::Type(i_ce));
+ CurOut()
+ << " "
+ >> *new Html::Bold
+ << i_ce.LocalName();
+ CurOut()
+ << ";";
+}
+
+HF_IdlCommentedRelationElement::~HF_IdlCommentedRelationElement()
+{
+}
+
+void
+HF_IdlCommentedRelationElement::produce_Summary( Environment & io_env,
+ Xml::Element & io_context,
+ const comref & i_commentedRef,
+ const client & i_rScopeGivingCe )
+{
+ csv_assert( i_commentedRef.Info() );
+
+ const ary::idl::Type_id aType = i_commentedRef.Type();
+ const ce_info & rDocu = *i_commentedRef.Info();
+
+ bool bShort = NOT rDocu.Short().IsEmpty();
+ bool bDescr = NOT rDocu.Description().IsEmpty();
+
+ if ( bShort )
+ {
+ HF_IdlDocuTextDisplay
+ aDescription(io_env, 0, i_rScopeGivingCe);
+
+ Xml::Element& rPara = io_context >> *new Html::Paragraph;
+ aDescription.Out().Enter( rPara );
+ rDocu.Short().DisplayAt( aDescription );
+
+ // if there's more than just the summary - i.e. a description, or usage restrictions, or tags -,
+ // then add a link to the details section
+ if ( bDescr OR rDocu.IsDeprecated() OR rDocu.IsOptional() OR NOT rDocu.Tags().empty() )
+ {
+ StreamLock aLocalLink(100);
+ aLocalLink() << "#" << get_LocalLinkName(io_env, i_commentedRef);
+
+ aDescription.Out().Out() << "(";
+ aDescription.Out().Out()
+ >> *new Html::Link( aLocalLink().c_str() )
+ << "details";
+ aDescription.Out().Out() << ")";
+ }
+
+ aDescription.Out().Leave();
+ }
+}
+
+void
+HF_IdlCommentedRelationElement::produce_LinkDoc( Environment & io_env,
+ const client & i_ce,
+ Xml::Element & io_context,
+ const comref & i_commentedRef,
+ const E_DocType i_docType )
+{
+ if ( i_commentedRef.Info() != 0 )
+ {
+ if ( i_docType == doctype_complete )
+ {
+ HF_DocEntryList aDocList(io_context);
+ HF_IdlDocu aDocuDisplay(io_env, aDocList);
+
+ aDocuDisplay.Produce_fromReference(*i_commentedRef.Info(), i_ce);
+ }
+ else
+ {
+ produce_Summary(io_env, io_context, i_commentedRef, i_ce);
+ }
+ }
+ else
+ {
+ HF_DocEntryList aDocList(io_context);
+
+ const client *
+ pCe = io_env.Linker().Search_CeFromType(i_commentedRef.Type());
+ const ce_info *
+ pShort = pCe != 0
+ ? Get_IdlDocu(pCe->Docu())
+ : (const ce_info *)(0);
+ if ( pShort != 0 )
+ {
+ aDocList.Produce_NormalTerm("(referenced entity's summary:)");
+ Xml::Element &
+ rDef = aDocList.Produce_Definition();
+ HF_IdlDocuTextDisplay
+ aShortDisplay( io_env, &rDef, *pCe);
+ pShort->Short().DisplayAt(aShortDisplay);
+ } // end if (pShort != 0)
+ } // endif ( (*i_commentedRef).Info() != 0 ) else
+}
+
+
+String
+HF_IdlCommentedRelationElement::get_LocalLinkName( Environment & io_env,
+ const comref & i_commentedRef )
+{
+ StringVector aModules;
+ String sLocalName;
+ ce_id nCe;
+ int nSequenceCount = 0;
+
+ const ary::idl::Type &
+ rType = io_env.Data().Find_Type(i_commentedRef.Type());
+ io_env.Data().Get_TypeText(aModules, sLocalName, nCe, nSequenceCount, rType);
+
+ // speaking strictly, this is not correct: If we have two interfaces with the same local
+ // name, but in different modules, then the link name will be ambiguous. However, this should
+ // be too seldom a case to really make the link names that ugly by adding the module information.
+ return sLocalName;
+}
+
+void
+HF_IdlCommentedRelationElement::write_Title( const client & /*i_ce*/ ) const
+{
+
+ Xml::Element &
+ rAnchor = CurOut()
+ >> *new Html::Label(get_LocalLinkName(Env(), m_relation))
+ << new Html::ClassAttr(C_sMemberTitle);
+
+ HF_IdlTypeText
+ aText(Env(), rAnchor, true);
+ aText.Produce_byData(m_relation.Type());
+}
+
+void
+HF_IdlCommentedRelationElement::write_Declaration( const client & /*i_ce*/ ) const
+{
+ // nothing to do here - an entity which is a commented relation does not have a declaration
+}
+
+void
+HF_IdlCommentedRelationElement::write_Description( const client & i_ce ) const
+{
+ produce_LinkDoc( Env(), i_ce, CurOut(), m_relation, doctype_complete );
+}
diff --git a/autodoc/source/display/idl/hfi_property.hxx b/autodoc/source/display/idl/hfi_property.hxx
new file mode 100644
index 000000000000..2d82e8badb4d
--- /dev/null
+++ b/autodoc/source/display/idl/hfi_property.hxx
@@ -0,0 +1,182 @@
+ /*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_DISPLAY_HFI_PROPERTY_HXX
+#define ADC_DISPLAY_HFI_PROPERTY_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include "hi_factory.hxx"
+ // COMPONENTS
+ // PARAMETERS
+#include <ary/idl/i_comrela.hxx>
+
+class HF_SubTitleTable;
+
+class HF_IdlDataMember : public HtmlFactory_Idl
+{
+ public:
+ void Produce_byData(
+ const client & ce ) const;
+ protected:
+ HF_IdlDataMember(
+ Environment & io_rEnv,
+ HF_SubTitleTable & o_table );
+ virtual ~HF_IdlDataMember() {}
+
+ private:
+ virtual void write_Title(
+ const client & i_ce ) const;
+
+ virtual void write_Declaration(
+ const client & i_ce ) const = 0;
+
+ virtual void write_Description(
+ const client & i_ce ) const;
+
+ void enter_ContentCell() const;
+ void leave_ContentCell() const;
+};
+
+
+
+class HF_IdlProperty : public HF_IdlDataMember
+{
+ public:
+ HF_IdlProperty(
+ Environment & io_rEnv,
+ HF_SubTitleTable & o_table )
+ : HF_IdlDataMember(io_rEnv, o_table) {}
+ virtual ~HF_IdlProperty();
+ private:
+ virtual void write_Declaration(
+ const client & i_ce ) const;
+};
+
+class HF_IdlAttribute : public HF_IdlDataMember
+{
+ public:
+ HF_IdlAttribute(
+ Environment & io_rEnv,
+ HF_SubTitleTable & o_table )
+ : HF_IdlDataMember(io_rEnv, o_table) {}
+ virtual ~HF_IdlAttribute();
+
+ private:
+ virtual void write_Declaration(
+ const client & i_ce ) const;
+};
+
+
+class HF_IdlEnumValue : public HF_IdlDataMember
+{
+ public:
+ HF_IdlEnumValue(
+ Environment & io_rEnv,
+ HF_SubTitleTable & o_table )
+ : HF_IdlDataMember(io_rEnv, o_table) {}
+ virtual ~HF_IdlEnumValue();
+
+ private:
+ virtual void write_Declaration(
+ const client & i_ce ) const;
+};
+
+class HF_IdlConstant : public HF_IdlDataMember
+{
+ public:
+ HF_IdlConstant(
+ Environment & io_rEnv,
+ HF_SubTitleTable & o_table )
+ : HF_IdlDataMember(io_rEnv, o_table) {}
+ virtual ~HF_IdlConstant();
+
+ private:
+ virtual void write_Declaration(
+ const client & i_ce ) const;
+};
+
+
+class HF_IdlStructElement : public HF_IdlDataMember
+{
+ public:
+ HF_IdlStructElement(
+ Environment & io_rEnv,
+ HF_SubTitleTable & o_table )
+ : HF_IdlDataMember(io_rEnv, o_table) {}
+ virtual ~HF_IdlStructElement();
+
+ private:
+ virtual void write_Declaration(
+ const client & i_ce ) const;
+};
+
+class HF_IdlCommentedRelationElement : public HF_IdlDataMember
+{
+ public:
+ HF_IdlCommentedRelationElement(
+ Environment & io_rEnv,
+ HF_SubTitleTable & o_table,
+ const ary::idl::CommentedRelation& i_relation )
+ : HF_IdlDataMember(io_rEnv, o_table)
+ , m_relation( i_relation )
+ {
+ }
+ virtual ~HF_IdlCommentedRelationElement();
+
+ typedef ::ary::idl::CommentedRelation comref;
+
+ static void produce_LinkDoc(
+ Environment & io_env,
+ const client & i_ce,
+ Xml::Element & io_context,
+ const comref & i_commentedRef,
+ const E_DocType i_docType );
+
+ private:
+ virtual void write_Title(
+ const client & i_ce ) const;
+ virtual void write_Declaration(
+ const client & i_ce ) const;
+ virtual void write_Description(
+ const client & i_ce ) const;
+ private:
+ static void produce_Summary( Environment & io_env,
+ Xml::Element & io_context,
+ const comref & i_commentedRef,
+ const client & i_rScopeGivingCe );
+
+ static String get_LocalLinkName( Environment & io_env,
+ const comref & i_commentedRef );
+
+ private:
+ const ary::idl::CommentedRelation& m_relation;
+};
+
+#endif
diff --git a/autodoc/source/display/idl/hfi_service.cxx b/autodoc/source/display/idl/hfi_service.cxx
new file mode 100644
index 000000000000..a4d105fc0f86
--- /dev/null
+++ b/autodoc/source/display/idl/hfi_service.cxx
@@ -0,0 +1,363 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "hfi_service.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include <ary/idl/i_ce.hxx>
+#include <ary/idl/ik_property.hxx>
+#include <ary/idl/ik_service.hxx>
+#include <toolkit/hf_docentry.hxx>
+#include <toolkit/hf_linachain.hxx>
+#include <toolkit/hf_navi_sub.hxx>
+#include <toolkit/hf_title.hxx>
+#include "hfi_doc.hxx"
+#include "hfi_navibar.hxx"
+#include "hfi_property.hxx"
+#include "hfi_tag.hxx"
+#include "hfi_typetext.hxx"
+#include "hi_linkhelper.hxx"
+
+
+
+
+extern const String
+ C_sCePrefix_Service("service");
+
+namespace
+{
+
+const String
+ C_sList_IncludedServices("Services' Summary");
+const String
+ C_sList_IncludedServices_Heading("Included Services - Summary");
+const String
+ C_sList_IncludedServices_Label("ServicesSummary");
+const String
+ C_sList_IncludedServicesDetails("Services' Details");
+const String
+ C_sList_IncludedServicesDetails_Heading("Included Services - Details");
+const String
+ C_sList_IncludedServicesDetails_Label("ServicesDetails");
+const String
+ C_sList_ExportedInterfaces("Interfaces' Summary");
+const String
+ C_sList_ExportedInterfaces_Heading("Exported Interfaces - Summary");
+const String
+ C_sList_ExportedInterfaces_Label("InterfacesSummary");
+const String
+ C_sList_ExportedInterfacesDetails("Interfaces' Details");
+const String
+ C_sList_ExportedInterfacesDetails_Heading("Exported Interfaces - Details");
+const String
+ C_sList_ExportedInterfacesDetails_Label("InterfacesDetails");
+const String
+ C_sList_Properties("Properties' Summary");
+const String
+ C_sList_Properties_Label("PropertiesSummary");
+const String
+ C_sList_PropertiesDetails("Properties' Details");
+const String
+ C_sList_PropertiesDetails_Label("PropertiesDetails");
+
+
+enum E_SubListIndices
+{
+ sli_IncludedServicesSummary = 0,
+ sli_InterfacesSummary = 1,
+ sli_PropertiesSummary = 2,
+ sli_IncludedServicesDetails = 3,
+ sli_InterfacesDetails = 4,
+ sli_PropertiesDetails = 5
+};
+
+} //anonymous namespace
+
+
+HF_IdlService::HF_IdlService( Environment & io_rEnv,
+ Xml::Element & o_rOut )
+ : HtmlFactory_Idl(io_rEnv, &o_rOut)
+{
+}
+
+HF_IdlService::~HF_IdlService()
+{
+
+}
+
+typedef ::ary::idl::ifc_service::attr
+ ServiceAttr;
+typedef ::ary::Dyn_StdConstIterator< ::ary::idl::CommentedRelation >
+ dyn_comref_list;
+
+void
+HF_IdlService::produce_CommentedRelations( const client & i_ce,
+ comref_list & it_list,
+ const String & i_summaryTitle,
+ const String & i_summaryLabel,
+ const String & i_detailsTitle,
+ const String & i_detailsLabel,
+ const E_DocType i_docType ) const
+{
+ csv_assert( it_list );
+
+ bool bSummaryOnly = ( i_docType == doctype_summaryOnly );
+ HF_SubTitleTable aTable(
+ CurOut(),
+ bSummaryOnly ? i_summaryLabel : i_detailsLabel,
+ bSummaryOnly ? i_summaryTitle : i_detailsTitle,
+ 2 );
+
+ for ( ; it_list; ++it_list )
+ {
+ Xml::Element &
+ rRow = aTable.Add_Row();
+
+ if ( bSummaryOnly )
+ {
+ produce_Link(rRow, (*it_list).Type());
+ produce_LinkSummary(i_ce, rRow, *it_list);
+ }
+ else
+ {
+ HF_IdlCommentedRelationElement
+ aRelation( Env(), aTable, *it_list );
+ aRelation.Produce_byData( i_ce );
+ }
+ } // end for
+}
+
+void
+HF_IdlService::Produce_byData( const client & i_ce ) const
+{
+ Dyn<HF_NaviSubRow>
+ pNaviSubRow( &make_Navibar(i_ce) );
+
+ HF_TitleTable
+ aTitle(CurOut());
+ HF_LinkedNameChain
+ aNameChain(aTitle.Add_Row());
+
+ aNameChain.Produce_CompleteChain(Env().CurPosition(), nameChainLinker);
+ produce_Title(aTitle, C_sCePrefix_Service, i_ce);
+
+ write_Docu(aTitle.Add_Row(), i_ce);
+ CurOut() << new Html::HorizontalLine();
+
+ // produce ...
+ // - included services: summary
+ dyn_comref_list dpIncludedServices;
+ ServiceAttr::Get_IncludedServices(dpIncludedServices, i_ce);
+ if ( (*dpIncludedServices).operator bool() )
+ {
+ produce_CommentedRelations( i_ce, *dpIncludedServices,
+ C_sList_IncludedServices_Heading,
+ C_sList_IncludedServices_Label,
+ C_sList_IncludedServicesDetails_Heading,
+ C_sList_IncludedServicesDetails_Label,
+ doctype_summaryOnly );
+ pNaviSubRow->SwitchOn(sli_IncludedServicesSummary);
+ }
+
+ // - exported interfaces: summary
+ dyn_comref_list dpExportedInterfaces;
+ ServiceAttr::Get_ExportedInterfaces(dpExportedInterfaces, i_ce);
+ if ( (*dpExportedInterfaces).operator bool() )
+ {
+ produce_CommentedRelations( i_ce, *dpExportedInterfaces,
+ C_sList_ExportedInterfaces_Heading,
+ C_sList_ExportedInterfaces_Label,
+ C_sList_ExportedInterfacesDetails_Heading,
+ C_sList_ExportedInterfacesDetails_Label,
+ doctype_summaryOnly );
+ pNaviSubRow->SwitchOn(sli_InterfacesSummary);
+ }
+
+ // - supported properties: summary
+ dyn_ce_list dpProperties;
+ ServiceAttr::Get_Properties(dpProperties, i_ce);
+ if ( (*dpProperties).operator bool() )
+ {
+ produce_Members( *dpProperties,
+ C_sList_Properties,
+ C_sList_Properties_Label,
+ C_sList_PropertiesDetails,
+ C_sList_PropertiesDetails_Label,
+ viewtype_summary );
+ pNaviSubRow->SwitchOn(sli_PropertiesSummary);
+ }
+
+ // - included services: details
+ ServiceAttr::Get_IncludedServices(dpIncludedServices, i_ce);
+ if ( (*dpIncludedServices).operator bool() )
+ {
+ produce_CommentedRelations( i_ce, *dpIncludedServices,
+ C_sList_IncludedServices_Heading,
+ C_sList_IncludedServices_Label,
+ C_sList_IncludedServicesDetails_Heading,
+ C_sList_IncludedServicesDetails_Label,
+ doctype_complete );
+ pNaviSubRow->SwitchOn(sli_IncludedServicesDetails);
+ }
+
+ // - exported interfaces: details
+ ServiceAttr::Get_ExportedInterfaces(dpExportedInterfaces, i_ce);
+ if ( (*dpExportedInterfaces).operator bool() )
+ {
+ produce_CommentedRelations( i_ce, *dpExportedInterfaces,
+ C_sList_ExportedInterfaces_Heading,
+ C_sList_ExportedInterfaces_Label,
+ C_sList_ExportedInterfacesDetails_Heading,
+ C_sList_ExportedInterfacesDetails_Label,
+ doctype_complete );
+ pNaviSubRow->SwitchOn(sli_InterfacesDetails);
+ }
+
+ // supported properties: details
+ ServiceAttr::Get_Properties(dpProperties, i_ce);
+ if ( (*dpProperties).operator bool() )
+ {
+ produce_Members( *dpProperties,
+ C_sList_Properties,
+ C_sList_Properties_Label,
+ C_sList_PropertiesDetails,
+ C_sList_PropertiesDetails_Label,
+ viewtype_details );
+ pNaviSubRow->SwitchOn(sli_PropertiesDetails);
+ }
+
+ pNaviSubRow->Produce_Row();
+ CurOut() << new Xml::XmlCode("<br>&nbsp;");
+}
+
+typedef ary::idl::ifc_property::attr PropertyAttr;
+
+void
+HF_IdlService::produce_SummaryDeclaration( Xml::Element & o_row,
+ const client & i_property ) const
+{
+ // KORR_FUTURE
+ // Put this in to HF_IdlProperty!
+
+ Xml::Element &
+ rCell = o_row
+ >> *new Html::TableCell
+ << new Html::ClassAttr( C_sCellStyle_SummaryLeft );
+
+ if (PropertyAttr::HasAnyStereotype(i_property))
+ {
+ rCell << "[ ";
+ if (PropertyAttr::IsReadOnly(i_property))
+ rCell << "readonly ";
+ if (PropertyAttr::IsBound(i_property))
+ rCell << "bound ";
+ if (PropertyAttr::IsConstrained(i_property))
+ rCell << "constrained ";
+ if (PropertyAttr::IsMayBeAmbiguous(i_property))
+ rCell << "maybeambiguous ";
+ if (PropertyAttr::IsMayBeDefault(i_property))
+ rCell << "maybedefault ";
+ if (PropertyAttr::IsMayBeVoid(i_property))
+ rCell << "maybevoid ";
+ if (PropertyAttr::IsRemovable(i_property))
+ rCell << "removable ";
+ if (PropertyAttr::IsTransient(i_property))
+ rCell << "transient ";
+ rCell << "] ";
+ } // end if
+
+ HF_IdlTypeText
+ aType( Env(), rCell, true );
+ aType.Produce_byData( PropertyAttr::Type(i_property) );
+
+ StreamLock aLocalLink(100);
+ aLocalLink() << "#" << i_property.LocalName();
+ rCell
+ << new Html::LineBreak
+ >> *new Html::Link( aLocalLink().c_str() )
+ << i_property.LocalName();
+}
+
+DYN HF_NaviSubRow &
+HF_IdlService::make_Navibar( const client & i_ce ) const
+{
+ HF_IdlNavigationBar
+ aNaviBar(Env(), CurOut());
+ aNaviBar.Produce_CeMainRow(i_ce);
+
+ DYN HF_NaviSubRow &
+ ret = aNaviBar.Add_SubRow();
+ ret.AddItem(C_sList_IncludedServices, C_sList_IncludedServices_Label, false);
+ ret.AddItem(C_sList_ExportedInterfaces, C_sList_ExportedInterfaces_Label, false);
+ ret.AddItem(C_sList_Properties, C_sList_Properties_Label, false);
+ ret.AddItem(C_sList_IncludedServicesDetails, C_sList_IncludedServicesDetails_Label, false);
+ ret.AddItem(C_sList_ExportedInterfacesDetails, C_sList_ExportedInterfacesDetails_Label, false);
+ ret.AddItem(C_sList_PropertiesDetails, C_sList_PropertiesDetails_Label, false);
+
+ CurOut() << new Html::HorizontalLine();
+ return ret;
+}
+
+void
+HF_IdlService::produce_Link( Xml::Element & o_row,
+ type_id i_type ) const
+{
+ Xml::Element &
+ rCell = o_row
+ >> *new Html::TableCell
+ << new Html::ClassAttr(C_sCellStyle_SummaryLeft);
+ HF_IdlTypeText
+ aText(Env(), rCell, true);
+ aText.Produce_byData(i_type);
+}
+
+void
+HF_IdlService::produce_LinkSummary( const client & i_ce,
+ Xml::Element & o_row,
+ const comref & i_commentedRef ) const
+{
+ Xml::Element &
+ rCell = o_row
+ >> *new Html::TableCell
+ << new Html::ClassAttr(C_sCellStyle_SummaryRight);
+
+ HF_IdlCommentedRelationElement::produce_LinkDoc( Env(), i_ce, rCell, i_commentedRef, doctype_summaryOnly );
+}
+
+void
+HF_IdlService::produce_MemberDetails( HF_SubTitleTable & o_table,
+ const client & i_ce ) const
+{
+ HF_IdlProperty
+ aProperty( Env(), o_table);
+ aProperty.Produce_byData( i_ce );
+}
+
+
+
diff --git a/autodoc/source/display/idl/hfi_service.hxx b/autodoc/source/display/idl/hfi_service.hxx
new file mode 100644
index 000000000000..35e290c67157
--- /dev/null
+++ b/autodoc/source/display/idl/hfi_service.hxx
@@ -0,0 +1,99 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_DISPLAY_HFI_SERVICE_HXX
+#define ADC_DISPLAY_HFI_SERVICE_HXX
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include "hi_factory.hxx"
+ // COMPONENTS
+ // PARAMETERS
+#include <ary/idl/i_comrela.hxx>
+
+class HF_NaviSubRow;
+class HF_SubTitleTable;
+
+class HF_IdlService : public HtmlFactory_Idl
+{
+ public:
+ typedef ::ary::idl::CommentedRelation comref;
+ typedef ::ary::StdConstIterator< comref > comref_list;
+
+ HF_IdlService(
+ Environment & io_rEnv,
+ Xml::Element & o_rOut );
+ virtual ~HF_IdlService();
+
+ void Produce_byData(
+ const client & i_ce ) const;
+ private:
+ // Overwritten from HtmlFactory_Idl:
+ virtual void produce_SummaryDeclaration(
+ Xml::Element & o_row,
+ const client & i_ce ) const;
+
+ // Locals
+ DYN HF_NaviSubRow & make_Navibar(
+ const client & i_ce ) const;
+
+ void produce_Link(
+ Xml::Element & o_row,
+ type_id i_type ) const;
+ void produce_LinkSummary(
+ const client & i_ce,
+ Xml::Element & o_row,
+ const comref & i_commentedRef ) const;
+
+ void produce_MemberDetails( /// of property
+ HF_SubTitleTable & o_table,
+ const client & i_ce ) const;
+
+ void produce_CommentedRelations(
+ const client & i_ce,
+ comref_list & it_list,
+ const String & i_summaryTitle,
+ const String & i_summaryLabel,
+ const String & i_detailsTitle,
+ const String & i_detailsLabel,
+ const E_DocType i_docType ) const;
+
+};
+
+
+
+// IMPLEMENTATION
+
+extern const String
+ C_sCePrefix_Service;
+
+
+
+#endif
+
+
diff --git a/autodoc/source/display/idl/hfi_singleton.cxx b/autodoc/source/display/idl/hfi_singleton.cxx
new file mode 100644
index 000000000000..147fda4e2a19
--- /dev/null
+++ b/autodoc/source/display/idl/hfi_singleton.cxx
@@ -0,0 +1,133 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "hfi_singleton.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include <ary/idl/i_ce.hxx>
+#include <ary/idl/ik_singleton.hxx>
+#include <ary/idl/ik_sisingleton.hxx>
+#include <toolkit/hf_docentry.hxx>
+#include <toolkit/hf_linachain.hxx>
+#include <toolkit/hf_title.hxx>
+#include "hfi_navibar.hxx"
+#include "hfi_typetext.hxx"
+#include "hi_linkhelper.hxx"
+
+
+
+extern const String
+ C_sCePrefix_Singleton("singleton");
+
+const String
+ C_sAssociatedService("Associated Service");
+const String
+ C_sImplementedInterface("Supported Interface");
+
+
+
+HF_IdlSingleton::HF_IdlSingleton( Environment & io_rEnv,
+ Xml::Element & o_rOut )
+ : HtmlFactory_Idl(io_rEnv, &o_rOut)
+{
+}
+
+HF_IdlSingleton::~HF_IdlSingleton()
+{
+
+}
+
+typedef ::ary::idl::ifc_singleton::attr SingletonAttr;
+typedef ::ary::idl::ifc_sglifcsingleton::attr SglIfcSingletonAttr;
+
+void
+HF_IdlSingleton::Produce_byData_ServiceBased( const client & i_ce ) const
+{
+ make_Navibar(i_ce);
+
+ HF_TitleTable
+ aTitle(CurOut());
+
+ HF_LinkedNameChain
+ aNameChain(aTitle.Add_Row());
+
+ aNameChain.Produce_CompleteChain(Env().CurPosition(), nameChainLinker);
+ produce_Title(aTitle, C_sCePrefix_Singleton, i_ce);
+
+ HF_DocEntryList
+ aTopList( aTitle.Add_Row() );
+ aTopList.Produce_Term(C_sAssociatedService);
+
+ HF_IdlTypeText
+ aAssociatedService( Env(), aTopList.Produce_Definition(), true );
+ aAssociatedService.Produce_byData( SingletonAttr::AssociatedService(i_ce) );
+
+ CurOut() << new Html::HorizontalLine;
+
+ write_Docu(aTitle.Add_Row(), i_ce);
+ CurOut() << new Html::HorizontalLine();
+}
+
+void
+HF_IdlSingleton::Produce_byData_InterfaceBased( const client & i_ce ) const
+{
+ make_Navibar(i_ce);
+
+ HF_TitleTable
+ aTitle(CurOut());
+
+ HF_LinkedNameChain
+ aNameChain(aTitle.Add_Row());
+
+ aNameChain.Produce_CompleteChain(Env().CurPosition(), nameChainLinker);
+ produce_Title(aTitle, C_sCePrefix_Singleton, i_ce);
+
+ HF_DocEntryList
+ aTopList( aTitle.Add_Row() );
+ aTopList.Produce_Term(C_sImplementedInterface);
+
+ HF_IdlTypeText
+ aImplementedInterface( Env(), aTopList.Produce_Definition(), true );
+ aImplementedInterface.Produce_byData( SglIfcSingletonAttr::BaseInterface(i_ce) );
+
+ CurOut() << new Html::HorizontalLine;
+
+ write_Docu(aTitle.Add_Row(), i_ce);
+ CurOut() << new Html::HorizontalLine();
+}
+
+void
+HF_IdlSingleton::make_Navibar( const client & i_ce ) const
+{
+ HF_IdlNavigationBar
+ aNaviBar(Env(), CurOut());
+ aNaviBar.Produce_CeMainRow(i_ce,true); // true := avoid link to Use-page.
+
+ CurOut() << new Html::HorizontalLine();
+}
diff --git a/autodoc/source/display/idl/hfi_singleton.hxx b/autodoc/source/display/idl/hfi_singleton.hxx
new file mode 100644
index 000000000000..4cbb1dc00cff
--- /dev/null
+++ b/autodoc/source/display/idl/hfi_singleton.hxx
@@ -0,0 +1,69 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_DISPLAY_HFI_SINGLETON_HXX
+#define ADC_DISPLAY_HFI_SINGLETON_HXX
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include "hi_factory.hxx"
+ // COMPONENTS
+ // PARAMETERS
+
+class HF_NaviSubRow;
+
+
+class HF_IdlSingleton : public HtmlFactory_Idl
+{
+ public:
+ HF_IdlSingleton(
+ Environment & io_rEnv,
+ Xml::Element & o_rOut );
+ virtual ~HF_IdlSingleton();
+
+ void Produce_byData_ServiceBased(
+ const client & i_ce ) const;
+ void Produce_byData_InterfaceBased(
+ const client & i_ce ) const;
+ private:
+ void make_Navibar(
+ const client & i_ce ) const;
+};
+
+
+
+// IMPLEMENTATION
+
+extern const String
+ C_sCePrefix_Singleton;
+
+
+
+#endif
+
+
diff --git a/autodoc/source/display/idl/hfi_siservice.cxx b/autodoc/source/display/idl/hfi_siservice.cxx
new file mode 100644
index 000000000000..127f609ded9b
--- /dev/null
+++ b/autodoc/source/display/idl/hfi_siservice.cxx
@@ -0,0 +1,175 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "hfi_siservice.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include <ary/idl/i_ce.hxx>
+#include <ary/idl/ik_function.hxx>
+#include <ary/idl/ik_siservice.hxx>
+#include <ary/doc/d_oldidldocu.hxx>
+#include <toolkit/hf_docentry.hxx>
+#include <toolkit/hf_linachain.hxx>
+#include <toolkit/hf_navi_sub.hxx>
+#include <toolkit/hf_title.hxx>
+#include "hfi_doc.hxx"
+#include "hfi_method.hxx"
+#include "hfi_navibar.hxx"
+#include "hfi_typetext.hxx"
+#include "hi_env.hxx"
+#include "hi_linkhelper.hxx"
+
+
+
+namespace
+{
+
+const String
+ C_sImplementedInterface("Supported Interface");
+
+const String
+ C_sList_Constructors("Constructors' Summary");
+const String
+ C_sList_Constructors_Label("ConstructorsSummary");
+const String
+ C_sDetails_Constructors("Constructors' Details");
+const String
+ C_sDetails_Constructors_Label("ConstructorsDetails");
+
+
+enum E_SubListIndices
+{
+ sli_ConstructorsSummary = 0,
+ sli_ConstructorsDetails = 1
+};
+
+} //anonymous namespace
+
+
+HF_IdlSglIfcService::HF_IdlSglIfcService( Environment & io_rEnv,
+ Xml::Element & o_rOut )
+ : HtmlFactory_Idl(io_rEnv, &o_rOut)
+{
+}
+
+HF_IdlSglIfcService::~HF_IdlSglIfcService()
+{
+}
+
+typedef ::ary::idl::ifc_sglifcservice::attr SglIfcServiceAttr;
+
+void
+HF_IdlSglIfcService::Produce_byData( const client & i_ce ) const
+{
+ Dyn<HF_NaviSubRow>
+ pNaviSubRow( &make_Navibar(i_ce) );
+
+ HF_TitleTable
+ aTitle(CurOut());
+ HF_LinkedNameChain
+ aNameChain(aTitle.Add_Row());
+
+ aNameChain.Produce_CompleteChain(Env().CurPosition(), nameChainLinker);
+ produce_Title(aTitle, C_sCePrefix_Service, i_ce);
+
+ HF_DocEntryList
+ aTopList( aTitle.Add_Row() );
+ aTopList.Produce_Term(C_sImplementedInterface);
+
+ HF_IdlTypeText
+ aImplementedInterface( Env(), aTopList.Produce_Definition(), true, &i_ce);
+ aImplementedInterface.Produce_byData( SglIfcServiceAttr::BaseInterface(i_ce) );
+
+ CurOut() << new Html::HorizontalLine;
+
+ write_Docu(aTitle.Add_Row(), i_ce);
+ CurOut() << new Html::HorizontalLine();
+
+ dyn_ce_list
+ dpConstructors;
+ SglIfcServiceAttr::Get_Constructors(dpConstructors, i_ce);
+ if ( (*dpConstructors).operator bool() )
+ {
+ produce_Members( *dpConstructors,
+ C_sList_Constructors,
+ C_sList_Constructors_Label,
+ C_sDetails_Constructors,
+ C_sDetails_Constructors_Label );
+ pNaviSubRow->SwitchOn(sli_ConstructorsSummary);
+ pNaviSubRow->SwitchOn(sli_ConstructorsDetails);
+ }
+
+ pNaviSubRow->Produce_Row();
+ CurOut() << new Xml::XmlCode("<br>&nbsp;");
+}
+
+DYN HF_NaviSubRow &
+HF_IdlSglIfcService::make_Navibar( const client & i_ce ) const
+{
+ HF_IdlNavigationBar
+ aNaviBar(Env(), CurOut());
+ aNaviBar.Produce_CeMainRow(i_ce, true);
+
+ DYN HF_NaviSubRow &
+ ret = aNaviBar.Add_SubRow();
+ ret.AddItem(C_sList_Constructors, C_sList_Constructors_Label, false);
+ ret.AddItem(C_sDetails_Constructors, C_sDetails_Constructors_Label, false);
+
+ CurOut() << new Html::HorizontalLine();
+ return ret;
+}
+
+typedef ary::idl::ifc_function::attr funcAttr;
+
+void
+HF_IdlSglIfcService::produce_MemberDetails( HF_SubTitleTable & o_table,
+ const client & i_ce ) const
+{
+ HF_IdlMethod
+ aConstructor( Env(),
+ o_table.Add_Row()
+ >> *new Html::TableCell
+ << new Html::ClassAttr(C_sCellStyle_MDetail) );
+
+ ary::Dyn_StdConstIterator<ary::idl::Parameter>
+ pParameters;
+ funcAttr::Get_Parameters(pParameters, i_ce);
+
+ ary::Dyn_StdConstIterator<ary::idl::Type_id>
+ pExceptions;
+ funcAttr::Get_Exceptions(pExceptions, i_ce);
+
+ aConstructor.Produce_byData( i_ce.LocalName(),
+ funcAttr::ReturnType(i_ce),
+ *pParameters,
+ *pExceptions,
+ funcAttr::IsOneway(i_ce),
+ funcAttr::HasEllipse(i_ce),
+ i_ce );
+}
diff --git a/autodoc/source/display/idl/hfi_siservice.hxx b/autodoc/source/display/idl/hfi_siservice.hxx
new file mode 100644
index 000000000000..c7a0b62e1b38
--- /dev/null
+++ b/autodoc/source/display/idl/hfi_siservice.hxx
@@ -0,0 +1,72 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_DISPLAY_HFI_SISERVICE_HXX
+#define ADC_DISPLAY_HFI_SISERVICE_HXX
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include "hi_factory.hxx"
+ // COMPONENTS
+ // PARAMETERS
+#include <ary/idl/i_comrela.hxx>
+
+class HF_NaviSubRow;
+class HF_SubTitleTable;
+
+class HF_IdlSglIfcService : public HtmlFactory_Idl
+{
+ public:
+ HF_IdlSglIfcService(
+ Environment & io_rEnv,
+ Xml::Element & o_rOut );
+ virtual ~HF_IdlSglIfcService();
+
+ void Produce_byData(
+ const client & i_ce ) const;
+ private:
+ DYN HF_NaviSubRow & make_Navibar(
+ const client & i_ce ) const;
+
+ void produce_MemberDetails(
+ HF_SubTitleTable & o_table,
+ const client & i_ce ) const;
+};
+
+
+
+// IMPLEMENTATION
+
+extern const String
+ C_sCePrefix_Service;
+
+
+
+#endif
+
+
diff --git a/autodoc/source/display/idl/hfi_struct.cxx b/autodoc/source/display/idl/hfi_struct.cxx
new file mode 100644
index 000000000000..6c98f3a5cef0
--- /dev/null
+++ b/autodoc/source/display/idl/hfi_struct.cxx
@@ -0,0 +1,203 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "hfi_struct.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include <ary/idl/i_ce.hxx>
+#include <ary/idl/i_struct.hxx>
+#include <ary/idl/ik_exception.hxx>
+#include <ary/idl/ik_struct.hxx>
+#include <toolkit/hf_docentry.hxx>
+#include <toolkit/hf_linachain.hxx>
+#include <toolkit/hf_navi_sub.hxx>
+#include <toolkit/hf_title.hxx>
+#include "hfi_navibar.hxx"
+#include "hfi_property.hxx"
+#include "hfi_typetext.hxx"
+#include "hi_linkhelper.hxx"
+
+
+extern const String
+ C_sCePrefix_Struct("struct");
+extern const String
+ C_sCePrefix_Exception("exception");
+
+
+namespace
+{
+
+const String
+ C_sBaseStruct("Base Hierarchy");
+const String
+ C_sBaseException("Base Hierarchy");
+
+const String
+ C_sList_Elements("Elements' Summary");
+const String
+ C_sList_Elements_Label("Elements");
+
+const String
+ C_sList_ElementDetails("Elements' Details");
+const String
+ C_sList_ElementDetails_Label("ElementDetails");
+
+enum E_SubListIndices
+{
+ sli_ElementsSummary = 0,
+ sli_ElementsDetails = 1
+};
+
+} // anonymous namespace
+
+
+
+HF_IdlStruct::HF_IdlStruct( Environment & io_rEnv,
+ Xml::Element & o_rOut,
+ bool i_bIsException )
+ : HtmlFactory_Idl(io_rEnv, &o_rOut),
+ bIsException(i_bIsException)
+{
+}
+
+HF_IdlStruct::~HF_IdlStruct()
+{
+}
+
+void
+HF_IdlStruct::Produce_byData( const client & i_ce ) const
+{
+ const ary::idl::Struct *
+ pStruct =
+ bIsException
+ ? 0
+ : static_cast< const ary::idl::Struct* >(&i_ce);
+ bool bIsTemplate =
+ pStruct != 0
+ ? pStruct->TemplateParameterType().IsValid()
+ : false;
+
+ Dyn<HF_NaviSubRow>
+ pNaviSubRow( &make_Navibar(i_ce) );
+
+ HF_TitleTable
+ aTitle(CurOut());
+ HF_LinkedNameChain
+ aNameChain(aTitle.Add_Row());
+
+ aNameChain.Produce_CompleteChain(Env().CurPosition(), nameChainLinker);
+
+ // Title:
+ StreamLock
+ slAnnotations(200);
+ get_Annotations(slAnnotations(), i_ce);
+
+ StreamLock rTitle(200);
+ if (bIsTemplate)
+ rTitle() << "template ";
+ rTitle()
+ << (bIsException
+ ? C_sCePrefix_Exception
+ : C_sCePrefix_Struct)
+ << " "
+ << i_ce.LocalName();
+ if (bIsTemplate)
+ {
+ csv_assert(pStruct != 0);
+ rTitle()
+ << "<"
+ << pStruct->TemplateParameter()
+ << ">";
+ }
+ aTitle.Produce_Title(slAnnotations().c_str(), rTitle().c_str());
+
+ // Bases:
+ produce_Bases( aTitle.Add_Row(),
+ i_ce,
+ bIsException
+ ? C_sBaseException
+ : C_sBaseStruct );
+
+ // Docu:
+ write_Docu(aTitle.Add_Row(), i_ce);
+ CurOut() << new Html::HorizontalLine();
+
+ // Elements:
+ dyn_ce_list
+ dpElements;
+ if (bIsException)
+ ary::idl::ifc_exception::attr::Get_Elements(dpElements, i_ce);
+ else
+ ary::idl::ifc_struct::attr::Get_Elements(dpElements, i_ce);
+
+ if ( (*dpElements).operator bool() )
+ {
+ produce_Members( *dpElements,
+ C_sList_Elements,
+ C_sList_Elements_Label,
+ C_sList_ElementDetails,
+ C_sList_ElementDetails_Label );
+ pNaviSubRow->SwitchOn(sli_ElementsSummary);
+ pNaviSubRow->SwitchOn(sli_ElementsDetails);
+ }
+ pNaviSubRow->Produce_Row();
+}
+
+HtmlFactory_Idl::type_id
+HF_IdlStruct::inq_BaseOf( const client & i_ce ) const
+{
+ return bIsException
+ ? ary::idl::ifc_exception::attr::Base(i_ce)
+ : ary::idl::ifc_struct::attr::Base(i_ce);
+}
+
+HF_NaviSubRow &
+HF_IdlStruct::make_Navibar( const client & i_ce ) const
+{
+ HF_IdlNavigationBar
+ aNaviBar(Env(), CurOut());
+ aNaviBar.Produce_CeMainRow(i_ce);
+
+ DYN HF_NaviSubRow &
+ ret = aNaviBar.Add_SubRow();
+ ret.AddItem(C_sList_Elements, C_sList_Elements_Label, false);
+ ret.AddItem(C_sList_ElementDetails, C_sList_ElementDetails_Label, false);
+
+ CurOut() << new Html::HorizontalLine();
+ return ret;
+}
+
+void
+HF_IdlStruct::produce_MemberDetails( HF_SubTitleTable & o_table,
+ const client & i_ce) const
+{
+ HF_IdlStructElement
+ aElement( Env(), o_table );
+ aElement.Produce_byData(i_ce);
+}
diff --git a/autodoc/source/display/idl/hfi_struct.hxx b/autodoc/source/display/idl/hfi_struct.hxx
new file mode 100644
index 000000000000..e3a98dddac1e
--- /dev/null
+++ b/autodoc/source/display/idl/hfi_struct.hxx
@@ -0,0 +1,78 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_DISPLAY_HFI_STRUCT_HXX
+#define ADC_DISPLAY_HFI_STRUCT_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include "hi_factory.hxx"
+ // COMPONENTS
+ // PARAMETERS
+
+/** Is used to display ->ary::idl::Exception s as well as ->ary::idl::Struct s.
+*/
+class HF_IdlStruct : public HtmlFactory_Idl
+{
+ public:
+
+ HF_IdlStruct(
+ Environment & io_rEnv,
+ Xml::Element & o_rOut,
+ bool i_bIsException );
+ virtual ~HF_IdlStruct();
+
+ void Produce_byData(
+ const client & ce ) const;
+ private:
+ // Interface HtmlFactory_Idl:
+ virtual type_id inq_BaseOf(
+ const client & i_ce ) const;
+ // Locals
+ HF_NaviSubRow & make_Navibar(
+ const client & ce ) const;
+ virtual void produce_MemberDetails(
+ HF_SubTitleTable & o_table,
+ const client & ce ) const;
+ // DATA
+ bool bIsException;
+};
+
+
+
+// IMPLEMENTATION
+
+
+extern const String
+ C_sCePrefix_Struct;
+extern const String
+ C_sCePrefix_Exception;
+
+
+#endif
diff --git a/autodoc/source/display/idl/hfi_tag.cxx b/autodoc/source/display/idl/hfi_tag.cxx
new file mode 100644
index 000000000000..78c913db3b99
--- /dev/null
+++ b/autodoc/source/display/idl/hfi_tag.cxx
@@ -0,0 +1,354 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "hfi_tag.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include <ary/idl/i_ce.hxx>
+#include <ary/idl/i_module.hxx>
+#include <ary_i/ci_text2.hxx>
+#include <ary_i/d_token.hxx>
+#include <toolkit/out_tree.hxx>
+#include <adc_cl.hxx>
+#include <adc_msg.hxx>
+#include "hfi_typetext.hxx"
+#include "hi_ary.hxx"
+#include "hi_env.hxx"
+#include "hi_linkhelper.hxx"
+
+
+using ary::inf::DocuTex2;
+
+
+inline void
+HF_IdlTag::Enter_TextOut( Xml::Element & o_rText ) const
+{
+ aTextOut.Out().Enter(o_rText);
+}
+
+inline void
+HF_IdlTag::Leave_TextOut() const
+{
+ aTextOut.Out().Leave();
+}
+
+inline void
+HF_IdlTag::PutText_Out( const ary::inf::DocuTex2 & i_rText ) const
+{
+ i_rText.DisplayAt( const_cast< HF_IdlDocuTextDisplay& >(aTextOut) );
+}
+
+
+
+HF_IdlTag::HF_IdlTag( Environment & io_rEnv,
+ const ary::idl::CodeEntity & i_rScopeGivingCe )
+ : HtmlFactory_Idl( io_rEnv, 0 ),
+ pTitleOut(0),
+ aTextOut(io_rEnv, 0, i_rScopeGivingCe)
+{
+}
+
+HF_IdlTag::~HF_IdlTag()
+{
+}
+
+void
+HF_IdlTag::Produce_byData( Xml::Element & o_rTitle,
+ Xml::Element & o_rText,
+ const ary::inf::AtTag2 & i_rTag ) const
+{
+ pTitleOut = &o_rTitle;
+ Enter_TextOut(o_rText);
+ i_rTag.DisplayAt( const_cast< HF_IdlTag& >(*this) );
+ Leave_TextOut();
+}
+
+void
+HF_IdlTag::Produce_byData( Xml::Element & o_rTitle,
+ Xml::Element & o_rText,
+ const std::vector< csi::dsapi::DT_SeeAlsoAtTag* > &
+ i_seeAlsoVector ) const
+{
+ o_rTitle << "See also";
+ for ( std::vector< csi::dsapi::DT_SeeAlsoAtTag* >::const_iterator
+ it = i_seeAlsoVector.begin();
+ it != i_seeAlsoVector.end();
+ ++it )
+ {
+ if (it != i_seeAlsoVector.begin())
+ {
+ o_rText << ", ";
+ }
+ HF_IdlTypeText
+ aLinkText(Env(), o_rText, true, &aTextOut.ScopeGivingCe());
+ aLinkText.Produce_byData( (*it)->LinkText() );
+ }
+}
+
+void
+HF_IdlTag::Display_StdAtTag( const csi::dsapi::DT_StdAtTag & i_rTag )
+{
+ if ( i_rTag.Text().IsEmpty() )
+ return;
+
+ csv_assert( pTitleOut != 0 );
+ *pTitleOut << i_rTag.Title();
+ PutText_Out( i_rTag.Text() );
+}
+
+void
+HF_IdlTag::Display_SeeAlsoAtTag( const csi::dsapi::DT_SeeAlsoAtTag & i_rTag )
+{
+ if ( i_rTag.Text().IsEmpty() )
+ return;
+
+ csv_assert( pTitleOut != 0 );
+ *pTitleOut << "See also";
+
+ HF_IdlTypeText aLinkText(Env(),aTextOut.CurOut(),true, &aTextOut.ScopeGivingCe());
+ aLinkText.Produce_byData( i_rTag.LinkText() );
+
+ aTextOut.CurOut() << new Html::LineBreak;
+ PutText_Out( i_rTag.Text() );
+}
+
+void
+HF_IdlTag::Display_ParameterAtTag( const csi::dsapi::DT_ParameterAtTag & i_rTag )
+{
+ csv_assert( pTitleOut != 0 );
+ StreamLock sl(100);
+ *pTitleOut
+ << ( sl() << "Parameter " << i_rTag.Title() << c_str );
+ PutText_Out( i_rTag.Text() );
+}
+
+void
+HF_IdlTag::Display_SinceAtTag( const csi::dsapi::DT_SinceAtTag & i_rTag )
+{
+ csv_assert(pTitleOut != 0);
+
+ if ( i_rTag.Text().IsEmpty() )
+ {
+ return;
+ }
+
+ // Transform the value of the @since tag into the text to be displayed.
+ String sDisplay =
+ autodoc::CommandLine::Get_().DisplayOf_SinceTagValue(
+ i_rTag.Text().TextOfFirstToken() );
+ if (sDisplay.empty())
+ return;
+
+ *pTitleOut << "Since ";
+ DocuTex2 aHelp;
+ aHelp.AddToken(* new csi::dsapi::DT_TextToken(sDisplay));
+ PutText_Out(aHelp);
+}
+
+
+//******************** HF_IdlShortDocu *********************/
+
+HF_IdlShortDocu::HF_IdlShortDocu( Environment & io_rEnv,
+ Xml::Element & o_rOut )
+ : HtmlFactory_Idl( io_rEnv, &o_rOut )
+{
+}
+
+HF_IdlShortDocu::~HF_IdlShortDocu()
+{
+}
+
+void
+HF_IdlShortDocu::Produce_byData( const ary::idl::CodeEntity & i_rCe )
+{
+ const ce_info *
+ pDocu = Get_IdlDocu(i_rCe.Docu());
+ if (pDocu == 0)
+ return;
+
+ const ce_info &
+ rDocu = *pDocu;
+ if ( rDocu.IsDeprecated() )
+ {
+ CurOut()
+ >> *new Html::Bold
+ << "[ DEPRECATED ]" << new Html::LineBreak;
+ }
+ if ( rDocu.IsOptional() )
+ {
+ CurOut()
+ >> *new Html::Bold
+ << "[ OPTIONAL ]" << new Html::LineBreak;
+ }
+
+ HF_IdlDocuTextDisplay
+ aText( Env(), &CurOut(), i_rCe);
+ rDocu.Short().DisplayAt(aText);
+}
+
+
+//******************** HF_IdlDocuTextDisplay *********************/
+
+
+HF_IdlDocuTextDisplay::HF_IdlDocuTextDisplay( Environment & io_rEnv,
+ Xml::Element * o_pOut,
+ const ary::idl::CodeEntity & i_rScopeGivingCe )
+ : HtmlFactory_Idl(io_rEnv, o_pOut),
+ sScope(),
+ sLinkToken(),
+ bGatherLink(false),
+ pScopeGivingCe(&i_rScopeGivingCe)
+{
+}
+
+HF_IdlDocuTextDisplay::~HF_IdlDocuTextDisplay()
+{
+}
+
+void
+HF_IdlDocuTextDisplay::Display_TextToken( const csi::dsapi::DT_TextToken & i_rToken )
+{
+ if (bGatherLink)
+ {
+ if (sLinkToken.length() == 0)
+ {
+ sLinkToken = i_rToken.GetText();
+ return;
+ }
+ else
+ {
+ if ( pScopeGivingCe == 0 )
+ { // only in original file
+ TheMessages().Out_TypeVsMemberMisuse(sLinkToken, Env().CurPageCe_AsText(), 0);
+ }
+
+ StopLinkGathering();
+ }
+ } // endif (bGatherLink)
+
+ CurOut() << new Xml::XmlCode( i_rToken.GetText() );
+}
+
+void
+HF_IdlDocuTextDisplay::Display_White()
+{
+ CurOut() << " ";
+}
+
+void
+HF_IdlDocuTextDisplay::Display_MupType( const csi::dsapi::DT_MupType & i_rToken )
+{
+ if (i_rToken.IsBegin())
+ {
+ StartLinkGathering(i_rToken.Scope());
+ }
+ else
+ {
+ if (bGatherLink)
+ {
+ CreateTypeLink();
+ StopLinkGathering();
+ }
+ }
+}
+
+void
+HF_IdlDocuTextDisplay::Display_MupMember( const csi::dsapi::DT_MupMember & i_rToken )
+{
+ if (i_rToken.IsBegin())
+ {
+ StartLinkGathering(i_rToken.Scope());
+ }
+ else
+ {
+ if (bGatherLink)
+ {
+ CreateMemberLink();
+ StopLinkGathering();
+ }
+ }
+}
+
+void
+HF_IdlDocuTextDisplay::Display_MupConst( const csi::dsapi::DT_MupConst & i_rToken )
+{
+ CurOut()
+ >> *new Html::Bold
+ << i_rToken.GetText();
+}
+
+void
+HF_IdlDocuTextDisplay::Display_Style( const csi::dsapi::DT_Style & i_rToken )
+{
+ CurOut() << new Xml::XmlCode( i_rToken.GetText() );
+}
+
+void
+HF_IdlDocuTextDisplay::Display_EOL()
+{
+ CurOut() << "\n";
+}
+
+void
+HF_IdlDocuTextDisplay::CreateTypeLink()
+{
+ if (strchr(sLinkToken,':') != 0)
+ {
+ TheMessages().Out_TypeVsMemberMisuse(sLinkToken, Env().CurPageCe_AsFile(".idl"), 0);
+ CurOut() << sLinkToken;
+ return;
+ }
+ HF_IdlTypeText aLink(Env(), CurOut(), true, &ScopeGivingCe());
+ aLink.Produce_LinkInDocu(sScope, sLinkToken, String::Null_());
+}
+
+void
+HF_IdlDocuTextDisplay::CreateMemberLink()
+{
+
+ HF_IdlTypeText aLink(Env(), CurOut(), true, &ScopeGivingCe());
+
+ const char *
+ sSplit = strchr(sLinkToken,':');
+
+ if (sSplit != 0)
+ {
+ String sCe(sLinkToken.c_str(), sSplit - sLinkToken.c_str());
+ String sMember(sSplit+2);
+
+ if (NOT sScope.empty() OR ScopeGivingCe().LocalName() != sCe )
+ aLink.Produce_LinkInDocu(sScope, sCe, sMember);
+ else
+ aLink.Produce_LocalLinkInDocu(sMember);
+ }
+ else
+ {
+ aLink.Produce_LocalLinkInDocu(sLinkToken);
+ }
+}
diff --git a/autodoc/source/display/idl/hfi_tag.hxx b/autodoc/source/display/idl/hfi_tag.hxx
new file mode 100644
index 000000000000..1d09d21f8c12
--- /dev/null
+++ b/autodoc/source/display/idl/hfi_tag.hxx
@@ -0,0 +1,177 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_DISPLAY_HFI_TAG_HXX
+#define ADC_DISPLAY_HFI_TAG_HXX
+
+// BASE CLASSES
+#include "hi_factory.hxx"
+#include <ary_i/disdocum.hxx>
+// USED SERVICES
+#include <ary/idl/i_types4idl.hxx>
+#include <ary_i/ci_atag2.hxx>
+#include <ary_i/ci_text2.hxx>
+#include <ary/doc/d_oldidldocu.hxx>
+
+#include <toolkit/hf_docentry.hxx>
+
+namespace ary
+{
+namespace idl
+{
+ class Module;
+}
+}
+
+
+
+
+/** This class is an implementation of ary::inf::DocuText_Display
+ and will be used by that interface.
+*/
+class HF_IdlDocuTextDisplay : public HtmlFactory_Idl,
+ public ary::inf::DocuText_Display
+{
+ public:
+ HF_IdlDocuTextDisplay(
+ Environment & io_rEnv,
+ Xml::Element * o_pOut,
+ const ary::idl::CodeEntity &
+ i_rScopeGivingCe );
+ virtual ~HF_IdlDocuTextDisplay();
+
+ const ary::idl::CodeEntity &
+ ScopeGivingCe() const { return *pScopeGivingCe; }
+ private:
+ virtual void Display_TextToken(
+ const csi::dsapi::DT_TextToken &
+ i_rToken );
+ virtual void Display_White();
+
+ virtual void Display_MupType(
+ const csi::dsapi::DT_MupType &
+ i_rToken );
+ virtual void Display_MupMember(
+ const csi::dsapi::DT_MupMember &
+ i_rToken );
+ virtual void Display_MupConst(
+ const csi::dsapi::DT_MupConst &
+ i_rToken );
+ virtual void Display_Style(
+ const csi::dsapi::DT_Style & i_rToken );
+ virtual void Display_EOL();
+
+ // Local
+ void StartLinkGathering(
+ const String & i_sScope )
+ { sLinkToken = ""; sScope = i_sScope; bGatherLink = true; }
+ void StopLinkGathering() { bGatherLink = false; }
+ /** @precond
+ The scope is in sScope, the name is in sLinkToken.
+ */
+ void CreateTypeLink();
+ /** @precond
+ The scope is in sScope, the qualified member-name is in sLinkToken.
+ */
+ void CreateMemberLink();
+
+ // DATA
+ String sScope;
+ String sLinkToken;
+ bool bGatherLink;
+ const ary::idl::CodeEntity *
+ pScopeGivingCe;
+};
+
+
+
+class HF_IdlShortDocu : public HtmlFactory_Idl
+{
+ public:
+ HF_IdlShortDocu(
+ Environment & io_rEnv,
+ Xml::Element & o_rOut );
+ virtual ~HF_IdlShortDocu();
+
+ void Produce_byData(
+ const ary::idl::CodeEntity &
+ i_rCe );
+};
+
+
+
+class HF_IdlTag : public HtmlFactory_Idl,
+ public ary::inf::DocuTag_Display
+{
+ public:
+ HF_IdlTag(
+ Environment & io_rEnv,
+ const ary::idl::CodeEntity &
+ i_rScopeGivingCe );
+ virtual ~HF_IdlTag();
+
+ void Produce_byData(
+ Xml::Element & o_rTitle,
+ Xml::Element & o_rText,
+ const ary::inf::AtTag2 &
+ i_rTag ) const;
+ void Produce_byData(
+ Xml::Element & o_rTitle,
+ Xml::Element & o_rText,
+ const std::vector< csi::dsapi::DT_SeeAlsoAtTag* > &
+ i_seeAlsoVector ) const;
+ private:
+ virtual void Display_StdAtTag(
+ const csi::dsapi::DT_StdAtTag &
+ i_rToken );
+ virtual void Display_SeeAlsoAtTag(
+ const csi::dsapi::DT_SeeAlsoAtTag &
+ i_rToken );
+ virtual void Display_ParameterAtTag(
+ const csi::dsapi::DT_ParameterAtTag &
+ i_rToken );
+ virtual void Display_SinceAtTag(
+ const csi::dsapi::DT_SinceAtTag &
+ i_rToken );
+
+ void Enter_TextOut(
+ Xml::Element & o_rText ) const;
+ void Leave_TextOut() const;
+ void PutText_Out(
+ const ary::inf::DocuTex2 &
+ i_rText ) const;
+ // DATA
+ mutable Xml::Element *
+ pTitleOut;
+ mutable HF_IdlDocuTextDisplay
+ aTextOut;
+};
+
+
+
+
+#endif
diff --git a/autodoc/source/display/idl/hfi_typedef.cxx b/autodoc/source/display/idl/hfi_typedef.cxx
new file mode 100644
index 000000000000..3146be05468f
--- /dev/null
+++ b/autodoc/source/display/idl/hfi_typedef.cxx
@@ -0,0 +1,92 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "hfi_typedef.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include <ary/idl/i_ce.hxx>
+#include <ary/idl/ik_typedef.hxx>
+#include <toolkit/hf_docentry.hxx>
+#include <toolkit/hf_linachain.hxx>
+#include <toolkit/hf_title.hxx>
+#include "hfi_navibar.hxx"
+#include "hfi_typetext.hxx"
+#include "hi_linkhelper.hxx"
+
+
+
+HF_IdlTypedef::HF_IdlTypedef( Environment & io_rEnv,
+ Xml::Element & o_rOut )
+ : HtmlFactory_Idl(io_rEnv, &o_rOut)
+{
+}
+
+HF_IdlTypedef::~HF_IdlTypedef()
+{
+}
+
+typedef ary::idl::ifc_typedef::attr TypedefAttr;
+
+void
+HF_IdlTypedef::Produce_byData( const client & i_ce ) const
+{
+ make_Navibar(i_ce);
+
+ HF_TitleTable
+ aTitle(CurOut());
+
+ HF_LinkedNameChain
+ aNameChain(aTitle.Add_Row());
+
+ aNameChain.Produce_CompleteChain(Env().CurPosition(), nameChainLinker);
+ produce_Title(aTitle, C_sCePrefix_Typedef, i_ce);
+
+ HF_DocEntryList
+ aTopList( aTitle.Add_Row() );
+ aTopList.Produce_Term("Defining Type");
+
+ HF_IdlTypeText
+ aDefinition( Env(), aTopList.Produce_Definition(), true );
+ aDefinition.Produce_byData( TypedefAttr::DefiningType(i_ce) );
+
+ CurOut() << new Html::HorizontalLine;
+
+ write_Docu(aTitle.Add_Row(), i_ce);
+ CurOut() << new Html::HorizontalLine();
+}
+
+void
+HF_IdlTypedef::make_Navibar( const client & i_ce ) const
+{
+ HF_IdlNavigationBar
+ aNaviBar(Env(), CurOut());
+ aNaviBar.Produce_CeMainRow(i_ce);
+
+ CurOut() << new Html::HorizontalLine();
+}
diff --git a/autodoc/source/display/idl/hfi_typedef.hxx b/autodoc/source/display/idl/hfi_typedef.hxx
new file mode 100644
index 000000000000..59c36baf3bb8
--- /dev/null
+++ b/autodoc/source/display/idl/hfi_typedef.hxx
@@ -0,0 +1,65 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_DISPLAY_HFI_TYPEDEF_HXX
+#define ADC_DISPLAY_HFI_TYPEDEF_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include "hi_factory.hxx"
+ // COMPONENTS
+ // PARAMETERS
+
+
+class HF_IdlTypedef : public HtmlFactory_Idl
+{
+ public:
+ HF_IdlTypedef(
+ Environment & io_rEnv,
+ Xml::Element & o_rOut );
+ virtual ~HF_IdlTypedef();
+
+ void Produce_byData(
+ const client & ce ) const;
+ private:
+ void make_Navibar(
+ const client & ce ) const;
+};
+
+
+
+// IMPLEMENTATION
+
+
+const String
+ C_sCePrefix_Typedef("typedef");
+
+#endif
+
+
diff --git a/autodoc/source/display/idl/hfi_typetext.cxx b/autodoc/source/display/idl/hfi_typetext.cxx
new file mode 100644
index 000000000000..6927308e677e
--- /dev/null
+++ b/autodoc/source/display/idl/hfi_typetext.cxx
@@ -0,0 +1,757 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "hfi_typetext.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include <string.h>
+#include <ary/idl/i_type.hxx>
+#include <ary/idl/i_ce.hxx>
+#include <ary/idl/i_module.hxx>
+#include <ary/idl/i_module.hxx>
+#include <ary/idl/ik_ce.hxx>
+#include <adc_cl.hxx>
+#include <adc_msg.hxx>
+#include "hi_linkhelper.hxx"
+
+
+
+
+
+
+inline const ary::idl::Module *
+HF_IdlTypeText::referingModule() const
+{
+ if (pReferingCe == 0)
+ return Env().Linker().Search_CurModule();
+ else
+ return &Env().Data().Find_Module(pReferingCe->NameRoom());
+}
+
+inline const HF_IdlTypeText::client *
+HF_IdlTypeText::referingCe() const
+{
+ return pReferingCe;
+}
+
+
+HF_IdlTypeText::HF_IdlTypeText( Environment & io_rEnv,
+ Xml::Element & o_rOut,
+ bool i_bWithLink,
+ const client * i_pScopeGivingCe )
+ : HtmlFactory_Idl(io_rEnv, &o_rOut),
+ pReferingCe( i_pScopeGivingCe ),
+ bWithLink(i_bWithLink)
+{
+}
+
+HF_IdlTypeText::HF_IdlTypeText( Environment & io_rEnv,
+ E_Index )
+ : HtmlFactory_Idl(io_rEnv, 0),
+ pReferingCe( 0 ),
+ bWithLink(true)
+{
+}
+
+HF_IdlTypeText::~HF_IdlTypeText()
+{
+}
+
+void
+HF_IdlTypeText::Produce_byData(ary::idl::Type_id i_idType) const
+{
+ StringVector aModule_;
+ String sName;
+ ce_id nCe;
+ int nSequenceCount = 0;
+ csv::erase_container(aModule_);
+
+ const ary::idl::Type &
+ rType = Env().Data().Find_Type(i_idType);
+ Env().Data().Get_TypeText(aModule_, sName, nCe, nSequenceCount, rType);
+
+ if ( Env().Data().IsBuiltInOrRelated(rType) )
+ {
+ produce_BuiltIn(sName,nSequenceCount);
+ }
+ else
+ {
+ produce_FromStd( aModule_,
+ sName,
+ String::Null_(),
+ nSequenceCount,
+ (nCe.IsValid() ? exists_yes : exists_no),
+ rType.FirstEnclosedNonSequenceType(Env().Gate()).TemplateParameters() );
+ }
+}
+
+void
+HF_IdlTypeText::Produce_byData( ary::idl::Ce_id i_idCe ) const
+{
+ StringVector aModule_;
+ String sCe;
+ String sMember;
+ csv::erase_container(aModule_);
+
+ const ary::idl::CodeEntity &
+ rCe = Env().Data().Find_Ce(i_idCe);
+ Env().Data().Get_CeText(aModule_, sCe, sMember, rCe);
+ produce_FromStd(aModule_, sCe, sMember, 0, exists_yes);
+}
+
+void
+HF_IdlTypeText::Produce_byData( const String & i_sFullName ) const
+{
+ if ( strncmp(i_sFullName,"http://", 7) == 0 )
+ {
+ CurOut()
+ >> *new Html::Link(i_sFullName)
+ << i_sFullName;
+ return;
+ }
+
+ StringVector aModule_;
+ String sCe,
+ sMember;
+ int nSequence = 0;
+ String sTypeText;
+ csv::erase_container(aModule_);
+
+ const ary::idl::Module *
+ pScopeModule = referingModule();
+ if (pScopeModule == 0)
+ {
+ // SYNTAX_ERR, but rather logical error: Missing module.
+ CurOut() << i_sFullName;
+ // KORR_FUTURE
+ // How to put a message about this?
+ // errorOut_UnresolvedLink(i_sFullName);
+ return;
+ }
+
+ const char * sTypeStart = strrchr(i_sFullName,'<');
+ if ( sTypeStart != 0 )
+ {
+ const char * sTypeEnd = strchr(i_sFullName,'>');
+ if (sTypeEnd == 0)
+ { // SYNTAX_ERR
+ CurOut() << i_sFullName;
+ // KORR_FUTURE
+ // How to put a message about this?
+ // errorOut_UnresolvedLink(i_sFullName);
+ return;
+ }
+
+ nSequence = count_Sequences(i_sFullName);
+ sTypeStart++;
+ sTypeText.assign(sTypeStart, sTypeEnd-sTypeStart);
+ }
+ else
+ {
+ sTypeText = i_sFullName;
+ }
+
+ csv::erase_container(aModule_);
+ bool bFound = // KORR : Check the semantics of this, see if ce really exists, if it is a member?
+ Env().Data().Search_Ce( aModule_,
+ sCe,sMember,
+ sTypeText,
+ *pScopeModule );
+ if (NOT bFound)
+ {
+ if ( strchr(sTypeText,':') == 0
+ AND
+ *sTypeText.c_str() != 'X' ) // This is a HACK, make this correct!
+ {
+ Produce_LocalLinkInDocu(sTypeText);
+ return;
+ }
+ CurOut() << i_sFullName;
+ // KORR
+ // How to put a message about this?
+ // errorOut_UnresolvedLink(i_sFullName);
+ return;
+ }
+
+ produce_FromStd(aModule_, sCe, sMember, nSequence, exists_yes);
+}
+
+void
+HF_IdlTypeText::Produce_LinkInDocu( const String & i_scope,
+ const String & i_name,
+ const String & i_member ) const
+{
+ StringVector aModule_;
+ String sName;
+ csv::erase_container(aModule_);
+
+ const ary::idl::Module *
+ pScopeModule = referingModule();
+ if (pScopeModule == 0)
+ {
+ // SYNTAX_ERR, but rather logical error: Missing module.
+ CurOut() << i_scope << "::" << i_name;
+ if (NOT i_member.empty())
+ CurOut() << "::" << i_member;
+ return;
+ }
+
+ bool
+ bFound = Env().Data().Search_CesModule( aModule_,
+ i_scope,
+ i_name,
+ *pScopeModule );
+ if (NOT bFound)
+ {
+ CurOut() << i_scope << "::" << i_name;
+ if (NOT i_member.empty())
+ CurOut() << "::" << i_member;
+ return;
+ }
+ produce_FromStd(aModule_, i_name, i_member, 0, exists_yes);
+}
+
+void
+HF_IdlTypeText::Produce_LocalLinkInDocu( const String & i_member ) const
+{
+ StringVector aModule_;
+ String sName;
+ csv::erase_container(aModule_);
+
+ csv_assert(referingCe() != 0);
+ if ( referingModule() == Env().Linker().Search_CurModule() )
+ {
+ StreamLock slLink(200);
+ if (referingCe()->SightLevel() == ary::idl::sl_Member)
+ {
+ slLink() << "#" << i_member;
+ }
+ else
+ {
+ slLink() << referingCe()->LocalName()
+ << ".html#"
+ << i_member;
+ }
+ CurOut()
+ >> *new Html::Link(slLink().c_str())
+ << i_member;
+ return;
+ }
+
+ String sDummyMember;
+ Env().Data().Get_CeText(aModule_, sName, sDummyMember, *referingCe());
+ produce_FromStd(aModule_, sName, i_member, 0, exists_yes);
+}
+
+void
+HF_IdlTypeText::Produce_IndexLink( Xml::Element & o_out,
+ const client & i_ce ) const
+{
+ StringVector aModule_;
+ String sCe;
+ String sMember;
+ csv::erase_container(aModule_);
+
+ Out().Enter(o_out);
+
+ Env().Data().Get_CeText(aModule_, sCe, sMember, i_ce);
+ produce_IndexLink(aModule_, sCe, sMember, false);
+
+ Out().Leave();
+}
+
+void
+HF_IdlTypeText::Produce_IndexOwnerLink( Xml::Element & o_out,
+ const client & i_owner ) const
+{
+ StringVector aModule_;
+ String sCe;
+ String sMember;
+ csv::erase_container(aModule_);
+
+ Out().Enter(o_out);
+
+ if (i_owner.Owner().IsValid())
+ {
+ Env().Data().Get_CeText(aModule_, sCe, sMember, i_owner);
+ produce_IndexLink(aModule_, sCe, sMember, true);
+ }
+ else
+ { // global namespace:
+
+ CurOut()
+ << "."
+ >> *new Html::Link("../module-ix.html")
+ << "global namespace";
+ }
+
+
+ Out().Leave();
+}
+
+void
+HF_IdlTypeText::Produce_IndexSecondEntryLink( Xml::Element & o_out,
+ const client & i_ce ) const
+{
+ StringVector aModule_;
+ String sCe;
+ String sMember;
+ csv::erase_container(aModule_);
+
+ Out().Enter(o_out);
+
+ Env().Data().Get_CeText(aModule_, sCe, sMember, i_ce);
+ produce_IndexLink(aModule_, sCe, sMember, true);
+ Out().Leave();
+}
+
+
+void
+HF_IdlTypeText::produce_FromStd( const StringVector & i_module,
+ const String & i_ce,
+ const String & i_member,
+ int i_sequenceCount,
+ E_Existence i_ceExists,
+ const std::vector<ary::idl::Type_id> *
+ i_templateParameters ) const
+{
+ if (i_ceExists == exists_no)
+ {
+ if ( is_ExternLink(i_module) )
+ {
+ produce_ExternLink(i_module,i_ce,i_member,i_sequenceCount,i_templateParameters);
+ return;
+ }
+ errorOut_UnresolvedLink(i_module, i_ce, i_member);
+ }
+
+ output::Node &
+ rCeNode = Env().OutputTree().Provide_Node(i_module);
+ output::Position
+ aTargetPos(rCeNode);
+ bool
+ bShowModule = rCeNode != Env().CurPosition().RelatedNode()
+ ? i_module.size() > 0
+ : false;
+ bool
+ bUseMember = NOT i_member.empty();
+ bool
+ bLink2Module = i_ceExists == exists_yes;
+ bool
+ bLink2Ce = i_ceExists == exists_yes;
+ bool
+ bLink2Member = NOT Env().Is_MemberExistenceCheckRequired()
+ AND i_ceExists == exists_yes;
+ bool
+ bHasCeOrName = NOT i_ce.empty();
+
+ if (i_sequenceCount > 0)
+ start_Sequence(i_sequenceCount);
+
+ StreamLock aLink(300);
+ StreamStr & rLink = aLink();
+
+ // Produce output: module
+ if (bShowModule)
+ {
+ int nMax = i_module.size() - 1;
+ int nCount = 0;
+ StringVector::const_iterator
+ itm = i_module.begin();
+ for ( ;
+ nCount < nMax;
+ ++itm, ++nCount )
+ {
+ CurOut() << "::" << *itm;
+ }
+
+ CurOut() << "::";
+ if (bLink2Module)
+ {
+ aTargetPos.Set_File(output::ModuleFileName());
+ Env().Linker().Get_Link2Position(rLink, aTargetPos);
+ CurOut()
+ >> *new Html::Link( rLink.c_str() )
+ << *itm;
+ rLink.reset();
+ }
+ else
+ {
+ CurOut() << *itm;
+ }
+
+ if (bHasCeOrName)
+ CurOut() << "::";
+ } // end if (bShowModule)
+
+ // CodeEntity and member:
+ aTargetPos.Set_File( rLink << i_ce << ".html" << c_str );
+ rLink.reset();
+
+ if (bHasCeOrName)
+ {
+ if (bLink2Ce)
+ {
+ Env().Linker().Get_Link2Position(rLink, aTargetPos);
+ CurOut()
+ >> *new Html::Link(rLink.c_str())
+ << i_ce;
+ rLink.reset();
+ }
+ else
+ {
+ CurOut() << i_ce;
+ }
+
+ if (i_templateParameters != 0)
+ write_TemplateParameterList(*i_templateParameters);
+
+ if (bUseMember)
+ {
+ CurOut() << "::";
+
+ if (bLink2Member)
+ {
+ bool bFunction = strstr(i_member,"()") != 0;
+ String sMember( i_member );
+ if (bFunction)
+ sMember.assign(i_member.c_str(), sMember.length()-2);
+
+ Env().Linker().Get_Link2Member(rLink, aTargetPos, sMember);
+ CurOut()
+ >> *new Html::Link(rLink.c_str())
+ << i_member;
+ rLink.reset();
+ }
+ else
+ {
+ CurOut()
+ << i_member;
+ }
+ } // endif (bUseMember)
+ } // endif (bHasCeOrName)
+
+ if (i_sequenceCount > 0)
+ finish_Sequence(i_sequenceCount);
+}
+
+void
+HF_IdlTypeText::produce_BuiltIn( const String & i_type,
+ int i_sequenceCount ) const
+{
+ if (i_sequenceCount > 0)
+ start_Sequence(i_sequenceCount);
+ CurOut() << i_type;
+ if (i_sequenceCount > 0)
+ finish_Sequence(i_sequenceCount);
+}
+
+void
+HF_IdlTypeText::produce_IndexLink( const StringVector & i_module,
+ const String & i_ce,
+ const String & i_member,
+ bool i_bIsOwner ) const
+{
+ output::Node &
+ rCeNode = Env().OutputTree().Provide_Node(i_module);
+ output::Position
+ aTargetPos(rCeNode);
+ bool
+ bShowModule = i_bIsOwner OR (i_module.size() > 0 AND i_ce.empty());
+ bool
+ bShowNonModule = NOT bShowModule OR (i_bIsOwner AND NOT i_ce.empty());
+ bool
+ bUseMember = NOT i_member.empty();
+
+ StreamLock aLink(300);
+ StreamStr & rLink = aLink();
+
+ // Produce output: module
+ if (bShowModule)
+ {
+ if (i_bIsOwner)
+ {
+ int nMax = bShowNonModule ? i_module.size() : i_module.size() - 1;
+ int nCount = 0;
+ for ( StringVector::const_iterator itm = i_module.begin();
+ nCount < nMax;
+ ++itm, ++nCount )
+ {
+ CurOut() << "::" << *itm;
+ }
+ CurOut() << ":: .";
+ }
+
+ if (NOT bShowNonModule)
+ {
+ aTargetPos.Set_File(output::ModuleFileName());
+ Env().Linker().Get_Link2Position(rLink, aTargetPos);
+ CurOut()
+ >> *new Html::Link( rLink.c_str() )
+ >> *new Html::Bold
+ << i_module.back();
+ rLink.reset();
+ }
+ } // end if (bShowModule)
+
+ if (bShowNonModule)
+ {
+ aTargetPos.Set_File( rLink << i_ce << ".html" << c_str );
+ rLink.reset();
+
+ if (bUseMember)
+ {
+ bool bFunction = strstr(i_member,"()") != 0;
+ String sMember( i_member );
+ if (bFunction)
+ sMember.assign(i_member.c_str(), sMember.length()-2);
+ Env().Linker().Get_Link2Member(rLink, aTargetPos, sMember);
+ CurOut()
+ >> *new Html::Link(rLink.c_str())
+ >> *new Html::Bold
+ << i_member;
+ rLink.reset();
+ }
+ else
+ {
+ Env().Linker().Get_Link2Position(rLink, aTargetPos);
+ if (i_bIsOwner)
+ {
+ CurOut()
+ >> *new Html::Link(rLink.c_str())
+ << i_ce;
+ }
+ else
+ {
+ CurOut()
+ >> *new Html::Link(rLink.c_str())
+ >> *new Html::Bold
+ << i_ce;
+ }
+ rLink.reset();
+ }
+ } // endif (bHasCeOrName)
+}
+
+int
+HF_IdlTypeText::count_Sequences( const char * i_sFullType ) const
+{
+ int ret = 0;
+
+ for ( const char * pCount = i_sFullType;
+ *pCount != 0;
+ )
+ {
+ pCount = strstr(pCount,"sequence");
+ if (pCount != 0)
+ {
+ pCount += sizeof("sequence"); // = strlen(sequence) + 1 for '<'.
+ if ( *(pCount-1) == '\0' )
+ {
+ // SYNTAX_ERR
+ return 0;
+ }
+ ++ret;
+ }
+ } // end for
+
+ return ret;
+}
+
+void
+HF_IdlTypeText::start_Sequence( int i_count ) const
+{
+ csv_assert( i_count > 0 );
+ for (int i = 0; i < i_count; ++i )
+ {
+ CurOut() << "sequence< ";
+ }
+}
+
+void
+HF_IdlTypeText::finish_Sequence( int i_count ) const
+{
+ csv_assert( i_count > 0 );
+ for (int i = 0; i < i_count; ++i )
+ {
+ CurOut() << " >";
+ }
+}
+
+void
+HF_IdlTypeText::errorOut_UnresolvedLink( const char * i_name ) const
+{
+ StreamLock slFile(1000);
+
+ // KORR
+ // Handle links in cited documentation from other entities.
+ slFile() << Env().CurPageCe_AsText();
+ slFile().pop_back(5);
+ slFile() << ".idl";
+
+ // KORR
+ // Retrieve, correct line number.
+ TheMessages().Out_UnresolvedLink( i_name,
+ slFile().c_str(),
+ 0 );
+}
+
+void
+HF_IdlTypeText::errorOut_UnresolvedLink( const StringVector & i_module,
+ const String & i_ce,
+ const String & i_member ) const
+{
+ StreamLock slName(500);
+
+ if (i_module.size() > 0)
+ {
+ slName().operator_join(i_module.begin(), i_module.end(), "::");
+ if (NOT i_ce.empty())
+ slName() << "::";
+ }
+ if (NOT i_ce.empty())
+ {
+ slName() << i_ce;
+ if (NOT i_member.empty())
+ slName() << "::" << i_member;
+ }
+ errorOut_UnresolvedLink(slName().c_str());
+}
+
+bool
+HF_IdlTypeText::is_ExternLink( const StringVector & i_module ) const
+{
+ const autodoc::CommandLine &
+ rCmdLine = autodoc::CommandLine::Get_();
+ uintt nExtNspLength = rCmdLine.ExternNamespace().length();
+ if (nExtNspLength == 0)
+ return false;
+
+ StreamStr s(1000);
+ s << "::";
+ s.operator_join( i_module.begin(),
+ i_module.end(),
+ "::" );
+
+ if (s.length() < nExtNspLength)
+ return false;
+ return ( strncmp( rCmdLine.ExternNamespace().c_str(),
+ s.c_str(),
+ nExtNspLength ) == 0 );
+}
+
+void
+HF_IdlTypeText::produce_ExternLink( const StringVector & i_module,
+ const String & i_ce,
+ const String & i_member,
+ int i_sequenceCount,
+ const std::vector<ary::idl::Type_id> *
+ i_templateParameters ) const
+{
+ // KORR
+ // Look again at this code and take some time.
+
+ StreamLock aLink(1000);
+ StreamStr & rLink = aLink();
+
+ rLink << autodoc::CommandLine::Get_().ExternRoot();
+ rLink.operator_join( i_module.begin(),
+ i_module.end(),
+ "/" );
+ rLink << '/'
+ << i_ce
+ << ".html";
+ if (i_member.length() > 0)
+ rLink << "/#" << i_member;
+
+ if (i_sequenceCount > 0)
+ start_Sequence(i_sequenceCount);
+
+ // module
+ int nMax = i_module.size();
+ int nCount = 0;
+ StringVector::const_iterator
+ itm = i_module.begin();
+ for ( ;
+ nCount < nMax;
+ ++itm, ++nCount )
+ {
+ CurOut() << "::" << *itm;
+ }
+ CurOut() << "::";
+
+
+ // CodeEntity
+ if (i_member.length() == 0)
+ {
+ CurOut()
+ >> *new Html::Link(rLink.c_str())
+ << i_ce;
+ }
+ else
+ {
+ CurOut()
+ << i_ce;
+ }
+
+ if (i_templateParameters != 0)
+ write_TemplateParameterList(*i_templateParameters);
+
+ // Member
+ if (i_member.length() > 0)
+ {
+ CurOut()
+ >> *new Html::Link(rLink.c_str())
+ << i_member;
+ }
+
+ if (i_sequenceCount > 0)
+ finish_Sequence(i_sequenceCount);
+}
+
+void
+HF_IdlTypeText::write_TemplateParameterList(
+ const std::vector<ary::idl::Type_id> & i_templateParameters ) const
+{
+ if (i_templateParameters.size() == 0)
+ return;
+
+ HF_IdlTypeText
+ aTemplateParamWriter(Env(), CurOut(), true, pReferingCe);
+ CurOut() << "< ";
+ std::vector<ary::idl::Type_id>::const_iterator
+ it = i_templateParameters.begin();
+ aTemplateParamWriter.Produce_byData(*it);
+ for ( ++it; it != i_templateParameters.end(); ++it )
+ {
+ CurOut() << ", ";
+ aTemplateParamWriter.Produce_byData(*it);
+ }
+ CurOut() << " >";
+}
diff --git a/autodoc/source/display/idl/hfi_typetext.hxx b/autodoc/source/display/idl/hfi_typetext.hxx
new file mode 100644
index 000000000000..62766ed411e0
--- /dev/null
+++ b/autodoc/source/display/idl/hfi_typetext.hxx
@@ -0,0 +1,158 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_DISPLAY_HFI_TYPETEXT_HXX
+#define ADC_DISPLAY_HFI_TYPETEXT_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include "hi_factory.hxx"
+ // COMPONENTS
+ // PARAMETERS
+
+
+class HF_IdlTypeText : public HtmlFactory_Idl
+{
+ public:
+ enum E_Index { use_for_javacompatible_index };
+
+ HF_IdlTypeText(
+ Environment & io_rEnv,
+ Xml::Element & o_rOut,
+ bool i_bWithLink,
+ const client * i_pScopeGivingCe = 0 );
+ HF_IdlTypeText(
+ Environment & io_rEnv,
+ E_Index e );
+ virtual ~HF_IdlTypeText();
+
+ void Produce_byData(
+ ary::idl::Type_id i_idType ) const;
+ void Produce_byData(
+ ary::idl::Ce_id i_idCe ) const;
+ void Produce_byData(
+ const String & i_sFullName ) const;
+ void Produce_LinkInDocu(
+ const String & i_scope,
+ const String & i_name,
+ const String & i_member ) const;
+ void Produce_LocalLinkInDocu(
+ const String & i_member ) const;
+
+ /// Produce the first link for Java-help understood index entries.
+ void Produce_IndexLink(
+ Xml::Element & o_out,
+ const client & i_ce ) const;
+ /** Produce the second link for Java-help understood index entries.
+ For members this will be a link to their owner (this function is
+ used), else see @->Produce_IndexSecondEntryLink();
+ */
+ void Produce_IndexOwnerLink(
+ Xml::Element & o_out,
+ const client & i_owner ) const;
+ /** Produce the second link for Java-help understood index entries.
+ For non- members this will again be a link to to the entry itself
+ (this function is used), else see @->Produce_IndexOwnerLink();
+ */
+ void Produce_IndexSecondEntryLink(
+ Xml::Element & o_out,
+ const client & i_ce ) const;
+ private:
+ // Locals
+ enum E_Existence
+ {
+ exists_dontknow,
+ exists_yes,
+ exists_no
+ };
+
+ void produce_FromStd(
+ const StringVector &
+ i_module,
+ const String & i_ce,
+ const String & i_member,
+ int i_sequenceCount,
+ E_Existence i_ceExists,
+ const std::vector<ary::idl::Type_id> *
+ i_templateParameters = 0 ) const;
+ void produce_BuiltIn(
+ const String & i_type,
+ int i_sequenceCount ) const;
+ void produce_IndexLink(
+ const StringVector &
+ i_module,
+ const String & i_ce,
+ const String & i_member,
+ bool i_bIsOwner ) const;
+ int count_Sequences(
+ const char * i_sFullType ) const;
+ void start_Sequence(
+ int i_count ) const;
+ void finish_Sequence(
+ int i_count ) const;
+ void errorOut_UnresolvedLink(
+ const char * i_name ) const;
+ void errorOut_UnresolvedLink(
+ const StringVector &
+ i_module,
+ const String & i_ce,
+ const String & i_member ) const;
+ bool is_ExternLink(
+ const StringVector &
+ i_module ) const;
+ void produce_ExternLink(
+ const StringVector &
+ i_module,
+ const String & i_ce,
+ const String & i_member,
+ int i_sequenceCount,
+ const std::vector<ary::idl::Type_id> *
+ i_templateParameters ) const;
+ void write_TemplateParameterList(
+ const std::vector<ary::idl::Type_id> &
+ i_templateParameters ) const;
+ const ary::idl::Module *
+ referingModule() const;
+ const client * referingCe() const;
+
+ // DATA
+ mutable const client *
+ pReferingCe;
+ bool bWithLink;
+};
+
+
+
+// IMPLEMENTATION
+
+
+
+#endif
+
+
diff --git a/autodoc/source/display/idl/hfi_xrefpage.cxx b/autodoc/source/display/idl/hfi_xrefpage.cxx
new file mode 100644
index 000000000000..ecf4cb72ff43
--- /dev/null
+++ b/autodoc/source/display/idl/hfi_xrefpage.cxx
@@ -0,0 +1,273 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "hfi_xrefpage.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include <ary/idl/i_ce.hxx>
+#include <ary/idl/i_gate.hxx>
+#include <ary/idl/ip_ce.hxx>
+#include <toolkit/hf_title.hxx>
+#include "hfi_navibar.hxx"
+#include "hfi_typetext.hxx"
+#include "hi_env.hxx"
+
+
+namespace
+{
+
+const String
+ C_sTitleStart("uses of ");
+const String
+ C_sCRLF("\n");
+const String
+ C_sDevMan("References in Developers Guide");
+
+} // anonymous namespace
+
+
+
+HF_IdlXrefs::HF_IdlXrefs( Environment & io_rEnv,
+ Xml::Element & o_rOut,
+ const String & i_prefix,
+ const client & i_ce )
+ : HtmlFactory_Idl(io_rEnv, &o_rOut),
+ rContentDirectory(*new Html::Paragraph),
+ pClient(&i_ce)
+{
+ produce_Main(i_prefix, i_ce);
+}
+
+HF_IdlXrefs::~HF_IdlXrefs()
+{
+}
+
+void
+HF_IdlXrefs::Write_ManualLinks( const client & i_ce ) const
+{
+ const StringVector &
+ rLinks2Refs = i_ce.Secondaries().Links2RefsInManual();
+ if ( rLinks2Refs.size() == 0 )
+ {
+ rContentDirectory
+ << C_sDevMan
+ << new Html::LineBreak
+ << C_sCRLF;
+ return;
+ }
+
+
+ rContentDirectory
+ >> *new Html::Link("#devmanrefs")
+ << C_sDevMan
+ << new Html::LineBreak
+ << C_sCRLF;
+
+ HF_SubTitleTable
+ aList(CurOut(), "devmanrefs", C_sDevMan, 1);
+ Xml::Element &
+ rOutCell = aList.Add_Row() >>* new Html::TableCell;
+
+ csv_assert(rLinks2Refs.size() % 2 == 0);
+ for ( StringVector::const_iterator it = rLinks2Refs.begin();
+ it != rLinks2Refs.end();
+ ++it )
+ {
+ Xml::Element &
+ rLink = rOutCell >> *new Html::Link( Env().Link2Manual(*it));
+ if ( (*(it+1)).empty() )
+
+ // HACK KORR_FUTURE
+ // Research what happens with manual links which contain normal characters
+ // in non-utf-8 texts. And research, why utfF-8 does not work here.
+ rLink << new Xml::XmlCode(*it);
+ else
+ // HACK KORR_FUTURE, see above.
+ rLink << new Xml::XmlCode( *(it+1) );
+ rOutCell
+ << new Html::LineBreak
+ << C_sCRLF;
+ ++it;
+ } // end for
+}
+
+void
+HF_IdlXrefs::Produce_List( const char * i_title,
+ const char * i_label,
+ ce_list & i_iterator ) const
+{
+ if (NOT i_iterator)
+ {
+ rContentDirectory
+ << i_title
+ << new Html::LineBreak
+ << C_sCRLF;
+ return;
+ }
+
+ csv_assert(*i_label == '#');
+
+ rContentDirectory
+ >> *new Html::Link(i_label)
+ << i_title
+ << new Html::LineBreak
+ << C_sCRLF;
+
+ HF_SubTitleTable
+ aList(CurOut(), i_label+1, i_title, 1);
+ Xml::Element &
+ rOutCell = aList.Add_Row() >>* new Html::TableCell;
+ HF_IdlTypeText
+ aTypeWriter(Env(), rOutCell, true, pClient);
+ for ( ce_list & it = i_iterator; it; ++it )
+ {
+ aTypeWriter.Produce_byData(*it);
+ rOutCell << new Html::LineBreak;
+ } // end for
+}
+
+void
+HF_IdlXrefs::Produce_Tree( const char * i_title,
+ const char * i_label,
+ const client & i_ce,
+ F_GET_SUBLIST i_sublistcreator ) const
+{
+ dyn_ce_list pResult;
+ (*i_sublistcreator)(pResult, i_ce);
+
+ if (NOT (*pResult).operator bool())
+ {
+ rContentDirectory
+ << i_title
+ << new Html::LineBreak
+ << C_sCRLF;
+ return;
+ }
+
+ csv_assert(*i_label == '#');
+
+ rContentDirectory
+ >> *new Html::Link(i_label)
+ << i_title
+ << new Html::LineBreak
+ << C_sCRLF;
+
+ HF_SubTitleTable
+ aList(CurOut(), i_label+1, i_title, 1);
+ Xml::Element &
+ rOut = aList.Add_Row()
+ >>* new Html::TableCell
+ >> *new csi::xml::AnElement("pre")
+ << new csi::html::StyleAttr("font-family:monospace;");
+
+ recursive_make_ListInTree( rOut,
+ 0,
+ i_ce,
+ *pResult,
+ i_sublistcreator );
+}
+
+void
+HF_IdlXrefs::produce_Main( const String & i_prefix,
+ const client & i_ce ) const
+{
+ make_Navibar(i_ce);
+
+ HF_TitleTable
+ aTitle(CurOut());
+ StreamLock sl(200);
+ aTitle.Produce_Title( sl()
+ << C_sTitleStart
+ << i_prefix
+ << " "
+ << i_ce.LocalName()
+ << c_str );
+
+ aTitle.Add_Row() << &rContentDirectory;
+ sl().reset();
+ rContentDirectory
+ >> *new Html::Link( sl() << i_ce.LocalName()
+ << ".html"
+ << c_str )
+ >> *new Html::Bold
+ << "back to "
+ << i_prefix
+ << " "
+ << i_ce.LocalName();
+ rContentDirectory
+ << new Html::LineBreak
+ << new Html::LineBreak
+ << C_sCRLF;
+
+ CurOut() << new Html::HorizontalLine();
+}
+
+void
+HF_IdlXrefs::make_Navibar( const client & i_ce ) const
+{
+ HF_IdlNavigationBar
+ aNaviBar(Env(), CurOut());
+ aNaviBar.Produce_CeXrefsMainRow(i_ce);
+ CurOut() << new Html::HorizontalLine();
+}
+
+void
+HF_IdlXrefs::recursive_make_ListInTree( Xml::Element & o_rDisplay,
+ uintt i_level,
+ const client & i_ce,
+ ce_list & i_iterator,
+ F_GET_SUBLIST i_sublistcreator ) const
+{
+ const char * sLevelIndentation = " ";
+
+ HF_IdlTypeText
+ aTypeWriter(Env(), o_rDisplay, true, &i_ce);
+ for ( ; i_iterator.operator bool(); ++i_iterator )
+ {
+ for (uintt i = 0; i < i_level; ++i)
+ {
+ o_rDisplay << sLevelIndentation;
+ } // end for
+
+ aTypeWriter.Produce_byData(*i_iterator);
+ o_rDisplay << C_sCRLF;
+
+ dyn_ce_list pResult;
+ const client & rCe = Env().Gate().Ces().Find_Ce(*i_iterator);
+ (*i_sublistcreator)(pResult, rCe);
+ if ( (*pResult).operator bool() )
+ {
+ recursive_make_ListInTree( o_rDisplay,
+ i_level + 1,
+ rCe,
+ *pResult,
+ i_sublistcreator );
+ }
+ } // end for
+}
diff --git a/autodoc/source/display/idl/hfi_xrefpage.hxx b/autodoc/source/display/idl/hfi_xrefpage.hxx
new file mode 100644
index 000000000000..2eed092c568e
--- /dev/null
+++ b/autodoc/source/display/idl/hfi_xrefpage.hxx
@@ -0,0 +1,104 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_DISPLAY_HFI_XREFPAGE_HXX
+#define ADC_DISPLAY_HFI_XREFPAGE_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include "hi_factory.hxx"
+ // COMPONENTS
+ // PARAMETERS
+
+
+class HF_IdlXrefs : public HtmlFactory_Idl
+{
+ public:
+ typedef void (*F_GET_SUBLIST)(dyn_ce_list&, const client&);
+
+ HF_IdlXrefs(
+ Environment & io_rEnv,
+ Xml::Element & o_rOut,
+ const String & i_prefix,
+ const client & i_ce);
+ virtual ~HF_IdlXrefs();
+
+ /** @descr
+ Only lists which are tried to be produced by Produce_List() or
+ Produce_Tree(), will occur in the content directory of the page.
+ They will have links, if the list or tree has at least one element,
+ else the list is mentioned in the directory without link.
+
+ @param i_label [*i_label == '#']
+ */
+ void Produce_List(
+ const char * i_title,
+ const char * i_label,
+ ce_list & i_iterator ) const;
+ void Write_ManualLinks(
+ const client & i_ce ) const;
+ /** @descr
+ Only lists which are tried to be produced by Produce_List() or
+ Produce_Tree(), will occur in the content directory of the page.
+ They will have links, if the list or tree has at least one element,
+ else the list is mentioned in the directory without link.
+
+ @param i_label [*i_label == '#']
+ */
+ void Produce_Tree(
+ const char * i_title,
+ const char * i_label,
+ const client & i_ce,
+ F_GET_SUBLIST i_sublistcreator ) const;
+
+ private:
+ // Locals
+ void produce_Main(
+ const String & i_prefix,
+ const client & i_ce ) const;
+ void make_Navibar(
+ const client & i_ce ) const;
+ /// @return true if there are any elements in sub lists.
+ void recursive_make_ListInTree(
+ Xml::Element & o_rDisplay,
+ uintt i_level, /// 0 is highest
+ const client & i_ce,
+ ce_list & i_iterator,
+ F_GET_SUBLIST i_sublistcreator ) const;
+
+ // DATA
+ Xml::Element & rContentDirectory;
+ const client * pClient;
+};
+
+
+
+// IMPLEMENTATION
+
+#endif
diff --git a/autodoc/source/display/idl/hi_ary.cxx b/autodoc/source/display/idl/hi_ary.cxx
new file mode 100644
index 000000000000..ce8a4197911f
--- /dev/null
+++ b/autodoc/source/display/idl/hi_ary.cxx
@@ -0,0 +1,283 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "hi_ary.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include <cosv/ploc_dir.hxx>
+#include <ary/idl/i_gate.hxx>
+#include <ary/idl/i_module.hxx>
+#include <ary/idl/i_ce.hxx>
+#include <ary/idl/i_type.hxx>
+#include <ary/idl/ip_ce.hxx>
+#include <ary/idl/ip_type.hxx>
+
+
+inline const ary::idl::Gate &
+AryAccess::gate() const
+ { return rGate; }
+
+inline const ary::idl::CePilot &
+AryAccess::ces() const
+ { return rGate.Ces(); }
+
+inline const ary::idl::TypePilot &
+AryAccess::types() const
+ { return rGate.Types(); }
+
+inline const ary::idl::Module *
+AryAccess::find_SubModule( const ary::idl::Module & i_parent,
+ const String & i_name ) const
+{
+ ary::idl::Ce_id
+ nModule = i_parent.Search_Name(i_name);
+ return ces().Search_Module(nModule);
+}
+
+bool
+AryAccess::nextName( const char * & io_TextPtr,
+ String & o_name ) const
+{
+ if ( strncmp(io_TextPtr,"::", 2) == 0 )
+ io_TextPtr += 2;
+
+ const char * pEnd = strchr(io_TextPtr,':');
+ size_t nLen = pEnd == 0
+ ? strlen(io_TextPtr)
+ : pEnd - io_TextPtr;
+ o_name.assign(io_TextPtr, nLen);
+ io_TextPtr += nLen;
+
+ return nLen > 0;
+}
+
+
+
+AryAccess::AryAccess( const ary::idl::Gate & i_rGate )
+ : rGate(i_rGate)
+{
+}
+
+const ary::idl::Module &
+AryAccess::GlobalNamespace() const
+{
+ return ces().GlobalNamespace();
+}
+
+const ary::idl::Module &
+AryAccess::Find_Module( ary::idl::Ce_id i_ce ) const
+{
+ return ces().Find_Module(i_ce);
+}
+
+
+const ary::idl::CodeEntity &
+AryAccess::Find_Ce( ary::idl::Ce_id i_ce ) const
+{
+ return ces().Find_Ce(i_ce);
+}
+
+const ary::idl::Type &
+AryAccess::Find_Type( ary::idl::Type_id i_type ) const
+{
+ return types().Find_Type(i_type);
+}
+
+ary::idl::Ce_id
+AryAccess::CeFromType( ary::idl::Type_id i_type ) const
+{
+ return types().Search_CeRelatedTo(i_type);
+}
+
+bool
+AryAccess::IsBuiltInOrRelated( const ary::idl::Type & i_type ) const
+{
+ return types().IsBuiltInOrRelated(i_type);
+}
+
+bool
+AryAccess::Search_Ce( StringVector & o_module,
+ String & o_mainEntity,
+ String & o_memberEntity,
+ const char * i_sText,
+ const ary::idl::Module & i_referingScope ) const
+{
+ o_module.erase(o_module.begin(),o_module.end());
+ o_mainEntity = String::Null_();
+ o_memberEntity = String::Null_();
+
+ const ary::idl::Module * pModule = 0;
+
+ if ( strncmp(i_sText, "::", 2) == 0
+ OR strncmp(i_sText, "com::sun::star", 14) == 0 )
+ pModule = &GlobalNamespace();
+ else
+ {
+ pModule = &i_referingScope;
+ ces().Get_Text(o_module, o_mainEntity, o_memberEntity, *pModule);
+ }
+
+ const char * pNext = i_sText;
+ String sNextName;
+
+ // Find Module:
+ while ( nextName(pNext, sNextName) )
+ {
+ const ary::idl::Module *
+ pSub = find_SubModule(*pModule, sNextName);
+ if (pSub != 0)
+ {
+ pModule = pSub;
+ o_module.push_back(sNextName);
+ }
+ else
+ break;
+ }
+
+ // Find main CodeEntity:
+ if ( sNextName.length() == 0 )
+ return true;
+ const ary::idl::Ce_id
+ nCe = pModule->Search_Name(sNextName);
+ if (NOT nCe.IsValid())
+ return false;
+ o_mainEntity = sNextName;
+
+ // Find member:
+ if ( *pNext == 0 )
+ return true;
+ nextName(pNext, o_memberEntity);
+ if (strchr(o_memberEntity,':') != 0)
+ return false; // This must not happen in IDL
+
+#if 0
+// The following code avoids false links, but is rather expensive
+// in runtime time consumation.
+
+ const ary::idl::CodeEntity *
+ pCe = Find_Ce(nCe);
+ if (pCe == 0)
+ return false;
+
+ if ( NOT ary::idl::ifc_ce::attr::Search_Member(*pCe,o_memberEntity) )
+ return false;
+#endif
+
+ return true;
+}
+
+bool
+AryAccess::Search_CesModule( StringVector & o_module,
+ const String & i_scope,
+ const String & i_ce,
+ const ary::idl::Module & i_referingScope ) const
+{
+ o_module.erase(o_module.begin(),o_module.end());
+
+ const ary::idl::Module *
+ pModule = 0;
+
+ if ( strncmp(i_scope, "::", 2) == 0
+ OR strncmp(i_scope, "com::sun::star", 14) == 0 )
+ pModule = &GlobalNamespace();
+ else
+ {
+ pModule = &i_referingScope;
+ static String Dummy1;
+ static String Dummy2;
+ ces().Get_Text(o_module, Dummy1, Dummy2, *pModule);
+ }
+
+ const char * pNext = i_scope;
+ String sNextName;
+
+ // Find Module:
+ while ( nextName(pNext, sNextName) )
+ {
+ const ary::idl::Module *
+ pSub = find_SubModule(*pModule, sNextName);
+ if (pSub != 0)
+ {
+ pModule = pSub;
+ o_module.push_back(sNextName);
+ }
+ else
+ return false;
+ } // end while
+ return pModule->Search_Name(i_ce).IsValid();
+}
+
+const ary::idl::Module *
+AryAccess::Search_Module( const StringVector & i_nameChain ) const
+{
+ const ary::idl::Module * ret =
+ &GlobalNamespace();
+ for ( StringVector::const_iterator it = i_nameChain.begin();
+ it != i_nameChain.end();
+ ++it )
+ {
+ ret = find_SubModule(*ret, *it);
+ if (ret == 0)
+ break;
+ } // end for
+ return ret;
+}
+
+void
+AryAccess::Get_CeText( StringVector & o_module,
+ String & o_ce,
+ String & o_member,
+ const ary::idl::CodeEntity & i_ce ) const
+{
+ ces().Get_Text(o_module, o_ce, o_member, i_ce);
+}
+
+void
+AryAccess::Get_TypeText( StringVector & o_module,
+ String & o_sCe,
+ ary::idl::Ce_id & o_nCe,
+ int & o_sequenceCount,
+ const ary::idl::Type & i_type ) const
+{
+ i_type.Get_Text(o_module, o_sCe, o_nCe, o_sequenceCount, gate());
+}
+
+void
+AryAccess::Get_IndexData( std::vector<ary::idl::Ce_id> & o_data,
+ ary::idl::alphabetical_index::E_Letter i_letter ) const
+{
+ rGate.Ces().Get_AlphabeticalIndex(o_data, i_letter);
+}
+
+
+const ary::idl::CePilot &
+AryAccess::Ces() const
+{
+ return rGate.Ces();
+}
diff --git a/autodoc/source/display/idl/hi_ary.hxx b/autodoc/source/display/idl/hi_ary.hxx
new file mode 100644
index 000000000000..a85dff4913dd
--- /dev/null
+++ b/autodoc/source/display/idl/hi_ary.hxx
@@ -0,0 +1,162 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_DISPLAY_HI_ARY_HXX
+#define ADC_DISPLAY_HI_ARY_HXX
+
+
+// USED SERVICES
+ // BASE CLASSES
+ // COMPONENTS
+#include <ary/idl/i_types4idl.hxx>
+ // PARAMETERS
+#include <ary/idl/i_gate.hxx>
+#include <ary/doc/d_docu.hxx>
+#include <ary/doc/d_oldidldocu.hxx>
+
+
+namespace ary
+{
+namespace idl
+{
+ class Module;
+ class Gate;
+ class CePilot;
+ class TypePilot;
+}
+}
+namespace output
+{
+ class Position;
+}
+
+
+
+
+inline const ary::doc::OldIdlDocu *
+Get_IdlDocu(const ary::doc::Documentation & i_doc)
+{
+ return dynamic_cast< const ary::doc::OldIdlDocu* >(i_doc.Data());
+}
+
+
+
+
+
+/** A helper class to wrap the access to data in the Autodoc Repository.
+*/
+class AryAccess
+{
+ public:
+ // LIFECYCLE
+ AryAccess(
+ const ary::idl::Gate &
+ i_rGate );
+ // INQUIRY
+ const ary::idl::Module &
+ GlobalNamespace() const;
+ const ary::idl::Module &
+ Find_Module(
+ ary::idl::Ce_id i_ce ) const;
+ const ary::idl::CodeEntity &
+ Find_Ce(
+ ary::idl::Ce_id i_ce ) const;
+ const ary::idl::Type &
+ Find_Type(
+ ary::idl::Type_id i_type ) const;
+ ary::idl::Ce_id CeFromType(
+ ary::idl::Type_id i_type ) const;
+ bool IsBuiltInOrRelated(
+ const ary::idl::Type &
+ i_type ) const;
+ bool Search_Ce(
+ StringVector & o_module,
+ String & o_mainEntity,
+ String & o_memberEntity,
+ const char * i_sText,
+ const ary::idl::Module &
+ i_referingScope ) const;
+ bool Search_CesModule(
+ StringVector & o_module,
+ const String & i_scope,
+ const String & i_ce,
+ const ary::idl::Module &
+ i_referingScope ) const;
+ const ary::idl::Module *
+ Search_Module(
+ const StringVector &
+ i_nameChain ) const;
+
+ void Get_CeText(
+ StringVector & o_module,
+ String & o_ce,
+ String & o_member,
+ const ary::idl::CodeEntity &
+ i_ce ) const;
+ void Get_TypeText(
+ StringVector & o_module,
+ String & o_sCe,
+ ary::idl::Ce_id & o_nCe,
+ int & o_sequenceCount,
+ const ary::idl::Type &
+ i_type ) const;
+ void Get_IndexData(
+ std::vector<ary::idl::Ce_id> &
+ o_data,
+ ary::idl::alphabetical_index::E_Letter
+ i_letter ) const;
+
+ const ary::idl::CePilot &
+ Ces() const;
+ private:
+ const ary::idl::Module *
+ find_SubModule(
+ const ary::idl::Module &
+ i_parent,
+ const String & i_name ) const;
+
+ /// Gets "::"-separated names out of a string.
+ bool nextName(
+ const char * & io_TextPtr,
+ String & o_name ) const;
+
+
+ const ary::idl::Gate &
+ gate() const;
+ const ary::idl::CePilot &
+ ces() const;
+ const ary::idl::TypePilot &
+ types() const;
+ // DATA
+ const ary::idl::Gate &
+ rGate;
+};
+
+
+#endif
+
+
diff --git a/autodoc/source/display/idl/hi_display.cxx b/autodoc/source/display/idl/hi_display.cxx
new file mode 100644
index 000000000000..f1c2042e9e6d
--- /dev/null
+++ b/autodoc/source/display/idl/hi_display.cxx
@@ -0,0 +1,207 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <idl/hi_display.hxx>
+
+
+// NOT FULLY DEFINED SERVICES
+#include <cosv/file.hxx>
+#include <ary/idl/i_ce.hxx>
+#include <ary/idl/i_module.hxx>
+#include <ary/getncast.hxx>
+#include <toolkit/out_tree.hxx>
+#include <cfrstd.hxx>
+#include "hi_ary.hxx"
+#include "hi_env.hxx"
+#include "hi_main.hxx"
+
+
+extern const String C_sCssFilename_Idl;
+
+
+inline bool
+HtmlDisplay_Idl::IsModule( const ary::idl::CodeEntity & i_ce ) const
+{
+ return ary::is_type<ary::idl::Module>(i_ce);
+}
+
+inline const ary::idl::Module &
+HtmlDisplay_Idl::Module_Cast( const ary::idl::CodeEntity & i_ce ) const
+{
+ return ary::ary_cast<ary::idl::Module>(i_ce);
+}
+
+
+
+
+HtmlDisplay_Idl::HtmlDisplay_Idl()
+ : pCurPageEnv(),
+ pMainDisplay()
+{
+}
+
+HtmlDisplay_Idl::~HtmlDisplay_Idl()
+{
+}
+
+void
+HtmlDisplay_Idl::do_Run( const char * i_sOutputDirectory,
+ const ary::idl::Gate & i_rAryGate,
+ const display::CorporateFrame & i_rLayout )
+{
+ SetRunData( i_sOutputDirectory, i_rAryGate, i_rLayout );
+
+ Create_StartFile();
+ Create_CssFile();
+ Create_FilesInNameTree();
+ Create_IndexFiles();
+ Create_FilesInProjectTree();
+ Create_PackageList();
+ Create_HelpFile();
+}
+
+void
+HtmlDisplay_Idl::SetRunData( const char * i_sOutputDirectory,
+ const ary::idl::Gate & i_rAryGate,
+ const display::CorporateFrame & i_rLayout )
+{
+ csv::ploc::Path aOutputDir( i_sOutputDirectory, true );
+ pCurPageEnv = new HtmlEnvironment_Idl( aOutputDir, i_rAryGate, i_rLayout );
+ pMainDisplay = new MainDisplay_Idl(*pCurPageEnv);
+}
+
+void
+HtmlDisplay_Idl::Create_StartFile()
+{
+}
+
+void
+HtmlDisplay_Idl::Create_FilesInNameTree()
+{
+ Cout() << "\nCreate files in subtree namespaces ..." << Endl();
+
+ const ary::idl::Module &
+ rGlobalNamespace = pCurPageEnv->Data().GlobalNamespace();
+ pCurPageEnv->Goto_Directory( pCurPageEnv->OutputTree().NamesRoot(), true );
+
+ RecursiveDisplay_Module(rGlobalNamespace);
+
+ Cout() << "... done." << Endl();
+}
+
+void
+HtmlDisplay_Idl::Create_IndexFiles()
+{
+ Cout() << "\nCreate files in subtree index ..." << Endl();
+ pCurPageEnv->Goto_Directory( pCurPageEnv->OutputTree().IndexRoot(), true );
+ pMainDisplay->WriteGlobalIndices();
+ Cout() << "... done.\n" << Endl();
+}
+
+typedef ary::Dyn_StdConstIterator<ary::idl::Ce_id> Dyn_CeIterator;
+typedef ary::StdConstIterator<ary::idl::Ce_id> CeIterator;
+
+void
+HtmlDisplay_Idl::RecursiveDisplay_Module( const ary::idl::Module & i_module )
+{
+ i_module.Accept(*pMainDisplay);
+
+ Dyn_CeIterator
+ aMembers;
+ i_module.Get_Names(aMembers);
+
+ for ( CeIterator & iter = *aMembers;
+ iter;
+ ++iter )
+ {
+ const ary::idl::CodeEntity &
+ rCe = pCurPageEnv->Data().Find_Ce(*iter);
+
+ if ( NOT IsModule(rCe) )
+ rCe.Accept(*pMainDisplay);
+ else
+ {
+ pCurPageEnv->Goto_DirectoryLevelDown( rCe.LocalName(), true );
+ RecursiveDisplay_Module( Module_Cast(rCe) );
+ pCurPageEnv->Goto_DirectoryLevelUp();
+ }
+ } // end for
+}
+
+void
+HtmlDisplay_Idl::Create_FilesInProjectTree()
+{
+}
+
+void
+HtmlDisplay_Idl::Create_PackageList()
+{
+#if 0
+ Cout() << "\nCreate package list ..." << std::flush;
+
+ pCurPageEnv->CurPosition() = pCurPageEnv->OutputTree().Root();
+
+ // KORR
+ // ...
+
+ Cout() << " done." << Endl();
+#endif // 0
+}
+
+void
+HtmlDisplay_Idl::Create_HelpFile()
+{
+}
+
+void
+HtmlDisplay_Idl::Create_CssFile()
+{
+ Cout() << "\nCreate css file ..." << Endl();
+
+ pCurPageEnv->Goto_Directory( pCurPageEnv->OutputTree().Root(), true );
+ pCurPageEnv->Set_CurFile( C_sCssFilename_Idl );
+
+ StreamLock
+ slCurFilePath(700);
+ pCurPageEnv->Get_CurFilePath(slCurFilePath());
+
+ csv::File
+ aCssFile(slCurFilePath().c_str(), csv::CFM_CREATE);
+ csv::OpenCloseGuard
+ aOpenGuard(aCssFile);
+ if (NOT aOpenGuard)
+ {
+ Cerr() << "Can't create file " << slCurFilePath().c_str() << "." << Endl();
+ return;
+ }
+
+ aCssFile.write("/* Autodoc css file for IDL documentation */\n\n\n");
+ aCssFile.write(pCurPageEnv->Layout().CssStyle());
+ aCssFile.write("\n\n\n");
+ aCssFile.write(pCurPageEnv->Layout().CssStylesExplanation());
+}
diff --git a/autodoc/source/display/idl/hi_env.cxx b/autodoc/source/display/idl/hi_env.cxx
new file mode 100644
index 000000000000..7dc6b8187ab9
--- /dev/null
+++ b/autodoc/source/display/idl/hi_env.cxx
@@ -0,0 +1,199 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "hi_env.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include <cosv/ploc_dir.hxx>
+#include <cfrstd.hxx>
+#include <toolkit/out_tree.hxx>
+#include "hi_ary.hxx"
+#include "hi_linkhelper.hxx"
+
+
+
+const String C_s_index_files("index-files");
+
+const String C_sUseFileSuffix("-use.html");
+const String C_IndexA_FileName("index-1.html");
+
+
+HtmlEnvironment_Idl::HtmlEnvironment_Idl( const csv::ploc::Path & i_rOutputDir,
+ const ary::idl::Gate & i_rGate,
+ const display::CorporateFrame & i_rLayout )
+ : aOutputRoot(i_rOutputDir),
+ pData(new AryAccess(i_rGate)),
+ pGate(&i_rGate),
+ pOutputTree(new output::Tree),
+ aCurPosition(pOutputTree->Root()),
+ pCurPageCe(0),
+ pLayout(&i_rLayout),
+ pLinker()
+{
+ StringVector aHelp;
+ pOutputTree->Set_NamesRoot(aHelp);
+
+ aHelp.push_back(output::IndexFilesDirName());
+ pOutputTree->Set_IndexRoot(aHelp);
+
+ (*aHelp.begin()) = String("com");
+ aHelp.push_back(String("sun"));
+ aHelp.push_back(String("star"));
+ pOutputTree->Set_Overview(aHelp, output::ModuleFileName() );
+
+ pLinker = new LinkHelper(*this);
+}
+
+HtmlEnvironment_Idl::~HtmlEnvironment_Idl()
+{
+}
+
+namespace
+{
+StringVector G_aChain;
+}
+
+void
+HtmlEnvironment_Idl::Goto_Directory( output::Position i_pos,
+ bool i_bCreateDirectoryIfNecessary )
+{
+ aCurPosition = i_pos;
+ aCurPath = aOutputRoot.MyPath();
+
+ aCurPosition.Get_Chain(G_aChain);
+ for ( StringVector::const_iterator it = G_aChain.begin();
+ it != G_aChain.end();
+ ++it )
+ {
+ aCurPath.DirChain() += *it;
+ }
+
+ if (i_bCreateDirectoryIfNecessary)
+ create_Directory(aCurPath);
+}
+
+void
+HtmlEnvironment_Idl::Goto_DirectoryLevelDown( const String & i_subDirName,
+ bool i_bCreateDirectoryIfNecessary )
+{
+ aCurPosition +=(i_subDirName);
+
+ aCurPath.SetFile(String::Null_());
+ aCurPath.DirChain() += i_subDirName;
+
+ if (i_bCreateDirectoryIfNecessary)
+ create_Directory(aCurPath);
+}
+
+void
+HtmlEnvironment_Idl::Goto_DirectoryLevelUp()
+{
+ aCurPosition -= 1;
+
+ aCurPath.SetFile(String::Null_());
+ aCurPath.DirChain() -= 1;
+}
+
+void
+HtmlEnvironment_Idl::Set_CurFile( const String & i_fileName )
+{
+ aCurPath.SetFile(i_fileName);
+}
+
+void
+HtmlEnvironment_Idl::create_Directory( const csv::ploc::Path & i_path )
+
+{
+ csv::ploc::Directory aCurDir(i_path);
+ if (NOT aCurDir.Exists())
+ aCurDir.PhysicalCreate();
+}
+
+inline bool
+IsAbsoluteLink(const char * i_link)
+{
+ const char
+ shttp[] = "http://";
+ const char
+ sfile[] = "file://";
+ const int
+ csize = sizeof shttp - 1;
+ csv_assert(csize == sizeof sfile - 1);
+
+ return strncmp(i_link,shttp,csize) == 0
+ OR strncmp(i_link,sfile,csize) == 0;
+}
+
+
+const char *
+HtmlEnvironment_Idl::Link2Manual( const String & i_link ) const
+{
+ if ( IsAbsoluteLink(i_link.c_str()) )
+ return i_link;
+
+ static StreamStr aLink_(200);
+ aLink_.reset();
+ String
+ sDvgRoot(pLayout->DevelopersGuideHtmlRoot());
+ if (sDvgRoot.empty())
+ sDvgRoot = "../DevelopersGuide";
+
+ // KORR_FUTURE
+ // Enhance performance by calculating this only one time:
+ if ( NOT IsAbsoluteLink(sDvgRoot.c_str()) )
+ aCurPosition.Get_LinkToRoot(aLink_);
+ aLink_ << sDvgRoot
+ << "/"
+ << i_link;
+ return aLink_.c_str();
+}
+
+String
+HtmlEnvironment_Idl::CurPageCe_AsText() const
+{
+ return CurPageCe_AsFile(".html");
+}
+
+String
+HtmlEnvironment_Idl::CurPageCe_AsFile(const char * i_sEnding) const
+{
+ if (pCurPageCe == 0)
+ return String::Null_();
+
+ static StringVector aModule_;
+ String sCe;
+ String sDummy;
+ Data().Get_CeText(aModule_, sCe, sDummy, *pCurPageCe);
+ StreamLock slCe(500);
+ if (aModule_.size() > 0)
+ slCe().operator_join(aModule_.begin(), aModule_.end(), "/");
+ if (NOT sCe.empty())
+ slCe() << "/" << sCe << i_sEnding;
+ return String(slCe().c_str());
+}
diff --git a/autodoc/source/display/idl/hi_env.hxx b/autodoc/source/display/idl/hi_env.hxx
new file mode 100644
index 000000000000..f671d6f46ce6
--- /dev/null
+++ b/autodoc/source/display/idl/hi_env.hxx
@@ -0,0 +1,161 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_DISPLAY_HI_ENV_HXX
+#define ADC_DISPLAY_HI_ENV_HXX
+
+
+// USED SERVICES
+ // BASE CLASSES
+ // COMPONENTS
+#include <cosv/ploc.hxx>
+#include <cosv/ploc_dir.hxx>
+ // PARAMETERS
+#include <toolkit/out_position.hxx>
+
+namespace ary
+{
+namespace idl
+{
+ class Gate;
+ class CodeEntity;
+}
+}
+namespace display
+{
+ class CorporateFrame;
+}
+namespace output
+{
+ class Tree;
+}
+
+class AryAccess;
+class LinkHelper;
+
+/** @resp
+ Provides enviroment information to the HTML factory
+ classes.
+
+ @descr
+ All information that is not included in the data, especially
+ about the layout of the output tree and the access to
+ information from the repository are provided here.
+
+ @see HtmlFactory
+*/
+class HtmlEnvironment_Idl
+{
+ public:
+ // LIFECYCLE
+ HtmlEnvironment_Idl(
+ const csv::ploc::Path &
+ io_rOutputDir,
+ const ary::idl::Gate &
+ i_rGate,
+ const display::CorporateFrame &
+ i_rLayout );
+ ~HtmlEnvironment_Idl();
+
+ // OPERATIONS
+ void Goto_Directory(
+ output::Position i_pos,
+ bool i_bCreateDirectoryIfNecessary );
+ void Goto_DirectoryLevelDown(
+ const String & i_subDirName,
+ bool i_bCreateDirectoryIfNecessary );
+ void Goto_DirectoryLevelUp();
+ void Set_CurFile(
+ const String & i_fileName );
+ void Set_CurPageCe(
+ const ary::idl::CodeEntity *
+ i_ce )
+ { pCurPageCe = i_ce; }
+ // INQUIRY
+ const ary::idl::Gate &
+ Gate() const { return *pGate; }
+ const AryAccess & Data() const { return *pData; }
+ const char * Link2Manual(
+ const String & i_link ) const;
+
+ /// This may be reimplemented for removing dead links to members.
+ bool Is_MemberExistenceCheckRequired() const
+ { return false; }
+
+ /// @return Holds only the current directory, not the current file.
+ output::Position & CurPosition() const { return aCurPosition; }
+ void Get_CurFilePath(
+ StreamStr & o_buffer ) const
+ { o_buffer << aCurPath; }
+
+ const display::CorporateFrame &
+ Layout() const { return *pLayout; }
+ const LinkHelper & Linker() const { return *pLinker; }
+
+ void Get_LinkTo(
+ StreamStr & o_result,
+ output::Position i_destination )
+ { CurPosition().Get_LinkTo(o_result, i_destination); }
+ String CurPageCe_AsText() const;
+ String CurPageCe_AsFile(
+ const char * i_sEnding) const;
+ const ary::idl::CodeEntity *
+ CurPageCe() const { return pCurPageCe; }
+
+ // ACCESS
+ output::Tree & OutputTree() { return *pOutputTree; }
+
+ private:
+ // Local
+ void create_Directory(
+ const csv::ploc::Path &
+ i_path );
+
+ // DATA
+ csv::ploc::Directory
+ aOutputRoot;
+ csv::ploc::Path aCurPath;
+
+ Dyn<AryAccess> pData; /// @invariant *pData is valid.
+ const ary::idl::Gate *
+ pGate; /// @invariant pGate != 0.
+ Dyn<output::Tree> pOutputTree; /// @invariant *pOutputTree is valid.
+ mutable output::Position
+ aCurPosition;
+ const ary::idl::CodeEntity *
+ pCurPageCe;
+
+ const display::CorporateFrame *
+ pLayout;
+
+ Dyn<LinkHelper> pLinker;
+};
+
+
+#endif
+
+
diff --git a/autodoc/source/display/idl/hi_factory.cxx b/autodoc/source/display/idl/hi_factory.cxx
new file mode 100644
index 000000000000..78d71bf83525
--- /dev/null
+++ b/autodoc/source/display/idl/hi_factory.cxx
@@ -0,0 +1,321 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "hi_factory.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include <ary/idl/i_ce.hxx>
+#include <toolkit/hf_title.hxx>
+#include "hfi_doc.hxx"
+#include "hfi_navibar.hxx"
+#include "hfi_tag.hxx"
+#include "hfi_typetext.hxx"
+#include "hi_linkhelper.hxx"
+
+
+extern const String
+ C_sCellStyle_SummaryLeft("imsum_left");
+extern const String
+ C_sCellStyle_SummaryRight("imsum_right");
+extern const String
+ C_sCellStyle_MDetail("imdetail");
+extern const String
+ C_sMemberTitle("membertitle");
+
+
+namespace
+{
+
+const char C_sSpace[92] = " "
+ " "
+ " ";
+}
+
+
+void
+HtmlFactory_Idl::produce_SummaryDeclaration( Xml::Element & o_row,
+ const client & i_ce ) const
+{
+ produce_InternalLink(o_row, i_ce);
+}
+
+void
+HtmlFactory_Idl::produce_InternalLink( Xml::Element & o_screen,
+ const client & i_ce ) const
+{
+ StreamLock aLocalLink(100);
+ aLocalLink() << "#" << i_ce.LocalName();
+
+ o_screen
+ >> *new Html::TableCell
+ << new Html::ClassAttr( C_sCellStyle_SummaryLeft )
+ >> *new Html::Link( aLocalLink().c_str() )
+ << i_ce.LocalName();
+}
+
+void
+HtmlFactory_Idl::produce_ShortDoc( Xml::Element & o_screen,
+ const client & i_ce ) const
+{
+ Xml::Element &
+ rDetailsRowCell = o_screen
+ >> *new Html::TableCell
+ << new Html::ClassAttr( C_sCellStyle_SummaryRight );
+ HF_IdlShortDocu
+ aLinkDoc(Env(), rDetailsRowCell);
+ aLinkDoc.Produce_byData( i_ce );
+
+ rDetailsRowCell << new Xml::XmlCode("&nbsp;");
+}
+
+// KORR_FUTURE: Does not belong here (implementation inheritance)!
+void
+HtmlFactory_Idl::produce_Bases( Xml::Element & o_screen,
+ const client & i_ce,
+ const String & i_sLabel ) const
+{
+ ary::idl::Type_id nBaseT = baseOf(i_ce);
+ if ( nBaseT.IsValid() )
+ {
+ HF_DocEntryList
+ aDocList( o_screen );
+ aDocList.Produce_Term(i_sLabel);
+
+ int nDepth = 0;
+ Xml::Element &
+ rBaseList = aDocList.Produce_Definition()
+ >> *new Xml::AnElement("pre")
+ << new Xml::AnAttribute("style","font-family:monospace;");
+ rBaseList
+ >> *new Html::Strong
+ << i_ce.LocalName();
+ rBaseList
+ << "\n";
+ recursive_ShowBases( rBaseList,
+ nBaseT,
+ nDepth );
+ }
+}
+
+void
+HtmlFactory_Idl::produce_Members( ce_list & it_list,
+ const String & i_summaryTitle,
+ const String & i_summaryLabel,
+ const String & i_detailsTitle,
+ const String & i_detailsLabel,
+ const E_MemberViewType i_viewType ) const
+{
+ csv_assert( it_list );
+
+ Dyn< HF_SubTitleTable > pSummary;
+ if ( ( i_viewType == viewtype_summary )
+ || ( i_viewType == viewtype_complete )
+ )
+ {
+ pSummary = new HF_SubTitleTable(
+ CurOut(),
+ i_summaryLabel,
+ i_summaryTitle,
+ 2 );
+ }
+
+ Dyn< HF_SubTitleTable > pDetails;
+ if ( ( i_viewType == viewtype_details )
+ || ( i_viewType == viewtype_complete )
+ )
+ {
+ pDetails = new HF_SubTitleTable(
+ CurOut(),
+ i_detailsLabel,
+ i_detailsTitle,
+ 1 );
+ }
+
+ for ( ; it_list.operator bool(); ++it_list )
+ {
+ const ary::idl::CodeEntity &
+ rCe = Env().Data().Find_Ce(*it_list);
+
+ if ( pSummary )
+ {
+ Xml::Element &
+ rSummaryRow = pSummary->Add_Row();
+ produce_SummaryDeclaration(rSummaryRow, rCe);
+// produce_InternalLink(rSummaryRow, rCe);
+ produce_ShortDoc(rSummaryRow, rCe);
+ }
+
+ if ( pDetails )
+ produce_MemberDetails(*pDetails, rCe);
+ }
+}
+
+void
+HtmlFactory_Idl::produce_Title( HF_TitleTable & o_title,
+ const String & i_label,
+ const client & i_ce ) const
+{
+ StreamLock
+ slAnnotations(200);
+ get_Annotations(slAnnotations(), i_ce);
+ StreamLock
+ slTitle(200);
+ slTitle() << i_label << " " << i_ce.LocalName();
+ o_title.Produce_Title( slAnnotations().c_str(),
+ slTitle().c_str() );
+}
+
+void
+HtmlFactory_Idl::get_Annotations( StreamStr & o_out,
+ const client & i_ce ) const
+{
+ const ary::doc::OldIdlDocu *
+ doc = Get_IdlDocu(i_ce.Docu());
+ if (doc != 0)
+ {
+ if (doc->IsDeprecated())
+ o_out << "deprecated ";
+ if (NOT doc->IsPublished())
+ o_out << "unpublished ";
+ }
+
+ // KORR
+ // Need to display "unpublished", if there is no docu.
+}
+
+void
+HtmlFactory_Idl::write_Docu( Xml::Element & o_screen,
+ const client & i_ce ) const
+{
+ const ary::doc::OldIdlDocu *
+ doc = Get_IdlDocu(i_ce.Docu());
+ if (doc != 0)
+ {
+ HF_DocEntryList
+ aDocuList( o_screen );
+ HF_IdlDocu
+ aDocu( Env(), aDocuList );
+ aDocu.Produce_fromCodeEntity(i_ce);
+ }
+
+ write_ManualLinks(o_screen, i_ce);
+}
+
+void
+HtmlFactory_Idl::write_ManualLinks( Xml::Element & o_screen,
+ const client & i_ce ) const
+{
+ const StringVector &
+ rLinks2Descrs = i_ce.Secondaries().Links2DescriptionInManual();
+ if ( rLinks2Descrs.size() == 0 )
+ return;
+
+ o_screen
+ >> *new Html::Label(C_sLocalManualLinks.c_str()+1) // Leave out the leading '#'.
+ << " ";
+ HF_DocEntryList
+ aDocuList( o_screen );
+ aDocuList.Produce_Term("Developers Guide");
+ csv_assert(rLinks2Descrs.size() % 2 == 0);
+ for ( StringVector::const_iterator it = rLinks2Descrs.begin();
+ it != rLinks2Descrs.end();
+ ++it )
+ {
+ Xml::Element &
+ rLink = aDocuList.Produce_Definition() >> *new Html::Link( Env().Link2Manual(*it));
+ if ( (*(it+1)).empty() )
+ // HACK KORR_FUTURE
+ // Research what happens with manual links which contain normal characters
+ // in non-utf-8 texts. And research, why utfF-8 does not work here.
+ rLink << new Xml::XmlCode(*it);
+ else
+ rLink << new Xml::XmlCode( *(it+1) );
+ ++it;
+ } // end for
+}
+
+void
+HtmlFactory_Idl::produce_MemberDetails( HF_SubTitleTable & ,
+ const client & ) const
+{
+ // Dummy, which does not need to do anything.
+}
+
+void
+HtmlFactory_Idl::recursive_ShowBases( Xml::Element & o_screen,
+ type_id i_baseType,
+ int & io_nDepth ) const
+{
+ // Show this base
+ ++io_nDepth;
+ const ary::idl::CodeEntity *
+ pCe = Env().Linker().Search_CeFromType(i_baseType);
+
+ csv_assert(io_nDepth > 0);
+ if (io_nDepth > 30)
+ io_nDepth = 30;
+ o_screen
+ << (C_sSpace + 93 - 3*io_nDepth)
+ << new csi::xml::XmlCode("&#x2517")
+ << " ";
+
+ if (pCe == 0)
+ {
+ HF_IdlTypeText
+ aText( Env(), o_screen, false );
+ aText.Produce_byData( i_baseType );
+ o_screen
+ << "\n";
+ --io_nDepth;
+ return;
+ }
+
+ HF_IdlTypeText
+ aBaseLink( Env(), o_screen, true );
+ aBaseLink.Produce_byData(pCe->CeId());
+ o_screen
+ << "\n";
+
+ // Bases
+ ary::idl::Type_id
+ nBaseT = baseOf(*pCe);
+ if (nBaseT.IsValid())
+ recursive_ShowBases(o_screen,nBaseT,io_nDepth);
+
+ --io_nDepth;
+ return;
+}
+
+HtmlFactory_Idl::type_id
+HtmlFactory_Idl::inq_BaseOf( const client & ) const
+{
+ // Unused dummy.
+ return type_id(0);
+}
+
diff --git a/autodoc/source/display/idl/hi_factory.hxx b/autodoc/source/display/idl/hi_factory.hxx
new file mode 100644
index 000000000000..d7a649bbfbb2
--- /dev/null
+++ b/autodoc/source/display/idl/hi_factory.hxx
@@ -0,0 +1,169 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_DISPLAY_HI_FACTORY_HXX
+#define ADC_DISPLAY_HI_FACTORY_HXX
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <toolkit/htmlfactory.hxx>
+ // COMPONENTS
+ // PARAMETERS
+#include <ary/stdconstiter.hxx>
+#include <ary/idl/i_types4idl.hxx>
+#include <toolkit/out_position.hxx>
+
+
+namespace ary
+{
+namespace idl
+{
+ class Module;
+}
+namespace doc
+{
+ class OldIdlDocu;
+}
+}
+
+
+class HtmlEnvironment_Idl;
+class LinkHelper;
+class HF_NaviSubRow;
+class HF_TitleTable;
+class HF_SubTitleTable;
+
+
+class HtmlFactory_Idl : public HtmlFactory<HtmlEnvironment_Idl>
+{
+ public:
+ enum E_MemberViewType
+ {
+ viewtype_summary, // the summary of the members
+ viewtype_details, // the details of the members
+ viewtype_complete // everything
+ };
+
+ enum E_DocType
+ {
+ doctype_summaryOnly, // only the summary
+ doctype_complete // the complete documentation
+ };
+
+ public:
+ typedef ary::idl::CodeEntity client;
+ typedef ary::idl::Ce_id ce_id;
+ typedef ary::idl::Type_id type_id;
+ typedef ary::doc::OldIdlDocu ce_info;
+
+ typedef ary::Dyn_StdConstIterator<ce_id> dyn_ce_list;
+ typedef ary::Dyn_StdConstIterator<type_id> dyn_type_list;
+ typedef ary::StdConstIterator<ce_id> ce_list;
+ typedef ary::StdConstIterator<type_id> type_list;
+
+ typedef HtmlEnvironment_Idl Environment;
+ typedef output::Position OutPosition;
+
+ protected:
+ HtmlFactory_Idl(
+ Environment & io_rEnv,
+ Xml::Element * o_pOut = 0 )
+ : HtmlFactory<Environment>(io_rEnv, o_pOut)
+ { }
+ virtual ~HtmlFactory_Idl() {}
+
+ /** The default version only calls ->produce_InternalLink().
+ This may be overwritten by derived classes.
+ */
+ virtual void produce_SummaryDeclaration(
+ Xml::Element & o_row,
+ const client & i_ce ) const;
+ void produce_InternalLink(
+ Xml::Element & o_row,
+ const client & i_ce ) const;
+ void produce_ShortDoc(
+ Xml::Element & o_row,
+ const client & i_ce ) const;
+
+ // KORR_FUTURE: Does not belong here (implementation inheritance)!
+ void produce_Bases(
+ Xml::Element & o_screen,
+ const client & i_ce,
+ const String & i_sLabel ) const;
+ void produce_Members(
+ ce_list & it_list,
+ const String & i_summaryTitle,
+ const String & i_summaryLabel,
+ const String & i_detailsTitle,
+ const String & i_detailsLabel,
+ const E_MemberViewType i_viewType = viewtype_complete ) const;
+
+ void produce_Title(
+ HF_TitleTable & o_title,
+ const String & i_label,
+ const client & i_ce ) const;
+ void get_Annotations(
+ StreamStr & o_out,
+ const client & i_ce ) const;
+
+ /// Writes complete docu in standard format.
+ void write_Docu(
+ Xml::Element & o_screen,
+ const client & i_ce ) const;
+
+ void write_ManualLinks(
+ Xml::Element & o_screen,
+ const client & i_ce ) const;
+ private:
+ // Dummy does nothing
+ virtual void produce_MemberDetails(
+ HF_SubTitleTable & o_table,
+ const client & i_ce ) const;
+ void recursive_ShowBases(
+ Xml::Element & o_screen,
+ type_id i_baseType,
+ int & io_nDepth ) const;
+ type_id baseOf(
+ const client & i_ce ) const
+ { return inq_BaseOf(i_ce); }
+ virtual type_id inq_BaseOf(
+ const client & i_ce ) const;
+};
+
+
+extern const String
+ C_sCellStyle_SummaryLeft;
+extern const String
+ C_sCellStyle_SummaryRight;
+extern const String
+ C_sCellStyle_MDetail;
+extern const String
+ C_sMemberTitle;
+
+
+#endif
diff --git a/autodoc/source/display/idl/hi_linkhelper.cxx b/autodoc/source/display/idl/hi_linkhelper.cxx
new file mode 100644
index 000000000000..1e3bff61b50c
--- /dev/null
+++ b/autodoc/source/display/idl/hi_linkhelper.cxx
@@ -0,0 +1,96 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "hi_linkhelper.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include <ary/idl/i_module.hxx>
+
+
+
+
+const ary::idl::Module *
+LinkHelper::Search_CurModule() const
+{
+ return Search_Module( rEnv.CurPosition().RelatedNode() );
+}
+
+const ary::idl::Module *
+LinkHelper::Search_Module( output::Node & i_node ) const
+{
+ static StringVector aNames_;
+
+ output::Node::relative_id
+ nId = i_node.RelatedNameRoom();
+ if (nId == 0)
+ {
+ csv::erase_container(aNames_);
+ i_node.Get_Chain(aNames_);
+ const ary::idl::Module * pModule =
+ rEnv.Data().Search_Module(aNames_);
+ if ( pModule == 0 )
+ return 0;
+ nId = static_cast<output::Node::relative_id>(pModule->Id());
+ rEnv.CurPosition().RelatedNode().Set_RelatedNameRoom(nId);
+ }
+
+ return & rEnv.Data().Find_Module( ary::idl::Ce_id(nId) );
+}
+
+namespace
+{
+ const String C_sXrefsSuffix("-xref");
+}
+
+
+LinkHelper::OutPosition
+LinkHelper::PositionOf_CurXRefs( const String & i_ceName ) const
+{
+ StreamLock sl(100);
+ return OutPosition( rEnv.CurPosition(),
+ sl() << i_ceName
+ << C_sXrefsSuffix
+ << ".html"
+ << c_str );
+}
+
+const String &
+LinkHelper::XrefsSuffix() const
+{
+ return C_sXrefsSuffix;
+}
+
+
+String
+nameChainLinker( const char * )
+{
+ static const String
+ sModuleFileName_( output::ModuleFileName() );
+ return sModuleFileName_;
+}
diff --git a/autodoc/source/display/idl/hi_linkhelper.hxx b/autodoc/source/display/idl/hi_linkhelper.hxx
new file mode 100644
index 000000000000..26f50cca2f87
--- /dev/null
+++ b/autodoc/source/display/idl/hi_linkhelper.hxx
@@ -0,0 +1,107 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_DISPLAY_HI_LINKHELPER_HXX
+#define ADC_DISPLAY_HI_LINKHELPER_HXX
+
+
+// USED SERVICES
+ // BASE CLASSES
+ // COMPONENTS
+ // PARAMETERS
+#include "hi_ary.hxx"
+#include "hi_env.hxx"
+#include <toolkit/out_position.hxx>
+#include <toolkit/out_tree.hxx>
+
+
+class LinkHelper
+{
+ public:
+ typedef ary::idl::CodeEntity CE;
+ typedef output::Position OutPosition;
+
+ LinkHelper(
+ HtmlEnvironment_Idl &
+ io_rEnv )
+ : rEnv(io_rEnv) {}
+
+ OutPosition PositionOf_CurModule() const
+ { return OutPosition( rEnv.CurPosition(),
+ output::ModuleFileName()); }
+
+ OutPosition PositionOf_CurXRefs(
+ const String & i_ceName) const;
+ OutPosition PositionOf_Index() const
+ { OutPosition ret1 = rEnv.OutputTree().IndexRoot();
+ return OutPosition( ret1, String(output::IndexFile_A()) ); }
+
+
+ const ary::idl::Module *
+ Search_CurModule() const;
+ const ary::idl::Module *
+ Search_Module(
+ output::Node & i_node ) const;
+
+ const CE * Search_CeFromType(
+ ary::idl::Type_id i_type ) const;
+
+ void Get_Link2Position(
+ StreamStr & o_link,
+ OutPosition & i_pos ) const
+ { rEnv.CurPosition().Get_LinkTo(o_link, i_pos); }
+
+ void Get_Link2Member(
+ StreamStr & o_link,
+ OutPosition & i_ownerPos,
+ const String & i_memberName ) const
+ { Get_Link2Position(o_link, i_ownerPos);
+ o_link << "#" << i_memberName; }
+ const String & XrefsSuffix() const;
+
+ private:
+ // DATA
+ mutable HtmlEnvironment_Idl &
+ rEnv;
+};
+
+inline const ary::idl::CodeEntity *
+LinkHelper::Search_CeFromType( ary::idl::Type_id i_type ) const
+{
+ ary::idl::Ce_id nCe = rEnv.Data().CeFromType(i_type);
+ if (nCe.IsValid())
+ return &rEnv.Data().Find_Ce(nCe);
+ return 0;
+}
+
+
+
+String nameChainLinker(
+ const char * i_levelName );
+
+
+#endif
diff --git a/autodoc/source/display/idl/hi_main.cxx b/autodoc/source/display/idl/hi_main.cxx
new file mode 100644
index 000000000000..8a18d4a8564b
--- /dev/null
+++ b/autodoc/source/display/idl/hi_main.cxx
@@ -0,0 +1,764 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "hi_main.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include <algorithm>
+#include <cosv/ploc.hxx>
+#include <cosv/file.hxx>
+#include <ary/idl/i_ce.hxx>
+#include <ary/idl/ik_ce.hxx>
+#include <ary/idl/ik_enum.hxx>
+#include <ary/idl/ik_typedef.hxx>
+#include <ary/idl/ik_interface.hxx>
+#include <ary/idl/ik_struct.hxx>
+#include <ary/idl/ik_exception.hxx>
+#include <ary/idl/i_constant.hxx>
+#include <ary/idl/i_constgroup.hxx>
+#include <ary/idl/i_enum.hxx>
+#include <ary/idl/i_singleton.hxx>
+#include <ary/idl/i_sisingleton.hxx>
+#include <ary/idl/i_exception.hxx>
+#include <ary/idl/i_interface.hxx>
+#include <ary/idl/i_service.hxx>
+#include <ary/idl/i_siservice.hxx>
+#include <ary/idl/i_struct.hxx>
+#include <ary/idl/i_typedef.hxx>
+#include <ary/idl/i_module.hxx>
+#include <cfrstd.hxx>
+#include <toolkit/htmlfile.hxx>
+#include <toolkit/out_position.hxx>
+#include <toolkit/out_tree.hxx>
+#include "hfi_constgroup.hxx"
+#include "hfi_enum.hxx"
+#include "hfi_globalindex.hxx"
+#include "hfi_interface.hxx"
+#include "hfi_module.hxx"
+#include "hfi_struct.hxx"
+#include "hfi_service.hxx"
+#include "hfi_singleton.hxx"
+#include "hfi_siservice.hxx"
+#include "hfi_typedef.hxx"
+#include "hfi_xrefpage.hxx"
+#include "hi_env.hxx"
+#include "hi_linkhelper.hxx"
+
+
+using ::ary::idl::Ce_id;
+using ::ary::idl::Type_id;
+using ::ary::idl::ifc_ce::Dyn_CeIterator;
+
+
+
+extern const String C_sCssFilename_Idl("idl.css");
+
+/*
+typedef ::ary::Dyn_StdConstIterator< ::ary::idl::CommentedRelation>
+ Dyn_ComRefIterator;
+namespace read_module = ::ary::idl::ifc_module;
+namespace read_interface = ::ary::idl::ifc_interface;
+namespace read_service = ::ary::idl::ifc_service;
+namespace read_struct = ::ary::idl::ifc_struct;
+namespace read_exception = ::ary::idl::ifc_exception;
+namespace read_enum = ::ary::idl::ifc_enum;
+namespace read_typedef = ::ary::idl::ifc_typedef;
+namespace read_constgroup = ::ary::idl::ifc_constantsgroup;
+*/
+
+namespace
+{
+
+/** @resp
+ Inits (constructor) and creates (destructor) the current
+ html documentation file ( MainDisplay_Idl.pMyFile ).
+*/
+class Guard_CurFile
+{
+ public:
+ Guard_CurFile( /// For CodeEntities
+ DocuFile_Html & io_client,
+ HtmlEnvironment_Idl &
+ io_env,
+ const ary::idl::CodeEntity &
+ i_ce,
+ const String & i_titlePrefix );
+ Guard_CurFile( /// For Use pages
+ DocuFile_Html & io_client,
+ HtmlEnvironment_Idl &
+ io_env,
+ const String & i_fileName,
+ const String & i_titlePrefix );
+ Guard_CurFile( /// For Modules
+ DocuFile_Html & io_client,
+ HtmlEnvironment_Idl &
+ io_env,
+ const ary::idl::CodeEntity &
+ i_ce );
+ Guard_CurFile( /// For Indices
+ DocuFile_Html & io_client,
+ HtmlEnvironment_Idl &
+ io_env,
+ char i_letter );
+ ~Guard_CurFile();
+ private:
+ DocuFile_Html & rClient;
+ HtmlEnvironment_Idl &
+ rEnv;
+
+};
+
+/** @resp
+ Sets and releases the current factory pointer
+ ( MainDisplay_Idl.pCurFactory ).
+*/
+class Guard_CurFactoryPtr
+{
+ public:
+ Guard_CurFactoryPtr(
+ HtmlFactory_Idl *& io_client,
+ HtmlFactory_Idl & i_factory )
+ : rpClient(io_client)
+ { rpClient = &i_factory; }
+
+ ~Guard_CurFactoryPtr()
+ { rpClient = 0; }
+
+ private:
+ HtmlFactory_Idl *& rpClient;
+
+};
+
+
+Guard_CurFile::Guard_CurFile( DocuFile_Html & io_client,
+ HtmlEnvironment_Idl & io_env,
+ const ary::idl::CodeEntity & i_ce,
+ const String & i_titlePrefix )
+ : rClient(io_client),
+ rEnv(io_env)
+{ // For Ces
+ StreamLock sl(300);
+ io_env.Set_CurFile( sl() << i_ce.LocalName()
+ << ".html"
+ << c_str );
+ StreamLock aCurFilePath(700);
+ io_env.Get_CurFilePath(aCurFilePath());
+
+ rClient.EmptyBody();
+ csv::ploc::Path
+ aLocation(aCurFilePath().c_str());
+ rClient.SetLocation(aLocation);
+ sl().reset();
+ rClient.SetTitle( sl() << i_titlePrefix
+ << " "
+ << i_ce.LocalName()
+ << c_str );
+ sl().reset();
+ rClient.SetRelativeCssPath(
+ sl() << io_env.CurPosition().LinkToRoot()
+ << C_sCssFilename_Idl
+ << c_str );
+
+ io_env.Set_CurPageCe(&i_ce);
+}
+
+Guard_CurFile::Guard_CurFile( DocuFile_Html & io_client,
+ HtmlEnvironment_Idl & io_env,
+ const String & i_fileName,
+ const String & i_titlePrefix )
+ : rClient(io_client),
+ rEnv(io_env)
+{ // For Use pages
+ StreamLock sl(300);
+ io_env.Set_CurFile( sl() << i_fileName
+ << ".html"
+ << c_str );
+ StreamLock aCurFilePath(700);
+ io_env.Get_CurFilePath(aCurFilePath());
+ csv::ploc::Path
+ aLocation(aCurFilePath().c_str());
+
+ rClient.EmptyBody();
+ rClient.SetLocation(aLocation);
+ sl().reset();
+ rClient.SetTitle( sl() << i_titlePrefix << " " << i_fileName << c_str );
+ sl().reset();
+ rClient.SetRelativeCssPath(
+ sl() << io_env.CurPosition().LinkToRoot()
+ << C_sCssFilename_Idl
+ << c_str );
+
+ io_env.Set_CurPageCe(0);
+}
+
+Guard_CurFile::Guard_CurFile( DocuFile_Html & io_client,
+ HtmlEnvironment_Idl & io_env,
+ const ary::idl::CodeEntity & i_ce )
+ : rClient(io_client),
+ rEnv(io_env)
+{ // For Modules
+ io_env.Set_CurFile( output::ModuleFileName() );
+ StreamLock aCurFilePath(700);
+ io_env.Get_CurFilePath(aCurFilePath());
+ csv::ploc::Path
+ aLocation(aCurFilePath().c_str());
+
+ rClient.EmptyBody();
+ rClient.SetLocation(aLocation);
+ StreamLock sl(300);
+ rClient.SetTitle( sl() << "Module " << io_env.CurPosition().Name() << c_str );
+ sl().reset();
+ rClient.SetRelativeCssPath(
+ sl() << io_env.CurPosition().LinkToRoot()
+ << C_sCssFilename_Idl
+ << c_str );
+
+ io_env.Set_CurPageCe(&i_ce);
+}
+
+Guard_CurFile::Guard_CurFile( DocuFile_Html & io_client,
+ HtmlEnvironment_Idl & io_env,
+ char i_letter )
+ : rClient(io_client),
+ rEnv(io_env)
+{ // For Index pages
+ StreamLock sl(300);
+ io_env.Set_CurFile( sl() << "index-"
+ << ( i_letter != '_'
+ ? int(i_letter)-'a'+1
+ : 27 )
+ << ".html"
+ << c_str );
+ StreamLock aCurFilePath(700);
+ io_env.Get_CurFilePath(aCurFilePath());
+ csv::ploc::Path
+ aLocation(aCurFilePath().c_str());
+
+ rClient.EmptyBody();
+ rClient.SetLocation(aLocation);
+ sl().reset();
+ rClient.SetTitle( sl() << "Global Index "
+ << ( i_letter != '_'
+ ? char(i_letter-'a'+'A')
+ : '_' )
+ << c_str );
+ sl().reset();
+ rClient.SetRelativeCssPath(
+ sl() << "../"
+ << C_sCssFilename_Idl
+ << c_str );
+}
+
+Guard_CurFile::~Guard_CurFile()
+{
+ rClient.CreateFile();
+ rEnv.Set_CurPageCe(0);
+}
+
+
+} // anonymous namespace
+
+
+
+
+MainDisplay_Idl::MainDisplay_Idl( HtmlEnvironment_Idl & io_rEnv )
+ : pEnv(&io_rEnv),
+ pMyFile(new DocuFile_Html),
+ pCurFactory(0)
+{
+// pMyFile->SetStyle( Env().Layout().CssStyle() );
+ pMyFile->SetCopyright( Env().Layout().CopyrightText() );
+}
+
+MainDisplay_Idl::~MainDisplay_Idl()
+{
+}
+
+
+void
+MainDisplay_Idl::WriteGlobalIndices()
+{
+ for ( const char * pLetter = "abcdefghijklmnopqrstuvwxyz_X"; *pLetter != 'X'; ++pLetter )
+ {
+ Guard_CurFile gFile( *pMyFile, Env(), *pLetter );
+
+ HF_IdlGlobalIndex aFactory( *pEnv, pMyFile->Body() );
+ Guard_CurFactoryPtr gFactory(pCurFactory,aFactory);
+
+ aFactory.Produce_Page( ary::idl::alphabetical_index::E_Letter(*pLetter) );
+ } // end for
+}
+
+
+void
+MainDisplay_Idl::do_Process( const ary::idl::Module & i_ce )
+{
+ Guard_CurFile gFile( *pMyFile,
+ Env(),
+ i_ce );
+ HF_IdlModule aFactory( *pEnv, pMyFile->Body() );
+ Guard_CurFactoryPtr gFactory(pCurFactory,aFactory);
+
+ aFactory.Produce_byData(i_ce);
+}
+
+void
+MainDisplay_Idl::do_Process( const ary::idl::Interface & i_ce )
+{
+ do_InterfaceDescr(i_ce);
+ do_Interface2s(i_ce);
+}
+
+void
+MainDisplay_Idl::do_Process( const ary::idl::Service & i_ce )
+{
+ do_ServiceDescr(i_ce);
+ do_Service2s(i_ce);
+}
+
+void
+MainDisplay_Idl::do_Process( const ary::idl::SglIfcService & i_ce )
+{
+ do_SglIfcServiceDescr(i_ce);
+}
+
+void
+MainDisplay_Idl::do_Process( const ary::idl::Struct & i_ce )
+{
+ do_StructDescr(i_ce);
+ do_Struct2s(i_ce);
+}
+
+void
+MainDisplay_Idl::do_Process( const ary::idl::Exception & i_ce )
+{
+ do_ExceptionDescr(i_ce);
+ do_Exception2s(i_ce);
+}
+
+void
+MainDisplay_Idl::do_Process( const ary::idl::Enum & i_ce )
+{
+ do_EnumDescr(i_ce);
+ do_Enum2s(i_ce);
+}
+
+void
+MainDisplay_Idl::do_Process( const ary::idl::Typedef & i_ce )
+{
+ do_TypedefDescr(i_ce);
+ do_Typedef2s(i_ce);
+}
+
+void
+MainDisplay_Idl::do_Process( const ary::idl::ConstantsGroup & i_ce )
+{
+ Guard_CurFile gFile( *pMyFile,
+ Env(),
+ i_ce,
+ "Constants' Group" );
+ HF_IdlConstGroup aFactory( *pEnv, pMyFile->Body() );
+ Guard_CurFactoryPtr gFactory(pCurFactory,aFactory);
+
+ aFactory.Produce_byData(i_ce);
+}
+
+void
+MainDisplay_Idl::do_Process( const ary::idl::Singleton & i_ce )
+{
+ Guard_CurFile gFile( *pMyFile,
+ Env(),
+ i_ce,
+ "Singleton" );
+ HF_IdlSingleton aFactory( *pEnv, pMyFile->Body() );
+ Guard_CurFactoryPtr gFactory(pCurFactory,aFactory);
+
+ aFactory.Produce_byData_ServiceBased(i_ce);
+}
+
+void
+MainDisplay_Idl::do_Process( const ary::idl::SglIfcSingleton & i_ce )
+{
+ Guard_CurFile gFile( *pMyFile,
+ Env(),
+ i_ce,
+ "Singleton" );
+ HF_IdlSingleton aFactory( *pEnv, pMyFile->Body() );
+ Guard_CurFactoryPtr gFactory(pCurFactory,aFactory);
+
+ aFactory.Produce_byData_InterfaceBased(i_ce);
+}
+
+void
+MainDisplay_Idl::do_InterfaceDescr( const ary::idl::CodeEntity & i_ce )
+{
+ Guard_CurFile gFile( *pMyFile,
+ Env(),
+ i_ce,
+ "Interface" );
+ HF_IdlInterface aInterface( *pEnv, pMyFile->Body() );
+ Guard_CurFactoryPtr gFactory(pCurFactory,aInterface);
+
+ aInterface.Produce_byData(i_ce);
+}
+
+void
+MainDisplay_Idl::do_ServiceDescr( const ary::idl::CodeEntity & i_ce )
+{
+ Guard_CurFile gFile( *pMyFile,
+ Env(),
+ i_ce,
+ "Service" );
+ HF_IdlService aFactory( *pEnv, pMyFile->Body() );
+ Guard_CurFactoryPtr gFactory(pCurFactory,aFactory);
+
+ aFactory.Produce_byData(i_ce);
+}
+
+void
+MainDisplay_Idl::do_SglIfcServiceDescr( const ary::idl::CodeEntity & i_ce )
+{
+ Guard_CurFile gFile( *pMyFile,
+ Env(),
+ i_ce,
+ "Service" );
+ HF_IdlSglIfcService aFactory( *pEnv, pMyFile->Body() );
+ Guard_CurFactoryPtr gFactory(pCurFactory,aFactory);
+
+ aFactory.Produce_byData(i_ce);
+}
+
+void
+MainDisplay_Idl::do_StructDescr( const ary::idl::CodeEntity & i_ce )
+{
+ Guard_CurFile gFile( *pMyFile,
+ Env(),
+ i_ce,
+ "Struct" );
+ HF_IdlStruct aFactory( *pEnv, pMyFile->Body(), false );
+ Guard_CurFactoryPtr gFactory(pCurFactory,aFactory);
+
+ aFactory.Produce_byData(i_ce);
+}
+
+void
+MainDisplay_Idl::do_ExceptionDescr( const ary::idl::CodeEntity & i_ce )
+{
+ Guard_CurFile gFile( *pMyFile,
+ Env(),
+ i_ce,
+ "Exception" );
+ HF_IdlStruct aFactory( *pEnv, pMyFile->Body(), true );
+ Guard_CurFactoryPtr gFactory(pCurFactory,aFactory);
+
+ aFactory.Produce_byData(i_ce);
+}
+
+void
+MainDisplay_Idl::do_EnumDescr( const ary::idl::CodeEntity & i_ce )
+{
+ Guard_CurFile gFile( *pMyFile,
+ Env(),
+ i_ce,
+ "Enum" );
+ HF_IdlEnum aFactory( *pEnv, pMyFile->Body() );
+ Guard_CurFactoryPtr gFactory(pCurFactory,aFactory);
+
+ aFactory.Produce_byData(i_ce);
+}
+
+void
+MainDisplay_Idl::do_TypedefDescr( const ary::idl::CodeEntity & i_ce )
+{
+ Guard_CurFile gFile( *pMyFile,
+ Env(),
+ i_ce,
+ "Typedef" );
+ HF_IdlTypedef aFactory( *pEnv, pMyFile->Body() );
+ Guard_CurFactoryPtr gFactory(pCurFactory,aFactory);
+
+ aFactory.Produce_byData(i_ce);
+}
+
+void
+MainDisplay_Idl::do_Interface2s( const ary::idl::CodeEntity & i_ce )
+{
+ StreamLock sl(100);
+ String sUsesFileName(
+ sl()
+ << i_ce.LocalName()
+ << Env().Linker().XrefsSuffix()
+ << c_str );
+ Guard_CurFile gFile( *pMyFile,
+ Env(),
+ sUsesFileName,
+ "Uses of Interface" );
+ HF_IdlXrefs aUses( *pEnv,
+ pMyFile->Body(),
+ C_sCePrefix_Interface,
+ i_ce );
+
+
+ aUses.Produce_Tree(
+ "Derived Interfaces",
+ "#Deriveds",
+ i_ce,
+ &ary::idl::ifc_interface::xref::Get_Derivations );
+
+ Dyn_CeIterator pXrefList;
+
+ ary::idl::ifc_interface::xref::Get_SynonymTypedefs(pXrefList,i_ce);
+ aUses.Produce_List(
+ "Synonym Typedefs",
+ "#Synonyms",
+ *pXrefList );
+ ary::idl::ifc_interface::xref::Get_ExportingServices(pXrefList,i_ce);
+ aUses.Produce_List(
+ "Services which Support this Interface",
+ "#SupportingServices",
+ *pXrefList );
+ ary::idl::ifc_interface::xref::Get_ExportingSingletons(pXrefList,i_ce);
+ aUses.Produce_List(
+ "Singletons which Support this Interface",
+ "#SupportingSingletons",
+ *pXrefList );
+ ary::idl::ifc_interface::xref::Get_AsReturns(pXrefList,i_ce);
+ aUses.Produce_List(
+ "Uses as Return Type",
+ "#Returns",
+ *pXrefList );
+ ary::idl::ifc_interface::xref::Get_AsParameters(pXrefList,i_ce);
+ aUses.Produce_List(
+ "Uses as Parameter",
+ "#Parameters",
+ *pXrefList );
+ ary::idl::ifc_interface::xref::Get_AsDataTypes(pXrefList,i_ce);
+ aUses.Produce_List(
+ "Uses as Data Type",
+ "#DataTypes",
+ *pXrefList );
+ aUses.Write_ManualLinks(i_ce);
+}
+
+void
+MainDisplay_Idl::do_Service2s( const ary::idl::CodeEntity & i_ce )
+{
+ StreamLock sl(100);
+ String sUsesFileName(
+ sl()
+ << i_ce.LocalName()
+ << Env().Linker().XrefsSuffix()
+ << c_str );
+ Guard_CurFile gFile( *pMyFile,
+ Env(),
+ sUsesFileName,
+ "Uses of Service" );
+ HF_IdlXrefs aUses( *pEnv,
+ pMyFile->Body(),
+ C_sCePrefix_Service,
+ i_ce );
+ Dyn_CeIterator pXrefList;
+ ary::idl::ifc_service::xref::Get_IncludingServices(pXrefList,i_ce);
+ aUses.Produce_List(
+ "Services which Include this Service",
+ "#IncludingServices",
+ *pXrefList );
+
+ ary::idl::ifc_service::xref::Get_InstantiatingSingletons(pXrefList,i_ce);
+ aUses.Produce_List(
+ "Singletons which Instantiate this Service",
+ "#Singletons",
+ *pXrefList );
+ aUses.Write_ManualLinks(i_ce);
+}
+
+void
+MainDisplay_Idl::do_Struct2s( const ary::idl::CodeEntity & i_ce )
+{
+ StreamLock sl(100);
+ String sUsesFileName(
+ sl()
+ << i_ce.LocalName()
+ << Env().Linker().XrefsSuffix()
+ << c_str );
+ Guard_CurFile gFile( *pMyFile,
+ Env(),
+ sUsesFileName,
+ "Uses of Struct" );
+ HF_IdlXrefs aUses( *pEnv,
+ pMyFile->Body(),
+ C_sCePrefix_Struct,
+ i_ce );
+
+ aUses.Produce_Tree(
+ "Derived Structs",
+ "#Deriveds",
+ i_ce,
+ &ary::idl::ifc_struct::xref::Get_Derivations );
+
+ Dyn_CeIterator pXrefList;
+
+ ary::idl::ifc_struct::xref::Get_SynonymTypedefs(pXrefList,i_ce);
+ aUses.Produce_List(
+ "Synonym Typedefs",
+ "#Synonyms",
+ *pXrefList );
+ ary::idl::ifc_struct::xref::Get_AsReturns(pXrefList,i_ce);
+ aUses.Produce_List(
+ "Uses as Return Type",
+ "#Returns",
+ *pXrefList );
+ ary::idl::ifc_struct::xref::Get_AsParameters(pXrefList,i_ce);
+ aUses.Produce_List(
+ "Uses as Parameter",
+ "#Parameters",
+ *pXrefList );
+ ary::idl::ifc_struct::xref::Get_AsDataTypes(pXrefList,i_ce);
+ aUses.Produce_List(
+ "Uses as Data Type",
+ "#DataTypes",
+ *pXrefList );
+ aUses.Write_ManualLinks(i_ce);
+}
+
+void
+MainDisplay_Idl::do_Exception2s( const ary::idl::CodeEntity & i_ce )
+{
+ StreamLock sl(100);
+ String sUsesFileName(
+ sl()
+ << i_ce.LocalName()
+ << Env().Linker().XrefsSuffix()
+ << c_str );
+ Guard_CurFile gFile( *pMyFile,
+ Env(),
+ sUsesFileName,
+ "Uses of Exception" );
+ HF_IdlXrefs aUses( *pEnv,
+ pMyFile->Body(),
+ C_sCePrefix_Exception,
+ i_ce );
+
+ aUses.Produce_Tree(
+ "Derived Exceptions",
+ "#Deriveds",
+ i_ce,
+ &ary::idl::ifc_exception::xref::Get_Derivations );
+
+ Dyn_CeIterator pXrefList;
+
+ ary::idl::ifc_exception::xref::Get_RaisingFunctions(pXrefList,i_ce);
+ aUses.Produce_List(
+ "Raising Functions",
+ "#Raisers",
+ *pXrefList );
+ aUses.Write_ManualLinks(i_ce);
+}
+
+void
+MainDisplay_Idl::do_Enum2s( const ary::idl::CodeEntity & i_ce )
+{
+ StreamLock sl(100);
+ String sUsesFileName(
+ sl()
+ << i_ce.LocalName()
+ << Env().Linker().XrefsSuffix()
+ << c_str );
+ Guard_CurFile gFile( *pMyFile,
+ Env(),
+ sUsesFileName,
+ "Uses of Enum" );
+ HF_IdlXrefs aUses( *pEnv,
+ pMyFile->Body(),
+ C_sCePrefix_Enum,
+ i_ce );
+ Dyn_CeIterator pXrefList;
+ ary::idl::ifc_enum::xref::Get_SynonymTypedefs(pXrefList,i_ce);
+ aUses.Produce_List(
+ "Synonym Typedefs",
+ "#Synonyms",
+ *pXrefList );
+ ary::idl::ifc_enum::xref::Get_AsReturns(pXrefList,i_ce);
+ aUses.Produce_List(
+ "Uses as Return Type",
+ "#Returns",
+ *pXrefList );
+ ary::idl::ifc_enum::xref::Get_AsParameters(pXrefList,i_ce);
+ aUses.Produce_List(
+ "Uses as Parameter",
+ "#Parameters",
+ *pXrefList );
+ ary::idl::ifc_enum::xref::Get_AsDataTypes(pXrefList,i_ce);
+ aUses.Produce_List(
+ "Uses as Data Type",
+ "#DataTypes",
+ *pXrefList );
+ aUses.Write_ManualLinks(i_ce);
+}
+
+void
+MainDisplay_Idl::do_Typedef2s( const ary::idl::CodeEntity & i_ce )
+{
+ StreamLock sl(100);
+ String sUsesFileName(
+ sl() << i_ce.LocalName()
+ << Env().Linker().XrefsSuffix()
+ << c_str );
+ Guard_CurFile gFile( *pMyFile,
+ Env(),
+ sUsesFileName,
+ "Uses of Typedef" );
+ HF_IdlXrefs aUses( *pEnv,
+ pMyFile->Body(),
+ C_sCePrefix_Typedef,
+ i_ce );
+ Dyn_CeIterator pXrefList;
+ ary::idl::ifc_typedef::xref::Get_SynonymTypedefs(pXrefList,i_ce);
+ aUses.Produce_List(
+ "Synonym Typedefs",
+ "#Synonyms",
+ *pXrefList );
+ ary::idl::ifc_typedef::xref::Get_AsReturns(pXrefList,i_ce);
+ aUses.Produce_List(
+ "Uses as Return Type",
+ "#Returns",
+ *pXrefList );
+ ary::idl::ifc_typedef::xref::Get_AsParameters(pXrefList,i_ce);
+ aUses.Produce_List(
+ "Uses as Parameter",
+ "#Parameters",
+ *pXrefList );
+ ary::idl::ifc_typedef::xref::Get_AsDataTypes(pXrefList,i_ce);
+ aUses.Produce_List(
+ "Uses as Data Type",
+ "#DataTypes",
+ *pXrefList );
+ aUses.Write_ManualLinks(i_ce);
+}
+
diff --git a/autodoc/source/display/idl/hi_main.hxx b/autodoc/source/display/idl/hi_main.hxx
new file mode 100644
index 000000000000..57b345a98df7
--- /dev/null
+++ b/autodoc/source/display/idl/hi_main.hxx
@@ -0,0 +1,178 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_DISPLAY_HFIDMAIN_HXX
+#define ADC_DISPLAY_HFIDMAIN_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <cosv/tpl/processor.hxx>
+ // COMPONENTS
+#include "hi_factory.hxx"
+ // PARAMETERS
+
+
+class HtmlEnvironment_Idl;
+class HtmlFactory_Idl;
+class DocuFile_Html;
+
+namespace ary
+{
+namespace idl
+{
+
+ class Module;
+ class Service;
+ class SglIfcService;
+ class Interface;
+ class Struct;
+ class Exception;
+ class Enum;
+ class Typedef;
+ class ConstantsGroup;
+ class Singleton;
+ class SglIfcSingleton;
+
+} // namespace idl
+} // namespace ary
+
+
+class MainDisplay_Idl : public csv::ProcessorIfc,
+ public csv::ConstProcessor<ary::idl::Module>,
+ public csv::ConstProcessor<ary::idl::Service>,
+ public csv::ConstProcessor<ary::idl::SglIfcService>,
+ public csv::ConstProcessor<ary::idl::Interface>,
+ public csv::ConstProcessor<ary::idl::Struct>,
+ public csv::ConstProcessor<ary::idl::Exception>,
+ public csv::ConstProcessor<ary::idl::Enum>,
+ public csv::ConstProcessor<ary::idl::Typedef>,
+ public csv::ConstProcessor<ary::idl::ConstantsGroup>,
+ public csv::ConstProcessor<ary::idl::Singleton>,
+ public csv::ConstProcessor<ary::idl::SglIfcSingleton>
+{
+ public:
+ MainDisplay_Idl(
+ HtmlEnvironment_Idl &
+ io_rEnv );
+ virtual ~MainDisplay_Idl();
+
+ void WriteGlobalIndices();
+
+ void Display_NamedEntityHierarchy();
+
+ private:
+ // Interface csv::ProcessorIfc:
+ virtual void do_Process(
+ const ary::idl::Module & i_client );
+ virtual void do_Process(
+ const ary::idl::Service & i_client );
+ virtual void do_Process(
+ const ary::idl::SglIfcService &
+ i_client );
+ virtual void do_Process(
+ const ary::idl::Interface & i_client );
+ virtual void do_Process(
+ const ary::idl::Struct & i_client );
+ virtual void do_Process(
+ const ary::idl::Exception & i_client );
+ virtual void do_Process(
+ const ary::idl::Enum & i_client );
+ virtual void do_Process(
+ const ary::idl::Typedef & i_client );
+ virtual void do_Process(
+ const ary::idl::ConstantsGroup &
+ i_client );
+ virtual void do_Process(
+ const ary::idl::Singleton & i_client );
+ virtual void do_Process(
+ const ary::idl::SglIfcSingleton &
+ i_client );
+ // Locals
+ void do_ServiceDescr(
+ const ary::idl::CodeEntity &
+ i_rData );
+ void do_SglIfcServiceDescr(
+ const ary::idl::CodeEntity &
+ i_rData );
+ void do_InterfaceDescr(
+ const ary::idl::CodeEntity &
+ i_rData );
+ void do_StructDescr(
+ const ary::idl::CodeEntity &
+ i_rData );
+ void do_ExceptionDescr(
+ const ary::idl::CodeEntity &
+ i_rData );
+ void do_EnumDescr(
+ const ary::idl::CodeEntity &
+ i_rData );
+ void do_TypedefDescr(
+ const ary::idl::CodeEntity &
+ i_rData );
+ void do_SingletonDescr(
+ const ary::idl::CodeEntity &
+ i_rData );
+ void do_Service2s(
+ const ary::idl::CodeEntity &
+ i_rData );
+ void do_Interface2s(
+ const ary::idl::CodeEntity &
+ i_rData );
+ void do_Struct2s(
+ const ary::idl::CodeEntity &
+ i_rData );
+ void do_Exception2s(
+ const ary::idl::CodeEntity &
+ i_rData );
+ void do_Enum2s(
+ const ary::idl::CodeEntity &
+ i_rData );
+ void do_Typedef2s(
+ const ary::idl::CodeEntity &
+ i_rData );
+ void do_Singleton2s(
+ const ary::idl::CodeEntity &
+ i_rData );
+
+ const HtmlEnvironment_Idl &
+ Env() const { return *pEnv; }
+ HtmlEnvironment_Idl &
+ Env() { return *pEnv; }
+ Xml::Element & CurHtmlOut() { return pCurFactory->CurOut(); }
+
+ // DATA
+ HtmlEnvironment_Idl *
+ pEnv;
+ Dyn<DocuFile_Html> pMyFile;
+ HtmlFactory_Idl * pCurFactory;
+};
+
+
+
+#endif
diff --git a/autodoc/source/display/idl/makefile.mk b/autodoc/source/display/idl/makefile.mk
new file mode 100644
index 000000000000..383983a1fb22
--- /dev/null
+++ b/autodoc/source/display/idl/makefile.mk
@@ -0,0 +1,77 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..$/..$/..
+
+PRJNAME=autodoc
+TARGET=display_idl
+
+
+# --- Settings -----------------------------------------------------
+
+ENABLE_EXCEPTIONS=true
+PRJINC=$(PRJ)$/source
+
+.INCLUDE : settings.mk
+.INCLUDE : $(PRJ)$/source$/mkinc$/fullcpp.mk
+
+
+# --- Files --------------------------------------------------------
+
+OBJFILES= \
+ $(OBJ)$/hfi_constgroup.obj \
+ $(OBJ)$/hfi_doc.obj \
+ $(OBJ)$/hfi_enum.obj \
+ $(OBJ)$/hfi_globalindex.obj \
+ $(OBJ)$/hfi_hierarchy.obj \
+ $(OBJ)$/hfi_interface.obj \
+ $(OBJ)$/hfi_method.obj \
+ $(OBJ)$/hfi_module.obj \
+ $(OBJ)$/hfi_navibar.obj \
+ $(OBJ)$/hfi_property.obj \
+ $(OBJ)$/hfi_service.obj \
+ $(OBJ)$/hfi_singleton.obj \
+ $(OBJ)$/hfi_siservice.obj \
+ $(OBJ)$/hfi_struct.obj \
+ $(OBJ)$/hfi_tag.obj \
+ $(OBJ)$/hfi_typedef.obj \
+ $(OBJ)$/hfi_typetext.obj \
+ $(OBJ)$/hfi_xrefpage.obj \
+ $(OBJ)$/hi_ary.obj \
+ $(OBJ)$/hi_display.obj \
+ $(OBJ)$/hi_env.obj \
+ $(OBJ)$/hi_factory.obj \
+ $(OBJ)$/hi_linkhelper.obj \
+ $(OBJ)$/hi_main.obj
+
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : target.mk
+
+
+
diff --git a/autodoc/source/display/inc/cfrstd.hxx b/autodoc/source/display/inc/cfrstd.hxx
new file mode 100644
index 000000000000..5545fe854596
--- /dev/null
+++ b/autodoc/source/display/inc/cfrstd.hxx
@@ -0,0 +1,80 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_CFRSTD_HXX
+#define ADC_CFRSTD_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <display/corframe.hxx>
+ // COMPONENTS
+ // PARAMETERS
+
+
+
+class StdFrame : public display::CorporateFrame
+{
+ public:
+ // LIFECYCLE
+ StdFrame();
+
+ // INQUIRY
+ virtual DYN Html_Image *
+ LogoSrc() const;
+ virtual const char *
+ LogoLink() const;
+ virtual const char *
+ CopyrightText() const;
+ virtual const char *
+ CssStyle() const;
+ virtual const char *
+ CssStylesExplanation() const;
+ virtual const char *
+ DevelopersGuideHtmlRoot() const;
+ virtual bool SimpleLinks() const;
+
+ // ACCESS
+ virtual void Set_DevelopersGuideHtmlRoot(
+ const String & i_directory );
+ virtual void Set_SimpleLinks();
+
+ private:
+ String sDevelopersGuideHtmlRoot;
+ bool bSimpleLinks;
+};
+
+
+
+// IMPLEMENTATION
+
+
+
+
+#endif
+
diff --git a/autodoc/source/display/inc/html/chd_udk2.hxx b/autodoc/source/display/inc/html/chd_udk2.hxx
new file mode 100644
index 000000000000..2177f22a90b6
--- /dev/null
+++ b/autodoc/source/display/inc/html/chd_udk2.hxx
@@ -0,0 +1,95 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_DISPLAY_HTML_CHD_UDK2_HXX
+#define ADC_DISPLAY_HTML_CHD_UDK2_HXX
+
+// BASE CLASSES
+#include <autodoc/dsp_html_std.hxx>
+// USED SERVICES
+#include <cosv/ploc.hxx>
+
+namespace ary
+{
+namespace cpp
+{
+ class Namespace;
+ class Gate;
+}
+}
+
+class OuputPage_Environment;
+
+
+
+
+class CppHtmlDisplay_Udk2 : public autodoc::HtmlDisplay_UdkStd
+{
+ public:
+ CppHtmlDisplay_Udk2();
+ ~CppHtmlDisplay_Udk2();
+ private:
+ // Interface CppHtmlDisplay_UdkStd:
+ virtual void do_Run(
+ const char * i_sOutputDirectory,
+ const ary::cpp::Gate &
+ i_rAryGate,
+ const display::CorporateFrame &
+ i_rLayout );
+
+ // Local
+ void SetRunData(
+ const char * i_sOutputDirectory,
+ const ary::cpp::Gate &
+ i_rAryGate,
+ const display::CorporateFrame &
+ i_rLayout );
+
+ void Create_Css_File();
+ void Create_Overview_File();
+ void Create_Help_File();
+ void Create_AllDefs_File();
+ void CreateFiles_InSubTree_Namespaces();
+ void CreateFiles_InSubTree_Index();
+
+ void RecursiveDisplay_Namespace(
+ const ary::cpp::Namespace &
+ i_rNsp );
+ void DisplayFiles_InNamespace(
+ const ary::cpp::Namespace &
+ i_rNsp );
+ const ary::cpp::Gate &
+ Gate() const;
+ // DATA
+ Dyn<OuputPage_Environment>
+ pCurPageEnv;
+};
+
+
+
+
+#endif
diff --git a/autodoc/source/display/inc/idl/hi_display.hxx b/autodoc/source/display/inc/idl/hi_display.hxx
new file mode 100644
index 000000000000..53650a8ce5a8
--- /dev/null
+++ b/autodoc/source/display/inc/idl/hi_display.hxx
@@ -0,0 +1,111 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_DISPLAY_HI_DISPLAY_HXX
+#define ADC_DISPLAY_HI_DISPLAY_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <autodoc/dsp_html_std.hxx>
+ // COMPONENTS
+#include <cosv/ploc.hxx>
+ // PARAMETERS
+
+
+
+namespace ary
+{
+ namespace idl
+ {
+ class Module;
+ class CodeEntity;
+ } // namspace idl
+} // namspace csi
+
+
+class MainDisplay_Idl;
+class HtmlEnvironment_Idl;
+
+class HtmlDisplay_Idl : public autodoc::HtmlDisplay_Idl_Ifc
+{
+ public:
+ HtmlDisplay_Idl();
+ ~HtmlDisplay_Idl();
+ private:
+ // Interface HtmlDisplay_Idl_Ifc:
+ virtual void do_Run(
+ const char * i_sOutputDirectory,
+ const ary::idl::Gate &
+ i_rAryGate,
+ const display::CorporateFrame &
+ i_rLayout );
+ void SetRunData(
+ const char * i_sOutputDirectory,
+ const ary::idl::Gate &
+ i_rAryGate,
+ const display::CorporateFrame &
+ i_rLayout );
+ void Create_StartFile();
+ void Create_FilesInNameTree();
+ void Create_IndexFiles();
+ void Create_FilesInProjectTree();
+ void Create_PackageList();
+ void Create_HelpFile();
+ void Create_CssFile();
+
+ /** @descr
+ - makes sure, the module's directory exists
+ - creates the module's docu file
+ - creates docu files for all members of the module
+ - does the same recursive for all sub-modules.
+ */
+ void RecursiveDisplay_Module(
+ const ary::idl::Module &
+ i_rNamespace );
+ bool IsModule(
+ const ary::idl::CodeEntity &
+ i_ce ) const;
+ const ary::idl::Module &
+ Module_Cast( /// @precond Cast must be valid.
+ const ary::idl::CodeEntity &
+ i_ce ) const;
+ // DATA
+ Dyn<HtmlEnvironment_Idl>
+ pCurPageEnv;
+ Dyn<MainDisplay_Idl>
+ pMainDisplay;
+};
+
+
+
+// IMPLEMENTATION
+
+
+#endif
+
diff --git a/autodoc/source/display/inc/toolkit/hf_docentry.hxx b/autodoc/source/display/inc/toolkit/hf_docentry.hxx
new file mode 100644
index 000000000000..83e447c615fa
--- /dev/null
+++ b/autodoc/source/display/inc/toolkit/hf_docentry.hxx
@@ -0,0 +1,59 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_DISPLAY_HF_DOCENTRY_HXX
+#define ADC_DISPLAY_HF_DOCENTRY_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include "htmlfactory.hxx"
+ // COMPONENTS
+ // PARAMETERS
+
+/** @resp
+ Produces a list of <DT>..</DT> and <DD>.
+*/
+class HF_DocEntryList : public HtmlMaker
+{
+ public:
+
+ HF_DocEntryList(
+ Xml::Element & o_rOut );
+ virtual ~HF_DocEntryList();
+
+ Xml::Element & Produce_Term(
+ const char * i_sTerm = 0 );
+ Xml::Element & Produce_NormalTerm( /// Font will not be bold.
+ const char * i_sTerm = 0 );
+ Xml::Element & Produce_Definition();
+};
+
+
+
+#endif
diff --git a/autodoc/source/display/inc/toolkit/hf_funcdecl.hxx b/autodoc/source/display/inc/toolkit/hf_funcdecl.hxx
new file mode 100644
index 000000000000..1b943dde3e19
--- /dev/null
+++ b/autodoc/source/display/inc/toolkit/hf_funcdecl.hxx
@@ -0,0 +1,104 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_DISPLAY_HF_FUNCDECL_HXX
+#define ADC_DISPLAY_HF_FUNCDECL_HXX
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <toolkit/htmlfactory.hxx>
+ // COMPONENTS
+ // PARAMETERS
+
+
+#if 0 // old
+/** @resp
+ Provides three cells to put in a function declaration.
+*/
+class HF_FunctionDeclaration : public HtmlMaker
+{
+ public:
+ HF_FunctionDeclaration(
+ Xml::Element & o_rParent );
+ virtual ~HF_FunctionDeclaration();
+
+ /// Inserts empty line in 2nd and 3rd cell and returns first.
+ Xml::Element & Add_ReturnLine();
+
+ /** Inserts empty line in 1st cell, "raises (" in 2nd
+ and returns 3rd.
+ */
+ Xml::Element & Add_RaisesLine(
+ const char * i_sRaisesText,
+ bool i_bSuppressExtraLine = false );
+
+ Xml::Element & Front() { return *pFront; }
+ Xml::Element & Types() { return *pTypes; }
+ Xml::Element & Names() { return *pNames; }
+
+ private:
+ Xml::Element * pFront;
+ Xml::Element * pTypes;
+ Xml::Element * pNames;
+};
+#endif // 0 old
+
+class HF_FunctionDeclaration : public HtmlMaker
+{
+ public:
+ HF_FunctionDeclaration(
+ Xml::Element & o_rParent,
+ const String & i_sRaisesText );
+ virtual ~HF_FunctionDeclaration();
+
+ // OPERATIONS
+ Xml::Element & ReturnCell();
+ Xml::Element & NameCell();
+ Xml::Element & NewParamTypeCell();
+ Xml::Element & ParamNameCell();
+ Xml::Element & ExceptionCell();
+
+ private:
+ Html::TableRow & ParameterLine();
+
+ // DATA
+ String sRaisesText;
+ Html::Table * pTable;
+ Xml::Element * pReturnCell;
+ Xml::Element * pNameCell;
+ Html::TableRow * pParameterLine;
+ Xml::Element * pLastParameterCell;
+ Xml::Element * pExceptionCell;
+};
+
+
+// IMPLEMENTATION
+
+
+
+#endif
diff --git a/autodoc/source/display/inc/toolkit/hf_linachain.hxx b/autodoc/source/display/inc/toolkit/hf_linachain.hxx
new file mode 100644
index 000000000000..fa780dbc778c
--- /dev/null
+++ b/autodoc/source/display/inc/toolkit/hf_linachain.hxx
@@ -0,0 +1,72 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_DISPLAY_HF_LINACHAIN_HXX
+#define ADC_DISPLAY_HF_LINACHAIN_HXX
+
+// BASE CLASSES
+#include "htmlfactory.hxx"
+#include "out_position.hxx"
+
+
+
+
+class HF_LinkedNameChain : public HtmlMaker
+{
+ public:
+ /** F_LinkMaker makes a link out of the name of the
+ parent position.
+
+ Returns true, if there is a link, false if not.
+ */
+ typedef String (*F_LinkMaker)(const char *);
+
+
+ HF_LinkedNameChain(
+ Xml::Element & o_rOut );
+ virtual ~HF_LinkedNameChain();
+
+ void Produce_CompleteChain(
+ const output::Position &
+ i_curPosition,
+ F_LinkMaker i_linkMaker ) const;
+ void Produce_CompleteChain_forModule(
+ const output::Position &
+ i_curPosition, /// current Module's node
+ F_LinkMaker i_linkMaker ) const;
+ private:
+ void produce_Level(
+ output::Node & i_levelNode,
+ const output::Position &
+ i_startPosition,
+ F_LinkMaker i_linkMaker ) const;
+};
+
+
+
+
+#endif
diff --git a/autodoc/source/display/inc/toolkit/hf_navi_main.hxx b/autodoc/source/display/inc/toolkit/hf_navi_main.hxx
new file mode 100644
index 000000000000..da4167d64dbe
--- /dev/null
+++ b/autodoc/source/display/inc/toolkit/hf_navi_main.hxx
@@ -0,0 +1,92 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_DISPLAY_HF_NAVI_MAIN_HXX
+#define ADC_DISPLAY_HF_NAVI_MAIN_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+ // COMPONENTS
+#include "htmlfactory.hxx"
+ // PARAMETERS
+
+
+class HF_MainItem;
+
+
+/** @task
+ Create a HTML navigation bar with lightly coloured background.
+
+ @descr
+ There are three kinds of items:
+ Item with link: Add_StdItem(),
+ Item without link: Add_NoneItem(),
+ Item that is current page: Add_SelfItem().
+*/
+class HF_NaviMainRow : public HtmlMaker
+{
+ public:
+ enum E_Style
+ {
+ eStd,
+ eSelf,
+ eNo
+ };
+ HF_NaviMainRow(
+ Xml::Element & o_out );
+ ~HF_NaviMainRow();
+
+ void Add_StdItem(
+ const char * i_sText,
+ const char * i_sLink );
+ void Add_SelfItem(
+ const char * i_sText );
+ void Add_NoneItem(
+ const char * i_sText );
+
+ void Produce_Row();
+
+ private:
+ // DATA
+ typedef std::vector< DYN HF_MainItem* > ItemList;
+
+ ItemList aItems;
+ Xml::Element * pRow;
+};
+
+
+
+// IMPLEMENTATION
+
+
+
+
+#endif
+
+
diff --git a/autodoc/source/display/inc/toolkit/hf_navi_sub.hxx b/autodoc/source/display/inc/toolkit/hf_navi_sub.hxx
new file mode 100644
index 000000000000..6d24a40eb530
--- /dev/null
+++ b/autodoc/source/display/inc/toolkit/hf_navi_sub.hxx
@@ -0,0 +1,81 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_DISPLAY_HF_NAVI_SUB_HXX
+#define ADC_DISPLAY_HFI_NAVI_SUB_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+ // COMPONENTS
+#include "htmlfactory.hxx"
+ // PARAMETERS
+
+
+class HF_NaviSubRow : public HtmlMaker
+{
+ public:
+ HF_NaviSubRow(
+ Xml::Element & o_rOut );
+ virtual ~HF_NaviSubRow();
+
+ void AddItem(
+ const String & i_sText,
+ const String & i_sLink,
+ bool i_bSwitchOn );
+ void SwitchOn(
+ int i_nIndex );
+ void Produce_Row();
+
+ private:
+ typedef std::pair<String,String> SubRow_Data;
+ typedef std::pair<SubRow_Data,bool> SubRow_Item;
+ typedef std::vector<SubRow_Item> SubRow;
+
+ /** Puts the row's table into the parent XML-element, but
+ doesn't write the items, because the actvity-status of
+ the subitems isn't known yet.
+ */
+ void Setup_Row();
+
+ // DATA
+ SubRow aRow;
+ Xml::Element * pMyRow;
+};
+
+
+
+
+// IMPLEMENTATION
+
+
+
+
+#endif
+
+
diff --git a/autodoc/source/display/inc/toolkit/hf_title.hxx b/autodoc/source/display/inc/toolkit/hf_title.hxx
new file mode 100644
index 000000000000..b4c80a54cc13
--- /dev/null
+++ b/autodoc/source/display/inc/toolkit/hf_title.hxx
@@ -0,0 +1,91 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_DISPLAY_HF_TITLE_HXX
+#define ADC_DISPLAY_HF_TITLE_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <toolkit/htmlfactory.hxx>
+ // COMPONENTS
+ // PARAMETERS
+
+
+class HF_TitleTable : public HtmlMaker
+{
+ public:
+ HF_TitleTable(
+ Xml::Element & o_rOut );
+ virtual ~HF_TitleTable();
+
+ void Produce_Title(
+ const char * i_title );
+ void Produce_Title(
+ const char * i_annotations,
+// const char * i_label,
+ const char * i_title );
+
+ /// @return a Html::TableCell reference.
+ Xml::Element & Add_Row();
+};
+
+
+class HF_SubTitleTable : public HtmlMaker
+{
+ public:
+ enum E_SubLevel
+ {
+ sublevel_1, /// Big title.
+ sublevel_2, /// Small title.
+ sublevel_3 /// No title.
+ };
+
+ /** @param i_nColumns [1 .. n]
+ @param i_nSubTitleLevel [1 .. 2]
+ 1 is a bit bigger than 2.
+ */
+
+ HF_SubTitleTable(
+ Xml::Element & o_rOut,
+ const String & i_label,
+ const String & i_title,
+ int i_nColumns,
+ E_SubLevel i_eSubTitleLevel = sublevel_1 );
+ virtual ~HF_SubTitleTable();
+
+ /// @return an Html::TableRow reference.
+ Xml::Element & Add_Row();
+};
+
+
+// IMPLEMENTATION
+
+
+
+#endif
diff --git a/autodoc/source/display/inc/toolkit/htmlfactory.hxx b/autodoc/source/display/inc/toolkit/htmlfactory.hxx
new file mode 100644
index 000000000000..1e46ac7d94db
--- /dev/null
+++ b/autodoc/source/display/inc/toolkit/htmlfactory.hxx
@@ -0,0 +1,102 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_DISPLAY_HTMLFACTORY_HXX
+#define ADC_DISPLAY_HTMLFACTORY_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+ // COMPONENTS
+#include "outputstack.hxx"
+ // PARAMETERS
+#include <udm/xml/xmlitem.hxx>
+#include <udm/html/htmlitem.hxx>
+
+namespace Xml = ::csi::xml;
+namespace Html = ::csi::html;
+
+/** @resp
+ Base class for HTML page creators (factories) for code entites or
+ similar items.
+*/
+template <class ENV>
+class HtmlFactory
+{
+ public:
+ // INQUIRY
+ ENV & Env() const { return *pEnv; }
+ Xml::Element & CurOut() const { return aDestination.Out(); }
+
+ // ACCESS
+ OutputStack & Out() const { return aDestination; }
+
+ protected:
+ HtmlFactory(
+ ENV & io_rEnv,
+ Xml::Element * o_pOut = 0 )
+ : pEnv(&io_rEnv) { if (o_pOut != 0) aDestination.Enter(*o_pOut); }
+ ~HtmlFactory() {}
+ private:
+ // DATA
+ ENV * pEnv;
+ mutable OutputStack aDestination;
+};
+
+
+/** @resp
+ Base class for HTML paragraph creators, which are to be put into
+ a parent HTML element.
+*/
+class HtmlMaker
+{
+ public:
+
+ // INQUIRY
+ Xml::Element & CurOut() const { return *pOut; }
+
+ protected:
+ HtmlMaker(
+ Xml::Element & o_rOut )
+ : pOut(&o_rOut) {}
+ private:
+ // DATA
+ Xml::Element * pOut;
+};
+
+
+
+
+// IMPLEMENTATION
+
+
+
+
+#endif
+
+
diff --git a/autodoc/source/display/inc/toolkit/htmlfile.hxx b/autodoc/source/display/inc/toolkit/htmlfile.hxx
new file mode 100644
index 000000000000..771855ea7a31
--- /dev/null
+++ b/autodoc/source/display/inc/toolkit/htmlfile.hxx
@@ -0,0 +1,86 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_DISPLAY_HTMLFILE_HXX
+#define ADC_DISPLAY_HTMLFILE_HXX
+
+// USED SERVICES
+ // BASE CLASSES
+ // COMPONENTS
+#include <udm/html/htmlitem.hxx>
+ // PARAMETERS
+#include <cosv/ploc.hxx>
+
+namespace csv
+{
+ class File;
+}
+
+/** Represents an HTML output file.
+*/
+class DocuFile_Html
+{
+ public:
+ // LIFECYCLE
+ DocuFile_Html();
+
+ void SetLocation(
+ const csv::ploc::Path &
+ i_rFilePath );
+ void SetTitle(
+ const char * i_sTitle );
+ void SetRelativeCssPath(
+ const char * i_sCssFile_relativePath );
+ void SetCopyright(
+ const char * i_sCopyright );
+ void EmptyBody();
+
+ Html::Body & Body() { return aBodyData; }
+ bool CreateFile();
+
+ private:
+ void WriteHeader(
+ csv::File & io_aFile );
+ void WriteBody(
+ csv::File & io_aFile );
+ // DATA
+ String sFilePath;
+ String sTitle;
+ String sLocation;
+ String sStyle;
+ String sCssFile;
+ String sCopyright;
+
+ Html::Body aBodyData;
+ StreamStr aBuffer;
+};
+
+
+
+#endif
+
+
diff --git a/autodoc/source/display/inc/toolkit/out_node.hxx b/autodoc/source/display/inc/toolkit/out_node.hxx
new file mode 100644
index 000000000000..4f6385cf54fb
--- /dev/null
+++ b/autodoc/source/display/inc/toolkit/out_node.hxx
@@ -0,0 +1,129 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_DISPLAY_OUT_NODE_HXX
+#define ADC_DISPLAY_OUT_NODE_HXX
+
+
+
+
+namespace output
+{
+
+
+/** @resp
+ Represents a tree of names where each node can have only one parent,
+ but a list of children.
+
+ @see Position
+ @see Tree
+*/
+class Node
+{
+ public:
+ typedef std::vector< Node* > List;
+ typedef UINT32 relative_id;
+
+ // LIFECYCLE
+ enum E_NullObject { null_object };
+
+ Node();
+ explicit Node(
+ E_NullObject );
+ ~Node();
+
+ // OPERATORS
+ bool operator==(
+ const Node & i_node ) const
+ { return pParent == i_node.pParent AND sName == i_node.sName; }
+ bool operator!=(
+ const Node & i_node ) const
+ { return NOT operator==(i_node); }
+
+ // OPERATIONS
+ /// Seek, and if not existent, create.
+ Node & Provide_Child(
+ const String & i_name );
+ /// Seek, and if not existent, create.
+ Node & Provide_Child(
+ const StringVector &
+ i_path )
+ { return provide_Child(i_path.begin(), i_path.end()); }
+ // INQUIRY
+ intt Depth() const { return nDepth; }
+
+ const String & Name() const { return sName; }
+ /// @return Id of a namespace or class etc. this directory represents.
+ relative_id RelatedNameRoom() const { return nNameRoomId; }
+ /// @return No delimiter at start, with delimiter at end.
+ void Get_Path(
+ StreamStr & o_result,
+ intt i_maxDepth = -1 ) const;
+ void Get_Chain(
+ StringVector & o_result,
+ intt i_maxDepth = -1 ) const;
+ // ACCESS
+ void Set_RelatedNameRoom(
+ relative_id i_nNameRoomId )
+ { nNameRoomId = i_nNameRoomId; }
+ Node * Parent() { return pParent; }
+ Node * Child(
+ const String & i_name )
+ { return find_Child(i_name); }
+ List & Children() { return aChildren; }
+
+ /// @return a reference to a Node with Depth() == -1.
+ static Node & Null_();
+
+ private:
+ // Local
+ Node(
+ const String & i_name,
+ Node & i_parent );
+
+ Node * find_Child(
+ const String & i_name );
+ Node & add_Child(
+ const String & i_name );
+ Node & provide_Child(
+ StringVector::const_iterator
+ i_next,
+ StringVector::const_iterator
+ i_end );
+ // Data
+ String sName;
+ Node * pParent;
+ List aChildren;
+ intt nDepth;
+ relative_id nNameRoomId;
+};
+
+
+
+
+} // namespace output
+#endif
diff --git a/autodoc/source/display/inc/toolkit/out_position.hxx b/autodoc/source/display/inc/toolkit/out_position.hxx
new file mode 100644
index 000000000000..214b91c15bab
--- /dev/null
+++ b/autodoc/source/display/inc/toolkit/out_position.hxx
@@ -0,0 +1,117 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_DISPLAY_OUT_POSITION_HXX
+#define ADC_DISPLAY_OUT_POSITION_HXX
+
+
+// USED SERVICES
+ // BASE CLASSES
+ // COMPONENTS
+#include <toolkit/out_node.hxx>
+ // PARAMETERS
+
+
+
+namespace output
+{
+
+
+
+class Position
+{
+ public:
+ // LIFECYCLE
+ Position();
+ explicit Position(
+ Node & i_directory,
+ const String & i_file = String::Null_() );
+ Position(
+ const Position & i_directory,
+ const String & i_rDifferentFile );
+ ~Position();
+
+ // OPERATIONS
+ Position & operator=(
+ Node & i_node );
+ Position & operator+=(
+ const String & i_nodeName );
+ Position & operator-=(
+ intt i_levels );
+
+ // INQUIRY
+ bool IsValid() const { return pDirectory->Depth() >= 0; }
+ const String & Name() const { return pDirectory->Name(); }
+ const String & File() const { return sFile; }
+ intt Depth() const { return pDirectory->Depth(); }
+
+ void Get_Chain(
+ StringVector & o_result ) const
+ { pDirectory->Get_Chain(o_result); }
+ String LinkToRoot(
+ const String & i_localLabel = String::Null_() ) const;
+
+ void Get_LinkTo(
+ StreamStr & o_result,
+ const Position & i_destination,
+ const String & i_localLabel = String::Null_() ) const;
+ void Get_LinkToRoot(
+ StreamStr & o_result,
+ const String & i_localLabel = String::Null_() ) const;
+
+ static char Delimiter() { return '/'; }
+
+ // ACCESS
+ Node & RelatedNode() const { return *pDirectory; }
+
+ void Set(
+ Node & i_node,
+ const String & i_file = String::Null_() );
+ void Set_File(
+ const String & i_file );
+
+ private:
+ // DATA
+ String sFile;
+ Node * pDirectory;
+};
+
+
+/// @return No delimiter at start, with delimiter at end.
+const char * get_UpLink(
+ uintt i_depth );
+
+
+// IMPLEMENTATION
+
+inline void
+Position::Set_File( const String & i_file )
+ { sFile = i_file; }
+
+} // namespace output
+
+#endif
diff --git a/autodoc/source/display/inc/toolkit/out_tree.hxx b/autodoc/source/display/inc/toolkit/out_tree.hxx
new file mode 100644
index 000000000000..eaf1edffdf30
--- /dev/null
+++ b/autodoc/source/display/inc/toolkit/out_tree.hxx
@@ -0,0 +1,136 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_DISPLAY_OUT_TREE_HXX
+#define ADC_DISPLAY_OUT_TREE_HXX
+
+
+// USED SERVICES
+ // BASE CLASSES
+ // COMPONENTS
+#include "out_position.hxx"
+ // PARAMETERS
+
+
+namespace output
+{
+
+inline const char *
+ModuleFileName()
+{ return "module-ix.html"; }
+inline const char *
+IndexFilesDirName()
+{ return "index-files"; }
+inline const char *
+IndexFile_A()
+{ return "index-1.html"; }
+
+
+class Tree
+{
+ public:
+ // LIFECYCLE
+ Tree();
+ ~Tree();
+
+ // OPERATIONS
+ void Set_Overview(
+ const StringVector &
+ i_path,
+ const String & i_sFileName );
+ Node & Set_NamesRoot(
+ const StringVector &
+ i_path );
+ Node & Set_IndexRoot(
+ const StringVector &
+ i_path );
+ Node & Set_ProjectsRoot(
+ const StringVector &
+ i_path );
+ Node & Provide_Node(
+ const StringVector &
+ i_path );
+
+ // ACCESS
+ Node & RootNode() { return *pRoot; }
+ Node & NamesRootNode() { return *pNamesRoot; }
+ Node & IndexRootNode() { return *pIndexRoot; }
+ Node & ProjectsRootNode() { return *pProjectsRoot; }
+
+ Position Root() { return Position(*pRoot); }
+ Position Overview() { return aOverview; }
+ Position NamesRoot() { return Position(*pNamesRoot); }
+ Position IndexRoot() { return Position(*pIndexRoot); }
+ Position ProjectsRoot() { return Position(*pProjectsRoot); }
+
+ private:
+ // forbidden:
+ Tree(const Tree&);
+ Tree & operator=(const Tree&);
+
+ // DATA
+ Dyn<Node> pRoot;
+ Node * pNamesRoot;
+ Node * pIndexRoot;
+ Node * pProjectsRoot;
+ Position aOverview;
+};
+
+
+// IMPLEMENTATION
+
+inline Node &
+Tree::Provide_Node( const StringVector & i_path )
+ { return pRoot->Provide_Child(i_path); }
+
+
+inline void
+Tree::Set_Overview( const StringVector & i_path,
+ const String & i_sFileName )
+ { aOverview.Set(Provide_Node(i_path), i_sFileName); }
+
+inline Node &
+Tree::Set_NamesRoot( const StringVector & i_path )
+ { pNamesRoot = &Provide_Node(i_path);
+ return *pNamesRoot; }
+
+inline Node &
+Tree::Set_IndexRoot( const StringVector & i_path )
+ { pIndexRoot = &Provide_Node(i_path);
+ return *pIndexRoot; }
+
+inline Node &
+Tree::Set_ProjectsRoot( const StringVector & i_path )
+ { pProjectsRoot = &Provide_Node(i_path);
+ return *pProjectsRoot; }
+
+
+
+} // namespace output
+
+
+#endif
diff --git a/autodoc/source/display/inc/toolkit/outputstack.hxx b/autodoc/source/display/inc/toolkit/outputstack.hxx
new file mode 100644
index 000000000000..4c02065bd1e6
--- /dev/null
+++ b/autodoc/source/display/inc/toolkit/outputstack.hxx
@@ -0,0 +1,73 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_DISPLAY_OUTPUTSTACK_HXX
+#define ADC_DISPLAY_OUTPUTSTACK_HXX
+
+
+// USED SERVICES
+ // BASE CLASSES
+ // COMPONENTS
+#include <estack.hxx>
+ // PARAMETERS
+#include <udm/xml/xmlitem.hxx>
+
+
+class OutputStack
+{
+ public:
+ // LIFECYCLE
+ OutputStack();
+ ~OutputStack();
+
+ // OPERATIONS
+ void Enter(
+ csi::xml::Element & io_rDestination );
+ void Leave();
+
+ // ACCESS
+ csi::xml::Element & Out() const; // CurOutputNode
+
+ private:
+ EStack< csi::xml::Element * >
+ aCurDestination; // The front element is the currently used.
+ // The later ones are the parents.
+};
+
+inline csi::xml::Element &
+OutputStack::Out() const
+{
+ csv_assert( aCurDestination.size() > 0 );
+ return *aCurDestination.top();
+}
+
+// IMPLEMENTATION
+
+
+#endif
+
+
diff --git a/autodoc/source/display/kernel/displfct.cxx b/autodoc/source/display/kernel/displfct.cxx
new file mode 100644
index 000000000000..149dbb375b68
--- /dev/null
+++ b/autodoc/source/display/kernel/displfct.cxx
@@ -0,0 +1,89 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "displfct.hxx"
+
+
+// NOT FULLY DECLARED SERVICES
+#include <html/chd_udk2.hxx>
+#include <idl/hi_display.hxx>
+#include <cfrstd.hxx>
+
+
+DYN DisplayToolsFactory * DisplayToolsFactory::dpTheInstance_ = 0;
+
+
+namespace autodoc
+{
+
+DisplayToolsFactory_Ifc &
+DisplayToolsFactory_Ifc::GetIt_()
+{
+ if ( DisplayToolsFactory::dpTheInstance_ == 0 )
+ DisplayToolsFactory::dpTheInstance_ = new DisplayToolsFactory;
+ return *DisplayToolsFactory::dpTheInstance_;
+}
+
+} // namespace autodoc
+
+
+DisplayToolsFactory::DisplayToolsFactory()
+{
+}
+
+DisplayToolsFactory::~DisplayToolsFactory()
+{
+}
+
+// DYN autodoc::TextDisplay_FunctionList_Ifc *
+// DisplayToolsFactory::Create_TextDisplay_FunctionList() const
+// {
+// return new CppTextDisplay_FunctionList;
+// }
+
+
+DYN autodoc::HtmlDisplay_UdkStd *
+DisplayToolsFactory::Create_HtmlDisplay_UdkStd() const
+{
+ return new CppHtmlDisplay_Udk2;
+}
+
+DYN autodoc::HtmlDisplay_Idl_Ifc *
+DisplayToolsFactory::Create_HtmlDisplay_Idl() const
+{
+ return new HtmlDisplay_Idl;
+}
+
+const display::CorporateFrame &
+DisplayToolsFactory::Create_StdFrame() const
+{
+ static StdFrame aFrame;
+ return aFrame;
+}
+
+
diff --git a/autodoc/source/display/kernel/displfct.hxx b/autodoc/source/display/kernel/displfct.hxx
new file mode 100644
index 000000000000..a6de4b44e447
--- /dev/null
+++ b/autodoc/source/display/kernel/displfct.hxx
@@ -0,0 +1,63 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_DISPLAY_DISPLFCT_HXX
+#define ADC_DISPLAY_DISPLFCT_HXX
+
+
+#include <autodoc/displaying.hxx>
+
+
+/** Interface for parsing code of a programming language and
+ delivering the information into an Autodoc Repository.
+**/
+class DisplayToolsFactory : public autodoc::DisplayToolsFactory_Ifc
+{
+ public:
+ DisplayToolsFactory();
+ virtual ~DisplayToolsFactory();
+
+// virtual DYN autodoc::TextDisplay_FunctionList_Ifc *
+// Create_TextDisplay_FunctionList() const;
+
+ virtual DYN autodoc::HtmlDisplay_UdkStd *
+ Create_HtmlDisplay_UdkStd() const;
+ virtual DYN autodoc::HtmlDisplay_Idl_Ifc *
+ Create_HtmlDisplay_Idl() const;
+
+ virtual const display::CorporateFrame &
+ Create_StdFrame() const;
+ private:
+ static DYN DisplayToolsFactory *
+ dpTheInstance_;
+
+ friend class autodoc::DisplayToolsFactory_Ifc;
+};
+
+
+#endif
+
diff --git a/autodoc/source/display/kernel/makefile.mk b/autodoc/source/display/kernel/makefile.mk
new file mode 100644
index 000000000000..992456dcd667
--- /dev/null
+++ b/autodoc/source/display/kernel/makefile.mk
@@ -0,0 +1,55 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..$/..$/..
+
+PRJNAME=autodoc
+TARGET=display_kernel
+TARGETTYPE=CUI
+
+
+# --- Settings -----------------------------------------------------
+
+ENABLE_EXCEPTIONS=true
+PRJINC=$(PRJ)$/source
+
+.INCLUDE : settings.mk
+.INCLUDE : $(PRJ)$/source$/mkinc$/fullcpp.mk
+
+
+# --- Files --------------------------------------------------------
+
+OBJFILES= \
+ $(OBJ)$/displfct.obj
+
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : target.mk
+
+
+
diff --git a/autodoc/source/display/toolkit/hf_docentry.cxx b/autodoc/source/display/toolkit/hf_docentry.cxx
new file mode 100644
index 000000000000..5d6f415a5223
--- /dev/null
+++ b/autodoc/source/display/toolkit/hf_docentry.cxx
@@ -0,0 +1,74 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <toolkit/hf_docentry.hxx>
+
+
+// NOT FULLY DEFINED SERVICES
+
+
+HF_DocEntryList::HF_DocEntryList( Xml::Element & o_out )
+ : HtmlMaker( o_out >>* new Html::DefList )
+{
+}
+
+HF_DocEntryList::~HF_DocEntryList()
+{
+}
+
+Xml::Element &
+HF_DocEntryList::Produce_Term(const char * i_sTerm )
+{
+ Xml::Element &
+ ret = CurOut()
+ >> *new Html::DefListTerm
+ >> *new Html::Bold;
+ if ( NOT csv::no_str(i_sTerm))
+ ret
+ << i_sTerm;
+ return ret;
+}
+
+Xml::Element &
+HF_DocEntryList::Produce_NormalTerm(const char * i_sTerm)
+{
+ Xml::Element &
+ ret = CurOut()
+ >> *new Html::DefListTerm;
+ if ( NOT csv::no_str(i_sTerm))
+ ret
+ << i_sTerm;
+ return ret;
+}
+
+Xml::Element &
+HF_DocEntryList::Produce_Definition()
+{
+ return CurOut()
+ >> *new Html::DefListDefinition;
+}
diff --git a/autodoc/source/display/toolkit/hf_funcdecl.cxx b/autodoc/source/display/toolkit/hf_funcdecl.cxx
new file mode 100644
index 000000000000..1c015b539cf2
--- /dev/null
+++ b/autodoc/source/display/toolkit/hf_funcdecl.cxx
@@ -0,0 +1,203 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <toolkit/hf_funcdecl.hxx>
+
+
+// NOT FULLY DEFINED SERVICES
+
+const String C_sValignTop("top");
+const String C_sValignBottom("bottom");
+
+
+
+HF_FunctionDeclaration::HF_FunctionDeclaration( Xml::Element & o_rParent,
+ const String & i_sRaisesText )
+ : HtmlMaker(o_rParent),
+ sRaisesText(i_sRaisesText),
+ pTable(0),
+ pReturnCell(0),
+ pNameCell(0),
+ pParameterLine(0),
+ pLastParameterCell(0),
+ pExceptionCell(0)
+{
+ pTable = new Html::Table;
+ CurOut()
+ >> *pTable
+ << new Html::ClassAttr("table-in-method")
+ << new Xml::AnAttribute("border","0");
+}
+
+HF_FunctionDeclaration::~HF_FunctionDeclaration()
+{
+}
+
+Xml::Element &
+HF_FunctionDeclaration::ReturnCell()
+{
+ if (pReturnCell != 0)
+ return *pReturnCell;
+
+ pReturnCell = &( *pTable
+ >> *new Html::TableRow
+ >> *new Html::TableCell
+ << new Html::VAlignAttr(C_sValignTop)
+ << new Xml::AnAttribute("colspan", "3")
+ );
+ return *pReturnCell;
+}
+
+Xml::Element &
+HF_FunctionDeclaration::NameCell()
+{
+ if (pNameCell != 0)
+ return *pNameCell;
+
+ pNameCell = &( ParameterLine()
+ >> *new Html::TableCell
+ << new Html::VAlignAttr(C_sValignTop)
+ );
+ pLastParameterCell = pNameCell;
+
+ return *pNameCell;
+}
+
+Xml::Element &
+HF_FunctionDeclaration::NewParamTypeCell()
+{
+ if (pLastParameterCell != pNameCell)
+ {
+ pParameterLine = 0;
+ ParameterLine()
+ >> *new Html::TableCell;
+ }
+
+ Xml::Element &
+ rParamType = ParameterLine()
+ >> *new Html::TableCell
+ << new Html::VAlignAttr(C_sValignTop);
+ pLastParameterCell
+ = &( ParameterLine()
+ >> *new Html::TableCell
+ << new Html::VAlignAttr(C_sValignBottom)
+ << new Xml::XmlCode("&nbsp;")
+ );
+ return rParamType;
+}
+
+Xml::Element &
+HF_FunctionDeclaration::ParamNameCell()
+{
+ csv_assert(pLastParameterCell != pNameCell);
+ return *pLastParameterCell;
+}
+
+Xml::Element &
+HF_FunctionDeclaration::ExceptionCell()
+{
+ if (pExceptionCell != 0)
+ return *pExceptionCell;
+
+ Xml::Element &
+ rExceptionRow = *pTable
+ >> *new Html::TableRow;
+ rExceptionRow
+ >> *new Html::TableCell
+ << new Html::VAlignAttr(C_sValignTop)
+ << new Xml::AnAttribute("align", "right")
+ << sRaisesText
+ << "( ";
+
+ pExceptionCell = &( rExceptionRow
+ >> *new Html::TableCell
+ << new Html::VAlignAttr(C_sValignTop)
+ << new Xml::AnAttribute("colspan", "2")
+ );
+ return *pExceptionCell;
+}
+
+Html::TableRow &
+HF_FunctionDeclaration::ParameterLine()
+{
+ if (pParameterLine != 0)
+ return *pParameterLine;
+
+ pParameterLine = new Html::TableRow;
+ *pTable
+ >> *pParameterLine;
+
+ return *pParameterLine;
+}
+
+
+#if 0 // old
+HF_FunctionDeclaration::HF_FunctionDeclaration( Xml::Element & o_rParent )
+ : HtmlMaker(o_rParent),
+ pFront(0),
+ pTypes(0),
+ pNames(0)
+{
+ Xml::Element &
+ rRow = CurOut()
+ >> *new Html::Table
+ << new Xml::AnAttribute("border","0")
+ >> *new Html::TableRow;
+ pFront = &(rRow >> *new Html::TableCell << new Html::VAlignAttr(C_sValignTop));
+ pTypes = &(rRow >> *new Html::TableCell << new Html::VAlignAttr(C_sValignTop));
+ pNames = &(rRow >> *new Html::TableCell << new Html::VAlignAttr(C_sValignTop));
+}
+
+HF_FunctionDeclaration::~HF_FunctionDeclaration()
+{
+}
+
+Xml::Element &
+HF_FunctionDeclaration::Add_ReturnLine()
+{
+ (*pTypes) << new Xml::XmlCode("&nbsp;<br>\n");
+ (*pNames) << new Xml::XmlCode("&nbsp;<br>\n");
+ return *pFront;
+}
+
+Xml::Element &
+HF_FunctionDeclaration::Add_RaisesLine( const char * i_sRaisesText,
+ bool i_bSuppressExtraLine )
+{
+ if (NOT i_bSuppressExtraLine)
+ {
+ (*pTypes) << new Xml::XmlCode("&nbsp;<br>");
+ (*pNames) << new Xml::XmlCode("&nbsp;<br>\n");
+ }
+ (*pTypes)
+ << new Xml::XmlCode("<p class=\"raise\">")
+ << i_sRaisesText
+ << new Xml::XmlCode("( </p>\n");
+ return *pNames;
+}
+#endif // 0 old
diff --git a/autodoc/source/display/toolkit/hf_linachain.cxx b/autodoc/source/display/toolkit/hf_linachain.cxx
new file mode 100644
index 000000000000..fd83242e5247
--- /dev/null
+++ b/autodoc/source/display/toolkit/hf_linachain.cxx
@@ -0,0 +1,110 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <toolkit/hf_linachain.hxx>
+
+
+// NOT FULLY DEFINED SERVICES
+#include <toolkit/out_position.hxx>
+
+
+
+HF_LinkedNameChain::HF_LinkedNameChain( Xml::Element & o_rOut )
+ : HtmlMaker( o_rOut
+ >> *new Html::Paragraph
+ << new Html::ClassAttr("namechain") )
+{
+}
+
+HF_LinkedNameChain::~HF_LinkedNameChain()
+{
+}
+
+void
+HF_LinkedNameChain::Produce_CompleteChain( const output::Position & i_curPosition,
+ F_LinkMaker i_linkMaker ) const
+{
+ produce_Level(i_curPosition.RelatedNode(), i_curPosition, i_linkMaker);
+}
+
+void
+HF_LinkedNameChain::Produce_CompleteChain_forModule( const output::Position & i_curPosition,
+ F_LinkMaker i_linkMaker ) const
+{
+ if (i_curPosition.Depth() == 0)
+ return;
+ produce_Level(*i_curPosition.RelatedNode().Parent(), i_curPosition, i_linkMaker);
+}
+
+
+
+namespace
+{
+
+StreamStr aLinkBuf(200);
+
+}
+
+void
+HF_LinkedNameChain::produce_Level( output::Node & i_levelNode,
+ const output::Position & i_startPosition,
+ F_LinkMaker i_linkMaker ) const
+{
+ if ( i_levelNode.Depth() > 0 )
+ {
+ produce_Level( *i_levelNode.Parent(),
+ i_startPosition,
+ i_linkMaker );
+ }
+
+ aLinkBuf.reset();
+
+ String
+ sFileName = (*i_linkMaker)(i_levelNode.Name());
+ output::Position
+ aLevelPos(i_levelNode, sFileName);
+
+ i_startPosition.Get_LinkTo(aLinkBuf, aLevelPos);
+
+ if ( i_levelNode.Depth() > 0 )
+ {
+ CurOut()
+ >> *new Html::Link(aLinkBuf.c_str())
+ << new Html::ClassAttr("namechain")
+ << i_levelNode.Name();
+ CurOut() << " :: ";
+ }
+ else
+ {
+ CurOut()
+ >> *new Html::Link(aLinkBuf.c_str())
+ << new Html::ClassAttr("namechain")
+ << "::";
+ CurOut() << " ";
+ }
+}
diff --git a/autodoc/source/display/toolkit/hf_navi_main.cxx b/autodoc/source/display/toolkit/hf_navi_main.cxx
new file mode 100644
index 000000000000..69cfdf0ec746
--- /dev/null
+++ b/autodoc/source/display/toolkit/hf_navi_main.cxx
@@ -0,0 +1,238 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <toolkit/hf_navi_main.hxx>
+
+
+// NOT FULLY DEFINED SERVICES
+#include <cosv/tpl/tpltools.hxx>
+
+
+
+//******************** MainItem and derived ones ***************//
+class HF_MainItem : public HtmlMaker
+{
+ public:
+ virtual ~HF_MainItem() {}
+ void Produce_Item() const { do_ProduceItem(); }
+ protected:
+ HF_MainItem(
+ Xml::Element & o_out )
+ : HtmlMaker(o_out) {}
+ private:
+ virtual void do_ProduceItem() const = 0;
+};
+
+
+namespace
+{
+
+class StdItem : public HF_MainItem
+{
+ public:
+ StdItem(
+ Xml::Element & o_out,
+ const char * i_sText,
+ const char * i_sLink );
+
+ ~StdItem();
+ private:
+ virtual void do_ProduceItem() const;
+
+ // DATA
+ String sText;
+ String sLink;
+};
+
+class SelfItem : public HF_MainItem
+{
+ public:
+ SelfItem(
+ Xml::Element & o_out,
+ const char * i_sText );
+ ~SelfItem();
+ private:
+ virtual void do_ProduceItem() const;
+
+ // DATA
+ String sText;
+};
+
+class NoneItem : public HF_MainItem
+{
+ public:
+ NoneItem(
+ Xml::Element & o_out,
+ const char * i_sText );
+ ~NoneItem();
+ private:
+ virtual void do_ProduceItem() const;
+
+ // DATA
+ String sText;
+};
+
+} // anonymous namespace
+
+
+
+//******************** HF_NaviMainRow ***************//
+
+
+
+HF_NaviMainRow::HF_NaviMainRow( Xml::Element & o_out )
+ : HtmlMaker(o_out),
+ aItems(),
+ pRow(0)
+{
+ aItems.reserve(5);
+
+ pRow =
+ &( CurOut()
+ >> *new Html::Table
+ << new Html::ClassAttr("navimain")
+ << new Xml::AnAttribute( "border", "0" )
+ << new Xml::AnAttribute( "cellpadding", "3" )
+ >> *new Html::TableRow
+ );
+}
+
+HF_NaviMainRow::~HF_NaviMainRow()
+{
+ csv::erase_container_of_heap_ptrs(aItems);
+}
+
+void
+HF_NaviMainRow::Add_StdItem( const char * i_sText,
+ const char * i_sLink )
+{
+ aItems.push_back(new StdItem( *pRow,i_sText,i_sLink ));
+}
+
+void
+HF_NaviMainRow::Add_SelfItem( const char * i_sText )
+{
+ aItems.push_back(new SelfItem( *pRow,i_sText ));
+}
+
+void
+HF_NaviMainRow::Add_NoneItem( const char * i_sText )
+{
+ aItems.push_back(new NoneItem( *pRow,i_sText ));
+}
+
+void
+HF_NaviMainRow::Produce_Row()
+{
+ ItemList::iterator itEnd = aItems.end();
+ for ( ItemList::iterator iter = aItems.begin();
+ iter != itEnd;
+ ++iter )
+ {
+ (*iter)->Produce_Item();
+ }
+}
+
+
+
+
+//******************** MainItem and derived ones ***************//
+
+namespace
+{
+
+StdItem::StdItem( Xml::Element & o_out,
+ const char * i_sText,
+ const char * i_sLink )
+ : HF_MainItem(o_out),
+ sText(i_sText),
+ sLink(i_sLink)
+{
+}
+
+StdItem::~StdItem()
+{
+}
+
+void
+StdItem::do_ProduceItem() const
+{
+ Xml::Element &
+ rCell = CurOut() >>* new Html::TableCell;
+ rCell
+ << new Html::ClassAttr( "navimain" )
+ >> *new Html::Link(sLink.c_str())
+ << new Html::ClassAttr( "navimain" )
+ << sText.c_str();
+}
+
+SelfItem::SelfItem( Xml::Element & o_out,
+ const char * i_sText )
+ : HF_MainItem(o_out),
+ sText(i_sText)
+{
+}
+
+SelfItem::~SelfItem()
+{
+}
+
+void
+SelfItem::do_ProduceItem() const
+{
+ Xml::Element &
+ rCell = CurOut() >>* new Html::TableCell;
+ rCell
+ << new Html::ClassAttr( "navimainself" )
+ << sText.c_str();
+}
+
+NoneItem::NoneItem( Xml::Element & o_out,
+ const char * i_sText )
+ : HF_MainItem(o_out),
+ sText(i_sText)
+{
+}
+
+NoneItem::~NoneItem()
+{
+}
+
+void
+NoneItem::do_ProduceItem() const
+{
+ Xml::Element &
+ rCell = CurOut() >>* new Html::TableCell;
+ rCell
+ << new Html::ClassAttr( "navimainnone" )
+ << sText.c_str();
+}
+
+} // anonymous namespace
+
+
diff --git a/autodoc/source/display/toolkit/hf_navi_sub.cxx b/autodoc/source/display/toolkit/hf_navi_sub.cxx
new file mode 100644
index 000000000000..4c11e0e7e6df
--- /dev/null
+++ b/autodoc/source/display/toolkit/hf_navi_sub.cxx
@@ -0,0 +1,103 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <toolkit/hf_navi_sub.hxx>
+
+
+// NOT FULLY DEFINED SERVICES
+
+
+HF_NaviSubRow::HF_NaviSubRow( Xml::Element & o_rOut )
+ : HtmlMaker(o_rOut),
+ aRow(),
+ pMyRow(0)
+{
+ Setup_Row();
+}
+
+HF_NaviSubRow::~HF_NaviSubRow()
+{
+}
+
+void
+HF_NaviSubRow::AddItem( const String & i_sText,
+ const String & i_sLink,
+ bool i_bSwitchOn )
+{
+ aRow.push_back( SubRow_Item( SubRow_Data(i_sText,i_sLink),
+ i_bSwitchOn ));
+}
+
+void
+HF_NaviSubRow::SwitchOn( int i_nIndex )
+{
+ if ( i_nIndex < int(aRow.size()) )
+ aRow[i_nIndex].second = true;
+}
+
+void
+HF_NaviSubRow::Setup_Row()
+{
+ Html::Table *
+ pTable = new Html::Table;
+ CurOut()
+ >> *pTable
+ << new Html::ClassAttr("navisub")
+ << new Xml::AnAttribute( "border", "0" )
+ << new Xml::AnAttribute( "cellpadding", "0" );
+ pMyRow = &pTable->AddRow();
+}
+
+void
+HF_NaviSubRow::Produce_Row()
+{
+ for ( SubRow::const_iterator it = aRow.begin();
+ it != aRow.end();
+ ++it )
+ {
+ Xml::Element &
+ rCell = *pMyRow
+ >> *new Html::TableCell
+ << new Html::ClassAttr("navisub");
+ StreamLock sl(100);
+ Xml::Element &
+ rGoon = (*it).second
+ ? ( rCell
+ >> *new Html::Link( sl()
+ << "#"
+ << (*it).first.second
+ << c_str )
+ << new Html::ClassAttr("navisub")
+ )
+ : rCell;
+ rGoon
+ << (*it).first.first;
+ }
+}
+
+
diff --git a/autodoc/source/display/toolkit/hf_title.cxx b/autodoc/source/display/toolkit/hf_title.cxx
new file mode 100644
index 000000000000..bd6bbd2d5f89
--- /dev/null
+++ b/autodoc/source/display/toolkit/hf_title.cxx
@@ -0,0 +1,169 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <toolkit/hf_title.hxx>
+
+
+// NOT FULLY DEFINED SERVICES
+#include <stdlib.h>
+
+
+const String C_sTitleBorder("0");
+const String C_sTitleWidth("100%");
+const String C_sTitlePadding("5");
+const String C_sTitleSpacing("3");
+
+const String C_sSubTitleBorder("1");
+const String C_sSubTitleWidth("100%");
+const String C_sSubTitlePadding("5");
+const String C_sSubTitleSpacing("0");
+const String C_sColSpan("colspan");
+
+
+HF_TitleTable::HF_TitleTable( Xml::Element & o_rOut )
+ : HtmlMaker(o_rOut >> *new Html::Table( C_sTitleBorder,
+ C_sTitleWidth,
+ C_sTitlePadding,
+ C_sTitleSpacing )
+ << new Html::ClassAttr("title-table")
+ << new Html::StyleAttr("margin-bottom:6pt;") )
+{
+}
+
+HF_TitleTable::~HF_TitleTable()
+{
+}
+
+void
+HF_TitleTable::Produce_Title( const char * i_title )
+{
+ Add_Row()
+ << new Html::ClassAttr("title")
+ << i_title;
+}
+
+void
+HF_TitleTable::Produce_Title( const char * i_annotations,
+ const char * i_title )
+{
+ if (csv::no_str(i_annotations))
+ {
+ Produce_Title(i_title);
+ return;
+ }
+
+ Xml::Element &
+ rRow = Add_Row();
+ rRow
+ << new Html::ClassAttr("title");
+
+ Xml::Element &
+ rTable = rRow
+ >> *new Html::Table()
+ << new Html::ClassAttr("title-table")
+ << new Html::WidthAttr("99%");
+ Xml::Element &
+ rInnerRow = rTable
+ >> *new Html::TableRow;
+ rInnerRow
+ >> *new Html::TableCell
+ << new Html::WidthAttr("25%")
+ << new Html::ClassAttr("title2")
+ << i_annotations;
+ rInnerRow
+ >> *new Html::TableCell
+ << new Html::WidthAttr("50%")
+ << new Html::ClassAttr("title")
+ << i_title;
+ rInnerRow
+ >> *new Html::TableCell
+ << new Html::WidthAttr("*");
+}
+
+Xml::Element &
+HF_TitleTable::Add_Row()
+{
+ return CurOut()
+ >> *new Html::TableRow
+ >> *new Html::TableCell;
+}
+
+
+inline const char *
+get_SubTitleCssClass(HF_SubTitleTable::E_SubLevel i_eSubTitleLevel)
+{
+ return i_eSubTitleLevel == HF_SubTitleTable::sublevel_1
+ ? "subtitle"
+ : "crosstitle";
+}
+
+
+HF_SubTitleTable::HF_SubTitleTable( Xml::Element & o_rOut,
+ const String & i_label,
+ const String & i_title,
+ int i_nColumns,
+ E_SubLevel i_eSubTitleLevel )
+ : HtmlMaker( o_rOut
+ << new Html::Label(i_label)
+ >> *new Html::Table( C_sSubTitleBorder,
+ C_sSubTitleWidth,
+ C_sSubTitlePadding,
+ C_sSubTitleSpacing )
+ << new Html::ClassAttr(get_SubTitleCssClass(i_eSubTitleLevel)) )
+{
+ csv_assert(i_nColumns > 0);
+
+ if (i_eSubTitleLevel == sublevel_3)
+ return;
+
+ Xml::Element &
+ rCell = CurOut()
+ >> *new Html::TableRow
+ >> *new Html::TableCell
+ << new Html::ClassAttr(get_SubTitleCssClass(i_eSubTitleLevel)) ;
+
+ if (i_nColumns > 1)
+ {
+ StreamLock sl(20);
+ String sColumns = sl() << i_nColumns << c_str;
+ rCell
+ << new Xml::AnAttribute(C_sColSpan, sColumns);
+ }
+ rCell
+ << i_title;
+}
+
+HF_SubTitleTable::~HF_SubTitleTable()
+{
+}
+
+Xml::Element &
+HF_SubTitleTable::Add_Row()
+{
+ return CurOut() >> *new Html::TableRow;
+}
diff --git a/autodoc/source/display/toolkit/htmlfile.cxx b/autodoc/source/display/toolkit/htmlfile.cxx
new file mode 100644
index 000000000000..bb2bb35f0360
--- /dev/null
+++ b/autodoc/source/display/toolkit/htmlfile.cxx
@@ -0,0 +1,211 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <toolkit/htmlfile.hxx>
+
+// NOT FULLY DECLARED SERVICES
+#include <cosv/file.hxx>
+#include <udm/html/htmlitem.hxx>
+
+namespace
+{
+bool bUse_OOoFrameDiv = true;
+const String C_sOOoFrameDiv_IdlId("adc-idlref");
+}
+
+using namespace csi;
+using csi::xml::AnAttribute;
+
+DocuFile_Html::DocuFile_Html()
+ : sFilePath(),
+ sTitle(),
+ sLocation(),
+ sStyle(),
+ sCssFile(),
+ sCopyright(),
+ aBodyData(),
+ aBuffer(60000) // Grows dynamically, when necessary.
+{
+}
+
+void
+DocuFile_Html::SetLocation( const csv::ploc::Path & i_rFilePath )
+{
+ StreamLock sPath(1000);
+ i_rFilePath.Get( sPath() );
+
+ sFilePath = sPath().c_str();
+}
+
+void
+DocuFile_Html::SetTitle( const char * i_sTitle )
+{
+ sTitle = i_sTitle;
+}
+
+void
+DocuFile_Html::SetRelativeCssPath( const char * i_sCssFile_relativePath )
+{
+ sCssFile = i_sCssFile_relativePath;
+}
+
+void
+DocuFile_Html::SetCopyright( const char * i_sCopyright )
+{
+ sCopyright = i_sCopyright;
+}
+
+void
+DocuFile_Html::EmptyBody()
+{
+ aBodyData.SetContent(0);
+
+ if (bUse_OOoFrameDiv)
+ {
+ // Insert <div> tag to allow better formatting for OOo.
+ aBodyData
+ << new xml::XmlCode("<div id=\"")
+ << new xml::XmlCode(C_sOOoFrameDiv_IdlId)
+ << new xml::XmlCode("\">\n\n");
+ }
+
+ aBodyData
+ >> *new html::Label( "_top_" )
+ << " ";
+}
+
+bool
+DocuFile_Html::CreateFile()
+{
+ csv::File aFile(sFilePath, csv::CFM_CREATE);
+ if (NOT aFile.open())
+ {
+ Cerr() << "Can't create file " << sFilePath << "." << Endl();
+ return false;
+ }
+
+ WriteHeader(aFile);
+ WriteBody(aFile);
+
+ // Write end
+ static const char sCompletion[] = "\n</html>\n";
+ aFile.write( sCompletion );
+
+ aFile.close();
+ Cout() << '.' << Flush();
+ return true;
+}
+
+
+void
+DocuFile_Html::WriteHeader( csv::File & io_aFile )
+{
+ aBuffer.reset();
+
+ static const char s1[] =
+ "<html>\n<head>\n<title>";
+ static const char s2[] =
+ "</title>\n"
+ "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n";
+
+ aBuffer.write( s1 );
+ aBuffer.write( sTitle );
+ aBuffer.write( s2 );
+
+
+ if (NOT sCssFile.empty())
+ {
+ static const char s3[] =
+ "<link rel=\"stylesheet\" type=\"text/css\" href=\"";
+ static const char s4[] =
+ "\">\n";
+
+ aBuffer.write(s3);
+ aBuffer.write(sCssFile);
+ aBuffer.write(s4);
+ }
+
+ if (NOT sStyle.empty())
+ {
+ static const char s5[] =
+ "<style>";
+ static const char s6[] =
+ "</style>\n";
+
+ aBuffer.write(s5);
+ aBuffer.write(sStyle);
+ aBuffer.write(s6);
+ }
+
+ static const char s7[] =
+ "</head>\n";
+ aBuffer.write(s7);
+
+ io_aFile.write(aBuffer.c_str(), aBuffer.size());
+}
+
+void
+DocuFile_Html::WriteBody( csv::File & io_aFile )
+{
+ aBuffer.reset();
+
+ aBodyData
+ >> *new html::Link( "#_top_" )
+ << "Top of Page";
+
+ if ( sCopyright.length() > 0 )
+ {
+ aBodyData
+ << new xml::XmlCode("<hr size=\"3\">");
+
+ aBodyData
+ >> *new html::Paragraph
+ << new html::ClassAttr( "copyright" )
+ << new xml::AnAttribute( "align", "center" )
+ << new xml::XmlCode(sCopyright);
+ }
+
+ if (bUse_OOoFrameDiv)
+ {
+ // Insert <div> tag to allow better formatting for OOo.
+ aBodyData
+ << new xml::XmlCode("\n</div> <!-- id=\"")
+ << new xml::XmlCode(C_sOOoFrameDiv_IdlId)
+ << new xml::XmlCode("\" -->\n");
+ }
+
+ aBodyData.WriteOut(aBuffer);
+ io_aFile.write(aBuffer.c_str(), aBuffer.size());
+}
+
+
+
+
+
+
+
diff --git a/autodoc/source/display/toolkit/makefile.mk b/autodoc/source/display/toolkit/makefile.mk
new file mode 100644
index 000000000000..ab374990eb7a
--- /dev/null
+++ b/autodoc/source/display/toolkit/makefile.mk
@@ -0,0 +1,64 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..$/..$/..
+
+PRJNAME=autodoc
+TARGET=display_toolkit
+
+
+# --- Settings -----------------------------------------------------
+
+ENABLE_EXCEPTIONS=true
+PRJINC=$(PRJ)$/source
+
+.INCLUDE : settings.mk
+.INCLUDE : $(PRJ)$/source$/mkinc$/fullcpp.mk
+
+
+# --- Files --------------------------------------------------------
+
+OBJFILES= \
+ $(OBJ)$/hf_docentry.obj \
+ $(OBJ)$/hf_funcdecl.obj \
+ $(OBJ)$/hf_linachain.obj \
+ $(OBJ)$/hf_navi_main.obj \
+ $(OBJ)$/hf_navi_sub.obj \
+ $(OBJ)$/hf_title.obj \
+ $(OBJ)$/htmlfile.obj \
+ $(OBJ)$/out_node.obj \
+ $(OBJ)$/out_position.obj \
+ $(OBJ)$/out_tree.obj \
+ $(OBJ)$/outputstack.obj
+
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : target.mk
+
+
+
diff --git a/autodoc/source/display/toolkit/out_node.cxx b/autodoc/source/display/toolkit/out_node.cxx
new file mode 100644
index 000000000000..ac402e2a123b
--- /dev/null
+++ b/autodoc/source/display/toolkit/out_node.cxx
@@ -0,0 +1,189 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <toolkit/out_node.hxx>
+
+
+// NOT FULLY DEFINED SERVICES
+#include <algorithm>
+
+
+namespace output
+{
+
+
+namespace
+{
+
+struct Less_NodePtr
+{
+ bool operator()(
+ Node * p1,
+ Node * p2 ) const
+ { return p1->Name() < p2->Name(); }
+};
+
+struct Less_NodePtr C_Less_NodePtr;
+
+
+Node C_aNullNode(Node::null_object);
+
+
+} // namepace anonymous
+
+
+//********************** Node ***************************//
+
+
+Node::Node()
+ : sName(),
+ pParent(0),
+ aChildren(),
+ nDepth(0),
+ nNameRoomId(0)
+{
+}
+
+Node::Node( E_NullObject )
+ : sName(),
+ pParent(0),
+ aChildren(),
+ nDepth(-1),
+ nNameRoomId(0)
+{
+}
+
+Node::Node( const String & i_name,
+ Node & i_parent )
+ : sName(i_name),
+ pParent(&i_parent),
+ aChildren(),
+ nDepth(i_parent.Depth()+1),
+ nNameRoomId(0)
+{
+}
+
+Node::~Node()
+{
+ for ( List::iterator it = aChildren.begin();
+ it != aChildren.end();
+ ++it )
+ {
+ delete *it;
+ }
+}
+
+Node &
+Node::Provide_Child( const String & i_name )
+{
+ Node *
+ ret = find_Child(i_name);
+ if (ret != 0)
+ return *ret;
+ return add_Child(i_name);
+}
+
+void
+Node::Get_Path( StreamStr & o_result,
+ intt i_maxDepth ) const
+{
+ // Intentionally 'i_maxDepth != 0', so max_Depth == -1 sets no limit:
+ if (i_maxDepth != 0)
+ {
+ if (pParent != 0)
+ pParent->Get_Path(o_result, i_maxDepth-1);
+ o_result << sName << '/';
+ }
+}
+
+void
+Node::Get_Chain( StringVector & o_result,
+ intt i_maxDepth ) const
+{
+ if (i_maxDepth != 0)
+ {
+ // This is called also for the toplevel Node,
+ // but there happens nothing:
+ if (pParent != 0)
+ {
+ pParent->Get_Chain(o_result, i_maxDepth-1);
+ o_result.push_back(sName);
+ }
+ }
+}
+
+Node *
+Node::find_Child( const String & i_name )
+{
+ Node aSearch;
+ aSearch.sName = i_name;
+
+ List::const_iterator
+ ret = std::lower_bound( aChildren.begin(),
+ aChildren.end(),
+ &aSearch,
+ C_Less_NodePtr );
+ if ( ret != aChildren.end() ? (*ret)->Name() == i_name : false )
+ return *ret;
+
+ return 0;
+}
+
+Node &
+Node::add_Child( const String & i_name )
+{
+ DYN Node *
+ pNew = new Node(i_name,*this);
+ aChildren.insert( std::lower_bound( aChildren.begin(),
+ aChildren.end(),
+ pNew,
+ C_Less_NodePtr ),
+ pNew );
+ return *pNew;
+}
+
+Node &
+Node::provide_Child( StringVector::const_iterator i_next,
+ StringVector::const_iterator i_end )
+{
+ if (i_next == i_end)
+ return *this;
+ return Provide_Child(*i_next).provide_Child(i_next+1,i_end);
+}
+
+
+
+
+Node &
+Node::Null_()
+{
+ return C_aNullNode;
+}
+
+
+} // namespace output
diff --git a/autodoc/source/display/toolkit/out_position.cxx b/autodoc/source/display/toolkit/out_position.cxx
new file mode 100644
index 000000000000..735732014b80
--- /dev/null
+++ b/autodoc/source/display/toolkit/out_position.cxx
@@ -0,0 +1,239 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <toolkit/out_position.hxx>
+
+
+// NOT FULLY DEFINED SERVICES
+
+
+
+namespace output
+{
+
+
+
+namespace
+{
+
+const int C_nAssumedMaxLinkLength = 500;
+
+void move_ToParent(
+ Node * & io_node,
+ intt i_levels = 1 );
+
+void
+move_ToParent( Node * & io_node,
+ intt i_levels )
+{
+ for ( intt n = 0; n < i_levels; ++n )
+ {
+ csv_assert(io_node != 0);
+ io_node = io_node->Parent();
+ }
+}
+
+
+
+} // namepace anonymous
+
+
+
+Position::Position()
+ : sFile(),
+ pDirectory(&Node::Null_())
+{
+}
+
+
+Position::Position( Node & i_directory,
+ const String & i_file )
+ : sFile(i_file),
+ pDirectory(&i_directory)
+{
+}
+
+Position::Position( const Position & i_directory,
+ const String & i_sDifferentFile )
+ : sFile(i_sDifferentFile),
+ pDirectory(i_directory.pDirectory)
+{
+}
+
+
+Position::~Position()
+{
+}
+
+
+Position &
+Position::operator=( Node & i_node )
+{
+ pDirectory = &i_node;
+ sFile.clear();
+ return *this;
+}
+
+Position &
+Position::operator+=( const String & i_nodeName )
+{
+ csv_assert(pDirectory != 0);
+
+ pDirectory = &pDirectory->Provide_Child(i_nodeName);
+ sFile.clear();
+
+ return *this;
+}
+
+Position &
+Position::operator-=( intt i_levels )
+{
+ csv_assert(pDirectory != 0);
+
+ for ( intt i = i_levels; i > 0; --i )
+ {
+ pDirectory = pDirectory->Parent();
+ if (pDirectory == 0)
+ {
+ pDirectory = &Node::Null_();
+ i = 0;
+ }
+ }
+ sFile.clear();
+
+ return *this;
+}
+
+String
+Position::LinkToRoot( const String & ) const
+{
+ StreamLock sl(C_nAssumedMaxLinkLength);
+ return sl() << get_UpLink(Depth()) << c_str;
+}
+
+void
+Position::Get_LinkTo( StreamStr & o_result,
+ const Position & i_destination,
+ const String & i_localLabel ) const
+{
+ Node * p1 = pDirectory;
+ Node * p2 = i_destination.pDirectory;
+
+ intt diff = Depth() - i_destination.Depth();
+ intt pathLength1 = 0;
+ intt pathLength2 = 0;
+
+ if ( diff > 0 )
+ {
+ pathLength1 = diff;
+ move_ToParent(p1,pathLength1);
+ }
+ else if ( diff < 0 )
+ {
+ pathLength2 = -diff;
+ move_ToParent(p2,pathLength2);
+ }
+
+ while ( p1 != p2 )
+ {
+ move_ToParent(p1);
+ move_ToParent(p2);
+ ++pathLength1;
+ ++pathLength2;
+ }
+
+ o_result << get_UpLink(pathLength1);
+ i_destination.pDirectory->Get_Path(o_result, pathLength2);
+ o_result << i_destination.sFile;
+ if (i_localLabel.length())
+ o_result << "#" << i_localLabel;
+}
+
+void
+Position::Get_LinkToRoot( StreamStr & o_result,
+ const String & ) const
+{
+ o_result << get_UpLink(Depth());
+}
+
+void
+Position::Set( Node & i_node,
+ const String & i_file )
+{
+ sFile = i_file;
+ pDirectory = &i_node;
+}
+
+
+
+
+const char *
+get_UpLink(uintt i_depth)
+{
+ static const uintt
+ C_nMaxDepth = 30;
+ static const char
+ C_sUpLinkArray[3*C_nMaxDepth+1] =
+ "../../../../../../../../../../"
+ "../../../../../../../../../../"
+ "../../../../../../../../../../";
+ static const char *
+ C_sUpLink = &C_sUpLinkArray[0];
+
+ if ( i_depth <= C_nMaxDepth )
+ {
+ return C_sUpLink + 3*(C_nMaxDepth - i_depth);
+ }
+ else
+ { // not THREAD fast
+ static std::vector<char>
+ aRet;
+ uintt nNeededSize = i_depth * 3 + 1;
+
+ if (aRet.size() < nNeededSize)
+ {
+ aRet.resize(nNeededSize);
+ char * pEnd = &aRet[nNeededSize-1];
+ *pEnd = '\0';
+
+ for ( char * pFill = &(*aRet.begin());
+ pFill != pEnd;
+ pFill += 3 )
+ {
+ memcpy(pFill, C_sUpLink, 3);
+ }
+ } // end if
+
+ return &aRet[aRet.size() - 1 - 3*i_depth];
+ }
+}
+
+
+
+
+} // namespace output
diff --git a/autodoc/source/display/toolkit/out_tree.cxx b/autodoc/source/display/toolkit/out_tree.cxx
new file mode 100644
index 000000000000..73c7d2192e76
--- /dev/null
+++ b/autodoc/source/display/toolkit/out_tree.cxx
@@ -0,0 +1,53 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <toolkit/out_tree.hxx>
+
+
+// NOT FULLY DEFINED SERVICES
+
+
+namespace output
+{
+
+Tree::Tree()
+ : pRoot(new Node),
+ pNamesRoot(pRoot.Ptr()),
+ pIndexRoot(pRoot.Ptr()),
+ pProjectsRoot(pRoot.Ptr()),
+ aOverview()
+{
+}
+
+Tree::~Tree()
+{
+}
+
+
+
+} // namespace output
diff --git a/autodoc/source/display/toolkit/outputstack.cxx b/autodoc/source/display/toolkit/outputstack.cxx
new file mode 100644
index 000000000000..19573dc4fe75
--- /dev/null
+++ b/autodoc/source/display/toolkit/outputstack.cxx
@@ -0,0 +1,58 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <toolkit/outputstack.hxx>
+
+
+// NOT FULLY DEFINED SERVICES
+
+
+
+OutputStack::OutputStack()
+{
+}
+
+OutputStack::~OutputStack()
+{
+}
+
+void
+OutputStack::Enter( csi::xml::Element & io_rDestination )
+{
+ aCurDestination.push(&io_rDestination);
+}
+
+void
+OutputStack::Leave()
+{
+ csv_assert( NOT aCurDestination.empty() );
+ aCurDestination.pop();
+}
+
+
+
diff --git a/autodoc/source/exes/adc_uni/adc_cl.cxx b/autodoc/source/exes/adc_uni/adc_cl.cxx
new file mode 100644
index 000000000000..ff5ecf6ad923
--- /dev/null
+++ b/autodoc/source/exes/adc_uni/adc_cl.cxx
@@ -0,0 +1,568 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <adc_cl.hxx>
+
+
+// NOT FULLY DEFINED SERVICES
+#include <algorithm>
+#include <cosv/x.hxx>
+#include <cosv/file.hxx>
+#include <cosv/tpl/tpltools.hxx>
+#include <ary/ary.hxx>
+#include <tools/tkpchars.hxx>
+#include <adc_msg.hxx>
+#include "adc_cmds.hxx"
+#include "adc_cmd_parse.hxx"
+#include "cmd_sincedata.hxx"
+
+
+namespace autodoc
+{
+
+CommandLine * CommandLine::pTheInstance_ = 0;
+
+const char * const C_sUserGuide =
+"\n\n\n"
+" General Use of Autodoc\n"
+" ----------------------\n"
+"\n"
+" Example for C++:\n"
+"\n"
+" -html <OutputDirectory> -name \"UDK 3.x anything\" -lg c++\n"
+" -p <ProjName> <ProjectRootDirectory>\n"
+" -t <SourceDir_relativeToProjectRoot>\n"
+"\n"
+" There may be several projects specified by -p.\n"
+"\n"
+"\n"
+" Example for IDL:\n"
+"\n"
+" -html <OutputDirectory> -name \"UDK 3.x anything\" -lg idl\n"
+" -t <SourceDir1> <SourceDir2>\n"
+"\n"
+" For both languages, instead of or in addition to -t may be\n"
+" used -d (no subdirectories) or -f (just one file). There can\n"
+" be multiple arguments after each of these options (-t -d -f).\n"
+"\n"
+"\n"
+" Replacing @since Tag Content\n"
+" ----------------------------\n"
+"\n"
+" In both languages you can give a transformation file to replace\n"
+" entries in @since tags by different entries.\n"
+" This file is given by the option\n"
+" -sincefile <TransformationFilePath>\n"
+" This option has to appear between the -html and the -lg option.\n"
+" Example:\n"
+" -html <OutputDirectory> -sincefile replacesince.txt\n"
+" -name \"UDK 3.x anything\" -lg idl -t <SourceDir>\n"
+"\n"
+"\n";
+
+
+#if 0 // FUTURE
+"\n\n\n"
+" Use of Autodoc\n"
+" --------------\n"
+"\n"
+" Basics:\n"
+"\n"
+" Autodoc may perform different tasks.\n"
+"\n"
+" Possible tasks are\n"
+" - parsing source code\n"
+" - creating HTML-output.\n"
+" On the command line each task starts with a specific\n"
+" option:\n"
+" '-parse' for parsing source code,\n"
+" '-html' for creating HTML.\n"
+" All command line options, related to one task, have to follow before\n"
+" the starting option of the next task.\n"
+"\n"
+" Within the task '-parse', there may be defined different projects.\n"
+" A project definition is started with '-p'.\n"
+" All not project specific options within the task '-parse' have to\n"
+" appear in front of the first '-p'.\n"
+" There can be no project at all. Then all options, available for\n"
+" projects, can be used like for one nameless default project, without using\n"
+" '-p', but these options still have to appear behind all other\n"
+" options of the task '-parse'.\n"
+"\n"
+"\n"
+" Legend:\n"
+"\n"
+" <SomeText> Describes an argument.\n"
+" 'SomeText' Within '...' is the literal value of an argument.\n"
+" + There can be multiple arguments.\n"
+" | Separator for alternative literal values of an argument.\n"
+"\n"
+"\n"
+" Syntax:\n"
+"\n"
+" -parse\n"
+" -name <RepositoryName>]\n"
+" -lg 'c++'|'idl'\n"
+" -extg <AdditonalExtensions>+\n"
+" -docg 'usehtml'\n"
+" -p <ProjectName> <ProjectRootDir>\n"
+" -l 'c++'|'idl'\n"
+" -ext <AdditonalExtensions>+\n"
+" -doc 'usehtml'\n"
+" -d <SourceDir_relative2ProjectRootDir_nosubdirs>+\n"
+" -t <SourceTree_relative2ProjectRootDir>+\n"
+" -f <SourceFile_relative2ProjectRootDir>+\n"
+" -html <OutputDir>\n"
+" -xlinks <Namespace> <ExternLinksRootDir>\n"
+" -i <CommandFilePath>\n"
+" -v <VerboseNr>\n"
+"\n"
+"\n"
+" Detailed Options Description:\n"
+"\n"
+" Option Arguments\n"
+" ----------------------------------------------------------\n"
+"\n"
+" -parse \n\n"
+" Starts the task \"Parse source code\".\n"
+" May be omitted, if it would be the first option on the\n"
+" command line.\n"
+"\n"
+" -name <RepositoryName>\n\n"
+" This name is used for naming the repository in\n"
+" human readable output. In future it may be used also for\n"
+" identifiing a repository in searches.\n"
+"\n"
+" -lg 'c++|'idl'\n\n"
+" Identifies the programming language to be parsed.\n"
+" 'c++': C++\n"
+" Files with extensions '.h', '.hxx' are parsed.\n"
+" 'idl': UNO-IDL\n"
+" Files with extensions '.idl' are parsed.\n"
+" Here the language is set globally for all projects.\n"
+" A project can override this by using '-l'.\n"
+"\n"
+" -extg <.AdditionalExtension>+\n\n"
+" Has to follow immediately behind '-lg'.\n"
+" Specifies additional extensions, that will be recognised as\n"
+" source code files of the previously specified programming\n"
+" language. Each extension has to start with '.'.\n"
+" It is possible to include extensionless files, too,\n"
+" by the argument '.'\n"
+" Here these extensions are set globally for all projects.\n"
+" A project can override this by using '-l' and '-ext'.\n"
+"\n"
+" -docg 'html'|'nohtml'\n\n"
+" Specifies the default for all comments in source code, so \n"
+" that HTML-tags are interpreted as such or else treated as\n"
+" regular text.\n"
+" Without this option, the default is 'nohtml'.\n"
+" Here the default is set globally for all projects.\n"
+" A project can override this by using '-doc'.\n"
+"\n"
+" -p <ProjectName> <ProjectRootDirectory>\n\n"
+" ProjectName is used in output as human readable identifier\n"
+" for the project. ProjectRootDirectory is the path,\n"
+" where the arguments of '-d', '-t' and '-f' are relative to.\n"
+" This option can be omitted, then there is no project name\n"
+" and all paths are relative to the current working directory.\n"
+"\n"
+" -l 'c++|'idl'\n\n"
+" Overrides -lg and -extg for the current project, which is\n"
+" specified by the last previous '-p'.\n"
+" For details see at option '-lg'.\n"
+"\n"
+" -ext <.AdditionalExtension>+\n\n"
+" Can be used only immediately behind '-l'.\n"
+" Overrides -extg for the current project, which is\n"
+" specified by the last previous '-p'.\n"
+" For details see at option '-extg'.\n"
+"\n"
+" -doc 'html'|'nohtml'\n\n"
+" Overrides -docg for the current project, which is\n"
+" specified by the last previous '-p'.\n"
+" For details see at option '-docg'.\n"
+"\n"
+" -d <SourceDir_relative2ProjectRootDir_nosubdirs>+\n\n"
+" For the current project all files in the given\n"
+" directories are parsed, which have valid extensions.\n"
+" Subdirectories are NOT parsed.\n"
+"\n"
+" -t <SourceTree_relative2ProjectRootDir>+\n\n"
+" For the current project all files in the given\n"
+" directories AND its subdirectories are parsed, which\n"
+" have valid extensions.\n"
+"\n"
+" -f <SourceFile_relative2ProjectRootDir>+\n\n"
+" For the current project and language the given files\n"
+" are parsed. It doesn't matter, if their extensions match\n"
+" the valid extensions.\n"
+"\n"
+" -html <OutputRootDir>\n\n"
+" Starts the task \"Create HTML output\".\n"
+"\n"
+" -xlinks <Namespace> <ExternLinksRootDir>\n\n"
+" This option allows, to create links to external\n"
+" HTML-documents.\n"
+" For all source code objects (like classes or functions)\n"
+" which belong in the given namespace, the given root\n"
+" directory is used as a base for links to them.\n"
+" Presently, this works only for C++-mappings of IDL-items.\n"
+" The given namespace has to be absolute.\n"
+"\n"
+" -i <CommandFilePath>\n\n"
+" This option is replaced by the contents of the given\n"
+" file. The file has to be ASCII and each option\n"
+" has to start in the first column of a new line.\n"
+" So each valid line starts with a '-'.\n"
+" Empty lines are allowed.\n"
+" Comment lines have to start with '#'\n"
+"\n"
+" -v <VerboseNumber>\n\n"
+" Show details during parsing:\n"
+" 2 shows each parsed letter,\n"
+" 4 shows stored objects.\n"
+" 1 shows recognised tokens.\n"
+" These bit-values can be combined.\n"
+" This option suppresses errors, because of\n"
+" missing output options (no '-html').\n";
+#endif // 0, FUTURE
+
+
+CommandLine::CommandLine()
+ : nDebugStyle(0),
+ pSinceTransformator(new command::SinceTagTransformationData),
+ aCommands(),
+ bInitOk(false),
+ pCommand_CreateHtml(0),
+ pReposy( & ary::Repository::Create_() ),
+ bCpp(false),
+ bIdl(false)
+{
+ csv_assert(pTheInstance_ == 0);
+ pTheInstance_ = this;
+}
+
+CommandLine::~CommandLine()
+{
+ csv::erase_container_of_heap_ptrs(aCommands);
+ pTheInstance_ = 0;
+}
+
+int
+CommandLine::Run() const
+{
+ Cout() << "\nAutodoc version 2.2.5"
+ << "\n---------------------"
+ << "\n" << Endl();
+
+ bool
+ ok = true;
+ for ( CommandList::const_iterator it = aCommands.begin();
+ ok AND it != aCommands.end();
+ ++it )
+ {
+ ok = (*it)->Run();
+ }
+
+ if (pCommand_CreateHtml != 0)
+ {
+ StreamStr aDiagnosticMessagesFile(700);
+ aDiagnosticMessagesFile
+ << pCommand_CreateHtml->OutputDir()
+ << csv::ploc::Delimiter()
+ << "Autodoc_DiagnosticMessages.txt";
+ TheMessages().WriteFile(aDiagnosticMessagesFile.c_str());
+ }
+
+ return ok ? 0 : 1;
+}
+
+CommandLine &
+CommandLine::Get_()
+{
+ csv_assert(pTheInstance_ != 0);
+ return *pTheInstance_;
+}
+
+bool
+CommandLine::DoesTransform_SinceTag() const
+{
+ return pSinceTransformator->DoesTransform();
+}
+
+//bool
+//CommandLine::Strip_SinceTagText( String & io_sSinceTagValue ) const
+//{
+// return pSinceTransformator->StripSinceTagText(io_sSinceTagValue);
+//}
+
+const String &
+CommandLine::DisplayOf_SinceTagValue( const String & i_sVersionNumber ) const
+{
+ return pSinceTransformator->DisplayOf(i_sVersionNumber);
+}
+
+void
+CommandLine::do_Init( int argc,
+ char * argv[] )
+{
+ try
+ {
+ bInitOk = false;
+ StringVector aParameters;
+
+ char * * itpEnd = &argv[0] + argc;
+ for ( char * * itp = &argv[1]; itp != itpEnd; ++itp )
+ {
+ if ( strncmp(*itp, "-I:", 3) != 0 )
+ aParameters.push_back(String(*itp));
+ else
+ load_IncludedCommands(aParameters, (*itp)+3);
+ }
+
+ StringVector::const_iterator itEnd = aParameters.end();
+ for ( StringVector::const_iterator it = aParameters.begin();
+ it != itEnd;
+ )
+ {
+ if ( *it == command::C_opt_Verbose )
+ do_clVerbose(it,itEnd);
+ else if ( *it == command::C_opt_LangAll
+ OR *it == command::C_opt_Name
+ OR *it == command::C_opt_DevmanFile )
+ do_clParse(it,itEnd);
+ else if (*it == command::C_opt_CreateHtml)
+ do_clCreateHtml(it,itEnd);
+ else if (*it == command::C_opt_SinceFile)
+ do_clSinceFile(it,itEnd);
+ else if (*it == command::C_opt_ExternNamespace)
+ {
+ sExternNamespace = *(++it);
+ ++it;
+ if ( strncmp(sExternNamespace.c_str(), "::", 2) != 0)
+ {
+ throw command::X_CommandLine(
+ "-extnsp needs an absolute qualified namespace, starting with \"::\"."
+ );
+ }
+ }
+ else if (*it == command::C_opt_ExternRoot)
+ {
+ ++it;
+ StreamLock sl(1000);
+ if ( csv::compare(*it, 0, "http://", 7) != 0 )
+ {
+ sl() << "http://" << *it;
+ }
+ if ( *(sl().end()-1) != '/')
+ sl() << '/';
+ sExternRoot = sl().c_str();
+
+ ++it;
+ }
+// else if (*it == command::C_opt_CreateXml)
+// do_clCreateXml(it,itEnd);
+// else if (command::C_opt_Load)
+// do_clLoad(it,itEnd);
+// else if (*it == command::C_opt_Save)
+// do_clSave(it,itEnd);
+ else if (*it == "-h" OR *it == "-?" OR *it == "?")
+ // Leads to displaying help, because bInitOk stays on false.
+ return;
+ else if ( *it == command::C_opt_Parse )
+ // Only for backwards compatibility.
+ // Just ignore "-parse".
+ ++it;
+ else
+ {
+ StreamLock sl(200);
+ throw command::X_CommandLine(
+ sl() << "Unknown commandline option \""
+ << *it
+ << "\"."
+ << c_str );
+ }
+ } // end for
+ sort_Commands();
+
+ bInitOk = true;
+
+ } // end try
+ catch ( command::X_CommandLine & xxx )
+ {
+ xxx.Report( Cerr() );
+ }
+ catch ( csv::Exception & xxx )
+ {
+ xxx.GetInfo( Cerr() );
+ }
+}
+
+void
+CommandLine::do_PrintUse() const
+{
+ Cout() << C_sUserGuide << Endl();
+}
+
+bool
+CommandLine::inq_CheckParameters() const
+{
+ if (NOT bInitOk OR aCommands.size() == 0)
+ return false;
+ return true;
+}
+
+void
+CommandLine::load_IncludedCommands( StringVector & out,
+ const char * i_filePath )
+{
+ CharacterSource
+ aIncludedCommands;
+ csv::File
+ aFile(i_filePath, csv::CFM_READ);
+ if (NOT aFile.open())
+ {
+ Cerr() << "Command include file \""
+ << i_filePath
+ << "\" not found."
+ << Endl();
+ throw command::X_CommandLine("Invalid file in option -I:<command-file>.");
+ }
+ aIncludedCommands.LoadText(aFile);
+ aFile.close();
+
+ bool bInToken = false;
+ StreamLock aTransmit(200);
+ for ( ; NOT aIncludedCommands.IsFinished(); aIncludedCommands.MoveOn() )
+ {
+ if (bInToken)
+ {
+ if (aIncludedCommands.CurChar() <= 32)
+ {
+ const char *
+ pToken = aIncludedCommands.CutToken();
+ bInToken = false;
+
+ if ( strncmp(pToken, "-I:", 3) != 0 )
+ {
+ aTransmit().seekp(0);
+ aTransmit() << pToken;
+ aTransmit().replace_all('\\', *csv::ploc::Delimiter());
+ aTransmit().replace_all('/', *csv::ploc::Delimiter());
+ out.push_back(String(aTransmit().c_str()));
+ }
+ else
+ load_IncludedCommands(out, pToken+3);
+ }
+ }
+ else
+ {
+ if (aIncludedCommands.CurChar() > 32)
+ {
+ aIncludedCommands.CutToken();
+ bInToken = true;
+ }
+ } // endif (bInToken) else
+
+ } // end while()
+}
+
+namespace
+{
+inline int
+v_nr(StringVector::const_iterator it)
+{
+ return int( *(*it).c_str() ) - int('0');
+}
+} // anonymous namespace
+
+void
+CommandLine::do_clVerbose( opt_iter & it,
+ opt_iter itEnd )
+{
+ ++it;
+ if ( it == itEnd ? true : v_nr(it) < 0 OR v_nr(it) > 7 )
+ throw command::X_CommandLine( "Missing or invalid number in -v option." );
+ nDebugStyle = v_nr(it);
+ ++it;
+}
+
+void
+CommandLine::do_clParse( opt_iter & it,
+ opt_iter itEnd )
+{
+ command::Command *
+ pCmd_Parse = new command::Parse;
+ pCmd_Parse->Init(it, itEnd);
+ aCommands.push_back(pCmd_Parse);
+}
+
+void
+CommandLine::do_clCreateHtml( opt_iter & it,
+ opt_iter itEnd )
+{
+ pCommand_CreateHtml = new command::CreateHtml;
+ pCommand_CreateHtml->Init(it, itEnd);
+ aCommands.push_back(pCommand_CreateHtml);
+}
+
+void
+CommandLine::do_clSinceFile( opt_iter & it,
+ opt_iter itEnd )
+{
+ pSinceTransformator->Init(it, itEnd);
+}
+
+
+namespace
+{
+
+struct Less_RunningRank
+{
+ bool operator()(
+ const command::Command * const &
+ i1,
+ const command::Command * const &
+ i2 ) const
+ { return i1->RunningRank() < i2->RunningRank(); }
+};
+
+} // anonymous namespace
+
+
+
+void
+CommandLine::sort_Commands()
+{
+ std::sort( aCommands.begin(),
+ aCommands.end(),
+ Less_RunningRank() );
+}
+
+} // namespace autodoc
diff --git a/autodoc/source/exes/adc_uni/adc_cmd.hxx b/autodoc/source/exes/adc_uni/adc_cmd.hxx
new file mode 100644
index 000000000000..d045da77ee84
--- /dev/null
+++ b/autodoc/source/exes/adc_uni/adc_cmd.hxx
@@ -0,0 +1,131 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_ADC_CMD_HXX
+#define ADC_ADC_CMD_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <cosv/comdline.hxx>
+ // COMPONENTS
+ // PARAMETERS
+
+
+namespace autodoc
+{
+namespace command
+{
+
+/** Context for a command, which can be read from the command line.
+*/
+class Context
+{
+ public:
+ typedef StringVector::const_iterator opt_iter;
+
+ virtual ~Context() {}
+
+ void Init(
+ opt_iter & it,
+ opt_iter itEnd );
+ private:
+ virtual void do_Init(
+ opt_iter & it,
+ opt_iter itEnd ) = 0;
+};
+
+// IMPLEMENTATION
+inline void
+Context::Init( opt_iter & i_nCurArgsBegin,
+ opt_iter i_nEndOfAllArgs )
+
+{ do_Init(i_nCurArgsBegin, i_nEndOfAllArgs); }
+
+
+
+/** Interface for commands, autodoc is able to perform.
+*/
+class Command : public Context
+{
+ public:
+ /** Running ranks of the commands are to be maintained at one location:
+ Here!
+ */
+ enum E_Ranks
+ {
+ rank_Load = 10,
+ rank_Parse = 20,
+ rank_Save = 30,
+ rank_CreateHtml = 40,
+ rank_CreateXml = 50
+ };
+
+
+ bool Run() const;
+ int RunningRank() const;
+
+ private:
+ virtual bool do_Run() const = 0;
+ virtual int inq_RunningRank() const = 0;
+};
+
+// IMPLEMENTATION
+inline bool
+Command::Run() const
+{ return do_Run(); }
+inline int
+Command::RunningRank() const
+{ return inq_RunningRank(); }
+
+
+
+
+/** The exception thrown, if the command line is invalid.
+*/
+class X_CommandLine
+{
+ public:
+ X_CommandLine(
+ const char * i_sExplanation )
+ : sExplanation(i_sExplanation) {}
+
+ void Report(
+ std::ostream & o_rOut )
+ { o_rOut << "Error in command line: "
+ << sExplanation << Endl(); }
+ private:
+ String sExplanation;
+};
+
+
+
+
+} // namespace command
+} // namespace autodoc
+#endif
diff --git a/autodoc/source/exes/adc_uni/adc_cmd_parse.cxx b/autodoc/source/exes/adc_uni/adc_cmd_parse.cxx
new file mode 100644
index 000000000000..f3668d625ab8
--- /dev/null
+++ b/autodoc/source/exes/adc_uni/adc_cmd_parse.cxx
@@ -0,0 +1,343 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "adc_cmd_parse.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include <cosv/tpl/tpltools.hxx>
+#include <adc_cl.hxx>
+#include "adc_cmds.hxx"
+#include "cmd_run.hxx"
+
+
+
+namespace autodoc
+{
+namespace command
+{
+
+namespace
+{
+
+const String C_FileEnding_hxx("*.hxx");
+const String C_FileEnding_h("*.h");
+const String C_FileEnding_idl("*.idl");
+const String C_FileEnding_java("*.java");
+
+inline void
+CHECK( bool b, const String & text )
+{
+ if (NOT b)
+ throw X_CommandLine( text );
+}
+
+} // anonymous namespace
+
+
+
+//************************** S_LanguageInfo ***********************//
+
+S_LanguageInfo::~S_LanguageInfo()
+{
+}
+
+void
+S_LanguageInfo::do_Init( opt_iter & it,
+ opt_iter itEnd )
+{
+ ++it; // Cur is language.
+ CHECKOPT( it != itEnd AND
+ ( *it == C_arg_Cplusplus OR
+ *it == C_arg_Idl OR
+ *it == C_arg_Java ),
+ "language",
+ C_opt_LangAll );
+
+ if ( *it == C_arg_Cplusplus ) {
+ eLanguage = cpp;
+ }
+ else if ( *it == C_arg_Idl ) {
+ eLanguage = idl;
+ }
+ else if ( *it == C_arg_Java ) {
+ eLanguage = java;
+ }
+ else {
+ csv_assert(false);
+ }
+
+ switch (eLanguage)
+ {
+ case cpp: aExtensions.push_back( C_FileEnding_hxx );
+ aExtensions.push_back( C_FileEnding_h );
+ CommandLine::Get_().Set_CppUsed();
+ break;
+ case idl: aExtensions.push_back( C_FileEnding_idl );
+ CommandLine::Get_().Set_IdlUsed();
+ break;
+ case java: aExtensions.push_back( C_FileEnding_java );
+ break;
+ default: // do nothing.
+ ;
+ }
+
+ ++it; // Cur is next option.
+}
+
+void
+S_LanguageInfo::InitExtensions( opt_iter & it,
+ opt_iter itEnd )
+{
+ ++it;
+ CHECKOPT( it != itEnd AND (*it).char_at(0) == '.',
+ "extensions",
+ C_opt_ExtensionsAll );
+
+ StreamLock slCheck(150);
+ slCheck() << C_opt_ExtensionsAll
+ << " used without previous "
+ << C_opt_LangAll;
+
+ CHECK( eLanguage != none,
+ slCheck().c_str() );
+
+ do {
+ aExtensions.push_back(*it);
+ ++it;
+ } while (it != itEnd AND (*it).char_at(0) == '.');
+}
+
+
+
+//************************** Parse ***********************//
+
+Parse::Parse()
+ : sRepositoryName(),
+ aGlobalLanguage(),
+ aProjects(),
+ sDevelopersManual_RefFilePath()
+{
+}
+
+Parse::~Parse()
+{
+ csv::erase_container_of_heap_ptrs(aProjects);
+}
+
+void
+Parse::do_Init( opt_iter & it,
+ opt_iter itEnd )
+{
+ for ( ; it != itEnd; )
+ {
+ if (*it == C_opt_Name)
+ do_clName(it, itEnd);
+ else if (*it == C_opt_LangAll)
+ aGlobalLanguage.Init(it, itEnd);
+ else if (*it == C_opt_ExtensionsAll)
+ aGlobalLanguage.InitExtensions(it, itEnd);
+ else if (*it == C_opt_DevmanFile)
+ do_clDevManual(it, itEnd);
+ else if (*it == C_opt_Project)
+ do_clProject(it, itEnd);
+ else if ( *it == C_opt_SourceTree
+ OR *it == C_opt_SourceDir
+ OR *it == C_opt_SourceFile )
+ do_clDefaultProject(it, itEnd);
+ else
+ break;
+ } // for
+}
+
+void
+Parse::do_clName( opt_iter & it,
+ opt_iter itEnd )
+{
+ ++it;
+ CHECKOPT( it != itEnd AND (*it).char_at(0) != '-',
+ "name",
+ C_opt_Name );
+ sRepositoryName = *it;
+ ++it;
+}
+
+void
+Parse::do_clDevManual( opt_iter & it,
+ opt_iter itEnd )
+{
+ ++it;
+ CHECKOPT( it != itEnd AND (*it).char_at(0) != '-',
+ "link file path",
+ C_opt_DevmanFile );
+ sDevelopersManual_RefFilePath = *it;
+ ++it;
+}
+
+void
+Parse::do_clProject( opt_iter & it,
+ opt_iter itEnd )
+{
+ if ( aProjects.size() == 1 )
+ {
+ if ( aProjects.front()->IsDefault() )
+ throw X_CommandLine( "Both, named projects and a default project, cannot be used together." );
+ }
+
+ S_ProjectData * dpProject = new S_ProjectData(aGlobalLanguage);
+ ++it;
+ dpProject->Init(it, itEnd);
+ aProjects.push_back(dpProject);
+}
+
+void
+Parse::do_clDefaultProject( opt_iter & it,
+ opt_iter itEnd )
+{
+ if ( aProjects.size() > 0 )
+ {
+ throw X_CommandLine( "Both, named projects and a default project, cannot be used together." );
+ }
+
+ S_ProjectData * dpProject = new S_ProjectData( aGlobalLanguage,
+ S_ProjectData::default_prj );
+ dpProject->Init(it, itEnd);
+ aProjects.push_back(dpProject);
+}
+
+bool
+Parse::do_Run() const
+{
+ run::Parser
+ aParser(*this);
+ return aParser.Perform();
+}
+
+int
+Parse::inq_RunningRank() const
+{
+ return static_cast<int>(rank_Parse);
+}
+
+
+
+//************************** S_Sources ***********************//
+
+void
+S_Sources::do_Init( opt_iter & it,
+ opt_iter itEnd )
+{
+ StringVector *
+ pList = 0;
+ csv_assert((*it)[0] == '-');
+
+ for ( ; it != itEnd; ++it)
+ {
+ if ((*it)[0] == '-')
+ {
+ if (*it == C_opt_SourceTree)
+ pList = &aTrees;
+ else if (*it == C_opt_SourceDir)
+ pList = &aDirectories;
+ else if (*it == C_opt_SourceFile)
+ pList = &aFiles;
+ else
+ return;
+ }
+ else
+ pList->push_back(*it);
+ } // end for
+}
+
+
+
+//************************** S_ProjectData ***********************//
+
+
+S_ProjectData::S_ProjectData( const S_LanguageInfo & i_globalLanguage )
+ : sName(),
+ aRootDirectory(),
+ aLanguage(i_globalLanguage),
+ aFiles(),
+ bIsDefault(false)
+{
+}
+
+S_ProjectData::S_ProjectData( const S_LanguageInfo & i_globalLanguage,
+ E_Default )
+ : sName(),
+ aRootDirectory("."),
+ aLanguage(i_globalLanguage),
+ aFiles(),
+ bIsDefault(true)
+{
+}
+
+S_ProjectData::~S_ProjectData()
+{
+}
+
+void
+S_ProjectData::do_Init( opt_iter & it,
+ opt_iter itEnd )
+{
+ if (NOT IsDefault())
+ {
+ CHECKOPT( it != itEnd AND (*it).char_at(0) != '-',
+ "name",
+ C_opt_Project );
+ sName = *it;
+ ++it;
+
+ CHECKOPT( it != itEnd AND (*it).char_at(0) != '-',
+ "root directory",
+ C_opt_Project );
+ aRootDirectory.Set((*it).c_str(), true);
+ ++it;
+ }
+
+ for ( ; it != itEnd; )
+ {
+ if ( *it == C_opt_SourceTree
+ OR *it == C_opt_SourceDir
+ OR *it == C_opt_SourceFile )
+ aFiles.Init(it, itEnd);
+// else if (*it == C_opt_Lang)
+// aLanguage.Init(it, itEnd);
+// else if (*it == C_opt_Extensions)
+// aLanguage.InitExtensions(it, itEnd);
+ else
+ break;
+ } // for
+}
+
+} // namespace command
+} // namespace autodoc
+
+
+
diff --git a/autodoc/source/exes/adc_uni/adc_cmd_parse.hxx b/autodoc/source/exes/adc_uni/adc_cmd_parse.hxx
new file mode 100644
index 000000000000..90799c3da286
--- /dev/null
+++ b/autodoc/source/exes/adc_uni/adc_cmd_parse.hxx
@@ -0,0 +1,208 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_ADC_CMD_PARSE_HXX
+#define ADC_ADC_CMD_PARSE_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include "adc_cmd.hxx"
+ // COMPONENTS
+#include <cosv/ploc.hxx>
+ // PARAMETERS
+
+namespace autodoc
+{
+namespace command
+{
+
+/** A command context which holds the currently parsed programing language
+ and its valid file extensions.
+*/
+struct S_LanguageInfo : public Context
+{
+ enum E_ProgrammingLanguage
+ {
+ none,
+ cpp,
+ idl,
+ java
+ };
+ S_LanguageInfo()
+ : eLanguage(none),
+ aExtensions() {}
+ ~S_LanguageInfo();
+
+ void InitExtensions(
+ opt_iter & it,
+ opt_iter itEnd );
+ // DATA
+ E_ProgrammingLanguage
+ eLanguage;
+ StringVector aExtensions; // An empty string is possible and means exactly that: files without extension.
+
+ private:
+ // Interface Context:
+ virtual void do_Init(
+ opt_iter & it,
+ opt_iter itEnd );
+};
+
+
+class S_ProjectData;
+
+
+/** A command that parses source code into the Autodoc Repository.
+*/
+class Parse : public Command
+{
+ public:
+ typedef std::vector< DYN S_ProjectData * > ProjectList;
+ typedef ProjectList::const_iterator ProjectIterator;
+
+ Parse();
+ ~Parse();
+
+ // INQUIRY
+ const String & ReposyName() const;
+ const S_LanguageInfo &
+ GlobalLanguage() const;
+ ProjectIterator ProjectsBegin() const;
+ ProjectIterator ProjectsEnd() const;
+ const String & DevelopersManual_RefFilePath() const
+ { return sDevelopersManual_RefFilePath; }
+
+ private:
+ // Interface Context:
+ virtual void do_Init(
+ opt_iter & i_nCurArgsBegin,
+ opt_iter i_nEndOfAllArgs );
+ // Interface Command:
+ virtual bool do_Run() const;
+ virtual int inq_RunningRank() const;
+
+ // Locals
+ void do_clName(
+ opt_iter & it,
+ opt_iter itEnd );
+ void do_clDevManual(
+ opt_iter & it,
+ opt_iter itEnd );
+ void do_clProject(
+ opt_iter & it,
+ opt_iter itEnd );
+ void do_clDefaultProject(
+ opt_iter & it,
+ opt_iter itEnd );
+
+ // DATA
+ String sRepositoryName;
+ S_LanguageInfo aGlobalLanguage;
+
+ ProjectList aProjects;
+
+ String sDevelopersManual_RefFilePath;
+};
+
+inline const String &
+Parse::ReposyName() const
+ { return sRepositoryName; }
+inline const S_LanguageInfo &
+Parse::GlobalLanguage() const
+ { return aGlobalLanguage; }
+inline Parse::ProjectIterator
+Parse::ProjectsBegin() const
+ { return aProjects.begin(); }
+inline Parse::ProjectIterator
+Parse::ProjectsEnd() const
+ { return aProjects.end(); }
+//inline const String &
+//Parse::DevelopersManual_RefFilePath() const
+// { return sDevelopersManual_RefFilePath; }
+//inline const String &
+//Parse::DevelopersManual_HtmlRoot() const
+// { return sDevelopersManual_HtmlRoot; }
+
+
+struct S_Sources : public Context
+{
+ StringVector aTrees;
+ StringVector aDirectories;
+ StringVector aFiles;
+
+ private:
+ // Interface Context:
+ virtual void do_Init(
+ opt_iter & it,
+ opt_iter itEnd );
+};
+
+class S_ProjectData : public Context
+{
+ public:
+ enum E_Default { default_prj };
+
+ S_ProjectData(
+ const S_LanguageInfo &
+ i_globalLanguage );
+ S_ProjectData(
+ const S_LanguageInfo &
+ i_globalLanguage,
+ E_Default unused );
+ ~S_ProjectData();
+
+ bool IsDefault() const { return bIsDefault; }
+ const String & Name() const { return sName; }
+ const csv::ploc::Path &
+ RootDirectory() const { return aRootDirectory; }
+ const S_LanguageInfo &
+ Language() const { return aLanguage; }
+ const S_Sources Sources() const { return aFiles; }
+
+ private:
+ // Interface Context:
+ virtual void do_Init(
+ opt_iter & it,
+ opt_iter itEnd );
+ // Locals
+
+ // DATA
+ String sName;
+ csv::ploc::Path aRootDirectory;
+ S_LanguageInfo aLanguage;
+ S_Sources aFiles;
+ bool bIsDefault;
+};
+
+
+} // namespace command
+} // namespace autodoc
+
+
+#endif
diff --git a/autodoc/source/exes/adc_uni/adc_cmds.cxx b/autodoc/source/exes/adc_uni/adc_cmds.cxx
new file mode 100644
index 000000000000..bae3aeec19f9
--- /dev/null
+++ b/autodoc/source/exes/adc_uni/adc_cmds.cxx
@@ -0,0 +1,177 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "adc_cmds.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include <ary/ary.hxx>
+#include <autodoc/displaying.hxx>
+#include <autodoc/dsp_html_std.hxx>
+#include <display/corframe.hxx>
+#include <adc_cl.hxx>
+
+
+namespace autodoc
+{
+namespace command
+{
+
+extern const String C_opt_Include("-I:");
+
+extern const String C_opt_Verbose("-v");
+
+extern const String C_opt_Parse("-parse");
+extern const String C_opt_Name("-name");
+extern const String C_opt_LangAll("-lg");
+extern const String C_opt_ExtensionsAll("-extg");
+extern const String C_opt_DevmanFile("-dvgfile");
+extern const String C_opt_SinceFile("-sincefile");
+
+extern const String C_arg_Cplusplus("c++");
+extern const String C_arg_Idl("idl");
+extern const String C_arg_Java("java");
+
+extern const String C_opt_Project("-p");
+//extern const String C_opt_Lang;
+//extern const String C_opt_Extensions;
+extern const String C_opt_SourceDir("-d");
+extern const String C_opt_SourceTree("-t");
+extern const String C_opt_SourceFile("-f");
+
+extern const String C_opt_CreateHtml("-html");
+extern const String C_opt_DevmanRoot("-dvgroot");
+
+//extern const String C_opt_CreateXml("-xml");
+//extern const String C_opt_Load("-load");
+//extern const String C_opt_Save("-save");
+
+extern const String C_opt_ExternNamespace("-extnsp");
+extern const String C_opt_ExternRoot("-extroot");
+
+
+
+//************************** CreateHTML ***********************//
+
+CreateHtml::CreateHtml()
+ : sOutputRootDirectory(),
+ sDevelopersManual_HtmlRoot()
+{
+}
+
+CreateHtml::~CreateHtml()
+{
+}
+
+void
+CreateHtml::do_Init( opt_iter & it,
+ opt_iter itEnd )
+{
+ ++it;
+ CHECKOPT( it != itEnd && (*it).char_at(0) != '-',
+ "output directory", C_opt_CreateHtml );
+ sOutputRootDirectory = *it;
+
+ for ( ++it;
+ it != itEnd AND (*it == C_opt_DevmanRoot);
+ ++it )
+ {
+ if (*it == C_opt_DevmanRoot)
+ {
+ ++it;
+ CHECKOPT( it != itEnd AND (*it).char_at(0) != '-',
+ "HTML root directory of Developers Guide",
+ C_opt_DevmanRoot );
+ sDevelopersManual_HtmlRoot = *it;
+ }
+ } // end for
+}
+
+bool
+CreateHtml::do_Run() const
+{
+ if ( CommandLine::Get_().IdlUsed() )
+ run_Idl();
+ if ( CommandLine::Get_().CppUsed() )
+ run_Cpp();
+ return true;
+}
+
+int
+CreateHtml::inq_RunningRank() const
+{
+ return static_cast<int>(rank_CreateHtml);
+}
+
+void
+CreateHtml::run_Idl() const
+{
+ const ary::idl::Gate &
+ rGate = CommandLine::Get_().TheRepository().Gate_Idl();
+
+ Cout() << "Creating HTML-output into the directory "
+ << sOutputRootDirectory
+ << "."
+ << Endl();
+
+ const DisplayToolsFactory_Ifc &
+ rToolsFactory = DisplayToolsFactory_Ifc::GetIt_();
+ Dyn<autodoc::HtmlDisplay_Idl_Ifc>
+ pDisplay( rToolsFactory.Create_HtmlDisplay_Idl() );
+
+ DYN display::CorporateFrame & // KORR_FUTURE: Remove the need for const_cast
+ drFrame = const_cast< display::CorporateFrame& >(rToolsFactory.Create_StdFrame());
+ if (NOT DevelopersManual_HtmlRoot().empty())
+ drFrame.Set_DevelopersGuideHtmlRoot( DevelopersManual_HtmlRoot() );
+
+ pDisplay->Run( sOutputRootDirectory,
+ rGate,
+ drFrame );
+}
+
+void
+CreateHtml::run_Cpp() const
+{
+ const ary::Repository &
+ rReposy = CommandLine::Get_().TheRepository();
+ const ary::cpp::Gate &
+ rGate = rReposy.Gate_Cpp();
+
+ const DisplayToolsFactory_Ifc &
+ rToolsFactory = DisplayToolsFactory_Ifc::GetIt_();
+ Dyn< autodoc::HtmlDisplay_UdkStd >
+ pDisplay( rToolsFactory.Create_HtmlDisplay_UdkStd() );
+
+ pDisplay->Run( sOutputRootDirectory,
+ rGate,
+ rToolsFactory.Create_StdFrame() );
+}
+
+
+} // namespace command
+} // namespace autodoc
diff --git a/autodoc/source/exes/adc_uni/adc_cmds.hxx b/autodoc/source/exes/adc_uni/adc_cmds.hxx
new file mode 100644
index 000000000000..fb90babc2853
--- /dev/null
+++ b/autodoc/source/exes/adc_uni/adc_cmds.hxx
@@ -0,0 +1,125 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_ADC_CMDS_HXX
+#define ADC_ADC_CMDS_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include "adc_cmd.hxx"
+ // COMPONENTS
+ // PARAMETERS
+
+namespace autodoc
+{
+namespace command
+{
+
+
+/** A command that produces HTML output from the Autodoc Repository.
+*/
+class CreateHtml : public Command
+{
+ public:
+ CreateHtml();
+ ~CreateHtml();
+
+ const String & OutputDir() const;
+ const String & DevelopersManual_HtmlRoot() const
+ { return sDevelopersManual_HtmlRoot; }
+
+ private:
+ // Interface Context:
+ virtual void do_Init(
+ opt_iter & i_nCurArgsBegin,
+ opt_iter i_nEndOfAllArgs );
+ // Interface Command:
+ virtual bool do_Run() const;
+ virtual int inq_RunningRank() const;
+
+ // Locals
+ void run_Cpp() const;
+ void run_Idl() const;
+
+ // DATA
+ String sOutputRootDirectory;
+ String sDevelopersManual_HtmlRoot;
+};
+
+inline const String &
+CreateHtml::OutputDir() const
+ { return sOutputRootDirectory; }
+
+
+extern const String C_opt_Verbose;
+
+extern const String C_opt_Parse;
+extern const String C_opt_Name;
+extern const String C_opt_LangAll;
+extern const String C_opt_ExtensionsAll;
+extern const String C_opt_DevmanFile;
+extern const String C_opt_SinceFile;
+
+extern const String C_arg_Cplusplus;
+extern const String C_arg_Idl;
+extern const String C_arg_Java;
+
+extern const String C_opt_Project;
+//extern const String C_opt_Lang;
+//extern const String C_opt_Extensions;
+extern const String C_opt_SourceTree;
+extern const String C_opt_SourceDir;
+extern const String C_opt_SourceFile;
+
+extern const String C_opt_CreateHtml;
+extern const String C_opt_DevmanRoot;
+
+//extern const String C_opt_CreateXml;
+//extern const String C_opt_Load;
+//extern const String C_opt_Save;
+
+extern const String C_opt_ExternNamespace;
+extern const String C_opt_ExternRoot;
+
+
+inline void
+CHECKOPT( bool b, const char * miss, const String & opt )
+{
+ if ( NOT b )
+ {
+ StreamLock slMsg(100);
+ throw X_CommandLine( slMsg() << "Missing " << miss <<" after " << opt << "." << c_str );
+ }
+}
+
+} // namespace command
+} // namespace autodoc
+
+
+#endif
diff --git a/autodoc/source/exes/adc_uni/adc_msg.cxx b/autodoc/source/exes/adc_uni/adc_msg.cxx
new file mode 100644
index 000000000000..23c15c99790b
--- /dev/null
+++ b/autodoc/source/exes/adc_uni/adc_msg.cxx
@@ -0,0 +1,208 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <adc_msg.hxx>
+
+
+// NOT FULLY DEFINED SERVICES
+#include <cosv/file.hxx>
+#include <cosv/tpl/tpltools.hxx>
+
+
+namespace autodoc
+{
+
+
+Messages::Messages()
+ : aMissingDocs(),
+ aParseErrors(),
+ aInvalidConstSymbols(),
+ aUnresolvedLinks(),
+ aTypeVsMemberMisuses()
+{
+}
+
+Messages::~Messages()
+{
+}
+
+void
+Messages::WriteFile(const String & i_sOutputFilePath)
+{
+ csv::File
+ aOut(i_sOutputFilePath, csv::CFM_CREATE);
+ aOut.open();
+
+ // KORR_FUTURE Enable this when appropriate:
+ WriteParagraph( aOut,
+ aParseErrors,
+ "Incompletely Parsed Files",
+ "Stopped parsing at " );
+
+ WriteParagraph( aOut,
+ aMissingDocs,
+ "Entities Without Documentation",
+ " in " );
+
+ WriteParagraph( aOut,
+ aInvalidConstSymbols,
+ "Incorrectly Written Const Symbols",
+ " in " );
+
+ WriteParagraph( aOut,
+ aUnresolvedLinks,
+ "Unresolved Links",
+ " in\n " );
+
+ WriteParagraph( aOut,
+ aTypeVsMemberMisuses,
+ "Confusion or Misuse of <Type> vs. <Member>",
+ " in " );
+ aOut.close();
+}
+
+void
+Messages::Out_MissingDoc( const String & i_sEntity,
+ const String & i_sFile,
+ uintt i_nLine)
+{
+ AddValue( aMissingDocs,
+ i_sEntity,
+ i_sFile,
+ i_nLine );
+}
+
+void
+Messages::Out_ParseError( const String & i_sFile,
+ uintt i_nLine)
+{
+ aParseErrors[Location(i_sFile,i_nLine)] = String::Null_();
+}
+
+void
+Messages::Out_InvalidConstSymbol( const String & i_sText,
+ const String & i_sFile,
+ uintt i_nLine)
+{
+ AddValue( aInvalidConstSymbols,
+ i_sText,
+ i_sFile,
+ i_nLine );
+}
+
+void
+Messages::Out_UnresolvedLink( const String & i_sLinkText,
+ const String & i_sFile,
+ uintt i_nLine)
+{
+ AddValue( aUnresolvedLinks,
+ i_sLinkText,
+ i_sFile,
+ i_nLine );
+}
+
+void
+Messages::Out_TypeVsMemberMisuse( const String & i_sLinkText,
+ const String & i_sFile,
+ uintt i_nLine)
+{
+ AddValue( aTypeVsMemberMisuses,
+ i_sLinkText,
+ i_sFile,
+ i_nLine );
+}
+
+Messages &
+Messages::The_()
+{
+ static Messages TheMessages_;
+ return TheMessages_;
+}
+
+void
+Messages::AddValue( MessageMap & o_dest,
+ const String & i_sText,
+ const String & i_sFile,
+ uintt i_nLine )
+{
+ String &
+ rDest = o_dest[Location(i_sFile,i_nLine)];
+ StreamLock
+ slDest(2000);
+ if (NOT rDest.empty())
+ slDest() << rDest;
+ slDest() << "\n " << i_sText;
+ rDest = slDest().c_str();
+}
+
+void
+Messages::WriteParagraph( csv::File & o_out,
+ const MessageMap & i_source,
+ const String & i_title,
+ const String & )
+{
+ StreamStr aLine(2000);
+
+ // Write title of paragraph:
+ aLine << i_title
+ << "\n";
+ o_out.write(aLine.c_str());
+
+ aLine.seekp(0);
+ for (uintt i = i_title.size(); i > 0; --i)
+ {
+ aLine << '-';
+ }
+ aLine << "\n\n";
+ o_out.write(aLine.c_str());
+
+ // Write Content
+ MessageMap::const_iterator it = i_source.begin();
+ MessageMap::const_iterator itEnd = i_source.end();
+ for ( ; it != itEnd; ++it )
+ {
+ aLine.seekp(0);
+ aLine << (*it).first.sFile;
+ // Nobody wants to see this, if we don't know the line:
+ if ((*it).first.nLine != 0)
+ {
+ aLine << ", line "
+ << (*it).first.nLine;
+ }
+ if (NOT (*it).second.empty())
+ {
+ aLine << ':'
+ << (*it).second
+ << "\n";
+ }
+ o_out.write(aLine.c_str());
+ }
+ o_out.write("\n\n\n");
+}
+
+} // namespace autodoc
diff --git a/autodoc/source/exes/adc_uni/cmd_run.cxx b/autodoc/source/exes/adc_uni/cmd_run.cxx
new file mode 100644
index 000000000000..d20d9646d3d3
--- /dev/null
+++ b/autodoc/source/exes/adc_uni/cmd_run.cxx
@@ -0,0 +1,613 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "cmd_run.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include <cosv/file.hxx>
+#include <cosv/x.hxx>
+#include <ary/ary.hxx>
+#include <ary/cpp/c_gate.hxx>
+#include <ary/idl/i_ce.hxx>
+#include <ary/idl/i_gate.hxx>
+#include <ary/idl/i_module.hxx>
+#include <ary/idl/ip_ce.hxx>
+#include <autodoc/filecoli.hxx>
+#include <autodoc/parsing.hxx>
+#include <autodoc/prs_code.hxx>
+#include <autodoc/prs_docu.hxx>
+#include <parser/unoidl.hxx>
+#include <adc_cl.hxx>
+#include "adc_cmd_parse.hxx"
+#include "adc_cmds.hxx"
+
+namespace autodoc
+{
+namespace command
+{
+namespace run
+{
+
+Parser::Parser( const Parse & i_command )
+ : rCommand(i_command),
+ pCppParser(),
+ pCppDocuInterpreter(),
+ pIdlParser()
+{
+}
+
+Parser::~Parser()
+{
+}
+
+bool
+Parser::Perform()
+{
+ Cout() << "Parsing the repository "
+ << rCommand.ReposyName()
+ << " ..."
+ << Endl();
+ try
+ {
+ ::ary::Repository &
+ rAry = CommandLine::Get_().TheRepository();
+ rAry.Set_Title(rCommand.ReposyName());
+
+ Dyn< FileCollector_Ifc >
+ pFiles( ParseToolsFactory().Create_FileCollector(6000) );
+
+ bool bIDL = false;
+ bool bCpp = false;
+
+ command::Parse::ProjectIterator
+ itEnd = rCommand.ProjectsEnd();
+ for ( command::Parse::ProjectIterator it = rCommand.ProjectsBegin();
+ it != itEnd;
+ ++it )
+ {
+ uintt nCount = GatherFiles( *pFiles, *(*it) );
+ Cout() << nCount
+ << " files found to parse in project "
+ << (*it)->Name()
+ << "."
+ << Endl();
+
+ switch ( (*it)->Language().eLanguage )
+ {
+ case command::S_LanguageInfo::idl:
+ {
+ Get_IdlParser().Run(*pFiles);
+ bIDL = true;
+ } break;
+ case command::S_LanguageInfo::cpp:
+ {
+ Get_CppParser().Run( *pFiles );
+ bCpp = true;
+ } break;
+ default:
+ Cerr() << "Project in yet unimplemented language skipped."
+ << Endl();
+ }
+ } // end for
+
+ if (bCpp)
+ {
+ rAry.Gate_Cpp().Calculate_AllSecondaryInformation();
+ }
+ if (bIDL)
+ {
+ rAry.Gate_Idl().Calculate_AllSecondaryInformation(
+ rCommand.DevelopersManual_RefFilePath() );
+
+// ::ary::idl::SecondariesPilot &
+// rIdl2sPilot = rAry.Gate_Idl().Secondaries();
+//
+// rIdl2sPilot.CheckAllInterfaceBases( rAry.Gate_Idl() );
+// rIdl2sPilot.Connect_Types2Ces();
+// rIdl2sPilot.Gather_CrossReferences();
+//
+// if (NOT rCommand.DevelopersManual_RefFilePath().empty())
+// {
+// csv::File
+// aFile(rCommand.DevelopersManual_RefFilePath(), csv::CFM_READ);
+// if ( aFile.open() )
+// {
+// rIdl2sPilot.Read_Links2DevManual(aFile);
+// aFile.close();
+// }
+// }
+ } // endif (bIDL)
+
+ return true;
+
+ } // end try
+ catch (csv::Exception & xx)
+ {
+ xx.GetInfo(Cerr());
+ Cerr() << " program will exit." << Endl();
+
+ return false;
+ }
+}
+
+CodeParser_Ifc &
+Parser::Get_CppParser()
+{
+ if ( NOT pCppParser )
+ Create_CppParser();
+ return *pCppParser;
+}
+
+IdlParser &
+Parser::Get_IdlParser()
+{
+ if ( NOT pIdlParser )
+ Create_IdlParser();
+ return *pIdlParser;
+}
+
+void
+Parser::Create_CppParser()
+{
+ pCppParser = ParseToolsFactory().Create_Parser_Cplusplus();
+ pCppDocuInterpreter = ParseToolsFactory().Create_DocuParser_AutodocStyle();
+
+ pCppParser->Setup( CommandLine::Get_().TheRepository(),
+ *pCppDocuInterpreter );
+}
+
+void
+Parser::Create_IdlParser()
+{
+ pIdlParser = new IdlParser(CommandLine::Get_().TheRepository());
+}
+
+const ParseToolsFactory_Ifc &
+Parser::ParseToolsFactory()
+{
+ return ParseToolsFactory_Ifc::GetIt_();
+}
+
+uintt
+Parser::GatherFiles( FileCollector_Ifc & o_rFiles,
+ const S_ProjectData & i_rProject )
+{
+ uintt ret = 0;
+ o_rFiles.EraseAll();
+
+ typedef StringVector StrVector;
+ typedef StrVector::const_iterator StrIterator;
+ const S_Sources &
+ rSources = i_rProject.Sources();
+ const StrVector &
+ rExtensions = i_rProject.Language().aExtensions;
+
+ StrIterator it;
+ StrIterator itTreesEnd = rSources.aTrees.end();
+ StrIterator itDirsEnd = rSources.aDirectories.end();
+ StrIterator itFilesEnd = rSources.aFiles.end();
+ StrIterator itExt;
+ StrIterator itExtEnd = rExtensions.end();
+
+ csv::StreamStr aDir(500);
+ i_rProject.RootDirectory().Get( aDir );
+
+ uintt nProjectDir_AddPosition =
+ ( strcmp(aDir.c_str(),".\\") == 0 OR strcmp(aDir.c_str(),"./") == 0 )
+ ? 0
+ : uintt( aDir.tellp() );
+
+ for ( it = rSources.aDirectories.begin();
+ it != itDirsEnd;
+ ++it )
+ {
+ aDir.seekp( nProjectDir_AddPosition );
+ aDir << *it;
+
+ for ( itExt = rExtensions.begin();
+ itExt != itExtEnd;
+ ++itExt )
+ {
+ ret += o_rFiles.AddFilesFrom( aDir.c_str(),
+ *itExt,
+ FileCollector_Ifc::flat );
+ } // end for itExt
+ } // end for it
+ for ( it = rSources.aTrees.begin();
+ it != itTreesEnd;
+ ++it )
+ {
+ aDir.seekp( nProjectDir_AddPosition );
+ aDir << *it;
+
+ for ( itExt = rExtensions.begin();
+ itExt != itExtEnd;
+ ++itExt )
+ {
+ ret += o_rFiles.AddFilesFrom( aDir.c_str(),
+ *itExt,
+ FileCollector_Ifc::recursive );
+ } // end for itExt
+ } // end for it
+ for ( it = rSources.aFiles.begin();
+ it != itFilesEnd;
+ ++it )
+ {
+ aDir.seekp( nProjectDir_AddPosition );
+ aDir << *it;
+
+ o_rFiles.AddFile( aDir.c_str() );
+ } // end for it
+ ret += rSources.aFiles.size();
+
+ return ret;
+}
+
+
+} // namespace run
+} // namespace command
+
+
+#if 0
+inline const ParseToolsFactory_Ifc &
+CommandRunner::ParseToolsFactory()
+ { return ParseToolsFactory_Ifc::GetIt_(); }
+
+
+inline const command::S_LanguageInfo &
+CommandRunner::Get_ProjectLanguage( const command::Parse & i_rCommand,
+ const command::S_ProjectData & i_rProject )
+{
+ if ( i_rProject.pLanguage )
+ return *i_rProject.pLanguage;
+ return *i_rCommand.GlobalLanguageInfo();
+}
+
+inline bool
+CommandRunner::HasParsedCpp() const
+ { return pCppParser; }
+inline bool
+CommandRunner::HasParsedIdl() const
+ { return pIdlParser; }
+
+
+
+
+
+CommandRunner::CommandRunner()
+ : pCommandLine(0),
+ pReposy(0),
+ pNewReposy(0),
+ nResultCode(0)
+{
+ Cout() << "\nAutodoc version 2.2.1"
+ << "\n-------------------"
+ << "\n" << Endl();
+}
+
+CommandRunner::~CommandRunner()
+{
+ ary::Repository::Destroy_();
+ Cout() << "\n" << Endl();
+}
+
+void
+CommandRunner::Run( const CommandLine & i_rCL )
+{
+ ary::Repository::Destroy_();
+// ary::Repository::Destroy_();
+ pReposy = 0;
+ pNewReposy = 0;
+ nResultCode = 0;
+ pCommandLine = &i_rCL;
+
+ pCommandLine->Run();
+}
+
+void
+CommandRunner::Parse()
+{
+ try
+ {
+
+ csv_assert( pCommandLine->Cmd_Parse() != 0 );
+ const command::Parse &
+ rCmd = *pCommandLine->Cmd_Parse();
+
+ Cout() << "Parsing the repository "
+ << rCmd.ReposyName()
+ << " ..."
+ << Endl();
+
+ if ( pReposy == 0 )
+ pReposy = & ary::Repository::Create_( rCmd.ReposyName(), 0 );
+ if ( pNewReposy == 0 )
+ pNewReposy = & ary::Repository::Create_( rCmd.ReposyName() );
+
+ Dyn< FileCollector_Ifc > pFiles;
+ pFiles = ParseToolsFactory().Create_FileCollector(6000);
+
+ bool bCpp = false;
+ bool bIDL = false;
+
+ command::Parse::ProjectIterator itEnd = rCmd.ProjectsEnd();
+ for ( command::Parse::ProjectIterator it = rCmd.ProjectsBegin();
+ it != itEnd;
+ ++it )
+ {
+
+ uintt nCount = GatherFiles( *pFiles, rCmd, *(*it) );
+ Cout() << nCount
+ << " files found to parse in project "
+ << (*it)->Name()
+ << "."
+ << Endl();
+
+
+ switch ( Get_ProjectLanguage(rCmd, *(*it)).eLanguage )
+ {
+ case command::S_LanguageInfo::cpp:
+ {
+ Get_CppParser().Run( (*it)->Name(),
+ (*it)->RootDirectory(),
+ *pFiles );
+ bCpp = true;
+ } break;
+ case command::S_LanguageInfo::idl:
+ {
+ Get_IdlParser().Run(*pFiles);
+ bIDL = true;
+ } break;
+ default:
+ Cerr() << "Project in yet unimplemented language skipped."
+ << Endl();
+ }
+ } // end for
+
+ if (bCpp)
+ pReposy->RwGate_Cpp().Connect_AllTypes_2_TheirRelated_CodeEntites();
+ if (bIDL)
+ {
+ pNewReposy->Gate_Idl().Secondaries().Connect_Types2Ces();
+ pNewReposy->Gate_Idl().Secondaries().Gather_CrossReferences();
+ }
+
+ } // end try
+ catch (csv::Exception & xx)
+ {
+ xx.GetInfo(Cerr());
+ Cerr() << " program will exit." << Endl();
+ nResultCode = 1;
+ }
+ catch (...)
+ {
+ Cerr() << "Unknown exception - program will exit." << Endl();
+ nResultCode = 1;
+ }
+}
+
+void
+CommandRunner::Load()
+{
+ Cout() << "This would load the repository from the directory "
+ << pCommandLine->Cmd_Load()->ReposyDir()
+ << "."
+ << Endl();
+}
+
+
+void
+CommandRunner::Save()
+{
+ Cout() << "This would save the repository into the directory "
+ << pCommandLine->Cmd_Save()->ReposyDir()
+ << "."
+ << Endl();
+}
+
+
+void
+CommandRunner::CreateHtml()
+{
+ Cout() << "Creating HTML-output into the directory "
+ << pCommandLine->Cmd_CreateHtml()->OutputDir()
+ << "."
+ << Endl();
+
+ if ( HasParsedCpp() )
+ CreateHtml_NewStyle();
+ if ( HasParsedIdl() )
+ CreateHtml_OldIdlStyle();
+}
+
+
+
+void
+CommandRunner::CreateXml()
+{
+ Cout() << "This would create the XML-output into the directory "
+ << pCommandLine->Cmd_CreateXml()->OutputDir()
+ << "."
+ << Endl();
+}
+
+CodeParser_Ifc &
+CommandRunner::Get_CppParser()
+{
+ if ( NOT pCppParser )
+ Create_CppParser();
+ return *pCppParser;
+}
+
+IdlParser &
+CommandRunner::Get_IdlParser()
+{
+ if ( NOT pIdlParser )
+ Create_IdlParser();
+ return *pIdlParser;
+}
+
+void
+CommandRunner::Create_CppParser()
+{
+ pCppParser = ParseToolsFactory().Create_Parser_Cplusplus();
+ pCppDocuInterpreter = ParseToolsFactory().Create_DocuParser_AutodocStyle();
+
+ pCppParser->Setup( *pReposy,
+ *pCppDocuInterpreter );
+}
+
+void
+CommandRunner::Create_IdlParser()
+{
+ pIdlParser = new IdlParser(*pNewReposy);
+}
+
+uintt
+CommandRunner::GatherFiles( FileCollector_Ifc & o_rFiles,
+ const command::Parse & i_rCommand,
+ const command::S_ProjectData & i_rProject )
+{
+ uintt ret = 0;
+ o_rFiles.EraseAll();
+
+ typedef StringVector StrVector;
+ typedef StrVector::const_iterator StrIterator;
+ const command::S_Sources &
+ rSources = i_rProject.aFiles;
+ const StrVector &
+ rExtensions = Get_ProjectLanguage(i_rCommand,i_rProject).aExtensions;
+
+ StrIterator it;
+ StrIterator itDirsEnd = rSources.aDirectories.end();
+ StrIterator itTreesEnd = i_rProject.aFiles.aTrees.end();
+ StrIterator itFilesEnd = i_rProject.aFiles.aFiles.end();
+ StrIterator itExt;
+ StrIterator itExtEnd = rExtensions.end();
+
+ csv::StreamStr aDir(500);
+ i_rProject.aRootDirectory.Get( aDir );
+
+ uintt nProjectDir_AddPosition =
+ ( strcmp(aDir.c_str(),".\\") == 0 OR strcmp(aDir.c_str(),"./") == 0 )
+ ? 0
+ : uintt( aDir.tellp() );
+
+ for ( it = rSources.aDirectories.begin();
+ it != itDirsEnd;
+ ++it )
+ {
+ aDir.seekp( nProjectDir_AddPosition );
+ aDir << *it;
+
+ for ( itExt = rExtensions.begin();
+ itExt != itExtEnd;
+ ++itExt )
+ {
+ ret += o_rFiles.AddFilesFrom( aDir.c_str(),
+ *itExt,
+ FileCollector_Ifc::flat );
+ } // end for itExt
+ } // end for it
+ for ( it = rSources.aTrees.begin();
+ it != itTreesEnd;
+ ++it )
+ {
+ aDir.seekp( nProjectDir_AddPosition );
+ aDir << *it;
+
+ for ( itExt = rExtensions.begin();
+ itExt != itExtEnd;
+ ++itExt )
+ {
+ ret += o_rFiles.AddFilesFrom( aDir.c_str(),
+ *itExt,
+ FileCollector_Ifc::recursive );
+ } // end for itExt
+ } // end for it
+ for ( it = rSources.aFiles.begin();
+ it != itFilesEnd;
+ ++it )
+ {
+ aDir.seekp( nProjectDir_AddPosition );
+ aDir << *it;
+
+ o_rFiles.AddFile( aDir.c_str() );
+ } // end for it
+ ret += rSources.aFiles.size();
+
+ return ret;
+}
+
+void
+CommandRunner::CreateHtml_NewStyle()
+{
+ const ary::cpp::DisplayGate &
+ rGate = pReposy->DisplayGate_Cpp();
+
+ Dyn< autodoc::HtmlDisplay_UdkStd > pHtmlDisplay;
+ pHtmlDisplay = DisplayToolsFactory_Ifc::GetIt_()
+ .Create_HtmlDisplay_UdkStd();
+
+ pHtmlDisplay->Run( pCommandLine->Cmd_CreateHtml()->OutputDir(),
+ rGate,
+ DisplayToolsFactory_Ifc::GetIt_().Create_StdFrame() );
+}
+
+void
+CommandRunner::CreateHtml_OldIdlStyle()
+{
+ ary::idl::Gate &
+ rAryGate = pNewReposy->Gate_Idl();
+
+ // Read DevManualLinkFile:
+ // KORR_FUTURE
+ csv::File
+ aFile("devmanref.txt", csv::CFM_READ);
+ if ( aFile.open() )
+ {
+ rAryGate.Secondaries().Read_Links2DevManual(aFile);
+ aFile.close();
+ }
+
+ // New Style Output
+ Dyn<autodoc::HtmlDisplay_Idl_Ifc> pNewDisplay;
+ pNewDisplay = DisplayToolsFactory_Ifc::GetIt_()
+ .Create_HtmlDisplay_Idl();
+ pNewDisplay->Run( pCommandLine->Cmd_CreateHtml()->OutputDir(),
+ rAryGate,
+ DisplayToolsFactory_Ifc::GetIt_().Create_StdFrame() );
+}
+#endif // 0
+
+} // namespace autodoc
+
+
+
+
diff --git a/autodoc/source/exes/adc_uni/cmd_run.hxx b/autodoc/source/exes/adc_uni/cmd_run.hxx
new file mode 100644
index 000000000000..8216f77e4029
--- /dev/null
+++ b/autodoc/source/exes/adc_uni/cmd_run.hxx
@@ -0,0 +1,104 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_CMD_RUN_HXX
+#define ADC_CMD_RUN_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <cosv/comdline.hxx>
+ // COMPONENTS
+ // PARAMETERS
+
+namespace ary
+{
+ class Repository;
+}
+
+namespace autodoc
+{
+ class FileCollector_Ifc;
+ class ParseToolsFactory_Ifc;
+ class CodeParser_Ifc;
+ class DocumentationParser_Ifc;
+ class IdlParser;
+
+
+namespace command
+{
+ class Parse;
+ class S_ProjectData;
+ struct S_LanguageInfo;
+
+namespace run
+{
+
+/** Performs an ::autodoc::command::Parse .
+*/
+class Parser
+{
+ public:
+ Parser(
+ const Parse & i_command );
+ ~Parser();
+
+ bool Perform();
+
+ private:
+ // Locals
+ CodeParser_Ifc & Get_CppParser();
+ IdlParser & Get_IdlParser();
+ void Create_CppParser();
+ void Create_IdlParser();
+ const ParseToolsFactory_Ifc &
+ ParseToolsFactory();
+ uintt GatherFiles(
+ FileCollector_Ifc & o_rFiles,
+ const S_ProjectData &
+ i_rProject );
+ // DATA
+ const Parse & rCommand;
+
+ Dyn<CodeParser_Ifc> pCppParser;
+ Dyn<DocumentationParser_Ifc>
+ pCppDocuInterpreter;
+ Dyn<IdlParser> pIdlParser;
+};
+
+
+
+
+// IMPLEMENTATION
+
+
+} // namespace run
+} // namespace command
+} // namespace autodoc
+
+#endif
diff --git a/autodoc/source/exes/adc_uni/cmd_sincedata.cxx b/autodoc/source/exes/adc_uni/cmd_sincedata.cxx
new file mode 100644
index 000000000000..1f61d11b9ba5
--- /dev/null
+++ b/autodoc/source/exes/adc_uni/cmd_sincedata.cxx
@@ -0,0 +1,129 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "cmd_sincedata.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include <cosv/file.hxx>
+#include <cosv/tpl/tpltools.hxx>
+#include "adc_cmds.hxx"
+
+
+
+namespace autodoc
+{
+namespace command
+{
+
+SinceTagTransformationData::SinceTagTransformationData()
+ : aTransformationTable()
+{
+}
+
+SinceTagTransformationData::~SinceTagTransformationData()
+{
+}
+
+bool
+SinceTagTransformationData::DoesTransform() const
+{
+ return NOT aTransformationTable.empty();
+}
+
+const String &
+SinceTagTransformationData::DisplayOf( const String & i_versionNumber ) const
+{
+ if (DoesTransform())
+ {
+ StreamLock
+ sl(200);
+ sl() << i_versionNumber;
+ sl().strip_frontback_whitespace();
+ String
+ sVersionNumber(sl().c_str());
+
+ const String *
+ ret = csv::find_in_map(aTransformationTable, sVersionNumber);
+ return ret != 0
+ ? *ret
+ : String::Null_();
+ }
+ else
+ {
+ return i_versionNumber;
+ }
+}
+
+void
+SinceTagTransformationData::do_Init( opt_iter & it,
+ opt_iter itEnd )
+{
+ ++it; // Cur is since-file path.
+
+ CHECKOPT( it != itEnd ,
+ "file path",
+ C_opt_SinceFile );
+
+ csv::File aSinceFile(*it);
+ csv::OpenCloseGuard aSinceFileGuard(aSinceFile);
+ StreamStr sLine(200);
+
+ if (aSinceFileGuard)
+ {
+ for ( sLine.operator_read_line(aSinceFile);
+ NOT sLine.empty();
+ sLine.operator_read_line(aSinceFile) )
+ {
+
+ if (*sLine.begin() != '"')
+ continue;
+
+ const char * pVersion = sLine.c_str() + 1;
+ const char * pVersionEnd = strchr(pVersion, '"');
+ if (pVersionEnd == 0)
+ continue;
+ const char * pDisplay = strchr(pVersionEnd+1, '"');
+ if (pDisplay == 0)
+ continue;
+ ++pDisplay;
+ const char * pDisplayEnd = strchr(pDisplay, '"');
+ if (pDisplayEnd == 0)
+ continue;
+
+ aTransformationTable[ String(pVersion,pVersionEnd) ]
+ = String(pDisplay,pDisplayEnd);
+ sLine.clear();
+ } // end for
+ } // end if
+
+ ++it; // Cur is next option.
+}
+
+} // namespace command
+} // namespace autodoc
diff --git a/autodoc/source/exes/adc_uni/cmd_sincedata.hxx b/autodoc/source/exes/adc_uni/cmd_sincedata.hxx
new file mode 100644
index 000000000000..355c64c2d314
--- /dev/null
+++ b/autodoc/source/exes/adc_uni/cmd_sincedata.hxx
@@ -0,0 +1,91 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_CMD_SINCEDATA_HXX
+#define ADC_CMD_SINCEDATA_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include "adc_cmd.hxx"
+ // COMPONENTS
+ // PARAMETERS
+
+namespace autodoc
+{
+namespace command
+{
+
+
+/** Provides replacements for the contents of the @@since documentation tag.
+
+ Because the @@since tag is part of the source code, it allows only one kind
+ of version information there. If this is to be mapped for different products
+ (example: from OpenOffice.org versions in the @@since tag to StarOffice or
+ StarSuite products), the value of @@since needs a replacement, which is provided
+ by this class.
+
+*/
+class SinceTagTransformationData : public Context
+{
+ public:
+ /** The key of this map are the version numbers within @since.
+ The value is the string to display for each version number.
+ */
+ typedef std::map<String,String> Map_Version2Display;
+
+ // LIFECYCLE
+ SinceTagTransformationData();
+ virtual ~SinceTagTransformationData();
+
+ // INQUIRY
+ /// False, if no transformation table exists.
+ bool DoesTransform() const;
+
+ /** Gets the string to display for a version number.
+
+ @param i_sVersionNumber
+ Usually should be the result of ->StripSinceTagValue().
+ */
+ const String & DisplayOf(
+ const String & i_sVersionNumber ) const;
+ private:
+ // Interface Context:
+ virtual void do_Init(
+ opt_iter & i_nCurArgsBegin,
+ opt_iter i_nEndOfAllArgs );
+ // DATA
+ Map_Version2Display aTransformationTable;
+};
+
+
+} // namespace command
+} // namespace autodoc
+
+
+#endif
diff --git a/autodoc/source/exes/adc_uni/main.cxx b/autodoc/source/exes/adc_uni/main.cxx
new file mode 100644
index 000000000000..ff5523a9a137
--- /dev/null
+++ b/autodoc/source/exes/adc_uni/main.cxx
@@ -0,0 +1,54 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+
+
+// NOT FULLY DECLARED SERVICES
+
+#include <adc_cl.hxx>
+#include "cmd_run.hxx"
+
+
+int
+#ifdef WNT
+ _cdecl
+#endif
+main( int argc,
+ char * argv[] )
+{
+ autodoc::CommandLine aCL;
+ aCL.Init(argc, argv);
+ if (NOT aCL.CheckParameters() )
+ return 1;
+
+ int ret = aCL.Run();
+ return ret;
+}
+
+
+
diff --git a/autodoc/source/exes/adc_uni/makefile.mk b/autodoc/source/exes/adc_uni/makefile.mk
new file mode 100644
index 000000000000..8baea0830233
--- /dev/null
+++ b/autodoc/source/exes/adc_uni/makefile.mk
@@ -0,0 +1,104 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..$/..$/..
+
+PRJNAME=autodoc
+TARGET=autodoc
+TARGETTYPE=CUI
+
+# --- Settings -----------------------------------------------------
+
+ENABLE_EXCEPTIONS=true
+PRJINC=$(PRJ)$/source
+
+.INCLUDE : settings.mk
+.INCLUDE : $(PRJ)$/source$/mkinc$/fullcpp.mk
+
+UWINAPILIB=$(0)
+LIBSALCPPRT=$(0)
+
+# --- Files --------------------------------------------------------
+
+OBJFILES= \
+ $(OBJ)$/adc_cl.obj \
+ $(OBJ)$/adc_cmd_parse.obj \
+ $(OBJ)$/adc_cmds.obj \
+ $(OBJ)$/adc_msg.obj \
+ $(OBJ)$/cmd_run.obj \
+ $(OBJ)$/cmd_sincedata.obj
+
+
+# --- Targets ------------------------------------------------------
+
+LIB1TARGET=$(LB)$/atdoc.lib
+LIB1FILES= \
+ $(LB)$/$(TARGET).lib $(LB)$/autodoc_tools.lib \
+ $(LB)$/ary_kernel.lib $(LB)$/ary_cpp.lib $(LB)$/ary_idl.lib \
+ $(LB)$/ary_info.lib $(LB)$/ary_loc.lib \
+ $(LB)$/parser_kernel.lib $(LB)$/parser_tokens.lib $(LB)$/parser_semantic.lib \
+ $(LB)$/parser_cpp.lib $(LB)$/parser_adoc.lib \
+ $(LB)$/display_kernel.lib $(LB)$/display_html.lib $(LB)$/display_idl.lib \
+ $(LB)$/display_toolkit.lib $(LB)$/parser2_tokens.lib \
+ $(LB)$/parser2_s2_luidl.lib $(LB)$/parser2_s2_dsapi.lib \
+ $(LB)$/ary2_cinfo.lib $(LB)$/ary_doc.lib
+
+
+
+APP1TARGET= $(TARGET)
+APP1STACK= 1000000
+APP1OBJS= $(OBJ)$/main.obj
+
+APP1RPATH=SDK
+
+.IF "$(GUI)"=="WNT"
+APP1STDLIBS= $(LIBSTLPORT) $(COSVLIB) $(UDMLIB)
+.ELSE
+.IF "$(OS)"=="MACOSX"
+# See <http://porting.openoffice.org/servlets/ReadMsg?list=mac&msgNo=6911>:
+APP1STDLIBS= $(LIBSTLPORT) -Wl,-all_load -ludm -lcosv
+.ELSE
+APP1STDLIBS= -lcosv -ludm
+.ENDIF
+.ENDIF
+
+APP1LIBS=$(LB)$/atdoc.lib
+
+DEPOBJFILES += $(APP1OBJS)
+
+APP1DEPN= $(LB)$/$(TARGET).lib $(LB)$/autodoc_tools.lib \
+ $(LB)$/ary_kernel.lib $(LB)$/ary_cpp.lib $(LB)$/ary_idl.lib \
+ $(LB)$/ary_info.lib $(LB)$/ary_loc.lib \
+ $(LB)$/parser_kernel.lib $(LB)$/parser_tokens.lib $(LB)$/parser_semantic.lib \
+ $(LB)$/parser_cpp.lib $(LB)$/parser_adoc.lib \
+ $(LB)$/display_kernel.lib $(LB)$/display_html.lib $(LB)$/display_idl.lib \
+ $(LB)$/display_toolkit.lib $(LB)$/parser2_tokens.lib \
+ $(LB)$/parser2_s2_luidl.lib $(LB)$/parser2_s2_dsapi.lib \
+ $(LB)$/ary2_cinfo.lib $(LB)$/ary_doc.lib
+
+
+.INCLUDE : target.mk
diff --git a/autodoc/source/exes/adc_uni/spec-CommandLine.txt b/autodoc/source/exes/adc_uni/spec-CommandLine.txt
new file mode 100644
index 000000000000..756b3184a2e4
--- /dev/null
+++ b/autodoc/source/exes/adc_uni/spec-CommandLine.txt
@@ -0,0 +1,181 @@
+ Command Line Options
+ --------------------
+
+autodoc [-v <level>]
+ -html <out>
+ [-extroot <externroot> -extnsp <externnamespace>]
+ -lg <proglang>
+ [-t <sourcetree>[ <sourcetree> ...]
+ [-d <sourcedir>[ <sourcedir> ...]
+ [-f <sourcefile>[ <sourcefile> ...]
+
+
+ -html <OutputDirectory>
+ Directory where the output will be created.
+
+ -lg <ProgrammingLanguage>
+ Allowed values: "c++" or "idl"
+
+ -extroot <externroot>
+ Only together with "-lg idl" and -extnsp.
+ Links to code entities not found within the current parsed
+ code, will be linked there, but only if -extnsp is given and
+ the linked entity is in the given namespace.
+ <externroot> is a http link, it needs no "http://" at the
+ beginning nor slash at the end.
+
+ -extnsp <externnamespace>
+ Only together with "-lg idl" and -extroot.
+ If a code entity is not found in the current parsed code, but
+ dwells in the namespace (or its children) given here, it is
+ linked into the loction given by -extroot.
+ <externnamespace> is an absolute qualified namespace,
+ starting with "::".
+
+ -t <SourceTree>*
+ Directory with all subdirectories.
+
+ -d <SourceDirectory>*
+ Directory without subdirectories.
+
+ -f <SourceFile>*
+ Any file. Here also files with extensions not matching the
+ language are accepted.
+
+ -I:<ResponseFile>
+ Each line in the response file has to have one command line
+ option. No whitespace at start of line.
+
+ -C:<ConfigurationFile>
+ Format see below.
+
+ -v <VerboseLevel>
+ Only for debugging. Bits 1, 2 and 4 in any combination give
+ different output.
+
+ -h
+ Displays help.
+ -?
+ Displays help.
+
+
+
+
+
+ Command Line Options especially for the OpenOffice.org SDK
+ ----------------------------------------------------------
+
+ -dvgroot <DevelopersGuide>
+ Root directory of the SDK Developers Guide.
+
+ -dvgfile <ReferenceFile>
+ File with references to the SDK Developers Guide.
+
+ -sincefile <@since-AssociationFile>
+ File that maps OpenOffice versions to the wished displayed version names.
+
+ -idlref <IdlDocumentationRoot> <Namespace[,Namespace ...]>
+ Gives the outputdirectory of an IDL documentation, where
+ symbols not found in the currently parsed namespaces of C++
+ or Java can be found.
+
+
+
+ Configure File Format
+ ---------------------
+
+<AutodocConfiguration>
+ <RepositoryName></RepositoryName>
+ // Base name of the binary repository files.
+ // Has to be a valid file name.
+
+ <HtmlOutputTitle></HtmlOutputTitle>
+ // Title on the "welcome page" of the created HTML documentation.
+ // Can be any text.
+
+ <CppExtensions></CppExtensions>
+ // Overwrites the default. Default is: .hxx .h .hpp
+ // Format: File extensions with a dot in front, like ".hcc".
+
+ <IdlExtensions></IdlExtensions>
+ // Overwrites the default. Default is: .idl
+ // Format: File extensions with a dot in front, like ".txt".
+
+ <CppDocu html="(on|off) off"/>
+
+ <IdlDocu html="(on|off) on"/>
+
+</AutodocConfiguration>
+
+
+
+
+
+
+ Historical Command Line Options
+ -------------------------------
+
+autodoc.exe
+ [ -v <VerboseNr> ]
+ -html <OutputDirectory>
+ {
+ [ -parse ]
+ [ -name <RepositoryName> ]
+ -lg <ProgrammingLanguage>
+ {
+ [ -p <ProjectName> <ProjectRootDirectory> ]
+ {
+ -t <SourceDirectory>*
+ -d <SourceDirectory>*
+ -f <SourceFile>*
+ }+
+ }+
+ }
+
+Legend:
+ <Text>
+ command line parameter
+ [ ]
+ optional
+ { }
+ Block of connected options.
+ The sequence of not connected options does not matter. So the -html or -v options can be used before or after all the parsing options.
+ +
+ once or more times
+ *
+ none or more times
+
+
+Explanation of the Options
+ -v <VerboseNr> Only for debugging. Bits 1, 2 and 4 in any combination give different output.
+ -html <OutputDirectory>
+ Gives the directory, where a HTML version of the docu shall be generated.
+ -parse Starts the block, where all the parse options are given. This can be omitted, because the parse options are identifiable without it, but it may make a commandline more readable.
+ -name <RepositoryName> This name appears as title of the documentation (currently only in the in the C++ version).
+ -lg <ProgrammingLanguage>
+
+
+ Possible values are:
+
+ c++
+ This parses all files with the endings .hxx and .h .
+ idl
+ This parses all files with the ending .idl .
+
+ -p with -t/-d/-f: If there are more than one project, the -p option is required for each one.
+
+ The directory given wit the -p option is the root directory of the project.
+ If there is no -p option, the working directory is seen as root.
+
+ All paths given with -t/-d/-f are relative to that root directory. It is possible to use "." as argument for -t or -d.
+
+ Each of -t/-d/-f can have several arguments:
+ One could write "-f file1.hxx file2.hxx file_xyz.hxx"
+ After each -p (or after -lg, if there is no -p option), there has to be at least one of the following three:
+ -t Tree, which means: include subdirectories
+ -d Directory, which means: no subdirectories
+ -f File", which means: single file name with ending.
+ This option also allows to parse some files with an ending different from those, the -lg option implies.
+
+
+
diff --git a/autodoc/source/exes/adc_uni/spec-DevGuideReferenceFile.txt b/autodoc/source/exes/adc_uni/spec-DevGuideReferenceFile.txt
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/autodoc/source/exes/adc_uni/spec-DevGuideReferenceFile.txt
diff --git a/autodoc/source/exes/adc_uni/spec-SinceTag_Handling.txt b/autodoc/source/exes/adc_uni/spec-SinceTag_Handling.txt
new file mode 100644
index 000000000000..7cf264e76be3
--- /dev/null
+++ b/autodoc/source/exes/adc_uni/spec-SinceTag_Handling.txt
@@ -0,0 +1,49 @@
+ General Handling
+ ----------------
+
+- The developer inserts the OpenOffice.org version into the @since tag.
+
+- @since-Tag may contain any string which needs to end with a Version number.
+ The first cipher following immediately on a white space is interpreted as start of the version number.
+
+- The @since Tag must stay completely within one line to allow tool support for retargeting.
+
+- To replace @since entries in the generated documentation, one needs to use
+ the command line option
+
+ -sincefile <TransformationFile-path>
+
+ This option has to occur immediately after the -html option.
+ If this option is not given, the original text of the @since tag is
+ displayed.
+
+ If the TransformationFile does not contain a specific entry,
+ nothing is displayed for this entry.
+
+
+
+ Format of the @since Tag Transformation File
+ --------------------------------------------
+
+Example
+-------
+
+***** BEGIN OF FILE ******
+"1.1" "StarOffice 7.0"
+"2.0" "StarOffice 8.0"
+"2.1" "StarOffice 9.0"
+***** END OF FILE ******
+
+
+
+Rules and Restrictions
+----------------------
+
+* Each line contains two strings within "".
+ The first string is the OpenOffice.org version number which is found in the @since tag.
+ The second string is the string to display for this version.
+* No specific order among product versions is needed.
+* Empty lines and whitespaces are allowed, except:
+ - Non empty lines must not start with white space.
+ - Within OpenOffice.org version strings, no whitespace is allowed.
+* Whitespace within display strings is displayed as it is.
diff --git a/autodoc/source/inc/adc_cl.hxx b/autodoc/source/inc/adc_cl.hxx
new file mode 100644
index 000000000000..8bcec7df50ce
--- /dev/null
+++ b/autodoc/source/inc/adc_cl.hxx
@@ -0,0 +1,193 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_ADC_CL_HXX
+#define ADC_ADC_CL_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <cosv/comdline.hxx>
+ // COMPONENTS
+ // PARAMETERS
+
+namespace ary
+{
+ class Repository;
+}
+
+namespace autodoc
+{
+namespace command
+{
+ class Command;
+ class CreateHtml;
+ class SinceTagTransformationData;
+}
+
+
+/** Reads and runs an Autodoc command line.
+*/
+class CommandLine : public csv::CommandLine_Ifc
+{
+ public:
+ // LIFECYCLE
+ CommandLine();
+ ~CommandLine();
+ // OPERATIONS
+ int Run() const;
+
+ // INQUIRY
+ // debugging
+ bool DebugStyle_ShowText() const;
+ bool DebugStyle_ShowStoredObjects() const;
+ bool DebugStyle_ShowTokens() const;
+
+ // @since tags
+ bool DoesTransform_SinceTag() const;
+
+// /// @see command::SinceTagTransformationData::StripSinceTagValue()
+// bool Strip_SinceTagText(
+// String & io_sSinceTagValue ) const;
+
+ /// @see command::SinceTagTransformationData::DisplayOf()
+ const String & DisplayOf_SinceTagValue(
+ const String & i_sVersionNumber ) const;
+
+ // extern IDL links
+ const String & ExternRoot() const { return sExternRoot; }
+ const String & ExternNamespace() const { return sExternNamespace; }
+
+ bool CppUsed() const { return bCpp; }
+ bool IdlUsed() const { return bIdl; }
+
+ // ACCESS
+ static CommandLine &
+ Get_();
+ void Set_ExternRoot(
+ const String & i_s )
+ { sExternRoot = i_s; }
+ void Set_ExternNamespace(
+ const String & i_s )
+ { sExternNamespace = i_s; }
+ ary::Repository & TheRepository() const { csv_assert(pReposy != 0);
+ return *pReposy; }
+ void Set_CppUsed() { bCpp = true; }
+ void Set_IdlUsed() { bIdl = true; }
+
+ private:
+ // Interface cosv::CommandLine_Ifc:
+ virtual void do_Init(
+ int argc,
+ char * argv[] );
+ virtual void do_PrintUse() const;
+ virtual bool inq_CheckParameters() const;
+
+ // Locals
+ typedef StringVector::const_iterator opt_iter;
+ typedef std::vector< DYN command::Command* > CommandList;
+
+ void load_IncludedCommands(
+ StringVector & out,
+ const char * i_filePath );
+
+ void do_clVerbose(
+ opt_iter & it,
+ opt_iter itEnd );
+ void do_clParse(
+ opt_iter & it,
+ opt_iter itEnd );
+ void do_clCreateHtml(
+ opt_iter & it,
+ opt_iter itEnd );
+ void do_clSinceFile(
+ opt_iter & it,
+ opt_iter itEnd );
+
+// void do_clCreateXml(
+// opt_iter & it,
+// opt_iter itEnd );
+// void do_clLoad(
+// opt_iter & it,
+// opt_iter itEnd );
+// void do_clSave(
+// opt_iter & it,
+// opt_iter itEnd );
+
+ void sort_Commands();
+
+ // DATA
+ uintt nDebugStyle;
+ Dyn<command::SinceTagTransformationData>
+ pSinceTransformator;
+
+ CommandList aCommands;
+ bool bInitOk;
+ command::CreateHtml *
+ pCommand_CreateHtml;
+
+ String sExternRoot;
+ String sExternNamespace;
+
+ mutable Dyn<ary::Repository>
+ pReposy;
+ bool bCpp;
+ bool bIdl;
+
+ static CommandLine *
+ pTheInstance_;
+};
+
+
+
+// IMPLEMENTATION
+inline bool
+CommandLine::DebugStyle_ShowText() const
+ { return (nDebugStyle & 2) != 0; }
+inline bool
+CommandLine::DebugStyle_ShowStoredObjects() const
+ { return (nDebugStyle & 4) != 0; }
+inline bool
+CommandLine::DebugStyle_ShowTokens() const
+ { return (nDebugStyle & 1) != 0; }
+
+} // namespace autodoc
+
+
+inline bool
+DEBUG_ShowText()
+ { return autodoc::CommandLine::Get_().DebugStyle_ShowText(); }
+inline bool
+DEBUG_ShowStoring()
+ { return autodoc::CommandLine::Get_().DebugStyle_ShowStoredObjects(); }
+inline bool
+DEBUG_ShowTokens()
+ { return autodoc::CommandLine::Get_().DebugStyle_ShowTokens(); }
+
+#endif
+
diff --git a/autodoc/source/inc/adc_msg.hxx b/autodoc/source/inc/adc_msg.hxx
new file mode 100644
index 000000000000..320b8bd96ebc
--- /dev/null
+++ b/autodoc/source/inc/adc_msg.hxx
@@ -0,0 +1,141 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_ADC_MSG_HXX
+#define ADC_ADC_MSG_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+ // COMPONENTS
+ // PARAMETERS
+namespace csv
+{
+ class File;
+}
+
+
+namespace autodoc
+{
+
+
+/** Gathers, sorts and displays (mainly diagnostic) messages to the
+ user of Autodoc.
+*/
+class Messages
+{
+ public:
+ // LIFECYCLE
+ Messages();
+ ~Messages();
+ // OPERATIONS
+ void WriteFile(
+ const String & i_sOutputFilePath);
+ // INQUIRY
+
+ // ACCESS
+ void Out_MissingDoc(
+ const String & i_sEntity,
+ const String & i_sFile,
+ uintt i_nLine);
+ void Out_ParseError(
+ const String & i_sFile,
+ uintt i_nLine);
+ void Out_InvalidConstSymbol(
+ const String & i_sText,
+ const String & i_sFile,
+ uintt i_nLine);
+ void Out_UnresolvedLink(
+ const String & i_sLinkText,
+ const String & i_sFile,
+ uintt i_nLine);
+ void Out_TypeVsMemberMisuse(
+ const String & i_sLinkText,
+ const String & i_sFile,
+ uintt i_nLine);
+
+ static Messages & The_();
+
+ private:
+ struct Location
+ {
+ String sFile;
+ uintt nLine;
+
+ Location(
+ const String & i_file,
+ uintt i_line)
+ : sFile(i_file),
+ nLine(i_line) {}
+ bool operator<(
+ const Location & i_other) const
+ { int cmp = csv::compare(sFile,i_other.sFile);
+ return cmp < 0
+ ? true
+ : cmp > 0
+ ? false
+ : nLine < i_other.nLine;
+ }
+ };
+
+ typedef std::map<Location,String> MessageMap;
+
+ // Locals
+ void AddValue(
+ MessageMap & o_dest,
+ const String & i_sText,
+ const String & i_sFile,
+ uintt i_nLine );
+ void WriteParagraph(
+ csv::File & o_out,
+ const MessageMap & i_source,
+ const String & i_title,
+ const String & i_firstIntermediateText );
+
+ // DATA
+ MessageMap aMissingDocs;
+ MessageMap aParseErrors;
+ MessageMap aInvalidConstSymbols;
+ MessageMap aUnresolvedLinks;
+ MessageMap aTypeVsMemberMisuses;
+};
+
+
+
+// IMPLEMENTATION
+
+
+} // namespace autodoc
+
+inline autodoc::Messages &
+TheMessages()
+{
+ return autodoc::Messages::The_();
+}
+
+#endif
diff --git a/autodoc/source/inc/docu_node_ids.hxx b/autodoc/source/inc/docu_node_ids.hxx
new file mode 100644
index 000000000000..b06997755c2b
--- /dev/null
+++ b/autodoc/source/inc/docu_node_ids.hxx
@@ -0,0 +1,64 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_DOCU_NODE_IDS_HXX
+#define ADC_DOCU_NODE_IDS_HXX
+
+
+
+namespace ary
+{
+namespace doc
+{
+namespace nodetype
+{
+enum E_Ids
+{
+
+ nt_none,
+ nt_OldCppDocu,
+ nt_OldIdlDocu
+
+
+
+
+
+
+
+
+
+};
+} // namespace nodetype
+} // namespace doc
+} // namespace ary
+
+namespace docnt = ::ary::doc::nodetype;
+
+
+
+
+#endif
diff --git a/autodoc/source/inc/estack.hxx b/autodoc/source/inc/estack.hxx
new file mode 100644
index 000000000000..a3972da9739b
--- /dev/null
+++ b/autodoc/source/inc/estack.hxx
@@ -0,0 +1,94 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_ESTACK_HXX
+#define ARY_ESTACK_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <slist>
+ // COMPONENTS
+ // PARAMETERS
+
+
+
+template <class ELEM>
+class EStack : private std::slist<ELEM>
+{
+ private:
+ typedef std::slist<ELEM> base;
+ const base & Base() const { return *this; }
+ base & Base() { return *this; }
+
+ public:
+ typedef ELEM value_type;
+ typedef typename std::slist<ELEM>::size_type size_type;
+
+ // LIFECYCLE
+ EStack() {}
+ EStack(
+ const EStack & i_rStack )
+ : base( (const base &)(i_rStack) ) {}
+ ~EStack() {}
+ // OPERATORS
+ EStack & operator=(
+ const EStack & i_rStack )
+ { base::operator=( i_rStack.Base() );
+ return *this; }
+ bool operator==(
+ const EStack<ELEM> &
+ i_r2 ) const
+ { return std::operator==( Base(), this->i_rStack.Base() ); }
+ bool operator<(
+ const EStack<ELEM> &
+ i_r2 ) const
+ { return std::operator<( Base(), this->i_rStack.Base() ); }
+ // OPERATIONS
+ void push(
+ const value_type & i_rElem )
+ { base::push_front(i_rElem); }
+ void pop() { base::pop_front(); }
+ void erase_all() { while (NOT empty()) pop(); }
+
+ // INQUIRY
+ const value_type & top() const { return base::front(); }
+ size_type size() const { return base::size(); }
+ bool empty() const { return base::empty(); }
+
+ // ACCESS
+ value_type & top() { return base::front(); }
+};
+
+
+
+// IMPLEMENTATION
+
+
+#endif
+
diff --git a/autodoc/source/inc/luxenum.hxx b/autodoc/source/inc/luxenum.hxx
new file mode 100644
index 000000000000..42eb2953dabe
--- /dev/null
+++ b/autodoc/source/inc/luxenum.hxx
@@ -0,0 +1,103 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef UDM_LUXENUM_HXX
+#define UDM_LUXENUM_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+ // COMPONENTS
+ // PARAMETERS
+#include <map>
+#include <algorithm>
+
+
+namespace lux
+{
+
+typedef std::map< intt, String > EnumValueMap;
+
+
+template <class DIFF>
+class Enum // : public Template_Base
+{
+ public:
+ // TYPES
+ typedef Enum< DIFF > self;
+
+ // LIFECYCLE
+ Enum(
+ DIFF i_nValue,
+ const char * i_sText )
+ : nValue(i_nValue) { Values_()[nValue] = i_sText;
+ // Sequence_().insert(
+ // std::lower_bound( Sequence_().begin(), Sequence_().end(), i_nValue ),
+ // i_nValue );
+ }
+ Enum(
+ DIFF i_nValue )
+ : nValue(i_nValue) { ; }
+ Enum(
+ intt i_nValue = 0 )
+ : nValue(i_nValue) { if ( NOT CheckIntt(i_nValue) ) { csv_assert(false); } }
+ Enum(
+ const self & i_rEnum )
+ : nValue(i_rEnum.nValue) {;}
+
+ self & operator=(
+ DIFF i_nValue )
+ { nValue = i_nValue; return *this; }
+ self & operator=(
+ intt i_nValue )
+ { if ( CheckIntt(i_nValue) ) {nValue = DIFF(i_nValue);}
+ else {csv_assert(false);} return *this; }
+ self & operator=(
+ const self & i_rEnum )
+ { nValue = i_rEnum.nValue; return *this; }
+ operator DIFF() const { return DIFF(nValue); }
+
+ DIFF operator()() const { return nValue; }
+ const String & Text() const { return Values_()[nValue]; }
+
+ private:
+ static EnumValueMap &
+ Values_();
+ bool CheckIntt(
+ intt i_nNumber )
+ { return Values_().find(i_nNumber) != Values_().end(); }
+ // DATA
+ intt nValue;
+};
+
+
+
+
+} // namespace lux
+#endif
+
diff --git a/autodoc/source/inc/manip.hxx b/autodoc/source/inc/manip.hxx
new file mode 100644
index 000000000000..9b7ae9fc07c6
--- /dev/null
+++ b/autodoc/source/inc/manip.hxx
@@ -0,0 +1,61 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_MANIP_HXX
+#define ARY_MANIP_HXX
+
+template <class XY >
+class Manipulator
+{
+ public:
+ virtual ~Manipulator() {}
+
+ void operator()(
+ XY & io_r ) const
+ { op_fcall(io_r); }
+ private:
+ virtual void op_fcall(
+ XY & io_r ) const = 0;
+};
+
+template <class XY >
+class Const_Manipulator
+{
+ public:
+ virtual ~Const_Manipulator() {}
+
+ void operator()(
+ const XY & io_r ) const
+ { op_fcall(io_r); }
+ private:
+ virtual void op_fcall(
+ const XY & io_r ) const = 0;
+};
+
+
+#endif
+
diff --git a/autodoc/source/inc/precomp.h b/autodoc/source/inc/precomp.h
new file mode 100644
index 000000000000..8ff526108f60
--- /dev/null
+++ b/autodoc/source/inc/precomp.h
@@ -0,0 +1,66 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef ADC_PRECOMP_H_06071998
+#define ADC_PRECOMP_H_06071998
+
+
+// For en/disabling csv_assertions:
+#ifndef DEBUG
+#define CSV_NO_ASSERTIONS
+#endif
+
+#include <cosv/csv_precomp.h>
+
+#include <vector>
+#include <map>
+#include <set>
+
+
+
+// Shortcuts to access csv::-types:
+using csv::String;
+using csv::StringVector;
+using csv::StreamStr;
+using csv::c_str;
+typedef csv::StreamStrLock StreamLock;
+
+
+
+inline std::ostream &
+Cout() { return std::cout; }
+inline std::ostream &
+Cerr() { return std::cerr; }
+
+inline csv::F_FLUSHING_FUNC
+Endl() { return csv::Endl; }
+inline csv::F_FLUSHING_FUNC
+Flush() { return csv::Flush; }
+
+
+
+
+#endif
diff --git a/autodoc/source/inc/prprpr.hxx b/autodoc/source/inc/prprpr.hxx
new file mode 100644
index 000000000000..842900bb5950
--- /dev/null
+++ b/autodoc/source/inc/prprpr.hxx
@@ -0,0 +1,58 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+
+#ifndef ARY_CPP_PRPRPR_HXX // PRePRocessorPRocessing
+#define ARY_CPP_PRPRPR_HXX
+
+
+
+// Implemented in autodoc/source/parser/cpp/defdescr.cxx .
+
+bool CheckForOperator(
+ bool & o_bStringify,
+ bool & o_bConcatenate,
+ const String & i_sTextItem );
+void Do_bConcatenate(
+ csv::StreamStr & o_rText,
+ bool & io_bConcatenate );
+void Do_bStringify_begin(
+ csv::StreamStr & o_rText,
+ bool i_bStringify );
+void Do_bStringify_end(
+ csv::StreamStr & o_rText,
+ bool & io_bStringify );
+bool HandleOperatorsBeforeTextItem( /// @return true, if text item is done here
+ csv::StreamStr & o_rText,
+ bool & io_bStringify,
+ bool & io_bConcatenate,
+ const String & i_sTextItem );
+
+
+
+
+#endif
diff --git a/autodoc/source/inc/tools/filecoll.hxx b/autodoc/source/inc/tools/filecoll.hxx
new file mode 100644
index 000000000000..75818d1b40eb
--- /dev/null
+++ b/autodoc/source/inc/tools/filecoll.hxx
@@ -0,0 +1,69 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_FILECOLL_HXX
+#define ADC_FILECOLL_HXX
+
+// USED SERVICES
+ // BASE CLASSES
+#include <autodoc/filecoli.hxx>
+ // COMPONENTS
+ // PARAMETERS
+
+
+
+class FileCollector : public autodoc::FileCollector_Ifc
+{
+ public:
+ // LIFECYCLE
+ FileCollector(
+ uintt i_nRoughNrOfFiles = 0 );
+
+ // OPERATIONS
+ virtual uintt AddFilesFrom(
+ const char * i_sRootDir,
+ const char * i_sFilter,
+ E_SearchMode i_eSearchMode );
+ virtual uintt AddFile(
+ const char * i_sFilePath );
+ virtual void EraseAll();
+
+ // INQUIRY
+ virtual const_iterator
+ Begin() const;
+ virtual const_iterator
+ End() const;
+ virtual uintt Size() const;
+
+ private:
+ // DATA
+ StringVector aFoundFiles;
+};
+
+
+#endif
+
diff --git a/autodoc/source/inc/tools/tkpchars.hxx b/autodoc/source/inc/tools/tkpchars.hxx
new file mode 100644
index 000000000000..2ebe0d000e84
--- /dev/null
+++ b/autodoc/source/inc/tools/tkpchars.hxx
@@ -0,0 +1,170 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_TKPCHARS_HXX
+#define ADC_TKPCHARS_HXX
+
+// USED SERVICES
+ // BASE CLASSES
+ // COMPONENTS
+ // PARAMETRS
+#include <adc_cl.hxx>
+#include <stack>
+
+
+
+/** @descr
+
+ dpSource:
+
+ 1||||||||||||||||||||||a||||||||||||b|||c||||||||||||||||||||...
+
+
+ 1 := first character of Sourcecode.
+ a := nLastTokenStart, there starts the last cut token.
+ b := nLastCut, there is a '\0'-char which marks the end of
+ the last cut token. The original character at b is stored
+ in cCharAtLastCut and will replace the '\0'-char, when the
+ next token is cut.
+ c := The current cursor position.
+
+
+ @needs cosv.lib
+
+ @use This class can be used by any parser to get the chars of a
+ text one by one and separate them to tokens.
+**/
+
+class CharacterSource
+{
+ public:
+ // LIFECYCLE
+ CharacterSource();
+ ~CharacterSource();
+
+ // OPERATIONS
+ /** Loads the complete contents of in_rSource into the classes private memory.
+ If in_rSource is a file, it has to be open of course.
+ After loading the text, the CurChar() is set on the begin of the text.
+ **/
+ void LoadText(
+ csv::bstream & io_rSource);
+
+ void InsertTextAtCurPos(
+ const char * i_sText2Insert );
+
+ /// @return CurChar() after moving forward one char.
+ char MoveOn();
+ /** @return
+ The token which starts at the char which was CurChar(), when
+ CutToken() was called the last time - or at the beginning of the text.
+ The token ends by the CurChar() being replaced by a '\0'.
+
+ Value is valid until the next call of CutToken() or ~CharacterSource().
+ **/
+ const char * CutToken();
+
+ // INQUIRY
+ char CurChar() const;
+ /// @return The result of the last CutToken(). Or NULL, if there was none yet.
+ const char * CurToken() const;
+
+ // INQUIRY
+ /// @return true, if
+ bool IsFinished() const;
+
+ private:
+ struct S_SourceState
+ {
+ DYN char * dpSource;
+ intt nSourceSize;
+
+ intt nCurPos;
+ intt nLastCut;
+ intt nLastTokenStart;
+ char cCharAtLastCut;
+
+ S_SourceState(
+ DYN char * dpSource,
+ intt nSourceSize,
+ intt nCurPos,
+ intt nLastCut,
+ intt nLastTokenStart,
+ char cCharAtLastCut );
+ };
+
+ void BeginSource();
+ intt CurPos() const;
+ char MoveOn_OverStack();
+
+ // DATA
+ std::stack< S_SourceState >
+ aSourcesStack;
+
+ DYN char * dpSource;
+ intt nSourceSize;
+
+ intt nCurPos;
+ intt nLastCut;
+ intt nLastTokenStart;
+ char cCharAtLastCut;
+};
+
+
+inline char
+CharacterSource::MoveOn()
+ {
+if (DEBUG_ShowText())
+{
+ Cerr() << char(dpSource[nCurPos+1]) << Flush();
+}
+ if ( nCurPos < nSourceSize-1 )
+ return dpSource[++nCurPos];
+ else if ( aSourcesStack.size() > 0 )
+ return MoveOn_OverStack();
+ else
+ return dpSource[nCurPos = nSourceSize];
+ }
+inline char
+CharacterSource::CurChar() const
+ { return nCurPos != nLastCut ? dpSource[nCurPos] : cCharAtLastCut; }
+inline const char *
+CharacterSource::CurToken() const
+ { return &dpSource[nLastTokenStart]; }
+inline bool
+CharacterSource::IsFinished() const
+ { return nCurPos >= nSourceSize; }
+inline intt
+CharacterSource::CurPos() const
+ { return nCurPos; }
+
+
+
+
+#endif
+
+
diff --git a/autodoc/source/mkinc/fullcpp.mk b/autodoc/source/mkinc/fullcpp.mk
new file mode 100644
index 000000000000..75b251643180
--- /dev/null
+++ b/autodoc/source/mkinc/fullcpp.mk
@@ -0,0 +1,54 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+
+
+# --- Settings -----------------------------------------------------
+# Has to be included AFTER settings.mk !
+
+
+# RTTI
+.IF "$(GUI)"=="WNT"
+CFLAGS+= -GR
+.ENDIF
+.IF "$(OS)"=="LINUX" || "$(OS)"=="FREEBSD" || "$(OS)"=="NETBSD" || $(COM) == "GCC"
+CFLAGSCXX+= -frtti
+.ENDIF
+
+
+
+# Precompiled Headers
+.IF "$(NP_LOCALBUILD)"!="" && "$(GUI)"=="WNT"
+
+PCH_NAME=autodoc
+.IF "$(debug)"==""
+CFLAGS+= -YX"precomp.h" -Fp$(PRJ)$/$(INPATH)$/misc$/$(PCH_NAME).pch
+.ELSE
+CFLAGS+= -YX"precomp.h" -Fp$(PRJ)$/$(INPATH)$/misc$/$(PCH_NAME).pcd
+.ENDIF
+
+.ENDIF # "$(NP_LOCALBUILD)"!="" && "$(GUI)"=="WNT"
diff --git a/autodoc/source/parser/adoc/a_rdocu.cxx b/autodoc/source/parser/adoc/a_rdocu.cxx
new file mode 100644
index 000000000000..9d225bb0ec15
--- /dev/null
+++ b/autodoc/source/parser/adoc/a_rdocu.cxx
@@ -0,0 +1,90 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <adoc/a_rdocu.hxx>
+
+
+// NOT FULLY DECLARED SERVICES
+#include <adoc/docu_pe.hxx>
+#include <adoc/adoc_tok.hxx>
+#include <ary/doc/d_oldcppdocu.hxx>
+#include <doc_deal.hxx>
+
+
+
+namespace adoc
+{
+
+
+DocuExplorer::DocuExplorer()
+ : pDocuDistributor(0),
+ pPE(new Adoc_PE),
+ bIsPassedFirstDocu(false)
+{
+}
+
+DocuExplorer::~DocuExplorer()
+{
+}
+
+void
+DocuExplorer::StartNewFile( DocuDealer & o_rDocuDistributor )
+{
+ pDocuDistributor = &o_rDocuDistributor;
+ bIsPassedFirstDocu = false;
+}
+
+
+void
+DocuExplorer::Process_Token( DYN adoc::Token & let_drToken )
+{
+ csv_assert(pDocuDistributor != 0);
+
+ let_drToken.Trigger(*pPE);
+ if ( pPE->IsComplete() )
+ {
+ ary::doc::OldCppDocu *
+ pDocu = pPE->ReleaseJustParsedDocu();
+ if ( pDocu != 0 )
+ {
+ if (bIsPassedFirstDocu)
+ pDocuDistributor->TakeDocu( *pDocu );
+ else
+ {
+ delete pDocu;
+ bIsPassedFirstDocu = true;
+ }
+ }
+ }
+
+ delete &let_drToken;
+}
+
+
+} // namespace adoc
+
diff --git a/autodoc/source/parser/adoc/adoc_tok.cxx b/autodoc/source/parser/adoc/adoc_tok.cxx
new file mode 100644
index 000000000000..37b3e9241fa4
--- /dev/null
+++ b/autodoc/source/parser/adoc/adoc_tok.cxx
@@ -0,0 +1,47 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <adoc/adoc_tok.hxx>
+
+
+// NOT FULLY DEFINED SERVICES
+#include <adoc/atokdeal.hxx>
+#include <../cpp/c_dealer.hxx>
+
+
+namespace adoc {
+
+void
+Token::DealOut( ::TokenDealer & o_rDealer )
+{
+ o_rDealer.AsDistributor()->Deal_AdcDocu(*this);
+}
+
+
+} // namespace adoc
+
diff --git a/autodoc/source/parser/adoc/cx_a_std.cxx b/autodoc/source/parser/adoc/cx_a_std.cxx
new file mode 100644
index 000000000000..9bdb10be5f04
--- /dev/null
+++ b/autodoc/source/parser/adoc/cx_a_std.cxx
@@ -0,0 +1,516 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <adoc/cx_a_std.hxx>
+
+
+// NOT FULLY DEFINED SERVICES
+#include <adoc/cx_a_sub.hxx>
+#include <x_parse.hxx>
+#include <tools/tkpchars.hxx>
+#include <adoc/tk_attag.hxx>
+#include <adoc/tk_docw.hxx>
+#include <tokens/tokdeal.hxx>
+
+
+
+namespace adoc {
+
+
+const intt C_nStatusSize = 128;
+const intt C_nCppInitialNrOfStati = 400;
+
+
+const uintt nF_fin_Error = 1;
+const uintt nF_fin_Ignore = 2;
+const uintt nF_fin_LineStart = 3;
+const uintt nF_fin_Eol = 4;
+const uintt nF_fin_Eof = 5;
+const uintt nF_fin_AnyWord = 6;
+const uintt nF_fin_Whitespace = 7;
+
+const uintt nF_goto_AtTag = 20;
+const uintt nF_goto_CheckStar = 21;
+
+DYN TextToken * TCF_DocWord(const char * text) { return new Tok_DocWord(text); }
+
+DYN TextToken * TCF_atstd_ATT(const char * ) { return new Tok_at_std(ary::info::atid_ATT); }
+DYN TextToken * TCF_atstd_author(const char * ) { return new Tok_at_std(ary::info::atid_author); }
+DYN TextToken * TCF_atstd_change(const char * ) { return new Tok_at_std(ary::info::atid_change); }
+DYN TextToken * TCF_atstd_collab(const char * ) { return new Tok_at_std(ary::info::atid_collab); }
+DYN TextToken * TCF_atstd_contact(const char * ) { return new Tok_at_std(ary::info::atid_contact); }
+DYN TextToken * TCF_atstd_copyright(const char * ) { return new Tok_at_std(ary::info::atid_copyright); }
+DYN TextToken * TCF_atstd_descr(const char * ) { return new Tok_at_std(ary::info::atid_descr); }
+DYN TextToken * TCF_atstd_docdate(const char * ) { return new Tok_at_std(ary::info::atid_docdate); }
+DYN TextToken * TCF_atstd_derive(const char * ) { return new Tok_at_std(ary::info::atid_derive); }
+DYN TextToken * TCF_atstd_instance(const char * ) { return new Tok_at_std(ary::info::atid_instance); }
+DYN TextToken * TCF_atstd_life(const char * ) { return new Tok_at_std(ary::info::atid_life); }
+DYN TextToken * TCF_atstd_multi(const char * ) { return new Tok_at_std(ary::info::atid_multi); }
+DYN TextToken * TCF_atstd_onerror(const char * ) { return new Tok_at_std(ary::info::atid_onerror); }
+DYN TextToken * TCF_atstd_persist(const char * ) { return new Tok_at_std(ary::info::atid_persist); }
+DYN TextToken * TCF_atstd_postcond(const char * ) { return new Tok_at_std(ary::info::atid_postcond); }
+DYN TextToken * TCF_atstd_precond(const char * ) { return new Tok_at_std(ary::info::atid_precond); }
+DYN TextToken * TCF_atstd_responsibility(const char * ) { return new Tok_at_std(ary::info::atid_resp); }
+DYN TextToken * TCF_atstd_return(const char * ) { return new Tok_at_std(ary::info::atid_return); }
+DYN TextToken * TCF_atstd_short(const char * ) { return new Tok_at_std(ary::info::atid_short); }
+DYN TextToken * TCF_atstd_todo(const char * ) { return new Tok_at_std(ary::info::atid_todo); }
+DYN TextToken * TCF_atstd_version(const char * ) { return new Tok_at_std(ary::info::atid_version); }
+
+DYN TextToken * TCF_at_base(const char *) { return new Tok_at_base; }
+DYN TextToken * TCF_at_exception(const char *) { return new Tok_at_exception; }
+DYN TextToken * TCF_at_impl(const char *) { return new Tok_at_impl; }
+DYN TextToken * TCF_at_interface(const char *) { return new Tok_at_interface; }
+DYN TextToken * TCF_at_key(const char *) { return new Tok_at_key; }
+DYN TextToken * TCF_at_param(const char *) { return new Tok_at_param; }
+DYN TextToken * TCF_at_see(const char *) { return new Tok_at_see; }
+DYN TextToken * TCF_at_template(const char *) { return new Tok_at_template; }
+DYN TextToken * TCF_at_internal(const char *) { return new Tok_at_internal; }
+DYN TextToken * TCF_at_obsolete(const char *) { return new Tok_at_obsolete; }
+DYN TextToken * TCF_at_module(const char *) { return new Tok_at_module; }
+DYN TextToken * TCF_at_file(const char *) { return new Tok_at_file; }
+DYN TextToken * TCF_at_gloss(const char *) { return new Tok_at_gloss; }
+DYN TextToken * TCF_at_global(const char *) { return new Tok_at_global; }
+DYN TextToken * TCF_at_include(const char *) { return new Tok_at_include; }
+DYN TextToken * TCF_at_label(const char *) { return new Tok_at_label; }
+DYN TextToken * TCF_at_since(const char *) { return new Tok_at_since; }
+DYN TextToken * TCF_at_HTML(const char *) { return new Tok_at_HTML; }
+DYN TextToken * TCF_at_NOHTML(const char *) { return new Tok_at_NOHTML; }
+DYN TextToken * TCF_Whitespace(const char * i_sText);
+DYN TextToken * TCF_EoDocu(const char *) { return new Tok_EoDocu; }
+DYN TextToken * TCF_EoLine(const char *) { return new Tok_Eol; }
+DYN TextToken * TCF_Eof(const char *) { return new Tok_Eof; }
+
+
+
+
+Context_AdocStd::Context_AdocStd()
+ : aStateMachine(C_nStatusSize, C_nCppInitialNrOfStati),
+ pDealer(0),
+ pParentContext(0),
+ pFollowUpContext(0),
+ pCx_LineStart(0),
+ pCx_CheckStar(0),
+ pCx_AtTagCompletion(0),
+ pNewToken(0),
+ bIsMultiline(false)
+{
+ pCx_LineStart = new Cx_LineStart(*this);
+ pCx_CheckStar = new Cx_CheckStar(*this);
+ pCx_AtTagCompletion = new Cx_AtTagCompletion(*this);
+
+ SetupStateMachine();
+}
+
+void
+Context_AdocStd::SetParentContext( TkpContext & io_rParentContext,
+ const char * )
+{
+ pFollowUpContext = pParentContext = &io_rParentContext;
+ pCx_CheckStar->Set_End_FollowUpContext(io_rParentContext);
+}
+
+Context_AdocStd::~Context_AdocStd()
+{
+}
+
+void
+Context_AdocStd::AssignDealer( TokenDealer & o_rDealer )
+{
+ pDealer = &o_rDealer;
+ pCx_LineStart->AssignDealer(o_rDealer);
+ pCx_CheckStar->AssignDealer(o_rDealer);
+ pCx_AtTagCompletion->AssignDealer(o_rDealer);
+}
+
+void
+Context_AdocStd::ReadCharChain( CharacterSource & io_rText )
+{
+ csv_assert(pParentContext != 0);
+ pNewToken = 0;
+
+ TextToken::F_CRTOK fTokenCreateFunction = 0;
+ StmBoundsStatus & rBound = aStateMachine.GetCharChain(fTokenCreateFunction, io_rText);
+
+ // !!!
+ // The order of the next two lines is essential, because
+ // pFollowUpContext may be changed by PerformStatusFunction() also,
+ // which then MUST override the previous assignment.
+ pFollowUpContext = rBound.FollowUpContext();
+ PerformStatusFunction(rBound.StatusFunctionNr(), fTokenCreateFunction, io_rText);
+}
+
+bool
+Context_AdocStd::PassNewToken()
+{
+ if (pNewToken)
+ {
+ pNewToken.Release()->DealOut(*pDealer);
+ return true;
+ }
+ return false;
+}
+
+TkpContext &
+Context_AdocStd::FollowUpContext()
+{
+ csv_assert(pFollowUpContext != 0);
+ return *pFollowUpContext;
+}
+
+void
+Context_AdocStd::PerformStatusFunction( uintt i_nStatusSignal,
+ F_CRTOK i_fTokenCreateFunction,
+ CharacterSource & io_rText )
+{
+ switch (i_nStatusSignal)
+ {
+ case nF_fin_Error:
+ {
+ char cCC = io_rText.CurChar();
+ String sChar( &cCC, 1 );
+ throw X_Parser(X_Parser::x_InvalidChar, sChar, String ::Null_(), 0);
+ } // no break, because of throw
+ case nF_fin_Ignore:
+ io_rText.CutToken();
+ pNewToken = 0;
+ break;
+ case nF_fin_LineStart:
+ csv_assert(i_fTokenCreateFunction != 0);
+ pNewToken = (*i_fTokenCreateFunction)(io_rText.CutToken());
+ break;
+ case nF_fin_Eol:
+ io_rText.CutToken();
+ pDealer->Deal_Eol();
+ if ( bIsMultiline )
+ {
+ pNewToken = TCF_EoLine(0);
+ pFollowUpContext = pCx_LineStart.Ptr();
+ }
+ else
+ {
+ pNewToken = TCF_EoDocu(0);
+ pFollowUpContext = pParentContext;
+ }
+ break;
+ case nF_fin_Eof:
+ pNewToken = TCF_Eof(0);
+ break;
+ case nF_fin_AnyWord:
+ if (i_fTokenCreateFunction != 0)
+ pNewToken = (*i_fTokenCreateFunction)(io_rText.CutToken());
+ else
+ pNewToken = TCF_DocWord(io_rText.CutToken());
+ break;
+ case nF_fin_Whitespace:
+ pNewToken = TCF_Whitespace(io_rText.CutToken());
+ break;
+ case nF_goto_AtTag:
+ pNewToken = 0;
+ pCx_AtTagCompletion->SetCurToken(i_fTokenCreateFunction);
+ break;
+ case nF_goto_CheckStar:
+ pNewToken = 0;
+ pCx_CheckStar->SetCanBeEnd( bIsMultiline );
+ break;
+ default:
+ {
+ char cCC = io_rText.CurChar();
+ String sChar( &cCC, 1 );
+ throw X_Parser(X_Parser::x_InvalidChar, sChar, String::Null_(), 0);
+ }
+ } // end switch (i_nStatusSignal)
+}
+
+void
+Context_AdocStd::SetupStateMachine()
+{
+ // Besondere Array-Stati (kein Tokenabschluss oder Kontextwechsel):
+// const INT16 bas = 0; // Base-Status
+ const INT16 wht = 1; // Whitespace-Status
+ const INT16 awd = 2; // Any-Word-Read-Status
+
+ // Kontextwechsel-Stati:
+ const INT16 goto_CheckStar = 3;
+ const INT16 goto_AtTag = 4;
+
+ // Tokenfinish-Stati:
+ const INT16 finError = 5;
+// const INT16 finIgnore = 6;
+ const INT16 finEol = 7;
+ const INT16 finEof = 8;
+ const INT16 finAnyWord = 9;
+ const INT16 finWhitespace = 10;
+
+ // Konstanten zur Benutzung in der Tabelle:
+ const INT16 fof = finEof;
+ const INT16 err = finError;
+ const INT16 faw = finAnyWord;
+// const INT16 fig = finIgnore;
+ const INT16 fwh = finWhitespace;
+
+ /// The '0's will be replaced by calls of AddToken().
+
+ const INT16 A_nTopStatus[C_nStatusSize] =
+ // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+ {fof,err,err,err,err,err,err,err,err,wht, 0,wht,wht, 0,err,err,
+ err,err,err,err,err,err,err,err,err,err,fof,err,err,err,err,err, // ... 31
+ wht,awd,awd,awd,awd,awd,awd,awd,awd,awd, 0,awd,awd,awd,awd,awd,
+ awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd, // ... 63
+ 0,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,
+ awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd, // ... 95
+ awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,
+ awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd // ... 127
+ };
+
+ const INT16 A_nWhitespaceStatus[C_nStatusSize] =
+ // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+ {fof,err,err,err,err,err,err,err,err,wht,fwh,wht,wht,fwh,err,err,
+ err,err,err,err,err,err,err,err,err,err,fof,err,err,err,err,err, // ... 31
+ wht,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,
+ fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh, // ... 63
+ fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,
+ fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh, // ... 95
+ fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,
+ fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh // ... 127
+ };
+
+ const INT16 A_nWordStatus[C_nStatusSize] =
+ // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+ {faw,err,err,err,err,err,err,err,err,faw,faw,faw,faw,faw,err,err,
+ err,err,err,err,err,err,err,err,err,err,faw,err,err,err,err,err, // ... 31
+ faw,awd,awd,awd,awd,awd,awd,awd,awd,awd,faw,awd,awd,awd,awd,awd,
+ awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd, // ... 63
+ awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,
+ awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd, // ... 95
+ awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,
+ awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd // ... 127
+ };
+
+ const INT16 A_nAtTagDefStatus[C_nStatusSize] =
+ // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+ {faw,err,err,err,err,err,err,err,err,faw,faw,faw,faw,faw,err,err,
+ err,err,err,err,err,err,err,err,err,err,faw,err,err,err,err,err, // ... 31
+ faw,awd,awd,awd,awd,awd,awd,awd,awd,awd,faw,awd,awd,awd,awd,awd,
+ awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd, // ... 63
+ awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,
+ awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd, // ... 95
+ awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,
+ awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd // ... 127
+ };
+
+ const INT16 A_nPunctDefStatus[C_nStatusSize] =
+ // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+ {err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,
+ err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,err, // 16 ...
+ err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,
+ err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,err, // 48 ...
+ err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,
+ err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,err, // 80 ...
+ err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,
+ err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,err // 112 ...
+ };
+
+ DYN StmArrayStatus * dpStatusTop
+ = new StmArrayStatus( C_nStatusSize, A_nTopStatus, 0, true);
+ DYN StmArrayStatus * dpStatusWhite
+ = new StmArrayStatus( C_nStatusSize, A_nWhitespaceStatus, 0, true);
+ DYN StmArrayStatus * dpStatusWord
+ = new StmArrayStatus( C_nStatusSize, A_nWordStatus, TCF_DocWord, true);
+
+ DYN StmBoundsStatus * dpBst_goto_CheckStar
+ = new StmBoundsStatus( *this, *pCx_CheckStar, nF_goto_CheckStar, true );
+ DYN StmBoundsStatus * dpBst_goto_AtTag
+ = new StmBoundsStatus( *this, *pCx_AtTagCompletion, nF_goto_AtTag, true );
+
+ DYN StmBoundsStatus * dpBst_finError
+ = new StmBoundsStatus( *this, TkpContext::Null_(), nF_fin_Error, true );
+ DYN StmBoundsStatus * dpBst_finIgnore
+ = new StmBoundsStatus( *this, *this, nF_fin_Ignore, true);
+ DYN StmBoundsStatus * dpBst_finEol
+ = new StmBoundsStatus( *this, *pCx_LineStart, nF_fin_Eol, false);
+ DYN StmBoundsStatus * dpBst_finEof
+ = new StmBoundsStatus( *this, TkpContext::Null_(), nF_fin_Eof, false);
+ DYN StmBoundsStatus * dpBst_finAnyWord
+ = new StmBoundsStatus( *this, *this, nF_fin_AnyWord, true);
+ DYN StmBoundsStatus * dpBst_finWhitespace
+ = new StmBoundsStatus( *this, *this, nF_fin_Whitespace, true);
+
+ // dpMain aufbauen:
+ aStateMachine.AddStatus(dpStatusTop);
+ aStateMachine.AddStatus(dpStatusWhite);
+ aStateMachine.AddStatus(dpStatusWord);
+
+ aStateMachine.AddStatus(dpBst_goto_CheckStar);
+ aStateMachine.AddStatus(dpBst_goto_AtTag);
+
+ aStateMachine.AddStatus(dpBst_finError);
+ aStateMachine.AddStatus(dpBst_finIgnore);
+ aStateMachine.AddStatus(dpBst_finEol);
+ aStateMachine.AddStatus(dpBst_finEof);
+ aStateMachine.AddStatus(dpBst_finAnyWord);
+ aStateMachine.AddStatus(dpBst_finWhitespace);
+
+ aStateMachine.AddToken( "*", 0, A_nPunctDefStatus, goto_CheckStar );
+ aStateMachine.AddToken( "@ATT", TCF_atstd_ATT, A_nAtTagDefStatus, goto_AtTag );
+ aStateMachine.AddToken( "@att", TCF_atstd_ATT, A_nAtTagDefStatus, goto_AtTag );
+ aStateMachine.AddToken( "@ATTENTION",
+ TCF_atstd_ATT, A_nAtTagDefStatus, goto_AtTag );
+ aStateMachine.AddToken( "@attention",
+ TCF_atstd_ATT, A_nAtTagDefStatus, goto_AtTag );
+ aStateMachine.AddToken( "@author", TCF_atstd_author, A_nAtTagDefStatus, goto_AtTag );
+ aStateMachine.AddToken( "@change", TCF_atstd_change, A_nAtTagDefStatus, goto_AtTag );
+ aStateMachine.AddToken( "@collab", TCF_atstd_collab, A_nAtTagDefStatus, goto_AtTag );
+ aStateMachine.AddToken( "@collaborator",
+ TCF_atstd_collab, A_nAtTagDefStatus, goto_AtTag );
+ aStateMachine.AddToken( "@contact", TCF_atstd_contact, A_nAtTagDefStatus, goto_AtTag );
+ aStateMachine.AddToken( "@copyright",TCF_atstd_copyright, A_nAtTagDefStatus, goto_AtTag );
+ aStateMachine.AddToken( "@descr", TCF_atstd_descr, A_nAtTagDefStatus, goto_AtTag );
+ aStateMachine.AddToken( "@docdate", TCF_atstd_docdate, A_nAtTagDefStatus, goto_AtTag );
+ aStateMachine.AddToken( "@derive", TCF_atstd_derive, A_nAtTagDefStatus, goto_AtTag );
+ aStateMachine.AddToken( "@instance",TCF_atstd_instance, A_nAtTagDefStatus, goto_AtTag );
+ aStateMachine.AddToken( "@life", TCF_atstd_life, A_nAtTagDefStatus, goto_AtTag );
+ aStateMachine.AddToken( "@lifecycle",
+ TCF_atstd_life, A_nAtTagDefStatus, goto_AtTag );
+ aStateMachine.AddToken( "@multi", TCF_atstd_multi, A_nAtTagDefStatus, goto_AtTag );
+ aStateMachine.AddToken( "@multiplicity",
+ TCF_atstd_multi, A_nAtTagDefStatus, goto_AtTag );
+ aStateMachine.AddToken( "@onerror", TCF_atstd_onerror, A_nAtTagDefStatus, goto_AtTag );
+ aStateMachine.AddToken( "@persist", TCF_atstd_persist, A_nAtTagDefStatus, goto_AtTag );
+ aStateMachine.AddToken( "@postcond",TCF_atstd_postcond,A_nAtTagDefStatus, goto_AtTag );
+ aStateMachine.AddToken( "@precond", TCF_atstd_precond, A_nAtTagDefStatus, goto_AtTag );
+ aStateMachine.AddToken( "@resp", TCF_atstd_responsibility,
+ A_nAtTagDefStatus, goto_AtTag );
+ aStateMachine.AddToken( "@responsibility",
+ TCF_atstd_return, A_nAtTagDefStatus, goto_AtTag );
+ aStateMachine.AddToken( "@return", TCF_atstd_return, A_nAtTagDefStatus, goto_AtTag );
+ aStateMachine.AddToken( "@short", TCF_atstd_short, A_nAtTagDefStatus, goto_AtTag );
+ aStateMachine.AddToken( "@todo", TCF_atstd_todo, A_nAtTagDefStatus, goto_AtTag );
+ aStateMachine.AddToken( "@version", TCF_atstd_version, A_nAtTagDefStatus, goto_AtTag );
+
+ aStateMachine.AddToken( "@base", TCF_at_base, A_nAtTagDefStatus, goto_AtTag );
+ aStateMachine.AddToken( "@exception",TCF_at_exception, A_nAtTagDefStatus, goto_AtTag );
+ aStateMachine.AddToken( "@impl", TCF_at_impl, A_nAtTagDefStatus, goto_AtTag );
+ aStateMachine.AddToken( "@key", TCF_at_key, A_nAtTagDefStatus, goto_AtTag );
+ aStateMachine.AddToken( "@param", TCF_at_param, A_nAtTagDefStatus, goto_AtTag );
+ aStateMachine.AddToken( "@see", TCF_at_see, A_nAtTagDefStatus, goto_AtTag );
+ aStateMachine.AddToken( "@seealso", TCF_at_see, A_nAtTagDefStatus, goto_AtTag );
+ aStateMachine.AddToken( "@since", TCF_at_since, A_nAtTagDefStatus, goto_AtTag );
+ aStateMachine.AddToken( "@tpl", TCF_at_template, A_nAtTagDefStatus, goto_AtTag );
+ aStateMachine.AddToken( "@tplparam",
+ TCF_at_template, A_nAtTagDefStatus, goto_AtTag );
+
+ aStateMachine.AddToken( "@interface",TCF_at_interface, A_nAtTagDefStatus, goto_AtTag );
+ aStateMachine.AddToken( "@internal",TCF_at_internal, A_nAtTagDefStatus, goto_AtTag );
+ aStateMachine.AddToken( "@obsolete",TCF_at_obsolete, A_nAtTagDefStatus, goto_AtTag );
+ aStateMachine.AddToken( "@deprecated",TCF_at_obsolete, A_nAtTagDefStatus, goto_AtTag );
+
+ aStateMachine.AddToken( "@module", TCF_at_module, A_nAtTagDefStatus, goto_AtTag );
+ aStateMachine.AddToken( "@file", TCF_at_file, A_nAtTagDefStatus, goto_AtTag );
+ aStateMachine.AddToken( "@gloss", TCF_at_gloss, A_nAtTagDefStatus, goto_AtTag );
+ aStateMachine.AddToken( "@global#", TCF_at_global, A_nAtTagDefStatus, goto_AtTag );
+ aStateMachine.AddToken( "@include#",TCF_at_include, A_nAtTagDefStatus, goto_AtTag );
+ aStateMachine.AddToken( "@#", TCF_at_label, A_nAtTagDefStatus, goto_AtTag );
+
+ aStateMachine.AddToken( "@HTML", TCF_at_HTML, A_nAtTagDefStatus, goto_AtTag );
+ aStateMachine.AddToken( "@NOHTML", TCF_at_NOHTML, A_nAtTagDefStatus, goto_AtTag );
+
+ aStateMachine.AddToken( "\r\n", 0, A_nPunctDefStatus, finEol );
+ aStateMachine.AddToken( "\n", 0, A_nPunctDefStatus, finEol );
+ aStateMachine.AddToken( "\r", 0, A_nPunctDefStatus, finEol );
+};
+
+void
+Context_AdocStd::SetMode_IsMultiLine( bool i_bTrue )
+{
+ bIsMultiline = i_bTrue;
+}
+
+DYN TextToken *
+TCF_Whitespace(const char * i_sText)
+{
+ UINT8 nSize = static_cast<UINT8>(strlen(i_sText));
+ for ( const char * pTab = strchr(i_sText,'\t');
+ pTab != 0;
+ pTab = strchr(pTab+1,'\t') )
+ {
+ nSize += 3;
+ }
+
+ return new Tok_Whitespace(nSize);
+}
+
+
+} // namespace adoc
+
+
+/*
+@ATT[ENTION]
+@author
+@change[s]
+@collab[orators]
+@contact
+@copyright
+@descr
+@devstat[e]
+@docdate
+@derive
+@instance
+@life[cycle]
+@multi[plicity]
+@onerror
+@persist[ence]
+@postcond
+@precond
+@return
+@short
+@todo
+
+@module
+@file
+@gloss[ary]
+
+
+@base <BasisklassenName>
+@exception <ExceptionName>
+@impl[ements] <IDL-Construct>
+@key[words]|[s]
+@param <FunctionParameterName> [<Range of valid values>]
+@see[also]
+@templ[ate] <FormalTemplateParameterName>
+
+@internal
+@obsolete
+
+@#<Label>
+
+@global#<Label> Global comment.
+@include#<Label>
+
+
+*/
+
diff --git a/autodoc/source/parser/adoc/cx_a_sub.cxx b/autodoc/source/parser/adoc/cx_a_sub.cxx
new file mode 100644
index 000000000000..0fdec622b294
--- /dev/null
+++ b/autodoc/source/parser/adoc/cx_a_sub.cxx
@@ -0,0 +1,182 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <adoc/cx_a_sub.hxx>
+
+
+// NOT FULLY DEFINED SERVICES
+#include <tokens/parseinc.hxx>
+#include <x_parse.hxx>
+#include <adoc/tk_docw.hxx>
+
+
+namespace adoc {
+
+//************************ Cx_LineStart ************************//
+
+Cx_LineStart::Cx_LineStart( TkpContext & i_rFollowUpContext )
+ : pDealer(0),
+ pFollowUpContext(&i_rFollowUpContext)
+{
+}
+
+void
+Cx_LineStart::ReadCharChain( CharacterSource & io_rText )
+{
+ uintt nCount = 0;
+ for ( char cNext = io_rText.CurChar(); cNext == 32 OR cNext == 9; cNext = io_rText.MoveOn() )
+ {
+ if (cNext == 32)
+ nCount++;
+ else if (cNext == 9)
+ nCount += 4;
+ }
+ io_rText.CutToken();
+
+ if (nCount < 50)
+ pNewToken = new Tok_LineStart(UINT8(nCount));
+ else
+ pNewToken = new Tok_LineStart(0);
+}
+
+bool
+Cx_LineStart::PassNewToken()
+{
+ if (pNewToken)
+ {
+ pNewToken.Release()->DealOut(*pDealer);
+ return true;
+ }
+ return false;
+}
+
+TkpContext &
+Cx_LineStart::FollowUpContext()
+{
+ return *pFollowUpContext;
+}
+
+
+//************************ Cx_CheckStar ************************//
+
+Cx_CheckStar::Cx_CheckStar( TkpContext & i_rFollowUpContext )
+ : pDealer(0),
+ pFollowUpContext(&i_rFollowUpContext),
+ pEnd_FollowUpContext(0),
+ bCanBeEnd(false),
+ bEndTokenFound(false)
+{
+}
+
+
+void
+Cx_CheckStar::ReadCharChain( CharacterSource & io_rText )
+{
+ bEndTokenFound = false;
+ if (bCanBeEnd)
+ {
+ char cNext = jumpOver(io_rText,'*');
+ if ( NULCH == cNext )
+ throw X_Parser(X_Parser::x_UnexpectedEOF, "", String::Null_(), 0);
+ if (cNext == '/')
+ {
+ io_rText.MoveOn();
+ pNewToken = new Tok_EoDocu;
+ bEndTokenFound = true;
+ }
+ else
+ {
+ pNewToken = new Tok_DocWord(io_rText.CutToken());
+ }
+ }
+ else
+ {
+ jumpToWhite(io_rText);
+ pNewToken = new Tok_DocWord(io_rText.CutToken());
+ }
+}
+
+bool
+Cx_CheckStar::PassNewToken()
+{
+ if (pNewToken)
+ {
+ pNewToken.Release()->DealOut(*pDealer);
+ return true;
+ }
+ return false;
+}
+
+TkpContext &
+Cx_CheckStar::FollowUpContext()
+{
+ if (bEndTokenFound)
+ return *pEnd_FollowUpContext;
+ else
+ return *pFollowUpContext;
+}
+
+
+//************************ Cx_AtTagCompletion ************************//
+
+Cx_AtTagCompletion::Cx_AtTagCompletion( TkpContext & i_rFollowUpContext )
+ : pDealer(0),
+ pFollowUpContext(&i_rFollowUpContext)
+{
+}
+
+void
+Cx_AtTagCompletion::ReadCharChain( CharacterSource & io_rText )
+{
+ jumpToWhite(io_rText);
+ csv_assert(fCur_TokenCreateFunction != 0);
+ pNewToken = (*fCur_TokenCreateFunction)(io_rText.CutToken());
+}
+
+bool
+Cx_AtTagCompletion::PassNewToken()
+{
+ if (pNewToken)
+ {
+ pNewToken.Release()->DealOut(*pDealer);
+ return true;
+ }
+ return false;
+}
+
+TkpContext &
+Cx_AtTagCompletion::FollowUpContext()
+{
+ return *pFollowUpContext;
+}
+
+
+
+
+} // namespace adoc
+
diff --git a/autodoc/source/parser/adoc/docu_pe.cxx b/autodoc/source/parser/adoc/docu_pe.cxx
new file mode 100644
index 000000000000..963a36cd6b14
--- /dev/null
+++ b/autodoc/source/parser/adoc/docu_pe.cxx
@@ -0,0 +1,403 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <adoc/docu_pe.hxx>
+
+
+// NOT FULLY DEFINED SERVICES
+#include <ary/doc/d_oldcppdocu.hxx>
+#include <ary/info/ci_attag.hxx>
+#include <ary/info/ci_text.hxx>
+#include <adoc/adoc_tok.hxx>
+#include <adoc/tk_attag.hxx>
+#include <adoc/tk_docw.hxx>
+
+
+namespace adoc
+{
+
+
+inline bool
+Adoc_PE::UsesHtmlInDocuText()
+{
+ return bUsesHtmlInDocuText;
+}
+
+
+
+
+Adoc_PE::Adoc_PE()
+ : pCurDocu(0),
+ pCurAtTag(0),
+ nLineCountInDocu(0),
+ nCurSpecialMeaningTokens(0),
+ nCurSubtractFromLineStart(0),
+ eCurTagState(ts_new),
+ eDocuState(ds_wait_for_short),
+ bIsComplete(false),
+ bUsesHtmlInDocuText(false)
+{
+}
+
+Adoc_PE::~Adoc_PE()
+{
+}
+
+void
+Adoc_PE::Hdl_at_std( const Tok_at_std & i_rTok )
+{
+ InstallAtTag(
+ CurDocu().Create_StdTag(i_rTok.Id()) );
+}
+
+void
+Adoc_PE::Hdl_at_base( const Tok_at_base & )
+{
+ InstallAtTag(
+ CurDocu().CheckIn_BaseTag() );
+}
+
+void
+Adoc_PE::Hdl_at_exception( const Tok_at_exception & )
+{
+ InstallAtTag(
+ CurDocu().CheckIn_ExceptionTag() );
+}
+
+void
+Adoc_PE::Hdl_at_impl( const Tok_at_impl & )
+{
+ InstallAtTag(
+ CurDocu().Create_ImplementsTag() );
+}
+
+void
+Adoc_PE::Hdl_at_key( const Tok_at_key & )
+{
+ InstallAtTag(
+ CurDocu().Create_KeywordTag() );
+}
+
+void
+Adoc_PE::Hdl_at_param( const Tok_at_param & )
+{
+ InstallAtTag(
+ CurDocu().CheckIn_ParameterTag() );
+}
+
+void
+Adoc_PE::Hdl_at_see( const Tok_at_see & )
+{
+ InstallAtTag(
+ CurDocu().CheckIn_SeeTag() );
+}
+
+void
+Adoc_PE::Hdl_at_template( const Tok_at_template & )
+{
+ InstallAtTag(
+ CurDocu().CheckIn_TemplateTag() );
+}
+
+void
+Adoc_PE::Hdl_at_interface( const Tok_at_interface & )
+{
+ CurDocu().Set_Interface();
+}
+
+void
+Adoc_PE::Hdl_at_internal( const Tok_at_internal & )
+{
+ CurDocu().Set_Internal();
+}
+
+void
+Adoc_PE::Hdl_at_obsolete( const Tok_at_obsolete & )
+{
+ CurDocu().Set_Obsolete();
+}
+
+void
+Adoc_PE::Hdl_at_module( const Tok_at_module & )
+{
+ // KORR_FUTURE
+
+// pCurAtTag = CurDocu().Assign2_ModuleTag();
+// nCurSpecialMeaningTokens = pCurAtTag->NrOfSpecialMeaningTokens();
+}
+
+void
+Adoc_PE::Hdl_at_file( const Tok_at_file & )
+{
+ // KORR_FUTURE
+
+// pCurAtTag = CurDocu().Assign2_FileTag();
+// nCurSpecialMeaningTokens = pCurAtTag->NrOfSpecialMeaningTokens();
+}
+
+void
+Adoc_PE::Hdl_at_gloss( const Tok_at_gloss & )
+{
+ // KORR_FUTURE
+
+// Create_GlossaryEntry();
+}
+
+void
+Adoc_PE::Hdl_at_global( const Tok_at_global & )
+{
+ // KORR_FUTURE
+// Create_GlobalTextComponent();
+}
+
+void
+Adoc_PE::Hdl_at_include( const Tok_at_include & )
+{
+ // KORR_FUTURE
+}
+
+void
+Adoc_PE::Hdl_at_label( const Tok_at_label & )
+{
+ InstallAtTag(
+ CurDocu().Create_LabelTag() );
+}
+
+void
+Adoc_PE::Hdl_at_since( const Tok_at_since & )
+{
+ InstallAtTag(
+ CurDocu().Create_SinceTag() );
+}
+
+void
+Adoc_PE::Hdl_at_HTML( const Tok_at_HTML & )
+{
+ bUsesHtmlInDocuText = true;
+}
+
+void
+Adoc_PE::Hdl_at_NOHTML( const Tok_at_NOHTML & )
+{
+ bUsesHtmlInDocuText = false;
+}
+
+void
+Adoc_PE::Hdl_DocWord( const Tok_DocWord & i_rTok )
+{
+ bool bIsSpecial = false;
+ if ( nCurSpecialMeaningTokens > 0 )
+ {
+ bIsSpecial = CurAtTag().Add_SpecialMeaningToken(
+ i_rTok.Text(),
+ CurAtTag().NrOfSpecialMeaningTokens()
+ - (--nCurSpecialMeaningTokens) );
+ }
+
+ if ( NOT bIsSpecial )
+ {
+ if ( eDocuState == ds_wait_for_short OR eDocuState == ds_1newline_after_short )
+ eDocuState = ds_in_short;
+ if (nLineCountInDocu == 0)
+ nLineCountInDocu = 1;
+
+ uintt nLength = i_rTok.Length();
+ if ( nLength > 2 )
+ {
+ bool bMaybeGlobalLink = strncmp( "::", i_rTok.Text(), 2 ) == 0;
+ bool bMayBeFunction = *(i_rTok.Text() + nLength - 2) == '('
+ AND *(i_rTok.Text() + nLength - 1) == ')';
+ if ( bMaybeGlobalLink OR bMayBeFunction )
+ {
+ CurAtTag().Add_PotentialLink( i_rTok.Text(),
+ bMaybeGlobalLink,
+ bMayBeFunction );
+ return;
+ }
+ }
+
+ CurAtTag().Add_Token( i_rTok.Text() );
+ eCurTagState = ts_std;
+ }
+}
+
+void
+Adoc_PE::Hdl_Whitespace( const Tok_Whitespace & i_rTok )
+{
+ if ( eCurTagState == ts_std )
+ {
+
+ CurAtTag().Add_Whitespace(i_rTok.Size());
+ }
+}
+
+void
+Adoc_PE::Hdl_LineStart( const Tok_LineStart & i_rTok )
+{
+ if ( pCurAtTag == 0 )
+ return;
+
+ if ( nLineCountInDocu == 2 )
+ {
+ nCurSubtractFromLineStart = i_rTok.Size();
+ eCurTagState = ts_std;
+ }
+ else if ( nLineCountInDocu > 2 )
+ {
+ if ( i_rTok.Size() > nCurSubtractFromLineStart )
+ {
+ CurAtTag().Add_Whitespace( i_rTok.Size()
+ - nCurSubtractFromLineStart );
+ }
+ // else do nothing, because there is no whitespace.
+ }
+}
+
+void
+Adoc_PE::Hdl_Eol( const Tok_Eol & )
+{
+ if ( pCurAtTag == 0 )
+ return;
+
+ nLineCountInDocu++;
+
+ if ( nCurSpecialMeaningTokens == 0 )
+ {
+ CurAtTag().Add_Eol();
+
+ switch ( eDocuState )
+ {
+ case ds_wait_for_short: break;
+ case ds_in_short: if ( nLineCountInDocu < 4 )
+ eDocuState = ds_1newline_after_short;
+ else
+ {
+ RenameCurShortTag();
+ eDocuState = ds_in_descr;
+ }
+ break;
+ case ds_1newline_after_short: FinishCurShortTag();
+ eDocuState = ds_in_descr;
+ break;
+ default:
+ ; // Do noting.
+ }
+ }
+ else
+ {
+ nCurSpecialMeaningTokens = 0;
+ }
+
+
+}
+
+void
+Adoc_PE::Hdl_EoDocu( const Tok_EoDocu & )
+{
+ bIsComplete = true;
+}
+
+DYN ary::doc::OldCppDocu *
+Adoc_PE::ReleaseJustParsedDocu()
+{
+ pCurAtTag = 0;
+ nLineCountInDocu = 0;
+ nCurSpecialMeaningTokens = 0;
+ nCurSubtractFromLineStart = 0;
+ eCurTagState = ts_new;
+ eDocuState = ds_wait_for_short;
+ bIsComplete = false;
+ return pCurDocu.Release();
+}
+
+void
+Adoc_PE::InstallAtTag( DYN ary::info::AtTag * let_dpTag,
+ bool i_bImplicit )
+{
+ pCurAtTag = let_dpTag;
+ if ( pCurAtTag != 0 )
+ {
+ nCurSpecialMeaningTokens = pCurAtTag->NrOfSpecialMeaningTokens();
+ pCurAtTag->Set_HtmlUseInDocuText( bUsesHtmlInDocuText );
+ }
+
+ eCurTagState = ts_new;
+ if ( NOT i_bImplicit )
+ eDocuState = ds_std;
+}
+
+ary::doc::OldCppDocu &
+Adoc_PE::CurDocu()
+{
+ if (NOT pCurDocu)
+ pCurDocu = new ary::doc::OldCppDocu;
+ return *pCurDocu;
+}
+
+ary::info::AtTag &
+Adoc_PE::CurAtTag()
+{
+ if (NOT pCurAtTag)
+ {
+ if ( int(eDocuState) < int(ds_in_descr) )
+ {
+ InstallAtTag(
+ CurDocu().Create_StdTag(ary::info::atid_short),
+ true );
+ }
+ else
+ {
+ InstallAtTag(
+ CurDocu().Create_StdTag(ary::info::atid_descr),
+ true );
+ }
+ }
+ return *pCurAtTag;
+}
+
+void
+Adoc_PE::RenameCurShortTag()
+{
+ CurDocu().Replace_AtShort_By_AtDescr();
+}
+
+void
+Adoc_PE::FinishCurShortTag()
+{
+ InstallAtTag(
+ CurDocu().Create_StdTag(ary::info::atid_descr),
+ true );
+}
+
+
+} // namespace adoc
+
+
+
+
+
diff --git a/autodoc/source/parser/adoc/makefile.mk b/autodoc/source/parser/adoc/makefile.mk
new file mode 100644
index 000000000000..48e4084ee401
--- /dev/null
+++ b/autodoc/source/parser/adoc/makefile.mk
@@ -0,0 +1,62 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..$/..$/..
+
+PRJNAME=autodoc
+TARGET=parser_adoc
+
+
+# --- Settings -----------------------------------------------------
+
+ENABLE_EXCEPTIONS=true
+PRJINC=$(PRJ)$/source
+
+.INCLUDE : settings.mk
+.INCLUDE : $(PRJ)$/source$/mkinc$/fullcpp.mk
+
+
+# --- Files --------------------------------------------------------
+
+OBJFILES= \
+ $(OBJ)$/adoc_tok.obj \
+ $(OBJ)$/a_rdocu.obj \
+ $(OBJ)$/cx_a_std.obj \
+ $(OBJ)$/cx_a_sub.obj \
+ $(OBJ)$/docu_pe.obj \
+ $(OBJ)$/prs_adoc.obj \
+ $(OBJ)$/tk_attag.obj \
+ $(OBJ)$/tk_docw.obj
+
+
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : target.mk
+
+
+
diff --git a/autodoc/source/parser/adoc/prs_adoc.cxx b/autodoc/source/parser/adoc/prs_adoc.cxx
new file mode 100644
index 000000000000..81ae380629b8
--- /dev/null
+++ b/autodoc/source/parser/adoc/prs_adoc.cxx
@@ -0,0 +1,57 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <adoc/prs_adoc.hxx>
+
+
+// NOT FULLY DECLARED SERVICES
+#include <adoc/cx_a_std.hxx>
+
+
+
+namespace adoc
+{
+
+DocuParser_AutodocStyle::DocuParser_AutodocStyle()
+{
+}
+
+DocuParser_AutodocStyle::~DocuParser_AutodocStyle()
+{
+}
+
+DYN autodoc::TkpDocuContext *
+DocuParser_AutodocStyle::Create_DocuContext() const
+{
+ return new Context_AdocStd;
+}
+
+} // namespace adoc
+
+
+
diff --git a/autodoc/source/parser/adoc/tk_attag.cxx b/autodoc/source/parser/adoc/tk_attag.cxx
new file mode 100644
index 000000000000..49f71b82c7c7
--- /dev/null
+++ b/autodoc/source/parser/adoc/tk_attag.cxx
@@ -0,0 +1,111 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <adoc/tk_attag.hxx>
+
+
+// NOT FULLY DEFINED SERVICES
+#include <adoc/tokintpr.hxx>
+
+
+
+namespace adoc {
+
+#if 0
+#define EV_AtTagId( val, tex ) ENUM_VALUE(E_AtTagId, eATTAGID_##val, val, tex )
+
+EV_AtTagId(atid_ATT, "ATTENTION" );
+EV_AtTagId(atid_author, "Author" );
+EV_AtTagId(atid_change, "Change" );
+EV_AtTagId(atid_collab, "Collaborators" );
+EV_AtTagId(atid_contact, "Contact" );
+EV_AtTagId(atid_copyright, "Copyright (c)" );
+EV_AtTagId(atid_descr, "Description" );
+EV_AtTagId(atid_devstat, "Development State" );
+EV_AtTagId(atid_docdate, "Date of Documentation" );
+EV_AtTagId(atid_derive, "How to Derive from this class" );
+EV_AtTagId(atid_instance, "Instances" );
+EV_AtTagId(atid_life, "Lifecycle" );
+EV_AtTagId(atid_multi, "Multiplicity" );
+EV_AtTagId(atid_onerror, "On Error" );
+EV_AtTagId(atid_persist, "Persistence" );
+EV_AtTagId(atid_postcond, "Postcondition" );
+EV_AtTagId(atid_precond, "Precondition" );
+EV_AtTagId(atid_return, "Return" );
+EV_AtTagId(atid_short, "Summary" );
+EV_AtTagId(atid_since, "Valid Since" );
+EV_AtTagId(atid_todo, "Todo" );
+EV_AtTagId(atid_version, "Version" );
+#endif // 0
+
+void
+Tok_at_std::Trigger( TokenInterpreter & io_rInterpreter ) const
+{
+ io_rInterpreter.Hdl_at_std(*this);
+}
+
+const char *
+Tok_at_std::Text() const
+{
+ // KORR_FUTURE
+ return "A Tag";
+
+// return eId.Text();
+}
+
+
+#define DEFINE_TOKEN_CLASS(name, text) \
+void \
+Tok_##name::Trigger( TokenInterpreter & io_rInterpreter ) const \
+{ io_rInterpreter.Hdl_##name(*this); } \
+const char * \
+Tok_##name::Text() const \
+{ return text; }
+
+DEFINE_TOKEN_CLASS(at_base, "Base Classes")
+DEFINE_TOKEN_CLASS(at_exception, "Exceptions")
+DEFINE_TOKEN_CLASS(at_impl, "Implements")
+DEFINE_TOKEN_CLASS(at_key, "Keywords")
+DEFINE_TOKEN_CLASS(at_param, "Parameters")
+DEFINE_TOKEN_CLASS(at_see, "See Also")
+DEFINE_TOKEN_CLASS(at_template, "Template Parameters")
+DEFINE_TOKEN_CLASS(at_interface, "Interface")
+DEFINE_TOKEN_CLASS(at_internal, "[ INTERNAL ]")
+DEFINE_TOKEN_CLASS(at_obsolete, "[ DEPRECATED ]")
+DEFINE_TOKEN_CLASS(at_module, "Module")
+DEFINE_TOKEN_CLASS(at_file, "File")
+DEFINE_TOKEN_CLASS(at_gloss, "Glossary")
+DEFINE_TOKEN_CLASS(at_global, "<global doc text>")
+DEFINE_TOKEN_CLASS(at_include, "<included text>")
+DEFINE_TOKEN_CLASS(at_label, "Label")
+DEFINE_TOKEN_CLASS(at_HTML, "")
+DEFINE_TOKEN_CLASS(at_NOHTML, "")
+DEFINE_TOKEN_CLASS(at_since, "Since");
+
+} // namespace adoc
+
diff --git a/autodoc/source/parser/adoc/tk_docw.cxx b/autodoc/source/parser/adoc/tk_docw.cxx
new file mode 100644
index 000000000000..0b8bc0051edd
--- /dev/null
+++ b/autodoc/source/parser/adoc/tk_docw.cxx
@@ -0,0 +1,128 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <adoc/tk_docw.hxx>
+
+
+// NOT FULLY DEFINED SERVICES
+#include <adoc/tokintpr.hxx>
+
+
+
+namespace adoc {
+
+
+ static const char C_sSpace[300] =
+ " "
+ " "
+ " "
+ " "
+ " "
+ " ";
+
+
+//*********************** Tok_DocWord ******************//
+
+void
+Tok_DocWord::Trigger( TokenInterpreter & io_rInterpreter ) const
+{
+ io_rInterpreter.Hdl_DocWord(*this);
+}
+
+const char *
+Tok_DocWord::Text() const
+{
+ return sText;
+}
+
+//*********************** Tok_Whitespace ******************//
+
+
+void
+Tok_Whitespace::Trigger( TokenInterpreter & io_rInterpreter ) const
+{
+ io_rInterpreter.Hdl_Whitespace(*this);
+}
+
+const char *
+Tok_Whitespace::Text() const
+{
+ return C_sSpace + 299 - nSize;
+}
+
+
+
+//*********************** Tok_LineStart ******************//
+
+
+void
+Tok_LineStart::Trigger( TokenInterpreter & io_rInterpreter ) const
+{
+ io_rInterpreter.Hdl_LineStart(*this);
+}
+
+const char *
+Tok_LineStart::Text() const
+{
+ return C_sSpace + 299 - nSize;
+}
+
+
+//*********************** Tok_Eol ******************//
+
+void
+Tok_Eol::Trigger( TokenInterpreter & io_rInterpreter ) const
+{
+ io_rInterpreter.Hdl_Eol(*this);
+}
+
+const char *
+Tok_Eol::Text() const
+{
+ return "\n";
+}
+
+
+
+//*********************** Tok_EoDocu ******************//
+
+void
+Tok_EoDocu::Trigger( TokenInterpreter & io_rInterpreter ) const
+{
+ io_rInterpreter.Hdl_EoDocu(*this);
+}
+
+const char *
+Tok_EoDocu::Text() const
+{
+ return "*/";
+}
+
+} // namespace adoc
+
+
diff --git a/autodoc/source/parser/cpp/all_toks.cxx b/autodoc/source/parser/cpp/all_toks.cxx
new file mode 100644
index 000000000000..db2af0ab0ad3
--- /dev/null
+++ b/autodoc/source/parser/cpp/all_toks.cxx
@@ -0,0 +1,151 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <all_toks.hxx>
+
+
+// NOT FULLY DEFINED SERVICES
+#include <cpp/ctokdeal.hxx>
+#include "c_dealer.hxx"
+#include "tokintpr.hxx"
+
+
+
+namespace cpp {
+
+
+void
+Token::DealOut( ::TokenDealer & o_rDealer )
+{
+ // KORR_FUTURE HACK (casting to derivation cpp::TokenDealer)
+ o_rDealer.AsDistributor()->Deal_CppCode(*this);
+}
+
+
+#define DEF_TOKEN_CLASS(name) \
+void \
+Tok_##name::Trigger( TokenInterpreter & io_rInterpreter ) const \
+{ io_rInterpreter.Hdl_##name(*this); } \
+INT16 \
+Tok_##name::TypeId() const { return Tid_##name; } \
+const char * \
+Tok_##name::Text() const { return #name; }
+
+#define DEF_TOKEN_CLASS_WITHTEXT(name, text ) \
+void \
+Tok_##name::Trigger( TokenInterpreter & io_rInterpreter ) const \
+{ io_rInterpreter.Hdl_##name(*this); } \
+INT16 \
+Tok_##name::TypeId() const { return Tid_##name; } \
+const char * \
+Tok_##name::Text() const { return text; }
+
+
+DEF_TOKEN_CLASS_WITHTEXT(Identifier,sText)
+DEF_TOKEN_CLASS_WITHTEXT(Operator,sText)
+
+DEF_TOKEN_CLASS(operator)
+DEF_TOKEN_CLASS(class)
+DEF_TOKEN_CLASS(struct)
+DEF_TOKEN_CLASS(union)
+DEF_TOKEN_CLASS(enum)
+DEF_TOKEN_CLASS(typedef)
+DEF_TOKEN_CLASS(public)
+DEF_TOKEN_CLASS(protected)
+DEF_TOKEN_CLASS(private)
+DEF_TOKEN_CLASS(template)
+DEF_TOKEN_CLASS(virtual)
+DEF_TOKEN_CLASS(friend)
+DEF_TOKEN_CLASS_WITHTEXT(Tilde,"~")
+DEF_TOKEN_CLASS(const)
+DEF_TOKEN_CLASS(volatile)
+DEF_TOKEN_CLASS(extern)
+DEF_TOKEN_CLASS(static)
+DEF_TOKEN_CLASS(mutable)
+DEF_TOKEN_CLASS(register)
+DEF_TOKEN_CLASS(inline)
+DEF_TOKEN_CLASS(explicit)
+DEF_TOKEN_CLASS(namespace)
+DEF_TOKEN_CLASS(using)
+DEF_TOKEN_CLASS(throw)
+DEF_TOKEN_CLASS_WITHTEXT(SwBracket_Left,"{")
+DEF_TOKEN_CLASS_WITHTEXT(SwBracket_Right,"}")
+DEF_TOKEN_CLASS_WITHTEXT(ArrayBracket_Left,"[")
+DEF_TOKEN_CLASS_WITHTEXT(ArrayBracket_Right,"]")
+DEF_TOKEN_CLASS_WITHTEXT(Bracket_Left,"(")
+DEF_TOKEN_CLASS_WITHTEXT(Bracket_Right,")")
+DEF_TOKEN_CLASS_WITHTEXT(DoubleColon,"::")
+DEF_TOKEN_CLASS_WITHTEXT(Semicolon,";")
+DEF_TOKEN_CLASS_WITHTEXT(Comma,",")
+DEF_TOKEN_CLASS_WITHTEXT(Colon,":")
+DEF_TOKEN_CLASS_WITHTEXT(Assign,"=")
+DEF_TOKEN_CLASS_WITHTEXT(Less,"<")
+DEF_TOKEN_CLASS_WITHTEXT(Greater,">")
+DEF_TOKEN_CLASS_WITHTEXT(Asterix,"*")
+DEF_TOKEN_CLASS_WITHTEXT(AmpersAnd,"&")
+DEF_TOKEN_CLASS_WITHTEXT(Ellipse,"...")
+DEF_TOKEN_CLASS(typename)
+
+DEF_TOKEN_CLASS_WITHTEXT(DefineName,sText)
+DEF_TOKEN_CLASS_WITHTEXT(MacroName,sText)
+DEF_TOKEN_CLASS_WITHTEXT(MacroParameter,sText)
+// DEF_TOKEN_CLASS_WITHTEXT(PreProDefinition,sText)
+
+void
+Tok_PreProDefinition::Trigger( TokenInterpreter & io_rInterpreter ) const
+{ io_rInterpreter.Hdl_PreProDefinition(*this); }
+
+INT16
+Tok_PreProDefinition::TypeId() const { return Tid_PreProDefinition; }
+
+const char *
+Tok_PreProDefinition::Text() const
+{
+ return sText;
+}
+
+
+
+DEF_TOKEN_CLASS_WITHTEXT(BuiltInType,sText)
+DEF_TOKEN_CLASS_WITHTEXT(TypeSpecializer,sText)
+DEF_TOKEN_CLASS_WITHTEXT(Constant,sText)
+
+const char *
+Tok_UnblockMacro::Text() const
+{
+ return sMacroName;
+}
+
+void
+Tok_UnblockMacro::DealOut( ::TokenDealer & o_rDealer )
+{
+ // KORR_FUTURE HACK (casting to derivation cpp::TokenDealer)
+ o_rDealer.AsDistributor()->Deal_Cpp_UnblockMacro(*this);
+}
+
+} // namespace cpp
diff --git a/autodoc/source/parser/cpp/all_toks.hxx b/autodoc/source/parser/cpp/all_toks.hxx
new file mode 100644
index 000000000000..485588d5fbc1
--- /dev/null
+++ b/autodoc/source/parser/cpp/all_toks.hxx
@@ -0,0 +1,219 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_CPP_ALL_TOKS_HXX
+#define ADC_CPP_ALL_TOKS_HXX
+
+// USED SERVICES
+ // BASE CLASSES
+#include "cpp_tok.hxx"
+ // COMPONENTS
+ // PARAMETERS
+
+namespace cpp {
+
+class Tok_Identifier : public cpp::Token
+{
+ public:
+ Tok_Identifier(
+ const char * i_sText ) : sText(i_sText) {}
+ virtual void Trigger(
+ TokenInterpreter & io_rInterpreter ) const;
+ virtual INT16 TypeId() const;
+ virtual const char *
+ Text() const;
+ private:
+ String sText;
+};
+const INT16 Tid_Identifier = 1;
+
+/** == != <= >= && || !
+
+ new delete sizeof typeid
+ + - / % ^ | << >>
+ . -> ?
+ += -= *= /= %= &= |= ^= <<= >>=
+*/
+class Tok_Operator : public cpp::Token
+{
+ public:
+ Tok_Operator(
+ const char * i_sText ) : sText(i_sText) {}
+ virtual void Trigger(
+ TokenInterpreter & io_rInterpreter ) const;
+ virtual INT16 TypeId() const;
+ virtual const char *
+ Text() const;
+ private:
+ String sText;
+};
+const INT16 Tid_Operator = 2;
+
+
+
+#define DECL_TOKEN_CLASS(name,tid) \
+class Tok_##name : public cpp::Token \
+{ public: \
+ virtual void Trigger( \
+ TokenInterpreter & io_rInterpreter ) const; \
+ virtual INT16 TypeId() const; \
+ virtual const char * \
+ Text() const; \
+}; \
+const INT16 Tid_##name = tid
+
+DECL_TOKEN_CLASS(operator,3);
+DECL_TOKEN_CLASS(class,4);
+DECL_TOKEN_CLASS(struct,5);
+DECL_TOKEN_CLASS(union,6);
+DECL_TOKEN_CLASS(enum,7);
+DECL_TOKEN_CLASS(typedef,8);
+DECL_TOKEN_CLASS(public,9);
+DECL_TOKEN_CLASS(protected,10);
+DECL_TOKEN_CLASS(private,11);
+DECL_TOKEN_CLASS(template,12);
+DECL_TOKEN_CLASS(virtual,13);
+DECL_TOKEN_CLASS(friend,14);
+DECL_TOKEN_CLASS(Tilde,15);
+DECL_TOKEN_CLASS(const,16);
+DECL_TOKEN_CLASS(volatile,17);
+DECL_TOKEN_CLASS(extern,18);
+DECL_TOKEN_CLASS(static,19);
+DECL_TOKEN_CLASS(mutable,20);
+DECL_TOKEN_CLASS(register,21);
+DECL_TOKEN_CLASS(inline,22);
+DECL_TOKEN_CLASS(explicit,23);
+DECL_TOKEN_CLASS(namespace,24);
+DECL_TOKEN_CLASS(using,25);
+DECL_TOKEN_CLASS(throw,26);
+DECL_TOKEN_CLASS(SwBracket_Left,27);
+DECL_TOKEN_CLASS(SwBracket_Right,28);
+DECL_TOKEN_CLASS(ArrayBracket_Left,29);
+DECL_TOKEN_CLASS(ArrayBracket_Right,30);
+DECL_TOKEN_CLASS(Bracket_Left,31);
+DECL_TOKEN_CLASS(Bracket_Right,32);
+DECL_TOKEN_CLASS(DoubleColon,33);
+DECL_TOKEN_CLASS(Semicolon,34);
+DECL_TOKEN_CLASS(Comma,35);
+DECL_TOKEN_CLASS(Colon,36);
+DECL_TOKEN_CLASS(Assign,37);
+DECL_TOKEN_CLASS(Less,38);
+DECL_TOKEN_CLASS(Greater,39);
+DECL_TOKEN_CLASS(Asterix,40);
+DECL_TOKEN_CLASS(AmpersAnd,41);
+DECL_TOKEN_CLASS(Ellipse,42);
+DECL_TOKEN_CLASS(typename,43);
+
+#undef DECL_TOKEN_CLASS
+
+#define DECL_TOKEN_CLASS_WITHTEXT(name,tid) \
+class Tok_##name : public cpp::Token \
+{ public: \
+ Tok_##name( \
+ const char * i_sText ) : sText(i_sText) {} \
+ virtual void Trigger( \
+ TokenInterpreter & io_rInterpreter ) const; \
+ virtual INT16 TypeId() const; \
+ virtual const char * \
+ Text() const; \
+ private: \
+ String sText; \
+}; \
+const INT16 Tid_##name = tid
+
+
+
+DECL_TOKEN_CLASS_WITHTEXT(DefineName,44);
+DECL_TOKEN_CLASS_WITHTEXT(MacroName,45);
+DECL_TOKEN_CLASS_WITHTEXT(MacroParameter,46);
+DECL_TOKEN_CLASS_WITHTEXT(PreProDefinition,47);
+
+/** char short int long float double wchar_t size_t
+*/
+DECL_TOKEN_CLASS_WITHTEXT(BuiltInType, 48);
+
+/** signed unsigned
+*/
+DECL_TOKEN_CLASS_WITHTEXT(TypeSpecializer, 49);
+DECL_TOKEN_CLASS_WITHTEXT(Constant, 50);
+
+
+
+/** This token does nothing in C++ code. It is added by the
+ internal macro-replacer to mark the position, where a
+ define or macro becomes valid again, which was until then
+ invalid, because the text was a replacement of this macro.
+ ( Avoiding endless recursive macro replacement. )
+*/
+class Tok_UnblockMacro : public ::TextToken
+{
+ public:
+ Tok_UnblockMacro(
+ const char * i_sMacroName ) : sMacroName(i_sMacroName) {}
+ virtual const char* Text() const;
+
+ virtual void DealOut(
+ ::TokenDealer & o_rDealer );
+ private:
+ String sMacroName;
+};
+
+
+
+#if 0 // just for viewing:
+class Tok_TypeKey : public cpp::Token // file-><type-PE>
+class Tok_Template : public cpp::Token // file
+class Tok_Namespace : public cpp::Token // file
+class Tok_Bracket : public cpp::Token // ueberall
+class Tok_Separator : public cpp::Token // ueberall
+
+class Tok_Identifier : public cpp::Token // ueberall
+class Tok_NameSeparator : public cpp::Token // Type, Name
+class Tok_BuiltInType : public cpp::Token // ueberall
+class Tok_ConVol : public cpp::Token // class-><FuVa>
+class Tok_StorageClass : public cpp::Token // file-><type>,<FuVa>
+class Tok_OperatorFunctionName : public cpp::Token // class
+
+class Tok_Protection : public cpp::Token // class
+class Tok_Virtual : public cpp::Token // class
+class Tok_Friend : public cpp::Token // class
+class Tok_Tilde : public cpp::Token // class, expression
+
+class Tok_Ellipse : public cpp::Token // function-ParaList
+class Tok_Assignment : public cpp::Token // VariableDeclaraton, Function, Parameter
+class Tok_Throw : public cpp::Token // function
+class Tok_LessMore : public cpp::Token
+class Tok_Operator : public cpp::Token // expression
+
+class Tok_Ignore : public cpp::Token
+class Tok_ContextChanger : public cpp::Token
+#endif // 0
+
+
+} // namespace cpp
+
+#endif
diff --git a/autodoc/source/parser/cpp/c_dealer.cxx b/autodoc/source/parser/cpp/c_dealer.cxx
new file mode 100644
index 000000000000..2917aab1bb6c
--- /dev/null
+++ b/autodoc/source/parser/cpp/c_dealer.cxx
@@ -0,0 +1,149 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "c_dealer.hxx"
+
+
+// NOT FULLY DECLARED SERVICES
+#include <ary/cpp/c_gate.hxx>
+#include <ary/loc/locp_le.hxx>
+#include <ary/loc/loc_root.hxx>
+#include <ary/loc/loc_file.hxx>
+//#include <ary/docu.hxx>
+#include <adoc/a_rdocu.hxx>
+#include "all_toks.hxx"
+#include "c_rcode.hxx"
+
+
+namespace ary
+{
+namespace loc
+{
+ class Root;
+}
+}
+
+
+
+
+namespace cpp
+{
+
+Distributor::Distributor( ary::cpp::Gate & io_rAryGate )
+ : aCppPreProcessor(),
+ aCodeExplorer(io_rAryGate),
+ aDocuExplorer(),
+ pGate(&io_rAryGate),
+ pFileEventHandler(0),
+ pDocuDistributor(0)
+{
+ pFileEventHandler = & aCodeExplorer.FileEventHandler();
+ pDocuDistributor = & aCodeExplorer.DocuDistributor();
+}
+
+void
+Distributor::AssignPartners( CharacterSource & io_rSourceText,
+ const MacroMap & i_rValidMacros )
+{
+ aCppPreProcessor.AssignPartners(aCodeExplorer, io_rSourceText, i_rValidMacros);
+}
+
+Distributor::~Distributor()
+{
+}
+
+void
+Distributor::StartNewFile( const csv::ploc::Path & i_file )
+{
+ const csv::ploc::Root &
+ root_dir = i_file.RootDir();
+ StreamLock
+ sl(700);
+ root_dir.Get(sl());
+ csv::ploc::Path
+ root_path( sl().c_str(), true );
+ ary::loc::Le_id
+ root_id = pGate->Locations().CheckIn_Root(root_path).LeId();
+ ary::loc::File &
+ rFile = pGate->Locations().CheckIn_File(
+ i_file.File(),
+ i_file.DirChain(),
+ root_id );
+ pFileEventHandler->SetCurFile(rFile);
+
+ aCodeExplorer.StartNewFile();
+
+ csv_assert( pDocuDistributor != 0 );
+ aDocuExplorer.StartNewFile(*pDocuDistributor);
+}
+
+
+void
+Distributor::Deal_Eol()
+{
+ pFileEventHandler->Event_IncrLineCount();
+}
+
+void
+Distributor::Deal_Eof()
+{
+ // Do nothing yet.
+}
+
+void
+Distributor::Deal_Cpp_UnblockMacro( Tok_UnblockMacro & let_drToken )
+{
+ aCppPreProcessor.UnblockMacro(let_drToken.Text());
+ delete &let_drToken;
+}
+
+void
+Distributor::Deal_CppCode( cpp::Token & let_drToken )
+{
+ aCppPreProcessor.Process_Token(let_drToken);
+}
+
+void
+Distributor::Deal_AdcDocu( adoc::Token & let_drToken )
+{
+ aDocuExplorer.Process_Token(let_drToken);
+}
+
+Distributor *
+Distributor::AsDistributor()
+{
+ return this;
+}
+
+
+
+
+
+} // namespace cpp
+
+
diff --git a/autodoc/source/parser/cpp/c_dealer.hxx b/autodoc/source/parser/cpp/c_dealer.hxx
new file mode 100644
index 000000000000..a48c3281574d
--- /dev/null
+++ b/autodoc/source/parser/cpp/c_dealer.hxx
@@ -0,0 +1,108 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_CPP_C_DEALER_HXX
+#define ADC_CPP_C_DEALER_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <cpp/ctokdeal.hxx>
+#include <adoc/atokdeal.hxx>
+#include <ary/info/docstore.hxx>
+ // COMPONENTS
+#include "preproc.hxx"
+#include "c_rcode.hxx"
+#include <adoc/a_rdocu.hxx>
+ // PARAMETERS
+
+namespace csv
+{
+ namespace ploc
+ {
+ class Path;
+ class DirectoryChain;
+ }
+}
+
+
+class TokenParser;
+
+
+namespace cpp
+{
+
+class PE_File;
+class DefineDescription;
+
+
+class Distributor : public cpp::TokenDealer, /// Handle C++ code tokens.
+ public adoc::TokenDealer /// Handle Autodoc documentation tokens.
+{
+ public:
+ typedef std::map< String, DefineDescription* > MacroMap;
+
+ // LIFECYCLE
+ Distributor(
+ ary::cpp::Gate & io_rGate );
+ ~Distributor();
+ // OPERATIONS
+ void AssignPartners(
+ CharacterSource & io_rSourceText,
+ const MacroMap & i_rValidMacros );
+ void StartNewFile(
+ const csv::ploc::Path &
+ i_file );
+ virtual void Deal_Eol();
+ virtual void Deal_Eof();
+
+ virtual void Deal_CppCode(
+ cpp::Token & let_drToken );
+ virtual void Deal_Cpp_UnblockMacro(
+ Tok_UnblockMacro & let_drToken );
+
+ virtual void Deal_AdcDocu(
+ adoc::Token & let_drToken );
+ virtual Distributor *
+ AsDistributor();
+ private:
+ // DATA
+ PreProcessor aCppPreProcessor;
+ CodeExplorer aCodeExplorer;
+ adoc::DocuExplorer aDocuExplorer;
+ ary::cpp::Gate * pGate;
+ FileScope_EventHandler *
+ pFileEventHandler;
+ DocuDealer * pDocuDistributor;
+};
+
+
+
+} // namespace cpp
+#endif
+
diff --git a/autodoc/source/parser/cpp/c_rcode.cxx b/autodoc/source/parser/cpp/c_rcode.cxx
new file mode 100644
index 000000000000..ceac10902070
--- /dev/null
+++ b/autodoc/source/parser/cpp/c_rcode.cxx
@@ -0,0 +1,161 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "c_rcode.hxx"
+
+
+// NOT FULLY DECLARED SERVICES
+#include <ary/cpp/c_gate.hxx>
+#include <ary/cpp/c_namesp.hxx>
+// #include <ary/cpp/c_groups.hxx>
+#include <ary/loc/locp_le.hxx>
+#include "cpp_pe.hxx"
+#include <adc_cl.hxx>
+#include <x_parse.hxx>
+#include "pe_file.hxx"
+
+const uintt C_nNO_TRY = uintt(-1);
+
+
+namespace cpp {
+
+
+CodeExplorer::CodeExplorer( ary::cpp::Gate & io_rAryGate )
+ : aGlobalParseContext(io_rAryGate),
+ // aEnvironments,
+ pPE_File(0),
+ pGate(&io_rAryGate),
+ dpCurToken(0)
+{
+ pPE_File = new PE_File( aGlobalParseContext );
+}
+
+CodeExplorer::~CodeExplorer()
+{
+}
+
+void
+CodeExplorer::StartNewFile()
+{
+ csv::erase_container(aEnvironments);
+
+ aEnvironments.push_back( pPE_File.MutablePtr() );
+ pPE_File->Enter(push);
+}
+
+void
+CodeExplorer::Process_Token( DYN cpp::Token & let_drToken )
+{
+if (DEBUG_ShowTokens())
+{
+ Cout() << let_drToken.Text() << Endl();
+}
+ dpCurToken = &let_drToken;
+ aGlobalParseContext.ResetResult();
+
+ do {
+ CurToken().Trigger( CurEnv() );
+ AcknowledgeResult();
+ } while ( dpCurToken );
+}
+
+void
+CodeExplorer::AcknowledgeResult()
+{
+ if (CurResult().eDone == done)
+ dpCurToken = 0;
+
+ switch ( CurResult().eStackAction )
+ {
+ case stay:
+ break;
+ case push:
+ CurEnv().Leave(push);
+ aEnvironments.push_back( &PushEnv() );
+ PushEnv().Enter(push);
+ break;
+ case pop_success:
+ CurEnv().Leave(pop_success);
+ aEnvironments.pop_back();
+ CurEnv().Enter(pop_success);
+ break;
+ case pop_failure:
+ {
+ Cpp_PE * pRecover = 0;
+ do {
+ CurEnv().Leave(pop_failure);
+ aEnvironments.pop_back();
+ if ( aEnvironments.empty() )
+ break;
+ pRecover = CurEnv().Handle_ChildFailure();
+ } while ( pRecover == 0 );
+ if ( pRecover != 0 )
+ {
+ aEnvironments.push_back(pRecover);
+ pRecover->Enter(push);
+ }
+ else
+ {
+ throw X_Parser( X_Parser::x_UnexpectedToken, CurToken().Text(), aGlobalParseContext.CurFileName(), aGlobalParseContext.LineCount() );
+ }
+ } break;
+ default:
+ csv_assert(false);
+ } // end switch(CurResult().eStackAction)
+}
+
+const Token &
+CodeExplorer::CurToken() const
+{
+ csv_assert(dpCurToken);
+
+ return *dpCurToken;
+}
+
+Cpp_PE &
+CodeExplorer::CurEnv() const
+{
+ csv_assert(aEnvironments.size() > 0);
+ csv_assert(aEnvironments.back() != 0);
+
+ return *aEnvironments.back();
+}
+
+Cpp_PE &
+CodeExplorer::PushEnv() const
+{
+ TokenProcessing_Result & rCurResult = const_cast< TokenProcessing_Result& >(aGlobalParseContext.CurResult());
+ Cpp_PE * ret = dynamic_cast< Cpp_PE* >(rCurResult.pEnv2Push);
+ csv_assert( ret != 0 );
+ return *ret;
+}
+
+
+
+} // namespace cpp
+
diff --git a/autodoc/source/parser/cpp/c_rcode.hxx b/autodoc/source/parser/cpp/c_rcode.hxx
new file mode 100644
index 000000000000..64d8b3137344
--- /dev/null
+++ b/autodoc/source/parser/cpp/c_rcode.hxx
@@ -0,0 +1,104 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_CPP_C_RCODE_HXX
+#define ADC_CPP_C_RCODE_HXX
+
+// BASE CLASSES
+#include <tokens/tokproct.hxx>
+// USED SERVICES
+#include <cosv/ploc.hxx>
+#include "cxt2ary.hxx"
+#include <ary/cpp/c_types4cpp.hxx>
+#include <ary/loc/loc_types4loc.hxx>
+
+
+
+namespace ary
+{
+namespace cpp
+{
+ class Gate;
+}
+namespace doc
+{
+ class OldCppDocu;
+}
+}
+
+namespace cpp
+{
+ class PE_File;
+ class Token;
+ class Cpp_PE;
+
+
+
+
+class CodeExplorer : private TokenProcessing_Types
+
+{
+ public:
+ CodeExplorer(
+ ary::cpp::Gate & io_rAryGate );
+ ~CodeExplorer();
+
+ void StartNewFile();
+ void Process_Token(
+ DYN cpp::Token & let_drToken );
+ // ACCESS
+ FileScope_EventHandler &
+ FileEventHandler() { return aGlobalParseContext; }
+ DocuDealer & DocuDistributor() { return aGlobalParseContext; }
+
+ private:
+ typedef std::vector< cpp::Cpp_PE* > EnvironmentStack;
+
+ void AcknowledgeResult();
+ const Token & CurToken() const;
+ Cpp_PE & CurEnv() const;
+ Cpp_PE & PushEnv() const;
+ TokenProcessing_Result &
+ CurResult() { return aGlobalParseContext.CurResult(); }
+
+ // DATA
+ ContextForAry aGlobalParseContext;
+
+ EnvironmentStack aEnvironments;
+ Dyn<PE_File> pPE_File;
+
+ ary::cpp::Gate * pGate;
+ cpp::Token * dpCurToken;
+};
+
+
+
+} // namespace cpp
+
+
+#endif
+
diff --git a/autodoc/source/parser/cpp/cpp_pe.cxx b/autodoc/source/parser/cpp/cpp_pe.cxx
new file mode 100644
index 000000000000..05758989cbb3
--- /dev/null
+++ b/autodoc/source/parser/cpp/cpp_pe.cxx
@@ -0,0 +1,78 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "cpp_pe.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include <ary/doc/d_oldcppdocu.hxx>
+#include "cpp_tok.hxx"
+
+
+
+
+namespace cpp {
+
+void
+Cpp_PE::SetTokenResult( E_TokenDone i_eDone,
+ E_EnvStackAction i_eWhat2DoWithEnvStack,
+ ParseEnvironment * i_pParseEnv2Push )
+{
+ rMyEnv.SetTokenResult( i_eDone,
+ i_eWhat2DoWithEnvStack,
+ i_pParseEnv2Push );
+}
+
+Cpp_PE::Cpp_PE( Cpp_PE * io_pParent )
+ : ParseEnvironment( io_pParent ),
+ rMyEnv( io_pParent->Env() )
+{
+ csv_assert(io_pParent != 0);
+}
+
+Cpp_PE::Cpp_PE( EnvData & i_rEnv )
+ : ParseEnvironment(0),
+ rMyEnv(i_rEnv)
+{
+}
+
+void
+Cpp_PE::StdHandlingOfSyntaxError( const char * )
+{
+ SetTokenResult(not_done, pop_failure);
+}
+
+
+Cpp_PE *
+Cpp_PE::Handle_ChildFailure()
+{
+ return 0;
+}
+
+} // namespace cpp
+
diff --git a/autodoc/source/parser/cpp/cpp_pe.hxx b/autodoc/source/parser/cpp/cpp_pe.hxx
new file mode 100644
index 000000000000..fb67cdd34616
--- /dev/null
+++ b/autodoc/source/parser/cpp/cpp_pe.hxx
@@ -0,0 +1,81 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_CPP_CPP_PE_HXX
+#define ADC_CPP_CPP_PE_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <semantic/parseenv.hxx>
+#include "tokintpr.hxx"
+ // COMPONENTS
+#include "pev.hxx"
+ // PARAMETERS
+#include <ary/cpp/c_types4cpp.hxx>
+
+
+namespace cpp {
+
+class Cpp_PE : public ::ParseEnvironment,
+ public TokenInterpreter
+{
+ public:
+ typedef cpp::PeEnvironment EnvData;
+
+ void SetTokenResult(
+ E_TokenDone i_eDone,
+ E_EnvStackAction i_eWhat2DoWithEnvStack,
+ ParseEnvironment * i_pParseEnv2Push = 0 );
+
+ virtual Cpp_PE * Handle_ChildFailure(); // Defaulted to 0.
+
+ protected:
+ Cpp_PE(
+ Cpp_PE * io_pParent );
+ Cpp_PE(
+ EnvData & i_rEnv );
+
+ EnvData & Env() const;
+
+ void StdHandlingOfSyntaxError(
+ const char * i_sText );
+
+ private:
+ // DATA
+ EnvData & rMyEnv;
+};
+
+inline Cpp_PE::EnvData &
+Cpp_PE::Env() const
+ { return rMyEnv; }
+
+} // namespace cpp
+
+#endif
+
diff --git a/autodoc/source/parser/cpp/cpp_tok.hxx b/autodoc/source/parser/cpp/cpp_tok.hxx
new file mode 100644
index 000000000000..7dc5da1f15f5
--- /dev/null
+++ b/autodoc/source/parser/cpp/cpp_tok.hxx
@@ -0,0 +1,63 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_CPP_TOK_HXX
+#define ADC_CPP_TOK_HXX
+
+// USED SERVICES
+ // BASE CLASSES
+#include <tokens/token.hxx>
+ // COMPONENTS
+ // PARAMETERS
+
+
+namespace cpp {
+
+
+class TokenInterpreter;
+
+
+class Token : public TextToken
+{
+ public:
+ // LIFECYCLE
+ virtual ~Token() {}
+
+ // OPERATIONS
+ virtual INT16 TypeId() const = 0;
+ virtual void DealOut(
+ ::TokenDealer & o_rDealer );
+ virtual void Trigger(
+ TokenInterpreter & io_rInterpreter ) const = 0;
+};
+
+
+} // namespace cpp
+
+#endif
+
+
diff --git a/autodoc/source/parser/cpp/cx_base.cxx b/autodoc/source/parser/cpp/cx_base.cxx
new file mode 100644
index 000000000000..0b7f751b3bcc
--- /dev/null
+++ b/autodoc/source/parser/cpp/cx_base.cxx
@@ -0,0 +1,77 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "cx_base.hxx"
+
+// NOT FULLY DECLARED SERVICES
+#include <tokens/token.hxx>
+#include "c_dealer.hxx"
+
+
+
+namespace cpp {
+
+
+
+Cx_Base::Cx_Base( TkpContext * io_pFollowUpContext )
+ : pDealer(0),
+ pFollowUpContext(io_pFollowUpContext)
+ // pNewToken
+{
+}
+
+bool
+Cx_Base::PassNewToken()
+{
+ if (pNewToken)
+ {
+ pNewToken.Release()->DealOut(Dealer());
+ return true;
+ }
+ return false;
+}
+
+TkpContext &
+Cx_Base::FollowUpContext()
+{
+ csv_assert(pFollowUpContext != 0);
+ return *pFollowUpContext;
+}
+
+void
+Cx_Base::AssignDealer( Distributor & o_rDealer )
+{
+ pDealer = &o_rDealer;
+}
+
+
+} // namespace cpp
+
+
+
+
diff --git a/autodoc/source/parser/cpp/cx_base.hxx b/autodoc/source/parser/cpp/cx_base.hxx
new file mode 100644
index 000000000000..c6485ab4e5c1
--- /dev/null
+++ b/autodoc/source/parser/cpp/cx_base.hxx
@@ -0,0 +1,96 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_CPP_CX_BASE_HXX
+#define ADC_CPP_CX_BASE_HXX
+
+// USED SERVICES
+ // BASE CLASSES
+#include <tokens/tkpcontx.hxx>
+ // COMPONENTS
+ // PARAMETERS
+
+
+class TextToken;
+
+
+namespace cpp
+{
+
+class Distributor;
+
+
+class Cx_Base : public ::TkpContext
+{
+ public:
+ virtual bool PassNewToken();
+ virtual TkpContext &
+ FollowUpContext();
+
+ virtual void AssignDealer(
+ Distributor & o_rDealer );
+ protected:
+ // LIFECYCLE
+ Cx_Base(
+ TkpContext * io_pFollowUpContext );
+
+ void SetNewToken(
+ DYN ::TextToken * let_dpToken );
+ void SetFollowUpContext(
+ TkpContext * io_pContext );
+
+ Distributor & Dealer() const;
+
+ private:
+ // DATA
+ Distributor * pDealer;
+ TkpContext * pFollowUpContext;
+ Dyn< ::TextToken > pNewToken;
+};
+
+
+
+
+inline void
+Cx_Base::SetNewToken( DYN ::TextToken * let_dpToken )
+ { pNewToken = let_dpToken; }
+inline void
+Cx_Base::SetFollowUpContext( TkpContext * io_pContext )
+ { pFollowUpContext = io_pContext; }
+inline Distributor &
+Cx_Base::Dealer() const
+ { csv_assert(pDealer != 0);
+ return *pDealer; }
+
+
+
+
+
+} // namespace cpp
+
+#endif
+
diff --git a/autodoc/source/parser/cpp/cx_c_pp.cxx b/autodoc/source/parser/cpp/cx_c_pp.cxx
new file mode 100644
index 000000000000..0b69979a13f8
--- /dev/null
+++ b/autodoc/source/parser/cpp/cx_c_pp.cxx
@@ -0,0 +1,180 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "cx_c_pp.hxx"
+
+
+
+// NOT FULLY DECLARED SERVICES
+#include "c_dealer.hxx"
+#include <tokens/parseinc.hxx>
+#include <x_parse.hxx>
+#include "all_toks.hxx"
+
+
+namespace cpp
+{
+
+Context_Preprocessor::Context_Preprocessor( TkpContext & i_rFollowUpContext )
+ : Cx_Base(&i_rFollowUpContext),
+ pContext_Parent(&i_rFollowUpContext),
+ pContext_PP_MacroParams( 0 ),
+ pContext_PP_Definition( new Context_PP_Definition(i_rFollowUpContext) )
+{
+ pContext_PP_MacroParams = new Context_PP_MacroParams(*pContext_PP_Definition);
+}
+
+void
+Context_Preprocessor::ReadCharChain( CharacterSource & io_rText )
+{
+ jumpOverWhite( io_rText );
+ jumpToWhite( io_rText );
+ const char * sPP_Keyword = io_rText.CutToken();
+ if ( strcmp(sPP_Keyword, "define") == 0 )
+ ReadDefine(io_rText);
+ else
+ ReadDefault(io_rText);
+}
+
+void
+Context_Preprocessor::AssignDealer( Distributor & o_rDealer )
+{
+ Cx_Base::AssignDealer(o_rDealer);
+ pContext_PP_MacroParams->AssignDealer(o_rDealer);
+ pContext_PP_Definition->AssignDealer(o_rDealer);
+}
+
+void
+Context_Preprocessor::ReadDefault( CharacterSource & io_rText )
+{
+ int o_rCount_BackslashedLineBreaks = 0;
+ jumpToEol(io_rText,o_rCount_BackslashedLineBreaks);
+ for ( ; o_rCount_BackslashedLineBreaks > 0; --o_rCount_BackslashedLineBreaks )
+ Dealer().Deal_Eol();
+
+ if (io_rText.CurChar() != NULCH)
+ jumpOverEol(io_rText);
+ io_rText.CutToken();
+ Dealer().Deal_Eol();
+ SetNewToken(0);
+ SetFollowUpContext( pContext_Parent );
+}
+
+void
+Context_Preprocessor::ReadDefine( CharacterSource & io_rText )
+{
+ jumpOverWhite( io_rText );
+ io_rText.CutToken();
+
+ char cNext = '\0';
+ for ( cNext = io_rText.CurChar();
+ static_cast<UINT8>(cNext) > 32 AND cNext != '(';
+ cNext = io_rText.MoveOn() )
+ { }
+
+ bool bMacro = cNext == '(';
+
+ if ( NOT bMacro )
+ {
+ SetNewToken( new Tok_DefineName(io_rText.CutToken()) );
+ SetFollowUpContext( pContext_PP_Definition.Ptr() );
+ }
+ else
+ {
+ SetNewToken( new Tok_MacroName(io_rText.CutToken()) );
+ io_rText.MoveOn();
+ io_rText.CutToken();
+ SetFollowUpContext( pContext_PP_MacroParams.Ptr() );
+ }
+}
+
+
+Context_PP_MacroParams::Context_PP_MacroParams( Cx_Base & i_rFollowUpContext )
+ : Cx_Base(&i_rFollowUpContext),
+ pContext_PP_Definition(&i_rFollowUpContext)
+{
+}
+
+void
+Context_PP_MacroParams::ReadCharChain( CharacterSource & io_rText )
+{
+ uintt nLen;
+
+ jumpOverWhite( io_rText );
+ // KORR_FUTURE Handling line breaks within macro parameters:
+ char cSeparator = jumpTo( io_rText, ',', ')' );
+ csv_assert( cSeparator != 0 );
+
+ static char cBuf[500];
+ // KORR_FUTURE, make it still safer, here:
+ strcpy( cBuf, io_rText.CutToken() ); // SAFE STRCPY (#100211# - checked)
+ for ( nLen = strlen(cBuf);
+ nLen > 0 AND cBuf[nLen-1] < 33;
+ --nLen )
+ { }
+ cBuf[nLen] = '\0';
+ SetNewToken( new Tok_MacroParameter(cBuf) );
+
+ io_rText.MoveOn();
+ io_rText.CutToken();
+ if ( cSeparator == ',')
+ SetFollowUpContext( this );
+ else // Must be ')'
+ SetFollowUpContext( pContext_PP_Definition );
+}
+
+Context_PP_Definition::Context_PP_Definition( TkpContext & i_rFollowUpContext )
+ : Cx_Base(&i_rFollowUpContext),
+ pContext_Parent(&i_rFollowUpContext)
+{
+}
+
+void
+Context_PP_Definition::ReadCharChain( CharacterSource & io_rText )
+{
+ int o_rCount_BackslashedLineBreaks = 0;
+ jumpToEol(io_rText,o_rCount_BackslashedLineBreaks);
+ for ( ; o_rCount_BackslashedLineBreaks > 0; --o_rCount_BackslashedLineBreaks )
+ Dealer().Deal_Eol();
+ SetNewToken( new Tok_PreProDefinition(io_rText.CutToken()) );
+ if (io_rText.CurChar() != NULCH)
+ jumpOverEol(io_rText);
+ Dealer().Deal_Eol();
+}
+
+
+} // namespace cpp
+
+
+
+
+
+
+
+
+
diff --git a/autodoc/source/parser/cpp/cx_c_pp.hxx b/autodoc/source/parser/cpp/cx_c_pp.hxx
new file mode 100644
index 000000000000..726a5e6de05d
--- /dev/null
+++ b/autodoc/source/parser/cpp/cx_c_pp.hxx
@@ -0,0 +1,95 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_CPP_CX_C_PP_HXX
+#define ADC_CPP_CX_C_PP_HXX
+
+// USED SERVICES
+ // BASE CLASSES
+#include <tokens/tkpcontx.hxx>
+#include "cx_base.hxx"
+ // COMPONENTS
+ // PARAMETERS
+
+
+namespace cpp
+{
+
+class Context_Preprocessor : public Cx_Base
+{
+ public:
+ Context_Preprocessor(
+ TkpContext & i_rFollowUpContext );
+ virtual void ReadCharChain(
+ CharacterSource & io_rText );
+ virtual void AssignDealer(
+ Distributor & o_rDealer );
+ private:
+ // Locals
+ void ReadDefault(
+ CharacterSource & io_rText );
+ void ReadDefine(
+ CharacterSource & io_rText );
+
+ // DATA
+ TkpContext * pContext_Parent;
+ Dyn<Cx_Base> pContext_PP_MacroParams;
+ Dyn<Cx_Base> pContext_PP_Definition;
+};
+
+class Context_PP_MacroParams : public Cx_Base
+{
+ public:
+ Context_PP_MacroParams(
+ Cx_Base & i_rFollowUpContext );
+
+ virtual void ReadCharChain(
+ CharacterSource & io_rText );
+ private:
+ // DATA
+ Cx_Base * pContext_PP_Definition;
+};
+
+class Context_PP_Definition : public Cx_Base
+{
+ public:
+ Context_PP_Definition(
+ TkpContext & i_rFollowUpContext );
+
+ virtual void ReadCharChain(
+ CharacterSource & io_rText );
+
+ private:
+ // DATA
+ TkpContext * pContext_Parent;
+};
+
+
+} // namespace cpp
+
+#endif
+
diff --git a/autodoc/source/parser/cpp/cx_c_std.cxx b/autodoc/source/parser/cpp/cx_c_std.cxx
new file mode 100644
index 000000000000..133cb393785c
--- /dev/null
+++ b/autodoc/source/parser/cpp/cx_c_std.cxx
@@ -0,0 +1,529 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "cx_c_std.hxx"
+
+
+// NOT FULLY DECLARED SERVICES
+#include "all_toks.hxx"
+#include "cx_c_pp.hxx"
+#include "cx_c_sub.hxx"
+#include <tools/tkpchars.hxx>
+#include <tokens/tkpstama.hxx>
+#include <x_parse.hxx>
+#include "c_dealer.hxx"
+
+
+namespace cpp {
+
+
+const intt C_nCppInitialNrOfStati = 600;
+const intt C_nStatusSize = 128;
+
+
+
+const uintt nF_fin_Error = 1;
+const uintt nF_fin_CreateWithoutText = 2;
+const uintt nF_fin_CreateWithText = 3;
+const uintt nF_fin_Ignore = 4;
+const uintt nF_fin_EOL = 5;
+const uintt nF_fin_EOF = 6;
+const uintt nF_fin_Bezeichner = 7;
+
+const uintt nF_goto_Preprocessor = 10;
+const uintt nF_goto_Comment = 11;
+const uintt nF_goto_Docu = 12;
+const uintt nF_goto_Const = 13;
+const uintt nF_goto_UnblockMacro = 14;
+
+// Token create functions for the state machine:
+DYN TextToken * TCF_Identifier(const char * text) { return new Tok_Identifier(text); }
+
+DYN TextToken * TCF_operator(const char *) { return new Tok_operator; }
+DYN TextToken * TCF_class(const char *) { return new Tok_class; }
+DYN TextToken * TCF_struct(const char *) { return new Tok_struct; }
+DYN TextToken * TCF_union(const char *) { return new Tok_union; }
+DYN TextToken * TCF_enum(const char *) { return new Tok_enum; }
+DYN TextToken * TCF_typedef(const char *) { return new Tok_typedef; }
+DYN TextToken * TCF_public(const char *) { return new Tok_public; }
+DYN TextToken * TCF_protected(const char *) { return new Tok_protected; }
+DYN TextToken * TCF_private(const char *) { return new Tok_private; }
+DYN TextToken * TCF_template(const char *) { return new Tok_template; }
+DYN TextToken * TCF_virtual(const char *) { return new Tok_virtual; }
+DYN TextToken * TCF_friend(const char *) { return new Tok_friend; }
+DYN TextToken * TCF_Tilde(const char *) { return new Tok_Tilde; }
+DYN TextToken * TCF_const(const char *) { return new Tok_const; }
+DYN TextToken * TCF_volatile(const char *) { return new Tok_volatile; }
+DYN TextToken * TCF_extern(const char *) { return new Tok_extern; }
+DYN TextToken * TCF_static(const char *) { return new Tok_static; }
+DYN TextToken * TCF_mutable(const char *) { return new Tok_mutable; }
+DYN TextToken * TCF_register(const char *) { return new Tok_register; }
+DYN TextToken * TCF_inline(const char *) { return new Tok_inline; }
+DYN TextToken * TCF_explicit(const char *) { return new Tok_explicit; }
+DYN TextToken * TCF_namespace(const char *) { return new Tok_namespace; }
+DYN TextToken * TCF_using(const char *) { return new Tok_using; }
+DYN TextToken * TCF_throw(const char *) { return new Tok_throw; }
+DYN TextToken * TCF_SwBracketOpen(const char *) { return new Tok_SwBracket_Left; }
+DYN TextToken * TCF_SwBracketClose(const char *) { return new Tok_SwBracket_Right; }
+DYN TextToken * TCF_ArBracketOpen(const char *) { return new Tok_ArrayBracket_Left; }
+DYN TextToken * TCF_ArBracketClose(const char *) { return new Tok_ArrayBracket_Right; }
+DYN TextToken * TCF_BracketOpen(const char *) { return new Tok_Bracket_Left; }
+DYN TextToken * TCF_BracketClose(const char *) { return new Tok_Bracket_Right; }
+DYN TextToken * TCF_DblColon(const char *) { return new Tok_DoubleColon; }
+DYN TextToken * TCF_Semikolon(const char *) { return new Tok_Semicolon; }
+DYN TextToken * TCF_Komma(const char *) { return new Tok_Comma; }
+DYN TextToken * TCF_Colon(const char *) { return new Tok_Colon; }
+DYN TextToken * TCF_Zuweisung(const char *) { return new Tok_Assign; }
+DYN TextToken * TCF_Smaller(const char *) { return new Tok_Less; }
+DYN TextToken * TCF_Bigger(const char *) { return new Tok_Greater; }
+DYN TextToken * TCF_Stern(const char *) { return new Tok_Asterix; }
+DYN TextToken * TCF_Ampersand(const char *) { return new Tok_AmpersAnd; }
+DYN TextToken * TCF_Ellipse(const char *) { return new Tok_Ellipse; }
+DYN TextToken * TCF_typename(const char *) { return new Tok_typename; }
+
+ // Operators
+DYN TextToken * TCF_Operator(const char * text) { return new Tok_Operator(text); }
+
+DYN TextToken * TCF_BuiltInType(const char * text) { return new Tok_BuiltInType(text); }
+DYN TextToken * TCF_TypeModifier(const char * text) { return new Tok_TypeSpecializer(text); }
+
+DYN TextToken * TCF_Eof(const char *) { return new Tok_Eof; }
+
+
+
+Context_CppStd::Context_CppStd( DYN autodoc::TkpDocuContext & let_drContext_Docu )
+ : Cx_Base(0),
+ aStateMachine(C_nStatusSize,C_nCppInitialNrOfStati),
+ pDocuContext(&let_drContext_Docu),
+ pContext_Comment(0),
+ pContext_Preprocessor(0),
+ pContext_ConstString(0),
+ pContext_ConstChar(0),
+ pContext_ConstNumeric(0),
+ pContext_UnblockMacro(0)
+{
+ pDocuContext->SetParentContext(*this,"*/");
+
+ pContext_Comment = new Context_Comment(*this);
+ pContext_Preprocessor = new Context_Preprocessor(*this);
+ pContext_ConstString = new Context_ConstString(*this);
+ pContext_ConstChar = new Context_ConstChar(*this);
+ pContext_ConstNumeric = new Context_ConstNumeric(*this);
+ pContext_UnblockMacro = new Context_UnblockMacro(*this);
+
+ SetupStateMachine();
+}
+
+Context_CppStd::~Context_CppStd()
+{
+}
+
+void
+Context_CppStd::ReadCharChain( CharacterSource & io_rText )
+{
+ SetNewToken(0);
+
+ TextToken::F_CRTOK fTokenCreateFunction = 0;
+ StmBoundsStatus & rBound = aStateMachine.GetCharChain(fTokenCreateFunction, io_rText);
+
+ // !!!
+ // The order of the next two lines is essential, because
+ // pFollowUpContext may be changed by PerformStatusFunction() also,
+ // which then MUST override the previous assignment.
+ SetFollowUpContext(rBound.FollowUpContext());
+ PerformStatusFunction(rBound.StatusFunctionNr(), fTokenCreateFunction, io_rText);
+}
+
+void
+Context_CppStd::AssignDealer( Distributor & o_rDealer )
+{
+ Cx_Base::AssignDealer(o_rDealer);
+
+ pDocuContext->AssignDealer(o_rDealer);
+ pContext_Comment->AssignDealer(o_rDealer);
+ pContext_Preprocessor->AssignDealer(o_rDealer);
+ pContext_ConstString->AssignDealer(o_rDealer);
+ pContext_ConstChar->AssignDealer(o_rDealer);
+ pContext_ConstNumeric->AssignDealer(o_rDealer);
+ pContext_UnblockMacro->AssignDealer(o_rDealer);
+}
+
+void
+Context_CppStd::PerformStatusFunction( uintt i_nStatusSignal,
+ F_CRTOK i_fTokenCreateFunction,
+ CharacterSource & io_rText )
+{
+ switch (i_nStatusSignal)
+ {
+ case nF_fin_CreateWithoutText:
+ io_rText.CutToken();
+ csv_assert(i_fTokenCreateFunction != 0);
+ SetNewToken( (*i_fTokenCreateFunction)(0) );
+ break;
+ case nF_fin_CreateWithText:
+ csv_assert(i_fTokenCreateFunction != 0);
+ SetNewToken( (*i_fTokenCreateFunction)(io_rText.CutToken()) );
+ break;
+ case nF_fin_Ignore:
+ io_rText.CutToken();
+ SetNewToken(0);
+ break;
+ case nF_fin_EOL:
+ io_rText.CutToken();
+ SetNewToken(0);
+ Dealer().Deal_Eol();
+ break;
+ case nF_fin_EOF:
+ io_rText.CutToken();
+ SetNewToken( TCF_Eof(0) );
+ break;
+ case nF_fin_Bezeichner:
+ SetNewToken( TCF_Identifier(io_rText.CutToken()) );
+ break;
+
+ case nF_goto_Preprocessor:
+ io_rText.CutToken();
+ SetNewToken(0);
+ break;
+ case nF_goto_Comment:
+ SetNewToken(0);
+ pContext_Comment->SetMode_IsMultiLine( io_rText.CutToken()[1] == '*' );
+ break;
+ case nF_goto_Docu:
+ SetNewToken(0);
+ pDocuContext->SetMode_IsMultiLine( io_rText.CutToken()[1] == '*' );
+ break;
+ case nF_goto_Const:
+ SetNewToken(0);
+ break;
+ case nF_goto_UnblockMacro:
+ SetNewToken(0);
+ break;
+
+ case nF_fin_Error:
+ default:
+ {
+ char cCC = io_rText.CurChar();
+ String sCurChar( &cCC, 1 );
+ throw X_Parser( X_Parser::x_InvalidChar, sCurChar, String::Null_(), 0 );
+ }
+ } // end switch (i_nStatusSignal)
+}
+
+void
+Context_CppStd::SetupStateMachine()
+{
+ // Besondere Array-Stati (kein Tokenabschluss oder Kontextwechsel):
+// const INT16 top = 0; // Top-Status
+ const INT16 wht = 1; // Whitespace-berlese-Status
+ const INT16 bez = 2; // Bezeichner-lese-Status
+
+ // Tokenfinish-Stati:
+ const INT16 finError = 3;
+ const INT16 finIgnore = 4;
+ const INT16 finBezeichner = 5;
+ const INT16 finKeyword = 6;
+ const INT16 finPunctuation = 7;
+ const INT16 finBiType = 8;
+ const INT16 finTypeModifier = 9;
+ const INT16 finEOL = 10;
+ const INT16 finEOF = 11;
+
+ // Kontextwechsel-Stati:
+ const INT16 gotoComment = 12;
+ const INT16 gotoDocu = 13;
+ const INT16 gotoPreprocessor = 14;
+ const INT16 gotoConstString = 15;
+ const INT16 gotoConstChar = 16;
+ const INT16 gotoConstNumeric = 17;
+ const INT16 gotoUnblockMacro = 18;
+
+ // Abbreviations to be used in status tables:
+ const INT16 err = finError;
+ const INT16 fig = finIgnore;
+ const INT16 fbz = finBezeichner;
+ const INT16 fof = finEOF;
+ const INT16 cst = gotoConstString;
+ const INT16 cch = gotoConstChar;
+ const INT16 cnr = gotoConstNumeric;
+
+
+ /// Zeros - '0' - will be replaced by AddToken().
+
+ const INT16 A_nTopStatus[C_nStatusSize] =
+ // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+ {fof,err,err,err,err,err,err,err,err,wht, 0,wht,wht, 0,err,err,
+ err,err,err,err,err,err,err,err,err,err,fof,err,err,err,err,err, // 16 ...
+ wht, 0,cst, 0,err, 0, 0,cch, 0, 0, 0, 0, 0, 0, 0, 0,
+ cnr,cnr,cnr,cnr,cnr,cnr,cnr,cnr,cnr,cnr, 0, 0, 0, 0, 0, 0, // 48 ...
+ 0,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,
+ bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez, 0, 0, 0, 0,bez, // 80 ...
+ 0,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,
+ bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez, 0, 0, 0, 0,err, // 80 ...
+ };
+
+ const INT16 A_nWhitespaceStatus[C_nStatusSize] =
+ // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+ {fof,err,err,err,err,err,err,err,err,wht,fig,wht,wht,fig,err,err,
+ err,err,err,err,err,err,err,err,err,err,fof,err,err,err,err,err, // 16 ...
+ wht,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,
+ fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig, // 48 ...
+ fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,
+ fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig, // 80 ...
+ fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,
+ fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,err
+ };
+
+ const INT16 A_nBezeichnerStatus[C_nStatusSize] =
+ // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+ {fbz,err,err,err,err,err,err,err,err,fbz,fbz,fbz,fbz,fbz,err,err,
+ err,err,err,err,err,err,err,err,err,err,fbz,err,err,err,err,err, // 16 ...
+ fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,
+ bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,fbz,fbz,fbz,fbz,fbz,fbz, // 48 ...
+ fbz,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,
+ bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,fbz,fbz,fbz,fbz,bez, // 80 ...
+ fbz,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,
+ bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,fbz,fbz,fbz,fbz,err
+ };
+
+
+ const INT16 A_nOperatorDefStatus[C_nStatusSize] =
+ // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+ {err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,
+ err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,err, // 16 ...
+ err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,
+ err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,err, // 48 ...
+ err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,
+ err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,err, // 80 ...
+ err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,
+ err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,err
+ };
+
+ const INT16 A_nBezDefStatus[C_nStatusSize] =
+ // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+ {fbz,err,err,err,err,err,err,err,err,fbz,fbz,fbz,fbz,fbz,err,err,
+ err,err,err,err,err,err,err,err,err,err,fbz,err,err,err,err,err, // 16 ...
+ fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,
+ bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,fbz,fbz,fbz,fbz,fbz,fbz, // 48 ...
+ fbz,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,
+ bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,fbz,fbz,fbz,fbz,bez, // 80 ...
+ fbz,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,
+ bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,fbz,fbz,fbz,fbz,err
+ };
+
+ DYN StmArrayStatus * dpStatusTop
+ = new StmArrayStatus( C_nStatusSize, A_nTopStatus, 0, true);
+ DYN StmArrayStatus * dpStatusWhite
+ = new StmArrayStatus( C_nStatusSize, A_nWhitespaceStatus, 0, true);
+ DYN StmArrayStatus * dpStatusBez
+ = new StmArrayStatus( C_nStatusSize, A_nBezeichnerStatus, TCF_Identifier, true);
+
+ DYN StmBoundsStatus * dpBst_finError
+ = new StmBoundsStatus( *this, TkpContext::Null_(), nF_fin_Error, true );
+ DYN StmBoundsStatus * dpBst_finIgnore
+ = new StmBoundsStatus( *this, *this, nF_fin_Ignore, true );
+ DYN StmBoundsStatus * dpBst_finBezeichner
+ = new StmBoundsStatus( *this, *this, nF_fin_Bezeichner, true );
+ DYN StmBoundsStatus * dpBst_finKeyword
+ = new StmBoundsStatus( *this, *this, nF_fin_CreateWithoutText, false );
+ DYN StmBoundsStatus * dpBst_finPunctuation
+ = new StmBoundsStatus( *this, *this, nF_fin_CreateWithText, false );
+ DYN StmBoundsStatus * dpBst_finBiType
+ = new StmBoundsStatus( *this, *this, nF_fin_CreateWithText, false );
+ DYN StmBoundsStatus * dpBst_finTypeModifier
+ = new StmBoundsStatus( *this, *this, nF_fin_CreateWithText, false );
+ DYN StmBoundsStatus * dpBst_finEOL
+ = new StmBoundsStatus( *this, *this, nF_fin_EOL, false );
+ DYN StmBoundsStatus * dpBst_finEOF
+ = new StmBoundsStatus( *this, TkpContext::Null_(), nF_fin_EOF, false );
+
+ DYN StmBoundsStatus * dpBst_gotoComment
+ = new StmBoundsStatus( *this, *pContext_Comment, nF_goto_Comment, false );
+ DYN StmBoundsStatus * dpBst_gotoDocu
+ = new StmBoundsStatus( *this, *pDocuContext, nF_goto_Docu, false );
+ DYN StmBoundsStatus * dpBst_gotoPreprocessor
+ = new StmBoundsStatus( *this, *pContext_Preprocessor, nF_goto_Preprocessor, false );
+ DYN StmBoundsStatus * dpBst_gotoConstString
+ = new StmBoundsStatus( *this, *pContext_ConstString, nF_goto_Const, false );
+ DYN StmBoundsStatus * dpBst_gotoConstChar
+ = new StmBoundsStatus( *this, *pContext_ConstChar, nF_goto_Const, false );
+ DYN StmBoundsStatus * dpBst_gotoConstNumeric
+ = new StmBoundsStatus( *this, *pContext_ConstNumeric, nF_goto_Const, false );
+ DYN StmBoundsStatus * dpBst_gotoUnblockMacro
+ = new StmBoundsStatus( *this, *pContext_UnblockMacro, nF_goto_UnblockMacro, false );
+
+ // dpMain aufbauen:
+ aStateMachine.AddStatus(dpStatusTop);
+
+ aStateMachine.AddStatus(dpStatusWhite);
+ aStateMachine.AddStatus(dpStatusBez);
+
+ aStateMachine.AddStatus(dpBst_finError);
+ aStateMachine.AddStatus(dpBst_finIgnore);
+ aStateMachine.AddStatus(dpBst_finBezeichner);
+ aStateMachine.AddStatus(dpBst_finKeyword);
+ aStateMachine.AddStatus(dpBst_finPunctuation);
+ aStateMachine.AddStatus(dpBst_finBiType);
+ aStateMachine.AddStatus(dpBst_finTypeModifier);
+ aStateMachine.AddStatus(dpBst_finEOL);
+ aStateMachine.AddStatus(dpBst_finEOF);
+
+ aStateMachine.AddStatus(dpBst_gotoComment);
+ aStateMachine.AddStatus(dpBst_gotoDocu);
+ aStateMachine.AddStatus(dpBst_gotoPreprocessor);
+ aStateMachine.AddStatus(dpBst_gotoConstString);
+ aStateMachine.AddStatus(dpBst_gotoConstChar);
+ aStateMachine.AddStatus(dpBst_gotoConstNumeric);
+ aStateMachine.AddStatus(dpBst_gotoUnblockMacro);
+
+ // Identifier
+
+ // Keywords and other unique Tokens
+ aStateMachine.AddToken("operator",TCF_operator,A_nBezDefStatus,finKeyword);
+ aStateMachine.AddToken("class",TCF_class,A_nBezDefStatus,finKeyword);
+ aStateMachine.AddToken("struct",TCF_struct,A_nBezDefStatus,finKeyword);
+ aStateMachine.AddToken("union",TCF_union,A_nBezDefStatus,finKeyword);
+ aStateMachine.AddToken("enum",TCF_enum,A_nBezDefStatus,finKeyword);
+ aStateMachine.AddToken("typedef",TCF_typedef,A_nBezDefStatus,finKeyword);
+ aStateMachine.AddToken("public",TCF_public,A_nBezDefStatus,finKeyword);
+ aStateMachine.AddToken("protected",TCF_protected,A_nBezDefStatus,finKeyword);
+ aStateMachine.AddToken("private",TCF_private,A_nBezDefStatus,finKeyword);
+ aStateMachine.AddToken("template",TCF_template,A_nBezDefStatus,finKeyword);
+ aStateMachine.AddToken("virtual",TCF_virtual,A_nBezDefStatus,finKeyword);
+ aStateMachine.AddToken("friend",TCF_friend,A_nBezDefStatus,finKeyword);
+ aStateMachine.AddToken("~",TCF_Tilde,A_nOperatorDefStatus,finKeyword);
+ aStateMachine.AddToken("const",TCF_const,A_nBezDefStatus,finKeyword);
+ aStateMachine.AddToken("volatile",TCF_volatile,A_nBezDefStatus,finKeyword);
+ aStateMachine.AddToken("extern",TCF_extern,A_nBezDefStatus,finKeyword);
+ aStateMachine.AddToken("static",TCF_static,A_nBezDefStatus,finKeyword);
+ aStateMachine.AddToken("mutable",TCF_mutable,A_nBezDefStatus,finKeyword);
+ aStateMachine.AddToken("register",TCF_register,A_nBezDefStatus,finKeyword);
+ aStateMachine.AddToken("inline",TCF_inline,A_nBezDefStatus,finKeyword);
+ aStateMachine.AddToken("explicit",TCF_explicit,A_nBezDefStatus,finKeyword);
+ aStateMachine.AddToken("namespace",TCF_namespace,A_nBezDefStatus,finKeyword);
+ aStateMachine.AddToken("using",TCF_using,A_nBezDefStatus,finKeyword);
+ aStateMachine.AddToken("throw",TCF_throw,A_nBezDefStatus,finKeyword);
+ aStateMachine.AddToken("{",TCF_SwBracketOpen,A_nOperatorDefStatus,finKeyword);
+ aStateMachine.AddToken("}",TCF_SwBracketClose,A_nOperatorDefStatus,finKeyword);
+ aStateMachine.AddToken("[",TCF_ArBracketOpen,A_nOperatorDefStatus,finKeyword);
+ aStateMachine.AddToken("]",TCF_ArBracketClose,A_nOperatorDefStatus,finKeyword);
+ aStateMachine.AddToken("(",TCF_BracketOpen,A_nOperatorDefStatus,finKeyword);
+ aStateMachine.AddToken(")",TCF_BracketClose,A_nOperatorDefStatus,finKeyword);
+ aStateMachine.AddToken("::",TCF_DblColon,A_nOperatorDefStatus,finKeyword);
+ aStateMachine.AddToken(";",TCF_Semikolon,A_nOperatorDefStatus,finKeyword);
+ aStateMachine.AddToken(",",TCF_Komma,A_nOperatorDefStatus,finKeyword);
+ aStateMachine.AddToken(":",TCF_Colon,A_nOperatorDefStatus,finKeyword);
+ aStateMachine.AddToken("=",TCF_Zuweisung,A_nOperatorDefStatus,finKeyword);
+ aStateMachine.AddToken("<",TCF_Smaller,A_nOperatorDefStatus,finKeyword);
+ aStateMachine.AddToken(">",TCF_Bigger,A_nOperatorDefStatus,finKeyword);
+ aStateMachine.AddToken("*",TCF_Stern,A_nOperatorDefStatus,finKeyword);
+ aStateMachine.AddToken("&",TCF_Ampersand,A_nOperatorDefStatus,finKeyword);
+ aStateMachine.AddToken("...",TCF_Ellipse,A_nOperatorDefStatus,finKeyword);
+ aStateMachine.AddToken("typename",TCF_typename,A_nOperatorDefStatus,finKeyword);
+
+ // Operators
+ aStateMachine.AddToken("==",TCF_Operator,A_nOperatorDefStatus,finPunctuation);
+ aStateMachine.AddToken("!=",TCF_Operator,A_nOperatorDefStatus,finPunctuation);
+ aStateMachine.AddToken("<=",TCF_Operator,A_nOperatorDefStatus,finPunctuation);
+ aStateMachine.AddToken(">=",TCF_Operator,A_nOperatorDefStatus,finPunctuation);
+ aStateMachine.AddToken("&&",TCF_Operator,A_nOperatorDefStatus,finPunctuation);
+ aStateMachine.AddToken("||",TCF_Operator,A_nOperatorDefStatus,finPunctuation);
+ aStateMachine.AddToken("!",TCF_Operator,A_nOperatorDefStatus,finPunctuation);
+ aStateMachine.AddToken("new",TCF_Operator,A_nBezDefStatus,finPunctuation);
+ aStateMachine.AddToken("delete",TCF_Operator,A_nBezDefStatus,finPunctuation);
+ aStateMachine.AddToken("sizeof",TCF_Operator,A_nBezDefStatus,finPunctuation);
+ aStateMachine.AddToken("typeid",TCF_Operator,A_nBezDefStatus,finPunctuation);
+ aStateMachine.AddToken("+",TCF_Operator,A_nOperatorDefStatus,finPunctuation);
+ aStateMachine.AddToken("-",TCF_Operator,A_nOperatorDefStatus,finPunctuation);
+ aStateMachine.AddToken("/",TCF_Operator,A_nOperatorDefStatus,finPunctuation);
+ aStateMachine.AddToken("%",TCF_Operator,A_nOperatorDefStatus,finPunctuation);
+ aStateMachine.AddToken("^",TCF_Operator,A_nOperatorDefStatus,finPunctuation);
+ aStateMachine.AddToken("|",TCF_Operator,A_nOperatorDefStatus,finPunctuation);
+ aStateMachine.AddToken("<<",TCF_Operator,A_nOperatorDefStatus,finPunctuation);
+ aStateMachine.AddToken(">>",TCF_Operator,A_nOperatorDefStatus,finPunctuation);
+ aStateMachine.AddToken(".",TCF_Operator,A_nOperatorDefStatus,finPunctuation);
+ aStateMachine.AddToken("->",TCF_Operator,A_nOperatorDefStatus,finPunctuation);
+ aStateMachine.AddToken("?",TCF_Operator,A_nOperatorDefStatus,finPunctuation);
+ aStateMachine.AddToken("+=",TCF_Operator,A_nOperatorDefStatus,finPunctuation);
+ aStateMachine.AddToken("-=",TCF_Operator,A_nOperatorDefStatus,finPunctuation);
+ aStateMachine.AddToken("*=",TCF_Operator,A_nOperatorDefStatus,finPunctuation);
+ aStateMachine.AddToken("/=",TCF_Operator,A_nOperatorDefStatus,finPunctuation);
+ aStateMachine.AddToken("%=",TCF_Operator,A_nOperatorDefStatus,finPunctuation);
+ aStateMachine.AddToken("&=",TCF_Operator,A_nOperatorDefStatus,finPunctuation);
+ aStateMachine.AddToken("|=",TCF_Operator,A_nOperatorDefStatus,finPunctuation);
+ aStateMachine.AddToken("^=",TCF_Operator,A_nOperatorDefStatus,finPunctuation);
+ aStateMachine.AddToken("<<=",TCF_Operator,A_nOperatorDefStatus,finPunctuation);
+ aStateMachine.AddToken(">>=",TCF_Operator,A_nOperatorDefStatus,finPunctuation);
+
+ // Builtin types
+ aStateMachine.AddToken("char", TCF_BuiltInType, A_nBezDefStatus, finBiType);
+ aStateMachine.AddToken("short", TCF_BuiltInType, A_nBezDefStatus, finBiType);
+ aStateMachine.AddToken("int", TCF_BuiltInType, A_nBezDefStatus, finBiType);
+ aStateMachine.AddToken("long", TCF_BuiltInType, A_nBezDefStatus, finBiType);
+ aStateMachine.AddToken("float", TCF_BuiltInType, A_nBezDefStatus, finBiType);
+ aStateMachine.AddToken("double",TCF_BuiltInType, A_nBezDefStatus, finBiType);
+ aStateMachine.AddToken("wchar_t",TCF_BuiltInType, A_nBezDefStatus, finBiType);
+ aStateMachine.AddToken("size_t",TCF_BuiltInType, A_nBezDefStatus, finBiType);
+
+ // Type modifiers
+ aStateMachine.AddToken("signed", TCF_TypeModifier, A_nBezDefStatus, finTypeModifier);
+ aStateMachine.AddToken("unsigned", TCF_TypeModifier, A_nBezDefStatus, finTypeModifier);
+
+ // To ignore
+ aStateMachine.AddToken("auto", 0, A_nBezDefStatus, finIgnore);
+ aStateMachine.AddToken("_cdecl", 0, A_nBezDefStatus, finIgnore);
+ aStateMachine.AddToken("__cdecl", 0, A_nBezDefStatus, finIgnore);
+ aStateMachine.AddToken("__stdcall", 0, A_nBezDefStatus, finIgnore);
+ aStateMachine.AddToken("__fastcall",0, A_nBezDefStatus, finIgnore);
+ aStateMachine.AddToken("/**/", 0, A_nOperatorDefStatus,finIgnore);
+
+ // Context changers
+ aStateMachine.AddToken("#", 0, A_nOperatorDefStatus, gotoPreprocessor);
+ aStateMachine.AddToken("#undef",0, A_nOperatorDefStatus, gotoPreprocessor);
+ aStateMachine.AddToken("#unblock-",
+ 0, A_nOperatorDefStatus, gotoUnblockMacro);
+ aStateMachine.AddToken("/*", 0, A_nOperatorDefStatus, gotoComment);
+ aStateMachine.AddToken("//", 0, A_nOperatorDefStatus, gotoComment);
+ aStateMachine.AddToken("/**", 0, A_nOperatorDefStatus, gotoDocu);
+ aStateMachine.AddToken("///", 0, A_nOperatorDefStatus, gotoDocu);
+
+ // Line ends
+ // regular
+ aStateMachine.AddToken("\r\n", 0, A_nOperatorDefStatus, finEOL);
+ aStateMachine.AddToken("\n", 0, A_nOperatorDefStatus, finEOL);
+ aStateMachine.AddToken("\r", 0, A_nOperatorDefStatus, finEOL);
+ // To ignore in some cases(may be only at preprocessor?), but
+ // linecount has to be incremented.
+ aStateMachine.AddToken("\\\r\n",0, A_nOperatorDefStatus, finEOL);
+ aStateMachine.AddToken("\\\n", 0, A_nOperatorDefStatus, finEOL);
+ aStateMachine.AddToken("\\\r", 0, A_nOperatorDefStatus, finEOL);
+};
+
+
+} // namespace cpp
+
diff --git a/autodoc/source/parser/cpp/cx_c_std.hxx b/autodoc/source/parser/cpp/cx_c_std.hxx
new file mode 100644
index 000000000000..b9c946c3c2a6
--- /dev/null
+++ b/autodoc/source/parser/cpp/cx_c_std.hxx
@@ -0,0 +1,92 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_CPP_CX_C_STD_HXX
+#define ADC_CPP_CX_C_STD_HXX
+
+// USED SERVICES
+ // BASE CLASSES
+#include <tokens/tkpcontx.hxx>
+#include "cx_base.hxx"
+ // COMPONENTS
+#include <tokens/tkpstama.hxx>
+ // PARAMETERS
+
+
+
+namespace cpp {
+
+class Context_Comment;
+
+/**
+*/
+class Context_CppStd : public Cx_Base,
+ private StateMachineContext
+{
+ public:
+ // LIFECYCLE
+ Context_CppStd(
+ DYN autodoc::TkpDocuContext &
+ let_drContext_Docu );
+ ~Context_CppStd();
+ // OPERATIONS
+ virtual void ReadCharChain(
+ CharacterSource & io_rText );
+ virtual void AssignDealer(
+ Distributor & o_rDealer );
+ private:
+ // SERVICE FUNCTIONS
+ void PerformStatusFunction(
+ uintt i_nStatusSignal,
+ StmArrayStatus::F_CRTOK
+ i_fTokenCreateFunction,
+ CharacterSource & io_rText );
+ void SetupStateMachine();
+
+ // DATA
+ StateMachine aStateMachine;
+
+ // Contexts
+ Dyn<autodoc::TkpDocuContext>
+ pDocuContext;
+
+ Dyn<Context_Comment>
+ pContext_Comment;
+ Dyn<Cx_Base> pContext_Preprocessor;
+ Dyn<Cx_Base> pContext_ConstString;
+ Dyn<Cx_Base> pContext_ConstChar;
+ Dyn<Cx_Base> pContext_ConstNumeric;
+ Dyn<Cx_Base> pContext_UnblockMacro;
+};
+
+
+
+} // namespace cpp
+
+
+#endif
+
diff --git a/autodoc/source/parser/cpp/cx_c_sub.cxx b/autodoc/source/parser/cpp/cx_c_sub.cxx
new file mode 100644
index 000000000000..266e5e2c6c53
--- /dev/null
+++ b/autodoc/source/parser/cpp/cx_c_sub.cxx
@@ -0,0 +1,157 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "cx_c_sub.hxx"
+
+
+
+// NOT FULLY DECLARED SERVICES
+#include <ctype.h>
+#include "c_dealer.hxx"
+#include <tokens/parseinc.hxx>
+#include <x_parse.hxx>
+#include "all_toks.hxx"
+
+
+namespace cpp {
+
+
+
+void
+Context_Comment::ReadCharChain( CharacterSource & io_rText )
+{
+ // KORR_FUTURE
+ // Counting of lines must be implemented.
+ if (bCurrentModeIsMultiline)
+ {
+ char cNext = NULCH;
+
+ do {
+ do {
+ cNext = jumpTo( io_rText,'*',char(10) );
+ if (cNext == NULCH)
+ throw X_Parser( X_Parser::x_UnexpectedEOF, "", String::Null_(), 0 );
+ else if ( cNext == char(10) )
+ {
+ jumpOverEol(io_rText);
+ Dealer().Deal_Eol();
+ }
+ } while ( cNext != '*');
+ cNext = jumpOver(io_rText,'*');
+ if (cNext == NULCH)
+ throw X_Parser( X_Parser::x_UnexpectedEOF, "", String::Null_(), 0 );
+ } while (cNext != '/');
+ io_rText.MoveOn();
+ io_rText.CutToken();
+ SetNewToken(0);
+ }
+ else //
+ {
+ int o_rCount_BackslashedLineBreaks = 0;
+ jumpToEol(io_rText,o_rCount_BackslashedLineBreaks);
+ for ( ; o_rCount_BackslashedLineBreaks > 0; --o_rCount_BackslashedLineBreaks )
+ Dealer().Deal_Eol();
+
+ if (io_rText.CurChar() != NULCH)
+ jumpOverEol(io_rText);
+ io_rText.CutToken();
+ Dealer().Deal_Eol();
+ SetNewToken(0);
+ } // endif
+}
+
+
+void
+Context_ConstString::ReadCharChain( CharacterSource & io_rText )
+{
+ char cNext = io_rText.MoveOn();
+
+ while (cNext != '"')
+ { // Get one complete string constant: "...."
+ while (cNext != '"' AND cNext != '\\')
+ { // Get string till next '\\'
+ cNext = io_rText.MoveOn();
+ }
+ if (cNext == '\\')
+ {
+ io_rText.MoveOn();
+ cNext = io_rText.MoveOn();
+ }
+ }
+ io_rText.MoveOn();
+ SetNewToken(new Tok_Constant(io_rText.CutToken()));
+}
+
+void
+Context_ConstChar::ReadCharChain( CharacterSource & io_rText )
+{
+ char cNext = io_rText.MoveOn();
+
+ while (cNext != '\'')
+ { // Get one complete char constant: "...."
+ while (cNext != '\'' AND cNext != '\\')
+ { // Get string till next '\\'
+ cNext = io_rText.MoveOn();
+ }
+ if (cNext == '\\')
+ {
+ io_rText.MoveOn();
+ cNext = io_rText.MoveOn();
+ }
+ }
+ io_rText.MoveOn();
+ SetNewToken(new Tok_Constant(io_rText.CutToken()));
+}
+
+void
+Context_ConstNumeric::ReadCharChain(CharacterSource & io_rText)
+{
+ char cNext = 0;
+
+ do {
+ do {
+ cNext = static_cast<char>( tolower(io_rText.MoveOn()) );
+ } while ( (cNext != 'e' AND isalnum(cNext)) OR cNext == '.');
+ if (cNext == 'e')
+ {
+ cNext = io_rText.MoveOn();
+ if (cNext == '+' OR cNext == '-')
+ cNext = io_rText.MoveOn();
+ } // endif
+ } while (isalnum(cNext) OR cNext == '.'); // Reicht aus, wenn Zahlen korrekt geschrieben sind
+ SetNewToken(new Tok_Constant(io_rText.CutToken()));
+}
+
+void
+Context_UnblockMacro::ReadCharChain(CharacterSource & io_rText)
+{
+ jumpToWhite(io_rText);
+ SetNewToken(new Tok_UnblockMacro( io_rText.CutToken() + strlen("#unblock-") ));
+}
+
+} // namespace cpp
diff --git a/autodoc/source/parser/cpp/cx_c_sub.hxx b/autodoc/source/parser/cpp/cx_c_sub.hxx
new file mode 100644
index 000000000000..3bff9a6e52d8
--- /dev/null
+++ b/autodoc/source/parser/cpp/cx_c_sub.hxx
@@ -0,0 +1,103 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_CPP_CX_C_SUB_HXX
+#define ADC_CPP_CX_C_SUB_HXX
+
+// USED SERVICES
+ // BASE CLASSES
+#include <tokens/tkpcontx.hxx>
+#include "cx_base.hxx"
+ // COMPONENTS
+ // PARAMETERS
+
+
+namespace cpp {
+
+
+class Context_Comment : public Cx_Base
+{
+ public:
+ Context_Comment(
+ TkpContext & i_rFollowUpContext )
+ : Cx_Base(&i_rFollowUpContext) {}
+ virtual void ReadCharChain(
+ CharacterSource & io_rText );
+ void SetMode_IsMultiLine(
+ bool i_bTrue )
+ { bCurrentModeIsMultiline = i_bTrue; }
+ private:
+ bool bCurrentModeIsMultiline;
+};
+
+class Context_ConstString : public Cx_Base
+{
+ public:
+ Context_ConstString(
+ TkpContext & i_rFollowUpContext )
+ : Cx_Base(&i_rFollowUpContext) {}
+ virtual void ReadCharChain(
+ CharacterSource & io_rText );
+};
+
+class Context_ConstChar : public Cx_Base
+{
+ public:
+ Context_ConstChar(
+ TkpContext & i_rFollowUpContext )
+ : Cx_Base(&i_rFollowUpContext) {}
+ virtual void ReadCharChain(
+ CharacterSource & io_rText );
+};
+
+class Context_ConstNumeric : public Cx_Base
+{
+ public:
+ Context_ConstNumeric(
+ TkpContext & i_rFollowUpContext )
+ : Cx_Base(&i_rFollowUpContext) {}
+ virtual void ReadCharChain(
+ CharacterSource & io_rText );
+};
+
+class Context_UnblockMacro : public Cx_Base
+{
+ public:
+ Context_UnblockMacro(
+ TkpContext & i_rFollowUpContext )
+ : Cx_Base(&i_rFollowUpContext) {}
+ virtual void ReadCharChain(
+ CharacterSource & io_rText );
+};
+
+
+
+} // namespace cpp
+
+
+#endif
+
diff --git a/autodoc/source/parser/cpp/cxt2ary.cxx b/autodoc/source/parser/cpp/cxt2ary.cxx
new file mode 100644
index 000000000000..b78f4496b95f
--- /dev/null
+++ b/autodoc/source/parser/cpp/cxt2ary.cxx
@@ -0,0 +1,357 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "cxt2ary.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include <ary/entity.hxx>
+#include <ary/cpp/c_class.hxx>
+#include <ary/cpp/c_define.hxx>
+#include <ary/cpp/c_enum.hxx>
+#include <ary/cpp/c_enuval.hxx>
+#include <ary/cpp/c_funct.hxx>
+#include <ary/cpp/c_macro.hxx>
+#include <ary/cpp/c_tydef.hxx>
+#include <ary/cpp/c_vari.hxx>
+#include <ary/cpp/c_gate.hxx>
+#include <ary/cpp/cp_ce.hxx>
+#include <ary/loc/loc_file.hxx>
+#include <ary/doc/d_oldcppdocu.hxx>
+#include <ary/info/docstore.hxx>
+#include "icprivow.hxx"
+
+// Implementationheaders, only to be used in this file!
+#include "sfscope.hxx"
+#include "sownstck.hxx"
+#include "sdocdist.hxx"
+#include "srecover.hxx"
+
+
+
+
+
+namespace cpp
+{
+
+using ary::cpp::E_Protection;
+
+ContextForAry::ContextForAry( ary::cpp::Gate & io_rAryGate )
+ : pGate(&io_rAryGate),
+ aTokenResult(),
+ pFileScopeInfo( new S_FileScopeInfo ),
+ pOwnerStack( new S_OwnerStack ),
+ pDocuDistributor( new S_DocuDistributor ),
+ pRecoveryGuard( new S_RecoveryGuard )
+{
+ OpenNamespace( pGate->Ces().GlobalNamespace() );
+}
+
+ContextForAry::~ContextForAry()
+{
+}
+
+ary::loc::File &
+ContextForAry::inq_CurFile() const
+{
+ csv_assert(pFileScopeInfo->pCurFile != 0);
+
+ return *pFileScopeInfo->pCurFile;
+}
+
+ary::cpp::Namespace &
+ContextForAry::inq_CurNamespace() const
+{
+ return pOwnerStack->CurNamespace();
+}
+
+ary::cpp::Class *
+ContextForAry::inq_CurClass() const
+{
+ return pOwnerStack->CurClass();
+}
+
+ary::cpp::Enum *
+ContextForAry::inq_CurEnum() const
+{
+ return pOwnerStack->CurEnum();
+}
+
+
+ary::cpp::InputContext::Owner &
+ContextForAry::inq_CurOwner() const
+{
+ return pOwnerStack->CurOwner();
+}
+
+E_Protection
+ContextForAry::inq_CurProtection() const
+{
+ return pOwnerStack->CurProtection();
+}
+
+void
+ContextForAry::do_SetTokenResult( E_TokenDone i_eDone,
+ E_EnvStackAction i_eWhat2DoWithEnvStack,
+ ParseEnvironment * i_pParseEnv2Push )
+{
+ aTokenResult.eDone = i_eDone;
+ aTokenResult.eStackAction = i_eWhat2DoWithEnvStack;
+ aTokenResult.pEnv2Push = i_pParseEnv2Push;
+}
+
+void
+ContextForAry::do_OpenNamespace( ary::cpp::Namespace & io_rOpenedNamespace )
+{
+ pOwnerStack->OpenNamespace( io_rOpenedNamespace );
+}
+
+void
+ContextForAry::do_OpenExternC( bool )
+{
+ pOwnerStack->OpenExternC();
+ // KORR_FUTURE
+ // use i_bOnlyForOneDeclaration
+}
+
+void
+ContextForAry::do_OpenClass( ary::cpp::Class & io_rOpenedClass )
+{
+ pOwnerStack->OpenClass(io_rOpenedClass);
+ pDocuDistributor->SetCurrentlyStoredRe(io_rOpenedClass);
+}
+
+void
+ContextForAry::do_OpenEnum( ary::cpp::Enum & io_rOpenedEnum )
+{
+ pOwnerStack->OpenEnum(io_rOpenedEnum);
+ pDocuDistributor->SetCurrentlyStoredRe(io_rOpenedEnum);
+}
+
+void
+ContextForAry::do_CloseBlock()
+{
+ pOwnerStack->CloseBlock();
+}
+
+void
+ContextForAry::do_CloseClass()
+{
+ pOwnerStack->CloseClass();
+}
+
+void
+ContextForAry::do_CloseEnum()
+{
+ pOwnerStack->CloseEnum();
+}
+
+void
+ContextForAry::do_SetCurProtection( ary::cpp::E_Protection i_eProtection )
+{
+ pOwnerStack->SetCurProtection(i_eProtection);
+}
+
+void
+ContextForAry::do_OpenTemplate( const StringVector & i_rParameters )
+{
+ pFileScopeInfo->pCurTemplateParameters = new StringVector(i_rParameters);
+}
+
+DYN StringVector *
+ContextForAry::do_Get_CurTemplateParameters()
+{
+ return pFileScopeInfo->pCurTemplateParameters.Release();
+}
+
+void
+ContextForAry::do_Close_OpenTemplate()
+{
+ if (pFileScopeInfo->pCurTemplateParameters)
+ delete pFileScopeInfo->pCurTemplateParameters.Release();
+}
+
+void
+ContextForAry::do_Event_Class_FinishedBase( const String & )
+{
+ // KORR_FUTURE
+}
+
+void
+ContextForAry::do_Event_Store_Typedef( ary::cpp::Typedef & io_rTypedef )
+{
+ pDocuDistributor->SetCurrentlyStoredRe(io_rTypedef);
+}
+
+void
+ContextForAry::do_Event_Store_EnumValue( ary::cpp::EnumValue & io_rEnumValue )
+{
+ pDocuDistributor->SetCurrentlyStoredRe(io_rEnumValue);
+}
+
+void
+ContextForAry::do_Event_Store_CppDefinition( ary::cpp::DefineEntity & io_rDefinition )
+{
+ pDocuDistributor->SetCurrentlyStoredRe(io_rDefinition);
+}
+
+void
+ContextForAry::do_Event_EnterFunction_ParameterList()
+{
+ // KORR_FUTURE
+ // Inform pDocuDistributor about possibility of parameters' inline documentation.
+}
+
+void
+ContextForAry::do_Event_Function_FinishedParameter( const String & )
+{
+ // KORR_FUTURE
+}
+
+void
+ContextForAry::do_Event_LeaveFunction_ParameterList()
+{
+ // KORR_FUTURE
+}
+
+void
+ContextForAry::do_Event_EnterFunction_Implementation()
+{
+ // KORR_FUTURE
+}
+
+void
+ContextForAry::do_Event_LeaveFunction_Implementation()
+{
+ // KORR_FUTURE
+}
+
+void
+ContextForAry::do_Event_Store_Function( ary::cpp::Function & io_rFunction )
+{
+ pDocuDistributor->SetCurrentlyStoredRe(io_rFunction);
+}
+
+
+void
+ContextForAry::do_Event_Store_Variable( ary::cpp::Variable & io_rVariable )
+{
+ pDocuDistributor->SetCurrentlyStoredRe(io_rVariable);
+}
+
+void
+ContextForAry::do_TakeDocu( DYN ary::doc::OldCppDocu & let_drInfo )
+{
+ let_drInfo.Store2(*pDocuDistributor);
+}
+
+void
+ContextForAry::do_StartWaitingFor_Recovery()
+{
+ pRecoveryGuard->StartWaitingFor_Recovery();
+}
+
+ary::cpp::Gate &
+ContextForAry::inq_AryGate() const
+{
+ return * const_cast< ary::cpp::Gate* >(pGate);
+}
+
+const ary::cpp::InputContext &
+ContextForAry::inq_Context() const
+{
+ return *this;
+}
+
+String
+ContextForAry::inq_CurFileName() const
+{
+ return pFileScopeInfo->pCurFile != 0
+ ? pFileScopeInfo->pCurFile->LocalName()
+ : String::Null_();
+}
+
+uintt
+ContextForAry::inq_LineCount() const
+{
+ return pFileScopeInfo->nLineCount;
+}
+
+bool
+ContextForAry::inq_IsWaitingFor_Recovery() const
+{
+ return pRecoveryGuard->IsWithinRecovery();
+}
+
+bool
+ContextForAry::inq_IsExternC() const
+{
+ return pOwnerStack->IsExternC();
+}
+
+void
+ContextForAry::do_SetCurFile( ary::loc::File & io_rCurFile )
+{
+ pFileScopeInfo->pCurFile = &io_rCurFile;
+ pFileScopeInfo->nLineCount = 0;
+ pFileScopeInfo->pCurTemplateParameters = 0;
+
+ pOwnerStack->Reset();
+ pDocuDistributor->Reset();
+ pRecoveryGuard->Reset();
+}
+
+void
+ContextForAry::do_Event_IncrLineCount()
+{
+ ++pFileScopeInfo->nLineCount;
+ pDocuDistributor->Event_LineBreak();
+}
+
+void
+ContextForAry::do_Event_SwBracketOpen()
+{
+ pRecoveryGuard->Hdl_SwBracketOpen();
+}
+
+void
+ContextForAry::do_Event_SwBracketClose()
+{
+ pRecoveryGuard->Hdl_SwBracketClose();
+}
+
+void
+ContextForAry::do_Event_Semicolon()
+{
+ pRecoveryGuard->Hdl_Semicolon();
+}
+
+
+
+
+} // namespace cpp
diff --git a/autodoc/source/parser/cpp/cxt2ary.hxx b/autodoc/source/parser/cpp/cxt2ary.hxx
new file mode 100644
index 000000000000..977d526d0d31
--- /dev/null
+++ b/autodoc/source/parser/cpp/cxt2ary.hxx
@@ -0,0 +1,198 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_CPP_CTX2ARY_HXX
+#define ADC_CPP_CTX2ARY_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <ary/cpp/inpcontx.hxx>
+#include <doc_deal.hxx>
+#include "pev.hxx"
+#include "fevnthdl.hxx"
+ // COMPONENTS
+ // PARAMETERS
+
+namespace ary
+{
+namespace loc
+{
+ class File;
+}
+}
+
+
+
+namespace cpp
+{
+
+
+/** @descr
+ This class provides information about the context of an
+ CodeEntity, which is going to be stored in the repository.
+ The information is used mainly by class ary::cpp::Gate.
+
+ Also it provides information for the parser about actual
+ state of several public variables.
+
+ @todo
+ Include events, which allow correct storing of inline
+ documentation after enum values, parameters,
+ base classes.
+*/
+class ContextForAry : public ary::cpp::InputContext,
+ public cpp::PeEnvironment,
+ public cpp::FileScope_EventHandler,
+ public DocuDealer
+{
+ public:
+ // LIFECYCLE
+ ContextForAry(
+ ary::cpp::Gate & io_rAryGate );
+ virtual ~ContextForAry();
+
+ // OPERATIONS
+ void ResetResult() { aTokenResult.Reset(); }
+
+ // INQUIRY
+ const TokenProcessing_Result &
+ CurResult() const { return aTokenResult; }
+ // ACCESS
+ TokenProcessing_Result &
+ CurResult() { return aTokenResult; }
+
+ private:
+ // Interface ary::cpp::InputContext:
+ virtual ary::loc::File &
+ inq_CurFile() const;
+ virtual ary::cpp::Namespace &
+ inq_CurNamespace() const;
+ virtual ary::cpp::Class *
+ inq_CurClass() const;
+ virtual ary::cpp::Enum *
+ inq_CurEnum() const;
+
+ virtual Owner & inq_CurOwner() const;
+ virtual ary::cpp::E_Protection
+ inq_CurProtection() const;
+
+ // Interface PeEnvironment
+ virtual void do_SetTokenResult(
+ E_TokenDone i_eDone,
+ E_EnvStackAction i_eWhat2DoWithEnvStack,
+ ParseEnvironment * i_pParseEnv2Push );
+ virtual void do_OpenNamespace(
+ ary::cpp::Namespace &
+ io_rOpenedNamespace );
+ virtual void do_OpenExternC(
+ bool i_bOnlyForOneDeclaration );
+ virtual void do_OpenClass(
+ ary::cpp::Class & io_rOpenedClass );
+ virtual void do_OpenEnum(
+ ary::cpp::Enum & io_rOpenedEnum );
+ virtual void do_CloseBlock();
+ virtual void do_CloseClass();
+ virtual void do_CloseEnum();
+ virtual void do_SetCurProtection(
+ ary::cpp::E_Protection
+ i_eProtection );
+ virtual void do_OpenTemplate(
+ const StringVector &
+ i_rParameters );
+ virtual DYN StringVector *
+ do_Get_CurTemplateParameters();
+ virtual void do_Close_OpenTemplate();
+ virtual void do_Event_Class_FinishedBase(
+ const String & i_sBaseName );
+
+ virtual void do_Event_Store_Typedef(
+ ary::cpp::Typedef & io_rTypedef );
+ virtual void do_Event_Store_EnumValue(
+ ary::cpp::EnumValue &
+ io_rEnumValue );
+ virtual void do_Event_Store_CppDefinition(
+ ary::cpp::DefineEntity &
+ io_rDefinition );
+ virtual void do_Event_EnterFunction_ParameterList();
+ virtual void do_Event_Function_FinishedParameter(
+ const String & i_sParameterName );
+ virtual void do_Event_LeaveFunction_ParameterList();
+ virtual void do_Event_EnterFunction_Implementation();
+ virtual void do_Event_LeaveFunction_Implementation();
+ virtual void do_Event_Store_Function(
+ ary::cpp::Function &
+ io_rFunction );
+ virtual void do_Event_Store_Variable(
+ ary::cpp::Variable &
+ io_rVariable );
+ virtual void do_TakeDocu(
+ DYN ary::doc::OldCppDocu &
+ let_drInfo );
+ virtual void do_StartWaitingFor_Recovery();
+ virtual ary::cpp::Gate &
+ inq_AryGate() const;
+ virtual const ary::cpp::InputContext &
+ inq_Context() const;
+ virtual String inq_CurFileName() const;
+ virtual uintt inq_LineCount() const;
+ virtual bool inq_IsWaitingFor_Recovery() const;
+ virtual bool inq_IsExternC() const;
+
+ // Interface FileScope_EventHandler
+ virtual void do_SetCurFile(
+ ary::loc::File & io_rCurFile );
+ virtual void do_Event_IncrLineCount();
+ virtual void do_Event_SwBracketOpen();
+ virtual void do_Event_SwBracketClose();
+ virtual void do_Event_Semicolon();
+
+ // Local types
+ struct S_FileScopeInfo;
+ struct S_OwnerStack;
+ struct S_DocuDistributor;
+ struct S_RecoveryGuard;
+
+ // DATA
+ ary::cpp::Gate * pGate;
+ TokenProcessing_Result
+ aTokenResult;
+ Dyn<S_FileScopeInfo>
+ pFileScopeInfo;
+ Dyn<S_OwnerStack> pOwnerStack;
+ Dyn<S_DocuDistributor>
+ pDocuDistributor;
+ Dyn<S_RecoveryGuard>
+ pRecoveryGuard;
+};
+
+
+
+
+} // namespace cpp
+#endif
diff --git a/autodoc/source/parser/cpp/defdescr.cxx b/autodoc/source/parser/cpp/defdescr.cxx
new file mode 100644
index 000000000000..f69c433293fb
--- /dev/null
+++ b/autodoc/source/parser/cpp/defdescr.cxx
@@ -0,0 +1,225 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "defdescr.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include <prprpr.hxx>
+
+
+
+
+namespace cpp
+{
+
+
+
+
+DefineDescription::DefineDescription( const String & i_sName,
+ const str_vector & i_rDefinition )
+ : sName(i_sName),
+ // aParams,
+ aDefinition(i_rDefinition),
+ eDefineType(type_define)
+{
+}
+
+DefineDescription::DefineDescription( const String & i_sName,
+ const str_vector & i_rParams,
+ const str_vector & i_rDefinition )
+ : sName(i_sName),
+ aParams(i_rParams),
+ aDefinition(i_rDefinition),
+ eDefineType(type_macro)
+{
+}
+
+DefineDescription::~DefineDescription()
+{
+}
+
+void
+DefineDescription::GetDefineText( csv::StreamStr & o_rText ) const
+{
+ if ( aDefinition.begin() == aDefinition.end() OR eDefineType != type_define )
+ return;
+
+
+ bool bSwitch_Stringify = false;
+ bool bSwitch_Concatenate = false;
+
+ for ( str_vector::const_iterator it = aDefinition.begin();
+ it != aDefinition.end();
+ ++it )
+ {
+ if ( HandleOperatorsBeforeTextItem( o_rText,
+ bSwitch_Stringify,
+ bSwitch_Concatenate,
+ *it ) )
+ {
+ continue;
+ }
+
+ o_rText << (*it);
+
+ Do_bStringify_end(o_rText, bSwitch_Stringify);
+ o_rText << " ";
+ }
+ o_rText.seekp(-1, csv::cur);
+}
+
+void
+DefineDescription::GetMacroText( csv::StreamStr & o_rText,
+ const StringVector & i_rGivenArguments ) const
+{
+ bool bSwitch_Stringify = false;
+ bool bSwitch_Concatenate = false;
+ intt nActiveParamNr = -1;
+
+ if ( aDefinition.begin() == aDefinition.end() OR eDefineType != type_macro )
+ return;
+
+ for ( str_vector::const_iterator it = aDefinition.begin();
+ it != aDefinition.end();
+ ++it )
+ {
+ if ( HandleOperatorsBeforeTextItem( o_rText,
+ bSwitch_Stringify,
+ bSwitch_Concatenate,
+ *it ) )
+ {
+ continue;
+ }
+
+ for ( str_vector::const_iterator param_it = aParams.begin();
+ param_it != aParams.end() AND nActiveParamNr == -1;
+ ++param_it )
+ {
+ if ( strcmp(*it, *param_it) == 0 )
+ nActiveParamNr = param_it - aParams.begin();
+ }
+ if ( nActiveParamNr == -1 )
+ {
+ o_rText << (*it);
+ }
+ else
+ {
+ o_rText << i_rGivenArguments[nActiveParamNr];
+ nActiveParamNr = -1;
+ }
+
+ Do_bStringify_end(o_rText, bSwitch_Stringify);
+ o_rText << " ";
+ }
+ o_rText.seekp(-1, csv::cur);
+}
+
+
+
+} // end namespace cpp
+
+
+
+
+
+bool
+CheckForOperator( bool & o_bStringify,
+ bool & o_bConcatenate,
+ const String & i_sTextItem )
+{
+ if ( strcmp(i_sTextItem, "##") == 0 )
+ {
+ o_bConcatenate = true;
+ return true;
+ }
+ else if ( strcmp(i_sTextItem, "#") == 0 )
+ {
+ o_bStringify = true;
+ return true;
+ }
+ return false;
+}
+
+void
+Do_bConcatenate( csv::StreamStr & o_rText,
+ bool & io_bConcatenate )
+{
+ if ( io_bConcatenate )
+ {
+ uintt nPos;
+ for ( nPos = o_rText.tellp() - 1;
+ nPos > 0 ? o_rText.c_str()[nPos] == ' ' : false;
+ --nPos ) ;
+ o_rText.seekp(nPos+1);
+ io_bConcatenate = false;
+ }
+}
+
+void
+Do_bStringify_begin( csv::StreamStr & o_rText,
+ bool i_bStringify )
+{
+ if ( i_bStringify )
+ {
+ o_rText << "\"";
+ }
+}
+
+void
+Do_bStringify_end( csv::StreamStr & o_rText,
+ bool & io_bStringify )
+{
+ if ( io_bStringify )
+ {
+ o_rText << "\"";
+ io_bStringify = false;
+ }
+}
+
+
+bool
+HandleOperatorsBeforeTextItem( csv::StreamStr & o_rText,
+ bool & io_bStringify,
+ bool & io_bConcatenate,
+ const String & i_sTextItem )
+{
+ if ( CheckForOperator( io_bStringify,
+ io_bConcatenate,
+ i_sTextItem) )
+ {
+ return true;
+ }
+ Do_bConcatenate(o_rText, io_bConcatenate);
+ Do_bStringify_begin(o_rText, io_bStringify);
+
+ return false;
+}
+
+
+
diff --git a/autodoc/source/parser/cpp/defdescr.hxx b/autodoc/source/parser/cpp/defdescr.hxx
new file mode 100644
index 000000000000..5b1d299ef428
--- /dev/null
+++ b/autodoc/source/parser/cpp/defdescr.hxx
@@ -0,0 +1,97 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_CPP_DEFDESCR_HXX
+#define ADC_CPP_DEFDESCR_HXX
+
+
+
+
+namespace cpp
+{
+
+/** Describes a C/C++ #define statement. May be a define or a macro, for which
+ two cases the two different constructors are to be used.
+
+ This class is used by cpp::PreProcessor.
+*/
+class DefineDescription
+{
+ public:
+ enum E_DefineType
+ {
+ type_define,
+ type_macro
+ };
+ typedef StringVector str_vector;
+
+ DefineDescription( /// Used for: #define DEFINE xyz
+ const String & i_sName,
+ const str_vector & i_rDefinition );
+ DefineDescription( /// Used for: #define MACRO(...) abc
+ const String & i_sName,
+ const str_vector & i_rParams,
+ const str_vector & i_rDefinition );
+ ~DefineDescription();
+
+ /// Only vaild if (eDefineType == type_define) else returns "".
+ void GetDefineText(
+ csv::StreamStr & o_rText ) const;
+
+ /// Only vaild if (eDefineType == type_macro) else returns "".
+ void GetMacroText(
+ csv::StreamStr & o_rText,
+ const StringVector &
+ i_rGivenArguments ) const;
+
+ uintt ParamCount() const;
+ E_DefineType DefineType() const;
+
+ private:
+ // DATA
+ String sName;
+ str_vector aParams;
+ str_vector aDefinition;
+ E_DefineType eDefineType;
+};
+
+
+
+
+// IMPLEMENTATION
+inline uintt
+DefineDescription::ParamCount() const
+ { return aParams.size(); }
+inline DefineDescription::E_DefineType
+DefineDescription::DefineType() const
+ { return eDefineType; }
+
+
+
+
+} // end namespace cpp
+#endif
diff --git a/autodoc/source/parser/cpp/fevnthdl.hxx b/autodoc/source/parser/cpp/fevnthdl.hxx
new file mode 100644
index 000000000000..20283ace42d8
--- /dev/null
+++ b/autodoc/source/parser/cpp/fevnthdl.hxx
@@ -0,0 +1,105 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_CPP_FEVNTHDL_HXX
+#define ADC_CPP_FEVNTHDL_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+ // COMPONENTS
+ // PARAMETERS
+
+
+namespace ary
+{
+namespace loc
+{
+ class File;
+}
+}
+
+
+
+
+namespace cpp
+{
+
+
+/** This is an interface, which accepts the file scope events that may
+ be important for parsing. It is implementation-dependant, where to
+ put or what to do with them.
+*/
+class FileScope_EventHandler
+{
+ public:
+ // LIFECYCLE
+ virtual ~FileScope_EventHandler() {}
+
+ // OPERATIONS
+ void SetCurFile(
+ ary::loc::File & io_rCurFile );
+ void Event_IncrLineCount();
+ void Event_SwBracketOpen();
+ void Event_SwBracketClose();
+ void Event_Semicolon();
+
+ private:
+ virtual void do_SetCurFile(
+ ary::loc::File & io_rCurFile ) = 0;
+ virtual void do_Event_IncrLineCount() = 0;
+ virtual void do_Event_SwBracketOpen() = 0;
+ virtual void do_Event_SwBracketClose() = 0;
+ virtual void do_Event_Semicolon() = 0;
+};
+
+
+// IMPLEMENTATION
+
+inline void
+FileScope_EventHandler::SetCurFile( ary::loc::File & io_rCurFile )
+ { do_SetCurFile(io_rCurFile); }
+inline void
+FileScope_EventHandler::Event_IncrLineCount()
+ { do_Event_IncrLineCount(); }
+inline void
+FileScope_EventHandler::Event_SwBracketOpen()
+ { do_Event_SwBracketOpen(); }
+inline void
+FileScope_EventHandler::Event_SwBracketClose()
+ { do_Event_SwBracketClose(); }
+inline void
+FileScope_EventHandler::Event_Semicolon()
+ { do_Event_Semicolon(); }
+
+
+
+
+} // namespace cpp
+#endif
+
diff --git a/autodoc/source/parser/cpp/icprivow.cxx b/autodoc/source/parser/cpp/icprivow.cxx
new file mode 100644
index 000000000000..54c8e147e170
--- /dev/null
+++ b/autodoc/source/parser/cpp/icprivow.cxx
@@ -0,0 +1,192 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <icprivow.hxx>
+
+
+// NOT FULLY DEFINED SERVICES
+#include <ary/cpp/c_namesp.hxx>
+#include <ary/cpp/c_class.hxx>
+
+
+
+namespace cpp
+{
+
+
+
+//****************** Owner_Namespace ********************//
+Owner_Namespace::Owner_Namespace()
+ : pScope(0)
+{
+}
+
+void
+Owner_Namespace::SetAnotherNamespace( ary::cpp::Namespace & io_rScope )
+{
+ pScope = &io_rScope;
+}
+
+bool
+Owner_Namespace::HasClass( const String & i_sLocalName )
+{
+ return pScope->Search_LocalClass(i_sLocalName).IsValid();
+}
+
+void
+Owner_Namespace::do_Add_Class( const String & i_sLocalName,
+ Cid i_nId )
+{
+ csv_assert(pScope != 0);
+ pScope->Add_LocalClass(i_sLocalName, i_nId);
+}
+
+void
+Owner_Namespace::do_Add_Enum( const String & i_sLocalName,
+ Cid i_nId )
+{
+ csv_assert(pScope != 0);
+ pScope->Add_LocalEnum(i_sLocalName, i_nId);
+}
+
+void
+Owner_Namespace::do_Add_Typedef( const String & i_sLocalName,
+ Cid i_nId )
+{
+ csv_assert(pScope != 0);
+ pScope->Add_LocalTypedef(i_sLocalName, i_nId);
+}
+
+void
+Owner_Namespace::do_Add_Operation( const String & i_sLocalName,
+ Cid i_nId,
+ bool )
+{
+ csv_assert(pScope != 0);
+ pScope->Add_LocalOperation(i_sLocalName, i_nId);
+}
+
+void
+Owner_Namespace::do_Add_Variable( const String & i_sLocalName,
+ Cid i_nId,
+ bool i_bIsConst,
+ bool )
+{
+ csv_assert(pScope != 0);
+ if (i_bIsConst)
+ pScope->Add_LocalConstant(i_sLocalName, i_nId);
+ else
+ pScope->Add_LocalVariable(i_sLocalName, i_nId);
+}
+
+
+Cid
+Owner_Namespace::inq_CeId() const
+{
+ csv_assert(pScope != 0);
+ return pScope->CeId();
+}
+
+
+//****************** Owner_Class ********************//
+
+Owner_Class::Owner_Class()
+ : pScope(0)
+{
+}
+
+void
+Owner_Class::SetAnotherClass( ary::cpp::Class & io_rScope )
+{
+ pScope = &io_rScope;
+}
+
+bool
+Owner_Class::HasClass( const String & )
+{
+ return false;
+}
+
+void
+Owner_Class::do_Add_Class( const String & i_sLocalName,
+ Cid i_nId )
+{
+ csv_assert(pScope != 0);
+ pScope->Add_LocalClass(i_sLocalName, i_nId);
+}
+
+void
+Owner_Class::do_Add_Enum( const String & i_sLocalName,
+ Cid i_nId )
+{
+ csv_assert(pScope != 0);
+ pScope->Add_LocalEnum(i_sLocalName, i_nId);
+}
+
+void
+Owner_Class::do_Add_Typedef( const String & i_sLocalName,
+ Cid i_nId )
+{
+ csv_assert(pScope != 0);
+ pScope->Add_LocalTypedef(i_sLocalName, i_nId);
+}
+
+void
+Owner_Class::do_Add_Operation( const String & i_sLocalName,
+ Cid i_nId,
+ bool i_bIsStatic )
+{
+ csv_assert(pScope != 0);
+ if (i_bIsStatic)
+ pScope->Add_LocalStaticOperation(i_sLocalName, i_nId);
+ else
+ pScope->Add_LocalOperation(i_sLocalName, i_nId);
+}
+
+void
+Owner_Class::do_Add_Variable( const String & i_sLocalName,
+ Cid i_nId,
+ bool ,
+ bool i_bIsStatic )
+{
+ csv_assert(pScope != 0);
+ if (i_bIsStatic)
+ pScope->Add_LocalStaticData(i_sLocalName, i_nId);
+ else
+ pScope->Add_LocalData(i_sLocalName, i_nId);
+}
+
+Cid
+Owner_Class::inq_CeId() const
+{
+ csv_assert(pScope != 0);
+ return pScope->CeId();
+}
+
+
+} // namespace cpp
diff --git a/autodoc/source/parser/cpp/icprivow.hxx b/autodoc/source/parser/cpp/icprivow.hxx
new file mode 100644
index 000000000000..590d01c99935
--- /dev/null
+++ b/autodoc/source/parser/cpp/icprivow.hxx
@@ -0,0 +1,123 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ARY_CPP_ICPRIVOW_HXX
+#define ARY_CPP_ICPRIVOW_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <ary/cpp/inpcontx.hxx>
+ // COMPONENTS
+ // PARAMETERS
+
+namespace cpp
+{
+
+
+
+typedef ary::cpp::Ce_id Cid;
+
+
+class Owner_Namespace : public ary::cpp::InputContext::Owner
+{
+ public:
+ Owner_Namespace();
+ void SetAnotherNamespace(
+ ary::cpp::Namespace &
+ io_rScope );
+ virtual bool HasClass(
+ const String & i_sLocalName );
+ private:
+ virtual void do_Add_Class(
+ const String & i_sLocalName,
+ Cid i_nId );
+ virtual void do_Add_Enum(
+ const String & i_sLocalName,
+ Cid i_nId );
+ virtual void do_Add_Typedef(
+ const String & i_sLocalName,
+ Cid i_nId );
+ virtual void do_Add_Operation(
+ const String & i_sLocalName,
+ Cid i_nId,
+ bool );
+ virtual void do_Add_Variable(
+ const String & i_sLocalName,
+ Cid i_nId,
+ bool i_bIsConst,
+ bool i_bIsStatic );
+ virtual Cid inq_CeId() const;
+
+ // DATA
+ ary::cpp::Namespace *
+ pScope;
+};
+
+class Owner_Class : public ary::cpp::InputContext::Owner
+{
+ public:
+ Owner_Class();
+ void SetAnotherClass(
+ ary::cpp::Class & io_rScope );
+
+ /** @attention Only a dummy for use at ary::cpp::Gate!
+ Will work nerver!
+ */
+ virtual bool HasClass(
+ const String & i_sLocalName );
+ private:
+ virtual void do_Add_Class(
+ const String & i_sLocalName,
+ Cid i_nId );
+ virtual void do_Add_Enum(
+ const String & i_sLocalName,
+ Cid i_nId );
+ virtual void do_Add_Typedef(
+ const String & i_sLocalName,
+ Cid i_nId );
+ virtual void do_Add_Operation(
+ const String & i_sLocalName,
+ Cid i_nId,
+ bool i_bIsStaticMember );
+ virtual void do_Add_Variable(
+ const String & i_sLocalName,
+ Cid i_nId,
+ bool i_bIsConst,
+ bool i_bIsStatic );
+ virtual Cid inq_CeId() const;
+
+ // DATA
+ ary::cpp::Class * pScope;
+};
+
+
+
+
+} // namespace cpp
+#endif
diff --git a/autodoc/source/parser/cpp/makefile.mk b/autodoc/source/parser/cpp/makefile.mk
new file mode 100644
index 000000000000..9729ee2d57b1
--- /dev/null
+++ b/autodoc/source/parser/cpp/makefile.mk
@@ -0,0 +1,87 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..$/..$/..
+
+PRJNAME=autodoc
+TARGET=parser_cpp
+
+
+# --- Settings -----------------------------------------------------
+
+ENABLE_EXCEPTIONS=true
+PRJINC=$(PRJ)$/source
+
+
+.INCLUDE : settings.mk
+.INCLUDE : $(PRJ)$/source$/mkinc$/fullcpp.mk
+
+
+
+# --- Files --------------------------------------------------------
+
+
+OBJFILES= \
+ $(OBJ)$/all_toks.obj \
+ $(OBJ)$/c_dealer.obj \
+ $(OBJ)$/c_rcode.obj \
+ $(OBJ)$/cpp_pe.obj \
+ $(OBJ)$/cx_base.obj \
+ $(OBJ)$/cx_c_pp.obj \
+ $(OBJ)$/cx_c_std.obj \
+ $(OBJ)$/cx_c_sub.obj \
+ $(OBJ)$/cxt2ary.obj \
+ $(OBJ)$/defdescr.obj \
+ $(OBJ)$/icprivow.obj \
+ $(OBJ)$/pe_base.obj \
+ $(OBJ)$/pe_class.obj \
+ $(OBJ)$/pe_defs.obj \
+ $(OBJ)$/pe_expr.obj \
+ $(OBJ)$/pe_enum.obj \
+ $(OBJ)$/pe_enval.obj \
+ $(OBJ)$/pe_file.obj \
+ $(OBJ)$/pe_funct.obj \
+ $(OBJ)$/pe_ignor.obj \
+ $(OBJ)$/pe_namsp.obj \
+ $(OBJ)$/pe_param.obj \
+ $(OBJ)$/pe_tpltp.obj \
+ $(OBJ)$/pe_type.obj \
+ $(OBJ)$/pe_tydef.obj \
+ $(OBJ)$/pe_vafu.obj \
+ $(OBJ)$/pe_vari.obj \
+ $(OBJ)$/preproc.obj \
+ $(OBJ)$/prs_cpp.obj \
+ $(OBJ)$/tkp_cpp.obj
+
+
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : target.mk
+
+
+
diff --git a/autodoc/source/parser/cpp/pe_base.cxx b/autodoc/source/parser/cpp/pe_base.cxx
new file mode 100644
index 000000000000..dd81d7575ecc
--- /dev/null
+++ b/autodoc/source/parser/cpp/pe_base.cxx
@@ -0,0 +1,224 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "pe_base.hxx"
+
+
+// NOT FULLY DECLARED SERVICES
+#include <cosv/tpl/tpltools.hxx>
+#include <ary/cpp/c_gate.hxx>
+#include <ary/cpp/c_type.hxx>
+#include "pe_type.hxx"
+
+
+
+
+namespace cpp
+{
+
+
+static const PE_Base::Base aNullBase_;
+
+
+PE_Base::PE_Base( Cpp_PE * i_pParent )
+ : Cpp_PE(i_pParent),
+ pStati(new PeStatusArray<PE_Base>)
+ // aBaseIds,
+ // pSpType,
+ // pSpuBaseName
+{
+ Setup_StatusFunctions();
+ aBaseIds.reserve(4);
+
+ pSpType = new SP_Type(*this);
+ pSpuBaseName = new SPU_BaseName(*pSpType, 0, &PE_Base::SpReturn_BaseName);
+}
+
+
+PE_Base::~PE_Base()
+{
+}
+
+void
+PE_Base::Call_Handler( const cpp::Token & i_rTok )
+{
+ pStati->Cur().Call_Handler(i_rTok.TypeId(), i_rTok.Text());
+}
+
+void
+PE_Base::Setup_StatusFunctions()
+{
+ typedef CallFunction<PE_Base>::F_Tok F_Tok;
+ static F_Tok stateF_startOfNext[] = { &PE_Base::On_startOfNext_Identifier,
+ &PE_Base::On_startOfNext_public,
+ &PE_Base::On_startOfNext_protected,
+ &PE_Base::On_startOfNext_private,
+ &PE_Base::On_startOfNext_virtual,
+ &PE_Base::On_startOfNext_DoubleColon };
+ static INT16 stateT_startOfNext[] = { Tid_Identifier,
+ Tid_public,
+ Tid_protected,
+ Tid_private,
+ Tid_virtual,
+ Tid_DoubleColon };
+ static F_Tok stateF_inName[] = { &PE_Base::On_inName_Identifier,
+ &PE_Base::On_inName_virtual,
+ &PE_Base::On_inName_SwBracket_Left,
+ &PE_Base::On_inName_DoubleColon,
+ &PE_Base::On_inName_Comma };
+ static INT16 stateT_inName[] = { Tid_Identifier,
+ Tid_virtual,
+ Tid_SwBracket_Left,
+ Tid_DoubleColon,
+ Tid_Comma };
+
+ SEMPARSE_CREATE_STATUS(PE_Base, startOfNext, Hdl_SyntaxError);
+ SEMPARSE_CREATE_STATUS(PE_Base, inName, Hdl_SyntaxError);
+}
+
+void
+PE_Base::Hdl_SyntaxError( const char * i_sText)
+{
+ StdHandlingOfSyntaxError(i_sText);
+}
+
+void
+PE_Base::InitData()
+{
+ pStati->SetCur(startOfNext);
+ csv::erase_container(aBaseIds);
+ aBaseIds.push_back(aNullBase_);
+}
+
+void
+PE_Base::TransferData()
+{
+ // Does nothing.
+}
+
+void
+PE_Base::SpReturn_BaseName()
+{
+ CurObject().nId = pSpuBaseName->Child().Result_Type().Id();
+
+ static StreamStr aBaseName(100);
+ aBaseName.seekp(0);
+ pSpuBaseName->Child().Result_Type().Get_Text( aBaseName, Env().AryGate() );
+
+ Env().Event_Class_FinishedBase(aBaseName.c_str());
+}
+
+void
+PE_Base::On_startOfNext_public(const char *)
+{
+ SetTokenResult(done, stay);
+ pStati->SetCur(inName);
+
+ CurObject().eProtection = ary::cpp::PROTECT_public;
+}
+
+void
+PE_Base::On_startOfNext_protected(const char *)
+{
+ SetTokenResult(done, stay);
+ pStati->SetCur(inName);
+
+ CurObject().eProtection = ary::cpp::PROTECT_protected;
+}
+
+void
+PE_Base::On_startOfNext_private(const char *)
+{
+ SetTokenResult(done, stay);
+ pStati->SetCur(inName);
+
+ CurObject().eProtection = ary::cpp::PROTECT_private;
+}
+
+void
+PE_Base::On_startOfNext_virtual(const char *)
+{
+ SetTokenResult(done, stay);
+
+ CurObject().eVirtuality = ary::cpp::VIRTUAL_virtual;
+}
+
+void
+PE_Base::On_startOfNext_Identifier(const char * )
+{
+ pSpuBaseName->Push(not_done);
+}
+
+void
+PE_Base::On_startOfNext_DoubleColon(const char *)
+{
+ pSpuBaseName->Push(not_done);
+}
+
+void
+PE_Base::On_inName_Identifier(const char * )
+{
+ pSpuBaseName->Push(not_done);
+}
+
+void
+PE_Base::On_inName_virtual(const char *)
+{
+ SetTokenResult(done, stay);
+
+ CurObject().eVirtuality = ary::cpp::VIRTUAL_virtual;
+}
+
+void
+PE_Base::On_inName_DoubleColon(const char *)
+{
+ pSpuBaseName->Push(not_done);
+}
+
+void
+PE_Base::On_inName_Comma(const char *)
+{
+ SetTokenResult(done, stay);
+ pStati->SetCur(startOfNext);
+
+ aBaseIds.push_back( aNullBase_ );
+}
+
+void
+PE_Base::On_inName_SwBracket_Left(const char *)
+{
+ SetTokenResult(not_done, pop_success);
+}
+
+
+} // namespace cpp
+
+
+
+
+
diff --git a/autodoc/source/parser/cpp/pe_base.hxx b/autodoc/source/parser/cpp/pe_base.hxx
new file mode 100644
index 000000000000..dc5225c63fa2
--- /dev/null
+++ b/autodoc/source/parser/cpp/pe_base.hxx
@@ -0,0 +1,123 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+
+#ifndef ADC_CPP_PE_BASE_HXX
+#define ADC_CPP_PE_BASE_HXX
+
+// BASE CLASSES
+#include "cpp_pe.hxx"
+// USED SERVICES
+#include <semantic/callf.hxx>
+#include <semantic/sub_peu.hxx>
+#include <ary/cpp/c_types4cpp.hxx>
+#include <ary/cpp/c_slntry.hxx>
+
+
+
+namespace cpp
+{
+
+class PE_Type;
+
+class PE_Base : public Cpp_PE
+{
+ public:
+ enum E_State
+ {
+ startOfNext,
+ inName,
+ size_of_states
+ };
+
+ typedef ary::cpp::List_Bases BaseList;
+ typedef ary::cpp::S_Classes_Base Base;
+
+ PE_Base(
+ Cpp_PE * i_pParent );
+ ~PE_Base();
+
+ const BaseList & Result_BaseIds() const;
+
+ virtual void Call_Handler(
+ const cpp::Token & i_rTok );
+
+ private:
+ typedef SubPe< PE_Base, PE_Type > SP_Type;
+ typedef SubPeUse< PE_Base, PE_Type> SPU_BaseName;
+
+ void Setup_StatusFunctions();
+ virtual void InitData();
+ virtual void TransferData();
+ void Hdl_SyntaxError( const char *);
+
+ void SpReturn_BaseName();
+
+ void On_startOfNext_Identifier(const char *);
+ void On_startOfNext_public(const char *);
+ void On_startOfNext_protected(const char *);
+ void On_startOfNext_private(const char *);
+ void On_startOfNext_virtual(const char *);
+ void On_startOfNext_DoubleColon(const char *);
+
+ void On_inName_Identifier(const char *);
+ void On_inName_virtual(const char *);
+ void On_inName_SwBracket_Left(const char *);
+ void On_inName_DoubleColon(const char *);
+ void On_inName_Comma(const char *);
+
+ Base & CurObject();
+
+ // DATA
+ Dyn< PeStatusArray<PE_Base> >
+ pStati;
+
+ Dyn<SP_Type> pSpType; /// till "{" incl.
+ Dyn<SPU_BaseName> pSpuBaseName;
+
+ BaseList aBaseIds;
+};
+
+
+
+// IMPLEMENTATION
+
+inline const PE_Base::BaseList &
+PE_Base::Result_BaseIds() const
+ { return aBaseIds; }
+
+
+inline PE_Base::Base &
+PE_Base::CurObject()
+ { return aBaseIds.back(); }
+
+
+
+
+
+} // namespace cpp
+#endif
diff --git a/autodoc/source/parser/cpp/pe_class.cxx b/autodoc/source/parser/cpp/pe_class.cxx
new file mode 100644
index 000000000000..d9554bd35b59
--- /dev/null
+++ b/autodoc/source/parser/cpp/pe_class.cxx
@@ -0,0 +1,503 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "pe_class.hxx"
+
+
+// NOT FULLY DECLARED SERVICES
+#include <cosv/tpl/tpltools.hxx>
+#include <ary/cpp/c_gate.hxx>
+#include <ary/cpp/c_class.hxx>
+#include <ary/cpp/c_namesp.hxx>
+#include <ary/cpp/cp_ce.hxx>
+#include <all_toks.hxx>
+#include "pe_base.hxx"
+#include "pe_defs.hxx"
+#include "pe_enum.hxx"
+#include "pe_tydef.hxx"
+#include "pe_vafu.hxx"
+#include "pe_ignor.hxx"
+
+
+namespace cpp {
+
+// using ary::Cid;
+
+PE_Class::PE_Class(Cpp_PE * i_pParent )
+ : Cpp_PE(i_pParent),
+ pStati( new PeStatusArray<PE_Class> ),
+ // pSpBase,
+ // pSpTypedef,
+ // pSpVarFunc,
+ // pSpIgnore,
+ // pSpuBase,
+ // pSpuTypedef,
+ // pSpuVarFunc,
+ // pSpuUsing,
+ // pSpuIgnoreFailure,
+ // sLocalName,
+ eClassKey(ary::cpp::CK_class),
+ pCurObject(0),
+ // aBases,
+ eResult_KindOf(is_declaration)
+{
+ Setup_StatusFunctions();
+
+ pSpBase = new SP_Base(*this);
+ pSpTypedef = new SP_Typedef(*this);
+ pSpVarFunc = new SP_VarFunc(*this);
+ pSpIgnore = new SP_Ignore(*this);
+ pSpDefs = new SP_Defines(*this);
+
+ pSpuBase = new SPU_Base(*pSpBase, 0, &PE_Class::SpReturn_Base);
+ pSpuTypedef = new SPU_Typedef(*pSpTypedef, 0, 0);
+ pSpuVarFunc = new SPU_VarFunc(*pSpVarFunc, 0, 0);
+
+ pSpuTemplate= new SPU_Ignore(*pSpIgnore, 0, 0);
+ pSpuUsing = new SPU_Ignore(*pSpIgnore, 0, 0);
+ pSpuIgnoreFailure
+ = new SPU_Ignore(*pSpIgnore, 0, 0);
+ pSpuDefs = new SPU_Defines(*pSpDefs, 0, 0);
+}
+
+
+PE_Class::~PE_Class()
+{
+}
+
+void
+PE_Class::Call_Handler( const cpp::Token & i_rTok )
+{
+ pStati->Cur().Call_Handler(i_rTok.TypeId(), i_rTok.Text());
+}
+
+Cpp_PE *
+PE_Class::Handle_ChildFailure()
+{
+ SetCurSPU(pSpuIgnoreFailure.Ptr());
+ return &pSpuIgnoreFailure->Child();
+}
+
+void
+PE_Class::Setup_StatusFunctions()
+{
+ typedef CallFunction<PE_Class>::F_Tok F_Tok;
+
+ static F_Tok stateF_start[] = { &PE_Class::On_start_class,
+ &PE_Class::On_start_struct,
+ &PE_Class::On_start_union };
+ static INT16 stateT_start[] = { Tid_class,
+ Tid_struct,
+ Tid_union };
+
+ static F_Tok stateF_expectName[] = { &PE_Class::On_expectName_Identifier,
+ &PE_Class::On_expectName_SwBracket_Left,
+ &PE_Class::On_expectName_Colon
+ };
+ static INT16 stateT_expectName[] = { Tid_Identifier,
+ Tid_SwBracket_Left,
+ Tid_Colon
+ };
+
+ static F_Tok stateF_gotName[] = { &PE_Class::On_gotName_SwBracket_Left,
+ &PE_Class::On_gotName_Semicolon,
+ &PE_Class::On_gotName_Colon };
+ static INT16 stateT_gotName[] = { Tid_SwBracket_Left,
+ Tid_Semicolon,
+ Tid_Colon };
+
+ static F_Tok stateF_bodyStd[] = { &PE_Class::On_bodyStd_VarFunc,
+ &PE_Class::On_bodyStd_VarFunc,
+ &PE_Class::On_bodyStd_ClassKey,
+ &PE_Class::On_bodyStd_ClassKey,
+ &PE_Class::On_bodyStd_ClassKey,
+
+ &PE_Class::On_bodyStd_enum,
+ &PE_Class::On_bodyStd_typedef,
+ &PE_Class::On_bodyStd_public,
+ &PE_Class::On_bodyStd_protected,
+ &PE_Class::On_bodyStd_private,
+
+ &PE_Class::On_bodyStd_template,
+ &PE_Class::On_bodyStd_VarFunc,
+ &PE_Class::On_bodyStd_friend,
+ &PE_Class::On_bodyStd_VarFunc,
+ &PE_Class::On_bodyStd_VarFunc,
+
+ &PE_Class::On_bodyStd_VarFunc,
+ &PE_Class::On_bodyStd_VarFunc,
+ &PE_Class::On_bodyStd_VarFunc,
+ &PE_Class::On_bodyStd_VarFunc,
+ &PE_Class::On_bodyStd_VarFunc,
+
+ &PE_Class::On_bodyStd_using,
+ &PE_Class::On_bodyStd_SwBracket_Right,
+ &PE_Class::On_bodyStd_VarFunc,
+ &PE_Class::On_bodyStd_DefineName,
+ &PE_Class::On_bodyStd_MacroName,
+
+ &PE_Class::On_bodyStd_VarFunc,
+ &PE_Class::On_bodyStd_VarFunc,
+ &PE_Class::On_bodyStd_VarFunc, };
+
+ static INT16 stateT_bodyStd[] = { Tid_Identifier,
+ Tid_operator,
+ Tid_class,
+ Tid_struct,
+ Tid_union,
+
+ Tid_enum,
+ Tid_typedef,
+ Tid_public,
+ Tid_protected,
+ Tid_private,
+
+ Tid_template,
+ Tid_virtual,
+ Tid_friend,
+ Tid_Tilde,
+ Tid_const,
+
+ Tid_volatile,
+ Tid_static,
+ Tid_mutable,
+ Tid_inline,
+ Tid_explicit,
+
+ Tid_using,
+ Tid_SwBracket_Right,
+ Tid_DoubleColon,
+ Tid_typename,
+ Tid_DefineName,
+
+ Tid_MacroName,
+ Tid_BuiltInType,
+ Tid_TypeSpecializer };
+
+ static F_Tok stateF_inProtection[] = { &PE_Class::On_inProtection_Colon };
+ static INT16 stateT_inProtection[] = { Tid_Colon };
+
+ static F_Tok stateF_afterDecl[] = { &PE_Class::On_afterDecl_Semicolon };
+ static INT16 stateT_afterDecl[] = { Tid_Semicolon };
+
+ SEMPARSE_CREATE_STATUS(PE_Class, start, Hdl_SyntaxError);
+ SEMPARSE_CREATE_STATUS(PE_Class, expectName, Hdl_SyntaxError);
+ SEMPARSE_CREATE_STATUS(PE_Class, gotName, On_gotName_Return2Type);
+ SEMPARSE_CREATE_STATUS(PE_Class, bodyStd, Hdl_SyntaxError);
+ SEMPARSE_CREATE_STATUS(PE_Class, inProtection, Hdl_SyntaxError);
+ SEMPARSE_CREATE_STATUS(PE_Class, afterDecl, On_afterDecl_Return2Type);
+
+#if 0
+ static F_Tok stateF_inFriend[] = { On_inFriend_class,
+ On_inFriend_struct,
+ On_inFriend_union };
+ // Default: On_inFriend_Function
+ static INT16 stateT_inFriend[] = { Tid_class,
+ Tid_struct,
+ Tid_union };
+#endif // 0
+}
+
+void
+PE_Class::InitData()
+{
+ pStati->SetCur(start);
+ sLocalName.clear();
+ eClassKey = ary::cpp::CK_class;
+ pCurObject = 0;
+ csv::erase_container(aBases);
+ eResult_KindOf = is_declaration;
+}
+
+void
+PE_Class::TransferData()
+{
+ pStati->SetCur(size_of_states);
+}
+
+void
+PE_Class::Hdl_SyntaxError( const char * i_sText)
+{
+ if ( *i_sText == ';' )
+ {
+ Cerr() << Env().CurFileName() << ", line "
+ << Env().LineCount()
+ << ": Sourcecode warning: ';' as a toplevel declaration is deprecated."
+ << Endl();
+ SetTokenResult(done,stay);
+ return;
+ }
+
+ StdHandlingOfSyntaxError(i_sText);
+}
+
+void
+PE_Class::Init_CurObject()
+{
+ // KORR_FUTURE
+ // This will have to be done before parsing base classes, because of
+ // possible inline documentation for base classes.
+ pCurObject = & Env().AryGate().Ces().Store_Class( Env().Context(), sLocalName, eClassKey );
+
+ for ( PE_Base::BaseList::const_iterator it = aBases.begin();
+ it != aBases.end();
+ ++it )
+ {
+ pCurObject->Add_BaseClass( *it );
+ } // end for
+
+ Dyn< StringVector >
+ pTplParams( Env().Get_CurTemplateParameters() );
+ if ( pTplParams )
+ {
+ for ( StringVector::const_iterator it = pTplParams->begin();
+ it != pTplParams->end();
+ ++it )
+ {
+ pCurObject->Add_TemplateParameterType( *it, ary::cpp::Type_id(0) );
+ } // end for
+ }
+}
+
+void
+PE_Class::SpReturn_Base()
+{
+ aBases = pSpuBase->Child().Result_BaseIds();
+ pStati->SetCur(gotName);
+}
+
+void
+PE_Class::On_start_class( const char * )
+{
+ SetTokenResult(done, stay);
+ pStati->SetCur(expectName);
+ eClassKey = ary::cpp::CK_class;
+}
+
+void
+PE_Class::On_start_struct( const char * )
+{
+ SetTokenResult(done, stay);
+ pStati->SetCur(expectName);
+ eClassKey = ary::cpp::CK_struct;
+}
+
+void
+PE_Class::On_start_union( const char * )
+{
+ SetTokenResult(done, stay);
+ pStati->SetCur(expectName);
+ eClassKey = ary::cpp::CK_union;
+}
+
+void
+PE_Class::On_expectName_Identifier( const char * i_sText )
+{
+ SetTokenResult(done, stay);
+ pStati->SetCur(gotName);
+ sLocalName = i_sText;
+}
+
+void
+PE_Class::On_expectName_SwBracket_Left( const char * )
+{
+ SetTokenResult(done, stay);
+ pStati->SetCur(bodyStd);
+
+ sLocalName = "";
+ Init_CurObject();
+ sLocalName = pCurObject->LocalName();
+
+ Env().OpenClass(*pCurObject);
+}
+
+void
+PE_Class::On_expectName_Colon( const char * )
+{
+ pStati->SetCur(gotName);
+ sLocalName = "";
+
+ pSpuBase->Push(done);
+}
+
+void
+PE_Class::On_gotName_SwBracket_Left( const char * )
+{
+ SetTokenResult(done, stay);
+ pStati->SetCur(bodyStd);
+
+ Init_CurObject();
+ if ( sLocalName.empty() )
+ sLocalName = pCurObject->LocalName();
+
+ Env().OpenClass(*pCurObject);
+}
+
+void
+PE_Class::On_gotName_Semicolon( const char * )
+{
+ SetTokenResult(not_done, pop_success);
+
+ eResult_KindOf = is_predeclaration;
+}
+
+void
+PE_Class::On_gotName_Colon( const char * )
+{
+ pSpuBase->Push(done);
+}
+
+void
+PE_Class::On_gotName_Return2Type( const char * )
+{
+ SetTokenResult(not_done, pop_success);
+
+ eResult_KindOf = is_qualified_typename;
+}
+
+void
+PE_Class::On_bodyStd_VarFunc( const char * )
+{
+ pSpuVarFunc->Push(not_done);
+}
+
+void
+PE_Class::On_bodyStd_ClassKey( const char * )
+{
+ pSpuVarFunc->Push(not_done); // This is correct,
+ // classes are parsed via PE_Type.
+}
+
+void
+PE_Class::On_bodyStd_enum( const char * )
+{
+ pSpuVarFunc->Push(not_done); // This is correct,
+ // enums are parsed via PE_Type.
+}
+
+void
+PE_Class::On_bodyStd_typedef( const char * )
+{
+ pSpuTypedef->Push(not_done);
+}
+
+void
+PE_Class::On_bodyStd_public( const char * )
+{
+ SetTokenResult(done, stay);
+ pStati->SetCur(inProtection);
+
+ Env().SetCurProtection(ary::cpp::PROTECT_public);
+}
+
+void
+PE_Class::On_bodyStd_protected( const char * )
+{
+ SetTokenResult(done, stay);
+ pStati->SetCur(inProtection);
+
+ Env().SetCurProtection(ary::cpp::PROTECT_protected);
+}
+
+void
+PE_Class::On_bodyStd_private( const char * )
+{
+ SetTokenResult(done, stay);
+ pStati->SetCur(inProtection);
+
+ Env().SetCurProtection(ary::cpp::PROTECT_private);
+}
+
+void
+PE_Class::On_bodyStd_template( const char * )
+{
+ pSpuTemplate->Push(done);
+}
+
+void
+PE_Class::On_bodyStd_friend( const char * )
+{
+ // KORR_FUTURE
+ pSpuUsing->Push(done);
+}
+
+void
+PE_Class::On_bodyStd_using( const char * )
+{
+ pSpuUsing->Push(done);
+}
+
+void
+PE_Class::On_bodyStd_SwBracket_Right( const char * )
+{
+ SetTokenResult(done, stay);
+ pStati->SetCur(afterDecl);
+
+ Env().CloseClass();
+}
+
+void
+PE_Class::On_bodyStd_DefineName(const char * )
+{
+ pSpuDefs->Push(not_done);
+}
+
+void
+PE_Class::On_bodyStd_MacroName(const char * )
+{
+ pSpuDefs->Push(not_done);
+}
+
+
+void
+PE_Class::On_inProtection_Colon( const char * )
+{
+ SetTokenResult(done, stay);
+ pStati->SetCur(bodyStd);
+}
+
+void
+PE_Class::On_afterDecl_Semicolon( const char * )
+{
+ SetTokenResult(not_done, pop_success);
+ eResult_KindOf = is_declaration;
+}
+
+void
+PE_Class::On_afterDecl_Return2Type( const char * )
+{
+ SetTokenResult(not_done, pop_success);
+ eResult_KindOf = is_implicit_declaration;
+}
+
+
+} // namespace cpp
+
+
+
+
diff --git a/autodoc/source/parser/cpp/pe_class.hxx b/autodoc/source/parser/cpp/pe_class.hxx
new file mode 100644
index 000000000000..737bb3a4111d
--- /dev/null
+++ b/autodoc/source/parser/cpp/pe_class.hxx
@@ -0,0 +1,256 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_CPP_PE_CLASS_HXX
+#define ADC_CPP_PE_CLASS_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include "cpp_pe.hxx"
+ // OTHER
+#include <semantic/callf.hxx>
+#include <semantic/sub_peu.hxx>
+#include <ary/cpp/c_types4cpp.hxx>
+#include <ary/cpp/c_slntry.hxx>
+#include "all_toks.hxx"
+
+namespace ary
+{
+namespace cpp
+{
+ class Class;
+}
+}
+
+
+namespace cpp
+{
+
+
+using ary::cpp::E_Protection;
+using ary::cpp::E_Virtuality;
+
+
+class PE_Base;
+class PE_Enum;
+class PE_Typedef;
+class PE_VarFunc;
+class PE_Ignore;
+class PE_Defines;
+
+
+class PE_Class : public cpp::Cpp_PE
+{
+ public:
+ enum E_State
+ {
+ start, /// before class, struct or union
+ expectName, /// after class, struct or union
+ gotName, /// after name, before : or {
+ bodyStd, /// after {
+ inProtection, /// after public, protected or private and before ":"
+ afterDecl, /// after ending }
+ size_of_states
+ };
+
+ enum E_KindOfResult
+ {
+ is_declaration, // normal
+ is_implicit_declaration, // like in: class Abc { public int n; } aAbc;
+ is_predeclaration, // like: class Abc;
+ is_qualified_typename // like in: class Abc * fx();
+
+ };
+
+ PE_Class(
+ Cpp_PE * i_pParent );
+ ~PE_Class();
+
+ virtual void Call_Handler(
+ const cpp::Token & i_rTok );
+ virtual Cpp_PE * Handle_ChildFailure();
+
+ E_KindOfResult Result_KindOf() const;
+ const String & Result_LocalName() const;
+ const String & Result_FirstNameSegment() const;
+
+ private:
+ typedef SubPe< PE_Class, PE_Base > SP_Base;
+// typedef SubPe< PE_Class, PE_Enum> SP_Enum;
+ typedef SubPe< PE_Class, PE_Typedef> SP_Typedef;
+ typedef SubPe< PE_Class, PE_VarFunc> SP_VarFunc;
+ typedef SubPe< PE_Class, PE_Ignore > SP_Ignore;
+ typedef SubPe< PE_Class, PE_Defines> SP_Defines;
+
+ typedef SubPeUse< PE_Class, PE_Base> SPU_Base;
+// typedef SubPeUse< PE_Class, PE_Enum> SPU_Enum;
+ typedef SubPeUse< PE_Class, PE_Typedef> SPU_Typedef;
+ typedef SubPeUse< PE_Class, PE_VarFunc> SPU_VarFunc;
+ typedef SubPeUse< PE_Class, PE_Ignore> SPU_Ignore;
+ typedef SubPeUse< PE_Class, PE_Defines> SPU_Defines;
+
+ typedef ary::cpp::List_Bases BaseList;
+ typedef ary::cpp::S_Classes_Base Base;
+ typedef ary::cpp::E_Protection E_Protection;
+
+ void Setup_StatusFunctions();
+ virtual void InitData();
+ virtual void TransferData();
+ void Hdl_SyntaxError( const char *);
+ void Init_CurObject();
+
+ void SpReturn_Base();
+
+ void On_start_class( const char * );
+ void On_start_struct( const char * );
+ void On_start_union( const char * );
+
+ void On_expectName_Identifier( const char * );
+ void On_expectName_SwBracket_Left( const char * );
+ void On_expectName_Colon( const char * );
+
+ void On_gotName_SwBracket_Left( const char * );
+ void On_gotName_Semicolon( const char * );
+ void On_gotName_Colon( const char * );
+ void On_gotName_Return2Type( const char * );
+
+ void On_bodyStd_VarFunc( const char * );
+ void On_bodyStd_ClassKey( const char * );
+ void On_bodyStd_enum( const char * );
+ void On_bodyStd_typedef( const char * );
+ void On_bodyStd_public( const char * );
+ void On_bodyStd_protected( const char * );
+ void On_bodyStd_private( const char * );
+ void On_bodyStd_template( const char * );
+ void On_bodyStd_friend( const char * );
+ void On_bodyStd_using( const char * );
+ void On_bodyStd_SwBracket_Right( const char * );
+ void On_bodyStd_DefineName(const char * );
+ void On_bodyStd_MacroName(const char * );
+
+ void On_inProtection_Colon( const char * );
+
+ void On_afterDecl_Semicolon( const char * );
+ void On_afterDecl_Return2Type( const char * );
+
+ // DATA
+ Dyn< PeStatusArray<PE_Class> >
+ pStati;
+
+ Dyn<SP_Base> pSpBase;
+// Dyn<SP_Enum> pSpEnum;
+ Dyn<SP_Typedef> pSpTypedef;
+ Dyn<SP_VarFunc> pSpVarFunc;
+ Dyn<SP_Ignore> pSpIgnore;
+ Dyn<SP_Defines> pSpDefs;
+
+ Dyn<SPU_Base> pSpuBase;
+// Dyn<SPU_Enum> pSpuEnum;
+ Dyn<SPU_Typedef> pSpuTypedef;
+ Dyn<SPU_VarFunc> pSpuVarFunc;
+
+ Dyn<SPU_Ignore> pSpuTemplate;
+ Dyn<SPU_Ignore> pSpuUsing;
+ Dyn<SPU_Ignore> pSpuIgnoreFailure;
+ Dyn<SPU_Defines> pSpuDefs;
+
+
+
+ String sLocalName;
+ ary::cpp::E_ClassKey
+ eClassKey;
+ ary::cpp::Class * pCurObject;
+ BaseList aBases;
+
+ E_KindOfResult eResult_KindOf;
+};
+
+
+
+// IMPLEMENTATION
+
+inline PE_Class::E_KindOfResult
+PE_Class::Result_KindOf() const
+{
+ return eResult_KindOf;
+}
+
+inline const String &
+PE_Class::Result_LocalName() const
+{
+ return sLocalName;
+}
+
+inline const String &
+PE_Class::Result_FirstNameSegment() const
+{
+ return sLocalName;
+}
+
+
+
+
+} // namespace cpp
+
+
+#if 0 // Branches
+
+class struct union
+ -> Class
+ -> Predeclaration
+
+typedef
+ -> Typedef
+
+enum
+ -> Enum
+
+TypeDeclaration
+ -> Function In Class
+ -> Variable
+
+public, protected, private
+ -> Protection declaration
+
+friend
+ -> Friend Class
+ -> Friend Function
+
+virtual
+ -> Function In Class
+
+using
+ -> Using Declaration
+
+
+#endif // 0
+
+
+#endif
+
diff --git a/autodoc/source/parser/cpp/pe_defs.cxx b/autodoc/source/parser/cpp/pe_defs.cxx
new file mode 100644
index 000000000000..f3db23a51316
--- /dev/null
+++ b/autodoc/source/parser/cpp/pe_defs.cxx
@@ -0,0 +1,180 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "pe_defs.hxx"
+
+
+// NOT FULLY DECLARED SERVICES
+#include <cosv/tpl/tpltools.hxx>
+#include <ary/cpp/c_gate.hxx>
+#include <ary/cpp/c_define.hxx>
+#include <ary/cpp/c_macro.hxx>
+#include <ary/cpp/cp_def.hxx>
+#include "all_toks.hxx"
+
+
+namespace cpp
+{
+
+
+PE_Defines::PE_Defines( Cpp_PE * i_pParent )
+ : Cpp_PE(i_pParent),
+ pStati( new PeStatusArray<PE_Defines> ),
+ // sName,
+ // aParameters,
+ // sDefinition,
+ bIsMacro(false)
+{
+ Setup_StatusFunctions();
+}
+
+
+PE_Defines::~PE_Defines()
+{
+}
+
+void
+PE_Defines::Call_Handler( const cpp::Token & i_rTok )
+{
+ pStati->Cur().Call_Handler(i_rTok.TypeId(), i_rTok.Text());
+}
+
+void
+PE_Defines::Setup_StatusFunctions()
+{
+ typedef CallFunction<PE_Defines>::F_Tok F_Tok;
+ static F_Tok stateF_expectName[] = { &PE_Defines::On_expectName_DefineName,
+ &PE_Defines::On_expectName_MacroName
+ };
+ static INT16 stateT_expectName[] = { Tid_DefineName,
+ Tid_MacroName
+ };
+
+ static F_Tok stateF_gotDefineName[] = { &PE_Defines::On_gotDefineName_PreProDefinition };
+ static INT16 stateT_gotDefineName[] = { Tid_PreProDefinition };
+
+ static F_Tok stateF_expectMacroParameters[] =
+ { &PE_Defines::On_expectMacroParameters_MacroParameter,
+ &PE_Defines::On_expectMacroParameters_PreProDefinition
+ };
+ static INT16 stateT_expectMacroParameters[] =
+ { Tid_MacroParameter,
+ Tid_PreProDefinition
+ };
+
+ SEMPARSE_CREATE_STATUS(PE_Defines, expectName, Hdl_SyntaxError);
+ SEMPARSE_CREATE_STATUS(PE_Defines, gotDefineName, Hdl_SyntaxError);
+ SEMPARSE_CREATE_STATUS(PE_Defines, expectMacroParameters, Hdl_SyntaxError);
+}
+
+void
+PE_Defines::InitData()
+{
+ pStati->SetCur(expectName);
+
+ sName.clear();
+ csv::erase_container( aParameters );
+ csv::erase_container( aDefinition );
+ bIsMacro = false;
+}
+
+void
+PE_Defines::TransferData()
+{
+ if (NOT bIsMacro)
+ {
+ if (aDefinition.empty() OR aDefinition.front().empty())
+ return;
+
+ ary::cpp::Define &
+ rNew = Env().AryGate().Defs().Store_Define(
+ Env().Context(), sName, aDefinition );
+ Env().Event_Store_CppDefinition(rNew);
+ }
+ else
+ {
+ ary::cpp::Macro &
+ rNew = Env().AryGate().Defs().Store_Macro(
+ Env().Context(), sName, aParameters, aDefinition );
+ Env().Event_Store_CppDefinition(rNew);
+ }
+ pStati->SetCur(size_of_states);
+}
+
+void
+PE_Defines::Hdl_SyntaxError( const char * i_sText)
+{
+ StdHandlingOfSyntaxError(i_sText);
+}
+
+void
+PE_Defines::On_expectName_DefineName( const char * i_sText )
+{
+ SetTokenResult(done, stay);
+ pStati->SetCur(gotDefineName);
+
+ sName = i_sText;
+ bIsMacro = false;
+}
+
+void
+PE_Defines::On_expectName_MacroName( const char * i_sText )
+{
+ SetTokenResult(done, stay);
+ pStati->SetCur(expectMacroParameters);
+
+ sName = i_sText;
+ bIsMacro = true;
+}
+
+void
+PE_Defines::On_gotDefineName_PreProDefinition( const char * i_sText )
+{
+ SetTokenResult(done, pop_success);
+
+ aDefinition.push_back( String (i_sText) );
+}
+
+void
+PE_Defines::On_expectMacroParameters_MacroParameter( const char * i_sText )
+{
+ SetTokenResult(done, stay);
+ aParameters.push_back( String (i_sText) );
+}
+
+void
+PE_Defines::On_expectMacroParameters_PreProDefinition( const char * i_sText )
+{
+ SetTokenResult(done, pop_success);
+
+ aDefinition.push_back( String (i_sText) );
+}
+
+
+} // namespace cpp
+
diff --git a/autodoc/source/parser/cpp/pe_defs.hxx b/autodoc/source/parser/cpp/pe_defs.hxx
new file mode 100644
index 000000000000..82b87ad51cca
--- /dev/null
+++ b/autodoc/source/parser/cpp/pe_defs.hxx
@@ -0,0 +1,94 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_CPP_PE_DEFS_HXX
+#define ADC_CPP_PE_DEFS_HXX
+
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include "cpp_pe.hxx"
+ // COMPONENTS
+#include <semantic/callf.hxx>
+#include <semantic/sub_peu.hxx>
+ // PARAMETERS
+
+
+namespace cpp
+{
+
+
+
+class PE_Defines : public cpp::Cpp_PE
+{
+ public:
+ enum E_State
+ {
+ expectName,
+ gotDefineName,
+ expectMacroParameters,
+ size_of_states
+ };
+
+ PE_Defines(
+ Cpp_PE * i_pParent );
+ ~PE_Defines();
+
+ virtual void Call_Handler(
+ const cpp::Token & i_rTok );
+
+ private:
+ void Setup_StatusFunctions();
+ virtual void InitData();
+ virtual void TransferData();
+ void Hdl_SyntaxError( const char *);
+
+ void On_expectName_DefineName( const char * );
+ void On_expectName_MacroName( const char * );
+
+ void On_gotDefineName_PreProDefinition( const char * );
+
+ void On_expectMacroParameters_MacroParameter( const char * );
+ void On_expectMacroParameters_PreProDefinition( const char * );
+
+ // DATA
+ Dyn< PeStatusArray<PE_Defines> >
+ pStati;
+
+ String sName;
+ StringVector aParameters;
+ StringVector aDefinition;
+ bool bIsMacro;
+};
+
+
+
+} //namespace cpp
+#endif
+
diff --git a/autodoc/source/parser/cpp/pe_enum.cxx b/autodoc/source/parser/cpp/pe_enum.cxx
new file mode 100644
index 000000000000..5fda19e4484d
--- /dev/null
+++ b/autodoc/source/parser/cpp/pe_enum.cxx
@@ -0,0 +1,189 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "pe_enum.hxx"
+
+
+// NOT FULLY DECLARED SERVICES
+#include <ary/cpp/c_gate.hxx>
+#include <ary/cpp/c_enum.hxx>
+#include <ary/cpp/cp_ce.hxx>
+#include <all_toks.hxx>
+#include "pe_enval.hxx"
+
+
+namespace cpp {
+
+
+PE_Enum::PE_Enum(Cpp_PE * i_pParent )
+ : Cpp_PE(i_pParent),
+ pStati( new PeStatusArray<PE_Enum> ),
+ // pSpValue,
+ // pSpuValue,
+ // sLocalName,
+ pCurObject(0),
+ eResult_KindOf(is_declaration)
+{
+ Setup_StatusFunctions();
+
+ pSpValue = new SP_EnumValue(*this);
+ pSpuValue = new SPU_EnumValue(*pSpValue, 0, 0);
+}
+
+
+PE_Enum::~PE_Enum()
+{
+}
+
+void
+PE_Enum::Call_Handler( const cpp::Token & i_rTok )
+{
+ pStati->Cur().Call_Handler(i_rTok.TypeId(), i_rTok.Text());
+}
+
+void
+PE_Enum::Setup_StatusFunctions()
+{
+ typedef CallFunction<PE_Enum>::F_Tok F_Tok;
+ static F_Tok stateF_expectName[] = { &PE_Enum::On_expectName_Identifier,
+ &PE_Enum::On_expectName_SwBracket_Left
+ };
+ static INT16 stateT_expectName[] = { Tid_Identifier,
+ Tid_SwBracket_Left
+ };
+
+ static F_Tok stateF_gotName[] = { &PE_Enum::On_gotName_SwBracket_Left };
+ static INT16 stateT_gotName[] = { Tid_SwBracket_Left };
+
+ static F_Tok stateF_bodyStd[] = { &PE_Enum::On_bodyStd_Identifier,
+ &PE_Enum::On_bodyStd_SwBracket_Right };
+ static INT16 stateT_bodyStd[] = { Tid_Identifier,
+ Tid_SwBracket_Right };
+
+ static F_Tok stateF_afterBlock[] = { &PE_Enum::On_afterBlock_Semicolon };
+ static INT16 stateT_afterBlock[] = { Tid_Semicolon };
+
+ SEMPARSE_CREATE_STATUS(PE_Enum, expectName, Hdl_SyntaxError);
+ SEMPARSE_CREATE_STATUS(PE_Enum, gotName, On_gotName_Return2Type);
+ SEMPARSE_CREATE_STATUS(PE_Enum, bodyStd, Hdl_SyntaxError);
+ SEMPARSE_CREATE_STATUS(PE_Enum, afterBlock, On_afterBlock_Return2Type);
+}
+
+void
+PE_Enum::InitData()
+{
+ pStati->SetCur(expectName);
+ pCurObject = 0;
+ sLocalName.clear();
+ eResult_KindOf = is_declaration;
+}
+
+void
+PE_Enum::TransferData()
+{
+ pStati->SetCur(size_of_states);
+}
+
+void
+PE_Enum::Hdl_SyntaxError( const char * i_sText)
+{
+ StdHandlingOfSyntaxError(i_sText);
+}
+
+void
+PE_Enum::On_expectName_Identifier( const char * i_sText )
+{
+ SetTokenResult(done, stay);
+ pStati->SetCur(gotName);
+
+ sLocalName = i_sText;
+ pCurObject = & Env().AryGate().Ces().Store_Enum( Env().Context(), sLocalName );
+}
+
+void
+PE_Enum::On_expectName_SwBracket_Left( const char * )
+{
+ SetTokenResult(done, stay);
+ pStati->SetCur(bodyStd);
+
+ sLocalName = "";
+ pCurObject = & Env().AryGate().Ces().Store_Enum( Env().Context(), sLocalName );
+ sLocalName = pCurObject->LocalName();
+
+ Env().OpenEnum(*pCurObject);
+}
+
+void
+PE_Enum::On_gotName_SwBracket_Left( const char * )
+{
+ SetTokenResult(done, stay);
+ pStati->SetCur(bodyStd);
+ Env().OpenEnum(*pCurObject);
+}
+
+void
+PE_Enum::On_gotName_Return2Type( const char * )
+{
+ SetTokenResult(not_done, pop_success);
+
+ eResult_KindOf = is_qualified_typename;
+}
+
+void
+PE_Enum::On_bodyStd_Identifier( const char * )
+{
+ pSpuValue->Push(not_done);
+}
+
+void
+PE_Enum::On_bodyStd_SwBracket_Right( const char * )
+{
+ SetTokenResult(done, stay);
+ pStati->SetCur(afterBlock);
+
+ Env().CloseEnum();
+}
+
+void
+PE_Enum::On_afterBlock_Semicolon( const char * )
+{
+ SetTokenResult(not_done, pop_success);
+ eResult_KindOf = is_declaration;
+}
+
+void
+PE_Enum::On_afterBlock_Return2Type( const char * )
+{
+ SetTokenResult(not_done, pop_success);
+ eResult_KindOf = is_implicit_declaration;
+}
+
+} // namespace cpp
+
+
+
diff --git a/autodoc/source/parser/cpp/pe_enum.hxx b/autodoc/source/parser/cpp/pe_enum.hxx
new file mode 100644
index 000000000000..eb6e0e25afe6
--- /dev/null
+++ b/autodoc/source/parser/cpp/pe_enum.hxx
@@ -0,0 +1,138 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_CPP_PE_ENUM_HXX
+#define ADC_CPP_PE_ENUM_HXX
+
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include "cpp_pe.hxx"
+ // COMPONENTS
+#include <semantic/callf.hxx>
+#include <semantic/sub_peu.hxx>
+ // PARAMETERS
+// #include "all_toks.hxx"
+
+
+namespace cpp {
+
+
+class PE_EnumValue;
+
+class PE_Enum : public cpp::Cpp_PE
+{
+ public:
+ enum E_State
+ {
+ expectName, /// after "enum"
+ gotName, /// after name, before : or {
+ bodyStd, /// after {
+ afterBlock, /// after ending }
+ size_of_states
+ };
+
+ enum E_KindOfResult
+ {
+ is_declaration, // normal
+ is_implicit_declaration, // like in: enum Abc { rot, gelb, blau } aAbc;
+ is_qualified_typename // like in: enum Abc * fx();
+
+ };
+ PE_Enum(
+ Cpp_PE * i_pParent );
+ ~PE_Enum();
+
+ virtual void Call_Handler(
+ const cpp::Token & i_rTok );
+
+ E_KindOfResult Result_KindOf() const;
+ const String & Result_LocalName() const;
+ const String & Result_FirstNameSegment() const;
+
+ private:
+ typedef SubPe< PE_Enum, PE_EnumValue > SP_EnumValue;
+ typedef SubPeUse< PE_Enum, PE_EnumValue> SPU_EnumValue;
+
+ void Setup_StatusFunctions();
+ virtual void InitData();
+ virtual void TransferData();
+ void Hdl_SyntaxError( const char *);
+
+ void On_expectName_Identifier( const char * );
+ void On_expectName_SwBracket_Left( const char * );
+
+ void On_gotName_SwBracket_Left( const char * );
+ void On_gotName_Return2Type( const char * );
+
+ void On_bodyStd_Identifier( const char * );
+ void On_bodyStd_SwBracket_Right( const char * );
+
+ void On_afterBlock_Semicolon( const char * );
+ void On_afterBlock_Return2Type( const char * );
+
+ // DATA
+ Dyn< PeStatusArray<PE_Enum> >
+ pStati;
+ Dyn<SP_EnumValue> pSpValue;
+ Dyn<SPU_EnumValue> pSpuValue;
+
+ String sLocalName;
+ ary::cpp::Enum * pCurObject;
+
+ E_KindOfResult eResult_KindOf;
+};
+
+
+
+// IMPLEMENTATION
+inline PE_Enum::E_KindOfResult
+PE_Enum::Result_KindOf() const
+{
+ return eResult_KindOf;
+}
+
+inline const String &
+PE_Enum::Result_LocalName() const
+{
+ return sLocalName;
+}
+
+inline const String &
+PE_Enum::Result_FirstNameSegment() const
+{
+ return sLocalName;
+}
+
+
+} // namespace cpp
+
+
+#endif
+
diff --git a/autodoc/source/parser/cpp/pe_enval.cxx b/autodoc/source/parser/cpp/pe_enval.cxx
new file mode 100644
index 000000000000..cdf2038a8dc7
--- /dev/null
+++ b/autodoc/source/parser/cpp/pe_enval.cxx
@@ -0,0 +1,168 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "pe_enval.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include <cosv/tpl/tpltools.hxx>
+#include <ary/cpp/c_gate.hxx>
+#include <ary/cpp/cp_ce.hxx>
+#include "pe_expr.hxx"
+
+
+
+namespace cpp {
+
+
+PE_EnumValue::PE_EnumValue( Cpp_PE * i_pParent )
+ : Cpp_PE(i_pParent),
+ pStati( new PeStatusArray<PE_EnumValue> )
+ // pSpExpression,
+ // pSpuInitExpression
+{
+ Setup_StatusFunctions();
+
+ pSpExpression = new SP_Expression(*this);
+ pSpuInitExpression = new SPU_Expression(*pSpExpression, 0, &PE_EnumValue::SpReturn_InitExpression);
+}
+
+PE_EnumValue::~PE_EnumValue()
+{
+}
+
+void
+PE_EnumValue::Call_Handler( const cpp::Token & i_rTok )
+{
+ pStati->Cur().Call_Handler(i_rTok.TypeId(), i_rTok.Text());
+}
+
+void
+PE_EnumValue::Setup_StatusFunctions()
+{
+ typedef CallFunction<PE_EnumValue>::F_Tok F_Tok;
+
+ static F_Tok stateF_start[] = { &PE_EnumValue::On_start_Identifier };
+ static INT16 stateT_start[] = { Tid_Identifier };
+
+ static F_Tok stateF_afterName[] = { &PE_EnumValue::On_afterName_SwBracket_Right,
+ &PE_EnumValue::On_afterName_Comma,
+ &PE_EnumValue::On_afterName_Assign };
+ static INT16 stateT_afterName[] = { Tid_SwBracket_Right,
+ Tid_Comma,
+ Tid_Assign };
+
+ static F_Tok stateF_expectFinish[] = { &PE_EnumValue::On_expectFinish_SwBracket_Right,
+ &PE_EnumValue::On_expectFinish_Comma };
+ static INT16 stateT_expectFinish[] = { Tid_SwBracket_Right,
+ Tid_Comma };
+
+ SEMPARSE_CREATE_STATUS(PE_EnumValue, start, Hdl_SyntaxError);
+ SEMPARSE_CREATE_STATUS(PE_EnumValue, afterName, Hdl_SyntaxError);
+ SEMPARSE_CREATE_STATUS(PE_EnumValue, expectFinish, Hdl_SyntaxError);
+}
+
+void
+PE_EnumValue::InitData()
+{
+ pStati->SetCur(start);
+
+ sName.clear();
+ sInitExpression.clear();
+}
+
+void
+PE_EnumValue::TransferData()
+{
+ pStati->SetCur(size_of_states);
+
+ ary::cpp::EnumValue &
+ rEnVal = Env().AryGate().Ces().Store_EnumValue(
+ Env().Context(), sName, sInitExpression );
+ Env().Event_Store_EnumValue(rEnVal);
+}
+
+void
+PE_EnumValue::Hdl_SyntaxError( const char * i_sText)
+{
+ StdHandlingOfSyntaxError(i_sText);
+}
+
+void
+PE_EnumValue::SpReturn_InitExpression()
+{
+ pStati->SetCur(expectFinish);
+
+ sInitExpression = pSpuInitExpression->Child().Result_Text();
+}
+
+void
+PE_EnumValue::On_start_Identifier(const char * i_sText)
+{
+ SetTokenResult(done, stay);
+ pStati->SetCur(afterName);
+
+ sName = i_sText;
+}
+
+void
+PE_EnumValue::On_afterName_SwBracket_Right(const char *)
+{
+ SetTokenResult(not_done, pop_success);
+}
+
+void
+PE_EnumValue::On_afterName_Comma(const char * )
+{
+ SetTokenResult(done, pop_success);
+}
+
+void
+PE_EnumValue::On_afterName_Assign(const char * )
+{
+ pSpuInitExpression->Push(done);
+}
+
+void
+PE_EnumValue::On_expectFinish_SwBracket_Right(const char * )
+{
+ SetTokenResult(not_done, pop_success);
+}
+
+void
+PE_EnumValue::On_expectFinish_Comma(const char * )
+{
+ SetTokenResult(done, pop_success);
+}
+
+
+} // namespace cpp
+
+
+
+
diff --git a/autodoc/source/parser/cpp/pe_enval.hxx b/autodoc/source/parser/cpp/pe_enval.hxx
new file mode 100644
index 000000000000..8f42b7e04316
--- /dev/null
+++ b/autodoc/source/parser/cpp/pe_enval.hxx
@@ -0,0 +1,99 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_CPP_PE_ENVAL_HXX
+#define ADC_CPP_PE_ENVAL_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include "cpp_pe.hxx"
+ // COMPONENTS
+#include <semantic/callf.hxx>
+#include <semantic/sub_peu.hxx>
+ // PARAMETERS
+
+
+namespace cpp {
+
+class PE_Expression;
+
+
+class PE_EnumValue : public Cpp_PE
+{
+ public:
+ enum E_State
+ {
+ start, // before name
+ afterName,
+ expectFinish, // after init-expression
+ size_of_states
+ };
+ PE_EnumValue(
+ Cpp_PE * i_pParent );
+ ~PE_EnumValue();
+
+ virtual void Call_Handler(
+ const cpp::Token & i_rTok );
+
+ private:
+ typedef SubPe< PE_EnumValue, PE_Expression > SP_Expression;
+ typedef SubPeUse< PE_EnumValue, PE_Expression> SPU_Expression;
+
+ void Setup_StatusFunctions();
+ virtual void InitData();
+ virtual void TransferData();
+ void Hdl_SyntaxError(const char *);
+
+ void SpReturn_InitExpression();
+
+ void On_start_Identifier(const char * );
+
+ void On_afterName_SwBracket_Right(const char * );
+ void On_afterName_Comma(const char * );
+ void On_afterName_Assign(const char * );
+
+ void On_expectFinish_SwBracket_Right(const char * );
+ void On_expectFinish_Comma(const char * );
+
+ // DATA
+ Dyn< PeStatusArray<PE_EnumValue> >
+ pStati;
+ Dyn<SP_Expression> pSpExpression;
+ Dyn<SPU_Expression> pSpuInitExpression;
+
+ String sName;
+ String sInitExpression;
+};
+
+
+
+
+} // namespace cpp
+#endif
+
diff --git a/autodoc/source/parser/cpp/pe_expr.cxx b/autodoc/source/parser/cpp/pe_expr.cxx
new file mode 100644
index 000000000000..d3b25bdf33df
--- /dev/null
+++ b/autodoc/source/parser/cpp/pe_expr.cxx
@@ -0,0 +1,204 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "pe_expr.hxx"
+
+
+// NOT FULLY DECLARED SERVICES
+
+
+namespace cpp {
+
+
+
+PE_Expression::PE_Expression( Cpp_PE * i_pParent )
+ : Cpp_PE(i_pParent),
+ pStati( new PeStatusArray<PE_Expression> ),
+ aResult_Text(100),
+ nBracketCounter(0)
+{
+ Setup_StatusFunctions();
+}
+
+
+PE_Expression::~PE_Expression()
+{
+}
+
+void
+PE_Expression::Call_Handler( const cpp::Token & i_rTok )
+{
+ pStati->Cur().Call_Handler(i_rTok.TypeId(), i_rTok.Text());
+
+#if 0
+ switch (i_rTok.TypeId())
+ {
+ case Tid_SwBracket_Left: SetTokenResult(done, stay);
+ nBracketCounter++;
+ bBlockOpened = true;
+ break;
+ case Tid_SwBracket_Right: SetTokenResult(done, stay);
+ nBracketCounter--;
+ break;
+ case Tid_Semicolon: if (nBracketCounter == 0)
+ SetTokenResult(done, pop_success);
+ else
+ SetTokenResult(done, stay);
+ break;
+ default:
+ if ( bBlockOpened AND nBracketCounter == 0 )
+ {
+ SetTokenResult(not_done, pop_success);
+ }
+ else
+ {
+ SetTokenResult(done, stay);
+ }
+ } // end switch
+#endif // 0
+}
+
+void
+PE_Expression::Setup_StatusFunctions()
+{
+ typedef CallFunction<PE_Expression>::F_Tok F_Tok;
+
+ static F_Tok stateF_std[] = { &PE_Expression::On_std_SwBracket_Left,
+ &PE_Expression::On_std_SwBracket_Right,
+ &PE_Expression::On_std_ArrayBracket_Left,
+ &PE_Expression::On_std_ArrayBracket_Right,
+ &PE_Expression::On_std_Bracket_Left,
+ &PE_Expression::On_std_Bracket_Right,
+ &PE_Expression::On_std_Semicolon,
+ &PE_Expression::On_std_Comma };
+ static INT16 stateT_std[] = { Tid_SwBracket_Left,
+ Tid_SwBracket_Right,
+ Tid_ArrayBracket_Left,
+ Tid_ArrayBracket_Right,
+ Tid_Bracket_Left,
+ Tid_Bracket_Right,
+ Tid_Semicolon,
+ Tid_Comma };
+
+ SEMPARSE_CREATE_STATUS(PE_Expression, std, On_std_Default);
+}
+
+void
+PE_Expression::InitData()
+{
+ pStati->SetCur(std);
+ aResult_Text.seekp(0);
+ nBracketCounter = 0;
+}
+
+void
+PE_Expression::TransferData()
+{
+ pStati->SetCur(size_of_states);
+ if ( aResult_Text.tellp() > 0)
+ aResult_Text.pop_back(1);
+}
+
+void
+PE_Expression::On_std_Default( const char * i_sText)
+{
+ SetTokenResult(done, stay);
+ aResult_Text << i_sText << " ";
+}
+
+void
+PE_Expression::On_std_SwBracket_Left( const char *)
+{
+ SetTokenResult(done, stay);
+ nBracketCounter++;
+}
+
+void
+PE_Expression::On_std_SwBracket_Right( const char *)
+{
+ nBracketCounter--;
+ if ( nBracketCounter >= 0 )
+ SetTokenResult(done, stay);
+ else
+ SetTokenResult(not_done, pop_success);
+}
+
+void
+PE_Expression::On_std_ArrayBracket_Left( const char *)
+{
+ SetTokenResult(done, stay);
+ nBracketCounter++;
+}
+
+void
+PE_Expression::On_std_ArrayBracket_Right( const char *)
+{
+ nBracketCounter--;
+ if ( nBracketCounter >= 0 )
+ SetTokenResult(done, stay);
+ else
+ SetTokenResult(not_done, pop_success);
+}
+
+void
+PE_Expression::On_std_Bracket_Left( const char *)
+{
+ SetTokenResult(done, stay);
+ nBracketCounter++;
+}
+
+void
+PE_Expression::On_std_Bracket_Right( const char *)
+{
+ nBracketCounter--;
+ if ( nBracketCounter >= 0 )
+ SetTokenResult(done, stay);
+ else
+ SetTokenResult(not_done, pop_success);
+}
+
+void
+PE_Expression::On_std_Semicolon( const char *)
+{
+ SetTokenResult(not_done, pop_success);
+}
+
+void
+PE_Expression::On_std_Comma( const char *)
+{
+ SetTokenResult(not_done, pop_success);
+}
+
+
+} // namespace cpp
+
+
+
+
+
+
diff --git a/autodoc/source/parser/cpp/pe_expr.hxx b/autodoc/source/parser/cpp/pe_expr.hxx
new file mode 100644
index 000000000000..24ff08e2fbb9
--- /dev/null
+++ b/autodoc/source/parser/cpp/pe_expr.hxx
@@ -0,0 +1,105 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+
+#ifndef ADC_CPP_PE_EXPR_HXX
+#define ADC_CPP_PE_EXPR_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include "cpp_pe.hxx"
+ // COMPONENTS
+#include <semantic/callf.hxx>
+#include <semantic/sub_peu.hxx>
+ // PARAMETERS
+
+
+namespace cpp {
+
+
+class PE_Expression : public Cpp_PE
+{
+ public:
+ enum E_State
+ {
+ std,
+ size_of_states
+ };
+ PE_Expression(
+ Cpp_PE * i_pParent );
+ ~PE_Expression();
+
+ const char * Result_Text() const;
+
+ virtual void Call_Handler(
+ const cpp::Token & i_rTok );
+
+ private:
+ void Setup_StatusFunctions();
+ virtual void InitData();
+ virtual void TransferData();
+ void On_std_Default( const char *);
+
+ void On_std_SwBracket_Left( const char *);
+ void On_std_SwBracket_Right( const char *);
+ void On_std_ArrayBracket_Left( const char *);
+ void On_std_ArrayBracket_Right( const char *);
+ void On_std_Bracket_Left( const char *);
+ void On_std_Bracket_Right( const char *);
+ void On_std_Semicolon( const char *);
+ void On_std_Comma( const char *);
+
+ // DATA
+ Dyn< PeStatusArray<PE_Expression> >
+ pStati;
+
+ csv::StreamStr aResult_Text;
+
+ intt nBracketCounter;
+};
+
+
+
+// IMPLEMENTATION
+
+inline const char *
+PE_Expression::Result_Text() const
+{
+ return aResult_Text.c_str();
+}
+
+
+} // namespace cpp
+
+
+
+
+#endif
+
+
diff --git a/autodoc/source/parser/cpp/pe_file.cxx b/autodoc/source/parser/cpp/pe_file.cxx
new file mode 100644
index 000000000000..c6d6935a57ad
--- /dev/null
+++ b/autodoc/source/parser/cpp/pe_file.cxx
@@ -0,0 +1,317 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "pe_file.hxx"
+
+// NOT FULLY DECLARED SERVICES
+#include "pe_defs.hxx"
+#include "pe_enum.hxx"
+#include "pe_namsp.hxx"
+#include "pe_tpltp.hxx"
+#include "pe_tydef.hxx"
+#include "pe_vafu.hxx"
+#include "pe_ignor.hxx"
+
+
+// NOT FULLY DECLARED SERVICES
+
+
+namespace cpp
+{
+
+PE_File::PE_File( cpp::PeEnvironment & io_rEnv)
+ : Cpp_PE(io_rEnv),
+ pEnv(&io_rEnv),
+ pStati( new PeStatusArray<PE_File> ),
+ // pSpNamespace,
+ // pSpTypedef,
+ // pSpVarFunc,
+ // pSpIgnore,
+ // pSpuNamespace,
+ // pSpuClass,
+ // pSpuTypedef,
+ // pSpuVarFunc,
+ // pSpuTemplate,
+ // pSpuUsing,
+ // pSpuIgnoreFailure,
+ bWithinSingleExternC(false)
+{
+ Setup_StatusFunctions();
+
+ pSpNamespace = new SP_Namespace(*this);
+ pSpTypedef = new SP_Typedef(*this);
+ pSpVarFunc = new SP_VarFunc(*this);
+ pSpTemplate = new SP_Template(*this);
+ pSpDefs = new SP_Defines(*this);
+ pSpIgnore = new SP_Ignore(*this);
+
+ pSpuNamespace = new SPU_Namespace(*pSpNamespace, 0, 0);
+ pSpuTypedef = new SPU_Typedef(*pSpTypedef, 0, 0);
+ pSpuVarFunc = new SPU_VarFunc(*pSpVarFunc, 0, &PE_File::SpReturn_VarFunc);
+ pSpuTemplate = new SPU_Template(*pSpTemplate, 0, &PE_File::SpReturn_Template);
+ pSpuDefs = new SPU_Defines(*pSpDefs, 0, 0);
+ pSpuUsing = new SPU_Ignore(*pSpIgnore, 0, 0);
+ pSpuIgnoreFailure
+ = new SPU_Ignore(*pSpIgnore, 0, 0);
+}
+
+PE_File::~PE_File()
+{
+}
+
+void
+PE_File::Call_Handler( const cpp::Token & i_rTok )
+{
+ pStati->Cur().Call_Handler(i_rTok.TypeId(), i_rTok.Text());
+}
+
+Cpp_PE *
+PE_File::Handle_ChildFailure()
+{
+ SetCurSPU(pSpuIgnoreFailure.Ptr());
+ return &pSpuIgnoreFailure->Child();
+}
+
+void
+PE_File::Setup_StatusFunctions()
+{
+ typedef CallFunction<PE_File>::F_Tok F_Tok;
+ static F_Tok stateF_std[] = { &PE_File::On_std_VarFunc,
+ &PE_File::On_std_ClassKey,
+ &PE_File::On_std_ClassKey,
+ &PE_File::On_std_ClassKey,
+ &PE_File::On_std_enum,
+
+ &PE_File::On_std_typedef,
+ &PE_File::On_std_template,
+ &PE_File::On_std_VarFunc,
+ &PE_File::On_std_VarFunc,
+ &PE_File::On_std_extern,
+
+ &PE_File::On_std_VarFunc,
+ &PE_File::On_std_VarFunc,
+ &PE_File::On_std_VarFunc,
+ &PE_File::On_std_namespace,
+ &PE_File::On_std_using,
+
+ &PE_File::On_std_SwBracketRight,
+ &PE_File::On_std_VarFunc,
+ &PE_File::On_std_VarFunc,
+ &PE_File::On_std_DefineName,
+ &PE_File::On_std_MacroName,
+
+ &PE_File::On_std_VarFunc,
+ &PE_File::On_std_VarFunc };
+
+ static INT16 stateT_std[] = { Tid_Identifier,
+ Tid_class,
+ Tid_struct,
+ Tid_union,
+ Tid_enum,
+
+ Tid_typedef,
+ Tid_template,
+ Tid_const,
+ Tid_volatile,
+ Tid_extern,
+
+ Tid_static,
+ Tid_register,
+ Tid_inline,
+ Tid_namespace,
+ Tid_using,
+
+ Tid_SwBracket_Right,
+ Tid_DoubleColon,
+ Tid_typename,
+ Tid_DefineName,
+ Tid_MacroName,
+
+ Tid_BuiltInType,
+ Tid_TypeSpecializer };
+
+ static F_Tok stateF_in_extern[] = { &PE_File::On_in_extern_Constant };
+ static INT16 stateT_in_extern[] = { Tid_Constant };
+
+ static F_Tok stateF_in_externC[] = { &PE_File::On_in_externC_SwBracket_Left };
+ static INT16 stateT_in_externC[] = { Tid_SwBracket_Left };
+
+
+ SEMPARSE_CREATE_STATUS(PE_File, std, Hdl_SyntaxError);
+ SEMPARSE_CREATE_STATUS(PE_File, in_extern, On_in_extern_Ignore);
+ SEMPARSE_CREATE_STATUS(PE_File, in_externC, On_in_externC_NoBlock);
+}
+
+void
+PE_File::InitData()
+{
+ pStati->SetCur(std);
+}
+
+void
+PE_File::TransferData()
+{
+ pStati->SetCur(size_of_states);
+}
+
+void
+PE_File::Hdl_SyntaxError( const char * i_sText)
+{
+ if ( *i_sText == ';' )
+ {
+ Cerr() << Env().CurFileName() << ", line "
+ << Env().LineCount()
+ << ": Sourcecode warning: ';' as a toplevel declaration is deprecated."
+ << Endl();
+ SetTokenResult(done,stay);
+ return;
+ }
+
+ StdHandlingOfSyntaxError(i_sText);
+}
+
+void
+PE_File::SpReturn_VarFunc()
+{
+ if (bWithinSingleExternC)
+ {
+ access_Env().CloseBlock();
+ bWithinSingleExternC = false;
+ }
+}
+
+void
+PE_File::SpReturn_Template()
+{
+ access_Env().OpenTemplate( pSpuTemplate->Child().Result_Parameters() );
+}
+
+void
+PE_File::On_std_namespace(const char * )
+{
+ pSpuNamespace->Push(done);
+}
+
+void
+PE_File::On_std_ClassKey(const char * )
+{
+ pSpuVarFunc->Push(not_done); // This is correct,
+ // classes are parsed via PE_Type.
+}
+
+void
+PE_File::On_std_typedef(const char * )
+{
+ pSpuTypedef->Push(not_done);
+}
+
+void
+PE_File::On_std_enum(const char * )
+{
+ pSpuVarFunc->Push(not_done); // This is correct,
+ // enums are parsed via PE_Type.
+}
+
+void
+PE_File::On_std_VarFunc(const char * )
+{
+ pSpuVarFunc->Push(not_done);
+}
+
+void
+PE_File::On_std_template(const char * )
+{
+ pSpuTemplate->Push(done);
+}
+
+void
+PE_File::On_std_extern(const char * )
+{
+ SetTokenResult(done, stay);
+ pStati->SetCur(in_extern);
+}
+
+void
+PE_File::On_std_using(const char * )
+{
+ pSpuUsing->Push(done);
+}
+
+void
+PE_File::On_std_SwBracketRight(const char * )
+{
+ SetTokenResult(done,stay);
+ access_Env().CloseBlock();
+}
+
+void
+PE_File::On_std_DefineName(const char * )
+{
+ pSpuDefs->Push(not_done);
+}
+
+void
+PE_File::On_std_MacroName(const char * )
+{
+ pSpuDefs->Push(not_done);
+}
+
+void
+PE_File::On_in_extern_Constant(const char * )
+{
+ SetTokenResult(done,stay);
+ pStati->SetCur(in_externC);
+
+ access_Env().OpenExternC();
+}
+
+void
+PE_File::On_in_extern_Ignore(const char * )
+{
+ SetTokenResult(not_done, stay);
+ pStati->SetCur(std);
+}
+
+void
+PE_File::On_in_externC_SwBracket_Left(const char * )
+{
+ SetTokenResult(done, stay);
+ pStati->SetCur(std);
+}
+
+void
+PE_File::On_in_externC_NoBlock(const char * )
+{
+ SetTokenResult(not_done, stay);
+ pStati->SetCur(std);
+
+ bWithinSingleExternC = true;
+}
+
+
+} // namespace cpp
diff --git a/autodoc/source/parser/cpp/pe_file.hxx b/autodoc/source/parser/cpp/pe_file.hxx
new file mode 100644
index 000000000000..eb88a311e558
--- /dev/null
+++ b/autodoc/source/parser/cpp/pe_file.hxx
@@ -0,0 +1,209 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_CPP_PE_FILE_HXX
+#define ADC_CPP_PE_FILE_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include "cpp_pe.hxx"
+ // COMPONENTS
+#include <semantic/callf.hxx>
+#include <semantic/sub_peu.hxx>
+ // PARAMETERS
+
+
+namespace cpp {
+
+ class PeEnvironment;
+
+ class PE_Namespace;
+ class PE_Enum;
+ class PE_Typedef;
+ class PE_VarFunc;
+ class PE_TemplateTop;
+ class PE_Defines;
+ class PE_Ignore;
+
+#if 0
+class PE_Template;
+class PE_Extern;
+#endif
+
+
+class PE_File : public Cpp_PE
+{
+ public:
+ enum E_State
+ {
+ std, /// before class, struct or union
+ in_extern,
+ in_externC,
+ size_of_states
+ };
+
+ PE_File(
+ PeEnvironment & io_rEnv );
+ ~PE_File();
+
+ virtual void Call_Handler(
+ const cpp::Token & i_rTok );
+ virtual Cpp_PE * Handle_ChildFailure();
+
+ private:
+ typedef SubPe< PE_File, PE_Namespace> SP_Namespace;
+ typedef SubPe< PE_File, PE_Typedef> SP_Typedef;
+ typedef SubPe< PE_File, PE_VarFunc> SP_VarFunc;
+ typedef SubPe< PE_File, PE_TemplateTop> SP_Template;
+ typedef SubPe< PE_File, PE_Defines> SP_Defines;
+ typedef SubPe< PE_File, PE_Ignore > SP_Ignore;
+#if 0
+ typedef SubPe< PE_File, PE_Using> SP_Using;
+#endif // 0
+
+ typedef SubPeUse< PE_File, PE_Namespace> SPU_Namespace;
+ typedef SubPeUse< PE_File, PE_Typedef> SPU_Typedef;
+ typedef SubPeUse< PE_File, PE_VarFunc> SPU_VarFunc;
+ typedef SubPeUse< PE_File, PE_TemplateTop> SPU_Template;
+ typedef SubPeUse< PE_File, PE_Defines> SPU_Defines;
+ typedef SubPeUse< PE_File, PE_Ignore> SPU_Ignore;
+
+ void Setup_StatusFunctions();
+ virtual void InitData();
+ virtual void TransferData();
+ void Hdl_SyntaxError( const char *);
+
+ void SpReturn_VarFunc();
+ void SpReturn_Template();
+
+ void On_std_namespace(const char * i_sText);
+ void On_std_ClassKey(const char * i_sText);
+ void On_std_typedef(const char * i_sText);
+ void On_std_enum(const char * i_sText);
+ void On_std_VarFunc(const char * i_sText);
+ void On_std_template(const char * i_sText);
+ void On_std_extern(const char * i_sText);
+ void On_std_using(const char * i_sText);
+ void On_std_SwBracketRight(const char * i_sText);
+
+ void On_std_DefineName(const char * i_sText);
+ void On_std_MacroName(const char * i_sText);
+
+ void On_in_extern_Constant(const char * i_sText);
+ void On_in_extern_Ignore(const char * i_sText);
+ void On_in_externC_SwBracket_Left(const char * i_sText);
+ void On_in_externC_NoBlock(const char * i_sText);
+
+ PeEnvironment & access_Env() { return *pEnv; }
+
+
+ // DATA
+ PeEnvironment * pEnv;
+
+ Dyn< PeStatusArray<PE_File> >
+ pStati;
+
+ Dyn<SP_Namespace> pSpNamespace;
+ Dyn<SP_Typedef> pSpTypedef;
+ Dyn<SP_VarFunc> pSpVarFunc;
+ Dyn<SP_Template> pSpTemplate;
+ Dyn<SP_Defines> pSpDefs;
+
+ Dyn<SP_Ignore> pSpIgnore;
+#if 0
+ SP_Using aSpUsing;
+#endif // 0
+
+ Dyn<SPU_Namespace> pSpuNamespace;
+ Dyn<SPU_Typedef> pSpuTypedef;
+ Dyn<SPU_VarFunc> pSpuVarFunc;
+ Dyn<SPU_Template> pSpuTemplate;
+ Dyn<SPU_Defines> pSpuDefs;
+
+ Dyn<SPU_Ignore> pSpuUsing;
+ Dyn<SPU_Ignore> pSpuIgnoreFailure;
+
+ bool bWithinSingleExternC; /** After 'extern "C"' without following '{',
+ waiting for the next function or variable to
+ set back to false.
+ */
+};
+
+} // namespace cpp
+
+
+
+#if 0 // Branches
+
+namespace
+ -> Named Namespace declaration
+ -> Unnamed Namespace declaration
+ -> Namespace alias definition
+
+class struct union
+ -> Class
+ -> Predeclaration
+
+typedef
+ -> Typedef
+
+enum
+ -> Enum
+
+extern
+ -> Extern-"C"
+ -> TypeDeclaration
+
+TypeDeclaration
+ -> FunctionDecl
+ -> FunctionDef
+ -> Variable
+
+template
+ -> TemplateClass
+ -> TemplateFunction
+ -> TemplateFunction/Method-Implementation
+ -> TemplatePredeclaration
+
+}
+ -> End of Namespace
+ -> End of Extern-"C"
+
+asm
+ -> AssemblerDeclaration
+
+using
+ -> Using-Declaration
+ -> Using-Directive
+
+#endif // 0
+
+
+#endif
+
diff --git a/autodoc/source/parser/cpp/pe_funct.cxx b/autodoc/source/parser/cpp/pe_funct.cxx
new file mode 100644
index 000000000000..14bff991cb4d
--- /dev/null
+++ b/autodoc/source/parser/cpp/pe_funct.cxx
@@ -0,0 +1,610 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "pe_funct.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include <cosv/tpl/tpltools.hxx>
+#include <ary/cpp/c_gate.hxx>
+#include <ary/cpp/c_funct.hxx>
+#include <ary/cpp/c_type.hxx>
+#include <ary/cpp/cp_ce.hxx>
+#include <ary/cpp/cp_type.hxx>
+#include <ary/cpp/inpcontx.hxx>
+#include "pe_type.hxx"
+#include "pe_param.hxx"
+
+
+
+
+namespace cpp
+{
+
+
+inline void
+PE_Function::PerformFinishingPunctuation()
+{
+ SetTokenResult(not_done,pop_success);
+}
+
+
+PE_Function::PE_Function( Cpp_PE * i_pParent )
+ : Cpp_PE(i_pParent),
+ pStati( new PeStatusArray<PE_Function> ),
+ // pSpParameter,
+ // pSpuParameter,
+ // pSpType,
+ // pSpuException,
+ // pSpuCastOperatorType,
+ nResult(0),
+ bResult_WithImplementation(false),
+ aName(60),
+ eVirtuality(ary::cpp::VIRTUAL_none),
+ eConVol(ary::cpp::CONVOL_none),
+ // aFlags,
+ nReturnType(0),
+ // aParameters
+ // aExceptions,
+ bThrow(false),
+ nBracketCounterInImplementation(0)
+{
+ Setup_StatusFunctions();
+
+ pSpParameter = new SP_Parameter(*this);
+ pSpType = new SP_Type(*this);
+
+ pSpuParameter = new SPU_Parameter(*pSpParameter, 0, &PE_Function::SpReturn_Parameter);
+ pSpuException = new SPU_Type(*pSpType, 0, &PE_Function::SpReturn_Exception);
+ pSpuCastOperatorType = new SPU_Type(*pSpType, &PE_Function::SpInit_CastOperatorType, &PE_Function::SpReturn_CastOperatorType);
+}
+
+PE_Function::~PE_Function()
+{
+
+}
+
+void
+PE_Function::Init_Std( const String & i_sName,
+ ary::cpp::Type_id i_nReturnType,
+ bool i_bVirtual,
+ ary::cpp::FunctionFlags i_aFlags )
+{
+ aName << i_sName;
+ eVirtuality = i_bVirtual ? ary::cpp::VIRTUAL_virtual : ary::cpp::VIRTUAL_none;
+ aFlags = i_aFlags;
+ nReturnType = i_nReturnType;
+ pStati->SetCur(afterName);
+}
+
+void
+PE_Function::Init_Ctor( const String & i_sName,
+ ary::cpp::FunctionFlags i_aFlags )
+{
+ aName << i_sName;
+ eVirtuality = ary::cpp::VIRTUAL_none;
+ aFlags = i_aFlags;
+ nReturnType = 0;
+ pStati->SetCur(afterName);
+}
+
+void
+PE_Function::Init_Dtor( const String & i_sName,
+ bool i_bVirtual,
+ ary::cpp::FunctionFlags i_aFlags )
+{
+ aName << "~" << i_sName;
+ eVirtuality = i_bVirtual ? ary::cpp::VIRTUAL_virtual : ary::cpp::VIRTUAL_none;
+ aFlags = i_aFlags;
+ nReturnType = 0;
+ pStati->SetCur(afterName);
+}
+
+void
+PE_Function::Init_CastOperator( bool i_bVirtual,
+ ary::cpp::FunctionFlags i_aFlags )
+{
+ aName << "operator ";
+ eVirtuality = i_bVirtual ? ary::cpp::VIRTUAL_virtual : ary::cpp::VIRTUAL_none;
+ aFlags = i_aFlags;
+ nReturnType = 0;
+ pStati->SetCur(afterCastOperator);
+}
+
+void
+PE_Function::Init_NormalOperator( ary::cpp::Type_id i_nReturnType,
+ bool i_bVirtual,
+ ary::cpp::FunctionFlags i_aFlags )
+{
+ aName << "operator";
+ eVirtuality = i_bVirtual ? ary::cpp::VIRTUAL_virtual : ary::cpp::VIRTUAL_none;
+ aFlags = i_aFlags;
+ nReturnType = i_nReturnType;
+ pStati->SetCur(afterStdOperator);
+}
+
+ary::cpp::Ce_id
+PE_Function::Result_Id() const
+{
+ return nResult;
+}
+
+void
+PE_Function::Call_Handler( const cpp::Token & i_rTok )
+{
+ pStati->Cur().Call_Handler(i_rTok.TypeId(), i_rTok.Text());
+}
+
+void
+PE_Function::Setup_StatusFunctions()
+{
+ typedef CallFunction<PE_Function>::F_Tok F_Tok;
+
+ static F_Tok stateF_afterStdOperator[] =
+ { &PE_Function::On_afterOperator_Std_Operator,
+ &PE_Function::On_afterOperator_Std_LeftBracket,
+ &PE_Function::On_afterOperator_Std_LeftBracket,
+ &PE_Function::On_afterOperator_Std_Operator,
+ &PE_Function::On_afterOperator_Std_Operator,
+ &PE_Function::On_afterOperator_Std_Operator,
+ &PE_Function::On_afterOperator_Std_Operator,
+ &PE_Function::On_afterOperator_Std_Operator,
+ &PE_Function::On_afterOperator_Std_Operator };
+ static INT16 stateT_afterStdOperator[] =
+ { Tid_Operator,
+ Tid_ArrayBracket_Left,
+ Tid_Bracket_Left,
+ Tid_Comma,
+ Tid_Assign,
+ Tid_Less,
+ Tid_Greater,
+ Tid_Asterix,
+ Tid_AmpersAnd };
+
+ static F_Tok stateF_afterStdOperatorLeftBracket[] =
+ { &PE_Function::On_afterStdOperatorLeftBracket_RightBracket,
+ &PE_Function::On_afterStdOperatorLeftBracket_RightBracket };
+ static INT16 stateT_afterStdOperatorLeftBracket[] =
+ { Tid_ArrayBracket_Right,
+ Tid_Bracket_Right };
+
+ static F_Tok stateF_afterCastOperator[] =
+ { &PE_Function::On_afterOperator_Cast_Type,
+ &PE_Function::On_afterOperator_Cast_Type,
+ &PE_Function::On_afterOperator_Cast_Type,
+ &PE_Function::On_afterOperator_Cast_Type,
+ &PE_Function::On_afterOperator_Cast_Type,
+ &PE_Function::On_afterOperator_Cast_Type,
+ &PE_Function::On_afterOperator_Cast_Type,
+ &PE_Function::On_afterOperator_Cast_Type,
+ &PE_Function::On_afterOperator_Cast_Type,
+ &PE_Function::On_afterOperator_Cast_Type,
+ &PE_Function::On_afterOperator_Cast_Type };
+ static INT16 stateT_afterCastOperator[] =
+ { Tid_Identifier,
+ Tid_class,
+ Tid_struct,
+ Tid_union,
+ Tid_enum,
+ Tid_const,
+ Tid_volatile,
+ Tid_DoubleColon,
+ Tid_typename,
+ Tid_BuiltInType,
+ Tid_TypeSpecializer };
+
+ static F_Tok stateF_afterName[] = { &PE_Function::On_afterName_Bracket_Left };
+ static INT16 stateT_afterName[] = { Tid_Bracket_Left };
+
+ static F_Tok stateF_expectParameterSeparator[] =
+ { &PE_Function::On_expectParameterSeparator_BracketRight,
+ &PE_Function::On_expectParameterSeparator_Comma };
+ static INT16 stateT_expectParameterSeparator[] =
+ { Tid_Bracket_Right,
+ Tid_Comma };
+
+ static F_Tok stateF_afterParameters[] = { &PE_Function::On_afterParameters_const,
+ &PE_Function::On_afterParameters_volatile,
+ &PE_Function::On_afterParameters_throw,
+ &PE_Function::On_afterParameters_SwBracket_Left,
+ &PE_Function::On_afterParameters_Semicolon,
+ &PE_Function::On_afterParameters_Comma,
+ &PE_Function::On_afterParameters_Colon,
+ &PE_Function::On_afterParameters_Assign };
+ static INT16 stateT_afterParameters[] = { Tid_const,
+ Tid_volatile,
+ Tid_throw,
+ Tid_SwBracket_Left,
+ Tid_Semicolon,
+ Tid_Comma,
+ Tid_Colon,
+ Tid_Assign };
+
+ static F_Tok stateF_afterThrow[] = { &PE_Function::On_afterThrow_Bracket_Left };
+ static INT16 stateT_afterThrow[] = { Tid_Bracket_Left };
+
+ static F_Tok stateF_expectExceptionSeparator[] =
+ { &PE_Function::On_expectExceptionSeparator_BracketRight,
+ &PE_Function::On_expectExceptionSeparator_Comma };
+ static INT16 stateT_expectExceptionSeparator[] =
+ { Tid_Bracket_Right,
+ Tid_Comma };
+
+ static F_Tok stateF_afterExceptions[] = { &PE_Function::On_afterExceptions_SwBracket_Left,
+ &PE_Function::On_afterExceptions_Semicolon,
+ &PE_Function::On_afterExceptions_Comma,
+ &PE_Function::On_afterExceptions_Colon,
+ &PE_Function::On_afterExceptions_Assign };
+ static INT16 stateT_afterExceptions[] = { Tid_SwBracket_Left,
+ Tid_Semicolon,
+ Tid_Comma,
+ Tid_Colon,
+ Tid_Assign };
+
+ static F_Tok stateF_expectZero[] = { &PE_Function::On_expectZero_Constant };
+ static INT16 stateT_expectZero[] = { Tid_Constant };
+
+ static F_Tok stateF_inImplementation[] =
+ { &PE_Function::On_inImplementation_SwBracket_Left,
+ &PE_Function::On_inImplementation_SwBracket_Right };
+ static INT16 stateT_inImplementation[] =
+ { Tid_SwBracket_Left,
+ Tid_SwBracket_Right };
+
+ SEMPARSE_CREATE_STATUS(PE_Function, afterStdOperator, Hdl_SyntaxError);
+ SEMPARSE_CREATE_STATUS(PE_Function, afterStdOperatorLeftBracket, Hdl_SyntaxError);
+ SEMPARSE_CREATE_STATUS(PE_Function, afterCastOperator, Hdl_SyntaxError);
+ SEMPARSE_CREATE_STATUS(PE_Function, afterName, Hdl_SyntaxError);
+ SEMPARSE_CREATE_STATUS(PE_Function, expectParameterSeparator, Hdl_SyntaxError);
+ SEMPARSE_CREATE_STATUS(PE_Function, afterParameters, Hdl_SyntaxError);
+ SEMPARSE_CREATE_STATUS(PE_Function, afterThrow, Hdl_SyntaxError);
+ SEMPARSE_CREATE_STATUS(PE_Function, expectExceptionSeparator, Hdl_SyntaxError);
+ SEMPARSE_CREATE_STATUS(PE_Function, afterExceptions, Hdl_SyntaxError);
+ SEMPARSE_CREATE_STATUS(PE_Function, expectZero, Hdl_SyntaxError);
+ SEMPARSE_CREATE_STATUS(PE_Function, inImplementation, On_inImplementation_Default );
+}
+
+void
+PE_Function::InitData()
+{
+ pStati->SetCur( afterName ),
+ nResult = 0;
+ bResult_WithImplementation = false;
+ aName.seekp(0);
+ eVirtuality = ary::cpp::VIRTUAL_none;
+ eConVol = ary::cpp::CONVOL_none;
+ aFlags.Reset();
+ nReturnType = 0;
+ csv::erase_container(aParameters);
+ csv::erase_container(aExceptions);
+ bThrow = false;
+}
+
+void
+PE_Function::TransferData()
+{
+ String sName( aName.c_str() );
+ ary::cpp::Function *
+ pFunction = Env().AryGate().Ces().Store_Operation(
+ Env().Context(),
+ sName,
+ nReturnType,
+ aParameters,
+ eVirtuality,
+ eConVol,
+ aFlags,
+ bThrow,
+ aExceptions );
+ if (pFunction != 0)
+ {
+ // KORR_FUTURE: How to handle differing documentation?
+
+ Dyn< StringVector >
+ pTplParams ( Env().Get_CurTemplateParameters() );
+ if ( pTplParams )
+ {
+ for ( StringVector::const_iterator it = pTplParams->begin();
+ it != pTplParams->end();
+ ++it )
+ {
+ pFunction->Add_TemplateParameterType( *it, ary::cpp::Type_id(0) );
+ } // end for
+ }
+
+ Env().Event_Store_Function(*pFunction);
+ }
+
+ pStati->SetCur(size_of_states);
+}
+
+void
+PE_Function::Hdl_SyntaxError(const char * i_sText)
+{
+ StdHandlingOfSyntaxError(i_sText);
+}
+
+void
+PE_Function::SpInit_CastOperatorType()
+{
+ pSpuCastOperatorType->Child().Init_AsCastOperatorType();
+}
+
+void
+PE_Function::SpReturn_Parameter()
+{
+ pStati->SetCur(expectParameterSeparator);
+
+ ary::cpp::Type_id nParamType = pSpuParameter->Child().Result_FrontType();
+ if ( nParamType.IsValid() ) // Check, if there was a parameter, or only the closing ')'.
+ {
+ aParameters.push_back( pSpuParameter->Child().Result_ParamInfo() );
+ }
+}
+
+void
+PE_Function::SpReturn_Exception()
+{
+ pStati->SetCur(expectExceptionSeparator);
+
+ ary::cpp::Type_id
+ nException = pSpuException->Child().Result_Type().TypeId();
+ if ( nException.IsValid() AND pSpuException->Child().Result_KindOf() == PE_Type::is_type )
+ {
+ aExceptions.push_back( nException );
+ }
+}
+
+void
+PE_Function::SpReturn_CastOperatorType()
+{
+ pStati->SetCur(afterName);
+
+ Env().AryGate().Types().Get_TypeText(
+ aName, pSpuCastOperatorType->Child().Result_Type().TypeId() );
+}
+
+void
+PE_Function::On_afterOperator_Std_Operator(const char * i_sText)
+{
+ SetTokenResult(done,stay);
+ pStati->SetCur(afterName);
+
+ if ( 'a' <= *i_sText AND *i_sText <= 'z' )
+ aName << ' ';
+ aName << i_sText;
+}
+
+void
+PE_Function::On_afterOperator_Std_LeftBracket(const char * i_sText)
+{
+ SetTokenResult(done,stay);
+ pStati->SetCur(afterStdOperatorLeftBracket);
+
+ aName << i_sText;
+}
+
+void
+PE_Function::On_afterStdOperatorLeftBracket_RightBracket(const char * i_sText)
+{
+ SetTokenResult(done,stay);
+ pStati->SetCur(afterName);
+
+ aName << i_sText;
+}
+
+void
+PE_Function::On_afterOperator_Cast_Type(const char *)
+{
+ pSpuCastOperatorType->Push(not_done);
+}
+
+void
+PE_Function::On_afterName_Bracket_Left(const char *)
+{
+ pSpuParameter->Push(done);
+}
+
+void
+PE_Function::On_expectParameterSeparator_BracketRight(const char *)
+{
+ SetTokenResult(done,stay);
+ pStati->SetCur(afterParameters);
+}
+
+void
+PE_Function::On_expectParameterSeparator_Comma(const char *)
+{
+ pSpuParameter->Push(done);
+}
+
+void
+PE_Function::On_afterParameters_const(const char *)
+{
+ SetTokenResult(done,stay);
+ eConVol = static_cast<E_ConVol>(
+ static_cast<int>(eConVol) | static_cast<int>(ary::cpp::CONVOL_const) );
+}
+
+void
+PE_Function::On_afterParameters_volatile(const char *)
+{
+ SetTokenResult(done,stay);
+ eConVol = static_cast<E_ConVol>(
+ static_cast<int>(eConVol) | static_cast<int>(ary::cpp::CONVOL_volatile) );
+}
+
+void
+PE_Function::On_afterParameters_throw(const char *)
+{
+ SetTokenResult(done,stay);
+ pStati->SetCur(afterThrow);
+ bThrow = true;
+}
+
+void
+PE_Function::On_afterParameters_SwBracket_Left(const char *)
+{
+ EnterImplementation(1);
+}
+
+void
+PE_Function::On_afterParameters_Semicolon(const char *)
+{
+ PerformFinishingPunctuation();
+}
+
+void
+PE_Function::On_afterParameters_Comma(const char *)
+{
+ PerformFinishingPunctuation();
+}
+
+void
+PE_Function::On_afterParameters_Colon(const char *)
+{
+ EnterImplementation(0);
+}
+
+void
+PE_Function::On_afterParameters_Assign(const char *)
+{
+ SetTokenResult(done,stay);
+ pStati->SetCur(expectZero);
+}
+
+void
+PE_Function::On_afterThrow_Bracket_Left(const char *)
+{
+ pSpuException->Push(done);
+}
+
+void
+PE_Function::On_expectExceptionSeparator_BracketRight(const char *)
+{
+ SetTokenResult(done,stay);
+ pStati->SetCur(afterExceptions);
+}
+
+void
+PE_Function::On_expectExceptionSeparator_Comma(const char *)
+{
+ pSpuException->Push(done);
+}
+
+void
+PE_Function::On_afterExceptions_SwBracket_Left(const char *)
+{
+ EnterImplementation(1);
+}
+
+void
+PE_Function::On_afterExceptions_Semicolon(const char *)
+{
+ PerformFinishingPunctuation();
+}
+
+void
+PE_Function::On_afterExceptions_Comma(const char *)
+{
+ PerformFinishingPunctuation();
+}
+
+void
+PE_Function::On_afterExceptions_Colon(const char *)
+{
+ EnterImplementation(0);
+}
+
+void
+PE_Function::On_afterExceptions_Assign(const char *)
+{
+ SetTokenResult(done,stay);
+ pStati->SetCur(expectZero);
+}
+
+void
+PE_Function::On_expectZero_Constant(const char * i_sText)
+{
+ if ( strcmp(i_sText,"0") != 0 )
+ Hdl_SyntaxError(i_sText);
+
+ SetTokenResult(done,stay);
+ pStati->SetCur(afterExceptions);
+
+ eVirtuality = ary::cpp::VIRTUAL_abstract;
+}
+
+void
+PE_Function::On_inImplementation_SwBracket_Left(const char *)
+{
+ SetTokenResult(done,stay);
+ nBracketCounterInImplementation++;
+}
+
+void
+PE_Function::On_inImplementation_SwBracket_Right(const char *)
+{
+ nBracketCounterInImplementation--;
+ if (nBracketCounterInImplementation == 0)
+ {
+ SetTokenResult(done,pop_success);
+ }
+ else
+ {
+ SetTokenResult(done,stay);
+ }
+}
+
+void
+PE_Function::On_inImplementation_Default(const char *)
+{
+ SetTokenResult(done,stay);
+}
+
+void
+PE_Function::EnterImplementation( intt i_nBracketCountStart )
+{
+ SetTokenResult(done,stay);
+ pStati->SetCur(inImplementation);
+
+ bResult_WithImplementation = true;
+ nBracketCounterInImplementation = i_nBracketCountStart;
+ if ( Env().Context().CurClass() != 0 )
+ {
+ aFlags.SetInline();
+ }
+}
+
+
+
+} // namespace cpp
+
+
+
+
+
diff --git a/autodoc/source/parser/cpp/pe_funct.hxx b/autodoc/source/parser/cpp/pe_funct.hxx
new file mode 100644
index 000000000000..9bbd56329b01
--- /dev/null
+++ b/autodoc/source/parser/cpp/pe_funct.hxx
@@ -0,0 +1,281 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+
+#ifndef ADC_CPP_PE_FUNCT_HXX
+#define ADC_CPP_PE_FUNCT_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include "cpp_pe.hxx"
+ // COMPONENTS
+#include <semantic/callf.hxx>
+#include <semantic/sub_peu.hxx>
+#include <ary/cpp/c_types4cpp.hxx>
+#include <ary/cpp/c_vfflag.hxx>
+ // PARAMETERS
+
+
+namespace ary
+{
+namespace cpp
+{
+class Function;
+struct S_VariableInfo;
+}
+}
+
+namespace cpp
+{
+
+class PE_Type;
+class PE_Parameter;
+
+class PE_Function : public Cpp_PE
+{
+ public:
+ enum E_State
+ {
+ afterStdOperator, // if initializes as operator
+ afterStdOperatorLeftBracket,
+ // if initializes as operator with ( or [
+ afterCastOperator, // if initializes as operator
+ afterName, // undecided
+ expectParameterSeparator, //
+ afterParameters, // before const, volatile throw or = 0.
+ afterThrow, // expect (
+ expectExceptionSeparator, //
+ afterExceptions, // = 0 oder ; oder ,
+ expectZero, // after '='
+ inImplementation, // after {
+ size_of_states
+ };
+ typedef ary::cpp::E_Protection E_Protection;
+ typedef ary::cpp::E_Virtuality E_Virtuality;
+ typedef ary::cpp::E_ConVol E_ConVol;
+
+ PE_Function(
+ Cpp_PE * i_pParent );
+ ~PE_Function();
+
+ void Init_Std(
+ const String & i_sName,
+ ary::cpp::Type_id i_nReturnType,
+ bool i_bVirtual,
+ ary::cpp::FunctionFlags
+ i_aFlags );
+ void Init_Ctor(
+ const String & i_sName,
+ ary::cpp::FunctionFlags
+ i_aFlags );
+ void Init_Dtor(
+ const String & i_sName,
+ bool i_bVirtual,
+ ary::cpp::FunctionFlags
+ i_aFlags );
+ void Init_CastOperator(
+ bool i_bVirtual,
+ ary::cpp::FunctionFlags
+ i_aFlags );
+ void Init_NormalOperator(
+ ary::cpp::Type_id i_nReturnType,
+ bool i_bVirtual,
+ ary::cpp::FunctionFlags
+ i_aFlags );
+
+ ary::cpp::Ce_id Result_Id() const;
+ bool Result_WithImplementation() const;
+
+ virtual void Call_Handler(
+ const cpp::Token & i_rTok );
+ private:
+ typedef SubPe< PE_Function, PE_Type > SP_Type;
+ typedef SubPeUse< PE_Function, PE_Type > SPU_Type;
+ typedef SubPe< PE_Function, PE_Parameter> SP_Parameter;
+ typedef SubPeUse<PE_Function, PE_Parameter> SPU_Parameter;
+
+ typedef std::vector<ary::cpp::S_Parameter> ParameterList;
+ typedef std::vector<ary::cpp::Type_id> ExceptionTypeList;
+
+ void Setup_StatusFunctions();
+ virtual void InitData();
+ virtual void TransferData();
+ void Hdl_SyntaxError(const char * i_sText);
+
+ void SpInit_CastOperatorType();
+
+ void SpReturn_Parameter();
+ void SpReturn_Exception();
+ void SpReturn_CastOperatorType();
+
+ void On_afterOperator_Std_Operator(const char * i_sText); // Operator+() etc.
+ void On_afterOperator_Std_LeftBracket(const char * i_sText); // operator [] or ()
+ void On_afterStdOperatorLeftBracket_RightBracket(const char * i_sText);
+ void On_afterOperator_Cast_Type(const char * i_sText); // Type
+
+ void On_afterName_Bracket_Left(const char * i_sText);
+
+ void On_expectParameterSeparator_BracketRight(const char * i_sText);
+ void On_expectParameterSeparator_Comma(const char * i_sText);
+
+ void On_afterParameters_const(const char * i_sText);
+ void On_afterParameters_volatile(const char * i_sText);
+ void On_afterParameters_throw(const char * i_sText);
+ void On_afterParameters_SwBracket_Left(const char * i_sText);
+ void On_afterParameters_Semicolon(const char * i_sText);
+ void On_afterParameters_Comma(const char * i_sText);
+ void On_afterParameters_Colon(const char * i_sText);
+ void On_afterParameters_Assign(const char * i_sText);
+
+ void On_afterThrow_Bracket_Left(const char * i_sText);
+
+ void On_expectExceptionSeparator_BracketRight(const char * i_sText);
+ void On_expectExceptionSeparator_Comma(const char * i_sText);
+
+ void On_afterExceptions_SwBracket_Left(const char * i_sText);
+ void On_afterExceptions_Semicolon(const char * i_sText);
+ void On_afterExceptions_Comma(const char * i_sText);
+ void On_afterExceptions_Colon(const char * i_sText);
+ void On_afterExceptions_Assign(const char * i_sText);
+
+ void On_expectZero_Constant(const char * i_sText);
+
+ void On_inImplementation_SwBracket_Left(const char * i_sText);
+ void On_inImplementation_SwBracket_Right(const char * i_sText);
+ void On_inImplementation_Default(const char * i_sText);
+
+ void PerformFinishingPunctuation();
+ void EnterImplementation(
+ intt i_nBracketCountStart ); /// 1 normally, 0 in initialisation section of c'tors.
+
+ // DATA
+ Dyn< PeStatusArray<PE_Function> >
+ pStati;
+
+ Dyn< SP_Parameter > pSpParameter;
+ Dyn< SPU_Parameter> pSpuParameter;
+ Dyn< SP_Type > pSpType;
+ Dyn< SPU_Type > pSpuException;
+ Dyn< SPU_Type > pSpuCastOperatorType; // in "operator int()" or "operator ThatClass *()"
+
+ ary::cpp::Ce_id nResult;
+ bool bResult_WithImplementation; // Necessary for the parent ParseEnvironment
+ // to know, there is no semicolon or comma following.
+ // Pre results
+ StreamStr aName;
+ E_Virtuality eVirtuality;
+ E_ConVol eConVol;
+ ary::cpp::FunctionFlags
+ aFlags;
+ ary::cpp::Type_id nReturnType;
+ ParameterList aParameters;
+ ExceptionTypeList aExceptions;
+ bool bThrow; // Indicates, if there is a throw - important, if there are 0 exceptions listed.
+ intt nBracketCounterInImplementation;
+};
+
+
+
+
+// IMPLEMENTATION
+inline bool
+PE_Function::Result_WithImplementation() const
+ { return bResult_WithImplementation; }
+
+
+
+
+} // namespace cpp
+#endif
+
+
+
+
+
+/* // Overview of Stati
+
+Undecided
+---------
+
+start // vor und whrend storage class specifiern
+
+->Typ
+
+expectName // Typ ist da
+
+afterName
+
+
+
+
+Variable
+--------
+
+start // vor und whrend storage class specifiern
+
+->Typ
+
+expectName // Typ ist da -> im Falle von '(': notyetimplemented
+afterName
+
+expectSize // after [
+expectFinish
+ // vor ; oder ,
+expectNextVarName // anders als bei expectName kann hier auch * oder & kommen
+
+
+
+
+
+Function
+--------
+
+start // vor und whrend storage class specifiern
+
+->Typ
+
+expectName // Typ ist da
+expectBracket // Nach Name
+expectParameter // nach ( oder ,
+-> Parameter
+after Parameters // before const, volatile throw or = 0.
+after throw // expect (
+expectException // after (
+after exceptions // = 0 oder ; oder ,
+
+
+expectNextVarName // anders als bei expectName kann hier auch * oder & kommen
+
+
+
+
+
+
+
+*/
diff --git a/autodoc/source/parser/cpp/pe_ignor.cxx b/autodoc/source/parser/cpp/pe_ignor.cxx
new file mode 100644
index 000000000000..685c4baff783
--- /dev/null
+++ b/autodoc/source/parser/cpp/pe_ignor.cxx
@@ -0,0 +1,116 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "pe_ignor.hxx"
+
+
+// NOT FULLY DECLARED SERVICES
+
+
+namespace cpp {
+
+
+
+PE_Ignore::PE_Ignore( Cpp_PE * i_pParent )
+ : Cpp_PE(i_pParent),
+ nBracketCounter(0),
+ bBlockOpened(false)
+{
+ Setup_StatusFunctions();
+}
+
+
+PE_Ignore::~PE_Ignore()
+{
+}
+
+void
+PE_Ignore::Call_Handler( const cpp::Token & i_rTok )
+{
+ if ( NOT bBlockOpened )
+ {
+ switch (i_rTok.TypeId())
+ {
+ case Tid_SwBracket_Left: SetTokenResult(done, stay);
+ nBracketCounter++;
+ bBlockOpened = true;
+ break;
+ case Tid_Semicolon: SetTokenResult(done, pop_success);
+ break;
+ default:
+ SetTokenResult(done, stay);
+ } // end switch
+ }
+ else if ( nBracketCounter > 0 )
+ {
+ SetTokenResult(done, stay);
+
+ switch (i_rTok.TypeId())
+ {
+ case Tid_SwBracket_Left: nBracketCounter++;
+ break;
+ case Tid_SwBracket_Right: nBracketCounter--;
+ break;
+ } // end switch
+ }
+ else if ( i_rTok.TypeId() == Tid_Semicolon )
+ {
+ SetTokenResult(done, pop_success);
+ }
+ else
+ {
+ SetTokenResult(not_done, pop_success);
+ }
+}
+
+void
+PE_Ignore::Setup_StatusFunctions()
+{
+ // Does nothing.
+}
+
+void
+PE_Ignore::InitData()
+{
+ nBracketCounter = 0;
+ bBlockOpened = false;
+}
+
+void
+PE_Ignore::TransferData()
+{
+ // Does nothing.
+}
+
+
+} // namespace cpp
+
+
+
+
+
diff --git a/autodoc/source/parser/cpp/pe_ignor.hxx b/autodoc/source/parser/cpp/pe_ignor.hxx
new file mode 100644
index 000000000000..2a8c6baf44fd
--- /dev/null
+++ b/autodoc/source/parser/cpp/pe_ignor.hxx
@@ -0,0 +1,75 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+
+#ifndef ADC_CPP_PE_IGNOR_HXX
+#define ADC_CPP_PE_IGNOR_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <cpp_pe.hxx>
+ // COMPONENTS
+ // PARAMETERS
+
+
+namespace cpp {
+
+
+class PE_Ignore : public Cpp_PE
+{
+ public:
+ PE_Ignore(
+ Cpp_PE * i_pParent );
+ ~PE_Ignore();
+
+ virtual void Call_Handler(
+ const cpp::Token & i_rTok );
+ private:
+ void Setup_StatusFunctions();
+ virtual void InitData();
+ virtual void TransferData();
+
+ // DATA
+ uintt nBracketCounter;
+ bool bBlockOpened;
+};
+
+
+
+// IMPLEMENTATION
+
+
+} // namespace cpp
+
+
+
+
+#endif
+
+
diff --git a/autodoc/source/parser/cpp/pe_namsp.cxx b/autodoc/source/parser/cpp/pe_namsp.cxx
new file mode 100644
index 000000000000..673c19f55349
--- /dev/null
+++ b/autodoc/source/parser/cpp/pe_namsp.cxx
@@ -0,0 +1,163 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <pe_namsp.hxx>
+
+
+// NOT FULLY DECLARED SERVICES
+#include <all_toks.hxx>
+#include <ary/cpp/c_namesp.hxx>
+#include <ary/cpp/c_gate.hxx>
+#include <ary/cpp/cp_ce.hxx>
+#include <semantic/callf.hxx>
+#include "x_parse.hxx"
+
+
+
+
+namespace cpp
+{
+
+PE_Namespace::PE_Namespace( Cpp_PE * i_pParent )
+ : Cpp_PE(i_pParent),
+ pStati( new PeStatusArray<PE_Namespace> ),
+ // sLocalname
+ bPush(false)
+{
+ Setup_StatusFunctions();
+}
+
+PE_Namespace::~PE_Namespace()
+{
+}
+
+void
+PE_Namespace::Setup_StatusFunctions()
+{
+ typedef CallFunction<PE_Namespace>::F_Tok F_Tok;
+ static F_Tok stateF_start[] = { &PE_Namespace::On_start_Identifier,
+ &PE_Namespace::On_start_SwBracket_Left };
+ static INT16 stateT_start[] = { Tid_Identifier,
+ Tid_SwBracket_Left };
+ static F_Tok stateF_gotName[] = { &PE_Namespace::On_gotName_SwBracket_Left,
+ &PE_Namespace::On_gotName_Assign };
+ static INT16 stateT_gotName[] = { Tid_SwBracket_Left,
+ Tid_Assign };
+ static F_Tok stateF_expectSemicolon[] = { &PE_Namespace::On_expectSemicolon_Semicolon };
+ static INT16 stateT_expectSemicolon[] = { Tid_Semicolon };
+
+ SEMPARSE_CREATE_STATUS(PE_Namespace, start, Hdl_SyntaxError);
+ SEMPARSE_CREATE_STATUS(PE_Namespace, gotName, Hdl_SyntaxError);
+ SEMPARSE_CREATE_STATUS(PE_Namespace, expectSemicolon, Hdl_SyntaxError);
+}
+
+void
+PE_Namespace::Call_Handler( const cpp::Token & i_rTok )
+{
+ pStati->Cur().Call_Handler(i_rTok.TypeId(), i_rTok.Text());
+}
+
+void
+PE_Namespace::InitData()
+{
+ pStati->SetCur(start);
+ sLocalName = "";
+ bPush = false;
+}
+
+void
+PE_Namespace::TransferData()
+{
+ if (bPush)
+ {
+ ary::cpp::Namespace &
+ rNew = Env().AryGate().Ces().CheckIn_Namespace(
+ Env().Context(),
+ sLocalName );
+ Env().OpenNamespace(rNew);
+ }
+}
+
+void
+PE_Namespace::Hdl_SyntaxError( const char * i_sText)
+{
+ throw X_Parser( X_Parser::x_UnexpectedToken,
+ i_sText != 0 ? i_sText : "",
+ Env().CurFileName(),
+ Env().LineCount() );
+}
+
+void
+PE_Namespace::On_start_Identifier(const char * i_sText)
+{
+ SetTokenResult(done, stay);
+ pStati->SetCur(gotName);
+
+ sLocalName = i_sText;
+}
+
+void
+PE_Namespace::On_start_SwBracket_Left(const char * )
+{
+ SetTokenResult(done, pop_success);
+ pStati->SetCur(size_of_states);
+
+ sLocalName = ""; // Anonymous namespace, a name is created in
+ // Gate().CheckIn_Namespace() .
+
+ bPush = true;
+}
+
+void
+PE_Namespace::On_gotName_SwBracket_Left(const char * )
+{
+ SetTokenResult(done, pop_success);
+ pStati->SetCur(size_of_states);
+
+ bPush = true;
+}
+
+void
+PE_Namespace::On_gotName_Assign(const char * )
+{
+ // KORR_FUTURE
+ Hdl_SyntaxError(0);
+}
+
+void
+PE_Namespace::On_expectSemicolon_Semicolon(const char * )
+{
+ SetTokenResult(done,pop_success);
+ pStati->SetCur(size_of_states);
+}
+
+} // namespace cpp
+
+
+
+
diff --git a/autodoc/source/parser/cpp/pe_namsp.hxx b/autodoc/source/parser/cpp/pe_namsp.hxx
new file mode 100644
index 000000000000..4809dcceceb5
--- /dev/null
+++ b/autodoc/source/parser/cpp/pe_namsp.hxx
@@ -0,0 +1,99 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_CPP_PE_NAMSP_HXX
+#define ADC_CPP_PE_NAMSP_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include "cpp_pe.hxx"
+ // COMPONENTS
+#include <semantic/callf.hxx>
+#include <semantic/sub_pe.hxx>
+ // PARAMETERS
+
+namespace ary
+{
+namespace cpp
+{
+class Namespace;
+}
+}
+
+
+namespace cpp
+{
+
+
+class PE_Namespace : public Cpp_PE
+{
+ public:
+ enum E_State
+ {
+ start,
+ gotName,
+ expectSemicolon, /// after namespace assignment
+ size_of_states
+ };
+ PE_Namespace(
+ Cpp_PE * i_pParent );
+ ~PE_Namespace();
+
+ virtual void Call_Handler(
+ const cpp::Token & i_rTok );
+
+ ary::cpp::Namespace *
+ Result_OpenedNamespace() const;
+ private:
+ void Setup_StatusFunctions();
+
+ virtual void InitData();
+ virtual void TransferData();
+ void Hdl_SyntaxError( const char *);
+
+ void On_start_Identifier(const char * i_sText);
+ void On_start_SwBracket_Left(const char * i_sText);
+ void On_gotName_SwBracket_Left(const char * i_sText);
+ void On_gotName_Assign(const char * i_sText);
+ void On_expectSemicolon_Semicolon(const char * i_sText);
+
+ // DATA
+ Dyn< PeStatusArray<PE_Namespace> >
+ pStati;
+
+ String sLocalName;
+ bool bPush;
+};
+
+
+
+
+} // namespace cpp
+#endif
+
diff --git a/autodoc/source/parser/cpp/pe_param.cxx b/autodoc/source/parser/cpp/pe_param.cxx
new file mode 100644
index 000000000000..5b70505d0964
--- /dev/null
+++ b/autodoc/source/parser/cpp/pe_param.cxx
@@ -0,0 +1,280 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "pe_param.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include <cosv/tpl/tpltools.hxx>
+#include <ary/cpp/c_gate.hxx>
+#include <ary/cpp/cp_type.hxx>
+#include "pe_type.hxx"
+#include "pe_vari.hxx"
+
+
+namespace cpp {
+
+
+
+//*********************** PE_Parameter ***********************//
+
+
+PE_Parameter::PE_Parameter( Cpp_PE * i_pParent )
+ : Cpp_PE(i_pParent),
+ pStati( new PeStatusArray<PE_Parameter> )
+ // pSpType,
+ // pSpuType,
+ // pSpVariable,
+ // pSpuVariable,
+ // aResultParamInfo
+{
+ Setup_StatusFunctions();
+
+ pSpType = new SP_Type(*this);
+ pSpuType = new SPU_Type(*pSpType, &PE_Parameter::SpInit_Type, &PE_Parameter::SpReturn_Type);
+ pSpVariable = new SP_Variable(*this);
+ pSpuVariable = new SPU_Variable(*pSpVariable, &PE_Parameter::SpInit_Variable, &PE_Parameter::SpReturn_Variable);
+}
+
+PE_Parameter::~PE_Parameter()
+{
+}
+
+void
+PE_Parameter::Call_Handler( const cpp::Token & i_rTok )
+{
+ pStati->Cur().Call_Handler(i_rTok.TypeId(), i_rTok.Text());
+}
+
+void
+PE_Parameter::Setup_StatusFunctions()
+{
+ typedef CallFunction<PE_Parameter>::F_Tok F_Tok;
+ static F_Tok stateF_start[] = { &PE_Parameter::On_start_Type,
+ &PE_Parameter::On_start_Type,
+ &PE_Parameter::On_start_Type,
+ &PE_Parameter::On_start_Type,
+ &PE_Parameter::On_start_Type,
+
+ &PE_Parameter::On_start_Type,
+ &PE_Parameter::On_start_Type,
+ &PE_Parameter::On_start_Bracket_Right,
+ &PE_Parameter::On_start_Type,
+ &PE_Parameter::On_start_Ellipse,
+
+ &PE_Parameter::On_start_Type,
+ &PE_Parameter::On_start_Type,
+ &PE_Parameter::On_start_Type };
+ static INT16 stateT_start[] = { Tid_Identifier,
+ Tid_class,
+ Tid_struct,
+ Tid_union,
+ Tid_enum,
+
+ Tid_const,
+ Tid_volatile,
+ Tid_Bracket_Right,
+ Tid_DoubleColon,
+ Tid_Ellipse,
+
+ Tid_typename,
+ Tid_BuiltInType,
+ Tid_TypeSpecializer };
+
+ static F_Tok stateF_expectName[] = { &PE_Parameter::On_expectName_Identifier,
+ &PE_Parameter::On_expectName_ArrayBracket_Left,
+ &PE_Parameter::On_expectName_Bracket_Right,
+ &PE_Parameter::On_expectName_Comma,
+ &PE_Parameter::On_afterName_Assign };
+ static INT16 stateT_expectName[] = { Tid_Identifier,
+ Tid_ArrayBracket_Left,
+ Tid_Bracket_Right,
+ Tid_Comma,
+ Tid_Assign };
+ static F_Tok stateF_afterName[] = { &PE_Parameter::On_afterName_ArrayBracket_Left,
+ &PE_Parameter::On_afterName_Bracket_Right,
+ &PE_Parameter::On_afterName_Comma,
+ &PE_Parameter::On_afterName_Assign };
+ static INT16 stateT_afterName[] = { Tid_ArrayBracket_Left,
+ Tid_Bracket_Right,
+ Tid_Comma,
+ Tid_Assign };
+ static F_Tok stateF_finished[] = { &PE_Parameter::On_finished_Comma,
+ &PE_Parameter::On_finished_Bracket_Right };
+ static INT16 stateT_finished[] = { Tid_Bracket_Right,
+ Tid_Comma };
+
+ SEMPARSE_CREATE_STATUS(PE_Parameter, start, Hdl_SyntaxError);
+ SEMPARSE_CREATE_STATUS(PE_Parameter, expectName, Hdl_SyntaxError);
+ SEMPARSE_CREATE_STATUS(PE_Parameter, afterName, Hdl_SyntaxError);
+ SEMPARSE_CREATE_STATUS(PE_Parameter, finished, Hdl_SyntaxError);
+}
+
+
+void
+PE_Parameter::InitData()
+{
+ pStati->SetCur(start);
+ aResultParamInfo.Empty();
+}
+
+void
+PE_Parameter::TransferData()
+{
+ pStati->SetCur(size_of_states);
+}
+
+void
+PE_Parameter::Hdl_SyntaxError( const char * i_sText)
+{
+ StdHandlingOfSyntaxError(i_sText);
+}
+
+void
+PE_Parameter::SpInit_Type()
+{
+ // Does nothing.
+}
+
+void
+PE_Parameter::SpInit_Variable()
+{
+ // Does nothing.
+}
+
+void
+PE_Parameter::SpReturn_Type()
+{
+ aResultParamInfo.nType = pSpuType->Child().Result_Type().Id();
+ pStati->SetCur(expectName);
+}
+
+void
+PE_Parameter::SpReturn_Variable()
+{
+ if (pSpuVariable->Child().Result_Pattern() > 0)
+ {
+ aResultParamInfo.sSizeExpression = pSpuVariable->Child().Result_SizeExpression();
+ aResultParamInfo.sInitExpression = pSpuVariable->Child().Result_InitExpression();
+ }
+}
+
+void
+PE_Parameter::On_start_Type(const char *)
+{
+ pSpuType->Push(not_done);
+}
+
+void
+PE_Parameter::On_start_Bracket_Right(const char *)
+{
+ SetTokenResult(not_done, pop_success);
+}
+
+void
+PE_Parameter::On_start_Ellipse(const char *)
+{
+ SetTokenResult(done, pop_success);
+
+ aResultParamInfo.nType = Env().AryGate().Types().Tid_Ellipse();
+}
+
+void
+PE_Parameter::On_expectName_Identifier(const char * i_sText)
+{
+ SetTokenResult(done, stay);
+ pStati->SetCur(afterName);
+
+ aResultParamInfo.sName = i_sText;
+}
+
+void
+PE_Parameter::On_expectName_ArrayBracket_Left(const char * i_sText)
+{
+ On_afterName_ArrayBracket_Left(i_sText);
+}
+
+void
+PE_Parameter::On_expectName_Bracket_Right(const char * i_sText)
+{
+ On_afterName_Bracket_Right(i_sText);
+}
+
+void
+PE_Parameter::On_expectName_Comma(const char * i_sText)
+{
+ On_afterName_Comma(i_sText);
+}
+
+void
+PE_Parameter::On_afterName_ArrayBracket_Left(const char *)
+{
+ pSpuVariable->Push(not_done);
+}
+
+void
+PE_Parameter::On_afterName_Bracket_Right(const char *)
+{
+ SetTokenResult(not_done, pop_success);
+}
+
+void
+PE_Parameter::On_afterName_Comma(const char *)
+{
+ SetTokenResult(not_done, pop_success);
+}
+
+void
+PE_Parameter::On_afterName_Assign(const char *)
+{
+ pSpuVariable->Push(not_done);
+}
+
+void
+PE_Parameter::On_finished_Bracket_Right(const char *)
+{
+ SetTokenResult(not_done, pop_success);
+}
+
+void
+PE_Parameter::On_finished_Comma(const char *)
+{
+ SetTokenResult(not_done, pop_success);
+}
+
+
+} // namespace cpp
+
+
+
+
+
+
+
+
+
diff --git a/autodoc/source/parser/cpp/pe_param.hxx b/autodoc/source/parser/cpp/pe_param.hxx
new file mode 100644
index 000000000000..07c602d6aee1
--- /dev/null
+++ b/autodoc/source/parser/cpp/pe_param.hxx
@@ -0,0 +1,138 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+
+#ifndef ADC_CPP_PE_PARAM_HXX
+#define ADC_CPP_PE_PARAM_HXX
+
+// BASE CLASSES
+#include "cpp_pe.hxx"
+// USED SERVICES
+#include <semantic/callf.hxx>
+#include <semantic/sub_peu.hxx>
+#include <ary/cpp/c_vfflag.hxx>
+
+
+
+
+namespace cpp
+{
+ class PE_Type;
+ class PE_Variable;
+
+
+
+
+class PE_Parameter : public Cpp_PE
+{
+ public:
+ enum E_State
+ {
+ start,
+ expectName,
+ afterName,
+ finished,
+ size_of_states
+ };
+ typedef ary::cpp::S_Parameter S_ParamInfo;
+
+ explicit PE_Parameter(
+ Cpp_PE * i_pParent );
+ ~PE_Parameter();
+
+ virtual void Call_Handler(
+ const cpp::Token & i_rTok );
+
+ ary::cpp::Type_id Result_FrontType() const;
+ const S_ParamInfo & Result_ParamInfo() const;
+
+ private:
+ typedef SubPe< PE_Parameter, PE_Type > SP_Type;
+ typedef SubPeUse< PE_Parameter, PE_Type > SPU_Type;
+ typedef SubPe< PE_Parameter, PE_Variable > SP_Variable;
+ typedef SubPeUse< PE_Parameter, PE_Variable > SPU_Variable;
+
+ void Setup_StatusFunctions();
+ virtual void InitData();
+ virtual void TransferData();
+ void Hdl_SyntaxError( const char *);
+
+ void SpInit_Type(); // Type and Ignore.
+ void SpInit_Variable();
+ void SpReturn_Type();
+ void SpReturn_Variable();
+
+ void On_start_Type(const char * i_sText);
+ void On_start_Bracket_Right(const char * i_sText);
+ void On_start_Ellipse(const char * i_sText);
+
+ void On_expectName_Identifier(const char * i_sText);
+ void On_expectName_ArrayBracket_Left(const char * i_sText);
+ void On_expectName_Bracket_Right(const char * i_sText);
+ void On_expectName_Comma(const char * i_sText);
+
+ void On_afterName_ArrayBracket_Left(const char * i_sText);
+ void On_afterName_Bracket_Right(const char * i_sText);
+ void On_afterName_Comma(const char * i_sText);
+ void On_afterName_Assign(const char * i_sText);
+
+ void On_finished_Bracket_Right(const char * i_sText);
+ void On_finished_Comma(const char * i_sText);
+
+ // DATA
+ Dyn< PeStatusArray<PE_Parameter> >
+ pStati;
+
+ Dyn<SP_Type> pSpType;
+ Dyn<SPU_Type> pSpuType;
+ Dyn<SP_Variable> pSpVariable;
+ Dyn<SPU_Variable> pSpuVariable;
+
+ S_ParamInfo aResultParamInfo;
+};
+
+
+
+
+// IMPLEMENTATION
+inline ary::cpp::Type_id
+PE_Parameter::Result_FrontType() const
+{
+ return aResultParamInfo.nType;
+}
+
+inline const PE_Parameter::S_ParamInfo &
+PE_Parameter::Result_ParamInfo() const
+{
+ return aResultParamInfo;
+}
+
+
+
+
+} // namespace cpp
+#endif
diff --git a/autodoc/source/parser/cpp/pe_tpltp.cxx b/autodoc/source/parser/cpp/pe_tpltp.cxx
new file mode 100644
index 000000000000..0993b7e587a8
--- /dev/null
+++ b/autodoc/source/parser/cpp/pe_tpltp.cxx
@@ -0,0 +1,175 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "pe_tpltp.hxx"
+
+
+// NOT FULLY DECLARED SERVICES
+#include <cosv/tpl/tpltools.hxx>
+
+
+
+namespace cpp {
+
+
+
+PE_TemplateTop::PE_TemplateTop( Cpp_PE * i_pParent )
+ : Cpp_PE(i_pParent),
+ pStati( new PeStatusArray<PE_TemplateTop> ),
+ // aResult_Parameters,
+ bCurIsConstant(false)
+{
+ Setup_StatusFunctions();
+}
+
+
+PE_TemplateTop::~PE_TemplateTop()
+{
+}
+
+void
+PE_TemplateTop::Call_Handler( const cpp::Token & i_rTok )
+{
+ pStati->Cur().Call_Handler(i_rTok.TypeId(), i_rTok.Text());
+}
+
+void
+PE_TemplateTop::Setup_StatusFunctions()
+{
+ typedef CallFunction<PE_TemplateTop>::F_Tok F_Tok;
+
+ static F_Tok stateF_start[] = { &PE_TemplateTop::On_start_Less };
+ static INT16 stateT_start[] = { Tid_Less };
+
+ static F_Tok stateF_expect_qualifier[]= { &PE_TemplateTop::On_expect_qualifier_ClassOrTypename,
+ &PE_TemplateTop::On_expect_qualifier_Greater,
+ &PE_TemplateTop::On_expect_qualifier_ClassOrTypename };
+ static INT16 stateT_expect_qualifier[]= { Tid_class,
+ Tid_Greater,
+ Tid_typename };
+
+ static F_Tok stateF_expect_name[] = { &PE_TemplateTop::On_expect_name_Identifier };
+ static INT16 stateT_expect_name[] = { Tid_Identifier };
+
+ static F_Tok stateF_expect_separator[]= { &PE_TemplateTop::On_expect_separator_Comma,
+ &PE_TemplateTop::On_expect_separator_Greater };
+ static INT16 stateT_expect_separator[]= { Tid_Comma,
+ Tid_Greater };
+
+ SEMPARSE_CREATE_STATUS(PE_TemplateTop, start, Hdl_SyntaxError);
+ SEMPARSE_CREATE_STATUS(PE_TemplateTop, expect_qualifier, On_expect_qualifier_Other);
+ SEMPARSE_CREATE_STATUS(PE_TemplateTop, expect_name, Hdl_SyntaxError);
+ SEMPARSE_CREATE_STATUS(PE_TemplateTop, expect_separator, Hdl_SyntaxError);
+}
+
+void
+PE_TemplateTop::InitData()
+{
+ pStati->SetCur(start);
+ csv::erase_container(aResult_Parameters);
+ bCurIsConstant = false;
+}
+
+void
+PE_TemplateTop::TransferData()
+{
+ pStati->SetCur(size_of_states);
+}
+
+void
+PE_TemplateTop::Hdl_SyntaxError(const char * i_sText)
+{
+ StdHandlingOfSyntaxError(i_sText);
+}
+
+void
+PE_TemplateTop::On_start_Less( const char *)
+{
+ SetTokenResult(done, stay);
+ pStati->SetCur(expect_qualifier);
+}
+
+void
+PE_TemplateTop::On_expect_qualifier_ClassOrTypename( const char *)
+{
+ SetTokenResult(done, stay);
+ pStati->SetCur(expect_name);
+}
+
+void
+PE_TemplateTop::On_expect_qualifier_Greater(const char *)
+{
+ SetTokenResult(done, pop_success);
+}
+
+void
+PE_TemplateTop::On_expect_qualifier_Other( const char *)
+{
+ SetTokenResult(done, stay);
+ pStati->SetCur(expect_name);
+
+ bCurIsConstant = true;
+}
+
+void
+PE_TemplateTop::On_expect_name_Identifier( const char * i_sText)
+{
+ SetTokenResult(done, stay);
+ pStati->SetCur(expect_separator);
+
+ StreamLock sl(50);
+ if ( NOT bCurIsConstant )
+ {
+ String sText( sl() << "typename " << i_sText << c_str );
+ aResult_Parameters.push_back(sText);
+ }
+ else //
+ {
+ String sText( sl() << "constant " << i_sText << c_str );
+ aResult_Parameters.push_back(sText);
+ bCurIsConstant = false;
+ } // endif
+}
+
+void
+PE_TemplateTop::On_expect_separator_Comma( const char *)
+{
+ SetTokenResult(done, stay);
+ pStati->SetCur(expect_qualifier);
+}
+
+void
+PE_TemplateTop::On_expect_separator_Greater( const char *)
+{
+ SetTokenResult(done, pop_success);
+}
+
+
+
+
+} // namespace cpp
diff --git a/autodoc/source/parser/cpp/pe_tpltp.hxx b/autodoc/source/parser/cpp/pe_tpltp.hxx
new file mode 100644
index 000000000000..31f352a7ae56
--- /dev/null
+++ b/autodoc/source/parser/cpp/pe_tpltp.hxx
@@ -0,0 +1,106 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_CPP_PE_TPLTP_HXX
+#define ADC_CPP_PE_TPLTP_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include "cpp_pe.hxx"
+ // COMPONENTS
+#include <semantic/callf.hxx>
+#include <semantic/sub_peu.hxx>
+ // PARAMETERS
+
+
+namespace cpp {
+
+
+
+class PE_TemplateTop : public cpp::Cpp_PE
+{
+ public:
+ enum E_State
+ {
+ start,
+ expect_qualifier,
+ expect_name,
+ expect_separator,
+ size_of_states
+ };
+ PE_TemplateTop(
+ Cpp_PE * i_pParent );
+ ~PE_TemplateTop();
+
+ const StringVector &
+ Result_Parameters() const;
+
+ virtual void Call_Handler(
+ const cpp::Token & i_rTok );
+ private:
+ void Setup_StatusFunctions();
+ virtual void InitData();
+ virtual void TransferData();
+ void Hdl_SyntaxError(const char *);
+
+
+ void On_start_Less(const char *);
+
+ void On_expect_qualifier_ClassOrTypename(const char *);
+ void On_expect_qualifier_Greater(const char *);
+ void On_expect_qualifier_Other(const char *);
+
+ void On_expect_name_Identifier(const char *);
+
+ void On_expect_separator_Comma(const char *);
+ void On_expect_separator_Greater(const char *);
+
+ // DATA
+ Dyn< PeStatusArray<PE_TemplateTop> >
+ pStati;
+
+ StringVector
+ aResult_Parameters;
+ bool bCurIsConstant;
+};
+
+
+
+// IMPLEMENTATION
+
+inline const StringVector &
+PE_TemplateTop::Result_Parameters() const
+ { return aResult_Parameters; }
+
+
+} // namespace cpp
+
+
+#endif
+
diff --git a/autodoc/source/parser/cpp/pe_tydef.cxx b/autodoc/source/parser/cpp/pe_tydef.cxx
new file mode 100644
index 000000000000..9361a5bc7740
--- /dev/null
+++ b/autodoc/source/parser/cpp/pe_tydef.cxx
@@ -0,0 +1,143 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "pe_tydef.hxx"
+
+
+// NOT FULLY DECLARED SERVICES
+#include <ary/cpp/c_gate.hxx>
+#include <ary/cpp/c_type.hxx>
+#include <ary/cpp/cp_ce.hxx>
+#include <all_toks.hxx>
+#include "pe_type.hxx"
+
+
+namespace cpp {
+
+
+PE_Typedef::PE_Typedef(Cpp_PE * i_pParent )
+ : Cpp_PE(i_pParent),
+ pStati( new PeStatusArray<PE_Typedef> ),
+ // pSpType,
+ // pSpuType,
+ // sName
+ nType(0)
+{
+ Setup_StatusFunctions();
+
+ pSpType = new SP_Type(*this);
+ pSpuType = new SPU_Type(*pSpType, 0, &PE_Typedef::SpReturn_Type);
+}
+
+PE_Typedef::~PE_Typedef()
+{
+}
+
+void
+PE_Typedef::Call_Handler( const cpp::Token & i_rTok )
+{
+ pStati->Cur().Call_Handler(i_rTok.TypeId(), i_rTok.Text());
+}
+
+void
+PE_Typedef::Setup_StatusFunctions()
+{
+ typedef CallFunction<PE_Typedef>::F_Tok F_Tok;
+ static F_Tok stateF_start[] = { &PE_Typedef::On_start_typedef };
+ static INT16 stateT_start[] = { Tid_typedef };
+
+ static F_Tok stateF_expectName[] = { &PE_Typedef::On_expectName_Identifier };
+ static INT16 stateT_expectName[] = { Tid_Identifier };
+
+ static F_Tok stateF_afterName[] = { &PE_Typedef::On_afterName_Semicolon };
+ static INT16 stateT_afterName[] = { Tid_Semicolon };
+
+ SEMPARSE_CREATE_STATUS(PE_Typedef, start, Hdl_SyntaxError);
+ SEMPARSE_CREATE_STATUS(PE_Typedef, expectName, Hdl_SyntaxError);
+ SEMPARSE_CREATE_STATUS(PE_Typedef, afterName, Hdl_SyntaxError);
+}
+
+void
+PE_Typedef::InitData()
+{
+ pStati->SetCur(start);
+
+ sName.clear();
+ nType = 0;
+}
+
+void
+PE_Typedef::TransferData()
+{
+ pStati->SetCur(size_of_states);
+
+ ary::cpp::Typedef &
+ rTypedef = Env().AryGate().Ces().Store_Typedef(
+ Env().Context(), sName, nType );
+ Env().Event_Store_Typedef(rTypedef);
+}
+
+void
+PE_Typedef::Hdl_SyntaxError( const char * i_sText)
+{
+ StdHandlingOfSyntaxError(i_sText);
+}
+
+void
+PE_Typedef::SpReturn_Type()
+{
+ pStati->SetCur(expectName);
+
+ nType = pSpuType->Child().Result_Type().Id();
+}
+
+void
+PE_Typedef::On_start_typedef( const char * )
+{
+ pSpuType->Push(done);
+}
+
+void
+PE_Typedef::On_expectName_Identifier( const char * i_sText )
+{
+ SetTokenResult(done, stay);
+ pStati->SetCur(afterName);
+
+ sName = i_sText;
+}
+
+void
+PE_Typedef::On_afterName_Semicolon( const char * )
+{
+ SetTokenResult(done, pop_success);
+}
+
+} // namespace cpp
+
+
+
diff --git a/autodoc/source/parser/cpp/pe_tydef.hxx b/autodoc/source/parser/cpp/pe_tydef.hxx
new file mode 100644
index 000000000000..7a09eb01333b
--- /dev/null
+++ b/autodoc/source/parser/cpp/pe_tydef.hxx
@@ -0,0 +1,90 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_CPP_PE_TYDEF_HXX
+#define ADC_CPP_PE_TYDEF_HXX
+
+// BASE CLASSES
+#include "cpp_pe.hxx"
+// USED SERVICES
+#include <semantic/callf.hxx>
+#include <semantic/sub_peu.hxx>
+
+
+namespace cpp
+{
+ class PE_Type;
+
+
+
+
+class PE_Typedef : public cpp::Cpp_PE
+{
+ public:
+ enum E_State
+ {
+ start,
+ expectName,
+ afterName,
+ size_of_states
+ };
+ PE_Typedef(
+ Cpp_PE * i_pParent );
+ ~PE_Typedef();
+
+ virtual void Call_Handler(
+ const cpp::Token & i_rTok );
+ private:
+ typedef SubPe< PE_Typedef, PE_Type > SP_Type;
+ typedef SubPeUse< PE_Typedef, PE_Type> SPU_Type;
+
+ void Setup_StatusFunctions();
+ virtual void InitData();
+ virtual void TransferData();
+ void Hdl_SyntaxError( const char *);
+
+ void SpReturn_Type();
+
+ void On_start_typedef( const char * );
+ void On_expectName_Identifier( const char * );
+ void On_afterName_Semicolon( const char * );
+
+ // DATA
+ Dyn< PeStatusArray<PE_Typedef> >
+ pStati;
+ Dyn<SP_Type> pSpType;
+ Dyn<SPU_Type> pSpuType;
+
+ String sName;
+ ary::cpp::Type_id nType;
+};
+
+
+
+
+} // namespace cpp
+#endif
diff --git a/autodoc/source/parser/cpp/pe_type.cxx b/autodoc/source/parser/cpp/pe_type.cxx
new file mode 100644
index 000000000000..bf1eb2c69c7e
--- /dev/null
+++ b/autodoc/source/parser/cpp/pe_type.cxx
@@ -0,0 +1,554 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "pe_type.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include <ary/cpp/inpcontx.hxx>
+#include <ary/cpp/c_gate.hxx>
+#include <ary/cpp/c_class.hxx>
+#include <ary/cpp/c_namesp.hxx>
+#include <ary/cpp/cp_type.hxx>
+#include "pe_class.hxx"
+#include "pe_enum.hxx"
+#include <x_parse.hxx>
+
+
+
+class NullType : public ary::cpp::Type
+{
+ private:
+ virtual void do_Accept(
+ csv::ProcessorIfc & io_processor ) const;
+ virtual ary::ClassId
+ get_AryClass() const;
+ virtual bool inq_IsConst() const;
+ virtual void inq_Get_Text(
+ StreamStr & o_rPreName,
+ StreamStr & o_rName,
+ StreamStr & o_rPostName,
+ const ary::cpp::Gate &
+ i_rGate ) const;
+};
+
+void
+NullType::do_Accept(csv::ProcessorIfc & ) const
+{
+ // Does nothing.
+}
+
+ary::ClassId
+NullType::get_AryClass() const
+{
+ return 0;
+}
+
+bool
+NullType::inq_IsConst() const
+{
+ return true;
+}
+
+void
+NullType::inq_Get_Text( StreamStr & ,
+ StreamStr & ,
+ StreamStr & ,
+ const ary::cpp::Gate & ) const
+{
+ // Does nothing.
+}
+
+
+
+
+namespace cpp
+{
+
+
+inline bool
+PE_Type::IsType() const
+ { return eResult_KindOf == is_type; }
+
+
+PE_Type::PE_Type( Cpp_PE * i_pParent )
+ : Cpp_PE(i_pParent),
+ pStati( new PeStatusArray<PE_Type> ),
+ pSpType(0),
+ pSpuType_TemplateParameter(0),
+ // pSpClass,
+ // pSpuClass,
+ // pSpEnum,
+ // pSpuEnum,
+ pType(0),
+ pCurTemplate_ParameterList(0),
+ // sOwningClassName,
+ // sParsedClass_Name,
+ pResult_Type(0),
+ eResult_KindOf(is_none),
+ bIsCastOperatorType(false)
+{
+ Setup_StatusFunctions();
+
+ pSpType = new SP_Type(*this);
+ pSpClass = new SP_Class(*this);
+ pSpEnum = new SP_Enum(*this);
+
+ pSpuType_TemplateParameter
+ = new SPU_Type( *pSpType, 0,
+ &PE_Type::SpReturn_Type_TemplateParameter );
+ pSpuClass = new SPU_Class( *pSpClass, 0,
+ & PE_Type::SpReturn_Class );
+ pSpuEnum = new SPU_Enum( *pSpEnum, 0,
+ & PE_Type::SpReturn_Enum );
+}
+
+PE_Type::~PE_Type()
+{
+}
+
+void
+PE_Type::Init_AsCastOperatorType()
+{
+ bIsCastOperatorType = true;
+}
+
+void
+PE_Type::Call_Handler( const cpp::Token & i_rTok )
+{
+ pStati->Cur().Call_Handler(i_rTok.TypeId(), i_rTok.Text());
+}
+
+void
+PE_Type::Setup_StatusFunctions()
+{
+ typedef CallFunction<PE_Type>::F_Tok F_Tok;
+ static F_Tok stateF_start[] = { &PE_Type::On_start_Identifier,
+ &PE_Type::On_start_class,
+ &PE_Type::On_start_class,
+ &PE_Type::On_start_class,
+ &PE_Type::On_start_enum,
+ &PE_Type::On_start_const,
+ &PE_Type::On_start_volatile,
+ &PE_Type::On_start_Bracket_Right,
+ &PE_Type::On_start_DoubleColon,
+ &PE_Type::On_start_typename,
+ &PE_Type::On_start_BuiltInType,
+ &PE_Type::On_start_TypeSpecializer };
+ static INT16 stateT_start[] = { Tid_Identifier,
+ Tid_class,
+ Tid_struct,
+ Tid_union,
+ Tid_enum,
+ Tid_const,
+ Tid_volatile,
+ Tid_Bracket_Right,
+ Tid_DoubleColon,
+ Tid_typename,
+ Tid_BuiltInType,
+ Tid_TypeSpecializer };
+
+ static F_Tok stateF_expect_namesegment[] = { &PE_Type::On_expect_namesegment_Identifier,
+ &PE_Type::On_expect_namesegment_Identifier };
+ static INT16 stateT_expect_namesegment[] = { Tid_Identifier,
+ Tid_BuiltInType };
+
+ static F_Tok stateF_after_namesegment[] = { &PE_Type::On_after_namesegment_const,
+ &PE_Type::On_after_namesegment_volatile,
+ &PE_Type::On_after_namesegment_Bracket_Left,
+ &PE_Type::On_after_namesegment_DoubleColon,
+ &PE_Type::On_after_namesegment_Less,
+ &PE_Type::On_after_namesegment_Asterix,
+ &PE_Type::On_after_namesegment_AmpersAnd };
+ static INT16 stateT_after_namesegment[] = { Tid_const,
+ Tid_volatile,
+ Tid_Bracket_Left,
+ Tid_DoubleColon,
+ Tid_Less,
+ Tid_Asterix,
+ Tid_AmpersAnd };
+
+ static F_Tok stateF_afterclass_expect_semicolon[] =
+ { &PE_Type::On_afterclass_expect_semicolon_Semicolon };
+ static INT16 stateT_afterclass_expect_semicolon[] =
+ { Tid_Semicolon };
+
+ static F_Tok stateF_within_template[] = { &PE_Type::On_within_template_Comma,
+ &PE_Type::On_within_template_Greater,
+ &PE_Type::On_within_template_Constant };
+ static INT16 stateT_within_template[] = { Tid_Comma,
+ Tid_Greater,
+ Tid_Constant };
+
+ static F_Tok stateF_within_indirection[] = { &PE_Type::On_within_indirection_const,
+ &PE_Type::On_within_indirection_volatile,
+ &PE_Type::On_within_indirection_Asterix,
+ &PE_Type::On_within_indirection_AmpersAnd };
+ static INT16 stateT_within_indirection[] = { Tid_const,
+ Tid_volatile,
+ Tid_Asterix,
+ Tid_AmpersAnd };
+
+ SEMPARSE_CREATE_STATUS(PE_Type, start, Hdl_SyntaxError);
+ SEMPARSE_CREATE_STATUS(PE_Type, expect_namesegment, On_EndOfType);
+ SEMPARSE_CREATE_STATUS(PE_Type, after_namesegment, On_EndOfType);
+ SEMPARSE_CREATE_STATUS(PE_Type, afterclass_expect_semicolon, Hdl_SyntaxError);
+ SEMPARSE_CREATE_STATUS(PE_Type, within_template, On_within_template_TypeStart);
+ SEMPARSE_CREATE_STATUS(PE_Type, within_indirection, On_EndOfType);
+}
+
+void
+PE_Type::InitData()
+{
+ pStati->SetCur(start);
+
+ ary::cpp::Ce_id
+ scope_id = Env().Context().CurClass() != 0
+ ? Env().Context().CurClass()->CeId()
+ : Env().Context().CurNamespace().CeId();
+
+ pType = new ary::cpp::UsedType(scope_id);
+ pCurTemplate_ParameterList = 0;
+ sOwningClassName
+ = Env().Context().CurClass() != 0
+ ? Env().Context().CurClass()->LocalName().c_str()
+ : "";
+ sParsedClass_Name.clear();
+ pResult_Type = 0;
+ eResult_KindOf = is_type;
+ bIsCastOperatorType = false;
+}
+
+void
+PE_Type::TransferData()
+{
+ pStati->SetCur(size_of_states);
+
+ if ( IsType() )
+ pResult_Type = & Env().AryGate().Types().CheckIn_UsedType(
+ Env().Context(),
+ *pType.Release() );
+ else
+ pResult_Type = new NullType;
+}
+
+void
+PE_Type::Hdl_SyntaxError( const char * i_sText )
+{
+ StdHandlingOfSyntaxError( i_sText );
+}
+
+void
+PE_Type::SpReturn_Type_TemplateParameter()
+{
+ if ( pSpuType_TemplateParameter->Child().Result_KindOf() != is_type )
+ throw X_Parser(X_Parser::x_UnspecifiedSyntaxError, "", String::Null_(), 0);
+
+ pCurTemplate_ParameterList->AddParam_Type(
+ pSpuType_TemplateParameter->Child().Result_Type().TypeId() );
+}
+
+void
+PE_Type::SpReturn_Class()
+{
+ switch ( pSpuClass->Child().Result_KindOf() )
+ {
+ case PE_Class::is_declaration:
+ pStati->SetCur(afterclass_expect_semicolon);
+ eResult_KindOf = is_explicit_class_declaration;
+ break;
+ case PE_Class::is_implicit_declaration:
+ pStati->SetCur(after_namesegment);
+ pType->Add_NameSegment(
+ pSpuClass->Child().Result_LocalName() );
+ break;
+ case PE_Class::is_predeclaration:
+ pStati->SetCur(afterclass_expect_semicolon);
+ eResult_KindOf = is_class_predeclaration;
+ break;
+ case PE_Class::is_qualified_typename:
+ pStati->SetCur(after_namesegment);
+ pType->Add_NameSegment(
+ pSpuClass->Child().Result_FirstNameSegment() );
+ break;
+ default:
+ csv_assert(false);
+ }
+}
+
+void
+PE_Type::SpReturn_Enum()
+{
+ switch ( pSpuEnum->Child().Result_KindOf() )
+ {
+ case PE_Enum::is_declaration:
+ pStati->SetCur(afterclass_expect_semicolon);
+ eResult_KindOf = is_explicit_enum_declaration;
+ break;
+ case PE_Enum::is_implicit_declaration:
+ pStati->SetCur(after_namesegment);
+ pType->Add_NameSegment(
+ pSpuEnum->Child().Result_LocalName() );
+ break;
+ case PE_Enum::is_qualified_typename:
+ pStati->SetCur(after_namesegment);
+ pType->Add_NameSegment(
+ pSpuEnum->Child().Result_FirstNameSegment() );
+ break;
+ default:
+ csv_assert(false);
+ }
+}
+
+void
+PE_Type::On_EndOfType(const char *)
+{
+ SetTokenResult(not_done, pop_success);
+}
+
+void
+PE_Type::On_start_Identifier( const char * i_sText )
+{
+ SetTokenResult(done,stay);
+ pStati->SetCur(after_namesegment);
+
+ pType->Add_NameSegment(i_sText);
+}
+
+void
+PE_Type::On_start_class(const char *)
+{
+ pSpuClass->Push(not_done);
+}
+
+void
+PE_Type::On_start_enum(const char *)
+{
+ pSpuEnum->Push(done);
+}
+
+void
+PE_Type::On_start_const(const char *)
+{
+ SetTokenResult(done,stay);
+ pType->Set_Const();
+}
+
+void
+PE_Type::On_start_volatile(const char *)
+{
+ SetTokenResult(done,stay);
+ pType->Set_Volatile();
+}
+
+void
+PE_Type::On_start_Bracket_Right(const char *)
+{
+ SetTokenResult(not_done,pop_success);
+
+ eResult_KindOf = is_none;
+}
+
+void
+PE_Type::On_start_DoubleColon(const char *)
+{
+ SetTokenResult(done,stay);
+ pType->Set_Absolute();
+}
+
+void
+PE_Type::On_start_BuiltInType(const char * i_sText)
+{
+ SetTokenResult(done, stay);
+ pStati->SetCur(after_namesegment);
+ pType->Set_BuiltIn(i_sText);
+}
+
+void
+PE_Type::On_start_TypeSpecializer(const char * i_sText)
+{
+ SetTokenResult(done,stay);
+ if (*i_sText == 'u') {
+ pType->Set_Unsigned();
+ }
+ else if (*i_sText == 's') {
+ pType->Set_Signed();
+ }
+ else {
+ csv_assert(false);
+ }
+}
+
+void
+PE_Type::On_start_typename(const char *)
+{
+ SetTokenResult(done,stay);
+}
+
+void
+PE_Type::On_expect_namesegment_Identifier(const char * i_sText)
+{
+ SetTokenResult(done,stay);
+ pStati->SetCur(after_namesegment);
+ pType->Add_NameSegment(i_sText);
+}
+
+void
+PE_Type::On_after_namesegment_const(const char *)
+{
+ SetTokenResult(done,stay);
+ pType->Set_Const();
+}
+
+void
+PE_Type::On_after_namesegment_volatile(const char *)
+{
+ SetTokenResult(done,stay);
+ pType->Set_Volatile();
+}
+
+void
+PE_Type::On_after_namesegment_Bracket_Left(const char * i_sText)
+{
+ if ( bIsCastOperatorType )
+ {
+ SetTokenResult(not_done, pop_success);
+ }
+ else if ( pType->LocalName() == sOwningClassName )
+ {
+ SetTokenResult(not_done,pop_success);
+ eResult_KindOf = is_constructor;
+
+ }
+ else //
+ {
+ On_EndOfType(i_sText);
+ } // endif
+}
+
+void
+PE_Type::On_after_namesegment_DoubleColon(const char *)
+{
+ SetTokenResult(done,stay);
+ pStati->SetCur(expect_namesegment);
+}
+
+void
+PE_Type::On_after_namesegment_Less(const char *)
+{
+ SetTokenResult(done,stay);
+ pStati->SetCur(within_template);
+
+ pCurTemplate_ParameterList = & pType->Enter_Template();
+}
+
+void
+PE_Type::On_after_namesegment_Asterix(const char *)
+{
+ SetTokenResult(done,stay);
+ pStati->SetCur(within_indirection);
+ pType->Add_PtrLevel();
+}
+
+void
+PE_Type::On_after_namesegment_AmpersAnd(const char *)
+{
+ SetTokenResult(done,pop_success);
+ pType->Set_Reference();
+}
+
+void
+PE_Type::On_afterclass_expect_semicolon_Semicolon(const char *)
+{
+ csv_assert( NOT IsType() );
+ SetTokenResult(not_done,pop_success);
+}
+
+void
+PE_Type::On_within_template_Comma(const char *)
+{
+ SetTokenResult(done,stay);
+}
+
+void
+PE_Type::On_within_template_Greater(const char *)
+{
+ SetTokenResult(done,stay);
+ pStati->SetCur(after_namesegment);
+
+ pCurTemplate_ParameterList = 0;
+}
+
+void
+PE_Type::On_within_template_Constant(const char * i_sText)
+{
+ // KORR_FUTURE
+ Cerr() << "Templates with constants as parameters are not yet supported by Autodoc" << Endl();
+ Hdl_SyntaxError(i_sText);
+}
+
+void
+PE_Type::On_within_template_TypeStart(const char *)
+{
+ pSpuType_TemplateParameter->Push(not_done);
+}
+
+void
+PE_Type::On_within_indirection_const(const char *)
+{
+ SetTokenResult(done,stay);
+ pType->Set_Const();
+}
+
+void
+PE_Type::On_within_indirection_volatile(const char *)
+{
+ SetTokenResult(done,stay);
+ pType->Set_Volatile();
+}
+
+void
+PE_Type::On_within_indirection_Asterix(const char *)
+{
+ SetTokenResult(done,stay);
+ pType->Add_PtrLevel();
+}
+
+void
+PE_Type::On_within_indirection_AmpersAnd(const char *)
+{
+ SetTokenResult(done,pop_success);
+ pType->Set_Reference();
+}
+
+} // namespace cpp
+
+
+
+
+
diff --git a/autodoc/source/parser/cpp/pe_type.hxx b/autodoc/source/parser/cpp/pe_type.hxx
new file mode 100644
index 000000000000..8bd3dfb093b4
--- /dev/null
+++ b/autodoc/source/parser/cpp/pe_type.hxx
@@ -0,0 +1,185 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+
+#ifndef ADC_CPP_PE_TYPE_HXX
+#define ADC_CPP_PE_TYPE_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include "cpp_pe.hxx"
+ // COMPONENTS
+#include <ary/cpp/usedtype.hxx>
+#include <semantic/callf.hxx>
+#include <semantic/sub_peu.hxx>
+ // PARAMETERS
+#include <ary/cpp/c_types4cpp.hxx>
+
+
+
+namespace cpp {
+
+class PE_Class;
+class PE_Enum;
+class PE_Expression;
+
+class PE_Type : public Cpp_PE
+{
+ public:
+ enum E_State
+ {
+ start,
+ expect_namesegment,
+ after_namesegment,
+ afterclass_expect_semicolon,
+ within_template,
+ within_indirection,
+ size_of_states
+ };
+ enum E_KindOfResult
+ {
+ is_none,
+ is_type,
+ is_constructor,
+ is_explicit_class_declaration,
+ is_class_predeclaration,
+ is_explicit_enum_declaration
+ };
+
+ PE_Type(
+ Cpp_PE * i_pParent );
+ ~PE_Type();
+
+ void Init_AsCastOperatorType();
+
+ virtual void Call_Handler(
+ const cpp::Token & i_rTok );
+
+ E_KindOfResult Result_KindOf() const;
+ const ary::cpp::Type &
+ Result_Type() const;
+ private:
+ typedef SubPe< PE_Type, PE_Type > SP_Type;
+ typedef SubPe< PE_Type, PE_Class > SP_Class;
+ typedef SubPe< PE_Type, PE_Enum > SP_Enum;
+ typedef SubPeUse< PE_Type, PE_Type > SPU_Type;
+ typedef SubPeUse< PE_Type, PE_Class > SPU_Class;
+ typedef SubPeUse< PE_Type, PE_Enum > SPU_Enum;
+
+ void Setup_StatusFunctions();
+ virtual void InitData();
+ virtual void TransferData();
+ void Hdl_SyntaxError( const char *);
+
+ void SpReturn_Type_TemplateParameter();
+ void SpReturn_Class();
+ void SpReturn_Enum();
+
+ void On_EndOfType(const char *);
+
+ void On_start_Identifier(const char *);
+ void On_start_class(const char *);
+ void On_start_enum(const char *);
+ void On_start_const(const char *);
+ void On_start_volatile(const char *);
+ void On_start_Bracket_Right(const char *);
+ void On_start_DoubleColon(const char *);
+ void On_start_BuiltInType(const char *);
+ void On_start_TypeSpecializer(const char *);
+ void On_start_typename(const char *);
+
+ void On_expect_namesegment_Identifier(const char *);
+
+ void On_after_namesegment_const(const char *);
+ void On_after_namesegment_volatile(const char *);
+ void On_after_namesegment_Bracket_Left(const char *);
+ void On_after_namesegment_DoubleColon(const char *);
+ void On_after_namesegment_Less(const char *);
+ void On_after_namesegment_Asterix(const char *);
+ void On_after_namesegment_AmpersAnd(const char *);
+
+ void On_afterclass_expect_semicolon_Semicolon(const char *);
+
+ void On_within_template_Comma(const char *);
+ void On_within_template_Greater(const char *);
+ void On_within_template_Constant(const char *);
+ void On_within_template_TypeStart(const char *);
+
+ void On_within_indirection_const(const char *);
+ void On_within_indirection_volatile(const char *);
+ void On_within_indirection_Asterix(const char *);
+ void On_within_indirection_AmpersAnd(const char *);
+
+ bool IsType() const;
+
+ // DATA
+ Dyn< PeStatusArray<PE_Type> >
+ pStati;
+
+ Dyn<SP_Type> pSpType;
+ Dyn<SPU_Type> pSpuType_TemplateParameter;
+ Dyn<SP_Class> pSpClass;
+ Dyn<SPU_Class> pSpuClass;
+ Dyn<SP_Enum> pSpEnum;
+ Dyn<SPU_Enum> pSpuEnum;
+
+ Dyn<ary::cpp::UsedType>
+ pType;
+ ary::cpp::ut::List_TplParameter *
+ pCurTemplate_ParameterList;
+ String sOwningClassName;
+ String sParsedClass_Name;
+
+ const ary::cpp::Type *
+ pResult_Type;
+ E_KindOfResult eResult_KindOf;
+ bool bIsCastOperatorType;
+};
+
+
+
+// IMPLEMENTATION
+
+
+inline const ary::cpp::Type &
+PE_Type::Result_Type() const
+ { csv_assert(pResult_Type != 0);
+ return *pResult_Type; }
+inline PE_Type::E_KindOfResult
+PE_Type::Result_KindOf() const
+ { return eResult_KindOf; }
+
+
+} // namespace cpp
+
+
+#endif
+
+
+
diff --git a/autodoc/source/parser/cpp/pe_vafu.cxx b/autodoc/source/parser/cpp/pe_vafu.cxx
new file mode 100644
index 000000000000..08026c1f00a0
--- /dev/null
+++ b/autodoc/source/parser/cpp/pe_vafu.cxx
@@ -0,0 +1,649 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "pe_vafu.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include <cosv/tpl/tpltools.hxx>
+#include <ary/cpp/c_gate.hxx>
+#include <ary/cpp/c_class.hxx>
+#include <ary/cpp/c_vari.hxx>
+#include <ary/cpp/c_vfflag.hxx>
+#include <ary/cpp/cp_ce.hxx>
+#include <ary/cpp/inpcontx.hxx>
+#include "pe_type.hxx"
+#include "pe_vari.hxx"
+#include "pe_funct.hxx"
+#include "pe_ignor.hxx"
+#include <x_parse.hxx>
+
+
+
+
+namespace cpp {
+
+
+
+//*********************** PE_VarFunc ***********************//
+
+
+PE_VarFunc::PE_VarFunc( Cpp_PE * i_pParent )
+ : Cpp_PE(i_pParent),
+ pStati( new PeStatusArray<PE_VarFunc> ),
+ // pSpType,
+ // pSpuType,
+ // pSpVariable,
+ // pSpuVariable,
+ // pSpFunction,
+ // pSpuFunctionStd,
+ // pSpuFunctionCtor,
+ // pSpuFunctionDtor,
+ // pSpuFunctionCastOperator,
+ // pSpuFunctionNormalOperator
+ // pSpIgnore,
+ // pSpuIgnore,
+ nCounter_TemplateBrackets(0),
+ bInDestructor(false),
+ // aResultIds,
+ nResultFrontType(0),
+ eResultType(result_unknown),
+ bVirtual(false),
+ bStatic(false),
+ bExtern(false),
+ bExternC(false),
+ bMutable(false),
+ bInline(false),
+ bRegister(false),
+ bExplicit(false)
+{
+ Setup_StatusFunctions();
+
+ pSpType = new SP_Type(*this);
+ pSpuType = new SPU_Type(*pSpType, 0, &PE_VarFunc::SpReturn_Type);
+ pSpVariable = new SP_Variable(*this);
+ pSpuVariable = new SPU_Variable(*pSpVariable, 0, &PE_VarFunc::SpReturn_Variable);
+ pSpFunction = new SP_Function(*this);
+ pSpuFunctionStd = new SPU_Function(*pSpFunction, &PE_VarFunc::SpInit_FunctionStd, &PE_VarFunc::SpReturn_FunctionStd);
+ pSpuFunctionCtor = new SPU_Function(*pSpFunction, &PE_VarFunc::SpInit_FunctionCtor, &PE_VarFunc::SpReturn_FunctionStd);
+ pSpuFunctionDtor = new SPU_Function(*pSpFunction, &PE_VarFunc::SpInit_FunctionDtor, &PE_VarFunc::SpReturn_FunctionStd);
+ pSpuFunctionCastOperator
+ = new SPU_Function(*pSpFunction, &PE_VarFunc::SpInit_FunctionCastOperator, &PE_VarFunc::SpReturn_FunctionStd);
+ pSpuFunctionNormalOperator
+ = new SPU_Function(*pSpFunction, &PE_VarFunc::SpInit_FunctionNormalOperator, &PE_VarFunc::SpReturn_FunctionStd);
+ pSpIgnore = new SP_Ignore(*this);
+ pSpuIgnore = new SPU_Ignore(*pSpIgnore, 0, &PE_VarFunc::SpReturn_Ignore);
+}
+
+PE_VarFunc::~PE_VarFunc()
+{
+}
+
+void
+PE_VarFunc::Call_Handler( const cpp::Token & i_rTok )
+{
+ pStati->Cur().Call_Handler(i_rTok.TypeId(), i_rTok.Text());
+}
+
+void
+PE_VarFunc::Setup_StatusFunctions()
+{
+ typedef CallFunction<PE_VarFunc>::F_Tok F_Tok;
+
+ static F_Tok stateF_start[] = { &PE_VarFunc::On_start_Identifier,
+ &PE_VarFunc::On_start_operator,
+ &PE_VarFunc::On_start_TypeKey,
+ &PE_VarFunc::On_start_TypeKey,
+ &PE_VarFunc::On_start_TypeKey,
+ &PE_VarFunc::On_start_TypeKey,
+ &PE_VarFunc::On_start_virtual,
+ &PE_VarFunc::On_start_Tilde,
+ &PE_VarFunc::On_start_const,
+ &PE_VarFunc::On_start_volatile,
+ &PE_VarFunc::On_start_extern,
+ &PE_VarFunc::On_start_static,
+ &PE_VarFunc::On_start_mutable,
+ &PE_VarFunc::On_start_register,
+ &PE_VarFunc::On_start_inline,
+ &PE_VarFunc::On_start_explicit,
+ &PE_VarFunc::On_start_Bracket_Right,
+ &PE_VarFunc::On_start_Identifier,
+ &PE_VarFunc::On_start_typename,
+ &PE_VarFunc::On_start_Identifier,
+ &PE_VarFunc::On_start_Identifier };
+ static INT16 stateT_start[] = { Tid_Identifier,
+ Tid_operator,
+ Tid_class,
+ Tid_struct,
+ Tid_union,
+ Tid_enum,
+ Tid_virtual,
+ Tid_Tilde,
+ Tid_const,
+ Tid_volatile,
+ Tid_extern,
+ Tid_static,
+ Tid_mutable,
+ Tid_register,
+ Tid_inline,
+ Tid_explicit,
+ Tid_Bracket_Right,
+ Tid_DoubleColon,
+ Tid_typename,
+ Tid_BuiltInType,
+ Tid_TypeSpecializer };
+
+ static F_Tok stateF_expectCtor[] = { &PE_VarFunc::On_expectCtor_Bracket_Left };
+ static INT16 stateT_expectCtor[] = { Tid_Bracket_Left };
+
+ static F_Tok stateF_afterClassDecl[] = { &PE_VarFunc::On_afterClassDecl_Semicolon };
+ static INT16 stateT_afterClassDecl[] = { Tid_Semicolon };
+
+ static F_Tok stateF_expectName[] = { &PE_VarFunc::On_expectName_Identifier,
+ &PE_VarFunc::On_expectName_operator,
+ &PE_VarFunc::On_expectName_Bracket_Left };
+ static INT16 stateT_expectName[] = { Tid_Identifier,
+ Tid_operator,
+ Tid_Bracket_Left };
+
+ static F_Tok stateF_afterName[] = { &PE_VarFunc::On_afterName_ArrayBracket_Left,
+ &PE_VarFunc::On_afterName_Bracket_Left,
+ &PE_VarFunc::On_afterName_DoubleColon,
+ &PE_VarFunc::On_afterName_Semicolon,
+ &PE_VarFunc::On_afterName_Comma,
+ &PE_VarFunc::On_afterName_Assign,
+ &PE_VarFunc::On_afterName_Less };
+ static INT16 stateT_afterName[] = { Tid_ArrayBracket_Left,
+ Tid_Bracket_Left,
+ Tid_DoubleColon,
+ Tid_Semicolon,
+ Tid_Comma,
+ Tid_Assign,
+ Tid_Less };
+
+ static F_Tok stateF_afterName_inErraneousTemplate[] =
+ { &PE_VarFunc::On_afterName_inErraneousTemplate_Less,
+ &PE_VarFunc::On_afterName_inErraneousTemplate_Greater };
+ static INT16 stateT_afterName_inErraneousTemplate[] =
+ { Tid_Less,
+ Tid_Greater };
+
+ static F_Tok stateF_finished[] = { &PE_VarFunc::On_finished_Semicolon,
+ &PE_VarFunc::On_finished_Comma };
+ static INT16 stateT_finished[] = { Tid_Semicolon,
+ Tid_Comma };
+
+ static F_Tok stateF_finishedIncludingFunctionImplementation[] =
+ { &PE_VarFunc::On_finishedIncludingFunctionImplementation_Default
+ };
+ static INT16 stateT_finishedIncludingFunctionImplementation[] =
+ { Tid_BuiltInType // Just to have one entry, but it is default handled, too.
+ };
+
+ SEMPARSE_CREATE_STATUS(PE_VarFunc, start, Hdl_UnknownToken);
+ SEMPARSE_CREATE_STATUS(PE_VarFunc, expectCtor, Hdl_UnknownToken);
+ SEMPARSE_CREATE_STATUS(PE_VarFunc, afterClassDecl, Hdl_UnknownToken);
+ SEMPARSE_CREATE_STATUS(PE_VarFunc, expectName, Hdl_UnknownToken);
+ SEMPARSE_CREATE_STATUS(PE_VarFunc, afterName, Hdl_UnknownToken);
+ SEMPARSE_CREATE_STATUS(PE_VarFunc, afterName_inErraneousTemplate, On_afterName_inErraneousTemplate_Default);
+ SEMPARSE_CREATE_STATUS(PE_VarFunc, finished, On_finished_Default);
+ SEMPARSE_CREATE_STATUS(PE_VarFunc, finishedIncludingFunctionImplementation, On_finishedIncludingFunctionImplementation_Default);
+}
+
+void
+PE_VarFunc::InitData()
+{
+ pStati->SetCur(start);
+ csv::erase_container(aResultIds);
+
+ nCounter_TemplateBrackets = 0;
+ bInDestructor = false;
+
+ nResultFrontType = 0;
+ eResultType = result_unknown;
+ sName.clear();
+ bVirtual = ary::cpp::VIRTUAL_none;
+ bStatic = false;
+ bExtern = false;
+ bExternC = false;
+ bMutable = false;
+ bInline = false;
+ bRegister = false;
+ bExplicit = false;
+}
+
+void
+PE_VarFunc::TransferData()
+{
+ pStati->SetCur(size_of_states);
+}
+
+void
+PE_VarFunc::Hdl_UnknownToken( const char *)
+{
+ pSpuIgnore->Push(not_done);
+}
+
+void
+PE_VarFunc::SpInit_FunctionStd()
+{
+ if ( nResultFrontType.IsValid() AND sName.length() > 0 )
+ {
+ pSpuFunctionStd->Child().Init_Std(
+ sName,
+ nResultFrontType,
+ bVirtual,
+ CreateFunctionFlags() );
+ }
+ else
+ {
+ throw X_Parser( X_Parser::x_UnexpectedToken,
+ "",
+ Env().CurFileName(),
+ Env().LineCount() );
+ }
+}
+
+void
+PE_VarFunc::SpInit_FunctionCtor()
+{
+ ary::cpp::Class * pOwnerClass = Env().Context().CurClass();
+ csv_assert( pOwnerClass != 0 );
+ pSpuFunctionStd->Child().Init_Ctor( pOwnerClass->LocalName(),
+ CreateFunctionFlags() );
+}
+
+void
+PE_VarFunc::SpInit_FunctionDtor()
+{
+ pSpuFunctionStd->Child().Init_Dtor( sName,
+ bVirtual,
+ CreateFunctionFlags() );
+}
+
+void
+PE_VarFunc::SpInit_FunctionCastOperator()
+{
+ pSpuFunctionStd->Child().Init_CastOperator( bVirtual,
+ CreateFunctionFlags() );
+}
+
+void
+PE_VarFunc::SpInit_FunctionNormalOperator()
+{
+ pSpuFunctionStd->Child().Init_NormalOperator( nResultFrontType,
+ bVirtual,
+ CreateFunctionFlags() );
+}
+
+void
+PE_VarFunc::SpReturn_Type()
+{
+ switch ( pSpuType->Child().Result_KindOf() )
+ {
+ case PE_Type::is_type:
+ pStati->SetCur(expectName);
+ nResultFrontType
+ = pSpuType->Child().Result_Type().Id();
+ break;
+ case PE_Type::is_constructor:
+ pStati->SetCur(expectCtor);
+ eResultType = result_function;
+ break;
+ case PE_Type::is_explicit_class_declaration:
+ case PE_Type::is_explicit_enum_declaration:
+ pStati->SetCur(afterClassDecl);
+ eResultType = result_ignore;
+ break;
+ case PE_Type::is_class_predeclaration:
+ pStati->SetCur(afterClassDecl);
+ eResultType = result_ignore;
+ break;
+ default:
+ ;
+ }
+}
+
+void
+PE_VarFunc::SpReturn_Variable()
+{
+ typedef ary::cpp::VariableFlags VarFlags;
+
+ if ( NOT bExtern )
+ {
+ VarFlags aFlags( UINT16(
+ ( bStatic AND Env().Context().CurClass() == 0 ? VarFlags::f_static_local : 0 )
+ | ( bStatic AND Env().Context().CurClass() != 0 ? VarFlags::f_static_member : 0 )
+ | ( bMutable ? VarFlags::f_mutable : 0 ) )
+ );
+
+// ary::S_InitData aData( 0, Env().CurCeSpace().Id(), i_sName, 0 );
+ ary::cpp::Variable & rCurParsedVariable
+ = Env().AryGate().Ces().Store_Variable( Env().Context(),
+ sName,
+ nResultFrontType,
+ aFlags,
+ pSpuVariable->Child().Result_SizeExpression(),
+ pSpuVariable->Child().Result_InitExpression() );
+ Env().Event_Store_Variable(rCurParsedVariable);
+ aResultIds.push_back( rCurParsedVariable.CeId() );
+ eResultType = result_variable;
+ }
+ else if (bExtern)
+ {
+ eResultType = result_ignore;
+ }
+
+ pStati->SetCur(finished);
+}
+
+void
+PE_VarFunc::SpReturn_FunctionStd()
+{
+ if ( (NOT bExtern) OR bExternC )
+ {
+ aResultIds.push_back(pSpuFunctionStd->Child().Result_Id());
+ eResultType = result_function;
+ }
+ else
+ {
+ eResultType = result_ignore;
+ }
+
+ if ( NOT pSpuFunctionStd->Child().Result_WithImplementation() )
+ pStati->SetCur(finished);
+ else
+ pStati->SetCur(finishedIncludingFunctionImplementation);
+}
+
+void
+PE_VarFunc::SpReturn_Ignore()
+{
+ pStati->SetCur(finished);
+}
+
+void
+PE_VarFunc::On_start_Identifier(const char *)
+{
+ pSpuType->Push(not_done);
+}
+
+void
+PE_VarFunc::On_start_operator(const char *)
+{
+ pSpuFunctionCastOperator->Push(done);
+}
+
+void
+PE_VarFunc::On_start_TypeKey(const char *)
+{
+ pSpuType->Push(not_done);
+}
+
+void
+PE_VarFunc::On_start_virtual(const char *)
+{
+ SetTokenResult(done, stay);
+ bVirtual = true;
+}
+
+void
+PE_VarFunc::On_start_Tilde(const char *)
+{
+ SetTokenResult(done, stay);
+ pStati->SetCur(expectName);
+
+ bInDestructor = true;
+}
+
+void
+PE_VarFunc::On_start_const(const char *)
+{
+ pSpuType->Push(not_done);
+}
+
+void
+PE_VarFunc::On_start_volatile(const char *)
+{
+ pSpuType->Push(not_done);
+}
+
+void
+PE_VarFunc::On_start_extern(const char *)
+{
+ SetTokenResult(done, stay);
+ bExtern = true;
+}
+
+void
+PE_VarFunc::On_start_static(const char *)
+{
+ SetTokenResult(done, stay);
+ bStatic = true;
+}
+
+void
+PE_VarFunc::On_start_mutable(const char *)
+{
+ SetTokenResult(done, stay);
+ bMutable = true;
+}
+
+void
+PE_VarFunc::On_start_register(const char *)
+{
+ SetTokenResult(done, stay);
+ bRegister = true;
+}
+
+void
+PE_VarFunc::On_start_inline(const char *)
+{
+ SetTokenResult(done, stay);
+
+ bInline = true;
+}
+
+void
+PE_VarFunc::On_start_explicit(const char *)
+{
+ SetTokenResult(done, stay);
+ bExplicit = true;
+}
+
+void
+PE_VarFunc::On_start_Bracket_Right(const char *)
+{
+ SetTokenResult(not_done, pop_success);
+}
+
+void
+PE_VarFunc::On_start_typename(const char *)
+{
+ pSpuType->Push(not_done);
+}
+
+void
+PE_VarFunc::On_expectCtor_Bracket_Left(const char *)
+{
+ pSpuFunctionCtor->Push(not_done);
+}
+
+void
+PE_VarFunc::On_afterClassDecl_Semicolon(const char *)
+{
+ SetTokenResult(done, pop_success);
+}
+
+void
+PE_VarFunc::On_expectName_Identifier(const char * i_sText)
+{
+ SetTokenResult(done, stay);
+ pStati->SetCur(afterName);
+ sName = i_sText;
+}
+
+void
+PE_VarFunc::On_expectName_operator(const char *)
+{
+ pSpuFunctionNormalOperator->Push(done);
+}
+
+void
+PE_VarFunc::On_expectName_Bracket_Left(const char *)
+{
+ // Function pointer declaration
+ pSpuIgnore->Push(not_done);
+ // TODO
+}
+
+
+void
+PE_VarFunc::On_afterName_ArrayBracket_Left(const char *)
+{
+ pSpuVariable->Push(not_done);
+}
+
+void
+PE_VarFunc::On_afterName_Bracket_Left(const char *)
+{
+ if ( NOT bInDestructor)
+ pSpuFunctionStd->Push(not_done);
+ else
+ pSpuFunctionDtor->Push(not_done);
+}
+
+void
+PE_VarFunc::On_afterName_DoubleColon(const char *)
+{
+ pSpuIgnore->Push(done); // This seems to be only an implementation.
+
+ // This may have been a template.
+ // In that case, the declaration needs to be closed.
+ Env().Close_OpenTemplate();
+}
+
+void
+PE_VarFunc::On_afterName_Semicolon(const char *)
+{
+ pSpuVariable->Push(not_done);
+}
+
+void
+PE_VarFunc::On_afterName_Comma(const char *)
+{
+ pSpuVariable->Push(not_done);
+}
+
+void
+PE_VarFunc::On_afterName_Assign(const char * )
+{
+ pSpuVariable->Push(not_done);
+}
+
+void
+PE_VarFunc::On_afterName_Less(const char * )
+{
+ SetTokenResult(done, stay);
+ pStati->SetCur(afterName_inErraneousTemplate);
+
+ nCounter_TemplateBrackets = 1;
+}
+
+void
+PE_VarFunc::On_afterName_inErraneousTemplate_Less(const char * )
+{
+ SetTokenResult(done, stay);
+
+ nCounter_TemplateBrackets++;
+}
+
+void
+PE_VarFunc::On_afterName_inErraneousTemplate_Greater(const char * )
+{
+ SetTokenResult(done, stay);
+
+ nCounter_TemplateBrackets--;
+ if ( nCounter_TemplateBrackets == 0 )
+ pStati->SetCur(afterName);
+}
+
+void
+PE_VarFunc::On_afterName_inErraneousTemplate_Default(const char * )
+{
+ SetTokenResult(done, stay);
+}
+
+void
+PE_VarFunc::On_finished_Semicolon(const char * ) // Should be Semicolon !!!
+{
+ SetTokenResult(done, pop_success);
+}
+
+void
+PE_VarFunc::On_finished_Comma(const char * )
+{
+ SetTokenResult(done, stay);
+ pStati->SetCur(expectName);
+}
+
+void
+PE_VarFunc::On_finished_Default(const char * )
+{
+ SetTokenResult(not_done, pop_success);
+}
+
+void
+PE_VarFunc::On_finishedIncludingFunctionImplementation_Default(const char * )
+{
+ SetTokenResult(not_done, pop_success);
+}
+
+ary::cpp::FunctionFlags
+PE_VarFunc::CreateFunctionFlags()
+{
+ typedef ary::cpp::FunctionFlags FuncFlags;
+
+ return FuncFlags( UINT16(
+ ( bStatic AND Env().Context().CurClass() == 0 ? FuncFlags::f_static_local : 0 )
+ | ( bStatic AND Env().Context().CurClass() != 0 ? FuncFlags::f_static_member : 0 )
+ | ( bExtern ? FuncFlags::f_extern : 0 )
+ | ( Env().IsExternC() ? FuncFlags::f_externC : 0 )
+ | ( bMutable ? FuncFlags::f_mutable : 0 )
+ | ( bInline ? FuncFlags::f_inline : 0 )
+ | ( bRegister ? FuncFlags::f_register : 0 )
+ | ( bExplicit ? FuncFlags::f_explicit : 0 ) )
+ );
+
+}
+
+
+} // namespace cpp
+
+
+
diff --git a/autodoc/source/parser/cpp/pe_vafu.hxx b/autodoc/source/parser/cpp/pe_vafu.hxx
new file mode 100644
index 000000000000..df151a3ca18d
--- /dev/null
+++ b/autodoc/source/parser/cpp/pe_vafu.hxx
@@ -0,0 +1,289 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+
+#ifndef ADC_CPP_PE_VAFU_HXX
+#define ADC_CPP_PE_VAFU_HXX
+
+// BASE CLASSES
+#include "cpp_pe.hxx"
+// USED SERVICES
+#include <semantic/callf.hxx>
+#include <semantic/sub_peu.hxx>
+#include <ary/cpp/c_types4cpp.hxx>
+#include <ary/cpp/c_vfflag.hxx>
+
+
+
+namespace cpp
+{
+
+class PE_Type;
+class PE_Variable;
+class PE_Function;
+class PE_Ignore;
+
+
+
+
+class PE_VarFunc : public Cpp_PE
+{
+ public:
+ enum E_State
+ {
+ start,
+ expectCtor,
+ afterClassDecl, // Also used for after enum declaration.
+ expectName,
+ afterName,
+ afterName_inErraneousTemplate,
+ finished,
+ finishedIncludingFunctionImplementation,
+ size_of_states
+ };
+ enum E_ResultType
+ {
+ result_unknown = 0,
+ result_ignore, /// Used for class and enum declarations and predeclarations and for extern variables and functions.
+ result_variable,
+ result_function
+ };
+
+ typedef ary::cpp::E_Protection E_Protection;
+
+
+ PE_VarFunc(
+ Cpp_PE * i_pParent );
+ ~PE_VarFunc();
+
+ virtual void Call_Handler(
+ const cpp::Token & i_rTok );
+
+ const std::vector<ary::cpp::Ce_id> &
+ Result_Ids() const;
+ ary::cpp::Type_id Result_FrontType() const;
+ const StringVector &
+ Result_Names() const;
+ E_ResultType Result_CeType() const;
+
+ private:
+ typedef SubPe< PE_VarFunc, PE_Type > SP_Type;
+ typedef SubPeUse< PE_VarFunc, PE_Type > SPU_Type;
+ typedef SubPe< PE_VarFunc, PE_Variable > SP_Variable;
+ typedef SubPeUse< PE_VarFunc, PE_Variable > SPU_Variable;
+ typedef SubPe< PE_VarFunc, PE_Function > SP_Function;
+ typedef SubPeUse< PE_VarFunc, PE_Function > SPU_Function;
+ typedef SubPe< PE_VarFunc, PE_Ignore > SP_Ignore;
+ typedef SubPeUse< PE_VarFunc, PE_Ignore > SPU_Ignore;
+
+ void Setup_StatusFunctions();
+ virtual void InitData();
+ virtual void TransferData();
+ void Hdl_UnknownToken( const char *);
+
+ void SpInit_FunctionStd();
+ void SpInit_FunctionCtor();
+ void SpInit_FunctionDtor();
+ void SpInit_FunctionCastOperator();
+ void SpInit_FunctionNormalOperator();
+ void SpReturn_Type();
+ void SpReturn_Variable();
+ void SpReturn_FunctionStd();
+ void SpReturn_Ignore();
+
+ void On_start_Identifier(const char * i_sText);
+ void On_start_operator(const char * i_sText);
+ void On_start_TypeKey(const char * i_sText);
+ void On_start_virtual(const char * i_sText);
+ void On_start_Tilde(const char * i_sText);
+ void On_start_const(const char * i_sText);
+ void On_start_volatile(const char * i_sText);
+ void On_start_extern(const char * i_sText);
+ void On_start_static(const char * i_sText);
+ void On_start_mutable(const char * i_sText);
+ void On_start_register(const char * i_sText);
+ void On_start_inline(const char * i_sText);
+ void On_start_explicit(const char * i_sText);
+ void On_start_Bracket_Right(const char * i_sText);
+ void On_start_typename(const char * i_sText);
+
+ void On_expectCtor_Bracket_Left(const char * i_sText);
+
+ void On_afterClassDecl_Semicolon(const char * i_sText);
+
+ void On_expectName_Identifier(const char * i_sText);
+ void On_expectName_operator(const char * i_sText);
+ void On_expectName_Bracket_Left(const char * i_sText);
+
+ void On_afterName_ArrayBracket_Left(const char * i_sText);
+ void On_afterName_Bracket_Left(const char * i_sText);
+ void On_afterName_DoubleColon(const char * i_sText);
+ void On_afterName_Semicolon(const char * i_sText);
+ void On_afterName_Comma(const char * i_sText);
+ void On_afterName_Assign(const char * i_sText);
+ void On_afterName_Less(const char * i_sText);
+
+ void On_afterName_inErraneousTemplate_Less(const char * i_sText);
+ void On_afterName_inErraneousTemplate_Greater(const char * i_sText);
+ void On_afterName_inErraneousTemplate_Default(const char * i_sText);
+
+ void On_finished_Semicolon(const char * i_sText);
+ void On_finished_Comma(const char * i_sText);
+ void On_finished_Default(const char * i_sText);
+
+ void On_finishedIncludingFunctionImplementation_Default(const char * i_sText);
+
+ ary::cpp::FunctionFlags
+ CreateFunctionFlags();
+
+ // DATA
+ Dyn< PeStatusArray<PE_VarFunc> >
+ pStati;
+
+ Dyn<SP_Type> pSpType;
+ Dyn<SPU_Type> pSpuType;
+ Dyn<SP_Variable> pSpVariable;
+ Dyn<SPU_Variable> pSpuVariable;
+ Dyn<SP_Function> pSpFunction;
+ Dyn<SPU_Function> pSpuFunctionStd;
+ Dyn<SPU_Function> pSpuFunctionCtor;
+ Dyn<SPU_Function> pSpuFunctionDtor;
+ Dyn<SPU_Function> pSpuFunctionCastOperator;
+ Dyn<SPU_Function> pSpuFunctionNormalOperator;
+ Dyn<SP_Ignore> pSpIgnore;
+ Dyn<SPU_Ignore> pSpuIgnore;
+
+ intt nCounter_TemplateBrackets;
+ bool bInDestructor;
+
+ std::vector<ary::cpp::Ce_id>
+ aResultIds;
+ ary::cpp::Type_id nResultFrontType;
+ E_ResultType eResultType;
+
+ // Pre-Results
+ String sName;
+
+ bool bVirtual;
+ bool bStatic;
+ bool bExtern;
+ bool bExternC;
+ bool bMutable;
+ bool bInline;
+ bool bRegister;
+ bool bExplicit;
+};
+
+
+
+// IMPLEMENTATION
+
+inline const std::vector<ary::cpp::Ce_id> &
+PE_VarFunc::Result_Ids() const
+ { return aResultIds; }
+inline ary::cpp::Type_id
+PE_VarFunc::Result_FrontType() const
+ { return nResultFrontType; }
+inline PE_VarFunc::E_ResultType
+PE_VarFunc::Result_CeType() const
+ { return eResultType; }
+
+
+
+} // namespace cpp
+
+
+
+
+#endif
+
+
+/* // Overview of Stati
+
+Undecided
+---------
+
+start // vor und whrend storage class specifiern
+ any ->stay
+ operaator ->goto Function
+
+->Typ
+
+expectName
+ Identifier ->stay
+ operator ->goto Function
+
+afterName ->goto Variable or Function
+
+
+
+
+Variable
+--------
+
+start // vor und whrend storage class specifiern
+
+->Typ
+
+expectName // Typ ist da -> im Falle von '(': notyetimplemented
+afterName
+
+expectSize // after [
+expectFinish
+ // vor ; oder ,
+expectNextVarName // anders als bei expectName kann hier auch * oder & kommen
+
+
+
+
+
+Function
+--------
+
+start // vor und whrend storage class specifiern
+
+->Typ
+
+expectName // Typ ist da
+expectBracket // Nach Name
+expectParameter // nach ( oder ,
+-> Parameter
+after Parameters // before const, volatile throw or = 0.
+after throw // expect (
+expectException // after (
+after exceptions // = 0 oder ; oder ,
+
+
+expectNextVarName // anders als bei expectName kann hier auch * oder & kommen
+
+
+
+
+
+
+
+*/
diff --git a/autodoc/source/parser/cpp/pe_vari.cxx b/autodoc/source/parser/cpp/pe_vari.cxx
new file mode 100644
index 000000000000..a3accd3963c2
--- /dev/null
+++ b/autodoc/source/parser/cpp/pe_vari.cxx
@@ -0,0 +1,187 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "pe_vari.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include <cosv/tpl/tpltools.hxx>
+#include "pe_expr.hxx"
+
+
+
+
+namespace cpp {
+
+
+PE_Variable::PE_Variable( Cpp_PE * i_pParent )
+ : Cpp_PE(i_pParent),
+ pStati( new PeStatusArray<PE_Variable> )
+ // pSpExpression,
+ // pSpuArraySizeExpression,
+ // pSpuInitExpression,
+ // sResultSizeExpression,
+ // sResultInitExpression
+{
+ Setup_StatusFunctions();
+
+ pSpExpression = new SP_Expression(*this);
+
+ pSpuArraySizeExpression = new SPU_Expression(*pSpExpression, 0, &PE_Variable::SpReturn_ArraySizeExpression);
+ pSpuInitExpression = new SPU_Expression(*pSpExpression, 0, &PE_Variable::SpReturn_InitExpression);
+}
+
+PE_Variable::~PE_Variable()
+{
+}
+
+void
+PE_Variable::Call_Handler( const cpp::Token & i_rTok )
+{
+ pStati->Cur().Call_Handler(i_rTok.TypeId(), i_rTok.Text());
+}
+
+void
+PE_Variable::Setup_StatusFunctions()
+{
+ typedef CallFunction<PE_Variable>::F_Tok F_Tok;
+
+ static F_Tok stateF_afterName[] = { &PE_Variable::On_afterName_ArrayBracket_Left,
+ &PE_Variable::On_afterName_Semicolon,
+ &PE_Variable::On_afterName_Comma,
+ &PE_Variable::On_afterName_Assign };
+ static INT16 stateT_afterName[] = { Tid_ArrayBracket_Left,
+ Tid_Semicolon,
+ Tid_Comma,
+ Tid_Assign };
+ static F_Tok stateF_afterSize[] = { &PE_Variable::On_afterSize_ArrayBracket_Right };
+ static INT16 stateT_afterSize[] = { Tid_ArrayBracket_Right };
+ static F_Tok stateF_expectFinish[] = { &PE_Variable::On_expectFinish_Bracket_Right,
+ &PE_Variable::On_expectFinish_Semicolon,
+ &PE_Variable::On_expectFinish_Comma };
+ static INT16 stateT_expectFinish[] = { Tid_Bracket_Right,
+ Tid_Semicolon,
+ Tid_Comma };
+
+ SEMPARSE_CREATE_STATUS(PE_Variable, afterName, Hdl_SyntaxError);
+ SEMPARSE_CREATE_STATUS(PE_Variable, afterSize, Hdl_SyntaxError);
+ SEMPARSE_CREATE_STATUS(PE_Variable, expectFinish, Hdl_SyntaxError);
+}
+
+void
+PE_Variable::InitData()
+{
+ pStati->SetCur(afterName);
+
+ sResultSizeExpression.clear();
+ sResultInitExpression.clear();
+}
+
+void
+PE_Variable::TransferData()
+{
+ pStati->SetCur(size_of_states);
+}
+
+void
+PE_Variable::Hdl_SyntaxError( const char * i_sText)
+{
+ StdHandlingOfSyntaxError(i_sText);
+}
+
+void
+PE_Variable::SpReturn_ArraySizeExpression()
+{
+ pStati->SetCur(afterSize);
+
+ sResultSizeExpression = pSpuArraySizeExpression->Child().Result_Text();
+}
+
+void
+PE_Variable::SpReturn_InitExpression()
+{
+ pStati->SetCur(expectFinish);
+
+ sResultInitExpression = pSpuInitExpression->Child().Result_Text();
+}
+
+void
+PE_Variable::On_afterName_ArrayBracket_Left(const char *)
+{
+ pSpuArraySizeExpression->Push(done);
+}
+
+void
+PE_Variable::On_afterName_Semicolon(const char *)
+{
+ SetTokenResult(not_done, pop_success);
+}
+
+void
+PE_Variable::On_afterName_Comma(const char *)
+{
+ SetTokenResult(not_done, pop_success);
+}
+
+void
+PE_Variable::On_afterName_Assign(const char *)
+{
+ pSpuInitExpression->Push(done);
+}
+
+void
+PE_Variable::On_afterSize_ArrayBracket_Right(const char *)
+{
+ SetTokenResult(done, stay);
+ pStati->SetCur(afterName);
+}
+
+void
+PE_Variable::On_expectFinish_Semicolon(const char *)
+{
+ SetTokenResult(not_done, pop_success);
+}
+
+void
+PE_Variable::On_expectFinish_Comma(const char *)
+{
+ SetTokenResult(not_done, pop_success);
+}
+
+void
+PE_Variable::On_expectFinish_Bracket_Right(const char *)
+{
+ SetTokenResult(not_done, pop_success);
+}
+
+
+} // namespace cpp
+
+
+
+
diff --git a/autodoc/source/parser/cpp/pe_vari.hxx b/autodoc/source/parser/cpp/pe_vari.hxx
new file mode 100644
index 000000000000..00087600ec3a
--- /dev/null
+++ b/autodoc/source/parser/cpp/pe_vari.hxx
@@ -0,0 +1,130 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_CPP_PE_VARI_HXX
+#define ADC_CPP_PE_VARI_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include "cpp_pe.hxx"
+ // COMPONENTS
+#include <semantic/callf.hxx>
+#include <semantic/sub_peu.hxx>
+#include <ary/cpp/c_types4cpp.hxx>
+#include <ary/cpp/c_vfflag.hxx>
+ // PARAMETERS
+
+
+namespace cpp {
+
+class PE_Expression;
+
+
+class PE_Variable : public Cpp_PE
+{
+ public:
+ enum E_State
+ {
+ afterName, //
+ afterSize, // after ]
+ expectFinish, // after InitExpression
+ size_of_states
+ };
+ PE_Variable(
+ Cpp_PE * i_pParent );
+ ~PE_Variable();
+
+ /** @return
+ Bit 0x0001 != 0, if there is a size and
+ bit 0x0002 != 0, if there is an initialisation.
+ */
+ UINT16 Result_Pattern() const;
+ const String & Result_SizeExpression() const;
+ const String & Result_InitExpression() const;
+
+ virtual void Call_Handler(
+ const cpp::Token & i_rTok );
+
+ private:
+ typedef SubPe< PE_Variable, PE_Expression > SP_Expression;
+ typedef SubPeUse< PE_Variable, PE_Expression> SPU_Expression;
+
+ void Setup_StatusFunctions();
+ virtual void InitData();
+ virtual void TransferData();
+ void Hdl_SyntaxError(const char *);
+
+ void SpReturn_ArraySizeExpression();
+ void SpReturn_InitExpression();
+
+ void On_afterName_ArrayBracket_Left(const char * i_sText);
+ void On_afterName_Semicolon(const char * i_sText);
+ void On_afterName_Comma(const char * i_sText);
+ void On_afterName_Assign(const char * i_sText);
+
+ void On_afterSize_ArrayBracket_Right(const char * i_sText);
+
+ void On_expectFinish_Semicolon(const char * i_sText);
+ void On_expectFinish_Comma(const char * i_sText);
+ void On_expectFinish_Bracket_Right(const char * i_sText);
+
+ // DATA
+ Dyn< PeStatusArray<PE_Variable> >
+ pStati;
+
+ Dyn<SP_Expression> pSpExpression;
+ Dyn<SPU_Expression> pSpuArraySizeExpression;
+ Dyn<SPU_Expression> pSpuInitExpression;
+
+ String sResultSizeExpression;
+ String sResultInitExpression;
+};
+
+
+
+// IMPLEMENTATION
+
+
+inline UINT16
+PE_Variable::Result_Pattern() const
+ { return ( sResultSizeExpression.length() > 0 ? 1 : 0 )
+ + ( sResultInitExpression.length() > 0 ? 2 : 0 ); }
+inline const String &
+PE_Variable::Result_SizeExpression() const
+ { return sResultSizeExpression; }
+inline const String &
+PE_Variable::Result_InitExpression() const
+ { return sResultInitExpression; }
+
+
+} // namespace cpp
+
+
+#endif
+
diff --git a/autodoc/source/parser/cpp/pev.hxx b/autodoc/source/parser/cpp/pev.hxx
new file mode 100644
index 000000000000..5394dcd0fc21
--- /dev/null
+++ b/autodoc/source/parser/cpp/pev.hxx
@@ -0,0 +1,304 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_CPP_PEV_HXX
+#define ADC_CPP_PEV_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <tokens/tokproct.hxx>
+ // COMPONENTS
+ // PARAMETERS
+#include <ary/cpp/c_types4cpp.hxx>
+
+namespace ary
+{
+ namespace cpp
+ {
+ class Gate;
+ class InputContext;
+
+ class Namespace;
+ class Class;
+ class Enum;
+ class Typedef;
+ class Function;
+ class Variable;
+ class EnumValue;
+
+ class DefineEntity;
+ }
+
+ class Documentation;
+}
+
+
+namespace cpp
+{
+
+
+class PeEnvironment : protected TokenProcessing_Types
+{
+ public:
+ // INQUIRY
+ virtual ~PeEnvironment() {}
+
+ // OPERATIONS
+ // Token results
+ void SetTokenResult(
+ E_TokenDone i_eDone,
+ E_EnvStackAction i_eWhat2DoWithEnvStack,
+ ParseEnvironment * i_pParseEnv2Push = 0 );
+
+ // Owner stack
+ void OpenNamespace(
+ ary::cpp::Namespace &
+ io_rOpenedNamespace );
+ void OpenExternC(
+ bool i_bOnlyForOneDeclaration = false );
+ void OpenClass(
+ ary::cpp::Class & io_rOpenedClass );
+ void OpenEnum(
+ ary::cpp::Enum & io_rOpenedEnum );
+ void CloseBlock(); /// Handles a '}' on file scope.
+ void CloseClass();
+ void CloseEnum();
+ void SetCurProtection( /// Handles 'public:', 'protected:' and 'private:' on class scope.
+ ary::cpp::E_Protection
+ i_eProtection );
+ void OpenTemplate(
+ const StringVector &
+ i_rParameters );
+ /// Removes parameters from this object.
+ DYN StringVector * Get_CurTemplateParameters();
+ /// Checks, if a template is still open, and if yes, closes it.
+ void Close_OpenTemplate();
+
+ // Special events
+ void Event_Class_FinishedBase(
+ const String & i_sParameterName );
+
+ void Event_Store_Typedef(
+ ary::cpp::Typedef & io_rTypedef );
+ void Event_Store_EnumValue(
+ ary::cpp::EnumValue &
+ io_rEnumValue );
+ void Event_Store_CppDefinition(
+ ary::cpp::DefineEntity &
+ io_rDefinition );
+
+ void Event_EnterFunction_ParameterList();
+ void Event_Function_FinishedParameter(
+ const String & i_sParameterName );
+ void Event_LeaveFunction_ParameterList();
+ void Event_EnterFunction_Implementation();
+ void Event_LeaveFunction_Implementation();
+
+ void Event_Store_Function(
+ ary::cpp::Function &
+ io_rFunction );
+ void Event_Store_Variable(
+ ary::cpp::Variable &
+ io_rVariable );
+ // Error recovery
+ void StartWaitingFor_Recovery();
+
+ // INQUIRY
+ ary::cpp::Gate & AryGate() const;
+ const ary::cpp::InputContext &
+ Context() const;
+ String CurFileName() const;
+ uintt LineCount() const;
+ bool IsWaitingFor_Recovery() const;
+ bool IsExternC() const;
+
+ private:
+ virtual void do_SetTokenResult(
+ E_TokenDone i_eDone,
+ E_EnvStackAction i_eWhat2DoWithEnvStack,
+ ParseEnvironment * i_pParseEnv2Push ) = 0;
+ virtual void do_OpenNamespace(
+ ary::cpp::Namespace &
+ io_rOpenedNamespace ) = 0;
+ virtual void do_OpenExternC(
+ bool i_bOnlyForOneDeclaration ) = 0;
+ virtual void do_OpenClass(
+ ary::cpp::Class & io_rOpenedClass ) = 0;
+ virtual void do_OpenEnum(
+ ary::cpp::Enum & io_rOpenedEnum ) = 0;
+ virtual void do_CloseBlock() = 0;
+ virtual void do_CloseClass() = 0;
+ virtual void do_CloseEnum() = 0;
+ virtual void do_SetCurProtection(
+ ary::cpp::E_Protection
+ i_eProtection ) = 0;
+ virtual void do_OpenTemplate(
+ const StringVector &
+ i_rParameters ) = 0;
+ virtual DYN StringVector *
+ do_Get_CurTemplateParameters() = 0;
+ virtual void do_Close_OpenTemplate() = 0;
+ virtual void do_Event_Class_FinishedBase(
+ const String & i_sBaseName ) = 0;
+
+ virtual void do_Event_Store_Typedef(
+ ary::cpp::Typedef & io_rTypedef ) = 0;
+ virtual void do_Event_Store_EnumValue(
+ ary::cpp::EnumValue &
+ io_rEnumValue ) = 0;
+ virtual void do_Event_Store_CppDefinition(
+ ary::cpp::DefineEntity &
+ io_rDefinition ) = 0;
+ virtual void do_Event_EnterFunction_ParameterList() = 0;
+ virtual void do_Event_Function_FinishedParameter(
+ const String & i_sParameterName ) = 0;
+ virtual void do_Event_LeaveFunction_ParameterList() = 0;
+ virtual void do_Event_EnterFunction_Implementation() = 0;
+ virtual void do_Event_LeaveFunction_Implementation() = 0;
+ virtual void do_Event_Store_Function(
+ ary::cpp::Function &
+ io_rFunction ) = 0;
+ virtual void do_Event_Store_Variable(
+ ary::cpp::Variable &
+ io_rVariable ) = 0;
+ virtual void do_StartWaitingFor_Recovery() = 0;
+ virtual ary::cpp::Gate &
+ inq_AryGate() const = 0;
+ virtual const ary::cpp::InputContext &
+ inq_Context() const = 0;
+ virtual String inq_CurFileName() const = 0;
+ virtual uintt inq_LineCount() const = 0;
+ virtual bool inq_IsWaitingFor_Recovery() const = 0;
+ virtual bool inq_IsExternC() const = 0;
+};
+
+
+
+// IMPLEMENTATION
+
+inline void
+PeEnvironment::SetTokenResult( E_TokenDone i_eDone,
+ E_EnvStackAction i_eWhat2DoWithEnvStack,
+ ParseEnvironment * i_pParseEnv2Push )
+ { do_SetTokenResult(i_eDone, i_eWhat2DoWithEnvStack, i_pParseEnv2Push); }
+inline void
+PeEnvironment::OpenNamespace( ary::cpp::Namespace & io_rOpenedNamespace )
+ { do_OpenNamespace(io_rOpenedNamespace); }
+inline void
+PeEnvironment::OpenExternC( bool i_bOnlyForOneDeclaration )
+ { do_OpenExternC(i_bOnlyForOneDeclaration); }
+inline void
+PeEnvironment::OpenClass( ary::cpp::Class & io_rOpenedClass )
+ { do_OpenClass(io_rOpenedClass); }
+inline void
+PeEnvironment::OpenEnum( ary::cpp::Enum & io_rOpenedEnum )
+ { do_OpenEnum(io_rOpenedEnum); }
+inline void
+PeEnvironment::CloseBlock()
+ { do_CloseBlock(); }
+inline void
+PeEnvironment::CloseClass()
+ { do_CloseClass(); }
+inline void
+PeEnvironment::CloseEnum()
+ { do_CloseEnum(); }
+inline void
+PeEnvironment::SetCurProtection( ary::cpp::E_Protection i_eProtection )
+ { do_SetCurProtection(i_eProtection); }
+inline void
+PeEnvironment::OpenTemplate( const StringVector & i_rParameters )
+ { do_OpenTemplate(i_rParameters); }
+inline DYN StringVector *
+PeEnvironment::Get_CurTemplateParameters()
+ { return do_Get_CurTemplateParameters(); }
+inline void
+PeEnvironment::Close_OpenTemplate()
+ { do_Close_OpenTemplate(); }
+inline void
+PeEnvironment::Event_Class_FinishedBase( const String & i_sBaseName )
+ { do_Event_Class_FinishedBase(i_sBaseName); }
+inline void
+PeEnvironment::Event_Store_Typedef( ary::cpp::Typedef & io_rTypedef )
+ { do_Event_Store_Typedef(io_rTypedef); }
+inline void
+PeEnvironment::Event_Store_EnumValue( ary::cpp::EnumValue & io_rEnumValue )
+ { do_Event_Store_EnumValue(io_rEnumValue); }
+inline void
+PeEnvironment::Event_Store_CppDefinition( ary::cpp::DefineEntity & io_rDefinition )
+ { do_Event_Store_CppDefinition(io_rDefinition); }
+inline void
+PeEnvironment::Event_EnterFunction_ParameterList()
+ { do_Event_EnterFunction_ParameterList(); }
+inline void
+PeEnvironment::Event_Function_FinishedParameter( const String & i_sParameterName )
+ { do_Event_Function_FinishedParameter(i_sParameterName); }
+inline void
+PeEnvironment::Event_LeaveFunction_ParameterList()
+ { do_Event_LeaveFunction_ParameterList(); }
+inline void
+PeEnvironment::Event_EnterFunction_Implementation()
+ { do_Event_EnterFunction_Implementation(); }
+inline void
+PeEnvironment::Event_LeaveFunction_Implementation()
+ { do_Event_LeaveFunction_Implementation(); }
+inline void
+PeEnvironment::Event_Store_Function( ary::cpp::Function & io_rFunction )
+ { do_Event_Store_Function(io_rFunction); }
+inline void
+PeEnvironment::Event_Store_Variable( ary::cpp::Variable & io_rVariable )
+ { do_Event_Store_Variable(io_rVariable); }
+inline void
+PeEnvironment::StartWaitingFor_Recovery()
+ { do_StartWaitingFor_Recovery(); }
+inline ary::cpp::Gate &
+PeEnvironment::AryGate() const
+ { return inq_AryGate(); }
+inline const ary::cpp::InputContext &
+PeEnvironment::Context() const
+ { return inq_Context(); }
+inline String
+PeEnvironment::CurFileName() const
+ { return inq_CurFileName(); }
+inline uintt
+PeEnvironment::LineCount() const
+ { return inq_LineCount(); }
+inline bool
+PeEnvironment::IsWaitingFor_Recovery() const
+ { return inq_IsWaitingFor_Recovery(); }
+inline bool
+PeEnvironment::IsExternC() const
+ { return inq_IsExternC(); }
+
+
+
+} // namespace cpp
+
+
+#endif
+
diff --git a/autodoc/source/parser/cpp/preproc.cxx b/autodoc/source/parser/cpp/preproc.cxx
new file mode 100644
index 000000000000..332645114b7c
--- /dev/null
+++ b/autodoc/source/parser/cpp/preproc.cxx
@@ -0,0 +1,231 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "preproc.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include <cosv/tpl/tpltools.hxx>
+#include "all_toks.hxx"
+#include "defdescr.hxx"
+#include <tools/tkpchars.hxx>
+#include "c_rcode.hxx"
+
+
+namespace cpp
+{
+
+
+PreProcessor::F_TOKENPROC PreProcessor::aTokProcs[PreProcessor::state_MAX] =
+ {
+ &PreProcessor::On_plain,
+ &PreProcessor::On_expect_macro_bracket_left,
+ &PreProcessor::On_expect_macro_param
+ };
+
+
+PreProcessor::PreProcessor()
+ : pCppExplorer(0),
+ pSourceText(0),
+ pCurValidDefines(0),
+ // aTokens,
+ eState(plain),
+ pCurMacro(0),
+ dpCurMacroName(0),
+ // aCurMacroParams,
+ aCurParamText(60000),
+ nBracketInParameterCounter(0)
+ // aBlockedMacroNames
+{
+}
+
+PreProcessor::~PreProcessor()
+{
+}
+
+void
+PreProcessor::AssignPartners( CodeExplorer & o_rCodeExplorer,
+ CharacterSource & o_rCharSource,
+ const MacroMap & i_rCurValidDefines )
+{
+ pCppExplorer = &o_rCodeExplorer;
+ pSourceText = &o_rCharSource;
+ pCurValidDefines = &i_rCurValidDefines;
+}
+
+void
+PreProcessor::Process_Token( cpp::Token & let_drToken )
+{
+ csv_assert(pCppExplorer != 0); // Implies pSourceText and pCurValidDefines.
+
+ (this->*aTokProcs[eState])(let_drToken);
+}
+
+void
+PreProcessor::On_plain( cpp::Token & let_drToken )
+{
+ if ( let_drToken.TypeId() == Tid_Identifier )
+ {
+ if (CheckForDefine(let_drToken))
+ return;
+ }
+
+ pCppExplorer->Process_Token(let_drToken);
+}
+
+void
+PreProcessor::On_expect_macro_bracket_left( cpp::Token & let_drToken )
+{
+ if ( let_drToken.TypeId() == Tid_Bracket_Left )
+ {
+ aCurParamText.seekp(0);
+ eState = expect_macro_param;
+ }
+ else
+ {
+ pCppExplorer->Process_Token(*dpCurMacroName);
+ dpCurMacroName = 0;
+ pCppExplorer->Process_Token(let_drToken);
+ eState = plain;
+ }
+}
+
+void
+PreProcessor::On_expect_macro_param( cpp::Token & let_drToken )
+{
+ if ( let_drToken.TypeId() == Tid_Bracket_Left )
+ nBracketInParameterCounter++;
+ else if ( let_drToken.TypeId() == Tid_Bracket_Right )
+ {
+ if ( nBracketInParameterCounter > 0 )
+ nBracketInParameterCounter--;
+ else
+ {
+ if ( NOT csv::no_str(aCurParamText.c_str()) )
+ {
+ aCurMacroParams.push_back( String(aCurParamText.c_str()) );
+ }
+ csv_assert( aCurMacroParams.size() == pCurMacro->ParamCount() );
+
+ InterpretMacro();
+ eState = plain;
+ return;
+ }
+ }
+ else if ( let_drToken.TypeId() == Tid_Comma AND nBracketInParameterCounter == 0 )
+ {
+ aCurMacroParams.push_back( String (aCurParamText.c_str()) );
+ aCurParamText.seekp(0);
+ return;
+ }
+
+ // KORR_FUTURE:
+ // If in future whitespace is parsed also, that should match exactly and the
+ // safety spaces, " ", here should be removed.
+ aCurParamText << let_drToken.Text() << " ";
+}
+
+bool
+PreProcessor::CheckForDefine( cpp::Token & let_drToken )
+{
+ String sTokenText(let_drToken.Text());
+ pCurMacro = csv::value_from_map( *pCurValidDefines, sTokenText );
+ if (pCurMacro == 0 )
+ return false;
+ for ( StringVector::const_iterator it = aBlockedMacroNames.begin();
+ it != aBlockedMacroNames.end();
+ ++it )
+ {
+ if ( strcmp( (*it).c_str(), let_drToken.Text() ) == 0 )
+ return false;
+ }
+
+ if ( pCurMacro->DefineType() == DefineDescription::type_define )
+ {
+ delete &let_drToken;
+
+ aCurParamText.seekp(0);
+ pCurMacro->GetDefineText(aCurParamText);
+
+ if ( aCurParamText.tellp() > 1 )
+ pSourceText->InsertTextAtCurPos(aCurParamText.c_str());
+ }
+ else // ( pCurMacro->DefineType() == DefineDescription::type_macro )
+ {
+ dpCurMacroName = &let_drToken;
+ eState = expect_macro_bracket_left;
+ csv::erase_container( aCurMacroParams );
+ aCurParamText.seekp(0);
+ nBracketInParameterCounter = 0;
+ } // endif
+
+ return true;
+}
+
+void
+PreProcessor::UnblockMacro( const char * i_sMacroName )
+{
+ for ( StringVector::iterator it = aBlockedMacroNames.begin();
+ it != aBlockedMacroNames.end();
+ ++it )
+ {
+ if ( strcmp( (*it), i_sMacroName ) == 0 )
+ {
+ aBlockedMacroNames.erase(it);
+ break;
+ }
+ } /// end for
+}
+
+void
+PreProcessor::InterpretMacro()
+{
+ aCurParamText.seekp(0);
+ pCurMacro->GetMacroText(aCurParamText, aCurMacroParams);
+
+ if ( NOT csv::no_str(aCurParamText.c_str()) )
+ {
+ aCurParamText.seekp(-1, csv::cur);
+ aCurParamText << " #unblock-" << dpCurMacroName->Text() << " ";
+
+ pSourceText->InsertTextAtCurPos(aCurParamText.c_str());
+ String sCurMacroName(dpCurMacroName->Text());
+ aBlockedMacroNames.insert( aBlockedMacroNames.begin(), sCurMacroName );
+ }
+
+ delete dpCurMacroName;
+ dpCurMacroName = 0;
+ pCurMacro = 0;
+ csv::erase_container(aCurMacroParams);
+ aCurParamText.seekp(0);
+}
+
+
+} // end namespace cpp
+
+
diff --git a/autodoc/source/parser/cpp/preproc.hxx b/autodoc/source/parser/cpp/preproc.hxx
new file mode 100644
index 000000000000..93c6f9cd425f
--- /dev/null
+++ b/autodoc/source/parser/cpp/preproc.hxx
@@ -0,0 +1,116 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_CPP_PREPROC_HXX
+#define ADC_CPP_PREPROC_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+ // COMPONENTS
+#include <deque>
+ // PARAMETERS
+
+class CharacterSource;
+
+
+namespace cpp
+{
+
+class Token;
+class CodeExplorer;
+class DefineDescription;
+
+
+class PreProcessor
+{
+ public:
+ typedef std::map< String, DefineDescription* > MacroMap;
+
+ // LIFECYCLE
+ PreProcessor();
+ ~PreProcessor();
+ // OPERATONS
+ void AssignPartners(
+ CodeExplorer & o_rCodeExplorer,
+ CharacterSource & o_rCharSource,
+ const MacroMap & i_rCurValidDefines );
+ void Process_Token(
+ cpp::Token & let_drToken );
+ void UnblockMacro(
+ const char * i_sMacroName );
+ private:
+ public: // Necessary for instantiation of static variable:
+ enum E_State
+ {
+ plain = 0,
+ expect_macro_bracket_left,
+ expect_macro_param,
+ state_MAX
+ };
+ typedef void (PreProcessor::* F_TOKENPROC )(cpp::Token &);
+ void On_plain( cpp::Token & );
+ void On_expect_macro_bracket_left( cpp::Token & );
+ void On_expect_macro_param( cpp::Token & );
+
+ private: // Reprivate again:
+ typedef std::deque< DYN cpp::Token * > TokenQueue;
+ typedef StringVector List_MacroParams;
+
+
+ bool CheckForDefine(
+ cpp::Token & let_drToken );
+ void InterpretMacro();
+
+ // DATA
+ static F_TOKENPROC aTokProcs[state_MAX];
+ // Referenced extern objects
+ CodeExplorer * pCppExplorer;
+ CharacterSource * pSourceText;
+ const MacroMap * pCurValidDefines;
+
+ // internal data
+ TokenQueue aTokens;
+
+ E_State eState;
+
+ DefineDescription * pCurMacro;
+ DYN Token * dpCurMacroName;
+ List_MacroParams aCurMacroParams;
+ csv::StreamStr aCurParamText;
+
+ intt nBracketInParameterCounter;
+ StringVector aBlockedMacroNames;
+};
+
+
+
+} // end namespace cpp
+
+#endif
+
diff --git a/autodoc/source/parser/cpp/prs_cpp.cxx b/autodoc/source/parser/cpp/prs_cpp.cxx
new file mode 100644
index 000000000000..615fe016e620
--- /dev/null
+++ b/autodoc/source/parser/cpp/prs_cpp.cxx
@@ -0,0 +1,248 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <cpp/prs_cpp.hxx>
+
+
+// NOT FULLY DEFINED SERVICES
+#include <cosv/file.hxx>
+#include <ary/ary.hxx>
+#include <ary/cpp/c_gate.hxx>
+#include <autodoc/prs_docu.hxx>
+#include <autodoc/filecoli.hxx>
+#include <autodoc/x_parsing.hxx>
+#include <tools/tkpchars.hxx>
+#include <adc_cl.hxx>
+#include "c_dealer.hxx"
+#include "defdescr.hxx"
+#include "tkp_cpp.hxx"
+
+
+// Helper function
+static bool Local_LoadFile(
+ CharacterSource & o_rTextBuffer,
+ const String & i_rFullFilePath );
+
+
+
+
+namespace cpp
+{
+
+// This class is used for the UDK as workaround for the missing
+// feature of parsing #define s.
+
+class Udk_MacroMap
+{
+ public:
+ typedef std::map< String , DefineDescription* > Data;
+
+ Udk_MacroMap();
+ ~Udk_MacroMap();
+
+ const Data & GetData() const { return aData; }
+
+ private:
+ Data aData;
+};
+
+struct S_RunningData
+{
+ CharacterSource aFileContent;
+ ary::cpp::Gate & rCppGate;
+ Udk_MacroMap aMacros;
+ Distributor aDealer;
+ TokenParser_Cpp aTkp;
+
+ S_RunningData(
+ ary::Repository & o_rRepository,
+ const autodoc::DocumentationParser_Ifc &
+ i_rDocumentationInterpreter );
+};
+
+
+
+
+Cpluplus_Parser::Cpluplus_Parser()
+// : pRunningData
+{
+}
+
+Cpluplus_Parser::~Cpluplus_Parser()
+{
+}
+
+void
+Cpluplus_Parser::Setup( ary::Repository & o_rRepository,
+ const autodoc::DocumentationParser_Ifc & i_rDocumentationInterpreter )
+{
+ pRunningData = new S_RunningData(o_rRepository, i_rDocumentationInterpreter);
+}
+
+void
+Cpluplus_Parser::Run( const autodoc::FileCollector_Ifc & i_rFiles )
+{
+ for ( autodoc::FileCollector_Ifc::const_iterator iter = i_rFiles.Begin();
+ iter != i_rFiles.End();
+ ++iter )
+ {
+ csv::ploc::Path
+ aFilePath(*iter);
+
+ try
+ {
+ if ( NOT Local_LoadFile(pRunningData->aFileContent, *iter) )
+ continue;
+ for ( pRunningData->aTkp.StartNewFile(aFilePath);
+ pRunningData->aTkp.HasMore();
+ pRunningData->aTkp.GetNextToken() )
+ ;
+ }
+ catch (autodoc::X_Parser_Ifc & rX_Parse)
+ {
+ if ( DEBUG_ShowStoring() OR DEBUG_ShowText() )
+ Cerr() << rX_Parse << Endl();
+ }
+ catch (...)
+ {
+ if ( DEBUG_ShowStoring() OR DEBUG_ShowText() )
+ Cerr() << "Error: Unknown exception." << Endl();
+ }
+ } // end for (iter)
+}
+
+S_RunningData::S_RunningData( ary::Repository & o_rRepository,
+ const autodoc::DocumentationParser_Ifc & i_rDocumentationInterpreter )
+ : aFileContent(),
+ rCppGate( o_rRepository.Gate_Cpp() ),
+ aMacros(),
+ aDealer(o_rRepository.Gate_Cpp()),
+ aTkp( * i_rDocumentationInterpreter.Create_DocuContext() )
+{
+ aDealer.AssignPartners( aFileContent,
+ aMacros.GetData() );
+ aTkp.AssignPartners( aFileContent, aDealer );
+}
+
+
+Udk_MacroMap::Udk_MacroMap()
+{
+ String sSAL_CALL("SAL_CALL");
+ String sSAL_CALL_ELLIPSE("SAL_CALL_ELLIPSE");
+ String sSAL_NO_VTABLE("SAL_NO_VTABLE");
+ String sREGISTRY_CALLTYPE("REGISTRY_CALLTYPE");
+ String sSAL_THROW("SAL_THROW");
+ String sSAL_THROW_EXTERN_C("SAL_THROW_EXTERN_C");
+
+ String s__DEF_COMPIMPLHELPER_A("__DEF_COMPIMPLHELPER_A");
+ String s__DEF_COMPIMPLHELPER_B("__DEF_COMPIMPLHELPER_B");
+ String s__DEF_COMPIMPLHELPER("__DEF_COMPIMPLHELPER");
+
+ String s__DEF_IMPLHELPER_PRE("__DEF_IMPLHELPER_PRE");
+ String s__IFC_WRITEOFFSET("__IFC_WRITEOFFSET");
+ String s__DEF_IMPLHELPER_POST("__DEF_IMPLHELPER_POST");
+
+ String sSAL_EXCEPTION_DLLPUBLIC_EXPORT("SAL_EXCEPTION_DLLPUBLIC_EXPORT");
+ String sSAL_EXCEPTION_DLLPRIVATE("SAL_EXCEPTION_DLLPRIVATE");
+
+
+ StringVector aEmpty;
+
+ StringVector aParamsSAL_THROW;
+ aParamsSAL_THROW.push_back( String ("exc") );
+ StringVector aDefSAL_THROW;
+ aDefSAL_THROW.push_back( String ("throw") );
+ aDefSAL_THROW.push_back( String ("exc") );
+
+ StringVector aCompImplHelperParams;
+ aCompImplHelperParams.push_back(String ("N"));
+
+
+ // filling up the list
+
+
+ aData[sSAL_CALL] = new DefineDescription(sSAL_CALL, aEmpty);
+ aData[sSAL_CALL_ELLIPSE] = new DefineDescription(sSAL_CALL_ELLIPSE, aEmpty);
+ aData[sSAL_NO_VTABLE] = new DefineDescription(sSAL_NO_VTABLE, aEmpty);
+ aData[sREGISTRY_CALLTYPE] = new DefineDescription(sREGISTRY_CALLTYPE, aEmpty);
+
+ aData[sSAL_THROW] = new DefineDescription(sSAL_THROW, aParamsSAL_THROW, aDefSAL_THROW);
+ aData[sSAL_THROW_EXTERN_C] = new DefineDescription(sSAL_THROW_EXTERN_C, aEmpty, aEmpty);
+
+ aData[s__DEF_COMPIMPLHELPER_A]
+ = new DefineDescription( s__DEF_COMPIMPLHELPER_A, aCompImplHelperParams, aEmpty);
+ aData[s__DEF_COMPIMPLHELPER_B]
+ = new DefineDescription(s__DEF_COMPIMPLHELPER_B, aCompImplHelperParams, aEmpty);
+ aData[s__DEF_COMPIMPLHELPER]
+ = new DefineDescription(s__DEF_COMPIMPLHELPER, aCompImplHelperParams, aEmpty);
+
+ aData[s__DEF_IMPLHELPER_PRE]
+ = new DefineDescription(s__DEF_IMPLHELPER_PRE, aCompImplHelperParams, aEmpty);
+ aData[s__IFC_WRITEOFFSET]
+ = new DefineDescription(s__IFC_WRITEOFFSET, aCompImplHelperParams, aEmpty);
+ aData[s__DEF_IMPLHELPER_POST]
+ = new DefineDescription(s__DEF_IMPLHELPER_POST, aCompImplHelperParams, aEmpty);
+
+ aData[sSAL_EXCEPTION_DLLPUBLIC_EXPORT]
+ = new DefineDescription(sSAL_EXCEPTION_DLLPUBLIC_EXPORT, aEmpty);
+ aData[sSAL_EXCEPTION_DLLPRIVATE]
+ = new DefineDescription(sSAL_EXCEPTION_DLLPRIVATE, aEmpty);
+}
+
+Udk_MacroMap::~Udk_MacroMap()
+{
+ for ( Data::iterator it = aData.begin(); it != aData.end(); ++it )
+ {
+ delete (*it).second;
+ }
+}
+
+
+
+} // namespace cpp
+
+
+bool
+Local_LoadFile( CharacterSource & o_rTextBuffer,
+ const String & i_rFullFilePath )
+{
+ Cout() << "Parse " << i_rFullFilePath << " ..." << Endl();
+
+ csv::File aFile( i_rFullFilePath, csv::CFM_READ );
+ if (NOT aFile.open())
+ {
+ Cerr() << " could not be opened.\n" << Endl();
+ return false;
+ }
+ o_rTextBuffer.LoadText(aFile);
+ aFile.close();
+ return true;
+}
+
+
+
diff --git a/autodoc/source/parser/cpp/sdocdist.hxx b/autodoc/source/parser/cpp/sdocdist.hxx
new file mode 100644
index 000000000000..f8d87931a4df
--- /dev/null
+++ b/autodoc/source/parser/cpp/sdocdist.hxx
@@ -0,0 +1,158 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_CPP_SDOCDIST_HXX
+#define ADC_CPP_SDOCDIST_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include "cxt2ary.hxx"
+#include <ary/info/docstore.hxx>
+ // COMPONENTS
+ // PARAMETERS
+
+namespace cpp
+{
+
+using ary::Documentation;
+
+/** Implementation struct for cpp::ContextForAry.
+*/
+
+struct ContextForAry::S_DocuDistributor : public ary::info::DocuStore
+{
+ public:
+ S_DocuDistributor() : pCurRe(0) {}
+ ~S_DocuDistributor() {}
+
+ void Reset() { pCurRe = 0; pLastStoredDocu = 0; }
+
+ void SetCurrentlyStoredRe(
+ ary::cpp::CppEntity &
+ io_rRe );
+ void Event_LineBreak();
+
+ private:
+ // Interface ary::info::DocuStore
+ virtual void do_Store2CurFile(
+ DYN ary::doc::Node& let_drDocu );
+ virtual void do_Store2CurNamespace(
+ DYN ary::doc::Node& let_drDocu );
+
+ virtual void do_Store2ConnectedDeclaration(
+ DYN ary::doc::Node& let_drDocu );
+
+ virtual void do_Store2Glossary(
+ DYN ary::doc::Node& let_drDocu,
+ const String & i_sExplainedTerm );
+ virtual void do_Store2GlobalTexts(
+ DYN ary::doc::Node& let_drDocu,
+ ary::info::GlobalTextId
+ i_nId );
+ // DATA
+ ary::cpp::CppEntity *
+ pCurRe;
+ Dyn<ary::doc::Node> pLastStoredDocu;
+};
+
+
+// IMPLEMENTATION
+
+/* The implementation is in header, though not all inline, because this file
+ is included in cxt2ary.cxx only!
+*/
+
+
+void
+ContextForAry::
+S_DocuDistributor::SetCurrentlyStoredRe( ary::cpp::CppEntity & io_rRe )
+{
+ pCurRe = &io_rRe;
+ if ( pLastStoredDocu )
+ pCurRe->Set_Docu( *pLastStoredDocu.Release() );
+}
+
+inline void
+ContextForAry::
+S_DocuDistributor::Event_LineBreak()
+{
+ pCurRe = 0;
+}
+
+void
+ContextForAry::
+S_DocuDistributor::do_Store2CurFile( DYN ary::doc::Node & let_drDocu )
+{
+ // KORR_FUTURE
+ delete &let_drDocu;
+}
+
+void
+ContextForAry::
+S_DocuDistributor::do_Store2CurNamespace( DYN ary::doc::Node & let_drDocu )
+{
+ // KORR_FUTURE
+ delete &let_drDocu;
+}
+
+void
+ContextForAry::
+S_DocuDistributor::do_Store2ConnectedDeclaration( DYN ary::doc::Node & let_drDocu )
+{
+ if ( pCurRe != 0 )
+ pCurRe->Set_Docu(let_drDocu);
+ else
+ pLastStoredDocu = &let_drDocu;
+}
+
+void
+ContextForAry::
+S_DocuDistributor::do_Store2Glossary( DYN ary::doc::Node & let_drDocu,
+ const String & // i_sExplainedTerm
+ )
+{
+ // KORR_FUTURE
+ delete &let_drDocu;
+}
+
+void
+ContextForAry::
+S_DocuDistributor::do_Store2GlobalTexts( DYN ary::doc::Node & let_drDocu,
+ ary::info::GlobalTextId // i_nId
+ )
+{
+ // KORR_FUTURE
+ delete &let_drDocu;
+}
+
+
+
+
+} // namespace cpp
+#endif
diff --git a/autodoc/source/parser/cpp/sfscope.hxx b/autodoc/source/parser/cpp/sfscope.hxx
new file mode 100644
index 000000000000..1e7a70af009b
--- /dev/null
+++ b/autodoc/source/parser/cpp/sfscope.hxx
@@ -0,0 +1,69 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_CPP_SFSCOPE_HXX
+#define ADC_CPP_SFSCOPE_HXX
+
+// USED SERVICES
+#include "cxt2ary.hxx"
+
+
+
+
+namespace cpp
+{
+
+
+/** Implementation struct for cpp::ContextForAry.
+*/
+struct ContextForAry::S_FileScopeInfo
+{
+ ary::loc::File * pCurFile;
+ uintt nLineCount;
+ Dyn<StringVector> pCurTemplateParameters;
+
+ S_FileScopeInfo();
+};
+
+
+
+
+// IMPLEMENTATION
+inline
+ContextForAry::
+S_FileScopeInfo::S_FileScopeInfo()
+ : pCurFile(0),
+ nLineCount(0),
+ pCurTemplateParameters(0)
+{
+}
+
+
+
+
+} // namespace cpp
+#endif
diff --git a/autodoc/source/parser/cpp/sownstck.hxx b/autodoc/source/parser/cpp/sownstck.hxx
new file mode 100644
index 000000000000..32c3f9f40a42
--- /dev/null
+++ b/autodoc/source/parser/cpp/sownstck.hxx
@@ -0,0 +1,325 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_CPP_SOWNSTCK_HXX
+#define ADC_CPP_SOWNSTCK_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include "cxt2ary.hxx"
+ // COMPONENTS
+#include <ary/cpp/c_types4cpp.hxx>
+#include <estack.hxx>
+ // PARAMETERS
+#include <ary/cpp/c_namesp.hxx>
+#include <x_parse.hxx>
+
+
+namespace cpp
+{
+
+using ary::cpp::E_Protection;
+
+
+/** Implementation struct for cpp::ContextForAry.
+*/
+struct ContextForAry::S_OwnerStack
+{
+ public:
+ S_OwnerStack();
+ void SetGlobalNamespace(
+ ary::cpp::Namespace &
+ io_rGlobalNamespace );
+ ~S_OwnerStack();
+
+ void Reset();
+
+ void OpenNamespace(
+ ary::cpp::Namespace &
+ io_rOpenedNamespace );
+ void OpenExternC();
+ void OpenClass(
+ ary::cpp::Class & io_rOpenedClass );
+ void OpenEnum(
+ ary::cpp::Enum & io_rOpenedEnum );
+ void CloseBlock();
+ void CloseClass();
+ void CloseEnum();
+ void SetCurProtection(
+ ary::cpp::E_Protection
+ i_eProtection );
+ ary::cpp::Namespace &
+ CurNamespace() const;
+ ary::cpp::Class * CurClass() const;
+ ary::cpp::Enum * CurEnum() const;
+
+ Owner & CurOwner() const;
+ ary::cpp::E_Protection
+ CurProtection() const;
+ bool IsExternC() const { return nExternC > 0; }
+
+ private:
+ typedef std::pair< ary::cpp::Class*, E_Protection > ClassEnv;
+ typedef EStack< ary::cpp::Namespace* > Stack_Namespaces;
+ typedef EStack< ClassEnv > Stack_Classes;
+ typedef ary::cpp::InputContext::Owner Ifc_Owner;
+
+ void SetOwner_2CurNamespace();
+ void SetOwner_2CurClass();
+ void SetOwner_2None();
+
+ // DATA
+ Stack_Namespaces aStack_Namespaces;
+ Stack_Classes aStack_Classes;
+ ary::cpp::Enum * pCurEnum;
+ uintt nExternC; /// This is a number, for the case that extern "C" blocks are nested.
+
+ Dyn<Owner_Namespace>
+ pOwner_Namespace;
+ Dyn<Owner_Class> pOwner_Class;
+ Ifc_Owner * pOwner_Cur;
+};
+
+
+// IMPLEMENTATION
+
+/* The implementation is in header, though not inline, because this file is included
+ in cxt2ary.cxx only!
+*/
+
+inline ary::cpp::Namespace &
+ContextForAry::
+S_OwnerStack::CurNamespace() const
+{
+ csv_assert( aStack_Namespaces.size() > 0 );
+ return *aStack_Namespaces.top();
+}
+
+inline ary::cpp::Class *
+ContextForAry::
+S_OwnerStack::CurClass() const
+{
+ return aStack_Classes.size() > 0
+ ? aStack_Classes.top().first
+ : (ary::cpp::Class *) 0;
+}
+
+inline void
+ContextForAry::
+S_OwnerStack::SetOwner_2CurNamespace()
+{
+ csv_assert( aStack_Namespaces.size() > 0 );
+ pOwner_Cur = pOwner_Namespace.MutablePtr();
+ pOwner_Namespace->SetAnotherNamespace( CurNamespace() );
+}
+
+inline void
+ContextForAry::
+S_OwnerStack::SetOwner_2CurClass()
+{
+ csv_assert( aStack_Classes.size() > 0 );
+ pOwner_Cur = pOwner_Class.MutablePtr();
+ pOwner_Class->SetAnotherClass( *CurClass() );
+}
+
+ContextForAry::
+S_OwnerStack::S_OwnerStack()
+ : // aStack_Namespaces,
+ // aStack_Classes,
+ pCurEnum(0),
+ nExternC(0),
+ pOwner_Namespace(new Owner_Namespace),
+ pOwner_Class(new Owner_Class),
+ pOwner_Cur(0)
+{
+}
+
+void
+ContextForAry::
+S_OwnerStack::Reset()
+{
+ while ( aStack_Namespaces.top()->Owner().IsValid() )
+ aStack_Namespaces.pop();
+ while ( NOT aStack_Classes.empty() )
+ aStack_Classes.pop();
+ pCurEnum = 0;
+ nExternC = 0;
+ SetOwner_2CurNamespace();
+}
+
+inline void
+ContextForAry::
+S_OwnerStack::SetGlobalNamespace( ary::cpp::Namespace & io_rGlobalNamespace )
+{
+ csv_assert( aStack_Namespaces.size() == 0 );
+ aStack_Namespaces.push(&io_rGlobalNamespace);
+ SetOwner_2CurNamespace();
+}
+
+ContextForAry::
+S_OwnerStack::~S_OwnerStack()
+{
+}
+
+inline void
+ContextForAry::
+S_OwnerStack::OpenNamespace( ary::cpp::Namespace & io_rOpenedNamespace )
+{
+ csv_assert( aStack_Namespaces.size() > 0 OR io_rOpenedNamespace.Parent() == 0 );
+ aStack_Namespaces.push(&io_rOpenedNamespace);
+ SetOwner_2CurNamespace();
+}
+
+inline void
+ContextForAry::
+S_OwnerStack::OpenExternC()
+{
+ ++nExternC;
+// SetOwner_2None();
+}
+
+inline void
+ContextForAry::
+S_OwnerStack::SetCurProtection( ary::cpp::E_Protection i_eProtection )
+{
+ csv_assert( aStack_Classes.size() > 0 );
+ aStack_Classes.top().second = i_eProtection;
+}
+
+inline ary::cpp::Enum *
+ContextForAry::
+S_OwnerStack::CurEnum() const
+{
+ return pCurEnum;
+}
+
+
+inline ary::cpp::InputContext::Owner &
+ContextForAry::
+S_OwnerStack::CurOwner() const
+{
+ csv_assert( pOwner_Cur != 0 );
+ return *pOwner_Cur;
+}
+
+inline E_Protection
+ContextForAry::
+S_OwnerStack::CurProtection() const
+{
+ return aStack_Classes.size() > 0
+ ? aStack_Classes.top().second
+ : ary::cpp::PROTECT_global;
+}
+
+inline void
+ContextForAry::
+S_OwnerStack::SetOwner_2None()
+{
+ pOwner_Cur = 0;
+}
+
+void
+ContextForAry::
+S_OwnerStack::OpenClass( ary::cpp::Class & io_rOpenedClass )
+{
+ E_Protection eDefaultProtection
+ = io_rOpenedClass.ClassKey() == ary::cpp::CK_class
+ ? ary::cpp::PROTECT_private
+ : ary::cpp::PROTECT_public;
+ aStack_Classes.push( ClassEnv(&io_rOpenedClass, eDefaultProtection) );
+ SetOwner_2CurClass();
+}
+
+inline void
+ContextForAry::
+S_OwnerStack::OpenEnum( ary::cpp::Enum & io_rOpenedEnum )
+{
+ csv_assert( pCurEnum == 0 );
+ pCurEnum = &io_rOpenedEnum;
+ SetOwner_2None();
+}
+
+void
+ContextForAry::
+S_OwnerStack::CloseBlock()
+{
+ if (nExternC > 0)
+ {
+ --nExternC;
+ }
+ else
+ {
+ // csv_assert( aStack_Classes.size() == 0 );
+ if ( aStack_Classes.size() > 0 )
+ throw X_Parser(X_Parser::x_UnspecifiedSyntaxError, "", String::Null_(), 0);
+
+ csv_assert( pCurEnum == 0 );
+ aStack_Namespaces.pop();
+
+ // csv_assert( aStack_Namespaces.size() > 0 );
+ if( aStack_Namespaces.size() == 0 )
+ throw X_Parser(X_Parser::x_UnspecifiedSyntaxError, "", String::Null_(), 0);
+
+ }
+ SetOwner_2CurNamespace();
+}
+
+void
+ContextForAry::
+S_OwnerStack::CloseClass()
+{
+ // csv_assert( aStack_Classes.size() > 0 );
+ if ( aStack_Classes.size() == 0 )
+ throw X_Parser(X_Parser::x_UnspecifiedSyntaxError, "", String::Null_(), 0);
+
+ aStack_Classes.pop();
+ if ( aStack_Classes.size() > 0 )
+ SetOwner_2CurClass();
+ else
+ SetOwner_2CurNamespace();
+}
+
+void
+ContextForAry::
+S_OwnerStack::CloseEnum()
+{
+ csv_assert( pCurEnum != 0 );
+ pCurEnum = 0;
+ if ( aStack_Classes.size() > 0 )
+ SetOwner_2CurClass();
+ else
+ SetOwner_2CurNamespace();
+}
+
+
+} // namespace cpp
+
+
+#endif
+
diff --git a/autodoc/source/parser/cpp/srecover.hxx b/autodoc/source/parser/cpp/srecover.hxx
new file mode 100644
index 000000000000..e497404c08e9
--- /dev/null
+++ b/autodoc/source/parser/cpp/srecover.hxx
@@ -0,0 +1,132 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_CPP_SRECOVER_HXX
+#define ADC_CPP_SRECOVER_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include "cxt2ary.hxx"
+#include <ary/info/docstore.hxx>
+ // COMPONENTS
+ // PARAMETERS
+
+namespace cpp
+{
+
+/** Implementation struct for cpp::ContextForAry.
+*/
+struct ContextForAry::S_RecoveryGuard
+{
+ public:
+ S_RecoveryGuard();
+ ~S_RecoveryGuard();
+
+ void Reset() { bIsWithinRecovery = false; nBlockBracketsCounter = 0; }
+
+ void StartWaitingFor_Recovery();
+
+ void Hdl_SwBracketOpen();
+ void Hdl_SwBracketClose();
+ void Hdl_Semicolon();
+
+ bool IsWithinRecovery() const;
+
+ private:
+ // DATA
+ bool bIsWithinRecovery;
+ intt nBlockBracketsCounter;
+};
+
+
+
+// IMPLEMENTATION
+
+/* The implementation is in header, though not all inline, because this file
+ is included in cxt2ary.cxx only!
+*/
+
+ContextForAry::
+S_RecoveryGuard::S_RecoveryGuard()
+ : bIsWithinRecovery(false),
+ nBlockBracketsCounter(0)
+{
+}
+
+ContextForAry::
+S_RecoveryGuard::~S_RecoveryGuard()
+{
+}
+
+inline void
+ContextForAry::
+S_RecoveryGuard::StartWaitingFor_Recovery()
+{
+ bIsWithinRecovery = true;
+ nBlockBracketsCounter = 0;
+}
+
+void
+ContextForAry::
+S_RecoveryGuard::Hdl_SwBracketOpen()
+{
+ if ( bIsWithinRecovery )
+ ++nBlockBracketsCounter;
+}
+
+void
+ContextForAry::
+S_RecoveryGuard::Hdl_SwBracketClose()
+{
+ if ( bIsWithinRecovery )
+ --nBlockBracketsCounter;
+}
+
+inline void
+ContextForAry::
+S_RecoveryGuard::Hdl_Semicolon()
+{
+ if (bIsWithinRecovery AND nBlockBracketsCounter == 0)
+ bIsWithinRecovery = false;
+}
+
+inline bool
+ContextForAry::
+S_RecoveryGuard::IsWithinRecovery() const
+{
+ return bIsWithinRecovery;
+}
+
+
+
+} // namespace cpp
+
+
+#endif
+
diff --git a/autodoc/source/parser/cpp/tkp_cpp.cxx b/autodoc/source/parser/cpp/tkp_cpp.cxx
new file mode 100644
index 000000000000..fa3b456880e0
--- /dev/null
+++ b/autodoc/source/parser/cpp/tkp_cpp.cxx
@@ -0,0 +1,92 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "tkp_cpp.hxx"
+
+// NOT FULLY DECLARED SERVICES
+#include "cx_c_std.hxx"
+#include "c_dealer.hxx"
+
+
+namespace cpp {
+
+
+
+
+TokenParser_Cpp::TokenParser_Cpp( DYN autodoc::TkpDocuContext & let_drDocuContext )
+ : pBaseContext( new Context_CppStd( let_drDocuContext ) ),
+ pCurContext(0),
+ pDealer(0),
+ pCharacterSource(0)
+{
+ SetStartContext();
+}
+
+TokenParser_Cpp::~TokenParser_Cpp()
+{
+}
+
+void
+TokenParser_Cpp::AssignPartners( CharacterSource & io_rCharacterSource,
+ cpp::Distributor & o_rDealer )
+{
+ pDealer = &o_rDealer;
+ pBaseContext->AssignDealer(o_rDealer);
+ pCharacterSource = &io_rCharacterSource;
+}
+
+void
+TokenParser_Cpp::StartNewFile( const csv::ploc::Path & i_file )
+{
+ csv_assert(pDealer != 0);
+ pDealer->StartNewFile(i_file);
+
+ csv_assert(pCharacterSource != 0);
+ Start(*pCharacterSource);
+}
+
+void
+TokenParser_Cpp::SetStartContext()
+{
+ pCurContext = pBaseContext.Ptr();
+}
+
+void
+TokenParser_Cpp::SetCurrentContext( TkpContext & io_rContext )
+{
+ pCurContext = &io_rContext;
+}
+
+TkpContext &
+TokenParser_Cpp::CurrentContext()
+{
+ return *pCurContext;
+}
+
+} // namespace cpp
+
diff --git a/autodoc/source/parser/cpp/tkp_cpp.hxx b/autodoc/source/parser/cpp/tkp_cpp.hxx
new file mode 100644
index 000000000000..36405ebadc49
--- /dev/null
+++ b/autodoc/source/parser/cpp/tkp_cpp.hxx
@@ -0,0 +1,99 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_TKP_CPP_HXX
+#define ADC_TKP_CPP_HXX
+
+// USED SERVICES
+ // BASE CLASSES
+#include <tokens/tkp.hxx>
+ // COMPONENTS
+ // PARAMETRS
+
+namespace autodoc
+{
+ class TkpDocuContext;
+}
+
+namespace csv
+{
+ namespace ploc
+ {
+ class Path;
+ class DirectoryChain;
+ }
+}
+
+
+namespace cpp {
+
+class Context_CppStd;
+class DefineDescription;
+class Distributor;
+
+
+/** This is a TokenParser which is able to parse tokens from
+ C++ source code.
+*/
+class TokenParser_Cpp : public TokenParser
+{
+ public:
+ typedef std::map< String, DefineDescription* > MacroMap;
+
+ // LIFECYCLE
+ TokenParser_Cpp(
+ DYN autodoc::TkpDocuContext &
+ let_drDocuContext );
+ virtual ~TokenParser_Cpp();
+
+ // OPERATIONS
+ void AssignPartners(
+ CharacterSource & io_rCharacterSource,
+ cpp::Distributor & o_rDealer );
+ void StartNewFile(
+ const csv::ploc::Path &
+ i_file );
+ private:
+ virtual void SetStartContext();
+ virtual void SetCurrentContext(
+ TkpContext & io_rContext );
+ virtual TkpContext &
+ CurrentContext();
+ // DATA
+ Dyn<Context_CppStd> pBaseContext;
+ TkpContext * pCurContext;
+ Distributor * pDealer;
+ CharacterSource * pCharacterSource;
+};
+
+
+} // namespace cpp
+
+
+#endif
+
+
diff --git a/autodoc/source/parser/cpp/tokintpr.hxx b/autodoc/source/parser/cpp/tokintpr.hxx
new file mode 100644
index 000000000000..898339a48021
--- /dev/null
+++ b/autodoc/source/parser/cpp/tokintpr.hxx
@@ -0,0 +1,117 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_CPP_TOKINTPR_HXX
+#define ADC_CPP_TOKINTPR_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <all_toks.hxx>
+ // COMPONENTS
+ // PARAMETERS
+
+namespace cpp {
+
+
+
+#define DECL_TOK_HANDLER(token) \
+ void Hdl_##token( \
+ const Tok_##token & i_rTok ) { Call_Handler(i_rTok); }
+
+class TokenInterpreter
+{
+ public:
+ virtual ~TokenInterpreter() {}
+
+ DECL_TOK_HANDLER(Identifier)
+ DECL_TOK_HANDLER(Operator)
+ DECL_TOK_HANDLER(operator)
+ DECL_TOK_HANDLER(class)
+ DECL_TOK_HANDLER(struct)
+ DECL_TOK_HANDLER(union)
+ DECL_TOK_HANDLER(enum)
+ DECL_TOK_HANDLER(typedef)
+ DECL_TOK_HANDLER(public)
+ DECL_TOK_HANDLER(protected)
+ DECL_TOK_HANDLER(private)
+ DECL_TOK_HANDLER(template)
+ DECL_TOK_HANDLER(virtual)
+ DECL_TOK_HANDLER(friend)
+ DECL_TOK_HANDLER(Tilde)
+ DECL_TOK_HANDLER(const)
+ DECL_TOK_HANDLER(volatile)
+ DECL_TOK_HANDLER(extern)
+ DECL_TOK_HANDLER(static)
+ DECL_TOK_HANDLER(mutable)
+ DECL_TOK_HANDLER(register)
+ DECL_TOK_HANDLER(inline)
+ DECL_TOK_HANDLER(explicit)
+ DECL_TOK_HANDLER(namespace)
+ DECL_TOK_HANDLER(using)
+ DECL_TOK_HANDLER(throw)
+ DECL_TOK_HANDLER(SwBracket_Left)
+ DECL_TOK_HANDLER(SwBracket_Right)
+ DECL_TOK_HANDLER(ArrayBracket_Left)
+ DECL_TOK_HANDLER(ArrayBracket_Right)
+ DECL_TOK_HANDLER(Bracket_Left)
+ DECL_TOK_HANDLER(Bracket_Right)
+ DECL_TOK_HANDLER(DoubleColon)
+ DECL_TOK_HANDLER(Semicolon)
+ DECL_TOK_HANDLER(Comma)
+ DECL_TOK_HANDLER(Colon)
+ DECL_TOK_HANDLER(Assign)
+ DECL_TOK_HANDLER(Less)
+ DECL_TOK_HANDLER(Greater)
+ DECL_TOK_HANDLER(Asterix)
+ DECL_TOK_HANDLER(AmpersAnd)
+ DECL_TOK_HANDLER(Ellipse)
+ DECL_TOK_HANDLER(typename)
+ DECL_TOK_HANDLER(DefineName)
+ DECL_TOK_HANDLER(MacroName)
+ DECL_TOK_HANDLER(MacroParameter)
+ DECL_TOK_HANDLER(PreProDefinition)
+ DECL_TOK_HANDLER(BuiltInType)
+ DECL_TOK_HANDLER(TypeSpecializer)
+ DECL_TOK_HANDLER(Constant)
+
+ protected:
+ virtual void Call_Handler(
+ const cpp::Token & i_rTok ) = 0;
+};
+
+#undef DECL_TOK_HANDLER
+
+
+// IMPLEMENTATION
+
+
+} // namespace cpp
+
+
+#endif
diff --git a/autodoc/source/parser/inc/adoc/a_rdocu.hxx b/autodoc/source/parser/inc/adoc/a_rdocu.hxx
new file mode 100644
index 000000000000..a58b80da1ec9
--- /dev/null
+++ b/autodoc/source/parser/inc/adoc/a_rdocu.hxx
@@ -0,0 +1,71 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_ADOC_A_RDOCU_HXX
+#define ADC_ADOC_A_RDOCU_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+ // COMPONENTS
+ // PARAMETERS
+
+class DocuDealer;
+
+
+
+namespace adoc
+{
+
+class Token;
+class Adoc_PE;
+
+class DocuExplorer
+
+{
+ public:
+ DocuExplorer();
+ ~DocuExplorer();
+ void StartNewFile(
+ DocuDealer & o_rDocuDistributor );
+
+ void Process_Token(
+ DYN adoc::Token & let_drToken );
+ private:
+ DocuDealer * pDocuDistributor;
+ Dyn<Adoc_PE> pPE;
+ bool bIsPassedFirstDocu;
+};
+
+
+} // namespace adoc
+
+
+#endif
+
+
diff --git a/autodoc/source/parser/inc/adoc/adoc_tok.hxx b/autodoc/source/parser/inc/adoc/adoc_tok.hxx
new file mode 100644
index 000000000000..dc1d372d99b3
--- /dev/null
+++ b/autodoc/source/parser/inc/adoc/adoc_tok.hxx
@@ -0,0 +1,62 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_ADOC_ADOC_TOK_HXX
+#define ADC_ADOC_ADOC_TOK_HXX
+
+// USED SERVICES
+ // BASE CLASSES
+#include <tokens/token.hxx>
+ // COMPONENTS
+ // PARAMETERS
+
+
+namespace adoc {
+
+
+class TokenInterpreter;
+
+
+class Token : public TextToken
+{
+ public:
+ // LIFECYCLE
+ virtual ~Token() {}
+
+ // OPERATIONS
+ virtual void DealOut(
+ ::TokenDealer & o_rDealer );
+ virtual void Trigger(
+ TokenInterpreter & io_rInterpreter ) const = 0;
+};
+
+
+} // namespace adoc
+
+#endif
+
+
diff --git a/autodoc/source/parser/inc/adoc/atokdeal.hxx b/autodoc/source/parser/inc/adoc/atokdeal.hxx
new file mode 100644
index 000000000000..b3e98dba2d0d
--- /dev/null
+++ b/autodoc/source/parser/inc/adoc/atokdeal.hxx
@@ -0,0 +1,60 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_ADOC_ATOKDEAL_HXX
+#define ADC_ADOC_ATOKDEAL_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <tokens/tokdeal.hxx>
+ // COMPONENTS
+ // PARAMETERS
+
+
+
+namespace adoc
+{
+
+class Token;
+
+class TokenDealer : virtual public ::TokenDealer
+{
+ public:
+
+ virtual void Deal_AdcDocu(
+ adoc::Token & let_drToken ) = 0;
+};
+
+
+} // namespace adoc
+
+
+
+#endif
+
diff --git a/autodoc/source/parser/inc/adoc/cx_a_std.hxx b/autodoc/source/parser/inc/adoc/cx_a_std.hxx
new file mode 100644
index 000000000000..b0f9bb0ce881
--- /dev/null
+++ b/autodoc/source/parser/inc/adoc/cx_a_std.hxx
@@ -0,0 +1,105 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_ADOC_CX_A_STD_HXX
+#define ADC_ADOC_CX_A_STD_HXX
+
+// USED SERVICES
+ // BASE CLASSES
+#include <tokens/tkpcontx.hxx>
+ // COMPONENTS
+#include <tokens/tkpstama.hxx>
+ // PARAMETERS
+
+class TextToken;
+
+
+namespace adoc {
+
+class Cx_LineStart;
+class Cx_CheckStar;
+class Cx_AtTagCompletion;
+
+
+/**
+@descr
+*/
+class Context_AdocStd : public autodoc::TkpDocuContext,
+ private StateMachineContext
+{
+ public:
+ // LIFECYCLE
+ Context_AdocStd();
+ virtual void SetParentContext(
+ TkpContext & io_rParentContext,
+ const char * i_sMultiLineEndToken );
+ ~Context_AdocStd();
+
+ // OPERATIONS
+ virtual void AssignDealer(
+ TokenDealer & o_rDealer );
+
+ virtual void ReadCharChain(
+ CharacterSource & io_rText );
+ virtual bool PassNewToken();
+ virtual void SetMode_IsMultiLine(
+ bool i_bTrue );
+ // INQUIRY
+ virtual TkpContext &
+ FollowUpContext();
+ private:
+ // SERVICE FUNCTIONS
+ virtual void PerformStatusFunction(
+ uintt i_nStatusSignal,
+ F_CRTOK i_fTokenCreateFunction,
+ CharacterSource & io_rText );
+
+ void SetupStateMachine();
+
+ // DATA
+ StateMachine aStateMachine;
+ TokenDealer * pDealer;
+
+ // Contexts
+ TkpContext * pParentContext;
+ TkpContext * pFollowUpContext;
+ Dyn<Cx_LineStart> pCx_LineStart;
+ Dyn<Cx_CheckStar> pCx_CheckStar;
+ Dyn<Cx_AtTagCompletion>
+ pCx_AtTagCompletion;
+
+ // Temporary data, used during ReadCharChain()
+ Dyn<TextToken> pNewToken;
+ bool bIsMultiline;
+};
+
+
+} // namespace adoc
+
+
+#endif
+
diff --git a/autodoc/source/parser/inc/adoc/cx_a_sub.hxx b/autodoc/source/parser/inc/adoc/cx_a_sub.hxx
new file mode 100644
index 000000000000..e447ce416c65
--- /dev/null
+++ b/autodoc/source/parser/inc/adoc/cx_a_sub.hxx
@@ -0,0 +1,146 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_ADOC_CX_A_SUB_HXX
+#define ADC_ADOC_CX_A_SUB_HXX
+
+// USED SERVICES
+ // BASE CLASSES
+#include <tokens/tkpcontx.hxx>
+ // COMPONENTS
+#include <tokens/tkpstama.hxx>
+ // PARAMETERS
+#include <tokens/token.hxx>
+
+
+namespace adoc {
+
+
+
+
+class Cx_LineStart : public TkpContext
+{
+ public:
+ Cx_LineStart(
+ TkpContext & i_rFollowUpContext );
+
+ virtual void ReadCharChain(
+ CharacterSource & io_rText );
+ virtual bool PassNewToken();
+ virtual TkpContext &
+ FollowUpContext();
+
+ void SetCurToken(
+ TextToken::F_CRTOK i_fTokenCreateFunction )
+ { fCur_TokenCreateFunction = i_fTokenCreateFunction; }
+ void AssignDealer(
+ TokenDealer & o_rDealer )
+ { pDealer = &o_rDealer; }
+ private:
+ // DATA
+ TokenDealer * pDealer;
+ TkpContext * pFollowUpContext;
+
+ Dyn<TextToken> pNewToken;
+
+ TextToken::F_CRTOK fCur_TokenCreateFunction;
+};
+
+
+/**
+@descr
+*/
+
+class Cx_CheckStar : public TkpContext
+{
+ public:
+ // LIFECYCLE
+ Cx_CheckStar(
+ TkpContext & i_rFollowUpContext );
+ void Set_End_FollowUpContext(
+ TkpContext & i_rEnd_FollowUpContext )
+ { pEnd_FollowUpContext = &i_rEnd_FollowUpContext; }
+
+ virtual void ReadCharChain(
+ CharacterSource & io_rText );
+ virtual bool PassNewToken();
+
+ void SetCanBeEnd(
+ bool i_bCanBeEnd )
+ { bCanBeEnd = i_bCanBeEnd; }
+ virtual TkpContext &
+ FollowUpContext();
+ void AssignDealer(
+ TokenDealer & o_rDealer )
+ { pDealer = &o_rDealer; }
+ private:
+ // DATA
+ TokenDealer * pDealer;
+ TkpContext * pFollowUpContext;
+ TkpContext * pEnd_FollowUpContext;
+
+ Dyn<TextToken> pNewToken;
+
+ bool bCanBeEnd;
+ bool bEndTokenFound;
+};
+
+
+class Cx_AtTagCompletion : public TkpContext
+{
+ public:
+ Cx_AtTagCompletion(
+ TkpContext & i_rFollowUpContext );
+
+ virtual void ReadCharChain(
+ CharacterSource & io_rText );
+ virtual bool PassNewToken();
+ virtual TkpContext &
+ FollowUpContext();
+
+ void SetCurToken(
+ TextToken::F_CRTOK i_fTokenCreateFunction )
+ { fCur_TokenCreateFunction = i_fTokenCreateFunction; }
+ void AssignDealer(
+ TokenDealer & o_rDealer )
+ { pDealer = &o_rDealer; }
+ private:
+ // DATA
+ TokenDealer * pDealer;
+ TkpContext * pFollowUpContext;
+
+ Dyn<TextToken> pNewToken;
+
+ TextToken::F_CRTOK fCur_TokenCreateFunction;
+};
+
+
+} // namespace adoc
+
+
+#endif
+
diff --git a/autodoc/source/parser/inc/adoc/docu_pe.hxx b/autodoc/source/parser/inc/adoc/docu_pe.hxx
new file mode 100644
index 000000000000..166eeb02fd24
--- /dev/null
+++ b/autodoc/source/parser/inc/adoc/docu_pe.hxx
@@ -0,0 +1,192 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_DOCU_PE_HXX
+#define ADC_DOCU_PE_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <adoc/tokintpr.hxx>
+ // COMPONENTS
+ // PARAMETERS
+
+namespace ary
+{
+namespace doc
+{
+ class OldCppDocu;
+}
+namespace info
+{
+ class AtTag;
+}
+}
+
+
+
+namespace adoc
+{
+
+
+class Adoc_PE : public TokenInterpreter
+{
+ public:
+ Adoc_PE();
+ ~Adoc_PE();
+
+ virtual void Hdl_at_std(
+ const Tok_at_std & i_rTok );
+ virtual void Hdl_at_base(
+ const Tok_at_base & i_rTok );
+ virtual void Hdl_at_exception(
+ const Tok_at_exception &
+ i_rTok );
+ virtual void Hdl_at_impl(
+ const Tok_at_impl & i_rTok );
+ virtual void Hdl_at_key(
+ const Tok_at_key & i_rTok );
+ virtual void Hdl_at_param(
+ const Tok_at_param &
+ i_rTok );
+ virtual void Hdl_at_see(
+ const Tok_at_see & i_rTok );
+ virtual void Hdl_at_template(
+ const Tok_at_template &
+ i_rTok );
+ virtual void Hdl_at_interface(
+ const Tok_at_interface &
+ i_rTok );
+ virtual void Hdl_at_internal(
+ const Tok_at_internal &
+ i_rTok );
+ virtual void Hdl_at_obsolete(
+ const Tok_at_obsolete &
+ i_rTok );
+ virtual void Hdl_at_module(
+ const Tok_at_module &
+ i_rTok );
+ virtual void Hdl_at_file(
+ const Tok_at_file & i_rTok );
+ virtual void Hdl_at_gloss(
+ const Tok_at_gloss &
+ i_rTok );
+ virtual void Hdl_at_global(
+ const Tok_at_global &
+ i_rTok );
+ virtual void Hdl_at_include(
+ const Tok_at_include &
+ i_rTok );
+ virtual void Hdl_at_label(
+ const Tok_at_label &
+ i_rTok );
+ virtual void Hdl_at_since(
+ const Tok_at_since &
+ i_rTok );
+ virtual void Hdl_at_HTML(
+ const Tok_at_HTML &
+ i_rTok );
+ virtual void Hdl_at_NOHTML(
+ const Tok_at_NOHTML &
+ i_rTok );
+
+ virtual void Hdl_DocWord(
+ const Tok_DocWord & i_rTok );
+
+ virtual void Hdl_Whitespace(
+ const Tok_Whitespace &
+ i_rTok );
+ virtual void Hdl_LineStart(
+ const Tok_LineStart &
+ i_rTok );
+ virtual void Hdl_Eol(
+ const Tok_Eol & i_rTok );
+
+ virtual void Hdl_EoDocu(
+ const Tok_EoDocu & i_rTok );
+
+
+ DYN ary::doc::OldCppDocu *
+ ReleaseJustParsedDocu();
+
+ bool IsComplete() const;
+
+ private:
+ void InstallAtTag(
+ DYN ary::info::AtTag *
+ let_dpTag,
+ bool i_bImplicit = false ); /// True for implicit @short and @descr.
+ ary::doc::OldCppDocu &
+ CurDocu();
+ ary::info::AtTag & CurAtTag();
+ bool UsesHtmlInDocuText();
+
+ void RenameCurShortTag();
+ void FinishCurShortTag();
+
+
+ // DATA
+ enum E_TagState
+ {
+ ts_new,
+ ts_std
+ };
+ enum E_DocuState
+ {
+ ds_wait_for_short = 0,
+ ds_in_short,
+ ds_1newline_after_short,
+ ds_in_descr,
+ ds_std
+ };
+
+ Dyn<ary::doc::OldCppDocu>
+ pCurDocu;
+ ary::info::AtTag * pCurAtTag;
+ uintt nLineCountInDocu;
+ UINT8 nCurSpecialMeaningTokens;
+ UINT8 nCurSubtractFromLineStart;
+ E_TagState eCurTagState;
+ E_DocuState eDocuState;
+ bool bIsComplete;
+ bool bUsesHtmlInDocuText;
+};
+
+
+// IMPLEMENTATION
+inline bool
+Adoc_PE::IsComplete() const
+{
+ return bIsComplete;
+}
+
+
+
+
+} // namespace adoc
+#endif
diff --git a/autodoc/source/parser/inc/adoc/prs_adoc.hxx b/autodoc/source/parser/inc/adoc/prs_adoc.hxx
new file mode 100644
index 000000000000..ac4758be371f
--- /dev/null
+++ b/autodoc/source/parser/inc/adoc/prs_adoc.hxx
@@ -0,0 +1,55 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_ADOC_PRS_ADOC_HXX
+#define ADC_ADOC_PRS_ADOC_HXX
+
+
+
+#include <autodoc/prs_docu.hxx>
+
+namespace adoc
+{
+
+
+class DocuParser_AutodocStyle : public autodoc::DocumentationParser_Ifc
+{
+ public:
+ DocuParser_AutodocStyle();
+ virtual ~DocuParser_AutodocStyle();
+
+ virtual DYN autodoc::TkpDocuContext *
+ Create_DocuContext() const;
+};
+
+
+
+} // namespace adoc
+
+
+#endif
+
diff --git a/autodoc/source/parser/inc/adoc/tk_attag.hxx b/autodoc/source/parser/inc/adoc/tk_attag.hxx
new file mode 100644
index 000000000000..f5f87a4c21cc
--- /dev/null
+++ b/autodoc/source/parser/inc/adoc/tk_attag.hxx
@@ -0,0 +1,98 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_ADOC_TK_ATTAG_HXX
+#define ADC_ADOC_TK_ATTAG_HXX
+
+// USED SERVICES
+ // BASE CLASSES
+#include <adoc/adoc_tok.hxx>
+ // COMPONENTS
+ // PARAMETERS
+#include <ary/info/inftypes.hxx>
+
+namespace adoc {
+
+typedef ary::info::E_AtTagId E_AtTagId;
+
+
+class Tok_at_std : public Token
+{
+ public:
+ Tok_at_std(
+ E_AtTagId i_nId )
+ : eId(i_nId) {}
+ virtual void Trigger(
+ TokenInterpreter & io_rInterpreter ) const;
+ virtual const char *
+ Text() const;
+ E_AtTagId Id() const { return eId; }
+
+ private:
+ E_AtTagId eId;
+};
+
+
+#define DECL_TOKEN_CLASS(name) \
+class Tok_##name : public Token \
+{ public: \
+ virtual void Trigger( \
+ TokenInterpreter & io_rInterpreter ) const; \
+ virtual const char * \
+ Text() const; \
+}
+
+
+DECL_TOKEN_CLASS(at_base);
+DECL_TOKEN_CLASS(at_exception);
+DECL_TOKEN_CLASS(at_impl);
+DECL_TOKEN_CLASS(at_key);
+DECL_TOKEN_CLASS(at_param);
+DECL_TOKEN_CLASS(at_see);
+DECL_TOKEN_CLASS(at_template);
+DECL_TOKEN_CLASS(at_interface);
+DECL_TOKEN_CLASS(at_internal);
+DECL_TOKEN_CLASS(at_obsolete);
+DECL_TOKEN_CLASS(at_module);
+DECL_TOKEN_CLASS(at_file);
+DECL_TOKEN_CLASS(at_gloss);
+DECL_TOKEN_CLASS(at_global);
+DECL_TOKEN_CLASS(at_include);
+DECL_TOKEN_CLASS(at_label);
+DECL_TOKEN_CLASS(at_HTML);
+DECL_TOKEN_CLASS(at_NOHTML);
+DECL_TOKEN_CLASS(at_since);
+
+
+#undef DECL_TOKEN_CLASS
+
+
+
+} // namespace adoc
+
+#endif
+
diff --git a/autodoc/source/parser/inc/adoc/tk_docw.hxx b/autodoc/source/parser/inc/adoc/tk_docw.hxx
new file mode 100644
index 000000000000..dc20a63a4332
--- /dev/null
+++ b/autodoc/source/parser/inc/adoc/tk_docw.hxx
@@ -0,0 +1,117 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_ADOC_TK_DOCW_HXX
+#define ADC_ADOC_TK_DOCW_HXX
+
+// USED SERVICES
+ // BASE CLASSES
+#include <adoc/adoc_tok.hxx>
+ // COMPONENTS
+ // PARAMETERS
+
+namespace adoc {
+
+
+class Tok_DocWord : public Token
+{
+ public:
+ // Spring and Fall
+ Tok_DocWord(
+ const char * i_sText )
+ : sText(i_sText) {}
+ // OPERATIONS
+ virtual void Trigger(
+ TokenInterpreter & io_rInterpreter ) const;
+ // INQUIRY
+ virtual const char* Text() const;
+ uintt Length() const { return sText.length(); }
+
+ private:
+ // DATA
+ String sText;
+};
+
+class Tok_Whitespace : public Token
+{
+ public:
+ // Spring and Fall
+ Tok_Whitespace(
+ UINT8 i_nSize )
+ : nSize(i_nSize) {}
+ // OPERATIONS
+ virtual void Trigger(
+ TokenInterpreter & io_rInterpreter ) const;
+ // INQUIRY
+ virtual const char* Text() const;
+ UINT8 Size() const { return nSize; }
+
+ private:
+ // DATA
+ UINT8 nSize;
+};
+
+class Tok_LineStart : public Token
+{
+ public:
+ // Spring and Fall
+ Tok_LineStart(
+ UINT8 i_nSize )
+ : nSize(i_nSize) {}
+ // OPERATIONS
+ virtual void Trigger(
+ TokenInterpreter & io_rInterpreter ) const;
+ // INQUIRY
+ virtual const char* Text() const;
+ UINT8 Size() const { return nSize; }
+
+ private:
+ // DATA
+ UINT8 nSize;
+};
+
+class Tok_Eol : public Token
+{ public:
+ virtual void Trigger(
+ TokenInterpreter & io_rInterpreter ) const;
+ virtual const char *
+ Text() const;
+};
+
+class Tok_EoDocu : public Token
+{ public:
+ virtual void Trigger(
+ TokenInterpreter & io_rInterpreter ) const;
+ virtual const char *
+ Text() const;
+};
+
+
+} // namespace adoc
+
+#endif
+
diff --git a/autodoc/source/parser/inc/adoc/tokintpr.hxx b/autodoc/source/parser/inc/adoc/tokintpr.hxx
new file mode 100644
index 000000000000..6c2ff2bc0204
--- /dev/null
+++ b/autodoc/source/parser/inc/adoc/tokintpr.hxx
@@ -0,0 +1,117 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_ADOC_TOKINTPR_HXX
+#define ADC_ADOC_TOKINTPR_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+ // COMPONENTS
+ // PARAMETERS
+
+namespace adoc {
+
+
+class Tok_at_std;
+class Tok_at_base;
+class Tok_at_exception;
+class Tok_at_impl;
+class Tok_at_key;
+class Tok_at_param;
+class Tok_at_see;
+class Tok_at_template;
+class Tok_at_interface;
+class Tok_at_internal;
+class Tok_at_obsolete;
+class Tok_at_module;
+class Tok_at_file;
+class Tok_at_gloss;
+class Tok_at_global;
+class Tok_at_include;
+class Tok_at_label;
+class Tok_at_since;
+class Tok_at_HTML; // Sets default to: Use HTML in DocuText
+class Tok_at_NOHTML; // Sets default to: Don't use HTML in DocuText
+
+class Tok_DocWord;
+class Tok_LineStart;
+class Tok_Whitespace;
+class Tok_Eol;
+class Tok_EoDocu;
+
+
+#define DECL_TOK_HANDLER(token) \
+ virtual void Hdl_##token( \
+ const Tok_##token & i_rTok ) = 0
+
+
+
+class TokenInterpreter
+{
+ public:
+ virtual ~TokenInterpreter() {}
+
+ DECL_TOK_HANDLER(at_std);
+ DECL_TOK_HANDLER(at_base);
+ DECL_TOK_HANDLER(at_exception);
+ DECL_TOK_HANDLER(at_impl);
+ DECL_TOK_HANDLER(at_key);
+ DECL_TOK_HANDLER(at_param);
+ DECL_TOK_HANDLER(at_see);
+ DECL_TOK_HANDLER(at_template);
+ DECL_TOK_HANDLER(at_interface);
+ DECL_TOK_HANDLER(at_internal);
+ DECL_TOK_HANDLER(at_obsolete);
+ DECL_TOK_HANDLER(at_module);
+ DECL_TOK_HANDLER(at_file);
+ DECL_TOK_HANDLER(at_gloss);
+ DECL_TOK_HANDLER(at_global);
+ DECL_TOK_HANDLER(at_include);
+ DECL_TOK_HANDLER(at_label);
+ DECL_TOK_HANDLER(at_since);
+ DECL_TOK_HANDLER(at_HTML);
+ DECL_TOK_HANDLER(at_NOHTML);
+ DECL_TOK_HANDLER(DocWord);
+ DECL_TOK_HANDLER(Whitespace);
+ DECL_TOK_HANDLER(LineStart);
+ DECL_TOK_HANDLER(Eol);
+ DECL_TOK_HANDLER(EoDocu);
+};
+
+#undef DECL_TOK_HANDLER
+
+
+// IMPLEMENTATION
+
+
+} // namespace adoc
+
+
+#endif
+
diff --git a/autodoc/source/parser/inc/cpp/ctokdeal.hxx b/autodoc/source/parser/inc/cpp/ctokdeal.hxx
new file mode 100644
index 000000000000..676bb8b40240
--- /dev/null
+++ b/autodoc/source/parser/inc/cpp/ctokdeal.hxx
@@ -0,0 +1,74 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_CPP_CTOKDEAL_HXX
+#define ADC_CPP_CTOKDEAL_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <tokens/tokdeal.hxx>
+ // COMPONENTS
+ // PARAMETERS
+
+
+namespace cpp
+{
+
+class Token;
+class Tok_UnblockMacro;
+
+
+class TokenDealer : virtual public ::TokenDealer
+{
+ public:
+
+ virtual void Deal_CppCode(
+ cpp::Token & let_drToken ) = 0;
+
+ /** This is to be used only by the internal macro expander
+ ( ::cpp::PreProcessor ).
+ These tokens are inserted into the source text temporary to make clear,
+ where a specific macro replacement ends and therefore the macro's name
+ becomes valid again.
+
+ @see ::cpp::Tok_UnblockMacro
+ @see ::cpp::PreProcessor
+ */
+ virtual void Deal_Cpp_UnblockMacro(
+ Tok_UnblockMacro & let_drToken ) = 0;
+};
+
+
+
+} // namespace cpp
+
+
+
+#endif
+
diff --git a/autodoc/source/parser/inc/cpp/prs_cpp.hxx b/autodoc/source/parser/inc/cpp/prs_cpp.hxx
new file mode 100644
index 000000000000..1b324eeebd18
--- /dev/null
+++ b/autodoc/source/parser/inc/cpp/prs_cpp.hxx
@@ -0,0 +1,67 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_CPP_PRS_CPP_HXX
+#define ADC_CPP_PRS_CPP_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <autodoc/prs_code.hxx>
+ // COMPONENTS
+ // PARAMETERS
+
+namespace cpp
+{
+
+struct S_RunningData;
+
+class Cpluplus_Parser : public autodoc::CodeParser_Ifc
+{
+ public:
+ Cpluplus_Parser();
+ virtual ~Cpluplus_Parser();
+
+
+ virtual void Setup(
+ ary::Repository & o_rRepository,
+ const autodoc::DocumentationParser_Ifc &
+ i_rDocumentationInterpreter );
+
+ virtual void Run(
+ const autodoc::FileCollector_Ifc &
+ i_rFiles );
+ private:
+ Dyn<S_RunningData> pRunningData;
+};
+
+
+
+
+} // namespace cpp
+#endif
diff --git a/autodoc/source/parser/inc/doc_deal.hxx b/autodoc/source/parser/inc/doc_deal.hxx
new file mode 100644
index 000000000000..5ff17ee2264d
--- /dev/null
+++ b/autodoc/source/parser/inc/doc_deal.hxx
@@ -0,0 +1,89 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_DOC_DEAL_HXX
+#define ADC_DOC_DEAL_HXX
+
+// BASE CLASSES
+#include <tokens/tokproct.hxx>
+// USED SERVICES
+#include <ary/cpp/c_types4cpp.hxx>
+
+namespace ary
+{
+namespace doc
+{
+ class OldCppDocu;
+}
+}
+
+
+
+
+class DocuDealer
+{
+ public:
+ // INQUIRY
+ virtual ~DocuDealer() {}
+
+ // OPERATIONS
+ /** @descr
+ This distributes the let_drDocu to the matching ary::RepositoryEntity .
+
+ If the docu is not inline, it will be saved and later given to the next
+ ary::CodeEntity. Or it will be discarded, if there does not come a matching
+ ary::CodeEntity .
+
+ If the docu is inline after a function header or after an enum value
+ or after a function parameter or after a base class, it will be stored
+ together with the matching function, enum value, parameter or base class.
+
+ If the documentation is @file or @project or @glos(sary) it will be
+ stored at the matching ary::cpp::FileGroup, ary::cpp::ProjectGroup
+ or ary::Glossary.
+ */
+ void TakeDocu(
+ DYN ary::doc::OldCppDocu &
+ let_drInfo );
+ private:
+ virtual void do_TakeDocu(
+ DYN ary::doc::OldCppDocu &
+ let_drInfo ) = 0;
+};
+
+
+
+
+// IMPLEMENTATION
+inline void
+DocuDealer::TakeDocu( DYN ary::doc::OldCppDocu & let_drInfo )
+ { do_TakeDocu(let_drInfo); }
+
+
+
+
+#endif
diff --git a/autodoc/source/parser/inc/semantic/callf.hxx b/autodoc/source/parser/inc/semantic/callf.hxx
new file mode 100644
index 000000000000..a76da81e280c
--- /dev/null
+++ b/autodoc/source/parser/inc/semantic/callf.hxx
@@ -0,0 +1,287 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_CPP_CALLF_HXX
+#define ADC_CPP_CALLF_HXX
+
+// USED SERVICES
+
+
+
+
+/** This represents a function to be called, if a specific kind of token
+ arrives in the semantic parser.
+
+ @descr This class is only to be used as member of PeStatus<PE>.
+ @template PE
+ The owning ParseEnvironment.
+ @see PeStatus, ParseEnvironment
+*/
+template <class PE>
+class CallFunction
+{
+ public:
+ typedef void (PE::*F_Tok)(const char *);
+
+ CallFunction(
+ F_Tok i_f2Call,
+ INT16 i_nTokType );
+
+ F_Tok GetF() const;
+ INT16 TokType() const;
+
+ private:
+ // DATA
+ F_Tok f2Call;
+ INT16 nTokType;
+};
+
+
+/** One state within a ParseEnvironment.
+
+ @template PE
+ The owning ParseEnvironment.
+*/
+template <class PE>
+class PeStatus
+{
+ public:
+ typedef typename CallFunction<PE>::F_Tok F_Tok;
+
+ PeStatus(
+ PE & i_rMyPE,
+ uintt i_nSize,
+ F_Tok * i_pFuncArray,
+ INT16 * i_pTokTypeArray,
+ F_Tok i_pDefault );
+ virtual ~PeStatus();
+
+ virtual void Call_Handler(
+ INT16 i_nTokTypeId,
+ const char * i_sTokenText ) const;
+
+ private:
+ bool CheckForCall(
+ uintt i_nPos,
+ INT16 i_nTokTypeId,
+ const char * i_sTokenText ) const;
+
+ PE * pMyPE;
+ std::vector< CallFunction<PE> >
+ aBranches;
+ F_Tok fDefault;
+};
+
+
+template <class PE>
+class PeStatusArray
+{
+ public:
+ typedef typename PE::E_State State;
+
+ PeStatusArray();
+ void InsertState(
+ State i_ePosition,
+ DYN PeStatus<PE> & let_drState );
+ ~PeStatusArray();
+
+ const PeStatus<PE> &
+ operator[](
+ State i_ePosition ) const;
+
+ void SetCur(
+ State i_eCurState );
+ const PeStatus<PE> &
+ Cur() const;
+
+ private:
+ DYN PeStatus<PE> * aStati[PE::size_of_states];
+ State eState;
+};
+
+
+
+// IMPLEMENTATION
+
+
+// CallFunction
+
+template <class PE>
+CallFunction<PE>::CallFunction( F_Tok i_f2Call,
+ INT16 i_nTokType )
+ : f2Call(i_f2Call),
+ nTokType(i_nTokType)
+{
+}
+
+template <class PE>
+inline typename CallFunction<PE>::F_Tok
+CallFunction<PE>::GetF() const
+{
+ return f2Call;
+}
+
+template <class PE>
+inline INT16
+CallFunction<PE>::TokType() const
+{
+ return nTokType;
+}
+
+
+
+// PeStatus
+
+template <class PE>
+PeStatus<PE>::PeStatus( PE & i_rMyPE,
+ uintt i_nSize,
+ F_Tok * i_pFuncArray,
+ INT16 * i_pTokTypeArray,
+ F_Tok i_fDefault )
+ : pMyPE(&i_rMyPE),
+ fDefault(i_fDefault)
+{
+ aBranches.reserve(i_nSize);
+ for ( uintt i = 0; i < i_nSize; ++i )
+ {
+// csv_assert(i > 0 ? i_pTokTypeArray[i] > i_pTokTypeArray[i-1] : true);
+ aBranches.push_back( CallFunction<PE>( i_pFuncArray[i], i_pTokTypeArray[i]) );
+ } // end for
+}
+
+template <class PE>
+PeStatus<PE>::~PeStatus()
+{
+
+}
+
+template <class PE>
+void
+PeStatus<PE>::Call_Handler( INT16 i_nTokTypeId,
+ const char * i_sTokenText ) const
+{
+ uintt nSize = aBranches.size();
+ uintt nPos = nSize / 2;
+
+ if ( i_nTokTypeId < aBranches[nPos].TokType() )
+ {
+ for ( --nPos; intt(nPos) >= 0; --nPos )
+ {
+ if (CheckForCall(nPos, i_nTokTypeId, i_sTokenText))
+ return;
+ }
+ }
+ else
+ {
+ for ( ; nPos < nSize; ++nPos )
+ {
+ if (CheckForCall(nPos, i_nTokTypeId, i_sTokenText))
+ return;
+ }
+ }
+
+ (pMyPE->*fDefault)(i_sTokenText);
+}
+
+template <class PE>
+bool
+PeStatus<PE>::CheckForCall( uintt i_nPos,
+ INT16 i_nTokTypeId,
+ const char * i_sTokenText ) const
+{
+ if ( aBranches[i_nPos].TokType() == i_nTokTypeId )
+ {
+ (pMyPE->*aBranches[i_nPos].GetF())(i_sTokenText);
+ return true;
+ }
+ return false;
+}
+
+// PeStatusArray
+
+template <class PE>
+PeStatusArray<PE>::PeStatusArray()
+ : eState(PE::size_of_states)
+{
+ memset(aStati, 0, sizeof aStati);
+}
+
+template <class PE>
+void
+PeStatusArray<PE>::InsertState( State i_ePosition,
+ DYN PeStatus<PE> & let_drState )
+{
+ csv_assert(aStati[i_ePosition] == 0);
+ aStati[i_ePosition] = &let_drState;
+}
+
+template <class PE>
+PeStatusArray<PE>::~PeStatusArray()
+{
+ int i_max = PE::size_of_states;
+ for (int i = 0; i < i_max; i++)
+ {
+ delete aStati[i];
+ } // end for
+}
+
+template <class PE>
+inline const PeStatus<PE> &
+PeStatusArray<PE>::operator[]( State i_ePosition ) const
+{
+ csv_assert( uintt(i_ePosition) < PE::size_of_states );
+ csv_assert( aStati[i_ePosition] != 0 );
+ return *aStati[i_ePosition];
+}
+
+template <class PE>
+inline void
+PeStatusArray<PE>::SetCur( State i_eCurState )
+{
+ eState = i_eCurState;
+}
+
+
+template <class PE>
+const PeStatus<PE> &
+PeStatusArray<PE>::Cur() const
+{
+ return (*this)[eState];
+}
+
+#define SEMPARSE_CREATE_STATUS(penv, state, default_function) \
+ pStati->InsertState( state, \
+ *new PeStatus<penv>( \
+ *this, \
+ sizeof( stateT_##state ) / sizeof (INT16), \
+ stateF_##state, \
+ stateT_##state, \
+ &penv::default_function ) )
+
+
+#endif
+
diff --git a/autodoc/source/parser/inc/semantic/parseenv.hxx b/autodoc/source/parser/inc/semantic/parseenv.hxx
new file mode 100644
index 000000000000..d6ba3daf661a
--- /dev/null
+++ b/autodoc/source/parser/inc/semantic/parseenv.hxx
@@ -0,0 +1,110 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_PARSEENV_HXX
+#define ADC_PARSEENV_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <tokens/tokproct.hxx>
+ // COMPONENTS
+ // PARAMETERS
+
+
+namespace ary
+{
+namespace info
+{
+class CodeInfo;
+} // namespace info
+} // namespace ary)
+
+
+
+class SubPeUseIfc;
+
+
+class ParseEnvironment : protected TokenProcessing_Types
+{
+ public:
+ virtual ~ParseEnvironment() {}
+
+ // Parsing
+ void Enter(
+ E_EnvStackAction i_eWayOfEntering );
+ void Leave(
+ E_EnvStackAction i_eWayOfLeaving );
+ void SetCurSPU(
+ const SubPeUseIfc * i_pCurSPU );
+
+ ParseEnvironment * Parent() const;
+
+
+ // ACCESS
+ protected:
+ ParseEnvironment(
+ ParseEnvironment * i_pParent );
+ const SubPeUseIfc * CurSubPeUse() const;
+ private:
+ virtual void InitData() = 0;
+ virtual void TransferData() = 0;
+
+ ParseEnvironment * pParent;
+ const SubPeUseIfc * pCurSubPe;
+};
+
+class SubPeUseIfc
+{
+ public:
+ virtual ~SubPeUseIfc() {}
+
+ virtual void InitParse() const = 0;
+ virtual void GetResults() const = 0;
+};
+
+
+
+// IMPLEMENTATION
+
+inline void
+ParseEnvironment::SetCurSPU( const SubPeUseIfc * i_pCurSPU )
+ { pCurSubPe = i_pCurSPU; }
+
+inline ParseEnvironment *
+ParseEnvironment::Parent() const
+ { return pParent; }
+
+inline const SubPeUseIfc *
+ParseEnvironment::CurSubPeUse() const
+ { return pCurSubPe; }
+
+
+
+#endif
+
diff --git a/autodoc/source/parser/inc/semantic/sub_pe.hxx b/autodoc/source/parser/inc/semantic/sub_pe.hxx
new file mode 100644
index 000000000000..84775f2e9425
--- /dev/null
+++ b/autodoc/source/parser/inc/semantic/sub_pe.hxx
@@ -0,0 +1,112 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_CPP_SUB_PE_HXX
+#define ADC_CPP_SUB_PE_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+ // COMPONENTS
+ // PARAMETERS
+
+
+class ParseEnvironment;
+
+template <class PE, class SUB>
+class SubPe
+{
+ public:
+ typedef SubPe< PE, SUB > self;
+
+ SubPe(
+ PE & i_rParent );
+ PE & Parent() const;
+ SUB & Child() const;
+
+ ParseEnvironment & Get() const;
+
+ private:
+ SUB & CreateChild() const;
+
+ PE & rParent;
+ Dyn<SUB> pChild;
+};
+
+
+
+// IMPLEMENTATION
+
+
+// SubPe
+
+template <class PE, class SUB>
+SubPe<PE,SUB>::SubPe( PE & i_rParent )
+ : rParent(i_rParent)
+{
+}
+
+template <class PE, class SUB>
+PE &
+SubPe<PE,SUB>::Parent() const
+{
+ return rParent;
+}
+
+template <class PE, class SUB>
+inline SUB &
+SubPe<PE,SUB>::Child() const
+{
+ return pChild ? *pChild.MutablePtr() : CreateChild();
+}
+
+template <class PE, class SUB>
+ParseEnvironment &
+SubPe<PE,SUB>::Get() const
+{
+ return Child();
+}
+
+template <class PE, class SUB>
+SUB &
+SubPe<PE,SUB>::CreateChild() const
+{
+ self * pThis = const_cast< self* >(this);
+
+ SUB * pNewChild = new SUB( &rParent);
+
+ pThis->pChild = pNewChild;
+
+ return *pChild.MutablePtr();
+}
+
+
+
+
+#endif
+
diff --git a/autodoc/source/parser/inc/semantic/sub_peu.hxx b/autodoc/source/parser/inc/semantic/sub_peu.hxx
new file mode 100644
index 000000000000..c939f295c373
--- /dev/null
+++ b/autodoc/source/parser/inc/semantic/sub_peu.hxx
@@ -0,0 +1,131 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_CPP_SUB_PEU_HXX
+#define ADC_CPP_SUB_PEU_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <semantic/parseenv.hxx>
+#include <tokens/tokproct.hxx>
+ // COMPONENTS
+ // PARAMETERS
+#include <semantic/sub_pe.hxx>
+
+
+
+template <class PE, class SUB>
+class SubPeUse : public SubPeUseIfc,
+ private TokenProcessing_Types
+{
+ public:
+ typedef void (PE::*F_INIT)();
+ typedef void (PE::*F_RETURN)();
+
+ SubPeUse(
+ SubPe<PE,SUB> & i_rSubPeCreator,
+ F_INIT i_fInit,
+ F_RETURN i_fReturn );
+ ~SubPeUse();
+
+ void Push(
+ E_TokenDone i_eDone );
+ virtual void InitParse() const;
+ virtual void GetResults() const;
+
+ PE & Parent() const;
+ SUB & Child() const;
+
+ private:
+ // DATA
+ SubPe<PE,SUB> & rSubPeCreator;
+ F_INIT fInit;
+ F_RETURN fReturn;
+};
+
+
+// IMPLEMENTATION
+
+
+template <class PE, class SUB>
+SubPeUse<PE,SUB>::SubPeUse( SubPe<PE,SUB> & i_rSubPeCreator,
+ F_INIT i_fInit,
+ F_RETURN i_fReturn )
+ : rSubPeCreator(i_rSubPeCreator),
+ fInit(i_fInit),
+ fReturn(i_fReturn)
+{
+}
+
+template <class PE, class SUB>
+SubPeUse<PE,SUB>::~SubPeUse()
+{
+}
+
+template <class PE, class SUB>
+void
+SubPeUse<PE,SUB>::Push( E_TokenDone i_eDone )
+{
+ Parent().SetTokenResult( i_eDone, push, &rSubPeCreator.Get() );
+ Parent().SetCurSPU(this);
+}
+
+template <class PE, class SUB>
+void
+SubPeUse<PE,SUB>::InitParse() const
+{
+ if (fInit != 0)
+ (Parent().*fInit)();
+}
+
+template <class PE, class SUB>
+void
+SubPeUse<PE,SUB>::GetResults() const
+{
+ if (fReturn != 0)
+ (Parent().*fReturn)();
+}
+
+template <class PE, class SUB>
+inline PE &
+SubPeUse<PE,SUB>::Parent() const
+{
+ return rSubPeCreator.Parent();
+}
+
+template <class PE, class SUB>
+inline SUB &
+SubPeUse<PE,SUB>::Child() const
+{
+ return rSubPeCreator.Child();
+}
+
+
+#endif
+
diff --git a/autodoc/source/parser/inc/tokens/parseinc.hxx b/autodoc/source/parser/inc/tokens/parseinc.hxx
new file mode 100644
index 000000000000..c1a20a2a11e3
--- /dev/null
+++ b/autodoc/source/parser/inc/tokens/parseinc.hxx
@@ -0,0 +1,203 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_PARSEINC_HXX
+#define ADC_PARSEINC_HXX
+
+
+#include <tools/tkpchars.hxx>
+
+inline char
+jumpOver( CharacterSource & io_rText,
+ char in_c )
+{
+ char cNext;
+ for ( cNext = io_rText.CurChar();
+ cNext == in_c;
+ cNext = io_rText.MoveOn() )
+ { }
+
+ return cNext;
+}
+
+inline char
+jumpTo( CharacterSource & io_rText,
+ char in_c )
+{
+ char cNext;
+ for ( cNext = io_rText.CurChar();
+ cNext != in_c AND cNext != 0;
+ cNext = io_rText.MoveOn() )
+ { }
+
+ return cNext;
+}
+
+inline char
+jumpTo( CharacterSource & io_rText,
+ char in_c1,
+ char in_c2 )
+{
+ char cNext;
+ for ( cNext = io_rText.CurChar();
+ cNext != in_c1 AND cNext != in_c2 AND cNext != 0;
+ cNext = io_rText.MoveOn() )
+ { }
+
+ return cNext;
+}
+
+inline char
+jumpTo( CharacterSource & io_rText,
+ char in_c1,
+ char in_c2,
+ char in_c3 )
+{
+ char cNext;
+ for ( cNext = io_rText.CurChar();
+ cNext != in_c1 AND cNext != in_c2 AND cNext != in_c3 AND cNext != 0;
+ cNext = io_rText.MoveOn() )
+ { }
+
+ return cNext;
+}
+
+inline char
+jumpTo( CharacterSource & io_rText,
+ char in_c1,
+ char in_c2,
+ char in_c3,
+ char in_c4 )
+{
+ char cNext;
+ for ( cNext = io_rText.CurChar();
+ cNext != in_c1 AND cNext != in_c2 AND cNext != in_c3
+ AND cNext != in_c4 AND cNext != 0;
+ cNext = io_rText.MoveOn() )
+ { }
+
+ return cNext;
+}
+
+inline char
+jumpOverWhite(CharacterSource & io_rText)
+{
+ char cNext;
+ for ( cNext = io_rText.CurChar();
+ static_cast<UINT8>(cNext) < 33
+ AND cNext != 0 AND cNext != 13 AND cNext != 10;
+ cNext = io_rText.MoveOn() )
+ { }
+
+ return cNext;
+}
+
+inline char
+jumpToWhite(CharacterSource & io_rText)
+{
+ char cNext;
+ for ( cNext = io_rText.CurChar();
+ static_cast<UINT8>(cNext) > 32;
+ cNext = io_rText.MoveOn() )
+ { }
+
+ return cNext;
+}
+
+inline char
+jumpToEol(CharacterSource & io_rText, int & o_rCount_BackslashedLineBreaks )
+{
+ o_rCount_BackslashedLineBreaks = 0;
+ char cNext;
+ for ( cNext = io_rText.CurChar();
+ cNext != 13 AND cNext != 10 AND cNext != NULCH;
+ cNext = io_rText.MoveOn() )
+ {
+ if ( cNext == '\\')
+ {
+ cNext = io_rText.MoveOn();
+ if ( cNext == 13 )
+ io_rText.MoveOn();
+ if ( cNext == 10 )
+ ++o_rCount_BackslashedLineBreaks;
+ }
+ }
+ return cNext;
+}
+
+inline char
+jumpToEol(CharacterSource & io_rText)
+{
+ char cNext;
+ for ( cNext = io_rText.CurChar();
+ cNext != 13 AND cNext != 10 AND cNext != NULCH;
+ cNext = io_rText.MoveOn() )
+ {
+ if ( cNext == '\\')
+ io_rText.MoveOn();
+ }
+ return cNext;
+}
+
+inline char
+jumpOverEol(CharacterSource & io_rText)
+{
+ char cNext = io_rText.CurChar();
+
+ if (cNext == 13)
+ io_rText.MoveOn();
+ if (cNext == 10)
+ io_rText.MoveOn();
+ return cNext;
+}
+
+
+inline char // Finds a matching closing bracket after the opening one is passed
+jumpToMatchingBracket( CharacterSource & io_rText,
+ char in_cBegin,
+ char in_cEnd )
+{
+ intt nCounter = 1;
+ char cNext;
+ for ( cNext = io_rText.CurChar();
+ nCounter - (cNext == in_cEnd ? 1 : 0) > 0 AND cNext != NULCH;
+ cNext = io_rText.MoveOn() )
+ {
+ if (cNext == in_cEnd)
+ nCounter++;
+ else if (cNext == in_cBegin)
+ nCounter--;
+ }
+
+ return cNext;
+}
+
+
+
+
+#endif
+
diff --git a/autodoc/source/parser/inc/tokens/stmstarr.hxx b/autodoc/source/parser/inc/tokens/stmstarr.hxx
new file mode 100644
index 000000000000..d95ac2b6aa1c
--- /dev/null
+++ b/autodoc/source/parser/inc/tokens/stmstarr.hxx
@@ -0,0 +1,85 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_STMSTARR_HXX
+#define ADC_STMSTARR_HXX
+
+// USED SERVICES
+ // BASE CLASSES
+#include <tokens/stmstate.hxx>
+ // COMPONENTS
+ // PARAMETERS
+#include <tokens/token.hxx>
+
+
+class StmArrayStatus : public StmStatus
+{
+ public:
+ typedef TextToken::F_CRTOK F_CRTOK;
+
+ // LIFECYCLE
+ StmArrayStatus(
+ intt i_nStatusSize,
+ const INT16 * in_aArrayModel,
+ F_CRTOK i_fTokenCreateFunction,
+ bool in_bIsDefault );
+ ~StmArrayStatus();
+
+ // INQUIRY
+ StmStatus::Branch NextBy(
+ intt in_nFollowersIndex) const;
+ F_CRTOK TokenCreateFunction() const
+ { return fTokenCreateFunction; }
+ virtual bool IsADefault() const;
+
+ // ACCESS
+ virtual StmArrayStatus *
+ AsArray();
+ bool SetBranch(
+ intt in_nBranchIx,
+ StmStatus::Branch in_nBranch );
+ void SetTokenCreateFunction(
+ F_CRTOK i_fTokenCreateFunction );
+ private:
+ StmStatus::Branch * dpBranches;
+ intt nNrOfBranches;
+ F_CRTOK fTokenCreateFunction;
+ bool bIsADefault;
+};
+
+
+// IMPLEMENTATION
+
+inline void
+StmArrayStatus::SetTokenCreateFunction( F_CRTOK i_fTokenCreateFunction )
+ { fTokenCreateFunction = i_fTokenCreateFunction; }
+
+
+
+#endif
+
+
diff --git a/autodoc/source/parser/inc/tokens/stmstate.hxx b/autodoc/source/parser/inc/tokens/stmstate.hxx
new file mode 100644
index 000000000000..59c40733de74
--- /dev/null
+++ b/autodoc/source/parser/inc/tokens/stmstate.hxx
@@ -0,0 +1,68 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_STMSTATE_HXX
+#define ADC_STMSTATE_HXX
+
+// USED SERVICES
+ // BASE CLASSES
+ // COMPONENTS
+ // PARAMETERS
+class StmArrayStatus;
+class StmBoundsStatus;
+
+/** A StmStatus is a state within a StateMachine.
+ There are two kinds of it. Either its an array of pointers to
+ other states within the state machine - an ArrayStatus.
+
+ Or it is a BoundsStatus, which shows, the token cannot be
+ followed further within the StateMachine.
+**/
+class StmStatus // := "State machine status"
+{
+ public:
+ typedef intt Branch; /// Values >= 0 give a next #Status' ID.
+ /// Values <= 0 tell, that a token is finished.
+ /// a value < 0 returns the status back to an upper level state machine.
+ // LIFECYCLE
+ virtual ~StmStatus() {}
+
+ // OPERATIONS
+ virtual StmArrayStatus *
+ AsArray();
+ virtual StmBoundsStatus *
+ AsBounds();
+
+ // INQUIRY
+ virtual bool IsADefault() const = 0;
+};
+
+
+
+#endif
+
+
diff --git a/autodoc/source/parser/inc/tokens/stmstfin.hxx b/autodoc/source/parser/inc/tokens/stmstfin.hxx
new file mode 100644
index 000000000000..67e8e4525f5a
--- /dev/null
+++ b/autodoc/source/parser/inc/tokens/stmstfin.hxx
@@ -0,0 +1,80 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_STMSTFIN_HXX
+#define ADC_STMSTFIN_HXX
+
+// USED SERVICES
+ // BASE CLASSES
+#include <tokens/stmstate.hxx>
+ // COMPONENTS
+ // PARAMETERS
+
+
+class TkpContext;
+class StateMachineContext;
+
+/**
+**/
+class StmBoundsStatus : public StmStatus
+{
+ public:
+ // LIFECYCLE
+ StmBoundsStatus(
+ StateMachineContext &
+ o_rOwner,
+ TkpContext & i_rFollowUpContext,
+ uintt i_nStatusFunctionNr,
+ bool i_bIsDefault );
+ // INQUIRY
+ TkpContext * FollowUpContext();
+ uintt StatusFunctionNr() const;
+ virtual bool IsADefault() const;
+
+ // ACCESS
+ virtual StmBoundsStatus *
+ AsBounds();
+
+ private:
+ StateMachineContext *
+ pOwner;
+ TkpContext * pFollowUpContext;
+ uintt nStatusFunctionNr;
+ bool bIsDefault;
+};
+
+inline TkpContext *
+StmBoundsStatus::FollowUpContext()
+ { return pFollowUpContext; }
+inline uintt
+StmBoundsStatus::StatusFunctionNr() const
+ { return nStatusFunctionNr; }
+
+
+#endif
+
+
diff --git a/autodoc/source/parser/inc/tokens/tkp.hxx b/autodoc/source/parser/inc/tokens/tkp.hxx
new file mode 100644
index 000000000000..6623230e9603
--- /dev/null
+++ b/autodoc/source/parser/inc/tokens/tkp.hxx
@@ -0,0 +1,99 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_TKP_HXX
+#define ADC_TKP_HXX
+
+// USED SERVICES
+ // BASE CLASSES
+ // COMPONENTS
+class CharacterSource;
+class TkpContext;
+ // PARAMETRS
+
+
+
+/** This is the interface for parser classes, which get a sequence of tokens from
+ a text.
+
+ Start() starts to parse the text from the given i_rSource.
+ GetNextToken() returns a Token on the heap as long as there are
+ still characters in the text left. This can be checked by
+ HasMore().
+
+ The algorithms for parsing tokens from the text are an issue of
+ the derived classes.
+*/
+#if 0
+/**
+ Parsing can be interrupted for a different source by PushSource().
+ The parsing before interruption is continued after PopSource().
+*/
+#endif // 0
+
+class TokenParser
+{
+ public:
+ // LIFECYCLE
+ TokenParser();
+ virtual ~TokenParser() {}
+
+ // OPERATIONS
+ /** Start parsing a character source. Any previously parsed sources
+ are discarded.
+ */
+ virtual void Start(
+ CharacterSource &
+ i_rSource );
+
+ /** @short Gets the next identifiable token out of the
+ source code.
+ */
+ void GetNextToken();
+
+ /// @return true, if there are more tokens to parse.
+ bool HasMore() const { return bHasMore; }
+
+ private:
+ void InitSource(
+ CharacterSource &
+ i_rSource );
+
+ virtual void SetStartContext() = 0;
+ virtual void SetCurrentContext(
+ TkpContext & io_rContext ) = 0;
+ virtual TkpContext &
+ CurrentContext() = 0;
+ // DATA
+ CharacterSource * pChars;
+ bool bHasMore;
+};
+
+
+#endif
+
+
diff --git a/autodoc/source/parser/inc/tokens/tkpcontx.hxx b/autodoc/source/parser/inc/tokens/tkpcontx.hxx
new file mode 100644
index 000000000000..becc5c356051
--- /dev/null
+++ b/autodoc/source/parser/inc/tokens/tkpcontx.hxx
@@ -0,0 +1,140 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_TKPCONTX_HXX
+#define ADC_TKPCONTX_HXX
+
+// USED SERVICES
+ // BASE CLASSES
+ // COMPONENTS
+ // PARAMETERS
+#include <tokens/token.hxx>
+class CharacterSource;
+class TkpNullContext;
+
+/** @task
+ Specifies a context within which tokens are interpreted in a special
+ way. For example in parsing C++ there could be a context for code,
+ one for comments and a third one for preprocessor statements, because
+ each of these would give the same token different meanings.
+
+ The three functions
+ ReadCharChain()
+ PassNewToken()
+ FollowUpContext()
+ have to be called in this sequence.
+
+**/
+class TkpContext
+{
+ public:
+ // LIFECYCLE
+ virtual ~TkpContext() {}
+
+ // OPERATIONS
+ /** @descr
+ The functions starts to parse with the CurChar() of io_rText.
+ It leaves io_rText.CurChar() at the first char of the following Token or
+ the following Context.
+
+ This function returns, when a context has parsed some characterss
+ and completed a token OR left the context.
+ If the token is to be ignored, it is cut from io_rText.
+
+ If the token is to be parsed further in a different context,
+ it is NOT cut from io_rText.
+
+ After this function PassNewToken() has to be called.
+
+ If the function has found a valid and complete token, PassNewToken()
+ passes the parsed token to the internally known receiver and
+ returns true. The token is cut from io_rText.
+ **/
+ virtual void ReadCharChain(
+ CharacterSource & io_rText ) = 0;
+ /** Has to pass the parsed token to a known receiver.
+ If the token is to be parsed further in a different context,
+ PassNewToken() returns false, but the token is NOT cut from io_rText.
+
+ @return true, if a token was passed.
+ false, if the token was not parsed completely by this context
+ or if the token is to be ignored.
+ */
+ virtual bool PassNewToken() = 0;
+ virtual TkpContext &
+ FollowUpContext() = 0;
+
+ static TkpNullContext &
+ Null_();
+};
+
+class StateMachineContext
+{
+ public:
+ typedef TextToken::F_CRTOK F_CRTOK;
+
+ virtual ~StateMachineContext() {}
+
+ /// Is used by StmBoundsStatus only.
+ virtual void PerformStatusFunction(
+ uintt i_nStatusSignal,
+ F_CRTOK i_fTokenCreateFunction,
+ CharacterSource & io_rText ) = 0;
+};
+
+class TkpNullContext : public TkpContext
+{
+ public:
+ ~TkpNullContext();
+
+ virtual void ReadCharChain(
+ CharacterSource & io_rText );
+ virtual bool PassNewToken();
+ virtual TkpContext &
+ FollowUpContext();
+};
+
+namespace autodoc
+{
+
+class TkpDocuContext : public TkpContext
+{
+ public:
+ virtual void SetParentContext(
+ TkpContext & io_rParentContext,
+ const char * i_sMultiLineEndToken ) = 0;
+ virtual void AssignDealer(
+ TokenDealer & o_rDealer ) = 0;
+ virtual void SetMode_IsMultiLine(
+ bool i_bTrue ) = 0;
+};
+
+} // namespace autodoc
+
+#endif
+
+
diff --git a/autodoc/source/parser/inc/tokens/tkpstama.hxx b/autodoc/source/parser/inc/tokens/tkpstama.hxx
new file mode 100644
index 000000000000..47d443275e8f
--- /dev/null
+++ b/autodoc/source/parser/inc/tokens/tkpstama.hxx
@@ -0,0 +1,123 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_TKPSTAMA_HXX
+#define ADC_TKPSTAMA_HXX
+
+// USED SERVICES
+ // BASE CLASSES
+#include <tokens/tkpcontx.hxx>
+ // COMPONENTS
+#include <tokens/stmstarr.hxx>
+#include <tokens/stmstfin.hxx>
+
+/** @descr
+ This state-machine models state transitions from one state to another
+ per indices of branches. If the indices represent ascii-char-values,
+ the state-machine can be used for recognising tokens of text.
+
+ The state-machine can be a status itself.
+
+ StateMachine needs the array-size of all stati as a guess, how many stati
+ the state machine will contain, when at work.
+
+
+**/
+class StateMachine
+{
+ public:
+ // Types
+ typedef StmStatus::Branch Branch;
+ typedef StmStatus * * StatusList;
+
+ //# Interface self
+ // LIFECYCLE
+ StateMachine(
+ intt in_nStatusSize,
+ intt in_nInitial_StatusListSize ); /// The user of the constructor should guess
+ /// the approximate number of stati here to
+ /// avoid multiple reallocations.
+ /// @#AddStatus
+ intt AddStatus( /// @return the new #Status' ID
+ DYN StmStatus * let_dpStatus);
+ /// @#AddToken
+ void AddToken(
+ const char * in_sToken,
+ TextToken::F_CRTOK in_fTokenCreateFunction,
+ const INT16 * in_aBranches,
+ INT16 in_nBoundsStatus );
+ ~StateMachine();
+
+
+ // OPERATIONS
+ StmBoundsStatus &
+ GetCharChain(
+ TextToken::F_CRTOK &
+ o_nTokenCreateFunction,
+ CharacterSource & io_rText );
+ private:
+ // SERVICE FUNCTIONS
+ StmStatus & Status(
+ intt in_nStatusNr) const;
+ StmArrayStatus &
+ CurrentStatus() const;
+ StmBoundsStatus *
+ BoundsStatus() const;
+
+ /// Sets the PeekedStatus.
+ void Peek(
+ intt in_nBranch);
+
+ void ResizeStati(); // Adds space for 32 stati.
+
+ // DATA
+ StatusList pStati; /// List of Status, implemented as simple C-array of length #nStatiSpace
+ /// with nStatiLength valid members (beginning from zero).
+ intt nCurrentStatus;
+ intt nPeekedStatus;
+
+ intt nStatusSize; /// Size of the branch array of a single status.
+
+ intt nNrofStati; /// Nr of Stati so far.
+ intt nStatiSpace; /// Size of allocated array for #pStati (size in items).
+};
+
+
+
+/** @#AddToken
+ @descr
+ Adds a token, which will be recogniszeds by the
+ statemachine.
+
+
+**/
+
+
+
+#endif
+
+
diff --git a/autodoc/source/parser/inc/tokens/tokdeal.hxx b/autodoc/source/parser/inc/tokens/tokdeal.hxx
new file mode 100644
index 000000000000..0ab4155a42e3
--- /dev/null
+++ b/autodoc/source/parser/inc/tokens/tokdeal.hxx
@@ -0,0 +1,77 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_TOKDEAL_HXX
+#define ADC_TOKDEAL_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+ // COMPONENTS
+ // PARAMETERS
+
+namespace cpp
+{
+ class Distributor;
+}
+
+
+class TokenDealer
+
+{
+ public:
+ virtual ~TokenDealer() {}
+
+ virtual void Deal_Eol() = 0;
+ virtual void Deal_Eof() = 0;
+ virtual cpp::Distributor *
+ AsDistributor() = 0;
+};
+
+
+#if 0
+class TokenDealer
+
+{
+ public:
+ virtual void Deal_IdlCode(
+ idl::Token & let_drToken );
+ virtual void Deal_UdkDocu(
+ udoc::Token & let_drToken );
+ virtual void Deal_JavaCode(
+ java::Token & let_drToken );
+ virtual void Deal_SBasicCode(
+ sbasic::Token & let_drToken );
+};
+
+#endif // 0
+
+
+
+#endif
+
diff --git a/autodoc/source/parser/inc/tokens/token.hxx b/autodoc/source/parser/inc/tokens/token.hxx
new file mode 100644
index 000000000000..82d70b066fdf
--- /dev/null
+++ b/autodoc/source/parser/inc/tokens/token.hxx
@@ -0,0 +1,66 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_TOKEN_HXX
+#define ADC_TOKEN_HXX
+
+// USED SERVICES
+ // BASE CLASSES
+ // COMPONENTS
+ // PARAMETRS
+
+
+class TokenDealer;
+
+/**
+*/
+class TextToken
+{
+ public:
+ typedef TextToken * (*F_CRTOK)(const char*);
+
+ // LIFECYCLE
+ virtual ~TextToken() {}
+
+
+ // INQUIRY
+ virtual const char* Text() const = 0;
+
+ virtual void DealOut(
+ ::TokenDealer & o_rDealer ) = 0;
+};
+
+class Tok_Eof : public TextToken
+{
+ virtual void DealOut( // Implemented in tokdeal.cxx
+ TokenDealer & o_rDealer );
+ virtual const char* Text() const;
+};
+
+#endif
+
+
diff --git a/autodoc/source/parser/inc/tokens/tokproct.hxx b/autodoc/source/parser/inc/tokens/tokproct.hxx
new file mode 100644
index 000000000000..940b7482ff8c
--- /dev/null
+++ b/autodoc/source/parser/inc/tokens/tokproct.hxx
@@ -0,0 +1,83 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_CPP_TOKPROCT_HXX
+#define ADC_CPP_TOKPROCT_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+ // COMPONENTS
+ // PARAMETERS
+
+
+class ParseEnvironment;
+
+/** is a parent class for classes, which take part in parsing tokens semantically.
+ It provides some types for them.
+*/
+class TokenProcessing_Types
+{
+ public:
+ enum E_TokenDone
+ {
+ not_done = 0,
+ done = 1
+ };
+
+ enum E_EnvStackAction
+ {
+ stay, // same parse environment
+ push, // push sub environment
+ pop_success, // return to parent environment, parsing was successful
+ pop_failure // return to parent environment, but an error occured.
+ };
+
+ struct TokenProcessing_Result
+ {
+ E_TokenDone eDone;
+ E_EnvStackAction eStackAction;
+ ParseEnvironment * pEnv2Push;
+
+ TokenProcessing_Result()
+ : eDone(not_done), eStackAction(stay), pEnv2Push(0) {}
+ void Reset() { eDone = not_done; eStackAction = stay; pEnv2Push = 0; }
+ };
+
+ enum E_ParseResult
+ {
+ res_error,
+ res_complete,
+ res_predeclaration
+ };
+};
+
+
+
+#endif
+
diff --git a/autodoc/source/parser/inc/x_docu.hxx b/autodoc/source/parser/inc/x_docu.hxx
new file mode 100644
index 000000000000..bc75b96f5743
--- /dev/null
+++ b/autodoc/source/parser/inc/x_docu.hxx
@@ -0,0 +1,58 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_X_DOCU_HXX
+#define ADC_X_DOCU_HXX
+
+// BASE CLASSES
+#include <autodoc/x_parsing.hxx>
+
+
+
+
+class X_Docu : public autodoc::X_Parser_Ifc
+{
+ public:
+ // LIFECYCLE
+ X_Docu(
+ const char * i_tag,
+ const char * i_explanation );
+ ~X_Docu();
+ // INQUIRY
+ virtual E_Event GetEvent() const;
+ virtual void GetInfo(
+ std::ostream & o_rOutputMedium ) const;
+
+ private:
+ String sTagName;
+ String sExplanation;
+};
+
+
+
+
+#endif
diff --git a/autodoc/source/parser/inc/x_parse.hxx b/autodoc/source/parser/inc/x_parse.hxx
new file mode 100644
index 000000000000..7ccfa80056e7
--- /dev/null
+++ b/autodoc/source/parser/inc/x_parse.hxx
@@ -0,0 +1,63 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_X_PARSE_HXX
+#define ADC_X_PARSE_HXX
+
+// BASE CLASSES
+#include <autodoc/x_parsing.hxx>
+
+
+
+
+class X_Parser : public autodoc::X_Parser_Ifc
+{
+ public:
+ // LIFECYCLE
+ X_Parser(
+ E_Event i_eEvent,
+ const char * i_sObject,
+ const String & i_sCausingFile_FullPath,
+ uintt i_nCausingLineNr );
+ ~X_Parser();
+ // INQUIRY
+ virtual E_Event GetEvent() const;
+ virtual void GetInfo(
+ std::ostream & o_rOutputMedium ) const;
+
+ private:
+ E_Event eEvent;
+ String sObject;
+ String sCausingFile_FullPath;
+ uintt nCausingLineNr;
+
+};
+
+
+
+
+#endif
diff --git a/autodoc/source/parser/kernel/makefile.mk b/autodoc/source/parser/kernel/makefile.mk
new file mode 100644
index 000000000000..9baf8ab1c6ef
--- /dev/null
+++ b/autodoc/source/parser/kernel/makefile.mk
@@ -0,0 +1,58 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..$/..$/..
+
+PRJNAME=autodoc
+TARGET=parser_kernel
+TARGETTYPE=CUI
+
+
+# --- Settings -----------------------------------------------------
+
+ENABLE_EXCEPTIONS=true
+PRJINC=$(PRJ)$/source
+
+.INCLUDE : settings.mk
+.INCLUDE : $(PRJ)$/source$/mkinc$/fullcpp.mk
+
+
+
+# --- Files --------------------------------------------------------
+
+OBJFILES= \
+ $(OBJ)$/parsefct.obj \
+ $(OBJ)$/x_docu.obj \
+ $(OBJ)$/x_parse.obj
+
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : target.mk
+
+
+
diff --git a/autodoc/source/parser/kernel/parsefct.cxx b/autodoc/source/parser/kernel/parsefct.cxx
new file mode 100644
index 000000000000..6f041ef8415e
--- /dev/null
+++ b/autodoc/source/parser/kernel/parsefct.cxx
@@ -0,0 +1,81 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "parsefct.hxx"
+
+
+// NOT FULLY DECLARED SERVICES
+#include <cpp/prs_cpp.hxx>
+#include <adoc/prs_adoc.hxx>
+#include <tools/filecoll.hxx>
+
+
+DYN ParseToolsFactory * ParseToolsFactory::dpTheInstance_ = 0;
+
+
+namespace autodoc
+{
+
+ParseToolsFactory_Ifc &
+ParseToolsFactory_Ifc::GetIt_()
+{
+ if ( ParseToolsFactory::dpTheInstance_ == 0 )
+ ParseToolsFactory::dpTheInstance_ = new ParseToolsFactory;
+ return *ParseToolsFactory::dpTheInstance_;
+}
+
+} // namespace autodoc
+
+
+ParseToolsFactory::ParseToolsFactory()
+{
+}
+
+ParseToolsFactory::~ParseToolsFactory()
+{
+}
+
+DYN autodoc::CodeParser_Ifc *
+ParseToolsFactory::Create_Parser_Cplusplus() const
+{
+ return new cpp::Cpluplus_Parser;
+}
+
+DYN autodoc::DocumentationParser_Ifc *
+ParseToolsFactory::Create_DocuParser_AutodocStyle() const
+{
+ return new adoc::DocuParser_AutodocStyle;
+}
+
+DYN autodoc::FileCollector_Ifc *
+ParseToolsFactory::Create_FileCollector( uintt i_nEstimatedNrOfFiles ) const
+{
+ return new FileCollector(i_nEstimatedNrOfFiles);
+}
+
+
diff --git a/autodoc/source/parser/kernel/parsefct.hxx b/autodoc/source/parser/kernel/parsefct.hxx
new file mode 100644
index 000000000000..0710e48ac1dc
--- /dev/null
+++ b/autodoc/source/parser/kernel/parsefct.hxx
@@ -0,0 +1,60 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_PARSER_PARSEFCT_HXX
+#define ADC_PARSER_PARSEFCT_HXX
+
+
+#include <autodoc/parsing.hxx>
+
+
+/** Interface for parsing code of a programming language and
+ delivering the information into an Autodoc Repository.
+**/
+class ParseToolsFactory : public autodoc::ParseToolsFactory_Ifc
+{
+ public:
+ ParseToolsFactory();
+ virtual ~ParseToolsFactory();
+
+ virtual DYN autodoc::CodeParser_Ifc *
+ Create_Parser_Cplusplus() const;
+ virtual DYN autodoc::DocumentationParser_Ifc *
+ Create_DocuParser_AutodocStyle() const;
+ virtual DYN autodoc::FileCollector_Ifc *
+ Create_FileCollector(
+ uintt i_nEstimatedNrOfFiles ) const;
+ private:
+ static DYN ParseToolsFactory *
+ dpTheInstance_;
+
+ friend class autodoc::ParseToolsFactory_Ifc;
+};
+
+
+#endif
+
diff --git a/autodoc/source/parser/kernel/x_docu.cxx b/autodoc/source/parser/kernel/x_docu.cxx
new file mode 100644
index 000000000000..a811c5dca2e4
--- /dev/null
+++ b/autodoc/source/parser/kernel/x_docu.cxx
@@ -0,0 +1,61 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <x_docu.hxx>
+
+// NOT FULLY DECLARED SERVICES
+
+
+
+X_Docu::X_Docu( const char * i_tag,
+ const char * i_explanation )
+ : sTagName(i_tag),
+ sExplanation(i_explanation)
+{
+}
+
+X_Docu::~X_Docu()
+{
+}
+
+X_Docu::E_Event
+X_Docu::GetEvent() const
+{
+ return x_Any;
+}
+
+void
+X_Docu::GetInfo( std::ostream & o_rOutputMedium ) const
+{
+ o_rOutputMedium
+ << "Error in tag '"
+ << sTagName
+ << "': "
+ << sExplanation
+ << Endl();
+}
diff --git a/autodoc/source/parser/kernel/x_parse.cxx b/autodoc/source/parser/kernel/x_parse.cxx
new file mode 100644
index 000000000000..74c3e520d0d0
--- /dev/null
+++ b/autodoc/source/parser/kernel/x_parse.cxx
@@ -0,0 +1,98 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <x_parse.hxx>
+
+// NOT FULLY DECLARED SERVICES
+
+
+
+X_Parser::X_Parser( E_Event i_eEvent,
+ const char * i_sObject,
+ const String & i_sCausingFile_FullPath,
+ uintt i_nCausingLineNr )
+ : eEvent(i_eEvent),
+ sObject(i_sObject),
+ sCausingFile_FullPath(i_sCausingFile_FullPath),
+ nCausingLineNr(i_nCausingLineNr)
+{
+}
+
+X_Parser::~X_Parser()
+{
+}
+
+X_Parser::E_Event
+X_Parser::GetEvent() const
+{
+ return eEvent;
+}
+
+void
+X_Parser::GetInfo( std::ostream & o_rOutputMedium ) const
+{
+ o_rOutputMedium << "Error in file "
+ << sCausingFile_FullPath
+ << " in line "
+ << nCausingLineNr
+ << ": ";
+
+
+ switch (eEvent)
+ {
+ case x_InvalidChar:
+ o_rOutputMedium << "Unknown character '"
+ << sObject
+ << "'";
+ break;
+ case x_UnexpectedToken:
+ o_rOutputMedium << "Unexpected token \""
+ << sObject
+ << "\"";
+ break;
+ case x_UnexpectedEOF:
+ o_rOutputMedium << "Unexpected end of file.";
+ break;
+ case x_UnspecifiedSyntaxError:
+ o_rOutputMedium << "Unspecified syntax problem in file.";
+ break;
+ case x_Any:
+ default:
+ o_rOutputMedium << "Unspecified parsing exception.";
+ } // end switch
+ o_rOutputMedium << Endl();
+}
+
+
+std::ostream &
+operator<<( std::ostream & o_rOut,
+ const autodoc::X_Parser_Ifc & i_rException )
+{
+ i_rException.GetInfo(o_rOut);
+ return o_rOut;
+}
diff --git a/autodoc/source/parser/semantic/makefile.mk b/autodoc/source/parser/semantic/makefile.mk
new file mode 100644
index 000000000000..da7e8f154b43
--- /dev/null
+++ b/autodoc/source/parser/semantic/makefile.mk
@@ -0,0 +1,58 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..$/..$/..
+
+PRJNAME=autodoc
+TARGET=parser_semantic
+
+
+# --- Settings -----------------------------------------------------
+
+ENABLE_EXCEPTIONS=true
+PRJINC=$(PRJ)$/source
+
+.INCLUDE : settings.mk
+.INCLUDE : $(PRJ)$/source$/mkinc$/fullcpp.mk
+
+
+
+# --- Files --------------------------------------------------------
+
+
+OBJFILES= \
+ $(OBJ)$/parseenv.obj
+
+
+
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : target.mk
+
+
+
diff --git a/autodoc/source/parser/semantic/parseenv.cxx b/autodoc/source/parser/semantic/parseenv.cxx
new file mode 100644
index 000000000000..4478f720189e
--- /dev/null
+++ b/autodoc/source/parser/semantic/parseenv.cxx
@@ -0,0 +1,86 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <semantic/parseenv.hxx>
+
+
+// NOT FULLY DECLARED SERVICES
+#include <ary/doc/d_oldcppdocu.hxx>
+#include <x_parse.hxx>
+
+
+void
+ParseEnvironment::Enter( E_EnvStackAction i_eWayOfEntering )
+{
+ switch (i_eWayOfEntering)
+ {
+ case push:
+ InitData();
+ if ( Parent() != 0 )
+ {
+ csv_assert( Parent()->CurSubPeUse() != 0 );
+ Parent()->CurSubPeUse()->InitParse();
+ }
+ break;
+ case pop_success:
+ break;
+ case pop_failure:
+ break;
+ default:
+ csv_assert(false);
+ } // end switch
+}
+
+void
+ParseEnvironment::Leave( E_EnvStackAction i_eWayOfLeaving )
+{
+ switch (i_eWayOfLeaving)
+ {
+ case push:
+ break;
+ case pop_success:
+ TransferData();
+ if ( Parent() != 0 )
+ {
+ csv_assert( Parent()->CurSubPeUse() != 0 );
+ Parent()->CurSubPeUse()->GetResults();
+ }
+ break;
+ case pop_failure:
+ break;
+ default:
+ csv_assert(false);
+ } // end switch
+}
+
+ParseEnvironment::ParseEnvironment( ParseEnvironment * i_pParent )
+ : pParent(i_pParent),
+ // pDocu,
+ pCurSubPe(0)
+{
+}
diff --git a/autodoc/source/parser/tokens/makefile.mk b/autodoc/source/parser/tokens/makefile.mk
new file mode 100644
index 000000000000..beb3207154fb
--- /dev/null
+++ b/autodoc/source/parser/tokens/makefile.mk
@@ -0,0 +1,62 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..$/..$/..
+
+PRJNAME=garden
+TARGET=parser_tokens
+TARGETTYPE=CUI
+
+
+# --- Settings -----------------------------------------------------
+
+ENABLE_EXCEPTIONS=true
+PRJINC=$(PRJ)$/source
+
+.INCLUDE : settings.mk
+.INCLUDE : $(PRJ)$/source$/mkinc$/fullcpp.mk
+
+
+
+# --- Files --------------------------------------------------------
+
+OBJFILES= \
+ $(OBJ)$/stmstarr.obj \
+ $(OBJ)$/stmstate.obj \
+ $(OBJ)$/stmstfin.obj \
+ $(OBJ)$/tkpstama.obj \
+ $(OBJ)$/tkp.obj \
+ $(OBJ)$/tkpcontx.obj \
+ $(OBJ)$/tokdeal.obj
+
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : target.mk
+
+
+
diff --git a/autodoc/source/parser/tokens/stmstarr.cxx b/autodoc/source/parser/tokens/stmstarr.cxx
new file mode 100644
index 000000000000..e029b3c11f45
--- /dev/null
+++ b/autodoc/source/parser/tokens/stmstarr.cxx
@@ -0,0 +1,99 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <tokens/stmstarr.hxx>
+
+
+// NOT FULLY DECLARED SERVICES
+#include <x_parse.hxx>
+
+
+
+StmArrayStatus::StmArrayStatus( intt i_nStatusSize,
+ const INT16 * in_aArrayModel,
+ F_CRTOK i_fTokenCreateFunction,
+ bool in_bIsDefault )
+ : dpBranches(new StmStatus::Branch[i_nStatusSize]),
+ nNrOfBranches(i_nStatusSize),
+ fTokenCreateFunction(i_fTokenCreateFunction),
+ bIsADefault(in_bIsDefault)
+{
+ if (in_aArrayModel != 0)
+ {
+ intt count = 0;
+ for (const INT16 * get = in_aArrayModel; count < nNrOfBranches; count++, get++)
+ dpBranches[count] = *get;
+ }
+ else //
+ {
+ memset(dpBranches, 0, nNrOfBranches);
+ } // endif
+}
+
+StmArrayStatus::~StmArrayStatus()
+{
+ delete [] dpBranches;
+}
+
+bool
+StmArrayStatus::SetBranch( intt in_nBranchIx,
+ StmStatus::Branch in_nBranch )
+{
+ if ( csv::in_range(intt(0), in_nBranchIx, intt(nNrOfBranches) ) )
+ {
+ dpBranches[in_nBranchIx] = in_nBranch;
+ return true;
+ }
+ return false;
+}
+
+
+StmStatus::Branch
+StmArrayStatus::NextBy(intt in_nIndex) const
+{
+ if (in_nIndex < 0)
+ throw X_Parser(X_Parser::x_InvalidChar, "", String::Null_(), 0);
+
+ return in_nIndex < nNrOfBranches
+ ? dpBranches[in_nIndex]
+ : dpBranches[nNrOfBranches - 1];
+}
+
+
+bool
+StmArrayStatus::IsADefault() const
+{
+ return bIsADefault;
+}
+
+StmArrayStatus *
+StmArrayStatus::AsArray()
+{
+ return this;
+}
+
diff --git a/autodoc/source/parser/tokens/stmstate.cxx b/autodoc/source/parser/tokens/stmstate.cxx
new file mode 100644
index 000000000000..991cad13cb85
--- /dev/null
+++ b/autodoc/source/parser/tokens/stmstate.cxx
@@ -0,0 +1,46 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <tokens/stmstate.hxx>
+
+
+// NOT FULLY DECLARED SERVICES
+
+StmArrayStatus *
+StmStatus::AsArray()
+{
+ return 0;
+}
+
+StmBoundsStatus *
+StmStatus::AsBounds()
+{
+ return 0;
+}
+
+
diff --git a/autodoc/source/parser/tokens/stmstfin.cxx b/autodoc/source/parser/tokens/stmstfin.cxx
new file mode 100644
index 000000000000..c6999e596e58
--- /dev/null
+++ b/autodoc/source/parser/tokens/stmstfin.cxx
@@ -0,0 +1,61 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <tokens/stmstfin.hxx>
+
+
+// NOT FULLY DECLARED SERVICES
+#include <tokens/tkpcontx.hxx>
+
+
+StmBoundsStatus::StmBoundsStatus( StateMachineContext &
+ o_rOwner,
+ TkpContext & i_rFollowUpContext,
+ uintt i_nStatusFunctionNr,
+ bool i_bIsDefault )
+ : pOwner(&o_rOwner),
+ pFollowUpContext(&i_rFollowUpContext),
+ nStatusFunctionNr(i_nStatusFunctionNr),
+ bIsDefault(i_bIsDefault)
+{
+}
+
+bool
+StmBoundsStatus::IsADefault() const
+{
+ return bIsDefault;
+}
+
+StmBoundsStatus *
+StmBoundsStatus::AsBounds()
+{
+ return this;
+}
+
+
+
diff --git a/autodoc/source/parser/tokens/tkp.cxx b/autodoc/source/parser/tokens/tkp.cxx
new file mode 100644
index 000000000000..900fdccefd43
--- /dev/null
+++ b/autodoc/source/parser/tokens/tkp.cxx
@@ -0,0 +1,72 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <tokens/tkp.hxx>
+
+// NOT FULLY DECLARED SERVICES
+#include <tools/tkpchars.hxx>
+#include <tokens/tkpcontx.hxx>
+
+
+
+TokenParser::TokenParser()
+ : pChars(0),
+ bHasMore(false)
+{
+}
+
+void
+TokenParser::Start( CharacterSource & i_rSource )
+{
+ InitSource(i_rSource);
+}
+
+void
+TokenParser::GetNextToken()
+{
+ csv_assert(pChars != 0);
+
+ bHasMore = NOT pChars->IsFinished();
+
+ for ( bool bDone = NOT bHasMore; NOT bDone; )
+ {
+ CurrentContext().ReadCharChain(*pChars);
+ bDone = CurrentContext().PassNewToken();
+ SetCurrentContext(CurrentContext().FollowUpContext());
+ }
+}
+
+void
+TokenParser::InitSource( CharacterSource & i_rSource )
+{
+ pChars = &i_rSource;
+ bHasMore = true;
+ SetStartContext();
+}
+
+
diff --git a/autodoc/source/parser/tokens/tkpcontx.cxx b/autodoc/source/parser/tokens/tkpcontx.cxx
new file mode 100644
index 000000000000..cbaab756c038
--- /dev/null
+++ b/autodoc/source/parser/tokens/tkpcontx.cxx
@@ -0,0 +1,68 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <tokens/tkpcontx.hxx>
+
+// NOT FULLY DECLARED SERVICES
+
+
+
+TkpNullContext G_aNullContext;
+
+TkpNullContext &
+TkpContext::Null_()
+{
+ return G_aNullContext;
+}
+
+TkpNullContext::~TkpNullContext()
+{
+}
+
+void
+TkpNullContext::ReadCharChain( CharacterSource & )
+{
+}
+
+bool
+TkpNullContext::PassNewToken()
+{
+ return false;
+}
+
+TkpContext &
+TkpNullContext::FollowUpContext()
+{
+ return *this;
+}
+
+
+
+
+
+
diff --git a/autodoc/source/parser/tokens/tkpstama.cxx b/autodoc/source/parser/tokens/tkpstama.cxx
new file mode 100644
index 000000000000..9cf964601798
--- /dev/null
+++ b/autodoc/source/parser/tokens/tkpstama.cxx
@@ -0,0 +1,177 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <tokens/tkpstama.hxx>
+
+// NOT FULLY DECLARED SERVICES
+// #include <srcfind.hxx>
+#include <tokens/stmstarr.hxx>
+//#include <parseinc.hxx>
+#include <tools/tkpchars.hxx>
+
+
+const intt C_nStatuslistResizeValue = 32;
+const intt C_nTopStatus = 0;
+
+StateMachine::StateMachine( intt in_nStatusSize,
+ intt in_nInitial_StatusListSize )
+ : pStati(new StmStatus*[in_nInitial_StatusListSize]),
+ nCurrentStatus(C_nTopStatus),
+ nPeekedStatus(C_nTopStatus),
+ nStatusSize(in_nStatusSize),
+ nNrofStati(0),
+ nStatiSpace(in_nInitial_StatusListSize)
+{
+ csv_assert(in_nStatusSize > 0);
+ csv_assert(in_nInitial_StatusListSize > 0);
+
+ memset(pStati, 0, sizeof(StmStatus*) * nStatiSpace);
+}
+
+intt
+StateMachine::AddStatus(StmStatus * let_dpStatus)
+{
+ if (nNrofStati == nStatiSpace)
+ {
+ ResizeStati();
+ }
+ pStati[nNrofStati] = let_dpStatus;
+ return nNrofStati++;
+}
+
+void
+StateMachine::AddToken( const char * in_sToken,
+ TextToken::F_CRTOK in_fTokenCreateFunction,
+ const INT16 * in_aBranches,
+ INT16 in_nBoundsStatus )
+{
+ if (csv::no_str(in_sToken))
+ return;
+
+ // Durch existierende Stati durchhangeln:
+ nCurrentStatus = 0;
+ nPeekedStatus = 0;
+
+ for ( const char * pChar = in_sToken;
+ *pChar != NULCH;
+ ++pChar )
+ {
+ Peek(*pChar);
+ StmStatus & rPst = Status(nPeekedStatus);
+ if ( rPst.IsADefault() OR rPst.AsBounds() != 0 )
+ {
+ nPeekedStatus = AddStatus( new StmArrayStatus(nStatusSize, in_aBranches, 0, false ) );
+ CurrentStatus().SetBranch( *pChar, nPeekedStatus );
+ }
+ nCurrentStatus = nPeekedStatus;
+ } // end for
+ StmArrayStatus & rLastStatus = CurrentStatus();
+ rLastStatus.SetTokenCreateFunction(in_fTokenCreateFunction);
+ for (intt i = 0; i < nStatusSize; i++)
+ {
+ if (Status(rLastStatus.NextBy(i)).AsBounds() != 0)
+ rLastStatus.SetBranch(i,in_nBoundsStatus);
+ } // end for
+}
+
+StateMachine::~StateMachine()
+{
+ for (intt i = 0; i < nNrofStati; i++)
+ {
+ delete pStati[i];
+ }
+ delete [] pStati;
+}
+
+StmBoundsStatus &
+StateMachine::GetCharChain( TextToken::F_CRTOK & o_nTokenCreateFunction,
+ CharacterSource & io_rText )
+{
+ nCurrentStatus = C_nTopStatus;
+
+ Peek(io_rText.CurChar());
+ while (BoundsStatus() == 0)
+ {
+ nCurrentStatus = nPeekedStatus;
+ Peek(io_rText.MoveOn());
+ }
+ o_nTokenCreateFunction = CurrentStatus().TokenCreateFunction();
+
+ return *BoundsStatus();
+}
+
+void
+StateMachine::ResizeStati()
+{
+ intt nNewSize = nStatiSpace + C_nStatuslistResizeValue;
+ intt i = 0;
+ StatusList pNewStati = new StmStatus*[nNewSize];
+
+ for ( ; i < nNrofStati; i++)
+ {
+ pNewStati[i] = pStati[i];
+ }
+ memset( pNewStati+i,
+ 0,
+ (nNewSize-i) * sizeof(StmStatus*) );
+
+ delete [] pStati;
+ pStati = pNewStati;
+ nStatiSpace = nNewSize;
+}
+
+StmStatus &
+StateMachine::Status(intt in_nStatusNr) const
+{
+ csv_assert( csv::in_range(intt(0), in_nStatusNr, intt(nNrofStati)) );
+ return *pStati[in_nStatusNr];
+}
+
+StmArrayStatus &
+StateMachine::CurrentStatus() const
+{
+ StmArrayStatus * pCurSt = Status(nCurrentStatus).AsArray();
+
+ csv_assert(pCurSt != 0);
+// if(pCurSt == 0)
+// csv_assert(false);
+ return *pCurSt;
+}
+
+StmBoundsStatus *
+StateMachine::BoundsStatus() const
+{
+ return Status(nPeekedStatus).AsBounds();
+}
+
+void
+StateMachine::Peek(intt in_nBranch)
+{
+ StmArrayStatus & rSt = CurrentStatus();
+ nPeekedStatus = rSt.NextBy(in_nBranch);
+}
diff --git a/autodoc/source/parser/tokens/tokdeal.cxx b/autodoc/source/parser/tokens/tokdeal.cxx
new file mode 100644
index 000000000000..4f4273b36aba
--- /dev/null
+++ b/autodoc/source/parser/tokens/tokdeal.cxx
@@ -0,0 +1,50 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <tokens/tokdeal.hxx>
+#include <tokens/token.hxx>
+
+
+// NOT FULLY DEFINED SERVICES
+
+
+
+void
+Tok_Eof::DealOut( TokenDealer & o_rDealer )
+{
+ o_rDealer.Deal_Eof();
+};
+
+const char *
+Tok_Eof::Text() const
+{
+ return "";
+}
+
+
+
diff --git a/autodoc/source/parser_i/idl/cx_idlco.cxx b/autodoc/source/parser_i/idl/cx_idlco.cxx
new file mode 100644
index 000000000000..3ba1a41891af
--- /dev/null
+++ b/autodoc/source/parser_i/idl/cx_idlco.cxx
@@ -0,0 +1,545 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <s2_luidl/cx_idlco.hxx>
+
+
+// NOT FULLY DECLARED SERVICES
+#include <s2_luidl/cx_sub.hxx>
+#include <s2_dsapi/cx_dsapi.hxx>
+#include <tools/tkpchars.hxx>
+#include <tokens/tkpstam2.hxx>
+#include <s2_luidl/tk_ident.hxx>
+#include <s2_luidl/tk_keyw.hxx>
+#include <s2_luidl/tk_punct.hxx>
+#include <s2_luidl/tokrecv.hxx>
+#include <x_parse2.hxx>
+
+
+namespace csi
+{
+namespace uidl
+{
+
+
+const intt C_nCppInitialNrOfStati = 400;
+const intt C_nStatusSize = 128;
+
+
+
+const uintt nF_fin_Error = 1;
+const uintt nF_fin_Ignore = 2;
+const uintt nF_fin_Identifier = 3;
+const uintt nF_fin_Keyword = 4;
+const uintt nF_fin_Punctuation = 5;
+const uintt nF_fin_EOL = 6;
+const uintt nF_fin_EOF = 7;
+
+const uintt nF_goto_MLDocu = 10;
+const uintt nF_goto_SLDocu = 11;
+const uintt nF_goto_MLComment = 12;
+const uintt nF_goto_SLComment = 13;
+const uintt nF_goto_Praeprocessor = 14;
+const uintt nF_goto_Assignment = 15;
+
+
+
+const UINT16 nTok_bty_any = 100 + TokBuiltInType::bty_any;
+const UINT16 nTok_bty_boolean = 100 + TokBuiltInType::bty_boolean;
+const UINT16 nTok_bty_byte = 100 + TokBuiltInType::bty_byte;
+const UINT16 nTok_bty_char = 100 + TokBuiltInType::bty_char;
+const UINT16 nTok_bty_double = 100 + TokBuiltInType::bty_double;
+const UINT16 nTok_bty_hyper = 100 + TokBuiltInType::bty_hyper;
+const UINT16 nTok_bty_long = 100 + TokBuiltInType::bty_long;
+const UINT16 nTok_bty_short = 100 + TokBuiltInType::bty_short;
+const UINT16 nTok_bty_string = 100 + TokBuiltInType::bty_string;
+const UINT16 nTok_bty_void = 100 + TokBuiltInType::bty_void;
+const UINT16 nTok_bty_ellipse = 100 + TokBuiltInType::bty_ellipse;
+
+const UINT16 nTok_tmod_unsigned = 200 + TokTypeModifier::tmod_unsigned;
+const UINT16 nTok_tmod_sequence = 200 + TokTypeModifier::tmod_sequence;
+
+const UINT16 nTok_ph_in = 250 + TokParameterHandling::ph_in;
+const UINT16 nTok_ph_out = 250 + TokParameterHandling::ph_out;
+const UINT16 nTok_ph_inout = 250 + TokParameterHandling::ph_inout;
+
+const UINT16 nTok_mt_attribute = 300 + TokMetaType::mt_attribute;
+const UINT16 nTok_mt_constants = 300 + TokMetaType::mt_constants;
+const UINT16 nTok_mt_enum = 300 + TokMetaType::mt_enum;
+const UINT16 nTok_mt_exception = 300 + TokMetaType::mt_exception;
+const UINT16 nTok_mt_ident = 300 + TokMetaType::mt_ident;
+const UINT16 nTok_mt_interface = 300 + TokMetaType::mt_interface;
+const UINT16 nTok_mt_module = 300 + TokMetaType::mt_module;
+const UINT16 nTok_mt_property = 300 + TokMetaType::mt_property;
+const UINT16 nTok_mt_service = 300 + TokMetaType::mt_service;
+const UINT16 nTok_mt_singleton = 300 + TokMetaType::mt_singleton;
+const UINT16 nTok_mt_struct = 300 + TokMetaType::mt_struct;
+const UINT16 nTok_mt_typedef = 300 + TokMetaType::mt_typedef;
+const UINT16 nTok_mt_uik = 300 + TokMetaType::mt_uik;
+
+const UINT16 nTok_ste_bound = 400 + TokStereotype::ste_bound;
+const UINT16 nTok_ste_constrained = 400 + TokStereotype::ste_constrained;
+const UINT16 nTok_ste_const = 400 + TokStereotype::ste_const;
+const UINT16 nTok_ste_maybeambiguous = 400 + TokStereotype::ste_maybeambiguous;
+const UINT16 nTok_ste_maybedefault = 400 + TokStereotype::ste_maybedefault;
+const UINT16 nTok_ste_maybevoid = 400 + TokStereotype::ste_maybevoid;
+const UINT16 nTok_ste_oneway = 400 + TokStereotype::ste_oneway;
+const UINT16 nTok_ste_optional = 400 + TokStereotype::ste_optional;
+const UINT16 nTok_ste_readonly = 400 + TokStereotype::ste_readonly;
+const UINT16 nTok_ste_removable = 400 + TokStereotype::ste_removable;
+const UINT16 nTok_ste_virtual = 400 + TokStereotype::ste_virtual;
+const UINT16 nTok_ste_transient = 400 + TokStereotype::ste_transient;
+const UINT16 nTok_ste_published = 400 + TokStereotype::ste_published;
+
+const UINT16 nTok_raises = 501;
+const UINT16 nTok_needs = 502;
+const UINT16 nTok_observes = 503;
+
+const UINT16 nTok_assignment = 550;
+
+const UINT16 nTok_ignore = 600;
+const UINT16 nTok_none_MLCommentBegin = 601;
+const UINT16 nTok_none_SLCommentBegin = 602;
+const UINT16 nTok_none_MLDocuBegin = 603;
+const UINT16 nTok_none_SLDocuBegin = 604;
+const UINT16 nTok_none_PraeprocessorBegin = 605;
+
+
+const UINT16 nTok_punct_BracketOpen = 700 + TokPunctuation::BracketOpen;
+const UINT16 nTok_punct_BracketClose = 700 + TokPunctuation::BracketClose;
+const UINT16 nTok_punct_ArrayBracketOpen = 700 + TokPunctuation::ArrayBracketOpen;
+const UINT16 nTok_punct_ArrayBracketClose = 700 + TokPunctuation::ArrayBracketClose;
+const UINT16 nTok_punct_CurledBracketOpen = 700 + TokPunctuation::CurledBracketOpen;
+const UINT16 nTok_punct_CurledBracketClose = 700 + TokPunctuation::CurledBracketClose;
+const UINT16 nTok_punct_Semicolon = 700 + TokPunctuation::Semicolon;
+const UINT16 nTok_punct_Colon = 700 + TokPunctuation::Colon;
+const UINT16 nTok_punct_DoubleColon = 700 + TokPunctuation::DoubleColon;
+const UINT16 nTok_punct_Comma = 700 + TokPunctuation::Comma;
+const UINT16 nTok_punct_Minus = 700 + TokPunctuation::Minus;
+const UINT16 nTok_punct_Fullstop = 700 + TokPunctuation::Fullstop;
+const UINT16 nTok_punct_Lesser = 700 + TokPunctuation::Lesser;
+const UINT16 nTok_punct_Greater = 700 + TokPunctuation::Greater;
+
+const UINT16 nTok_EOL = 801;
+const UINT16 nTok_EOF = 802;
+
+
+
+Context_UidlCode::Context_UidlCode( Token_Receiver & o_rReceiver,
+ DYN TkpDocuContext & let_drContext_Docu )
+ : aStateMachine(C_nStatusSize,C_nCppInitialNrOfStati),
+ pReceiver(&o_rReceiver),
+ pDocuContext(&let_drContext_Docu),
+ dpContext_MLComment(0),
+ dpContext_SLComment(0),
+ dpContext_Preprocessor(0),
+ dpContext_Assignment(0),
+ pNewToken(0),
+ pFollowUpContext(0)
+{
+ dpContext_MLComment = new Context_MLComment(o_rReceiver,*this),
+ dpContext_SLComment = new Context_SLComment(o_rReceiver,*this),
+ dpContext_Preprocessor = new Context_Praeprocessor(o_rReceiver,*this),
+ dpContext_Assignment = new Context_Assignment(o_rReceiver,*this),
+
+ pDocuContext->SetParentContext(*this,"*/");
+ SetupStateMachine();
+}
+
+Context_UidlCode::~Context_UidlCode()
+{
+}
+
+void
+Context_UidlCode::ReadCharChain( CharacterSource & io_rText )
+{
+ pNewToken = 0;
+
+ UINT16 nTokenId = 0;
+ StmBoundsStatu2 & rBound = aStateMachine.GetCharChain(nTokenId, io_rText);
+
+ // !!!
+ // The order of the next two lines is essential, because
+ // pFollowUpContext may be changed by PerformStatusFunction() also,
+ // which then MUST override the previous assignment.
+ pFollowUpContext = rBound.FollowUpContext();
+ PerformStatusFunction(rBound.StatusFunctionNr(), nTokenId, io_rText);
+}
+
+bool
+Context_UidlCode::PassNewToken()
+{
+ if (pNewToken)
+ {
+ pReceiver->Receive(*pNewToken.Release());
+ return true;
+ }
+ return false;
+}
+
+TkpContext &
+Context_UidlCode::FollowUpContext()
+{
+ csv_assert(pFollowUpContext != 0);
+ return *pFollowUpContext;
+}
+
+void
+Context_UidlCode::PerformStatusFunction( uintt i_nStatusSignal,
+ UINT16 i_nTokenId,
+ CharacterSource & io_rText )
+{
+ switch (i_nStatusSignal)
+ {
+ case nF_fin_Error:
+ // KORR_FUTURE
+ throw X_AutodocParser(X_AutodocParser::x_InvalidChar);
+ // no break, because of throw
+ case nF_fin_Ignore:
+ pNewToken = 0;
+ io_rText.CutToken();
+ break;
+ case nF_fin_Identifier:
+ pNewToken = new TokIdentifier(io_rText.CutToken());
+ break;
+ case nF_fin_Keyword:
+ io_rText.CutToken();
+ switch ( i_nTokenId / 50 )
+ {
+ case 2:
+ pNewToken = new TokBuiltInType(i_nTokenId - 100);
+ break;
+ case 4:
+ pNewToken = new TokTypeModifier(i_nTokenId - 200);
+ break;
+ case 5:
+ pNewToken = new TokParameterHandling(i_nTokenId - 250);
+ break;
+ case 6:
+ pNewToken = new TokMetaType(i_nTokenId - 300);
+ break;
+ case 8:
+ pNewToken = new TokStereotype(i_nTokenId - 400);
+ break;
+ case 10:
+ switch (i_nTokenId-500)
+ {
+ case 1:
+ pNewToken = new TokRaises;
+ break;
+ case 2:
+ pNewToken = new TokNeeds;
+ break;
+ case 3:
+ pNewToken = new TokObserves;
+ break;
+ default:
+ csv_assert(false);
+ }
+ break;
+ default:
+ csv_assert(false);
+ } // end switch ( i_nTokenId / 50 )
+ break;
+ case nF_fin_Punctuation:
+ io_rText.CutToken();
+ if (i_nTokenId == nTok_punct_DoubleColon)
+ pNewToken = new TokNameSeparator;
+ else
+ pNewToken = new TokPunctuation(i_nTokenId - 700);
+ break;
+ case nF_fin_EOL:
+ io_rText.CutToken();
+ pNewToken = new Tok_EOL;
+ pReceiver->Increment_CurLine();
+ break;
+ case nF_fin_EOF:
+ pNewToken = new Tok_EOF;
+ break;
+ case nF_goto_MLDocu:
+ while ( io_rText.CurChar() == '*')
+ io_rText.MoveOn();
+ io_rText.CutToken();
+ pDocuContext->SetMode_IsMultiLine(true);
+ break;
+ case nF_goto_SLDocu:
+ io_rText.CutToken();
+ pDocuContext->SetMode_IsMultiLine(false);
+ break;
+ case nF_goto_MLComment:
+ break;
+ case nF_goto_SLComment:
+ break;
+ case nF_goto_Praeprocessor:
+ break;
+ case nF_goto_Assignment:
+ break;
+ default:
+ csv_assert(false);
+ } // end switch (i_nStatusSignal)
+}
+
+void
+Context_UidlCode::SetupStateMachine()
+{
+ // Besondere Array-Stati (kein Tokenabschluss oder Kontextwechsel):
+// const INT16 top = 0; // Top-Status
+ const INT16 wht = 1; // Whitespace-berlese-Status
+ const INT16 bez = 2; // Bezeichner-lese-Status
+
+ // Tokenfinish-Stati:
+ const INT16 finErr = 3;
+ const INT16 finIgn = 4;
+ const INT16 finBez = 5;
+ const INT16 finKeyw = 6;
+ const INT16 finPunct = 7;
+ const INT16 finEOL = 8;
+ const INT16 finEOF = 9;
+
+ // Kontextwechsel-Stati:
+ const INT16 gotoMld = 10;
+ const INT16 gotoSld = 11;
+ const INT16 gotoMlc = 12;
+ const INT16 gotoSlc = 13;
+ const INT16 gotoPrp = 14;
+ const INT16 gotoAsg = 15;
+
+ // Konstanten zur Benutzung in der Tabelle:
+ const INT16 err = finErr;
+ const INT16 fbz = finBez;
+ const INT16 fig = finIgn;
+ const INT16 fof = finEOF;
+// const INT16 fkw = finKeyw;
+// const INT16 fpc = finPunct;
+
+ /// Die '0'en werden spaeter durch AddToken() ersetzt.
+
+ const INT16 A_nTopStatus[C_nStatusSize] =
+ // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+ {fof,err,err,err,err,err,err,err,err,wht, 0,wht,wht, 0,err,err,
+ err,err,err,err,err,err,err,err,err,err,fof,err,err,err,err,err, // 16 ...
+ wht,err,wht, 0,err,err,err,err, 0, 0,err,err, 0, 0, 0,err,
+ bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,err,err,err,err,err,err, // 48 ...
+ err,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,
+ bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez, 0,err, 0,err,bez, // 80 ...
+ err,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,
+ bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez, 0,err, 0,err,err, // 112 ...
+ };
+
+ const INT16 A_nWhitespaceStatus[C_nStatusSize] =
+ // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+ {fof,err,err,err,err,err,err,err,err,wht,fig,wht,wht,fig,err,err,
+ err,err,err,err,err,err,err,err,err,err,fof,err,err,err,err,err, // 16 ...
+ wht,fig,wht,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,
+ fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig, // 48 ...
+ fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,
+ fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig, // 80 ...
+ fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,
+ fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,err // 112 ...
+ };
+
+ const INT16 A_nBezeichnerStatus[C_nStatusSize] =
+ // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+ {fbz,err,err,err,err,err,err,err,err,fbz,fbz,fbz,fbz,fbz,err,err,
+ err,err,err,err,err,err,err,err,err,err,fbz,err,err,err,err,err, // 16 ...
+ fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,
+ bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,fbz,fbz,fbz,fbz,fbz,fbz, // 48 ...
+ fbz,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,
+ bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,fbz,fbz,fbz,fbz,bez, // 80 ...
+ fbz,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,
+ bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,fbz,fbz,fbz,fbz,err // 112 ...
+ };
+
+ const INT16 A_nPunctDefStatus[C_nStatusSize] =
+ // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+ {err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,
+ err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,err, // 16 ...
+ err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,
+ err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,err, // 48 ...
+ err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,
+ err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,err, // 80 ...
+ err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,
+ err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,err // 112 ...
+ };
+
+ const INT16 A_nKeywordDefStatus[C_nStatusSize] =
+ // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+ {fbz,err,err,err,err,err,err,err,err,fbz,fbz,fbz,fbz,fbz,err,err,
+ err,err,err,err,err,err,err,err,err,err,fbz,err,err,err,err,err, // 16 ...
+ fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,
+ bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,fbz,fbz,fbz,fbz,fbz,fbz, // 48 ...
+ fbz,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,
+ bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,fbz,fbz,fbz,fbz,bez, // 80 ...
+ fbz,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,
+ bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,fbz,fbz,fbz,fbz,err // 112 ...
+ };
+
+ DYN StmArrayStatu2 * dpStatusTop
+ = new StmArrayStatu2( C_nStatusSize, A_nTopStatus, 0, true);
+ DYN StmArrayStatu2 * dpStatusWhite
+ = new StmArrayStatu2( C_nStatusSize, A_nWhitespaceStatus, 0, true);
+ DYN StmArrayStatu2 * dpStatusBez
+ = new StmArrayStatu2( C_nStatusSize, A_nBezeichnerStatus, 0, true);
+
+ DYN StmBoundsStatu2 * dpBst_finErr
+ = new StmBoundsStatu2( *this, TkpContext_Null2_(), nF_fin_Error, true );
+ DYN StmBoundsStatu2 * dpBst_finIgn
+ = new StmBoundsStatu2( *this, *this, nF_fin_Ignore, true );
+ DYN StmBoundsStatu2 * dpBst_finBez
+ = new StmBoundsStatu2( *this, *this, nF_fin_Identifier, true );
+ DYN StmBoundsStatu2 * dpBst_finKeyw
+ = new StmBoundsStatu2( *this, *this, nF_fin_Keyword, false );
+ DYN StmBoundsStatu2 * dpBst_finPunct
+ = new StmBoundsStatu2( *this, *this, nF_fin_Punctuation, false );
+ DYN StmBoundsStatu2 * dpBst_finEOL
+ = new StmBoundsStatu2( *this, *this, nF_fin_EOL, false );
+ DYN StmBoundsStatu2 * dpBst_finEOF
+ = new StmBoundsStatu2( *this, TkpContext_Null2_(), nF_fin_EOF, false );
+
+ DYN StmBoundsStatu2 * dpBst_gotoMld
+ = new StmBoundsStatu2( *this, *pDocuContext, nF_goto_MLDocu, false );
+ DYN StmBoundsStatu2 * dpBst_gotoSld
+ = new StmBoundsStatu2( *this, *pDocuContext, nF_goto_SLDocu, false );
+ DYN StmBoundsStatu2 * dpBst_gotoMlc
+ = new StmBoundsStatu2( *this, *dpContext_MLComment, nF_goto_MLComment, false );
+ DYN StmBoundsStatu2 * dpBst_gotoSlc
+ = new StmBoundsStatu2( *this, *dpContext_SLComment, nF_goto_SLComment, false );
+ DYN StmBoundsStatu2 * dpBst_gotoPrp
+ = new StmBoundsStatu2( *this, *dpContext_Preprocessor, nF_goto_Praeprocessor, false );
+ DYN StmBoundsStatu2 * dpBst_gotoAsg
+ = new StmBoundsStatu2( *this, *dpContext_Assignment, nF_goto_Assignment, false );
+
+ // dpMain aufbauen:
+ aStateMachine.AddStatus(dpStatusTop);
+
+ aStateMachine.AddStatus(dpStatusWhite);
+ aStateMachine.AddStatus(dpStatusBez);
+
+ aStateMachine.AddStatus(dpBst_finErr);
+ aStateMachine.AddStatus(dpBst_finIgn);
+ aStateMachine.AddStatus(dpBst_finBez);
+ aStateMachine.AddStatus(dpBst_finKeyw);
+ aStateMachine.AddStatus(dpBst_finPunct);
+ aStateMachine.AddStatus(dpBst_finEOL);
+ aStateMachine.AddStatus(dpBst_finEOF);
+
+ aStateMachine.AddStatus(dpBst_gotoMld);
+ aStateMachine.AddStatus(dpBst_gotoSld);
+ aStateMachine.AddStatus(dpBst_gotoMlc);
+ aStateMachine.AddStatus(dpBst_gotoSlc);
+ aStateMachine.AddStatus(dpBst_gotoPrp);
+ aStateMachine.AddStatus(dpBst_gotoAsg);
+
+ aStateMachine.AddToken("any", nTok_bty_any, A_nKeywordDefStatus, finKeyw);
+ aStateMachine.AddToken("attribute", nTok_mt_attribute, A_nKeywordDefStatus, finKeyw);
+ aStateMachine.AddToken("boolean", nTok_bty_boolean, A_nKeywordDefStatus, finKeyw);
+ aStateMachine.AddToken("bound", nTok_ste_bound, A_nKeywordDefStatus, finKeyw);
+ aStateMachine.AddToken("byte", nTok_bty_byte, A_nKeywordDefStatus, finKeyw);
+ aStateMachine.AddToken("char", nTok_bty_char, A_nKeywordDefStatus, finKeyw);
+ aStateMachine.AddToken("const", nTok_ste_const, A_nKeywordDefStatus, finKeyw);
+ aStateMachine.AddToken("constants", nTok_mt_constants, A_nKeywordDefStatus, finKeyw);
+ aStateMachine.AddToken("constrained",
+ nTok_ste_constrained, A_nKeywordDefStatus, finKeyw);
+ aStateMachine.AddToken("double", nTok_bty_double, A_nKeywordDefStatus, finKeyw);
+ aStateMachine.AddToken("enum", nTok_mt_enum, A_nKeywordDefStatus, finKeyw);
+ aStateMachine.AddToken("exception", nTok_mt_exception, A_nKeywordDefStatus, finKeyw);
+ aStateMachine.AddToken("hyper", nTok_bty_hyper, A_nKeywordDefStatus, finKeyw);
+ aStateMachine.AddToken("ident", nTok_mt_ident, A_nKeywordDefStatus, finKeyw);
+ aStateMachine.AddToken("in", nTok_ph_in, A_nKeywordDefStatus, finKeyw);
+ aStateMachine.AddToken("inout", nTok_ph_inout, A_nKeywordDefStatus, finKeyw);
+ aStateMachine.AddToken("interface", nTok_mt_interface, A_nKeywordDefStatus, finKeyw);
+ aStateMachine.AddToken("long", nTok_bty_long, A_nKeywordDefStatus, finKeyw);
+ aStateMachine.AddToken("maybeambiguous",
+ nTok_ste_maybeambiguous,A_nKeywordDefStatus, finKeyw);
+ aStateMachine.AddToken("maybedefault",
+ nTok_ste_maybedefault, A_nKeywordDefStatus, finKeyw);
+ aStateMachine.AddToken("maybevoid", nTok_ste_maybevoid, A_nKeywordDefStatus, finKeyw);
+ aStateMachine.AddToken("module", nTok_mt_module, A_nKeywordDefStatus, finKeyw);
+ aStateMachine.AddToken("needs", nTok_needs, A_nKeywordDefStatus, finKeyw);
+ aStateMachine.AddToken("observes", nTok_observes, A_nKeywordDefStatus, finKeyw);
+ aStateMachine.AddToken("oneway", nTok_ste_oneway, A_nKeywordDefStatus, finKeyw);
+ aStateMachine.AddToken("optional", nTok_ste_optional, A_nKeywordDefStatus, finKeyw);
+ aStateMachine.AddToken("out", nTok_ph_out, A_nKeywordDefStatus, finKeyw);
+ aStateMachine.AddToken("property", nTok_mt_property, A_nKeywordDefStatus, finKeyw);
+ aStateMachine.AddToken("published", nTok_ste_published, A_nKeywordDefStatus, finKeyw);
+ aStateMachine.AddToken("raises", nTok_raises, A_nKeywordDefStatus, finKeyw);
+ aStateMachine.AddToken("readonly", nTok_ste_readonly, A_nKeywordDefStatus, finKeyw);
+ aStateMachine.AddToken("removable", nTok_ste_removable, A_nKeywordDefStatus, finKeyw);
+ aStateMachine.AddToken("sequence", nTok_tmod_sequence, A_nKeywordDefStatus, finKeyw);
+ aStateMachine.AddToken("service", nTok_mt_service, A_nKeywordDefStatus, finKeyw);
+ aStateMachine.AddToken("short", nTok_bty_short, A_nKeywordDefStatus, finKeyw);
+ aStateMachine.AddToken("singleton", nTok_mt_singleton, A_nKeywordDefStatus, finKeyw);
+ aStateMachine.AddToken("string", nTok_bty_string, A_nKeywordDefStatus, finKeyw);
+ aStateMachine.AddToken("struct", nTok_mt_struct, A_nKeywordDefStatus, finKeyw);
+ aStateMachine.AddToken("transient", nTok_ste_transient, A_nKeywordDefStatus, finKeyw);
+ aStateMachine.AddToken("typedef", nTok_mt_typedef, A_nKeywordDefStatus, finKeyw);
+ aStateMachine.AddToken("uik", nTok_mt_uik, A_nKeywordDefStatus, finKeyw);
+ aStateMachine.AddToken("unsigned", nTok_tmod_unsigned, A_nKeywordDefStatus, finKeyw);
+ aStateMachine.AddToken("virtual", nTok_ste_virtual, A_nKeywordDefStatus, finKeyw);
+ aStateMachine.AddToken("void", nTok_bty_void, A_nKeywordDefStatus, finKeyw);
+ aStateMachine.AddToken("...", nTok_bty_ellipse, A_nPunctDefStatus, finKeyw);
+
+ aStateMachine.AddToken("=", nTok_assignment, A_nPunctDefStatus, gotoAsg);
+
+ aStateMachine.AddToken("(", nTok_punct_BracketOpen, A_nPunctDefStatus, finPunct);
+ aStateMachine.AddToken(")", nTok_punct_BracketClose,A_nPunctDefStatus, finPunct);
+ aStateMachine.AddToken("[", nTok_punct_ArrayBracketOpen,
+ A_nPunctDefStatus, finIgn);
+ aStateMachine.AddToken("]", nTok_punct_ArrayBracketClose,
+ A_nPunctDefStatus, finIgn);
+ aStateMachine.AddToken("{", nTok_punct_CurledBracketOpen,
+ A_nPunctDefStatus, finPunct);
+ aStateMachine.AddToken("}", nTok_punct_CurledBracketClose,
+ A_nPunctDefStatus, finPunct);
+ aStateMachine.AddToken("<", nTok_punct_Lesser, A_nPunctDefStatus, finPunct);
+ aStateMachine.AddToken(">", nTok_punct_Greater, A_nPunctDefStatus, finPunct);
+ aStateMachine.AddToken(";", nTok_punct_Semicolon, A_nPunctDefStatus, finPunct);
+ aStateMachine.AddToken(":", nTok_punct_Colon, A_nPunctDefStatus, finPunct);
+ aStateMachine.AddToken("::", nTok_punct_DoubleColon, A_nPunctDefStatus, finPunct);
+ aStateMachine.AddToken(",", nTok_punct_Comma, A_nPunctDefStatus, finPunct);
+ aStateMachine.AddToken("-", nTok_punct_Minus, A_nPunctDefStatus, finPunct);
+ aStateMachine.AddToken(".", nTok_punct_Fullstop, A_nPunctDefStatus, finPunct);
+ aStateMachine.AddToken("/**", nTok_none_MLDocuBegin, A_nPunctDefStatus, gotoMld);
+ aStateMachine.AddToken("///", nTok_none_SLDocuBegin, A_nPunctDefStatus, gotoSld);
+ aStateMachine.AddToken("/*", nTok_none_MLCommentBegin,
+ A_nPunctDefStatus, gotoMlc);
+ aStateMachine.AddToken("//", nTok_none_SLCommentBegin,
+ A_nPunctDefStatus, gotoSlc);
+ aStateMachine.AddToken("/**/", nTok_ignore, A_nPunctDefStatus, finIgn);
+ aStateMachine.AddToken("#", nTok_none_PraeprocessorBegin,
+ A_nPunctDefStatus, gotoPrp);
+ aStateMachine.AddToken("\r\n", nTok_EOL, A_nPunctDefStatus, finEOL);
+ aStateMachine.AddToken("\r", nTok_EOL, A_nPunctDefStatus, finEOL);
+ aStateMachine.AddToken("\n", nTok_EOL, A_nPunctDefStatus, finEOL);
+ aStateMachine.AddToken("\n\r", nTok_EOL, A_nPunctDefStatus, finEOL);
+};
+
+
+} // namespace uidl
+} // namespace csi
+
diff --git a/autodoc/source/parser_i/idl/cx_sub.cxx b/autodoc/source/parser_i/idl/cx_sub.cxx
new file mode 100644
index 000000000000..146be0cf9c62
--- /dev/null
+++ b/autodoc/source/parser_i/idl/cx_sub.cxx
@@ -0,0 +1,146 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <s2_luidl/cx_sub.hxx>
+
+
+
+// NOT FULLY DECLARED SERVICES
+#include <s2_luidl/tokrecv.hxx>
+#include <../../parser/inc/tokens/parseinc.hxx>
+#include <x_parse2.hxx>
+#include <s2_luidl/tk_const.hxx>
+
+
+
+namespace csi
+{
+namespace uidl
+{
+
+bool
+Cx_Base::PassNewToken()
+{
+ if (pNewToken)
+ {
+ rReceiver.Receive(*pNewToken.Release());
+ return true;
+ }
+ return false;
+}
+
+TkpContext &
+Cx_Base::FollowUpContext()
+{
+ csv_assert(pFollowUpContext != 0);
+ return *pFollowUpContext;
+}
+
+void
+Context_MLComment::ReadCharChain( CharacterSource & io_rText )
+{
+ char cNext = NULCH;
+
+ do {
+ do {
+ cNext = jumpTo(io_rText,'*','\n');
+ if (cNext == '\n')
+ {
+ Receiver().Increment_CurLine();
+ cNext = io_rText.MoveOn();
+ }
+ else if (cNext == NULCH)
+ throw X_AutodocParser(X_AutodocParser::x_UnexpectedEOF);
+ } while (cNext != '*');
+
+ cNext = jumpOver(io_rText,'*');
+ if (cNext == NULCH)
+ throw X_AutodocParser(X_AutodocParser::x_UnexpectedEOF);
+ } while (cNext != '/');
+ io_rText.MoveOn();
+ io_rText.CutToken();
+ SetToken(0);
+}
+
+void
+Context_SLComment::ReadCharChain( CharacterSource & io_rText )
+{
+ jumpToEol(io_rText);
+ if (io_rText.CurChar() != NULCH)
+ jumpOverEol(io_rText);
+ io_rText.CutToken();
+ SetToken(0);
+
+ Receiver().Increment_CurLine();
+}
+
+void
+Context_Praeprocessor::ReadCharChain( CharacterSource & io_rText )
+{
+ jumpToEol(io_rText);
+ if (io_rText.CurChar() != NULCH)
+ jumpOverEol(io_rText);
+ io_rText.CutToken();
+ SetToken(0);
+
+ Receiver().Increment_CurLine();
+}
+
+void
+Context_Assignment::ReadCharChain( CharacterSource & io_rText )
+{
+ // KORR_FUTURE
+ // How to handle new lines within this, so he y get realised by
+ // ParserInfo?
+
+ char cNext = NULCH;
+ do {
+ if ( (cNext = jumpTo(io_rText,';',',','"','}')) == NULCH )
+ throw X_AutodocParser(X_AutodocParser::x_UnexpectedEOF);
+ if (cNext == '"')
+ {
+ cNext = io_rText.MoveOn();
+ while (cNext != '"')
+ {
+ if ( (cNext = jumpTo(io_rText,'"','\\')) == NULCH )
+ throw X_AutodocParser(X_AutodocParser::x_UnexpectedEOF);
+ if (cNext == '\\')
+ io_rText.MoveOn();
+ }
+ cNext = io_rText.MoveOn();
+ } // endif (cNext == '"')
+ } while (cNext != ';' AND cNext != ',' AND cNext != '}');
+
+ if (cNext == ',' OR cNext == ';')
+ io_rText.MoveOn();
+ SetToken(new TokAssignment(io_rText.CutToken()));
+}
+
+
+} // namespace uidl
+} // namespace csi
diff --git a/autodoc/source/parser_i/idl/distrib.cxx b/autodoc/source/parser_i/idl/distrib.cxx
new file mode 100644
index 000000000000..55e6fc6d0e79
--- /dev/null
+++ b/autodoc/source/parser_i/idl/distrib.cxx
@@ -0,0 +1,264 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <s2_luidl/distrib.hxx>
+
+
+// NOT FULLY DECLARED SERVICES
+#include <ary/doc/d_oldidldocu.hxx>
+#include <parser/parserinfo.hxx>
+#include <s2_luidl/tkp_uidl.hxx>
+#include <s2_luidl/parsenv2.hxx>
+#include <s2_luidl/tk_punct.hxx>
+#include <s2_dsapi/docu_pe2.hxx>
+#include <adc_cl.hxx>
+#include <x_parse2.hxx>
+
+
+
+const uintt C_nNO_TRY = uintt(-1);
+
+
+namespace csi
+{
+namespace uidl
+{
+
+TokenDistributor::TokenDistributor( ary::Repository & io_rRepository,
+ ParserInfo & io_rParserInfo )
+ : pTokenSource(0),
+ aDocumentation(io_rParserInfo),
+ aProcessingData( io_rRepository, aDocumentation, io_rParserInfo )
+{
+}
+
+TokenDistributor::~TokenDistributor()
+{
+}
+
+void
+TokenDistributor::TradeToken()
+{
+ bool bGoon = true;
+ while (bGoon AND NOT aProcessingData.NextTokenExists())
+ {
+ bGoon = pTokenSource->GetNextToken();
+ }
+ if (bGoon)
+ aProcessingData.ProcessCurToken();
+}
+
+TokenDistributor::ProcessingData::ProcessingData(
+ ary::Repository & io_rRepository,
+ Documentation & i_rDocuProcessor,
+ ParserInfo & io_rParserInfo )
+ : // aEnvironments
+ // aTokenQueue
+ // itCurToken
+ // aCurResult
+ nTryCount(0),
+ bFinished(false),
+ rRepository(io_rRepository),
+ rParserInfo(io_rParserInfo),
+ pDocuProcessor(&i_rDocuProcessor),
+ bPublishedRecentlyOn(false)
+{
+ itCurToken = aTokenQueue.end();
+}
+
+TokenDistributor::ProcessingData::~ProcessingData()
+{
+}
+
+void
+TokenDistributor::ProcessingData::SetTopParseEnvironment( UnoIDL_PE & io_pTopParseEnvironment )
+{
+ csv::erase_container(aEnvironments);
+ aEnvironments.push_back( EnvironmentInfo( &io_pTopParseEnvironment, 0 ) );
+ io_pTopParseEnvironment.EstablishContacts(0,rRepository,aCurResult);
+}
+
+void
+TokenDistributor::ProcessingData::Receive( DYN csi::uidl::Token & let_drToken )
+{
+ aTokenQueue.push_back( &let_drToken );
+ itCurToken = aTokenQueue.end()-1;
+}
+
+void
+TokenDistributor::ProcessingData::Increment_CurLine()
+{
+ rParserInfo.Increment_CurLine();
+}
+
+void
+TokenDistributor::ProcessingData::ProcessCurToken()
+{
+
+if (DEBUG_ShowTokens())
+{
+ Cout() << (*itCurToken)->Text() << Endl();
+}
+
+ aCurResult.reset();
+
+ CurEnvironment().ProcessToken( CurToken() );
+ AcknowledgeResult();
+}
+
+
+UnoIDL_PE &
+TokenDistributor::ProcessingData::CurEnvironment() const
+{
+ csv_assert(aEnvironments.size() > 0);
+ csv_assert(aEnvironments.back().first != 0);
+
+ return *aEnvironments.back().first;
+}
+
+bool
+TokenDistributor::ProcessingData::NextTokenExists() const
+{
+ return itCurToken != aTokenQueue.end();
+}
+
+void
+TokenDistributor::ProcessingData::AcknowledgeResult()
+{
+ if (aCurResult.eDone == done)
+ ++itCurToken;
+
+ switch ( aCurResult.eStackAction )
+ {
+ case stay:
+ if (aCurResult.eDone != done)
+ {
+ csv_assert(false);
+ }
+ break;
+ case push_sure:
+ CurEnv().Leave(push_sure);
+ aEnvironments.push_back( EnvironmentInfo(&PushEnv(), C_nNO_TRY) );
+ PushEnv().Enter(push_sure);
+ PushEnv().SetDocu(pDocuProcessor->ReleaseLastParsedDocu());
+ if (bPublishedRecentlyOn)
+ {
+ PushEnv().SetPublished();
+ bPublishedRecentlyOn = false;
+ }
+
+ break;
+ case push_try:
+ Cout() << "TestInfo: Environment tried." << Endl();
+ CurEnv().Leave(push_try);
+ aEnvironments.push_back( EnvironmentInfo(&PushEnv(), CurTokenPosition()) );
+ nTryCount++;
+ PushEnv().Enter(push_try);
+ break;
+ case pop_success:
+ CurEnv().Leave(pop_success);
+ if ( CurEnv_TriedTokenPosition() > 0 )
+ DecrementTryCount();
+ aEnvironments.pop_back();
+ CurEnv().Enter(pop_success);
+ break;
+ case pop_failure:
+ {
+ CurEnv().Leave(pop_failure);
+ if (aCurResult.eDone == done)
+ {
+ csv_assert(false);
+ }
+
+ if ( CurEnv_TriedTokenPosition() == C_nNO_TRY )
+ throw X_AutodocParser( X_AutodocParser::x_UnexpectedToken, (*itCurToken)->Text() );
+
+ itCurToken = aTokenQueue.begin() + CurEnv_TriedTokenPosition();
+ DecrementTryCount();
+ aEnvironments.pop_back();
+ CurEnv().Enter(pop_failure);
+ } break;
+ default:
+ csv_assert(false);
+ } // end switch(aCurResult.eStackAction)
+}
+
+void
+TokenDistributor::ProcessingData::DecrementTryCount()
+{
+ nTryCount--;
+ if (nTryCount == 0)
+ {
+ aTokenQueue.erase(aTokenQueue.begin(), itCurToken);
+ itCurToken = aTokenQueue.begin();
+ }
+}
+
+TokenDistributor::
+Documentation::Documentation(ParserInfo & io_rParserInfo)
+ : pDocuParseEnv(new csi::dsapi::SapiDocu_PE(io_rParserInfo)),
+ rParserInfo(io_rParserInfo),
+ pMostRecentDocu(0),
+ bIsPassedFirstDocu(false)
+{
+}
+
+TokenDistributor::
+Documentation::~Documentation()
+{
+}
+
+void
+TokenDistributor::
+Documentation::Receive( DYN csi::dsapi::Token & let_drToken )
+{
+ csv_assert(pDocuParseEnv);
+
+ pDocuParseEnv->ProcessToken(let_drToken);
+ if ( pDocuParseEnv->IsComplete() )
+ {
+ pMostRecentDocu = pDocuParseEnv->ReleaseJustParsedDocu();
+ if (NOT bIsPassedFirstDocu)
+ {
+ pMostRecentDocu = 0; // Deletes the most recent docu.
+ bIsPassedFirstDocu = true;
+ }
+ }
+}
+
+void
+TokenDistributor::
+Documentation::Increment_CurLine()
+{
+ rParserInfo.Increment_CurLine();
+}
+
+
+} // namespace uidl
+} // namespace csi
+
diff --git a/autodoc/source/parser_i/idl/makefile.mk b/autodoc/source/parser_i/idl/makefile.mk
new file mode 100644
index 000000000000..7449548742b6
--- /dev/null
+++ b/autodoc/source/parser_i/idl/makefile.mk
@@ -0,0 +1,84 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..$/..$/..
+
+PRJNAME=autodoc
+TARGET=parser2_s2_luidl
+
+
+# --- Settings -----------------------------------------------------
+
+ENABLE_EXCEPTIONS=true
+PRJINC=$(PRJ)$/source
+
+.INCLUDE : settings.mk
+.INCLUDE : $(PRJ)$/source$/mkinc$/fullcpp.mk
+
+
+
+# --- Files --------------------------------------------------------
+
+
+OBJFILES= \
+ $(OBJ)$/cx_idlco.obj \
+ $(OBJ)$/cx_sub.obj \
+ $(OBJ)$/distrib.obj \
+ $(OBJ)$/parsenv2.obj \
+ $(OBJ)$/pe_attri.obj \
+ $(OBJ)$/pe_const.obj \
+ $(OBJ)$/pe_enum2.obj \
+ $(OBJ)$/pe_evalu.obj \
+ $(OBJ)$/pe_excp.obj \
+ $(OBJ)$/pe_file2.obj \
+ $(OBJ)$/pe_func2.obj \
+ $(OBJ)$/pe_iface.obj \
+ $(OBJ)$/pe_property.obj \
+ $(OBJ)$/pe_selem.obj \
+ $(OBJ)$/pe_servi.obj \
+ $(OBJ)$/pe_singl.obj \
+ $(OBJ)$/pe_struc.obj \
+ $(OBJ)$/pe_tydf2.obj \
+ $(OBJ)$/pe_type2.obj \
+ $(OBJ)$/pe_vari2.obj \
+ $(OBJ)$/pestate.obj \
+ $(OBJ)$/semnode.obj \
+ $(OBJ)$/tk_const.obj \
+ $(OBJ)$/tk_ident.obj \
+ $(OBJ)$/tk_keyw.obj \
+ $(OBJ)$/tk_punct.obj \
+ $(OBJ)$/tkp_uidl.obj \
+ $(OBJ)$/unoidl.obj
+
+
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : target.mk
+
+
+
diff --git a/autodoc/source/parser_i/idl/parsenv2.cxx b/autodoc/source/parser_i/idl/parsenv2.cxx
new file mode 100644
index 000000000000..026eb3fa4b31
--- /dev/null
+++ b/autodoc/source/parser_i/idl/parsenv2.cxx
@@ -0,0 +1,212 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <s2_luidl/parsenv2.hxx>
+
+
+// NOT FULLY DEFINED SERVICES
+#include <ary/ary.hxx>
+#include <ary/getncast.hxx>
+#include <ary/qualiname.hxx>
+#include <ary/doc/d_oldidldocu.hxx>
+#include <ary/idl/i_gate.hxx>
+#include <ary/idl/i_ce.hxx>
+#include <ary/idl/i_enum.hxx>
+#include <ary/idl/i_enumvalue.hxx>
+#include <ary/idl/i_module.hxx>
+#include <ary/idl/ip_ce.hxx>
+#include <parser/parserinfo.hxx>
+#include <adc_msg.hxx>
+#include <s2_luidl/uidl_tok.hxx>
+#include <x_parse2.hxx>
+
+
+
+
+namespace csi
+{
+namespace uidl
+{
+
+
+UnoIDL_PE::~UnoIDL_PE()
+{
+}
+
+void
+UnoIDL_PE::EstablishContacts( UnoIDL_PE * io_pParentPE,
+ ary::Repository & io_rRepository,
+ TokenProcessing_Result & o_rResult )
+{
+ pRepository = &io_rRepository;
+ aMyNode.EstablishContacts(io_pParentPE, io_rRepository.Gate_Idl(), o_rResult);
+}
+
+//void
+//UnoIDL_PE::EstablishContacts( UnoIDL_PE * io_pParentPE,
+// ary::idl::Gate & io_rGate,
+// TokenProcessing_Result & o_rResult )
+//{
+// aMyNode.EstablishContacts(io_pParentPE, io_rGate, o_rResult);
+//}
+
+void
+UnoIDL_PE::Enter( E_EnvStackAction i_eWayOfEntering )
+{
+ switch (i_eWayOfEntering)
+ {
+ case push_sure:
+ InitData();
+ break;
+ case push_try:
+ csv_assert(false);
+ break;
+ case pop_success:
+ ReceiveData();
+ break;
+ case pop_failure:
+ throw X_AutodocParser(X_AutodocParser::x_Any);
+ // no break because of throw
+ default:
+ csv_assert(false);
+ } // end switch
+}
+
+void
+UnoIDL_PE::Leave( E_EnvStackAction i_eWayOfLeaving )
+{
+ switch (i_eWayOfLeaving)
+ {
+ case push_sure:
+ break;
+ case push_try:
+ csv_assert(false);
+ break;
+ case pop_success:
+ TransferData();
+ break;
+ case pop_failure:
+ throw X_AutodocParser(X_AutodocParser::x_Any);
+ // no break because of throw
+ default:
+ csv_assert(false);
+ } // end switch
+}
+
+void
+UnoIDL_PE::SetDocu( DYN ary::doc::OldIdlDocu * let_dpDocu )
+{
+ pDocu = let_dpDocu;
+}
+
+void
+UnoIDL_PE::SetPublished()
+{
+ if (NOT pDocu)
+ {
+ pDocu = new ary::doc::OldIdlDocu;
+ }
+ pDocu->SetPublished();
+}
+
+void
+UnoIDL_PE::SetOptional()
+{
+ if (NOT pDocu)
+ {
+ pDocu = new ary::doc::OldIdlDocu;
+ }
+ pDocu->SetOptional();
+}
+
+void
+UnoIDL_PE::PassDocuAt( ary::idl::CodeEntity & io_rCe )
+{
+ if (pDocu)
+ {
+ io_rCe.Set_Docu(*pDocu.Release());
+ }
+ else if // KORR_FUTURE
+ // Re-enable doc-warning for Enum Values, as soon as there is a
+ // @option -no-doc-for-enumvalues.
+ ( NOT ary::is_type<ary::idl::Module>(io_rCe)
+ AND NOT ary::is_type<ary::idl::Enum>(io_rCe) )
+ {
+ TheMessages().Out_MissingDoc(
+ io_rCe.LocalName(),
+ ParseInfo().CurFile(),
+ ParseInfo().CurLine() );
+ }
+}
+
+void
+UnoIDL_PE::InitData()
+{
+ // Needs not anything to do.
+}
+
+void
+UnoIDL_PE::ReceiveData()
+{
+ // Needs not anything to do.
+}
+
+const ary::idl::Module &
+UnoIDL_PE::CurNamespace() const
+{
+ if ( Parent() != 0 )
+ return Parent()->CurNamespace();
+ else
+ {
+ csv_assert(false);
+ return *(const ary::idl::Module*)0;
+ }
+}
+
+const ParserInfo &
+UnoIDL_PE::ParseInfo() const
+{
+ if ( Parent() != 0 )
+ return Parent()->ParseInfo();
+ else
+ {
+ csv_assert(false);
+ return *(const ParserInfo*)0;
+ }
+}
+
+UnoIDL_PE::UnoIDL_PE()
+ : aMyNode(),
+ pDocu(),
+ pRepository(0)
+{
+}
+
+
+} // namespace uidl
+} // namespace csi
diff --git a/autodoc/source/parser_i/idl/pe_attri.cxx b/autodoc/source/parser_i/idl/pe_attri.cxx
new file mode 100644
index 000000000000..3ea90dac747c
--- /dev/null
+++ b/autodoc/source/parser_i/idl/pe_attri.cxx
@@ -0,0 +1,294 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <s2_luidl/pe_attri.hxx>
+
+
+// NOT FULLY DEFINED SERVICES
+#include <ary/idl/i_gate.hxx>
+#include <ary/idl/i_attribute.hxx>
+#include <ary/idl/i_service.hxx>
+#include <ary/idl/ip_ce.hxx>
+#include <ary/doc/d_oldidldocu.hxx>
+#include <s2_luidl/pe_type2.hxx>
+#include <s2_luidl/pe_vari2.hxx>
+#include <s2_luidl/tk_keyw.hxx>
+#include <s2_luidl/tk_ident.hxx>
+#include <s2_luidl/tk_punct.hxx>
+
+
+
+namespace csi
+{
+namespace uidl
+{
+
+
+
+PE_Attribute::PE_Attribute( const Ce_id & i_rCurOwner )
+ : eState(e_none),
+ pCurOwner(&i_rCurOwner),
+ pPE_Variable(0),
+ pPE_Exception(0),
+ pCurAttribute(0),
+ nCurParsedType(0),
+ sCurParsedName(),
+ bReadOnly(false),
+ bBound(false)
+{
+ pPE_Variable = new PE_Variable(nCurParsedType, sCurParsedName);
+ pPE_Exception = new PE_Type(nCurParsedType);
+}
+
+void
+PE_Attribute::EstablishContacts( UnoIDL_PE * io_pParentPE,
+ ary::Repository & io_rRepository,
+ TokenProcessing_Result & o_rResult )
+{
+ UnoIDL_PE::EstablishContacts(io_pParentPE,io_rRepository,o_rResult);
+ pPE_Variable->EstablishContacts(this,io_rRepository,o_rResult);
+ pPE_Exception->EstablishContacts(this,io_rRepository,o_rResult);
+}
+
+PE_Attribute::~PE_Attribute()
+{
+}
+
+void
+PE_Attribute::ProcessToken( const Token & i_rToken )
+{
+ i_rToken.Trigger(*this);
+}
+
+void
+PE_Attribute::Process_Identifier( const TokIdentifier & i_rToken )
+{
+ switch (eState)
+ {
+ case e_start:
+ SetResult(not_done, push_sure, pPE_Variable.Ptr());
+ eState = in_variable;
+ break;
+ case in_raise_std:
+ if (strcmp(i_rToken.Text(),"get") == 0)
+ {
+ SetResult(done, stay);
+ eState = in_get;
+ }
+ else if (strcmp(i_rToken.Text(),"set") == 0)
+ {
+ SetResult(done, stay);
+ eState = in_set;
+ }
+ else
+ {
+ SetResult(not_done, pop_failure);
+ eState = e_none;
+ }
+ break;
+ case in_get:
+ case in_set:
+ SetResult(not_done, push_sure, pPE_Exception.Ptr());
+ break;
+ default:
+ SetResult(not_done, pop_failure);
+ } // end switch
+}
+
+void
+PE_Attribute::Process_Stereotype( const TokStereotype & i_rToken )
+{
+ if (eState != e_start)
+ {
+ SetResult(not_done, pop_failure);
+ eState = e_none;
+ return;
+ }
+
+ switch (i_rToken.Id())
+ {
+ case TokStereotype::ste_readonly:
+ bReadOnly = true;
+ break;
+ case TokStereotype::ste_bound:
+ bBound = true;
+ break;
+ default:
+ SetResult(not_done, pop_failure);
+ eState = e_none;
+ return;
+ } // end switch
+
+ SetResult(done, stay);
+}
+
+void
+PE_Attribute::Process_MetaType( const TokMetaType & i_rToken )
+{
+ if (eState != e_start OR i_rToken.Id() != TokMetaType::mt_attribute)
+ {
+ SetResult(not_done, pop_failure);
+ eState = e_none;
+ return;
+ }
+
+ SetResult(done, stay);
+}
+
+void
+PE_Attribute::Process_Punctuation( const TokPunctuation & i_rToken )
+{
+ switch (eState)
+ {
+ case e_start:
+ SetResult(done, stay);
+ break;
+ case expect_end:
+ switch(i_rToken.Id())
+ {
+ case TokPunctuation::Semicolon:
+ SetResult(done, pop_success);
+ eState = e_none;
+ break;
+ case TokPunctuation::Comma:
+ SetResult(not_done, pop_failure);
+ Cerr() << "Autodoc does not support comma separated attributes, because those are discouraged by IDL policies." << Endl();
+ break;
+ case TokPunctuation::CurledBracketOpen:
+ SetResult(done, stay);
+ eState = in_raise_std;
+ break;
+ default:
+ SetResult(not_done, pop_failure);
+ } // end switch
+ break;
+ case in_raise_std:
+ SetResult(done, stay);
+ if (i_rToken.Id() == TokPunctuation::CurledBracketClose)
+ {
+ eState = expect_end;
+ }
+ break;
+ case in_get:
+ case in_set:
+ SetResult(done, stay);
+ if (i_rToken.Id() == TokPunctuation::Semicolon)
+ {
+ eState = in_raise_std;
+ }
+ break;
+ default:
+ csv_assert(false);
+ }
+}
+
+void
+PE_Attribute::Process_Raises()
+{
+ if (eState == in_get OR eState == in_set)
+ {
+ SetResult(done, stay);
+ }
+ else
+ SetResult(not_done, pop_failure);
+}
+
+void
+PE_Attribute::Process_Default()
+{
+ if (eState == e_start)
+ {
+ SetResult(not_done, push_sure, pPE_Variable.Ptr());
+ eState = in_variable;
+ }
+ else if (eState == in_get OR eState == in_set)
+ SetResult(not_done, push_sure, pPE_Exception.Ptr());
+ else
+ SetResult(not_done, pop_failure);
+}
+
+void
+PE_Attribute::InitData()
+{
+ eState = e_start;
+
+ pCurAttribute = 0;
+ nCurParsedType = 0;
+ sCurParsedName = "";
+ bReadOnly = false;
+ bBound = false;
+}
+
+void
+PE_Attribute::TransferData()
+{
+ eState = e_none;
+}
+
+void
+PE_Attribute::ReceiveData()
+{
+ switch (eState)
+ {
+ case in_variable:
+ csv_assert(pCurOwner->IsValid());
+ pCurAttribute = &Gate().Ces().Store_Attribute(
+ *pCurOwner,
+ sCurParsedName,
+ nCurParsedType,
+ bReadOnly,
+ bBound );
+ PassDocuAt(*pCurAttribute);
+ nCurParsedType = 0;
+ eState = expect_end;
+ break;
+ case in_get:
+ csv_assert(pCurAttribute != 0);
+ pCurAttribute->Add_GetException(nCurParsedType);
+ nCurParsedType = 0;
+ break;
+ case in_set:
+ csv_assert(pCurAttribute != 0);
+ pCurAttribute->Add_SetException(nCurParsedType);
+ nCurParsedType = 0;
+ break;
+ default:
+ csv_assert(false);
+ } // end switch
+}
+
+
+UnoIDL_PE &
+PE_Attribute::MyPE()
+{
+ return *this;
+}
+
+
+} // namespace uidl
+} // namespace csi
diff --git a/autodoc/source/parser_i/idl/pe_const.cxx b/autodoc/source/parser_i/idl/pe_const.cxx
new file mode 100644
index 000000000000..d75272c9b06a
--- /dev/null
+++ b/autodoc/source/parser_i/idl/pe_const.cxx
@@ -0,0 +1,280 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <s2_luidl/pe_const.hxx>
+
+// NOT FULLY DECLARED SERVICES
+#include <ary/idl/i_gate.hxx>
+#include <ary/idl/i_constant.hxx>
+#include <ary/idl/i_constgroup.hxx>
+#include <ary/idl/ip_ce.hxx>
+#include <ary/doc/d_oldidldocu.hxx>
+#include <s2_luidl/pe_type2.hxx>
+#include <s2_luidl/pe_evalu.hxx>
+#include <s2_luidl/tk_punct.hxx>
+#include <s2_luidl/tk_ident.hxx>
+#include <s2_luidl/tk_keyw.hxx>
+
+
+namespace csi
+{
+namespace uidl
+{
+
+
+#ifdef DF
+#undef DF
+#endif
+#define DF &PE_Constant::On_Default
+
+PE_Constant::F_TOK
+PE_Constant::aDispatcher[PE_Constant::e_STATES_MAX][PE_Constant::tt_MAX] =
+ { { DF, DF, DF }, // e_none
+ { DF, &PE_Constant::On_expect_name_Identifier,
+ DF }, // expect_name
+ { DF, DF, &PE_Constant::On_expect_curl_bracket_open_Punctuation }, // expect_curl_bracket_open
+ { &PE_Constant::On_expect_const_Stereotype,
+ DF, &PE_Constant::On_expect_const_Punctuation }, // expect_const
+ { DF, &PE_Constant::On_expect_value_Identifier,
+ DF }, // expect_value
+ { DF, DF, &PE_Constant::On_expect_finish_Punctuation } // expect_finish
+ };
+
+
+
+inline void
+PE_Constant::CallHandler( const char * i_sTokenText,
+ E_TokenType i_eTokenType )
+ { (this->*aDispatcher[eState][i_eTokenType])(i_sTokenText); }
+
+
+
+
+PE_Constant::PE_Constant()
+ : eState(e_none),
+ sData_Name(),
+ nDataId(0),
+ pPE_Type(0),
+ nType(0),
+ pPE_Value(0),
+ sName(),
+ sAssignment()
+{
+ pPE_Type = new PE_Type(nType);
+ pPE_Value = new PE_Value(sName, sAssignment, true);
+}
+
+void
+PE_Constant::EstablishContacts( UnoIDL_PE * io_pParentPE,
+ ary::Repository & io_rRepository,
+ TokenProcessing_Result & o_rResult )
+{
+ UnoIDL_PE::EstablishContacts(io_pParentPE,io_rRepository,o_rResult);
+ pPE_Type->EstablishContacts(this,io_rRepository,o_rResult);
+ pPE_Value->EstablishContacts(this,io_rRepository,o_rResult);
+}
+
+PE_Constant::~PE_Constant()
+{
+}
+
+void
+PE_Constant::ProcessToken( const Token & i_rToken )
+{
+ i_rToken.Trigger(*this);
+}
+
+void
+PE_Constant::Process_Identifier( const TokIdentifier & i_rToken )
+{
+ CallHandler(i_rToken.Text(), tt_identifier);
+}
+
+void
+PE_Constant::Process_Punctuation( const TokPunctuation & i_rToken )
+{
+ CallHandler(i_rToken.Text(), tt_punctuation);
+}
+
+void
+PE_Constant::Process_Stereotype( const TokStereotype & i_rToken )
+{
+ CallHandler(i_rToken.Text(), tt_stereotype);
+}
+
+void
+PE_Constant::On_expect_name_Identifier(const char * i_sText)
+{
+ sName = i_sText;
+
+ SetResult(done,stay);
+ eState = expect_curl_bracket_open;
+}
+
+void
+PE_Constant::On_expect_curl_bracket_open_Punctuation(const char * i_sText)
+{
+ if ( i_sText[0] == '{')
+ {
+ sData_Name = sName;
+
+ ary::idl::ConstantsGroup &
+ rCe = Gate().Ces().
+ Store_ConstantsGroup(CurNamespace().CeId(),sData_Name);
+ PassDocuAt(rCe);
+ nDataId = rCe.CeId();
+
+ SetResult(done,stay);
+ eState = expect_const;
+ }
+ else
+ {
+ On_Default(i_sText);
+ }
+}
+
+void
+PE_Constant::On_expect_const_Stereotype(const char *)
+{
+ SetResult( done, push_sure, pPE_Type.Ptr() );
+}
+
+void
+PE_Constant::On_expect_const_Punctuation(const char * i_sText)
+{
+ if ( i_sText[0] == '}')
+ {
+ SetResult(done,stay);
+ eState = expect_finish;
+ }
+ else
+ {
+ On_Default(i_sText);
+ }
+}
+
+void
+PE_Constant::On_expect_value_Identifier(const char *)
+{
+ SetResult( not_done, push_sure, pPE_Value.Ptr() );
+}
+
+void
+PE_Constant::On_expect_finish_Punctuation(const char * i_sText)
+{
+ if ( i_sText[0] == ';')
+ {
+ SetResult(done,pop_success);
+ eState = e_none;
+ }
+ else
+ {
+ On_Default(i_sText);
+ }
+}
+
+void
+PE_Constant::On_Default(const char * )
+{
+ SetResult(not_done,pop_failure);
+ eState = e_none;
+}
+
+void
+PE_Constant::EmptySingleConstData()
+{
+ nType = 0;
+ sName = "";
+ sAssignment = "";
+}
+
+void
+PE_Constant::CreateSingleConstant()
+{
+ ary::idl::Constant &
+ rCe = Gate().Ces().Store_Constant( nDataId,
+ sName,
+ nType,
+ sAssignment );
+ pPE_Type->PassDocuAt(rCe);
+}
+
+void
+PE_Constant::InitData()
+{
+ eState = expect_name;
+
+ sData_Name.clear();
+ nDataId = 0;
+
+ EmptySingleConstData();
+}
+
+void
+PE_Constant::ReceiveData()
+{
+ switch (eState)
+ {
+ case expect_const:
+ eState = expect_value;
+ break;
+ case expect_value:
+ {
+ if (sName.length() == 0 OR sAssignment.length() == 0 OR NOT nType.IsValid())
+ {
+ Cerr() << "Constant without value found." << Endl();
+ eState = expect_const;
+ break;
+ }
+
+ CreateSingleConstant();
+ EmptySingleConstData();
+ eState = expect_const;
+ } break;
+ default:
+ SetResult(not_done, pop_failure);
+ eState = e_none;
+ } // end switch
+}
+
+void
+PE_Constant::TransferData()
+{
+ csv_assert(nDataId.IsValid());
+ eState = e_none;
+}
+
+UnoIDL_PE &
+PE_Constant::MyPE()
+{
+ return *this;
+}
+
+} // namespace uidl
+} // namespace csi
+
diff --git a/autodoc/source/parser_i/idl/pe_enum2.cxx b/autodoc/source/parser_i/idl/pe_enum2.cxx
new file mode 100644
index 000000000000..afd3c86627d8
--- /dev/null
+++ b/autodoc/source/parser_i/idl/pe_enum2.cxx
@@ -0,0 +1,251 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <s2_luidl/pe_enum2.hxx>
+
+
+// NOT FULLY DECLARED SERVICES
+#include <ary/idl/i_enum.hxx>
+#include <ary/idl/i_enumvalue.hxx>
+#include <ary/idl/i_gate.hxx>
+#include <ary/idl/ip_ce.hxx>
+#include <ary/doc/d_oldidldocu.hxx>
+#include <s2_luidl/pe_evalu.hxx>
+#include <s2_luidl/tk_punct.hxx>
+#include <s2_luidl/tk_ident.hxx>
+#include <s2_luidl/tk_keyw.hxx>
+
+
+namespace csi
+{
+namespace uidl
+{
+
+
+#ifdef DF
+#undef DF
+#endif
+#define DF &PE_Enum::On_Default
+
+PE_Enum::F_TOK
+PE_Enum::aDispatcher[PE_Enum::e_STATES_MAX][PE_Enum::tt_MAX] =
+ { { DF, DF }, // e_none
+ { &PE_Enum::On_expect_name_Identifier,
+ DF }, // expect_name
+ { DF, &PE_Enum::On_expect_curl_bracket_open_Punctuation }, // expect_curl_bracket_open
+ { &PE_Enum::On_expect_value_Identifier,
+ &PE_Enum::On_expect_value_Punctuation }, // expect_value
+ { DF, &PE_Enum::On_expect_finish_Punctuation } // expect_finish
+ };
+
+
+
+inline void
+PE_Enum::CallHandler( const char * i_sTokenText,
+ E_TokenType i_eTokenType )
+ { (this->*aDispatcher[eState][i_eTokenType])(i_sTokenText); }
+
+
+
+
+PE_Enum::PE_Enum()
+ : eState(e_none),
+ sData_Name(),
+ nDataId(0),
+ pPE_Value(0),
+ sName(),
+ sAssignment()
+{
+ pPE_Value = new PE_Value(sName, sAssignment, false);
+}
+
+void
+PE_Enum::EstablishContacts( UnoIDL_PE * io_pParentPE,
+ ary::Repository & io_rRepository,
+ TokenProcessing_Result & o_rResult )
+{
+ UnoIDL_PE::EstablishContacts(io_pParentPE,io_rRepository,o_rResult);
+ pPE_Value->EstablishContacts(this,io_rRepository,o_rResult);
+}
+
+PE_Enum::~PE_Enum()
+{
+}
+
+void
+PE_Enum::ProcessToken( const Token & i_rToken )
+{
+ i_rToken.Trigger(*this);
+}
+
+void
+PE_Enum::Process_Identifier( const TokIdentifier & i_rToken )
+{
+ CallHandler(i_rToken.Text(), tt_identifier);
+}
+
+void
+PE_Enum::Process_Punctuation( const TokPunctuation & i_rToken )
+{
+ CallHandler(i_rToken.Text(), tt_punctuation);
+}
+
+void
+PE_Enum::On_expect_name_Identifier(const char * i_sText)
+{
+ sName = i_sText;
+
+ SetResult(done,stay);
+ eState = expect_curl_bracket_open;
+}
+
+void
+PE_Enum::On_expect_curl_bracket_open_Punctuation(const char * i_sText)
+{
+ if ( i_sText[0] == '{')
+ {
+ sData_Name = sName;
+ ary::idl::Enum &
+ rCe = Gate().Ces().Store_Enum(CurNamespace().CeId(), sData_Name);
+ PassDocuAt(rCe);
+ nDataId = rCe.CeId();
+
+ SetResult(done,stay);
+ eState = expect_value;
+ }
+ else
+ {
+ On_Default(i_sText);
+ }
+}
+
+void
+PE_Enum::On_expect_value_Punctuation(const char * i_sText)
+{
+ if ( i_sText[0] == '}' )
+ {
+ SetResult(done,stay);
+ eState = expect_finish;
+ }
+ else
+ {
+ On_Default(i_sText);
+ }
+}
+
+void
+PE_Enum::On_expect_value_Identifier(const char *)
+{
+ SetResult( not_done, push_sure, pPE_Value.Ptr() );
+}
+
+void
+PE_Enum::On_expect_finish_Punctuation(const char * i_sText)
+{
+ if ( i_sText[0] == ';')
+ {
+ SetResult(done,pop_success);
+ eState = e_none;
+ }
+ else
+ {
+ On_Default(i_sText);
+ }
+}
+
+void
+PE_Enum::On_Default(const char * )
+{
+ SetResult(not_done,pop_failure);
+ eState = e_none;
+}
+
+void
+PE_Enum::EmptySingleValueData()
+{
+ sName = "";
+ sAssignment = "";
+}
+
+void
+PE_Enum::CreateSingleValue()
+{
+ ary::idl::EnumValue &
+ rCe = Gate().Ces().Store_EnumValue( nDataId, sName, sAssignment );
+ pPE_Value->PassDocuAt(rCe);
+}
+
+void
+PE_Enum::InitData()
+{
+ eState = expect_name;
+
+ sData_Name.clear();
+ nDataId = 0;
+
+ EmptySingleValueData();
+}
+
+void
+PE_Enum::ReceiveData()
+{
+ switch (eState)
+ {
+ case expect_value:
+ {
+ if (sName.length() == 0)
+ {
+ On_Default("");
+ break;
+ }
+
+ CreateSingleValue();
+ EmptySingleValueData();
+ } break;
+ default:
+ SetResult(not_done, pop_failure);
+ eState = e_none;
+ } // end switch
+}
+
+void
+PE_Enum::TransferData()
+{
+ csv_assert(sData_Name.length() > 0);
+ eState = e_none;
+}
+
+UnoIDL_PE &
+PE_Enum::MyPE()
+{
+ return *this;
+}
+
+} // namespace uidl
+} // namespace csi
+
diff --git a/autodoc/source/parser_i/idl/pe_evalu.cxx b/autodoc/source/parser_i/idl/pe_evalu.cxx
new file mode 100644
index 000000000000..14bcfd024e32
--- /dev/null
+++ b/autodoc/source/parser_i/idl/pe_evalu.cxx
@@ -0,0 +1,182 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <s2_luidl/pe_evalu.hxx>
+
+// NOT FULLY DECLARED SERVICES
+#include <ary/idl/i_enumvalue.hxx>
+#include <ary/idl/i_gate.hxx>
+#include <ary/idl/ip_ce.hxx>
+#include <ary/doc/d_oldidldocu.hxx>
+#include <s2_luidl/tk_ident.hxx>
+#include <s2_luidl/tk_punct.hxx>
+#include <s2_luidl/tk_const.hxx>
+
+
+namespace csi
+{
+namespace uidl
+{
+
+
+#ifdef DF
+#undef DF
+#endif
+#define DF &PE_Value::On_Default
+
+PE_Value::F_TOK
+PE_Value::aDispatcher[PE_Value::e_STATES_MAX][PE_Value::tt_MAX] =
+ { { DF, DF, DF }, // e_none
+ { &PE_Value::On_expect_name_Identifier,
+ DF, DF }, // expect_name
+ { DF, &PE_Value::On_got_name_Punctuation,
+ &PE_Value::On_got_name_Assignment } // got_name
+ };
+
+
+
+inline void
+PE_Value::CallHandler( const char * i_sTokenText,
+ E_TokenType i_eTokenType )
+ { (this->*aDispatcher[eState][i_eTokenType])(i_sTokenText); }
+
+
+
+
+
+PE_Value::PE_Value( String & o_rName,
+ String & o_rAssignment,
+ bool i_bIsConst )
+ : eState(e_none),
+ pName(&o_rName),
+ pAssignment(&o_rAssignment),
+ bIsConst(i_bIsConst)
+{
+}
+
+void
+PE_Value::EstablishContacts( UnoIDL_PE * io_pParentPE,
+ ary::Repository & io_rRepository,
+ TokenProcessing_Result & o_rResult )
+{
+ UnoIDL_PE::EstablishContacts(io_pParentPE,io_rRepository,o_rResult);
+}
+
+PE_Value::~PE_Value()
+{
+}
+
+void
+PE_Value::ProcessToken( const Token & i_rToken )
+{
+ i_rToken.Trigger(*this);
+}
+
+void
+PE_Value::Process_Identifier( const TokIdentifier & i_rToken )
+{
+ CallHandler(i_rToken.Text(), tt_identifier);
+}
+
+void
+PE_Value::Process_Punctuation( const TokPunctuation & i_rToken )
+{
+ CallHandler(i_rToken.Text(), tt_punctuation);
+}
+
+void
+PE_Value::Process_Assignment( const TokAssignment & i_rToken )
+{
+ CallHandler(i_rToken.Text(), tt_assignment);
+}
+
+void
+PE_Value::On_expect_name_Identifier(const char * i_sText)
+{
+ *pName = i_sText;
+ SetResult(done,stay);
+ eState = got_name;
+}
+
+void
+PE_Value::On_got_name_Punctuation(const char * i_sText)
+{
+ if ( (i_sText[0] == ',' AND NOT IsConst())
+ OR (i_sText[0] == ';' AND IsConst()) )
+ {
+ SetResult(done,pop_success);
+ eState = e_none;
+ }
+ else if (i_sText[0] == '}' AND NOT IsConst())
+ {
+ SetResult(not_done,pop_success);
+ eState = e_none;
+ }
+ else
+ On_Default(i_sText);
+}
+
+void
+PE_Value::On_got_name_Assignment(const char * i_sText)
+{
+ *pAssignment = i_sText;
+ SetResult(done,pop_success);
+ eState = e_none;
+}
+
+void
+PE_Value::On_Default(const char * )
+{
+ SetResult(not_done,pop_failure);
+}
+
+void
+PE_Value::InitData()
+{
+ eState = expect_name;
+
+ *pName = "";
+ *pAssignment = "";
+}
+
+void
+PE_Value::TransferData()
+{
+ csv_assert(pName->length() > 0);
+ eState = e_none;
+}
+
+UnoIDL_PE &
+PE_Value::MyPE()
+{
+ return *this;
+}
+
+} // namespace uidl
+} // namespace csi
+
diff --git a/autodoc/source/parser_i/idl/pe_excp.cxx b/autodoc/source/parser_i/idl/pe_excp.cxx
new file mode 100644
index 000000000000..8b09f4a03ba4
--- /dev/null
+++ b/autodoc/source/parser_i/idl/pe_excp.cxx
@@ -0,0 +1,298 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <s2_luidl/pe_excp.hxx>
+
+
+// NOT FULLY DECLARED SERVICES
+#include <ary/idl/i_exception.hxx>
+#include <ary/idl/i_gate.hxx>
+#include <ary/idl/i_structelem.hxx>
+#include <ary/idl/ip_ce.hxx>
+#include <ary/doc/d_oldidldocu.hxx>
+#include <s2_luidl/tk_ident.hxx>
+#include <s2_luidl/tk_punct.hxx>
+#include <s2_luidl/tk_keyw.hxx>
+#include <s2_luidl/pe_type2.hxx>
+#include <s2_luidl/pe_selem.hxx>
+
+
+
+namespace csi
+{
+namespace uidl
+{
+
+
+PE_Exception::PE_Exception()
+ // : aWork,
+ // pStati
+{
+ pStati = new S_Stati(*this);
+}
+
+void
+PE_Exception::EstablishContacts( UnoIDL_PE * io_pParentPE,
+ ary::Repository & io_rRepository,
+ TokenProcessing_Result & o_rResult )
+{
+ UnoIDL_PE::EstablishContacts(io_pParentPE,io_rRepository,o_rResult);
+ Work().pPE_Element->EstablishContacts(this,io_rRepository,o_rResult);
+ Work().pPE_Type->EstablishContacts(this,io_rRepository,o_rResult);
+}
+
+PE_Exception::~PE_Exception()
+{
+}
+
+void
+PE_Exception::ProcessToken( const Token & i_rToken )
+{
+ i_rToken.Trigger(*Stati().pCurStatus);
+}
+
+
+void
+PE_Exception::InitData()
+{
+ Work().InitData();
+ Stati().pCurStatus = &Stati().aWaitForName;
+}
+
+void
+PE_Exception::TransferData()
+{
+ if (NOT Work().bIsPreDeclaration)
+ {
+ csv_assert(Work().sData_Name.size() > 0);
+ csv_assert(Work().nCurStruct.IsValid());
+ }
+ Stati().pCurStatus = &Stati().aNone;
+}
+
+void
+PE_Exception::ReceiveData()
+{
+ Stati().pCurStatus->On_SubPE_Left();
+}
+
+PE_Exception::S_Work::S_Work()
+ : sData_Name(),
+ bIsPreDeclaration(false),
+ nCurStruct(0),
+ pPE_Element(0),
+ nCurParsed_ElementRef(0),
+ pPE_Type(0),
+ nCurParsed_Base(0)
+
+{
+ pPE_Element = new PE_StructElement(nCurParsed_ElementRef,nCurStruct);
+ pPE_Type = new PE_Type(nCurParsed_Base);
+}
+
+void
+PE_Exception::S_Work::InitData()
+{
+ sData_Name.clear();
+ bIsPreDeclaration = false;
+ nCurStruct = 0;
+
+ nCurParsed_ElementRef = 0;
+ nCurParsed_Base = 0;
+}
+
+void
+PE_Exception::S_Work::Prepare_PE_QualifiedName()
+{
+ nCurParsed_ElementRef = 0;
+}
+
+void
+PE_Exception::S_Work::Prepare_PE_Element()
+{
+ nCurParsed_Base = 0;
+}
+
+void
+PE_Exception::S_Work::Data_Set_Name( const char * i_sName )
+{
+ sData_Name = i_sName;
+}
+
+PE_Exception::S_Stati::S_Stati(PE_Exception & io_rStruct)
+ : aNone(io_rStruct),
+ aWaitForName(io_rStruct),
+ aGotName(io_rStruct),
+ aWaitForBase(io_rStruct),
+ aGotBase(io_rStruct),
+ aWaitForElement(io_rStruct),
+ aWaitForFinish(io_rStruct),
+ pCurStatus(0)
+{
+ pCurStatus = &aNone;
+}
+
+
+//*********************** Stati ***************************//
+
+
+UnoIDL_PE &
+PE_Exception::PE_StructState::MyPE()
+{
+ return rStruct;
+}
+
+
+void
+PE_Exception::State_WaitForName::Process_Identifier( const TokIdentifier & i_rToken )
+{
+ Work().Data_Set_Name(i_rToken.Text());
+ MoveState( Stati().aGotName );
+ SetResult(done,stay);
+}
+
+void
+PE_Exception::State_GotName::Process_Punctuation( const TokPunctuation & i_rToken )
+{
+ if ( i_rToken.Id() != TokPunctuation::Semicolon )
+ {
+ switch (i_rToken.Id())
+ {
+ case TokPunctuation::Colon:
+ MoveState( Stati().aWaitForBase );
+ SetResult(done,push_sure,Work().pPE_Type.Ptr());
+ Work().Prepare_PE_QualifiedName();
+ break;
+ case TokPunctuation::CurledBracketOpen:
+ PE().store_Exception();
+ MoveState( Stati().aWaitForElement );
+ SetResult(done,stay);
+ break;
+ default:
+ SetResult(not_done,pop_failure);
+ } // end switch
+ }
+ else
+ {
+ Work().sData_Name.clear();
+ SetResult(done,pop_success);
+ }
+}
+
+void
+PE_Exception::State_WaitForBase::On_SubPE_Left()
+{
+ MoveState(Stati().aGotBase);
+}
+
+void
+PE_Exception::State_GotBase::Process_Punctuation( const TokPunctuation & i_rToken )
+{
+ if ( i_rToken.Id() == TokPunctuation::CurledBracketOpen )
+ {
+ PE().store_Exception();
+ MoveState( Stati().aWaitForElement );
+ SetResult(done,stay);
+ }
+ else
+ {
+ SetResult(not_done,pop_failure);
+ }
+}
+
+void
+PE_Exception::State_WaitForElement::Process_Identifier( const TokIdentifier & )
+{
+ SetResult( not_done, push_sure, Work().pPE_Element.Ptr() );
+ Work().Prepare_PE_Element();
+}
+
+void
+PE_Exception::State_WaitForElement::Process_NameSeparator()
+{
+ SetResult( not_done, push_sure, Work().pPE_Element.Ptr());
+ Work().Prepare_PE_Element();
+}
+
+void
+PE_Exception::State_WaitForElement::Process_BuiltInType( const TokBuiltInType & )
+{
+ SetResult( not_done, push_sure, Work().pPE_Element.Ptr());
+ Work().Prepare_PE_Element();
+}
+
+void
+PE_Exception::State_WaitForElement::Process_TypeModifier(const TokTypeModifier & )
+{
+ SetResult( not_done, push_sure, Work().pPE_Element.Ptr());
+ Work().Prepare_PE_Element();
+}
+
+void
+PE_Exception::State_WaitForElement::Process_Punctuation( const TokPunctuation & i_rToken )
+{
+ if ( i_rToken.Id() == TokPunctuation::CurledBracketClose )
+ {
+ MoveState( Stati().aWaitForFinish );
+ SetResult( done, stay );
+ }
+ else
+ {
+ SetResult( not_done, pop_failure );
+ }
+}
+
+void
+PE_Exception::State_WaitForFinish::Process_Punctuation( const TokPunctuation & i_rToken )
+{
+ if (i_rToken.Id() == TokPunctuation::Semicolon)
+ {
+ MoveState( Stati().aNone );
+ SetResult( done, pop_success );
+ }
+ else
+ {
+ SetResult( not_done, pop_failure );
+ }
+}
+
+void
+PE_Exception::store_Exception()
+{
+ ary::idl::Exception &
+ rCe = Gate().Ces().Store_Exception(
+ CurNamespace().CeId(),
+ Work().sData_Name,
+ Work().nCurParsed_Base );
+ PassDocuAt(rCe);
+ Work().nCurStruct = rCe.Id();
+}
+
+
+} // namespace uidl
+} // namespace csi
diff --git a/autodoc/source/parser_i/idl/pe_file2.cxx b/autodoc/source/parser_i/idl/pe_file2.cxx
new file mode 100644
index 000000000000..872e5550201a
--- /dev/null
+++ b/autodoc/source/parser_i/idl/pe_file2.cxx
@@ -0,0 +1,318 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <s2_luidl/pe_file2.hxx>
+
+
+// NOT FULLY DECLARED SERVICES
+#include <ary/idl/i_gate.hxx>
+#include <ary/idl/i_module.hxx>
+#include <ary/idl/ip_ce.hxx>
+#include <ary/doc/d_oldidldocu.hxx>
+#include <s2_luidl/distrib.hxx>
+#include <s2_luidl/pe_servi.hxx>
+#include <s2_luidl/pe_iface.hxx>
+#include <s2_luidl/pe_singl.hxx>
+#include <s2_luidl/pe_struc.hxx>
+#include <s2_luidl/pe_excp.hxx>
+#include <s2_luidl/pe_const.hxx>
+#include <s2_luidl/pe_enum2.hxx>
+#include <s2_luidl/pe_tydf2.hxx>
+#include <s2_luidl/tk_keyw.hxx>
+#include <s2_luidl/tk_ident.hxx>
+#include <s2_luidl/tk_punct.hxx>
+
+
+
+
+namespace csi
+{
+namespace uidl
+{
+
+
+PE_File::PE_File( TokenDistributor & i_rTokenAdmin,
+ const ParserInfo & i_parseInfo )
+ : pTokenAdmin(&i_rTokenAdmin),
+ pPE_Service(new PE_Service),
+ pPE_Singleton(new PE_Singleton),
+ pPE_Interface(new PE_Interface),
+ pPE_Struct(new PE_Struct),
+ pPE_Exception(new PE_Exception),
+ pPE_Constant(new PE_Constant),
+ pPE_Enum(new PE_Enum),
+ pPE_Typedef(new PE_Typedef),
+ pCurNamespace(0),
+ pParseInfo(&i_parseInfo),
+ eState(e_none),
+ nBracketCount_inDefMode(0)
+{
+}
+
+void
+PE_File::EstablishContacts( UnoIDL_PE * io_pParentPE,
+ ary::Repository & io_rRepository,
+ TokenProcessing_Result & o_rResult )
+{
+ UnoIDL_PE::EstablishContacts(io_pParentPE,io_rRepository,o_rResult);
+ pPE_Service->EstablishContacts(this,io_rRepository,o_rResult);
+ pPE_Singleton->EstablishContacts(this,io_rRepository,o_rResult);
+ pPE_Interface->EstablishContacts(this,io_rRepository,o_rResult);
+ pPE_Struct->EstablishContacts(this,io_rRepository,o_rResult);
+ pPE_Exception->EstablishContacts(this,io_rRepository,o_rResult);
+ pPE_Constant->EstablishContacts(this,io_rRepository,o_rResult);
+ pPE_Enum->EstablishContacts(this,io_rRepository,o_rResult);
+ pPE_Typedef->EstablishContacts(this,io_rRepository,o_rResult);
+
+ pCurNamespace = &Gate().Ces().GlobalNamespace();
+}
+
+PE_File::~PE_File()
+{
+}
+
+void
+PE_File::ProcessToken( const Token & i_rToken )
+{
+ i_rToken.Trigger(*this);
+}
+
+void
+PE_File::Process_Identifier( const TokIdentifier & i_rToken )
+{
+ switch (eState)
+ {
+ case wait_for_module:
+ {
+ csv_assert(pCurNamespace != 0);
+
+ ary::idl::Module & rCe = Gate().Ces().CheckIn_Module(pCurNamespace->CeId(), i_rToken.Text());
+ pCurNamespace = &rCe;
+
+ // Get docu out of normal:
+ SetDocu(pTokenAdmin->ReleaseLastParsedDocu());
+ PassDocuAt(rCe);
+
+ csv_assert(pCurNamespace != 0);
+
+ SetResult(done, stay);
+ eState = wait_for_module_bracket;
+ } break;
+ case on_default:
+ SetResult(done, stay);
+ break;
+ default:
+ csv_assert(false);
+ }
+}
+
+void
+PE_File::Process_Punctuation( const TokPunctuation & i_rToken )
+{
+ switch (eState)
+ {
+ case e_std:
+ if (i_rToken.Id() == TokPunctuation::CurledBracketClose)
+ {
+ csv_assert(pCurNamespace != 0);
+
+ pCurNamespace = &Gate().Ces().Find_Module(pCurNamespace->Owner());
+
+ SetResult(done, stay);
+ eState = wait_for_module_semicolon;
+ }
+ else
+ {
+ csv_assert(false);
+ }
+ break;
+ case wait_for_module_bracket:
+ if (i_rToken.Id() == TokPunctuation::CurledBracketOpen)
+ {
+ SetResult(done, stay);
+ eState = e_std;
+ }
+ else
+ {
+ csv_assert(false);
+ }
+ break;
+ case wait_for_module_semicolon:
+ if (i_rToken.Id() == TokPunctuation::Semicolon)
+ {
+ SetResult(done, stay);
+ eState = e_std;
+ }
+ else
+ {
+ csv_assert(false);
+ }
+ break;
+ case on_default:
+ if (i_rToken.Id() == TokPunctuation::CurledBracketClose)
+ {
+ nBracketCount_inDefMode--;
+ }
+ else if (i_rToken.Id() == TokPunctuation::CurledBracketOpen)
+ {
+ nBracketCount_inDefMode++;
+ }
+ else if (i_rToken.Id() == TokPunctuation::Semicolon)
+ {
+ if (nBracketCount_inDefMode <= 0)
+ {
+ eState = e_std;
+ }
+ }
+ SetResult(done, stay);
+ break;
+ default:
+ csv_assert(false);
+ }
+}
+
+void
+PE_File::Process_MetaType( const TokMetaType & i_rToken )
+{
+ switch (i_rToken.Id())
+ {
+ case TokMetaType::mt_service:
+ eState = in_sub_pe;
+ SetResult( not_done, push_sure, pPE_Service.Ptr());
+ break;
+ case TokMetaType::mt_singleton:
+ eState = in_sub_pe;
+ SetResult( not_done, push_sure, pPE_Singleton.Ptr());
+ break;
+ case TokMetaType::mt_uik:
+ Cerr() << "Syntax error: [uik ....] is obsolete now." << Endl();
+ SetResult( not_done, pop_failure);
+ break;
+ case TokMetaType::mt_interface:
+ eState = in_sub_pe;
+ SetResult( not_done, push_sure, pPE_Interface.Ptr());
+ break;
+ case TokMetaType::mt_module:
+ eState = wait_for_module;
+ SetResult( done, stay );
+ break;
+ case TokMetaType::mt_struct:
+ eState = in_sub_pe;
+ SetResult( done, push_sure, pPE_Struct.Ptr());
+ break;
+ case TokMetaType::mt_exception:
+ eState = in_sub_pe;
+ SetResult( done, push_sure, pPE_Exception.Ptr());
+ break;
+ case TokMetaType::mt_constants:
+ eState = in_sub_pe;
+ SetResult( done, push_sure, pPE_Constant.Ptr());
+ break;
+ case TokMetaType::mt_enum:
+ eState = in_sub_pe;
+ SetResult( done, push_sure, pPE_Enum.Ptr());
+ break;
+ case TokMetaType::mt_typedef:
+ eState = in_sub_pe;
+ SetResult( done, push_sure, pPE_Typedef.Ptr());
+ break;
+
+ default:
+ Process_Default();
+ } // end switch
+}
+
+void
+PE_File::Process_Stereotype( const TokStereotype & i_rToken )
+{
+ if (i_rToken.Id() == TokStereotype::ste_published)
+ {
+ pTokenAdmin->Set_PublishedOn();
+
+ SetResult(done, stay);
+ }
+ else
+ {
+ Process_Default();
+ }
+}
+
+void
+PE_File::Process_Default()
+{
+ if (eState != on_default)
+ {
+ eState = on_default;
+ nBracketCount_inDefMode = 0;
+ }
+ SetResult(done, stay);
+}
+
+const ary::idl::Module &
+PE_File::CurNamespace() const
+{
+ csv_assert(pCurNamespace);
+ return *pCurNamespace;
+}
+
+const ParserInfo &
+PE_File::ParseInfo() const
+{
+ csv_assert(pParseInfo);
+ return *pParseInfo;
+}
+
+void
+PE_File::InitData()
+{
+ eState = e_std;
+}
+
+void
+PE_File::TransferData()
+{
+ eState = e_none;
+}
+
+void
+PE_File::ReceiveData()
+{
+ eState = e_std;
+}
+
+
+UnoIDL_PE &
+PE_File::MyPE()
+{
+ return *this;
+}
+
+} // namespace uidl
+} // namespace csi
+
+
diff --git a/autodoc/source/parser_i/idl/pe_func2.cxx b/autodoc/source/parser_i/idl/pe_func2.cxx
new file mode 100644
index 000000000000..ed25be5f763d
--- /dev/null
+++ b/autodoc/source/parser_i/idl/pe_func2.cxx
@@ -0,0 +1,445 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <s2_luidl/pe_func2.hxx>
+
+
+// NOT FULLY DEFINED SERVICES
+#include <ary/idl/i_function.hxx>
+#include <ary/idl/i_type.hxx>
+#include <ary/idl/i_gate.hxx>
+#include <ary/idl/ip_ce.hxx>
+#include <ary/idl/ip_type.hxx>
+#include <ary/doc/d_oldidldocu.hxx>
+#include <s2_luidl/pe_type2.hxx>
+#include <s2_luidl/pe_vari2.hxx>
+#include <s2_luidl/tk_keyw.hxx>
+#include <s2_luidl/tk_ident.hxx>
+#include <s2_luidl/tk_punct.hxx>
+#include <x_parse2.hxx>
+
+
+namespace csi
+{
+namespace uidl
+{
+
+
+PE_Function::PE_Function( const RParent & i_rCurInterface )
+ : eState(e_none),
+ sData_Name(),
+ nData_ReturnType(0),
+ bData_Oneway(false),
+ pCurFunction(0),
+ pCurParent(&i_rCurInterface),
+ pPE_Type(0),
+ nCurParsedType(0),
+ sName(),
+ pPE_Variable(0),
+ eCurParsedParam_Direction(ary::idl::param_in),
+ nCurParsedParam_Type(0),
+ sCurParsedParam_Name(),
+ bIsForConstructors(false)
+{
+ pPE_Type = new PE_Type(nCurParsedType);
+ pPE_Variable = new PE_Variable(nCurParsedParam_Type, sCurParsedParam_Name);
+}
+
+PE_Function::PE_Function( const RParent & i_rCurService,
+ E_Constructor )
+ : eState(expect_name),
+ sData_Name(),
+ nData_ReturnType(0),
+ bData_Oneway(false),
+ pCurFunction(0),
+ pCurParent(&i_rCurService),
+ pPE_Type(0),
+ nCurParsedType(0),
+ sName(),
+ pPE_Variable(0),
+ eCurParsedParam_Direction(ary::idl::param_in),
+ nCurParsedParam_Type(0),
+ sCurParsedParam_Name(),
+ bIsForConstructors(true)
+{
+ pPE_Type = new PE_Type(nCurParsedType);
+ pPE_Variable = new PE_Variable(nCurParsedParam_Type, sCurParsedParam_Name);
+}
+
+void
+PE_Function::EstablishContacts( UnoIDL_PE * io_pParentPE,
+ ary::Repository & io_rRepository,
+ TokenProcessing_Result & o_rResult )
+{
+ UnoIDL_PE::EstablishContacts(io_pParentPE,io_rRepository,o_rResult);
+ pPE_Type->EstablishContacts(this,io_rRepository,o_rResult);
+ pPE_Variable->EstablishContacts(this,io_rRepository,o_rResult);
+}
+
+PE_Function::~PE_Function()
+{
+}
+
+void
+PE_Function::ProcessToken( const Token & i_rToken )
+{
+ i_rToken.Trigger(*this);
+}
+
+void
+PE_Function::Process_Stereotype( const TokStereotype & i_rToken )
+{
+ if (eState == e_start)
+ {
+ switch (i_rToken.Id())
+ {
+ case TokStereotype::ste_oneway:
+ bData_Oneway = true;
+ SetResult(done, stay);
+ break;
+ default:
+ OnDefault();
+ } // end switch
+ }
+ else
+ OnDefault();
+}
+
+void
+PE_Function::Process_Identifier( const TokIdentifier & i_rToken )
+{
+ switch (eState)
+ {
+ case e_start:
+ GoIntoReturnType();
+ break;
+ case expect_name:
+ sData_Name = i_rToken.Text();
+ SetResult(done,stay);
+ eState = expect_params_list;
+
+ if (NOT bIsForConstructors)
+ {
+ pCurFunction = &Gate().Ces().Store_Function(
+ *pCurParent,
+ sData_Name,
+ nData_ReturnType,
+ bData_Oneway );
+ }
+ else
+ {
+ pCurFunction = &Gate().Ces().Store_ServiceConstructor(
+ *pCurParent,
+ sData_Name );
+ }
+ PassDocuAt(*pCurFunction);
+ break;
+ case expect_parameter_variable:
+ GoIntoParameterVariable();
+ break;
+ case expect_exception:
+ GoIntoException();
+ break;
+ default:
+ OnDefault();
+ }
+}
+
+void
+PE_Function::Process_Punctuation( const TokPunctuation & i_rToken )
+{
+ switch (eState)
+ {
+ case e_start:
+ SetResult(done,stay);
+ break;
+ case expect_params_list:
+ if (i_rToken.Id() != TokPunctuation::BracketOpen)
+ {
+ OnDefault();
+ return;
+ }
+ SetResult(done,stay);
+ eState = expect_parameter;
+ break;
+ case expect_parameter:
+ if (i_rToken.Id() == TokPunctuation::BracketClose)
+ {
+ SetResult(done,stay);
+ eState = params_finished;
+ }
+ else
+ {
+ OnDefault();
+ return;
+ }
+ break;
+ case expect_parameter_separator:
+ if (i_rToken.Id() == TokPunctuation::Comma)
+ {
+ SetResult(done,stay);
+ eState = expect_parameter;
+ }
+ else if (i_rToken.Id() == TokPunctuation::BracketClose)
+ {
+ SetResult(done,stay);
+ eState = params_finished;
+ }
+ else
+ {
+ OnDefault();
+ return;
+ }
+ break;
+ case params_finished:
+ case exceptions_finished:
+ if (i_rToken.Id() != TokPunctuation::Semicolon)
+ {
+ OnDefault();
+ return;
+ }
+ SetResult(done,pop_success);
+ eState = e_none;
+ break;
+ case expect_exceptions_list:
+ if (i_rToken.Id() != TokPunctuation::BracketOpen)
+ {
+ OnDefault();
+ return;
+ }
+ SetResult(done,stay);
+ eState = expect_exception;
+ break;
+ case expect_exception_separator:
+ if (i_rToken.Id() == TokPunctuation::Comma)
+ {
+ SetResult(done,stay);
+ eState = expect_exception;
+ }
+ else if (i_rToken.Id() == TokPunctuation::BracketClose)
+ {
+ SetResult(done,stay);
+ eState = exceptions_finished;
+ }
+ else
+ {
+ OnDefault();
+ return;
+ }
+ break;
+ default:
+ OnDefault();
+ }
+}
+
+void
+PE_Function::Process_BuiltInType( const TokBuiltInType & i_rToken )
+{
+ switch (eState)
+ {
+ case e_start:
+ GoIntoReturnType();
+ break;
+ case expect_parameter_variable:
+ GoIntoParameterVariable();
+ break;
+ case expect_parameter_separator:
+ if (i_rToken.Id() != TokBuiltInType::bty_ellipse)
+ {
+ OnDefault();
+ }
+ else
+ {
+ pCurFunction->Set_Ellipse();
+ SetResult(done,stay);
+ // eState stays the same, because we wait for the closing ")" now.
+ }
+ break;
+ case expect_exception:
+ GoIntoException();
+ break;
+ default:
+ OnDefault();
+ } // end switch
+}
+
+void
+PE_Function::Process_ParameterHandling( const TokParameterHandling & i_rToken )
+{
+ if (eState != expect_parameter)
+ {
+ OnDefault();
+ return;
+ }
+
+ switch (i_rToken.Id())
+ {
+ case TokParameterHandling::ph_in:
+ eCurParsedParam_Direction = ary::idl::param_in;
+ break;
+ case TokParameterHandling::ph_out:
+ eCurParsedParam_Direction = ary::idl::param_out;
+ break;
+ case TokParameterHandling::ph_inout:
+ eCurParsedParam_Direction = ary::idl::param_inout;
+ break;
+ default:
+ csv_assert(false);
+ }
+ SetResult(done,stay);
+ eState = expect_parameter_variable;
+}
+
+void
+PE_Function::Process_Raises()
+{
+ if (eState != params_finished)
+ {
+ OnDefault();
+ return;
+ }
+ SetResult(done,stay);
+ eState = expect_exceptions_list;
+}
+
+void
+PE_Function::Process_Default()
+{
+ switch (eState)
+ {
+ case e_start:
+ GoIntoReturnType();
+ break;
+ case expect_parameter_variable:
+ GoIntoParameterVariable();
+ break;
+ case expect_exception:
+ GoIntoException();
+ break;
+ default:
+ OnDefault();
+ } // end switch
+}
+
+void
+PE_Function::GoIntoReturnType()
+{
+ SetResult(not_done, push_sure, pPE_Type.Ptr());
+ eState = in_return_type;
+}
+
+void
+PE_Function::GoIntoParameterVariable()
+{
+ SetResult(not_done, push_sure, pPE_Variable.Ptr());
+ eState = in_parameter_variable;
+}
+
+void
+PE_Function::GoIntoException()
+{
+ SetResult(not_done, push_sure, pPE_Type.Ptr());
+ eState = in_exception;
+}
+
+void
+PE_Function::OnDefault()
+{
+ throw X_AutodocParser(X_AutodocParser::x_Any);
+}
+
+void
+PE_Function::InitData()
+{
+ eState = e_start;
+
+ sData_Name.clear();
+ nData_ReturnType = 0;
+ bData_Oneway = false;
+ pCurFunction = 0;
+
+ nCurParsedType = 0;
+ eCurParsedParam_Direction = ary::idl::param_in;
+ nCurParsedParam_Type = 0;
+ sCurParsedParam_Name.clear();
+
+ if (bIsForConstructors)
+ {
+ eState = expect_name;
+ }
+}
+
+void
+PE_Function::ReceiveData()
+{
+ switch (eState)
+ {
+ case in_return_type:
+ nData_ReturnType = nCurParsedType;
+ nCurParsedType = 0;
+ eState = expect_name;
+ break;
+ case in_parameter_variable:
+ csv_assert(pCurFunction != 0);
+ pCurFunction->Add_Parameter(
+ sCurParsedParam_Name,
+ nCurParsedParam_Type,
+ eCurParsedParam_Direction );
+ sCurParsedParam_Name = "";
+ nCurParsedParam_Type = 0;
+ eCurParsedParam_Direction = ary::idl::param_in;
+ eState = expect_parameter_separator;
+ break;
+ case in_exception:
+ csv_assert(pCurFunction != 0);
+ pCurFunction->Add_Exception(nCurParsedType);
+ eState = expect_exception_separator;
+ break;
+ default:
+ csv_assert(false);
+ } // end switch
+}
+
+void
+PE_Function::TransferData()
+{
+ pCurFunction = 0;
+ eState = e_none;
+}
+
+UnoIDL_PE &
+PE_Function::MyPE()
+{
+ return *this;
+}
+
+
+
+} // namespace uidl
+} // namespace csi
+
diff --git a/autodoc/source/parser_i/idl/pe_iface.cxx b/autodoc/source/parser_i/idl/pe_iface.cxx
new file mode 100644
index 000000000000..789af536cb3a
--- /dev/null
+++ b/autodoc/source/parser_i/idl/pe_iface.cxx
@@ -0,0 +1,467 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <s2_luidl/pe_iface.hxx>
+
+
+// NOT FULLY DEFINED SERVICES
+#include <ary/idl/i_interface.hxx>
+#include <ary/idl/i_gate.hxx>
+#include <ary/idl/ip_ce.hxx>
+#include <ary/doc/d_oldidldocu.hxx>
+#include <s2_luidl/pe_func2.hxx>
+#include <s2_luidl/pe_attri.hxx>
+#include <s2_luidl/pe_type2.hxx>
+#include <s2_luidl/tk_keyw.hxx>
+#include <s2_luidl/tk_ident.hxx>
+#include <s2_luidl/tk_punct.hxx>
+#include <adc_cl.hxx>
+
+
+
+namespace csi
+{
+namespace uidl
+{
+
+#ifdef DF
+#undef DF
+#endif
+#define DF &PE_Interface::On_Default
+
+PE_Interface::F_TOK
+PE_Interface::aDispatcher[PE_Interface::e_STATES_MAX][PE_Interface::tt_MAX] =
+ { { DF, DF, DF, DF, DF }, // e_none
+ { &PE_Interface::On_need_uik_MetaType,
+ DF, DF, DF, DF }, // need_uik
+ { DF, &PE_Interface::On_uik_Identifier,
+ &PE_Interface::On_uik_Punctuation,
+ DF, DF }, // uik
+ { &PE_Interface::On_need_ident_MetaType,
+ DF, DF, DF, DF }, // need_ident
+ { DF, &PE_Interface::On_ident_Identifier,
+ &PE_Interface::On_ident_Punctuation,
+ DF, DF }, // ident
+ { &PE_Interface::On_need_interface_MetaType,
+ DF, DF, DF, DF }, // need_interface
+ { DF, &PE_Interface::On_need_name_Identifer,
+ DF, DF, DF }, // need_name
+ { DF, DF, &PE_Interface::On_wait_for_base_Punctuation,
+ DF, DF }, // wait_for_base
+ { DF, DF, DF, DF, DF }, // in_base
+ { DF, DF, &PE_Interface::On_need_curlbr_open_Punctuation,
+ DF, DF }, // need_curlbr_open
+ { &PE_Interface::On_std_Metatype,
+ &PE_Interface::On_std_GotoFunction,
+ &PE_Interface::On_std_Punctuation,
+ &PE_Interface::On_std_GotoFunction,
+ &PE_Interface::On_std_Stereotype }, // e_std
+ { DF, DF, DF, DF, DF }, // in_function
+ { DF, DF, DF, DF, DF }, // in_attribute
+ { DF, DF, &PE_Interface::On_need_finish_Punctuation,
+ DF, DF }, // need_finish
+ { DF, DF, DF, DF, DF } // in_base_interface
+ };
+
+
+
+inline void
+PE_Interface::CallHandler( const char * i_sTokenText,
+ E_TokenType i_eTokenType )
+ { (this->*aDispatcher[eState][i_eTokenType])(i_sTokenText); }
+
+
+
+PE_Interface::PE_Interface()
+ : eState(e_none),
+ sData_Name(),
+ bIsPreDeclaration(false),
+ pCurInterface(0),
+ nCurInterface(0),
+ pPE_Function(0),
+ pPE_Attribute(0),
+ pPE_Type(0),
+ nCurParsed_Base(0),
+ bOptionalMember(false)
+{
+ pPE_Function = new PE_Function(nCurInterface);
+ pPE_Type = new PE_Type(nCurParsed_Base);
+ pPE_Attribute = new PE_Attribute(nCurInterface);
+}
+
+void
+PE_Interface::EstablishContacts( UnoIDL_PE * io_pParentPE,
+ ary::Repository & io_rRepository,
+ TokenProcessing_Result & o_rResult )
+{
+ UnoIDL_PE::EstablishContacts(io_pParentPE,io_rRepository,o_rResult);
+ pPE_Function->EstablishContacts(this,io_rRepository,o_rResult);
+ pPE_Type->EstablishContacts(this,io_rRepository,o_rResult);
+ pPE_Attribute->EstablishContacts(this,io_rRepository,o_rResult);
+}
+
+PE_Interface::~PE_Interface()
+{
+}
+
+void
+PE_Interface::ProcessToken( const Token & i_rToken )
+{
+ i_rToken.Trigger(*this);
+}
+
+
+void
+PE_Interface::Process_MetaType( const TokMetaType & i_rToken )
+{
+ CallHandler( i_rToken.Text(), tt_metatype );
+}
+
+void
+PE_Interface::Process_Identifier( const TokIdentifier & i_rToken )
+{
+ CallHandler( i_rToken.Text(), tt_identifier );
+}
+
+void
+PE_Interface::Process_Punctuation( const TokPunctuation & i_rToken )
+{
+ CallHandler( i_rToken.Text(), tt_punctuation );
+}
+
+void
+PE_Interface::Process_NameSeparator()
+{
+ CallHandler( "", tt_startoftype );
+}
+
+void
+PE_Interface::Process_BuiltInType( const TokBuiltInType & i_rToken )
+{
+ CallHandler( i_rToken.Text(), tt_startoftype );
+}
+
+void
+PE_Interface::Process_TypeModifier( const TokTypeModifier & i_rToken )
+{
+ CallHandler( i_rToken.Text(), tt_startoftype );
+}
+
+void
+PE_Interface::Process_Stereotype( const TokStereotype & i_rToken )
+{
+ CallHandler( i_rToken.Text(), tt_stereotype );
+}
+
+void
+PE_Interface::Process_Default()
+{
+ SetResult(done, stay);
+}
+
+
+void
+PE_Interface::On_need_uik_MetaType(const char *)
+{
+ // Deprecated, data will be ignored
+ SetResult(done, stay);
+ eState = uik;
+}
+
+void
+PE_Interface::On_uik_Identifier(const char *)
+{
+ // Deprecated, data will be ignored
+ SetResult(done, stay);
+}
+
+void
+PE_Interface::On_uik_Punctuation(const char * i_sText)
+{
+ // Deprecated, data will be ignored
+ SetResult(done, stay);
+ if (strcmp(",",i_sText) == 0)
+ {
+ eState = need_ident;
+ }
+}
+
+void
+PE_Interface::On_need_ident_MetaType(const char *)
+{
+ SetResult(done, stay);
+ eState = ident;
+}
+
+void
+PE_Interface::On_ident_Identifier(const char *)
+{
+ SetResult(done, stay);
+}
+
+void
+PE_Interface::On_ident_Punctuation(const char * i_sText)
+{
+ SetResult(done, stay);
+ if (strcmp(")",i_sText) == 0)
+ {
+ eState = need_interface;
+ }
+}
+
+void
+PE_Interface::On_need_interface_MetaType(const char *)
+{
+ SetResult(done, stay);
+ eState = need_name;
+}
+
+void
+PE_Interface::On_need_name_Identifer(const char * i_sText)
+{
+ SetResult(done, stay);
+ sData_Name = i_sText;
+ eState = wait_for_base;
+}
+
+void
+PE_Interface::On_wait_for_base_Punctuation(const char * i_sText)
+{
+ if (i_sText[0] != ';')
+ {
+ switch (i_sText[0])
+ {
+ case ':':
+ SetResult(done, push_sure, pPE_Type.Ptr());
+ eState = in_base;
+ break;
+ case '{':
+ store_Interface();
+
+ SetResult(done,stay);
+ eState = e_std;
+ break;
+ default:
+ SetResult(not_done, pop_failure);
+ eState = e_none;
+ } // end switch
+ }
+ else
+ {
+ bIsPreDeclaration = true;
+ SetResult(done, pop_success);
+ eState = e_none;
+ }
+}
+
+void
+PE_Interface::On_need_curlbr_open_Punctuation(const char * i_sText)
+{
+ if (i_sText[0] == '{')
+ {
+ store_Interface();
+
+ SetResult(done, stay);
+ eState = e_std;
+ }
+ else {
+ csv_assert(false);
+ }
+}
+
+
+void
+PE_Interface::On_std_Metatype(const char * i_sText)
+{
+ if (strcmp(i_sText,"attribute") == 0)
+ On_std_GotoAttribute(i_sText);
+ else if (strcmp(i_sText,"interface") == 0)
+ On_std_GotoBaseInterface(i_sText);
+ else
+ On_std_GotoFunction(i_sText);
+}
+
+void
+PE_Interface::On_std_Punctuation(const char * i_sText)
+{
+ switch (i_sText[0])
+ {
+ case '}':
+ SetResult(done, stay);
+ eState = need_finish;
+ break;
+ case ';': // Appears after base interface declarations.
+ SetResult(done, stay);
+ break;
+ default:
+ SetResult(not_done, pop_failure);
+ eState = e_none;
+ } // end switch
+}
+
+void
+PE_Interface::On_std_Stereotype(const char * i_sText)
+{
+ if (strcmp(i_sText,"oneway") == 0)
+ On_std_GotoFunction(i_sText);
+ else if ( strcmp(i_sText,"readonly") == 0
+ OR strcmp(i_sText,"bound") == 0 )
+ On_std_GotoAttribute(i_sText);
+ else if (strcmp(i_sText,"optional") == 0)
+ {
+ bOptionalMember = true;
+ SetResult(done, stay);
+ }
+ else
+ SetResult(not_done, pop_failure);
+}
+
+void
+PE_Interface::On_std_GotoFunction(const char * )
+{
+ SetResult(not_done, push_sure, pPE_Function.Ptr());
+ eState = in_function;
+}
+
+void
+PE_Interface::On_std_GotoAttribute(const char * )
+{
+ SetResult(not_done, push_sure, pPE_Attribute.Ptr());
+ eState = in_attribute;
+}
+
+void
+PE_Interface::On_std_GotoBaseInterface(const char * )
+{
+ SetResult(done, push_sure, pPE_Type.Ptr());
+ eState = in_base_interface;
+}
+
+void
+PE_Interface::On_need_finish_Punctuation(const char * i_sText)
+{
+ switch (i_sText[0])
+ {
+ case ';':
+ SetResult(done, pop_success);
+ eState = e_none;
+ break;
+ default:
+ SetResult(not_done, pop_failure);
+ eState = e_none;
+ } // end switch
+}
+
+void
+PE_Interface::On_Default(const char *)
+{
+ SetResult(not_done, pop_failure);
+}
+
+void
+PE_Interface::InitData()
+{
+ eState = need_interface;
+
+ sData_Name.clear();
+ bIsPreDeclaration = false;
+ pCurInterface = 0;
+ nCurInterface = 0;
+ nCurParsed_Base = 0;
+ bOptionalMember = false;
+}
+
+void
+PE_Interface::TransferData()
+{
+ if (NOT bIsPreDeclaration)
+ {
+ csv_assert(sData_Name.size() > 0);
+ csv_assert(nCurInterface.IsValid());
+ }
+ else
+ {
+ sData_Name.clear();
+ pCurInterface = 0;
+ nCurInterface = 0;
+ }
+
+ eState = e_none;
+}
+
+void
+PE_Interface::ReceiveData()
+{
+ switch (eState)
+ {
+ case in_base:
+ eState = need_curlbr_open;
+ break;
+ case in_function:
+ eState = e_std;
+ break;
+ case in_attribute:
+ eState = e_std;
+ break;
+ case in_base_interface:
+ if (bOptionalMember)
+ {
+ pPE_Type->SetOptional();
+ bOptionalMember = false;
+ }
+ pCurInterface->Add_Base(
+ nCurParsed_Base,
+ pPE_Type->ReleaseDocu());
+ nCurParsed_Base = 0;
+ eState = e_std;
+ break;
+ default:
+ csv_assert(false);
+ }
+}
+
+UnoIDL_PE &
+PE_Interface::MyPE()
+{
+ return *this;
+}
+
+void
+PE_Interface::store_Interface()
+{
+ pCurInterface = & Gate().Ces().Store_Interface(
+ CurNamespace().CeId(),
+ sData_Name,
+ nCurParsed_Base );
+ nCurInterface = pCurInterface->CeId();
+ PassDocuAt(*pCurInterface);
+}
+
+
+} // namespace uidl
+} // namespace csi
diff --git a/autodoc/source/parser_i/idl/pe_property.cxx b/autodoc/source/parser_i/idl/pe_property.cxx
new file mode 100644
index 000000000000..0e585b27e9a7
--- /dev/null
+++ b/autodoc/source/parser_i/idl/pe_property.cxx
@@ -0,0 +1,238 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <s2_luidl/pe_property.hxx>
+
+
+// NOT FULLY DEFINED SERVICES
+#include <ary/idl/i_gate.hxx>
+#include <ary/idl/i_property.hxx>
+#include <ary/idl/i_service.hxx>
+#include <ary/idl/ip_ce.hxx>
+#include <ary/doc/d_oldidldocu.hxx>
+#include <s2_luidl/pe_vari2.hxx>
+#include <s2_luidl/tk_keyw.hxx>
+#include <s2_luidl/tk_ident.hxx>
+#include <s2_luidl/tk_punct.hxx>
+
+
+
+namespace csi
+{
+namespace uidl
+{
+
+
+
+PE_Property::PE_Property( const Ce_id & i_rCurOwner )
+ : eState(e_none),
+ pCurOwner(&i_rCurOwner),
+ pPE_Variable(0),
+ nCurParsedType(0),
+ sCurParsedName(),
+ bIsOptional(false),
+ aStereotypes()
+{
+ pPE_Variable = new PE_Variable(nCurParsedType, sCurParsedName);
+}
+
+void
+PE_Property::EstablishContacts( UnoIDL_PE * io_pParentPE,
+ ary::Repository & io_rRepository,
+ TokenProcessing_Result & o_rResult )
+{
+ UnoIDL_PE::EstablishContacts(io_pParentPE,io_rRepository,o_rResult);
+ pPE_Variable->EstablishContacts(this,io_rRepository,o_rResult);
+}
+
+PE_Property::~PE_Property()
+{
+}
+
+void
+PE_Property::ProcessToken( const Token & i_rToken )
+{
+ i_rToken.Trigger(*this);
+}
+
+void
+PE_Property::Process_Stereotype( const TokStereotype & i_rToken )
+{
+ switch (i_rToken.Id())
+ {
+ case TokStereotype::ste_optional:
+ bIsOptional = true;
+ break;
+ case TokStereotype::ste_readonly:
+ aStereotypes.Set_Flag(Stereotypes::readonly);
+ break;
+ case TokStereotype::ste_bound:
+ aStereotypes.Set_Flag(Stereotypes::bound);
+ break;
+ case TokStereotype::ste_constrained:
+ aStereotypes.Set_Flag(Stereotypes::constrained);
+ break;
+ case TokStereotype::ste_maybeambiguous:
+ aStereotypes.Set_Flag(Stereotypes::maybeambiguous);
+ break;
+ case TokStereotype::ste_maybedefault:
+ aStereotypes.Set_Flag(Stereotypes::maybedefault);
+ break;
+ case TokStereotype::ste_maybevoid:
+ aStereotypes.Set_Flag(Stereotypes::maybevoid);
+ break;
+ case TokStereotype::ste_removable:
+ aStereotypes.Set_Flag(Stereotypes::removable);
+ break;
+ case TokStereotype::ste_transient:
+ aStereotypes.Set_Flag(Stereotypes::transient);
+ break;
+
+ default:
+ SetResult(not_done, pop_failure);
+ eState = e_none;
+ return;
+ }
+
+ SetResult(done, stay);
+}
+
+void
+PE_Property::Process_MetaType( const TokMetaType & i_rToken )
+{
+ if (eState == e_start)
+ {
+ if ( i_rToken.Id() == TokMetaType::mt_property )
+ {
+ SetResult(done, stay);
+ eState = expect_variable;
+ return;
+ }
+ } // endif (eState == e_start)
+
+ SetResult(not_done, pop_failure);
+ eState = e_none;
+}
+
+void
+PE_Property::Process_Punctuation( const TokPunctuation & i_rToken )
+{
+ switch (eState)
+ {
+ case e_start:
+ SetResult(done, stay);
+ break;
+ case expect_variable:
+ if (i_rToken.Id() == TokPunctuation::Semicolon)
+ {
+ SetResult(done, pop_success);
+ eState = e_none;
+ }
+ else if (i_rToken.Id() == TokPunctuation::Comma)
+ SetResult(done, stay);
+ else
+ SetResult(not_done, pop_failure);
+ break;
+ default:
+ csv_assert(false);
+ }
+}
+
+void
+PE_Property::Process_Default()
+{
+ if (eState == expect_variable)
+ {
+ SetResult(not_done, push_sure, pPE_Variable.Ptr());
+ eState = in_variable;
+ }
+ else
+ SetResult(not_done, pop_failure);
+}
+
+void
+PE_Property::InitData()
+{
+ eState = e_start;
+
+ nCurParsedType = 0;
+ sCurParsedName = "";
+
+ // bIsOptional and
+ // aStereotypes
+ // may be preset by the PE_Service-(or PE_Interface-)parent
+ // with PresetOptional() or
+ // PresetStereotype()
+ // - therefore it must not be set here!
+}
+
+void
+PE_Property::TransferData()
+{
+ if (bIsOptional)
+ {
+ SetOptional();
+ bIsOptional = false;
+ }
+
+ ary::idl::CodeEntity *
+ pCe = 0;
+ csv_assert(pCurOwner->IsValid());
+
+ pCe = &Gate().Ces().Store_Property( *pCurOwner,
+ sCurParsedName,
+ nCurParsedType,
+ aStereotypes );
+
+ csv_assert(pCe != 0);
+ PassDocuAt(*pCe);
+
+ nCurParsedType = 0;
+ sCurParsedName.clear();
+ aStereotypes = Stereotypes();
+
+ eState = e_none;
+}
+
+void
+PE_Property::ReceiveData()
+{
+ eState = expect_variable;
+}
+
+
+UnoIDL_PE &
+PE_Property::MyPE()
+{
+ return *this;
+}
+
+
+} // namespace uidl
+} // namespace csi
+
diff --git a/autodoc/source/parser_i/idl/pe_selem.cxx b/autodoc/source/parser_i/idl/pe_selem.cxx
new file mode 100644
index 000000000000..40d052b8b267
--- /dev/null
+++ b/autodoc/source/parser_i/idl/pe_selem.cxx
@@ -0,0 +1,205 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <s2_luidl/pe_selem.hxx>
+
+// NOT FULLY DECLARED SERVICES
+#include <ary/idl/i_gate.hxx>
+#include <ary/idl/i_struct.hxx>
+#include <ary/idl/i_structelem.hxx>
+#include <ary/idl/ip_ce.hxx>
+#include <ary/doc/d_oldidldocu.hxx>
+#include <s2_luidl/pe_type2.hxx>
+#include <s2_luidl/tk_ident.hxx>
+#include <s2_luidl/tk_punct.hxx>
+
+
+namespace csi
+{
+namespace uidl
+{
+
+namespace
+{
+ const String C_sNone;
+}
+
+PE_StructElement::PE_StructElement( RStructElement & o_rResult,
+ const RStruct & i_rCurStruct,
+ const String & i_rCurStructTemplateParam )
+ : eState(e_none),
+ pResult(&o_rResult),
+ pCurStruct(&i_rCurStruct),
+ bIsExceptionElement(false),
+ pPE_Type(0),
+ nType(0),
+ sName(),
+ pCurStructTemplateParam(&i_rCurStructTemplateParam)
+{
+ pPE_Type = new PE_Type(nType);
+}
+
+PE_StructElement::PE_StructElement( RStructElement & o_rResult,
+ const RStruct & i_rCurExc )
+ : eState(e_none),
+ pResult(&o_rResult),
+ pCurStruct(&i_rCurExc),
+ bIsExceptionElement(true),
+ pPE_Type(0),
+ nType(0),
+ sName(),
+ pCurStructTemplateParam(&C_sNone)
+{
+ pPE_Type = new PE_Type(nType);
+}
+
+void
+PE_StructElement::EstablishContacts( UnoIDL_PE * io_pParentPE,
+ ary::Repository & io_rRepository,
+ TokenProcessing_Result & o_rResult )
+{
+ UnoIDL_PE::EstablishContacts(io_pParentPE,io_rRepository,o_rResult);
+ pPE_Type->EstablishContacts(this,io_rRepository,o_rResult);
+}
+
+PE_StructElement::~PE_StructElement()
+{
+}
+
+void
+PE_StructElement::ProcessToken( const Token & i_rToken )
+{
+ i_rToken.Trigger(*this);
+}
+
+void
+PE_StructElement::Process_Default()
+{
+ if (eState == expect_type)
+ {
+ SetResult( not_done, push_sure, pPE_Type.Ptr() );
+ eState = expect_name;
+ }
+ else {
+ csv_assert(false);
+ }
+}
+
+void
+PE_StructElement::Process_Identifier( const TokIdentifier & i_rToken )
+{
+ csv_assert(*i_rToken.Text() != 0);
+
+ if (eState == expect_type)
+ {
+ if ( *pCurStructTemplateParam == i_rToken.Text() )
+ {
+ nType = lhf_FindTemplateParamType();
+ SetResult( done, stay );
+ eState = expect_name;
+ }
+ else // No template parameter type existing, or not matching:
+ {
+ SetResult( not_done, push_sure, pPE_Type.Ptr() );
+ eState = expect_name;
+ }
+ }
+ else if (eState == expect_name)
+ {
+ sName = i_rToken.Text();
+ SetResult( done, stay );
+ eState = expect_finish;
+ }
+ else {
+ csv_assert(false);
+ }
+}
+
+void
+PE_StructElement::Process_Punctuation( const TokPunctuation &)
+{
+ csv_assert(eState == expect_finish);
+
+ SetResult( done, pop_success );
+}
+
+void
+PE_StructElement::InitData()
+{
+ eState = expect_type;
+
+ nType = 0;
+ sName = "";
+}
+
+void
+PE_StructElement::TransferData()
+{
+ csv_assert(pResult != 0 AND pCurStruct != 0);
+
+ ary::idl::StructElement *
+ pCe = 0;
+ if (bIsExceptionElement)
+ {
+ pCe = & Gate().Ces().Store_ExceptionMember(
+ *pCurStruct,
+ sName,
+ nType );
+ }
+ else
+ {
+ pCe = & Gate().Ces().Store_StructMember(
+ *pCurStruct,
+ sName,
+ nType );
+ }
+ *pResult = pCe->CeId();
+ PassDocuAt(*pCe);
+
+ eState = e_none;
+}
+
+UnoIDL_PE &
+PE_StructElement::MyPE()
+{
+ return *this;
+}
+
+ary::idl::Type_id
+PE_StructElement::lhf_FindTemplateParamType() const
+{
+ const ary::idl::CodeEntity &
+ rCe = Gate().Ces().Find_Ce(*pCurStruct);
+ const ary::idl::Struct &
+ rStruct = static_cast< const ary::idl::Struct& >(rCe);
+ return rStruct.TemplateParameterType();
+}
+
+
+} // namespace uidl
+} // namespace csi
diff --git a/autodoc/source/parser_i/idl/pe_servi.cxx b/autodoc/source/parser_i/idl/pe_servi.cxx
new file mode 100644
index 000000000000..eb8bf0f7ede4
--- /dev/null
+++ b/autodoc/source/parser_i/idl/pe_servi.cxx
@@ -0,0 +1,393 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <s2_luidl/pe_servi.hxx>
+
+
+// NOT FULLY DEFINED SERVICES
+#include <ary/idl/i_gate.hxx>
+#include <ary/idl/i_service.hxx>
+#include <ary/idl/i_siservice.hxx>
+#include <ary/idl/ip_ce.hxx>
+#include <ary/doc/d_oldidldocu.hxx>
+#include <s2_luidl/pe_func2.hxx>
+#include <s2_luidl/pe_property.hxx>
+#include <s2_luidl/pe_type2.hxx>
+#include <s2_luidl/tk_keyw.hxx>
+#include <s2_luidl/tk_ident.hxx>
+#include <s2_luidl/tk_punct.hxx>
+
+
+
+namespace csi
+{
+namespace uidl
+{
+
+
+
+PE_Service::PE_Service()
+ : eState(e_none),
+ sData_Name(),
+ bIsPreDeclaration(false),
+ pCurService(0),
+ pCurSiService(0),
+ nCurService(0),
+ pPE_Property(0),
+ nCurParsed_Property(0),
+ pPE_Type(0),
+ nCurParsed_Type(0),
+ pPE_Constructor(0),
+ bOptionalMember(false)
+{
+ pPE_Property = new PE_Property(nCurService);
+ pPE_Type = new PE_Type(nCurParsed_Type);
+ pPE_Constructor = new PE_Function(nCurService, PE_Function::constructor);
+}
+
+void
+PE_Service::EstablishContacts( UnoIDL_PE * io_pParentPE,
+ ary::Repository & io_rRepository,
+ TokenProcessing_Result & o_rResult )
+{
+ UnoIDL_PE::EstablishContacts(io_pParentPE,io_rRepository,o_rResult);
+ pPE_Property->EstablishContacts(this,io_rRepository,o_rResult);
+ pPE_Type->EstablishContacts(this,io_rRepository,o_rResult);
+ pPE_Constructor->EstablishContacts(this,io_rRepository,o_rResult);
+}
+
+PE_Service::~PE_Service()
+{
+}
+
+void
+PE_Service::ProcessToken( const Token & i_rToken )
+{
+ i_rToken.Trigger(*this);
+}
+
+
+void
+PE_Service::Process_MetaType( const TokMetaType & i_rToken )
+{
+ switch ( i_rToken.Id() )
+ {
+ case TokMetaType::mt_service:
+ if (eState == need_name)
+ SetResult(done, stay );
+ else if (eState == e_std)
+ {
+ SetResult(done, push_sure, pPE_Type.Ptr());
+ eState = in_service_type;
+ }
+ else
+ On_Default();
+ break;
+ case TokMetaType::mt_interface:
+ if (eState == e_std)
+ {
+ SetResult(done, push_sure, pPE_Type.Ptr());
+ eState = in_ifc_type;
+ }
+ else
+ On_Default();
+ break;
+ case TokMetaType::mt_property:
+ if (eState == e_std)
+ {
+ StartProperty();
+ }
+ else
+ On_Default();
+ break;
+ default:
+ // KORR_FUTURE:
+ // Should throw syntax error warning.
+ ;
+ } // end switch
+}
+
+void
+PE_Service::Process_Identifier( const TokIdentifier & i_rToken )
+{
+ if (eState == need_name)
+ {
+ sData_Name = i_rToken.Text();
+ SetResult(done, stay);
+ eState = need_curlbr_open;
+ }
+ else if (eState == e_std_sib)
+ {
+ SetResult(not_done, push_sure, pPE_Constructor.Ptr());
+ }
+ else
+ On_Default();
+}
+
+void
+PE_Service::Process_Punctuation( const TokPunctuation & i_rToken )
+{
+ switch (i_rToken.Id())
+ {
+ case TokPunctuation::Colon:
+ if (eState == need_curlbr_open)
+ {
+ SetResult(done, push_sure, pPE_Type.Ptr());
+ eState = need_base_interface;
+ }
+ else
+ On_Default();
+ break;
+
+ case TokPunctuation::CurledBracketOpen:
+ if (eState == need_curlbr_open)
+ {
+ pCurService = &Gate().Ces().Store_Service(
+ CurNamespace().CeId(),
+ sData_Name );
+ nCurService = pCurService->CeId();
+ PassDocuAt(*pCurService);
+ SetResult(done, stay);
+ eState = e_std;
+ }
+ else if (eState == need_curlbr_open_sib)
+ {
+ SetResult(done, stay);
+ eState = e_std_sib;
+ }
+ else
+ On_Default();
+ break;
+ case TokPunctuation::CurledBracketClose:
+ if (eState == e_std OR eState == e_std_sib)
+ {
+ SetResult(done, stay);
+ eState = need_finish;
+ }
+ else
+ On_Default();
+ break;
+ case TokPunctuation::Comma:
+ if (eState == expect_ifc_separator)
+ {
+ SetResult(done, push_sure, pPE_Type.Ptr());
+ eState = in_ifc_type;
+ }
+ else if (eState == expect_service_separator)
+ {
+ SetResult(done, push_sure, pPE_Type.Ptr());
+ eState = in_service_type;
+ }
+ else if (eState == e_std)
+ {
+ SetResult(done, stay);
+ }
+ else
+ On_Default();
+ break;
+ case TokPunctuation::Semicolon:
+ switch (eState)
+ {
+ case need_curlbr_open:
+ sData_Name.clear();
+ bIsPreDeclaration = true;
+ SetResult(done, pop_success);
+ eState = e_none;
+ break;
+ case need_curlbr_open_sib:
+ SetResult(done, pop_success);
+ eState = e_none;
+ break;
+ case expect_ifc_separator:
+ case expect_service_separator:
+ SetResult(done, stay);
+ eState = e_std;
+ break;
+ case need_finish:
+ SetResult(done, pop_success);
+ eState = e_none;
+ break;
+ case at_ignore:
+ SetResult(done, stay);
+ eState = e_std;
+ break;
+ default:
+ On_Default();
+ } // end switch
+ break;
+ default:
+ On_Default();
+ } // end switch
+}
+
+void
+PE_Service::Process_Stereotype( const TokStereotype & i_rToken )
+{
+ if (i_rToken.Id() == TokStereotype::ste_optional)
+ {
+ bOptionalMember = true;
+ SetResult(done, stay);
+ }
+ else if ( eState == e_std )
+ {
+ StartProperty();
+ }
+ else
+ On_Default();
+}
+
+void
+PE_Service::Process_Needs()
+{
+ SetResult(done,stay);
+ eState = at_ignore;
+}
+
+void
+PE_Service::Process_Observes()
+{
+ SetResult(done,stay);
+ eState = at_ignore;
+}
+
+void
+PE_Service::Process_Default()
+{
+ On_Default();
+}
+
+
+void
+PE_Service::On_Default()
+{
+ if (eState == at_ignore)
+ SetResult(done, stay);
+ else
+ SetResult(not_done, pop_failure);
+}
+
+void
+PE_Service::InitData()
+{
+ eState = need_name;
+ sData_Name.clear();
+ bIsPreDeclaration = false;
+ pCurService = 0;
+ pCurSiService = 0;
+ nCurService = 0;
+ nCurParsed_Property = 0;
+ nCurParsed_Type = 0;
+ bOptionalMember = false;
+}
+
+void
+PE_Service::TransferData()
+{
+ if (NOT bIsPreDeclaration)
+ {
+ csv_assert(sData_Name.size() > 0);
+ csv_assert( (pCurService != 0) != (pCurSiService != 0) );
+ }
+
+ eState = e_none;
+}
+
+void
+PE_Service::ReceiveData()
+{
+ switch (eState)
+ {
+ case in_property:
+ eState = e_std;
+ break;
+ case in_ifc_type:
+ if (bOptionalMember)
+ {
+ pPE_Type->SetOptional();
+ }
+ pCurService->AddRef_SupportedInterface(
+ nCurParsed_Type,
+ pPE_Type->ReleaseDocu());
+ nCurParsed_Type = 0;
+ eState = expect_ifc_separator;
+ break;
+ case in_service_type:
+ if (bOptionalMember)
+ {
+ pPE_Type->SetOptional();
+ }
+ pCurService->AddRef_IncludedService(
+ nCurParsed_Type,
+ pPE_Type->ReleaseDocu());
+ nCurParsed_Type = 0;
+ eState = expect_service_separator;
+ break;
+ case need_base_interface:
+ pCurSiService = &Gate().Ces().Store_SglIfcService(
+ CurNamespace().CeId(),
+ sData_Name,
+ nCurParsed_Type );
+ nCurService = pCurSiService->CeId();
+ PassDocuAt(*pCurSiService);
+
+ nCurParsed_Type = 0;
+ eState = need_curlbr_open_sib;
+ break;
+ case e_std_sib:
+ break;
+ default:
+ csv_assert(false);
+ }
+
+ bOptionalMember = false;
+}
+
+
+UnoIDL_PE &
+PE_Service::MyPE()
+{
+ return *this;
+}
+
+void
+PE_Service::StartProperty()
+{
+ SetResult(not_done, push_sure, pPE_Property.Ptr());
+ eState = in_property;
+
+ if (bOptionalMember)
+ {
+ pPE_Property->PresetOptional();
+ bOptionalMember = false;
+ }
+}
+
+
+} // namespace uidl
+} // namespace csi
+
diff --git a/autodoc/source/parser_i/idl/pe_singl.cxx b/autodoc/source/parser_i/idl/pe_singl.cxx
new file mode 100644
index 000000000000..f41d938f915f
--- /dev/null
+++ b/autodoc/source/parser_i/idl/pe_singl.cxx
@@ -0,0 +1,272 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <s2_luidl/pe_singl.hxx>
+
+
+// NOT FULLY DEFINED SERVICES
+#include <ary/idl/i_gate.hxx>
+#include <ary/idl/i_singleton.hxx>
+#include <ary/idl/i_sisingleton.hxx>
+#include <ary/idl/ip_ce.hxx>
+#include <ary/doc/d_oldidldocu.hxx>
+#include <s2_luidl/pe_type2.hxx>
+#include <s2_luidl/tk_keyw.hxx>
+#include <s2_luidl/tk_ident.hxx>
+#include <s2_luidl/tk_punct.hxx>
+
+
+
+namespace csi
+{
+namespace uidl
+{
+
+
+
+#if 0
+#ifdef DF
+#undef DF
+#endif
+#define DF &PE_Singleton::On_Default
+
+
+PE_Singleton::F_TOK
+PE_Singleton::aDispatcher[PE_Singleton::e_STATES_MAX][PE_Singleton::tt_MAX] =
+ { { DF, DF, DF }, // e_none
+ { DF, &PE_Singleton::On_need_name_Identifer,
+ DF }, // need_name
+ { DF, DF, &PE_Singleton::On_need_curlbr_open_Punctuation,
+ }, // need_curlbr_open
+ { &PE_Singleton::On_std_GotoService,
+ DF, &PE_Singleton::On_std_Punctuation,
+ }, // e_std
+ { DF, DF, DF }, // in_service
+ { DF, DF, &PE_Interface::On_need_finish_Punctuation,
+ } // need_finish
+ };
+#endif // 0
+
+
+PE_Singleton::PE_Singleton()
+ : eState(e_none),
+ sData_Name(),
+ bIsPreDeclaration(false),
+ pCurSingleton(0),
+ pCurSiSingleton(0),
+ pPE_Type(0),
+ nCurParsed_Type(0)
+{
+ pPE_Type = new PE_Type(nCurParsed_Type);
+}
+
+void
+PE_Singleton::EstablishContacts( UnoIDL_PE * io_pParentPE,
+ ary::Repository & io_rRepository,
+ TokenProcessing_Result & o_rResult )
+{
+ UnoIDL_PE::EstablishContacts(io_pParentPE,io_rRepository,o_rResult);
+ pPE_Type->EstablishContacts(this,io_rRepository,o_rResult);
+}
+
+PE_Singleton::~PE_Singleton()
+{
+}
+
+void
+PE_Singleton::ProcessToken( const Token & i_rToken )
+{
+ i_rToken.Trigger(*this);
+}
+
+
+void
+PE_Singleton::Process_MetaType( const TokMetaType & i_rToken )
+{
+ switch ( i_rToken.Id() )
+ {
+ case TokMetaType::mt_service:
+ if (eState == e_std)
+ {
+ SetResult(done, push_sure, pPE_Type.Ptr());
+ eState = in_service;
+ }
+ else
+ On_Default();
+ break;
+ case TokMetaType::mt_singleton:
+ if (eState == need_name)
+ SetResult(done, stay);
+ else
+ On_Default();
+ break;
+ default:
+ // KORR_FUTURE
+ // Should throw syntax error warning
+ ;
+
+ } // end switch
+}
+
+void
+PE_Singleton::Process_Identifier( const TokIdentifier & i_rToken )
+{
+ if (eState == need_name)
+ {
+ sData_Name = i_rToken.Text();
+ SetResult(done, stay);
+ eState = need_curlbr_open;
+ }
+ else
+ On_Default();
+}
+
+void
+PE_Singleton::Process_Punctuation( const TokPunctuation & i_rToken )
+{
+ switch (i_rToken.Id())
+ {
+ case TokPunctuation::CurledBracketOpen:
+ if (eState == need_curlbr_open)
+ {
+ pCurSingleton = &Gate().Ces().Store_Singleton(
+ CurNamespace().CeId(),
+ sData_Name );
+ PassDocuAt(*pCurSingleton);
+ SetResult(done, stay);
+ eState = e_std;
+ }
+ else
+ On_Default();
+ break;
+ case TokPunctuation::CurledBracketClose:
+ if (eState == e_std)
+ {
+ SetResult(done, stay);
+ eState = need_finish;
+ }
+ else
+ On_Default();
+ break;
+ case TokPunctuation::Semicolon:
+ switch (eState)
+ {
+ case e_std: SetResult(done, stay);
+ break;
+ case need_finish:
+ SetResult(done, pop_success);
+ eState = e_none;
+ break;
+ default:
+ On_Default();
+ } // end switch
+ break;
+ case TokPunctuation::Colon:
+ switch (eState)
+ {
+ case need_curlbr_open:
+ SetResult(done, push_sure, pPE_Type.Ptr());
+ eState = in_base_interface;
+ break;
+ default:
+ On_Default();
+ } // end switch
+ break;
+ default:
+ On_Default();
+ } // end switch
+}
+
+void
+PE_Singleton::Process_Default()
+{
+ On_Default();
+}
+
+
+void
+PE_Singleton::On_Default()
+{
+ SetResult(not_done, pop_failure);
+}
+
+void
+PE_Singleton::InitData()
+{
+ eState = need_name;
+ sData_Name.clear();
+ bIsPreDeclaration = false;
+ pCurSingleton = 0;
+ pCurSiSingleton = 0;
+ nCurParsed_Type = 0;
+}
+
+void
+PE_Singleton::TransferData()
+{
+ if (NOT bIsPreDeclaration)
+ {
+ csv_assert(sData_Name.size() > 0);
+ csv_assert( (pCurSingleton != 0) != (pCurSiSingleton != 0) );
+ }
+
+ eState = e_none;
+}
+
+void
+PE_Singleton::ReceiveData()
+{
+ switch (eState)
+ {
+ case in_service:
+ pCurSingleton->Set_Service(nCurParsed_Type);
+ nCurParsed_Type = 0;
+ eState = e_std;
+ break;
+ case in_base_interface:
+ pCurSiSingleton = &Gate().Ces().Store_SglIfcSingleton(
+ CurNamespace().CeId(),
+ sData_Name,
+ nCurParsed_Type );
+ PassDocuAt(*pCurSiSingleton);
+ nCurParsed_Type = 0;
+ eState = need_finish;
+ break;
+ default:
+ csv_assert(false);
+ } // end switch
+}
+
+UnoIDL_PE &
+PE_Singleton::MyPE()
+{
+ return *this;
+}
+
+} // namespace uidl
+} // namespace csi
diff --git a/autodoc/source/parser_i/idl/pe_struc.cxx b/autodoc/source/parser_i/idl/pe_struc.cxx
new file mode 100644
index 000000000000..23e44643ff47
--- /dev/null
+++ b/autodoc/source/parser_i/idl/pe_struc.cxx
@@ -0,0 +1,327 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <s2_luidl/pe_struc.hxx>
+
+
+// NOT FULLY DECLARED SERVICES
+#include <ary/idl/i_gate.hxx>
+#include <ary/idl/i_struct.hxx>
+#include <ary/idl/ip_ce.hxx>
+#include <ary/doc/d_oldidldocu.hxx>
+#include <s2_luidl/tk_ident.hxx>
+#include <s2_luidl/tk_punct.hxx>
+#include <s2_luidl/tk_keyw.hxx>
+#include <s2_luidl/pe_type2.hxx>
+#include <s2_luidl/pe_selem.hxx>
+
+
+
+namespace csi
+{
+namespace uidl
+{
+
+
+PE_Struct::PE_Struct()
+ // : aWork,
+ // pStati
+{
+ pStati = new S_Stati(*this);
+}
+
+void
+PE_Struct::EstablishContacts( UnoIDL_PE * io_pParentPE,
+ ary::Repository & io_rRepository,
+ TokenProcessing_Result & o_rResult )
+{
+ UnoIDL_PE::EstablishContacts(io_pParentPE,io_rRepository,o_rResult);
+ Work().pPE_Element->EstablishContacts(this,io_rRepository,o_rResult);
+ Work().pPE_Type->EstablishContacts(this,io_rRepository,o_rResult);
+}
+
+PE_Struct::~PE_Struct()
+{
+}
+
+void
+PE_Struct::ProcessToken( const Token & i_rToken )
+{
+ i_rToken.Trigger(*Stati().pCurStatus);
+}
+
+
+void
+PE_Struct::InitData()
+{
+ Work().InitData();
+ Stati().pCurStatus = &Stati().aWaitForName;
+}
+
+void
+PE_Struct::TransferData()
+{
+ if (NOT Work().bIsPreDeclaration)
+ {
+ csv_assert(Work().sData_Name.size() > 0);
+ csv_assert(Work().nCurStruct.IsValid());
+ }
+ Stati().pCurStatus = &Stati().aNone;
+}
+
+void
+PE_Struct::ReceiveData()
+{
+ Stati().pCurStatus->On_SubPE_Left();
+}
+
+PE_Struct::S_Work::S_Work()
+ : sData_Name(),
+ sData_TemplateParam(),
+ bIsPreDeclaration(false),
+ nCurStruct(0),
+ pPE_Element(0),
+ nCurParsed_ElementRef(0),
+ pPE_Type(0),
+ nCurParsed_Base(0)
+
+{
+ pPE_Element = new PE_StructElement(nCurParsed_ElementRef,nCurStruct,sData_TemplateParam);
+ pPE_Type = new PE_Type(nCurParsed_Base);
+}
+
+void
+PE_Struct::S_Work::InitData()
+{
+ sData_Name.clear();
+ sData_TemplateParam.clear();
+ bIsPreDeclaration = false;
+ nCurStruct = 0;
+ nCurParsed_ElementRef = 0;
+ nCurParsed_Base = 0;
+}
+
+void
+PE_Struct::S_Work::Prepare_PE_QualifiedName()
+{
+ nCurParsed_ElementRef = 0;
+}
+
+void
+PE_Struct::S_Work::Prepare_PE_Element()
+{
+ nCurParsed_Base = 0;
+}
+
+void
+PE_Struct::S_Work::Data_Set_Name( const char * i_sName )
+{
+ sData_Name = i_sName;
+}
+
+void
+PE_Struct::S_Work::Data_Set_TemplateParam( const char * i_sTemplateParam )
+{
+ sData_TemplateParam = i_sTemplateParam;
+}
+
+PE_Struct::S_Stati::S_Stati(PE_Struct & io_rStruct)
+ : aNone(io_rStruct),
+ aWaitForName(io_rStruct),
+ aGotName(io_rStruct),
+ aWaitForTemplateParam(io_rStruct),
+ aWaitForTemplateEnd(io_rStruct),
+ aWaitForBase(io_rStruct),
+ aGotBase(io_rStruct),
+ aWaitForElement(io_rStruct),
+ aWaitForFinish(io_rStruct),
+ pCurStatus(0)
+{
+ pCurStatus = &aNone;
+}
+
+
+//*********************** Stati ***************************//
+
+
+UnoIDL_PE &
+PE_Struct::PE_StructState::MyPE()
+{
+ return rStruct;
+}
+
+
+void
+PE_Struct::State_WaitForName::Process_Identifier( const TokIdentifier & i_rToken )
+{
+ Work().Data_Set_Name(i_rToken.Text());
+ MoveState( Stati().aGotName );
+ SetResult(done,stay);
+}
+
+void
+PE_Struct::State_GotName::Process_Punctuation( const TokPunctuation & i_rToken )
+{
+ if ( i_rToken.Id() != TokPunctuation::Semicolon )
+ {
+ switch (i_rToken.Id())
+ {
+ case TokPunctuation::Colon:
+ MoveState( Stati().aWaitForBase );
+ SetResult(done,push_sure,Work().pPE_Type.Ptr());
+ Work().Prepare_PE_QualifiedName();
+ break;
+ case TokPunctuation::CurledBracketOpen:
+ PE().store_Struct();
+ MoveState( Stati().aWaitForElement );
+ SetResult(done,stay);
+ break;
+ case TokPunctuation::Lesser:
+ MoveState( Stati().aWaitForTemplateParam );
+ SetResult(done,stay);
+ break;
+ default:
+ SetResult(not_done,pop_failure);
+ } // end switch
+ }
+ else
+ {
+ Work().sData_Name.clear();
+ SetResult(done,pop_success);
+ }
+}
+
+void
+PE_Struct::State_WaitForTemplateParam::Process_Identifier( const TokIdentifier & i_rToken )
+{
+ Work().Data_Set_TemplateParam(i_rToken.Text());
+ MoveState( Stati().aWaitForTemplateEnd );
+ SetResult(done,stay);
+}
+
+void
+PE_Struct::State_WaitForTemplateEnd::Process_Punctuation( const TokPunctuation & )
+{
+ // Assume: TokPunctuation::Greater
+ MoveState( Stati().aGotName );
+ SetResult(done,stay);
+}
+
+void
+PE_Struct::State_WaitForBase::On_SubPE_Left()
+{
+ MoveState(Stati().aGotBase);
+}
+
+void
+PE_Struct::State_GotBase::Process_Punctuation( const TokPunctuation & i_rToken )
+{
+ if ( i_rToken.Id() == TokPunctuation::CurledBracketOpen )
+ {
+ PE().store_Struct();
+ MoveState( Stati().aWaitForElement );
+ SetResult(done,stay);
+ }
+ else
+ {
+ SetResult(not_done,pop_failure);
+ }
+}
+
+void
+PE_Struct::State_WaitForElement::Process_Identifier( const TokIdentifier & )
+{
+ SetResult( not_done, push_sure, Work().pPE_Element.Ptr() );
+ Work().Prepare_PE_Element();
+}
+
+void
+PE_Struct::State_WaitForElement::Process_NameSeparator()
+{
+ SetResult( not_done, push_sure, Work().pPE_Element.Ptr());
+ Work().Prepare_PE_Element();
+}
+
+void
+PE_Struct::State_WaitForElement::Process_BuiltInType( const TokBuiltInType & )
+{
+ SetResult( not_done, push_sure, Work().pPE_Element.Ptr());
+ Work().Prepare_PE_Element();
+}
+
+void
+PE_Struct::State_WaitForElement::Process_TypeModifier(const TokTypeModifier & )
+{
+ SetResult( not_done, push_sure, Work().pPE_Element.Ptr());
+ Work().Prepare_PE_Element();
+}
+
+void
+PE_Struct::State_WaitForElement::Process_Punctuation( const TokPunctuation & i_rToken )
+{
+ if ( i_rToken.Id() == TokPunctuation::CurledBracketClose )
+ {
+ MoveState( Stati().aWaitForFinish );
+ SetResult( done, stay );
+ }
+ else
+ {
+ SetResult( not_done, pop_failure );
+ }
+}
+
+void
+PE_Struct::State_WaitForFinish::Process_Punctuation( const TokPunctuation & i_rToken )
+{
+ if (i_rToken.Id() == TokPunctuation::Semicolon)
+ {
+ MoveState( Stati().aNone );
+ SetResult( done, pop_success );
+ }
+ else
+ {
+ SetResult( not_done, pop_failure );
+ }
+}
+
+void
+PE_Struct::store_Struct()
+{
+ ary::idl::Struct &
+ rCe = Gate().Ces().Store_Struct(
+ CurNamespace().CeId(),
+ Work().sData_Name,
+ Work().nCurParsed_Base,
+ Work().sData_TemplateParam );
+ PassDocuAt(rCe);
+ Work().nCurStruct = rCe.CeId();
+}
+
+
+} // namespace uidl
+} // namespace csi
diff --git a/autodoc/source/parser_i/idl/pe_tydf2.cxx b/autodoc/source/parser_i/idl/pe_tydf2.cxx
new file mode 100644
index 000000000000..e7b7b117ba9f
--- /dev/null
+++ b/autodoc/source/parser_i/idl/pe_tydf2.cxx
@@ -0,0 +1,184 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <s2_luidl/pe_tydf2.hxx>
+
+// NOT FULLY DECLARED SERVICES
+#include <ary/idl/i_gate.hxx>
+#include <ary/idl/i_typedef.hxx>
+#include <ary/idl/ip_ce.hxx>
+#include <ary/doc/d_oldidldocu.hxx>
+#include <s2_luidl/pe_type2.hxx>
+#include <s2_luidl/tk_ident.hxx>
+#include <s2_luidl/tk_punct.hxx>
+#include <s2_luidl/tk_const.hxx>
+
+
+namespace csi
+{
+namespace uidl
+{
+
+
+#ifdef DF
+#undef DF
+#endif
+#define DF &PE_Typedef::On_Default
+
+PE_Typedef::F_TOK
+PE_Typedef::aDispatcher[PE_Typedef::e_STATES_MAX][PE_Typedef::tt_MAX] =
+ { { DF, DF, DF }, // e_none
+ { &PE_Typedef::On_expect_description_Any,
+ &PE_Typedef::On_expect_description_Any,
+ DF }, // expect_description
+ { DF, &PE_Typedef::On_expect_name_Identifier,
+ DF }, // expect_name
+ { DF, DF, &PE_Typedef::On_got_name_Punctuation } // got_name
+ };
+
+
+
+inline void
+PE_Typedef::CallHandler( const char * i_sTokenText,
+ E_TokenType i_eTokenType )
+ { (this->*aDispatcher[eState][i_eTokenType])(i_sTokenText); }
+
+
+
+
+
+PE_Typedef::PE_Typedef()
+ : eState(e_none),
+ pPE_Type(0),
+ nType(0),
+ sName()
+{
+ pPE_Type = new PE_Type(nType);
+}
+
+void
+PE_Typedef::EstablishContacts( UnoIDL_PE * io_pParentPE,
+ ary::Repository & io_rRepository,
+ TokenProcessing_Result & o_rResult )
+{
+ UnoIDL_PE::EstablishContacts(io_pParentPE,io_rRepository,o_rResult);
+ pPE_Type->EstablishContacts(this,io_rRepository,o_rResult);
+}
+
+PE_Typedef::~PE_Typedef()
+{
+}
+
+void
+PE_Typedef::ProcessToken( const Token & i_rToken )
+{
+ i_rToken.Trigger(*this);
+}
+
+void
+PE_Typedef::Process_Identifier( const TokIdentifier & i_rToken )
+{
+ CallHandler(i_rToken.Text(), tt_identifier);
+}
+
+void
+PE_Typedef::Process_Punctuation( const TokPunctuation & i_rToken )
+{
+ CallHandler(i_rToken.Text(), tt_punctuation);
+}
+
+void
+PE_Typedef::Process_Default()
+{
+ CallHandler("", tt_any);
+}
+
+void
+PE_Typedef::On_expect_description_Any(const char *)
+{
+ SetResult(not_done,push_sure, pPE_Type.Ptr());
+}
+
+void
+PE_Typedef::On_expect_name_Identifier(const char * i_sText)
+{
+ sName = i_sText;
+ SetResult(done,stay);
+ eState = got_name;
+}
+
+void
+PE_Typedef::On_got_name_Punctuation(const char * i_sText)
+{
+ if ( i_sText[0] == ';' )
+ {
+ SetResult(done,pop_success);
+ eState = e_none;
+ }
+ else
+ On_Default(i_sText);
+}
+
+void
+PE_Typedef::On_Default(const char * )
+{
+ SetResult(not_done,pop_failure);
+}
+
+void
+PE_Typedef::InitData()
+{
+ eState = expect_description;
+ nType = 0;
+ sName = "";
+}
+
+void
+PE_Typedef::ReceiveData()
+{
+ eState = expect_name;
+}
+
+void
+PE_Typedef::TransferData()
+{
+ ary::idl::Typedef &
+ rCe = Gate().Ces().Store_Typedef(CurNamespace().CeId(), sName, nType);
+ PassDocuAt(rCe);
+ eState = e_none;
+}
+
+UnoIDL_PE &
+PE_Typedef::MyPE()
+{
+ return *this;
+}
+
+} // namespace uidl
+} // namespace csi
+
diff --git a/autodoc/source/parser_i/idl/pe_type2.cxx b/autodoc/source/parser_i/idl/pe_type2.cxx
new file mode 100644
index 000000000000..9ceb955576ec
--- /dev/null
+++ b/autodoc/source/parser_i/idl/pe_type2.cxx
@@ -0,0 +1,314 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <s2_luidl/pe_type2.hxx>
+
+
+// NOT FULLY DEFINED SERVICES
+#include <ary/idl/i_gate.hxx>
+#include <ary/idl/i_type.hxx>
+#include <ary/idl/ip_type.hxx>
+#include <ary/doc/d_oldidldocu.hxx>
+#include <s2_luidl/uidl_tok.hxx>
+#include <s2_luidl/tk_ident.hxx>
+#include <s2_luidl/tk_keyw.hxx>
+#include <s2_luidl/tk_punct.hxx>
+
+
+
+/** Implementation Concept for Parsing a Type
+
+Example Type:
+ sequence < ::abc::TName< TplType > > AnyName;
+
+Status Changes:
+
+expect_type:
+ sequence -> expect_type
+ < -> expect_type
+ :: -> expect_quname_part
+ abc -> expect_quname_separator
+ :: -> expect_quname_part
+ TName -> expect_quname_separator
+ < -> in_template_type (process in nested PE_Type instance)
+
+ expect_type:
+ TplType ->expect_quname_separator
+ > -> e_none (finish, '>' not handled)
+
+ > -> expect_quname_separator
+ > -> expect_quname_separator (not finish, because sequencecounter > 0)
+ AnyName -> e_none (finish)
+*/
+
+
+namespace csi
+{
+namespace uidl
+{
+
+
+PE_Type::PE_Type( ary::idl::Type_id & o_rResult )
+ : pResult(&o_rResult),
+ nIsSequenceCounter(0),
+ nSequenceDownCounter(0),
+ bIsUnsigned(false),
+ sFullType(),
+ eState(e_none),
+ sLastPart(),
+ pPE_TemplateType(0), // @attention Recursion, only initiate, if needed!
+ nTemplateType(0),
+ aTemplateParameters()
+{
+}
+
+PE_Type::~PE_Type()
+{
+}
+
+void
+PE_Type::ProcessToken( const Token & i_rToken )
+{
+ i_rToken.Trigger(*this);
+}
+
+void
+PE_Type::Process_Identifier( const TokIdentifier & i_rToken )
+{
+ if (eState == expect_type)
+ {
+ sLastPart = i_rToken.Text();
+ eState = expect_quname_separator;
+ SetResult(done, stay);
+ }
+ else if (eState == expect_quname_part)
+ {
+ sLastPart = i_rToken.Text();
+ eState = expect_quname_separator;
+ SetResult(done, stay);
+ }
+ else if (eState == expect_quname_separator)
+ {
+ Finish();
+ }
+}
+
+void
+PE_Type::Process_NameSeparator()
+{
+ if (eState == expect_type)
+ {
+ sFullType.Init(true);
+ eState = expect_quname_part;
+ SetResult(done, stay);
+ }
+ else if (eState == expect_quname_separator)
+ {
+ sFullType += sLastPart;
+ eState = expect_quname_part;
+ SetResult(done, stay);
+ }
+}
+
+void
+PE_Type::Process_Punctuation( const TokPunctuation & i_rToken )
+{
+ if (eState == expect_type)
+ {
+ csv_assert(i_rToken.Id() == TokPunctuation::Lesser);
+ SetResult(done, stay);
+ }
+ else if (eState == expect_quname_separator)
+ {
+ switch (i_rToken.Id())
+ {
+ case TokPunctuation::Lesser:
+ eState = in_template_type;
+ SetResult( done, push_sure, &MyTemplateType() );
+ break;
+
+ case TokPunctuation::Greater:
+ if (nSequenceDownCounter > 0)
+ {
+ nSequenceDownCounter--;
+ SetResult(done, stay);
+ }
+ else
+ {
+ Finish();
+ }
+ break;
+
+ default:
+ Finish();
+ } // end switch
+ }
+ else if (eState == in_template_type)
+ {
+ aTemplateParameters.push_back(nTemplateType);
+ nTemplateType = 0;
+
+ if (i_rToken.Id() == TokPunctuation::Greater)
+ {
+ eState = expect_quname_separator;
+ SetResult(done, stay);
+ }
+ else if (i_rToken.Id() == TokPunctuation::Comma)
+ {
+ SetResult(done, push_sure, &MyTemplateType());
+ }
+ else
+ {
+ csv_assert(false);
+ Finish();
+ }
+ }
+}
+
+void
+PE_Type::Process_BuiltInType( const TokBuiltInType & i_rToken )
+{
+ if (eState == expect_type)
+ {
+ sLastPart = i_rToken.Text();
+ eState = expect_quname_separator;
+ SetResult(done, stay);
+ }
+ else if (eState == expect_quname_part)
+ {
+ // Can this happen?
+
+ sLastPart = i_rToken.Text();
+ eState = expect_quname_separator;
+ SetResult(done, stay);
+ }
+ else if (eState == expect_quname_separator)
+ {
+ // Can this happen?
+
+ Finish();
+ }
+}
+
+void
+PE_Type::Process_TypeModifier( const TokTypeModifier & i_rToken )
+{
+ if (eState == expect_type)
+ {
+ switch ( i_rToken.Id() )
+ {
+ case TokTypeModifier::tmod_unsigned:
+ bIsUnsigned = true;
+ break;
+ case TokTypeModifier::tmod_sequence:
+ nIsSequenceCounter++;
+ nSequenceDownCounter++;
+ break;
+ default:
+ csv_assert(false);
+ }
+ SetResult(done, stay);
+ }
+ else if (eState == expect_quname_separator)
+ {
+ // Can this happen?
+
+ Finish();
+ }
+}
+
+void
+PE_Type::Process_Default()
+{
+ Finish();
+}
+
+void
+PE_Type::Finish()
+{
+ csv_assert(nSequenceDownCounter == 0);
+
+ sFullType.SetLocalName(sLastPart);
+ SetResult(not_done, pop_success);
+}
+
+PE_Type &
+PE_Type::MyTemplateType()
+{
+ if (NOT pPE_TemplateType)
+ {
+ pPE_TemplateType = new PE_Type(nTemplateType);
+ pPE_TemplateType->EstablishContacts( this,
+ MyRepository(),
+ TokenResult() );
+ }
+ return *pPE_TemplateType;
+}
+
+void
+PE_Type::InitData()
+{
+ eState = expect_type;
+
+ nIsSequenceCounter = 0;
+ nSequenceDownCounter = 0;
+ bIsUnsigned = false;
+ sFullType.Empty();
+ sLastPart.clear();
+ nTemplateType = 0;
+ csv::erase_container(aTemplateParameters);
+}
+
+void
+PE_Type::TransferData()
+{
+ if (bIsUnsigned)
+ {
+ StreamLock sl(40);
+ String sName( sl() << "unsigned " << sFullType.LocalName() << c_str );
+ sFullType.SetLocalName(sName);
+ }
+
+ const ary::idl::Type &
+ result = Gate().Types().CheckIn_Type( sFullType,
+ nIsSequenceCounter,
+ CurNamespace().CeId(),
+ &aTemplateParameters );
+ *pResult = result.TypeId();
+ eState = e_none;
+}
+
+UnoIDL_PE &
+PE_Type::MyPE()
+{
+ return *this;
+}
+
+
+} // namespace uidl
+} // namespace csi
diff --git a/autodoc/source/parser_i/idl/pe_vari2.cxx b/autodoc/source/parser_i/idl/pe_vari2.cxx
new file mode 100644
index 000000000000..c294da7f507b
--- /dev/null
+++ b/autodoc/source/parser_i/idl/pe_vari2.cxx
@@ -0,0 +1,173 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <s2_luidl/pe_vari2.hxx>
+
+
+// NOT FULLY DECLARED SERVICES
+#include <ary/idl/i_gate.hxx>
+#include <ary/idl/i_property.hxx>
+#include <ary/idl/ip_ce.hxx>
+#include <ary/doc/d_oldidldocu.hxx>
+#include <s2_luidl/pe_type2.hxx>
+#include <s2_luidl/tk_keyw.hxx>
+#include <s2_luidl/tk_ident.hxx>
+#include <s2_luidl/tk_punct.hxx>
+
+
+namespace csi
+{
+namespace uidl
+{
+
+
+PE_Variable::PE_Variable( ary::idl::Type_id & i_rResult_Type,
+ String & i_rResult_Name )
+ : eState(e_none),
+ pResult_Type(&i_rResult_Type),
+ pResult_Name(&i_rResult_Name),
+ pPE_Type(0)
+{
+ pPE_Type = new PE_Type(i_rResult_Type);
+}
+
+void
+PE_Variable::EstablishContacts( UnoIDL_PE * io_pParentPE,
+ ary::Repository & io_rRepository,
+ TokenProcessing_Result & o_rResult )
+{
+ UnoIDL_PE::EstablishContacts(io_pParentPE,io_rRepository,o_rResult);
+ pPE_Type->EstablishContacts(this,io_rRepository,o_rResult);
+}
+
+PE_Variable::~PE_Variable()
+{
+}
+
+void
+PE_Variable::ProcessToken( const Token & i_rToken )
+{
+ i_rToken.Trigger(*this);
+}
+
+
+void
+PE_Variable::Process_Default()
+{
+ if (eState == expect_type)
+ {
+ SetResult( not_done, push_sure, pPE_Type.Ptr() );
+ }
+ else{
+ csv_assert(false);
+ }
+}
+
+void
+PE_Variable::Process_Identifier( const TokIdentifier & i_rToken )
+{
+ if (eState == expect_type)
+ {
+ SetResult( not_done, push_sure, pPE_Type.Ptr() );
+ }
+ else if (eState == expect_name)
+ {
+ *pResult_Name = i_rToken.Text();
+ SetResult( done, stay );
+ eState = expect_finish;
+ }
+ else {
+ csv_assert(false);
+ }
+}
+
+void
+PE_Variable::Process_Punctuation( const TokPunctuation & )
+{
+ if (eState == expect_finish)
+ {
+ SetResult( not_done, pop_success );
+ eState = e_none;
+ }
+ else if (eState == expect_name)
+ {
+ SetResult( not_done, pop_success );
+ eState = e_none;
+ }
+ else {
+ csv_assert(false);
+ }
+}
+
+void
+PE_Variable::Process_BuiltInType( const TokBuiltInType & i_rToken )
+{
+ if (eState == expect_type)
+ {
+ SetResult( not_done, push_sure, pPE_Type.Ptr() );
+ }
+ else if (eState == expect_name AND i_rToken.Id() == TokBuiltInType::bty_ellipse)
+ {
+ SetResult( not_done, pop_success );
+ eState = e_none;
+ }
+ else {
+ csv_assert(false);
+ }
+}
+
+void
+PE_Variable::InitData()
+{
+ eState = expect_type;
+
+ *pResult_Type = 0;
+ *pResult_Name = "";
+}
+
+void
+PE_Variable::ReceiveData()
+{
+ eState = expect_name;
+}
+
+void
+PE_Variable::TransferData()
+{
+ eState = e_none;
+}
+
+UnoIDL_PE &
+PE_Variable::MyPE()
+{
+ return *this;
+}
+
+} // namespace uidl
+} // namespace csi
+
diff --git a/autodoc/source/parser_i/idl/pestate.cxx b/autodoc/source/parser_i/idl/pestate.cxx
new file mode 100644
index 000000000000..9a80b8c4a0d4
--- /dev/null
+++ b/autodoc/source/parser_i/idl/pestate.cxx
@@ -0,0 +1,140 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <s2_luidl/pestate.hxx>
+
+
+// NOT FULLY DEFINED SERVICES
+#include <ary/doc/d_oldidldocu.hxx>
+#include <s2_luidl/parsenv2.hxx>
+
+
+
+
+namespace csi
+{
+namespace uidl
+{
+
+void
+ParseEnvState::Process_Identifier( const TokIdentifier & )
+{
+ Process_Default();
+}
+
+void
+ParseEnvState::Process_NameSeparator()
+{
+ Process_Default();
+}
+
+void
+ParseEnvState::Process_Punctuation( const TokPunctuation & )
+{
+ Process_Default();
+}
+
+void
+ParseEnvState::Process_BuiltInType( const TokBuiltInType & )
+{
+ Process_Default();
+}
+
+void
+ParseEnvState::Process_TypeModifier( const TokTypeModifier & )
+{
+ Process_Default();
+}
+
+void
+ParseEnvState::Process_MetaType( const TokMetaType & )
+{
+ Process_Default();
+}
+
+void
+ParseEnvState::Process_Stereotype( const TokStereotype & )
+{
+ Process_Default();
+}
+
+void
+ParseEnvState::Process_ParameterHandling( const TokParameterHandling & )
+{
+ Process_Default();
+}
+
+void
+ParseEnvState::Process_Raises()
+{
+ Process_Default();
+}
+
+void
+ParseEnvState::Process_Needs()
+{
+ Process_Default();
+}
+
+void
+ParseEnvState::Process_Observes()
+{
+ Process_Default();
+}
+
+void
+ParseEnvState::Process_Assignment( const TokAssignment & )
+{
+ Process_Default();
+}
+
+void
+ParseEnvState::Process_EOL()
+{
+ MyPE().SetResult(done,stay);
+}
+
+
+void
+ParseEnvState::On_SubPE_Left()
+{
+}
+
+void
+ParseEnvState::Process_Default()
+{
+ if (bDefaultIsError)
+ MyPE().SetResult(not_done, pop_failure);
+ else // ignore:
+ MyPE().SetResult(done, stay);
+}
+
+
+} // namespace uidl
+} // namespace csi
+
diff --git a/autodoc/source/parser_i/idl/semnode.cxx b/autodoc/source/parser_i/idl/semnode.cxx
new file mode 100644
index 000000000000..1549d5eb0f24
--- /dev/null
+++ b/autodoc/source/parser_i/idl/semnode.cxx
@@ -0,0 +1,82 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <s2_luidl/semnode.hxx>
+
+
+// NOT FULLY DEFINED SERVICES
+#include <ary/ary.hxx>
+#include <ary/idl/i_gate.hxx>
+#include <ary/idl/i_module.hxx>
+#include <ary/doc/d_oldidldocu.hxx>
+#include <s2_luidl/parsenv2.hxx>
+
+
+namespace csi
+{
+namespace uidl
+{
+
+
+
+SemanticNode::SemanticNode()
+ : pParentPE(0),
+ pAryGate(0),
+ pTokenResult(0)
+{
+}
+
+void
+SemanticNode::EstablishContacts( UnoIDL_PE * io_pParentPE,
+ ary::idl::Gate & io_rGate,
+ TokenProcessing_Result & o_rResult )
+{
+ pParentPE = io_pParentPE;
+ pAryGate = &io_rGate;
+ pTokenResult = &o_rResult;
+}
+
+SemanticNode::~SemanticNode()
+{
+}
+
+void
+SemanticNode::SetTokenResult( E_TokenDone i_eDone,
+ E_EnvStackAction i_eWhat2DoWithEnvStack,
+ UnoIDL_PE * i_pParseEnv2Push )
+{
+ csv_assert(pTokenResult != 0);
+
+ pTokenResult->eDone = i_eDone;
+ pTokenResult->eStackAction = i_eWhat2DoWithEnvStack;
+ pTokenResult->pEnv2Push = i_pParseEnv2Push;
+}
+
+
+} // namespace uidl
+} // namespace csi
diff --git a/autodoc/source/parser_i/idl/tk_const.cxx b/autodoc/source/parser_i/idl/tk_const.cxx
new file mode 100644
index 000000000000..d342ffc1f847
--- /dev/null
+++ b/autodoc/source/parser_i/idl/tk_const.cxx
@@ -0,0 +1,57 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <s2_luidl/tk_const.hxx>
+
+
+// NOT FULLY DECLARED SERVICES
+#include <s2_luidl/tokintpr.hxx>
+
+
+
+namespace csi
+{
+namespace uidl
+{
+
+
+void
+TokAssignment::Trigger( TokenInterpreter & io_rInterpreter ) const
+{
+ io_rInterpreter.Process_Assignment(*this);
+}
+
+const char *
+TokAssignment::Text() const
+{
+ return sText;
+}
+
+} // namespace uidl
+} // namespace csi
+
diff --git a/autodoc/source/parser_i/idl/tk_ident.cxx b/autodoc/source/parser_i/idl/tk_ident.cxx
new file mode 100644
index 000000000000..2a284b701e55
--- /dev/null
+++ b/autodoc/source/parser_i/idl/tk_ident.cxx
@@ -0,0 +1,68 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <s2_luidl/tk_ident.hxx>
+
+
+// NOT FULLY DECLARED SERVICES
+#include <s2_luidl/tokintpr.hxx>
+
+
+
+namespace csi
+{
+namespace uidl
+{
+
+void
+TokIdentifier::Trigger( TokenInterpreter & io_rInterpreter ) const
+{
+ io_rInterpreter.Process_Identifier(*this);
+}
+
+const char *
+TokIdentifier::Text() const
+{
+ return sText;
+}
+
+void
+TokNameSeparator::Trigger( TokenInterpreter & io_rInterpreter ) const
+{
+ io_rInterpreter.Process_NameSeparator();
+}
+
+const char *
+TokNameSeparator::Text() const
+{
+ return "::";
+}
+
+} // namespace uidl
+} // namespace csi
+
diff --git a/autodoc/source/parser_i/idl/tk_keyw.cxx b/autodoc/source/parser_i/idl/tk_keyw.cxx
new file mode 100644
index 000000000000..1e8076a515f2
--- /dev/null
+++ b/autodoc/source/parser_i/idl/tk_keyw.cxx
@@ -0,0 +1,225 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <s2_luidl/tk_keyw.hxx>
+
+
+// NOT FULLY DECLARED SERVICES
+#include <s2_luidl/tokintpr.hxx>
+
+
+using csi::uidl::TokBuiltInType;
+using csi::uidl::TokTypeModifier;
+using csi::uidl::TokMetaType;
+using csi::uidl::TokStereotype;
+using csi::uidl::TokParameterHandling;
+
+
+lux::EnumValueMap G_aTokBuiltInType_EV_TokenId_Values;
+TokBuiltInType::EV_TokenId ev_bty_none(TokBuiltInType::e_none,"");
+TokBuiltInType::EV_TokenId ev_bty_any(TokBuiltInType::bty_any,"any");
+TokBuiltInType::EV_TokenId ev_bty_boolean(TokBuiltInType::bty_boolean,"boolean");
+TokBuiltInType::EV_TokenId ev_bty_byte(TokBuiltInType::bty_byte,"byte");
+TokBuiltInType::EV_TokenId ev_bty_char(TokBuiltInType::bty_char,"char");
+TokBuiltInType::EV_TokenId ev_bty_double(TokBuiltInType::bty_double,"double");
+TokBuiltInType::EV_TokenId ev_bty_hyper(TokBuiltInType::bty_hyper,"hyper");
+TokBuiltInType::EV_TokenId ev_bty_long(TokBuiltInType::bty_long,"long");
+TokBuiltInType::EV_TokenId ev_bty_short(TokBuiltInType::bty_short,"short");
+TokBuiltInType::EV_TokenId ev_bty_string(TokBuiltInType::bty_string,"string");
+TokBuiltInType::EV_TokenId ev_bty_void(TokBuiltInType::bty_void,"void");
+TokBuiltInType::EV_TokenId ev_bty_ellipse(TokBuiltInType::bty_ellipse,"...");
+
+
+lux::EnumValueMap G_aTokTypeModifier_EV_TokenId_Values;
+TokTypeModifier::EV_TokenId ev_tmod_none(TokTypeModifier::e_none,"");
+TokTypeModifier::EV_TokenId ev_tmod_unsigned(TokTypeModifier::tmod_unsigned,"unsigned");
+TokTypeModifier::EV_TokenId ev_tmod_sequence(TokTypeModifier::tmod_sequence,"sequence");
+
+
+lux::EnumValueMap G_aTokMetaType_EV_TokenId_Values;
+TokMetaType::EV_TokenId ev_mt_none(TokMetaType::e_none,"");
+TokMetaType::EV_TokenId ev_mt_attribute(TokMetaType::mt_attribute,"attribute");
+TokMetaType::EV_TokenId ev_mt_constants(TokMetaType::mt_constants,"constants");
+TokMetaType::EV_TokenId ev_mt_enum(TokMetaType::mt_enum,"enum");
+TokMetaType::EV_TokenId ev_mt_exception(TokMetaType::mt_exception,"exception");
+TokMetaType::EV_TokenId ev_mt_ident(TokMetaType::mt_ident,"ident");
+TokMetaType::EV_TokenId ev_mt_interface(TokMetaType::mt_interface,"interface");
+TokMetaType::EV_TokenId ev_mt_module(TokMetaType::mt_module,"module");
+TokMetaType::EV_TokenId ev_mt_property(TokMetaType::mt_property,"property");
+TokMetaType::EV_TokenId ev_mt_service(TokMetaType::mt_service,"service");
+TokMetaType::EV_TokenId ev_mt_singleton(TokMetaType::mt_singleton,"singleton");
+TokMetaType::EV_TokenId ev_mt_struct(TokMetaType::mt_struct,"struct");
+TokMetaType::EV_TokenId ev_mt_typedef(TokMetaType::mt_typedef,"typedef");
+TokMetaType::EV_TokenId ev_mt_uik(TokMetaType::mt_uik,"uik");
+
+
+lux::EnumValueMap G_aTokStereotype_EV_TokenId_Values;
+TokStereotype::EV_TokenId ev_ste_none(TokStereotype::e_none,"");
+TokStereotype::EV_TokenId ev_ste_bound(TokStereotype::ste_bound,"bound");
+TokStereotype::EV_TokenId ev_ste_const(TokStereotype::ste_const,"const");
+TokStereotype::EV_TokenId ev_ste_constrained(TokStereotype::ste_constrained,"constrained");
+TokStereotype::EV_TokenId ev_ste_maybeambiguous(TokStereotype::ste_maybeambiguous,"maybeambiguous");
+TokStereotype::EV_TokenId ev_ste_maybedefault(TokStereotype::ste_maybedefault,"maybedefault");
+TokStereotype::EV_TokenId ev_ste_maybevoid(TokStereotype::ste_maybevoid,"maybevoid");
+TokStereotype::EV_TokenId ev_ste_oneway(TokStereotype::ste_oneway,"oneway");
+TokStereotype::EV_TokenId ev_ste_optional(TokStereotype::ste_optional,"optional");
+TokStereotype::EV_TokenId ev_ste_readonly(TokStereotype::ste_readonly,"readonly");
+TokStereotype::EV_TokenId ev_ste_removable(TokStereotype::ste_removable,"removable");
+TokStereotype::EV_TokenId ev_ste_virtual(TokStereotype::ste_virtual,"virtual");
+TokStereotype::EV_TokenId ev_ste_transient(TokStereotype::ste_transient,"transient");
+TokStereotype::EV_TokenId ev_ste_published(TokStereotype::ste_published,"published");
+
+
+lux::EnumValueMap G_aTokParameterHandling_EV_TokenId_Values;
+TokParameterHandling::EV_TokenId ev_ph_none(TokParameterHandling::e_none,"");
+TokParameterHandling::EV_TokenId ev_ph_in(TokParameterHandling::ph_in,"in");
+TokParameterHandling::EV_TokenId ev_ph_out(TokParameterHandling::ph_out,"out");
+TokParameterHandling::EV_TokenId ev_ph_inout(TokParameterHandling::ph_inout,"inout");
+
+
+namespace lux
+{
+
+template<> EnumValueMap &
+TokBuiltInType::EV_TokenId::Values_() { return G_aTokBuiltInType_EV_TokenId_Values; }
+template<> EnumValueMap &
+TokTypeModifier::EV_TokenId::Values_() { return G_aTokTypeModifier_EV_TokenId_Values; }
+template<> EnumValueMap &
+TokMetaType::EV_TokenId::Values_() { return G_aTokMetaType_EV_TokenId_Values; }
+template<> EnumValueMap &
+TokStereotype::EV_TokenId::Values_() { return G_aTokStereotype_EV_TokenId_Values; }
+template<> EnumValueMap &
+TokParameterHandling::EV_TokenId::Values_() { return G_aTokParameterHandling_EV_TokenId_Values; }
+
+} // namespace lux
+
+
+
+namespace csi
+{
+namespace uidl
+{
+
+void
+TokBuiltInType::Trigger( TokenInterpreter & io_rInterpreter ) const
+{
+ io_rInterpreter.Process_BuiltInType(*this);
+}
+
+const char *
+TokBuiltInType::Text() const
+{
+ return eTag.Text();
+}
+
+void
+TokTypeModifier::Trigger( TokenInterpreter & io_rInterpreter ) const
+{
+ io_rInterpreter.Process_TypeModifier(*this);
+}
+
+const char *
+TokTypeModifier::Text() const
+{
+ return eTag.Text();
+}
+
+void
+TokMetaType::Trigger( TokenInterpreter & io_rInterpreter ) const
+{
+ io_rInterpreter.Process_MetaType(*this);
+}
+
+const char *
+TokMetaType::Text() const
+{
+ return eTag.Text();
+}
+
+void
+TokStereotype::Trigger( TokenInterpreter & io_rInterpreter ) const
+{
+ io_rInterpreter.Process_Stereotype(*this);
+}
+
+const char *
+TokStereotype::Text() const
+{
+ return eTag.Text();
+}
+
+void
+TokParameterHandling::Trigger( TokenInterpreter & io_rInterpreter ) const
+{
+ io_rInterpreter.Process_ParameterHandling(*this);
+}
+
+const char *
+TokParameterHandling::Text() const
+{
+ return eTag.Text();
+}
+
+void
+TokRaises::Trigger( TokenInterpreter & io_rInterpreter ) const
+{
+ io_rInterpreter.Process_Raises();
+}
+
+const char *
+TokRaises::Text() const
+{
+ return "raises";
+}
+
+void
+TokNeeds::Trigger( TokenInterpreter & io_rInterpreter ) const
+{
+ io_rInterpreter.Process_Needs();
+}
+
+const char *
+TokNeeds::Text() const
+{
+ return "needs";
+}
+void
+TokObserves::Trigger( TokenInterpreter & io_rInterpreter ) const
+{
+ io_rInterpreter.Process_Observes();
+}
+
+const char *
+TokObserves::Text() const
+{
+ return "observes";
+}
+
+} // namespace uidl
+} // namespace csi
+
diff --git a/autodoc/source/parser_i/idl/tk_punct.cxx b/autodoc/source/parser_i/idl/tk_punct.cxx
new file mode 100644
index 000000000000..40627196f89e
--- /dev/null
+++ b/autodoc/source/parser_i/idl/tk_punct.cxx
@@ -0,0 +1,113 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <s2_luidl/tk_punct.hxx>
+
+
+// NOT FULLY DECLARED SERVICES
+#include <parser/parserinfo.hxx>
+#include <s2_luidl/tokintpr.hxx>
+
+
+using csi::uidl::TokPunctuation;
+
+
+lux::EnumValueMap G_aTokPunctuation_EV_TokenId_Values;
+TokPunctuation::EV_TokenId ev_none(TokPunctuation::e_none,"");
+TokPunctuation::EV_TokenId BracketOpen(TokPunctuation::BracketOpen,"(");
+TokPunctuation::EV_TokenId BracketClose(TokPunctuation::BracketClose,")");
+TokPunctuation::EV_TokenId ArrayBracketOpen(TokPunctuation::ArrayBracketOpen,"[");
+TokPunctuation::EV_TokenId ArrayBracketClose(TokPunctuation::ArrayBracketClose,"]");
+TokPunctuation::EV_TokenId CurledBracketOpen(TokPunctuation::CurledBracketOpen,"{");
+TokPunctuation::EV_TokenId CurledBracketClose(TokPunctuation::CurledBracketClose,"}");
+TokPunctuation::EV_TokenId Semicolon(TokPunctuation::Semicolon,";");
+TokPunctuation::EV_TokenId Colon(TokPunctuation::Colon,":");
+TokPunctuation::EV_TokenId DoubleColon(TokPunctuation::DoubleColon,"::");
+TokPunctuation::EV_TokenId Comma(TokPunctuation::Comma,",");
+TokPunctuation::EV_TokenId Minus(TokPunctuation::Minus,"-");
+TokPunctuation::EV_TokenId Fullstop(TokPunctuation::Fullstop,".");
+TokPunctuation::EV_TokenId Lesser(TokPunctuation::Lesser,"<");
+TokPunctuation::EV_TokenId Greater(TokPunctuation::Greater,">");
+
+
+
+
+namespace lux
+{
+template<> EnumValueMap &
+TokPunctuation::EV_TokenId::Values_() { return G_aTokPunctuation_EV_TokenId_Values; }
+}
+
+
+
+
+namespace csi
+{
+namespace uidl
+{
+
+void
+TokPunctuation::Trigger( TokenInterpreter & io_rInterpreter ) const
+{
+ io_rInterpreter.Process_Punctuation(*this);
+}
+
+const char *
+TokPunctuation::Text() const
+{
+ return eTag.Text();
+}
+
+void
+Tok_EOL::Trigger( TokenInterpreter & io_rInterpreter ) const
+{
+ io_rInterpreter.Process_EOL();
+}
+
+const char *
+Tok_EOL::Text() const
+{
+ return "\r\n";
+}
+
+void
+Tok_EOF::Trigger( TokenInterpreter & ) const
+{
+ csv_assert(false);
+// io_rInterpreter.Process_EOF();
+}
+
+const char *
+Tok_EOF::Text() const
+{
+ return "";
+}
+
+
+} // namespace uidl
+} // namespace csi
diff --git a/autodoc/source/parser_i/idl/tkp_uidl.cxx b/autodoc/source/parser_i/idl/tkp_uidl.cxx
new file mode 100644
index 000000000000..9969e9b34364
--- /dev/null
+++ b/autodoc/source/parser_i/idl/tkp_uidl.cxx
@@ -0,0 +1,74 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <s2_luidl/tkp_uidl.hxx>
+
+// NOT FULLY DECLARED SERVICES
+#include <s2_luidl/cx_idlco.hxx>
+
+
+
+namespace csi
+{
+namespace uidl
+{
+
+
+TokenParser_Uidl::TokenParser_Uidl( Token_Receiver & o_rUidlReceiver,
+ DYN ::TkpDocuContext & let_drDocuContext )
+ : pBaseContext(new Context_UidlCode(o_rUidlReceiver, let_drDocuContext)),
+ pCurContext(0)
+{
+ SetStartContext();
+}
+
+TokenParser_Uidl::~TokenParser_Uidl()
+{
+}
+
+void
+TokenParser_Uidl::SetStartContext()
+{
+ pCurContext = pBaseContext.Ptr();
+}
+
+void
+TokenParser_Uidl::SetCurrentContext( TkpContext & io_rContext )
+{
+ pCurContext = &io_rContext;
+}
+
+TkpContext &
+TokenParser_Uidl::CurrentContext()
+{
+ return *pCurContext;
+}
+
+} // namespace uidl
+} // namespace csi
+
diff --git a/autodoc/source/parser_i/idl/unoidl.cxx b/autodoc/source/parser_i/idl/unoidl.cxx
new file mode 100644
index 000000000000..34ad8064e3a9
--- /dev/null
+++ b/autodoc/source/parser_i/idl/unoidl.cxx
@@ -0,0 +1,176 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <parser/unoidl.hxx>
+
+
+// NOT FULLY DECLARED SERVICES
+#include <stdlib.h>
+#include <cosv/file.hxx>
+#include <ary/ary.hxx>
+#include <ary/idl/i_gate.hxx>
+#include <ary/doc/d_oldidldocu.hxx>
+#include <../parser/inc/x_docu.hxx>
+#include <parser/parserinfo.hxx>
+#include <tools/filecoll.hxx>
+#include <tools/tkpchars.hxx>
+#include <s2_luidl/tkp_uidl.hxx>
+#include <s2_luidl/distrib.hxx>
+#include <s2_luidl/pe_file2.hxx>
+#include <s2_dsapi/cx_dsapi.hxx>
+#include <adc_msg.hxx>
+#include <x_parse2.hxx>
+
+
+
+namespace autodoc
+{
+
+
+class FileParsePerformers
+{
+ public:
+ FileParsePerformers(
+ ary::Repository &
+ io_rRepository,
+ ParserInfo & io_rParserInfo );
+
+ void ParseFile(
+ const char * i_sFullPath );
+
+ void ConnectLinks();
+
+ private:
+ CharacterSource aFileLoader;
+ Dyn<csi::uidl::TokenParser_Uidl>
+ pTokens;
+ csi::uidl::TokenDistributor
+ aDistributor;
+ Dyn<csi::uidl::PE_File>
+ pFileParseEnvironment;
+ ary::Repository &
+ rRepository;
+ ParserInfo & rParserInfo;
+};
+
+
+IdlParser::IdlParser( ary::Repository & io_rRepository )
+ : pRepository(&io_rRepository)
+{
+}
+
+void
+IdlParser::Run( const autodoc::FileCollector_Ifc & i_rFiles )
+{
+ Dyn<FileParsePerformers>
+ pFileParsePerformers(
+ new FileParsePerformers(*pRepository,
+ static_cast< ParserInfo& >(*this)) );
+
+ FileCollector::const_iterator iEnd = i_rFiles.End();
+ for ( FileCollector::const_iterator iter = i_rFiles.Begin();
+ iter != iEnd;
+ ++iter )
+ {
+ Cout() << (*iter) << " ..."<< Endl();
+
+ try
+ {
+ pFileParsePerformers->ParseFile(*iter);
+ }
+ catch (X_AutodocParser &)
+ {
+ /// Ignore and goon
+ TheMessages().Out_ParseError(CurFile(), CurLine());
+ pFileParsePerformers
+ = new FileParsePerformers(*pRepository,
+ static_cast< ParserInfo& >(*this));
+ }
+ catch (X_Docu & xd)
+ {
+ // Currently thic catches only wrong since tags, while since tags are
+ // transformed. In this case the program shall be terminated.
+ Cerr() << xd << Endl();
+ exit(1);
+ }
+ catch (...)
+ {
+ Cout() << "Unknown error." << Endl();
+ exit(0);
+// pFileParsePerformers = new FileParsePerformers( *pRepository );
+ }
+ }
+
+ pFileParsePerformers->ConnectLinks();
+}
+
+FileParsePerformers::FileParsePerformers( ary::Repository & io_rRepository,
+ ParserInfo & io_rParserInfo )
+ : pTokens(0),
+ aDistributor(io_rRepository, io_rParserInfo),
+ rRepository( io_rRepository ),
+ rParserInfo(io_rParserInfo)
+{
+ DYN csi::dsapi::Context_Docu *
+ dpDocuContext
+ = new csi::dsapi::Context_Docu( aDistributor.DocuTokens_Receiver() );
+ pTokens = new csi::uidl::TokenParser_Uidl( aDistributor.CodeTokens_Receiver(), *dpDocuContext );
+ pFileParseEnvironment
+ = new csi::uidl::PE_File(aDistributor,rParserInfo);
+
+ aDistributor.SetTokenProvider(*pTokens);
+ aDistributor.SetTopParseEnvironment(*pFileParseEnvironment);
+}
+
+void
+FileParsePerformers::ParseFile( const char * i_sFullPath )
+{
+ csv::File aFile(i_sFullPath);
+
+ aFile.open( csv::CFM_READ );
+ csv_assert( aFile.is_open() );
+ aFileLoader.LoadText(aFile);
+ aFile.close();
+
+ rParserInfo.Set_CurFile(i_sFullPath, true); // true = count lines
+ pTokens->Start(aFileLoader);
+ aDistributor.Reset();
+
+ do {
+ aDistributor.TradeToken();
+ } while ( NOT aFileLoader.IsFinished() );
+}
+
+void
+FileParsePerformers::ConnectLinks()
+{
+ // KORR_FUTURE ?
+// rRepository.RwGate_Idl().ConnectAdditionalLinks();
+}
+
+} // namespace autodoc
diff --git a/autodoc/source/parser_i/idoc/cx_docu2.cxx b/autodoc/source/parser_i/idoc/cx_docu2.cxx
new file mode 100644
index 000000000000..9cd8eddd0b76
--- /dev/null
+++ b/autodoc/source/parser_i/idoc/cx_docu2.cxx
@@ -0,0 +1,267 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <s2_dsapi/cx_docu2.hxx>
+
+
+// NOT FULLY DEFINED SERVICES
+#include <../../parser/inc/tokens/parseinc.hxx>
+#include <s2_dsapi/tokrecv.hxx>
+#include <s2_dsapi/tk_html.hxx>
+#include <s2_dsapi/tk_xml.hxx>
+#include <s2_dsapi/tk_docw2.hxx>
+#include <x_parse2.hxx>
+
+
+
+namespace csi
+{
+namespace dsapi
+{
+
+
+
+bool
+Cx_Base::PassNewToken()
+{
+ if (pNewToken)
+ {
+ rReceiver.Receive(*pNewToken.Release());
+
+ return true;
+ }
+ return false;
+}
+
+TkpContext &
+Cx_Base::FollowUpContext()
+{
+ csv_assert(pFollowUpContext != 0);
+ return *pFollowUpContext;
+}
+
+void
+Cx_Base::Handle_DocuSyntaxError( CharacterSource & io_rText )
+{
+ // KORR_FUTURE
+ // Put this into Error Log File
+
+ Cerr() << "Error: Syntax error in documentation within "
+ << "this text:\n\""
+ << io_rText.CutToken()
+ << "\"."
+ << Endl();
+ SetToken( new Tok_Word(io_rText.CurToken()) );
+}
+
+void
+Cx_EoHtml::ReadCharChain( CharacterSource & io_rText )
+{
+ if ( NULCH == jumpTo(io_rText,'>') )
+ throw X_AutodocParser(X_AutodocParser::x_UnexpectedEOF);
+ io_rText.MoveOn();
+ SetToken(new Tok_HtmlTag(io_rText.CutToken(),bToken_IsStartOfParagraph));
+}
+
+void
+Cx_EoXmlConst::ReadCharChain( CharacterSource & io_rText )
+{
+ char c = jumpTo(io_rText,'>','*');
+ if ( NULCH == c OR '*' == c )
+ {
+ Handle_DocuSyntaxError(io_rText);
+ return;
+ }
+
+ io_rText.MoveOn();
+ io_rText.CutToken();
+ SetToken(new Tok_XmlConst(eTokenId));
+}
+
+void
+Cx_EoXmlLink_BeginTag::ReadCharChain( CharacterSource & io_rText )
+{
+ String sScope;
+ String sDim;
+
+ do {
+ char cReached = jumpTo(io_rText,'"','>','*');
+ switch (cReached)
+ {
+ case '"':
+ {
+ io_rText.MoveOn();
+ io_rText.CutToken();
+ char c = jumpTo(io_rText,'"','*', '>');
+ if ( NULCH == c OR '*' == c OR '>' == c)
+ {
+ if ( '>' == c )
+ io_rText.MoveOn();
+ Handle_DocuSyntaxError(io_rText);
+ return;
+ }
+
+ const char * pAttribute = io_rText.CutToken();
+ if ( *pAttribute != '[' )
+ sScope = pAttribute;
+ else
+ sDim = pAttribute;
+
+ io_rText.MoveOn();
+ break;
+ }
+ case '>':
+ break;
+ case '*':
+ Handle_DocuSyntaxError(io_rText);
+ return;
+ default:
+ throw X_AutodocParser(X_AutodocParser::x_UnexpectedEOF);
+ } // end switch
+ } while ( io_rText.CurChar() != '>' );
+
+ io_rText.MoveOn();
+ io_rText.CutToken();
+ SetToken( new Tok_XmlLink_BeginTag(eTokenId, sScope.c_str(), sDim.c_str()) );
+}
+
+void
+Cx_EoXmlLink_EndTag::ReadCharChain( CharacterSource & io_rText )
+{
+ char c = jumpTo(io_rText,'>','*');
+ if ( NULCH == c OR '*' == c )
+ {
+ Handle_DocuSyntaxError(io_rText);
+ return;
+ }
+
+ io_rText.MoveOn();
+ io_rText.CutToken();
+ SetToken(new Tok_XmlLink_EndTag(eTokenId));
+}
+
+void
+Cx_EoXmlFormat_BeginTag::ReadCharChain( CharacterSource & io_rText )
+{
+ String sDim;
+
+ char cReached = jumpTo(io_rText,'"','>','*');
+ switch (cReached)
+ {
+ case '"':
+ {
+ io_rText.MoveOn();
+ io_rText.CutToken();
+
+ char c = jumpTo(io_rText,'"','*','>');
+ if ( NULCH == c OR '*' == c OR '>' == c )
+ {
+ if ('>' == c )
+ io_rText.MoveOn();
+ Handle_DocuSyntaxError(io_rText);
+ return;
+ }
+
+ sDim = io_rText.CutToken();
+
+ c = jumpTo(io_rText,'>','*');
+ if ( NULCH == c OR '*' == c )
+ {
+ Handle_DocuSyntaxError(io_rText);
+ return;
+ }
+ break;
+ }
+ case '>':
+ break;
+ case '*':
+ Handle_DocuSyntaxError(io_rText);
+ return;
+ default:
+ throw X_AutodocParser(X_AutodocParser::x_UnexpectedEOF);
+ } // end switch
+
+ io_rText.MoveOn();
+ io_rText.CutToken();
+ SetToken(new Tok_XmlFormat_BeginTag(eTokenId, sDim));
+}
+
+void
+Cx_EoXmlFormat_EndTag::ReadCharChain( CharacterSource & io_rText )
+{
+ char c = jumpTo(io_rText,'>','*');
+ if ( NULCH == c OR '*' == c )
+ {
+ Handle_DocuSyntaxError(io_rText);
+ return;
+ }
+
+ io_rText.MoveOn();
+ io_rText.CutToken();
+ SetToken(new Tok_XmlFormat_EndTag(eTokenId));
+}
+
+void
+Cx_CheckStar::ReadCharChain( CharacterSource & io_rText )
+{
+ bEndTokenFound = false;
+ if (bIsEnd)
+ {
+ char cNext = jumpOver(io_rText,'*');
+ if ( NULCH == cNext )
+ throw X_AutodocParser(X_AutodocParser::x_UnexpectedEOF);
+ if (cNext == '/')
+ {
+ io_rText.MoveOn();
+ SetToken(new Tok_DocuEnd);
+ bEndTokenFound = true;
+ }
+ else
+ {
+ SetToken( new Tok_Word(io_rText.CutToken()) );
+ }
+ }
+ else
+ {
+ jumpToWhite(io_rText);
+ SetToken( new Tok_Word(io_rText.CutToken()) );
+ }
+}
+
+TkpContext &
+Cx_CheckStar::FollowUpContext()
+{
+ if (bEndTokenFound)
+ return *pEnd_FollowUpContext;
+ else
+ return Cx_Base::FollowUpContext();
+}
+
+} // namespace dsapi
+} // namespace csi
+
diff --git a/autodoc/source/parser_i/idoc/cx_dsapi.cxx b/autodoc/source/parser_i/idoc/cx_dsapi.cxx
new file mode 100644
index 000000000000..a4d845bb0088
--- /dev/null
+++ b/autodoc/source/parser_i/idoc/cx_dsapi.cxx
@@ -0,0 +1,533 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <s2_dsapi/cx_dsapi.hxx>
+
+
+// NOT FULLY DEFINED SERVICES
+#include <x_parse2.hxx>
+#include <tools/tkpchars.hxx>
+#include <s2_dsapi/tk_atag2.hxx>
+#include <s2_dsapi/tk_docw2.hxx>
+#include <s2_dsapi/tk_xml.hxx>
+#include <s2_dsapi/cx_docu2.hxx>
+#include <s2_dsapi/tokrecv.hxx>
+
+
+namespace csi
+{
+namespace dsapi
+{
+
+
+const intt C_nStatusSize = 128;
+const intt C_nCppInitialNrOfStati = 400;
+
+
+const uintt nF_fin_Error = 1;
+const uintt nF_fin_Ignore = 2;
+const uintt nF_fin_Eof = 3;
+const uintt nF_fin_AnyWord = 4;
+const uintt nF_fin_AtTag = 5;
+const uintt nF_fin_EndSign = 6;
+const uintt nF_goto_EoHtml = 7;
+const uintt nF_goto_EoXmlConst = 8;
+const uintt nF_goto_EoXmlLink_BeginTag = 9;
+const uintt nF_goto_EoXmlLink_EndTag = 10;
+const uintt nF_goto_EoXmlFormat_BeginTag = 11;
+const uintt nF_goto_EoXmlFormat_EndTag = 12;
+const uintt nF_goto_CheckStar = 13;
+const uintt nF_fin_Comma = 14;
+const uintt nF_fin_White = 15;
+
+const UINT16 nTok_at_author = 100 + Tok_AtTag::author;
+const UINT16 nTok_at_see = 100 + Tok_AtTag::see;
+const UINT16 nTok_at_param = 100 + Tok_AtTag::param;
+const UINT16 nTok_at_return = 100 + Tok_AtTag::e_return;
+const UINT16 nTok_at_throws = 100 + Tok_AtTag::e_throw;
+const UINT16 nTok_at_example = 100 + Tok_AtTag::example;
+const UINT16 nTok_at_deprecated = 100 + Tok_AtTag::deprecated;
+const UINT16 nTok_at_suspicious = 100 + Tok_AtTag::suspicious;
+const UINT16 nTok_at_missing = 100 + Tok_AtTag::missing;
+const UINT16 nTok_at_incomplete = 100 + Tok_AtTag::incomplete;
+const UINT16 nTok_at_version = 100 + Tok_AtTag::version;
+const UINT16 nTok_at_guarantees = 100 + Tok_AtTag::guarantees;
+const UINT16 nTok_at_exception = 100 + Tok_AtTag::exception;
+const UINT16 nTok_at_since = 100 + Tok_AtTag::since;
+
+const UINT16 nTok_const_TRUE = 200 + Tok_XmlConst::e_true;
+const UINT16 nTok_const_FALSE = 200 + Tok_XmlConst::e_false;
+const UINT16 nTok_const_NULL = 200 + Tok_XmlConst::e_null;
+const UINT16 nTok_const_void = 200 + Tok_XmlConst::e_void;
+
+const UINT16 nTok_link_typeB = 300 + Tok_XmlLink_BeginTag::type;
+const UINT16 nTok_link_typeE = 325 + Tok_XmlLink_EndTag::type;
+const UINT16 nTok_link_memberB = 300 + Tok_XmlLink_BeginTag::member;
+const UINT16 nTok_link_membeE = 325 + Tok_XmlLink_EndTag::member;
+const UINT16 nTok_link_constB = 300 + Tok_XmlLink_BeginTag::e_const;
+const UINT16 nTok_link_constE = 325 + Tok_XmlLink_EndTag::e_const;
+
+const UINT16 nTok_format_listingB = 350 + Tok_XmlFormat_BeginTag::listing;
+const UINT16 nTok_format_listingE = 375 + Tok_XmlFormat_EndTag::listing;
+const UINT16 nTok_format_codeB = 350 + Tok_XmlFormat_BeginTag::code;
+const UINT16 nTok_format_codeE = 375 + Tok_XmlFormat_EndTag::code;
+const UINT16 nTok_format_atomB = 350 + Tok_XmlFormat_BeginTag::atom;
+const UINT16 nTok_format_atomE = 375 + Tok_XmlFormat_EndTag::atom;
+
+
+const UINT16 nTok_html_parastart = 400;
+
+const UINT16 nTok_MLDocuEnd = 501;
+const UINT16 nTok_EOL = 502;
+
+
+Context_Docu::Context_Docu( Token_Receiver & o_rReceiver )
+ : aStateMachine(C_nStatusSize, C_nCppInitialNrOfStati),
+ pReceiver(&o_rReceiver),
+ pParentContext(0),
+ pCx_EoHtml(0),
+ pCx_EoXmlConst(0),
+ pCx_EoXmlLink_BeginTag(0),
+ pCx_EoXmlLink_EndTag(0),
+ pCx_EoXmlFormat_BeginTag(0),
+ pCx_EoXmlFormat_EndTag(0),
+ pCx_CheckStar(0),
+ pNewToken(0),
+ pFollowUpContext(0),
+ bIsMultiline(false)
+{
+ pCx_EoHtml = new Cx_EoHtml(o_rReceiver, *this);
+ pCx_EoXmlConst = new Cx_EoXmlConst(o_rReceiver, *this);
+ pCx_EoXmlLink_BeginTag = new Cx_EoXmlLink_BeginTag(o_rReceiver, *this);
+ pCx_EoXmlLink_EndTag = new Cx_EoXmlLink_EndTag(o_rReceiver, *this);
+ pCx_EoXmlFormat_BeginTag = new Cx_EoXmlFormat_BeginTag(o_rReceiver, *this);
+ pCx_EoXmlFormat_EndTag = new Cx_EoXmlFormat_EndTag(o_rReceiver, *this);
+ pCx_CheckStar = new Cx_CheckStar(*pReceiver,*this);
+
+ SetupStateMachine();
+}
+
+void
+Context_Docu::SetParentContext( TkpContext & io_rParentContext,
+ const char * )
+{
+ pFollowUpContext = pParentContext = &io_rParentContext;
+ pCx_CheckStar->Set_End_FolloUpContext(io_rParentContext);
+}
+
+Context_Docu::~Context_Docu()
+{
+}
+
+void
+Context_Docu::ReadCharChain( CharacterSource & io_rText )
+{
+ csv_assert(pParentContext != 0);
+
+ pNewToken = 0;
+
+ UINT16 nTokenId = 0;
+ StmBoundsStatu2 & rBound = aStateMachine.GetCharChain(nTokenId, io_rText);
+
+ // !!!
+ // The order of the next two lines is essential, because
+ // pFollowUpContext may be changed by PerformStatusFunction() also,
+ // which then MUST override the previous assignment.
+ pFollowUpContext = rBound.FollowUpContext();
+ PerformStatusFunction(rBound.StatusFunctionNr(), nTokenId, io_rText);
+}
+
+bool
+Context_Docu::PassNewToken()
+{
+ if (pNewToken)
+ {
+ pReceiver->Receive(*pNewToken.Release());
+ return true;
+ }
+ return false;
+}
+
+TkpContext &
+Context_Docu::FollowUpContext()
+{
+ csv_assert(pFollowUpContext != 0);
+ return *pFollowUpContext;
+}
+
+void
+Context_Docu::PerformStatusFunction( uintt i_nStatusSignal,
+ UINT16 i_nTokenId,
+ CharacterSource & io_rText )
+{
+ switch (i_nStatusSignal)
+ {
+ case nF_fin_White:
+ io_rText.CutToken();
+ pNewToken = new Tok_White;
+ break;
+ case nF_fin_Error:
+ throw X_AutodocParser(X_AutodocParser::x_InvalidChar);
+ // no break because of throw
+ case nF_fin_Ignore:
+ pNewToken = 0;
+ io_rText.CutToken();
+ break;
+ case nF_fin_Eof:
+ if (bIsMultiline)
+ throw X_AutodocParser(X_AutodocParser::x_UnexpectedEOF);
+ else
+ io_rText.CutToken();
+ pNewToken = new Tok_EOF;
+ break;
+ case nF_fin_AnyWord:
+ pNewToken = new Tok_Word(io_rText.CutToken());
+ break;
+ case nF_fin_AtTag:
+ io_rText.CutToken();
+ pNewToken = new Tok_AtTag( i_nTokenId - 100 );
+ break;
+ case nF_fin_Comma:
+ io_rText.CutToken();
+ pNewToken = new Tok_Comma;
+ break;
+ case nF_fin_EndSign:
+ io_rText.CutToken();
+ switch (i_nTokenId)
+ {
+ case nTok_MLDocuEnd:
+ if (bIsMultiline)
+ {
+ pNewToken = new Tok_DocuEnd;
+ pFollowUpContext = pParentContext;
+ }
+ else
+ {
+ pNewToken = new Tok_Word(io_rText.CutToken());
+ pFollowUpContext = this;
+ }
+ break;
+ case nTok_EOL:
+ if (bIsMultiline)
+ {
+ pNewToken = new Tok_EOL;
+ pFollowUpContext = this;
+ }
+ else
+ {
+ pNewToken = new Tok_DocuEnd;
+ pFollowUpContext = pParentContext;
+ }
+ pReceiver->Increment_CurLine();
+ break;
+ default:
+ csv_assert(false);
+ }
+ break;
+ case nF_goto_EoHtml:
+ pCx_EoHtml->SetIfIsStartOfParagraph(i_nTokenId == nTok_html_parastart);
+ break;
+ case nF_goto_EoXmlConst:
+ pCx_EoXmlConst->SetTokenId(i_nTokenId - 200);
+ break;
+ case nF_goto_EoXmlLink_BeginTag:
+ pCx_EoXmlLink_BeginTag->SetTokenId(i_nTokenId - 300);
+ break;
+ case nF_goto_EoXmlLink_EndTag:
+ pCx_EoXmlLink_EndTag->SetTokenId(i_nTokenId - 325);
+ break;
+ case nF_goto_EoXmlFormat_BeginTag:
+ pCx_EoXmlFormat_BeginTag->SetTokenId(i_nTokenId - 350);
+ break;
+ case nF_goto_EoXmlFormat_EndTag:
+ pCx_EoXmlFormat_EndTag->SetTokenId(i_nTokenId - 375);
+ break;
+ case nF_goto_CheckStar:
+ pCx_CheckStar->SetIsEnd( bIsMultiline );
+ break;
+ default:
+ csv_assert(false);
+ } // end switch (i_nStatusSignal)
+}
+
+void
+Context_Docu::SetupStateMachine()
+{
+ // Besondere Array-Stati (kein Tokenabschluss oder Kontextwechsel):
+// const INT16 bas = 0; // Base-Status
+ const INT16 wht = 1; // Whitespace-overlook-Status
+ const INT16 awd = 2; // Any-Word-Read-Status
+
+ // Kontextwechsel-Stati:
+ const INT16 goto_EoHtml = 3;
+ const INT16 goto_EoXmlConst = 4;
+ const INT16 goto_EoXmlLink_BeginTag = 5;
+ const INT16 goto_EoXmlLink_EndTag = 6;
+ const INT16 goto_EoXmlFormat_BeginTag = 7;
+ const INT16 goto_EoXmlFormat_EndTag = 8;
+ const INT16 goto_CheckStar = 9;
+
+ // Tokenfinish-Stati:
+ const INT16 finError = 10;
+// const INT16 finIgnore = 11;
+ const INT16 finEof = 12;
+ const INT16 finAnyWord = 13;
+ const INT16 finAtTag = 14;
+ const INT16 finEndSign = 15;
+// const INT16 finComma = 16;
+ const INT16 finWhite = 17;
+
+ // Konstanten zur Benutzung in der Tabelle:
+ const INT16 ght = goto_EoHtml;
+/*
+ const INT16 gxc = goto_EoXmlConst;
+ const INT16 glb = goto_EoXmlLink_TagBegin;
+ const INT16 gle = goto_EoXmlLink_TagEnd;
+ const INT16 gfb = goto_EoXmlFormat_TagBegin;
+ const INT16 gfe = goto_EoXmlFormat_TagEnd;
+*/
+ const INT16 err = finError;
+ const INT16 faw = finAnyWord;
+// const INT16 fig = finIgnore;
+// const INT16 fes = finEndSign;
+ const INT16 fof = finEof;
+// const INT16 fat = finAtTag;
+ const INT16 fwh = finWhite;
+
+ /// The '0's will be replaced by calls of AddToken().
+
+ const INT16 A_nTopStatus[C_nStatusSize] =
+ // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+ {fof,err,err,err,err,err,err,err,err,wht, 0,wht,wht, 0,err,err,
+ err,err,err,err,err,err,err,err,err,err,fof,err,err,err,err,err, // ... 31
+ wht,awd,awd,awd,awd,awd,awd,awd,awd,awd, 0,awd,awd,awd,awd,awd,
+ awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd, 0,awd,awd,awd, // ... 63
+ 0,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,
+ awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd, // ... 95
+ awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,
+ awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd // ... 127
+ };
+
+ const INT16 A_nWhitespaceStatus[C_nStatusSize] =
+ // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+ {fof,err,err,err,err,err,err,err,err,wht,fwh,wht,wht,fwh,err,err,
+ err,err,err,err,err,err,err,err,err,err,fof,err,err,err,err,err, // ... 31
+ wht,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,
+ fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh, // ... 63
+ fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,
+ fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh, // ... 95
+ fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,
+ fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh,fwh // ... 127
+ };
+
+ const INT16 A_nWordStatus[C_nStatusSize] =
+ // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+ {faw,err,err,err,err,err,err,err,err,faw,faw,faw,faw,faw,err,err,
+ err,err,err,err,err,err,err,err,err,err,faw,err,err,err,err,err, // ... 31
+ faw,awd,awd,awd,awd,awd,awd,awd,awd,awd,faw,awd,awd,awd,awd,awd,
+ awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,faw,awd,awd,awd, // ... 63
+ faw,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,
+ awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd, // ... 95
+ awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,
+ awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd // ... 127
+ };
+
+ const INT16 A_nAtTagDefStatus[C_nStatusSize] =
+ // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+ {faw,err,err,err,err,err,err,err,err,faw,faw,faw,faw,faw,err,err,
+ err,err,err,err,err,err,err,err,err,err,faw,err,err,err,err,err, // ... 31
+ faw,awd,awd,awd,awd,awd,awd,awd,awd,awd,faw,awd,awd,awd,awd,awd,
+ awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,faw,awd,faw,awd,awd,awd, // ... 63
+ awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,
+ awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd, // ... 95
+ awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,
+ awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd,awd // ... 127
+ };
+
+ const INT16 A_nHtmlDefStatus[C_nStatusSize] =
+ // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+ {ght,err,err,err,err,err,err,err,err,ght,ght,ght,ght,ght,err,err,
+ err,err,err,err,err,err,err,err,err,err,ght,err,err,err,err,err, // ... 31
+ ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,
+ ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,ght, // ... 63
+ ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,
+ ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,ght, // ... 95
+ ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,
+ ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,ght,ght // ... 127
+ };
+
+ const INT16 A_nPunctDefStatus[C_nStatusSize] =
+ // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+ {err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,
+ err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,err, // 16 ...
+ err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,
+ err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,err, // 48 ...
+ err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,
+ err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,err, // 80 ...
+ err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,
+ err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,err // 112 ...
+ };
+
+ DYN StmArrayStatu2 * dpStatusTop
+ = new StmArrayStatu2( C_nStatusSize, A_nTopStatus, 0, true);
+ DYN StmArrayStatu2 * dpStatusWhite
+ = new StmArrayStatu2( C_nStatusSize, A_nWhitespaceStatus, 0, true);
+ DYN StmArrayStatu2 * dpStatusWord
+ = new StmArrayStatu2( C_nStatusSize, A_nWordStatus, 0, true);
+
+ DYN StmBoundsStatu2 * dpBst_goto_EoHtml
+ = new StmBoundsStatu2( *this, *pCx_EoHtml, nF_goto_EoHtml, true );
+ DYN StmBoundsStatu2 * dpBst_goto_EoXmlConst
+ = new StmBoundsStatu2( *this, *pCx_EoXmlConst, nF_goto_EoXmlConst, true );
+ DYN StmBoundsStatu2 * dpBst_goto_EoXmlLink_BeginTag
+ = new StmBoundsStatu2( *this, *pCx_EoXmlLink_BeginTag, nF_goto_EoXmlLink_BeginTag, true );
+ DYN StmBoundsStatu2 * dpBst_goto_EoXmlLink_EndTag
+ = new StmBoundsStatu2( *this, *pCx_EoXmlLink_EndTag, nF_goto_EoXmlLink_EndTag, true );
+ DYN StmBoundsStatu2 * dpBst_goto_EoXmlFormat_BeginTag
+ = new StmBoundsStatu2( *this, *pCx_EoXmlFormat_BeginTag, nF_goto_EoXmlFormat_BeginTag, true );
+ DYN StmBoundsStatu2 * dpBst_goto_EoXmlFormat_EndTag
+ = new StmBoundsStatu2( *this, *pCx_EoXmlFormat_EndTag, nF_goto_EoXmlFormat_EndTag, true );
+ DYN StmBoundsStatu2 * dpBst_goto_CheckStar
+ = new StmBoundsStatu2( *this, *pCx_CheckStar, nF_goto_CheckStar, true );
+
+
+ DYN StmBoundsStatu2 * dpBst_finError
+ = new StmBoundsStatu2( *this, TkpContext_Null2_(), nF_fin_Error, true );
+ DYN StmBoundsStatu2 * dpBst_finIgnore
+ = new StmBoundsStatu2( *this, *this, nF_fin_Ignore, true);
+ DYN StmBoundsStatu2 * dpBst_finEof
+ = new StmBoundsStatu2( *this, TkpContext_Null2_(), nF_fin_Eof, false);
+ DYN StmBoundsStatu2 * dpBst_finAnyWord
+ = new StmBoundsStatu2( *this, *this, nF_fin_AnyWord, true);
+ DYN StmBoundsStatu2 * dpBst_finAtTag
+ = new StmBoundsStatu2( *this, *this, nF_fin_AtTag, false);
+ DYN StmBoundsStatu2 * dpBst_finEndSign
+ = new StmBoundsStatu2( *this, *pParentContext, nF_fin_EndSign, false);
+ DYN StmBoundsStatu2 * dpBst_fin_Comma
+ = new StmBoundsStatu2( *this, *this, nF_fin_Comma, false );
+ DYN StmBoundsStatu2 * dpBst_finWhite
+ = new StmBoundsStatu2( *this, *this, nF_fin_White, false);
+
+
+ // dpMain aufbauen:
+ aStateMachine.AddStatus(dpStatusTop);
+ aStateMachine.AddStatus(dpStatusWhite);
+ aStateMachine.AddStatus(dpStatusWord);
+
+ aStateMachine.AddStatus(dpBst_goto_EoHtml);
+ aStateMachine.AddStatus(dpBst_goto_EoXmlConst);
+ aStateMachine.AddStatus(dpBst_goto_EoXmlLink_BeginTag);
+ aStateMachine.AddStatus(dpBst_goto_EoXmlLink_EndTag);
+ aStateMachine.AddStatus(dpBst_goto_EoXmlFormat_BeginTag);
+ aStateMachine.AddStatus(dpBst_goto_EoXmlFormat_EndTag);
+ aStateMachine.AddStatus(dpBst_goto_CheckStar);
+
+ aStateMachine.AddStatus(dpBst_finError);
+ aStateMachine.AddStatus(dpBst_finIgnore);
+ aStateMachine.AddStatus(dpBst_finEof);
+ aStateMachine.AddStatus(dpBst_finAnyWord);
+ aStateMachine.AddStatus(dpBst_finAtTag);
+ aStateMachine.AddStatus(dpBst_finEndSign);
+ aStateMachine.AddStatus(dpBst_fin_Comma);
+ aStateMachine.AddStatus(dpBst_finWhite);
+
+
+ aStateMachine.AddToken( "@author", nTok_at_author, A_nAtTagDefStatus, finAtTag );
+ aStateMachine.AddToken( "@param", nTok_at_param, A_nAtTagDefStatus, finAtTag );
+ aStateMachine.AddToken( "@throws", nTok_at_throws, A_nAtTagDefStatus, finAtTag );
+ aStateMachine.AddToken( "@see", nTok_at_see, A_nAtTagDefStatus, finAtTag );
+ aStateMachine.AddToken( "@since", nTok_at_since, A_nAtTagDefStatus, finAtTag );
+ aStateMachine.AddToken( "@example", nTok_at_example, A_nAtTagDefStatus, finAtTag );
+ aStateMachine.AddToken( "@return", nTok_at_return, A_nAtTagDefStatus, finAtTag );
+ aStateMachine.AddToken( "@returns", nTok_at_return, A_nAtTagDefStatus, finAtTag );
+ aStateMachine.AddToken( "@deprecated",
+ nTok_at_deprecated, A_nAtTagDefStatus, finAtTag );
+ aStateMachine.AddToken( "@suspicious",
+ nTok_at_suspicious, A_nAtTagDefStatus, finAtTag );
+ aStateMachine.AddToken( "@missing", nTok_at_missing, A_nAtTagDefStatus, finAtTag );
+ aStateMachine.AddToken( "@incomplete",
+ nTok_at_incomplete, A_nAtTagDefStatus, finAtTag );
+ aStateMachine.AddToken( "@version", nTok_at_version, A_nAtTagDefStatus, finAtTag );
+ aStateMachine.AddToken( "@guarantees",
+ nTok_at_guarantees, A_nAtTagDefStatus, finAtTag );
+ aStateMachine.AddToken( "@exception",
+ nTok_at_exception, A_nAtTagDefStatus, finAtTag );
+
+ aStateMachine.AddToken( "<", 0, A_nHtmlDefStatus, goto_EoHtml );
+ aStateMachine.AddToken( "*", 0, A_nPunctDefStatus, goto_CheckStar );
+// aStateMachine.AddToken( ",", 0, A_nPunctDefStatus, finComma );
+
+ aStateMachine.AddToken( "<type", nTok_link_typeB, A_nHtmlDefStatus, goto_EoXmlLink_BeginTag );
+ aStateMachine.AddToken( "</type", nTok_link_typeE, A_nHtmlDefStatus, goto_EoXmlLink_EndTag );
+ aStateMachine.AddToken( "<member", nTok_link_memberB, A_nHtmlDefStatus, goto_EoXmlLink_BeginTag );
+ aStateMachine.AddToken( "</member", nTok_link_membeE, A_nHtmlDefStatus, goto_EoXmlLink_EndTag );
+ aStateMachine.AddToken( "<const", nTok_link_constB, A_nHtmlDefStatus, goto_EoXmlLink_BeginTag );
+ aStateMachine.AddToken( "</const", nTok_link_constE, A_nHtmlDefStatus, goto_EoXmlLink_EndTag );
+
+ aStateMachine.AddToken( "<listing", nTok_format_listingB,A_nHtmlDefStatus, goto_EoXmlFormat_BeginTag );
+ aStateMachine.AddToken( "</listing",nTok_format_listingE,A_nHtmlDefStatus, goto_EoXmlFormat_EndTag );
+ aStateMachine.AddToken( "<code", nTok_format_codeB, A_nHtmlDefStatus, goto_EoXmlFormat_BeginTag );
+ aStateMachine.AddToken( "</code", nTok_format_codeE, A_nHtmlDefStatus, goto_EoXmlFormat_EndTag );
+ aStateMachine.AddToken( "<atom", nTok_format_atomB, A_nHtmlDefStatus, goto_EoXmlFormat_BeginTag );
+ aStateMachine.AddToken( "</atom", nTok_format_atomE, A_nHtmlDefStatus, goto_EoXmlFormat_EndTag );
+
+ aStateMachine.AddToken( "<TRUE/", nTok_const_TRUE, A_nHtmlDefStatus, goto_EoXmlConst );
+ aStateMachine.AddToken( "<true/", nTok_const_TRUE, A_nHtmlDefStatus, goto_EoXmlConst );
+ aStateMachine.AddToken( "<FALSE/", nTok_const_FALSE, A_nHtmlDefStatus, goto_EoXmlConst );
+ aStateMachine.AddToken( "<false/", nTok_const_FALSE, A_nHtmlDefStatus, goto_EoXmlConst );
+ aStateMachine.AddToken( "<NULL/", nTok_const_NULL, A_nHtmlDefStatus, goto_EoXmlConst );
+ aStateMachine.AddToken( "<void/", nTok_const_void, A_nHtmlDefStatus, goto_EoXmlConst );
+
+ aStateMachine.AddToken( "<p", nTok_html_parastart, A_nHtmlDefStatus, goto_EoHtml );
+ aStateMachine.AddToken( "<pre", nTok_html_parastart, A_nHtmlDefStatus, goto_EoHtml );
+ aStateMachine.AddToken( "<dl", nTok_html_parastart, A_nHtmlDefStatus, goto_EoHtml );
+ aStateMachine.AddToken( "<ul", nTok_html_parastart, A_nHtmlDefStatus, goto_EoHtml );
+ aStateMachine.AddToken( "<ol", nTok_html_parastart, A_nHtmlDefStatus, goto_EoHtml );
+ aStateMachine.AddToken( "<table", nTok_html_parastart, A_nHtmlDefStatus, goto_EoHtml );
+ aStateMachine.AddToken( "<P", nTok_html_parastart, A_nHtmlDefStatus, goto_EoHtml );
+ aStateMachine.AddToken( "<PRE", nTok_html_parastart, A_nHtmlDefStatus, goto_EoHtml );
+ aStateMachine.AddToken( "<DL", nTok_html_parastart, A_nHtmlDefStatus, goto_EoHtml );
+ aStateMachine.AddToken( "<UL", nTok_html_parastart, A_nHtmlDefStatus, goto_EoHtml );
+ aStateMachine.AddToken( "<OL", nTok_html_parastart, A_nHtmlDefStatus, goto_EoHtml );
+ aStateMachine.AddToken( "<TABLE", nTok_html_parastart, A_nHtmlDefStatus, goto_EoHtml );
+
+ aStateMachine.AddToken( "\r\n", nTok_EOL, A_nPunctDefStatus, finEndSign );
+ aStateMachine.AddToken( "\n", nTok_EOL, A_nPunctDefStatus, finEndSign );
+ aStateMachine.AddToken( "\r", nTok_EOL, A_nPunctDefStatus, finEndSign );
+};
+
+void
+Context_Docu::SetMode_IsMultiLine( bool i_bTrue )
+{
+ bIsMultiline = i_bTrue;
+}
+
+
+} // namespace dsapi
+} // namespace csi
+
diff --git a/autodoc/source/parser_i/idoc/docu_pe2.cxx b/autodoc/source/parser_i/idoc/docu_pe2.cxx
new file mode 100644
index 000000000000..084dbbf0660c
--- /dev/null
+++ b/autodoc/source/parser_i/idoc/docu_pe2.cxx
@@ -0,0 +1,606 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <s2_dsapi/docu_pe2.hxx>
+
+
+// NOT FULLY DEFINED SERVICES
+#include <ary/doc/d_oldidldocu.hxx>
+#include <ary_i/d_token.hxx>
+#include <parser/parserinfo.hxx>
+#include <adc_cl.hxx>
+#include <adc_msg.hxx>
+#include <../parser/inc/x_docu.hxx>
+#include <s2_dsapi/dsapitok.hxx>
+#include <s2_dsapi/tk_atag2.hxx>
+#include <s2_dsapi/tk_html.hxx>
+#include <s2_dsapi/tk_docw2.hxx>
+#include <s2_dsapi/tk_xml.hxx>
+
+
+#ifdef UNX
+#define strnicmp strncasecmp
+#endif
+
+
+namespace csi
+{
+namespace dsapi
+{
+
+
+const char * AtTagTitle(
+ const Tok_AtTag & i_rToken );
+
+
+SapiDocu_PE::SapiDocu_PE(ParserInfo & io_rPositionInfo)
+ : pDocu(0),
+ eState(e_none),
+ pPositionInfo(&io_rPositionInfo),
+ fCurTokenAddFunction(&SapiDocu_PE::AddDocuToken2Void),
+ pCurAtTag(0),
+ sCurDimAttribute(),
+ sCurAtSeeType_byXML(200)
+{
+}
+
+SapiDocu_PE::~SapiDocu_PE()
+{
+}
+
+void
+SapiDocu_PE::ProcessToken( DYN csi::dsapi::Token & let_drToken )
+{
+ if (IsComplete())
+ {
+ pDocu = 0;
+ eState = e_none;
+ }
+
+ if ( eState == e_none )
+ {
+ pDocu = new ary::doc::OldIdlDocu;
+ eState = st_short;
+ fCurTokenAddFunction = &SapiDocu_PE::AddDocuToken2Short;
+ }
+
+ csv_assert(pDocu);
+
+ let_drToken.Trigger(*this);
+ delete &let_drToken;
+}
+
+void
+SapiDocu_PE::Process_AtTag( const Tok_AtTag & i_rToken )
+{
+ if (NOT pCurAtTag)
+ {
+ eState = st_attags;
+ fCurTokenAddFunction = &SapiDocu_PE::AddDocuToken2CurAtTag;
+ }
+ else
+ {
+ csv_assert(eState == st_attags);
+ pDocu->AddAtTag(*pCurAtTag.Release());
+ }
+
+ if (i_rToken.Id() == Tok_AtTag::param)
+ {
+ pCurAtTag = new DT_ParameterAtTag;
+ fCurTokenAddFunction = &SapiDocu_PE::SetCurParameterAtTagName;
+ }
+ else if (i_rToken.Id() == Tok_AtTag::see)
+ {
+ pCurAtTag = new DT_SeeAlsoAtTag;
+ fCurTokenAddFunction = &SapiDocu_PE::SetCurSeeAlsoAtTagLinkText;
+ }
+ else if (i_rToken.Id() == Tok_AtTag::deprecated)
+ {
+ pDocu->SetDeprecated();
+ pCurAtTag = new DT_StdAtTag(""); // Dummy that will not be used.
+ fCurTokenAddFunction = &SapiDocu_PE::AddDocuToken2Deprecated;
+ }
+ else if (i_rToken.Id() == Tok_AtTag::since)
+ {
+ pCurAtTag = new DT_SinceAtTag;
+ fCurTokenAddFunction = &SapiDocu_PE::SetCurSinceAtTagVersion;
+ }
+ else
+ {
+ pCurAtTag = new DT_StdAtTag( AtTagTitle(i_rToken) );
+ fCurTokenAddFunction = &SapiDocu_PE::AddDocuToken2CurAtTag;
+ }
+}
+
+void
+SapiDocu_PE::Process_HtmlTag( const Tok_HtmlTag & i_rToken )
+{
+ if (eState == st_short AND i_rToken.IsParagraphStarter())
+ {
+ eState = st_description;
+ fCurTokenAddFunction = &SapiDocu_PE::AddDocuToken2Description;
+ }
+
+ // Workaround special for some errors in API docu:
+ if ( strnicmp("<true",i_rToken.Text(),5 ) == 0 )
+ {
+ if ( strcmp("<TRUE/>",i_rToken.Text()) != 0 )
+ TheMessages().Out_InvalidConstSymbol( i_rToken.Text(),
+ pPositionInfo->CurFile(),
+ pPositionInfo->CurLine() );
+ (this->*fCurTokenAddFunction)( *new DT_TextToken("<b>true</b>") );
+ return;
+ }
+ else if ( strnicmp("<false",i_rToken.Text(),6 ) == 0 )
+ {
+ if ( strcmp("<FALSE/>",i_rToken.Text()) != 0 )
+ TheMessages().Out_InvalidConstSymbol( i_rToken.Text(),
+ pPositionInfo->CurFile(),
+ pPositionInfo->CurLine() );
+ (this->*fCurTokenAddFunction)( *new DT_TextToken("<b>false</b>") );
+ return;
+ }
+ else if ( strnicmp("<NULL",i_rToken.Text(),5 ) == 0 )
+ {
+ if ( strcmp("<NULL/>",i_rToken.Text()) != 0 )
+ TheMessages().Out_InvalidConstSymbol( i_rToken.Text(),
+ pPositionInfo->CurFile(),
+ pPositionInfo->CurLine() );
+ (this->*fCurTokenAddFunction)( *new DT_TextToken("<b>null</b>") );
+ return;
+ }
+ else if ( strnicmp("<void",i_rToken.Text(),5 ) == 0 )
+ {
+ if ( strcmp("<void/>",i_rToken.Text()) != 0 )
+ TheMessages().Out_InvalidConstSymbol( i_rToken.Text(),
+ pPositionInfo->CurFile(),
+ pPositionInfo->CurLine() );
+ (this->*fCurTokenAddFunction)( *new DT_TextToken("<b>void</b>") );
+ return;
+ }
+
+ (this->*fCurTokenAddFunction)( *new DT_Style(i_rToken.Text(),false) );
+}
+
+void
+SapiDocu_PE::Process_XmlConst( const Tok_XmlConst & i_rToken )
+{
+ (this->*fCurTokenAddFunction)(*new DT_MupConst(i_rToken.Text()));
+}
+
+void
+SapiDocu_PE::Process_XmlLink_BeginTag( const Tok_XmlLink_BeginTag & i_rToken )
+{
+ switch (i_rToken.Id())
+ {
+ case Tok_XmlLink_Tag::e_const:
+ (this->*fCurTokenAddFunction)(*new DT_Style("<b>",false));
+ break;
+ case Tok_XmlLink_Tag::member:
+ (this->*fCurTokenAddFunction)(*new DT_MupMember(i_rToken.Scope()));
+ break;
+ case Tok_XmlLink_Tag::type:
+ (this->*fCurTokenAddFunction)(*new DT_MupType(i_rToken.Scope()));
+ break;
+ default:
+ // Do nothing.
+ ;
+ }
+
+ if ( i_rToken.Dim().length() > 0 )
+ sCurDimAttribute = i_rToken.Dim();
+ else
+ sCurDimAttribute.clear();
+}
+
+void
+SapiDocu_PE::Process_XmlLink_EndTag( const Tok_XmlLink_EndTag & i_rToken )
+{
+ switch (i_rToken.Id())
+ {
+ case Tok_XmlLink_Tag::e_const:
+ (this->*fCurTokenAddFunction)(*new DT_Style("</b>",false));
+ break;
+ case Tok_XmlLink_Tag::member:
+ (this->*fCurTokenAddFunction)(*new DT_MupMember(true));
+ break;
+ case Tok_XmlLink_Tag::type:
+ (this->*fCurTokenAddFunction)(*new DT_MupType(true));
+ break;
+ default:
+ // Do nothing.
+ ;
+ }
+ if ( sCurDimAttribute.length() > 0 )
+ {
+ (this->*fCurTokenAddFunction)( *new DT_TextToken(sCurDimAttribute.c_str()) );
+ sCurDimAttribute.clear();
+ }
+}
+
+void
+SapiDocu_PE::Process_XmlFormat_BeginTag( const Tok_XmlFormat_BeginTag & i_rToken )
+{
+ switch (i_rToken.Id())
+ {
+ case Tok_XmlFormat_Tag::code:
+ (this->*fCurTokenAddFunction)(*new DT_Style("<code>",false));
+ break;
+ case Tok_XmlFormat_Tag::listing:
+ (this->*fCurTokenAddFunction)(*new DT_Style("<pre>",true));
+ break;
+ case Tok_XmlFormat_Tag::atom:
+ (this->*fCurTokenAddFunction)(*new DT_Style("<code>",true));
+ break;
+ default:
+ // Do nothing.
+ ;
+ }
+ if ( i_rToken.Dim().length() > 0 )
+ sCurDimAttribute = i_rToken.Dim();
+ else
+ sCurDimAttribute.clear();
+}
+
+void
+SapiDocu_PE::Process_XmlFormat_EndTag( const Tok_XmlFormat_EndTag & i_rToken )
+{
+ switch (i_rToken.Id())
+ {
+ case Tok_XmlFormat_Tag::code:
+ (this->*fCurTokenAddFunction)(*new DT_Style("</code>",false));
+ break;
+ case Tok_XmlFormat_Tag::listing:
+ (this->*fCurTokenAddFunction)(*new DT_Style("</pre>",true));
+ break;
+ case Tok_XmlFormat_Tag::atom:
+ (this->*fCurTokenAddFunction)(*new DT_Style("</code>",true));
+ break;
+ default:
+ // Do nothing.
+ ;
+ }
+ if ( sCurDimAttribute.length() > 0 )
+ {
+ (this->*fCurTokenAddFunction)( *new DT_TextToken(sCurDimAttribute.c_str()) );
+ sCurDimAttribute.clear();
+ }
+}
+
+void
+SapiDocu_PE::Process_Word( const Tok_Word & i_rToken )
+{
+ (this->*fCurTokenAddFunction)(*new DT_TextToken(i_rToken.Text()));
+}
+
+void
+SapiDocu_PE::Process_Comma()
+{
+ csv_assert(1==7);
+// (this->*fCurTokenAddFunction)(*new DT_Comma(i_rToken.Text()));
+}
+
+void
+SapiDocu_PE::Process_DocuEnd()
+{
+ eState = st_complete;
+ if (pCurAtTag)
+ pDocu->AddAtTag(*pCurAtTag.Release());
+ fCurTokenAddFunction = &SapiDocu_PE::AddDocuToken2Void;
+}
+
+void
+SapiDocu_PE::Process_EOL()
+{
+ (this->*fCurTokenAddFunction)(*new DT_EOL);
+}
+
+void
+SapiDocu_PE::Process_White()
+{
+ (this->*fCurTokenAddFunction)(*new DT_White);
+}
+
+DYN ary::doc::OldIdlDocu *
+SapiDocu_PE::ReleaseJustParsedDocu()
+{
+ if (IsComplete())
+ {
+ eState = e_none;
+ return pDocu.Release();
+ }
+ return 0;
+}
+
+
+bool
+SapiDocu_PE::IsComplete() const
+{
+ return eState == st_complete;
+}
+
+void
+SapiDocu_PE::AddDocuToken2Void( DYN ary::inf::DocuToken & let_drNewToken )
+{
+ delete &let_drNewToken;
+}
+
+void
+SapiDocu_PE::AddDocuToken2Short( DYN ary::inf::DocuToken & let_drNewToken )
+{
+ csv_assert(pDocu);
+ pDocu->AddToken2Short(let_drNewToken);
+}
+
+void
+SapiDocu_PE::AddDocuToken2Description( DYN ary::inf::DocuToken & let_drNewToken )
+{
+ csv_assert(pDocu);
+ pDocu->AddToken2Description(let_drNewToken);
+}
+
+void
+SapiDocu_PE::AddDocuToken2Deprecated( DYN ary::inf::DocuToken & let_drNewToken )
+{
+ csv_assert(pDocu);
+ pDocu->AddToken2DeprecatedText(let_drNewToken);
+}
+
+void
+SapiDocu_PE::AddDocuToken2CurAtTag( DYN ary::inf::DocuToken & let_drNewToken )
+{
+ csv_assert(pCurAtTag);
+ pCurAtTag->AddToken(let_drNewToken);
+}
+
+void
+SapiDocu_PE::SetCurParameterAtTagName( DYN ary::inf::DocuToken & let_drNewToken )
+{
+ if (let_drNewToken.IsWhiteOnly())
+ {
+ delete &let_drNewToken;
+ return;
+ }
+
+ csv_assert(pCurAtTag);
+ DT_TextToken * dpText = dynamic_cast< DT_TextToken* >(&let_drNewToken);
+ if (dpText != 0)
+ pCurAtTag->SetName(dpText->GetText());
+ else
+ pCurAtTag->SetName("parameter ?");
+ delete &let_drNewToken;
+ fCurTokenAddFunction = &SapiDocu_PE::AddDocuToken2CurAtTag;
+}
+
+void
+SapiDocu_PE::SetCurSeeAlsoAtTagLinkText( DYN ary::inf::DocuToken & let_drNewToken )
+{
+ csv_assert(pCurAtTag);
+
+ if (let_drNewToken.IsWhiteOnly())
+ {
+ delete &let_drNewToken;
+ return;
+ }
+
+ DT_TextToken * pText = dynamic_cast< DT_TextToken* >(&let_drNewToken);
+ if (pText != 0)
+ pCurAtTag->SetName(pText->GetText());
+ else
+ {
+ DT_MupType *
+ pTypeBegin = dynamic_cast< DT_MupType* >(&let_drNewToken);
+ DT_MupMember *
+ pMemberBegin = dynamic_cast< DT_MupMember* >(&let_drNewToken);
+ if (pTypeBegin != 0 OR pMemberBegin != 0)
+ {
+ sCurAtSeeType_byXML.reset();
+
+ sCurAtSeeType_byXML
+ << ( pTypeBegin != 0
+ ? pTypeBegin->Scope()
+ : pMemberBegin->Scope() );
+
+ if (sCurAtSeeType_byXML.tellp() > 0)
+ {
+ sCurAtSeeType_byXML
+ << "::";
+ }
+ delete &let_drNewToken;
+ fCurTokenAddFunction = &SapiDocu_PE::SetCurSeeAlsoAtTagLinkText_2;
+ return;
+ }
+ else
+ {
+ pCurAtTag->SetName("? (no identifier found)");
+ }
+ }
+ delete &let_drNewToken;
+ fCurTokenAddFunction = &SapiDocu_PE::AddDocuToken2CurAtTag;
+}
+
+void
+SapiDocu_PE::SetCurSeeAlsoAtTagLinkText_2( DYN ary::inf::DocuToken & let_drNewToken )
+{
+ csv_assert(pCurAtTag);
+
+ if (let_drNewToken.IsWhiteOnly())
+ {
+ delete &let_drNewToken;
+ return;
+ }
+
+ DT_TextToken *
+ pText = dynamic_cast< DT_TextToken* >(&let_drNewToken);
+ if (pText != 0)
+ {
+ sCurAtSeeType_byXML
+ << pText->GetText();
+ pCurAtTag->SetName(sCurAtSeeType_byXML.c_str());
+ }
+ else
+ {
+ pCurAtTag->SetName("? (no identifier found)");
+ }
+ sCurAtSeeType_byXML.reset();
+ delete &let_drNewToken;
+ fCurTokenAddFunction = &SapiDocu_PE::SetCurSeeAlsoAtTagLinkText_3;
+}
+
+void
+SapiDocu_PE::SetCurSeeAlsoAtTagLinkText_3( DYN ary::inf::DocuToken & let_drNewToken )
+{
+ csv_assert(pCurAtTag);
+
+ if (let_drNewToken.IsWhiteOnly())
+ {
+ delete &let_drNewToken;
+ return;
+ }
+
+ /// Could emit warning, but don't because this parser is obsolete.
+// Tok_XmlLink_BeginTag *
+// pLinkEnd = dynamic_cast< Tok_XmlLink_EndTag* >(&let_drNewToken);
+// if (pLinkEnd == 0)
+// {
+// warn_aboutMissingClosingTag();
+// }
+
+ delete &let_drNewToken;
+ fCurTokenAddFunction = &SapiDocu_PE::AddDocuToken2CurAtTag;
+}
+
+
+
+void
+SapiDocu_PE::SetCurSinceAtTagVersion( DYN ary::inf::DocuToken & let_drNewToken )
+{
+ csv_assert(pCurAtTag);
+
+ DT_TextToken * pToken = dynamic_cast< DT_TextToken* >(&let_drNewToken);
+ if (pToken == 0)
+ {
+ delete &let_drNewToken;
+ return;
+ }
+
+ const String
+ sVersion(pToken->GetText());
+ const char
+ cFirst = *sVersion.begin();
+ const char
+ cCiphersend = '9' + 1;
+ const autodoc::CommandLine &
+ rCommandLine = autodoc::CommandLine::Get_();
+
+
+ if ( rCommandLine.DoesTransform_SinceTag())
+ {
+ // The @since version number shall be interpreted,
+
+ if ( NOT csv::in_range('0', cFirst, cCiphersend) )
+ {
+ // But this is a non-number-part, so we wait for
+ // the next one.
+ delete &let_drNewToken;
+ return;
+ }
+ else if (rCommandLine.DisplayOf_SinceTagValue(sVersion).empty())
+ {
+ // This is the numbered part, but we don't know it.
+ delete &let_drNewToken;
+
+ StreamLock
+ sl(200);
+ sl()
+ << "Since-value '"
+ << sVersion
+ << "' not found in translation table.";
+ throw X_Docu("since", sl().c_str());
+ }
+ }
+
+ // Either since tags are not specially interpreted, or
+ // we got a known one.
+ pCurAtTag->AddToken(let_drNewToken);
+ fCurTokenAddFunction = &SapiDocu_PE::AddDocuToken2SinceAtTag;
+}
+
+void
+SapiDocu_PE::AddDocuToken2SinceAtTag( DYN ary::inf::DocuToken & let_drNewToken )
+{
+ csv_assert(pCurAtTag);
+ String &
+ sValue = pCurAtTag->Access_Text().Access_TextOfFirstToken();
+ StreamLock
+ sHelp(1000);
+
+ DT_TextToken *
+ pToken = dynamic_cast< DT_TextToken* >(&let_drNewToken);
+ if (pToken != 0)
+ {
+ sValue = sHelp() << sValue << pToken->GetText() << c_str;
+ }
+ else if (dynamic_cast< DT_White* >(&let_drNewToken) != 0)
+ {
+ sValue = sHelp() << sValue << " " << c_str;
+ }
+ delete &let_drNewToken;
+}
+
+const char *
+AtTagTitle( const Tok_AtTag & i_rToken )
+{
+ switch (i_rToken.Id())
+ {
+ case Tok_AtTag::author: return "";
+ case Tok_AtTag::see: return "See also";
+ case Tok_AtTag::param: return "Parameters";
+ case Tok_AtTag::e_return: return "Returns";
+ case Tok_AtTag::e_throw: return "Throws";
+ case Tok_AtTag::example: return "Example";
+ case Tok_AtTag::deprecated: return "Deprecated";
+ case Tok_AtTag::suspicious: return "";
+ case Tok_AtTag::missing: return "";
+ case Tok_AtTag::incomplete: return "";
+ case Tok_AtTag::version: return "";
+ case Tok_AtTag::guarantees: return "Guarantees";
+ case Tok_AtTag::exception: return "Exception";
+ case Tok_AtTag::since: return "Since version";
+ default:
+ // See below.
+ ;
+ }
+ return i_rToken.Text();
+}
+
+
+
+} // namespace dsapi
+} // namespace csi
+
diff --git a/autodoc/source/parser_i/idoc/makefile.mk b/autodoc/source/parser_i/idoc/makefile.mk
new file mode 100644
index 000000000000..c4e760bd2973
--- /dev/null
+++ b/autodoc/source/parser_i/idoc/makefile.mk
@@ -0,0 +1,62 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..$/..$/..
+
+PRJNAME=autodoc
+TARGET=parser2_s2_dsapi
+
+
+# --- Settings -----------------------------------------------------
+
+ENABLE_EXCEPTIONS=true
+PRJINC=$(PRJ)$/source
+
+.INCLUDE : settings.mk
+.INCLUDE : $(PRJ)$/source$/mkinc$/fullcpp.mk
+
+
+
+# --- Files --------------------------------------------------------
+
+OBJFILES= \
+ $(OBJ)$/cx_docu2.obj \
+ $(OBJ)$/cx_dsapi.obj \
+ $(OBJ)$/docu_pe2.obj \
+ $(OBJ)$/tk_atag2.obj \
+ $(OBJ)$/tk_docw2.obj \
+ $(OBJ)$/tk_html.obj \
+ $(OBJ)$/tk_xml.obj
+
+
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : target.mk
+
+
+
diff --git a/autodoc/source/parser_i/idoc/tk_atag2.cxx b/autodoc/source/parser_i/idoc/tk_atag2.cxx
new file mode 100644
index 000000000000..5454e31ad839
--- /dev/null
+++ b/autodoc/source/parser_i/idoc/tk_atag2.cxx
@@ -0,0 +1,83 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <s2_dsapi/tk_atag2.hxx>
+
+
+// NOT FULLY DEFINED SERVICES
+#include <s2_dsapi/tokintpr.hxx>
+
+
+
+using csi::dsapi::Tok_AtTag;
+
+lux::EnumValueMap G_aTokAtTag_EV_TokenId_Values;
+Tok_AtTag::EV_TokenId ev_none2(Tok_AtTag::e_none,"");
+Tok_AtTag::EV_TokenId ev_author(Tok_AtTag::author,"@author");
+Tok_AtTag::EV_TokenId ev_see(Tok_AtTag::see,"@see");
+Tok_AtTag::EV_TokenId ev_param(Tok_AtTag::param,"@param");
+Tok_AtTag::EV_TokenId ev_e_return(Tok_AtTag::e_return,"@return");
+Tok_AtTag::EV_TokenId ev_e_throw(Tok_AtTag::e_throw,"@throws");
+Tok_AtTag::EV_TokenId ev_example(Tok_AtTag::example,"@example");
+Tok_AtTag::EV_TokenId ev_deprecated(Tok_AtTag::deprecated,"@deprecated");
+Tok_AtTag::EV_TokenId ev_suspicious(Tok_AtTag::suspicious,"@suspicious");
+Tok_AtTag::EV_TokenId ev_missing(Tok_AtTag::missing,"@missing");
+Tok_AtTag::EV_TokenId ev_incomplete(Tok_AtTag::incomplete,"@incomplete");
+Tok_AtTag::EV_TokenId ev_version(Tok_AtTag::version,"@version");
+Tok_AtTag::EV_TokenId ev_guarantees(Tok_AtTag::guarantees,"@guarantees");
+Tok_AtTag::EV_TokenId ev_exception(Tok_AtTag::exception,"@exception");
+Tok_AtTag::EV_TokenId ev_since(Tok_AtTag::since,"@since");
+
+
+namespace lux
+{
+template<> EnumValueMap &
+Tok_AtTag::EV_TokenId::Values_() { return G_aTokAtTag_EV_TokenId_Values; }
+}
+
+
+namespace csi
+{
+namespace dsapi
+{
+
+void
+Tok_AtTag::Trigger( TokenInterpreter & io_rInterpreter ) const
+{
+ io_rInterpreter.Process_AtTag(*this);
+}
+
+const char *
+Tok_AtTag::Text() const
+{
+ return eTag.Text();
+}
+
+} // namespace dsapi
+} // namespace csi
+
diff --git a/autodoc/source/parser_i/idoc/tk_docw2.cxx b/autodoc/source/parser_i/idoc/tk_docw2.cxx
new file mode 100644
index 000000000000..56e0a935ac38
--- /dev/null
+++ b/autodoc/source/parser_i/idoc/tk_docw2.cxx
@@ -0,0 +1,119 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <s2_dsapi/tk_docw2.hxx>
+
+
+// NOT FULLY DEFINED SERVICES
+#include <s2_dsapi/tokintpr.hxx>
+
+
+
+namespace csi
+{
+namespace dsapi
+{
+
+void
+Tok_Word::Trigger( TokenInterpreter & io_rInterpreter ) const
+{
+ io_rInterpreter.Process_Word(*this);
+}
+
+const char *
+Tok_Word::Text() const
+{
+ return sText;
+}
+
+void
+Tok_Comma::Trigger( TokenInterpreter & io_rInterpreter ) const
+{
+ io_rInterpreter.Process_Comma();
+}
+
+const char *
+Tok_Comma::Text() const
+{
+ return ",";
+}
+
+void
+Tok_DocuEnd::Trigger( TokenInterpreter & io_rInterpreter ) const
+{
+ io_rInterpreter.Process_DocuEnd();
+}
+
+const char *
+Tok_DocuEnd::Text() const
+{
+ return "*/";
+}
+
+void
+Tok_EOL::Trigger( TokenInterpreter & io_rInterpreter ) const
+{
+ io_rInterpreter.Process_EOL();
+}
+
+const char *
+Tok_EOL::Text() const
+{
+ return "\r\n";
+}
+
+void
+Tok_EOF::Trigger( TokenInterpreter & ) const
+{
+ csv_assert(false);
+}
+
+const char *
+Tok_EOF::Text() const
+{
+ return "";
+}
+
+void
+Tok_White::Trigger( TokenInterpreter & io_rInterpreter ) const
+{
+ io_rInterpreter.Process_White();
+}
+
+const char *
+Tok_White::Text() const
+{
+ return " ";
+}
+
+
+
+
+} // namespace dsapi
+} // namespace csi
+
diff --git a/autodoc/source/parser_i/idoc/tk_html.cxx b/autodoc/source/parser_i/idoc/tk_html.cxx
new file mode 100644
index 000000000000..bfb44a3789e8
--- /dev/null
+++ b/autodoc/source/parser_i/idoc/tk_html.cxx
@@ -0,0 +1,58 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <s2_dsapi/tk_html.hxx>
+
+
+// NOT FULLY DEFINED SERVICES
+#include <s2_dsapi/tokintpr.hxx>
+
+
+
+namespace csi
+{
+namespace dsapi
+{
+
+void
+Tok_HtmlTag::Trigger( TokenInterpreter & io_rInterpreter ) const
+{
+ io_rInterpreter.Process_HtmlTag(*this);
+}
+
+const char *
+Tok_HtmlTag::Text() const
+{
+ return sTag;
+}
+
+
+} // namespace dsapi
+} // namespace csi
+
+
diff --git a/autodoc/source/parser_i/idoc/tk_xml.cxx b/autodoc/source/parser_i/idoc/tk_xml.cxx
new file mode 100644
index 000000000000..9626fdb330ed
--- /dev/null
+++ b/autodoc/source/parser_i/idoc/tk_xml.cxx
@@ -0,0 +1,174 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <s2_dsapi/tk_xml.hxx>
+
+
+// NOT FULLY DEFINED SERVICES
+#include <s2_dsapi/tokintpr.hxx>
+
+using csi::dsapi::Tok_XmlConst;
+using csi::dsapi::Tok_XmlLink_Tag;
+using csi::dsapi::Tok_XmlFormat_Tag;
+
+
+lux::EnumValueMap G_aTok_XmlConst_EV_TokenId_Values;
+Tok_XmlConst::EV_TokenId ev_consts_none(Tok_XmlConst::e_none,"");
+Tok_XmlConst::EV_TokenId ev_e_true(Tok_XmlConst::e_true,"true");
+Tok_XmlConst::EV_TokenId ev_e_false(Tok_XmlConst::e_false,"false");
+Tok_XmlConst::EV_TokenId ev_e_null(Tok_XmlConst::e_null,"NULL");
+Tok_XmlConst::EV_TokenId ev_e_void(Tok_XmlConst::e_void,"void");
+
+lux::EnumValueMap G_aTok_XmlLink_Tag_EV_TokenId_Values;
+Tok_XmlLink_Tag::EV_TokenId ev_linktags_none(Tok_XmlLink_Tag::e_none,"");
+Tok_XmlLink_Tag::EV_TokenId ev_e_const(Tok_XmlLink_Tag::e_const,"const");
+Tok_XmlLink_Tag::EV_TokenId ev_member(Tok_XmlLink_Tag::member,"member");
+Tok_XmlLink_Tag::EV_TokenId ev_type(Tok_XmlLink_Tag::type,"type");
+
+lux::EnumValueMap G_aTok_XmlFormat_Tag_EV_TokenId_Values;
+Tok_XmlFormat_Tag::EV_TokenId ev_formattags_none(Tok_XmlFormat_Tag::e_none,"");
+Tok_XmlFormat_Tag::EV_TokenId ev_code(Tok_XmlFormat_Tag::code,"code");
+Tok_XmlFormat_Tag::EV_TokenId ev_listing(Tok_XmlFormat_Tag::listing,"listing");
+Tok_XmlFormat_Tag::EV_TokenId ev_atom(Tok_XmlFormat_Tag::atom,"code");
+
+
+namespace lux
+{
+
+template<> EnumValueMap &
+Tok_XmlConst::EV_TokenId::Values_() { return G_aTok_XmlConst_EV_TokenId_Values; }
+template<> EnumValueMap &
+Tok_XmlLink_Tag::EV_TokenId::Values_() { return G_aTok_XmlLink_Tag_EV_TokenId_Values; }
+template<> EnumValueMap &
+Tok_XmlFormat_Tag::EV_TokenId::Values_() { return G_aTok_XmlFormat_Tag_EV_TokenId_Values; }
+
+} // namespace lux
+
+
+
+namespace csi
+{
+namespace dsapi
+{
+
+void
+Tok_XmlConst::Trigger( TokenInterpreter & io_rInterpreter ) const
+{
+ io_rInterpreter.Process_XmlConst(*this);
+}
+
+const char *
+Tok_XmlConst::Text() const
+{
+ return eTag.Text();
+}
+
+void
+Tok_XmlLink_BeginTag::Trigger( TokenInterpreter & io_rInterpreter ) const
+{
+ io_rInterpreter.Process_XmlLink_BeginTag(*this);
+}
+
+const char *
+Tok_XmlLink_BeginTag::Text() const
+{
+ static StreamStr ret(120);
+ ret.seekp(0);
+ if (sScope.length() > 0)
+ {
+ ret << "<"
+ << eTag.Text()
+ << " scope=\""
+ << sScope
+ << "\">";
+ }
+ else
+ {
+ ret << "<"
+ << eTag.Text()
+ << ">";
+ }
+ return ret.c_str();
+}
+
+void
+Tok_XmlLink_EndTag::Trigger( TokenInterpreter & io_rInterpreter ) const
+{
+ io_rInterpreter.Process_XmlLink_EndTag(*this);
+}
+
+const char *
+Tok_XmlLink_EndTag::Text() const
+{
+ static StreamStr ret(120);
+ ret.seekp(0);
+ ret << "</"
+ << eTag.Text()
+ << ">";
+ return ret.c_str();
+}
+
+void
+Tok_XmlFormat_BeginTag::Trigger( TokenInterpreter & io_rInterpreter ) const
+{
+ io_rInterpreter.Process_XmlFormat_BeginTag(*this);
+}
+
+const char *
+Tok_XmlFormat_BeginTag::Text() const
+{
+ static StreamStr ret(120);
+ ret.seekp(0);
+ ret << "<"
+ << eTag.Text()
+ << ">";
+ return ret.c_str();
+}
+
+void
+Tok_XmlFormat_EndTag::Trigger( TokenInterpreter & io_rInterpreter ) const
+{
+ io_rInterpreter.Process_XmlFormat_EndTag(*this);
+}
+
+const char *
+Tok_XmlFormat_EndTag::Text() const
+{
+ static StreamStr ret(120);
+ ret.seekp(0);
+ ret << "</"
+ << eTag.Text()
+ << ">";
+ return ret.c_str();
+}
+
+
+} // namespace dsapi
+} // namespace csi
+
+
diff --git a/autodoc/source/parser_i/inc/s2_dsapi/cx_docu2.hxx b/autodoc/source/parser_i/inc/s2_dsapi/cx_docu2.hxx
new file mode 100644
index 000000000000..e344ffca62e6
--- /dev/null
+++ b/autodoc/source/parser_i/inc/s2_dsapi/cx_docu2.hxx
@@ -0,0 +1,233 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef DSAPI_CX_DOCU2_HXX
+#define DSAPI_CX_DOCU2_HXX
+
+// USED SERVICES
+ // BASE CLASSES
+#include <tokens/tkpcont2.hxx>
+ // COMPONENTS
+ // PARAMETERS
+#include <s2_dsapi/tk_xml.hxx>
+
+namespace csi
+{
+namespace dsapi
+{
+
+class Token_Receiver;
+
+
+/**
+@descr
+*/
+
+class Cx_Base : public ::TkpContext
+{
+ public:
+ virtual bool PassNewToken();
+ virtual TkpContext &
+ FollowUpContext();
+ protected:
+ // LIFECYCLE
+ Cx_Base(
+ Token_Receiver & o_rReceiver,
+ TkpContext & i_rFollowUpContext )
+ : rReceiver(o_rReceiver),
+ pFollowUpContext(&i_rFollowUpContext)
+ // pNewToken
+ { }
+ protected:
+ void SetToken(
+ DYN Token * let_dpToken )
+ { pNewToken = let_dpToken; }
+ void Handle_DocuSyntaxError(
+ CharacterSource & io_rText );
+
+ private:
+ // DATA
+ Token_Receiver & rReceiver;
+ TkpContext * pFollowUpContext;
+ Dyn<Token> pNewToken;
+};
+
+
+class Cx_EoHtml : public Cx_Base
+{
+ public:
+ // LIFECYCLE
+ Cx_EoHtml(
+ Token_Receiver & o_rReceiver,
+ TkpContext & i_rFollowUpContext )
+ : Cx_Base(o_rReceiver, i_rFollowUpContext) {}
+ // OPERATIONS
+ virtual void ReadCharChain(
+ CharacterSource & io_rText );
+ void SetIfIsStartOfParagraph(
+ bool i_bNextTokenProperty )
+ { bToken_IsStartOfParagraph = i_bNextTokenProperty; }
+
+ private:
+ bool bToken_IsStartOfParagraph;
+};
+
+class Cx_EoXmlConst : public Cx_Base
+{
+ public:
+ // LIFECYCLE
+ Cx_EoXmlConst(
+ Token_Receiver & o_rReceiver,
+ TkpContext & i_rFollowUpContext )
+ : Cx_Base(o_rReceiver, i_rFollowUpContext) {}
+ // OPERATIONS
+ virtual void ReadCharChain(
+ CharacterSource & io_rText );
+ void SetTokenId(
+ lux::Enum< Tok_XmlConst::E_TokenId >
+ i_eTokenId )
+ { eTokenId = i_eTokenId; }
+ private:
+ Tok_XmlConst::EV_TokenId
+ eTokenId;
+};
+
+class Cx_EoXmlLink_BeginTag : public Cx_Base
+{
+ public:
+ // LIFECYCLE
+ Cx_EoXmlLink_BeginTag(
+ Token_Receiver & o_rReceiver,
+ TkpContext & i_rFollowUpContext )
+ : Cx_Base(o_rReceiver, i_rFollowUpContext) {}
+ // OPERATIONS
+ virtual void ReadCharChain(
+ CharacterSource & io_rText );
+ void SetTokenId(
+ Tok_XmlLink_BeginTag::EV_TokenId
+ i_eTokenId )
+ { eTokenId = i_eTokenId; }
+ private:
+ Tok_XmlLink_BeginTag::EV_TokenId
+ eTokenId;
+};
+
+class Cx_EoXmlLink_EndTag : public Cx_Base
+{
+ public:
+ // LIFECYCLE
+ Cx_EoXmlLink_EndTag(
+ Token_Receiver & o_rReceiver,
+ TkpContext & i_rFollowUpContext )
+ : Cx_Base(o_rReceiver, i_rFollowUpContext) {}
+ // OPERATIONS
+ virtual void ReadCharChain(
+ CharacterSource & io_rText );
+ void SetTokenId(
+ Tok_XmlLink_EndTag::EV_TokenId
+ i_eTokenId )
+ { eTokenId = i_eTokenId; }
+ private:
+ Tok_XmlLink_EndTag::E_TokenId
+ eTokenId;
+};
+
+class Cx_EoXmlFormat_BeginTag : public Cx_Base
+{
+ public:
+ // LIFECYCLE
+ Cx_EoXmlFormat_BeginTag(
+ Token_Receiver & o_rReceiver,
+ TkpContext & i_rFollowUpContext )
+ : Cx_Base(o_rReceiver, i_rFollowUpContext) {}
+ // OPERATIONS
+ virtual void ReadCharChain(
+ CharacterSource & io_rText );
+ void SetTokenId(
+ lux::Enum< Tok_XmlFormat_BeginTag::E_TokenId >
+ i_eTokenId )
+ { eTokenId = i_eTokenId; }
+ private:
+ lux::Enum< Tok_XmlFormat_BeginTag::E_TokenId >
+ eTokenId;
+};
+
+class Cx_EoXmlFormat_EndTag : public Cx_Base
+{
+ public:
+ // LIFECYCLE
+ Cx_EoXmlFormat_EndTag(
+ Token_Receiver & o_rReceiver,
+ TkpContext & i_rFollowUpContext )
+ : Cx_Base(o_rReceiver, i_rFollowUpContext) {}
+ // OPERATIONS
+ virtual void ReadCharChain(
+ CharacterSource & io_rText );
+ void SetTokenId(
+ lux::Enum< Tok_XmlFormat_EndTag::E_TokenId >
+ i_eTokenId )
+ { eTokenId = i_eTokenId; }
+ private:
+ lux::Enum< Tok_XmlFormat_EndTag::E_TokenId >
+ eTokenId;
+};
+
+class Cx_CheckStar : public Cx_Base
+{
+ public:
+ // LIFECYCLE
+ Cx_CheckStar(
+ Token_Receiver & o_rReceiver,
+ TkpContext & i_rFollowUpContext )
+ : Cx_Base(o_rReceiver, i_rFollowUpContext),
+ bIsEnd(false), bEndTokenFound(false)
+ { }
+ void Set_End_FolloUpContext(
+ TkpContext & i_rEnd_FollowUpContext )
+ { pEnd_FollowUpContext = &i_rEnd_FollowUpContext; }
+
+ virtual void ReadCharChain(
+ CharacterSource & io_rText );
+ void SetIsEnd(
+ bool i_bIsEnd )
+ { bIsEnd = i_bIsEnd; }
+ virtual TkpContext &
+ FollowUpContext();
+ private:
+ TkpContext * pEnd_FollowUpContext;
+ bool bIsEnd;
+ bool bEndTokenFound;
+};
+
+
+} // namespace dsapi
+} // namespace csi
+
+
+
+#endif
+
diff --git a/autodoc/source/parser_i/inc/s2_dsapi/cx_dsapi.hxx b/autodoc/source/parser_i/inc/s2_dsapi/cx_dsapi.hxx
new file mode 100644
index 000000000000..567a7362f5a7
--- /dev/null
+++ b/autodoc/source/parser_i/inc/s2_dsapi/cx_dsapi.hxx
@@ -0,0 +1,123 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_CX_DSAPI_HXX
+#define ADC_CX_DSAPI_HXX
+
+// USED SERVICES
+ // BASE CLASSES
+#include <tokens/tkpcont2.hxx>
+ // COMPONENTS
+#include <cosv/tpl/dyn.hxx>
+#include <tokens/tkpstam2.hxx>
+ // PARAMETERS
+
+
+namespace csi
+{
+namespace dsapi
+{
+
+class Token_Receiver;
+class Token;
+
+class Cx_EoHtml;
+class Cx_EoXmlConst;
+class Cx_EoXmlLink_BeginTag;
+class Cx_EoXmlLink_EndTag;
+class Cx_EoXmlFormat_BeginTag;
+class Cx_EoXmlFormat_EndTag;
+class Cx_CheckStar;
+
+/**
+@descr
+*/
+class Context_Docu : public TkpDocuContext,
+ private StateMachineContext
+{
+ public:
+ // LIFECYCLE
+ Context_Docu(
+ Token_Receiver & o_rReceiver );
+ virtual void SetParentContext(
+ TkpContext & io_rParentContext,
+ const char * i_sMultiLineEndToken );
+
+ ~Context_Docu();
+ // OPERATIONS
+ virtual void ReadCharChain(
+ CharacterSource & io_rText );
+
+ virtual bool PassNewToken();
+ virtual void SetMode_IsMultiLine(
+ bool i_bTrue );
+
+ // INQUIRY
+ virtual TkpContext &
+ FollowUpContext();
+ private:
+ // SERVICE FUNCTIONS
+ virtual void PerformStatusFunction(
+ uintt i_nStatusSignal,
+ UINT16 i_nTokenId,
+ CharacterSource & io_rText );
+
+ void SetupStateMachine();
+
+ // DATA
+ StateMachin2 aStateMachine;
+ Token_Receiver * pReceiver;
+
+ // Contexts
+ TkpContext * pParentContext;
+ String sMultiLineEndToken;
+
+ Dyn<Cx_EoHtml> pCx_EoHtml;
+ Dyn<Cx_EoXmlConst> pCx_EoXmlConst;
+ Dyn<Cx_EoXmlLink_BeginTag>
+ pCx_EoXmlLink_BeginTag;
+ Dyn<Cx_EoXmlLink_EndTag>
+ pCx_EoXmlLink_EndTag;
+ Dyn<Cx_EoXmlFormat_BeginTag>
+ pCx_EoXmlFormat_BeginTag;
+ Dyn<Cx_EoXmlFormat_EndTag>
+ pCx_EoXmlFormat_EndTag;
+ Dyn<Cx_CheckStar> pCx_CheckStar;
+
+ // Temporary data, used during ReadCharChain()
+ Dyn<Token> pNewToken;
+ ::TkpContext * pFollowUpContext;
+ bool bIsMultiline;
+};
+
+
+} // namespace dsapi
+} // namespace csi
+
+
+#endif
+
diff --git a/autodoc/source/parser_i/inc/s2_dsapi/docu_pe2.hxx b/autodoc/source/parser_i/inc/s2_dsapi/docu_pe2.hxx
new file mode 100644
index 000000000000..2d1757bbb308
--- /dev/null
+++ b/autodoc/source/parser_i/inc/s2_dsapi/docu_pe2.hxx
@@ -0,0 +1,174 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_DSAPI_DOCU_PE2_HXX
+#define ADC_DSAPI_DOCU_PE2_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <s2_dsapi/tokintpr.hxx>
+ // COMPONENTS
+ // PARAMETERS
+
+class ParserInfo;
+
+namespace ary
+{
+namespace doc
+{
+ class OldIdlDocu;
+}
+
+namespace inf
+{
+ class DocuToken;
+} // namespace info
+} // namespace ary
+
+
+
+namespace csi
+{
+namespace dsapi
+{
+
+
+class Token;
+class DT_AtTag;
+
+class SapiDocu_PE : public TokenInterpreter
+{
+ public:
+ SapiDocu_PE(
+ ParserInfo & io_rPositionInfo );
+ ~SapiDocu_PE();
+
+ void ProcessToken(
+ DYN csi::dsapi::Token &
+ let_drToken );
+
+ virtual void Process_AtTag(
+ const Tok_AtTag & i_rToken );
+ virtual void Process_HtmlTag(
+ const Tok_HtmlTag & i_rToken );
+ virtual void Process_XmlConst(
+ const Tok_XmlConst &
+ i_rToken );
+ virtual void Process_XmlLink_BeginTag(
+ const Tok_XmlLink_BeginTag &
+ i_rToken );
+ virtual void Process_XmlLink_EndTag(
+ const Tok_XmlLink_EndTag &
+ i_rToken );
+ virtual void Process_XmlFormat_BeginTag(
+ const Tok_XmlFormat_BeginTag &
+ i_rToken );
+ virtual void Process_XmlFormat_EndTag(
+ const Tok_XmlFormat_EndTag &
+ i_rToken );
+ virtual void Process_Word(
+ const Tok_Word & i_rToken );
+ virtual void Process_Comma();
+ virtual void Process_DocuEnd();
+ virtual void Process_EOL();
+ virtual void Process_White();
+
+
+ DYN ary::doc::OldIdlDocu *
+ ReleaseJustParsedDocu();
+
+ bool IsComplete() const;
+
+ private:
+ enum E_State
+ {
+ e_none = 0,
+ st_short,
+ st_description,
+ st_attags,
+ st_complete
+ };
+
+ typedef void ( SapiDocu_PE::*F_TokenAdder )( DYN ary::inf::DocuToken & let_drNewToken );
+
+ void AddDocuToken2Void(
+ DYN ary::inf::DocuToken &
+ let_drNewToken );
+ void AddDocuToken2Short(
+ DYN ary::inf::DocuToken &
+ let_drNewToken );
+ void AddDocuToken2Description(
+ DYN ary::inf::DocuToken &
+ let_drNewToken );
+ void AddDocuToken2Deprecated(
+ DYN ary::inf::DocuToken &
+ let_drNewToken );
+ void AddDocuToken2CurAtTag(
+ DYN ary::inf::DocuToken &
+ let_drNewToken );
+ void SetCurParameterAtTagName(
+ DYN ary::inf::DocuToken &
+ let_drNewToken );
+ void SetCurSeeAlsoAtTagLinkText(
+ DYN ary::inf::DocuToken &
+ let_drNewToken );
+ void SetCurSeeAlsoAtTagLinkText_2(
+ DYN ary::inf::DocuToken &
+ let_drNewToken );
+ void SetCurSeeAlsoAtTagLinkText_3(
+ DYN ary::inf::DocuToken &
+ let_drNewToken );
+ void SetCurSinceAtTagVersion(
+ DYN ary::inf::DocuToken &
+ let_drNewToken );
+ void AddDocuToken2SinceAtTag(
+ DYN ary::inf::DocuToken &
+ let_drNewToken );
+
+ // DATA
+ Dyn<ary::doc::OldIdlDocu>
+ pDocu;
+ E_State eState;
+ ParserInfo * pPositionInfo;
+ F_TokenAdder fCurTokenAddFunction;
+
+ Dyn<DT_AtTag> pCurAtTag;
+ String sCurDimAttribute;
+ StreamStr sCurAtSeeType_byXML;
+};
+
+} // namespace dsapi
+} // namespace csi
+
+
+// IMPLEMENTATION
+
+
+#endif
+
diff --git a/autodoc/source/parser_i/inc/s2_dsapi/dsapitok.hxx b/autodoc/source/parser_i/inc/s2_dsapi/dsapitok.hxx
new file mode 100644
index 000000000000..e4311cf90e24
--- /dev/null
+++ b/autodoc/source/parser_i/inc/s2_dsapi/dsapitok.hxx
@@ -0,0 +1,65 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef DSAPI_DSAPITOK_HXX
+#define DSAPI_DSAPITOK_HXX
+
+// USED SERVICES
+ // BASE CLASSES
+#include <tokens/token2.hxx>
+ // COMPONENTS
+ // PARAMETERS
+
+
+namespace csi
+{
+namespace dsapi
+{
+
+
+class TokenInterpreter;
+
+
+class Token : public TextToken
+{
+ public:
+ // LIFECYCLE
+ virtual ~Token() {}
+
+ // OPERATIONS
+ virtual void Trigger(
+ TokenInterpreter & io_rInterpreter ) const = 0;
+};
+
+
+} // namespace dsapi
+} // namespace csi
+
+
+#endif
+
+
diff --git a/autodoc/source/parser_i/inc/s2_dsapi/tk_atag2.hxx b/autodoc/source/parser_i/inc/s2_dsapi/tk_atag2.hxx
new file mode 100644
index 000000000000..c62f78f614fd
--- /dev/null
+++ b/autodoc/source/parser_i/inc/s2_dsapi/tk_atag2.hxx
@@ -0,0 +1,88 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef DSAPI_TK_ATAG2_HXX
+#define DSAPI_TK_ATAG2_HXX
+
+// USED SERVICES
+ // BASE CLASSES
+#include <s2_dsapi/dsapitok.hxx>
+ // COMPONENTS
+ // PARAMETERS
+#include <luxenum.hxx>
+
+namespace csi
+{
+namespace dsapi
+{
+
+
+class Tok_AtTag : public Token
+{
+ public:
+ // TYPE
+ enum E_TokenId
+ {
+ e_none = 0,
+ author = 1,
+ see = 2,
+ param = 3,
+ e_return = 4,
+ e_throw = 5,
+ example = 6,
+ deprecated = 7,
+ suspicious = 8,
+ missing = 9,
+ incomplete = 10,
+ version = 11,
+ guarantees = 12,
+ exception = 13,
+ since = 14
+ };
+ typedef lux::Enum<E_TokenId> EV_TokenId;
+
+ // Spring and Fall
+ Tok_AtTag(
+ EV_TokenId i_eTag )
+ : eTag(i_eTag) {}
+ // OPERATIONS
+ virtual void Trigger(
+ TokenInterpreter & io_rInterpreter ) const;
+ // INQUIRY
+ virtual const char* Text() const;
+ E_TokenId Id() const { return eTag; }
+
+ private:
+ EV_TokenId eTag;
+};
+
+} // namespace dsapi
+} // namespace csi
+
+
+#endif
+
diff --git a/autodoc/source/parser_i/inc/s2_dsapi/tk_docw2.hxx b/autodoc/source/parser_i/inc/s2_dsapi/tk_docw2.hxx
new file mode 100644
index 000000000000..769ec51a3f90
--- /dev/null
+++ b/autodoc/source/parser_i/inc/s2_dsapi/tk_docw2.hxx
@@ -0,0 +1,121 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef DSAPI_TK_DOCW2_HXX
+#define DSAPI_TK_DOCW2_HXX
+
+// USED SERVICES
+ // BASE CLASSES
+#include <s2_dsapi/dsapitok.hxx>
+ // COMPONENTS
+ // PARAMETERS
+
+namespace csi
+{
+namespace dsapi
+{
+
+
+class Tok_Word : public Token
+{
+ public:
+ // Spring and Fall
+ Tok_Word(
+ const char * i_sText )
+ : sText(i_sText) {}
+ // OPERATIONS
+ virtual void Trigger(
+ TokenInterpreter & io_rInterpreter ) const;
+ // INQUIRY
+ virtual const char* Text() const;
+
+ private:
+ // DATA
+ String sText;
+};
+
+class Tok_Comma : public Token
+{
+ public:
+ // OPERATIONS
+ virtual void Trigger(
+ TokenInterpreter & io_rInterpreter ) const;
+ // INQUIRY
+ virtual const char* Text() const;
+};
+
+class Tok_DocuEnd : public Token
+{
+ public:
+ // Spring and Fall
+ // OPERATIONS
+ virtual void Trigger(
+ TokenInterpreter & io_rInterpreter ) const;
+ // INQUIRY
+ virtual const char* Text() const;
+};
+
+class Tok_EOL : public Token
+{
+ public:
+ // Spring and Fall
+ // OPERATIONS
+ virtual void Trigger(
+ TokenInterpreter & io_rInterpreter ) const;
+ // INQUIRY
+ virtual const char* Text() const;
+};
+
+class Tok_EOF : public Token
+{
+ public:
+ // Spring and Fall
+ // OPERATIONS
+ virtual void Trigger(
+ TokenInterpreter & io_rInterpreter ) const;
+ // INQUIRY
+ virtual const char* Text() const;
+};
+
+class Tok_White : public Token
+{
+ public:
+ // OPERATIONS
+ virtual void Trigger(
+ TokenInterpreter & io_rInterpreter ) const;
+ // INQUIRY
+ virtual const char* Text() const;
+};
+
+
+
+} // namespace dsapi
+} // namespace csi
+
+
+#endif
+
diff --git a/autodoc/source/parser_i/inc/s2_dsapi/tk_html.hxx b/autodoc/source/parser_i/inc/s2_dsapi/tk_html.hxx
new file mode 100644
index 000000000000..687a117d3b88
--- /dev/null
+++ b/autodoc/source/parser_i/inc/s2_dsapi/tk_html.hxx
@@ -0,0 +1,73 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef DSAPI_TK_HTML_HXX
+#define DSAPI_TK_HTML_HXX
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <s2_dsapi/dsapitok.hxx>
+ // COMPONENTS
+ // PARAMETERS
+
+namespace csi
+{
+namespace dsapi
+{
+
+
+class Tok_HtmlTag : public Token
+{
+ public:
+ // Spring and Fall
+ Tok_HtmlTag(
+ const char * i_sTag,
+ bool i_bIsParagraphStarter )
+ : sTag(i_sTag),
+ bIsParagraphStarter(i_bIsParagraphStarter)
+ {}
+ // OPERATIONS
+ virtual void Trigger(
+ TokenInterpreter & io_rInterpreter ) const;
+ // INQUIRY
+ virtual const char* Text() const;
+ bool IsParagraphStarter() const
+ { return bIsParagraphStarter; }
+
+ private:
+ String sTag;
+ bool bIsParagraphStarter;
+};
+
+
+} // namespace dsapi
+} // namespace csi
+
+
+#endif
+
diff --git a/autodoc/source/parser_i/inc/s2_dsapi/tk_xml.hxx b/autodoc/source/parser_i/inc/s2_dsapi/tk_xml.hxx
new file mode 100644
index 000000000000..08002ce9e1ad
--- /dev/null
+++ b/autodoc/source/parser_i/inc/s2_dsapi/tk_xml.hxx
@@ -0,0 +1,201 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef DSAPI_TK_XML_HXX
+#define DSAPI_TK_XML_HXX
+
+// USED SERVICES
+ // BASE CLASSES
+#include <s2_dsapi/dsapitok.hxx>
+ // COMPONENTS
+ // PARAMETERS
+#include <luxenum.hxx>
+
+
+namespace csi
+{
+namespace dsapi
+{
+
+
+class Tok_XmlTag : public Token
+{
+ public:
+};
+
+class Tok_XmlConst : public Tok_XmlTag
+{
+ public:
+ // TYPE
+ enum E_TokenId
+ {
+ e_none = 0,
+ e_true = 1,
+ e_false = 2,
+ e_null = 3,
+ e_void = 4
+ };
+ typedef lux::Enum<E_TokenId> EV_TokenId;
+
+ // Spring and Fall
+ Tok_XmlConst(
+ EV_TokenId i_eTag )
+ : eTag(i_eTag) {}
+ // OPERATIONS
+ virtual void Trigger(
+ TokenInterpreter & io_rInterpreter ) const;
+ // INQUIRY
+ virtual const char* Text() const;
+ E_TokenId Id() const { return eTag; }
+
+ private:
+ // DATA
+ EV_TokenId eTag;
+};
+
+class Tok_XmlLink_Tag : public Tok_XmlTag
+{
+ public:
+ // TYPE
+ enum E_TokenId
+ {
+ e_none = 0,
+ e_const = 1,
+ member = 2,
+ type = 3
+ };
+ typedef lux::Enum<E_TokenId> EV_TokenId;
+};
+
+class Tok_XmlLink_BeginTag : public Tok_XmlLink_Tag
+{
+ public:
+ // Spring and Fall
+ Tok_XmlLink_BeginTag(
+ EV_TokenId i_eTag,
+ const String & i_sScope,
+ const String & i_sDim )
+ : eTag(i_eTag),
+ sScope(i_sScope),
+ sDim(i_sDim) {}
+ // OPERATIONS
+ virtual void Trigger(
+ TokenInterpreter & io_rInterpreter ) const;
+ // INQUIRY
+ virtual const char* Text() const;
+ E_TokenId Id() const { return eTag; }
+ const String & Scope() const { return sScope; }
+ const String & Dim() const { return sDim; }
+
+ private:
+ // DATA
+ EV_TokenId eTag;
+ String sScope;
+ String sDim;
+};
+
+class Tok_XmlLink_EndTag : public Tok_XmlLink_Tag
+{
+ public:
+ // Spring and Fall
+ Tok_XmlLink_EndTag(
+ EV_TokenId i_eTag )
+ : eTag(i_eTag) {}
+ // OPERATIONS
+ virtual void Trigger(
+ TokenInterpreter & io_rInterpreter ) const;
+ // INQUIRY
+ virtual const char* Text() const;
+ E_TokenId Id() const { return eTag; }
+
+ private:
+ // DATA
+ EV_TokenId eTag;
+};
+
+class Tok_XmlFormat_Tag : public Tok_XmlTag
+{
+ public:
+ // TYPE
+ enum E_TokenId
+ {
+ e_none = 0,
+ code = 1,
+ listing = 2,
+ atom = 3
+ };
+ typedef lux::Enum<E_TokenId> EV_TokenId;
+};
+
+class Tok_XmlFormat_BeginTag : public Tok_XmlFormat_Tag
+{
+ public:
+ // Spring and Fall
+ Tok_XmlFormat_BeginTag(
+ EV_TokenId i_eTag,
+ const String & i_sDim )
+ : eTag(i_eTag),
+ sDim(i_sDim) {}
+ // OPERATIONS
+ virtual void Trigger(
+ TokenInterpreter & io_rInterpreter ) const;
+ // INQUIRY
+ virtual const char* Text() const;
+ E_TokenId Id() const { return eTag; }
+ const String & Dim() const { return sDim; }
+
+ private:
+ // DATA
+ EV_TokenId eTag;
+ String sDim;
+};
+
+class Tok_XmlFormat_EndTag : public Tok_XmlFormat_Tag
+{
+ public:
+ // Spring and Fall
+ Tok_XmlFormat_EndTag(
+ EV_TokenId i_eTag )
+ : eTag(i_eTag) {}
+ // OPERATIONS
+ virtual void Trigger(
+ TokenInterpreter & io_rInterpreter ) const;
+ // INQUIRY
+ virtual const char* Text() const;
+ E_TokenId Id() const { return eTag; }
+
+ private:
+ // DATA
+ EV_TokenId eTag;
+};
+
+
+} // namespace dsapi
+} // namespace csi
+
+#endif
+
diff --git a/autodoc/source/parser_i/inc/s2_dsapi/tokintpr.hxx b/autodoc/source/parser_i/inc/s2_dsapi/tokintpr.hxx
new file mode 100644
index 000000000000..2132f2688f31
--- /dev/null
+++ b/autodoc/source/parser_i/inc/s2_dsapi/tokintpr.hxx
@@ -0,0 +1,94 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_DSAPI_TOKINTPR_HXX
+#define ADC_DSAPI_TOKINTPR_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+ // COMPONENTS
+ // PARAMETERS
+
+namespace csi
+{
+namespace dsapi
+{
+
+
+class Tok_AtTag;
+class Tok_XmlConst;
+class Tok_XmlLink_BeginTag;
+class Tok_XmlLink_EndTag;
+class Tok_XmlFormat_BeginTag;
+class Tok_XmlFormat_EndTag;
+class Tok_Word;
+class Tok_HtmlTag;
+
+class TokenInterpreter
+{
+ public:
+ virtual ~TokenInterpreter() {}
+
+ virtual void Process_AtTag(
+ const Tok_AtTag & i_rToken ) = 0;
+ virtual void Process_HtmlTag(
+ const Tok_HtmlTag & i_rToken ) = 0;
+ virtual void Process_XmlConst(
+ const Tok_XmlConst &
+ i_rToken ) = 0;
+ virtual void Process_XmlLink_BeginTag(
+ const Tok_XmlLink_BeginTag &
+ i_rToken ) = 0;
+ virtual void Process_XmlLink_EndTag(
+ const Tok_XmlLink_EndTag &
+ i_rToken ) = 0;
+ virtual void Process_XmlFormat_BeginTag(
+ const Tok_XmlFormat_BeginTag &
+ i_rToken ) = 0;
+ virtual void Process_XmlFormat_EndTag(
+ const Tok_XmlFormat_EndTag &
+ i_rToken ) = 0;
+ virtual void Process_Word(
+ const Tok_Word & i_rToken ) = 0;
+ virtual void Process_Comma() = 0;
+ virtual void Process_DocuEnd() = 0;
+ virtual void Process_EOL() = 0;
+ virtual void Process_White() = 0;
+};
+
+
+
+// IMPLEMENTATION
+
+
+} // namespace dsapi
+} // namespace csi
+
+#endif
+
diff --git a/autodoc/source/parser_i/inc/s2_dsapi/tokrecv.hxx b/autodoc/source/parser_i/inc/s2_dsapi/tokrecv.hxx
new file mode 100644
index 000000000000..cf9a0e7daa51
--- /dev/null
+++ b/autodoc/source/parser_i/inc/s2_dsapi/tokrecv.hxx
@@ -0,0 +1,60 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef DSAPI_TOKRECV_HXX
+#define DSAPI_TOKRECV_HXX
+
+// USED SERVICES
+ // BASE CLASSES
+ // COMPONENTS
+ // PARAMETERS
+
+namespace csi
+{
+namespace dsapi
+{
+
+
+class Token;
+/**
+@descr
+*/
+class Token_Receiver
+{
+ public:
+ virtual ~Token_Receiver() {}
+ virtual void Receive(
+ DYN Token & let_drToken ) = 0;
+ virtual void Increment_CurLine() = 0;
+};
+
+
+} // namespace dsapi
+} // namespace csi
+
+#endif
+
diff --git a/autodoc/source/parser_i/inc/s2_luidl/cx_idlco.hxx b/autodoc/source/parser_i/inc/s2_luidl/cx_idlco.hxx
new file mode 100644
index 000000000000..b1871cdc62d2
--- /dev/null
+++ b/autodoc/source/parser_i/inc/s2_luidl/cx_idlco.hxx
@@ -0,0 +1,98 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef LUIDL_CX_IDLCO_HXX
+#define LUIDL_CX_IDLCO_HXX
+
+// USED SERVICES
+ // BASE CLASSES
+#include <tokens/tkpcont2.hxx>
+ // COMPONENTS
+#include <tokens/tkpstam2.hxx>
+ // PARAMETERS
+
+
+namespace csi
+{
+namespace uidl
+{
+
+class Token_Receiver;
+class Token;
+
+/**
+*/
+class Context_UidlCode : public TkpContext,
+ private StateMachineContext
+{
+ public:
+ // LIFECYCLE
+ Context_UidlCode(
+ Token_Receiver & o_rReceiver,
+ DYN TkpDocuContext &
+ let_drContext_Docu );
+ ~Context_UidlCode();
+ // OPERATORS
+
+ // OPERATIONS
+ virtual void ReadCharChain(
+ CharacterSource & io_rText );
+ virtual bool PassNewToken();
+
+ // INQUIRY
+ virtual TkpContext &
+ FollowUpContext();
+ private:
+ // SERVICE FUNCTIONS
+ void PerformStatusFunction(
+ uintt i_nStatusSignal,
+ UINT16 i_nTokenId,
+ CharacterSource & io_rText );
+ void SetupStateMachine();
+
+ // DATA
+ StateMachin2 aStateMachine;
+ Token_Receiver * pReceiver;
+
+ // Contexts
+ Dyn<TkpDocuContext> pDocuContext;
+
+ Dyn<TkpContext> dpContext_MLComment;
+ Dyn<TkpContext> dpContext_SLComment;
+ Dyn<TkpContext> dpContext_Preprocessor;
+ Dyn<TkpContext> dpContext_Assignment;
+
+ // Temporary data, used during ReadCharChain()
+ Dyn<Token> pNewToken;
+ ::TkpContext * pFollowUpContext;
+};
+
+
+} // namespace uidl
+} // namespace csi
+
+#endif
diff --git a/autodoc/source/parser_i/inc/s2_luidl/cx_sub.hxx b/autodoc/source/parser_i/inc/s2_luidl/cx_sub.hxx
new file mode 100644
index 000000000000..1c16b28a83c5
--- /dev/null
+++ b/autodoc/source/parser_i/inc/s2_luidl/cx_sub.hxx
@@ -0,0 +1,131 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_LUIDL_CX_SUB_HXX
+#define ADC_LUIDL_CX_SUB_HXX
+
+// USED SERVICES
+ // BASE CLASSES
+#include <tokens/tkpcont2.hxx>
+ // COMPONENTS
+ // PARAMETERS
+
+#include "uidl_tok.hxx"
+
+namespace csi
+{
+namespace uidl
+{
+
+class Token_Receiver;
+class Token;
+
+
+class Cx_Base : public ::TkpContext
+{
+ public:
+ virtual bool PassNewToken();
+ virtual TkpContext &
+ FollowUpContext();
+ protected:
+ // LIFECYCLE
+ Cx_Base(
+ Token_Receiver & o_rReceiver,
+ TkpContext & i_rFollowUpContext )
+ : rReceiver(o_rReceiver),
+ pFollowUpContext(&i_rFollowUpContext),
+ pNewToken()
+ {}
+ protected:
+ void SetToken(
+ DYN Token * let_dpToken )
+ { pNewToken = let_dpToken; }
+ Token_Receiver & Receiver() { return rReceiver; }
+
+ private:
+ // DATA
+ Token_Receiver & rReceiver;
+ TkpContext * pFollowUpContext;
+ Dyn<Token> pNewToken;
+};
+
+
+
+/**
+@descr
+*/
+
+class Context_MLComment : public Cx_Base
+{
+ public:
+ Context_MLComment(
+ Token_Receiver & o_rReceiver,
+ TkpContext & i_rFollowUpContext )
+ : Cx_Base(o_rReceiver, i_rFollowUpContext) {}
+ virtual void ReadCharChain(
+ CharacterSource & io_rText );
+};
+
+class Context_SLComment : public Cx_Base
+{
+ public:
+ Context_SLComment(
+ Token_Receiver & o_rReceiver,
+ TkpContext & i_rFollowUpContext )
+ : Cx_Base(o_rReceiver, i_rFollowUpContext) {}
+ virtual void ReadCharChain(
+ CharacterSource & io_rText );
+};
+
+class Context_Praeprocessor : public Cx_Base
+{
+ public:
+ Context_Praeprocessor(
+ Token_Receiver & o_rReceiver,
+ TkpContext & i_rFollowUpContext )
+ : Cx_Base(o_rReceiver, i_rFollowUpContext) {}
+ virtual void ReadCharChain(
+ CharacterSource & io_rText );
+};
+
+class Context_Assignment : public Cx_Base
+{
+ public:
+ Context_Assignment(
+ Token_Receiver & o_rReceiver,
+ TkpContext & i_rFollowUpContext )
+ : Cx_Base(o_rReceiver, i_rFollowUpContext) {}
+ virtual void ReadCharChain(
+ CharacterSource & io_rText );
+};
+
+
+} // namespace uidl
+} // namespace csi
+
+#endif
+
diff --git a/autodoc/source/parser_i/inc/s2_luidl/distrib.hxx b/autodoc/source/parser_i/inc/s2_luidl/distrib.hxx
new file mode 100644
index 000000000000..398cfa041ca0
--- /dev/null
+++ b/autodoc/source/parser_i/inc/s2_luidl/distrib.hxx
@@ -0,0 +1,272 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef LUIDL_DISTRIB_HXX
+#define LUIDL_DISTRIB_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <s2_luidl/tokrecv.hxx>
+#include <s2_dsapi/tokrecv.hxx>
+#include <s2_luidl/tokproct.hxx>
+ // COMPONENTS
+ // PARAMETERS
+
+
+class ParserInfo;
+
+namespace ary
+{
+ class Repository;
+
+namespace doc
+{
+ class OldIdlDocu;
+} // namespace inf
+} // namespace ary)
+
+
+
+namespace csi
+{
+namespace dsapi
+{
+ class Token_Receiver;
+ class SapiDocu_PE;
+}
+
+
+
+namespace uidl
+{
+
+
+typedef std::vector< DYN Token * > TokenQueue;
+typedef TokenQueue::iterator TokenIterator;
+
+class TokenParser_Uidl;
+class UnoIDL_PE;
+class Token;
+
+
+class TokenDistributor : private TokenProcessing_Types
+
+{
+ public:
+ TokenDistributor(
+ ary::Repository & io_rRepository,
+ ParserInfo & io_rParserInfo );
+ void SetTokenProvider(
+ TokenParser_Uidl & io_rTokenSource );
+ void SetTopParseEnvironment(
+ UnoIDL_PE & io_pTopParseEnvironment );
+ ~TokenDistributor();
+
+
+ void Reset() { aDocumentation.Reset(); }
+ /** calls pTokenSource->GetNextToken() and checks the incoming tokens, until a
+ usable token is found. This token will be forwarded to
+ pTopParseEnv;
+ */
+ void TradeToken();
+
+ csi::uidl::Token_Receiver &
+ CodeTokens_Receiver();
+ csi::dsapi::Token_Receiver &
+ DocuTokens_Receiver();
+
+ /** Used from PE_File, if there is a docu to get without
+ an environment to push (this is the case for modules).
+ */
+ DYN ary::doc::OldIdlDocu *
+ ReleaseLastParsedDocu()
+ { return aDocumentation.ReleaseLastParsedDocu(); }
+
+ /** Used from PE_File, if the term "published" was parsed.
+ The next opened parse environment will be set to be published
+ (call ->UnoIDL_PE::SetPublished()).
+ */
+ void Set_PublishedOn()
+ { aProcessingData.Set_PublishedOn(); }
+
+
+ private:
+ class Documentation;
+ class ProcessingData;
+ friend class ProcessingData;
+
+ class ProcessingData : public csi::uidl::Token_Receiver,
+ private TokenProcessing_Types
+ {
+ public:
+ ProcessingData(
+ ary::Repository & io_rRepository,
+ Documentation & i_rDocuProcessor,
+ ParserInfo & io_rParserInfo );
+ ~ProcessingData();
+ void SetTopParseEnvironment(
+ UnoIDL_PE & io_pTopParseEnvironment );
+
+
+ /** is called from pTokenSource before finishing a ::TokenParse2::GetNextToken()
+ call and passes the just parsed token to this class.
+ */
+ virtual void Receive(
+ DYN csi::uidl::Token &
+ let_drToken );
+ virtual void Increment_CurLine();
+
+ void ProcessCurToken();
+
+ UnoIDL_PE & CurEnvironment() const;
+ bool NextTokenExists() const;
+ void Set_PublishedOn()
+ { bPublishedRecentlyOn = true; }
+
+ private:
+ typedef uintt TokenQ_Position;
+ typedef std::pair< UnoIDL_PE *, TokenQ_Position > EnvironmentInfo;
+ typedef std::vector< EnvironmentInfo > EnvironmentStack;
+
+ void AcknowledgeResult();
+ const csi::uidl::Token &
+ CurToken() const;
+ UnoIDL_PE & CurEnv() const;
+ UnoIDL_PE & PushEnv() const;
+ uintt CurTokenPosition() const;
+ uintt CurEnv_TriedTokenPosition() const;
+ void DecrementTryCount();
+
+ EnvironmentStack aEnvironments;
+ TokenQueue aTokenQueue;
+ TokenIterator itCurToken;
+ TokenProcessing_Result
+ aCurResult;
+ uintt nTryCount;
+ bool bFinished;
+ ary::Repository &
+ rRepository;
+ ParserInfo & rParserInfo;
+ Documentation * pDocuProcessor;
+ bool bPublishedRecentlyOn;
+ };
+
+ class Documentation : public csi::dsapi::Token_Receiver
+ {
+ public:
+ Documentation(
+ ParserInfo & io_rParserInfo);
+ ~Documentation();
+
+ void Reset() { bIsPassedFirstDocu = false; }
+
+ virtual void Receive(
+ DYN csi::dsapi::Token &
+ let_drToken );
+ virtual void Increment_CurLine();
+ DYN ary::doc::OldIdlDocu *
+ ReleaseLastParsedDocu()
+ { return pMostRecentDocu.Release(); }
+ private:
+ Dyn<csi::dsapi::SapiDocu_PE>
+ pDocuParseEnv;
+ ParserInfo & rParserInfo;
+ Dyn<ary::doc::OldIdlDocu>
+ pMostRecentDocu;
+ bool bIsPassedFirstDocu;
+ };
+
+ // DATA
+ TokenParser_Uidl * pTokenSource;
+ Documentation aDocumentation;
+ ProcessingData aProcessingData;
+};
+
+
+
+// IMPLEMENTATION
+
+inline void
+TokenDistributor::SetTokenProvider( TokenParser_Uidl & io_rTokenSource )
+ { pTokenSource = &io_rTokenSource; }
+
+inline void
+TokenDistributor::SetTopParseEnvironment( UnoIDL_PE & io_pTopParseEnvironment )
+ { aProcessingData.SetTopParseEnvironment(io_pTopParseEnvironment); }
+
+inline csi::uidl::Token_Receiver &
+TokenDistributor::CodeTokens_Receiver()
+ { return aProcessingData; }
+
+inline csi::dsapi::Token_Receiver &
+TokenDistributor::DocuTokens_Receiver()
+ { return aDocumentation; }
+
+inline const csi::uidl::Token &
+TokenDistributor::ProcessingData::CurToken() const
+{
+ csv_assert( itCurToken != aTokenQueue.end() );
+ csv_assert( *itCurToken != 0 );
+ return *(*itCurToken);
+}
+
+inline UnoIDL_PE &
+TokenDistributor::ProcessingData::CurEnv() const
+{
+ csv_assert( aEnvironments.size() > 0 );
+ csv_assert( aEnvironments.back().first != 0 );
+ return *aEnvironments.back().first;
+}
+
+inline UnoIDL_PE &
+TokenDistributor::ProcessingData::PushEnv() const
+{
+ csv_assert( aCurResult.pEnv2Push != 0 );
+ return *aCurResult.pEnv2Push;
+}
+
+inline uintt
+TokenDistributor::ProcessingData::CurTokenPosition() const
+{
+ return itCurToken - aTokenQueue.begin();
+}
+
+inline uintt
+TokenDistributor::ProcessingData::CurEnv_TriedTokenPosition() const
+{
+ csv_assert( aEnvironments.size() > 0 );
+ return aEnvironments.back().second;
+}
+
+
+} // namespace uidl
+} // namespace csi
+
+#endif
+
diff --git a/autodoc/source/parser_i/inc/s2_luidl/parsenv2.hxx b/autodoc/source/parser_i/inc/s2_luidl/parsenv2.hxx
new file mode 100644
index 000000000000..129721f0b9ff
--- /dev/null
+++ b/autodoc/source/parser_i/inc/s2_luidl/parsenv2.hxx
@@ -0,0 +1,142 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef LUIDL_PARSENV2_HXX
+#define LUIDL_PARSENV2_HXX
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <s2_luidl/tokproct.hxx>
+ // COMPONENTS
+#include <s2_luidl/semnode.hxx>
+ // PARAMETERS
+#include <ary/idl/i_types4idl.hxx>
+#include <ary/idl/i_module.hxx>
+
+
+
+class ParserInfo;
+
+namespace ary
+{
+ class QualifiedName;
+ class Repository;
+
+namespace doc
+{
+ class OldIdlDocu;
+}
+
+namespace idl
+{
+ class CodeEntity;
+}
+}
+
+
+
+namespace csi
+{
+namespace uidl
+{
+
+
+class Token;
+class SemanticNode;
+
+
+class UnoIDL_PE : virtual protected TokenProcessing_Types
+{
+ public:
+ virtual ~UnoIDL_PE();
+
+ virtual void EstablishContacts(
+ UnoIDL_PE * io_pParentPE,
+ ary::Repository &
+ io_rRepository,
+ TokenProcessing_Result &
+ o_rResult );
+// virtual void EstablishContacts(
+// UnoIDL_PE * io_pParentPE,
+// ary::idl::Gate &
+// io_rGate,
+// TokenProcessing_Result &
+// o_rResult );
+ virtual void Enter(
+ E_EnvStackAction i_eWayOfEntering );
+ virtual void Leave(
+ E_EnvStackAction i_eWayOfLeaving );
+ virtual void ProcessToken(
+ const Token & i_rToken ) = 0;
+
+ void SetDocu(
+ DYN ary::doc::OldIdlDocu *
+ let_dpDocu );
+ void SetPublished();
+ void SetOptional();
+ void PassDocuAt(
+ ary::idl::CodeEntity &
+ io_rCe );
+
+ UnoIDL_PE * Parent() const { return aMyNode.Parent(); }
+
+ void SetResult(
+ E_TokenDone i_eDone,
+ E_EnvStackAction i_eWhat2DoWithEnvStack,
+ UnoIDL_PE * i_pParseEnv2Push = 0 )
+ { aMyNode.SetTokenResult( i_eDone, i_eWhat2DoWithEnvStack, i_pParseEnv2Push ); }
+ virtual const ary::idl::Module &
+ CurNamespace() const;
+ virtual const ParserInfo &
+ ParseInfo() const;
+ ary::idl::Gate & Gate() const { return aMyNode.AryGate(); }
+ TokenProcessing_Result &
+ TokenResult() const { return aMyNode.TokenResult(); }
+ DYN ary::doc::OldIdlDocu *
+ ReleaseDocu() { return pDocu.Release(); }
+ protected:
+ UnoIDL_PE();
+ ary::Repository & MyRepository() { csv_assert(pRepository != 0);
+ return *pRepository; }
+ private:
+ virtual void InitData();
+ virtual void TransferData() = 0;
+ virtual void ReceiveData();
+
+ SemanticNode aMyNode;
+ Dyn<ary::doc::OldIdlDocu>
+ pDocu;
+ ary::Repository * pRepository;
+};
+
+
+
+
+} // namespace uidl
+} // namespace csi
+#endif
diff --git a/autodoc/source/parser_i/inc/s2_luidl/pe_attri.hxx b/autodoc/source/parser_i/inc/s2_luidl/pe_attri.hxx
new file mode 100644
index 000000000000..069919562b2e
--- /dev/null
+++ b/autodoc/source/parser_i/inc/s2_luidl/pe_attri.hxx
@@ -0,0 +1,135 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_UIDL_PE_ATTRI_HXX
+#define ADC_UIDL_PE_ATTRI_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+
+#include <s2_luidl/parsenv2.hxx>
+#include <s2_luidl/pestate.hxx>
+ // COMPONENTS
+#include <ary/idl/i_property.hxx>
+ // PARAMETERS
+#include <ary/idl/i_gate.hxx>
+
+
+namespace ary
+{
+ namespace idl
+ {
+ class Attribute;
+ }
+}
+
+namespace csi
+{
+namespace uidl
+{
+
+
+class PE_Variable;
+class PE_Type;
+
+class PE_Attribute : public UnoIDL_PE,
+ public ParseEnvState
+{
+ public:
+ typedef ary::idl::Ce_id Ce_id;
+ typedef ary::idl::Type_id Type_id;
+
+ PE_Attribute(
+ const Ce_id & i_rCurOwner );
+
+ virtual void EstablishContacts(
+ UnoIDL_PE * io_pParentPE,
+ ary::Repository &
+ io_rRepository,
+ TokenProcessing_Result &
+ o_rResult );
+ virtual ~PE_Attribute();
+
+ virtual void ProcessToken(
+ const Token & i_rToken );
+
+ virtual void Process_Identifier(
+ const TokIdentifier &
+ i_rToken );
+ virtual void Process_Stereotype(
+ const TokStereotype &
+ i_rToken );
+ virtual void Process_MetaType(
+ const TokMetaType & i_rToken );
+ virtual void Process_Punctuation(
+ const TokPunctuation &
+ i_rToken );
+ virtual void Process_Raises();
+ virtual void Process_Default();
+
+ private:
+ enum E_State
+ {
+ e_none,
+ e_start,
+ in_variable,
+ expect_end,
+ in_raise_std, /// before 'get', 'set', ';' or '}'
+ in_get,
+ in_set
+ };
+
+ virtual void InitData();
+ virtual void ReceiveData();
+ virtual void TransferData();
+ virtual UnoIDL_PE & MyPE();
+
+ // DATA
+ E_State eState;
+ const Ce_id * pCurOwner;
+
+ Dyn<PE_Variable> pPE_Variable;
+ Dyn<PE_Type> pPE_Exception;
+
+ // object-data
+ ary::idl::Attribute *
+ pCurAttribute;
+ Type_id nCurParsedType;
+ String sCurParsedName;
+ bool bReadOnly;
+ bool bBound;
+};
+
+
+} // namespace uidl
+} // namespace csi
+
+
+#endif
+
diff --git a/autodoc/source/parser_i/inc/s2_luidl/pe_const.hxx b/autodoc/source/parser_i/inc/s2_luidl/pe_const.hxx
new file mode 100644
index 000000000000..dea5edfa4e98
--- /dev/null
+++ b/autodoc/source/parser_i/inc/s2_luidl/pe_const.hxx
@@ -0,0 +1,145 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef LUIDL_PE_CONST_HXX
+#define LUIDL_PE_CONST_HXX
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <s2_luidl/parsenv2.hxx>
+#include <s2_luidl/pestate.hxx>
+ // COMPONENTS
+ // PARAMETERS
+
+
+namespace udm {
+class Agent_Struct;
+} // namespace udm
+
+
+namespace csi
+{
+namespace uidl
+{
+
+class ConstantsGroup;
+
+class PE_Type;
+class PE_Value;
+
+class PE_Constant : public UnoIDL_PE,
+ public ParseEnvState
+{
+ public:
+ PE_Constant();
+ virtual void EstablishContacts(
+ UnoIDL_PE * io_pParentPE,
+ ary::Repository &
+ io_rRepository,
+ TokenProcessing_Result &
+ o_rResult );
+ ~PE_Constant();
+
+ virtual void ProcessToken(
+ const Token & i_rToken );
+
+ virtual void Process_Identifier(
+ const TokIdentifier &
+ i_rToken );
+ virtual void Process_Punctuation(
+ const TokPunctuation &
+ i_rToken );
+ virtual void Process_Stereotype(
+ const TokStereotype &
+ i_rToken );
+
+ private:
+ enum E_State
+ {
+ e_none,
+ expect_name,
+ expect_curl_bracket_open,
+ expect_const,
+ expect_value,
+ expect_finish,
+ e_STATES_MAX
+ };
+ enum E_TokenType
+ {
+ tt_stereotype,
+ tt_identifier,
+ tt_punctuation,
+ tt_MAX
+ };
+ typedef void (PE_Constant::*F_TOK)(const char *);
+
+
+ void CallHandler(
+ const char * i_sTokenText,
+ E_TokenType i_eTokenType );
+
+ void On_expect_name_Identifier(const char * i_sText);
+ void On_expect_curl_bracket_open_Punctuation(const char * i_sText);
+ void On_expect_const_Stereotype(const char * i_sText);
+ void On_expect_const_Punctuation(const char * i_sText);
+ void On_expect_value_Identifier(const char * i_sText);
+ void On_expect_finish_Punctuation(const char * i_sText);
+ void On_Default(const char * );
+
+ void EmptySingleConstData();
+ void CreateSingleConstant();
+
+ virtual void InitData();
+ virtual void ReceiveData();
+ virtual void TransferData();
+ virtual UnoIDL_PE & MyPE();
+
+ // DATA
+ static F_TOK aDispatcher[e_STATES_MAX][tt_MAX];
+
+ E_State eState;
+
+ String sData_Name;
+ ary::idl::Ce_id nDataId;
+
+ Dyn<PE_Type> pPE_Type;
+ ary::idl::Type_id nType;
+
+ Dyn<PE_Value> pPE_Value;
+ String sName;
+ String sAssignment;
+};
+
+
+
+} // namespace uidl
+} // namespace csi
+
+
+#endif
+
diff --git a/autodoc/source/parser_i/inc/s2_luidl/pe_enum2.hxx b/autodoc/source/parser_i/inc/s2_luidl/pe_enum2.hxx
new file mode 100644
index 000000000000..1706f7edb9c6
--- /dev/null
+++ b/autodoc/source/parser_i/inc/s2_luidl/pe_enum2.hxx
@@ -0,0 +1,131 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_UIDL_PE_ENUM2_HXX
+#define ADC_UIDL_PE_ENUM2_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <s2_luidl/parsenv2.hxx>
+#include <s2_luidl/pestate.hxx>
+ // COMPONENTS
+ // PARAMETERS
+
+
+
+namespace csi
+{
+namespace uidl
+{
+
+// class Enum;
+
+class PE_Value;
+
+class PE_Enum : public UnoIDL_PE,
+ public ParseEnvState
+{
+ public:
+ PE_Enum();
+ virtual void EstablishContacts(
+ UnoIDL_PE * io_pParentPE,
+ ary::Repository & io_rRepository,
+ TokenProcessing_Result &
+ o_rResult );
+ ~PE_Enum();
+
+ virtual void ProcessToken(
+ const Token & i_rToken );
+
+ virtual void Process_Identifier(
+ const TokIdentifier &
+ i_rToken );
+ virtual void Process_Punctuation(
+ const TokPunctuation &
+ i_rToken );
+
+ private:
+ enum E_State
+ {
+ e_none,
+ expect_name,
+ expect_curl_bracket_open,
+ expect_value,
+ expect_finish,
+ e_STATES_MAX
+ };
+ enum E_TokenType
+ {
+ tt_identifier,
+ tt_punctuation,
+ tt_MAX
+ };
+ typedef void (PE_Enum::*F_TOK)(const char *);
+
+
+ void CallHandler(
+ const char * i_sTokenText,
+ E_TokenType i_eTokenType );
+
+ void On_expect_name_Identifier(const char * i_sText);
+ void On_expect_curl_bracket_open_Punctuation(const char * i_sText);
+ void On_expect_value_Punctuation(const char * i_sText);
+ void On_expect_value_Identifier(const char * i_sText);
+ void On_expect_finish_Punctuation(const char * i_sText);
+ void On_Default(const char * );
+
+ void EmptySingleValueData();
+ void CreateSingleValue();
+
+ virtual void InitData();
+ virtual void ReceiveData();
+ virtual void TransferData();
+ virtual UnoIDL_PE & MyPE();
+
+ // DATA
+ static F_TOK aDispatcher[e_STATES_MAX][tt_MAX];
+
+ E_State eState;
+
+ String sData_Name;
+ ary::idl::Ce_id nDataId;
+
+ Dyn<PE_Value> pPE_Value;
+ String sName;
+ String sAssignment;
+};
+
+
+
+} // namespace uidl
+} // namespace csi
+
+
+#endif
+
diff --git a/autodoc/source/parser_i/inc/s2_luidl/pe_evalu.hxx b/autodoc/source/parser_i/inc/s2_luidl/pe_evalu.hxx
new file mode 100644
index 000000000000..510df9ac5da1
--- /dev/null
+++ b/autodoc/source/parser_i/inc/s2_luidl/pe_evalu.hxx
@@ -0,0 +1,127 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef LUIDL_PE_EVALU_HXX
+#define LUIDL_PE_EVALU_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <s2_luidl/parsenv2.hxx>
+#include <s2_luidl/pestate.hxx>
+ // COMPONENTS
+ // PARAMETERS
+
+
+namespace udm {
+class Agent_Struct;
+} // namespace udm
+
+
+namespace csi
+{
+namespace uidl
+{
+
+class PE_Value : public UnoIDL_PE,
+ public ParseEnvState
+{
+ public:
+ PE_Value(
+ String & o_rName,
+ String & o_rAssignment,
+ bool i_bIsConst );
+ virtual void EstablishContacts(
+ UnoIDL_PE * io_pParentPE,
+ ary::Repository &
+ io_rRepository,
+ TokenProcessing_Result &
+ o_rResult );
+ ~PE_Value();
+
+ virtual void ProcessToken(
+ const Token & i_rToken );
+
+ virtual void Process_Identifier(
+ const TokIdentifier &
+ i_rToken );
+ virtual void Process_Punctuation(
+ const TokPunctuation &
+ i_rToken );
+ virtual void Process_Assignment(
+ const TokAssignment &
+ i_rToken );
+ private:
+ enum E_State
+ {
+ e_none = 0,
+ expect_name,
+ got_name,
+ e_STATES_MAX
+ };
+ enum E_TokenType /// @ATTENTION Do not change existing values (except of tt_MAX) !!! Else array-indices will break.
+ {
+ tt_identifier = 0,
+ tt_punctuation = 1,
+ tt_assignment = 2,
+ tt_MAX
+ };
+ typedef void (PE_Value::*F_TOK)(const char *);
+
+
+ void CallHandler(
+ const char * i_sTokenText,
+ E_TokenType i_eTokenType );
+
+ void On_expect_name_Identifier(const char * i_sText);
+ void On_got_name_Punctuation(const char * i_sText);
+ void On_got_name_Assignment(const char * i_sText);
+ void On_Default(const char * );
+
+ virtual void InitData();
+ virtual void TransferData();
+ virtual UnoIDL_PE & MyPE();
+
+ bool IsConst() const { return bIsConst; }
+
+ static F_TOK aDispatcher[e_STATES_MAX][tt_MAX];
+
+ E_State eState;
+ String * pName;
+ String * pAssignment;
+ bool bIsConst;
+};
+
+
+
+} // namespace uidl
+} // namespace csi
+
+
+#endif
+
diff --git a/autodoc/source/parser_i/inc/s2_luidl/pe_excp.hxx b/autodoc/source/parser_i/inc/s2_luidl/pe_excp.hxx
new file mode 100644
index 000000000000..a0e7fa62d8f2
--- /dev/null
+++ b/autodoc/source/parser_i/inc/s2_luidl/pe_excp.hxx
@@ -0,0 +1,259 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef LUIDL_PE_EXCP_HXX
+#define LUIDL_PE_EXCP_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <s2_luidl/parsenv2.hxx>
+#include <s2_luidl/pestate.hxx>
+ // COMPONENTS
+#include <s2_luidl/semnode.hxx>
+#include <ary/qualiname.hxx>
+ // PARAMETERS
+
+
+
+namespace csi
+{
+namespace prl
+{
+ class TNamespace;
+}
+}
+
+
+
+namespace csi
+{
+namespace uidl
+{
+
+
+class Exception;
+class StructElement;
+class PE_StructElement;
+class PE_Type;
+
+
+class PE_Exception : public UnoIDL_PE
+{
+ public:
+ PE_Exception();
+ virtual void EstablishContacts(
+ UnoIDL_PE * io_pParentPE,
+ ary::Repository & io_rRepository,
+ TokenProcessing_Result &
+ o_rResult );
+ ~PE_Exception();
+ virtual void ProcessToken(
+ const Token & i_rToken );
+
+ private:
+ struct S_Work
+ {
+ S_Work();
+
+ void InitData();
+ void Prepare_PE_QualifiedName();
+ void Prepare_PE_Element();
+ void Data_Set_Name(
+ const char * i_sName );
+ // DATA
+ String sData_Name;
+ bool bIsPreDeclaration;
+ ary::idl::Ce_id nCurStruct;
+
+ Dyn<PE_StructElement>
+ pPE_Element;
+ ary::idl::Ce_id nCurParsed_ElementRef;
+ Dyn<PE_Type> pPE_Type;
+ ary::idl::Type_id nCurParsed_Base;
+ };
+
+ struct S_Stati;
+ class PE_StructState;
+ friend struct S_Stati;
+ friend class PE_StructState;
+
+
+ class PE_StructState : public ParseEnvState
+ {
+ public:
+
+ protected:
+ PE_StructState(
+ PE_Exception & i_rStruct )
+ : rStruct(i_rStruct) {}
+ void MoveState(
+ ParseEnvState & i_rState ) const;
+ void SetResult(
+ E_TokenDone i_eDone,
+ E_EnvStackAction i_eWhat2DoWithEnvStack,
+ UnoIDL_PE * i_pParseEnv2Push = 0 ) const
+ { rStruct.SetResult(i_eDone, i_eWhat2DoWithEnvStack, i_pParseEnv2Push); }
+
+ S_Stati & Stati() const { return *rStruct.pStati; }
+ S_Work & Work() const { return rStruct.aWork; }
+ PE_Exception & PE() const { return rStruct; }
+
+ private:
+ virtual UnoIDL_PE & MyPE();
+ // DATA
+ PE_Exception & rStruct;
+ };
+
+ class State_None : public PE_StructState
+ {
+ public:
+ State_None(
+ PE_Exception & i_rStruct )
+ : PE_StructState(i_rStruct) {}
+ };
+ class State_WaitForName : public PE_StructState
+ { // -> Name
+ public:
+ State_WaitForName(
+ PE_Exception & i_rStruct )
+ : PE_StructState(i_rStruct) {}
+ virtual void Process_Identifier(
+ const TokIdentifier &
+ i_rToken );
+ };
+ class State_GotName : public PE_StructState
+ { // -> : { ;
+ public:
+ State_GotName(
+ PE_Exception & i_rStruct )
+ : PE_StructState(i_rStruct) {}
+ virtual void Process_Punctuation(
+ const TokPunctuation &
+ i_rToken );
+ };
+ class State_WaitForBase : public PE_StructState
+ { // -> Base
+ public:
+ State_WaitForBase(
+ PE_Exception & i_rStruct )
+ : PE_StructState(i_rStruct) {}
+ virtual void On_SubPE_Left();
+ };
+ class State_GotBase : public PE_StructState
+ { // -> {
+ public:
+ State_GotBase(
+ PE_Exception & i_rStruct )
+ : PE_StructState(i_rStruct) {}
+ virtual void Process_Punctuation(
+ const TokPunctuation &
+ i_rToken );
+ };
+ class State_WaitForElement : public PE_StructState
+ { // -> Typ }
+ public:
+ State_WaitForElement(
+ PE_Exception & i_rStruct )
+ : PE_StructState(i_rStruct) {}
+ virtual void Process_Identifier(
+ const TokIdentifier &
+ i_rToken );
+ virtual void Process_NameSeparator();
+ virtual void Process_BuiltInType(
+ const TokBuiltInType &
+ i_rToken );
+ virtual void Process_TypeModifier(
+ const TokTypeModifier &
+ i_rToken );
+ virtual void Process_Punctuation(
+ const TokPunctuation &
+ i_rToken );
+// virtual void On_SubPE_Left();
+ };
+ class State_WaitForFinish : public PE_StructState
+ { // -> ;
+ public:
+ State_WaitForFinish(
+ PE_Exception & i_rStruct )
+ : PE_StructState(i_rStruct) {}
+ virtual void Process_Punctuation(
+ const TokPunctuation &
+ i_rToken );
+ };
+
+ struct S_Stati
+ {
+ S_Stati(
+ PE_Exception & io_rStruct );
+ void SetState(
+ ParseEnvState & i_rNextState )
+ { pCurStatus = &i_rNextState; }
+
+ State_None aNone;
+ State_WaitForName aWaitForName;
+ State_GotName aGotName;
+ State_WaitForBase aWaitForBase;
+ State_GotBase aGotBase;
+ State_WaitForElement
+ aWaitForElement;
+ State_WaitForFinish aWaitForFinish;
+
+ ParseEnvState * pCurStatus;
+ };
+
+ virtual void InitData();
+ virtual void TransferData();
+ virtual void ReceiveData();
+
+ public:
+
+ void store_Exception();
+
+ private:
+
+ S_Stati & Stati() { return *pStati; }
+ S_Work & Work() { return aWork; }
+
+ // DATA
+ S_Work aWork;
+ Dyn<S_Stati> pStati;
+};
+
+
+inline void
+PE_Exception::PE_StructState::MoveState(
+ ParseEnvState & i_rState ) const
+ { rStruct.Stati().SetState(i_rState); }
+
+} // namespace uidl
+} // namespace csi
+
+
+#endif
+
diff --git a/autodoc/source/parser_i/inc/s2_luidl/pe_file2.hxx b/autodoc/source/parser_i/inc/s2_luidl/pe_file2.hxx
new file mode 100644
index 000000000000..970f57b94573
--- /dev/null
+++ b/autodoc/source/parser_i/inc/s2_luidl/pe_file2.hxx
@@ -0,0 +1,140 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef LUIDL_PE_FILE2_HXX
+#define LUIDL_PE_FILE2_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <s2_luidl/parsenv2.hxx>
+#include <s2_luidl/pestate.hxx>
+ // COMPONENTS
+ // PARAMETERS
+
+
+namespace ary
+{
+namespace idl
+{
+class Module;
+} // namespace idl
+} // namespace ary
+
+
+namespace csi
+{
+namespace uidl
+{
+
+class TokenDistributor;
+class PE_Service;
+class PE_Singleton;
+class PE_Interface;
+class PE_Struct;
+class PE_Exception;
+class PE_Constant;
+class PE_Enum;
+class PE_Typedef;
+
+
+class PE_File : public UnoIDL_PE,
+ public ParseEnvState
+{
+ public:
+ PE_File(
+ TokenDistributor & i_rTokenAdmin,
+ const ParserInfo & i_parseInfo );
+ virtual void EstablishContacts(
+ UnoIDL_PE * io_pParentPE,
+ ary::Repository & io_rRepository,
+ TokenProcessing_Result &
+ o_rResult );
+ ~PE_File();
+
+ virtual void ProcessToken(
+ const Token & i_rToken );
+
+ virtual void Process_Identifier(
+ const TokIdentifier &
+ i_rToken );
+ virtual void Process_Punctuation(
+ const TokPunctuation &
+ i_rToken );
+ virtual void Process_MetaType(
+ const TokMetaType & i_rToken );
+ virtual void Process_Stereotype(
+ const TokStereotype &
+ i_rToken );
+ virtual void Process_Default();
+
+ private:
+ enum E_State
+ {
+ e_none,
+ e_std,
+ wait_for_module,
+ wait_for_module_bracket,
+ wait_for_module_semicolon,
+ in_sub_pe,
+ on_default
+ };
+
+ virtual void InitData();
+ virtual void TransferData();
+ virtual void ReceiveData();
+ virtual UnoIDL_PE & MyPE();
+ virtual const ary::idl::Module &
+ CurNamespace() const;
+ virtual const ParserInfo &
+ ParseInfo() const;
+ // DATA
+ TokenDistributor * pTokenAdmin;
+ Dyn<PE_Service> pPE_Service;
+ Dyn<PE_Singleton> pPE_Singleton;
+ Dyn<PE_Interface> pPE_Interface;
+ Dyn<PE_Struct> pPE_Struct;
+ Dyn<PE_Exception> pPE_Exception;
+ Dyn<PE_Constant> pPE_Constant;
+ Dyn<PE_Enum> pPE_Enum;
+ Dyn<PE_Typedef> pPE_Typedef;
+
+ const ary::idl::Module *
+ pCurNamespace;
+ const ParserInfo * pParseInfo;
+
+ E_State eState;
+ uintt nBracketCount_inDefMode;
+};
+
+
+} // namespace uidl
+} // namespace csi
+
+#endif
+
diff --git a/autodoc/source/parser_i/inc/s2_luidl/pe_func2.hxx b/autodoc/source/parser_i/inc/s2_luidl/pe_func2.hxx
new file mode 100644
index 000000000000..8ea280c7ee01
--- /dev/null
+++ b/autodoc/source/parser_i/inc/s2_luidl/pe_func2.hxx
@@ -0,0 +1,167 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_UIDL_PE_FUNC2_HXX
+#define ADC_UIDL_PE_FUNC2_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+// #include <ary/idl/i_gate.hxx>
+// #include <ary/idl/ip_ce.hxx>
+#include <s2_luidl/parsenv2.hxx>
+#include <s2_luidl/pestate.hxx>
+ // COMPONENTS
+#include <ary/idl/i_param.hxx>
+ // PARAMETERS
+
+namespace ary
+{
+ namespace idl
+ {
+ class Function;
+ }
+}
+
+
+namespace csi
+{
+namespace uidl
+{
+
+class PE_Type;
+class PE_Variable;
+
+class PE_Function : public UnoIDL_PE,
+ public ParseEnvState
+{
+ public:
+ typedef ary::idl::Ce_id RParent;
+ typedef ary::idl::Ce_id RFunction;
+
+ enum E_Constructor { constructor };
+
+ /// Constructor for interfaces.
+ PE_Function(
+ const RParent & i_rCurInterface );
+
+ /// Constructor for single interface based services.
+ PE_Function(
+ const RParent & i_rCurService,
+ E_Constructor i_eCtorMarker );
+
+ virtual void EstablishContacts(
+ UnoIDL_PE * io_pParentPE,
+ ary::Repository & io_rRepository,
+ TokenProcessing_Result &
+ o_rResult );
+ virtual ~PE_Function();
+
+ virtual void ProcessToken(
+ const Token & i_rToken );
+
+ virtual void Process_Stereotype(
+ const TokStereotype &
+ i_rToken );
+ virtual void Process_Identifier(
+ const TokIdentifier &
+ i_rToken );
+ virtual void Process_Punctuation(
+ const TokPunctuation &
+ i_rToken );
+ virtual void Process_BuiltInType(
+ const TokBuiltInType &
+ i_rToken );
+ virtual void Process_ParameterHandling(
+ const TokParameterHandling &
+ i_rToken );
+ virtual void Process_Raises();
+ virtual void Process_Default();
+
+ private:
+ enum E_State
+ {
+ e_none,
+ e_start,
+ in_return_type,
+ expect_name,
+ expect_params_list,
+ expect_parameter,
+ expect_parameter_variable,
+ in_parameter_variable,
+ expect_parameter_separator,
+ params_finished,
+ expect_exceptions_list,
+ expect_exception,
+ in_exception,
+ expect_exception_separator,
+ exceptions_finished
+ };
+
+ void GoIntoReturnType();
+ void GoIntoParameterVariable();
+ void GoIntoException();
+ void OnDefault();
+
+ virtual void InitData();
+ virtual void ReceiveData();
+ virtual void TransferData();
+ virtual UnoIDL_PE & MyPE();
+
+ // DATA
+ E_State eState;
+
+ String sData_Name;
+ ary::idl::Type_id nData_ReturnType;
+ bool bData_Oneway;
+ ary::idl::Function *
+ pCurFunction;
+
+ const RParent * pCurParent;
+
+ Dyn<PE_Type> pPE_Type;
+ ary::idl::Type_id nCurParsedType; // ReturnType or Exception
+
+ String sName;
+
+ Dyn<PE_Variable> pPE_Variable;
+ ary::idl::E_ParameterDirection
+ eCurParsedParam_Direction;
+ ary::idl::Type_id nCurParsedParam_Type;
+ String sCurParsedParam_Name;
+ bool bIsForConstructors;
+};
+
+
+
+} // namespace uidl
+} // namespace csi
+
+
+#endif
+
diff --git a/autodoc/source/parser_i/inc/s2_luidl/pe_iface.hxx b/autodoc/source/parser_i/inc/s2_luidl/pe_iface.hxx
new file mode 100644
index 000000000000..83a441eebbc4
--- /dev/null
+++ b/autodoc/source/parser_i/inc/s2_luidl/pe_iface.hxx
@@ -0,0 +1,184 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_UIDL_PE_IFACE_HXX
+#define ADC_UIDL_PE_IFACE_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <s2_luidl/parsenv2.hxx>
+#include <s2_luidl/pestate.hxx>
+ // COMPONENTS
+ // PARAMETERS
+
+namespace ary
+{
+namespace idl
+{
+ class Interface;
+}
+}
+
+namespace csi
+{
+namespace uidl
+{
+
+
+
+class PE_Function;
+class PE_Attribute;
+class PE_Type;
+
+class PE_Interface : public UnoIDL_PE,
+ public ParseEnvState
+{
+ public:
+ PE_Interface();
+ virtual ~PE_Interface();
+
+ virtual void EstablishContacts(
+ UnoIDL_PE * io_pParentPE,
+ ary::Repository & io_rRepository,
+ TokenProcessing_Result &
+ o_rResult );
+ virtual void ProcessToken(
+ const Token & i_rToken );
+
+ virtual void Process_MetaType(
+ const TokMetaType & i_rToken );
+ virtual void Process_Identifier(
+ const TokIdentifier &
+ i_rToken );
+ virtual void Process_Punctuation(
+ const TokPunctuation &
+ i_rToken );
+ virtual void Process_NameSeparator();
+ virtual void Process_BuiltInType(
+ const TokBuiltInType &
+ i_rToken );
+ virtual void Process_TypeModifier(
+ const TokTypeModifier &
+ i_rToken );
+ virtual void Process_Stereotype(
+ const TokStereotype &
+ i_rToken );
+ virtual void Process_Default();
+
+ private:
+ enum E_State /// @ATTENTION Do not change existing values (except of e_STATES_MAX) !!! Else array-indices will break.
+ {
+ e_none = 0,
+ need_uik,
+ uik,
+ need_ident,
+ ident,
+ need_interface,
+ need_name,
+ wait_for_base,
+ in_base, // in header, after ":"
+ need_curlbr_open,
+ e_std,
+ in_function,
+ in_attribute,
+ need_finish,
+ in_base_interface, // in body, after "interface"
+ e_STATES_MAX
+ };
+ enum E_TokenType /// @ATTENTION Do not change existing values (except of tt_MAX) !!! Else array-indices will break.
+ {
+ tt_metatype = 0,
+ tt_identifier = 1,
+ tt_punctuation = 2,
+ tt_startoftype = 3,
+ tt_stereotype = 4,
+ tt_MAX
+ };
+ typedef void (PE_Interface::*F_TOK)(const char *);
+
+
+ void On_need_uik_MetaType(const char * i_sText);
+ void On_uik_Identifier(const char * i_sText);
+ void On_uik_Punctuation(const char * i_sText);
+ void On_need_ident_MetaType(const char * i_sText);
+ void On_ident_Identifier(const char * i_sText);
+ void On_ident_Punctuation(const char * i_sText);
+ void On_need_interface_MetaType(const char * i_sText);
+ void On_need_name_Identifer(const char * i_sText);
+ void On_wait_for_base_Punctuation(const char * i_sText);
+ void On_need_curlbr_open_Punctuation(const char * i_sText);
+ void On_std_Metatype(const char * i_sText);
+ void On_std_Punctuation(const char * i_sText);
+ void On_std_Stereotype(const char * i_sText);
+ void On_std_GotoFunction(const char * i_sText);
+ void On_std_GotoAttribute(const char * i_sText);
+ void On_std_GotoBaseInterface(const char * i_sText);
+ void On_need_finish_Punctuation(const char * i_sText);
+ void On_Default(const char * i_sText);
+
+ void CallHandler(
+ const char * i_sTokenText,
+ E_TokenType i_eTokenType );
+
+ virtual void InitData();
+ virtual void TransferData();
+ virtual void ReceiveData();
+ virtual UnoIDL_PE & MyPE();
+
+ void store_Interface();
+
+ // DATA
+ static F_TOK aDispatcher[e_STATES_MAX][tt_MAX];
+
+ E_State eState;
+ String sData_Name;
+ bool bIsPreDeclaration;
+ ary::idl::Interface *
+ pCurInterface;
+ ary::idl::Ce_id nCurInterface;
+
+ Dyn<PE_Function> pPE_Function;
+ Dyn<PE_Attribute> pPE_Attribute;
+
+ Dyn<PE_Type> pPE_Type;
+ ary::idl::Type_id nCurParsed_Base;
+ bool bOptionalMember;
+};
+
+
+
+// IMPLEMENTATION
+
+
+} // namespace uidl
+} // namespace csi
+
+
+#endif
+
diff --git a/autodoc/source/parser_i/inc/s2_luidl/pe_modul.hxx b/autodoc/source/parser_i/inc/s2_luidl/pe_modul.hxx
new file mode 100644
index 000000000000..00bc7bcaa5be
--- /dev/null
+++ b/autodoc/source/parser_i/inc/s2_luidl/pe_modul.hxx
@@ -0,0 +1,63 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef LUIDL_PE_MODUL_HXX
+#define LUIDL_PE_MODUL_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <semantic/semnode.hxx>
+ // COMPONENTS
+ // PARAMETERS
+
+
+namespace csi
+{
+namespace uidl
+{
+
+
+
+class PE_Module : public ::ParseEnvironment
+{
+ public:
+
+ virtual void Enter(
+ E_EnvStackAction i_eWayOfEntering );
+ virtual void Leave(
+ E_EnvStackAction i_eWayOfLeaving );
+
+ private:
+};
+
+
+} // namespace uidl
+} // namespace csi
+
+
diff --git a/autodoc/source/parser_i/inc/s2_luidl/pe_property.hxx b/autodoc/source/parser_i/inc/s2_luidl/pe_property.hxx
new file mode 100644
index 000000000000..b5969d471a0f
--- /dev/null
+++ b/autodoc/source/parser_i/inc/s2_luidl/pe_property.hxx
@@ -0,0 +1,123 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_UIDL_PE_PROPERTY_HXX
+#define ADC_UIDL_PE_PROPERTY_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+
+#include <s2_luidl/parsenv2.hxx>
+#include <s2_luidl/pestate.hxx>
+ // COMPONENTS
+#include <ary/idl/i_property.hxx>
+ // PARAMETERS
+#include <ary/idl/i_gate.hxx>
+
+
+namespace csi
+{
+namespace uidl
+{
+
+
+class PE_Variable;
+
+class PE_Property : public UnoIDL_PE,
+ public ParseEnvState
+{
+ public:
+ typedef ary::idl::Ce_id Ce_id;
+ typedef ary::idl::Type_id Type_id;
+ typedef ary::idl::Property::Stereotypes Stereotypes;
+
+
+ PE_Property(
+ const Ce_id & i_rCurOwner );
+
+ virtual void EstablishContacts(
+ UnoIDL_PE * io_pParentPE,
+ ary::Repository &
+ io_rRepository,
+ TokenProcessing_Result &
+ o_rResult );
+ virtual ~PE_Property();
+
+ virtual void ProcessToken(
+ const Token & i_rToken );
+
+ virtual void Process_Stereotype(
+ const TokStereotype &
+ i_rToken );
+ virtual void Process_MetaType(
+ const TokMetaType & i_rToken );
+ virtual void Process_Punctuation(
+ const TokPunctuation &
+ i_rToken );
+ virtual void Process_Default();
+
+ void PresetOptional() { bIsOptional = true; }
+ void PresetStereotypes(
+ Stereotypes::E_Flags
+ i_eFlag )
+ { aStereotypes.Set_Flag(i_eFlag); }
+ private:
+ enum E_State
+ {
+ e_none,
+ e_start,
+ expect_variable,
+ in_variable
+ };
+
+ virtual void InitData();
+ virtual void ReceiveData();
+ virtual void TransferData();
+ virtual UnoIDL_PE & MyPE();
+
+ // DATA
+ E_State eState;
+ const Ce_id * pCurOwner;
+
+ Dyn<PE_Variable> pPE_Variable;
+
+ // object-data
+ Type_id nCurParsedType;
+ String sCurParsedName;
+ bool bIsOptional;
+ Stereotypes aStereotypes;
+};
+
+
+} // namespace uidl
+} // namespace csi
+
+
+#endif
+
diff --git a/autodoc/source/parser_i/inc/s2_luidl/pe_selem.hxx b/autodoc/source/parser_i/inc/s2_luidl/pe_selem.hxx
new file mode 100644
index 000000000000..792d6940b327
--- /dev/null
+++ b/autodoc/source/parser_i/inc/s2_luidl/pe_selem.hxx
@@ -0,0 +1,121 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef LUIDL_PE_SELEM_HXX
+#define LUIDL_PE_SELEM_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <s2_luidl/parsenv2.hxx>
+#include <s2_luidl/pestate.hxx>
+ // COMPONENTS
+ // PARAMETERS
+#include <ary/idl/i_gate.hxx>
+
+
+namespace udm {
+class Agent_Struct;
+} // namespace udm
+
+
+namespace csi
+{
+namespace uidl
+{
+
+class PE_Type;
+class StructElement;
+class Struct;
+
+class PE_StructElement : public UnoIDL_PE,
+ public ParseEnvState
+{
+ public:
+ typedef ary::idl::Ce_id RStructElement;
+ typedef ary::idl::Ce_id RStruct;
+
+ PE_StructElement( /// Use for Struct-elements
+ RStructElement & o_rResult,
+ const RStruct & i_rCurStruct,
+ const String & i_rCurStructTemplateParam );
+ PE_StructElement( /// Use for Exception-elements
+ RStructElement & o_rResult,
+ const RStruct & i_rCurExc );
+ virtual void EstablishContacts(
+ UnoIDL_PE * io_pParentPE,
+ ary::Repository & io_rRepository,
+ TokenProcessing_Result &
+ o_rResult );
+ ~PE_StructElement();
+
+ virtual void ProcessToken(
+ const Token & i_rToken );
+
+ virtual void Process_Default();
+ virtual void Process_Identifier(
+ const TokIdentifier &
+ i_rToken );
+ virtual void Process_Punctuation(
+ const TokPunctuation &
+ i_rToken );
+
+ private:
+ enum E_State
+ {
+ e_none,
+ expect_type,
+ expect_name,
+ expect_finish
+ };
+
+ virtual void InitData();
+ virtual void TransferData();
+ virtual UnoIDL_PE & MyPE();
+
+ ary::idl::Type_id lhf_FindTemplateParamType() const;
+
+ // DATA
+ E_State eState;
+ RStructElement * pResult;
+ const RStruct * pCurStruct;
+ bool bIsExceptionElement;
+
+ Dyn<PE_Type> pPE_Type;
+ ary::idl::Type_id nType;
+ String sName;
+ const String * pCurStructTemplateParam;
+};
+
+
+
+} // namespace uidl
+} // namespace csi
+
+
+#endif
diff --git a/autodoc/source/parser_i/inc/s2_luidl/pe_servi.hxx b/autodoc/source/parser_i/inc/s2_luidl/pe_servi.hxx
new file mode 100644
index 000000000000..2b0ebf25a0ed
--- /dev/null
+++ b/autodoc/source/parser_i/inc/s2_luidl/pe_servi.hxx
@@ -0,0 +1,149 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_UIDL_PE_SERVI_HXX
+#define ADC_UIDL_PE_SERVI_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <s2_luidl/parsenv2.hxx>
+#include <s2_luidl/pestate.hxx>
+ // COMPONENTS
+ // PARAMETERS
+
+namespace ary
+{
+ namespace idl
+ {
+ class Service;
+ class SglIfcService;
+ }
+}
+
+namespace csi
+{
+namespace uidl
+{
+
+class PE_Property;
+class PE_Type;
+class PE_Function;
+
+
+class PE_Service : public UnoIDL_PE,
+ public ParseEnvState
+{
+ public:
+ PE_Service();
+ virtual ~PE_Service();
+
+ virtual void EstablishContacts(
+ UnoIDL_PE * io_pParentPE,
+ ary::Repository & io_rRepository,
+ TokenProcessing_Result &
+ o_rResult );
+ virtual void ProcessToken(
+ const Token & i_rToken );
+
+ virtual void Process_MetaType(
+ const TokMetaType & i_rToken );
+ virtual void Process_Identifier(
+ const TokIdentifier &
+ i_rToken );
+ virtual void Process_Punctuation(
+ const TokPunctuation &
+ i_rToken );
+ virtual void Process_Stereotype(
+ const TokStereotype &
+ i_rToken );
+ virtual void Process_Needs();
+ virtual void Process_Observes();
+ virtual void Process_Default();
+
+ private:
+ void On_Default();
+
+ enum E_State
+ {
+ e_none = 0,
+ need_name,
+ need_curlbr_open,
+ e_std,
+ in_property,
+ in_ifc_type,
+ in_service_type,
+ expect_ifc_separator,
+ expect_service_separator,
+ at_ignore,
+ need_finish,
+ need_base_interface, /// After ":".
+ need_curlbr_open_sib, /// After base interface in single interface based service.
+ e_std_sib, /// Standard in single interface based service.
+ e_STATES_MAX
+ };
+
+ virtual void InitData();
+ virtual void TransferData();
+ virtual void ReceiveData();
+ virtual UnoIDL_PE & MyPE();
+
+ void StartProperty();
+
+
+ // DATA
+ E_State eState;
+ String sData_Name;
+ bool bIsPreDeclaration;
+ ary::idl::Service * pCurService;
+ ary::idl::SglIfcService *
+ pCurSiService;
+ ary::idl::Ce_id nCurService; // Needed for PE_Attribute.
+
+ Dyn<PE_Property> pPE_Property;
+ ary::idl::Ce_id nCurParsed_Property;
+
+ Dyn<PE_Type> pPE_Type;
+ ary::idl::Type_id nCurParsed_Type;
+
+ Dyn<PE_Function> pPE_Constructor;
+
+ bool bOptionalMember;
+};
+
+
+
+// IMPLEMENTATION
+
+
+} // namespace uidl
+} // namespace csi
+
+
+#endif
+
diff --git a/autodoc/source/parser_i/inc/s2_luidl/pe_singl.hxx b/autodoc/source/parser_i/inc/s2_luidl/pe_singl.hxx
new file mode 100644
index 000000000000..5b1507d9e8ca
--- /dev/null
+++ b/autodoc/source/parser_i/inc/s2_luidl/pe_singl.hxx
@@ -0,0 +1,150 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef LUIDL_PE_SINGL_HXX
+#define LUIDL_PE_SINGL_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <s2_luidl/parsenv2.hxx>
+#include <s2_luidl/pestate.hxx>
+ // COMPONENTS
+ // PARAMETERS
+
+namespace ary
+{
+ namespace idl
+ {
+ class Singleton;
+ class SglIfcSingleton;
+ }
+}
+
+
+namespace csi
+{
+namespace uidl
+{
+
+class PE_Type;
+
+
+class PE_Singleton : public UnoIDL_PE,
+ public ParseEnvState
+{
+ public:
+ PE_Singleton();
+ virtual ~PE_Singleton();
+
+ virtual void EstablishContacts(
+ UnoIDL_PE * io_pParentPE,
+ ary::Repository & io_rRepository,
+ TokenProcessing_Result &
+ o_rResult );
+ virtual void ProcessToken(
+ const Token & i_rToken );
+
+ virtual void Process_MetaType(
+ const TokMetaType & i_rToken );
+ virtual void Process_Identifier(
+ const TokIdentifier &
+ i_rToken );
+ virtual void Process_Punctuation(
+ const TokPunctuation &
+ i_rToken );
+ virtual void Process_Default();
+
+ private:
+ enum E_State
+ {
+ e_none = 0,
+ need_name,
+ need_curlbr_open,
+ e_std,
+ in_service,
+ need_finish,
+ in_base_interface,
+ e_STATES_MAX
+ };
+
+
+#if 0
+ enum E_TokenType /// @ATTENTION Do not change existing values (except of tt_MAX) !!! Else array-indices will break.
+ {
+ tt_metatype = 0,
+ tt_identifier = 1,
+ tt_punctuation = 2,
+ tt_startoftype = 3,
+ tt_MAX
+ };
+ typedef void (PE_Singleton::*F_TOK)(const char *);
+
+
+ void On_need_singleton_MetaType(const char * i_sText);
+ void On_need_name_Identifer(const char * i_sText);
+ void On_need_curlbr_open_Punctuation(const char * i_sText);
+ void On_std_GotoService(const char * i_sText);
+ void On_std_Punctuation(const char * i_sText);
+ void On_need_finish_Punctuation(const char * i_sText);
+
+ void CallHandler(
+ const char * i_sTokenText,
+ E_TokenType i_eTokenType );
+#endif // 0
+
+ void On_Default();
+
+ virtual void InitData();
+ virtual void TransferData();
+ virtual void ReceiveData();
+ virtual UnoIDL_PE & MyPE();
+
+ // DATA
+// static F_TOK aDispatcher[e_STATES_MAX][tt_MAX];
+
+ E_State eState;
+ String sData_Name;
+ bool bIsPreDeclaration;
+ ary::idl::Singleton *
+ pCurSingleton;
+ ary::idl::SglIfcSingleton *
+ pCurSiSingleton;
+
+ Dyn<PE_Type> pPE_Type;
+ ary::idl::Type_id nCurParsed_Type;
+};
+
+
+} // namespace uidl
+} // namespace csi
+
+
+
+#endif
+
diff --git a/autodoc/source/parser_i/inc/s2_luidl/pe_struc.hxx b/autodoc/source/parser_i/inc/s2_luidl/pe_struc.hxx
new file mode 100644
index 000000000000..7fefde39dd0a
--- /dev/null
+++ b/autodoc/source/parser_i/inc/s2_luidl/pe_struc.hxx
@@ -0,0 +1,285 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef LUIDL_PE_STRUC_HXX
+#define LUIDL_PE_STRUC_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <s2_luidl/parsenv2.hxx>
+#include <s2_luidl/pestate.hxx>
+ // COMPONENTS
+#include <s2_luidl/semnode.hxx>
+#include <ary/qualiname.hxx>
+ // PARAMETERS
+
+
+
+namespace csi
+{
+namespace prl
+{
+ class TNamespace;
+}
+}
+
+
+
+namespace csi
+{
+namespace uidl
+{
+
+
+class Struct;
+class StructElement;
+class PE_StructElement;
+class PE_Type;
+
+
+class PE_Struct : public UnoIDL_PE
+{
+ public:
+ PE_Struct();
+ virtual void EstablishContacts(
+ UnoIDL_PE * io_pParentPE,
+ ary::Repository & io_rRepository,
+ TokenProcessing_Result &
+ o_rResult );
+ ~PE_Struct();
+ virtual void ProcessToken(
+ const Token & i_rToken );
+
+ private:
+ struct S_Work
+ {
+ S_Work();
+
+ void InitData();
+ void Prepare_PE_QualifiedName();
+ void Prepare_PE_Element();
+ void Data_Set_Name(
+ const char * i_sName );
+ void Data_Set_TemplateParam(
+ const char * i_sTemplateParam );
+
+ String sData_Name;
+ String sData_TemplateParam;
+ bool bIsPreDeclaration;
+ ary::idl::Ce_id nCurStruct;
+
+ Dyn<PE_StructElement>
+ pPE_Element;
+ ary::idl::Ce_id nCurParsed_ElementRef;
+ Dyn<PE_Type> pPE_Type;
+ ary::idl::Type_id nCurParsed_Base;
+ };
+
+ struct S_Stati;
+ class PE_StructState;
+ friend struct S_Stati;
+ friend class PE_StructState;
+
+
+ class PE_StructState : public ParseEnvState
+ {
+ public:
+
+ protected:
+ PE_StructState(
+ PE_Struct & i_rStruct )
+ : rStruct(i_rStruct) {}
+ void MoveState(
+ ParseEnvState & i_rState ) const;
+ void SetResult(
+ E_TokenDone i_eDone,
+ E_EnvStackAction i_eWhat2DoWithEnvStack,
+ UnoIDL_PE * i_pParseEnv2Push = 0 ) const
+ { rStruct.SetResult(i_eDone, i_eWhat2DoWithEnvStack, i_pParseEnv2Push); }
+
+ S_Stati & Stati() const { return *rStruct.pStati; }
+ S_Work & Work() const { return rStruct.aWork; }
+ PE_Struct & PE() const { return rStruct; }
+
+ private:
+ virtual UnoIDL_PE & MyPE();
+ // DATA
+ PE_Struct & rStruct;
+ };
+
+ class State_None : public PE_StructState
+ {
+ public:
+ State_None(
+ PE_Struct & i_rStruct )
+ : PE_StructState(i_rStruct) {}
+ };
+ class State_WaitForName : public PE_StructState
+ { // -> Name
+ public:
+ State_WaitForName(
+ PE_Struct & i_rStruct )
+ : PE_StructState(i_rStruct) {}
+ virtual void Process_Identifier(
+ const TokIdentifier &
+ i_rToken );
+ };
+ class State_GotName : public PE_StructState
+ { // -> : { ; <
+ public:
+ State_GotName(
+ PE_Struct & i_rStruct )
+ : PE_StructState(i_rStruct) {}
+ virtual void Process_Punctuation(
+ const TokPunctuation &
+ i_rToken );
+ };
+ class State_WaitForTemplateParam : public PE_StructState
+ { // -> Template parameter identifier
+ public:
+ State_WaitForTemplateParam(
+ PE_Struct & i_rStruct )
+ : PE_StructState(i_rStruct) {}
+ virtual void Process_Identifier(
+ const TokIdentifier &
+ i_rToken );
+ };
+ class State_WaitForTemplateEnd : public PE_StructState
+ { // -> >
+ public:
+ State_WaitForTemplateEnd(
+ PE_Struct & i_rStruct )
+ : PE_StructState(i_rStruct) {}
+ virtual void Process_Punctuation(
+ const TokPunctuation &
+ i_rToken );
+ };
+ class State_WaitForBase : public PE_StructState
+ { // -> Base
+ public:
+ State_WaitForBase(
+ PE_Struct & i_rStruct )
+ : PE_StructState(i_rStruct) {}
+ virtual void On_SubPE_Left();
+ };
+ class State_GotBase : public PE_StructState
+ { // -> {
+ public:
+ State_GotBase(
+ PE_Struct & i_rStruct )
+ : PE_StructState(i_rStruct) {}
+ virtual void Process_Punctuation(
+ const TokPunctuation &
+ i_rToken );
+ };
+ class State_WaitForElement : public PE_StructState
+ { // -> Typ }
+ public:
+ State_WaitForElement(
+ PE_Struct & i_rStruct )
+ : PE_StructState(i_rStruct) {}
+ virtual void Process_Identifier(
+ const TokIdentifier &
+ i_rToken );
+ virtual void Process_NameSeparator();
+ virtual void Process_BuiltInType(
+ const TokBuiltInType &
+ i_rToken );
+ virtual void Process_TypeModifier(
+ const TokTypeModifier &
+ i_rToken );
+ virtual void Process_Punctuation(
+ const TokPunctuation &
+ i_rToken );
+ };
+ class State_WaitForFinish : public PE_StructState
+ { // -> ;
+ public:
+ State_WaitForFinish(
+ PE_Struct & i_rStruct )
+ : PE_StructState(i_rStruct) {}
+ virtual void Process_Punctuation(
+ const TokPunctuation &
+ i_rToken );
+ };
+
+ struct S_Stati
+ {
+ S_Stati(
+ PE_Struct & io_rStruct );
+ void SetState(
+ ParseEnvState & i_rNextState )
+ { pCurStatus = &i_rNextState; }
+
+ State_None aNone;
+ State_WaitForName aWaitForName;
+ State_GotName aGotName;
+ State_WaitForTemplateParam
+ aWaitForTemplateParam;
+ State_WaitForTemplateEnd
+ aWaitForTemplateEnd;
+ State_WaitForBase aWaitForBase;
+ State_GotBase aGotBase;
+ State_WaitForElement
+ aWaitForElement;
+ State_WaitForFinish aWaitForFinish;
+
+ ParseEnvState * pCurStatus;
+ };
+
+ virtual void InitData();
+ virtual void TransferData();
+ virtual void ReceiveData();
+
+ public:
+
+ void store_Struct();
+
+ private:
+
+ S_Stati & Stati() { return *pStati; }
+ S_Work & Work() { return aWork; }
+
+ // DATA
+ S_Work aWork;
+ Dyn<S_Stati> pStati;
+};
+
+
+inline void
+PE_Struct::PE_StructState::MoveState(
+ ParseEnvState & i_rState ) const
+ { rStruct.Stati().SetState(i_rState); }
+
+} // namespace uidl
+} // namespace csi
+
+
+#endif
+
diff --git a/autodoc/source/parser_i/inc/s2_luidl/pe_tydf2.hxx b/autodoc/source/parser_i/inc/s2_luidl/pe_tydf2.hxx
new file mode 100644
index 000000000000..8f3e247ac289
--- /dev/null
+++ b/autodoc/source/parser_i/inc/s2_luidl/pe_tydf2.hxx
@@ -0,0 +1,124 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef LUIDL_PE_TYDF2_HXX
+#define LUIDL_PE_TYDF2_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <s2_luidl/parsenv2.hxx>
+#include <s2_luidl/pestate.hxx>
+ // COMPONENTS
+ // PARAMETERS
+
+
+
+
+namespace csi
+{
+namespace uidl
+{
+
+class PE_Type;
+
+
+class PE_Typedef : public UnoIDL_PE,
+ public ParseEnvState
+{
+ public:
+ PE_Typedef();
+ virtual void EstablishContacts(
+ UnoIDL_PE * io_pParentPE,
+ ary::Repository & io_rRepository,
+ TokenProcessing_Result &
+ o_rResult );
+ ~PE_Typedef();
+
+ virtual void ProcessToken(
+ const Token & i_rToken );
+
+ virtual void Process_Identifier(
+ const TokIdentifier &
+ i_rToken );
+ virtual void Process_Punctuation(
+ const TokPunctuation &
+ i_rToken );
+ virtual void Process_Default();
+
+ private:
+ enum E_State
+ {
+ e_none = 0,
+ expect_description,
+ expect_name,
+ got_name,
+ e_STATES_MAX
+ };
+ enum E_TokenType /// @ATTENTION Do not change existing values (except of tt_MAX) !!! Else array-indices will break.
+ {
+ tt_any = 0,
+ tt_identifier,
+ tt_punctuation,
+ tt_MAX
+ };
+ typedef void (PE_Typedef::*F_TOK)(const char *);
+
+
+ void CallHandler(
+ const char * i_sTokenText,
+ E_TokenType i_eTokenType );
+
+ void On_expect_description_Any(const char * i_sText);
+ void On_expect_name_Identifier(const char * i_sText);
+ void On_got_name_Punctuation(const char * i_sText);
+ void On_Default(const char * );
+
+ virtual void InitData();
+ virtual void ReceiveData();
+ virtual void TransferData();
+ virtual UnoIDL_PE & MyPE();
+
+ // DATA
+ static F_TOK aDispatcher[e_STATES_MAX][tt_MAX];
+
+ E_State eState;
+ Dyn<PE_Type> pPE_Type;
+ ary::idl::Type_id nType;
+ String sName;
+};
+
+
+
+} // namespace uidl
+} // namespace csi
+
+
+
+#endif
+
diff --git a/autodoc/source/parser_i/inc/s2_luidl/pe_type2.hxx b/autodoc/source/parser_i/inc/s2_luidl/pe_type2.hxx
new file mode 100644
index 000000000000..f5af7cd3f75c
--- /dev/null
+++ b/autodoc/source/parser_i/inc/s2_luidl/pe_type2.hxx
@@ -0,0 +1,116 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_PE_TYPE2_HXX
+#define ADC_PE_TYPE2_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include<s2_luidl/parsenv2.hxx>
+#include<s2_luidl/pestate.hxx>
+ // COMPONENTS
+#include<ary/qualiname.hxx>
+ // PARAMETERS
+
+
+namespace csi
+{
+namespace uidl
+{
+
+
+class PE_Type : public UnoIDL_PE,
+ public ParseEnvState
+{
+ public:
+ PE_Type(
+ ary::idl::Type_id & o_rResult );
+ virtual ~PE_Type();
+
+ virtual void ProcessToken(
+ const Token & i_rToken );
+
+ virtual void Process_Identifier(
+ const TokIdentifier &
+ i_rToken );
+ virtual void Process_NameSeparator();
+ virtual void Process_Punctuation(
+ const TokPunctuation &
+ i_rToken );
+ virtual void Process_BuiltInType(
+ const TokBuiltInType &
+ i_rToken );
+ virtual void Process_TypeModifier(
+ const TokTypeModifier &
+ i_rToken );
+ virtual void Process_Default();
+
+ private:
+ enum E_State
+ {
+ e_none = 0,
+ expect_type,
+ expect_quname_part,
+ expect_quname_separator,
+ in_template_type
+ };
+
+ void Finish();
+ PE_Type & MyTemplateType();
+
+ virtual void InitData();
+ virtual void TransferData();
+ virtual UnoIDL_PE & MyPE();
+
+ // DATA
+ ary::idl::Type_id * pResult;
+
+ uintt nIsSequenceCounter;
+ uintt nSequenceDownCounter;
+ bool bIsUnsigned;
+ ary::QualifiedName sFullType;
+
+ E_State eState;
+ String sLastPart;
+
+ Dyn<PE_Type> pPE_TemplateType; /// @attention Recursion, only initiate, if needed!
+ ary::idl::Type_id nTemplateType;
+ std::vector<ary::idl::Type_id>
+ aTemplateParameters;
+};
+
+
+
+// IMPLEMENTATION
+
+
+} // namespace uidl
+} // namespace csi
+
+#endif
diff --git a/autodoc/source/parser_i/inc/s2_luidl/pe_vari2.hxx b/autodoc/source/parser_i/inc/s2_luidl/pe_vari2.hxx
new file mode 100644
index 000000000000..8c186b7c685b
--- /dev/null
+++ b/autodoc/source/parser_i/inc/s2_luidl/pe_vari2.hxx
@@ -0,0 +1,107 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_UIDL_PE_VARI2_HXX
+#define ADC_UIDL_PE_VARI2_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <s2_luidl/parsenv2.hxx>
+#include <s2_luidl/pestate.hxx>
+ // COMPONENTS
+ // PARAMETERS
+
+
+namespace csi
+{
+namespace uidl
+{
+
+
+class PE_Type;
+
+
+class PE_Variable : public UnoIDL_PE,
+ public ParseEnvState
+{
+ public:
+ PE_Variable(
+ ary::idl::Type_id & i_rResult_Type,
+ String & i_rResult_Name );
+ virtual void EstablishContacts(
+ UnoIDL_PE * io_pParentPE,
+ ary::Repository &
+ io_rRepository,
+ TokenProcessing_Result &
+ o_rResult );
+ virtual ~PE_Variable();
+
+ virtual void ProcessToken(
+ const Token & i_rToken );
+
+ virtual void Process_Default();
+ virtual void Process_Identifier(
+ const TokIdentifier &
+ i_rToken );
+ virtual void Process_Punctuation(
+ const TokPunctuation &
+ i_rToken );
+ virtual void Process_BuiltInType(
+ const TokBuiltInType &
+ i_rToken );
+ private:
+ enum E_State
+ {
+ e_none,
+ expect_type,
+ expect_name,
+ expect_finish
+ };
+
+ virtual void InitData();
+ virtual void ReceiveData();
+ virtual void TransferData();
+ virtual UnoIDL_PE & MyPE();
+
+ // DATA
+ E_State eState;
+ ary::idl::Type_id * pResult_Type;
+ String * pResult_Name;
+
+ Dyn<PE_Type> pPE_Type;
+};
+
+
+
+} // namespace uidl
+} // namespace csi
+
+
+#endif
+
diff --git a/autodoc/source/parser_i/inc/s2_luidl/pestate.hxx b/autodoc/source/parser_i/inc/s2_luidl/pestate.hxx
new file mode 100644
index 000000000000..6aa929fbd488
--- /dev/null
+++ b/autodoc/source/parser_i/inc/s2_luidl/pestate.hxx
@@ -0,0 +1,106 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_PESTATE_HXX
+#define ADC_PESTATE_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include<s2_luidl/tokintpr.hxx>
+#include<s2_luidl/tokproct.hxx>
+ // COMPONENTS
+ // PARAMETERS
+
+namespace csi
+{
+namespace uidl
+{
+
+
+class TokIdentifier;
+class TokBuiltInType;
+class TokPunctuation;
+class Tok_Documentation;
+
+class ParseEnvState : public TokenInterpreter,
+ virtual protected TokenProcessing_Types
+{
+ public:
+ virtual void Process_Identifier(
+ const TokIdentifier &
+ i_rToken );
+ virtual void Process_NameSeparator();
+ virtual void Process_Punctuation(
+ const TokPunctuation &
+ i_rToken );
+ virtual void Process_BuiltInType(
+ const TokBuiltInType &
+ i_rToken );
+ virtual void Process_TypeModifier(
+ const TokTypeModifier &
+ i_rToken );
+ virtual void Process_MetaType(
+ const TokMetaType & i_rToken );
+ virtual void Process_Stereotype(
+ const TokStereotype &
+ i_rToken );
+ virtual void Process_ParameterHandling(
+ const TokParameterHandling &
+ i_rToken );
+ virtual void Process_Raises();
+ virtual void Process_Needs();
+ virtual void Process_Observes();
+ virtual void Process_Assignment(
+ const TokAssignment &
+ i_rToken );
+ virtual void Process_EOL();
+
+ virtual void On_SubPE_Left();
+
+ virtual void Process_Default();
+
+ protected:
+ ParseEnvState() : bDefaultIsError(true) {}
+ void SetDefault2Ignore() { bDefaultIsError = false; }
+
+ private:
+ virtual UnoIDL_PE & MyPE() = 0;
+ bool bDefaultIsError;
+};
+
+
+
+// IMPLEMENTATION
+
+
+} // namespace uidl
+} // namespace csi
+
+#endif
+
diff --git a/autodoc/source/parser_i/inc/s2_luidl/semnode.hxx b/autodoc/source/parser_i/inc/s2_luidl/semnode.hxx
new file mode 100644
index 000000000000..f551ad1e8575
--- /dev/null
+++ b/autodoc/source/parser_i/inc/s2_luidl/semnode.hxx
@@ -0,0 +1,132 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_SEMNODE_HXX
+#define ADC_SEMNODE_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <s2_luidl/tokproct.hxx>
+ // COMPONENTS
+ // PARAMETERS
+#include <ary/qualiname.hxx>
+// #include <udm/ref.hxx>
+
+
+namespace ary
+{
+ class QualifiedName;
+ class Repository;
+
+namespace idl
+{
+ class Gate;
+ class Module;
+} // namespace idl
+} // namespace ary
+
+
+namespace csi
+{
+namespace uidl
+{
+
+
+class Struct;
+class Token;
+
+
+/** is an implementation class for UnoIDL_PE s
+*/
+class SemanticNode : private TokenProcessing_Types
+{
+ public:
+ SemanticNode();
+ void EstablishContacts(
+ UnoIDL_PE * io_pParentPE,
+ ary::idl::Gate & io_rRepository,
+ TokenProcessing_Result &
+ o_rResult );
+ ~SemanticNode();
+
+ void SetTokenResult(
+ E_TokenDone i_eDone,
+ E_EnvStackAction i_eWhat2DoWithEnvStack,
+ UnoIDL_PE * i_pParseEnv2Push = 0 );
+ UnoIDL_PE * Parent() const { return pParentPE; }
+ ary::idl::Gate & AryGate() const { return *pAryGate; }
+ TokenProcessing_Result &
+ TokenResult() const { return *pTokenResult; }
+
+ private:
+ // DATA
+ UnoIDL_PE * pParentPE;
+ ary::idl::Gate * pAryGate;
+ TokenProcessing_Result *
+ pTokenResult;
+};
+
+
+/*
+class Trying_PE
+{
+ public:
+ virtual ~Trying_PE() {}
+
+ protected:
+ Trying_PE();
+
+ virtual void ProcessToken(
+ const Token & i_rToken );
+
+ void StartTry(
+ UnoIDL_PE & i_rFirstTry );
+ void Add2Try(
+ UnoIDL_PE & i_rTry );
+ bool AmITrying() const;
+ UnoIDL_PE * NextTry() const;
+ void FinishTry();
+
+ private:
+ std::vector<UnoIDL_PE*>
+ aTryableSubEnvironments;
+ uintt nTryCounter;
+};
+
+*/
+
+
+// IMPLEMENTATION
+
+
+} // namespace uidl
+} // namespace csi
+
+#endif
+
diff --git a/autodoc/source/parser_i/inc/s2_luidl/smp_uidl.hxx b/autodoc/source/parser_i/inc/s2_luidl/smp_uidl.hxx
new file mode 100644
index 000000000000..255bf244cd9c
--- /dev/null
+++ b/autodoc/source/parser_i/inc/s2_luidl/smp_uidl.hxx
@@ -0,0 +1,82 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_SMP_HXX
+#define ADC_SMP_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <s2_luidl/tok_recv.hxx>
+#include <s2_dsapi/tok_recv.hxx>
+ // COMPONENTS
+ // PARAMETERS
+
+namespace csi
+{
+namespace uidl
+{
+
+
+
+/** is an implementation class for ParseEnvironment
+*/
+class SemanticParser : public csi::uidl::Token_Receiver,
+ public csi::dsapi::Token_Receiver
+{
+ public:
+ typedef std::deque< DYN TextToken * > TokenQueue;
+
+ ~SemanticParser();
+
+
+ void Receive(
+ DYN csi::uidl::Token &
+ let_drToken );
+ void Receive(
+ DYN csi::dsapi::Token &
+ let_drToken );
+
+ private:
+ // DATA
+ TokenQueue aTokenQueue;
+
+
+};
+
+
+
+// IMPLEMENTATION
+
+
+} // namespace uidl
+} // namespace csi
+
+#endif
+
+
diff --git a/autodoc/source/parser_i/inc/s2_luidl/tk_const.hxx b/autodoc/source/parser_i/inc/s2_luidl/tk_const.hxx
new file mode 100644
index 000000000000..44db10611d82
--- /dev/null
+++ b/autodoc/source/parser_i/inc/s2_luidl/tk_const.hxx
@@ -0,0 +1,64 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_UIDL_TK_CONST_HXX
+#define ADC_UIDL_TK_CONST_HXX
+
+// USED SERVICES
+ // BASE CLASSES
+#include <s2_luidl/uidl_tok.hxx>
+ // COMPONENTS
+ // PARAMETERS
+
+namespace csi
+{
+namespace uidl
+{
+
+
+class TokAssignment : public Token
+{
+ public:
+ TokAssignment(
+ const char * i_sText )
+ : sText(i_sText) {}
+
+ virtual void Trigger(
+ TokenInterpreter & io_rInterpreter ) const;
+ virtual const char *
+ Text() const;
+ private:
+ // DATA
+ String sText;
+};
+
+
+} // namespace uidl
+} // namespace csi
+
+#endif
+
diff --git a/autodoc/source/parser_i/inc/s2_luidl/tk_ident.hxx b/autodoc/source/parser_i/inc/s2_luidl/tk_ident.hxx
new file mode 100644
index 000000000000..ba46da292512
--- /dev/null
+++ b/autodoc/source/parser_i/inc/s2_luidl/tk_ident.hxx
@@ -0,0 +1,75 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_UIDL_TK_IDENT_HXX
+#define ADC_UIDL_TK_IDENT_HXX
+
+// USED SERVICES
+ // BASE CLASSES
+#include <s2_luidl/uidl_tok.hxx>
+ // COMPONENTS
+ // PARAMETERS
+
+
+namespace csi
+{
+namespace uidl
+{
+
+
+class TokIdentifier : public Token
+{
+ public:
+ TokIdentifier(
+ const char * i_sText )
+ : sText(i_sText) {}
+
+ virtual void Trigger(
+ TokenInterpreter & io_rInterpreter ) const;
+ virtual const char *
+ Text() const;
+ private:
+ // DATA
+ String sText;
+};
+
+class TokNameSeparator : public Token
+{
+ public:
+ virtual void Trigger(
+ TokenInterpreter & io_rInterpreter ) const;
+ virtual const char *
+ Text() const;
+};
+
+
+} // namespace uidl
+} // namespace csi
+
+#endif
+
+
diff --git a/autodoc/source/parser_i/inc/s2_luidl/tk_keyw.hxx b/autodoc/source/parser_i/inc/s2_luidl/tk_keyw.hxx
new file mode 100644
index 000000000000..f8e4268e9f3b
--- /dev/null
+++ b/autodoc/source/parser_i/inc/s2_luidl/tk_keyw.hxx
@@ -0,0 +1,251 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_UIDL_TK_KEYW_HXX
+#define ADC_UIDL_TK_KEYW_HXX
+
+// USED SERVICES
+ // BASE CLASSES
+#include <s2_luidl/uidl_tok.hxx>
+ // COMPONENTS
+#include <luxenum.hxx>
+ // PARAMETERS
+
+
+namespace csi
+{
+namespace uidl
+{
+
+
+class TokKeyword : public Token
+{
+};
+
+
+class TokBuiltInType : public TokKeyword
+{
+ public:
+ enum E_TokenId
+ {
+ e_none = 0,
+ bty_any = 1,
+ bty_boolean = 2,
+ bty_byte = 3,
+ bty_char = 4,
+ bty_double = 5,
+ bty_hyper = 6,
+ bty_long = 7,
+ bty_short = 8,
+ bty_string = 9,
+ bty_void = 10,
+ bty_ellipse = 11
+ };
+ typedef lux::Enum<E_TokenId> EV_TokenId;
+
+ TokBuiltInType(
+ EV_TokenId i_eTag )
+ : eTag(i_eTag) {}
+
+ virtual void Trigger(
+ TokenInterpreter & io_rInterpreter ) const;
+ virtual const char *
+ Text() const;
+ E_TokenId Id() const { return eTag; }
+
+ private:
+ // DATA
+ EV_TokenId eTag;
+};
+
+
+class TokTypeModifier : public TokKeyword
+{
+ public:
+ enum E_TokenId
+ {
+ e_none = 0,
+ tmod_unsigned = 1,
+ tmod_sequence
+ };
+ typedef lux::Enum<E_TokenId> EV_TokenId;
+
+ TokTypeModifier(
+ EV_TokenId i_eTag )
+ : eTag(i_eTag) {}
+ virtual void Trigger(
+ TokenInterpreter & io_rInterpreter ) const;
+ virtual const char *
+ Text() const;
+ E_TokenId Id() const { return eTag; }
+
+ private:
+ // DATA
+ EV_TokenId eTag;
+};
+
+class TokMetaType : public TokKeyword
+{
+ public:
+ enum E_TokenId
+ {
+ e_none = 0,
+ mt_attribute = 1,
+ mt_constants,
+ mt_enum,
+ mt_exception,
+ mt_ident,
+ mt_interface,
+ mt_module,
+ mt_property,
+ mt_service,
+ mt_singleton,
+ mt_struct,
+ mt_typedef,
+ mt_uik
+ };
+ typedef lux::Enum<E_TokenId> EV_TokenId;
+
+ TokMetaType(
+ EV_TokenId i_eTag )
+ : eTag(i_eTag) {}
+
+ virtual void Trigger(
+ TokenInterpreter & io_rInterpreter ) const;
+ virtual const char *
+ Text() const;
+ E_TokenId Id() const { return eTag; }
+
+
+ private:
+ // DATA
+ EV_TokenId eTag;
+};
+
+class TokStereotype : public TokKeyword
+{
+ public:
+ // TYPES
+ enum E_TokenId
+ {
+ e_none = 0,
+ ste_bound = 1,
+ ste_const,
+ ste_constrained,
+ ste_maybeambiguous,
+ ste_maybedefault,
+ ste_maybevoid,
+ ste_oneway,
+ ste_optional,
+ ste_readonly,
+ ste_removable,
+ ste_virtual,
+ ste_transient,
+ ste_published
+ };
+
+ typedef lux::Enum<E_TokenId> EV_TokenId;
+
+ TokStereotype(
+ EV_TokenId i_eTag )
+ : eTag(i_eTag) {}
+ // OPERATIONS
+ virtual void Trigger(
+ TokenInterpreter & io_rInterpreter ) const;
+ // INQUIRY
+ virtual const char *
+ Text() const;
+ E_TokenId Id() const { return eTag; }
+
+ private:
+ // DATA
+ EV_TokenId eTag;
+};
+
+class TokParameterHandling : public TokKeyword
+{
+ public:
+ // TYPES
+ enum E_TokenId
+ {
+ e_none = 0,
+ ph_in,
+ ph_out,
+ ph_inout
+ };
+ typedef lux::Enum<E_TokenId> EV_TokenId;
+
+ TokParameterHandling(
+ EV_TokenId i_eTag )
+ : eTag(i_eTag) {}
+ // OPERATIONS
+ virtual void Trigger(
+ TokenInterpreter & io_rInterpreter ) const;
+ // INQUIRY
+ virtual const char *
+ Text() const;
+ E_TokenId Id() const { return eTag; }
+
+ private:
+ // DATA
+ EV_TokenId eTag;
+};
+
+class TokRaises : public TokKeyword
+{
+ public:
+ virtual void Trigger(
+ TokenInterpreter & io_rInterpreter ) const;
+ virtual const char *
+ Text() const;
+};
+
+class TokNeeds : public TokKeyword
+{
+ public:
+ virtual void Trigger(
+ TokenInterpreter & io_rInterpreter ) const;
+ virtual const char *
+ Text() const;
+};
+
+class TokObserves : public TokKeyword
+{
+ public:
+ virtual void Trigger(
+ TokenInterpreter & io_rInterpreter ) const;
+ virtual const char *
+ Text() const;
+};
+
+
+} // namespace uidl
+} // namespace csi
+
+#endif
+
+
diff --git a/autodoc/source/parser_i/inc/s2_luidl/tk_punct.hxx b/autodoc/source/parser_i/inc/s2_luidl/tk_punct.hxx
new file mode 100644
index 000000000000..f0e777e447b6
--- /dev/null
+++ b/autodoc/source/parser_i/inc/s2_luidl/tk_punct.hxx
@@ -0,0 +1,113 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_UIDL_TK_PUNCT_HXX
+#define ADC_UIDL_TK_PUNCT_HXX
+
+// USED SERVICES
+ // BASE CLASSES
+#include <s2_luidl/uidl_tok.hxx>
+ // COMPONENTS
+#include <luxenum.hxx>
+ // PARAMETERS
+
+
+namespace csi
+{
+namespace uidl
+{
+
+
+class TokPunctuation : public Token
+{
+ public:
+ // TYPES
+ enum E_TokenId
+ {
+ e_none = 0,
+ BracketOpen = 1, // (
+ BracketClose = 2, // )
+ ArrayBracketOpen = 3, // [
+ ArrayBracketClose = 4, // ]
+ CurledBracketOpen = 5, // {
+ CurledBracketClose = 6, // }
+ Semicolon = 7, // ;
+ Colon = 8, // :
+ DoubleColon = 9, // ::
+ Comma = 10, // ,
+ Minus = 11, // -
+ Fullstop = 12, // .
+ Lesser = 13, // <
+ Greater = 14 // >
+ };
+ typedef lux::Enum<E_TokenId> EV_TokenId;
+
+
+ TokPunctuation(
+ EV_TokenId i_eTag )
+ : eTag(i_eTag) {}
+ // OPERATIONS
+ virtual void Trigger(
+ TokenInterpreter & io_rInterpreter ) const;
+ // INQUIRY
+ virtual const char *
+ Text() const;
+ EV_TokenId Id() const { return eTag; }
+
+
+ private:
+ // DATA
+ EV_TokenId eTag;
+};
+
+class Tok_EOL : public Token
+{
+ // OPERATIONS
+ virtual void Trigger(
+ TokenInterpreter & io_rInterpreter ) const;
+ // INQUIRY
+ virtual const char *
+ Text() const;
+};
+
+class Tok_EOF : public Token
+{
+ // OPERATIONS
+ virtual void Trigger(
+ TokenInterpreter & io_rInterpreter ) const;
+ // INQUIRY
+ virtual const char *
+ Text() const;
+};
+
+
+} // namespace uidl
+} // namespace csi
+
+#endif
+
+
diff --git a/autodoc/source/parser_i/inc/s2_luidl/tkp_uidl.hxx b/autodoc/source/parser_i/inc/s2_luidl/tkp_uidl.hxx
new file mode 100644
index 000000000000..2a25820bf248
--- /dev/null
+++ b/autodoc/source/parser_i/inc/s2_luidl/tkp_uidl.hxx
@@ -0,0 +1,84 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_TKP_UIDL_HXX
+#define ADC_TKP_UIDL_HXX
+
+// USED SERVICES
+ // BASE CLASSES
+#include <tokens/tkp2.hxx>
+ // COMPONENTS
+ // PARAMETRS
+
+class TkpDocuContext;
+
+
+namespace csi
+{
+namespace uidl
+{
+
+
+
+class Token_Receiver;
+class Context_UidlCode;
+
+
+/** This is a TokenParser which is able to parse tokens from
+ C++ source code.
+*/
+class TokenParser_Uidl : public TokenParse2
+{
+ public:
+ // LIFECYCLE
+ TokenParser_Uidl(
+ Token_Receiver & o_rUidlReceiver,
+ DYN TkpDocuContext &
+ let_drDocuContext );
+ virtual ~TokenParser_Uidl();
+
+ // OPERATIONS
+ private:
+ virtual ::TkpContext &
+ CurrentContext();
+
+ virtual void SetStartContext();
+ virtual void SetCurrentContext(
+ TkpContext & io_rContext );
+ // DATA
+ Dyn<Context_UidlCode>
+ pBaseContext;
+ ::TkpContext * pCurContext;
+};
+
+
+} // namespace uidl
+} // namespace csi
+
+#endif
+
+
diff --git a/autodoc/source/parser_i/inc/s2_luidl/tokintpr.hxx b/autodoc/source/parser_i/inc/s2_luidl/tokintpr.hxx
new file mode 100644
index 000000000000..110bf59b8fb5
--- /dev/null
+++ b/autodoc/source/parser_i/inc/s2_luidl/tokintpr.hxx
@@ -0,0 +1,98 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_LUIDL_TOKINTPR_HXX
+#define ADC_LUIDL_TOKINTPR_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+ // COMPONENTS
+ // PARAMETERS
+
+namespace csi
+{
+namespace uidl
+{
+
+
+class TokIdentifier;
+class TokPunctuation;
+class TokBuiltInType;
+class TokTypeModifier;
+class TokMetaType;
+class TokStereotype;
+class TokParameterHandling;
+class TokAssignment;
+class Tok_Documentation;
+
+
+class TokenInterpreter
+{
+ public:
+ virtual ~TokenInterpreter() {}
+
+ virtual void Process_Identifier(
+ const TokIdentifier &
+ i_rToken ) = 0;
+ virtual void Process_NameSeparator() = 0; // ::
+ virtual void Process_Punctuation(
+ const TokPunctuation &
+ i_rToken ) = 0;
+ virtual void Process_BuiltInType(
+ const TokBuiltInType &
+ i_rToken ) = 0;
+ virtual void Process_TypeModifier(
+ const TokTypeModifier &
+ i_rToken ) = 0;
+ virtual void Process_MetaType(
+ const TokMetaType & i_rToken ) = 0;
+ virtual void Process_Stereotype(
+ const TokStereotype &
+ i_rToken ) = 0;
+ virtual void Process_ParameterHandling(
+ const TokParameterHandling &
+ i_rToken ) = 0;
+ virtual void Process_Raises() = 0;
+ virtual void Process_Needs() = 0;
+ virtual void Process_Observes() = 0;
+ virtual void Process_Assignment(
+ const TokAssignment &
+ i_rToken ) = 0;
+ virtual void Process_EOL() = 0;
+};
+
+
+
+// IMPLEMENTATION
+
+
+} // namespace uidl
+} // namespace csi
+
+#endif
diff --git a/autodoc/source/parser_i/inc/s2_luidl/tokproct.hxx b/autodoc/source/parser_i/inc/s2_luidl/tokproct.hxx
new file mode 100644
index 000000000000..fa31d63db7ca
--- /dev/null
+++ b/autodoc/source/parser_i/inc/s2_luidl/tokproct.hxx
@@ -0,0 +1,93 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_TOKPROCT_HXX
+#define ADC_TOKPROCT_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+ // COMPONENTS
+ // PARAMETERS
+
+
+namespace csi
+{
+namespace uidl
+{
+
+
+class UnoIDL_PE;
+
+
+/** is a parent class for classes, which take part in parsing tokens semantically.
+ It provides some types for them.
+*/
+class TokenProcessing_Types
+{
+ public:
+ enum E_TokenDone
+ {
+ not_done = 0,
+ done = 1
+ };
+
+ enum E_EnvStackAction
+ {
+ stay, // same parse environment
+ push_sure, // push sub environment, which must be the correct one
+ push_try, // push sub environment, which is tried, if it may be the right one
+ pop_success, // return to parent environment, parsing was successful
+ pop_failure // return to parent environment, but an error occured.
+ };
+
+ struct TokenProcessing_Result
+ {
+ E_TokenDone eDone;
+ E_EnvStackAction eStackAction;
+ UnoIDL_PE * pEnv2Push;
+
+ TokenProcessing_Result()
+ : eDone(not_done), eStackAction(stay), pEnv2Push(0) {}
+ void reset() { eDone = not_done; eStackAction = stay; pEnv2Push = 0; }
+ };
+
+ enum E_ParseResult
+ {
+ res_error,
+ res_complete,
+ res_predeclaration
+ };
+};
+
+
+} // namespace uidl
+} // namespace csi
+
+#endif
+
diff --git a/autodoc/source/parser_i/inc/s2_luidl/tokrecv.hxx b/autodoc/source/parser_i/inc/s2_luidl/tokrecv.hxx
new file mode 100644
index 000000000000..e1ed8bddeeef
--- /dev/null
+++ b/autodoc/source/parser_i/inc/s2_luidl/tokrecv.hxx
@@ -0,0 +1,60 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef LUIDL_TOKRECV_HXX
+#define LUIDL_TOKRECV_HXX
+
+// USED SERVICES
+ // BASE CLASSES
+ // COMPONENTS
+ // PARAMETERS
+
+namespace csi
+{
+namespace uidl
+{
+
+
+class Token;
+
+/**
+@descr
+*/
+class Token_Receiver
+{
+ public:
+ virtual ~Token_Receiver() {}
+ virtual void Receive(
+ DYN Token & let_drToken ) = 0;
+ virtual void Increment_CurLine() = 0;
+};
+
+} // namespace uidl
+} // namespace csi
+
+#endif
+
diff --git a/autodoc/source/parser_i/inc/s2_luidl/uidl_tok.hxx b/autodoc/source/parser_i/inc/s2_luidl/uidl_tok.hxx
new file mode 100644
index 000000000000..d2b613710b20
--- /dev/null
+++ b/autodoc/source/parser_i/inc/s2_luidl/uidl_tok.hxx
@@ -0,0 +1,64 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_UIDL_TOK_HXX
+#define ADC_UIDL_TOK_HXX
+
+// USED SERVICES
+ // BASE CLASSES
+#include <tokens/token2.hxx>
+ // COMPONENTS
+ // PARAMETERS
+
+
+class ParserInfo;
+
+namespace csi
+{
+namespace uidl
+{
+
+
+class TokenInterpreter;
+
+class Token : public TextToken
+{
+ public:
+ // LIFECYCLE
+ virtual ~Token() {}
+
+ // OPERATIONS
+ virtual void Trigger(
+ TokenInterpreter & io_rInterpreter ) const = 0;
+};
+
+} // namespace uidl
+} // namespace csi
+
+#endif
+
+
diff --git a/autodoc/source/parser_i/inc/semantic/parsenv2.hxx b/autodoc/source/parser_i/inc/semantic/parsenv2.hxx
new file mode 100644
index 000000000000..c13b58f5f89d
--- /dev/null
+++ b/autodoc/source/parser_i/inc/semantic/parsenv2.hxx
@@ -0,0 +1,51 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_PARSEENV2_HXX
+#define ADC_PARSEENV2_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+ // COMPONENTS
+ // PARAMETERS
+#include <queue>
+
+
+
+class ParseEnvironment
+{
+ public:
+ virtual ~ParseEnvironment();
+
+ virtual void Enter() = 0;
+};
+
+
+#endif
+
diff --git a/autodoc/source/parser_i/inc/tokens/stmstar2.hxx b/autodoc/source/parser_i/inc/tokens/stmstar2.hxx
new file mode 100644
index 000000000000..9e248a3538a8
--- /dev/null
+++ b/autodoc/source/parser_i/inc/tokens/stmstar2.hxx
@@ -0,0 +1,83 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_STMSTAR2_HXX
+#define ADC_STMSTAR2_HXX
+
+// USED SERVICES
+ // BASE CLASSES
+#include <tokens/stmstat2.hxx>
+ // COMPONENTS
+ // PARAMETERS
+ // SERVICES
+
+
+class StmArrayStatu2 : public StmStatu2
+{
+ public:
+ // LIFECYCLE
+ StmArrayStatu2(
+ intt i_nStatusSize,
+ const INT16 * in_aArrayModel,
+ uintt i_nTokenId,
+ bool in_bIsDefault );
+ ~StmArrayStatu2();
+
+ // INQUIRY
+ StmStatu2::Branch NextBy(
+ intt in_nFollowersIndex) const;
+ UINT16 TokenId() const { return nTokenId; }
+ virtual bool IsADefault() const;
+
+ // ACCESS
+ virtual StmArrayStatu2 *
+ AsArray();
+ bool SetBranch(
+ intt in_nBranchIx,
+ StmStatu2::Branch
+ in_nBranch );
+ void SetTokenId(
+ UINT16 in_nTokenId );
+ private:
+ StmStatu2::Branch * dpBranches;
+ intt nNrOfBranches;
+ UINT16 nTokenId;
+ bool bIsADefault;
+};
+
+
+// IMPLEMENTATION
+
+inline void
+StmArrayStatu2::SetTokenId( UINT16 in_nTokenId )
+ { nTokenId = in_nTokenId; }
+
+
+
+#endif
+
+
diff --git a/autodoc/source/parser_i/inc/tokens/stmstat2.hxx b/autodoc/source/parser_i/inc/tokens/stmstat2.hxx
new file mode 100644
index 000000000000..7117d7202df4
--- /dev/null
+++ b/autodoc/source/parser_i/inc/tokens/stmstat2.hxx
@@ -0,0 +1,68 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_STMSTAT2_HXX
+#define ADC_STMSTAT2_HXX
+
+// USED SERVICES
+ // BASE CLASSES
+ // COMPONENTS
+ // PARAMETERS
+class StmArrayStatu2;
+class StmBoundsStatu2;
+
+/** A StmStatu2 is a state within a StateMachin2.
+ There are two kinds of it. Either its an array of pointers to
+ other states within the state machine - an ArrayStatus.
+
+ Or it is a BoundsStatus, which shows, the token cannot be
+ followed further within the StateMachin2.
+**/
+class StmStatu2 // := "State machine status"
+{
+ public:
+ typedef intt Branch; /// Values >= 0 give a next #Status' ID.
+ /// Values <= 0 tell, that a token is finished.
+ /// a value < 0 returns the status back to an upper level state machine.
+ // LIFECYCLE
+ virtual ~StmStatu2() {}
+
+ // OPERATIONS
+ virtual StmArrayStatu2 *
+ AsArray();
+ virtual StmBoundsStatu2 *
+ AsBounds();
+
+ // INQUIRY
+ virtual bool IsADefault() const = 0;
+};
+
+
+
+#endif
+
+
diff --git a/autodoc/source/parser_i/inc/tokens/stmstfi2.hxx b/autodoc/source/parser_i/inc/tokens/stmstfi2.hxx
new file mode 100644
index 000000000000..dc50159ff0cf
--- /dev/null
+++ b/autodoc/source/parser_i/inc/tokens/stmstfi2.hxx
@@ -0,0 +1,80 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_STMSTFI2_HXX
+#define ADC_STMSTFI2_HXX
+
+// USED SERVICES
+ // BASE CLASSES
+#include <tokens/stmstat2.hxx>
+ // COMPONENTS
+ // PARAMETERS
+
+
+class TkpContext;
+class StateMachineContext;
+
+/**
+**/
+class StmBoundsStatu2 : public StmStatu2
+{
+ public:
+ // LIFECYCLE
+ StmBoundsStatu2(
+ StateMachineContext &
+ o_rOwner,
+ TkpContext & i_rFollowUpContext,
+ uintt i_nStatusFunctionNr,
+ bool i_bIsDefault );
+ // INQUIRY
+ TkpContext * FollowUpContext();
+ uintt StatusFunctionNr() const;
+ virtual bool IsADefault() const;
+
+ // ACCESS
+ virtual StmBoundsStatu2 *
+ AsBounds();
+
+ private:
+ StateMachineContext *
+ pOwner;
+ TkpContext * pFollowUpContext;
+ uintt nStatusFunctionNr;
+ bool bIsDefault;
+};
+
+inline TkpContext *
+StmBoundsStatu2::FollowUpContext()
+ { return pFollowUpContext; }
+inline uintt
+StmBoundsStatu2::StatusFunctionNr() const
+ { return nStatusFunctionNr; }
+
+
+#endif
+
+
diff --git a/autodoc/source/parser_i/inc/tokens/tkp2.hxx b/autodoc/source/parser_i/inc/tokens/tkp2.hxx
new file mode 100644
index 000000000000..5f3be22d0147
--- /dev/null
+++ b/autodoc/source/parser_i/inc/tokens/tkp2.hxx
@@ -0,0 +1,84 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_TKP2_HXX
+#define ADC_TKP2_HXX
+
+// USED SERVICES
+ // BASE CLASSES
+ // COMPONENTS
+class CharacterSource;
+class TkpContext;
+ // PARAMETRS
+
+
+
+/** This is the interface for parser classes, which get a sequence of Token s from
+ a text.
+
+ Start() starts to parse the text from the given i_rSource.
+ GetNextToken() returns a Token on the heap as long as there are
+ still characters in the text left. The last time GetNextToken()
+ returns NULL.
+
+ The algorithms for parsing tokens from the text are an issue of
+ the derived classes.
+*/
+class TokenParse2
+{
+ public:
+ // LIFECYCLE
+ TokenParse2();
+ virtual ~TokenParse2() {}
+
+ // OPERATIONS
+ virtual void Start(
+ CharacterSource &
+ i_rSource );
+
+ /** @short Gets the next identifiable token out of the
+ source code.
+ @return true, if there was passed a valid token.
+ false, if the parsed stream is finished or
+ an error occured.
+ */
+ bool GetNextToken();
+
+ private:
+ virtual void SetStartContext() = 0;
+ virtual void SetCurrentContext(
+ TkpContext & io_rContext ) = 0;
+ virtual TkpContext &
+ CurrentContext() = 0;
+ // DATA
+ CharacterSource * pChars;
+};
+
+
+#endif
+
+
diff --git a/autodoc/source/parser_i/inc/tokens/tkpcont2.hxx b/autodoc/source/parser_i/inc/tokens/tkpcont2.hxx
new file mode 100644
index 000000000000..96f92030b9de
--- /dev/null
+++ b/autodoc/source/parser_i/inc/tokens/tkpcont2.hxx
@@ -0,0 +1,123 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_TKPCONT2_HXX
+#define ADC_TKPCONT2_HXX
+
+// USED SERVICES
+ // BASE CLASSES
+ // COMPONENTS
+ // PARAMETERS
+class CharacterSource;
+class TkpNullContext;
+class TkpNullContex2;
+
+/** @task
+ Specifies a context within which tokens are interpreted in a special
+ way. For example in parsing C++ there could be a context for code,
+ one for comments and a third one for preprocessor statements, because
+ each of these would give the same token different meanings.
+**/
+class TkpContext
+{
+ public:
+ // LIFECYCLE
+ virtual ~TkpContext() {}
+
+ // OPERATIONS
+ /** @descr
+ The functions starts to parse with the CurToken() of io_rText.
+ It leaves io_rText at the first char of the following Token or
+ the following Context.
+
+ This function returns, when a context has parsed some characterss
+ and completed a token OR left the context.
+ If the token is to be ignored, PassNewToken() returns false
+ and cuts the token from io_rText.
+ If the token is to be parsed further in a different context,
+ PassNewToken() returns false, but the token is
+ NOT cut from io_rText.
+
+ If the function has found a valid and complete token, PassNewToken()
+ passes the parsed token to the internally known receiver and
+ returns true. The token is cut from io_rText.
+ **/
+ virtual void ReadCharChain(
+ CharacterSource & io_rText ) = 0;
+ /** Has to pass the parsed token to a known receiver.
+ @return true, if a token was passed.
+ false, if no token was parsed complete by this context.
+ */
+ virtual bool PassNewToken() = 0;
+ virtual TkpContext &
+ FollowUpContext() = 0;
+
+ static TkpNullContext &
+ Null_();
+};
+
+TkpNullContex2 & TkpContext_Null2_();
+
+class StateMachineContext
+{
+ public:
+ virtual ~StateMachineContext() {}
+
+ /// Is used by StmBoundsStatu2 only.
+ virtual void PerformStatusFunction(
+ uintt i_nStatusSignal,
+ UINT16 i_nTokenId,
+ CharacterSource & io_rText ) = 0;
+};
+
+class TkpNullContex2 : public TkpContext
+{
+ public:
+ ~TkpNullContex2();
+
+ virtual void ReadCharChain(
+ CharacterSource & io_rText );
+ virtual bool PassNewToken();
+ virtual TkpContext &
+ FollowUpContext();
+};
+
+class TkpDocuContext : public TkpContext
+{
+ public:
+ virtual void SetParentContext(
+ TkpContext & io_rParentContext,
+ const char * i_sMultiLineEndToken ) = 0;
+ virtual void SetMode_IsMultiLine(
+ bool i_bTrue ) = 0;
+};
+
+
+
+#endif
+
+
diff --git a/autodoc/source/parser_i/inc/tokens/tkpstam2.hxx b/autodoc/source/parser_i/inc/tokens/tkpstam2.hxx
new file mode 100644
index 000000000000..e6f76f7ee552
--- /dev/null
+++ b/autodoc/source/parser_i/inc/tokens/tkpstam2.hxx
@@ -0,0 +1,121 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_TKPSTAM2_HXX
+#define ADC_TKPSTAM2_HXX
+
+// USED SERVICES
+ // BASE CLASSES
+#include <tokens/tkpcont2.hxx>
+ // COMPONENTS
+#include <tokens/stmstar2.hxx>
+#include <tokens/stmstfi2.hxx>
+
+/** @descr
+ This state-machine models state transitions from one state to another
+ per indices of branches. If the indices represent ascii-char-values,
+ the state-machine can be used for recognising tokens of text.
+
+ The state-machine can be a status itself.
+
+ StateMachin2 needs the array-size of all stati as a guess, how many stati
+ the state machine will contain, when at work.
+
+
+**/
+class StateMachin2
+{
+ public:
+ // Types
+ typedef StmStatu2::Branch Branch;
+ typedef StmStatu2 * * StatusList;
+
+ //# Interface self
+ // LIFECYCLE
+ StateMachin2(
+ intt in_nStatusSize,
+ intt in_nInitial_StatusListSize ); /// The user of the constructor should guess
+ /// the approximate number of stati here to
+ /// avoid multiple reallocations.
+ /// @#AddStatus
+ intt AddStatus( /// @return the new #Status' ID
+ DYN StmStatu2 * let_dpStatus);
+ /// @#AddToken
+ void AddToken(
+ const char * in_sToken,
+ UINT16 in_nTokenId,
+ const INT16 * in_aBranches,
+ INT16 in_nBoundsStatus );
+ ~StateMachin2();
+
+ // OPERATIONS
+ StmBoundsStatu2 &
+ GetCharChain(
+ UINT16 & o_nTokenId,
+ CharacterSource & io_rText );
+ private:
+ // SERVICE FUNCTIONS
+ StmStatu2 & Status(
+ intt in_nStatusNr) const;
+ StmArrayStatu2 &
+ CurrentStatus() const;
+ StmBoundsStatu2 *
+ BoundsStatus() const;
+
+ /// Sets the PeekedStatus.
+ void Peek(
+ intt in_nBranch);
+
+ void ResizeStati(); // Adds space for 32 stati.
+
+ // DATA
+ StatusList pStati; /// List of Status, implemented as simple C-array of length #nStatiSpace
+ /// with nStatiLength valid members (beginning from zero).
+ intt nCurrentStatus;
+ intt nPeekedStatus;
+
+ intt nStatusSize; /// Size of the branch array of a single status.
+
+ intt nNrofStati; /// Nr of Stati so far.
+ intt nStatiSpace; /// Size of allocated array for #pStati (size in items).
+};
+
+
+
+/** @#AddToken
+ @descr
+ Adds a token, which will be recogniszeds by the
+ statemachine.
+
+
+**/
+
+
+
+#endif
+
+
diff --git a/autodoc/source/parser_i/inc/tokens/token2.hxx b/autodoc/source/parser_i/inc/tokens/token2.hxx
new file mode 100644
index 000000000000..a980d28e8c93
--- /dev/null
+++ b/autodoc/source/parser_i/inc/tokens/token2.hxx
@@ -0,0 +1,63 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_TOKEN2_HXX
+#define ADC_TOKEN2_HXX
+
+// USED SERVICES
+ // BASE CLASSES
+ // COMPONENTS
+ // PARAMETRS
+
+
+
+/** This is the interface for parser classes, which get a sequence of Token s from
+ a text.
+
+ Start() starts to parse the text from the given i_rSource.
+ GetNextToken() returns a Token on the heap as long as there are
+ still characters in the text left. The last time GetNextToken()
+ returns NULL.
+
+ The algorithms for parsing tokens from the text are an issue of
+ the derived classes.
+*/
+class TextToken
+{
+ public:
+ // LIFECYCLE
+ virtual ~TextToken() {}
+
+
+ // INQUIRY
+ virtual const char* Text() const = 0;
+};
+
+
+#endif
+
+
diff --git a/autodoc/source/parser_i/inc/x_parse2.hxx b/autodoc/source/parser_i/inc/x_parse2.hxx
new file mode 100644
index 000000000000..2cbb1a92ee20
--- /dev/null
+++ b/autodoc/source/parser_i/inc/x_parse2.hxx
@@ -0,0 +1,67 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_X_PARSE2_HXX
+#define ADC_X_PARSE2_HXX
+
+// USED SERVICES
+ // BASE CLASSES
+#include <cosv/x.hxx>
+ // COMPONENTS
+ // PARAMETERS
+
+
+class X_AutodocParser : public csv::Exception
+{
+ public:
+ // TYPES
+ enum E_Type
+ {
+ x_Any = 0,
+ x_InvalidChar,
+ x_UnexpectedToken,
+ x_UnexpectedEOF
+ };
+ // LIFECYCLE
+ X_AutodocParser(
+ E_Type i_eType,
+ const char * i_sName = "" )
+ : eType(i_eType), sName(i_sName) {}
+ // INQUIRY
+ virtual void GetInfo(
+ std::ostream & o_rOutputMedium ) const;
+
+ private:
+ E_Type eType;
+ String sName;
+
+};
+
+
+
+
+#endif
diff --git a/autodoc/source/parser_i/tokens/makefile.mk b/autodoc/source/parser_i/tokens/makefile.mk
new file mode 100644
index 000000000000..9674e6684827
--- /dev/null
+++ b/autodoc/source/parser_i/tokens/makefile.mk
@@ -0,0 +1,63 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..$/..$/..
+
+PRJNAME=garden
+TARGET=parser2_tokens
+TARGETTYPE=CUI
+
+
+# --- Settings -----------------------------------------------------
+
+ENABLE_EXCEPTIONS=true
+PRJINC=$(PRJ)$/source
+
+
+.INCLUDE : settings.mk
+.INCLUDE : $(PRJ)$/source$/mkinc$/fullcpp.mk
+
+
+
+# --- Files --------------------------------------------------------
+
+OBJFILES= \
+ $(OBJ)$/stmstar2.obj \
+ $(OBJ)$/stmstat2.obj \
+ $(OBJ)$/stmstfi2.obj \
+ $(OBJ)$/tkpstam2.obj \
+ $(OBJ)$/tkp2.obj \
+ $(OBJ)$/tkpcont2.obj \
+ $(OBJ)$/x_parse2.obj
+
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : target.mk
+
+
+
diff --git a/autodoc/source/parser_i/tokens/stmstar2.cxx b/autodoc/source/parser_i/tokens/stmstar2.cxx
new file mode 100644
index 000000000000..dcc2220ae7f0
--- /dev/null
+++ b/autodoc/source/parser_i/tokens/stmstar2.cxx
@@ -0,0 +1,102 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <tokens/stmstar2.hxx>
+
+
+// NOT FULLY DECLARED SERVICES
+#include <x_parse2.hxx>
+
+
+
+StmArrayStatu2::StmArrayStatu2( intt i_nStatusSize,
+ const INT16 * in_aArrayModel,
+ uintt i_nTokenId,
+ bool in_bIsDefault )
+ : dpBranches(new StmStatu2::Branch[i_nStatusSize]),
+ nNrOfBranches(i_nStatusSize),
+ nTokenId(UINT16(i_nTokenId)),
+ bIsADefault(in_bIsDefault)
+{
+ // KORR_FUTURE: Interface of StmArrayStatu2() has to be changed.
+ csv_assert(i_nTokenId < 64536);
+
+ if (in_aArrayModel != 0)
+ {
+ intt count = 0;
+ for (const INT16 * get = in_aArrayModel; count < nNrOfBranches; count++, get++)
+ dpBranches[count] = *get;
+ }
+ else //
+ {
+ memset(dpBranches, 0, nNrOfBranches);
+ } // endif
+}
+
+StmArrayStatu2::~StmArrayStatu2()
+{
+ delete [] dpBranches;
+}
+
+bool
+StmArrayStatu2::SetBranch( intt in_nBranchIx,
+ StmStatu2::Branch in_nBranch )
+{
+ if ( csv::in_range(intt(0), in_nBranchIx, intt(nNrOfBranches) ) )
+ {
+ dpBranches[in_nBranchIx] = in_nBranch;
+ return true;
+ }
+ return false;
+}
+
+
+StmStatu2::Branch
+StmArrayStatu2::NextBy(intt in_nIndex) const
+{
+ if (in_nIndex < 0)
+ throw X_AutodocParser(X_AutodocParser::x_InvalidChar);
+
+ return in_nIndex < nNrOfBranches
+ ? dpBranches[in_nIndex]
+ : dpBranches[nNrOfBranches - 1];
+}
+
+
+bool
+StmArrayStatu2::IsADefault() const
+{
+ return bIsADefault;
+}
+
+StmArrayStatu2 *
+StmArrayStatu2::AsArray()
+{
+ return this;
+}
+
diff --git a/autodoc/source/parser_i/tokens/stmstat2.cxx b/autodoc/source/parser_i/tokens/stmstat2.cxx
new file mode 100644
index 000000000000..a97891c42b39
--- /dev/null
+++ b/autodoc/source/parser_i/tokens/stmstat2.cxx
@@ -0,0 +1,46 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <tokens/stmstat2.hxx>
+
+
+// NOT FULLY DECLARED SERVICES
+
+StmArrayStatu2 *
+StmStatu2::AsArray()
+{
+ return 0;
+}
+
+StmBoundsStatu2 *
+StmStatu2::AsBounds()
+{
+ return 0;
+}
+
+
diff --git a/autodoc/source/parser_i/tokens/stmstfi2.cxx b/autodoc/source/parser_i/tokens/stmstfi2.cxx
new file mode 100644
index 000000000000..c583f36ea246
--- /dev/null
+++ b/autodoc/source/parser_i/tokens/stmstfi2.cxx
@@ -0,0 +1,61 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <tokens/stmstfi2.hxx>
+
+
+// NOT FULLY DECLARED SERVICES
+#include <tokens/tkpcont2.hxx>
+
+
+StmBoundsStatu2::StmBoundsStatu2( StateMachineContext &
+ o_rOwner,
+ TkpContext & i_rFollowUpContext,
+ uintt i_nStatusFunctionNr,
+ bool i_bIsDefault )
+ : pOwner(&o_rOwner),
+ pFollowUpContext(&i_rFollowUpContext),
+ nStatusFunctionNr(i_nStatusFunctionNr),
+ bIsDefault(i_bIsDefault)
+{
+}
+
+bool
+StmBoundsStatu2::IsADefault() const
+{
+ return bIsDefault;
+}
+
+StmBoundsStatu2 *
+StmBoundsStatu2::AsBounds()
+{
+ return this;
+}
+
+
+
diff --git a/autodoc/source/parser_i/tokens/tkp2.cxx b/autodoc/source/parser_i/tokens/tkp2.cxx
new file mode 100644
index 000000000000..beeb46d237c0
--- /dev/null
+++ b/autodoc/source/parser_i/tokens/tkp2.cxx
@@ -0,0 +1,62 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <tokens/tkp2.hxx>
+
+// NOT FULLY DECLARED SERVICES
+#include <tools/tkpchars.hxx>
+#include <tokens/tkpcont2.hxx>
+
+TokenParse2::TokenParse2()
+ : pChars(0)
+{
+}
+
+void
+TokenParse2::Start( CharacterSource & i_rSource )
+{
+ pChars = &i_rSource;
+ SetStartContext();
+}
+
+bool
+TokenParse2::GetNextToken()
+{
+ csv_assert(pChars != 0);
+
+ bool bDone = false;
+ while ( NOT bDone AND NOT pChars->IsFinished() )
+ {
+ CurrentContext().ReadCharChain(*pChars);
+ bDone = CurrentContext().PassNewToken();
+ SetCurrentContext(CurrentContext().FollowUpContext());
+ }
+ return bDone;
+}
+
+
diff --git a/autodoc/source/parser_i/tokens/tkpcont2.cxx b/autodoc/source/parser_i/tokens/tkpcont2.cxx
new file mode 100644
index 000000000000..44502fc296a2
--- /dev/null
+++ b/autodoc/source/parser_i/tokens/tkpcont2.cxx
@@ -0,0 +1,65 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <tokens/tkpcont2.hxx>
+
+// NOT FULLY DECLARED SERVICES
+
+
+
+TkpNullContex2 G_aNullContex2;
+
+TkpNullContex2 &
+TkpContext_Null2_()
+{
+ return G_aNullContex2;
+}
+
+TkpNullContex2::~TkpNullContex2()
+{
+}
+
+void
+TkpNullContex2::ReadCharChain( CharacterSource & )
+{
+}
+
+bool
+TkpNullContex2::PassNewToken()
+{
+ return false;
+}
+
+TkpContext &
+TkpNullContex2::FollowUpContext()
+{
+ return *this;
+}
+
+
+
diff --git a/autodoc/source/parser_i/tokens/tkpstam2.cxx b/autodoc/source/parser_i/tokens/tkpstam2.cxx
new file mode 100644
index 000000000000..0edc9070b385
--- /dev/null
+++ b/autodoc/source/parser_i/tokens/tkpstam2.cxx
@@ -0,0 +1,174 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <tokens/tkpstam2.hxx>
+
+// NOT FULLY DECLARED SERVICES
+#include <tokens/stmstar2.hxx>
+#include <tools/tkpchars.hxx>
+
+
+const intt C_nStatuslistResizeValue = 32;
+const intt C_nTopStatus = 0;
+
+StateMachin2::StateMachin2( intt in_nStatusSize,
+ intt in_nInitial_StatusListSize )
+ : pStati(new StmStatu2*[in_nInitial_StatusListSize]),
+ nCurrentStatus(C_nTopStatus),
+ nPeekedStatus(C_nTopStatus),
+ nStatusSize(in_nStatusSize),
+ nNrofStati(0),
+ nStatiSpace(in_nInitial_StatusListSize)
+{
+ csv_assert(in_nStatusSize > 0);
+ csv_assert(in_nInitial_StatusListSize > 0);
+
+ memset(pStati, 0, sizeof(StmStatu2*) * nStatiSpace);
+}
+
+intt
+StateMachin2::AddStatus(StmStatu2 * let_dpStatus)
+{
+ if (nNrofStati == nStatiSpace)
+ {
+ ResizeStati();
+ }
+ pStati[nNrofStati] = let_dpStatus;
+ return nNrofStati++;
+}
+
+void
+StateMachin2::AddToken( const char * in_sToken,
+ UINT16 in_nTokenId,
+ const INT16 * in_aBranches,
+ INT16 in_nBoundsStatus )
+{
+ if (csv::no_str(in_sToken))
+ return;
+
+ // Durch existierende Stati durchhangeln:
+ nCurrentStatus = 0;
+ nPeekedStatus = 0;
+
+ for ( const char * pChar = in_sToken;
+ *pChar != NULCH;
+ ++pChar )
+ {
+ Peek(*pChar);
+ StmStatu2 & rPst = Status(nPeekedStatus);
+ if ( rPst.IsADefault() OR rPst.AsBounds() != 0 )
+ {
+ nPeekedStatus = AddStatus( new StmArrayStatu2(nStatusSize, in_aBranches, 0, false ) );
+ CurrentStatus().SetBranch( *pChar, nPeekedStatus );
+ }
+ nCurrentStatus = nPeekedStatus;
+ } // end for
+ StmArrayStatu2 & rLastStatus = CurrentStatus();
+ rLastStatus.SetTokenId(in_nTokenId);
+ for (intt i = 0; i < nStatusSize; i++)
+ {
+ if (Status(rLastStatus.NextBy(i)).AsBounds() != 0)
+ rLastStatus.SetBranch(i,in_nBoundsStatus);
+ } // end for
+}
+
+StateMachin2::~StateMachin2()
+{
+ for (intt i = 0; i < nNrofStati; i++)
+ {
+ delete pStati[i];
+ }
+ delete [] pStati;
+}
+
+StmBoundsStatu2 &
+StateMachin2::GetCharChain( UINT16 & o_nTokenId,
+ CharacterSource & io_rText )
+{
+ nCurrentStatus = C_nTopStatus;
+ Peek(io_rText.CurChar());
+ while (BoundsStatus() == 0)
+ {
+ nCurrentStatus = nPeekedStatus;
+ Peek(io_rText.MoveOn());
+ }
+ o_nTokenId = CurrentStatus().TokenId();
+
+ return *BoundsStatus();
+}
+
+void
+StateMachin2::ResizeStati()
+{
+ intt nNewSize = nStatiSpace + C_nStatuslistResizeValue;
+ intt i = 0;
+ StatusList pNewStati = new StmStatu2*[nNewSize];
+
+ for ( ; i < nNrofStati; i++)
+ {
+ pNewStati[i] = pStati[i];
+ }
+ memset( pNewStati+i,
+ 0,
+ (nNewSize-i) * sizeof(StmStatu2*) );
+
+ delete [] pStati;
+ pStati = pNewStati;
+ nStatiSpace = nNewSize;
+}
+
+StmStatu2 &
+StateMachin2::Status(intt in_nStatusNr) const
+{
+ csv_assert( csv::in_range(intt(0), in_nStatusNr, intt(nNrofStati)) );
+ return *pStati[in_nStatusNr];
+}
+
+StmArrayStatu2 &
+StateMachin2::CurrentStatus() const
+{
+ StmArrayStatu2 * pCurSt = Status(nCurrentStatus).AsArray();
+ if (pCurSt == 0)
+ {
+ csv_assert(false);
+ }
+ return *pCurSt;
+}
+
+StmBoundsStatu2 *
+StateMachin2::BoundsStatus() const
+{
+ return Status(nPeekedStatus).AsBounds();
+}
+
+void
+StateMachin2::Peek(intt in_nBranch)
+{
+ StmArrayStatu2 & rSt = CurrentStatus();
+ nPeekedStatus = rSt.NextBy(in_nBranch);
+}
diff --git a/autodoc/source/parser_i/tokens/x_parse2.cxx b/autodoc/source/parser_i/tokens/x_parse2.cxx
new file mode 100644
index 000000000000..6bdf7f352d9e
--- /dev/null
+++ b/autodoc/source/parser_i/tokens/x_parse2.cxx
@@ -0,0 +1,61 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <x_parse2.hxx>
+
+// NOT FULLY DECLARED SERVICES
+
+ enum E_Type
+ {
+ x_Any = 0,
+ x_InvalidChar,
+ x_UnexpectedEOF
+ };
+void
+X_AutodocParser::GetInfo( std::ostream & o_rOutputMedium ) const
+{
+ switch (eType)
+ {
+ case x_Any:
+ o_rOutputMedium << "Unspecified parsing exception ." << Endl();
+ break;
+ case x_InvalidChar:
+ o_rOutputMedium << "Unknown character during parsing." << Endl();
+ break;
+ case x_UnexpectedToken:
+ o_rOutputMedium << "Unexpected token " << sName << " found." << Endl();
+ break;
+ case x_UnexpectedEOF:
+ o_rOutputMedium << "Unexpected end of file found." << Endl();
+ break;
+ default:
+ o_rOutputMedium << "Unknown exception during parsing." << Endl();
+ }
+}
+
+
diff --git a/autodoc/source/tools/filecoll.cxx b/autodoc/source/tools/filecoll.cxx
new file mode 100644
index 000000000000..5c2286a18b1e
--- /dev/null
+++ b/autodoc/source/tools/filecoll.cxx
@@ -0,0 +1,132 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <tools/filecoll.hxx>
+
+
+// NOT FULLY DEFINED SERVICES
+#include <cosv/ploc_dir.hxx>
+
+#include <stdio.h>
+
+
+FileCollector::FileCollector( uintt i_nRoughNrOfFiles )
+ // : aFoundFiles
+{
+ if (i_nRoughNrOfFiles > 0)
+ aFoundFiles.reserve(i_nRoughNrOfFiles);
+}
+
+uintt
+FileCollector::AddFilesFrom( const char * i_sRootDir,
+ const char * i_sFilter,
+ E_SearchMode i_eSearchMode )
+{
+ uintt nSizeAtStart = aFoundFiles.size();
+
+ if (csv::no_str(i_sFilter) OR csv::no_str(i_sRootDir))
+ {
+ Cout() << "Warning: The filter contains no files." << Endl();
+ return 0;
+ }
+
+ csv::ploc::Directory aDir(i_sRootDir);
+ if (NOT aDir.Exists())
+ {
+ Cerr() << "Warning: The path for the files to be parsed could not be found:\n"
+ << i_sRootDir
+ << Endl();
+ return 0;
+ }
+
+ Cout() << "." << Flush();
+ aDir.GetContainedFiles(aFoundFiles, i_sFilter);
+
+ if (i_eSearchMode == recursive)
+ {
+ StreamStr aPath(1020);
+ aPath << i_sRootDir << csv::ploc::Delimiter();
+ uintt nSubDirStart = aPath.tellp();
+
+ StringVector aSubDirs;
+ aDir.GetContainedDirectories(aSubDirs);
+
+ for ( const_iterator iter = aSubDirs.begin();
+ iter != aSubDirs.end();
+ ++iter )
+ {
+ aPath.seekp(nSubDirStart);
+ aPath << (*iter);
+ AddFilesFrom( aPath.c_str(), i_sFilter, i_eSearchMode );
+ }
+ }
+
+ return aFoundFiles.size() - nSizeAtStart;
+}
+
+uintt
+FileCollector::AddFile( const char * i_sFilePath )
+{
+ FILE * pFile = fopen( i_sFilePath, "r" );
+ if ( pFile == 0 )
+ {
+ Cerr() << "Warning: The path for the file to be parsed could not be found:\n"
+ << i_sFilePath
+ << Endl();
+ return 0;
+ }
+
+ fclose(pFile);
+ aFoundFiles.push_back(i_sFilePath);
+ return 1;
+}
+
+void
+FileCollector::EraseAll()
+{
+ csv::erase_container(aFoundFiles);
+}
+
+FileCollector::const_iterator
+FileCollector::Begin() const
+{
+ return aFoundFiles.begin();
+}
+
+FileCollector::const_iterator
+FileCollector::End() const
+{
+ return aFoundFiles.end();
+}
+
+uintt
+FileCollector::Size() const
+{
+ return aFoundFiles.size();
+}
+
diff --git a/autodoc/source/tools/makefile.mk b/autodoc/source/tools/makefile.mk
new file mode 100644
index 000000000000..31d48edc0898
--- /dev/null
+++ b/autodoc/source/tools/makefile.mk
@@ -0,0 +1,58 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..$/..
+
+PRJNAME=autodoc
+TARGET=autodoc_tools
+TARGETTYPE=CUI
+
+
+# --- Settings -----------------------------------------------------
+
+ENABLE_EXCEPTIONS=true
+PRJINC=$(PRJ)$/source
+
+
+.INCLUDE : settings.mk
+.INCLUDE : $(PRJ)$/source$/mkinc$/fullcpp.mk
+
+
+
+# --- Files --------------------------------------------------------
+
+OBJFILES= \
+ $(OBJ)$/filecoll.obj \
+ $(OBJ)$/tkpchars.obj
+
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : target.mk
+
+
+
diff --git a/autodoc/source/tools/tkpchars.cxx b/autodoc/source/tools/tkpchars.cxx
new file mode 100644
index 000000000000..4538edf1a311
--- /dev/null
+++ b/autodoc/source/tools/tkpchars.cxx
@@ -0,0 +1,159 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include <tools/tkpchars.hxx>
+
+// NOT FULLY DECLARED SERVICES
+#include <cosv/bstream.hxx>
+#include <cosv/x.hxx>
+
+
+
+CharacterSource::CharacterSource()
+ : dpSource(new char[2]),
+ nSourceSize(0),
+ nCurPos(0),
+ nLastCut(0),
+ nLastTokenStart(0),
+ cCharAtLastCut(0)
+{
+ dpSource[nSourceSize] = NULCH;
+ dpSource[nSourceSize+1] = NULCH;
+}
+
+CharacterSource::~CharacterSource()
+{
+ delete [] dpSource;
+}
+
+void
+CharacterSource::LoadText(csv::bstream & io_rSource)
+{
+ if (dpSource != 0)
+ delete [] dpSource;
+
+ io_rSource.seek(0, csv::end);
+ nSourceSize = intt(io_rSource.position());
+ io_rSource.seek(0);
+
+ dpSource = new char[nSourceSize+1];
+
+ intt nCount = (intt) io_rSource.read(dpSource,nSourceSize);
+ if (nCount != nSourceSize)
+ throw csv::X_Default("IO-Error: Could not load file completely.");
+
+ dpSource[nSourceSize] = NULCH;
+
+ BeginSource();
+}
+
+/// KORR_FUTURE: So far, this works only when tokens do not cross inserted text boundaries.
+void
+CharacterSource::InsertTextAtCurPos( const char * i_sText2Insert )
+{
+ if ( i_sText2Insert == 0 ? true : strlen(i_sText2Insert) == 0 )
+ return;
+
+ aSourcesStack.push( S_SourceState(
+ dpSource,
+ nSourceSize,
+ nCurPos,
+ nLastCut,
+ nLastTokenStart,
+ cCharAtLastCut ) );
+
+ nSourceSize = strlen(i_sText2Insert);
+ dpSource = new char[nSourceSize+1];
+ strcpy( dpSource, i_sText2Insert); // SAFE STRCPY (#100211# - checked)
+
+ BeginSource();
+}
+
+const char *
+CharacterSource::CutToken()
+{
+ dpSource[nLastCut] = cCharAtLastCut;
+ nLastTokenStart = nLastCut;
+ nLastCut = CurPos();
+ cCharAtLastCut = dpSource[nLastCut];
+ dpSource[nLastCut] = NULCH;
+
+ return &dpSource[nLastTokenStart];
+}
+
+void
+CharacterSource::BeginSource()
+{
+ nCurPos = 0;
+ nLastCut = 0;
+ nLastTokenStart = 0;
+ cCharAtLastCut = dpSource[nLastCut];
+ dpSource[nLastCut] = NULCH;
+}
+
+// KORR_FUTURE: So far, this works only when tokens do not cross inserted text boundaries.
+char
+CharacterSource::MoveOn_OverStack()
+{
+ while ( aSourcesStack.size() > 0 AND nCurPos >= nSourceSize-1 )
+ {
+ S_SourceState & aState = aSourcesStack.top();
+ delete [] dpSource;
+
+ dpSource = aState.dpSource;
+ nSourceSize = aState.nSourceSize;
+ nCurPos = aState.nCurPos;
+ nLastCut = aState.nLastCut;
+ nLastTokenStart = aState.nLastTokenStart;
+ cCharAtLastCut = aState.cCharAtLastCut;
+
+ aSourcesStack.pop();
+ }
+
+ if ( nLastCut < nCurPos )
+ CutToken();
+
+ return CurChar();
+}
+
+CharacterSource::
+S_SourceState::S_SourceState( DYN char * dpSource_,
+ intt nSourceSize_,
+ intt nCurPos_,
+ intt nLastCut_,
+ intt nLastTokenStart_,
+ char cCharAtLastCut_ )
+ : dpSource(dpSource_),
+ nSourceSize(nSourceSize_),
+ nCurPos(nCurPos_),
+ nLastCut(nLastCut_),
+ nLastTokenStart(nLastTokenStart_),
+ cCharAtLastCut(cCharAtLastCut_)
+{
+}
+
diff --git a/avmedia/inc/avmedia/mediaitem.hxx b/avmedia/inc/avmedia/mediaitem.hxx
new file mode 100644
index 000000000000..5fe0fede94ff
--- /dev/null
+++ b/avmedia/inc/avmedia/mediaitem.hxx
@@ -0,0 +1,133 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _AVMEDIA_MEDIAITEM_HXX
+#define _AVMEDIA_MEDIAITEM_HXX
+
+#include <tools/rtti.hxx>
+#ifndef _POOLITEM_HXX
+#include <svl/poolitem.hxx>
+#endif
+#include <com/sun/star/media/ZoomLevel.hpp>
+
+#define AVMEDIA_SETMASK_NONE ((sal_uInt32)(0x00000000))
+#define AVMEDIA_SETMASK_STATE ((sal_uInt32)(0x00000001))
+#define AVMEDIA_SETMASK_DURATION ((sal_uInt32)(0x00000002))
+#define AVMEDIA_SETMASK_TIME ((sal_uInt32)(0x00000004))
+#define AVMEDIA_SETMASK_LOOP ((sal_uInt32)(0x00000008))
+#define AVMEDIA_SETMASK_MUTE ((sal_uInt32)(0x00000010))
+#define AVMEDIA_SETMASK_VOLUMEDB ((sal_uInt32)(0x00000020))
+#define AVMEDIA_SETMASK_ZOOM ((sal_uInt32)(0x00000040))
+#define AVMEDIA_SETMASK_URL ((sal_uInt32)(0x00000080))
+#define AVMEDIA_SETMASK_ALL ((sal_uInt32)(0xffffffff))
+
+class SvStream;
+
+namespace avmedia
+{
+
+//---------------
+// - MediaState -
+// --------------
+
+enum MediaState
+{
+ MEDIASTATE_STOP = 0,
+ MEDIASTATE_PLAY = 1,
+ MEDIASTATE_PLAYFFW = 2,
+ MEDIASTATE_PAUSE = 3
+};
+
+// -------------
+// - MediaItem -
+// -------------
+
+class MediaItem : public SfxPoolItem
+{
+public:
+ TYPEINFO();
+
+ MediaItem( USHORT nWhich = 0, sal_uInt32 nMaskSet = AVMEDIA_SETMASK_NONE );
+ MediaItem( const MediaItem& rMediaItem );
+ virtual ~MediaItem();
+
+ virtual int operator==( const SfxPoolItem& ) const;
+ virtual SfxPoolItem* Clone( SfxItemPool* pPool = 0 ) const;
+ virtual SfxItemPresentation GetPresentation( SfxItemPresentation ePres,
+ SfxMapUnit eCoreUnit,
+ SfxMapUnit ePresUnit,
+ XubString& rText,
+ const IntlWrapper *pIntl ) const;
+ virtual BOOL QueryValue( com::sun::star::uno::Any& rVal, BYTE nMemberId = 0 ) const;
+ virtual BOOL PutValue( const com::sun::star::uno::Any& rVal, BYTE nMemberId = 0 );
+
+ void merge( const MediaItem& rMediaItem );
+
+ sal_uInt32 getMaskSet() const;
+
+ void setState( MediaState eState );
+ MediaState getState() const;
+
+ void setDuration( double fDuration );
+ double getDuration() const;
+
+ void setTime( double fTime );
+ double getTime() const;
+
+ void setLoop( sal_Bool bLoop );
+ sal_Bool isLoop() const;
+
+ void setMute( sal_Bool bMute );
+ sal_Bool isMute() const;
+
+ void setVolumeDB( sal_Int16 nDB );
+ sal_Int16 getVolumeDB() const;
+
+ void setZoom( ::com::sun::star::media::ZoomLevel eZoom );
+ ::com::sun::star::media::ZoomLevel getZoom() const;
+
+ void setURL( const ::rtl::OUString& rURL );
+ const ::rtl::OUString& getURL() const;
+
+private:
+
+ ::rtl::OUString maURL;
+ sal_uInt32 mnMaskSet;
+ MediaState meState;
+ double mfTime;
+ double mfDuration;
+ sal_Int16 mnVolumeDB;
+ sal_Bool mbLoop;
+ sal_Bool mbMute;
+ ::com::sun::star::media::ZoomLevel meZoom;
+};
+
+typedef ::avmedia::MediaItem avmedia_MediaItem;
+
+}
+
+#endif
diff --git a/avmedia/inc/avmedia/mediaplayer.hxx b/avmedia/inc/avmedia/mediaplayer.hxx
new file mode 100644
index 000000000000..ad60b1bdebf3
--- /dev/null
+++ b/avmedia/inc/avmedia/mediaplayer.hxx
@@ -0,0 +1,96 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _AVMEDIA_MEDIACHILD_HXX
+#define _AVMEDIA_MEDIACHILD_HXX
+
+#include <sfx2/ctrlitem.hxx>
+#include <sfx2/dockwin.hxx>
+#include <tools/urlobj.hxx>
+
+// -----------
+// - Defines -
+// -----------
+
+#define AVMEDIA_MEDIAWINDOW() \
+(static_cast< ::avmedia::MediaFloater* >( ( \
+SfxViewFrame::Current() && SfxViewFrame::Current()->GetChildWindow(::avmedia::MediaPlayer::GetChildWindowId())) ? \
+SfxViewFrame::Current()->GetChildWindow(::avmedia::MediaPlayer::GetChildWindowId())->GetWindow() : \
+NULL))
+
+namespace avmedia
+{
+
+// ---------------
+// - MediaPlayer -
+// ---------------
+
+class MediaPlayer : public SfxChildWindow
+{
+public:
+ MediaPlayer( Window*, USHORT, SfxBindings*, SfxChildWinInfo* );
+ ~MediaPlayer();
+
+ SFX_DECL_CHILDWINDOW( MediaPlayer );
+};
+
+// ----------------
+// - MediaFloater -
+// ----------------
+
+class MediaWindow;
+
+class MediaFloater : public SfxDockingWindow
+{
+public:
+
+ MediaFloater( SfxBindings* pBindings, SfxChildWindow* pCW, Window* pParent );
+ ~MediaFloater();
+
+ void setURL( const ::rtl::OUString& rURL, bool bPlayImmediately );
+ const ::rtl::OUString& getURL() const;
+
+ void dispatchCurrentURL();
+
+protected:
+
+ virtual void Resize();
+ virtual void ToggleFloatingMode();
+
+private:
+
+ MediaWindow* mpMediaWindow;
+ Size maLastSize;
+ long mnDummy1;
+ long mnDummy2;
+
+ void implInit();
+};
+
+}
+
+#endif
diff --git a/avmedia/inc/avmedia/mediatoolbox.hxx b/avmedia/inc/avmedia/mediatoolbox.hxx
new file mode 100644
index 000000000000..890fffaf0340
--- /dev/null
+++ b/avmedia/inc/avmedia/mediatoolbox.hxx
@@ -0,0 +1,65 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _AVMEDIA_MEDIATOOLBOX_HXX
+#define _AVMEDIA_MEDIATOOLBOX_HXX
+
+#include <svl/lstner.hxx>
+#include <sfx2/tbxctrl.hxx>
+
+namespace avmedia
+{
+
+// -------------------------------
+// - SvxGrafFilterToolBoxControl -
+// -------------------------------
+
+class MediaItem;
+
+class MediaToolBoxControl : public SfxToolBoxControl
+{
+ friend class MediaToolBoxControl_Impl;
+
+public:
+
+ SFX_DECL_TOOLBOX_CONTROL();
+
+ MediaToolBoxControl( USHORT nSlotId, USHORT nId, ToolBox& rTbX );
+ ~MediaToolBoxControl();
+
+ virtual void StateChanged( USHORT nSID, SfxItemState eState, const SfxPoolItem* pState );
+ virtual Window* CreateItemWindow( Window* pParent );
+
+private:
+
+ void implUpdateMediaControl();
+ void implExecuteMediaControl( const MediaItem& rItem );
+};
+
+}
+
+#endif // _AVMEDIA_MEDIATOOLBOX_HXX
diff --git a/avmedia/inc/avmedia/mediawindow.hxx b/avmedia/inc/avmedia/mediawindow.hxx
new file mode 100644
index 000000000000..b5e114bedb34
--- /dev/null
+++ b/avmedia/inc/avmedia/mediawindow.hxx
@@ -0,0 +1,170 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _AVMEDIA_MEDIAWINDOW_HXX
+#define _AVMEDIA_MEDIAWINDOW_HXX
+
+#include <memory>
+#include <vector>
+#include <tools/gen.hxx>
+#include <com/sun/star/media/ZoomLevel.hpp>
+#include <com/sun/star/media/XPlayer.hpp>
+#include <com/sun/star/graphic/XGraphic.hpp>
+#include <com/sun/star/uno/XInterface.hpp>
+
+// -----------
+// - Defines -
+// -----------
+
+#define AVMEDIA_FRAMEGRABBER_DEFAULTFRAME -1.0
+
+// ------------------------
+// - Forward Declarations -
+// ------------------------
+
+class Window;
+class KeyEvent;
+class MouseEvent;
+class CommandEvent;
+class PopupMenu;
+class Pointer;
+struct AcceptDropEvent;
+struct ExecuteDropEvent;
+
+namespace rtl { class OUString; }
+
+/* Declaration of MediaWindow class */
+
+namespace avmedia
+{
+ typedef ::std::vector< ::std::pair< ::rtl::OUString, ::rtl::OUString > > FilterNameVector;
+
+ class MediaItem;
+
+ namespace priv { class MediaWindowImpl; }
+
+ // ---------------
+ // - MediaWindow -
+ // ---------------
+
+ class MediaWindow
+ {
+ public:
+ MediaWindow( Window* parent, bool bInternalMediaControl );
+ virtual ~MediaWindow();
+
+ void setURL( const ::rtl::OUString& rURL );
+ const ::rtl::OUString& getURL() const;
+
+ bool isValid() const;
+//
+ bool hasPreferredSize() const;
+ Size getPreferredSize() const;
+
+ Window* getWindow() const;
+
+ void setPosSize( const Rectangle& rNewRect );
+ Rectangle getPosSize() const;
+
+ void setPointer( const Pointer& rPointer );
+ const Pointer& getPointer() const;
+
+ bool setZoom( ::com::sun::star::media::ZoomLevel eLevel );
+ ::com::sun::star::media::ZoomLevel getZoom() const;
+
+ bool start();
+ void stop();
+
+ bool isPlaying() const;
+
+ double getDuration() const;
+
+ void setMediaTime( double fTime );
+ double getMediaTime() const;
+
+ void setStopTime( double fTime );
+ double getStopTime() const;
+
+ void setRate( double fRate );
+ double getRate() const;
+
+ void setPlaybackLoop( bool bSet );
+ bool isPlaybackLoop() const;
+
+ void setMute( bool bSet );
+ bool isMute() const;
+
+ void updateMediaItem( MediaItem& rItem ) const;
+ void executeMediaItem( const MediaItem& rItem );
+
+ void show();
+ void hide();
+
+ void enable();
+ void disable();
+
+ public:
+
+ virtual void MouseMove( const MouseEvent& rMEvt );
+ virtual void MouseButtonDown( const MouseEvent& rMEvt );
+ virtual void MouseButtonUp( const MouseEvent& rMEvt );
+
+ virtual void KeyInput( const KeyEvent& rKEvt );
+ virtual void KeyUp( const KeyEvent& rKEvt );
+
+ virtual void Command( const CommandEvent& rCEvt );
+
+ virtual sal_Int8 AcceptDrop( const AcceptDropEvent& rEvt );
+ virtual sal_Int8 ExecuteDrop( const ExecuteDropEvent& rEvt );
+
+ virtual void StartDrag( sal_Int8 nAction, const Point& rPosPixel );
+
+ public:
+
+ static void getMediaFilters( FilterNameVector& rFilterNameVector );
+ static bool executeMediaURLDialog( Window* pParent, ::rtl::OUString& rURL, bool bInsertDialog = true );
+ static void executeFormatErrorBox( Window* pParent );
+ static bool isMediaURL( const ::rtl::OUString& rURL, bool bDeep = false, Size* pPreferredSizePixel = NULL );
+
+ static ::com::sun::star::uno::Reference< ::com::sun::star::media::XPlayer > createPlayer( const ::rtl::OUString& rURL );
+
+ static ::com::sun::star::uno::Reference< ::com::sun::star::graphic::XGraphic > grabFrame( const ::rtl::OUString& rURL,
+ bool bAllowToCreateReplacementGraphic = false,
+ double fMediaTime = AVMEDIA_FRAMEGRABBER_DEFAULTFRAME );
+
+ private:
+
+ // default: disabled copy/assignment
+ MediaWindow(const MediaWindow&);
+ MediaWindow& operator =( const MediaWindow& );
+
+ ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > mxIFace;
+ priv::MediaWindowImpl* mpImpl;
+ };
+}
+
+#endif // _AVMEDIA_MEDIAWINDOW_HXX
diff --git a/avmedia/inc/helpids.hrc b/avmedia/inc/helpids.hrc
new file mode 100644
index 000000000000..2d7ccd764762
--- /dev/null
+++ b/avmedia/inc/helpids.hrc
@@ -0,0 +1,46 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _AVMEDIA_HELPIDS_HRC
+#define _AVMEDIA_HELPIDS_HRC
+
+#include <svl/solar.hrc>
+
+#define HID_AVMEDIA_TOOLBOXITEM_PLAY (HID_AVMEDIA_START+0)
+#define HID_AVMEDIA_TOOLBOXITEM_PAUSE (HID_AVMEDIA_START+1)
+#define HID_AVMEDIA_TOOLBOXITEM_STOP (HID_AVMEDIA_START+2)
+#define HID_AVMEDIA_TOOLBOXITEM_MUTE (HID_AVMEDIA_START+3)
+#define HID_AVMEDIA_TOOLBOXITEM_LOOP (HID_AVMEDIA_START+4)
+#define HID_AVMEDIA_TOOLBOXITEM_OPEN (HID_AVMEDIA_START+5)
+#define HID_AVMEDIA_TOOLBOXITEM_INSERT (HID_AVMEDIA_START+6)
+#define HID_AVMEDIA_ZOOMLISTBOX (HID_AVMEDIA_START+7)
+#define HID_AVMEDIA_TIMESLIDER (HID_AVMEDIA_START+8)
+#define HID_AVMEDIA_TIMEEDIT (HID_AVMEDIA_START+9)
+#define HID_AVMEDIA_VOLUMESLIDER (HID_AVMEDIA_START+10)
+#define HID_AVMEDIA_PLAYERWINDOW (HID_AVMEDIA_START+11)
+
+#endif // _AVMEDIA_HELPIDS_HRC
diff --git a/avmedia/inc/mediacontrol.hxx b/avmedia/inc/mediacontrol.hxx
new file mode 100644
index 000000000000..e778c0d1b21e
--- /dev/null
+++ b/avmedia/inc/mediacontrol.hxx
@@ -0,0 +1,114 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _AVMEDIA_MEDIACONTROL_HXX
+#define _AVMEDIA_MEDIACONTROL_HXX
+
+#include <avmedia/mediaitem.hxx>
+
+#include <vcl/timer.hxx>
+#include <vcl/slider.hxx>
+#include <vcl/toolbox.hxx>
+#include <vcl/edit.hxx>
+#include <vcl/image.hxx>
+
+#define AVMEDIA_CONTROLOFFSET 6
+
+class ListBox;
+
+namespace avmedia
+{
+
+// ---------------------
+// - MediaControlStyle -
+// ---------------------
+
+enum MediaControlStyle
+{
+ MEDIACONTROLSTYLE_SINGLELINE = 0,
+ MEDIACONTROLSTYLE_MULTILINE = 1
+};
+
+// ----------------
+// - MediaControl -
+// ---------------
+
+class MediaItem;
+
+class MediaControl : public Control
+{
+public:
+
+ MediaControl( Window* pParent, MediaControlStyle eControlStyle );
+ virtual ~MediaControl();
+
+ const Size& getMinSizePixel() const;
+
+ void setState( const MediaItem& rItem );
+ void getState( MediaItem& rItem ) const;
+
+protected:
+
+ virtual void update() = 0;
+ virtual void execute( const MediaItem& rItem ) = 0;
+
+ virtual void Resize();
+
+private:
+
+ void implUpdateToolboxes();
+ void implUpdateTimeSlider();
+ void implUpdateVolumeSlider();
+ void implUpdateTimeField( double fCurTime );
+ Image implGetImage( sal_Int32 nImageId ) const;
+
+ DECL_LINK( implTimeHdl, Slider* );
+ DECL_LINK( implTimeEndHdl, Slider* );
+ DECL_LINK( implVolumeHdl, Slider* );
+ DECL_LINK( implVolumeEndHdl, Slider* );
+ DECL_LINK( implSelectHdl, ToolBox* );
+ DECL_LINK( implZoomSelectHdl, ListBox* );
+ DECL_LINK( implTimeoutHdl, Timer* );
+
+ ImageList maImageList;
+ Timer maTimer;
+ MediaItem maItem;
+ ToolBox maPlayToolBox;
+ Slider maTimeSlider;
+ ToolBox maMuteToolBox;
+ Slider maVolumeSlider;
+ ToolBox maZoomToolBox;
+ ListBox* mpZoomListBox;
+ Edit maTimeEdit;
+ Size maMinSize;
+ MediaControlStyle meControlStyle;
+ bool mbLocked;
+};
+
+}
+
+#endif
diff --git a/avmedia/prj/build.lst b/avmedia/prj/build.lst
new file mode 100644
index 000000000000..1ef04ca0f7d5
--- /dev/null
+++ b/avmedia/prj/build.lst
@@ -0,0 +1,11 @@
+av avmedia : l10n tools sfx2 NULL
+av avmedia usr1 - all av_mkout NULL
+av avmedia\prj get - all av_prj NULL
+av avmedia\inc get - all av_inv NULL
+av avmedia\source\viewer nmake - all av_viewer NULL
+av avmedia\source\framework nmake - all av_framework NULL
+av avmedia\source\win nmake - all av_win NULL
+av avmedia\source\java nmake - all av_java NULL
+av avmedia\source\xine nmake - all av_xine NULL
+av avmedia\source\quicktime nmake - all av_quicktime NULL
+av avmedia\util nmake - all av_util av_viewer av_framework av_win av_java av_quicktime av_xine NULL
diff --git a/avmedia/prj/d.lst b/avmedia/prj/d.lst
new file mode 100644
index 000000000000..c82db252aab8
--- /dev/null
+++ b/avmedia/prj/d.lst
@@ -0,0 +1,18 @@
+mkdir: %COMMON_DEST%\bin%_EXT%\hid
+mkdir: %COMMON_DEST%\res%_EXT%
+
+..\%COMMON_OUTDIR%\misc\*.hid %COMMON_DEST%\bin%_EXT%\hid\*.hid
+..\%__SRC%\bin\avmedia*.dll %_DEST%\bin%_EXT%\avmedia*.dll
+..\source\java\avmedia.jar %_DEST%\bin%_EXT%\avmedia.jar
+..\%__SRC%\lib\lib*.* %_DEST%\lib%_EXT%\lib*.*
+..\%__SRC%\lib\*.lib %_DEST%\lib%_EXT%\*.lib
+..\%__SRC%\bin\avmedia*.res %_DEST%\bin%_EXT%\avmedia*.res
+
+mkdir: %_DEST%\inc%_EXT%\avmedia
+
+..\inc\avmedia\mediawindow.hxx %_DEST%\inc%_EXT%\avmedia\mediawindow.hxx
+..\inc\avmedia\mediaitem.hxx %_DEST%\inc%_EXT%\avmedia\mediaitem.hxx
+..\inc\avmedia\mediaplayer.hxx %_DEST%\inc%_EXT%\avmedia\mediaplayer.hxx
+..\inc\avmedia\mediatoolbox.hxx %_DEST%\inc%_EXT%\avmedia\mediatoolbox.hxx
+
+..\%__SRC%\class\avmedia.jar %_DEST%\bin%_EXT%\avmedia.jar
diff --git a/avmedia/source/framework/makefile.mk b/avmedia/source/framework/makefile.mk
new file mode 100644
index 000000000000..4185f3cbfc49
--- /dev/null
+++ b/avmedia/source/framework/makefile.mk
@@ -0,0 +1,58 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..$/..
+PRJNAME=avmedia
+TARGET=framework
+
+# --- Settings ----------------------------------
+
+.INCLUDE : settings.mk
+
+# --- Resources ---------------------------------
+
+SRS1NAME=$(TARGET)
+SRC1FILES =\
+ mediacontrol.src
+
+# --- Files -------------------------------------
+
+SLOFILES= \
+ $(SLO)$/mediaitem.obj \
+ $(SLO)$/mediamisc.obj \
+ $(SLO)$/mediacontrol.obj \
+ $(SLO)$/mediatoolbox.obj \
+ $(SLO)$/mediaplayer.obj \
+ $(SLO)$/soundhandler.obj
+
+EXCEPTIONSFILES = \
+ $(SLO)$/mediatoolbox.obj \
+ $(SLO)$/soundhandler.obj
+
+# --- Targets ----------------------------------
+
+.INCLUDE : target.mk
diff --git a/avmedia/source/framework/mediacontrol.cxx b/avmedia/source/framework/mediacontrol.cxx
new file mode 100644
index 000000000000..a71b5268abd7
--- /dev/null
+++ b/avmedia/source/framework/mediacontrol.cxx
@@ -0,0 +1,635 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "mediacontrol.hxx"
+#include "mediacontrol.hrc"
+#include "mediamisc.hxx"
+#include <avmedia/mediawindow.hxx>
+#include <avmedia/mediaplayer.hxx>
+#include "helpids.hrc"
+#include <tools/time.hxx>
+#include <vcl/svapp.hxx>
+#include <vcl/lstbox.hxx>
+#include <unotools/syslocale.hxx>
+#include <sfx2/viewfrm.hxx>
+#include <math.h>
+#include <algorithm>
+
+#define AVMEDIA_TIMEOUT 100
+#define AVMEDIA_TIME_RANGE 2048
+#define AVMEDIA_DB_RANGE -40
+#define AVMEDIA_LINEINCREMENT 1.0
+#define AVMEDIA_PAGEINCREMENT 10.0
+
+#define AVMEDIA_TOOLBOXITEM_PLAY 0x0001
+#define AVMEDIA_TOOLBOXITEM_PLAYFFW 0x0002
+#define AVMEDIA_TOOLBOXITEM_PAUSE 0x0004
+#define AVMEDIA_TOOLBOXITEM_STOP 0x0008
+#define AVMEDIA_TOOLBOXITEM_MUTE 0x0010
+#define AVMEDIA_TOOLBOXITEM_LOOP 0x0011
+#define AVMEDIA_TOOLBOXITEM_ZOOM 0x0012
+#define AVMEDIA_TOOLBOXITEM_OPEN 0x0014
+#define AVMEDIA_TOOLBOXITEM_INSERT 0x0018
+
+#define AVMEDIA_ZOOMLEVEL_50 0
+#define AVMEDIA_ZOOMLEVEL_100 1
+#define AVMEDIA_ZOOMLEVEL_200 2
+#define AVMEDIA_ZOOMLEVEL_FIT 3
+#define AVMEDIA_ZOOMLEVEL_SCALED 4
+#define AVMEDIA_ZOOMLEVEL_INVALID 65535
+
+namespace avmedia
+{
+
+// ----------------
+// - MediaControl -
+// ---------------
+
+MediaControl::MediaControl( Window* pParent, MediaControlStyle eControlStyle ) :
+ Control( pParent ),
+ maImageList( AVMEDIA_RESID( AVMEDIA_IMGLST ) ),
+ maItem( 0, AVMEDIA_SETMASK_ALL ),
+ maPlayToolBox( this, WB_3DLOOK ),
+ maTimeSlider( this, WB_HORZ | WB_DRAG | WB_3DLOOK | WB_SLIDERSET ),
+ maMuteToolBox( this, WB_3DLOOK ),
+ maVolumeSlider( this, WB_HORZ | WB_DRAG | WB_SLIDERSET ),
+ maZoomToolBox( this, WB_3DLOOK ),
+ mpZoomListBox( new ListBox( &maZoomToolBox, WB_BORDER | WB_DROPDOWN | WB_AUTOHSCROLL | WB_3DLOOK ) ),
+ maTimeEdit( this, WB_CENTER | WB_READONLY | WB_BORDER | WB_3DLOOK | WB_READONLY ),
+ meControlStyle( eControlStyle ),
+ mbLocked( false )
+{
+ const String aTimeText( RTL_CONSTASCII_USTRINGPARAM( " 00:00:00/00:00:00 " ) );
+
+ SetBackground();
+ SetPaintTransparent( TRUE );
+ SetParentClipMode( PARENTCLIPMODE_NOCLIP );
+
+ if( MEDIACONTROLSTYLE_SINGLELINE != meControlStyle )
+ {
+
+
+ maPlayToolBox.InsertItem( AVMEDIA_TOOLBOXITEM_OPEN, implGetImage( AVMEDIA_IMG_OPEN ), String( AVMEDIA_RESID( AVMEDIA_STR_OPEN ) ) );
+ maPlayToolBox.SetHelpId( AVMEDIA_TOOLBOXITEM_OPEN, HID_AVMEDIA_TOOLBOXITEM_OPEN );
+
+ maPlayToolBox.InsertItem( AVMEDIA_TOOLBOXITEM_INSERT, implGetImage( AVMEDIA_IMG_INSERT ), String( AVMEDIA_RESID( AVMEDIA_STR_INSERT ) ) );
+ maPlayToolBox.SetHelpId( AVMEDIA_TOOLBOXITEM_INSERT, HID_AVMEDIA_TOOLBOXITEM_INSERT );
+
+ maPlayToolBox.InsertSeparator();
+ }
+ else
+ {
+ maTimeSlider.SetBackground();
+ maVolumeSlider.SetBackground();
+ mpZoomListBox->SetBackground();
+
+ maZoomToolBox.SetBackground();
+ maZoomToolBox.SetPaintTransparent( TRUE );
+ maPlayToolBox.SetBackground();
+ maPlayToolBox.SetPaintTransparent( TRUE );
+ maMuteToolBox.SetBackground();
+ maMuteToolBox.SetPaintTransparent( TRUE );
+
+ }
+
+ maPlayToolBox.InsertItem( AVMEDIA_TOOLBOXITEM_PLAY, implGetImage( AVMEDIA_IMG_PLAY ), String( AVMEDIA_RESID( AVMEDIA_STR_PLAY ) ), TIB_CHECKABLE );
+ maPlayToolBox.SetHelpId( AVMEDIA_TOOLBOXITEM_PLAY, HID_AVMEDIA_TOOLBOXITEM_PLAY );
+
+ maPlayToolBox.InsertItem( AVMEDIA_TOOLBOXITEM_PAUSE, implGetImage( AVMEDIA_IMG_PAUSE ), String( AVMEDIA_RESID( AVMEDIA_STR_PAUSE ) ), TIB_CHECKABLE );
+ maPlayToolBox.SetHelpId( AVMEDIA_TOOLBOXITEM_PAUSE, HID_AVMEDIA_TOOLBOXITEM_PAUSE );
+
+ maPlayToolBox.InsertItem( AVMEDIA_TOOLBOXITEM_STOP, implGetImage( AVMEDIA_IMG_STOP ), String( AVMEDIA_RESID( AVMEDIA_STR_STOP ) ), TIB_CHECKABLE );
+ maPlayToolBox.SetHelpId( AVMEDIA_TOOLBOXITEM_STOP, HID_AVMEDIA_TOOLBOXITEM_STOP );
+
+ maPlayToolBox.InsertSeparator();
+
+ maPlayToolBox.InsertItem( AVMEDIA_TOOLBOXITEM_LOOP, implGetImage( AVMEDIA_IMG_ENDLESS ), String( AVMEDIA_RESID( AVMEDIA_STR_ENDLESS ) ) );
+ maPlayToolBox.SetHelpId( AVMEDIA_TOOLBOXITEM_LOOP, HID_AVMEDIA_TOOLBOXITEM_LOOP );
+
+ if( MEDIACONTROLSTYLE_SINGLELINE == meControlStyle )
+ maPlayToolBox.InsertSeparator();
+
+ maPlayToolBox.SetSelectHdl( LINK( this, MediaControl, implSelectHdl ) );
+ maPlayToolBox.SetSizePixel( maPlayToolBox.CalcWindowSizePixel() );
+ maPlayToolBox.Show();
+ maMinSize = maPlayToolBox.GetSizePixel();
+
+ maTimeSlider.SetSlideHdl( LINK( this, MediaControl, implTimeHdl ) );
+ maTimeSlider.SetEndSlideHdl( LINK( this, MediaControl, implTimeEndHdl ) );
+ maTimeSlider.SetRange( Range( 0, AVMEDIA_TIME_RANGE ) );
+ maTimeSlider.SetHelpId( HID_AVMEDIA_TIMESLIDER );
+ maTimeSlider.SetUpdateMode( true );
+ maTimeSlider.SetSizePixel( Size( 128, maPlayToolBox.GetSizePixel().Height() ) );
+ maTimeSlider.Show();
+ maMinSize.Width() += maTimeSlider.GetSizePixel().Width();
+
+ maTimeEdit.SetText( aTimeText );
+ maTimeEdit.SetUpdateMode( true );
+ maTimeEdit.SetSizePixel( Size( maTimeEdit.GetTextWidth( aTimeText ) + 8, maPlayToolBox.GetSizePixel().Height() ) );
+ maTimeEdit.SetControlBackground( Application::GetSettings().GetStyleSettings().GetWindowColor() );
+ maTimeEdit.SetHelpId( HID_AVMEDIA_TIMEEDIT );
+ maTimeEdit.Disable();
+ maTimeEdit.Show();
+ maMinSize.Width() += maTimeEdit.GetSizePixel().Width();
+
+ if( MEDIACONTROLSTYLE_SINGLELINE == meControlStyle )
+ maMuteToolBox.InsertSeparator();
+
+ maMuteToolBox.InsertItem( AVMEDIA_TOOLBOXITEM_MUTE, implGetImage( AVMEDIA_IMG_MUTE ), String( AVMEDIA_RESID( AVMEDIA_STR_MUTE ) ) );
+ maMuteToolBox.SetHelpId( AVMEDIA_TOOLBOXITEM_MUTE, HID_AVMEDIA_TOOLBOXITEM_MUTE );
+
+ maMuteToolBox.SetSelectHdl( LINK( this, MediaControl, implSelectHdl ) );
+ maMuteToolBox.SetSizePixel( maMuteToolBox.CalcWindowSizePixel() );
+ maMuteToolBox.Show();
+ maMinSize.Width() += maMuteToolBox.GetSizePixel().Width();
+
+ maVolumeSlider.SetSlideHdl( LINK( this, MediaControl, implVolumeHdl ) );
+ maVolumeSlider.SetEndSlideHdl( LINK( this, MediaControl, implVolumeEndHdl ) );
+ maVolumeSlider.SetRange( Range( AVMEDIA_DB_RANGE, 0 ) );
+ maVolumeSlider.SetUpdateMode( true );
+ maVolumeSlider.SetHelpId( HID_AVMEDIA_VOLUMESLIDER );
+ maVolumeSlider.SetSizePixel( Size( 48, maPlayToolBox.GetSizePixel().Height() ) );
+ maVolumeSlider.Show();
+ maMinSize.Width() += maVolumeSlider.GetSizePixel().Width();
+
+ mpZoomListBox->SetSizePixel( Size( maTimeEdit.GetSizePixel().Width(), 260 ) );
+ mpZoomListBox->InsertEntry( String( AVMEDIA_RESID( AVMEDIA_STR_ZOOM_50 ) ), AVMEDIA_ZOOMLEVEL_50 );
+ mpZoomListBox->InsertEntry( String( AVMEDIA_RESID( AVMEDIA_STR_ZOOM_100 ) ), AVMEDIA_ZOOMLEVEL_100 );
+ mpZoomListBox->InsertEntry( String( AVMEDIA_RESID( AVMEDIA_STR_ZOOM_200 ) ), AVMEDIA_ZOOMLEVEL_200 );
+ mpZoomListBox->InsertEntry( String( AVMEDIA_RESID( AVMEDIA_STR_ZOOM_FIT ) ), AVMEDIA_ZOOMLEVEL_FIT );
+ mpZoomListBox->SetSelectHdl( LINK( this, MediaControl, implZoomSelectHdl ) );
+ mpZoomListBox->SetHelpId( HID_AVMEDIA_ZOOMLISTBOX );
+
+ maZoomToolBox.InsertItem( AVMEDIA_TOOLBOXITEM_ZOOM, String( AVMEDIA_RESID( AVMEDIA_STR_ZOOM ) ) );
+ maZoomToolBox.SetHelpId( AVMEDIA_TOOLBOXITEM_ZOOM, HID_AVMEDIA_ZOOMLISTBOX );
+
+ maZoomToolBox.SetItemWindow( AVMEDIA_TOOLBOXITEM_ZOOM, mpZoomListBox );
+ maZoomToolBox.SetSelectHdl( LINK( this, MediaControl, implSelectHdl ) );
+ maZoomToolBox.SetSizePixel( maZoomToolBox.CalcWindowSizePixel() );
+ maZoomToolBox.Show();
+ maMinSize.Width() += maZoomToolBox.GetSizePixel().Width();
+
+ if( MEDIACONTROLSTYLE_MULTILINE == meControlStyle )
+ {
+ maMinSize.Width() = 256;
+ maMinSize.Height() = ( maMinSize.Height() << 1 ) + AVMEDIA_CONTROLOFFSET;
+ }
+
+ maTimer.SetTimeout( AVMEDIA_TIMEOUT );
+ maTimer.SetTimeoutHdl( LINK( this, MediaControl, implTimeoutHdl ) );
+ maTimer.Start();
+}
+
+// ------------------------------------------------------------------------------
+
+MediaControl::~MediaControl()
+{
+ maZoomToolBox.SetItemWindow( AVMEDIA_TOOLBOXITEM_ZOOM, NULL );
+ delete mpZoomListBox;
+}
+
+// ------------------------------------------------------------------------------
+
+const Size& MediaControl::getMinSizePixel() const
+{
+ return maMinSize;
+}
+
+// ------------------------------------------------------------------------------
+
+void MediaControl::Resize()
+{
+ Point aPos( 0, 0 );
+ const sal_Int32 nPlayToolBoxWidth = maPlayToolBox.GetSizePixel().Width();
+ const sal_Int32 nMuteToolBoxWidth = maMuteToolBox.GetSizePixel().Width();
+ const sal_Int32 nVolumeSliderWidth = maVolumeSlider.GetSizePixel().Width();
+ const sal_Int32 nZoomToolBoxWidth = maZoomToolBox.GetSizePixel().Width();
+ const sal_Int32 nTimeEditWidth = maTimeEdit.GetSizePixel().Width();
+ const sal_Int32 nTimeSliderHeight = maTimeSlider.GetSizePixel().Height();
+
+ if( MEDIACONTROLSTYLE_SINGLELINE == meControlStyle )
+ {
+ const sal_Int32 nTimeSliderWidth = GetSizePixel().Width() - ( AVMEDIA_CONTROLOFFSET * 3 ) -
+ nPlayToolBoxWidth - nMuteToolBoxWidth - nVolumeSliderWidth - nTimeEditWidth - nZoomToolBoxWidth;
+
+ maPlayToolBox.SetPosSizePixel( aPos, maPlayToolBox.GetSizePixel() );
+
+ aPos.X() += nPlayToolBoxWidth;
+ maTimeSlider.SetPosSizePixel( aPos, Size( nTimeSliderWidth, nTimeSliderHeight ) );
+
+ aPos.X() += nTimeSliderWidth + AVMEDIA_CONTROLOFFSET;
+ maTimeEdit.SetPosSizePixel( aPos, maTimeEdit.GetSizePixel() );
+
+ aPos.X() += nTimeEditWidth + AVMEDIA_CONTROLOFFSET;
+ maMuteToolBox.SetPosSizePixel( aPos, maMuteToolBox.GetSizePixel() );
+
+ aPos.X() += nMuteToolBoxWidth;
+ maVolumeSlider.SetPosSizePixel( aPos, maVolumeSlider.GetSizePixel() );
+
+ aPos.X() += nVolumeSliderWidth + AVMEDIA_CONTROLOFFSET;
+ maZoomToolBox.SetPosSizePixel( aPos, maZoomToolBox.GetSizePixel() );
+ }
+ else
+ {
+ const sal_Int32 nTimeSliderWidth = GetSizePixel().Width() - AVMEDIA_CONTROLOFFSET - nTimeEditWidth;
+
+ maTimeSlider.SetPosSizePixel( aPos, Size( nTimeSliderWidth, nTimeSliderHeight ) );
+
+ aPos.X() += nTimeSliderWidth + AVMEDIA_CONTROLOFFSET;
+ maTimeEdit.SetPosSizePixel( aPos, maTimeEdit.GetSizePixel() );
+
+ aPos.X() = 0;
+ aPos.Y() += nTimeSliderHeight + AVMEDIA_CONTROLOFFSET;
+ maPlayToolBox.SetPosSizePixel( aPos, maPlayToolBox.GetSizePixel() );
+
+ aPos.X() = GetSizePixel().Width() - nVolumeSliderWidth - nMuteToolBoxWidth - nZoomToolBoxWidth - AVMEDIA_CONTROLOFFSET;
+ maMuteToolBox.SetPosSizePixel( aPos, maMuteToolBox.GetSizePixel() );
+
+ aPos.X() += nMuteToolBoxWidth;
+ maVolumeSlider.SetPosSizePixel( aPos, maVolumeSlider.GetSizePixel() );
+
+ aPos.X() = GetSizePixel().Width() - nZoomToolBoxWidth;
+ maZoomToolBox.SetPosSizePixel( aPos, maZoomToolBox.GetSizePixel() );
+ }
+}
+
+// ------------------------------------------------------------------------------
+
+void MediaControl::setState( const MediaItem& rItem )
+{
+ if( !mbLocked )
+ {
+ maItem.merge( rItem );
+
+ implUpdateToolboxes();
+ implUpdateTimeSlider();
+ implUpdateVolumeSlider();
+ implUpdateTimeField( maItem.getTime() );
+ }
+}
+
+// ------------------------------------------------------------------------------
+
+void MediaControl::getState( MediaItem& rItem ) const
+{
+ rItem.merge( maItem );
+}
+
+// ------------------------------------------------------------------------------
+
+void MediaControl::update()
+{
+}
+
+// ------------------------------------------------------------------------------
+
+void MediaControl::execute( const MediaItem& )
+{
+}
+
+// ------------------------------------------------------------------------------
+
+void MediaControl::implUpdateToolboxes()
+{
+ const bool bValidURL = ( maItem.getURL().getLength() > 0 );
+
+ maPlayToolBox.EnableItem( AVMEDIA_TOOLBOXITEM_INSERT, bValidURL );
+ maPlayToolBox.EnableItem( AVMEDIA_TOOLBOXITEM_PLAY, bValidURL );
+ maPlayToolBox.EnableItem( AVMEDIA_TOOLBOXITEM_PLAYFFW, bValidURL );
+ maPlayToolBox.EnableItem( AVMEDIA_TOOLBOXITEM_PAUSE, bValidURL );
+ maPlayToolBox.EnableItem( AVMEDIA_TOOLBOXITEM_STOP, bValidURL );
+ maPlayToolBox.EnableItem( AVMEDIA_TOOLBOXITEM_LOOP, bValidURL );
+ maMuteToolBox.EnableItem( AVMEDIA_TOOLBOXITEM_MUTE, bValidURL );
+
+ if( !bValidURL || !IsEnabled() )
+ {
+ mpZoomListBox->Disable();
+
+ if( MEDIACONTROLSTYLE_SINGLELINE == meControlStyle )
+ maPlayToolBox.Disable();
+
+ maMuteToolBox.Disable();
+ }
+ else
+ {
+ maPlayToolBox.Enable();
+ maMuteToolBox.Enable();
+
+ if( MEDIASTATE_PLAY == maItem.getState() || MEDIASTATE_PLAYFFW == maItem.getState() )
+ {
+ maPlayToolBox.CheckItem( AVMEDIA_TOOLBOXITEM_PLAY, true );
+ maPlayToolBox.CheckItem( AVMEDIA_TOOLBOXITEM_PLAYFFW, MEDIASTATE_PLAYFFW == maItem.getState() );
+ maPlayToolBox.CheckItem( AVMEDIA_TOOLBOXITEM_PAUSE, false );
+ maPlayToolBox.CheckItem( AVMEDIA_TOOLBOXITEM_STOP, false );
+ }
+ else if( maItem.getTime() > 0.0 && ( maItem.getTime() < maItem.getDuration() ) )
+ {
+ maPlayToolBox.CheckItem( AVMEDIA_TOOLBOXITEM_PLAY, false );
+ maPlayToolBox.CheckItem( AVMEDIA_TOOLBOXITEM_PLAYFFW, false );
+ maPlayToolBox.CheckItem( AVMEDIA_TOOLBOXITEM_PAUSE, true );
+ maPlayToolBox.CheckItem( AVMEDIA_TOOLBOXITEM_STOP, false );
+ }
+ else
+ {
+ maPlayToolBox.CheckItem( AVMEDIA_TOOLBOXITEM_PLAY, false );
+ maPlayToolBox.CheckItem( AVMEDIA_TOOLBOXITEM_PLAYFFW, false );
+ maPlayToolBox.CheckItem( AVMEDIA_TOOLBOXITEM_PAUSE, false );
+ maPlayToolBox.CheckItem( AVMEDIA_TOOLBOXITEM_STOP, true );
+ }
+
+ maPlayToolBox.CheckItem( AVMEDIA_TOOLBOXITEM_LOOP, maItem.isLoop() );
+ maMuteToolBox.CheckItem( AVMEDIA_TOOLBOXITEM_MUTE, maItem.isMute() );
+
+ if( !mpZoomListBox->IsTravelSelect() && !mpZoomListBox->IsInDropDown() )
+ {
+ USHORT nSelectEntryPos ;
+
+ switch( maItem.getZoom() )
+ {
+ case( ::com::sun::star::media::ZoomLevel_ZOOM_1_TO_2 ): nSelectEntryPos = AVMEDIA_ZOOMLEVEL_50; break;
+ case( ::com::sun::star::media::ZoomLevel_ORIGINAL ): nSelectEntryPos = AVMEDIA_ZOOMLEVEL_100; break;
+ case( ::com::sun::star::media::ZoomLevel_ZOOM_2_TO_1 ): nSelectEntryPos = AVMEDIA_ZOOMLEVEL_200; break;
+ case( ::com::sun::star::media::ZoomLevel_FIT_TO_WINDOW_FIXED_ASPECT ): nSelectEntryPos = AVMEDIA_ZOOMLEVEL_FIT; break;
+ case( ::com::sun::star::media::ZoomLevel_FIT_TO_WINDOW ): nSelectEntryPos = AVMEDIA_ZOOMLEVEL_SCALED; break;
+
+ default: nSelectEntryPos = AVMEDIA_ZOOMLEVEL_INVALID; break;
+ }
+
+ if( nSelectEntryPos != AVMEDIA_ZOOMLEVEL_INVALID )
+ {
+ mpZoomListBox->Enable();
+ mpZoomListBox->SelectEntryPos( nSelectEntryPos );
+ }
+ else
+ mpZoomListBox->Disable();
+ }
+ }
+}
+
+// ------------------------------------------------------------------------------
+
+void MediaControl::implUpdateTimeSlider()
+{
+ if( !maItem.getURL().getLength() || !IsEnabled() )
+ maTimeSlider.Disable();
+ else
+ {
+ maTimeSlider.Enable();
+
+ const double fDuration = maItem.getDuration();
+
+ if( fDuration > 0.0 )
+ {
+ const double fTime = ::std::min( maItem.getTime(), fDuration );
+
+ if( !maTimeSlider.GetLineSize() )
+ maTimeSlider.SetLineSize( static_cast< sal_uInt32 >( AVMEDIA_TIME_RANGE * AVMEDIA_LINEINCREMENT / fDuration ) );
+
+ if( !maTimeSlider.GetPageSize() )
+ maTimeSlider.SetPageSize( static_cast< sal_uInt32 >( AVMEDIA_TIME_RANGE * AVMEDIA_PAGEINCREMENT / fDuration ) );
+
+ maTimeSlider.SetThumbPos( static_cast< sal_Int32 >( fTime / fDuration * AVMEDIA_TIME_RANGE ) );
+ }
+ }
+}
+
+// ------------------------------------------------------------------------------
+
+void MediaControl::implUpdateVolumeSlider()
+{
+ if( !maItem.getURL().getLength() || !IsEnabled() )
+ maVolumeSlider.Disable();
+ else
+ {
+ maVolumeSlider.Enable();
+
+ const sal_Int32 nVolumeDB = maItem.getVolumeDB();
+
+ maVolumeSlider.SetThumbPos( ::std::min( ::std::max( nVolumeDB, static_cast< sal_Int32 >( AVMEDIA_DB_RANGE ) ),
+ static_cast< sal_Int32 >( 0 ) ) );
+ }
+}
+
+// ------------------------------------------------------------------------------
+
+void MediaControl::implUpdateTimeField( double fCurTime )
+{
+ if( maItem.getURL().getLength() > 0 )
+ {
+ String aTimeString;
+
+ SvtSysLocale aSysLocale;
+ const LocaleDataWrapper& rLocaleData = aSysLocale.GetLocaleData();
+
+ aTimeString += rLocaleData.getDuration( Time( 0, 0, static_cast< sal_uInt32 >( floor( fCurTime ) ) ) );
+ aTimeString.AppendAscii( RTL_CONSTASCII_STRINGPARAM( " / " ));
+ aTimeString += rLocaleData.getDuration( Time( 0, 0, static_cast< sal_uInt32 >( floor( maItem.getDuration() ) )) );
+
+ if( maTimeEdit.GetText() != aTimeString )
+ maTimeEdit.SetText( aTimeString );
+ }
+}
+
+// ------------------------------------------------------------------------------
+
+Image MediaControl::implGetImage( sal_Int32 nImageId ) const
+{
+ return maImageList.GetImage( static_cast< USHORT >( nImageId ) );
+}
+
+// ------------------------------------------------------------------------------
+
+IMPL_LINK( MediaControl, implTimeHdl, Slider*, p )
+{
+ mbLocked = true;
+ maTimer.Stop();
+ implUpdateTimeField( p->GetThumbPos() * maItem.getDuration() / AVMEDIA_TIME_RANGE );
+
+ return 0;
+}
+
+// ------------------------------------------------------------------------------
+
+IMPL_LINK( MediaControl, implTimeEndHdl, Slider*, p )
+{
+ MediaItem aExecItem;
+
+ aExecItem.setTime( p->GetThumbPos() * maItem.getDuration() / AVMEDIA_TIME_RANGE );
+ execute( aExecItem );
+ update();
+ maTimer.Start();
+ mbLocked = false;
+
+ return 0;
+}
+
+// ------------------------------------------------------------------------------
+
+IMPL_LINK( MediaControl, implVolumeHdl, Slider*, p )
+{
+ MediaItem aExecItem;
+
+ aExecItem.setVolumeDB( static_cast< sal_Int16 >( p->GetThumbPos() ) );
+ execute( aExecItem );
+ update();
+
+ return 0;
+}
+
+// ------------------------------------------------------------------------------
+
+IMPL_LINK( MediaControl, implVolumeEndHdl, Slider*, EMPTYARG )
+{
+ return 0;
+}
+
+// ------------------------------------------------------------------------------
+
+IMPL_LINK( MediaControl, implSelectHdl, ToolBox*, p )
+{
+ if( p )
+ {
+ MediaItem aExecItem;
+
+ switch( p->GetCurItemId() )
+ {
+ case( AVMEDIA_TOOLBOXITEM_OPEN ):
+ {
+ ::rtl::OUString aURL;
+
+ if( ::avmedia::MediaWindow::executeMediaURLDialog( GetParent(), aURL, false ) )
+ {
+ if( !::avmedia::MediaWindow::isMediaURL( aURL, true ) )
+ ::avmedia::MediaWindow::executeFormatErrorBox( this );
+ else
+ {
+ aExecItem.setURL( aURL );
+ aExecItem.setState( MEDIASTATE_PLAY );
+ }
+ }
+ }
+ break;
+
+ case( AVMEDIA_TOOLBOXITEM_INSERT ):
+ {
+ MediaFloater* pFloater = AVMEDIA_MEDIAWINDOW();
+
+ if( pFloater )
+ pFloater->dispatchCurrentURL();
+ }
+ break;
+
+ case( AVMEDIA_TOOLBOXITEM_PLAY ):
+ case( AVMEDIA_TOOLBOXITEM_PLAYFFW ):
+ {
+ aExecItem.setState( ( AVMEDIA_TOOLBOXITEM_PLAYFFW == p->GetCurItemId() ) ? MEDIASTATE_PLAYFFW : MEDIASTATE_PLAY );
+
+ if( maItem.getTime() == maItem.getDuration() )
+ aExecItem.setTime( 0.0 );
+ else
+ aExecItem.setTime( maItem.getTime() );
+ }
+ break;
+
+ case( AVMEDIA_TOOLBOXITEM_PAUSE ):
+ {
+ aExecItem.setState( MEDIASTATE_PAUSE );
+ }
+ break;
+
+ case( AVMEDIA_TOOLBOXITEM_STOP ):
+ {
+ aExecItem.setState( MEDIASTATE_STOP );
+ aExecItem.setTime( 0.0 );
+ }
+ break;
+
+ case( AVMEDIA_TOOLBOXITEM_MUTE ):
+ {
+ aExecItem.setMute( !maMuteToolBox.IsItemChecked( AVMEDIA_TOOLBOXITEM_MUTE ) );
+ }
+ break;
+
+ case( AVMEDIA_TOOLBOXITEM_LOOP ):
+ {
+ aExecItem.setLoop( !maPlayToolBox.IsItemChecked( AVMEDIA_TOOLBOXITEM_LOOP ) );
+ }
+ break;
+
+ default:
+ break;
+ }
+
+ if( aExecItem.getMaskSet() != AVMEDIA_SETMASK_NONE )
+ execute( aExecItem );
+ }
+
+ update();
+ p->Invalidate( INVALIDATE_UPDATE );
+
+ return 0;
+}
+
+// ------------------------------------------------------------------------------
+
+IMPL_LINK( MediaControl, implZoomSelectHdl, ListBox*, p )
+{
+ if( p )
+ {
+ MediaItem aExecItem;
+ ::com::sun::star::media::ZoomLevel eLevel;
+
+ switch( p->GetSelectEntryPos() )
+ {
+ case( AVMEDIA_ZOOMLEVEL_50 ): eLevel = ::com::sun::star::media::ZoomLevel_ZOOM_1_TO_2; break;
+ case( AVMEDIA_ZOOMLEVEL_100 ): eLevel = ::com::sun::star::media::ZoomLevel_ORIGINAL; break;
+ case( AVMEDIA_ZOOMLEVEL_200 ): eLevel = ::com::sun::star::media::ZoomLevel_ZOOM_2_TO_1; break;
+ case( AVMEDIA_ZOOMLEVEL_FIT ): eLevel = ::com::sun::star::media::ZoomLevel_FIT_TO_WINDOW_FIXED_ASPECT; break;
+ case( AVMEDIA_ZOOMLEVEL_SCALED ): eLevel = ::com::sun::star::media::ZoomLevel_FIT_TO_WINDOW; break;
+
+ default: eLevel = ::com::sun::star::media::ZoomLevel_NOT_AVAILABLE; break;
+ }
+
+ aExecItem.setZoom( eLevel );
+ execute( aExecItem );
+ update();
+ }
+
+ return 0;
+}
+
+// ------------------------------------------------------------------------------
+
+IMPL_LINK( MediaControl, implTimeoutHdl, Timer*, EMPTYARG )
+{
+ update();
+ maTimer.Start();
+
+ return 0;
+}
+
+}
diff --git a/avmedia/source/framework/mediacontrol.hrc b/avmedia/source/framework/mediacontrol.hrc
new file mode 100644
index 000000000000..081958ccd42c
--- /dev/null
+++ b/avmedia/source/framework/mediacontrol.hrc
@@ -0,0 +1,53 @@
+ /*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#define AVMEDIA_STR_PLAY 1024
+#define AVMEDIA_STR_PAUSE 1025
+#define AVMEDIA_STR_STOP 1026
+#define AVMEDIA_STR_ENDLESS 1027
+#define AVMEDIA_STR_ZOOM 1028
+#define AVMEDIA_STR_ZOOM_50 1029
+#define AVMEDIA_STR_ZOOM_100 1030
+#define AVMEDIA_STR_ZOOM_200 1031
+#define AVMEDIA_STR_ZOOM_FIT 1032
+#define AVMEDIA_STR_MUTE 1033
+#define AVMEDIA_STR_OPEN 1034
+#define AVMEDIA_STR_INSERT 1035
+#define AVMEDIA_STR_MEDIAPLAYER 1036
+
+#define AVMEDIA_IMG_OPEN 2048
+#define AVMEDIA_IMG_PLAY 2049
+#define AVMEDIA_IMG_PAUSE 2050
+#define AVMEDIA_IMG_STOP 2051
+#define AVMEDIA_IMG_ENDLESS 2052
+#define AVMEDIA_IMG_INSERT 2053
+#define AVMEDIA_IMG_MUTE 2054
+
+#define AVMEDIA_IMGLST 3072
+#define AVMEDIA_IMGLST_HC 3073
+#define AVMEDIA_IMGLST_L 3074
+#define AVMEDIA_IMGLST_L_HC 3075
diff --git a/avmedia/source/framework/mediacontrol.src b/avmedia/source/framework/mediacontrol.src
new file mode 100644
index 000000000000..2ad203e2c34f
--- /dev/null
+++ b/avmedia/source/framework/mediacontrol.src
@@ -0,0 +1,193 @@
+ /*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "mediacontrol.hrc"
+
+String AVMEDIA_STR_OPEN
+{
+ Text[en-US] = "Open";
+};
+
+// ------------------------------------------------------------------------------
+
+String AVMEDIA_STR_INSERT
+{
+ Text [ en-US ] = "Apply" ;
+};
+
+// ------------------------------------------------------------------------------
+
+String AVMEDIA_STR_PLAY
+{
+ Text[en-US] = "Play";
+};
+
+// ------------------------------------------------------------------------------
+
+String AVMEDIA_STR_PAUSE
+{
+ Text[en-US] = "Pause";
+};
+
+// ------------------------------------------------------------------------------
+
+String AVMEDIA_STR_STOP
+{
+ Text[en-US] = "Stop";
+};
+
+// ------------------------------------------------------------------------------
+
+String AVMEDIA_STR_ENDLESS
+{
+ Text[en-US] = "Repeat";
+};
+
+// ------------------------------------------------------------------------------
+
+String AVMEDIA_STR_MUTE
+{
+ Text[en-US] = "Mute";
+};
+
+// ------------------------------------------------------------------------------
+
+String AVMEDIA_STR_ZOOM
+{
+ Text[en-US] = "View";
+};
+
+// ------------------------------------------------------------------------------
+
+String AVMEDIA_STR_ZOOM_50
+{
+ Text[en-US] = "50%";
+};
+
+// ------------------------------------------------------------------------------
+
+String AVMEDIA_STR_ZOOM_100
+{
+ Text[en-US] = "100%";
+};
+
+// ------------------------------------------------------------------------------
+
+String AVMEDIA_STR_ZOOM_200
+{
+ Text[en-US] = "200%";
+};
+
+// ------------------------------------------------------------------------------
+
+String AVMEDIA_STR_ZOOM_FIT
+{
+ Text[en-US] = "Scaled";
+};
+
+// ------------------------------------------------------------------------------
+
+String AVMEDIA_STR_MEDIAPLAYER
+{
+ Text[en-US] = "Media Player";
+};
+
+// ------------------------------------------------------------------------------
+
+ImageList AVMEDIA_IMGLST
+{
+ Prefix = "av";
+ MaskColor = Color{ Red = 0xff00; Green = 0x0000; Blue = 0xff00; };
+ IdList =
+ {
+ AVMEDIA_IMG_OPEN;
+ AVMEDIA_IMG_PLAY;
+ AVMEDIA_IMG_PAUSE;
+ AVMEDIA_IMG_STOP;
+ AVMEDIA_IMG_ENDLESS;
+ AVMEDIA_IMG_INSERT;
+ AVMEDIA_IMG_MUTE;
+ };
+ IdCount = 7;
+};
+
+// ------------------------------------------------------------------------------
+
+ImageList AVMEDIA_IMGLST_L
+{
+ Prefix = "avl";
+ MaskColor = Color{ Red = 0xff00; Green = 0x0000; Blue = 0xff00; };
+ IdList =
+ {
+ AVMEDIA_IMG_OPEN;
+ AVMEDIA_IMG_PLAY;
+ AVMEDIA_IMG_PAUSE;
+ AVMEDIA_IMG_STOP;
+ AVMEDIA_IMG_ENDLESS;
+ AVMEDIA_IMG_INSERT;
+ AVMEDIA_IMG_MUTE;
+ };
+ IdCount = 7;
+};
+
+// ------------------------------------------------------------------------------
+
+ImageList AVMEDIA_IMGLST_HC
+{
+ Prefix = "avh";
+ MaskColor = Color{ Red = 0xff00; Green = 0x0000; Blue = 0xff00; };
+ IdList =
+ {
+ AVMEDIA_IMG_OPEN;
+ AVMEDIA_IMG_PLAY;
+ AVMEDIA_IMG_PAUSE;
+ AVMEDIA_IMG_STOP;
+ AVMEDIA_IMG_ENDLESS;
+ AVMEDIA_IMG_INSERT;
+ AVMEDIA_IMG_MUTE;
+ };
+ IdCount = 7;
+};
+
+// ------------------------------------------------------------------------------
+
+ImageList AVMEDIA_IMGLST_L_HC
+{
+ Prefix = "avlh";
+ MaskColor = Color{ Red = 0xff00; Green = 0x0000; Blue = 0xff00; };
+ IdList =
+ {
+ AVMEDIA_IMG_OPEN;
+ AVMEDIA_IMG_PLAY;
+ AVMEDIA_IMG_PAUSE;
+ AVMEDIA_IMG_STOP;
+ AVMEDIA_IMG_ENDLESS;
+ AVMEDIA_IMG_INSERT;
+ AVMEDIA_IMG_MUTE;
+ };
+ IdCount = 7;
+};
diff --git a/avmedia/source/framework/mediaitem.cxx b/avmedia/source/framework/mediaitem.cxx
new file mode 100644
index 000000000000..f9f85eb1ee66
--- /dev/null
+++ b/avmedia/source/framework/mediaitem.cxx
@@ -0,0 +1,329 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <avmedia/mediaitem.hxx>
+#include <com/sun/star/uno/Sequence.hxx>
+
+using namespace ::com::sun::star;
+
+namespace avmedia
+{
+
+// -------------
+// - MediaItem -
+// -------------
+
+TYPEINIT1_AUTOFACTORY( MediaItem, ::SfxPoolItem );
+ ::rtl::OUString maURL;
+ sal_uInt32 mnMaskSet;
+ MediaState meState;
+ double mfTime;
+ double mfDuration;
+ sal_Int16 mnVolumeDB;
+ sal_Bool mbLoop;
+ sal_Bool mbMute;
+ ::com::sun::star::media::ZoomLevel meZoom;
+
+// ------------------------------------------------------------------------------
+
+MediaItem::MediaItem( USHORT _nWhich, sal_uInt32 nMaskSet ) :
+ SfxPoolItem( _nWhich ),
+ mnMaskSet( nMaskSet ),
+ meState( MEDIASTATE_STOP ),
+ mfTime( 0.0 ),
+ mfDuration( 0.0 ),
+ mnVolumeDB( 0 ),
+ mbLoop( false ),
+ mbMute( false ),
+ meZoom( ::com::sun::star::media::ZoomLevel_NOT_AVAILABLE )
+{
+}
+
+// ------------------------------------------------------------------------------
+
+MediaItem::MediaItem( const MediaItem& rItem ) :
+ SfxPoolItem( rItem ),
+ maURL( rItem.maURL ),
+ mnMaskSet( rItem.mnMaskSet ),
+ meState( rItem.meState ),
+ mfTime( rItem.mfTime ),
+ mfDuration( rItem.mfDuration ),
+ mnVolumeDB( rItem.mnVolumeDB ),
+ mbLoop( rItem.mbLoop ),
+ mbMute( rItem.mbMute ),
+ meZoom( rItem.meZoom )
+{
+}
+
+// ------------------------------------------------------------------------------
+
+MediaItem::~MediaItem()
+{
+}
+
+// ------------------------------------------------------------------------------
+
+int MediaItem::operator==( const SfxPoolItem& rItem ) const
+{
+ DBG_ASSERT( SfxPoolItem::operator==(rItem), "unequal types" );
+ return( mnMaskSet == static_cast< const MediaItem& >( rItem ).mnMaskSet &&
+ maURL == static_cast< const MediaItem& >( rItem ).maURL &&
+ meState == static_cast< const MediaItem& >( rItem ).meState &&
+ mfDuration == static_cast< const MediaItem& >( rItem ).mfDuration &&
+ mfTime == static_cast< const MediaItem& >( rItem ).mfTime &&
+ mnVolumeDB == static_cast< const MediaItem& >( rItem ).mnVolumeDB &&
+ mbLoop == static_cast< const MediaItem& >( rItem ).mbLoop &&
+ mbMute == static_cast< const MediaItem& >( rItem ).mbMute &&
+ meZoom == static_cast< const MediaItem& >( rItem ).meZoom );
+}
+
+// ------------------------------------------------------------------------------
+
+SfxPoolItem* MediaItem::Clone( SfxItemPool* ) const
+{
+ return new MediaItem( *this );
+}
+
+//------------------------------------------------------------------------
+
+SfxItemPresentation MediaItem::GetPresentation( SfxItemPresentation,
+ SfxMapUnit,
+ SfxMapUnit,
+ XubString& rText,
+ const IntlWrapper * ) const
+{
+ rText.Erase();
+ return SFX_ITEM_PRESENTATION_NONE;
+}
+
+//------------------------------------------------------------------------
+
+BOOL MediaItem::QueryValue( com::sun::star::uno::Any& rVal, BYTE ) const
+{
+ uno::Sequence< uno::Any > aSeq( 9 );
+
+ aSeq[ 0 ] <<= maURL;
+ aSeq[ 1 ] <<= mnMaskSet;
+ aSeq[ 2 ] <<= static_cast< sal_Int32 >( meState );
+ aSeq[ 3 ] <<= mfTime;
+ aSeq[ 4 ] <<= mfDuration;
+ aSeq[ 5 ] <<= mnVolumeDB;
+ aSeq[ 6 ] <<= mbLoop;
+ aSeq[ 7 ] <<= mbMute;
+ aSeq[ 8 ] <<= meZoom;
+
+ rVal <<= aSeq;
+
+ return true;
+}
+
+//------------------------------------------------------------------------
+
+BOOL MediaItem::PutValue( const com::sun::star::uno::Any& rVal, BYTE )
+{
+ uno::Sequence< uno::Any > aSeq;
+ BOOL bRet = false;
+
+ if( ( rVal >>= aSeq ) && ( aSeq.getLength() == 9 ) )
+ {
+ sal_Int32 nInt32 = 0;
+
+ aSeq[ 0 ] >>= maURL;
+ aSeq[ 1 ] >>= mnMaskSet;
+ aSeq[ 2 ] >>= nInt32; meState = static_cast< MediaState >( nInt32 );
+ aSeq[ 3 ] >>= mfTime;
+ aSeq[ 4 ] >>= mfDuration;
+ aSeq[ 5 ] >>= mnVolumeDB;
+ aSeq[ 6 ] >>= mbLoop;
+ aSeq[ 7 ] >>= mbMute;
+ aSeq[ 8 ] >>= meZoom;
+
+ bRet = true;
+ }
+
+ return bRet;
+}
+
+//------------------------------------------------------------------------
+
+void MediaItem::merge( const MediaItem& rMediaItem )
+{
+ const sal_uInt32 nMaskSet = rMediaItem.getMaskSet();
+
+ if( AVMEDIA_SETMASK_URL & nMaskSet )
+ setURL( rMediaItem.getURL() );
+
+ if( AVMEDIA_SETMASK_STATE & nMaskSet )
+ setState( rMediaItem.getState() );
+
+ if( AVMEDIA_SETMASK_DURATION & nMaskSet )
+ setDuration( rMediaItem.getDuration() );
+
+ if( AVMEDIA_SETMASK_TIME & nMaskSet )
+ setTime( rMediaItem.getTime() );
+
+ if( AVMEDIA_SETMASK_LOOP & nMaskSet )
+ setLoop( rMediaItem.isLoop() );
+
+ if( AVMEDIA_SETMASK_MUTE & nMaskSet )
+ setMute( rMediaItem.isMute() );
+
+ if( AVMEDIA_SETMASK_VOLUMEDB & nMaskSet )
+ setVolumeDB( rMediaItem.getVolumeDB() );
+
+ if( AVMEDIA_SETMASK_ZOOM & nMaskSet )
+ setZoom( rMediaItem.getZoom() );
+}
+
+//------------------------------------------------------------------------
+
+sal_uInt32 MediaItem::getMaskSet() const
+{
+ return mnMaskSet;
+}
+
+//------------------------------------------------------------------------
+
+void MediaItem::setURL( const ::rtl::OUString& rURL )
+{
+ maURL = rURL;
+ mnMaskSet |= AVMEDIA_SETMASK_URL;
+}
+
+//------------------------------------------------------------------------
+
+const ::rtl::OUString& MediaItem::getURL() const
+{
+ return maURL;
+}
+
+//------------------------------------------------------------------------
+
+void MediaItem::setState( MediaState eState )
+{
+ meState = eState;
+ mnMaskSet |= AVMEDIA_SETMASK_STATE;
+}
+
+//------------------------------------------------------------------------
+
+MediaState MediaItem::getState() const
+{
+ return meState;
+}
+
+//------------------------------------------------------------------------
+
+void MediaItem::setDuration( double fDuration )
+{
+ mfDuration = fDuration;
+ mnMaskSet |= AVMEDIA_SETMASK_DURATION;
+}
+
+//------------------------------------------------------------------------
+
+double MediaItem::getDuration() const
+{
+ return mfDuration;
+}
+
+//------------------------------------------------------------------------
+
+void MediaItem::setTime( double fTime )
+{
+ mfTime = fTime;
+ mnMaskSet |= AVMEDIA_SETMASK_TIME;
+}
+
+//------------------------------------------------------------------------
+
+double MediaItem::getTime() const
+{
+ return mfTime;
+}
+
+//------------------------------------------------------------------------
+
+void MediaItem::setLoop( sal_Bool bLoop )
+{
+ mbLoop = bLoop;
+ mnMaskSet |= AVMEDIA_SETMASK_LOOP;
+}
+
+//------------------------------------------------------------------------
+
+sal_Bool MediaItem::isLoop() const
+{
+ return mbLoop;
+}
+
+//------------------------------------------------------------------------
+
+void MediaItem::setMute( sal_Bool bMute )
+{
+ mbMute = bMute;
+ mnMaskSet |= AVMEDIA_SETMASK_MUTE;
+}
+
+//------------------------------------------------------------------------
+
+sal_Bool MediaItem::isMute() const
+{
+ return mbMute;
+}
+
+//------------------------------------------------------------------------
+
+void MediaItem::setVolumeDB( sal_Int16 nDB )
+{
+ mnVolumeDB = nDB;
+ mnMaskSet |= AVMEDIA_SETMASK_VOLUMEDB;
+}
+
+//------------------------------------------------------------------------
+
+sal_Int16 MediaItem::getVolumeDB() const
+{
+ return mnVolumeDB;
+}
+
+//------------------------------------------------------------------------
+
+void MediaItem::setZoom( ::com::sun::star::media::ZoomLevel eZoom )
+{
+ meZoom = eZoom;
+ mnMaskSet |= AVMEDIA_SETMASK_ZOOM;
+}
+
+//------------------------------------------------------------------------
+
+::com::sun::star::media::ZoomLevel MediaItem::getZoom() const
+{
+ return meZoom;
+}
+
+}
diff --git a/avmedia/source/framework/mediamisc.cxx b/avmedia/source/framework/mediamisc.cxx
new file mode 100644
index 000000000000..b7807e767c6d
--- /dev/null
+++ b/avmedia/source/framework/mediamisc.cxx
@@ -0,0 +1,48 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <tools/resmgr.hxx>
+#include <svl/solar.hrc>
+#include <vcl/svapp.hxx>
+
+namespace avmedia {
+
+ResMgr* GetResMgr()
+{
+ static ResMgr* pResMgr = NULL;
+
+ if( !pResMgr )
+ {
+ ByteString aResMgrName( "avmedia" );
+
+ pResMgr = ResMgr::CreateResMgr( aResMgrName.GetBuffer(), Application::GetSettings().GetUILocale() );
+ }
+
+ return pResMgr;
+}
+
+} // namespace avemdia
diff --git a/avmedia/source/framework/mediaplayer.cxx b/avmedia/source/framework/mediaplayer.cxx
new file mode 100644
index 000000000000..caab783c6a7c
--- /dev/null
+++ b/avmedia/source/framework/mediaplayer.cxx
@@ -0,0 +1,166 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <avmedia/mediaplayer.hxx>
+#include <avmedia/mediawindow.hxx>
+#include <avmedia/mediaitem.hxx>
+#include "mediamisc.hxx"
+#include "mediacontrol.hrc"
+#include "helpids.hrc"
+
+#include <svl/stritem.hxx>
+#include <sfx2/app.hxx>
+#include <sfx2/sfxsids.hrc>
+#include <sfx2/bindings.hxx>
+#include <sfx2/dispatch.hxx>
+
+namespace avmedia
+{
+
+// ---------------
+// - MediaPlayer -
+// ---------------
+
+MediaPlayer::MediaPlayer( Window* _pParent, USHORT nId, SfxBindings* _pBindings, SfxChildWinInfo* pInfo ) :
+ SfxChildWindow( _pParent, nId )
+{
+ pWindow = new MediaFloater( _pBindings, this, _pParent );
+ eChildAlignment = SFX_ALIGN_NOALIGNMENT;
+ static_cast< MediaFloater* >( pWindow )->Initialize( pInfo );
+};
+
+// -----------------------------------------------------------------------------
+
+MediaPlayer::~MediaPlayer()
+{
+}
+
+// -----------------------------------------------------------------------------
+
+SFX_IMPL_DOCKINGWINDOW( MediaPlayer, SID_AVMEDIA_PLAYER )
+
+// ----------------
+// - MediaFloater -
+// ----------------
+
+MediaFloater::MediaFloater( SfxBindings* _pBindings, SfxChildWindow* pCW, Window* pParent ) :
+ SfxDockingWindow( _pBindings, pCW, pParent, WB_CLOSEABLE | WB_MOVEABLE | WB_SIZEABLE | WB_DOCKABLE ),
+ mpMediaWindow( new MediaWindow( this, true ) )
+{
+ const Size aSize( 378, 256 );
+
+ SetPosSizePixel( Point( 0, 0 ), aSize );
+ SetMinOutputSizePixel( aSize );
+ SetText( String( AVMEDIA_RESID( AVMEDIA_STR_MEDIAPLAYER ) ) );
+ implInit();
+ mpMediaWindow->show();
+}
+
+// -----------------------------------------------------------------------------
+
+MediaFloater::~MediaFloater()
+{
+ delete mpMediaWindow;
+ mpMediaWindow = NULL;
+}
+
+// -----------------------------------------------------------------------------
+
+void MediaFloater::implInit()
+{
+}
+
+// -------------------------------------------------------------------------
+
+void MediaFloater::Resize()
+{
+ SfxDockingWindow::Resize();
+
+ if( mpMediaWindow )
+ mpMediaWindow->setPosSize( Rectangle( Point(), GetOutputSizePixel() ) );
+}
+
+// -----------------------------------------------------------------------------
+
+void MediaFloater::ToggleFloatingMode()
+{
+ ::avmedia::MediaItem aRestoreItem;
+
+ mpMediaWindow->updateMediaItem( aRestoreItem );
+ delete mpMediaWindow;
+ mpMediaWindow = NULL;
+
+ SfxDockingWindow::ToggleFloatingMode();
+
+ mpMediaWindow = new MediaWindow( this, true );
+
+ mpMediaWindow->setPosSize( Rectangle( Point(), GetOutputSizePixel() ) );
+ mpMediaWindow->executeMediaItem( aRestoreItem );
+
+ Window* pWindow = mpMediaWindow->getWindow();
+
+ if( pWindow )
+ pWindow->SetHelpId( HID_AVMEDIA_PLAYERWINDOW );
+
+ mpMediaWindow->show();
+}
+
+// -----------------------------------------------------------------------------
+
+void MediaFloater::setURL( const ::rtl::OUString& rURL, bool bPlayImmediately )
+{
+ if( mpMediaWindow )
+ {
+ mpMediaWindow->setURL( rURL );
+
+ if( mpMediaWindow->isValid() && bPlayImmediately )
+ mpMediaWindow->start();
+ }
+}
+
+// -----------------------------------------------------------------------------
+
+const ::rtl::OUString& MediaFloater::getURL() const
+{
+ static const ::rtl::OUString aEmptyStr;
+ return( mpMediaWindow ? mpMediaWindow->getURL() : aEmptyStr );
+}
+
+// -----------------------------------------------------------------------------
+
+void MediaFloater::dispatchCurrentURL()
+{
+ SfxDispatcher* pDispatcher = GetBindings().GetDispatcher();
+
+ if( pDispatcher )
+ {
+ const SfxStringItem aMediaURLItem( SID_INSERT_AVMEDIA, getURL() );
+ pDispatcher->Execute( SID_INSERT_AVMEDIA, SFX_CALLMODE_RECORD, &aMediaURLItem, 0L );
+ }
+}
+
+}
diff --git a/avmedia/source/framework/mediatoolbox.cxx b/avmedia/source/framework/mediatoolbox.cxx
new file mode 100644
index 000000000000..2da70b056bfc
--- /dev/null
+++ b/avmedia/source/framework/mediatoolbox.cxx
@@ -0,0 +1,168 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <avmedia/mediatoolbox.hxx>
+#include <avmedia/mediaitem.hxx>
+#include "mediacontrol.hxx"
+
+#include <sfx2/app.hxx>
+#include <sfx2/bindings.hxx>
+#include <sfx2/dispatch.hxx>
+#include <sfx2/sfxsids.hrc>
+
+using namespace ::com::sun::star;
+
+namespace avmedia
+{
+
+// -----------------------
+// - MediaToolboxControl -
+// -----------------------
+
+class MediaToolBoxControl_Impl : public MediaControl
+{
+public:
+
+ MediaToolBoxControl_Impl( Window& rParent, MediaToolBoxControl& rControl );
+ ~MediaToolBoxControl_Impl();
+
+ void update();
+ void execute( const MediaItem& rItem );
+
+private:
+
+ MediaToolBoxControl* mpToolBoxControl;
+};
+
+// ---------------------------------------------------------------------
+
+MediaToolBoxControl_Impl::MediaToolBoxControl_Impl( Window& rParent, MediaToolBoxControl& rControl ) :
+ MediaControl( &rParent, MEDIACONTROLSTYLE_SINGLELINE ),
+ mpToolBoxControl( &rControl )
+{
+ SetSizePixel( getMinSizePixel() );
+}
+
+// ---------------------------------------------------------------------
+
+MediaToolBoxControl_Impl::~MediaToolBoxControl_Impl()
+{
+}
+
+// ---------------------------------------------------------------------
+
+void MediaToolBoxControl_Impl::update()
+{
+ mpToolBoxControl->implUpdateMediaControl();
+}
+
+// ---------------------------------------------------------------------
+
+void MediaToolBoxControl_Impl::execute( const MediaItem& rItem )
+{
+ mpToolBoxControl->implExecuteMediaControl( rItem );
+}
+
+// -----------------------
+// - MediaToolBoxControl -
+// -----------------------
+
+SFX_IMPL_TOOLBOX_CONTROL( ::avmedia::MediaToolBoxControl, ::avmedia::MediaItem );
+
+// -----------------------------------------------------------------------------
+
+MediaToolBoxControl::MediaToolBoxControl( USHORT nSlotId, USHORT nId, ToolBox& rTbx ) :
+ SfxToolBoxControl( nSlotId, nId, rTbx )
+{
+ rTbx.Invalidate();
+}
+
+// -----------------------------------------------------------------------------
+
+MediaToolBoxControl::~MediaToolBoxControl()
+{
+}
+
+// -----------------------------------------------------------------------------
+
+void MediaToolBoxControl::StateChanged( USHORT /* nSID */, SfxItemState eState, const SfxPoolItem* pState )
+
+{
+ MediaToolBoxControl_Impl* pCtrl = static_cast< MediaToolBoxControl_Impl* >( GetToolBox().GetItemWindow( GetId() ) );
+
+ DBG_ASSERT( pCtrl, "MediaToolBoxControl::StateChanged: media control not found" );
+
+ if( eState == SFX_ITEM_DISABLED )
+ {
+ pCtrl->Enable( false, false );
+ pCtrl->SetText( String() );
+
+ const MediaItem aEmptyMediaItem( 0, AVMEDIA_SETMASK_ALL );
+ pCtrl->setState( aEmptyMediaItem );
+ }
+ else
+ {
+ pCtrl->Enable( true, false );
+
+ const MediaItem* pMediaItem = PTR_CAST( MediaItem, pState );
+
+ if( pMediaItem && ( SFX_ITEM_AVAILABLE == eState ) )
+ pCtrl->setState( *pMediaItem );
+ }
+}
+
+// -----------------------------------------------------------------------------
+
+Window* MediaToolBoxControl::CreateItemWindow( Window *pParent )
+{
+ return( pParent ? new MediaToolBoxControl_Impl( *pParent, *this ) : NULL );
+}
+
+// -----------------------------------------------------------------------------
+
+void MediaToolBoxControl::implUpdateMediaControl()
+{
+ updateStatus( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:AVMediaToolBox" ) ) );
+}
+
+// -----------------------------------------------------------------------------
+
+void MediaToolBoxControl::implExecuteMediaControl( const MediaItem& rItem )
+{
+ MediaItem aExecItem( SID_AVMEDIA_TOOLBOX );
+ uno::Sequence< beans::PropertyValue > aArgs( 1 );
+ uno::Any aAny;
+
+ aExecItem.merge( rItem );
+ aExecItem.QueryValue( aAny );
+ aArgs[ 0 ].Name = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "AVMediaToolBox" ) );
+ aArgs[ 0 ].Value = aAny;
+
+ Dispatch( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:AVMediaToolBox" ) ), aArgs );
+}
+
+}
diff --git a/avmedia/source/framework/soundhandler.cxx b/avmedia/source/framework/soundhandler.cxx
new file mode 100644
index 000000000000..d24ae795fd76
--- /dev/null
+++ b/avmedia/source/framework/soundhandler.cxx
@@ -0,0 +1,563 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+//_________________________________________________________________________________________________________________
+// my own includes
+//_________________________________________________________________________________________________________________
+
+#ifndef __FRAMEWORK_DISPATCH_SOUNDHANDLER_HXX_
+#include "soundhandler.hxx"
+#endif
+
+#ifndef __COMPHELPER_MEDIADESCRIPTOR_HXX_
+#include <comphelper/mediadescriptor.hxx>
+#endif
+
+//_________________________________________________________________________________________________________________
+// interface includes
+//_________________________________________________________________________________________________________________
+#include <com/sun/star/io/XInputStream.hpp>
+#include <com/sun/star/frame/DispatchResultState.hpp>
+
+//_________________________________________________________________________________________________________________
+// includes of other projects
+//_________________________________________________________________________________________________________________
+#include <comphelper/sequenceashashmap.hxx>
+#include <rtl/ustrbuf.hxx>
+
+#include <cppuhelper/typeprovider.hxx>
+#include <cppuhelper/factory.hxx>
+
+//_________________________________________________________________________________________________________________
+// namespace
+//_________________________________________________________________________________________________________________
+
+namespace avmedia{
+
+//_________________________________________________________________________________________________________________
+// non exported const
+//_________________________________________________________________________________________________________________
+
+//_________________________________________________________________________________________________________________
+// non exported definitions
+//_________________________________________________________________________________________________________________
+
+//_________________________________________________________________________________________________________________
+// declarations
+//_________________________________________________________________________________________________________________
+
+//*****************************************************************************************************************
+// XInterface, XTypeProvider, XServiceInfo
+//*****************************************************************************************************************
+
+void SAL_CALL SoundHandler::acquire() throw()
+{
+ /* Don't use mutex in methods of XInterface! */
+ OWeakObject::acquire();
+}
+
+void SAL_CALL SoundHandler::release() throw()
+{
+ /* Don't use mutex in methods of XInterface! */
+ OWeakObject::release();
+}
+
+css::uno::Any SAL_CALL SoundHandler::queryInterface( const css::uno::Type& aType ) throw( css::uno::RuntimeException )
+{
+ /* Attention: Don't use mutex or guard in this method!!! Is a method of XInterface. */
+ /* Ask for my own supported interfaces ...*/
+ css::uno::Any aReturn( ::cppu::queryInterface( aType,
+ static_cast< css::lang::XTypeProvider* >(this),
+ static_cast< css::lang::XServiceInfo* >(this),
+ static_cast< css::frame::XNotifyingDispatch* >(this),
+ static_cast< css::frame::XDispatch* >(this),
+ static_cast< css::document::XExtendedFilterDetection* >(this)));
+ /* If searched interface not supported by this class ... */
+ if ( aReturn.hasValue() == sal_False )
+ {
+ /* ... ask baseclass for interfaces! */
+ aReturn = OWeakObject::queryInterface( aType );
+ }
+ /* Return result of this search. */
+ return aReturn;
+}
+
+css::uno::Sequence< sal_Int8 > SAL_CALL SoundHandler::getImplementationId() throw( css::uno::RuntimeException )
+{
+ /* Create one Id for all instances of this class. */
+ /* Use ethernet address to do this! (sal_True) */
+ /* Optimize this method */
+ /* We initialize a static variable only one time. And we don't must use a mutex at every call! */
+ /* For the first call; pID is NULL - for the second call pID is different from NULL! */
+ static ::cppu::OImplementationId* pID = NULL ;
+ if ( pID == NULL )
+ {
+ /* Ready for multithreading; get global mutex for first call of this method only! see before */
+ ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() );
+ /* Control these pointer again ... it can be, that another instance will be faster then these! */
+ if ( pID == NULL )
+ {
+ /* Create a new static ID ... */
+ static ::cppu::OImplementationId aID( sal_False );
+ /* ... and set his address to static pointer! */
+ pID = &aID ;
+ }
+ }
+ return pID->getImplementationId();
+}
+
+css::uno::Sequence< css::uno::Type > SAL_CALL SoundHandler::getTypes() throw( css::uno::RuntimeException )
+{
+ /* Optimize this method ! */
+ /* We initialize a static variable only one time. */
+ /* And we don't must use a mutex at every call! */
+ /* For the first call; pTypeCollection is NULL - */
+ /* for the second call pTypeCollection is different from NULL! */
+ static ::cppu::OTypeCollection* pTypeCollection = NULL ;
+ if ( pTypeCollection == NULL )
+ {
+ /* Ready for multithreading; get global mutex for first call of this method only! see before */
+ ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() );
+ /* Control these pointer again ... it can be, that another instance will be faster then these! */
+ if ( pTypeCollection == NULL )
+ {
+ /* Create a static typecollection ... */
+ static ::cppu::OTypeCollection aTypeCollection
+ (
+ ::getCppuType(( const ::com::sun::star::uno::Reference< css::lang::XTypeProvider >*)NULL ),
+ ::getCppuType(( const ::com::sun::star::uno::Reference< css::lang::XServiceInfo >*)NULL ),
+ ::getCppuType(( const ::com::sun::star::uno::Reference< css::frame::XNotifyingDispatch >*)NULL ),
+ ::getCppuType(( const ::com::sun::star::uno::Reference< css::frame::XDispatch >*)NULL ),
+ ::getCppuType(( const ::com::sun::star::uno::Reference< css::document::XExtendedFilterDetection >*)NULL )
+ );
+ /* ... and set his address to static pointer! */
+ pTypeCollection = &aTypeCollection ;
+ }
+ }
+ return pTypeCollection->getTypes();
+}
+
+#define DECLARE_ASCII( SASCIIVALUE ) \
+ ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( SASCIIVALUE ) )
+
+#define IMPLEMENTATIONNAME_SOUNDHANDLER DECLARE_ASCII("com.sun.star.comp.framework.SoundHandler")
+#define SERVICENAME_CONTENTHANDLER DECLARE_ASCII("com.sun.star.frame.ContentHandler")
+
+/*===========================================================================================================*/
+/* XServiceInfo */
+/*===========================================================================================================*/
+::rtl::OUString SAL_CALL SoundHandler::getImplementationName() throw( css::uno::RuntimeException )
+{
+ return impl_getStaticImplementationName();
+}
+
+/*===========================================================================================================*/
+/* XServiceInfo */
+/*===========================================================================================================*/
+sal_Bool SAL_CALL SoundHandler::supportsService( const ::rtl::OUString& sServiceName ) throw( css::uno::RuntimeException )
+{
+ /* Set default return value. */
+ sal_Bool bReturn = sal_False ;
+ /* Get names of all supported servicenames. */
+ css::uno::Sequence< ::rtl::OUString > seqServiceNames = getSupportedServiceNames();
+ const ::rtl::OUString* pArray = seqServiceNames.getConstArray();
+ sal_Int32 nCounter = 0;
+ sal_Int32 nLength = seqServiceNames.getLength();
+ /* Search for right name in list. */
+ while (
+ ( nCounter < nLength ) &&
+ ( bReturn == sal_False )
+ )
+ {
+ /* Is name was found, say "YES, SERVICE IS SUPPORTED." and break loop. */
+ if ( pArray[nCounter] == sServiceName )
+ {
+ bReturn = sal_True ;
+ }
+ /* Else step to next element in list. */
+ ++nCounter;
+ }
+ /* Return state of search. */
+ return bReturn;
+}
+
+/*===========================================================================================================*/
+/* XServiceInfo */
+/*===========================================================================================================*/
+css::uno::Sequence< ::rtl::OUString > SAL_CALL SoundHandler::getSupportedServiceNames() throw( css::uno::RuntimeException )
+{
+ return impl_getStaticSupportedServiceNames();
+}
+
+/*===========================================================================================================*/
+/* Helper for XServiceInfo */
+/*===========================================================================================================*/
+css::uno::Sequence< ::rtl::OUString > SoundHandler::impl_getStaticSupportedServiceNames()
+{
+ css::uno::Sequence< ::rtl::OUString > seqServiceNames( 1 );
+ seqServiceNames.getArray() [0] = SERVICENAME_CONTENTHANDLER;
+ return seqServiceNames;
+}
+
+/*===========================================================================================================*/
+/* Helper for XServiceInfo */
+/*===========================================================================================================*/
+::rtl::OUString SoundHandler::impl_getStaticImplementationName()
+{
+ return IMPLEMENTATIONNAME_SOUNDHANDLER;
+}
+
+css::uno::Reference< css::uno::XInterface > SAL_CALL SoundHandler::impl_createInstance( const css::uno::Reference< css::lang::XMultiServiceFactory >& xServiceManager ) throw( css::uno::Exception )
+{
+ /* create new instance of service */
+ SoundHandler* pClass = new SoundHandler( xServiceManager );
+ /* hold it alive by increasing his ref count!!! */
+ css::uno::Reference< css::uno::XInterface > xService( static_cast< ::cppu::OWeakObject* >(pClass), css::uno::UNO_QUERY );
+ /* initialize new service instance ... he can use his own refcount ... we hold it! */
+ pClass->impl_initService();
+ /* return new created service as reference */
+ return xService;
+}
+
+css::uno::Reference< css::lang::XSingleServiceFactory > SoundHandler::impl_createFactory( const css::uno::Reference< css::lang::XMultiServiceFactory >& xServiceManager )
+{
+ css::uno::Reference< css::lang::XSingleServiceFactory > xReturn ( cppu::createSingleFactory (
+ xServiceManager,
+ SoundHandler::impl_getStaticImplementationName(),
+ SoundHandler::impl_createInstance,
+ SoundHandler::impl_getStaticSupportedServiceNames()
+ )
+ );
+ return xReturn;
+}
+
+void SAL_CALL SoundHandler::impl_initService()
+{
+}
+
+
+/*-************************************************************************************************************//**
+ @short standard ctor
+ @descr These initialize a new instance of this class with needed informations for work.
+
+ @seealso using at owner
+
+ @param "xFactory", reference to service manager for creation of new services
+ @return -
+
+ @onerror Show an assertion and do nothing else.
+ @threadsafe yes
+*//*-*************************************************************************************************************/
+SoundHandler::SoundHandler( const css::uno::Reference< css::lang::XMultiServiceFactory >& xFactory )
+ // Init baseclasses first
+ : ThreadHelpBase ( )
+ , ::cppu::OWeakObject ( )
+ // Init member
+ , m_bError ( false )
+ , m_xFactory ( xFactory )
+{
+ m_aUpdateTimer.SetTimeoutHdl(LINK(this, SoundHandler, implts_PlayerNotify));
+}
+
+/*-************************************************************************************************************//**
+ @short standard dtor
+ @descr -
+
+ @seealso -
+
+ @param -
+ @return -
+
+ @onerror -
+ @threadsafe -
+*//*-*************************************************************************************************************/
+SoundHandler::~SoundHandler()
+{
+ if (m_xListener.is())
+ {
+ css::frame::DispatchResultEvent aEvent;
+ aEvent.State = css::frame::DispatchResultState::FAILURE;
+ m_xListener->dispatchFinished(aEvent);
+ m_xListener = css::uno::Reference< css::frame::XDispatchResultListener >();
+ }
+}
+
+/*-************************************************************************************************************//**
+ @interface ::com::sun::star::frame::XDispatch
+
+ @short try to load audio file
+ @descr This method try to load given audio file by URL and play it. We use vcl/Sound class to do that.
+ Playing of sound is asynchron everytime.
+
+ @attention We must hold us alive by ourself ... because we use async. vcl sound player ... but playing is started
+ in async interface call "dispatch()" too. And caller forget us imediatly. But then our uno ref count
+ will decreased to 0 and will die. The only solution is to use own reference to our implementation.
+ But we do it for realy started jobs only and release it during call back of vcl.
+
+ @seealso class vcl/Sound
+ @seealso method implts_PlayerNotify()
+
+ @param "aURL" , URL to dispatch.
+ @param "lArguments", list of optional arguments.
+ @return -
+
+ @onerror We do nothing.
+ @threadsafe yes
+*//*-*************************************************************************************************************/
+void SAL_CALL SoundHandler::dispatchWithNotification(const css::util::URL& aURL ,
+ const css::uno::Sequence< css::beans::PropertyValue >& lDescriptor,
+ const css::uno::Reference< css::frame::XDispatchResultListener >& xListener ) throw(css::uno::RuntimeException)
+{
+ // SAFE {
+ const ::vos::OGuard aLock( m_aLock );
+
+ {
+ //close streams otherwise on windows we can't reopen the file in the
+ //media player when we pass the url to directx as it'll already be open
+ ::comphelper::MediaDescriptor aDescriptor(lDescriptor);
+
+ css::uno::Reference< css::io::XInputStream > xInputStream =
+ aDescriptor.getUnpackedValueOrDefault(::comphelper::MediaDescriptor::PROP_INPUTSTREAM(),
+ css::uno::Reference< css::io::XInputStream >());
+ if (xInputStream.is()) xInputStream->closeInput();
+ }
+
+ // If player currently used for other dispatch() requests ...
+ // cancel it by calling stop()!
+ m_aUpdateTimer.Stop();
+ if (m_xPlayer.is())
+ {
+ if (m_xPlayer->isPlaying())
+ m_xPlayer->stop();
+ m_xPlayer.clear();
+ }
+
+ // Try to initialize player.
+ m_xListener = xListener;
+ try
+ {
+ m_bError = false;
+ m_xPlayer.set( avmedia::MediaWindow::createPlayer( aURL.Complete ), css::uno::UNO_QUERY_THROW );
+ // OK- we can start async playing ...
+ // Count this request and initialize self-holder against dieing by uno ref count ...
+ m_xSelfHold = css::uno::Reference< css::uno::XInterface >(static_cast< ::cppu::OWeakObject* >(this), css::uno::UNO_QUERY);
+ m_xPlayer->start();
+ m_aUpdateTimer.SetTimeout( 200 );
+ m_aUpdateTimer.Start();
+ }
+ catch( css::uno::Exception& e )
+ {
+ m_bError = true;
+ (void)e;
+ m_xPlayer.clear();
+ }
+
+ // } SAFE
+}
+
+void SAL_CALL SoundHandler::dispatch( const css::util::URL& aURL ,
+ const css::uno::Sequence< css::beans::PropertyValue >& lArguments ) throw( css::uno::RuntimeException )
+{
+ dispatchWithNotification(aURL, lArguments, css::uno::Reference< css::frame::XDispatchResultListener >());
+}
+
+/*-************************************************************************************************************//**
+ @interface ::com::sun::star::document::XExtendedFilterDetection
+
+ @short try to detect file (given as argument included in "lDescriptor")
+ @descr We try to detect, if given file could be handled by this class and is a well known one.
+ If it is - we return right internal type name - otherwise we return nothing!
+ So call can search for another detect service and ask him too.
+
+ @attention a) We don't need any mutex here ... because we don't use any member!
+ b) Dont' use internal player instance "m_pPlayer" to detect given sound file!
+ It's not neccessary to do that ... and we can use temp. variable to do the same.
+ This way is easy - we don't must synchronize it with currently played sounds!
+ Another reason to do so ... We are a listener on our internal ma_Player object.
+ If you would call "IsSoundFile()" on this instance, he would call us back and
+ we make some uneccssary things ...
+
+ @seealso -
+
+ @param "lDescriptor", description of file to detect
+ @return Internal type name which match this file ... or nothing if it is unknown.
+
+ @onerror We return nothing.
+ @threadsafe yes
+*//*-*************************************************************************************************************/
+::rtl::OUString SAL_CALL SoundHandler::detect( css::uno::Sequence< css::beans::PropertyValue >& lDescriptor ) throw( css::uno::RuntimeException )
+{
+ // Our default is "nothing". So we can return it, if detection failed or fily type is realy unknown.
+ ::rtl::OUString sTypeName;
+
+ // Analyze given descriptor to find filename or input stream or ...
+ ::comphelper::MediaDescriptor aDescriptor(lDescriptor);
+ ::rtl::OUString sURL = aDescriptor.getUnpackedValueOrDefault(::comphelper::MediaDescriptor::PROP_URL(), ::rtl::OUString());
+
+ if (
+ (sURL.getLength() ) &&
+ (avmedia::MediaWindow::isMediaURL(sURL))
+ )
+ {
+ // If the file type is supported depends on the OS, so...
+ // I think we can the following ones:
+ // a) look for given extension of url to map our type decision HARD CODED!!!
+ // b) return preferred type every time... it's easy :-)
+ sTypeName = ::rtl::OUString::createFromAscii("wav_Wave_Audio_File");
+ aDescriptor[::comphelper::MediaDescriptor::PROP_TYPENAME()] <<= sTypeName;
+ aDescriptor >> lDescriptor;
+ }
+
+ // Return our decision.
+ return sTypeName;
+}
+
+/*-************************************************************************************************************//**
+ @short call back of sound player
+ @descr Our player call us back to give us some informations.
+ We use this informations to callback our might existing listener.
+
+ @seealso method dispatchWithNotification()
+
+ @param -
+ @return 0 everytime ... it doesnt matter for us.
+
+ @onerror -
+ @threadsafe yes
+*//*-*************************************************************************************************************/
+IMPL_LINK( SoundHandler, implts_PlayerNotify, void*, EMPTYARG )
+{
+ // SAFE {
+ ::vos::OClearableGuard aLock( m_aLock );
+
+ if (m_xPlayer.is() && m_xPlayer->isPlaying() && m_xPlayer->getMediaTime() < m_xPlayer->getDuration())
+ {
+ m_aUpdateTimer.Start();
+ return 0L;
+ }
+ m_xPlayer.clear();
+
+ // We use m_xSelfHold to let us die ... but we must live till real finishing of this method too!!!
+ // So we SHOULD use another "self-holder" temp. to provide that ...
+ css::uno::Reference< css::uno::XInterface > xOperationHold = m_xSelfHold;
+ m_xSelfHold = css::uno::Reference< css::uno::XInterface >();
+
+ // notify might existing listener
+ // And forget this listener!
+ // Because the corresponding dispatch was finished.
+ if (m_xListener.is())
+ {
+ css::frame::DispatchResultEvent aEvent;
+ if (!m_bError)
+ aEvent.State = css::frame::DispatchResultState::SUCCESS;
+ else
+ aEvent.State = css::frame::DispatchResultState::FAILURE;
+ m_xListener->dispatchFinished(aEvent);
+ m_xListener = css::uno::Reference< css::frame::XDispatchResultListener >();
+ }
+
+ // } SAFE
+ //release aLock before end of method at which point xOperationHold goes out of scope and pThis dies
+ aLock.clear();
+ return 0;
+}
+
+} // namespace framework
+
+// ------------------------------------------
+// - component_getImplementationEnvironment -
+// ------------------------------------------
+
+extern "C" void SAL_CALL component_getImplementationEnvironment( const sal_Char ** ppEnvTypeName, uno_Environment ** /*ppEnv*/ )
+{
+ *ppEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME;
+}
+
+// -----------------------
+// - component_writeInfo -
+// -----------------------
+
+extern "C" sal_Bool SAL_CALL component_writeInfo( void* /*pServiceManager*/, void* pRegistryKey )
+{
+ sal_Bool bRet = sal_False;
+
+ if( pRegistryKey )
+ {
+ try
+ {
+ rtl::OUString sKeyName = DECLARE_ASCII( "/" );
+ sKeyName += avmedia::SoundHandler::impl_getStaticImplementationName();
+ sKeyName += DECLARE_ASCII( "/UNO/SERVICES" );
+ css::uno::Reference< css::registry::XRegistryKey > xNewKey(
+ static_cast< css::registry::XRegistryKey* >( pRegistryKey )->createKey(sKeyName));
+
+ if ( xNewKey.is() == sal_True )
+ {
+ css::uno::Sequence< ::rtl::OUString > seqServiceNames = avmedia::SoundHandler::impl_getStaticSupportedServiceNames();
+ const ::rtl::OUString* pArray = seqServiceNames.getArray();
+ sal_Int32 nLength = seqServiceNames.getLength();
+ for ( sal_Int32 nCounter = 0; nCounter < nLength; ++nCounter )
+ xNewKey->createKey( pArray[nCounter] );
+ }
+
+ bRet = sal_True;
+ }
+ catch( css::registry::InvalidRegistryException& )
+ {
+ OSL_ENSURE( sal_False, "### InvalidRegistryException!" );
+ }
+ }
+
+ return bRet;
+}
+
+// ------------------------
+// - component_getFactory -
+// ------------------------
+
+extern "C" void* SAL_CALL component_getFactory(const sal_Char* pImplementationName, void* pServiceManager, void* /*pRegistryKey*/ )
+{
+ void* pReturn = NULL;
+ if (pServiceManager != NULL )
+ {
+ /* Define variables which are used in following macros. */
+ css::uno::Reference< ::com::sun::star::lang::XSingleServiceFactory > xFactory;
+ css::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > xServiceManager;
+ xServiceManager = reinterpret_cast< ::com::sun::star::lang::XMultiServiceFactory* >( pServiceManager ) ;
+
+ if ( avmedia::SoundHandler::impl_getStaticImplementationName().equals( ::rtl::OUString::createFromAscii( pImplementationName ) ) )
+ xFactory = avmedia::SoundHandler::impl_createFactory( xServiceManager );
+
+ if ( xFactory.is() == sal_True )
+ {
+ xFactory->acquire();
+ pReturn = xFactory.get();
+ }
+ }
+ /* Return with result of this operation. */
+ return pReturn;
+}
diff --git a/avmedia/source/framework/soundhandler.hxx b/avmedia/source/framework/soundhandler.hxx
new file mode 100644
index 000000000000..55d30536d8ce
--- /dev/null
+++ b/avmedia/source/framework/soundhandler.hxx
@@ -0,0 +1,187 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef __FRAMEWORK_HANDLER_SOUNDHANDLER_HXX_
+#define __FRAMEWORK_HANDLER_SOUNDHANDLER_HXX_
+
+//_________________________________________________________________________________________________________________
+// interface includes
+//_________________________________________________________________________________________________________________
+
+#include <com/sun/star/lang/XTypeProvider.hpp>
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+#include <com/sun/star/frame/XNotifyingDispatch.hpp>
+#include <com/sun/star/frame/XStatusListener.hpp>
+#include <com/sun/star/frame/XFrame.hpp>
+#include <com/sun/star/document/XExtendedFilterDetection.hpp>
+#include <com/sun/star/media/XPlayer.hpp>
+#include <com/sun/star/beans/PropertyValue.hpp>
+#include <com/sun/star/util/URL.hpp>
+
+#include <com/sun/star/lang/XServiceInfo.hpp>
+#include <com/sun/star/lang/XSingleServiceFactory.hpp>
+
+//_________________________________________________________________________________________________________________
+// other includes
+//_________________________________________________________________________________________________________________
+#include <cppuhelper/weak.hxx>
+
+#include <vcl/timer.hxx>
+#include <tools/link.hxx>
+#include <avmedia/mediawindow.hxx>
+#include <vos/mutex.hxx>
+
+namespace css = ::com::sun::star;
+
+//_________________________________________________________________________________________________________________
+// namespace
+//_________________________________________________________________________________________________________________
+
+namespace avmedia{
+
+//_________________________________________________________________________________________________________________
+// exported const
+//_________________________________________________________________________________________________________________
+
+//_________________________________________________________________________________________________________________
+// exported definitions
+//_________________________________________________________________________________________________________________
+
+struct ThreadHelpBase
+{
+ public:
+ mutable ::vos::OMutex m_aLock;
+};
+
+/*-************************************************************************************************************//**
+ @short handler to detect and play sounds ("wav" and "au" only!)
+ @descr Register this implementation as a content handler to detect and/or play wav- and au-sounds.
+ It doesn't depend from the target platform. But one instance of this class
+ can play one sound at the same time only. Means every new dispatch request will stop the
+ might still running one. So we support one operation/one URL/one listener at the same time
+ only.
+
+ @devstatus ready
+ @threadsafe yes
+*//*-*************************************************************************************************************/
+class SoundHandler : // interfaces
+ public css::lang::XTypeProvider
+ , public css::lang::XServiceInfo
+ , public css::frame::XNotifyingDispatch // => XDispatch
+ , public css::document::XExtendedFilterDetection
+ // baseclasses
+ // Order is neccessary for right initialization!
+ , private ThreadHelpBase
+ , public ::cppu::OWeakObject
+{
+ //-------------------------------------------------------------------------------------------------------------
+ // public methods
+ //-------------------------------------------------------------------------------------------------------------
+ public:
+
+ //---------------------------------------------------------------------------------------------------------
+ // constructor / destructor
+ //---------------------------------------------------------------------------------------------------------
+ SoundHandler( const css::uno::Reference< css::lang::XMultiServiceFactory >& xFactory );
+ virtual ~SoundHandler( );
+
+ //---------------------------------------------------------------------------------------------------------
+ // XInterface, XTypeProvider, XServiceInfo
+ //---------------------------------------------------------------------------------------------------------
+ virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type& aType ) throw( css::uno::RuntimeException );
+ virtual void SAL_CALL acquire() throw();
+ virtual void SAL_CALL release() throw();
+ virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes () throw( css::uno::RuntimeException );
+ virtual css::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() throw( css::uno::RuntimeException );
+
+
+ /* interface XServiceInfo */
+ virtual ::rtl::OUString SAL_CALL getImplementationName ( ) throw( css::uno::RuntimeException );
+ virtual sal_Bool SAL_CALL supportsService ( const ::rtl::OUString& sServiceName ) throw( css::uno::RuntimeException );
+ virtual css::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames ( ) throw( css::uno::RuntimeException );
+ /* Helper for XServiceInfo */
+ static css::uno::Sequence< ::rtl::OUString > SAL_CALL impl_getStaticSupportedServiceNames( );
+ static ::rtl::OUString SAL_CALL impl_getStaticImplementationName ( );
+ /* Helper for registry */
+ static css::uno::Reference< css::uno::XInterface > SAL_CALL impl_createInstance ( const css::uno::Reference< css::lang::XMultiServiceFactory >& xServiceManager ) throw( css::uno::Exception );
+ static css::uno::Reference< css::lang::XSingleServiceFactory > SAL_CALL impl_createFactory ( const css::uno::Reference< css::lang::XMultiServiceFactory >& xServiceManager );
+ /* Helper for initialization of service by using own reference! */
+ virtual void SAL_CALL impl_initService ( );
+
+ //---------------------------------------------------------------------------------------------------------
+ // XNotifyingDispatch
+ //---------------------------------------------------------------------------------------------------------
+ virtual void SAL_CALL dispatchWithNotification(const css::util::URL& aURL ,
+ const css::uno::Sequence< css::beans::PropertyValue >& lArguments,
+ const css::uno::Reference< css::frame::XDispatchResultListener >& xListener ) throw(css::uno::RuntimeException);
+
+ //---------------------------------------------------------------------------------------------------------
+ // XDispatch
+ //---------------------------------------------------------------------------------------------------------
+ virtual void SAL_CALL dispatch ( const css::util::URL& aURL ,
+ const css::uno::Sequence< css::beans::PropertyValue >& lArguments ) throw( css::uno::RuntimeException );
+ // not supported !
+ virtual void SAL_CALL addStatusListener ( const css::uno::Reference< css::frame::XStatusListener >& /*xListener*/ ,
+ const css::util::URL& /*aURL*/ ) throw( css::uno::RuntimeException ) {};
+ virtual void SAL_CALL removeStatusListener ( const css::uno::Reference< css::frame::XStatusListener >& /*xListener*/ ,
+ const css::util::URL& /*aURL*/ ) throw( css::uno::RuntimeException ) {};
+
+ //---------------------------------------------------------------------------------------------------------
+ // XExtendedFilterDetection
+ //---------------------------------------------------------------------------------------------------------
+ virtual ::rtl::OUString SAL_CALL detect ( css::uno::Sequence< css::beans::PropertyValue >& lDescriptor ) throw( css::uno::RuntimeException );
+
+ //-------------------------------------------------------------------------------------------------------------
+ // protected methods
+ //-------------------------------------------------------------------------------------------------------------
+ protected:
+
+ //-------------------------------------------------------------------------------------------------------------
+ // private methods
+ //-------------------------------------------------------------------------------------------------------------
+ private:
+ DECL_LINK( implts_PlayerNotify, void* );
+
+ //-------------------------------------------------------------------------------------------------------------
+ // variables
+ // (should be private everyway!)
+ //-------------------------------------------------------------------------------------------------------------
+ private:
+
+ bool m_bError;
+ css::uno::Reference< css::lang::XMultiServiceFactory > m_xFactory ; /// global uno service factory to create new services
+ css::uno::Reference< css::uno::XInterface > m_xSelfHold ; /// we must protect us against dieing during async(!) dispatch() call!
+ css::uno::Reference< css::media::XPlayer > m_xPlayer ; /// uses avmedia player to play sounds ...
+
+ css::uno::Reference< css::frame::XDispatchResultListener > m_xListener ;
+ Timer m_aUpdateTimer;
+
+}; // class SoundHandler
+
+} // namespace avmedia
+
+#endif // #ifndef __FRAMEWORK_HANDLER_SOUNDHANDLER_HXX_
diff --git a/avmedia/source/framework/soundhandler.xml b/avmedia/source/framework/soundhandler.xml
new file mode 100644
index 000000000000..fceeffbde0e3
--- /dev/null
+++ b/avmedia/source/framework/soundhandler.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE module-description PUBLIC "-//StarOffice//DTD ComponentDescription 1.0//EN" "module-description.dtd">
+
+<module-description xmlns:xlink="http://www.w3.org/1999/xlink">
+
+ <module-name> avmedia </module-name>
+
+ <component-description>
+ <author> Andreas Schluens </author>
+ <name> com.sun.star.comp.framework.SoundHandler </name>
+ <description>
+ Implements a handler service to detect and/or play audio files.
+ supported formats: wav/au
+ </description>
+ <loader-name> com.sun.star.loader.SharedLibrary </loader-name>
+ <language> c++ </language>
+ <status value="final"/>
+ <supported-service> com.sun.star.frame.ContentHandler </supported-service>
+ </component-description>
+
+ <project-build-dependency> cppu </project-build-dependency>
+ <project-build-dependency> cppuhelper </project-build-dependency>
+ <project-build-dependency> vos </project-build-dependency>
+ <project-build-dependency> sal </project-build-dependency>
+ <project-build-dependency> tools </project-build-dependency>
+ <project-build-dependency> svtools </project-build-dependency>
+ <project-build-dependency> toolkit </project-build-dependency>
+ <project-build-dependency> sv </project-build-dependency>
+ <project-build-dependency> comphelper </project-build-dependency>
+ <project-build-dependency> unotools </project-build-dependency>
+ <project-build-dependency> ucbhelper </project-build-dependency>
+ <project-build-dependency> svl </project-build-dependency>
+ <project-build-dependency> sot </project-build-dependency>
+
+ <runtime-module-dependency> cppu2 </runtime-module-dependency>
+ <runtime-module-dependency> cppuhelper </runtime-module-dependency>
+ <runtime-module-dependency> vos2$(COM) </runtime-module-dependency>
+ <runtime-module-dependency> sal2 </runtime-module-dependency>
+ <runtime-module-dependency> tl </runtime-module-dependency>
+ <runtime-module-dependency> svt </runtime-module-dependency>
+ <runtime-module-dependency> svl </runtime-module-dependency>
+ <runtime-module-dependency> tk </runtime-module-dependency>
+ <runtime-module-dependency> sv </runtime-module-dependency>
+ <runtime-module-dependency> comphelp2 </runtime-module-dependency>
+ <runtime-module-dependency> utl </runtime-module-dependency>
+ <runtime-module-dependency> ucb </runtime-module-dependency>
+ <runtime-module-dependency> sot </runtime-module-dependency>
+
+</module-description>
diff --git a/avmedia/source/inc/mediamisc.hxx b/avmedia/source/inc/mediamisc.hxx
new file mode 100644
index 000000000000..fd89e9d4abde
--- /dev/null
+++ b/avmedia/source/inc/mediamisc.hxx
@@ -0,0 +1,45 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+class ResMgr;
+
+#define AVMEDIA_RESID( nId ) ResId( nId, * ::avmedia::GetResMgr() )
+
+#ifdef WNT
+#define AVMEDIA_MANAGER_SERVICE_NAME "com.sun.star.media.Manager_DirectX"
+#else
+#ifdef QUARTZ
+#define AVMEDIA_MANAGER_SERVICE_NAME "com.sun.star.comp.avmedia.Manager_QuickTime"
+#else
+#define AVMEDIA_MANAGER_SERVICE_NAME "com.sun.star.media.Manager_Java"
+#endif
+#endif
+
+namespace avmedia
+{
+ ResMgr* GetResMgr();
+}
diff --git a/avmedia/source/java/FrameGrabber.java b/avmedia/source/java/FrameGrabber.java
new file mode 100644
index 000000000000..1a0deda4ce57
--- /dev/null
+++ b/avmedia/source/java/FrameGrabber.java
@@ -0,0 +1,190 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+import com.sun.star.uno.UnoRuntime;
+import com.sun.star.uno.XComponentContext;
+import com.sun.star.uno.AnyConverter;
+import com.sun.star.uno.IQueryInterface;
+import com.sun.star.lang.XInitialization;
+import com.sun.star.lang.XEventListener;
+import com.sun.star.awt.*;
+import com.sun.star.media.*;
+import com.sun.star.graphic.*;
+
+// -----------------
+// - Player Window -
+// -----------------
+
+public class FrameGrabber implements com.sun.star.lang.XServiceInfo,
+ com.sun.star.media.XFrameGrabber
+{
+ private com.sun.star.lang.XMultiServiceFactory maFactory = null;
+ private javax.media.Player maPlayer = null;
+ private javax.media.control.FrameGrabbingControl maFrameGrabbingControl = null;
+
+ // -------------------------------------------------------------------------
+
+ public FrameGrabber( com.sun.star.lang.XMultiServiceFactory aFactory, String aURL )
+ {
+ maFactory = aFactory;
+
+ try
+ {
+ maPlayer = javax.media.Manager.createRealizedPlayer( new java.net.URL( aURL ) );
+ }
+ catch( java.net.MalformedURLException e )
+ {
+ }
+ catch( java.io.IOException e )
+ {
+ }
+ catch( javax.media.NoPlayerException e )
+ {
+ }
+ catch( javax.media.CannotRealizeException e )
+ {
+ }
+ catch( java.lang.Exception e )
+ {
+ }
+
+ if( maPlayer != null )
+ {
+ maFrameGrabbingControl = (javax.media.control.FrameGrabbingControl) maPlayer.getControl(
+ "javax.media.control.FrameGrabbingControl" );
+ }
+ }
+
+ // -------------------------------------------------------------------------
+
+ public com.sun.star.graphic.XGraphic implImageToXGraphic( java.awt.Image aImage )
+ {
+ com.sun.star.graphic.XGraphic aRet = null;
+
+ if( maFactory != null && aImage != null )
+ {
+ if( aImage instanceof java.awt.image.BufferedImage )
+ {
+ java.io.File aTempFile = null;
+
+ try
+ {
+ aTempFile = java.io.File.createTempFile( "sv0", ".png" );
+
+ if( aTempFile.canWrite() )
+ {
+ javax.imageio.ImageIO.write( (java.awt.image.BufferedImage) aImage, "png", aTempFile );
+
+ com.sun.star.graphic.XGraphicProvider aProvider =
+ (com.sun.star.graphic.XGraphicProvider) UnoRuntime.queryInterface(
+ com.sun.star.graphic.XGraphicProvider.class,
+ maFactory.createInstance("com.sun.star.graphic.GraphicProvider") );
+
+ if( aProvider != null )
+ {
+ com.sun.star.beans.PropertyValue[] aArgs = new com.sun.star.beans.PropertyValue[ 1 ];
+
+ aArgs[ 0 ] = new com.sun.star.beans.PropertyValue();
+ aArgs[ 0 ].Name = "URL";
+ aArgs[ 0 ].Value = "file://" + aTempFile.toString();
+
+ aRet = aProvider.queryGraphic( aArgs );
+ }
+ }
+ }
+ catch( java.lang.IllegalArgumentException aExcp )
+ {
+ }
+ catch( java.io.IOException aExcp )
+ {
+ }
+ catch( com.sun.star.uno.Exception aExcp )
+ {
+ }
+
+ if( aTempFile != null )
+ aTempFile.delete();
+ }
+ }
+
+ return aRet;
+ }
+
+ // -----------------
+ // - XFrameGrabber -
+ // -----------------
+
+ public synchronized com.sun.star.graphic.XGraphic grabFrame( double fMediaTime )
+ {
+ com.sun.star.graphic.XGraphic aRet = null;
+
+ if( maFrameGrabbingControl != null )
+ {
+ if( fMediaTime >= 0.0 && fMediaTime <= maPlayer.getDuration().getSeconds() )
+ {
+ maPlayer.setMediaTime( new javax.media.Time( fMediaTime ) );
+
+ javax.media.Buffer aBuffer = maFrameGrabbingControl.grabFrame();
+
+ if( aBuffer != null && aBuffer.getFormat() instanceof javax.media.format.VideoFormat )
+ {
+ aRet = implImageToXGraphic( new javax.media.util.BufferToImage(
+ (javax.media.format.VideoFormat) aBuffer.getFormat() ).
+ createImage( aBuffer ) );
+ }
+ }
+ }
+
+ return aRet;
+ }
+
+ // ----------------
+ // - XServiceInfo -
+ // ----------------
+
+ private static final String s_implName = "com.sun.star.comp.FrameGrabber_Java";
+ private static final String s_serviceName = "com.sun.star.media.FrameGrabber_Java";
+
+ public synchronized String getImplementationName()
+ {
+ return s_implName;
+ }
+
+ // -------------------------------------------------------------------------
+
+ public synchronized String [] getSupportedServiceNames()
+ {
+ return new String [] { s_serviceName };
+ }
+
+ // -------------------------------------------------------------------------
+
+ public synchronized boolean supportsService( String serviceName )
+ {
+ return serviceName.equals( s_serviceName );
+ }
+}
diff --git a/avmedia/source/java/Manager.java b/avmedia/source/java/Manager.java
new file mode 100644
index 000000000000..47707478fd5b
--- /dev/null
+++ b/avmedia/source/java/Manager.java
@@ -0,0 +1,148 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// UNO
+import com.sun.star.uno.UnoRuntime;
+import com.sun.star.uno.XComponentContext;
+import com.sun.star.uno.AnyConverter;
+import com.sun.star.uno.IQueryInterface;
+import com.sun.star.lang.XInitialization;
+
+// media
+import com.sun.star.media.*;
+
+public class Manager implements com.sun.star.lang.XServiceInfo,
+ com.sun.star.lang.XTypeProvider,
+ com.sun.star.media.XManager
+
+{
+ private com.sun.star.lang.XMultiServiceFactory maFactory;
+
+ // -------------------------------------------------------------------------
+
+ public Manager( com.sun.star.lang.XMultiServiceFactory aFactory )
+ {
+ maFactory = aFactory;
+ }
+
+ // ------------
+ // - XManager -
+ // ------------
+
+ public com.sun.star.media.XPlayer createPlayer( String aURL )
+ {
+ javax.media.Player aPlayer = null;
+
+ try
+ {
+ aPlayer = javax.media.Manager.createRealizedPlayer( new java.net.URL( aURL ) );
+ }
+ catch( java.net.MalformedURLException e )
+ {
+ }
+ catch( java.io.IOException e )
+ {
+ }
+ catch( javax.media.NoPlayerException e )
+ {
+ }
+ catch( javax.media.CannotRealizeException e )
+ {
+ }
+ catch( java.lang.Exception e )
+ {
+ }
+
+ if( aPlayer != null )
+ {
+ return new Player( maFactory, aPlayer, aURL );
+ }
+ else
+ return null;
+ }
+
+ // ----------------
+ // - XServiceInfo -
+ // ----------------
+
+ private static final String s_implName = "com.sun.star.comp.media.Manager_Java";
+ private static final String s_serviceName = "com.sun.star.media.Manager_Java";
+
+ public synchronized String getImplementationName()
+ {
+ return s_implName;
+ }
+
+ // -------------------------------------------------------------------------
+
+ public synchronized String [] getSupportedServiceNames()
+ {
+ return new String [] { s_serviceName };
+ }
+
+ // -------------------------------------------------------------------------
+
+ public synchronized boolean supportsService( String serviceName )
+ {
+ return serviceName.equals( s_serviceName );
+ }
+
+ // -----------------
+ // - XTypeProvider -
+ // -----------------
+ protected byte[] maImplementationId;
+
+ public com.sun.star.uno.Type[] getTypes()
+ {
+ com.sun.star.uno.Type[] retValue = new com.sun.star.uno.Type[ 3 ];
+
+ retValue[ 0 ]= new com.sun.star.uno.Type( com.sun.star.lang.XServiceInfo.class );
+ retValue[ 1 ]= new com.sun.star.uno.Type( com.sun.star.lang.XTypeProvider.class );
+ retValue[ 2 ]= new com.sun.star.uno.Type( com.sun.star.media.XManager.class );
+
+ return retValue;
+ }
+
+ // -------------------------------------------------------------------------
+
+ synchronized public byte[] getImplementationId()
+ {
+ if( maImplementationId == null)
+ {
+ maImplementationId = new byte[ 16 ];
+
+ int hash = hashCode();
+
+ maImplementationId[ 0 ] = (byte)(hash & 0xff);
+ maImplementationId[ 1 ] = (byte)((hash >>> 8) & 0xff);
+ maImplementationId[ 2 ] = (byte)((hash >>> 16) & 0xff);
+ maImplementationId[ 3 ] = (byte)((hash >>>24) & 0xff);
+ }
+
+ return maImplementationId;
+ }
+}
diff --git a/avmedia/source/java/MediaUno.java b/avmedia/source/java/MediaUno.java
new file mode 100644
index 000000000000..ca7a164586d8
--- /dev/null
+++ b/avmedia/source/java/MediaUno.java
@@ -0,0 +1,76 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// UNO
+import com.sun.star.uno.UnoRuntime;
+import com.sun.star.uno.XComponentContext;
+import com.sun.star.uno.AnyConverter;
+import com.sun.star.uno.IQueryInterface;
+import com.sun.star.lang.XInitialization;
+
+public class MediaUno
+{
+ private static final String s_implName = "com.sun.star.comp.media.Manager_Java";
+ private static final String s_serviceName = "com.sun.star.media.Manager_Java";
+
+ // -------------------------------------------------------------------------
+
+ public MediaUno()
+ {
+ }
+
+ // -------------------------------------------------------------------------
+
+ public static com.sun.star.lang.XSingleServiceFactory __getServiceFactory(
+ String implName,
+ com.sun.star.lang.XMultiServiceFactory multiFactory,
+ com.sun.star.registry.XRegistryKey regKey )
+ {
+ if (implName.equals( s_implName ))
+ {
+ try
+ {
+ return com.sun.star.comp.loader.FactoryHelper.getServiceFactory(
+ Class.forName( "Manager" ), s_serviceName, multiFactory, regKey );
+ }
+ catch( java.lang.ClassNotFoundException exception )
+ {
+ }
+ }
+
+ return null;
+ }
+
+ // -------------------------------------------------------------------------
+
+ public static boolean __writeRegistryServiceInfo(
+ com.sun.star.registry.XRegistryKey regKey )
+ {
+ return com.sun.star.comp.loader.FactoryHelper.writeRegistryServiceInfo(
+ s_implName, s_serviceName, regKey );
+ }
+}
diff --git a/avmedia/source/java/Player.java b/avmedia/source/java/Player.java
new file mode 100644
index 000000000000..be3b3d62d367
--- /dev/null
+++ b/avmedia/source/java/Player.java
@@ -0,0 +1,325 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// UNO
+import com.sun.star.uno.UnoRuntime;
+import com.sun.star.uno.XComponentContext;
+import com.sun.star.uno.AnyConverter;
+import com.sun.star.uno.IQueryInterface;
+import com.sun.star.lang.XInitialization;
+
+// awt
+import com.sun.star.awt.*;
+
+// media
+import com.sun.star.media.*;
+
+public class Player implements javax.media.ControllerListener,
+ com.sun.star.lang.XServiceInfo,
+ com.sun.star.media.XPlayer,
+ com.sun.star.lang.XComponent
+
+
+{
+ private com.sun.star.lang.XMultiServiceFactory maFactory;
+ private String maURL;
+ private javax.media.Player maPlayer;
+ private javax.media.GainControl maGainControl;
+ private boolean mbStarted = false;
+ private boolean mbLooping = false;
+
+ // -------------------------------------------------------------------------
+
+ public Player( com.sun.star.lang.XMultiServiceFactory aFactory,
+ javax.media.Player aPlayer, String aURL )
+ {
+ maFactory = aFactory;
+ maURL = aURL;
+ maPlayer = aPlayer;
+ maPlayer.addControllerListener( this );
+ maGainControl = maPlayer.getGainControl();
+ }
+
+ // -------------------------------------------------------------------------
+
+ public synchronized void controllerUpdate( javax.media.ControllerEvent aEvt )
+ {
+ if( aEvt instanceof javax.media.EndOfMediaEvent ||
+ aEvt instanceof javax.media.StopAtTimeEvent )
+ {
+ mbStarted = false;
+
+ if( mbLooping )
+ {
+ setMediaTime( 0.0 );
+ start();
+ }
+ else if( aEvt instanceof javax.media.EndOfMediaEvent )
+ setMediaTime( getDuration() );
+ }
+ }
+
+ // -----------
+ // - XPlayer -
+ // -----------
+
+ public synchronized void start()
+ {
+ if( !mbStarted )
+ {
+ maPlayer.start();
+ mbStarted = true;
+ }
+ }
+
+ // -------------------------------------------------------------------------
+
+ public synchronized void stop()
+ {
+ if( mbStarted )
+ {
+ maPlayer.stop();
+ mbStarted = false;
+ }
+ }
+
+ // -------------------------------------------------------------------------
+
+ public synchronized boolean isPlaying()
+ {
+ return mbStarted;
+ }
+
+ // -------------------------------------------------------------------------
+
+ public synchronized double getDuration()
+ {
+ return maPlayer.getDuration().getSeconds();
+ }
+
+ // -------------------------------------------------------------------------
+
+ public synchronized void setMediaTime( double fTime )
+ {
+ if( fTime >= 0.0 && fTime <= getDuration() )
+ maPlayer.setMediaTime( new javax.media.Time( fTime ) );
+ }
+
+ // -------------------------------------------------------------------------
+
+ public synchronized double getMediaTime()
+ {
+ return maPlayer.getMediaTime().getSeconds();
+ }
+
+ // -------------------------------------------------------------------------
+
+ public synchronized void setStopTime( double fTime )
+ {
+ boolean bOldStarted = mbStarted;
+
+ if( mbStarted )
+ stop();
+
+ maPlayer.setStopTime( new javax.media.Time( fTime ) );
+
+ if( bOldStarted )
+ start();
+ }
+
+ // -------------------------------------------------------------------------
+
+ public synchronized double getStopTime()
+ {
+ return maPlayer.getStopTime().getSeconds();
+ }
+
+ // -------------------------------------------------------------------------
+
+ public synchronized void setRate( double fRate )
+ {
+ boolean bOldStarted = mbStarted;
+
+ if( mbStarted )
+ stop();
+
+ maPlayer.setRate( (float) fRate );
+
+ if( bOldStarted )
+ start();
+ }
+
+ // -------------------------------------------------------------------------
+
+ public synchronized double getRate()
+ {
+ return (double) maPlayer.getRate();
+ }
+
+ // -------------------------------------------------------------------------
+
+ public synchronized void setPlaybackLoop( boolean bSet )
+ {
+ mbLooping = bSet;
+ }
+
+ // -------------------------------------------------------------------------
+
+ public synchronized boolean isPlaybackLoop()
+ {
+ return mbLooping;
+ }
+
+ // -------------------------------------------------------------------------
+
+ public synchronized void setVolumeDB( short nVolumeDB )
+ {
+ if( maGainControl != null )
+ maGainControl.setDB( nVolumeDB );
+ }
+
+ // -------------------------------------------------------------------------
+
+ public synchronized short getVolumeDB()
+ {
+ return( maGainControl != null ? (short) maGainControl.getDB() : 0 );
+ }
+
+ // -------------------------------------------------------------------------
+
+ public synchronized void setMute( boolean bSet )
+ {
+ if( maGainControl != null )
+ maGainControl.setMute( bSet );
+ }
+
+ // -------------------------------------------------------------------------
+
+ public synchronized boolean isMute()
+ {
+ return( maGainControl != null ? maGainControl.getMute() : false );
+ }
+
+ // -------------------------------------------------------------------------
+
+ public synchronized com.sun.star.awt.Size getPreferredPlayerWindowSize()
+ {
+ java.awt.Component aVisualComponent = maPlayer.getVisualComponent();
+ com.sun.star.awt.Size aSize = new com.sun.star.awt.Size( 0, 0 );
+
+ if( aVisualComponent != null )
+ {
+ java.awt.Dimension aDim = aVisualComponent.getPreferredSize();
+
+ aSize.Width = Math.max( aDim.width, 0 );
+ aSize.Height = Math.max( aDim.height, 0 );
+ }
+
+ return aSize;
+ }
+
+ // -------------------------------------------------------------------------
+
+ public synchronized com.sun.star.media.XPlayerWindow createPlayerWindow( java.lang.Object[] aArgs )
+ {
+ try
+ {
+ com.sun.star.media.XPlayerWindow xPlayerWindow = ( ( ( aArgs.length > 1 ) && ( AnyConverter.toInt( aArgs[ 0 ] ) > 0 ) ) ?
+ new PlayerWindow( maFactory, aArgs, maPlayer ) :
+ null );
+
+ // check if it is a real player window (video window)
+ if( xPlayerWindow != null && xPlayerWindow.getZoomLevel() == com.sun.star.media.ZoomLevel.NOT_AVAILABLE )
+ xPlayerWindow = null;
+
+ return xPlayerWindow;
+ }
+ catch( com.sun.star.lang.IllegalArgumentException e )
+ {
+ return null;
+ }
+ }
+
+ // -------------------------------------------------------------------------
+
+ public synchronized com.sun.star.media.XFrameGrabber createFrameGrabber()
+ {
+ return( (com.sun.star.media.XFrameGrabber) new FrameGrabber( maFactory, maURL ) );
+ }
+
+ // --------------
+ // - XComponent -
+ // --------------
+
+ public synchronized void addEventListener( com.sun.star.lang.XEventListener xListener )
+ {
+ }
+
+ // -------------------------------------------------------------------------
+
+ public synchronized void removeEventListener( com.sun.star.lang.XEventListener xListener )
+ {
+ }
+
+ // -------------------------------------------------------------------------
+
+ public synchronized void dispose()
+ {
+ if( maPlayer != null )
+ {
+ maPlayer.stop();
+ maPlayer.close();
+ maPlayer = null;
+ }
+ }
+
+ // ----------------
+ // - XServiceInfo -
+ // ----------------
+
+ private static final String s_implName = "com.sun.star.comp.Player_Java";
+ private static final String s_serviceName = "com.sun.star.media.Player_Java";
+
+ public synchronized String getImplementationName()
+ {
+ return s_implName;
+ }
+
+ // -------------------------------------------------------------------------
+
+ public synchronized String [] getSupportedServiceNames()
+ {
+ return new String [] { s_serviceName };
+ }
+
+ // -------------------------------------------------------------------------
+
+ public synchronized boolean supportsService( String serviceName )
+ {
+ return serviceName.equals( s_serviceName );
+ }
+}
diff --git a/avmedia/source/java/PlayerWindow.java b/avmedia/source/java/PlayerWindow.java
new file mode 100644
index 000000000000..229c651d9f54
--- /dev/null
+++ b/avmedia/source/java/PlayerWindow.java
@@ -0,0 +1,602 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+import com.sun.star.uno.UnoRuntime;
+import com.sun.star.uno.XComponentContext;
+import com.sun.star.uno.AnyConverter;
+import com.sun.star.uno.IQueryInterface;
+import com.sun.star.lang.XInitialization;
+import com.sun.star.lang.XEventListener;
+import com.sun.star.awt.*;
+import com.sun.star.media.*;
+
+// -----------------
+// - Player Window -
+// -----------------
+
+public class PlayerWindow implements java.awt.event.KeyListener,
+ java.awt.event.MouseListener,
+ java.awt.event.MouseMotionListener,
+ java.awt.event.FocusListener,
+ com.sun.star.lang.XServiceInfo,
+ com.sun.star.media.XPlayerWindow
+{
+ private com.sun.star.lang.XMultiServiceFactory maFactory;
+ private WindowAdapter maFrame;
+ private javax.media.Player maPlayer;
+ private com.sun.star.media.ZoomLevel meZoomLevel = com.sun.star.media.ZoomLevel.ORIGINAL;
+ private boolean mbShowControls = false;
+
+
+ // -------------------------------------------------------------------------
+
+ public PlayerWindow( com.sun.star.lang.XMultiServiceFactory aFactory,
+ java.lang.Object[] aArgs, javax.media.Player aPlayer )
+ {
+ maFactory = aFactory;
+
+ try
+ {
+ if( aArgs.length > 1 )
+ {
+ com.sun.star.awt.Rectangle aBoundRect = (com.sun.star.awt.Rectangle) aArgs[ 1 ];
+
+ maFrame = new WindowAdapter( AnyConverter.toInt( aArgs[ 0 ] ) );
+ maFrame.setPosSize( aBoundRect.X, aBoundRect.Y, aBoundRect.Width, aBoundRect.Height, (short) 0 );
+
+ if( aArgs.length > 2 )
+ mbShowControls = AnyConverter.toBoolean( aArgs[ 2 ] );
+
+ java.awt.Panel aPanel = new java.awt.Panel( new java.awt.BorderLayout() );
+
+ aPanel.setLayout( null );
+ aPanel.setBackground( java.awt.Color.black );
+ aPanel.addKeyListener( this );
+ aPanel.addMouseListener( this );
+ aPanel.addMouseMotionListener( this );
+
+ if( mbShowControls )
+ {
+ java.awt.Component aControlComponent = aPlayer.getControlPanelComponent();
+
+ if( aControlComponent != null )
+ aPanel.add( aControlComponent );
+ else
+ mbShowControls = false;
+ }
+
+ java.awt.Component aVisualComponent = aPlayer.getVisualComponent();
+
+ if( aVisualComponent != null )
+ {
+ aVisualComponent.addKeyListener( this );
+ aVisualComponent.addMouseListener( this );
+ aVisualComponent.addMouseMotionListener( this );
+ aVisualComponent.addFocusListener( this );
+ aPanel.add( aVisualComponent );
+ }
+ else
+ meZoomLevel = com.sun.star.media.ZoomLevel.NOT_AVAILABLE;
+
+ if( maFrame.getJavaFrame() != null )
+ maFrame.getJavaFrame().add( aPanel );
+
+ LayoutComponents();
+ }
+ }
+ catch( com.sun.star.lang.IllegalArgumentException e )
+ {
+ }
+ }
+
+ // -------------------------------------------------------------------------
+
+ protected synchronized void LayoutComponents()
+ {
+ if( maFrame.getJavaFrame() != null )
+ {
+ java.awt.Panel aPanel = (java.awt.Panel) maFrame.getJavaFrame().getComponent( 0 );
+ int nW = maFrame.getJavaFrame().getWidth();
+ int nH = maFrame.getJavaFrame().getHeight();
+ int nControlH = 0;
+
+ aPanel.setBounds( 0, 0, nW, nH );
+
+ if( mbShowControls )
+ {
+ java.awt.Component aControlComponent = aPanel.getComponent( 0 );
+
+ if( aControlComponent != null )
+ {
+ java.awt.Dimension aControlDimension = aControlComponent.getPreferredSize();
+
+ nControlH = Math.min( nH, aControlDimension.height );
+ aControlComponent.setBounds( 0, nH - nControlH, nW, nControlH );
+ }
+ }
+
+ if( com.sun.star.media.ZoomLevel.NOT_AVAILABLE != meZoomLevel )
+ {
+ java.awt.Component aVisualComponent = aPanel.getComponent( mbShowControls ? 1 : 0 );
+
+ if( aVisualComponent != null )
+ {
+ java.awt.Dimension aPrefDim = aVisualComponent.getPreferredSize();
+ int nVideoW = nW, nVideoH = ( nH - nControlH );
+ int nX = 0, nY = 0, nWidth = 0, nHeight = 0;
+ boolean bDone = false, bZoom = false;
+
+ if( com.sun.star.media.ZoomLevel.ORIGINAL == meZoomLevel )
+ {
+ bZoom = true;
+ }
+ else if( com.sun.star.media.ZoomLevel.ZOOM_1_TO_4 == meZoomLevel )
+ {
+ aPrefDim.width >>= 2;
+ aPrefDim.height >>= 2;
+ bZoom = true;
+ }
+ else if( com.sun.star.media.ZoomLevel.ZOOM_1_TO_2 == meZoomLevel )
+ {
+ aPrefDim.width >>= 1;
+ aPrefDim.height >>= 1;
+ bZoom = true;
+ }
+ else if( com.sun.star.media.ZoomLevel.ZOOM_2_TO_1 == meZoomLevel )
+ {
+ aPrefDim.width <<= 1;
+ aPrefDim.height <<= 1;
+ bZoom = true;
+ }
+ else if( com.sun.star.media.ZoomLevel.ZOOM_4_TO_1 == meZoomLevel )
+ {
+ aPrefDim.width <<= 2;
+ aPrefDim.height <<= 2;
+ bZoom = true;
+ }
+ else if( com.sun.star.media.ZoomLevel.FIT_TO_WINDOW == meZoomLevel )
+ {
+ nWidth = nVideoW;
+ nHeight = nVideoH;
+ bDone = true;
+ }
+
+ if( bZoom )
+ {
+ if( ( aPrefDim.width <= nVideoW ) && ( aPrefDim.height <= nVideoH ) )
+ {
+ nX = ( nVideoW - aPrefDim.width ) >> 1;
+ nY = ( nVideoH - aPrefDim.height ) >> 1;
+ nWidth = aPrefDim.width;
+ nHeight = aPrefDim.height;
+ bDone = true;
+ }
+ }
+
+ if( !bDone )
+ {
+ if( aPrefDim.width > 0 && aPrefDim.height > 0 && nVideoW > 0 && nVideoH > 0 )
+ {
+ double fPrefWH = (double) aPrefDim.width / aPrefDim.height;
+
+ if( fPrefWH < ( (double) nVideoW / nVideoH ) )
+ nVideoW = (int)( nVideoH * fPrefWH );
+ else
+ nVideoH = (int)( nVideoW / fPrefWH );
+
+ nX = ( nW - nVideoW ) >> 1;
+ nY = ( nH - nControlH - nVideoH ) >> 1;
+ nWidth = nVideoW;
+ nHeight = nVideoH;
+ }
+ else
+ nX = nY = nWidth = nHeight = 0;
+ }
+
+ aVisualComponent.setBounds( nX, nY, nWidth, nHeight );
+ aVisualComponent.requestFocus();
+ }
+ else
+ aPanel.requestFocus();
+ }
+ else
+ aPanel.requestFocus();
+ }
+ }
+
+ // -------------------------------------------------------------------------
+
+ private void implFireMouseEvent( java.awt.event.MouseEvent aEvt )
+ {
+ if( aEvt.getSource() != null &&
+ aEvt.getSource() instanceof java.awt.Component )
+ {
+ aEvt.translatePoint( ( (java.awt.Component) aEvt.getSource() ).getX(),
+ ( (java.awt.Component) aEvt.getSource() ).getY() );
+ }
+
+ maFrame.fireMouseEvent( aEvt );
+ }
+
+ // ---------------
+ // - KeyListener -
+ // ---------------
+
+ public void keyPressed( java.awt.event.KeyEvent aEvt )
+ {
+ maFrame.fireKeyEvent( aEvt );
+ }
+
+ // -------------------------------------------------------------------------
+
+ public void keyReleased( java.awt.event.KeyEvent aEvt )
+ {
+ maFrame.fireKeyEvent( aEvt );
+ }
+
+ // -------------------------------------------------------------------------
+
+ public void keyTyped( java.awt.event.KeyEvent aEvt )
+ {
+ maFrame.fireKeyEvent( aEvt );
+ }
+
+ // -----------------
+ // - MouseListener -
+ // -----------------
+
+ public void mousePressed( java.awt.event.MouseEvent aEvt )
+ {
+ implFireMouseEvent( aEvt );
+ }
+
+ // -------------------------------------------------------------------------
+
+ public void mouseClicked( java.awt.event.MouseEvent aEvt )
+ {
+ implFireMouseEvent( aEvt );
+ }
+
+ // -------------------------------------------------------------------------
+
+ public void mouseEntered( java.awt.event.MouseEvent aEvt )
+ {
+ implFireMouseEvent( aEvt );
+ }
+
+ // -------------------------------------------------------------------------
+
+ public void mouseExited( java.awt.event.MouseEvent aEvt )
+ {
+ implFireMouseEvent( aEvt );
+ }
+
+ // -------------------------------------------------------------------------
+
+ public void mouseReleased( java.awt.event.MouseEvent aEvt )
+ {
+ implFireMouseEvent( aEvt );
+ }
+
+ // -----------------------
+ // - MouseMotionListener -
+ // -----------------------
+
+ public void mouseDragged( java.awt.event.MouseEvent aEvt )
+ {
+ implFireMouseEvent( aEvt );
+ }
+
+ // -------------------------------------------------------------------------
+
+ public void mouseMoved( java.awt.event.MouseEvent aEvt )
+ {
+ implFireMouseEvent( aEvt );
+ }
+
+ // -----------------------
+ // - FocusListener -
+ // -----------------------
+
+ public void focusGained( java.awt.event.FocusEvent aEvt )
+ {
+ if( maFrame.getJavaFrame() != null )
+ maFrame.fireFocusEvent( aEvt );
+ }
+
+ // -------------------------------------------------------------------------
+
+ public void focusLost( java.awt.event.FocusEvent aEvt )
+ {
+ if( maFrame.getJavaFrame() != null )
+ maFrame.fireFocusEvent( aEvt );
+ }
+
+ // -----------------
+ // - XPlayerWindow -
+ // -----------------
+
+ public synchronized void update()
+ {
+ if( maFrame.getJavaFrame() != null )
+ maFrame.getJavaFrame().repaint();
+ }
+
+ // -------------------------------------------------------------------------
+
+ public synchronized boolean setZoomLevel( com.sun.star.media.ZoomLevel eZoomLevel )
+ {
+ boolean bRet = false;
+
+ if( com.sun.star.media.ZoomLevel.NOT_AVAILABLE != meZoomLevel &&
+ com.sun.star.media.ZoomLevel.NOT_AVAILABLE != eZoomLevel )
+ {
+ if( eZoomLevel != meZoomLevel )
+ {
+ meZoomLevel = eZoomLevel;
+ LayoutComponents();
+ }
+
+ bRet = true;
+ }
+
+ return bRet;
+ }
+
+ // -------------------------------------------------------------------------
+
+ public synchronized com.sun.star.media.ZoomLevel getZoomLevel()
+ {
+ return meZoomLevel;
+ }
+
+ // -------------------------------------------------------------------------
+
+ public synchronized void setPointerType( int nPointerType )
+ {
+ if( maFrame.getJavaFrame() != null )
+ {
+ int nCursor;
+
+ switch( nPointerType )
+ {
+ case( com.sun.star.awt.SystemPointer.CROSS ): nCursor = java.awt.Cursor.CROSSHAIR_CURSOR; break;
+ case( com.sun.star.awt.SystemPointer.HAND ): nCursor = java.awt.Cursor.HAND_CURSOR; break;
+ case( com.sun.star.awt.SystemPointer.MOVE ): nCursor = java.awt.Cursor.MOVE_CURSOR; break;
+ case( com.sun.star.awt.SystemPointer.WAIT ): nCursor = java.awt.Cursor.WAIT_CURSOR; break;
+
+ default: nCursor = java.awt.Cursor.DEFAULT_CURSOR; break;
+ }
+
+ maFrame.getJavaFrame().setCursor( java.awt.Cursor.getPredefinedCursor( nCursor ) );
+ }
+ }
+
+ // --------------
+ // - XComponent -
+ // --------------
+
+ public synchronized void dispose()
+ {
+ if( maFrame != null )
+ {
+ java.awt.Panel aPanel = (java.awt.Panel) maFrame.getJavaFrame().getComponent( 0 );
+
+ if( aPanel != null && aPanel.getComponent( 0 ) != null )
+ aPanel.getComponent( 0 ).removeFocusListener( this );
+
+ if( maFrame.getJavaFrame() != null )
+ maFrame.getJavaFrame().dispose();
+
+ maFrame.fireDisposingEvent();
+ }
+
+ maFrame = null;
+ }
+
+ // -----------
+ // - XWindow -
+ // -----------
+
+ public synchronized void setPosSize( int X, int Y, int Width, int Height, short Flags )
+ {
+ if( maFrame != null )
+ {
+ maFrame.setPosSize( X, Y, Width, Height, Flags );
+ LayoutComponents();
+ }
+ }
+
+ // -------------------------------------------------------------------------
+
+ public synchronized com.sun.star.awt.Rectangle getPosSize()
+ {
+ return( ( maFrame != null ) ? maFrame.getPosSize() : new com.sun.star.awt.Rectangle() );
+ }
+
+ // -------------------------------------------------------------------------
+
+ public synchronized void setVisible( boolean visible )
+ {
+ if( maFrame != null )
+ maFrame.setVisible( visible );
+ }
+
+ // -------------------------------------------------------------------------
+
+ public synchronized void setEnable( boolean enable )
+ {
+ if( maFrame != null )
+ maFrame.setEnable( enable );
+ }
+
+ // -------------------------------------------------------------------------
+
+ public synchronized void setFocus()
+ {
+ if( maFrame != null )
+ maFrame.setFocus();
+ }
+
+ // -------------------------------------------------------------------------
+
+ public synchronized void addEventListener( com.sun.star.lang.XEventListener xListener )
+ {
+ if( maFrame != null )
+ maFrame.addEventListener( xListener );
+ }
+
+ // -------------------------------------------------------------------------
+
+ public synchronized void removeEventListener( com.sun.star.lang.XEventListener xListener )
+ {
+ if( maFrame != null )
+ maFrame.removeEventListener( xListener );
+ }
+
+ // -------------------------------------------------------------------------
+
+ public synchronized void addWindowListener( XWindowListener xListener )
+ {
+ if( maFrame != null )
+ maFrame.addWindowListener( xListener );
+ }
+
+ // -------------------------------------------------------------------------
+
+ public synchronized void removeWindowListener( XWindowListener xListener )
+ {
+ if( maFrame != null )
+ maFrame.removeWindowListener( xListener );
+ }
+
+ // -------------------------------------------------------------------------
+
+ public synchronized void addFocusListener( XFocusListener xListener )
+ {
+ if( maFrame != null )
+ maFrame.addFocusListener( xListener );
+ }
+
+ // -------------------------------------------------------------------------
+
+ public synchronized void removeFocusListener( XFocusListener xListener )
+ {
+ if( maFrame != null )
+ maFrame.removeFocusListener( xListener );
+ }
+
+ // -------------------------------------------------------------------------
+
+ public synchronized void addKeyListener( XKeyListener xListener )
+ {
+ if( maFrame != null )
+ maFrame.addKeyListener( xListener );
+ }
+
+ // -------------------------------------------------------------------------
+
+ public synchronized void removeKeyListener( XKeyListener xListener )
+ {
+ if( maFrame != null )
+ maFrame.removeKeyListener( xListener );
+ }
+
+ // -------------------------------------------------------------------------
+
+ public synchronized void addMouseListener( XMouseListener xListener )
+ {
+ if( maFrame != null )
+ maFrame.addMouseListener( xListener );
+ }
+
+ // -------------------------------------------------------------------------
+
+ public synchronized void removeMouseListener( XMouseListener xListener )
+ {
+ if( maFrame != null )
+ maFrame.removeMouseListener( xListener );
+ }
+
+ // -------------------------------------------------------------------------
+
+ public synchronized void addMouseMotionListener( XMouseMotionListener xListener )
+ {
+ if( maFrame != null )
+ maFrame.addMouseMotionListener( xListener );
+ }
+
+ // -------------------------------------------------------------------------
+
+ public synchronized void removeMouseMotionListener( XMouseMotionListener xListener )
+ {
+ if( maFrame != null )
+ maFrame.removeMouseMotionListener( xListener );
+ }
+
+ // -------------------------------------------------------------------------
+
+ public synchronized void addPaintListener( XPaintListener xListener )
+ {
+ if( maFrame != null )
+ maFrame.addPaintListener( xListener );
+ }
+
+ // -------------------------------------------------------------------------
+
+ public synchronized void removePaintListener( XPaintListener xListener )
+ {
+ if( maFrame != null )
+ maFrame.removePaintListener( xListener );
+ }
+
+ // ----------------
+ // - XServiceInfo -
+ // ----------------
+
+ private static final String s_implName = "com.sun.star.comp.PlayerWindow_Java";
+ private static final String s_serviceName = "com.sun.star.media.PlayerWindow_Java";
+
+ public synchronized String getImplementationName()
+ {
+ return s_implName;
+ }
+
+ // -------------------------------------------------------------------------
+
+ public synchronized String [] getSupportedServiceNames()
+ {
+ return new String [] { s_serviceName };
+ }
+
+ // -------------------------------------------------------------------------
+
+ public synchronized boolean supportsService( String serviceName )
+ {
+ return serviceName.equals( s_serviceName );
+ }
+}
diff --git a/avmedia/source/java/WindowAdapter.java b/avmedia/source/java/WindowAdapter.java
new file mode 100644
index 000000000000..bd11aec5e738
--- /dev/null
+++ b/avmedia/source/java/WindowAdapter.java
@@ -0,0 +1,508 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+import sun.awt.*;
+import com.sun.star.awt.*;
+import com.sun.star.lang.*;
+import java.util.*;
+import javax.swing.*;
+
+public class WindowAdapter
+{
+ private java.awt.Frame maFrame;
+ private LinkedList maEventListeners = new LinkedList();
+ private LinkedList maWindowListeners = new LinkedList();
+ private LinkedList maFocusListeners = new LinkedList();
+ private LinkedList maKeyListeners = new LinkedList();
+ private LinkedList maMouseListeners = new LinkedList();
+ private LinkedList maMouseMotionListeners = new LinkedList();
+ private LinkedList maPaintListeners = new LinkedList();
+ private boolean mbShift = false, mbMod1 = false, mbMod2 = false;
+
+ // -----------------
+ // - WindowAdapter -
+ // -----------------
+
+ public WindowAdapter( int windowHandle )
+ {
+ maFrame = SystemWindowAdapter.createFrame( windowHandle );
+ }
+
+ //----------------------------------------------------------------------------------
+
+ public java.awt.Frame getJavaFrame()
+ {
+ return maFrame;
+ }
+
+ //----------------------------------------------------------------------------------
+
+ private short implGetUNOKeyCode( int nJavaKeyCode )
+ {
+ short nRet = 0;
+
+ switch( nJavaKeyCode )
+ {
+ case( java.awt.event.KeyEvent.VK_NUMPAD0 ):
+ case( java.awt.event.KeyEvent.VK_0 ): nRet = com.sun.star.awt.Key.NUM0; break;
+ case( java.awt.event.KeyEvent.VK_NUMPAD1 ):
+ case( java.awt.event.KeyEvent.VK_1 ): nRet = com.sun.star.awt.Key.NUM1; break;
+ case( java.awt.event.KeyEvent.VK_NUMPAD2 ):
+ case( java.awt.event.KeyEvent.VK_2 ): nRet = com.sun.star.awt.Key.NUM2; break;
+ case( java.awt.event.KeyEvent.VK_NUMPAD3 ):
+ case( java.awt.event.KeyEvent.VK_3 ): nRet = com.sun.star.awt.Key.NUM3; break;
+ case( java.awt.event.KeyEvent.VK_NUMPAD4 ):
+ case( java.awt.event.KeyEvent.VK_4 ): nRet = com.sun.star.awt.Key.NUM4; break;
+ case( java.awt.event.KeyEvent.VK_NUMPAD5 ):
+ case( java.awt.event.KeyEvent.VK_5 ): nRet = com.sun.star.awt.Key.NUM5; break;
+ case( java.awt.event.KeyEvent.VK_NUMPAD6 ):
+ case( java.awt.event.KeyEvent.VK_6 ): nRet = com.sun.star.awt.Key.NUM6; break;
+ case( java.awt.event.KeyEvent.VK_NUMPAD7 ):
+ case( java.awt.event.KeyEvent.VK_7 ): nRet = com.sun.star.awt.Key.NUM7; break;
+ case( java.awt.event.KeyEvent.VK_NUMPAD8 ):
+ case( java.awt.event.KeyEvent.VK_8 ): nRet = com.sun.star.awt.Key.NUM8; break;
+ case( java.awt.event.KeyEvent.VK_NUMPAD9 ):
+ case( java.awt.event.KeyEvent.VK_9 ): nRet = com.sun.star.awt.Key.NUM9; break;
+
+ case( java.awt.event.KeyEvent.VK_A ): nRet = com.sun.star.awt.Key.A; break;
+ case( java.awt.event.KeyEvent.VK_B ): nRet = com.sun.star.awt.Key.B; break;
+ case( java.awt.event.KeyEvent.VK_C ): nRet = com.sun.star.awt.Key.C; break;
+ case( java.awt.event.KeyEvent.VK_D ): nRet = com.sun.star.awt.Key.D; break;
+ case( java.awt.event.KeyEvent.VK_E ): nRet = com.sun.star.awt.Key.E; break;
+ case( java.awt.event.KeyEvent.VK_F ): nRet = com.sun.star.awt.Key.F; break;
+ case( java.awt.event.KeyEvent.VK_G ): nRet = com.sun.star.awt.Key.G; break;
+ case( java.awt.event.KeyEvent.VK_H ): nRet = com.sun.star.awt.Key.H; break;
+ case( java.awt.event.KeyEvent.VK_I ): nRet = com.sun.star.awt.Key.I; break;
+ case( java.awt.event.KeyEvent.VK_J ): nRet = com.sun.star.awt.Key.J; break;
+ case( java.awt.event.KeyEvent.VK_K ): nRet = com.sun.star.awt.Key.K; break;
+ case( java.awt.event.KeyEvent.VK_L ): nRet = com.sun.star.awt.Key.L; break;
+ case( java.awt.event.KeyEvent.VK_M ): nRet = com.sun.star.awt.Key.M; break;
+ case( java.awt.event.KeyEvent.VK_N ): nRet = com.sun.star.awt.Key.N; break;
+ case( java.awt.event.KeyEvent.VK_O ): nRet = com.sun.star.awt.Key.O; break;
+ case( java.awt.event.KeyEvent.VK_P ): nRet = com.sun.star.awt.Key.P; break;
+ case( java.awt.event.KeyEvent.VK_Q ): nRet = com.sun.star.awt.Key.Q; break;
+ case( java.awt.event.KeyEvent.VK_R ): nRet = com.sun.star.awt.Key.R; break;
+ case( java.awt.event.KeyEvent.VK_S ): nRet = com.sun.star.awt.Key.S; break;
+ case( java.awt.event.KeyEvent.VK_T ): nRet = com.sun.star.awt.Key.T; break;
+ case( java.awt.event.KeyEvent.VK_U ): nRet = com.sun.star.awt.Key.U; break;
+ case( java.awt.event.KeyEvent.VK_V ): nRet = com.sun.star.awt.Key.V; break;
+ case( java.awt.event.KeyEvent.VK_W ): nRet = com.sun.star.awt.Key.W; break;
+ case( java.awt.event.KeyEvent.VK_X ): nRet = com.sun.star.awt.Key.X; break;
+ case( java.awt.event.KeyEvent.VK_Y ): nRet = com.sun.star.awt.Key.Y; break;
+ case( java.awt.event.KeyEvent.VK_Z ): nRet = com.sun.star.awt.Key.Z; break;
+
+ case( java.awt.event.KeyEvent.VK_F1 ): nRet = com.sun.star.awt.Key.F1; break;
+ case( java.awt.event.KeyEvent.VK_F2 ): nRet = com.sun.star.awt.Key.F2; break;
+ case( java.awt.event.KeyEvent.VK_F3 ): nRet = com.sun.star.awt.Key.F3; break;
+ case( java.awt.event.KeyEvent.VK_F4 ): nRet = com.sun.star.awt.Key.F4; break;
+ case( java.awt.event.KeyEvent.VK_F5 ): nRet = com.sun.star.awt.Key.F5; break;
+ case( java.awt.event.KeyEvent.VK_F6 ): nRet = com.sun.star.awt.Key.F6; break;
+ case( java.awt.event.KeyEvent.VK_F7 ): nRet = com.sun.star.awt.Key.F7; break;
+ case( java.awt.event.KeyEvent.VK_F8 ): nRet = com.sun.star.awt.Key.F8; break;
+ case( java.awt.event.KeyEvent.VK_F9 ): nRet = com.sun.star.awt.Key.F9; break;
+ case( java.awt.event.KeyEvent.VK_F10 ): nRet = com.sun.star.awt.Key.F10; break;
+ case( java.awt.event.KeyEvent.VK_F11 ): nRet = com.sun.star.awt.Key.F11; break;
+ case( java.awt.event.KeyEvent.VK_F12 ): nRet = com.sun.star.awt.Key.F12; break;
+ case( java.awt.event.KeyEvent.VK_F13 ): nRet = com.sun.star.awt.Key.F13; break;
+ case( java.awt.event.KeyEvent.VK_F14 ): nRet = com.sun.star.awt.Key.F14; break;
+ case( java.awt.event.KeyEvent.VK_F15 ): nRet = com.sun.star.awt.Key.F15; break;
+ case( java.awt.event.KeyEvent.VK_F16 ): nRet = com.sun.star.awt.Key.F16; break;
+ case( java.awt.event.KeyEvent.VK_F17 ): nRet = com.sun.star.awt.Key.F17; break;
+ case( java.awt.event.KeyEvent.VK_F18 ): nRet = com.sun.star.awt.Key.F18; break;
+ case( java.awt.event.KeyEvent.VK_F19 ): nRet = com.sun.star.awt.Key.F19; break;
+ case( java.awt.event.KeyEvent.VK_F20 ): nRet = com.sun.star.awt.Key.F20; break;
+ case( java.awt.event.KeyEvent.VK_F21 ): nRet = com.sun.star.awt.Key.F21; break;
+ case( java.awt.event.KeyEvent.VK_F22 ): nRet = com.sun.star.awt.Key.F22; break;
+ case( java.awt.event.KeyEvent.VK_F23 ): nRet = com.sun.star.awt.Key.F23; break;
+ case( java.awt.event.KeyEvent.VK_F24 ): nRet = com.sun.star.awt.Key.F24; break;
+
+ case( java.awt.event.KeyEvent.VK_UP ): nRet = com.sun.star.awt.Key.UP; break;
+ case( java.awt.event.KeyEvent.VK_DOWN): nRet = com.sun.star.awt.Key.DOWN; break;
+ case( java.awt.event.KeyEvent.VK_LEFT ): nRet = com.sun.star.awt.Key.LEFT; break;
+ case( java.awt.event.KeyEvent.VK_RIGHT ): nRet = com.sun.star.awt.Key.RIGHT; break;
+
+ case( java.awt.event.KeyEvent.VK_HOME ): nRet = com.sun.star.awt.Key.HOME; break;
+ case( java.awt.event.KeyEvent.VK_END ): nRet = com.sun.star.awt.Key.END; break;
+
+ case( java.awt.event.KeyEvent.VK_PAGE_UP ): nRet = com.sun.star.awt.Key.PAGEUP; break;
+ case( java.awt.event.KeyEvent.VK_PAGE_DOWN ): nRet = com.sun.star.awt.Key.PAGEDOWN; break;
+
+ case( java.awt.event.KeyEvent.VK_ENTER ): nRet = com.sun.star.awt.Key.RETURN; break;
+ case( java.awt.event.KeyEvent.VK_ESCAPE ): nRet = com.sun.star.awt.Key.ESCAPE; break;
+
+ case( java.awt.event.KeyEvent.VK_TAB ): nRet = com.sun.star.awt.Key.TAB; break;
+ case( java.awt.event.KeyEvent.VK_BACK_SPACE ): nRet = com.sun.star.awt.Key.BACKSPACE; break;
+ case( java.awt.event.KeyEvent.VK_SPACE ): nRet = com.sun.star.awt.Key.SPACE; break;
+ case( java.awt.event.KeyEvent.VK_INSERT): nRet = com.sun.star.awt.Key.INSERT; break;
+ case( java.awt.event.KeyEvent.VK_DELETE): nRet = com.sun.star.awt.Key.DELETE; break;
+ case( java.awt.event.KeyEvent.VK_ADD ): nRet = com.sun.star.awt.Key.ADD; break;
+ case( java.awt.event.KeyEvent.VK_SUBTRACT ): nRet = com.sun.star.awt.Key.SUBTRACT; break;
+ case( java.awt.event.KeyEvent.VK_MULTIPLY ): nRet = com.sun.star.awt.Key.MULTIPLY; break;
+ case( java.awt.event.KeyEvent.VK_DIVIDE ): nRet = com.sun.star.awt.Key.DIVIDE; break;
+ case( java.awt.event.KeyEvent.VK_DECIMAL ): nRet = com.sun.star.awt.Key.POINT; break;
+ // case( java.awt.event.KeyEvent.VK_ COMMA; break;
+ case( java.awt.event.KeyEvent.VK_LESS ): nRet = com.sun.star.awt.Key.LESS; break;
+ case( java.awt.event.KeyEvent.VK_GREATER ): nRet = com.sun.star.awt.Key.GREATER; break;
+ case( java.awt.event.KeyEvent.VK_EQUALS ): nRet = com.sun.star.awt.Key.EQUAL; break;
+ // case( java.awt.event.KeyEvent.VK_ OPEN; break;
+ // case( java.awt.event.KeyEvent.VK_ CUT; break;
+ // case( java.awt.event.KeyEvent.VK_ COPY; break;
+ // case( java.awt.event.KeyEvent.VK_ PASTE; break;
+ // case( java.awt.event.KeyEvent.VK_ UNDO; break;
+ // case( java.awt.event.KeyEvent.VK_ REPEAT; break;
+ // case( java.awt.event.KeyEvent.VK_ FIND; break;
+ // case( java.awt.event.KeyEvent.VK_ PROPERTIES; break;
+ // case( java.awt.event.KeyEvent.VK_ FRONT; break;
+ // case( java.awt.event.KeyEvent.VK_ CONTEXTMENU; break;
+ // case( java.awt.event.KeyEvent.VK_ HELP; break;
+
+ default:
+ break;
+ }
+
+ return nRet;
+ }
+
+ //----------------------------------------------------------------------------------
+
+ public void fireKeyEvent( java.awt.event.KeyEvent aEvt )
+ {
+ if( maKeyListeners.size() > 0 )
+ {
+ boolean bProcess = false, bPressed = false;
+
+ if( java.awt.event.KeyEvent.KEY_PRESSED == aEvt.getID() )
+ {
+ switch( aEvt.getKeyCode() )
+ {
+ case( java.awt.event.KeyEvent.VK_SHIFT ): mbShift = true; break;
+ case( java.awt.event.KeyEvent.VK_CONTROL ): mbMod1 = true; break;
+ case( java.awt.event.KeyEvent.VK_ALT ): mbMod2 = true; break;
+
+ default:
+ {
+ bProcess = bPressed = true;
+ }
+ break;
+ }
+ }
+ else if( java.awt.event.KeyEvent.KEY_RELEASED == aEvt.getID() )
+ {
+ switch( aEvt.getKeyCode() )
+ {
+ case( java.awt.event.KeyEvent.VK_SHIFT ): mbShift = false; break;
+ case( java.awt.event.KeyEvent.VK_CONTROL ): mbMod1 = false; break;
+ case( java.awt.event.KeyEvent.VK_ALT ): mbMod2 = false; break;
+
+ default:
+ {
+ bProcess = true;
+ }
+ break;
+ }
+ }
+
+ if( bProcess )
+ {
+ KeyEvent aUNOEvt = new KeyEvent();
+
+ aUNOEvt.Modifiers = 0;
+
+ if( mbShift )
+ aUNOEvt.Modifiers |= com.sun.star.awt.KeyModifier.SHIFT;
+
+ if( mbMod1 )
+ aUNOEvt.Modifiers |= com.sun.star.awt.KeyModifier.MOD1;
+
+ if( mbMod2 )
+ aUNOEvt.Modifiers |= com.sun.star.awt.KeyModifier.MOD2;
+
+ aUNOEvt.KeyCode = implGetUNOKeyCode( aEvt.getKeyCode() );
+ aUNOEvt.KeyChar = aEvt.getKeyChar();
+ aUNOEvt.KeyFunc = com.sun.star.awt.KeyFunction.DONTKNOW;
+
+ ListIterator aIter = maKeyListeners.listIterator( 0 );
+
+ while( aIter.hasNext() )
+ {
+ if( bPressed )
+ ( (XKeyListener) aIter.next() ).keyPressed( aUNOEvt );
+ else
+ ( (XKeyListener) aIter.next() ).keyReleased( aUNOEvt );
+ }
+ }
+ }
+ }
+
+ //----------------------------------------------------------------------------------
+
+ public void fireMouseEvent( java.awt.event.MouseEvent aEvt )
+ {
+ MouseEvent aUNOEvt = new MouseEvent();
+
+ aUNOEvt.Modifiers = 0;
+ aUNOEvt.Buttons = 0;
+ aUNOEvt.X = aEvt.getX();
+ aUNOEvt.Y = aEvt.getY();
+ aUNOEvt.PopupTrigger = false;
+
+ // Modifiers
+ if( aEvt.isShiftDown() )
+ aUNOEvt.Modifiers |= com.sun.star.awt.KeyModifier.SHIFT;
+
+ if( aEvt.isControlDown() )
+ aUNOEvt.Modifiers |= com.sun.star.awt.KeyModifier.MOD1;
+
+ if( aEvt.isAltDown() )
+ aUNOEvt.Modifiers |= com.sun.star.awt.KeyModifier.MOD2;
+
+ // Buttons
+ if( SwingUtilities.isLeftMouseButton( aEvt ) )
+ aUNOEvt.Buttons |= com.sun.star.awt.MouseButton.LEFT;
+
+ if( SwingUtilities.isMiddleMouseButton( aEvt ) )
+ aUNOEvt.Buttons |= com.sun.star.awt.MouseButton.MIDDLE;
+
+ if( SwingUtilities.isRightMouseButton( aEvt ) )
+ aUNOEvt.Buttons |= com.sun.star.awt.MouseButton.RIGHT;
+
+ // event type
+ if( java.awt.event.MouseEvent.MOUSE_PRESSED == aEvt.getID() )
+ {
+ ListIterator aIter = maMouseListeners.listIterator( 0 );
+
+ aUNOEvt.ClickCount = 1;
+
+ while( aIter.hasNext() )
+ ( (XMouseListener) aIter.next() ).mousePressed( aUNOEvt );
+ }
+ else if( java.awt.event.MouseEvent.MOUSE_RELEASED == aEvt.getID() )
+ {
+ ListIterator aIter = maMouseListeners.listIterator( 0 );
+
+ aUNOEvt.ClickCount = 1;
+
+ while( aIter.hasNext() )
+ ( (XMouseListener) aIter.next() ).mouseReleased( aUNOEvt );
+ }
+ else if( java.awt.event.MouseEvent.MOUSE_DRAGGED == aEvt.getID() )
+ {
+ ListIterator aIter = maMouseMotionListeners.listIterator( 0 );
+
+ aUNOEvt.ClickCount = 0;
+
+ while( aIter.hasNext() )
+ ( (XMouseMotionListener) aIter.next() ).mouseDragged( aUNOEvt );
+ }
+ else if( java.awt.event.MouseEvent.MOUSE_MOVED == aEvt.getID() )
+ {
+ ListIterator aIter = maMouseMotionListeners.listIterator( 0 );
+
+ aUNOEvt.ClickCount = 0;
+
+ while( aIter.hasNext() )
+ ( (XMouseMotionListener) aIter.next() ).mouseMoved( aUNOEvt );
+ }
+ }
+
+ //----------------------------------------------------------------------------------
+
+ public void fireFocusEvent( java.awt.event.FocusEvent aEvt )
+ {
+ if( java.awt.event.FocusEvent.FOCUS_GAINED == aEvt.getID() )
+ {
+ ListIterator aIter = maFocusListeners.listIterator( 0 );
+ FocusEvent aUNOEvt = new FocusEvent();
+
+ while( aIter.hasNext() )
+ {
+ ( (XFocusListener) aIter.next() ).focusGained( aUNOEvt );
+ }
+ }
+ }
+
+ //----------------------------------------------------------------------------------
+
+ public void fireDisposingEvent()
+ {
+ ListIterator aIter = maEventListeners.listIterator( 0 );
+
+ while( aIter.hasNext() )
+ {
+ ( (XEventListener) aIter.next() ).disposing( new com.sun.star.lang.EventObject() );
+ }
+ }
+
+ // --------------------
+ // - XWindow methods -
+ // --------------------
+
+ public void setPosSize( int X, int Y, int Width, int Height, short Flags )
+ {
+ maFrame.setBounds( X, Y, Width, Height );
+ }
+
+ //----------------------------------------------------------------------------------
+
+ public com.sun.star.awt.Rectangle getPosSize( )
+ {
+ java.awt.Rectangle bounds = maFrame.getBounds();
+ return new com.sun.star.awt.Rectangle( bounds.x, bounds.y, bounds.width, bounds.height );
+ }
+
+ //----------------------------------------------------------------------------------
+
+ public void setVisible( boolean visible )
+ {
+ maFrame.setVisible( visible );
+ }
+
+ //----------------------------------------------------------------------------------
+
+ public void setEnable( boolean enable )
+ {
+ maFrame.setEnabled( enable );
+ }
+
+ //----------------------------------------------------------------------------------
+
+ public void setFocus()
+ {
+ }
+
+ //----------------------------------------------------------------------------------
+
+ public void addEventListener( XEventListener xListener )
+ {
+ if( xListener != null )
+ maEventListeners.add( xListener );
+ }
+
+ //----------------------------------------------------------------------------------
+
+ public void removeEventListener( XEventListener xListener )
+ {
+ if( xListener != null )
+ maEventListeners.remove( xListener );
+ }
+
+ //----------------------------------------------------------------------------------
+
+ public void addWindowListener( XWindowListener xListener )
+ {
+ if( xListener != null )
+ maWindowListeners.add( xListener );
+ }
+
+ //----------------------------------------------------------------------------------
+
+ public void removeWindowListener( XWindowListener xListener )
+ {
+ if( xListener != null )
+ maWindowListeners.remove( xListener );
+ }
+
+ //----------------------------------------------------------------------------------
+
+ public void addFocusListener( XFocusListener xListener )
+ {
+ if( xListener != null )
+ maFocusListeners.add( xListener );
+ }
+
+ //----------------------------------------------------------------------------------
+
+ public void removeFocusListener( XFocusListener xListener )
+ {
+ if( xListener != null )
+ maFocusListeners.remove( xListener );
+ }
+
+ //----------------------------------------------------------------------------------
+
+ public void addKeyListener( XKeyListener xListener )
+ {
+ if( xListener != null )
+ maKeyListeners.add( xListener );
+ }
+
+ //----------------------------------------------------------------------------------
+
+ public void removeKeyListener( XKeyListener xListener )
+ {
+ if( xListener != null )
+ maKeyListeners.remove( xListener );
+ }
+
+ //----------------------------------------------------------------------------------
+
+ public void addMouseListener( XMouseListener xListener )
+ {
+ if( xListener != null )
+ maMouseListeners.add( xListener );
+ }
+
+ //----------------------------------------------------------------------------------
+
+ public void removeMouseListener( XMouseListener xListener )
+ {
+ if( xListener != null )
+ maMouseListeners.remove( xListener );
+ }
+
+ //----------------------------------------------------------------------------------
+
+ public void addMouseMotionListener( XMouseMotionListener xListener )
+ {
+ if( xListener != null )
+ maMouseMotionListeners.add( xListener );
+ }
+
+ //----------------------------------------------------------------------------------
+
+ public void removeMouseMotionListener( XMouseMotionListener xListener )
+ {
+ if( xListener != null )
+ maMouseMotionListeners.remove( xListener );
+ }
+
+ //----------------------------------------------------------------------------------
+
+ public void addPaintListener( XPaintListener xListener )
+ {
+ if( xListener != null )
+ maPaintListeners.add( xListener );
+ }
+
+ //----------------------------------------------------------------------------------
+
+ public void removePaintListener( XPaintListener xListener )
+ {
+ if( xListener != null )
+ maPaintListeners.remove( xListener );
+ }
+}
diff --git a/avmedia/source/java/avmedia.jar b/avmedia/source/java/avmedia.jar
new file mode 100644
index 000000000000..55576baa5b34
--- /dev/null
+++ b/avmedia/source/java/avmedia.jar
Binary files differ
diff --git a/avmedia/source/java/makefile.mk b/avmedia/source/java/makefile.mk
new file mode 100644
index 000000000000..37c53a721164
--- /dev/null
+++ b/avmedia/source/java/makefile.mk
@@ -0,0 +1,61 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#**************************************************************************
+
+# Builds the Java Canvas implementation.
+
+PRJNAME = avmedia
+PRJ = ..$/..
+TARGET = avmedia
+PACKAGE = avmedia
+
+# --- Settings -----------------------------------------------------
+
+.INCLUDE: settings.mk
+
+.IF "$(GUIBASE)"=="javamedia"
+
+JAVAFILES = \
+ Manager.java \
+ Player.java \
+ PlayerWindow.java \
+ WindowAdapter.java \
+ MediaUno.java \
+ FrameGrabber.java \
+ x11$/SystemWindowAdapter.java
+
+JARFILES = jurt.jar unoil.jar ridl.jar juh.jar java_uno.jar jmf.jar
+JAVACLASSFILES = $(foreach,i,$(JAVAFILES) $(CLASSDIR)$/$(PACKAGE)$/$(i:s/.java//).class)
+
+JARTARGET = $(TARGET).jar
+JARCOMPRESS = TRUE
+CUSTOMMANIFESTFILE = manifest
+
+.ENDIF # "$(GUIBASE)"=="javamedia"
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE: target.mk
diff --git a/avmedia/source/java/manifest b/avmedia/source/java/manifest
new file mode 100644
index 000000000000..fa9c2500d385
--- /dev/null
+++ b/avmedia/source/java/manifest
@@ -0,0 +1,2 @@
+RegistrationClassName: MediaUno
+UNO-Type-Path:
diff --git a/avmedia/source/java/win/SystemWindowAdapter.java b/avmedia/source/java/win/SystemWindowAdapter.java
new file mode 100644
index 000000000000..ebf3cac99307
--- /dev/null
+++ b/avmedia/source/java/win/SystemWindowAdapter.java
@@ -0,0 +1,53 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+import sun.awt.*;
+import com.sun.star.awt.*;
+
+public class SystemWindowAdapter
+{
+ static public java.awt.Frame createFrame( int windowHandle )
+ {
+ java.awt.Frame aFrame;
+
+ // we're initialized with the operating system window handle
+ // as the parameter. We then generate a dummy Java frame with
+ // that window as the parent, to fake a root window for the
+ // Java implementation.
+
+ // now, we're getting slightly system dependent here.
+ String os = (String) System.getProperty( "os.name" );
+
+ // create the embedded frame
+ if( os.startsWith( "Windows" ) )
+ aFrame = new sun.awt.windows.WEmbeddedFrame( windowHandle );
+ else
+ throw new com.sun.star.uno.RuntimeException();
+
+ return aFrame;
+ }
+}
diff --git a/avmedia/source/java/x11/SystemWindowAdapter.java b/avmedia/source/java/x11/SystemWindowAdapter.java
new file mode 100644
index 000000000000..4292dabe6775
--- /dev/null
+++ b/avmedia/source/java/x11/SystemWindowAdapter.java
@@ -0,0 +1,123 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+import java.awt.*;
+import java.lang.reflect.*;
+
+public class SystemWindowAdapter
+{
+ static public java.awt.Frame createFrame( int windowHandle )
+ {
+ String aOS = (String) System.getProperty( "os.name" );
+ java.awt.Frame aFrame = null;
+
+ if( aOS.startsWith( "SunOS" ) )
+ {
+ try
+ {
+ Class aClass = Class.forName( "sun.awt.motif.MEmbeddedFrame" );
+
+ if( aClass != null )
+ {
+ try
+ {
+ Constructor aCtor = aClass.getConstructor( new Class[] { long.class, boolean.class } );
+
+ if( aCtor != null )
+ {
+ aFrame = (java.awt.Frame) aCtor.newInstance( new Object[] { new Long( windowHandle ),
+ new Boolean( false ) } );
+ }
+ }
+ catch( Exception e )
+ {
+ }
+
+ if( aFrame == null )
+ {
+ try
+ {
+ Constructor aCtor = aClass.getConstructor( new Class[] { long.class } );
+
+ if( aCtor != null )
+ {
+ aFrame = (java.awt.Frame) aCtor.newInstance( new Object[] { new Long( windowHandle ) } );
+ }
+ }
+ catch( Exception e )
+ {
+ }
+ }
+ }
+ }
+ catch( Exception e )
+ {
+ }
+ }
+ else
+ {
+ try
+ {
+ Class aClass = Class.forName( "sun.awt.motif.MEmbeddedFrame" );
+
+ if( aClass != null )
+ {
+ Constructor aCtor = aClass.getConstructor( new Class[] { long.class } );
+
+ if( aCtor != null )
+ {
+ aFrame = (java.awt.Frame) aCtor.newInstance( new Object[] { new Long( windowHandle ) } );
+ }
+ }
+ }
+ catch( Exception e )
+ {
+ }
+
+ if( aFrame == null )
+ {
+ try
+ {
+ Class aClass = Class.forName( "sun.awt.X11.XEmbeddedFrame" );
+
+ if( aClass != null )
+ {
+ Constructor aCtor = aClass.getConstructor( new Class[] { long.class } );
+
+ if( aCtor != null )
+ aFrame = (java.awt.Frame) aCtor.newInstance( new Object[] { new Long( windowHandle ) } );
+ }
+ }
+ catch( Exception e )
+ {
+ }
+ }
+ }
+
+ return aFrame;
+ }
+}
diff --git a/avmedia/source/quicktime/framegrabber.cxx b/avmedia/source/quicktime/framegrabber.cxx
new file mode 100644
index 000000000000..186820beaec3
--- /dev/null
+++ b/avmedia/source/quicktime/framegrabber.cxx
@@ -0,0 +1,152 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "framegrabber.hxx"
+#include "player.hxx"
+
+#include <tools/stream.hxx>
+#include <vcl/graph.hxx>
+#include <vcl/cvtgrf.hxx>
+#include <unotools/localfilehelper.hxx>
+
+#define AVMEDIA_QUICKTIME_FRAMEGRABBER_IMPLEMENTATIONNAME "com.sun.star.comp.avmedia.FrameGrabber_Quicktime"
+#define AVMEDIA_QUICKTIME_FRAMEGRABBER_SERVICENAME "com.sun.star.media.FrameGrabber_Quicktime"
+
+using namespace ::com::sun::star;
+
+namespace avmedia { namespace quicktime {
+
+// ----------------
+// - FrameGrabber -
+// ----------------
+
+FrameGrabber::FrameGrabber( const uno::Reference< lang::XMultiServiceFactory >& rxMgr ) :
+ mxMgr( rxMgr )
+{
+ OSErr result;
+
+ NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
+ // check the version of QuickTime installed
+ result = Gestalt(gestaltQuickTime,&mnVersion);
+ if ((result == noErr) && (mnVersion >= QT701))
+ {
+ // we have version 7.01 or later, initialize
+ mpMovie = [QTMovie movie];
+ [mpMovie retain];
+ mbInitialized = true;
+ }
+ [pool release];
+}
+
+// ------------------------------------------------------------------------------
+
+FrameGrabber::~FrameGrabber()
+{
+ if( mbInitialized )
+ {
+ if( mpMovie )
+ {
+ [mpMovie release];
+ mpMovie = nil;
+ }
+ }
+}
+
+// ------------------------------------------------------------------------------
+
+bool FrameGrabber::create( const ::rtl::OUString& rURL )
+{
+ bool bRet = false;
+ maURL = rURL;
+ NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
+ NSString* aNSStr = [[[NSString alloc] initWithCharacters: rURL.getStr() length: rURL.getLength()]stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding] ;
+ NSURL* aURL = [NSURL URLWithString:aNSStr ];
+
+ // create the Movie
+
+ mpMovie = [mpMovie initWithURL:aURL error:nil];
+ if(mpMovie)
+ {
+ [mpMovie retain];
+ bRet = true;
+ }
+
+ [pool release];
+
+ return( bRet );
+}
+
+// ------------------------------------------------------------------------------
+
+uno::Reference< graphic::XGraphic > SAL_CALL FrameGrabber::grabFrame( double fMediaTime )
+ throw (uno::RuntimeException)
+{
+ uno::Reference< graphic::XGraphic > xRet;
+
+ NSImage* pImage = [mpMovie frameImageAtTime: QTMakeTimeWithTimeInterval(fMediaTime)];
+ NSData *pBitmap = [pImage TIFFRepresentation];
+ long nSize = [pBitmap length];
+ const void* pBitmapData = [pBitmap bytes];
+ SvMemoryStream aMemStm( (char *)pBitmapData, nSize, STREAM_READ | STREAM_WRITE );
+ Graphic aGraphic;
+ if ( GraphicConverter::Import( aMemStm, aGraphic, CVT_TIF ) == ERRCODE_NONE )
+ {
+ xRet = aGraphic.GetXGraphic();
+ }
+
+ return xRet;
+}
+
+// ------------------------------------------------------------------------------
+
+::rtl::OUString SAL_CALL FrameGrabber::getImplementationName( )
+ throw (uno::RuntimeException)
+{
+ return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( AVMEDIA_QUICKTIME_FRAMEGRABBER_IMPLEMENTATIONNAME ) );
+}
+
+// ------------------------------------------------------------------------------
+
+sal_Bool SAL_CALL FrameGrabber::supportsService( const ::rtl::OUString& ServiceName )
+ throw (uno::RuntimeException)
+{
+ return ServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM ( AVMEDIA_QUICKTIME_FRAMEGRABBER_SERVICENAME ) );
+}
+
+// ------------------------------------------------------------------------------
+
+uno::Sequence< ::rtl::OUString > SAL_CALL FrameGrabber::getSupportedServiceNames( )
+ throw (uno::RuntimeException)
+{
+ uno::Sequence< ::rtl::OUString > aRet(1);
+ aRet[0] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( AVMEDIA_QUICKTIME_FRAMEGRABBER_SERVICENAME ) );
+
+ return aRet;
+}
+
+} // namespace quicktime
+} // namespace avmedia
diff --git a/avmedia/source/quicktime/framegrabber.hxx b/avmedia/source/quicktime/framegrabber.hxx
new file mode 100644
index 000000000000..a5b004e0383e
--- /dev/null
+++ b/avmedia/source/quicktime/framegrabber.hxx
@@ -0,0 +1,73 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _FRAMEGRABBER_HXX
+#define _FRAMEGRABBER_HXX
+
+#include "quicktimecommon.hxx"
+
+#ifndef _COM_SUN_STAR_MEDIA_XFRAMEGRABBER_HDL_
+#include "com/sun/star/media/XFrameGrabber.hdl"
+#endif
+
+namespace avmedia { namespace quicktime {
+
+// ----------------
+// - FrameGrabber -
+// ----------------
+
+class FrameGrabber : public ::cppu::WeakImplHelper2 < ::com::sun::star::media::XFrameGrabber,
+ ::com::sun::star::lang::XServiceInfo >
+{
+public:
+
+ FrameGrabber( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& rxMgr );
+ ~FrameGrabber();
+
+ bool create( const ::rtl::OUString& rURL );
+
+ // XFrameGrabber
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::graphic::XGraphic > SAL_CALL grabFrame( double fMediaTime ) throw (::com::sun::star::uno::RuntimeException);
+
+ // XServiceInfo
+ virtual ::rtl::OUString SAL_CALL getImplementationName( ) throw (::com::sun::star::uno::RuntimeException);
+ virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw (::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames( ) throw (::com::sun::star::uno::RuntimeException);
+
+private:
+
+ ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > mxMgr;
+ ::rtl::OUString maURL;
+ QTMovie* mpMovie;
+ sal_Bool mbInitialized;
+ long mnVersion;
+};
+
+} // namespace quicktime
+} // namespace avmedia
+
+#endif // _FRAMEGRABBER_HXX
diff --git a/avmedia/source/quicktime/makefile.mk b/avmedia/source/quicktime/makefile.mk
new file mode 100644
index 000000000000..f3c9f244f357
--- /dev/null
+++ b/avmedia/source/quicktime/makefile.mk
@@ -0,0 +1,85 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..$/..
+PRJNAME=avmedia
+TARGET=avmediaQuickTime
+
+.IF "$(GUIBASE)"=="aqua"
+
+# --- Settings ----------------------------------
+
+.INCLUDE : settings.mk
+
+.IF "$(verbose)"!="" || "$(VERBOSE)"!=""
+CDEFS+= -DVERBOSE
+.ENDIF
+
+# --- Files ----------------------------------
+
+CFLAGSCXX+=$(OBJCXXFLAGS)
+
+SLOFILES= \
+ $(SLO)$/quicktimeuno.obj \
+ $(SLO)$/manager.obj \
+ $(SLO)$/window.obj \
+ $(SLO)$/framegrabber.obj \
+ $(SLO)$/player.obj
+
+EXCEPTIONSFILES= \
+ $(SLO)$/quicktimeuno.obj
+
+SHL1TARGET= $(TARGET)$(DLLPOSTFIX)
+
+SHL1STDLIBS= \
+ $(CPPULIB) \
+ $(SALLIB) \
+ $(COMPHELPERLIB) \
+ $(CPPUHELPERLIB) \
+ $(TOOLSLIB) \
+ $(VCLLIB)
+
+SHL1STDLIBS+= \
+ -framework Cocoa \
+ -framework QTKit \
+ -framework QuickTime
+
+# build DLL
+SHL1LIBS=$(SLB)$/$(TARGET).lib
+SHL1IMPLIB=i$(TARGET)
+SHL1DEF=$(MISC)$/$(SHL1TARGET).def
+
+SHL1VERSIONMAP=$(SOLARENV)/src/component.map
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : target.mk
+
+.ELSE
+dummy:
+ @echo " Nothing to build for GUIBASE=$(GUIBASE)"
+.ENDIF
diff --git a/avmedia/source/quicktime/manager.cxx b/avmedia/source/quicktime/manager.cxx
new file mode 100644
index 000000000000..4970864c7e76
--- /dev/null
+++ b/avmedia/source/quicktime/manager.cxx
@@ -0,0 +1,96 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "manager.hxx"
+#include "player.hxx"
+#include <tools/urlobj.hxx>
+
+using namespace ::com::sun::star;
+
+namespace avmedia { namespace quicktime {
+// ----------------
+// - Manager -
+// ----------------
+
+Manager::Manager( const uno::Reference< lang::XMultiServiceFactory >& rxMgr ) :
+ mxMgr( rxMgr )
+{
+ OSL_TRACE( "avmediaquicktime: Manager::Manager" );
+}
+
+// ------------------------------------------------------------------------------
+
+Manager::~Manager()
+{
+}
+
+// ------------------------------------------------------------------------------
+
+uno::Reference< media::XPlayer > SAL_CALL Manager::createPlayer( const ::rtl::OUString& rURL )
+ throw (uno::RuntimeException)
+{
+ Player* pPlayer( new Player( mxMgr ) );
+ uno::Reference< media::XPlayer > xRet( pPlayer );
+ INetURLObject aURL( rURL );
+
+ OSL_TRACE( "avmediaquicktime: Manager::createPlayer" );
+
+ if( !pPlayer->create( aURL.GetMainURL( INetURLObject::DECODE_UNAMBIGUOUS ) ) )
+ xRet = uno::Reference< media::XPlayer >();
+
+ return xRet;
+}
+
+// ------------------------------------------------------------------------------
+
+::rtl::OUString SAL_CALL Manager::getImplementationName( )
+ throw (uno::RuntimeException)
+{
+ return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( AVMEDIA_QUICKTIME_MANAGER_IMPLEMENTATIONNAME ) );
+}
+
+// ------------------------------------------------------------------------------
+
+sal_Bool SAL_CALL Manager::supportsService( const ::rtl::OUString& ServiceName )
+ throw (uno::RuntimeException)
+{
+ return ServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM ( AVMEDIA_QUICKTIME_MANAGER_SERVICENAME ) );
+}
+
+// ------------------------------------------------------------------------------
+
+uno::Sequence< ::rtl::OUString > SAL_CALL Manager::getSupportedServiceNames( )
+ throw (uno::RuntimeException)
+{
+ uno::Sequence< ::rtl::OUString > aRet(1);
+ aRet[0] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( AVMEDIA_QUICKTIME_MANAGER_SERVICENAME ) );
+
+ return aRet;
+}
+
+} // namespace quicktime
+} // namespace avmedia
diff --git a/avmedia/source/quicktime/manager.hxx b/avmedia/source/quicktime/manager.hxx
new file mode 100644
index 000000000000..07740a1a9259
--- /dev/null
+++ b/avmedia/source/quicktime/manager.hxx
@@ -0,0 +1,66 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _MANAGER_HXX
+#define _MANAGER_HXX
+
+#include "quicktimecommon.hxx"
+
+#ifndef _COM_SUN_STAR_MEDIA_XMANAGER_HDL_
+#include "com/sun/star/media/XManager.hdl"
+#endif
+
+// -----------
+// - Manager -
+// -----------
+
+namespace avmedia { namespace quicktime {
+
+class Manager : public ::cppu::WeakImplHelper2 < ::com::sun::star::media::XManager,
+ ::com::sun::star::lang::XServiceInfo >
+{
+public:
+
+ Manager( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& rxMgr );
+ ~Manager();
+
+ // XManager
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::media::XPlayer > SAL_CALL createPlayer( const ::rtl::OUString& aURL ) throw (::com::sun::star::uno::RuntimeException);
+
+ // XServiceInfo
+ virtual ::rtl::OUString SAL_CALL getImplementationName( ) throw (::com::sun::star::uno::RuntimeException);
+ virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw (::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames( ) throw (::com::sun::star::uno::RuntimeException);
+private:
+
+ ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > mxMgr;
+};
+
+} // namespace quicktime
+} // namespace avmedia
+
+#endif // _MANAGER_HXX
diff --git a/avmedia/source/quicktime/player.cxx b/avmedia/source/quicktime/player.cxx
new file mode 100644
index 000000000000..6c77f999e110
--- /dev/null
+++ b/avmedia/source/quicktime/player.cxx
@@ -0,0 +1,501 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <math.h>
+
+#include "player.hxx"
+#include "framegrabber.hxx"
+#include "window.hxx"
+
+// dbg_dump for development
+#if OSL_DEBUG_LEVEL > 1
+#include <rtl/strbuf.hxx>
+#include <rtl/ustring.hxx>
+
+const sal_Char *dbg_dump(const rtl::OString &rStr)
+{
+ static rtl::OStringBuffer aStr;
+
+ aStr = rtl::OStringBuffer(rStr);
+ aStr.append(static_cast<char>(0));
+ return aStr.getStr();
+}
+
+const sal_Char *dbg_dump(const rtl::OUString &rStr)
+{
+ return dbg_dump(rtl::OUStringToOString(rStr, RTL_TEXTENCODING_UTF8));
+}
+
+const sal_Char *dbg_dump(rtl_String *pStr)
+{
+ return dbg_dump(rtl::OString(pStr));
+}
+
+const sal_Char *dbg_dump(rtl_uString *pStr)
+{
+ return dbg_dump(rtl::OUString(pStr));
+}
+
+#endif
+
+using namespace ::com::sun::star;
+
+namespace avmedia { namespace quicktime {
+
+// ----------------
+// - Player -
+// ----------------
+
+Player::Player( const uno::Reference< lang::XMultiServiceFactory >& rxMgr ) :
+ mxMgr( rxMgr ),
+ mpMovie( nil ),
+ /* GST
+ mbFakeVideo (sal_False ),
+ */
+ mnUnmutedVolume( 0 ),
+ mnStopTime( DBL_MAX ), //max double
+ mbMuted( false ),
+ mbLooping( false ),
+ mbInitialized( false ),
+ mnWindowID( 0 ),
+ mnDuration( 0 ),
+ mnWidth( 0 ),
+ mnHeight( 0 ),
+ mnVersion( 0 ),
+ maSizeCondition( osl_createCondition() )
+{
+ OSErr result;
+
+ NSApplicationLoad();
+ NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
+ // check the version of QuickTime installed
+ result = Gestalt(gestaltQuickTime,&mnVersion);
+ if ((result == noErr) && (mnVersion >= QT701))
+ {
+ // we have version 7.01 or later, initialize
+ mbInitialized = true;
+ }
+ [pool release];
+}
+
+// ------------------------------------------------------------------------------
+
+Player::~Player()
+{
+ if( mpMovie )
+ {
+ [mpMovie release];
+ mpMovie = nil;
+ }
+}
+// ------------------------------------------------------------------------------
+
+QTMovie* Player::getMovie()
+{
+ OSL_ASSERT( mpMovie );
+ return mpMovie;
+}
+
+// ------------------------------------------------------------------------------
+
+bool Player::create( const ::rtl::OUString& rURL )
+{
+ bool bRet = false;
+ // create the Movie
+ if( mbInitialized )
+ {
+ NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
+
+ if( mpMovie )
+ {
+ [mpMovie release];
+ mpMovie = nil;
+ }
+
+ NSString* aNSStr = [[[NSString alloc] initWithCharacters: rURL.getStr() length: rURL.getLength()]stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding] ;
+ NSURL* aURL = [NSURL URLWithString:aNSStr ];
+
+
+ NSError* pErr = nil;
+ mpMovie = [QTMovie movieWithURL:aURL error:&pErr];
+ if(mpMovie)
+ {
+ [mpMovie retain];
+ maURL = rURL;
+ bRet = true;
+ }
+ if( pErr )
+ {
+ OSL_TRACE( "NSMovie create failed with error %ld (%s)",
+ (long)[pErr code],
+ [[pErr localizedDescription] cString]
+ );
+ }
+ [pool release];
+ }
+
+ return bRet;
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Player::start( )
+ throw (uno::RuntimeException)
+{
+ OSL_TRACE ("Player::start");
+
+ if( mpMovie )
+ {
+ [mpMovie play];
+ }
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Player::stop( )
+ throw (uno::RuntimeException)
+{
+ OSL_TRACE ("Player::stop");
+ if( mpMovie )
+ {
+ [mpMovie stop];
+ }
+}
+
+// ------------------------------------------------------------------------------
+
+sal_Bool SAL_CALL Player::isPlaying()
+ throw (uno::RuntimeException)
+{
+ bool bRet = false;
+
+ if ( mpMovie )
+ {
+ if ([mpMovie rate] != 0)
+ {
+ bRet = true;
+ }
+ }
+
+ return bRet;
+}
+
+// ------------------------------------------------------------------------------
+
+double SAL_CALL Player::getDuration( )
+ throw (uno::RuntimeException)
+{
+ // slideshow checks for non-zero duration, so cheat here
+ double duration = 0.01;
+
+ if ( mpMovie ) // && mnDuration > 0 ) {
+ {
+ QTTime structDuration = [mpMovie duration] ;
+ duration = (double)structDuration.timeValue / (double)structDuration.timeScale;
+ }
+
+ return duration;
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Player::setMediaTime( double fTime )
+ throw (uno::RuntimeException)
+{
+ OSL_TRACE ("Player::setMediaTime");
+
+ if ( mpMovie )
+ {
+ [mpMovie setCurrentTime: QTMakeTimeWithTimeInterval(fTime)];
+ }
+}
+
+// ------------------------------------------------------------------------------
+
+double SAL_CALL Player::getMediaTime( )
+ throw (uno::RuntimeException)
+{
+ double position = 0.0;
+
+ if ( mpMovie )
+ {
+ QTTime structDuration = [mpMovie currentTime] ;
+ position = (double)structDuration.timeValue / (double)structDuration.timeScale;
+ }
+
+ if(isPlaying() && position>mnStopTime)
+ {
+ stop();
+ }
+
+ return position;
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Player::setStopTime( double fTime )
+ throw (uno::RuntimeException)
+{
+ OSL_TRACE ("Player::setStopTime %f", fTime);
+
+ mnStopTime = fTime;
+}
+
+// ------------------------------------------------------------------------------
+
+double SAL_CALL Player::getStopTime( )
+ throw (uno::RuntimeException)
+{
+ double fRet = mnStopTime;
+
+ return fRet;
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Player::setRate( double fRate )
+ throw (uno::RuntimeException)
+{
+ OSL_TRACE ("Player::setRate");
+
+ // Quicktime: 0 = stop, 1 = normal speed, 2 = double speed, -1 = normal speed backwards
+ if ( mpMovie )
+ {
+ [mpMovie setRate: fRate];
+ }
+}
+
+// ------------------------------------------------------------------------------
+
+double SAL_CALL Player::getRate( )
+ throw (uno::RuntimeException)
+{
+ // Quicktime: 0 = stop, 1 = normal speed, 2 = double speed, -1 = normal speed backwards
+ double rate = 1.0;
+
+ OSL_TRACE ("Player::getRate");
+
+ if ( mpMovie )
+ {
+ rate = (double) [mpMovie rate];
+ }
+
+ return rate;
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Player::setPlaybackLoop( sal_Bool bSet )
+ throw (uno::RuntimeException)
+{
+ OSL_TRACE ("Player::setPlaybackLoop? %s", bSet?"True":"False" );
+
+ if(bSet)
+ {
+ [mpMovie setAttribute:[NSNumber numberWithBool:YES] forKey: QTMovieLoopsAttribute] ;
+ }
+ else
+ {
+ [mpMovie setAttribute:[NSNumber numberWithBool:NO] forKey: QTMovieLoopsAttribute] ;
+ }
+}
+
+// ------------------------------------------------------------------------------
+
+sal_Bool SAL_CALL Player::isPlaybackLoop( )
+ throw (uno::RuntimeException)
+{
+ bool bRet = [[mpMovie attributeForKey:QTMovieLoopsAttribute] boolValue];
+
+ OSL_TRACE ("Player::isPlaybackLoop ? %s", bRet?"True":"False" );
+
+ return bRet;
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Player::setMute( sal_Bool bSet )
+ throw (uno::RuntimeException)
+{
+ OSL_TRACE( "set mute: %d muted: %d unmuted volume: %lf", bSet, mbMuted, mnUnmutedVolume );
+
+ // change the volume to 0 or the unmuted volume
+ if( mpMovie && mbMuted != bSet )
+ {
+ [mpMovie setMuted: bSet ];
+ mbMuted = bSet;
+ }
+
+}
+
+// ------------------------------------------------------------------------------
+
+sal_Bool SAL_CALL Player::isMute( )
+ throw (uno::RuntimeException)
+{
+ OSL_TRACE ("Player::isMuted");
+
+ return mbMuted;
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Player::setVolumeDB( sal_Int16 nVolumeDB )
+ throw (uno::RuntimeException)
+{
+ // OOo db volume -40 = QTVolume 0
+ // OOo db volume 0 = QTvolume 1
+ if(nVolumeDB==-40)
+ {
+ mnUnmutedVolume = 0;
+ }
+ else
+ {
+ mnUnmutedVolume = pow( 10.0, nVolumeDB / 20.0 );
+ }
+
+ OSL_TRACE( "set volume: %d gst volume: %f", nVolumeDB, mnUnmutedVolume );
+
+ // change volume
+ if( !mbMuted && mpMovie )
+ {
+ [mpMovie setVolume: mnUnmutedVolume ];
+ }
+}
+
+// ------------------------------------------------------------------------------
+
+sal_Int16 SAL_CALL Player::getVolumeDB( )
+ throw (uno::RuntimeException)
+{
+ sal_Int16 nVolumeDB = 0.0;
+
+ if( mpMovie )
+ {
+ float volume = 0.0;
+
+ volume = [mpMovie volume];
+ if(volume>0) //protect from log10(0)
+ {
+ nVolumeDB = (sal_Int16) ( 20.0*log10 ( volume ) );
+ }
+ else
+ {
+ nVolumeDB = -40 ; // QT zero volume is no volume, -40db
+ }
+ }
+
+ return nVolumeDB;
+}
+
+// ------------------------------------------------------------------------------
+
+awt::Size SAL_CALL Player::getPreferredPlayerWindowSize( )
+ throw (uno::RuntimeException)
+{
+ NSSize nsSize = [[mpMovie attributeForKey:QTMovieNaturalSizeAttribute] sizeValue];
+ awt::Size aSize( nsSize.width, nsSize.height );
+ return aSize;
+}
+
+
+// ------------------------------------------------------------------------------
+
+uno::Reference< ::media::XPlayerWindow > SAL_CALL Player::createPlayerWindow( const uno::Sequence< uno::Any >& aArguments )
+ throw (uno::RuntimeException)
+{
+ uno::Reference< ::media::XPlayerWindow > xRet;
+ awt::Size aSize( getPreferredPlayerWindowSize() );
+ NSSize nsSize( NSMakeSize(aSize.Width, aSize.Height) );
+
+ OSL_TRACE( "Player::createPlayerWindow %d %d length: %d", aSize.Width, aSize.Height, aArguments.getLength() );
+
+ if( aSize.Width > 0 && aSize.Height > 0 )
+ {
+ sal_IntPtr nPtr = NULL;
+ aArguments[0] >>= nPtr;
+ NSView* pParentView = reinterpret_cast< NSView * >(nPtr);
+
+ ::avmedia::quicktime::Window* pWindow = new ::avmedia::quicktime::Window( mxMgr, *this, pParentView );
+ xRet = pWindow;
+ }
+
+ return xRet;
+}
+
+// ------------------------------------------------------------------------------
+
+uno::Reference< media::XFrameGrabber > SAL_CALL Player::createFrameGrabber( )
+ throw (::com::sun::star::uno::RuntimeException)
+{
+ uno::Reference< media::XFrameGrabber > xRet;
+ OSL_TRACE ("Player::createFrameGrabber");
+
+ if( maURL.getLength() > 0 )
+ {
+ FrameGrabber* pGrabber = new FrameGrabber( mxMgr );
+
+ xRet = pGrabber;
+
+ if( !pGrabber->create( maURL ) )
+ {
+ xRet.clear();
+ }
+ }
+
+ return xRet;
+}
+
+// ------------------------------------------------------------------------------
+
+::rtl::OUString SAL_CALL Player::getImplementationName( )
+ throw (uno::RuntimeException)
+{
+ return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( AVMEDIA_QUICKTIME_PLAYER_IMPLEMENTATIONNAME ) );
+}
+
+// ------------------------------------------------------------------------------
+
+sal_Bool SAL_CALL Player::supportsService( const ::rtl::OUString& ServiceName )
+ throw (uno::RuntimeException)
+{
+ return ServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM ( AVMEDIA_QUICKTIME_PLAYER_SERVICENAME ) );
+}
+
+// ------------------------------------------------------------------------------
+
+uno::Sequence< ::rtl::OUString > SAL_CALL Player::getSupportedServiceNames( )
+ throw (uno::RuntimeException)
+{
+ uno::Sequence< ::rtl::OUString > aRet(1);
+ aRet[0] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( AVMEDIA_QUICKTIME_PLAYER_SERVICENAME ) );
+
+ return aRet;
+}
+
+} // namespace quicktime
+} // namespace avmedia
diff --git a/avmedia/source/quicktime/player.hxx b/avmedia/source/quicktime/player.hxx
new file mode 100644
index 000000000000..e85bbc5035db
--- /dev/null
+++ b/avmedia/source/quicktime/player.hxx
@@ -0,0 +1,113 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _PLAYER_HXX
+#define _PLAYER_HXX
+
+#include <osl/conditn.h>
+#include "quicktimecommon.hxx"
+
+#ifndef _COM_SUN_STAR_MEDIA_XPLAYER_HDL_
+#include "com/sun/star/media/XPlayer.hdl"
+#endif
+
+namespace avmedia { namespace quicktime {
+
+/*
+// ----------
+// - Player -
+// ----------
+*/
+
+class Player : public ::cppu::WeakImplHelper2< ::com::sun::star::media::XPlayer,
+ ::com::sun::star::lang::XServiceInfo >
+{
+public:
+
+ Player( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& rxMgr );
+ ~Player();
+
+ bool create( const ::rtl::OUString& rURL );
+
+// void processMessage( GstMessage *message );
+
+ // XPlayer
+ virtual void SAL_CALL start( ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL stop( ) throw (::com::sun::star::uno::RuntimeException);
+ virtual sal_Bool SAL_CALL isPlaying( ) throw (::com::sun::star::uno::RuntimeException);
+ virtual double SAL_CALL getDuration( ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL setMediaTime( double fTime ) throw (::com::sun::star::uno::RuntimeException);
+ virtual double SAL_CALL getMediaTime( ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL setStopTime( double fTime ) throw (::com::sun::star::uno::RuntimeException);
+ virtual double SAL_CALL getStopTime( ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL setRate( double fRate ) throw (::com::sun::star::uno::RuntimeException);
+ virtual double SAL_CALL getRate( ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL setPlaybackLoop( sal_Bool bSet ) throw (::com::sun::star::uno::RuntimeException);
+ virtual sal_Bool SAL_CALL isPlaybackLoop( ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL setMute( sal_Bool bSet ) throw (::com::sun::star::uno::RuntimeException);
+ virtual sal_Bool SAL_CALL isMute( ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL setVolumeDB( sal_Int16 nVolumeDB ) throw (::com::sun::star::uno::RuntimeException);
+ virtual sal_Int16 SAL_CALL getVolumeDB( ) throw (::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::awt::Size SAL_CALL getPreferredPlayerWindowSize( ) throw (::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::media::XPlayerWindow > SAL_CALL createPlayerWindow( const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& aArguments ) throw (::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::media::XFrameGrabber > SAL_CALL createFrameGrabber( ) throw (::com::sun::star::uno::RuntimeException);
+ // XServiceInfo
+ virtual ::rtl::OUString SAL_CALL getImplementationName( ) throw (::com::sun::star::uno::RuntimeException);
+ virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw (::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames( ) throw (::com::sun::star::uno::RuntimeException);
+
+ QTMovie* getMovie();
+
+private:
+ ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > mxMgr;
+
+ ::rtl::OUString maURL;
+
+ QTMovie *mpMovie; // the Movie object
+ /* GST
+ sal_Bool mbFakeVideo;
+ */
+ float mnUnmutedVolume;
+ double mnStopTime;
+
+ sal_Bool mbMuted;
+ sal_Bool mbLooping;
+ sal_Bool mbInitialized;
+
+ long mnWindowID;
+ long mnDuration;
+ int mnWidth;
+ int mnHeight;
+
+ long mnVersion;
+ oslCondition maSizeCondition;
+};
+
+} // namespace quicktime
+} // namespace avmedia
+
+#endif // _PLAYER_HXX
diff --git a/avmedia/source/quicktime/quicktimecommon.hxx b/avmedia/source/quicktime/quicktimecommon.hxx
new file mode 100644
index 000000000000..82ade238396c
--- /dev/null
+++ b/avmedia/source/quicktime/quicktimecommon.hxx
@@ -0,0 +1,81 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _QUICKTIMECOMMON_HXX
+#define _QUICKTIMECOMMON_HXX
+
+#ifdef MACOSX
+#include <premac.h>
+#import <Cocoa/Cocoa.h>
+#import <QTKit/QTKit.h>
+#import <QuickTime/QuickTime.h>
+#include <postmac.h>
+#endif
+#include <osl/mutex.hxx>
+#ifndef __RTL_USTRING_
+#include <rtl/ustring.hxx>
+#endif
+#include <tools/debug.hxx>
+#include <tools/stream.hxx>
+#include <tools/string.hxx>
+#include <tools/urlobj.hxx>
+#include <cppuhelper/implbase1.hxx>
+#include <cppuhelper/implbase2.hxx>
+#include <cppuhelper/weak.hxx>
+#include <cppuhelper/factory.hxx>
+
+#include <com/sun/star/uno/Reference.h>
+#include <com/sun/star/uno/RuntimeException.hpp>
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+#include <com/sun/star/lang/XComponent.hpp>
+#include <com/sun/star/registry/XRegistryKey.hpp>
+#include <com/sun/star/lang/XComponent.hpp>
+#include <com/sun/star/lang/XServiceInfo.hpp>
+#include <com/sun/star/awt/Rectangle.hpp>
+#include <com/sun/star/awt/KeyModifier.hpp>
+#include <com/sun/star/awt/MouseButton.hpp>
+#include <com/sun/star/media/XManager.hpp>
+
+#define AVMEDIA_QUICKTIME_MANAGER_IMPLEMENTATIONNAME "com.sun.star.comp.avmedia.Manager_QuickTime"
+#define AVMEDIA_QUICKTIME_MANAGER_SERVICENAME "com.sun.star.media.Manager_QuickTime"
+
+#define AVMEDIA_QUICKTIME_PLAYER_IMPLEMENTATIONNAME "com.sun.star.comp.avmedia.Player_QuickTime"
+#define AVMEDIA_QUICKTIME_PLAYER_SERVICENAME "com.sun.star.media.Player_QuickTime"
+
+#define AVMEDIA_QUICKTIME_WINDOW_IMPLEMENTATIONNAME "com.sun.star.comp.avmedia.Window_QuickTime"
+#define AVMEDIA_QUICKTIME_WINDOW_SERVICENAME "com.sun.star.media.Window_QuickTime"
+
+#define WM_GRAPHNOTIFY (WM_USER + 567)
+
+// Quicktime 7+ in Mac OS X 10.4
+#define QT701 0x07010000
+
+// Quicktime 6.4+ in Mac OS X 10.3
+#define QT64 0x06400000
+
+
+#endif // _QUICKTIMECOMMOM_HXX
diff --git a/avmedia/source/quicktime/quicktimeuno.cxx b/avmedia/source/quicktime/quicktimeuno.cxx
new file mode 100644
index 000000000000..b2dee4d77838
--- /dev/null
+++ b/avmedia/source/quicktime/quicktimeuno.cxx
@@ -0,0 +1,106 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "quicktimecommon.hxx"
+#include "manager.hxx"
+
+using namespace ::com::sun::star;
+
+// -------------------
+// - factory methods -
+// -------------------
+
+static uno::Reference< uno::XInterface > SAL_CALL create_MediaPlayer( const uno::Reference< lang::XMultiServiceFactory >& rxFact )
+{
+ return uno::Reference< uno::XInterface >( *new ::avmedia::quicktime::Manager( rxFact ) );
+}
+
+// ------------------------------------------
+// - component_getImplementationEnvironment -
+// ------------------------------------------
+
+extern "C" void SAL_CALL component_getImplementationEnvironment( const sal_Char ** ppEnvTypeName, uno_Environment ** /* ppEnv */ )
+{
+ *ppEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME;
+}
+
+// -----------------------
+// - component_writeInfo -
+// -----------------------
+
+extern "C" sal_Bool SAL_CALL component_writeInfo( void* /* pServiceManager */, void* pRegistryKey )
+{
+ sal_Bool bRet = sal_False;
+
+ if( pRegistryKey )
+ {
+ try
+ {
+ uno::Reference< registry::XRegistryKey > xNewKey1(
+ static_cast< registry::XRegistryKey* >( pRegistryKey )->createKey(
+ ::rtl::OUString::createFromAscii(
+ "/" AVMEDIA_QUICKTIME_MANAGER_IMPLEMENTATIONNAME "/UNO/SERVICES/"
+ AVMEDIA_QUICKTIME_MANAGER_SERVICENAME ) ) );
+
+ bRet = sal_True;
+ }
+ catch( registry::InvalidRegistryException& )
+ {
+ OSL_ENSURE( sal_False, "### InvalidRegistryException!" );
+ }
+ }
+
+ return bRet;
+}
+
+// ------------------------
+// - component_getFactory -
+// ------------------------
+
+extern "C" void* SAL_CALL component_getFactory( const sal_Char* pImplName, void* pServiceManager, void* /* pRegistryKey */ )
+{
+ uno::Reference< lang::XSingleServiceFactory > xFactory;
+ void* pRet = 0;
+
+ if( rtl_str_compare( pImplName, AVMEDIA_QUICKTIME_MANAGER_IMPLEMENTATIONNAME ) == 0 )
+ {
+ const ::rtl::OUString aServiceName( ::rtl::OUString::createFromAscii( AVMEDIA_QUICKTIME_MANAGER_SERVICENAME ) );
+
+ xFactory = uno::Reference< lang::XSingleServiceFactory >( ::cppu::createSingleFactory(
+ reinterpret_cast< lang::XMultiServiceFactory* >( pServiceManager ),
+ ::rtl::OUString::createFromAscii( AVMEDIA_QUICKTIME_MANAGER_IMPLEMENTATIONNAME ),
+ create_MediaPlayer, uno::Sequence< ::rtl::OUString >( &aServiceName, 1 ) ) );
+ }
+
+ if( xFactory.is() )
+ {
+ xFactory->acquire();
+ pRet = xFactory.get();
+ }
+
+ return pRet;
+}
diff --git a/avmedia/source/quicktime/window.cxx b/avmedia/source/quicktime/window.cxx
new file mode 100644
index 000000000000..e44acf4fbb67
--- /dev/null
+++ b/avmedia/source/quicktime/window.cxx
@@ -0,0 +1,353 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <com/sun/star/awt/SystemPointer.hpp>
+#include <com/sun/star/awt/PosSize.hpp>
+
+#include "window.hxx"
+#include "player.hxx"
+
+using namespace ::com::sun::star;
+
+namespace avmedia { namespace quicktime {
+
+// -----------
+// - statics -
+// -----------
+
+static ::osl::Mutex& ImplGetOwnStaticMutex()
+{
+ static ::osl::Mutex* pMutex = NULL;
+
+ if( pMutex == NULL )
+ {
+ ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() );
+
+ if( pMutex == NULL )
+ {
+ static ::osl::Mutex aMutex;
+ pMutex = &aMutex;
+ }
+ }
+
+ return *pMutex;
+}
+
+// ---------------
+// - Window -
+// ---------------
+
+// ------------------------------------------------------------------------------
+
+Window::Window( const uno::Reference< lang::XMultiServiceFactory >& i_rxMgr, Player& i_rPlayer, NSView* i_pParentView ) :
+ mxMgr( i_rxMgr ),
+ maListeners( maMutex ),
+ meZoomLevel( media::ZoomLevel_NOT_AVAILABLE ),
+ mrPlayer( i_rPlayer ),
+ mnPointerType( awt::SystemPointer::ARROW ),
+ mpParentView( i_pParentView ),
+ mpMovieView( nil )
+{
+
+ ::osl::MutexGuard aGuard( ImplGetOwnStaticMutex() );
+
+
+ if( mpParentView ) // sanity check
+ {
+
+ NSRect aViewRect = [mpParentView frame];
+ aViewRect.origin.x = aViewRect.origin.y = 0;
+ mpMovieView = [[QTMovieView alloc] initWithFrame: aViewRect];
+ [mpMovieView setMovie: mrPlayer.getMovie() ];
+ [mpMovieView setControllerVisible: NO];
+ [mpMovieView setPreservesAspectRatio: YES];
+ [mpMovieView setAutoresizingMask: NSViewWidthSizable | NSViewHeightSizable];
+ [mpParentView addSubview: mpMovieView];
+ [mpParentView setAutoresizesSubviews: YES];
+ }
+
+ OSL_TRACE ("Window::Window");
+}
+
+// ------------------------------------------------------------------------------
+
+Window::~Window()
+{
+ if( mpMovieView )
+ {
+ [mpMovieView removeFromSuperview];
+ [mpMovieView setMovie:nil];
+ [mpMovieView release];
+ mpMovieView = nil;
+ }
+}
+
+bool Window::create( const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& aArguments )
+{
+ return true;
+}
+
+// XPlayerWindow
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Window::update( )
+ throw (uno::RuntimeException)
+{
+ ;
+}
+
+// ------------------------------------------------------------------------------
+
+sal_Bool SAL_CALL Window::setZoomLevel( media::ZoomLevel eZoomLevel )
+ throw (uno::RuntimeException)
+{
+ return false;
+}
+
+// ------------------------------------------------------------------------------
+
+media::ZoomLevel SAL_CALL Window::getZoomLevel( )
+ throw (uno::RuntimeException)
+{
+ return meZoomLevel;
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Window::setPointerType( sal_Int32 nPointerType )
+ throw (uno::RuntimeException)
+{
+ mnPointerType = nPointerType;
+}
+
+// XWindow
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Window::setPosSize( sal_Int32 X, sal_Int32 Y, sal_Int32 Width, sal_Int32 Height, sal_Int16 Flags )
+ throw (uno::RuntimeException)
+{
+ if( mpParentView && mpMovieView )
+ {
+ NSRect aRect = [mpMovieView frame];
+ if( (Flags & awt::PosSize::WIDTH) )
+ aRect.size.width = Width;
+ if( (Flags & awt::PosSize::HEIGHT) )
+ aRect.size.height = Height;
+ }
+}
+
+// ------------------------------------------------------------------------------
+
+awt::Rectangle SAL_CALL Window::getPosSize()
+ throw (uno::RuntimeException)
+{
+ awt::Rectangle aRet;
+
+ NSRect aRect = [mpMovieView frame];
+ aRet.X = aRet.Y = 0;
+ aRet.Width = aRect.size.width;
+ aRet.Height = aRect.size.height;
+
+ return aRet;
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Window::setVisible( sal_Bool bVisible )
+ throw (uno::RuntimeException)
+{
+ OSL_TRACE ("Window::setVisible");
+
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Window::setEnable( sal_Bool bEnable )
+ throw (uno::RuntimeException)
+{
+ ;
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Window::setFocus( )
+ throw (uno::RuntimeException)
+{
+ OSL_TRACE ("Window::setFocus");
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Window::addWindowListener( const uno::Reference< awt::XWindowListener >& xListener )
+ throw (uno::RuntimeException)
+{
+ maListeners.addInterface( getCppuType( &xListener ), xListener );
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Window::removeWindowListener( const uno::Reference< awt::XWindowListener >& xListener )
+ throw (uno::RuntimeException)
+{
+ maListeners.removeInterface( getCppuType( &xListener ), xListener );
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Window::addFocusListener( const uno::Reference< awt::XFocusListener >& xListener )
+ throw (uno::RuntimeException)
+{
+ maListeners.addInterface( getCppuType( &xListener ), xListener );
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Window::removeFocusListener( const uno::Reference< awt::XFocusListener >& xListener )
+ throw (uno::RuntimeException)
+{
+ maListeners.removeInterface( getCppuType( &xListener ), xListener );
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Window::addKeyListener( const uno::Reference< awt::XKeyListener >& xListener )
+ throw (uno::RuntimeException)
+{
+ maListeners.addInterface( getCppuType( &xListener ), xListener );
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Window::removeKeyListener( const uno::Reference< awt::XKeyListener >& xListener )
+ throw (uno::RuntimeException)
+{
+ maListeners.removeInterface( getCppuType( &xListener ), xListener );
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Window::addMouseListener( const uno::Reference< awt::XMouseListener >& xListener )
+ throw (uno::RuntimeException)
+{
+ maListeners.addInterface( getCppuType( &xListener ), xListener );
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Window::removeMouseListener( const uno::Reference< awt::XMouseListener >& xListener )
+ throw (uno::RuntimeException)
+{
+ maListeners.removeInterface( getCppuType( &xListener ), xListener );
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Window::addMouseMotionListener( const uno::Reference< awt::XMouseMotionListener >& xListener )
+ throw (uno::RuntimeException)
+{
+ maListeners.addInterface( getCppuType( &xListener ), xListener );
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Window::removeMouseMotionListener( const uno::Reference< awt::XMouseMotionListener >& xListener )
+ throw (uno::RuntimeException)
+{
+ maListeners.removeInterface( getCppuType( &xListener ), xListener );
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Window::addPaintListener( const uno::Reference< awt::XPaintListener >& xListener )
+ throw (uno::RuntimeException)
+{
+ maListeners.addInterface( getCppuType( &xListener ), xListener );
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Window::removePaintListener( const uno::Reference< awt::XPaintListener >& xListener )
+ throw (uno::RuntimeException)
+{
+ maListeners.removeInterface( getCppuType( &xListener ), xListener );
+}
+
+
+// XComponent
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Window::dispose( )
+ throw (uno::RuntimeException)
+{
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Window::addEventListener( const uno::Reference< lang::XEventListener >& xListener )
+ throw (uno::RuntimeException)
+{
+ maListeners.addInterface( getCppuType( &xListener ), xListener );
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Window::removeEventListener( const uno::Reference< lang::XEventListener >& xListener )
+ throw (uno::RuntimeException)
+{
+ maListeners.removeInterface( getCppuType( &xListener ), xListener );
+}
+
+// XServiceInfo
+// ------------------------------------------------------------------------------
+
+::rtl::OUString SAL_CALL Window::getImplementationName( )
+ throw (uno::RuntimeException)
+{
+ return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( AVMEDIA_QUICKTIME_WINDOW_IMPLEMENTATIONNAME ) );
+}
+
+// ------------------------------------------------------------------------------
+
+sal_Bool SAL_CALL Window::supportsService( const ::rtl::OUString& ServiceName )
+ throw (uno::RuntimeException)
+{
+ return ServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM ( AVMEDIA_QUICKTIME_WINDOW_SERVICENAME ) );
+}
+
+// ------------------------------------------------------------------------------
+
+uno::Sequence< ::rtl::OUString > SAL_CALL Window::getSupportedServiceNames( )
+ throw (uno::RuntimeException)
+{
+ uno::Sequence< ::rtl::OUString > aRet(1);
+ aRet[0] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( AVMEDIA_QUICKTIME_WINDOW_SERVICENAME ) );
+
+ return aRet;
+}
+
+} // namespace quicktime
+} // namespace avmedia
diff --git a/avmedia/source/quicktime/window.hxx b/avmedia/source/quicktime/window.hxx
new file mode 100644
index 000000000000..4ca2e76ddc52
--- /dev/null
+++ b/avmedia/source/quicktime/window.hxx
@@ -0,0 +1,115 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _WINDOW_HXX
+#define _WINDOW_HXX
+
+#include "quicktimecommon.hxx"
+#include <cppuhelper/interfacecontainer.h>
+
+#ifndef _COM_SUN_STAR_MEDIA_XPLAYERWINDOW_HDL_
+#include "com/sun/star/media/XPlayerWindow.hdl"
+#endif
+
+namespace avmedia { namespace quicktime {
+
+// ---------------
+// - Window -
+// ---------------
+
+class Player;
+
+class Window : public ::cppu::WeakImplHelper2 < ::com::sun::star::media::XPlayerWindow,
+ ::com::sun::star::lang::XServiceInfo >
+{
+public:
+
+ Window( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& i_rxMgr,
+ Player& i_rPlayer,
+ NSView* i_pParentView
+ );
+ ~Window();
+
+ bool create( const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& aArguments );
+ void processGraphEvent();
+ void updatePointer();
+
+ // XPlayerWindow
+ virtual void SAL_CALL update( ) throw (::com::sun::star::uno::RuntimeException);
+ virtual sal_Bool SAL_CALL setZoomLevel( ::com::sun::star::media::ZoomLevel ZoomLevel ) throw (::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::media::ZoomLevel SAL_CALL getZoomLevel( ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL setPointerType( sal_Int32 nPointerType ) throw (::com::sun::star::uno::RuntimeException);
+
+ // XWindow
+ virtual void SAL_CALL setPosSize( sal_Int32 X, sal_Int32 Y, sal_Int32 Width, sal_Int32 Height, sal_Int16 Flags ) throw (::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::awt::Rectangle SAL_CALL getPosSize( ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL setVisible( sal_Bool Visible ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL setEnable( sal_Bool Enable ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL setFocus( ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL addWindowListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL removeWindowListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL addFocusListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XFocusListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL removeFocusListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XFocusListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL addKeyListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XKeyListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL removeKeyListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XKeyListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL addMouseListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMouseListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL removeMouseListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMouseListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL addMouseMotionListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMouseMotionListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL removeMouseMotionListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMouseMotionListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL addPaintListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XPaintListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL removePaintListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XPaintListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
+
+ // XComponent
+ virtual void SAL_CALL dispose( ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL addEventListener( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL removeEventListener( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener >& aListener ) throw (::com::sun::star::uno::RuntimeException);
+
+ // XServiceInfo
+ virtual ::rtl::OUString SAL_CALL getImplementationName( ) throw (::com::sun::star::uno::RuntimeException);
+ virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw (::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames( ) throw (::com::sun::star::uno::RuntimeException);
+
+private:
+
+ ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > mxMgr;
+
+ ::osl::Mutex maMutex;
+ ::cppu::OMultiTypeInterfaceContainerHelper maListeners;
+ ::com::sun::star::media::ZoomLevel meZoomLevel;
+ Player& mrPlayer;
+ int mnPointerType;
+
+ NSView* mpParentView; // parent view for our own private movie view
+ QTMovieView* mpMovieView; // the view containing the movie object, output target and controller
+
+ void ImplLayoutVideoWindow();
+};
+
+} // namespace quicktime
+} // namespace avmedia
+
+#endif // _WINDOW_HXX
diff --git a/avmedia/source/viewer/makefile.mk b/avmedia/source/viewer/makefile.mk
new file mode 100644
index 000000000000..8d5d6a5df52d
--- /dev/null
+++ b/avmedia/source/viewer/makefile.mk
@@ -0,0 +1,57 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..$/..
+PRJNAME=avmedia
+TARGET=viewer
+
+# --- Settings ----------------------------------
+
+.INCLUDE : settings.mk
+
+# --- Resources ---------------------------------
+
+SRS1NAME=$(TARGET)
+SRC1FILES =\
+ mediawindow.src
+
+# --- Files -------------------------------------
+
+SLOFILES= \
+ $(SLO)$/mediaevent_impl.obj \
+ $(SLO)$/mediawindowbase_impl.obj \
+ $(SLO)$/mediawindow_impl.obj \
+ $(SLO)$/mediawindow.obj
+
+EXCEPTIONSFILES= \
+ $(SLO)$/mediawindow.obj \
+ $(SLO)$/mediawindowbase_impl.obj \
+ $(SLO)$/mediawindow_impl.obj
+
+# --- Targets ----------------------------------
+
+.INCLUDE : target.mk
diff --git a/avmedia/source/viewer/mediaevent_impl.cxx b/avmedia/source/viewer/mediaevent_impl.cxx
new file mode 100644
index 000000000000..cf86f54df8f9
--- /dev/null
+++ b/avmedia/source/viewer/mediaevent_impl.cxx
@@ -0,0 +1,223 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "mediaevent_impl.hxx"
+#include "mediawindow_impl.hxx"
+#include <osl/mutex.hxx>
+#include <vos/mutex.hxx>
+#include <vcl/svapp.hxx>
+#include <vcl/event.hxx>
+
+using namespace ::com::sun::star;
+
+/* Definition of MediaWindowImpl class */
+
+namespace avmedia { namespace priv {
+// ---------------------------
+// - MediaEventListenersImpl -
+// ---------------------------
+
+MediaEventListenersImpl::MediaEventListenersImpl( Window& rEventWindow ) :
+ mpNotifyWindow( &rEventWindow )
+{
+}
+
+// ---------------------------------------------------------------------
+
+MediaEventListenersImpl::~MediaEventListenersImpl()
+{
+}
+
+// ---------------------------------------------------------------------
+
+void MediaEventListenersImpl::cleanUp()
+{
+ Application::RemoveMouseAndKeyEvents( reinterpret_cast< ::Window* >( mpNotifyWindow ) );
+ mpNotifyWindow = NULL;
+}
+
+// ---------------------------------------------------------------------
+
+void SAL_CALL MediaEventListenersImpl::disposing( const ::com::sun::star::lang::EventObject& /* Source */ )
+ throw (::com::sun::star::uno::RuntimeException)
+{
+}
+
+// ---------------------------------------------------------------------
+
+void SAL_CALL MediaEventListenersImpl::keyPressed( const ::com::sun::star::awt::KeyEvent& e )
+ throw (::com::sun::star::uno::RuntimeException)
+{
+ const ::osl::MutexGuard aGuard( maMutex );
+ const ::vos::OGuard aAppGuard( Application::GetSolarMutex() );
+
+ if( mpNotifyWindow )
+ {
+ KeyCode aVCLKeyCode( e.KeyCode,
+ ( ( e.Modifiers & 1 ) ? KEY_SHIFT : 0 ) |
+ ( ( e.Modifiers & 2 ) ? KEY_MOD1 : 0 ) |
+ ( ( e.Modifiers & 4 ) ? KEY_MOD2 : 0 ) );
+ KeyEvent aVCLKeyEvt( e.KeyChar, aVCLKeyCode );
+
+ Application::PostKeyEvent( VCLEVENT_WINDOW_KEYINPUT, reinterpret_cast< ::Window* >( mpNotifyWindow ), &aVCLKeyEvt );
+ }
+}
+
+// ---------------------------------------------------------------------
+
+void SAL_CALL MediaEventListenersImpl::keyReleased( const ::com::sun::star::awt::KeyEvent& e )
+ throw (::com::sun::star::uno::RuntimeException)
+{
+ const ::osl::MutexGuard aGuard( maMutex );
+ const ::vos::OGuard aAppGuard( Application::GetSolarMutex() );
+
+ if( mpNotifyWindow )
+ {
+ KeyCode aVCLKeyCode( e.KeyCode,
+ ( ( e.Modifiers & 1 ) ? KEY_SHIFT : 0 ) |
+ ( ( e.Modifiers & 2 ) ? KEY_MOD1 : 0 ) |
+ ( ( e.Modifiers & 4 ) ? KEY_MOD2 : 0 ) );
+ KeyEvent aVCLKeyEvt( e.KeyChar, aVCLKeyCode );
+ Application::PostKeyEvent( VCLEVENT_WINDOW_KEYUP, reinterpret_cast< ::Window* >( mpNotifyWindow ), &aVCLKeyEvt );
+ }
+}
+
+// ---------------------------------------------------------------------
+
+void SAL_CALL MediaEventListenersImpl::mousePressed( const ::com::sun::star::awt::MouseEvent& e )
+ throw (::com::sun::star::uno::RuntimeException)
+{
+ const ::osl::MutexGuard aGuard( maMutex );
+ const ::vos::OGuard aAppGuard( Application::GetSolarMutex() );
+
+ if( mpNotifyWindow )
+ {
+ MouseEvent aVCLMouseEvt( Point( e.X, e.Y ),
+ sal::static_int_cast< USHORT >(e.ClickCount),
+ 0,
+ ( ( e.Buttons & 1 ) ? MOUSE_LEFT : 0 ) |
+ ( ( e.Buttons & 2 ) ? MOUSE_RIGHT : 0 ) |
+ ( ( e.Buttons & 4 ) ? MOUSE_MIDDLE : 0 ),
+ e.Modifiers );
+ Application::PostMouseEvent( VCLEVENT_WINDOW_MOUSEBUTTONDOWN, reinterpret_cast< ::Window* >( mpNotifyWindow ), &aVCLMouseEvt );
+ }
+}
+
+// ----------------------------------------------gvd-----------------------
+
+void SAL_CALL MediaEventListenersImpl::mouseReleased( const ::com::sun::star::awt::MouseEvent& e )
+ throw (::com::sun::star::uno::RuntimeException)
+{
+ const ::osl::MutexGuard aGuard( maMutex );
+ const ::vos::OGuard aAppGuard( Application::GetSolarMutex() );
+
+ if( mpNotifyWindow )
+ {
+ MouseEvent aVCLMouseEvt( Point( e.X, e.Y ),
+ sal::static_int_cast< USHORT >(e.ClickCount),
+ 0,
+ ( ( e.Buttons & 1 ) ? MOUSE_LEFT : 0 ) |
+ ( ( e.Buttons & 2 ) ? MOUSE_RIGHT : 0 ) |
+ ( ( e.Buttons & 4 ) ? MOUSE_MIDDLE : 0 ),
+ e.Modifiers );
+ Application::PostMouseEvent( VCLEVENT_WINDOW_MOUSEBUTTONUP, reinterpret_cast< ::Window* >( mpNotifyWindow ), &aVCLMouseEvt );
+ }
+}
+
+// ---------------------------------------------------------------------
+
+void SAL_CALL MediaEventListenersImpl::mouseEntered( const ::com::sun::star::awt::MouseEvent& /* e */ )
+ throw (::com::sun::star::uno::RuntimeException)
+{
+ const ::osl::MutexGuard aGuard( maMutex );
+ const ::vos::OGuard aAppGuard( Application::GetSolarMutex() );
+
+ if( mpNotifyWindow )
+ {
+ }
+}
+
+// ---------------------------------------------------------------------
+
+void SAL_CALL MediaEventListenersImpl::mouseExited( const ::com::sun::star::awt::MouseEvent& /* e */ )
+ throw (::com::sun::star::uno::RuntimeException)
+{
+ const ::osl::MutexGuard aGuard( maMutex );
+ const ::vos::OGuard aAppGuard( Application::GetSolarMutex() );
+
+ if( mpNotifyWindow )
+ {
+ }
+}
+
+// ---------------------------------------------------------------------
+
+void SAL_CALL MediaEventListenersImpl::mouseDragged( const ::com::sun::star::awt::MouseEvent& e )
+ throw (::com::sun::star::uno::RuntimeException)
+{
+ const ::osl::MutexGuard aGuard( maMutex );
+ const ::vos::OGuard aAppGuard( Application::GetSolarMutex() );
+
+ if( mpNotifyWindow )
+ {
+ MouseEvent aVCLMouseEvt( Point( e.X, e.Y ), 0, 0, e.Buttons, e.Modifiers );
+ Application::PostMouseEvent( VCLEVENT_WINDOW_MOUSEMOVE, reinterpret_cast< ::Window* >( mpNotifyWindow ), &aVCLMouseEvt );
+ }
+}
+
+// ---------------------------------------------------------------------
+
+void SAL_CALL MediaEventListenersImpl::mouseMoved( const ::com::sun::star::awt::MouseEvent& e )
+ throw (::com::sun::star::uno::RuntimeException)
+{
+ const ::osl::MutexGuard aGuard( maMutex );
+ const ::vos::OGuard aAppGuard( Application::GetSolarMutex() );
+
+ if( mpNotifyWindow )
+ {
+ MouseEvent aVCLMouseEvt( Point( e.X, e.Y ), 0, 0, e.Buttons, e.Modifiers );
+ Application::PostMouseEvent( VCLEVENT_WINDOW_MOUSEMOVE, reinterpret_cast< ::Window* >( mpNotifyWindow ), &aVCLMouseEvt );
+ }
+}
+
+// ---------------------------------------------------------------------
+
+void SAL_CALL MediaEventListenersImpl::focusGained( const ::com::sun::star::awt::FocusEvent& /* e */ )
+ throw (::com::sun::star::uno::RuntimeException)
+{
+}
+
+// ---------------------------------------------------------------------
+
+void SAL_CALL MediaEventListenersImpl::focusLost( const ::com::sun::star::awt::FocusEvent& /* e */ )
+ throw (::com::sun::star::uno::RuntimeException)
+{
+}
+
+} // namespace priv
+} // namespace avemdia
+
diff --git a/avmedia/source/viewer/mediaevent_impl.hxx b/avmedia/source/viewer/mediaevent_impl.hxx
new file mode 100644
index 000000000000..b06ccd885fd6
--- /dev/null
+++ b/avmedia/source/viewer/mediaevent_impl.hxx
@@ -0,0 +1,89 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _AVMEDIA_MEDIAEVENT_IMPL_HXX
+#define _AVMEDIA_MEDIAEVENT_IMPL_HXX
+
+#include <avmedia/mediawindow.hxx>
+#include <cppuhelper/compbase4.hxx>
+#include <com/sun/star/awt/XKeyListener.hpp>
+#include <com/sun/star/awt/XMouseListener.hpp>
+#include <com/sun/star/awt/XMouseMotionListener.hpp>
+#include <com/sun/star/awt/XFocusListener.hpp>
+
+namespace avmedia
+{
+ namespace priv
+ {
+ // ---------------------------
+ // - MediaEventListenersImpl -
+ // ---------------------------
+
+ class MediaWindowImpl;
+
+ class MediaEventListenersImpl : public ::cppu::WeakImplHelper4< ::com::sun::star::awt::XKeyListener,
+ ::com::sun::star::awt::XMouseListener,
+ ::com::sun::star::awt::XMouseMotionListener,
+ ::com::sun::star::awt::XFocusListener >
+ {
+ public:
+
+ MediaEventListenersImpl( Window& rNotifyWindow );
+ ~MediaEventListenersImpl();
+
+ void cleanUp();
+
+ protected:
+
+ // XKeyListener
+ virtual void SAL_CALL disposing( const ::com::sun::star::lang::EventObject& Source ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL keyPressed( const ::com::sun::star::awt::KeyEvent& e ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL keyReleased( const ::com::sun::star::awt::KeyEvent& e ) throw (::com::sun::star::uno::RuntimeException);
+
+ // XMouseListener
+ virtual void SAL_CALL mousePressed( const ::com::sun::star::awt::MouseEvent& e ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL mouseReleased( const ::com::sun::star::awt::MouseEvent& e ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL mouseEntered( const ::com::sun::star::awt::MouseEvent& e ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL mouseExited( const ::com::sun::star::awt::MouseEvent& e ) throw (::com::sun::star::uno::RuntimeException);
+
+ // XMouseMotionListener
+ virtual void SAL_CALL mouseDragged( const ::com::sun::star::awt::MouseEvent& e ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL mouseMoved( const ::com::sun::star::awt::MouseEvent& e ) throw (::com::sun::star::uno::RuntimeException);
+
+ // XFocusListener
+ virtual void SAL_CALL focusGained( const ::com::sun::star::awt::FocusEvent& e ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL focusLost( const ::com::sun::star::awt::FocusEvent& e ) throw (::com::sun::star::uno::RuntimeException);
+
+ private:
+
+ Window* mpNotifyWindow;
+ mutable ::osl::Mutex maMutex;
+ };
+ }
+}
+
+#endif
diff --git a/avmedia/source/viewer/mediawindow.cxx b/avmedia/source/viewer/mediawindow.cxx
new file mode 100644
index 000000000000..b2d1e5162cb5
--- /dev/null
+++ b/avmedia/source/viewer/mediawindow.cxx
@@ -0,0 +1,580 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <stdio.h>
+
+#include <avmedia/mediawindow.hxx>
+#include "mediawindow_impl.hxx"
+#include "mediamisc.hxx"
+#include "mediawindow.hrc"
+#include <tools/urlobj.hxx>
+#include <vcl/msgbox.hxx>
+#include <unotools/pathoptions.hxx>
+#include <sfx2/filedlghelper.hxx>
+#include <comphelper/processfactory.hxx>
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+#include <com/sun/star/media/XManager.hpp>
+#include "com/sun/star/ui/dialogs/TemplateDescription.hpp"
+
+#define AVMEDIA_FRAMEGRABBER_DEFAULTFRAME_MEDIATIME 3.0
+
+using namespace ::com::sun::star;
+
+namespace avmedia {
+
+// ---------------
+// - MediaWindow -
+// ---------------
+
+MediaWindow::MediaWindow( Window* parent, bool bInternalMediaControl ) :
+ mpImpl( new priv::MediaWindowImpl( parent, this, bInternalMediaControl ) )
+{
+ mpImpl->Show();
+}
+
+// -------------------------------------------------------------------------
+
+MediaWindow::~MediaWindow()
+{
+ mpImpl->cleanUp();
+ delete mpImpl;
+ mpImpl = NULL;
+}
+
+// -------------------------------------------------------------------------
+
+void MediaWindow::setURL( const ::rtl::OUString& rURL )
+{
+ if( mpImpl )
+ mpImpl->setURL( rURL );
+}
+
+// -------------------------------------------------------------------------
+
+const ::rtl::OUString& MediaWindow::getURL() const
+{
+ return mpImpl->getURL();
+}
+
+// -------------------------------------------------------------------------
+
+bool MediaWindow::isValid() const
+{
+ return( mpImpl != NULL && mpImpl->isValid() );
+}
+
+// -------------------------------------------------------------------------
+
+void MediaWindow::MouseMove( const MouseEvent& /* rMEvt */ )
+{
+}
+
+// ---------------------------------------------------------------------
+
+void MediaWindow::MouseButtonDown( const MouseEvent& /* rMEvt */ )
+{
+}
+
+// ---------------------------------------------------------------------
+
+void MediaWindow::MouseButtonUp( const MouseEvent& /* rMEvt */ )
+{
+}
+
+// -------------------------------------------------------------------------
+
+void MediaWindow::KeyInput( const KeyEvent& /* rKEvt */ )
+{
+}
+
+// -------------------------------------------------------------------------
+
+void MediaWindow::KeyUp( const KeyEvent& /* rKEvt */ )
+{
+}
+
+// -------------------------------------------------------------------------
+
+void MediaWindow::Command( const CommandEvent& /* rCEvt */ )
+{
+}
+
+// -------------------------------------------------------------------------
+
+sal_Int8 MediaWindow::AcceptDrop( const AcceptDropEvent& /* rEvt */ )
+{
+ return 0;
+}
+
+// -------------------------------------------------------------------------
+
+sal_Int8 MediaWindow::ExecuteDrop( const ExecuteDropEvent& /* rEvt */ )
+{
+ return 0;
+}
+
+// -------------------------------------------------------------------------
+
+void MediaWindow::StartDrag( sal_Int8 /* nAction */, const Point& /* rPosPixel */ )
+{
+}
+
+// -------------------------------------------------------------------------
+
+bool MediaWindow::hasPreferredSize() const
+{
+ return( mpImpl != NULL && mpImpl->hasPreferredSize() );
+}
+
+// -------------------------------------------------------------------------
+
+Size MediaWindow::getPreferredSize() const
+{
+ return mpImpl->getPreferredSize();
+}
+
+// -------------------------------------------------------------------------
+
+void MediaWindow::setPosSize( const Rectangle& rNewRect )
+{
+ if( mpImpl )
+ mpImpl->setPosSize( rNewRect );
+}
+
+// -------------------------------------------------------------------------
+
+Rectangle MediaWindow::getPosSize() const
+{
+ return Rectangle( mpImpl->GetPosPixel(), mpImpl->GetSizePixel() );
+}
+
+// -------------------------------------------------------------------------
+
+void MediaWindow::setPointer( const Pointer& rPointer )
+{
+ if( mpImpl )
+ mpImpl->setPointer( rPointer );
+}
+
+// -------------------------------------------------------------------------
+
+const Pointer& MediaWindow::getPointer() const
+{
+ return mpImpl->getPointer();
+}
+
+// -------------------------------------------------------------------------
+
+bool MediaWindow::setZoom( ::com::sun::star::media::ZoomLevel eLevel )
+{
+ return( mpImpl != NULL && mpImpl->setZoom( eLevel ) );
+}
+
+// -------------------------------------------------------------------------
+
+::com::sun::star::media::ZoomLevel MediaWindow::getZoom() const
+{
+ return mpImpl->getZoom();
+}
+
+// -------------------------------------------------------------------------
+
+bool MediaWindow::start()
+{
+ return( mpImpl != NULL && mpImpl->start() );
+}
+
+// -------------------------------------------------------------------------
+
+void MediaWindow::stop()
+{
+ if( mpImpl )
+ mpImpl->stop();
+}
+
+// -------------------------------------------------------------------------
+
+bool MediaWindow::isPlaying() const
+{
+ return( mpImpl != NULL && mpImpl->isPlaying() );
+}
+
+// -------------------------------------------------------------------------
+
+double MediaWindow::getDuration() const
+{
+ return mpImpl->getDuration();
+}
+
+// -------------------------------------------------------------------------
+
+void MediaWindow::setMediaTime( double fTime )
+{
+ if( mpImpl )
+ mpImpl->setMediaTime( fTime );
+}
+
+// -------------------------------------------------------------------------
+
+double MediaWindow::getMediaTime() const
+{
+ return mpImpl->getMediaTime();
+}
+
+// -------------------------------------------------------------------------
+
+void MediaWindow::setStopTime( double fTime )
+{
+ if( mpImpl )
+ mpImpl->setStopTime( fTime );
+}
+
+// -------------------------------------------------------------------------
+
+double MediaWindow::getStopTime() const
+{
+ return mpImpl->getStopTime();
+}
+
+// -------------------------------------------------------------------------
+
+void MediaWindow::setRate( double fRate )
+{
+ if( mpImpl )
+ mpImpl->setRate( fRate );
+}
+
+// -------------------------------------------------------------------------
+
+double MediaWindow::getRate() const
+{
+ return mpImpl->getRate();
+}
+
+// -------------------------------------------------------------------------
+
+void MediaWindow::setPlaybackLoop( bool bSet )
+{
+ if( mpImpl )
+ mpImpl->setPlaybackLoop( bSet );
+}
+
+// -------------------------------------------------------------------------
+
+bool MediaWindow::isPlaybackLoop() const
+{
+ return mpImpl->isPlaybackLoop();
+}
+
+// -------------------------------------------------------------------------
+
+void MediaWindow::setMute( bool bSet )
+{
+ if( mpImpl )
+ mpImpl->setMute( bSet );
+}
+
+// -------------------------------------------------------------------------
+
+bool MediaWindow::isMute() const
+{
+ return mpImpl->isMute();
+}
+
+// -------------------------------------------------------------------------
+
+void MediaWindow::updateMediaItem( MediaItem& rItem ) const
+{
+ if( mpImpl )
+ mpImpl->updateMediaItem( rItem );
+}
+
+// -------------------------------------------------------------------------
+
+void MediaWindow::executeMediaItem( const MediaItem& rItem )
+{
+ if( mpImpl )
+ mpImpl->executeMediaItem( rItem );
+}
+
+// -------------------------------------------------------------------------
+
+void MediaWindow::show()
+{
+ if( mpImpl )
+ mpImpl->Show();
+}
+
+// -------------------------------------------------------------------------
+
+void MediaWindow::hide()
+{
+ if( mpImpl )
+ mpImpl->Hide();
+}
+
+// -------------------------------------------------------------------------
+
+void MediaWindow::enable()
+{
+ if( mpImpl )
+ mpImpl->Enable();
+}
+
+// -------------------------------------------------------------------------
+
+void MediaWindow::disable()
+{
+ if( mpImpl )
+ mpImpl->Disable();
+}
+
+// -------------------------------------------------------------------------
+
+Window* MediaWindow::getWindow() const
+{
+ return mpImpl;
+}
+
+// -------------------------------------------------------------------------
+
+void MediaWindow::getMediaFilters( FilterNameVector& rFilterNameVector )
+{
+ static const char* pFilters[] = { "AIF Audio", "aif;aiff",
+ "AU Audio", "au",
+ "AVI", "avi",
+ "CD Audio", "cda",
+ "MIDI Audio", "mid;midi",
+ "MPEG Audio", "mp2;mp3;mpa",
+ "MPEG Video", "mpg;mpeg;mpv;mp4",
+ "Ogg bitstream", "ogg",
+ "Quicktime Video", "mov",
+ "Vivo Video", "viv",
+ "WAVE Audio", "wav" };
+
+ unsigned int i;
+ for( i = 0; i < ( sizeof( pFilters ) / sizeof( char* ) ); i += 2 )
+ {
+ rFilterNameVector.push_back( ::std::make_pair< ::rtl::OUString, ::rtl::OUString >(
+ ::rtl::OUString::createFromAscii( pFilters[ i ] ),
+ ::rtl::OUString::createFromAscii( pFilters[ i + 1 ] ) ) );
+ }
+}
+
+// -------------------------------------------------------------------------
+
+bool MediaWindow::executeMediaURLDialog( Window* /* pParent */, ::rtl::OUString& rURL, bool bInsertDialog )
+{
+ ::sfx2::FileDialogHelper aDlg( com::sun::star::ui::dialogs::TemplateDescription::FILEOPEN_SIMPLE, 0 );
+ static const ::rtl::OUString aWildcard( RTL_CONSTASCII_USTRINGPARAM( "*." ) );
+ FilterNameVector aFilters;
+ const ::rtl::OUString aSeparator( RTL_CONSTASCII_USTRINGPARAM( ";" ) );
+ ::rtl::OUString aAllTypes;
+
+ aDlg.SetTitle( AVMEDIA_RESID( bInsertDialog ? AVMEDIA_STR_INSERTMEDIA_DLG : AVMEDIA_STR_OPENMEDIA_DLG ) );
+
+ getMediaFilters( aFilters );
+
+ unsigned int i;
+ for( i = 0; i < aFilters.size(); ++i )
+ {
+ for( sal_Int32 nIndex = 0; nIndex >= 0; )
+ {
+ if( aAllTypes.getLength() )
+ aAllTypes += aSeparator;
+
+ ( aAllTypes += aWildcard ) += aFilters[ i ].second.getToken( 0, ';', nIndex );
+ }
+ }
+
+ // add filter for all media types
+ aDlg.AddFilter( AVMEDIA_RESID( AVMEDIA_STR_ALL_MEDIAFILES ), aAllTypes );
+
+ for( i = 0; i < aFilters.size(); ++i )
+ {
+ ::rtl::OUString aTypes;
+
+ for( sal_Int32 nIndex = 0; nIndex >= 0; )
+ {
+ if( aTypes.getLength() )
+ aTypes += aSeparator;
+
+ ( aTypes += aWildcard ) += aFilters[ i ].second.getToken( 0, ';', nIndex );
+ }
+
+ // add single filters
+ aDlg.AddFilter( aFilters[ i ].first, aTypes );
+ }
+
+ // add filter for all types
+ aDlg.AddFilter( AVMEDIA_RESID( AVMEDIA_STR_ALL_FILES ), String( RTL_CONSTASCII_USTRINGPARAM( "*.*" ) ) );
+
+ if( aDlg.Execute() == ERRCODE_NONE )
+ {
+ const INetURLObject aURL( aDlg.GetPath() );
+ rURL = aURL.GetMainURL( INetURLObject::DECODE_UNAMBIGUOUS );
+ }
+ else if( rURL.getLength() )
+ rURL = ::rtl::OUString();
+
+ return( rURL.getLength() > 0 );
+}
+
+// -------------------------------------------------------------------------
+
+void MediaWindow::executeFormatErrorBox( Window* pParent )
+{
+ ErrorBox aErrBox( pParent, AVMEDIA_RESID( AVMEDIA_ERR_URL ) );
+
+ aErrBox.Execute();
+}
+
+// -------------------------------------------------------------------------
+
+bool MediaWindow::isMediaURL( const ::rtl::OUString& rURL, bool bDeep, Size* pPreferredSizePixel )
+{
+ const INetURLObject aURL( rURL );
+ bool bRet = false;
+
+ if( aURL.GetProtocol() != INET_PROT_NOT_VALID )
+ {
+ if( bDeep || pPreferredSizePixel )
+ {
+ uno::Reference< lang::XMultiServiceFactory > xFactory( ::comphelper::getProcessServiceFactory() );
+
+ if( xFactory.is() )
+ {
+ try
+ {
+ fprintf(stderr, "-->%s uno reference \n\n",AVMEDIA_MANAGER_SERVICE_NAME);
+
+ uno::Reference< ::com::sun::star::media::XManager > xManager(
+ xFactory->createInstance( ::rtl::OUString::createFromAscii( AVMEDIA_MANAGER_SERVICE_NAME ) ),
+ uno::UNO_QUERY );
+
+ if( xManager.is() )
+ {
+ uno::Reference< media::XPlayer > xPlayer( xManager->createPlayer( aURL.GetMainURL( INetURLObject::DECODE_UNAMBIGUOUS ) ) );
+
+ if( xPlayer.is() )
+ {
+ bRet = true;
+
+ if( pPreferredSizePixel )
+ {
+ const awt::Size aAwtSize( xPlayer->getPreferredPlayerWindowSize() );
+
+ pPreferredSizePixel->Width() = aAwtSize.Width;
+ pPreferredSizePixel->Height() = aAwtSize.Height;
+ }
+ }
+ }
+ }
+ catch( ... )
+ {
+ }
+ }
+ }
+ else
+ {
+ FilterNameVector aFilters;
+ const ::rtl::OUString aExt( aURL.getExtension() );
+
+ getMediaFilters( aFilters );
+
+ unsigned int i;
+ for( i = 0; ( i < aFilters.size() ) && !bRet; ++i )
+ {
+ for( sal_Int32 nIndex = 0; nIndex >= 0 && !bRet; )
+ {
+ if( aExt.equalsIgnoreAsciiCase( aFilters[ i ].second.getToken( 0, ';', nIndex ) ) )
+ bRet = true;
+ }
+ }
+ }
+ }
+
+ return bRet;
+}
+
+// -------------------------------------------------------------------------
+
+uno::Reference< media::XPlayer > MediaWindow::createPlayer( const ::rtl::OUString& rURL )
+{
+ return priv::MediaWindowImpl::createPlayer( rURL );
+}
+
+// -------------------------------------------------------------------------
+
+uno::Reference< graphic::XGraphic > MediaWindow::grabFrame( const ::rtl::OUString& rURL,
+ bool bAllowToCreateReplacementGraphic,
+ double fMediaTime )
+{
+ uno::Reference< media::XPlayer > xPlayer( createPlayer( rURL ) );
+ uno::Reference< graphic::XGraphic > xRet;
+ ::std::auto_ptr< Graphic > apGraphic;
+
+ if( xPlayer.is() )
+ {
+ uno::Reference< media::XFrameGrabber > xGrabber( xPlayer->createFrameGrabber() );
+
+ if( xGrabber.is() )
+ {
+ if( AVMEDIA_FRAMEGRABBER_DEFAULTFRAME == fMediaTime )
+ fMediaTime = AVMEDIA_FRAMEGRABBER_DEFAULTFRAME_MEDIATIME;
+
+ if( fMediaTime >= xPlayer->getDuration() )
+ fMediaTime = ( xPlayer->getDuration() * 0.5 );
+
+ xRet = xGrabber->grabFrame( fMediaTime );
+ }
+
+ if( !xRet.is() && bAllowToCreateReplacementGraphic )
+ {
+ awt::Size aPrefSize( xPlayer->getPreferredPlayerWindowSize() );
+
+ if( !aPrefSize.Width && !aPrefSize.Height )
+ {
+ const BitmapEx aBmpEx( AVMEDIA_RESID( AVMEDIA_BMP_AUDIOLOGO ) );
+ apGraphic.reset( new Graphic( aBmpEx ) );
+ }
+ }
+ }
+
+ if( !xRet.is() && !apGraphic.get() && bAllowToCreateReplacementGraphic )
+ {
+ const BitmapEx aBmpEx( AVMEDIA_RESID( AVMEDIA_BMP_EMPTYLOGO ) );
+ apGraphic.reset( new Graphic( aBmpEx ) );
+ }
+
+ if( apGraphic.get() )
+ xRet = apGraphic->GetXGraphic();
+
+ return xRet;
+}
+
+} // namespace avemdia
diff --git a/avmedia/source/viewer/mediawindow.hrc b/avmedia/source/viewer/mediawindow.hrc
new file mode 100644
index 000000000000..67036e300c13
--- /dev/null
+++ b/avmedia/source/viewer/mediawindow.hrc
@@ -0,0 +1,9 @@
+#define AVMEDIA_STR_OPENMEDIA_DLG 16384
+#define AVMEDIA_STR_INSERTMEDIA_DLG 16385
+#define AVMEDIA_STR_ALL_MEDIAFILES 16386
+#define AVMEDIA_STR_ALL_FILES 16387
+
+#define AVMEDIA_BMP_AUDIOLOGO 20000
+#define AVMEDIA_BMP_EMPTYLOGO 20001
+
+#define AVMEDIA_ERR_URL 21000
diff --git a/avmedia/source/viewer/mediawindow.src b/avmedia/source/viewer/mediawindow.src
new file mode 100644
index 000000000000..1c92b4d913af
--- /dev/null
+++ b/avmedia/source/viewer/mediawindow.src
@@ -0,0 +1,77 @@
+ /*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "mediawindow.hrc"
+
+String AVMEDIA_STR_INSERTMEDIA_DLG
+{
+ Text[en-US] = "Insert Movie and Sound";
+};
+
+// ------------------------------------------------------------------------------
+
+STRING AVMEDIA_STR_OPENMEDIA_DLG
+{
+ Text[en-US] = "Open Movie and Sound";
+};
+
+// ------------------------------------------------------------------------------
+
+String AVMEDIA_STR_ALL_MEDIAFILES
+{
+ Text[en-US] = "All movie and sound files";
+};
+
+// ------------------------------------------------------------------------------
+
+String AVMEDIA_STR_ALL_FILES
+{
+ Text[en-US] = "All files (*.*)";
+};
+
+// ------------------------------------------------------------------------------
+
+Bitmap AVMEDIA_BMP_AUDIOLOGO
+{
+ file = "avaudiologo.png";
+};
+
+// ------------------------------------------------------------------------------
+
+Bitmap AVMEDIA_BMP_EMPTYLOGO
+{
+ file = "avemptylogo.png";
+};
+
+// ------------------------------------------------------------------------------
+
+ErrorBox AVMEDIA_ERR_URL
+{
+ BUTTONS = WB_OK ;
+ DEFBUTTON = WB_DEF_OK ;
+ Message[en-US] = "The format of the selected file is not supported.";
+};
diff --git a/avmedia/source/viewer/mediawindow_impl.cxx b/avmedia/source/viewer/mediawindow_impl.cxx
new file mode 100644
index 000000000000..553eea6196c1
--- /dev/null
+++ b/avmedia/source/viewer/mediawindow_impl.cxx
@@ -0,0 +1,546 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "mediawindow_impl.hxx"
+#include "mediaevent_impl.hxx"
+#include "mediamisc.hxx"
+#include "mediawindow.hrc"
+#include "helpids.hrc"
+
+#include <algorithm>
+#include <cmath>
+#include <osl/mutex.hxx>
+#include <tools/time.hxx>
+#include <vcl/svapp.hxx>
+
+#ifndef _COM_SUN_STAR_AWT_SYSTEMPOINTER_HDL_
+#include <com/sun/star/awt/SystemPointer.hdl>
+#endif
+#ifndef _COM_SUN_STAR_LANG_XCOMPONENT_HDL_
+#include <com/sun/star/lang/XComponent.hdl>
+#endif
+
+#define AVMEDIA_TOOLBOXITEM_PREV 0x0001
+#define AVMEDIA_TOOLBOXITEM_PLAY 0x0002
+#define AVMEDIA_TOOLBOXITEM_PAUSE 0x0004
+#define AVMEDIA_TOOLBOXITEM_STOP 0x0008
+#define AVMEDIA_TOOLBOXITEM_NEXT 0x0010
+#define AVMEDIA_TOOLBOXITEM_MUTE 0x0100
+
+#define AVMEDIA_FFW_PLAYRATE 4
+
+using namespace ::com::sun::star;
+
+namespace avmedia { namespace priv {
+
+// ----------------------
+// - MediaWindowControl -
+// ----------------------
+
+MediaWindowControl::MediaWindowControl( Window* pParent ) :
+ MediaControl( pParent, MEDIACONTROLSTYLE_MULTILINE )
+{
+}
+
+// ---------------------------------------------------------------------
+
+MediaWindowControl::~MediaWindowControl()
+{
+}
+
+// ---------------------------------------------------------------------
+
+void MediaWindowControl::update()
+{
+ MediaItem aItem;
+
+ static_cast< MediaWindowImpl* >( GetParent() )->updateMediaItem( aItem );
+ setState( aItem );
+}
+
+// ---------------------------------------------------------------------
+
+void MediaWindowControl::execute( const MediaItem& rItem )
+{
+ static_cast< MediaWindowImpl* >( GetParent() )->executeMediaItem( rItem );
+}
+
+// --------------------
+// - MediaChildWindow -
+// --------------------
+
+MediaChildWindow::MediaChildWindow( Window* pParent ) :
+ JavaChildWindow( pParent, WB_CLIPCHILDREN )
+{
+}
+
+// ---------------------------------------------------------------------
+
+MediaChildWindow::~MediaChildWindow()
+{
+}
+
+// ---------------------------------------------------------------------
+
+void MediaChildWindow::MouseMove( const MouseEvent& rMEvt )
+{
+ const MouseEvent aTransformedEvent( GetParent()->ScreenToOutputPixel( OutputToScreenPixel( rMEvt.GetPosPixel() ) ),
+ rMEvt.GetClicks(), rMEvt.GetMode(), rMEvt.GetButtons(), rMEvt.GetModifier() );
+
+ JavaChildWindow::MouseMove( rMEvt );
+ GetParent()->MouseMove( aTransformedEvent );
+}
+
+// ---------------------------------------------------------------------
+
+void MediaChildWindow::MouseButtonDown( const MouseEvent& rMEvt )
+{
+ const MouseEvent aTransformedEvent( GetParent()->ScreenToOutputPixel( OutputToScreenPixel( rMEvt.GetPosPixel() ) ),
+ rMEvt.GetClicks(), rMEvt.GetMode(), rMEvt.GetButtons(), rMEvt.GetModifier() );
+
+ JavaChildWindow::MouseButtonDown( rMEvt );
+ GetParent()->MouseButtonDown( aTransformedEvent );
+}
+
+// ---------------------------------------------------------------------
+
+void MediaChildWindow::MouseButtonUp( const MouseEvent& rMEvt )
+{
+ const MouseEvent aTransformedEvent( GetParent()->ScreenToOutputPixel( OutputToScreenPixel( rMEvt.GetPosPixel() ) ),
+ rMEvt.GetClicks(), rMEvt.GetMode(), rMEvt.GetButtons(), rMEvt.GetModifier() );
+
+ JavaChildWindow::MouseButtonUp( rMEvt );
+ GetParent()->MouseButtonUp( aTransformedEvent );
+}
+
+// ---------------------------------------------------------------------
+
+void MediaChildWindow::KeyInput( const KeyEvent& rKEvt )
+{
+ JavaChildWindow::KeyInput( rKEvt );
+ GetParent()->KeyInput( rKEvt );
+}
+
+// ---------------------------------------------------------------------
+
+void MediaChildWindow::KeyUp( const KeyEvent& rKEvt )
+{
+ JavaChildWindow::KeyUp( rKEvt );
+ GetParent()->KeyUp( rKEvt );
+}
+
+// ---------------------------------------------------------------------
+
+void MediaChildWindow::Command( const CommandEvent& rCEvt )
+{
+ const CommandEvent aTransformedEvent( GetParent()->ScreenToOutputPixel( OutputToScreenPixel( rCEvt.GetMousePosPixel() ) ),
+ rCEvt.GetCommand(), rCEvt.IsMouseEvent(), rCEvt.GetData() );
+
+ JavaChildWindow::Command( rCEvt );
+ GetParent()->Command( aTransformedEvent );
+}
+
+// ----------------------
+// - MediaWindowImpl -
+// ----------------------
+
+MediaWindowImpl::MediaWindowImpl( Window* pParent, MediaWindow* pMediaWindow, bool bInternalMediaControl ) :
+ Control( pParent ),
+ MediaWindowBaseImpl( pMediaWindow ),
+ DropTargetHelper( this ),
+ DragSourceHelper( this ),
+ mxEventsIf( static_cast< ::cppu::OWeakObject* >( mpEvents = new MediaEventListenersImpl( maChildWindow ) ) ),
+ maChildWindow( this ),
+ mpMediaWindowControl( bInternalMediaControl ? new MediaWindowControl( this ) : NULL ),
+ mpEmptyBmpEx( NULL ),
+ mpAudioBmpEx( NULL )
+{
+ maChildWindow.SetHelpId( HID_AVMEDIA_PLAYERWINDOW );
+ maChildWindow.Hide();
+
+ if( mpMediaWindowControl )
+ {
+ mpMediaWindowControl->SetSizePixel( mpMediaWindowControl->getMinSizePixel() );
+ mpMediaWindowControl->Show();
+ }
+}
+
+// ---------------------------------------------------------------------
+
+MediaWindowImpl::~MediaWindowImpl()
+{
+ delete mpEmptyBmpEx;
+ delete mpAudioBmpEx;
+ delete mpMediaWindowControl;
+}
+
+// ---------------------------------------------------------------------
+
+void MediaWindowImpl::cleanUp()
+{
+ uno::Reference< media::XPlayerWindow > xPlayerWindow( getPlayerWindow() );
+
+ mpEvents->cleanUp();
+
+ if( xPlayerWindow.is() )
+ {
+ xPlayerWindow->removeKeyListener( uno::Reference< awt::XKeyListener >( mxEventsIf, uno::UNO_QUERY ) );
+ xPlayerWindow->removeMouseListener( uno::Reference< awt::XMouseListener >( mxEventsIf, uno::UNO_QUERY ) );
+ xPlayerWindow->removeMouseMotionListener( uno::Reference< awt::XMouseMotionListener >( mxEventsIf, uno::UNO_QUERY ) );
+
+ uno::Reference< lang::XComponent > xComponent( xPlayerWindow, uno::UNO_QUERY );
+
+ if( xComponent.is() )
+ xComponent->dispose();
+
+ setPlayerWindow( NULL );
+ }
+
+ MediaWindowBaseImpl::cleanUp();
+}
+
+// ---------------------------------------------------------------------
+
+void MediaWindowImpl::onURLChanged()
+{
+ if( getPlayer().is() )
+ {
+ uno::Sequence< uno::Any > aArgs( 2 );
+ uno::Reference< media::XPlayerWindow > xPlayerWindow;
+ const Point aPoint;
+ const Size aSize( maChildWindow.GetSizePixel() );
+ const sal_IntPtr nWndHandle = static_cast< sal_IntPtr >( maChildWindow.getParentWindowHandleForJava() );
+
+ aArgs[ 0 ] = uno::makeAny( nWndHandle );
+ aArgs[ 1 ] = uno::makeAny( awt::Rectangle( aPoint.X(), aPoint.Y(), aSize.Width(), aSize.Height() ) );
+
+ try
+ {
+ if( nWndHandle != 0 )
+ xPlayerWindow = getPlayer()->createPlayerWindow( aArgs );
+ }
+ catch( uno::RuntimeException )
+ {
+ // happens eg, on MacOSX where Java frames cannot be created from X11 window handles
+ }
+
+ setPlayerWindow( xPlayerWindow );
+
+ if( xPlayerWindow.is() )
+ {
+ xPlayerWindow->addKeyListener( uno::Reference< awt::XKeyListener >( mxEventsIf, uno::UNO_QUERY ) );
+ xPlayerWindow->addMouseListener( uno::Reference< awt::XMouseListener >( mxEventsIf, uno::UNO_QUERY ) );
+ xPlayerWindow->addMouseMotionListener( uno::Reference< awt::XMouseMotionListener >( mxEventsIf, uno::UNO_QUERY ) );
+ xPlayerWindow->addFocusListener( uno::Reference< awt::XFocusListener >( mxEventsIf, uno::UNO_QUERY ) );
+ }
+ }
+ else
+ setPlayerWindow( NULL );
+
+ if( getPlayerWindow().is() )
+ maChildWindow.Show();
+ else
+ maChildWindow.Hide();
+
+ if( mpMediaWindowControl )
+ {
+ MediaItem aItem;
+
+ updateMediaItem( aItem );
+ mpMediaWindowControl->setState( aItem );
+ }
+
+ Invalidate();
+}
+
+// ---------------------------------------------------------------------
+
+void MediaWindowImpl::update()
+{
+ uno::Reference< media::XPlayerWindow > xPlayerWindow( getPlayerWindow() );
+
+ if( xPlayerWindow.is() )
+ xPlayerWindow->update();
+}
+
+// ---------------------------------------------------------------------
+
+void MediaWindowImpl::setPosSize( const Rectangle& rRect )
+{
+ SetPosSizePixel( rRect.Left(), rRect.Top(), rRect.GetWidth(), rRect.GetHeight() );
+}
+
+// ---------------------------------------------------------------------
+
+void MediaWindowImpl::setPointer( const Pointer& rPointer )
+{
+ uno::Reference< media::XPlayerWindow > xPlayerWindow( getPlayerWindow() );
+
+ SetPointer( rPointer );
+ maChildWindow.SetPointer( rPointer );
+
+ if( xPlayerWindow.is() )
+ {
+
+ long nPointer;
+
+ switch( rPointer.GetStyle() )
+ {
+ case( POINTER_CROSS ): nPointer = awt::SystemPointer::CROSS; break;
+ case( POINTER_HAND ): nPointer = awt::SystemPointer::HAND; break;
+ case( POINTER_MOVE ): nPointer = awt::SystemPointer::MOVE; break;
+ case( POINTER_WAIT ): nPointer = awt::SystemPointer::WAIT; break;
+
+ default: nPointer = awt::SystemPointer::ARROW; break;
+ }
+
+ xPlayerWindow->setPointerType( nPointer );
+ }
+}
+
+// ---------------------------------------------------------------------
+
+const Pointer& MediaWindowImpl::getPointer() const
+{
+ return GetPointer();
+}
+
+// ---------------------------------------------------------------------
+
+bool MediaWindowImpl::hasInternalMediaControl() const
+{
+ return( mpMediaWindowControl != NULL );
+}
+
+// ---------------------------------------------------------------------
+
+void MediaWindowImpl::Resize()
+{
+ uno::Reference< media::XPlayerWindow > xPlayerWindow( getPlayerWindow() );
+ const Size aCurSize( GetOutputSizePixel() );
+ const sal_Int32 nOffset( mpMediaWindowControl ? AVMEDIA_CONTROLOFFSET : 0 );
+ Size aPlayerWindowSize( aCurSize.Width() - ( nOffset << 1 ),
+ aCurSize.Height() - ( nOffset << 1 ) );
+
+ if( mpMediaWindowControl )
+ {
+ const sal_Int32 nControlHeight = mpMediaWindowControl->GetSizePixel().Height();
+ const sal_Int32 nControlY = ::std::max( aCurSize.Height() - nControlHeight - nOffset, 0L );
+
+ aPlayerWindowSize.Height() = ( nControlY - ( nOffset << 1 ) );
+ mpMediaWindowControl->SetPosSizePixel( Point( nOffset, nControlY ), Size( aCurSize.Width() - ( nOffset << 1 ), nControlHeight ) );
+ }
+
+ maChildWindow.SetPosSizePixel( Point( nOffset, nOffset ), aPlayerWindowSize );
+
+ if( xPlayerWindow.is() )
+ xPlayerWindow->setPosSize( 0, 0, aPlayerWindowSize.Width(), aPlayerWindowSize.Height(), 0 );
+}
+
+// ---------------------------------------------------------------------
+
+void MediaWindowImpl::StateChanged( StateChangedType eType )
+{
+ uno::Reference< media::XPlayerWindow > xPlayerWindow( getPlayerWindow() );
+
+ if( xPlayerWindow.is() )
+ {
+ // stop playing when going disabled or hidden
+ switch( eType )
+ {
+ case STATE_CHANGE_VISIBLE:
+ {
+ stopPlayingInternal( !IsVisible() );
+ xPlayerWindow->setVisible( IsVisible() );
+ }
+ break;
+
+ case STATE_CHANGE_ENABLE:
+ {
+ stopPlayingInternal( !IsEnabled() );
+ xPlayerWindow->setEnable( IsEnabled() );
+ }
+ break;
+
+ default:
+ break;
+ }
+ }
+}
+
+// ---------------------------------------------------------------------
+
+void MediaWindowImpl::Paint( const Rectangle& )
+{
+ BitmapEx* pLogo = NULL;
+
+ if( !getPlayer().is() )
+ {
+ if( !mpEmptyBmpEx )
+ mpEmptyBmpEx = new BitmapEx( AVMEDIA_RESID( AVMEDIA_BMP_EMPTYLOGO ) );
+
+ pLogo = mpEmptyBmpEx;
+ }
+ else if ( !getPlayerWindow().is() )
+ {
+ if( !mpAudioBmpEx )
+ mpAudioBmpEx = new BitmapEx( AVMEDIA_RESID( AVMEDIA_BMP_AUDIOLOGO ) );
+
+ pLogo = mpAudioBmpEx;
+ }
+
+ const Point aBasePos( maChildWindow.GetPosPixel() );
+ const Rectangle aVideoRect( aBasePos, maChildWindow.GetSizePixel() );
+
+ if( pLogo && !pLogo->IsEmpty() && ( aVideoRect.GetWidth() > 0 ) && ( aVideoRect.GetHeight() > 0 ) )
+ {
+ Size aLogoSize( pLogo->GetSizePixel() );
+ const Color aBackgroundColor( 67, 67, 67 );
+
+ SetLineColor( aBackgroundColor );
+ SetFillColor( aBackgroundColor );
+ DrawRect( aVideoRect );
+
+ if( ( aLogoSize.Width() > aVideoRect.GetWidth() || aLogoSize.Height() > aVideoRect.GetHeight() ) &&
+ ( aLogoSize.Height() > 0 ) )
+ {
+ const double fLogoWH = (double) aLogoSize.Width() / aLogoSize.Height();
+
+ if( fLogoWH < ( (double) aVideoRect.GetWidth() / aVideoRect.GetHeight() ) )
+ {
+ aLogoSize.Width() = (long) ( aVideoRect.GetHeight() * fLogoWH );
+ aLogoSize.Height()= aVideoRect.GetHeight();
+ }
+ else
+ {
+ aLogoSize.Width() = aVideoRect.GetWidth();
+ aLogoSize.Height()= (long) ( aVideoRect.GetWidth() / fLogoWH );
+ }
+ }
+
+ DrawBitmapEx( Point( aBasePos.X() + ( ( aVideoRect.GetWidth() - aLogoSize.Width() ) >> 1 ),
+ aBasePos.Y() + ( ( aVideoRect.GetHeight() - aLogoSize.Height() ) >> 1 ) ),
+ aLogoSize, *pLogo );
+ }
+
+ update();
+}
+
+// ---------------------------------------------------------------------
+
+void MediaWindowImpl::GetFocus()
+{
+}
+
+// ---------------------------------------------------------------------
+
+void MediaWindowImpl::MouseMove( const MouseEvent& rMEvt )
+{
+ MediaWindow* pMediaWindow = getMediaWindow();
+
+ if( pMediaWindow )
+ pMediaWindow->MouseMove( rMEvt );
+}
+
+// ---------------------------------------------------------------------
+
+void MediaWindowImpl::MouseButtonDown( const MouseEvent& rMEvt )
+{
+ MediaWindow* pMediaWindow = getMediaWindow();
+
+ if( pMediaWindow )
+ pMediaWindow->MouseButtonDown( rMEvt );
+}
+
+// ---------------------------------------------------------------------
+
+void MediaWindowImpl::MouseButtonUp( const MouseEvent& rMEvt )
+{
+ MediaWindow* pMediaWindow = getMediaWindow();
+
+ if( pMediaWindow )
+ pMediaWindow->MouseButtonUp( rMEvt );
+}
+
+// ---------------------------------------------------------------------
+
+void MediaWindowImpl::KeyInput( const KeyEvent& rKEvt )
+{
+ MediaWindow* pMediaWindow = getMediaWindow();
+
+ if( pMediaWindow )
+ pMediaWindow->KeyInput( rKEvt );
+}
+
+// ---------------------------------------------------------------------
+
+void MediaWindowImpl::KeyUp( const KeyEvent& rKEvt )
+{
+ MediaWindow* pMediaWindow = getMediaWindow();
+
+ if( pMediaWindow )
+ pMediaWindow->KeyUp( rKEvt );
+}
+
+// ---------------------------------------------------------------------
+
+void MediaWindowImpl::Command( const CommandEvent& rCEvt )
+{
+ MediaWindow* pMediaWindow = getMediaWindow();
+
+ if( pMediaWindow )
+ pMediaWindow->Command( rCEvt );
+}
+
+// ---------------------------------------------------------------------
+
+sal_Int8 MediaWindowImpl::AcceptDrop( const AcceptDropEvent& rEvt )
+{
+ MediaWindow* pMediaWindow = getMediaWindow();
+ return( pMediaWindow ? pMediaWindow->AcceptDrop( rEvt ) : 0 );
+}
+
+// ---------------------------------------------------------------------
+
+sal_Int8 MediaWindowImpl::ExecuteDrop( const ExecuteDropEvent& rEvt )
+{
+ MediaWindow* pMediaWindow = getMediaWindow();
+ return( pMediaWindow ? pMediaWindow->ExecuteDrop( rEvt ) : 0 );
+}
+
+// ---------------------------------------------------------------------
+
+void MediaWindowImpl::StartDrag( sal_Int8 nAction, const Point& rPosPixel )
+{
+ MediaWindow* pMediaWindow = getMediaWindow();
+
+ if( pMediaWindow )
+ pMediaWindow->StartDrag( nAction, rPosPixel );
+}
+
+} // namespace priv
+} // namespace avmedia
diff --git a/avmedia/source/viewer/mediawindow_impl.hxx b/avmedia/source/viewer/mediawindow_impl.hxx
new file mode 100644
index 000000000000..679b864af6b7
--- /dev/null
+++ b/avmedia/source/viewer/mediawindow_impl.hxx
@@ -0,0 +1,145 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _AVMEDIA_MEDIAWINDOW_IMPL_HXX
+#define _AVMEDIA_MEDIAWINDOW_IMPL_HXX
+
+#include <svtools/transfer.hxx>
+#include <vcl/javachild.hxx>
+
+#include "mediawindowbase_impl.hxx"
+#include "mediacontrol.hxx"
+
+class BitmapEx;
+
+namespace avmedia
+{
+ namespace priv
+ {
+ // ----------------------
+ // - MediaWindowControl -
+ // ----------------------
+
+ class MediaWindowControl : public MediaControl
+ {
+ public:
+
+ MediaWindowControl( Window* pParent );
+ ~MediaWindowControl();
+
+ protected:
+
+ void update();
+ void execute( const MediaItem& rItem );
+ };
+
+ // --------------------
+ // - MediaChildWindow -
+ // --------------------
+
+ class MediaChildWindow : public JavaChildWindow
+ {
+ public:
+
+ MediaChildWindow( Window* pParent );
+ ~MediaChildWindow();
+
+ protected:
+
+ virtual void MouseMove( const MouseEvent& rMEvt );
+ virtual void MouseButtonDown( const MouseEvent& rMEvt );
+ virtual void MouseButtonUp( const MouseEvent& rMEvt );
+ virtual void KeyInput( const KeyEvent& rKEvt );
+ virtual void KeyUp( const KeyEvent& rKEvt );
+ virtual void Command( const CommandEvent& rCEvt );
+ };
+
+ // ------------------.
+ // - MediaWindowImpl -
+ // -------------------
+
+ class MediaEventListenersImpl;
+
+ class MediaWindowImpl : public Control,
+ public MediaWindowBaseImpl,
+ public DropTargetHelper,
+ public DragSourceHelper
+
+ {
+ public:
+
+ MediaWindowImpl( Window* parent, MediaWindow* pMediaWindow, bool bInternalMediaControl );
+ virtual ~MediaWindowImpl();
+
+ virtual void cleanUp();
+ virtual void onURLChanged();
+
+ public:
+
+ void update();
+
+ void setPosSize( const Rectangle& rRect );
+
+ void setPointer( const Pointer& rPointer );
+ const Pointer& getPointer() const;
+
+ bool hasInternalMediaControl() const;
+
+ protected:
+
+ // Window
+ virtual void MouseMove( const MouseEvent& rMEvt );
+ virtual void MouseButtonDown( const MouseEvent& rMEvt );
+ virtual void MouseButtonUp( const MouseEvent& rMEvt );
+ virtual void KeyInput( const KeyEvent& rKEvt );
+ virtual void KeyUp( const KeyEvent& rKEvt );
+ virtual void Command( const CommandEvent& rCEvt );
+ virtual void Resize();
+ virtual void StateChanged( StateChangedType );
+ virtual void Paint( const Rectangle& ); // const
+ virtual void GetFocus();
+
+ // DropTargetHelper
+ virtual sal_Int8 AcceptDrop( const AcceptDropEvent& rEvt );
+ virtual sal_Int8 ExecuteDrop( const ExecuteDropEvent& rEvt );
+
+ // DragSourceHelper
+ virtual void StartDrag( sal_Int8 nAction, const Point& rPosPixel );
+
+ private:
+
+ ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > mxEventsIf;
+ MediaEventListenersImpl* mpEvents;
+ MediaChildWindow maChildWindow;
+ MediaWindowControl* mpMediaWindowControl;
+ BitmapEx* mpEmptyBmpEx;
+ BitmapEx* mpAudioBmpEx;
+ };
+ }
+}
+
+#endif
diff --git a/avmedia/source/viewer/mediawindowbase_impl.cxx b/avmedia/source/viewer/mediawindowbase_impl.cxx
new file mode 100644
index 000000000000..ea28121e3609
--- /dev/null
+++ b/avmedia/source/viewer/mediawindowbase_impl.cxx
@@ -0,0 +1,442 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "mediawindowbase_impl.hxx"
+#include <avmedia/mediaitem.hxx>
+#include "mediamisc.hxx"
+#include "mediawindow.hrc"
+#include <tools/urlobj.hxx>
+#include <comphelper/processfactory.hxx>
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+#include <com/sun/star/media/XManager.hpp>
+#ifndef _COM_SUN_STAR_LANG_XCOMPONENT_HDL_
+#include <com/sun/star/lang/XComponent.hdl>
+#endif
+
+#define MEDIA_TIMER_TIMEOUT 100
+
+using namespace ::com::sun::star;
+
+namespace avmedia { namespace priv {
+
+// -----------------------
+// - MediaWindowBaseImpl -
+// -----------------------
+
+MediaWindowBaseImpl::MediaWindowBaseImpl( MediaWindow* pMediaWindow ) :
+ mpMediaWindow( pMediaWindow )
+{
+}
+
+// ---------------------------------------------------------------------
+
+MediaWindowBaseImpl::~MediaWindowBaseImpl()
+{
+ uno::Reference< lang::XMultiServiceFactory > xFactory( ::comphelper::getProcessServiceFactory() );
+}
+
+// -------------------------------------------------------------------------
+
+uno::Reference< media::XPlayer > MediaWindowBaseImpl::createPlayer( const ::rtl::OUString& rURL )
+{
+ uno::Reference< lang::XMultiServiceFactory > xFactory( ::comphelper::getProcessServiceFactory() );
+ uno::Reference< media::XPlayer > xPlayer;
+
+ if( xFactory.is() )
+ {
+ try
+ {
+
+ uno::Reference< ::com::sun::star::media::XManager > xManager(
+ xFactory->createInstance( ::rtl::OUString::createFromAscii( AVMEDIA_MANAGER_SERVICE_NAME ) ),
+ uno::UNO_QUERY );
+
+ if( xManager.is() )
+ {
+ xPlayer = uno::Reference< ::com::sun::star::media::XPlayer >(
+ xManager->createPlayer( rURL ), uno::UNO_QUERY );
+ }
+ }
+ catch( ... )
+ {
+ }
+ }
+
+ return xPlayer;
+}
+
+
+// ---------------------------------------------------------------------
+
+void MediaWindowBaseImpl::setURL( const ::rtl::OUString& rURL )
+{
+ if( rURL != getURL() )
+ {
+ INetURLObject aURL( maFileURL = rURL );
+
+ if( mxPlayer.is() )
+ mxPlayer->stop();
+
+ if( mxPlayerWindow.is() )
+ {
+ mxPlayerWindow->setVisible( false );
+ mxPlayerWindow.clear();
+ }
+
+ mxPlayer.clear();
+
+ if( aURL.GetProtocol() != INET_PROT_NOT_VALID )
+ maFileURL = aURL.GetMainURL( INetURLObject::DECODE_UNAMBIGUOUS );
+
+ mxPlayer = createPlayer( maFileURL );
+ onURLChanged();
+ }
+}
+
+// ---------------------------------------------------------------------
+
+void MediaWindowBaseImpl::onURLChanged()
+{
+}
+
+// ---------------------------------------------------------------------
+
+const ::rtl::OUString& MediaWindowBaseImpl::getURL() const
+{
+ return maFileURL;
+}
+
+// ---------------------------------------------------------------------
+
+bool MediaWindowBaseImpl::isValid() const
+{
+ return( getPlayer().is() );
+}
+
+// ---------------------------------------------------------------------
+
+void MediaWindowBaseImpl::stopPlayingInternal( bool bStop )
+{
+ if( isPlaying() )
+ {
+ if( bStop )
+ mxPlayer->stop();
+ else
+ mxPlayer->start();
+ }
+}
+
+// ---------------------------------------------------------------------
+
+MediaWindow* MediaWindowBaseImpl::getMediaWindow() const
+{
+ return mpMediaWindow;
+}
+
+// ---------------------------------------------------------------------
+
+uno::Reference< media::XPlayer > MediaWindowBaseImpl::getPlayer() const
+{
+ return mxPlayer;
+}
+
+// ---------------------------------------------------------------------
+
+uno::Reference< media::XPlayerWindow > MediaWindowBaseImpl::getPlayerWindow() const
+{
+ return mxPlayerWindow;
+}
+
+// ---------------------------------------------------------------------
+
+void MediaWindowBaseImpl::setPlayerWindow( const uno::Reference< media::XPlayerWindow >& rxPlayerWindow )
+{
+ mxPlayerWindow = rxPlayerWindow;
+}
+
+// ---------------------------------------------------------------------
+
+void MediaWindowBaseImpl::cleanUp()
+{
+ if( mxPlayer.is() )
+ {
+ mxPlayer->stop();
+
+ uno::Reference< lang::XComponent > xComponent( mxPlayer, uno::UNO_QUERY );
+
+ if( xComponent.is() )
+ xComponent->dispose();
+
+ mxPlayer.clear();
+ }
+
+ mpMediaWindow = NULL;
+}
+
+// ---------------------------------------------------------------------
+
+bool MediaWindowBaseImpl::hasPreferredSize() const
+{
+ return( mxPlayerWindow.is() );
+}
+
+// ---------------------------------------------------------------------
+
+Size MediaWindowBaseImpl::getPreferredSize() const
+{
+ Size aRet;
+
+ if( mxPlayer.is() )
+ {
+ awt::Size aPrefSize( mxPlayer->getPreferredPlayerWindowSize() );
+
+ aRet.Width() = aPrefSize.Width;
+ aRet.Height() = aPrefSize.Height;
+ }
+
+ return aRet;
+}
+
+// ---------------------------------------------------------------------
+
+bool MediaWindowBaseImpl::setZoom( ::com::sun::star::media::ZoomLevel eLevel )
+{
+ return( mxPlayerWindow.is() ? mxPlayerWindow->setZoomLevel( eLevel ) : false );
+}
+
+// -------------------------------------------------------------------------
+
+::com::sun::star::media::ZoomLevel MediaWindowBaseImpl::getZoom() const
+{
+ return( mxPlayerWindow.is() ? mxPlayerWindow->getZoomLevel() : ::com::sun::star::media::ZoomLevel_NOT_AVAILABLE );
+}
+
+// ---------------------------------------------------------------------
+
+bool MediaWindowBaseImpl::start()
+{
+ return( mxPlayer.is() ? ( mxPlayer->start(), true ) : false );
+}
+
+// ---------------------------------------------------------------------
+
+void MediaWindowBaseImpl::stop()
+{
+ if( mxPlayer.is() )
+ mxPlayer->stop();
+}
+
+// ---------------------------------------------------------------------
+
+bool MediaWindowBaseImpl::isPlaying() const
+{
+ return( mxPlayer.is() && mxPlayer->isPlaying() );
+}
+
+// ---------------------------------------------------------------------
+
+double MediaWindowBaseImpl::getDuration() const
+{
+ return( mxPlayer.is() ? mxPlayer->getDuration() : 0.0 );
+}
+
+// ---------------------------------------------------------------------
+
+void MediaWindowBaseImpl::setMediaTime( double fTime )
+{
+ if( mxPlayer.is() )
+ mxPlayer->setMediaTime( fTime );
+}
+
+// ---------------------------------------------------------------------
+
+double MediaWindowBaseImpl::getMediaTime() const
+{
+ return( mxPlayer.is() ? mxPlayer->getMediaTime() : 0.0 );
+}
+
+// ---------------------------------------------------------------------
+
+void MediaWindowBaseImpl::setStopTime( double fTime )
+{
+ if( mxPlayer.is() )
+ mxPlayer->setStopTime( fTime );
+}
+
+// ---------------------------------------------------------------------
+
+double MediaWindowBaseImpl::getStopTime() const
+{
+ return( mxPlayer.is() ? mxPlayer->getStopTime() : 0.0 );
+}
+
+// ---------------------------------------------------------------------
+
+void MediaWindowBaseImpl::setRate( double fRate )
+{
+ if( mxPlayer.is() )
+ mxPlayer->setRate( fRate );
+}
+
+// ---------------------------------------------------------------------
+
+double MediaWindowBaseImpl::getRate() const
+{
+ return( mxPlayer.is() ? mxPlayer->getRate() : 0.0 );
+}
+
+// ---------------------------------------------------------------------
+
+void MediaWindowBaseImpl::setPlaybackLoop( bool bSet )
+{
+ if( mxPlayer.is() )
+ mxPlayer->setPlaybackLoop( bSet );
+}
+
+// ---------------------------------------------------------------------
+
+bool MediaWindowBaseImpl::isPlaybackLoop() const
+{
+ return( mxPlayer.is() ? mxPlayer->isPlaybackLoop() : false );
+}
+
+// ---------------------------------------------------------------------
+
+void MediaWindowBaseImpl::setMute( bool bSet )
+{
+ if( mxPlayer.is() )
+ mxPlayer->setMute( bSet );
+}
+
+// ---------------------------------------------------------------------
+
+bool MediaWindowBaseImpl::isMute() const
+{
+ return( mxPlayer.is() ? mxPlayer->isMute() : false );
+}
+
+// ---------------------------------------------------------------------
+
+void MediaWindowBaseImpl::setVolumeDB( sal_Int16 nVolumeDB )
+{
+ if( mxPlayer.is() )
+ mxPlayer->setVolumeDB( nVolumeDB );
+}
+
+// ---------------------------------------------------------------------
+
+sal_Int16 MediaWindowBaseImpl::getVolumeDB() const
+{
+ return( mxPlayer.is() ? mxPlayer->getVolumeDB() : 0 );
+}
+
+// -------------------------------------------------------------------------
+
+void MediaWindowBaseImpl::updateMediaItem( MediaItem& rItem ) const
+{
+ if( isPlaying() )
+ rItem.setState( ( getRate() > 1.0 ) ? MEDIASTATE_PLAYFFW : MEDIASTATE_PLAY );
+ else
+ rItem.setState( ( 0.0 == getMediaTime() ) ? MEDIASTATE_STOP : MEDIASTATE_PAUSE );
+
+ rItem.setDuration( getDuration() );
+ rItem.setTime( getMediaTime() );
+ rItem.setLoop( isPlaybackLoop() );
+ rItem.setMute( isMute() );
+ rItem.setVolumeDB( getVolumeDB() );
+ rItem.setZoom( getZoom() );
+ rItem.setURL( getURL() );
+}
+
+// -------------------------------------------------------------------------
+
+void MediaWindowBaseImpl::executeMediaItem( const MediaItem& rItem )
+{
+ const sal_uInt32 nMaskSet = rItem.getMaskSet();
+
+ // set URL first
+ if( nMaskSet & AVMEDIA_SETMASK_URL )
+ setURL( rItem.getURL() );
+
+ // set different states next
+ if( nMaskSet & AVMEDIA_SETMASK_TIME )
+ setMediaTime( ::std::min( rItem.getTime(), getDuration() ) );
+
+ if( nMaskSet & AVMEDIA_SETMASK_LOOP )
+ setPlaybackLoop( rItem.isLoop() );
+
+ if( nMaskSet & AVMEDIA_SETMASK_MUTE )
+ setMute( rItem.isMute() );
+
+ if( nMaskSet & AVMEDIA_SETMASK_VOLUMEDB )
+ setVolumeDB( rItem.getVolumeDB() );
+
+ if( nMaskSet & AVMEDIA_SETMASK_ZOOM )
+ setZoom( rItem.getZoom() );
+
+ // set play state at last
+ if( nMaskSet & AVMEDIA_SETMASK_STATE )
+ {
+ switch( rItem.getState() )
+ {
+ case( MEDIASTATE_PLAY ):
+ case( MEDIASTATE_PLAYFFW ):
+ {
+/*
+ const double fNewRate = ( ( MEDIASTATE_PLAYFFW == rItem.getState() ) ? AVMEDIA_FFW_PLAYRATE : 1.0 );
+
+ if( getRate() != fNewRate )
+ setRate( fNewRate );
+*/
+ if( !isPlaying() )
+ start();
+ }
+ break;
+
+ case( MEDIASTATE_PAUSE ):
+ {
+ if( isPlaying() )
+ stop();
+ }
+ break;
+
+ case( MEDIASTATE_STOP ):
+ {
+ if( isPlaying() )
+ {
+ setMediaTime( 0.0 );
+ stop();
+ setMediaTime( 0.0 );
+ }
+ }
+ break;
+ }
+ }
+}
+
+} // namespace priv
+} // namespace avemdia
diff --git a/avmedia/source/viewer/mediawindowbase_impl.hxx b/avmedia/source/viewer/mediawindowbase_impl.hxx
new file mode 100644
index 000000000000..0b0f160b6e3c
--- /dev/null
+++ b/avmedia/source/viewer/mediawindowbase_impl.hxx
@@ -0,0 +1,131 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _AVMEDIA_MEDIAWINDOWBASE_IMPL_HXX
+#define _AVMEDIA_MEDIAWINDOWBASE_IMPL_HXX
+
+#include <avmedia/mediawindow.hxx>
+#include <com/sun/star/media/XPlayer.hpp>
+#include <com/sun/star/media/XPlayerWindow.hpp>
+
+namespace avmedia
+{
+ namespace priv
+ {
+ // --------------
+ // - UpdateMode -
+ // --------------
+
+ enum UpdateMode
+ {
+ UPDATEMODE_SYNC_STATUSBAR = 0,
+ UPDATEMODE_SYNC_PLAYER = 1,
+ UPDATEMODE_SYNC_NONE = 2
+ };
+
+ // -----------------------
+ // - MediaWindowBaseImpl -
+ // -----------------------
+
+ class MediaWindowBaseImpl
+ {
+ public:
+
+ MediaWindowBaseImpl( MediaWindow* pMediaWindow );
+ virtual ~MediaWindowBaseImpl();
+
+ virtual void cleanUp();
+ virtual void onURLChanged();
+
+ static ::com::sun::star::uno::Reference< ::com::sun::star::media::XPlayer > createPlayer( const ::rtl::OUString& rURL );
+
+ public:
+
+ void setURL( const ::rtl::OUString& rURL );
+ const ::rtl::OUString& getURL() const;
+
+ bool isValid() const;
+
+ bool hasPreferredSize() const;
+ Size getPreferredSize() const;
+
+ bool setZoom( ::com::sun::star::media::ZoomLevel eLevel );
+ ::com::sun::star::media::ZoomLevel getZoom() const;
+
+ bool start();
+ void stop();
+
+ bool isPlaying() const;
+
+ double getDuration() const;
+
+ void setMediaTime( double fTime );
+ double getMediaTime() const;
+
+ void setStopTime( double fTime );
+ double getStopTime() const;
+
+ void setRate( double fRate );
+ double getRate() const;
+
+ void setPlaybackLoop( bool bSet );
+ bool isPlaybackLoop() const;
+
+ void setFixedAspectRatio( bool bSet );
+ bool isFixedAspectRatio() const;
+
+ void setMute( bool bSet );
+ bool isMute() const;
+
+ void setVolumeDB( sal_Int16 nVolumeDB );
+ sal_Int16 getVolumeDB() const;
+
+ void updateMediaItem( MediaItem& rItem ) const;
+ void executeMediaItem( const MediaItem& rItem );
+
+ protected:
+
+ void stopPlayingInternal( bool );
+
+ MediaWindow* getMediaWindow() const;
+
+ ::com::sun::star::uno::Reference< ::com::sun::star::media::XPlayer > getPlayer() const;
+
+ void setPlayerWindow( const ::com::sun::star::uno::Reference< ::com::sun::star::media::XPlayerWindow >& rxPlayerWindow );
+ ::com::sun::star::uno::Reference< ::com::sun::star::media::XPlayerWindow > getPlayerWindow() const;
+
+ private:
+
+ ::rtl::OUString maFileURL;
+ ::com::sun::star::uno::Reference< ::com::sun::star::media::XPlayer > mxPlayer;
+ ::com::sun::star::uno::Reference< ::com::sun::star::media::XPlayerWindow > mxPlayerWindow;
+ MediaWindow* mpMediaWindow;
+ };
+ }
+}
+
+#endif
diff --git a/avmedia/source/win/exports.dxp b/avmedia/source/win/exports.dxp
new file mode 100644
index 000000000000..db9c0a52f288
--- /dev/null
+++ b/avmedia/source/win/exports.dxp
@@ -0,0 +1,4 @@
+component_getImplementationEnvironment
+component_writeInfo
+component_getFactory
+
diff --git a/avmedia/source/win/framegrabber.cxx b/avmedia/source/win/framegrabber.cxx
new file mode 100644
index 000000000000..dc4a5dbeeb74
--- /dev/null
+++ b/avmedia/source/win/framegrabber.cxx
@@ -0,0 +1,247 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <tools/prewin.h>
+#if defined _MSC_VER
+#pragma warning(push, 1)
+#pragma warning(disable: 4917)
+#endif
+#include <windows.h>
+#include <objbase.h>
+#include <strmif.h>
+#include <Amvideo.h>
+#if defined(_MSC_VER) && (_MSC_VER < 1500)
+#include <Qedit.h>
+#else
+#include "interface.hxx"
+#endif
+#include <uuids.h>
+#if defined _MSC_VER
+#pragma warning(pop)
+#endif
+#include <tools/postwin.h>
+
+#include "framegrabber.hxx"
+#include "player.hxx"
+
+#include <tools/stream.hxx>
+#include <vcl/graph.hxx>
+#include <unotools/localfilehelper.hxx>
+
+#define AVMEDIA_WIN_FRAMEGRABBER_IMPLEMENTATIONNAME "com.sun.star.comp.avmedia.FrameGrabber_DirectX"
+#define AVMEDIA_WIN_FRAMEGRABBER_SERVICENAME "com.sun.star.media.FrameGrabber_DirectX"
+
+using namespace ::com::sun::star;
+
+namespace avmedia { namespace win {
+
+// ----------------
+// - FrameGrabber -
+// ----------------
+
+FrameGrabber::FrameGrabber( const uno::Reference< lang::XMultiServiceFactory >& rxMgr ) :
+ mxMgr( rxMgr )
+{
+ ::CoInitialize( NULL );
+}
+
+// ------------------------------------------------------------------------------
+
+FrameGrabber::~FrameGrabber()
+{
+ ::CoUninitialize();
+}
+
+// ------------------------------------------------------------------------------
+
+IMediaDet* FrameGrabber::implCreateMediaDet( const ::rtl::OUString& rURL ) const
+{
+ IMediaDet* pDet = NULL;
+
+ if( SUCCEEDED( CoCreateInstance( CLSID_MediaDet, NULL, CLSCTX_INPROC_SERVER, IID_IMediaDet, (void**) &pDet ) ) )
+ {
+ String aLocalStr;
+
+ if( ::utl::LocalFileHelper::ConvertURLToPhysicalName( rURL, aLocalStr ) && aLocalStr.Len() )
+ {
+ if( !SUCCEEDED( pDet->put_Filename( ::SysAllocString( reinterpret_cast<LPCOLESTR>(aLocalStr.GetBuffer()) ) ) ) )
+ {
+ pDet->Release();
+ pDet = NULL;
+ }
+ }
+ }
+
+ return pDet;
+}
+
+// ------------------------------------------------------------------------------
+
+bool FrameGrabber::create( const ::rtl::OUString& rURL )
+{
+ // just check if a MediaDet interface can be created with the given URL
+ IMediaDet* pDet = implCreateMediaDet( rURL );
+
+ if( pDet )
+ {
+ maURL = rURL;
+ pDet->Release();
+ pDet = NULL;
+ }
+ else
+ maURL = ::rtl::OUString();
+
+ return( maURL.getLength() > 0 );
+}
+
+// ------------------------------------------------------------------------------
+
+uno::Reference< graphic::XGraphic > SAL_CALL FrameGrabber::grabFrame( double fMediaTime )
+ throw (uno::RuntimeException)
+{
+ uno::Reference< graphic::XGraphic > xRet;
+ IMediaDet* pDet = implCreateMediaDet( maURL );
+
+ if( pDet )
+ {
+ double fLength;
+ long nStreamCount;
+ bool bFound = false;
+
+ if( SUCCEEDED( pDet->get_OutputStreams( &nStreamCount ) ) )
+ {
+ for( long n = 0; ( n < nStreamCount ) && !bFound; ++n )
+ {
+ GUID aMajorType;
+
+ if( SUCCEEDED( pDet->put_CurrentStream( n ) ) &&
+ SUCCEEDED( pDet->get_StreamType( &aMajorType ) ) &&
+ ( aMajorType == MEDIATYPE_Video ) )
+ {
+ bFound = true;
+ }
+ }
+ }
+
+ if( bFound &&
+ ( S_OK == pDet->get_StreamLength( &fLength ) ) &&
+ ( fLength > 0.0 ) && ( fMediaTime >= 0.0 ) && ( fMediaTime <= fLength ) )
+ {
+ AM_MEDIA_TYPE aMediaType;
+ long nWidth = 0, nHeight = 0, nSize = 0;
+
+ if( SUCCEEDED( pDet->get_StreamMediaType( &aMediaType ) ) )
+ {
+ if( ( aMediaType.formattype == FORMAT_VideoInfo ) &&
+ ( aMediaType.cbFormat >= sizeof( VIDEOINFOHEADER ) ) )
+ {
+ VIDEOINFOHEADER* pVih = reinterpret_cast< VIDEOINFOHEADER* >( aMediaType.pbFormat );
+
+ nWidth = pVih->bmiHeader.biWidth;
+ nHeight = pVih->bmiHeader.biHeight;
+
+ if( nHeight < 0 )
+ nHeight *= -1;
+ }
+
+ if( aMediaType.cbFormat != 0 )
+ {
+ ::CoTaskMemFree( (PVOID) aMediaType.pbFormat );
+ aMediaType.cbFormat = 0;
+ aMediaType.pbFormat = NULL;
+ }
+
+ if( aMediaType.pUnk != NULL )
+ {
+ aMediaType.pUnk->Release();
+ aMediaType.pUnk = NULL;
+ }
+ }
+
+ if( ( nWidth > 0 ) && ( nHeight > 0 ) &&
+ SUCCEEDED( pDet->GetBitmapBits( 0, &nSize, NULL, nWidth, nHeight ) ) &&
+ ( nSize > 0 ) )
+ {
+ char* pBuffer = new char[ nSize ];
+
+ try
+ {
+ if( SUCCEEDED( pDet->GetBitmapBits( fMediaTime, NULL, pBuffer, nWidth, nHeight ) ) )
+ {
+ SvMemoryStream aMemStm( pBuffer, nSize, STREAM_READ | STREAM_WRITE );
+ Bitmap aBmp;
+
+ if( aBmp.Read( aMemStm, false ) && !aBmp.IsEmpty() )
+ {
+ const Graphic aGraphic( aBmp );
+ xRet = aGraphic.GetXGraphic();
+ }
+ }
+ }
+ catch( ... )
+ {
+ }
+
+ delete [] pBuffer;
+ }
+ }
+
+ pDet->Release();
+ }
+
+ return xRet;
+}
+
+// ------------------------------------------------------------------------------
+
+::rtl::OUString SAL_CALL FrameGrabber::getImplementationName( )
+ throw (uno::RuntimeException)
+{
+ return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( AVMEDIA_WIN_FRAMEGRABBER_IMPLEMENTATIONNAME ) );
+}
+
+// ------------------------------------------------------------------------------
+
+sal_Bool SAL_CALL FrameGrabber::supportsService( const ::rtl::OUString& ServiceName )
+ throw (uno::RuntimeException)
+{
+ return ServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM ( AVMEDIA_WIN_FRAMEGRABBER_SERVICENAME ) );
+}
+
+// ------------------------------------------------------------------------------
+
+uno::Sequence< ::rtl::OUString > SAL_CALL FrameGrabber::getSupportedServiceNames( )
+ throw (uno::RuntimeException)
+{
+ uno::Sequence< ::rtl::OUString > aRet(1);
+ aRet[0] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( AVMEDIA_WIN_FRAMEGRABBER_SERVICENAME ) );
+
+ return aRet;
+}
+
+} // namespace win
+} // namespace avmedia
diff --git a/avmedia/source/win/framegrabber.hxx b/avmedia/source/win/framegrabber.hxx
new file mode 100644
index 000000000000..17085571feea
--- /dev/null
+++ b/avmedia/source/win/framegrabber.hxx
@@ -0,0 +1,74 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _FRAMEGRABBER_HXX
+#define _FRAMEGRABBER_HXX
+
+#include "wincommon.hxx"
+
+#ifndef _COM_SUN_STAR_MEDIA_XFRAMEGRABBER_HDL_
+#include "com/sun/star/media/XFrameGrabber.hdl"
+#endif
+
+struct IMediaDet;
+
+namespace avmedia { namespace win {
+
+// ----------------
+// - FrameGrabber -
+// ----------------
+
+class FrameGrabber : public ::cppu::WeakImplHelper2 < ::com::sun::star::media::XFrameGrabber,
+ ::com::sun::star::lang::XServiceInfo >
+{
+public:
+
+ FrameGrabber( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& rxMgr );
+ ~FrameGrabber();
+
+ bool create( const ::rtl::OUString& rURL );
+
+ // XFrameGrabber
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::graphic::XGraphic > SAL_CALL grabFrame( double fMediaTime ) throw (::com::sun::star::uno::RuntimeException);
+
+ // XServiceInfo
+ virtual ::rtl::OUString SAL_CALL getImplementationName( ) throw (::com::sun::star::uno::RuntimeException);
+ virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw (::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames( ) throw (::com::sun::star::uno::RuntimeException);
+
+private:
+
+ ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > mxMgr;
+ ::rtl::OUString maURL;
+
+ IMediaDet* implCreateMediaDet( const ::rtl::OUString& rURL ) const;
+};
+
+} // namespace win
+} // namespace avmedia
+
+#endif // _FRAMEGRABBER_HXX
diff --git a/avmedia/source/win/interface.hxx b/avmedia/source/win/interface.hxx
new file mode 100644
index 000000000000..a5928139e7a7
--- /dev/null
+++ b/avmedia/source/win/interface.hxx
@@ -0,0 +1,123 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+extern "C" const CLSID CLSID_MediaDet;
+extern "C" const IID IID_IMediaDet;
+struct ISampleGrabber;
+
+struct
+#ifndef __MINGW32__
+__declspec(uuid("65BD0710-24D2-4ff7-9324-ED2E5D3ABAFA")) __declspec(novtable)
+#endif
+IMediaDet : public IUnknown
+{
+public:
+ virtual HRESULT __stdcall get_Filter(
+ IUnknown **pVal) = 0;
+ virtual HRESULT __stdcall put_Filter(
+ IUnknown *newVal) = 0;
+ virtual HRESULT __stdcall get_OutputStreams(
+ long *pVal) = 0;
+ virtual HRESULT __stdcall get_CurrentStream(
+ long *pVal) = 0;
+ virtual HRESULT __stdcall put_CurrentStream(
+ long newVal) = 0;
+ virtual HRESULT __stdcall get_StreamType(
+ GUID *pVal) = 0;
+ virtual HRESULT __stdcall get_StreamTypeB(
+ BSTR *pVal) = 0;
+ virtual HRESULT __stdcall get_StreamLength(
+ double *pVal) = 0;
+ virtual HRESULT __stdcall get_Filename(
+ BSTR *pVal) = 0;
+ virtual HRESULT __stdcall put_Filename(
+ BSTR newVal) = 0;
+ virtual HRESULT __stdcall GetBitmapBits(
+ double StreamTime,
+ long *pBufferSize,
+ char *pBuffer,
+ long Width,
+ long Height) = 0;
+ virtual HRESULT __stdcall WriteBitmapBits(
+ double StreamTime,
+ long Width,
+ long Height,
+ BSTR Filename) = 0;
+ virtual HRESULT __stdcall get_StreamMediaType(
+ AM_MEDIA_TYPE *pVal) = 0;
+ virtual HRESULT __stdcall GetSampleGrabber(
+ ISampleGrabber **ppVal) = 0;
+ virtual HRESULT __stdcall get_FrameRate(
+ double *pVal) = 0;
+ virtual HRESULT __stdcall EnterBitmapGrabMode(
+ double SeekTime) = 0;
+};
+
+extern "C" const IID IID_ISampleGrabberCB;
+struct
+#ifndef __MINGW32__
+__declspec(uuid("0579154A-2B53-4994-B0D0-E773148EFF85")) __declspec(novtable)
+#endif
+ISampleGrabberCB : public IUnknown
+{
+public:
+ virtual HRESULT __stdcall SampleCB(
+ double SampleTime,
+ IMediaSample *pSample) = 0;
+ virtual HRESULT __stdcall BufferCB(
+ double SampleTime,
+ WIN_BYTE *pBuffer,
+ long BufferLen) = 0;
+};
+
+extern "C" const IID IID_ISampleGrabber;
+struct
+#ifndef __MINGW32__
+__declspec(uuid("6B652FFF-11FE-4fce-92AD-0266B5D7C78F")) __declspec(novtable)
+#endif
+ISampleGrabber : public IUnknown
+{
+public:
+ virtual HRESULT __stdcall SetOneShot(
+ WIN_BOOL OneShot) = 0;
+ virtual HRESULT __stdcall SetMediaType(
+ const AM_MEDIA_TYPE *pType) = 0;
+ virtual HRESULT __stdcall GetConnectedMediaType(
+ AM_MEDIA_TYPE *pType) = 0;
+ virtual HRESULT __stdcall SetBufferSamples(
+ WIN_BOOL BufferThem) = 0;
+ virtual HRESULT __stdcall GetCurrentBuffer(
+ long *pBufferSize,
+ long *pBuffer) = 0;
+ virtual HRESULT __stdcall GetCurrentSample(
+ IMediaSample **ppSample) = 0;
+ virtual HRESULT __stdcall SetCallback(
+ ISampleGrabberCB *pCallback,
+ long WhichMethodToCallback) = 0;
+
+};
+
diff --git a/avmedia/source/win/makefile.mk b/avmedia/source/win/makefile.mk
new file mode 100644
index 000000000000..b70841e8bdf7
--- /dev/null
+++ b/avmedia/source/win/makefile.mk
@@ -0,0 +1,82 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..$/..
+PRJNAME=avmedia
+TARGET=avmediawin
+
+# --- Settings ----------------------------------
+
+.INCLUDE : settings.mk
+
+.IF "$(ENABLE_DIRECTX)" != ""
+
+.IF "$(verbose)"!="" || "$(VERBOSE)"!=""
+CDEFS+= -DVERBOSE
+.ENDIF
+
+# --- Files ----------------------------------
+
+.IF "$(GUI)" == "WNT"
+
+SLOFILES= \
+ $(SLO)$/winuno.obj \
+ $(SLO)$/manager.obj \
+ $(SLO)$/window.obj \
+ $(SLO)$/player.obj \
+ $(SLO)$/framegrabber.obj
+
+
+EXCEPTIONSFILES= \
+ $(SLO)$/winuno.obj \
+ $(SLO)$/framegrabber.obj
+
+SHL1TARGET=$(TARGET)
+SHL1STDLIBS= $(CPPULIB) $(SALLIB) $(COMPHELPERLIB) $(CPPUHELPERLIB) $(UNOTOOLSLIB) $(TOOLSLIB) $(VCLLIB)
+SHL1IMPLIB=i$(TARGET)
+SHL1LIBS=$(SLB)$/$(TARGET).lib
+SHL1DEF=$(MISC)$/$(SHL1TARGET).def
+
+DEF1NAME=$(SHL1TARGET)
+DEF1EXPORTFILE=exports.dxp
+
+SHL1STDLIBS += $(OLE32LIB)
+SHL1STDLIBS += $(OLEAUT32LIB)
+SHL1STDLIBS += $(GDI32LIB)
+SHL1STDLIBS += $(DDRAWLIB)
+
+.IF "$(COM)"=="GCC"
+SHL1STDLIBS += $(PSDK_HOME)$/lib$/strmiids.lib
+.ELSE
+SHL1STDLIBS += strmiids.lib
+SHL1STDLIBS += dxguid.lib
+.ENDIF
+
+.ENDIF
+.ENDIF
+
+.INCLUDE : target.mk
diff --git a/avmedia/source/win/manager.cxx b/avmedia/source/win/manager.cxx
new file mode 100644
index 000000000000..13bc1e4fe593
--- /dev/null
+++ b/avmedia/source/win/manager.cxx
@@ -0,0 +1,97 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "manager.hxx"
+#include "player.hxx"
+
+#include <tools/urlobj.hxx>
+
+#define AVMEDIA_WIN_MANAGER_IMPLEMENTATIONNAME "com.sun.star.comp.avmedia.Manager_DirectX"
+#define AVMEDIA_WIN_MANAGER_SERVICENAME "com.sun.star.media.Manager"
+
+using namespace ::com::sun::star;
+
+namespace avmedia { namespace win {
+// ----------------
+// - Manager -
+// ----------------
+
+Manager::Manager( const uno::Reference< lang::XMultiServiceFactory >& rxMgr ) :
+ mxMgr( rxMgr )
+{
+}
+
+// ------------------------------------------------------------------------------
+
+Manager::~Manager()
+{
+}
+
+// ------------------------------------------------------------------------------
+
+uno::Reference< media::XPlayer > SAL_CALL Manager::createPlayer( const ::rtl::OUString& rURL )
+ throw (uno::RuntimeException)
+{
+ Player* pPlayer( new Player( mxMgr ) );
+ uno::Reference< media::XPlayer > xRet( pPlayer );
+ const INetURLObject aURL( rURL );
+
+ if( !pPlayer->create( aURL.GetMainURL( INetURLObject::DECODE_UNAMBIGUOUS ) ) )
+ xRet = uno::Reference< media::XPlayer >();
+
+ return xRet;
+}
+
+// ------------------------------------------------------------------------------
+
+::rtl::OUString SAL_CALL Manager::getImplementationName( )
+ throw (uno::RuntimeException)
+{
+ return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( AVMEDIA_WIN_MANAGER_IMPLEMENTATIONNAME ) );
+}
+
+// ------------------------------------------------------------------------------
+
+sal_Bool SAL_CALL Manager::supportsService( const ::rtl::OUString& ServiceName )
+ throw (uno::RuntimeException)
+{
+ return ServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM ( AVMEDIA_WIN_MANAGER_SERVICENAME ) );
+}
+
+// ------------------------------------------------------------------------------
+
+uno::Sequence< ::rtl::OUString > SAL_CALL Manager::getSupportedServiceNames( )
+ throw (uno::RuntimeException)
+{
+ uno::Sequence< ::rtl::OUString > aRet(1);
+ aRet[0] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( AVMEDIA_WIN_MANAGER_SERVICENAME ) );
+
+ return aRet;
+}
+
+} // namespace win
+} // namespace avmedia
diff --git a/avmedia/source/win/manager.hxx b/avmedia/source/win/manager.hxx
new file mode 100644
index 000000000000..1bb3e530c016
--- /dev/null
+++ b/avmedia/source/win/manager.hxx
@@ -0,0 +1,66 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _MANAGER_HXX
+#define _MANAGER_HXX
+
+#include "wincommon.hxx"
+
+#ifndef _COM_SUN_STAR_MEDIA_XMANAGER_HDL_
+#include "com/sun/star/media/XManager.hdl"
+#endif
+
+// -----------
+// - Manager -
+// -----------
+
+namespace avmedia { namespace win {
+
+class Manager : public ::cppu::WeakImplHelper2 < ::com::sun::star::media::XManager,
+ ::com::sun::star::lang::XServiceInfo >
+{
+public:
+
+ Manager( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& rxMgr );
+ ~Manager();
+
+ // XManager
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::media::XPlayer > SAL_CALL createPlayer( const ::rtl::OUString& aURL ) throw (::com::sun::star::uno::RuntimeException);
+
+ // XServiceInfo
+ virtual ::rtl::OUString SAL_CALL getImplementationName( ) throw (::com::sun::star::uno::RuntimeException);
+ virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw (::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames( ) throw (::com::sun::star::uno::RuntimeException);
+private:
+
+ ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > mxMgr;
+};
+
+} // namespace win
+} // namespace avmedia
+
+#endif // _MANAGER_HXX
diff --git a/avmedia/source/win/player.cxx b/avmedia/source/win/player.cxx
new file mode 100644
index 000000000000..d27b2b55ff93
--- /dev/null
+++ b/avmedia/source/win/player.cxx
@@ -0,0 +1,494 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <tools/prewin.h>
+#if defined _MSC_VER
+#pragma warning(push, 1)
+#pragma warning(disable: 4917)
+#endif
+#include <windows.h>
+#include <objbase.h>
+#include <strmif.h>
+#include <control.h>
+#include <uuids.h>
+#include <evcode.h>
+#if defined _MSC_VER
+#pragma warning(pop)
+#endif
+#include <tools/postwin.h>
+
+#include "player.hxx"
+#include "framegrabber.hxx"
+#include "window.hxx"
+
+#define AVMEDIA_WIN_PLAYER_IMPLEMENTATIONNAME "com.sun.star.comp.avmedia.Player_DirectX"
+#define AVMEDIA_WIN_PLAYER_SERVICENAME "com.sun.star.media.Player_DirectX"
+
+using namespace ::com::sun::star;
+
+namespace avmedia { namespace win {
+
+bool isWindowsVistaOrHigher()
+{
+ // POST: return true if we are at least on Windows Vista
+ OSVERSIONINFO osvi;
+ ZeroMemory(&osvi, sizeof(osvi));
+ osvi.dwOSVersionInfoSize = sizeof(osvi);
+ GetVersionEx(&osvi);
+ if ( osvi.dwMajorVersion >= 6 )
+ return true;
+
+ return false;
+}
+
+// ----------------
+// - Player -
+// ----------------
+
+Player::Player( const uno::Reference< lang::XMultiServiceFactory >& rxMgr ) :
+ mxMgr( rxMgr ),
+ mpGB( NULL ),
+ mpOMF( NULL ),
+ mpMC( NULL ),
+ mpME( NULL ),
+ mpMS( NULL ),
+ mpMP( NULL ),
+ mpBA( NULL ),
+ mpBV( NULL ),
+ mpVW( NULL ),
+ mpEV( NULL ),
+ mnUnmutedVolume( 0 ),
+ mbMuted( false ),
+ mbLooping( false )
+{
+ ::CoInitialize( NULL );
+}
+
+// ------------------------------------------------------------------------------
+
+Player::~Player()
+{
+ if( mpBA )
+ mpBA->Release();
+
+ if( mpBV )
+ mpBV->Release();
+
+ if( mpVW )
+ mpVW->Release();
+
+ if( mpMP )
+ mpMP->Release();
+
+ if( mpMS )
+ mpMS->Release();
+
+ if( mpME )
+ mpME->Release();
+
+ if( mpMC )
+ mpMC->Release();
+
+ if( mpEV )
+ mpEV->Release();
+
+ if( mpOMF )
+ mpOMF->Release();
+
+ if( mpGB )
+ mpGB->Release();
+
+ ::CoUninitialize();
+}
+
+// ------------------------------------------------------------------------------
+
+bool Player::create( const ::rtl::OUString& rURL )
+{
+ HRESULT hR;
+ bool bRet = false;
+
+ if( SUCCEEDED( hR = CoCreateInstance( CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void**) &mpGB ) ) )
+ {
+ // Don't use the overlay mixer on Windows Vista
+ // It disables the desktop composition as soon as RenderFile is called
+ // also causes some other problems: video rendering is not reliable
+ if( !isWindowsVistaOrHigher() )
+ {
+ if( SUCCEEDED( CoCreateInstance( CLSID_OverlayMixer, NULL, CLSCTX_INPROC_SERVER, IID_IBaseFilter, (void**) &mpOMF ) ) )
+ {
+ mpGB->AddFilter( mpOMF, L"com_sun_star_media_OverlayMixerFilter" );
+
+ if( !SUCCEEDED( mpOMF->QueryInterface( IID_IDDrawExclModeVideo, (void**) &mpEV ) ) )
+ mpEV = NULL;
+ }
+ }
+
+ if( SUCCEEDED( hR = mpGB->RenderFile( reinterpret_cast<LPCWSTR>(rURL.getStr()), NULL ) ) &&
+ SUCCEEDED( hR = mpGB->QueryInterface( IID_IMediaControl, (void**) &mpMC ) ) &&
+ SUCCEEDED( hR = mpGB->QueryInterface( IID_IMediaEventEx, (void**) &mpME ) ) &&
+ SUCCEEDED( hR = mpGB->QueryInterface( IID_IMediaSeeking, (void**) &mpMS ) ) &&
+ SUCCEEDED( hR = mpGB->QueryInterface( IID_IMediaPosition, (void**) &mpMP ) ) )
+ {
+ // Video interfaces
+ mpGB->QueryInterface( IID_IVideoWindow, (void**) &mpVW );
+ mpGB->QueryInterface( IID_IBasicVideo, (void**) &mpBV );
+
+ // Audio interface
+ mpGB->QueryInterface( IID_IBasicAudio, (void**) &mpBA );
+
+ if( mpBA )
+ mpBA->put_Volume( mnUnmutedVolume );
+
+ bRet = true;
+ }
+ }
+
+ if( bRet )
+ maURL = rURL;
+ else
+ maURL = ::rtl::OUString();
+
+ return bRet;
+}
+
+// ------------------------------------------------------------------------------
+
+const IVideoWindow* Player::getVideoWindow() const
+{
+ return mpVW;
+}
+
+// ------------------------------------------------------------------------------
+
+void Player::setNotifyWnd( int nNotifyWnd )
+{
+ if( mpME )
+ mpME->SetNotifyWindow( (OAHWND) nNotifyWnd, WM_GRAPHNOTIFY, reinterpret_cast< LONG_PTR>( this ) );
+}
+
+// ------------------------------------------------------------------------------
+
+void Player::setDDrawParams( IDirectDraw* pDDraw, IDirectDrawSurface* pDDrawSurface )
+{
+ if( mpEV && pDDraw && pDDrawSurface )
+ {
+ mpEV->SetDDrawObject( pDDraw );
+ mpEV->SetDDrawSurface( pDDrawSurface );
+ }
+}
+
+// ------------------------------------------------------------------------------
+
+long Player::processEvent()
+{
+ long nCode, nParam1, nParam2;
+
+ if( mpME && SUCCEEDED( mpME->GetEvent( &nCode, &nParam1, &nParam2, 0 ) ) )
+ {
+ if( EC_COMPLETE == nCode )
+ {
+ if( mbLooping )
+ {
+ setMediaTime( 0.0 );
+ start();
+ }
+ else
+ {
+ setMediaTime( getDuration() );
+ stop();
+ }
+ }
+
+ mpME->FreeEventParams( nCode, nParam1, nParam2 );
+ }
+
+ return 0;
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Player::start( )
+ throw (uno::RuntimeException)
+{
+ if( mpMC )
+ mpMC->Run();
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Player::stop( )
+ throw (uno::RuntimeException)
+{
+ if( mpMC )
+ mpMC->Stop();
+}
+
+// ------------------------------------------------------------------------------
+
+sal_Bool SAL_CALL Player::isPlaying()
+ throw (uno::RuntimeException)
+{
+ OAFilterState eFilterState;
+ bool bRet = false;
+
+ if( mpMC && SUCCEEDED( mpMC->GetState( 10, &eFilterState ) ) )
+ bRet = ( State_Running == eFilterState );
+
+ return bRet;
+}
+
+// ------------------------------------------------------------------------------
+
+double SAL_CALL Player::getDuration( )
+ throw (uno::RuntimeException)
+{
+ REFTIME aRefTime( 0.0 );
+
+ if( mpMP )
+ mpMP->get_Duration( &aRefTime );
+
+ return aRefTime;
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Player::setMediaTime( double fTime )
+ throw (uno::RuntimeException)
+{
+ if( mpMP )
+ {
+ const bool bPlaying = isPlaying();
+
+ mpMP->put_CurrentPosition( fTime );
+
+ if( !bPlaying && mpMC )
+ mpMC->StopWhenReady();
+ }
+}
+
+// ------------------------------------------------------------------------------
+
+double SAL_CALL Player::getMediaTime( )
+ throw (uno::RuntimeException)
+{
+ REFTIME aRefTime( 0.0 );
+
+ if( mpMP )
+ mpMP->get_CurrentPosition( &aRefTime );
+
+ return aRefTime;
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Player::setStopTime( double fTime )
+ throw (uno::RuntimeException)
+{
+ if( mpMP )
+ mpMP->put_StopTime( fTime );
+}
+
+// ------------------------------------------------------------------------------
+
+double SAL_CALL Player::getStopTime( )
+ throw (uno::RuntimeException)
+{
+ REFTIME aRefTime( 0.0 );
+
+ if( mpMP )
+ mpMP->get_StopTime( &aRefTime );
+
+ return aRefTime;
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Player::setRate( double fRate )
+ throw (uno::RuntimeException)
+{
+ if( mpMP )
+ mpMP->put_Rate( fRate );
+}
+
+// ------------------------------------------------------------------------------
+
+double SAL_CALL Player::getRate( )
+ throw (uno::RuntimeException)
+{
+ double fRet( 0.0 );
+
+ if( mpMP )
+ mpMP->get_Rate( &fRet );
+
+ return fRet;
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Player::setPlaybackLoop( sal_Bool bSet )
+ throw (uno::RuntimeException)
+{
+ mbLooping = bSet;
+}
+
+// ------------------------------------------------------------------------------
+
+sal_Bool SAL_CALL Player::isPlaybackLoop( )
+ throw (uno::RuntimeException)
+{
+ return mbLooping;
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Player::setMute( sal_Bool bSet )
+ throw (uno::RuntimeException)
+{
+ if( mpBA && ( mbMuted != bSet ) )
+ {
+ mbMuted = bSet;
+ mpBA->put_Volume( mbMuted ? -10000 : mnUnmutedVolume );
+ }
+}
+
+// ------------------------------------------------------------------------------
+
+sal_Bool SAL_CALL Player::isMute( )
+ throw (uno::RuntimeException)
+{
+ return mbMuted;
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Player::setVolumeDB( sal_Int16 nVolumeDB )
+ throw (uno::RuntimeException)
+{
+ mnUnmutedVolume = static_cast< long >( nVolumeDB ) * 100;
+
+ if( !mbMuted && mpBA )
+ mpBA->put_Volume( mnUnmutedVolume );
+}
+
+// ------------------------------------------------------------------------------
+
+sal_Int16 SAL_CALL Player::getVolumeDB( )
+ throw (uno::RuntimeException)
+{
+ return( static_cast< sal_Int16 >( mnUnmutedVolume / 100 ) );
+}
+
+// ------------------------------------------------------------------------------
+
+awt::Size SAL_CALL Player::getPreferredPlayerWindowSize( )
+ throw (uno::RuntimeException)
+{
+ awt::Size aSize( 0, 0 );
+
+ if( mpBV )
+ {
+ long nWidth = 0, nHeight = 0;
+
+ mpBV->GetVideoSize( &nWidth, &nHeight );
+ aSize.Width = nWidth;
+ aSize.Height = nHeight;
+ }
+
+ return aSize;
+}
+
+// ------------------------------------------------------------------------------
+
+uno::Reference< ::media::XPlayerWindow > SAL_CALL Player::createPlayerWindow( const uno::Sequence< uno::Any >& aArguments )
+ throw (uno::RuntimeException)
+{
+ uno::Reference< ::media::XPlayerWindow > xRet;
+ awt::Size aSize( getPreferredPlayerWindowSize() );
+
+ if( mpVW && aSize.Width > 0 && aSize.Height > 0 )
+ {
+ ::avmedia::win::Window* pWindow = new ::avmedia::win::Window( mxMgr, *this );
+
+ xRet = pWindow;
+
+ if( !pWindow->create( aArguments ) )
+ xRet = uno::Reference< ::media::XPlayerWindow >();
+ }
+
+ return xRet;
+}
+
+// ------------------------------------------------------------------------------
+
+uno::Reference< media::XFrameGrabber > SAL_CALL Player::createFrameGrabber( )
+ throw (uno::RuntimeException)
+{
+ uno::Reference< media::XFrameGrabber > xRet;
+
+ if( maURL.getLength() > 0 )
+ {
+ FrameGrabber* pGrabber = new FrameGrabber( mxMgr );
+
+ xRet = pGrabber;
+
+ if( !pGrabber->create( maURL ) )
+ xRet.clear();
+ }
+
+ return xRet;
+}
+
+// ------------------------------------------------------------------------------
+
+::rtl::OUString SAL_CALL Player::getImplementationName( )
+ throw (uno::RuntimeException)
+{
+ return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( AVMEDIA_WIN_PLAYER_IMPLEMENTATIONNAME ) );
+}
+
+// ------------------------------------------------------------------------------
+
+sal_Bool SAL_CALL Player::supportsService( const ::rtl::OUString& ServiceName )
+ throw (uno::RuntimeException)
+{
+ return ServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM ( AVMEDIA_WIN_PLAYER_SERVICENAME ) );
+}
+
+// ------------------------------------------------------------------------------
+
+uno::Sequence< ::rtl::OUString > SAL_CALL Player::getSupportedServiceNames( )
+ throw (uno::RuntimeException)
+{
+ uno::Sequence< ::rtl::OUString > aRet(1);
+ aRet[0] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( AVMEDIA_WIN_PLAYER_SERVICENAME ) );
+
+ return aRet;
+}
+
+} // namespace win
+} // namespace avmedia
diff --git a/avmedia/source/win/player.hxx b/avmedia/source/win/player.hxx
new file mode 100644
index 000000000000..34a567750b74
--- /dev/null
+++ b/avmedia/source/win/player.hxx
@@ -0,0 +1,123 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _PLAYER_HXX
+#define _PLAYER_HXX
+
+#include "wincommon.hxx"
+
+#ifndef _COM_SUN_STAR_MEDIA_XPLAYER_HDL_
+#include "com/sun/star/media/XPlayer.hdl"
+#endif
+
+struct IGraphBuilder;
+struct IBaseFilter;
+struct IMediaControl;
+struct IMediaEventEx;
+struct IMediaSeeking;
+struct IMediaPosition;
+struct IBasicAudio;
+struct IBasicVideo;
+struct IVideoWindow;
+struct IDDrawExclModeVideo;
+struct IDirectDraw;
+struct IDirectDrawSurface;
+
+namespace avmedia { namespace win {
+
+// ----------
+// - Player -
+// ----------
+
+class Player : public ::cppu::WeakImplHelper2< ::com::sun::star::media::XPlayer,
+ ::com::sun::star::lang::XServiceInfo >
+{
+public:
+
+ Player( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& rxMgr );
+ ~Player();
+
+ bool create( const ::rtl::OUString& rURL );
+
+ void setNotifyWnd( int nNotifyWnd );
+ void setDDrawParams( IDirectDraw* pDDraw, IDirectDrawSurface* pDDrawSurface );
+ long processEvent();
+
+ const IVideoWindow* getVideoWindow() const;
+
+ // XPlayer
+ virtual void SAL_CALL start( ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL stop( ) throw (::com::sun::star::uno::RuntimeException);
+ virtual sal_Bool SAL_CALL isPlaying( ) throw (::com::sun::star::uno::RuntimeException);
+ virtual double SAL_CALL getDuration( ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL setMediaTime( double fTime ) throw (::com::sun::star::uno::RuntimeException);
+ virtual double SAL_CALL getMediaTime( ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL setStopTime( double fTime ) throw (::com::sun::star::uno::RuntimeException);
+ virtual double SAL_CALL getStopTime( ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL setRate( double fRate ) throw (::com::sun::star::uno::RuntimeException);
+ virtual double SAL_CALL getRate( ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL setPlaybackLoop( sal_Bool bSet ) throw (::com::sun::star::uno::RuntimeException);
+ virtual sal_Bool SAL_CALL isPlaybackLoop( ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL setMute( sal_Bool bSet ) throw (::com::sun::star::uno::RuntimeException);
+ virtual sal_Bool SAL_CALL isMute( ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL setVolumeDB( sal_Int16 nVolumeDB ) throw (::com::sun::star::uno::RuntimeException);
+ virtual sal_Int16 SAL_CALL getVolumeDB( ) throw (::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::awt::Size SAL_CALL getPreferredPlayerWindowSize( ) throw (::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::media::XPlayerWindow > SAL_CALL createPlayerWindow( const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& aArguments ) throw (::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::media::XFrameGrabber > SAL_CALL createFrameGrabber( ) throw (::com::sun::star::uno::RuntimeException);
+
+ // XServiceInfo
+ virtual ::rtl::OUString SAL_CALL getImplementationName( ) throw (::com::sun::star::uno::RuntimeException);
+ virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw (::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames( ) throw (::com::sun::star::uno::RuntimeException);
+
+private:
+
+ ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > mxMgr;
+
+ ::rtl::OUString maURL;
+ IGraphBuilder* mpGB;
+ IBaseFilter* mpOMF;
+ IMediaControl* mpMC;
+ IMediaEventEx* mpME;
+ IMediaSeeking* mpMS;
+ IMediaPosition* mpMP;
+ IBasicAudio* mpBA;
+ IBasicVideo* mpBV;
+ IVideoWindow* mpVW;
+ IDDrawExclModeVideo* mpEV;
+ long mnUnmutedVolume;
+ sal_Bool mbMuted;
+ sal_Bool mbLooping;
+
+ void ImplLayoutVideoWindow();
+};
+
+} // namespace win
+} // namespace avmedia
+
+#endif // _PLAYER_HXX
diff --git a/avmedia/source/win/wincommon.hxx b/avmedia/source/win/wincommon.hxx
new file mode 100644
index 000000000000..502f4300273a
--- /dev/null
+++ b/avmedia/source/win/wincommon.hxx
@@ -0,0 +1,56 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _WINCOMMON_HXX
+#define _WINCOMMON_HXX
+
+#include <osl/mutex.hxx>
+#include <rtl/ustring.hxx>
+#include <tools/debug.hxx>
+#include <tools/stream.hxx>
+#include <tools/string.hxx>
+#include <tools/urlobj.hxx>
+#include <cppuhelper/implbase1.hxx>
+#include <cppuhelper/implbase2.hxx>
+#include <cppuhelper/weak.hxx>
+#include <cppuhelper/factory.hxx>
+
+#include <com/sun/star/uno/Reference.h>
+#include <com/sun/star/uno/RuntimeException.hpp>
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+#include <com/sun/star/lang/XComponent.hpp>
+#include <com/sun/star/registry/XRegistryKey.hpp>
+#include <com/sun/star/lang/XComponent.hpp>
+#include <com/sun/star/lang/XServiceInfo.hpp>
+#include <com/sun/star/awt/Rectangle.hpp>
+#include <com/sun/star/awt/KeyModifier.hpp>
+#include <com/sun/star/awt/MouseButton.hpp>
+#include <com/sun/star/media/XManager.hpp>
+
+#define WM_GRAPHNOTIFY (WM_USER + 567)
+
+#endif // _WINCOMMOM_HXX
diff --git a/avmedia/source/win/window.cxx b/avmedia/source/win/window.cxx
new file mode 100644
index 000000000000..1170505b440b
--- /dev/null
+++ b/avmedia/source/win/window.cxx
@@ -0,0 +1,740 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <tools/prewin.h>
+#if defined _MSC_VER
+#pragma warning(push, 1)
+#pragma warning(disable: 4917)
+#endif
+#include <windows.h>
+#include <objbase.h>
+#include <strmif.h>
+#include <control.h>
+#include <dshow.h>
+#if defined _MSC_VER
+#pragma warning(pop)
+#endif
+#include <tools/postwin.h>
+#include <com/sun/star/awt/SystemPointer.hdl>
+
+#include "window.hxx"
+#include "player.hxx"
+
+#define AVMEDIA_WIN_WINDOW_IMPLEMENTATIONNAME "com.sun.star.comp.avmedia.Window_DirectX"
+#define AVMEDIA_WIN_WINDOW_SERVICENAME "com.sun.star.media.Window_DirectX"
+
+using namespace ::com::sun::star;
+
+namespace avmedia { namespace win {
+
+// -----------
+// - statics -
+// -----------
+
+static ::osl::Mutex& ImplGetOwnStaticMutex()
+{
+ static ::osl::Mutex* pMutex = NULL;
+
+ if( pMutex == NULL )
+ {
+ ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() );
+
+ if( pMutex == NULL )
+ {
+ static ::osl::Mutex aMutex;
+ pMutex = &aMutex;
+ }
+ }
+
+ return *pMutex;
+}
+
+// -----------
+// - WndProc -
+// -----------
+
+LRESULT CALLBACK MediaPlayerWndProc( HWND hWnd,UINT nMsg, WPARAM nPar1, LPARAM nPar2 )
+{
+ Window* pWindow = (Window*) ::GetWindowLong( hWnd, 0 );
+ bool bProcessed = true;
+
+ if( pWindow )
+ {
+ switch( nMsg )
+ {
+ case( WM_SETCURSOR ):
+ pWindow->updatePointer();
+ break;
+
+ case( WM_GRAPHNOTIFY ):
+ pWindow->processGraphEvent();
+ break;
+
+ case( WM_MOUSEMOVE ):
+ case( WM_LBUTTONDOWN ):
+ case( WM_MBUTTONDOWN ):
+ case( WM_RBUTTONDOWN ):
+ case( WM_LBUTTONUP ):
+ case( WM_MBUTTONUP ):
+ case( WM_RBUTTONUP ):
+ {
+ awt::MouseEvent aUNOEvt;
+ POINT aWinPoint;
+
+ if( !::GetCursorPos( &aWinPoint ) || !::ScreenToClient( hWnd, &aWinPoint ) )
+ {
+ aWinPoint.x = GET_X_LPARAM( nPar2 );
+ aWinPoint.y = GET_Y_LPARAM( nPar2 );
+ }
+ aUNOEvt.Modifiers = 0;
+ aUNOEvt.Buttons = 0;
+ aUNOEvt.X = aWinPoint.x;
+ aUNOEvt.Y = aWinPoint.y;
+ aUNOEvt.PopupTrigger = false;
+
+ // Modifiers
+ if( nPar1 & MK_SHIFT )
+ aUNOEvt.Modifiers |= awt::KeyModifier::SHIFT;
+
+ if( nPar1 & MK_CONTROL )
+ aUNOEvt.Modifiers |= awt::KeyModifier::MOD1;
+
+ // Buttons
+ if( WM_LBUTTONDOWN == nMsg || WM_LBUTTONUP == nMsg )
+ aUNOEvt.Buttons |= awt::MouseButton::LEFT;
+
+ if( WM_MBUTTONDOWN == nMsg || WM_MBUTTONUP == nMsg )
+ aUNOEvt.Buttons |= awt::MouseButton::MIDDLE;
+
+ if( WM_RBUTTONDOWN == nMsg || WM_RBUTTONUP == nMsg )
+ aUNOEvt.Buttons |= awt::MouseButton::RIGHT;
+
+ // event type
+ if( WM_LBUTTONDOWN == nMsg ||
+ WM_MBUTTONDOWN == nMsg ||
+ WM_RBUTTONDOWN == nMsg )
+ {
+ aUNOEvt.ClickCount = 1;
+ pWindow->fireMousePressedEvent( aUNOEvt );
+ }
+ else if( WM_LBUTTONUP == nMsg ||
+ WM_MBUTTONUP == nMsg ||
+ WM_RBUTTONUP == nMsg )
+ {
+ aUNOEvt.ClickCount = 1;
+ pWindow->fireMouseReleasedEvent( aUNOEvt );
+ }
+ else if( WM_MOUSEMOVE == nMsg )
+ {
+ aUNOEvt.ClickCount = 0;
+ pWindow->fireMouseMovedEvent( aUNOEvt );
+ pWindow->updatePointer();
+ }
+ }
+ break;
+
+ case( WM_SETFOCUS ):
+ {
+ const awt::FocusEvent aUNOEvt;
+ pWindow->fireSetFocusEvent( aUNOEvt );
+ }
+ break;
+
+ default:
+ bProcessed = false;
+ break;
+ }
+ }
+ else
+ bProcessed = false;
+
+ return( bProcessed ? 0 : DefWindowProc( hWnd, nMsg, nPar1, nPar2 ) );
+}
+
+// ---------------
+// - Window -
+// ---------------
+
+WNDCLASS* Window::mpWndClass = NULL;
+
+// ------------------------------------------------------------------------------
+
+Window::Window( const uno::Reference< lang::XMultiServiceFactory >& rxMgr, Player& rPlayer ) :
+ mxMgr( rxMgr ),
+ mrPlayer( rPlayer ),
+ meZoomLevel( media::ZoomLevel_NOT_AVAILABLE ),
+ mnParentWnd( 0 ),
+ mnFrameWnd( 0 ),
+ maListeners( maMutex ),
+ mnPointerType( awt::SystemPointer::ARROW )
+{
+ ::osl::MutexGuard aGuard( ImplGetOwnStaticMutex() );
+
+ if( !mpWndClass )
+ {
+ mpWndClass = new WNDCLASS;
+
+ memset( mpWndClass, 0, sizeof( *mpWndClass ) );
+ mpWndClass->hInstance = GetModuleHandle( NULL );
+ mpWndClass->cbWndExtra = sizeof( DWORD );
+ mpWndClass->lpfnWndProc = MediaPlayerWndProc;
+ mpWndClass->lpszClassName = "com_sun_star_media_PlayerWnd";
+ mpWndClass->hbrBackground = (HBRUSH) ::GetStockObject( BLACK_BRUSH );
+ mpWndClass->hCursor = ::LoadCursor( NULL, IDC_ARROW );
+
+ ::RegisterClass( mpWndClass );
+ }
+}
+
+// ------------------------------------------------------------------------------
+
+Window::~Window()
+{
+ if( mnFrameWnd )
+ ::DestroyWindow( (HWND) mnFrameWnd );
+}
+
+// ------------------------------------------------------------------------------
+
+void Window::ImplLayoutVideoWindow()
+{
+ if( media::ZoomLevel_NOT_AVAILABLE != meZoomLevel )
+ {
+ awt::Size aPrefSize( mrPlayer.getPreferredPlayerWindowSize() );
+ awt::Rectangle aRect = getPosSize();
+ int nW = aRect.Width, nH = aRect.Height;
+ int nVideoW = nW, nVideoH = nH;
+ int nX = 0, nY = 0, nWidth = 0, nHeight = 0;
+ bool bDone = false, bZoom = false;
+
+ if( media::ZoomLevel_ORIGINAL == meZoomLevel )
+ {
+ bZoom = true;
+ }
+ else if( media::ZoomLevel_ZOOM_1_TO_4 == meZoomLevel )
+ {
+ aPrefSize.Width >>= 2;
+ aPrefSize.Height >>= 2;
+ bZoom = true;
+ }
+ else if( media::ZoomLevel_ZOOM_1_TO_2 == meZoomLevel )
+ {
+ aPrefSize.Width >>= 1;
+ aPrefSize.Height >>= 1;
+ bZoom = true;
+ }
+ else if( media::ZoomLevel_ZOOM_2_TO_1 == meZoomLevel )
+ {
+ aPrefSize.Width <<= 1;
+ aPrefSize.Height <<= 1;
+ bZoom = true;
+ }
+ else if( media::ZoomLevel_ZOOM_4_TO_1 == meZoomLevel )
+ {
+ aPrefSize.Width <<= 2;
+ aPrefSize.Height <<= 2;
+ bZoom = true;
+ }
+ else if( media::ZoomLevel_FIT_TO_WINDOW == meZoomLevel )
+ {
+ nWidth = nVideoW;
+ nHeight = nVideoH;
+ bDone = true;
+ }
+
+ if( bZoom )
+ {
+ if( ( aPrefSize.Width <= nVideoW ) && ( aPrefSize.Height <= nVideoH ) )
+ {
+ nX = ( nVideoW - aPrefSize.Width ) >> 1;
+ nY = ( nVideoH - aPrefSize.Height ) >> 1;
+ nWidth = aPrefSize.Width;
+ nHeight = aPrefSize.Height;
+ bDone = true;
+ }
+ }
+
+ if( !bDone )
+ {
+ if( aPrefSize.Width > 0 && aPrefSize.Height > 0 && nVideoW > 0 && nVideoH > 0 )
+ {
+ double fPrefWH = (double) aPrefSize.Width / aPrefSize.Height;
+
+ if( fPrefWH < ( (double) nVideoW / nVideoH ) )
+ nVideoW = (int)( nVideoH * fPrefWH );
+ else
+ nVideoH = (int)( nVideoW / fPrefWH );
+
+ nX = ( nW - nVideoW ) >> 1;
+ nY = ( nH - nVideoH ) >> 1;
+ nWidth = nVideoW;
+ nHeight = nVideoH;
+ }
+ else
+ nX = nY = nWidth = nHeight = 0;
+ }
+
+ IVideoWindow* pVideoWindow = const_cast< IVideoWindow* >( mrPlayer.getVideoWindow() );
+
+ if( pVideoWindow )
+ pVideoWindow->SetWindowPosition( nX, nY, nWidth, nHeight );
+ }
+}
+
+// ------------------------------------------------------------------------------
+
+bool Window::create( const uno::Sequence< uno::Any >& rArguments )
+{
+ IVideoWindow* pVideoWindow = const_cast< IVideoWindow* >( mrPlayer.getVideoWindow() );
+
+ if( !mnFrameWnd && pVideoWindow && mpWndClass )
+ {
+ awt::Rectangle aRect;
+ sal_IntPtr nWnd;
+
+ rArguments[ 0 ] >>= nWnd;
+ rArguments[ 1 ] >>= aRect;
+
+ mnParentWnd = static_cast<int>(nWnd);
+
+ mnFrameWnd = (int) ::CreateWindow( mpWndClass->lpszClassName, NULL,
+ WS_VISIBLE | WS_CHILD | WS_CLIPSIBLINGS | WS_CLIPCHILDREN,
+ aRect.X, aRect.Y, aRect.Width, aRect.Height,
+ (HWND) mnParentWnd, NULL, mpWndClass->hInstance, 0 );
+
+ // if the last CreateWindow failed...
+ if( mnFrameWnd == 0 )
+ {
+ // try again and this time assume that mnParent is indeed a dc
+ mnParentWnd = reinterpret_cast<int>(::WindowFromDC( (HDC)mnParentWnd ));
+ mnFrameWnd = (int) ::CreateWindow( mpWndClass->lpszClassName, NULL,
+ WS_VISIBLE | WS_CHILD | WS_CLIPSIBLINGS | WS_CLIPCHILDREN,
+ aRect.X, aRect.Y, aRect.Width, aRect.Height,
+ (HWND)mnParentWnd , NULL, mpWndClass->hInstance, 0 );
+ }
+
+ if( mnFrameWnd )
+ {
+ ::SetWindowLong( (HWND) mnFrameWnd, 0, (DWORD) this );
+
+#ifdef DDRAW_TEST_OUTPUT
+ IDirectDraw7* pDDraw;
+ IDirectDrawSurface7* pDDSurface;
+ IDirectDrawClipper* pDDClipper;
+
+ if( DD_OK == DirectDrawCreateEx( NULL, (void**) &pDDraw, IID_IDirectDraw7, NULL ) )
+ {
+ if( DD_OK == pDDraw->SetCooperativeLevel( (HWND) mnParentWnd, DDSCL_NORMAL ) )
+ {
+ DDSURFACEDESC2 aDDDesc;
+
+ memset( &aDDDesc, 0, sizeof( aDDDesc ) );
+ aDDDesc.dwSize = sizeof( aDDDesc );
+ aDDDesc.dwFlags = DDSD_CAPS;
+ aDDDesc.ddsCaps.dwCaps |= DDSCAPS_PRIMARYSURFACE;
+
+ if( DD_OK == pDDraw->CreateSurface( &aDDDesc, &pDDSurface, NULL ) )
+ {
+ if( DD_OK == pDDraw->CreateClipper( 0, &pDDClipper, NULL ) )
+ {
+ pDDClipper->SetHWnd( 0, (HWND) mnFrameWnd );
+ pDDSurface->SetClipper( pDDClipper );
+ }
+
+ mrPlayer.setDDrawParams( (IDirectDraw*) pDDraw, (IDirectDrawSurface*) pDDSurface );
+#endif
+
+ pVideoWindow->put_Owner( (OAHWND) mnFrameWnd );
+ pVideoWindow->put_MessageDrain( (OAHWND) mnFrameWnd );
+ pVideoWindow->put_WindowStyle( WS_VISIBLE | WS_CHILD | WS_CLIPSIBLINGS | WS_CLIPCHILDREN );
+
+ mrPlayer.setNotifyWnd( mnFrameWnd );
+
+ meZoomLevel = media::ZoomLevel_ORIGINAL;
+ ImplLayoutVideoWindow();
+#ifdef DDRAW_TEST_OUTPUT
+ }
+ }
+ }
+#endif
+ }
+ }
+
+ return( mnFrameWnd != 0 );
+}
+
+// ------------------------------------------------------------------------------
+
+void Window::processGraphEvent()
+{
+ mrPlayer.processEvent();
+}
+
+// ------------------------------------------------------------------------------
+
+void Window::updatePointer()
+{
+ char* pCursorName;
+
+ switch( mnPointerType )
+ {
+ case( awt::SystemPointer::CROSS ): pCursorName = IDC_CROSS; break;
+ //case( awt::SystemPointer::HAND ): pCursorName = IDC_HAND; break;
+ case( awt::SystemPointer::MOVE ): pCursorName = IDC_SIZEALL; break;
+ case( awt::SystemPointer::WAIT ): pCursorName = IDC_WAIT; break;
+
+ default:
+ pCursorName = IDC_ARROW;
+ break;
+ }
+
+ ::SetCursor( ::LoadCursor( NULL, pCursorName ) );
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Window::update( )
+ throw (uno::RuntimeException)
+{
+ ::RedrawWindow( (HWND) mnFrameWnd, NULL, NULL, RDW_ALLCHILDREN | RDW_INVALIDATE | RDW_UPDATENOW | RDW_ERASE );
+}
+
+// ------------------------------------------------------------------------------
+
+sal_Bool SAL_CALL Window::setZoomLevel( media::ZoomLevel eZoomLevel )
+ throw (uno::RuntimeException)
+{
+ boolean bRet = false;
+
+ if( media::ZoomLevel_NOT_AVAILABLE != meZoomLevel &&
+ media::ZoomLevel_NOT_AVAILABLE != eZoomLevel )
+ {
+ if( eZoomLevel != meZoomLevel )
+ {
+ meZoomLevel = eZoomLevel;
+ ImplLayoutVideoWindow();
+ }
+
+ bRet = true;
+ }
+
+ return bRet;
+}
+
+// ------------------------------------------------------------------------------
+
+media::ZoomLevel SAL_CALL Window::getZoomLevel( )
+ throw (uno::RuntimeException)
+{
+ return meZoomLevel;
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Window::setPointerType( sal_Int32 nPointerType )
+ throw (uno::RuntimeException)
+{
+ mnPointerType = nPointerType;
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Window::setPosSize( sal_Int32 X, sal_Int32 Y, sal_Int32 Width, sal_Int32 Height, sal_Int16 )
+ throw (uno::RuntimeException)
+{
+ if( mnFrameWnd )
+ {
+ ::SetWindowPos( (HWND) mnFrameWnd, HWND_TOP, X, Y, Width, Height, 0 );
+ ImplLayoutVideoWindow();
+ }
+}
+
+// ------------------------------------------------------------------------------
+
+awt::Rectangle SAL_CALL Window::getPosSize()
+ throw (uno::RuntimeException)
+{
+ awt::Rectangle aRet;
+
+ if( mnFrameWnd )
+ {
+ ::RECT aWndRect;
+
+ if( ::GetClientRect( (HWND) mnFrameWnd, &aWndRect ) )
+ {
+ aRet.X = aWndRect.left;
+ aRet.Y = aWndRect.top;
+ aRet.Width = aWndRect.right - aWndRect.left + 1;
+ aRet.Height = aWndRect.bottom - aWndRect.top + 1;
+ }
+ }
+
+ return aRet;
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Window::setVisible( sal_Bool bVisible )
+ throw (uno::RuntimeException)
+{
+ if( mnFrameWnd )
+ {
+ IVideoWindow* pVideoWindow = const_cast< IVideoWindow* >( mrPlayer.getVideoWindow() );
+
+ if( pVideoWindow )
+ pVideoWindow->put_Visible( bVisible ? OATRUE : OAFALSE );
+
+ ::ShowWindow( (HWND) mnFrameWnd, bVisible ? SW_SHOW : SW_HIDE );
+ }
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Window::setEnable( sal_Bool bEnable )
+ throw (uno::RuntimeException)
+{
+ if( mnFrameWnd )
+ ::EnableWindow( (HWND) mnFrameWnd, bEnable );
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Window::setFocus( )
+ throw (uno::RuntimeException)
+{
+ if( mnFrameWnd )
+ ::SetFocus( (HWND) mnFrameWnd );
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Window::addWindowListener( const uno::Reference< awt::XWindowListener >& xListener )
+ throw (uno::RuntimeException)
+{
+ maListeners.addInterface( getCppuType( &xListener ), xListener );
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Window::removeWindowListener( const uno::Reference< awt::XWindowListener >& xListener )
+ throw (uno::RuntimeException)
+{
+ maListeners.removeInterface( getCppuType( &xListener ), xListener );
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Window::addFocusListener( const uno::Reference< awt::XFocusListener >& xListener )
+ throw (uno::RuntimeException)
+{
+ maListeners.addInterface( getCppuType( &xListener ), xListener );
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Window::removeFocusListener( const uno::Reference< awt::XFocusListener >& xListener )
+ throw (uno::RuntimeException)
+{
+ maListeners.removeInterface( getCppuType( &xListener ), xListener );
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Window::addKeyListener( const uno::Reference< awt::XKeyListener >& xListener )
+ throw (uno::RuntimeException)
+{
+ maListeners.addInterface( getCppuType( &xListener ), xListener );
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Window::removeKeyListener( const uno::Reference< awt::XKeyListener >& xListener )
+ throw (uno::RuntimeException)
+{
+ maListeners.removeInterface( getCppuType( &xListener ), xListener );
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Window::addMouseListener( const uno::Reference< awt::XMouseListener >& xListener )
+ throw (uno::RuntimeException)
+{
+ maListeners.addInterface( getCppuType( &xListener ), xListener );
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Window::removeMouseListener( const uno::Reference< awt::XMouseListener >& xListener )
+ throw (uno::RuntimeException)
+{
+ maListeners.removeInterface( getCppuType( &xListener ), xListener );
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Window::addMouseMotionListener( const uno::Reference< awt::XMouseMotionListener >& xListener )
+ throw (uno::RuntimeException)
+{
+ maListeners.addInterface( getCppuType( &xListener ), xListener );
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Window::removeMouseMotionListener( const uno::Reference< awt::XMouseMotionListener >& xListener )
+ throw (uno::RuntimeException)
+{
+ maListeners.removeInterface( getCppuType( &xListener ), xListener );
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Window::addPaintListener( const uno::Reference< awt::XPaintListener >& xListener )
+ throw (uno::RuntimeException)
+{
+ maListeners.addInterface( getCppuType( &xListener ), xListener );
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Window::removePaintListener( const uno::Reference< awt::XPaintListener >& xListener )
+ throw (uno::RuntimeException)
+{
+ maListeners.removeInterface( getCppuType( &xListener ), xListener );
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Window::dispose( )
+ throw (uno::RuntimeException)
+{
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Window::addEventListener( const uno::Reference< lang::XEventListener >& xListener )
+ throw (uno::RuntimeException)
+{
+ maListeners.addInterface( getCppuType( &xListener ), xListener );
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Window::removeEventListener( const uno::Reference< lang::XEventListener >& xListener )
+ throw (uno::RuntimeException)
+{
+ maListeners.removeInterface( getCppuType( &xListener ), xListener );
+}
+
+// ------------------------------------------------------------------------------
+
+void Window::fireMousePressedEvent( const ::com::sun::star::awt::MouseEvent& rEvt )
+{
+ ::cppu::OInterfaceContainerHelper* pContainer = maListeners.getContainer( getCppuType( (uno::Reference< awt::XMouseListener >*) 0 ) );
+
+ if( pContainer )
+ {
+ ::cppu::OInterfaceIteratorHelper aIter( *pContainer );
+
+ while( aIter.hasMoreElements() )
+ uno::Reference< awt::XMouseListener >( aIter.next(), uno::UNO_QUERY )->mousePressed( rEvt );
+ }
+}
+
+// -----------------------------------------------------------------------------
+
+void Window::fireMouseReleasedEvent( const ::com::sun::star::awt::MouseEvent& rEvt )
+{
+ ::cppu::OInterfaceContainerHelper* pContainer = maListeners.getContainer( getCppuType( (uno::Reference< awt::XMouseListener >*) 0 ) );
+
+ if( pContainer )
+ {
+ ::cppu::OInterfaceIteratorHelper aIter( *pContainer );
+
+ while( aIter.hasMoreElements() )
+ uno::Reference< awt::XMouseListener >( aIter.next(), uno::UNO_QUERY )->mouseReleased( rEvt );
+ }
+}
+
+// -----------------------------------------------------------------------------
+
+void Window::fireMouseMovedEvent( const ::com::sun::star::awt::MouseEvent& rEvt )
+{
+ ::cppu::OInterfaceContainerHelper* pContainer = maListeners.getContainer( getCppuType( (uno::Reference< awt::XMouseMotionListener >*) 0 ) );
+
+ if( pContainer )
+ {
+ ::cppu::OInterfaceIteratorHelper aIter( *pContainer );
+
+ while( aIter.hasMoreElements() )
+ uno::Reference< awt::XMouseMotionListener >( aIter.next(), uno::UNO_QUERY )->mouseMoved( rEvt );
+ }
+}
+
+// -----------------------------------------------------------------------------
+
+void Window::fireSetFocusEvent( const ::com::sun::star::awt::FocusEvent& rEvt )
+{
+ ::cppu::OInterfaceContainerHelper* pContainer = maListeners.getContainer( getCppuType( (uno::Reference< awt::XFocusListener >*) 0 ) );
+
+ if( pContainer )
+ {
+ ::cppu::OInterfaceIteratorHelper aIter( *pContainer );
+
+ while( aIter.hasMoreElements() )
+ uno::Reference< awt::XFocusListener >( aIter.next(), uno::UNO_QUERY )->focusGained( rEvt );
+ }
+}
+
+// ------------------------------------------------------------------------------
+
+::rtl::OUString SAL_CALL Window::getImplementationName( )
+ throw (uno::RuntimeException)
+{
+ return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( AVMEDIA_WIN_WINDOW_IMPLEMENTATIONNAME ) );
+}
+
+// ------------------------------------------------------------------------------
+
+sal_Bool SAL_CALL Window::supportsService( const ::rtl::OUString& ServiceName )
+ throw (uno::RuntimeException)
+{
+ return ServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM ( AVMEDIA_WIN_WINDOW_SERVICENAME ) );
+}
+
+// ------------------------------------------------------------------------------
+
+uno::Sequence< ::rtl::OUString > SAL_CALL Window::getSupportedServiceNames( )
+ throw (uno::RuntimeException)
+{
+ uno::Sequence< ::rtl::OUString > aRet(1);
+ aRet[0] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( AVMEDIA_WIN_WINDOW_SERVICENAME ) );
+
+ return aRet;
+}
+
+} // namespace win
+} // namespace avmedia
diff --git a/avmedia/source/win/window.hxx b/avmedia/source/win/window.hxx
new file mode 100644
index 000000000000..36cff49a742a
--- /dev/null
+++ b/avmedia/source/win/window.hxx
@@ -0,0 +1,125 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _WINDOW_HXX
+#define _WINDOW_HXX
+
+#include "wincommon.hxx"
+#include <cppuhelper/interfacecontainer.h>
+
+#ifndef _COM_SUN_STAR_MEDIA_XPLAYERWINDOW_HDL_
+#include "com/sun/star/media/XPlayerWindow.hdl"
+#endif
+
+struct IVideoWindow;
+
+namespace avmedia { namespace win {
+
+// ---------------
+// - Window -
+// ---------------
+
+class Player;
+
+class Window : public ::cppu::WeakImplHelper2 < ::com::sun::star::media::XPlayerWindow,
+ ::com::sun::star::lang::XServiceInfo >
+{
+public:
+
+ Window( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& rxMgr,
+ Player& rPlayer );
+ ~Window();
+
+ bool create( const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& aArguments );
+ void processGraphEvent();
+ void updatePointer();
+
+ // XPlayerWindow
+ virtual void SAL_CALL update( ) throw (::com::sun::star::uno::RuntimeException);
+ virtual sal_Bool SAL_CALL setZoomLevel( ::com::sun::star::media::ZoomLevel ZoomLevel ) throw (::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::media::ZoomLevel SAL_CALL getZoomLevel( ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL setPointerType( sal_Int32 nPointerType ) throw (::com::sun::star::uno::RuntimeException);
+
+ // XWindow
+ virtual void SAL_CALL setPosSize( sal_Int32 X, sal_Int32 Y, sal_Int32 Width, sal_Int32 Height, sal_Int16 Flags ) throw (::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::awt::Rectangle SAL_CALL getPosSize( ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL setVisible( sal_Bool Visible ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL setEnable( sal_Bool Enable ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL setFocus( ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL addWindowListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL removeWindowListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL addFocusListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XFocusListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL removeFocusListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XFocusListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL addKeyListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XKeyListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL removeKeyListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XKeyListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL addMouseListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMouseListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL removeMouseListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMouseListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL addMouseMotionListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMouseMotionListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL removeMouseMotionListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMouseMotionListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL addPaintListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XPaintListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL removePaintListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XPaintListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
+
+ // XComponent
+ virtual void SAL_CALL dispose( ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL addEventListener( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL removeEventListener( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener >& aListener ) throw (::com::sun::star::uno::RuntimeException);
+
+ // XServiceInfo
+ virtual ::rtl::OUString SAL_CALL getImplementationName( ) throw (::com::sun::star::uno::RuntimeException);
+ virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw (::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames( ) throw (::com::sun::star::uno::RuntimeException);
+
+public:
+
+ void fireMousePressedEvent( const ::com::sun::star::awt::MouseEvent& rEvt );
+ void fireMouseReleasedEvent( const ::com::sun::star::awt::MouseEvent& rEvt );
+ void fireMouseMovedEvent( const ::com::sun::star::awt::MouseEvent& rEvt );
+ void fireKeyPressedEvent( const ::com::sun::star::awt::KeyEvent& rEvt );
+ void fireKeyReleasedEvent( const ::com::sun::star::awt::KeyEvent& rEvt );
+ void fireSetFocusEvent( const ::com::sun::star::awt::FocusEvent& rEvt );
+
+private:
+
+ ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > mxMgr;
+
+ ::osl::Mutex maMutex;
+ ::cppu::OMultiTypeInterfaceContainerHelper maListeners;
+ ::com::sun::star::media::ZoomLevel meZoomLevel;
+ Player& mrPlayer;
+ int mnFrameWnd;
+ int mnParentWnd;
+ int mnPointerType;
+
+ static WNDCLASS* mpWndClass;
+
+ void ImplLayoutVideoWindow();
+};
+
+} // namespace win
+} // namespace avmedia
+
+#endif // _WINDOW_HXX
diff --git a/avmedia/source/win/winuno.cxx b/avmedia/source/win/winuno.cxx
new file mode 100644
index 000000000000..4b06fd10727f
--- /dev/null
+++ b/avmedia/source/win/winuno.cxx
@@ -0,0 +1,104 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "wincommon.hxx"
+#include "manager.hxx"
+
+using namespace ::com::sun::star;
+
+// -------------------
+// - factory methods -
+// -------------------
+
+static uno::Reference< uno::XInterface > SAL_CALL create_MediaPlayer( const uno::Reference< lang::XMultiServiceFactory >& rxFact )
+{
+ return uno::Reference< uno::XInterface >( *new ::avmedia::win::Manager( rxFact ) );
+}
+
+// ------------------------------------------
+// - component_getImplementationEnvironment -
+// ------------------------------------------
+
+extern "C" void SAL_CALL component_getImplementationEnvironment( const sal_Char ** ppEnvTypeName, uno_Environment ** )
+{
+ *ppEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME;
+}
+
+// -----------------------
+// - component_writeInfo -
+// -----------------------
+
+extern "C" sal_Bool SAL_CALL component_writeInfo( void*, void* pRegistryKey )
+{
+ sal_Bool bRet = sal_False;
+
+ if( pRegistryKey )
+ {
+ try
+ {
+ uno::Reference< registry::XRegistryKey > xNewKey1(
+ static_cast< registry::XRegistryKey* >( pRegistryKey )->createKey(
+ ::rtl::OUString::createFromAscii( "/com.sun.star.comp.media.Manager_DirectX/UNO/SERVICES/com.sun.star.media.Manager_DirectX" ) ) );
+
+ bRet = sal_True;
+ }
+ catch( registry::InvalidRegistryException& )
+ {
+ OSL_ENSURE( sal_False, "### InvalidRegistryException!" );
+ }
+ }
+
+ return bRet;
+}
+
+// ------------------------
+// - component_getFactory -
+// ------------------------
+
+extern "C" void* SAL_CALL component_getFactory( const sal_Char* pImplName, void* pServiceManager, void* )
+{
+ uno::Reference< lang::XSingleServiceFactory > xFactory;
+ void* pRet = 0;
+
+ if( rtl_str_compare( pImplName, "com.sun.star.comp.media.Manager_DirectX" ) == 0 )
+ {
+ const ::rtl::OUString aServiceName( ::rtl::OUString::createFromAscii( "com.sun.star.media.Manager_DirectX" ) );
+
+ xFactory = uno::Reference< lang::XSingleServiceFactory >( ::cppu::createSingleFactory(
+ reinterpret_cast< lang::XMultiServiceFactory* >( pServiceManager ),
+ ::rtl::OUString::createFromAscii( "com.sun.star.comp.media.Manager_DirectX" ),
+ create_MediaPlayer, uno::Sequence< ::rtl::OUString >( &aServiceName, 1 ) ) );
+ }
+
+ if( xFactory.is() )
+ {
+ xFactory->acquire();
+ pRet = xFactory.get();
+ }
+
+ return pRet;
+}
diff --git a/avmedia/source/xine/exports.dxp b/avmedia/source/xine/exports.dxp
new file mode 100644
index 000000000000..db9c0a52f288
--- /dev/null
+++ b/avmedia/source/xine/exports.dxp
@@ -0,0 +1,4 @@
+component_getImplementationEnvironment
+component_writeInfo
+component_getFactory
+
diff --git a/avmedia/source/xine/makefile.mk b/avmedia/source/xine/makefile.mk
new file mode 100644
index 000000000000..3ba341c0d32b
--- /dev/null
+++ b/avmedia/source/xine/makefile.mk
@@ -0,0 +1,64 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..$/..
+PRJNAME=avmediaxine
+TARGET=avmediaxine
+
+# --- Settings ----------------------------------
+
+.INCLUDE : settings.mk
+
+.IF "$(verbose)"!="" || "$(VERBOSE)"!=""
+CDEFS+= -DVERBOSE
+.ENDIF
+
+# --- Files ----------------------------------
+
+.IF "$(GUI)" == "UNX" && "$(GUIBASE)"!="aqua"
+
+SLOFILES= \
+ $(SLO)$/xineuno.obj \
+ $(SLO)$/manager.obj \
+ $(SLO)$/window.obj \
+ $(SLO)$/player.obj
+
+EXCEPTIONSFILES= \
+ $(SLO)$/xineuno.obj
+
+SHL1TARGET=$(TARGET)
+SHL1STDLIBS= $(CPPULIB) $(SALLIB) $(COMPHELPERLIB) $(CPPUHELPERLIB)
+SHL1IMPLIB=i$(TARGET)
+SHL1LIBS=$(SLB)$/$(TARGET).lib
+SHL1DEF=$(MISC)$/$(SHL1TARGET).def
+
+DEF1NAME=$(SHL1TARGET)
+DEF1EXPORTFILE=exports.dxp
+
+.ENDIF
+
+.INCLUDE : target.mk
diff --git a/avmedia/source/xine/manager.cxx b/avmedia/source/xine/manager.cxx
new file mode 100644
index 000000000000..8fa1f27129b9
--- /dev/null
+++ b/avmedia/source/xine/manager.cxx
@@ -0,0 +1,91 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "manager.hxx"
+#include "player.hxx"
+
+using namespace ::com::sun::star;
+
+namespace avmedia { namespace xine {
+// ----------------
+// - Manager -
+// ----------------
+
+Manager::Manager( const uno::Reference< lang::XMultiServiceFactory >& rxMgr ) :
+ mxMgr( rxMgr )
+{
+}
+
+// ------------------------------------------------------------------------------
+
+Manager::~Manager()
+{
+}
+
+// ------------------------------------------------------------------------------
+
+uno::Reference< media::XPlayer > SAL_CALL Manager::createPlayer( const ::rtl::OUString& aURL )
+ throw (uno::RuntimeException)
+{
+ Player* pPlayer( new Player );
+ uno::Reference< media::XPlayer > xRet( pPlayer );
+
+ if( !pPlayer->create( aURL ) )
+ xRet = uno::Reference< media::XPlayer >();
+
+ return xRet;
+}
+
+// ------------------------------------------------------------------------------
+
+::rtl::OUString SAL_CALL Manager::getImplementationName( )
+ throw (uno::RuntimeException)
+{
+ return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( AVMEDIA_XINE_MANAGER_IMPLEMENTATIONNAME ) );
+}
+
+// ------------------------------------------------------------------------------
+
+sal_Bool SAL_CALL Manager::supportsService( const ::rtl::OUString& ServiceName )
+ throw (uno::RuntimeException)
+{
+ return ServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM ( AVMEDIA_XINE_MANAGER_SERVICENAME ) );
+}
+
+// ------------------------------------------------------------------------------
+
+uno::Sequence< ::rtl::OUString > SAL_CALL Manager::getSupportedServiceNames( )
+ throw (uno::RuntimeException)
+{
+ uno::Sequence< ::rtl::OUString > aRet(1);
+ aRet[0] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( AVMEDIA_XINE_MANAGER_SERVICENAME ) );
+
+ return aRet;
+}
+
+} // namespace xine
+} // namespace avmedia
diff --git a/avmedia/source/xine/manager.hxx b/avmedia/source/xine/manager.hxx
new file mode 100644
index 000000000000..b8faf2774f73
--- /dev/null
+++ b/avmedia/source/xine/manager.hxx
@@ -0,0 +1,66 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _MANAGER_HXX
+#define _MANAGER_HXX
+
+#include "xinecommon.hxx"
+
+#ifndef _COM_SUN_STAR_MEDIA_XMANAGER_HDL_
+#include "com/sun/star/media/XManager.hdl"
+#endif
+
+// -----------
+// - Manager -
+// -----------
+
+namespace avmedia { namespace xine {
+
+class Manager : public ::cppu::WeakImplHelper2 < ::com::sun::star::media::XManager,
+ ::com::sun::star::lang::XServiceInfo >
+{
+public:
+
+ Manager( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& rxMgr );
+ ~Manager();
+
+ // XManager
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::media::XPlayer > SAL_CALL createPlayer( const ::rtl::OUString& aURL ) throw (::com::sun::star::uno::RuntimeException);
+
+ // XServiceInfo
+ virtual ::rtl::OUString SAL_CALL getImplementationName( ) throw (::com::sun::star::uno::RuntimeException);
+ virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw (::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames( ) throw (::com::sun::star::uno::RuntimeException);
+private:
+
+ ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > mxMgr;
+};
+
+} // namespace xine
+} // namespace avmedia
+
+#endif // _MANAGER_HXX
diff --git a/avmedia/source/xine/player.cxx b/avmedia/source/xine/player.cxx
new file mode 100644
index 000000000000..e343bf2c0dcf
--- /dev/null
+++ b/avmedia/source/xine/player.cxx
@@ -0,0 +1,262 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "player.hxx"
+#include "window.hxx"
+
+using namespace ::com::sun::star;
+
+namespace avmedia { namespace xine {
+
+// ----------------
+// - Player -
+// ----------------
+
+Player::Player()
+{
+}
+
+// ------------------------------------------------------------------------------
+
+Player::~Player()
+{
+}
+
+// ------------------------------------------------------------------------------
+
+bool Player::create( const ::rtl::OUString& /* rURL */ )
+{
+ bool bRet = false;
+
+
+ return bRet;
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Player::start( )
+ throw (uno::RuntimeException)
+{
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Player::stop( )
+ throw (uno::RuntimeException)
+{
+}
+
+// ------------------------------------------------------------------------------
+
+sal_Bool SAL_CALL Player::isPlaying()
+ throw (uno::RuntimeException)
+{
+ bool bRet = false;
+
+ return bRet;
+}
+
+// ------------------------------------------------------------------------------
+
+double SAL_CALL Player::getDuration( )
+ throw (uno::RuntimeException)
+{
+ double fRet = 0.0;
+
+ return fRet;
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Player::setMediaTime( double /* fTime */ )
+ throw (uno::RuntimeException)
+{
+}
+
+// ------------------------------------------------------------------------------
+
+double SAL_CALL Player::getMediaTime( )
+ throw (uno::RuntimeException)
+{
+ double fRet = 0.0;
+
+ return fRet;
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Player::setStopTime( double /* fTime */ )
+ throw (uno::RuntimeException)
+{
+}
+
+// ------------------------------------------------------------------------------
+
+double SAL_CALL Player::getStopTime( )
+ throw (uno::RuntimeException)
+{
+ double fRet = 0.0;
+
+ return fRet;
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Player::setRate( double /* fRate */ )
+ throw (uno::RuntimeException)
+{
+}
+
+// ------------------------------------------------------------------------------
+
+double SAL_CALL Player::getRate( )
+ throw (uno::RuntimeException)
+{
+ double fRet = 0.0;
+
+ return fRet;
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Player::setPlaybackLoop( sal_Bool /* bSet */ )
+ throw (uno::RuntimeException)
+{
+}
+
+// ------------------------------------------------------------------------------
+
+sal_Bool SAL_CALL Player::isPlaybackLoop( )
+ throw (uno::RuntimeException)
+{
+ bool bRet = false;
+
+ return bRet;
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Player::setMute( sal_Bool /* bSet */ )
+ throw (uno::RuntimeException)
+{
+}
+
+// ------------------------------------------------------------------------------
+
+sal_Bool SAL_CALL Player::isMute( )
+ throw (uno::RuntimeException)
+{
+ bool bRet = false;
+
+ return bRet;
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Player::setVolumeDB( sal_Int16 /* nVolumeDB */ )
+ throw (uno::RuntimeException)
+{
+}
+
+// ------------------------------------------------------------------------------
+
+sal_Int16 SAL_CALL Player::getVolumeDB( )
+ throw (uno::RuntimeException)
+{
+ sal_Int16 nRet = 0;
+
+ return nRet;
+}
+
+// ------------------------------------------------------------------------------
+
+awt::Size SAL_CALL Player::getPreferredPlayerWindowSize( )
+ throw (uno::RuntimeException)
+{
+ awt::Size aSize( 0, 0 );
+
+ return aSize;
+}
+
+// ------------------------------------------------------------------------------
+
+uno::Reference< ::media::XPlayerWindow > SAL_CALL Player::createPlayerWindow( const uno::Sequence< uno::Any >& aArguments )
+ throw (uno::RuntimeException)
+{
+ uno::Reference< ::media::XPlayerWindow > xRet;
+ awt::Size aSize( getPreferredPlayerWindowSize() );
+
+ if( aSize.Width > 0 && aSize.Height > 0 )
+ {
+ ::avmedia::xine::Window* pWindow = new ::avmedia::xine::Window( *this );
+
+ xRet = pWindow;
+
+ if( !pWindow->create( aArguments ) )
+ xRet = uno::Reference< ::media::XPlayerWindow >();
+ }
+
+ return xRet;
+}
+
+// ------------------------------------------------------------------------------
+
+uno::Reference< media::XFrameGrabber > SAL_CALL Player::createFrameGrabber( )
+ throw (::com::sun::star::uno::RuntimeException)
+{
+ return NULL;
+}
+
+// ------------------------------------------------------------------------------
+
+::rtl::OUString SAL_CALL Player::getImplementationName( )
+ throw (uno::RuntimeException)
+{
+ return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( AVMEDIA_XINE_PLAYER_IMPLEMENTATIONNAME ) );
+}
+
+// ------------------------------------------------------------------------------
+
+sal_Bool SAL_CALL Player::supportsService( const ::rtl::OUString& ServiceName )
+ throw (uno::RuntimeException)
+{
+ return ServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM ( AVMEDIA_XINE_PLAYER_SERVICENAME ) );
+}
+
+// ------------------------------------------------------------------------------
+
+uno::Sequence< ::rtl::OUString > SAL_CALL Player::getSupportedServiceNames( )
+ throw (uno::RuntimeException)
+{
+ uno::Sequence< ::rtl::OUString > aRet(1);
+ aRet[0] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( AVMEDIA_XINE_PLAYER_SERVICENAME ) );
+
+ return aRet;
+}
+
+} // namespace xine
+} // namespace avmedia
diff --git a/avmedia/source/xine/player.hxx b/avmedia/source/xine/player.hxx
new file mode 100644
index 000000000000..b1e18613fbeb
--- /dev/null
+++ b/avmedia/source/xine/player.hxx
@@ -0,0 +1,84 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _PLAYER_HXX
+#define _PLAYER_HXX
+
+#include "xinecommon.hxx"
+
+#ifndef _COM_SUN_STAR_MEDIA_XPLAYER_HDL_
+#include "com/sun/star/media/XPlayer.hdl"
+#endif
+
+namespace avmedia { namespace xine {
+
+// ----------
+// - Player -
+// ----------
+
+class Player : public ::cppu::WeakImplHelper2< ::com::sun::star::media::XPlayer,
+ ::com::sun::star::lang::XServiceInfo >
+{
+public:
+
+ Player();
+ ~Player();
+
+ bool create( const ::rtl::OUString& rURL );
+
+ // XPlayer
+ virtual void SAL_CALL start( ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL stop( ) throw (::com::sun::star::uno::RuntimeException);
+ virtual sal_Bool SAL_CALL isPlaying( ) throw (::com::sun::star::uno::RuntimeException);
+ virtual double SAL_CALL getDuration( ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL setMediaTime( double fTime ) throw (::com::sun::star::uno::RuntimeException);
+ virtual double SAL_CALL getMediaTime( ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL setStopTime( double fTime ) throw (::com::sun::star::uno::RuntimeException);
+ virtual double SAL_CALL getStopTime( ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL setRate( double fRate ) throw (::com::sun::star::uno::RuntimeException);
+ virtual double SAL_CALL getRate( ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL setPlaybackLoop( sal_Bool bSet ) throw (::com::sun::star::uno::RuntimeException);
+ virtual sal_Bool SAL_CALL isPlaybackLoop( ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL setMute( sal_Bool bSet ) throw (::com::sun::star::uno::RuntimeException);
+ virtual sal_Bool SAL_CALL isMute( ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL setVolumeDB( sal_Int16 nVolumeDB ) throw (::com::sun::star::uno::RuntimeException);
+ virtual sal_Int16 SAL_CALL getVolumeDB( ) throw (::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::awt::Size SAL_CALL getPreferredPlayerWindowSize( ) throw (::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::media::XPlayerWindow > SAL_CALL createPlayerWindow( const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& aArguments ) throw (::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::media::XFrameGrabber > SAL_CALL createFrameGrabber( ) throw (::com::sun::star::uno::RuntimeException);
+ // XServiceInfo
+ virtual ::rtl::OUString SAL_CALL getImplementationName( ) throw (::com::sun::star::uno::RuntimeException);
+ virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw (::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames( ) throw (::com::sun::star::uno::RuntimeException);
+
+private:
+};
+
+} // namespace xine
+} // namespace avmedia
+
+#endif // _PLAYER_HXX
diff --git a/avmedia/source/xine/window.cxx b/avmedia/source/xine/window.cxx
new file mode 100644
index 000000000000..fb4f428c65fd
--- /dev/null
+++ b/avmedia/source/xine/window.cxx
@@ -0,0 +1,571 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <com/sun/star/awt/SystemPointer.hdl>
+
+#include "window.hxx"
+#include "player.hxx"
+
+using namespace ::com::sun::star;
+
+namespace avmedia { namespace xine {
+
+// -----------
+// - statics -
+// -----------
+
+static ::osl::Mutex& ImplGetOwnStaticMutex()
+{
+ static ::osl::Mutex* pMutex = NULL;
+
+ if( pMutex == NULL )
+ {
+ ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() );
+
+ if( pMutex == NULL )
+ {
+ static ::osl::Mutex aMutex;
+ pMutex = &aMutex;
+ }
+ }
+
+ return *pMutex;
+}
+
+// -----------
+// - WndProc -
+// -----------
+
+/*
+LRESULT CALLBACK MediaPlayerWndProc( HWND hWnd,UINT nMsg, WPARAM nPar1, LPARAM nPar2 )
+{
+ Window* pWindow = (Window*) ::GetWindowLong( hWnd, 0 );
+ bool bProcessed = true;
+
+ if( pWindow )
+ {
+ switch( nMsg )
+ {
+ case( WM_SETCURSOR ):
+ pWindow->updatePointer();
+ break;
+
+ case( WM_GRAPHNOTIFY ):
+ pWindow->processGraphEvent();
+ break;
+
+ case( WM_MOUSEMOVE ):
+ case( WM_LBUTTONDOWN ):
+ case( WM_MBUTTONDOWN ):
+ case( WM_RBUTTONDOWN ):
+ case( WM_LBUTTONUP ):
+ case( WM_MBUTTONUP ):
+ case( WM_RBUTTONUP ):
+ {
+ awt::MouseEvent aUNOEvt;
+ POINT aWinPoint;
+
+ if( !::GetCursorPos( &aWinPoint ) || !::ScreenToClient( hWnd, &aWinPoint ) )
+ {
+ aWinPoint.x = GET_X_LPARAM( nPar2 );
+ aWinPoint.y = GET_Y_LPARAM( nPar2 );
+ }
+ aUNOEvt.Modifiers = 0;
+ aUNOEvt.Buttons = 0;
+ aUNOEvt.X = aWinPoint.x;
+ aUNOEvt.Y = aWinPoint.y;
+ aUNOEvt.PopupTrigger = false;
+
+ // Modifiers
+ if( nPar1 & MK_SHIFT )
+ aUNOEvt.Modifiers |= awt::KeyModifier::SHIFT;
+
+ if( nPar1 & MK_CONTROL )
+ aUNOEvt.Modifiers |= awt::KeyModifier::MOD1;
+
+ // Buttons
+ if( WM_LBUTTONDOWN == nMsg || WM_LBUTTONUP == nMsg )
+ aUNOEvt.Buttons |= awt::MouseButton::LEFT;
+
+ if( WM_MBUTTONDOWN == nMsg || WM_MBUTTONUP == nMsg )
+ aUNOEvt.Buttons |= awt::MouseButton::MIDDLE;
+
+ if( WM_RBUTTONDOWN == nMsg || WM_RBUTTONUP == nMsg )
+ aUNOEvt.Buttons |= awt::MouseButton::RIGHT;
+
+ // event type
+ if( WM_LBUTTONDOWN == nMsg ||
+ WM_MBUTTONDOWN == nMsg ||
+ WM_RBUTTONDOWN == nMsg )
+ {
+ aUNOEvt.ClickCount = 1;
+ pWindow->fireMousePressedEvent( aUNOEvt );
+ }
+ else if( WM_LBUTTONUP == nMsg ||
+ WM_MBUTTONUP == nMsg ||
+ WM_RBUTTONUP == nMsg )
+ {
+ aUNOEvt.ClickCount = 1;
+ pWindow->fireMouseReleasedEvent( aUNOEvt );
+ }
+ else if( WM_MOUSEMOVE == nMsg )
+ {
+ aUNOEvt.ClickCount = 0;
+ pWindow->fireMouseMovedEvent( aUNOEvt );
+ pWindow->updatePointer();
+ }
+ }
+ break;
+
+ case( WM_SETFOCUS ):
+ {
+ const awt::FocusEvent aUNOEvt;
+ pWindow->fireSetFocusEvent( aUNOEvt );
+ }
+ break;
+
+ default:
+ bProcessed = false;
+ break;
+ }
+ }
+ else
+ bProcessed = false;
+
+ return( bProcessed ? 0 : DefWindowProc( hWnd, nMsg, nPar1, nPar2 ) );
+}
+*/
+
+// ---------------
+// - Window -
+// ---------------
+
+Window::Window( Player& rPlayer ) :
+ mrPlayer( rPlayer ),
+ maListeners( maMutex ),
+ meZoomLevel( media::ZoomLevel_NOT_AVAILABLE ),
+ mnPointerType( awt::SystemPointer::ARROW )
+{
+ ::osl::MutexGuard aGuard( ImplGetOwnStaticMutex() );
+}
+
+// ------------------------------------------------------------------------------
+
+Window::~Window()
+{
+}
+
+// ------------------------------------------------------------------------------
+
+void Window::implLayoutVideoWindow()
+{
+ if( media::ZoomLevel_NOT_AVAILABLE != meZoomLevel )
+ {
+ awt::Size aPrefSize( mrPlayer.getPreferredPlayerWindowSize() );
+ awt::Rectangle aRect = getPosSize();
+ int nW = aRect.Width, nH = aRect.Height;
+ int nVideoW = nW, nVideoH = nH;
+ int nX = 0, nY = 0, nWidth = 0, nHeight = 0;
+ bool bDone = false, bZoom = false;
+
+ if( media::ZoomLevel_ORIGINAL == meZoomLevel )
+ {
+ bZoom = true;
+ }
+ else if( media::ZoomLevel_ZOOM_1_TO_4 == meZoomLevel )
+ {
+ aPrefSize.Width >>= 2;
+ aPrefSize.Height >>= 2;
+ bZoom = true;
+ }
+ else if( media::ZoomLevel_ZOOM_1_TO_2 == meZoomLevel )
+ {
+ aPrefSize.Width >>= 1;
+ aPrefSize.Height >>= 1;
+ bZoom = true;
+ }
+ else if( media::ZoomLevel_ZOOM_2_TO_1 == meZoomLevel )
+ {
+ aPrefSize.Width <<= 1;
+ aPrefSize.Height <<= 1;
+ bZoom = true;
+ }
+ else if( media::ZoomLevel_ZOOM_4_TO_1 == meZoomLevel )
+ {
+ aPrefSize.Width <<= 2;
+ aPrefSize.Height <<= 2;
+ bZoom = true;
+ }
+ else if( media::ZoomLevel_FIT_TO_WINDOW == meZoomLevel )
+ {
+ nWidth = nVideoW;
+ nHeight = nVideoH;
+ bDone = true;
+ }
+
+ if( bZoom )
+ {
+ if( ( aPrefSize.Width <= nVideoW ) && ( aPrefSize.Height <= nVideoH ) )
+ {
+ nX = ( nVideoW - aPrefSize.Width ) >> 1;
+ nY = ( nVideoH - aPrefSize.Height ) >> 1;
+ nWidth = aPrefSize.Width;
+ nHeight = aPrefSize.Height;
+ bDone = true;
+ }
+ }
+
+ if( !bDone )
+ {
+ if( aPrefSize.Width > 0 && aPrefSize.Height > 0 && nVideoW > 0 && nVideoH > 0 )
+ {
+ double fPrefWH = (double) aPrefSize.Width / aPrefSize.Height;
+
+ if( fPrefWH < ( (double) nVideoW / nVideoH ) )
+ nVideoW = (int)( nVideoH * fPrefWH );
+ else
+ nVideoH = (int)( nVideoW / fPrefWH );
+
+ nX = ( nW - nVideoW ) >> 1;
+ nY = ( nH - nVideoH ) >> 1;
+ nWidth = nVideoW;
+ nHeight = nVideoH;
+ }
+ else
+ nX = nY = nWidth = nHeight = 0;
+ }
+
+ /*
+ IVideoWindow* pVideoWindow = const_cast< IVideoWindow* >( mrPlayer.getVideoWindow() );
+
+ if( pVideoWindow )
+ pVideoWindow->SetWindowPosition( nX, nY, nWidth, nHeight );
+ */
+ }
+}
+
+// ------------------------------------------------------------------------------
+
+bool Window::create( const uno::Sequence< uno::Any >& /*rArguments*/ )
+{
+ bool bRet = false;
+
+ return bRet;
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Window::update( )
+ throw (uno::RuntimeException)
+{
+}
+
+// ------------------------------------------------------------------------------
+
+sal_Bool SAL_CALL Window::setZoomLevel( media::ZoomLevel eZoomLevel )
+ throw (uno::RuntimeException)
+{
+ bool bRet = false;
+
+ if( media::ZoomLevel_NOT_AVAILABLE != meZoomLevel &&
+ media::ZoomLevel_NOT_AVAILABLE != eZoomLevel )
+ {
+ if( eZoomLevel != meZoomLevel )
+ {
+ meZoomLevel = eZoomLevel;
+ implLayoutVideoWindow();
+ }
+
+ bRet = true;
+ }
+
+ return bRet;
+}
+
+// ------------------------------------------------------------------------------
+
+media::ZoomLevel SAL_CALL Window::getZoomLevel( )
+ throw (uno::RuntimeException)
+{
+ return meZoomLevel;
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Window::setPointerType( sal_Int32 nPointerType )
+ throw (uno::RuntimeException)
+{
+ mnPointerType = nPointerType;
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Window::setPosSize( sal_Int32 /*X*/, sal_Int32 /*Y*/, sal_Int32 /*Width*/, sal_Int32 /*Height*/, sal_Int16 /*Flags*/ )
+ throw (uno::RuntimeException)
+{
+ implLayoutVideoWindow();
+}
+
+// ------------------------------------------------------------------------------
+
+awt::Rectangle SAL_CALL Window::getPosSize()
+ throw (uno::RuntimeException)
+{
+ awt::Rectangle aRet;
+
+ return aRet;
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Window::setVisible( sal_Bool /* bVisible */ )
+ throw (uno::RuntimeException)
+{
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Window::setEnable( sal_Bool /* bEnable */ )
+ throw (uno::RuntimeException)
+{
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Window::setFocus( )
+ throw (uno::RuntimeException)
+{
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Window::addWindowListener( const uno::Reference< awt::XWindowListener >& xListener )
+ throw (uno::RuntimeException)
+{
+ maListeners.addInterface( getCppuType( &xListener ), xListener );
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Window::removeWindowListener( const uno::Reference< awt::XWindowListener >& xListener )
+ throw (uno::RuntimeException)
+{
+ maListeners.removeInterface( getCppuType( &xListener ), xListener );
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Window::addFocusListener( const uno::Reference< awt::XFocusListener >& xListener )
+ throw (uno::RuntimeException)
+{
+ maListeners.addInterface( getCppuType( &xListener ), xListener );
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Window::removeFocusListener( const uno::Reference< awt::XFocusListener >& xListener )
+ throw (uno::RuntimeException)
+{
+ maListeners.removeInterface( getCppuType( &xListener ), xListener );
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Window::addKeyListener( const uno::Reference< awt::XKeyListener >& xListener )
+ throw (uno::RuntimeException)
+{
+ maListeners.addInterface( getCppuType( &xListener ), xListener );
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Window::removeKeyListener( const uno::Reference< awt::XKeyListener >& xListener )
+ throw (uno::RuntimeException)
+{
+ maListeners.removeInterface( getCppuType( &xListener ), xListener );
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Window::addMouseListener( const uno::Reference< awt::XMouseListener >& xListener )
+ throw (uno::RuntimeException)
+{
+ maListeners.addInterface( getCppuType( &xListener ), xListener );
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Window::removeMouseListener( const uno::Reference< awt::XMouseListener >& xListener )
+ throw (uno::RuntimeException)
+{
+ maListeners.removeInterface( getCppuType( &xListener ), xListener );
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Window::addMouseMotionListener( const uno::Reference< awt::XMouseMotionListener >& xListener )
+ throw (uno::RuntimeException)
+{
+ maListeners.addInterface( getCppuType( &xListener ), xListener );
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Window::removeMouseMotionListener( const uno::Reference< awt::XMouseMotionListener >& xListener )
+ throw (uno::RuntimeException)
+{
+ maListeners.removeInterface( getCppuType( &xListener ), xListener );
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Window::addPaintListener( const uno::Reference< awt::XPaintListener >& xListener )
+ throw (uno::RuntimeException)
+{
+ maListeners.addInterface( getCppuType( &xListener ), xListener );
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Window::removePaintListener( const uno::Reference< awt::XPaintListener >& xListener )
+ throw (uno::RuntimeException)
+{
+ maListeners.removeInterface( getCppuType( &xListener ), xListener );
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Window::dispose( )
+ throw (uno::RuntimeException)
+{
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Window::addEventListener( const uno::Reference< lang::XEventListener >& xListener )
+ throw (uno::RuntimeException)
+{
+ maListeners.addInterface( getCppuType( &xListener ), xListener );
+}
+
+// ------------------------------------------------------------------------------
+
+void SAL_CALL Window::removeEventListener( const uno::Reference< lang::XEventListener >& xListener )
+ throw (uno::RuntimeException)
+{
+ maListeners.removeInterface( getCppuType( &xListener ), xListener );
+}
+
+// ------------------------------------------------------------------------------
+
+void Window::fireMousePressedEvent( const ::com::sun::star::awt::MouseEvent& rEvt )
+{
+ ::cppu::OInterfaceContainerHelper* pContainer = maListeners.getContainer( getCppuType( (uno::Reference< awt::XMouseListener >*) 0 ) );
+
+ if( pContainer )
+ {
+ ::cppu::OInterfaceIteratorHelper aIter( *pContainer );
+
+ while( aIter.hasMoreElements() )
+ uno::Reference< awt::XMouseListener >( aIter.next(), uno::UNO_QUERY )->mousePressed( rEvt );
+ }
+}
+
+// -----------------------------------------------------------------------------
+
+void Window::fireMouseReleasedEvent( const ::com::sun::star::awt::MouseEvent& rEvt )
+{
+ ::cppu::OInterfaceContainerHelper* pContainer = maListeners.getContainer( getCppuType( (uno::Reference< awt::XMouseListener >*) 0 ) );
+
+ if( pContainer )
+ {
+ ::cppu::OInterfaceIteratorHelper aIter( *pContainer );
+
+ while( aIter.hasMoreElements() )
+ uno::Reference< awt::XMouseListener >( aIter.next(), uno::UNO_QUERY )->mouseReleased( rEvt );
+ }
+}
+
+// -----------------------------------------------------------------------------
+
+void Window::fireMouseMovedEvent( const ::com::sun::star::awt::MouseEvent& rEvt )
+{
+ ::cppu::OInterfaceContainerHelper* pContainer = maListeners.getContainer( getCppuType( (uno::Reference< awt::XMouseMotionListener >*) 0 ) );
+
+ if( pContainer )
+ {
+ ::cppu::OInterfaceIteratorHelper aIter( *pContainer );
+
+ while( aIter.hasMoreElements() )
+ uno::Reference< awt::XMouseMotionListener >( aIter.next(), uno::UNO_QUERY )->mouseMoved( rEvt );
+ }
+}
+
+// -----------------------------------------------------------------------------
+
+void Window::fireSetFocusEvent( const ::com::sun::star::awt::FocusEvent& rEvt )
+{
+ ::cppu::OInterfaceContainerHelper* pContainer = maListeners.getContainer( getCppuType( (uno::Reference< awt::XFocusListener >*) 0 ) );
+
+ if( pContainer )
+ {
+ ::cppu::OInterfaceIteratorHelper aIter( *pContainer );
+
+ while( aIter.hasMoreElements() )
+ uno::Reference< awt::XFocusListener >( aIter.next(), uno::UNO_QUERY )->focusGained( rEvt );
+ }
+}
+
+// ------------------------------------------------------------------------------
+
+::rtl::OUString SAL_CALL Window::getImplementationName( )
+ throw (uno::RuntimeException)
+{
+ return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( AVMEDIA_XINE_WINDOW_IMPLEMENTATIONNAME ) );
+}
+
+// ------------------------------------------------------------------------------
+
+sal_Bool SAL_CALL Window::supportsService( const ::rtl::OUString& ServiceName )
+ throw (uno::RuntimeException)
+{
+ return ServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM ( AVMEDIA_XINE_WINDOW_SERVICENAME ) );
+}
+
+// ------------------------------------------------------------------------------
+
+uno::Sequence< ::rtl::OUString > SAL_CALL Window::getSupportedServiceNames( )
+ throw (uno::RuntimeException)
+{
+ uno::Sequence< ::rtl::OUString > aRet(1);
+ aRet[0] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( AVMEDIA_XINE_WINDOW_SERVICENAME ) );
+
+ return aRet;
+}
+
+} // namespace xine
+} // namespace avmedia
diff --git a/avmedia/source/xine/window.hxx b/avmedia/source/xine/window.hxx
new file mode 100644
index 000000000000..014d349acfac
--- /dev/null
+++ b/avmedia/source/xine/window.hxx
@@ -0,0 +1,114 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _WINDOW_HXX
+#define _WINDOW_HXX
+
+#include "xinecommon.hxx"
+#include <cppuhelper/interfacecontainer.h>
+
+#ifndef _COM_SUN_STAR_MEDIA_XPLAYERWINDOW_HDL_
+#include "com/sun/star/media/XPlayerWindow.hdl"
+#endif
+
+namespace avmedia { namespace xine {
+
+// ---------------
+// - Window -
+// ---------------
+
+class Player;
+
+class Window : public ::cppu::WeakImplHelper2 < ::com::sun::star::media::XPlayerWindow,
+ ::com::sun::star::lang::XServiceInfo >
+{
+public:
+
+ Window( Player& rPlayer );
+ ~Window();
+
+ bool create( const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& aArguments );
+
+ // XPlayerWindow
+ virtual void SAL_CALL update( ) throw (::com::sun::star::uno::RuntimeException);
+ virtual sal_Bool SAL_CALL setZoomLevel( ::com::sun::star::media::ZoomLevel ZoomLevel ) throw (::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::media::ZoomLevel SAL_CALL getZoomLevel( ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL setPointerType( sal_Int32 nPointerType ) throw (::com::sun::star::uno::RuntimeException);
+
+ // XWindow
+ virtual void SAL_CALL setPosSize( sal_Int32 X, sal_Int32 Y, sal_Int32 Width, sal_Int32 Height, sal_Int16 Flags ) throw (::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::awt::Rectangle SAL_CALL getPosSize( ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL setVisible( sal_Bool Visible ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL setEnable( sal_Bool Enable ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL setFocus( ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL addWindowListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL removeWindowListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL addFocusListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XFocusListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL removeFocusListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XFocusListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL addKeyListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XKeyListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL removeKeyListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XKeyListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL addMouseListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMouseListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL removeMouseListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMouseListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL addMouseMotionListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMouseMotionListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL removeMouseMotionListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMouseMotionListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL addPaintListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XPaintListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL removePaintListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XPaintListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
+
+ // XComponent
+ virtual void SAL_CALL dispose( ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL addEventListener( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL removeEventListener( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener >& aListener ) throw (::com::sun::star::uno::RuntimeException);
+
+ // XServiceInfo
+ virtual ::rtl::OUString SAL_CALL getImplementationName( ) throw (::com::sun::star::uno::RuntimeException);
+ virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw (::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames( ) throw (::com::sun::star::uno::RuntimeException);
+
+public:
+
+ void fireMousePressedEvent( const ::com::sun::star::awt::MouseEvent& rEvt );
+ void fireMouseReleasedEvent( const ::com::sun::star::awt::MouseEvent& rEvt );
+ void fireMouseMovedEvent( const ::com::sun::star::awt::MouseEvent& rEvt );
+ void fireKeyPressedEvent( const ::com::sun::star::awt::KeyEvent& rEvt );
+ void fireKeyReleasedEvent( const ::com::sun::star::awt::KeyEvent& rEvt );
+ void fireSetFocusEvent( const ::com::sun::star::awt::FocusEvent& rEvt );
+
+private:
+
+ ::osl::Mutex maMutex;
+ Player& mrPlayer;
+ ::cppu::OMultiTypeInterfaceContainerHelper maListeners;
+ ::com::sun::star::media::ZoomLevel meZoomLevel;
+ sal_Int32 mnPointerType;
+
+ void implLayoutVideoWindow();
+};
+
+} // namespace xine
+} // namespace avmedia
+
+#endif // _WINDOW_HXX
diff --git a/avmedia/source/xine/xinecommon.hxx b/avmedia/source/xine/xinecommon.hxx
new file mode 100644
index 000000000000..fe80a75370b6
--- /dev/null
+++ b/avmedia/source/xine/xinecommon.hxx
@@ -0,0 +1,65 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _XINECOMMON_HXX
+#define _XINECOMMON_HXX
+
+#include <osl/mutex.hxx>
+#ifndef __RTL_USTRING_
+#include <rtl/ustring.hxx>
+#endif
+#include <tools/debug.hxx>
+#include <tools/stream.hxx>
+#include <tools/string.hxx>
+#include <tools/urlobj.hxx>
+#include <cppuhelper/implbase1.hxx>
+#include <cppuhelper/implbase2.hxx>
+#include <cppuhelper/weak.hxx>
+#include <cppuhelper/factory.hxx>
+
+#include <com/sun/star/uno/Reference.h>
+#include <com/sun/star/uno/RuntimeException.hpp>
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+#include <com/sun/star/lang/XComponent.hpp>
+#include <com/sun/star/registry/XRegistryKey.hpp>
+#include <com/sun/star/lang/XComponent.hpp>
+#include <com/sun/star/lang/XServiceInfo.hpp>
+#include <com/sun/star/awt/Rectangle.hpp>
+#include <com/sun/star/awt/KeyModifier.hpp>
+#include <com/sun/star/awt/MouseButton.hpp>
+#include <com/sun/star/media/XManager.hpp>
+
+#define AVMEDIA_XINE_MANAGER_IMPLEMENTATIONNAME "com.sun.star.comp.avmedia.Manager_Xine"
+#define AVMEDIA_XINE_MANAGER_SERVICENAME "com.sun.star.media.Manager_Xine"
+
+#define AVMEDIA_XINE_PLAYER_IMPLEMENTATIONNAME "com.sun.star.comp.avmedia.Player_Xine"
+#define AVMEDIA_XINE_PLAYER_SERVICENAME "com.sun.star.media.Player_Xine"
+
+#define AVMEDIA_XINE_WINDOW_IMPLEMENTATIONNAME "com.sun.star.comp.avmedia.Window_Xine"
+#define AVMEDIA_XINE_WINDOW_SERVICENAME "com.sun.star.media.Window_Xine"
+
+#endif // _XINECOMMOM_HXX
diff --git a/avmedia/source/xine/xineuno.cxx b/avmedia/source/xine/xineuno.cxx
new file mode 100644
index 000000000000..4dc4f3f7e1dd
--- /dev/null
+++ b/avmedia/source/xine/xineuno.cxx
@@ -0,0 +1,106 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "xinecommon.hxx"
+#include "manager.hxx"
+
+using namespace ::com::sun::star;
+
+// -------------------
+// - factory methods -
+// -------------------
+
+static uno::Reference< uno::XInterface > SAL_CALL create_MediaPlayer( const uno::Reference< lang::XMultiServiceFactory >& rxFact )
+{
+ return uno::Reference< uno::XInterface >( *new ::avmedia::xine::Manager( rxFact ) );
+}
+
+// ------------------------------------------
+// - component_getImplementationEnvironment -
+// ------------------------------------------
+
+extern "C" void SAL_CALL component_getImplementationEnvironment( const sal_Char ** ppEnvTypeName, uno_Environment ** /* ppEnv */ )
+{
+ *ppEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME;
+}
+
+// -----------------------
+// - component_writeInfo -
+// -----------------------
+
+extern "C" sal_Bool SAL_CALL component_writeInfo( void* /* pServiceManager */, void* pRegistryKey )
+{
+ sal_Bool bRet = sal_False;
+
+ if( pRegistryKey )
+ {
+ try
+ {
+ uno::Reference< registry::XRegistryKey > xNewKey1(
+ static_cast< registry::XRegistryKey* >( pRegistryKey )->createKey(
+ ::rtl::OUString::createFromAscii(
+ "/" AVMEDIA_XINE_MANAGER_IMPLEMENTATIONNAME "/UNO/SERVICES/"
+ AVMEDIA_XINE_MANAGER_SERVICENAME ) ) );
+
+ bRet = sal_True;
+ }
+ catch( registry::InvalidRegistryException& )
+ {
+ OSL_ENSURE( sal_False, "### InvalidRegistryException!" );
+ }
+ }
+
+ return bRet;
+}
+
+// ------------------------
+// - component_getFactory -
+// ------------------------
+
+extern "C" void* SAL_CALL component_getFactory( const sal_Char* pImplName, void* pServiceManager, void* /* pRegistryKey */ )
+{
+ uno::Reference< lang::XSingleServiceFactory > xFactory;
+ void* pRet = 0;
+
+ if( rtl_str_compare( pImplName, AVMEDIA_XINE_MANAGER_IMPLEMENTATIONNAME ) == 0 )
+ {
+ const ::rtl::OUString aServiceName( ::rtl::OUString::createFromAscii( AVMEDIA_XINE_MANAGER_SERVICENAME ) );
+
+ xFactory = uno::Reference< lang::XSingleServiceFactory >( ::cppu::createSingleFactory(
+ reinterpret_cast< lang::XMultiServiceFactory* >( pServiceManager ),
+ ::rtl::OUString::createFromAscii( AVMEDIA_XINE_MANAGER_IMPLEMENTATIONNAME ),
+ create_MediaPlayer, uno::Sequence< ::rtl::OUString >( &aServiceName, 1 ) ) );
+ }
+
+ if( xFactory.is() )
+ {
+ xFactory->acquire();
+ pRet = xFactory.get();
+ }
+
+ return pRet;
+}
diff --git a/avmedia/util/hidother.src b/avmedia/util/hidother.src
new file mode 100755
index 000000000000..c6d5dc07c9a5
--- /dev/null
+++ b/avmedia/util/hidother.src
@@ -0,0 +1,41 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "../inc/helpids.hrc"
+
+hidspecial HID_AVMEDIA_TOOLBOXITEM_PLAY { HelpId = HID_AVMEDIA_TOOLBOXITEM_PLAY; };
+hidspecial HID_AVMEDIA_TOOLBOXITEM_PAUSE { HelpId = HID_AVMEDIA_TOOLBOXITEM_PAUSE; };
+hidspecial HID_AVMEDIA_TOOLBOXITEM_STOP { HelpId = HID_AVMEDIA_TOOLBOXITEM_STOP; };
+hidspecial HID_AVMEDIA_TOOLBOXITEM_MUTE { HelpId = HID_AVMEDIA_TOOLBOXITEM_MUTE; };
+hidspecial HID_AVMEDIA_TOOLBOXITEM_LOOP { HelpId = HID_AVMEDIA_TOOLBOXITEM_LOOP; };
+hidspecial HID_AVMEDIA_TOOLBOXITEM_OPEN { HelpId = HID_AVMEDIA_TOOLBOXITEM_OPEN; };
+hidspecial HID_AVMEDIA_TOOLBOXITEM_INSERT { HelpId = HID_AVMEDIA_TOOLBOXITEM_INSERT; };
+hidspecial HID_AVMEDIA_ZOOMLISTBOX { HelpId = HID_AVMEDIA_ZOOMLISTBOX; };
+hidspecial HID_AVMEDIA_TIMESLIDER { HelpId = HID_AVMEDIA_TIMESLIDER; };
+hidspecial HID_AVMEDIA_TIMEEDIT { HelpId = HID_AVMEDIA_TIMEEDIT; };
+hidspecial HID_AVMEDIA_VOLUMESLIDER { HelpId = HID_AVMEDIA_VOLUMESLIDER; };
+hidspecial HID_AVMEDIA_PLAYERWINDOW { HelpId = HID_AVMEDIA_PLAYERWINDOW; };
diff --git a/avmedia/util/makefile.mk b/avmedia/util/makefile.mk
new file mode 100644
index 000000000000..b0d0a6816cf8
--- /dev/null
+++ b/avmedia/util/makefile.mk
@@ -0,0 +1,79 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..
+PRJNAME=avmedia
+TARGET=avmedia
+GEN_HID=TRUE
+GEN_HID_OTHER=TRUE
+
+# --- Settings ----------------------------------
+
+.INCLUDE : settings.mk
+
+# --- Resources ---------------------------------
+
+RESLIB1NAME=$(TARGET)
+RESLIB1IMAGES=$(PRJ)$/res
+RESLIB1SRSFILES= \
+ $(SRS)$/viewer.srs \
+ $(SRS)$/framework.srs
+
+# --- Files -------------------------------------
+
+LIB1TARGET=$(SLB)$/$(TARGET).lib
+LIB1FILES=\
+ $(SLB)$/viewer.lib \
+ $(SLB)$/framework.lib
+
+# ==========================================================================
+
+SHL1TARGET=$(TARGET)$(DLLPOSTFIX)
+SHL1IMPLIB=i$(TARGET)
+SHL1STDLIBS=$(UNOTOOLSLIB) $(TOOLSLIB) $(CPPULIB) $(CPPUHELPERLIB) $(SALLIB) $(VCLLIB) $(COMPHELPERLIB) $(SVTOOLLIB) $(SVLLIB) $(SFXLIB) $(VOSLIB)
+SHL1DEF=$(MISC)$/$(SHL1TARGET).def
+SHL1LIBS=$(SLB)$/$(TARGET).lib
+
+DEF1NAME=$(SHL1TARGET)
+DEF1DEPN=$(MISC)$/$(SHL1TARGET).flt $(LIB1TARGET)
+DEF1DES=Avmedia
+DEFLIB1NAME =$(TARGET)
+
+# --- Targets ----------------------------------
+
+.INCLUDE : target.mk
+
+.IF "$(depend)"==""
+$(MISC)$/$(SHL1TARGET).flt: makefile.mk
+ @echo ------------------------------
+ @echo Making: $@
+ @echo _Impl>$@
+ @echo WEP>>$@
+ @echo LIBMAIN>>$@
+ @echo LibMain>>$@
+ @echo CT>>$@
+.ENDIF
diff --git a/basebmp/inc/basebmp/accessor.hxx b/basebmp/inc/basebmp/accessor.hxx
new file mode 100644
index 000000000000..b98f05e78f6c
--- /dev/null
+++ b/basebmp/inc/basebmp/accessor.hxx
@@ -0,0 +1,119 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_BASEBMP_ACCESSOR_HXX
+#define INCLUDED_BASEBMP_ACCESSOR_HXX
+
+#include <vigra/numerictraits.hxx>
+
+namespace basebmp
+{
+
+/** Standard accessor type
+
+ Accesses the iterator values the standard way (i.e. via
+ *operator()/operator[])
+ */
+template<typename ValueType> class StandardAccessor
+{
+public:
+ typedef ValueType value_type;
+
+ // -------------------------------------------------------
+
+ template< class Iterator >
+ value_type operator()(Iterator const& i) const
+ {
+ return *i;
+ }
+
+ template< class Iterator, class Difference >
+ value_type operator()(Iterator const& i, Difference const& diff) const
+ {
+ return i[diff];
+ }
+
+ // -------------------------------------------------------
+
+ template< typename V, class Iterator >
+ void set(V const& value, Iterator const& i) const
+ {
+ *i = vigra::detail::RequiresExplicitCast<value_type>::cast(value);
+ }
+
+ template< typename V, class Iterator, class Difference >
+ void set(V const& value, Iterator const& i, Difference const& diff) const
+ {
+ i[diff] = vigra::detail::RequiresExplicitCast<value_type>::cast(value);
+ }
+};
+
+//-----------------------------------------------------------------------------
+
+/** Non-standard accessor type
+
+ Uses getter/setter methods at the given iterator type, to access
+ the underlying values.
+ */
+template<typename ValueType> class NonStandardAccessor
+{
+public:
+ typedef ValueType value_type;
+
+ // -------------------------------------------------------
+
+ template< class Iterator >
+ value_type operator()(Iterator const& i) const
+ {
+ return i.get();
+ }
+
+ template< class Iterator, class Difference >
+ value_type operator()(Iterator const& i, Difference const& diff) const
+ {
+ return i.get(diff);
+ }
+
+ // -------------------------------------------------------
+
+ template< typename V, class Iterator >
+ void set(V const& value, Iterator const& i) const
+ {
+ i.set( vigra::detail::RequiresExplicitCast<value_type>::cast(value) );
+ }
+
+ template< typename V, class Iterator, class Difference >
+ void set(V const& value, Iterator const& i, Difference const& diff) const
+ {
+ i.set( vigra::detail::RequiresExplicitCast<value_type>::cast(value),
+ diff );
+ }
+};
+
+} // namespace basebmp
+
+#endif /* INCLUDED_BASEBMP_ACCESSOR_HXX */
diff --git a/basebmp/inc/basebmp/accessoradapters.hxx b/basebmp/inc/basebmp/accessoradapters.hxx
new file mode 100644
index 000000000000..40b4faed4bae
--- /dev/null
+++ b/basebmp/inc/basebmp/accessoradapters.hxx
@@ -0,0 +1,526 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_BASEBMP_ACCESSORADAPTERS_HXX
+#define INCLUDED_BASEBMP_ACCESSORADAPTERS_HXX
+
+#include <vigra/numerictraits.hxx>
+
+namespace basebmp
+{
+
+/** Interpose given accessor's set and get methods with two unary
+ functors.
+
+ @tpl WrappedAccessor
+ Wrapped type must provide the usual get and set accessor methods,
+ with the usual signatures (see StandardAccessor for a conforming
+ example).
+
+ @tpl GetterFunctor
+ An Adaptable Unary Function (i.e. providing result_type and
+ argument_type typedefs)
+
+ @tpl SetterFunctor
+ An Adaptable Unary Function (i.e. providing result_type and
+ argument_type typedefs)
+ */
+template< class WrappedAccessor,
+ typename GetterFunctor,
+ typename SetterFunctor > class UnaryFunctionAccessorAdapter
+{
+public:
+ typedef typename GetterFunctor::result_type value_type;
+ typedef typename SetterFunctor::argument_type argument_type;
+
+#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+// making all members public, if no member template friends
+private:
+ template<class A, typename G, typename S> friend class UnaryFunctionAccessorAdapter;
+#endif
+
+ // we don't derive from wrapped type, to avoid ambiguities
+ // regarding templatized getter/setter methods.
+ WrappedAccessor maAccessor;
+ GetterFunctor maGetterFunctor;
+ SetterFunctor maSetterFunctor;
+
+public:
+ UnaryFunctionAccessorAdapter() :
+ maAccessor(),
+ maGetterFunctor(),
+ maSetterFunctor()
+ {}
+
+ template< class A > explicit
+ UnaryFunctionAccessorAdapter( UnaryFunctionAccessorAdapter< A,
+ GetterFunctor,
+ SetterFunctor > const& rSrc ) :
+ maAccessor( rSrc.maAccessor ),
+ maGetterFunctor( rSrc.maGetterFunctor ),
+ maSetterFunctor( rSrc.maSetterFunctor )
+ {}
+
+ template< class T > explicit UnaryFunctionAccessorAdapter( T const& accessor ) :
+ maAccessor( accessor ),
+ maGetterFunctor(),
+ maSetterFunctor()
+ {}
+
+ template< class T > UnaryFunctionAccessorAdapter( T accessor,
+ GetterFunctor getterFunctor,
+ SetterFunctor setterFunctor) :
+ maAccessor( accessor ),
+ maGetterFunctor( getterFunctor ),
+ maSetterFunctor( setterFunctor )
+ {}
+
+ // -------------------------------------------------------
+
+ WrappedAccessor const& getWrappedAccessor() const { return maAccessor; }
+ WrappedAccessor& getWrappedAccessor() { return maAccessor; }
+
+ // -------------------------------------------------------
+
+ value_type getter(typename GetterFunctor::argument_type v) const
+ {
+ return maGetterFunctor(v);
+ }
+ typename SetterFunctor::result_type setter(argument_type v) const
+ {
+ return maSetterFunctor(v);
+ }
+
+ // -------------------------------------------------------
+
+ template< class Iterator >
+ value_type operator()(Iterator const& i) const
+ {
+ return maGetterFunctor( maAccessor(i) );
+ }
+
+ template< class Iterator, class Difference >
+ value_type operator()(Iterator const& i, Difference const& diff) const
+ {
+ return maGetterFunctor( maAccessor(i,diff) );
+ }
+
+ // -------------------------------------------------------
+
+ template< typename V, class Iterator >
+ void set(V const& value, Iterator const& i) const
+ {
+ maAccessor.set(
+ maSetterFunctor(
+ vigra::detail::RequiresExplicitCast<argument_type>::cast(value) ),
+ i );
+ }
+
+ template< typename V, class Iterator, class Difference >
+ void set(V const& value, Iterator const& i, Difference const& diff) const
+ {
+ maAccessor.set(
+ maSetterFunctor(
+ vigra::detail::RequiresExplicitCast<argument_type>::cast(value) ),
+ i,
+ diff );
+ }
+
+};
+
+//-----------------------------------------------------------------------------
+
+/** Interpose given accessor's set methods with a binary function,
+ taking both old and new value.
+
+ The wrappee's getter methods kept as-is.
+
+ @tpl WrappedAccessor
+ Wrapped type must provide the usual get and set accessor methods,
+ with the usual signatures (see StandardAccessor for a conforming
+ example). Furthermore, must provide a nested typedef value_type.
+
+ @tpl SetterFunctor
+ An adaptable binary function (i.e. providing nested typedefs for
+ result_type and first and second argument type)
+ */
+template< class WrappedAccessor,
+ typename SetterFunctor > class BinarySetterFunctionAccessorAdapter
+{
+public:
+ typedef typename WrappedAccessor::value_type value_type;
+ typedef typename SetterFunctor::second_argument_type argument_type;
+
+#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+// making all members public, if no member template friends
+private:
+ template<class A, typename S> friend class BinarySetterFunctionAccessorAdapter;
+#endif
+
+ WrappedAccessor maAccessor;
+ SetterFunctor maFunctor;
+
+public:
+ BinarySetterFunctionAccessorAdapter() :
+ maAccessor(),
+ maFunctor()
+ {}
+
+ template< class A > explicit
+ BinarySetterFunctionAccessorAdapter(
+ BinarySetterFunctionAccessorAdapter< A,
+ SetterFunctor > const& rSrc ) :
+ maAccessor( rSrc.maAccessor ),
+ maFunctor( rSrc.maFunctor )
+ {}
+
+ template< class T > explicit BinarySetterFunctionAccessorAdapter( T const& accessor ) :
+ maAccessor( accessor ),
+ maFunctor()
+ {}
+
+ template< class T > BinarySetterFunctionAccessorAdapter( T accessor,
+ SetterFunctor functor ) :
+ maAccessor( accessor ),
+ maFunctor( functor )
+ {}
+
+ // -------------------------------------------------------
+
+ WrappedAccessor const& getWrappedAccessor() const { return maAccessor; }
+ WrappedAccessor& getWrappedAccessor() { return maAccessor; }
+
+ // -------------------------------------------------------
+
+ typename SetterFunctor::result_type setter(
+ typename SetterFunctor::first_argument_type v1,
+ argument_type v2 ) const
+ {
+ return maSetterFunctor(v1,v2);
+ }
+
+ // -------------------------------------------------------
+
+ template< class Iterator >
+ value_type operator()(Iterator const& i) const
+ {
+ return maAccessor(i);
+ }
+
+ template< class Iterator, class Difference >
+ value_type operator()(Iterator const& i, Difference const& diff) const
+ {
+ return maAccessor(i,diff);
+ }
+
+ // -------------------------------------------------------
+
+ template< typename V, class Iterator >
+ void set(V const& value, Iterator const& i) const
+ {
+ maAccessor.set(
+ maFunctor(maAccessor(i),
+ vigra::detail::RequiresExplicitCast<argument_type>::cast(value)),
+ i );
+ }
+
+ template< typename V, class Iterator, class Difference >
+ void set(V const& value, Iterator const& i, Difference const& diff) const
+ {
+ maAccessor.set(
+ maFunctor(maAccessor(i,diff),
+ vigra::detail::RequiresExplicitCast<argument_type>::cast(value)),
+ i,
+ diff );
+ }
+
+};
+
+//-----------------------------------------------------------------------------
+
+/** Write through a CompositeIterator's first wrapped iterator, by
+ piping the first wrapped iterator value, the second iterator
+ value, and the specified new value through a ternary function.
+
+ Passed iterator must fulfill the CompositeIterator concept. Note
+ that the getter/setter methods are not templatized regarding the
+ iterator type, to make the mask calculation optimization below
+ safe (see the maskedAccessor template metafunction below)
+
+ @tpl WrappedAccessor1
+ Wrapped type must provide the usual get and set accessor methods,
+ with the usual signatures (see StandardAccessor for a conforming
+ example). Furthermore, the type must provide a nested typedef
+ value_type (the selection of WrappedAccessor1 as the provider for
+ that typedef is rather arbitrary. Could have been
+ WrappedAccessor2, too. So sue me)
+
+ @tpl Functor
+ An adaptable ternary function (i.e. providing nested typedefs for
+ result_type and first, second and third argument type)
+ */
+template< class WrappedAccessor1,
+ class WrappedAccessor2,
+ typename Functor > class TernarySetterFunctionAccessorAdapter
+{
+public:
+ typedef typename WrappedAccessor1::value_type value_type;
+ typedef typename Functor::third_argument_type argument_type;
+
+#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+// making all members public, if no member template friends
+private:
+ template<class A1, class A2, typename F> friend class TernarySetterFunctionAccessorAdapter;
+#endif
+
+ WrappedAccessor1 ma1stAccessor;
+ WrappedAccessor2 ma2ndAccessor;
+ Functor maFunctor;
+
+public:
+ TernarySetterFunctionAccessorAdapter() :
+ ma1stAccessor(),
+ ma2ndAccessor(),
+ maFunctor()
+ {}
+
+ template< class T > explicit TernarySetterFunctionAccessorAdapter( T const& accessor ) :
+ ma1stAccessor( accessor ),
+ ma2ndAccessor(),
+ maFunctor()
+ {}
+
+ template< class A1, class A2 > explicit
+ TernarySetterFunctionAccessorAdapter(
+ TernarySetterFunctionAccessorAdapter< A1,
+ A2,
+ Functor > const& rSrc ) :
+ ma1stAccessor( rSrc.ma1stAccessor ),
+ ma2ndAccessor( rSrc.ma2ndAccessor ),
+ maFunctor( rSrc.maFunctor )
+ {}
+
+ template< class T1, class T2 >
+ TernarySetterFunctionAccessorAdapter( T1 accessor1,
+ T2 accessor2 ) :
+ ma1stAccessor( accessor1 ),
+ ma2ndAccessor( accessor2 ),
+ maFunctor()
+ {}
+
+ template< class T1, class T2 >
+ TernarySetterFunctionAccessorAdapter( T1 accessor1,
+ T2 accessor2,
+ Functor func ) :
+ ma1stAccessor( accessor1 ),
+ ma2ndAccessor( accessor2 ),
+ maFunctor( func )
+ {}
+
+ // -------------------------------------------------------
+
+ WrappedAccessor1 const& get1stWrappedAccessor() const { return ma1stAccessor; }
+ WrappedAccessor1& get1stWrappedAccessor() { return ma1stAccessor; }
+
+ WrappedAccessor2 const& get2ndWrappedAccessor() const { return ma2ndAccessor; }
+ WrappedAccessor2& get2ndWrappedAccessor() { return ma2ndAccessor; }
+
+ // -------------------------------------------------------
+
+ typename Functor::result_type setter(
+ typename Functor::first_argument_type v1,
+ typename Functor::second_argument_type v2,
+ argument_type v3 ) const
+ {
+ return maSetterFunctor(v1,v2,v3);
+ }
+
+ // -------------------------------------------------------
+
+ template< class Iterator >
+ value_type operator()(Iterator const& i) const
+ {
+ return ma1stAccessor(i.first());
+ }
+
+ template< class Iterator, class Difference >
+ value_type operator()(Iterator const& i, Difference const& diff) const
+ {
+ return ma1stAccessor(i.second(),diff);
+ }
+
+ // -------------------------------------------------------
+
+ template< typename V, class Iterator >
+ void set(V const& value, Iterator const& i) const
+ {
+ ma1stAccessor.set(
+ maFunctor(ma1stAccessor(i.first()),
+ ma2ndAccessor(i.second()),
+ vigra::detail::RequiresExplicitCast<argument_type>::cast(value)),
+ i.first() );
+ }
+
+ template< typename V, class Iterator, class Difference >
+ void set(V const& value, Iterator const& i, Difference const& diff) const
+ {
+ ma1stAccessor.set(
+ maFunctor(ma1stAccessor(i.first(), diff),
+ ma2ndAccessor(i.second(),diff),
+ vigra::detail::RequiresExplicitCast<argument_type>::cast(value)),
+ i.first(),
+ diff );
+ }
+
+};
+
+//-----------------------------------------------------------------------------
+
+/** Access two distinct images simultaneously
+
+ Passed iterator must fulfill the CompositeIterator concept
+ (i.e. wrap the two image's iterators into one
+ CompositeIterator). The getter and setter methods expect and
+ return a pair of values, with types equal to the two accessors
+ value types
+
+ @tpl WrappedAccessor1
+ Wrapped type must provide the usual get and set accessor methods,
+ with the usual signatures (see StandardAccessor for a conforming
+ example). Furthermore, the type must provide a nested typedef
+ value_type.
+
+ @tpl WrappedAccessor2
+ Wrapped type must provide the usual get and set accessor methods,
+ with the usual signatures (see StandardAccessor for a conforming
+ example). Furthermore, the type must provide a nested typedef
+ value_type.
+ */
+template< class WrappedAccessor1,
+ class WrappedAccessor2 > class JoinImageAccessorAdapter
+{
+public:
+ // TODO(F3): Need numeric traits and a few free functions to
+ // actually calculate with a pair (semantic: apply every operation
+ // individually to the contained types)
+ typedef std::pair<typename WrappedAccessor1::value_type,
+ typename WrappedAccessor2::value_type> value_type;
+
+#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+// making all members public, if no member template friends
+private:
+ template<class A1, class A2> friend class JoinImageAccessorAdapter;
+#endif
+
+ WrappedAccessor1 ma1stAccessor;
+ WrappedAccessor2 ma2ndAccessor;
+
+public:
+ JoinImageAccessorAdapter() :
+ ma1stAccessor(),
+ ma2ndAccessor()
+ {}
+
+ template< class T > explicit JoinImageAccessorAdapter( T const& accessor ) :
+ ma1stAccessor( accessor ),
+ ma2ndAccessor()
+ {}
+
+ template< class A1, class A2 > explicit
+ JoinImageAccessorAdapter(
+ JoinImageAccessorAdapter< A1,
+ A2 > const& rSrc ) :
+ ma1stAccessor( rSrc.ma1stAccessor ),
+ ma2ndAccessor( rSrc.ma2ndAccessor )
+ {}
+
+ template< class T1, class T2 >
+ JoinImageAccessorAdapter( T1 accessor1,
+ T2 accessor2 ) :
+ ma1stAccessor( accessor1 ),
+ ma2ndAccessor( accessor2 )
+ {}
+
+ // -------------------------------------------------------
+
+ WrappedAccessor1 const& get1stWrappedAccessor() const { return ma1stAccessor; }
+ WrappedAccessor1& get1stWrappedAccessor() { return ma1stAccessor; }
+
+ WrappedAccessor2 const& get2ndWrappedAccessor() const { return ma2ndAccessor; }
+ WrappedAccessor2& get2ndWrappedAccessor() { return ma2ndAccessor; }
+
+ // -------------------------------------------------------
+
+ template< class Iterator >
+ value_type operator()(Iterator const& i) const
+ {
+ return std::make_pair(ma1stAccessor(i.first()),
+ ma2ndAccessor(i.second()));
+ }
+
+ template< class Iterator, class Difference >
+ value_type operator()(Iterator const& i, Difference const& diff) const
+ {
+ return std::make_pair(ma1stAccessor(i.first(),diff),
+ ma2ndAccessor(i.second(),diff));
+ }
+
+ // -------------------------------------------------------
+
+ template< typename V, class Iterator >
+ void set(V const& value, Iterator const& i) const
+ {
+ ma1stAccessor.set(
+ vigra::detail::RequiresExplicitCast<typename WrappedAccessor1::value_type>::cast(
+ value.first),
+ i.first() );
+ ma2ndAccessor.set(
+ vigra::detail::RequiresExplicitCast<typename WrappedAccessor2::value_type>::cast(
+ value.second),
+ i.second() );
+ }
+
+ template< typename V, class Iterator, class Difference >
+ void set(V const& value, Iterator const& i, Difference const& diff) const
+ {
+ ma1stAccessor.set(
+ vigra::detail::RequiresExplicitCast<typename WrappedAccessor1::value_type>::cast(
+ value.first),
+ i.first(),
+ diff );
+ ma2ndAccessor.set(
+ vigra::detail::RequiresExplicitCast<typename WrappedAccessor2::value_type>::cast(
+ value.second),
+ i.second(),
+ diff );
+ }
+
+};
+
+} // namespace basebmp
+
+#endif /* INCLUDED_BASEBMP_ACCESSORADAPTERS_HXX */
diff --git a/basebmp/inc/basebmp/accessorfunctors.hxx b/basebmp/inc/basebmp/accessorfunctors.hxx
new file mode 100644
index 000000000000..fdb9b75aa64f
--- /dev/null
+++ b/basebmp/inc/basebmp/accessorfunctors.hxx
@@ -0,0 +1,187 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_BASEBMP_ACCESSORFUNCTORS_HXX
+#define INCLUDED_BASEBMP_ACCESSORFUNCTORS_HXX
+
+#include <osl/diagnose.h>
+#include <basebmp/metafunctions.hxx>
+
+#include <functional>
+
+namespace basebmp
+{
+
+// Some common accessor functors
+// ------------------------------------------------------------
+
+
+/// combine two values via XOR
+template< typename T > struct XorFunctor : public std::binary_function<T,T,T>
+{
+ T operator()( T v1, T v2 ) const { return v1 ^ v2; }
+};
+
+//-----------------------------------------------------------------------------
+
+/// Base class, passing on the arg types
+template< typename T, typename M > struct MaskFunctorBase :
+ public TernaryFunctorBase<T,M,T,T> {};
+
+
+/** Let a mask flag decide between two values
+
+ @tpl polarity
+ Mask polarity. When true, a false in the mask denotes
+ transparency, i.e. the original value will display. And vice
+ versa.
+ */
+template< typename T,
+ typename M,
+ bool polarity > struct GenericOutputMaskFunctor : public MaskFunctorBase<T,M>
+{
+ /// Ternary mask operation - selects v1 for !m == polarity, v2 otherwise
+ T operator()( T v1, M m, T v2 ) const
+ {
+ return !m == polarity ? v1 : v2;
+ }
+};
+
+/** Let a mask bit decide between two values (specialization for
+ integer mask types)
+ */
+template< typename T,
+ typename M,
+ bool polarity > struct IntegerOutputMaskFunctor;
+template< typename T,
+ typename M > struct IntegerOutputMaskFunctor<T,M,true> : public MaskFunctorBase<T,M>
+{
+ /** Mask v with state of m
+
+ @return v2, if m != 0, v1 otherwise.
+ */
+ T operator()( T v1, M m, T v2 ) const
+ {
+ typedef typename make_unsigned<T>::type unsigned_T;
+
+ // mask will be 0, iff m == 0, and 1 otherwise
+ const T mask( unsigned_cast<T>(m | -m) >> (sizeof(unsigned_T)*8 - 1) );
+ return v1*(M)(1-mask) + v2*mask;
+ }
+};
+template< typename T,
+ typename M > struct IntegerOutputMaskFunctor<T,M,false> : public MaskFunctorBase<T,M>
+{
+ /** Mask v with state of m
+
+ @return v2, if m != 0, v1 otherwise.
+ */
+ T operator()( T v1, M m, T v2 ) const
+ {
+ typedef typename make_unsigned<T>::type unsigned_T;
+
+ // mask will be 0, iff m == 0, and 1 otherwise
+ const T mask( unsigned_cast<T>(m | -m) >> (sizeof(unsigned_T)*8 - 1) );
+ return v1*mask + v2*(M)(1-mask);
+ }
+};
+
+/** Let a mask bit decide between two values (specialization for
+ binary-valued mask types)
+ */
+template< typename T, typename M, bool polarity > struct FastIntegerOutputMaskFunctor;
+template< typename T, typename M > struct FastIntegerOutputMaskFunctor<T,M,true> :
+ public MaskFunctorBase<T,M>
+{
+ /// Specialization, only valid if mask can only attain 0 or 1
+ T operator()( T v1, M m, T v2 ) const
+ {
+ OSL_ASSERT(m<=1);
+
+ return v1*(M)(1-m) + v2*m;
+ }
+};
+template< typename T, typename M > struct FastIntegerOutputMaskFunctor<T,M,false> :
+ public MaskFunctorBase<T,M>
+{
+ /// Specialization, only valid if mask can only attain 0 or 1
+ T operator()( T v1, M m, T v2 ) const
+ {
+ OSL_ASSERT(m<=1);
+
+ return v1*m + v2*(M)(1-m);
+ }
+};
+
+//-----------------------------------------------------------------------------
+
+/** Split a pair value from a JoinImageAccessorAdapter into its
+ individual values, and pass it on to a ternary functor
+
+ This wrapper is an adaptable binary functor, and can thus be used
+ with a BinarySetterFunctionAccessorAdapter. Useful e.g. for
+ out-of-image alpha channel, or a masked image.
+
+ @tpl Functor
+ An adaptable ternary functor (as can e.g. be passed to the
+ TernarySetterFunctionAccessorAdapter)
+ */
+template< typename Functor > struct BinaryFunctorSplittingWrapper :
+ public std::binary_function<typename Functor::first_argument_type,
+ std::pair<typename Functor::third_argument_type,
+ typename Functor::second_argument_type>,
+ typename Functor::result_type>
+{
+#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+// making all members public, if no member template friends
+private:
+ template<class A> friend struct BinaryFunctorSplittingWrapper;
+#endif
+ Functor maFunctor;
+
+public:
+ BinaryFunctorSplittingWrapper() : maFunctor() {}
+
+ template< class A > explicit
+ BinaryFunctorSplittingWrapper(
+ BinaryFunctorSplittingWrapper<A> const& src ) : maFunctor(src.maFunctor) {}
+
+ template< class F > explicit
+ BinaryFunctorSplittingWrapper( F const& func ) : maFunctor(func) {}
+
+ typename Functor::result_type operator()(
+ typename Functor::first_argument_type v1,
+ std::pair< typename Functor::third_argument_type,
+ typename Functor::second_argument_type > const& v2 ) const
+ {
+ return maFunctor( v1, v2.second, v2.first );
+ }
+};
+
+} // namespace basebmp
+
+#endif /* INCLUDED_BASEBMP_ACCESSORFUNCTORS_HXX */
diff --git a/basebmp/inc/basebmp/accessortraits.hxx b/basebmp/inc/basebmp/accessortraits.hxx
new file mode 100644
index 000000000000..0cb0d1f8d37d
--- /dev/null
+++ b/basebmp/inc/basebmp/accessortraits.hxx
@@ -0,0 +1,130 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_BASEBMP_ACCESSORTRAITS_HXX
+#define INCLUDED_BASEBMP_ACCESSORTRAITS_HXX
+
+#include <basebmp/accessorfunctors.hxx>
+#include <basebmp/accessoradapters.hxx>
+#include <basebmp/metafunctions.hxx>
+
+#include <functional>
+
+namespace basebmp
+{
+
+struct FastMask;
+struct NoFastMask;
+
+/// Metafunction to select output mask functor from iterator and mask value type
+template< typename T, typename M, bool polarity, typename DUMMY > struct outputMaskFunctorSelector : public
+ ifBothScalarIntegral< T, M,
+ IntegerOutputMaskFunctor< T, M, polarity >,
+ GenericOutputMaskFunctor< T, M, polarity > >
+{
+};
+template< typename T, typename M, bool polarity > struct outputMaskFunctorSelector< T, M, polarity, FastMask > : public
+ ifBothScalarIntegral< T, M,
+ FastIntegerOutputMaskFunctor< T, M, polarity >,
+ GenericOutputMaskFunctor< T, M, polarity > >
+{
+};
+
+/** Metafunction providing a point of configuration for iterators
+ capable of employing the fast output mask functor.
+
+ Specialize this metafunction for your case, and pass FastMask to
+ the outputMaskFunctorSelector.
+ */
+template< class Accessor,
+ class MaskAccessor,
+ class Iterator,
+ class MaskIterator,
+ bool polarity > struct maskedAccessorSelector
+{
+ typedef TernarySetterFunctionAccessorAdapter<
+ Accessor,
+ MaskAccessor,
+ typename outputMaskFunctorSelector<
+ typename Accessor::value_type,
+ typename MaskAccessor::value_type,
+ polarity,
+ NoFastMask > ::type >
+ type;
+};
+
+//-----------------------------------------------------------------------------
+
+/** Traits template for Accessor
+
+ Provides wrapped types for color lookup, raw pixel access, xor and
+ mask accessors.
+ */
+template< class Accessor > struct AccessorTraits
+{
+ /// value type of described accessor
+ typedef typename Accessor::value_type value_type;
+
+ /// Retrieve stand-alone color lookup function for given Accessor type
+ typedef std::project2nd< Accessor, value_type > color_lookup;
+
+ /// Retrieve raw pixel data accessor for given Accessor type
+ typedef Accessor raw_accessor;
+
+ /// Retrieve wrapped accessor for XOR setter access
+ typedef BinarySetterFunctionAccessorAdapter<
+ Accessor,
+ XorFunctor< value_type > > xor_accessor;
+
+ /** Retrieve masked accessor for given types
+
+ A masked accessor works like a filter, where the mask gates
+ the accessor's setter methods (if the mask contains a 0 at a
+ given iterator position, the original value is
+ preserved. Otherwise, the new value gets set).
+
+ @attention be careful when retrieving a masked accessor for a
+ set of types, and using it for a different one - there are
+ partial specializations that take an optimized functor for
+ certain mask accessors.
+ */
+ template< class MaskAccessor,
+ class Iterator,
+ class MaskIterator,
+ bool polarity > struct masked_accessor :
+ public maskedAccessorSelector< Accessor,
+ MaskAccessor,
+ Iterator,
+ MaskIterator,
+ polarity >
+ {};
+
+};
+
+} // namespace basebmp
+
+#endif /* INCLUDED_BASEBMP_ACCESSORTRAITS_HXX */
diff --git a/basebmp/inc/basebmp/bitmapdevice.hxx b/basebmp/inc/basebmp/bitmapdevice.hxx
new file mode 100644
index 000000000000..b1c513444fe6
--- /dev/null
+++ b/basebmp/inc/basebmp/bitmapdevice.hxx
@@ -0,0 +1,692 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_BASEBMP_BITMAPDEVICE_HXX
+#define INCLUDED_BASEBMP_BITMAPDEVICE_HXX
+
+#include <sal/types.h>
+#include <basebmp/drawmodes.hxx>
+
+#include <boost/scoped_ptr.hpp>
+#include <boost/shared_ptr.hpp>
+#include <boost/shared_array.hpp>
+#include <boost/enable_shared_from_this.hpp>
+#include <boost/noncopyable.hpp>
+#include <vector>
+
+namespace basegfx
+{
+ class B2IPoint;
+ class B2DPoint;
+ class B2IVector;
+ class B2IRange;
+ class B2DPolygon;
+ class B2DPolyPolygon;
+}
+
+namespace basebmp
+{
+
+// Temporary. Use like the tools color object
+class Color;
+typedef boost::shared_ptr< class BitmapDevice > BitmapDeviceSharedPtr;
+typedef boost::shared_array< sal_uInt8 > RawMemorySharedArray;
+typedef boost::shared_ptr< const std::vector<Color> > PaletteMemorySharedVector;
+
+struct ImplBitmapDevice;
+
+/** Definition of BitmapDevice interface
+
+ Use the createBitmapDevice() factory method to create instances.
+
+ Implementation note: the clip mask and bitmap parameter instances
+ of BitmapDevice that are passed to individual BitmapDevice
+ instances work best with 1 bit grey masks for the clip and a
+ format matching that of the target BitmapDevice for the other
+ parameters. The alpha mask passed to the drawMaskedColor() methods
+ works best when given as an eight bit grey bitmap. Everything else
+ is accepted, but potentially slow.
+ */
+class BitmapDevice : public boost::enable_shared_from_this<BitmapDevice>,
+ private boost::noncopyable
+{
+public:
+ /** Query size of device in pixel
+ */
+ basegfx::B2IVector getSize() const;
+
+ /** Query whether buffer starts with 0th scanline
+
+ @return true, if the buffer memory starts with the 0th
+ scanline, and false if it starts with the last one. The latter
+ is e.g. the typical scan line ordering for the Windows BMP
+ format.
+ */
+ bool isTopDown() const;
+
+ /** Query type of scanline memory format
+ */
+ sal_Int32 getScanlineFormat() const;
+
+ /** Query byte offset to get from scanline n to scanline n+1
+
+ @return the scanline stride in bytes. In the case of
+ isTopDown()==false, this offset will be negative.
+ */
+ sal_Int32 getScanlineStride() const;
+
+ /** Get pointer to frame buffer
+
+ @return a shared ptr to the bitmap buffer memory. As this is a
+ shared ptr, you can freely store and use the pointer, even
+ after this object has been deleted.
+ */
+ RawMemorySharedArray getBuffer() const;
+
+ /** Get pointer to palette
+
+ The returned pointer is const on purpose, since the
+ BitmapDevice might internally cache lookup information. Don't
+ modify the returned data, unless you want to enter the realm
+ of completely undefined behaviour.
+
+ @return shared pointer to vector of Color entries.
+ */
+ PaletteMemorySharedVector getPalette() const;
+
+ /** Query number of palette entries.
+
+ This is just a frontend for getPalette->size()
+ */
+ sal_Int32 getPaletteEntryCount() const;
+
+ /** Clear whole device with given color
+
+ This method works like a fill with the given color value,
+ resulting in a bitmap uniformly colored in fillColor.
+ */
+ void clear( Color fillColor );
+
+ /** Set given pixel to specified color
+
+ @param rPt
+ Pixel to set
+
+ @param pixelColor
+ Color value to set the pixel to
+
+ @param drawMode
+ Draw mode to use when changing the pixel value
+ */
+ void setPixel( const basegfx::B2IPoint& rPt,
+ Color pixelColor,
+ DrawMode drawMode );
+
+ /** Set given pixel to specified color
+
+ @param rPt
+ Pixel to set
+
+ @param pixelColor
+ Color value to set the pixel to
+
+ @param drawMode
+ Draw mode to use when changing the pixel value
+
+ @param rClip
+ Clip mask to use. If the clip mask is 1 at the given pixel
+ position, no change will take place.
+ */
+ void setPixel( const basegfx::B2IPoint& rPt,
+ Color pixelColor,
+ DrawMode drawMode,
+ const BitmapDeviceSharedPtr& rClip );
+
+ /** Get color value at given pixel
+ */
+ Color getPixel( const basegfx::B2IPoint& rPt );
+
+ /** Get underlying pixel data value at given position
+
+ This method returns the raw pixel data. In the case of
+ paletted bitmaps, this is the palette index, not the final
+ color value.
+ */
+ sal_uInt32 getPixelData( const basegfx::B2IPoint& rPt );
+
+ /** Draw a line
+
+ @param rPt1
+ Start point of the line
+
+ @param rPt2
+ End point of the line. If the analytical line from rP1 to rPt2
+ (with the actual pixel positions assumed to be the center of
+ the pixel) is exactly in the middle between two pixel, this
+ method always selects the pixel closer to rPt1.
+
+ @param lineColor
+ Color value to draw the line with
+
+ @param drawMode
+ Draw mode to use when changing the pixel value
+ */
+ void drawLine( const basegfx::B2IPoint& rPt1,
+ const basegfx::B2IPoint& rPt2,
+ Color lineColor,
+ DrawMode drawMode );
+
+ /** Draw a line
+
+ @param rPt1
+ Start point of the line
+
+ @param rPt2
+ End point of the line. If the analytical line from rP1 to rPt2
+ (with the actual pixel positions assumed to be the center of
+ the pixel) is exactly in the middle between two pixel, this
+ method always selects the pixel closer to rPt1.
+
+ @param lineColor
+ Color value to draw the line with
+
+ @param drawMode
+ Draw mode to use when changing the pixel value
+
+ @param rClip
+ Clip mask to use. Pixel where the corresponding clip mask
+ pixel is 1 will not be modified.
+ */
+ void drawLine( const basegfx::B2IPoint& rPt1,
+ const basegfx::B2IPoint& rPt2,
+ Color lineColor,
+ DrawMode drawMode,
+ const BitmapDeviceSharedPtr& rClip );
+
+ /** Draw a polygon
+
+ @param rPoly
+ Polygon to draw. Depending on the value returned by rPoly's
+ isClosed() method, the resulting line polygon will be drawn
+ closed or not.
+
+ @param lineColor
+ Color value to draw the polygon with
+
+ @param drawMode
+ Draw mode to use when changing pixel values
+ */
+ void drawPolygon( const basegfx::B2DPolygon& rPoly,
+ Color lineColor,
+ DrawMode drawMode );
+
+ /** Draw a polygon
+
+ @param rPoly
+ Polygon to draw. Depending on the value returned by rPoly's
+ isClosed() method, the resulting line polygon will be drawn
+ closed or not.
+
+ @param lineColor
+ Color value to draw the polygon with
+
+ @param drawMode
+ Draw mode to use when changing pixel values
+
+ @param rClip
+ Clip mask to use. Pixel where the corresponding clip mask
+ pixel is 1 will not be modified.
+ */
+ void drawPolygon( const basegfx::B2DPolygon& rPoly,
+ Color lineColor,
+ DrawMode drawMode,
+ const BitmapDeviceSharedPtr& rClip );
+
+ /** Fill a poly-polygon
+
+ @param rPoly
+ Poly-polygon to fill. Regardless of the value returned by
+ rPoly's isClosed() method, the resulting filled poly-polygon
+ is always considered closed. As usual, when filling a shape,
+ the rightmost and bottommost pixel are not filled, compared to
+ the drawPolygon() method. For example, the rectangle
+ (0,0),(1,1) will have four pixel set, when drawn via
+ drawPolygon(), and only one pixel, when filled via
+ fillPolyPolygon().
+
+ @param fillColor
+ Color value to fill the poly-polygon with
+
+ @param drawMode
+ Draw mode to use when changing pixel values
+ */
+ void fillPolyPolygon( const basegfx::B2DPolyPolygon& rPoly,
+ Color fillColor,
+ DrawMode drawMode );
+
+ /** Fill a poly-polygon
+
+ @param rPoly
+ Poly-polygon to fill. Regardless of the value returned by
+ rPoly's isClosed() method, the resulting filled poly-polygon
+ is always considered closed. As usual, when filling a shape,
+ the rightmost and bottommost pixel are not filled, compared to
+ the drawPolygon() method. For example, the rectangle
+ (0,0),(1,1) will have four pixel set, when drawn via
+ drawPolygon(), and only one pixel, when filled via
+ fillPolyPolygon().
+
+ @param fillColor
+ Color value to fill the poly-polygon with
+
+ @param drawMode
+ Draw mode to use when changing pixel values
+
+ @param rClip
+ Clip mask to use. Pixel where the corresponding clip mask
+ pixel is 1 will not be modified.
+ */
+ void fillPolyPolygon( const basegfx::B2DPolyPolygon& rPoly,
+ Color fillColor,
+ DrawMode drawMode,
+ const BitmapDeviceSharedPtr& rClip );
+
+ /** Draw another bitmap into this device
+
+ @param rSrcBitmap
+ Bitmap to render into this one. It is permitted that source
+ and destination bitmap are the same.
+
+ @param rSrcRect
+ Rectangle within the source bitmap to take the pixel from.
+
+ @param rDstRect
+ Rectangle in the destination bitmap to put the pixel
+ into. Source and destination rectangle are permitted to have
+ differing sizes; this method will scale the source pixel
+ accordingly. Please note that both source and destination
+ rectangle are interpreted excluding the rightmost pixel column
+ and the bottommost pixel row, this is much like polygon
+ filling. As a result, filling a given rectangle with
+ fillPolyPolygon(), and using the same rectangle as the
+ destination rectangle of this method, will affect exactly the
+ same set of pixel.
+
+ @param drawMode
+ Draw mode to use when changing pixel values
+ */
+ void drawBitmap( const BitmapDeviceSharedPtr& rSrcBitmap,
+ const basegfx::B2IRange& rSrcRect,
+ const basegfx::B2IRange& rDstRect,
+ DrawMode drawMode );
+
+ /** Draw another bitmap into this device
+
+ @param rSrcBitmap
+ Bitmap to render into this one. It is permitted that source
+ and destination bitmap are the same.
+
+ @param rSrcRect
+ Rectangle within the source bitmap to take the pixel from.
+
+ @param rDstRect
+ Rectangle in the destination bitmap to put the pixel
+ into. Source and destination rectangle are permitted to have
+ differing sizes; this method will scale the source pixel
+ accordingly. Please note that both source and destination
+ rectangle are interpreted excluding the rightmost pixel column
+ and the bottommost pixel row, this is much like polygon
+ filling. As a result, filling a given rectangle with
+ fillPolyPolygon(), and using the same rectangle as the
+ destination rectangle of this method, will affect exactly the
+ same set of pixel.
+
+ @param drawMode
+ Draw mode to use when changing pixel values
+
+ @param rClip
+ Clip mask to use. Pixel where the corresponding clip mask
+ pixel is 1 will not be modified.
+ */
+ void drawBitmap( const BitmapDeviceSharedPtr& rSrcBitmap,
+ const basegfx::B2IRange& rSrcRect,
+ const basegfx::B2IRange& rDstRect,
+ DrawMode drawMode,
+ const BitmapDeviceSharedPtr& rClip );
+
+ /** Draw a color with an alpha-modulation bitmap into this device
+
+ This method takes a fixed color value, and an alpha mask. For
+ each pixel in the alpha mask, the given color value is blended
+ with the corresponding alpha value against the content of this
+ object.
+
+ @param aSrcColor
+ Color value to use for blending
+
+ @param rAlphaMask
+ Alpha mask to use for blending. It is permitted that alpha
+ mask and this bitmap are the same object.
+
+ @param rSrcRect
+ Rectangle within the alpha mask to take the pixel from.
+ Please note that the destination rectangle is interpreted
+ excluding the rightmost pixel column and the bottommost pixel
+ row, this is much like polygon filling. As a result, filling a
+ given rectangle with fillPolyPolygon(), and using the same
+ rectangle as the source rectangle of this method, will affect
+ exactly the same set of pixel.
+
+ @param rDstPoint
+ Destination point, where to start placing the pixel from the
+ source rectangle
+ */
+ void drawMaskedColor( Color aSrcColor,
+ const BitmapDeviceSharedPtr& rAlphaMask,
+ const basegfx::B2IRange& rSrcRect,
+ const basegfx::B2IPoint& rDstPoint );
+
+ /** Draw a color with an alpha-modulation bitmap into this device
+
+ This method takes a fixed color value, and an alpha mask. For
+ each pixel in the alpha mask, the given color value is blended
+ with the corresponding alpha value against the content of this
+ object.
+
+ @param aSrcColor
+ Color value to use for blending
+
+ @param rAlphaMask
+ Alpha mask to use for blending. It is permitted that alpha
+ mask and this bitmap are the same object.
+
+ @param rSrcRect
+ Rectangle within the alpha mask to take the pixel from.
+ Please note that the destination rectangle is interpreted
+ excluding the rightmost pixel column and the bottommost pixel
+ row, this is much like polygon filling. As a result, filling a
+ given rectangle with fillPolyPolygon(), and using the same
+ rectangle as the source rectangle of this method, will affect
+ exactly the same set of pixel.
+
+ @param rDstPoint
+ Destination point, where to start placing the pixel from the
+ source rectangle
+
+ @param rClip
+ Clip mask to use. Pixel where the corresponding clip mask
+ pixel is 1 will not be modified.
+ */
+ void drawMaskedColor( Color aSrcColor,
+ const BitmapDeviceSharedPtr& rAlphaMask,
+ const basegfx::B2IRange& rSrcRect,
+ const basegfx::B2IPoint& rDstPoint,
+ const BitmapDeviceSharedPtr& rClip );
+
+ /** Draw another bitmap through a mask into this device
+
+ This method renders a source bitmap into this device, much
+ like the drawBitmap() method. The only difference is the
+ additional mask parameter, which operates much like an
+ additional clip mask: pixel with value zero in this mask
+ result in destination pixel not being modified.
+
+ @param rSrcBitmap
+ Bitmap to render into this one. It is permitted that source
+ and destination bitmap are the same.
+
+ @param rMask
+ Bitmap to use as a mask. Pixel with value != zero in this mask
+ will result in destination pixel not being affected by the
+ blit operation.
+
+ @param rSrcRect
+ Rectangle within the source bitmap to take the pixel from.
+
+ @param rDstRect
+ Rectangle in the destination bitmap to put the pixel
+ into. Source and destination rectangle are permitted to have
+ differing sizes; this method will scale the source pixel
+ accordingly. Please note that both source and destination
+ rectangle are interpreted excluding the rightmost pixel column
+ and the bottommost pixel row, this is much like polygon
+ filling. As a result, filling a given rectangle with
+ fillPolyPolygon(), and using the same rectangle as the
+ destination rectangle of this method, will affect exactly the
+ same set of pixel.
+
+ @param drawMode
+ Draw mode to use when changing pixel values
+ */
+ void drawMaskedBitmap( const BitmapDeviceSharedPtr& rSrcBitmap,
+ const BitmapDeviceSharedPtr& rMask,
+ const basegfx::B2IRange& rSrcRect,
+ const basegfx::B2IRange& rDstRect,
+ DrawMode drawMode );
+
+ /** Draw another bitmap through a mask into this device
+
+ This method renders a source bitmap into this device, much
+ like the drawBitmap() method. The only difference is the
+ additional mask parameter, which operates much like an
+ additional clip mask: pixel with value != zero in this mask
+ result in destination pixel not being modified.
+
+ @param rSrcBitmap
+ Bitmap to render into this one. It is permitted that source
+ and destination bitmap are the same.
+
+ @param rMask
+ Bitmap to use as a mask. Pixel with value != zero in this mask
+ will result in destination pixel not being affected by the
+ blit operation.
+
+ @param rSrcRect
+ Rectangle within the source bitmap to take the pixel from.
+
+ @param rDstRect
+ Rectangle in the destination bitmap to put the pixel
+ into. Source and destination rectangle are permitted to have
+ differing sizes; this method will scale the source pixel
+ accordingly. Please note that both source and destination
+ rectangle are interpreted excluding the rightmost pixel column
+ and the bottommost pixel row, this is much like polygon
+ filling. As a result, filling a given rectangle with
+ fillPolyPolygon(), and using the same rectangle as the
+ destination rectangle of this method, will affect exactly the
+ same set of pixel.
+
+ @param drawMode
+ Draw mode to use when changing pixel values
+
+ @param rClip
+ Clip mask to use. Pixel where the corresponding clip mask
+ pixel is 1 will not be modified.
+ */
+ void drawMaskedBitmap( const BitmapDeviceSharedPtr& rSrcBitmap,
+ const BitmapDeviceSharedPtr& rMask,
+ const basegfx::B2IRange& rSrcRect,
+ const basegfx::B2IRange& rDstRect,
+ DrawMode drawMode,
+ const BitmapDeviceSharedPtr& rClip );
+
+protected:
+ BitmapDevice( const basegfx::B2IRange& rBounds,
+ sal_Int32 nScanlineFormat,
+ sal_Int32 nScanlineStride,
+ sal_uInt8* pFirstScanline,
+ const RawMemorySharedArray& rMem,
+ const PaletteMemorySharedVector& rPalette );
+
+ virtual ~BitmapDevice();
+
+private:
+ virtual bool isCompatibleBitmap( const BitmapDeviceSharedPtr& bmp ) const = 0;
+ virtual bool isCompatibleClipMask( const BitmapDeviceSharedPtr& bmp ) const = 0;
+ virtual bool isCompatibleAlphaMask( const BitmapDeviceSharedPtr& bmp ) const = 0;
+
+ virtual void clear_i( Color fillColor,
+ const basegfx::B2IRange& rBounds ) = 0;
+
+ virtual void setPixel_i( const basegfx::B2IPoint& rPt,
+ Color lineColor,
+ DrawMode drawMode ) = 0;
+ virtual void setPixel_i( const basegfx::B2IPoint& rPt,
+ Color lineColor,
+ DrawMode drawMode,
+ const BitmapDeviceSharedPtr& rClip ) = 0;
+
+ virtual Color getPixel_i( const basegfx::B2IPoint& rPt ) = 0;
+
+ virtual sal_uInt32 getPixelData_i( const basegfx::B2IPoint& rPt ) = 0;
+
+ virtual void drawLine_i( const basegfx::B2IPoint& rPt1,
+ const basegfx::B2IPoint& rPt2,
+ const basegfx::B2IRange& rBounds,
+ Color lineColor,
+ DrawMode drawMode ) = 0;
+ virtual void drawLine_i( const basegfx::B2IPoint& rPt1,
+ const basegfx::B2IPoint& rPt2,
+ const basegfx::B2IRange& rBounds,
+ Color lineColor,
+ DrawMode drawMode,
+ const BitmapDeviceSharedPtr& rClip ) = 0;
+
+ virtual void drawPolygon_i( const basegfx::B2DPolygon& rPoly,
+ const basegfx::B2IRange& rBounds,
+ Color lineColor,
+ DrawMode drawMode ) = 0;
+ virtual void drawPolygon_i( const basegfx::B2DPolygon& rPoly,
+ const basegfx::B2IRange& rBounds,
+ Color lineColor,
+ DrawMode drawMode,
+ const BitmapDeviceSharedPtr& rClip ) = 0;
+
+ virtual void fillPolyPolygon_i( const basegfx::B2DPolyPolygon& rPoly,
+ Color fillColor,
+ DrawMode drawMode,
+ const basegfx::B2IRange& rBounds ) = 0;
+ virtual void fillPolyPolygon_i( const basegfx::B2DPolyPolygon& rPoly,
+ Color fillColor,
+ DrawMode drawMode,
+ const basegfx::B2IRange& rBounds,
+ const BitmapDeviceSharedPtr& rClip ) = 0;
+
+ // must work with *this == rSrcBitmap!
+ virtual void drawBitmap_i( const BitmapDeviceSharedPtr& rSrcBitmap,
+ const basegfx::B2IRange& rSrcRect,
+ const basegfx::B2IRange& rDstRect,
+ DrawMode drawMode ) = 0;
+ virtual void drawBitmap_i( const BitmapDeviceSharedPtr& rSrcBitmap,
+ const basegfx::B2IRange& rSrcRect,
+ const basegfx::B2IRange& rDstRect,
+ DrawMode drawMode,
+ const BitmapDeviceSharedPtr& rClip ) = 0;
+
+ // must work with *this == rSrcBitmap!
+ virtual void drawMaskedColor_i( Color rSrcColor,
+ const BitmapDeviceSharedPtr& rAlphaMask,
+ const basegfx::B2IRange& rSrcRect,
+ const basegfx::B2IPoint& rDstPoint ) = 0;
+ virtual void drawMaskedColor_i( Color rSrcColor,
+ const BitmapDeviceSharedPtr& rAlphaMask,
+ const basegfx::B2IRange& rSrcRect,
+ const basegfx::B2IPoint& rDstPoint,
+ const BitmapDeviceSharedPtr& rClip ) = 0;
+
+ // must work with *this == rSrcBitmap!
+ virtual void drawMaskedBitmap_i( const BitmapDeviceSharedPtr& rSrcBitmap,
+ const BitmapDeviceSharedPtr& rMask,
+ const basegfx::B2IRange& rSrcRect,
+ const basegfx::B2IRange& rDstRect,
+ DrawMode drawMode ) = 0;
+ virtual void drawMaskedBitmap_i( const BitmapDeviceSharedPtr& rSrcBitmap,
+ const BitmapDeviceSharedPtr& rMask,
+ const basegfx::B2IRange& rSrcRect,
+ const basegfx::B2IRange& rDstRect,
+ DrawMode drawMode,
+ const BitmapDeviceSharedPtr& rClip ) = 0;
+
+ BitmapDeviceSharedPtr getGenericRenderer() const;
+
+ boost::scoped_ptr< ImplBitmapDevice > mpImpl;
+};
+
+/** Factory method to create a BitmapDevice for given scanline format
+ */
+BitmapDeviceSharedPtr createBitmapDevice( const basegfx::B2IVector& rSize,
+ bool bTopDown,
+ sal_Int32 nScanlineFormat );
+
+/** Factory method to create a BitmapDevice for given scanline format
+ with the given palette
+
+ Note: the provided palette must have sufficient size, to satisfy
+ lookups for the whole range of pixel values from the specified
+ format.
+ */
+BitmapDeviceSharedPtr createBitmapDevice( const basegfx::B2IVector& rSize,
+ bool bTopDown,
+ sal_Int32 nScanlineFormat,
+ const PaletteMemorySharedVector& rPalette );
+
+/** Factory method to create a BitmapDevice for given scanline format
+ from the given piece of raw memory and palette
+
+ Note: the provided memory must have sufficient size, to store the
+ image of the specified area and format.
+ */
+BitmapDeviceSharedPtr createBitmapDevice( const basegfx::B2IVector& rSize,
+ bool bTopDown,
+ sal_Int32 nScanlineFormat,
+ const RawMemorySharedArray& rMem,
+ const PaletteMemorySharedVector& rPalette );
+
+
+/** Factory method to retrieve a subsetted BitmapDevice to the same
+ memory.
+
+ This method creates a second bitmap device instance, which renders
+ to the same memory as the original, but to a limited, rectangular
+ area. Useful to implement rectangular clips (usually faster than
+ setting up a 1bpp clip mask).
+ */
+BitmapDeviceSharedPtr subsetBitmapDevice( const BitmapDeviceSharedPtr& rProto,
+ const basegfx::B2IRange& rSubset );
+
+/** Factory method to clone a BitmapDevice from a given prototype.
+
+ All attributes (like scanline format and top-down state) are
+ copied, only the size can be varied. Note that the prototype's
+ bitmap content is <em>not</em> copied, only a palette (if any).
+ */
+BitmapDeviceSharedPtr cloneBitmapDevice( const basegfx::B2IVector& rSize,
+ const BitmapDeviceSharedPtr& rProto );
+
+}
+
+#endif /* INCLUDED_BASEBMP_BITMAPDEVICE_HXX */
diff --git a/basebmp/inc/basebmp/clippedlinerenderer.hxx b/basebmp/inc/basebmp/clippedlinerenderer.hxx
new file mode 100644
index 000000000000..03b2bc860cbd
--- /dev/null
+++ b/basebmp/inc/basebmp/clippedlinerenderer.hxx
@@ -0,0 +1,412 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_BASEBMP_CLIPPEDLINERENDERER_HXX
+#define INCLUDED_BASEBMP_CLIPPEDLINERENDERER_HXX
+
+#include <basegfx/tools/rectcliptools.hxx>
+#include <basegfx/point/b2ipoint.hxx>
+#include <basegfx/range/b2irange.hxx>
+
+#include <vigra/diff2d.hxx>
+#include <vigra/iteratortraits.hxx>
+
+namespace basebmp
+{
+
+// factored-out bresenham setup code, which is used from two different
+// places in renderClippedLine() below. Admittedly messy for the long
+// parameter list...
+inline bool prepareClip( sal_Int32 a1,
+ sal_Int32 a2,
+ sal_Int32 b1,
+ sal_Int32 da,
+ sal_Int32 db,
+ sal_Int32& o_as,
+ sal_Int32& o_bs,
+ int sa,
+ int sb,
+ sal_Int32& io_rem,
+ int& o_n,
+ sal_uInt32 clipCode1,
+ sal_uInt32 clipCount1,
+ sal_uInt32 clipCode2,
+ sal_uInt32 clipCount2,
+ sal_Int32 aMin,
+ sal_uInt32 aMinFlag,
+ sal_Int32 aMax,
+ sal_uInt32 aMaxFlag,
+ sal_Int32 bMin,
+ sal_uInt32 bMinFlag,
+ sal_Int32 bMax,
+ sal_uInt32 bMaxFlag,
+ bool bRoundTowardsPt2 )
+{
+ int ca(0), cb(0);
+ if( clipCode1 )
+ {
+ if( clipCode1 & aMinFlag )
+ {
+ ca = 2*db*(aMin - a1);
+ o_as = aMin;
+ }
+ else if( clipCode1 & aMaxFlag )
+ {
+ ca = 2*db*(a1 - aMax);
+ o_as = aMax;
+ }
+
+ if( clipCode1 & bMinFlag )
+ {
+ cb = 2*da*(bMin - b1);
+ o_bs = bMin;
+ }
+ else if( clipCode1 & bMaxFlag )
+ {
+ cb = 2*da*(b1 - bMax);
+ o_bs = bMax;
+ }
+
+ if( clipCount1 == 2 )
+ clipCode1 &= (ca + da < cb + !bRoundTowardsPt2) ? ~(aMinFlag|aMaxFlag) : ~(bMinFlag|bMaxFlag);
+
+ if( clipCode1 & (aMinFlag|aMaxFlag) )
+ {
+ cb = (ca + da - !bRoundTowardsPt2) / (2*da);
+
+ if( sb >= 0 )
+ {
+ o_bs = b1 + cb;
+ if( o_bs > bMax )
+ return false;
+ }
+ else
+ {
+ o_bs = b1 - cb;
+ if( o_bs < bMin )
+ return false;
+ }
+
+ io_rem += ca - 2*da*cb;
+ }
+ else
+ {
+ ca = (cb - da + 2*db - bRoundTowardsPt2) / (2*db);
+ if( sa >= 0 )
+ {
+ o_as = a1 + ca;
+ if( o_as > aMax )
+ return false;
+ }
+ else
+ {
+ o_as = a1 - ca;
+ if( o_as < aMin )
+ return false;
+ }
+
+ io_rem += 2*db*ca - cb;
+ }
+ }
+ else
+ {
+ o_as = a1; o_bs = b1;
+ }
+
+ bool bRetVal = false;
+ if( clipCode2 )
+ {
+ if( clipCount2 == 2 )
+ {
+ ca = 2*db*((clipCode2 & aMinFlag) ? a1 - aMin : aMax - a1);
+ cb = 2*da*((clipCode2 & bMinFlag) ? b1 - bMin : bMax - b1);
+ clipCode2 &= (cb + da < ca + bRoundTowardsPt2) ? ~(aMinFlag|aMaxFlag) : ~(bMinFlag|bMaxFlag);
+ }
+
+ if( clipCode2 & (aMinFlag|aMaxFlag) )
+ o_n = (clipCode2 & aMinFlag) ? o_as - aMin : aMax - o_as;
+ else
+ {
+ o_n = (clipCode2 & bMinFlag) ? o_bs - bMin : bMax - o_bs;
+ bRetVal = true;
+ }
+ }
+ else
+ o_n = (a2 >= o_as) ? a2 - o_as : o_as - a2;
+
+ return bRetVal;
+}
+
+
+/** Render line to image iterators, clip against given rectangle
+
+ This method renders a line from aPt1 to aPt2, clipped against
+ rClipRect (the clipping will take place pixel-perfect, i.e. as if
+ the original bresenham-rendered line would have been clipped each
+ pixel individually. No slight shifts compared to unclipped lines).
+
+ @param aPt1
+ Start point of the line
+
+ @param aPt2
+ End point of the line
+
+ @param rClipRect
+ Rectangle to clip against
+
+ @param color
+ Color value to render the line with
+
+ @param begin
+ left-top image iterator
+
+ @param end
+ right-bottom image iterator
+
+ @param acc
+ Image accessor
+
+ @param bRoundTowardsPt2
+ Rounding mode to use. Giving false here results in line pixel tend
+ towards pt1, i.e. when a pixel exactly hits the middle between two
+ pixel, the pixel closer to pt1 will be chosen. Giving true here
+ makes renderClippedLine() choose pt2 in those cases.
+ */
+template< class Iterator, class Accessor >
+void renderClippedLine( basegfx::B2IPoint aPt1,
+ basegfx::B2IPoint aPt2,
+ const basegfx::B2IRange& rClipRect,
+ typename Accessor::value_type color,
+ Iterator begin,
+ Accessor acc,
+ bool bRoundTowardsPt2=false )
+{
+ // Algorithm according to Steven Eker's 'Pixel-perfect line clipping',
+ // Graphics Gems V, pp. 314-322
+ sal_uInt32 clipCode1 = basegfx::tools::getCohenSutherlandClipFlags(aPt1,
+ rClipRect);
+ sal_uInt32 clipCode2 = basegfx::tools::getCohenSutherlandClipFlags(aPt2,
+ rClipRect);
+
+ if( clipCode1 & clipCode2 )
+ return; // line fully clipped away
+
+ sal_uInt32 clipCount1 = basegfx::tools::getNumberOfClipPlanes(clipCode1);
+ sal_uInt32 clipCount2 = basegfx::tools::getNumberOfClipPlanes(clipCode2);
+
+ if( (clipCode1 != 0 && clipCode2 == 0)
+ || (clipCount1 == 2 && clipCount2 == 1) )
+ {
+ std::swap(clipCount2,clipCount1);
+ std::swap(clipCode2,clipCode1);
+ std::swap(aPt1,aPt2);
+ bRoundTowardsPt2 = !bRoundTowardsPt2;
+ }
+
+ const sal_Int32 x1 = aPt1.getX();
+ const sal_Int32 x2 = aPt2.getX();
+ const sal_Int32 y1 = aPt1.getY();
+ const sal_Int32 y2 = aPt2.getY();
+
+ // TODO(E1): This might overflow
+ sal_Int32 adx = x2 - x1;
+ int sx = 1;
+ if( adx < 0 )
+ {
+ adx *= -1;
+ sx = -1;
+ }
+
+ // TODO(E1): This might overflow
+ sal_Int32 ady = y2 - y1;
+ int sy = 1;
+ if( ady < 0 )
+ {
+ ady *= -1;
+ sy = -1;
+ }
+
+ int n = 0;
+ sal_Int32 xs = x1;
+ sal_Int32 ys = y1;
+ if( adx >= ady )
+ {
+ // semi-horizontal line
+ sal_Int32 rem = 2*ady - adx - !bRoundTowardsPt2;
+
+ const bool bUseAlternateBresenham(
+ prepareClip(x1, x2, y1, adx, ady, xs, ys, sx, sy,
+ rem, n, clipCode1, clipCount1, clipCode2, clipCount2,
+ rClipRect.getMinX(), basegfx::tools::RectClipFlags::LEFT,
+ rClipRect.getMaxX(), basegfx::tools::RectClipFlags::RIGHT,
+ rClipRect.getMinY(), basegfx::tools::RectClipFlags::TOP,
+ rClipRect.getMaxY(), basegfx::tools::RectClipFlags::BOTTOM,
+ bRoundTowardsPt2 ));
+
+ Iterator currIter( begin + vigra::Diff2D(0,ys) );
+ typename vigra::IteratorTraits<Iterator>::row_iterator
+ rowIter( currIter.rowIterator() + xs );
+
+ adx *= 2;
+ ady *= 2;
+
+ if( bUseAlternateBresenham )
+ {
+ while(true)
+ {
+ acc.set(color, rowIter);
+
+ if( rem >= 0 )
+ {
+ if( --n < 0 )
+ break;
+
+ ys += sy;
+ xs += sx;
+ rem -= adx;
+
+ currIter.y += sy;
+ rowIter = currIter.rowIterator() + xs;
+ }
+ else
+ {
+ xs += sx;
+ rowIter += sx;
+ }
+
+ rem += ady;
+ }
+ }
+ else
+ {
+ while(true)
+ {
+ acc.set(color, rowIter);
+
+ if( --n < 0 )
+ break;
+
+ if( rem >= 0 )
+ {
+ ys += sy;
+ xs += sx;
+ rem -= adx;
+
+ currIter.y += sy;
+ rowIter = currIter.rowIterator() + xs;
+ }
+ else
+ {
+ xs += sx;
+ rowIter += sx;
+ }
+
+ rem += ady;
+ }
+ }
+ }
+ else
+ {
+ // semi-vertical line
+ sal_Int32 rem = 2*adx - ady - !bRoundTowardsPt2;
+
+ const bool bUseAlternateBresenham(
+ prepareClip(y1, y2, x1, ady, adx, ys, xs, sy, sx,
+ rem, n, clipCode1, clipCount1, clipCode2, clipCount2,
+ rClipRect.getMinY(), basegfx::tools::RectClipFlags::TOP,
+ rClipRect.getMaxY(), basegfx::tools::RectClipFlags::BOTTOM,
+ rClipRect.getMinX(), basegfx::tools::RectClipFlags::LEFT,
+ rClipRect.getMaxX(), basegfx::tools::RectClipFlags::RIGHT,
+ bRoundTowardsPt2 ));
+
+ Iterator currIter( begin + vigra::Diff2D(xs,0) );
+ typename vigra::IteratorTraits<Iterator>::column_iterator
+ colIter( currIter.columnIterator() + ys );
+
+ adx *= 2;
+ ady *= 2;
+
+ if( bUseAlternateBresenham )
+ {
+ while(true)
+ {
+ acc.set(color, colIter);
+
+ if( rem >= 0 )
+ {
+ if( --n < 0 )
+ break;
+
+ xs += sx;
+ ys += sy;
+ rem -= ady;
+
+ currIter.x += sx;
+ colIter = currIter.columnIterator() + ys;
+ }
+ else
+ {
+ ys += sy;
+ colIter += sy;
+ }
+
+ rem += adx;
+ }
+ }
+ else
+ {
+ while(true)
+ {
+ acc.set(color, colIter);
+
+ if( --n < 0 )
+ break;
+
+ if( rem >= 0 )
+ {
+ xs += sx;
+ ys += sy;
+ rem -= ady;
+
+ currIter.x += sx;
+ colIter = currIter.columnIterator() + ys;
+ }
+ else
+ {
+ ys += sy;
+ colIter += sy;
+ }
+
+ rem += adx;
+ }
+ }
+ }
+}
+
+} // namespace basebmp
+
+#endif /* INCLUDED_BASEBMP_CLIPPEDLINERENDERER_HXX */
diff --git a/basebmp/inc/basebmp/color.hxx b/basebmp/inc/basebmp/color.hxx
new file mode 100644
index 000000000000..e9aab93a715c
--- /dev/null
+++ b/basebmp/inc/basebmp/color.hxx
@@ -0,0 +1,99 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_BASEBMP_COLOR_HXX
+#define INCLUDED_BASEBMP_COLOR_HXX
+
+#include <sal/types.h>
+#include <rtl/math.hxx>
+
+namespace basebmp
+{
+
+class Color
+{
+private:
+ sal_uInt32 mnColor;
+
+public:
+ typedef sal_uInt32 value_type;
+ typedef sal_uInt8 component_type;
+
+ Color() : mnColor(0) {}
+ explicit Color( sal_uInt32 nVal ) : mnColor(nVal) {}
+ Color( sal_uInt8 nRed, sal_uInt8 nGreen, sal_uInt8 nBlue ) :
+ mnColor( ((sal_uInt32)nRed << 16) | ((sal_uInt32)nGreen << 8) | nBlue )
+ {}
+
+ void setRed( sal_uInt8 nRed ) { mnColor &= ~0x00FF0000UL; mnColor |= (sal_uInt32)nRed << 16; }
+ void setGreen( sal_uInt8 nGreen ) { mnColor &= ~0x0000FF00UL; mnColor |= (sal_uInt32)nGreen << 8; }
+ void setBlue( sal_uInt8 nBlue ) { mnColor &= ~0x000000FFUL; mnColor |= nBlue; }
+
+ void setGrey( sal_uInt8 nGreyVal ) { mnColor = (sal_uInt32)nGreyVal << 16 | (sal_uInt32)nGreyVal << 8 | nGreyVal; }
+
+ sal_uInt8 getRed() const { return 0xFF & (sal_uInt8)(mnColor >> 16); }
+ sal_uInt8 getGreen() const { return 0xFF & (sal_uInt8)(mnColor >> 8); }
+ sal_uInt8 getBlue() const { return 0xFF & (sal_uInt8)mnColor; }
+
+ sal_uInt8 getGreyscale() const { return (sal_uInt8)((getBlue()*28UL +
+ getGreen()*151 +
+ getRed()*77) / 256); }
+
+ sal_uInt32 toInt32() const { return mnColor; }
+
+ bool operator!() const { return mnColor == 0; }
+ Color operator&( sal_uInt32 nMask ) const { return Color(mnColor & nMask); }
+ Color operator^( Color col ) const { return Color(col.getRed()^getRed(),
+ col.getGreen()^getGreen(),
+ col.getBlue()^getBlue()); }
+ Color operator-( Color col ) const { return Color((sal_uInt8)abs((int)getRed()-col.getRed()),
+ (sal_uInt8)abs((int)getGreen()-col.getGreen()),
+ (sal_uInt8)abs((int)getBlue()-col.getBlue())); }
+ Color operator+( Color col ) const { return Color(getRed()+col.getRed(),
+ getGreen()+col.getGreen(),
+ getBlue()+col.getBlue()); }
+ Color operator*( Color col ) const { return Color((sal_uInt8)((sal_uInt32)col.getRed()*getRed()/SAL_MAX_UINT8),
+ (sal_uInt8)((sal_uInt32)col.getGreen()*getGreen()/SAL_MAX_UINT8),
+ (sal_uInt8)((sal_uInt32)col.getBlue()*getBlue()/SAL_MAX_UINT8)); }
+ Color operator*( sal_uInt8 n ) const { return Color((sal_uInt8)((sal_uInt32)n*getRed()/SAL_MAX_UINT8),
+ (sal_uInt8)((sal_uInt32)n*getGreen()/SAL_MAX_UINT8),
+ (sal_uInt8)((sal_uInt32)n*getBlue()/SAL_MAX_UINT8)); }
+ Color operator*( double n ) const { return Color((sal_uInt8)(n*getRed()+.5),
+ (sal_uInt8)(n*getGreen()+.5),
+ (sal_uInt8)(n*getBlue()+.5)); }
+ bool operator==( const Color& rhs ) const { return (getRed()==rhs.getRed() &&
+ getGreen()==rhs.getGreen() &&
+ getBlue()==rhs.getBlue()); }
+ bool operator!=( const Color& rhs ) const { return !(*this==rhs); }
+ double magnitude() const { return sqrt((double)getRed()*getRed()
+ + getGreen()*getGreen()
+ + getBlue()*getBlue()); }
+};
+
+} // namespace vigra
+
+#endif /* INCLUDED_BASEBMP_COLOR_HXX */
diff --git a/basebmp/inc/basebmp/colorblendaccessoradapter.hxx b/basebmp/inc/basebmp/colorblendaccessoradapter.hxx
new file mode 100644
index 000000000000..03263c2c6062
--- /dev/null
+++ b/basebmp/inc/basebmp/colorblendaccessoradapter.hxx
@@ -0,0 +1,148 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_BASEBMP_COLORBLENDACCESSORADAPTER_HXX
+#define INCLUDED_BASEBMP_COLORBLENDACCESSORADAPTER_HXX
+
+#include <basebmp/colortraits.hxx>
+
+namespace basebmp
+{
+
+/** Accessor adapter that blends input value against fixed color value
+
+ Used to blend an alpha mask 'through' a fixed color value into the
+ destination.
+
+ The getter functors return a constant value (usually the zero of
+ the value type, this preserves the original destination content
+ when blitting through a mask) - there really isn't no other
+ sensible default behaviour for these methods.
+ */
+template< class WrappedAccessor,
+ typename AlphaType,
+ bool polarity > class ConstantColorBlendSetterAccessorAdapter
+{
+public:
+ typedef AlphaType alpha_type;
+ typedef AlphaType value_type;
+ typedef typename WrappedAccessor::value_type color_type;
+
+private:
+ typename ColorTraits< color_type >::
+ template blend_functor<alpha_type,polarity>::type maFunctor;
+ WrappedAccessor maWrappee;
+ color_type maBlendColor;
+ value_type maGetterValue;
+
+public:
+ ConstantColorBlendSetterAccessorAdapter() :
+ maFunctor(),
+ maWrappee(),
+ maBlendColor(),
+ maGetterValue()
+ {}
+
+ template< class T > explicit ConstantColorBlendSetterAccessorAdapter( T acc ) :
+ maFunctor(),
+ maWrappee(acc),
+ maBlendColor(),
+ maGetterValue()
+ {}
+
+ template< class T > ConstantColorBlendSetterAccessorAdapter( T acc,
+ color_type col ) :
+ maFunctor(),
+ maWrappee(acc),
+ maBlendColor(col),
+ maGetterValue()
+ {}
+
+ template< class T > ConstantColorBlendSetterAccessorAdapter( T acc,
+ color_type col,
+ value_type val ) :
+ maFunctor(),
+ maWrappee(acc),
+ maBlendColor(col),
+ maGetterValue(val)
+ {}
+
+ // -------------------------------------------------------
+
+ void setColor( color_type col ) { maBlendColor=col; }
+ color_type getColor() { return maBlendColor; }
+ void setGetterValue( value_type val ) { maGetterValue=val; }
+ value_type getGetterValue() { return maGetterValue; }
+
+ // -------------------------------------------------------
+
+ WrappedAccessor const& getWrappedAccessor() const { return maWrappee; }
+ WrappedAccessor& getWrappedAccessor() { return maWrappee; }
+
+ // -------------------------------------------------------
+
+ /// @return constant value, regardless of iterator content
+ template< typename IteratorType > value_type operator()(IteratorType const& ) const
+ {
+ return maGetterValue;
+ }
+ /// @return constant value, regardless of iterator content
+ template< typename IteratorType, class Difference >
+ value_type operator()(IteratorType const& , Difference const& ) const
+ {
+ return maGetterValue;
+ }
+
+ // -------------------------------------------------------
+
+ template< typename V, typename IteratorType >
+ void set(V const& value, IteratorType const& i) const
+ {
+ maWrappee.set(
+ maFunctor(
+ vigra::detail::RequiresExplicitCast<alpha_type>::cast(value),
+ maWrappee(i),
+ maBlendColor),
+ i );
+ }
+
+ template< typename V, typename IteratorType, class Difference >
+ void set(V const& value, IteratorType const& i, Difference const& diff) const
+ {
+ maWrappee.set(
+ maFunctor(
+ vigra::detail::RequiresExplicitCast<alpha_type>::cast(value),
+ maWrappee(i,diff),
+ maBlendColor),
+ i,
+ diff );
+ }
+};
+
+} // namespace basebmp
+
+#endif /* INCLUDED_BASEBMP_COLORBLENDACCESSORADAPTER_HXX */
diff --git a/basebmp/inc/basebmp/colormisc.hxx b/basebmp/inc/basebmp/colormisc.hxx
new file mode 100644
index 000000000000..0974ebaa44a4
--- /dev/null
+++ b/basebmp/inc/basebmp/colormisc.hxx
@@ -0,0 +1,191 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_BASEBMP_COLORMISC_HXX
+#define INCLUDED_BASEBMP_COLORMISC_HXX
+
+#include <osl/diagnose.h>
+#include <basebmp/color.hxx>
+#include <basebmp/colortraits.hxx>
+#include <basebmp/accessortraits.hxx>
+#include <vigra/mathutil.hxx>
+
+// Contents of this header moved out of color.hxx, as it is not useful
+// for the general public (drags in vigra and other template
+// functionality, that shouldn't be necessary for the ordinary client
+// of BitmapDevice etc.)
+
+namespace basebmp
+{
+
+template< bool polarity > struct ColorBitmaskOutputMaskFunctor;
+template<> struct ColorBitmaskOutputMaskFunctor<true> : MaskFunctorBase<Color,sal_uInt8>
+{
+ Color operator()( Color v1, sal_uInt8 m, Color v2 ) const
+ {
+ OSL_ASSERT(m<=1);
+
+ return Color(v1.toInt32()*(sal_uInt8)(1-m) + v2.toInt32()*m);
+ }
+};
+template<> struct ColorBitmaskOutputMaskFunctor<false> : MaskFunctorBase<Color,sal_uInt8>
+{
+ Color operator()( Color v1, sal_uInt8 m, Color v2 ) const
+ {
+ OSL_ASSERT(m<=1);
+
+ return Color(v1.toInt32()*m + v2.toInt32()*(sal_uInt8)(1-m));
+ }
+};
+
+/// Specialized output mask functor for Color value type
+template<bool polarity> struct outputMaskFunctorSelector< Color, sal_uInt8, polarity, FastMask >
+{
+ typedef ColorBitmaskOutputMaskFunctor<polarity> type;
+};
+
+template< bool polarity > struct ColorBlendFunctor8
+ : public TernaryFunctorBase<sal_uInt8,Color,Color,Color>
+{
+ Color operator()( sal_uInt8 alpha,
+ Color v1,
+ Color v2 ) const
+ {
+ alpha = polarity ? alpha : 255 - alpha;
+
+ const sal_uInt8 v1_red( v1.getRed() );
+ const sal_uInt8 v1_green( v1.getGreen() );
+ const sal_uInt8 v1_blue( v1.getBlue() );
+
+ // using '>> 8' instead of '/ 0x100' is ill-advised (shifted
+ // value might be negative). Better rely on decent optimizer
+ // here...
+ return Color(((((sal_Int32)v2.getRed() - v1_red)*alpha) / 0x100) + v1_red,
+ ((((sal_Int32)v2.getGreen() - v1_green)*alpha) / 0x100) + v1_green,
+ ((((sal_Int32)v2.getBlue() - v1_blue)*alpha) / 0x100) + v1_blue);
+ }
+};
+
+template< bool polarity > struct ColorBlendFunctor32
+ : public TernaryFunctorBase<Color,Color,Color,Color>
+{
+ Color operator()( Color input,
+ Color v1,
+ Color v2 ) const
+ {
+ sal_uInt8 alpha = input.getGreyscale();
+ alpha = polarity ? alpha : 255 - alpha;
+
+ const sal_uInt8 v1_red( v1.getRed() );
+ const sal_uInt8 v1_green( v1.getGreen() );
+ const sal_uInt8 v1_blue( v1.getBlue() );
+
+ // using '>> 8' instead of '/ 0x100' is ill-advised (shifted
+ // value might be negative). Better rely on decent optimizer
+ // here...
+ return Color(((((sal_Int32)v2.getRed() - v1_red)*alpha) / 0x100) + v1_red,
+ ((((sal_Int32)v2.getGreen() - v1_green)*alpha) / 0x100) + v1_green,
+ ((((sal_Int32)v2.getBlue() - v1_blue)*alpha) / 0x100) + v1_blue);
+ }
+};
+
+//-----------------------------------------------------------------------------
+
+template<> struct ColorTraits< Color >
+{
+ /// @return number of color channels
+ static int numChannels() { return 3; }
+
+ /// Type of a color component (i.e. the type of an individual channel)
+ typedef sal_uInt8 component_type;
+
+ /// Metafunction to select blend functor from color and alpha type
+ template< typename AlphaType, bool polarity > struct blend_functor;
+
+ /// Calculate normalized distance between color c1 and c2
+ static inline double distance( const Color& c1,
+ const Color& c2 )
+ {
+ return (c1 - c2).magnitude();
+ }
+
+ static inline component_type toGreyscale( const Color& c )
+ {
+ return c.getGreyscale();
+ }
+
+ static inline Color fromGreyscale( component_type c )
+ {
+ return Color(c,c,c);
+ }
+};
+
+/// The version for plain 8 bit alpha
+template<bool polarity> struct ColorTraits< Color >::blend_functor< sal_uInt8, polarity >
+{
+ typedef ColorBlendFunctor8<polarity> type;
+};
+
+/// The version taking grey value of a Color
+template<bool polarity> struct ColorTraits< Color >::blend_functor< Color, polarity >
+{
+ typedef ColorBlendFunctor32<polarity> type;
+};
+
+} // namespace basebmp
+
+namespace vigra
+{
+
+template<>
+struct NumericTraits<basebmp::Color>
+{
+ typedef basebmp::Color Type;
+ typedef basebmp::Color Promote;
+ typedef basebmp::Color RealPromote;
+ typedef std::complex<basebmp::Color> ComplexPromote;
+ typedef sal_uInt8 ValueType;
+
+ typedef VigraTrueType isIntegral;
+ typedef VigraFalseType isScalar;
+ typedef VigraTrueType isSigned;
+ typedef VigraTrueType isOrdered;
+ typedef VigraFalseType isComplex;
+
+ static Type zero() { return Type(); }
+ static Type one() { return Type(0x01010101); }
+ static Type nonZero() { return Type(0x01010101); }
+
+ static Promote toPromote(const Type& v) { return v; }
+ static RealPromote toRealPromote(const Type& v) { return v; }
+ static Type fromPromote(const Promote& v) { return v; }
+ static Type fromRealPromote(const RealPromote& v) { return v; }
+};
+
+} // namespace vigra
+
+#endif /* INCLUDED_BASEBMP_COLORMISC_HXX */
diff --git a/basebmp/inc/basebmp/colortraits.hxx b/basebmp/inc/basebmp/colortraits.hxx
new file mode 100644
index 000000000000..9c30b8f082c0
--- /dev/null
+++ b/basebmp/inc/basebmp/colortraits.hxx
@@ -0,0 +1,150 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_BASEBMP_COLORTRAITS_HXX
+#define INCLUDED_BASEBMP_COLORTRAITS_HXX
+
+#include <basebmp/accessoradapters.hxx>
+#include <basebmp/metafunctions.hxx>
+
+#include <vigra/mathutil.hxx>
+
+namespace basebmp
+{
+
+/** Functor template, to calculate alpha blending between two
+ values. Float case.
+
+ @tpl polarity
+ When true, 0 means fully transparent, and 1 fully opaque. And vice
+ versa.
+ */
+template< typename ValueType,
+ typename AlphaType,
+ bool polarity > struct BlendFunctor;
+template< typename ValueType,
+ typename AlphaType > struct BlendFunctor<ValueType,AlphaType,true>
+ : public TernaryFunctorBase<AlphaType,ValueType,ValueType,ValueType>
+{
+ ValueType operator()( AlphaType alpha,
+ ValueType v1,
+ ValueType v2 ) const
+ {
+ const typename vigra::NumericTraits<AlphaType>::RealPromote fAlpha(
+ vigra::NumericTraits<AlphaType>::toRealPromote(alpha));
+ return (vigra::NumericTraits<AlphaType>::one()-fAlpha)*v1 + fAlpha*v2;
+ }
+};
+template< typename ValueType,
+ typename AlphaType > struct BlendFunctor<ValueType,AlphaType,false>
+ : public TernaryFunctorBase<AlphaType,ValueType,ValueType,ValueType>
+{
+ ValueType operator()( AlphaType alpha,
+ ValueType v1,
+ ValueType v2 ) const
+ {
+ const typename vigra::NumericTraits<AlphaType>::RealPromote fAlpha(
+ vigra::NumericTraits<AlphaType>::toRealPromote(alpha));
+ return fAlpha*v1 + (vigra::NumericTraits<AlphaType>::one()-fAlpha)*v2;
+ }
+};
+
+/** Functor template, to calculate alpha blending between two
+ values. Integer case.
+
+ @tpl polarity
+ When true, 0 means fully transparent, and 1 fully opaque. And vice
+ versa.
+ */
+template< typename ValueType,
+ typename AlphaType,
+ bool polarity > struct IntegerBlendFunctor;
+template< typename ValueType,
+ typename AlphaType > struct IntegerBlendFunctor<ValueType,AlphaType,true>
+ : public TernaryFunctorBase<AlphaType,ValueType,ValueType,ValueType>
+{
+ ValueType operator()( AlphaType alpha,
+ ValueType v1,
+ ValueType v2 ) const
+ {
+ return (vigra::NumericTraits<AlphaType>::toPromote(
+ vigra::NumericTraits<AlphaType>::max()-alpha)*v1 + alpha*v2) /
+ vigra::NumericTraits<AlphaType>::max();
+ }
+};
+template< typename ValueType,
+ typename AlphaType > struct IntegerBlendFunctor<ValueType,AlphaType,false>
+ : public TernaryFunctorBase<AlphaType,ValueType,ValueType,ValueType>
+{
+ ValueType operator()( AlphaType alpha,
+ ValueType v1,
+ ValueType v2 ) const
+ {
+ return (alpha*v1 +
+ vigra::NumericTraits<AlphaType>::toPromote(
+ vigra::NumericTraits<AlphaType>::max()-alpha)*v2) /
+ vigra::NumericTraits<AlphaType>::max();
+ }
+};
+
+//-----------------------------------------------------------------------------
+
+template< typename ColorType > struct ColorTraits
+{
+ /// Metafunction to select blend functor from color and alpha type
+ template< typename AlphaType, bool polarity > struct blend_functor : public
+ ifScalarIntegral< AlphaType,
+ IntegerBlendFunctor< ColorType, AlphaType, polarity >,
+ BlendFunctor< ColorType, AlphaType, polarity > > {};
+
+ /// @return number of color channels
+ static int numChannels() { return 1; }
+
+ /// Type of a color component (i.e. the type of an individual channel)
+ typedef ColorType component_type;
+
+ /// Calculate normalized distance between color c1 and c2
+ static inline vigra::NormTraits<ColorType> distance( ColorType c1,
+ ColorType c2 )
+ {
+ return vigra::norm(c1 - c2);
+ }
+
+ static inline component_type toGreyscale( ColorType c )
+ {
+ return c;
+ }
+
+ static inline ColorType fromGreyscale( component_type c )
+ {
+ return c;
+ }
+};
+
+} // namespace basebmp
+
+#endif /* INCLUDED_BASEBMP_COLORTRAITS_HXX */
diff --git a/basebmp/inc/basebmp/compositeiterator.hxx b/basebmp/inc/basebmp/compositeiterator.hxx
new file mode 100755
index 000000000000..70f2acebb043
--- /dev/null
+++ b/basebmp/inc/basebmp/compositeiterator.hxx
@@ -0,0 +1,367 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_BASEBMP_COMPOSITEITERATOR_HXX
+#define INCLUDED_BASEBMP_COMPOSITEITERATOR_HXX
+
+#include <sal/types.h>
+#include <osl/diagnose.h>
+
+#include <basebmp/nonstandarditerator.hxx>
+#include <vigra/tuple.hxx>
+#include <vigra/iteratortraits.hxx>
+
+
+namespace basebmp
+{
+
+namespace detail
+{
+ template< typename T1, typename T2 > class ArithmeticProxy
+ {
+ public:
+ ArithmeticProxy(T1& val1, T2& val2) :
+ mpVal1( &val1 ),
+ mpVal2( &val2 )
+ {}
+
+ void operator++() { ++(*mpVal1); ++(*mpVal2); }
+ void operator++(int) { (*mpVal1)++; (*mpVal2)++; }
+ void operator--() { --(*mpVal1); --(*mpVal2); }
+ void operator--(int) { (*mpVal1)--; (*mpVal2)--; }
+ void operator+=(int d) {*mpVal1+=d; *mpVal2+=d; }
+ void operator-=(int d) {*mpVal1-=d; *mpVal2-=d; }
+
+ bool operator==(ArithmeticProxy const & rhs) const
+ { return *mpVal1==*rhs.mpVal1 && *mpVal2==*rhs.mpVal2; }
+
+ bool operator!=(ArithmeticProxy const & rhs) const
+ { return *mpVal1!=*rhs.mpVal1 || *mpVal2!=*rhs.mpVal2; }
+
+ bool operator<(ArithmeticProxy const & rhs) const
+ { return *mpVal1<*rhs.mpVal1 && *mpVal2<*rhs.mpVal2; }
+
+ bool operator<=(ArithmeticProxy const & rhs) const
+ { return *mpVal1<=*rhs.mpVal1 && *mpVal2<=*rhs.mpVal2; }
+
+ bool operator>(ArithmeticProxy const & rhs) const
+ { return *mpVal1>*rhs.mpVal1 && *mpVal2>*rhs.mpVal2; }
+
+ bool operator>=(ArithmeticProxy const & rhs) const
+ { return *mpVal1>=*rhs.mpVal1 && *mpVal2>=*rhs.mpVal2; }
+
+ int operator-(ArithmeticProxy const & rhs) const
+ { return *mpVal1 - *rhs.mpVal1; }
+
+ private:
+ T1* mpVal1;
+ T2* mpVal2;
+ };
+
+ template< typename Iterator1,
+ typename Iterator2,
+ typename ValueType,
+ typename DifferenceType,
+ typename IteratorCategory,
+ class Derived >
+ class CompositeIteratorBase : public NonStandardIterator
+ {
+ public:
+ typedef Iterator1 iterator1_type;
+ typedef Iterator2 iterator2_type;
+ typedef ValueType value_type;
+ typedef DifferenceType difference_type;
+ typedef IteratorCategory iterator_category;
+
+ protected:
+ iterator1_type maIter1;
+ iterator2_type maIter2;
+
+ private:
+ bool equal(CompositeIteratorBase const & rhs) const
+ {
+ return (maIter1 == rhs.maIter1) && (maIter2 == rhs.maIter2);
+ }
+
+ public:
+ CompositeIteratorBase() :
+ maIter1(),
+ maIter2()
+ {}
+
+ CompositeIteratorBase( const iterator1_type& rIter1, const iterator2_type& rIter2 ) :
+ maIter1( rIter1 ),
+ maIter2( rIter2 )
+ {}
+
+ bool operator==(Derived const & rhs) const
+ {
+ return equal(rhs);
+ }
+
+ bool operator!=(Derived const & rhs) const
+ {
+ return !equal(rhs);
+ }
+
+ difference_type operator-(Derived const & rhs) const
+ {
+ OSL_ASSERT( maIter1 - rhs.maIter1 == maIter2 - rhs.maIter2 );
+ return maIter1 - rhs.maIter1;
+ }
+
+ Derived & operator+=(difference_type const & s)
+ {
+ maIter1 += s;
+ maIter2 += s;
+ return static_cast<Derived&>(*this);
+ }
+
+ Derived & operator-=(difference_type const & s)
+ {
+ maIter1 -= s;
+ maIter2 -= s;
+ return static_cast<Derived&>(*this);
+ }
+
+ Derived operator+(difference_type const & s) const
+ {
+ Derived ret(static_cast<Derived const&>(*this));
+ ret += s;
+ return ret;
+ }
+
+ Derived operator-(difference_type const & s) const
+ {
+ Derived ret(static_cast<Derived const&>(*this));
+ ret -= s;
+ return ret;
+ }
+
+ Derived& operator++()
+ {
+ ++maIter1;
+ ++maIter2;
+ return static_cast<Derived&>(*this);
+ }
+
+ Derived& operator--()
+ {
+ --maIter1;
+ --maIter2;
+ return static_cast<Derived&>(*this);
+ }
+
+ Derived operator++(int)
+ {
+ Derived ret(static_cast<Derived const&>(*this));
+ ++maIter1;
+ ++maIter2;
+ return ret;
+ }
+
+ Derived operator--(int)
+ {
+ Derived ret(static_cast<Derived const&>(*this));
+ --maIter1;
+ --maIter2;
+ return ret;
+ }
+
+ value_type get() const
+ {
+ return value_type(maIter1.get(),
+ maIter2.get());
+ }
+
+ value_type get(difference_type const & d) const
+ {
+ return value_type(maIter1.get(d),
+ maIter2.get(d));
+ }
+
+ void set( value_type v ) const
+ {
+ maIter1.set(v);
+ maIter2.set(v);
+ }
+
+ void set( value_type v, difference_type const & d ) const
+ {
+ maIter1.set(v,d);
+ maIter2.set(v,d);
+ }
+
+ const iterator1_type& first() const { return maIter1; }
+ iterator1_type& first() { return maIter1; }
+
+ const iterator2_type& second() const { return maIter2; }
+ iterator2_type& second() { return maIter2; }
+ };
+}
+
+/** Provide the composition of two 1D image iterators
+
+ Use this template to compose two iterators into one (e.g. image
+ and mask). Operations are transitive, e.g. operator== only returns
+ true, if both wrapped iterator operator== have yielded true.
+
+ Note that both iterators must have compatible difference types. To
+ avoid funny effects, iterator ranges given by a CompositeIterator
+ should consist of wrapped iterators of similar range
+ */
+template< typename Iterator1,
+ typename Iterator2,
+ typename ValueType,
+ typename DifferenceType,
+ typename IteratorCategory >
+class CompositeIterator1D :
+ public detail::CompositeIteratorBase< Iterator1,
+ Iterator2,
+ ValueType,
+ DifferenceType,
+ IteratorCategory,
+ CompositeIterator1D<Iterator1,
+ Iterator2,
+ ValueType,
+ DifferenceType,
+ IteratorCategory> >
+{
+ typedef detail::CompositeIteratorBase< Iterator1,
+ Iterator2,
+ ValueType,
+ DifferenceType,
+ IteratorCategory,
+ CompositeIterator1D<Iterator1,
+ Iterator2,
+ ValueType,
+ DifferenceType,
+ IteratorCategory> > base_type;
+public:
+ CompositeIterator1D() :
+ base_type()
+ {}
+
+ CompositeIterator1D( const Iterator1& rIter1,
+ const Iterator2& rIter2 ) :
+ base_type( rIter1, rIter2 )
+ {}
+};
+
+/** Provide the composition of two 2D image iterators
+
+ Use this template to compose two iterators into one (e.g. image
+ and mask). Operations are transitive, e.g. operator== only returns
+ true, if both wrapped iterator operator== have yielded true.
+
+ Note that both iterators must have compatible difference types. To
+ avoid funny effects, iterator ranges given by a CompositeIterator
+ should consist of wrapped iterators of similar range
+ */
+template< typename Iterator1, typename Iterator2 > class CompositeIterator2D :
+ public detail::CompositeIteratorBase< Iterator1,
+ Iterator2,
+ std::pair<
+ typename vigra::IteratorTraits<Iterator1>::value_type,
+ typename vigra::IteratorTraits<Iterator2>::value_type >,
+ typename vigra::IteratorTraits<Iterator1>::difference_type,
+ typename vigra::IteratorTraits<Iterator1>::iterator_category,
+ CompositeIterator2D<Iterator1, Iterator2> >
+{
+ typedef detail::CompositeIteratorBase< Iterator1,
+ Iterator2,
+ std::pair<
+ typename vigra::IteratorTraits<Iterator1>::value_type,
+ typename vigra::IteratorTraits<Iterator2>::value_type >,
+ typename vigra::IteratorTraits<Iterator1>::difference_type,
+ typename vigra::IteratorTraits<Iterator1>::iterator_category,
+ CompositeIterator2D<Iterator1, Iterator2> > base_type;
+public:
+ typedef CompositeIterator1D< typename Iterator1::row_iterator,
+ typename Iterator2::row_iterator,
+ typename base_type::value_type,
+ int,
+ typename base_type::iterator_category > row_iterator;
+ typedef CompositeIterator1D< typename Iterator1::column_iterator,
+ typename Iterator2::column_iterator,
+ typename base_type::value_type,
+ int,
+ typename base_type::iterator_category > column_iterator;
+
+ typedef detail::ArithmeticProxy< typename Iterator1::MoveX,
+ typename Iterator2::MoveX > MoveX;
+ typedef detail::ArithmeticProxy< typename Iterator1::MoveY,
+ typename Iterator2::MoveY > MoveY;
+
+ MoveX x;
+ MoveY y;
+
+ CompositeIterator2D() :
+ base_type(),
+ x(this->maIter1.x,this->maIter2.x),
+ y(this->maIter1.y,this->maIter2.y)
+ {}
+
+ CompositeIterator2D( const Iterator1& rIter1, const Iterator2& rIter2 ) :
+ base_type( rIter1, rIter2 ),
+ x(this->maIter1.x,this->maIter2.x),
+ y(this->maIter1.y,this->maIter2.y)
+ {}
+
+ CompositeIterator2D( const CompositeIterator2D& rOld ) :
+ base_type(rOld),
+ x(this->maIter1.x,this->maIter2.x),
+ y(this->maIter1.y,this->maIter2.y)
+ {}
+
+ CompositeIterator2D& operator=( const CompositeIterator2D& rNew )
+ {
+ this->maIter1 = rNew.maIter1;
+ this->maIter2 = rNew.maIter2;
+
+ x = MoveX(this->maIter1.x,
+ this->maIter2.x);
+ y = MoveY(this->maIter1.y,
+ this->maIter2.y);
+ }
+
+ row_iterator rowIterator() const
+ {
+ return row_iterator(this->maIter1.rowIterator(),
+ this->maIter2.rowIterator());
+ }
+
+ column_iterator columnIterator() const
+ {
+ return column_iterator(this->maIter1.columnIterator(),
+ this->maIter2.columnIterator());
+ }
+};
+
+} // namespace basebmp
+
+#endif /* INCLUDED_BASEBMP_COMPOSITEITERATOR_HXX */
diff --git a/basebmp/inc/basebmp/debug.hxx b/basebmp/inc/basebmp/debug.hxx
new file mode 100644
index 000000000000..a01d69326307
--- /dev/null
+++ b/basebmp/inc/basebmp/debug.hxx
@@ -0,0 +1,50 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_BASEBMP_DEBUG_HXX
+#define INCLUDED_BASEBMP_DEBUG_HXX
+
+#include <iostream>
+#include <boost/shared_ptr.hpp>
+
+namespace basebmp
+{
+ class BitmapDevice;
+
+ /** Dump content of BitmapDevice to given output stream.
+
+ @param rDevice
+ Device whose content should be dumped.
+
+ @param rOutputStream
+ Stream to write output to.
+ */
+ void debugDump( const boost::shared_ptr< BitmapDevice >& rDevice,
+ ::std::ostream& rOutputStream );
+}
+
+#endif /* INCLUDED_BASEBMP_DEBUG_HXX */
diff --git a/basebmp/inc/basebmp/drawmodes.hxx b/basebmp/inc/basebmp/drawmodes.hxx
new file mode 100644
index 000000000000..6cdf34fd808a
--- /dev/null
+++ b/basebmp/inc/basebmp/drawmodes.hxx
@@ -0,0 +1,55 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_BASEBMP_DRAWMODES_HXX
+#define INCLUDED_BASEBMP_DRAWMODES_HXX
+
+/* Definition of Draw modes */
+
+namespace basebmp
+{
+ enum DrawMode
+ {
+ /** Default draw mode, which simply renders pixel in the
+ requested color
+ */
+ DrawMode_PAINT,
+
+ /** XOR draw mode, which XORs each existing pixel value with
+ the new color.
+
+ The result of this XOR operation strongly depends on the
+ underlying pixel format, as it is defined by the bitwise
+ XOR of the (potentially palette-looked-up) color value and
+ the existing pixel content (being it true color or a
+ palette index).
+ */
+ DrawMode_XOR
+ };
+}
+
+#endif /* INCLUDED_BASEBMP_DRAWMODES_HXX */
diff --git a/basebmp/inc/basebmp/endian.hxx b/basebmp/inc/basebmp/endian.hxx
new file mode 100644
index 000000000000..fb76ad1b306e
--- /dev/null
+++ b/basebmp/inc/basebmp/endian.hxx
@@ -0,0 +1,57 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_BASEBMP_ENDIAN_HXX
+#define INCLUDED_BASEBMP_ENDIAN_HXX
+
+#include <osl/endian.h>
+
+namespace basebmp
+{
+
+/// Swap the order of bytes for the given POD type
+template< typename T > inline T byteSwap( T );
+
+#define BASEBMP_BYTE_SWAP(Type,SwapFunc) \
+ template<> inline Type byteSwap<Type>( Type v ) \
+ { \
+ return SwapFunc(v); \
+ }
+
+// byteSwap<T> shall fail for any type T not in the list below
+BASEBMP_BYTE_SWAP(sal_Int8,)
+BASEBMP_BYTE_SWAP(sal_uInt8,)
+BASEBMP_BYTE_SWAP(sal_Int16,OSL_SWAPWORD)
+BASEBMP_BYTE_SWAP(sal_uInt16,OSL_SWAPWORD)
+BASEBMP_BYTE_SWAP(sal_Int32,OSL_SWAPDWORD)
+BASEBMP_BYTE_SWAP(sal_uInt32,OSL_SWAPDWORD)
+
+#undef BASEBMP_BYTE_SWAP
+
+} // namespace basebmp
+
+#endif /* INCLUDED_BASEBMP_ENDIAN_HXX */
diff --git a/basebmp/inc/basebmp/fillimage.hxx b/basebmp/inc/basebmp/fillimage.hxx
new file mode 100644
index 000000000000..344ee20e6ce5
--- /dev/null
+++ b/basebmp/inc/basebmp/fillimage.hxx
@@ -0,0 +1,69 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_BASEBMP_FILLIMAGE_HXX
+#define INCLUDED_BASEBMP_FILLIMAGE_HXX
+
+#include <vigra/tuple.hxx>
+#include <vigra/iteratortraits.hxx>
+
+namespace basebmp
+{
+
+template< class DestIterator, class DestAccessor, typename T >
+void fillImage( DestIterator begin,
+ DestIterator end,
+ DestAccessor ad,
+ T fillVal )
+{
+ const int width ( end.x - begin.x );
+ const int height( end.y - begin.y );
+
+ for( int y=0; y<height; ++y, ++begin.y )
+ {
+ typename vigra::IteratorTraits<DestIterator>::row_iterator
+ rowIter( begin.rowIterator() );
+ const typename vigra::IteratorTraits<DestIterator>::row_iterator
+ rowEnd( rowIter + width );
+
+ // TODO(P2): Provide specialized span fill methods on the
+ // iterator/accessor
+ while( rowIter != rowEnd )
+ ad.set(fillVal, rowIter++);
+ }
+}
+
+template< class DestIterator, class DestAccessor, typename T >
+inline void fillImage( vigra::triple<DestIterator,DestIterator,DestAccessor> const& src,
+ T fillVal )
+{
+ fillImage(src.first,src.second,src.third,fillVal);
+}
+
+} // namespace basebmp
+
+#endif /* INCLUDED_BASEBMP_FILLIMAGE_HXX */
diff --git a/basebmp/inc/basebmp/genericcolorimageaccessor.hxx b/basebmp/inc/basebmp/genericcolorimageaccessor.hxx
new file mode 100644
index 000000000000..eaf8e2b34bfa
--- /dev/null
+++ b/basebmp/inc/basebmp/genericcolorimageaccessor.hxx
@@ -0,0 +1,82 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_BASEBMP_GENERICCOLORIMAGEACCESSOR_HXX
+#define INCLUDED_BASEBMP_GENERICCOLORIMAGEACCESSOR_HXX
+
+#include <basebmp/color.hxx>
+#include <basebmp/bitmapdevice.hxx>
+
+namespace basebmp
+{
+ /** Access a BitmapDevice generically
+
+ This accessor deals with an opaque BitmapDevice generically,
+ via getPixel()/setPixel() at the published interface.
+ */
+ class GenericColorImageAccessor
+ {
+ BitmapDeviceSharedPtr mpDevice;
+ DrawMode meDrawMode;
+
+ public:
+ typedef Color value_type;
+
+ explicit GenericColorImageAccessor( BitmapDeviceSharedPtr const& rTarget ) :
+ mpDevice(rTarget),
+ meDrawMode(DrawMode_PAINT)
+ {}
+
+ GenericColorImageAccessor( BitmapDeviceSharedPtr const& rTarget,
+ DrawMode eDrawMode ) :
+ mpDevice(rTarget),
+ meDrawMode(eDrawMode)
+ {}
+
+ template< typename Iterator >
+ Color operator()( Iterator const& i ) const
+ { return mpDevice->getPixel( basegfx::B2IPoint( i->x,i->y ) ); }
+
+ template< typename Iterator, typename Difference >
+ Color operator()( Iterator const& i, Difference const& diff) const
+ { return mpDevice->getPixel( basegfx::B2IPoint( i[diff]->x,
+ i[diff]->y ) ); }
+
+ template< typename Iterator >
+ void set(Color const& value, Iterator const& i) const
+ { return mpDevice->setPixel( basegfx::B2IPoint( i->x,i->y ),
+ value, meDrawMode ); }
+
+ template< class Iterator, class Difference >
+ void set(value_type const& value, Iterator const& i, Difference const& diff) const
+ { return mpDevice->setPixel( basegfx::B2IPoint( i[diff]->x,
+ i[diff]->y ),
+ value, meDrawMode ); }
+ };
+}
+
+#endif /* INCLUDED_BASEBMP_GENERICCOLORIMAGEACCESSOR_HXX */
diff --git a/basebmp/inc/basebmp/greylevelformats.hxx b/basebmp/inc/basebmp/greylevelformats.hxx
new file mode 100644
index 000000000000..0adbcbb53c30
--- /dev/null
+++ b/basebmp/inc/basebmp/greylevelformats.hxx
@@ -0,0 +1,135 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_BASEBMP_GREYLEVELFORMATS_HXX
+#define INCLUDED_BASEBMP_GREYLEVELFORMATS_HXX
+
+#include <basebmp/color.hxx>
+#include <basebmp/colortraits.hxx>
+#include <basebmp/accessor.hxx>
+#include <basebmp/pixeliterator.hxx>
+#include <basebmp/packedpixeliterator.hxx>
+#include <basebmp/pixelformatadapters.hxx>
+#include <basebmp/metafunctions.hxx>
+
+#include <vigra/numerictraits.hxx>
+#include <vigra/metaprogramming.hxx>
+
+#include <functional>
+
+namespace basebmp
+{
+
+template< typename PixelType,
+ typename ColorType,
+ int UsedRange > struct GreylevelGetter :
+ public std::unary_function<PixelType, ColorType>
+{
+ ColorType operator()( PixelType const& c ) const
+ {
+ return ColorTraits<ColorType>::fromGreyscale(
+ vigra::NumericTraits<PixelType>::toPromote(c) *
+ vigra::NumericTraits<PixelType>::maxConst / UsedRange );
+ }
+};
+
+template< typename PixelType,
+ typename ColorType,
+ int UsedRange > struct GreylevelSetter :
+ public std::unary_function<ColorType, PixelType>
+{
+ PixelType operator()( ColorType const& c ) const
+ {
+ return vigra::NumericTraits<PixelType>::toPromote(
+ ColorTraits<ColorType>::toGreyscale(c)) *
+ UsedRange /
+ vigra::NumericTraits<PixelType>::maxConst;
+ }
+};
+
+//-----------------------------------------------------------------------------
+
+template< class Iterator,
+ class Accessor,
+ int UsedRange > struct PixelFormatTraitsTemplate_Greylevel
+{
+ typedef typename Iterator::value_type pixel_type;
+
+ typedef GreylevelGetter<pixel_type,
+ Color,
+ UsedRange> getter_type;
+ typedef GreylevelSetter<pixel_type,
+ Color,
+ UsedRange> setter_type;
+
+ typedef Iterator iterator_type;
+ typedef Accessor raw_accessor_type;
+ typedef AccessorSelector<
+ getter_type,
+ setter_type > accessor_selector;
+};
+
+template< int BitsPerPixel,
+ bool MsbFirst > struct PixelFormatTraitsTemplate_PackedGreylevel :
+ public PixelFormatTraitsTemplate_Greylevel<
+ PackedPixelIterator< sal_uInt8,
+ BitsPerPixel,
+ true >,
+ NonStandardAccessor< sal_uInt8 >,
+ (1UL << BitsPerPixel)-1 >
+{};
+
+//-----------------------------------------------------------------------------
+
+// 1bpp MSB
+typedef PixelFormatTraitsTemplate_PackedGreylevel<1, true> PixelFormatTraits_GREY1_MSB;
+
+// 1bpp LSB
+typedef PixelFormatTraitsTemplate_PackedGreylevel<1, false> PixelFormatTraits_GREY1_LSB;
+BASEBMP_SPECIALIZE_ACCESSORTRAITS(PixelFormatTraits_GREY1_MSB::getter_type,
+ PixelFormatTraits_GREY1_MSB::setter_type);
+
+
+// 4bpp MSB
+typedef PixelFormatTraitsTemplate_PackedGreylevel<4, true> PixelFormatTraits_GREY4_MSB;
+
+// 4bpp LSB
+typedef PixelFormatTraitsTemplate_PackedGreylevel<4, false> PixelFormatTraits_GREY4_LSB;
+BASEBMP_SPECIALIZE_ACCESSORTRAITS(PixelFormatTraits_GREY4_MSB::getter_type,
+ PixelFormatTraits_GREY4_MSB::setter_type);
+
+// 8bpp
+typedef PixelFormatTraitsTemplate_Greylevel<
+ PixelIterator< sal_uInt8 >,
+ StandardAccessor< sal_uInt8 >,
+ 255 > PixelFormatTraits_GREY8;
+BASEBMP_SPECIALIZE_ACCESSORTRAITS(PixelFormatTraits_GREY8::getter_type,
+ PixelFormatTraits_GREY8::setter_type);
+
+} // namespace basebmp
+
+#endif /* INCLUDED_BASEBMP_GREYLEVELFORMATS_HXX */
diff --git a/basebmp/inc/basebmp/iteratortraits.hxx b/basebmp/inc/basebmp/iteratortraits.hxx
new file mode 100644
index 000000000000..716081f62c53
--- /dev/null
+++ b/basebmp/inc/basebmp/iteratortraits.hxx
@@ -0,0 +1,55 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_BASEBMP_ITERATORTRAITS_HXX
+#define INCLUDED_BASEBMP_ITERATORTRAITS_HXX
+
+#include <basebmp/accessor.hxx>
+#include <basebmp/nonstandarditerator.hxx>
+
+namespace basebmp
+{
+
+template< class Iterator > struct IteratorTraits
+{
+ /// VigraTrueType, if iterator does not provide *operator()/operator[] methods
+ typedef typename vigra::IsDerivedFrom<Iterator,NonStandardIterator>::result
+ isNonStandardIterator;
+
+ /// Retrieve default accessor for this iterator (and given value type)
+ template< typename ValueType > struct defaultAccessor : public
+ // select according to non-standardness of iterator type
+ vigra::If< isNonStandardIterator,
+ NonStandardAccessor< ValueType >,
+ StandardAccessor< ValueType > >
+ {};
+
+};
+
+} // namespace basebmp
+
+#endif /* INCLUDED_BASEBMP_ITERATORTRAITS_HXX */
diff --git a/basebmp/inc/basebmp/linerenderer.hxx b/basebmp/inc/basebmp/linerenderer.hxx
new file mode 100644
index 000000000000..7c5f09dbb2d1
--- /dev/null
+++ b/basebmp/inc/basebmp/linerenderer.hxx
@@ -0,0 +1,181 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_BASEBMP_LINERENDERER_HXX
+#define INCLUDED_BASEBMP_LINERENDERER_HXX
+
+#include <basegfx/point/b2ipoint.hxx>
+
+#include <vigra/diff2d.hxx>
+#include <vigra/iteratortraits.hxx>
+
+
+/* Scan-converting lines */
+
+namespace basebmp
+{
+
+/** Render line with Bresenham
+
+ This function renders the line given by rPt1 and rPt2 using the
+ Bresenham algorithm with the specified color value. Make sure rPt1
+ and rPt1 are valid coordinates in the image given by begin and
+ end, since no clipping takes place.
+
+ @param aPt1
+ Start point of the line
+
+ @param aPt2
+ End point of the line
+
+ @param color
+ Color value to render the line with
+
+ @param begin
+ left-top image iterator
+
+ @param end
+ right-bottom image iterator
+
+ @param acc
+ Image accessor
+
+ @param bRoundTowardsPt2
+ Rounding mode to use. Giving false here results in line pixel tend
+ towards pt1, i.e. when a pixel exactly hits the middle between two
+ pixel, the pixel closer to pt1 will be chosen. Giving true here
+ makes renderClippedLine() choose pt2 in those cases.
+ */
+template< class Iterator, class Accessor >
+void renderLine( const basegfx::B2IPoint& rPt1,
+ const basegfx::B2IPoint& rPt2,
+ typename Accessor::value_type color,
+ Iterator begin,
+ Accessor acc,
+ bool bRoundTowardsPt2=false )
+{
+ // code inspired by Paul Heckbert's Digital Line Drawing
+ // (Graphics Gems, Academic Press 1990)
+ const sal_Int32 x1 = rPt1.getX();
+ const sal_Int32 x2 = rPt2.getX();
+ const sal_Int32 y1 = rPt1.getY();
+ const sal_Int32 y2 = rPt2.getY();
+
+ // TODO(E1): This might overflow
+ sal_Int32 adx = x2 - x1;
+ int sx = 1;
+ if( adx < 0 )
+ {
+ adx *= -1;
+ sx = -1;
+ }
+
+ // TODO(E1): This might overflow
+ sal_Int32 ady = y2 - y1;
+ int sy = 1;
+ if( ady < 0 )
+ {
+ ady *= -1;
+ sy = -1;
+ }
+
+ // TODO(P3): handle horizontal and vertical lines specially
+ sal_Int32 xs = x1;
+ sal_Int32 ys = y1;
+ if( adx >= ady )
+ {
+ // semi-horizontal line
+ sal_Int32 rem = 2*ady - adx - !bRoundTowardsPt2;
+ adx *= 2;
+ ady *= 2;
+
+ Iterator currIter( begin + vigra::Diff2D(0,ys) );
+ typename vigra::IteratorTraits<Iterator>::row_iterator
+ rowIter( currIter.rowIterator() + xs );
+ while(true)
+ {
+ acc.set(color, rowIter);
+
+ if( xs == x2 )
+ return;
+
+ if( rem >= 0 )
+ {
+ ys += sy;
+ xs += sx;
+ currIter.y += sy;
+ rowIter = currIter.rowIterator() + xs;
+ rem -= adx;
+ }
+ else
+ {
+ xs += sx;
+ rowIter += sx;
+ }
+
+ rem += ady;
+ }
+ }
+ else
+ {
+ // semi-vertical line
+ sal_Int32 rem = 2*adx - ady - !bRoundTowardsPt2;
+ adx *= 2;
+ ady *= 2;
+
+ Iterator currIter( begin + vigra::Diff2D(xs,0) );
+ typename vigra::IteratorTraits<Iterator>::column_iterator
+ colIter( currIter.columnIterator() + ys );
+ while(true)
+ {
+ acc.set(color, colIter);
+
+ if( ys == y2 )
+ return;
+
+ if( rem >= 0 )
+ {
+ xs += sx;
+ ys += sy;
+ currIter.x += sx;
+ colIter = currIter.columnIterator() + ys;
+ rem -= ady;
+ }
+ else
+ {
+ ys += sy;
+ colIter += sy;
+ }
+
+ rem += adx;
+ }
+ }
+}
+
+} // namespace basebmp
+
+#endif /* INCLUDED_BASEBMP_LINERENDERER_HXX */
diff --git a/basebmp/inc/basebmp/metafunctions.hxx b/basebmp/inc/basebmp/metafunctions.hxx
new file mode 100644
index 000000000000..7eafac284f56
--- /dev/null
+++ b/basebmp/inc/basebmp/metafunctions.hxx
@@ -0,0 +1,222 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_BASEBMP_METAFUNCTIONS_HXX
+#define INCLUDED_BASEBMP_METAFUNCTIONS_HXX
+
+#include <boost/mpl/integral_c.hpp>
+#include <vigra/metaprogramming.hxx>
+#include <vigra/numerictraits.hxx>
+
+namespace basebmp
+{
+
+// TODO(Q3): move to generic place (o3tl?)
+
+/** template meta function: add const qualifier to 2nd type, if given
+ 1st type has it
+*/
+template<typename A, typename B> struct clone_const
+{
+ typedef B type;
+};
+template<typename A, typename B> struct clone_const<const A,B>
+{
+ typedef const B type;
+};
+
+/** template meta function: add const qualifier to plain type (if not
+ already there)
+ */
+template <typename T> struct add_const
+{
+ typedef const T type;
+};
+template <typename T> struct add_const<const T>
+{
+ typedef const T type;
+};
+
+/// template meta function: remove const qualifier from plain type
+template <typename T> struct remove_const
+{
+ typedef T type;
+};
+template <typename T> struct remove_const<const T>
+{
+ typedef T type;
+};
+
+//--------------------------------------------------------------
+
+/// Base class for an adaptable ternary functor
+template< typename A1, typename A2, typename A3, typename R > struct TernaryFunctorBase
+{
+ typedef A1 first_argument_type;
+ typedef A2 second_argument_type;
+ typedef A3 third_argument_type;
+ typedef R result_type;
+};
+
+//--------------------------------------------------------------
+
+/** template meta function: ensure that given integer type is unsigned
+
+ If given integer type is already unsigned, return as-is -
+ otherwise, convert to unsigned type of same or greater range.
+ */
+template< typename T > struct make_unsigned;
+
+#define BASEBMP_MAKE_UNSIGNED(T,U) \
+ template<> struct make_unsigned<T> { \
+ typedef U type; \
+ };
+
+BASEBMP_MAKE_UNSIGNED(signed char,unsigned char)
+BASEBMP_MAKE_UNSIGNED(unsigned char,unsigned char)
+BASEBMP_MAKE_UNSIGNED(short,unsigned short)
+BASEBMP_MAKE_UNSIGNED(unsigned short,unsigned short)
+BASEBMP_MAKE_UNSIGNED(int,unsigned int)
+BASEBMP_MAKE_UNSIGNED(unsigned int,unsigned int)
+BASEBMP_MAKE_UNSIGNED(long,unsigned long)
+BASEBMP_MAKE_UNSIGNED(unsigned long,unsigned long)
+
+#undef BASEBMP_MAKE_UNSIGNED
+
+/// cast integer to unsigned type of similar size
+template< typename T > inline typename make_unsigned<T>::type unsigned_cast( T value )
+{
+ return static_cast< typename make_unsigned<T>::type >(value);
+}
+
+//--------------------------------------------------------------
+
+/// returns true, if given number is strictly less than 0
+template< typename T > inline bool is_negative( T x )
+{
+ return x < 0;
+}
+
+/// Overload for ints (branch-free)
+inline bool is_negative( int x )
+{
+ // force logic shift (result for signed shift right is undefined)
+ return static_cast<unsigned int>(x) >> (sizeof(int)*8-1);
+}
+
+//--------------------------------------------------------------
+
+/// Results in VigraTrueType, if T is of integer type and scalar
+template< typename T, typename trueCase, typename falseCase >
+struct ifScalarIntegral
+{
+ typedef
+ typename vigra::If<
+ typename vigra::NumericTraits< T >::isIntegral,
+ typename vigra::If<
+ typename vigra::NumericTraits< T >::isScalar,
+ trueCase,
+ falseCase >::type,
+ falseCase >::type type;
+};
+
+/// Results in VigraTrueType, if T is of non-integer type and scalar
+template< typename T, typename trueCase, typename falseCase >
+struct ifScalarNonIntegral
+{
+ typedef
+ typename vigra::If<
+ typename vigra::NumericTraits< T >::isIntegral,
+ falseCase,
+ typename vigra::If<
+ typename vigra::NumericTraits< T >::isScalar,
+ trueCase,
+ falseCase >::type >::type type;
+};
+
+/// Results in VigraTrueType, if both T1 and T2 are of integer type and scalar
+template< typename T1, typename T2, typename trueCase, typename falseCase >
+struct ifBothScalarIntegral
+{
+ typedef
+ typename ifScalarIntegral<
+ T1,
+ typename ifScalarIntegral<
+ T2,
+ trueCase,
+ falseCase >::type,
+ falseCase >::type type;
+};
+
+//--------------------------------------------------------------
+
+/// Count number of trailing zeros
+template< unsigned int val > struct numberOfTrailingZeros
+{
+ enum { next = val >> 1 };
+ enum { value = vigra::IfBool< (val & 1) == 0,
+ numberOfTrailingZeros<next>,
+ boost::mpl::integral_c< int,-1 > > ::type::value + 1 };
+};
+
+template<> struct numberOfTrailingZeros<0>
+{
+ enum { value = 0 };
+};
+
+//--------------------------------------------------------------
+
+/// Count number of one bits
+template< unsigned int val > struct bitcount
+{
+ enum { next = val >> 1 };
+ enum { value = bitcount<next>::value + (val & 1) };
+};
+
+template<> struct bitcount<0>
+{
+ enum { value = 0 };
+};
+
+//--------------------------------------------------------------
+
+/// Shift left for positive shift value, and right otherwise
+template< typename T > inline T shiftLeft( T v, int shift )
+{
+ return shift > 0 ? v << shift : v >> (-shift);
+}
+
+/// Shift right for positive shift value, and left otherwise
+template< typename T > inline T shiftRight( T v, int shift )
+{
+ return shift > 0 ? v >> shift : v << (-shift);
+}
+
+
+} // namespace basebmp
+
+#endif /* INCLUDED_BASEBMP_METAFUNCTIONS_HXX */
diff --git a/basebmp/inc/basebmp/nonstandarditerator.hxx b/basebmp/inc/basebmp/nonstandarditerator.hxx
new file mode 100644
index 000000000000..c9069da18826
--- /dev/null
+++ b/basebmp/inc/basebmp/nonstandarditerator.hxx
@@ -0,0 +1,45 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_BASEBMP_NONSTANDARDITERATOR_HXX
+#define INCLUDED_BASEBMP_NONSTANDARDITERATOR_HXX
+
+#include <vigra/metaprogramming.hxx>
+
+namespace basebmp
+{
+ /// Base class defining pointer and reference types as VigraFalseType
+ struct NonStandardIterator
+ {
+ typedef vigra::VigraFalseType reference;
+ typedef vigra::VigraFalseType index_reference;
+ typedef vigra::VigraFalseType pointer;
+ };
+
+} // namespace basebmp
+
+#endif /* INCLUDED_BASEBMP_NONSTANDARDITERATOR_HXX */
diff --git a/basebmp/inc/basebmp/packedpixeliterator.hxx b/basebmp/inc/basebmp/packedpixeliterator.hxx
new file mode 100644
index 000000000000..0a48ce2024ff
--- /dev/null
+++ b/basebmp/inc/basebmp/packedpixeliterator.hxx
@@ -0,0 +1,677 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_BASEBMP_PACKEDPIXELITERATOR_HXX
+#define INCLUDED_BASEBMP_PACKEDPIXELITERATOR_HXX
+
+#include <basebmp/metafunctions.hxx>
+#include <basebmp/stridedarrayiterator.hxx>
+#include <basebmp/nonstandarditerator.hxx>
+#include <basebmp/accessortraits.hxx>
+
+#include <boost/static_assert.hpp>
+#include <vigra/metaprogramming.hxx>
+#include <vigra/diff2d.hxx>
+
+namespace basebmp
+{
+
+/// Get bitmask for data at given intra-word position, for given bit depth
+template< typename value_type,
+ int bits_per_pixel,
+ bool MsbFirst,
+ typename difference_type >
+inline value_type get_mask( difference_type d )
+{
+ BOOST_STATIC_ASSERT(bits_per_pixel > 0);
+ BOOST_STATIC_ASSERT(sizeof(value_type)*8 % bits_per_pixel == 0);
+ BOOST_STATIC_ASSERT(sizeof(value_type)*8 / bits_per_pixel > 1);
+ BOOST_STATIC_ASSERT(vigra::TypeTraits<value_type>::isPOD::asBool);
+
+ const unsigned int nIntraWordPositions( sizeof(value_type)*8 / bits_per_pixel );
+
+ // create bits_per_pixel 1s shift to intra-word position
+ return ((~(~0 << bits_per_pixel)) << bits_per_pixel*(MsbFirst ?
+ (nIntraWordPositions-1 - (d % nIntraWordPositions)) :
+ (d % nIntraWordPositions)));
+}
+
+template< int num_intraword_positions, int bits_per_pixel, bool MsbFirst, typename difference_type > inline difference_type get_shift( difference_type remainder )
+{
+ return bits_per_pixel*(MsbFirst ?
+ (num_intraword_positions - 1 - remainder) :
+ remainder);
+}
+
+template< typename Valuetype,
+ int bits_per_pixel,
+ bool MsbFirst > class PackedPixelColumnIterator : public NonStandardIterator
+{
+public:
+ // no reference, no index_reference type here
+ typedef Valuetype value_type;
+ typedef int difference_type;
+ typedef image_traverser_tag iterator_category;
+
+ typedef typename remove_const<value_type>::type mask_type;
+ typedef value_type* pointer;
+ typedef StridedArrayIterator< value_type > MoveY;
+
+ enum {
+ /** The number of pixel within a single value_type value
+ */
+ num_intraword_positions=sizeof(value_type)*8/bits_per_pixel,
+ /** Bit mask for one pixel (least significant bits)
+ */
+ bit_mask=~(~0 << bits_per_pixel)
+ };
+
+private:
+ MoveY y;
+ mask_type mask_;
+ difference_type shift_;
+
+ void inc()
+ {
+ ++y;
+ }
+
+ void dec()
+ {
+ --y;
+ }
+
+ bool equal( PackedPixelColumnIterator const & rhs ) const
+ {
+ return rhs.y == y;
+ }
+
+ bool less( PackedPixelColumnIterator const & rhs ) const
+ {
+ return y < rhs.y;
+ }
+
+public:
+ PackedPixelColumnIterator() :
+ y(0),
+ mask_( get_mask<value_type, bits_per_pixel, MsbFirst, difference_type>(0) ),
+ shift_( get_shift<num_intraword_positions, bits_per_pixel, MsbFirst, difference_type>(0) )
+ {}
+
+ PackedPixelColumnIterator( const MoveY& base, difference_type remainder ) :
+ y(base),
+ mask_( get_mask<value_type, bits_per_pixel, MsbFirst>(remainder) ),
+ shift_( get_shift<num_intraword_positions, bits_per_pixel, MsbFirst>(remainder) )
+ {}
+
+ PackedPixelColumnIterator& operator+=( difference_type d )
+ {
+ y += d;
+ return *this;
+ }
+
+ PackedPixelColumnIterator& operator-=( difference_type d )
+ {
+ y -= d;
+ return *this;
+ }
+
+ PackedPixelColumnIterator operator+( difference_type d )
+ {
+ PackedPixelColumnIterator res(*this);
+ res += d;
+ return res;
+ }
+
+ PackedPixelColumnIterator operator-( difference_type d )
+ {
+ PackedPixelColumnIterator res(*this);
+ res -= d;
+ return res;
+ }
+
+ PackedPixelColumnIterator& operator++()
+ {
+ inc();
+ return *this;
+ }
+
+ PackedPixelColumnIterator& operator--()
+ {
+ dec();
+ return *this;
+ }
+
+ PackedPixelColumnIterator operator++(int)
+ {
+ PackedPixelColumnIterator res(*this);
+ inc();
+ return res;
+ }
+
+ PackedPixelColumnIterator operator--(int)
+ {
+ PackedPixelColumnIterator res(*this);
+ dec();
+ return res;
+ }
+
+ bool operator==(PackedPixelColumnIterator const & rhs) const
+ {
+ return equal( rhs );
+ }
+
+ bool operator!=(PackedPixelColumnIterator const & rhs) const
+ {
+ return !equal( rhs );
+ }
+
+ bool operator<(PackedPixelColumnIterator const & rhs) const
+ {
+ return less(rhs);
+ }
+
+ bool operator<=(PackedPixelColumnIterator const & rhs) const
+ {
+ return !rhs.less(*this);
+ }
+
+ bool operator>(PackedPixelColumnIterator const & rhs) const
+ {
+ return rhs.less(*this);
+ }
+
+ bool operator>=(PackedPixelColumnIterator const & rhs) const
+ {
+ return !less(rhs);
+ }
+
+ difference_type operator-(PackedPixelColumnIterator const & rhs) const
+ {
+ return y - rhs.y;
+ }
+
+ value_type get() const
+ {
+ return unsigned_cast<value_type>(*y() & mask_) >> shift_;
+ }
+
+ value_type get(difference_type d) const
+ {
+ return unsigned_cast<value_type>(*y(d) & mask_) >> shift_;
+ }
+
+ void set( value_type v ) const
+ {
+ const value_type pixel_value( (v << shift_) & mask_ );
+ *y() = (*y() & ~mask_) | pixel_value;
+ }
+
+ void set( value_type v, difference_type d ) const
+ {
+ const value_type pixel_value( (v << shift_) & mask_ );
+ *y(d) = (*y(d) & ~mask_) | pixel_value;
+ }
+};
+
+template< typename Valuetype,
+ int bits_per_pixel,
+ bool MsbFirst > class PackedPixelRowIterator : public NonStandardIterator
+{
+public:
+ // no reference, no index_reference type here
+ typedef Valuetype value_type;
+ typedef int difference_type;
+ typedef image_traverser_tag iterator_category;
+
+ typedef typename remove_const<value_type>::type mask_type;
+ typedef value_type* pointer;
+
+ enum {
+ /** The number of pixel within a single value_type value
+ */
+ num_intraword_positions=sizeof(value_type)*8/bits_per_pixel,
+ /** Bit mask for one pixel (least significant bits)
+ */
+ bit_mask=~(~0 << bits_per_pixel)
+ };
+
+private:
+ pointer data_;
+ mask_type mask_;
+ difference_type remainder_;
+
+ void update_mask()
+ {
+ mask_ = get_mask<value_type, bits_per_pixel, MsbFirst>(remainder_);
+ }
+
+ void inc()
+ {
+ const difference_type newValue( remainder_ + 1 );
+ const difference_type data_offset( newValue / num_intraword_positions );
+
+ data_ += data_offset;
+ remainder_ = newValue % num_intraword_positions;
+
+ const mask_type shifted_mask(
+ MsbFirst ?
+ unsigned_cast<mask_type>(mask_) >> bits_per_pixel :
+ mask_ << bits_per_pixel );
+
+ // data_offset is 0 for shifted mask, and 1 for wrapped-around mask
+ mask_ = (1-data_offset)*shifted_mask + data_offset*(MsbFirst ?
+ bit_mask << bits_per_pixel*(num_intraword_positions-1) :
+ bit_mask);
+ }
+
+ void dec()
+ {
+ const difference_type newValue( remainder_ - 1 );
+ const bool isNegative( is_negative(newValue) );
+ const difference_type newRemainder( newValue % num_intraword_positions );
+
+ // calc data_ += newValue / num_intraword_positions;
+ // remainder_ = newRemainder;
+ // for newValue >= 0, and
+ // data_ += newValue / num_intraword_positions - 1;
+ // remainder_ = num_intraword_positions - newRemainder;
+ // (to force remainder_ to be positive).
+ // This is branch-free, if is_negative() is branch-free
+ const difference_type data_offset( newValue / num_intraword_positions - isNegative );
+ data_ += data_offset;
+ remainder_ = newRemainder + isNegative*num_intraword_positions;
+
+ const mask_type shifted_mask(
+ MsbFirst ?
+ mask_ << bits_per_pixel :
+ unsigned_cast<mask_type>(mask_) >> bits_per_pixel );
+
+ // data_offset is 0 for shifted mask, and 1 for wrapped-around mask
+ mask_ = (1-data_offset)*shifted_mask + data_offset*(MsbFirst ?
+ bit_mask :
+ bit_mask << bits_per_pixel*(num_intraword_positions-1));
+ }
+
+ bool equal( PackedPixelRowIterator const & rhs ) const
+ {
+ return rhs.data_ == data_ && rhs.remainder_ == remainder_;
+ }
+
+ bool less( PackedPixelRowIterator const & rhs ) const
+ {
+ return data_ == rhs.data_ ?
+ (remainder_ < rhs.remainder_) :
+ (data_ < rhs.data_);
+ }
+
+public:
+ PackedPixelRowIterator() :
+ data_(0),
+ mask_( get_mask<value_type, bits_per_pixel, MsbFirst, difference_type>(0) ),
+ remainder_(0)
+ {}
+
+ explicit PackedPixelRowIterator( pointer base, int x ) :
+ data_(base),
+ mask_(0),
+ remainder_(x % num_intraword_positions)
+ {
+ update_mask();
+ }
+
+ PackedPixelRowIterator& operator+=( difference_type d )
+ {
+ const difference_type newValue( remainder_ + d );
+ const bool isNegative( is_negative(newValue) );
+ const difference_type newRemainder( newValue % num_intraword_positions );
+
+ // calc data_ += newValue / num_intraword_positions;
+ // remainder_ = newRemainder;
+ // for newValue >= 0, and
+ // data_ += newValue / num_intraword_positions - 1;
+ // remainder_ = newRemainder + num_intraword_positions;
+ // (to force remainder_ to be positive).
+ // This is branch-free, if is_negative() is branch-free
+ data_ += newValue / num_intraword_positions - isNegative;
+ remainder_ = newRemainder + isNegative*num_intraword_positions;
+ update_mask();
+
+ return *this;
+ }
+
+ PackedPixelRowIterator& operator-=( difference_type d )
+ {
+ // forward to operator+= - which has to cope with negative
+ // values, anyway.
+ return *this += -d;
+ }
+
+ PackedPixelRowIterator operator+( difference_type d )
+ {
+ PackedPixelRowIterator res(*this);
+ res += d;
+ return res;
+ }
+
+ PackedPixelRowIterator operator-( difference_type d )
+ {
+ PackedPixelRowIterator res(*this);
+ res -= d;
+ return res;
+ }
+
+ PackedPixelRowIterator& operator++()
+ {
+ inc();
+ return *this;
+ }
+
+ PackedPixelRowIterator& operator--()
+ {
+ dec();
+ return *this;
+ }
+
+ PackedPixelRowIterator operator++(int)
+ {
+ PackedPixelRowIterator res(*this);
+ inc();
+ return res;
+ }
+
+ PackedPixelRowIterator operator--(int)
+ {
+ PackedPixelRowIterator res(*this);
+ dec();
+ return res;
+ }
+
+ bool operator==(PackedPixelRowIterator const & rhs) const
+ {
+ return equal( rhs );
+ }
+
+ bool operator!=(PackedPixelRowIterator const & rhs) const
+ {
+ return !equal( rhs );
+ }
+
+ bool operator<(PackedPixelRowIterator const & rhs) const
+ {
+ return less(rhs);
+ }
+
+ bool operator<=(PackedPixelRowIterator const & rhs) const
+ {
+ return !rhs.less(*this);
+ }
+
+ bool operator>(PackedPixelRowIterator const & rhs) const
+ {
+ return rhs.less(*this);
+ }
+
+ bool operator>=(PackedPixelRowIterator const & rhs) const
+ {
+ return !less(rhs);
+ }
+
+ difference_type operator-(PackedPixelRowIterator const & rhs) const
+ {
+ return (data_ - rhs.data_)*num_intraword_positions + (remainder_ - rhs.remainder_);
+ }
+
+ value_type get() const
+ {
+ return unsigned_cast<value_type>(*data_ & mask_) >>
+ get_shift<num_intraword_positions,
+ bits_per_pixel,
+ MsbFirst>(remainder_);
+ }
+
+ value_type get(difference_type d) const
+ {
+ PackedPixelRowIterator tmp(*this);
+ tmp += d;
+ return tmp.get();
+ }
+
+ void set( value_type v ) const
+ {
+ const value_type pixel_value(
+ (v <<
+ get_shift<num_intraword_positions, bits_per_pixel, MsbFirst>(remainder_))
+ & mask_ );
+ *data_ = (*data_ & ~mask_) | pixel_value;
+ }
+
+ void set( value_type v, difference_type d ) const
+ {
+ PackedPixelRowIterator tmp(*this);
+ tmp += d;
+ tmp.set(v);
+ }
+};
+
+/** 2D image iterator for packed pixel formats
+
+ This iterator can be used for image formats that pack more than
+ one pixel into an machine data type (like one bit per pixel, eight
+ of which packed into one char)
+ */
+template< typename Valuetype,
+ int bits_per_pixel,
+ bool MsbFirst > class PackedPixelIterator : public NonStandardIterator
+{
+public:
+ // no reference, no index_reference type here
+ typedef Valuetype value_type;
+ typedef vigra::Diff2D difference_type;
+ typedef image_traverser_tag iterator_category;
+ typedef PackedPixelRowIterator<value_type,
+ bits_per_pixel,
+ MsbFirst> row_iterator;
+ typedef PackedPixelColumnIterator<value_type,
+ bits_per_pixel,
+ MsbFirst> column_iterator;
+
+ typedef value_type* pointer;
+ typedef int MoveX;
+ typedef StridedArrayIterator< value_type > MoveY;
+
+ enum {
+ /** The number of pixel within a single value_type value
+ */
+ num_intraword_positions=sizeof(value_type)*8/bits_per_pixel,
+ /** Bit mask for one pixel (least significant bits)
+ */
+ bit_mask=~(~0 << bits_per_pixel)
+ };
+
+ // TODO(F2): direction of iteration (ImageIterator can be made to
+ // run backwards)
+
+private:
+ pointer current() const
+ {
+ return y() + (x / num_intraword_positions);
+ }
+
+ pointer current(int dx, int dy) const
+ {
+ return y(dy) + ((x+dx)/num_intraword_positions);
+ }
+
+ bool equal(PackedPixelIterator const & rhs) const
+ {
+ return (x == rhs.x) && (y == rhs.y);
+ }
+
+public:
+ PackedPixelIterator() :
+ x(0),
+ y(0)
+ {}
+
+ PackedPixelIterator(pointer base, int ystride) :
+ x(0),
+ y(ystride,base)
+ {}
+
+ bool operator==(PackedPixelIterator const & rhs) const
+ {
+ return equal(rhs);
+ }
+
+ bool operator!=(PackedPixelIterator const & rhs) const
+ {
+ return !equal(rhs);
+ }
+
+ difference_type operator-(PackedPixelIterator const & rhs) const
+ {
+ return difference_type(x - rhs.x, y - rhs.y);
+ }
+
+ MoveX x;
+ MoveY y;
+
+ PackedPixelIterator & operator+=(difference_type const & s)
+ {
+ x += s.x;
+ y += s.y;
+ return *this;
+ }
+
+ PackedPixelIterator & operator-=(difference_type const & s)
+ {
+ x -= s.x;
+ y -= s.y;
+ return *this;
+ }
+
+ PackedPixelIterator operator+(difference_type const & s) const
+ {
+ PackedPixelIterator ret(*this);
+ ret += s;
+ return ret;
+ }
+
+ PackedPixelIterator operator-(difference_type const & s) const
+ {
+ PackedPixelIterator ret(*this);
+ ret -= s;
+ return ret;
+ }
+
+ row_iterator rowIterator() const
+ {
+ return row_iterator(current(),x);
+ }
+
+ column_iterator columnIterator() const
+ {
+ return column_iterator(MoveY(y,
+ x / num_intraword_positions),
+ x % num_intraword_positions);
+ }
+
+ value_type get() const
+ {
+ const int remainder( x % num_intraword_positions );
+
+ return (unsigned_cast<value_type>(*current() &
+ get_mask<value_type, bits_per_pixel, MsbFirst>(remainder))
+ >> get_shift<num_intraword_positions, bits_per_pixel, MsbFirst>(remainder));
+ }
+
+ value_type get(difference_type const & d) const
+ {
+ const int remainder( x(d.x) % num_intraword_positions );
+
+ return (unsigned_cast<value_type>(*current(d.x,d.y) &
+ get_mask<value_type, bits_per_pixel, MsbFirst>(remainder))
+ >> get_shift<num_intraword_positions, bits_per_pixel, MsbFirst>(remainder));
+ }
+
+ void set( value_type v ) const
+ {
+ const int remainder( x % num_intraword_positions );
+ const int mask( get_mask<value_type, bits_per_pixel, MsbFirst>(remainder) );
+ const value_type pixel_value(
+ (v <<
+ get_shift<num_intraword_positions, bits_per_pixel, MsbFirst>(remainder))
+ & mask );
+ pointer p = current();
+ *p = (*p & ~mask) | pixel_value;
+ }
+
+ void set( value_type v, difference_type const & d ) const
+ {
+ const int remainder( (x + d.x) % num_intraword_positions );
+ const int mask( get_mask<value_type, bits_per_pixel, MsbFirst>(remainder) );
+ const value_type pixel_value(
+ (v <<
+ get_shift<num_intraword_positions, bits_per_pixel, MsbFirst>(remainder))
+ & mask );
+ pointer p = current(d.x,d.y);
+ *p = (*p & ~mask) | pixel_value;
+ }
+};
+
+//-----------------------------------------------------------------------------
+
+// partial specialization for the accessor traits masked_accessor
+// selector metafunction - can employ fast mask functor for the 1bpp
+// case.
+template< class Accessor,
+ class MaskAccessor,
+ class Iterator,
+ bool polarity,
+ bool MsbFirst > struct maskedAccessorSelector< Accessor,
+ MaskAccessor,
+ Iterator,
+ PackedPixelIterator< typename MaskAccessor::value_type,
+ 1,
+ MsbFirst >,
+ polarity >
+{
+ typedef TernarySetterFunctionAccessorAdapter<
+ Accessor,
+ MaskAccessor,
+ typename outputMaskFunctorSelector<
+ typename Accessor::value_type,
+ typename MaskAccessor::value_type,
+ polarity,
+ FastMask>::type >
+ type;
+};
+
+} // namespace basebmp
+
+#endif /* INCLUDED_BASEBMP_PACKEDPIXELITERATOR_HXX */
diff --git a/basebmp/inc/basebmp/paletteformats.hxx b/basebmp/inc/basebmp/paletteformats.hxx
new file mode 100644
index 000000000000..d3de0ea18dd7
--- /dev/null
+++ b/basebmp/inc/basebmp/paletteformats.hxx
@@ -0,0 +1,147 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_BASEBMP_PACKEDPIXELFORMATS_HXX
+#define INCLUDED_BASEBMP_PACKEDPIXELFORMATS_HXX
+
+#include <basebmp/color.hxx>
+#include <basebmp/colortraits.hxx>
+#include <basebmp/accessor.hxx>
+#include <basebmp/pixeliterator.hxx>
+#include <basebmp/packedpixeliterator.hxx>
+#include <basebmp/pixelformatadapters.hxx>
+#include <basebmp/paletteimageaccessor.hxx>
+#include <basebmp/metafunctions.hxx>
+
+#include <vigra/numerictraits.hxx>
+#include <vigra/metaprogramming.hxx>
+
+#include <functional>
+
+namespace basebmp
+{
+
+//-----------------------------------------------------------------------------
+
+/** Lookup index value for given color value in a PaletteImageAccessor
+ */
+template< class Accessor > struct ColorLookup
+{
+ typename Accessor::data_type operator()( const Accessor& acc,
+ typename Accessor::value_type v ) const
+ {
+ return acc.lookup(v);
+ }
+};
+
+//-----------------------------------------------------------------------------
+
+// partial specialization of AccessorTraits for PaletteAccessor
+template< class Accessor, typename ColorType > struct AccessorTraits<
+ PaletteImageAccessor< Accessor, ColorType > >
+{
+ /// value type of described accessor
+ typedef typename PaletteImageAccessor< Accessor, ColorType >::value_type value_type;
+
+ /// Retrieve stand-alone color lookup function for given Accessor type
+ typedef ColorLookup< PaletteImageAccessor< Accessor, ColorType > > color_lookup;
+
+ /// Retrieve raw pixel data accessor for given Accessor type
+ typedef Accessor raw_accessor;
+
+ /** accessor for XOR setter access is disabled, since the results
+ * are usually completely unintended - you'll usually want to
+ * wrap an xor_accessor with a PaletteAccessor, not the other way
+ * around.
+ */
+ typedef vigra::VigraFalseType xor_accessor;
+
+ /** accessor for masked setter access is disabled, since the
+ * results are usually completely unintended - you'll usually
+ * want to wrap a masked_accessor with a PaletteAccessor, not the
+ * other way around.
+ */
+ template< class MaskAccessor,
+ class Iterator,
+ class MaskIterator > struct masked_accessor
+ {
+ typedef vigra::VigraFalseType type;
+ };
+};
+
+//-----------------------------------------------------------------------------
+
+template< typename ColorType > struct PaletteAccessorSelector
+{
+ template< class Accessor > struct wrap_accessor
+ {
+ typedef PaletteImageAccessor< Accessor, ColorType > type;
+ };
+};
+
+//-----------------------------------------------------------------------------
+
+template< class Iterator,
+ class Accessor > struct PixelFormatTraitsTemplate_Palette
+{
+ typedef typename Iterator::value_type pixel_type;
+ typedef Iterator iterator_type;
+ typedef Accessor raw_accessor_type;
+ typedef PaletteAccessorSelector<Color> accessor_selector;
+};
+
+template< int BitsPerPixel,
+ bool MsbFirst > struct PixelFormatTraitsTemplate_PackedPalette :
+ public PixelFormatTraitsTemplate_Palette<
+ PackedPixelIterator< sal_uInt8,
+ BitsPerPixel,
+ MsbFirst >,
+ NonStandardAccessor< sal_uInt8 > >
+{};
+
+//-----------------------------------------------------------------------------
+
+// 1bpp MSB
+typedef PixelFormatTraitsTemplate_PackedPalette<1, true> PixelFormatTraits_PAL1_MSB;
+
+// 1bpp LSB
+typedef PixelFormatTraitsTemplate_PackedPalette<1, false> PixelFormatTraits_PAL1_LSB;
+
+// 4bpp MSB
+typedef PixelFormatTraitsTemplate_PackedPalette<4, true> PixelFormatTraits_PAL4_MSB;
+
+// 4bpp LSB
+typedef PixelFormatTraitsTemplate_PackedPalette<4, false> PixelFormatTraits_PAL4_LSB;
+
+// 8bpp
+typedef PixelFormatTraitsTemplate_Palette<
+ PixelIterator< sal_uInt8 >,
+ StandardAccessor< sal_uInt8 > > PixelFormatTraits_PAL8;
+
+} // namespace basebmp
+
+#endif /* INCLUDED_BASEBMP_PACKEDPIXELFORMATS_HXX */
diff --git a/basebmp/inc/basebmp/paletteimageaccessor.hxx b/basebmp/inc/basebmp/paletteimageaccessor.hxx
new file mode 100644
index 000000000000..79bbb9aae9b7
--- /dev/null
+++ b/basebmp/inc/basebmp/paletteimageaccessor.hxx
@@ -0,0 +1,168 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_BASEBMP_PALETTEIMAGEACCESSOR_HXX
+#define INCLUDED_BASEBMP_PALETTEIMAGEACCESSOR_HXX
+
+#include <basebmp/colortraits.hxx>
+#include <basebmp/accessortraits.hxx>
+
+#include <vigra/numerictraits.hxx>
+#include <vigra/metaprogramming.hxx>
+
+#include <algorithm>
+#include <functional>
+
+namespace basebmp
+{
+
+/** Access pixel data via palette indirection
+
+ @tpl Accessor
+ Raw accessor, to be used to actually access the pixel values
+
+ @tpl ColorType
+ The color value type to use - e.g. the palette is an array of that
+ type
+ */
+template< class Accessor, typename ColorType > class PaletteImageAccessor
+{
+public:
+ typedef typename Accessor::value_type data_type;
+ typedef ColorType value_type;
+
+#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+// making all members public, if no member template friends
+private:
+ template<class A, typename C> friend class PaletteImageAccessor;
+#endif
+
+ Accessor maAccessor;
+ const value_type* mpPalette;
+ std::size_t mnNumEntries;
+
+public:
+ PaletteImageAccessor() :
+ maAccessor(),
+ mpPalette(0),
+ mnNumEntries(0)
+ {}
+
+ template< class A > explicit
+ PaletteImageAccessor( PaletteImageAccessor<A,ColorType> const& rSrc ) :
+ maAccessor( rSrc.maAccessor ),
+ mpPalette( rSrc.mpPalette ),
+ mnNumEntries( rSrc.mnNumEntries )
+ {}
+
+ PaletteImageAccessor( const value_type* pPalette,
+ std::size_t numEntries ) :
+ maAccessor(),
+ mpPalette(pPalette),
+ mnNumEntries(numEntries)
+ {}
+
+ template< class T > PaletteImageAccessor( T accessor,
+ const value_type* pPalette,
+ std::size_t numEntries ) :
+ maAccessor(accessor),
+ mpPalette(pPalette),
+ mnNumEntries(numEntries)
+ {}
+
+ // -------------------------------------------------------
+
+ Accessor const& getWrappedAccessor() const { return maAccessor; }
+ Accessor& getWrappedAccessor() { return maAccessor; }
+
+ // -------------------------------------------------------
+
+ data_type lookup(value_type const& v) const
+ {
+ // TODO(P3): use table-based/octree approach here!
+ const value_type* best_entry;
+ const value_type* palette_end( mpPalette+mnNumEntries );
+ if( (best_entry=std::find( mpPalette, palette_end, v)) != palette_end )
+ return best_entry-mpPalette;
+
+ const value_type* curr_entry( mpPalette );
+ best_entry = curr_entry;
+ while( curr_entry != palette_end )
+ {
+ if( ColorTraits<value_type>::distance(*curr_entry,
+ *best_entry)
+ > ColorTraits<value_type>::distance(*curr_entry,
+ v) )
+ {
+ best_entry = curr_entry;
+ }
+
+ ++curr_entry;
+ }
+
+ return best_entry-mpPalette;
+ }
+
+ // -------------------------------------------------------
+
+ template< class Iterator >
+ value_type operator()(Iterator const& i) const
+ {
+ return mpPalette[ maAccessor(i) ];
+ }
+
+ template< class Iterator, class Difference >
+ value_type operator()(Iterator const& i, Difference const& diff) const
+ {
+ return mpPalette[ maAccessor(i,diff) ];
+ }
+
+ // -------------------------------------------------------
+
+ template< typename V, class Iterator >
+ void set(V const& value, Iterator const& i) const
+ {
+ maAccessor.set(
+ lookup(
+ vigra::detail::RequiresExplicitCast<value_type>::cast(value) ),
+ i );
+ }
+
+ template< typename V, class Iterator, class Difference >
+ void set(V const& value, Iterator const& i, Difference const& diff) const
+ {
+ maAccessor.set(
+ lookup(
+ vigra::detail::RequiresExplicitCast<value_type>::cast(value) ),
+ i,
+ diff );
+ }
+};
+
+} // namespace basebmp
+
+#endif /* INCLUDED_BASEBMP_PALETTEIMAGEACCESSOR_HXX */
diff --git a/basebmp/inc/basebmp/pixelformatadapters.hxx b/basebmp/inc/basebmp/pixelformatadapters.hxx
new file mode 100644
index 000000000000..2acd90b5bea8
--- /dev/null
+++ b/basebmp/inc/basebmp/pixelformatadapters.hxx
@@ -0,0 +1,108 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_BASEBMP_PIXELFORMATADAPTERS_HXX
+#define INCLUDED_BASEBMP_PIXELFORMATADAPTERS_HXX
+
+#include <basebmp/accessortraits.hxx>
+#include <basebmp/accessoradapters.hxx>
+
+#include <vigra/metaprogramming.hxx>
+
+namespace basebmp
+{
+
+// convenience functionality, providing everything necessary for a new
+// pixel format. simply plug in two conversion functors from/to a
+// common color format.
+
+/** Accessor selection metafunction, used to wrap a given accessor
+ with one converting between the pixel and color types
+
+ Use the nested template's typedef type, to retrieve an
+ AccessorAdapter which operates on a pixel value accessor, and
+ provides color values to the outside.
+
+ Nested like this, to avoid template template parameters at other
+ places: an instantiated version of AccessorSelector can be passed
+ to other templates, which in turn can invoke the nested meta
+ function.
+ */
+template< typename Getter,
+ typename Setter > struct AccessorSelector
+{
+ template< typename Accessor > struct wrap_accessor
+ {
+ typedef UnaryFunctionAccessorAdapter< Accessor,
+ Getter,
+ Setter > type;
+ };
+};
+
+//-----------------------------------------------------------------------------
+
+/** Convert color value to pixel data type
+ */
+template< class Accessor, typename DataType > struct ColorConvert
+{
+ DataType operator()( const Accessor& acc,
+ typename Accessor::value_type v ) const
+ {
+ return acc.setter(v);
+ }
+};
+
+//-----------------------------------------------------------------------------
+
+/** Macro generates partial specialization for color-conversion
+ UnaryFunctionAccessorAdapter, and the given getter/setter functors
+ */
+#define BASEBMP_SPECIALIZE_ACCESSORTRAITS(Getter,Setter) \
+template< class Accessor > struct AccessorTraits< \
+ UnaryFunctionAccessorAdapter< Accessor, \
+ Getter, \
+ Setter > > \
+{ \
+ typedef typename Accessor::value_type data_type; \
+ typedef UnaryFunctionAccessorAdapter< \
+ Accessor, \
+ Getter, \
+ Setter > accessor_type; \
+ typedef typename accessor_type::value_type value_type; \
+ typedef ColorConvert< accessor_type, \
+ data_type > color_lookup; \
+ typedef Accessor raw_accessor; \
+ typedef vigra::VigraFalseType xor_accessor; \
+ template< class MaskAccessor, \
+ class Iterator, \
+ class MaskIterator > struct masked_accessor\
+ { typedef vigra::VigraFalseType type; }; \
+}
+
+} // namespace basebmp
+
+#endif /* INCLUDED_BASEBMP_PIXELFORMATADAPTERS_HXX */
diff --git a/basebmp/inc/basebmp/pixeliterator.hxx b/basebmp/inc/basebmp/pixeliterator.hxx
new file mode 100644
index 000000000000..84b99942927b
--- /dev/null
+++ b/basebmp/inc/basebmp/pixeliterator.hxx
@@ -0,0 +1,355 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_BASEBMP_PIXELITERATOR_HXX
+#define INCLUDED_BASEBMP_PIXELITERATOR_HXX
+
+#include <basebmp/metafunctions.hxx>
+#include <basebmp/stridedarrayiterator.hxx>
+
+#include <vigra/metaprogramming.hxx>
+#include <vigra/diff2d.hxx>
+
+namespace basebmp
+{
+
+template< typename Valuetype > class PixelColumnIterator
+{
+public:
+ typedef Valuetype value_type;
+ typedef Valuetype& reference;
+ typedef reference index_reference;
+ typedef Valuetype* pointer;
+ typedef int difference_type;
+ typedef image_traverser_tag iterator_category;
+
+ typedef StridedArrayIterator< value_type > MoveY;
+
+private:
+ MoveY y;
+
+ bool equal( PixelColumnIterator const & rhs ) const
+ {
+ return rhs.y == y;
+ }
+
+ bool less( PixelColumnIterator const & rhs ) const
+ {
+ return y < rhs.y;
+ }
+
+public:
+ PixelColumnIterator() :
+ y(0)
+ {}
+
+ explicit PixelColumnIterator( const MoveY& pos ) :
+ y(pos)
+ {}
+
+ PixelColumnIterator( const MoveY& pos, int x ) :
+ y(pos,x)
+ {}
+
+ PixelColumnIterator& operator+=( difference_type d )
+ {
+ y += d;
+ return *this;
+ }
+
+ PixelColumnIterator& operator-=( difference_type d )
+ {
+ y -= d;
+ return *this;
+ }
+
+ PixelColumnIterator operator+( difference_type d )
+ {
+ PixelColumnIterator res(*this);
+ res += d;
+ return res;
+ }
+
+ PixelColumnIterator operator-( difference_type d )
+ {
+ PixelColumnIterator res(*this);
+ res -= d;
+ return res;
+ }
+
+ PixelColumnIterator& operator++()
+ {
+ ++y;
+ return *this;
+ }
+
+ PixelColumnIterator& operator--()
+ {
+ --y;
+ return *this;
+ }
+
+ PixelColumnIterator operator++(int)
+ {
+ PixelColumnIterator res(*this);
+ ++y;
+ return res;
+ }
+
+ PixelColumnIterator operator--(int)
+ {
+ PixelColumnIterator res(*this);
+ --y;
+ return res;
+ }
+
+ bool operator==(PixelColumnIterator const & rhs) const
+ {
+ return equal( rhs );
+ }
+
+ bool operator!=(PixelColumnIterator const & rhs) const
+ {
+ return !equal( rhs );
+ }
+
+ bool operator<(PixelColumnIterator const & rhs) const
+ {
+ return less(rhs);
+ }
+
+ bool operator<=(PixelColumnIterator const & rhs) const
+ {
+ return !rhs.less(*this);
+ }
+
+ bool operator>(PixelColumnIterator const & rhs) const
+ {
+ return rhs.less(*this);
+ }
+
+ bool operator>=(PixelColumnIterator const & rhs) const
+ {
+ return !less(rhs);
+ }
+
+ difference_type operator-(PixelColumnIterator const & rhs) const
+ {
+ return y - rhs.y;
+ }
+
+ value_type get() const
+ {
+ return *y();
+ }
+
+ value_type get(difference_type d) const
+ {
+ return *y(d);
+ }
+
+ void set( value_type v ) const
+ {
+ *y() = v;
+ }
+
+ void set( value_type v, difference_type d ) const
+ {
+ *y(d) = v;
+ }
+
+ reference operator*() const
+ {
+ return *y();
+ }
+
+ pointer operator->() const
+ {
+ return y();
+ }
+
+ reference operator[](difference_type d) const
+ {
+ return *y(d);
+ }
+
+ reference operator()(int dy) const
+ {
+ return *y(dy);
+ }
+};
+
+template< typename Valuetype > class PixelIterator
+{
+public:
+ typedef Valuetype value_type;
+ typedef Valuetype& reference;
+ typedef reference index_reference;
+ typedef Valuetype* pointer;
+ typedef vigra::Diff2D difference_type;
+ typedef image_traverser_tag iterator_category;
+ typedef pointer row_iterator;
+ typedef PixelColumnIterator<value_type> column_iterator;
+
+ typedef int MoveX;
+ typedef StridedArrayIterator< value_type > MoveY;
+
+ // TODO(F2): direction of iteration (ImageIterator can be made to
+ // run backwards)
+
+private:
+ bool equal(PixelIterator const & rhs) const
+ {
+ return (x == rhs.x) && (y == rhs.y);
+ }
+
+ pointer current() const
+ {
+ return y() + x;
+ }
+
+ pointer current(int dx, int dy) const
+ {
+ return y(dy) + x+dx;
+ }
+
+public:
+ PixelIterator() :
+ x(0),
+ y(0)
+ {}
+
+ PixelIterator(pointer base, int ystride) :
+ x(0),
+ y(ystride,base)
+ {}
+
+ bool operator==(PixelIterator const & rhs) const
+ {
+ return equal(rhs);
+ }
+
+ bool operator!=(PixelIterator const & rhs) const
+ {
+ return !equal(rhs);
+ }
+
+ difference_type operator-(PixelIterator const & rhs) const
+ {
+ return difference_type(x - rhs.x, y - rhs.y);
+ }
+
+ MoveX x;
+ MoveY y;
+
+ PixelIterator & operator+=(difference_type const & s)
+ {
+ x += s.x;
+ y += s.y;
+ return *this;
+ }
+
+ PixelIterator & operator-=(difference_type const & s)
+ {
+ x -= s.x;
+ y -= s.y;
+ return *this;
+ }
+
+ PixelIterator operator+(difference_type const & s) const
+ {
+ PixelIterator ret(*this);
+ ret += s;
+ return ret;
+ }
+
+ PixelIterator operator-(difference_type const & s) const
+ {
+ PixelIterator ret(*this);
+ ret -= s;
+ return ret;
+ }
+
+ row_iterator rowIterator() const
+ {
+ return row_iterator(y()+x);
+ }
+
+ column_iterator columnIterator() const
+ {
+ return column_iterator(y,x);
+ }
+
+ value_type get() const
+ {
+ return *current();
+ }
+
+ value_type get(difference_type const & d) const
+ {
+ return *current(d.y, d.x);
+ }
+
+ void set( value_type v ) const
+ {
+ *current() = v;
+ }
+
+ void set( value_type v, difference_type const & d ) const
+ {
+ *current(d.y,d.x) = v;
+ }
+
+ reference operator*() const
+ {
+ return *current();
+ }
+
+ pointer operator->() const
+ {
+ return current();
+ }
+
+ reference operator[]( const vigra::Diff2D& d ) const
+ {
+ return *current(d.x,d.y);
+ }
+
+ reference operator()(int dx, int dy) const
+ {
+ return *current(dx,dy);
+ }
+
+ pointer operator[](int dy) const
+ {
+ return y(dy) + x;
+ }
+};
+
+} // namespace basebmp
+
+#endif /* INCLUDED_BASEBMP_PIXELITERATOR_HXX */
diff --git a/basebmp/inc/basebmp/polypolygonrenderer.hxx b/basebmp/inc/basebmp/polypolygonrenderer.hxx
new file mode 100644
index 000000000000..7cfacad510e5
--- /dev/null
+++ b/basebmp/inc/basebmp/polypolygonrenderer.hxx
@@ -0,0 +1,366 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_BASEBMP_POLYPOLYGONRENDERER_HXX
+#define INCLUDED_BASEBMP_POLYPOLYGONRENDERER_HXX
+
+#include <basegfx/point/b2dpoint.hxx>
+#include <basegfx/range/b2drange.hxx>
+#include <basegfx/range/b2irange.hxx>
+#include <basegfx/polygon/b2dpolypolygon.hxx>
+#include <basegfx/polygon/b2dpolypolygontools.hxx>
+#include <basegfx/polygon/b2dpolypolygonfillrule.hxx>
+#include <basegfx/numeric/ftools.hxx>
+
+#include <vigra/diff2d.hxx>
+#include <vigra/iteratortraits.hxx>
+
+#include <vector>
+
+
+namespace basebmp
+{
+ namespace detail
+ {
+ /// convert int32 to 32:32 fixed point
+ inline sal_Int64 toFractional( sal_Int32 v ) { return (sal_Int64)v << 32; }
+ /// convert double to 32:32 fixed point
+ inline sal_Int64 toFractional( double v ) { return (sal_Int64)(v*SAL_MAX_UINT32 + (v < 0.0 ? -0.5 : 0.5 )); }
+ /// convert 32:32 fixed point to int32 (truncate)
+ inline sal_Int32 toInteger( sal_Int64 v ) { return (sal_Int32)(v < 0 ? ~((~v) >> 32) : v >> 32); }
+ /// convert 32:32 fixed point to int32 (properly rounded)
+ inline sal_Int32 toRoundedInteger( sal_Int64 v ) { return toInteger(v) + (sal_Int32)((v&0x80000000) >> 31); }
+
+ /** internal vertex store -
+
+ Different from B2DPoint, since we don't need floating
+ point coords, but orientation of vertex and y counter
+ */
+ struct Vertex
+ {
+ sal_Int32 mnYCounter;
+ sal_Int64 mnX;
+ sal_Int64 mnXDelta;
+
+ bool mbDownwards; // needed for nonzero winding rule
+ // fills
+
+ Vertex() :
+ mnYCounter(0),
+ mnX(0),
+ mnXDelta(0),
+ mbDownwards(true)
+ {}
+ Vertex( basegfx::B2DPoint const& rPt1,
+ basegfx::B2DPoint const& rPt2,
+ bool bDownwards ) :
+ mnYCounter( basegfx::fround(rPt2.getY()) -
+ basegfx::fround(rPt1.getY()) ),
+ mnX( toFractional( basegfx::fround(rPt1.getX()) )),
+ mnXDelta( toFractional(
+ ((rPt2.getX() - rPt1.getX()) /
+ (double)mnYCounter) )),
+ mbDownwards(bDownwards)
+ {}
+ };
+
+ typedef std::vector< std::vector<Vertex> > VectorOfVectorOfVertices;
+ typedef std::vector< Vertex* > VectorOfVertexPtr;
+
+ /// non-templated setup of GET
+ sal_uInt32 setupGlobalEdgeTable( VectorOfVectorOfVertices& rGET,
+ basegfx::B2DPolyPolygon const& rPoly,
+ sal_Int32 nMinY );
+ /// sort rAETSrc, copy not-yet-ended edges over to rAETDest
+ void sortAET( VectorOfVertexPtr& rAETSrc,
+ VectorOfVertexPtr& rAETDest );
+
+ /// For the STL algorithms
+ struct RasterConvertVertexComparator
+ {
+ RasterConvertVertexComparator() {}
+
+ bool operator()( const Vertex& rLHS,
+ const Vertex& rRHS ) const
+ {
+ return rLHS.mnX < rRHS.mnX;
+ }
+
+ bool operator()( const Vertex* pLHS,
+ const Vertex* pRHS ) const
+ {
+ return pLHS->mnX < pRHS->mnX;
+ }
+ };
+
+ } // namespace detail
+
+
+ /** Raster-convert a poly-polygon.
+
+ This algorithm does not perform antialiasing, and thus
+ internally works with integer vertex coordinates.
+
+ @param begin
+ Left, top edge of the destination bitmap. This position is
+ considered (0,0) relative to all polygon vertices
+
+ @param ad
+ Accessor to set pixel values
+
+ @param fillColor
+ Color to use for filling
+
+ @param rClipRect
+ Clipping rectangle, relative to the begin iterator. No pixel outside
+ this clip rect will be modified.
+
+ @param rPoly
+ Polygon to fill
+ */
+ template< class DestIterator, class DestAccessor, typename T >
+ void renderClippedPolyPolygon( DestIterator begin,
+ DestAccessor ad,
+ T fillColor,
+ const basegfx::B2IRange& rClipRect,
+ basegfx::B2DPolyPolygon const& rPoly,
+ basegfx::FillRule eFillRule )
+ {
+ const sal_Int32 nClipX1( std::max((sal_Int32)0,rClipRect.getMinX()) );
+ const sal_Int32 nClipX2( rClipRect.getMaxX() );
+ const sal_Int32 nClipY1( std::max((sal_Int32)0,rClipRect.getMinY()) );
+ const sal_Int32 nClipY2( rClipRect.getMaxY() );
+ const sal_Int64 nClipX1_frac( detail::toFractional(nClipX1) );
+ const sal_Int64 nClipX2_frac( detail::toFractional(nClipX2) );
+
+ basegfx::B2DRange const aPolyBounds( basegfx::tools::getRange(rPoly) );
+
+ const sal_Int32 nMinY( basegfx::fround(aPolyBounds.getMinY()) );
+ const sal_Int32 nMaxY(
+ std::min(
+ nClipY2-1,
+ basegfx::fround(aPolyBounds.getMaxY())));
+
+ if( nMinY > nMaxY )
+ return; // really, nothing to do then.
+
+ detail::VectorOfVectorOfVertices aGET; // the Global Edge Table
+ aGET.resize( nMaxY - nMinY + 1 );
+
+ sal_uInt32 const nVertexCount(
+ detail::setupGlobalEdgeTable( aGET, rPoly, nMinY ) );
+
+
+ // Perform actual scan conversion
+ //----------------------------------------------------------------------
+
+ if( aGET.empty() )
+ return;
+
+ detail::VectorOfVertexPtr aAET1; // the Active Edge Table
+ detail::VectorOfVertexPtr aAET2;
+ detail::VectorOfVertexPtr* pAET = &aAET1;
+ detail::VectorOfVertexPtr* pAETOther = &aAET2;
+ aAET1.reserve( nVertexCount );
+ aAET2.reserve( nVertexCount );
+
+ // current scanline - initially, points to first scanline
+ // within the clip rect, or to the polygon's first scanline
+ // (whichever is greater)
+ DestIterator aScanline( begin +
+ vigra::Diff2D(
+ 0,
+ std::max(nMinY,
+ nClipY1)) );
+ detail::RasterConvertVertexComparator aComp;
+
+
+ // now process each of the nMaxY - nMinY + 1 scanlines
+ // ------------------------------------------------------------
+
+ for( sal_Int32 y=nMinY; y <= nMaxY; ++y )
+ {
+ if( !aGET[y-nMinY].empty() )
+ {
+ // merge AET with current scanline's new vertices (both
+ // are already correctly sorted)
+ detail::VectorOfVectorOfVertices::value_type::iterator vertex=aGET[y-nMinY].begin();
+ detail::VectorOfVectorOfVertices::value_type::iterator const end=aGET[y-nMinY].end();
+ while( vertex != end )
+ {
+ // find insertion pos by binary search, and put ptr
+ // into active edge vector
+ pAET->insert( std::lower_bound( pAET->begin(),
+ pAET->end(),
+ &(*vertex),
+ aComp ),
+ &(*vertex) );
+
+ ++vertex;
+ }
+ }
+
+ // with less than two active edges, no fill visible
+ if( pAET->size() >= 2 )
+ {
+ typename vigra::IteratorTraits<DestIterator>::row_iterator
+ rowIter( aScanline.rowIterator() );
+
+ // process each span in current scanline, with
+ // even-odd fill rule
+ detail::VectorOfVertexPtr::iterator currVertex( pAET->begin() );
+ detail::VectorOfVertexPtr::iterator const lastVertex( pAET->end()-1 );
+ sal_uInt32 nCrossedEdges(0);
+ sal_Int32 nWindingNumber(0);
+ while( currVertex != lastVertex )
+ {
+ // TODO(P1): might be worth a try to extend the
+ // size()==2 case also to the actual filling
+ // here. YMMV.
+ detail::Vertex& rV1( **currVertex );
+ detail::Vertex const& rV2( **++currVertex );
+
+ nWindingNumber += -1 + 2*rV1.mbDownwards;
+
+ // calc fill status for both rules. might save a
+ // few percent runtime to specialize here...
+ const bool bEvenOddFill(
+ eFillRule == basegfx::FillRule_EVEN_ODD && !(nCrossedEdges & 0x01) );
+ const bool bNonZeroWindingFill(
+ eFillRule == basegfx::FillRule_NONZERO_WINDING_NUMBER && nWindingNumber != 0 );
+
+ // is span visible?
+ if( (bEvenOddFill || bNonZeroWindingFill) &&
+ y >= nClipY1 &&
+ rV1.mnX < nClipX2_frac &&
+ rV2.mnX > nClipX1_frac )
+ {
+ // clip span to horizontal bounds
+ sal_Int32 const nStartX(
+ std::max( nClipX1,
+ std::min( nClipX2-1,
+ detail::toRoundedInteger(rV1.mnX) )));
+ sal_Int32 const nEndX(
+ std::max( nClipX1,
+ std::min( nClipX2,
+ detail::toRoundedInteger(rV2.mnX) )));
+
+ typename vigra::IteratorTraits<DestIterator>::row_iterator
+ currPix( rowIter + nStartX);
+ typename vigra::IteratorTraits<DestIterator>::row_iterator
+ rowEnd( rowIter + nEndX );
+
+ // TODO(P2): Provide specialized span fill methods on the
+ // iterator/accessor
+ while( currPix != rowEnd )
+ ad.set(fillColor, currPix++);
+ }
+
+ // step vertices
+ rV1.mnX += rV1.mnXDelta;
+ --rV1.mnYCounter;
+
+ ++nCrossedEdges;
+ }
+
+ // step vertex also for the last one
+ detail::Vertex& rLastV( **currVertex );
+ rLastV.mnX += rLastV.mnXDelta;
+ --rLastV.mnYCounter;
+
+
+ // prune AET from ended edges, and keep it sorted
+ // ---------------------------------------------------------
+
+ pAETOther->clear();
+ if( pAET->size() == 2 )
+ {
+ // the case of exactly two active edges is both
+ // sufficiently common (all 'simple' polygons have
+ // it), and further more would complicate the
+ // generic case below (which works with a sliding
+ // triple of vertices).
+ if( !aComp(*(*pAET)[0], *(*pAET)[1]) )
+ std::swap(*(*pAET)[0], *(*pAET)[1]);
+
+ if( (*pAET)[0]->mnYCounter > 0 )
+ pAETOther->push_back( (*pAET)[0] );
+ if( (*pAET)[1]->mnYCounter > 0 )
+ pAETOther->push_back( (*pAET)[1] );
+ }
+ else
+ {
+ bool bFallbackTaken(false);
+ currVertex = pAET->begin();
+ detail::VectorOfVertexPtr::iterator prevVertex( currVertex );
+ while( currVertex != lastVertex )
+ {
+ // try to get away with one linear swoop and
+ // simple neighbor swapping. this is an
+ // overwhelmingly common case - polygons with
+ // excessively crisscrossing edges (which on
+ // top of that cross more than one other edge
+ // per scanline) are seldom. And even if we
+ // get such a beast here, this extra loop has
+ // still only linear cost
+ if( aComp(**(currVertex+1),**currVertex) )
+ {
+ std::swap(*currVertex, *(currVertex+1));
+
+ if( aComp(**currVertex,**prevVertex) )
+ {
+ // one swap was not sufficient -
+ // fallback to generic sort algo, then
+ detail::sortAET(*pAET, *pAETOther);
+ bFallbackTaken = true;
+ break;
+ }
+ }
+
+ if( (*currVertex)->mnYCounter > 0 )
+ pAETOther->push_back( *currVertex );
+
+ prevVertex = currVertex++;
+ }
+
+ // don't forget to add last vertex (loop above
+ // only deals with n-1 vertices)
+ if( !bFallbackTaken && (*currVertex)->mnYCounter > 0 )
+ pAETOther->push_back( *currVertex );
+ }
+
+ std::swap( pAET, pAETOther );
+ }
+
+ if( y >= nClipY1 )
+ ++aScanline.y;
+ }
+ }
+
+} // namespace basebmp
+
+#endif /* INCLUDED_BASEBMP_POLYPOLYGONRENDERER_HXX */
diff --git a/basebmp/inc/basebmp/rgb24pixelformats.hxx b/basebmp/inc/basebmp/rgb24pixelformats.hxx
new file mode 100644
index 000000000000..788144a50b8d
--- /dev/null
+++ b/basebmp/inc/basebmp/rgb24pixelformats.hxx
@@ -0,0 +1,98 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_BASEBMP_RGB24PIXELFORMATS_HXX
+#define INCLUDED_BASEBMP_RGB24PIXELFORMATS_HXX
+
+#include <basebmp/color.hxx>
+#include <basebmp/accessor.hxx>
+#include <basebmp/pixeliterator.hxx>
+#include <basebmp/pixelformatadapters.hxx>
+
+#include <vigra/rgbvalue.hxx>
+
+#include <functional>
+
+namespace basebmp
+{
+
+template< typename PixelType, typename ColorType > struct RGBValueGetter :
+ public std::unary_function<PixelType, ColorType>
+{
+ ColorType operator()( PixelType const& c ) const
+ {
+ return ColorType(c.red(),c.green(),c.blue());
+ }
+};
+
+template< typename PixelType, typename ColorType > struct RGBValueSetter :
+ public std::unary_function<ColorType, PixelType>
+{
+ PixelType operator()( ColorType const& c ) const
+ {
+ PixelType res;
+ res.setRed(c.getRed());
+ res.setGreen(c.getGreen());
+ res.setBlue(c.getBlue());
+ return res;
+ }
+};
+
+//-----------------------------------------------------------------------------
+
+template< typename PixelType > struct PixelFormatTraitsTemplate_RGBValue
+{
+ typedef PixelType pixel_type;
+
+ typedef RGBValueGetter<pixel_type,
+ Color> getter_type;
+ typedef RGBValueSetter<pixel_type,
+ Color> setter_type;
+
+ typedef PixelIterator<pixel_type> iterator_type;
+ typedef StandardAccessor<pixel_type> raw_accessor_type;
+ typedef AccessorSelector<
+ getter_type, setter_type> accessor_selector;
+};
+
+//-----------------------------------------------------------------------------
+
+// 24bpp RGB
+typedef PixelFormatTraitsTemplate_RGBValue<
+ vigra::RGBValue<sal_uInt8> > PixelFormatTraits_RGB24;
+BASEBMP_SPECIALIZE_ACCESSORTRAITS(PixelFormatTraits_RGB24::getter_type,
+ PixelFormatTraits_RGB24::setter_type);
+
+// 24bpp BGR
+typedef PixelFormatTraitsTemplate_RGBValue<
+ vigra::RGBValue<sal_uInt8,2,1,0> > PixelFormatTraits_BGR24;
+BASEBMP_SPECIALIZE_ACCESSORTRAITS(PixelFormatTraits_BGR24::getter_type,
+ PixelFormatTraits_BGR24::setter_type);
+
+} // namespace basebmp
+
+#endif /* INCLUDED_BASEBMP_RGB24PIXELFORMATS_HXX */
diff --git a/basebmp/inc/basebmp/rgbmaskpixelformats.hxx b/basebmp/inc/basebmp/rgbmaskpixelformats.hxx
new file mode 100644
index 000000000000..d42125239529
--- /dev/null
+++ b/basebmp/inc/basebmp/rgbmaskpixelformats.hxx
@@ -0,0 +1,289 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_BASEBMP_RGBMASKPIXELFORMATS_HXX
+#define INCLUDED_BASEBMP_RGBMASKPIXELFORMATS_HXX
+
+#include <basebmp/color.hxx>
+#include <basebmp/colortraits.hxx>
+#include <basebmp/accessor.hxx>
+#include <basebmp/pixeliterator.hxx>
+#include <basebmp/pixelformatadapters.hxx>
+#include <basebmp/metafunctions.hxx>
+#include <basebmp/endian.hxx>
+
+#include <vigra/numerictraits.hxx>
+#include <vigra/metaprogramming.hxx>
+
+#include <functional>
+
+namespace basebmp
+{
+
+/** Base class operating on RGB truecolor mask pixel
+
+ Use this template, if you have an (integer) pixel type, and three
+ bitmasks denoting where the channel bits are.
+
+ @tpl PixelType
+ Input pixel type to operate on
+
+ @tpl ColorType
+ Underlying color type, to convert the pixel values into
+
+ @tpl RedMask
+ Bitmask, to access the red bits in the data type
+
+ @tpl GreenMask
+ Bitmask, to access the green bits in the data type
+
+ @tpl BlueMask
+ Bitmask, to access the blue bits in the data type
+
+ @tpl SwapBytes
+ When true, the final pixel values will be byte-swapped before
+ passed on.
+ */
+template< typename PixelType,
+ typename ColorType,
+ unsigned int RedMask,
+ unsigned int GreenMask,
+ unsigned int BlueMask,
+ bool SwapBytes > struct RGBMaskFunctorBase
+{
+ typedef PixelType pixel_type;
+ typedef ColorType color_type;
+ typedef typename make_unsigned<pixel_type>::type unsigned_pixel_type;
+ typedef typename ColorTraits<ColorType>::component_type component_type;
+
+ // calc corrective shifts for all three channels in advance
+ enum {
+ red_shift = numberOfTrailingZeros<RedMask>::value,
+ green_shift = numberOfTrailingZeros<GreenMask>::value,
+ blue_shift = numberOfTrailingZeros<BlueMask>::value,
+
+ red_bits = bitcount<RedMask>::value,
+ green_bits = bitcount<GreenMask>::value,
+ blue_bits = bitcount<BlueMask>::value
+ };
+};
+
+template< typename PixelType,
+ typename ColorType,
+ unsigned int RedMask,
+ unsigned int GreenMask,
+ unsigned int BlueMask,
+ bool SwapBytes > struct RGBMaskGetter :
+ public RGBMaskFunctorBase<PixelType,
+ ColorType,
+ RedMask,
+ GreenMask,
+ BlueMask,
+ SwapBytes>,
+ public std::unary_function<PixelType, ColorType>
+{
+ typedef RGBMaskFunctorBase<PixelType,
+ ColorType,
+ RedMask,
+ GreenMask,
+ BlueMask,
+ SwapBytes> base_type;
+
+ ColorType operator()( PixelType v ) const
+ {
+ v = SwapBytes ? byteSwap(v) : v;
+
+ const typename base_type::unsigned_pixel_type red (v & RedMask);
+ const typename base_type::unsigned_pixel_type green(v & GreenMask);
+ const typename base_type::unsigned_pixel_type blue (v & BlueMask);
+
+ // shift color nibbles to right-aligend position. ORing it
+ // channel value shifted twice the number of channel bits, to
+ // spread the value into the component_type range
+ ColorType res( (shiftRight(red,
+ base_type::red_shift-8*
+ (signed)sizeof(typename base_type::component_type)+
+ base_type::red_bits)) |
+ (shiftRight(red,
+ base_type::red_shift-8*
+ (signed)sizeof(typename base_type::component_type)+
+ 2*base_type::red_bits)),
+
+ (shiftRight(green,
+ base_type::green_shift-8*
+ (signed)sizeof(typename base_type::component_type)+
+ base_type::green_bits)) |
+ (shiftRight(green,
+ base_type::green_shift-8*
+ (signed)sizeof(typename base_type::component_type)+
+ 2*base_type::green_bits)),
+
+ (shiftRight(blue,
+ base_type::blue_shift-8*
+ (signed)sizeof(typename base_type::component_type)+
+ base_type::blue_bits)) |
+ (shiftRight(blue,
+ base_type::blue_shift-8*
+ (signed)sizeof(typename base_type::component_type)+
+ 2*base_type::blue_bits)) );
+ return res;
+ }
+};
+
+template< typename PixelType,
+ typename ColorType,
+ unsigned int RedMask,
+ unsigned int GreenMask,
+ unsigned int BlueMask,
+ bool SwapBytes > struct RGBMaskSetter :
+ public RGBMaskFunctorBase<PixelType,
+ ColorType,
+ RedMask,
+ GreenMask,
+ BlueMask,
+ SwapBytes>,
+ public std::unary_function<ColorType, PixelType>
+{
+ typedef RGBMaskFunctorBase<PixelType,
+ ColorType,
+ RedMask,
+ GreenMask,
+ BlueMask,
+ SwapBytes> base_type;
+
+ PixelType operator()( ColorType const& c ) const
+ {
+ const typename base_type::unsigned_pixel_type red (c.getRed());
+ const typename base_type::unsigned_pixel_type green(c.getGreen());
+ const typename base_type::unsigned_pixel_type blue (c.getBlue());
+
+ typename base_type::unsigned_pixel_type res(
+ (shiftLeft(red,
+ base_type::red_shift-8*
+ (signed)sizeof(typename base_type::component_type)+
+ base_type::red_bits) & RedMask) |
+ (shiftLeft(green,
+ base_type::green_shift-8*
+ (signed)sizeof(typename base_type::component_type)+
+ base_type::green_bits) & GreenMask) |
+ (shiftLeft(blue,
+ base_type::blue_shift-8*
+ (signed)sizeof(typename base_type::component_type)+
+ base_type::blue_bits) & BlueMask) );
+
+ return SwapBytes ? byteSwap(res) : res;
+ }
+};
+
+//-----------------------------------------------------------------------------
+
+template< typename PixelType,
+ unsigned int RedMask,
+ unsigned int GreenMask,
+ unsigned int BlueMask,
+ bool SwapBytes > struct PixelFormatTraitsTemplate_RGBMask
+{
+ typedef PixelType pixel_type;
+
+ typedef RGBMaskGetter<pixel_type,
+ Color,
+ RedMask,
+ GreenMask,
+ BlueMask,
+ SwapBytes> getter_type;
+ typedef RGBMaskSetter<pixel_type,
+ Color,
+ RedMask,
+ GreenMask,
+ BlueMask,
+ SwapBytes> setter_type;
+
+ typedef PixelIterator<pixel_type> iterator_type;
+ typedef StandardAccessor<pixel_type> raw_accessor_type;
+ typedef AccessorSelector<
+ getter_type, setter_type> accessor_selector;
+};
+
+//-----------------------------------------------------------------------------
+
+#ifdef OSL_LITENDIAN
+# define BASEBMP_TRUECOLORMASK_LSB_SWAP false
+# define BASEBMP_TRUECOLORMASK_MSB_SWAP true
+#else
+# ifdef OSL_BIGENDIAN
+# define BASEBMP_TRUECOLORMASK_LSB_SWAP true
+# define BASEBMP_TRUECOLORMASK_MSB_SWAP false
+# else
+# error Undetermined endianness!
+# endif
+#endif
+
+//-----------------------------------------------------------------------------
+
+// 16bpp MSB RGB
+typedef PixelFormatTraitsTemplate_RGBMask<
+ sal_uInt16,
+ 0xF800,
+ 0x07E0,
+ 0x001F,
+ BASEBMP_TRUECOLORMASK_MSB_SWAP > PixelFormatTraits_RGB16_565_MSB;
+BASEBMP_SPECIALIZE_ACCESSORTRAITS(PixelFormatTraits_RGB16_565_MSB::getter_type,
+ PixelFormatTraits_RGB16_565_MSB::setter_type);
+
+// 16bpp LSB RGB
+typedef PixelFormatTraitsTemplate_RGBMask<
+ sal_uInt16,
+ 0xF800,
+ 0x07E0,
+ 0x001F,
+ BASEBMP_TRUECOLORMASK_LSB_SWAP > PixelFormatTraits_RGB16_565_LSB;
+BASEBMP_SPECIALIZE_ACCESSORTRAITS(PixelFormatTraits_RGB16_565_LSB::getter_type,
+ PixelFormatTraits_RGB16_565_LSB::setter_type);
+
+// 32bpp endian-sensitive RGB
+typedef PixelFormatTraitsTemplate_RGBMask<
+ sal_uInt32,
+ 0xFF0000,
+ 0x00FF00,
+ 0x0000FF,
+ BASEBMP_TRUECOLORMASK_LSB_SWAP > PixelFormatTraits_RGB32_888;
+BASEBMP_SPECIALIZE_ACCESSORTRAITS(PixelFormatTraits_RGB32_888::getter_type,
+ PixelFormatTraits_RGB32_888::setter_type);
+
+// 32bpp endian-sensitive BGR
+typedef PixelFormatTraitsTemplate_RGBMask<
+ sal_uInt32,
+ 0xFF0000,
+ 0x00FF00,
+ 0x0000FF,
+ BASEBMP_TRUECOLORMASK_MSB_SWAP > PixelFormatTraits_BGR32_888;
+BASEBMP_SPECIALIZE_ACCESSORTRAITS(PixelFormatTraits_BGR32_888::getter_type,
+ PixelFormatTraits_BGR32_888::setter_type);
+
+} // namespace basebmp
+
+#endif /* INCLUDED_BASEBMP_RGBMASKPIXELFORMATS_HXX */
diff --git a/basebmp/inc/basebmp/scaleimage.hxx b/basebmp/inc/basebmp/scaleimage.hxx
new file mode 100644
index 000000000000..cb83e1353d5c
--- /dev/null
+++ b/basebmp/inc/basebmp/scaleimage.hxx
@@ -0,0 +1,195 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_BASEBMP_SCALEIMAGE_HXX
+#define INCLUDED_BASEBMP_SCALEIMAGE_HXX
+
+#include <osl/diagnose.h>
+
+#include <vigra/tuple.hxx>
+#include <vigra/copyimage.hxx>
+#include <vigra/basicimage.hxx>
+#include <vigra/iteratortraits.hxx>
+
+namespace basebmp
+{
+
+template< class SourceIter, class SourceAcc,
+ class DestIter, class DestAcc >
+void scaleLine( SourceIter s_begin,
+ SourceIter s_end,
+ SourceAcc s_acc,
+ DestIter d_begin,
+ DestIter d_end,
+ DestAcc d_acc )
+{
+ const int src_width = s_end - s_begin;
+ const int dest_width = d_end - d_begin;
+
+ OSL_ASSERT( src_width > 0 && dest_width > 0 );
+
+ if( src_width >= dest_width )
+ {
+ // shrink
+ int rem = 0;
+ while( s_begin != s_end )
+ {
+ if( rem >= 0 )
+ {
+ d_acc.set( s_acc(s_begin), d_begin );
+
+ rem -= src_width;
+ ++d_begin;
+ }
+
+ rem += dest_width;
+ ++s_begin;
+ }
+ }
+ else
+ {
+ // enlarge
+ int rem = -dest_width;
+ while( d_begin != d_end )
+ {
+ if( rem >= 0 )
+ {
+ rem -= dest_width;
+ ++s_begin;
+ }
+
+ d_acc.set( s_acc(s_begin), d_begin );
+
+ rem += src_width;
+ ++d_begin;
+ }
+ }
+}
+
+/** Scale an image using zero order interpolation (pixel replication)
+
+ Source and destination range must be at least one pixel wide and
+ high.
+
+ @param s_begin
+ Start iterator for source image
+
+ @param s_end
+ End iterator for source image
+
+ @param s_acc
+ Source accessor
+
+ @param d_begin
+ Start iterator for destination image
+
+ @param d_end
+ End iterator for destination image
+
+ @param d_acc
+ Destination accessor
+
+ @param bMustCopy
+ When true, scaleImage always copies source, even when doing 1:1
+ copy
+ */
+template< class SourceIter, class SourceAcc,
+ class DestIter, class DestAcc >
+void scaleImage( SourceIter s_begin,
+ SourceIter s_end,
+ SourceAcc s_acc,
+ DestIter d_begin,
+ DestIter d_end,
+ DestAcc d_acc,
+ bool bMustCopy=false )
+{
+ const int src_width ( s_end.x - s_begin.x );
+ const int src_height( s_end.y - s_begin.y );
+
+ const int dest_width ( d_end.x - d_begin.x );
+ const int dest_height( d_end.y - d_begin.y );
+
+ if( !bMustCopy &&
+ src_width == dest_width &&
+ src_height == dest_height )
+ {
+ // no scaling involved, can simply copy
+ vigra::copyImage( s_begin, s_end, s_acc,
+ d_begin, d_acc );
+ return;
+ }
+
+ typedef vigra::BasicImage<typename SourceAcc::value_type> TmpImage;
+ typedef typename TmpImage::traverser TmpImageIter;
+
+ TmpImage tmp_image(src_width,
+ dest_height);
+ TmpImageIter t_begin = tmp_image.upperLeft();
+
+ // scale in y direction
+ for( int x=0; x<src_width; ++x, ++s_begin.x, ++t_begin.x )
+ {
+ typename SourceIter::column_iterator s_cbegin = s_begin.columnIterator();
+ typename TmpImageIter::column_iterator t_cbegin = t_begin.columnIterator();
+
+ scaleLine(s_cbegin, s_cbegin+src_height, s_acc,
+ t_cbegin, t_cbegin+dest_height, tmp_image.accessor());
+ }
+
+ t_begin = tmp_image.upperLeft();
+
+ // scale in x direction
+ for( int y=0; y<dest_height; ++y, ++d_begin.y, ++t_begin.y )
+ {
+ typename DestIter::row_iterator d_rbegin = d_begin.rowIterator();
+ typename TmpImageIter::row_iterator t_rbegin = t_begin.rowIterator();
+
+ scaleLine(t_rbegin, t_rbegin+src_width, tmp_image.accessor(),
+ d_rbegin, d_rbegin+dest_width, d_acc);
+ }
+}
+
+/** Scale an image, range tuple version
+
+ @param bMustCopy
+ When true, scaleImage always copies source, even when doing 1:1
+ copy
+ */
+template< class SourceIter, class SourceAcc,
+ class DestIter, class DestAcc >
+inline void scaleImage( vigra::triple<SourceIter,SourceIter,SourceAcc> const& src,
+ vigra::triple<DestIter,DestIter,DestAcc> const& dst,
+ bool bMustCopy=false )
+{
+ scaleImage(src.first,src.second,src.third,
+ dst.first,dst.second,dst.third,
+ bMustCopy);
+}
+
+}
+
+#endif /* INCLUDED_BASEBMP_SCALEIMAGE_HXX */
diff --git a/basebmp/inc/basebmp/scanlineformats.hxx b/basebmp/inc/basebmp/scanlineformats.hxx
new file mode 100644
index 000000000000..d83aea688a37
--- /dev/null
+++ b/basebmp/inc/basebmp/scanlineformats.hxx
@@ -0,0 +1,56 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_BASEBMP_SCANLINEFORMATS_HXX
+#define INCLUDED_BASEBMP_SCANLINEFORMATS_HXX
+
+#include <sal/types.h>
+
+/* Definition of Scanline formats */
+
+namespace basebmp { namespace Format
+{
+ static const sal_Int32 NONE = 0;
+ static const sal_Int32 ONE_BIT_MSB_GREY = (sal_Int32)0x01;
+ static const sal_Int32 ONE_BIT_LSB_GREY = (sal_Int32)0x02;
+ static const sal_Int32 ONE_BIT_MSB_PAL = (sal_Int32)0x03;
+ static const sal_Int32 ONE_BIT_LSB_PAL = (sal_Int32)0x04;
+ static const sal_Int32 FOUR_BIT_MSB_GREY = (sal_Int32)0x05;
+ static const sal_Int32 FOUR_BIT_LSB_GREY = (sal_Int32)0x06;
+ static const sal_Int32 FOUR_BIT_MSB_PAL = (sal_Int32)0x07;
+ static const sal_Int32 FOUR_BIT_LSB_PAL = (sal_Int32)0x08;
+ static const sal_Int32 EIGHT_BIT_PAL = (sal_Int32)0x09;
+ static const sal_Int32 EIGHT_BIT_GREY = (sal_Int32)0x0A;
+ static const sal_Int32 SIXTEEN_BIT_LSB_TC_MASK = (sal_Int32)0x0B;
+ static const sal_Int32 SIXTEEN_BIT_MSB_TC_MASK = (sal_Int32)0x0C;
+ static const sal_Int32 TWENTYFOUR_BIT_TC_MASK = (sal_Int32)0x0D;
+ static const sal_Int32 THIRTYTWO_BIT_TC_MASK = (sal_Int32)0x0E;
+ static const sal_Int32 THIRTYTWO_BIT_TC_MASK_ARGB = (sal_Int32)0x0F;
+ static const sal_Int32 MAX = (sal_Int32)0x0F;
+} }
+
+#endif /* INCLUDED_BASEBMP_SCANLINEFORMATS_HXX */
diff --git a/basebmp/inc/basebmp/stridedarrayiterator.hxx b/basebmp/inc/basebmp/stridedarrayiterator.hxx
new file mode 100644
index 000000000000..8139cc8a8bc9
--- /dev/null
+++ b/basebmp/inc/basebmp/stridedarrayiterator.hxx
@@ -0,0 +1,114 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_BASEBMP_STRIDEDARRAYITERATOR_HXX
+#define INCLUDED_BASEBMP_STRIDEDARRAYITERATOR_HXX
+
+#include <basebmp/metafunctions.hxx>
+
+namespace basebmp
+{
+
+/** Like vigra::StridedArrayIterator
+
+ Changed semantics re. DirectionSelector<StridedArrayTag>: stride
+ now counts in <em>raw</em> bytes
+
+ Adapts given ptr, in a way that iterator increments move forward
+ in strided steps. Stride can, by the way, also be negative
+ */
+template< typename T > class StridedArrayIterator
+{
+public:
+ typedef typename clone_const<T, unsigned char>::type internal_type;
+
+ /** Create iterator
+
+ @param stride
+
+ Stride in bytes. Given value should better match memory layout
+ of T, as memory gets reinterpret-casted.
+ */
+ explicit StridedArrayIterator(int stride, T* ptr = 0) :
+ stride_(stride),
+ current_(reinterpret_cast<internal_type*>(ptr))
+ {}
+
+ /** Copy from other StridedArrayIterator, plus given offset
+
+ @param offset
+ Offset in bytes
+ */
+ StridedArrayIterator( StridedArrayIterator const& rSrc,
+ int offset ) :
+ stride_(rSrc.stride_),
+ current_(reinterpret_cast<internal_type*>(
+ reinterpret_cast<T*>(rSrc.current_)+offset))
+ {}
+
+ void operator++() {current_ += stride_; }
+ void operator++(int) {current_ += stride_; }
+ void operator--() {current_ -= stride_; }
+ void operator--(int) {current_ -= stride_; }
+ void operator+=(int dy) {current_ += dy*stride_; }
+ void operator-=(int dy) {current_ -= dy*stride_; }
+
+ int operator-(StridedArrayIterator const & rhs) const
+ { return (current_ - rhs.current_) / stride_; }
+
+ bool operator==(StridedArrayIterator const & rhs) const
+ { return current_ == rhs.current_; }
+
+ bool operator!=(StridedArrayIterator const & rhs) const
+ { return current_ != rhs.current_; }
+
+ bool operator<(StridedArrayIterator const & rhs) const
+ { return *this - rhs < 0; }
+
+ bool operator<=(StridedArrayIterator const & rhs) const
+ { return *this - rhs <= 0; }
+
+ bool operator>(StridedArrayIterator const & rhs) const
+ { return *this - rhs > 0; }
+
+ bool operator>=(StridedArrayIterator const & rhs) const
+ { return *this - rhs >= 0; }
+
+ T* operator()() const
+ { return reinterpret_cast<T*>(current_); }
+
+ T* operator()(int d) const
+ { return reinterpret_cast<T*>(current_ + d*stride_); }
+
+private:
+ int stride_;
+ internal_type* current_;
+};
+
+} // namespace basebmp
+
+#endif /* INCLUDED_BASEBMP_STRIDEDARRAYITERATOR_HXX */
diff --git a/basebmp/inc/basebmp/tools.hxx b/basebmp/inc/basebmp/tools.hxx
new file mode 100644
index 000000000000..d7ca0423ac1f
--- /dev/null
+++ b/basebmp/inc/basebmp/tools.hxx
@@ -0,0 +1,91 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_BASEBMP_TOOLS_HXX
+#define INCLUDED_BASEBMP_TOOLS_HXX
+
+#include <basegfx/range/b2irange.hxx>
+#include <basegfx/point/b2ipoint.hxx>
+#include <vigra/tuple.hxx>
+#include <vigra/diff2d.hxx>
+
+namespace basebmp
+{
+ inline vigra::Diff2D topLeft( const basegfx::B2IRange& rRange )
+ { return vigra::Diff2D(rRange.getMinX(),rRange.getMinY()); }
+
+ inline vigra::Diff2D bottomRight( const basegfx::B2IRange& rRange )
+ { return vigra::Diff2D(rRange.getMaxX(),rRange.getMaxY()); }
+
+ template< class Iterator, class Accessor >
+ inline vigra::triple<Iterator,Iterator,Accessor>
+ destIterRange(Iterator const& begin,
+ Accessor const& accessor,
+ const basegfx::B2IRange& rRange)
+ {
+ return vigra::triple<Iterator,Iterator,Accessor>(
+ begin + topLeft(rRange),
+ begin + bottomRight(rRange),
+ accessor);
+ }
+
+ template< class Iterator, class Accessor >
+ inline vigra::triple<Iterator,Iterator,Accessor>
+ srcIterRange(Iterator const& begin,
+ Accessor const& accessor,
+ const basegfx::B2IRange& rRange)
+ {
+ return vigra::triple<Iterator,Iterator,Accessor>(
+ begin + topLeft(rRange),
+ begin + bottomRight(rRange),
+ accessor);
+ }
+
+ template< class Iterator, class Accessor >
+ inline vigra::pair<Iterator,Accessor>
+ srcIter(Iterator const& begin,
+ Accessor const& accessor,
+ const basegfx::B2IPoint& rPt)
+ {
+ return vigra::pair<Iterator,Accessor>(
+ begin + vigra::Diff2D(rPt.getX(),rPt.getY()),
+ accessor);
+ }
+
+ template< class Iterator, class Accessor >
+ inline vigra::pair<Iterator,Accessor>
+ destIter(Iterator const& begin,
+ Accessor const& accessor,
+ const basegfx::B2IPoint& rPt)
+ {
+ return vigra::pair<Iterator,Accessor>(
+ begin + vigra::Diff2D(rPt.getX(),rPt.getY()),
+ accessor);
+ }
+}
+
+#endif /* INCLUDED_BASEBMP_TOOLS_HXX */
diff --git a/basebmp/inc/basebmp/truecolormaskaccessor.hxx b/basebmp/inc/basebmp/truecolormaskaccessor.hxx
new file mode 100644
index 000000000000..d4e3ff33f30e
--- /dev/null
+++ b/basebmp/inc/basebmp/truecolormaskaccessor.hxx
@@ -0,0 +1,290 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_BASEBMP_TRUECOLORMASKACCESSOR_HXX
+#define INCLUDED_BASEBMP_TRUECOLORMASKACCESSOR_HXX
+
+#include <basebmp/colortraits.hxx>
+#include <basebmp/accessortraits.hxx>
+#include <basebmp/metafunctions.hxx>
+#include <basebmp/endian.hxx>
+
+#include <vigra/numerictraits.hxx>
+#include <vigra/metaprogramming.hxx>
+
+namespace basebmp
+{
+
+namespace
+{
+ /// Shift left for positive shift value, and right otherwise
+ template< typename T > inline T shiftLeft( T v, int shift )
+ {
+ return shift > 0 ? v << shift : v >> (-shift);
+ }
+
+ /// Shift right for positive shift value, and left otherwise
+ template< typename T > inline T shiftRight( T v, int shift )
+ {
+ return shift > 0 ? v >> shift : v << (-shift);
+ }
+}
+
+/** Access true color data, which is pixel-packed into a POD.
+
+ @tpl Accessor
+ Wrapped accessor, used to access the actual pixel values
+
+ @tpl ColorType
+ Underlying color type, to convert the pixel values into
+
+ @tpl RedMask
+ Bitmask, to access the red bits in the data type
+
+ @tpl GreenMask
+ Bitmask, to access the green bits in the data type
+
+ @tpl BlueMask
+ Bitmask, to access the blue bits in the data type
+
+ @tpl SwapBytes
+ When true, the final pixel values will be byte-swapped before
+ passed to/from the iterator.
+ */
+template< class Accessor,
+ typename ColorType,
+ int RedMask,
+ int GreenMask,
+ int BlueMask,
+ bool SwapBytes > class TrueColorMaskAccessor
+{
+public:
+ typedef typename Accessor::value_type data_type;
+ typedef ColorType value_type;
+ typedef typename make_unsigned<data_type>::type unsigned_data_type;
+ typedef typename ColorTraits<ColorType>::component_type component_type;
+
+#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+// making all members public, if no member template friends
+private:
+ template<class A, typename C, int R, int G, int B, bool S> friend class TrueColorMaskAccessor;
+#endif
+
+ Accessor maAccessor;
+
+public:
+ // calc corrective shifts for all three channels in advance
+ enum {
+ red_shift = numberOfTrailingZeros<RedMask>::value,
+ green_shift = numberOfTrailingZeros<GreenMask>::value,
+ blue_shift = numberOfTrailingZeros<BlueMask>::value,
+
+ red_bits = bitcount<RedMask>::value,
+ green_bits = bitcount<GreenMask>::value,
+ blue_bits = bitcount<BlueMask>::value
+ };
+
+ // -------------------------------------------------------
+
+ TrueColorMaskAccessor() :
+ maAccessor()
+ {}
+
+ template< class A > explicit
+ TrueColorMaskAccessor( TrueColorMaskAccessor< A,
+ ColorType,
+ RedMask,
+ GreenMask,
+ BlueMask,
+ SwapBytes > const& rSrc ) :
+ maAccessor( rSrc.maAccessor )
+ {}
+
+ template< class T > explicit TrueColorMaskAccessor( T accessor ) :
+ maAccessor(accessor)
+ {}
+
+ // -------------------------------------------------------
+
+ Accessor const& getWrappedAccessor() const { return maAccessor; }
+ Accessor& getWrappedAccessor() { return maAccessor; }
+
+ // -------------------------------------------------------
+
+ value_type toValue( unsigned_data_type v ) const
+ {
+ v = SwapBytes ? byteSwap(v) : v;
+
+ const unsigned_data_type red (v & RedMask);
+ const unsigned_data_type green(v & GreenMask);
+ const unsigned_data_type blue (v & BlueMask);
+
+ value_type res( (shiftRight(red,
+ red_shift-8*sizeof(component_type)+red_bits)) |
+ (shiftRight(red,
+ red_shift-8*sizeof(component_type)+2*red_bits)),
+
+ (shiftRight(green,
+ green_shift-8*sizeof(component_type)+green_bits)) |
+ (shiftRight(green,
+ green_shift-8*sizeof(component_type)+2*green_bits)),
+
+ (shiftRight(blue,
+ blue_shift-8*sizeof(component_type)+blue_bits)) |
+ (shiftRight(blue,
+ blue_shift-8*sizeof(component_type)+2*blue_bits)) );
+ return res;
+ }
+
+ data_type toPacked( value_type v ) const
+ {
+ const unsigned_data_type red (v.getRed());
+ const unsigned_data_type green(v.getGreen());
+ const unsigned_data_type blue (v.getBlue());
+
+ unsigned_data_type res(
+ (shiftLeft(red,
+ red_shift-8*sizeof(component_type)+red_bits) & RedMask) |
+ (shiftLeft(green,
+ green_shift-8*sizeof(component_type)+green_bits) & GreenMask) |
+ (shiftLeft(blue,
+ blue_shift-8*sizeof(component_type)+blue_bits) & BlueMask) );
+
+ return SwapBytes ? byteSwap(res) : res;
+ }
+
+ // -------------------------------------------------------
+
+ template< class Iterator >
+ value_type operator()(Iterator const& i) const
+ {
+ return toValue(
+ unsigned_cast<data_type>( maAccessor(i)) );
+ }
+
+ template< class Iterator, class Difference >
+ value_type operator()(Iterator const& i, Difference const& diff) const
+ {
+ return toValue(
+ unsigned_cast<data_type>( maAccessor(i,diff)) );
+ }
+
+ // -------------------------------------------------------
+
+ template< typename V, class Iterator >
+ void set(V const& value, Iterator const& i) const
+ {
+ maAccessor.set(
+ toPacked(
+ vigra::detail::RequiresExplicitCast<value_type>::cast(
+ value) ),
+ i);
+ }
+
+ template< typename V, class Iterator, class Difference >
+ void set(V const& value, Iterator const& i, Difference const& diff) const
+ {
+ maAccessor.set(
+ toPacked(
+ vigra::detail::RequiresExplicitCast<value_type>::cast(
+ value)),
+ i,
+ diff );
+ }
+};
+
+//-----------------------------------------------------------------------------
+
+/** Convert Color to packed true color value for TrueColorMaskAccessor
+ */
+template< class Accessor > struct ColorConvert
+{
+ typename Accessor::data_type operator()( const Accessor& acc,
+ typename Accessor::value_type v )
+ {
+ return acc.toPacked(v);
+ }
+};
+
+//-----------------------------------------------------------------------------
+
+// partial specialization for TrueColorMaskAccessor
+template< class Accessor,
+ typename ColorType,
+ int RedMask,
+ int GreenMask,
+ int BlueMask,
+ bool SwapBytes > struct AccessorTraits<
+ TrueColorMaskAccessor< Accessor,
+ ColorType,
+ RedMask,
+ GreenMask,
+ BlueMask,
+ SwapBytes > >
+{
+ /// value type of described accessor
+ typedef typename TrueColorMaskAccessor< Accessor,
+ ColorType,
+ RedMask,
+ GreenMask,
+ BlueMask,
+ SwapBytes >::value_type value_type;
+
+ /// Retrieve stand-alone color lookup function for given Accessor type
+ typedef ColorConvert< TrueColorMaskAccessor< Accessor,
+ ColorType,
+ RedMask,
+ GreenMask,
+ BlueMask,
+ SwapBytes > > color_lookup;
+
+ /// Retrieve raw pixel data accessor for given Accessor type
+ typedef Accessor raw_accessor;
+
+ /** accessor for XOR setter access is disabled, since the results
+ * are usually completely unintended - you'll usually want to
+ * wrap an xor_accessor with a TrueColorMaskAccessor, not the
+ * other way around.
+ */
+ typedef vigra::VigraFalseType xor_accessor;
+
+ /** accessor for masked setter access is disabled, since the
+ * results are usually completely unintended - you'll usually
+ * want to wrap a masked_accessor with a TrueColorMaskAccessor,
+ * not the other way around.
+ */
+ template< class MaskAccessor,
+ class Iterator,
+ class MaskIterator > struct masked_accessor
+ {
+ typedef vigra::VigraFalseType type;
+ };
+};
+
+} // namespace basebmp
+
+#endif /* INCLUDED_BASEBMP_TRUECOLORMASKACCESSOR_HXX */
diff --git a/basebmp/prj/build.lst b/basebmp/prj/build.lst
new file mode 100644
index 000000000000..b68e8f2eb6fd
--- /dev/null
+++ b/basebmp/prj/build.lst
@@ -0,0 +1,5 @@
+bx basebmp : sal VIGRA:vigra basegfx BOOST:boost NULL
+bx basebmp usr1 - all bx_mkout NULL
+bx basebmp\source nmake - all bx_source NULL
+bx basebmp\util nmake - all bx_util bx_source NULL
+bx basebmp\test nmake - all bx_test bx_util NULL
diff --git a/basebmp/prj/d.lst b/basebmp/prj/d.lst
new file mode 100644
index 000000000000..e94118c72b9d
--- /dev/null
+++ b/basebmp/prj/d.lst
@@ -0,0 +1,9 @@
+..\%__SRC%\lib\ibasebmp.lib %_DEST%\lib%_EXT%\ibasebmp.lib
+
+..\%__SRC%\bin\basebmp?????.dll %_DEST%\bin%_EXT%\basebmp?????.dll
+
+..\%__SRC%\lib\libbasebmp*.* %_DEST%\lib%_EXT%\libbasebmp*.*
+..\%__SRC%\lib\*.a %_DEST%\lib%_EXT%\*.a
+
+mkdir: %_DEST%\inc%_EXT%\basebmp
+..\inc\basebmp\*.hxx %_DEST%\inc%_EXT%\basebmp\*.hxx
diff --git a/basebmp/source/bitmapdevice.cxx b/basebmp/source/bitmapdevice.cxx
new file mode 100644
index 000000000000..4e179c3a0ce0
--- /dev/null
+++ b/basebmp/source/bitmapdevice.cxx
@@ -0,0 +1,2064 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// FIXME: in vigra
+#if defined(__SUNPRO_CC) && (__SUNPRO_CC > 0x580)
+#include <math.h> // needed for fabs, hypot
+#endif
+#include "basebmp/bitmapdevice.hxx"
+
+#include "basebmp/compositeiterator.hxx"
+#include "basebmp/iteratortraits.hxx"
+
+#include "basebmp/accessor.hxx"
+#include "basebmp/accessortraits.hxx"
+#include "basebmp/accessoradapters.hxx"
+#include "basebmp/colorblendaccessoradapter.hxx"
+
+#include "basebmp/color.hxx"
+#include "basebmp/colormisc.hxx"
+#include "basebmp/colortraits.hxx"
+
+#include "basebmp/greylevelformats.hxx"
+#include "basebmp/paletteformats.hxx"
+#include "basebmp/rgbmaskpixelformats.hxx"
+#include "basebmp/rgb24pixelformats.hxx"
+
+#include "basebmp/scanlineformats.hxx"
+#include "basebmp/fillimage.hxx"
+#include "basebmp/scaleimage.hxx"
+#include "basebmp/clippedlinerenderer.hxx"
+#include "basebmp/polypolygonrenderer.hxx"
+#include "basebmp/genericcolorimageaccessor.hxx"
+
+#include "basebmp/tools.hxx"
+#include "intconversion.hxx"
+
+#include <rtl/alloc.h>
+#include <rtl/memory.h>
+#include <osl/diagnose.h>
+
+#include <basegfx/tools/tools.hxx>
+#include <basegfx/range/b2irange.hxx>
+#include <basegfx/range/b2drange.hxx>
+#include <basegfx/polygon/b2dpolygon.hxx>
+#include <basegfx/polygon/b2dpolygontools.hxx>
+#include <basegfx/polygon/b2dpolypolygontools.hxx>
+#include <basegfx/point/b2ipoint.hxx>
+#include <basegfx/vector/b2ivector.hxx>
+
+#include <vigra/iteratortraits.hxx>
+#include <vigra/rgbvalue.hxx>
+#include <vigra/copyimage.hxx>
+#include <vigra/tuple.hxx>
+
+
+namespace vigra
+{
+
+/// componentwise xor of an RGBValue (missing from rgbvalue.hxx)
+template< class Value, unsigned int RedIndex, unsigned int BlueIndex, unsigned int GreenIndex >
+inline RGBValue<Value, RedIndex, GreenIndex, BlueIndex>
+operator^( RGBValue<Value, RedIndex, GreenIndex, BlueIndex> const& lhs,
+ RGBValue<Value, RedIndex, GreenIndex, BlueIndex> const& rhs )
+{
+ RGBValue<Value, RedIndex, GreenIndex, BlueIndex> res(
+ lhs[0] ^ rhs[0],
+ lhs[1] ^ rhs[1],
+ lhs[2] ^ rhs[2]);
+ return res;
+}
+}
+
+namespace basebmp
+{
+
+namespace
+{
+ /** Create the type for an accessor that takes the (mask,bitmap)
+ input value generated from a JoinImageAccessorAdapter, and
+ pipe that through a mask functor.
+
+ @tpl DestAccessor
+ Destination bitmap accessor
+
+ @tpl JoinedAccessor
+ Input accessor, is expected to generate a std::pair as the
+ value type
+
+ @tpl MaskFunctorMode
+ Either FastMask or NoFastMask, depending on whether the mask
+ is guaranteed to contain only 0s and 1s.
+ */
+ template< class DestAccessor,
+ class JoinedAccessor,
+ bool polarity,
+ typename MaskFunctorMode > struct masked_input_splitting_accessor
+ {
+ typedef BinarySetterFunctionAccessorAdapter<
+ DestAccessor,
+ BinaryFunctorSplittingWrapper<
+ typename outputMaskFunctorSelector<
+ typename JoinedAccessor::value_type::first_type,
+ typename JoinedAccessor::value_type::second_type,
+ polarity,
+ MaskFunctorMode >::type > > type;
+ };
+
+
+
+ // Actual BitmapDevice implementation (templatized by accessor and iterator)
+ //--------------------------------------------------------------------------
+
+ /** Implementation of the BitmapDevice interface
+
+ @tpl DestIterator
+ Iterator to access bitmap memory
+
+ @tpl RawAccessor
+ Raw accessor, to access pixel values directly
+
+ @tpl AccessorSelector
+ Accessor adapter selector, which, when applying the nested
+ template metafunction wrap_accessor to one of the raw bitmap
+ accessors, yields a member type named 'type', which is a
+ wrapped accessor that map color values.
+
+ @tpl Masks
+ Traits template, containing nested traits
+ clipmask_format_traits and alphamask_format_traits, which
+ determine what specialized formats are to be used for clip and
+ alpha masks. With those mask formats, clipping and alpha
+ blending is handled natively.
+ */
+ template< class DestIterator,
+ class RawAccessor,
+ class AccessorSelector,
+ class Masks > class BitmapRenderer :
+ public BitmapDevice
+ {
+ public:
+ typedef DestIterator dest_iterator_type;
+ typedef RawAccessor raw_accessor_type;
+ typedef AccessorSelector accessor_selector;
+
+ typedef typename Masks::clipmask_format_traits::iterator_type mask_iterator_type;
+ typedef typename Masks::clipmask_format_traits::raw_accessor_type mask_rawaccessor_type;
+ typedef typename Masks::clipmask_format_traits::accessor_selector mask_accessorselector_type;
+
+ typedef typename Masks::alphamask_format_traits::iterator_type alphamask_iterator_type;
+ typedef typename Masks::alphamask_format_traits::raw_accessor_type alphamask_rawaccessor_type;
+ typedef typename Masks::alphamask_format_traits::accessor_selector alphamask_accessorselector_type;
+
+ typedef typename AccessorSelector::template wrap_accessor<
+ raw_accessor_type >::type dest_accessor_type;
+
+ typedef AccessorTraits< dest_accessor_type > accessor_traits;
+ typedef CompositeIterator2D< dest_iterator_type,
+ mask_iterator_type > composite_iterator_type;
+ typedef CompositeIterator2D< vigra::Diff2D,
+ vigra::Diff2D > generic_composite_iterator_type;
+
+ typedef BitmapRenderer<mask_iterator_type,
+ mask_rawaccessor_type,
+ mask_accessorselector_type,
+ Masks> mask_bitmap_type;
+ typedef BitmapRenderer<alphamask_iterator_type,
+ alphamask_rawaccessor_type,
+ alphamask_accessorselector_type,
+ Masks> alphamask_bitmap_type;
+
+ // -------------------------------------------------------
+
+ typedef AccessorTraits< raw_accessor_type > raw_accessor_traits;
+ typedef typename uInt32Converter<
+ typename raw_accessor_type::value_type>::to to_uint32_functor;
+
+ // -------------------------------------------------------
+
+ typedef typename raw_accessor_traits::xor_accessor raw_xor_accessor_type;
+ typedef AccessorTraits<raw_xor_accessor_type> raw_xor_accessor_traits;
+ typedef typename accessor_selector::template wrap_accessor<
+ raw_xor_accessor_type >::type xor_accessor_type;
+ typedef AccessorTraits<xor_accessor_type> xor_accessor_traits;
+
+ // -------------------------------------------------------
+
+ typedef typename raw_accessor_traits::template masked_accessor<
+ mask_rawaccessor_type,
+ dest_iterator_type,
+ mask_iterator_type,
+ Masks::clipmask_polarity>::type raw_maskedaccessor_type;
+ typedef typename accessor_selector::template wrap_accessor<
+ raw_maskedaccessor_type >::type masked_accessor_type;
+ typedef typename AccessorTraits<
+ raw_maskedaccessor_type>::xor_accessor raw_maskedxor_accessor_type;
+ typedef typename accessor_selector::template wrap_accessor<
+ raw_maskedxor_accessor_type >::type masked_xoraccessor_type;
+
+ // -------------------------------------------------------
+
+ // ((iter,mask),mask) special case (e.g. for clipped
+ // drawMaskedColor())
+ typedef AccessorTraits< raw_maskedaccessor_type > raw_maskedaccessor_traits;
+ typedef typename raw_maskedaccessor_traits::template masked_accessor<
+ mask_rawaccessor_type,
+ composite_iterator_type,
+ mask_iterator_type,
+ Masks::clipmask_polarity>::type raw_maskedmask_accessor_type;
+
+ typedef CompositeIterator2D<
+ composite_iterator_type,
+ mask_iterator_type> composite_composite_mask_iterator_type;
+
+ // -------------------------------------------------------
+
+ typedef ConstantColorBlendSetterAccessorAdapter<
+ dest_accessor_type,
+ typename alphamask_rawaccessor_type::value_type,
+ Masks::alphamask_polarity> colorblend_accessor_type;
+ typedef AccessorTraits<colorblend_accessor_type> colorblend_accessor_traits;
+ typedef typename colorblend_accessor_traits::template masked_accessor<
+ mask_rawaccessor_type,
+ dest_iterator_type,
+ mask_iterator_type,
+ Masks::clipmask_polarity>::type masked_colorblend_accessor_type;
+
+ // -------------------------------------------------------
+
+ typedef ConstantColorBlendSetterAccessorAdapter<
+ dest_accessor_type,
+ Color,
+ Masks::alphamask_polarity> colorblend_generic_accessor_type;
+ typedef AccessorTraits<colorblend_generic_accessor_type> colorblend_generic_accessor_traits;
+ typedef typename colorblend_generic_accessor_traits::template masked_accessor<
+ mask_rawaccessor_type,
+ dest_iterator_type,
+ mask_iterator_type,
+ Masks::clipmask_polarity>::type masked_colorblend_generic_accessor_type;
+
+ // -------------------------------------------------------
+
+ typedef JoinImageAccessorAdapter< dest_accessor_type,
+ mask_rawaccessor_type > joined_image_accessor_type;
+ typedef JoinImageAccessorAdapter< GenericColorImageAccessor,
+ GenericColorImageAccessor > joined_generic_image_accessor_type;
+
+ // -------------------------------------------------------
+
+ dest_iterator_type maBegin;
+ typename accessor_traits::color_lookup maColorLookup;
+ to_uint32_functor maToUInt32Converter;
+ dest_accessor_type maAccessor;
+ colorblend_accessor_type maColorBlendAccessor;
+ colorblend_generic_accessor_type maGenericColorBlendAccessor;
+ raw_accessor_type maRawAccessor;
+ xor_accessor_type maXorAccessor;
+ raw_xor_accessor_type maRawXorAccessor;
+ masked_accessor_type maMaskedAccessor;
+ masked_colorblend_accessor_type maMaskedColorBlendAccessor;
+ masked_colorblend_generic_accessor_type maGenericMaskedColorBlendAccessor;
+ masked_xoraccessor_type maMaskedXorAccessor;
+ raw_maskedaccessor_type maRawMaskedAccessor;
+ raw_maskedxor_accessor_type maRawMaskedXorAccessor;
+ raw_maskedmask_accessor_type maRawMaskedMaskAccessor;
+
+ // -------------------------------------------------------
+
+ BitmapRenderer( const basegfx::B2IRange& rBounds,
+ sal_Int32 nScanlineFormat,
+ sal_Int32 nScanlineStride,
+ sal_uInt8* pFirstScanline,
+ dest_iterator_type begin,
+ raw_accessor_type rawAccessor,
+ dest_accessor_type accessor,
+ const RawMemorySharedArray& rMem,
+ const PaletteMemorySharedVector& rPalette ) :
+ BitmapDevice( rBounds, nScanlineFormat,
+ nScanlineStride, pFirstScanline, rMem, rPalette ),
+ maBegin( begin ),
+ maColorLookup(),
+ maToUInt32Converter(),
+ maAccessor( accessor ),
+ maColorBlendAccessor( accessor ),
+ maGenericColorBlendAccessor( accessor ),
+ maRawAccessor( rawAccessor ),
+ maXorAccessor( accessor ),
+ maRawXorAccessor( rawAccessor ),
+ maMaskedAccessor( accessor ),
+ maMaskedColorBlendAccessor( maColorBlendAccessor ),
+ maGenericMaskedColorBlendAccessor( maGenericColorBlendAccessor ),
+ maMaskedXorAccessor( accessor ),
+ maRawMaskedAccessor( rawAccessor ),
+ maRawMaskedXorAccessor( rawAccessor ),
+ maRawMaskedMaskAccessor( rawAccessor )
+ {}
+
+ private:
+ boost::shared_ptr<BitmapRenderer> getCompatibleBitmap( const BitmapDeviceSharedPtr& bmp ) const
+ {
+ return boost::dynamic_pointer_cast< BitmapRenderer >( bmp );
+ }
+
+ virtual bool isCompatibleBitmap( const BitmapDeviceSharedPtr& bmp ) const
+ {
+ // TODO(P1): dynamic_cast usually called twice for
+ // compatible formats
+ return getCompatibleBitmap(bmp).get() != NULL;
+ }
+
+ boost::shared_ptr<mask_bitmap_type> getCompatibleClipMask( const BitmapDeviceSharedPtr& bmp ) const
+ {
+ boost::shared_ptr<mask_bitmap_type> pMask( boost::dynamic_pointer_cast<mask_bitmap_type>( bmp ));
+
+ if( !pMask )
+ return pMask;
+
+ if( pMask->getSize() != getSize() )
+ pMask.reset();
+
+ return pMask;
+ }
+
+ virtual bool isCompatibleClipMask( const BitmapDeviceSharedPtr& bmp ) const
+ {
+ // TODO(P1): dynamic_cast usually called twice for
+ // compatible formats
+ return boost::dynamic_pointer_cast<mask_bitmap_type>( bmp ).get() != NULL;
+ }
+
+ boost::shared_ptr<alphamask_bitmap_type> getCompatibleAlphaMask( const BitmapDeviceSharedPtr& bmp ) const
+ {
+ return boost::dynamic_pointer_cast<alphamask_bitmap_type>( bmp );
+ }
+
+ virtual bool isCompatibleAlphaMask( const BitmapDeviceSharedPtr& bmp ) const
+ {
+ // TODO(P1): dynamic_cast usually called twice for
+ // compatible formats
+ return getCompatibleAlphaMask( bmp ).get() != NULL;
+ }
+
+ virtual void clear_i( Color fillColor,
+ const basegfx::B2IRange& rBounds )
+ {
+ fillImage(destIterRange(maBegin,
+ maRawAccessor,
+ rBounds),
+ maColorLookup(
+ maAccessor,
+ fillColor) );
+ }
+
+ virtual void setPixel_i( const basegfx::B2IPoint& rPt,
+ Color pixelColor,
+ DrawMode drawMode )
+ {
+ const DestIterator pixel( maBegin +
+ vigra::Diff2D(rPt.getX(),
+ rPt.getY()) );
+ if( drawMode == DrawMode_XOR )
+ maXorAccessor.set( pixelColor,
+ pixel );
+ else
+ maAccessor.set( pixelColor,
+ pixel );
+ }
+
+ virtual void setPixel_i( const basegfx::B2IPoint& rPt,
+ Color pixelColor,
+ DrawMode drawMode,
+ const BitmapDeviceSharedPtr& rClip )
+ {
+ boost::shared_ptr<mask_bitmap_type> pMask( getCompatibleClipMask(rClip) );
+ OSL_ASSERT( pMask );
+
+ const vigra::Diff2D offset(rPt.getX(),
+ rPt.getY());
+
+ const composite_iterator_type aIter(
+ maBegin + offset,
+ pMask->maBegin + offset );
+
+ if( drawMode == DrawMode_XOR )
+ maMaskedXorAccessor.set( pixelColor,
+ aIter );
+ else
+ maMaskedAccessor.set( pixelColor,
+ aIter );
+ }
+
+ virtual Color getPixel_i(const basegfx::B2IPoint& rPt )
+ {
+ const DestIterator pixel( maBegin +
+ vigra::Diff2D(rPt.getX(),
+ rPt.getY()) );
+ return maAccessor(pixel);
+ }
+
+ virtual sal_uInt32 getPixelData_i( const basegfx::B2IPoint& rPt )
+ {
+ const DestIterator pixel( maBegin +
+ vigra::Diff2D(rPt.getX(),
+ rPt.getY()) );
+ return maToUInt32Converter(maRawAccessor(pixel));
+ }
+
+ template< typename Iterator, typename Col, typename RawAcc >
+ void implRenderLine2( const basegfx::B2IPoint& rPt1,
+ const basegfx::B2IPoint& rPt2,
+ const basegfx::B2IRange& rBounds,
+ Col col,
+ const Iterator& begin,
+ const RawAcc& rawAcc )
+ {
+ renderClippedLine( rPt1,
+ rPt2,
+ rBounds,
+ col,
+ begin,
+ rawAcc );
+ }
+
+ template< typename Iterator, typename Accessor, typename RawAcc >
+ void implRenderLine( const basegfx::B2IPoint& rPt1,
+ const basegfx::B2IPoint& rPt2,
+ const basegfx::B2IRange& rBounds,
+ Color col,
+ const Iterator& begin,
+ const Accessor& acc,
+ const RawAcc& rawAcc )
+ {
+ implRenderLine2( rPt1,rPt2,rBounds,
+ maColorLookup( acc,
+ col ),
+ begin,
+ rawAcc );
+ }
+
+ template< typename Iterator, typename RawAcc, typename XorAcc >
+ void implDrawLine( const basegfx::B2IPoint& rPt1,
+ const basegfx::B2IPoint& rPt2,
+ const basegfx::B2IRange& rBounds,
+ Color col,
+ const Iterator& begin,
+ const RawAcc& rawAcc,
+ const XorAcc& xorAcc,
+ DrawMode drawMode )
+ {
+ if( drawMode == DrawMode_XOR )
+ implRenderLine( rPt1, rPt2, rBounds, col,
+ begin, maAccessor, xorAcc );
+ else
+ implRenderLine( rPt1, rPt2, rBounds, col,
+ begin, maAccessor, rawAcc );
+ }
+
+ virtual void drawLine_i(const basegfx::B2IPoint& rPt1,
+ const basegfx::B2IPoint& rPt2,
+ const basegfx::B2IRange& rBounds,
+ Color lineColor,
+ DrawMode drawMode )
+ {
+ implDrawLine(rPt1,rPt2,rBounds,lineColor,
+ maBegin,
+ maRawAccessor,maRawXorAccessor,drawMode);
+ }
+
+ composite_iterator_type getMaskedIter( const BitmapDeviceSharedPtr& rClip ) const
+ {
+ boost::shared_ptr<mask_bitmap_type> pMask( getCompatibleClipMask(rClip) );
+ OSL_ASSERT( pMask );
+
+ return composite_iterator_type( maBegin,
+ pMask->maBegin );
+ }
+
+ virtual void drawLine_i(const basegfx::B2IPoint& rPt1,
+ const basegfx::B2IPoint& rPt2,
+ const basegfx::B2IRange& rBounds,
+ Color lineColor,
+ DrawMode drawMode,
+ const BitmapDeviceSharedPtr& rClip )
+ {
+ implDrawLine(rPt1,rPt2,rBounds,lineColor,
+ getMaskedIter(rClip),
+ maRawMaskedAccessor,
+ maRawMaskedXorAccessor,drawMode);
+ }
+
+ template< typename Iterator, typename RawAcc >
+ void implDrawPolygon( const basegfx::B2DPolygon& rPoly,
+ const basegfx::B2IRange& rBounds,
+ Color col,
+ const Iterator& begin,
+ const RawAcc& acc )
+ {
+ basegfx::B2DPolygon aPoly( rPoly );
+ if( rPoly.areControlPointsUsed() )
+ aPoly = basegfx::tools::adaptiveSubdivideByCount( rPoly );
+
+ const typename dest_iterator_type::value_type colorIndex( maColorLookup(
+ maAccessor,
+ col));
+ const sal_uInt32 nVertices( aPoly.count() );
+ for( sal_uInt32 i=1; i<nVertices; ++i )
+ implRenderLine2( basegfx::fround(aPoly.getB2DPoint(i-1)),
+ basegfx::fround(aPoly.getB2DPoint(i)),
+ rBounds,
+ colorIndex,
+ begin,
+ acc );
+
+ if( nVertices > 1 && aPoly.isClosed() )
+ implRenderLine2( basegfx::fround(aPoly.getB2DPoint(nVertices-1)),
+ basegfx::fround(aPoly.getB2DPoint(0)),
+ rBounds,
+ colorIndex,
+ begin,
+ acc );
+ }
+
+ virtual void drawPolygon_i(const basegfx::B2DPolygon& rPoly,
+ const basegfx::B2IRange& rBounds,
+ Color lineColor,
+ DrawMode drawMode )
+ {
+ if( drawMode == DrawMode_XOR )
+ implDrawPolygon( rPoly, rBounds, lineColor,
+ maBegin,
+ maRawXorAccessor );
+ else
+ implDrawPolygon( rPoly, rBounds, lineColor,
+ maBegin,
+ maRawAccessor );
+ }
+
+ virtual void drawPolygon_i(const basegfx::B2DPolygon& rPoly,
+ const basegfx::B2IRange& rBounds,
+ Color lineColor,
+ DrawMode drawMode,
+ const BitmapDeviceSharedPtr& rClip )
+ {
+ if( drawMode == DrawMode_XOR )
+ implDrawPolygon( rPoly, rBounds, lineColor,
+ getMaskedIter(rClip),
+ maRawMaskedXorAccessor );
+ else
+ implDrawPolygon( rPoly, rBounds, lineColor,
+ getMaskedIter(rClip),
+ maRawMaskedAccessor );
+ }
+
+ template< typename Iterator, typename RawAcc >
+ void implFillPolyPolygon( const basegfx::B2DPolyPolygon& rPoly,
+ Color col,
+ const Iterator& begin,
+ const RawAcc& acc,
+ const basegfx::B2IRange& rBounds )
+ {
+ basegfx::B2DPolyPolygon aPoly( rPoly );
+ if( rPoly.areControlPointsUsed() )
+ aPoly = basegfx::tools::adaptiveSubdivideByCount( rPoly );
+
+ renderClippedPolyPolygon( begin,
+ acc,
+ maColorLookup( maAccessor,
+ col),
+ rBounds,
+ aPoly,
+ basegfx::FillRule_EVEN_ODD );
+ }
+
+ virtual void fillPolyPolygon_i(const basegfx::B2DPolyPolygon& rPoly,
+ Color fillColor,
+ DrawMode drawMode,
+ const basegfx::B2IRange& rBounds )
+ {
+ if( drawMode == DrawMode_XOR )
+ implFillPolyPolygon( rPoly, fillColor,
+ maBegin,
+ maRawXorAccessor,
+ rBounds );
+ else
+ implFillPolyPolygon( rPoly, fillColor,
+ maBegin,
+ maRawAccessor,
+ rBounds );
+ }
+
+ virtual void fillPolyPolygon_i(const basegfx::B2DPolyPolygon& rPoly,
+ Color fillColor,
+ DrawMode drawMode,
+ const basegfx::B2IRange& rBounds,
+ const BitmapDeviceSharedPtr& rClip )
+ {
+ if( drawMode == DrawMode_XOR )
+ implFillPolyPolygon( rPoly, fillColor,
+ getMaskedIter(rClip),
+ maRawMaskedXorAccessor,
+ rBounds );
+ else
+ implFillPolyPolygon( rPoly, fillColor,
+ getMaskedIter(rClip),
+ maRawMaskedAccessor,
+ rBounds );
+ }
+
+ template< typename Iterator, typename RawAcc >
+ void implDrawBitmap(const BitmapDeviceSharedPtr& rSrcBitmap,
+ const basegfx::B2IRange& rSrcRect,
+ const basegfx::B2IRange& rDstRect,
+ const Iterator& begin,
+ const RawAcc& acc)
+ {
+ boost::shared_ptr<BitmapRenderer> pSrcBmp( getCompatibleBitmap(rSrcBitmap) );
+ OSL_ASSERT( pSrcBmp );
+
+ scaleImage(
+ srcIterRange(pSrcBmp->maBegin,
+ pSrcBmp->maRawAccessor,
+ rSrcRect),
+ destIterRange(begin,
+ acc,
+ rDstRect),
+ rSrcBitmap.get() == this );
+ }
+
+ template< typename Iterator, typename Acc >
+ void implDrawBitmapGeneric(const BitmapDeviceSharedPtr& rSrcBitmap,
+ const basegfx::B2IRange& rSrcRect,
+ const basegfx::B2IRange& rDstRect,
+ const Iterator& begin,
+ const Acc& acc)
+ {
+ GenericColorImageAccessor aSrcAcc( rSrcBitmap );
+
+ scaleImage(
+ srcIterRange(vigra::Diff2D(),
+ aSrcAcc,
+ rSrcRect),
+ destIterRange(begin,
+ acc,
+ rDstRect));
+ }
+
+ virtual void drawBitmap_i(const BitmapDeviceSharedPtr& rSrcBitmap,
+ const basegfx::B2IRange& rSrcRect,
+ const basegfx::B2IRange& rDstRect,
+ DrawMode drawMode )
+ {
+ if( isCompatibleBitmap( rSrcBitmap ) )
+ {
+ if( drawMode == DrawMode_XOR )
+ implDrawBitmap(rSrcBitmap, rSrcRect, rDstRect,
+ maBegin,
+ maRawXorAccessor);
+ else
+ implDrawBitmap(rSrcBitmap, rSrcRect, rDstRect,
+ maBegin,
+ maRawAccessor);
+ }
+ else
+ {
+ if( drawMode == DrawMode_XOR )
+ implDrawBitmapGeneric(rSrcBitmap, rSrcRect, rDstRect,
+ maBegin,
+ maXorAccessor);
+ else
+ implDrawBitmapGeneric(rSrcBitmap, rSrcRect, rDstRect,
+ maBegin,
+ maAccessor);
+ }
+ }
+
+ virtual void drawBitmap_i(const BitmapDeviceSharedPtr& rSrcBitmap,
+ const basegfx::B2IRange& rSrcRect,
+ const basegfx::B2IRange& rDstRect,
+ DrawMode drawMode,
+ const BitmapDeviceSharedPtr& rClip )
+ {
+ if( isCompatibleBitmap( rSrcBitmap ) )
+ {
+ if( drawMode == DrawMode_XOR )
+ implDrawBitmap(rSrcBitmap, rSrcRect, rDstRect,
+ getMaskedIter(rClip),
+ maRawMaskedXorAccessor);
+ else
+ implDrawBitmap(rSrcBitmap, rSrcRect, rDstRect,
+ getMaskedIter(rClip),
+ maRawMaskedAccessor);
+ }
+ else
+ {
+ if( drawMode == DrawMode_XOR )
+ implDrawBitmapGeneric(rSrcBitmap, rSrcRect, rDstRect,
+ getMaskedIter(rClip),
+ maMaskedXorAccessor);
+ else
+ implDrawBitmapGeneric(rSrcBitmap, rSrcRect, rDstRect,
+ getMaskedIter(rClip),
+ maMaskedAccessor);
+ }
+ }
+
+ virtual void drawMaskedColor_i(Color aSrcColor,
+ const BitmapDeviceSharedPtr& rAlphaMask,
+ const basegfx::B2IRange& rSrcRect,
+ const basegfx::B2IPoint& rDstPoint )
+ {
+ boost::shared_ptr<mask_bitmap_type> pMask( getCompatibleClipMask(rAlphaMask) );
+ boost::shared_ptr<alphamask_bitmap_type> pAlpha( getCompatibleAlphaMask(rAlphaMask) );
+
+ if( pAlpha )
+ {
+ maColorBlendAccessor.setColor( aSrcColor );
+
+ vigra::copyImage( srcIterRange(pAlpha->maBegin,
+ pAlpha->maRawAccessor,
+ rSrcRect),
+ destIter(maBegin,
+ maColorBlendAccessor,
+ rDstPoint) );
+ }
+ else if( pMask )
+ {
+ const composite_iterator_type aBegin(
+ maBegin + vigra::Diff2D(rDstPoint.getX(),
+ rDstPoint.getY()),
+ pMask->maBegin + topLeft(rSrcRect) );
+
+ fillImage(aBegin,
+ aBegin + vigra::Diff2D(rSrcRect.getWidth(),
+ rSrcRect.getHeight()),
+ maRawMaskedAccessor,
+ maColorLookup(
+ maAccessor,
+ aSrcColor) );
+ }
+ else
+ {
+ GenericColorImageAccessor aSrcAcc( rAlphaMask );
+ maGenericColorBlendAccessor.setColor( aSrcColor );
+
+ vigra::copyImage( srcIterRange(vigra::Diff2D(),
+ aSrcAcc,
+ rSrcRect),
+ destIter(maBegin,
+ maGenericColorBlendAccessor,
+ rDstPoint) );
+ }
+ }
+
+ virtual void drawMaskedColor_i(Color aSrcColor,
+ const BitmapDeviceSharedPtr& rAlphaMask,
+ const basegfx::B2IRange& rSrcRect,
+ const basegfx::B2IPoint& rDstPoint,
+ const BitmapDeviceSharedPtr& rClip )
+ {
+ boost::shared_ptr<mask_bitmap_type> pMask( getCompatibleClipMask(rAlphaMask) );
+ boost::shared_ptr<alphamask_bitmap_type> pAlpha( getCompatibleAlphaMask(rAlphaMask) );
+
+ if( pAlpha )
+ {
+ const composite_iterator_type aBegin( getMaskedIter(rClip) );
+ maMaskedColorBlendAccessor.get1stWrappedAccessor().setColor(
+ aSrcColor );
+
+ vigra::copyImage( srcIterRange(pAlpha->maBegin,
+ pAlpha->maRawAccessor,
+ rSrcRect),
+ destIter(aBegin,
+ maMaskedColorBlendAccessor,
+ rDstPoint) );
+ }
+ else if( pMask )
+ {
+ boost::shared_ptr<mask_bitmap_type> pClipMask( getCompatibleClipMask(rClip) );
+ OSL_ASSERT( pClipMask );
+
+ // setup a ((iter,mask),clipMask) composite composite
+ // iterator, to pass both masks (clip and alpha mask)
+ // to the algorithm
+ const composite_composite_mask_iterator_type aBegin(
+ composite_iterator_type(
+ maBegin + vigra::Diff2D(rDstPoint.getX(),
+ rDstPoint.getY()),
+ pMask->maBegin + topLeft(rSrcRect)),
+ pClipMask->maBegin + vigra::Diff2D(rDstPoint.getX(),
+ rDstPoint.getY()) );
+
+ fillImage(aBegin,
+ aBegin + vigra::Diff2D(rSrcRect.getWidth(),
+ rSrcRect.getHeight()),
+ maRawMaskedMaskAccessor,
+ maColorLookup(
+ maAccessor,
+ aSrcColor) );
+ }
+ else
+ {
+ GenericColorImageAccessor aSrcAcc( rAlphaMask );
+ const composite_iterator_type aBegin( getMaskedIter(rClip) );
+ maGenericMaskedColorBlendAccessor.get1stWrappedAccessor().setColor(
+ aSrcColor );
+
+ vigra::copyImage( srcIterRange(vigra::Diff2D(),
+ aSrcAcc,
+ rSrcRect),
+ destIter(aBegin,
+ maGenericMaskedColorBlendAccessor,
+ rDstPoint) );
+ }
+ }
+
+ template< typename Iterator, typename Acc >
+ void implDrawMaskedBitmap(const BitmapDeviceSharedPtr& rSrcBitmap,
+ const BitmapDeviceSharedPtr& rMask,
+ const basegfx::B2IRange& rSrcRect,
+ const basegfx::B2IRange& rDstRect,
+ const Iterator& begin,
+ const Acc& acc)
+ {
+ boost::shared_ptr<BitmapRenderer> pSrcBmp( getCompatibleBitmap(rSrcBitmap) );
+ boost::shared_ptr<mask_bitmap_type> pMask( getCompatibleClipMask(rMask) );
+ OSL_ASSERT( pMask && pSrcBmp );
+
+ scaleImage(
+ srcIterRange(composite_iterator_type(
+ pSrcBmp->maBegin,
+ pMask->maBegin),
+ joined_image_accessor_type(
+ pSrcBmp->maAccessor,
+ pMask->maRawAccessor),
+ rSrcRect),
+ destIterRange(begin,
+ typename masked_input_splitting_accessor<
+ Acc,
+ joined_image_accessor_type,
+ Masks::clipmask_polarity,
+ FastMask >::type(acc),
+ rDstRect),
+ rSrcBitmap.get() == this);
+ }
+
+ template< typename Iterator, typename Acc >
+ void implDrawMaskedBitmapGeneric(const BitmapDeviceSharedPtr& rSrcBitmap,
+ const BitmapDeviceSharedPtr& rMask,
+ const basegfx::B2IRange& rSrcRect,
+ const basegfx::B2IRange& rDstRect,
+ const Iterator& begin,
+ const Acc& acc)
+ {
+ GenericColorImageAccessor aSrcAcc( rSrcBitmap );
+ GenericColorImageAccessor aMaskAcc( rMask );
+
+ const vigra::Diff2D aTopLeft(rSrcRect.getMinX(),
+ rSrcRect.getMinY());
+ const vigra::Diff2D aBottomRight(rSrcRect.getMaxX(),
+ rSrcRect.getMaxY());
+ scaleImage(
+ vigra::make_triple(
+ generic_composite_iterator_type(
+ aTopLeft,aTopLeft),
+ generic_composite_iterator_type(
+ aBottomRight,aBottomRight),
+ joined_generic_image_accessor_type(
+ aSrcAcc,
+ aMaskAcc)),
+ destIterRange(begin,
+ typename masked_input_splitting_accessor<
+ Acc,
+ joined_generic_image_accessor_type,
+ Masks::clipmask_polarity,
+ NoFastMask >::type(acc),
+ rDstRect));
+ }
+
+ virtual void drawMaskedBitmap_i(const BitmapDeviceSharedPtr& rSrcBitmap,
+ const BitmapDeviceSharedPtr& rMask,
+ const basegfx::B2IRange& rSrcRect,
+ const basegfx::B2IRange& rDstRect,
+ DrawMode drawMode )
+ {
+ if( isCompatibleClipMask(rMask) &&
+ isCompatibleBitmap(rSrcBitmap) )
+ {
+ if( drawMode == DrawMode_XOR )
+ implDrawMaskedBitmap(rSrcBitmap, rMask,
+ rSrcRect, rDstRect,
+ maBegin,
+ maXorAccessor);
+ else
+ implDrawMaskedBitmap(rSrcBitmap, rMask,
+ rSrcRect, rDstRect,
+ maBegin,
+ maAccessor);
+ }
+ else
+ {
+ if( drawMode == DrawMode_XOR )
+ implDrawMaskedBitmapGeneric(rSrcBitmap, rMask,
+ rSrcRect, rDstRect,
+ maBegin,
+ maXorAccessor);
+ else
+ implDrawMaskedBitmapGeneric(rSrcBitmap, rMask,
+ rSrcRect, rDstRect,
+ maBegin,
+ maAccessor);
+ }
+ }
+
+ virtual void drawMaskedBitmap_i(const BitmapDeviceSharedPtr& rSrcBitmap,
+ const BitmapDeviceSharedPtr& rMask,
+ const basegfx::B2IRange& rSrcRect,
+ const basegfx::B2IRange& rDstRect,
+ DrawMode drawMode,
+ const BitmapDeviceSharedPtr& rClip )
+ {
+ if( isCompatibleClipMask(rMask) &&
+ isCompatibleBitmap(rSrcBitmap) )
+ {
+ if( drawMode == DrawMode_XOR )
+ implDrawMaskedBitmap(rSrcBitmap, rMask,
+ rSrcRect, rDstRect,
+ getMaskedIter(rClip),
+ maMaskedXorAccessor);
+ else
+ implDrawMaskedBitmap(rSrcBitmap, rMask,
+ rSrcRect, rDstRect,
+ getMaskedIter(rClip),
+ maMaskedAccessor);
+ }
+ else
+ {
+ if( drawMode == DrawMode_XOR )
+ implDrawMaskedBitmapGeneric(rSrcBitmap, rMask,
+ rSrcRect, rDstRect,
+ getMaskedIter(rClip),
+ maMaskedXorAccessor);
+ else
+ implDrawMaskedBitmapGeneric(rSrcBitmap, rMask,
+ rSrcRect, rDstRect,
+ getMaskedIter(rClip),
+ maMaskedAccessor);
+ }
+ }
+ };
+} // namespace
+
+struct ImplBitmapDevice
+{
+ /** Bitmap memory plus deleter.
+
+ Always points to the start of the mem
+ */
+ RawMemorySharedArray mpMem;
+
+ /// Palette memory plus deleter (might be NULL)
+ PaletteMemorySharedVector mpPalette;
+
+ /** Bounds of the device.
+
+ maBounds.getWidth()/getHeight() yield the true size of the
+ device (i.e. the rectangle given by maBounds covers the device
+ area under the excluding-bottommost-and-rightmost-pixels fill
+ rule)
+ */
+ basegfx::B2IRange maBounds;
+
+ /** Bounds of the device.
+
+ maBounds.getWidth()/getHeight() yield the true size of the
+ device minus 1 (i.e. the rectangle given by maBounds covers
+ the device area under the
+ including-the-bottommost-and-rightmost-pixels fill rule).
+
+ The member is used to clip line stroking against the device
+ bounds.
+ */
+ basegfx::B2IRange maLineClipRect;
+
+ /// Scanline format, as provided at the constructor
+ sal_Int32 mnScanlineFormat;
+
+ /// Scanline stride. Negative for bottom-to-top formats
+ sal_Int32 mnScanlineStride;
+
+ /// raw ptr to 0th scanline. used for cloning a generic renderer
+ sal_uInt8* mpFirstScanline;
+
+ /** (Optional) device sharing the same memory, and used for input
+ clip masks/alpha masks/bitmaps that don't match our exact
+ bitmap format.
+
+ This is to avoid the combinatorical explosion when dealing
+ with n bitmap formats, which could be combined with n clip
+ masks, alpha masks and bitmap masks (yielding a total of n^4
+ combinations). Since each BitmapRenderer is specialized for
+ one specific combination of said formats, a lot of duplicate
+ code would be generated, most of which probably never
+ used. Therefore, only the most common combinations are
+ specialized templates, the remainder gets handled by this
+ generic renderer (via runtime polymorphism).
+ */
+ BitmapDeviceSharedPtr mpGenericRenderer;
+};
+
+
+BitmapDevice::BitmapDevice( const basegfx::B2IRange& rBounds,
+ sal_Int32 nScanlineFormat,
+ sal_Int32 nScanlineStride,
+ sal_uInt8* pFirstScanline,
+ const RawMemorySharedArray& rMem,
+ const PaletteMemorySharedVector& rPalette ) :
+ mpImpl( new ImplBitmapDevice )
+{
+ mpImpl->mpMem = rMem;
+ mpImpl->mpPalette = rPalette;
+ mpImpl->maBounds = rBounds;
+ mpImpl->maLineClipRect = basegfx::B2IRange( rBounds.getMinX(),
+ rBounds.getMinY(),
+ rBounds.getMaxX()-1,
+ rBounds.getMaxY()-1 );
+ mpImpl->mnScanlineFormat = nScanlineFormat;
+ mpImpl->mnScanlineStride = nScanlineStride;
+ mpImpl->mpFirstScanline = pFirstScanline;
+}
+
+BitmapDevice::~BitmapDevice()
+{
+ // outline, because of internal ImplBitmapDevice
+}
+
+basegfx::B2IVector BitmapDevice::getSize() const
+{
+
+ return basegfx::B2IVector(
+ mpImpl->maBounds.getMaxX() - mpImpl->maBounds.getMinX(),
+ mpImpl->maBounds.getMaxY() - mpImpl->maBounds.getMinY() );
+}
+
+bool BitmapDevice::isTopDown() const
+{
+ return mpImpl->mnScanlineStride >= 0;
+}
+
+sal_Int32 BitmapDevice::getScanlineFormat() const
+{
+ return mpImpl->mnScanlineFormat;
+}
+
+sal_Int32 BitmapDevice::getScanlineStride() const
+{
+ return mpImpl->mnScanlineStride < 0 ?
+ -mpImpl->mnScanlineStride : mpImpl->mnScanlineStride;
+}
+
+RawMemorySharedArray BitmapDevice::getBuffer() const
+{
+ return mpImpl->mpMem;
+}
+
+PaletteMemorySharedVector BitmapDevice::getPalette() const
+{
+ return mpImpl->mpPalette;
+}
+
+sal_Int32 BitmapDevice::getPaletteEntryCount() const
+{
+ return mpImpl->mpPalette ? mpImpl->mpPalette->size() : 0;
+}
+
+void BitmapDevice::clear( Color fillColor )
+{
+ clear_i( fillColor, mpImpl->maBounds );
+}
+
+void BitmapDevice::setPixel( const basegfx::B2IPoint& rPt,
+ Color lineColor,
+ DrawMode drawMode )
+{
+ if( mpImpl->maLineClipRect.isInside(rPt) )
+ setPixel_i(rPt,lineColor,drawMode);
+}
+
+void BitmapDevice::setPixel( const basegfx::B2IPoint& rPt,
+ Color lineColor,
+ DrawMode drawMode,
+ const BitmapDeviceSharedPtr& rClip )
+{
+ if( !rClip )
+ {
+ setPixel(rPt,lineColor,drawMode);
+ return;
+ }
+
+ if( mpImpl->maLineClipRect.isInside(rPt) )
+ {
+ if( isCompatibleClipMask( rClip ) )
+ setPixel_i(rPt,lineColor,drawMode,rClip);
+ else
+ getGenericRenderer()->setPixel( rPt, lineColor, drawMode, rClip );
+ }
+}
+
+Color BitmapDevice::getPixel( const basegfx::B2IPoint& rPt )
+{
+ if( mpImpl->maLineClipRect.isInside(rPt) )
+ return getPixel_i(rPt);
+
+ return Color();
+}
+
+sal_uInt32 BitmapDevice::getPixelData( const basegfx::B2IPoint& rPt )
+{
+ if( mpImpl->maLineClipRect.isInside(rPt) )
+ return getPixelData_i(rPt);
+
+ return 0;
+}
+
+void BitmapDevice::drawLine( const basegfx::B2IPoint& rPt1,
+ const basegfx::B2IPoint& rPt2,
+ Color lineColor,
+ DrawMode drawMode )
+{
+ drawLine_i( rPt1,
+ rPt2,
+ mpImpl->maLineClipRect,
+ lineColor,
+ drawMode );
+}
+
+void BitmapDevice::drawLine( const basegfx::B2IPoint& rPt1,
+ const basegfx::B2IPoint& rPt2,
+ Color lineColor,
+ DrawMode drawMode,
+ const BitmapDeviceSharedPtr& rClip )
+{
+ if( !rClip )
+ {
+ drawLine(rPt1,rPt2,lineColor,drawMode);
+ return;
+ }
+
+ if( isCompatibleClipMask( rClip ) )
+ drawLine_i( rPt1,
+ rPt2,
+ mpImpl->maLineClipRect,
+ lineColor,
+ drawMode,
+ rClip );
+ else
+ getGenericRenderer()->drawLine( rPt1, rPt2, lineColor,
+ drawMode, rClip );
+}
+
+void BitmapDevice::drawPolygon( const basegfx::B2DPolygon& rPoly,
+ Color lineColor,
+ DrawMode drawMode )
+{
+ const sal_uInt32 numVertices( rPoly.count() );
+ if( numVertices )
+ drawPolygon_i( rPoly,
+ mpImpl->maLineClipRect,
+ lineColor, drawMode );
+}
+
+void BitmapDevice::drawPolygon( const basegfx::B2DPolygon& rPoly,
+ Color lineColor,
+ DrawMode drawMode,
+ const BitmapDeviceSharedPtr& rClip )
+{
+ if( !rClip )
+ {
+ drawPolygon(rPoly,lineColor,drawMode);
+ return;
+ }
+
+ const sal_uInt32 numVertices( rPoly.count() );
+ if( numVertices )
+ {
+ if( isCompatibleClipMask( rClip ) )
+ drawPolygon_i( rPoly,
+ mpImpl->maLineClipRect,
+ lineColor, drawMode, rClip );
+ else
+ getGenericRenderer()->drawPolygon( rPoly, lineColor,
+ drawMode, rClip );
+ }
+}
+
+void BitmapDevice::fillPolyPolygon( const basegfx::B2DPolyPolygon& rPoly,
+ Color fillColor,
+ DrawMode drawMode )
+{
+ fillPolyPolygon_i( rPoly, fillColor, drawMode, mpImpl->maBounds );
+}
+
+void BitmapDevice::fillPolyPolygon( const basegfx::B2DPolyPolygon& rPoly,
+ Color fillColor,
+ DrawMode drawMode,
+ const BitmapDeviceSharedPtr& rClip )
+{
+ if( !rClip )
+ {
+ fillPolyPolygon(rPoly,fillColor,drawMode);
+ return;
+ }
+
+ if( isCompatibleClipMask( rClip ) )
+ fillPolyPolygon_i( rPoly, fillColor, drawMode, mpImpl->maBounds, rClip );
+ else
+ getGenericRenderer()->fillPolyPolygon( rPoly, fillColor,
+ drawMode, rClip );
+}
+
+
+namespace
+{
+ void assertImagePoint( const basegfx::B2IPoint& rPt,
+ const basegfx::B2IRange& rPermittedRange )
+ {
+ (void)rPt; (void)rPermittedRange;
+ OSL_ASSERT( rPermittedRange.isInside(rPt) );
+ }
+
+ void assertImageRange( const basegfx::B2IRange& rRange,
+ const basegfx::B2IRange& rPermittedRange )
+ {
+#if OSL_DEBUG_LEVEL > 0
+ basegfx::B2IRange aRange( rRange );
+ aRange.intersect( rPermittedRange );
+
+ OSL_ASSERT( aRange == rRange );
+#else
+ (void)rRange; (void)rPermittedRange;
+#endif
+ }
+
+ // TODO(Q3): Move canvas/canvastools.hxx clipBlit() down
+ // to basegfx, and use here!
+ bool clipAreaImpl( ::basegfx::B2IRange& io_rSourceArea,
+ ::basegfx::B2IPoint& io_rDestPoint,
+ const ::basegfx::B2IRange& rSourceBounds,
+ const ::basegfx::B2IRange& rDestBounds )
+ {
+ const ::basegfx::B2IPoint aSourceTopLeft(
+ io_rSourceArea.getMinimum() );
+
+ ::basegfx::B2IRange aLocalSourceArea( io_rSourceArea );
+
+ // clip source area (which must be inside rSourceBounds)
+ aLocalSourceArea.intersect( rSourceBounds );
+
+ if( aLocalSourceArea.isEmpty() )
+ return false;
+
+ // calc relative new source area points (relative to orig
+ // source area)
+ const ::basegfx::B2IVector aUpperLeftOffset(
+ aLocalSourceArea.getMinimum()-aSourceTopLeft );
+ const ::basegfx::B2IVector aLowerRightOffset(
+ aLocalSourceArea.getMaximum()-aSourceTopLeft );
+
+ ::basegfx::B2IRange aLocalDestArea( io_rDestPoint + aUpperLeftOffset,
+ io_rDestPoint + aLowerRightOffset );
+
+ // clip dest area (which must be inside rDestBounds)
+ aLocalDestArea.intersect( rDestBounds );
+
+ if( aLocalDestArea.isEmpty() )
+ return false;
+
+ // calc relative new dest area points (relative to orig
+ // source area)
+ const ::basegfx::B2IVector aDestUpperLeftOffset(
+ aLocalDestArea.getMinimum()-io_rDestPoint );
+ const ::basegfx::B2IVector aDestLowerRightOffset(
+ aLocalDestArea.getMaximum()-io_rDestPoint );
+
+ io_rSourceArea = ::basegfx::B2IRange( aSourceTopLeft + aDestUpperLeftOffset,
+ aSourceTopLeft + aDestLowerRightOffset );
+ io_rDestPoint = aLocalDestArea.getMinimum();
+
+ return true;
+ }
+
+ // TODO(Q3): Move canvas/canvastools.hxx clipBlit() down
+ // to basegfx, and use here!
+ bool clipAreaImpl( ::basegfx::B2IRange& io_rDestArea,
+ ::basegfx::B2IRange& io_rSourceArea,
+ const ::basegfx::B2IRange& rDestBounds,
+ const ::basegfx::B2IRange& rSourceBounds )
+ {
+ // extract inherent scale
+ const double nScaleX( io_rDestArea.getWidth() / (double)io_rSourceArea.getWidth() );
+ const double nScaleY( io_rDestArea.getHeight() / (double)io_rSourceArea.getHeight() );
+
+ // extract range origins
+ const basegfx::B2IPoint aDestTopLeft(
+ io_rDestArea.getMinimum() );
+ const ::basegfx::B2IPoint aSourceTopLeft(
+ io_rSourceArea.getMinimum() );
+
+ ::basegfx::B2IRange aLocalSourceArea( io_rSourceArea );
+
+ // clip source area (which must be inside rSourceBounds)
+ aLocalSourceArea.intersect( rSourceBounds );
+
+ if( aLocalSourceArea.isEmpty() )
+ return false;
+
+ // calc relative new source area points (relative to orig
+ // source area)
+ const ::basegfx::B2IVector aUpperLeftOffset(
+ aLocalSourceArea.getMinimum()-aSourceTopLeft );
+ const ::basegfx::B2IVector aLowerRightOffset(
+ aLocalSourceArea.getMaximum()-aSourceTopLeft );
+
+ ::basegfx::B2IRange aLocalDestArea( basegfx::fround(aDestTopLeft.getX() + nScaleX*aUpperLeftOffset.getX()),
+ basegfx::fround(aDestTopLeft.getY() + nScaleY*aUpperLeftOffset.getY()),
+ basegfx::fround(aDestTopLeft.getX() + nScaleX*aLowerRightOffset.getX()),
+ basegfx::fround(aDestTopLeft.getY() + nScaleY*aLowerRightOffset.getY()) );
+
+ // clip dest area (which must be inside rDestBounds)
+ aLocalDestArea.intersect( rDestBounds );
+
+ if( aLocalDestArea.isEmpty() )
+ return false;
+
+ // calc relative new dest area points (relative to orig
+ // source area)
+ const ::basegfx::B2IVector aDestUpperLeftOffset(
+ aLocalDestArea.getMinimum()-aDestTopLeft );
+ const ::basegfx::B2IVector aDestLowerRightOffset(
+ aLocalDestArea.getMaximum()-aDestTopLeft );
+
+ io_rSourceArea = ::basegfx::B2IRange( basegfx::fround(aSourceTopLeft.getX() + aDestUpperLeftOffset.getX()/nScaleX),
+ basegfx::fround(aSourceTopLeft.getY() + aDestUpperLeftOffset.getY()/nScaleY),
+ basegfx::fround(aSourceTopLeft.getX() + aDestLowerRightOffset.getX()/nScaleX),
+ basegfx::fround(aSourceTopLeft.getY() + aDestLowerRightOffset.getY()/nScaleY) );
+ io_rDestArea = aLocalDestArea;
+
+ // final source area clip (chopping round-offs)
+ io_rSourceArea.intersect( rSourceBounds );
+
+ if( io_rSourceArea.isEmpty() )
+ return false;
+
+
+ return true;
+ }
+}
+
+void BitmapDevice::drawBitmap( const BitmapDeviceSharedPtr& rSrcBitmap,
+ const basegfx::B2IRange& rSrcRect,
+ const basegfx::B2IRange& rDstRect,
+ DrawMode drawMode )
+{
+ const basegfx::B2IVector& rSrcSize( rSrcBitmap->getSize() );
+ const basegfx::B2IRange aSrcBounds( 0,0,rSrcSize.getX(),rSrcSize.getY() );
+ basegfx::B2IRange aSrcRange( rSrcRect );
+ basegfx::B2IRange aDestRange( rDstRect );
+
+ if( clipAreaImpl( aDestRange,
+ aSrcRange,
+ mpImpl->maBounds,
+ aSrcBounds ))
+ {
+ assertImageRange(aDestRange,mpImpl->maBounds);
+ assertImageRange(aSrcRange,aSrcBounds);
+
+ drawBitmap_i( rSrcBitmap, aSrcRange, aDestRange, drawMode );
+ }
+}
+
+void BitmapDevice::drawBitmap( const BitmapDeviceSharedPtr& rSrcBitmap,
+ const basegfx::B2IRange& rSrcRect,
+ const basegfx::B2IRange& rDstRect,
+ DrawMode drawMode,
+ const BitmapDeviceSharedPtr& rClip )
+{
+ if( !rClip )
+ {
+ drawBitmap(rSrcBitmap,rSrcRect,rDstRect,drawMode);
+ return;
+ }
+
+ const basegfx::B2IVector& rSrcSize( rSrcBitmap->getSize() );
+ const basegfx::B2IRange aSrcBounds( 0,0,rSrcSize.getX(),rSrcSize.getY() );
+ basegfx::B2IRange aSrcRange( rSrcRect );
+ basegfx::B2IRange aDestRange( rDstRect );
+
+ if( clipAreaImpl( aDestRange,
+ aSrcRange,
+ mpImpl->maBounds,
+ aSrcBounds ))
+ {
+ assertImageRange(aDestRange,mpImpl->maBounds);
+ assertImageRange(aSrcRange,aSrcBounds);
+
+ if( isCompatibleClipMask( rClip ) )
+ {
+ drawBitmap_i( rSrcBitmap, aSrcRange, aDestRange, drawMode, rClip );
+ }
+ else
+ {
+ getGenericRenderer()->drawBitmap( rSrcBitmap, rSrcRect,
+ rDstRect, drawMode, rClip );
+ }
+ }
+}
+
+void BitmapDevice::drawMaskedColor( Color aSrcColor,
+ const BitmapDeviceSharedPtr& rAlphaMask,
+ const basegfx::B2IRange& rSrcRect,
+ const basegfx::B2IPoint& rDstPoint )
+{
+ const basegfx::B2IVector& rSrcSize( rAlphaMask->getSize() );
+ const basegfx::B2IRange aSrcBounds( 0,0,rSrcSize.getX(),rSrcSize.getY() );
+ basegfx::B2IRange aSrcRange( rSrcRect );
+ basegfx::B2IPoint aDestPoint( rDstPoint );
+
+ if( clipAreaImpl( aSrcRange,
+ aDestPoint,
+ aSrcBounds,
+ mpImpl->maBounds ))
+ {
+ assertImagePoint(aDestPoint,mpImpl->maBounds);
+ assertImageRange(aSrcRange,aSrcBounds);
+
+ if( rAlphaMask.get() == this )
+ {
+ // src == dest, copy rAlphaMask beforehand
+ // ---------------------------------------------------
+
+ const basegfx::B2ITuple aSize( aSrcRange.getWidth(),
+ aSrcRange.getHeight() );
+ BitmapDeviceSharedPtr pAlphaCopy(
+ cloneBitmapDevice( aSize,
+ shared_from_this()) );
+ basegfx::B2ITuple aGcc3WorkaroundTemporary;
+ const basegfx::B2IRange aAlphaRange( aGcc3WorkaroundTemporary,
+ aSize );
+ pAlphaCopy->drawBitmap(rAlphaMask,
+ aSrcRange,
+ aAlphaRange,
+ DrawMode_PAINT);
+ drawMaskedColor_i( aSrcColor, pAlphaCopy, aAlphaRange, aDestPoint );
+ }
+ else
+ {
+ drawMaskedColor_i( aSrcColor, rAlphaMask, aSrcRange, aDestPoint );
+ }
+ }
+}
+
+void BitmapDevice::drawMaskedColor( Color aSrcColor,
+ const BitmapDeviceSharedPtr& rAlphaMask,
+ const basegfx::B2IRange& rSrcRect,
+ const basegfx::B2IPoint& rDstPoint,
+ const BitmapDeviceSharedPtr& rClip )
+{
+ if( !rClip )
+ {
+ drawMaskedColor(aSrcColor,rAlphaMask,rSrcRect,rDstPoint);
+ return;
+ }
+
+ const basegfx::B2IVector& rSrcSize( rAlphaMask->getSize() );
+ const basegfx::B2IRange aSrcBounds( 0,0,rSrcSize.getX(),rSrcSize.getY() );
+ basegfx::B2IRange aSrcRange( rSrcRect );
+ basegfx::B2IPoint aDestPoint( rDstPoint );
+
+ if( clipAreaImpl( aSrcRange,
+ aDestPoint,
+ aSrcBounds,
+ mpImpl->maBounds ))
+ {
+ assertImagePoint(aDestPoint,mpImpl->maBounds);
+ assertImageRange(aSrcRange,aSrcBounds);
+
+ if( isCompatibleClipMask( rClip ) )
+ {
+ if( rAlphaMask.get() == this )
+ {
+ // src == dest, copy rAlphaMask beforehand
+ // ---------------------------------------------------
+
+ const basegfx::B2ITuple aSize( aSrcRange.getWidth(),
+ aSrcRange.getHeight() );
+ BitmapDeviceSharedPtr pAlphaCopy(
+ cloneBitmapDevice( aSize,
+ shared_from_this()) );
+ basegfx::B2ITuple aGcc3WorkaroundTemporary;
+ const basegfx::B2IRange aAlphaRange( aGcc3WorkaroundTemporary,
+ aSize );
+ pAlphaCopy->drawBitmap(rAlphaMask,
+ aSrcRange,
+ aAlphaRange,
+ DrawMode_PAINT);
+ drawMaskedColor_i( aSrcColor, pAlphaCopy, aAlphaRange, aDestPoint, rClip );
+ }
+ else
+ {
+ drawMaskedColor_i( aSrcColor, rAlphaMask, aSrcRange, aDestPoint, rClip );
+ }
+ }
+ else
+ {
+ getGenericRenderer()->drawMaskedColor( aSrcColor, rAlphaMask,
+ rSrcRect, rDstPoint, rClip );
+ }
+ }
+}
+
+void BitmapDevice::drawMaskedBitmap( const BitmapDeviceSharedPtr& rSrcBitmap,
+ const BitmapDeviceSharedPtr& rMask,
+ const basegfx::B2IRange& rSrcRect,
+ const basegfx::B2IRange& rDstRect,
+ DrawMode drawMode )
+{
+ OSL_ASSERT( rMask->getSize() == rSrcBitmap->getSize() );
+
+ const basegfx::B2IVector& rSrcSize( rSrcBitmap->getSize() );
+ const basegfx::B2IRange aSrcBounds( 0,0,rSrcSize.getX(),rSrcSize.getY() );
+ basegfx::B2IRange aSrcRange( rSrcRect );
+ basegfx::B2IRange aDestRange( rDstRect );
+
+ if( clipAreaImpl( aDestRange,
+ aSrcRange,
+ mpImpl->maBounds,
+ aSrcBounds ))
+ {
+ assertImageRange(aDestRange,mpImpl->maBounds);
+ assertImageRange(aSrcRange,aSrcBounds);
+
+ drawMaskedBitmap_i( rSrcBitmap, rMask, aSrcRange, aDestRange, drawMode );
+ }
+}
+
+void BitmapDevice::drawMaskedBitmap( const BitmapDeviceSharedPtr& rSrcBitmap,
+ const BitmapDeviceSharedPtr& rMask,
+ const basegfx::B2IRange& rSrcRect,
+ const basegfx::B2IRange& rDstRect,
+ DrawMode drawMode,
+ const BitmapDeviceSharedPtr& rClip )
+{
+ if( !rClip )
+ {
+ drawMaskedBitmap(rSrcBitmap,rMask,rSrcRect,rDstRect,drawMode);
+ return;
+ }
+
+ OSL_ASSERT( rMask->getSize() == rSrcBitmap->getSize() );
+
+ const basegfx::B2IVector& rSrcSize( rSrcBitmap->getSize() );
+ const basegfx::B2IRange aSrcBounds( 0,0,rSrcSize.getX(),rSrcSize.getY() );
+ basegfx::B2IRange aSrcRange( rSrcRect );
+ basegfx::B2IRange aDestRange( rDstRect );
+
+ if( clipAreaImpl( aDestRange,
+ aSrcRange,
+ mpImpl->maBounds,
+ aSrcBounds ))
+ {
+ assertImageRange(aDestRange,mpImpl->maBounds);
+ assertImageRange(aSrcRange,aSrcBounds);
+
+ if( isCompatibleClipMask( rClip ) )
+ {
+ drawMaskedBitmap_i( rSrcBitmap, rMask, aSrcRange, aDestRange, drawMode, rClip );
+ }
+ else
+ {
+ getGenericRenderer()->drawMaskedBitmap( rSrcBitmap, rMask, rSrcRect,
+ rDstRect, drawMode, rClip );
+ }
+ }
+}
+
+
+//----------------------------------------------------------------------------------
+
+/** Standard clip and alpha masks
+ */
+struct StdMasks
+{
+ typedef PixelFormatTraits_GREY1_MSB clipmask_format_traits;
+ typedef PixelFormatTraits_GREY8 alphamask_format_traits;
+
+ /// Clipmask: 0 means opaque
+ static const bool clipmask_polarity = false;
+
+ /// Alpha mask: 0 means fully transparent
+ static const bool alphamask_polarity = true;
+};
+
+#if 0
+/** Clip and alpha masks for the generic renderer (of course, those
+ need to be generic, too)
+ */
+struct MaskTraitsGeneric
+{
+ typedef PixelFormatTraits_GenericInteger clipmask_format_traits;
+ typedef PixelFormatTraits_GenericInteger alphamask_format_traits;
+};
+#endif
+
+//----------------------------------------------------------------------------------
+
+// Some compilers don't like the nested template wrap_accessor
+// reference in the parameter list - being slightly less type safe,
+// then.
+#ifndef BASEBMP_NO_NESTED_TEMPLATE_PARAMETER
+
+/// Produces a specialized renderer for the given pixel format
+template< class FormatTraits, class MaskTraits >
+BitmapDeviceSharedPtr createRenderer(
+ const basegfx::B2IRange& rBounds,
+ sal_Int32 nScanlineFormat,
+ sal_Int32 nScanlineStride,
+ sal_uInt8* pFirstScanline,
+ typename FormatTraits::raw_accessor_type const& rRawAccessor,
+ typename FormatTraits::accessor_selector::template wrap_accessor<
+ typename FormatTraits::raw_accessor_type>::type const& rAccessor,
+ boost::shared_array< sal_uInt8 > pMem,
+ const PaletteMemorySharedVector& pPal )
+
+#else
+
+template< class FormatTraits, class MaskTraits, class Accessor >
+BitmapDeviceSharedPtr createRenderer(
+ const basegfx::B2IRange& rBounds,
+ sal_Int32 nScanlineFormat,
+ sal_Int32 nScanlineStride,
+ sal_uInt8* pFirstScanline,
+ typename FormatTraits::raw_accessor_type const& rRawAccessor,
+ Accessor const& rAccessor,
+ boost::shared_array< sal_uInt8 > pMem,
+ const PaletteMemorySharedVector& pPal )
+
+#endif
+{
+ typedef typename FormatTraits::iterator_type Iterator;
+ typedef BitmapRenderer< Iterator,
+ typename FormatTraits::raw_accessor_type,
+ typename FormatTraits::accessor_selector,
+ MaskTraits > Renderer;
+
+ return BitmapDeviceSharedPtr(
+ new Renderer( rBounds,
+ nScanlineFormat,
+ nScanlineStride,
+ pFirstScanline,
+ Iterator(
+ reinterpret_cast<typename Iterator::value_type*>(
+ pFirstScanline),
+ nScanlineStride),
+ rRawAccessor,
+ rAccessor,
+ pMem,
+ pPal ));
+}
+
+/// Create standard grey level palette
+PaletteMemorySharedVector createStandardPalette(
+ const PaletteMemorySharedVector& pPal,
+ sal_Int32 nNumEntries )
+{
+ if( pPal || nNumEntries <= 0 )
+ return pPal;
+
+ boost::shared_ptr< std::vector<Color> > pLocalPal(
+ new std::vector<Color>(nNumEntries) );
+
+ const sal_Int32 nIncrement( 0x00FFFFFF/nNumEntries );
+ --nNumEntries;
+ for( sal_Int32 i=0, c=0; i<nNumEntries; ++i,c+=nIncrement )
+ pLocalPal->at(i) = Color(0xFF000000 | c);
+
+ pLocalPal->at(nNumEntries) = Color(0xFFFFFFFF);
+
+ return pLocalPal;
+}
+
+template< class FormatTraits, class MaskTraits >
+BitmapDeviceSharedPtr createRenderer(
+ const basegfx::B2IRange& rBounds,
+ sal_Int32 nScanlineFormat,
+ sal_Int32 nScanlineStride,
+ sal_uInt8* pFirstScanline,
+ boost::shared_array< sal_uInt8 > pMem,
+ const PaletteMemorySharedVector& pPal )
+{
+ return createRenderer<FormatTraits,
+ MaskTraits>(rBounds,
+ nScanlineFormat,
+ nScanlineStride,
+ pFirstScanline,
+ typename FormatTraits::raw_accessor_type(),
+ typename FormatTraits::accessor_selector::template
+ wrap_accessor<
+ typename FormatTraits::raw_accessor_type>::type(),
+ pMem,
+ pPal);
+}
+
+template< class FormatTraits, class MaskTraits >
+BitmapDeviceSharedPtr createRenderer(
+ const basegfx::B2IRange& rBounds,
+ sal_Int32 nScanlineFormat,
+ sal_Int32 nScanlineStride,
+ sal_uInt8* pFirstScanline,
+ boost::shared_array< sal_uInt8 > pMem,
+ PaletteMemorySharedVector pPal,
+ int nBitsPerPixel )
+{
+ pPal = createStandardPalette(pPal,
+ 1UL << nBitsPerPixel);
+
+ OSL_ASSERT(pPal);
+ return createRenderer<FormatTraits,
+ MaskTraits>(rBounds,
+ nScanlineFormat,
+ nScanlineStride,
+ pFirstScanline,
+ typename FormatTraits::raw_accessor_type(),
+ typename FormatTraits::accessor_selector::template
+ wrap_accessor<
+ typename FormatTraits::raw_accessor_type>::type(
+ &pPal->at(0),
+ pPal->size()),
+ pMem,
+ pPal);
+}
+
+//----------------------------------------------------------------------------------
+
+// TODO(Q3): consolidate with canvas/canvastools.hxx! Best move this
+// to o3tl or sal/bithacks.hxx ...
+
+/** Compute the next highest power of 2 of a 32-bit value
+
+ Code devised by Sean Anderson, in good ole HAKMEM
+ tradition.
+
+ @return 1 << (lg(x - 1) + 1)
+*/
+inline sal_uInt32 nextPow2( sal_uInt32 x )
+{
+ --x;
+ x |= x >> 1;
+ x |= x >> 2;
+ x |= x >> 4;
+ x |= x >> 8;
+ x |= x >> 16;
+
+ return ++x;
+}
+
+//----------------------------------------------------------------------------------
+
+namespace
+{
+BitmapDeviceSharedPtr createBitmapDeviceImpl( const basegfx::B2IVector& rSize,
+ bool bTopDown,
+ sal_Int32 nScanlineFormat,
+ boost::shared_array< sal_uInt8 > pMem,
+ PaletteMemorySharedVector pPal,
+ const basegfx::B2IRange* pSubset )
+{
+ if( nScanlineFormat <= Format::NONE ||
+ nScanlineFormat > Format::MAX )
+ return BitmapDeviceSharedPtr();
+
+ static const sal_uInt8 bitsPerPixel[] =
+ {
+ 0, // NONE
+ 1, // ONE_BIT_MSB_GREY
+ 1, // ONE_BIT_LSB_GREY
+ 1, // ONE_BIT_MSB_PAL
+ 1, // ONE_BIT_LSB_PAL
+ 4, // FOUR_BIT_MSB_GREY
+ 4, // FOUR_BIT_LSB_GREY
+ 4, // FOUR_BIT_MSB_PAL
+ 4, // FOUR_BIT_LSB_PAL
+ 8, // EIGHT_BIT_PAL
+ 8, // EIGHT_BIT_GREY
+ 16, // SIXTEEN_BIT_LSB_TC_MASK
+ 16, // SIXTEEN_BIT_MSB_TC_MASK
+ 24, // TWENTYFOUR_BIT_TC_MASK
+ 32, // THIRTYTWO_BIT_TC_MASK
+ 32, // THIRTYTWO_BIT_TC_MASK_ARGB
+ };
+
+ sal_Int32 nScanlineStride(0);
+
+ // round up to full 8 bit, divide by 8
+ nScanlineStride = (rSize.getX()*bitsPerPixel[nScanlineFormat] + 7) >> 3;
+
+ // rounded up to next full power-of-two number of bytes
+ const sal_uInt32 bytesPerPixel = nextPow2(
+ (bitsPerPixel[nScanlineFormat] + 7) >> 3);
+
+ // now make nScanlineStride a multiple of bytesPerPixel
+ nScanlineStride = (nScanlineStride + bytesPerPixel - 1) / bytesPerPixel * bytesPerPixel;
+
+ // factor in bottom-up scanline order case
+ nScanlineStride *= bTopDown ? 1 : -1;
+
+ const std::size_t nMemSize(
+ (nScanlineStride < 0 ? -nScanlineStride : nScanlineStride)*rSize.getY() );
+
+ if( !pMem )
+ {
+ pMem.reset(
+ reinterpret_cast<sal_uInt8*>(rtl_allocateMemory( nMemSize )),
+ &rtl_freeMemory );
+ rtl_zeroMemory(pMem.get(),nMemSize);
+ }
+
+ sal_uInt8* pFirstScanline = nScanlineStride < 0 ?
+ pMem.get() + nMemSize + nScanlineStride : pMem.get();
+
+ // shrink render area to given subset, if given
+ basegfx::B2IRange aBounds(0,0,rSize.getX(),rSize.getY());
+ if( pSubset )
+ aBounds.intersect( *pSubset );
+
+ switch( nScanlineFormat )
+ {
+ // ----------------------------------------------------------------------
+ // one bit formats
+
+ case Format::ONE_BIT_MSB_GREY:
+ return createRenderer<PixelFormatTraits_GREY1_MSB,StdMasks>(
+ aBounds, nScanlineFormat, nScanlineStride,
+ pFirstScanline, pMem, pPal );
+
+ case Format::ONE_BIT_LSB_GREY:
+ return createRenderer<PixelFormatTraits_GREY1_LSB,StdMasks>(
+ aBounds, nScanlineFormat, nScanlineStride,
+ pFirstScanline, pMem, pPal );
+
+ case Format::ONE_BIT_MSB_PAL:
+ return createRenderer<PixelFormatTraits_PAL1_MSB,StdMasks>(
+ aBounds, nScanlineFormat, nScanlineStride,
+ pFirstScanline, pMem, pPal,
+ bitsPerPixel[nScanlineFormat] );
+
+ case Format::ONE_BIT_LSB_PAL:
+ return createRenderer<PixelFormatTraits_PAL1_LSB,StdMasks>(
+ aBounds, nScanlineFormat, nScanlineStride,
+ pFirstScanline, pMem, pPal,
+ bitsPerPixel[nScanlineFormat] );
+
+
+ // ----------------------------------------------------------------------
+ // four bit formats
+
+ case Format::FOUR_BIT_MSB_GREY:
+ return createRenderer<PixelFormatTraits_GREY4_MSB,StdMasks>(
+ aBounds, nScanlineFormat, nScanlineStride,
+ pFirstScanline, pMem, pPal );
+
+ case Format::FOUR_BIT_LSB_GREY:
+ return createRenderer<PixelFormatTraits_GREY4_LSB,StdMasks>(
+ aBounds, nScanlineFormat, nScanlineStride,
+ pFirstScanline, pMem, pPal );
+
+ case Format::FOUR_BIT_MSB_PAL:
+ return createRenderer<PixelFormatTraits_PAL4_MSB,StdMasks>(
+ aBounds, nScanlineFormat, nScanlineStride,
+ pFirstScanline, pMem, pPal,
+ bitsPerPixel[nScanlineFormat] );
+
+ case Format::FOUR_BIT_LSB_PAL:
+ return createRenderer<PixelFormatTraits_PAL4_LSB,StdMasks>(
+ aBounds, nScanlineFormat, nScanlineStride,
+ pFirstScanline, pMem, pPal,
+ bitsPerPixel[nScanlineFormat] );
+
+
+ // ----------------------------------------------------------------------
+ // eight bit formats
+
+ case Format::EIGHT_BIT_GREY:
+ return createRenderer<PixelFormatTraits_GREY8,StdMasks>(
+ aBounds, nScanlineFormat, nScanlineStride,
+ pFirstScanline, pMem, pPal );
+
+ case Format::EIGHT_BIT_PAL:
+ return createRenderer<PixelFormatTraits_PAL8,StdMasks>(
+ aBounds, nScanlineFormat, nScanlineStride,
+ pFirstScanline, pMem, pPal,
+ bitsPerPixel[nScanlineFormat] );
+
+
+ // ----------------------------------------------------------------------
+ // sixteen bit formats
+
+ case Format::SIXTEEN_BIT_LSB_TC_MASK:
+ return createRenderer<PixelFormatTraits_RGB16_565_LSB,StdMasks>(
+ aBounds, nScanlineFormat, nScanlineStride,
+ pFirstScanline, pMem, pPal );
+
+ case Format::SIXTEEN_BIT_MSB_TC_MASK:
+ return createRenderer<PixelFormatTraits_RGB16_565_MSB,StdMasks>(
+ aBounds, nScanlineFormat, nScanlineStride,
+ pFirstScanline, pMem, pPal );
+
+
+ // ----------------------------------------------------------------------
+ // twentyfour bit formats
+ case Format::TWENTYFOUR_BIT_TC_MASK:
+ return createRenderer<PixelFormatTraits_BGR24,StdMasks>(
+ aBounds, nScanlineFormat, nScanlineStride,
+ pFirstScanline, pMem, pPal );
+
+
+ // ----------------------------------------------------------------------
+ // thirtytwo bit formats
+
+ case Format::THIRTYTWO_BIT_TC_MASK:
+ return createRenderer<PixelFormatTraits_RGB32_888,StdMasks>(
+ aBounds, nScanlineFormat, nScanlineStride,
+ pFirstScanline, pMem, pPal );
+
+ case Format::THIRTYTWO_BIT_TC_MASK_ARGB:
+ return createRenderer<PixelFormatTraits_BGR32_888,StdMasks>(
+ aBounds, nScanlineFormat, nScanlineStride,
+ pFirstScanline, pMem, pPal );
+ }
+
+ // TODO(F3): other formats not yet implemented
+ return BitmapDeviceSharedPtr();
+}
+} // namespace
+
+
+BitmapDeviceSharedPtr createBitmapDevice( const basegfx::B2IVector& rSize,
+ bool bTopDown,
+ sal_Int32 nScanlineFormat )
+{
+ return createBitmapDeviceImpl( rSize,
+ bTopDown,
+ nScanlineFormat,
+ boost::shared_array< sal_uInt8 >(),
+ PaletteMemorySharedVector(),
+ NULL );
+}
+
+BitmapDeviceSharedPtr createBitmapDevice( const basegfx::B2IVector& rSize,
+ bool bTopDown,
+ sal_Int32 nScanlineFormat,
+ const PaletteMemorySharedVector& rPalette )
+{
+ return createBitmapDeviceImpl( rSize,
+ bTopDown,
+ nScanlineFormat,
+ boost::shared_array< sal_uInt8 >(),
+ rPalette,
+ NULL );
+}
+
+BitmapDeviceSharedPtr createBitmapDevice( const basegfx::B2IVector& rSize,
+ bool bTopDown,
+ sal_Int32 nScanlineFormat,
+ const RawMemorySharedArray& rMem,
+ const PaletteMemorySharedVector& rPalette )
+{
+ return createBitmapDeviceImpl( rSize,
+ bTopDown,
+ nScanlineFormat,
+ rMem,
+ rPalette,
+ NULL );
+}
+
+BitmapDeviceSharedPtr subsetBitmapDevice( const BitmapDeviceSharedPtr& rProto,
+ const basegfx::B2IRange& rSubset )
+{
+ return createBitmapDeviceImpl( rProto->getSize(),
+ rProto->isTopDown(),
+ rProto->getScanlineFormat(),
+ rProto->getBuffer(),
+ rProto->getPalette(),
+ &rSubset );
+}
+
+BitmapDeviceSharedPtr cloneBitmapDevice( const basegfx::B2IVector& rSize,
+ const BitmapDeviceSharedPtr& rProto )
+{
+ return createBitmapDeviceImpl( rSize,
+ rProto->isTopDown(),
+ rProto->getScanlineFormat(),
+ boost::shared_array< sal_uInt8 >(),
+ rProto->getPalette(),
+ NULL );
+}
+
+//----------------------------------------------------------------------------------
+
+/// Clone our device, with GenericImageAccessor to handle all formats
+BitmapDeviceSharedPtr BitmapDevice::getGenericRenderer() const
+{
+#if 0
+ // xxx TODO
+ typedef BitmapRenderer< PixelFormatTraits_GenericInteger::iterator_type,
+ PixelFormatTraits_GenericInteger::raw_accessor_type,
+ PixelFormatTraits_GenericInteger::accessor_selector,
+ MaskTraitsGeneric >
+ Renderer;
+
+ if( !mpImpl->mpGenericRenderer )
+ {
+ mpImpl->mpGenericRenderer.reset(
+ new Renderer(
+ mpImpl->maBounds,
+ isTopDown(),
+ getScanlineFormat(),
+ getScanlineStride(),
+ mpImpl->mpFirstScanline,
+ PixelFormatTraits_GenericInteger::iterator_type(),
+ GenericIntegerImageRawAccessor<Color>(
+ const_cast<BitmapDevice*>(this)->shared_from_this()),
+ GenericIntegerImageAccessor<Color>(
+ const_cast<BitmapDevice*>(this)->shared_from_this()),
+ getBuffer(),
+ getPalette() ));
+ }
+#endif
+
+ return mpImpl->mpGenericRenderer;
+}
+
+} // namespace basebmp
diff --git a/basebmp/source/debug.cxx b/basebmp/source/debug.cxx
new file mode 100644
index 000000000000..7781e43c19bc
--- /dev/null
+++ b/basebmp/source/debug.cxx
@@ -0,0 +1,106 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <osl/diagnose.h>
+
+#include <basegfx/point/b2ipoint.hxx>
+#include <basegfx/vector/b2ivector.hxx>
+
+#include <basebmp/scanlineformats.hxx>
+#include <basebmp/color.hxx>
+#include <basebmp/bitmapdevice.hxx>
+#include <basebmp/debug.hxx>
+
+#include <iomanip>
+
+namespace basebmp
+{
+ namespace
+ {
+ static const char* getFormatString( sal_Int32 nScanlineFormat )
+ {
+ switch( nScanlineFormat )
+ {
+ case Format::ONE_BIT_MSB_GREY:
+ return "ONE_BIT_MSB_GREY";
+ case Format::ONE_BIT_LSB_GREY:
+ return "ONE_BIT_LSB_GREY";
+ case Format::ONE_BIT_MSB_PAL:
+ return "ONE_BIT_MSB_PAL";
+ case Format::ONE_BIT_LSB_PAL:
+ return "ONE_BIT_LSB_PAL";
+ case Format::FOUR_BIT_MSB_GREY:
+ return "FOUR_BIT_MSB_GREY";
+ case Format::FOUR_BIT_LSB_GREY:
+ return "FOUR_BIT_LSB_GREY";
+ case Format::FOUR_BIT_MSB_PAL:
+ return "FOUR_BIT_MSB_PAL";
+ case Format::FOUR_BIT_LSB_PAL:
+ return "FOUR_BIT_LSB_PAL";
+ case Format::EIGHT_BIT_PAL:
+ return "EIGHT_BIT_PAL";
+ case Format::EIGHT_BIT_GREY:
+ return "EIGHT_BIT_GREY";
+ case Format::SIXTEEN_BIT_LSB_TC_MASK:
+ return "SIXTEEN_BIT_LSB_TC_MASK";
+ case Format::SIXTEEN_BIT_MSB_TC_MASK:
+ return "SIXTEEN_BIT_MSB_TC_MASK";
+ case Format::TWENTYFOUR_BIT_TC_MASK:
+ return "TWENTYFOUR_BIT_TC_MASK";
+ case Format::THIRTYTWO_BIT_TC_MASK:
+ return "THIRTYTWO_BIT_TC_MASK";
+ default:
+ return "<unknown>";
+ }
+ }
+ }
+
+ void debugDump( const BitmapDeviceSharedPtr& rDevice,
+ std::ostream& rOutputStream )
+ {
+ const basegfx::B2IVector aSize( rDevice->getSize() );
+ const bool bTopDown( rDevice->isTopDown() );
+ const sal_Int32 nScanlineFormat( rDevice->getScanlineFormat() );
+
+ rOutputStream
+ << "/* basebmp::BitmapDevice content dump */" << std::endl
+ << "/* Width = " << aSize.getX() << " */" << std::endl
+ << "/* Height = " << aSize.getY() << " */" << std::endl
+ << "/* TopDown = " << bTopDown << " */" << std::endl
+ << "/* Format = " << getFormatString(nScanlineFormat) << " */" << std::endl
+ << "/* (dumped entries are already mapped RGBA color values) */" << std::endl
+ << std::endl;
+
+ rOutputStream << std::hex;
+ for( int y=0; y<aSize.getY(); ++y )
+ {
+ for( int x=0; x<aSize.getX(); ++x )
+ rOutputStream << std::setw(8) << (sal_uInt32)rDevice->getPixel( basegfx::B2IPoint(x,y) ).toInt32() << " ";
+ rOutputStream << std::endl;
+ }
+ }
+}
diff --git a/basebmp/source/intconversion.hxx b/basebmp/source/intconversion.hxx
new file mode 100644
index 000000000000..0fb7a0bf684a
--- /dev/null
+++ b/basebmp/source/intconversion.hxx
@@ -0,0 +1,88 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_BASEBMP_INTCONVERSION_HXX
+#define INCLUDED_BASEBMP_INTCONVERSION_HXX
+
+#include <vigra/rgbvalue.hxx>
+#include <functional>
+
+namespace basebmp
+{
+ // metafunctions to retrieve correct POD from/to basebmp::Color
+ //------------------------------------------------------------------------
+
+ /// type-safe conversion from RgbValue to packed int32
+ template< class RgbVal > struct UInt32FromRgbValue
+ {
+ sal_uInt32 operator()( RgbVal const& c ) const
+ {
+ return (c[0] << 16) | (c[1] << 8) | c[2];
+ }
+ };
+
+ /// type-safe conversion from packed int32 to RgbValue
+ template< class RgbVal > struct RgbValueFromUInt32
+ {
+ RgbVal operator()( sal_uInt32 c ) const
+ {
+ return RgbVal((c >> 16) & 0xFF,
+ (c >> 8) & 0xFF,
+ c & 0xFF);
+ }
+ };
+
+ /// Get converter from given data type to sal_uInt32
+ template< typename DataType > struct uInt32Converter
+ {
+ typedef std::identity<DataType> to;
+ typedef std::identity<DataType> from;
+ };
+ template< unsigned int RedIndex,
+ unsigned int GreenIndex,
+ unsigned int BlueIndex > struct uInt32Converter<
+ vigra::RGBValue< sal_uInt8,
+ RedIndex,
+ GreenIndex,
+ BlueIndex > >
+ {
+ typedef UInt32FromRgbValue<
+ vigra::RGBValue< sal_uInt8,
+ RedIndex,
+ GreenIndex,
+ BlueIndex > >
+ to;
+ typedef RgbValueFromUInt32<
+ vigra::RGBValue< sal_uInt8,
+ RedIndex,
+ GreenIndex,
+ BlueIndex > >
+ from;
+ };
+}
+
+#endif /* INCLUDED_BASEBMP_INTCONVERSION_HXX */
diff --git a/basebmp/source/makefile.mk b/basebmp/source/makefile.mk
new file mode 100644
index 000000000000..55b27cfa7565
--- /dev/null
+++ b/basebmp/source/makefile.mk
@@ -0,0 +1,76 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..$/
+
+PRJNAME=basebmp
+TARGET=wrapper
+ENABLE_EXCEPTIONS=TRUE
+
+# --- Settings -----------------------------------------------------------
+
+.INCLUDE : settings.mk
+
+
+# TODO(F3) unify BASEBMP_NO_NESTED_TEMPLATE_PARAMETER and
+# VIGRA_WITHOUT_NESTED_TEMPLATES_PARAMS
+#
+# - VIGRA_WITHOUT_NESTED_TEMPLATES_PARAMS avoids template parameters
+# to templates - the template keyword is broken for SunCC
+# - VIGRA_HAS_LONG_LONG enables long long overloads (but appears to not work
+# reliably in some environments, and is thus not enabled)
+# - VIGRA_HAS_LONG_DOUBLE enables long double overloads
+
+.IF "$(OS)"!="WNT"
+CDEFS+= -DVIGRA_HAS_LONG_DOUBLE
+.ENDIF
+
+.IF "$(OS)"=="SOLARIS" && "$(COM)"!="GCC"
+CDEFS+= -DBASEBMP_NO_NESTED_TEMPLATE_PARAMETER -DVIGRA_WITHOUT_NESTED_TEMPLATE_PARAMS
+.ENDIF
+
+# SunStudio 12 (-m64 and -m32 modes): three test cases of the unit tests fail
+# if compiled with default -xalias_level (and optimization level -xO3)
+.IF "$(OS)"=="SOLARIS"
+# For Sun Studio 8 this switch does not work: compilation fails on bitmapdevice.cxx
+.IF "$(CCNUMVER)"!="00050005"
+CDEFS+=-xalias_level=compatible
+.ENDIF
+.ENDIF
+
+# --- Common ----------------------------------------------------------
+
+SLOFILES = \
+ $(SLO)$/bitmapdevice.obj \
+ $(SLO)$/debug.obj \
+ $(SLO)$/polypolygonrenderer.obj
+
+# $(SLO)$/genericintegerimageaccessor.obj \
+
+# ==========================================================================
+
+.INCLUDE : target.mk
diff --git a/basebmp/source/polypolygonrenderer.cxx b/basebmp/source/polypolygonrenderer.cxx
new file mode 100644
index 000000000000..79453402ef4c
--- /dev/null
+++ b/basebmp/source/polypolygonrenderer.cxx
@@ -0,0 +1,127 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "basebmp/polypolygonrenderer.hxx"
+
+#include <algorithm>
+
+
+namespace basebmp
+{
+namespace detail
+{
+ sal_uInt32 setupGlobalEdgeTable( VectorOfVectorOfVertices& rGET,
+ basegfx::B2DPolyPolygon const& rPolyPoly,
+ sal_Int32 nMinY )
+ {
+ sal_Int32 const nNumScanlines( (sal_Int32)rGET.size() );
+
+ // add all polygons to GET
+ for( sal_uInt32 i(0), nCount(rPolyPoly.count());
+ i<nCount;
+ ++i )
+ {
+ // add all vertices to GET
+ const basegfx::B2DPolygon& rPoly( rPolyPoly.getB2DPolygon(i) );
+ for( sal_uInt32 k(0), nVertices(rPoly.count());
+ k<nVertices;
+ ++k )
+ {
+ const basegfx::B2DPoint& rP1( rPoly.getB2DPoint(k) );
+ const basegfx::B2DPoint& rP2( rPoly.getB2DPoint( (k + 1) % nVertices ) );
+
+ const sal_Int32 nVertexYP1( basegfx::fround(rP1.getY()) );
+ const sal_Int32 nVertexYP2( basegfx::fround(rP2.getY()) );
+
+ // insert only vertices which are not strictly
+ // horizontal. Strictly horizontal vertices don't add
+ // any information that is not already present - due
+ // to their adjacent vertices.
+ if(nVertexYP1 != nVertexYP2)
+ {
+ if( nVertexYP2 < nVertexYP1 )
+ {
+ const sal_Int32 nStartScanline(nVertexYP2 - nMinY);
+
+ // edge direction is upwards - add with swapped vertices
+ if( nStartScanline < nNumScanlines )
+ rGET[ nStartScanline ].push_back( Vertex(rP2, rP1, false) );
+ }
+ else
+ {
+ const sal_Int32 nStartScanline(nVertexYP1 - nMinY);
+
+ if( nStartScanline < nNumScanlines )
+ rGET[ nStartScanline ].push_back( Vertex(rP1, rP2, true) );
+ }
+ }
+ }
+ }
+
+ // now sort all scanlines individually, with increasing x
+ // coordinates
+ VectorOfVectorOfVertices::iterator aIter( rGET.begin() );
+ const VectorOfVectorOfVertices::iterator aEnd( rGET.end() );
+ sal_uInt32 nVertexCount(0);
+ RasterConvertVertexComparator aComp;
+ while( aIter != aEnd )
+ {
+ std::sort( aIter->begin(),
+ aIter->end(),
+ aComp );
+ nVertexCount += aIter->size();
+
+ ++aIter;
+ }
+
+ return nVertexCount;
+ }
+
+ void sortAET( VectorOfVertexPtr& rAETSrc,
+ VectorOfVertexPtr& rAETDest )
+ {
+ static RasterConvertVertexComparator aComp;
+
+ rAETDest.clear();
+
+ // prune AET from ended edges
+ VectorOfVertexPtr::iterator iter( rAETSrc.begin() );
+ VectorOfVertexPtr::iterator const end( rAETSrc.end() );
+ while( iter != end )
+ {
+ if( (*iter)->mnYCounter > 0 )
+ rAETDest.push_back( *iter );
+ ++iter;
+ }
+
+ // stable sort is necessary, to avoid segment crossing where
+ // none was intended.
+ std::stable_sort( rAETDest.begin(), rAETDest.end(), aComp );
+ }
+
+} // namespace detail
+} // namespace basebmp
diff --git a/basebmp/test/basictest.cxx b/basebmp/test/basictest.cxx
new file mode 100644
index 000000000000..6f96cf56f492
--- /dev/null
+++ b/basebmp/test/basictest.cxx
@@ -0,0 +1,300 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// autogenerated file with codegen.pl
+
+#include "cppunit/TestAssert.h"
+#include "cppunit/TestFixture.h"
+#include "cppunit/extensions/HelperMacros.h"
+#include "cppunit/plugin/TestPlugIn.h"
+
+#include <basegfx/vector/b2isize.hxx>
+#include <basegfx/point/b2ipoint.hxx>
+
+#include <basebmp/color.hxx>
+#include <basebmp/scanlineformats.hxx>
+#include <basebmp/bitmapdevice.hxx>
+#include <basebmp/debug.hxx>
+#include "tools.hxx"
+
+#include <iostream>
+#include <fstream>
+
+using namespace ::basebmp;
+
+namespace
+{
+/*
+ std::ofstream output("32bpp_test.dump");
+ debugDump( mpDevice32bpp, output );
+*/
+
+class BasicTest : public CppUnit::TestFixture
+{
+public:
+ void colorTest()
+ {
+ Color aTestColor;
+
+ aTestColor = Color(0xDEADBEEF);
+ CPPUNIT_ASSERT_MESSAGE("unary constructor",
+ aTestColor.toInt32() == 0xDEADBEEF );
+
+ aTestColor = Color( 0x10, 0x20, 0xFF );
+ CPPUNIT_ASSERT_MESSAGE("ternary constructor",
+ aTestColor.toInt32() == 0x001020FF );
+
+ aTestColor.setRed( 0x0F );
+ CPPUNIT_ASSERT_MESSAGE("setRed()",
+ aTestColor.toInt32() == 0x00F20FF );
+
+ aTestColor.setGreen( 0x0F );
+ CPPUNIT_ASSERT_MESSAGE("setGreen()",
+ aTestColor.toInt32() == 0x00F0FFF );
+
+ aTestColor.setBlue( 0x10 );
+ CPPUNIT_ASSERT_MESSAGE("setBlue()",
+ aTestColor.toInt32() == 0x00F0F10 );
+
+ aTestColor.setGrey( 0x13 );
+ CPPUNIT_ASSERT_MESSAGE("setGrey()",
+ aTestColor.toInt32() == 0x00131313 );
+
+ aTestColor = Color( 0x10, 0x20, 0xFF );
+ CPPUNIT_ASSERT_MESSAGE("getRed()",
+ aTestColor.getRed() == 0x10 );
+ CPPUNIT_ASSERT_MESSAGE("getGreen()",
+ aTestColor.getGreen() == 0x20 );
+ CPPUNIT_ASSERT_MESSAGE("getBlue()",
+ aTestColor.getBlue() == 0xFF );
+
+ }
+
+ void testConstruction()
+ {
+ const basegfx::B2ISize aSize(101,101);
+ basegfx::B2ISize aSize2(aSize);
+ BitmapDeviceSharedPtr pDevice( createBitmapDevice( aSize,
+ true,
+ Format::ONE_BIT_MSB_PAL ));
+ CPPUNIT_ASSERT_MESSAGE("right size",
+ pDevice->getSize() == aSize2 );
+ CPPUNIT_ASSERT_MESSAGE("Top down format",
+ pDevice->isTopDown() == true );
+ CPPUNIT_ASSERT_MESSAGE("Scanline format",
+ pDevice->getScanlineFormat() == Format::ONE_BIT_MSB_PAL );
+ CPPUNIT_ASSERT_MESSAGE("Scanline len",
+ pDevice->getScanlineStride() == (aSize2.getY() + 7)/8 );
+ CPPUNIT_ASSERT_MESSAGE("Palette existence",
+ pDevice->getPalette() );
+ CPPUNIT_ASSERT_MESSAGE("Palette entry 0 is black",
+ (*pDevice->getPalette())[0] == Color(0) );
+ CPPUNIT_ASSERT_MESSAGE("Palette entry 1 is white",
+ (*pDevice->getPalette())[1] == Color(0xFFFFFFFF) );
+ }
+
+ void testPixelFuncs()
+ {
+ // 1bpp
+ const basegfx::B2ISize aSize(64,64);
+ BitmapDeviceSharedPtr pDevice( createBitmapDevice( aSize,
+ true,
+ Format::ONE_BIT_MSB_PAL ));
+
+ const basegfx::B2IPoint aPt(3,3);
+ const Color aCol(0xFFFFFFFF);
+ pDevice->setPixel( aPt, aCol, DrawMode_PAINT );
+ CPPUNIT_ASSERT_MESSAGE("get/setPixel roundtrip #1",
+ pDevice->getPixel(aPt) == aCol);
+
+ const basegfx::B2IPoint aPt2(0,0);
+ const Color aCol2(0xFFFFFFFF);
+ pDevice->setPixel( aPt2, aCol2, DrawMode_PAINT );
+ CPPUNIT_ASSERT_MESSAGE("get/setPixel roundtrip #2",
+ pDevice->getPixel(aPt2) == aCol2);
+
+ const basegfx::B2IPoint aPt3(aSize.getX()-1,aSize.getY()-1);
+ const Color aCol3(0x00000000);
+ pDevice->setPixel( aPt3, aCol3, DrawMode_PAINT );
+ CPPUNIT_ASSERT_MESSAGE("get/setPixel roundtrip #3",
+ pDevice->getPixel(aPt3) == aCol3);
+
+ pDevice->setPixel( aPt3, aCol2, DrawMode_PAINT );
+ CPPUNIT_ASSERT_MESSAGE("get/setPixel roundtrip #3.5",
+ pDevice->getPixel(aPt3) == aCol2);
+
+ const basegfx::B2IPoint aPt4(-100000,-100000);
+ pDevice->setPixel( aPt4, aCol3, DrawMode_PAINT );
+ const basegfx::B2IPoint aPt5(100000,100000);
+ pDevice->setPixel( aPt5, aCol3, DrawMode_PAINT );
+
+ sal_Int32 nPixel(countPixel(pDevice, aCol2));
+ const basegfx::B2IPoint aPt6(aSize.getX(),aSize.getY());
+ pDevice->setPixel( aPt6, aCol2, DrawMode_PAINT );
+ CPPUNIT_ASSERT_MESSAGE("setPixel clipping",
+ countPixel(pDevice, aCol2) == nPixel);
+
+ CPPUNIT_ASSERT_MESSAGE("raw pixel value #1",
+ pDevice->getBuffer()[0] == 0x80);
+
+ // 1bit LSB
+ {
+ pDevice = createBitmapDevice( aSize,
+ true,
+ Format::ONE_BIT_LSB_PAL );
+
+ pDevice->setPixel( aPt2, aCol, DrawMode_PAINT );
+ CPPUNIT_ASSERT_MESSAGE("get/setPixel roundtrip #4",
+ pDevice->getPixel(aPt2) == aCol);
+
+ const basegfx::B2IPoint aPt222(1,1);
+ pDevice->setPixel( aPt222, aCol, DrawMode_PAINT );
+ CPPUNIT_ASSERT_MESSAGE("get/setPixel roundtrip #5",
+ pDevice->getPixel(aPt222) == aCol);
+
+ pDevice->setPixel( aPt3, aCol, DrawMode_PAINT );
+ CPPUNIT_ASSERT_MESSAGE("get/setPixel roundtrip #6",
+ pDevice->getPixel(aPt3) == aCol);
+
+ CPPUNIT_ASSERT_MESSAGE("raw pixel value #2",
+ pDevice->getBuffer()[0] == 0x01);
+ CPPUNIT_ASSERT_MESSAGE("raw pixel value #3",
+ pDevice->getBuffer()[8] == 0x02);
+ }
+
+ // 8bit alpha
+ {
+ pDevice = createBitmapDevice( aSize,
+ true,
+ Format::EIGHT_BIT_GREY );
+
+ const Color aCol4(0x010101);
+ pDevice->setPixel( aPt, aCol4, DrawMode_PAINT );
+ CPPUNIT_ASSERT_MESSAGE("get/setPixel roundtrip #4",
+ pDevice->getPixel(aPt) == aCol4);
+
+ const Color aCol5(0x0F0F0F);
+ pDevice->setPixel( aPt2, aCol5, DrawMode_PAINT );
+ CPPUNIT_ASSERT_MESSAGE("get/setPixel roundtrip #5",
+ pDevice->getPixel(aPt2) == aCol5);
+
+ const Color aCol6(0xFFFFFF);
+ pDevice->setPixel( aPt3, aCol6, DrawMode_PAINT );
+ CPPUNIT_ASSERT_MESSAGE("get/setPixel roundtrip #6",
+ pDevice->getPixel(aPt3) == aCol6);
+ }
+
+ // 16bpp
+ {
+ pDevice = createBitmapDevice( aSize,
+ true,
+ Format::SIXTEEN_BIT_LSB_TC_MASK );
+ const Color aCol7(0);
+ pDevice->clear( aCol7 );
+
+ const Color aCol4(0x00101010);
+ pDevice->setPixel( aPt, aCol4, DrawMode_PAINT );
+ CPPUNIT_ASSERT_MESSAGE("get/setPixel roundtrip #7",
+ pDevice->getPixel(aPt) == aCol4);
+
+ const Color aCol5(0x00F0F0F0);
+ pDevice->setPixel( aPt2, aCol5, DrawMode_PAINT );
+ CPPUNIT_ASSERT_MESSAGE("get/setPixel roundtrip #8",
+ pDevice->getPixel(aPt2) != aCol7);
+
+ const Color aCol6(0x00FFFFFF);
+ pDevice->setPixel( aPt3, aCol6, DrawMode_PAINT );
+ CPPUNIT_ASSERT_MESSAGE("get/setPixel roundtrip #9",
+ pDevice->getPixel(aPt3) == aCol6);
+ }
+
+ // 24bpp
+ {
+ pDevice = createBitmapDevice( aSize,
+ true,
+ Format::TWENTYFOUR_BIT_TC_MASK );
+
+ const Color aCol4(0x01010101);
+ pDevice->setPixel( aPt, aCol4, DrawMode_PAINT );
+ CPPUNIT_ASSERT_MESSAGE("get/setPixel roundtrip #10",
+ pDevice->getPixel(aPt) == aCol4);
+
+ const Color aCol5(0x0F3F2F1F);
+ pDevice->setPixel( aPt2, aCol5, DrawMode_PAINT );
+ CPPUNIT_ASSERT_MESSAGE("get/setPixel roundtrip #11",
+ pDevice->getPixel(aPt2) == aCol5);
+
+ const Color aCol6(0xFFFFFFFF);
+ pDevice->setPixel( aPt3, aCol6, DrawMode_PAINT );
+ CPPUNIT_ASSERT_MESSAGE("get/setPixel roundtrip #12",
+ pDevice->getPixel(aPt3) == aCol6);
+
+ CPPUNIT_ASSERT_MESSAGE("raw pixel value #4",
+ pDevice->getBuffer()[2] == 0x3F
+ && pDevice->getBuffer()[1] == 0x2F
+ && pDevice->getBuffer()[0] == 0x1F);
+ }
+
+ // 32bpp
+ {
+ pDevice = createBitmapDevice( aSize,
+ true,
+ Format::THIRTYTWO_BIT_TC_MASK );
+
+ const Color aCol4(0x01010101);
+ pDevice->setPixel( aPt, aCol4, DrawMode_PAINT );
+ CPPUNIT_ASSERT_MESSAGE("get/setPixel roundtrip #13",
+ pDevice->getPixel(aPt) == aCol4);
+
+ const Color aCol5(0x0F0F0F0F);
+ pDevice->setPixel( aPt2, aCol5, DrawMode_PAINT );
+ CPPUNIT_ASSERT_MESSAGE("get/setPixel roundtrip #14",
+ pDevice->getPixel(aPt2) == aCol5);
+
+ const Color aCol6(0xFFFFFFFF);
+ pDevice->setPixel( aPt3, aCol6, DrawMode_PAINT );
+ CPPUNIT_ASSERT_MESSAGE("get/setPixel roundtrip #15",
+ pDevice->getPixel(aPt3) == aCol6);
+ }
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(BasicTest);
+ CPPUNIT_TEST(colorTest);
+ CPPUNIT_TEST(testConstruction);
+ CPPUNIT_TEST(testPixelFuncs);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+// -----------------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION(BasicTest);
+}
+
+CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/basebmp/test/bmpdemo.cxx b/basebmp/test/bmpdemo.cxx
new file mode 100644
index 000000000000..99aa1bac2c5c
--- /dev/null
+++ b/basebmp/test/bmpdemo.cxx
@@ -0,0 +1,1256 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _USE_MATH_DEFINES
+#define _USE_MATH_DEFINES // needed by Visual C++ for math constants
+#endif
+#include <math.h>
+
+#include <comphelper/processfactory.hxx>
+#include <comphelper/regpathhelper.hxx>
+#include <cppuhelper/servicefactory.hxx>
+#include <cppuhelper/bootstrap.hxx>
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+#include <com/sun/star/lang/XInitialization.hpp>
+#include <com/sun/star/registry/XSimpleRegistry.hpp>
+
+#include <ucbhelper/contentbroker.hxx>
+#include <ucbhelper/configurationkeys.hxx>
+
+#include <vcl/window.hxx>
+#include <vcl/svapp.hxx>
+#include <vcl/msgbox.hxx>
+#include <vcl/unowrap.hxx>
+#include <vcl/bitmap.hxx>
+#include <vcl/bmpacc.hxx>
+
+#include <basegfx/polygon/b2dlinegeometry.hxx>
+#include <basegfx/polygon/b2dpolypolygon.hxx>
+#include <basegfx/polygon/b2dpolypolygontools.hxx>
+#include <basegfx/polygon/b2dpolypolygonrasterconverter.hxx>
+#include <basegfx/polygon/b2dpolygontools.hxx>
+#include <basegfx/polygon/b2dpolygon.hxx>
+#include <basegfx/numeric/ftools.hxx>
+#include <basegfx/range/b2irange.hxx>
+#include <basegfx/vector/b2isize.hxx>
+#include <basegfx/point/b2ipoint.hxx>
+
+#include <basebmp/color.hxx>
+#include <basebmp/scanlineformats.hxx>
+#include <basebmp/bitmapdevice.hxx>
+#include <basebmp/debug.hxx>
+
+#include <rtl/bootstrap.hxx>
+
+#include <vigra/metaprogramming.hxx>
+#include <vigra/static_assert.hxx>
+#include <vigra/basicimageview.hxx>
+
+#include <boost/static_assert.hpp>
+#include <algorithm>
+#include <iostream>
+#include <fstream>
+
+using namespace ::com::sun::star;
+
+
+namespace
+{
+
+/// template meta function: add const qualifier, if given 2nd type has it
+template<typename A, typename B> struct clone_const
+{
+ typedef B type;
+};
+template<typename A, typename B> struct clone_const<const A,B>
+{
+ typedef const B type;
+};
+
+template< class DestIterator, class DestAccessor > class Renderer :
+ public basegfx::B2DPolyPolygonRasterConverter
+{
+private:
+ typename DestIterator::value_type fillColor_;
+ typename DestIterator::value_type clearColor_;
+ DestIterator begin_;
+ DestAccessor accessor_;
+
+public:
+ Renderer(const basegfx::B2DPolyPolygon& rPolyPolyRaster,
+ typename DestIterator::value_type fillColor,
+ typename DestIterator::value_type clearColor,
+ DestIterator begin,
+ DestIterator end,
+ DestAccessor accessor ) :
+ B2DPolyPolygonRasterConverter(rPolyPolyRaster,
+ basegfx::B2DRange(0,0,
+ end.x - end.x,
+ begin.y - begin.y )),
+ fillColor_( fillColor ),
+ clearColor_( clearColor ),
+ begin_( begin ),
+ accessor_( accessor )
+ {
+ }
+
+ virtual void span(const double& rfXLeft,
+ const double& rfXRight,
+ sal_Int32 nY,
+ bool bOn )
+ {
+ DestIterator currIter( begin_ + vigra::Diff2D(0,nY) );
+ typename DestIterator::row_iterator rowIter( currIter.rowIterator() +
+ basegfx::fround(rfXLeft) );
+ typename DestIterator::row_iterator rowEnd( currIter.rowIterator() +
+ basegfx::fround(rfXRight) );
+ if( bOn )
+ while( rowIter != rowEnd )
+ {
+ accessor_.set(fillColor_, rowIter);
+ ++rowIter;
+ }
+ else
+ while( rowIter != rowEnd )
+ {
+ accessor_.set(accessor_(rowIter)*clearColor_, rowIter);
+ ++rowIter;
+ }
+ }
+};
+
+template< class DestIterator, class DestAccessor >
+ std::auto_ptr< Renderer< DestIterator, DestAccessor > > makeRenderer(
+ const basegfx::B2DPolyPolygon& rPolyPolyRaster,
+ typename DestIterator::value_type fillColor,
+ typename DestIterator::value_type clearColor,
+ vigra::triple<DestIterator, DestIterator, DestAccessor> dest )
+{
+ return std::auto_ptr< Renderer< DestIterator, DestAccessor > >(
+ new Renderer< DestIterator, DestAccessor >(rPolyPolyRaster,
+ fillColor,
+ clearColor,
+ dest.first,
+ dest.second,
+ dest.third));
+}
+
+
+// changed semantics re. DirectionSelector<StridedArrayTag>: stride
+// now counts in <em>raw</em> bytes!
+template< typename T > class StridedArrayIterator
+{
+public:
+ typedef typename clone_const<T, unsigned char>::type internal_type;
+
+ StridedArrayIterator(int stride, T* ptr = 0) :
+ stride_(stride),
+ current_(reinterpret_cast<internal_type*>(ptr))
+ {}
+
+ /// Copy from other StridedArrayIterator, plus given offset
+ StridedArrayIterator( StridedArrayIterator const& rSrc,
+ int offset ) :
+ stride_(rSrc.stride_),
+ current_(reinterpret_cast<internal_type*>(
+ reinterpret_cast<T*>(rSrc.current_)+offset))
+ {}
+
+ void operator++() {current_ += stride_; }
+ void operator++(int) {current_ += stride_; }
+ void operator--() {current_ -= stride_; }
+ void operator--(int) {current_ -= stride_; }
+ void operator+=(int dy) {current_ += dy*stride_; }
+ void operator-=(int dy) {current_ -= dy*stride_; }
+
+ bool operator==(StridedArrayIterator const & rhs) const
+ { return (current_ == rhs.current_); }
+
+ bool operator!=(StridedArrayIterator const & rhs) const
+ { return (current_ != rhs.current_); }
+
+ bool operator<(StridedArrayIterator const & rhs) const
+ { return (current_ < rhs.current_); }
+
+ bool operator<=(StridedArrayIterator const & rhs) const
+ { return (current_ <= rhs.current_); }
+
+ bool operator>(StridedArrayIterator const & rhs) const
+ { return (current_ > rhs.current_); }
+
+ bool operator>=(StridedArrayIterator const & rhs) const
+ { return (current_ >= rhs.current_); }
+
+ int operator-(StridedArrayIterator const & rhs) const
+ { return (current_ - rhs.current_) / stride_; }
+
+ T* operator()() const
+ { return reinterpret_cast<T*>(current_); }
+
+ T* operator()(int d) const
+ { return reinterpret_cast<T*>(current_ + d*stride_); }
+
+ int stride_;
+ internal_type* current_;
+};
+
+/// template meta function: remove const qualifier from plain type
+template <typename T> struct remove_const
+{
+ typedef T type;
+};
+template <typename T> struct remove_const<const T>
+{
+ typedef T type;
+};
+
+/// returns true, if given number is strictly less than 0
+template< typename T > inline bool is_negative( T x )
+{
+ return x < 0;
+}
+
+/// Overload for ints (branch-free)
+inline bool is_negative( int x )
+{
+ // force logic shift (result for signed shift right is undefined)
+ return static_cast<unsigned int>(x) >> (sizeof(int)*8-1);
+}
+
+/// Get bitmask for data at given intra-word position, for given bit depth
+template< typename data_type, int bits_per_pixel, bool MsbFirst, typename difference_type > inline data_type get_mask( difference_type d )
+{
+ BOOST_STATIC_ASSERT(bits_per_pixel > 0);
+ BOOST_STATIC_ASSERT(sizeof(data_type)*8 % bits_per_pixel == 0);
+ BOOST_STATIC_ASSERT(sizeof(data_type)*8 / bits_per_pixel > 1);
+ BOOST_STATIC_ASSERT(vigra::TypeTraits<data_type>::isPOD::asBool);
+
+ const unsigned int nIntraWordPositions( sizeof(data_type)*8 / bits_per_pixel );
+
+ // create bits_per_pixel 1s shift to intra-word position
+ return ((~(~0 << bits_per_pixel)) << bits_per_pixel*(MsbFirst ?
+ (nIntraWordPositions-1 - (d % nIntraWordPositions)) :
+ (d % nIntraWordPositions)));
+}
+
+template< int num_intraword_positions, int bits_per_pixel, bool MsbFirst, typename difference_type > inline difference_type get_shift( difference_type remainder )
+{
+ return bits_per_pixel*(MsbFirst ?
+ (num_intraword_positions - 1 - remainder) :
+ remainder);
+}
+
+template< typename Datatype,
+ typename Valuetype,
+ int bits_per_pixel,
+ bool MsbFirst > class PackedPixelColumnIterator
+{
+public:
+ // no reference, no index_reference type here
+ typedef Datatype data_type;
+ typedef Valuetype value_type;
+ typedef int difference_type;
+ typedef image_traverser_tag iterator_category;
+
+ typedef typename remove_const<data_type>::type mask_type;
+ typedef data_type* pointer;
+ typedef StridedArrayIterator< data_type > MoveY;
+
+ enum {
+ /** The number of pixel within a single data_type value
+ */
+ num_intraword_positions=sizeof(data_type)*8/bits_per_pixel,
+ /** Bit mask for one pixel (least significant bits)
+ */
+ bit_mask=~(~0 << bits_per_pixel)
+ };
+
+private:
+ MoveY y;
+ mask_type mask_;
+ difference_type shift_;
+
+ void inc()
+ {
+ ++y;
+ }
+
+ void dec()
+ {
+ --y;
+ }
+
+ bool equal( PackedPixelColumnIterator const & rhs ) const
+ {
+ return rhs.y == y;
+ }
+
+ bool less( PackedPixelColumnIterator const & rhs ) const
+ {
+ return y < rhs.y;
+ }
+
+public:
+ PackedPixelColumnIterator() :
+ y(0),
+ mask_( get_mask<data_type, bits_per_pixel, MsbFirst, difference_type>(0) ),
+ shift_( get_shift<num_intraword_positions, bits_per_pixel, MsbFirst, difference_type>(0) )
+ {}
+
+ PackedPixelColumnIterator( const MoveY& base, difference_type remainder ) :
+ y(base),
+ mask_( get_mask<data_type, bits_per_pixel, MsbFirst>(remainder) ),
+ shift_( get_shift<num_intraword_positions, bits_per_pixel, MsbFirst>(remainder) )
+ {}
+
+ PackedPixelColumnIterator& operator+=( difference_type d )
+ {
+ y += d;
+ return *this;
+ }
+
+ PackedPixelColumnIterator& operator-=( difference_type d )
+ {
+ y -= d;
+ return *this;
+ }
+
+ PackedPixelColumnIterator operator+( difference_type d )
+ {
+ PackedPixelColumnIterator res(*this);
+ res += d;
+ return res;
+ }
+
+ PackedPixelColumnIterator operator-( difference_type d )
+ {
+ PackedPixelColumnIterator res(*this);
+ res -= d;
+ return res;
+ }
+
+ PackedPixelColumnIterator& operator++()
+ {
+ inc();
+ return *this;
+ }
+
+ PackedPixelColumnIterator& operator--()
+ {
+ dec();
+ return *this;
+ }
+
+ PackedPixelColumnIterator operator++(int)
+ {
+ PackedPixelColumnIterator res(*this);
+ res.inc();
+ return res;
+ }
+
+ PackedPixelColumnIterator operator--(int)
+ {
+ PackedPixelColumnIterator res(*this);
+ res.dec();
+ return res;
+ }
+
+ bool operator==(PackedPixelColumnIterator const & rhs) const
+ {
+ return equal( rhs );
+ }
+
+ bool operator!=(PackedPixelColumnIterator const & rhs) const
+ {
+ return !equal( rhs );
+ }
+
+ bool operator<(PackedPixelColumnIterator const & rhs) const
+ {
+ return less(rhs);
+ }
+
+ bool operator<=(PackedPixelColumnIterator const & rhs) const
+ {
+ return !less(rhs);
+ }
+
+ bool operator>(PackedPixelColumnIterator const & rhs) const
+ {
+ return rhs.less(*this);
+ }
+
+ bool operator>=(PackedPixelColumnIterator const & rhs) const
+ {
+ return !rhs.less(*this);
+ }
+
+ difference_type operator-(PackedPixelColumnIterator const & rhs) const
+ {
+ return y - rhs.y;
+ }
+
+ value_type get() const
+ {
+ // TODO(Q3): use traits to get unsigned type for data_type (if
+ // not already)
+ return static_cast<unsigned int>(*y() & mask_) >> shift_;
+ }
+
+ value_type get(difference_type d) const
+ {
+ // TODO(Q3): use traits to get unsigned type for data_type (if
+ // not already)
+ return static_cast<unsigned int>(*y(d) & mask_) >> shift_;
+ }
+
+ void set( value_type v ) const
+ {
+ const value_type pixel_value( (v << shift_) & mask_ );
+ *y() = (*y() & ~mask_) | pixel_value;
+ }
+
+ void set( value_type v, difference_type d ) const
+ {
+ const value_type pixel_value( (v << shift_) & mask_ );
+ *y(d) = (*y(d) & ~mask_) | pixel_value;
+ }
+};
+
+template< typename Datatype,
+ typename Valuetype,
+ int bits_per_pixel,
+ bool MsbFirst > class PackedPixelRowIterator
+{
+public:
+ // no reference, no index_reference type here
+ typedef Datatype data_type;
+ typedef Valuetype value_type;
+ typedef int difference_type;
+ typedef image_traverser_tag iterator_category;
+
+ typedef typename remove_const<data_type>::type mask_type;
+ typedef data_type* pointer;
+
+ enum {
+ /** The number of pixel within a single data_type value
+ */
+ num_intraword_positions=sizeof(data_type)*8/bits_per_pixel,
+ /** Bit mask for one pixel (least significant bits)
+ */
+ bit_mask=~(~0 << bits_per_pixel)
+ };
+
+private:
+ pointer data_;
+ mask_type mask_;
+ difference_type remainder_;
+
+ void update_mask()
+ {
+ mask_ = get_mask<data_type, bits_per_pixel, MsbFirst>(remainder_);
+ }
+
+ void inc()
+ {
+ const difference_type newValue( remainder_ + 1 );
+ const difference_type data_offset( newValue / num_intraword_positions );
+
+ data_ += data_offset;
+ remainder_ = newValue % num_intraword_positions;
+
+ const mask_type shifted_mask(
+ MsbFirst ?
+ // TODO(Q3): use traits to get unsigned type for data_type
+ // (if not already)
+ static_cast<unsigned int>(mask_) >> bits_per_pixel :
+ mask_ << bits_per_pixel );
+
+ // data_offset is 0 for shifted mask, and 1 for wrapped-around mask
+ mask_ = (1-data_offset)*shifted_mask + data_offset*(MsbFirst ?
+ bit_mask << bits_per_pixel*(num_intraword_positions-1) :
+ bit_mask);
+ }
+
+ void dec()
+ {
+ const difference_type newValue( remainder_ - 1 );
+ const bool isNegative( is_negative(newValue) );
+ const difference_type newRemainder( newValue % num_intraword_positions );
+
+ // calc data_ += newValue / num_intraword_positions;
+ // remainder_ = newRemainder;
+ // for newValue >= 0, and
+ // data_ += newValue / num_intraword_positions - 1;
+ // remainder_ = num_intraword_positions - newRemainder;
+ // (to force remainder_ to be positive).
+ // This is branch-free, if is_negative() is branch-free
+ const difference_type data_offset( newValue / num_intraword_positions - isNegative );
+ data_ += data_offset;
+ remainder_ = newRemainder + isNegative*num_intraword_positions;
+
+ const mask_type shifted_mask(
+ MsbFirst ?
+ mask_ << bits_per_pixel :
+ // TODO(Q3): use traits to get unsigned type for data_type
+ // (if not already)
+ static_cast<unsigned int>(mask_) >> bits_per_pixel );
+
+ // data_offset is 0 for shifted mask, and 1 for wrapped-around mask
+ mask_ = (1-data_offset)*shifted_mask + data_offset*(MsbFirst ?
+ bit_mask :
+ bit_mask << bits_per_pixel*(num_intraword_positions-1));
+ }
+
+ bool equal( PackedPixelRowIterator const & rhs ) const
+ {
+ return rhs.data_ == data_ && rhs.remainder_ == remainder_;
+ }
+
+ bool less( PackedPixelRowIterator const & rhs ) const
+ {
+ return data_ == rhs.data_ ?
+ (remainder_ < rhs.remainder_) :
+ (data_ < rhs.data_);
+ }
+
+public:
+ PackedPixelRowIterator() :
+ data_(0),
+ mask_( get_mask<data_type, bits_per_pixel, MsbFirst, difference_type>(0) ),
+ remainder_(0)
+ {}
+
+ explicit PackedPixelRowIterator( pointer base ) :
+ data_(base),
+ mask_( get_mask<data_type, bits_per_pixel, MsbFirst, difference_type>(0) ),
+ remainder_(0)
+ {}
+
+ PackedPixelRowIterator& operator+=( difference_type d )
+ {
+ const difference_type newValue( remainder_ + d );
+
+ data_ += newValue / num_intraword_positions;
+ remainder_ = newValue % num_intraword_positions;
+ update_mask();
+
+ return *this;
+ }
+
+ PackedPixelRowIterator& operator-=( difference_type d )
+ {
+ const difference_type newValue( remainder_ - d );
+ const bool isNegative( is_negative(newValue) );
+ const difference_type newRemainder( newValue % num_intraword_positions );
+
+ // calc data_ += newValue / num_intraword_positions;
+ // remainder_ = newRemainder;
+ // for newValue >= 0, and
+ // data_ += newValue / num_intraword_positions - 1;
+ // remainder_ = num_intraword_positions - newRemainder;
+ // (to force remainder_ to be positive).
+ // This is branch-free, if is_negative() is branch-free
+ data_ += newValue / num_intraword_positions - isNegative;
+ remainder_ = newRemainder + isNegative*(num_intraword_positions - 2*newRemainder);
+ update_mask();
+
+ return *this;
+ }
+
+ PackedPixelRowIterator operator+( difference_type d )
+ {
+ PackedPixelRowIterator res(*this);
+ res += d;
+ return res;
+ }
+
+ PackedPixelRowIterator operator-( difference_type d )
+ {
+ PackedPixelRowIterator res(*this);
+ res -= d;
+ return res;
+ }
+
+ PackedPixelRowIterator& operator++()
+ {
+ inc();
+ return *this;
+ }
+
+ PackedPixelRowIterator& operator--()
+ {
+ dec();
+ return *this;
+ }
+
+ PackedPixelRowIterator operator++(int)
+ {
+ PackedPixelRowIterator res(*this);
+ res.inc();
+ return res;
+ }
+
+ PackedPixelRowIterator operator--(int)
+ {
+ PackedPixelRowIterator res(*this);
+ res.dec();
+ return res;
+ }
+
+ bool operator==(PackedPixelRowIterator const & rhs) const
+ {
+ return equal( rhs );
+ }
+
+ bool operator!=(PackedPixelRowIterator const & rhs) const
+ {
+ return !equal( rhs );
+ }
+
+ bool operator<(PackedPixelRowIterator const & rhs) const
+ {
+ return less(rhs);
+ }
+
+ bool operator<=(PackedPixelRowIterator const & rhs) const
+ {
+ return !less(rhs);
+ }
+
+ bool operator>(PackedPixelRowIterator const & rhs) const
+ {
+ return rhs.less(*this);
+ }
+
+ bool operator>=(PackedPixelRowIterator const & rhs) const
+ {
+ return !rhs.less(*this);
+ }
+
+ difference_type operator-(PackedPixelRowIterator const & rhs) const
+ {
+ return (data_ - rhs.data_)*num_intraword_positions + (remainder_ - rhs.remainder_);
+ }
+
+ value_type get() const
+ {
+ // TODO(Q3): use traits to get unsigned type for data_type (if
+ // not already)
+ return static_cast<unsigned int>(*data_ & mask_) >>
+ get_shift<num_intraword_positions, bits_per_pixel, MsbFirst>(remainder_);
+ }
+
+ value_type get(difference_type d) const
+ {
+ PackedPixelRowIterator tmp(*this);
+ tmp += d;
+ return tmp.get();
+ }
+
+ void set( value_type v ) const
+ {
+ const value_type pixel_value(
+ (v <<
+ get_shift<num_intraword_positions, bits_per_pixel, MsbFirst>(remainder_))
+ & mask_ );
+ *data_ = (*data_ & ~mask_) | pixel_value;
+ }
+
+ void set( value_type v, difference_type d ) const
+ {
+ PackedPixelRowIterator tmp(*this);
+ tmp += d;
+ tmp.set(v);
+ }
+};
+
+template< typename Datatype,
+ typename Valuetype,
+ int bits_per_pixel,
+ bool MsbFirst > class PackedPixelIterator
+{
+public:
+ // no reference, no index_reference type here
+ typedef Datatype data_type;
+ typedef Valuetype value_type;
+ typedef vigra::Diff2D difference_type;
+ typedef image_traverser_tag iterator_category;
+ typedef PackedPixelRowIterator<data_type,
+ value_type,
+ bits_per_pixel,
+ MsbFirst> row_iterator;
+ typedef PackedPixelColumnIterator<data_type,
+ value_type,
+ bits_per_pixel,
+ MsbFirst> column_iterator;
+
+ typedef data_type* pointer;
+ typedef int MoveX;
+ typedef StridedArrayIterator< data_type > MoveY;
+
+ enum {
+ /** The number of pixel within a single data_type value
+ */
+ num_intraword_positions=sizeof(data_type)*8/bits_per_pixel,
+ /** Bit mask for one pixel (least significant bits)
+ */
+ bit_mask=~(~0 << bits_per_pixel)
+ };
+
+ // TODO(F2): direction of iteration (ImageIterator can be made to
+ // run backwards)
+
+private:
+ pointer current() const
+ {
+ return y() + (x / num_intraword_positions);
+ }
+
+ pointer current(int dx, int dy) const
+ {
+ return y(dy) + ((x+dx)/num_intraword_positions);
+ }
+
+ bool equal(PackedPixelIterator const & rhs) const
+ {
+ return (x == rhs.x) && (y == rhs.y);
+ }
+
+public:
+ PackedPixelIterator() :
+ x(0),
+ y(0)
+ {}
+
+ PackedPixelIterator(pointer base, int ystride) :
+ x(0),
+ y(ystride,base)
+ {}
+
+ bool operator==(PackedPixelIterator const & rhs) const
+ {
+ return equal(rhs);
+ }
+
+ bool operator!=(PackedPixelIterator const & rhs) const
+ {
+ return !equal(rhs);
+ }
+
+ difference_type operator-(PackedPixelIterator const & rhs) const
+ {
+ return difference_type(x - rhs.x, y - rhs.y);
+ }
+
+ MoveX x;
+ MoveY y;
+
+ PackedPixelIterator & operator+=(difference_type const & s)
+ {
+ x += s.x;
+ y += s.y;
+ return *this;
+ }
+
+ PackedPixelIterator & operator-=(difference_type const & s)
+ {
+ x -= s.x;
+ y -= s.y;
+ return *this;
+ }
+
+ PackedPixelIterator operator+(difference_type const & s) const
+ {
+ PackedPixelIterator ret(*this);
+ ret += s;
+ return ret;
+ }
+
+ PackedPixelIterator operator-(difference_type const & s) const
+ {
+ PackedPixelIterator ret(*this);
+ ret -= s;
+ return ret;
+ }
+
+ row_iterator rowIterator() const
+ {
+ return row_iterator(current());
+ }
+
+ column_iterator columnIterator() const
+ {
+ return column_iterator(MoveY(y,
+ x / num_intraword_positions),
+ x % num_intraword_positions);
+ }
+
+ value_type get() const
+ {
+ const int remainder( x() % num_intraword_positions );
+
+ // TODO(Q3): use traits to get unsigned type for data_type (if
+ // not already)
+ return (static_cast<unsigned int>(*current() &
+ get_mask<data_type, bits_per_pixel, MsbFirst>(remainder))
+ >> (MsbFirst ?
+ (num_intraword_positions - remainder) :
+ remainder));
+ }
+
+ value_type get(difference_type const & d) const
+ {
+ const int remainder( x(d.x) % num_intraword_positions );
+
+ // TODO(Q3): use traits to get unsigned type for data_type (if
+ // not already)
+ return (static_cast<unsigned int>(*current(d.x,d.y) &
+ get_mask<data_type, bits_per_pixel, MsbFirst>(remainder))
+ >> get_shift<num_intraword_positions, bits_per_pixel, MsbFirst>(remainder));
+ }
+
+ void set( value_type v ) const
+ {
+ const int remainder( x() % num_intraword_positions );
+ const int mask( get_mask<data_type, bits_per_pixel, MsbFirst>(remainder) );
+ const value_type pixel_value(
+ (v <<
+ get_shift<num_intraword_positions, bits_per_pixel, MsbFirst>(remainder))
+ & mask );
+ pointer p = current();
+ *p = (*p & ~mask) | pixel_value;
+ }
+
+ void set( value_type v, difference_type const & d ) const
+ {
+ const int remainder( x(d.x) % num_intraword_positions );
+ const int mask( get_mask<data_type, bits_per_pixel, MsbFirst>(remainder) );
+ const value_type pixel_value(
+ (v <<
+ get_shift<num_intraword_positions, bits_per_pixel, MsbFirst>(remainder))
+ & mask );
+ pointer p = current(d.x,d.y);
+ *p = (*p & ~mask) | pixel_value;
+ }
+};
+
+
+/** Access (possibly packed-pixel) data via palette indirection
+ */
+template< typename Valuetype, typename Datatype > class PaletteImageAccessor
+{
+ public:
+ typedef Valuetype value_type;
+ typedef Datatype data_type;
+ typedef typename remove_const<data_type>::type count_type;
+
+
+private:
+ const BitmapColor* palette;
+ count_type num_entries;
+
+ double norm( BitmapColor const& rLHS,
+ BitmapColor const& rRHS ) const
+ {
+ // convert RGBValue's linear space to a normed linear space
+ return sqrt(
+ vigra::sq(rLHS.GetRed()-rRHS.GetRed()) +
+ vigra::sq(rLHS.GetGreen()-rRHS.GetGreen()) +
+ vigra::sq(rLHS.GetBlue()-rRHS.GetBlue()) );
+ }
+
+ data_type find_best_match(value_type const& v) const
+ {
+ // TODO(F3): not generic!!!
+ const BitmapColor aTmpCol(v.red(),
+ v.green(),
+ v.blue());
+
+ // TODO(P3): use table-based/octree approach here!
+ const BitmapColor* best_entry;
+ const BitmapColor* palette_end( palette+num_entries );
+ if( (best_entry=std::find( palette, palette_end, aTmpCol)) != palette_end )
+ return best_entry-palette;
+
+ // TODO(F3): HACK. Need palette traits, and an error function
+ // here. We blatantly assume value_type is a normed linear
+ // space.
+ const BitmapColor* curr_entry( palette );
+ best_entry = curr_entry;
+ while( curr_entry != palette_end )
+ {
+ if( norm(*curr_entry,*best_entry) > norm(*curr_entry,aTmpCol) )
+ best_entry = curr_entry;
+
+ ++curr_entry;
+ }
+
+ return best_entry-palette;
+ }
+
+ value_type toCol( BitmapColor const& rCol ) const
+ {
+ return value_type(rCol.GetRed(),rCol.GetGreen(),rCol.GetBlue());
+ }
+
+public:
+ PaletteImageAccessor() :
+ palette(0),
+ num_entries(0)
+ {}
+
+ PaletteImageAccessor( const BitmapColor* pPalette,
+ data_type entries ) :
+ palette(pPalette),
+ num_entries(entries)
+ {}
+
+ template< class Iterator >
+ value_type operator()(Iterator const& i) const { return toCol(palette[i.get()]); }
+ value_type operator()(data_type const* i) const { return toCol(palette[*i]); }
+
+ template< class Iterator, class Difference >
+ value_type operator()(Iterator const& i, Difference const& diff) const
+ {
+ return toCol(palette[i.get(diff)]);
+ }
+
+ template< typename V, class Iterator >
+ void set(V const& value, Iterator const& i) const
+ {
+ i.set(
+ find_best_match(
+ vigra::detail::RequiresExplicitCast<value_type>::cast(value) ));
+ }
+
+ template< typename V, class Iterator, class Difference >
+ void set(V const& value, Iterator const& i, Difference const& diff) const
+ {
+ i.set(
+ find_best_match(
+ vigra::detail::RequiresExplicitCast<value_type>::cast(value)),
+ diff );
+ }
+};
+
+}
+
+
+class TestApp : public Application
+{
+public:
+ virtual void Main();
+ virtual USHORT Exception( USHORT nError );
+};
+
+class TestWindow : public Dialog
+{
+ public:
+ TestWindow() : Dialog( (Window *) NULL )
+ {
+ SetText( rtl::OUString::createFromAscii( "VIGRA test" ) );
+ SetSizePixel( Size( 1024, 1024 ) );
+ EnablePaint( true );
+ Show();
+ }
+ virtual ~TestWindow() {}
+ virtual void MouseButtonUp( const MouseEvent& /*rMEvt*/ )
+ {
+ //TODO: do something cool
+ EndDialog();
+ }
+ virtual void Paint( const Rectangle& rRect );
+};
+
+
+static basegfx::B2IPoint project( const basegfx::B2IPoint& rPoint )
+{
+ const double angle_x = M_PI / 6.0;
+ const double angle_z = M_PI / 6.0;
+
+ // transform planar coordinates to 3d
+ double x = rPoint.getX();
+ double y = rPoint.getY();
+ //double z = 0;
+
+ // rotate around X axis
+ double x1 = x;
+ double y1 = y * cos( angle_x );
+ double z1 = y * sin( angle_x );
+
+ // rotate around Z axis
+ double x2 = x1 * cos( angle_z ) + y1 * sin( angle_z );
+ //double y2 = y1 * cos( angle_z ) - x1 * sin( angle_z );
+ double z2 = z1;
+
+ //return basegfx::B2IPoint( (sal_Int32)3*x2, (sal_Int32)3*z2 );
+ return basegfx::B2IPoint( (sal_Int32)(6*x2), (sal_Int32)(6*z2) );
+}
+
+static basebmp::Color approachColor( const basebmp::Color& rFrom, const basebmp::Color& rTo )
+{
+ basebmp::Color aColor;
+ UINT8 nDiff;
+ // approach red
+ if( rFrom.getRed() < rTo.getRed() )
+ {
+ nDiff = rTo.getRed() - rFrom.getRed();
+ aColor.setRed( rFrom.getRed() + ( nDiff < 10 ? nDiff : 10 ) );
+ }
+ else if( rFrom.getRed() > rTo.getRed() )
+ {
+ nDiff = rFrom.getRed() - rTo.getRed();
+ aColor.setRed( rFrom.getRed() - ( nDiff < 10 ? nDiff : 10 ) );
+ }
+ else
+ aColor.setRed( rFrom.getRed() );
+
+ // approach Green
+ if( rFrom.getGreen() < rTo.getGreen() )
+ {
+ nDiff = rTo.getGreen() - rFrom.getGreen();
+ aColor.setGreen( rFrom.getGreen() + ( nDiff < 10 ? nDiff : 10 ) );
+ }
+ else if( rFrom.getGreen() > rTo.getGreen() )
+ {
+ nDiff = rFrom.getGreen() - rTo.getGreen();
+ aColor.setGreen( rFrom.getGreen() - ( nDiff < 10 ? nDiff : 10 ) );
+ }
+ else
+ aColor.setGreen( rFrom.getGreen() );
+
+ // approach blue
+ if( rFrom.getBlue() < rTo.getBlue() )
+ {
+ nDiff = rTo.getBlue() - rFrom.getBlue();
+ aColor.setBlue( rFrom.getBlue() + ( nDiff < 10 ? nDiff : 10 ) );
+ }
+ else if( rFrom.getBlue() > rTo.getBlue() )
+ {
+ nDiff = rFrom.getBlue() - rTo.getBlue();
+ aColor.setBlue( rFrom.getBlue() - ( nDiff < 10 ? nDiff : 10 ) );
+ }
+ else
+ aColor.setBlue( rFrom.getBlue() );
+
+ return aColor;
+}
+
+#define DELTA 5.0
+
+
+
+void TestWindow::Paint( const Rectangle& /*rRect*/ )
+{
+ basegfx::B2ISize aTestSize(1000,1000);
+ basebmp::BitmapDeviceSharedPtr pDevice( basebmp::createBitmapDevice( aTestSize,
+ false,
+ basebmp::Format::THIRTYTWO_BIT_TC_MASK ));
+
+ {
+ ::rtl::OUString aSvg;
+ basegfx::B2DPolyPolygon aPoly;
+
+ basegfx::tools::importFromSvgD( aPoly,
+ ::rtl::OUString::createFromAscii(
+ "m0 0 h7 v7 h-7 z" ) );
+ basegfx::tools::importFromSvgD( aPoly,
+ ::rtl::OUString::createFromAscii(
+ "m2 2 h3 v3 h-3 z" ) );
+
+ pDevice->fillPolyPolygon(
+ aPoly,
+ basebmp::Color(0xFFFFFFFF),
+ basebmp::DrawMode_PAINT );
+ }
+
+#if 0
+ {
+ basebmp::BitmapDeviceSharedPtr pMask( basebmp::createBitmapDevice( aTestSize,
+ false,
+ basebmp::Format::ONE_BIT_MSB_GREY ));
+
+ const basegfx::B2IPoint aPt111(10,10);
+ const basegfx::B2IPoint aPt222(0,10);
+ const basebmp::Color aCol333(0xFFFFFFFF);
+ pMask->drawLine( aPt111, aPt222, aCol333, basebmp::DrawMode_PAINT );
+
+
+ ::rtl::OUString aSvg = ::rtl::OUString::createFromAscii(
+ "m 0 0 h5 l5 5 v5 h-5 l-5-5 z" );
+ basegfx::B2DPolyPolygon aPoly;
+ basegfx::tools::importFromSvgD( aPoly, aSvg );
+ pMask->clear(basebmp::Color(0xFFFFFFFF));
+ pMask->drawPolygon(
+ aPoly.getB2DPolygon(0),
+ basebmp::Color(0),
+ basebmp::DrawMode_PAINT );
+
+ basebmp::BitmapDeviceSharedPtr pSubsetDevice =
+ basebmp::subsetBitmapDevice( pDevice,
+ basegfx::B2IRange(3,3,7,7) );
+
+ const basegfx::B2IPoint aPt1(0,0);
+ const basegfx::B2IPoint aPt2(1,9);
+ const basebmp::Color aCol(0xFFFFFFFF);
+ pDevice->drawLine( aPt1, aPt2, aCol, basebmp::DrawMode_PAINT, pMask );
+ }
+
+ {
+ const basebmp::Color aCol(0xFFFFFFFF);
+ basegfx::B2DPolygon aRect = basegfx::tools::createPolygonFromRect(
+ basegfx::B2DRange( 0,0,1001,1001 ));
+ pDevice->drawPolygon( aRect, aCol, basebmp::DrawMode_PAINT );
+
+ const basegfx::B2IPoint aPt1(0,0);
+ const basegfx::B2IPoint aPt2(0,800);
+ pDevice->drawLine( aPt1, aPt2, aCol, basebmp::DrawMode_PAINT );
+
+ const basegfx::B2IPoint aPt3(0,1001);
+ pDevice->drawLine( aPt1, aPt3, aCol, basebmp::DrawMode_PAINT );
+ }
+#endif
+
+ {
+ pDevice->clear(basebmp::Color(0));
+
+ basegfx::B2IPoint aCenter( aTestSize.getX()/2,
+ aTestSize.getY()/2 );
+ //basegfx::B2IPoint aP1( aTestSize.getX()/48, 0), aP2( aTestSize.getX()/40, 0 ), aPoint;
+ //basegfx::B2IPoint aP1( aTestSize.getX()/7, 0), aP2( aTestSize.getX()/6, 0 ), aPoint;
+ //basegfx::B2IPoint aP1( aTestSize.getX()/5, 0), aP2( aTestSize.getX()/4, 0 ), aPoint;
+ basegfx::B2IPoint aP1( aTestSize.getX()/12, 0), aP2( aTestSize.getX()/11, 0 ), aPoint;
+
+ double sind = sin( DELTA*M_PI/180.0 );
+ double cosd = cos( DELTA*M_PI/180.0 );
+ double factor = 1 + (DELTA/1000.0);
+ int n=0;
+ basebmp::Color aLineColor( 0, 0, 0 );
+ basebmp::Color aApproachColor( 0, 0, 200 );
+ while ( aP2.getX() < aCenter.getX() && n++ < 680 )
+ {
+ aLineColor = approachColor( aLineColor, aApproachColor );
+
+ // switch aproach color
+ if( aApproachColor == aLineColor )
+ {
+ if( aApproachColor.getRed() )
+ aApproachColor = basebmp::Color( 0, 0, 200 );
+ else if( aApproachColor.getGreen() )
+ aApproachColor = basebmp::Color( 200, 0, 0 );
+ else
+ aApproachColor = basebmp::Color( 0, 200, 0 );
+ }
+
+ basegfx::B2DPolygon aPoly;
+ aPoly.append( basegfx::B2DPoint(project( aP1 ) + aCenter) );
+ aPoly.append( basegfx::B2DPoint(project( aP2 ) + aCenter) );
+ pDevice->fillPolyPolygon(
+ basegfx::tools::createAreaGeometryForPolygon(
+ aPoly,
+// std::max(1,n/30),
+// std::max(1,n/60),
+ std::max(1,n/30),
+ basegfx::tools::B2DLINEJOIN_NONE),
+ aLineColor,
+ basebmp::DrawMode_PAINT);
+
+ aPoint.setX( (int)((((double)aP1.getX())*cosd - ((double)aP1.getY())*sind)*factor) );
+ aPoint.setY( (int)((((double)aP1.getY())*cosd + ((double)aP1.getX())*sind)*factor) );
+ aP1 = aPoint;
+ aPoint.setX( (int)((((double)aP2.getX())*cosd - ((double)aP2.getY())*sind)*factor) );
+ aPoint.setY( (int)((((double)aP2.getY())*cosd + ((double)aP2.getX())*sind)*factor) );
+ aP2 = aPoint;
+ }
+ }
+
+ Bitmap aBitmap( Size(aTestSize.getX(),
+ aTestSize.getY()), 24 );
+
+ // Fill bitmap with generated content
+ {
+ ScopedBitmapWriteAccess pWriteAccess( aBitmap.AcquireWriteAccess(),
+ aBitmap );
+ for( int y=0; y<aTestSize.getY(); ++y )
+ for( int x=0; x<aTestSize.getX(); ++x )
+ pWriteAccess->SetPixel(y,x,
+ Color(pDevice->getPixelData(basegfx::B2IPoint(x,y))) );
+ }
+
+ DrawBitmap( Point(), aBitmap );
+}
+
+USHORT TestApp::Exception( USHORT nError )
+{
+ switch( nError & EXC_MAJORTYPE )
+ {
+ case EXC_RSCNOTLOADED:
+ Abort( String::CreateFromAscii( "Error: could not load language resources.\nPlease check your installation.\n" ) );
+ break;
+ }
+ return 0;
+}
+
+void TestApp::Main()
+{
+ //-------------------------------------------------
+ // create the global service-manager
+ //-------------------------------------------------
+ uno::Reference< lang::XMultiServiceFactory > xFactory;
+ try
+ {
+ uno::Reference< uno::XComponentContext > xCtx = ::cppu::defaultBootstrap_InitialComponentContext();
+ xFactory = uno::Reference< lang::XMultiServiceFactory >( xCtx->getServiceManager(),
+ uno::UNO_QUERY );
+ if( xFactory.is() )
+ ::comphelper::setProcessServiceFactory( xFactory );
+ }
+ catch( uno::Exception& )
+ {
+ }
+
+ if( !xFactory.is() )
+ {
+ OSL_TRACE( "Could not bootstrap UNO, installation must be in disorder. Exiting.\n" );
+ exit( 1 );
+ }
+
+ // Create UCB.
+ uno::Sequence< uno::Any > aArgs( 2 );
+ aArgs[ 0 ] <<= rtl::OUString::createFromAscii( UCB_CONFIGURATION_KEY1_LOCAL );
+ aArgs[ 1 ] <<= rtl::OUString::createFromAscii( UCB_CONFIGURATION_KEY2_OFFICE );
+ ::ucb::ContentBroker::initialize( xFactory, aArgs );
+
+ TestWindow pWindow;
+ pWindow.Execute();
+
+ // clean up UCB
+ ::ucb::ContentBroker::deinitialize();
+}
+
+TestApp aDemoApp;
diff --git a/basebmp/test/bmpmasktest.cxx b/basebmp/test/bmpmasktest.cxx
new file mode 100644
index 000000000000..9be504819fe8
--- /dev/null
+++ b/basebmp/test/bmpmasktest.cxx
@@ -0,0 +1,191 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// autogenerated file with codegen.pl
+
+#include "cppunit/TestAssert.h"
+#include "cppunit/TestFixture.h"
+#include "cppunit/extensions/HelperMacros.h"
+
+#include <basegfx/vector/b2isize.hxx>
+#include <basegfx/range/b2irange.hxx>
+#include <basegfx/point/b2ipoint.hxx>
+#include <basegfx/polygon/b2dpolygon.hxx>
+#include <basegfx/polygon/b2dpolygontools.hxx>
+#include <basegfx/polygon/b2dpolypolygon.hxx>
+#include <basegfx/polygon/b2dpolypolygontools.hxx>
+
+#include <basebmp/color.hxx>
+#include <basebmp/scanlineformats.hxx>
+#include <basebmp/bitmapdevice.hxx>
+#include <basebmp/debug.hxx>
+#include "tools.hxx"
+
+#include <iostream>
+#include <fstream>
+
+using namespace ::basebmp;
+
+namespace
+{
+/*
+ std::ofstream output("32bpp_test.dump");
+ debugDump( rDevice, output );
+ std::ofstream output2("32bpp_bmp.dump");
+ debugDump( rBmp, output2 );
+*/
+
+class BmpMaskTest : public CppUnit::TestFixture
+{
+private:
+ BitmapDeviceSharedPtr mpDevice1bpp;
+ BitmapDeviceSharedPtr mpMaskBmp1bpp;
+ BitmapDeviceSharedPtr mpBmp1bpp;
+ BitmapDeviceSharedPtr mpDevice32bpp;
+ BitmapDeviceSharedPtr mpBmp32bpp;
+
+ void implTestBmpBasics(const BitmapDeviceSharedPtr& rDevice,
+ const BitmapDeviceSharedPtr& rBmp)
+ {
+ rDevice->clear(Color(0));
+ const Color aCol(0xFFFFFFFF);
+
+ const basegfx::B2IRange aSourceRect(0,0,10,10);
+ const basegfx::B2IRange aDestAll(0,0,10,10);
+
+ rDevice->drawMaskedBitmap(
+ rBmp,
+ mpMaskBmp1bpp,
+ aSourceRect,
+ aDestAll,
+ DrawMode_PAINT );
+ CPPUNIT_ASSERT_MESSAGE("number of rendered pixel is not 30",
+ countPixel( rDevice, aCol ) == 30);
+ }
+
+ void implTestBmpScaledClip(const BitmapDeviceSharedPtr& rDevice,
+ const BitmapDeviceSharedPtr& rBmp)
+ {
+ rDevice->clear(Color(0));
+ const Color aCol(0xFFFFFFFF);
+
+ const basegfx::B2IRange aSourceRect(0,0,10,10);
+ const basegfx::B2IRange aDestLeftTop(0,0,6,6);
+
+ rDevice->drawMaskedBitmap(
+ rBmp,
+ mpMaskBmp1bpp,
+ aSourceRect,
+ aDestLeftTop,
+ DrawMode_PAINT );
+ CPPUNIT_ASSERT_MESSAGE("number of rendered pixel is not 12",
+ countPixel( rDevice, aCol ) == 12);
+ }
+
+public:
+ void setUp()
+ {
+ const basegfx::B2ISize aSize(10,10);
+ mpDevice1bpp = createBitmapDevice( aSize,
+ true,
+ Format::ONE_BIT_MSB_PAL );
+ mpDevice32bpp = createBitmapDevice( aSize,
+ true,
+ Format::THIRTYTWO_BIT_TC_MASK );
+
+ mpMaskBmp1bpp = createBitmapDevice( aSize,
+ true,
+ Format::ONE_BIT_MSB_GREY );
+
+ mpBmp1bpp = createBitmapDevice( aSize,
+ true,
+ Format::ONE_BIT_MSB_PAL );
+ mpBmp32bpp = createBitmapDevice( aSize,
+ true,
+ Format::THIRTYTWO_BIT_TC_MASK );
+
+ ::rtl::OUString aSvg = ::rtl::OUString::createFromAscii(
+ "m 0 0h5v10h5v-5h-10z" );
+
+ basegfx::B2DPolyPolygon aPoly;
+ basegfx::tools::importFromSvgD( aPoly, aSvg );
+ const Color aColWhite(0xFFFFFFFF);
+ const Color aColBlack(0);
+ mpBmp1bpp->fillPolyPolygon(
+ aPoly,
+ aColWhite,
+ DrawMode_PAINT );
+ mpBmp32bpp->fillPolyPolygon(
+ aPoly,
+ aColWhite,
+ DrawMode_PAINT );
+
+ aSvg = ::rtl::OUString::createFromAscii(
+ "m 0 0 h6 v10 h-6z" );
+
+ aPoly.clear();
+ basegfx::tools::importFromSvgD( aPoly, aSvg );
+ mpMaskBmp1bpp->clear(aColWhite);
+ mpMaskBmp1bpp->fillPolyPolygon(
+ aPoly,
+ aColBlack,
+ DrawMode_PAINT );
+ }
+
+ void testBmpBasics()
+ {
+ implTestBmpBasics( mpDevice1bpp, mpBmp1bpp );
+ implTestBmpBasics( mpDevice32bpp, mpBmp32bpp );
+ }
+
+ void testBmpClip()
+ {
+ implTestBmpScaledClip( mpDevice1bpp, mpBmp1bpp );
+ implTestBmpScaledClip( mpDevice32bpp, mpBmp32bpp );
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(BmpMaskTest);
+ CPPUNIT_TEST(testBmpBasics);
+ CPPUNIT_TEST(testBmpClip);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+// -----------------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION(BmpMaskTest);
+}
+
+
+// -----------------------------------------------------------------------------
+
+// this macro creates an empty function, which will called by the RegisterAllFunctions()
+// to let the user the possibility to also register some functions by hand.
+//NOADDITIONAL;
+
diff --git a/basebmp/test/bmptest.cxx b/basebmp/test/bmptest.cxx
new file mode 100644
index 000000000000..9e33f0a8d713
--- /dev/null
+++ b/basebmp/test/bmptest.cxx
@@ -0,0 +1,218 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// autogenerated file with codegen.pl
+
+#include "cppunit/TestAssert.h"
+#include "cppunit/TestFixture.h"
+#include "cppunit/extensions/HelperMacros.h"
+
+#include <basegfx/vector/b2isize.hxx>
+#include <basegfx/range/b2irange.hxx>
+#include <basegfx/point/b2ipoint.hxx>
+#include <basegfx/polygon/b2dpolygon.hxx>
+#include <basegfx/polygon/b2dpolygontools.hxx>
+#include <basegfx/polygon/b2dpolypolygon.hxx>
+#include <basegfx/polygon/b2dpolypolygontools.hxx>
+
+#include <basebmp/color.hxx>
+#include <basebmp/scanlineformats.hxx>
+#include <basebmp/bitmapdevice.hxx>
+#include <basebmp/debug.hxx>
+#include "tools.hxx"
+
+#include <iostream>
+#include <fstream>
+
+using namespace ::basebmp;
+
+namespace
+{
+/*
+ std::ofstream output("32bpp_test.dump");
+ debugDump( rDevice, output );
+ std::ofstream output2("32bpp_bmp.dump");
+ debugDump( rBmp, output2 );
+*/
+
+class BmpTest : public CppUnit::TestFixture
+{
+private:
+ BitmapDeviceSharedPtr mpDevice1bpp;
+ BitmapDeviceSharedPtr mpBmp1bpp;
+ BitmapDeviceSharedPtr mpDevice32bpp;
+ BitmapDeviceSharedPtr mpBmp32bpp;
+
+ void implTestBmpBasics(const BitmapDeviceSharedPtr& rDevice,
+ const BitmapDeviceSharedPtr& rBmp)
+ {
+ rDevice->clear(Color(0));
+ const Color aCol(0xFFFFFFFF);
+
+ const basegfx::B2IRange aSourceRect(0,0,10,10);
+ const basegfx::B2IRange aDestLeftTop(0,0,4,4);
+ const basegfx::B2IRange aDestRightTop(6,0,10,4);
+ const basegfx::B2IRange aDestLeftBottom(0,6,4,10);
+ const basegfx::B2IRange aDestRightBottom(6,6,10,10);
+
+ rDevice->drawBitmap(
+ rBmp,
+ aSourceRect,
+ aDestLeftTop,
+ DrawMode_PAINT );
+ CPPUNIT_ASSERT_MESSAGE("number of rendered pixel is not 8",
+ countPixel( rDevice, aCol ) == 8);
+
+ rDevice->drawBitmap(
+ rBmp,
+ aSourceRect,
+ aDestRightTop,
+ DrawMode_PAINT );
+ CPPUNIT_ASSERT_MESSAGE("number of rendered pixel is not 16",
+ countPixel( rDevice, aCol ) == 16);
+
+ rDevice->drawBitmap(
+ rBmp,
+ aSourceRect,
+ aDestLeftBottom,
+ DrawMode_PAINT );
+ CPPUNIT_ASSERT_MESSAGE("number of rendered pixel is not 24",
+ countPixel( rDevice, aCol ) == 24);
+
+ rDevice->drawBitmap(
+ rBmp,
+ aSourceRect,
+ aDestRightBottom,
+ DrawMode_PAINT );
+ CPPUNIT_ASSERT_MESSAGE("number of rendered pixel is not 32",
+ countPixel( rDevice, aCol ) == 32);
+ }
+
+ void implTestBmpClip(const BitmapDeviceSharedPtr& rDevice,
+ const BitmapDeviceSharedPtr& rBmp)
+ {
+ rDevice->clear(Color(0));
+ const Color aCol(0xFFFFFFFF);
+
+ const basegfx::B2IRange aSourceRect(0,0,10,10);
+ const basegfx::B2IRange aDestLeftTop(-2,-2,2,2);
+ const basegfx::B2IRange aDestRightTop(8,-2,12,2);
+ const basegfx::B2IRange aDestLeftBottom(-2,8,2,12);
+ const basegfx::B2IRange aDestRightBottom(8,8,12,12);
+
+ rDevice->drawBitmap(
+ rBmp,
+ aSourceRect,
+ aDestLeftTop,
+ DrawMode_PAINT );
+ CPPUNIT_ASSERT_MESSAGE("number of rendered pixel is not 4",
+ countPixel( rDevice, aCol ) == 4);
+
+ rDevice->drawBitmap(
+ rBmp,
+ aSourceRect,
+ aDestLeftBottom,
+ DrawMode_PAINT );
+ CPPUNIT_ASSERT_MESSAGE("number of rendered pixel is not 4(c)",
+ countPixel( rDevice, aCol ) == 4);
+
+ rDevice->drawBitmap(
+ rBmp,
+ aSourceRect,
+ aDestRightBottom,
+ DrawMode_PAINT );
+ CPPUNIT_ASSERT_MESSAGE("number of rendered pixel is not 8",
+ countPixel( rDevice, aCol ) == 8);
+ }
+
+public:
+ void setUp()
+ {
+ const basegfx::B2ISize aSize(10,10);
+ mpDevice1bpp = createBitmapDevice( aSize,
+ true,
+ Format::ONE_BIT_MSB_PAL );
+ mpDevice32bpp = createBitmapDevice( aSize,
+ true,
+ Format::THIRTYTWO_BIT_TC_MASK );
+
+ mpBmp1bpp = createBitmapDevice( aSize,
+ true,
+ Format::ONE_BIT_MSB_PAL );
+ mpBmp32bpp = createBitmapDevice( aSize,
+ true,
+ Format::THIRTYTWO_BIT_TC_MASK );
+
+ ::rtl::OUString aSvg = ::rtl::OUString::createFromAscii(
+ "m 0 0h5v10h5v-5h-10z" );
+
+ basegfx::B2DPolyPolygon aPoly;
+ basegfx::tools::importFromSvgD( aPoly, aSvg );
+ const Color aCol(0xFFFFFFFF);
+ mpBmp1bpp->fillPolyPolygon(
+ aPoly,
+ aCol,
+ DrawMode_PAINT );
+ mpBmp32bpp->fillPolyPolygon(
+ aPoly,
+ aCol,
+ DrawMode_PAINT );
+ }
+
+ void testBmpBasics()
+ {
+ implTestBmpBasics( mpDevice1bpp, mpBmp1bpp );
+ implTestBmpBasics( mpDevice32bpp, mpBmp32bpp );
+ }
+
+ void testBmpClip()
+ {
+ implTestBmpClip( mpDevice1bpp, mpBmp1bpp );
+ implTestBmpClip( mpDevice32bpp, mpBmp32bpp );
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(BmpTest);
+ CPPUNIT_TEST(testBmpBasics);
+ CPPUNIT_TEST(testBmpClip);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+// -----------------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION(BmpTest);
+}
+
+
+// -----------------------------------------------------------------------------
+
+// this macro creates an empty function, which will called by the RegisterAllFunctions()
+// to let the user the possibility to also register some functions by hand.
+//NOADDITIONAL;
+
diff --git a/basebmp/test/cliptest.cxx b/basebmp/test/cliptest.cxx
new file mode 100644
index 000000000000..875016d878cc
--- /dev/null
+++ b/basebmp/test/cliptest.cxx
@@ -0,0 +1,285 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// autogenerated file with codegen.pl
+
+#include "cppunit/TestAssert.h"
+#include "cppunit/TestFixture.h"
+#include "cppunit/extensions/HelperMacros.h"
+
+#include <basegfx/vector/b2isize.hxx>
+#include <basegfx/point/b2ipoint.hxx>
+#include <basegfx/range/b2drange.hxx>
+#include <basegfx/range/b2irange.hxx>
+#include <basegfx/polygon/b2dpolygon.hxx>
+#include <basegfx/polygon/b2dpolygontools.hxx>
+#include <basegfx/polygon/b2dpolypolygon.hxx>
+#include <basegfx/polygon/b2dpolypolygontools.hxx>
+
+#include <basebmp/color.hxx>
+#include <basebmp/scanlineformats.hxx>
+#include <basebmp/bitmapdevice.hxx>
+#include <basebmp/debug.hxx>
+#include "tools.hxx"
+
+#include <iostream>
+#include <fstream>
+
+using namespace ::basebmp;
+
+namespace
+{
+/*
+ std::ofstream output("32bpp_test.dump");
+ debugDump( mpDevice32bpp, output );
+*/
+
+class ClipTest : public CppUnit::TestFixture
+{
+private:
+ BitmapDeviceSharedPtr mpClipMask;
+ BitmapDeviceSharedPtr mpDevice1bpp;
+ BitmapDeviceSharedPtr mpDevice32bpp;
+
+ void implTestPixelClip(const BitmapDeviceSharedPtr& rDevice)
+ {
+ const Color aBgCol(0);
+ rDevice->clear(aBgCol);
+
+ const basegfx::B2IPoint aPt(0,0);
+ const Color aCol(0xFFFFFFFF);
+ rDevice->setPixel( aPt, aCol, DrawMode_PAINT, mpClipMask );
+ CPPUNIT_ASSERT_MESSAGE("get/setPixel clip #1",
+ rDevice->getPixel(aPt) == aBgCol);
+
+ const basegfx::B2IPoint aPt2(10,10);
+ rDevice->setPixel( aPt2, aCol, DrawMode_PAINT, mpClipMask );
+ CPPUNIT_ASSERT_MESSAGE("get/setPixel clip #2",
+ rDevice->getPixel(aPt2) == aBgCol);
+
+ const basegfx::B2IPoint aPt1(10,0);
+ rDevice->setPixel( aPt1, aCol, DrawMode_PAINT, mpClipMask );
+ CPPUNIT_ASSERT_MESSAGE("get/setPixel clip #3",
+ rDevice->getPixel(aPt1) != aBgCol);
+
+ const basegfx::B2IPoint aPt3(0,10);
+ rDevice->setPixel( aPt3, aCol, DrawMode_PAINT, mpClipMask );
+ CPPUNIT_ASSERT_MESSAGE("get/setPixel clip #4",
+ rDevice->getPixel(aPt3) != aBgCol);
+ }
+
+ void implTestLineClip(const BitmapDeviceSharedPtr& rDevice)
+ {
+ const Color aBgCol(0);
+ rDevice->clear(aBgCol);
+
+ const basegfx::B2IPoint aPt1(0,0);
+ const basegfx::B2IPoint aPt2(1,9);
+ const Color aCol(0xFFFFFFFF);
+ rDevice->drawLine( aPt1, aPt2, aCol, DrawMode_PAINT, mpClipMask );
+
+ const basegfx::B2IPoint aPt3(1,5);
+ CPPUNIT_ASSERT_MESSAGE("get line pixel",
+ rDevice->getPixel(aPt3) != aBgCol);
+ CPPUNIT_ASSERT_MESSAGE("number of rendered line pixel is not 4",
+ countPixel( rDevice,
+ rDevice->getPixel(aPt3) ) == 4);
+
+ rDevice->drawLine( aPt1, aPt2, aCol, DrawMode_XOR, mpClipMask );
+ CPPUNIT_ASSERT_MESSAGE("number of xor-rendered line pixel is not 0",
+ countPixel( rDevice,
+ rDevice->getPixel(aPt3) ) == 121);
+ }
+
+ void implTestFillClip(const BitmapDeviceSharedPtr& rDevice)
+ {
+ rDevice->clear(Color(0));
+
+ const basegfx::B2DRange aAllOver(-10,-10,20,20);
+ const Color aCol(0xFFFFFFFF);
+ rDevice->fillPolyPolygon( basegfx::B2DPolyPolygon(
+ basegfx::tools::createPolygonFromRect(aAllOver)),
+ aCol,
+ DrawMode_PAINT,
+ mpClipMask );
+ const basegfx::B2IPoint aPt(0,10);
+ CPPUNIT_ASSERT_MESSAGE("number of clipped pixel is not 30",
+ countPixel( rDevice, rDevice->getPixel(aPt) ) == 121-30);
+
+ rDevice->fillPolyPolygon( basegfx::B2DPolyPolygon(
+ basegfx::tools::createPolygonFromRect(aAllOver)),
+ aCol,
+ DrawMode_PAINT );
+ CPPUNIT_ASSERT_MESSAGE("number of filled pixel is not 121",
+ countPixel( rDevice, rDevice->getPixel(aPt) ) == 121);
+
+ rDevice->fillPolyPolygon( basegfx::B2DPolyPolygon(
+ basegfx::tools::createPolygonFromRect(aAllOver)),
+ aCol,
+ DrawMode_XOR,
+ mpClipMask );
+ CPPUNIT_ASSERT_MESSAGE("number of xor-cleared pixel is not 91",
+ countPixel( rDevice, rDevice->getPixel(aPt) ) == 121-30);
+ }
+
+ void implTestBmpClip(const BitmapDeviceSharedPtr& rDevice)
+ {
+ BitmapDeviceSharedPtr pBmp( cloneBitmapDevice(
+ basegfx::B2IVector(3,3),
+ rDevice ));
+ Color aCol1(0);
+ Color aCol2(0xFFFFFFFF);
+ pBmp->clear(aCol1);
+ pBmp->setPixel(basegfx::B2IPoint(0,0),aCol2,DrawMode_PAINT);
+ pBmp->setPixel(basegfx::B2IPoint(1,1),aCol2,DrawMode_PAINT);
+ pBmp->setPixel(basegfx::B2IPoint(2,2),aCol2,basebmp::DrawMode_PAINT);
+
+ rDevice->clear(aCol1);
+ rDevice->drawBitmap(pBmp,
+ basegfx::B2IRange(0,0,3,3),
+ basegfx::B2IRange(-1,-1,4,4),
+ DrawMode_PAINT,
+ mpClipMask);
+
+ const basegfx::B2IPoint aPt(1,1);
+ CPPUNIT_ASSERT_MESSAGE("number of clipped pixel is not 5",
+ countPixel( rDevice,
+ rDevice->getPixel(aPt) ) == 5);
+ }
+
+ void implTestMaskColorClip(const BitmapDeviceSharedPtr& rDevice)
+ {
+ BitmapDeviceSharedPtr pBmp( createBitmapDevice( rDevice->getSize(),
+ true,
+ Format::EIGHT_BIT_GREY ));
+
+ ::rtl::OUString aSvg = ::rtl::OUString::createFromAscii(
+ "m 0 0h5v10h5v-5h-10z" );
+
+ basegfx::B2DPolyPolygon aPoly;
+ basegfx::tools::importFromSvgD( aPoly, aSvg );
+ const basebmp::Color aCol(0xFF);
+ pBmp->clear( basebmp::Color(0) );
+ pBmp->fillPolyPolygon(
+ aPoly,
+ aCol,
+ basebmp::DrawMode_PAINT );
+
+ const basegfx::B2IRange aSourceRect(0,0,10,10);
+ const basegfx::B2IPoint aDestLeftTop(0,0);
+ const Color aCol2(0xF0F0F0F0);
+ rDevice->drawMaskedColor(
+ aCol2,
+ pBmp,
+ aSourceRect,
+ aDestLeftTop,
+ mpClipMask );
+ const basegfx::B2IPoint aPt(1,1);
+ CPPUNIT_ASSERT_MESSAGE("number of rendered pixel is not 41",
+ countPixel( rDevice, rDevice->getPixel(aPt) ) == 41);
+
+ }
+
+public:
+ void setUp()
+ {
+ const basegfx::B2ISize aSize(11,11);
+ mpClipMask = createBitmapDevice( aSize,
+ true,
+ Format::ONE_BIT_MSB_GREY );
+ mpDevice1bpp = createBitmapDevice( aSize,
+ true,
+ Format::ONE_BIT_MSB_PAL );
+ mpDevice32bpp = createBitmapDevice( aSize,
+ true,
+ Format::THIRTYTWO_BIT_TC_MASK );
+
+ ::rtl::OUString aSvg = ::rtl::OUString::createFromAscii(
+ "m 0 0 h5 l5 5 v5 h-5 l-5-5 z" );
+ basegfx::B2DPolyPolygon aPoly;
+ basegfx::tools::importFromSvgD( aPoly, aSvg );
+ mpClipMask->clear(Color(0));
+ mpClipMask->drawPolygon(
+ aPoly.getB2DPolygon(0),
+ Color(0xFFFFFFFF),
+ DrawMode_PAINT );
+ }
+
+ void testPixelClip()
+ {
+ implTestPixelClip( mpDevice1bpp );
+ implTestPixelClip( mpDevice32bpp );
+ }
+
+ void testLineClip()
+ {
+ implTestLineClip( mpDevice1bpp );
+ implTestLineClip( mpDevice32bpp );
+ }
+
+ void testFillClip()
+ {
+ implTestFillClip( mpDevice1bpp );
+ implTestFillClip( mpDevice32bpp );
+ }
+
+ void testBmpClip()
+ {
+ implTestBmpClip( mpDevice1bpp );
+ implTestBmpClip( mpDevice32bpp );
+ }
+
+ void testMaskColorClip()
+ {
+ implTestMaskColorClip( mpDevice1bpp );
+ implTestMaskColorClip( mpDevice32bpp );
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(ClipTest);
+ CPPUNIT_TEST(testPixelClip);
+ CPPUNIT_TEST(testLineClip);
+ CPPUNIT_TEST(testFillClip);
+ CPPUNIT_TEST(testBmpClip);
+ CPPUNIT_TEST(testMaskColorClip);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+// -----------------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION(ClipTest);
+}
+
+
+// -----------------------------------------------------------------------------
+
+// this macro creates an empty function, which will called by the RegisterAllFunctions()
+// to let the user the possibility to also register some functions by hand.
+//NOADDITIONAL;
+
diff --git a/basebmp/test/export.map b/basebmp/test/export.map
new file mode 100644
index 000000000000..3308588ef6f8
--- /dev/null
+++ b/basebmp/test/export.map
@@ -0,0 +1,34 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+UDK_3_0_0 {
+ global:
+ cppunitTestPlugIn;
+
+ local:
+ *;
+};
diff --git a/basebmp/test/filltest.cxx b/basebmp/test/filltest.cxx
new file mode 100644
index 000000000000..150fa11b3a72
--- /dev/null
+++ b/basebmp/test/filltest.cxx
@@ -0,0 +1,279 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// autogenerated file with codegen.pl
+
+#include "cppunit/TestAssert.h"
+#include "cppunit/TestFixture.h"
+#include "cppunit/extensions/HelperMacros.h"
+
+#include <basegfx/vector/b2isize.hxx>
+#include <basegfx/range/b2drange.hxx>
+#include <basegfx/point/b2ipoint.hxx>
+#include <basegfx/polygon/b2dpolygon.hxx>
+#include <basegfx/polygon/b2dpolygontools.hxx>
+#include <basegfx/polygon/b2dpolypolygon.hxx>
+#include <basegfx/polygon/b2dpolypolygontools.hxx>
+
+#include <basebmp/color.hxx>
+#include <basebmp/scanlineformats.hxx>
+#include <basebmp/bitmapdevice.hxx>
+#include <basebmp/debug.hxx>
+#include "tools.hxx"
+
+#include <iostream>
+#include <fstream>
+
+using namespace ::basebmp;
+
+namespace
+{
+/*
+ std::ofstream output("32bpp_test.dump");
+ debugDump( mpDevice32bpp, output );
+*/
+
+class FillTest : public CppUnit::TestFixture
+{
+private:
+ BitmapDeviceSharedPtr mpDevice1bpp;
+ BitmapDeviceSharedPtr mpDevice32bpp;
+
+ void implTestRectFill(const BitmapDeviceSharedPtr& rDevice)
+ {
+ rDevice->clear(Color(0));
+
+ const basegfx::B2DRange aRect(1,1,10,10);
+
+ const Color aCol(0xFFFFFFFF);
+ rDevice->fillPolyPolygon(
+ basegfx::B2DPolyPolygon(
+ basegfx::tools::createPolygonFromRect( aRect )),
+ aCol,
+ DrawMode_PAINT );
+
+ const basegfx::B2IPoint aPt1(1,1);
+ CPPUNIT_ASSERT_MESSAGE("first pixel set",
+ rDevice->getPixel(aPt1) == aCol);
+ const basegfx::B2IPoint aPt2(9,9);
+ CPPUNIT_ASSERT_MESSAGE("last pixel set",
+ rDevice->getPixel(aPt2) == aCol);
+ const basegfx::B2IPoint aPt3(0,0);
+ CPPUNIT_ASSERT_MESSAGE("topmost pixel not set",
+ rDevice->getPixel(aPt3) != aCol);
+ const basegfx::B2IPoint aPt4(10,10);
+ CPPUNIT_ASSERT_MESSAGE("bottommost pixel not set",
+ rDevice->getPixel(aPt4) != aCol);
+
+ CPPUNIT_ASSERT_MESSAGE("number of rendered pixel is not 81",
+ countPixel( rDevice, aCol ) == 81);
+ }
+
+ void implTestCornerCases(const BitmapDeviceSharedPtr& rDevice)
+ {
+ rDevice->clear(Color(0));
+
+ const basegfx::B2DRange aEmpty1(0,0,0,11);
+ const basegfx::B2DRange aEmpty2(0,0,11,0);
+ const basegfx::B2DRange aVertLineLeft(0,0,1,11);
+ const basegfx::B2DRange aVertLineRight(10,0,11,11);
+ const basegfx::B2DRange aHorzLineTop(0,0,11,1);
+ const basegfx::B2DRange aHorzLineBottom(0,10,11,11);
+
+ const Color aCol(0xFFFFFFFF);
+ rDevice->fillPolyPolygon(
+ basegfx::B2DPolyPolygon(
+ basegfx::tools::createPolygonFromRect( aEmpty1 )),
+ aCol,
+ DrawMode_PAINT );
+ CPPUNIT_ASSERT_MESSAGE("number of rendered pixel is not 0",
+ countPixel( rDevice, aCol ) == 0);
+
+ rDevice->fillPolyPolygon(
+ basegfx::B2DPolyPolygon(
+ basegfx::tools::createPolygonFromRect( aEmpty2 )),
+ aCol,
+ DrawMode_PAINT );
+ CPPUNIT_ASSERT_MESSAGE("number of rendered pixel is not 0",
+ countPixel( rDevice, aCol ) == 0);
+
+ rDevice->fillPolyPolygon(
+ basegfx::B2DPolyPolygon(
+ basegfx::tools::createPolygonFromRect( aVertLineLeft )),
+ aCol,
+ DrawMode_PAINT );
+ CPPUNIT_ASSERT_MESSAGE("number of rendered pixel is not 11",
+ countPixel( rDevice, aCol ) == 11);
+ const basegfx::B2IPoint aPt1(0,0);
+ CPPUNIT_ASSERT_MESSAGE("first pixel set",
+ rDevice->getPixel(aPt1) == aCol);
+
+ rDevice->fillPolyPolygon(
+ basegfx::B2DPolyPolygon(
+ basegfx::tools::createPolygonFromRect( aVertLineRight )),
+ aCol,
+ DrawMode_PAINT );
+ CPPUNIT_ASSERT_MESSAGE("number of rendered pixel is not 22",
+ countPixel( rDevice, aCol ) == 22);
+ const basegfx::B2IPoint aPt2(10,10);
+ CPPUNIT_ASSERT_MESSAGE("last pixel set",
+ rDevice->getPixel(aPt2) == aCol);
+
+ rDevice->fillPolyPolygon(
+ basegfx::B2DPolyPolygon(
+ basegfx::tools::createPolygonFromRect( aHorzLineTop )),
+ aCol,
+ DrawMode_PAINT );
+ CPPUNIT_ASSERT_MESSAGE("number of rendered pixel is not 31",
+ countPixel( rDevice, aCol ) == 31);
+ const basegfx::B2IPoint aPt3(5,0);
+ CPPUNIT_ASSERT_MESSAGE("top-middle pixel set",
+ rDevice->getPixel(aPt3) == aCol);
+
+ rDevice->fillPolyPolygon(
+ basegfx::B2DPolyPolygon(
+ basegfx::tools::createPolygonFromRect( aHorzLineBottom )),
+ aCol,
+ DrawMode_PAINT );
+ CPPUNIT_ASSERT_MESSAGE("number of rendered pixel is not 40",
+ countPixel( rDevice, aCol ) == 40);
+ const basegfx::B2IPoint aPt4(5,10);
+ CPPUNIT_ASSERT_MESSAGE("bottom-middle pixel set",
+ rDevice->getPixel(aPt4) == aCol);
+
+ ::rtl::OUString aSvg = ::rtl::OUString::createFromAscii(
+ "m 0 0l7 7h-1z" );
+
+ basegfx::B2DPolyPolygon aPoly;
+ basegfx::tools::importFromSvgD( aPoly, aSvg );
+ rDevice->fillPolyPolygon(
+ aPoly,
+ aCol,
+ DrawMode_PAINT );
+ CPPUNIT_ASSERT_MESSAGE("number of rendered pixel is not 43",
+ countPixel( rDevice, aCol ) == 43);
+ }
+
+ void implTestClipping(const BitmapDeviceSharedPtr& rDevice)
+ {
+ rDevice->clear(Color(0));
+
+ const basegfx::B2DRange aLeftTop(-10,-10,1,1);
+ const basegfx::B2DRange aRightTop(10,-10,20,1);
+ const basegfx::B2DRange aLeftBottom(-10,10,1,20);
+ const basegfx::B2DRange aRightBottom(10,10,20,20);
+ const basegfx::B2DRange aAllOver(-10,-10,20,20);
+
+ const Color aCol(0xFFFFFFFF);
+ rDevice->fillPolyPolygon( basegfx::B2DPolyPolygon(
+ basegfx::tools::createPolygonFromRect(aLeftTop)),
+ aCol,
+ DrawMode_PAINT );
+ CPPUNIT_ASSERT_MESSAGE("number of rendered pixel is not 1",
+ countPixel( rDevice, aCol ) == 1);
+
+ rDevice->fillPolyPolygon( basegfx::B2DPolyPolygon(
+ basegfx::tools::createPolygonFromRect(aRightTop)),
+ aCol,
+ DrawMode_PAINT );
+ CPPUNIT_ASSERT_MESSAGE("number of rendered pixel is not 2",
+ countPixel( rDevice, aCol ) == 2);
+
+ rDevice->fillPolyPolygon( basegfx::B2DPolyPolygon(
+ basegfx::tools::createPolygonFromRect(aLeftBottom)),
+ aCol,
+ DrawMode_PAINT );
+ CPPUNIT_ASSERT_MESSAGE("number of rendered pixel is not 3",
+ countPixel( rDevice, aCol ) == 3);
+
+ rDevice->fillPolyPolygon( basegfx::B2DPolyPolygon(
+ basegfx::tools::createPolygonFromRect(aRightBottom)),
+ aCol,
+ DrawMode_PAINT );
+ CPPUNIT_ASSERT_MESSAGE("number of rendered pixel is not 4",
+ countPixel( rDevice, aCol ) == 4);
+
+ rDevice->fillPolyPolygon( basegfx::B2DPolyPolygon(
+ basegfx::tools::createPolygonFromRect(aAllOver)),
+ aCol,
+ DrawMode_PAINT );
+ CPPUNIT_ASSERT_MESSAGE("number of rendered pixel is not 121",
+ countPixel( rDevice, aCol ) == 121);
+ }
+
+public:
+ void setUp()
+ {
+ const basegfx::B2ISize aSize(11,11);
+ mpDevice1bpp = createBitmapDevice( aSize,
+ true,
+ Format::ONE_BIT_MSB_PAL );
+ mpDevice32bpp = createBitmapDevice( aSize,
+ true,
+ Format::THIRTYTWO_BIT_TC_MASK );
+ }
+
+ void testRectFill()
+ {
+ implTestRectFill( mpDevice1bpp );
+ implTestRectFill( mpDevice32bpp );
+ }
+
+ void testClipping()
+ {
+ implTestClipping( mpDevice1bpp );
+ implTestClipping( mpDevice32bpp );
+ }
+
+ void testCornerCases()
+ {
+ implTestCornerCases( mpDevice1bpp );
+ implTestCornerCases( mpDevice32bpp );
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(FillTest);
+ CPPUNIT_TEST(testRectFill);
+ CPPUNIT_TEST(testClipping);
+ CPPUNIT_TEST(testCornerCases);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+// -----------------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION(FillTest);
+}
+
+
+// -----------------------------------------------------------------------------
+
+// this macro creates an empty function, which will called by the RegisterAllFunctions()
+// to let the user the possibility to also register some functions by hand.
+//NOADDITIONAL;
+
diff --git a/basebmp/test/linetest.cxx b/basebmp/test/linetest.cxx
new file mode 100644
index 000000000000..fcd383fccdb0
--- /dev/null
+++ b/basebmp/test/linetest.cxx
@@ -0,0 +1,227 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// autogenerated file with codegen.pl
+
+#include "cppunit/TestAssert.h"
+#include "cppunit/TestFixture.h"
+#include "cppunit/extensions/HelperMacros.h"
+
+#include <basegfx/vector/b2isize.hxx>
+#include <basegfx/point/b2ipoint.hxx>
+
+#include <basebmp/color.hxx>
+#include <basebmp/scanlineformats.hxx>
+#include <basebmp/bitmapdevice.hxx>
+#include <basebmp/debug.hxx>
+#include "tools.hxx"
+
+#include <iostream>
+#include <fstream>
+
+using namespace ::basebmp;
+
+namespace
+{
+/*
+ std::ofstream output("32bpp_test.dump");
+ debugDump( mpDevice32bpp, output );
+*/
+
+class LineTest : public CppUnit::TestFixture
+{
+private:
+ BitmapDeviceSharedPtr mpDevice1bpp;
+ BitmapDeviceSharedPtr mpDevice32bpp;
+
+ void implTestBasicDiagonalLines(const BitmapDeviceSharedPtr& rDevice)
+ {
+ rDevice->clear(Color(0));
+
+ const basegfx::B2IPoint aPt1(1,1);
+ const basegfx::B2IPoint aPt2(9,9);
+ const Color aCol(0xFFFFFFFF);
+ rDevice->drawLine( aPt1, aPt2, aCol, DrawMode_PAINT );
+ CPPUNIT_ASSERT_MESSAGE("first pixel set",
+ rDevice->getPixel(aPt1) == aCol);
+ CPPUNIT_ASSERT_MESSAGE("last pixel set",
+ rDevice->getPixel(aPt2) == aCol);
+ const basegfx::B2IPoint aPt3(0,0);
+ CPPUNIT_ASSERT_MESSAGE("topmost pixel not set",
+ rDevice->getPixel(aPt3) != aCol);
+ const basegfx::B2IPoint aPt4(10,10);
+ CPPUNIT_ASSERT_MESSAGE("bottommost pixel not set",
+ rDevice->getPixel(aPt4) != aCol);
+
+ CPPUNIT_ASSERT_MESSAGE("number of rendered pixel is not 9",
+ countPixel( rDevice, aCol ) == 9);
+
+ rDevice->drawLine( aPt2, aPt1, aCol, DrawMode_PAINT );
+
+ CPPUNIT_ASSERT_MESSAGE("number of rendered pixel after "
+ "reversed paint is not 9",
+ countPixel( rDevice, aCol ) == 9);
+ }
+
+ void implTestBasicHorizontalLines(const BitmapDeviceSharedPtr& rDevice)
+ {
+ rDevice->clear(Color(0));
+
+ const basegfx::B2IPoint aPt1(10,10);
+ const basegfx::B2IPoint aPt2(0,10);
+ const Color aCol(0xFFFFFFFF);
+ rDevice->drawLine( aPt1, aPt2, aCol, DrawMode_PAINT );
+ CPPUNIT_ASSERT_MESSAGE("first pixel set",
+ rDevice->getPixel(aPt1) == aCol);
+ CPPUNIT_ASSERT_MESSAGE("last pixel set",
+ rDevice->getPixel(aPt2) == aCol);
+ CPPUNIT_ASSERT_MESSAGE("number of rendered pixel is not 11",
+ countPixel( rDevice, aCol ) == 11);
+
+ rDevice->clear(Color(0));
+ rDevice->drawLine( aPt2, aPt1, aCol, DrawMode_PAINT );
+ CPPUNIT_ASSERT_MESSAGE("first pixel set",
+ rDevice->getPixel(aPt1) == aCol);
+ CPPUNIT_ASSERT_MESSAGE("last pixel set",
+ rDevice->getPixel(aPt2) == aCol);
+ CPPUNIT_ASSERT_MESSAGE("number of rendered pixel is not 11",
+ countPixel( rDevice, aCol ) == 11);
+ }
+
+ void implTestBasicVerticalLines(const BitmapDeviceSharedPtr& rDevice)
+ {
+ rDevice->clear(Color(0));
+
+ const basegfx::B2IPoint aPt1(1,1);
+ const basegfx::B2IPoint aPt2(1,9);
+ const Color aCol(0xFFFFFFFF);
+ rDevice->drawLine( aPt1, aPt2, aCol, DrawMode_PAINT );
+ CPPUNIT_ASSERT_MESSAGE("first pixel set",
+ rDevice->getPixel(aPt1) == aCol);
+ CPPUNIT_ASSERT_MESSAGE("last pixel set",
+ rDevice->getPixel(aPt2) == aCol);
+ const basegfx::B2IPoint aPt3(0,0);
+ CPPUNIT_ASSERT_MESSAGE("topmost pixel not set",
+ rDevice->getPixel(aPt3) != aCol);
+ const basegfx::B2IPoint aPt4(0,10);
+ CPPUNIT_ASSERT_MESSAGE("bottommost pixel not set",
+ rDevice->getPixel(aPt4) != aCol);
+
+ CPPUNIT_ASSERT_MESSAGE("number of rendered pixel is not 9",
+ countPixel( rDevice, aCol ) == 9);
+ }
+
+ // test pixel rounding (should always tend towards start point of
+ // the line)
+ void implTestTieBreaking(const BitmapDeviceSharedPtr& rDevice)
+ {
+ rDevice->clear(Color(0));
+
+ const basegfx::B2IPoint aPt1(1,1);
+ const basegfx::B2IPoint aPt2(3,2);
+ const Color aCol(0xFFFFFFFF);
+ rDevice->drawLine( aPt1, aPt2, aCol, DrawMode_PAINT );
+ CPPUNIT_ASSERT_MESSAGE("first pixel set",
+ rDevice->getPixel(aPt1) == aCol);
+ CPPUNIT_ASSERT_MESSAGE("second pixel set",
+ rDevice->getPixel(basegfx::B2IPoint(2,1)) == aCol);
+ CPPUNIT_ASSERT_MESSAGE("last pixel set",
+ rDevice->getPixel(aPt2) == aCol);
+ CPPUNIT_ASSERT_MESSAGE("number of rendered pixel after "
+ "reversed paint is not 3",
+ countPixel( rDevice, aCol ) == 3);
+
+ rDevice->drawLine( aPt2, aPt1, aCol, DrawMode_PAINT );
+ CPPUNIT_ASSERT_MESSAGE("alternate second pixel set",
+ rDevice->getPixel(basegfx::B2IPoint(2,2)) == aCol);
+
+ CPPUNIT_ASSERT_MESSAGE("number of rendered pixel after "
+ "reversed paint is not 4",
+ countPixel( rDevice, aCol ) == 4);
+ }
+
+public:
+ void setUp()
+ {
+ const basegfx::B2ISize aSize(11,11);
+ mpDevice1bpp = createBitmapDevice( aSize,
+ true,
+ Format::ONE_BIT_MSB_PAL );
+ mpDevice32bpp = createBitmapDevice( aSize,
+ true,
+ Format::THIRTYTWO_BIT_TC_MASK );
+ }
+
+ void testBasicDiagonalLines()
+ {
+ implTestBasicDiagonalLines( mpDevice1bpp );
+ implTestBasicDiagonalLines( mpDevice32bpp );
+ }
+
+ void testBasicHorizontalLines()
+ {
+ implTestBasicHorizontalLines( mpDevice1bpp );
+ implTestBasicHorizontalLines( mpDevice32bpp );
+ }
+
+ void testBasicVerticalLines()
+ {
+ implTestBasicVerticalLines( mpDevice1bpp );
+ implTestBasicVerticalLines( mpDevice32bpp );
+ }
+
+ // test pixel rounding (should always tend towards start point of
+ // the line)
+ void testTieBreaking()
+ {
+ implTestTieBreaking( mpDevice1bpp );
+ implTestTieBreaking( mpDevice32bpp );
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(LineTest);
+ CPPUNIT_TEST(testBasicDiagonalLines);
+ CPPUNIT_TEST(testBasicHorizontalLines);
+ CPPUNIT_TEST(testBasicVerticalLines);
+ CPPUNIT_TEST(testTieBreaking);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+// -----------------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION(LineTest);
+}
+
+
+// -----------------------------------------------------------------------------
+
+// this macro creates an empty function, which will called by the RegisterAllFunctions()
+// to let the user the possibility to also register some functions by hand.
+//NOADDITIONAL;
+
diff --git a/basebmp/test/makefile.mk b/basebmp/test/makefile.mk
new file mode 100644
index 000000000000..ca77721716f7
--- /dev/null
+++ b/basebmp/test/makefile.mk
@@ -0,0 +1,125 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..
+
+PRJNAME=basebmp
+TARGET=tests
+TARGETTYPE=GUI
+
+ENABLE_EXCEPTIONS=TRUE
+
+# --- Settings -----------------------------------------------------
+
+.INCLUDE : settings.mk
+
+.IF "$(debug)"!="" || "$(DEBUG)"!=""
+
+.IF "$(COM)"=="MSC"
+# disable inlining for MSVC
+CFLAGS += -Ob0
+.ENDIF
+
+.IF "$(COM)"=="GCC"
+# disable inlining for gcc
+CFLAGS += -fno-inline
+.ENDIF
+
+.ENDIF
+
+# SunStudio 12 (-m64 and -m32 modes): three test cases of the unit tests fail
+# if compiled with default -xalias_level (and optimization level -xO3)
+.IF "$(OS)"=="SOLARIS"
+# For Sun Studio 8 this switch does not work: compilation fails on bitmapdevice.cxx
+.IF "$(CCNUMVER)"!="00050005"
+CDEFS+=-xalias_level=compatible
+.ENDIF
+.ENDIF
+
+CFLAGSCXX += $(CPPUNIT_CFLAGS)
+
+# --- Common ----------------------------------------------------------
+.IF "$(L10N_framework)"==""
+
+# BEGIN ----------------------------------------------------------------
+# auto generated Target:tests by codegen.pl
+SHL1OBJS= \
+ $(SLO)$/basictest.obj \
+ $(SLO)$/bmpmasktest.obj \
+ $(SLO)$/bmptest.obj \
+ $(SLO)$/cliptest.obj \
+ $(SLO)$/filltest.obj \
+ $(SLO)$/linetest.obj \
+ $(SLO)$/masktest.obj \
+ $(SLO)$/polytest.obj \
+ $(SLO)$/tools.obj
+SHL1TARGET= tests
+SHL1STDLIBS= $(BASEBMPLIB) \
+ $(SALLIB) \
+ $(CPPUNITLIB) \
+ $(BASEGFXLIB)
+
+SHL1IMPLIB= i$(SHL1TARGET)
+
+DEF1NAME =$(SHL1TARGET)
+SHL1VERSIONMAP = export.map
+SHL1RPATH = NONE
+
+.ENDIF
+# END ------------------------------------------------------------------
+
+#APP2TARGET= bmpdemo
+
+#APP2OBJS= \
+# $(OBJ)$/bmpdemo.obj
+
+#APP2STDLIBS=$(TOOLSLIB) \
+# $(COMPHELPERLIB) \
+# $(BASEGFXLIB) \
+# $(BASEBMPLIB) \
+# $(CPPULIB) \
+# $(CPPUHELPERLIB) \
+# $(UCBHELPERLIB) \
+# $(SALLIB) \
+# $(VCLLIB)
+#
+#.IF "$(GUI)"!="UNX"
+#APP2DEF= $(MISC)$/$(TARGET).def
+#.ENDIF
+
+#------------------------------- All object files -------------------------------
+# do this here, so we get right dependencies
+SLOFILES=$(SHL1OBJS)
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : target.mk
+
+# --- Enable test execution in normal build ------------------------
+.IF "$(L10N_framework)"==""
+.INCLUDE : _cppunit.mk
+.ENDIF
diff --git a/basebmp/test/masktest.cxx b/basebmp/test/masktest.cxx
new file mode 100644
index 000000000000..77cd05588d5a
--- /dev/null
+++ b/basebmp/test/masktest.cxx
@@ -0,0 +1,179 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// autogenerated file with codegen.pl
+
+#include "cppunit/TestAssert.h"
+#include "cppunit/TestFixture.h"
+#include "cppunit/extensions/HelperMacros.h"
+
+#include <basegfx/vector/b2isize.hxx>
+#include <basegfx/range/b2irange.hxx>
+#include <basegfx/point/b2ipoint.hxx>
+#include <basegfx/polygon/b2dpolygon.hxx>
+#include <basegfx/polygon/b2dpolygontools.hxx>
+#include <basegfx/polygon/b2dpolypolygon.hxx>
+#include <basegfx/polygon/b2dpolypolygontools.hxx>
+
+#include <basebmp/color.hxx>
+#include <basebmp/scanlineformats.hxx>
+#include <basebmp/bitmapdevice.hxx>
+#include <basebmp/debug.hxx>
+#include "tools.hxx"
+
+#include <iostream>
+#include <fstream>
+
+using namespace ::basebmp;
+
+namespace
+{
+/*
+ std::ofstream output("32bpp_test.dump");
+ debugDump( rDevice, output );
+ std::ofstream output2("32bpp_bmp.dump");
+ debugDump( rBmp, output2 );
+*/
+
+class MaskTest : public CppUnit::TestFixture
+{
+private:
+ BitmapDeviceSharedPtr mpDevice1bpp;
+ BitmapDeviceSharedPtr mpDevice32bpp;
+ BitmapDeviceSharedPtr mpMask;
+
+ void implTestMaskBasics(const BitmapDeviceSharedPtr& rDevice,
+ const BitmapDeviceSharedPtr& rBmp)
+ {
+ const Color aCol(0);
+ const Color aCol2(0xF0F0F0F0);
+
+ const basegfx::B2IRange aSourceRect(0,0,10,10);
+ const basegfx::B2IPoint aDestLeftTop(0,0);
+ const basegfx::B2IPoint aDestRightTop(5,0);
+ const basegfx::B2IPoint aDestLeftBottom(0,5);
+ const basegfx::B2IPoint aDestRightBottom(5,5);
+
+ rDevice->clear(aCol);
+ rDevice->setPixel(
+ basegfx::B2IPoint(1,1),
+ aCol2,
+ DrawMode_PAINT);
+ rDevice->drawMaskedColor(
+ aCol2,
+ rBmp,
+ aSourceRect,
+ aDestLeftTop );
+ CPPUNIT_ASSERT_MESSAGE("number of rendered pixel is not 50",
+ countPixel( rDevice, aCol ) == 100-50);
+
+ rDevice->clear(aCol);
+ rDevice->drawMaskedColor(
+ aCol2,
+ rBmp,
+ aSourceRect,
+ aDestRightTop );
+ CPPUNIT_ASSERT_MESSAGE("number of rendered pixel is not 25",
+ countPixel( rDevice, aCol ) == 100-25);
+
+ rDevice->clear(aCol);
+ rDevice->drawMaskedColor(
+ aCol2,
+ rBmp,
+ aSourceRect,
+ aDestLeftBottom );
+ CPPUNIT_ASSERT_MESSAGE("number of rendered pixel is not 25(b)",
+ countPixel( rDevice, aCol ) == 100-25);
+
+ rDevice->clear(aCol);
+ rDevice->drawMaskedColor(
+ aCol2,
+ rBmp,
+ aSourceRect,
+ aDestRightBottom );
+ CPPUNIT_ASSERT_MESSAGE("number of rendered pixel is not 25(c)",
+ countPixel( rDevice, aCol ) == 100-25);
+ }
+
+public:
+ void setUp()
+ {
+ const basegfx::B2ISize aSize(10,10);
+ mpDevice1bpp = createBitmapDevice( aSize,
+ true,
+ Format::ONE_BIT_MSB_PAL );
+ mpDevice32bpp = createBitmapDevice( aSize,
+ true,
+ Format::THIRTYTWO_BIT_TC_MASK );
+
+ mpMask = createBitmapDevice( aSize,
+ true,
+ Format::EIGHT_BIT_GREY );
+
+ ::rtl::OUString aSvg = ::rtl::OUString::createFromAscii(
+ "m 0 0h5v10h5v-5h-10z" );
+
+ basegfx::B2DPolyPolygon aPoly;
+ basegfx::tools::importFromSvgD( aPoly, aSvg );
+ const Color aCol(0xFF);
+ mpMask->fillPolyPolygon(
+ aPoly,
+ aCol,
+ DrawMode_PAINT );
+ }
+
+ void testMaskBasics()
+ {
+ implTestMaskBasics( mpDevice32bpp, mpMask );
+ implTestMaskBasics( mpDevice1bpp, mpMask );
+ }
+
+ void testMaskClip()
+ {
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(MaskTest);
+ CPPUNIT_TEST(testMaskBasics);
+ CPPUNIT_TEST(testMaskClip);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+// -----------------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION(MaskTest);
+}
+
+
+// -----------------------------------------------------------------------------
+
+// this macro creates an empty function, which will called by the RegisterAllFunctions()
+// to let the user the possibility to also register some functions by hand.
+//NOADDITIONAL;
+
diff --git a/basebmp/test/polytest.cxx b/basebmp/test/polytest.cxx
new file mode 100644
index 000000000000..f3b1f0018e17
--- /dev/null
+++ b/basebmp/test/polytest.cxx
@@ -0,0 +1,299 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// autogenerated file with codegen.pl
+
+#include "cppunit/TestAssert.h"
+#include "cppunit/TestFixture.h"
+#include "cppunit/extensions/HelperMacros.h"
+
+#include <basegfx/vector/b2isize.hxx>
+#include <basegfx/range/b2irange.hxx>
+#include <basegfx/point/b2ipoint.hxx>
+#include <basegfx/matrix/b2dhommatrix.hxx>
+#include <basegfx/polygon/b2dpolygon.hxx>
+#include <basegfx/polygon/b2dpolygontools.hxx>
+#include <basegfx/polygon/b2dpolypolygon.hxx>
+#include <basegfx/polygon/b2dpolypolygontools.hxx>
+
+#include <basebmp/color.hxx>
+#include <basebmp/scanlineformats.hxx>
+#include <basebmp/bitmapdevice.hxx>
+#include <basebmp/debug.hxx>
+#include "tools.hxx"
+
+#include <iostream>
+#include <fstream>
+
+using namespace ::basebmp;
+
+namespace
+{
+/*
+ std::ofstream output("32bpp_test.dump");
+ debugDump( rDevice, output );
+*/
+
+class PolyTest : public CppUnit::TestFixture
+{
+private:
+ BitmapDeviceSharedPtr mpDevice1bpp;
+ BitmapDeviceSharedPtr mpDevice32bpp;
+
+ void implTestEmpty(const BitmapDeviceSharedPtr& rDevice)
+ {
+ const Color aCol(0xFFFFFFFF);
+ const Color aBgCol(0);
+ rDevice->clear(aBgCol);
+ basegfx::B2DPolyPolygon aPoly;
+ ::rtl::OUString aSvg;
+
+ basegfx::tools::importFromSvgD(
+ aPoly,
+ rtl::OUString::createFromAscii(
+ "M2 2 l7 7 z" ) );
+ rDevice->fillPolyPolygon(
+ aPoly,
+ aCol,
+ DrawMode_PAINT );
+ CPPUNIT_ASSERT_MESSAGE("number of rendered pixel is not 0",
+ countPixel( rDevice, aCol ) == 0);
+
+ // --------------------------------------------------
+
+ rDevice->clear(aBgCol);
+ aPoly.clear();
+ basegfx::tools::importFromSvgD(
+ aPoly,
+ rtl::OUString::createFromAscii(
+ "M7 2 l-6 6 z" ) );
+ rDevice->fillPolyPolygon(
+ aPoly,
+ aCol,
+ DrawMode_PAINT );
+ CPPUNIT_ASSERT_MESSAGE("number of rendered pixel is not 0(b)",
+ countPixel( rDevice, aCol ) == 0);
+ }
+
+ void implTestHairline(const BitmapDeviceSharedPtr& rDevice)
+ {
+ const Color aCol(0xFFFFFFFF);
+ const Color aBgCol(0);
+ rDevice->clear(aBgCol);
+ basegfx::B2DPolyPolygon aPoly;
+ ::rtl::OUString aSvg;
+
+ basegfx::tools::importFromSvgD(
+ aPoly,
+ rtl::OUString::createFromAscii(
+ "M2 2 h1 l7 7 h-1 z" ) );
+ rDevice->fillPolyPolygon(
+ aPoly,
+ aCol,
+ DrawMode_PAINT );
+ CPPUNIT_ASSERT_MESSAGE("number of rendered pixel is not 7",
+ countPixel( rDevice, aCol ) == 7);
+
+ // --------------------------------------------------
+
+ rDevice->clear(aBgCol);
+ aPoly.clear();
+ basegfx::tools::importFromSvgD(
+ aPoly,
+ rtl::OUString::createFromAscii(
+ "M7 2 h-1 l-6 6 h1 z" ) );
+ rDevice->fillPolyPolygon(
+ aPoly,
+ aCol,
+ DrawMode_PAINT );
+ CPPUNIT_ASSERT_MESSAGE("number of rendered pixel is not 6",
+ countPixel( rDevice, aCol ) == 6);
+
+ // --------------------------------------------------
+
+ rDevice->clear(aBgCol);
+ aPoly.clear();
+ basegfx::tools::importFromSvgD(
+ aPoly,
+ rtl::OUString::createFromAscii(
+ "M0 0 l7 7 h-1 l-5-7 z" ) );
+ rDevice->fillPolyPolygon(
+ aPoly,
+ aCol,
+ DrawMode_PAINT );
+ CPPUNIT_ASSERT_MESSAGE("number of rendered pixel is not 3",
+ countPixel( rDevice, aCol ) == 3);
+ }
+
+ void implTestPolyPoly(const BitmapDeviceSharedPtr& rDevice)
+ {
+ const Color aCol(0xFFFFFFFF);
+ const Color aBgCol(0);
+ rDevice->clear(aBgCol);
+ basegfx::B2DPolyPolygon aPoly;
+ ::rtl::OUString aSvg;
+
+ basegfx::tools::importFromSvgD( aPoly,
+ ::rtl::OUString::createFromAscii(
+ "M0 0 h7 v7 h-7 z M2 2 v3 h3 v-3 z" ) );
+
+ rDevice->fillPolyPolygon(
+ aPoly,
+ aCol,
+ DrawMode_PAINT );
+ CPPUNIT_ASSERT_MESSAGE("number of rendered pixel is not 40",
+ countPixel( rDevice, aCol ) == 40);
+ }
+
+ void implTestPolyPolyClip(const BitmapDeviceSharedPtr& rDevice)
+ {
+ const Color aCol(0xFFFFFFFF);
+ const Color aBgCol(0);
+ rDevice->clear(aBgCol);
+ basegfx::B2DPolyPolygon aPoly;
+ ::rtl::OUString aSvg;
+
+ basegfx::tools::importFromSvgD( aPoly,
+ ::rtl::OUString::createFromAscii(
+ "M0 0 h7 v7 h-7 z M2 2 v3 h3 v-3 z" ) );
+ basegfx::B2DHomMatrix aMat;
+ aMat.translate(-3,-3);
+ aMat.rotate( 1.7 );
+ aMat.translate(6,5);
+ aPoly.transform(aMat);
+
+ rDevice->fillPolyPolygon(
+ aPoly,
+ aCol,
+ DrawMode_PAINT );
+
+ CPPUNIT_ASSERT_MESSAGE("number of rendered pixel is not 39",
+ countPixel( rDevice, aCol ) == 39);
+
+ BitmapDeviceSharedPtr pClippedDevice(
+ subsetBitmapDevice( rDevice,
+ basegfx::B2IRange(3,3,5,8) ));
+
+ rDevice->clear(aBgCol);
+ pClippedDevice->fillPolyPolygon(
+ aPoly,
+ aCol,
+ DrawMode_PAINT );
+ CPPUNIT_ASSERT_MESSAGE("number of rendered pixel is not 7",
+ countPixel( rDevice, aCol ) == 7);
+ }
+
+ void implTestPolyPolyCrissCross(const BitmapDeviceSharedPtr& rDevice)
+ {
+ const Color aCol(0xFFFFFFFF);
+ const Color aBgCol(0);
+ rDevice->clear(aBgCol);
+ basegfx::B2DPolyPolygon aPoly;
+ ::rtl::OUString aSvg;
+
+ basegfx::tools::importFromSvgD( aPoly,
+ ::rtl::OUString::createFromAscii(
+ "M0 0 v2 l10 2 v-2 z"
+ "M10 6 v-2 l-10 2 v2 z"
+ "M1 0 h1 v10 h-1 z"
+ "M4 0 h1 v10 h-1 z"
+ "M8 0 h1 v10 h-1 z" ) );
+ rDevice->fillPolyPolygon(
+ aPoly,
+ aCol,
+ DrawMode_PAINT );
+ CPPUNIT_ASSERT_MESSAGE("number of rendered pixel is not 46",
+ countPixel( rDevice, aCol ) == 46);
+ }
+
+
+public:
+ void setUp()
+ {
+ const basegfx::B2ISize aSize(10,10);
+ mpDevice1bpp = createBitmapDevice( aSize,
+ true,
+ Format::ONE_BIT_MSB_PAL );
+ mpDevice32bpp = createBitmapDevice( aSize,
+ true,
+ Format::THIRTYTWO_BIT_TC_MASK );
+ }
+
+ void testEmpty()
+ {
+ implTestEmpty( mpDevice1bpp );
+ implTestEmpty( mpDevice32bpp );
+ }
+
+ void testHairline()
+ {
+ implTestHairline( mpDevice1bpp );
+ implTestHairline( mpDevice32bpp );
+ }
+
+ void testPolyPoly()
+ {
+ implTestPolyPoly( mpDevice1bpp );
+ implTestPolyPoly( mpDevice32bpp );
+ }
+
+ void testPolyPolyClip()
+ {
+ implTestPolyPolyClip(mpDevice1bpp);
+ implTestPolyPolyClip(mpDevice32bpp);
+ }
+
+ void testPolyPolyCrissCross()
+ {
+ implTestPolyPolyCrissCross(mpDevice1bpp);
+ implTestPolyPolyCrissCross(mpDevice32bpp);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(PolyTest);
+ CPPUNIT_TEST(testEmpty);
+ CPPUNIT_TEST(testHairline);
+ CPPUNIT_TEST(testPolyPoly);
+ CPPUNIT_TEST(testPolyPolyClip);
+ CPPUNIT_TEST(testPolyPolyCrissCross);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+// -----------------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION(PolyTest);
+}
+
+
+// -----------------------------------------------------------------------------
+
+// this macro creates an empty function, which will called by the RegisterAllFunctions()
+// to let the user the possibility to also register some functions by hand.
+//NOADDITIONAL;
+
diff --git a/basebmp/test/tools.cxx b/basebmp/test/tools.cxx
new file mode 100644
index 000000000000..dbc11395d715
--- /dev/null
+++ b/basebmp/test/tools.cxx
@@ -0,0 +1,49 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// autogenerated file with codegen.pl
+
+#include <basegfx/vector/b2isize.hxx>
+#include <basegfx/point/b2ipoint.hxx>
+
+#include <basebmp/color.hxx>
+#include <basebmp/bitmapdevice.hxx>
+
+using namespace ::basebmp;
+
+int countPixel( const BitmapDeviceSharedPtr& rDevice,
+ Color checkColor )
+{
+ int count(0);
+ const basegfx::B2ISize& rSize( rDevice->getSize() );
+ for( sal_Int32 y=0; y<rSize.getY(); ++y )
+ for( sal_Int32 x=0; x<rSize.getX(); ++x )
+ if( rDevice->getPixel( basegfx::B2IPoint(x,y) ) == checkColor )
+ ++count;
+
+ return count;
+}
diff --git a/basebmp/test/tools.hxx b/basebmp/test/tools.hxx
new file mode 100644
index 000000000000..254a988fc1bb
--- /dev/null
+++ b/basebmp/test/tools.hxx
@@ -0,0 +1,31 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "basebmp/bitmapdevice.hxx"
+
+int countPixel( const basebmp::BitmapDeviceSharedPtr& rDevice,
+ basebmp::Color checkColor );
diff --git a/basebmp/util/basebmp.flt b/basebmp/util/basebmp.flt
new file mode 100644
index 000000000000..28a1dd1b65c6
--- /dev/null
+++ b/basebmp/util/basebmp.flt
@@ -0,0 +1,4 @@
+__CT
+Impl
+IMP
+internal \ No newline at end of file
diff --git a/basebmp/util/makefile.mk b/basebmp/util/makefile.mk
new file mode 100644
index 000000000000..bc86ebd6bac4
--- /dev/null
+++ b/basebmp/util/makefile.mk
@@ -0,0 +1,66 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..
+
+PRJNAME=basebmp
+TARGET=basebmp
+
+# --- Settings ---------------------------------------------------
+
+.INCLUDE : settings.mk
+
+# --- Allgemein ---------------------------------------------------
+
+LIB1TARGET=$(SLB)$/basebmp.lib
+LIB1FILES=\
+ $(SLB)$/wrapper.lib
+
+SHL1TARGET= basebmp$(DLLPOSTFIX)
+SHL1IMPLIB= ibasebmp
+
+SHL1STDLIBS=\
+ $(SALLIB) \
+ $(BASEGFXLIB)
+
+SHL1DEF= $(MISC)$/$(SHL1TARGET).def
+SHL1LIBS= $(SLB)$/basebmp.lib
+
+DEF1NAME =$(SHL1TARGET)
+DEF1DEPN =$(MISC)$/$(SHL1TARGET).flt \
+ $(LIB1TARGET)
+
+DEF1DES =BaseBMP
+DEFLIB1NAME =basebmp
+
+# --- Targets -----------------------------------------------------------
+
+.INCLUDE : target.mk
+
+$(MISC)$/$(SHL1TARGET).flt : makefile.mk
+ @$(TYPE) $(TARGET).flt > $@
+
diff --git a/basegfx/inc/basegfx/color/bcolor.hxx b/basegfx/inc/basegfx/color/bcolor.hxx
new file mode 100644
index 000000000000..db66dd8dbdee
--- /dev/null
+++ b/basegfx/inc/basegfx/color/bcolor.hxx
@@ -0,0 +1,237 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_COLOR_BCOLOR_HXX
+#define _BGFX_COLOR_BCOLOR_HXX
+
+#include <basegfx/tuple/b3dtuple.hxx>
+#include <com/sun/star/uno/Reference.hxx>
+#include <com/sun/star/uno/Sequence.hxx>
+#include <vector>
+
+//////////////////////////////////////////////////////////////////////////////
+// predeclarations
+
+namespace com { namespace sun { namespace star { namespace rendering {
+ class XGraphicDevice;
+}}}}
+
+//////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+ /** Base Color class with three double values
+
+ This class derives all operators and common handling for
+ a 3D data class from B3DTuple. All necessary extensions
+ which are special for colors will be added here.
+
+ @see B3DTuple
+ */
+ class BColor : public B3DTuple
+ {
+ public:
+ /** Create a Color with red, green and blue components from [0.0 to 1.0]
+
+ The color is initialized to (0.0, 0.0, 0.0)
+ */
+ BColor()
+ : B3DTuple()
+ {}
+
+ /** Create a 3D Color
+
+ @param fRed
+ @param fGreen
+ @param fBlue
+ These parameters are used to initialize the red, green and blue intensities of the color
+ */
+ BColor(double fRed, double fGreen, double fBlue)
+ : B3DTuple(fRed, fGreen, fBlue)
+ {}
+
+ /** Create a 3D Color
+
+ @param fLuminosity
+ The parameter is used to initialize the red, green and blue intensities of the color
+ */
+ BColor(double fLuminosity)
+ : B3DTuple(fLuminosity, fLuminosity, fLuminosity)
+ {}
+
+ /** Create a copy of a Color
+
+ @param rVec
+ The Color which will be copied.
+ */
+ BColor(const BColor& rVec)
+ : B3DTuple(rVec)
+ {}
+
+ /** constructor with tuple to allow copy-constructing
+ from B3DTuple-based classes
+ */
+ BColor(const ::basegfx::B3DTuple& rTuple)
+ : B3DTuple(rTuple)
+ {}
+
+ ~BColor()
+ {}
+
+ // data access read
+ double getRed() const { return mfX; }
+ double getGreen() const { return mfY; }
+ double getBlue() const { return mfZ; }
+
+ // data access write
+ void setRed(double fNew) { mfX = fNew; }
+ void setGreen(double fNew) { mfY = fNew; }
+ void setBlue(double fNew) { mfZ = fNew; }
+
+ /** *=operator to allow usage from BColor, too
+ */
+ BColor& operator*=( const BColor& rPnt )
+ {
+ mfX *= rPnt.mfX;
+ mfY *= rPnt.mfY;
+ mfZ *= rPnt.mfZ;
+ return *this;
+ }
+
+ /** *=operator to allow usage from BColor, too
+ */
+ BColor& operator*=(double t)
+ {
+ mfX *= t;
+ mfY *= t;
+ mfZ *= t;
+ return *this;
+ }
+
+ /** assignment operator to allow assigning the results
+ of B3DTuple calculations
+ */
+ BColor& operator=( const ::basegfx::B3DTuple& rVec )
+ {
+ mfX = rVec.getX();
+ mfY = rVec.getY();
+ mfZ = rVec.getZ();
+ return *this;
+ }
+
+ // blend to another color using luminance
+ void blend(const BColor& rColor)
+ {
+ const double fLuminance(luminance());
+ mfX = rColor.getRed() * fLuminance;
+ mfY = rColor.getGreen() * fLuminance;
+ mfZ = rColor.getBlue() * fLuminance;
+ }
+
+ // luminance
+ double luminance() const
+ {
+ const double fRedWeight(77.0 / 256.0);
+ const double fGreenWeight(151.0 / 256.0);
+ const double fBlueWeight(28.0 / 256.0);
+
+ return (mfX * fRedWeight + mfY * fGreenWeight + mfZ * fBlueWeight);
+ }
+
+ // distances in color space
+ double getDistanceRed(const BColor& rColor) const { return (getRed() > rColor.getRed() ? getRed() - rColor.getRed() : rColor.getRed() - getRed()); }
+ double getDistanceGreen(const BColor& rColor) const { return (getGreen() > rColor.getGreen() ? getGreen() - rColor.getGreen() : rColor.getGreen() - getGreen()); }
+ double getDistanceBlue(const BColor& rColor) const { return (getBlue() > rColor.getBlue() ? getBlue() - rColor.getBlue() : rColor.getBlue() - getBlue()); }
+
+ double getDistance(const BColor& rColor) const
+ {
+ const double fDistR(getDistanceRed(rColor));
+ const double fDistG(getDistanceGreen(rColor));
+ const double fDistB(getDistanceBlue(rColor));
+
+ return sqrt(fDistR * fDistR + fDistG * fDistG + fDistB * fDistB);
+ }
+
+ double getMinimumDistance(const BColor& rColor) const
+ {
+ const double fDistR(getDistanceRed(rColor));
+ const double fDistG(getDistanceGreen(rColor));
+ const double fDistB(getDistanceBlue(rColor));
+
+ double fRetval(fDistR < fDistG ? fDistR : fDistG);
+ return (fRetval < fDistB ? fRetval : fDistB);
+ }
+
+ double getMaximumDistance(const BColor& rColor) const
+ {
+ const double fDistR(getDistanceRed(rColor));
+ const double fDistG(getDistanceGreen(rColor));
+ const double fDistB(getDistanceBlue(rColor));
+
+ double fRetval(fDistR > fDistG ? fDistR : fDistG);
+ return (fRetval > fDistB ? fRetval : fDistB);
+ }
+
+ // clamp color to [0.0..1.0] values in all three intensity components
+ void clamp()
+ {
+ mfX = basegfx::clamp(mfX, 0.0, 1.0);
+ mfY = basegfx::clamp(mfY, 0.0, 1.0);
+ mfZ = basegfx::clamp(mfZ, 0.0, 1.0);
+ }
+
+ void invert()
+ {
+ mfX = 1.0 - mfX;
+ mfY = 1.0 - mfY;
+ mfZ = 1.0 - mfZ;
+ }
+
+ static const BColor& getEmptyBColor()
+ {
+ return (const BColor&) ::basegfx::B3DTuple::getEmptyTuple();
+ }
+
+ com::sun::star::uno::Sequence< double > colorToDoubleSequence(const com::sun::star::uno::Reference< com::sun::star::rendering::XGraphicDevice >& /*xGraphicDevice*/) const
+ {
+ com::sun::star::uno::Sequence< double > aRet(4);
+ double* pRet = aRet.getArray();
+
+ pRet[0] = mfX;
+ pRet[1] = mfY;
+ pRet[2] = mfZ;
+ pRet[3] = 1.0;
+
+ return aRet;
+ }
+ };
+} // end of namespace basegfx
+
+#endif /* _BGFX_COLOR_BCOLOR_HXX */
+
+//////////////////////////////////////////////////////////////////////////////
+// eof
diff --git a/basegfx/inc/basegfx/color/bcolormodifier.hxx b/basegfx/inc/basegfx/color/bcolormodifier.hxx
new file mode 100644
index 000000000000..962da760f850
--- /dev/null
+++ b/basegfx/inc/basegfx/color/bcolormodifier.hxx
@@ -0,0 +1,143 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_COLOR_BCOLORMODIFIER_HXX
+#define _BGFX_COLOR_BCOLORMODIFIER_HXX
+
+#include <basegfx/color/bcolor.hxx>
+#include <vector>
+
+//////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+ /** Descriptor for type of color modification
+ */
+ enum BColorModifyMode
+ {
+ BCOLORMODIFYMODE_REPLACE, // replace all color with local color
+ BCOLORMODIFYMODE_INTERPOLATE, // interpolate color between given and local with local value
+ BCOLORMODIFYMODE_GRAY, // convert color to gray
+ BCOLORMODIFYMODE_BLACKANDWHITE // convert color to B&W, local value is treshhold
+ };
+
+ /** Class to hold a color, value and mode for a color modification. Color modification is
+ done calling the getModifiedColor() method
+ */
+ class BColorModifier
+ {
+ protected:
+ ::basegfx::BColor maBColor;
+ double mfValue;
+ BColorModifyMode meMode;
+
+ public:
+ BColorModifier(
+ const ::basegfx::BColor& rBColor,
+ double fValue = 0.5,
+ BColorModifyMode eMode = BCOLORMODIFYMODE_REPLACE)
+ : maBColor(rBColor),
+ mfValue(fValue),
+ meMode(eMode)
+ {}
+
+ // compare operator(s)
+ bool operator==(const BColorModifier& rCompare) const
+ {
+ return (maBColor == rCompare.maBColor && mfValue == rCompare.mfValue && meMode == rCompare.meMode);
+ }
+
+ bool operator!=(const BColorModifier& rCompare) const
+ {
+ return !(operator==(rCompare));
+ }
+
+ // data access
+ const ::basegfx::BColor& getBColor() const { return maBColor; }
+ double getValue() const { return mfValue; }
+ BColorModifyMode getMode() const { return meMode; }
+
+ // compute modified color
+ ::basegfx::BColor getModifiedColor(const ::basegfx::BColor& aSourceColor) const;
+ };
+
+ /** Class to hold a stack of BColorModifiers and to get the modified color with
+ applying all existing entry changes
+ */
+ class BColorModifierStack
+ {
+ protected:
+ ::std::vector< BColorModifier > maBColorModifiers;
+
+ public:
+ sal_uInt32 count() const
+ {
+ return maBColorModifiers.size();
+ }
+
+ const BColorModifier& getBColorModifier(sal_uInt32 nIndex) const
+ {
+ OSL_ENSURE(nIndex < count(), "BColorModifierStack: Access out of range (!)");
+ return maBColorModifiers[nIndex];
+ }
+
+ ::basegfx::BColor getModifiedColor(const ::basegfx::BColor& rSource) const
+ {
+ if(count())
+ {
+ ::basegfx::BColor aRetval(rSource);
+ ::std::vector< BColorModifier >::const_iterator aEnd(maBColorModifiers.end());
+
+ while(aEnd != maBColorModifiers.begin())
+ {
+ aRetval = (--aEnd)->getModifiedColor(aRetval);
+ }
+
+ return aRetval;
+ }
+ else
+ {
+ return rSource;
+ }
+ }
+
+ void push(const BColorModifier& rNew)
+ {
+ maBColorModifiers.push_back(rNew);
+ }
+
+ void pop()
+ {
+ maBColorModifiers.pop_back();
+ }
+ };
+} // end of namespace basegfx
+
+#endif // _BGFX_COLOR_BCOLORMODIFIER_HXX
+
+//////////////////////////////////////////////////////////////////////////////
+// eof
diff --git a/basegfx/inc/basegfx/color/bcolortools.hxx b/basegfx/inc/basegfx/color/bcolortools.hxx
new file mode 100644
index 000000000000..9121b145afa7
--- /dev/null
+++ b/basegfx/inc/basegfx/color/bcolortools.hxx
@@ -0,0 +1,72 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_COLOR_BCOLORTOOLS_HXX
+#define _BGFX_COLOR_BCOLORTOOLS_HXX
+
+#include <sal/types.h>
+
+//////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+ class BColor;
+
+ namespace tools
+ {
+ /// Transform from RGB to HSL
+ BColor rgb2hsl(const BColor& rRGBColor);
+ /// Transform from HSL to RGB
+ BColor hsl2rgb(const BColor& rHSLColor);
+
+ /// Transform from RGB to HSV
+ BColor rgb2hsv(const BColor& rRGBColor);
+ /// Transform from HSV to RGB
+ BColor hsv2rgb(const BColor& rHSVColor);
+
+ /// Transform from R'G'B' to YIQ (NTSC color model - Y is used in monochrome mode)
+ BColor rgb2yiq(const BColor& rRGBColor);
+ /// Transform from YIQ to R'G'B' (NTSC color model - Y is used in monochrome mode)
+ BColor yiq2rgb(const BColor& rYIQColor);
+
+ /// Transform from R'G'B' to Y'PbPr (the [0,1]x[-.5,.5]x[-.5,.5] equivalent of Y'CbCr (which is scaled into 8bit))
+ BColor rgb2ypbpr(const BColor& rRGBColor);
+ /// Transform from Y'PbPr (the [0,1]x[-.5,.5]x[-.5,.5] equivalent of Y'CbCr (which is scaled into 8bit)) into R'G'B'
+ BColor ypbpr2rgb(const BColor& rYPbPrColor);
+
+ /// Transform from CIE XYZ into Rec. 709 RGB (D65 white point)
+ BColor ciexyz2rgb( const BColor& rXYZColor );
+ /// Transform from Rec. 709 RGB (D65 white point) into CIE XYZ
+ BColor rgb2ciexyz( const BColor& rRGBColor );
+
+ }
+} // end of namespace basegfx
+
+#endif /* _BGFX_COLOR_BCOLORTOOLS_HXX */
+
+//////////////////////////////////////////////////////////////////////////////
+// eof
diff --git a/basegfx/inc/basegfx/curve/b2dbeziertools.hxx b/basegfx/inc/basegfx/curve/b2dbeziertools.hxx
new file mode 100644
index 000000000000..3cc34fec5482
--- /dev/null
+++ b/basegfx/inc/basegfx/curve/b2dbeziertools.hxx
@@ -0,0 +1,63 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_CURVE_B2DBEZIERTOOLS_HXX
+#define _BGFX_CURVE_B2DBEZIERTOOLS_HXX
+
+#include <sal/types.h>
+#include <vector>
+
+//////////////////////////////////////////////////////////////////////////////
+// predefines
+
+namespace basegfx
+{
+ class B2DCubicBezier;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+ class B2DCubicBezierHelper
+ {
+ private:
+ ::std::vector< double > maLengthArray;
+ sal_uInt32 mnEdgeCount;
+
+ public:
+ B2DCubicBezierHelper(const B2DCubicBezier& rBase, sal_uInt32 nDivisions = 9);
+
+ double getLength() const { if(maLengthArray.size()) return maLengthArray[maLengthArray.size() - 1]; else return 0.0; }
+ double distanceToRelative(double fDistance) const;
+ double relativeToDistance(double fRelative) const;
+ };
+} // end of namespace basegfx
+
+//////////////////////////////////////////////////////////////////////////////
+
+#endif /* _BGFX_CURVE_B2DBEZIERTOOLS_HXX */
diff --git a/basegfx/inc/basegfx/curve/b2dcubicbezier.hxx b/basegfx/inc/basegfx/curve/b2dcubicbezier.hxx
new file mode 100644
index 000000000000..ea58a0a50b80
--- /dev/null
+++ b/basegfx/inc/basegfx/curve/b2dcubicbezier.hxx
@@ -0,0 +1,222 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_CURVE_B2DCUBICBEZIER_HXX
+#define _BGFX_CURVE_B2DCUBICBEZIER_HXX
+
+#include <basegfx/point/b2dpoint.hxx>
+#include <basegfx/range/b2drange.hxx>
+
+//////////////////////////////////////////////////////////////////////////////
+// predeclarations
+
+namespace basegfx
+{
+ class B2DPolygon;
+} // end of namespace basegfx
+
+//////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+ class B2DCubicBezier
+ {
+ B2DPoint maStartPoint;
+ B2DPoint maEndPoint;
+ B2DPoint maControlPointA;
+ B2DPoint maControlPointB;
+
+ public:
+ B2DCubicBezier();
+ B2DCubicBezier(const B2DCubicBezier& rBezier);
+ B2DCubicBezier(const B2DPoint& rStart, const B2DPoint& rEnd);
+ B2DCubicBezier(const B2DPoint& rStart, const B2DPoint& rControlPointA, const B2DPoint& rControlPointB, const B2DPoint& rEnd);
+ ~B2DCubicBezier();
+
+ // assignment operator
+ B2DCubicBezier& operator=(const B2DCubicBezier& rBezier);
+
+ // compare operators
+ bool operator==(const B2DCubicBezier& rBezier) const;
+ bool operator!=(const B2DCubicBezier& rBezier) const;
+ bool equal(const B2DCubicBezier& rBezier) const;
+
+ // test if vectors are used
+ bool isBezier() const;
+
+ // test if contained bezier is trivial and reset vectors accordingly
+ void testAndSolveTrivialBezier();
+
+ /** get length of edge
+
+ This method handles beziers and simple edges. For
+ beziers, the deviation describes the maximum allowed
+ deviation from the real edge length. The default
+ allows a deviation of 1% from the correct length.
+
+ For beziers, there is no direct way to get the length,
+ thus this method may subdivide the bezier edge and may
+ not be cheap.
+
+ @param fDeviation
+ The maximal allowed deviation between correct length
+ and bezier edge length
+
+ @return
+ The length of the edge
+ */
+ double getLength(double fDeviation = 0.01) const;
+
+ // get distance between start and end point
+ double getEdgeLength() const;
+
+ // get length of control polygon
+ double getControlPolygonLength() const;
+
+ // data interface
+ B2DPoint getStartPoint() const { return maStartPoint; }
+ void setStartPoint(const B2DPoint& rValue) { maStartPoint = rValue; }
+
+ B2DPoint getEndPoint() const { return maEndPoint; }
+ void setEndPoint(const B2DPoint& rValue) { maEndPoint = rValue; }
+
+ B2DPoint getControlPointA() const { return maControlPointA; }
+ void setControlPointA(const B2DPoint& rValue) { maControlPointA = rValue; }
+
+ B2DPoint getControlPointB() const { return maControlPointB; }
+ void setControlPointB(const B2DPoint& rValue) { maControlPointB = rValue; }
+
+ /** get the tangent in point t
+
+ This method handles all the exceptions, e.g. when control point
+ A is equal to start point and/or control point B is equal to end
+ point
+
+ @param t
+ The bezier index in the range [0.0 .. 1.0]. It will be truncated.
+
+ @return
+ The tangent vector in point t
+ */
+ B2DVector getTangent(double t) const;
+
+ /** adaptive subdivide by angle criteria
+ no start point is added, but all necessary created edges
+ and the end point
+ #i37443# allow the criteria to get unsharp in recursions
+ */
+ void adaptiveSubdivideByAngle(B2DPolygon& rTarget, double fAngleBound, bool bAllowUnsharpen) const;
+
+ /** #i37443# adaptive subdivide by nCount subdivisions
+ no start point is added, but all necessary created edges
+ and the end point
+ */
+ void adaptiveSubdivideByCount(B2DPolygon& rTarget, sal_uInt32 nCount) const;
+
+ /** Subdivide cubic bezier segment.
+
+ This function adaptively subdivides the bezier
+ segment into as much straight line segments as necessary,
+ such that the maximal orthogonal distance from any of the
+ segments to the true curve is less than the given error
+ value.
+ No start point is added, but all necessary created edges
+ and the end point
+
+ @param rPoly
+ Output polygon. The subdivided bezier segment is added to
+ this polygon via B2DPolygon::append().
+
+ @param rCurve
+ The cubic bezier curve to subdivide
+
+ @param fDistanceBound
+ Bound on the maximal distance of the approximation to the
+ true curve.
+ */
+ void adaptiveSubdivideByDistance(B2DPolygon& rTarget, double fDistanceBound) const;
+
+ // get point at given relative position
+ B2DPoint interpolatePoint(double t) const;
+
+ // calculate the smallest distance from given point to this cubic bezier segment
+ // and return the value. The relative position on the segment is returned in rCut.
+ double getSmallestDistancePointToBezierSegment(const B2DPoint& rTestPoint, double& rCut) const;
+
+ // do a split at position t and fill both resulting segments
+ void split(double t, B2DCubicBezier* pBezierA, B2DCubicBezier* pBezierB) const;
+
+ // extract snippet from fStart to fEnd from this bezier
+ B2DCubicBezier snippet(double fStart, double fEnd) const;
+
+ // get range including conrol points
+ B2DRange getRange() const;
+
+ /** Get the minimum extremum position t
+
+ @param rfResult
+ Will be changed and set to a eventually found split value which should be in the
+ range [0.0 .. 1.0]. It will be the smallest current extremum; there may be more
+
+ @return
+ Returns true if there was at least one extremum found
+ */
+ bool getMinimumExtremumPosition(double& rfResult) const;
+
+ /** Get all extremum pos of this segment
+
+ This method will calculate all extremum positions of the segment
+ and add them to rResults if they are in the range ]0.0 .. 1.0[
+
+ @param rResults
+ The vector of doubles where the results will be added. Evtl.
+ existing contents will be removed since an empty vector is a
+ necessary result to express that there are no extreme positions
+ anymore. Since there is an upper maximum of 4 values, it makes
+ sense to use reserve(4) at the vector as preparation.
+ */
+ void getAllExtremumPositions(::std::vector< double >& rResults) const;
+
+ /** Get optimum-split position on this segment
+
+ This method calculates the positions of all points of the segment
+ that have the maximimum distance to the corresponding line from
+ startpoint-endpoint. This helps to approximate the bezier curve
+ with a minimum number of line segments
+
+ @param fResults
+ Result positions are in the range ]0.0 .. 1.0[
+ Cubic beziers have at most two of these positions
+
+ @return
+ Returns the number of split positions found
+ */
+ int getMaxDistancePositions( double fResults[2]) const;
+ };
+} // end of namespace basegfx
+
+#endif /* _BGFX_CURVE_B2DCUBICBEZIER_HXX */
diff --git a/basegfx/inc/basegfx/curve/b2dquadraticbezier.hxx b/basegfx/inc/basegfx/curve/b2dquadraticbezier.hxx
new file mode 100644
index 000000000000..08cd6be59c78
--- /dev/null
+++ b/basegfx/inc/basegfx/curve/b2dquadraticbezier.hxx
@@ -0,0 +1,73 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_CURVE_B2DQUADRATICBEZIER_HXX
+#define _BGFX_CURVE_B2DQUADRATICBEZIER_HXX
+
+#include <basegfx/point/b2dpoint.hxx>
+
+//////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+ class B2DQuadraticBezier
+ {
+ ::basegfx::B2DPoint maStartPoint;
+ ::basegfx::B2DPoint maEndPoint;
+ ::basegfx::B2DPoint maControlPoint;
+
+ public:
+ B2DQuadraticBezier();
+ B2DQuadraticBezier(const B2DQuadraticBezier& rBezier);
+ B2DQuadraticBezier(const ::basegfx::B2DPoint& rStart, const ::basegfx::B2DPoint& rEnd);
+ B2DQuadraticBezier(const ::basegfx::B2DPoint& rStart,
+ const ::basegfx::B2DPoint& rControlPoint, const ::basegfx::B2DPoint& rEnd);
+ ~B2DQuadraticBezier();
+
+ // assignment operator
+ B2DQuadraticBezier& operator=(const B2DQuadraticBezier& rBezier);
+
+ // compare operators
+ bool operator==(const B2DQuadraticBezier& rBezier) const;
+ bool operator!=(const B2DQuadraticBezier& rBezier) const;
+
+ // test if control point is placed on the edge
+ bool isBezier() const;
+
+ // data interface
+ ::basegfx::B2DPoint getStartPoint() const { return maStartPoint; }
+ void setStartPoint(const ::basegfx::B2DPoint& rValue) { maStartPoint = rValue; }
+
+ ::basegfx::B2DPoint getEndPoint() const { return maEndPoint; }
+ void setEndPoint(const ::basegfx::B2DPoint& rValue) { maEndPoint = rValue; }
+
+ ::basegfx::B2DPoint getControlPoint() const { return maControlPoint; }
+ void setControlPoint(const ::basegfx::B2DPoint& rValue) { maControlPoint = rValue; }
+ };
+} // end of namespace basegfx
+
+#endif /* _BGFX_CURVE_B2DQUADRATICBEZIER_HXX */
diff --git a/basegfx/inc/basegfx/matrix/b2dhommatrix.hxx b/basegfx/inc/basegfx/matrix/b2dhommatrix.hxx
new file mode 100644
index 000000000000..910224897301
--- /dev/null
+++ b/basegfx/inc/basegfx/matrix/b2dhommatrix.hxx
@@ -0,0 +1,168 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_MATRIX_B2DHOMMATRIX_HXX
+#define _BGFX_MATRIX_B2DHOMMATRIX_HXX
+
+#include <sal/types.h>
+#include <o3tl/cow_wrapper.hxx>
+
+namespace basegfx
+{
+ class B2DTuple;
+ class Impl2DHomMatrix;
+
+ class B2DHomMatrix
+ {
+ public:
+ typedef o3tl::cow_wrapper< Impl2DHomMatrix > ImplType;
+
+ private:
+ ImplType mpImpl;
+
+ public:
+ B2DHomMatrix();
+ B2DHomMatrix(const B2DHomMatrix& rMat);
+ ~B2DHomMatrix();
+
+ /** constructor to allow setting all needed values for a 3x2 matrix at once. The
+ parameter f_0x1 e.g. is the same as using set(0, 1, f)
+ */
+ B2DHomMatrix(double f_0x0, double f_0x1, double f_0x2, double f_1x0, double f_1x1, double f_1x2);
+
+ /// unshare this matrix with all internally shared instances
+ void makeUnique();
+
+ double get(sal_uInt16 nRow, sal_uInt16 nColumn) const;
+ void set(sal_uInt16 nRow, sal_uInt16 nColumn, double fValue);
+
+ /** allow setting all needed values for a 3x2 matrix in one call. The
+ parameter f_0x1 e.g. is the same as using set(0, 1, f)
+ */
+ void set3x2(double f_0x0, double f_0x1, double f_0x2, double f_1x0, double f_1x1, double f_1x2);
+
+ // test if last line is default to see if last line needs to be
+ // involved in calculations
+ bool isLastLineDefault() const;
+
+ // Auf Einheitsmatrix zuruecksetzen
+ bool isIdentity() const;
+ void identity();
+
+ // Invertierung
+ bool isInvertible() const;
+ bool invert();
+
+ // Normalisierung
+ bool isNormalized() const;
+ void normalize();
+
+ // Determinante
+ double determinant() const;
+
+ // Trace
+ double trace() const;
+
+ // Transpose
+ void transpose();
+
+ // Rotation
+ void rotate(double fRadiant);
+
+ // Translation
+ void translate(double fX, double fY);
+
+ // Skalierung
+ void scale(double fX, double fY);
+
+ // Shearing-Matrices
+ void shearX(double fSx);
+ void shearY(double fSy);
+
+ // Addition, Subtraktion
+ B2DHomMatrix& operator+=(const B2DHomMatrix& rMat);
+ B2DHomMatrix& operator-=(const B2DHomMatrix& rMat);
+
+ // Vergleichsoperatoren
+ bool operator==(const B2DHomMatrix& rMat) const;
+ bool operator!=(const B2DHomMatrix& rMat) const;
+
+ // Multiplikation, Division mit Konstante
+ B2DHomMatrix& operator*=(double fValue);
+ B2DHomMatrix& operator/=(double fValue);
+
+ // Matritzenmultiplikation von links auf die lokale
+ B2DHomMatrix& operator*=(const B2DHomMatrix& rMat);
+
+ // assignment operator
+ B2DHomMatrix& operator=(const B2DHomMatrix& rMat);
+
+ // Help routine to decompose given homogen 3x3 matrix to components. A correction of
+ // the components is done to avoid inaccuracies.
+ // Zerlegung
+ bool decompose(B2DTuple& rScale, B2DTuple& rTranslate, double& rRotate, double& rShearX) const;
+ };
+
+ // Addition, Subtraktion
+ inline B2DHomMatrix operator+(const B2DHomMatrix& rMatA, const B2DHomMatrix& rMatB)
+ {
+ B2DHomMatrix aSum(rMatA);
+ aSum += rMatB;
+ return aSum;
+ }
+
+ inline B2DHomMatrix operator-(const B2DHomMatrix& rMatA, const B2DHomMatrix& rMatB)
+ {
+ B2DHomMatrix aDiv(rMatA);
+ aDiv -= rMatB;
+ return aDiv;
+ }
+
+ // Multiplikation, Division mit Konstante
+ inline B2DHomMatrix operator*(const B2DHomMatrix& rMat, double fValue)
+ {
+ B2DHomMatrix aNew(rMat);
+ aNew *= fValue;
+ return aNew;
+ }
+
+ inline B2DHomMatrix operator/(const B2DHomMatrix& rMat, double fValue)
+ {
+ B2DHomMatrix aNew(rMat);
+ aNew *= 1.0 / fValue;
+ return aNew;
+ }
+
+ inline B2DHomMatrix operator*(const B2DHomMatrix& rMatA, const B2DHomMatrix& rMatB)
+ {
+ B2DHomMatrix aMul(rMatB);
+ aMul *= rMatA;
+ return aMul;
+ }
+} // end of namespace basegfx
+
+#endif /* _BGFX_MATRIX_B2DHOMMATRIX_HXX */
diff --git a/basegfx/inc/basegfx/matrix/b2dhommatrixtools.hxx b/basegfx/inc/basegfx/matrix/b2dhommatrixtools.hxx
new file mode 100644
index 000000000000..7ce9e75c3058
--- /dev/null
+++ b/basegfx/inc/basegfx/matrix/b2dhommatrixtools.hxx
@@ -0,0 +1,234 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_MATRIX_B2DHOMMATRIXTOOLS_HXX
+#define _BGFX_MATRIX_B2DHOMMATRIXTOOLS_HXX
+
+#include <sal/types.h>
+#include <basegfx/matrix/b2dhommatrix.hxx>
+#include <basegfx/vector/b2dvector.hxx>
+
+namespace rtl { class OUString; }
+
+///////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+ namespace tools
+ {
+ /** If the rotation angle is an approximate multiple of pi/2,
+ force fSin/fCos to -1/0/1, to maintain orthogonality (which
+ might also be advantageous for the other cases, but: for
+ multiples of pi/2, the exact values _can_ be attained. It
+ would be largely unintuitive, if a 180 degrees rotation
+ would introduce slight roundoff errors, instead of exactly
+ mirroring the coordinate system)
+ */
+ void createSinCosOrthogonal(double& o_rSin, double& rCos, double fRadiant);
+
+ /** Tooling methods for on-the-fly matrix generation e.g. for inline
+ multiplications
+ */
+ B2DHomMatrix createScaleB2DHomMatrix(double fScaleX, double fScaleY);
+ B2DHomMatrix createShearXB2DHomMatrix(double fShearX);
+ B2DHomMatrix createShearYB2DHomMatrix(double fShearY);
+ B2DHomMatrix createRotateB2DHomMatrix(double fRadiant);
+ B2DHomMatrix createTranslateB2DHomMatrix(double fTranslateX, double fTranslateY);
+
+ /// inline versions for parameters as tuples
+ inline B2DHomMatrix createScaleB2DHomMatrix(const B2DTuple& rScale)
+ {
+ return createScaleB2DHomMatrix(rScale.getX(), rScale.getY());
+ }
+
+ inline B2DHomMatrix createTranslateB2DHomMatrix(const B2DTuple& rTranslate)
+ {
+ return createTranslateB2DHomMatrix(rTranslate.getX(), rTranslate.getY());
+ }
+
+ /** Tooling methods for faster completely combined matrix creation
+ when scale, shearX, rotation and translation needs to be done in
+ exactly that order. It's faster since it direcly calculates
+ each matrix value based on a symbolic calculation of the three
+ matrix multiplications.
+ Inline versions for parameters as tuples added, too.
+ */
+ B2DHomMatrix createScaleShearXRotateTranslateB2DHomMatrix(
+ double fScaleX, double fScaleY,
+ double fShearX,
+ double fRadiant,
+ double fTranslateX, double fTranslateY);
+ inline B2DHomMatrix createScaleShearXRotateTranslateB2DHomMatrix(
+ const B2DTuple& rScale,
+ double fShearX,
+ double fRadiant,
+ const B2DTuple& rTranslate)
+ {
+ return createScaleShearXRotateTranslateB2DHomMatrix(
+ rScale.getX(), rScale.getY(),
+ fShearX,
+ fRadiant,
+ rTranslate.getX(), rTranslate.getY());
+ }
+
+ B2DHomMatrix createShearXRotateTranslateB2DHomMatrix(
+ double fShearX,
+ double fRadiant,
+ double fTranslateX, double fTranslateY);
+ inline B2DHomMatrix createShearXRotateTranslateB2DHomMatrix(
+ double fShearX,
+ double fRadiant,
+ const B2DTuple& rTranslate)
+ {
+ return createShearXRotateTranslateB2DHomMatrix(
+ fShearX,
+ fRadiant,
+ rTranslate.getX(), rTranslate.getY());
+ }
+
+ B2DHomMatrix createScaleTranslateB2DHomMatrix(
+ double fScaleX, double fScaleY,
+ double fTranslateX, double fTranslateY);
+ inline B2DHomMatrix createScaleTranslateB2DHomMatrix(
+ const B2DTuple& rScale,
+ const B2DTuple& rTranslate)
+ {
+ return createScaleTranslateB2DHomMatrix(
+ rScale.getX(), rScale.getY(),
+ rTranslate.getX(), rTranslate.getY());
+ }
+
+ /// special for the often used case of rotation around a point
+ B2DHomMatrix createRotateAroundPoint(
+ double fPointX, double fPointY,
+ double fRadiant);
+ inline B2DHomMatrix createRotateAroundPoint(
+ const B2DTuple& rPoint,
+ double fRadiant)
+ {
+ return createRotateAroundPoint(
+ rPoint.getX(), rPoint.getY(),
+ fRadiant);
+ }
+
+ } // end of namespace tools
+} // end of namespace basegfx
+
+///////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+ namespace tools
+ {
+ class B2DHomMatrixBufferedDecompose
+ {
+ private:
+ B2DVector maScale;
+ B2DVector maTranslate;
+ double mfRotate;
+ double mfShearX;
+
+ public:
+ B2DHomMatrixBufferedDecompose(const B2DHomMatrix& rB2DHomMatrix)
+ : maScale(),
+ maTranslate(),
+ mfRotate(0.0),
+ mfShearX(0.0)
+ {
+ rB2DHomMatrix.decompose(maScale, maTranslate, mfRotate, mfShearX);
+ }
+
+ // data access
+ B2DHomMatrix getB2DHomMatrix() const
+ {
+ return createScaleShearXRotateTranslateB2DHomMatrix(
+ maScale, mfShearX, mfRotate, maTranslate);
+ }
+
+ const B2DVector& getScale() const { return maScale; }
+ const B2DVector& getTranslate() const { return maTranslate; }
+ double getRotate() const { return mfRotate; }
+ double getShearX() const { return mfShearX; }
+ };
+ } // end of namespace tools
+} // end of namespace basegfx
+
+///////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+ namespace tools
+ {
+ class B2DHomMatrixBufferedOnDemandDecompose
+ {
+ private:
+ B2DHomMatrix maB2DHomMatrix;
+ B2DVector maScale;
+ B2DVector maTranslate;
+ double mfRotate;
+ double mfShearX;
+
+ // bitfield
+ unsigned mbDecomposed : 1;
+
+ void impCheckDecompose()
+ {
+ if(!mbDecomposed)
+ {
+ maB2DHomMatrix.decompose(maScale, maTranslate, mfRotate, mfShearX);
+ mbDecomposed = true;
+ }
+ }
+
+ public:
+ B2DHomMatrixBufferedOnDemandDecompose(const B2DHomMatrix& rB2DHomMatrix)
+ : maB2DHomMatrix(rB2DHomMatrix),
+ maScale(),
+ maTranslate(),
+ mfRotate(0.0),
+ mfShearX(0.0),
+ mbDecomposed(false)
+ {
+ }
+
+ // data access
+ const B2DHomMatrix& getB2DHomMatrix() const { return maB2DHomMatrix; }
+ const B2DVector& getScale() const { const_cast< B2DHomMatrixBufferedOnDemandDecompose* >(this)->impCheckDecompose(); return maScale; }
+ const B2DVector& getTranslate() const { const_cast< B2DHomMatrixBufferedOnDemandDecompose* >(this)->impCheckDecompose(); return maTranslate; }
+ double getRotate() const { const_cast< B2DHomMatrixBufferedOnDemandDecompose* >(this)->impCheckDecompose(); return mfRotate; }
+ double getShearX() const { const_cast< B2DHomMatrixBufferedOnDemandDecompose* >(this)->impCheckDecompose(); return mfShearX; }
+ };
+ } // end of namespace tools
+
+ /// Returns a string with svg's "matrix(m00,m10,m01,m11,m02,m12)" representation
+ ::rtl::OUString exportToSvg( const B2DHomMatrix& rMatrix );
+
+} // end of namespace basegfx
+
+///////////////////////////////////////////////////////////////////////////////
+
+#endif /* _BGFX_MATRIX_B2DHOMMATRIXTOOLS_HXX */
diff --git a/basegfx/inc/basegfx/matrix/b3dhommatrix.hxx b/basegfx/inc/basegfx/matrix/b3dhommatrix.hxx
new file mode 100644
index 000000000000..bc35fcde321e
--- /dev/null
+++ b/basegfx/inc/basegfx/matrix/b3dhommatrix.hxx
@@ -0,0 +1,175 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_MATRIX_B3DHOMMATRIX_HXX
+#define _BGFX_MATRIX_B3DHOMMATRIX_HXX
+
+#include <sal/types.h>
+#include <basegfx/point/b3dpoint.hxx>
+#include <basegfx/vector/b3dvector.hxx>
+#include <o3tl/cow_wrapper.hxx>
+
+namespace basegfx
+{
+ class B3DTuple;
+ class Impl3DHomMatrix;
+
+ class B3DHomMatrix
+ {
+ public:
+ typedef o3tl::cow_wrapper< Impl3DHomMatrix > ImplType;
+
+ private:
+ ImplType mpImpl;
+
+ public:
+ B3DHomMatrix();
+ B3DHomMatrix(const B3DHomMatrix& rMat);
+ ~B3DHomMatrix();
+
+ /// unshare this matrix with all internally shared instances
+ void makeUnique();
+
+ double get(sal_uInt16 nRow, sal_uInt16 nColumn) const;
+ void set(sal_uInt16 nRow, sal_uInt16 nColumn, double fValue);
+
+ // test if last line is default to see if last line needs to be
+ // involved in calculations
+ bool isLastLineDefault() const;
+
+ bool isIdentity() const;
+ /// Reset to the identity matrix
+ void identity();
+
+ bool isInvertible() const;
+ /// Invert the matrix (if possible)
+ bool invert();
+
+ bool isNormalized() const;
+ /// Normalize (i.e. force w=1) the matrix
+ void normalize();
+
+ /// Calc the matrix determinant
+ double determinant() const;
+
+ /// Calc the matrix trace
+ double trace() const;
+
+ /// Transpose the matrix
+ void transpose();
+
+ /// Rotation
+ void rotate(double fAngleX,double fAngleY,double fAngleZ);
+
+ /// Translation
+ void translate(double fX, double fY, double fZ);
+
+ /// Scaling
+ void scale(double fX, double fY, double fZ);
+
+ // Shearing-Matrices
+ void shearXY(double fSx, double fSy);
+ void shearYZ(double fSy, double fSz);
+ void shearXZ(double fSx, double fSz);
+
+ // Projection matrices, used for converting between eye and
+ // clip coordinates
+ void frustum(double fLeft = -1.0, double fRight = 1.0,
+ double fBottom = -1.0, double fTop = 1.0,
+ double fNear = 0.001, double fFar = 1.0);
+
+ void ortho(double fLeft = -1.0, double fRight = 1.0,
+ double fBottom = -1.0, double fTop = 1.0,
+ double fNear = 0.0, double fFar = 1.0);
+
+ // build orientation matrix
+ void orientation(
+ B3DPoint aVRP = B3DPoint(0.0,0.0,1.0),
+ B3DVector aVPN = B3DVector(0.0,0.0,1.0),
+ B3DVector aVUV = B3DVector(0.0,1.0,0.0));
+
+ // addition, subtraction
+ B3DHomMatrix& operator+=(const B3DHomMatrix& rMat);
+ B3DHomMatrix& operator-=(const B3DHomMatrix& rMat);
+
+ // comparison
+ bool operator==(const B3DHomMatrix& rMat) const;
+ bool operator!=(const B3DHomMatrix& rMat) const;
+
+ // multiplication, division by constant value
+ B3DHomMatrix& operator*=(double fValue);
+ B3DHomMatrix& operator/=(double fValue);
+
+ // matrix multiplication (from the left)
+ B3DHomMatrix& operator*=(const B3DHomMatrix& rMat);
+
+ // assignment operator
+ B3DHomMatrix& operator=(const B3DHomMatrix& rMat);
+
+ // decomposition
+ bool decompose(B3DTuple& rScale, B3DTuple& rTranslate, B3DTuple& rRotate, B3DTuple& rShear) const;
+ };
+
+ // addition, subtraction
+ inline B3DHomMatrix operator+(const B3DHomMatrix& rMatA, const B3DHomMatrix& rMatB)
+ {
+ B3DHomMatrix aSum(rMatA);
+ aSum += rMatB;
+ return aSum;
+ }
+
+ inline B3DHomMatrix operator-(const B3DHomMatrix& rMatA, const B3DHomMatrix& rMatB)
+ {
+ B3DHomMatrix aDiv(rMatA);
+ aDiv -= rMatB;
+ return aDiv;
+ }
+
+ // multiplication, division by constant value
+ inline B3DHomMatrix operator*(const B3DHomMatrix& rMat, double fValue)
+ {
+ B3DHomMatrix aNew(rMat);
+ aNew *= fValue;
+ return aNew;
+ }
+
+ inline B3DHomMatrix operator/(const B3DHomMatrix& rMat, double fValue)
+ {
+ B3DHomMatrix aNew(rMat);
+ aNew *= 1.0 / fValue;
+ return aNew;
+ }
+
+ inline B3DHomMatrix operator*(const B3DHomMatrix& rMatA, const B3DHomMatrix& rMatB)
+ {
+ B3DHomMatrix aMul(rMatB);
+ aMul *= rMatA;
+ return aMul;
+ }
+} // end of namespace basegfx
+
+#endif /* _BGFX_MATRIX_B3DHOMMATRIX_HXX */
diff --git a/basegfx/inc/basegfx/numeric/ftools.hxx b/basegfx/inc/basegfx/numeric/ftools.hxx
new file mode 100644
index 000000000000..65a6566dae25
--- /dev/null
+++ b/basegfx/inc/basegfx/numeric/ftools.hxx
@@ -0,0 +1,203 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_NUMERIC_FTOOLS_HXX
+#define _BGFX_NUMERIC_FTOOLS_HXX
+
+#include <rtl/math.hxx>
+
+//////////////////////////////////////////////////////////////////////////////
+// standard PI defines from solar.h, but we do not want to link against tools
+
+#ifndef F_PI
+#define F_PI M_PI
+#endif
+#ifndef F_PI2
+#define F_PI2 M_PI_2
+#endif
+#ifndef F_PI4
+#define F_PI4 M_PI_4
+#endif
+#ifndef F_PI180
+#define F_PI180 (M_PI/180.0)
+#endif
+#ifndef F_PI1800
+#define F_PI1800 (M_PI/1800.0)
+#endif
+#ifndef F_PI18000
+#define F_PI18000 (M_PI/18000.0)
+#endif
+#ifndef F_2PI
+#define F_2PI (2.0*M_PI)
+#endif
+
+//////////////////////////////////////////////////////////////////////////////
+// fTools defines
+
+namespace basegfx
+{
+ /** Round double to nearest integer
+
+ @return the nearest integer
+ */
+ inline sal_Int32 fround( double fVal )
+ {
+ return fVal > 0.0 ? static_cast<sal_Int32>( fVal + .5 ) : -static_cast<sal_Int32>( -fVal + .5 );
+ }
+
+ /** Round double to nearest integer
+
+ @return the nearest 64 bit integer
+ */
+ inline sal_Int64 fround64( double fVal )
+ {
+ return fVal > 0.0 ? static_cast<sal_Int64>( fVal + .5 ) : -static_cast<sal_Int64>( -fVal + .5 );
+ }
+
+ /** Prune a small epsilon range around zero.
+
+ Use this method e.g. for calculating scale values. There, it
+ is usually advisable not to set a scaling to 0.0, because that
+ yields singular transformation matrices.
+
+ @param fVal
+ An arbitrary, but finite and valid number
+
+ @return either fVal, or a small value slightly above (when
+ fVal>0) or below (when fVal<0) zero.
+ */
+ inline double pruneScaleValue( double fVal )
+ {
+ // old version used ::std::min/max, but this collides if min is defined as preprocessor
+ // macro which is the case e.g with windows.h headers. The simplest way to avoid this is to
+ // just use the full comparison. I keep the original here, maybe there will be a better
+ // solution some day.
+ //
+ //return fVal < 0.0 ?
+ // (::std::min(fVal,-0.00001)) :
+ // (::std::max(fVal,0.00001));
+
+ if(fVal < 0.0)
+ return (fVal < -0.00001 ? fVal : -0.00001);
+ else
+ return (fVal > 0.00001 ? fVal : 0.00001);
+ }
+
+ /** clamp given value against given minimum and maximum values
+ */
+ template <class T> inline const T& clamp(const T& value, const T& minimum, const T& maximum)
+ {
+ if(value < minimum)
+ {
+ return minimum;
+ }
+ else if(value > maximum)
+ {
+ return maximum;
+ }
+ else
+ {
+ return value;
+ }
+ }
+
+ /** Convert value from degrees to radians
+ */
+ inline double deg2rad( double v )
+ {
+ // divide first, to get exact values for v being a multiple of
+ // 90 degrees
+ return v / 90.0 * M_PI_2;
+ }
+
+ /** Convert value radians to degrees
+ */
+ inline double rad2deg( double v )
+ {
+ // divide first, to get exact values for v being a multiple of
+ // pi/2
+ return v / M_PI_2 * 90.0;
+ }
+
+
+ class fTools
+ {
+ /// Threshold value for equalZero()
+ static double mfSmallValue;
+
+ public:
+ /// Get threshold value for equalZero and friends
+ static double getSmallValue() { return mfSmallValue; }
+ /// Set threshold value for equalZero and friends
+ static void setSmallValue(const double& rfNew) { mfSmallValue = rfNew; }
+
+ /// Compare against small value
+ static bool equalZero(const double& rfVal)
+ {
+ return (fabs(rfVal) <= getSmallValue());
+ }
+
+ /// Compare against given small value
+ static bool equalZero(const double& rfVal, const double& rfSmallValue)
+ {
+ return (fabs(rfVal) <= rfSmallValue);
+ }
+
+ static bool equal(const double& rfValA, const double& rfValB)
+ {
+ // changed to approxEqual usage for better numerical correctness
+ return rtl::math::approxEqual(rfValA, rfValB);
+ }
+
+ static bool equal(const double& rfValA, const double& rfValB, const double& rfSmallValue)
+ {
+ return (fabs(rfValA - rfValB) <= rfSmallValue);
+ }
+
+ static bool less(const double& rfValA, const double& rfValB)
+ {
+ return (rfValA < rfValB && !equal(rfValA, rfValB));
+ }
+
+ static bool lessOrEqual(const double& rfValA, const double& rfValB)
+ {
+ return (rfValA < rfValB || equal(rfValA, rfValB));
+ }
+
+ static bool more(const double& rfValA, const double& rfValB)
+ {
+ return (rfValA > rfValB && !equal(rfValA, rfValB));
+ }
+
+ static bool moreOrEqual(const double& rfValA, const double& rfValB)
+ {
+ return (rfValA > rfValB || equal(rfValA, rfValB));
+ }
+ };
+} // end of namespace basegfx
+
+#endif /* _BGFX_NUMERIC_FTOOLS_HXX */
diff --git a/basegfx/inc/basegfx/pixel/bpixel.hxx b/basegfx/inc/basegfx/pixel/bpixel.hxx
new file mode 100644
index 000000000000..2684ff44e5d6
--- /dev/null
+++ b/basegfx/inc/basegfx/pixel/bpixel.hxx
@@ -0,0 +1,222 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_PIXEL_BPIXEL_HXX
+#define _BGFX_PIXEL_BPIXEL_HXX
+
+#include <sal/types.h>
+#include <basegfx/numeric/ftools.hxx>
+#include <basegfx/color/bcolor.hxx>
+
+//////////////////////////////////////////////////////////////////////////////
+// predeclarations
+
+//////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+ class BPixel
+ {
+ protected:
+ union
+ {
+ struct
+ {
+ // bitfield
+ unsigned mnR : 8; // red intensity
+ unsigned mnG : 8; // green intensity
+ unsigned mnB : 8; // blue intensity
+ unsigned mnO : 8; // opacity, 0 == full transparence
+ } maRGBO;
+
+ struct
+ {
+ // bitfield
+ unsigned mnValue : 32; // all values
+ } maCombinedRGBO;
+ } maPixelUnion;
+
+ public:
+ BPixel()
+ {
+ maPixelUnion.maCombinedRGBO.mnValue = 0L;
+ }
+
+ // use explicit here to make sure everyone knows what he is doing. Values range from
+ // 0..255 integer here.
+ explicit BPixel(sal_uInt8 nRed, sal_uInt8 nGreen, sal_uInt8 nBlue, sal_uInt8 nOpacity)
+ {
+ maPixelUnion.maRGBO.mnR = nRed;
+ maPixelUnion.maRGBO.mnG = nGreen;
+ maPixelUnion.maRGBO.mnB = nBlue;
+ maPixelUnion.maRGBO.mnO = nOpacity;
+ }
+
+ // constructor from BColor which uses double precision color, so change it
+ // to local integer format. It will also be clamped here.
+ BPixel(const BColor& rColor, sal_uInt8 nOpacity)
+ {
+ maPixelUnion.maRGBO.mnR = sal_uInt8((rColor.getRed() * 255.0) + 0.5);
+ maPixelUnion.maRGBO.mnG = sal_uInt8((rColor.getGreen() * 255.0) + 0.5);
+ maPixelUnion.maRGBO.mnB = sal_uInt8((rColor.getBlue() * 255.0) + 0.5);
+ maPixelUnion.maRGBO.mnO = nOpacity;
+ }
+
+ // copy constructor
+ BPixel(const BPixel& rPixel)
+ {
+ maPixelUnion.maCombinedRGBO.mnValue = rPixel.maPixelUnion.maCombinedRGBO.mnValue;
+ }
+
+ ~BPixel()
+ {}
+
+ // assignment operator
+ BPixel& operator=( const BPixel& rPixel )
+ {
+ maPixelUnion.maCombinedRGBO.mnValue = rPixel.maPixelUnion.maCombinedRGBO.mnValue;
+ return *this;
+ }
+
+ // data access read
+ sal_uInt8 getRed() const { return maPixelUnion.maRGBO.mnR; }
+ sal_uInt8 getGreen() const { return maPixelUnion.maRGBO.mnG; }
+ sal_uInt8 getBlue() const { return maPixelUnion.maRGBO.mnB; }
+ sal_uInt8 getOpacity() const { return maPixelUnion.maRGBO.mnO; }
+ sal_uInt32 getRedGreenBlueOpacity() const { return maPixelUnion.maCombinedRGBO.mnValue; }
+
+ // data access write
+ void setRed(sal_uInt8 nNew) { maPixelUnion.maRGBO.mnR = nNew; }
+ void setGreen(sal_uInt8 nNew) { maPixelUnion.maRGBO.mnG = nNew; }
+ void setBlue(sal_uInt8 nNew) { maPixelUnion.maRGBO.mnB = nNew; }
+ void setOpacity(sal_uInt8 nNew) { maPixelUnion.maRGBO.mnO = nNew; }
+ void setRedGreenBlueOpacity(sal_uInt32 nRedGreenBlueOpacity) { maPixelUnion.maCombinedRGBO.mnValue = nRedGreenBlueOpacity; }
+ void setRedGreenBlue(sal_uInt8 nR, sal_uInt8 nG, sal_uInt8 nB) { maPixelUnion.maRGBO.mnR = nR; maPixelUnion.maRGBO.mnG = nG; maPixelUnion.maRGBO.mnB = nB; }
+
+ // comparators
+ bool isInvisible() const { return (0 == maPixelUnion.maRGBO.mnO); }
+ bool isVisible() const { return (0 != maPixelUnion.maRGBO.mnO); }
+ bool isEmpty() const { return isInvisible(); }
+ bool isUsed() const { return isVisible(); }
+
+ bool operator==( const BPixel& rPixel ) const
+ {
+ return (rPixel.maPixelUnion.maCombinedRGBO.mnValue == maPixelUnion.maCombinedRGBO.mnValue);
+ }
+
+ bool operator!=( const BPixel& rPixel ) const
+ {
+ return (rPixel.maPixelUnion.maCombinedRGBO.mnValue != maPixelUnion.maCombinedRGBO.mnValue);
+ }
+
+ // empty element
+ static const BPixel& getEmptyBPixel();
+ };
+
+ //////////////////////////////////////////////////////////////////////////
+ // external operators
+
+ inline BPixel minimum(const BPixel& rTupA, const BPixel& rTupB)
+ {
+ BPixel aMin(
+ (rTupB.getRed() < rTupA.getRed()) ? rTupB.getRed() : rTupA.getRed(),
+ (rTupB.getGreen() < rTupA.getGreen()) ? rTupB.getGreen() : rTupA.getGreen(),
+ (rTupB.getBlue() < rTupA.getBlue()) ? rTupB.getBlue() : rTupA.getBlue(),
+ (rTupB.getOpacity() < rTupA.getOpacity()) ? rTupB.getOpacity() : rTupA.getOpacity());
+ return aMin;
+ }
+
+ inline BPixel maximum(const BPixel& rTupA, const BPixel& rTupB)
+ {
+ BPixel aMax(
+ (rTupB.getRed() > rTupA.getRed()) ? rTupB.getRed() : rTupA.getRed(),
+ (rTupB.getGreen() > rTupA.getGreen()) ? rTupB.getGreen() : rTupA.getGreen(),
+ (rTupB.getBlue() > rTupA.getBlue()) ? rTupB.getBlue() : rTupA.getBlue(),
+ (rTupB.getOpacity() > rTupA.getOpacity()) ? rTupB.getOpacity() : rTupA.getOpacity());
+ return aMax;
+ }
+
+ inline BPixel interpolate(const BPixel& rOld1, const BPixel& rOld2, double t)
+ {
+ if(rOld1 == rOld2)
+ {
+ return rOld1;
+ }
+ else if(0.0 >= t)
+ {
+ return rOld1;
+ }
+ else if(1.0 <= t)
+ {
+ return rOld2;
+ }
+ else
+ {
+ const sal_uInt32 nFactor(fround(256.0 * t));
+ const sal_uInt32 nNegFac(256L - nFactor);
+ return BPixel(
+ (sal_uInt8)(((sal_uInt32)rOld1.getRed() * nNegFac + (sal_uInt32)rOld2.getRed() * nFactor) >> 8L),
+ (sal_uInt8)(((sal_uInt32)rOld1.getGreen() * nNegFac + (sal_uInt32)rOld2.getGreen() * nFactor) >> 8L),
+ (sal_uInt8)(((sal_uInt32)rOld1.getBlue() * nNegFac + (sal_uInt32)rOld2.getBlue() * nFactor) >> 8L),
+ (sal_uInt8)(((sal_uInt32)rOld1.getOpacity() * nNegFac + (sal_uInt32)rOld2.getOpacity() * nFactor) >> 8L));
+ }
+ }
+
+ inline BPixel average(const BPixel& rOld1, const BPixel& rOld2)
+ {
+ if(rOld1 == rOld2)
+ {
+ return rOld1;
+ }
+ else
+ {
+ return BPixel(
+ (sal_uInt8)(((sal_uInt32)rOld1.getRed() + (sal_uInt32)rOld2.getRed()) >> 1L),
+ (sal_uInt8)(((sal_uInt32)rOld1.getGreen() + (sal_uInt32)rOld2.getGreen()) >> 1L),
+ (sal_uInt8)(((sal_uInt32)rOld1.getBlue() + (sal_uInt32)rOld2.getBlue()) >> 1L),
+ (sal_uInt8)(((sal_uInt32)rOld1.getOpacity() + (sal_uInt32)rOld2.getOpacity()) >> 1L));
+ }
+ }
+
+ inline BPixel average(const BPixel& rOld1, const BPixel& rOld2, const BPixel& rOld3)
+ {
+ if(rOld1 == rOld2 && rOld2 == rOld3)
+ {
+ return rOld1;
+ }
+ else
+ {
+ return BPixel(
+ (sal_uInt8)(((sal_uInt32)rOld1.getRed() + (sal_uInt32)rOld2.getRed() + (sal_uInt32)rOld3.getRed()) / 3L),
+ (sal_uInt8)(((sal_uInt32)rOld1.getGreen() + (sal_uInt32)rOld2.getGreen() + (sal_uInt32)rOld3.getGreen()) / 3L),
+ (sal_uInt8)(((sal_uInt32)rOld1.getBlue() + (sal_uInt32)rOld2.getBlue() + (sal_uInt32)rOld3.getBlue()) / 3L),
+ (sal_uInt8)(((sal_uInt32)rOld1.getOpacity() + (sal_uInt32)rOld2.getOpacity() + (sal_uInt32)rOld3.getOpacity()) / 3L));
+ }
+ }
+} // end of namespace basegfx
+
+#endif /* _BGFX_PIXEL_BPIXEL_HXX */
diff --git a/basegfx/inc/basegfx/point/b2dhompoint.hxx b/basegfx/inc/basegfx/point/b2dhompoint.hxx
new file mode 100644
index 000000000000..254ee9251dd3
--- /dev/null
+++ b/basegfx/inc/basegfx/point/b2dhompoint.hxx
@@ -0,0 +1,235 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_POINT_B2DHOMPOINT_HXX
+#define _BGFX_POINT_B2DHOMPOINT_HXX
+
+#include <basegfx/point/b2dpoint.hxx>
+
+namespace basegfx
+{
+ /** Basic homogen Point class with two double values and one homogen factor
+
+ This class provides access to homogen coordinates in 2D.
+ For this purpose all the operators which need to do specific
+ action due to their homogenity are implemented here.
+ The only caveat are member methods which are declared as const
+ but do change the content. These are documented for that reason.
+ The class is designed to provide homogenous coordinates without
+ direct access to the homogen part (mfW). This is also the reason
+ for leaving out the [] operators which return references to members.
+
+ @see B2DTuple
+ */
+ class B2DHomPoint
+ {
+ protected:
+ /// This member contains the coordinate part of the point
+ ::basegfx::B2DTuple maTuple;
+
+ /// This Member holds the homogenous part of the point
+ double mfW;
+
+ /** Test if this homogen point does have a homogenous part
+
+ @return Returns true if this point has no homogenous part
+ */
+ bool implIsHomogenized() const;
+
+ /** Remove homogenous part of this Point
+
+ This method does necessary calculations to remove
+ the evtl. homogenous part of this Point. This may
+ change all members.
+ */
+ void implHomogenize();
+
+ /** Test and on demand remove homogenous part
+
+ This method tests if this Point does have a homogenous part
+ and then evtl. takes actions to remove that part.
+
+ @attention Even when this method is const it may change all
+ members of this instance. This is due to the fact that changing
+ the homogenous part of a homogenous point does from a mathematical
+ point of view not change the point at all.
+ */
+ void implTestAndHomogenize() const;
+
+ public:
+ /** Create a homogen point
+
+ The point is initialized to (0.0, 0.0)
+ */
+ B2DHomPoint()
+ : maTuple(),
+ mfW(1.0)
+ {}
+
+ /** Create a homogen point
+
+ @param fX
+ This parameter is used to initialize the X-coordinate
+ of the Point. The homogenous part is initialized to 1.0.
+
+ @param fY
+ This parameter is used to initialize the Y-coordinate
+ of the Point. The homogenous part is initialized to 1.0.
+ */
+ B2DHomPoint(double fX, double fY)
+ : maTuple(fX, fY),
+ mfW(1.0)
+ {}
+
+ /** Create a copy of a 2D Point
+
+ @param rVec
+ The 2D point which will be copied. The homogenous part
+ is initialized to 1.0.
+ */
+ B2DHomPoint(const B2DPoint& rVec)
+ : maTuple(rVec),
+ mfW(1.0)
+ {}
+
+ /** Create a copy of a homogen point
+
+ @param rVec
+ The homogen point which will be copied. The homogenous part
+ is copied, too.
+ */
+ B2DHomPoint(const B2DHomPoint& rVec)
+ : maTuple(rVec.maTuple.getX(), rVec.maTuple.getY()),
+ mfW(rVec.mfW)
+ {}
+
+ ~B2DHomPoint()
+ {}
+
+ /** Get a 2D point from this homogenous point
+
+ This method normalizes this homogen point if necessary and
+ returns the corresponding 2D point for this homogen point.
+
+ @attention Even when this method is const it may change all
+ members of this instance.
+ */
+ B2DPoint getB2DPoint() const;
+
+ /** Get X-coordinate
+
+ This method normalizes this homogen point if necessary and
+ returns the corresponding X-coordinate for this homogen point.
+
+ @attention Even when this method is const it may change all
+ members of this instance.
+ */
+ double getX() const;
+
+ /** Get Y-coordinate
+
+ This method normalizes this homogen point if necessary and
+ returns the corresponding Y-coordinate for this homogen point.
+
+ @attention Even when this method is const it may change all
+ members of this instance.
+ */
+ double getY() const;
+
+ /** Set X-coordinate of the homogen point.
+
+ This method sets the X-coordinate of the homogen point. If
+ the point does have a homogenous part this is taken into account.
+
+ @param fX
+ The to-be-set X-coordinate without homogenous part.
+ */
+ void setX(double fX);
+
+ /** Set Y-coordinate of the homogen point.
+
+ This method sets the Y-coordinate of the homogen point. If
+ the point does have a homogenous part this is taken into account.
+
+ @param fY
+ The to-be-set Y-coordinate without homogenous part.
+ */
+ void setY(double fY);
+
+ // operators
+ //////////////////////////////////////////////////////////////////////
+
+ B2DHomPoint& operator+=( const B2DHomPoint& rPnt );
+
+ B2DHomPoint& operator-=( const B2DHomPoint& rPnt );
+
+ B2DHomPoint& operator*=(double t);
+
+ B2DHomPoint& operator*=( const B2DHomMatrix& rMat );
+
+ B2DHomPoint& operator/=(double t);
+
+ B2DHomPoint& operator-(void);
+
+ bool operator==( const B2DHomPoint& rPnt ) const;
+
+ bool operator!=( const B2DHomPoint& rPnt ) const;
+
+ B2DHomPoint& operator=( const B2DHomPoint& rPnt );
+ };
+
+ // external operators
+ //////////////////////////////////////////////////////////////////////////
+
+ B2DHomPoint minimum(const B2DHomPoint& rVecA, const B2DHomPoint& rVecB);
+
+ B2DHomPoint maximum(const B2DHomPoint& rVecA, const B2DHomPoint& rVecB);
+
+ B2DHomPoint absolute(const B2DHomPoint& rVec);
+
+ B2DHomPoint interpolate(B2DHomPoint& rOld1, B2DHomPoint& rOld2, double t);
+
+ B2DHomPoint average(B2DHomPoint& rOld1, B2DHomPoint& rOld2);
+
+ B2DHomPoint average(B2DHomPoint& rOld1, B2DHomPoint& rOld2, B2DHomPoint& rOld3);
+
+ B2DHomPoint operator+(const B2DHomPoint& rVecA, const B2DHomPoint& rVecB);
+
+ B2DHomPoint operator-(const B2DHomPoint& rVecA, const B2DHomPoint& rVecB);
+
+ B2DHomPoint operator*(const B2DHomPoint& rVec, double t);
+
+ B2DHomPoint operator*(double t, const B2DHomPoint& rVec);
+
+ B2DHomPoint operator*( const B2DHomMatrix& rMat, const B2DHomPoint& rPoint );
+
+ B2DHomPoint operator/(const B2DHomPoint& rVec, double t);
+
+ B2DHomPoint operator/(double t, const B2DHomPoint& rVec);
+} // end of namespace basegfx
+
+#endif /* _BGFX_POINT_B2DHOMPOINT_HXX */
diff --git a/basegfx/inc/basegfx/point/b2dpoint.hxx b/basegfx/inc/basegfx/point/b2dpoint.hxx
new file mode 100644
index 000000000000..273a1c54e3ba
--- /dev/null
+++ b/basegfx/inc/basegfx/point/b2dpoint.hxx
@@ -0,0 +1,151 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_POINT_B2DPOINT_HXX
+#define _BGFX_POINT_B2DPOINT_HXX
+
+#include <basegfx/tuple/b2dtuple.hxx>
+#include <basegfx/point/b2ipoint.hxx>
+
+//////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+ // predeclaration
+ class B2DHomMatrix;
+
+ /** Base Point class with two double values
+
+ This class derives all operators and common handling for
+ a 2D data class from B2DTuple. All necessary extensions
+ which are special for points will be added here.
+
+ @see B2DTuple
+ */
+ class B2DPoint : public ::basegfx::B2DTuple
+ {
+ public:
+ /** Create a 2D Point
+
+ The point is initialized to (0.0, 0.0)
+ */
+ B2DPoint()
+ : B2DTuple()
+ {}
+
+ /** Create a 2D Point
+
+ @param fX
+ This parameter is used to initialize the X-coordinate
+ of the 2D Point.
+
+ @param fY
+ This parameter is used to initialize the Y-coordinate
+ of the 2D Point.
+ */
+ B2DPoint(double fX, double fY)
+ : B2DTuple(fX, fY)
+ {}
+
+ /** Create a copy of a 2D Point
+
+ @param rPoint
+ The 2D Point which will be copied.
+ */
+ B2DPoint(const B2DPoint& rPoint)
+ : B2DTuple(rPoint)
+ {}
+
+ /** Create a copy of a 2D Point
+
+ @param rPoint
+ The 2D Point which will be copied.
+ */
+ B2DPoint(const ::basegfx::B2IPoint& rPoint)
+ : B2DTuple(rPoint)
+ {}
+
+ /** constructor with tuple to allow copy-constructing
+ from B2DTuple-based classes
+ */
+ B2DPoint(const ::basegfx::B2DTuple& rTuple)
+ : B2DTuple(rTuple)
+ {}
+
+ ~B2DPoint()
+ {}
+
+ /** *=operator to allow usage from B2DPoint, too
+ */
+ B2DPoint& operator*=( const B2DPoint& rPnt )
+ {
+ mfX *= rPnt.mfX;
+ mfY *= rPnt.mfY;
+ return *this;
+ }
+
+ /** *=operator to allow usage from B2DPoint, too
+ */
+ B2DPoint& operator*=(double t)
+ {
+ mfX *= t;
+ mfY *= t;
+ return *this;
+ }
+
+ /** assignment operator to allow assigning the results
+ of B2DTuple calculations
+ */
+ B2DPoint& operator=( const ::basegfx::B2DTuple& rPoint );
+
+ /** Transform point by given transformation matrix.
+
+ The translational components of the matrix are, in
+ contrast to B2DVector, applied.
+ */
+ B2DPoint& operator*=( const ::basegfx::B2DHomMatrix& rMat );
+
+ static const B2DPoint& getEmptyPoint()
+ {
+ return (const B2DPoint&) ::basegfx::B2DTuple::getEmptyTuple();
+ }
+ };
+
+ // external operators
+ //////////////////////////////////////////////////////////////////////////
+
+ /** Transform B2DPoint by given transformation matrix.
+
+ Since this is a Point, translational components of the
+ matrix are used.
+ */
+ B2DPoint operator*( const B2DHomMatrix& rMat, const B2DPoint& rPoint );
+} // end of namespace basegfx
+
+//////////////////////////////////////////////////////////////////////////////
+
+#endif /* _BGFX_POINT_B2DPOINT_HXX */
diff --git a/basegfx/inc/basegfx/point/b2ipoint.hxx b/basegfx/inc/basegfx/point/b2ipoint.hxx
new file mode 100644
index 000000000000..dec51735de7c
--- /dev/null
+++ b/basegfx/inc/basegfx/point/b2ipoint.hxx
@@ -0,0 +1,127 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_POINT_B2IPOINT_HXX
+#define _BGFX_POINT_B2IPOINT_HXX
+
+#include <basegfx/tuple/b2ituple.hxx>
+
+namespace basegfx
+{
+ // predeclaration
+ class B2DHomMatrix;
+
+ /** Base Point class with two sal_Int32 values
+
+ This class derives all operators and common handling for
+ a 2D data class from B2ITuple. All necessary extensions
+ which are special for points will be added here.
+
+ @see B2ITuple
+ */
+ class B2IPoint : public ::basegfx::B2ITuple
+ {
+ public:
+ /** Create a 2D Point
+
+ The point is initialized to (0, 0)
+ */
+ B2IPoint()
+ : B2ITuple()
+ {}
+
+ /** Create a 2D Point
+
+ @param nX
+ This parameter is used to initialize the X-coordinate
+ of the 2D Point.
+
+ @param nY
+ This parameter is used to initialize the Y-coordinate
+ of the 2D Point.
+ */
+ B2IPoint(sal_Int32 nX, sal_Int32 nY)
+ : B2ITuple(nX, nY)
+ {}
+
+ /** Create a copy of a 2D Point
+
+ @param rPoint
+ The 2D Point which will be copied.
+ */
+ B2IPoint(const B2IPoint& rPoint)
+ : B2ITuple(rPoint)
+ {}
+
+ /** constructor with tuple to allow copy-constructing
+ from B2ITuple-based classes
+ */
+ B2IPoint(const ::basegfx::B2ITuple& rTuple)
+ : B2ITuple(rTuple)
+ {}
+
+ ~B2IPoint()
+ {}
+
+ /** *=operator to allow usage from B2IPoint, too
+ */
+ B2IPoint& operator*=( const B2IPoint& rPnt )
+ {
+ mnX *= rPnt.mnX;
+ mnY *= rPnt.mnY;
+ return *this;
+ }
+
+ /** *=operator to allow usage from B2IPoint, too
+ */
+ B2IPoint& operator*=(sal_Int32 t)
+ {
+ mnX *= t;
+ mnY *= t;
+ return *this;
+ }
+
+ /** assignment operator to allow assigning the results
+ of B2ITuple calculations
+ */
+ B2IPoint& operator=( const ::basegfx::B2ITuple& rPoint );
+
+ /** Transform point by given transformation matrix.
+
+ The translational components of the matrix are, in
+ contrast to B2DVector, applied.
+ */
+ B2IPoint& operator*=( const ::basegfx::B2DHomMatrix& rMat );
+
+ static const B2IPoint& getEmptyPoint()
+ {
+ return (const B2IPoint&) ::basegfx::B2ITuple::getEmptyTuple();
+ }
+ };
+} // end of namespace basegfx
+
+#endif /* _BGFX_POINT_B2IPOINT_HXX */
diff --git a/basegfx/inc/basegfx/point/b3dhompoint.hxx b/basegfx/inc/basegfx/point/b3dhompoint.hxx
new file mode 100644
index 000000000000..7417d7528d16
--- /dev/null
+++ b/basegfx/inc/basegfx/point/b3dhompoint.hxx
@@ -0,0 +1,405 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_POINT_B3DHOMPOINT_HXX
+#define _BGFX_POINT_B3DHOMPOINT_HXX
+
+#include <basegfx/point/b3dpoint.hxx>
+
+namespace basegfx
+{
+ /** Basic homogen Point class with three double values and one homogen factor
+
+ This class provides access to homogen coordinates in 3D.
+ For this purpose all the operators which need to do specific
+ action due to their homogenity are implemented here.
+ The only caveat are member methods which are declared as const
+ but do change the content. These are documented for that reason.
+ The class is designed to provide homogenous coordinates without
+ direct access to the homogen part (mfW). This is also the reason
+ for leaving out the [] operators which return references to members.
+
+ @see B3DTuple
+ */
+ class B3DHomPoint
+ {
+ protected:
+ /// This member contains the coordinate part of the point
+ ::basegfx::B3DTuple maTuple;
+
+ /// This Member holds the homogenous part of the point
+ double mfW;
+
+ /** Test if this homogen point does have a homogenous part
+
+ @return Returns true if this point has no homogenous part
+ */
+ bool implIsHomogenized() const
+ {
+ const double fOne(1.0);
+ return ::basegfx::fTools::equal(mfW, fOne);
+ }
+
+ /** Remove homogenous part of this Point
+
+ This method does necessary calculations to remove
+ the evtl. homogenous part of this Point. This may
+ change all members.
+ */
+ void implHomogenize();
+
+ /** Test and on demand remove homogenous part
+
+ This method tests if this Point does have a homogenous part
+ and then evtl. takes actions to remove that part.
+
+ @attention Even when this method is const it may change all
+ members of this instance. This is due to the fact that changing
+ the homogenous part of a homogenous point does from a mathematical
+ point of view not change the point at all.
+ */
+ void implTestAndHomogenize() const
+ {
+ if(!implIsHomogenized())
+ ((B3DHomPoint*)this)->implHomogenize();
+ }
+
+ public:
+ /** Create a homogen point
+
+ The point is initialized to (0.0, 0.0, 0.0)
+ */
+ B3DHomPoint()
+ : maTuple(),
+ mfW(1.0)
+ {}
+
+ /** Create a homogen point
+
+ @param fX
+ This parameter is used to initialize the X-coordinate
+ of the Point. The homogenous part is initialized to 1.0.
+
+ @param fY
+ This parameter is used to initialize the Y-coordinate
+ of the Point. The homogenous part is initialized to 1.0.
+
+ @param fZ
+ This parameter is used to initialize the Z-coordinate
+ of the Point. The homogenous part is initialized to 1.0.
+ */
+ B3DHomPoint(double fX, double fY, double fZ)
+ : maTuple(fX, fY, fZ),
+ mfW(1.0)
+ {}
+
+ /** Create a copy of a 3D Point
+
+ @param rVec
+ The 3D point which will be copied. The homogenous part
+ is initialized to 1.0.
+ */
+ B3DHomPoint(const B3DPoint& rVec)
+ : maTuple(rVec),
+ mfW(1.0)
+ {}
+
+ /** Create a copy of a homogen point
+
+ @param rVec
+ The homogen point which will be copied. The homogenous part
+ is copied, too.
+ */
+ B3DHomPoint(const B3DHomPoint& rVec)
+ : maTuple(rVec.maTuple.getX(), rVec.maTuple.getY(), rVec.maTuple.getZ()),
+ mfW(rVec.mfW)
+ {}
+
+ ~B3DHomPoint()
+ {}
+
+ /** get a 3D point from this homogenous point
+
+ This method normalizes this homogen point if necessary and
+ returns the corresponding 3D point for this homogen point.
+
+ @attention Even when this method is const it may change all
+ members of this instance.
+ */
+ B3DPoint getB3DPoint() const
+ {
+ implTestAndHomogenize();
+ return B3DPoint(maTuple.getX(), maTuple.getY(), maTuple.getZ());
+ }
+
+ /** get X-coordinate
+
+ This method normalizes this homogen point if necessary and
+ returns the corresponding X-coordinate for this homogen point.
+
+ @attention Even when this method is const it may change all
+ members of this instance.
+ */
+ double getX() const
+ {
+ implTestAndHomogenize();
+ return maTuple.getX();
+ }
+
+ /** get Y-coordinate
+
+ This method normalizes this homogen point if necessary and
+ returns the corresponding Y-coordinate for this homogen point.
+
+ @attention Even when this method is const it may change all
+ members of this instance.
+ */
+ double getY() const
+ {
+ implTestAndHomogenize();
+ return maTuple.getY();
+ }
+
+ /** get Z-coordinate
+
+ This method normalizes this homogen point if necessary and
+ returns the corresponding Z-coordinate for this homogen point.
+
+ @attention Even when this method is const it may change all
+ members of this instance.
+ */
+ double getZ() const
+ {
+ implTestAndHomogenize();
+ return maTuple.getY();
+ }
+
+ /** Set X-coordinate of the homogen point.
+
+ This method sets the X-coordinate of the homogen point. If
+ the point does have a homogenous part this is taken into account.
+
+ @param fX
+ The to-be-set X-coordinate without homogenous part.
+ */
+ void setX(double fX)
+ {
+ maTuple.setX(implIsHomogenized() ? fX : fX * mfW );
+ }
+
+ /** Set Y-coordinate of the homogen point.
+
+ This method sets the Y-coordinate of the homogen point. If
+ the point does have a homogenous part this is taken into account.
+
+ @param fY
+ The to-be-set Y-coordinate without homogenous part.
+ */
+ void setY(double fY)
+ {
+ maTuple.setY(implIsHomogenized() ? fY : fY * mfW );
+ }
+
+ /** Set Z-coordinate of the homogen point.
+
+ This method sets the Z-coordinate of the homogen point. If
+ the point does have a homogenous part this is taken into account.
+
+ @param fZ
+ The to-be-set Z-coordinate without homogenous part.
+ */
+ void setZ(double fZ)
+ {
+ maTuple.setZ(implIsHomogenized() ? fZ : fZ * mfW );
+ }
+
+ // operators
+ //////////////////////////////////////////////////////////////////////
+
+ B3DHomPoint& operator+=( const B3DHomPoint& rPnt )
+ {
+ maTuple.setX(getX() * rPnt.mfW + rPnt.getX() * mfW);
+ maTuple.setY(getY() * rPnt.mfW + rPnt.getY() * mfW);
+ maTuple.setZ(getZ() * rPnt.mfW + rPnt.getZ() * mfW);
+ mfW = mfW * rPnt.mfW;
+
+ return *this;
+ }
+
+ B3DHomPoint& operator-=( const B3DHomPoint& rPnt )
+ {
+ maTuple.setX(getX() * rPnt.mfW - rPnt.getX() * mfW);
+ maTuple.setY(getY() * rPnt.mfW - rPnt.getY() * mfW);
+ maTuple.setZ(getZ() * rPnt.mfW - rPnt.getZ() * mfW);
+ mfW = mfW * rPnt.mfW;
+
+ return *this;
+ }
+
+ B3DHomPoint& operator*=(double t)
+ {
+ if(!::basegfx::fTools::equalZero(t))
+ {
+ mfW /= t;
+ }
+
+ return *this;
+ }
+
+ B3DHomPoint& operator/=(double t)
+ {
+ mfW *= t;
+ return *this;
+ }
+
+ B3DHomPoint& operator-(void)
+ {
+ mfW = -mfW;
+ return *this;
+ }
+
+ bool operator==( const B3DHomPoint& rPnt ) const
+ {
+ implTestAndHomogenize();
+ return (maTuple == rPnt.maTuple);
+ }
+
+ bool operator!=( const B3DHomPoint& rPnt ) const
+ {
+ implTestAndHomogenize();
+ return (maTuple != rPnt.maTuple);
+ }
+
+ B3DHomPoint& operator=( const B3DHomPoint& rPnt )
+ {
+ maTuple = rPnt.maTuple;
+ mfW = rPnt.mfW;
+ return *this;
+ }
+ };
+
+ // external operators
+ //////////////////////////////////////////////////////////////////////////
+
+ inline B3DHomPoint minimum(const B3DHomPoint& rVecA, const B3DHomPoint& rVecB)
+ {
+ B3DHomPoint aMin(
+ (rVecB.getX() < rVecA.getX()) ? rVecB.getX() : rVecA.getX(),
+ (rVecB.getY() < rVecA.getY()) ? rVecB.getY() : rVecA.getY(),
+ (rVecB.getZ() < rVecA.getZ()) ? rVecB.getZ() : rVecA.getZ());
+ return aMin;
+ }
+
+ inline B3DHomPoint maximum(const B3DHomPoint& rVecA, const B3DHomPoint& rVecB)
+ {
+ B3DHomPoint aMax(
+ (rVecB.getX() > rVecA.getX()) ? rVecB.getX() : rVecA.getX(),
+ (rVecB.getY() > rVecA.getY()) ? rVecB.getY() : rVecA.getY(),
+ (rVecB.getZ() > rVecA.getZ()) ? rVecB.getZ() : rVecA.getZ());
+ return aMax;
+ }
+
+ inline B3DHomPoint absolute(const B3DHomPoint& rVec)
+ {
+ B3DHomPoint aAbs(
+ (0.0 > rVec.getX()) ? -rVec.getX() : rVec.getX(),
+ (0.0 > rVec.getY()) ? -rVec.getY() : rVec.getY(),
+ (0.0 > rVec.getZ()) ? -rVec.getZ() : rVec.getZ());
+ return aAbs;
+ }
+
+ inline B3DHomPoint interpolate(B3DHomPoint& rOld1, B3DHomPoint& rOld2, double t)
+ {
+ B3DHomPoint aInt(
+ ((rOld2.getX() - rOld1.getX()) * t) + rOld1.getX(),
+ ((rOld2.getY() - rOld1.getY()) * t) + rOld1.getY(),
+ ((rOld2.getZ() - rOld1.getZ()) * t) + rOld1.getZ());
+ return aInt;
+ }
+
+ inline B3DHomPoint average(B3DHomPoint& rOld1, B3DHomPoint& rOld2)
+ {
+ B3DHomPoint aAvg(
+ (rOld1.getX() + rOld2.getX()) * 0.5,
+ (rOld1.getY() + rOld2.getY()) * 0.5,
+ (rOld1.getZ() + rOld2.getZ()) * 0.5);
+ return aAvg;
+ }
+
+ inline B3DHomPoint average(B3DHomPoint& rOld1, B3DHomPoint& rOld2, B3DHomPoint& rOld3)
+ {
+ B3DHomPoint aAvg(
+ (rOld1.getX() + rOld2.getX() + rOld3.getX()) * (1.0 / 3.0),
+ (rOld1.getY() + rOld2.getY() + rOld3.getY()) * (1.0 / 3.0),
+ (rOld1.getZ() + rOld2.getZ() + rOld3.getZ()) * (1.0 / 3.0));
+ return aAvg;
+ }
+
+ inline B3DHomPoint operator+(const B3DHomPoint& rVecA, const B3DHomPoint& rVecB)
+ {
+ B3DHomPoint aSum(rVecA);
+ aSum += rVecB;
+ return aSum;
+ }
+
+ inline B3DHomPoint operator-(const B3DHomPoint& rVecA, const B3DHomPoint& rVecB)
+ {
+ B3DHomPoint aSub(rVecA);
+ aSub -= rVecB;
+ return aSub;
+ }
+
+ inline B3DHomPoint operator*(const B3DHomPoint& rVec, double t)
+ {
+ B3DHomPoint aNew(rVec);
+ aNew *= t;
+ return aNew;
+ }
+
+ inline B3DHomPoint operator*(double t, const B3DHomPoint& rVec)
+ {
+ B3DHomPoint aNew(rVec);
+ aNew *= t;
+ return aNew;
+ }
+
+ inline B3DHomPoint operator/(const B3DHomPoint& rVec, double t)
+ {
+ B3DHomPoint aNew(rVec);
+ aNew /= t;
+ return aNew;
+ }
+
+ inline B3DHomPoint operator/(double t, const B3DHomPoint& rVec)
+ {
+ B3DHomPoint aNew(rVec);
+ aNew /= t;
+ return aNew;
+ }
+} // end of namespace basegfx
+
+#endif /* _BGFX_POINT_B3DHOMPOINT_HXX */
diff --git a/basegfx/inc/basegfx/point/b3dpoint.hxx b/basegfx/inc/basegfx/point/b3dpoint.hxx
new file mode 100644
index 000000000000..943f74c1352d
--- /dev/null
+++ b/basegfx/inc/basegfx/point/b3dpoint.hxx
@@ -0,0 +1,150 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_POINT_B3DPOINT_HXX
+#define _BGFX_POINT_B3DPOINT_HXX
+
+#include <basegfx/tuple/b3dtuple.hxx>
+
+namespace basegfx
+{
+ // predeclaration
+ class B3DHomMatrix;
+
+ /** Base Point class with three double values
+
+ This class derives all operators and common handling for
+ a 3D data class from B3DTuple. All necessary extensions
+ which are special for points will be added here.
+
+ @see B3DTuple
+ */
+ class B3DPoint : public ::basegfx::B3DTuple
+ {
+ public:
+ /** Create a 3D Point
+
+ The point is initialized to (0.0, 0.0, 0.0)
+ */
+ B3DPoint()
+ : B3DTuple()
+ {}
+
+ /** Create a 3D Point
+
+ @param fX
+ This parameter is used to initialize the X-coordinate
+ of the 3D Point.
+
+ @param fY
+ This parameter is used to initialize the Y-coordinate
+ of the 3D Point.
+
+ @param fZ
+ This parameter is used to initialize the Z-coordinate
+ of the 3D Point.
+ */
+ B3DPoint(double fX, double fY, double fZ)
+ : B3DTuple(fX, fY, fZ)
+ {}
+
+ /** Create a copy of a 3D Point
+
+ @param rVec
+ The 3D Point which will be copied.
+ */
+ B3DPoint(const B3DPoint& rVec)
+ : B3DTuple(rVec)
+ {}
+
+ /** constructor with tuple to allow copy-constructing
+ from B3DTuple-based classes
+ */
+ B3DPoint(const ::basegfx::B3DTuple& rTuple)
+ : B3DTuple(rTuple)
+ {}
+
+ ~B3DPoint()
+ {}
+
+ /** *=operator to allow usage from B3DPoint, too
+ */
+ B3DPoint& operator*=( const B3DPoint& rPnt )
+ {
+ mfX *= rPnt.mfX;
+ mfY *= rPnt.mfY;
+ mfZ *= rPnt.mfZ;
+ return *this;
+ }
+
+ /** *=operator to allow usage from B3DPoint, too
+ */
+ B3DPoint& operator*=(double t)
+ {
+ mfX *= t;
+ mfY *= t;
+ mfZ *= t;
+ return *this;
+ }
+
+ /** assignment operator to allow assigning the results
+ of B3DTuple calculations
+ */
+ B3DPoint& operator=( const ::basegfx::B3DTuple& rVec )
+ {
+ mfX = rVec.getX();
+ mfY = rVec.getY();
+ mfZ = rVec.getZ();
+ return *this;
+ }
+
+ /** Transform point by given transformation matrix.
+
+ The translational components of the matrix are, in
+ contrast to B3DVector, applied.
+ */
+ B3DPoint& operator*=( const ::basegfx::B3DHomMatrix& rMat );
+
+ static const B3DPoint& getEmptyPoint()
+ {
+ return (const B3DPoint&) ::basegfx::B3DTuple::getEmptyTuple();
+ }
+ };
+
+ // external operators
+ //////////////////////////////////////////////////////////////////////////
+
+ /** Transform B3DPoint by given transformation matrix.
+
+ Since this is a Point, translational components of the
+ matrix are used.
+ */
+ B3DPoint operator*( const B3DHomMatrix& rMat, const B3DPoint& rPoint );
+
+} // end of namespace basegfx
+
+#endif /* _BGFX_POINT_B3DPOINT_HXX */
diff --git a/basegfx/inc/basegfx/point/b3ipoint.hxx b/basegfx/inc/basegfx/point/b3ipoint.hxx
new file mode 100644
index 000000000000..f20fe3d99c79
--- /dev/null
+++ b/basegfx/inc/basegfx/point/b3ipoint.hxx
@@ -0,0 +1,139 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_POINT_B3IPOINT_HXX
+#define _BGFX_POINT_B3IPOINT_HXX
+
+#include <basegfx/tuple/b3ituple.hxx>
+
+namespace basegfx
+{
+ // predeclaration
+ class B3DHomMatrix;
+
+ /** Base Point class with three sal_Int32 values
+
+ This class derives all operators and common handling for
+ a 3D data class from B3ITuple. All necessary extensions
+ which are special for points will be added here.
+
+ @see B3ITuple
+ */
+ class B3IPoint : public ::basegfx::B3ITuple
+ {
+ public:
+ /** Create a 3D Point
+
+ The point is initialized to (0, 0, 0)
+ */
+ B3IPoint()
+ : B3ITuple()
+ {}
+
+ /** Create a 3D Point
+
+ @param nX
+ This parameter is used to initialize the X-coordinate
+ of the 3D Point.
+
+ @param nY
+ This parameter is used to initialize the Y-coordinate
+ of the 3D Point.
+
+ @param nZ
+ This parameter is used to initialize the Z-coordinate
+ of the 3D Point.
+ */
+ B3IPoint(sal_Int32 nX, sal_Int32 nY, sal_Int32 nZ)
+ : B3ITuple(nX, nY, nZ)
+ {}
+
+ /** Create a copy of a 3D Point
+
+ @param rVec
+ The 3D Point which will be copied.
+ */
+ B3IPoint(const B3IPoint& rVec)
+ : B3ITuple(rVec)
+ {}
+
+ /** constructor with tuple to allow copy-constructing
+ from B3ITuple-based classes
+ */
+ B3IPoint(const ::basegfx::B3ITuple& rTuple)
+ : B3ITuple(rTuple)
+ {}
+
+ ~B3IPoint()
+ {}
+
+ /** *=operator to allow usage from B3IPoint, too
+ */
+ B3IPoint& operator*=( const B3IPoint& rPnt )
+ {
+ mnX *= rPnt.mnX;
+ mnY *= rPnt.mnY;
+ mnZ *= rPnt.mnZ;
+ return *this;
+ }
+
+ /** *=operator to allow usage from B3IPoint, too
+ */
+ B3IPoint& operator*=(sal_Int32 t)
+ {
+ mnX *= t;
+ mnY *= t;
+ mnZ *= t;
+ return *this;
+ }
+
+ /** assignment operator to allow assigning the results
+ of B3ITuple calculations
+ */
+ B3IPoint& operator=( const ::basegfx::B3ITuple& rVec )
+ {
+ mnX = rVec.getX();
+ mnY = rVec.getY();
+ mnZ = rVec.getZ();
+ return *this;
+ }
+
+ /** Transform point by given transformation matrix.
+
+ The translational components of the matrix are, in
+ contrast to B3DVector, applied.
+ */
+ B3IPoint& operator*=( const ::basegfx::B3DHomMatrix& rMat );
+
+ static const B3IPoint& getEmptyPoint()
+ {
+ return (const B3IPoint&) ::basegfx::B3ITuple::getEmptyTuple();
+ }
+ };
+} // end of namespace basegfx
+
+#endif /* _BGFX_POINT_B3IPOINT_HXX */
diff --git a/basegfx/inc/basegfx/polygon/b2dlinegeometry.hxx b/basegfx/inc/basegfx/polygon/b2dlinegeometry.hxx
new file mode 100644
index 000000000000..fd8997fcda4d
--- /dev/null
+++ b/basegfx/inc/basegfx/polygon/b2dlinegeometry.hxx
@@ -0,0 +1,144 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_POLYGON_B2DLINEGEOMETRY_HXX
+#define _BGFX_POLYGON_B2DLINEGEOMETRY_HXX
+
+#include <sal/types.h>
+#include <basegfx/numeric/ftools.hxx>
+#include <basegfx/polygon/b2dpolypolygon.hxx>
+#include <basegfx/polygon/b2dpolygon.hxx>
+
+//////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+ namespace tools
+ {
+ /** Create line start/end geometry element, mostly arrows and things like that.
+
+ @param rCandidate
+ The polygon which needs to get that line ends and needs to have two points
+ at least.
+
+ @param rArrow
+ The line start/end geometry. It is assumed that the tip is pointing
+ upwards. Result will be rotated and scaled to fit.
+
+ @param bStart
+ describes if creation is for start or end of candidate.
+
+ @param fWidth
+ defines the size of the element, it's describing the target width in X
+ of the arrow.
+
+ @param fDockingPosition needs to be in [0.0 ..1.0] range, where 0.0 means
+ that the tip of the arrow will be aligned with the polygon start, 1.0 means
+ the bottom. The default of 0.5 describes a centered arrow.
+
+ @param pConsumedLength
+ Using this parameter it is possible to get back how much from the candidate
+ geometry is overlapped by the created element (consumed).
+
+ @param fCandidateLength
+ This should contain the length of rCandidate to allow work without
+ again calculating the length (which may be expensive with beziers). If 0.0 is
+ given, the length is calculated on demand.
+
+ @return
+ The Line start and end polygon, correctly rotated and scaled
+ */
+ B2DPolyPolygon createAreaGeometryForLineStartEnd(
+ const B2DPolygon& rCandidate,
+ const B2DPolyPolygon& rArrow,
+ bool bStart,
+ double fWidth,
+ double fCandidateLength = 0.0, // 0.0 -> calculate self
+ double fDockingPosition = 0.5, // 0->top, 1->bottom
+ double* pConsumedLength = 0L);
+
+ /** create filled polygon geometry for lines with a line width
+
+ This method will create bezier based, fillable polygons which
+ will resample the curve if it was extended for the given half
+ line width. It will remove extrema positions from contained
+ bezier segments and get as close as possible and defined by
+ the given parameters to the ideal result.
+
+ It will check edges for trivial bezier to avoid unnecessary
+ bezier polygons. Care is taken to produce the in-between
+ polygon points (the ones original on the source poygon) since
+ it has showed that without those, the raster converters leave
+ non-filled gaps.
+
+ @param rCandidate
+ The source polygon defining the hairline polygon path
+
+ @param fHalfLineWidth
+ The width of the line to one side
+
+ @param eJoin
+ The LineJoin if the edges meeting in a point do not have a C1
+ or C2 continuity
+
+ @param fMaxAllowedAngle
+ Allows to hand over the maximum allowed angle between an edge and
+ it's control vectors. The smaller, the more subdivisions will be
+ needed to create the filled geometry. Allowed range is cropped to
+ [F_PI2 .. 0.01 * F_PI2].
+
+ @param fMaxPartOfEdge
+ Allows to influence from with relative length of a control vector
+ compared to it's edge a split is forced. The smaller, the more
+ subdivisions will be needed to create the filled geometry. Allowed
+ range is cropped to [1.0 .. 0.01]
+
+ @praram fMiterMinimumAngle
+ The minimum wanted angle between two edges when edge rounding
+ is using miter. When an edge is smaller than this (tighter)
+ the usual fallback to bevel is used. Allowed range is cropped
+ to [F_PI .. 0.01 * F_PI].
+
+ @return
+ The PolyPolygon containing the geometry of the extended line by
+ it's line width. Contains bezier segments and edge roundings as
+ needed and defined.
+ */
+ B2DPolyPolygon createAreaGeometry(
+ const B2DPolygon& rCandidate,
+ double fHalfLineWidth,
+ B2DLineJoin eJoin = B2DLINEJOIN_ROUND,
+ double fMaxAllowedAngle = (12.5 * F_PI180),
+ double fMaxPartOfEdge = 0.4,
+ double fMiterMinimumAngle = (15.0 * F_PI180));
+ } // end of namespace tools
+} // end of namespace basegfx
+
+//////////////////////////////////////////////////////////////////////////////
+
+#endif /* _BGFX_POLYGON_B2DLINEGEOMETRY_HXX */
+// eof
diff --git a/basegfx/inc/basegfx/polygon/b2dpolygon.hxx b/basegfx/inc/basegfx/polygon/b2dpolygon.hxx
new file mode 100644
index 000000000000..a12120b5f441
--- /dev/null
+++ b/basegfx/inc/basegfx/polygon/b2dpolygon.hxx
@@ -0,0 +1,274 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_POLYGON_B2DPOLYGON_HXX
+#define _BGFX_POLYGON_B2DPOLYGON_HXX
+
+#include <sal/types.h>
+#include <o3tl/cow_wrapper.hxx>
+#include <basegfx/vector/b2enums.hxx>
+#include <basegfx/range/b2drange.hxx>
+
+//////////////////////////////////////////////////////////////////////////////
+// predeclarations
+class ImplB2DPolygon;
+
+namespace basegfx
+{
+ class B2DPolygon;
+ class B2DPoint;
+ class B2DVector;
+ class B2DHomMatrix;
+ class B2DCubicBezier;
+} // end of namespace basegfx
+
+//////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+ class B2DPolygon
+ {
+ public:
+ typedef o3tl::cow_wrapper< ImplB2DPolygon > ImplType;
+
+ private:
+ // internal data.
+ ImplType mpPolygon;
+
+ public:
+ /// diverse constructors
+ B2DPolygon();
+ B2DPolygon(const B2DPolygon& rPolygon);
+ B2DPolygon(const B2DPolygon& rPolygon, sal_uInt32 nIndex, sal_uInt32 nCount);
+ ~B2DPolygon();
+
+ /// assignment operator
+ B2DPolygon& operator=(const B2DPolygon& rPolygon);
+
+ /// unshare this polygon with all internally shared instances
+ void makeUnique();
+
+ /// compare operators
+ bool operator==(const B2DPolygon& rPolygon) const;
+ bool operator!=(const B2DPolygon& rPolygon) const;
+
+ /// member count
+ sal_uInt32 count() const;
+
+ /// Coordinate interface
+ basegfx::B2DPoint getB2DPoint(sal_uInt32 nIndex) const;
+ void setB2DPoint(sal_uInt32 nIndex, const basegfx::B2DPoint& rValue);
+
+ /// Coordinate insert/append
+ void insert(sal_uInt32 nIndex, const basegfx::B2DPoint& rPoint, sal_uInt32 nCount = 1);
+ void append(const basegfx::B2DPoint& rPoint, sal_uInt32 nCount);
+ void append(const basegfx::B2DPoint& rPoint);
+ void reserve(sal_uInt32 nCount);
+
+ /// Basic ControlPoint interface
+ basegfx::B2DPoint getPrevControlPoint(sal_uInt32 nIndex) const;
+ basegfx::B2DPoint getNextControlPoint(sal_uInt32 nIndex) const;
+ void setPrevControlPoint(sal_uInt32 nIndex, const basegfx::B2DPoint& rValue);
+ void setNextControlPoint(sal_uInt32 nIndex, const basegfx::B2DPoint& rValue);
+ void setControlPoints(sal_uInt32 nIndex, const basegfx::B2DPoint& rPrev, const basegfx::B2DPoint& rNext);
+
+ /// ControlPoint resets
+ void resetPrevControlPoint(sal_uInt32 nIndex);
+ void resetNextControlPoint(sal_uInt32 nIndex);
+ void resetControlPoints(sal_uInt32 nIndex);
+ void resetControlPoints();
+
+ /// Bezier segment append with control points. The current last polygon point is implicitly taken as start point.
+ void appendBezierSegment(const basegfx::B2DPoint& rNextControlPoint, const basegfx::B2DPoint& rPrevControlPoint, const basegfx::B2DPoint& rPoint);
+
+ /// ControlPoint checks
+ bool areControlPointsUsed() const;
+ bool isPrevControlPointUsed(sal_uInt32 nIndex) const;
+ bool isNextControlPointUsed(sal_uInt32 nIndex) const;
+ B2VectorContinuity getContinuityInPoint(sal_uInt32 nIndex) const;
+
+ /** check edge for being a bezier segment
+
+ This test the existance of control vectors, but do not apply
+ testAndSolveTrivialBezier() to the bezier segment, so it is still useful
+ to do so.
+ Since it can use internal data representations, it is faster
+ than using getBezierSegment() and applying isBezier() on it.
+
+ @param nIndex
+ Index of the addressed edge's start point
+
+ @return
+ true if edge exists and at least one control vector is used
+ */
+ bool isBezierSegment(sal_uInt32 nIndex) const;
+
+ /** bezier segment access
+
+ This method also works when it is no bezier segment at all and will fill
+ the given B2DCubicBezier as needed.
+ In any case, the given B2DCubicBezier will be filled, if necessary with
+ the single start point (if no valid edge exists).
+
+ @param nIndex
+ Index of the addressed edge's start point
+
+ @param rTarget
+ The B2DCubicBezier to be filled. It's data WILL be changed.
+ */
+ void getBezierSegment(sal_uInt32 nIndex, B2DCubicBezier& rTarget) const;
+
+ /** Default adaptive subdivision access
+
+ This method will return a default adapive subdivision of the polygon.
+ If the polygon does not contain any bezier curve segments, it will
+ just return itself.
+
+ The subdivision is created on first request and buffered, so when using
+ this subdivision You have the guarantee for fast accesses for multiple
+ usages. It is intended for tooling usage for tasks which would be hard
+ to accomplish on bezier segments (e.g. isInEpsilonRange).
+
+ The current default subdivision uses adaptiveSubdivideByCount with 9
+ subdivisions which gives 10 edges and 11 points per segment and is
+ usually pretty usable for processing purposes. There is no parameter
+ passing here ATM but it may be changed on demand. If needed, a TYPE
+ and PARAMETER (both defaulted) may be added to allow for switching
+ between the different kinds of subdivisiond and passing them one
+ parameter.
+
+ The lifetime of the buffered subdivision is based on polygon changes.
+ When changing the polygon, it will be flushed. It is buffered at the
+ refcounted implementation class, so it will survive copy by value and
+ combinations in PolyPolygons.
+
+ @return
+ The default (and buffered) subdivision of this polygon. It may
+ be this polygon itself when it has no bezier segments. It is guaranteed
+ to have no more bezier segments
+ */
+ B2DPolygon getDefaultAdaptiveSubdivision() const;
+
+ /** Get the B2DRange (Rectangle dimensions) of this B2DPolygon
+
+ A polygon may have up to three ranges:
+
+ (a) the range of the polygon points
+ (b) the range of the polygon points and control points
+ (c) the outer range of the subdivided bezier curve
+
+ Ranges (a) and (c) are produced by tools::getRange(); resp. this
+ getB2DRange(). tools::getRangeWithControlPoints handles case (b).
+
+ To get range (c) a simple solution would be to subdivide the polygon
+ and use getRange() on it. Since subdivision is expensive and decreases
+ the polygon quality, i added this new method. It will use a
+ methodology suggested by HDU. First, it gets the range (a).
+ Then it iterates over the bezier segments and for each it
+ first tests if the outer range of the bezier segment is already
+ contained in the result range.
+
+ The subdivision itself uses getAllExtremumPositions() to only
+ calculate extremum points and to expand the result accordingly.
+ Thus it calculates maximal four extremum points on the bezier
+ segment, no split is used at all.
+
+ @return
+ The outer range of the bezier curve/polygon
+ */
+ B2DRange getB2DRange() const;
+
+ /** insert other 2D polygons
+
+ The default (with nIndex2 == 0 && nCount == 0) inserts the whole
+ rPoly at position nIndex
+
+ @param nIndex
+ Target index for points to be inserted
+
+ @param rPoly
+ The source for new points
+
+ @param nIndex2
+ The index to the first source point into rPoly
+
+ @param nCount
+ How many points to add from rPoly to this polygon. Null
+ means to copy all (starting from nIndex2)
+ */
+ void insert(sal_uInt32 nIndex, const B2DPolygon& rPoly, sal_uInt32 nIndex2 = 0, sal_uInt32 nCount = 0);
+
+ /** append other 2D polygons
+
+ The default (nIndex ==0 && nCount == 0) will append
+ the whole rPoly
+
+ @param rPoly
+ The source polygon
+
+ @param nIndex
+ The index to the first point of rPoly to append
+
+ @param nCount
+ The number of points to append from rPoly, starting
+ from nIndex. If zero, as much as possibel is appended
+ */
+ void append(const B2DPolygon& rPoly, sal_uInt32 nIndex = 0, sal_uInt32 nCount = 0);
+
+ /// remove points
+ void remove(sal_uInt32 nIndex, sal_uInt32 nCount = 1);
+
+ /// clear all points
+ void clear();
+
+ /// closed state interface
+ bool isClosed() const;
+ void setClosed(bool bNew);
+
+ /// flip polygon direction
+ void flip();
+
+ /// test if Polygon has double points
+ bool hasDoublePoints() const;
+
+ /// remove double points, at the begin/end and follow-ups, too
+ void removeDoublePoints();
+
+ /// apply transformation given in matrix form
+ void transform(const basegfx::B2DHomMatrix& rMatrix);
+
+ // point iterators (same iterator validity conditions as for vector)
+ const B2DPoint* begin() const;
+ const B2DPoint* end() const;
+ B2DPoint* begin();
+ B2DPoint* end();
+ };
+} // end of namespace basegfx
+
+//////////////////////////////////////////////////////////////////////////////
+
+#endif /* _BGFX_POLYGON_B2DPOLYGON_HXX */
diff --git a/basegfx/inc/basegfx/polygon/b2dpolygonclipper.hxx b/basegfx/inc/basegfx/polygon/b2dpolygonclipper.hxx
new file mode 100644
index 000000000000..d13d3d0a862c
--- /dev/null
+++ b/basegfx/inc/basegfx/polygon/b2dpolygonclipper.hxx
@@ -0,0 +1,82 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_POLYPOLYGON_B2DPOLYGONCLIPPER_HXX
+#define _BGFX_POLYPOLYGON_B2DPOLYGONCLIPPER_HXX
+
+#include <basegfx/polygon/b2dpolypolygon.hxx>
+#include <basegfx/polygon/b2dpolygon.hxx>
+
+//////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+ // predefinitions
+ class B2DRange;
+
+ namespace tools
+ {
+ // This method clips the given PolyPolygon against a horizontal or vertical axis (parallell to X or Y axis). The axis is
+ // defined by bParallelToXAxis (true -> it's parallel to the X-Axis of the coordinate system, else to the Y-Axis) and the
+ // fValueOnOtherAxis (gives the translation to the coordinate system axis). For example, when You want to define
+ // a clip axis parallel to X.Axis and 100 above it, use bParallelToXAxis = true and fValueOnOtherAxis = 100.
+ // The value bAboveAxis defines on which side the return value will be (true -> above X, right of Y).
+ // The switch bStroke decides if the polygon is interpreted as area (false) or strokes (true).
+ B2DPolyPolygon clipPolyPolygonOnParallelAxis(const B2DPolyPolygon& rCandidate, bool bParallelToXAxis, bool bAboveAxis, double fValueOnOtherAxis, bool bStroke);
+ B2DPolyPolygon clipPolygonOnParallelAxis(const B2DPolygon& rCandidate, bool bParallelToXAxis, bool bAboveAxis, double fValueOnOtherAxis, bool bStroke);
+
+ // Clip the given PolyPolygon against the given range. bInside defines if the result will contain the
+ // parts which are contained in the range or vice versa.
+ // The switch bStroke decides if the polygon is interpreted as area (false) or strokes (true).
+ B2DPolyPolygon clipPolyPolygonOnRange(const B2DPolyPolygon& rCandidate, const B2DRange& rRange, bool bInside, bool bStroke);
+ B2DPolyPolygon clipPolygonOnRange(const B2DPolygon& rCandidate, const B2DRange& rRange, bool bInside, bool bStroke);
+
+ // Clip given PolyPolygon against the endless edge (ray) defined by the given two points. bAbove defines on which side
+ // of the edge the result will be together with the definition of the edge. If the edge is seen as a vector
+ // from A to B and bAbove is true, the result will contain the geometry left of the vector.
+ // The switch bStroke decides if the polygon is interpreted as area (false) or strokes (true).
+ B2DPolyPolygon clipPolyPolygonOnEdge(const B2DPolyPolygon& rCandidate, const B2DPoint& rPointA, const B2DPoint& rPointB, bool bAbove, bool bStroke);
+ B2DPolyPolygon clipPolygonOnEdge(const B2DPolygon& rCandidate, const B2DPoint& rPointA, const B2DPoint& rPointB, bool bAbove, bool bStroke);
+
+ // Clip given PolyPolygon against given clipping polygon.
+ // The switch bStroke decides if the polygon is interpreted as area (false) or strokes (true).
+ // With stroke polygons, You get all line snippets inside rCip.
+ // With filled polygons, You get all PolyPolygon parts which were inside rClip.
+ // The switch bInside decides if the parts inside the clip polygon or outside shall be created.
+ // The clip polygon is always assumed closed, even when it's isClosed() is false.
+ B2DPolyPolygon clipPolyPolygonOnPolyPolygon(const B2DPolyPolygon& rCandidate, const B2DPolyPolygon& rClip, bool bInside, bool bStroke);
+ B2DPolyPolygon clipPolygonOnPolyPolygon(const B2DPolygon& rCandidate, const B2DPolyPolygon& rClip, bool bInside, bool bStroke);
+
+ // clip the given polygon against the given range. the resulting polygon will always contain
+ // the inside parts which will always be interpreted as areas. the incoming polygon is expected
+ // to be a simple triangle list. the result is also a simple triangle list.
+ B2DPolygon clipTriangleListOnRange( const B2DPolygon& rCandidate, const B2DRange& rRange );
+
+ } // end of namespace tools
+} // end of namespace basegfx
+
+#endif /* _BGFX_POLYPOLYGON_B2DPOLYGONCLIPPER_HXX */
diff --git a/basegfx/inc/basegfx/polygon/b2dpolygoncutandtouch.hxx b/basegfx/inc/basegfx/polygon/b2dpolygoncutandtouch.hxx
new file mode 100644
index 000000000000..a9d6e0a1b6fe
--- /dev/null
+++ b/basegfx/inc/basegfx/polygon/b2dpolygoncutandtouch.hxx
@@ -0,0 +1,81 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_POLYGON_CUTANDTOUCH_HXX
+#define _BGFX_POLYGON_CUTANDTOUCH_HXX
+
+#include <basegfx/polygon/b2dpolygon.hxx>
+#include <basegfx/polygon/b2dpolypolygon.hxx>
+
+//////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+ namespace tools
+ {
+ // look for self-intersections and self-touches (points on an edge) in given polygon and add
+ // extra points there. Result will have no touches or intersections on an edge, only on points
+ B2DPolygon addPointsAtCutsAndTouches(const B2DPolygon& rCandidate);
+
+ // look for polypolygon-intersections and polypolygon-touches (point of poly A on an edge of poly B) in given PolyPolygon and add
+ // extra points there. Result will have no touches or intersections between contained polygons on an edge, only on points. For
+ // convenience, the correction for self-intersections for each member polygon will be used, too.
+ // Changed: Self intersections are searched by default, but may be switched off by 2nd parameter.
+ B2DPolyPolygon addPointsAtCutsAndTouches(const B2DPolyPolygon& rCandidate, bool bSelfIntersections = true);
+
+ // look for intersections of rCandidate with all polygons from rMask and add extra points there. Do
+ // not change or add points to rMask.
+ B2DPolygon addPointsAtCutsAndTouches(const B2DPolyPolygon& rMask, const B2DPolygon& rCandidate);
+
+ // look for intersections of rCandidate with all polygons from rMask and add extra points there. Do
+ // not change or add points to rMask.
+ B2DPolyPolygon addPointsAtCutsAndTouches(const B2DPolyPolygon& rMask, const B2DPolyPolygon& rCandidate);
+
+ // look for intersections of rCandidate with the edge from rStart to rEnd and add extra points there.
+ // Points are only added in the range of the edge, not on the endless vector.
+ B2DPolygon addPointsAtCuts(const B2DPolygon& rCandidate, const B2DPoint& rStart, const B2DPoint& rEnd);
+ B2DPolyPolygon addPointsAtCuts(const B2DPolyPolygon& rCandidate, const B2DPoint& rStart, const B2DPoint& rEnd);
+
+ // look for intersections of rCandidate with the mask Polygon and add extra points there.
+ // The mask polygon is assumed to be closed, even when it's not explicitely.
+ B2DPolygon addPointsAtCuts(const B2DPolygon& rCandidate, const B2DPolyPolygon& rMask);
+ B2DPolyPolygon addPointsAtCuts(const B2DPolyPolygon& rCandidate, const B2DPolyPolygon& rMask);
+
+ // look for self-intersections in given polygon and add extra points there. Result will have no
+ // intersections on an edge
+ B2DPolygon addPointsAtCuts(const B2DPolygon& rCandidate);
+
+ // add points at all self-intersections of single polygons (depends on bSelfIntersections)
+ // and at polygon-polygon intersections
+ B2DPolyPolygon addPointsAtCuts(const B2DPolyPolygon& rCandidate, bool bSelfIntersections = true);
+
+ } // end of namespace tools
+} // end of namespace basegfx
+
+//////////////////////////////////////////////////////////////////////////////
+
+#endif /* _BGFX_POLYGON_CUTANDTOUCH_HXX */
diff --git a/basegfx/inc/basegfx/polygon/b2dpolygontools.hxx b/basegfx/inc/basegfx/polygon/b2dpolygontools.hxx
new file mode 100644
index 000000000000..7d1d0bc9660c
--- /dev/null
+++ b/basegfx/inc/basegfx/polygon/b2dpolygontools.hxx
@@ -0,0 +1,534 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_POLYGON_B2DPOLYGONTOOLS_HXX
+#define _BGFX_POLYGON_B2DPOLYGONTOOLS_HXX
+
+#include <basegfx/point/b2dpoint.hxx>
+#include <basegfx/vector/b2dvector.hxx>
+#include <basegfx/range/b2drectangle.hxx>
+#include <basegfx/polygon/b2dpolypolygon.hxx>
+#include <basegfx/polygon/b3dpolygon.hxx>
+#include <vector>
+
+//////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+ // predefinitions
+ class B2DPolygon;
+ class B2DRange;
+
+ namespace tools
+ {
+ // B2DPolygon tools
+
+ // open/close with point add/remove and control point corrections
+ void openWithGeometryChange(B2DPolygon& rCandidate);
+ void closeWithGeometryChange(B2DPolygon& rCandidate);
+
+ /** Check if given polygon is closed.
+
+ This is kind of a 'classic' method to support old polygon
+ definitions. Those old polygon definitions define the
+ closed state of the polygon using identical start and
+ endpoints. This method corrects this (removes double
+ start/end points) and sets the Closed()-state of the
+ polygon correctly.
+ */
+ void checkClosed(B2DPolygon& rCandidate);
+
+ // Get successor and predecessor indices. Returning the same index means there
+ // is none. Same for successor.
+ sal_uInt32 getIndexOfPredecessor(sal_uInt32 nIndex, const B2DPolygon& rCandidate);
+ sal_uInt32 getIndexOfSuccessor(sal_uInt32 nIndex, const B2DPolygon& rCandidate);
+
+ // Get orientation of Polygon
+ B2VectorOrientation getOrientation(const B2DPolygon& rCandidate);
+
+ // isInside tests for B2dPoint and other B2dPolygon. On border is not inside as long as
+ // not true is given in bWithBorder flag.
+ bool isInside(const B2DPolygon& rCandidate, const B2DPoint& rPoint, bool bWithBorder = false);
+ bool isInside(const B2DPolygon& rCandidate, const B2DPolygon& rPolygon, bool bWithBorder = false);
+
+ /** Get the range of a polygon including bezier control points
+
+ For detailed discussion, see B2DPolygon::getB2DRange()
+
+ @param rCandidate
+ The B2DPolygon eventually containing bezier segments
+
+ @return
+ The outer range of the bezier curve containing bezier control points
+ */
+ B2DRange getRangeWithControlPoints(const B2DPolygon& rCandidate);
+
+ /** Get the range of a polygon
+
+ This method creates the outer range of the subdivided bezier curve.
+ For detailed discussion see B2DPolygon::getB2DRange()
+
+ @param rCandidate
+ The B2DPolygon eventually containing bezier segments
+
+ @return
+ The outer range of the bezier curve
+ */
+ B2DRange getRange(const B2DPolygon& rCandidate);
+
+ // get signed area of polygon
+ double getSignedArea(const B2DPolygon& rCandidate);
+
+ // get area of polygon
+ double getArea(const B2DPolygon& rCandidate);
+
+ /** get length of polygon edge from point nIndex to nIndex + 1 */
+ double getEdgeLength(const B2DPolygon& rCandidate, sal_uInt32 nIndex);
+
+ /** get length of polygon */
+ double getLength(const B2DPolygon& rCandidate);
+
+ // get position on polygon for absolute given distance. If
+ // length is given, it is assumed the correct polygon length, if 0.0 it is calculated
+ // using getLength(...)
+ B2DPoint getPositionAbsolute(const B2DPolygon& rCandidate, double fDistance, double fLength = 0.0);
+
+ // get position on polygon for relative given distance in range [0.0 .. 1.0]. If
+ // length is given, it is assumed the correct polygon length, if 0.0 it is calculated
+ // using getLength(...)
+ B2DPoint getPositionRelative(const B2DPolygon& rCandidate, double fDistance, double fLength = 0.0);
+
+ // get a snippet from given polygon for absolute distances. The polygon is assumed
+ // to be opened (not closed). fFrom and fTo need to be in range [0.0 .. fLength], where
+ // fTo >= fFrom. If length is given, it is assumed the correct polygon length,
+ // if 0.0 it is calculated using getLength(...)
+ B2DPolygon getSnippetAbsolute(const B2DPolygon& rCandidate, double fFrom, double fTo, double fLength = 0.0);
+
+ // get a snippet from given polygon for relative distances. The polygon is assumed
+ // to be opened (not closed). fFrom and fTo need to be in range [0.0 .. 1.0], where
+ // fTo >= fFrom. If length is given, it is assumed the correct polygon length,
+ // if 0.0 it is calculated using getLength(...)
+ B2DPolygon getSnippetRelative(const B2DPolygon& rCandidate, double fFrom = 0.0, double fTo = 1.0, double fLength = 0.0);
+
+ // Continuity check for point with given index
+ B2VectorContinuity getContinuityInPoint(const B2DPolygon& rCandidate, sal_uInt32 nIndex);
+
+ // Subdivide all contained curves. Use distanceBound value if given.
+ B2DPolygon adaptiveSubdivideByDistance(const B2DPolygon& rCandidate, double fDistanceBound = 0.0);
+
+ // Subdivide all contained curves. Use angleBound value if given.
+ B2DPolygon adaptiveSubdivideByAngle(const B2DPolygon& rCandidate, double fAngleBound = 0.0);
+
+ // #i37443# Subdivide all contained curves.
+ B2DPolygon adaptiveSubdivideByCount(const B2DPolygon& rCandidate, sal_uInt32 nCount = 0L);
+
+ // Definitions for the cut flags used from the findCut methods
+ typedef sal_uInt16 CutFlagValue;
+
+ #define CUTFLAG_NONE (0x0000)
+ #define CUTFLAG_LINE (0x0001)
+ #define CUTFLAG_START1 (0x0002)
+ #define CUTFLAG_START2 (0x0004)
+ #define CUTFLAG_END1 (0x0008)
+ #define CUTFLAG_END2 (0x0010)
+ #define CUTFLAG_ALL (CUTFLAG_LINE|CUTFLAG_START1|CUTFLAG_START2|CUTFLAG_END1|CUTFLAG_END2)
+ #define CUTFLAG_DEFAULT (CUTFLAG_LINE|CUTFLAG_START2|CUTFLAG_END2)
+
+ // Calculate cut between the points given by the two indices. pCut1
+ // and pCut2 will contain the cut coordinate on each edge in ]0.0, 1.0]
+ // (if given) and the return value will contain a cut description.
+ CutFlagValue findCut(
+ const B2DPolygon& rCandidate,
+ sal_uInt32 nIndex1, sal_uInt32 nIndex2,
+ CutFlagValue aCutFlags = CUTFLAG_DEFAULT,
+ double* pCut1 = 0L, double* pCut2 = 0L);
+
+ // This version is working with two indexed edges from different
+ // polygons.
+ CutFlagValue findCut(
+ const B2DPolygon& rCandidate1, sal_uInt32 nIndex1,
+ const B2DPolygon& rCandidate2, sal_uInt32 nIndex2,
+ CutFlagValue aCutFlags = CUTFLAG_DEFAULT,
+ double* pCut1 = 0L, double* pCut2 = 0L);
+
+ // This version works with two points and vectors to define the
+ // edges for the cut test.
+ CutFlagValue findCut(
+ const B2DPoint& rEdge1Start, const B2DVector& rEdge1Delta,
+ const B2DPoint& rEdge2Start, const B2DVector& rEdge2Delta,
+ CutFlagValue aCutFlags = CUTFLAG_DEFAULT,
+ double* pCut1 = 0L, double* pCut2 = 0L);
+
+ // test if point is on the given edge in range ]0.0..1.0[ without
+ // the start/end points. If so, return true and put the parameter
+ // value in pCut (if provided)
+ bool isPointOnEdge(
+ const B2DPoint& rPoint,
+ const B2DPoint& rEdgeStart,
+ const B2DVector& rEdgeDelta,
+ double* pCut = 0L);
+
+ /** Apply given LineDashing to given polygon
+
+ This method is used to cut down line polygons to the needed
+ pieces when a dashing needs to be applied.
+ It is now capable of keeping contained bezier segments.
+ It is also capable of delivering line and non-line portions
+ depending on what target polygons You provide. This is useful
+ e.g. for dashed lines with two colors.
+ If the last and the first snippet in one of the results have
+ a common start/end ppoint, they will be merged to achieve as
+ view as needed result line snippets. This is also relevant for
+ further processing the results.
+
+ @param rCandidate
+ The polygon based on which the snippets will be created.
+
+ @param rDotDashArray
+ The line pattern given as array of length values
+
+ @param pLineTarget
+ The target for line snippets, e.g. the first entry will be
+ a line segment with length rDotDashArray[0]. The given
+ polygon will be emptied as preparation.
+
+ @param pGapTarget
+ The target for gap snippets, e.g. the first entry will be
+ a line segment with length rDotDashArray[1]. The given
+ polygon will be emptied as preparation.
+
+ @param fFullDashDotLen
+ The sumed-up length of the rDotDashArray. If zero, it will
+ be calculated internally.
+ */
+ void applyLineDashing(
+ const B2DPolygon& rCandidate,
+ const ::std::vector<double>& rDotDashArray,
+ B2DPolyPolygon* pLineTarget,
+ B2DPolyPolygon* pGapTarget = 0,
+ double fFullDashDotLen = 0.0);
+
+ // test if point is inside epsilon-range around an edge defined
+ // by the two given points. Can be used for HitTesting. The epsilon-range
+ // is defined to be the rectangle centered to the given edge, using height
+ // 2 x fDistance, and the circle around both points with radius fDistance.
+ bool isInEpsilonRange(const B2DPoint& rEdgeStart, const B2DPoint& rEdgeEnd, const B2DPoint& rTestPosition, double fDistance);
+
+ // test if point is inside epsilon-range around the given Polygon. Can be used
+ // for HitTesting. The epsilon-range is defined to be the rectangle centered
+ // to the given edge, using height 2 x fDistance, and the circle around both points
+ // with radius fDistance.
+ bool isInEpsilonRange(const B2DPolygon& rCandidate, const B2DPoint& rTestPosition, double fDistance);
+
+ /** Create a polygon from a rectangle.
+
+ @param rRect
+ The rectangle which describes the polygon size
+
+ @param fRadius
+ Radius of the edge rounding, relative to the rectangle size. 0.0 means no
+ rounding, 1.0 will lead to an ellipse
+ */
+ B2DPolygon createPolygonFromRect( const B2DRectangle& rRect, double fRadius );
+
+ /** Create a polygon from a rectangle.
+
+ @param rRect
+ The rectangle which describes the polygon size
+
+ @param fRadiusX
+ @param fRadiusY
+ Radius of the edge rounding, relative to the rectangle size. 0.0 means no
+ rounding, 1.0 will lead to an ellipse
+ */
+ B2DPolygon createPolygonFromRect( const B2DRectangle& rRect, double fRadiusX, double fRadiusY );
+
+ /** Create a polygon from a rectangle.
+ */
+ B2DPolygon createPolygonFromRect( const B2DRectangle& rRect );
+
+ /** Create the unit polygon
+ */
+ B2DPolygon createUnitPolygon();
+
+ /** Create a circle polygon with given radius.
+
+ This method creates a circle approximation consisting of
+ four cubic bezier segments, which approximate the given
+ circle with an error of less than 0.5 percent.
+
+ @param rCenter
+ Center point of the circle
+
+ @param fRadius
+ Radius of the circle
+ */
+ B2DPolygon createPolygonFromCircle( const B2DPoint& rCenter, double fRadius );
+
+ /** create a polygon which describes the unit circle and close it
+
+ @param nStartQuadrant
+ To be able to rebuild the old behaviour where the circles started at bottom,
+ this parameter is used. Default is 0 which is the first quadrant and the
+ polygon's start point will be the rightmost one. When using e.g. 1, the
+ first created quadrant will start at the YMax-position (with Y down on screens,
+ this is the lowest one). This is needed since when lines are dashed, toe old
+ geometry started at bottom point, else it would look different.
+ */
+ B2DPolygon createPolygonFromUnitCircle(sal_uInt32 nStartQuadrant = 0);
+
+ /** Create an ellipse polygon with given radii.
+
+ This method creates an ellipse approximation consisting of
+ four cubic bezier segments, which approximate the given
+ ellipse with an error of less than 0.5 percent.
+
+ @param rCenter
+ Center point of the circle
+
+ @param fRadiusX
+ Radius of the ellipse in X direction
+
+ @param fRadiusY
+ Radius of the ellipse in Y direction
+ */
+ B2DPolygon createPolygonFromEllipse( const B2DPoint& rCenter, double fRadiusX, double fRadiusY );
+
+ /** Create an unit ellipse polygon with the given angles, from start to end
+ */
+ B2DPolygon createPolygonFromEllipseSegment( const B2DPoint& rCenter, double fRadiusX, double fRadiusY, double fStart, double fEnd );
+
+ B2DPolygon createPolygonFromUnitEllipseSegment( double fStart, double fEnd );
+
+ /** Predicate whether a given polygon is a rectangle.
+
+ @param rPoly
+ Polygon to check
+
+ @return true, if the polygon describes a rectangle
+ (polygon is closed, and the points are either cw or ccw
+ enumerations of a rectangle's vertices). Note that
+ intermediate points and duplicate points are ignored.
+ */
+ bool isRectangle( const B2DPolygon& rPoly );
+
+ // create 3d polygon from given 2d polygon. The given fZCoordinate is used to expand the
+ // third coordinate.
+ B3DPolygon createB3DPolygonFromB2DPolygon(const B2DPolygon& rCandidate, double fZCoordinate = 0.0);
+
+ // create 2d PolyPolygon from given 3d PolyPolygon. All coordinates are transformed using the given
+ // matrix and the resulting x,y is used to form the new polygon.
+ B2DPolygon createB2DPolygonFromB3DPolygon(const B3DPolygon& rCandidate, const B3DHomMatrix& rMat);
+
+ // create simplified version of the original polygon by
+ // replacing segments with spikes/loops and self intersections
+ // by several trivial sub-segments
+ B2DPolygon createSimplifiedPolygon(const B2DPolygon&);
+
+ // calculate the distance to the given endless ray and return. The relative position on the edge is returned in Cut.
+ // That position may be less than 0.0 or more than 1.0
+ double getDistancePointToEndlessRay(const B2DPoint& rPointA, const B2DPoint& rPointB, const B2DPoint& rTestPoint, double& rCut);
+
+ // calculate the smallest distance to given edge and return. The relative position on the edge is returned in Cut.
+ // That position is in the range [0.0 .. 1.0] and the returned distance is adapted accordingly to the start or end
+ // point of the edge
+ double getSmallestDistancePointToEdge(const B2DPoint& rPointA, const B2DPoint& rPointB, const B2DPoint& rTestPoint, double& rCut);
+
+ // for each contained edge calculate the smallest distance. Return the index to the smallest
+ // edge in rEdgeIndex. The relative position on the edge is returned in rCut.
+ // If nothing was found (e.g. empty input plygon), DBL_MAX is returned.
+ double getSmallestDistancePointToPolygon(const B2DPolygon& rCandidate, const B2DPoint& rTestPoint, sal_uInt32& rEdgeIndex, double& rCut);
+
+ // distort single point. rOriginal describes the original range, where the given points describe the distorted corresponding points.
+ B2DPoint distort(const B2DPoint& rCandidate, const B2DRange& rOriginal, const B2DPoint& rTopLeft, const B2DPoint& rTopRight, const B2DPoint& rBottomLeft, const B2DPoint& rBottomRight);
+
+ // distort polygon. rOriginal describes the original range, where the given points describe the distorted corresponding points.
+ B2DPolygon distort(const B2DPolygon& rCandidate, const B2DRange& rOriginal, const B2DPoint& rTopLeft, const B2DPoint& rTopRight, const B2DPoint& rBottomLeft, const B2DPoint& rBottomRight);
+
+ // rotate polygon around given point with given angle.
+ B2DPolygon rotateAroundPoint(const B2DPolygon& rCandidate, const B2DPoint& rCenter, double fAngle);
+
+ // expand all segments (which are not yet) to curve segments. This is done with setting the control
+ // vectors on the 1/3 resp. 2/3 distances on each segment.
+ B2DPolygon expandToCurve(const B2DPolygon& rCandidate);
+
+ // expand given segment to curve segment. This is done with setting the control
+ // vectors on the 1/3 resp. 2/3 distances. The return value describes if a change took place.
+ bool expandToCurveInPoint(B2DPolygon& rCandidate, sal_uInt32 nIndex);
+
+ // set continuity for the whole curve. If not a curve, nothing will change. Non-curve points are not changed, too.
+ B2DPolygon setContinuity(const B2DPolygon& rCandidate, B2VectorContinuity eContinuity);
+
+ // set continuity for given index. If not a curve, nothing will change. Non-curve points are not changed, too.
+ // The return value describes if a change took place.
+ bool setContinuityInPoint(B2DPolygon& rCandidate, sal_uInt32 nIndex, B2VectorContinuity eContinuity);
+
+ // test if polygon contains neutral points. A neutral point is one whos orientation is neutral
+ // e.g. positioned on the edge of it's predecessor and successor
+ bool hasNeutralPoints(const B2DPolygon& rCandidate);
+
+ // remove neutral points. A neutral point is one whos orientation is neutral
+ // e.g. positioned on the edge of it's predecessor and successor
+ B2DPolygon removeNeutralPoints(const B2DPolygon& rCandidate);
+
+ // tests if polygon is convex
+ bool isConvex(const B2DPolygon& rCandidate);
+
+ // calculates the orientation at edge nIndex
+ B2VectorOrientation getOrientationForIndex(const B2DPolygon& rCandidate, sal_uInt32 nIndex);
+
+ // calculates if given point is on given line, taking care of the numerical epsilon
+ bool isPointOnLine(const B2DPoint& rStart, const B2DPoint& rEnd, const B2DPoint& rCandidate, bool bWithPoints = false);
+
+ // calculates if given point is on given polygon, taking care of the numerical epsilon. Uses
+ // isPointOnLine internally
+ bool isPointOnPolygon(const B2DPolygon& rCandidate, const B2DPoint& rPoint, bool bWithPoints = true);
+
+ // test if candidate is inside triangle
+ bool isPointInTriangle(const B2DPoint& rA, const B2DPoint& rB, const B2DPoint& rC, const B2DPoint& rCandidate, bool bWithBorder = false);
+
+ // test if candidateA and candidateB are on the same side of the given line
+ bool arePointsOnSameSideOfLine(const B2DPoint& rStart, const B2DPoint& rEnd, const B2DPoint& rCandidateA, const B2DPoint& rCandidateB, bool bWithLine = false);
+
+ // add triangles for given rCandidate to rTarget. For each triangle, 3 points will be added to rCandidate.
+ // All triangles will go from the start point of rCandidate to two consecutive points, building (rCandidate.count() - 2)
+ // triangles.
+ void addTriangleFan(const B2DPolygon& rCandidate, B2DPolygon& rTarget);
+
+ // grow for polygon. Move all geometry in each point in the direction of the normal in that point
+ // with the given amount. Value may be negative.
+ B2DPolygon growInNormalDirection(const B2DPolygon& rCandidate, double fValue);
+
+ // force all sub-polygons to a point count of nSegments
+ B2DPolygon reSegmentPolygon(const B2DPolygon& rCandidate, sal_uInt32 nSegments);
+
+ // create polygon state at t from 0.0 to 1.0 between the two polygons. Both polygons must have the same
+ // organisation, e.g. same amount of points
+ B2DPolygon interpolate(const B2DPolygon& rOld1, const B2DPolygon& rOld2, double t);
+
+ bool isPolyPolygonEqualRectangle( const B2DPolyPolygon& rPolyPoly, const B2DRange& rRect );
+
+ // #i76891# Try to remove existing curve segments if they are simply edges
+ B2DPolygon simplifyCurveSegments(const B2DPolygon& rCandidate);
+
+ // makes the given indexed point the new polygon start point. To do that, the points in the
+ // polygon will be rotated. This is only valid for closed polygons, for non-closed ones
+ // an assertion will be triggered
+ B2DPolygon makeStartPoint(const B2DPolygon& rCandidate, sal_uInt32 nIndexOfNewStatPoint);
+
+ /** create edges of given length along given B2DPolygon
+
+ @param rCandidate
+ The polygon to move along. Points at the given polygon are created, starting
+ at position fStart and stopping at less or equal to fEnd. The closed state is
+ preserved.
+ The polygon is subdivided if curve segments are included. That subdivision is the base
+ for the newly created points.
+ If the source is closed, the indirectly existing last edge may NOT have the
+ given length.
+ If the source is open, all edges will have the given length. You may use the last
+ point of the original when You want to add the last edge Yourself.
+
+ @param fLength
+ The length of the created edges. If less or equal zero, an empty polygon is returned.
+
+ @param fStart
+ The start distance for the first to be generated point. Use 0.0 to get the
+ original start point. Negative values are truncated to 0.0.
+
+ @param fEnd
+ The maximum distance for the last point. No more points behind this distance will be created.
+ Use 0.0 to proccess the whole polygon. Negative values are truncated to 0.0. It also
+ needs to be more or equal to fStart, else it is truncated to fStart.
+
+ @return
+ The newly created polygon
+ */
+ B2DPolygon createEdgesOfGivenLength(const B2DPolygon& rCandidate, double fLength, double fStart = 0.0, double fEnd = 0.0);
+
+ /** Create Waveline along given polygon
+ The implementation is based on createEdgesOfGivenLength and creates a curve
+ segment with the given dimensions for each created line segment. The polygon
+ is treated as if opened (closed state will be ignored) and only for whole
+ edges a curve segment will be created (no rest handling)
+
+ @param rCandidate
+ The polygon along which the waveline will be created
+
+ @param fWaveWidth
+ The length of a single waveline curve segment
+
+ @param fgWaveHeight
+ The height of the waveline (amplitude)
+ */
+ B2DPolygon createWaveline(const B2DPolygon& rCandidate, double fWaveWidth, double fWaveHeight);
+
+ /** split each edge of a polygon in exactly nSubEdges equidistant edges
+
+ @param rCandidate
+ The source polygon. If too small (no edges), nSubEdges too small (<2)
+ or neither bHandleCurvedEdgesnor bHandleStraightEdges it will just be returned.
+ Else for each edge nSubEdges will be created. Closed state is preserved.
+
+ @param nSubEdges
+ How many edges shall be created as replacement for each single edge
+
+ @param bHandleCurvedEdges
+ Process curved edges or not. If to handle the curved edges will be splitted
+ into nSubEdges part curved edges of equidistant bezier distances. If not,
+ curved edges will just be copied.
+
+ @param bHandleStraightEdges
+ Process straight edges or not. If to handle the straight edges will be splitted
+ into nSubEdges part curved edges of equidistant length. If not,
+ straight edges will just be copied.
+ */
+ B2DPolygon reSegmentPolygonEdges(const B2DPolygon& rCandidate, sal_uInt32 nSubEdges, bool bHandleCurvedEdges, bool bHandleStraightEdges);
+
+ //////////////////////////////////////////////////////////////////////
+ // comparators with tolerance for 2D Polygons
+ bool equal(const B2DPolygon& rCandidateA, const B2DPolygon& rCandidateB, const double& rfSmallValue);
+ bool equal(const B2DPolygon& rCandidateA, const B2DPolygon& rCandidateB);
+
+ /** snap some polygon coordinates to discrete coordinates
+
+ This method allows to snap some polygon points to discrete (integer) values
+ which equals e.g. a snap to discrete coordinates. It will snap points of
+ horizontal and vertical edges
+
+ @param rCandidate
+ The source polygon
+
+ @return
+ The modified version of the source polygon
+ */
+ B2DPolygon snapPointsOfHorizontalOrVerticalEdges(const B2DPolygon& rCandidate);
+
+ } // end of namespace tools
+} // end of namespace basegfx
+
+#endif /* _BGFX_POLYGON_B2DPOLYGONTOOLS_HXX */
diff --git a/basegfx/inc/basegfx/polygon/b2dpolygontriangulator.hxx b/basegfx/inc/basegfx/polygon/b2dpolygontriangulator.hxx
new file mode 100644
index 000000000000..e23d640b8833
--- /dev/null
+++ b/basegfx/inc/basegfx/polygon/b2dpolygontriangulator.hxx
@@ -0,0 +1,49 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_POLYGON_B2DPOLYGONTRIANGULATOR_HXX
+#define _BGFX_POLYGON_B2DPOLYGONTRIANGULATOR_HXX
+
+#include <basegfx/polygon/b2dpolypolygon.hxx>
+#include <vector>
+
+//////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+ namespace triangulator
+ {
+ // triangulate given polygon
+ ::basegfx::B2DPolygon triangulate(const ::basegfx::B2DPolygon& rCandidate);
+
+ // triangulate given PolyPolygon
+ ::basegfx::B2DPolygon triangulate(const ::basegfx::B2DPolyPolygon& rCandidate);
+
+ } // end of namespace triangulator
+} // end of namespace basegfx
+
+#endif /* _BGFX_POLYGON_B2DPOLYGONTRIANGULATOR_HXX */
diff --git a/basegfx/inc/basegfx/polygon/b2dpolypolygon.hxx b/basegfx/inc/basegfx/polygon/b2dpolypolygon.hxx
new file mode 100644
index 000000000000..0032cc47ce4e
--- /dev/null
+++ b/basegfx/inc/basegfx/polygon/b2dpolypolygon.hxx
@@ -0,0 +1,137 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_POLYGON_B2DPOLYPOLYGON_HXX
+#define _BGFX_POLYGON_B2DPOLYPOLYGON_HXX
+
+#include <sal/types.h>
+#include <o3tl/cow_wrapper.hxx>
+#include <basegfx/range/b2drange.hxx>
+
+// predeclarations
+class ImplB2DPolyPolygon;
+
+namespace basegfx
+{
+ class B2DPolygon;
+ class B2DHomMatrix;
+} // end of namespace basegfx
+
+//////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+ class B2DPolyPolygon
+ {
+ public:
+ typedef o3tl::cow_wrapper< ImplB2DPolyPolygon > ImplType;
+
+ private:
+ ImplType mpPolyPolygon;
+
+ public:
+ B2DPolyPolygon();
+ B2DPolyPolygon(const B2DPolyPolygon& rPolyPolygon);
+ explicit B2DPolyPolygon(const B2DPolygon& rPolygon);
+ ~B2DPolyPolygon();
+
+ // assignment operator
+ B2DPolyPolygon& operator=(const B2DPolyPolygon& rPolyPolygon);
+
+ /// unshare this poly-polygon (and all included polygons) with all internally shared instances
+ void makeUnique();
+
+ // compare operators
+ bool operator==(const B2DPolyPolygon& rPolyPolygon) const;
+ bool operator!=(const B2DPolyPolygon& rPolyPolygon) const;
+
+ // polygon interface
+ sal_uInt32 count() const;
+
+ B2DPolygon getB2DPolygon(sal_uInt32 nIndex) const;
+ void setB2DPolygon(sal_uInt32 nIndex, const B2DPolygon& rPolygon);
+
+ // test for curve
+ bool areControlPointsUsed() const;
+
+ // insert/append single polygon
+ void insert(sal_uInt32 nIndex, const B2DPolygon& rPolygon, sal_uInt32 nCount = 1);
+ void append(const B2DPolygon& rPolygon, sal_uInt32 nCount = 1);
+
+ /** Default adaptive subdivision access
+
+ For details refer to B2DPolygon::getDefaultAdaptiveSubdivision()
+
+ @return
+ The default subdivision of this polygon
+ */
+ B2DPolyPolygon getDefaultAdaptiveSubdivision() const;
+
+ /** Get the B2DRange (Rectangle dimensions) of this B2DPolyPolygon
+
+ For details refer to B2DPolygon::getB2DRange()
+
+ @return
+ The outer range of the bezier curve/polygon
+ */
+ B2DRange getB2DRange() const;
+
+ // insert/append multiple polygons
+ void insert(sal_uInt32 nIndex, const B2DPolyPolygon& rPolyPolygon);
+ void append(const B2DPolyPolygon& rPolyPolygon);
+
+ // remove
+ void remove(sal_uInt32 nIndex, sal_uInt32 nCount = 1);
+
+ // reset to empty state
+ void clear();
+
+ // closed state
+ bool isClosed() const;
+ void setClosed(bool bNew);
+
+ // flip polygon direction
+ void flip();
+
+ // test if PolyPolygon has double points
+ bool hasDoublePoints() const;
+
+ // remove double points, at the begin/end and follow-ups, too
+ void removeDoublePoints();
+
+ // apply transformation given in matrix form to the polygon
+ void transform(const basegfx::B2DHomMatrix& rMatrix);
+
+ // polygon iterators (same iterator validity conditions as for vector)
+ const B2DPolygon* begin() const;
+ const B2DPolygon* end() const;
+ B2DPolygon* begin();
+ B2DPolygon* end();
+ };
+} // end of namespace basegfx
+
+#endif /* _BGFX_POLYGON_B2DPOLYPOLYGON_HXX */
diff --git a/basegfx/inc/basegfx/polygon/b2dpolypolygoncutter.hxx b/basegfx/inc/basegfx/polygon/b2dpolypolygoncutter.hxx
new file mode 100644
index 000000000000..7e648302c5e5
--- /dev/null
+++ b/basegfx/inc/basegfx/polygon/b2dpolypolygoncutter.hxx
@@ -0,0 +1,119 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_POLYGON_B2DPOLYPOLYGONCUTTER_HXX
+#define _BGFX_POLYGON_B2DPOLYPOLYGONCUTTER_HXX
+
+#include <basegfx/polygon/b2dpolypolygon.hxx>
+
+//////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+ namespace tools
+ {
+ // Solve all crossovers in a polyPolygon. This re-layouts all contained polygons so that the
+ // result will contain only non-cutting polygons. For that reason, points will be added at
+ // crossover and touch points and the single Polygons may be re-combined. The orientations
+ // of the contained polygons in not changed but used as topological information.
+ // Self crossovers of the contained sub-polygons are implicitely handled, but to not lose
+ // the topological information, it may be necessary to remove self-intersections of the
+ // contained sub-polygons in a preparing step and to explicitely correct their orientations.
+ B2DPolyPolygon solveCrossovers(const B2DPolyPolygon& rCandidate);
+
+ // Version for single polygons. This is for solving self-intersections. Result will be free of
+ // crossovers. When result contains multiple polygons, it may be necessary to rearrange their
+ // orientations since holes may have been created (use correctOrientations eventually).
+ B2DPolyPolygon solveCrossovers(const B2DPolygon& rCandidate);
+
+ // Neutral polygons will be stripped. Neutral polygons are ones who's orientation is
+ // neutral, so normally they have no volume -> just closed paths. A polygon with the same
+ // positive and negative oriented volume is also neutral, so this may not be wanted. It is
+ // safe to call with crossover-free polygons, though (that's where it's mostly used).
+ B2DPolyPolygon stripNeutralPolygons(const B2DPolyPolygon& rCandidate);
+
+ // Remove not necessary polygons. Works only correct with crossover-free polygons. For each
+ // polygon, the depth for the PolyPolygon is calculated. The orientation is used to identify holes.
+ // Start value for holes is -1, for polygons it's zero. Ech time a polygon is contained in another one,
+ // it's depth is increased when inside a polygon, decreased when inside a hole. The result is a depth
+ // which e.g. is -1 for holes outside everything, 1 for a polygon covered by another polygon and zero
+ // for e.g. holes in a polygon or polygons outside everythig else.
+ // In the 2nd step, all polygons with depth other than zero are removed. If bKeepAboveZero is used,
+ // all polygons < 1 are removed. The bKeepAboveZero mode is useful for clipping, e.g. just append
+ // one polygon to another and use this mode -> only parts where two polygons overlapped will be kept.
+ // In combination with correct orientation of the input orientations and the SolveCrossover calls this
+ // can be combined for logical polygon operations or polygon clipping.
+ B2DPolyPolygon stripDispensablePolygons(const B2DPolyPolygon& rCandidate, bool bKeepAboveZero = false);
+
+ // For convenience: The four basic operations OR, XOR, AND and DIFF for
+ // two PolyPolygons. These are combinations of the above methods. To not be forced
+ // to do evtl. already done preparations twice, You have to do the operations Yourself.
+ //
+ // A source preparation consists of preparing it to be seen as XOR-Rule PolyPolygon,
+ // so it is freed of intersections, self-intersections and the orientations are corrected.
+ // Important is that it will define the same areas as before, but is intersection-free.
+ // As an example think about a single polygon looping in itself and having holes. To
+ // topologically correctly handle this, it is necessary to remove all intersections and
+ // to correct the orientations. The orientation of the isolated holes e.g. will be negative.
+ // Topologically it is necessary to prepare each polygon which is seen as entity. It is
+ // not sufficient just to concatenate them and prepare the result, this may be topologically
+ // different since the simple concatenation will be seen as XOR. To work correctly, You
+ // may need to OR those polygons.
+
+ // Preparations: solve self-intersections and intersections, remove neutral
+ // parts and correct orientations.
+ B2DPolyPolygon prepareForPolygonOperation(const B2DPolygon& rCandidate);
+ B2DPolyPolygon prepareForPolygonOperation(const B2DPolyPolygon& rCandidate);
+
+ // OR: Return all areas where CandidateA or CandidateB exist
+ B2DPolyPolygon solvePolygonOperationOr(const B2DPolyPolygon& rCandidateA, const B2DPolyPolygon& rCandidateB);
+
+ // XOR: Return all areas where CandidateA or CandidateB exist, but not both
+ B2DPolyPolygon solvePolygonOperationXor(const B2DPolyPolygon& rCandidateA, const B2DPolyPolygon& rCandidateB);
+
+ // AND: Return all areas where CandidateA and CandidateB exist
+ B2DPolyPolygon solvePolygonOperationAnd(const B2DPolyPolygon& rCandidateA, const B2DPolyPolygon& rCandidateB);
+
+ // DIFF: Return all areas where CandidateA is not covered by CandidateB (cut B out of A)
+ B2DPolyPolygon solvePolygonOperationDiff(const B2DPolyPolygon& rCandidateA, const B2DPolyPolygon& rCandidateB);
+
+ /** merge all single PolyPolygons to a single, OR-ed PolyPolygon
+
+ @param rInput
+ The source PolyPolygons
+
+ @return A single PolyPolygon containing the Or-merged result
+ */
+ B2DPolyPolygon mergeToSinglePolyPolygon(const std::vector< basegfx::B2DPolyPolygon >& rInput);
+
+ } // end of namespace tools
+} // end of namespace basegfx
+
+//////////////////////////////////////////////////////////////////////////////
+
+
+#endif /* _BGFX_POLYGON_B2DPOLYPOLYGONCUTTER_HXX */
diff --git a/basegfx/inc/basegfx/polygon/b2dpolypolygonfillrule.hxx b/basegfx/inc/basegfx/polygon/b2dpolypolygonfillrule.hxx
new file mode 100644
index 000000000000..f5ceb67586e8
--- /dev/null
+++ b/basegfx/inc/basegfx/polygon/b2dpolypolygonfillrule.hxx
@@ -0,0 +1,60 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_POLYGON_B2DPOLYPOLYGONFILLRULE_HXX
+#define _BGFX_POLYGON_B2DPOLYPOLYGONFILLRULE_HXX
+
+#include <sal/types.h>
+
+//////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+ /** Fill rule to use for poly-polygon filling.
+
+ The fill rule determines which areas are inside, and which are
+ outside the poly-polygon.
+ */
+ enum FillRule
+ {
+ /** Areas, for which a scanline has crossed an odd number of
+ vertices, are regarded 'inside', the remainder 'outside'
+ of the poly-polygon.
+ */
+ FillRule_EVEN_ODD,
+
+ /** For each edge a scanline crosses, a current winding number
+ is updated. Downward edges count +1, upward edges count
+ -1. If the total accumulated winding number for one area
+ is not zero, this area is regarded 'inside', otherwise,
+ 'outside'.
+ */
+ FillRule_NONZERO_WINDING_NUMBER
+ };
+}
+
+#endif /* _BGFX_POLYGON_B2DPOLYPOLYGONFILLRULE_HXX */
diff --git a/basegfx/inc/basegfx/polygon/b2dpolypolygonrasterconverter.hxx b/basegfx/inc/basegfx/polygon/b2dpolypolygonrasterconverter.hxx
new file mode 100644
index 000000000000..a77f1a371a8a
--- /dev/null
+++ b/basegfx/inc/basegfx/polygon/b2dpolypolygonrasterconverter.hxx
@@ -0,0 +1,141 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_POLYGON_B2DPOLYPOLYGONRASTERCONVERTER_HXX
+#define _BGFX_POLYGON_B2DPOLYPOLYGONRASTERCONVERTER_HXX
+
+#include <basegfx/point/b2dpoint.hxx>
+#include <basegfx/range/b2drectangle.hxx>
+#include <basegfx/polygon/b2dpolypolygon.hxx>
+#include <basegfx/polygon/b2dpolypolygonfillrule.hxx>
+#include <vector>
+#include <utility>
+
+//////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+ /** Raster-convert a poly-polygon.
+
+ This class can raster-convert a given poly-polygon. Simply
+ derive from this, and override the span() method, which will
+ get called for every scanline span of the poly-polygon.
+
+ @derive
+ Overwrite span() with the render output method of your choice.
+ */
+ class B2DPolyPolygonRasterConverter
+ {
+ public:
+ /** Create raster-converter for given poly-polygon
+ */
+ B2DPolyPolygonRasterConverter(const B2DPolyPolygon& rPolyPolyRaster);
+
+ /** Create raster-converter for given poly-polygon and raster
+ area.
+
+ @param rPolyPolyRaster
+ Poly-Polygon to raster convert
+
+ @param rMinUpdateArea
+ Minimal area to touch when raster-converting. The
+ rectangle given here is guaranteed to be iterated through
+ scanline by scanline (but the raster converter might
+ actually use more scanlines, e.g. if the poly-polygon's
+ bound rect is larger). One of the cases where this
+ parameter comes in handy is when rendering in the 'off'
+ spans, and a certain area must be filled. <em>Do not</em>
+ use this for clipping, as described above, the touched
+ area might also be larger.
+ */
+ B2DPolyPolygonRasterConverter(const B2DPolyPolygon& rPolyPolyRaster,
+ const B2DRectangle& rRasterArea );
+
+ virtual ~B2DPolyPolygonRasterConverter();
+
+ /** Raster-convert the contained poly-polygon
+
+ @param eFillRule
+ Fill rule to use for span filling
+ */
+ void rasterConvert( FillRule eFillRule);
+
+ /** Override this method, to be called for every scanline span
+ of the poly-polygon
+
+ @param rfXLeft
+ The left end of the current horizontal span
+
+ @param rfXRight
+ The right end of the current horizontal span
+
+ @param nY
+ The y position of the current horizontal span
+
+ @param bOn
+ Denotes whether this span is on or off, according to the
+ active fill rule.
+ */
+ virtual void span(const double& rfXLeft,
+ const double& rfXRight,
+ sal_Int32 nY,
+ bool bOn ) = 0;
+
+ /// @internal
+ struct Vertex
+ {
+ inline Vertex();
+ inline Vertex( const B2DPoint&, const B2DPoint&, bool );
+
+ B2DPoint aP1;
+ B2DPoint aP2;
+ bool bDownwards;
+ };
+
+ private:
+ // default: disabled copy/assignment
+ B2DPolyPolygonRasterConverter(const B2DPolyPolygonRasterConverter&);
+ B2DPolyPolygonRasterConverter& operator=( const B2DPolyPolygonRasterConverter& );
+
+ void init();
+
+ typedef ::std::vector<Vertex> VectorOfVertices;
+ typedef ::std::vector<VectorOfVertices> VectorOfVertexVectors;
+
+ /// The poly-polygon to raster-convert
+ B2DPolyPolygon maPolyPolygon;
+ /// Total bound rect of the poly-polygon
+ const B2DRectangle maPolyPolyRectangle;
+
+ /** Vector containing for each scanline a vector which in turn
+ contains all vertices that start on the specific scanline
+ */
+ VectorOfVertexVectors maScanlines;
+ };
+}
+
+#endif /* _BGFX_POLYGON_B2DPOLYPOLYGONRASTERCONVERTER_HXX */
diff --git a/basegfx/inc/basegfx/polygon/b2dpolypolygontools.hxx b/basegfx/inc/basegfx/polygon/b2dpolypolygontools.hxx
new file mode 100644
index 000000000000..1115a96ef8da
--- /dev/null
+++ b/basegfx/inc/basegfx/polygon/b2dpolypolygontools.hxx
@@ -0,0 +1,279 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_POLYPOLYGON_B2DPOLYGONTOOLS_HXX
+#define _BGFX_POLYPOLYGON_B2DPOLYGONTOOLS_HXX
+
+#include <basegfx/point/b2dpoint.hxx>
+#include <basegfx/vector/b2dvector.hxx>
+#include <basegfx/polygon/b2dpolygon.hxx>
+#include <basegfx/polygon/b3dpolypolygon.hxx>
+#include <vector>
+
+namespace rtl
+{
+ class OUString;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+ // predefinitions
+ class B2DPolyPolygon;
+ class B2DRange;
+
+ namespace tools
+ {
+ // B2DPolyPolygon tools
+
+ // Check and evtl. correct orientations of all contained Polygons so that
+ // the orientations of contained polygons will variate to express areas and
+ // holes
+ B2DPolyPolygon correctOrientations(const B2DPolyPolygon& rCandidate);
+
+ // make sure polygon with index 0L is not a hole. This may evtl. change the
+ // sequence of polygons, but allows to use polygon with index 0L to
+ // get the correct normal for the whole polyPolygon
+ B2DPolyPolygon correctOutmostPolygon(const B2DPolyPolygon& rCandidate);
+
+ // Subdivide all contained curves. Use distanceBound value if given.
+ B2DPolyPolygon adaptiveSubdivideByDistance(const B2DPolyPolygon& rCandidate, double fDistanceBound = 0.0);
+
+ // Subdivide all contained curves. Use distanceBound value if given. Else, a convenient one
+ // is created.
+ B2DPolyPolygon adaptiveSubdivideByAngle(const B2DPolyPolygon& rCandidate, double fAngleBound = 0.0);
+
+ // Subdivide all contained curves. Use nCount divisions if given. Else, a convenient one
+ // is created.
+ B2DPolyPolygon adaptiveSubdivideByCount(const B2DPolyPolygon& rCandidate, sal_uInt32 nCount = 0L);
+
+ // isInside test for B2dPoint. On border is not inside as long as not true is given
+ // in bWithBorder flag. It is assumed that the orientations of the given polygon are correct.
+ bool isInside(const B2DPolyPolygon& rCandidate, const B2DPoint& rPoint, bool bWithBorder = false);
+
+ /** get range of PolyPolygon. Control points are included.
+
+ For detailed description look at getRangeWithControlPoints(const B2DPolygon&).
+ This method just expands by the range of every sub-Polygon.
+
+ @param rCandidate
+ The B2DPolyPolygon eventually containing bezier segments
+
+ @return
+ The outer range including control points
+ */
+ B2DRange getRangeWithControlPoints(const B2DPolyPolygon& rCandidate);
+
+ /** Get the range of a polyPolygon
+
+ For detailed description look at getRange(const B2DPolygon&).
+ This method just expands by the range of every sub-Polygon.
+
+ @param rCandidate
+ The B2DPolyPolygon eventually containing bezier segments
+
+ @return
+ The outer range of the polygon
+ */
+ B2DRange getRange(const B2DPolyPolygon& rCandidate);
+
+ /** Apply given LineDashing to given polyPolygon
+
+ For a description see applyLineDashing in b2dpolygontoos.hxx
+ */
+ void applyLineDashing(
+ const B2DPolyPolygon& rCandidate,
+ const ::std::vector<double>& rDotDashArray,
+ B2DPolyPolygon* pLineTarget,
+ B2DPolyPolygon* pGapTarget = 0,
+ double fFullDashDotLen = 0.0);
+
+ // test if point is inside epsilon-range around the given PolyPolygon. Can be used
+ // for HitTesting. The epsilon-range is defined to be the tube around the PolyPolygon
+ // with distance fDistance and rounded edges (start and end point).
+ bool isInEpsilonRange(const B2DPolyPolygon& rCandidate, const B2DPoint& rTestPosition, double fDistance);
+
+ /** Read poly-polygon from SVG.
+
+ This function imports a poly-polygon from an SVG-D
+ attribute. Currently, elliptical arc elements are not yet
+ supported (and ignored during parsing).
+
+ @param o_rPolyPoly
+ The output poly-polygon
+
+ @param rSvgDAttribute
+ A valid SVG-D attribute string
+
+ @return true, if the string was successfully parsed
+ */
+ bool importFromSvgD( B2DPolyPolygon& o_rPolyPoly,
+ const ::rtl::OUString& rSvgDAttribute );
+
+ /** Read poly-polygon from SVG.
+
+ This function imports a poly-polygon from an SVG points
+ attribute (a plain list of coordinate pairs).
+
+ @param o_rPoly
+ The output polygon. Note that svg:points can only define a
+ single polygon
+
+ @param rSvgPointsAttribute
+ A valid SVG points attribute string
+
+ @return true, if the string was successfully parsed
+ */
+ bool importFromSvgPoints( B2DPolygon& o_rPoly,
+ const ::rtl::OUString& rSvgPointsAttribute );
+
+
+ // grow for polyPolygon. Move all geometry in each point in the direction of the normal in that point
+ // with the given amount. Value may be negative.
+ B2DPolyPolygon growInNormalDirection(const B2DPolyPolygon& rCandidate, double fValue);
+
+ // This method will correct a pair of polyPolygons where the goal is to keep same point count
+ // to allow direct point association and also to remove self-intersections produced by shrinks.
+ // This method will eventually change both polyPolygons to reach that goal because there are cases
+ // where it is necessary to add new cut points to the original
+ void correctGrowShrinkPolygonPair(B2DPolyPolygon& rOriginal, B2DPolyPolygon& rGrown);
+
+ // force all sub-polygons to a point count of nSegments
+ B2DPolyPolygon reSegmentPolyPolygon(const B2DPolyPolygon& rCandidate, sal_uInt32 nSegments);
+
+ // create polygon state at t from 0.0 to 1.0 between the two polygons. Both polygons must have the same
+ // organisation, e.g. same amount of polygons
+ B2DPolyPolygon interpolate(const B2DPolyPolygon& rOld1, const B2DPolyPolygon& rOld2, double t);
+
+ // create 3d PolyPolygon from given 2d PolyPolygon. The given fZCoordinate is used to expand the
+ // third coordinate.
+ B3DPolyPolygon createB3DPolyPolygonFromB2DPolyPolygon(const B2DPolyPolygon& rCandidate, double fZCoordinate = 0.0);
+
+ // create 2d PolyPolygon from given 3d PolyPolygon. All coordinates are transformed using the given
+ // matrix and the resulting x,y is used to form the new polygon.
+ B2DPolyPolygon createB2DPolyPolygonFromB3DPolyPolygon(const B3DPolyPolygon& rCandidate, const B3DHomMatrix& rMat);
+
+ // for each contained edge in each contained polygon calculate the smallest distance. Return the index to the smallest
+ // edge in rEdgeIndex and the index to the polygon in rPolygonIndex. The relative position on the edge is returned in rCut.
+ // If nothing was found (e.g. empty input plygon), DBL_MAX is returned.
+ double getSmallestDistancePointToPolyPolygon(const B2DPolyPolygon& rCandidate, const B2DPoint& rTestPoint, sal_uInt32& rPolygonIndex, sal_uInt32& rEdgeIndex, double& rCut);
+
+ // distort PolyPolygon. rOriginal describes the original range, where the given points describe the distorted
+ // corresponding points.
+ B2DPolyPolygon distort(const B2DPolyPolygon& rCandidate, const B2DRange& rOriginal, const B2DPoint& rTopLeft, const B2DPoint& rTopRight, const B2DPoint& rBottomLeft, const B2DPoint& rBottomRight);
+
+ // rotate PolyPolygon around given point with given angle.
+ B2DPolyPolygon rotateAroundPoint(const B2DPolyPolygon& rCandidate, const B2DPoint& rCenter, double fAngle);
+
+ // expand all segments (which are not yet) to curve segments. This is done with setting the control
+ // vectors on the 1/3 resp. 2/3 distances on each segment.
+ B2DPolyPolygon expandToCurve(const B2DPolyPolygon& rCandidate);
+
+ // set continuity for the whole curve. If not a curve, nothing will change. Non-curve points are not changed, too.
+ B2DPolyPolygon setContinuity(const B2DPolyPolygon& rCandidate, B2VectorContinuity eContinuity);
+
+ /** Predicate whether a given poly-polygon is a rectangle.
+
+ @param rPoly
+ PolyPolygon to check
+
+ @return true, if the poly-polygon describes a rectangle
+ (contains exactly one polygon, polygon is closed, and the
+ points are either cw or ccw enumerations of a rectangle's
+ vertices). Note that intermediate points and duplicate
+ points are ignored.
+ */
+ bool isRectangle( const B2DPolyPolygon& rPoly );
+
+ /** Export poly-polygon to SVG.
+
+ This function exports a poly-polygon into an SVG-D
+ statement. Currently, output of relative point sequences
+ is not yet supported (might cause slightly larger output)
+
+ @param rPolyPoly
+ The poly-polygon to export
+
+ @param bUseRelativeCoordinates
+ When true, all coordinate values are exported as relative
+ to the current position. This tends to save some space,
+ since fewer digits needs to be written.
+
+ @param bDetectQuadraticBeziers
+ When true, the export tries to detect cubic bezier
+ segments in the input polygon, which can be represented by
+ quadratic bezier segments. Note that the generated string
+ causes versions prior to OOo2.0 to crash.
+
+ @return the generated SVG-D statement (the XML d attribute
+ value alone, without any "<path ...>" or "d="...")
+ */
+ ::rtl::OUString exportToSvgD( const B2DPolyPolygon& rPolyPoly,
+ bool bUseRelativeCoordinates=true,
+ bool bDetectQuadraticBeziers=true );
+
+ // #i76891# Try to remove existing curve segments if they are simply edges
+ B2DPolyPolygon simplifyCurveSegments(const B2DPolyPolygon& rCandidate);
+
+ /** split each edge of a polyPolygon in exactly nSubEdges equidistant edges
+
+ @param rCandidate
+ The source polyPolygon. If too small (no edges), nSubEdges too small (<2)
+ or neither bHandleCurvedEdgesnor bHandleStraightEdges it will just be returned.
+ Else for each edge nSubEdges will be created. Closed state is preserved.
+
+ @param nSubEdges
+ @param bHandleCurvedEdges
+ @param bHandleStraightEdges
+ Please take a look at reSegmentPolygonEdges description, these are the same.
+ */
+ B2DPolyPolygon reSegmentPolyPolygonEdges(const B2DPolyPolygon& rCandidate, sal_uInt32 nSubEdges, bool bHandleCurvedEdges, bool bHandleStraightEdges);
+
+ //////////////////////////////////////////////////////////////////////
+ // comparators with tolerance for 2D PolyPolygons
+ bool equal(const B2DPolyPolygon& rCandidateA, const B2DPolyPolygon& rCandidateB, const double& rfSmallValue);
+ bool equal(const B2DPolyPolygon& rCandidateA, const B2DPolyPolygon& rCandidateB);
+
+ /** snap some polygon coordinates to discrete coordinates
+
+ This method allows to snap some polygon points to discrete (integer) values
+ which equals e.g. a snap to discrete coordinates. It will snap points of
+ horizontal and vertical edges
+
+ @param rCandidate
+ The source polygon
+
+ @return
+ The modified version of the source polygon
+ */
+ B2DPolyPolygon snapPointsOfHorizontalOrVerticalEdges(const B2DPolyPolygon& rCandidate);
+
+ } // end of namespace tools
+} // end of namespace basegfx
+
+#endif /* _BGFX_POLYPOLYGON_B2DPOLYGONTOOLS_HXX */
diff --git a/basegfx/inc/basegfx/polygon/b2dtrapezoid.hxx b/basegfx/inc/basegfx/polygon/b2dtrapezoid.hxx
new file mode 100644
index 000000000000..70ffdf2b7339
--- /dev/null
+++ b/basegfx/inc/basegfx/polygon/b2dtrapezoid.hxx
@@ -0,0 +1,132 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: b2dpolygontriangulator.hxx,v $
+ * $Revision: 1.5 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_POLYGON_B2DTRAPEZOID_HXX
+#define _BGFX_POLYGON_B2DTRAPEZOID_HXX
+
+#include <basegfx/polygon/b2dpolygon.hxx>
+#include <basegfx/polygon/b2dpolypolygon.hxx>
+#include <vector>
+
+//////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+ // class to hold a single trapezoid
+ class B2DTrapezoid
+ {
+ private:
+ // Geometry data. YValues are down-oriented, this means bottom should
+ // be bigger than top to be below it. The constructor implementation
+ // guarantees:
+ //
+ // - mfBottomY >= mfTopY
+ // - mfTopXRight >= mfTopXLeft
+ // - mfBottomXRight >= mfBottomXLeft
+ double mfTopXLeft;
+ double mfTopXRight;
+ double mfTopY;
+ double mfBottomXLeft;
+ double mfBottomXRight;
+ double mfBottomY;
+
+ public:
+ // constructor
+ B2DTrapezoid(
+ const double& rfTopXLeft,
+ const double& rfTopXRight,
+ const double& rfTopY,
+ const double& rfBottomXLeft,
+ const double& rfBottomXRight,
+ const double& rfBottomY);
+
+ // data read access
+ const double& getTopXLeft() const { return mfTopXLeft; }
+ const double& getTopXRight() const { return mfTopXRight; }
+ const double& getTopY() const { return mfTopY; }
+ const double& getBottomXLeft() const { return mfBottomXLeft; }
+ const double& getBottomXRight() const { return mfBottomXRight; }
+ const double& getBottomY() const { return mfBottomY; }
+
+ // convenience method to get content as Polygon
+ B2DPolygon getB2DPolygon() const;
+ };
+
+ typedef ::std::vector< B2DTrapezoid > B2DTrapezoidVector;
+
+} // end of namespace basegfx
+
+//////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+ namespace tools
+ {
+ // convert SourcePolyPolygon to trapezoids. The trapezoids will be appended to
+ // ro_Result. ro_Result will not be cleared. If SourcePolyPolygon contains curves,
+ // it's default AdaptiveSubdivision will be used.
+ // CAUTION: Trapezoids are oreintation-dependent in the sense that the upper and lower
+ // lines have to be parallel to the X-Axis, thus this subdivision is NOT simply usable
+ // for primitive decompositions. To use it, the shear and rotate parts of the
+ // involved transformations HAVE to be taken into account.
+ void trapezoidSubdivide(
+ B2DTrapezoidVector& ro_Result,
+ const B2DPolyPolygon& rSourcePolyPolygon);
+
+ // directly create trapezoids from given edge. Depending on the given geometry,
+ // none up to three trapezoids will be created
+ void createLineTrapezoidFromEdge(
+ B2DTrapezoidVector& ro_Result,
+ const B2DPoint& rPointA,
+ const B2DPoint& rPointB,
+ double fLineWidth = 1.0);
+
+ // create trapezoids for all edges of the given polygon. The closed state of
+ // the polygon is taken into account. If curves are contaned, the default
+ // AdaptiveSubdivision will be used.
+ void createLineTrapezoidFromB2DPolygon(
+ B2DTrapezoidVector& ro_Result,
+ const B2DPolygon& rPolygon,
+ double fLineWidth = 1.0);
+
+ // create trapezoids for all edges of the given polyPolygon. The closed state of
+ // the PolyPolygon is taken into account. If curves are contaned, the default
+ // AdaptiveSubdivision will be used.
+ void createLineTrapezoidFromB2DPolyPolygon(
+ B2DTrapezoidVector& ro_Result,
+ const B2DPolyPolygon& rPolyPolygon,
+ double fLineWidth = 1.0);
+
+ } // end of namespace tools
+} // end of namespace basegfx
+
+//////////////////////////////////////////////////////////////////////////////
+
+#endif /* _BGFX_POLYGON_B2DTRAPEZOID_HXX */
diff --git a/basegfx/inc/basegfx/polygon/b3dpolygon.hxx b/basegfx/inc/basegfx/polygon/b3dpolygon.hxx
new file mode 100644
index 000000000000..1732c1338042
--- /dev/null
+++ b/basegfx/inc/basegfx/polygon/b3dpolygon.hxx
@@ -0,0 +1,141 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_POLYGON_B3DPOLYGON_HXX
+#define _BGFX_POLYGON_B3DPOLYGON_HXX
+
+#include <sal/types.h>
+#include <o3tl/cow_wrapper.hxx>
+
+//////////////////////////////////////////////////////////////////////////////
+// predeclarations
+class ImplB3DPolygon;
+
+namespace basegfx
+{
+ class B3DPolygon;
+ class B3DPoint;
+ class B3DHomMatrix;
+ class B3DVector;
+ class B2DPoint;
+ class B2DHomMatrix;
+ class BColor;
+} // end of namespace basegfx
+
+//////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+ class B3DPolygon
+ {
+ public:
+ typedef o3tl::cow_wrapper< ImplB3DPolygon > ImplType;
+
+ private:
+ // internal data.
+ ImplType mpPolygon;
+
+ public:
+ B3DPolygon();
+ B3DPolygon(const B3DPolygon& rPolygon);
+ B3DPolygon(const B3DPolygon& rPolygon, sal_uInt32 nIndex, sal_uInt32 nCount);
+ ~B3DPolygon();
+
+ // assignment operator
+ B3DPolygon& operator=(const B3DPolygon& rPolygon);
+
+ /// unshare this polygon with all internally shared instances
+ void makeUnique();
+
+ // compare operators
+ bool operator==(const B3DPolygon& rPolygon) const;
+ bool operator!=(const B3DPolygon& rPolygon) const;
+
+ // member count
+ sal_uInt32 count() const;
+
+ // Coordinate interface
+ B3DPoint getB3DPoint(sal_uInt32 nIndex) const;
+ void setB3DPoint(sal_uInt32 nIndex, const B3DPoint& rValue);
+
+ // Coordinate insert/append
+ void insert(sal_uInt32 nIndex, const B3DPoint& rPoint, sal_uInt32 nCount = 1);
+ void append(const B3DPoint& rPoint, sal_uInt32 nCount = 1);
+
+ // BColor interface
+ BColor getBColor(sal_uInt32 nIndex) const;
+ void setBColor(sal_uInt32 nIndex, const BColor& rValue);
+ bool areBColorsUsed() const;
+ void clearBColors();
+
+ // Normals interface
+ B3DVector getNormal() const; // plane normal
+ B3DVector getNormal(sal_uInt32 nIndex) const; // normal in each point
+ void setNormal(sal_uInt32 nIndex, const B3DVector& rValue);
+ void transformNormals(const B3DHomMatrix& rMatrix);
+ bool areNormalsUsed() const;
+ void clearNormals();
+
+ // TextureCoordinate interface
+ B2DPoint getTextureCoordinate(sal_uInt32 nIndex) const;
+ void setTextureCoordinate(sal_uInt32 nIndex, const B2DPoint& rValue);
+ void transformTextureCoordiantes(const B2DHomMatrix& rMatrix);
+ bool areTextureCoordinatesUsed() const;
+ void clearTextureCoordinates();
+
+ // insert/append other 2D polygons
+ void insert(sal_uInt32 nIndex, const B3DPolygon& rPoly, sal_uInt32 nIndex2 = 0, sal_uInt32 nCount = 0);
+ void append(const B3DPolygon& rPoly, sal_uInt32 nIndex = 0, sal_uInt32 nCount = 0);
+
+ // remove
+ void remove(sal_uInt32 nIndex, sal_uInt32 nCount = 1);
+
+ // clear all points
+ void clear();
+
+ // closed state
+ bool isClosed() const;
+ void setClosed(bool bNew);
+
+ // flip polygon direction
+ void flip();
+
+ // test if Polygon has double points
+ bool hasDoublePoints() const;
+
+ // remove double points, at the begin/end and follow-ups, too
+ void removeDoublePoints();
+
+ // apply transformation given in matrix form to the polygon
+ void transform(const B3DHomMatrix& rMatrix);
+ };
+} // end of namespace basegfx
+
+//////////////////////////////////////////////////////////////////////////////
+
+
+#endif /* _BGFX_POLYGON_B3DPOLYGON_HXX */
diff --git a/basegfx/inc/basegfx/polygon/b3dpolygonclipper.hxx b/basegfx/inc/basegfx/polygon/b3dpolygonclipper.hxx
new file mode 100644
index 000000000000..71c7f36d50d8
--- /dev/null
+++ b/basegfx/inc/basegfx/polygon/b3dpolygonclipper.hxx
@@ -0,0 +1,86 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_POLYPOLYGON_B3DPOLYGONCLIPPER_HXX
+#define _BGFX_POLYPOLYGON_B3DPOLYGONCLIPPER_HXX
+
+#include <basegfx/polygon/b3dpolypolygon.hxx>
+#include <basegfx/polygon/b3dpolygon.hxx>
+
+//////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+ // predefinitions
+ class B3DRange;
+ class B2DRange;
+
+ namespace tools
+ {
+ /** define for deciding one of X,Y,Z directions
+ */
+ enum B3DOrientation
+ {
+ B3DORIENTATION_X, // X-Axis
+ B3DORIENTATION_Y, // Y-Axis
+ B3DORIENTATION_Z // Z-Axis
+ };
+
+ // Clip given 3D polygon against a plane orthogonal to X,Y or Z axis. The plane is defined using the
+ // enum ePlaneOrthogonal which names the vector orthogonal to the plane, the fPlaneOffset gives the distance
+ // of the plane from the center (0.0).
+ // The value bClipPositive defines on which side the return value will be (true -> on positive side of plane).
+ // The switch bStroke decides if the polygon is interpreted as area (false) or strokes (true).
+ B3DPolyPolygon clipPolyPolygonOnOrthogonalPlane(const B3DPolyPolygon& rCandidate, B3DOrientation ePlaneOrthogonal, bool bClipPositive, double fPlaneOffset, bool bStroke);
+
+ // version for Polygons
+ B3DPolyPolygon clipPolygonOnOrthogonalPlane(const B3DPolygon& rCandidate, B3DOrientation ePlaneOrthogonal, bool bClipPositive, double fPlaneOffset, bool bStroke);
+
+ // Clip the given PolyPolygon against the given range. bInside defines if the result will contain the
+ // parts which are contained in the range or vice versa.
+ // The switch bStroke decides if the polygon is interpreted as area (false) or strokes (true).
+ B3DPolyPolygon clipPolyPolygonOnRange(const B3DPolyPolygon& rCandidate, const B3DRange& rRange, bool bInside, bool bStroke);
+
+ // version for Polygons
+ B3DPolyPolygon clipPolygonOnRange(const B3DPolygon& rCandidate, const B3DRange& rRange, bool bInside, bool bStroke);
+
+ // versions for B2DRange, clips only against X,Y
+ B3DPolyPolygon clipPolyPolygonOnRange(const B3DPolyPolygon& rCandidate, const B2DRange& rRange, bool bInside, bool bStroke);
+ B3DPolyPolygon clipPolygonOnRange(const B3DPolygon& rCandidate, const B2DRange& rRange, bool bInside, bool bStroke);
+
+ // Clip the given PolyPolygon against given plane in 3D. The plane is defined by a plane normal and a point on the plane.
+ // The value bClipPositive defines on which side the return value will be (true -> on positive side of plane).
+ // The switch bStroke decides if the polygon is interpreted as area (false) or strokes (true).
+ B3DPolyPolygon clipPolyPolygonOnPlane(const B3DPolyPolygon& rCandidate, const B3DPoint& rPointOnPlane, const B3DVector& rPlaneNormal, bool bClipPositive, bool bStroke);
+
+ // version for Polygons
+ B3DPolyPolygon clipPolygonOnPlane(const B3DPolygon& rCandidate, const B3DPoint& rPointOnPlane, const B3DVector& rPlaneNormal, bool bClipPositive, bool bStroke);
+
+ } // end of namespace tools
+} // end of namespace basegfx
+
+#endif /* _BGFX_POLYPOLYGON_B3DPOLYGONCLIPPER_HXX */
diff --git a/basegfx/inc/basegfx/polygon/b3dpolygontools.hxx b/basegfx/inc/basegfx/polygon/b3dpolygontools.hxx
new file mode 100644
index 000000000000..7945fc1bde00
--- /dev/null
+++ b/basegfx/inc/basegfx/polygon/b3dpolygontools.hxx
@@ -0,0 +1,191 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_POLYGON_B3DPOLYGONTOOLS_HXX
+#define _BGFX_POLYGON_B3DPOLYGONTOOLS_HXX
+
+#include <basegfx/point/b3dpoint.hxx>
+#include <basegfx/vector/b3dvector.hxx>
+#include <basegfx/polygon/b3dpolypolygon.hxx>
+#include <basegfx/vector/b2enums.hxx>
+#include <vector>
+
+//////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+ // predefinitions
+ class B3DPolygon;
+ class B3DRange;
+
+ namespace tools
+ {
+ // B3DPolygon tools
+
+ /** Check if given polygon is closed. This is kind of a
+ 'classic' method to support old polygon definitions.
+ Those old polygon definitions define the closed state
+ of the polygon using identical start and endpoints. This
+ method corrects this (removes double start/end points)
+ and sets the Closed()-state of the polygon correctly.
+ */
+ void checkClosed(B3DPolygon& rCandidate);
+
+ // Get successor and predecessor indices. Returning the same index means there
+ // is none. Same for successor.
+ sal_uInt32 getIndexOfPredecessor(sal_uInt32 nIndex, const B3DPolygon& rCandidate);
+ sal_uInt32 getIndexOfSuccessor(sal_uInt32 nIndex, const B3DPolygon& rCandidate);
+
+ // Get orientation of Polygon
+ B2VectorOrientation getOrientation(const B3DPolygon& rCandidate);
+
+ // get size of polygon. Control vectors are included in that ranges.
+ B3DRange getRange(const B3DPolygon& rCandidate);
+
+ // get normal vector of polygon
+ B3DVector getNormal(const B3DPolygon& rCandidate);
+
+ // get normal vector of positive oriented polygon
+ B3DVector getPositiveOrientedNormal(const B3DPolygon& rCandidate);
+
+ // get signed area of polygon
+ double getSignedArea(const B3DPolygon& rCandidate);
+
+ // get area of polygon
+ double getArea(const B3DPolygon& rCandidate);
+
+ // get signed area of polygon
+ double getSignedArea(const B3DPolygon& rCandidate);
+
+ // get area of polygon
+ double getArea(const ::basegfx::B3DPolygon& rCandidate);
+
+ // get length of polygon edge from point nIndex to nIndex + 1
+ double getEdgeLength(const B3DPolygon& rCandidate, sal_uInt32 nIndex);
+
+ // get length of polygon
+ double getLength(const B3DPolygon& rCandidate);
+
+ // get position on polygon for absolute given distance. If
+ // length is given, it is assumed the correct polygon length, if 0.0 it is calculated
+ // using getLength(...)
+ B3DPoint getPositionAbsolute(const B3DPolygon& rCandidate, double fDistance, double fLength = 0.0);
+
+ // get position on polygon for relative given distance in range [0.0 .. 1.0]. If
+ // length is given, it is assumed the correct polygon length, if 0.0 it is calculated
+ // using getLength(...)
+ B3DPoint getPositionRelative(const B3DPolygon& rCandidate, double fDistance, double fLength = 0.0);
+
+ /** Apply given LineDashing to given polygon
+
+ For a description see applyLineDashing in b2dpolygontoos.hxx
+ */
+ void applyLineDashing(
+ const B3DPolygon& rCandidate,
+ const ::std::vector<double>& rDotDashArray,
+ B3DPolyPolygon* pLineTarget,
+ B3DPolyPolygon* pGapTarget = 0,
+ double fFullDashDotLen = 0.0);
+
+ /** Create/replace normals for given 3d geometry with default normals from given center to outside.
+ rCandidate: the 3d geometry to change
+ rCenter: the center of the 3d geometry
+ */
+ B3DPolygon applyDefaultNormalsSphere( const B3DPolygon& rCandidate, const B3DPoint& rCenter);
+
+ /** invert normals for given 3d geometry.
+ */
+ B3DPolygon invertNormals( const B3DPolygon& rCandidate);
+
+ /** Create/replace texture coordinates for given 3d geometry with parallel projected one
+ rRange: the full range of the 3d geometry
+ If bChangeX, x texture coordinate will be recalculated.
+ If bChangeY, y texture coordinate will be recalculated.
+ */
+ B3DPolygon applyDefaultTextureCoordinatesParallel( const B3DPolygon& rCandidate, const B3DRange& rRange, bool bChangeX = true, bool bChangeY = true);
+
+ /** Create/replace texture coordinates for given 3d geometry with spherical one
+ rCenter: the centre of the used 3d geometry
+ If bChangeX, x texture coordinate will be recalculated.
+ If bChangeY, y texture coordinate will be recalculated.
+ */
+ B3DPolygon applyDefaultTextureCoordinatesSphere( const B3DPolygon& rCandidate, const B3DPoint& rCenter, bool bChangeX = true, bool bChangeY = true);
+
+ // test if point is inside epsilon-range around an edge defined
+ // by the two given points. Can be used for HitTesting. The epsilon-range
+ // is defined to be the cylinder centered to the given edge, using radius
+ // fDistance, and the sphere around both points with radius fDistance.
+ bool isInEpsilonRange(const B3DPoint& rEdgeStart, const B3DPoint& rEdgeEnd, const B3DPoint& rTestPosition, double fDistance);
+
+ // test if point is inside epsilon-range around the given Polygon. Can be used
+ // for HitTesting. The epsilon-range is defined to be the cylinder centered to
+ // the given edge, using radius fDistance, and the sphere around both points with radius fDistance.
+ bool isInEpsilonRange(const B3DPolygon& rCandidate, const B3DPoint& rTestPosition, double fDistance);
+
+ // isInside tests for B3DPoint and other B3DPolygon. On border is not inside as long as
+ // not true is given in bWithBorder flag.
+ bool isInside(const B3DPolygon& rCandidate, const B3DPoint& rPoint, bool bWithBorder = false);
+ bool isInside(const B3DPolygon& rCandidate, const B3DPolygon& rPolygon, bool bWithBorder = false);
+
+ // calculates if given point is on given line, taking care of the numerical epsilon
+ bool isPointOnLine(const B3DPoint& rStart, const B3DPoint& rEnd, const B3DPoint& rCandidate, bool bWithPoints = false);
+
+ // calculates if given point is on given polygon, taking care of the numerical epsilon. Uses
+ // isPointOnLine internally
+ bool isPointOnPolygon(const B3DPolygon& rCandidate, const B3DPoint& rPoint, bool bWithPoints = true);
+
+ // helper to get a fCut position between a plane (given with normal and a point)
+ // and a line given by start and end point
+ bool getCutBetweenLineAndPlane(const B3DVector& rPlaneNormal, const B3DPoint& rPlanePoint, const B3DPoint& rEdgeStart, const B3DPoint& rEdgeEnd, double& fCut);
+
+ // helper to get a fCut position between a 3d Polygon
+ // and a line given by start and end point
+ bool getCutBetweenLineAndPolygon(const B3DPolygon& rCandidate, const B3DPoint& rEdgeStart, const B3DPoint& rEdgeEnd, double& fCut);
+
+ //////////////////////////////////////////////////////////////////////
+ // comparators with tolerance for 3D Polygons
+ bool equal(const B3DPolygon& rCandidateA, const B3DPolygon& rCandidateB, const double& rfSmallValue);
+ bool equal(const B3DPolygon& rCandidateA, const B3DPolygon& rCandidateB);
+
+ /** snap some polygon coordinates to discrete coordinates
+
+ This method allows to snap some polygon points to discrete (integer) values
+ which equals e.g. a snap to discrete coordinates. It will snap points of
+ horizontal and vertical edges
+
+ @param rCandidate
+ The source polygon
+
+ @return
+ The modified version of the source polygon
+ */
+ B3DPolygon snapPointsOfHorizontalOrVerticalEdges(const B3DPolygon& rCandidate);
+
+ } // end of namespace tools
+} // end of namespace basegfx
+
+#endif /* _BGFX_POLYGON_B3DPOLYGONTOOLS_HXX */
diff --git a/basegfx/inc/basegfx/polygon/b3dpolypolygon.hxx b/basegfx/inc/basegfx/polygon/b3dpolypolygon.hxx
new file mode 100644
index 000000000000..76e0c2f844c0
--- /dev/null
+++ b/basegfx/inc/basegfx/polygon/b3dpolypolygon.hxx
@@ -0,0 +1,125 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_POLYGON_B3DPOLYPOLYGON_HXX
+#define _BGFX_POLYGON_B3DPOLYPOLYGON_HXX
+
+#include <sal/types.h>
+#include <o3tl/cow_wrapper.hxx>
+
+// predeclarations
+class ImplB3DPolyPolygon;
+
+namespace basegfx
+{
+ class B3DPolygon;
+ class B3DHomMatrix;
+ class B2DHomMatrix;
+} // end of namespace basegfx
+
+//////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+ class B3DPolyPolygon
+ {
+ public:
+ typedef o3tl::cow_wrapper< ImplB3DPolyPolygon > ImplType;
+
+ private:
+ ImplType mpPolyPolygon;
+
+ public:
+ B3DPolyPolygon();
+ B3DPolyPolygon(const B3DPolyPolygon& rPolyPolygon);
+ explicit B3DPolyPolygon(const B3DPolygon& rPolygon);
+ ~B3DPolyPolygon();
+
+ // assignment operator
+ B3DPolyPolygon& operator=(const B3DPolyPolygon& rPolyPolygon);
+
+ /// unshare this poly-polygon (and all included polygons) with all internally shared instances
+ void makeUnique();
+
+ // compare operators
+ bool operator==(const B3DPolyPolygon& rPolyPolygon) const;
+ bool operator!=(const B3DPolyPolygon& rPolyPolygon) const;
+
+ // polygon interface
+ sal_uInt32 count() const;
+
+ // B3DPolygon interface
+ B3DPolygon getB3DPolygon(sal_uInt32 nIndex) const;
+ void setB3DPolygon(sal_uInt32 nIndex, const B3DPolygon& rPolygon);
+
+ // BColor interface
+ bool areBColorsUsed() const;
+ void clearBColors();
+
+ // Normals interface
+ void transformNormals(const B3DHomMatrix& rMatrix);
+ bool areNormalsUsed() const;
+ void clearNormals();
+
+ // TextureCoordinate interface
+ void transformTextureCoordiantes(const B2DHomMatrix& rMatrix);
+ bool areTextureCoordinatesUsed() const;
+ void clearTextureCoordinates();
+
+ // insert/append single polygon
+ void insert(sal_uInt32 nIndex, const B3DPolygon& rPolygon, sal_uInt32 nCount = 1);
+ void append(const B3DPolygon& rPolygon, sal_uInt32 nCount = 1);
+
+ // insert/append multiple polygons
+ void insert(sal_uInt32 nIndex, const B3DPolyPolygon& rPolyPolygon);
+ void append(const B3DPolyPolygon& rPolyPolygon);
+
+ // remove
+ void remove(sal_uInt32 nIndex, sal_uInt32 nCount = 1);
+
+ // reset to empty state
+ void clear();
+
+ // closed state
+ bool isClosed() const;
+ void setClosed(bool bNew);
+
+ // flip polygon direction
+ void flip();
+
+ // test if PolyPolygon has double points
+ bool hasDoublePoints() const;
+
+ // remove double points, at the begin/end and follow-ups, too
+ void removeDoublePoints();
+
+ // apply transformation given in matrix form to the polygon
+ void transform(const basegfx::B3DHomMatrix& rMatrix);
+ };
+} // end of namespace basegfx
+
+#endif /* _BGFX_POLYGON_B3DPOLYPOLYGON_HXX */
diff --git a/basegfx/inc/basegfx/polygon/b3dpolypolygontools.hxx b/basegfx/inc/basegfx/polygon/b3dpolypolygontools.hxx
new file mode 100644
index 000000000000..813be9839a9a
--- /dev/null
+++ b/basegfx/inc/basegfx/polygon/b3dpolypolygontools.hxx
@@ -0,0 +1,154 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_POLYPOLYGON_B3DPOLYGONTOOLS_HXX
+#define _BGFX_POLYPOLYGON_B3DPOLYGONTOOLS_HXX
+
+#include <basegfx/point/b2dpoint.hxx>
+#include <basegfx/vector/b2dvector.hxx>
+#include <vector>
+#include <basegfx/numeric/ftools.hxx>
+#include <basegfx/point/b3dpoint.hxx>
+
+//////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+ // predefinitions
+ class B3DPolyPolygon;
+ class B3DRange;
+
+ namespace tools
+ {
+ // B3DPolyPolygon tools
+
+ // get size of PolyPolygon. Control vectors are included in that ranges.
+ B3DRange getRange(const B3DPolyPolygon& rCandidate);
+
+ /** Apply given LineDashing to given polyPolygon
+
+ For a description see applyLineDashing in b2dpolygontoos.hxx
+ */
+ void applyLineDashing(
+ const B3DPolyPolygon& rCandidate,
+ const ::std::vector<double>& rDotDashArray,
+ B3DPolyPolygon* pLineTarget,
+ B3DPolyPolygon* pGapTarget = 0,
+ double fFullDashDotLen = 0.0);
+
+ /** Create a unit 3D line polyPolygon which defines a cube.
+ */
+ B3DPolyPolygon createUnitCubePolyPolygon();
+
+ /** Create a unit 3D fill polyPolygon which defines a cube.
+ */
+ B3DPolyPolygon createUnitCubeFillPolyPolygon();
+
+ /** Create a 3D line polyPolygon from a B3DRange which defines a cube.
+ */
+ B3DPolyPolygon createCubePolyPolygonFromB3DRange( const B3DRange& rRange);
+
+ /** Create a 3D fill polyPolygon from a B3DRange which defines a cube.
+ */
+ B3DPolyPolygon createCubeFillPolyPolygonFromB3DRange( const B3DRange& rRange);
+
+ /** Create a unit 3D line polyPolygon which defines a sphere with the given count of hor and ver segments.
+ Result will be centered at (0.0, 0.0, 0.0) and sized [-1.0 .. 1.0] in all dimensions.
+ If nHorSeg == 0 and/or nVerSeg == 0, a default will be calculated to have a step at least each 15 degrees.
+ With VerStart, VerStop and hor range in cartesian may be specified to create a partial sphere only.
+ */
+ B3DPolyPolygon createUnitSpherePolyPolygon(
+ sal_uInt32 nHorSeg = 0L, sal_uInt32 nVerSeg = 0L,
+ double fVerStart = F_PI2, double fVerStop = -F_PI2,
+ double fHorStart = 0.0, double fHorStop = F_2PI);
+
+ /** Create a 3D line polyPolygon from a B3DRange which defines a sphere with the given count of hor and ver segments.
+ If nHorSeg == 0 and/or nVerSeg == 0, a default will be calculated to have a step at least each 15 degrees.
+ With VerStart, VerStop and hor range in cartesian may be specified to create a partial sphere only.
+ */
+ B3DPolyPolygon createSpherePolyPolygonFromB3DRange(
+ const B3DRange& rRange,
+ sal_uInt32 nHorSeg = 0L, sal_uInt32 nVerSeg = 0L,
+ double fVerStart = F_PI2, double fVerStop = -F_PI2,
+ double fHorStart = 0.0, double fHorStop = F_2PI);
+
+ /** same as createUnitSpherePolyPolygon, but creates filled polygons (closed and oriented)
+ There is one extra, the bool bNormals defines if normals will be set, default is false
+ */
+ B3DPolyPolygon createUnitSphereFillPolyPolygon(
+ sal_uInt32 nHorSeg = 0L, sal_uInt32 nVerSeg = 0L,
+ bool bNormals = false,
+ double fVerStart = F_PI2, double fVerStop = -F_PI2,
+ double fHorStart = 0.0, double fHorStop = F_2PI);
+
+ /** same as createSpherePolyPolygonFromB3DRange, but creates filled polygons (closed and oriented)
+ There is one extra, the bool bNormals defines if normals will be set, default is false
+ */
+ B3DPolyPolygon createSphereFillPolyPolygonFromB3DRange(
+ const B3DRange& rRange,
+ sal_uInt32 nHorSeg = 0L, sal_uInt32 nVerSeg = 0L,
+ bool bNormals = false,
+ double fVerStart = F_PI2, double fVerStop = -F_PI2,
+ double fHorStart = 0.0, double fHorStop = F_2PI);
+
+ /** Create/replace normals for given 3d geometry with default normals from given center to outside.
+ rCandidate: the 3d geometry to change
+ rCenter: the center of the 3d geometry
+ */
+ B3DPolyPolygon applyDefaultNormalsSphere( const B3DPolyPolygon& rCandidate, const B3DPoint& rCenter);
+
+ /** invert normals for given 3d geometry.
+ */
+ B3DPolyPolygon invertNormals( const B3DPolyPolygon& rCandidate);
+
+ /** Create/replace texture coordinates for given 3d geometry with parallel projected one
+ rRange: the full range of the 3d geometry
+ If bChangeX, x texture coordinate will be recalculated.
+ If bChangeY, y texture coordinate will be recalculated.
+ */
+ B3DPolyPolygon applyDefaultTextureCoordinatesParallel( const B3DPolyPolygon& rCandidate, const B3DRange& rRange, bool bChangeX = true, bool bChangeY = true);
+
+ /** Create/replace texture coordinates for given 3d geometry with spherical one
+ rCenter: the centre of the used 3d geometry
+ If bChangeX, x texture coordinate will be recalculated.
+ If bChangeY, y texture coordinate will be recalculated.
+ */
+ B3DPolyPolygon applyDefaultTextureCoordinatesSphere( const B3DPolyPolygon& rCandidate, const B3DPoint& rCenter, bool bChangeX = true, bool bChangeY = true);
+
+ // isInside test for B3DPoint. On border is not inside as long as not true is given
+ // in bWithBorder flag. It is assumed that the orientations of the given polygon are correct.
+ bool isInside(const B3DPolyPolygon& rCandidate, const B3DPoint& rPoint, bool bWithBorder = false);
+
+ //////////////////////////////////////////////////////////////////////
+ // comparators with tolerance for 3D PolyPolygons
+ bool equal(const B3DPolyPolygon& rCandidateA, const B3DPolyPolygon& rCandidateB, const double& rfSmallValue);
+ bool equal(const B3DPolyPolygon& rCandidateA, const B3DPolyPolygon& rCandidateB);
+
+ } // end of namespace tools
+} // end of namespace basegfx
+
+#endif /* _BGFX_POLYPOLYGON_B3DPOLYGONTOOLS_HXX */
diff --git a/basegfx/inc/basegfx/range/b1drange.hxx b/basegfx/inc/basegfx/range/b1drange.hxx
new file mode 100644
index 000000000000..eba1536f4ee6
--- /dev/null
+++ b/basegfx/inc/basegfx/range/b1drange.hxx
@@ -0,0 +1,165 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_RANGE_B1DRANGE_HXX
+#define _BGFX_RANGE_B1DRANGE_HXX
+
+#include <basegfx/range/basicrange.hxx>
+
+
+namespace basegfx
+{
+ class B1IRange;
+
+ class B1DRange
+ {
+ ::basegfx::BasicRange< double, DoubleTraits > maRange;
+
+ public:
+ B1DRange()
+ {
+ }
+
+ explicit B1DRange(double fStartValue)
+ : maRange(fStartValue)
+ {
+ }
+
+ B1DRange(double fStartValue1, double fStartValue2)
+ : maRange(fStartValue1)
+ {
+ expand(fStartValue2);
+ }
+
+ B1DRange(const B1DRange& rRange)
+ : maRange(rRange.maRange)
+ {
+ }
+
+ explicit B1DRange( const B1IRange& rRange );
+
+ bool isEmpty() const
+ {
+ return maRange.isEmpty();
+ }
+
+ void reset()
+ {
+ maRange.reset();
+ }
+
+ bool operator==( const B1DRange& rRange ) const
+ {
+ return (maRange == rRange.maRange);
+ }
+
+ bool operator!=( const B1DRange& rRange ) const
+ {
+ return (maRange != rRange.maRange);
+ }
+
+ B1DRange& operator=(const B1DRange& rRange)
+ {
+ maRange = rRange.maRange;
+ return *this;
+ }
+
+ bool equal(const B1DRange& rRange) const
+ {
+ return (maRange.equal(rRange.maRange));
+ }
+
+ double getMinimum() const
+ {
+ return maRange.getMinimum();
+ }
+
+ double getMaximum() const
+ {
+ return maRange.getMaximum();
+ }
+
+ double getRange() const
+ {
+ return maRange.getRange();
+ }
+
+ double getCenter() const
+ {
+ return maRange.getCenter();
+ }
+
+ bool isInside(double fValue) const
+ {
+ return maRange.isInside(fValue);
+ }
+
+ bool isInside(const B1DRange& rRange) const
+ {
+ return maRange.isInside(rRange.maRange);
+ }
+
+ bool overlaps(const B1DRange& rRange) const
+ {
+ return maRange.overlaps(rRange.maRange);
+ }
+
+ bool overlapsMore(const B1DRange& rRange) const
+ {
+ return maRange.overlapsMore(rRange.maRange);
+ }
+
+ void expand(double fValue)
+ {
+ maRange.expand(fValue);
+ }
+
+ void expand(const B1DRange& rRange)
+ {
+ maRange.expand(rRange.maRange);
+ }
+
+ void intersect(const B1DRange& rRange)
+ {
+ maRange.intersect(rRange.maRange);
+ }
+
+ void grow(double fValue)
+ {
+ maRange.grow(fValue);
+ }
+ };
+
+ /** Round double to nearest integer for 1D range
+
+ @return the nearest integer for this range
+ */
+ B1IRange fround(const B1DRange& rRange);
+} // end of namespace basegfx
+
+
+#endif /* _BGFX_RANGE_B1DRANGE_HXX */
diff --git a/basegfx/inc/basegfx/range/b1ibox.hxx b/basegfx/inc/basegfx/range/b1ibox.hxx
new file mode 100644
index 000000000000..cb4ab8770a49
--- /dev/null
+++ b/basegfx/inc/basegfx/range/b1ibox.hxx
@@ -0,0 +1,143 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_RANGE_B1IBOX_HXX
+#define _BGFX_RANGE_B1IBOX_HXX
+
+#include <basegfx/range/basicbox.hxx>
+
+
+namespace basegfx
+{
+ class B1IBox
+ {
+ ::basegfx::BasicBox maRange;
+
+ public:
+ B1IBox()
+ {
+ }
+
+ explicit B1IBox(sal_Int32 nStartValue)
+ : maRange(nStartValue)
+ {
+ }
+
+ B1IBox(sal_Int32 nStartValue1, sal_Int32 nStartValue2)
+ : maRange(nStartValue1)
+ {
+ expand(nStartValue2);
+ }
+
+ B1IBox(const B1IBox& rBox)
+ : maRange(rBox.maRange)
+ {
+ }
+
+ bool isEmpty() const
+ {
+ return maRange.isEmpty();
+ }
+
+ void reset()
+ {
+ maRange.reset();
+ }
+
+ bool operator==( const B1IBox& rBox ) const
+ {
+ return (maRange == rBox.maRange);
+ }
+
+ bool operator!=( const B1IBox& rBox ) const
+ {
+ return (maRange != rBox.maRange);
+ }
+
+ void operator=(const B1IBox& rBox)
+ {
+ maRange = rBox.maRange;
+ }
+
+ sal_Int32 getMinimum() const
+ {
+ return maRange.getMinimum();
+ }
+
+ sal_Int32 getMaximum() const
+ {
+ return maRange.getMaximum();
+ }
+
+ Int32Traits::DifferenceType getRange() const
+ {
+ return maRange.getRange();
+ }
+
+ double getCenter() const
+ {
+ return maRange.getCenter();
+ }
+
+ bool isInside(sal_Int32 nValue) const
+ {
+ return maRange.isInside(nValue);
+ }
+
+ bool isInside(const B1IBox& rBox) const
+ {
+ return maRange.isInside(rBox.maRange);
+ }
+
+ bool overlaps(const B1IBox& rBox) const
+ {
+ return maRange.overlaps(rBox.maRange);
+ }
+
+ void expand(sal_Int32 nValue)
+ {
+ maRange.expand(nValue);
+ }
+
+ void expand(const B1IBox& rBox)
+ {
+ maRange.expand(rBox.maRange);
+ }
+
+ void intersect(const B1IBox& rBox)
+ {
+ maRange.intersect(rBox.maRange);
+ }
+
+ void grow(sal_Int32 nValue)
+ {
+ maRange.grow(nValue);
+ }
+ };
+} // end of namespace basegfx
+
+#endif /* _BGFX_RANGE_B1IBOX_HXX */
diff --git a/basegfx/inc/basegfx/range/b1irange.hxx b/basegfx/inc/basegfx/range/b1irange.hxx
new file mode 100644
index 000000000000..6c65fbaebff4
--- /dev/null
+++ b/basegfx/inc/basegfx/range/b1irange.hxx
@@ -0,0 +1,144 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_RANGE_B1IRANGE_HXX
+#define _BGFX_RANGE_B1IRANGE_HXX
+
+#include <basegfx/range/basicrange.hxx>
+
+
+namespace basegfx
+{
+ class B1IRange
+ {
+ ::basegfx::BasicRange< sal_Int32, Int32Traits > maRange;
+
+ public:
+ B1IRange()
+ {
+ }
+
+ explicit B1IRange(sal_Int32 nStartValue)
+ : maRange(nStartValue)
+ {
+ }
+
+ B1IRange(sal_Int32 nStartValue1, sal_Int32 nStartValue2)
+ : maRange(nStartValue1)
+ {
+ expand(nStartValue2);
+ }
+
+ B1IRange(const B1IRange& rRange)
+ : maRange(rRange.maRange)
+ {
+ }
+
+ bool isEmpty() const
+ {
+ return maRange.isEmpty();
+ }
+
+ void reset()
+ {
+ maRange.reset();
+ }
+
+ bool operator==( const B1IRange& rRange ) const
+ {
+ return (maRange == rRange.maRange);
+ }
+
+ bool operator!=( const B1IRange& rRange ) const
+ {
+ return (maRange != rRange.maRange);
+ }
+
+ B1IRange& operator=(const B1IRange& rRange)
+ {
+ maRange = rRange.maRange;
+ return *this;
+ }
+
+ sal_Int32 getMinimum() const
+ {
+ return maRange.getMinimum();
+ }
+
+ sal_Int32 getMaximum() const
+ {
+ return maRange.getMaximum();
+ }
+
+ Int32Traits::DifferenceType getRange() const
+ {
+ return maRange.getRange();
+ }
+
+ double getCenter() const
+ {
+ return maRange.getCenter();
+ }
+
+ bool isInside(sal_Int32 nValue) const
+ {
+ return maRange.isInside(nValue);
+ }
+
+ bool isInside(const B1IRange& rRange) const
+ {
+ return maRange.isInside(rRange.maRange);
+ }
+
+ bool overlaps(const B1IRange& rRange) const
+ {
+ return maRange.overlaps(rRange.maRange);
+ }
+
+ void expand(sal_Int32 nValue)
+ {
+ maRange.expand(nValue);
+ }
+
+ void expand(const B1IRange& rRange)
+ {
+ maRange.expand(rRange.maRange);
+ }
+
+ void intersect(const B1IRange& rRange)
+ {
+ maRange.intersect(rRange.maRange);
+ }
+
+ void grow(sal_Int32 nValue)
+ {
+ maRange.grow(nValue);
+ }
+ };
+} // end of namespace basegfx
+
+#endif /* _BGFX_RANGE_B1IRANGE_HXX */
diff --git a/basegfx/inc/basegfx/range/b2dconnectedranges.hxx b/basegfx/inc/basegfx/range/b2dconnectedranges.hxx
new file mode 100644
index 000000000000..6c41ede934cf
--- /dev/null
+++ b/basegfx/inc/basegfx/range/b2dconnectedranges.hxx
@@ -0,0 +1,263 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_RANGE_B2DCONNECTEDRANGES_HXX
+#define _BGFX_RANGE_B2DCONNECTEDRANGES_HXX
+
+#include <osl/diagnose.h>
+#include <basegfx/range/b2drange.hxx>
+#include <list>
+#include <utility>
+#include <algorithm>
+
+
+namespace basegfx
+{
+ /** Calculate connected ranges from input ranges.
+
+ This template constructs a list of connected ranges from the
+ given input ranges. That is, the output will contain a set of
+ ranges, itself containing a number of input ranges, which will
+ be mutually non-intersecting.
+
+ Example:
+ <code>
+ -------------------
+ | -------|
+ | | ||
+ | --- | ||
+ | | | -------| --------
+ | | +--------- | | |
+ | --+ | | | |
+ | | | | --------
+ | ---------- |
+ -------------------
+ </code
+
+ Here, the outer rectangles represent the output
+ ranges. Contained are the input rectangles that comprise these
+ output ranges.
+
+ @tpl UserData
+ User data to be stored along with the range, to later identify
+ which range went into which connected component. Must be
+ assignable, default- and copy-constructible.
+ */
+ template< typename UserData > class B2DConnectedRanges
+ {
+ public:
+ /// Type of the basic entity (rect + user data)
+ typedef ::std::pair< B2DRange, UserData > ComponentType;
+ typedef ::std::list< ComponentType > ComponentListType;
+
+ /// List of (intersecting) components, plus overall bounds
+ struct ConnectedComponents
+ {
+ ComponentListType maComponentList;
+ B2DRange maTotalBounds;
+ };
+
+ typedef ::std::list< ConnectedComponents > ConnectedComponentsType;
+
+
+ /// Create the range calculator
+ B2DConnectedRanges() :
+ maDisjunctAggregatesList(),
+ maTotalBounds()
+ {
+ }
+
+ /** Query total bounds of all added ranges.
+
+ @return the union bound rect over all added ranges.
+ */
+ B2DRange getBounds() const
+ {
+ return maTotalBounds;
+ }
+
+ /** Add an additional range.
+
+ This method integrates a new range into the connected
+ ranges lists. The method has a worst-case time complexity
+ of O(n^2), with n denoting the number of already added
+ ranges (typically, for well-behaved input, it is O(n)
+ though).
+ */
+ void addRange( const B2DRange& rRange,
+ const UserData& rUserData )
+ {
+ // check whether fast path is possible: if new range is
+ // outside accumulated total range, can add it as a
+ // separate component right away.
+ const bool bNotOutsideEverything(
+ maTotalBounds.overlaps( rRange ) );
+
+ // update own global bounds range
+ maTotalBounds.expand( rRange );
+
+ // assemble anything intersecting with rRange into
+ // this new connected component
+ ConnectedComponents aNewConnectedComponent;
+
+ // as at least rRange will be a member of
+ // aNewConnectedComponent (will be added below), can
+ // preset the overall bounds here.
+ aNewConnectedComponent.maTotalBounds = rRange;
+
+
+ //
+ // STAGE 1: Search for intersecting maDisjunctAggregatesList entries
+ // =================================================================
+ //
+
+ // if rRange is empty, it will intersect with no
+ // maDisjunctAggregatesList member. Thus, we can safe us
+ // the check.
+ // if rRange is outside all other rectangle, skip here,
+ // too
+ if( bNotOutsideEverything &&
+ !rRange.isEmpty() )
+ {
+ typename ConnectedComponentsType::iterator aCurrAggregate;
+ typename ConnectedComponentsType::iterator aLastAggregate;
+
+ // flag, determining whether we touched one or more of
+ // the maDisjunctAggregatesList entries. _If_ we did,
+ // we have to repeat the intersection process, because
+ // these changes might have generated new
+ // intersections.
+ bool bSomeAggregatesChanged;
+
+ // loop, until bSomeAggregatesChanged stays false
+ do
+ {
+ // only continue loop if 'intersects' branch below was hit
+ bSomeAggregatesChanged = false;
+
+ // iterate over all current members of maDisjunctAggregatesList
+ for( aCurrAggregate=maDisjunctAggregatesList.begin(),
+ aLastAggregate=maDisjunctAggregatesList.end();
+ aCurrAggregate != aLastAggregate; )
+ {
+ // first check if current component's bounds
+ // are empty. This ensures that distinct empty
+ // components are not merged into one
+ // aggregate. As a matter of fact, they have
+ // no position and size.
+
+ if( !aCurrAggregate->maTotalBounds.isEmpty() &&
+ aCurrAggregate->maTotalBounds.overlaps(
+ aNewConnectedComponent.maTotalBounds ) )
+ {
+ // union the intersecting
+ // maDisjunctAggregatesList element into
+ // aNewConnectedComponent
+
+ // calc union bounding box
+ aNewConnectedComponent.maTotalBounds.expand( aCurrAggregate->maTotalBounds );
+
+ // extract all aCurrAggregate components
+ // to aNewConnectedComponent
+ aNewConnectedComponent.maComponentList.splice(
+ aNewConnectedComponent.maComponentList.end(),
+ aCurrAggregate->maComponentList );
+
+ // remove and delete aCurrAggregate entry
+ // from list (we've gutted it's content
+ // above). list::erase() will update our
+ // iterator with the predecessor here.
+ aCurrAggregate = maDisjunctAggregatesList.erase( aCurrAggregate );
+
+ // at least one aggregate changed, need to rescan everything
+ bSomeAggregatesChanged = true;
+ }
+ else
+ {
+ aCurrAggregate++;
+ }
+ }
+ }
+ while( bSomeAggregatesChanged );
+ }
+
+ //
+ // STAGE 2: Add newly generated connected component list element
+ // =============================================================
+ //
+
+ // add new component to the end of the component list
+ aNewConnectedComponent.maComponentList.push_back(
+ ComponentType( rRange, rUserData ) );
+
+ // do some consistency checks (aka post conditions)
+ OSL_ENSURE( !aNewConnectedComponent.maComponentList.empty(),
+ "B2DConnectedRanges::addRange(): empty aggregate list" );
+ OSL_ENSURE( !aNewConnectedComponent.maTotalBounds.isEmpty() ||
+ (aNewConnectedComponent.maTotalBounds.isEmpty() &&
+ aNewConnectedComponent.maComponentList.size() == 1),
+ "B2DConnectedRanges::addRange(): empty ranges must be solitary");
+
+ // add aNewConnectedComponent as a new entry to
+ // maDisjunctAggregatesList
+ maDisjunctAggregatesList.push_back( aNewConnectedComponent );
+ }
+
+ /** Apply a functor to each of the disjunct component
+ aggregates.
+
+ @param aFunctor
+ Functor to apply. Must provide an operator( const ConnectedComponents& ).
+
+ @return a copy of the functor, as applied to all aggregates.
+ */
+ template< typename UnaryFunctor > UnaryFunctor forEachAggregate( UnaryFunctor aFunctor ) const
+ {
+ return ::std::for_each( maDisjunctAggregatesList.begin(),
+ maDisjunctAggregatesList.end(),
+ aFunctor );
+ }
+
+ private:
+ // default: disabled copy/assignment
+ B2DConnectedRanges(const B2DConnectedRanges&);
+ B2DConnectedRanges& operator=( const B2DConnectedRanges& );
+
+ /** Current list of disjunct sets of connected components
+
+ Each entry corresponds to one of the top-level rectangles
+ in the drawing above.
+ */
+ ConnectedComponentsType maDisjunctAggregatesList;
+
+ /** Global bound rect over all added ranges.
+ */
+ B2DRange maTotalBounds;
+ };
+}
+
+#endif /* _BGFX_RANGE_B2DCONNECTEDRANGES_HXX */
diff --git a/basegfx/inc/basegfx/range/b2dpolyrange.hxx b/basegfx/inc/basegfx/range/b2dpolyrange.hxx
new file mode 100644
index 000000000000..2202869dc921
--- /dev/null
+++ b/basegfx/inc/basegfx/range/b2dpolyrange.hxx
@@ -0,0 +1,145 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: b2dmultirange.hxx,v $
+ * $Revision: 1.6 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_RANGE_B2DPOLYRANGE_HXX
+#define _BGFX_RANGE_B2DPOLYRANGE_HXX
+
+#include <o3tl/cow_wrapper.hxx>
+#include <boost/tuple/tuple.hpp>
+#include <basegfx/vector/b2enums.hxx>
+
+namespace basegfx
+{
+ class B2DTuple;
+ class B2DRange;
+ class B2DPolyPolygon;
+ class ImplB2DPolyRange;
+
+ /** Multiple ranges in one object.
+
+ This class combines multiple ranges in one object, providing a
+ total, enclosing range for it.
+
+ You can use this class e.g. when updating views containing
+ rectangular objects. Add each modified object to a
+ B2DMultiRange, then test each viewable object against
+ intersection with the multi range.
+
+ Similar in spirit to the poly-polygon vs. polygon relationship.
+
+ Note that comparable to polygons, a poly-range can also
+ contain 'holes' - this is encoded via polygon orientation at
+ the poly-polygon, and via explicit flags for the poly-range.
+ */
+ class B2DPolyRange
+ {
+ public:
+ typedef boost::tuple<B2DRange,B2VectorOrientation> ElementType ;
+
+ B2DPolyRange();
+ ~B2DPolyRange();
+
+ /** Create a multi range with exactly one containing range
+ */
+ explicit B2DPolyRange( const ElementType& rElement );
+ B2DPolyRange( const B2DRange& rRange, B2VectorOrientation eOrient );
+ B2DPolyRange( const B2DPolyRange& );
+ B2DPolyRange& operator=( const B2DPolyRange& );
+
+ /// unshare this poly-range with all internally shared instances
+ void makeUnique();
+
+ bool operator==(const B2DPolyRange&) const;
+ bool operator!=(const B2DPolyRange&) const;
+
+ /// Number of included ranges
+ sal_uInt32 count() const;
+
+ ElementType getElement(sal_uInt32 nIndex) const;
+ void setElement(sal_uInt32 nIndex, const ElementType& rElement );
+ void setElement(sal_uInt32 nIndex, const B2DRange& rRange, B2VectorOrientation eOrient );
+
+ // insert/append a single range
+ void insertElement(sal_uInt32 nIndex, const ElementType& rElement, sal_uInt32 nCount = 1);
+ void insertElement(sal_uInt32 nIndex, const B2DRange& rRange, B2VectorOrientation eOrient, sal_uInt32 nCount = 1);
+ void appendElement(const ElementType& rElement, sal_uInt32 nCount = 1);
+ void appendElement(const B2DRange& rRange, B2VectorOrientation eOrient, sal_uInt32 nCount = 1);
+
+ // insert/append multiple ranges
+ void insertPolyRange(sal_uInt32 nIndex, const B2DPolyRange&);
+ void appendPolyRange(const B2DPolyRange&);
+
+ void remove(sal_uInt32 nIndex, sal_uInt32 nCount = 1);
+ void clear();
+
+ // flip range orientations - converts holes to solids, and vice versa
+ void flip();
+
+ /** Get overall range
+
+ @return
+ The union range of all contained ranges
+ */
+ B2DRange getBounds() const;
+
+ /** Test whether given tuple is inside one or more of the
+ included ranges. Does *not* use overall range, but checks
+ individually.
+ */
+ bool isInside( const B2DTuple& rTuple ) const;
+
+ /** Test whether given range is inside one or more of the
+ included ranges. Does *not* use overall range, but checks
+ individually.
+ */
+ bool isInside( const B2DRange& rRange ) const;
+
+ /** Test whether given range overlaps one or more of the
+ included ranges. Does *not* use overall range, but checks
+ individually.
+ */
+ bool overlaps( const B2DRange& rRange ) const;
+
+ /** Request a poly-polygon with solved cross-overs
+ */
+ B2DPolyPolygon solveCrossovers() const;
+
+ // element iterators (same iterator validity conditions as for vector)
+ const B2DRange* begin() const;
+ const B2DRange* end() const;
+ B2DRange* begin();
+ B2DRange* end();
+
+ private:
+ o3tl::cow_wrapper< ImplB2DPolyRange > mpImpl;
+ };
+}
+
+#endif /* _BGFX_RANGE_B2DPOLYRANGE_HXX */
diff --git a/basegfx/inc/basegfx/range/b2drange.hxx b/basegfx/inc/basegfx/range/b2drange.hxx
new file mode 100644
index 000000000000..fc3a6fe53659
--- /dev/null
+++ b/basegfx/inc/basegfx/range/b2drange.hxx
@@ -0,0 +1,295 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_RANGE_B2DRANGE_HXX
+#define _BGFX_RANGE_B2DRANGE_HXX
+
+#include <basegfx/vector/b2dvector.hxx>
+#include <basegfx/point/b2dpoint.hxx>
+#include <basegfx/tuple/b2dtuple.hxx>
+#include <basegfx/range/basicrange.hxx>
+#include <vector>
+
+
+namespace basegfx
+{
+ // predeclarations
+ class B2IRange;
+ class B2DHomMatrix;
+
+ class B2DRange
+ {
+ public:
+ typedef double ValueType;
+ typedef DoubleTraits TraitsType;
+
+ B2DRange()
+ {
+ }
+
+ explicit B2DRange(const B2DTuple& rTuple)
+ : maRangeX(rTuple.getX()),
+ maRangeY(rTuple.getY())
+ {
+ }
+
+ B2DRange(double x1,
+ double y1,
+ double x2,
+ double y2)
+ : maRangeX(x1),
+ maRangeY(y1)
+ {
+ maRangeX.expand(x2);
+ maRangeY.expand(y2);
+ }
+
+ B2DRange(const B2DTuple& rTuple1,
+ const B2DTuple& rTuple2)
+ : maRangeX(rTuple1.getX()),
+ maRangeY(rTuple1.getY())
+ {
+ expand( rTuple2 );
+ }
+
+ B2DRange(const B2DRange& rRange)
+ : maRangeX(rRange.maRangeX),
+ maRangeY(rRange.maRangeY)
+ {
+ }
+
+ explicit B2DRange(const B2IRange& rRange);
+
+ bool isEmpty() const
+ {
+ return (
+ maRangeX.isEmpty()
+ || maRangeY.isEmpty()
+ );
+ }
+
+ void reset()
+ {
+ maRangeX.reset();
+ maRangeY.reset();
+ }
+
+ bool operator==( const B2DRange& rRange ) const
+ {
+ return (maRangeX == rRange.maRangeX
+ && maRangeY == rRange.maRangeY);
+ }
+
+ bool operator!=( const B2DRange& rRange ) const
+ {
+ return (maRangeX != rRange.maRangeX
+ || maRangeY != rRange.maRangeY);
+ }
+
+ B2DRange& operator=(const B2DRange& rRange)
+ {
+ maRangeX = rRange.maRangeX;
+ maRangeY = rRange.maRangeY;
+ return *this;
+ }
+
+ bool equal(const B2DRange& rRange) const
+ {
+ return (maRangeX.equal(rRange.maRangeX)
+ && maRangeY.equal(rRange.maRangeY));
+ }
+
+ double getMinX() const
+ {
+ return maRangeX.getMinimum();
+ }
+
+ double getMinY() const
+ {
+ return maRangeY.getMinimum();
+ }
+
+ double getMaxX() const
+ {
+ return maRangeX.getMaximum();
+ }
+
+ double getMaxY() const
+ {
+ return maRangeY.getMaximum();
+ }
+
+ double getWidth() const
+ {
+ return maRangeX.getRange();
+ }
+
+ double getHeight() const
+ {
+ return maRangeY.getRange();
+ }
+
+ B2DPoint getMinimum() const
+ {
+ return B2DPoint(
+ maRangeX.getMinimum(),
+ maRangeY.getMinimum()
+ );
+ }
+
+ B2DPoint getMaximum() const
+ {
+ return B2DPoint(
+ maRangeX.getMaximum(),
+ maRangeY.getMaximum()
+ );
+ }
+
+ B2DVector getRange() const
+ {
+ return B2DVector(
+ maRangeX.getRange(),
+ maRangeY.getRange()
+ );
+ }
+
+ B2DPoint getCenter() const
+ {
+ return B2DPoint(
+ maRangeX.getCenter(),
+ maRangeY.getCenter()
+ );
+ }
+
+ double getCenterX() const
+ {
+ return maRangeX.getCenter();
+ }
+
+ double getCenterY() const
+ {
+ return maRangeY.getCenter();
+ }
+
+ bool isInside(const B2DTuple& rTuple) const
+ {
+ return (
+ maRangeX.isInside(rTuple.getX())
+ && maRangeY.isInside(rTuple.getY())
+ );
+ }
+
+ bool isInside(const B2DRange& rRange) const
+ {
+ return (
+ maRangeX.isInside(rRange.maRangeX)
+ && maRangeY.isInside(rRange.maRangeY)
+ );
+ }
+
+ bool overlaps(const B2DRange& rRange) const
+ {
+ return (
+ maRangeX.overlaps(rRange.maRangeX)
+ && maRangeY.overlaps(rRange.maRangeY)
+ );
+ }
+
+ bool overlapsMore(const B2DRange& rRange) const
+ {
+ return (
+ maRangeX.overlapsMore(rRange.maRangeX)
+ && maRangeY.overlapsMore(rRange.maRangeY)
+ );
+ }
+
+ void expand(const B2DTuple& rTuple)
+ {
+ maRangeX.expand(rTuple.getX());
+ maRangeY.expand(rTuple.getY());
+ }
+
+ void expand(const B2DRange& rRange)
+ {
+ maRangeX.expand(rRange.maRangeX);
+ maRangeY.expand(rRange.maRangeY);
+ }
+
+ void intersect(const B2DRange& rRange)
+ {
+ maRangeX.intersect(rRange.maRangeX);
+ maRangeY.intersect(rRange.maRangeY);
+ }
+
+ void grow(double fValue)
+ {
+ maRangeX.grow(fValue);
+ maRangeY.grow(fValue);
+ }
+
+ void transform(const B2DHomMatrix& rMatrix);
+
+ private:
+ typedef ::basegfx::BasicRange< ValueType, TraitsType > MyBasicRange;
+
+ MyBasicRange maRangeX;
+ MyBasicRange maRangeY;
+ };
+
+ /** Round double to nearest integer for 2D range
+
+ @return the nearest integer for this range
+ */
+ B2IRange fround(const B2DRange& rRange);
+
+ /** Compute the set difference of the two given ranges
+
+ This method calculates the symmetric difference (aka XOR)
+ between the two given ranges, and returning the resulting
+ ranges. Thus, the result will contain all areas where one, but
+ not both ranges lie.
+
+ @param o_rResult
+ Result vector. The up to four difference ranges are returned
+ within this vector
+
+ @param rFirst
+ The first range
+
+ @param rSecond
+ The second range
+
+ @return the input vector
+ */
+ ::std::vector< B2DRange >& computeSetDifference( ::std::vector< B2DRange >& o_rResult,
+ const B2DRange& rFirst,
+ const B2DRange& rSecond );
+
+} // end of namespace basegfx
+
+
+#endif /* _BGFX_RANGE_B2DRANGE_HXX */
diff --git a/basegfx/inc/basegfx/range/b2drangeclipper.hxx b/basegfx/inc/basegfx/range/b2drangeclipper.hxx
new file mode 100644
index 000000000000..3285ffeaffe1
--- /dev/null
+++ b/basegfx/inc/basegfx/range/b2drangeclipper.hxx
@@ -0,0 +1,53 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: b2dmultirange.hxx,v $
+ * $Revision: 1.6 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_RANGE_B2DRANGECLIPPER_HXX
+#define _BGFX_RANGE_B2DRANGECLIPPER_HXX
+
+#include <basegfx/range/b2dpolyrange.hxx>
+#include <vector>
+
+namespace basegfx
+{
+ namespace tools
+ {
+ /** Extract poly-polygon w/o self-intersections from poly-range
+
+ Similar to the solveCrossovers(const B2DPolyPolygon&)
+ method, this one calculates a self-intersection-free
+ poly-polygon with the same topology, and encoding
+ inside/outsidedness via polygon orientation and layering.
+ */
+ B2DPolyPolygon solveCrossovers(const std::vector<B2DRange>& rRanges,
+ const std::vector<B2VectorOrientation>& rOrientations);
+ }
+}
+
+#endif /* _BGFX_RANGE_B2DRANGECLIPPER_HXX */
diff --git a/basegfx/inc/basegfx/range/b2drectangle.hxx b/basegfx/inc/basegfx/range/b2drectangle.hxx
new file mode 100644
index 000000000000..1fd2087f0bcd
--- /dev/null
+++ b/basegfx/inc/basegfx/range/b2drectangle.hxx
@@ -0,0 +1,42 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_RANGE_B2DRECTANGLE_HXX
+#define _BGFX_RANGE_B2DRECTANGLE_HXX
+
+#include <basegfx/range/b2drange.hxx>
+
+namespace basegfx
+{
+ // syntactic sugar: a B2DRange exactly models a Rectangle, thus,
+ // for interface clarity, we provide an alias name
+
+ /// Alias name for interface clarity (not everybody is aware of the identity)
+ typedef B2DRange B2DRectangle;
+}
+
+#endif /* _BGFX_RANGE_B2DRECTANGLE_HXX */
diff --git a/basegfx/inc/basegfx/range/b2ibox.hxx b/basegfx/inc/basegfx/range/b2ibox.hxx
new file mode 100644
index 000000000000..a188c7e8abe6
--- /dev/null
+++ b/basegfx/inc/basegfx/range/b2ibox.hxx
@@ -0,0 +1,251 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_RANGE_B2IBOX_HXX
+#define _BGFX_RANGE_B2IBOX_HXX
+
+#include <basegfx/point/b2ipoint.hxx>
+#include <basegfx/point/b2dpoint.hxx>
+#include <basegfx/tuple/b2ituple.hxx>
+#include <basegfx/tuple/b2i64tuple.hxx>
+#include <basegfx/range/basicbox.hxx>
+#include <vector>
+
+
+namespace basegfx
+{
+ class B2IBox
+ {
+ public:
+ typedef sal_Int32 ValueType;
+ typedef Int32Traits TraitsType;
+
+ B2IBox()
+ {
+ }
+
+ explicit B2IBox(const B2ITuple& rTuple)
+ : maRangeX(rTuple.getX()),
+ maRangeY(rTuple.getY())
+ {
+ }
+
+ B2IBox(sal_Int32 x1,
+ sal_Int32 y1,
+ sal_Int32 x2,
+ sal_Int32 y2) :
+ maRangeX(x1),
+ maRangeY(y1)
+ {
+ maRangeX.expand(x2);
+ maRangeY.expand(y2);
+ }
+
+ B2IBox(const B2ITuple& rTuple1,
+ const B2ITuple& rTuple2) :
+ maRangeX(rTuple1.getX()),
+ maRangeY(rTuple1.getY())
+ {
+ expand( rTuple2 );
+ }
+
+ B2IBox(const B2IBox& rBox) :
+ maRangeX(rBox.maRangeX),
+ maRangeY(rBox.maRangeY)
+ {
+ }
+
+ bool isEmpty() const
+ {
+ return maRangeX.isEmpty() || maRangeY.isEmpty();
+ }
+
+ void reset()
+ {
+ maRangeX.reset();
+ maRangeY.reset();
+ }
+
+ bool operator==( const B2IBox& rBox ) const
+ {
+ return (maRangeX == rBox.maRangeX
+ && maRangeY == rBox.maRangeY);
+ }
+
+ bool operator!=( const B2IBox& rBox ) const
+ {
+ return (maRangeX != rBox.maRangeX
+ || maRangeY != rBox.maRangeY);
+ }
+
+ void operator=(const B2IBox& rBox)
+ {
+ maRangeX = rBox.maRangeX;
+ maRangeY = rBox.maRangeY;
+ }
+
+ sal_Int32 getMinX() const
+ {
+ return maRangeX.getMinimum();
+ }
+
+ sal_Int32 getMinY() const
+ {
+ return maRangeY.getMinimum();
+ }
+
+ sal_Int32 getMaxX() const
+ {
+ return maRangeX.getMaximum();
+ }
+
+ sal_Int32 getMaxY() const
+ {
+ return maRangeY.getMaximum();
+ }
+
+ sal_Int64 getWidth() const
+ {
+ return maRangeX.getRange();
+ }
+
+ sal_Int64 getHeight() const
+ {
+ return maRangeY.getRange();
+ }
+
+ B2IPoint getMinimum() const
+ {
+ return B2IPoint(
+ maRangeX.getMinimum(),
+ maRangeY.getMinimum()
+ );
+ }
+
+ B2IPoint getMaximum() const
+ {
+ return B2IPoint(
+ maRangeX.getMaximum(),
+ maRangeY.getMaximum()
+ );
+ }
+
+ B2I64Tuple getRange() const
+ {
+ return B2I64Tuple(
+ maRangeX.getRange(),
+ maRangeY.getRange()
+ );
+ }
+
+ B2DPoint getCenter() const
+ {
+ return B2DPoint(
+ maRangeX.getCenter(),
+ maRangeY.getCenter()
+ );
+ }
+
+ bool isInside(const B2ITuple& rTuple) const
+ {
+ return (
+ maRangeX.isInside(rTuple.getX())
+ && maRangeY.isInside(rTuple.getY())
+ );
+ }
+
+ bool isInside(const B2IBox& rBox) const
+ {
+ return (
+ maRangeX.isInside(rBox.maRangeX)
+ && maRangeY.isInside(rBox.maRangeY)
+ );
+ }
+
+ bool overlaps(const B2IBox& rBox) const
+ {
+ return (
+ maRangeX.overlaps(rBox.maRangeX)
+ && maRangeY.overlaps(rBox.maRangeY)
+ );
+ }
+
+ void expand(const B2ITuple& rTuple)
+ {
+ maRangeX.expand(rTuple.getX());
+ maRangeY.expand(rTuple.getY());
+ }
+
+ void expand(const B2IBox& rBox)
+ {
+ maRangeX.expand(rBox.maRangeX);
+ maRangeY.expand(rBox.maRangeY);
+ }
+
+ void intersect(const B2IBox& rBox)
+ {
+ maRangeX.intersect(rBox.maRangeX);
+ maRangeY.intersect(rBox.maRangeY);
+ }
+
+ void grow(sal_Int32 nValue)
+ {
+ maRangeX.grow(nValue);
+ maRangeY.grow(nValue);
+ }
+
+ private:
+ BasicBox maRangeX;
+ BasicBox maRangeY;
+ };
+
+ /** Compute the set difference of the two given boxes
+
+ This method calculates the symmetric difference (aka XOR)
+ between the two given boxes, and returning the resulting
+ boxes. Thus, the result will contain all areas where one, but
+ not both boxes lie.
+
+ @param o_rResult
+ Result vector. The up to four difference boxes are returned
+ within this vector
+
+ @param rFirst
+ The first box
+
+ @param rSecond
+ The second box
+
+ @return the input vector
+ */
+ ::std::vector< B2IBox >& computeSetDifference( ::std::vector< B2IBox >& o_rResult,
+ const B2IBox& rFirst,
+ const B2IBox& rSecond );
+
+} // end of namespace basegfx
+
+#endif /* _BGFX_RANGE_B2IBOX_HXX */
diff --git a/basegfx/inc/basegfx/range/b2irange.hxx b/basegfx/inc/basegfx/range/b2irange.hxx
new file mode 100644
index 000000000000..8d4690283da0
--- /dev/null
+++ b/basegfx/inc/basegfx/range/b2irange.hxx
@@ -0,0 +1,254 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_RANGE_B2IRANGE_HXX
+#define _BGFX_RANGE_B2IRANGE_HXX
+
+#include <basegfx/point/b2ipoint.hxx>
+#include <basegfx/point/b2dpoint.hxx>
+#include <basegfx/tuple/b2ituple.hxx>
+#include <basegfx/tuple/b2i64tuple.hxx>
+#include <basegfx/range/basicrange.hxx>
+#include <vector>
+
+
+namespace basegfx
+{
+ class B2IRange
+ {
+ public:
+ typedef sal_Int32 ValueType;
+ typedef Int32Traits TraitsType;
+
+ B2IRange()
+ {
+ }
+
+ explicit B2IRange(const B2ITuple& rTuple)
+ : maRangeX(rTuple.getX()),
+ maRangeY(rTuple.getY())
+ {
+ }
+
+ B2IRange(sal_Int32 x1,
+ sal_Int32 y1,
+ sal_Int32 x2,
+ sal_Int32 y2)
+ : maRangeX(x1),
+ maRangeY(y1)
+ {
+ maRangeX.expand(x2);
+ maRangeY.expand(y2);
+ }
+
+ B2IRange(const B2ITuple& rTuple1,
+ const B2ITuple& rTuple2)
+ : maRangeX(rTuple1.getX()),
+ maRangeY(rTuple1.getY())
+ {
+ expand( rTuple2 );
+ }
+
+ B2IRange(const B2IRange& rRange)
+ : maRangeX(rRange.maRangeX),
+ maRangeY(rRange.maRangeY)
+ {
+ }
+
+ bool isEmpty() const
+ {
+ return maRangeX.isEmpty() || maRangeY.isEmpty();
+ }
+
+ void reset()
+ {
+ maRangeX.reset();
+ maRangeY.reset();
+ }
+
+ bool operator==( const B2IRange& rRange ) const
+ {
+ return (maRangeX == rRange.maRangeX
+ && maRangeY == rRange.maRangeY);
+ }
+
+ bool operator!=( const B2IRange& rRange ) const
+ {
+ return (maRangeX != rRange.maRangeX
+ || maRangeY != rRange.maRangeY);
+ }
+
+ B2IRange& operator=(const B2IRange& rRange)
+ {
+ maRangeX = rRange.maRangeX;
+ maRangeY = rRange.maRangeY;
+ return *this;
+ }
+
+ sal_Int32 getMinX() const
+ {
+ return maRangeX.getMinimum();
+ }
+
+ sal_Int32 getMinY() const
+ {
+ return maRangeY.getMinimum();
+ }
+
+ sal_Int32 getMaxX() const
+ {
+ return maRangeX.getMaximum();
+ }
+
+ sal_Int32 getMaxY() const
+ {
+ return maRangeY.getMaximum();
+ }
+
+ sal_Int64 getWidth() const
+ {
+ return maRangeX.getRange();
+ }
+
+ sal_Int64 getHeight() const
+ {
+ return maRangeY.getRange();
+ }
+
+ B2IPoint getMinimum() const
+ {
+ return B2IPoint(
+ maRangeX.getMinimum(),
+ maRangeY.getMinimum()
+ );
+ }
+
+ B2IPoint getMaximum() const
+ {
+ return B2IPoint(
+ maRangeX.getMaximum(),
+ maRangeY.getMaximum()
+ );
+ }
+
+ B2I64Tuple getRange() const
+ {
+ return B2I64Tuple(
+ maRangeX.getRange(),
+ maRangeY.getRange()
+ );
+ }
+
+ B2DPoint getCenter() const
+ {
+ return B2DPoint(
+ maRangeX.getCenter(),
+ maRangeY.getCenter()
+ );
+ }
+
+ bool isInside(const B2ITuple& rTuple) const
+ {
+ return (
+ maRangeX.isInside(rTuple.getX())
+ && maRangeY.isInside(rTuple.getY())
+ );
+ }
+
+ bool isInside(const B2IRange& rRange) const
+ {
+ return (
+ maRangeX.isInside(rRange.maRangeX)
+ && maRangeY.isInside(rRange.maRangeY)
+ );
+ }
+
+ bool overlaps(const B2IRange& rRange) const
+ {
+ return (
+ maRangeX.overlaps(rRange.maRangeX)
+ && maRangeY.overlaps(rRange.maRangeY)
+ );
+ }
+
+ void expand(const B2ITuple& rTuple)
+ {
+ maRangeX.expand(rTuple.getX());
+ maRangeY.expand(rTuple.getY());
+ }
+
+ void expand(const B2IRange& rRange)
+ {
+ maRangeX.expand(rRange.maRangeX);
+ maRangeY.expand(rRange.maRangeY);
+ }
+
+ void intersect(const B2IRange& rRange)
+ {
+ maRangeX.intersect(rRange.maRangeX);
+ maRangeY.intersect(rRange.maRangeY);
+ }
+
+ void grow(sal_Int32 nValue)
+ {
+ maRangeX.grow(nValue);
+ maRangeY.grow(nValue);
+ }
+
+ private:
+ typedef ::basegfx::BasicRange< ValueType, TraitsType > MyBasicRange;
+
+ MyBasicRange maRangeX;
+ MyBasicRange maRangeY;
+ };
+
+ /** Compute the set difference of the two given ranges
+
+ This method calculates the symmetric difference (aka XOR)
+ between the two given ranges, and returning the resulting
+ ranges. Thus, the result will contain all areas where one, but
+ not both ranges lie.
+
+ @param o_rResult
+ Result vector. The up to four difference ranges are returned
+ within this vector
+
+ @param rFirst
+ The first range
+
+ @param rSecond
+ The second range
+
+ @return the input vector
+ */
+ ::std::vector< B2IRange >& computeSetDifference( ::std::vector< B2IRange >& o_rResult,
+ const B2IRange& rFirst,
+ const B2IRange& rSecond );
+
+} // end of namespace basegfx
+
+#endif /* _BGFX_RANGE_B2IRANGE_HXX */
diff --git a/basegfx/inc/basegfx/range/b2irectangle.hxx b/basegfx/inc/basegfx/range/b2irectangle.hxx
new file mode 100644
index 000000000000..a9e46c82710c
--- /dev/null
+++ b/basegfx/inc/basegfx/range/b2irectangle.hxx
@@ -0,0 +1,42 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_RANGE_B2IRECTANGLE_HXX
+#define _BGFX_RANGE_B2IRECTANGLE_HXX
+
+#include <basegfx/range/b2irange.hxx>
+
+namespace basegfx
+{
+ // syntactic sugar: a B2IRange exactly models a Rectangle, thus,
+ // for interface clarity, we provide an alias name
+
+ /// Alias name for interface clarity (not everybody is aware of the identity)
+ typedef B2IRange B2IRectangle;
+}
+
+#endif /* _BGFX_RANGE_B2IRECTANGLE_HXX */
diff --git a/basegfx/inc/basegfx/range/b3drange.hxx b/basegfx/inc/basegfx/range/b3drange.hxx
new file mode 100644
index 000000000000..2a2a42aa0718
--- /dev/null
+++ b/basegfx/inc/basegfx/range/b3drange.hxx
@@ -0,0 +1,302 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_RANGE_B3DRANGE_HXX
+#define _BGFX_RANGE_B3DRANGE_HXX
+
+#include <basegfx/vector/b3dvector.hxx>
+#include <basegfx/point/b3dpoint.hxx>
+#include <basegfx/tuple/b3dtuple.hxx>
+#include <basegfx/range/basicrange.hxx>
+
+namespace basegfx
+{
+ // predeclarations
+ class B3IRange;
+ class B3DHomMatrix;
+
+ class B3DRange
+ {
+ typedef ::basegfx::BasicRange< double, DoubleTraits > MyBasicRange;
+
+ MyBasicRange maRangeX;
+ MyBasicRange maRangeY;
+ MyBasicRange maRangeZ;
+
+ public:
+ B3DRange()
+ {
+ }
+
+ explicit B3DRange(const B3DTuple& rTuple)
+ : maRangeX(rTuple.getX()),
+ maRangeY(rTuple.getY()),
+ maRangeZ(rTuple.getZ())
+ {
+ }
+
+ B3DRange(double x1,
+ double y1,
+ double z1,
+ double x2,
+ double y2,
+ double z2)
+ : maRangeX(x1),
+ maRangeY(y1),
+ maRangeZ(z1)
+ {
+ maRangeX.expand(x2);
+ maRangeY.expand(y2);
+ maRangeZ.expand(z2);
+ }
+
+ B3DRange(const B3DTuple& rTuple1,
+ const B3DTuple& rTuple2)
+ : maRangeX(rTuple1.getX()),
+ maRangeY(rTuple1.getY()),
+ maRangeZ(rTuple1.getZ())
+ {
+ expand(rTuple2);
+ }
+
+ B3DRange(const B3DRange& rRange)
+ : maRangeX(rRange.maRangeX),
+ maRangeY(rRange.maRangeY),
+ maRangeZ(rRange.maRangeZ)
+ {
+ }
+
+ explicit B3DRange(const B3IRange& rRange);
+
+ bool isEmpty() const
+ {
+ return (
+ maRangeX.isEmpty()
+ || maRangeY.isEmpty()
+ || maRangeZ.isEmpty()
+ );
+ }
+
+ void reset()
+ {
+ maRangeX.reset();
+ maRangeY.reset();
+ maRangeZ.reset();
+ }
+
+ bool operator==( const B3DRange& rRange ) const
+ {
+ return (maRangeX == rRange.maRangeX
+ && maRangeY == rRange.maRangeY
+ && maRangeZ == rRange.maRangeZ);
+ }
+
+ bool operator!=( const B3DRange& rRange ) const
+ {
+ return (maRangeX != rRange.maRangeX
+ || maRangeY != rRange.maRangeY
+ || maRangeZ != rRange.maRangeZ);
+ }
+
+ B3DRange& operator=(const B3DRange& rRange)
+ {
+ maRangeX = rRange.maRangeX;
+ maRangeY = rRange.maRangeY;
+ maRangeZ = rRange.maRangeZ;
+ return *this;
+ }
+
+ bool equal(const B3DRange& rRange) const
+ {
+ return (maRangeX.equal(rRange.maRangeX)
+ && maRangeY.equal(rRange.maRangeY)
+ && maRangeZ.equal(rRange.maRangeZ));
+ }
+
+ double getMinX() const
+ {
+ return maRangeX.getMinimum();
+ }
+
+ double getMinY() const
+ {
+ return maRangeY.getMinimum();
+ }
+
+ double getMinZ() const
+ {
+ return maRangeZ.getMinimum();
+ }
+
+ double getMaxX() const
+ {
+ return maRangeX.getMaximum();
+ }
+
+ double getMaxY() const
+ {
+ return maRangeY.getMaximum();
+ }
+
+ double getMaxZ() const
+ {
+ return maRangeZ.getMaximum();
+ }
+
+ double getWidth() const
+ {
+ return maRangeX.getRange();
+ }
+
+ double getHeight() const
+ {
+ return maRangeY.getRange();
+ }
+
+ double getDepth() const
+ {
+ return maRangeZ.getRange();
+ }
+
+ B3DPoint getMinimum() const
+ {
+ return B3DPoint(
+ maRangeX.getMinimum(),
+ maRangeY.getMinimum(),
+ maRangeZ.getMinimum()
+ );
+ }
+
+ B3DPoint getMaximum() const
+ {
+ return B3DPoint(
+ maRangeX.getMaximum(),
+ maRangeY.getMaximum(),
+ maRangeZ.getMaximum()
+ );
+ }
+
+ B3DVector getRange() const
+ {
+ return B3DVector(
+ maRangeX.getRange(),
+ maRangeY.getRange(),
+ maRangeZ.getRange()
+ );
+ }
+
+ B3DPoint getCenter() const
+ {
+ return B3DPoint(
+ maRangeX.getCenter(),
+ maRangeY.getCenter(),
+ maRangeZ.getCenter()
+ );
+ }
+
+ double getCenterX() const
+ {
+ return maRangeX.getCenter();
+ }
+
+ double getCenterY() const
+ {
+ return maRangeY.getCenter();
+ }
+
+ double getCenterZ() const
+ {
+ return maRangeZ.getCenter();
+ }
+
+ bool isInside(const B3DTuple& rTuple) const
+ {
+ return (
+ maRangeX.isInside(rTuple.getX())
+ && maRangeY.isInside(rTuple.getY())
+ && maRangeZ.isInside(rTuple.getZ())
+ );
+ }
+
+ bool isInside(const B3DRange& rRange) const
+ {
+ return (
+ maRangeX.isInside(rRange.maRangeX)
+ && maRangeY.isInside(rRange.maRangeY)
+ && maRangeZ.isInside(rRange.maRangeZ)
+ );
+ }
+
+ bool overlaps(const B3DRange& rRange) const
+ {
+ return (
+ maRangeX.overlaps(rRange.maRangeX)
+ && maRangeY.overlaps(rRange.maRangeY)
+ && maRangeZ.overlaps(rRange.maRangeZ)
+ );
+ }
+
+ void expand(const B3DTuple& rTuple)
+ {
+ maRangeX.expand(rTuple.getX());
+ maRangeY.expand(rTuple.getY());
+ maRangeZ.expand(rTuple.getZ());
+ }
+
+ void expand(const B3DRange& rRange)
+ {
+ maRangeX.expand(rRange.maRangeX);
+ maRangeY.expand(rRange.maRangeY);
+ maRangeZ.expand(rRange.maRangeZ);
+ }
+
+ void intersect(const B3DRange& rRange)
+ {
+ maRangeX.intersect(rRange.maRangeX);
+ maRangeY.intersect(rRange.maRangeY);
+ maRangeZ.intersect(rRange.maRangeZ);
+ }
+
+ void grow(double fValue)
+ {
+ maRangeX.grow(fValue);
+ maRangeY.grow(fValue);
+ maRangeZ.grow(fValue);
+ }
+
+ void transform(const B3DHomMatrix& rMatrix);
+ };
+
+ /** Round double to nearest integer for 3D range
+
+ @return the nearest integer for this range
+ */
+ B3IRange fround(const B3DRange& rRange);
+} // end of namespace basegfx
+
+
+#endif /* _BGFX_RANGE_B3DRANGE_HXX */
diff --git a/basegfx/inc/basegfx/range/b3dvolume.hxx b/basegfx/inc/basegfx/range/b3dvolume.hxx
new file mode 100644
index 000000000000..18163d5b6c34
--- /dev/null
+++ b/basegfx/inc/basegfx/range/b3dvolume.hxx
@@ -0,0 +1,42 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_RANGE_B3DBOX_HXX
+#define _BGFX_RANGE_B3DBOX_HXX
+
+#include <basegfx/range/b3drange.hxx>
+
+namespace basegfx
+{
+ // syntactic sugar: a B3DRange exactly models a Volume in 3D, thus,
+ // for interface clarity, we provide an alias name
+
+ /// Alias name for interface clarity (not everybody is aware of the identity)
+ typedef B3DRange B3DVolume;
+}
+
+#endif /* _BGFX_RANGE_B3DBOX_HXX */
diff --git a/basegfx/inc/basegfx/range/b3ibox.hxx b/basegfx/inc/basegfx/range/b3ibox.hxx
new file mode 100644
index 000000000000..f9693465a2bb
--- /dev/null
+++ b/basegfx/inc/basegfx/range/b3ibox.hxx
@@ -0,0 +1,259 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_RANGE_B3IBOX_HXX
+#define _BGFX_RANGE_B3IBOX_HXX
+
+#include <basegfx/point/b3ipoint.hxx>
+#include <basegfx/point/b3dpoint.hxx>
+#include <basegfx/tuple/b3ituple.hxx>
+#include <basegfx/tuple/b3i64tuple.hxx>
+#include <basegfx/range/basicbox.hxx>
+
+namespace basegfx
+{
+ class B3IBox
+ {
+ BasicBox maRangeX;
+ BasicBox maRangeY;
+ BasicBox maRangeZ;
+
+ public:
+ B3IBox()
+ {
+ }
+
+ explicit B3IBox(const B3ITuple& rTuple) :
+ maRangeX(rTuple.getX()),
+ maRangeY(rTuple.getY()),
+ maRangeZ(rTuple.getZ())
+ {
+ }
+
+ B3IBox(sal_Int32 x1,
+ sal_Int32 y1,
+ sal_Int32 z1,
+ sal_Int32 x2,
+ sal_Int32 y2,
+ sal_Int32 z2) :
+ maRangeX(x1),
+ maRangeY(y1),
+ maRangeZ(z1)
+ {
+ maRangeX.expand(x2);
+ maRangeY.expand(y2);
+ maRangeZ.expand(z2);
+ }
+
+ B3IBox(const B3ITuple& rTuple1,
+ const B3ITuple& rTuple2) :
+ maRangeX(rTuple1.getX()),
+ maRangeY(rTuple1.getY()),
+ maRangeZ(rTuple1.getZ())
+ {
+ expand(rTuple2);
+ }
+
+ B3IBox(const B3IBox& rBox) :
+ maRangeX(rBox.maRangeX),
+ maRangeY(rBox.maRangeY),
+ maRangeZ(rBox.maRangeZ)
+ {
+ }
+
+ bool isEmpty() const
+ {
+ return maRangeX.isEmpty() || maRangeY.isEmpty() || maRangeZ.isEmpty();
+ }
+
+ void reset()
+ {
+ maRangeX.reset();
+ maRangeY.reset();
+ maRangeZ.reset();
+ }
+
+ bool operator==( const B3IBox& rBox ) const
+ {
+ return (maRangeX == rBox.maRangeX
+ && maRangeY == rBox.maRangeY
+ && maRangeZ == rBox.maRangeZ);
+ }
+
+ bool operator!=( const B3IBox& rBox ) const
+ {
+ return (maRangeX != rBox.maRangeX
+ || maRangeY != rBox.maRangeY
+ || maRangeZ != rBox.maRangeZ);
+ }
+
+ void operator=(const B3IBox& rBox)
+ {
+ maRangeX = rBox.maRangeX;
+ maRangeY = rBox.maRangeY;
+ maRangeZ = rBox.maRangeZ;
+ }
+
+ sal_Int32 getMinX() const
+ {
+ return maRangeX.getMinimum();
+ }
+
+ sal_Int32 getMinY() const
+ {
+ return maRangeY.getMinimum();
+ }
+
+ sal_Int32 getMinZ() const
+ {
+ return maRangeZ.getMinimum();
+ }
+
+ sal_Int32 getMaxX() const
+ {
+ return maRangeX.getMaximum();
+ }
+
+ sal_Int32 getMaxY() const
+ {
+ return maRangeY.getMaximum();
+ }
+
+ sal_Int32 getMaxZ() const
+ {
+ return maRangeZ.getMaximum();
+ }
+
+ sal_Int64 getWidth() const
+ {
+ return maRangeX.getRange();
+ }
+
+ sal_Int64 getHeight() const
+ {
+ return maRangeY.getRange();
+ }
+
+ sal_Int64 getDepth() const
+ {
+ return maRangeZ.getRange();
+ }
+
+ B3IPoint getMinimum() const
+ {
+ return B3IPoint(
+ maRangeX.getMinimum(),
+ maRangeY.getMinimum(),
+ maRangeZ.getMinimum()
+ );
+ }
+
+ B3IPoint getMaximum() const
+ {
+ return B3IPoint(
+ maRangeX.getMaximum(),
+ maRangeY.getMaximum(),
+ maRangeZ.getMaximum()
+ );
+ }
+
+ B3I64Tuple getRange() const
+ {
+ return B3I64Tuple(
+ maRangeX.getRange(),
+ maRangeY.getRange(),
+ maRangeZ.getRange()
+ );
+ }
+
+ B3DPoint getCenter() const
+ {
+ return B3DPoint(
+ maRangeX.getCenter(),
+ maRangeY.getCenter(),
+ maRangeZ.getCenter()
+ );
+ }
+
+ bool isInside(const B3ITuple& rTuple) const
+ {
+ return (
+ maRangeX.isInside(rTuple.getX())
+ && maRangeY.isInside(rTuple.getY())
+ && maRangeZ.isInside(rTuple.getZ())
+ );
+ }
+
+ bool isInside(const B3IBox& rBox) const
+ {
+ return (
+ maRangeX.isInside(rBox.maRangeX)
+ && maRangeY.isInside(rBox.maRangeY)
+ && maRangeZ.isInside(rBox.maRangeZ)
+ );
+ }
+
+ bool overlaps(const B3IBox& rBox) const
+ {
+ return (
+ maRangeX.overlaps(rBox.maRangeX)
+ && maRangeY.overlaps(rBox.maRangeY)
+ && maRangeZ.overlaps(rBox.maRangeZ)
+ );
+ }
+
+ void expand(const B3ITuple& rTuple)
+ {
+ maRangeX.expand(rTuple.getX());
+ maRangeY.expand(rTuple.getY());
+ maRangeZ.expand(rTuple.getZ());
+ }
+
+ void expand(const B3IBox& rBox)
+ {
+ maRangeX.expand(rBox.maRangeX);
+ maRangeY.expand(rBox.maRangeY);
+ maRangeZ.expand(rBox.maRangeZ);
+ }
+
+ void intersect(const B3IBox& rBox)
+ {
+ maRangeX.intersect(rBox.maRangeX);
+ maRangeY.intersect(rBox.maRangeY);
+ maRangeZ.intersect(rBox.maRangeZ);
+ }
+
+ void grow(sal_Int32 nValue)
+ {
+ maRangeX.grow(nValue);
+ maRangeY.grow(nValue);
+ maRangeZ.grow(nValue);
+ }
+ };
+} // end of namespace basegfx
+
+#endif /* _BGFX_RANGE_B3IBOX_HXX */
diff --git a/basegfx/inc/basegfx/range/b3irange.hxx b/basegfx/inc/basegfx/range/b3irange.hxx
new file mode 100644
index 000000000000..e2b9a08c3093
--- /dev/null
+++ b/basegfx/inc/basegfx/range/b3irange.hxx
@@ -0,0 +1,262 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_RANGE_B3IRANGE_HXX
+#define _BGFX_RANGE_B3IRANGE_HXX
+
+#include <basegfx/point/b3ipoint.hxx>
+#include <basegfx/point/b3dpoint.hxx>
+#include <basegfx/tuple/b3ituple.hxx>
+#include <basegfx/tuple/b3i64tuple.hxx>
+#include <basegfx/range/basicrange.hxx>
+
+namespace basegfx
+{
+ class B3IRange
+ {
+ typedef ::basegfx::BasicRange< sal_Int32, Int32Traits > MyBasicRange;
+
+ MyBasicRange maRangeX;
+ MyBasicRange maRangeY;
+ MyBasicRange maRangeZ;
+
+ public:
+ B3IRange()
+ {
+ }
+
+ explicit B3IRange(const B3ITuple& rTuple)
+ : maRangeX(rTuple.getX()),
+ maRangeY(rTuple.getY()),
+ maRangeZ(rTuple.getZ())
+ {
+ }
+
+ B3IRange(sal_Int32 x1,
+ sal_Int32 y1,
+ sal_Int32 z1,
+ sal_Int32 x2,
+ sal_Int32 y2,
+ sal_Int32 z2)
+ : maRangeX(x1),
+ maRangeY(y1),
+ maRangeZ(z1)
+ {
+ maRangeX.expand(x2);
+ maRangeY.expand(y2);
+ maRangeZ.expand(z2);
+ }
+
+ B3IRange(const B3ITuple& rTuple1,
+ const B3ITuple& rTuple2)
+ : maRangeX(rTuple1.getX()),
+ maRangeY(rTuple1.getY()),
+ maRangeZ(rTuple1.getZ())
+ {
+ expand(rTuple2);
+ }
+
+ B3IRange(const B3IRange& rRange)
+ : maRangeX(rRange.maRangeX),
+ maRangeY(rRange.maRangeY),
+ maRangeZ(rRange.maRangeZ)
+ {
+ }
+
+ bool isEmpty() const
+ {
+ return maRangeX.isEmpty() || maRangeY.isEmpty() || maRangeZ.isEmpty();
+ }
+
+ void reset()
+ {
+ maRangeX.reset();
+ maRangeY.reset();
+ maRangeZ.reset();
+ }
+
+ bool operator==( const B3IRange& rRange ) const
+ {
+ return (maRangeX == rRange.maRangeX
+ && maRangeY == rRange.maRangeY
+ && maRangeZ == rRange.maRangeZ);
+ }
+
+ bool operator!=( const B3IRange& rRange ) const
+ {
+ return (maRangeX != rRange.maRangeX
+ || maRangeY != rRange.maRangeY
+ || maRangeZ != rRange.maRangeZ);
+ }
+
+ B3IRange& operator=(const B3IRange& rRange)
+ {
+ maRangeX = rRange.maRangeX;
+ maRangeY = rRange.maRangeY;
+ maRangeZ = rRange.maRangeZ;
+ return *this;
+ }
+
+ sal_Int32 getMinX() const
+ {
+ return maRangeX.getMinimum();
+ }
+
+ sal_Int32 getMinY() const
+ {
+ return maRangeY.getMinimum();
+ }
+
+ sal_Int32 getMinZ() const
+ {
+ return maRangeZ.getMinimum();
+ }
+
+ sal_Int32 getMaxX() const
+ {
+ return maRangeX.getMaximum();
+ }
+
+ sal_Int32 getMaxY() const
+ {
+ return maRangeY.getMaximum();
+ }
+
+ sal_Int32 getMaxZ() const
+ {
+ return maRangeZ.getMaximum();
+ }
+
+ sal_Int64 getWidth() const
+ {
+ return maRangeX.getRange();
+ }
+
+ sal_Int64 getHeight() const
+ {
+ return maRangeY.getRange();
+ }
+
+ sal_Int64 getDepth() const
+ {
+ return maRangeZ.getRange();
+ }
+
+ B3IPoint getMinimum() const
+ {
+ return B3IPoint(
+ maRangeX.getMinimum(),
+ maRangeY.getMinimum(),
+ maRangeZ.getMinimum()
+ );
+ }
+
+ B3IPoint getMaximum() const
+ {
+ return B3IPoint(
+ maRangeX.getMaximum(),
+ maRangeY.getMaximum(),
+ maRangeZ.getMaximum()
+ );
+ }
+
+ B3I64Tuple getRange() const
+ {
+ return B3I64Tuple(
+ maRangeX.getRange(),
+ maRangeY.getRange(),
+ maRangeZ.getRange()
+ );
+ }
+
+ B3DPoint getCenter() const
+ {
+ return B3DPoint(
+ maRangeX.getCenter(),
+ maRangeY.getCenter(),
+ maRangeZ.getCenter()
+ );
+ }
+
+ bool isInside(const B3ITuple& rTuple) const
+ {
+ return (
+ maRangeX.isInside(rTuple.getX())
+ && maRangeY.isInside(rTuple.getY())
+ && maRangeZ.isInside(rTuple.getZ())
+ );
+ }
+
+ bool isInside(const B3IRange& rRange) const
+ {
+ return (
+ maRangeX.isInside(rRange.maRangeX)
+ && maRangeY.isInside(rRange.maRangeY)
+ && maRangeZ.isInside(rRange.maRangeZ)
+ );
+ }
+
+ bool overlaps(const B3IRange& rRange) const
+ {
+ return (
+ maRangeX.overlaps(rRange.maRangeX)
+ && maRangeY.overlaps(rRange.maRangeY)
+ && maRangeZ.overlaps(rRange.maRangeZ)
+ );
+ }
+
+ void expand(const B3ITuple& rTuple)
+ {
+ maRangeX.expand(rTuple.getX());
+ maRangeY.expand(rTuple.getY());
+ maRangeZ.expand(rTuple.getZ());
+ }
+
+ void expand(const B3IRange& rRange)
+ {
+ maRangeX.expand(rRange.maRangeX);
+ maRangeY.expand(rRange.maRangeY);
+ maRangeZ.expand(rRange.maRangeZ);
+ }
+
+ void intersect(const B3IRange& rRange)
+ {
+ maRangeX.intersect(rRange.maRangeX);
+ maRangeY.intersect(rRange.maRangeY);
+ maRangeZ.intersect(rRange.maRangeZ);
+ }
+
+ void grow(sal_Int32 nValue)
+ {
+ maRangeX.grow(nValue);
+ maRangeY.grow(nValue);
+ maRangeZ.grow(nValue);
+ }
+ };
+} // end of namespace basegfx
+
+#endif /* _BGFX_RANGE_B3IRANGE_HXX */
diff --git a/basegfx/inc/basegfx/range/b3ivolume.hxx b/basegfx/inc/basegfx/range/b3ivolume.hxx
new file mode 100644
index 000000000000..0250a9050251
--- /dev/null
+++ b/basegfx/inc/basegfx/range/b3ivolume.hxx
@@ -0,0 +1,42 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_RANGE_B3IBOX_HXX
+#define _BGFX_RANGE_B3IBOX_HXX
+
+#include <basegfx/range/b3irange.hxx>
+
+namespace basegfx
+{
+ // syntactic sugar: a B3IRange exactly models a Box in 3D, thus,
+ // for interface clarity, we provide an alias name
+
+ /// Alias name for interface clarity (not everybody is aware of the identity)
+ typedef B3IRange B3IBox;
+}
+
+#endif /* _BGFX_RANGE_B3IBOX_HXX */
diff --git a/basegfx/inc/basegfx/range/basicbox.hxx b/basegfx/inc/basegfx/range/basicbox.hxx
new file mode 100644
index 000000000000..0a5274bc9bc9
--- /dev/null
+++ b/basegfx/inc/basegfx/range/basicbox.hxx
@@ -0,0 +1,136 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_RANGE_BASICBOX_HXX
+#define _BGFX_RANGE_BASICBOX_HXX
+
+#include <basegfx/range/basicrange.hxx>
+
+
+namespace basegfx
+{
+ /** Specialization of BasicRange, handling the inside predicates
+ differently.
+
+ This template considers the rightmost and bottommost border as
+ <em>outside</em> of the range, in contrast to BasicRange,
+ which considers them inside.
+ */
+ class BasicBox : public BasicRange< sal_Int32, Int32Traits >
+ {
+ typedef BasicRange< sal_Int32, Int32Traits > Base;
+ public:
+ BasicBox() :
+ Base()
+ {
+ }
+
+ BasicBox( sal_Int32 nValue ) :
+ Base( nValue )
+ {
+ }
+
+ BasicBox(const BasicBox& rBox) :
+ Base( rBox )
+ {
+ }
+
+ double getCenter() const
+ {
+ if(isEmpty())
+ {
+ return 0.0;
+ }
+ else
+ {
+ return ((mnMaximum + mnMinimum - 1.0) / 2.0);
+ }
+ }
+
+ using Base::isInside;
+
+ bool isInside(sal_Int32 nValue) const
+ {
+ if(isEmpty())
+ {
+ return false;
+ }
+ else
+ {
+ return (nValue >= mnMinimum) && (nValue < mnMaximum);
+ }
+ }
+
+ using Base::overlaps;
+
+ bool overlaps(const BasicBox& rBox) const
+ {
+ if(isEmpty())
+ {
+ return false;
+ }
+ else
+ {
+ if(rBox.isEmpty())
+ {
+ return false;
+ }
+ else
+ {
+ return !((rBox.mnMaximum <= mnMinimum) || (rBox.mnMinimum >= mnMaximum));
+ }
+ }
+ }
+
+ void grow(sal_Int32 nValue)
+ {
+ if(!isEmpty())
+ {
+ bool bLessThanZero(nValue < 0);
+
+ if(nValue > 0 || bLessThanZero)
+ {
+ mnMinimum -= nValue;
+ mnMaximum += nValue;
+
+ if(bLessThanZero)
+ {
+ // test if range did collapse
+ if(mnMinimum > mnMaximum)
+ {
+ // if yes, collapse to center
+ mnMinimum = mnMaximum = ((mnMaximum + mnMinimum - 1) / 2);
+ }
+ }
+ }
+ }
+ }
+ };
+
+} // end of namespace basegfx
+
+#endif /* _BGFX_RANGE_BASICBOX_HXX */
diff --git a/basegfx/inc/basegfx/range/basicrange.hxx b/basegfx/inc/basegfx/range/basicrange.hxx
new file mode 100644
index 000000000000..578e36824cf3
--- /dev/null
+++ b/basegfx/inc/basegfx/range/basicrange.hxx
@@ -0,0 +1,297 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_RANGE_BASICRANGE_HXX
+#define _BGFX_RANGE_BASICRANGE_HXX
+
+#include <sal/types.h>
+#include <float.h>
+#include <basegfx/numeric/ftools.hxx>
+
+
+namespace basegfx
+{
+ template< typename T, typename Traits > class BasicRange
+ {
+ protected:
+ T mnMinimum;
+ T mnMaximum;
+
+ public:
+ typedef T ValueType;
+ typedef Traits TraitsType;
+
+ BasicRange() :
+ mnMinimum(Traits::maxVal()),
+ mnMaximum(Traits::minVal())
+ {
+ }
+
+ BasicRange( T nValue ) :
+ mnMinimum(nValue),
+ mnMaximum(nValue)
+ {
+ }
+
+ BasicRange(const BasicRange& rRange) :
+ mnMinimum(rRange.mnMinimum),
+ mnMaximum(rRange.mnMaximum)
+ {
+ }
+
+ void reset()
+ {
+ mnMinimum = Traits::maxVal();
+ mnMaximum = Traits::minVal();
+ }
+
+ bool isEmpty() const
+ {
+ return Traits::maxVal() == mnMinimum;
+ }
+
+ T getMinimum() const { return mnMinimum; }
+ T getMaximum() const { return mnMaximum; }
+
+ double getCenter() const
+ {
+ if(isEmpty())
+ {
+ return 0.0;
+ }
+ else
+ {
+ return ((mnMaximum + mnMinimum) / 2.0);
+ }
+ }
+
+ bool isInside(T nValue) const
+ {
+ if(isEmpty())
+ {
+ return false;
+ }
+ else
+ {
+ return (nValue >= mnMinimum) && (nValue <= mnMaximum);
+ }
+ }
+
+ bool isInside(const BasicRange& rRange) const
+ {
+ if(isEmpty())
+ {
+ return false;
+ }
+ else
+ {
+ if(rRange.isEmpty())
+ {
+ return false;
+ }
+ else
+ {
+ return (rRange.mnMinimum >= mnMinimum) && (rRange.mnMaximum <= mnMaximum);
+ }
+ }
+ }
+
+ bool overlaps(const BasicRange& rRange) const
+ {
+ if(isEmpty())
+ {
+ return false;
+ }
+ else
+ {
+ if(rRange.isEmpty())
+ {
+ return false;
+ }
+ else
+ {
+ return !((rRange.mnMaximum < mnMinimum) || (rRange.mnMinimum > mnMaximum));
+ }
+ }
+ }
+
+ bool overlapsMore(const BasicRange& rRange) const
+ {
+ if(isEmpty() || rRange.isEmpty())
+ return false;
+ // returns true if the overlap is more than just a touching at the limits
+ return ((rRange.mnMaximum > mnMinimum) && (rRange.mnMinimum < mnMaximum));
+ }
+
+ bool operator==( const BasicRange& rRange ) const
+ {
+ return (mnMinimum == rRange.mnMinimum && mnMaximum == rRange.mnMaximum);
+ }
+
+ bool operator!=( const BasicRange& rRange ) const
+ {
+ return (mnMinimum != rRange.mnMinimum || mnMaximum != rRange.mnMaximum);
+ }
+
+ BasicRange& operator=(const BasicRange& rRange)
+ {
+ mnMinimum = rRange.mnMinimum;
+ mnMaximum = rRange.mnMaximum;
+ return *this;
+ }
+
+ bool equal(const BasicRange& rRange) const
+ {
+ return (
+ fTools::equal(mnMinimum, rRange.mnMinimum) &&
+ fTools::equal(mnMaximum, rRange.mnMaximum));
+ }
+
+ void expand(T nValue)
+ {
+ if(isEmpty())
+ {
+ mnMinimum = mnMaximum = nValue;
+ }
+ else
+ {
+ if(nValue < mnMinimum)
+ {
+ mnMinimum = nValue;
+ }
+
+ if(nValue > mnMaximum)
+ {
+ mnMaximum = nValue;
+ }
+ }
+ }
+
+ void expand(const BasicRange& rRange)
+ {
+ if(isEmpty())
+ {
+ mnMinimum = rRange.mnMinimum;
+ mnMaximum = rRange.mnMaximum;
+ }
+ else
+ {
+ if(!rRange.isEmpty())
+ {
+ if(rRange.mnMinimum < mnMinimum)
+ {
+ mnMinimum = rRange.mnMinimum;
+ }
+
+ if(rRange.mnMaximum > mnMaximum)
+ {
+ mnMaximum = rRange.mnMaximum;
+ }
+ }
+ }
+ }
+
+ void intersect(const BasicRange& rRange)
+ {
+ // here, overlaps also tests all isEmpty() conditions already.
+ if( !overlaps( rRange ) )
+ {
+ reset();
+ }
+ else
+ {
+ if(rRange.mnMinimum > mnMinimum)
+ {
+ mnMinimum = rRange.mnMinimum;
+ }
+
+ if(rRange.mnMaximum < mnMaximum)
+ {
+ mnMaximum = rRange.mnMaximum;
+ }
+ }
+ }
+
+ void grow(T nValue)
+ {
+ if(!isEmpty())
+ {
+ bool bLessThanZero(nValue < 0);
+
+ if(nValue > 0 || bLessThanZero)
+ {
+ mnMinimum -= nValue;
+ mnMaximum += nValue;
+
+ if(bLessThanZero)
+ {
+ // test if range did collapse
+ if(mnMinimum > mnMaximum)
+ {
+ // if yes, collapse to center
+ mnMinimum = mnMaximum = (mnMinimum + mnMaximum) / 2;
+ }
+ }
+ }
+ }
+ }
+
+ typename Traits::DifferenceType getRange() const
+ {
+ if(isEmpty())
+ {
+ return Traits::neutral();
+ }
+ else
+ {
+ return (mnMaximum - mnMinimum);
+ }
+ }
+ };
+
+ // some pre-fabricated traits
+ struct DoubleTraits
+ {
+ static double minVal() { return DBL_MIN; };
+ static double maxVal() { return DBL_MAX; };
+ static double neutral() { return 0.0; };
+
+ typedef double DifferenceType;
+ };
+
+ struct Int32Traits
+ {
+ static sal_Int32 minVal() { return SAL_MIN_INT32; };
+ static sal_Int32 maxVal() { return SAL_MAX_INT32; };
+ static sal_Int32 neutral() { return 0L; };
+
+ typedef sal_Int64 DifferenceType;
+ };
+
+} // end of namespace basegfx
+
+#endif /* _BGFX_RANGE_BASICRANGE_HXX */
diff --git a/basegfx/inc/basegfx/range/rangeexpander.hxx b/basegfx/inc/basegfx/range/rangeexpander.hxx
new file mode 100644
index 000000000000..f8d2ac9c6b68
--- /dev/null
+++ b/basegfx/inc/basegfx/range/rangeexpander.hxx
@@ -0,0 +1,83 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_RANGE_RANGEEXPANDER_HXX
+#define _BGFX_RANGE_RANGEEXPANDER_HXX
+
+#include <basegfx/range/b1drange.hxx>
+#include <basegfx/range/b1irange.hxx>
+#include <basegfx/range/b2drange.hxx>
+#include <basegfx/range/b2irange.hxx>
+#include <basegfx/range/b3drange.hxx>
+#include <basegfx/range/b3irange.hxx>
+
+namespace basegfx
+{
+ /** Generic functor for expanding a range with a number of other
+ ranges.
+
+ Since *Range::expand() is overloaded, straight-forward
+ application of ::boost::bind and friends fails (because of
+ ambiguities). Thus, this functor template can be used, to
+ expand the given range with a number of other ranges, passed
+ in at the function operator.
+
+ @tpl RangeType
+ Range type to operate with. Preferrably, one of B1*Range,
+ B2*Range, or B3*Range.
+ */
+ template< typename RangeType > class RangeExpander
+ {
+ public:
+ typedef RangeType ValueType;
+ typedef void result_type;
+
+ explicit RangeExpander( ValueType& rBounds ) :
+ mrBounds( rBounds )
+ {
+ }
+
+ void operator()( const ValueType& rBounds )
+ {
+ mrBounds.expand( rBounds );
+ }
+
+ private:
+ ValueType& mrBounds;
+ };
+
+ typedef RangeExpander< B1DRange > B1DRangeExpander;
+ typedef RangeExpander< B1IRange > B1IRangeExpander;
+ typedef RangeExpander< B2DRange > B2DRangeExpander;
+ typedef RangeExpander< B2IRange > B2IRangeExpander;
+ typedef RangeExpander< B3DRange > B3DRangeExpander;
+ typedef RangeExpander< B3IRange > B3IRangeExpander;
+
+} // end of namespace basegfx
+
+
+#endif /* _BGFX_RANGE_RANGEEXPANDER_HXX */
diff --git a/basegfx/inc/basegfx/raster/bpixelraster.hxx b/basegfx/inc/basegfx/raster/bpixelraster.hxx
new file mode 100644
index 000000000000..c28adcdb2ef7
--- /dev/null
+++ b/basegfx/inc/basegfx/raster/bpixelraster.hxx
@@ -0,0 +1,116 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_RASTER_BPIXELRASTER_HXX
+#define _BGFX_RASTER_BPIXELRASTER_HXX
+
+#include <algorithm>
+#include <sal/types.h>
+#include <basegfx/pixel/bpixel.hxx>
+#include <rtl/memory.h>
+
+//////////////////////////////////////////////////////////////////////////////
+// predeclarations
+
+//////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+ class BPixelRaster
+ {
+ private:
+ // do not allow copy constructor and assignment operator
+ BPixelRaster(const BPixelRaster&);
+ BPixelRaster& operator=(const BPixelRaster&);
+
+ protected:
+ sal_uInt32 mnWidth;
+ sal_uInt32 mnHeight;
+ sal_uInt32 mnCount;
+ BPixel* mpContent;
+
+ public:
+ // reset
+ void reset()
+ {
+ rtl_zeroMemory(mpContent, sizeof(BPixel) * mnCount);
+ }
+
+ // constructor/destructor
+ BPixelRaster(sal_uInt32 nWidth, sal_uInt32 nHeight)
+ : mnWidth(nWidth),
+ mnHeight(nHeight),
+ mnCount(nWidth * nHeight),
+ mpContent(new BPixel[mnCount])
+ {
+ reset();
+ }
+
+ ~BPixelRaster()
+ {
+ delete [] mpContent;
+ }
+
+ // coordinate calcs between X/Y and span
+ sal_uInt32 getIndexFromXY(sal_uInt32 nX, sal_uInt32 nY) const { return (nX + (nY * mnWidth)); }
+ sal_uInt32 getXFromIndex(sal_uInt32 nIndex) const { return (nIndex % mnWidth); }
+ sal_uInt32 getYFromIndex(sal_uInt32 nIndex) const { return (nIndex / mnWidth); }
+
+ // data access read
+ sal_uInt32 getWidth() const { return mnWidth; }
+ sal_uInt32 getHeight() const { return mnHeight; }
+ sal_uInt32 getCount() const { return mnCount; }
+
+ // data access read only
+ const BPixel& getBPixel(sal_uInt32 nIndex) const
+ {
+#ifdef DBG_UTIL
+ if(nIndex >= mnCount)
+ {
+ OSL_ENSURE(false, "getBPixel: Access out of range (!)");
+ return BPixel::getEmptyBPixel();
+ }
+#endif
+ return mpContent[nIndex];
+ }
+
+ // data access read/write
+ BPixel& getBPixel(sal_uInt32 nIndex)
+ {
+#ifdef DBG_UTIL
+ if(nIndex >= mnCount)
+ {
+ OSL_ENSURE(false, "getBPixel: Access out of range (!)");
+ return mpContent[0L];
+ }
+#endif
+ return mpContent[nIndex];
+ }
+ };
+} // end of namespace basegfx
+
+#endif /* _BGFX_RASTER_BPIXELRASTER_HXX */
diff --git a/basegfx/inc/basegfx/raster/bzpixelraster.hxx b/basegfx/inc/basegfx/raster/bzpixelraster.hxx
new file mode 100644
index 000000000000..2c0905a78397
--- /dev/null
+++ b/basegfx/inc/basegfx/raster/bzpixelraster.hxx
@@ -0,0 +1,96 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_RASTER_BZPIXELRASTER_HXX
+#define _BGFX_RASTER_BZPIXELRASTER_HXX
+
+#include <basegfx/raster/bpixelraster.hxx>
+#include <rtl/memory.h>
+
+//////////////////////////////////////////////////////////////////////////////
+// predeclarations
+
+//////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+ class BZPixelRaster : public BPixelRaster
+ {
+ protected:
+ // additionally, host a ZBuffer
+ sal_uInt16* mpZBuffer;
+
+ public:
+ // reset
+ void resetZ()
+ {
+ reset();
+ rtl_zeroMemory(mpZBuffer, sizeof(sal_uInt16) * mnCount);
+ }
+
+ // constructor/destructor
+ BZPixelRaster(sal_uInt32 nWidth, sal_uInt32 nHeight)
+ : BPixelRaster(nWidth, nHeight),
+ mpZBuffer(new sal_uInt16[mnCount])
+ {
+ rtl_zeroMemory(mpZBuffer, sizeof(sal_uInt16) * mnCount);
+ }
+
+ ~BZPixelRaster()
+ {
+ delete [] mpZBuffer;
+ }
+
+ // data access read only
+ const sal_uInt16& getZ(sal_uInt32 nIndex) const
+ {
+#ifdef DBG_UTIL
+ if(nIndex >= mnCount)
+ {
+ OSL_ENSURE(false, "getZ: Access out of range (!)");
+ return mpZBuffer[0L];
+ }
+#endif
+ return mpZBuffer[nIndex];
+ }
+
+ // data access read/write
+ sal_uInt16& getZ(sal_uInt32 nIndex)
+ {
+#ifdef DBG_UTIL
+ if(nIndex >= mnCount)
+ {
+ OSL_ENSURE(false, "getZ: Access out of range (!)");
+ return mpZBuffer[0L];
+ }
+#endif
+ return mpZBuffer[nIndex];
+ }
+ };
+} // end of namespace basegfx
+
+#endif /* _BGFX_RASTER_BZPIXELRASTER_HXX */
diff --git a/basegfx/inc/basegfx/raster/rasterconvert3d.hxx b/basegfx/inc/basegfx/raster/rasterconvert3d.hxx
new file mode 100644
index 000000000000..fb777482246d
--- /dev/null
+++ b/basegfx/inc/basegfx/raster/rasterconvert3d.hxx
@@ -0,0 +1,345 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_RASTER_RASTERCONVERT3D_HXX
+#define _BGFX_RASTER_RASTERCONVERT3D_HXX
+
+#include <sal/types.h>
+#include <vector>
+#include <basegfx/color/bcolor.hxx>
+#include <basegfx/vector/b3dvector.hxx>
+#include <basegfx/point/b2dpoint.hxx>
+#include <basegfx/vector/b2dvector.hxx>
+
+//////////////////////////////////////////////////////////////////////////////
+// predeclarations
+
+namespace basegfx
+{
+ class B3DPolygon;
+ class B3DPolyPolygon;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+// interpolators for double precision
+
+namespace basegfx
+{
+ class ip_single
+ {
+ private:
+ double mfVal;
+ double mfInc;
+
+ public:
+ ip_single()
+ : mfVal(0.0),
+ mfInc(0.0)
+ {}
+
+ ip_single(double fVal, double fInc)
+ : mfVal(fVal),
+ mfInc(fInc)
+ {}
+
+ double getVal() const { return mfVal; }
+ double getInc() const { return mfInc; }
+
+ void increment(double fStep) { mfVal += fStep * mfInc; }
+ };
+} // end of namespace basegfx
+
+namespace basegfx
+{
+ class ip_double
+ {
+ private:
+ ip_single maX;
+ ip_single maY;
+
+ public:
+ ip_double()
+ : maX(),
+ maY()
+ {}
+
+ ip_double(double fXVal, double fXInc, double fYVal, double fYInc)
+ : maX(fXVal, fXInc),
+ maY(fYVal, fYInc)
+ {}
+
+ const ip_single& getX() const { return maX; }
+ const ip_single& getY() const { return maY; }
+
+ void increment(double fStep) { maX.increment(fStep); maY.increment(fStep); }
+ };
+} // end of namespace basegfx
+
+namespace basegfx
+{
+ class ip_triple
+ {
+ private:
+ ip_single maX;
+ ip_single maY;
+ ip_single maZ;
+
+ public:
+ ip_triple()
+ : maX(),
+ maY(),
+ maZ()
+ {}
+
+ ip_triple(double fXVal, double fXInc, double fYVal, double fYInc, double fZVal, double fZInc)
+ : maX(fXVal, fXInc),
+ maY(fYVal, fYInc),
+ maZ(fZVal, fZInc)
+ {}
+
+ const ip_single& getX() const { return maX; }
+ const ip_single& getY() const { return maY; }
+ const ip_single& getZ() const { return maZ; }
+
+ void increment(double fStep) { maX.increment(fStep); maY.increment(fStep); maZ.increment(fStep); }
+ };
+} // end of namespace basegfx
+
+//////////////////////////////////////////////////////////////////////////////
+// InterpolatorProvider3D to have a common source for allocating interpolators
+// which may then be addressed using the index to the vectors
+
+namespace basegfx
+{
+ #define SCANLINE_EMPTY_INDEX (0xffffffff)
+
+ class InterpolatorProvider3D
+ {
+ private:
+ ::std::vector< ip_triple > maColorInterpolators;
+ ::std::vector< ip_triple > maNormalInterpolators;
+ ::std::vector< ip_double > maTextureInterpolators;
+ ::std::vector< ip_triple > maInverseTextureInterpolators;
+
+ protected:
+ sal_uInt32 addColorInterpolator(const BColor& rA, const BColor& rB, double fInvYDelta)
+ {
+ B3DVector aDelta(rB.getRed() - rA.getRed(), rB.getGreen() - rA.getGreen(), rB.getBlue() - rA.getBlue());
+ aDelta *= fInvYDelta;
+ maColorInterpolators.push_back(ip_triple(rA.getRed(), aDelta.getX(), rA.getGreen(), aDelta.getY(), rA.getBlue(), aDelta.getZ()));
+ return (maColorInterpolators.size() - 1L);
+ }
+
+ sal_uInt32 addNormalInterpolator(const B3DVector& rA, const B3DVector& rB, double fInvYDelta)
+ {
+ B3DVector aDelta(rB.getX() - rA.getX(), rB.getY() - rA.getY(), rB.getZ() - rA.getZ());
+ aDelta *= fInvYDelta;
+ maNormalInterpolators.push_back(ip_triple(rA.getX(), aDelta.getX(), rA.getY(), aDelta.getY(), rA.getZ(), aDelta.getZ()));
+ return (maNormalInterpolators.size() - 1L);
+ }
+
+ sal_uInt32 addTextureInterpolator(const B2DPoint& rA, const B2DPoint& rB, double fInvYDelta)
+ {
+ B2DVector aDelta(rB.getX() - rA.getX(), rB.getY() - rA.getY());
+ aDelta *= fInvYDelta;
+ maTextureInterpolators.push_back(ip_double(rA.getX(), aDelta.getX(), rA.getY(), aDelta.getY()));
+ return (maTextureInterpolators.size() - 1L);
+ }
+
+ sal_uInt32 addInverseTextureInterpolator(const B2DPoint& rA, const B2DPoint& rB, double fZEyeA, double fZEyeB, double fInvYDelta)
+ {
+ const double fInvZEyeA(fTools::equalZero(fZEyeA) ? fZEyeA : 1.0 / fZEyeA);
+ const double fInvZEyeB(fTools::equalZero(fZEyeB) ? fZEyeB : 1.0 / fZEyeB);
+ const B2DPoint aInvA(rA * fInvZEyeA);
+ const B2DPoint aInvB(rB * fInvZEyeB);
+ double fZDelta(fInvZEyeB - fInvZEyeA);
+ B2DVector aDelta(aInvB.getX() - aInvA.getX(), aInvB.getY() - aInvA.getY());
+
+ fZDelta *= fInvYDelta;
+ aDelta *= fInvYDelta;
+
+ maInverseTextureInterpolators.push_back(ip_triple(aInvA.getX(), aDelta.getX(), aInvA.getY(), aDelta.getY(), fInvZEyeA, fZDelta));
+ return (maInverseTextureInterpolators.size() - 1L);
+ }
+
+ void reset()
+ {
+ maColorInterpolators.clear();
+ maNormalInterpolators.clear();
+ maTextureInterpolators.clear();
+ maInverseTextureInterpolators.clear();
+ }
+
+ public:
+ InterpolatorProvider3D() {}
+
+ ::std::vector< ip_triple >& getColorInterpolators() { return maColorInterpolators; }
+ ::std::vector< ip_triple >& getNormalInterpolators() { return maNormalInterpolators; }
+ ::std::vector< ip_double >& getTextureInterpolators() { return maTextureInterpolators; }
+ ::std::vector< ip_triple >& getInverseTextureInterpolators() { return maInverseTextureInterpolators; }
+ };
+} // end of namespace basegfx
+
+//////////////////////////////////////////////////////////////////////////////
+// RasterConversionLineEntry3D for Raterconversion of 3D PolyPolygons
+
+namespace basegfx
+{
+ class RasterConversionLineEntry3D
+ {
+ private:
+ ip_single maX;
+ ip_single maZ;
+ sal_Int32 mnY;
+ sal_uInt32 mnCount;
+
+ sal_uInt32 mnColorIndex;
+ sal_uInt32 mnNormalIndex;
+ sal_uInt32 mnTextureIndex;
+ sal_uInt32 mnInverseTextureIndex;
+
+ public:
+ RasterConversionLineEntry3D(const double& rfX, const double& rfDeltaX, const double& rfZ, const double& rfDeltaZ, sal_Int32 nY, sal_uInt32 nCount)
+ : maX(rfX, rfDeltaX),
+ maZ(rfZ, rfDeltaZ),
+ mnY(nY),
+ mnCount(nCount),
+ mnColorIndex(SCANLINE_EMPTY_INDEX),
+ mnNormalIndex(SCANLINE_EMPTY_INDEX),
+ mnTextureIndex(SCANLINE_EMPTY_INDEX),
+ mnInverseTextureIndex(SCANLINE_EMPTY_INDEX)
+ {}
+
+ void setColorIndex(sal_uInt32 nIndex) { mnColorIndex = nIndex; }
+ void setNormalIndex(sal_uInt32 nIndex) { mnNormalIndex = nIndex; }
+ void setTextureIndex(sal_uInt32 nIndex) { mnTextureIndex = nIndex; }
+ void setInverseTextureIndex(sal_uInt32 nIndex) { mnInverseTextureIndex = nIndex; }
+
+ bool operator<(const RasterConversionLineEntry3D& rComp) const
+ {
+ if(mnY == rComp.mnY)
+ {
+ return maX.getVal() < rComp.maX.getVal();
+ }
+
+ return mnY < rComp.mnY;
+ }
+
+ bool decrementRasterConversionLineEntry3D(sal_uInt32 nStep)
+ {
+ if(nStep >= mnCount)
+ {
+ return false;
+ }
+ else
+ {
+ mnCount -= nStep;
+ return true;
+ }
+ }
+
+ void incrementRasterConversionLineEntry3D(sal_uInt32 nStep, InterpolatorProvider3D& rProvider)
+ {
+ const double fStep((double)nStep);
+ maX.increment(fStep);
+ maZ.increment(fStep);
+ mnY += nStep;
+
+ if(SCANLINE_EMPTY_INDEX != mnColorIndex)
+ {
+ rProvider.getColorInterpolators()[mnColorIndex].increment(fStep);
+ }
+
+ if(SCANLINE_EMPTY_INDEX != mnNormalIndex)
+ {
+ rProvider.getNormalInterpolators()[mnNormalIndex].increment(fStep);
+ }
+
+ if(SCANLINE_EMPTY_INDEX != mnTextureIndex)
+ {
+ rProvider.getTextureInterpolators()[mnTextureIndex].increment(fStep);
+ }
+
+ if(SCANLINE_EMPTY_INDEX != mnInverseTextureIndex)
+ {
+ rProvider.getInverseTextureInterpolators()[mnInverseTextureIndex].increment(fStep);
+ }
+ }
+
+ // data read access
+ const ip_single& getX() const { return maX; }
+ sal_Int32 getY() const { return mnY; }
+ const ip_single& getZ() const { return maZ; }
+ sal_uInt32 getColorIndex() const { return mnColorIndex; }
+ sal_uInt32 getNormalIndex() const { return mnNormalIndex; }
+ sal_uInt32 getTextureIndex() const { return mnTextureIndex; }
+ sal_uInt32 getInverseTextureIndex() const { return mnInverseTextureIndex; }
+ };
+} // end of namespace basegfx
+
+//////////////////////////////////////////////////////////////////////////////
+// the basic RaterConverter itself. Only one method needs to be overloaded. The
+// class itself is strictly virtual
+
+namespace basegfx
+{
+ class RasterConverter3D : public InterpolatorProvider3D
+ {
+ private:
+ // the line entries for an area conversion run
+ ::std::vector< RasterConversionLineEntry3D > maLineEntries;
+
+ struct lineComparator
+ {
+ bool operator()(const RasterConversionLineEntry3D* pA, const RasterConversionLineEntry3D* pB)
+ {
+ OSL_ENSURE(pA && pB, "lineComparator: empty pointer (!)");
+ return pA->getX().getVal() < pB->getX().getVal();
+ }
+ };
+
+ void addArea(const B3DPolygon& rFill, const B3DHomMatrix* pViewToEye);
+ void addArea(const B3DPolyPolygon& rFill, const B3DHomMatrix* pViewToEye);
+ void addEdge(const B3DPolygon& rFill, sal_uInt32 a, sal_uInt32 b, const B3DHomMatrix* pViewToEye);
+
+ void rasterconvertB3DArea(sal_Int32 nStartLine, sal_Int32 nStopLine);
+ void rasterconvertB3DEdge(const B3DPolygon& rLine, sal_uInt32 nA, sal_uInt32 nB, sal_Int32 nStartLine, sal_Int32 nStopLine, sal_uInt16 nLineWidth);
+
+ virtual void processLineSpan(const RasterConversionLineEntry3D& rA, const RasterConversionLineEntry3D& rB, sal_Int32 nLine, sal_uInt32 nSpanCount) = 0;
+
+ public:
+ RasterConverter3D();
+ virtual ~RasterConverter3D();
+
+ void rasterconvertB3DPolyPolygon(const B3DPolyPolygon& rFill, const B3DHomMatrix* pViewToEye, sal_Int32 nStartLine, sal_Int32 nStopLine);
+ void rasterconvertB3DPolygon(const B3DPolygon& rLine, sal_Int32 nStartLine, sal_Int32 nStopLine, sal_uInt16 nLineWidth);
+ };
+} // end of namespace basegfx
+
+//////////////////////////////////////////////////////////////////////////////
+
+#endif /* _BGFX_RASTER_RASTERCONVERT3D_HXX */
diff --git a/basegfx/inc/basegfx/tools/b2dclipstate.hxx b/basegfx/inc/basegfx/tools/b2dclipstate.hxx
new file mode 100644
index 000000000000..7d336d8cb48e
--- /dev/null
+++ b/basegfx/inc/basegfx/tools/b2dclipstate.hxx
@@ -0,0 +1,119 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: rectcliptools.hxx,v $
+ * $Revision: 1.3 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_TOOLS_CLIPSTATE_HXX
+#define _BGFX_TOOLS_CLIPSTATE_HXX
+
+#include <sal/types.h>
+#include <o3tl/cow_wrapper.hxx>
+
+//////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+ class B2DRange;
+ class B2DPolyRange;
+ class B2DPolygon;
+ class B2DPolyPolygon;
+
+ namespace tools
+ {
+ class ImplB2DClipState;
+
+ /** This class provides an optimized, symbolic clip state for graphical output
+
+ Having a current 'clip' state is a common attribute of
+ almost all graphic output APIs, most of which internally
+ represent it via a list of rectangular bands. In contrast,
+ this implementation purely uses symbolic clips, but in a
+ quite efficient manner, deferring actual evaluation until
+ a clip representation is requested, and using faster code
+ paths for common special cases (like all-rectangle clips)
+ */
+ class B2DClipState
+ {
+ public:
+ typedef o3tl::cow_wrapper< ImplB2DClipState > ImplType;
+
+ private:
+ ImplType mpImpl;
+
+ public:
+ /// Init clip, in 'cleared' state - everything is visible
+ B2DClipState();
+ ~B2DClipState();
+ B2DClipState( const B2DClipState& );
+ explicit B2DClipState( const B2DRange& );
+ explicit B2DClipState( const B2DPolygon& );
+ explicit B2DClipState( const B2DPolyPolygon& );
+ B2DClipState& operator=( const B2DClipState& );
+
+ /// unshare this poly-range with all internally shared instances
+ void makeUnique();
+
+ /// Set clip to 'null' - nothing is visible
+ void makeNull();
+ /// returns true when clip is 'null' - nothing is visible
+ bool isNull() const;
+
+ /// Set clip 'cleared' - everything is visible
+ void makeClear();
+ /// returns true when clip is 'cleared' - everything is visible
+ bool isCleared() const;
+
+ bool operator==(const B2DClipState&) const;
+ bool operator!=(const B2DClipState&) const;
+
+ void unionRange(const B2DRange& );
+ void unionPolygon(const B2DPolygon& );
+ void unionPolyPolygon(const B2DPolyPolygon& );
+ void unionClipState(const B2DClipState& );
+
+ void intersectRange(const B2DRange& );
+ void intersectPolygon(const B2DPolygon& );
+ void intersectPolyPolygon(const B2DPolyPolygon& );
+ void intersectClipState(const B2DClipState& );
+
+ void subtractRange(const B2DRange& );
+ void subtractPolygon(const B2DPolygon& );
+ void subtractPolyPolygon(const B2DPolyPolygon& );
+ void subtractClipState(const B2DClipState& );
+
+ void xorRange(const B2DRange& );
+ void xorPolygon(const B2DPolygon& );
+ void xorPolyPolygon(const B2DPolyPolygon& );
+ void xorClipState(const B2DClipState& );
+
+ B2DPolyPolygon getClipPoly() const;
+ };
+ }
+}
+
+#endif // _BGFX_TOOLS_CLIPSTATE_HXX
diff --git a/basegfx/inc/basegfx/tools/canvastools.hxx b/basegfx/inc/basegfx/tools/canvastools.hxx
new file mode 100755
index 000000000000..1903518d991b
--- /dev/null
+++ b/basegfx/inc/basegfx/tools/canvastools.hxx
@@ -0,0 +1,221 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_TOOLS_CANVASTOOLS_HXX
+#define _BGFX_TOOLS_CANVASTOOLS_HXX
+
+#include <com/sun/star/uno/Reference.hxx>
+#include <com/sun/star/uno/Sequence.hxx>
+
+
+namespace com { namespace sun { namespace star { namespace geometry
+{
+ struct AffineMatrix2D;
+ struct AffineMatrix3D;
+ struct Matrix2D;
+ struct RealPoint2D;
+ struct RealSize2D;
+ struct RealRectangle2D;
+ struct RealRectangle3D;
+ struct IntegerPoint2D;
+ struct IntegerSize2D;
+ struct IntegerRectangle2D;
+ struct RealBezierSegment2D;
+} } } }
+
+namespace com { namespace sun { namespace star { namespace rendering
+{
+ class XGraphicDevice;
+ class XPolyPolygon2D;
+} } } }
+
+namespace com { namespace sun { namespace star { namespace awt
+{
+ struct Point;
+ struct Size;
+ struct Rectangle;
+} } } }
+
+namespace basegfx
+{
+ class B2DHomMatrix;
+ class B3DHomMatrix;
+ class B2DVector;
+ class B2DPoint;
+ class B2DRange;
+ class B3DRange;
+ class B2IVector;
+ class B2IPoint;
+ class B2IRange;
+ class B2DPolygon;
+ class B2DPolyPolygon;
+
+ namespace unotools
+ {
+ // Polygon conversions
+ // ===================================================================
+
+ ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XPolyPolygon2D >
+ xPolyPolygonFromB2DPolygon( const ::com::sun::star::uno::Reference<
+ ::com::sun::star::rendering::XGraphicDevice >& xGraphicDevice,
+ const ::basegfx::B2DPolygon& rPoly );
+
+ ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XPolyPolygon2D >
+ xPolyPolygonFromB2DPolyPolygon( const ::com::sun::star::uno::Reference<
+ ::com::sun::star::rendering::XGraphicDevice >& xGraphicDevice,
+ const ::basegfx::B2DPolyPolygon& rPolyPoly );
+
+
+ ::com::sun::star::uno::Sequence<
+ ::com::sun::star::uno::Sequence<
+ ::com::sun::star::geometry::RealBezierSegment2D > >
+ bezierSequenceSequenceFromB2DPolyPolygon( const ::basegfx::B2DPolyPolygon& rPolyPoly );
+
+ ::com::sun::star::uno::Sequence<
+ ::com::sun::star::uno::Sequence<
+ ::com::sun::star::geometry::RealPoint2D > >
+ pointSequenceSequenceFromB2DPolyPolygon( const ::basegfx::B2DPolyPolygon& rPolyPoly );
+
+ ::basegfx::B2DPolygon polygonFromPoint2DSequence(
+ const ::com::sun::star::uno::Sequence<
+ ::com::sun::star::geometry::RealPoint2D >& rPoints );
+
+ ::basegfx::B2DPolyPolygon polyPolygonFromPoint2DSequenceSequence(
+ const ::com::sun::star::uno::Sequence<
+ ::com::sun::star::uno::Sequence< ::com::sun::star::geometry::RealPoint2D > >& rPoints );
+
+ ::basegfx::B2DPolygon polygonFromBezier2DSequence(
+ const ::com::sun::star::uno::Sequence<
+ ::com::sun::star::geometry::RealBezierSegment2D >& rPoints );
+
+ ::basegfx::B2DPolyPolygon polyPolygonFromBezier2DSequenceSequence(
+ const ::com::sun::star::uno::Sequence<
+ ::com::sun::star::uno::Sequence< ::com::sun::star::geometry::RealBezierSegment2D > >& rPoints );
+
+ ::basegfx::B2DPolyPolygon b2DPolyPolygonFromXPolyPolygon2D(
+ const ::com::sun::star::uno::Reference<
+ ::com::sun::star::rendering::XPolyPolygon2D >& rPoly );
+
+ // Matrix conversions
+ // ===================================================================
+
+ ::com::sun::star::geometry::AffineMatrix2D&
+ affineMatrixFromHomMatrix( ::com::sun::star::geometry::AffineMatrix2D& matrix,
+ const ::basegfx::B2DHomMatrix& transform);
+
+ ::com::sun::star::geometry::AffineMatrix3D& affineMatrixFromHomMatrix3D(
+ ::com::sun::star::geometry::AffineMatrix3D& matrix,
+ const ::basegfx::B3DHomMatrix& transform);
+
+ ::basegfx::B2DHomMatrix&
+ homMatrixFromAffineMatrix( ::basegfx::B2DHomMatrix& transform,
+ const ::com::sun::star::geometry::AffineMatrix2D& matrix );
+
+ ::basegfx::B2DHomMatrix homMatrixFromAffineMatrix( const ::com::sun::star::geometry::AffineMatrix2D& matrix );
+ ::basegfx::B3DHomMatrix homMatrixFromAffineMatrix3D( const ::com::sun::star::geometry::AffineMatrix3D& matrix );
+
+ ::com::sun::star::geometry::Matrix2D&
+ matrixFromHomMatrix( ::com::sun::star::geometry::Matrix2D& matrix,
+ const ::basegfx::B2DHomMatrix& transform);
+
+ ::basegfx::B2DHomMatrix&
+ homMatrixFromMatrix( ::basegfx::B2DHomMatrix& transform,
+ const ::com::sun::star::geometry::Matrix2D& matrix );
+
+ // Geometry conversions
+ // ===================================================================
+
+ ::com::sun::star::geometry::RealSize2D size2DFromB2DSize( const ::basegfx::B2DVector& );
+ ::com::sun::star::geometry::RealPoint2D point2DFromB2DPoint( const ::basegfx::B2DPoint& );
+ ::com::sun::star::geometry::RealRectangle2D rectangle2DFromB2DRectangle( const ::basegfx::B2DRange& );
+ ::com::sun::star::geometry::RealRectangle3D rectangle3DFromB3DRectangle( const ::basegfx::B3DRange& );
+
+ ::basegfx::B2DVector b2DSizeFromRealSize2D( const ::com::sun::star::geometry::RealSize2D& );
+ ::basegfx::B2DPoint b2DPointFromRealPoint2D( const ::com::sun::star::geometry::RealPoint2D& );
+ ::basegfx::B2DRange b2DRectangleFromRealRectangle2D( const ::com::sun::star::geometry::RealRectangle2D& );
+ ::basegfx::B3DRange b3DRectangleFromRealRectangle3D( const ::com::sun::star::geometry::RealRectangle3D& );
+
+ ::com::sun::star::geometry::IntegerSize2D integerSize2DFromB2ISize( const ::basegfx::B2IVector& );
+ ::com::sun::star::geometry::IntegerPoint2D integerPoint2DFromB2IPoint( const ::basegfx::B2IPoint& );
+ ::com::sun::star::geometry::IntegerRectangle2D integerRectangle2DFromB2IRectangle( const ::basegfx::B2IRange& );
+
+ ::basegfx::B2IVector b2ISizeFromIntegerSize2D( const ::com::sun::star::geometry::IntegerSize2D& );
+ ::basegfx::B2IPoint b2IPointFromIntegerPoint2D( const ::com::sun::star::geometry::IntegerPoint2D& );
+ ::basegfx::B2IRange b2IRectangleFromIntegerRectangle2D( const ::com::sun::star::geometry::IntegerRectangle2D& );
+
+ ::com::sun::star::awt::Size awtSizeFromB2ISize( const ::basegfx::B2IVector& );
+ ::com::sun::star::awt::Point awtPointFromB2IPoint( const ::basegfx::B2IPoint& );
+ ::com::sun::star::awt::Rectangle awtRectangleFromB2IRectangle( const ::basegfx::B2IRange& );
+
+ ::basegfx::B2IVector b2ISizeFromAwtSize( const ::com::sun::star::awt::Size& );
+ ::basegfx::B2IPoint b2IPointFromAwtPoint( const ::com::sun::star::awt::Point& );
+ ::basegfx::B2IRange b2IRectangleFromAwtRectangle( const ::com::sun::star::awt::Rectangle& );
+
+ // Geometry comparisons
+ // ===================================================================
+
+ bool RealSize2DAreEqual( const ::com::sun::star::geometry::RealSize2D& rA, const ::com::sun::star::geometry::RealSize2D& rB );
+ bool RealPoint2DAreEqual( const ::com::sun::star::geometry::RealPoint2D& rA, const ::com::sun::star::geometry::RealPoint2D& rB );
+ bool RealRectangle2DAreEqual( const ::com::sun::star::geometry::RealRectangle2D& rA, const ::com::sun::star::geometry::RealRectangle2D& rB );
+ bool RealRectangle3DAreEqual( const ::com::sun::star::geometry::RealRectangle3D& rA, const ::com::sun::star::geometry::RealRectangle3D& rB );
+ bool AffineMatrix2DAreEqual( const ::com::sun::star::geometry::AffineMatrix2D& rA, const ::com::sun::star::geometry::AffineMatrix2D& rB );
+
+ bool IntegerSize2DAreEqual( const ::com::sun::star::geometry::IntegerSize2D& rA, const ::com::sun::star::geometry::IntegerSize2D& rB );
+ bool IntegerPoint2DAreEqual( const ::com::sun::star::geometry::IntegerPoint2D& rA, const ::com::sun::star::geometry::IntegerPoint2D& rB );
+ bool IntegerRectangle2DAreEqual( const ::com::sun::star::geometry::IntegerRectangle2D& rA, const ::com::sun::star::geometry::IntegerRectangle2D& rB );
+
+ bool awtSizeAreEqual( const ::com::sun::star::awt::Size& rA, const ::com::sun::star::awt::Size& rB );
+ bool awtPointAreEqual( const ::com::sun::star::awt::Point& rA, const ::com::sun::star::awt::Point& rB );
+ bool awtRectangleAreEqual( const ::com::sun::star::awt::Rectangle& rA, const ::com::sun::star::awt::Rectangle& rB );
+
+ /** Return smalltest integer range, which completely contains
+ given floating point range.
+
+ @param rRange
+ Input range. Values must be within the representable
+ bounds of sal_Int32
+
+ @return the closest integer range, which completely
+ contains rRange.
+ */
+ ::basegfx::B2IRange b2ISurroundingRangeFromB2DRange( const ::basegfx::B2DRange& rRange );
+
+ /** Return smalltest B2DRange with integer values, which
+ completely contains given floating point range.
+
+ @param rRange
+ Input range.
+
+ @return the closest B2DRange with integer coordinates,
+ which completely contains rRange.
+ */
+ ::basegfx::B2DRange b2DSurroundingIntegerRangeFromB2DRange( const ::basegfx::B2DRange& rRange );
+
+ }
+}
+
+#endif /* _BGFX_TOOLS_CANVASTOOLS_HXX */
diff --git a/basegfx/inc/basegfx/tools/debugplotter.hxx b/basegfx/inc/basegfx/tools/debugplotter.hxx
new file mode 100644
index 000000000000..ece104af3553
--- /dev/null
+++ b/basegfx/inc/basegfx/tools/debugplotter.hxx
@@ -0,0 +1,107 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_TOOLS_DEBUGPLOTTER_HXX
+#define _BGFX_TOOLS_DEBUGPLOTTER_HXX
+
+#include <basegfx/point/b2dpoint.hxx>
+#include <basegfx/vector/b2dvector.hxx>
+#include <basegfx/range/b2drange.hxx>
+#include <basegfx/polygon/b2dpolygon.hxx>
+#include <basegfx/polygon/b2dpolypolygon.hxx>
+#include <rtl/string.hxx>
+#include <boost/utility.hpp> // for noncopyable
+#include <vector>
+#include <utility>
+#include <iostream>
+
+
+namespace basegfx
+{
+ class B2DCubicBezier;
+
+ /** Generates debug output for various basegfx data types.
+
+ Use this class to produce debug (trace) output for various
+ basegfx geometry data types. By default, this class outputs
+ via OSL_TRACE (i.e. to stderr), and uses the gnuplot output
+ format.
+
+ To be able to generate one coherent block of output, this
+ class delays actual writing to its destructor
+ */
+ class DebugPlotter : private ::boost::noncopyable
+ {
+ public:
+ /** Create new debug output object
+
+ @param pTitle
+ Title of the debug output, will appear in trace output
+ */
+ explicit DebugPlotter( const sal_Char* pTitle );
+
+ /** Create new debug output object
+
+ @param pTitle
+ Title of the debug output, will appear in trace output
+
+ @param rOutputStream
+ Stream to write output to. Must stay valid over the
+ lifetime of this object!
+ */
+ DebugPlotter( const sal_Char* pTitle,
+ ::std::ostream& rOutputStream );
+
+ ~DebugPlotter();
+
+ void plot( const B2DPoint& rPoint,
+ const sal_Char* pTitle );
+ void plot( const B2DVector& rVec,
+ const sal_Char* pTitle );
+ void plot( const B2DCubicBezier& rBezier,
+ const sal_Char* pTitle );
+ void plot( const B2DRange& rRange,
+ const sal_Char* pTitle );
+ void plot( const B2DPolygon& rPoly,
+ const sal_Char* pTitle );
+ void plot( const B2DPolyPolygon& rPoly,
+ const sal_Char* pTitle );
+
+ private:
+ void print( const sal_Char* );
+
+ ::rtl::OString maTitle;
+ ::std::vector< ::std::pair< B2DPoint, ::rtl::OString > > maPoints;
+ ::std::vector< ::std::pair< B2DVector, ::rtl::OString > > maVectors;
+ ::std::vector< ::std::pair< B2DRange, ::rtl::OString > > maRanges;
+ ::std::vector< ::std::pair< B2DPolygon, ::rtl::OString > > maPolygons;
+
+ ::std::ostream* mpOutputStream;
+ };
+}
+
+#endif /* _BGFX_TOOLS_DEBUGPLOTTER_HXX */
diff --git a/basegfx/inc/basegfx/tools/gradienttools.hxx b/basegfx/inc/basegfx/tools/gradienttools.hxx
new file mode 100644
index 000000000000..2f436fa1d717
--- /dev/null
+++ b/basegfx/inc/basegfx/tools/gradienttools.hxx
@@ -0,0 +1,410 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_TOOLS_GRADIENTTOOLS_HXX
+#define _BGFX_TOOLS_GRADIENTTOOLS_HXX
+
+#include <basegfx/point/b2dpoint.hxx>
+#include <basegfx/range/b2drange.hxx>
+#include <basegfx/vector/b2dvector.hxx>
+#include <basegfx/matrix/b2dhommatrix.hxx>
+#include <basegfx/numeric/ftools.hxx>
+
+#include <vector>
+#include <algorithm>
+
+namespace basegfx
+{
+ /** Gradient definition as used in ODF 1.2
+
+ This struct collects all data necessary for rendering ODF
+ 1.2-compatible gradients. Use the createXXXODFGradientInfo()
+ methods below for initializing from ODF attributes.
+ */
+ struct ODFGradientInfo
+ {
+ /** transformation mapping from [0,1]^2 texture coordinate
+ space to [0,1]^2 shape coordinate space
+ */
+ B2DHomMatrix maTextureTransform;
+
+ /** transformation mapping from [0,1]^2 shape coordinate space
+ to [0,1]^2 texture coordinate space. This is the
+ transformation commonly used to create gradients from a
+ scanline rasterizer (put shape u/v coordinates into it, get
+ texture s/t coordinates out of it)
+ */
+ B2DHomMatrix maBackTextureTransform;
+
+ /** Aspect ratio of the gradient. Only used in drawinglayer
+ for generating nested gradient polygons currently. Already
+ catered for in the transformations above.
+ */
+ double mfAspectRatio;
+
+ /** Requested gradient steps to render. See the
+ implementations of the getXXXGradientAlpha() methods below,
+ the semantic differs slightly for the different gradient
+ types.
+ */
+ sal_uInt32 mnSteps;
+ };
+
+ namespace tools
+ {
+ /** Create matrix for ODF's linear gradient definition
+
+ Note that odf linear gradients are varying in y direction.
+
+ @param o_rGradientInfo
+ Receives the calculated texture transformation matrix (for
+ use with standard [0,1]x[0,1] texture coordinates)
+
+ @param rTargetArea
+ Output area, needed for aspect ratio calculations and
+ texture transformation
+
+ @param nSteps
+ Number of gradient steps (from ODF)
+
+ @param fBorder
+ Width of gradient border (from ODF)
+
+ @param fAngle
+ Gradient angle (from ODF)
+ */
+ ODFGradientInfo& createLinearODFGradientInfo(ODFGradientInfo& o_rGradientInfo,
+ const B2DRange& rTargetArea,
+ sal_uInt32 nSteps,
+ double fBorder,
+ double fAngle);
+
+ /** Calculate linear gradient blend value
+
+ This method generates you the lerp alpha value for
+ blending linearly between gradient start and end color,
+ according to the formula (startCol*(1.0-alpha) + endCol*alpha)
+
+ @param rUV
+ Current uv coordinate. Values outside [0,1] will be
+ clamped. Assumes gradient color varies along the y axis.
+
+ @param rGradInfo
+ Gradient info, for transformation and number of steps
+ */
+ inline double getLinearGradientAlpha(const B2DPoint& rUV,
+ const ODFGradientInfo& rGradInfo )
+ {
+ const B2DPoint aCoor(rGradInfo.maBackTextureTransform * rUV);
+ const double t(clamp(aCoor.getY(), 0.0, 1.0));
+ const sal_uInt32 nSteps(rGradInfo.mnSteps);
+
+ if(nSteps > 2L && nSteps < 128L)
+ return floor(t * nSteps) / double(nSteps + 1L);
+
+ return t;
+ }
+
+ /** Create matrix for ODF's axial gradient definition
+
+ Note that odf axial gradients are varying in y
+ direction. Note further that you can map the axial
+ gradient to a linear gradient (in case you want or need to
+ avoid an extra gradient renderer), by using
+ createLinearODFGradientInfo() instead, shifting the
+ resulting texture transformation by 0.5 to the top and
+ appending the same stop colors again, but mirrored.
+
+ @param o_rGradientInfo
+ Receives the calculated texture transformation matrix (for
+ use with standard [0,1]x[0,1] texture coordinates)
+
+ @param rTargetArea
+ Output area, needed for aspect ratio calculations and
+ texture transformation
+
+ @param nSteps
+ Number of gradient steps (from ODF)
+
+ @param fBorder
+ Width of gradient border (from ODF)
+
+ @param fAngle
+ Gradient angle (from ODF)
+ */
+ ODFGradientInfo& createAxialODFGradientInfo(ODFGradientInfo& o_rGradientInfo,
+ const B2DRange& rTargetArea,
+ sal_uInt32 nSteps,
+ double fBorder,
+ double fAngle);
+
+ /** Calculate axial gradient blend value
+
+ This method generates you the lerp alpha value for
+ blending linearly between gradient start and end color,
+ according to the formula (startCol*(1.0-alpha) + endCol*alpha)
+
+ @param rUV
+ Current uv coordinate. Values outside [0,1] will be
+ clamped. Assumes gradient color varies along the y axis.
+
+ @param rGradInfo
+ Gradient info, for transformation and number of steps
+ */
+ inline double getAxialGradientAlpha(const B2DPoint& rUV,
+ const ODFGradientInfo& rGradInfo )
+ {
+ const B2DPoint aCoor(rGradInfo.maBackTextureTransform * rUV);
+ const double t(clamp(fabs(aCoor.getY()), 0.0, 1.0));
+ const sal_uInt32 nSteps(rGradInfo.mnSteps);
+ const double fInternalSteps((nSteps * 2L) - 1L);
+
+ if(nSteps > 2L && nSteps < 128L)
+ return floor(((t * fInternalSteps) + 1.0) / 2.0) / double(nSteps - 1L);
+
+ return t;
+ }
+
+ /** Create matrix for ODF's radial gradient definition
+
+ @param o_rGradientInfo
+ Receives the calculated texture transformation matrix (for
+ use with standard [0,1]x[0,1] texture coordinates)
+
+ @param rTargetArea
+ Output area, needed for aspect ratio calculations and
+ texture transformation
+
+ @param rOffset
+ Gradient offset value (from ODF)
+
+ @param nSteps
+ Number of gradient steps (from ODF)
+
+ @param fBorder
+ Width of gradient border (from ODF)
+
+ @param fAngle
+ Gradient angle (from ODF)
+ */
+ ODFGradientInfo& createRadialODFGradientInfo(ODFGradientInfo& o_rGradientInfo,
+ const B2DRange& rTargetArea,
+ const B2DVector& rOffset,
+ sal_uInt32 nSteps,
+ double fBorder);
+
+ /** Calculate radial gradient blend value
+
+ This method generates you the lerp alpha value for
+ blending linearly between gradient start and end color,
+ according to the formula (startCol*(1.0-alpha) + endCol*alpha)
+
+ @param rUV
+ Current uv coordinate. Values outside [0,1] will be
+ clamped.
+
+ @param rGradInfo
+ Gradient info, for transformation and number of steps
+ */
+ inline double getRadialGradientAlpha(const B2DPoint& rUV,
+ const ODFGradientInfo& rGradInfo )
+ {
+ const B2DPoint aCoor(rGradInfo.maBackTextureTransform * rUV);
+ const double fDist(
+ clamp(aCoor.getX() * aCoor.getX() + aCoor.getY() * aCoor.getY(),
+ 0.0,
+ 1.0));
+
+ const double t(1.0 - sqrt(fDist));
+ const sal_uInt32 nSteps(rGradInfo.mnSteps);
+
+ if(nSteps > 2L && nSteps < 128L)
+ return floor(t * nSteps) / double(nSteps - 1L);
+
+ return t;
+ }
+
+ /** Create matrix for ODF's elliptical gradient definition
+
+ @param o_rGradientInfo
+ Receives the calculated texture transformation matrix (for
+ use with standard [0,1]x[0,1] texture coordinates)
+
+ @param rTargetArea
+ Output area, needed for aspect ratio calculations and
+ texture transformation
+
+ @param rOffset
+ Gradient offset value (from ODF)
+
+ @param nSteps
+ Number of gradient steps (from ODF)
+
+ @param fBorder
+ Width of gradient border (from ODF)
+
+ @param fAngle
+ Gradient angle (from ODF)
+ */
+ ODFGradientInfo& createEllipticalODFGradientInfo(ODFGradientInfo& o_rGradientInfo,
+ const B2DRange& rTargetArea,
+ const B2DVector& rOffset,
+ sal_uInt32 nSteps,
+ double fBorder,
+ double fAngle);
+
+ /** Calculate elliptical gradient blend value
+
+ This method generates you the lerp alpha value for
+ blending linearly between gradient start and end color,
+ according to the formula (startCol*(1.0-alpha) + endCol*alpha)
+
+ @param rUV
+ Current uv coordinate. Values outside [0,1] will be
+ clamped.
+
+ @param rGradInfo
+ Gradient info, for transformation and number of steps
+ */
+ inline double getEllipticalGradientAlpha(const B2DPoint& rUV,
+ const ODFGradientInfo& rGradInfo )
+ {
+ return getRadialGradientAlpha(rUV,rGradInfo); // only matrix setup differs
+ }
+
+ /** Create matrix for ODF's square gradient definition
+
+ @param o_rGradientInfo
+ Receives the calculated texture transformation matrix (for
+ use with standard [0,1]x[0,1] texture coordinates)
+
+ @param rTargetArea
+ Output area, needed for aspect ratio calculations and
+ texture transformation
+
+ @param rOffset
+ Gradient offset value (from ODF)
+
+ @param nSteps
+ Number of gradient steps (from ODF)
+
+ @param fBorder
+ Width of gradient border (from ODF)
+
+ @param fAngle
+ Gradient angle (from ODF)
+ */
+ ODFGradientInfo& createSquareODFGradientInfo(ODFGradientInfo& o_rGradientInfo,
+ const B2DRange& rTargetArea,
+ const B2DVector& rOffset,
+ sal_uInt32 nSteps,
+ double fBorder,
+ double fAngle);
+
+ /** Calculate square gradient blend value
+
+ This method generates you the lerp alpha value for
+ blending linearly between gradient start and end color,
+ according to the formula (startCol*(1.0-alpha) + endCol*alpha)
+
+ @param rUV
+ Current uv coordinate. Values outside [0,1] will be
+ clamped.
+
+ @param rGradInfo
+ Gradient info, for transformation and number of steps
+ */
+ inline double getSquareGradientAlpha(const B2DPoint& rUV,
+ const ODFGradientInfo& rGradInfo )
+ {
+ const B2DPoint aCoor(rGradInfo.maBackTextureTransform * rUV);
+ const double fAbsX(fabs(aCoor.getX()));
+ const double fAbsY(fabs(aCoor.getY()));
+
+ if(fTools::moreOrEqual(fAbsX, 1.0) || fTools::moreOrEqual(fAbsY, 1.0))
+ return 0.0;
+
+ const double t(1.0 - (fAbsX > fAbsY ? fAbsX : fAbsY));
+ const sal_uInt32 nSteps(rGradInfo.mnSteps);
+
+ if(nSteps > 2L && nSteps < 128L)
+ return floor(t * nSteps) / double(nSteps - 1L);
+
+ return t;
+ }
+
+ /** Create matrix for ODF's rectangular gradient definition
+
+ @param o_rGradientInfo
+ Receives the calculated texture transformation matrix (for
+ use with standard [0,1]x[0,1] texture coordinates)
+
+ @param rTargetArea
+ Output area, needed for aspect ratio calculations and
+ texture transformation
+
+ @param rOffset
+ Gradient offset value (from ODF)
+
+ @param nSteps
+ Number of gradient steps (from ODF)
+
+ @param fBorder
+ Width of gradient border (from ODF)
+
+ @param fAngle
+ Gradient angle (from ODF)
+ */
+ ODFGradientInfo& createRectangularODFGradientInfo(ODFGradientInfo& o_rGradientInfo,
+ const B2DRange& rTargetArea,
+ const B2DVector& rOffset,
+ sal_uInt32 nSteps,
+ double fBorder,
+ double fAngle);
+
+ /** Calculate rectangular gradient blend value
+
+ This method generates you the lerp alpha value for
+ blending linearly between gradient start and end color,
+ according to the formula (startCol*(1.0-alpha) + endCol*alpha)
+
+ @param rUV
+ Current uv coordinate. Values outside [0,1] will be
+ clamped.
+
+ @param rGradInfo
+ Gradient info, for transformation and number of steps
+ */
+ inline double getRectangularGradientAlpha(const B2DPoint& rUV,
+ const ODFGradientInfo& rGradInfo )
+ {
+ return getSquareGradientAlpha(rUV, rGradInfo); // only matrix setup differs
+ }
+ }
+}
+
+#endif
diff --git a/basegfx/inc/basegfx/tools/keystoplerp.hxx b/basegfx/inc/basegfx/tools/keystoplerp.hxx
new file mode 100644
index 000000000000..a54b3485b1a1
--- /dev/null
+++ b/basegfx/inc/basegfx/tools/keystoplerp.hxx
@@ -0,0 +1,100 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: canvastools.hxx,v $
+ * $Revision: 1.10 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_TOOLS_KEYSTOPLERP_HXX
+#define _BGFX_TOOLS_KEYSTOPLERP_HXX
+
+#include <basegfx/numeric/ftools.hxx>
+#include <vector>
+
+namespace com{ namespace sun{ namespace star{ namespace uno {
+ template<typename T> class Sequence;
+}}}}
+
+namespace basegfx
+{
+ namespace tools
+ {
+ /** Lerp in a vector of key stops
+
+ This class holds a key stop vector and provides the
+ functionality to lerp inside it. Useful e.g. for
+ multi-stop gradients, or the SMIL key time activity.
+
+ For those, given a global [0,1] lerp alpha, one need to
+ find the suitable bucket index from key stop vector, and
+ then calculate the relative alpha between the two buckets
+ found.
+ */
+ class KeyStopLerp
+ {
+ public:
+ typedef std::pair<std::ptrdiff_t,double> ResultType;
+
+ /** Create lerper with given vector of stops
+
+ @param rKeyStops
+
+ Vector of stops, must contain at least two elements
+ (though preferrably more, otherwise you probably don't
+ need key stop lerping in the first place). All
+ elements must be of monotonically increasing value.
+ */
+ explicit KeyStopLerp( const std::vector<double>& rKeyStops );
+
+ /** Create lerper with given sequence of stops
+
+ @param rKeyStops
+
+ Sequence of stops, must contain at least two elements
+ (though preferrably more, otherwise you probably don't
+ need key stop lerping in the first place). All
+ elements must be of monotonically increasing value.
+ */
+ explicit KeyStopLerp( const ::com::sun::star::uno::Sequence<double>& rKeyStops );
+
+ /** Find two nearest bucket index & interpolate
+
+ @param fAlpha
+ Find bucket index i, with keyStops[i] < fAlpha <=
+ keyStops[i+1]. Return new alpha value in [0,1),
+ proportional to fAlpha's position between keyStops[i]
+ and keyStops[i+1]
+ */
+ ResultType lerp(double fAlpha) const;
+
+ private:
+ std::vector<double> maKeyStops;
+ mutable std::ptrdiff_t mnLastIndex;
+ };
+ }
+}
+
+#endif
diff --git a/basegfx/inc/basegfx/tools/lerp.hxx b/basegfx/inc/basegfx/tools/lerp.hxx
new file mode 100644
index 000000000000..590ef34c2009
--- /dev/null
+++ b/basegfx/inc/basegfx/tools/lerp.hxx
@@ -0,0 +1,60 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: lerp.hxx,v $
+ * $Revision: 1.6 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_TOOLS_LERP_HXX
+#define _BGFX_TOOLS_LERP_HXX
+
+#include <sal/types.h>
+
+namespace basegfx
+{
+ namespace tools
+ {
+ /** Generic linear interpolator
+
+ @tpl ValueType
+ Must have operator+ and operator* defined, and should
+ have value semantics.
+
+ @param t
+ As usual, t must be in the [0,1] range
+ */
+ template< typename ValueType > ValueType lerp( const ValueType& rFrom,
+ const ValueType& rTo,
+ double t )
+ {
+ // This is only to suppress a double->int warning. All other
+ // types should be okay here.
+ return static_cast<ValueType>( (1.0-t)*rFrom + t*rTo );
+ }
+ }
+}
+
+#endif /* _BGFX_TOOLS_LERP_HXX */
diff --git a/basegfx/inc/basegfx/tools/rectcliptools.hxx b/basegfx/inc/basegfx/tools/rectcliptools.hxx
new file mode 100644
index 000000000000..ae7c057666d9
--- /dev/null
+++ b/basegfx/inc/basegfx/tools/rectcliptools.hxx
@@ -0,0 +1,88 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_TOOLS_RECTCLIPTOOLS_HXX
+#define _BGFX_TOOLS_RECTCLIPTOOLS_HXX
+
+#include <sal/types.h>
+
+//////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+ namespace tools
+ {
+ namespace RectClipFlags
+ {
+ static const sal_uInt32 LEFT = (sal_Int32)0x01;
+ static const sal_uInt32 RIGHT = (sal_Int32)0x02;
+ static const sal_uInt32 TOP = (sal_Int32)0x04;
+ static const sal_uInt32 BOTTOM = (sal_Int32)0x08;
+ }
+
+ /** Calc clip mask for Cohen-Sutherland rectangle clip
+
+ This function returns a clip mask used for the
+ Cohen-Sutherland rectangle clip method, where one or more
+ of the lower four bits are set, if the given point is
+ outside one or more of the four half planes defining the
+ rectangle (see RectClipFlags for possible values)
+ */
+ template< class Point, class Rect > inline
+ sal_uInt32 getCohenSutherlandClipFlags( const Point& rP,
+ const Rect& rR )
+ {
+ // maxY | minY | maxX | minX
+ sal_uInt32 clip = (rP.getX() < rR.getMinX()) << 0;
+ clip |= (rP.getX() > rR.getMaxX()) << 1;
+ clip |= (rP.getY() < rR.getMinY()) << 2;
+ clip |= (rP.getY() > rR.getMaxY()) << 3;
+ return clip;
+ }
+
+ /** Determine number of clip planes hit by given clip mask
+
+ This method returns the number of one bits in the four
+ least significant bits of the argument, which amounts to
+ the number of clip planes hit within the
+ getCohenSutherlandClipFlags() method.
+ */
+ inline sal_uInt32 getNumberOfClipPlanes( sal_uInt32 nFlags )
+ {
+ // classic bit count algo, see e.g. Reingold, Nievergelt,
+ // Deo: Combinatorial Algorithms, Theory and Practice,
+ // Prentice-Hall 1977
+ nFlags = (nFlags & 0x05) + ((nFlags >> 1) & 0x05);
+ nFlags = (nFlags & 0x03) + (nFlags >> 2); // no need for &
+ // 0x03, can't
+ // overflow
+ return nFlags;
+ }
+ }
+}
+
+#endif // _BGFX_TOOLS_RECTCLIPTOOLS_HXX
diff --git a/basegfx/inc/basegfx/tools/tools.hxx b/basegfx/inc/basegfx/tools/tools.hxx
new file mode 100644
index 000000000000..896fd22c162d
--- /dev/null
+++ b/basegfx/inc/basegfx/tools/tools.hxx
@@ -0,0 +1,131 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_TOOLS_TOOLS_HXX
+#define _BGFX_TOOLS_TOOLS_HXX
+
+#include <sal/types.h>
+
+namespace basegfx
+{
+ class B2DPoint;
+ class B2DRange;
+
+ namespace tools
+ {
+ /** Liang-Barsky 2D line clipping algorithm
+
+ This function clips a line given by two points against the
+ given rectangle. The resulting line is returned in the
+ given points.
+
+ @param io_rStart
+ Start point of the line. On return, contains the clipped
+ start point.
+
+ @param io_rEnd
+ End point of the line. On return, contains the clipped
+ end point.
+
+ @param rClipRect
+ The rectangle to clip against
+
+ @return true, when at least part of the line is visible
+ after the clip, false otherwise
+ */
+ bool liangBarskyClip2D( ::basegfx::B2DPoint& io_rStart,
+ ::basegfx::B2DPoint& io_rEnd,
+ const ::basegfx::B2DRange& rClipRect );
+
+ /** Expand given parallelogram, such that it extends beyond
+ bound rect in a given direction.
+
+ This method is useful when e.g. generating one-dimensional
+ gradients, such as linear or axial gradients: those
+ gradients vary only in one direction, the other has
+ constant color. Most of the time, those gradients extends
+ infinitely in the direction with the constant color, but
+ practically, one always has a limiting bound rect into
+ which the gradient is painted. The method at hand now
+ extends a given parallelogram (e.g. the transformed
+ bounding box of a gradient) virtually into infinity to the
+ top and to the bottom (i.e. normal to the line io_rLeftTop
+ io_rRightTop), such that the given rectangle is guaranteed
+ to be covered in that direction.
+
+ @attention There might be some peculiarities with this
+ method, that might limit its usage to the described
+ gradients. One of them is the fact that when determining
+ how far the parallelogram has to be extended to the top or
+ the bottom, the upper and lower border are assumed to be
+ infinite lines.
+
+ @param io_rLeftTop
+ Left, top edge of the parallelogramm. Note that this need
+ not be the left, top edge geometrically, it's just used
+ when determining the extension direction. Thus, it's
+ perfectly legal to affine-transform a rectangle, and given
+ the transformed point here. On method return, this
+ parameter will contain the adapted output.
+
+ @param io_rLeftBottom
+ Left, bottom edge of the parallelogramm. Note that this need
+ not be the left, bottom edge geometrically, it's just used
+ when determining the extension direction. Thus, it's
+ perfectly legal to affine-transform a rectangle, and given
+ the transformed point here. On method return, this
+ parameter will contain the adapted output.
+
+ @param io_rRightTop
+ Right, top edge of the parallelogramm. Note that this need
+ not be the right, top edge geometrically, it's just used
+ when determining the extension direction. Thus, it's
+ perfectly legal to affine-transform a rectangle, and given
+ the transformed point here. On method return, this
+ parameter will contain the adapted output.
+
+ @param io_rRightBottom
+ Right, bottom edge of the parallelogramm. Note that this need
+ not be the right, bottom edge geometrically, it's just used
+ when determining the extension direction. Thus, it's
+ perfectly legal to affine-transform a rectangle, and given
+ the transformed point here. On method return, this
+ parameter will contain the adapted output.
+
+ @param rFitTarget
+ The rectangle to fit the parallelogram into.
+ */
+ void infiniteLineFromParallelogram( ::basegfx::B2DPoint& io_rLeftTop,
+ ::basegfx::B2DPoint& io_rLeftBottom,
+ ::basegfx::B2DPoint& io_rRightTop,
+ ::basegfx::B2DPoint& io_rRightBottom,
+ const ::basegfx::B2DRange& rFitTarget );
+
+ }
+}
+
+#endif /* _BGFX_TOOLS_TOOLS_HXX */
diff --git a/basegfx/inc/basegfx/tools/unopolypolygon.hxx b/basegfx/inc/basegfx/tools/unopolypolygon.hxx
new file mode 100755
index 000000000000..8a4044e1ca4b
--- /dev/null
+++ b/basegfx/inc/basegfx/tools/unopolypolygon.hxx
@@ -0,0 +1,112 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_BASEGFX_UNOPOLYPOLYGON_HXX
+#define INCLUDED_BASEGFX_UNOPOLYPOLYGON_HXX
+
+#include <cppuhelper/basemutex.hxx>
+#include <cppuhelper/compbase3.hxx>
+#include <com/sun/star/lang/XServiceInfo.hpp>
+#include <com/sun/star/rendering/FillRule.hpp>
+#include <com/sun/star/rendering/XLinePolyPolygon2D.hpp>
+#include <com/sun/star/rendering/XBezierPolyPolygon2D.hpp>
+#include <basegfx/polygon/b2dpolypolygon.hxx>
+
+
+namespace basegfx
+{
+namespace unotools
+{
+ typedef ::cppu::WeakComponentImplHelper3<
+ ::com::sun::star::rendering::XLinePolyPolygon2D,
+ ::com::sun::star::rendering::XBezierPolyPolygon2D,
+ ::com::sun::star::lang::XServiceInfo > UnoPolyPolygonBase;
+
+ class UnoPolyPolygon : private cppu::BaseMutex,
+ public UnoPolyPolygonBase
+ {
+ public:
+ explicit UnoPolyPolygon( const B2DPolyPolygon& );
+
+ // XPolyPolygon2D
+ virtual void SAL_CALL addPolyPolygon( const ::com::sun::star::geometry::RealPoint2D& position, const ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XPolyPolygon2D >& polyPolygon ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException);
+ virtual ::sal_Int32 SAL_CALL getNumberOfPolygons( ) throw (::com::sun::star::uno::RuntimeException);
+ virtual ::sal_Int32 SAL_CALL getNumberOfPolygonPoints( ::sal_Int32 polygon ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::rendering::FillRule SAL_CALL getFillRule( ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL setFillRule( ::com::sun::star::rendering::FillRule fillRule ) throw (::com::sun::star::uno::RuntimeException);
+ virtual ::sal_Bool SAL_CALL isClosed( ::sal_Int32 index ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL setClosed( ::sal_Int32 index, ::sal_Bool closedState ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException);
+
+ // XLinePolyPolygon2D
+ virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Sequence< ::com::sun::star::geometry::RealPoint2D > > SAL_CALL getPoints( ::sal_Int32 nPolygonIndex, ::sal_Int32 nNumberOfPolygons, ::sal_Int32 nPointIndex, ::sal_Int32 nNumberOfPoints ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL setPoints( const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Sequence< ::com::sun::star::geometry::RealPoint2D > >& points, ::sal_Int32 nPolygonIndex ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::geometry::RealPoint2D SAL_CALL getPoint( ::sal_Int32 nPolygonIndex, ::sal_Int32 nPointIndex ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL setPoint( const ::com::sun::star::geometry::RealPoint2D& point, ::sal_Int32 nPolygonIndex, ::sal_Int32 nPointIndex ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException);
+
+ // XBezierPolyPolygon2D
+ virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Sequence< ::com::sun::star::geometry::RealBezierSegment2D > > SAL_CALL getBezierSegments( ::sal_Int32 nPolygonIndex, ::sal_Int32 nNumberOfPolygons, ::sal_Int32 nPointIndex, ::sal_Int32 nNumberOfPoints ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL setBezierSegments( const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Sequence< ::com::sun::star::geometry::RealBezierSegment2D > >& points, ::sal_Int32 nPolygonIndex ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::geometry::RealBezierSegment2D SAL_CALL getBezierSegment( ::sal_Int32 nPolygonIndex, ::sal_Int32 nPointIndex ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL setBezierSegment( const ::com::sun::star::geometry::RealBezierSegment2D& point, ::sal_Int32 nPolygonIndex, ::sal_Int32 nPointIndex ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException);
+
+ // XServiceInfo
+ virtual ::rtl::OUString SAL_CALL getImplementationName() throw( ::com::sun::star::uno::RuntimeException );
+ virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw( ::com::sun::star::uno::RuntimeException );
+ virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames() throw( ::com::sun::star::uno::RuntimeException );
+
+ B2DPolyPolygon getPolyPolygon() const;
+
+ protected:
+ /// Check whether index is a valid polygon index
+ void checkIndex( sal_Int32 nIndex ) const // throw (::com::sun::star::lang::IndexOutOfBoundsException);
+ {
+ if( nIndex < 0 || nIndex >= static_cast<sal_Int32>(maPolyPoly.count()) )
+ throw ::com::sun::star::lang::IndexOutOfBoundsException();
+ }
+
+ B2DPolyPolygon getSubsetPolyPolygon( sal_Int32 nPolygonIndex,
+ sal_Int32 nNumberOfPolygons,
+ sal_Int32 nPointIndex,
+ sal_Int32 nNumberOfPoints ) const;
+
+ /// Get cow copy of internal polygon. not thread-safe outside this object.
+ B2DPolyPolygon getPolyPolygonUnsafe() const;
+
+ /// Called whenever internal polypolygon gets modified
+ virtual void modifying() const {}
+
+ private:
+ UnoPolyPolygon( const UnoPolyPolygon& );
+ UnoPolyPolygon& operator=( const UnoPolyPolygon& );
+
+ B2DPolyPolygon maPolyPoly;
+ ::com::sun::star::rendering::FillRule meFillRule;
+ };
+}
+}
+
+#endif /* INCLUDED_BASEGFX_UNOPOLYPOLYGON_HXX */
diff --git a/basegfx/inc/basegfx/tuple/b2dtuple.hxx b/basegfx/inc/basegfx/tuple/b2dtuple.hxx
new file mode 100644
index 000000000000..71dd227ac736
--- /dev/null
+++ b/basegfx/inc/basegfx/tuple/b2dtuple.hxx
@@ -0,0 +1,359 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_TUPLE_B2DTUPLE_HXX
+#define _BGFX_TUPLE_B2DTUPLE_HXX
+
+#include <sal/types.h>
+#include <basegfx/numeric/ftools.hxx>
+
+namespace basegfx
+{
+ // predeclarations
+ class B2ITuple;
+
+ /** Base class for all Points/Vectors with two double values
+
+ This class provides all methods common to Point
+ avd Vector classes which are derived from here.
+
+ @derive Use this class to implement Points or Vectors
+ which are based on two double values
+ */
+ class B2DTuple
+ {
+ protected:
+ double mfX;
+ double mfY;
+
+ public:
+ /** Create a 2D Tuple
+
+ The tuple is initialized to (0.0, 0.0)
+ */
+ B2DTuple()
+ : mfX(0.0),
+ mfY(0.0)
+ {}
+
+ /** Create a 2D Tuple
+
+ @param fX
+ This parameter is used to initialize the X-coordinate
+ of the 2D Tuple.
+
+ @param fY
+ This parameter is used to initialize the Y-coordinate
+ of the 2D Tuple.
+ */
+ B2DTuple(double fX, double fY)
+ : mfX( fX ),
+ mfY( fY )
+ {}
+
+ /** Create a copy of a 2D Tuple
+
+ @param rTup
+ The 2D Tuple which will be copied.
+ */
+ B2DTuple(const B2DTuple& rTup)
+ : mfX( rTup.mfX ),
+ mfY( rTup.mfY )
+ {}
+
+ /** Create a copy of a 2D integer Tuple
+
+ @param rTup
+ The 2D Tuple which will be copied.
+ */
+ explicit B2DTuple(const B2ITuple& rTup);
+
+ ~B2DTuple()
+ {}
+
+ /// Get X-Coordinate of 2D Tuple
+ double getX() const
+ {
+ return mfX;
+ }
+
+ /// Get Y-Coordinate of 2D Tuple
+ double getY() const
+ {
+ return mfY;
+ }
+
+ /// Set X-Coordinate of 2D Tuple
+ void setX(double fX)
+ {
+ mfX = fX;
+ }
+
+ /// Set Y-Coordinate of 2D Tuple
+ void setY(double fY)
+ {
+ mfY = fY;
+ }
+
+ /// Array-access to 2D Tuple
+ const double& operator[] (int nPos) const
+ {
+ // Here, normally one if(...) should be used. In the assumption that
+ // both double members can be accessed as an array a shortcut is used here.
+ // if(0 == nPos) return mfX; return mfY;
+ return *((&mfX) + nPos);
+ }
+
+ /// Array-access to 2D Tuple
+ double& operator[] (int nPos)
+ {
+ // Here, normally one if(...) should be used. In the assumption that
+ // both double members can be accessed as an array a shortcut is used here.
+ // if(0 == nPos) return mfX; return mfY;
+ return *((&mfX) + nPos);
+ }
+
+ // comparators with tolerance
+ //////////////////////////////////////////////////////////////////////
+
+ bool equalZero() const
+ {
+ return (this == &getEmptyTuple() ||
+ (fTools::equalZero(mfX) && fTools::equalZero(mfY)));
+ }
+
+ bool equalZero(const double& rfSmallValue) const
+ {
+ return (this == &getEmptyTuple() ||
+ (fTools::equalZero(mfX, rfSmallValue) && fTools::equalZero(mfY, rfSmallValue)));
+ }
+
+ bool equal(const B2DTuple& rTup) const
+ {
+ return (
+ this == &rTup ||
+ (fTools::equal(mfX, rTup.mfX) &&
+ fTools::equal(mfY, rTup.mfY)));
+ }
+
+ bool equal(const B2DTuple& rTup, const double& rfSmallValue) const
+ {
+ return (
+ this == &rTup ||
+ (fTools::equal(mfX, rTup.mfX, rfSmallValue) &&
+ fTools::equal(mfY, rTup.mfY, rfSmallValue)));
+ }
+
+ // operators
+ //////////////////////////////////////////////////////////////////////
+
+ B2DTuple& operator+=( const B2DTuple& rTup )
+ {
+ mfX += rTup.mfX;
+ mfY += rTup.mfY;
+ return *this;
+ }
+
+ B2DTuple& operator-=( const B2DTuple& rTup )
+ {
+ mfX -= rTup.mfX;
+ mfY -= rTup.mfY;
+ return *this;
+ }
+
+ B2DTuple& operator/=( const B2DTuple& rTup )
+ {
+ mfX /= rTup.mfX;
+ mfY /= rTup.mfY;
+ return *this;
+ }
+
+ B2DTuple& operator*=( const B2DTuple& rTup )
+ {
+ mfX *= rTup.mfX;
+ mfY *= rTup.mfY;
+ return *this;
+ }
+
+ B2DTuple& operator*=(double t)
+ {
+ mfX *= t;
+ mfY *= t;
+ return *this;
+ }
+
+ B2DTuple& operator/=(double t)
+ {
+ const double fVal(1.0 / t);
+ mfX *= fVal;
+ mfY *= fVal;
+ return *this;
+ }
+
+ B2DTuple operator-(void) const
+ {
+ return B2DTuple(-mfX, -mfY);
+ }
+
+ bool operator==( const B2DTuple& rTup ) const
+ {
+ return equal(rTup);
+ }
+
+ bool operator!=( const B2DTuple& rTup ) const
+ {
+ return !equal(rTup);
+ }
+
+ B2DTuple& operator=( const B2DTuple& rTup )
+ {
+ mfX = rTup.mfX;
+ mfY = rTup.mfY;
+ return *this;
+ }
+
+ void correctValues(const double fCompareValue = 0.0);
+
+ static const B2DTuple& getEmptyTuple();
+ };
+
+ // external operators
+ //////////////////////////////////////////////////////////////////////////
+
+ inline B2DTuple minimum(const B2DTuple& rTupA, const B2DTuple& rTupB)
+ {
+ B2DTuple aMin(
+ (rTupB.getX() < rTupA.getX()) ? rTupB.getX() : rTupA.getX(),
+ (rTupB.getY() < rTupA.getY()) ? rTupB.getY() : rTupA.getY());
+ return aMin;
+ }
+
+ inline B2DTuple maximum(const B2DTuple& rTupA, const B2DTuple& rTupB)
+ {
+ B2DTuple aMax(
+ (rTupB.getX() > rTupA.getX()) ? rTupB.getX() : rTupA.getX(),
+ (rTupB.getY() > rTupA.getY()) ? rTupB.getY() : rTupA.getY());
+ return aMax;
+ }
+
+ inline B2DTuple absolute(const B2DTuple& rTup)
+ {
+ B2DTuple aAbs(
+ (0.0 > rTup.getX()) ? -rTup.getX() : rTup.getX(),
+ (0.0 > rTup.getY()) ? -rTup.getY() : rTup.getY());
+ return aAbs;
+ }
+
+ inline B2DTuple interpolate(const B2DTuple& rOld1, const B2DTuple& rOld2, double t)
+ {
+ B2DTuple aInt(
+ ((rOld2.getX() - rOld1.getX()) * t) + rOld1.getX(),
+ ((rOld2.getY() - rOld1.getY()) * t) + rOld1.getY());
+ return aInt;
+ }
+
+ inline B2DTuple average(const B2DTuple& rOld1, const B2DTuple& rOld2)
+ {
+ B2DTuple aAvg(
+ (rOld1.getX() + rOld2.getX()) * 0.5,
+ (rOld1.getY() + rOld2.getY()) * 0.5);
+ return aAvg;
+ }
+
+ inline B2DTuple average(const B2DTuple& rOld1, const B2DTuple& rOld2, const B2DTuple& rOld3)
+ {
+ B2DTuple aAvg(
+ (rOld1.getX() + rOld2.getX() + rOld3.getX()) * (1.0 / 3.0),
+ (rOld1.getY() + rOld2.getY() + rOld3.getY()) * (1.0 / 3.0));
+ return aAvg;
+ }
+
+ inline B2DTuple operator+(const B2DTuple& rTupA, const B2DTuple& rTupB)
+ {
+ B2DTuple aSum(rTupA);
+ aSum += rTupB;
+ return aSum;
+ }
+
+ inline B2DTuple operator-(const B2DTuple& rTupA, const B2DTuple& rTupB)
+ {
+ B2DTuple aSub(rTupA);
+ aSub -= rTupB;
+ return aSub;
+ }
+
+ inline B2DTuple operator/(const B2DTuple& rTupA, const B2DTuple& rTupB)
+ {
+ B2DTuple aDiv(rTupA);
+ aDiv /= rTupB;
+ return aDiv;
+ }
+
+ inline B2DTuple operator*(const B2DTuple& rTupA, const B2DTuple& rTupB)
+ {
+ B2DTuple aMul(rTupA);
+ aMul *= rTupB;
+ return aMul;
+ }
+
+ inline B2DTuple operator*(const B2DTuple& rTup, double t)
+ {
+ B2DTuple aNew(rTup);
+ aNew *= t;
+ return aNew;
+ }
+
+ inline B2DTuple operator*(double t, const B2DTuple& rTup)
+ {
+ B2DTuple aNew(rTup);
+ aNew *= t;
+ return aNew;
+ }
+
+ inline B2DTuple operator/(const B2DTuple& rTup, double t)
+ {
+ B2DTuple aNew(rTup);
+ aNew /= t;
+ return aNew;
+ }
+
+ inline B2DTuple operator/(double t, const B2DTuple& rTup)
+ {
+ B2DTuple aNew(t, t);
+ B2DTuple aTmp(rTup);
+ aNew /= aTmp;
+ return aNew;
+ }
+
+ /** Round double to nearest integer for 2D tuple
+
+ @return the nearest integer for this tuple
+ */
+ B2ITuple fround(const B2DTuple& rTup);
+} // end of namespace basegfx
+
+#endif /* _BGFX_TUPLE_B2DTUPLE_HXX */
diff --git a/basegfx/inc/basegfx/tuple/b2i64tuple.hxx b/basegfx/inc/basegfx/tuple/b2i64tuple.hxx
new file mode 100644
index 000000000000..9c813c07a994
--- /dev/null
+++ b/basegfx/inc/basegfx/tuple/b2i64tuple.hxx
@@ -0,0 +1,312 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_TUPLE_B2I64TUPLE_HXX
+#define _BGFX_TUPLE_B2I64TUPLE_HXX
+
+#include <sal/types.h>
+#include <basegfx/tuple/b2dtuple.hxx>
+
+
+namespace basegfx
+{
+ /** Base class for all Points/Vectors with two sal_Int64 values
+
+ This class provides all methods common to Point
+ avd Vector classes which are derived from here.
+
+ @derive Use this class to implement Points or Vectors
+ which are based on two sal_Int64 values
+ */
+ class B2I64Tuple
+ {
+ protected:
+ sal_Int64 mnX;
+ sal_Int64 mnY;
+
+ public:
+ /** Create a 2D Tuple
+
+ The tuple is initialized to (0, 0)
+ */
+ B2I64Tuple()
+ : mnX(0),
+ mnY(0)
+ {}
+
+ /** Create a 2D Tuple
+
+ @param fX
+ This parameter is used to initialize the X-coordinate
+ of the 2D Tuple.
+
+ @param fY
+ This parameter is used to initialize the Y-coordinate
+ of the 2D Tuple.
+ */
+ B2I64Tuple(sal_Int64 fX, sal_Int64 fY)
+ : mnX( fX ),
+ mnY( fY )
+ {}
+
+ /** Create a copy of a 2D Tuple
+
+ @param rTup
+ The 2D Tuple which will be copied.
+ */
+ B2I64Tuple(const B2I64Tuple& rTup)
+ : mnX( rTup.mnX ),
+ mnY( rTup.mnY )
+ {}
+
+ ~B2I64Tuple()
+ {}
+
+ /// Get X-Coordinate of 2D Tuple
+ sal_Int64 getX() const
+ {
+ return mnX;
+ }
+
+ /// Get Y-Coordinate of 2D Tuple
+ sal_Int64 getY() const
+ {
+ return mnY;
+ }
+
+ /// Set X-Coordinate of 2D Tuple
+ void setX(sal_Int64 fX)
+ {
+ mnX = fX;
+ }
+
+ /// Set Y-Coordinate of 2D Tuple
+ void setY(sal_Int64 fY)
+ {
+ mnY = fY;
+ }
+
+ /// Array-access to 2D Tuple
+ const sal_Int64& operator[] (int nPos) const
+ {
+ // Here, normally one if(...) should be used. In the assumption that
+ // both sal_Int64 members can be accessed as an array a shortcut is used here.
+ // if(0 == nPos) return mnX; return mnY;
+ return *((&mnX) + nPos);
+ }
+
+ /// Array-access to 2D Tuple
+ sal_Int64& operator[] (int nPos)
+ {
+ // Here, normally one if(...) should be used. In the assumption that
+ // both sal_Int64 members can be accessed as an array a shortcut is used here.
+ // if(0 == nPos) return mnX; return mnY;
+ return *((&mnX) + nPos);
+ }
+
+ // operators
+ //////////////////////////////////////////////////////////////////////
+
+ B2I64Tuple& operator+=( const B2I64Tuple& rTup )
+ {
+ mnX += rTup.mnX;
+ mnY += rTup.mnY;
+ return *this;
+ }
+
+ B2I64Tuple& operator-=( const B2I64Tuple& rTup )
+ {
+ mnX -= rTup.mnX;
+ mnY -= rTup.mnY;
+ return *this;
+ }
+
+ B2I64Tuple& operator/=( const B2I64Tuple& rTup )
+ {
+ mnX /= rTup.mnX;
+ mnY /= rTup.mnY;
+ return *this;
+ }
+
+ B2I64Tuple& operator*=( const B2I64Tuple& rTup )
+ {
+ mnX *= rTup.mnX;
+ mnY *= rTup.mnY;
+ return *this;
+ }
+
+ B2I64Tuple& operator*=(sal_Int64 t)
+ {
+ mnX *= t;
+ mnY *= t;
+ return *this;
+ }
+
+ B2I64Tuple& operator/=(sal_Int64 t)
+ {
+ mnX /= t;
+ mnY /= t;
+ return *this;
+ }
+
+ B2I64Tuple operator-(void) const
+ {
+ return B2I64Tuple(-mnX, -mnY);
+ }
+
+ bool equalZero() const { return mnX == 0 && mnY == 0; }
+
+ bool operator==( const B2I64Tuple& rTup ) const
+ {
+ return this == &rTup || (rTup.mnX == mnX && rTup.mnY == mnY);
+ }
+
+ bool operator!=( const B2I64Tuple& rTup ) const
+ {
+ return !(*this == rTup);
+ }
+
+ B2I64Tuple& operator=( const B2I64Tuple& rTup )
+ {
+ mnX = rTup.mnX;
+ mnY = rTup.mnY;
+ return *this;
+ }
+
+ static const B2I64Tuple& getEmptyTuple();
+ };
+
+ // external operators
+ //////////////////////////////////////////////////////////////////////////
+
+ inline B2I64Tuple minimum(const B2I64Tuple& rTupA, const B2I64Tuple& rTupB)
+ {
+ B2I64Tuple aMin(
+ (rTupB.getX() < rTupA.getX()) ? rTupB.getX() : rTupA.getX(),
+ (rTupB.getY() < rTupA.getY()) ? rTupB.getY() : rTupA.getY());
+ return aMin;
+ }
+
+ inline B2I64Tuple maximum(const B2I64Tuple& rTupA, const B2I64Tuple& rTupB)
+ {
+ B2I64Tuple aMax(
+ (rTupB.getX() > rTupA.getX()) ? rTupB.getX() : rTupA.getX(),
+ (rTupB.getY() > rTupA.getY()) ? rTupB.getY() : rTupA.getY());
+ return aMax;
+ }
+
+ inline B2I64Tuple absolute(const B2I64Tuple& rTup)
+ {
+ B2I64Tuple aAbs(
+ (0 > rTup.getX()) ? -rTup.getX() : rTup.getX(),
+ (0 > rTup.getY()) ? -rTup.getY() : rTup.getY());
+ return aAbs;
+ }
+
+ inline B2DTuple interpolate(const B2I64Tuple& rOld1, const B2I64Tuple& rOld2, double t)
+ {
+ B2DTuple aInt(
+ ((rOld2.getX() - rOld1.getX()) * t) + rOld1.getX(),
+ ((rOld2.getY() - rOld1.getY()) * t) + rOld1.getY());
+ return aInt;
+ }
+
+ inline B2DTuple average(const B2I64Tuple& rOld1, const B2I64Tuple& rOld2)
+ {
+ B2DTuple aAvg(
+ (rOld1.getX() + rOld2.getX()) * 0.5,
+ (rOld1.getY() + rOld2.getY()) * 0.5);
+ return aAvg;
+ }
+
+ inline B2DTuple average(const B2I64Tuple& rOld1, const B2I64Tuple& rOld2, const B2I64Tuple& rOld3)
+ {
+ B2DTuple aAvg(
+ (rOld1.getX() + rOld2.getX() + rOld3.getX()) * (1.0 / 3.0),
+ (rOld1.getY() + rOld2.getY() + rOld3.getY()) * (1.0 / 3.0));
+ return aAvg;
+ }
+
+ inline B2I64Tuple operator+(const B2I64Tuple& rTupA, const B2I64Tuple& rTupB)
+ {
+ B2I64Tuple aSum(rTupA);
+ aSum += rTupB;
+ return aSum;
+ }
+
+ inline B2I64Tuple operator-(const B2I64Tuple& rTupA, const B2I64Tuple& rTupB)
+ {
+ B2I64Tuple aSub(rTupA);
+ aSub -= rTupB;
+ return aSub;
+ }
+
+ inline B2I64Tuple operator/(const B2I64Tuple& rTupA, const B2I64Tuple& rTupB)
+ {
+ B2I64Tuple aDiv(rTupA);
+ aDiv /= rTupB;
+ return aDiv;
+ }
+
+ inline B2I64Tuple operator*(const B2I64Tuple& rTupA, const B2I64Tuple& rTupB)
+ {
+ B2I64Tuple aMul(rTupA);
+ aMul *= rTupB;
+ return aMul;
+ }
+
+ inline B2I64Tuple operator*(const B2I64Tuple& rTup, sal_Int64 t)
+ {
+ B2I64Tuple aNew(rTup);
+ aNew *= t;
+ return aNew;
+ }
+
+ inline B2I64Tuple operator*(sal_Int64 t, const B2I64Tuple& rTup)
+ {
+ B2I64Tuple aNew(rTup);
+ aNew *= t;
+ return aNew;
+ }
+
+ inline B2I64Tuple operator/(const B2I64Tuple& rTup, sal_Int64 t)
+ {
+ B2I64Tuple aNew(rTup);
+ aNew /= t;
+ return aNew;
+ }
+
+ inline B2I64Tuple operator/(sal_Int64 t, const B2I64Tuple& rTup)
+ {
+ B2I64Tuple aNew(t, t);
+ B2I64Tuple aTmp(rTup);
+ aNew /= aTmp;
+ return aNew;
+ }
+} // end of namespace basegfx
+
+#endif /* _BGFX_TUPLE_B2I64TUPLE_HXX */
diff --git a/basegfx/inc/basegfx/tuple/b2ituple.hxx b/basegfx/inc/basegfx/tuple/b2ituple.hxx
new file mode 100644
index 000000000000..da29b5509dec
--- /dev/null
+++ b/basegfx/inc/basegfx/tuple/b2ituple.hxx
@@ -0,0 +1,237 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_TUPLE_B2ITUPLE_HXX
+#define _BGFX_TUPLE_B2ITUPLE_HXX
+
+#include <sal/types.h>
+
+
+namespace basegfx
+{
+ /** Base class for all Points/Vectors with two sal_Int32 values
+
+ This class provides all methods common to Point
+ avd Vector classes which are derived from here.
+
+ @derive Use this class to implement Points or Vectors
+ which are based on two sal_Int32 values
+ */
+ class B2ITuple
+ {
+ protected:
+ sal_Int32 mnX;
+ sal_Int32 mnY;
+
+ public:
+ /** Create a 2D Tuple
+
+ The tuple is initialized to (0, 0)
+ */
+ B2ITuple()
+ : mnX(0),
+ mnY(0)
+ {}
+
+ /** Create a 2D Tuple
+
+ @param fX
+ This parameter is used to initialize the X-coordinate
+ of the 2D Tuple.
+
+ @param fY
+ This parameter is used to initialize the Y-coordinate
+ of the 2D Tuple.
+ */
+ B2ITuple(sal_Int32 fX, sal_Int32 fY)
+ : mnX( fX ),
+ mnY( fY )
+ {}
+
+ /** Create a copy of a 2D Tuple
+
+ @param rTup
+ The 2D Tuple which will be copied.
+ */
+ B2ITuple(const B2ITuple& rTup)
+ : mnX( rTup.mnX ),
+ mnY( rTup.mnY )
+ {}
+
+ ~B2ITuple()
+ {}
+
+ /// Get X-Coordinate of 2D Tuple
+ sal_Int32 getX() const
+ {
+ return mnX;
+ }
+
+ /// Get Y-Coordinate of 2D Tuple
+ sal_Int32 getY() const
+ {
+ return mnY;
+ }
+
+ /// Set X-Coordinate of 2D Tuple
+ void setX(sal_Int32 fX)
+ {
+ mnX = fX;
+ }
+
+ /// Set Y-Coordinate of 2D Tuple
+ void setY(sal_Int32 fY)
+ {
+ mnY = fY;
+ }
+
+ /// Array-access to 2D Tuple
+ const sal_Int32& operator[] (int nPos) const
+ {
+ // Here, normally one if(...) should be used. In the assumption that
+ // both sal_Int32 members can be accessed as an array a shortcut is used here.
+ // if(0 == nPos) return mnX; return mnY;
+ return *((&mnX) + nPos);
+ }
+
+ /// Array-access to 2D Tuple
+ sal_Int32& operator[] (int nPos)
+ {
+ // Here, normally one if(...) should be used. In the assumption that
+ // both sal_Int32 members can be accessed as an array a shortcut is used here.
+ // if(0 == nPos) return mnX; return mnY;
+ return *((&mnX) + nPos);
+ }
+
+ // operators
+ //////////////////////////////////////////////////////////////////////
+
+ B2ITuple& operator+=( const B2ITuple& rTup )
+ {
+ mnX += rTup.mnX;
+ mnY += rTup.mnY;
+ return *this;
+ }
+
+ B2ITuple& operator-=( const B2ITuple& rTup )
+ {
+ mnX -= rTup.mnX;
+ mnY -= rTup.mnY;
+ return *this;
+ }
+
+ B2ITuple& operator/=( const B2ITuple& rTup )
+ {
+ mnX /= rTup.mnX;
+ mnY /= rTup.mnY;
+ return *this;
+ }
+
+ B2ITuple& operator*=( const B2ITuple& rTup )
+ {
+ mnX *= rTup.mnX;
+ mnY *= rTup.mnY;
+ return *this;
+ }
+
+ B2ITuple& operator*=(sal_Int32 t)
+ {
+ mnX *= t;
+ mnY *= t;
+ return *this;
+ }
+
+ B2ITuple& operator/=(sal_Int32 t)
+ {
+ mnX /= t;
+ mnY /= t;
+ return *this;
+ }
+
+ B2ITuple operator-(void) const
+ {
+ return B2ITuple(-mnX, -mnY);
+ }
+
+ bool equalZero() const { return mnX == 0 && mnY == 0; }
+
+ bool operator==( const B2ITuple& rTup ) const
+ {
+ return this == &rTup || (rTup.mnX == mnX && rTup.mnY == mnY);
+ }
+
+ bool operator!=( const B2ITuple& rTup ) const
+ {
+ return !(*this == rTup);
+ }
+
+ B2ITuple& operator=( const B2ITuple& rTup )
+ {
+ mnX = rTup.mnX;
+ mnY = rTup.mnY;
+ return *this;
+ }
+
+ static const B2ITuple& getEmptyTuple();
+ };
+
+ // external operators
+ //////////////////////////////////////////////////////////////////////////
+
+ class B2DTuple;
+
+ B2ITuple minimum(const B2ITuple& rTupA, const B2ITuple& rTupB);
+
+ B2ITuple maximum(const B2ITuple& rTupA, const B2ITuple& rTupB);
+
+ B2ITuple absolute(const B2ITuple& rTup);
+
+ B2DTuple interpolate(const B2ITuple& rOld1, const B2ITuple& rOld2, double t);
+
+ B2DTuple average(const B2ITuple& rOld1, const B2ITuple& rOld2);
+
+ B2DTuple average(const B2ITuple& rOld1, const B2ITuple& rOld2, const B2ITuple& rOld3);
+
+ B2ITuple operator+(const B2ITuple& rTupA, const B2ITuple& rTupB);
+
+ B2ITuple operator-(const B2ITuple& rTupA, const B2ITuple& rTupB);
+
+ B2ITuple operator/(const B2ITuple& rTupA, const B2ITuple& rTupB);
+
+ B2ITuple operator*(const B2ITuple& rTupA, const B2ITuple& rTupB);
+
+ B2ITuple operator*(const B2ITuple& rTup, sal_Int32 t);
+
+ B2ITuple operator*(sal_Int32 t, const B2ITuple& rTup);
+
+ B2ITuple operator/(const B2ITuple& rTup, sal_Int32 t);
+
+ B2ITuple operator/(sal_Int32 t, const B2ITuple& rTup);
+
+} // end of namespace basegfx
+
+#endif /* _BGFX_TUPLE_B2ITUPLE_HXX */
diff --git a/basegfx/inc/basegfx/tuple/b3dtuple.hxx b/basegfx/inc/basegfx/tuple/b3dtuple.hxx
new file mode 100644
index 000000000000..11fb797ff0ff
--- /dev/null
+++ b/basegfx/inc/basegfx/tuple/b3dtuple.hxx
@@ -0,0 +1,433 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_TUPLE_B3DTUPLE_HXX
+#define _BGFX_TUPLE_B3DTUPLE_HXX
+
+#include <sal/types.h>
+#include <basegfx/numeric/ftools.hxx>
+
+namespace basegfx
+{
+ // predeclarations
+ class B3ITuple;
+
+ /** Base class for all Points/Vectors with three double values
+
+ This class provides all methods common to Point
+ avd Vector classes which are derived from here.
+
+ @derive Use this class to implement Points or Vectors
+ which are based on three double values
+ */
+ class B3DTuple
+ {
+ protected:
+ double mfX;
+ double mfY;
+ double mfZ;
+
+ public:
+ /** Create a 3D Tuple
+
+ The tuple is initialized to (0.0, 0.0, 0.0)
+ */
+ B3DTuple()
+ : mfX(0.0),
+ mfY(0.0),
+ mfZ(0.0)
+ {}
+
+ /** Create a 3D Tuple
+
+ @param fX
+ This parameter is used to initialize the X-coordinate
+ of the 3D Tuple.
+
+ @param fY
+ This parameter is used to initialize the Y-coordinate
+ of the 3D Tuple.
+
+ @param fZ
+ This parameter is used to initialize the Z-coordinate
+ of the 3D Tuple.
+ */
+ B3DTuple(double fX, double fY, double fZ)
+ : mfX(fX),
+ mfY(fY),
+ mfZ(fZ)
+ {}
+
+ /** Create a copy of a 3D Tuple
+
+ @param rTup
+ The 3D Tuple which will be copied.
+ */
+ B3DTuple(const B3DTuple& rTup)
+ : mfX( rTup.mfX ),
+ mfY( rTup.mfY ),
+ mfZ( rTup.mfZ )
+ {}
+
+ /** Create a copy of a 3D integer Tuple
+
+ @param rTup
+ The 3D Tuple which will be copied.
+ */
+ explicit B3DTuple(const B3ITuple& rTup);
+
+ ~B3DTuple()
+ {}
+
+ /// get X-Coordinate of 3D Tuple
+ double getX() const
+ {
+ return mfX;
+ }
+
+ /// get Y-Coordinate of 3D Tuple
+ double getY() const
+ {
+ return mfY;
+ }
+
+ /// get Z-Coordinate of 3D Tuple
+ double getZ() const
+ {
+ return mfZ;
+ }
+
+ /// set X-Coordinate of 3D Tuple
+ void setX(double fX)
+ {
+ mfX = fX;
+ }
+
+ /// set Y-Coordinate of 3D Tuple
+ void setY(double fY)
+ {
+ mfY = fY;
+ }
+
+ /// set Z-Coordinate of 3D Tuple
+ void setZ(double fZ)
+ {
+ mfZ = fZ;
+ }
+
+ /// Array-access to 3D Tuple
+ const double& operator[] (int nPos) const
+ {
+ // Here, normally two if(...)'s should be used. In the assumption that
+ // both double members can be accessed as an array a shortcut is used here.
+ // if(0 == nPos) return mfX; if(1 == nPos) return mfY; return mfZ;
+ return *((&mfX) + nPos);
+ }
+
+ /// Array-access to 3D Tuple
+ double& operator[] (int nPos)
+ {
+ // Here, normally two if(...)'s should be used. In the assumption that
+ // both double members can be accessed as an array a shortcut is used here.
+ // if(0 == nPos) return mfX; if(1 == nPos) return mfY; return mfZ;
+ return *((&mfX) + nPos);
+ }
+
+ // comparators with tolerance
+ //////////////////////////////////////////////////////////////////////
+
+ bool equalZero() const
+ {
+ return (this == &getEmptyTuple() ||
+ (::basegfx::fTools::equalZero(mfX)
+ && ::basegfx::fTools::equalZero(mfY)
+ && ::basegfx::fTools::equalZero(mfZ)));
+ }
+
+ bool equalZero(const double& rfSmallValue) const
+ {
+ return (this == &getEmptyTuple() ||
+ (::basegfx::fTools::equalZero(mfX, rfSmallValue)
+ && ::basegfx::fTools::equalZero(mfY, rfSmallValue)
+ && ::basegfx::fTools::equalZero(mfZ, rfSmallValue)));
+ }
+
+ bool equal(const B3DTuple& rTup) const
+ {
+ return (
+ this == &rTup ||
+ (::basegfx::fTools::equal(mfX, rTup.mfX) &&
+ ::basegfx::fTools::equal(mfY, rTup.mfY) &&
+ ::basegfx::fTools::equal(mfZ, rTup.mfZ)));
+ }
+
+ bool equal(const B3DTuple& rTup, const double& rfSmallValue) const
+ {
+ return (
+ this == &rTup ||
+ (::basegfx::fTools::equal(mfX, rTup.mfX, rfSmallValue) &&
+ ::basegfx::fTools::equal(mfY, rTup.mfY, rfSmallValue) &&
+ ::basegfx::fTools::equal(mfZ, rTup.mfZ, rfSmallValue)));
+ }
+
+ // operators
+ //////////////////////////////////////////////////////////////////////
+
+ B3DTuple& operator+=( const B3DTuple& rTup )
+ {
+ mfX += rTup.mfX;
+ mfY += rTup.mfY;
+ mfZ += rTup.mfZ;
+ return *this;
+ }
+
+ B3DTuple& operator-=( const B3DTuple& rTup )
+ {
+ mfX -= rTup.mfX;
+ mfY -= rTup.mfY;
+ mfZ -= rTup.mfZ;
+ return *this;
+ }
+
+ B3DTuple& operator/=( const B3DTuple& rTup )
+ {
+ mfX /= rTup.mfX;
+ mfY /= rTup.mfY;
+ mfZ /= rTup.mfZ;
+ return *this;
+ }
+
+ B3DTuple& operator*=( const B3DTuple& rTup )
+ {
+ mfX *= rTup.mfX;
+ mfY *= rTup.mfY;
+ mfZ *= rTup.mfZ;
+ return *this;
+ }
+
+ B3DTuple& operator*=(double t)
+ {
+ mfX *= t;
+ mfY *= t;
+ mfZ *= t;
+ return *this;
+ }
+
+ B3DTuple& operator/=(double t)
+ {
+ const double fVal(1.0 / t);
+ mfX *= fVal;
+ mfY *= fVal;
+ mfZ *= fVal;
+ return *this;
+ }
+
+ B3DTuple operator-(void) const
+ {
+ return B3DTuple(-mfX, -mfY, -mfZ);
+ }
+
+ bool operator==( const B3DTuple& rTup ) const
+ {
+ return equal(rTup);
+ }
+
+ bool operator!=( const B3DTuple& rTup ) const
+ {
+ return !equal(rTup);
+ }
+
+ B3DTuple& operator=( const B3DTuple& rTup )
+ {
+ mfX = rTup.mfX;
+ mfY = rTup.mfY;
+ mfZ = rTup.mfZ;
+ return *this;
+ }
+
+ void correctValues(const double fCompareValue = 0.0)
+ {
+ if(0.0 == fCompareValue)
+ {
+ if(::basegfx::fTools::equalZero(mfX))
+ {
+ mfX = 0.0;
+ }
+
+ if(::basegfx::fTools::equalZero(mfY))
+ {
+ mfY = 0.0;
+ }
+
+ if(::basegfx::fTools::equalZero(mfZ))
+ {
+ mfZ = 0.0;
+ }
+ }
+ else
+ {
+ if(::basegfx::fTools::equal(mfX, fCompareValue))
+ {
+ mfX = fCompareValue;
+ }
+
+ if(::basegfx::fTools::equal(mfY, fCompareValue))
+ {
+ mfY = fCompareValue;
+ }
+
+ if(::basegfx::fTools::equal(mfZ, fCompareValue))
+ {
+ mfZ = fCompareValue;
+ }
+ }
+ }
+
+ static const B3DTuple& getEmptyTuple();
+ };
+
+ // external operators
+ //////////////////////////////////////////////////////////////////////////
+
+ inline B3DTuple minimum(const B3DTuple& rTupA, const B3DTuple& rTupB)
+ {
+ B3DTuple aMin(
+ (rTupB.getX() < rTupA.getX()) ? rTupB.getX() : rTupA.getX(),
+ (rTupB.getY() < rTupA.getY()) ? rTupB.getY() : rTupA.getY(),
+ (rTupB.getZ() < rTupA.getZ()) ? rTupB.getZ() : rTupA.getZ());
+ return aMin;
+ }
+
+ inline B3DTuple maximum(const B3DTuple& rTupA, const B3DTuple& rTupB)
+ {
+ B3DTuple aMax(
+ (rTupB.getX() > rTupA.getX()) ? rTupB.getX() : rTupA.getX(),
+ (rTupB.getY() > rTupA.getY()) ? rTupB.getY() : rTupA.getY(),
+ (rTupB.getZ() > rTupA.getZ()) ? rTupB.getZ() : rTupA.getZ());
+ return aMax;
+ }
+
+ inline B3DTuple absolute(const B3DTuple& rTup)
+ {
+ B3DTuple aAbs(
+ (0.0 > rTup.getX()) ? -rTup.getX() : rTup.getX(),
+ (0.0 > rTup.getY()) ? -rTup.getY() : rTup.getY(),
+ (0.0 > rTup.getZ()) ? -rTup.getZ() : rTup.getZ());
+ return aAbs;
+ }
+
+ inline B3DTuple interpolate(const B3DTuple& rOld1, const B3DTuple& rOld2, double t)
+ {
+ B3DTuple aInt(
+ ((rOld2.getX() - rOld1.getX()) * t) + rOld1.getX(),
+ ((rOld2.getY() - rOld1.getY()) * t) + rOld1.getY(),
+ ((rOld2.getZ() - rOld1.getZ()) * t) + rOld1.getZ());
+ return aInt;
+ }
+
+ inline B3DTuple average(const B3DTuple& rOld1, const B3DTuple& rOld2)
+ {
+ B3DTuple aAvg(
+ (rOld1.getX() + rOld2.getX()) * 0.5,
+ (rOld1.getY() + rOld2.getY()) * 0.5,
+ (rOld1.getZ() + rOld2.getZ()) * 0.5);
+ return aAvg;
+ }
+
+ inline B3DTuple average(const B3DTuple& rOld1, const B3DTuple& rOld2, const B3DTuple& rOld3)
+ {
+ B3DTuple aAvg(
+ (rOld1.getX() + rOld2.getX() + rOld3.getX()) * (1.0 / 3.0),
+ (rOld1.getY() + rOld2.getY() + rOld3.getY()) * (1.0 / 3.0),
+ (rOld1.getZ() + rOld2.getZ() + rOld3.getZ()) * (1.0 / 3.0));
+ return aAvg;
+ }
+
+ inline B3DTuple operator+(const B3DTuple& rTupA, const B3DTuple& rTupB)
+ {
+ B3DTuple aSum(rTupA);
+ aSum += rTupB;
+ return aSum;
+ }
+
+ inline B3DTuple operator-(const B3DTuple& rTupA, const B3DTuple& rTupB)
+ {
+ B3DTuple aSub(rTupA);
+ aSub -= rTupB;
+ return aSub;
+ }
+
+ inline B3DTuple operator/(const B3DTuple& rTupA, const B3DTuple& rTupB)
+ {
+ B3DTuple aDiv(rTupA);
+ aDiv /= rTupB;
+ return aDiv;
+ }
+
+ inline B3DTuple operator*(const B3DTuple& rTupA, const B3DTuple& rTupB)
+ {
+ B3DTuple aMul(rTupA);
+ aMul *= rTupB;
+ return aMul;
+ }
+
+ inline B3DTuple operator*(const B3DTuple& rTup, double t)
+ {
+ B3DTuple aNew(rTup);
+ aNew *= t;
+ return aNew;
+ }
+
+ inline B3DTuple operator*(double t, const B3DTuple& rTup)
+ {
+ B3DTuple aNew(rTup);
+ aNew *= t;
+ return aNew;
+ }
+
+ inline B3DTuple operator/(const B3DTuple& rTup, double t)
+ {
+ B3DTuple aNew(rTup);
+ aNew /= t;
+ return aNew;
+ }
+
+ inline B3DTuple operator/(double t, const B3DTuple& rTup)
+ {
+ B3DTuple aNew(rTup);
+ aNew /= t;
+ return aNew;
+ }
+
+ /** Round double to nearest integer for 3D tuple
+
+ @return the nearest integer for this tuple
+ */
+ B3ITuple fround(const B3DTuple& rTup);
+} // end of namespace basegfx
+
+#endif /* _BGFX_TUPLE_B3DTUPLE_HXX */
diff --git a/basegfx/inc/basegfx/tuple/b3i64tuple.hxx b/basegfx/inc/basegfx/tuple/b3i64tuple.hxx
new file mode 100644
index 000000000000..a2d754fe4f79
--- /dev/null
+++ b/basegfx/inc/basegfx/tuple/b3i64tuple.hxx
@@ -0,0 +1,349 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_TUPLE_B3I64TUPLE_HXX
+#define _BGFX_TUPLE_B3I64TUPLE_HXX
+
+#include <sal/types.h>
+#include <basegfx/tuple/b3dtuple.hxx>
+
+
+namespace basegfx
+{
+ /** Base class for all Points/Vectors with three sal_Int64 values
+
+ This class provides all methods common to Point
+ avd Vector classes which are derived from here.
+
+ @derive Use this class to implement Points or Vectors
+ which are based on three sal_Int64 values
+ */
+ class B3I64Tuple
+ {
+ protected:
+ sal_Int64 mnX;
+ sal_Int64 mnY;
+ sal_Int64 mnZ;
+
+ public:
+ /** Create a 3D Tuple
+
+ The tuple is initialized to (0, 0, 0)
+ */
+ B3I64Tuple()
+ : mnX(0),
+ mnY(0),
+ mnZ(0)
+ {}
+
+ /** Create a 3D Tuple
+
+ @param nX
+ This parameter is used to initialize the X-coordinate
+ of the 3D Tuple.
+
+ @param nY
+ This parameter is used to initialize the Y-coordinate
+ of the 3D Tuple.
+
+ @param nZ
+ This parameter is used to initialize the Z-coordinate
+ of the 3D Tuple.
+ */
+ B3I64Tuple(sal_Int64 nX, sal_Int64 nY, sal_Int64 nZ)
+ : mnX(nX),
+ mnY(nY),
+ mnZ(nZ)
+ {}
+
+ /** Create a copy of a 3D Tuple
+
+ @param rTup
+ The 3D Tuple which will be copied.
+ */
+ B3I64Tuple(const B3I64Tuple& rTup)
+ : mnX( rTup.mnX ),
+ mnY( rTup.mnY ),
+ mnZ( rTup.mnZ )
+ {}
+
+ ~B3I64Tuple()
+ {}
+
+ /// get X-Coordinate of 3D Tuple
+ sal_Int64 getX() const
+ {
+ return mnX;
+ }
+
+ /// get Y-Coordinate of 3D Tuple
+ sal_Int64 getY() const
+ {
+ return mnY;
+ }
+
+ /// get Z-Coordinate of 3D Tuple
+ sal_Int64 getZ() const
+ {
+ return mnZ;
+ }
+
+ /// set X-Coordinate of 3D Tuple
+ void setX(sal_Int64 nX)
+ {
+ mnX = nX;
+ }
+
+ /// set Y-Coordinate of 3D Tuple
+ void setY(sal_Int64 nY)
+ {
+ mnY = nY;
+ }
+
+ /// set Z-Coordinate of 3D Tuple
+ void setZ(sal_Int64 nZ)
+ {
+ mnZ = nZ;
+ }
+
+ /// Array-access to 3D Tuple
+ const sal_Int64& operator[] (int nPos) const
+ {
+ // Here, normally two if(...)'s should be used. In the assumption that
+ // both sal_Int64 members can be accessed as an array a shortcut is used here.
+ // if(0 == nPos) return mnX; if(1 == nPos) return mnY; return mnZ;
+ return *((&mnX) + nPos);
+ }
+
+ /// Array-access to 3D Tuple
+ sal_Int64& operator[] (int nPos)
+ {
+ // Here, normally two if(...)'s should be used. In the assumption that
+ // both sal_Int64 members can be accessed as an array a shortcut is used here.
+ // if(0 == nPos) return mnX; if(1 == nPos) return mnY; return mnZ;
+ return *((&mnX) + nPos);
+ }
+
+ // operators
+ //////////////////////////////////////////////////////////////////////
+
+ B3I64Tuple& operator+=( const B3I64Tuple& rTup )
+ {
+ mnX += rTup.mnX;
+ mnY += rTup.mnY;
+ mnZ += rTup.mnZ;
+ return *this;
+ }
+
+ B3I64Tuple& operator-=( const B3I64Tuple& rTup )
+ {
+ mnX -= rTup.mnX;
+ mnY -= rTup.mnY;
+ mnZ -= rTup.mnZ;
+ return *this;
+ }
+
+ B3I64Tuple& operator/=( const B3I64Tuple& rTup )
+ {
+ mnX /= rTup.mnX;
+ mnY /= rTup.mnY;
+ mnZ /= rTup.mnZ;
+ return *this;
+ }
+
+ B3I64Tuple& operator*=( const B3I64Tuple& rTup )
+ {
+ mnX *= rTup.mnX;
+ mnY *= rTup.mnY;
+ mnZ *= rTup.mnZ;
+ return *this;
+ }
+
+ B3I64Tuple& operator*=(sal_Int64 t)
+ {
+ mnX *= t;
+ mnY *= t;
+ mnZ *= t;
+ return *this;
+ }
+
+ B3I64Tuple& operator/=(sal_Int64 t)
+ {
+ mnX /= t;
+ mnY /= t;
+ mnZ /= t;
+ return *this;
+ }
+
+ B3I64Tuple operator-(void) const
+ {
+ return B3I64Tuple(-mnX, -mnY, -mnZ);
+ }
+
+ bool equalZero() const
+ {
+ return (this == &getEmptyTuple() ||
+ (mnX == 0 && mnY == 0 && mnZ == 0));
+ }
+
+ bool operator==( const B3I64Tuple& rTup ) const
+ {
+ return this == &rTup || (rTup.mnX == mnX && rTup.mnY == mnY && rTup.mnZ == mnZ);
+ }
+
+ bool operator!=( const B3I64Tuple& rTup ) const
+ {
+ return !(*this == rTup);
+ }
+
+ B3I64Tuple& operator=( const B3I64Tuple& rTup )
+ {
+ mnX = rTup.mnX;
+ mnY = rTup.mnY;
+ mnZ = rTup.mnZ;
+ return *this;
+ }
+
+ static const B3I64Tuple& getEmptyTuple();
+ };
+
+ // external operators
+ //////////////////////////////////////////////////////////////////////////
+
+ inline B3I64Tuple minimum(const B3I64Tuple& rTupA, const B3I64Tuple& rTupB)
+ {
+ B3I64Tuple aMin(
+ (rTupB.getX() < rTupA.getX()) ? rTupB.getX() : rTupA.getX(),
+ (rTupB.getY() < rTupA.getY()) ? rTupB.getY() : rTupA.getY(),
+ (rTupB.getZ() < rTupA.getZ()) ? rTupB.getZ() : rTupA.getZ());
+ return aMin;
+ }
+
+ inline B3I64Tuple maximum(const B3I64Tuple& rTupA, const B3I64Tuple& rTupB)
+ {
+ B3I64Tuple aMax(
+ (rTupB.getX() > rTupA.getX()) ? rTupB.getX() : rTupA.getX(),
+ (rTupB.getY() > rTupA.getY()) ? rTupB.getY() : rTupA.getY(),
+ (rTupB.getZ() > rTupA.getZ()) ? rTupB.getZ() : rTupA.getZ());
+ return aMax;
+ }
+
+ inline B3I64Tuple absolute(const B3I64Tuple& rTup)
+ {
+ B3I64Tuple aAbs(
+ (0 > rTup.getX()) ? -rTup.getX() : rTup.getX(),
+ (0 > rTup.getY()) ? -rTup.getY() : rTup.getY(),
+ (0 > rTup.getZ()) ? -rTup.getZ() : rTup.getZ());
+ return aAbs;
+ }
+
+ inline B3DTuple interpolate(const B3I64Tuple& rOld1, const B3I64Tuple& rOld2, double t)
+ {
+ B3DTuple aInt(
+ ((rOld2.getX() - rOld1.getX()) * t) + rOld1.getX(),
+ ((rOld2.getY() - rOld1.getY()) * t) + rOld1.getY(),
+ ((rOld2.getZ() - rOld1.getZ()) * t) + rOld1.getZ());
+ return aInt;
+ }
+
+ inline B3DTuple average(const B3I64Tuple& rOld1, const B3I64Tuple& rOld2)
+ {
+ B3DTuple aAvg(
+ (rOld1.getX() + rOld2.getX()) * 0.5,
+ (rOld1.getY() + rOld2.getY()) * 0.5,
+ (rOld1.getZ() + rOld2.getZ()) * 0.5);
+ return aAvg;
+ }
+
+ inline B3DTuple average(const B3I64Tuple& rOld1, const B3I64Tuple& rOld2, const B3I64Tuple& rOld3)
+ {
+ B3DTuple aAvg(
+ (rOld1.getX() + rOld2.getX() + rOld3.getX()) * (1.0 / 3.0),
+ (rOld1.getY() + rOld2.getY() + rOld3.getY()) * (1.0 / 3.0),
+ (rOld1.getZ() + rOld2.getZ() + rOld3.getZ()) * (1.0 / 3.0));
+ return aAvg;
+ }
+
+ inline B3I64Tuple operator+(const B3I64Tuple& rTupA, const B3I64Tuple& rTupB)
+ {
+ B3I64Tuple aSum(rTupA);
+ aSum += rTupB;
+ return aSum;
+ }
+
+ inline B3I64Tuple operator-(const B3I64Tuple& rTupA, const B3I64Tuple& rTupB)
+ {
+ B3I64Tuple aSub(rTupA);
+ aSub -= rTupB;
+ return aSub;
+ }
+
+ inline B3I64Tuple operator/(const B3I64Tuple& rTupA, const B3I64Tuple& rTupB)
+ {
+ B3I64Tuple aDiv(rTupA);
+ aDiv /= rTupB;
+ return aDiv;
+ }
+
+ inline B3I64Tuple operator*(const B3I64Tuple& rTupA, const B3I64Tuple& rTupB)
+ {
+ B3I64Tuple aMul(rTupA);
+ aMul *= rTupB;
+ return aMul;
+ }
+
+ inline B3I64Tuple operator*(const B3I64Tuple& rTup, sal_Int64 t)
+ {
+ B3I64Tuple aNew(rTup);
+ aNew *= t;
+ return aNew;
+ }
+
+ inline B3I64Tuple operator*(sal_Int64 t, const B3I64Tuple& rTup)
+ {
+ B3I64Tuple aNew(rTup);
+ aNew *= t;
+ return aNew;
+ }
+
+ inline B3I64Tuple operator/(const B3I64Tuple& rTup, sal_Int64 t)
+ {
+ B3I64Tuple aNew(rTup);
+ aNew /= t;
+ return aNew;
+ }
+
+ inline B3I64Tuple operator/(sal_Int64 t, const B3I64Tuple& rTup)
+ {
+ B3I64Tuple aNew(t, t, t);
+ B3I64Tuple aTmp(rTup);
+ aNew /= aTmp;
+ return aNew;
+ }
+} // end of namespace basegfx
+
+#endif /* _BGFX_TUPLE_B3I64TUPLE_HXX */
diff --git a/basegfx/inc/basegfx/tuple/b3ituple.hxx b/basegfx/inc/basegfx/tuple/b3ituple.hxx
new file mode 100644
index 000000000000..644ae07b6545
--- /dev/null
+++ b/basegfx/inc/basegfx/tuple/b3ituple.hxx
@@ -0,0 +1,349 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_TUPLE_B3ITUPLE_HXX
+#define _BGFX_TUPLE_B3ITUPLE_HXX
+
+#include <sal/types.h>
+#include <basegfx/tuple/b3dtuple.hxx>
+
+
+namespace basegfx
+{
+ /** Base class for all Points/Vectors with three sal_Int32 values
+
+ This class provides all methods common to Point
+ avd Vector classes which are derived from here.
+
+ @derive Use this class to implement Points or Vectors
+ which are based on three sal_Int32 values
+ */
+ class B3ITuple
+ {
+ protected:
+ sal_Int32 mnX;
+ sal_Int32 mnY;
+ sal_Int32 mnZ;
+
+ public:
+ /** Create a 3D Tuple
+
+ The tuple is initialized to (0, 0, 0)
+ */
+ B3ITuple()
+ : mnX(0),
+ mnY(0),
+ mnZ(0)
+ {}
+
+ /** Create a 3D Tuple
+
+ @param nX
+ This parameter is used to initialize the X-coordinate
+ of the 3D Tuple.
+
+ @param nY
+ This parameter is used to initialize the Y-coordinate
+ of the 3D Tuple.
+
+ @param nZ
+ This parameter is used to initialize the Z-coordinate
+ of the 3D Tuple.
+ */
+ B3ITuple(sal_Int32 nX, sal_Int32 nY, sal_Int32 nZ)
+ : mnX(nX),
+ mnY(nY),
+ mnZ(nZ)
+ {}
+
+ /** Create a copy of a 3D Tuple
+
+ @param rTup
+ The 3D Tuple which will be copied.
+ */
+ B3ITuple(const B3ITuple& rTup)
+ : mnX( rTup.mnX ),
+ mnY( rTup.mnY ),
+ mnZ( rTup.mnZ )
+ {}
+
+ ~B3ITuple()
+ {}
+
+ /// get X-Coordinate of 3D Tuple
+ sal_Int32 getX() const
+ {
+ return mnX;
+ }
+
+ /// get Y-Coordinate of 3D Tuple
+ sal_Int32 getY() const
+ {
+ return mnY;
+ }
+
+ /// get Z-Coordinate of 3D Tuple
+ sal_Int32 getZ() const
+ {
+ return mnZ;
+ }
+
+ /// set X-Coordinate of 3D Tuple
+ void setX(sal_Int32 nX)
+ {
+ mnX = nX;
+ }
+
+ /// set Y-Coordinate of 3D Tuple
+ void setY(sal_Int32 nY)
+ {
+ mnY = nY;
+ }
+
+ /// set Z-Coordinate of 3D Tuple
+ void setZ(sal_Int32 nZ)
+ {
+ mnZ = nZ;
+ }
+
+ /// Array-access to 3D Tuple
+ const sal_Int32& operator[] (int nPos) const
+ {
+ // Here, normally two if(...)'s should be used. In the assumption that
+ // both sal_Int32 members can be accessed as an array a shortcut is used here.
+ // if(0 == nPos) return mnX; if(1 == nPos) return mnY; return mnZ;
+ return *((&mnX) + nPos);
+ }
+
+ /// Array-access to 3D Tuple
+ sal_Int32& operator[] (int nPos)
+ {
+ // Here, normally two if(...)'s should be used. In the assumption that
+ // both sal_Int32 members can be accessed as an array a shortcut is used here.
+ // if(0 == nPos) return mnX; if(1 == nPos) return mnY; return mnZ;
+ return *((&mnX) + nPos);
+ }
+
+ // operators
+ //////////////////////////////////////////////////////////////////////
+
+ B3ITuple& operator+=( const B3ITuple& rTup )
+ {
+ mnX += rTup.mnX;
+ mnY += rTup.mnY;
+ mnZ += rTup.mnZ;
+ return *this;
+ }
+
+ B3ITuple& operator-=( const B3ITuple& rTup )
+ {
+ mnX -= rTup.mnX;
+ mnY -= rTup.mnY;
+ mnZ -= rTup.mnZ;
+ return *this;
+ }
+
+ B3ITuple& operator/=( const B3ITuple& rTup )
+ {
+ mnX /= rTup.mnX;
+ mnY /= rTup.mnY;
+ mnZ /= rTup.mnZ;
+ return *this;
+ }
+
+ B3ITuple& operator*=( const B3ITuple& rTup )
+ {
+ mnX *= rTup.mnX;
+ mnY *= rTup.mnY;
+ mnZ *= rTup.mnZ;
+ return *this;
+ }
+
+ B3ITuple& operator*=(sal_Int32 t)
+ {
+ mnX *= t;
+ mnY *= t;
+ mnZ *= t;
+ return *this;
+ }
+
+ B3ITuple& operator/=(sal_Int32 t)
+ {
+ mnX /= t;
+ mnY /= t;
+ mnZ /= t;
+ return *this;
+ }
+
+ B3ITuple operator-(void) const
+ {
+ return B3ITuple(-mnX, -mnY, -mnZ);
+ }
+
+ bool equalZero() const
+ {
+ return (this == &getEmptyTuple() ||
+ (mnX == 0 && mnY == 0 && mnZ == 0));
+ }
+
+ bool operator==( const B3ITuple& rTup ) const
+ {
+ return this == &rTup || (rTup.mnX == mnX && rTup.mnY == mnY && rTup.mnZ == mnZ);
+ }
+
+ bool operator!=( const B3ITuple& rTup ) const
+ {
+ return !(*this == rTup);
+ }
+
+ B3ITuple& operator=( const B3ITuple& rTup )
+ {
+ mnX = rTup.mnX;
+ mnY = rTup.mnY;
+ mnZ = rTup.mnZ;
+ return *this;
+ }
+
+ static const B3ITuple& getEmptyTuple();
+ };
+
+ // external operators
+ //////////////////////////////////////////////////////////////////////////
+
+ inline B3ITuple minimum(const B3ITuple& rTupA, const B3ITuple& rTupB)
+ {
+ B3ITuple aMin(
+ (rTupB.getX() < rTupA.getX()) ? rTupB.getX() : rTupA.getX(),
+ (rTupB.getY() < rTupA.getY()) ? rTupB.getY() : rTupA.getY(),
+ (rTupB.getZ() < rTupA.getZ()) ? rTupB.getZ() : rTupA.getZ());
+ return aMin;
+ }
+
+ inline B3ITuple maximum(const B3ITuple& rTupA, const B3ITuple& rTupB)
+ {
+ B3ITuple aMax(
+ (rTupB.getX() > rTupA.getX()) ? rTupB.getX() : rTupA.getX(),
+ (rTupB.getY() > rTupA.getY()) ? rTupB.getY() : rTupA.getY(),
+ (rTupB.getZ() > rTupA.getZ()) ? rTupB.getZ() : rTupA.getZ());
+ return aMax;
+ }
+
+ inline B3ITuple absolute(const B3ITuple& rTup)
+ {
+ B3ITuple aAbs(
+ (0 > rTup.getX()) ? -rTup.getX() : rTup.getX(),
+ (0 > rTup.getY()) ? -rTup.getY() : rTup.getY(),
+ (0 > rTup.getZ()) ? -rTup.getZ() : rTup.getZ());
+ return aAbs;
+ }
+
+ inline B3DTuple interpolate(const B3ITuple& rOld1, const B3ITuple& rOld2, double t)
+ {
+ B3DTuple aInt(
+ ((rOld2.getX() - rOld1.getX()) * t) + rOld1.getX(),
+ ((rOld2.getY() - rOld1.getY()) * t) + rOld1.getY(),
+ ((rOld2.getZ() - rOld1.getZ()) * t) + rOld1.getZ());
+ return aInt;
+ }
+
+ inline B3DTuple average(const B3ITuple& rOld1, const B3ITuple& rOld2)
+ {
+ B3DTuple aAvg(
+ (rOld1.getX() + rOld2.getX()) * 0.5,
+ (rOld1.getY() + rOld2.getY()) * 0.5,
+ (rOld1.getZ() + rOld2.getZ()) * 0.5);
+ return aAvg;
+ }
+
+ inline B3DTuple average(const B3ITuple& rOld1, const B3ITuple& rOld2, const B3ITuple& rOld3)
+ {
+ B3DTuple aAvg(
+ (rOld1.getX() + rOld2.getX() + rOld3.getX()) * (1.0 / 3.0),
+ (rOld1.getY() + rOld2.getY() + rOld3.getY()) * (1.0 / 3.0),
+ (rOld1.getZ() + rOld2.getZ() + rOld3.getZ()) * (1.0 / 3.0));
+ return aAvg;
+ }
+
+ inline B3ITuple operator+(const B3ITuple& rTupA, const B3ITuple& rTupB)
+ {
+ B3ITuple aSum(rTupA);
+ aSum += rTupB;
+ return aSum;
+ }
+
+ inline B3ITuple operator-(const B3ITuple& rTupA, const B3ITuple& rTupB)
+ {
+ B3ITuple aSub(rTupA);
+ aSub -= rTupB;
+ return aSub;
+ }
+
+ inline B3ITuple operator/(const B3ITuple& rTupA, const B3ITuple& rTupB)
+ {
+ B3ITuple aDiv(rTupA);
+ aDiv /= rTupB;
+ return aDiv;
+ }
+
+ inline B3ITuple operator*(const B3ITuple& rTupA, const B3ITuple& rTupB)
+ {
+ B3ITuple aMul(rTupA);
+ aMul *= rTupB;
+ return aMul;
+ }
+
+ inline B3ITuple operator*(const B3ITuple& rTup, sal_Int32 t)
+ {
+ B3ITuple aNew(rTup);
+ aNew *= t;
+ return aNew;
+ }
+
+ inline B3ITuple operator*(sal_Int32 t, const B3ITuple& rTup)
+ {
+ B3ITuple aNew(rTup);
+ aNew *= t;
+ return aNew;
+ }
+
+ inline B3ITuple operator/(const B3ITuple& rTup, sal_Int32 t)
+ {
+ B3ITuple aNew(rTup);
+ aNew /= t;
+ return aNew;
+ }
+
+ inline B3ITuple operator/(sal_Int32 t, const B3ITuple& rTup)
+ {
+ B3ITuple aNew(t, t, t);
+ B3ITuple aTmp(rTup);
+ aNew /= aTmp;
+ return aNew;
+ }
+} // end of namespace basegfx
+
+#endif /* _BGFX_TUPLE_B3ITUPLE_HXX */
diff --git a/basegfx/inc/basegfx/vector/b2dsize.hxx b/basegfx/inc/basegfx/vector/b2dsize.hxx
new file mode 100644
index 000000000000..6ca3065ba4f9
--- /dev/null
+++ b/basegfx/inc/basegfx/vector/b2dsize.hxx
@@ -0,0 +1,42 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_VECTOR_B2DSIZE_HXX
+#define _BGFX_VECTOR_B2DSIZE_HXX
+
+#include <basegfx/vector/b2dvector.hxx>
+
+namespace basegfx
+{
+ // syntactic sugar: a B2DVector exactly models a Size object,
+ // thus, for interface clarity, we provide an alias name
+
+ /// Alias name for interface clarity (not everybody is aware of the identity)
+ typedef B2DVector B2DSize;
+}
+
+#endif /* _BGFX_VECTOR_B2DSIZE_HXX */
diff --git a/basegfx/inc/basegfx/vector/b2dvector.hxx b/basegfx/inc/basegfx/vector/b2dvector.hxx
new file mode 100644
index 000000000000..e4cd8f3f179a
--- /dev/null
+++ b/basegfx/inc/basegfx/vector/b2dvector.hxx
@@ -0,0 +1,267 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_VECTOR_B2DVECTOR_HXX
+#define _BGFX_VECTOR_B2DVECTOR_HXX
+
+#include <basegfx/tuple/b2dtuple.hxx>
+#include <basegfx/vector/b2ivector.hxx>
+#include <basegfx/vector/b2enums.hxx>
+
+namespace basegfx
+{
+ // predeclaration
+ class B2DHomMatrix;
+
+ /** Base Point class with two double values
+
+ This class derives all operators and common handling for
+ a 2D data class from B2DTuple. All necessary extensions
+ which are special for 2D Vectors are added here.
+
+ @see B2DTuple
+ */
+ class B2DVector : public ::basegfx::B2DTuple
+ {
+ public:
+ /** Create a 2D Vector
+
+ The vector is initialized to (0.0, 0.0)
+ */
+ B2DVector()
+ : B2DTuple()
+ {}
+
+ /** Create a 2D Vector
+
+ @param fX
+ This parameter is used to initialize the X-coordinate
+ of the 2D Vector.
+
+ @param fY
+ This parameter is used to initialize the Y-coordinate
+ of the 2D Vector.
+ */
+ B2DVector(double fX, double fY)
+ : B2DTuple(fX, fY)
+ {}
+
+ /** Create a copy of a 2D Vector
+
+ @param rVec
+ The 2D Vector which will be copied.
+ */
+ B2DVector(const B2DVector& rVec)
+ : B2DTuple(rVec)
+ {}
+
+ /** Create a copy of a 2D Vector
+
+ @param rVec
+ The 2D Vector which will be copied.
+ */
+ B2DVector(const ::basegfx::B2IVector& rVec)
+ : B2DTuple(rVec)
+ {}
+
+ /** constructor with tuple to allow copy-constructing
+ from B2DTuple-based classes
+ */
+ B2DVector(const ::basegfx::B2DTuple& rTuple)
+ : B2DTuple(rTuple)
+ {}
+
+ ~B2DVector()
+ {}
+
+ /** *=operator to allow usage from B2DVector, too
+ */
+ B2DVector& operator*=( const B2DVector& rPnt )
+ {
+ mfX *= rPnt.mfX;
+ mfY *= rPnt.mfY;
+ return *this;
+ }
+
+ /** *=operator to allow usage from B2DVector, too
+ */
+ B2DVector& operator*=(double t)
+ {
+ mfX *= t;
+ mfY *= t;
+ return *this;
+ }
+
+ /** assignment operator to allow assigning the results
+ of B2DTuple calculations
+ */
+ B2DVector& operator=( const ::basegfx::B2DTuple& rVec );
+
+ /** Calculate the length of this 2D Vector
+
+ @return The Length of the 2D Vector
+ */
+ double getLength() const;
+
+ /** Set the length of this 2D Vector
+
+ @param fLen
+ The to be achieved length of the 2D Vector
+ */
+ B2DVector& setLength(double fLen);
+
+ /** Normalize this 2D Vector
+
+ The length of the 2D Vector is set to 1.0
+ */
+ B2DVector& normalize();
+
+ /** Test if this 2D Vector is normalized
+
+ @return
+ true if lenth of vector is equal to 1.0
+ false else
+ */
+ bool isNormalized() const;
+
+ /** Calculate the Scalar with another 2D Vector
+
+ @param rVec
+ The second 2D Vector
+
+ @return
+ The Scalar value of the two involved 2D Vectors
+ */
+ double scalar( const B2DVector& rVec ) const;
+
+ /** Calculate the length of the cross product with another 2D Vector
+
+ In 2D, returning an actual vector does not make much
+ sense here. The magnitude, although, can be readily
+ used for tasks such as angle calculations, since for
+ the returned value, the following equation holds:
+ retVal = getLength(this)*getLength(rVec)*sin(theta),
+ with theta being the angle between the two vectors.
+
+ @param rVec
+ The second 2D Vector
+
+ @return
+ The length of the cross product of the two involved 2D Vectors
+ */
+ double cross( const B2DVector& rVec ) const;
+
+ /** Calculate the Angle with another 2D Vector
+
+ @param rVec
+ The second 2D Vector
+
+ @return
+ The Angle value of the two involved 2D Vectors in -pi/2 < return < pi/2
+ */
+ double angle( const B2DVector& rVec ) const;
+
+ /** Transform vector by given transformation matrix.
+
+ Since this is a vector, translational components of the
+ matrix are disregarded.
+ */
+ B2DVector& operator*=( const B2DHomMatrix& rMat );
+
+ static const B2DVector& getEmptyVector();
+ };
+
+ // external operators
+ //////////////////////////////////////////////////////////////////////////
+
+ /** Calculate the orientation to another 2D Vector
+
+ @param rVecA
+ The first 2D Vector
+
+ @param rVecB
+ The second 2D Vector
+
+ @return
+ The mathematical Orientation of the two involved 2D Vectors
+ */
+ B2VectorOrientation getOrientation( const B2DVector& rVecA, const B2DVector& rVecB );
+
+ /** Calculate a perpendicular 2D Vector to the given one
+
+ @param rVec
+ The source 2D Vector
+
+ @attention This only works if the given 2D Vector is normalized.
+
+ @return
+ A 2D Vector perpendicular to the one given in parameter rVec
+ */
+ B2DVector getPerpendicular( const B2DVector& rNormalizedVec );
+
+ /** Calculate a perpendicular 2D Vector to the given one,
+ normalize the given one as preparation
+
+ @param rVec
+ The source 2D Vector
+
+ @return
+ A normalized 2D Vector perpendicular to the one given in parameter rVec
+ */
+ B2DVector getNormalizedPerpendicular( const B2DVector& rVec );
+
+ /** Test two vectors which need not to be normalized for parallelism
+
+ @param rVecA
+ The first 2D Vector
+
+ @param rVecB
+ The second 2D Vector
+
+ @return
+ bool if the two values are parallel. Also true if
+ one of the vectors is empty.
+ */
+ bool areParallel( const B2DVector& rVecA, const B2DVector& rVecB );
+
+ /** Transform vector by given transformation matrix.
+
+ Since this is a vector, translational components of the
+ matrix are disregarded.
+ */
+ B2DVector operator*( const B2DHomMatrix& rMat, const B2DVector& rVec );
+
+ /** Test continuity between given vectors.
+
+ The two given vectors are assumed to describe control points on a
+ common point. Calculate if there is a continuity between them.
+ */
+ B2VectorContinuity getContinuity( const B2DVector& rBackVector, const B2DVector& rForwardVector );
+
+} // end of namespace basegfx
+
+#endif /* _BGFX_VECTOR_B2DVECTOR_HXX */
diff --git a/basegfx/inc/basegfx/vector/b2enums.hxx b/basegfx/inc/basegfx/vector/b2enums.hxx
new file mode 100644
index 000000000000..6f68440bf715
--- /dev/null
+++ b/basegfx/inc/basegfx/vector/b2enums.hxx
@@ -0,0 +1,76 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_VECTOR_B2ENUMS_HXX
+#define _BGFX_VECTOR_B2ENUMS_HXX
+
+#include <sal/types.h>
+
+namespace basegfx
+{
+ /** Descriptor for the mathematical orientations of two 2D Vectors
+ */
+ enum B2VectorOrientation
+ {
+ /// mathematically positive oriented
+ ORIENTATION_POSITIVE = 0,
+
+ /// mathematically negative oriented
+ ORIENTATION_NEGATIVE,
+
+ /// mathematically neutral, thus parallel
+ ORIENTATION_NEUTRAL
+ };
+
+ /** Descriptor for the mathematical continuity of two 2D Vectors
+ */
+ enum B2VectorContinuity
+ {
+ /// none
+ CONTINUITY_NONE = 0,
+
+ /// mathematically negative oriented
+ CONTINUITY_C1,
+
+ /// mathematically neutral, thus parallel
+ CONTINUITY_C2
+ };
+
+ /** Descriptor for possible line joins between two line segments
+ */
+ enum B2DLineJoin
+ {
+ B2DLINEJOIN_NONE, // no rounding
+ B2DLINEJOIN_MIDDLE, // calc middle value between joints
+ B2DLINEJOIN_BEVEL, // join edges with line
+ B2DLINEJOIN_MITER, // extend till cut
+ B2DLINEJOIN_ROUND // create arc
+ };
+
+} // end of namespace basegfx
+
+#endif /* _BGFX_VECTOR_B2ENUMS_HXX */
diff --git a/basegfx/inc/basegfx/vector/b2isize.hxx b/basegfx/inc/basegfx/vector/b2isize.hxx
new file mode 100644
index 000000000000..e6cdb048995b
--- /dev/null
+++ b/basegfx/inc/basegfx/vector/b2isize.hxx
@@ -0,0 +1,42 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_VECTOR_B2ISIZE_HXX
+#define _BGFX_VECTOR_B2ISIZE_HXX
+
+#include <basegfx/vector/b2ivector.hxx>
+
+namespace basegfx
+{
+ // syntactic sugar: a B2IVector exactly models a Size object,
+ // thus, for interface clarity, we provide an alias name
+
+ /// Alias name for interface clarity (not everybody is aware of the identity)
+ typedef B2IVector B2ISize;
+}
+
+#endif /* _BGFX_VECTOR_B2ISIZE_HXX */
diff --git a/basegfx/inc/basegfx/vector/b2ivector.hxx b/basegfx/inc/basegfx/vector/b2ivector.hxx
new file mode 100644
index 000000000000..9e2fe1009841
--- /dev/null
+++ b/basegfx/inc/basegfx/vector/b2ivector.hxx
@@ -0,0 +1,230 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_VECTOR_B2IVECTOR_HXX
+#define _BGFX_VECTOR_B2IVECTOR_HXX
+
+#include <basegfx/tuple/b2ituple.hxx>
+#include <basegfx/vector/b2enums.hxx>
+
+namespace basegfx
+{
+ // predeclaration
+ class B2DHomMatrix;
+
+ /** Base Point class with two sal_Int32 values
+
+ This class derives all operators and common handling for
+ a 2D data class from B2ITuple. All necessary extensions
+ which are special for 2D Vectors are added here.
+
+ @see B2ITuple
+ */
+ class B2IVector : public ::basegfx::B2ITuple
+ {
+ public:
+ /** Create a 2D Vector
+
+ The vector is initialized to (0, 0)
+ */
+ B2IVector()
+ : B2ITuple()
+ {}
+
+ /** Create a 2D Vector
+
+ @param nX
+ This parameter is used to initialize the X-coordinate
+ of the 2D Vector.
+
+ @param nY
+ This parameter is used to initialize the Y-coordinate
+ of the 2D Vector.
+ */
+ B2IVector(sal_Int32 nX, sal_Int32 nY)
+ : B2ITuple(nX, nY)
+ {}
+
+ /** Create a copy of a 2D Vector
+
+ @param rVec
+ The 2D Vector which will be copied.
+ */
+ B2IVector(const B2IVector& rVec)
+ : B2ITuple(rVec)
+ {}
+
+ /** constructor with tuple to allow copy-constructing
+ from B2ITuple-based classes
+ */
+ B2IVector(const ::basegfx::B2ITuple& rTuple)
+ : B2ITuple(rTuple)
+ {}
+
+ ~B2IVector()
+ {}
+
+ /** *=operator to allow usage from B2IVector, too
+ */
+ B2IVector& operator*=( const B2IVector& rPnt )
+ {
+ mnX *= rPnt.mnX;
+ mnY *= rPnt.mnY;
+ return *this;
+ }
+
+ /** *=operator to allow usage from B2IVector, too
+ */
+ B2IVector& operator*=(sal_Int32 t)
+ {
+ mnX *= t;
+ mnY *= t;
+ return *this;
+ }
+
+ /** assignment operator to allow assigning the results
+ of B2ITuple calculations
+ */
+ B2IVector& operator=( const ::basegfx::B2ITuple& rVec );
+
+ /** Calculate the length of this 2D Vector
+
+ @return The Length of the 2D Vector
+ */
+ double getLength() const;
+
+ /** Set the length of this 2D Vector
+
+ @param fLen
+ The to be achieved length of the 2D Vector
+ */
+ B2IVector& setLength(double fLen);
+
+ /** Calculate the Scalar with another 2D Vector
+
+ @param rVec
+ The second 2D Vector
+
+ @return
+ The Scalar value of the two involved 2D Vectors
+ */
+ double scalar( const B2IVector& rVec ) const;
+
+ /** Calculate the length of the cross product with another 2D Vector
+
+ In 2D, returning an actual vector does not make much
+ sense here. The magnitude, although, can be readily
+ used for tasks such as angle calculations, since for
+ the returned value, the following equation holds:
+ retVal = getLength(this)*getLength(rVec)*sin(theta),
+ with theta being the angle between the two vectors.
+
+ @param rVec
+ The second 2D Vector
+
+ @return
+ The length of the cross product of the two involved 2D Vectors
+ */
+ double cross( const B2IVector& rVec ) const;
+
+ /** Calculate the Angle with another 2D Vector
+
+ @param rVec
+ The second 2D Vector
+
+ @return
+ The Angle value of the two involved 2D Vectors in -pi/2 < return < pi/2
+ */
+ double angle( const B2IVector& rVec ) const;
+
+ /** Transform vector by given transformation matrix.
+
+ Since this is a vector, translational components of the
+ matrix are disregarded.
+ */
+ B2IVector& operator*=( const B2DHomMatrix& rMat );
+
+ static const B2IVector& getEmptyVector();
+ };
+
+ // external operators
+ //////////////////////////////////////////////////////////////////////////
+
+ /** Calculate the orientation to another 2D Vector
+
+ @param rVecA
+ The first 2D Vector
+
+ @param rVecB
+ The second 2D Vector
+
+ @return
+ The mathematical Orientation of the two involved 2D Vectors
+ */
+ B2VectorOrientation getOrientation( const B2IVector& rVecA, const B2IVector& rVecB );
+
+ /** Calculate a perpendicular 2D Vector to the given one
+
+ @param rVec
+ The source 2D Vector
+
+ @return
+ A 2D Vector perpendicular to the one given in parameter rVec
+ */
+ B2IVector getPerpendicular( const B2IVector& rVec );
+
+ /** Test two vectors which need not to be normalized for parallelism
+
+ @param rVecA
+ The first 2D Vector
+
+ @param rVecB
+ The second 2D Vector
+
+ @return
+ bool if the two values are parallel. Also true if
+ one of the vectors is empty.
+ */
+ bool areParallel( const B2IVector& rVecA, const B2IVector& rVecB );
+
+ /** Transform vector by given transformation matrix.
+
+ Since this is a vector, translational components of the
+ matrix are disregarded.
+ */
+ B2IVector operator*( const B2DHomMatrix& rMat, const B2IVector& rVec );
+
+ /** Test continuity between given vectors.
+
+ The two given vectors are assumed to describe control points on a
+ common point. Calculate if there is a continuity between them.
+ */
+ B2VectorContinuity getContinuity( const B2IVector& rBackVector, const B2IVector& rForwardVector );
+
+} // end of namespace basegfx
+
+#endif /* _BGFX_VECTOR_B2IVECTOR_HXX */
diff --git a/basegfx/inc/basegfx/vector/b3dsize.hxx b/basegfx/inc/basegfx/vector/b3dsize.hxx
new file mode 100644
index 000000000000..e89a66bfa86c
--- /dev/null
+++ b/basegfx/inc/basegfx/vector/b3dsize.hxx
@@ -0,0 +1,42 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_VECTOR_B3DSIZE_HXX
+#define _BGFX_VECTOR_B3DSIZE_HXX
+
+#include <basegfx/vector/b3dvector.hxx>
+
+namespace basegfx
+{
+ // syntactic sugar: a B3DVector exactly models a Size3D object,
+ // thus, for interface clarity, we provide an alias name
+
+ /// Alias name for interface clarity (not everybody is aware of the identity)
+ typedef B3DVector B3DSize;
+}
+
+#endif /* _BGFX_VECTOR_B3DSIZE_HXX */
diff --git a/basegfx/inc/basegfx/vector/b3dvector.hxx b/basegfx/inc/basegfx/vector/b3dvector.hxx
new file mode 100644
index 000000000000..c4c329881170
--- /dev/null
+++ b/basegfx/inc/basegfx/vector/b3dvector.hxx
@@ -0,0 +1,340 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_VECTOR_B3DVECTOR_HXX
+#define _BGFX_VECTOR_B3DVECTOR_HXX
+
+#include <basegfx/tuple/b3dtuple.hxx>
+
+//////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+ // predeclaration
+ class B3DHomMatrix;
+
+ /** Base Point class with three double values
+
+ This class derives all operators and common handling for
+ a 3D data class from B3DTuple. All necessary extensions
+ which are special for 3D Vectors are added here.
+
+ @see B3DTuple
+ */
+ class B3DVector : public ::basegfx::B3DTuple
+ {
+ public:
+ /** Create a 3D Vector
+
+ The vector is initialized to (0.0, 0.0, 0.0)
+ */
+ B3DVector()
+ : B3DTuple()
+ {}
+
+ /** Create a 3D Vector
+
+ @param fX
+ This parameter is used to initialize the X-coordinate
+ of the 3D Vector.
+
+ @param fY
+ This parameter is used to initialize the Y-coordinate
+ of the 3D Vector.
+
+ @param fZ
+ This parameter is used to initialize the Z-coordinate
+ of the 3D Vector.
+ */
+ B3DVector(double fX, double fY, double fZ)
+ : B3DTuple(fX, fY, fZ)
+ {}
+
+ /** Create a copy of a 3D Vector
+
+ @param rVec
+ The 3D Vector which will be copied.
+ */
+ B3DVector(const B3DVector& rVec)
+ : B3DTuple(rVec)
+ {}
+
+ /** constructor with tuple to allow copy-constructing
+ from B3DTuple-based classes
+ */
+ B3DVector(const ::basegfx::B3DTuple& rTuple)
+ : B3DTuple(rTuple)
+ {}
+
+ ~B3DVector()
+ {}
+
+ /** *=operator to allow usage from B3DVector, too
+ */
+ B3DVector& operator*=( const B3DVector& rPnt )
+ {
+ mfX *= rPnt.mfX;
+ mfY *= rPnt.mfY;
+ mfZ *= rPnt.mfZ;
+ return *this;
+ }
+
+ /** *=operator to allow usage from B3DVector, too
+ */
+ B3DVector& operator*=(double t)
+ {
+ mfX *= t;
+ mfY *= t;
+ mfZ *= t;
+ return *this;
+ }
+
+ /** assignment operator to allow assigning the results
+ of B3DTuple calculations
+ */
+ B3DVector& operator=( const ::basegfx::B3DTuple& rVec )
+ {
+ mfX = rVec.getX();
+ mfY = rVec.getY();
+ mfZ = rVec.getZ();
+ return *this;
+ }
+
+ /** Calculate the length of this 3D Vector
+
+ @return The Length of the 3D Vector
+ */
+ double getLength(void) const
+ {
+ double fLen(scalar(*this));
+ if((0.0 == fLen) || (1.0 == fLen))
+ return fLen;
+ return sqrt(fLen);
+ }
+
+ /** Calculate the length in the XY-Plane for this 3D Vector
+
+ @return The XY-Plane Length of the 3D Vector
+ */
+ double getXYLength(void) const
+ {
+ double fLen((mfX * mfX) + (mfY * mfY));
+ if((0.0 == fLen) || (1.0 == fLen))
+ return fLen;
+ return sqrt(fLen);
+ }
+
+ /** Calculate the length in the XZ-Plane for this 3D Vector
+
+ @return The XZ-Plane Length of the 3D Vector
+ */
+ double getXZLength(void) const
+ {
+ double fLen((mfX * mfX) + (mfZ * mfZ)); // #i73040#
+ if((0.0 == fLen) || (1.0 == fLen))
+ return fLen;
+ return sqrt(fLen);
+ }
+
+ /** Calculate the length in the YZ-Plane for this 3D Vector
+
+ @return The YZ-Plane Length of the 3D Vector
+ */
+ double getYZLength(void) const
+ {
+ double fLen((mfY * mfY) + (mfZ * mfZ));
+ if((0.0 == fLen) || (1.0 == fLen))
+ return fLen;
+ return sqrt(fLen);
+ }
+
+ /** Set the length of this 3D Vector
+
+ @param fLen
+ The to be achieved length of the 3D Vector
+ */
+ B3DVector& setLength(double fLen)
+ {
+ double fLenNow(scalar(*this));
+
+ if(!::basegfx::fTools::equalZero(fLenNow))
+ {
+ const double fOne(1.0);
+
+ if(!::basegfx::fTools::equal(fOne, fLenNow))
+ {
+ fLen /= sqrt(fLenNow);
+ }
+
+ mfX *= fLen;
+ mfY *= fLen;
+ mfZ *= fLen;
+ }
+
+ return *this;
+ }
+
+ /** Normalize this 3D Vector
+
+ The length of the 3D Vector is set to 1.0
+ */
+ B3DVector& normalize();
+
+ /** Test if this 3D Vector is normalized
+
+ @return
+ true if lenth of vector is equal to 1.0
+ false else
+ */
+ bool isNormalized() const
+ {
+ const double fOne(1.0);
+ const double fScalar(scalar(*this));
+
+ return (::basegfx::fTools::equal(fOne, fScalar));
+ }
+
+ /** get a 3D Vector which is perpendicular to this and a given 3D Vector
+
+ @attention This only works if this and the given 3D Vector are
+ both normalized.
+
+ @param rNormalizedVec
+ A normalized 3D Vector.
+
+ @return
+ A 3D Vector perpendicular to this and the given one
+ */
+ B3DVector getPerpendicular(const B3DVector& rNormalizedVec) const;
+
+ /** get the projection of this Vector on the given Plane
+
+ @attention This only works if the given 3D Vector defining
+ the Plane is normalized.
+
+ @param rNormalizedPlane
+ A normalized 3D Vector defining a Plane.
+
+ @return
+ The projected 3D Vector
+ */
+ B3DVector getProjectionOnPlane(const B3DVector& rNormalizedPlane) const;
+
+ /** Calculate the Scalar product
+
+ This method calculates the Scalar product between this
+ and the given 3D Vector.
+
+ @param rVec
+ A second 3D Vector.
+
+ @return
+ The Scalar Product of two 3D Vectors
+ */
+ double scalar(const B3DVector& rVec) const
+ {
+ return ((mfX * rVec.mfX) + (mfY * rVec.mfY) + (mfZ * rVec.mfZ));
+ }
+
+ /** Transform vector by given transformation matrix.
+
+ Since this is a vector, translational components of the
+ matrix are disregarded.
+ */
+ B3DVector& operator*=( const B3DHomMatrix& rMat );
+
+ static const B3DVector& getEmptyVector()
+ {
+ return (const B3DVector&) ::basegfx::B3DTuple::getEmptyTuple();
+ }
+ };
+
+ // external operators
+ //////////////////////////////////////////////////////////////////////////
+
+ /** get a 3D Vector which is in 2D (ignoring
+ the Z-Coordinate) perpendicular to a given 3D Vector
+
+ @attention This only works if the given 3D Vector is normalized.
+
+ @param rNormalizedVec
+ A normalized 3D Vector.
+
+ @return
+ A 3D Vector perpendicular to the given one in X,Y (2D).
+ */
+ inline B3DVector getPerpendicular2D( const B3DVector& rNormalizedVec )
+ {
+ B3DVector aPerpendicular(-rNormalizedVec.getY(), rNormalizedVec.getX(), rNormalizedVec.getZ());
+ return aPerpendicular;
+ }
+
+ /** Test two vectors which need not to be normalized for parallelism
+
+ @param rVecA
+ The first 3D Vector
+
+ @param rVecB
+ The second 3D Vector
+
+ @return
+ bool if the two values are parallel. Also true if
+ one of the vectors is empty.
+ */
+ bool areParallel( const B3DVector& rVecA, const B3DVector& rVecB );
+
+ /** Transform vector by given transformation matrix.
+
+ Since this is a vector, translational components of the
+ matrix are disregarded.
+ */
+ B3DVector operator*( const B3DHomMatrix& rMat, const B3DVector& rVec );
+
+ /** Calculate the Cross Product of two 3D Vectors
+
+ @param rVecA
+ A first 3D Vector.
+
+ @param rVecB
+ A second 3D Vector.
+
+ @return
+ The Cross Product of both 3D Vectors
+ */
+ inline B3DVector cross(const B3DVector& rVecA, const B3DVector& rVecB)
+ {
+ B3DVector aVec(
+ rVecA.getY() * rVecB.getZ() - rVecA.getZ() * rVecB.getY(),
+ rVecA.getZ() * rVecB.getX() - rVecA.getX() * rVecB.getZ(),
+ rVecA.getX() * rVecB.getY() - rVecA.getY() * rVecB.getX());
+ return aVec;
+ }
+} // end of namespace basegfx
+
+//////////////////////////////////////////////////////////////////////////////
+
+#endif /* _BGFX_VECTOR_B3DVECTOR_HXX */
diff --git a/basegfx/inc/basegfx/vector/b3isize.hxx b/basegfx/inc/basegfx/vector/b3isize.hxx
new file mode 100644
index 000000000000..604ce5681ee7
--- /dev/null
+++ b/basegfx/inc/basegfx/vector/b3isize.hxx
@@ -0,0 +1,42 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_VECTOR_B3ISIZE_HXX
+#define _BGFX_VECTOR_B3ISIZE_HXX
+
+#include <basegfx/vector/b3ivector.hxx>
+
+namespace basegfx
+{
+ // syntactic sugar: a B3IVector exactly models a Size3D object,
+ // thus, for interface clarity, we provide an alias name
+
+ /// Alias name for interface clarity (not everybody is aware of the identity)
+ typedef B3IVector B3ISize;
+}
+
+#endif /* _BGFX_VECTOR_B3ISIZE_HXX */
diff --git a/basegfx/inc/basegfx/vector/b3ivector.hxx b/basegfx/inc/basegfx/vector/b3ivector.hxx
new file mode 100644
index 000000000000..b4900989cc06
--- /dev/null
+++ b/basegfx/inc/basegfx/vector/b3ivector.hxx
@@ -0,0 +1,259 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_VECTOR_B3IVECTOR_HXX
+#define _BGFX_VECTOR_B3IVECTOR_HXX
+
+#include <basegfx/tuple/b3ituple.hxx>
+
+namespace basegfx
+{
+ // predeclaration
+ class B3DHomMatrix;
+
+ /** Base Point class with three sal_Int32 values
+
+ This class derives all operators and common handling for
+ a 3D data class from B3ITuple. All necessary extensions
+ which are special for 3D Vectors are added here.
+
+ @see B3ITuple
+ */
+ class B3IVector : public ::basegfx::B3ITuple
+ {
+ public:
+ /** Create a 3D Vector
+
+ The vector is initialized to (0, 0, 0)
+ */
+ B3IVector()
+ : B3ITuple()
+ {}
+
+ /** Create a 3D Vector
+
+ @param nX
+ This parameter is used to initialize the X-coordinate
+ of the 3D Vector.
+
+ @param nY
+ This parameter is used to initialize the Y-coordinate
+ of the 3D Vector.
+
+ @param nZ
+ This parameter is used to initialize the Z-coordinate
+ of the 3D Vector.
+ */
+ B3IVector(sal_Int32 nX, sal_Int32 nY, sal_Int32 nZ)
+ : B3ITuple(nX, nY, nZ)
+ {}
+
+ /** Create a copy of a 3D Vector
+
+ @param rVec
+ The 3D Vector which will be copied.
+ */
+ B3IVector(const B3IVector& rVec)
+ : B3ITuple(rVec)
+ {}
+
+ /** constructor with tuple to allow copy-constructing
+ from B3ITuple-based classes
+ */
+ B3IVector(const ::basegfx::B3ITuple& rTuple)
+ : B3ITuple(rTuple)
+ {}
+
+ ~B3IVector()
+ {}
+
+ /** *=operator to allow usage from B3IVector, too
+ */
+ B3IVector& operator*=( const B3IVector& rPnt )
+ {
+ mnX *= rPnt.mnX;
+ mnY *= rPnt.mnY;
+ mnZ *= rPnt.mnZ;
+ return *this;
+ }
+
+ /** *=operator to allow usage from B3IVector, too
+ */
+ B3IVector& operator*=(sal_Int32 t)
+ {
+ mnX *= t;
+ mnY *= t;
+ mnZ *= t;
+ return *this;
+ }
+
+ /** assignment operator to allow assigning the results
+ of B3ITuple calculations
+ */
+ B3IVector& operator=( const ::basegfx::B3ITuple& rVec )
+ {
+ mnX = rVec.getX();
+ mnY = rVec.getY();
+ mnZ = rVec.getZ();
+ return *this;
+ }
+
+ /** Calculate the length of this 3D Vector
+
+ @return The Length of the 3D Vector
+ */
+ double getLength(void) const
+ {
+ double fLen(scalar(*this));
+ if((0 == fLen) || (1.0 == fLen))
+ return fLen;
+ return sqrt(fLen);
+ }
+
+ /** Calculate the length in the XY-Plane for this 3D Vector
+
+ @return The XY-Plane Length of the 3D Vector
+ */
+ double getXYLength(void) const
+ {
+ double fLen((mnX * mnX) + (mnY * mnY));
+ if((0 == fLen) || (1.0 == fLen))
+ return fLen;
+ return sqrt(fLen);
+ }
+
+ /** Calculate the length in the XZ-Plane for this 3D Vector
+
+ @return The XZ-Plane Length of the 3D Vector
+ */
+ double getXZLength(void) const
+ {
+ double fLen((mnX * mnZ) + (mnY * mnZ));
+ if((0 == fLen) || (1.0 == fLen))
+ return fLen;
+ return sqrt(fLen);
+ }
+
+ /** Calculate the length in the YZ-Plane for this 3D Vector
+
+ @return The YZ-Plane Length of the 3D Vector
+ */
+ double getYZLength(void) const
+ {
+ double fLen((mnY * mnY) + (mnZ * mnZ));
+ if((0 == fLen) || (1.0 == fLen))
+ return fLen;
+ return sqrt(fLen);
+ }
+
+ /** Set the length of this 3D Vector
+
+ @param fLen
+ The to be achieved length of the 3D Vector
+ */
+ B3IVector& setLength(double fLen)
+ {
+ double fLenNow(scalar(*this));
+
+ if(!::basegfx::fTools::equalZero(fLenNow))
+ {
+ const double fOne(1.0);
+
+ if(!::basegfx::fTools::equal(fOne, fLenNow))
+ {
+ fLen /= sqrt(fLenNow);
+ }
+
+ mnX = fround(mnX*fLen);
+ mnY = fround(mnY*fLen);
+ mnZ = fround(mnZ*fLen);
+ }
+
+ return *this;
+ }
+
+ /** Calculate the Scalar product
+
+ This method calculates the Scalar product between this
+ and the given 3D Vector.
+
+ @param rVec
+ A second 3D Vector.
+
+ @return
+ The Scalar Product of two 3D Vectors
+ */
+ double scalar(const B3IVector& rVec) const
+ {
+ return ((mnX * rVec.mnX) + (mnY * rVec.mnY) + (mnZ * rVec.mnZ));
+ }
+
+ /** Transform vector by given transformation matrix.
+
+ Since this is a vector, translational components of the
+ matrix are disregarded.
+ */
+ B3IVector& operator*=( const B3DHomMatrix& rMat );
+
+ static const B3IVector& getEmptyVector()
+ {
+ return (const B3IVector&) ::basegfx::B3ITuple::getEmptyTuple();
+ }
+ };
+
+ // external operators
+ //////////////////////////////////////////////////////////////////////////
+
+ /** Transform vector by given transformation matrix.
+
+ Since this is a vector, translational components of the
+ matrix are disregarded.
+ */
+ B3IVector operator*( const B3DHomMatrix& rMat, const B3IVector& rVec );
+
+ /** Calculate the Cross Product of two 3D Vectors
+
+ @param rVecA
+ A first 3D Vector.
+
+ @param rVecB
+ A second 3D Vector.
+
+ @return
+ The Cross Product of both 3D Vectors
+ */
+ inline B3IVector cross(const B3IVector& rVecA, const B3IVector& rVecB)
+ {
+ B3IVector aVec(
+ rVecA.getY() * rVecB.getZ() - rVecA.getZ() * rVecB.getY(),
+ rVecA.getZ() * rVecB.getX() - rVecA.getX() * rVecB.getZ(),
+ rVecA.getX() * rVecB.getY() - rVecA.getY() * rVecB.getX());
+ return aVec;
+ }
+} // end of namespace basegfx
+
+#endif /* _BGFX_VECTOR_B3DVECTOR_HXX */
diff --git a/basegfx/inc/makefile.mk b/basegfx/inc/makefile.mk
new file mode 100644
index 000000000000..aa8007b7e507
--- /dev/null
+++ b/basegfx/inc/makefile.mk
@@ -0,0 +1,47 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+PRJ=..
+
+PRJNAME=basegfx
+TARGET=inc
+
+# --- Settings -----------------------------------------------------
+
+.INCLUDE : settings.mk
+
+# --- Files --------------------------------------------------------
+# --- Targets -------------------------------------------------------
+
+.INCLUDE : target.mk
+
+.IF "$(ENABLE_PCH)"!=""
+ALLTAR : \
+ $(SLO)$/precompiled.pch \
+ $(SLO)$/precompiled_ex.pch
+
+.ENDIF # "$(ENABLE_PCH)"!=""
+
diff --git a/basegfx/inc/pch/precompiled_basegfx.cxx b/basegfx/inc/pch/precompiled_basegfx.cxx
new file mode 100644
index 000000000000..ee9c448f8af4
--- /dev/null
+++ b/basegfx/inc/pch/precompiled_basegfx.cxx
@@ -0,0 +1,29 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "precompiled_basegfx.hxx"
+
diff --git a/basegfx/inc/pch/precompiled_basegfx.hxx b/basegfx/inc/pch/precompiled_basegfx.hxx
new file mode 100644
index 000000000000..45f87434590d
--- /dev/null
+++ b/basegfx/inc/pch/precompiled_basegfx.hxx
@@ -0,0 +1,32 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): Generated on 2006-09-01 17:49:30.796084
+
+#ifdef PRECOMPILED_HEADERS
+#endif
+
diff --git a/basegfx/prj/build.lst b/basegfx/prj/build.lst
new file mode 100644
index 000000000000..fe3354b3f256
--- /dev/null
+++ b/basegfx/prj/build.lst
@@ -0,0 +1,18 @@
+fx basegfx : o3tl sal offuh cppuhelper cppu CPPUNIT:cppunit NULL
+fx basegfx usr1 - all fx_mkout NULL
+fx basegfx\inc nmake - all fx_inc NULL
+fx basegfx\prj get - all fx_prj NULL
+fx basegfx\source\curve nmake - all fx_curve fx_inc NULL
+fx basegfx\source\matrix nmake - all fx_matrix fx_inc NULL
+fx basegfx\source\numeric nmake - all fx_numeric fx_inc NULL
+fx basegfx\source\point nmake - all fx_point fx_inc NULL
+fx basegfx\source\polygon nmake - all fx_polygon fx_inc NULL
+fx basegfx\source\range nmake - all fx_range fx_inc NULL
+fx basegfx\source\tuple nmake - all fx_tuple fx_inc NULL
+fx basegfx\source\tools nmake - all fx_tools fx_inc NULL
+fx basegfx\source\vector nmake - all fx_vector fx_inc NULL
+fx basegfx\source\color nmake - all fx_color fx_inc NULL
+fx basegfx\source\pixel nmake - all fx_pixel fx_inc NULL
+fx basegfx\source\raster nmake - all fx_raster fx_inc NULL
+fx basegfx\util nmake - all fx_util fx_curve fx_matrix fx_numeric fx_point fx_polygon fx_range fx_tuple fx_tools fx_vector fx_color fx_pixel fx_raster NULL
+fx basegfx\test nmake - all fx_tests fx_util NULL
diff --git a/basegfx/prj/d.lst b/basegfx/prj/d.lst
new file mode 100644
index 000000000000..3d4d985f3ae6
--- /dev/null
+++ b/basegfx/prj/d.lst
@@ -0,0 +1,113 @@
+..\%__SRC%\lib\ibasegfx.lib %_DEST%\lib%_EXT%\ibasegfx.lib
+..\%__SRC%\lib\basegfx_s.lib %_DEST%\lib%_EXT%\basegfx_s.lib
+
+..\%__SRC%\bin\basegfx?????.dll %_DEST%\bin%_EXT%\basegfx?????.dll
+..\%__SRC%\bin\bgfx*.dll %_DEST%\bin%_EXT%\bgfx*.dll
+
+..\%__SRC%\lib\libbasegfx*.* %_DEST%\lib%_EXT%\libbasegfx*.*
+..\%__SRC%\lib\*.a %_DEST%\lib%_EXT%\*.a
+
+mkdir: %_DEST%\inc%_EXT%\basegfx
+
+mkdir: %_DEST%\inc%_EXT%\basegfx\matrix
+..\inc\basegfx\matrix\b2dhommatrix.hxx %_DEST%\inc%_EXT%\basegfx\matrix\b2dhommatrix.hxx
+..\inc\basegfx\matrix\b2dhommatrixtools.hxx %_DEST%\inc%_EXT%\basegfx\matrix\b2dhommatrixtools.hxx
+..\inc\basegfx\matrix\b3dhommatrix.hxx %_DEST%\inc%_EXT%\basegfx\matrix\b3dhommatrix.hxx
+
+mkdir: %_DEST%\inc%_EXT%\basegfx\point
+..\inc\basegfx\point\b2dpoint.hxx %_DEST%\inc%_EXT%\basegfx\point\b2dpoint.hxx
+..\inc\basegfx\point\b3dpoint.hxx %_DEST%\inc%_EXT%\basegfx\point\b3dpoint.hxx
+..\inc\basegfx\point\b2ipoint.hxx %_DEST%\inc%_EXT%\basegfx\point\b2ipoint.hxx
+..\inc\basegfx\point\b3ipoint.hxx %_DEST%\inc%_EXT%\basegfx\point\b3ipoint.hxx
+..\inc\basegfx\point\b2dhompoint.hxx %_DEST%\inc%_EXT%\basegfx\point\b2dhompoint.hxx
+..\inc\basegfx\point\b3dhompoint.hxx %_DEST%\inc%_EXT%\basegfx\point\b3dhompoint.hxx
+
+mkdir: %_DEST%\inc%_EXT%\basegfx\range
+..\inc\basegfx\range\rangeexpander.hxx %_DEST%\inc%_EXT%\basegfx\range\rangeexpander.hxx
+..\inc\basegfx\range\basicrange.hxx %_DEST%\inc%_EXT%\basegfx\range\basicrange.hxx
+..\inc\basegfx\range\basicbox.hxx %_DEST%\inc%_EXT%\basegfx\range\basicbox.hxx
+..\inc\basegfx\range\b1drange.hxx %_DEST%\inc%_EXT%\basegfx\range\b1drange.hxx
+..\inc\basegfx\range\b2dpolyrange.hxx %_DEST%\inc%_EXT%\basegfx\range\b2dpolyrange.hxx
+..\inc\basegfx\range\b2drange.hxx %_DEST%\inc%_EXT%\basegfx\range\b2drange.hxx
+..\inc\basegfx\range\b2drectangle.hxx %_DEST%\inc%_EXT%\basegfx\range\b2drectangle.hxx
+..\inc\basegfx\range\b2dconnectedranges.hxx %_DEST%\inc%_EXT%\basegfx\range\b2dconnectedranges.hxx
+..\inc\basegfx\range\b3drange.hxx %_DEST%\inc%_EXT%\basegfx\range\b3drange.hxx
+..\inc\basegfx\range\b3dvolume.hxx %_DEST%\inc%_EXT%\basegfx\range\b3dvolume.hxx
+..\inc\basegfx\range\b1irange.hxx %_DEST%\inc%_EXT%\basegfx\range\b1irange.hxx
+..\inc\basegfx\range\b2irange.hxx %_DEST%\inc%_EXT%\basegfx\range\b2irange.hxx
+..\inc\basegfx\range\b2irectangle.hxx %_DEST%\inc%_EXT%\basegfx\range\b2irectangle.hxx
+..\inc\basegfx\range\b3irange.hxx %_DEST%\inc%_EXT%\basegfx\range\b3irange.hxx
+..\inc\basegfx\range\b3ivolume.hxx %_DEST%\inc%_EXT%\basegfx\range\b3ivolume.hxx
+..\inc\basegfx\range\b1ibox.hxx %_DEST%\inc%_EXT%\basegfx\range\b1ibox.hxx
+..\inc\basegfx\range\b2ibox.hxx %_DEST%\inc%_EXT%\basegfx\range\b2ibox.hxx
+..\inc\basegfx\range\b3ibox.hxx %_DEST%\inc%_EXT%\basegfx\range\b3ibox.hxx
+
+mkdir: %_DEST%\inc%_EXT%\basegfx\vector
+..\inc\basegfx\vector\b2dvector.hxx %_DEST%\inc%_EXT%\basegfx\vector\b2dvector.hxx
+..\inc\basegfx\vector\b2enums.hxx %_DEST%\inc%_EXT%\basegfx\vector\b2enums.hxx
+..\inc\basegfx\vector\b2dsize.hxx %_DEST%\inc%_EXT%\basegfx\vector\b2dsize.hxx
+..\inc\basegfx\vector\b3dvector.hxx %_DEST%\inc%_EXT%\basegfx\vector\b3dvector.hxx
+..\inc\basegfx\vector\b3dsize.hxx %_DEST%\inc%_EXT%\basegfx\vector\b3dsize.hxx
+..\inc\basegfx\vector\b2ivector.hxx %_DEST%\inc%_EXT%\basegfx\vector\b2ivector.hxx
+..\inc\basegfx\vector\b2isize.hxx %_DEST%\inc%_EXT%\basegfx\vector\b2isize.hxx
+..\inc\basegfx\vector\b3ivector.hxx %_DEST%\inc%_EXT%\basegfx\vector\b3ivector.hxx
+..\inc\basegfx\vector\b3isize.hxx %_DEST%\inc%_EXT%\basegfx\vector\b3isize.hxx
+
+mkdir: %_DEST%\inc%_EXT%\basegfx\curve
+..\inc\basegfx\curve\b2dcubicbezier.hxx %_DEST%\inc%_EXT%\basegfx\curve\b2dcubicbezier.hxx
+..\inc\basegfx\curve\b2dquadraticbezier.hxx %_DEST%\inc%_EXT%\basegfx\curve\b2dquadraticbezier.hxx
+..\inc\basegfx\curve\b2dbeziertools.hxx %_DEST%\inc%_EXT%\basegfx\curve\b2dbeziertools.hxx
+
+mkdir: %_DEST%\inc%_EXT%\basegfx\numeric
+..\inc\basegfx\numeric\ftools.hxx %_DEST%\inc%_EXT%\basegfx\numeric\ftools.hxx
+
+mkdir: %_DEST%\inc%_EXT%\basegfx\polygon
+..\inc\basegfx\polygon\b2dpolygon.hxx %_DEST%\inc%_EXT%\basegfx\polygon\b2dpolygon.hxx
+..\inc\basegfx\polygon\b2dpolypolygon.hxx %_DEST%\inc%_EXT%\basegfx\polygon\b2dpolypolygon.hxx
+..\inc\basegfx\polygon\b2dpolypolygonfillrule.hxx %_DEST%\inc%_EXT%\basegfx\polygon\b2dpolypolygonfillrule.hxx
+..\inc\basegfx\polygon\b2dpolygontools.hxx %_DEST%\inc%_EXT%\basegfx\polygon\b2dpolygontools.hxx
+..\inc\basegfx\polygon\b2dpolypolygontools.hxx %_DEST%\inc%_EXT%\basegfx\polygon\b2dpolypolygontools.hxx
+..\inc\basegfx\polygon\b2dpolypolygonrasterconverter.hxx %_DEST%\inc%_EXT%\basegfx\polygon\b2dpolypolygonrasterconverter.hxx
+..\inc\basegfx\polygon\b2dlinegeometry.hxx %_DEST%\inc%_EXT%\basegfx\polygon\b2dlinegeometry.hxx
+..\inc\basegfx\polygon\b2dpolygonclipper.hxx %_DEST%\inc%_EXT%\basegfx\polygon\b2dpolygonclipper.hxx
+..\inc\basegfx\polygon\b2dpolygontriangulator.hxx %_DEST%\inc%_EXT%\basegfx\polygon\b2dpolygontriangulator.hxx
+..\inc\basegfx\polygon\b2dpolygoncutandtouch.hxx %_DEST%\inc%_EXT%\basegfx\polygon\b2dpolygoncutandtouch.hxx
+..\inc\basegfx\polygon\b2dpolypolygoncutter.hxx %_DEST%\inc%_EXT%\basegfx\polygon\b2dpolypolygoncutter.hxx
+..\inc\basegfx\polygon\b2dtrapezoid.hxx %_DEST%\inc%_EXT%\basegfx\polygon\b2dtrapezoid.hxx
+..\inc\basegfx\polygon\b3dpolygon.hxx %_DEST%\inc%_EXT%\basegfx\polygon\b3dpolygon.hxx
+..\inc\basegfx\polygon\b3dpolypolygon.hxx %_DEST%\inc%_EXT%\basegfx\polygon\b3dpolypolygon.hxx
+..\inc\basegfx\polygon\b3dpolygontools.hxx %_DEST%\inc%_EXT%\basegfx\polygon\b3dpolygontools.hxx
+..\inc\basegfx\polygon\b3dpolypolygontools.hxx %_DEST%\inc%_EXT%\basegfx\polygon\b3dpolypolygontools.hxx
+..\inc\basegfx\polygon\b3dpolygonclipper.hxx %_DEST%\inc%_EXT%\basegfx\polygon\b3dpolygonclipper.hxx
+
+mkdir: %_DEST%\inc%_EXT%\basegfx\tuple
+..\inc\basegfx\tuple\b2dtuple.hxx %_DEST%\inc%_EXT%\basegfx\tuple\b2dtuple.hxx
+..\inc\basegfx\tuple\b3dtuple.hxx %_DEST%\inc%_EXT%\basegfx\tuple\b3dtuple.hxx
+..\inc\basegfx\tuple\b2ituple.hxx %_DEST%\inc%_EXT%\basegfx\tuple\b2ituple.hxx
+..\inc\basegfx\tuple\b3ituple.hxx %_DEST%\inc%_EXT%\basegfx\tuple\b3ituple.hxx
+..\inc\basegfx\tuple\b2i64tuple.hxx %_DEST%\inc%_EXT%\basegfx\tuple\b2i64tuple.hxx
+..\inc\basegfx\tuple\b3i64tuple.hxx %_DEST%\inc%_EXT%\basegfx\tuple\b3i64tuple.hxx
+
+mkdir: %_DEST%\inc%_EXT%\basegfx\tools
+..\inc\basegfx\tools\canvastools.hxx %_DEST%\inc%_EXT%\basegfx\tools\canvastools.hxx
+..\inc\basegfx\tools\keystoplerp.hxx %_DEST%\inc%_EXT%\basegfx\tools\keystoplerp.hxx
+..\inc\basegfx\tools\lerp.hxx %_DEST%\inc%_EXT%\basegfx\tools\lerp.hxx
+..\inc\basegfx\tools\unopolypolygon.hxx %_DEST%\inc%_EXT%\basegfx\tools\unopolypolygon.hxx
+..\inc\basegfx\tools\b2dclipstate.hxx %_DEST%\inc%_EXT%\basegfx\tools\b2dclipstate.hxx
+..\inc\basegfx\tools\rectcliptools.hxx %_DEST%\inc%_EXT%\basegfx\tools\rectcliptools.hxx
+..\inc\basegfx\tools\tools.hxx %_DEST%\inc%_EXT%\basegfx\tools\tools.hxx
+..\inc\basegfx\tools\gradienttools.hxx %_DEST%\inc%_EXT%\basegfx\tools\gradienttools.hxx
+
+mkdir: %_DEST%\inc%_EXT%\basegfx\color
+..\inc\basegfx\color\bcolor.hxx %_DEST%\inc%_EXT%\basegfx\color\bcolor.hxx
+..\inc\basegfx\color\bcolortools.hxx %_DEST%\inc%_EXT%\basegfx\color\bcolortools.hxx
+..\inc\basegfx\color\bcolormodifier.hxx %_DEST%\inc%_EXT%\basegfx\color\bcolormodifier.hxx
+
+mkdir: %_DEST%\inc%_EXT%\basegfx\pixel
+..\inc\basegfx\pixel\bpixel.hxx %_DEST%\inc%_EXT%\basegfx\pixel\bpixel.hxx
+..\inc\basegfx\pixel\bzpixel.hxx %_DEST%\inc%_EXT%\basegfx\pixel\bzpixel.hxx
+
+mkdir: %_DEST%\inc%_EXT%\basegfx\raster
+..\inc\basegfx\raster\bpixelraster.hxx %_DEST%\inc%_EXT%\basegfx\raster\bpixelraster.hxx
+..\inc\basegfx\raster\bzpixelraster.hxx %_DEST%\inc%_EXT%\basegfx\raster\bzpixelraster.hxx
+..\inc\basegfx\raster\rasterconvert3d.hxx %_DEST%\inc%_EXT%\basegfx\raster\rasterconvert3d.hxx
diff --git a/basegfx/qa/mkpolygons.pl b/basegfx/qa/mkpolygons.pl
new file mode 100644
index 000000000000..b465a4f845ab
--- /dev/null
+++ b/basegfx/qa/mkpolygons.pl
@@ -0,0 +1,344 @@
+:
+eval 'exec perl -wS $0 ${1+"$@"}'
+ if 0;
+
+#
+# 2009 Copyright Novell, Inc. & Sun Microsystems, Inc.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+
+use IO::File;
+use Cwd;
+use File::Spec;
+use File::Spec::Functions;
+use File::Temp;
+use File::Path;
+
+$TempDir = "";
+
+
+# all the XML package generation is a blatant rip from AF's
+# write-calc-doc.pl
+
+
+###############################################################################
+# Open a file with the given name.
+# First it is checked if the temporary directory, in which all files for
+# the document are gathered, is already present and create it if it is not.
+# Then create the path to the file inside the temporary directory.
+# Finally open the file and return a file handle to it.
+#
+sub open_file
+{
+ my $filename = pop @_;
+
+ # Create base directory of temporary directory tree if not alreay
+ # present.
+ if ($TempDir eq "")
+ {
+ $TempDir = File::Temp::tempdir (CLEANUP => 1);
+ }
+
+ # Create the path to the file.
+ my $fullname = File::Spec->catfile ($TempDir, $filename);
+ my ($volume,$directories,$file) = File::Spec->splitpath ($fullname);
+ mkpath (File::Spec->catpath ($volume,$directories,""));
+
+ # Open the file and return a file handle to it.
+ return new IO::File ($fullname, "w");
+}
+
+
+###############################################################################
+# Zip the files in the directory tree into the given file.
+#
+sub zip_dirtree
+{
+ my $filename = pop @_;
+
+ my $cwd = getcwd;
+ my $zip_name = $filename;
+
+ # We are about to change the directory.
+ # Therefore create an absolute pathname for the zip archive.
+
+ # First transfer the drive from $cwd to $zip_name. This is a
+ # workaround for a bug in file_name_is_absolute which thinks
+ # the the path \bla is an absolute path under DOS.
+ my ($volume,$directories,$file) = File::Spec->splitpath ($zip_name);
+ my ($volume_cwd,$directories_cwd,$file_cwd) = File::Spec->splitpath ($cwd);
+ $volume = $volume_cwd if ($volume eq "");
+ $zip_name = File::Spec->catpath ($volume,$directories,$file);
+
+ # Add the current working directory to a relative path.
+ if ( ! file_name_is_absolute ($zip_name))
+ {
+ $zip_name = File::Spec->catfile ($cwd, $zip_name);
+
+ # Try everything to clean up the name.
+ $zip_name = File::Spec->rel2abs ($filename);
+ $zip_name = File::Spec->canonpath ($zip_name);
+
+ # Remove .. directories from the middle of the path.
+ while ($zip_name =~ /\/[^\/][^\.\/][^\/]*\/\.\.\//)
+ {
+ $zip_name = $` . "/" . $';
+ }
+ }
+
+ # Just in case the zip program gets confused by an existing file with the
+ # same name as the one to be written that file is removed first.
+ if ( -e $filename)
+ {
+ if (unlink ($filename) == 0)
+ {
+ print "Existing file $filename could not be deleted.\n";
+ print "Please close the application that uses it, then try again.\n";
+ return;
+ }
+ }
+
+ # Finally create the zip file. First change into the temporary directory
+ # so that the resulting zip file contains only paths relative to it.
+ print "zipping [$ZipCmd $ZipFlags $zip_name *]\n";
+ chdir ($TempDir);
+ system ("$ZipCmd $ZipFlags $zip_name *");
+ chdir ($cwd);
+}
+
+
+sub writeHeader
+{
+ print $OUT qq~<?xml version="1.0" encoding="UTF-8"?>
+
+<office:document-content xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:presentation="urn:oasis:names:tc:opendocument:xmlns:presentation:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:smil="urn:oasis:names:tc:opendocument:xmlns:smil-compatible:1.0" xmlns:anim="urn:oasis:names:tc:opendocument:xmlns:animation:1.0" office:version="1.0">
+ <office:scripts/>
+ <office:automatic-styles>
+ <style:style style:name="dp1" style:family="drawing-page">
+ <style:drawing-page-properties presentation:background-visible="true" presentation:background-objects-visible="true" presentation:display-footer="true" presentation:display-page-number="false" presentation:display-date-time="true"/>
+ </style:style>
+ <style:style style:name="gr1" style:family="graphic" style:parent-style-name="standard">
+ <style:graphic-properties draw:textarea-horizontal-align="center" draw:fill="none" draw:stroke="none" draw:textarea-vertical-align="middle"/>
+ </style:style>
+ <style:style style:name="gr2" style:family="graphic" style:parent-style-name="standard">
+ <style:graphic-properties draw:textarea-horizontal-align="center" draw:textarea-vertical-align="middle"/>
+ </style:style>
+ <style:style style:name="pr1" style:family="presentation" style:parent-style-name="Default-title">
+ <style:graphic-properties draw:fill-color="#ffffff" draw:auto-grow-height="true" fo:min-height="3.508cm"/>
+ </style:style>
+ <style:style style:name="pr2" style:family="presentation" style:parent-style-name="Default-notes">
+ <style:graphic-properties draw:fill-color="#ffffff" draw:auto-grow-height="true" fo:min-height="13.367cm"/>
+ </style:style>
+ <style:style style:name="P1" style:family="paragraph">
+ <style:paragraph-properties fo:margin-left="0cm" fo:margin-right="0cm" fo:text-indent="0cm"/>
+ </style:style>
+ <style:style style:name="P2" style:family="paragraph">
+ <style:paragraph-properties fo:margin-left="0.6cm" fo:margin-right="0cm" fo:text-indent="-0.6cm"/>
+ </style:style>
+ <text:list-style style:name="L1">
+ <text:list-level-style-bullet text:level="1" text:bullet-char="●">
+ <style:text-properties fo:font-family="StarSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
+ </text:list-level-style-bullet>
+ <text:list-level-style-bullet text:level="2" text:bullet-char="●">
+ <style:list-level-properties text:space-before="0.6cm" text:min-label-width="0.6cm"/>
+ <style:text-properties fo:font-family="StarSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
+ </text:list-level-style-bullet>
+ <text:list-level-style-bullet text:level="3" text:bullet-char="●">
+ <style:list-level-properties text:space-before="1.2cm" text:min-label-width="0.6cm"/>
+ <style:text-properties fo:font-family="StarSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
+ </text:list-level-style-bullet>
+ <text:list-level-style-bullet text:level="4" text:bullet-char="●">
+ <style:list-level-properties text:space-before="1.8cm" text:min-label-width="0.6cm"/>
+ <style:text-properties fo:font-family="StarSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
+ </text:list-level-style-bullet>
+ <text:list-level-style-bullet text:level="5" text:bullet-char="●">
+ <style:list-level-properties text:space-before="2.4cm" text:min-label-width="0.6cm"/>
+ <style:text-properties fo:font-family="StarSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
+ </text:list-level-style-bullet>
+ <text:list-level-style-bullet text:level="6" text:bullet-char="●">
+ <style:list-level-properties text:space-before="3cm" text:min-label-width="0.6cm"/>
+ <style:text-properties fo:font-family="StarSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
+ </text:list-level-style-bullet>
+ <text:list-level-style-bullet text:level="7" text:bullet-char="●">
+ <style:list-level-properties text:space-before="3.6cm" text:min-label-width="0.6cm"/>
+ <style:text-properties fo:font-family="StarSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
+ </text:list-level-style-bullet>
+ <text:list-level-style-bullet text:level="8" text:bullet-char="●">
+ <style:list-level-properties text:space-before="4.2cm" text:min-label-width="0.6cm"/>
+ <style:text-properties fo:font-family="StarSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
+ </text:list-level-style-bullet>
+ <text:list-level-style-bullet text:level="9" text:bullet-char="●">
+ <style:list-level-properties text:space-before="4.8cm" text:min-label-width="0.6cm"/>
+ <style:text-properties fo:font-family="StarSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
+ </text:list-level-style-bullet>
+ </text:list-style>
+ </office:automatic-styles>
+ <office:body>
+ <office:presentation>
+~;
+
+}
+
+sub writeSlideHeader
+{
+ my $titleText = pop @_;
+ my $slideNum = pop @_;
+
+ print $OUT " <draw:page draw:name=\"page1\" draw:style-name=\"dp1\" draw:master-page-name=\"Default\">\n";
+ print $OUT " <office:forms form:automatic-focus=\"false\" form:apply-design-mode=\"false\"/>\n";
+ print $OUT " <draw:rect draw:style-name=\"gr1\" draw:text-style-name=\"P1\" draw:id=\"id$slideNum\" draw:layer=\"layout\" svg:width=\"17.5cm\" svg:height=\"6cm\" svg:x=\"5cm\" svg:y=\"4cm\">\n";
+ print $OUT " <text:p text:style-name=\"P2\">Slide: $slideNum</text:p>\n";
+ print $OUT " <text:p text:style-name=\"P2\">Path: $titleText</text:p>\n";
+ print $OUT " </draw:rect>\n";
+}
+
+
+sub writeSlideFooter
+{
+ print $OUT " <presentation:notes draw:style-name=\"dp1\">\n";
+ print $OUT " <draw:page-thumbnail draw:style-name=\"gr1\" draw:layer=\"layout\" svg:width=\"14.851cm\" svg:height=\"11.138cm\" svg:x=\"3.068cm\" svg:y=\"2.257cm\" draw:page-number=\"1\" presentation:class=\"page\"/>\n";
+ print $OUT " <draw:frame presentation:style-name=\"pr3\" draw:layer=\"layout\" svg:width=\"16.79cm\" svg:height=\"13.116cm\" svg:x=\"2.098cm\" svg:y=\"14.109cm\" presentation:class=\"notes\" presentation:placeholder=\"true\">\n";
+ print $OUT " <draw:text-box/>\n";
+ print $OUT " </draw:frame>\n";
+ print $OUT " </presentation:notes>\n";
+ print $OUT " </draw:page>\n";
+}
+
+sub writeFooter
+{
+ print $OUT qq~ <presentation:settings presentation:full-screen="false"/>
+ </office:presentation>
+ </office:body>
+</office:document-content>
+~;
+
+}
+
+sub writePath
+{
+ my $pathAry = pop @_;
+ my $path = $pathAry->[1];
+ my $viewBox = $pathAry->[0];
+
+ print $OUT " <draw:path draw:style-name=\"gr2\" draw:text-style-name=\"P1\" draw:layer=\"layout\" svg:width=\"10cm\" svg:height=\"10cm\" svg:x=\"5cm\" svg:y=\"5cm\" svg:viewBox=\"";
+ print $OUT $viewBox;
+ print $OUT "\" svg:d=\"";
+ print $OUT $path;
+ print $OUT "\">\n";
+ print $OUT " <text:p/>\n";
+ print $OUT " </draw:path>\n";
+}
+
+sub writeManifest
+{
+ my $outFile = open_file("META-INF/manifest.xml");
+
+ print $outFile qq~<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE manifest:manifest PUBLIC "-//OpenOffice.org//DTD Manifest 1.0//EN" "Manifest.dtd">
+<manifest:manifest xmlns:manifest="urn:oasis:names:tc:opendocument:xmlns:manifest:1.0">
+ <manifest:file-entry manifest:media-type="application/vnd.oasis.opendocument.presentation" manifest:full-path="/"/>
+ <manifest:file-entry manifest:media-type="text/xml" manifest:full-path="content.xml"/>
+</manifest:manifest>
+~;
+
+ $outFile->close;
+}
+
+
+###############################################################################
+# Print usage information.
+#
+sub usage ()
+{
+ print <<END_OF_USAGE;
+usage: $0 <option>* [<SvgD-values>]
+
+output-file-name defaults to polygons.odp.
+
+ -h Print this usage information.
+ -o output-file-name
+END_OF_USAGE
+}
+
+###############################################################################
+# Process the command line.
+#
+sub process_command_line
+{
+ foreach (@ARGV)
+ {
+ if (/^-h/)
+ {
+ usage;
+ exit 0;
+ }
+ }
+
+ $global_output_name = "polygons.odp";
+ my $j = 0, $noMoreOptions = 0;
+ for (my $i=0; $i<$#ARGV; $i++)
+ {
+ if ( !$noMoreOptions and $ARGV[$i] eq "-o")
+ {
+ $i++;
+ $global_output_name = $ARGV[$i];
+ }
+ elsif ( !$noMoreOptions and $ARGV[$i] eq "--")
+ {
+ $noMoreOptions = 1;
+ }
+ elsif ( !$noMoreOptions and $ARGV[$i] =~ /^-/)
+ {
+ print "Unknown option $ARGV[$i]\n";
+ usage;
+ exit 1;
+ }
+ else
+ {
+ push(@paths, [$ARGV[$i],$ARGV[$i+1]]);
+ $i++;
+ }
+ }
+
+ print "output to $global_output_name\n";
+}
+
+###############################################################################
+# Main
+###############################################################################
+
+$ZipCmd = $ENV{LOG_FILE_ZIP_CMD};
+$ZipFlags = $ENV{LOG_FILE_ZIP_FLAGS};
+# Provide default values for the zip command and it's flags.
+if ( ! defined $ZipCmd)
+{
+ $ZipCmd = "zip" unless defined $ZipCmd;
+ $ZipFlags = "-r -q" unless defined $ZipFlags;
+}
+
+process_command_line();
+
+writeManifest();
+
+$OUT = open_file( "content.xml" );
+
+writeHeader();
+
+$pathNum=0;
+foreach $path (@paths)
+{
+ writeSlideHeader($pathNum, $path->[1]);
+ writePath($path);
+ writeSlideFooter();
+ $pathNum++;
+}
+
+writeFooter();
+
+$OUT->close;
+
+zip_dirtree ($global_output_name);
+
diff --git a/basegfx/source/color/bcolor.cxx b/basegfx/source/color/bcolor.cxx
new file mode 100644
index 000000000000..6e5b4c985e6d
--- /dev/null
+++ b/basegfx/source/color/bcolor.cxx
@@ -0,0 +1,40 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basegfx.hxx"
+
+#include <basegfx/color/bcolor.hxx>
+
+//////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+} // end of namespace basegfx
+
+//////////////////////////////////////////////////////////////////////////////
+// eof
diff --git a/basegfx/source/color/bcolormodifier.cxx b/basegfx/source/color/bcolormodifier.cxx
new file mode 100644
index 000000000000..15662c44414c
--- /dev/null
+++ b/basegfx/source/color/bcolormodifier.cxx
@@ -0,0 +1,72 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basegfx.hxx"
+
+#include <basegfx/color/bcolormodifier.hxx>
+
+//////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+ ::basegfx::BColor BColorModifier::getModifiedColor(const ::basegfx::BColor& aSourceColor) const
+ {
+ switch(meMode)
+ {
+ case BCOLORMODIFYMODE_INTERPOLATE :
+ {
+ return interpolate(maBColor, aSourceColor, mfValue);
+ }
+ case BCOLORMODIFYMODE_GRAY :
+ {
+ const double fLuminance(aSourceColor.luminance());
+ return ::basegfx::BColor(fLuminance, fLuminance, fLuminance);
+ }
+ case BCOLORMODIFYMODE_BLACKANDWHITE :
+ {
+ const double fLuminance(aSourceColor.luminance());
+
+ if(fLuminance < mfValue)
+ {
+ return ::basegfx::BColor::getEmptyBColor();
+ }
+ else
+ {
+ return ::basegfx::BColor(1.0, 1.0, 1.0);
+ }
+ }
+ default : // BCOLORMODIFYMODE_REPLACE
+ {
+ return maBColor;
+ }
+ }
+ }
+} // end of namespace basegfx
+
+//////////////////////////////////////////////////////////////////////////////
+// eof
diff --git a/basegfx/source/color/bcolortools.cxx b/basegfx/source/color/bcolortools.cxx
new file mode 100644
index 000000000000..543097de3d77
--- /dev/null
+++ b/basegfx/source/color/bcolortools.cxx
@@ -0,0 +1,268 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basegfx.hxx"
+
+#include <basegfx/numeric/ftools.hxx>
+#include <basegfx/color/bcolor.hxx>
+#include <basegfx/color/bcolortools.hxx>
+
+//////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx { namespace tools
+{
+ BColor rgb2hsl(const BColor& rRGBColor)
+ {
+ const double r=rRGBColor.getRed(), g=rRGBColor.getGreen(), b=rRGBColor.getBlue();
+ const double minVal = ::std::min( ::std::min( r, g ), b );
+ const double maxVal = ::std::max( ::std::max( r, g ), b );
+ const double d = maxVal - minVal;
+
+ double h=0, s=0, l=0;
+
+ l = (maxVal + minVal) / 2.0;
+
+ if( ::basegfx::fTools::equalZero(d) )
+ {
+ s = h = 0; // hue undefined (achromatic case)
+ }
+ else
+ {
+ s = l > 0.5 ? d/(2.0-maxVal-minVal) :
+ d/(maxVal + minVal);
+
+ if( r == maxVal )
+ h = (g - b)/d;
+ else if( g == maxVal )
+ h = 2.0 + (b - r)/d;
+ else
+ h = 4.0 + (r - g)/d;
+
+ h *= 60.0;
+
+ if( h < 0.0 )
+ h += 360.0;
+ }
+
+ return BColor(h,s,l);
+ }
+
+ static inline double hsl2rgbHelper( double nValue1, double nValue2, double nHue )
+ {
+ // clamp hue to [0,360]
+ nHue = fmod( nHue, 360.0 );
+
+ // cope with wrap-arounds
+ if( nHue < 0.0 )
+ nHue += 360.0;
+
+ if( nHue < 60.0 )
+ return nValue1 + (nValue2 - nValue1)*nHue/60.0;
+ else if( nHue < 180.0 )
+ return nValue2;
+ else if( nHue < 240.0 )
+ return nValue1 + (nValue2 - nValue1)*(240.0 - nHue)/60.0;
+ else
+ return nValue1;
+ }
+
+ BColor hsl2rgb(const BColor& rHSLColor)
+ {
+ const double h=rHSLColor.getRed(), s=rHSLColor.getGreen(), l=rHSLColor.getBlue();
+
+ if( fTools::equalZero(s) )
+ return BColor(l, l, l ); // achromatic case
+
+ const double nVal1( l <= 0.5 ? l*(1.0 + s) : l + s - l*s );
+ const double nVal2( 2.0*l - nVal1 );
+
+ return BColor(
+ hsl2rgbHelper(nVal2,
+ nVal1,
+ h + 120.0),
+ hsl2rgbHelper(nVal2,
+ nVal1,
+ h),
+ hsl2rgbHelper(nVal2,
+ nVal1,
+ h - 120.0) );
+ }
+
+ BColor rgb2hsv(const BColor& rRGBColor)
+ {
+ const double r=rRGBColor.getRed(), g=rRGBColor.getGreen(), b=rRGBColor.getBlue();
+ const double maxVal = std::max(std::max(r,g),b);
+ const double minVal = std::min(std::min(r,g),b);
+ const double delta = maxVal-minVal;
+
+ double h=0, s=0, v=0;
+
+ v = maxVal;
+ if( fTools::equalZero(v) )
+ s = 0;
+ else
+ s = delta / v;
+
+ if( !fTools::equalZero(s) )
+ {
+ if( maxVal == r )
+ {
+ h = (g - b) / delta;
+ }
+ else if( maxVal == g )
+ {
+ h = 2.0 + (b - r) / delta;
+ }
+ else
+ {
+ h = 4.0 + (r - g) / delta;
+ }
+
+ h *= 60.0;
+
+ if( h < 0 )
+ h += 360;
+ }
+
+ return BColor(h,s,v);
+ }
+
+ BColor hsv2rgb(const BColor& rHSVColor)
+ {
+ double h=rHSVColor.getRed();
+ const double s=rHSVColor.getGreen(), v=rHSVColor.getBlue();
+
+ if( fTools::equalZero(s) )
+ {
+ // achromatic case: no hue.
+ return BColor(v,v,v);
+ }
+ else
+ {
+ if( fTools::equal(h,360) )
+ h = 0; // 360 degrees is equivalent to 0 degrees
+
+ h /= 60.0;
+ const sal_Int32 intval = static_cast< sal_Int32 >( h );
+ const double f = h - intval;
+ const double p = v*(1.0-s);
+ const double q = v*(1.0-(s*f));
+ const double t = v*(1.0-(s*(1.0-f)));
+
+ /* which hue area? */
+ switch( intval )
+ {
+ case 0:
+ return BColor(v,t,p);
+
+ case 1:
+ return BColor(q,v,p);
+
+ case 2:
+ return BColor(p,v,t);
+
+ case 3:
+ return BColor(p,q,v);
+
+ case 4:
+ return BColor(t,p,v);
+
+ case 5:
+ return BColor(v,p,q);
+
+ default:
+ // hue overflow
+ return BColor();
+ }
+ }
+ }
+
+ BColor rgb2yiq(const BColor& rRGBColor)
+ {
+ // from Foley, van Dam, Computer Graphics
+ const double r=rRGBColor.getRed(), g=rRGBColor.getGreen(), b=rRGBColor.getBlue();
+ return BColor(
+ 0.299*r + 0.587*g + 0.114*b,
+ 0.596*r - 0.274*g - 0.322*b,
+ 0.211*r - 0.522*g + 0.311*b);
+ }
+
+ BColor yiq2rgb(const BColor& rYIQColor)
+ {
+ // from Foley, van Dam, Computer Graphics
+ const double y=rYIQColor.getRed(), i=rYIQColor.getGreen(), q=rYIQColor.getBlue();
+ return BColor(
+ y + 0.956*i + 0.623*q,
+ y - 0.272*i - 0.648*q,
+ y - 1.105*i + 1.705*q );
+ }
+
+ BColor ciexyz2rgb( const BColor& rXYZColor )
+ {
+ // from Poynton color faq, and SMPTE RP 177-1993, Derivation
+ // of Basic Television Color Equations
+ const double x=rXYZColor.getRed(), y=rXYZColor.getGreen(), z=rXYZColor.getBlue();
+ return BColor(
+ 3.240479*x - 1.53715*y - 0.498535*z,
+ -0.969256*x + 1.875991*y + 0.041556*z,
+ 0.055648*x - 0.204043*y + 1.057311*z );
+ }
+
+ BColor rgb2ciexyz( const BColor& rRGBColor )
+ {
+ // from Poynton color faq, and SMPTE RP 177-1993, Derivation
+ // of Basic Television Color Equations
+ const double r=rRGBColor.getRed(), g=rRGBColor.getGreen(), b=rRGBColor.getBlue();
+ return BColor(
+ 0.412453*r + 0.35758*g + 0.180423*b,
+ 0.212671*r + 0.71516*g + 0.072169*b,
+ 0.019334*r + 0.119193*g + 0.950227*b);
+ }
+
+ BColor rgb2ypbpr(const BColor& rRGBColor)
+ {
+ const double r=rRGBColor.getRed(), g=rRGBColor.getGreen(), b=rRGBColor.getBlue();
+ return BColor(
+ 0.299*r + 0.587*g + 0.114*b,
+ -0.168736*r - 0.331264*g + 0.5*b,
+ 0.5*r - 0.418688*g - 0.081312*b);
+ }
+
+ BColor ypbpr2rgb(const BColor& rYPbPrColor)
+ {
+ const double y=rYPbPrColor.getRed(), pb=rYPbPrColor.getGreen(), pr=rYPbPrColor.getBlue();
+ return BColor(
+ 1.*y + 0.*pb + 1.402*pr,
+ 1.*y - 0.344136*pb - 0.714136*pr,
+ 1.*y + 1.772*pb + 0.*pr);
+ }
+
+} } // end of namespace basegfx
+
+//////////////////////////////////////////////////////////////////////////////
+// eof
diff --git a/basegfx/source/color/makefile.mk b/basegfx/source/color/makefile.mk
new file mode 100644
index 000000000000..c4e842db72ae
--- /dev/null
+++ b/basegfx/source/color/makefile.mk
@@ -0,0 +1,49 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..$/..
+PRJNAME=basegfx
+TARGET=color
+
+#UNOUCRRDB=$(SOLARBINDIR)$/applicat.rdb
+#ENABLE_EXCEPTIONS=FALSE
+#USE_DEFFILE=TRUE
+
+# --- Settings ----------------------------------
+
+.INCLUDE : settings.mk
+
+# --- Files -------------------------------------
+
+SLOFILES= \
+ $(SLO)$/bcolor.obj \
+ $(SLO)$/bcolortools.obj \
+ $(SLO)$/bcolormodifier.obj
+
+# --- Targets ----------------------------------
+
+.INCLUDE : target.mk
diff --git a/basegfx/source/curve/b2dbeziertools.cxx b/basegfx/source/curve/b2dbeziertools.cxx
new file mode 100644
index 000000000000..eddd0b281fc2
--- /dev/null
+++ b/basegfx/source/curve/b2dbeziertools.cxx
@@ -0,0 +1,163 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basegfx.hxx"
+#include <basegfx/curve/b2dbeziertools.hxx>
+#include <basegfx/curve/b2dcubicbezier.hxx>
+#include <algorithm>
+
+//////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+ B2DCubicBezierHelper::B2DCubicBezierHelper(const B2DCubicBezier& rBase, sal_uInt32 nDivisions)
+ : maLengthArray(),
+ mnEdgeCount(0)
+ {
+ const bool bIsBezier(rBase.isBezier());
+
+ if(bIsBezier)
+ {
+ // check nDivisions; at least one is needed, but also prevent too big values
+ if(nDivisions < 1)
+ {
+ nDivisions = 1;
+ }
+ else if(nDivisions > 1000)
+ {
+ nDivisions = 1000;
+ }
+
+ // set nEdgeCount
+ mnEdgeCount = nDivisions + 1;
+
+ // fill in maLengthArray
+ maLengthArray.clear();
+ maLengthArray.reserve(mnEdgeCount);
+ B2DPoint aCurrent(rBase.getStartPoint());
+ double fLength(0.0);
+
+ for(sal_uInt32 a(1);;)
+ {
+ const B2DPoint aNext(rBase.interpolatePoint((double)a / (double)mnEdgeCount));
+ const B2DVector aEdge(aNext - aCurrent);
+
+ fLength += aEdge.getLength();
+ maLengthArray.push_back(fLength);
+
+ if(++a < mnEdgeCount)
+ {
+ aCurrent = aNext;
+ }
+ else
+ {
+ const B2DPoint aLastNext(rBase.getEndPoint());
+ const B2DVector aLastEdge(aLastNext - aNext);
+
+ fLength += aLastEdge.getLength();
+ maLengthArray.push_back(fLength);
+ break;
+ }
+ }
+ }
+ else
+ {
+ maLengthArray.clear();
+ maLengthArray.push_back(rBase.getEdgeLength());
+ mnEdgeCount = 1;
+ }
+ }
+
+ double B2DCubicBezierHelper::distanceToRelative(double fDistance) const
+ {
+ if(fDistance <= 0.0)
+ {
+ return 0.0;
+ }
+
+ const double fLength(getLength());
+
+ if(fTools::moreOrEqual(fDistance, fLength))
+ {
+ return 1.0;
+ }
+
+ // fDistance is in ]0.0 .. fLength[
+
+ if(1 == mnEdgeCount)
+ {
+ // not a bezier, linear edge
+ return fDistance / fLength;
+ }
+
+ // it is a bezier
+ ::std::vector< double >::const_iterator aIter = ::std::lower_bound(maLengthArray.begin(), maLengthArray.end(), fDistance);
+ const sal_uInt32 nIndex(aIter - maLengthArray.begin());
+ const double fHighBound(maLengthArray[nIndex]);
+ const double fLowBound(nIndex ? maLengthArray[nIndex - 1] : 0.0);
+ const double fLinearInterpolatedLength((fDistance - fLowBound) / (fHighBound - fLowBound));
+
+ return (static_cast< double >(nIndex) + fLinearInterpolatedLength) / static_cast< double >(mnEdgeCount);
+ }
+
+ double B2DCubicBezierHelper::relativeToDistance(double fRelative) const
+ {
+ if(fRelative <= 0.0)
+ {
+ return 0.0;
+ }
+
+ const double fLength(getLength());
+
+ if(fTools::moreOrEqual(fRelative, 1.0))
+ {
+ return fLength;
+ }
+
+ // fRelative is in ]0.0 .. 1.0[
+
+ if(1 == mnEdgeCount)
+ {
+ // not a bezier, linear edge
+ return fRelative * fLength;
+ }
+
+ // fRelative is in ]0.0 .. 1.0[
+ const double fIndex(fRelative * static_cast< double >(mnEdgeCount));
+ double fIntIndex;
+ const double fFractIndex(modf(fIndex, &fIntIndex));
+ const sal_uInt32 nIntIndex(static_cast< sal_uInt32 >(fIntIndex));
+ const double fStartDistance(nIntIndex ? maLengthArray[nIntIndex - 1] : 0.0);
+
+ return fStartDistance + ((maLengthArray[nIntIndex] - fStartDistance) * fFractIndex);
+ }
+} // end of namespace basegfx
+
+//////////////////////////////////////////////////////////////////////////////
+
+// eof
diff --git a/basegfx/source/curve/b2dcubicbezier.cxx b/basegfx/source/curve/b2dcubicbezier.cxx
new file mode 100644
index 000000000000..80bd8922160b
--- /dev/null
+++ b/basegfx/source/curve/b2dcubicbezier.cxx
@@ -0,0 +1,1106 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basegfx.hxx"
+#include <basegfx/curve/b2dcubicbezier.hxx>
+#include <basegfx/vector/b2dvector.hxx>
+#include <basegfx/polygon/b2dpolygon.hxx>
+#include <basegfx/numeric/ftools.hxx>
+
+#include <limits>
+
+// #i37443#
+#define FACTOR_FOR_UNSHARPEN (1.6)
+#ifdef DBG_UTIL
+static double fMultFactUnsharpen = FACTOR_FOR_UNSHARPEN;
+#endif
+
+//////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+ namespace
+ {
+ void ImpSubDivAngle(
+ const B2DPoint& rfPA, // start point
+ const B2DPoint& rfEA, // edge on A
+ const B2DPoint& rfEB, // edge on B
+ const B2DPoint& rfPB, // end point
+ B2DPolygon& rTarget, // target polygon
+ double fAngleBound, // angle bound in [0.0 .. 2PI]
+ bool bAllowUnsharpen, // #i37443# allow the criteria to get unsharp in recursions
+ sal_uInt16 nMaxRecursionDepth) // endless loop protection
+ {
+ if(nMaxRecursionDepth)
+ {
+ // do angle test
+ B2DVector aLeft(rfEA - rfPA);
+ B2DVector aRight(rfEB - rfPB);
+
+ // #i72104#
+ if(aLeft.equalZero())
+ {
+ aLeft = rfEB - rfPA;
+ }
+
+ if(aRight.equalZero())
+ {
+ aRight = rfEA - rfPB;
+ }
+
+ const double fCurrentAngle(aLeft.angle(aRight));
+
+ if(fabs(fCurrentAngle) > (F_PI - fAngleBound))
+ {
+ // end recursion
+ nMaxRecursionDepth = 0;
+ }
+ else
+ {
+ if(bAllowUnsharpen)
+ {
+ // #i37443# unsharpen criteria
+#ifdef DBG_UTIL
+ fAngleBound *= fMultFactUnsharpen;
+#else
+ fAngleBound *= FACTOR_FOR_UNSHARPEN;
+#endif
+ }
+ }
+ }
+
+ if(nMaxRecursionDepth)
+ {
+ // divide at 0.5
+ const B2DPoint aS1L(average(rfPA, rfEA));
+ const B2DPoint aS1C(average(rfEA, rfEB));
+ const B2DPoint aS1R(average(rfEB, rfPB));
+ const B2DPoint aS2L(average(aS1L, aS1C));
+ const B2DPoint aS2R(average(aS1C, aS1R));
+ const B2DPoint aS3C(average(aS2L, aS2R));
+
+ // left recursion
+ ImpSubDivAngle(rfPA, aS1L, aS2L, aS3C, rTarget, fAngleBound, bAllowUnsharpen, nMaxRecursionDepth - 1);
+
+ // right recursion
+ ImpSubDivAngle(aS3C, aS2R, aS1R, rfPB, rTarget, fAngleBound, bAllowUnsharpen, nMaxRecursionDepth - 1);
+ }
+ else
+ {
+ rTarget.append(rfPB);
+ }
+ }
+
+ void ImpSubDivAngleStart(
+ const B2DPoint& rfPA, // start point
+ const B2DPoint& rfEA, // edge on A
+ const B2DPoint& rfEB, // edge on B
+ const B2DPoint& rfPB, // end point
+ B2DPolygon& rTarget, // target polygon
+ const double& rfAngleBound, // angle bound in [0.0 .. 2PI]
+ bool bAllowUnsharpen) // #i37443# allow the criteria to get unsharp in recursions
+ {
+ sal_uInt16 nMaxRecursionDepth(8);
+ const B2DVector aLeft(rfEA - rfPA);
+ const B2DVector aRight(rfEB - rfPB);
+ bool bLeftEqualZero(aLeft.equalZero());
+ bool bRightEqualZero(aRight.equalZero());
+ bool bAllParallel(false);
+
+ if(bLeftEqualZero && bRightEqualZero)
+ {
+ nMaxRecursionDepth = 0;
+ }
+ else
+ {
+ const B2DVector aBase(rfPB - rfPA);
+ const bool bBaseEqualZero(aBase.equalZero()); // #i72104#
+
+ if(!bBaseEqualZero)
+ {
+ const bool bLeftParallel(bLeftEqualZero ? true : areParallel(aLeft, aBase));
+ const bool bRightParallel(bRightEqualZero ? true : areParallel(aRight, aBase));
+
+ if(bLeftParallel && bRightParallel)
+ {
+ bAllParallel = true;
+
+ if(!bLeftEqualZero)
+ {
+ double fFactor;
+
+ if(fabs(aBase.getX()) > fabs(aBase.getY()))
+ {
+ fFactor = aLeft.getX() / aBase.getX();
+ }
+ else
+ {
+ fFactor = aLeft.getY() / aBase.getY();
+ }
+
+ if(fFactor >= 0.0 && fFactor <= 1.0)
+ {
+ bLeftEqualZero = true;
+ }
+ }
+
+ if(!bRightEqualZero)
+ {
+ double fFactor;
+
+ if(fabs(aBase.getX()) > fabs(aBase.getY()))
+ {
+ fFactor = aRight.getX() / -aBase.getX();
+ }
+ else
+ {
+ fFactor = aRight.getY() / -aBase.getY();
+ }
+
+ if(fFactor >= 0.0 && fFactor <= 1.0)
+ {
+ bRightEqualZero = true;
+ }
+ }
+
+ if(bLeftEqualZero && bRightEqualZero)
+ {
+ nMaxRecursionDepth = 0;
+ }
+ }
+ }
+ }
+
+ if(nMaxRecursionDepth)
+ {
+ // divide at 0.5 ad test both edges for angle criteria
+ const B2DPoint aS1L(average(rfPA, rfEA));
+ const B2DPoint aS1C(average(rfEA, rfEB));
+ const B2DPoint aS1R(average(rfEB, rfPB));
+ const B2DPoint aS2L(average(aS1L, aS1C));
+ const B2DPoint aS2R(average(aS1C, aS1R));
+ const B2DPoint aS3C(average(aS2L, aS2R));
+
+ // test left
+ bool bAngleIsSmallerLeft(bAllParallel && bLeftEqualZero);
+ if(!bAngleIsSmallerLeft)
+ {
+ const B2DVector aLeftLeft(bLeftEqualZero ? aS2L - aS1L : aS1L - rfPA); // #i72104#
+ const B2DVector aRightLeft(aS2L - aS3C);
+ const double fCurrentAngleLeft(aLeftLeft.angle(aRightLeft));
+ bAngleIsSmallerLeft = (fabs(fCurrentAngleLeft) > (F_PI - rfAngleBound));
+ }
+
+ // test right
+ bool bAngleIsSmallerRight(bAllParallel && bRightEqualZero);
+ if(!bAngleIsSmallerRight)
+ {
+ const B2DVector aLeftRight(aS2R - aS3C);
+ const B2DVector aRightRight(bRightEqualZero ? aS2R - aS1R : aS1R - rfPB); // #i72104#
+ const double fCurrentAngleRight(aLeftRight.angle(aRightRight));
+ bAngleIsSmallerRight = (fabs(fCurrentAngleRight) > (F_PI - rfAngleBound));
+ }
+
+ if(bAngleIsSmallerLeft && bAngleIsSmallerRight)
+ {
+ // no recursion necessary at all
+ nMaxRecursionDepth = 0;
+ }
+ else
+ {
+ // left
+ if(bAngleIsSmallerLeft)
+ {
+ rTarget.append(aS3C);
+ }
+ else
+ {
+ ImpSubDivAngle(rfPA, aS1L, aS2L, aS3C, rTarget, rfAngleBound, bAllowUnsharpen, nMaxRecursionDepth);
+ }
+
+ // right
+ if(bAngleIsSmallerRight)
+ {
+ rTarget.append(rfPB);
+ }
+ else
+ {
+ ImpSubDivAngle(aS3C, aS2R, aS1R, rfPB, rTarget, rfAngleBound, bAllowUnsharpen, nMaxRecursionDepth);
+ }
+ }
+ }
+
+ if(!nMaxRecursionDepth)
+ {
+ rTarget.append(rfPB);
+ }
+ }
+
+ void ImpSubDivDistance(
+ const B2DPoint& rfPA, // start point
+ const B2DPoint& rfEA, // edge on A
+ const B2DPoint& rfEB, // edge on B
+ const B2DPoint& rfPB, // end point
+ B2DPolygon& rTarget, // target polygon
+ double fDistanceBound2, // quadratic distance criteria
+ double fLastDistanceError2, // the last quadratic distance error
+ sal_uInt16 nMaxRecursionDepth) // endless loop protection
+ {
+ if(nMaxRecursionDepth)
+ {
+ // decide if another recursion is needed. If not, set
+ // nMaxRecursionDepth to zero
+
+ // Perform bezier flatness test (lecture notes from R. Schaback,
+ // Mathematics of Computer-Aided Design, Uni Goettingen, 2000)
+ //
+ // ||P(t) - L(t)|| <= max ||b_j - b_0 - j/n(b_n - b_0)||
+ // 0<=j<=n
+ //
+ // What is calculated here is an upper bound to the distance from
+ // a line through b_0 and b_3 (rfPA and P4 in our notation) and the
+ // curve. We can drop 0 and n from the running indices, since the
+ // argument of max becomes zero for those cases.
+ const double fJ1x(rfEA.getX() - rfPA.getX() - 1.0/3.0*(rfPB.getX() - rfPA.getX()));
+ const double fJ1y(rfEA.getY() - rfPA.getY() - 1.0/3.0*(rfPB.getY() - rfPA.getY()));
+ const double fJ2x(rfEB.getX() - rfPA.getX() - 2.0/3.0*(rfPB.getX() - rfPA.getX()));
+ const double fJ2y(rfEB.getY() - rfPA.getY() - 2.0/3.0*(rfPB.getY() - rfPA.getY()));
+ const double fDistanceError2(::std::max(fJ1x*fJ1x + fJ1y*fJ1y, fJ2x*fJ2x + fJ2y*fJ2y));
+
+ // stop if error measure does not improve anymore. This is a
+ // safety guard against floating point inaccuracies.
+ // stop if distance from line is guaranteed to be bounded by d
+ const bool bFurtherDivision(fLastDistanceError2 > fDistanceError2 && fDistanceError2 >= fDistanceBound2);
+
+ if(bFurtherDivision)
+ {
+ // remember last error value
+ fLastDistanceError2 = fDistanceError2;
+ }
+ else
+ {
+ // stop recustion
+ nMaxRecursionDepth = 0;
+ }
+ }
+
+ if(nMaxRecursionDepth)
+ {
+ // divide at 0.5
+ const B2DPoint aS1L(average(rfPA, rfEA));
+ const B2DPoint aS1C(average(rfEA, rfEB));
+ const B2DPoint aS1R(average(rfEB, rfPB));
+ const B2DPoint aS2L(average(aS1L, aS1C));
+ const B2DPoint aS2R(average(aS1C, aS1R));
+ const B2DPoint aS3C(average(aS2L, aS2R));
+
+ // left recursion
+ ImpSubDivDistance(rfPA, aS1L, aS2L, aS3C, rTarget, fDistanceBound2, fLastDistanceError2, nMaxRecursionDepth - 1);
+
+ // right recursion
+ ImpSubDivDistance(aS3C, aS2R, aS1R, rfPB, rTarget, fDistanceBound2, fLastDistanceError2, nMaxRecursionDepth - 1);
+ }
+ else
+ {
+ rTarget.append(rfPB);
+ }
+ }
+ } // end of anonymous namespace
+} // end of namespace basegfx
+
+//////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+ B2DCubicBezier::B2DCubicBezier(const B2DCubicBezier& rBezier)
+ : maStartPoint(rBezier.maStartPoint),
+ maEndPoint(rBezier.maEndPoint),
+ maControlPointA(rBezier.maControlPointA),
+ maControlPointB(rBezier.maControlPointB)
+ {
+ }
+
+ B2DCubicBezier::B2DCubicBezier()
+ {
+ }
+
+ B2DCubicBezier::B2DCubicBezier(const B2DPoint& rStart, const B2DPoint& rEnd)
+ : maStartPoint(rStart),
+ maEndPoint(rEnd),
+ maControlPointA(rStart),
+ maControlPointB(rEnd)
+ {
+ }
+
+ B2DCubicBezier::B2DCubicBezier(const B2DPoint& rStart, const B2DPoint& rControlPointA, const B2DPoint& rControlPointB, const B2DPoint& rEnd)
+ : maStartPoint(rStart),
+ maEndPoint(rEnd),
+ maControlPointA(rControlPointA),
+ maControlPointB(rControlPointB)
+ {
+ }
+
+ B2DCubicBezier::~B2DCubicBezier()
+ {
+ }
+
+ // assignment operator
+ B2DCubicBezier& B2DCubicBezier::operator=(const B2DCubicBezier& rBezier)
+ {
+ maStartPoint = rBezier.maStartPoint;
+ maEndPoint = rBezier.maEndPoint;
+ maControlPointA = rBezier.maControlPointA;
+ maControlPointB = rBezier.maControlPointB;
+
+ return *this;
+ }
+
+ // compare operators
+ bool B2DCubicBezier::operator==(const B2DCubicBezier& rBezier) const
+ {
+ return (
+ maStartPoint == rBezier.maStartPoint
+ && maEndPoint == rBezier.maEndPoint
+ && maControlPointA == rBezier.maControlPointA
+ && maControlPointB == rBezier.maControlPointB
+ );
+ }
+
+ bool B2DCubicBezier::operator!=(const B2DCubicBezier& rBezier) const
+ {
+ return (
+ maStartPoint != rBezier.maStartPoint
+ || maEndPoint != rBezier.maEndPoint
+ || maControlPointA != rBezier.maControlPointA
+ || maControlPointB != rBezier.maControlPointB
+ );
+ }
+
+ bool B2DCubicBezier::equal(const B2DCubicBezier& rBezier) const
+ {
+ return (
+ maStartPoint.equal(rBezier.maStartPoint)
+ && maEndPoint.equal(rBezier.maEndPoint)
+ && maControlPointA.equal(rBezier.maControlPointA)
+ && maControlPointB.equal(rBezier.maControlPointB)
+ );
+ }
+
+ // test if vectors are used
+ bool B2DCubicBezier::isBezier() const
+ {
+ if(maControlPointA != maStartPoint || maControlPointB != maEndPoint)
+ {
+ return true;
+ }
+
+ return false;
+ }
+
+ void B2DCubicBezier::testAndSolveTrivialBezier()
+ {
+ if(maControlPointA != maStartPoint || maControlPointB != maEndPoint)
+ {
+ const B2DVector aEdge(maEndPoint - maStartPoint);
+
+ // controls parallel to edge can be trivial. No edge -> not parallel -> control can
+ // still not be trivial (e.g. ballon loop)
+ if(!aEdge.equalZero())
+ {
+ // get control vectors
+ const B2DVector aVecA(maControlPointA - maStartPoint);
+ const B2DVector aVecB(maControlPointB - maEndPoint);
+
+ // check if trivial per se
+ bool bAIsTrivial(aVecA.equalZero());
+ bool bBIsTrivial(aVecB.equalZero());
+
+ // #i102241# prepare inverse edge length to normalize cross values;
+ // else the small compare value used in fTools::equalZero
+ // will be length dependent and this detection will work as less
+ // precise as longer the edge is. In principle, the length of the control
+ // vector would need to be used too, but to be trivial it is assumed to
+ // be of roughly equal length to the edge, so edge length can be used
+ // for both. Only needed when one of both is not trivial per se.
+ const double fInverseEdgeLength(bAIsTrivial && bBIsTrivial
+ ? 1.0
+ : 1.0 / aEdge.getLength());
+
+ // if A is not zero, check if it could be
+ if(!bAIsTrivial)
+ {
+ // #i102241# parallel to edge? Check aVecA, aEdge. Use cross() which does what
+ // we need here with the precision we need
+ const double fCross(aVecA.cross(aEdge) * fInverseEdgeLength);
+
+ if(fTools::equalZero(fCross))
+ {
+ // get scale to edge. Use bigger distance for numeric quality
+ const double fScale(fabs(aEdge.getX()) > fabs(aEdge.getY())
+ ? aVecA.getX() / aEdge.getX()
+ : aVecA.getY() / aEdge.getY());
+
+ // relative end point of vector in edge range?
+ if(fTools::moreOrEqual(fScale, 0.0) && fTools::lessOrEqual(fScale, 1.0))
+ {
+ bAIsTrivial = true;
+ }
+ }
+ }
+
+ // if B is not zero, check if it could be, but only if A is already trivial;
+ // else solve to trivial will not be possible for whole edge
+ if(bAIsTrivial && !bBIsTrivial)
+ {
+ // parallel to edge? Check aVecB, aEdge
+ const double fCross(aVecB.cross(aEdge) * fInverseEdgeLength);
+
+ if(fTools::equalZero(fCross))
+ {
+ // get scale to edge. Use bigger distance for numeric quality
+ const double fScale(fabs(aEdge.getX()) > fabs(aEdge.getY())
+ ? aVecB.getX() / aEdge.getX()
+ : aVecB.getY() / aEdge.getY());
+
+ // end point of vector in edge range? Caution: controlB is directed AGAINST edge
+ if(fTools::lessOrEqual(fScale, 0.0) && fTools::moreOrEqual(fScale, -1.0))
+ {
+ bBIsTrivial = true;
+ }
+ }
+ }
+
+ // if both are/can be reduced, do it.
+ // Not possible if only one is/can be reduced (!)
+ if(bAIsTrivial && bBIsTrivial)
+ {
+ maControlPointA = maStartPoint;
+ maControlPointB = maEndPoint;
+ }
+ }
+ }
+ }
+
+ namespace {
+ double impGetLength(const B2DCubicBezier& rEdge, double fDeviation, sal_uInt32 nRecursionWatch)
+ {
+ const double fEdgeLength(rEdge.getEdgeLength());
+ const double fControlPolygonLength(rEdge.getControlPolygonLength());
+ const double fCurrentDeviation(fTools::equalZero(fControlPolygonLength) ? 0.0 : 1.0 - (fEdgeLength / fControlPolygonLength));
+
+ if(!nRecursionWatch || fTools:: lessOrEqual(fCurrentDeviation, fDeviation))
+ {
+ return (fEdgeLength + fControlPolygonLength) * 0.5;
+ }
+ else
+ {
+ B2DCubicBezier aLeft, aRight;
+ const double fNewDeviation(fDeviation * 0.5);
+ const sal_uInt32 nNewRecursionWatch(nRecursionWatch - 1);
+
+ rEdge.split(0.5, &aLeft, &aRight);
+
+ return impGetLength(aLeft, fNewDeviation, nNewRecursionWatch)
+ + impGetLength(aRight, fNewDeviation, nNewRecursionWatch);
+ }
+ }
+ }
+
+ double B2DCubicBezier::getLength(double fDeviation) const
+ {
+ if(isBezier())
+ {
+ if(fDeviation < 0.00000001)
+ {
+ fDeviation = 0.00000001;
+ }
+
+ return impGetLength(*this, fDeviation, 6);
+ }
+ else
+ {
+ return B2DVector(getEndPoint() - getStartPoint()).getLength();
+ }
+ }
+
+ double B2DCubicBezier::getEdgeLength() const
+ {
+ const B2DVector aEdge(maEndPoint - maStartPoint);
+ return aEdge.getLength();
+ }
+
+ double B2DCubicBezier::getControlPolygonLength() const
+ {
+ const B2DVector aVectorA(maControlPointA - maStartPoint);
+ const B2DVector aVectorB(maEndPoint - maControlPointB);
+
+ if(!aVectorA.equalZero() || !aVectorB.equalZero())
+ {
+ const B2DVector aTop(maControlPointB - maControlPointA);
+ return (aVectorA.getLength() + aVectorB.getLength() + aTop.getLength());
+ }
+ else
+ {
+ return getEdgeLength();
+ }
+ }
+
+ void B2DCubicBezier::adaptiveSubdivideByAngle(B2DPolygon& rTarget, double fAngleBound, bool bAllowUnsharpen) const
+ {
+ if(isBezier())
+ {
+ // use support method #i37443# and allow unsharpen the criteria
+ ImpSubDivAngleStart(maStartPoint, maControlPointA, maControlPointB, maEndPoint, rTarget, fAngleBound * F_PI180, bAllowUnsharpen);
+ }
+ else
+ {
+ rTarget.append(getEndPoint());
+ }
+ }
+
+ B2DVector B2DCubicBezier::getTangent(double t) const
+ {
+ if(fTools::lessOrEqual(t, 0.0))
+ {
+ // tangent in start point
+ B2DVector aTangent(getControlPointA() - getStartPoint());
+
+ if(!aTangent.equalZero())
+ {
+ return aTangent;
+ }
+
+ // start point and control vector are the same, fallback
+ // to implicit start vector to control point B
+ aTangent = (getControlPointB() - getStartPoint()) * 0.3;
+
+ if(!aTangent.equalZero())
+ {
+ return aTangent;
+ }
+
+ // not a bezier at all, return edge vector
+ return (getEndPoint() - getStartPoint()) * 0.3;
+ }
+ else if(fTools::moreOrEqual(t, 1.0))
+ {
+ // tangent in end point
+ B2DVector aTangent(getEndPoint() - getControlPointB());
+
+ if(!aTangent.equalZero())
+ {
+ return aTangent;
+ }
+
+ // end point and control vector are the same, fallback
+ // to implicit start vector from control point A
+ aTangent = (getEndPoint() - getControlPointA()) * 0.3;
+
+ if(!aTangent.equalZero())
+ {
+ return aTangent;
+ }
+
+ // not a bezier at all, return edge vector
+ return (getEndPoint() - getStartPoint()) * 0.3;
+ }
+ else
+ {
+ // t is in ]0.0 .. 1.0[. Split and extract
+ B2DCubicBezier aRight;
+ split(t, 0, &aRight);
+
+ return aRight.getControlPointA() - aRight.getStartPoint();
+ }
+ }
+
+ // #i37443# adaptive subdivide by nCount subdivisions
+ void B2DCubicBezier::adaptiveSubdivideByCount(B2DPolygon& rTarget, sal_uInt32 nCount) const
+ {
+ const double fLenFact(1.0 / static_cast< double >(nCount + 1));
+
+ for(sal_uInt32 a(1); a <= nCount; a++)
+ {
+ const double fPos(static_cast< double >(a) * fLenFact);
+ rTarget.append(interpolatePoint(fPos));
+ }
+
+ rTarget.append(getEndPoint());
+ }
+
+ // adaptive subdivide by distance
+ void B2DCubicBezier::adaptiveSubdivideByDistance(B2DPolygon& rTarget, double fDistanceBound) const
+ {
+ if(isBezier())
+ {
+ ImpSubDivDistance(maStartPoint, maControlPointA, maControlPointB, maEndPoint, rTarget,
+ fDistanceBound * fDistanceBound, ::std::numeric_limits<double>::max(), 30);
+ }
+ else
+ {
+ rTarget.append(getEndPoint());
+ }
+ }
+
+ B2DPoint B2DCubicBezier::interpolatePoint(double t) const
+ {
+ OSL_ENSURE(t >= 0.0 && t <= 1.0, "B2DCubicBezier::interpolatePoint: Access out of range (!)");
+
+ if(isBezier())
+ {
+ const B2DPoint aS1L(interpolate(maStartPoint, maControlPointA, t));
+ const B2DPoint aS1C(interpolate(maControlPointA, maControlPointB, t));
+ const B2DPoint aS1R(interpolate(maControlPointB, maEndPoint, t));
+ const B2DPoint aS2L(interpolate(aS1L, aS1C, t));
+ const B2DPoint aS2R(interpolate(aS1C, aS1R, t));
+
+ return interpolate(aS2L, aS2R, t);
+ }
+ else
+ {
+ return interpolate(maStartPoint, maEndPoint, t);
+ }
+ }
+
+ double B2DCubicBezier::getSmallestDistancePointToBezierSegment(const B2DPoint& rTestPoint, double& rCut) const
+ {
+ const sal_uInt32 nInitialDivisions(3L);
+ B2DPolygon aInitialPolygon;
+
+ // as start make a fix division, creates nInitialDivisions + 2L points
+ aInitialPolygon.append(getStartPoint());
+ adaptiveSubdivideByCount(aInitialPolygon, nInitialDivisions);
+
+ // now look for the closest point
+ const sal_uInt32 nPointCount(aInitialPolygon.count());
+ B2DVector aVector(rTestPoint - aInitialPolygon.getB2DPoint(0L));
+ double fQuadDist(aVector.getX() * aVector.getX() + aVector.getY() * aVector.getY());
+ double fNewQuadDist;
+ sal_uInt32 nSmallestIndex(0L);
+
+ for(sal_uInt32 a(1L); a < nPointCount; a++)
+ {
+ aVector = B2DVector(rTestPoint - aInitialPolygon.getB2DPoint(a));
+ fNewQuadDist = aVector.getX() * aVector.getX() + aVector.getY() * aVector.getY();
+
+ if(fNewQuadDist < fQuadDist)
+ {
+ fQuadDist = fNewQuadDist;
+ nSmallestIndex = a;
+ }
+ }
+
+ // look right and left for even smaller distances
+ double fStepValue(1.0 / (double)((nPointCount - 1L) * 2L)); // half the edge step width
+ double fPosition((double)nSmallestIndex / (double)(nPointCount - 1L));
+ bool bDone(false);
+
+ while(!bDone)
+ {
+ if(!bDone)
+ {
+ // test left
+ double fPosLeft(fPosition - fStepValue);
+
+ if(fPosLeft < 0.0)
+ {
+ fPosLeft = 0.0;
+ aVector = B2DVector(rTestPoint - maStartPoint);
+ }
+ else
+ {
+ aVector = B2DVector(rTestPoint - interpolatePoint(fPosLeft));
+ }
+
+ fNewQuadDist = aVector.getX() * aVector.getX() + aVector.getY() * aVector.getY();
+
+ if(fTools::less(fNewQuadDist, fQuadDist))
+ {
+ fQuadDist = fNewQuadDist;
+ fPosition = fPosLeft;
+ }
+ else
+ {
+ // test right
+ double fPosRight(fPosition + fStepValue);
+
+ if(fPosRight > 1.0)
+ {
+ fPosRight = 1.0;
+ aVector = B2DVector(rTestPoint - maEndPoint);
+ }
+ else
+ {
+ aVector = B2DVector(rTestPoint - interpolatePoint(fPosRight));
+ }
+
+ fNewQuadDist = aVector.getX() * aVector.getX() + aVector.getY() * aVector.getY();
+
+ if(fTools::less(fNewQuadDist, fQuadDist))
+ {
+ fQuadDist = fNewQuadDist;
+ fPosition = fPosRight;
+ }
+ else
+ {
+ // not less left or right, done
+ bDone = true;
+ }
+ }
+ }
+
+ if(0.0 == fPosition || 1.0 == fPosition)
+ {
+ // if we are completely left or right, we are done
+ bDone = true;
+ }
+
+ if(!bDone)
+ {
+ // prepare next step value
+ fStepValue /= 2.0;
+ }
+ }
+
+ rCut = fPosition;
+ return sqrt(fQuadDist);
+ }
+
+ void B2DCubicBezier::split(double t, B2DCubicBezier* pBezierA, B2DCubicBezier* pBezierB) const
+ {
+ OSL_ENSURE(t >= 0.0 && t <= 1.0, "B2DCubicBezier::split: Access out of range (!)");
+
+ if(!pBezierA && !pBezierB)
+ {
+ return;
+ }
+
+ if(isBezier())
+ {
+ const B2DPoint aS1L(interpolate(maStartPoint, maControlPointA, t));
+ const B2DPoint aS1C(interpolate(maControlPointA, maControlPointB, t));
+ const B2DPoint aS1R(interpolate(maControlPointB, maEndPoint, t));
+ const B2DPoint aS2L(interpolate(aS1L, aS1C, t));
+ const B2DPoint aS2R(interpolate(aS1C, aS1R, t));
+ const B2DPoint aS3C(interpolate(aS2L, aS2R, t));
+
+ if(pBezierA)
+ {
+ pBezierA->setStartPoint(maStartPoint);
+ pBezierA->setEndPoint(aS3C);
+ pBezierA->setControlPointA(aS1L);
+ pBezierA->setControlPointB(aS2L);
+ }
+
+ if(pBezierB)
+ {
+ pBezierB->setStartPoint(aS3C);
+ pBezierB->setEndPoint(maEndPoint);
+ pBezierB->setControlPointA(aS2R);
+ pBezierB->setControlPointB(aS1R);
+ }
+ }
+ else
+ {
+ const B2DPoint aSplit(interpolate(maStartPoint, maEndPoint, t));
+
+ if(pBezierA)
+ {
+ pBezierA->setStartPoint(maStartPoint);
+ pBezierA->setEndPoint(aSplit);
+ pBezierA->setControlPointA(maStartPoint);
+ pBezierA->setControlPointB(aSplit);
+ }
+
+ if(pBezierB)
+ {
+ pBezierB->setStartPoint(aSplit);
+ pBezierB->setEndPoint(maEndPoint);
+ pBezierB->setControlPointA(aSplit);
+ pBezierB->setControlPointB(maEndPoint);
+ }
+ }
+ }
+
+ B2DCubicBezier B2DCubicBezier::snippet(double fStart, double fEnd) const
+ {
+ B2DCubicBezier aRetval;
+
+ if(fTools::more(fStart, 1.0))
+ {
+ fStart = 1.0;
+ }
+ else if(fTools::less(fStart, 0.0))
+ {
+ fStart = 0.0;
+ }
+
+ if(fTools::more(fEnd, 1.0))
+ {
+ fEnd = 1.0;
+ }
+ else if(fTools::less(fEnd, 0.0))
+ {
+ fEnd = 0.0;
+ }
+
+ if(fEnd <= fStart)
+ {
+ // empty or NULL, create single point at center
+ const double fSplit((fEnd + fStart) * 0.5);
+ const B2DPoint aPoint(interpolate(getStartPoint(), getEndPoint(), fSplit));
+ aRetval.setStartPoint(aPoint);
+ aRetval.setEndPoint(aPoint);
+ aRetval.setControlPointA(aPoint);
+ aRetval.setControlPointB(aPoint);
+ }
+ else
+ {
+ if(isBezier())
+ {
+ // copy bezier; cut off right, then cut off left. Do not forget to
+ // adapt cut value when both cuts happen
+ const bool bEndIsOne(fTools::equal(fEnd, 1.0));
+ const bool bStartIsZero(fTools::equalZero(fStart));
+ aRetval = *this;
+
+ if(!bEndIsOne)
+ {
+ aRetval.split(fEnd, &aRetval, 0);
+
+ if(!bStartIsZero)
+ {
+ fStart /= fEnd;
+ }
+ }
+
+ if(!bStartIsZero)
+ {
+ aRetval.split(fStart, 0, &aRetval);
+ }
+ }
+ else
+ {
+ // no bezier, create simple edge
+ const B2DPoint aPointA(interpolate(getStartPoint(), getEndPoint(), fStart));
+ const B2DPoint aPointB(interpolate(getStartPoint(), getEndPoint(), fEnd));
+ aRetval.setStartPoint(aPointA);
+ aRetval.setEndPoint(aPointB);
+ aRetval.setControlPointA(aPointA);
+ aRetval.setControlPointB(aPointB);
+ }
+ }
+
+ return aRetval;
+ }
+
+ B2DRange B2DCubicBezier::getRange() const
+ {
+ B2DRange aRetval(maStartPoint, maEndPoint);
+
+ aRetval.expand(maControlPointA);
+ aRetval.expand(maControlPointB);
+
+ return aRetval;
+ }
+
+ bool B2DCubicBezier::getMinimumExtremumPosition(double& rfResult) const
+ {
+ ::std::vector< double > aAllResults;
+
+ aAllResults.reserve(4);
+ getAllExtremumPositions(aAllResults);
+
+ const sal_uInt32 nCount(aAllResults.size());
+
+ if(!nCount)
+ {
+ return false;
+ }
+ else if(1 == nCount)
+ {
+ rfResult = aAllResults[0];
+ return true;
+ }
+ else
+ {
+ rfResult = *(::std::min_element(aAllResults.begin(), aAllResults.end()));
+ return true;
+ }
+ }
+
+ namespace
+ {
+ inline void impCheckExtremumResult(double fCandidate, ::std::vector< double >& rResult)
+ {
+ // check for range ]0.0 .. 1.0[ with excluding 1.0 and 0.0 clearly
+ // by using the equalZero test, NOT ::more or ::less which will use the
+ // ApproxEqual() which is too exact here
+ if(fCandidate > 0.0 && !fTools::equalZero(fCandidate))
+ {
+ if(fCandidate < 1.0 && !fTools::equalZero(fCandidate - 1.0))
+ {
+ rResult.push_back(fCandidate);
+ }
+ }
+ }
+ }
+
+ void B2DCubicBezier::getAllExtremumPositions(::std::vector< double >& rResults) const
+ {
+ rResults.clear();
+
+ // calculate the x-extrema parameters by zeroing first x-derivative
+ // of the cubic bezier's parametric formula, which results in a
+ // quadratic equation: dBezier/dt = t*t*fAX - 2*t*fBX + fCX
+ const B2DPoint aRelativeEndPoint(maEndPoint-maStartPoint);
+ const double fAX = 3 * (maControlPointA.getX() - maControlPointB.getX()) + aRelativeEndPoint.getX();
+ const double fBX = 2 * maControlPointA.getX() - maControlPointB.getX() - maStartPoint.getX();
+ double fCX(maControlPointA.getX() - maStartPoint.getX());
+
+ if(fTools::equalZero(fCX))
+ {
+ // detect fCX equal zero and truncate to real zero value in that case
+ fCX = 0.0;
+ }
+
+ if( !fTools::equalZero(fAX) )
+ {
+ // derivative is polynomial of order 2 => use binomial formula
+ const double fD = fBX*fBX - fAX*fCX;
+ if( fD >= 0.0 )
+ {
+ const double fS = sqrt(fD);
+ // same as above but for very small fAX and/or fCX
+ // this has much better numerical stability
+ // see NRC chapter 5-6 (thanks THB!)
+ const double fQ = fBX + ((fBX >= 0) ? +fS : -fS);
+ impCheckExtremumResult(fQ / fAX, rResults);
+ impCheckExtremumResult(fCX / fQ, rResults);
+ }
+ }
+ else if( !fTools::equalZero(fBX) )
+ {
+ // derivative is polynomial of order 1 => one extrema
+ impCheckExtremumResult(fCX / (2 * fBX), rResults);
+ }
+
+ // calculate the y-extrema parameters by zeroing first y-derivative
+ const double fAY = 3 * (maControlPointA.getY() - maControlPointB.getY()) + aRelativeEndPoint.getY();
+ const double fBY = 2 * maControlPointA.getY() - maControlPointB.getY() - maStartPoint.getY();
+ double fCY(maControlPointA.getY() - maStartPoint.getY());
+
+ if(fTools::equalZero(fCY))
+ {
+ // detect fCY equal zero and truncate to real zero value in that case
+ fCY = 0.0;
+ }
+
+ if( !fTools::equalZero(fAY) )
+ {
+ // derivative is polynomial of order 2 => use binomial formula
+ const double fD = fBY*fBY - fAY*fCY;
+ if( fD >= 0 )
+ {
+ const double fS = sqrt(fD);
+ // same as above but for very small fAX and/or fCX
+ // this has much better numerical stability
+ // see NRC chapter 5-6 (thanks THB!)
+ const double fQ = fBY + ((fBY >= 0) ? +fS : -fS);
+ impCheckExtremumResult(fQ / fAY, rResults);
+ impCheckExtremumResult(fCY / fQ, rResults);
+ }
+ }
+ else if( !fTools::equalZero(fBY) )
+ {
+ // derivative is polynomial of order 1 => one extrema
+ impCheckExtremumResult(fCY / (2 * fBY), rResults);
+ }
+ }
+
+ int B2DCubicBezier::getMaxDistancePositions( double pResult[2]) const
+ {
+ // the distance from the bezier to a line through start and end
+ // is proportional to (ENDx-STARTx,ENDy-STARTy)*(+BEZIERy(t),-BEZIERx(t))
+ // this distance becomes zero for at least t==0 and t==1
+ // its extrema that are between 0..1 are interesting as split candidates
+ // its derived function has the form dD/dt = fA*t^2 + 2*fB*t + fC
+ const B2DPoint aRelativeEndPoint(maEndPoint-maStartPoint);
+ const double fA = 3 * (maEndPoint.getX() - maControlPointB.getX()) * aRelativeEndPoint.getY()
+ - 3 * (maEndPoint.getY() - maControlPointB.getY()) * aRelativeEndPoint.getX();
+ const double fB = (maControlPointB.getX() - maControlPointA.getX()) * aRelativeEndPoint.getY()
+ - (maControlPointB.getY() - maControlPointA.getY()) * aRelativeEndPoint.getX();
+ const double fC = (maControlPointA.getX() - maStartPoint.getX()) * aRelativeEndPoint.getY()
+ - (maControlPointA.getY() - maStartPoint.getY()) * aRelativeEndPoint.getX();
+
+ // test for degenerated case: non-cubic curve
+ if( fTools::equalZero(fA) )
+ {
+ // test for degenerated case: straight line
+ if( fTools::equalZero(fB) )
+ return 0;
+
+ // degenerated case: quadratic bezier
+ pResult[0] = -fC / (2*fB);
+
+ // test root: ignore it when it is outside the curve
+ int nCount = ((pResult[0] > 0) && (pResult[0] < 1));
+ return nCount;
+ }
+
+ // derivative is polynomial of order 2
+ // check if the polynomial has non-imaginary roots
+ const double fD = fB*fB - fA*fC;
+ if( fD >= 0.0 ) // TODO: is this test needed? geometrically not IMHO
+ {
+ // calculate the first root
+ const double fS = sqrt(fD);
+ const double fQ = fB + ((fB >= 0) ? +fS : -fS);
+ pResult[0] = fQ / fA;
+ // test root: ignore it when it is outside the curve
+ int nCount = ((pResult[0] > 0) && (pResult[0] < 1));
+
+ // ignore multiplicit roots
+ if( !fTools::equalZero(fD) )
+ {
+ // calculate the second root
+ const double fRoot = fC / fQ;
+ pResult[ nCount ] = fC / fQ;
+ // test root: ignore it when it is outside the curve
+ nCount += ((fRoot > 0) && (fRoot < 1));
+ }
+
+ return nCount;
+ }
+
+ return 0;
+ }
+
+} // end of namespace basegfx
+
+// eof
diff --git a/basegfx/source/curve/b2dquadraticbezier.cxx b/basegfx/source/curve/b2dquadraticbezier.cxx
new file mode 100644
index 000000000000..6afba95e52c1
--- /dev/null
+++ b/basegfx/source/curve/b2dquadraticbezier.cxx
@@ -0,0 +1,105 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basegfx.hxx"
+#include <basegfx/curve/b2dquadraticbezier.hxx>
+#include <basegfx/numeric/ftools.hxx>
+
+//////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+ B2DQuadraticBezier::B2DQuadraticBezier(const B2DQuadraticBezier& rBezier)
+ : maStartPoint(rBezier.maStartPoint),
+ maEndPoint(rBezier.maEndPoint),
+ maControlPoint(rBezier.maControlPoint)
+ {
+ }
+
+ B2DQuadraticBezier::B2DQuadraticBezier()
+ {
+ }
+
+ B2DQuadraticBezier::B2DQuadraticBezier(const ::basegfx::B2DPoint& rStart, const ::basegfx::B2DPoint& rEnd)
+ : maStartPoint(rStart),
+ maEndPoint(rEnd)
+ {
+ }
+
+ B2DQuadraticBezier::B2DQuadraticBezier(const ::basegfx::B2DPoint& rStart, const ::basegfx::B2DPoint& rControl, const ::basegfx::B2DPoint& rEnd)
+ : maStartPoint(rStart),
+ maEndPoint(rEnd),
+ maControlPoint(rControl)
+ {
+ }
+
+ B2DQuadraticBezier::~B2DQuadraticBezier()
+ {
+ }
+
+ // assignment operator
+ B2DQuadraticBezier& B2DQuadraticBezier::operator=(const B2DQuadraticBezier& rBezier)
+ {
+ maStartPoint = rBezier.maStartPoint;
+ maEndPoint = rBezier.maEndPoint;
+ maControlPoint = rBezier.maControlPoint;
+
+ return *this;
+ }
+
+ // compare operators
+ bool B2DQuadraticBezier::operator==(const B2DQuadraticBezier& rBezier) const
+ {
+ return (
+ maStartPoint == rBezier.maStartPoint
+ && maEndPoint == rBezier.maEndPoint
+ && maControlPoint == rBezier.maControlPoint
+ );
+ }
+
+ bool B2DQuadraticBezier::operator!=(const B2DQuadraticBezier& rBezier) const
+ {
+ return (
+ maStartPoint != rBezier.maStartPoint
+ || maEndPoint != rBezier.maEndPoint
+ || maControlPoint != rBezier.maControlPoint
+ );
+ }
+
+ // test if control vector is used
+ bool B2DQuadraticBezier::isBezier() const
+ {
+ // if control vector is empty, bezier is not used
+ if(maControlPoint == maStartPoint || maControlPoint == maEndPoint)
+ return false;
+
+ return true;
+ }
+} // end of namespace basegfx
+
+// eof
diff --git a/basegfx/source/curve/makefile.mk b/basegfx/source/curve/makefile.mk
new file mode 100644
index 000000000000..88190cfdfe1a
--- /dev/null
+++ b/basegfx/source/curve/makefile.mk
@@ -0,0 +1,49 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..$/..
+PRJNAME=basegfx
+TARGET=curve
+
+#UNOUCRRDB=$(SOLARBINDIR)$/applicat.rdb
+ENABLE_EXCEPTIONS=FALSE
+#USE_DEFFILE=TRUE
+
+# --- Settings ----------------------------------
+
+.INCLUDE : settings.mk
+
+# --- Files -------------------------------------
+
+SLOFILES= \
+ $(SLO)$/b2dcubicbezier.obj \
+ $(SLO)$/b2dquadraticbezier.obj \
+ $(SLO)$/b2dbeziertools.obj
+
+# --- Targets ----------------------------------
+
+.INCLUDE : target.mk
diff --git a/basegfx/source/inc/PolygonPoint.hxx b/basegfx/source/inc/PolygonPoint.hxx
new file mode 100644
index 000000000000..49b9cd19758b
--- /dev/null
+++ b/basegfx/source/inc/PolygonPoint.hxx
@@ -0,0 +1,538 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _POLYGON_POINT_HXX
+#define _POLYGON_POINT_HXX
+
+#include <vector>
+
+//////////////////////////////////////////////////////////////////////////////
+
+template < class Point > class SimplePointEntry
+{
+ Point maPoint;
+
+public:
+ SimplePointEntry()
+ : maPoint(Point::getEmptyPoint())
+ {
+ }
+
+ SimplePointEntry(const Point& rInitPoint)
+ : maPoint(rInitPoint)
+ {
+ }
+
+ const Point& getPoint() const
+ {
+ return maPoint;
+ }
+
+ void setPoint(const Point& rValue)
+ {
+ maPoint = rValue;
+ }
+
+ bool operator==(const SimplePointEntry& rEntry) const
+ {
+ return (maPoint == rEntry.maPoint);
+ }
+};
+
+//////////////////////////////////////////////////////////////////////////////
+
+template < class Vector > class SimpleBezierEntry
+{
+ Vector maBackward;
+ Vector maForward;
+
+public:
+ SimpleBezierEntry()
+ : maBackward(Vector::getEmptyVector()),
+ maForward(Vector::getEmptyVector())
+ {
+ }
+
+ SimpleBezierEntry(const Vector& rInitBackward, const Vector& rInitForward)
+ : maBackward(rInitBackward),
+ maForward(rInitForward)
+ {
+ }
+
+ const Vector& getBackwardVector() const
+ {
+ return maBackward;
+ }
+
+ void setBackwardVector(const Vector& rValue)
+ {
+ maBackward = rValue;
+ }
+
+ const Vector& getForwardVector() const
+ {
+ return maForward;
+ }
+
+ void setForwardVector(const Vector& rValue)
+ {
+ maForward = rValue;
+ }
+
+ bool isBezierNeeded()
+ {
+ if(maBackward != Vector::getEmptyVector() || maForward != Vector::getEmptyVector())
+ return true;
+ return false;
+ }
+
+ bool operator==(const SimpleBezierEntry& rEntry) const
+ {
+ return ((maBackward == rEntry.maBackward) && (maForward == rEntry.maForward));
+ }
+
+ void doInvertForFlip()
+ {
+ maBackward = -maBackward;
+ maForward = -maForward;
+ }
+};
+
+//////////////////////////////////////////////////////////////////////////////
+
+template < class Point, class Vector > class PolygonPointList
+{
+ typedef SimplePointEntry< Point > LocalSimplePointEntry;
+ typedef SimpleBezierEntry< Vector > LocalSimpleBezierEntry;
+ typedef ::std::vector< LocalSimplePointEntry > SimplePointVector;
+ typedef ::std::vector< LocalSimpleBezierEntry > SimpleBezierVector;
+
+ sal_uInt32 mnBezierCount;
+ SimplePointVector maPoints;
+ SimpleBezierVector* mpVectors;
+
+ unsigned mbIsClosed : 1;
+
+ void implTryToReduceToPointVector()
+ {
+ if(!mnBezierCount && mpVectors)
+ {
+ delete mpVectors;
+ mpVectors = 0L;
+ }
+ }
+
+public:
+ bool isBezier() const
+ {
+ return bool(mnBezierCount);
+ }
+
+ bool isClosed() const
+ {
+ return bool(mbIsClosed);
+ }
+
+ void setClosed(bool bNew)
+ {
+ mbIsClosed = bNew;
+ }
+
+ sal_uInt32 count() const
+ {
+ return maPoints.size();
+ }
+
+ PolygonPointList()
+ : mnBezierCount(0L),
+ mpVectors(0L),
+ mbIsClosed(false)
+ {
+ // complete initialization with defaults
+ }
+
+ PolygonPointList(const PolygonPointList& rSource)
+ : mnBezierCount(0L),
+ maPoints(rSource.maPoints),
+ mpVectors(0L),
+ mbIsClosed(rSource.mbIsClosed)
+ {
+ // complete initialization using copy
+ if(rSource.mpVectors && rSource.mnBezierCount)
+ {
+ mpVectors = new SimpleBezierVector(*rSource.mpVectors);
+ mnBezierCount = rSource.mnBezierCount;
+ }
+ }
+
+ PolygonPointList(const PolygonPointList& rSource, sal_uInt32 nIndex, sal_uInt32 nCount)
+ : mnBezierCount(0L),
+ maPoints(nCount),
+ mpVectors(0L),
+ mbIsClosed(rSource.mbIsClosed)
+ {
+ // complete initialization using partly copy
+ if(nCount)
+ {
+ // copy point data
+ {
+ SimplePointVector::const_iterator aStart(rSource.maPoints.begin());
+ aStart += nIndex;
+ SimplePointVector::const_iterator aEnd(aStart);
+ aEnd += nCount;
+ maPoints.insert(0L, aStart, aEnd);
+ }
+
+ // copy bezier data
+ if(rSource.mpVectors && rSource.mnBezierCount)
+ {
+ mpVectors = new SimpleBezierVector();
+ mpVectors->reserve(nCount);
+
+ SimpleBezierVector::iterator aStart(mpVectors->begin());
+ aStart += nIndex;
+ SimpleBezierVector::iterator aEnd(aStart);
+ aEnd += nCount;
+
+ for( ; aStart != aEnd; ++aStart )
+ {
+ if(aStart->IsBezierNeeded())
+ {
+ mnBezierCount++;
+ }
+
+ mpVectors->push_back(*aStart);
+ }
+
+ // maybe vectors are not needed anymore, try to reduce memory footprint
+ implTryToReduceToPointVector();
+ }
+ }
+ }
+
+ ~PolygonPointList()
+ {
+ if(mpVectors)
+ {
+ delete mpVectors;
+ }
+ }
+
+ bool isEqual(const PolygonPointList& rPointList) const
+ {
+ // same point count?
+ if(maPoints.size() != rPointList.maPoints.size())
+ return false;
+
+ // if zero points the polys are equal
+ if(!maPoints.size())
+ return true;
+
+ // if bezier count used it needs to be equal
+ if(mnBezierCount != rPointList.mnBezierCount)
+ return false;
+
+ // compare point content
+ if(maPoints != rPointList.maPoints)
+ return false;
+
+ // beziercounts are equal: if it's zero, we are done
+ if(!mnBezierCount)
+ return true;
+
+ // beziercounts are equal and not zero; compare them
+ OSL_ENSURE(0L != mpVectors, "Error: Bezier list needs to exist here(!)");
+ OSL_ENSURE(0L != rPointList.mpVectors, "Error: Bezier list needs to exist here(!)");
+
+ return (*mpVectors == *rPointList.mpVectors);
+ }
+
+ const Point& getPoint(sal_uInt32 nIndex) const
+ {
+ return maPoints[nIndex].getPoint();
+ }
+
+ void setPoint(sal_uInt32 nIndex, const Point& rValue)
+ {
+ maPoints[nIndex].setPoint(rValue);
+ }
+
+ const Vector& getBackwardVector(sal_uInt32 nIndex) const
+ {
+ if(mpVectors)
+ return ((*mpVectors)[nIndex]).getBackwardVector();
+ else
+ return Vector::getEmptyVector();
+ }
+
+ void setBackwardVector(sal_uInt32 nIndex, const Vector& rValue)
+ {
+ if(mpVectors)
+ {
+ LocalSimpleBezierEntry& rDest = (*mpVectors)[nIndex];
+ bool bBezierNeededBefore(rDest.isBezierNeeded());
+ ((*mpVectors)[nIndex]).setBackwardVector(rValue);
+ bool bBezierNeededAfter(rDest.isBezierNeeded());
+
+ if(bBezierNeededBefore != bBezierNeededAfter)
+ {
+ if(bBezierNeededAfter)
+ mnBezierCount++;
+ else
+ mnBezierCount--;
+ }
+ }
+ else
+ {
+ bool bEmptyVector(rValue == Vector::getEmptyVector());
+
+ if(bEmptyVector)
+ return;
+
+ mpVectors = new SimpleBezierVector(maPoints.size());
+ ((*mpVectors)[nIndex]).setBackwardVector(rValue);
+ mnBezierCount++;
+ }
+ }
+
+ const Vector& getForwardVector(sal_uInt32 nIndex) const
+ {
+ if(mpVectors)
+ return ((*mpVectors)[nIndex]).getForwardVector();
+ else
+ return Vector::getEmptyVector();
+ }
+
+ void setForwardVector(sal_uInt32 nIndex, const Vector& rValue)
+ {
+ if(mpVectors)
+ {
+ LocalSimpleBezierEntry& rDest = (*mpVectors)[nIndex];
+ bool bBezierNeededBefore(rDest.isBezierNeeded());
+ ((*mpVectors)[nIndex]).setForwardVector(rValue);
+ bool bBezierNeededAfter(rDest.isBezierNeeded());
+
+ if(bBezierNeededBefore != bBezierNeededAfter)
+ {
+ if(bBezierNeededAfter)
+ mnBezierCount++;
+ else
+ mnBezierCount--;
+ }
+ }
+ else
+ {
+ bool bEmptyVector(rValue == Vector::getEmptyVector());
+
+ if(bEmptyVector)
+ return;
+
+ mpVectors = new SimpleBezierVector(maPoints.size());
+ ((*mpVectors)[nIndex]).setForwardVector(rValue);
+ mnBezierCount++;
+ }
+ }
+
+ void insert(sal_uInt32 nIndex, const Point& rPoint, sal_uInt32 nCount)
+ {
+ if(nCount)
+ {
+ // maybe vectors are not needed anymore, try to reduce memory footprint
+ implTryToReduceToPointVector();
+
+ // add nCount copies of rPoint
+ {
+ LocalSimplePointEntry aNode(rPoint);
+ SimplePointVector::iterator aIndex(maPoints.begin());
+ aIndex += nIndex;
+ maPoints.insert(aIndex, nCount, aNode);
+ }
+
+ // add nCount empty entries to keep indices synchronized
+ if(mpVectors)
+ {
+ LocalSimpleBezierEntry aNode;
+ SimpleBezierVector::iterator aIndex(mpVectors->begin());
+ aIndex += nIndex;
+ mpVectors->insert(aIndex, nCount, aNode);
+ }
+ }
+ }
+
+ void insert(sal_uInt32 nIndex, const PolygonPointList& rSource)
+ {
+ const sal_uInt32 nCount(rSource.maPoints.size());
+
+ if(nCount)
+ {
+ // instert point data
+ {
+ SimplePointVector::iterator aIndex(maPoints.begin());
+ aIndex += nIndex;
+
+ SimplePointVector::const_iterator aStart(rSource.maPoints.begin());
+ SimplePointVector::const_iterator aEnd(rSource.maPoints.end());
+
+ maPoints.insert(aIndex, aStart, aEnd);
+ }
+
+ // insert bezier data
+ if(rSource.mpVectors && rSource.mnBezierCount)
+ {
+ SimpleBezierVector::iterator aIndex(mpVectors->begin());
+ aIndex += nIndex;
+
+ SimpleBezierVector::iterator aStart(rSource.mpVectors->begin());
+ SimpleBezierVector::iterator aEnd(rSource.mpVectors->end());
+
+ if(!mpVectors)
+ {
+ mpVectors = new SimpleBezierVector(maPoints.size() - nCount);
+ }
+
+ mpVectors->insert(aIndex, aStart, aEnd);
+
+ mnBezierCount += rSource.mnBezierCount;
+ }
+ else
+ {
+ // maybe vectors are not needed anymore, try to reduce memory footprint
+ implTryToReduceToPointVector();
+
+ // add nCount empty entries to keep indices synchronized
+ if(mpVectors)
+ {
+ LocalSimpleBezierEntry aNode;
+ SimpleBezierVector::iterator aIndex(mpVectors->begin());
+ aIndex += nIndex;
+ mpVectors->insert(aIndex, nCount, aNode);
+ }
+ }
+ }
+ }
+
+ void remove(sal_uInt32 nIndex, sal_uInt32 nCount)
+ {
+ if(nCount)
+ {
+ // maybe vectors are not needed anymore, try to reduce memory footprint
+ implTryToReduceToPointVector();
+
+ // remove point data
+ {
+ SimplePointVector::iterator aStart(maPoints.begin());
+ aStart += nIndex;
+ const SimplePointVector::iterator aEnd(aStart + nCount);
+
+ maPoints.erase(aStart, aEnd);
+ }
+
+ // remove bezier data
+ if(mpVectors)
+ {
+ SimpleBezierVector::iterator aStart(mpVectors->begin());
+ aStart += nIndex;
+ const SimpleBezierVector::iterator aEnd(aStart + nCount);
+
+ // take care for correct mnBezierCount BEFORE erase
+ if(mnBezierCount)
+ {
+ SimpleBezierVector::iterator aTestIter(aStart);
+
+ for( ; mnBezierCount && aTestIter != aEnd; ++aTestIter)
+ {
+ if(aTestIter->isBezierNeeded())
+ mnBezierCount--;
+ }
+ }
+
+ if(mnBezierCount)
+ {
+ // erase nodes
+ mpVectors->erase(aStart, aEnd);
+ }
+ else
+ {
+ // try to reduce, maybe 0L == mnBezierCount
+ implTryToReduceToPointVector();
+ }
+ }
+ }
+ }
+
+ void flip()
+ {
+ if(maPoints.size() > 1)
+ {
+ // maybe vectors are not needed anymore, try to reduce memory footprint
+ implTryToReduceToPointVector();
+
+ // calculate half size
+ const sal_uInt32 nHalfSize(maPoints.size() >> 1L);
+
+ // flip point data
+ {
+ SimplePointVector::iterator aStart(maPoints.begin());
+ SimplePointVector::iterator aEnd(maPoints.end());
+
+ for(sal_uInt32 a(0); a < nHalfSize; a++)
+ {
+ LocalSimplePointEntry aTemp = *aStart;
+ *aStart++ = *aEnd;
+ *aEnd-- = aTemp;
+ }
+ }
+
+ // flip bezier data
+ if(mpVectors)
+ {
+ SimpleBezierVector::iterator aStart(mpVectors->begin());
+ SimpleBezierVector::iterator aEnd(mpVectors->end());
+
+ for(sal_uInt32 a(0); a < nHalfSize; a++)
+ {
+ LocalSimpleBezierEntry aTemp = *aStart;
+ aTemp.doInvertForFlip();
+ *aStart = *aEnd;
+ aStart->doInvertForFlip();
+ aStart++;
+ *aEnd-- = aTemp;
+ }
+
+ // also flip vectors of middle point (if existing)
+ if(maPoints.size() % 2)
+ {
+ (*mpVectors)[nHalfSize].doInvertForFlip();
+ }
+ }
+ }
+ }
+};
+
+//////////////////////////////////////////////////////////////////////////////
+
+#endif _POLYGON_POINT_HXX
diff --git a/basegfx/source/inc/hommatrixtemplate.hxx b/basegfx/source/inc/hommatrixtemplate.hxx
new file mode 100644
index 000000000000..fe58ed260291
--- /dev/null
+++ b/basegfx/source/inc/hommatrixtemplate.hxx
@@ -0,0 +1,613 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _HOMMATRIX_TEMPLATE_HXX
+#define _HOMMATRIX_TEMPLATE_HXX
+
+#include <sal/types.h>
+#include <basegfx/numeric/ftools.hxx>
+#include <math.h>
+#include <string.h>
+
+namespace basegfx
+{
+ namespace internal
+ {
+
+ inline double implGetDefaultValue(sal_uInt16 nRow, sal_uInt16 nColumn)
+ {
+ if(nRow == nColumn)
+ return 1.0;
+ return 0.0;
+ }
+
+ template < unsigned int _RowSize > class ImplMatLine
+ {
+ enum { RowSize = _RowSize };
+
+ double mfValue[RowSize];
+
+ public:
+ ImplMatLine()
+ {
+ }
+
+ ImplMatLine(sal_uInt16 nRow, ImplMatLine< RowSize >* pToBeCopied = 0L)
+ {
+ if(pToBeCopied)
+ {
+ memcpy(&mfValue, pToBeCopied, sizeof(double) * RowSize);
+ }
+ else
+ {
+ for(sal_uInt16 a(0); a < RowSize; a++)
+ {
+ mfValue[a] = implGetDefaultValue(nRow, a);
+ }
+ }
+ }
+
+ double get(sal_uInt16 nColumn) const
+ {
+ return mfValue[nColumn];
+ }
+
+ void set(sal_uInt16 nColumn, const double& rValue)
+ {
+ mfValue[nColumn] = rValue;
+ }
+ };
+
+ template < unsigned int _RowSize > class ImplHomMatrixTemplate
+ {
+ enum { RowSize = _RowSize };
+
+ ImplMatLine< RowSize > maLine[RowSize - 1];
+ ImplMatLine< RowSize >* mpLine;
+
+ public:
+ // Is last line used?
+ bool isLastLineDefault() const
+ {
+ if(!mpLine)
+ return true;
+
+ for(sal_uInt16 a(0); a < RowSize; a++)
+ {
+ const double fDefault(implGetDefaultValue((RowSize - 1), a));
+ const double fLineValue(mpLine->get(a));
+
+ if(!::basegfx::fTools::equal(fDefault, fLineValue))
+ {
+ return false;
+ }
+ }
+
+ // reset last line, it equals default
+ delete ((ImplHomMatrixTemplate< RowSize >*)this)->mpLine;
+ ((ImplHomMatrixTemplate< RowSize >*)this)->mpLine = 0L;
+
+ return true;
+ }
+
+ ImplHomMatrixTemplate()
+ : mpLine(0L)
+ {
+ // complete initialization with identity matrix, all lines
+ // were initialized with a trailing 1 followed by 0's.
+ for(sal_uInt16 a(0); a < RowSize-1; a++)
+ {
+ for(sal_uInt16 b(0); b < RowSize; b++)
+ maLine[a].set(b, implGetDefaultValue(a, b) );
+ }
+ }
+
+ ImplHomMatrixTemplate(const ImplHomMatrixTemplate& rToBeCopied)
+ : mpLine(0L)
+ {
+ // complete initialization using copy
+ for(sal_uInt16 a(0); a < (RowSize - 1); a++)
+ {
+ memcpy(&maLine[a], &rToBeCopied.maLine[a], sizeof(ImplMatLine< RowSize >));
+ }
+
+ if(rToBeCopied.mpLine)
+ {
+ mpLine = new ImplMatLine< RowSize >((RowSize - 1), rToBeCopied.mpLine);
+ }
+ }
+
+ ~ImplHomMatrixTemplate()
+ {
+ if(mpLine)
+ {
+ delete mpLine;
+ }
+ }
+
+ sal_uInt16 getEdgeLength() const { return RowSize; }
+
+ double get(sal_uInt16 nRow, sal_uInt16 nColumn) const
+ {
+ if(nRow < (RowSize - 1))
+ {
+ return maLine[nRow].get(nColumn);
+ }
+
+ if(mpLine)
+ {
+ return mpLine->get(nColumn);
+ }
+
+ return implGetDefaultValue((RowSize - 1), nColumn);
+ }
+
+ void set(sal_uInt16 nRow, sal_uInt16 nColumn, const double& rValue)
+ {
+ if(nRow < (RowSize - 1))
+ {
+ maLine[nRow].set(nColumn, rValue);
+ }
+ else if(mpLine)
+ {
+ mpLine->set(nColumn, rValue);
+ }
+ else
+ {
+ const double fDefault(implGetDefaultValue((RowSize - 1), nColumn));
+
+ if(!::basegfx::fTools::equal(fDefault, rValue))
+ {
+ mpLine = new ImplMatLine< RowSize >((RowSize - 1), 0L);
+ mpLine->set(nColumn, rValue);
+ }
+ }
+ }
+
+ void testLastLine()
+ {
+ if(mpLine)
+ {
+ bool bNecessary(false);
+
+ for(sal_uInt16 a(0);!bNecessary && a < RowSize; a++)
+ {
+ const double fDefault(implGetDefaultValue((RowSize - 1), a));
+ const double fLineValue(mpLine->get(a));
+
+ if(!::basegfx::fTools::equal(fDefault, fLineValue))
+ {
+ bNecessary = true;
+ }
+ }
+
+ if(!bNecessary)
+ {
+ delete mpLine;
+ mpLine = 0L;
+ }
+ }
+ }
+
+ // Left-upper decompositon
+ bool ludcmp(sal_uInt16 nIndex[], sal_Int16& nParity)
+ {
+ double fBig, fSum, fDum;
+ double fStorage[RowSize];
+ sal_uInt16 a, b, c;
+
+ // #i30874# Initialize nAMax (compiler warns)
+ sal_uInt16 nAMax = 0;
+
+ nParity = 1;
+
+ // Calc the max of each line. If a line is empty,
+ // stop immediately since matrix is not invertible then.
+ for(a = 0; a < RowSize; a++)
+ {
+ fBig = 0.0;
+
+ for(b = 0; b < RowSize; b++)
+ {
+ double fTemp(fabs(get(a, b)));
+
+ if(::basegfx::fTools::more(fTemp, fBig))
+ {
+ fBig = fTemp;
+ }
+ }
+
+ if(::basegfx::fTools::equalZero(fBig))
+ {
+ return false;
+ }
+
+ fStorage[a] = 1.0 / fBig;
+ }
+
+ // start normalizing
+ for(b = 0; b < RowSize; b++)
+ {
+ for(a = 0; a < b; a++)
+ {
+ fSum = get(a, b);
+
+ for(c = 0; c < a; c++)
+ {
+ fSum -= get(a, c) * get(c, b);
+ }
+
+ set(a, b, fSum);
+ }
+
+ fBig = 0.0;
+
+ for(a = b; a < RowSize; a++)
+ {
+ fSum = get(a, b);
+
+ for(c = 0; c < b; c++)
+ {
+ fSum -= get(a, c) * get(c, b);
+ }
+
+ set(a, b, fSum);
+ fDum = fStorage[a] * fabs(fSum);
+
+ if(::basegfx::fTools::moreOrEqual(fDum, fBig))
+ {
+ fBig = fDum;
+ nAMax = a;
+ }
+ }
+
+ if(b != nAMax)
+ {
+ for(c = 0; c < RowSize; c++)
+ {
+ fDum = get(nAMax, c);
+ set(nAMax, c, get(b, c));
+ set(b, c, fDum);
+ }
+
+ nParity = -nParity;
+ fStorage[nAMax] = fStorage[b];
+ }
+
+ nIndex[b] = nAMax;
+
+ // here the failure of precision occurs
+ const double fValBB(fabs(get(b, b)));
+
+ if(::basegfx::fTools::equalZero(fValBB))
+ {
+ return false;
+ }
+
+ if(b != (RowSize - 1))
+ {
+ fDum = 1.0 / get(b, b);
+
+ for(a = b + 1; a < RowSize; a++)
+ {
+ set(a, b, get(a, b) * fDum);
+ }
+ }
+ }
+
+ return true;
+ }
+
+ void lubksb(const sal_uInt16 nIndex[], double fRow[]) const
+ {
+ sal_uInt16 b, ip;
+ sal_Int16 a, a2 = -1;
+ double fSum;
+
+ for(a = 0; a < RowSize; a++)
+ {
+ ip = nIndex[a];
+ fSum = fRow[ip];
+ fRow[ip] = fRow[a];
+
+ if(a2 >= 0)
+ {
+ for(b = a2; b < a; b++)
+ {
+ fSum -= get(a, b) * fRow[b];
+ }
+ }
+ else if(!::basegfx::fTools::equalZero(fSum))
+ {
+ a2 = a;
+ }
+
+ fRow[a] = fSum;
+ }
+
+ for(a = (RowSize - 1); a >= 0; a--)
+ {
+ fSum = fRow[a];
+
+ for(b = a + 1; b < RowSize; b++)
+ {
+ fSum -= get(a, b) * fRow[b];
+ }
+
+ const double fValueAA(get(a, a));
+
+ if(!::basegfx::fTools::equalZero(fValueAA))
+ {
+ fRow[a] = fSum / get(a, a);
+ }
+ }
+ }
+
+ bool isIdentity() const
+ {
+ // last line needs no testing if not existing
+ const sal_uInt16 nMaxLine(
+ sal::static_int_cast<sal_uInt16>(mpLine ? RowSize : (RowSize - 1)) );
+
+ for(sal_uInt16 a(0); a < nMaxLine; a++)
+ {
+ for(sal_uInt16 b(0); b < RowSize; b++)
+ {
+ const double fDefault(implGetDefaultValue(a, b));
+ const double fValueAB(get(a, b));
+
+ if(!::basegfx::fTools::equal(fDefault, fValueAB))
+ {
+ return false;
+ }
+ }
+ }
+
+ return true;
+ }
+
+ bool isInvertible() const
+ {
+ ImplHomMatrixTemplate aWork(*this);
+ sal_uInt16 nIndex[RowSize];
+ sal_Int16 nParity;
+
+ return aWork.ludcmp(nIndex, nParity);
+ }
+
+ bool isNormalized() const
+ {
+ if(!mpLine)
+ return true;
+
+ const double fHomValue(get((RowSize - 1), (RowSize - 1)));
+
+ if(::basegfx::fTools::equalZero(fHomValue))
+ {
+ return true;
+ }
+
+ const double fOne(1.0);
+
+ if(::basegfx::fTools::equal(fOne, fHomValue))
+ {
+ return true;
+ }
+
+ return false;
+ }
+
+ void doInvert(const ImplHomMatrixTemplate& rWork, const sal_uInt16 nIndex[])
+ {
+ double fArray[RowSize];
+
+ for(sal_uInt16 a(0); a < RowSize; a++)
+ {
+ // prepare line
+ sal_uInt16 b;
+ for( b = 0; b < RowSize; b++)
+ {
+ fArray[b] = implGetDefaultValue(a, b);
+ }
+
+ // expand line
+ rWork.lubksb(nIndex, fArray);
+
+ // copy line transposed to this matrix
+ for( b = 0; b < RowSize; b++)
+ {
+ set(b, a, fArray[b]);
+ }
+ }
+
+ // evtl. get rid of last matrix line
+ testLastLine();
+ }
+
+ void doNormalize()
+ {
+ if(mpLine)
+ {
+ const double fHomValue(get((RowSize - 1), (RowSize - 1)));
+
+ for(sal_uInt16 a(0); a < RowSize; a++)
+ {
+ for(sal_uInt16 b(0); b < RowSize; b++)
+ {
+ set(a, b, get(a, b) / fHomValue);
+ }
+ }
+
+ // evtl. get rid of last matrix line
+ testLastLine();
+ }
+ }
+
+ double doDeterminant() const
+ {
+ ImplHomMatrixTemplate aWork(*this);
+ sal_uInt16 nIndex[RowSize];
+ sal_Int16 nParity;
+ double fRetval(0.0);
+
+ if(aWork.ludcmp(nIndex, nParity))
+ {
+ fRetval = (double)nParity;
+
+ // last line needs no multiply if not existing; default value would be 1.
+ const sal_uInt16 nMaxLine(
+ sal::static_int_cast<sal_uInt16>(aWork.mpLine ? RowSize : (RowSize - 1)) );
+
+ for(sal_uInt16 a(0); a < nMaxLine; a++)
+ {
+ fRetval *= aWork.get(a, a);
+ }
+ }
+
+ return fRetval;
+ }
+
+ double doTrace() const
+ {
+ double fTrace = (mpLine) ? 0.0 : 1.0;
+ const sal_uInt16 nMaxLine(
+ sal::static_int_cast<sal_uInt16>(mpLine ? RowSize : (RowSize - 1)) );
+
+ for(sal_uInt16 a(0); a < nMaxLine; a++)
+ {
+ fTrace += get(a, a);
+ }
+
+ return fTrace;
+ }
+
+ void doTranspose()
+ {
+ for(sal_uInt16 a(0); a < (RowSize - 1); a++)
+ {
+ for(sal_uInt16 b(a + 1); b < RowSize; b++)
+ {
+ const double fTemp(get(a, b));
+ set(a, b, get(b, a));
+ set(b, a, fTemp);
+ }
+ }
+
+ testLastLine();
+ }
+
+ void doAddMatrix(const ImplHomMatrixTemplate& rMat)
+ {
+ for(sal_uInt16 a(0); a < RowSize; a++)
+ {
+ for(sal_uInt16 b(0); b < RowSize; b++)
+ {
+ set(a, b, get(a, b) + rMat.get(a, b));
+ }
+ }
+
+ testLastLine();
+ }
+
+ void doSubMatrix(const ImplHomMatrixTemplate& rMat)
+ {
+ for(sal_uInt16 a(0); a < RowSize; a++)
+ {
+ for(sal_uInt16 b(0); b < RowSize; b++)
+ {
+ set(a, b, get(a, b) - rMat.get(a, b));
+ }
+ }
+
+ testLastLine();
+ }
+
+ void doMulMatrix(const double& rfValue)
+ {
+ for(sal_uInt16 a(0); a < RowSize; a++)
+ {
+ for(sal_uInt16 b(0); b < RowSize; b++)
+ {
+ set(a, b, get(a, b) * rfValue);
+ }
+ }
+
+ testLastLine();
+ }
+
+ void doMulMatrix(const ImplHomMatrixTemplate& rMat)
+ {
+ // create a copy as source for the original values
+ const ImplHomMatrixTemplate aCopy(*this);
+
+ // TODO: maybe optimize cases where last line is [0 0 1].
+
+ double fValue(0.0);
+
+ for(sal_uInt16 a(0); a < RowSize; ++a)
+ {
+ for(sal_uInt16 b(0); b < RowSize; ++b)
+ {
+ fValue = 0.0;
+
+ for(sal_uInt16 c(0); c < RowSize; ++c)
+ fValue += aCopy.get(c, b) * rMat.get(a, c);
+
+ set(a, b, fValue);
+ }
+ }
+
+ testLastLine();
+ }
+
+ bool isEqual(const ImplHomMatrixTemplate& rMat) const
+ {
+ const sal_uInt16 nMaxLine(
+ sal::static_int_cast<sal_uInt16>((mpLine || rMat.mpLine) ? RowSize : (RowSize - 1)) );
+
+ for(sal_uInt16 a(0); a < nMaxLine; a++)
+ {
+ for(sal_uInt16 b(0); b < RowSize; b++)
+ {
+ const double fValueA(get(a, b));
+ const double fValueB(rMat.get(a, b));
+
+ if(!::basegfx::fTools::equal(fValueA, fValueB))
+ {
+ return false;
+ }
+ }
+ }
+
+ return true;
+ }
+ };
+
+ } // namespace internal
+} // namespace basegfx
+
+#endif /* _HOMMATRIX_TEMPLATE_HXX */
diff --git a/basegfx/source/inc/polygontemplate.hxx b/basegfx/source/inc/polygontemplate.hxx
new file mode 100644
index 000000000000..9ab7fdd941bd
--- /dev/null
+++ b/basegfx/source/inc/polygontemplate.hxx
@@ -0,0 +1,538 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _POLYGON_TEMPLATE_HXX
+#define _POLYGON_TEMPLATE_HXX
+
+#include <vector>
+
+//////////////////////////////////////////////////////////////////////////////
+
+template < class Point > class ImplSimplePointEntry
+{
+ Point maPoint;
+
+public:
+ ImplSimplePointEntry()
+ : maPoint(Point::getEmptyPoint())
+ {
+ }
+
+ ImplSimplePointEntry(const Point& rInitPoint)
+ : maPoint(rInitPoint)
+ {
+ }
+
+ const Point& getPoint() const
+ {
+ return maPoint;
+ }
+
+ void setPoint(const Point& rValue)
+ {
+ maPoint = rValue;
+ }
+
+ bool operator==(const ImplSimplePointEntry& rEntry) const
+ {
+ return (maPoint == rEntry.maPoint);
+ }
+};
+
+//////////////////////////////////////////////////////////////////////////////
+
+template < class Vector > class ImplSimpleBezierEntry
+{
+ Vector maBackward;
+ Vector maForward;
+
+public:
+ ImplSimpleBezierEntry()
+ : maBackward(Vector::getEmptyVector()),
+ maForward(Vector::getEmptyVector())
+ {
+ }
+
+ ImplSimpleBezierEntry(const Vector& rInitBackward, const Vector& rInitForward)
+ : maBackward(rInitBackward),
+ maForward(rInitForward)
+ {
+ }
+
+ const Vector& getBackwardVector() const
+ {
+ return maBackward;
+ }
+
+ void setBackwardVector(const Vector& rValue)
+ {
+ maBackward = rValue;
+ }
+
+ const Vector& getForwardVector() const
+ {
+ return maForward;
+ }
+
+ void setForwardVector(const Vector& rValue)
+ {
+ maForward = rValue;
+ }
+
+ bool isBezierNeeded()
+ {
+ if(!maBackward.equalZero() || !maForward.equalZero())
+ return true;
+ return false;
+ }
+
+ bool operator==(const ImplSimpleBezierEntry& rEntry) const
+ {
+ return ((maBackward == rEntry.maBackward) && (maForward == rEntry.maForward));
+ }
+
+ void doInvertForFlip()
+ {
+ maBackward = -maBackward;
+ maForward = -maForward;
+ }
+};
+
+//////////////////////////////////////////////////////////////////////////////
+
+template < class Point, class Vector > class ImplPolygonTemplate
+{
+ typedef ImplSimplePointEntry< Point > LocalImplSimplePointEntry;
+ typedef ImplSimpleBezierEntry< Vector > LocalImplSimpleBezierEntry;
+ typedef ::std::vector< LocalImplSimplePointEntry > SimplePointVector;
+ typedef ::std::vector< LocalImplSimpleBezierEntry > SimpleBezierVector;
+
+ sal_uInt32 mnBezierCount;
+ SimplePointVector maPoints;
+ SimpleBezierVector* mpVectors;
+
+ unsigned mbIsClosed : 1;
+
+ void implTryToReduceToPointVector()
+ {
+ if(!mnBezierCount && mpVectors)
+ {
+ delete mpVectors;
+ mpVectors = 0L;
+ }
+ }
+
+public:
+ bool isBezier() const
+ {
+ return bool(mnBezierCount);
+ }
+
+ bool isClosed() const
+ {
+ return bool(mbIsClosed);
+ }
+
+ void setClosed(bool bNew)
+ {
+ mbIsClosed = bNew;
+ }
+
+ sal_uInt32 count() const
+ {
+ return maPoints.size();
+ }
+
+ ImplPolygonTemplate()
+ : mnBezierCount(0L),
+ mpVectors(0L),
+ mbIsClosed(false)
+ {
+ // complete initialization with defaults
+ }
+
+ ImplPolygonTemplate(const ImplPolygonTemplate& rSource)
+ : mnBezierCount(0L),
+ maPoints(rSource.maPoints),
+ mpVectors(0L),
+ mbIsClosed(rSource.mbIsClosed)
+ {
+ // complete initialization using copy
+ if(rSource.mpVectors && rSource.mnBezierCount)
+ {
+ mpVectors = new SimpleBezierVector(*rSource.mpVectors);
+ mnBezierCount = rSource.mnBezierCount;
+ }
+ }
+
+ ImplPolygonTemplate(const ImplPolygonTemplate& rSource, sal_uInt32 nIndex, sal_uInt32 nCount)
+ : mnBezierCount(0L),
+ maPoints(nCount),
+ mpVectors(0L),
+ mbIsClosed(rSource.mbIsClosed)
+ {
+ // complete initialization using partly copy
+ if(nCount)
+ {
+ // copy point data
+ {
+ SimplePointVector::const_iterator aStart(rSource.maPoints.begin());
+ aStart += nIndex;
+ SimplePointVector::const_iterator aEnd(aStart);
+ aEnd += nCount;
+ maPoints.insert(0L, aStart, aEnd);
+ }
+
+ // copy bezier data
+ if(rSource.mpVectors && rSource.mnBezierCount)
+ {
+ mpVectors = new SimpleBezierVector();
+ mpVectors->reserve(nCount);
+
+ SimpleBezierVector::iterator aStart(mpVectors->begin());
+ aStart += nIndex;
+ SimpleBezierVector::iterator aEnd(aStart);
+ aEnd += nCount;
+
+ for( ; aStart != aEnd; ++aStart )
+ {
+ if(aStart->isBezierNeeded())
+ {
+ mnBezierCount++;
+ }
+
+ mpVectors->push_back(*aStart);
+ }
+
+ // maybe vectors are not needed anymore, try to reduce memory footprint
+ implTryToReduceToPointVector();
+ }
+ }
+ }
+
+ ~ImplPolygonTemplate()
+ {
+ if(mpVectors)
+ {
+ delete mpVectors;
+ }
+ }
+
+ bool isEqual(const ImplPolygonTemplate& rPointList) const
+ {
+ // same point count?
+ if(maPoints.size() != rPointList.maPoints.size())
+ return false;
+
+ // if zero points the polys are equal
+ if(!maPoints.size())
+ return true;
+
+ // if bezier count used it needs to be equal
+ if(mnBezierCount != rPointList.mnBezierCount)
+ return false;
+
+ // compare point content
+ if(maPoints != rPointList.maPoints)
+ return false;
+
+ // beziercounts are equal: if it's zero, we are done
+ if(!mnBezierCount)
+ return true;
+
+ // beziercounts are equal and not zero; compare them
+ OSL_ENSURE(0L != mpVectors, "Error: Bezier list needs to exist here(!)");
+ OSL_ENSURE(0L != rPointList.mpVectors, "Error: Bezier list needs to exist here(!)");
+
+ return (*mpVectors == *rPointList.mpVectors);
+ }
+
+ const Point& getPoint(sal_uInt32 nIndex) const
+ {
+ return maPoints[nIndex].getPoint();
+ }
+
+ void setPoint(sal_uInt32 nIndex, const Point& rValue)
+ {
+ maPoints[nIndex].setPoint(rValue);
+ }
+
+ const Vector& getBackwardVector(sal_uInt32 nIndex) const
+ {
+ if(mpVectors)
+ return ((*mpVectors)[nIndex]).getBackwardVector();
+ else
+ return Vector::getEmptyVector();
+ }
+
+ void setBackwardVector(sal_uInt32 nIndex, const Vector& rValue)
+ {
+ if(mpVectors)
+ {
+ LocalImplSimpleBezierEntry& rDest = (*mpVectors)[nIndex];
+ bool bBezierNeededBefore(rDest.isBezierNeeded());
+ ((*mpVectors)[nIndex]).setBackwardVector(rValue);
+ bool bBezierNeededAfter(rDest.isBezierNeeded());
+
+ if(bBezierNeededBefore != bBezierNeededAfter)
+ {
+ if(bBezierNeededAfter)
+ mnBezierCount++;
+ else
+ mnBezierCount--;
+ }
+ }
+ else
+ {
+ bool bEmptyVector(rValue.equalZero());
+
+ if(bEmptyVector)
+ return;
+
+ mpVectors = new SimpleBezierVector(maPoints.size());
+ ((*mpVectors)[nIndex]).setBackwardVector(rValue);
+ mnBezierCount++;
+ }
+ }
+
+ const Vector& getForwardVector(sal_uInt32 nIndex) const
+ {
+ if(mpVectors)
+ return ((*mpVectors)[nIndex]).getForwardVector();
+ else
+ return Vector::getEmptyVector();
+ }
+
+ void setForwardVector(sal_uInt32 nIndex, const Vector& rValue)
+ {
+ if(mpVectors)
+ {
+ LocalImplSimpleBezierEntry& rDest = (*mpVectors)[nIndex];
+ bool bBezierNeededBefore(rDest.isBezierNeeded());
+ ((*mpVectors)[nIndex]).setForwardVector(rValue);
+ bool bBezierNeededAfter(rDest.isBezierNeeded());
+
+ if(bBezierNeededBefore != bBezierNeededAfter)
+ {
+ if(bBezierNeededAfter)
+ mnBezierCount++;
+ else
+ mnBezierCount--;
+ }
+ }
+ else
+ {
+ bool bEmptyVector(rValue.equalZero());
+
+ if(bEmptyVector)
+ return;
+
+ mpVectors = new SimpleBezierVector(maPoints.size());
+ ((*mpVectors)[nIndex]).setForwardVector(rValue);
+ mnBezierCount++;
+ }
+ }
+
+ void insert(sal_uInt32 nIndex, const Point& rPoint, sal_uInt32 nCount)
+ {
+ if(nCount)
+ {
+ // maybe vectors are not needed anymore, try to reduce memory footprint
+ implTryToReduceToPointVector();
+
+ // add nCount copies of rPoint
+ {
+ LocalImplSimplePointEntry aNode(rPoint);
+ SimplePointVector::iterator aIndex(maPoints.begin());
+ aIndex += nIndex;
+ maPoints.insert(aIndex, nCount, aNode);
+ }
+
+ // add nCount empty entries to keep indices synchronized
+ if(mpVectors)
+ {
+ LocalImplSimpleBezierEntry aNode;
+ SimpleBezierVector::iterator aIndex(mpVectors->begin());
+ aIndex += nIndex;
+ mpVectors->insert(aIndex, nCount, aNode);
+ }
+ }
+ }
+
+ void insert(sal_uInt32 nIndex, const ImplPolygonTemplate& rSource)
+ {
+ const sal_uInt32 nCount(rSource.maPoints.size());
+
+ if(nCount)
+ {
+ // instert point data
+ {
+ SimplePointVector::iterator aIndex(maPoints.begin());
+ aIndex += nIndex;
+
+ SimplePointVector::const_iterator aStart(rSource.maPoints.begin());
+ SimplePointVector::const_iterator aEnd(rSource.maPoints.end());
+
+ maPoints.insert(aIndex, aStart, aEnd);
+ }
+
+ // insert bezier data
+ if(rSource.mpVectors && rSource.mnBezierCount)
+ {
+ SimpleBezierVector::iterator aIndex(mpVectors->begin());
+ aIndex += nIndex;
+
+ SimpleBezierVector::iterator aStart(rSource.mpVectors->begin());
+ SimpleBezierVector::iterator aEnd(rSource.mpVectors->end());
+
+ if(!mpVectors)
+ {
+ mpVectors = new SimpleBezierVector(maPoints.size() - nCount);
+ }
+
+ mpVectors->insert(aIndex, aStart, aEnd);
+
+ mnBezierCount += rSource.mnBezierCount;
+ }
+ else
+ {
+ // maybe vectors are not needed anymore, try to reduce memory footprint
+ implTryToReduceToPointVector();
+
+ // add nCount empty entries to keep indices synchronized
+ if(mpVectors)
+ {
+ LocalImplSimpleBezierEntry aNode;
+ SimpleBezierVector::iterator aIndex(mpVectors->begin());
+ aIndex += nIndex;
+ mpVectors->insert(aIndex, nCount, aNode);
+ }
+ }
+ }
+ }
+
+ void remove(sal_uInt32 nIndex, sal_uInt32 nCount)
+ {
+ if(nCount)
+ {
+ // maybe vectors are not needed anymore, try to reduce memory footprint
+ implTryToReduceToPointVector();
+
+ // remove point data
+ {
+ SimplePointVector::iterator aStart(maPoints.begin());
+ aStart += nIndex;
+ const SimplePointVector::iterator aEnd(aStart + nCount);
+
+ maPoints.erase(aStart, aEnd);
+ }
+
+ // remove bezier data
+ if(mpVectors)
+ {
+ SimpleBezierVector::iterator aStart(mpVectors->begin());
+ aStart += nIndex;
+ const SimpleBezierVector::iterator aEnd(aStart + nCount);
+
+ // take care for correct mnBezierCount BEFORE erase
+ if(mnBezierCount)
+ {
+ SimpleBezierVector::iterator aTestIter(aStart);
+
+ for( ; mnBezierCount && aTestIter != aEnd; ++aTestIter)
+ {
+ if(aTestIter->isBezierNeeded())
+ mnBezierCount--;
+ }
+ }
+
+ if(mnBezierCount)
+ {
+ // erase nodes
+ mpVectors->erase(aStart, aEnd);
+ }
+ else
+ {
+ // try to reduce, maybe 0L == mnBezierCount
+ implTryToReduceToPointVector();
+ }
+ }
+ }
+ }
+
+ void flip()
+ {
+ if(maPoints.size() > 1)
+ {
+ // maybe vectors are not needed anymore, try to reduce memory footprint
+ implTryToReduceToPointVector();
+
+ // calculate half size
+ const sal_uInt32 nHalfSize(maPoints.size() >> 1L);
+
+ // flip point data
+ {
+ SimplePointVector::iterator aStart(maPoints.begin());
+ SimplePointVector::iterator aEnd(maPoints.end());
+
+ for(sal_uInt32 a(0); a < nHalfSize; a++)
+ {
+ LocalImplSimplePointEntry aTemp = *aStart;
+ *aStart++ = *aEnd;
+ *aEnd-- = aTemp;
+ }
+ }
+
+ // flip bezier data
+ if(mpVectors)
+ {
+ SimpleBezierVector::iterator aStart(mpVectors->begin());
+ SimpleBezierVector::iterator aEnd(mpVectors->end());
+
+ for(sal_uInt32 a(0); a < nHalfSize; a++)
+ {
+ LocalImplSimpleBezierEntry aTemp = *aStart;
+ aTemp.doInvertForFlip();
+ *aStart = *aEnd;
+ aStart->doInvertForFlip();
+ aStart++;
+ *aEnd-- = aTemp;
+ }
+
+ // also flip vectors of middle point (if existing)
+ if(maPoints.size() % 2)
+ {
+ (*mpVectors)[nHalfSize].doInvertForFlip();
+ }
+ }
+ }
+ }
+};
+
+//////////////////////////////////////////////////////////////////////////////
+
+#endif _POLYGON_TEMPLATE_HXX
diff --git a/basegfx/source/matrix/b2dhommatrix.cxx b/basegfx/source/matrix/b2dhommatrix.cxx
new file mode 100644
index 000000000000..96d3bdb01c01
--- /dev/null
+++ b/basegfx/source/matrix/b2dhommatrix.cxx
@@ -0,0 +1,454 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basegfx.hxx"
+#include <osl/diagnose.h>
+#include <rtl/instance.hxx>
+#include <basegfx/matrix/b2dhommatrix.hxx>
+#include <hommatrixtemplate.hxx>
+#include <basegfx/tuple/b2dtuple.hxx>
+#include <basegfx/vector/b2dvector.hxx>
+#include <basegfx/matrix/b2dhommatrixtools.hxx>
+
+///////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+ class Impl2DHomMatrix : public ::basegfx::internal::ImplHomMatrixTemplate< 3 >
+ {
+ };
+
+ namespace { struct IdentityMatrix : public rtl::Static< B2DHomMatrix::ImplType,
+ IdentityMatrix > {}; }
+
+ B2DHomMatrix::B2DHomMatrix() :
+ mpImpl( IdentityMatrix::get() ) // use common identity matrix
+ {
+ }
+
+ B2DHomMatrix::B2DHomMatrix(const B2DHomMatrix& rMat) :
+ mpImpl(rMat.mpImpl)
+ {
+ }
+
+ B2DHomMatrix::~B2DHomMatrix()
+ {
+ }
+
+ B2DHomMatrix::B2DHomMatrix(double f_0x0, double f_0x1, double f_0x2, double f_1x0, double f_1x1, double f_1x2)
+ : mpImpl( IdentityMatrix::get() ) // use common identity matrix, will be made unique with 1st set-call
+ {
+ mpImpl->set(0, 0, f_0x0);
+ mpImpl->set(0, 1, f_0x1);
+ mpImpl->set(0, 2, f_0x2);
+ mpImpl->set(1, 0, f_1x0);
+ mpImpl->set(1, 1, f_1x1);
+ mpImpl->set(1, 2, f_1x2);
+ }
+
+ B2DHomMatrix& B2DHomMatrix::operator=(const B2DHomMatrix& rMat)
+ {
+ mpImpl = rMat.mpImpl;
+ return *this;
+ }
+
+ void B2DHomMatrix::makeUnique()
+ {
+ mpImpl.make_unique();
+ }
+
+ double B2DHomMatrix::get(sal_uInt16 nRow, sal_uInt16 nColumn) const
+ {
+ return mpImpl->get(nRow, nColumn);
+ }
+
+ void B2DHomMatrix::set(sal_uInt16 nRow, sal_uInt16 nColumn, double fValue)
+ {
+ mpImpl->set(nRow, nColumn, fValue);
+ }
+
+ void B2DHomMatrix::set3x2(double f_0x0, double f_0x1, double f_0x2, double f_1x0, double f_1x1, double f_1x2)
+ {
+ mpImpl->set(0, 0, f_0x0);
+ mpImpl->set(0, 1, f_0x1);
+ mpImpl->set(0, 2, f_0x2);
+ mpImpl->set(1, 0, f_1x0);
+ mpImpl->set(1, 1, f_1x1);
+ mpImpl->set(1, 2, f_1x2);
+ }
+
+ bool B2DHomMatrix::isLastLineDefault() const
+ {
+ return mpImpl->isLastLineDefault();
+ }
+
+ bool B2DHomMatrix::isIdentity() const
+ {
+ if(mpImpl.same_object(IdentityMatrix::get()))
+ return true;
+
+ return mpImpl->isIdentity();
+ }
+
+ void B2DHomMatrix::identity()
+ {
+ mpImpl = IdentityMatrix::get();
+ }
+
+ bool B2DHomMatrix::isInvertible() const
+ {
+ return mpImpl->isInvertible();
+ }
+
+ bool B2DHomMatrix::invert()
+ {
+ Impl2DHomMatrix aWork(*mpImpl);
+ sal_uInt16* pIndex = new sal_uInt16[mpImpl->getEdgeLength()];
+ sal_Int16 nParity;
+
+ if(aWork.ludcmp(pIndex, nParity))
+ {
+ mpImpl->doInvert(aWork, pIndex);
+ delete[] pIndex;
+
+ return true;
+ }
+
+ delete[] pIndex;
+ return false;
+ }
+
+ bool B2DHomMatrix::isNormalized() const
+ {
+ return mpImpl->isNormalized();
+ }
+
+ void B2DHomMatrix::normalize()
+ {
+ if(!const_cast<const B2DHomMatrix*>(this)->mpImpl->isNormalized())
+ mpImpl->doNormalize();
+ }
+
+ double B2DHomMatrix::determinant() const
+ {
+ return mpImpl->doDeterminant();
+ }
+
+ double B2DHomMatrix::trace() const
+ {
+ return mpImpl->doTrace();
+ }
+
+ void B2DHomMatrix::transpose()
+ {
+ mpImpl->doTranspose();
+ }
+
+ B2DHomMatrix& B2DHomMatrix::operator+=(const B2DHomMatrix& rMat)
+ {
+ mpImpl->doAddMatrix(*rMat.mpImpl);
+ return *this;
+ }
+
+ B2DHomMatrix& B2DHomMatrix::operator-=(const B2DHomMatrix& rMat)
+ {
+ mpImpl->doSubMatrix(*rMat.mpImpl);
+ return *this;
+ }
+
+ B2DHomMatrix& B2DHomMatrix::operator*=(double fValue)
+ {
+ const double fOne(1.0);
+
+ if(!fTools::equal(fOne, fValue))
+ mpImpl->doMulMatrix(fValue);
+
+ return *this;
+ }
+
+ B2DHomMatrix& B2DHomMatrix::operator/=(double fValue)
+ {
+ const double fOne(1.0);
+
+ if(!fTools::equal(fOne, fValue))
+ mpImpl->doMulMatrix(1.0 / fValue);
+
+ return *this;
+ }
+
+ B2DHomMatrix& B2DHomMatrix::operator*=(const B2DHomMatrix& rMat)
+ {
+ if(!rMat.isIdentity())
+ mpImpl->doMulMatrix(*rMat.mpImpl);
+
+ return *this;
+ }
+
+ bool B2DHomMatrix::operator==(const B2DHomMatrix& rMat) const
+ {
+ if(mpImpl.same_object(rMat.mpImpl))
+ return true;
+
+ return mpImpl->isEqual(*rMat.mpImpl);
+ }
+
+ bool B2DHomMatrix::operator!=(const B2DHomMatrix& rMat) const
+ {
+ return !(*this == rMat);
+ }
+
+ void B2DHomMatrix::rotate(double fRadiant)
+ {
+ if(!fTools::equalZero(fRadiant))
+ {
+ double fSin(0.0);
+ double fCos(1.0);
+
+ tools::createSinCosOrthogonal(fSin, fCos, fRadiant);
+ Impl2DHomMatrix aRotMat;
+
+ aRotMat.set(0, 0, fCos);
+ aRotMat.set(1, 1, fCos);
+ aRotMat.set(1, 0, fSin);
+ aRotMat.set(0, 1, -fSin);
+
+ mpImpl->doMulMatrix(aRotMat);
+ }
+ }
+
+ void B2DHomMatrix::translate(double fX, double fY)
+ {
+ if(!fTools::equalZero(fX) || !fTools::equalZero(fY))
+ {
+ Impl2DHomMatrix aTransMat;
+
+ aTransMat.set(0, 2, fX);
+ aTransMat.set(1, 2, fY);
+
+ mpImpl->doMulMatrix(aTransMat);
+ }
+ }
+
+ void B2DHomMatrix::scale(double fX, double fY)
+ {
+ const double fOne(1.0);
+
+ if(!fTools::equal(fOne, fX) || !fTools::equal(fOne, fY))
+ {
+ Impl2DHomMatrix aScaleMat;
+
+ aScaleMat.set(0, 0, fX);
+ aScaleMat.set(1, 1, fY);
+
+ mpImpl->doMulMatrix(aScaleMat);
+ }
+ }
+
+ void B2DHomMatrix::shearX(double fSx)
+ {
+ // #i76239# do not test againt 1.0, but against 0.0. We are talking about a value not on the diagonal (!)
+ if(!fTools::equalZero(fSx))
+ {
+ Impl2DHomMatrix aShearXMat;
+
+ aShearXMat.set(0, 1, fSx);
+
+ mpImpl->doMulMatrix(aShearXMat);
+ }
+ }
+
+ void B2DHomMatrix::shearY(double fSy)
+ {
+ // #i76239# do not test againt 1.0, but against 0.0. We are talking about a value not on the diagonal (!)
+ if(!fTools::equalZero(fSy))
+ {
+ Impl2DHomMatrix aShearYMat;
+
+ aShearYMat.set(1, 0, fSy);
+
+ mpImpl->doMulMatrix(aShearYMat);
+ }
+ }
+
+ /** Decomposition
+
+ New, optimized version with local shearX detection. Old version (keeping
+ below, is working well, too) used the 3D matrix decomposition when
+ shear was used. Keeping old version as comment below since it may get
+ necessary to add the determinant() test from there here, too.
+ */
+ bool B2DHomMatrix::decompose(B2DTuple& rScale, B2DTuple& rTranslate, double& rRotate, double& rShearX) const
+ {
+ // when perspective is used, decompose is not made here
+ if(!mpImpl->isLastLineDefault())
+ {
+ return false;
+ }
+
+ // reset rotate and shear and copy translation values in every case
+ rRotate = rShearX = 0.0;
+ rTranslate.setX(get(0, 2));
+ rTranslate.setY(get(1, 2));
+
+ // test for rotation and shear
+ if(fTools::equalZero(get(0, 1)) && fTools::equalZero(get(1, 0)))
+ {
+ // no rotation and shear, copy scale values
+ rScale.setX(get(0, 0));
+ rScale.setY(get(1, 1));
+ }
+ else
+ {
+ // get the unit vectors of the transformation -> the perpendicular vectors
+ B2DVector aUnitVecX(get(0, 0), get(1, 0));
+ B2DVector aUnitVecY(get(0, 1), get(1, 1));
+ const double fScalarXY(aUnitVecX.scalar(aUnitVecY));
+
+ // Test if shear is zero. That's the case if the unit vectors in the matrix
+ // are perpendicular -> scalar is zero. This is also the case when one of
+ // the unit vectors is zero.
+ if(fTools::equalZero(fScalarXY))
+ {
+ // calculate unsigned scale values
+ rScale.setX(aUnitVecX.getLength());
+ rScale.setY(aUnitVecY.getLength());
+
+ // check unit vectors for zero lengths
+ const bool bXIsZero(fTools::equalZero(rScale.getX()));
+ const bool bYIsZero(fTools::equalZero(rScale.getY()));
+
+ if(bXIsZero || bYIsZero)
+ {
+ // still extract as much as possible. Scalings are already set
+ if(!bXIsZero)
+ {
+ // get rotation of X-Axis
+ rRotate = atan2(aUnitVecX.getY(), aUnitVecX.getX());
+ }
+ else if(!bYIsZero)
+ {
+ // get rotation of X-Axis. When assuming X and Y perpendicular
+ // and correct rotation, it's the Y-Axis rotation minus 90 degrees
+ rRotate = atan2(aUnitVecY.getY(), aUnitVecY.getX()) - M_PI_2;
+ }
+
+ // one or both unit vectors do not extist, determinant is zero, no decomposition possible.
+ // Eventually used rotations or shears are lost
+ return false;
+ }
+ else
+ {
+ // no shear
+ // calculate rotation of X unit vector relative to (1, 0)
+ rRotate = atan2(aUnitVecX.getY(), aUnitVecX.getX());
+
+ // use orientation to evtl. correct sign of Y-Scale
+ const double fCrossXY(aUnitVecX.cross(aUnitVecY));
+
+ if(fCrossXY < 0.0)
+ {
+ rScale.setY(-rScale.getY());
+ }
+ }
+ }
+ else
+ {
+ // fScalarXY is not zero, thus both unit vectors exist. No need to handle that here
+ // shear, extract it
+ double fCrossXY(aUnitVecX.cross(aUnitVecY));
+
+ // get rotation by calculating angle of X unit vector relative to (1, 0).
+ // This is before the parallell test following the motto to extract
+ // as much as possible
+ rRotate = atan2(aUnitVecX.getY(), aUnitVecX.getX());
+
+ // get unsigned scale value for X. It will not change and is useful
+ // for further corrections
+ rScale.setX(aUnitVecX.getLength());
+
+ if(fTools::equalZero(fCrossXY))
+ {
+ // extract as much as possible
+ rScale.setY(aUnitVecY.getLength());
+
+ // unit vectors are parallel, thus not linear independent. No
+ // useful decomposition possible. This should not happen since
+ // the only way to get the unit vectors nearly parallell is
+ // a very big shearing. Anyways, be prepared for hand-filled
+ // matrices
+ // Eventually used rotations or shears are lost
+ return false;
+ }
+ else
+ {
+ // calculate the contained shear
+ rShearX = fScalarXY / fCrossXY;
+
+ if(!fTools::equalZero(rRotate))
+ {
+ // To be able to correct the shear for aUnitVecY, rotation needs to be
+ // removed first. Correction of aUnitVecX is easy, it will be rotated back to (1, 0).
+ aUnitVecX.setX(rScale.getX());
+ aUnitVecX.setY(0.0);
+
+ // for Y correction we rotate the UnitVecY back about -rRotate
+ const double fNegRotate(-rRotate);
+ const double fSin(sin(fNegRotate));
+ const double fCos(cos(fNegRotate));
+
+ const double fNewX(aUnitVecY.getX() * fCos - aUnitVecY.getY() * fSin);
+ const double fNewY(aUnitVecY.getX() * fSin + aUnitVecY.getY() * fCos);
+
+ aUnitVecY.setX(fNewX);
+ aUnitVecY.setY(fNewY);
+ }
+
+ // Correct aUnitVecY and fCrossXY to fShear=0. Rotation is already removed.
+ // Shear correction can only work with removed rotation
+ aUnitVecY.setX(aUnitVecY.getX() - (aUnitVecY.getY() * rShearX));
+ fCrossXY = aUnitVecX.cross(aUnitVecY);
+
+ // calculate unsigned scale value for Y, after the corrections since
+ // the shear correction WILL change the length of aUnitVecY
+ rScale.setY(aUnitVecY.getLength());
+
+ // use orientation to set sign of Y-Scale
+ if(fCrossXY < 0.0)
+ {
+ rScale.setY(-rScale.getY());
+ }
+ }
+ }
+ }
+
+ return true;
+ }
+} // end of namespace basegfx
+
+///////////////////////////////////////////////////////////////////////////////
+// eof
diff --git a/basegfx/source/matrix/b2dhommatrixtools.cxx b/basegfx/source/matrix/b2dhommatrixtools.cxx
new file mode 100644
index 000000000000..0b85ee229ecc
--- /dev/null
+++ b/basegfx/source/matrix/b2dhommatrixtools.cxx
@@ -0,0 +1,401 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basegfx.hxx"
+
+#include <basegfx/matrix/b2dhommatrixtools.hxx>
+#include <rtl/ustring.hxx>
+#include <rtl/ustrbuf.hxx>
+
+///////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+ ::rtl::OUString exportToSvg( const B2DHomMatrix& rMatrix )
+ {
+ rtl::OUStringBuffer aStrBuf;
+ aStrBuf.appendAscii("matrix(");
+
+ aStrBuf.append(rMatrix.get(0,0));
+ aStrBuf.appendAscii(", ");
+
+ aStrBuf.append(rMatrix.get(1,0));
+ aStrBuf.appendAscii(", ");
+
+ aStrBuf.append(rMatrix.get(0,1));
+ aStrBuf.appendAscii(", ");
+
+ aStrBuf.append(rMatrix.get(1,1));
+ aStrBuf.appendAscii(", ");
+
+ aStrBuf.append(rMatrix.get(0,2));
+ aStrBuf.appendAscii(", ");
+
+ aStrBuf.append(rMatrix.get(1,2));
+ aStrBuf.appendAscii(")");
+
+ return aStrBuf.makeStringAndClear();
+ }
+
+ namespace tools
+ {
+ void createSinCosOrthogonal(double& o_rSin, double& o_rCos, double fRadiant)
+ {
+ if( fTools::equalZero( fmod( fRadiant, F_PI2 ) ) )
+ {
+ // determine quadrant
+ const sal_Int32 nQuad(
+ (4 + fround( 4/F_2PI*fmod( fRadiant, F_2PI ) )) % 4 );
+ switch( nQuad )
+ {
+ case 0: // -2pi,0,2pi
+ o_rSin = 0.0;
+ o_rCos = 1.0;
+ break;
+
+ case 1: // -3/2pi,1/2pi
+ o_rSin = 1.0;
+ o_rCos = 0.0;
+ break;
+
+ case 2: // -pi,pi
+ o_rSin = 0.0;
+ o_rCos = -1.0;
+ break;
+
+ case 3: // -1/2pi,3/2pi
+ o_rSin = -1.0;
+ o_rCos = 0.0;
+ break;
+
+ default:
+ OSL_ENSURE( false, "createSinCos: Impossible case reached" );
+ }
+ }
+ else
+ {
+ // TODO(P1): Maybe use glibc's sincos here (though
+ // that's kinda non-portable...)
+ o_rSin = sin(fRadiant);
+ o_rCos = cos(fRadiant);
+ }
+ }
+
+ B2DHomMatrix createScaleB2DHomMatrix(double fScaleX, double fScaleY)
+ {
+ B2DHomMatrix aRetval;
+ const double fOne(1.0);
+
+ if(!fTools::equal(fScaleX, fOne))
+ {
+ aRetval.set(0, 0, fScaleX);
+ }
+
+ if(!fTools::equal(fScaleY, fOne))
+ {
+ aRetval.set(1, 1, fScaleY);
+ }
+
+ return aRetval;
+ }
+
+ B2DHomMatrix createShearXB2DHomMatrix(double fShearX)
+ {
+ B2DHomMatrix aRetval;
+
+ if(!fTools::equalZero(fShearX))
+ {
+ aRetval.set(0, 1, fShearX);
+ }
+
+ return aRetval;
+ }
+
+ B2DHomMatrix createShearYB2DHomMatrix(double fShearY)
+ {
+ B2DHomMatrix aRetval;
+
+ if(!fTools::equalZero(fShearY))
+ {
+ aRetval.set(1, 0, fShearY);
+ }
+
+ return aRetval;
+ }
+
+ B2DHomMatrix createRotateB2DHomMatrix(double fRadiant)
+ {
+ B2DHomMatrix aRetval;
+
+ if(!fTools::equalZero(fRadiant))
+ {
+ double fSin(0.0);
+ double fCos(1.0);
+
+ createSinCosOrthogonal(fSin, fCos, fRadiant);
+ aRetval.set(0, 0, fCos);
+ aRetval.set(1, 1, fCos);
+ aRetval.set(1, 0, fSin);
+ aRetval.set(0, 1, -fSin);
+ }
+
+ return aRetval;
+ }
+
+ B2DHomMatrix createTranslateB2DHomMatrix(double fTranslateX, double fTranslateY)
+ {
+ B2DHomMatrix aRetval;
+
+ if(!(fTools::equalZero(fTranslateX) && fTools::equalZero(fTranslateY)))
+ {
+ aRetval.set(0, 2, fTranslateX);
+ aRetval.set(1, 2, fTranslateY);
+ }
+
+ return aRetval;
+ }
+
+ B2DHomMatrix createScaleShearXRotateTranslateB2DHomMatrix(
+ double fScaleX, double fScaleY,
+ double fShearX,
+ double fRadiant,
+ double fTranslateX, double fTranslateY)
+ {
+ const double fOne(1.0);
+
+ if(fTools::equal(fScaleX, fOne) && fTools::equal(fScaleY, fOne))
+ {
+ /// no scale, take shortcut
+ return createShearXRotateTranslateB2DHomMatrix(fShearX, fRadiant, fTranslateX, fTranslateY);
+ }
+ else
+ {
+ /// scale used
+ if(fTools::equalZero(fShearX))
+ {
+ /// no shear
+ if(fTools::equalZero(fRadiant))
+ {
+ /// no rotate, take shortcut
+ return createScaleTranslateB2DHomMatrix(fScaleX, fScaleY, fTranslateX, fTranslateY);
+ }
+ else
+ {
+ /// rotate and scale used, no shear
+ double fSin(0.0);
+ double fCos(1.0);
+
+ createSinCosOrthogonal(fSin, fCos, fRadiant);
+
+ B2DHomMatrix aRetval(
+ /* Row 0, Column 0 */ fCos * fScaleX,
+ /* Row 0, Column 1 */ fScaleY * -fSin,
+ /* Row 0, Column 2 */ fTranslateX,
+ /* Row 1, Column 0 */ fSin * fScaleX,
+ /* Row 1, Column 1 */ fScaleY * fCos,
+ /* Row 1, Column 2 */ fTranslateY);
+
+ return aRetval;
+ }
+ }
+ else
+ {
+ /// scale and shear used
+ if(fTools::equalZero(fRadiant))
+ {
+ /// scale and shear, but no rotate
+ B2DHomMatrix aRetval(
+ /* Row 0, Column 0 */ fScaleX,
+ /* Row 0, Column 1 */ fScaleY * fShearX,
+ /* Row 0, Column 2 */ fTranslateX,
+ /* Row 1, Column 0 */ 0.0,
+ /* Row 1, Column 1 */ fScaleY,
+ /* Row 1, Column 2 */ fTranslateY);
+
+ return aRetval;
+ }
+ else
+ {
+ /// scale, shear and rotate used
+ double fSin(0.0);
+ double fCos(1.0);
+
+ createSinCosOrthogonal(fSin, fCos, fRadiant);
+
+ B2DHomMatrix aRetval(
+ /* Row 0, Column 0 */ fCos * fScaleX,
+ /* Row 0, Column 1 */ fScaleY * ((fCos * fShearX) - fSin),
+ /* Row 0, Column 2 */ fTranslateX,
+ /* Row 1, Column 0 */ fSin * fScaleX,
+ /* Row 1, Column 1 */ fScaleY * ((fSin * fShearX) + fCos),
+ /* Row 1, Column 2 */ fTranslateY);
+
+ return aRetval;
+ }
+ }
+ }
+ }
+
+ B2DHomMatrix createShearXRotateTranslateB2DHomMatrix(
+ double fShearX,
+ double fRadiant,
+ double fTranslateX, double fTranslateY)
+ {
+ if(fTools::equalZero(fShearX))
+ {
+ /// no shear
+ if(fTools::equalZero(fRadiant))
+ {
+ /// no shear, no rotate, take shortcut
+ return createTranslateB2DHomMatrix(fTranslateX, fTranslateY);
+ }
+ else
+ {
+ /// no shear, but rotate used
+ double fSin(0.0);
+ double fCos(1.0);
+
+ createSinCosOrthogonal(fSin, fCos, fRadiant);
+
+ B2DHomMatrix aRetval(
+ /* Row 0, Column 0 */ fCos,
+ /* Row 0, Column 1 */ -fSin,
+ /* Row 0, Column 2 */ fTranslateX,
+ /* Row 1, Column 0 */ fSin,
+ /* Row 1, Column 1 */ fCos,
+ /* Row 1, Column 2 */ fTranslateY);
+
+ return aRetval;
+ }
+ }
+ else
+ {
+ /// shear used
+ if(fTools::equalZero(fRadiant))
+ {
+ /// no rotate, but shear used
+ B2DHomMatrix aRetval(
+ /* Row 0, Column 0 */ 1.0,
+ /* Row 0, Column 1 */ fShearX,
+ /* Row 0, Column 2 */ fTranslateX,
+ /* Row 1, Column 0 */ 0.0,
+ /* Row 1, Column 1 */ 1.0,
+ /* Row 1, Column 2 */ fTranslateY);
+
+ return aRetval;
+ }
+ else
+ {
+ /// shear and rotate used
+ double fSin(0.0);
+ double fCos(1.0);
+
+ createSinCosOrthogonal(fSin, fCos, fRadiant);
+
+ B2DHomMatrix aRetval(
+ /* Row 0, Column 0 */ fCos,
+ /* Row 0, Column 1 */ (fCos * fShearX) - fSin,
+ /* Row 0, Column 2 */ fTranslateX,
+ /* Row 1, Column 0 */ fSin,
+ /* Row 1, Column 1 */ (fSin * fShearX) + fCos,
+ /* Row 1, Column 2 */ fTranslateY);
+
+ return aRetval;
+ }
+ }
+ }
+
+ B2DHomMatrix createScaleTranslateB2DHomMatrix(
+ double fScaleX, double fScaleY,
+ double fTranslateX, double fTranslateY)
+ {
+ const double fOne(1.0);
+
+ if(fTools::equal(fScaleX, fOne) && fTools::equal(fScaleY, fOne))
+ {
+ /// no scale, take shortcut
+ return createTranslateB2DHomMatrix(fTranslateX, fTranslateY);
+ }
+ else
+ {
+ /// scale used
+ if(fTools::equalZero(fTranslateX) && fTools::equalZero(fTranslateY))
+ {
+ /// no translate, but scale.
+ B2DHomMatrix aRetval;
+
+ aRetval.set(0, 0, fScaleX);
+ aRetval.set(1, 1, fScaleY);
+
+ return aRetval;
+ }
+ else
+ {
+ /// translate and scale
+ B2DHomMatrix aRetval(
+ /* Row 0, Column 0 */ fScaleX,
+ /* Row 0, Column 1 */ 0.0,
+ /* Row 0, Column 2 */ fTranslateX,
+ /* Row 1, Column 0 */ 0.0,
+ /* Row 1, Column 1 */ fScaleY,
+ /* Row 1, Column 2 */ fTranslateY);
+
+ return aRetval;
+ }
+ }
+ }
+
+ B2DHomMatrix createRotateAroundPoint(
+ double fPointX, double fPointY,
+ double fRadiant)
+ {
+ B2DHomMatrix aRetval;
+
+ if(!fTools::equalZero(fRadiant))
+ {
+ double fSin(0.0);
+ double fCos(1.0);
+
+ createSinCosOrthogonal(fSin, fCos, fRadiant);
+
+ aRetval.set3x2(
+ /* Row 0, Column 0 */ fCos,
+ /* Row 0, Column 1 */ -fSin,
+ /* Row 0, Column 2 */ (fPointX * (1.0 - fCos)) + (fSin * fPointY),
+ /* Row 1, Column 0 */ fSin,
+ /* Row 1, Column 1 */ fCos,
+ /* Row 1, Column 2 */ (fPointY * (1.0 - fCos)) - (fSin * fPointX));
+ }
+
+ return aRetval;
+ }
+ } // end of namespace tools
+} // end of namespace basegfx
+
+///////////////////////////////////////////////////////////////////////////////
+// eof
diff --git a/basegfx/source/matrix/b3dhommatrix.cxx b/basegfx/source/matrix/b3dhommatrix.cxx
new file mode 100644
index 000000000000..bc3c3b0b55dd
--- /dev/null
+++ b/basegfx/source/matrix/b3dhommatrix.cxx
@@ -0,0 +1,596 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basegfx.hxx"
+
+#include <rtl/instance.hxx>
+#include <basegfx/matrix/b3dhommatrix.hxx>
+#include <hommatrixtemplate.hxx>
+#include <basegfx/vector/b3dvector.hxx>
+
+namespace basegfx
+{
+ class Impl3DHomMatrix : public ::basegfx::internal::ImplHomMatrixTemplate< 4 >
+ {
+ };
+
+ namespace { struct IdentityMatrix : public rtl::Static< B3DHomMatrix::ImplType,
+ IdentityMatrix > {}; }
+
+ B3DHomMatrix::B3DHomMatrix() :
+ mpImpl( IdentityMatrix::get() ) // use common identity matrix
+ {
+ }
+
+ B3DHomMatrix::B3DHomMatrix(const B3DHomMatrix& rMat) :
+ mpImpl(rMat.mpImpl)
+ {
+ }
+
+ B3DHomMatrix::~B3DHomMatrix()
+ {
+ }
+
+ B3DHomMatrix& B3DHomMatrix::operator=(const B3DHomMatrix& rMat)
+ {
+ mpImpl = rMat.mpImpl;
+ return *this;
+ }
+
+ void B3DHomMatrix::makeUnique()
+ {
+ mpImpl.make_unique();
+ }
+
+ double B3DHomMatrix::get(sal_uInt16 nRow, sal_uInt16 nColumn) const
+ {
+ return mpImpl->get(nRow, nColumn);
+ }
+
+ void B3DHomMatrix::set(sal_uInt16 nRow, sal_uInt16 nColumn, double fValue)
+ {
+ mpImpl->set(nRow, nColumn, fValue);
+ }
+
+ bool B3DHomMatrix::isLastLineDefault() const
+ {
+ return mpImpl->isLastLineDefault();
+ }
+
+ bool B3DHomMatrix::isIdentity() const
+ {
+ if(mpImpl.same_object(IdentityMatrix::get()))
+ return true;
+
+ return mpImpl->isIdentity();
+ }
+
+ void B3DHomMatrix::identity()
+ {
+ mpImpl = IdentityMatrix::get();
+ }
+
+ bool B3DHomMatrix::isInvertible() const
+ {
+ return mpImpl->isInvertible();
+ }
+
+ bool B3DHomMatrix::invert()
+ {
+ Impl3DHomMatrix aWork(*mpImpl);
+ sal_uInt16* pIndex = new sal_uInt16[mpImpl->getEdgeLength()];
+ sal_Int16 nParity;
+
+ if(aWork.ludcmp(pIndex, nParity))
+ {
+ mpImpl->doInvert(aWork, pIndex);
+ delete[] pIndex;
+
+ return true;
+ }
+
+ delete[] pIndex;
+ return false;
+ }
+
+ bool B3DHomMatrix::isNormalized() const
+ {
+ return mpImpl->isNormalized();
+ }
+
+ void B3DHomMatrix::normalize()
+ {
+ if(!const_cast<const B3DHomMatrix*>(this)->mpImpl->isNormalized())
+ mpImpl->doNormalize();
+ }
+
+ double B3DHomMatrix::determinant() const
+ {
+ return mpImpl->doDeterminant();
+ }
+
+ double B3DHomMatrix::trace() const
+ {
+ return mpImpl->doTrace();
+ }
+
+ void B3DHomMatrix::transpose()
+ {
+ mpImpl->doTranspose();
+ }
+
+ B3DHomMatrix& B3DHomMatrix::operator+=(const B3DHomMatrix& rMat)
+ {
+ mpImpl->doAddMatrix(*rMat.mpImpl);
+ return *this;
+ }
+
+ B3DHomMatrix& B3DHomMatrix::operator-=(const B3DHomMatrix& rMat)
+ {
+ mpImpl->doSubMatrix(*rMat.mpImpl);
+ return *this;
+ }
+
+ B3DHomMatrix& B3DHomMatrix::operator*=(double fValue)
+ {
+ const double fOne(1.0);
+
+ if(!fTools::equal(fOne, fValue))
+ mpImpl->doMulMatrix(fValue);
+
+ return *this;
+ }
+
+ B3DHomMatrix& B3DHomMatrix::operator/=(double fValue)
+ {
+ const double fOne(1.0);
+
+ if(!fTools::equal(fOne, fValue))
+ mpImpl->doMulMatrix(1.0 / fValue);
+
+ return *this;
+ }
+
+ B3DHomMatrix& B3DHomMatrix::operator*=(const B3DHomMatrix& rMat)
+ {
+ if(!rMat.isIdentity())
+ mpImpl->doMulMatrix(*rMat.mpImpl);
+
+ return *this;
+ }
+
+ bool B3DHomMatrix::operator==(const B3DHomMatrix& rMat) const
+ {
+ if(mpImpl.same_object(rMat.mpImpl))
+ return true;
+
+ return mpImpl->isEqual(*rMat.mpImpl);
+ }
+
+ bool B3DHomMatrix::operator!=(const B3DHomMatrix& rMat) const
+ {
+ return !(*this == rMat);
+ }
+
+ void B3DHomMatrix::rotate(double fAngleX,double fAngleY,double fAngleZ)
+ {
+ if(!fTools::equalZero(fAngleX) || !fTools::equalZero(fAngleY) || !fTools::equalZero(fAngleZ))
+ {
+ if(!fTools::equalZero(fAngleX))
+ {
+ Impl3DHomMatrix aRotMatX;
+ double fSin(sin(fAngleX));
+ double fCos(cos(fAngleX));
+
+ aRotMatX.set(1, 1, fCos);
+ aRotMatX.set(2, 2, fCos);
+ aRotMatX.set(2, 1, fSin);
+ aRotMatX.set(1, 2, -fSin);
+
+ mpImpl->doMulMatrix(aRotMatX);
+ }
+
+ if(!fTools::equalZero(fAngleY))
+ {
+ Impl3DHomMatrix aRotMatY;
+ double fSin(sin(fAngleY));
+ double fCos(cos(fAngleY));
+
+ aRotMatY.set(0, 0, fCos);
+ aRotMatY.set(2, 2, fCos);
+ aRotMatY.set(0, 2, fSin);
+ aRotMatY.set(2, 0, -fSin);
+
+ mpImpl->doMulMatrix(aRotMatY);
+ }
+
+ if(!fTools::equalZero(fAngleZ))
+ {
+ Impl3DHomMatrix aRotMatZ;
+ double fSin(sin(fAngleZ));
+ double fCos(cos(fAngleZ));
+
+ aRotMatZ.set(0, 0, fCos);
+ aRotMatZ.set(1, 1, fCos);
+ aRotMatZ.set(1, 0, fSin);
+ aRotMatZ.set(0, 1, -fSin);
+
+ mpImpl->doMulMatrix(aRotMatZ);
+ }
+ }
+ }
+
+ void B3DHomMatrix::translate(double fX, double fY, double fZ)
+ {
+ if(!fTools::equalZero(fX) || !fTools::equalZero(fY) || !fTools::equalZero(fZ))
+ {
+ Impl3DHomMatrix aTransMat;
+
+ aTransMat.set(0, 3, fX);
+ aTransMat.set(1, 3, fY);
+ aTransMat.set(2, 3, fZ);
+
+ mpImpl->doMulMatrix(aTransMat);
+ }
+ }
+
+ void B3DHomMatrix::scale(double fX, double fY, double fZ)
+ {
+ const double fOne(1.0);
+
+ if(!fTools::equal(fOne, fX) || !fTools::equal(fOne, fY) ||!fTools::equal(fOne, fZ))
+ {
+ Impl3DHomMatrix aScaleMat;
+
+ aScaleMat.set(0, 0, fX);
+ aScaleMat.set(1, 1, fY);
+ aScaleMat.set(2, 2, fZ);
+
+ mpImpl->doMulMatrix(aScaleMat);
+ }
+ }
+
+ void B3DHomMatrix::shearXY(double fSx, double fSy)
+ {
+ // #i76239# do not test againt 1.0, but against 0.0. We are talking about a value not on the diagonal (!)
+ if(!fTools::equalZero(fSx) || !fTools::equalZero(fSy))
+ {
+ Impl3DHomMatrix aShearXYMat;
+
+ aShearXYMat.set(0, 2, fSx);
+ aShearXYMat.set(1, 2, fSy);
+
+ mpImpl->doMulMatrix(aShearXYMat);
+ }
+ }
+
+ void B3DHomMatrix::shearYZ(double fSy, double fSz)
+ {
+ // #i76239# do not test againt 1.0, but against 0.0. We are talking about a value not on the diagonal (!)
+ if(!fTools::equalZero(fSy) || !fTools::equalZero(fSz))
+ {
+ Impl3DHomMatrix aShearYZMat;
+
+ aShearYZMat.set(1, 0, fSy);
+ aShearYZMat.set(2, 0, fSz);
+
+ mpImpl->doMulMatrix(aShearYZMat);
+ }
+ }
+
+ void B3DHomMatrix::shearXZ(double fSx, double fSz)
+ {
+ // #i76239# do not test againt 1.0, but against 0.0. We are talking about a value not on the diagonal (!)
+ if(!fTools::equalZero(fSx) || !fTools::equalZero(fSz))
+ {
+ Impl3DHomMatrix aShearXZMat;
+
+ aShearXZMat.set(0, 1, fSx);
+ aShearXZMat.set(2, 1, fSz);
+
+ mpImpl->doMulMatrix(aShearXZMat);
+ }
+ }
+
+ void B3DHomMatrix::frustum(double fLeft, double fRight, double fBottom, double fTop, double fNear, double fFar)
+ {
+ const double fZero(0.0);
+ const double fOne(1.0);
+
+ if(!fTools::more(fNear, fZero))
+ {
+ fNear = 0.001;
+ }
+
+ if(!fTools::more(fFar, fZero))
+ {
+ fFar = fOne;
+ }
+
+ if(fTools::equal(fNear, fFar))
+ {
+ fFar = fNear + fOne;
+ }
+
+ if(fTools::equal(fLeft, fRight))
+ {
+ fLeft -= fOne;
+ fRight += fOne;
+ }
+
+ if(fTools::equal(fTop, fBottom))
+ {
+ fBottom -= fOne;
+ fTop += fOne;
+ }
+
+ Impl3DHomMatrix aFrustumMat;
+
+ aFrustumMat.set(0, 0, 2.0 * fNear / (fRight - fLeft));
+ aFrustumMat.set(1, 1, 2.0 * fNear / (fTop - fBottom));
+ aFrustumMat.set(0, 2, (fRight + fLeft) / (fRight - fLeft));
+ aFrustumMat.set(1, 2, (fTop + fBottom) / (fTop - fBottom));
+ aFrustumMat.set(2, 2, -fOne * ((fFar + fNear) / (fFar - fNear)));
+ aFrustumMat.set(3, 2, -fOne);
+ aFrustumMat.set(2, 3, -fOne * ((2.0 * fFar * fNear) / (fFar - fNear)));
+ aFrustumMat.set(3, 3, fZero);
+
+ mpImpl->doMulMatrix(aFrustumMat);
+ }
+
+ void B3DHomMatrix::ortho(double fLeft, double fRight, double fBottom, double fTop, double fNear, double fFar)
+ {
+ if(fTools::equal(fNear, fFar))
+ {
+ fFar = fNear + 1.0;
+ }
+
+ if(fTools::equal(fLeft, fRight))
+ {
+ fLeft -= 1.0;
+ fRight += 1.0;
+ }
+
+ if(fTools::equal(fTop, fBottom))
+ {
+ fBottom -= 1.0;
+ fTop += 1.0;
+ }
+
+ Impl3DHomMatrix aOrthoMat;
+
+ aOrthoMat.set(0, 0, 2.0 / (fRight - fLeft));
+ aOrthoMat.set(1, 1, 2.0 / (fTop - fBottom));
+ aOrthoMat.set(2, 2, -1.0 * (2.0 / (fFar - fNear)));
+ aOrthoMat.set(0, 3, -1.0 * ((fRight + fLeft) / (fRight - fLeft)));
+ aOrthoMat.set(1, 3, -1.0 * ((fTop + fBottom) / (fTop - fBottom)));
+ aOrthoMat.set(2, 3, -1.0 * ((fFar + fNear) / (fFar - fNear)));
+
+ mpImpl->doMulMatrix(aOrthoMat);
+ }
+
+ void B3DHomMatrix::orientation(B3DPoint aVRP, B3DVector aVPN, B3DVector aVUV)
+ {
+ Impl3DHomMatrix aOrientationMat;
+
+ // translate -VRP
+ aOrientationMat.set(0, 3, -aVRP.getX());
+ aOrientationMat.set(1, 3, -aVRP.getY());
+ aOrientationMat.set(2, 3, -aVRP.getZ());
+
+ // build rotation
+ aVUV.normalize();
+ aVPN.normalize();
+
+ // build x-axis as peroendicular fron aVUV and aVPN
+ B3DVector aRx(aVUV.getPerpendicular(aVPN));
+ aRx.normalize();
+
+ // y-axis perpendicular to that
+ B3DVector aRy(aVPN.getPerpendicular(aRx));
+ aRy.normalize();
+
+ // the calculated normals are the line vectors of the rotation matrix,
+ // set them to create rotation
+ aOrientationMat.set(0, 0, aRx.getX());
+ aOrientationMat.set(0, 1, aRx.getY());
+ aOrientationMat.set(0, 2, aRx.getZ());
+ aOrientationMat.set(1, 0, aRy.getX());
+ aOrientationMat.set(1, 1, aRy.getY());
+ aOrientationMat.set(1, 2, aRy.getZ());
+ aOrientationMat.set(2, 0, aVPN.getX());
+ aOrientationMat.set(2, 1, aVPN.getY());
+ aOrientationMat.set(2, 2, aVPN.getZ());
+
+ mpImpl->doMulMatrix(aOrientationMat);
+ }
+
+ bool B3DHomMatrix::decompose(B3DTuple& rScale, B3DTuple& rTranslate, B3DTuple& rRotate, B3DTuple& rShear) const
+ {
+ // when perspective is used, decompose is not made here
+ if(!mpImpl->isLastLineDefault())
+ return false;
+
+ // If determinant is zero, decomposition is not possible
+ if(0.0 == determinant())
+ return false;
+
+ // isolate translation
+ rTranslate.setX(mpImpl->get(0, 3));
+ rTranslate.setY(mpImpl->get(1, 3));
+ rTranslate.setZ(mpImpl->get(2, 3));
+
+ // correct translate values
+ rTranslate.correctValues();
+
+ // get scale and shear
+ B3DVector aCol0(mpImpl->get(0, 0), mpImpl->get(1, 0), mpImpl->get(2, 0));
+ B3DVector aCol1(mpImpl->get(0, 1), mpImpl->get(1, 1), mpImpl->get(2, 1));
+ B3DVector aCol2(mpImpl->get(0, 2), mpImpl->get(1, 2), mpImpl->get(2, 2));
+ B3DVector aTemp;
+
+ // get ScaleX
+ rScale.setX(aCol0.getLength());
+ aCol0.normalize();
+
+ // get ShearXY
+ rShear.setX(aCol0.scalar(aCol1));
+
+ if(fTools::equalZero(rShear.getX()))
+ {
+ rShear.setX(0.0);
+ }
+ else
+ {
+ aTemp.setX(aCol1.getX() - rShear.getX() * aCol0.getX());
+ aTemp.setY(aCol1.getY() - rShear.getX() * aCol0.getY());
+ aTemp.setZ(aCol1.getZ() - rShear.getX() * aCol0.getZ());
+ aCol1 = aTemp;
+ }
+
+ // get ScaleY
+ rScale.setY(aCol1.getLength());
+ aCol1.normalize();
+
+ const double fShearX(rShear.getX());
+
+ if(!fTools::equalZero(fShearX))
+ {
+ rShear.setX(rShear.getX() / rScale.getY());
+ }
+
+ // get ShearXZ
+ rShear.setY(aCol0.scalar(aCol2));
+
+ if(fTools::equalZero(rShear.getY()))
+ {
+ rShear.setY(0.0);
+ }
+ else
+ {
+ aTemp.setX(aCol2.getX() - rShear.getY() * aCol0.getX());
+ aTemp.setY(aCol2.getY() - rShear.getY() * aCol0.getY());
+ aTemp.setZ(aCol2.getZ() - rShear.getY() * aCol0.getZ());
+ aCol2 = aTemp;
+ }
+
+ // get ShearYZ
+ rShear.setZ(aCol1.scalar(aCol2));
+
+ if(fTools::equalZero(rShear.getZ()))
+ {
+ rShear.setZ(0.0);
+ }
+ else
+ {
+ aTemp.setX(aCol2.getX() - rShear.getZ() * aCol1.getX());
+ aTemp.setY(aCol2.getY() - rShear.getZ() * aCol1.getY());
+ aTemp.setZ(aCol2.getZ() - rShear.getZ() * aCol1.getZ());
+ aCol2 = aTemp;
+ }
+
+ // get ScaleZ
+ rScale.setZ(aCol2.getLength());
+ aCol2.normalize();
+
+ const double fShearY(rShear.getY());
+
+ if(!fTools::equalZero(fShearY))
+ {
+ rShear.setY(rShear.getY() / rScale.getZ());
+ }
+
+ const double fShearZ(rShear.getZ());
+
+ if(!fTools::equalZero(fShearZ))
+ {
+ rShear.setZ(rShear.getZ() / rScale.getZ());
+ }
+
+ // correct shear values
+ rShear.correctValues();
+
+ // Coordinate system flip?
+ if(0.0 > aCol0.scalar(aCol1.getPerpendicular(aCol2)))
+ {
+ rScale = -rScale;
+ aCol0 = -aCol0;
+ aCol1 = -aCol1;
+ aCol2 = -aCol2;
+ }
+
+ // correct scale values
+ rScale.correctValues(1.0);
+
+ // Get rotations
+ {
+ double fy=0;
+ double cy=0;
+
+ if( ::basegfx::fTools::equal( aCol0.getZ(), 1.0 )
+ || aCol0.getZ() > 1.0 )
+ {
+ fy = -F_PI/2.0;
+ cy = 0.0;
+ }
+ else if( ::basegfx::fTools::equal( aCol0.getZ(), -1.0 )
+ || aCol0.getZ() < -1.0 )
+ {
+ fy = F_PI/2.0;
+ cy = 0.0;
+ }
+ else
+ {
+ fy = asin( -aCol0.getZ() );
+ cy = cos(fy);
+ }
+
+ rRotate.setY(fy);
+ if( ::basegfx::fTools::equalZero( cy ) )
+ {
+ if( aCol0.getZ() > 0.0 )
+ rRotate.setX(atan2(-1.0*aCol1.getX(), aCol1.getY()));
+ else
+ rRotate.setX(atan2(aCol1.getX(), aCol1.getY()));
+ rRotate.setZ(0.0);
+ }
+ else
+ {
+ rRotate.setX(atan2(aCol1.getZ(), aCol2.getZ()));
+ rRotate.setZ(atan2(aCol0.getY(), aCol0.getX()));
+ }
+
+ // corrcet rotate values
+ rRotate.correctValues();
+ }
+
+ return true;
+ }
+} // end of namespace basegfx
+
+// eof
diff --git a/basegfx/source/matrix/makefile.mk b/basegfx/source/matrix/makefile.mk
new file mode 100644
index 000000000000..35ea4d0cb86f
--- /dev/null
+++ b/basegfx/source/matrix/makefile.mk
@@ -0,0 +1,49 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..$/..
+PRJNAME=basegfx
+TARGET=matrix
+
+#UNOUCRRDB=$(SOLARBINDIR)$/applicat.rdb
+#ENABLE_EXCEPTIONS=FALSE
+#USE_DEFFILE=TRUE
+
+# --- Settings ----------------------------------
+
+.INCLUDE : settings.mk
+
+# --- Files -------------------------------------
+
+SLOFILES= \
+ $(SLO)$/b2dhommatrix.obj \
+ $(SLO)$/b2dhommatrixtools.obj \
+ $(SLO)$/b3dhommatrix.obj
+
+# --- Targets ----------------------------------
+
+.INCLUDE : target.mk
diff --git a/basegfx/source/numeric/ftools.cxx b/basegfx/source/numeric/ftools.cxx
new file mode 100644
index 000000000000..3111b26a1818
--- /dev/null
+++ b/basegfx/source/numeric/ftools.cxx
@@ -0,0 +1,38 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basegfx.hxx"
+#include <basegfx/numeric/ftools.hxx>
+
+namespace basegfx
+{
+ // init static member of class fTools
+ double ::basegfx::fTools::mfSmallValue = 0.000000001;
+} // end of namespace basegfx
+
+// eof
diff --git a/basegfx/source/numeric/makefile.mk b/basegfx/source/numeric/makefile.mk
new file mode 100644
index 000000000000..83abbbde4d82
--- /dev/null
+++ b/basegfx/source/numeric/makefile.mk
@@ -0,0 +1,47 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..$/..
+PRJNAME=basegfx
+TARGET=numeric
+
+#UNOUCRRDB=$(SOLARBINDIR)$/applicat.rdb
+#ENABLE_EXCEPTIONS=FALSE
+#USE_DEFFILE=TRUE
+
+# --- Settings ----------------------------------
+
+.INCLUDE : settings.mk
+
+# --- Files -------------------------------------
+
+SLOFILES= \
+ $(SLO)$/ftools.obj
+
+# --- Targets ----------------------------------
+
+.INCLUDE : target.mk
diff --git a/basegfx/source/pixel/bpixel.cxx b/basegfx/source/pixel/bpixel.cxx
new file mode 100644
index 000000000000..57de666787ab
--- /dev/null
+++ b/basegfx/source/pixel/bpixel.cxx
@@ -0,0 +1,51 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basegfx.hxx"
+
+#include <basegfx/pixel/bpixel.hxx>
+#include <rtl/instance.hxx>
+
+namespace { struct EmptyBPixel : public rtl::Static<basegfx::BPixel, EmptyBPixel> {}; }
+
+//////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+ const BPixel& BPixel::getEmptyBPixel()
+ {
+ return EmptyBPixel::get();
+ }
+
+ //////////////////////////////////////////////////////////////////////////
+ // external operators
+
+} // end of namespace basegfx
+
+//////////////////////////////////////////////////////////////////////////////
+// eof
diff --git a/basegfx/source/pixel/makefile.mk b/basegfx/source/pixel/makefile.mk
new file mode 100644
index 000000000000..75192dc5c180
--- /dev/null
+++ b/basegfx/source/pixel/makefile.mk
@@ -0,0 +1,47 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..$/..
+PRJNAME=basegfx
+TARGET=pixel
+
+#UNOUCRRDB=$(SOLARBINDIR)$/applicat.rdb
+#ENABLE_EXCEPTIONS=FALSE
+#USE_DEFFILE=TRUE
+
+# --- Settings ----------------------------------
+
+.INCLUDE : settings.mk
+
+# --- Files -------------------------------------
+
+SLOFILES= \
+ $(SLO)$/bpixel.obj
+
+# --- Targets ----------------------------------
+
+.INCLUDE : target.mk
diff --git a/basegfx/source/point/b2dhompoint.cxx b/basegfx/source/point/b2dhompoint.cxx
new file mode 100644
index 000000000000..979fbd4cdd3b
--- /dev/null
+++ b/basegfx/source/point/b2dhompoint.cxx
@@ -0,0 +1,259 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basegfx.hxx"
+#include <basegfx/point/b2dhompoint.hxx>
+#include <basegfx/matrix/b2dhommatrix.hxx>
+#include <basegfx/numeric/ftools.hxx>
+
+namespace basegfx
+{
+ bool B2DHomPoint::implIsHomogenized() const
+ {
+ const double fOne(1.0);
+ return ::basegfx::fTools::equal(fOne, mfW);
+ }
+
+ void B2DHomPoint::implHomogenize()
+ {
+ const double fFactor(1.0 / mfW);
+ maTuple.setX(maTuple.getX() * fFactor);
+ maTuple.setY(maTuple.getY() * fFactor);
+ mfW = 1.0;
+ }
+
+ void B2DHomPoint::implTestAndHomogenize() const
+ {
+ if(!implIsHomogenized())
+ ((B2DHomPoint*)this)->implHomogenize();
+ }
+
+ B2DPoint B2DHomPoint::getB2DPoint() const
+ {
+ implTestAndHomogenize();
+ return B2DPoint(maTuple.getX(), maTuple.getY());
+ }
+
+ double B2DHomPoint::getX() const
+ {
+ implTestAndHomogenize();
+ return maTuple.getX();
+ }
+
+ double B2DHomPoint::getY() const
+ {
+ implTestAndHomogenize();
+ return maTuple.getY();
+ }
+
+ void B2DHomPoint::setX(double fX)
+ {
+ maTuple.setX(implIsHomogenized() ? fX : fX * mfW );
+ }
+
+ void B2DHomPoint::setY(double fY)
+ {
+ maTuple.setY(implIsHomogenized() ? fY : fY * mfW );
+ }
+
+ B2DHomPoint& B2DHomPoint::operator+=( const B2DHomPoint& rPnt )
+ {
+ maTuple.setX(getX() * rPnt.mfW + rPnt.getX() * mfW);
+ maTuple.setY(getY() * rPnt.mfW + rPnt.getY() * mfW);
+ mfW = mfW * rPnt.mfW;
+
+ return *this;
+ }
+
+ B2DHomPoint& B2DHomPoint::operator-=( const B2DHomPoint& rPnt )
+ {
+ maTuple.setX(getX() * rPnt.mfW - rPnt.getX() * mfW);
+ maTuple.setY(getY() * rPnt.mfW - rPnt.getY() * mfW);
+ mfW = mfW * rPnt.mfW;
+
+ return *this;
+ }
+
+ B2DHomPoint& B2DHomPoint::operator*=(double t)
+ {
+ if(!::basegfx::fTools::equalZero(t))
+ {
+ mfW /= t;
+ }
+
+ return *this;
+ }
+
+ B2DHomPoint& B2DHomPoint::operator*=( const B2DHomMatrix& rMat )
+ {
+ const double fTempX( rMat.get(0,0)*maTuple.getX() +
+ rMat.get(0,1)*maTuple.getY() +
+ rMat.get(0,2)*mfW );
+
+ const double fTempY( rMat.get(1,0)*maTuple.getX() +
+ rMat.get(1,1)*maTuple.getY() +
+ rMat.get(1,2)*mfW );
+
+ const double fTempZ( rMat.get(2,0)*maTuple.getX() +
+ rMat.get(2,1)*maTuple.getY() +
+ rMat.get(2,2)*mfW );
+ maTuple.setX( fTempX );
+ maTuple.setY( fTempY );
+ mfW = fTempZ;
+
+ return *this;
+ }
+
+ B2DHomPoint& B2DHomPoint::operator/=(double t)
+ {
+ mfW *= t;
+ return *this;
+ }
+
+ B2DHomPoint& B2DHomPoint::operator-(void)
+ {
+ mfW = -mfW;
+ return *this;
+ }
+
+ bool B2DHomPoint::operator==( const B2DHomPoint& rPnt ) const
+ {
+ implTestAndHomogenize();
+ return (maTuple == rPnt.maTuple);
+ }
+
+ bool B2DHomPoint::operator!=( const B2DHomPoint& rPnt ) const
+ {
+ implTestAndHomogenize();
+ return (maTuple != rPnt.maTuple);
+ }
+
+ B2DHomPoint& B2DHomPoint::operator=( const B2DHomPoint& rPnt )
+ {
+ maTuple = rPnt.maTuple;
+ mfW = rPnt.mfW;
+ return *this;
+ }
+
+ B2DHomPoint minimum(const B2DHomPoint& rVecA, const B2DHomPoint& rVecB)
+ {
+ B2DHomPoint aMin(
+ (rVecB.getX() < rVecA.getX()) ? rVecB.getX() : rVecA.getX(),
+ (rVecB.getY() < rVecA.getY()) ? rVecB.getY() : rVecA.getY());
+ return aMin;
+ }
+
+ B2DHomPoint maximum(const B2DHomPoint& rVecA, const B2DHomPoint& rVecB)
+ {
+ B2DHomPoint aMax(
+ (rVecB.getX() > rVecA.getX()) ? rVecB.getX() : rVecA.getX(),
+ (rVecB.getY() > rVecA.getY()) ? rVecB.getY() : rVecA.getY());
+ return aMax;
+ }
+ B2DHomPoint absolute(const B2DHomPoint& rVec)
+ {
+ B2DHomPoint aAbs(
+ (0.0 > rVec.getX()) ? -rVec.getX() : rVec.getX(),
+ (0.0 > rVec.getY()) ? -rVec.getY() : rVec.getY());
+ return aAbs;
+ }
+
+ B2DHomPoint interpolate(B2DHomPoint& rOld1, B2DHomPoint& rOld2, double t)
+ {
+ B2DHomPoint aInt(
+ ((rOld2.getX() - rOld1.getX()) * t) + rOld1.getX(),
+ ((rOld2.getY() - rOld1.getY()) * t) + rOld1.getY());
+ return aInt;
+ }
+
+ B2DHomPoint average(B2DHomPoint& rOld1, B2DHomPoint& rOld2)
+ {
+ B2DHomPoint aAvg(
+ (rOld1.getX() + rOld2.getX()) * 0.5,
+ (rOld1.getY() + rOld2.getY()) * 0.5);
+ return aAvg;
+ }
+
+ B2DHomPoint average(B2DHomPoint& rOld1, B2DHomPoint& rOld2, B2DHomPoint& rOld3)
+ {
+ B2DHomPoint aAvg(
+ (rOld1.getX() + rOld2.getX() + rOld3.getX()) * (1.0 / 3.0),
+ (rOld1.getY() + rOld2.getY() + rOld3.getY()) * (1.0 / 3.0));
+ return aAvg;
+ }
+
+ B2DHomPoint operator+(const B2DHomPoint& rVecA, const B2DHomPoint& rVecB)
+ {
+ B2DHomPoint aSum(rVecA);
+ aSum += rVecB;
+ return aSum;
+ }
+
+ B2DHomPoint operator-(const B2DHomPoint& rVecA, const B2DHomPoint& rVecB)
+ {
+ B2DHomPoint aSub(rVecA);
+ aSub -= rVecB;
+ return aSub;
+ }
+
+ B2DHomPoint operator*(const B2DHomPoint& rVec, double t)
+ {
+ B2DHomPoint aNew(rVec);
+ aNew *= t;
+ return aNew;
+ }
+
+ B2DHomPoint operator*(double t, const B2DHomPoint& rVec)
+ {
+ B2DHomPoint aNew(rVec);
+ aNew *= t;
+ return aNew;
+ }
+
+ B2DHomPoint operator*( const B2DHomMatrix& rMat, const B2DHomPoint& rPoint )
+ {
+ B2DHomPoint aNew(rPoint);
+ return aNew*=rMat;
+ }
+
+ B2DHomPoint operator/(const B2DHomPoint& rVec, double t)
+ {
+ B2DHomPoint aNew(rVec);
+ aNew /= t;
+ return aNew;
+ }
+
+ B2DHomPoint operator/(double t, const B2DHomPoint& rVec)
+ {
+ B2DHomPoint aNew(rVec);
+ aNew /= t;
+ return aNew;
+ }
+} // end of namespace basegfx
+
+// eof
diff --git a/basegfx/source/point/b2dpoint.cxx b/basegfx/source/point/b2dpoint.cxx
new file mode 100644
index 000000000000..39b5eaa6fcbf
--- /dev/null
+++ b/basegfx/source/point/b2dpoint.cxx
@@ -0,0 +1,85 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basegfx.hxx"
+#include <basegfx/point/b2dpoint.hxx>
+#include <basegfx/matrix/b2dhommatrix.hxx>
+#include <basegfx/numeric/ftools.hxx>
+
+//////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+ B2DPoint& B2DPoint::operator=( const ::basegfx::B2DTuple& rPoint )
+ {
+ mfX = rPoint.getX();
+ mfY = rPoint.getY();
+ return *this;
+ }
+
+ B2DPoint& B2DPoint::operator*=( const ::basegfx::B2DHomMatrix& rMat )
+ {
+ double fTempX(
+ rMat.get(0, 0) * mfX +
+ rMat.get(0, 1) * mfY +
+ rMat.get(0, 2));
+ double fTempY(
+ rMat.get(1, 0) * mfX +
+ rMat.get(1, 1) * mfY +
+ rMat.get(1, 2));
+
+ if(!rMat.isLastLineDefault())
+ {
+ const double fOne(1.0);
+ const double fTempM(
+ rMat.get(2, 0) * mfX +
+ rMat.get(2, 1) * mfY +
+ rMat.get(2, 2));
+
+ if(!fTools::equalZero(fTempM) && !fTools::equal(fOne, fTempM))
+ {
+ fTempX /= fTempM;
+ fTempY /= fTempM;
+ }
+ }
+
+ mfX = fTempX;
+ mfY = fTempY;
+
+ return *this;
+ }
+
+ B2DPoint operator*( const ::basegfx::B2DHomMatrix& rMat, const B2DPoint& rPoint )
+ {
+ B2DPoint aRes( rPoint );
+ return aRes *= rMat;
+ }
+} // end of namespace basegfx
+
+//////////////////////////////////////////////////////////////////////////////
+// eof
diff --git a/basegfx/source/point/b2ipoint.cxx b/basegfx/source/point/b2ipoint.cxx
new file mode 100644
index 000000000000..09af767518b3
--- /dev/null
+++ b/basegfx/source/point/b2ipoint.cxx
@@ -0,0 +1,76 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basegfx.hxx"
+#include <basegfx/point/b2ipoint.hxx>
+#include <basegfx/matrix/b2dhommatrix.hxx>
+#include <basegfx/numeric/ftools.hxx>
+
+namespace basegfx
+{
+ B2IPoint& B2IPoint::operator=( const ::basegfx::B2ITuple& rPoint )
+ {
+ mnX = rPoint.getX();
+ mnY = rPoint.getY();
+ return *this;
+ }
+
+ B2IPoint& B2IPoint::operator*=( const ::basegfx::B2DHomMatrix& rMat )
+ {
+ double fTempX(
+ rMat.get(0, 0) * mnX +
+ rMat.get(0, 1) * mnY +
+ rMat.get(0, 2));
+ double fTempY(
+ rMat.get(1, 0) * mnX +
+ rMat.get(1, 1) * mnY +
+ rMat.get(1, 2));
+
+ if(!rMat.isLastLineDefault())
+ {
+ const double fOne(1.0);
+ const double fTempM(
+ rMat.get(2, 0) * mnX +
+ rMat.get(2, 1) * mnY +
+ rMat.get(2, 2));
+
+ if(!fTools::equalZero(fTempM) && !fTools::equal(fOne, fTempM))
+ {
+ fTempX /= fTempM;
+ fTempY /= fTempM;
+ }
+ }
+
+ mnX = fround(fTempX);
+ mnY = fround(fTempY);
+
+ return *this;
+ }
+} // end of namespace basegfx
+
+// eof
diff --git a/basegfx/source/point/b3dhompoint.cxx b/basegfx/source/point/b3dhompoint.cxx
new file mode 100644
index 000000000000..34dee5bc01d0
--- /dev/null
+++ b/basegfx/source/point/b3dhompoint.cxx
@@ -0,0 +1,44 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basegfx.hxx"
+#include <basegfx/point/b3dhompoint.hxx>
+
+namespace basegfx
+{
+ void B3DHomPoint::implHomogenize()
+ {
+ const double fFactor(1.0 / mfW);
+ maTuple.setX(maTuple.getX() * fFactor);
+ maTuple.setY(maTuple.getY() * fFactor);
+ maTuple.setZ(maTuple.getZ() * fFactor);
+ mfW = 1.0;
+ }
+} // end of namespace basegfx
+
+// eof
diff --git a/basegfx/source/point/b3dpoint.cxx b/basegfx/source/point/b3dpoint.cxx
new file mode 100644
index 000000000000..8bc1f06f3356
--- /dev/null
+++ b/basegfx/source/point/b3dpoint.cxx
@@ -0,0 +1,85 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basegfx.hxx"
+#include <basegfx/point/b3dpoint.hxx>
+#include <basegfx/matrix/b3dhommatrix.hxx>
+#include <basegfx/numeric/ftools.hxx>
+
+namespace basegfx
+{
+ B3DPoint& B3DPoint::operator*=( const ::basegfx::B3DHomMatrix& rMat )
+ {
+ double fTempX(
+ rMat.get(0, 0) * mfX +
+ rMat.get(0, 1) * mfY +
+ rMat.get(0, 2) * mfZ +
+ rMat.get(0, 3));
+ double fTempY(
+ rMat.get(1, 0) * mfX +
+ rMat.get(1, 1) * mfY +
+ rMat.get(1, 2) * mfZ +
+ rMat.get(1, 3));
+ double fTempZ(
+ rMat.get(2, 0) * mfX +
+ rMat.get(2, 1) * mfY +
+ rMat.get(2, 2) * mfZ +
+ rMat.get(2, 3));
+
+ if(!rMat.isLastLineDefault())
+ {
+ const double fOne(1.0);
+ const double fTempM(
+ rMat.get(3, 0) * mfX +
+ rMat.get(3, 1) * mfY +
+ rMat.get(3, 2) * mfZ +
+ rMat.get(3, 3));
+
+ if(!fTools::equalZero(fTempM) && !fTools::equal(fOne, fTempM))
+ {
+ fTempX /= fTempM;
+ fTempY /= fTempM;
+ fTempZ /= fTempM;
+ }
+ }
+
+ mfX = fTempX;
+ mfY = fTempY;
+ mfZ = fTempZ;
+
+ return *this;
+ }
+
+ B3DPoint operator*( const ::basegfx::B3DHomMatrix& rMat, const B3DPoint& rPoint )
+ {
+ B3DPoint aRes( rPoint );
+ return aRes *= rMat;
+ }
+} // end of namespace basegfx
+
+// eof
diff --git a/basegfx/source/point/b3ipoint.cxx b/basegfx/source/point/b3ipoint.cxx
new file mode 100644
index 000000000000..19bb25b8bf46
--- /dev/null
+++ b/basegfx/source/point/b3ipoint.cxx
@@ -0,0 +1,79 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basegfx.hxx"
+#include <basegfx/point/b3ipoint.hxx>
+#include <basegfx/matrix/b3dhommatrix.hxx>
+#include <basegfx/numeric/ftools.hxx>
+
+namespace basegfx
+{
+ B3IPoint& B3IPoint::operator*=( const ::basegfx::B3DHomMatrix& rMat )
+ {
+ double fTempX(
+ rMat.get(0, 0) * mnX +
+ rMat.get(0, 1) * mnY +
+ rMat.get(0, 2) * mnZ +
+ rMat.get(0, 3));
+ double fTempY(
+ rMat.get(1, 0) * mnX +
+ rMat.get(1, 1) * mnY +
+ rMat.get(1, 2) * mnZ +
+ rMat.get(1, 3));
+ double fTempZ(
+ rMat.get(2, 0) * mnX +
+ rMat.get(2, 1) * mnY +
+ rMat.get(2, 2) * mnZ +
+ rMat.get(2, 3));
+
+ if(!rMat.isLastLineDefault())
+ {
+ const double fOne(1.0);
+ const double fTempM(
+ rMat.get(3, 0) * mnX +
+ rMat.get(3, 1) * mnY +
+ rMat.get(3, 2) * mnZ +
+ rMat.get(3, 3));
+
+ if(!fTools::equalZero(fTempM) && !fTools::equal(fOne, fTempM))
+ {
+ fTempX /= fTempM;
+ fTempY /= fTempM;
+ fTempZ /= fTempM;
+ }
+ }
+
+ mnX = fround(fTempX);
+ mnY = fround(fTempY);
+ mnZ = fround(fTempZ);
+
+ return *this;
+ }
+} // end of namespace basegfx
+
+// eof
diff --git a/basegfx/source/point/makefile.mk b/basegfx/source/point/makefile.mk
new file mode 100644
index 000000000000..96798eb35cc9
--- /dev/null
+++ b/basegfx/source/point/makefile.mk
@@ -0,0 +1,52 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..$/..
+PRJNAME=basegfx
+TARGET=point
+
+#UNOUCRRDB=$(SOLARBINDIR)$/applicat.rdb
+#ENABLE_EXCEPTIONS=FALSE
+#USE_DEFFILE=TRUE
+
+# --- Settings ----------------------------------
+
+.INCLUDE : settings.mk
+
+# --- Files -------------------------------------
+
+SLOFILES= \
+ $(SLO)$/b2dpoint.obj \
+ $(SLO)$/b2dhompoint.obj \
+ $(SLO)$/b3dpoint.obj \
+ $(SLO)$/b3dhompoint.obj \
+ $(SLO)$/b2ipoint.obj \
+ $(SLO)$/b3ipoint.obj
+
+# --- Targets ----------------------------------
+
+.INCLUDE : target.mk
diff --git a/basegfx/source/polygon/b2dlinegeometry.cxx b/basegfx/source/polygon/b2dlinegeometry.cxx
new file mode 100644
index 000000000000..0db5efbfb86d
--- /dev/null
+++ b/basegfx/source/polygon/b2dlinegeometry.cxx
@@ -0,0 +1,725 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basegfx.hxx"
+#include <cstdio>
+#include <osl/diagnose.h>
+#include <basegfx/polygon/b2dlinegeometry.hxx>
+#include <basegfx/point/b2dpoint.hxx>
+#include <basegfx/vector/b2dvector.hxx>
+#include <basegfx/polygon/b2dpolygontools.hxx>
+#include <basegfx/polygon/b2dpolypolygontools.hxx>
+#include <basegfx/range/b2drange.hxx>
+#include <basegfx/matrix/b2dhommatrix.hxx>
+#include <basegfx/curve/b2dcubicbezier.hxx>
+#include <basegfx/matrix/b2dhommatrixtools.hxx>
+
+//////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+ namespace tools
+ {
+ B2DPolyPolygon createAreaGeometryForLineStartEnd(
+ const B2DPolygon& rCandidate,
+ const B2DPolyPolygon& rArrow,
+ bool bStart,
+ double fWidth,
+ double fCandidateLength,
+ double fDockingPosition, // 0->top, 1->bottom
+ double* pConsumedLength)
+ {
+ B2DPolyPolygon aRetval;
+ OSL_ENSURE(rCandidate.count() > 1L, "createAreaGeometryForLineStartEnd: Line polygon has too less points (!)");
+ OSL_ENSURE(rArrow.count() > 0L, "createAreaGeometryForLineStartEnd: Empty arrow PolyPolygon (!)");
+ OSL_ENSURE(fWidth > 0.0, "createAreaGeometryForLineStartEnd: Width too small (!)");
+ OSL_ENSURE(fDockingPosition >= 0.0 && fDockingPosition <= 1.0,
+ "createAreaGeometryForLineStartEnd: fDockingPosition out of range [0.0 .. 1.0] (!)");
+
+ if(fWidth < 0.0)
+ {
+ fWidth = -fWidth;
+ }
+
+ if(rCandidate.count() > 1 && rArrow.count() && !fTools::equalZero(fWidth))
+ {
+ if(fDockingPosition < 0.0)
+ {
+ fDockingPosition = 0.0;
+ }
+ else if(fDockingPosition > 1.0)
+ {
+ fDockingPosition = 1.0;
+ }
+
+ // init return value from arrow
+ aRetval.append(rArrow);
+
+ // get size of the arrow
+ const B2DRange aArrowSize(getRange(rArrow));
+
+ // build ArrowTransform; center in X, align with axis in Y
+ B2DHomMatrix aArrowTransform(basegfx::tools::createTranslateB2DHomMatrix(
+ -aArrowSize.getCenter().getX(), -aArrowSize.getMinimum().getY()));
+
+ // scale to target size
+ const double fArrowScale(fWidth / (aArrowSize.getRange().getX()));
+ aArrowTransform.scale(fArrowScale, fArrowScale);
+
+ // get arrow size in Y
+ B2DPoint aUpperCenter(aArrowSize.getCenter().getX(), aArrowSize.getMaximum().getY());
+ aUpperCenter *= aArrowTransform;
+ const double fArrowYLength(B2DVector(aUpperCenter).getLength());
+
+ // move arrow to have docking position centered
+ aArrowTransform.translate(0.0, -fArrowYLength * fDockingPosition);
+
+ // prepare polygon length
+ if(fTools::equalZero(fCandidateLength))
+ {
+ fCandidateLength = getLength(rCandidate);
+ }
+
+ // get the polygon vector we want to plant this arrow on
+ const double fConsumedLength(fArrowYLength * (1.0 - fDockingPosition));
+ const B2DVector aHead(rCandidate.getB2DPoint((bStart) ? 0L : rCandidate.count() - 1L));
+ const B2DVector aTail(getPositionAbsolute(rCandidate,
+ (bStart) ? fConsumedLength : fCandidateLength - fConsumedLength, fCandidateLength));
+
+ // from that vector, take the needed rotation and add rotate for arrow to transformation
+ const B2DVector aTargetDirection(aHead - aTail);
+ const double fRotation(atan2(aTargetDirection.getY(), aTargetDirection.getX()) + (90.0 * F_PI180));
+
+ // rotate around docking position
+ aArrowTransform.rotate(fRotation);
+
+ // move arrow docking position to polygon head
+ aArrowTransform.translate(aHead.getX(), aHead.getY());
+
+ // transform retval and close
+ aRetval.transform(aArrowTransform);
+ aRetval.setClosed(true);
+
+ // if pConsumedLength is asked for, fill it
+ if(pConsumedLength)
+ {
+ *pConsumedLength = fConsumedLength;
+ }
+ }
+
+ return aRetval;
+ }
+ } // end of namespace tools
+} // end of namespace basegfx
+
+//////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+ // anonymus namespace for local helpers
+ namespace
+ {
+ bool impIsSimpleEdge(const B2DCubicBezier& rCandidate, double fMaxCosQuad, double fMaxPartOfEdgeQuad)
+ {
+ // isBezier() is true, already tested by caller
+ const B2DVector aEdge(rCandidate.getEndPoint() - rCandidate.getStartPoint());
+
+ if(aEdge.equalZero())
+ {
+ // start and end point the same, but control vectors used -> baloon curve loop
+ // is not a simple edge
+ return false;
+ }
+
+ // get tangentA and scalar with edge
+ const B2DVector aTangentA(rCandidate.getTangent(0.0));
+ const double fScalarAE(aEdge.scalar(aTangentA));
+
+ if(fTools::lessOrEqual(fScalarAE, 0.0))
+ {
+ // angle between TangentA and Edge is bigger or equal 90 degrees
+ return false;
+ }
+
+ // get self-scalars for E and A
+ const double fScalarE(aEdge.scalar(aEdge));
+ const double fScalarA(aTangentA.scalar(aTangentA));
+ const double fLengthCompareE(fScalarE * fMaxPartOfEdgeQuad);
+
+ if(fTools::moreOrEqual(fScalarA, fLengthCompareE))
+ {
+ // length of TangentA is more than fMaxPartOfEdge of length of edge
+ return false;
+ }
+
+ if(fTools::lessOrEqual(fScalarAE * fScalarAE, fScalarA * fScalarE * fMaxCosQuad))
+ {
+ // angle between TangentA and Edge is bigger or equal angle defined by fMaxCos
+ return false;
+ }
+
+ // get tangentB and scalar with edge
+ const B2DVector aTangentB(rCandidate.getTangent(1.0));
+ const double fScalarBE(aEdge.scalar(aTangentB));
+
+ if(fTools::lessOrEqual(fScalarBE, 0.0))
+ {
+ // angle between TangentB and Edge is bigger or equal 90 degrees
+ return false;
+ }
+
+ // get self-scalar for B
+ const double fScalarB(aTangentB.scalar(aTangentB));
+
+ if(fTools::moreOrEqual(fScalarB, fLengthCompareE))
+ {
+ // length of TangentB is more than fMaxPartOfEdge of length of edge
+ return false;
+ }
+
+ if(fTools::lessOrEqual(fScalarBE * fScalarBE, fScalarB * fScalarE * fMaxCosQuad))
+ {
+ // angle between TangentB and Edge is bigger or equal defined by fMaxCos
+ return false;
+ }
+
+ return true;
+ }
+
+ void impSubdivideToSimple(const B2DCubicBezier& rCandidate, B2DPolygon& rTarget, double fMaxCosQuad, double fMaxPartOfEdgeQuad, sal_uInt32 nMaxRecursionDepth)
+ {
+ if(!nMaxRecursionDepth || impIsSimpleEdge(rCandidate, fMaxCosQuad, fMaxPartOfEdgeQuad))
+ {
+ rTarget.appendBezierSegment(rCandidate.getControlPointA(), rCandidate.getControlPointB(), rCandidate.getEndPoint());
+ }
+ else
+ {
+ B2DCubicBezier aLeft, aRight;
+ rCandidate.split(0.5, &aLeft, &aRight);
+
+ impSubdivideToSimple(aLeft, rTarget, fMaxCosQuad, fMaxPartOfEdgeQuad, nMaxRecursionDepth - 1);
+ impSubdivideToSimple(aRight, rTarget, fMaxCosQuad, fMaxPartOfEdgeQuad, nMaxRecursionDepth - 1);
+ }
+ }
+
+ B2DPolygon subdivideToSimple(const B2DPolygon& rCandidate, double fMaxCosQuad, double fMaxPartOfEdgeQuad)
+ {
+ const sal_uInt32 nPointCount(rCandidate.count());
+
+ if(rCandidate.areControlPointsUsed() && nPointCount)
+ {
+ const sal_uInt32 nEdgeCount(rCandidate.isClosed() ? nPointCount : nPointCount - 1);
+ B2DPolygon aRetval;
+ B2DCubicBezier aEdge;
+
+ // prepare edge for loop
+ aEdge.setStartPoint(rCandidate.getB2DPoint(0));
+ aRetval.append(aEdge.getStartPoint());
+
+ for(sal_uInt32 a(0); a < nEdgeCount; a++)
+ {
+ // fill B2DCubicBezier
+ const sal_uInt32 nNextIndex((a + 1) % nPointCount);
+ aEdge.setControlPointA(rCandidate.getNextControlPoint(a));
+ aEdge.setControlPointB(rCandidate.getPrevControlPoint(nNextIndex));
+ aEdge.setEndPoint(rCandidate.getB2DPoint(nNextIndex));
+
+ // get rid of unnecessary bezier segments
+ aEdge.testAndSolveTrivialBezier();
+
+ if(aEdge.isBezier())
+ {
+ // before splitting recursively with internal simple criteria, use
+ // ExtremumPosFinder to remove those
+ ::std::vector< double > aExtremumPositions;
+
+ aExtremumPositions.reserve(4);
+ aEdge.getAllExtremumPositions(aExtremumPositions);
+
+ const sal_uInt32 nCount(aExtremumPositions.size());
+
+ if(nCount)
+ {
+ if(nCount > 1)
+ {
+ // create order from left to right
+ ::std::sort(aExtremumPositions.begin(), aExtremumPositions.end());
+ }
+
+ for(sal_uInt32 b(0); b < nCount;)
+ {
+ // split aEdge at next split pos
+ B2DCubicBezier aLeft;
+ const double fSplitPos(aExtremumPositions[b++]);
+
+ aEdge.split(fSplitPos, &aLeft, &aEdge);
+ aLeft.testAndSolveTrivialBezier();
+
+ // consume left part
+ if(aLeft.isBezier())
+ {
+ impSubdivideToSimple(aLeft, aRetval, fMaxCosQuad, fMaxPartOfEdgeQuad, 6);
+ }
+ else
+ {
+ aRetval.append(aLeft.getEndPoint());
+ }
+
+ if(b < nCount)
+ {
+ // correct the remaining split positions to fit to shortened aEdge
+ const double fScaleFactor(1.0 / (1.0 - fSplitPos));
+
+ for(sal_uInt32 c(b); c < nCount; c++)
+ {
+ aExtremumPositions[c] = (aExtremumPositions[c] - fSplitPos) * fScaleFactor;
+ }
+ }
+ }
+
+ // test the shortened rest of aEdge
+ aEdge.testAndSolveTrivialBezier();
+
+ // consume right part
+ if(aEdge.isBezier())
+ {
+ impSubdivideToSimple(aEdge, aRetval, fMaxCosQuad, fMaxPartOfEdgeQuad, 6);
+ }
+ else
+ {
+ aRetval.append(aEdge.getEndPoint());
+ }
+ }
+ else
+ {
+ impSubdivideToSimple(aEdge, aRetval, fMaxCosQuad, fMaxPartOfEdgeQuad, 6);
+ }
+ }
+ else
+ {
+ // straight edge, add point
+ aRetval.append(aEdge.getEndPoint());
+ }
+
+ // prepare edge for next step
+ aEdge.setStartPoint(aEdge.getEndPoint());
+ }
+
+ // copy closed flag and check for double points
+ aRetval.setClosed(rCandidate.isClosed());
+ aRetval.removeDoublePoints();
+
+ return aRetval;
+ }
+ else
+ {
+ return rCandidate;
+ }
+ }
+
+ B2DPolygon createAreaGeometryForEdge(const B2DCubicBezier& rEdge, double fHalfLineWidth)
+ {
+ // create polygon for edge
+ // Unfortunately, while it would be geometrically correct to not add
+ // the in-between points EdgeEnd and EdgeStart, it leads to rounding
+ // errors when converting to integer polygon coordinates for painting
+ if(rEdge.isBezier())
+ {
+ // prepare target and data common for upper and lower
+ B2DPolygon aBezierPolygon;
+ const B2DVector aPureEdgeVector(rEdge.getEndPoint() - rEdge.getStartPoint());
+ const double fEdgeLength(aPureEdgeVector.getLength());
+ const bool bIsEdgeLengthZero(fTools::equalZero(fEdgeLength));
+ const B2DVector aTangentA(rEdge.getTangent(0.0));
+ const B2DVector aTangentB(rEdge.getTangent(1.0));
+
+ // create upper edge.
+ {
+ // create displacement vectors and check if they cut
+ const B2DVector aPerpendStart(getNormalizedPerpendicular(aTangentA) * -fHalfLineWidth);
+ const B2DVector aPerpendEnd(getNormalizedPerpendicular(aTangentB) * -fHalfLineWidth);
+ double fCut(0.0);
+ const tools::CutFlagValue aCut(tools::findCut(
+ rEdge.getStartPoint(), aPerpendStart,
+ rEdge.getEndPoint(), aPerpendEnd,
+ CUTFLAG_ALL, &fCut));
+
+ if(CUTFLAG_NONE != aCut)
+ {
+ // calculate cut point and add
+ const B2DPoint aCutPoint(rEdge.getStartPoint() + (aPerpendStart * fCut));
+ aBezierPolygon.append(aCutPoint);
+ }
+ else
+ {
+ // create scaled bezier segment
+ const B2DPoint aStart(rEdge.getStartPoint() + aPerpendStart);
+ const B2DPoint aEnd(rEdge.getEndPoint() + aPerpendEnd);
+ const B2DVector aEdge(aEnd - aStart);
+ const double fLength(aEdge.getLength());
+ const double fScale(bIsEdgeLengthZero ? 1.0 : fLength / fEdgeLength);
+ const B2DVector fRelNext(rEdge.getControlPointA() - rEdge.getStartPoint());
+ const B2DVector fRelPrev(rEdge.getControlPointB() - rEdge.getEndPoint());
+
+ aBezierPolygon.append(aStart);
+ aBezierPolygon.appendBezierSegment(aStart + (fRelNext * fScale), aEnd + (fRelPrev * fScale), aEnd);
+ }
+ }
+
+ // append original in-between point
+ aBezierPolygon.append(rEdge.getEndPoint());
+
+ // create lower edge.
+ {
+ // create displacement vectors and check if they cut
+ const B2DVector aPerpendStart(getNormalizedPerpendicular(aTangentA) * fHalfLineWidth);
+ const B2DVector aPerpendEnd(getNormalizedPerpendicular(aTangentB) * fHalfLineWidth);
+ double fCut(0.0);
+ const tools::CutFlagValue aCut(tools::findCut(
+ rEdge.getEndPoint(), aPerpendEnd,
+ rEdge.getStartPoint(), aPerpendStart,
+ CUTFLAG_ALL, &fCut));
+
+ if(CUTFLAG_NONE != aCut)
+ {
+ // calculate cut point and add
+ const B2DPoint aCutPoint(rEdge.getEndPoint() + (aPerpendEnd * fCut));
+ aBezierPolygon.append(aCutPoint);
+ }
+ else
+ {
+ // create scaled bezier segment
+ const B2DPoint aStart(rEdge.getEndPoint() + aPerpendEnd);
+ const B2DPoint aEnd(rEdge.getStartPoint() + aPerpendStart);
+ const B2DVector aEdge(aEnd - aStart);
+ const double fLength(aEdge.getLength());
+ const double fScale(bIsEdgeLengthZero ? 1.0 : fLength / fEdgeLength);
+ const B2DVector fRelNext(rEdge.getControlPointB() - rEdge.getEndPoint());
+ const B2DVector fRelPrev(rEdge.getControlPointA() - rEdge.getStartPoint());
+
+ aBezierPolygon.append(aStart);
+ aBezierPolygon.appendBezierSegment(aStart + (fRelNext * fScale), aEnd + (fRelPrev * fScale), aEnd);
+ }
+ }
+
+ // append original in-between point
+ aBezierPolygon.append(rEdge.getStartPoint());
+
+ // close and return
+ aBezierPolygon.setClosed(true);
+ return aBezierPolygon;
+ }
+ else
+ {
+ // #i101491# emulate rEdge.getTangent call which applies a factor of 0.3 to the
+ // full-length edge vector to have numerically exactly the same results as in the
+ // createAreaGeometryForJoin implementation
+ const B2DVector aEdgeTangent((rEdge.getEndPoint() - rEdge.getStartPoint()) * 0.3);
+ const B2DVector aPerpendEdgeVector(getNormalizedPerpendicular(aEdgeTangent) * fHalfLineWidth);
+ B2DPolygon aEdgePolygon;
+
+ // create upper edge
+ aEdgePolygon.append(rEdge.getStartPoint() - aPerpendEdgeVector);
+ aEdgePolygon.append(rEdge.getEndPoint() - aPerpendEdgeVector);
+
+ // append original in-between point
+ aEdgePolygon.append(rEdge.getEndPoint());
+
+ // create lower edge
+ aEdgePolygon.append(rEdge.getEndPoint() + aPerpendEdgeVector);
+ aEdgePolygon.append(rEdge.getStartPoint() + aPerpendEdgeVector);
+
+ // append original in-between point
+ aEdgePolygon.append(rEdge.getStartPoint());
+
+ // close and return
+ aEdgePolygon.setClosed(true);
+ return aEdgePolygon;
+ }
+ }
+
+ B2DPolygon createAreaGeometryForJoin(
+ const B2DVector& rTangentPrev,
+ const B2DVector& rTangentEdge,
+ const B2DVector& rPerpendPrev,
+ const B2DVector& rPerpendEdge,
+ const B2DPoint& rPoint,
+ double fHalfLineWidth,
+ B2DLineJoin eJoin,
+ double fMiterMinimumAngle)
+ {
+ OSL_ENSURE(fHalfLineWidth > 0.0, "createAreaGeometryForJoin: LineWidth too small (!)");
+ OSL_ENSURE(B2DLINEJOIN_NONE != eJoin, "createAreaGeometryForJoin: B2DLINEJOIN_NONE not allowed (!)");
+
+ // LineJoin from tangent rPerpendPrev to tangent rPerpendEdge in rPoint
+ B2DPolygon aEdgePolygon;
+ const B2DPoint aStartPoint(rPoint + rPerpendPrev);
+ const B2DPoint aEndPoint(rPoint + rPerpendEdge);
+
+ // test if for Miter, the angle is too small and the fallback
+ // to bevel needs to be used
+ if(B2DLINEJOIN_MITER == eJoin)
+ {
+ const double fAngle(fabs(rPerpendPrev.angle(rPerpendEdge)));
+
+ if((F_PI - fAngle) < fMiterMinimumAngle)
+ {
+ // fallback to bevel
+ eJoin = B2DLINEJOIN_BEVEL;
+ }
+ }
+
+ switch(eJoin)
+ {
+ case B2DLINEJOIN_MITER :
+ {
+ aEdgePolygon.append(aEndPoint);
+ aEdgePolygon.append(rPoint);
+ aEdgePolygon.append(aStartPoint);
+
+ // Look for the cut point between start point along rTangentPrev and
+ // end point along rTangentEdge. -rTangentEdge should be used, but since
+ // the cut value is used for interpolating along the first edge, the negation
+ // is not needed since the same fCut will be found on the first edge.
+ // If it exists, insert it to complete the mitered fill polygon.
+ double fCutPos(0.0);
+ tools::findCut(aStartPoint, rTangentPrev, aEndPoint, rTangentEdge, CUTFLAG_ALL, &fCutPos);
+
+ if(0.0 != fCutPos)
+ {
+ const B2DPoint aCutPoint(interpolate(aStartPoint, aStartPoint + rTangentPrev, fCutPos));
+ aEdgePolygon.append(aCutPoint);
+ }
+
+ break;
+ }
+ case B2DLINEJOIN_ROUND :
+ {
+ // use tooling to add needed EllipseSegment
+ double fAngleStart(atan2(rPerpendPrev.getY(), rPerpendPrev.getX()));
+ double fAngleEnd(atan2(rPerpendEdge.getY(), rPerpendEdge.getX()));
+
+ // atan2 results are [-PI .. PI], consolidate to [0.0 .. 2PI]
+ if(fAngleStart < 0.0)
+ {
+ fAngleStart += F_2PI;
+ }
+
+ if(fAngleEnd < 0.0)
+ {
+ fAngleEnd += F_2PI;
+ }
+
+ const B2DPolygon aBow(tools::createPolygonFromEllipseSegment(rPoint, fHalfLineWidth, fHalfLineWidth, fAngleStart, fAngleEnd));
+
+ if(aBow.count() > 1)
+ {
+ // #i101491#
+ // use the original start/end positions; the ones from bow creation may be numerically
+ // different due to their different creation. To guarantee good merging quality with edges
+ // and edge roundings (and to reduce point count)
+ aEdgePolygon = aBow;
+ aEdgePolygon.setB2DPoint(0, aStartPoint);
+ aEdgePolygon.setB2DPoint(aEdgePolygon.count() - 1, aEndPoint);
+ aEdgePolygon.append(rPoint);
+
+ break;
+ }
+ else
+ {
+ // wanted fall-through to default
+ }
+ }
+ default: // B2DLINEJOIN_BEVEL
+ {
+ aEdgePolygon.append(aEndPoint);
+ aEdgePolygon.append(rPoint);
+ aEdgePolygon.append(aStartPoint);
+
+ break;
+ }
+ }
+
+ // create last polygon part for edge
+ aEdgePolygon.setClosed(true);
+
+ return aEdgePolygon;
+ }
+ } // end of anonymus namespace
+
+ namespace tools
+ {
+ B2DPolyPolygon createAreaGeometry(
+ const B2DPolygon& rCandidate,
+ double fHalfLineWidth,
+ B2DLineJoin eJoin,
+ double fMaxAllowedAngle,
+ double fMaxPartOfEdge,
+ double fMiterMinimumAngle)
+ {
+ if(fMaxAllowedAngle > F_PI2)
+ {
+ fMaxAllowedAngle = F_PI2;
+ }
+ else if(fMaxAllowedAngle < 0.01 * F_PI2)
+ {
+ fMaxAllowedAngle = 0.01 * F_PI2;
+ }
+
+ if(fMaxPartOfEdge > 1.0)
+ {
+ fMaxPartOfEdge = 1.0;
+ }
+ else if(fMaxPartOfEdge < 0.01)
+ {
+ fMaxPartOfEdge = 0.01;
+ }
+
+ if(fMiterMinimumAngle > F_PI)
+ {
+ fMiterMinimumAngle = F_PI;
+ }
+ else if(fMiterMinimumAngle < 0.01 * F_PI)
+ {
+ fMiterMinimumAngle = 0.01 * F_PI;
+ }
+
+ B2DPolygon aCandidate(rCandidate);
+ const double fMaxCos(cos(fMaxAllowedAngle));
+
+ aCandidate.removeDoublePoints();
+ aCandidate = subdivideToSimple(aCandidate, fMaxCos * fMaxCos, fMaxPartOfEdge * fMaxPartOfEdge);
+
+ const sal_uInt32 nPointCount(aCandidate.count());
+
+ if(nPointCount)
+ {
+ B2DPolyPolygon aRetval;
+ const bool bEventuallyCreateLineJoin(B2DLINEJOIN_NONE != eJoin);
+ const bool bIsClosed(aCandidate.isClosed());
+ const sal_uInt32 nEdgeCount(bIsClosed ? nPointCount : nPointCount - 1);
+
+ if(nEdgeCount)
+ {
+ B2DCubicBezier aEdge;
+ B2DCubicBezier aPrev;
+
+ // prepare edge
+ aEdge.setStartPoint(aCandidate.getB2DPoint(0));
+
+ if(bIsClosed && bEventuallyCreateLineJoin)
+ {
+ // prepare previous edge
+ const sal_uInt32 nPrevIndex(nPointCount - 1);
+ aPrev.setStartPoint(aCandidate.getB2DPoint(nPrevIndex));
+ aPrev.setControlPointA(aCandidate.getNextControlPoint(nPrevIndex));
+ aPrev.setControlPointB(aCandidate.getPrevControlPoint(0));
+ aPrev.setEndPoint(aEdge.getStartPoint());
+ }
+
+ for(sal_uInt32 a(0); a < nEdgeCount; a++)
+ {
+ // fill current Edge
+ const sal_uInt32 nNextIndex((a + 1) % nPointCount);
+ aEdge.setControlPointA(aCandidate.getNextControlPoint(a));
+ aEdge.setControlPointB(aCandidate.getPrevControlPoint(nNextIndex));
+ aEdge.setEndPoint(aCandidate.getB2DPoint(nNextIndex));
+
+ // check and create linejoin
+ if(bEventuallyCreateLineJoin && (bIsClosed || 0 != a))
+ {
+ const B2DVector aTangentPrev(aPrev.getTangent(1.0));
+ const B2DVector aTangentEdge(aEdge.getTangent(0.0));
+ B2VectorOrientation aOrientation(getOrientation(aTangentPrev, aTangentEdge));
+
+ if(ORIENTATION_NEUTRAL == aOrientation)
+ {
+ // they are parallell or empty; if they are both not zero and point
+ // in opposite direction, a half-circle is needed
+ if(!aTangentPrev.equalZero() && !aTangentEdge.equalZero())
+ {
+ const double fAngle(fabs(aTangentPrev.angle(aTangentEdge)));
+
+ if(fTools::equal(fAngle, F_PI))
+ {
+ // for half-circle production, fallback to positive
+ // orientation
+ aOrientation = ORIENTATION_POSITIVE;
+ }
+ }
+ }
+
+ if(ORIENTATION_POSITIVE == aOrientation)
+ {
+ const B2DVector aPerpendPrev(getNormalizedPerpendicular(aTangentPrev) * -fHalfLineWidth);
+ const B2DVector aPerpendEdge(getNormalizedPerpendicular(aTangentEdge) * -fHalfLineWidth);
+
+ aRetval.append(createAreaGeometryForJoin(
+ aTangentPrev, aTangentEdge,
+ aPerpendPrev, aPerpendEdge,
+ aEdge.getStartPoint(), fHalfLineWidth,
+ eJoin, fMiterMinimumAngle));
+ }
+ else if(ORIENTATION_NEGATIVE == aOrientation)
+ {
+ const B2DVector aPerpendPrev(getNormalizedPerpendicular(aTangentPrev) * fHalfLineWidth);
+ const B2DVector aPerpendEdge(getNormalizedPerpendicular(aTangentEdge) * fHalfLineWidth);
+
+ aRetval.append(createAreaGeometryForJoin(
+ aTangentEdge, aTangentPrev,
+ aPerpendEdge, aPerpendPrev,
+ aEdge.getStartPoint(), fHalfLineWidth,
+ eJoin, fMiterMinimumAngle));
+ }
+ }
+
+ // create geometry for edge
+ aRetval.append(createAreaGeometryForEdge(aEdge, fHalfLineWidth));
+
+ // prepare next step
+ if(bEventuallyCreateLineJoin)
+ {
+ aPrev = aEdge;
+ }
+
+ aEdge.setStartPoint(aEdge.getEndPoint());
+ }
+ }
+
+ return aRetval;
+ }
+ else
+ {
+ return B2DPolyPolygon(rCandidate);
+ }
+ }
+ } // end of namespace tools
+} // end of namespace basegfx
+
+//////////////////////////////////////////////////////////////////////////////
+// eof
diff --git a/basegfx/source/polygon/b2dpolygon.cxx b/basegfx/source/polygon/b2dpolygon.cxx
new file mode 100644
index 000000000000..d8255dc7ec10
--- /dev/null
+++ b/basegfx/source/polygon/b2dpolygon.cxx
@@ -0,0 +1,1652 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basegfx.hxx"
+#include <osl/diagnose.h>
+#include <basegfx/polygon/b2dpolygon.hxx>
+#include <basegfx/point/b2dpoint.hxx>
+#include <basegfx/vector/b2dvector.hxx>
+#include <basegfx/matrix/b2dhommatrix.hxx>
+#include <basegfx/curve/b2dcubicbezier.hxx>
+#include <rtl/instance.hxx>
+#include <basegfx/polygon/b2dpolygontools.hxx>
+#include <boost/scoped_ptr.hpp>
+#include <vector>
+#include <algorithm>
+
+//////////////////////////////////////////////////////////////////////////////
+
+struct CoordinateData2D : public basegfx::B2DPoint
+{
+public:
+ CoordinateData2D() {}
+
+ explicit CoordinateData2D(const basegfx::B2DPoint& rData)
+ : B2DPoint(rData)
+ {}
+
+ CoordinateData2D& operator=(const basegfx::B2DPoint& rData)
+ {
+ B2DPoint::operator=(rData);
+ return *this;
+ }
+
+ void transform(const basegfx::B2DHomMatrix& rMatrix)
+ {
+ *this *= rMatrix;
+ }
+};
+
+//////////////////////////////////////////////////////////////////////////////
+
+class CoordinateDataArray2D
+{
+ typedef ::std::vector< CoordinateData2D > CoordinateData2DVector;
+
+ CoordinateData2DVector maVector;
+
+public:
+ explicit CoordinateDataArray2D(sal_uInt32 nCount)
+ : maVector(nCount)
+ {
+ }
+
+ explicit CoordinateDataArray2D(const CoordinateDataArray2D& rOriginal)
+ : maVector(rOriginal.maVector)
+ {
+ }
+
+ CoordinateDataArray2D(const CoordinateDataArray2D& rOriginal, sal_uInt32 nIndex, sal_uInt32 nCount)
+ : maVector(rOriginal.maVector.begin() + nIndex, rOriginal.maVector.begin() + (nIndex + nCount))
+ {
+ }
+
+ sal_uInt32 count() const
+ {
+ return maVector.size();
+ }
+
+ bool operator==(const CoordinateDataArray2D& rCandidate) const
+ {
+ return (maVector == rCandidate.maVector);
+ }
+
+ const basegfx::B2DPoint& getCoordinate(sal_uInt32 nIndex) const
+ {
+ return maVector[nIndex];
+ }
+
+ void setCoordinate(sal_uInt32 nIndex, const basegfx::B2DPoint& rValue)
+ {
+ maVector[nIndex] = rValue;
+ }
+
+ void reserve(sal_uInt32 nCount)
+ {
+ maVector.reserve(nCount);
+ }
+
+ void append(const CoordinateData2D& rValue)
+ {
+ maVector.push_back(rValue);
+ }
+
+ void insert(sal_uInt32 nIndex, const CoordinateData2D& rValue, sal_uInt32 nCount)
+ {
+ if(nCount)
+ {
+ // add nCount copies of rValue
+ CoordinateData2DVector::iterator aIndex(maVector.begin());
+ aIndex += nIndex;
+ maVector.insert(aIndex, nCount, rValue);
+ }
+ }
+
+ void insert(sal_uInt32 nIndex, const CoordinateDataArray2D& rSource)
+ {
+ const sal_uInt32 nCount(rSource.maVector.size());
+
+ if(nCount)
+ {
+ // insert data
+ CoordinateData2DVector::iterator aIndex(maVector.begin());
+ aIndex += nIndex;
+ CoordinateData2DVector::const_iterator aStart(rSource.maVector.begin());
+ CoordinateData2DVector::const_iterator aEnd(rSource.maVector.end());
+ maVector.insert(aIndex, aStart, aEnd);
+ }
+ }
+
+ void remove(sal_uInt32 nIndex, sal_uInt32 nCount)
+ {
+ if(nCount)
+ {
+ // remove point data
+ CoordinateData2DVector::iterator aStart(maVector.begin());
+ aStart += nIndex;
+ const CoordinateData2DVector::iterator aEnd(aStart + nCount);
+ maVector.erase(aStart, aEnd);
+ }
+ }
+
+ void flip(bool bIsClosed)
+ {
+ if(maVector.size() > 1)
+ {
+ // to keep the same point at index 0, just flip all points except the
+ // first one when closed
+ const sal_uInt32 nHalfSize(bIsClosed ? (maVector.size() - 1) >> 1 : maVector.size() >> 1);
+ CoordinateData2DVector::iterator aStart(bIsClosed ? maVector.begin() + 1 : maVector.begin());
+ CoordinateData2DVector::iterator aEnd(maVector.end() - 1);
+
+ for(sal_uInt32 a(0); a < nHalfSize; a++)
+ {
+ ::std::swap(*aStart, *aEnd);
+ aStart++;
+ aEnd--;
+ }
+ }
+ }
+
+ void removeDoublePointsAtBeginEnd()
+ {
+ // remove from end as long as there are at least two points
+ // and begin/end are equal
+ while((maVector.size() > 1) && (maVector[0] == maVector[maVector.size() - 1]))
+ {
+ maVector.pop_back();
+ }
+ }
+
+ void removeDoublePointsWholeTrack()
+ {
+ sal_uInt32 nIndex(0);
+
+ // test as long as there are at least two points and as long as the index
+ // is smaller or equal second last point
+ while((maVector.size() > 1) && (nIndex <= maVector.size() - 2))
+ {
+ if(maVector[nIndex] == maVector[nIndex + 1])
+ {
+ // if next is same as index, delete next
+ maVector.erase(maVector.begin() + (nIndex + 1));
+ }
+ else
+ {
+ // if different, step forward
+ nIndex++;
+ }
+ }
+ }
+
+ void transform(const basegfx::B2DHomMatrix& rMatrix)
+ {
+ CoordinateData2DVector::iterator aStart(maVector.begin());
+ CoordinateData2DVector::iterator aEnd(maVector.end());
+
+ for(; aStart != aEnd; aStart++)
+ {
+ aStart->transform(rMatrix);
+ }
+ }
+
+ const basegfx::B2DPoint* begin() const
+ {
+ if(maVector.empty())
+ return 0;
+ else
+ return &maVector.front();
+ }
+
+ const basegfx::B2DPoint* end() const
+ {
+ if(maVector.empty())
+ return 0;
+ else
+ return (&maVector.back())+1;
+ }
+
+ basegfx::B2DPoint* begin()
+ {
+ if(maVector.empty())
+ return 0;
+ else
+ return &maVector.front();
+ }
+
+ basegfx::B2DPoint* end()
+ {
+ if(maVector.empty())
+ return 0;
+ else
+ return (&maVector.back())+1;
+ }
+};
+
+//////////////////////////////////////////////////////////////////////////////
+
+class ControlVectorPair2D
+{
+ basegfx::B2DVector maPrevVector;
+ basegfx::B2DVector maNextVector;
+
+public:
+ const basegfx::B2DVector& getPrevVector() const
+ {
+ return maPrevVector;
+ }
+
+ void setPrevVector(const basegfx::B2DVector& rValue)
+ {
+ if(rValue != maPrevVector)
+ maPrevVector = rValue;
+ }
+
+ const basegfx::B2DVector& getNextVector() const
+ {
+ return maNextVector;
+ }
+
+ void setNextVector(const basegfx::B2DVector& rValue)
+ {
+ if(rValue != maNextVector)
+ maNextVector = rValue;
+ }
+
+ bool operator==(const ControlVectorPair2D& rData) const
+ {
+ return (maPrevVector == rData.getPrevVector() && maNextVector == rData.getNextVector());
+ }
+
+ void flip()
+ {
+ ::std::swap(maPrevVector, maNextVector);
+ }
+};
+
+//////////////////////////////////////////////////////////////////////////////
+
+class ControlVectorArray2D
+{
+ typedef ::std::vector< ControlVectorPair2D > ControlVectorPair2DVector;
+
+ ControlVectorPair2DVector maVector;
+ sal_uInt32 mnUsedVectors;
+
+public:
+ explicit ControlVectorArray2D(sal_uInt32 nCount)
+ : maVector(nCount),
+ mnUsedVectors(0)
+ {}
+
+ ControlVectorArray2D(const ControlVectorArray2D& rOriginal, sal_uInt32 nIndex, sal_uInt32 nCount)
+ : maVector(),
+ mnUsedVectors(0)
+ {
+ ControlVectorPair2DVector::const_iterator aStart(rOriginal.maVector.begin());
+ aStart += nIndex;
+ ControlVectorPair2DVector::const_iterator aEnd(aStart);
+ aEnd += nCount;
+ maVector.reserve(nCount);
+
+ for(; aStart != aEnd; aStart++)
+ {
+ if(!aStart->getPrevVector().equalZero())
+ mnUsedVectors++;
+
+ if(!aStart->getNextVector().equalZero())
+ mnUsedVectors++;
+
+ maVector.push_back(*aStart);
+ }
+ }
+
+ sal_uInt32 count() const
+ {
+ return maVector.size();
+ }
+
+ bool operator==(const ControlVectorArray2D& rCandidate) const
+ {
+ return (maVector == rCandidate.maVector);
+ }
+
+ bool isUsed() const
+ {
+ return (0 != mnUsedVectors);
+ }
+
+ const basegfx::B2DVector& getPrevVector(sal_uInt32 nIndex) const
+ {
+ return maVector[nIndex].getPrevVector();
+ }
+
+ void setPrevVector(sal_uInt32 nIndex, const basegfx::B2DVector& rValue)
+ {
+ bool bWasUsed(mnUsedVectors && !maVector[nIndex].getPrevVector().equalZero());
+ bool bIsUsed(!rValue.equalZero());
+
+ if(bWasUsed)
+ {
+ if(bIsUsed)
+ {
+ maVector[nIndex].setPrevVector(rValue);
+ }
+ else
+ {
+ maVector[nIndex].setPrevVector(basegfx::B2DVector::getEmptyVector());
+ mnUsedVectors--;
+ }
+ }
+ else
+ {
+ if(bIsUsed)
+ {
+ maVector[nIndex].setPrevVector(rValue);
+ mnUsedVectors++;
+ }
+ }
+ }
+
+ const basegfx::B2DVector& getNextVector(sal_uInt32 nIndex) const
+ {
+ return maVector[nIndex].getNextVector();
+ }
+
+ void setNextVector(sal_uInt32 nIndex, const basegfx::B2DVector& rValue)
+ {
+ bool bWasUsed(mnUsedVectors && !maVector[nIndex].getNextVector().equalZero());
+ bool bIsUsed(!rValue.equalZero());
+
+ if(bWasUsed)
+ {
+ if(bIsUsed)
+ {
+ maVector[nIndex].setNextVector(rValue);
+ }
+ else
+ {
+ maVector[nIndex].setNextVector(basegfx::B2DVector::getEmptyVector());
+ mnUsedVectors--;
+ }
+ }
+ else
+ {
+ if(bIsUsed)
+ {
+ maVector[nIndex].setNextVector(rValue);
+ mnUsedVectors++;
+ }
+ }
+ }
+
+ void append(const ControlVectorPair2D& rValue)
+ {
+ maVector.push_back(rValue);
+
+ if(!rValue.getPrevVector().equalZero())
+ mnUsedVectors += 1;
+
+ if(!rValue.getNextVector().equalZero())
+ mnUsedVectors += 1;
+ }
+
+ void insert(sal_uInt32 nIndex, const ControlVectorPair2D& rValue, sal_uInt32 nCount)
+ {
+ if(nCount)
+ {
+ // add nCount copies of rValue
+ ControlVectorPair2DVector::iterator aIndex(maVector.begin());
+ aIndex += nIndex;
+ maVector.insert(aIndex, nCount, rValue);
+
+ if(!rValue.getPrevVector().equalZero())
+ mnUsedVectors += nCount;
+
+ if(!rValue.getNextVector().equalZero())
+ mnUsedVectors += nCount;
+ }
+ }
+
+ void insert(sal_uInt32 nIndex, const ControlVectorArray2D& rSource)
+ {
+ const sal_uInt32 nCount(rSource.maVector.size());
+
+ if(nCount)
+ {
+ // insert data
+ ControlVectorPair2DVector::iterator aIndex(maVector.begin());
+ aIndex += nIndex;
+ ControlVectorPair2DVector::const_iterator aStart(rSource.maVector.begin());
+ ControlVectorPair2DVector::const_iterator aEnd(rSource.maVector.end());
+ maVector.insert(aIndex, aStart, aEnd);
+
+ for(; aStart != aEnd; aStart++)
+ {
+ if(!aStart->getPrevVector().equalZero())
+ mnUsedVectors++;
+
+ if(!aStart->getNextVector().equalZero())
+ mnUsedVectors++;
+ }
+ }
+ }
+
+ void remove(sal_uInt32 nIndex, sal_uInt32 nCount)
+ {
+ if(nCount)
+ {
+ const ControlVectorPair2DVector::iterator aDeleteStart(maVector.begin() + nIndex);
+ const ControlVectorPair2DVector::iterator aDeleteEnd(aDeleteStart + nCount);
+ ControlVectorPair2DVector::const_iterator aStart(aDeleteStart);
+
+ for(; mnUsedVectors && aStart != aDeleteEnd; aStart++)
+ {
+ if(!aStart->getPrevVector().equalZero())
+ mnUsedVectors--;
+
+ if(mnUsedVectors && !aStart->getNextVector().equalZero())
+ mnUsedVectors--;
+ }
+
+ // remove point data
+ maVector.erase(aDeleteStart, aDeleteEnd);
+ }
+ }
+
+ void flip(bool bIsClosed)
+ {
+ if(maVector.size() > 1)
+ {
+ // to keep the same point at index 0, just flip all points except the
+ // first one when closed
+ const sal_uInt32 nHalfSize(bIsClosed ? (maVector.size() - 1) >> 1 : maVector.size() >> 1);
+ ControlVectorPair2DVector::iterator aStart(bIsClosed ? maVector.begin() + 1 : maVector.begin());
+ ControlVectorPair2DVector::iterator aEnd(maVector.end() - 1);
+
+ for(sal_uInt32 a(0); a < nHalfSize; a++)
+ {
+ // swap Prev and Next
+ aStart->flip();
+ aEnd->flip();
+
+ // swap entries
+ ::std::swap(*aStart, *aEnd);
+
+ aStart++;
+ aEnd--;
+ }
+
+ if(aStart == aEnd)
+ {
+ // swap Prev and Next at middle element (if exists)
+ aStart->flip();
+ }
+
+ if(bIsClosed)
+ {
+ // swap Prev and Next at start element
+ maVector.begin()->flip();
+ }
+ }
+ }
+};
+
+//////////////////////////////////////////////////////////////////////////////
+
+class ImplBufferedData
+{
+private:
+ // Possibility to hold the last subdivision
+ boost::scoped_ptr< basegfx::B2DPolygon > mpDefaultSubdivision;
+
+ // Possibility to hold the last B2DRange calculation
+ boost::scoped_ptr< basegfx::B2DRange > mpB2DRange;
+
+public:
+ ImplBufferedData()
+ : mpDefaultSubdivision(),
+ mpB2DRange()
+ {}
+
+ const basegfx::B2DPolygon& getDefaultAdaptiveSubdivision(const basegfx::B2DPolygon& rSource) const
+ {
+ if(!mpDefaultSubdivision)
+ {
+ const_cast< ImplBufferedData* >(this)->mpDefaultSubdivision.reset(new basegfx::B2DPolygon(basegfx::tools::adaptiveSubdivideByCount(rSource, 9)));
+ }
+
+ return *mpDefaultSubdivision;
+ }
+
+ const basegfx::B2DRange& getB2DRange(const basegfx::B2DPolygon& rSource) const
+ {
+ if(!mpB2DRange)
+ {
+ basegfx::B2DRange aNewRange;
+ const sal_uInt32 nPointCount(rSource.count());
+
+ if(nPointCount)
+ {
+ for(sal_uInt32 a(0); a < nPointCount; a++)
+ {
+ aNewRange.expand(rSource.getB2DPoint(a));
+ }
+
+ if(rSource.areControlPointsUsed())
+ {
+ const sal_uInt32 nEdgeCount(rSource.isClosed() ? nPointCount : nPointCount - 1);
+
+ if(nEdgeCount)
+ {
+ basegfx::B2DCubicBezier aEdge;
+ aEdge.setStartPoint(rSource.getB2DPoint(0));
+
+ for(sal_uInt32 b(0); b < nEdgeCount; b++)
+ {
+ const sal_uInt32 nNextIndex((b + 1) % nPointCount);
+ aEdge.setControlPointA(rSource.getNextControlPoint(b));
+ aEdge.setControlPointB(rSource.getPrevControlPoint(nNextIndex));
+ aEdge.setEndPoint(rSource.getB2DPoint(nNextIndex));
+
+ if(aEdge.isBezier())
+ {
+ const basegfx::B2DRange aBezierRangeWithControlPoints(aEdge.getRange());
+
+ if(!aNewRange.isInside(aBezierRangeWithControlPoints))
+ {
+ // the range with control points of the current edge is not completely
+ // inside the current range without control points. Expand current range by
+ // subdividing the bezier segment.
+ // Ideal here is a subdivision at the extreme values, so use
+ // getAllExtremumPositions to get all extremas in one run
+ ::std::vector< double > aExtremas;
+
+ aExtremas.reserve(4);
+ aEdge.getAllExtremumPositions(aExtremas);
+
+ const sal_uInt32 nExtremaCount(aExtremas.size());
+
+ for(sal_uInt32 c(0); c < nExtremaCount; c++)
+ {
+ aNewRange.expand(aEdge.interpolatePoint(aExtremas[c]));
+ }
+ }
+ }
+
+ // prepare next edge
+ aEdge.setStartPoint(aEdge.getEndPoint());
+ }
+ }
+ }
+ }
+
+ const_cast< ImplBufferedData* >(this)->mpB2DRange.reset(new basegfx::B2DRange(aNewRange));
+ }
+
+ return *mpB2DRange;
+ }
+};
+
+//////////////////////////////////////////////////////////////////////////////
+
+class ImplB2DPolygon
+{
+private:
+ // The point vector. This vector exists always and defines the
+ // count of members.
+ CoordinateDataArray2D maPoints;
+
+ // The control point vectors. This vectors are created on demand
+ // and may be zero.
+ boost::scoped_ptr< ControlVectorArray2D > mpControlVector;
+
+ // buffered data for e.g. default subdivision and range
+ boost::scoped_ptr< ImplBufferedData > mpBufferedData;
+
+ // flag which decides if this polygon is opened or closed
+ bool mbIsClosed;
+
+public:
+ const basegfx::B2DPolygon& getDefaultAdaptiveSubdivision(const basegfx::B2DPolygon& rSource) const
+ {
+ if(!mpControlVector || !mpControlVector->isUsed())
+ {
+ return rSource;
+ }
+
+ if(!mpBufferedData)
+ {
+ const_cast< ImplB2DPolygon* >(this)->mpBufferedData.reset(new ImplBufferedData);
+ }
+
+ return mpBufferedData->getDefaultAdaptiveSubdivision(rSource);
+ }
+
+ const basegfx::B2DRange& getB2DRange(const basegfx::B2DPolygon& rSource) const
+ {
+ if(!mpBufferedData)
+ {
+ const_cast< ImplB2DPolygon* >(this)->mpBufferedData.reset(new ImplBufferedData);
+ }
+
+ return mpBufferedData->getB2DRange(rSource);
+ }
+
+ ImplB2DPolygon()
+ : maPoints(0),
+ mpControlVector(),
+ mpBufferedData(),
+ mbIsClosed(false)
+ {}
+
+ ImplB2DPolygon(const ImplB2DPolygon& rToBeCopied)
+ : maPoints(rToBeCopied.maPoints),
+ mpControlVector(),
+ mpBufferedData(),
+ mbIsClosed(rToBeCopied.mbIsClosed)
+ {
+ // complete initialization using copy
+ if(rToBeCopied.mpControlVector && rToBeCopied.mpControlVector->isUsed())
+ {
+ mpControlVector.reset( new ControlVectorArray2D(*rToBeCopied.mpControlVector) );
+ }
+ }
+
+ ImplB2DPolygon(const ImplB2DPolygon& rToBeCopied, sal_uInt32 nIndex, sal_uInt32 nCount)
+ : maPoints(rToBeCopied.maPoints, nIndex, nCount),
+ mpControlVector(),
+ mpBufferedData(),
+ mbIsClosed(rToBeCopied.mbIsClosed)
+ {
+ // complete initialization using partly copy
+ if(rToBeCopied.mpControlVector && rToBeCopied.mpControlVector->isUsed())
+ {
+ mpControlVector.reset( new ControlVectorArray2D(*rToBeCopied.mpControlVector, nIndex, nCount) );
+
+ if(!mpControlVector->isUsed())
+ mpControlVector.reset();
+ }
+ }
+
+ ImplB2DPolygon& operator=( const ImplB2DPolygon& rToBeCopied )
+ {
+ maPoints = rToBeCopied.maPoints;
+ mpControlVector.reset();
+ mpBufferedData.reset();
+ mbIsClosed = rToBeCopied.mbIsClosed;
+
+ // complete initialization using copy
+ if(rToBeCopied.mpControlVector && rToBeCopied.mpControlVector->isUsed())
+ mpControlVector.reset( new ControlVectorArray2D(*rToBeCopied.mpControlVector) );
+
+ return *this;
+ }
+
+ sal_uInt32 count() const
+ {
+ return maPoints.count();
+ }
+
+ bool isClosed() const
+ {
+ return mbIsClosed;
+ }
+
+ void setClosed(bool bNew)
+ {
+ if(bNew != mbIsClosed)
+ {
+ mpBufferedData.reset();
+ mbIsClosed = bNew;
+ }
+ }
+
+ bool operator==(const ImplB2DPolygon& rCandidate) const
+ {
+ if(mbIsClosed == rCandidate.mbIsClosed)
+ {
+ if(maPoints == rCandidate.maPoints)
+ {
+ bool bControlVectorsAreEqual(true);
+
+ if(mpControlVector)
+ {
+ if(rCandidate.mpControlVector)
+ {
+ bControlVectorsAreEqual = ((*mpControlVector) == (*rCandidate.mpControlVector));
+ }
+ else
+ {
+ // candidate has no control vector, so it's assumed all unused.
+ bControlVectorsAreEqual = !mpControlVector->isUsed();
+ }
+ }
+ else
+ {
+ if(rCandidate.mpControlVector)
+ {
+ // we have no control vector, so it's assumed all unused.
+ bControlVectorsAreEqual = !rCandidate.mpControlVector->isUsed();
+ }
+ }
+
+ if(bControlVectorsAreEqual)
+ {
+ return true;
+ }
+ }
+ }
+
+ return false;
+ }
+
+ const basegfx::B2DPoint& getPoint(sal_uInt32 nIndex) const
+ {
+ return maPoints.getCoordinate(nIndex);
+ }
+
+ void setPoint(sal_uInt32 nIndex, const basegfx::B2DPoint& rValue)
+ {
+ mpBufferedData.reset();
+ maPoints.setCoordinate(nIndex, rValue);
+ }
+
+ void reserve(sal_uInt32 nCount)
+ {
+ maPoints.reserve(nCount);
+ }
+
+ void append(const basegfx::B2DPoint& rPoint)
+ {
+ mpBufferedData.reset(); // TODO: is this needed?
+ const CoordinateData2D aCoordinate(rPoint);
+ maPoints.append(aCoordinate);
+
+ if(mpControlVector)
+ {
+ const ControlVectorPair2D aVectorPair;
+ mpControlVector->append(aVectorPair);
+ }
+ }
+
+ void insert(sal_uInt32 nIndex, const basegfx::B2DPoint& rPoint, sal_uInt32 nCount)
+ {
+ if(nCount)
+ {
+ mpBufferedData.reset();
+ CoordinateData2D aCoordinate(rPoint);
+ maPoints.insert(nIndex, aCoordinate, nCount);
+
+ if(mpControlVector)
+ {
+ ControlVectorPair2D aVectorPair;
+ mpControlVector->insert(nIndex, aVectorPair, nCount);
+ }
+ }
+ }
+
+ const basegfx::B2DVector& getPrevControlVector(sal_uInt32 nIndex) const
+ {
+ if(mpControlVector)
+ {
+ return mpControlVector->getPrevVector(nIndex);
+ }
+ else
+ {
+ return basegfx::B2DVector::getEmptyVector();
+ }
+ }
+
+ void setPrevControlVector(sal_uInt32 nIndex, const basegfx::B2DVector& rValue)
+ {
+ if(!mpControlVector)
+ {
+ if(!rValue.equalZero())
+ {
+ mpBufferedData.reset();
+ mpControlVector.reset( new ControlVectorArray2D(maPoints.count()) );
+ mpControlVector->setPrevVector(nIndex, rValue);
+ }
+ }
+ else
+ {
+ mpBufferedData.reset();
+ mpControlVector->setPrevVector(nIndex, rValue);
+
+ if(!mpControlVector->isUsed())
+ mpControlVector.reset();
+ }
+ }
+
+ const basegfx::B2DVector& getNextControlVector(sal_uInt32 nIndex) const
+ {
+ if(mpControlVector)
+ {
+ return mpControlVector->getNextVector(nIndex);
+ }
+ else
+ {
+ return basegfx::B2DVector::getEmptyVector();
+ }
+ }
+
+ void setNextControlVector(sal_uInt32 nIndex, const basegfx::B2DVector& rValue)
+ {
+ if(!mpControlVector)
+ {
+ if(!rValue.equalZero())
+ {
+ mpBufferedData.reset();
+ mpControlVector.reset( new ControlVectorArray2D(maPoints.count()) );
+ mpControlVector->setNextVector(nIndex, rValue);
+ }
+ }
+ else
+ {
+ mpBufferedData.reset();
+ mpControlVector->setNextVector(nIndex, rValue);
+
+ if(!mpControlVector->isUsed())
+ mpControlVector.reset();
+ }
+ }
+
+ bool areControlPointsUsed() const
+ {
+ return (mpControlVector && mpControlVector->isUsed());
+ }
+
+ void resetControlVectors(sal_uInt32 nIndex)
+ {
+ setPrevControlVector(nIndex, basegfx::B2DVector::getEmptyVector());
+ setNextControlVector(nIndex, basegfx::B2DVector::getEmptyVector());
+ }
+
+ void resetControlVectors()
+ {
+ mpBufferedData.reset();
+ mpControlVector.reset();
+ }
+
+ void setControlVectors(sal_uInt32 nIndex, const basegfx::B2DVector& rPrev, const basegfx::B2DVector& rNext)
+ {
+ setPrevControlVector(nIndex, rPrev);
+ setNextControlVector(nIndex, rNext);
+ }
+
+ void appendBezierSegment(const basegfx::B2DVector& rNext, const basegfx::B2DVector& rPrev, const basegfx::B2DPoint& rPoint)
+ {
+ mpBufferedData.reset();
+ const sal_uInt32 nCount(maPoints.count());
+
+ if(nCount)
+ {
+ setNextControlVector(nCount - 1, rNext);
+ }
+
+ insert(nCount, rPoint, 1);
+ setPrevControlVector(nCount, rPrev);
+ }
+
+ void insert(sal_uInt32 nIndex, const ImplB2DPolygon& rSource)
+ {
+ const sal_uInt32 nCount(rSource.maPoints.count());
+
+ if(nCount)
+ {
+ mpBufferedData.reset();
+
+ if(rSource.mpControlVector && rSource.mpControlVector->isUsed() && !mpControlVector)
+ {
+ mpControlVector.reset( new ControlVectorArray2D(maPoints.count()) );
+ }
+
+ maPoints.insert(nIndex, rSource.maPoints);
+
+ if(rSource.mpControlVector)
+ {
+ mpControlVector->insert(nIndex, *rSource.mpControlVector);
+
+ if(!mpControlVector->isUsed())
+ mpControlVector.reset();
+ }
+ else if(mpControlVector)
+ {
+ ControlVectorPair2D aVectorPair;
+ mpControlVector->insert(nIndex, aVectorPair, nCount);
+ }
+ }
+ }
+
+ void remove(sal_uInt32 nIndex, sal_uInt32 nCount)
+ {
+ if(nCount)
+ {
+ mpBufferedData.reset();
+ maPoints.remove(nIndex, nCount);
+
+ if(mpControlVector)
+ {
+ mpControlVector->remove(nIndex, nCount);
+
+ if(!mpControlVector->isUsed())
+ mpControlVector.reset();
+ }
+ }
+ }
+
+ void flip()
+ {
+ if(maPoints.count() > 1)
+ {
+ mpBufferedData.reset();
+
+ // flip points
+ maPoints.flip(mbIsClosed);
+
+ if(mpControlVector)
+ {
+ // flip control vector
+ mpControlVector->flip(mbIsClosed);
+ }
+ }
+ }
+
+ bool hasDoublePoints() const
+ {
+ if(mbIsClosed)
+ {
+ // check for same start and end point
+ const sal_uInt32 nIndex(maPoints.count() - 1);
+
+ if(maPoints.getCoordinate(0) == maPoints.getCoordinate(nIndex))
+ {
+ if(mpControlVector)
+ {
+ if(mpControlVector->getNextVector(nIndex).equalZero() && mpControlVector->getPrevVector(0).equalZero())
+ {
+ return true;
+ }
+ }
+ else
+ {
+ return true;
+ }
+ }
+ }
+
+ // test for range
+ for(sal_uInt32 a(0); a < maPoints.count() - 1; a++)
+ {
+ if(maPoints.getCoordinate(a) == maPoints.getCoordinate(a + 1))
+ {
+ if(mpControlVector)
+ {
+ if(mpControlVector->getNextVector(a).equalZero() && mpControlVector->getPrevVector(a + 1).equalZero())
+ {
+ return true;
+ }
+ }
+ else
+ {
+ return true;
+ }
+ }
+ }
+
+ return false;
+ }
+
+ void removeDoublePointsAtBeginEnd()
+ {
+ // Only remove DoublePoints at Begin and End when poly is closed
+ if(mbIsClosed)
+ {
+ mpBufferedData.reset();
+
+ if(mpControlVector)
+ {
+ bool bRemove;
+
+ do
+ {
+ bRemove = false;
+
+ if(maPoints.count() > 1)
+ {
+ const sal_uInt32 nIndex(maPoints.count() - 1);
+
+ if(maPoints.getCoordinate(0) == maPoints.getCoordinate(nIndex))
+ {
+ if(mpControlVector)
+ {
+ if(mpControlVector->getNextVector(nIndex).equalZero() && mpControlVector->getPrevVector(0).equalZero())
+ {
+ bRemove = true;
+ }
+ }
+ else
+ {
+ bRemove = true;
+ }
+ }
+ }
+
+ if(bRemove)
+ {
+ const sal_uInt32 nIndex(maPoints.count() - 1);
+
+ if(mpControlVector && !mpControlVector->getPrevVector(nIndex).equalZero())
+ {
+ mpControlVector->setPrevVector(0, mpControlVector->getPrevVector(nIndex));
+ }
+
+ remove(nIndex, 1);
+ }
+ }
+ while(bRemove);
+ }
+ else
+ {
+ maPoints.removeDoublePointsAtBeginEnd();
+ }
+ }
+ }
+
+ void removeDoublePointsWholeTrack()
+ {
+ mpBufferedData.reset();
+
+ if(mpControlVector)
+ {
+ sal_uInt32 nIndex(0);
+
+ // test as long as there are at least two points and as long as the index
+ // is smaller or equal second last point
+ while((maPoints.count() > 1) && (nIndex <= maPoints.count() - 2))
+ {
+ bool bRemove(maPoints.getCoordinate(nIndex) == maPoints.getCoordinate(nIndex + 1));
+
+ if(bRemove)
+ {
+ if(mpControlVector)
+ {
+ if(!mpControlVector->getNextVector(nIndex).equalZero() || !mpControlVector->getPrevVector(nIndex + 1).equalZero())
+ {
+ bRemove = false;
+ }
+ }
+ }
+
+ if(bRemove)
+ {
+ if(mpControlVector && !mpControlVector->getPrevVector(nIndex).equalZero())
+ {
+ mpControlVector->setPrevVector(nIndex + 1, mpControlVector->getPrevVector(nIndex));
+ }
+
+ // if next is same as index and the control vectors are unused, delete index
+ remove(nIndex, 1);
+ }
+ else
+ {
+ // if different, step forward
+ nIndex++;
+ }
+ }
+ }
+ else
+ {
+ maPoints.removeDoublePointsWholeTrack();
+ }
+ }
+
+ void transform(const basegfx::B2DHomMatrix& rMatrix)
+ {
+ mpBufferedData.reset();
+
+ if(mpControlVector)
+ {
+ for(sal_uInt32 a(0); a < maPoints.count(); a++)
+ {
+ basegfx::B2DPoint aCandidate = maPoints.getCoordinate(a);
+
+ if(mpControlVector->isUsed())
+ {
+ const basegfx::B2DVector& rPrevVector(mpControlVector->getPrevVector(a));
+ const basegfx::B2DVector& rNextVector(mpControlVector->getNextVector(a));
+
+ if(!rPrevVector.equalZero())
+ {
+ basegfx::B2DVector aPrevVector(rMatrix * rPrevVector);
+ mpControlVector->setPrevVector(a, aPrevVector);
+ }
+
+ if(!rNextVector.equalZero())
+ {
+ basegfx::B2DVector aNextVector(rMatrix * rNextVector);
+ mpControlVector->setNextVector(a, aNextVector);
+ }
+ }
+
+ aCandidate *= rMatrix;
+ maPoints.setCoordinate(a, aCandidate);
+ }
+
+ if(!mpControlVector->isUsed())
+ mpControlVector.reset();
+ }
+ else
+ {
+ maPoints.transform(rMatrix);
+ }
+ }
+
+ const basegfx::B2DPoint* begin() const
+ {
+ return maPoints.begin();
+ }
+
+ const basegfx::B2DPoint* end() const
+ {
+ return maPoints.end();
+ }
+
+ basegfx::B2DPoint* begin()
+ {
+ mpBufferedData.reset();
+ return maPoints.begin();
+ }
+
+ basegfx::B2DPoint* end()
+ {
+ mpBufferedData.reset();
+ return maPoints.end();
+ }
+};
+
+//////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+ namespace
+ {
+ struct DefaultPolygon: public rtl::Static<B2DPolygon::ImplType, DefaultPolygon> {};
+ }
+
+ B2DPolygon::B2DPolygon()
+ : mpPolygon(DefaultPolygon::get())
+ {}
+
+ B2DPolygon::B2DPolygon(const B2DPolygon& rPolygon)
+ : mpPolygon(rPolygon.mpPolygon)
+ {}
+
+ B2DPolygon::B2DPolygon(const B2DPolygon& rPolygon, sal_uInt32 nIndex, sal_uInt32 nCount)
+ : mpPolygon(ImplB2DPolygon(*rPolygon.mpPolygon, nIndex, nCount))
+ {
+ // TODO(P2): one extra temporary here (cow_wrapper copies
+ // given ImplB2DPolygon into its internal impl_t wrapper type)
+ OSL_ENSURE(nIndex + nCount <= rPolygon.mpPolygon->count(), "B2DPolygon constructor outside range (!)");
+ }
+
+ B2DPolygon::~B2DPolygon()
+ {
+ }
+
+ B2DPolygon& B2DPolygon::operator=(const B2DPolygon& rPolygon)
+ {
+ mpPolygon = rPolygon.mpPolygon;
+ return *this;
+ }
+
+ void B2DPolygon::makeUnique()
+ {
+ mpPolygon.make_unique();
+ }
+
+ bool B2DPolygon::operator==(const B2DPolygon& rPolygon) const
+ {
+ if(mpPolygon.same_object(rPolygon.mpPolygon))
+ return true;
+
+ return ((*mpPolygon) == (*rPolygon.mpPolygon));
+ }
+
+ bool B2DPolygon::operator!=(const B2DPolygon& rPolygon) const
+ {
+ return !(*this == rPolygon);
+ }
+
+ sal_uInt32 B2DPolygon::count() const
+ {
+ return mpPolygon->count();
+ }
+
+ B2DPoint B2DPolygon::getB2DPoint(sal_uInt32 nIndex) const
+ {
+ OSL_ENSURE(nIndex < mpPolygon->count(), "B2DPolygon access outside range (!)");
+
+ return mpPolygon->getPoint(nIndex);
+ }
+
+ void B2DPolygon::setB2DPoint(sal_uInt32 nIndex, const B2DPoint& rValue)
+ {
+ OSL_ENSURE(nIndex < mpPolygon->count(), "B2DPolygon access outside range (!)");
+
+ if(getB2DPoint(nIndex) != rValue)
+ {
+ mpPolygon->setPoint(nIndex, rValue);
+ }
+ }
+
+ void B2DPolygon::reserve(sal_uInt32 nCount)
+ {
+ mpPolygon->reserve(nCount);
+ }
+
+ void B2DPolygon::insert(sal_uInt32 nIndex, const B2DPoint& rPoint, sal_uInt32 nCount)
+ {
+ OSL_ENSURE(nIndex <= mpPolygon->count(), "B2DPolygon Insert outside range (!)");
+
+ if(nCount)
+ {
+ mpPolygon->insert(nIndex, rPoint, nCount);
+ }
+ }
+
+ void B2DPolygon::append(const B2DPoint& rPoint, sal_uInt32 nCount)
+ {
+ if(nCount)
+ {
+ mpPolygon->insert(mpPolygon->count(), rPoint, nCount);
+ }
+ }
+
+ void B2DPolygon::append(const B2DPoint& rPoint)
+ {
+ mpPolygon->append(rPoint);
+ }
+
+ B2DPoint B2DPolygon::getPrevControlPoint(sal_uInt32 nIndex) const
+ {
+ OSL_ENSURE(nIndex < mpPolygon->count(), "B2DPolygon access outside range (!)");
+
+ if(mpPolygon->areControlPointsUsed())
+ {
+ return mpPolygon->getPoint(nIndex) + mpPolygon->getPrevControlVector(nIndex);
+ }
+ else
+ {
+ return mpPolygon->getPoint(nIndex);
+ }
+ }
+
+ B2DPoint B2DPolygon::getNextControlPoint(sal_uInt32 nIndex) const
+ {
+ OSL_ENSURE(nIndex < mpPolygon->count(), "B2DPolygon access outside range (!)");
+
+ if(mpPolygon->areControlPointsUsed())
+ {
+ return mpPolygon->getPoint(nIndex) + mpPolygon->getNextControlVector(nIndex);
+ }
+ else
+ {
+ return mpPolygon->getPoint(nIndex);
+ }
+ }
+
+ void B2DPolygon::setPrevControlPoint(sal_uInt32 nIndex, const B2DPoint& rValue)
+ {
+ OSL_ENSURE(nIndex < mpPolygon->count(), "B2DPolygon access outside range (!)");
+ const basegfx::B2DVector aNewVector(rValue - mpPolygon->getPoint(nIndex));
+
+ if(mpPolygon->getPrevControlVector(nIndex) != aNewVector)
+ {
+ mpPolygon->setPrevControlVector(nIndex, aNewVector);
+ }
+ }
+
+ void B2DPolygon::setNextControlPoint(sal_uInt32 nIndex, const B2DPoint& rValue)
+ {
+ OSL_ENSURE(nIndex < mpPolygon->count(), "B2DPolygon access outside range (!)");
+ const basegfx::B2DVector aNewVector(rValue - mpPolygon->getPoint(nIndex));
+
+ if(mpPolygon->getNextControlVector(nIndex) != aNewVector)
+ {
+ mpPolygon->setNextControlVector(nIndex, aNewVector);
+ }
+ }
+
+ void B2DPolygon::setControlPoints(sal_uInt32 nIndex, const basegfx::B2DPoint& rPrev, const basegfx::B2DPoint& rNext)
+ {
+ OSL_ENSURE(nIndex < mpPolygon->count(), "B2DPolygon access outside range (!)");
+ const B2DPoint aPoint(mpPolygon->getPoint(nIndex));
+ const basegfx::B2DVector aNewPrev(rPrev - aPoint);
+ const basegfx::B2DVector aNewNext(rNext - aPoint);
+
+ if(mpPolygon->getPrevControlVector(nIndex) != aNewPrev || mpPolygon->getNextControlVector(nIndex) != aNewNext)
+ {
+ mpPolygon->setControlVectors(nIndex, aNewPrev, aNewNext);
+ }
+ }
+
+ void B2DPolygon::resetPrevControlPoint(sal_uInt32 nIndex)
+ {
+ OSL_ENSURE(nIndex < mpPolygon->count(), "B2DPolygon access outside range (!)");
+
+ if(mpPolygon->areControlPointsUsed() && !mpPolygon->getPrevControlVector(nIndex).equalZero())
+ {
+ mpPolygon->setPrevControlVector(nIndex, B2DVector::getEmptyVector());
+ }
+ }
+
+ void B2DPolygon::resetNextControlPoint(sal_uInt32 nIndex)
+ {
+ OSL_ENSURE(nIndex < mpPolygon->count(), "B2DPolygon access outside range (!)");
+
+ if(mpPolygon->areControlPointsUsed() && !mpPolygon->getNextControlVector(nIndex).equalZero())
+ {
+ mpPolygon->setNextControlVector(nIndex, B2DVector::getEmptyVector());
+ }
+ }
+
+ void B2DPolygon::resetControlPoints(sal_uInt32 nIndex)
+ {
+ OSL_ENSURE(nIndex < mpPolygon->count(), "B2DPolygon access outside range (!)");
+
+ if(mpPolygon->areControlPointsUsed() &&
+ (!mpPolygon->getPrevControlVector(nIndex).equalZero() || !mpPolygon->getNextControlVector(nIndex).equalZero()))
+ {
+ mpPolygon->resetControlVectors(nIndex);
+ }
+ }
+
+ void B2DPolygon::resetControlPoints()
+ {
+ if(mpPolygon->areControlPointsUsed())
+ {
+ mpPolygon->resetControlVectors();
+ }
+ }
+
+ void B2DPolygon::appendBezierSegment(
+ const B2DPoint& rNextControlPoint,
+ const B2DPoint& rPrevControlPoint,
+ const B2DPoint& rPoint)
+ {
+ const B2DVector aNewNextVector(mpPolygon->count() ? B2DVector(rNextControlPoint - mpPolygon->getPoint(mpPolygon->count() - 1)) : B2DVector::getEmptyVector());
+ const B2DVector aNewPrevVector(rPrevControlPoint - rPoint);
+
+ if(aNewNextVector.equalZero() && aNewPrevVector.equalZero())
+ {
+ mpPolygon->insert(mpPolygon->count(), rPoint, 1);
+ }
+ else
+ {
+ mpPolygon->appendBezierSegment(aNewNextVector, aNewPrevVector, rPoint);
+ }
+ }
+
+ bool B2DPolygon::areControlPointsUsed() const
+ {
+ return mpPolygon->areControlPointsUsed();
+ }
+
+ bool B2DPolygon::isPrevControlPointUsed(sal_uInt32 nIndex) const
+ {
+ OSL_ENSURE(nIndex < mpPolygon->count(), "B2DPolygon access outside range (!)");
+
+ return (mpPolygon->areControlPointsUsed() && !mpPolygon->getPrevControlVector(nIndex).equalZero());
+ }
+
+ bool B2DPolygon::isNextControlPointUsed(sal_uInt32 nIndex) const
+ {
+ OSL_ENSURE(nIndex < mpPolygon->count(), "B2DPolygon access outside range (!)");
+
+ return (mpPolygon->areControlPointsUsed() && !mpPolygon->getNextControlVector(nIndex).equalZero());
+ }
+
+ B2VectorContinuity B2DPolygon::getContinuityInPoint(sal_uInt32 nIndex) const
+ {
+ OSL_ENSURE(nIndex < mpPolygon->count(), "B2DPolygon access outside range (!)");
+
+ if(mpPolygon->areControlPointsUsed())
+ {
+ const B2DVector& rPrev(mpPolygon->getPrevControlVector(nIndex));
+ const B2DVector& rNext(mpPolygon->getNextControlVector(nIndex));
+
+ return getContinuity(rPrev, rNext);
+ }
+ else
+ {
+ return CONTINUITY_NONE;
+ }
+ }
+
+ bool B2DPolygon::isBezierSegment(sal_uInt32 nIndex) const
+ {
+ OSL_ENSURE(nIndex < mpPolygon->count(), "B2DPolygon access outside range (!)");
+
+ if(mpPolygon->areControlPointsUsed())
+ {
+ // Check if the edge exists
+ const bool bNextIndexValidWithoutClose(nIndex + 1 < mpPolygon->count());
+
+ if(bNextIndexValidWithoutClose || mpPolygon->isClosed())
+ {
+ const sal_uInt32 nNextIndex(bNextIndexValidWithoutClose ? nIndex + 1 : 0);
+ return (!mpPolygon->getPrevControlVector(nNextIndex).equalZero()
+ || !mpPolygon->getNextControlVector(nIndex).equalZero());
+ }
+ else
+ {
+ // no valid edge -> no bezier segment, even when local next
+ // vector may be used
+ return false;
+ }
+ }
+ else
+ {
+ // no control points -> no bezier segment
+ return false;
+ }
+ }
+
+ void B2DPolygon::getBezierSegment(sal_uInt32 nIndex, B2DCubicBezier& rTarget) const
+ {
+ OSL_ENSURE(nIndex < mpPolygon->count(), "B2DPolygon access outside range (!)");
+ const bool bNextIndexValidWithoutClose(nIndex + 1 < mpPolygon->count());
+
+ if(bNextIndexValidWithoutClose || mpPolygon->isClosed())
+ {
+ const sal_uInt32 nNextIndex(bNextIndexValidWithoutClose ? nIndex + 1 : 0);
+ rTarget.setStartPoint(mpPolygon->getPoint(nIndex));
+ rTarget.setEndPoint(mpPolygon->getPoint(nNextIndex));
+
+ if(mpPolygon->areControlPointsUsed())
+ {
+ rTarget.setControlPointA(rTarget.getStartPoint() + mpPolygon->getNextControlVector(nIndex));
+ rTarget.setControlPointB(rTarget.getEndPoint() + mpPolygon->getPrevControlVector(nNextIndex));
+ }
+ else
+ {
+ // no bezier, reset control poins at rTarget
+ rTarget.setControlPointA(rTarget.getStartPoint());
+ rTarget.setControlPointB(rTarget.getEndPoint());
+ }
+ }
+ else
+ {
+ // no valid edge at all, reset rTarget to current point
+ const B2DPoint aPoint(mpPolygon->getPoint(nIndex));
+ rTarget.setStartPoint(aPoint);
+ rTarget.setEndPoint(aPoint);
+ rTarget.setControlPointA(aPoint);
+ rTarget.setControlPointB(aPoint);
+ }
+ }
+
+ B2DPolygon B2DPolygon::getDefaultAdaptiveSubdivision() const
+ {
+ return mpPolygon->getDefaultAdaptiveSubdivision(*this);
+ }
+
+ B2DRange B2DPolygon::getB2DRange() const
+ {
+ return mpPolygon->getB2DRange(*this);
+ }
+
+ void B2DPolygon::insert(sal_uInt32 nIndex, const B2DPolygon& rPoly, sal_uInt32 nIndex2, sal_uInt32 nCount)
+ {
+ OSL_ENSURE(nIndex <= mpPolygon->count(), "B2DPolygon Insert outside range (!)");
+
+ if(rPoly.count())
+ {
+ if(!nCount)
+ {
+ nCount = rPoly.count();
+ }
+
+ if(0 == nIndex2 && nCount == rPoly.count())
+ {
+ mpPolygon->insert(nIndex, *rPoly.mpPolygon);
+ }
+ else
+ {
+ OSL_ENSURE(nIndex2 + nCount <= rPoly.mpPolygon->count(), "B2DPolygon Insert outside range (!)");
+ ImplB2DPolygon aTempPoly(*rPoly.mpPolygon, nIndex2, nCount);
+ mpPolygon->insert(nIndex, aTempPoly);
+ }
+ }
+ }
+
+ void B2DPolygon::append(const B2DPolygon& rPoly, sal_uInt32 nIndex, sal_uInt32 nCount)
+ {
+ if(rPoly.count())
+ {
+ if(!nCount)
+ {
+ nCount = rPoly.count();
+ }
+
+ if(0 == nIndex && nCount == rPoly.count())
+ {
+ mpPolygon->insert(mpPolygon->count(), *rPoly.mpPolygon);
+ }
+ else
+ {
+ OSL_ENSURE(nIndex + nCount <= rPoly.mpPolygon->count(), "B2DPolygon Append outside range (!)");
+ ImplB2DPolygon aTempPoly(*rPoly.mpPolygon, nIndex, nCount);
+ mpPolygon->insert(mpPolygon->count(), aTempPoly);
+ }
+ }
+ }
+
+ void B2DPolygon::remove(sal_uInt32 nIndex, sal_uInt32 nCount)
+ {
+ OSL_ENSURE(nIndex + nCount <= mpPolygon->count(), "B2DPolygon Remove outside range (!)");
+
+ if(nCount)
+ {
+ mpPolygon->remove(nIndex, nCount);
+ }
+ }
+
+ void B2DPolygon::clear()
+ {
+ mpPolygon = DefaultPolygon::get();
+ }
+
+ bool B2DPolygon::isClosed() const
+ {
+ return mpPolygon->isClosed();
+ }
+
+ void B2DPolygon::setClosed(bool bNew)
+ {
+ if(isClosed() != bNew)
+ {
+ mpPolygon->setClosed(bNew);
+ }
+ }
+
+ void B2DPolygon::flip()
+ {
+ if(count() > 1)
+ {
+ mpPolygon->flip();
+ }
+ }
+
+ bool B2DPolygon::hasDoublePoints() const
+ {
+ return (mpPolygon->count() > 1 && mpPolygon->hasDoublePoints());
+ }
+
+ void B2DPolygon::removeDoublePoints()
+ {
+ if(hasDoublePoints())
+ {
+ mpPolygon->removeDoublePointsAtBeginEnd();
+ mpPolygon->removeDoublePointsWholeTrack();
+ }
+ }
+
+ void B2DPolygon::transform(const B2DHomMatrix& rMatrix)
+ {
+ if(mpPolygon->count() && !rMatrix.isIdentity())
+ {
+ mpPolygon->transform(rMatrix);
+ }
+ }
+
+ const B2DPoint* B2DPolygon::begin() const
+ {
+ return mpPolygon->begin();
+ }
+
+ const B2DPoint* B2DPolygon::end() const
+ {
+ return mpPolygon->end();
+ }
+
+ B2DPoint* B2DPolygon::begin()
+ {
+ return mpPolygon->begin();
+ }
+
+ B2DPoint* B2DPolygon::end()
+ {
+ return mpPolygon->end();
+ }
+} // end of namespace basegfx
+
+//////////////////////////////////////////////////////////////////////////////
+// eof
diff --git a/basegfx/source/polygon/b2dpolygonclipper.cxx b/basegfx/source/polygon/b2dpolygonclipper.cxx
new file mode 100644
index 000000000000..6e5c7701e2ec
--- /dev/null
+++ b/basegfx/source/polygon/b2dpolygonclipper.cxx
@@ -0,0 +1,873 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basegfx.hxx"
+#include <basegfx/polygon/b2dpolygonclipper.hxx>
+#include <osl/diagnose.h>
+#include <basegfx/polygon/b2dpolygontools.hxx>
+#include <basegfx/numeric/ftools.hxx>
+#include <basegfx/matrix/b2dhommatrix.hxx>
+#include <basegfx/polygon/b2dpolypolygoncutter.hxx>
+#include <basegfx/polygon/b2dpolygoncutandtouch.hxx>
+#include <basegfx/polygon/b2dpolypolygontools.hxx>
+#include <basegfx/curve/b2dcubicbezier.hxx>
+#include <basegfx/tools/rectcliptools.hxx>
+#include <basegfx/matrix/b2dhommatrixtools.hxx>
+
+//////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+ namespace tools
+ {
+ B2DPolyPolygon clipPolygonOnParallelAxis(const B2DPolygon& rCandidate, bool bParallelToXAxis, bool bAboveAxis, double fValueOnOtherAxis, bool bStroke)
+ {
+ B2DPolyPolygon aRetval;
+
+ if(rCandidate.count())
+ {
+ const B2DRange aCandidateRange(getRange(rCandidate));
+
+ if(bParallelToXAxis && fTools::moreOrEqual(aCandidateRange.getMinY(), fValueOnOtherAxis))
+ {
+ // completely above and on the clip line. also true for curves.
+ if(bAboveAxis)
+ {
+ // add completely
+ aRetval.append(rCandidate);
+ }
+ }
+ else if(bParallelToXAxis && fTools::lessOrEqual(aCandidateRange.getMaxY(), fValueOnOtherAxis))
+ {
+ // completely below and on the clip line. also true for curves.
+ if(!bAboveAxis)
+ {
+ // add completely
+ aRetval.append(rCandidate);
+ }
+ }
+ else if(!bParallelToXAxis && fTools::moreOrEqual(aCandidateRange.getMinX(), fValueOnOtherAxis))
+ {
+ // completely right of and on the clip line. also true for curves.
+ if(bAboveAxis)
+ {
+ // add completely
+ aRetval.append(rCandidate);
+ }
+ }
+ else if(!bParallelToXAxis && fTools::lessOrEqual(aCandidateRange.getMaxX(), fValueOnOtherAxis))
+ {
+ // completely left of and on the clip line. also true for curves.
+ if(!bAboveAxis)
+ {
+ // add completely
+ aRetval.append(rCandidate);
+ }
+ }
+ else
+ {
+ // add cuts with axis to polygon, including bezier segments
+ // Build edge to cut with. Make it a little big longer than needed for
+ // numerical stability. We want to cut against the edge seen as endless
+ // ray here, but addPointsAtCuts() will limit itself to the
+ // edge's range ]0.0 .. 1.0[.
+ const double fSmallExtension((aCandidateRange.getWidth() + aCandidateRange.getHeight()) * (0.5 * 0.1));
+ const B2DPoint aStart(
+ bParallelToXAxis ? aCandidateRange.getMinX() - fSmallExtension : fValueOnOtherAxis,
+ bParallelToXAxis ? fValueOnOtherAxis : aCandidateRange.getMinY() - fSmallExtension);
+ const B2DPoint aEnd(
+ bParallelToXAxis ? aCandidateRange.getMaxX() + fSmallExtension : fValueOnOtherAxis,
+ bParallelToXAxis ? fValueOnOtherAxis : aCandidateRange.getMaxY() + fSmallExtension);
+ const B2DPolygon aCandidate(addPointsAtCuts(rCandidate, aStart, aEnd));
+ const sal_uInt32 nPointCount(aCandidate.count());
+ const sal_uInt32 nEdgeCount(aCandidate.isClosed() ? nPointCount : nPointCount - 1L);
+ B2DCubicBezier aEdge;
+ B2DPolygon aRun;
+
+ for(sal_uInt32 a(0L); a < nEdgeCount; a++)
+ {
+ aCandidate.getBezierSegment(a, aEdge);
+ const B2DPoint aTestPoint(aEdge.interpolatePoint(0.5));
+ const bool bInside(bParallelToXAxis ?
+ fTools::moreOrEqual(aTestPoint.getY(), fValueOnOtherAxis) == bAboveAxis :
+ fTools::moreOrEqual(aTestPoint.getX(), fValueOnOtherAxis) == bAboveAxis);
+
+ if(bInside)
+ {
+ if(!aRun.count() || !aRun.getB2DPoint(aRun.count() - 1).equal(aEdge.getStartPoint()))
+ {
+ aRun.append(aEdge.getStartPoint());
+ }
+
+ if(aEdge.isBezier())
+ {
+ aRun.appendBezierSegment(aEdge.getControlPointA(), aEdge.getControlPointB(), aEdge.getEndPoint());
+ }
+ else
+ {
+ aRun.append(aEdge.getEndPoint());
+ }
+ }
+ else
+ {
+ if(bStroke && aRun.count())
+ {
+ aRetval.append(aRun);
+ aRun.clear();
+ }
+ }
+ }
+
+ if(aRun.count())
+ {
+ if(bStroke)
+ {
+ // try to merge this last and first polygon; they may have been
+ // the former polygon's start/end point
+ if(aRetval.count())
+ {
+ const B2DPolygon aStartPolygon(aRetval.getB2DPolygon(0));
+
+ if(aStartPolygon.count() && aStartPolygon.getB2DPoint(0).equal(aRun.getB2DPoint(aRun.count() - 1)))
+ {
+ // append start polygon to aRun, remove from result set
+ aRun.append(aStartPolygon); aRun.removeDoublePoints();
+ aRetval.remove(0);
+ }
+ }
+
+ aRetval.append(aRun);
+ }
+ else
+ {
+ // set closed flag and correct last point (which is added double now).
+ closeWithGeometryChange(aRun);
+ aRetval.append(aRun);
+ }
+ }
+ }
+ }
+
+ return aRetval;
+ }
+
+ B2DPolyPolygon clipPolyPolygonOnParallelAxis(const B2DPolyPolygon& rCandidate, bool bParallelToXAxis, bool bAboveAxis, double fValueOnOtherAxis, bool bStroke)
+ {
+ const sal_uInt32 nPolygonCount(rCandidate.count());
+ B2DPolyPolygon aRetval;
+
+ for(sal_uInt32 a(0L); a < nPolygonCount; a++)
+ {
+ const B2DPolyPolygon aClippedPolyPolygon(clipPolygonOnParallelAxis(rCandidate.getB2DPolygon(a), bParallelToXAxis, bAboveAxis, fValueOnOtherAxis, bStroke));
+
+ if(aClippedPolyPolygon.count())
+ {
+ aRetval.append(aClippedPolyPolygon);
+ }
+ }
+
+ return aRetval;
+ }
+
+ B2DPolyPolygon clipPolygonOnRange(const B2DPolygon& rCandidate, const B2DRange& rRange, bool bInside, bool bStroke)
+ {
+ const sal_uInt32 nCount(rCandidate.count());
+ B2DPolyPolygon aRetval;
+
+ if(!nCount)
+ {
+ // source is empty
+ return aRetval;
+ }
+
+ if(rRange.isEmpty())
+ {
+ if(bInside)
+ {
+ // nothing is inside an empty range
+ return aRetval;
+ }
+ else
+ {
+ // everything is outside an empty range
+ return B2DPolyPolygon(rCandidate);
+ }
+ }
+
+ const B2DRange aCandidateRange(getRange(rCandidate));
+
+ if(rRange.isInside(aCandidateRange))
+ {
+ // candidate is completely inside given range
+ if(bInside)
+ {
+ // nothing to do
+ return B2DPolyPolygon(rCandidate);
+ }
+ else
+ {
+ // nothing is outside, then
+ return aRetval;
+ }
+ }
+
+ if(!bInside)
+ {
+ // cutting off the outer parts of filled polygons at parallell
+ // lines to the axes is only possible for the inner part, not for
+ // the outer part which means cutting a hole into the original polygon.
+ // This is because the inner part is a logical AND-operation of
+ // the four implied half-planes, but the outer part is not.
+ // It is possible for strokes, but with creating unnecessary extra
+ // cuts, so using clipPolygonOnPolyPolygon is better there, too.
+ // This needs to be done with the topology knowlegde and is unfurtunately
+ // more expensive, too.
+ const B2DPolygon aClip(createPolygonFromRect(rRange));
+
+ return clipPolygonOnPolyPolygon(rCandidate, B2DPolyPolygon(aClip), bInside, bStroke);
+ }
+
+ // clip against the four axes of the range
+ // against X-Axis, lower value
+ aRetval = clipPolygonOnParallelAxis(rCandidate, true, bInside, rRange.getMinY(), bStroke);
+
+ if(aRetval.count())
+ {
+ // against Y-Axis, lower value
+ if(1L == aRetval.count())
+ {
+ aRetval = clipPolygonOnParallelAxis(aRetval.getB2DPolygon(0L), false, bInside, rRange.getMinX(), bStroke);
+ }
+ else
+ {
+ aRetval = clipPolyPolygonOnParallelAxis(aRetval, false, bInside, rRange.getMinX(), bStroke);
+ }
+
+ if(aRetval.count())
+ {
+ // against X-Axis, higher value
+ if(1L == aRetval.count())
+ {
+ aRetval = clipPolygonOnParallelAxis(aRetval.getB2DPolygon(0L), true, !bInside, rRange.getMaxY(), bStroke);
+ }
+ else
+ {
+ aRetval = clipPolyPolygonOnParallelAxis(aRetval, true, !bInside, rRange.getMaxY(), bStroke);
+ }
+
+ if(aRetval.count())
+ {
+ // against Y-Axis, higher value
+ if(1L == aRetval.count())
+ {
+ aRetval = clipPolygonOnParallelAxis(aRetval.getB2DPolygon(0L), false, !bInside, rRange.getMaxX(), bStroke);
+ }
+ else
+ {
+ aRetval = clipPolyPolygonOnParallelAxis(aRetval, false, !bInside, rRange.getMaxX(), bStroke);
+ }
+ }
+ }
+ }
+
+ return aRetval;
+ }
+
+ B2DPolyPolygon clipPolyPolygonOnRange(const B2DPolyPolygon& rCandidate, const B2DRange& rRange, bool bInside, bool bStroke)
+ {
+ const sal_uInt32 nPolygonCount(rCandidate.count());
+ B2DPolyPolygon aRetval;
+
+ if(!nPolygonCount)
+ {
+ // source is empty
+ return aRetval;
+ }
+
+ if(rRange.isEmpty())
+ {
+ if(bInside)
+ {
+ // nothing is inside an empty range
+ return aRetval;
+ }
+ else
+ {
+ // everything is outside an empty range
+ return rCandidate;
+ }
+ }
+
+ if(bInside)
+ {
+ for(sal_uInt32 a(0L); a < nPolygonCount; a++)
+ {
+ const B2DPolyPolygon aClippedPolyPolygon(clipPolygonOnRange(rCandidate.getB2DPolygon(a), rRange, bInside, bStroke));
+
+ if(aClippedPolyPolygon.count())
+ {
+ aRetval.append(aClippedPolyPolygon);
+ }
+ }
+ }
+ else
+ {
+ // for details, see comment in clipPolygonOnRange for the "cutting off
+ // the outer parts of filled polygons at parallell lines" explanations
+ const B2DPolygon aClip(createPolygonFromRect(rRange));
+
+ return clipPolyPolygonOnPolyPolygon(rCandidate, B2DPolyPolygon(aClip), bInside, bStroke);
+ }
+
+ return aRetval;
+ }
+
+ B2DPolyPolygon clipPolygonOnEdge(const B2DPolygon& rCandidate, const B2DPoint& rPointA, const B2DPoint& rPointB, bool bAbove, bool bStroke)
+ {
+ B2DPolyPolygon aRetval;
+
+ if(rPointA.equal(rPointB))
+ {
+ // edge has no length, return polygon
+ aRetval.append(rCandidate);
+ }
+ else if(rCandidate.count())
+ {
+ const B2DVector aEdge(rPointB - rPointA);
+ B2DPolygon aCandidate(rCandidate);
+
+ // translate and rotate polygon so that given edge is on x axis
+ B2DHomMatrix aMatrixTransform(basegfx::tools::createTranslateB2DHomMatrix(-rPointA.getX(), -rPointA.getY()));
+ aMatrixTransform.rotate(-atan2(aEdge.getY(), aEdge.getX()));
+ aCandidate.transform(aMatrixTransform);
+
+ // call clip method on X-Axis
+ aRetval = clipPolygonOnParallelAxis(aCandidate, true, bAbove, 0.0, bStroke);
+
+ if(aRetval.count())
+ {
+ // if there is a result, it needs to be transformed back
+ aMatrixTransform.invert();
+ aRetval.transform(aMatrixTransform);
+ }
+ }
+
+ return aRetval;
+ }
+
+ B2DPolyPolygon clipPolyPolygonOnEdge(const B2DPolyPolygon& rCandidate, const B2DPoint& rPointA, const B2DPoint& rPointB, bool bAbove, bool bStroke)
+ {
+ B2DPolyPolygon aRetval;
+
+ if(rPointA.equal(rPointB))
+ {
+ // edge has no length, return polygon
+ aRetval = rCandidate;
+ }
+ else if(rCandidate.count())
+ {
+ const B2DVector aEdge(rPointB - rPointA);
+ B2DPolyPolygon aCandidate(rCandidate);
+
+ // translate and rotate polygon so that given edge is on x axis
+ B2DHomMatrix aMatrixTransform(basegfx::tools::createTranslateB2DHomMatrix(-rPointA.getX(), -rPointA.getY()));
+ aMatrixTransform.rotate(-atan2(aEdge.getY(), aEdge.getX()));
+ aCandidate.transform(aMatrixTransform);
+
+ // call clip method on X-Axis
+ aRetval = clipPolyPolygonOnParallelAxis(aCandidate, true, bAbove, 0.0, bStroke);
+
+ if(aRetval.count())
+ {
+ // if there is a result, it needs to be transformed back
+ aMatrixTransform.invert();
+ aRetval.transform(aMatrixTransform);
+ }
+ }
+
+ return aRetval;
+ }
+
+ //////////////////////////////////////////////////////////////////////////////
+
+ B2DPolyPolygon clipPolyPolygonOnPolyPolygon(const B2DPolyPolygon& rCandidate, const B2DPolyPolygon& rClip, bool bInside, bool bStroke)
+ {
+ B2DPolyPolygon aRetval;
+
+ if(rCandidate.count() && rClip.count())
+ {
+ if(bStroke)
+ {
+ // line clipping, create line snippets by first adding all cut points and
+ // then marching along the edges and detecting if they are inside or outside
+ // the clip polygon
+ for(sal_uInt32 a(0); a < rCandidate.count(); a++)
+ {
+ // add cuts with clip to polygon, including bezier segments
+ const B2DPolygon aCandidate(addPointsAtCuts(rCandidate.getB2DPolygon(a), rClip));
+ const sal_uInt32 nPointCount(aCandidate.count());
+ const sal_uInt32 nEdgeCount(aCandidate.isClosed() ? nPointCount : nPointCount - 1L);
+ B2DCubicBezier aEdge;
+ B2DPolygon aRun;
+
+ for(sal_uInt32 b(0); b < nEdgeCount; b++)
+ {
+ aCandidate.getBezierSegment(b, aEdge);
+ const B2DPoint aTestPoint(aEdge.interpolatePoint(0.5));
+ const bool bIsInside(tools::isInside(rClip, aTestPoint) == bInside);
+
+ if(bIsInside)
+ {
+ if(!aRun.count())
+ {
+ aRun.append(aEdge.getStartPoint());
+ }
+
+ if(aEdge.isBezier())
+ {
+ aRun.appendBezierSegment(aEdge.getControlPointA(), aEdge.getControlPointB(), aEdge.getEndPoint());
+ }
+ else
+ {
+ aRun.append(aEdge.getEndPoint());
+ }
+ }
+ else
+ {
+ if(aRun.count())
+ {
+ aRetval.append(aRun);
+ aRun.clear();
+ }
+ }
+ }
+
+ if(aRun.count())
+ {
+ // try to merge this last and first polygon; they may have been
+ // the former polygon's start/end point
+ if(aRetval.count())
+ {
+ const B2DPolygon aStartPolygon(aRetval.getB2DPolygon(0));
+
+ if(aStartPolygon.count() && aStartPolygon.getB2DPoint(0).equal(aRun.getB2DPoint(aRun.count() - 1)))
+ {
+ // append start polygon to aRun, remove from result set
+ aRun.append(aStartPolygon); aRun.removeDoublePoints();
+ aRetval.remove(0);
+ }
+ }
+
+ aRetval.append(aRun);
+ }
+ }
+ }
+ else
+ {
+ // area clipping
+ B2DPolyPolygon aMergePolyPolygonA(rClip);
+
+ // First solve all polygon-self and polygon-polygon intersections.
+ // Also get rid of some not-needed polygons (neutral, no area -> when
+ // no intersections, these are tubes).
+ // Now it is possible to correct the orientations in the cut-free
+ // polygons to values corresponding to painting the PolyPolygon with
+ // a XOR-WindingRule.
+ aMergePolyPolygonA = solveCrossovers(aMergePolyPolygonA);
+ aMergePolyPolygonA = stripNeutralPolygons(aMergePolyPolygonA);
+ aMergePolyPolygonA = correctOrientations(aMergePolyPolygonA);
+
+ if(!bInside)
+ {
+ // if we want to get the outside of the clip polygon, make
+ // it a 'Hole' in topological sense
+ aMergePolyPolygonA.flip();
+ }
+
+ B2DPolyPolygon aMergePolyPolygonB(rCandidate);
+
+ // prepare 2nd source polygon in same way
+ aMergePolyPolygonB = solveCrossovers(aMergePolyPolygonB);
+ aMergePolyPolygonB = stripNeutralPolygons(aMergePolyPolygonB);
+ aMergePolyPolygonB = correctOrientations(aMergePolyPolygonB);
+
+ // to clip against each other, concatenate and solve all
+ // polygon-polygon crossovers. polygon-self do not need to
+ // be solved again, they were solved in the preparation.
+ aRetval.append(aMergePolyPolygonA);
+ aRetval.append(aMergePolyPolygonB);
+ aRetval = solveCrossovers(aRetval);
+
+ // now remove neutral polygons (closed, but no area). In a last
+ // step throw away all polygons which have a depth of less than 1
+ // which means there was no logical AND at their position. For the
+ // not-inside solution, the clip was flipped to define it as 'Hole',
+ // so the removal rule is different here; remove all with a depth
+ // of less than 0 (aka holes).
+ aRetval = stripNeutralPolygons(aRetval);
+ aRetval = stripDispensablePolygons(aRetval, bInside);
+ }
+ }
+
+ return aRetval;
+ }
+
+ //////////////////////////////////////////////////////////////////////////////
+
+ B2DPolyPolygon clipPolygonOnPolyPolygon(const B2DPolygon& rCandidate, const B2DPolyPolygon& rClip, bool bInside, bool bStroke)
+ {
+ B2DPolyPolygon aRetval;
+
+ if(rCandidate.count() && rClip.count())
+ {
+ aRetval = clipPolyPolygonOnPolyPolygon(B2DPolyPolygon(rCandidate), rClip, bInside, bStroke);
+ }
+
+ return aRetval;
+ }
+
+ //////////////////////////////////////////////////////////////////////////////
+
+ /*
+ * let a plane be defined as
+ *
+ * v.n+d=0
+ *
+ * and a ray be defined as
+ *
+ * a+(b-a)*t=0
+ *
+ * substitute and rearranging yields
+ *
+ * t = -(a.n+d)/(n.(b-a))
+ *
+ * if the denominator is zero, the line is either
+ * contained in the plane or parallel to the plane.
+ * in either case, there is no intersection.
+ * if numerator and denominator are both zero, the
+ * ray is contained in the plane.
+ *
+ */
+ struct scissor_plane {
+ double nx,ny; // plane normal
+ double d; // [-] minimum distance from origin
+ sal_uInt32 clipmask; // clipping mask, e.g. 1000 1000
+ };
+
+ /*
+ *
+ * polygon clipping rules (straight out of Foley and Van Dam)
+ * ===========================================================
+ * current |next |emit
+ * ____________________________________
+ * inside |inside |next
+ * inside |outside |intersect with clip plane
+ * outside |outside |nothing
+ * outside |inside |intersect with clip plane follwed by next
+ *
+ */
+ sal_uInt32 scissorLineSegment( ::basegfx::B2DPoint *in_vertex, // input buffer
+ sal_uInt32 in_count, // number of verts in input buffer
+ ::basegfx::B2DPoint *out_vertex, // output buffer
+ scissor_plane *pPlane, // scissoring plane
+ const ::basegfx::B2DRectangle &rR ) // clipping rectangle
+ {
+ ::basegfx::B2DPoint *curr;
+ ::basegfx::B2DPoint *next;
+
+ sal_uInt32 out_count=0;
+
+ // process all the verts
+ for(sal_uInt32 i=0; i<in_count; i++) {
+
+ // vertices are relative to the coordinate
+ // system defined by the rectangle.
+ curr = &in_vertex[i];
+ next = &in_vertex[(i+1)%in_count];
+
+ // perform clipping judgement & mask against current plane.
+ sal_uInt32 clip = pPlane->clipmask & ((getCohenSutherlandClipFlags(*curr,rR)<<4)|getCohenSutherlandClipFlags(*next,rR));
+
+ if(clip==0) { // both verts are inside
+ out_vertex[out_count++] = *next;
+ }
+ else if((clip&0x0f) && (clip&0xf0)) { // both verts are outside
+ }
+ else if((clip&0x0f) && (clip&0xf0)==0) { // curr is inside, next is outside
+
+ // direction vector from 'current' to 'next', *not* normalized
+ // to bring 't' into the [0<=x<=1] intervall.
+ ::basegfx::B2DPoint dir((*next)-(*curr));
+
+ double denominator = ( pPlane->nx*dir.getX() +
+ pPlane->ny*dir.getY() );
+ double numerator = ( pPlane->nx*curr->getX() +
+ pPlane->ny*curr->getY() +
+ pPlane->d );
+ double t = -numerator/denominator;
+
+ // calculate the actual point of intersection
+ ::basegfx::B2DPoint intersection( curr->getX()+t*dir.getX(),
+ curr->getY()+t*dir.getY() );
+
+ out_vertex[out_count++] = intersection;
+ }
+ else if((clip&0x0f)==0 && (clip&0xf0)) { // curr is outside, next is inside
+
+ // direction vector from 'current' to 'next', *not* normalized
+ // to bring 't' into the [0<=x<=1] intervall.
+ ::basegfx::B2DPoint dir((*next)-(*curr));
+
+ double denominator = ( pPlane->nx*dir.getX() +
+ pPlane->ny*dir.getY() );
+ double numerator = ( pPlane->nx*curr->getX() +
+ pPlane->ny*curr->getY() +
+ pPlane->d );
+ double t = -numerator/denominator;
+
+ // calculate the actual point of intersection
+ ::basegfx::B2DPoint intersection( curr->getX()+t*dir.getX(),
+ curr->getY()+t*dir.getY() );
+
+ out_vertex[out_count++] = intersection;
+ out_vertex[out_count++] = *next;
+ }
+ }
+
+ return out_count;
+ }
+
+ B2DPolygon clipTriangleListOnRange( const B2DPolygon& rCandidate,
+ const B2DRange& rRange )
+ {
+ B2DPolygon aResult;
+
+ if( !(rCandidate.count()%3) )
+ {
+ const int scissor_plane_count = 4;
+
+ scissor_plane sp[scissor_plane_count];
+
+ sp[0].nx = +1.0;
+ sp[0].ny = +0.0;
+ sp[0].d = -(rRange.getMinX());
+ sp[0].clipmask = (RectClipFlags::LEFT << 4) | RectClipFlags::LEFT; // 0001 0001
+ sp[1].nx = -1.0;
+ sp[1].ny = +0.0;
+ sp[1].d = +(rRange.getMaxX());
+ sp[1].clipmask = (RectClipFlags::RIGHT << 4) | RectClipFlags::RIGHT; // 0010 0010
+ sp[2].nx = +0.0;
+ sp[2].ny = +1.0;
+ sp[2].d = -(rRange.getMinY());
+ sp[2].clipmask = (RectClipFlags::TOP << 4) | RectClipFlags::TOP; // 0100 0100
+ sp[3].nx = +0.0;
+ sp[3].ny = -1.0;
+ sp[3].d = +(rRange.getMaxY());
+ sp[3].clipmask = (RectClipFlags::BOTTOM << 4) | RectClipFlags::BOTTOM; // 1000 1000
+
+ // retrieve the number of vertices of the triangulated polygon
+ const sal_uInt32 nVertexCount = rCandidate.count();
+
+ if(nVertexCount)
+ {
+ ////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////
+ //
+ // Upper bound for the maximal number of vertices when intersecting an
+ // axis-aligned rectangle with a triangle in E2
+ //
+ // The rectangle and the triangle are in general position, and have 4 and 3
+ // vertices, respectively.
+ //
+ // Lemma: Since the rectangle is a convex polygon ( see
+ // http://mathworld.wolfram.com/ConvexPolygon.html for a definition), and
+ // has no holes, it follows that any straight line will intersect the
+ // rectangle's border line at utmost two times (with the usual
+ // tie-breaking rule, if the intersection exactly hits an already existing
+ // rectangle vertex, that this intersection is only attributed to one of
+ // the adjoining edges). Thus, having a rectangle intersected with
+ // a half-plane (one side of a straight line denotes 'inside', the
+ // other 'outside') will at utmost add _one_ vertex to the resulting
+ // intersection polygon (adding two intersection vertices, and removing at
+ // least one rectangle vertex):
+ //
+ // *
+ // +--+-----------------+
+ // | * |
+ // |* |
+ // + |
+ // *| |
+ // * | |
+ // +--------------------+
+ //
+ // Proof: If the straight line intersects the rectangle two
+ // times, it does so for distinct edges, i.e. the intersection has
+ // minimally one of the rectangle's vertices on either side of the straight
+ // line (but maybe more). Thus, the intersection with a half-plane has
+ // minimally _one_ rectangle vertex removed from the resulting clip
+ // polygon, and therefore, a clip against a half-plane has the net effect
+ // of adding at utmost _one_ vertex to the resulting clip polygon.
+ //
+ // Theorem: The intersection of a rectangle and a triangle results in a
+ // polygon with at utmost 7 vertices.
+ //
+ // Proof: The inside of the triangle can be described as the consecutive
+ // intersection with three half-planes. Together with the lemma above, this
+ // results in at utmost 3 additional vertices added to the already existing 4
+ // rectangle vertices.
+ //
+ // This upper bound is attained with the following example configuration:
+ //
+ // *
+ // ***
+ // ** *
+ // ** *
+ // ** *
+ // ** *
+ // ** *
+ // ** *
+ // ** *
+ // ** *
+ // ** *
+ // ----*2--------3 *
+ // | ** |*
+ // 1* 4
+ // **| *|
+ // ** | * |
+ // **| * |
+ // 7* * |
+ // --*6-----5-----
+ // ** *
+ // **
+ //
+ // As we need to scissor all triangles against the
+ // output rectangle we employ an output buffer for the
+ // resulting vertices. the question is how large this
+ // buffer needs to be compared to the number of
+ // incoming vertices. this buffer needs to hold at
+ // most the number of original vertices times '7'. see
+ // figure above for an example. scissoring triangles
+ // with the cohen-sutherland line clipping algorithm
+ // as implemented here will result in a triangle fan
+ // which will be rendered as separate triangles to
+ // avoid pipeline stalls for each scissored
+ // triangle. creating separate triangles from a
+ // triangle fan produces (n-2)*3 vertices where n is
+ // the number of vertices of the original triangle
+ // fan. for the maximum number of 7 vertices of
+ // resulting triangle fans we therefore need 15 times
+ // the number of original vertices.
+ //
+ ////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////
+
+ //const size_t nBufferSize = sizeof(vertex)*(nVertexCount*16);
+ //vertex *pVertices = (vertex*)alloca(nBufferSize);
+ //sal_uInt32 nNumOutput = 0;
+
+ // we need to clip this triangle against the output rectangle
+ // to ensure that the resulting texture coordinates are in
+ // the valid range from [0<=st<=1]. under normal circustances
+ // we could use the BORDERCOLOR renderstate but some cards
+ // seem to ignore this feature.
+ ::basegfx::B2DPoint stack[3];
+ unsigned int clipflag = 0;
+
+ for(sal_uInt32 nIndex=0; nIndex<nVertexCount; ++nIndex)
+ {
+ // rotate stack
+ stack[0] = stack[1];
+ stack[1] = stack[2];
+ stack[2] = rCandidate.getB2DPoint(nIndex);
+
+ // clipping judgement
+ clipflag |= !(rRange.isInside(stack[2]));
+
+ if(nIndex > 1)
+ {
+ // consume vertices until a single seperate triangle has been visited.
+ if(!((nIndex+1)%3))
+ {
+ // if any of the last three vertices was outside
+ // we need to scissor against the destination rectangle
+ if(clipflag & 7)
+ {
+ ::basegfx::B2DPoint buf0[16];
+ ::basegfx::B2DPoint buf1[16];
+
+ sal_uInt32 vertex_count = 3;
+
+ // clip against all 4 planes passing the result of
+ // each plane as the input to the next using a double buffer
+ vertex_count = scissorLineSegment(stack,vertex_count,buf1,&sp[0],rRange);
+ vertex_count = scissorLineSegment(buf1,vertex_count,buf0,&sp[1],rRange);
+ vertex_count = scissorLineSegment(buf0,vertex_count,buf1,&sp[2],rRange);
+ vertex_count = scissorLineSegment(buf1,vertex_count,buf0,&sp[3],rRange);
+
+ if(vertex_count >= 3)
+ {
+ // convert triangle fan back to triangle list.
+ ::basegfx::B2DPoint v0(buf0[0]);
+ ::basegfx::B2DPoint v1(buf0[1]);
+ for(sal_uInt32 i=2; i<vertex_count; ++i)
+ {
+ ::basegfx::B2DPoint v2(buf0[i]);
+ aResult.append(v0);
+ aResult.append(v1);
+ aResult.append(v2);
+ v1 = v2;
+ }
+ }
+ }
+ else
+ {
+ // the last triangle has not been altered, simply copy to result
+ for(sal_uInt32 i=0; i<3; ++i)
+ aResult.append(stack[i]);
+ }
+ }
+ }
+
+ clipflag <<= 1;
+ }
+ }
+ }
+
+ return aResult;
+ }
+
+ //////////////////////////////////////////////////////////////////////////////
+
+ } // end of namespace tools
+} // end of namespace basegfx
+
+//////////////////////////////////////////////////////////////////////////////
+
+// eof
diff --git a/basegfx/source/polygon/b2dpolygoncutandtouch.cxx b/basegfx/source/polygon/b2dpolygoncutandtouch.cxx
new file mode 100644
index 000000000000..e03aadfe1577
--- /dev/null
+++ b/basegfx/source/polygon/b2dpolygoncutandtouch.cxx
@@ -0,0 +1,1301 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basegfx.hxx"
+#include <basegfx/polygon/b2dpolygoncutandtouch.hxx>
+#include <osl/diagnose.h>
+#include <basegfx/numeric/ftools.hxx>
+#include <basegfx/point/b2dpoint.hxx>
+#include <basegfx/vector/b2dvector.hxx>
+#include <basegfx/range/b2drange.hxx>
+#include <basegfx/polygon/b2dpolygontools.hxx>
+#include <basegfx/polygon/b2dpolypolygontools.hxx>
+#include <basegfx/curve/b2dcubicbezier.hxx>
+
+#include <vector>
+#include <algorithm>
+
+//////////////////////////////////////////////////////////////////////////////
+// defines
+
+#define SUBDIVIDE_FOR_CUT_TEST_COUNT (50)
+
+//////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+ namespace
+ {
+ ////////////////////////////////////////////////////////////////////////////////
+
+ class temporaryPoint
+ {
+ B2DPoint maPoint; // the new point
+ sal_uInt32 mnIndex; // index after which to insert
+ double mfCut; // parametric cut description [0.0 .. 1.0]
+
+ public:
+ temporaryPoint(const B2DPoint& rNewPoint, sal_uInt32 nIndex, double fCut)
+ : maPoint(rNewPoint),
+ mnIndex(nIndex),
+ mfCut(fCut)
+ {
+ }
+
+ bool operator<(const temporaryPoint& rComp) const
+ {
+ if(mnIndex == rComp.mnIndex)
+ {
+ return (mfCut < rComp.mfCut);
+ }
+
+ return (mnIndex < rComp.mnIndex);
+ }
+
+ const B2DPoint& getPoint() const { return maPoint; }
+ sal_uInt32 getIndex() const { return mnIndex; }
+ double getCut() const { return mfCut; }
+ };
+
+ ////////////////////////////////////////////////////////////////////////////////
+
+ typedef ::std::vector< temporaryPoint > temporaryPointVector;
+
+ ////////////////////////////////////////////////////////////////////////////////
+
+ class temporaryPolygonData
+ {
+ B2DPolygon maPolygon;
+ B2DRange maRange;
+ temporaryPointVector maPoints;
+
+ public:
+ const B2DPolygon& getPolygon() const { return maPolygon; }
+ void setPolygon(const B2DPolygon& rNew) { maPolygon = rNew; maRange = tools::getRange(maPolygon); }
+ const B2DRange& getRange() const { return maRange; }
+ temporaryPointVector& getTemporaryPointVector() { return maPoints; }
+ };
+
+ ////////////////////////////////////////////////////////////////////////////////
+
+ B2DPolygon mergeTemporaryPointsAndPolygon(const B2DPolygon& rCandidate, temporaryPointVector& rTempPoints)
+ {
+ // #i76891# mergeTemporaryPointsAndPolygon redesigned to be able to correctly handle
+ // single edges with/without control points
+ // #i101491# added counter for non-changing element count
+ const sal_uInt32 nTempPointCount(rTempPoints.size());
+
+ if(nTempPointCount)
+ {
+ B2DPolygon aRetval;
+ const sal_uInt32 nCount(rCandidate.count());
+
+ if(nCount)
+ {
+ // sort temp points to assure increasing fCut values and increasing indices
+ ::std::sort(rTempPoints.begin(), rTempPoints.end());
+
+ // prepare loop
+ B2DCubicBezier aEdge;
+ sal_uInt32 nNewInd(0L);
+
+ // add start point
+ aRetval.append(rCandidate.getB2DPoint(0));
+
+ for(sal_uInt32 a(0L); a < nCount; a++)
+ {
+ // get edge
+ rCandidate.getBezierSegment(a, aEdge);
+
+ if(aEdge.isBezier())
+ {
+ // control vectors involved for this edge
+ double fLeftStart(0.0);
+
+ // now add all points targeted to be at this index
+ while(nNewInd < nTempPointCount && rTempPoints[nNewInd].getIndex() == a)
+ {
+ const temporaryPoint& rTempPoint = rTempPoints[nNewInd++];
+
+ // split curve segment. Splits need to come sorted and need to be < 1.0. Also,
+ // since original segment is consumed from left to right, the cut values need
+ // to be scaled to the remaining part
+ B2DCubicBezier aLeftPart;
+ const double fRelativeSplitPoint((rTempPoint.getCut() - fLeftStart) / (1.0 - fLeftStart));
+ aEdge.split(fRelativeSplitPoint, &aLeftPart, &aEdge);
+ fLeftStart = rTempPoint.getCut();
+
+ // add left bow
+ aRetval.appendBezierSegment(aLeftPart.getControlPointA(), aLeftPart.getControlPointB(), rTempPoint.getPoint());
+ }
+
+ // add remaining bow
+ aRetval.appendBezierSegment(aEdge.getControlPointA(), aEdge.getControlPointB(), aEdge.getEndPoint());
+ }
+ else
+ {
+ // add all points targeted to be at this index
+ while(nNewInd < nTempPointCount && rTempPoints[nNewInd].getIndex() == a)
+ {
+ const temporaryPoint& rTempPoint = rTempPoints[nNewInd++];
+ const B2DPoint aNewPoint(rTempPoint.getPoint());
+
+ // do not add points double
+ if(!aRetval.getB2DPoint(aRetval.count() - 1L).equal(aNewPoint))
+ {
+ aRetval.append(aNewPoint);
+ }
+ }
+
+ // add edge end point
+ aRetval.append(aEdge.getEndPoint());
+ }
+ }
+ }
+
+ if(rCandidate.isClosed())
+ {
+ // set closed flag and correct last point (which is added double now).
+ tools::closeWithGeometryChange(aRetval);
+ }
+
+ return aRetval;
+ }
+ else
+ {
+ return rCandidate;
+ }
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////
+
+ void adaptAndTransferCutsWithBezierSegment(
+ const temporaryPointVector& rPointVector, const B2DPolygon& rPolygon,
+ sal_uInt32 nInd, temporaryPointVector& rTempPoints)
+ {
+ // assuming that the subdivision to create rPolygon used aequidistant pieces
+ // (as in adaptiveSubdivideByCount) it is now possible to calculate back the
+ // cut positions in the polygon to relative cut positions on the original bezier
+ // segment.
+ const sal_uInt32 nTempPointCount(rPointVector.size());
+ const sal_uInt32 nEdgeCount(rPolygon.count() ? rPolygon.count() - 1L : 0L);
+
+ if(nTempPointCount && nEdgeCount)
+ {
+ for(sal_uInt32 a(0L); a < nTempPointCount; a++)
+ {
+ const temporaryPoint& rTempPoint = rPointVector[a];
+ const double fCutPosInPolygon((double)rTempPoint.getIndex() + rTempPoint.getCut());
+ const double fRelativeCutPos(fCutPosInPolygon / (double)nEdgeCount);
+ rTempPoints.push_back(temporaryPoint(rTempPoint.getPoint(), nInd, fRelativeCutPos));
+ }
+ }
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////
+
+ } // end of anonymous namespace
+} // end of namespace basegfx
+
+//////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+ namespace
+ {
+ ////////////////////////////////////////////////////////////////////////////////
+ // predefines for calls to this methods before method implementation
+
+ void findCuts(const B2DPolygon& rCandidate, temporaryPointVector& rTempPoints);
+ void findTouches(const B2DPolygon& rEdgePolygon, const B2DPolygon& rPointPolygon, temporaryPointVector& rTempPoints);
+ void findCuts(const B2DPolygon& rCandidateA, const B2DPolygon& rCandidateB, temporaryPointVector& rTempPointsA, temporaryPointVector& rTempPointsB);
+
+ ////////////////////////////////////////////////////////////////////////////////
+
+ void findEdgeCutsTwoEdges(
+ const B2DPoint& rCurrA, const B2DPoint& rNextA,
+ const B2DPoint& rCurrB, const B2DPoint& rNextB,
+ sal_uInt32 nIndA, sal_uInt32 nIndB,
+ temporaryPointVector& rTempPointsA, temporaryPointVector& rTempPointsB)
+ {
+ // no null length edges
+ if(!(rCurrA.equal(rNextA) || rCurrB.equal(rNextB)))
+ {
+ // no common start/end points, this can be no cuts
+ if(!(rCurrB.equal(rCurrA) || rCurrB.equal(rNextA) || rNextB.equal(rCurrA) || rNextB.equal(rNextA)))
+ {
+ const B2DVector aVecA(rNextA - rCurrA);
+ const B2DVector aVecB(rNextB - rCurrB);
+ double fCut(aVecA.cross(aVecB));
+
+ if(!fTools::equalZero(fCut))
+ {
+ const double fZero(0.0);
+ const double fOne(1.0);
+ fCut = (aVecB.getY() * (rCurrB.getX() - rCurrA.getX()) + aVecB.getX() * (rCurrA.getY() - rCurrB.getY())) / fCut;
+
+ if(fTools::more(fCut, fZero) && fTools::less(fCut, fOne))
+ {
+ // it's a candidate, but also need to test parameter value of cut on line 2
+ double fCut2;
+
+ // choose the more precise version
+ if(fabs(aVecB.getX()) > fabs(aVecB.getY()))
+ {
+ fCut2 = (rCurrA.getX() + (fCut * aVecA.getX()) - rCurrB.getX()) / aVecB.getX();
+ }
+ else
+ {
+ fCut2 = (rCurrA.getY() + (fCut * aVecA.getY()) - rCurrB.getY()) / aVecB.getY();
+ }
+
+ if(fTools::more(fCut2, fZero) && fTools::less(fCut2, fOne))
+ {
+ // cut is in range, add point. Two edges can have only one cut, but
+ // add a cut point to each list. The lists may be the same for
+ // self intersections.
+ const B2DPoint aCutPoint(interpolate(rCurrA, rNextA, fCut));
+ rTempPointsA.push_back(temporaryPoint(aCutPoint, nIndA, fCut));
+ rTempPointsB.push_back(temporaryPoint(aCutPoint, nIndB, fCut2));
+ }
+ }
+ }
+ }
+ }
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////
+
+ void findCutsAndTouchesAndCommonForBezier(const B2DPolygon& rCandidateA, const B2DPolygon& rCandidateB, temporaryPointVector& rTempPointsA, temporaryPointVector& rTempPointsB)
+ {
+ // #i76891#
+ // This new method is necessary since in findEdgeCutsBezierAndEdge and in findEdgeCutsTwoBeziers
+ // it is not sufficient to use findCuts() recursively. This will indeed find the cuts between the
+ // segments of the two temporarily adaptive subdivided bezier segments, but not the touches or
+ // equal points of them.
+ // It would be possible to find the toches using findTouches(), but at last with commpn points
+ // the adding of cut points (temporary points) would fail. But for these temporarily adaptive
+ // subdivided bezier segments, common points may be not very likely, but the bug shows that it
+ // happens.
+ // Touch points are a little bit more likely than common points. All in all it is best to use
+ // a specialized method here which can profit from knowing that it is working on a special
+ // family of B2DPolygons: no curve segments included and not closed.
+ OSL_ENSURE(!rCandidateA.areControlPointsUsed() && !rCandidateB.areControlPointsUsed(), "findCutsAndTouchesAndCommonForBezier only works with subdivided polygons (!)");
+ OSL_ENSURE(!rCandidateA.isClosed() && !rCandidateB.isClosed(), "findCutsAndTouchesAndCommonForBezier only works with opened polygons (!)");
+ const sal_uInt32 nPointCountA(rCandidateA.count());
+ const sal_uInt32 nPointCountB(rCandidateB.count());
+
+ if(nPointCountA > 1 && nPointCountB > 1)
+ {
+ const sal_uInt32 nEdgeCountA(nPointCountA - 1);
+ const sal_uInt32 nEdgeCountB(nPointCountB - 1);
+ B2DPoint aCurrA(rCandidateA.getB2DPoint(0L));
+
+ for(sal_uInt32 a(0L); a < nEdgeCountA; a++)
+ {
+ const B2DPoint aNextA(rCandidateA.getB2DPoint(a + 1L));
+ const B2DRange aRangeA(aCurrA, aNextA);
+ B2DPoint aCurrB(rCandidateB.getB2DPoint(0L));
+
+ for(sal_uInt32 b(0L); b < nEdgeCountB; b++)
+ {
+ const B2DPoint aNextB(rCandidateB.getB2DPoint(b + 1L));
+ const B2DRange aRangeB(aCurrB, aNextB);
+
+ if(aRangeA.overlaps(aRangeB))
+ {
+ // no null length edges
+ if(!(aCurrA.equal(aNextA) || aCurrB.equal(aNextB)))
+ {
+ const B2DVector aVecA(aNextA - aCurrA);
+ const B2DVector aVecB(aNextB - aCurrB);
+ double fCutA(aVecA.cross(aVecB));
+
+ if(!fTools::equalZero(fCutA))
+ {
+ const double fZero(0.0);
+ const double fOne(1.0);
+ fCutA = (aVecB.getY() * (aCurrB.getX() - aCurrA.getX()) + aVecB.getX() * (aCurrA.getY() - aCurrB.getY())) / fCutA;
+
+ // use range [0.0 .. 1.0[, thus in the loop, all direct aCurrA cuts will be registered
+ // as 0.0 cut. The 1.0 cut will be registered in the next loop step
+ if(fTools::moreOrEqual(fCutA, fZero) && fTools::less(fCutA, fOne))
+ {
+ // it's a candidate, but also need to test parameter value of cut on line 2
+ double fCutB;
+
+ // choose the more precise version
+ if(fabs(aVecB.getX()) > fabs(aVecB.getY()))
+ {
+ fCutB = (aCurrA.getX() + (fCutA * aVecA.getX()) - aCurrB.getX()) / aVecB.getX();
+ }
+ else
+ {
+ fCutB = (aCurrA.getY() + (fCutA * aVecA.getY()) - aCurrB.getY()) / aVecB.getY();
+ }
+
+ // use range [0.0 .. 1.0[, thus in the loop, all direct aCurrA cuts will be registered
+ // as 0.0 cut. The 1.0 cut will be registered in the next loop step
+ if(fTools::moreOrEqual(fCutB, fZero) && fTools::less(fCutB, fOne))
+ {
+ // cut is in both ranges. Add points for A and B
+ // #i111715# use fTools::equal instead of fTools::equalZero for better accuracy
+ if(fTools::equal(fCutA, fZero))
+ {
+ // ignore for start point in first edge; this is handled
+ // by outer methods and would just produce a double point
+ if(a)
+ {
+ rTempPointsA.push_back(temporaryPoint(aCurrA, a, 0.0));
+ }
+ }
+ else
+ {
+ const B2DPoint aCutPoint(interpolate(aCurrA, aNextA, fCutA));
+ rTempPointsA.push_back(temporaryPoint(aCutPoint, a, fCutA));
+ }
+
+ // #i111715# use fTools::equal instead of fTools::equalZero for better accuracy
+ if(fTools::equal(fCutB, fZero))
+ {
+ // ignore for start point in first edge; this is handled
+ // by outer methods and would just produce a double point
+ if(b)
+ {
+ rTempPointsB.push_back(temporaryPoint(aCurrB, b, 0.0));
+ }
+ }
+ else
+ {
+ const B2DPoint aCutPoint(interpolate(aCurrB, aNextB, fCutB));
+ rTempPointsB.push_back(temporaryPoint(aCutPoint, b, fCutB));
+ }
+ }
+ }
+ }
+ }
+ }
+
+ // prepare next step
+ aCurrB = aNextB;
+ }
+
+ // prepare next step
+ aCurrA = aNextA;
+ }
+ }
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////
+
+ void findEdgeCutsBezierAndEdge(
+ const B2DCubicBezier& rCubicA,
+ const B2DPoint& rCurrB, const B2DPoint& rNextB,
+ sal_uInt32 nIndA, sal_uInt32 nIndB,
+ temporaryPointVector& rTempPointsA, temporaryPointVector& rTempPointsB)
+ {
+ // find all cuts between given bezier segment and edge. Add an entry to the tempPoints
+ // for each common point with the cut value describing the relative position on given
+ // bezier segment and edge.
+ B2DPolygon aTempPolygonA;
+ B2DPolygon aTempPolygonEdge;
+ temporaryPointVector aTempPointVectorA;
+ temporaryPointVector aTempPointVectorEdge;
+
+ // create subdivided polygons and find cuts between them
+ // Keep adaptiveSubdivideByCount due to needed quality
+ aTempPolygonA.reserve(SUBDIVIDE_FOR_CUT_TEST_COUNT + 8);
+ aTempPolygonA.append(rCubicA.getStartPoint());
+ rCubicA.adaptiveSubdivideByCount(aTempPolygonA, SUBDIVIDE_FOR_CUT_TEST_COUNT);
+ aTempPolygonEdge.append(rCurrB);
+ aTempPolygonEdge.append(rNextB);
+
+ // #i76891# using findCuts recursively is not sufficient here
+ findCutsAndTouchesAndCommonForBezier(aTempPolygonA, aTempPolygonEdge, aTempPointVectorA, aTempPointVectorEdge);
+
+ if(aTempPointVectorA.size())
+ {
+ // adapt tempVector entries to segment
+ adaptAndTransferCutsWithBezierSegment(aTempPointVectorA, aTempPolygonA, nIndA, rTempPointsA);
+ }
+
+ // append remapped tempVector entries for edge to tempPoints for edge
+ for(sal_uInt32 a(0L); a < aTempPointVectorEdge.size(); a++)
+ {
+ const temporaryPoint& rTempPoint = aTempPointVectorEdge[a];
+ rTempPointsB.push_back(temporaryPoint(rTempPoint.getPoint(), nIndB, rTempPoint.getCut()));
+ }
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////
+
+ void findEdgeCutsTwoBeziers(
+ const B2DCubicBezier& rCubicA,
+ const B2DCubicBezier& rCubicB,
+ sal_uInt32 nIndA, sal_uInt32 nIndB,
+ temporaryPointVector& rTempPointsA, temporaryPointVector& rTempPointsB)
+ {
+ // find all cuts between the two given bezier segments. Add an entry to the tempPoints
+ // for each common point with the cut value describing the relative position on given
+ // bezier segments.
+ B2DPolygon aTempPolygonA;
+ B2DPolygon aTempPolygonB;
+ temporaryPointVector aTempPointVectorA;
+ temporaryPointVector aTempPointVectorB;
+
+ // create subdivided polygons and find cuts between them
+ // Keep adaptiveSubdivideByCount due to needed quality
+ aTempPolygonA.reserve(SUBDIVIDE_FOR_CUT_TEST_COUNT + 8);
+ aTempPolygonA.append(rCubicA.getStartPoint());
+ rCubicA.adaptiveSubdivideByCount(aTempPolygonA, SUBDIVIDE_FOR_CUT_TEST_COUNT);
+ aTempPolygonB.reserve(SUBDIVIDE_FOR_CUT_TEST_COUNT + 8);
+ aTempPolygonB.append(rCubicB.getStartPoint());
+ rCubicB.adaptiveSubdivideByCount(aTempPolygonB, SUBDIVIDE_FOR_CUT_TEST_COUNT);
+
+ // #i76891# using findCuts recursively is not sufficient here
+ findCutsAndTouchesAndCommonForBezier(aTempPolygonA, aTempPolygonB, aTempPointVectorA, aTempPointVectorB);
+
+ if(aTempPointVectorA.size())
+ {
+ // adapt tempVector entries to segment
+ adaptAndTransferCutsWithBezierSegment(aTempPointVectorA, aTempPolygonA, nIndA, rTempPointsA);
+ }
+
+ if(aTempPointVectorB.size())
+ {
+ // adapt tempVector entries to segment
+ adaptAndTransferCutsWithBezierSegment(aTempPointVectorB, aTempPolygonB, nIndB, rTempPointsB);
+ }
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////
+
+ void findEdgeCutsOneBezier(
+ const B2DCubicBezier& rCubicA,
+ sal_uInt32 nInd, temporaryPointVector& rTempPoints)
+ {
+ // avoid expensive part of this method if possible
+ // TODO: use hasAnyExtremum() method instead when it becomes available
+ double fDummy;
+ const bool bHasAnyExtremum = rCubicA.getMinimumExtremumPosition( fDummy );
+ if( !bHasAnyExtremum )
+ return;
+
+ // find all self-intersections on the given bezier segment. Add an entry to the tempPoints
+ // for each self intersection point with the cut value describing the relative position on given
+ // bezier segment.
+ B2DPolygon aTempPolygon;
+ temporaryPointVector aTempPointVector;
+
+ // create subdivided polygon and find cuts on it
+ // Keep adaptiveSubdivideByCount due to needed quality
+ aTempPolygon.reserve(SUBDIVIDE_FOR_CUT_TEST_COUNT + 8);
+ aTempPolygon.append(rCubicA.getStartPoint());
+ rCubicA.adaptiveSubdivideByCount(aTempPolygon, SUBDIVIDE_FOR_CUT_TEST_COUNT);
+ findCuts(aTempPolygon, aTempPointVector);
+
+ if(aTempPointVector.size())
+ {
+ // adapt tempVector entries to segment
+ adaptAndTransferCutsWithBezierSegment(aTempPointVector, aTempPolygon, nInd, rTempPoints);
+ }
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////
+
+ void findCuts(const B2DPolygon& rCandidate, temporaryPointVector& rTempPoints)
+ {
+ // find out if there are edges with intersections (self-cuts). If yes, add
+ // entries to rTempPoints accordingly
+ const sal_uInt32 nPointCount(rCandidate.count());
+
+ if(nPointCount)
+ {
+ const sal_uInt32 nEdgeCount(rCandidate.isClosed() ? nPointCount : nPointCount - 1L);
+
+ if(nEdgeCount)
+ {
+ const bool bCurvesInvolved(rCandidate.areControlPointsUsed());
+
+ if(bCurvesInvolved)
+ {
+ B2DCubicBezier aCubicA;
+ B2DCubicBezier aCubicB;
+
+ for(sal_uInt32 a(0L); a < nEdgeCount - 1L; a++)
+ {
+ rCandidate.getBezierSegment(a, aCubicA);
+ aCubicA.testAndSolveTrivialBezier();
+ const bool bEdgeAIsCurve(aCubicA.isBezier());
+ const B2DRange aRangeA(aCubicA.getRange());
+
+ if(bEdgeAIsCurve)
+ {
+ // curved segments may have self-intersections, do not forget those (!)
+ findEdgeCutsOneBezier(aCubicA, a, rTempPoints);
+ }
+
+ for(sal_uInt32 b(a + 1L); b < nEdgeCount; b++)
+ {
+ rCandidate.getBezierSegment(b, aCubicB);
+ aCubicB.testAndSolveTrivialBezier();
+ const bool bEdgeBIsCurve(aCubicB.isBezier());
+ const B2DRange aRangeB(aCubicB.getRange());
+
+ // only overlapping segments need to be tested
+ // consecutive segments touch of course
+ bool bOverlap = false;
+ if( b > a+1)
+ bOverlap = aRangeA.overlaps(aRangeB);
+ else
+ bOverlap = aRangeA.overlapsMore(aRangeB);
+ if( bOverlap)
+ {
+ if(bEdgeAIsCurve && bEdgeBIsCurve)
+ {
+ // test for bezier-bezier cuts
+ findEdgeCutsTwoBeziers(aCubicA, aCubicB, a, b, rTempPoints, rTempPoints);
+ }
+ else if(bEdgeAIsCurve)
+ {
+ // test for bezier-edge cuts
+ findEdgeCutsBezierAndEdge(aCubicA, aCubicB.getStartPoint(), aCubicB.getEndPoint(), a, b, rTempPoints, rTempPoints);
+ }
+ else if(bEdgeBIsCurve)
+ {
+ // test for bezier-edge cuts
+ findEdgeCutsBezierAndEdge(aCubicB, aCubicA.getStartPoint(), aCubicA.getEndPoint(), b, a, rTempPoints, rTempPoints);
+ }
+ else
+ {
+ // test for simple edge-edge cuts
+ findEdgeCutsTwoEdges(aCubicA.getStartPoint(), aCubicA.getEndPoint(), aCubicB.getStartPoint(), aCubicB.getEndPoint(),
+ a, b, rTempPoints, rTempPoints);
+ }
+ }
+ }
+ }
+ }
+ else
+ {
+ B2DPoint aCurrA(rCandidate.getB2DPoint(0L));
+
+ for(sal_uInt32 a(0L); a < nEdgeCount - 1L; a++)
+ {
+ const B2DPoint aNextA(rCandidate.getB2DPoint(a + 1L == nPointCount ? 0L : a + 1L));
+ const B2DRange aRangeA(aCurrA, aNextA);
+ B2DPoint aCurrB(rCandidate.getB2DPoint(a + 1L));
+
+ for(sal_uInt32 b(a + 1L); b < nEdgeCount; b++)
+ {
+ const B2DPoint aNextB(rCandidate.getB2DPoint(b + 1L == nPointCount ? 0L : b + 1L));
+ const B2DRange aRangeB(aCurrB, aNextB);
+
+ // consecutive segments touch of course
+ bool bOverlap = false;
+ if( b > a+1)
+ bOverlap = aRangeA.overlaps(aRangeB);
+ else
+ bOverlap = aRangeA.overlapsMore(aRangeB);
+ if( bOverlap)
+ {
+ findEdgeCutsTwoEdges(aCurrA, aNextA, aCurrB, aNextB, a, b, rTempPoints, rTempPoints);
+ }
+
+ // prepare next step
+ aCurrB = aNextB;
+ }
+
+ // prepare next step
+ aCurrA = aNextA;
+ }
+ }
+ }
+ }
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////
+
+ } // end of anonymous namespace
+} // end of namespace basegfx
+
+//////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+ namespace
+ {
+ ////////////////////////////////////////////////////////////////////////////////
+
+ void findTouchesOnEdge(
+ const B2DPoint& rCurr, const B2DPoint& rNext, const B2DPolygon& rPointPolygon,
+ sal_uInt32 nInd, temporaryPointVector& rTempPoints)
+ {
+ // find out if points from rPointPolygon are positioned on given edge. If Yes, add
+ // points there to represent touches (which may be enter or leave nodes later).
+ const sal_uInt32 nPointCount(rPointPolygon.count());
+
+ if(nPointCount)
+ {
+ const B2DRange aRange(rCurr, rNext);
+ const B2DVector aEdgeVector(rNext - rCurr);
+ B2DVector aNormalizedEdgeVector(aEdgeVector);
+ aNormalizedEdgeVector.normalize();
+ bool bTestUsingX(fabs(aEdgeVector.getX()) > fabs(aEdgeVector.getY()));
+
+ for(sal_uInt32 a(0L); a < nPointCount; a++)
+ {
+ const B2DPoint aTestPoint(rPointPolygon.getB2DPoint(a));
+
+ if(aRange.isInside(aTestPoint))
+ {
+ if(!aTestPoint.equal(rCurr) && !aTestPoint.equal(rNext))
+ {
+ const B2DVector aTestVector(aTestPoint - rCurr);
+
+ if(areParallel(aNormalizedEdgeVector, aTestVector))
+ {
+ const double fCut((bTestUsingX)
+ ? aTestVector.getX() / aEdgeVector.getX()
+ : aTestVector.getY() / aEdgeVector.getY());
+ const double fZero(0.0);
+ const double fOne(1.0);
+
+ if(fTools::more(fCut, fZero) && fTools::less(fCut, fOne))
+ {
+ rTempPoints.push_back(temporaryPoint(aTestPoint, nInd, fCut));
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////
+
+ void findTouchesOnCurve(
+ const B2DCubicBezier& rCubicA, const B2DPolygon& rPointPolygon,
+ sal_uInt32 nInd, temporaryPointVector& rTempPoints)
+ {
+ // find all points from rPointPolygon which touch the given bezier segment. Add an entry
+ // for each touch to the given pointVector. The cut for that entry is the relative position on
+ // the given bezier segment.
+ B2DPolygon aTempPolygon;
+ temporaryPointVector aTempPointVector;
+
+ // create subdivided polygon and find cuts on it
+ // Keep adaptiveSubdivideByCount due to needed quality
+ aTempPolygon.reserve(SUBDIVIDE_FOR_CUT_TEST_COUNT + 8);
+ aTempPolygon.append(rCubicA.getStartPoint());
+ rCubicA.adaptiveSubdivideByCount(aTempPolygon, SUBDIVIDE_FOR_CUT_TEST_COUNT);
+ findTouches(aTempPolygon, rPointPolygon, aTempPointVector);
+
+ if(aTempPointVector.size())
+ {
+ // adapt tempVector entries to segment
+ adaptAndTransferCutsWithBezierSegment(aTempPointVector, aTempPolygon, nInd, rTempPoints);
+ }
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////
+
+ void findTouches(const B2DPolygon& rEdgePolygon, const B2DPolygon& rPointPolygon, temporaryPointVector& rTempPoints)
+ {
+ // find out if points from rPointPolygon touch edges from rEdgePolygon. If yes,
+ // add entries to rTempPoints
+ const sal_uInt32 nPointCount(rPointPolygon.count());
+ const sal_uInt32 nEdgePointCount(rEdgePolygon.count());
+
+ if(nPointCount && nEdgePointCount)
+ {
+ const sal_uInt32 nEdgeCount(rEdgePolygon.isClosed() ? nEdgePointCount : nEdgePointCount - 1L);
+ B2DPoint aCurr(rEdgePolygon.getB2DPoint(0));
+
+ for(sal_uInt32 a(0L); a < nEdgeCount; a++)
+ {
+ const sal_uInt32 nNextIndex((a + 1) % nEdgePointCount);
+ const B2DPoint aNext(rEdgePolygon.getB2DPoint(nNextIndex));
+
+ if(!aCurr.equal(aNext))
+ {
+ bool bHandleAsSimpleEdge(true);
+
+ if(rEdgePolygon.areControlPointsUsed())
+ {
+ const B2DPoint aNextControlPoint(rEdgePolygon.getNextControlPoint(a));
+ const B2DPoint aPrevControlPoint(rEdgePolygon.getPrevControlPoint(nNextIndex));
+ const bool bEdgeIsCurve(!aNextControlPoint.equal(aCurr) || !aPrevControlPoint.equal(aNext));
+
+ if(bEdgeIsCurve)
+ {
+ bHandleAsSimpleEdge = false;
+ const B2DCubicBezier aCubicA(aCurr, aNextControlPoint, aPrevControlPoint, aNext);
+ findTouchesOnCurve(aCubicA, rPointPolygon, a, rTempPoints);
+ }
+ }
+
+ if(bHandleAsSimpleEdge)
+ {
+ findTouchesOnEdge(aCurr, aNext, rPointPolygon, a, rTempPoints);
+ }
+ }
+
+ // next step
+ aCurr = aNext;
+ }
+ }
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////
+
+ } // end of anonymous namespace
+} // end of namespace basegfx
+
+//////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+ namespace
+ {
+ ////////////////////////////////////////////////////////////////////////////////
+
+ void findCuts(const B2DPolygon& rCandidateA, const B2DPolygon& rCandidateB, temporaryPointVector& rTempPointsA, temporaryPointVector& rTempPointsB)
+ {
+ // find out if edges from both polygons cut. If so, add entries to rTempPoints which
+ // should be added to the polygons accordingly
+ const sal_uInt32 nPointCountA(rCandidateA.count());
+ const sal_uInt32 nPointCountB(rCandidateB.count());
+
+ if(nPointCountA && nPointCountB)
+ {
+ const sal_uInt32 nEdgeCountA(rCandidateA.isClosed() ? nPointCountA : nPointCountA - 1L);
+ const sal_uInt32 nEdgeCountB(rCandidateB.isClosed() ? nPointCountB : nPointCountB - 1L);
+
+ if(nEdgeCountA && nEdgeCountB)
+ {
+ const bool bCurvesInvolved(rCandidateA.areControlPointsUsed() || rCandidateB.areControlPointsUsed());
+
+ if(bCurvesInvolved)
+ {
+ B2DCubicBezier aCubicA;
+ B2DCubicBezier aCubicB;
+
+ for(sal_uInt32 a(0L); a < nEdgeCountA; a++)
+ {
+ rCandidateA.getBezierSegment(a, aCubicA);
+ aCubicA.testAndSolveTrivialBezier();
+ const bool bEdgeAIsCurve(aCubicA.isBezier());
+ const B2DRange aRangeA(aCubicA.getRange());
+
+ for(sal_uInt32 b(0L); b < nEdgeCountB; b++)
+ {
+ rCandidateB.getBezierSegment(b, aCubicB);
+ aCubicB.testAndSolveTrivialBezier();
+ const bool bEdgeBIsCurve(aCubicB.isBezier());
+ const B2DRange aRangeB(aCubicB.getRange());
+
+ // consecutive segments touch of course
+ bool bOverlap = false;
+ if( b > a+1)
+ bOverlap = aRangeA.overlaps(aRangeB);
+ else
+ bOverlap = aRangeA.overlapsMore(aRangeB);
+ if( bOverlap)
+ {
+ if(bEdgeAIsCurve && bEdgeBIsCurve)
+ {
+ // test for bezier-bezier cuts
+ findEdgeCutsTwoBeziers(aCubicA, aCubicB, a, b, rTempPointsA, rTempPointsB);
+ }
+ else if(bEdgeAIsCurve)
+ {
+ // test for bezier-edge cuts
+ findEdgeCutsBezierAndEdge(aCubicA, aCubicB.getStartPoint(), aCubicB.getEndPoint(), a, b, rTempPointsA, rTempPointsB);
+ }
+ else if(bEdgeBIsCurve)
+ {
+ // test for bezier-edge cuts
+ findEdgeCutsBezierAndEdge(aCubicB, aCubicA.getStartPoint(), aCubicA.getEndPoint(), b, a, rTempPointsB, rTempPointsA);
+ }
+ else
+ {
+ // test for simple edge-edge cuts
+ findEdgeCutsTwoEdges(aCubicA.getStartPoint(), aCubicA.getEndPoint(), aCubicB.getStartPoint(), aCubicB.getEndPoint(),
+ a, b, rTempPointsA, rTempPointsB);
+ }
+ }
+ }
+ }
+ }
+ else
+ {
+ B2DPoint aCurrA(rCandidateA.getB2DPoint(0L));
+
+ for(sal_uInt32 a(0L); a < nEdgeCountA; a++)
+ {
+ const B2DPoint aNextA(rCandidateA.getB2DPoint(a + 1L == nPointCountA ? 0L : a + 1L));
+ const B2DRange aRangeA(aCurrA, aNextA);
+ B2DPoint aCurrB(rCandidateB.getB2DPoint(0L));
+
+ for(sal_uInt32 b(0L); b < nEdgeCountB; b++)
+ {
+ const B2DPoint aNextB(rCandidateB.getB2DPoint(b + 1L == nPointCountB ? 0L : b + 1L));
+ const B2DRange aRangeB(aCurrB, aNextB);
+
+ // consecutive segments touch of course
+ bool bOverlap = false;
+ if( b > a+1)
+ bOverlap = aRangeA.overlaps(aRangeB);
+ else
+ bOverlap = aRangeA.overlapsMore(aRangeB);
+ if( bOverlap)
+ {
+ // test for simple edge-edge cuts
+ findEdgeCutsTwoEdges(aCurrA, aNextA, aCurrB, aNextB, a, b, rTempPointsA, rTempPointsB);
+ }
+
+ // prepare next step
+ aCurrB = aNextB;
+ }
+
+ // prepare next step
+ aCurrA = aNextA;
+ }
+ }
+ }
+ }
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////
+
+ } // end of anonymous namespace
+} // end of namespace basegfx
+
+//////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+ namespace tools
+ {
+ ////////////////////////////////////////////////////////////////////////////////
+
+ B2DPolygon addPointsAtCutsAndTouches(const B2DPolygon& rCandidate)
+ {
+ if(rCandidate.count())
+ {
+ temporaryPointVector aTempPoints;
+
+ findTouches(rCandidate, rCandidate, aTempPoints);
+ findCuts(rCandidate, aTempPoints);
+
+ return mergeTemporaryPointsAndPolygon(rCandidate, aTempPoints);
+ }
+ else
+ {
+ return rCandidate;
+ }
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////
+
+ B2DPolyPolygon addPointsAtCutsAndTouches(const B2DPolyPolygon& rCandidate, bool bSelfIntersections)
+ {
+ const sal_uInt32 nCount(rCandidate.count());
+
+ if(nCount)
+ {
+ B2DPolyPolygon aRetval;
+
+ if(1L == nCount)
+ {
+ if(bSelfIntersections)
+ {
+ // remove self intersections
+ aRetval.append(addPointsAtCutsAndTouches(rCandidate.getB2DPolygon(0L)));
+ }
+ else
+ {
+ // copy source
+ aRetval = rCandidate;
+ }
+ }
+ else
+ {
+ // first solve self cuts and self touches for all contained single polygons
+ temporaryPolygonData *pTempData = new temporaryPolygonData[nCount];
+ sal_uInt32 a, b;
+
+ for(a = 0L; a < nCount; a++)
+ {
+ if(bSelfIntersections)
+ {
+ // use polygons with solved self intersections
+ pTempData[a].setPolygon(addPointsAtCutsAndTouches(rCandidate.getB2DPolygon(a)));
+ }
+ else
+ {
+ // copy given polygons
+ pTempData[a].setPolygon(rCandidate.getB2DPolygon(a));
+ }
+ }
+
+ // now cuts and touches between the polygons
+ for(a = 0L; a < nCount; a++)
+ {
+ for(b = 0L; b < nCount; b++)
+ {
+ if(a != b)
+ {
+ // look for touches, compare each edge polygon to all other points
+ if(pTempData[a].getRange().overlaps(pTempData[b].getRange()))
+ {
+ findTouches(pTempData[a].getPolygon(), pTempData[b].getPolygon(), pTempData[a].getTemporaryPointVector());
+ }
+ }
+
+ if(a < b)
+ {
+ // look for cuts, compare each edge polygon to following ones
+ if(pTempData[a].getRange().overlaps(pTempData[b].getRange()))
+ {
+ findCuts(pTempData[a].getPolygon(), pTempData[b].getPolygon(), pTempData[a].getTemporaryPointVector(), pTempData[b].getTemporaryPointVector());
+ }
+ }
+ }
+ }
+
+ // consolidate the result
+ for(a = 0L; a < nCount; a++)
+ {
+ aRetval.append(mergeTemporaryPointsAndPolygon(pTempData[a].getPolygon(), pTempData[a].getTemporaryPointVector()));
+ }
+
+ delete[] pTempData;
+ }
+
+ return aRetval;
+ }
+ else
+ {
+ return rCandidate;
+ }
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////
+
+ B2DPolygon addPointsAtCutsAndTouches(const B2DPolyPolygon& rMask, const B2DPolygon& rCandidate)
+ {
+ if(rCandidate.count())
+ {
+ temporaryPointVector aTempPoints;
+ temporaryPointVector aTempPointsUnused;
+
+ for(sal_uInt32 a(0L); a < rMask.count(); a++)
+ {
+ const B2DPolygon aPartMask(rMask.getB2DPolygon(a));
+
+ findTouches(rCandidate, aPartMask, aTempPoints);
+ findCuts(rCandidate, aPartMask, aTempPoints, aTempPointsUnused);
+ }
+
+ return mergeTemporaryPointsAndPolygon(rCandidate, aTempPoints);
+ }
+ else
+ {
+ return rCandidate;
+ }
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////
+
+ B2DPolyPolygon addPointsAtCutsAndTouches(const B2DPolyPolygon& rMask, const B2DPolyPolygon& rCandidate)
+ {
+ B2DPolyPolygon aRetval;
+
+ for(sal_uInt32 a(0L); a < rCandidate.count(); a++)
+ {
+ aRetval.append(addPointsAtCutsAndTouches(rMask, rCandidate.getB2DPolygon(a)));
+ }
+
+ return aRetval;
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////
+
+ B2DPolygon addPointsAtCuts(const B2DPolygon& rCandidate, const B2DPoint& rStart, const B2DPoint& rEnd)
+ {
+ const sal_uInt32 nCount(rCandidate.count());
+
+ if(nCount && !rStart.equal(rEnd))
+ {
+ const B2DRange aPolygonRange(rCandidate.getB2DRange());
+ const B2DRange aEdgeRange(rStart, rEnd);
+
+ if(aPolygonRange.overlaps(aEdgeRange))
+ {
+ const sal_uInt32 nEdgeCount(rCandidate.isClosed() ? nCount : nCount - 1);
+ temporaryPointVector aTempPoints;
+ temporaryPointVector aUnusedTempPoints;
+ B2DCubicBezier aCubic;
+
+ for(sal_uInt32 a(0); a < nEdgeCount; a++)
+ {
+ rCandidate.getBezierSegment(a, aCubic);
+ B2DRange aCubicRange(aCubic.getStartPoint(), aCubic.getEndPoint());
+
+ if(aCubic.isBezier())
+ {
+ aCubicRange.expand(aCubic.getControlPointA());
+ aCubicRange.expand(aCubic.getControlPointB());
+
+ if(aCubicRange.overlaps(aEdgeRange))
+ {
+ findEdgeCutsBezierAndEdge(aCubic, rStart, rEnd, a, 0, aTempPoints, aUnusedTempPoints);
+ }
+ }
+ else
+ {
+ if(aCubicRange.overlaps(aEdgeRange))
+ {
+ findEdgeCutsTwoEdges(aCubic.getStartPoint(), aCubic.getEndPoint(), rStart, rEnd, a, 0, aTempPoints, aUnusedTempPoints);
+ }
+ }
+ }
+
+ return mergeTemporaryPointsAndPolygon(rCandidate, aTempPoints);
+ }
+ }
+
+ return rCandidate;
+ }
+
+ B2DPolyPolygon addPointsAtCuts(const B2DPolyPolygon& rCandidate, const B2DPoint& rStart, const B2DPoint& rEnd)
+ {
+ B2DPolyPolygon aRetval;
+
+ for(sal_uInt32 a(0); a < rCandidate.count(); a++)
+ {
+ aRetval.append(addPointsAtCuts(rCandidate.getB2DPolygon(a), rStart, rEnd));
+ }
+
+ return aRetval;
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////
+
+ B2DPolygon addPointsAtCuts(const B2DPolygon& rCandidate, const B2DPolyPolygon& rPolyMask)
+ {
+ const sal_uInt32 nCountA(rCandidate.count());
+ const sal_uInt32 nCountM(rPolyMask.count());
+
+ if(nCountA && nCountM)
+ {
+ const B2DRange aRangeA(rCandidate.getB2DRange());
+ const B2DRange aRangeM(rPolyMask.getB2DRange());
+
+ if(aRangeA.overlaps(aRangeM))
+ {
+ const sal_uInt32 nEdgeCountA(rCandidate.isClosed() ? nCountA : nCountA - 1);
+ temporaryPointVector aTempPointsA;
+ temporaryPointVector aUnusedTempPointsB;
+
+ for(sal_uInt32 m(0); m < nCountM; m++)
+ {
+ const B2DPolygon aMask(rPolyMask.getB2DPolygon(m));
+ const sal_uInt32 nCountB(aMask.count());
+
+ if(nCountB)
+ {
+ B2DCubicBezier aCubicA;
+ B2DCubicBezier aCubicB;
+
+ for(sal_uInt32 a(0); a < nEdgeCountA; a++)
+ {
+ rCandidate.getBezierSegment(a, aCubicA);
+ const bool bCubicAIsCurve(aCubicA.isBezier());
+ B2DRange aCubicRangeA(aCubicA.getStartPoint(), aCubicA.getEndPoint());
+
+ if(bCubicAIsCurve)
+ {
+ aCubicRangeA.expand(aCubicA.getControlPointA());
+ aCubicRangeA.expand(aCubicA.getControlPointB());
+ }
+
+ for(sal_uInt32 b(0); b < nCountB; b++)
+ {
+ aMask.getBezierSegment(b, aCubicB);
+ const bool bCubicBIsCurve(aCubicB.isBezier());
+ B2DRange aCubicRangeB(aCubicB.getStartPoint(), aCubicB.getEndPoint());
+
+ if(bCubicBIsCurve)
+ {
+ aCubicRangeB.expand(aCubicB.getControlPointA());
+ aCubicRangeB.expand(aCubicB.getControlPointB());
+ }
+
+ if(aCubicRangeA.overlaps(aCubicRangeB))
+ {
+ if(bCubicAIsCurve && bCubicBIsCurve)
+ {
+ findEdgeCutsTwoBeziers(aCubicA, aCubicB, a, b, aTempPointsA, aUnusedTempPointsB);
+ }
+ else if(bCubicAIsCurve)
+ {
+ findEdgeCutsBezierAndEdge(aCubicA, aCubicB.getStartPoint(), aCubicB.getEndPoint(), a, b, aTempPointsA, aUnusedTempPointsB);
+ }
+ else if(bCubicBIsCurve)
+ {
+ findEdgeCutsBezierAndEdge(aCubicB, aCubicA.getStartPoint(), aCubicA.getEndPoint(), b, a, aUnusedTempPointsB, aTempPointsA);
+ }
+ else
+ {
+ findEdgeCutsTwoEdges(aCubicA.getStartPoint(), aCubicA.getEndPoint(), aCubicB.getStartPoint(), aCubicB.getEndPoint(), a, b, aTempPointsA, aUnusedTempPointsB);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ return mergeTemporaryPointsAndPolygon(rCandidate, aTempPointsA);
+ }
+ }
+
+ return rCandidate;
+ }
+
+ B2DPolyPolygon addPointsAtCuts(const B2DPolyPolygon& rCandidate, const B2DPolyPolygon& rMask)
+ {
+ B2DPolyPolygon aRetval;
+
+ for(sal_uInt32 a(0); a < rCandidate.count(); a++)
+ {
+ aRetval.append(addPointsAtCuts(rCandidate.getB2DPolygon(a), rMask));
+ }
+
+ return aRetval;
+ }
+
+ B2DPolygon addPointsAtCuts(const B2DPolygon& rCandidate)
+ {
+ if(rCandidate.count())
+ {
+ temporaryPointVector aTempPoints;
+
+ findCuts(rCandidate, aTempPoints);
+
+ return mergeTemporaryPointsAndPolygon(rCandidate, aTempPoints);
+ }
+ else
+ {
+ return rCandidate;
+ }
+ }
+
+ B2DPolyPolygon addPointsAtCuts(const B2DPolyPolygon& rCandidate, bool bSelfIntersections)
+ {
+ const sal_uInt32 nCount(rCandidate.count());
+
+ if(nCount)
+ {
+ B2DPolyPolygon aRetval;
+
+ if(1 == nCount)
+ {
+ if(bSelfIntersections)
+ {
+ // remove self intersections
+ aRetval.append(addPointsAtCuts(rCandidate.getB2DPolygon(0)));
+ }
+ else
+ {
+ // copy source
+ aRetval = rCandidate;
+ }
+ }
+ else
+ {
+ // first solve self cuts for all contained single polygons
+ temporaryPolygonData *pTempData = new temporaryPolygonData[nCount];
+ sal_uInt32 a, b;
+
+ for(a = 0; a < nCount; a++)
+ {
+ if(bSelfIntersections)
+ {
+ // use polygons with solved self intersections
+ pTempData[a].setPolygon(addPointsAtCuts(rCandidate.getB2DPolygon(a)));
+ }
+ else
+ {
+ // copy given polygons
+ pTempData[a].setPolygon(rCandidate.getB2DPolygon(a));
+ }
+ }
+
+ // now cuts and touches between the polygons
+ for(a = 0; a < nCount; a++)
+ {
+ for(b = 0; b < nCount; b++)
+ {
+ if(a < b)
+ {
+ // look for cuts, compare each edge polygon to following ones
+ if(pTempData[a].getRange().overlaps(pTempData[b].getRange()))
+ {
+ findCuts(pTempData[a].getPolygon(), pTempData[b].getPolygon(), pTempData[a].getTemporaryPointVector(), pTempData[b].getTemporaryPointVector());
+ }
+ }
+ }
+ }
+
+ // consolidate the result
+ for(a = 0L; a < nCount; a++)
+ {
+ aRetval.append(mergeTemporaryPointsAndPolygon(pTempData[a].getPolygon(), pTempData[a].getTemporaryPointVector()));
+ }
+
+ delete[] pTempData;
+ }
+
+ return aRetval;
+ }
+ else
+ {
+ return rCandidate;
+ }
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////
+
+ } // end of namespace tools
+} // end of namespace basegfx
+
+//////////////////////////////////////////////////////////////////////////////
+// eof
diff --git a/basegfx/source/polygon/b2dpolygontools.cxx b/basegfx/source/polygon/b2dpolygontools.cxx
new file mode 100644
index 000000000000..e9db491ecd48
--- /dev/null
+++ b/basegfx/source/polygon/b2dpolygontools.cxx
@@ -0,0 +1,3613 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basegfx.hxx"
+#include <basegfx/numeric/ftools.hxx>
+#include <basegfx/polygon/b2dpolygontools.hxx>
+#include <osl/diagnose.h>
+#include <rtl/math.hxx>
+#include <basegfx/polygon/b2dpolygon.hxx>
+#include <basegfx/polygon/b2dpolypolygon.hxx>
+#include <basegfx/range/b2drange.hxx>
+#include <basegfx/curve/b2dcubicbezier.hxx>
+#include <basegfx/polygon/b2dpolypolygoncutter.hxx>
+#include <basegfx/point/b3dpoint.hxx>
+#include <basegfx/matrix/b3dhommatrix.hxx>
+#include <basegfx/matrix/b2dhommatrix.hxx>
+#include <basegfx/curve/b2dbeziertools.hxx>
+#include <basegfx/matrix/b2dhommatrixtools.hxx>
+#include <osl/mutex.hxx>
+
+#include <numeric>
+#include <limits>
+
+// #i37443#
+#define ANGLE_BOUND_START_VALUE (2.25)
+#define ANGLE_BOUND_MINIMUM_VALUE (0.1)
+#define COUNT_SUBDIVIDE_DEFAULT (4L)
+#ifdef DBG_UTIL
+static double fAngleBoundStartValue = ANGLE_BOUND_START_VALUE;
+#endif
+#define STEPSPERQUARTER (3)
+
+//////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+ namespace tools
+ {
+ void openWithGeometryChange(B2DPolygon& rCandidate)
+ {
+ if(rCandidate.isClosed())
+ {
+ if(rCandidate.count())
+ {
+ rCandidate.append(rCandidate.getB2DPoint(0));
+
+ if(rCandidate.areControlPointsUsed() && rCandidate.isPrevControlPointUsed(0))
+ {
+ rCandidate.setPrevControlPoint(rCandidate.count() - 1, rCandidate.getPrevControlPoint(0));
+ rCandidate.resetPrevControlPoint(0);
+ }
+ }
+
+ rCandidate.setClosed(false);
+ }
+ }
+
+ void closeWithGeometryChange(B2DPolygon& rCandidate)
+ {
+ if(!rCandidate.isClosed())
+ {
+ while(rCandidate.count() > 1 && rCandidate.getB2DPoint(0) == rCandidate.getB2DPoint(rCandidate.count() - 1))
+ {
+ if(rCandidate.areControlPointsUsed() && rCandidate.isPrevControlPointUsed(rCandidate.count() - 1))
+ {
+ rCandidate.setPrevControlPoint(0, rCandidate.getPrevControlPoint(rCandidate.count() - 1));
+ }
+
+ rCandidate.remove(rCandidate.count() - 1);
+ }
+
+ rCandidate.setClosed(true);
+ }
+ }
+
+ void checkClosed(B2DPolygon& rCandidate)
+ {
+ // #i80172# Removed unnecessary assertion
+ // OSL_ENSURE(!rCandidate.isClosed(), "checkClosed: already closed (!)");
+
+ if(rCandidate.count() > 1 && rCandidate.getB2DPoint(0) == rCandidate.getB2DPoint(rCandidate.count() - 1))
+ {
+ closeWithGeometryChange(rCandidate);
+ }
+ }
+
+ // Get successor and predecessor indices. Returning the same index means there
+ // is none. Same for successor.
+ sal_uInt32 getIndexOfPredecessor(sal_uInt32 nIndex, const B2DPolygon& rCandidate)
+ {
+ OSL_ENSURE(nIndex < rCandidate.count(), "getIndexOfPredecessor: Access to polygon out of range (!)");
+
+ if(nIndex)
+ {
+ return nIndex - 1L;
+ }
+ else if(rCandidate.count())
+ {
+ return rCandidate.count() - 1L;
+ }
+ else
+ {
+ return nIndex;
+ }
+ }
+
+ sal_uInt32 getIndexOfSuccessor(sal_uInt32 nIndex, const B2DPolygon& rCandidate)
+ {
+ OSL_ENSURE(nIndex < rCandidate.count(), "getIndexOfPredecessor: Access to polygon out of range (!)");
+
+ if(nIndex + 1L < rCandidate.count())
+ {
+ return nIndex + 1L;
+ }
+ else if(nIndex + 1L == rCandidate.count())
+ {
+ return 0L;
+ }
+ else
+ {
+ return nIndex;
+ }
+ }
+
+ B2VectorOrientation getOrientation(const B2DPolygon& rCandidate)
+ {
+ B2VectorOrientation eRetval(ORIENTATION_NEUTRAL);
+
+ if(rCandidate.count() > 2L || rCandidate.areControlPointsUsed())
+ {
+ const double fSignedArea(getSignedArea(rCandidate));
+
+ if(fTools::equalZero(fSignedArea))
+ {
+ // ORIENTATION_NEUTRAL, already set
+ }
+ if(fSignedArea > 0.0)
+ {
+ eRetval = ORIENTATION_POSITIVE;
+ }
+ else if(fSignedArea < 0.0)
+ {
+ eRetval = ORIENTATION_NEGATIVE;
+ }
+ }
+
+ return eRetval;
+ }
+
+ B2VectorContinuity getContinuityInPoint(const B2DPolygon& rCandidate, sal_uInt32 nIndex)
+ {
+ return rCandidate.getContinuityInPoint(nIndex);
+ }
+
+ B2DPolygon adaptiveSubdivideByDistance(const B2DPolygon& rCandidate, double fDistanceBound)
+ {
+ if(rCandidate.areControlPointsUsed())
+ {
+ const sal_uInt32 nPointCount(rCandidate.count());
+ B2DPolygon aRetval;
+
+ if(nPointCount)
+ {
+ // prepare edge-oriented loop
+ const sal_uInt32 nEdgeCount(rCandidate.isClosed() ? nPointCount : nPointCount - 1);
+ B2DCubicBezier aBezier;
+ aBezier.setStartPoint(rCandidate.getB2DPoint(0));
+
+ // perf: try to avoid too many realloctions by guessing the result's pointcount
+ aRetval.reserve(nPointCount*4);
+
+ // add start point (always)
+ aRetval.append(aBezier.getStartPoint());
+
+ for(sal_uInt32 a(0L); a < nEdgeCount; a++)
+ {
+ // get next and control points
+ const sal_uInt32 nNextIndex((a + 1) % nPointCount);
+ aBezier.setEndPoint(rCandidate.getB2DPoint(nNextIndex));
+ aBezier.setControlPointA(rCandidate.getNextControlPoint(a));
+ aBezier.setControlPointB(rCandidate.getPrevControlPoint(nNextIndex));
+ aBezier.testAndSolveTrivialBezier();
+
+ if(aBezier.isBezier())
+ {
+ // add curved edge and generate DistanceBound
+ double fBound(0.0);
+
+ if(0.0 == fDistanceBound)
+ {
+ // If not set, use B2DCubicBezier functionality to guess a rough value
+ const double fRoughLength((aBezier.getEdgeLength() + aBezier.getControlPolygonLength()) / 2.0);
+
+ // take 1/100th of the rough curve length
+ fBound = fRoughLength * 0.01;
+ }
+ else
+ {
+ // use given bound value
+ fBound = fDistanceBound;
+ }
+
+ // make sure bound value is not too small. The base units are 1/100th mm, thus
+ // just make sure it's not smaller then 1/100th of that
+ if(fBound < 0.01)
+ {
+ fBound = 0.01;
+ }
+
+ // call adaptive subdivide which adds edges to aRetval accordingly
+ aBezier.adaptiveSubdivideByDistance(aRetval, fBound);
+ }
+ else
+ {
+ // add non-curved edge
+ aRetval.append(aBezier.getEndPoint());
+ }
+
+ // prepare next step
+ aBezier.setStartPoint(aBezier.getEndPoint());
+ }
+
+ if(rCandidate.isClosed())
+ {
+ // set closed flag and correct last point (which is added double now).
+ closeWithGeometryChange(aRetval);
+ }
+ }
+
+ return aRetval;
+ }
+ else
+ {
+ return rCandidate;
+ }
+ }
+
+ B2DPolygon adaptiveSubdivideByAngle(const B2DPolygon& rCandidate, double fAngleBound)
+ {
+ if(rCandidate.areControlPointsUsed())
+ {
+ const sal_uInt32 nPointCount(rCandidate.count());
+ B2DPolygon aRetval;
+
+ if(nPointCount)
+ {
+ // prepare edge-oriented loop
+ const sal_uInt32 nEdgeCount(rCandidate.isClosed() ? nPointCount : nPointCount - 1);
+ B2DCubicBezier aBezier;
+ aBezier.setStartPoint(rCandidate.getB2DPoint(0));
+
+ // perf: try to avoid too many realloctions by guessing the result's pointcount
+ aRetval.reserve(nPointCount*4);
+
+ // add start point (always)
+ aRetval.append(aBezier.getStartPoint());
+
+ // #i37443# prepare convenient AngleBound if none was given
+ if(0.0 == fAngleBound)
+ {
+#ifdef DBG_UTIL
+ fAngleBound = fAngleBoundStartValue;
+#else
+ fAngleBound = ANGLE_BOUND_START_VALUE;
+#endif
+ }
+ else if(fTools::less(fAngleBound, ANGLE_BOUND_MINIMUM_VALUE))
+ {
+ fAngleBound = 0.1;
+ }
+
+ for(sal_uInt32 a(0L); a < nEdgeCount; a++)
+ {
+ // get next and control points
+ const sal_uInt32 nNextIndex((a + 1) % nPointCount);
+ aBezier.setEndPoint(rCandidate.getB2DPoint(nNextIndex));
+ aBezier.setControlPointA(rCandidate.getNextControlPoint(a));
+ aBezier.setControlPointB(rCandidate.getPrevControlPoint(nNextIndex));
+ aBezier.testAndSolveTrivialBezier();
+
+ if(aBezier.isBezier())
+ {
+ // call adaptive subdivide
+ aBezier.adaptiveSubdivideByAngle(aRetval, fAngleBound, true);
+ }
+ else
+ {
+ // add non-curved edge
+ aRetval.append(aBezier.getEndPoint());
+ }
+
+ // prepare next step
+ aBezier.setStartPoint(aBezier.getEndPoint());
+ }
+
+ if(rCandidate.isClosed())
+ {
+ // set closed flag and correct last point (which is added double now).
+ closeWithGeometryChange(aRetval);
+ }
+ }
+
+ return aRetval;
+ }
+ else
+ {
+ return rCandidate;
+ }
+ }
+
+ B2DPolygon adaptiveSubdivideByCount(const B2DPolygon& rCandidate, sal_uInt32 nCount)
+ {
+ if(rCandidate.areControlPointsUsed())
+ {
+ const sal_uInt32 nPointCount(rCandidate.count());
+ B2DPolygon aRetval;
+
+ if(nPointCount)
+ {
+ // prepare edge-oriented loop
+ const sal_uInt32 nEdgeCount(rCandidate.isClosed() ? nPointCount : nPointCount - 1);
+ B2DCubicBezier aBezier;
+ aBezier.setStartPoint(rCandidate.getB2DPoint(0));
+
+ // perf: try to avoid too many realloctions by guessing the result's pointcount
+ aRetval.reserve(nPointCount*4);
+
+ // add start point (always)
+ aRetval.append(aBezier.getStartPoint());
+
+ // #i37443# prepare convenient count if none was given
+ if(0L == nCount)
+ {
+ nCount = COUNT_SUBDIVIDE_DEFAULT;
+ }
+
+ for(sal_uInt32 a(0L); a < nEdgeCount; a++)
+ {
+ // get next and control points
+ const sal_uInt32 nNextIndex((a + 1) % nPointCount);
+ aBezier.setEndPoint(rCandidate.getB2DPoint(nNextIndex));
+ aBezier.setControlPointA(rCandidate.getNextControlPoint(a));
+ aBezier.setControlPointB(rCandidate.getPrevControlPoint(nNextIndex));
+ aBezier.testAndSolveTrivialBezier();
+
+ if(aBezier.isBezier())
+ {
+ // call adaptive subdivide
+ aBezier.adaptiveSubdivideByCount(aRetval, nCount);
+ }
+ else
+ {
+ // add non-curved edge
+ aRetval.append(aBezier.getEndPoint());
+ }
+
+ // prepare next step
+ aBezier.setStartPoint(aBezier.getEndPoint());
+ }
+
+ if(rCandidate.isClosed())
+ {
+ // set closed flag and correct last point (which is added double now).
+ closeWithGeometryChange(aRetval);
+ }
+ }
+
+ return aRetval;
+ }
+ else
+ {
+ return rCandidate;
+ }
+ }
+
+ bool isInside(const B2DPolygon& rCandidate, const B2DPoint& rPoint, bool bWithBorder)
+ {
+ const B2DPolygon aCandidate(rCandidate.areControlPointsUsed() ? rCandidate.getDefaultAdaptiveSubdivision() : rCandidate);
+
+ if(bWithBorder && isPointOnPolygon(aCandidate, rPoint, true))
+ {
+ return true;
+ }
+ else
+ {
+ bool bRetval(false);
+ const sal_uInt32 nPointCount(aCandidate.count());
+
+ if(nPointCount)
+ {
+ B2DPoint aCurrentPoint(aCandidate.getB2DPoint(nPointCount - 1L));
+
+ for(sal_uInt32 a(0L); a < nPointCount; a++)
+ {
+ const B2DPoint aPreviousPoint(aCurrentPoint);
+ aCurrentPoint = aCandidate.getB2DPoint(a);
+
+ // cross-over in Y?
+ const bool bCompYA(fTools::more(aPreviousPoint.getY(), rPoint.getY()));
+ const bool bCompYB(fTools::more(aCurrentPoint.getY(), rPoint.getY()));
+
+ if(bCompYA != bCompYB)
+ {
+ // cross-over in X?
+ const bool bCompXA(fTools::more(aPreviousPoint.getX(), rPoint.getX()));
+ const bool bCompXB(fTools::more(aCurrentPoint.getX(), rPoint.getX()));
+
+ if(bCompXA == bCompXB)
+ {
+ if(bCompXA)
+ {
+ bRetval = !bRetval;
+ }
+ }
+ else
+ {
+ const double fCompare(
+ aCurrentPoint.getX() - (aCurrentPoint.getY() - rPoint.getY()) *
+ (aPreviousPoint.getX() - aCurrentPoint.getX()) /
+ (aPreviousPoint.getY() - aCurrentPoint.getY()));
+
+ if(fTools::more(fCompare, rPoint.getX()))
+ {
+ bRetval = !bRetval;
+ }
+ }
+ }
+ }
+ }
+
+ return bRetval;
+ }
+ }
+
+ bool isInside(const B2DPolygon& rCandidate, const B2DPolygon& rPolygon, bool bWithBorder)
+ {
+ const B2DPolygon aCandidate(rCandidate.areControlPointsUsed() ? rCandidate.getDefaultAdaptiveSubdivision() : rCandidate);
+ const B2DPolygon aPolygon(rPolygon.areControlPointsUsed() ? rPolygon.getDefaultAdaptiveSubdivision() : rPolygon);
+ const sal_uInt32 nPointCount(aPolygon.count());
+
+ for(sal_uInt32 a(0L); a < nPointCount; a++)
+ {
+ const B2DPoint aTestPoint(aPolygon.getB2DPoint(a));
+
+ if(!isInside(aCandidate, aTestPoint, bWithBorder))
+ {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ B2DRange getRangeWithControlPoints(const B2DPolygon& rCandidate)
+ {
+ const sal_uInt32 nPointCount(rCandidate.count());
+ B2DRange aRetval;
+
+ if(nPointCount)
+ {
+ const bool bControlPointsUsed(rCandidate.areControlPointsUsed());
+
+ for(sal_uInt32 a(0); a < nPointCount; a++)
+ {
+ aRetval.expand(rCandidate.getB2DPoint(a));
+
+ if(bControlPointsUsed)
+ {
+ aRetval.expand(rCandidate.getNextControlPoint(a));
+ aRetval.expand(rCandidate.getPrevControlPoint(a));
+ }
+ }
+ }
+
+ return aRetval;
+ }
+
+ B2DRange getRange(const B2DPolygon& rCandidate)
+ {
+ // changed to use internally buffered version at B2DPolygon
+ return rCandidate.getB2DRange();
+ }
+
+ double getSignedArea(const B2DPolygon& rCandidate)
+ {
+ const B2DPolygon aCandidate(rCandidate.areControlPointsUsed() ? rCandidate.getDefaultAdaptiveSubdivision() : rCandidate);
+ double fRetval(0.0);
+ const sal_uInt32 nPointCount(aCandidate.count());
+
+ if(nPointCount > 2)
+ {
+ for(sal_uInt32 a(0L); a < nPointCount; a++)
+ {
+ const B2DPoint aPreviousPoint(aCandidate.getB2DPoint((!a) ? nPointCount - 1L : a - 1L));
+ const B2DPoint aCurrentPoint(aCandidate.getB2DPoint(a));
+
+ fRetval += aPreviousPoint.getX() * aCurrentPoint.getY();
+ fRetval -= aPreviousPoint.getY() * aCurrentPoint.getX();
+ }
+
+ fRetval /= 2.0;
+
+ // correct to zero if small enough. Also test the quadratic
+ // of the result since the precision is near quadratic due to
+ // the algorithm
+ if(fTools::equalZero(fRetval) || fTools::equalZero(fRetval * fRetval))
+ {
+ fRetval = 0.0;
+ }
+ }
+
+ return fRetval;
+ }
+
+ double getArea(const B2DPolygon& rCandidate)
+ {
+ double fRetval(0.0);
+
+ if(rCandidate.count() > 2 || rCandidate.areControlPointsUsed())
+ {
+ fRetval = getSignedArea(rCandidate);
+ const double fZero(0.0);
+
+ if(fTools::less(fRetval, fZero))
+ {
+ fRetval = -fRetval;
+ }
+ }
+
+ return fRetval;
+ }
+
+ double getEdgeLength(const B2DPolygon& rCandidate, sal_uInt32 nIndex)
+ {
+ const sal_uInt32 nPointCount(rCandidate.count());
+ OSL_ENSURE(nIndex < nPointCount, "getEdgeLength: Access to polygon out of range (!)");
+ double fRetval(0.0);
+
+ if(nPointCount)
+ {
+ const sal_uInt32 nNextIndex((nIndex + 1) % nPointCount);
+
+ if(rCandidate.areControlPointsUsed())
+ {
+ B2DCubicBezier aEdge;
+
+ aEdge.setStartPoint(rCandidate.getB2DPoint(nIndex));
+ aEdge.setControlPointA(rCandidate.getNextControlPoint(nIndex));
+ aEdge.setControlPointB(rCandidate.getPrevControlPoint(nNextIndex));
+ aEdge.setEndPoint(rCandidate.getB2DPoint(nNextIndex));
+
+ fRetval = aEdge.getLength();
+ }
+ else
+ {
+ const B2DPoint aCurrent(rCandidate.getB2DPoint(nIndex));
+ const B2DPoint aNext(rCandidate.getB2DPoint(nNextIndex));
+
+ fRetval = B2DVector(aNext - aCurrent).getLength();
+ }
+ }
+
+ return fRetval;
+ }
+
+ double getLength(const B2DPolygon& rCandidate)
+ {
+ double fRetval(0.0);
+ const sal_uInt32 nPointCount(rCandidate.count());
+
+ if(nPointCount)
+ {
+ const sal_uInt32 nEdgeCount(rCandidate.isClosed() ? nPointCount : nPointCount - 1L);
+
+ if(rCandidate.areControlPointsUsed())
+ {
+ B2DCubicBezier aEdge;
+ aEdge.setStartPoint(rCandidate.getB2DPoint(0));
+
+ for(sal_uInt32 a(0); a < nEdgeCount; a++)
+ {
+ const sal_uInt32 nNextIndex((a + 1) % nPointCount);
+ aEdge.setControlPointA(rCandidate.getNextControlPoint(a));
+ aEdge.setControlPointB(rCandidate.getPrevControlPoint(nNextIndex));
+ aEdge.setEndPoint(rCandidate.getB2DPoint(nNextIndex));
+
+ fRetval += aEdge.getLength();
+ aEdge.setStartPoint(aEdge.getEndPoint());
+ }
+ }
+ else
+ {
+ B2DPoint aCurrent(rCandidate.getB2DPoint(0));
+
+ for(sal_uInt32 a(0); a < nEdgeCount; a++)
+ {
+ const sal_uInt32 nNextIndex((a + 1) % nPointCount);
+ const B2DPoint aNext(rCandidate.getB2DPoint(nNextIndex));
+
+ fRetval += B2DVector(aNext - aCurrent).getLength();
+ aCurrent = aNext;
+ }
+ }
+ }
+
+ return fRetval;
+ }
+
+ B2DPoint getPositionAbsolute(const B2DPolygon& rCandidate, double fDistance, double fLength)
+ {
+ B2DPoint aRetval;
+ const sal_uInt32 nPointCount(rCandidate.count());
+
+ if( 1L == nPointCount )
+ {
+ // only one point (i.e. no edge) - simply take that point
+ aRetval = rCandidate.getB2DPoint(0);
+ }
+ else if(nPointCount > 1L)
+ {
+ const sal_uInt32 nEdgeCount(rCandidate.isClosed() ? nPointCount : nPointCount - 1);
+ sal_uInt32 nIndex(0L);
+ bool bIndexDone(false);
+
+ // get length if not given
+ if(fTools::equalZero(fLength))
+ {
+ fLength = getLength(rCandidate);
+ }
+
+ if(fTools::less(fDistance, 0.0))
+ {
+ // handle fDistance < 0.0
+ if(rCandidate.isClosed())
+ {
+ // if fDistance < 0.0 increment with multiple of fLength
+ sal_uInt32 nCount(sal_uInt32(-fDistance / fLength));
+ fDistance += double(nCount + 1L) * fLength;
+ }
+ else
+ {
+ // crop to polygon start
+ fDistance = 0.0;
+ bIndexDone = true;
+ }
+ }
+ else if(fTools::moreOrEqual(fDistance, fLength))
+ {
+ // handle fDistance >= fLength
+ if(rCandidate.isClosed())
+ {
+ // if fDistance >= fLength decrement with multiple of fLength
+ sal_uInt32 nCount(sal_uInt32(fDistance / fLength));
+ fDistance -= (double)(nCount) * fLength;
+ }
+ else
+ {
+ // crop to polygon end
+ fDistance = 0.0;
+ nIndex = nEdgeCount;
+ bIndexDone = true;
+ }
+ }
+
+ // look for correct index. fDistance is now [0.0 .. fLength[
+ double fEdgeLength(getEdgeLength(rCandidate, nIndex));
+
+ while(!bIndexDone)
+ {
+ // edge found must be on the half-open range
+ // [0,fEdgeLength).
+ // Note that in theory, we cannot move beyond
+ // the last polygon point, since fDistance>=fLength
+ // is checked above. Unfortunately, with floating-
+ // point calculations, this case might happen.
+ // Handled by nIndex check below
+ if(nIndex < nEdgeCount && fTools::moreOrEqual(fDistance, fEdgeLength))
+ {
+ // go to next edge
+ fDistance -= fEdgeLength;
+ fEdgeLength = getEdgeLength(rCandidate, ++nIndex);
+ }
+ else
+ {
+ // it's on this edge, stop
+ bIndexDone = true;
+ }
+ }
+
+ // get the point using nIndex
+ aRetval = rCandidate.getB2DPoint(nIndex);
+
+ // if fDistance != 0.0, move that length on the edge. The edge
+ // length is in fEdgeLength.
+ if(!fTools::equalZero(fDistance))
+ {
+ if(fTools::moreOrEqual(fDistance, fEdgeLength))
+ {
+ // end point of choosen edge
+ const sal_uInt32 nNextIndex((nIndex + 1) % nPointCount);
+ aRetval = rCandidate.getB2DPoint(nNextIndex);
+ }
+ else if(fTools::equalZero(fDistance))
+ {
+ // start point of choosen edge
+ aRetval = aRetval;
+ }
+ else
+ {
+ // inside edge
+ const sal_uInt32 nNextIndex((nIndex + 1) % nPointCount);
+ const B2DPoint aNextPoint(rCandidate.getB2DPoint(nNextIndex));
+ bool bDone(false);
+
+ // add calculated average value to the return value
+ if(rCandidate.areControlPointsUsed())
+ {
+ // get as bezier segment
+ const B2DCubicBezier aBezierSegment(
+ aRetval, rCandidate.getNextControlPoint(nIndex),
+ rCandidate.getPrevControlPoint(nNextIndex), aNextPoint);
+
+ if(aBezierSegment.isBezier())
+ {
+ // use B2DCubicBezierHelper to bridge the non-linear gap between
+ // length and bezier distances
+ const B2DCubicBezierHelper aBezierSegmentHelper(aBezierSegment);
+ const double fBezierDistance(aBezierSegmentHelper.distanceToRelative(fDistance));
+
+ aRetval = aBezierSegment.interpolatePoint(fBezierDistance);
+ bDone = true;
+ }
+ }
+
+ if(!bDone)
+ {
+ const double fRelativeInEdge(fDistance / fEdgeLength);
+ aRetval = interpolate(aRetval, aNextPoint, fRelativeInEdge);
+ }
+ }
+ }
+ }
+
+ return aRetval;
+ }
+
+ B2DPoint getPositionRelative(const B2DPolygon& rCandidate, double fDistance, double fLength)
+ {
+ // get length if not given
+ if(fTools::equalZero(fLength))
+ {
+ fLength = getLength(rCandidate);
+ }
+
+ // multiply fDistance with real length to get absolute position and
+ // use getPositionAbsolute
+ return getPositionAbsolute(rCandidate, fDistance * fLength, fLength);
+ }
+
+ B2DPolygon getSnippetAbsolute(const B2DPolygon& rCandidate, double fFrom, double fTo, double fLength)
+ {
+ const sal_uInt32 nPointCount(rCandidate.count());
+
+ if(nPointCount)
+ {
+ // get length if not given
+ if(fTools::equalZero(fLength))
+ {
+ fLength = getLength(rCandidate);
+ }
+
+ // test and correct fFrom
+ if(fTools::less(fFrom, 0.0))
+ {
+ fFrom = 0.0;
+ }
+
+ // test and correct fTo
+ if(fTools::more(fTo, fLength))
+ {
+ fTo = fLength;
+ }
+
+ // test and correct relationship of fFrom, fTo
+ if(fTools::more(fFrom, fTo))
+ {
+ fFrom = fTo = (fFrom + fTo) / 2.0;
+ }
+
+ if(fTools::equalZero(fFrom) && fTools::equal(fTo, fLength))
+ {
+ // no change, result is the whole polygon
+ return rCandidate;
+ }
+ else
+ {
+ B2DPolygon aRetval;
+ const sal_uInt32 nEdgeCount(rCandidate.isClosed() ? nPointCount : nPointCount - 1);
+ double fPositionOfStart(0.0);
+ bool bStartDone(false);
+ bool bEndDone(false);
+
+ for(sal_uInt32 a(0L); !(bStartDone && bEndDone) && a < nEdgeCount; a++)
+ {
+ const double fEdgeLength(getEdgeLength(rCandidate, a));
+
+ if(!bStartDone)
+ {
+ if(fTools::equalZero(fFrom))
+ {
+ aRetval.append(rCandidate.getB2DPoint(a));
+
+ if(rCandidate.areControlPointsUsed())
+ {
+ aRetval.setNextControlPoint(aRetval.count() - 1, rCandidate.getNextControlPoint(a));
+ }
+
+ bStartDone = true;
+ }
+ else if(fTools::moreOrEqual(fFrom, fPositionOfStart) && fTools::less(fFrom, fPositionOfStart + fEdgeLength))
+ {
+ // calculate and add start point
+ if(fTools::equalZero(fEdgeLength))
+ {
+ aRetval.append(rCandidate.getB2DPoint(a));
+
+ if(rCandidate.areControlPointsUsed())
+ {
+ aRetval.setNextControlPoint(aRetval.count() - 1, rCandidate.getNextControlPoint(a));
+ }
+ }
+ else
+ {
+ const sal_uInt32 nNextIndex((a + 1) % nPointCount);
+ const B2DPoint aStart(rCandidate.getB2DPoint(a));
+ const B2DPoint aEnd(rCandidate.getB2DPoint(nNextIndex));
+ bool bDone(false);
+
+ if(rCandidate.areControlPointsUsed())
+ {
+ const B2DCubicBezier aBezierSegment(
+ aStart, rCandidate.getNextControlPoint(a),
+ rCandidate.getPrevControlPoint(nNextIndex), aEnd);
+
+ if(aBezierSegment.isBezier())
+ {
+ // use B2DCubicBezierHelper to bridge the non-linear gap between
+ // length and bezier distances
+ const B2DCubicBezierHelper aBezierSegmentHelper(aBezierSegment);
+ const double fBezierDistance(aBezierSegmentHelper.distanceToRelative(fFrom - fPositionOfStart));
+ B2DCubicBezier aRight;
+
+ aBezierSegment.split(fBezierDistance, 0, &aRight);
+ aRetval.append(aRight.getStartPoint());
+ aRetval.setNextControlPoint(aRetval.count() - 1, aRight.getControlPointA());
+ bDone = true;
+ }
+ }
+
+ if(!bDone)
+ {
+ const double fRelValue((fFrom - fPositionOfStart) / fEdgeLength);
+ aRetval.append(interpolate(aStart, aEnd, fRelValue));
+ }
+ }
+
+ bStartDone = true;
+
+ // if same point, end is done, too.
+ if(fFrom == fTo)
+ {
+ bEndDone = true;
+ }
+ }
+ }
+
+ if(!bEndDone && fTools::moreOrEqual(fTo, fPositionOfStart) && fTools::less(fTo, fPositionOfStart + fEdgeLength))
+ {
+ // calculate and add end point
+ if(fTools::equalZero(fEdgeLength))
+ {
+ const sal_uInt32 nNextIndex((a + 1) % nPointCount);
+ aRetval.append(rCandidate.getB2DPoint(nNextIndex));
+
+ if(rCandidate.areControlPointsUsed())
+ {
+ aRetval.setPrevControlPoint(aRetval.count() - 1, rCandidate.getPrevControlPoint(nNextIndex));
+ }
+ }
+ else
+ {
+ const sal_uInt32 nNextIndex((a + 1) % nPointCount);
+ const B2DPoint aStart(rCandidate.getB2DPoint(a));
+ const B2DPoint aEnd(rCandidate.getB2DPoint(nNextIndex));
+ bool bDone(false);
+
+ if(rCandidate.areControlPointsUsed())
+ {
+ const B2DCubicBezier aBezierSegment(
+ aStart, rCandidate.getNextControlPoint(a),
+ rCandidate.getPrevControlPoint(nNextIndex), aEnd);
+
+ if(aBezierSegment.isBezier())
+ {
+ // use B2DCubicBezierHelper to bridge the non-linear gap between
+ // length and bezier distances
+ const B2DCubicBezierHelper aBezierSegmentHelper(aBezierSegment);
+ const double fBezierDistance(aBezierSegmentHelper.distanceToRelative(fTo - fPositionOfStart));
+ B2DCubicBezier aLeft;
+
+ aBezierSegment.split(fBezierDistance, &aLeft, 0);
+ aRetval.append(aLeft.getEndPoint());
+ aRetval.setPrevControlPoint(aRetval.count() - 1, aLeft.getControlPointB());
+ bDone = true;
+ }
+ }
+
+ if(!bDone)
+ {
+ const double fRelValue((fTo - fPositionOfStart) / fEdgeLength);
+ aRetval.append(interpolate(aStart, aEnd, fRelValue));
+ }
+ }
+
+ bEndDone = true;
+ }
+
+ if(!bEndDone)
+ {
+ if(bStartDone)
+ {
+ // add segments end point
+ const sal_uInt32 nNextIndex((a + 1) % nPointCount);
+ aRetval.append(rCandidate.getB2DPoint(nNextIndex));
+
+ if(rCandidate.areControlPointsUsed())
+ {
+ aRetval.setPrevControlPoint(aRetval.count() - 1, rCandidate.getPrevControlPoint(nNextIndex));
+ aRetval.setNextControlPoint(aRetval.count() - 1, rCandidate.getNextControlPoint(nNextIndex));
+ }
+ }
+
+ // increment fPositionOfStart
+ fPositionOfStart += fEdgeLength;
+ }
+ }
+ return aRetval;
+ }
+ }
+ else
+ {
+ return rCandidate;
+ }
+ }
+
+ B2DPolygon getSnippetRelative(const B2DPolygon& rCandidate, double fFrom, double fTo, double fLength)
+ {
+ // get length if not given
+ if(fTools::equalZero(fLength))
+ {
+ fLength = getLength(rCandidate);
+ }
+
+ // multiply distances with real length to get absolute position and
+ // use getSnippetAbsolute
+ return getSnippetAbsolute(rCandidate, fFrom * fLength, fTo * fLength, fLength);
+ }
+
+ CutFlagValue findCut(
+ const B2DPolygon& rCandidate,
+ sal_uInt32 nIndex1, sal_uInt32 nIndex2,
+ CutFlagValue aCutFlags,
+ double* pCut1, double* pCut2)
+ {
+ CutFlagValue aRetval(CUTFLAG_NONE);
+ const sal_uInt32 nPointCount(rCandidate.count());
+
+ if(nIndex1 < nPointCount && nIndex2 < nPointCount && nIndex1 != nIndex2)
+ {
+ sal_uInt32 nEnd1(getIndexOfSuccessor(nIndex1, rCandidate));
+ sal_uInt32 nEnd2(getIndexOfSuccessor(nIndex2, rCandidate));
+
+ const B2DPoint aStart1(rCandidate.getB2DPoint(nIndex1));
+ const B2DPoint aEnd1(rCandidate.getB2DPoint(nEnd1));
+ const B2DVector aVector1(aEnd1 - aStart1);
+
+ const B2DPoint aStart2(rCandidate.getB2DPoint(nIndex2));
+ const B2DPoint aEnd2(rCandidate.getB2DPoint(nEnd2));
+ const B2DVector aVector2(aEnd2 - aStart2);
+
+ aRetval = findCut(
+ aStart1, aVector1, aStart2, aVector2,
+ aCutFlags, pCut1, pCut2);
+ }
+
+ return aRetval;
+ }
+
+ CutFlagValue findCut(
+ const B2DPolygon& rCandidate1, sal_uInt32 nIndex1,
+ const B2DPolygon& rCandidate2, sal_uInt32 nIndex2,
+ CutFlagValue aCutFlags,
+ double* pCut1, double* pCut2)
+ {
+ CutFlagValue aRetval(CUTFLAG_NONE);
+ const sal_uInt32 nPointCount1(rCandidate1.count());
+ const sal_uInt32 nPointCount2(rCandidate2.count());
+
+ if(nIndex1 < nPointCount1 && nIndex2 < nPointCount2)
+ {
+ sal_uInt32 nEnd1(getIndexOfSuccessor(nIndex1, rCandidate1));
+ sal_uInt32 nEnd2(getIndexOfSuccessor(nIndex2, rCandidate2));
+
+ const B2DPoint aStart1(rCandidate1.getB2DPoint(nIndex1));
+ const B2DPoint aEnd1(rCandidate1.getB2DPoint(nEnd1));
+ const B2DVector aVector1(aEnd1 - aStart1);
+
+ const B2DPoint aStart2(rCandidate2.getB2DPoint(nIndex2));
+ const B2DPoint aEnd2(rCandidate2.getB2DPoint(nEnd2));
+ const B2DVector aVector2(aEnd2 - aStart2);
+
+ aRetval = findCut(
+ aStart1, aVector1, aStart2, aVector2,
+ aCutFlags, pCut1, pCut2);
+ }
+
+ return aRetval;
+ }
+
+ CutFlagValue findCut(
+ const B2DPoint& rEdge1Start, const B2DVector& rEdge1Delta,
+ const B2DPoint& rEdge2Start, const B2DVector& rEdge2Delta,
+ CutFlagValue aCutFlags,
+ double* pCut1, double* pCut2)
+ {
+ CutFlagValue aRetval(CUTFLAG_NONE);
+ double fCut1(0.0);
+ double fCut2(0.0);
+ bool bFinished(!((bool)(aCutFlags & CUTFLAG_ALL)));
+
+ // test for same points?
+ if(!bFinished
+ && (aCutFlags & (CUTFLAG_START1|CUTFLAG_END1))
+ && (aCutFlags & (CUTFLAG_START2|CUTFLAG_END2)))
+ {
+ // same startpoint?
+ if(!bFinished && (aCutFlags & (CUTFLAG_START1|CUTFLAG_START2)) == (CUTFLAG_START1|CUTFLAG_START2))
+ {
+ if(rEdge1Start.equal(rEdge2Start))
+ {
+ bFinished = true;
+ aRetval = (CUTFLAG_START1|CUTFLAG_START2);
+ }
+ }
+
+ // same endpoint?
+ if(!bFinished && (aCutFlags & (CUTFLAG_END1|CUTFLAG_END2)) == (CUTFLAG_END1|CUTFLAG_END2))
+ {
+ const B2DPoint aEnd1(rEdge1Start + rEdge1Delta);
+ const B2DPoint aEnd2(rEdge2Start + rEdge2Delta);
+
+ if(aEnd1.equal(aEnd2))
+ {
+ bFinished = true;
+ aRetval = (CUTFLAG_END1|CUTFLAG_END2);
+ fCut1 = fCut2 = 1.0;
+ }
+ }
+
+ // startpoint1 == endpoint2?
+ if(!bFinished && (aCutFlags & (CUTFLAG_START1|CUTFLAG_END2)) == (CUTFLAG_START1|CUTFLAG_END2))
+ {
+ const B2DPoint aEnd2(rEdge2Start + rEdge2Delta);
+
+ if(rEdge1Start.equal(aEnd2))
+ {
+ bFinished = true;
+ aRetval = (CUTFLAG_START1|CUTFLAG_END2);
+ fCut1 = 0.0;
+ fCut2 = 1.0;
+ }
+ }
+
+ // startpoint2 == endpoint1?
+ if(!bFinished&& (aCutFlags & (CUTFLAG_START2|CUTFLAG_END1)) == (CUTFLAG_START2|CUTFLAG_END1))
+ {
+ const B2DPoint aEnd1(rEdge1Start + rEdge1Delta);
+
+ if(rEdge2Start.equal(aEnd1))
+ {
+ bFinished = true;
+ aRetval = (CUTFLAG_START2|CUTFLAG_END1);
+ fCut1 = 1.0;
+ fCut2 = 0.0;
+ }
+ }
+ }
+
+ if(!bFinished && (aCutFlags & CUTFLAG_LINE))
+ {
+ if(!bFinished && (aCutFlags & CUTFLAG_START1))
+ {
+ // start1 on line 2 ?
+ if(isPointOnEdge(rEdge1Start, rEdge2Start, rEdge2Delta, &fCut2))
+ {
+ bFinished = true;
+ aRetval = (CUTFLAG_LINE|CUTFLAG_START1);
+ }
+ }
+
+ if(!bFinished && (aCutFlags & CUTFLAG_START2))
+ {
+ // start2 on line 1 ?
+ if(isPointOnEdge(rEdge2Start, rEdge1Start, rEdge1Delta, &fCut1))
+ {
+ bFinished = true;
+ aRetval = (CUTFLAG_LINE|CUTFLAG_START2);
+ }
+ }
+
+ if(!bFinished && (aCutFlags & CUTFLAG_END1))
+ {
+ // end1 on line 2 ?
+ const B2DPoint aEnd1(rEdge1Start + rEdge1Delta);
+
+ if(isPointOnEdge(aEnd1, rEdge2Start, rEdge2Delta, &fCut2))
+ {
+ bFinished = true;
+ aRetval = (CUTFLAG_LINE|CUTFLAG_END1);
+ }
+ }
+
+ if(!bFinished && (aCutFlags & CUTFLAG_END2))
+ {
+ // end2 on line 1 ?
+ const B2DPoint aEnd2(rEdge2Start + rEdge2Delta);
+
+ if(isPointOnEdge(aEnd2, rEdge1Start, rEdge1Delta, &fCut1))
+ {
+ bFinished = true;
+ aRetval = (CUTFLAG_LINE|CUTFLAG_END2);
+ }
+ }
+
+ if(!bFinished)
+ {
+ // cut in line1, line2 ?
+ fCut1 = (rEdge1Delta.getX() * rEdge2Delta.getY()) - (rEdge1Delta.getY() * rEdge2Delta.getX());
+
+ if(!fTools::equalZero(fCut1))
+ {
+ fCut1 = (rEdge2Delta.getY() * (rEdge2Start.getX() - rEdge1Start.getX())
+ + rEdge2Delta.getX() * (rEdge1Start.getY() - rEdge2Start.getY())) / fCut1;
+
+ const double fZero(0.0);
+ const double fOne(1.0);
+
+ // inside parameter range edge1 AND fCut2 is calcable
+ if(fTools::more(fCut1, fZero) && fTools::less(fCut1, fOne)
+ && (!fTools::equalZero(rEdge2Delta.getX()) || !fTools::equalZero(rEdge2Delta.getY())))
+ {
+ // take the mopre precise calculation of the two possible
+ if(fabs(rEdge2Delta.getX()) > fabs(rEdge2Delta.getY()))
+ {
+ fCut2 = (rEdge1Start.getX() + fCut1
+ * rEdge1Delta.getX() - rEdge2Start.getX()) / rEdge2Delta.getX();
+ }
+ else
+ {
+ fCut2 = (rEdge1Start.getY() + fCut1
+ * rEdge1Delta.getY() - rEdge2Start.getY()) / rEdge2Delta.getY();
+ }
+
+ // inside parameter range edge2, too
+ if(fTools::more(fCut2, fZero) && fTools::less(fCut2, fOne))
+ {
+ bFinished = true;
+ aRetval = CUTFLAG_LINE;
+ }
+ }
+ }
+ }
+ }
+
+ // copy values if wanted
+ if(pCut1)
+ {
+ *pCut1 = fCut1;
+ }
+
+ if(pCut2)
+ {
+ *pCut2 = fCut2;
+ }
+
+ return aRetval;
+ }
+
+ bool isPointOnEdge(
+ const B2DPoint& rPoint,
+ const B2DPoint& rEdgeStart,
+ const B2DVector& rEdgeDelta,
+ double* pCut)
+ {
+ bool bDeltaXIsZero(fTools::equalZero(rEdgeDelta.getX()));
+ bool bDeltaYIsZero(fTools::equalZero(rEdgeDelta.getY()));
+ const double fZero(0.0);
+ const double fOne(1.0);
+
+ if(bDeltaXIsZero && bDeltaYIsZero)
+ {
+ // no line, just a point
+ return false;
+ }
+ else if(bDeltaXIsZero)
+ {
+ // vertical line
+ if(fTools::equal(rPoint.getX(), rEdgeStart.getX()))
+ {
+ double fValue = (rPoint.getY() - rEdgeStart.getY()) / rEdgeDelta.getY();
+
+ if(fTools::more(fValue, fZero) && fTools::less(fValue, fOne))
+ {
+ if(pCut)
+ {
+ *pCut = fValue;
+ }
+
+ return true;
+ }
+ }
+ }
+ else if(bDeltaYIsZero)
+ {
+ // horizontal line
+ if(fTools::equal(rPoint.getY(), rEdgeStart.getY()))
+ {
+ double fValue = (rPoint.getX() - rEdgeStart.getX()) / rEdgeDelta.getX();
+
+ if(fTools::more(fValue, fZero) && fTools::less(fValue, fOne))
+ {
+ if(pCut)
+ {
+ *pCut = fValue;
+ }
+
+ return true;
+ }
+ }
+ }
+ else
+ {
+ // any angle line
+ double fTOne = (rPoint.getX() - rEdgeStart.getX()) / rEdgeDelta.getX();
+ double fTTwo = (rPoint.getY() - rEdgeStart.getY()) / rEdgeDelta.getY();
+
+ if(fTools::equal(fTOne, fTTwo))
+ {
+ // same parameter representation, point is on line. Take
+ // middle value for better results
+ double fValue = (fTOne + fTTwo) / 2.0;
+
+ if(fTools::more(fValue, fZero) && fTools::less(fValue, fOne))
+ {
+ // point is inside line bounds, too
+ if(pCut)
+ {
+ *pCut = fValue;
+ }
+
+ return true;
+ }
+ }
+ }
+
+ return false;
+ }
+
+ void applyLineDashing(const B2DPolygon& rCandidate, const ::std::vector<double>& rDotDashArray, B2DPolyPolygon* pLineTarget, B2DPolyPolygon* pGapTarget, double fDotDashLength)
+ {
+ const sal_uInt32 nPointCount(rCandidate.count());
+ const sal_uInt32 nDotDashCount(rDotDashArray.size());
+
+ if(fTools::lessOrEqual(fDotDashLength, 0.0))
+ {
+ fDotDashLength = ::std::accumulate(rDotDashArray.begin(), rDotDashArray.end(), 0.0);
+ }
+
+ if(fTools::more(fDotDashLength, 0.0) && (pLineTarget || pGapTarget) && nPointCount)
+ {
+ // clear targets
+ if(pLineTarget)
+ {
+ pLineTarget->clear();
+ }
+
+ if(pGapTarget)
+ {
+ pGapTarget->clear();
+ }
+
+ // prepare current edge's start
+ B2DCubicBezier aCurrentEdge;
+ const sal_uInt32 nEdgeCount(rCandidate.isClosed() ? nPointCount : nPointCount - 1);
+ aCurrentEdge.setStartPoint(rCandidate.getB2DPoint(0));
+
+ // prepare DotDashArray iteration and the line/gap switching bool
+ sal_uInt32 nDotDashIndex(0);
+ bool bIsLine(true);
+ double fDotDashMovingLength(rDotDashArray[0]);
+ B2DPolygon aSnippet;
+
+ // iterate over all edges
+ for(sal_uInt32 a(0); a < nEdgeCount; a++)
+ {
+ // update current edge (fill in C1, C2 and end point)
+ double fLastDotDashMovingLength(0.0);
+ const sal_uInt32 nNextIndex((a + 1) % nPointCount);
+ aCurrentEdge.setControlPointA(rCandidate.getNextControlPoint(a));
+ aCurrentEdge.setControlPointB(rCandidate.getPrevControlPoint(nNextIndex));
+ aCurrentEdge.setEndPoint(rCandidate.getB2DPoint(nNextIndex));
+
+ // check if we have a trivial bezier segment -> possible fallback to edge
+ aCurrentEdge.testAndSolveTrivialBezier();
+
+ if(aCurrentEdge.isBezier())
+ {
+ // bezier segment
+ const B2DCubicBezierHelper aCubicBezierHelper(aCurrentEdge);
+ const double fEdgeLength(aCubicBezierHelper.getLength());
+
+ if(!fTools::equalZero(fEdgeLength))
+ {
+ while(fTools::less(fDotDashMovingLength, fEdgeLength))
+ {
+ // new split is inside edge, create and append snippet [fLastDotDashMovingLength, fDotDashMovingLength]
+ const bool bHandleLine(bIsLine && pLineTarget);
+ const bool bHandleGap(!bIsLine && pGapTarget);
+
+ if(bHandleLine || bHandleGap)
+ {
+ const double fBezierSplitStart(aCubicBezierHelper.distanceToRelative(fLastDotDashMovingLength));
+ const double fBezierSplitEnd(aCubicBezierHelper.distanceToRelative(fDotDashMovingLength));
+ B2DCubicBezier aBezierSnippet(aCurrentEdge.snippet(fBezierSplitStart, fBezierSplitEnd));
+
+ if(!aSnippet.count())
+ {
+ aSnippet.append(aBezierSnippet.getStartPoint());
+ }
+
+ aSnippet.appendBezierSegment(aBezierSnippet.getControlPointA(), aBezierSnippet.getControlPointB(), aBezierSnippet.getEndPoint());
+
+ if(bHandleLine)
+ {
+ pLineTarget->append(aSnippet);
+ }
+ else
+ {
+ pGapTarget->append(aSnippet);
+ }
+
+ aSnippet.clear();
+ }
+
+ // prepare next DotDashArray step and flip line/gap flag
+ fLastDotDashMovingLength = fDotDashMovingLength;
+ fDotDashMovingLength += rDotDashArray[(++nDotDashIndex) % nDotDashCount];
+ bIsLine = !bIsLine;
+ }
+
+ // append closing snippet [fLastDotDashMovingLength, fEdgeLength]
+ const bool bHandleLine(bIsLine && pLineTarget);
+ const bool bHandleGap(!bIsLine && pGapTarget);
+
+ if(bHandleLine || bHandleGap)
+ {
+ B2DCubicBezier aRight;
+ const double fBezierSplit(aCubicBezierHelper.distanceToRelative(fLastDotDashMovingLength));
+
+ aCurrentEdge.split(fBezierSplit, 0, &aRight);
+
+ if(!aSnippet.count())
+ {
+ aSnippet.append(aRight.getStartPoint());
+ }
+
+ aSnippet.appendBezierSegment(aRight.getControlPointA(), aRight.getControlPointB(), aRight.getEndPoint());
+ }
+
+ // prepare move to next edge
+ fDotDashMovingLength -= fEdgeLength;
+ }
+ }
+ else
+ {
+ // simple edge
+ const double fEdgeLength(aCurrentEdge.getEdgeLength());
+
+ if(!fTools::equalZero(fEdgeLength))
+ {
+ while(fTools::less(fDotDashMovingLength, fEdgeLength))
+ {
+ // new split is inside edge, create and append snippet [fLastDotDashMovingLength, fDotDashMovingLength]
+ const bool bHandleLine(bIsLine && pLineTarget);
+ const bool bHandleGap(!bIsLine && pGapTarget);
+
+ if(bHandleLine || bHandleGap)
+ {
+ if(!aSnippet.count())
+ {
+ aSnippet.append(interpolate(aCurrentEdge.getStartPoint(), aCurrentEdge.getEndPoint(), fLastDotDashMovingLength / fEdgeLength));
+ }
+
+ aSnippet.append(interpolate(aCurrentEdge.getStartPoint(), aCurrentEdge.getEndPoint(), fDotDashMovingLength / fEdgeLength));
+
+ if(bHandleLine)
+ {
+ pLineTarget->append(aSnippet);
+ }
+ else
+ {
+ pGapTarget->append(aSnippet);
+ }
+
+ aSnippet.clear();
+ }
+
+ // prepare next DotDashArray step and flip line/gap flag
+ fLastDotDashMovingLength = fDotDashMovingLength;
+ fDotDashMovingLength += rDotDashArray[(++nDotDashIndex) % nDotDashCount];
+ bIsLine = !bIsLine;
+ }
+
+ // append snippet [fLastDotDashMovingLength, fEdgeLength]
+ const bool bHandleLine(bIsLine && pLineTarget);
+ const bool bHandleGap(!bIsLine && pGapTarget);
+
+ if(bHandleLine || bHandleGap)
+ {
+ if(!aSnippet.count())
+ {
+ aSnippet.append(interpolate(aCurrentEdge.getStartPoint(), aCurrentEdge.getEndPoint(), fLastDotDashMovingLength / fEdgeLength));
+ }
+
+ aSnippet.append(aCurrentEdge.getEndPoint());
+ }
+
+ // prepare move to next edge
+ fDotDashMovingLength -= fEdgeLength;
+ }
+ }
+
+ // prepare next edge step (end point gets new start point)
+ aCurrentEdge.setStartPoint(aCurrentEdge.getEndPoint());
+ }
+
+ // append last intermediate results (if exists)
+ if(aSnippet.count())
+ {
+ if(bIsLine && pLineTarget)
+ {
+ pLineTarget->append(aSnippet);
+ }
+ else if(!bIsLine && pGapTarget)
+ {
+ pGapTarget->append(aSnippet);
+ }
+ }
+
+ // check if start and end polygon may be merged
+ if(pLineTarget)
+ {
+ const sal_uInt32 nCount(pLineTarget->count());
+
+ if(nCount > 1)
+ {
+ // these polygons were created above, there exists none with less than two points,
+ // thus dircet point access below is allowed
+ const B2DPolygon aFirst(pLineTarget->getB2DPolygon(0));
+ B2DPolygon aLast(pLineTarget->getB2DPolygon(nCount - 1));
+
+ if(aFirst.getB2DPoint(0).equal(aLast.getB2DPoint(aLast.count() - 1)))
+ {
+ // start of first and end of last are the same -> merge them
+ aLast.append(aFirst);
+ aLast.removeDoublePoints();
+ pLineTarget->setB2DPolygon(0, aLast);
+ pLineTarget->remove(nCount - 1);
+ }
+ }
+ }
+
+ if(pGapTarget)
+ {
+ const sal_uInt32 nCount(pGapTarget->count());
+
+ if(nCount > 1)
+ {
+ // these polygons were created above, there exists none with less than two points,
+ // thus dircet point access below is allowed
+ const B2DPolygon aFirst(pGapTarget->getB2DPolygon(0));
+ B2DPolygon aLast(pGapTarget->getB2DPolygon(nCount - 1));
+
+ if(aFirst.getB2DPoint(0).equal(aLast.getB2DPoint(aLast.count() - 1)))
+ {
+ // start of first and end of last are the same -> merge them
+ aLast.append(aFirst);
+ aLast.removeDoublePoints();
+ pGapTarget->setB2DPolygon(0, aLast);
+ pGapTarget->remove(nCount - 1);
+ }
+ }
+ }
+ }
+ else
+ {
+ // parameters make no sense, just add source to targets
+ if(pLineTarget)
+ {
+ pLineTarget->append(rCandidate);
+ }
+
+ if(pGapTarget)
+ {
+ pGapTarget->append(rCandidate);
+ }
+ }
+ }
+
+ // test if point is inside epsilon-range around an edge defined
+ // by the two given points. Can be used for HitTesting. The epsilon-range
+ // is defined to be the rectangle centered to the given edge, using height
+ // 2 x fDistance, and the circle around both points with radius fDistance.
+ bool isInEpsilonRange(const B2DPoint& rEdgeStart, const B2DPoint& rEdgeEnd, const B2DPoint& rTestPosition, double fDistance)
+ {
+ // build edge vector
+ const B2DVector aEdge(rEdgeEnd - rEdgeStart);
+ bool bDoDistanceTestStart(false);
+ bool bDoDistanceTestEnd(false);
+
+ if(aEdge.equalZero())
+ {
+ // no edge, just a point. Do one of the distance tests.
+ bDoDistanceTestStart = true;
+ }
+ else
+ {
+ // edge has a length. Create perpendicular vector.
+ const B2DVector aPerpend(getPerpendicular(aEdge));
+ double fCut(
+ (aPerpend.getY() * (rTestPosition.getX() - rEdgeStart.getX())
+ + aPerpend.getX() * (rEdgeStart.getY() - rTestPosition.getY())) /
+ (aEdge.getX() * aEdge.getX() + aEdge.getY() * aEdge.getY()));
+ const double fZero(0.0);
+ const double fOne(1.0);
+
+ if(fTools::less(fCut, fZero))
+ {
+ // left of rEdgeStart
+ bDoDistanceTestStart = true;
+ }
+ else if(fTools::more(fCut, fOne))
+ {
+ // right of rEdgeEnd
+ bDoDistanceTestEnd = true;
+ }
+ else
+ {
+ // inside line [0.0 .. 1.0]
+ const B2DPoint aCutPoint(interpolate(rEdgeStart, rEdgeEnd, fCut));
+ const B2DVector aDelta(rTestPosition - aCutPoint);
+ const double fDistanceSquare(aDelta.scalar(aDelta));
+
+ if(fDistanceSquare <= fDistance * fDistance)
+ {
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ }
+ }
+
+ if(bDoDistanceTestStart)
+ {
+ const B2DVector aDelta(rTestPosition - rEdgeStart);
+ const double fDistanceSquare(aDelta.scalar(aDelta));
+
+ if(fDistanceSquare <= fDistance * fDistance)
+ {
+ return true;
+ }
+ }
+ else if(bDoDistanceTestEnd)
+ {
+ const B2DVector aDelta(rTestPosition - rEdgeEnd);
+ const double fDistanceSquare(aDelta.scalar(aDelta));
+
+ if(fDistanceSquare <= fDistance * fDistance)
+ {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ // test if point is inside epsilon-range around the given Polygon. Can be used
+ // for HitTesting. The epsilon-range is defined to be the tube around the polygon
+ // with distance fDistance and rounded edges (start and end point).
+ bool isInEpsilonRange(const B2DPolygon& rCandidate, const B2DPoint& rTestPosition, double fDistance)
+ {
+ // force to non-bezier polygon
+ const B2DPolygon aCandidate(rCandidate.getDefaultAdaptiveSubdivision());
+ const sal_uInt32 nPointCount(aCandidate.count());
+
+ if(nPointCount)
+ {
+ const sal_uInt32 nEdgeCount(aCandidate.isClosed() ? nPointCount : nPointCount - 1L);
+ B2DPoint aCurrent(aCandidate.getB2DPoint(0));
+
+ if(nEdgeCount)
+ {
+ // edges
+ for(sal_uInt32 a(0); a < nEdgeCount; a++)
+ {
+ const sal_uInt32 nNextIndex((a + 1) % nPointCount);
+ const B2DPoint aNext(aCandidate.getB2DPoint(nNextIndex));
+
+ if(isInEpsilonRange(aCurrent, aNext, rTestPosition, fDistance))
+ {
+ return true;
+ }
+
+ // prepare next step
+ aCurrent = aNext;
+ }
+ }
+ else
+ {
+ // no edges, but points -> not closed. Check single point. Just
+ // use isInEpsilonRange with twice the same point, it handles those well
+ if(isInEpsilonRange(aCurrent, aCurrent, rTestPosition, fDistance))
+ {
+ return true;
+ }
+ }
+ }
+
+ return false;
+ }
+
+ B2DPolygon createPolygonFromRect( const B2DRectangle& rRect, double fRadius )
+ {
+ const double fZero(0.0);
+ const double fOne(1.0);
+
+ if(fTools::lessOrEqual(fRadius, fZero))
+ {
+ // no radius, use rectangle
+ return createPolygonFromRect( rRect );
+ }
+ else if(fTools::moreOrEqual(fRadius, fOne))
+ {
+ // full radius, use ellipse
+ const B2DPoint aCenter(rRect.getCenter());
+ const double fRadiusX(rRect.getWidth() / 2.0);
+ const double fRadiusY(rRect.getHeight() / 2.0);
+
+ return createPolygonFromEllipse( aCenter, fRadiusX, fRadiusY );
+ }
+ else
+ {
+ // create rectangle with two radii between ]0.0 .. 1.0[
+ return createPolygonFromRect( rRect, fRadius, fRadius );
+ }
+ }
+
+ B2DPolygon createPolygonFromRect( const B2DRectangle& rRect, double fRadiusX, double fRadiusY )
+ {
+ const double fZero(0.0);
+ const double fOne(1.0);
+
+ // crop to useful values
+ if(fTools::less(fRadiusX, fZero))
+ {
+ fRadiusX = fZero;
+ }
+ else if(fTools::more(fRadiusX, fOne))
+ {
+ fRadiusX = fOne;
+ }
+
+ if(fTools::less(fRadiusY, fZero))
+ {
+ fRadiusY = fZero;
+ }
+ else if(fTools::more(fRadiusY, fOne))
+ {
+ fRadiusY = fOne;
+ }
+
+ if(fZero == fRadiusX || fZero == fRadiusY)
+ {
+ B2DPolygon aRetval;
+
+ // at least in one direction no radius, use rectangle.
+ // Do not use createPolygonFromRect() here since original
+ // creator (historical reasons) still creates a start point at the
+ // bottom center, so do the same here to get the same line patterns.
+ // Due to this the order of points is different, too.
+ const B2DPoint aBottomCenter(rRect.getCenter().getX(), rRect.getMaxY());
+ aRetval.append(aBottomCenter);
+
+ aRetval.append( B2DPoint( rRect.getMinX(), rRect.getMaxY() ) );
+ aRetval.append( B2DPoint( rRect.getMinX(), rRect.getMinY() ) );
+ aRetval.append( B2DPoint( rRect.getMaxX(), rRect.getMinY() ) );
+ aRetval.append( B2DPoint( rRect.getMaxX(), rRect.getMaxY() ) );
+
+ // close
+ aRetval.setClosed( true );
+
+ return aRetval;
+ }
+ else if(fOne == fRadiusX && fOne == fRadiusY)
+ {
+ // in both directions full radius, use ellipse
+ const B2DPoint aCenter(rRect.getCenter());
+ const double fRectRadiusX(rRect.getWidth() / 2.0);
+ const double fRectRadiusY(rRect.getHeight() / 2.0);
+
+ return createPolygonFromEllipse( aCenter, fRectRadiusX, fRectRadiusY );
+ }
+ else
+ {
+ B2DPolygon aRetval;
+ const double fBowX((rRect.getWidth() / 2.0) * fRadiusX);
+ const double fBowY((rRect.getHeight() / 2.0) * fRadiusY);
+ const double fKappa((M_SQRT2 - 1.0) * 4.0 / 3.0);
+
+ // create start point at bottom center
+ if(fOne != fRadiusX)
+ {
+ const B2DPoint aBottomCenter(rRect.getCenter().getX(), rRect.getMaxY());
+ aRetval.append(aBottomCenter);
+ }
+
+ // create first bow
+ {
+ const B2DPoint aBottomRight(rRect.getMaxX(), rRect.getMaxY());
+ const B2DPoint aStart(aBottomRight + B2DPoint(-fBowX, 0.0));
+ const B2DPoint aStop(aBottomRight + B2DPoint(0.0, -fBowY));
+ aRetval.append(aStart);
+ aRetval.appendBezierSegment(interpolate(aStart, aBottomRight, fKappa), interpolate(aStop, aBottomRight, fKappa), aStop);
+ }
+
+ // create second bow
+ {
+ const B2DPoint aTopRight(rRect.getMaxX(), rRect.getMinY());
+ const B2DPoint aStart(aTopRight + B2DPoint(0.0, fBowY));
+ const B2DPoint aStop(aTopRight + B2DPoint(-fBowX, 0.0));
+ aRetval.append(aStart);
+ aRetval.appendBezierSegment(interpolate(aStart, aTopRight, fKappa), interpolate(aStop, aTopRight, fKappa), aStop);
+ }
+
+ // create third bow
+ {
+ const B2DPoint aTopLeft(rRect.getMinX(), rRect.getMinY());
+ const B2DPoint aStart(aTopLeft + B2DPoint(fBowX, 0.0));
+ const B2DPoint aStop(aTopLeft + B2DPoint(0.0, fBowY));
+ aRetval.append(aStart);
+ aRetval.appendBezierSegment(interpolate(aStart, aTopLeft, fKappa), interpolate(aStop, aTopLeft, fKappa), aStop);
+ }
+
+ // create forth bow
+ {
+ const B2DPoint aBottomLeft(rRect.getMinX(), rRect.getMaxY());
+ const B2DPoint aStart(aBottomLeft + B2DPoint(0.0, -fBowY));
+ const B2DPoint aStop(aBottomLeft + B2DPoint(fBowX, 0.0));
+ aRetval.append(aStart);
+ aRetval.appendBezierSegment(interpolate(aStart, aBottomLeft, fKappa), interpolate(aStop, aBottomLeft, fKappa), aStop);
+ }
+
+ // close
+ aRetval.setClosed( true );
+
+ // remove double created points if there are extreme radii envolved
+ if(fOne == fRadiusX || fOne == fRadiusY)
+ {
+ aRetval.removeDoublePoints();
+ }
+
+ return aRetval;
+ }
+ }
+
+ B2DPolygon createPolygonFromRect( const B2DRectangle& rRect )
+ {
+ B2DPolygon aRetval;
+
+ aRetval.append( B2DPoint( rRect.getMinX(), rRect.getMinY() ) );
+ aRetval.append( B2DPoint( rRect.getMaxX(), rRect.getMinY() ) );
+ aRetval.append( B2DPoint( rRect.getMaxX(), rRect.getMaxY() ) );
+ aRetval.append( B2DPoint( rRect.getMinX(), rRect.getMaxY() ) );
+
+ // close
+ aRetval.setClosed( true );
+
+ return aRetval;
+ }
+
+ B2DPolygon createUnitPolygon()
+ {
+ static B2DPolygon aRetval;
+
+ if(!aRetval.count())
+ {
+ aRetval.append( B2DPoint( 0.0, 0.0 ) );
+ aRetval.append( B2DPoint( 1.0, 0.0 ) );
+ aRetval.append( B2DPoint( 1.0, 1.0 ) );
+ aRetval.append( B2DPoint( 0.0, 1.0 ) );
+
+ // close
+ aRetval.setClosed( true );
+ }
+
+ return aRetval;
+ }
+
+ B2DPolygon createPolygonFromCircle( const B2DPoint& rCenter, double fRadius )
+ {
+ return createPolygonFromEllipse( rCenter, fRadius, fRadius );
+ }
+
+ B2DPolygon impCreateUnitCircle(sal_uInt32 nStartQuadrant)
+ {
+ B2DPolygon aUnitCircle;
+ const double fKappa((M_SQRT2 - 1.0) * 4.0 / 3.0);
+ const double fScaledKappa(fKappa * (1.0 / STEPSPERQUARTER));
+ const B2DHomMatrix aRotateMatrix(createRotateB2DHomMatrix(F_PI2 / STEPSPERQUARTER));
+
+ B2DPoint aPoint(1.0, 0.0);
+ B2DPoint aForward(1.0, fScaledKappa);
+ B2DPoint aBackward(1.0, -fScaledKappa);
+
+ if(0 != nStartQuadrant)
+ {
+ const B2DHomMatrix aQuadrantMatrix(createRotateB2DHomMatrix(F_PI2 * (nStartQuadrant % 4)));
+ aPoint *= aQuadrantMatrix;
+ aBackward *= aQuadrantMatrix;
+ aForward *= aQuadrantMatrix;
+ }
+
+ aUnitCircle.append(aPoint);
+
+ for(sal_uInt32 a(0); a < STEPSPERQUARTER * 4; a++)
+ {
+ aPoint *= aRotateMatrix;
+ aBackward *= aRotateMatrix;
+ aUnitCircle.appendBezierSegment(aForward, aBackward, aPoint);
+ aForward *= aRotateMatrix;
+ }
+
+ aUnitCircle.setClosed(true);
+ aUnitCircle.removeDoublePoints();
+
+ return aUnitCircle;
+ }
+
+ B2DPolygon createPolygonFromUnitCircle(sal_uInt32 nStartQuadrant)
+ {
+ switch(nStartQuadrant % 4)
+ {
+ case 1 :
+ {
+ static B2DPolygon aUnitCircleStartQuadrantOne;
+
+ if(!aUnitCircleStartQuadrantOne.count())
+ {
+ ::osl::Mutex m_mutex;
+ aUnitCircleStartQuadrantOne = impCreateUnitCircle(1);
+ }
+
+ return aUnitCircleStartQuadrantOne;
+ }
+ case 2 :
+ {
+ static B2DPolygon aUnitCircleStartQuadrantTwo;
+
+ if(!aUnitCircleStartQuadrantTwo.count())
+ {
+ ::osl::Mutex m_mutex;
+ aUnitCircleStartQuadrantTwo = impCreateUnitCircle(2);
+ }
+
+ return aUnitCircleStartQuadrantTwo;
+ }
+ case 3 :
+ {
+ static B2DPolygon aUnitCircleStartQuadrantThree;
+
+ if(!aUnitCircleStartQuadrantThree.count())
+ {
+ ::osl::Mutex m_mutex;
+ aUnitCircleStartQuadrantThree = impCreateUnitCircle(3);
+ }
+
+ return aUnitCircleStartQuadrantThree;
+ }
+ default : // case 0 :
+ {
+ static B2DPolygon aUnitCircleStartQuadrantZero;
+
+ if(!aUnitCircleStartQuadrantZero.count())
+ {
+ ::osl::Mutex m_mutex;
+ aUnitCircleStartQuadrantZero = impCreateUnitCircle(0);
+ }
+
+ return aUnitCircleStartQuadrantZero;
+ }
+ }
+ }
+
+ B2DPolygon createPolygonFromEllipse( const B2DPoint& rCenter, double fRadiusX, double fRadiusY )
+ {
+ B2DPolygon aRetval(createPolygonFromUnitCircle());
+ const B2DHomMatrix aMatrix(createScaleTranslateB2DHomMatrix(fRadiusX, fRadiusY, rCenter.getX(), rCenter.getY()));
+
+ aRetval.transform(aMatrix);
+
+ return aRetval;
+ }
+
+ B2DPolygon createPolygonFromUnitEllipseSegment( double fStart, double fEnd )
+ {
+ B2DPolygon aRetval;
+
+ // truncate fStart, fEnd to a range of [0.0 .. F_2PI[ where F_2PI
+ // falls back to 0.0 to ensure a unique definition
+ if(fTools::less(fStart, 0.0))
+ {
+ fStart = 0.0;
+ }
+
+ if(fTools::moreOrEqual(fStart, F_2PI))
+ {
+ fStart = 0.0;
+ }
+
+ if(fTools::less(fEnd, 0.0))
+ {
+ fEnd = 0.0;
+ }
+
+ if(fTools::moreOrEqual(fEnd, F_2PI))
+ {
+ fEnd = 0.0;
+ }
+
+ if(fTools::equal(fStart, fEnd))
+ {
+ // same start and end angle, add single point
+ aRetval.append(B2DPoint(cos(fStart), sin(fStart)));
+ }
+ else
+ {
+ const sal_uInt32 nSegments(STEPSPERQUARTER * 4);
+ const double fAnglePerSegment(F_PI2 / STEPSPERQUARTER);
+ const sal_uInt32 nStartSegment(sal_uInt32(fStart / fAnglePerSegment) % nSegments);
+ const sal_uInt32 nEndSegment(sal_uInt32(fEnd / fAnglePerSegment) % nSegments);
+ const double fKappa((M_SQRT2 - 1.0) * 4.0 / 3.0);
+ const double fScaledKappa(fKappa * (1.0 / STEPSPERQUARTER));
+
+ B2DPoint aSegStart(cos(fStart), sin(fStart));
+ aRetval.append(aSegStart);
+
+ if(nStartSegment == nEndSegment && fTools::more(fEnd, fStart))
+ {
+ // start and end in one sector and in the right order, create in one segment
+ const B2DPoint aSegEnd(cos(fEnd), sin(fEnd));
+ const double fFactor(fScaledKappa * ((fEnd - fStart) / fAnglePerSegment));
+
+ aRetval.appendBezierSegment(
+ aSegStart + (B2DPoint(-aSegStart.getY(), aSegStart.getX()) * fFactor),
+ aSegEnd - (B2DPoint(-aSegEnd.getY(), aSegEnd.getX()) * fFactor),
+ aSegEnd);
+ }
+ else
+ {
+ double fSegEndRad((nStartSegment + 1) * fAnglePerSegment);
+ double fFactor(fScaledKappa * ((fSegEndRad - fStart) / fAnglePerSegment));
+ B2DPoint aSegEnd(cos(fSegEndRad), sin(fSegEndRad));
+
+ aRetval.appendBezierSegment(
+ aSegStart + (B2DPoint(-aSegStart.getY(), aSegStart.getX()) * fFactor),
+ aSegEnd - (B2DPoint(-aSegEnd.getY(), aSegEnd.getX()) * fFactor),
+ aSegEnd);
+
+ sal_uInt32 nSegment((nStartSegment + 1) % nSegments);
+ aSegStart = aSegEnd;
+
+ while(nSegment != nEndSegment)
+ {
+ // No end in this sector, add full sector.
+ fSegEndRad = (nSegment + 1) * fAnglePerSegment;
+ aSegEnd = B2DPoint(cos(fSegEndRad), sin(fSegEndRad));
+
+ aRetval.appendBezierSegment(
+ aSegStart + (B2DPoint(-aSegStart.getY(), aSegStart.getX()) * fScaledKappa),
+ aSegEnd - (B2DPoint(-aSegEnd.getY(), aSegEnd.getX()) * fScaledKappa),
+ aSegEnd);
+
+ nSegment = (nSegment + 1) % nSegments;
+ aSegStart = aSegEnd;
+ }
+
+ // End in this sector
+ const double fSegStartRad(nSegment * fAnglePerSegment);
+ fFactor = fScaledKappa * ((fEnd - fSegStartRad) / fAnglePerSegment);
+ aSegEnd = B2DPoint(cos(fEnd), sin(fEnd));
+
+ aRetval.appendBezierSegment(
+ aSegStart + (B2DPoint(-aSegStart.getY(), aSegStart.getX()) * fFactor),
+ aSegEnd - (B2DPoint(-aSegEnd.getY(), aSegEnd.getX()) * fFactor),
+ aSegEnd);
+ }
+ }
+
+ // remove double points between segments created by segmented creation
+ aRetval.removeDoublePoints();
+
+ return aRetval;
+ }
+
+ B2DPolygon createPolygonFromEllipseSegment( const B2DPoint& rCenter, double fRadiusX, double fRadiusY, double fStart, double fEnd )
+ {
+ B2DPolygon aRetval(createPolygonFromUnitEllipseSegment(fStart, fEnd));
+ const B2DHomMatrix aMatrix(createScaleTranslateB2DHomMatrix(fRadiusX, fRadiusY, rCenter.getX(), rCenter.getY()));
+
+ aRetval.transform(aMatrix);
+
+ return aRetval;
+ }
+
+ bool hasNeutralPoints(const B2DPolygon& rCandidate)
+ {
+ OSL_ENSURE(!rCandidate.areControlPointsUsed(), "hasNeutralPoints: ATM works not for curves (!)");
+ const sal_uInt32 nPointCount(rCandidate.count());
+
+ if(nPointCount > 2L)
+ {
+ B2DPoint aPrevPoint(rCandidate.getB2DPoint(nPointCount - 1L));
+ B2DPoint aCurrPoint(rCandidate.getB2DPoint(0L));
+
+ for(sal_uInt32 a(0L); a < nPointCount; a++)
+ {
+ const B2DPoint aNextPoint(rCandidate.getB2DPoint((a + 1) % nPointCount));
+ const B2DVector aPrevVec(aPrevPoint - aCurrPoint);
+ const B2DVector aNextVec(aNextPoint - aCurrPoint);
+ const B2VectorOrientation aOrientation(getOrientation(aNextVec, aPrevVec));
+
+ if(ORIENTATION_NEUTRAL == aOrientation)
+ {
+ // current has neutral orientation
+ return true;
+ }
+ else
+ {
+ // prepare next
+ aPrevPoint = aCurrPoint;
+ aCurrPoint = aNextPoint;
+ }
+ }
+ }
+
+ return false;
+ }
+
+ B2DPolygon removeNeutralPoints(const B2DPolygon& rCandidate)
+ {
+ if(hasNeutralPoints(rCandidate))
+ {
+ const sal_uInt32 nPointCount(rCandidate.count());
+ B2DPolygon aRetval;
+ B2DPoint aPrevPoint(rCandidate.getB2DPoint(nPointCount - 1L));
+ B2DPoint aCurrPoint(rCandidate.getB2DPoint(0L));
+
+ for(sal_uInt32 a(0L); a < nPointCount; a++)
+ {
+ const B2DPoint aNextPoint(rCandidate.getB2DPoint((a + 1) % nPointCount));
+ const B2DVector aPrevVec(aPrevPoint - aCurrPoint);
+ const B2DVector aNextVec(aNextPoint - aCurrPoint);
+ const B2VectorOrientation aOrientation(getOrientation(aNextVec, aPrevVec));
+
+ if(ORIENTATION_NEUTRAL == aOrientation)
+ {
+ // current has neutral orientation, leave it out and prepare next
+ aCurrPoint = aNextPoint;
+ }
+ else
+ {
+ // add current point
+ aRetval.append(aCurrPoint);
+
+ // prepare next
+ aPrevPoint = aCurrPoint;
+ aCurrPoint = aNextPoint;
+ }
+ }
+
+ while(aRetval.count() && ORIENTATION_NEUTRAL == getOrientationForIndex(aRetval, 0L))
+ {
+ aRetval.remove(0L);
+ }
+
+ // copy closed state
+ aRetval.setClosed(rCandidate.isClosed());
+
+ return aRetval;
+ }
+ else
+ {
+ return rCandidate;
+ }
+ }
+
+ bool isConvex(const B2DPolygon& rCandidate)
+ {
+ OSL_ENSURE(!rCandidate.areControlPointsUsed(), "isConvex: ATM works not for curves (!)");
+ const sal_uInt32 nPointCount(rCandidate.count());
+
+ if(nPointCount > 2L)
+ {
+ const B2DPoint aPrevPoint(rCandidate.getB2DPoint(nPointCount - 1L));
+ B2DPoint aCurrPoint(rCandidate.getB2DPoint(0L));
+ B2DVector aCurrVec(aPrevPoint - aCurrPoint);
+ B2VectorOrientation aOrientation(ORIENTATION_NEUTRAL);
+
+ for(sal_uInt32 a(0L); a < nPointCount; a++)
+ {
+ const B2DPoint aNextPoint(rCandidate.getB2DPoint((a + 1) % nPointCount));
+ const B2DVector aNextVec(aNextPoint - aCurrPoint);
+ const B2VectorOrientation aCurrentOrientation(getOrientation(aNextVec, aCurrVec));
+
+ if(ORIENTATION_NEUTRAL == aOrientation)
+ {
+ // set start value, maybe neutral again
+ aOrientation = aCurrentOrientation;
+ }
+ else
+ {
+ if(ORIENTATION_NEUTRAL != aCurrentOrientation && aCurrentOrientation != aOrientation)
+ {
+ // different orientations found, that's it
+ return false;
+ }
+ }
+
+ // prepare next
+ aCurrPoint = aNextPoint;
+ aCurrVec = -aNextVec;
+ }
+ }
+
+ return true;
+ }
+
+ B2VectorOrientation getOrientationForIndex(const B2DPolygon& rCandidate, sal_uInt32 nIndex)
+ {
+ OSL_ENSURE(nIndex < rCandidate.count(), "getOrientationForIndex: index out of range (!)");
+ const B2DPoint aPrev(rCandidate.getB2DPoint(getIndexOfPredecessor(nIndex, rCandidate)));
+ const B2DPoint aCurr(rCandidate.getB2DPoint(nIndex));
+ const B2DPoint aNext(rCandidate.getB2DPoint(getIndexOfSuccessor(nIndex, rCandidate)));
+ const B2DVector aBack(aPrev - aCurr);
+ const B2DVector aForw(aNext - aCurr);
+
+ return getOrientation(aForw, aBack);
+ }
+
+ bool isPointOnLine(const B2DPoint& rStart, const B2DPoint& rEnd, const B2DPoint& rCandidate, bool bWithPoints)
+ {
+ if(rCandidate.equal(rStart) || rCandidate.equal(rEnd))
+ {
+ // candidate is in epsilon around start or end -> inside
+ return bWithPoints;
+ }
+ else if(rStart.equal(rEnd))
+ {
+ // start and end are equal, but candidate is outside their epsilon -> outside
+ return false;
+ }
+ else
+ {
+ const B2DVector aEdgeVector(rEnd - rStart);
+ const B2DVector aTestVector(rCandidate - rStart);
+
+ if(areParallel(aEdgeVector, aTestVector))
+ {
+ const double fZero(0.0);
+ const double fOne(1.0);
+ const double fParamTestOnCurr(fabs(aEdgeVector.getX()) > fabs(aEdgeVector.getY())
+ ? aTestVector.getX() / aEdgeVector.getX()
+ : aTestVector.getY() / aEdgeVector.getY());
+
+ if(fTools::more(fParamTestOnCurr, fZero) && fTools::less(fParamTestOnCurr, fOne))
+ {
+ return true;
+ }
+ }
+
+ return false;
+ }
+ }
+
+ bool isPointOnPolygon(const B2DPolygon& rCandidate, const B2DPoint& rPoint, bool bWithPoints)
+ {
+ const B2DPolygon aCandidate(rCandidate.areControlPointsUsed() ? rCandidate.getDefaultAdaptiveSubdivision() : rCandidate);
+ const sal_uInt32 nPointCount(aCandidate.count());
+
+ if(nPointCount > 1L)
+ {
+ const sal_uInt32 nLoopCount(aCandidate.isClosed() ? nPointCount : nPointCount - 1L);
+ B2DPoint aCurrentPoint(aCandidate.getB2DPoint(0L));
+
+ for(sal_uInt32 a(0L); a < nLoopCount; a++)
+ {
+ const B2DPoint aNextPoint(aCandidate.getB2DPoint((a + 1L) % nPointCount));
+
+ if(isPointOnLine(aCurrentPoint, aNextPoint, rPoint, bWithPoints))
+ {
+ return true;
+ }
+
+ aCurrentPoint = aNextPoint;
+ }
+ }
+ else if(nPointCount && bWithPoints)
+ {
+ return rPoint.equal(aCandidate.getB2DPoint(0L));
+ }
+
+ return false;
+ }
+
+ bool isPointInTriangle(const B2DPoint& rA, const B2DPoint& rB, const B2DPoint& rC, const B2DPoint& rCandidate, bool bWithBorder)
+ {
+ if(arePointsOnSameSideOfLine(rA, rB, rC, rCandidate, bWithBorder))
+ {
+ if(arePointsOnSameSideOfLine(rB, rC, rA, rCandidate, bWithBorder))
+ {
+ if(arePointsOnSameSideOfLine(rC, rA, rB, rCandidate, bWithBorder))
+ {
+ return true;
+ }
+ }
+ }
+
+ return false;
+ }
+
+ bool arePointsOnSameSideOfLine(const B2DPoint& rStart, const B2DPoint& rEnd, const B2DPoint& rCandidateA, const B2DPoint& rCandidateB, bool bWithLine)
+ {
+ const B2DVector aLineVector(rEnd - rStart);
+ const B2DVector aVectorToA(rEnd - rCandidateA);
+ const double fCrossA(aLineVector.cross(aVectorToA));
+
+ if(fTools::equalZero(fCrossA))
+ {
+ // one point on the line
+ return bWithLine;
+ }
+
+ const B2DVector aVectorToB(rEnd - rCandidateB);
+ const double fCrossB(aLineVector.cross(aVectorToB));
+
+ if(fTools::equalZero(fCrossB))
+ {
+ // one point on the line
+ return bWithLine;
+ }
+
+ // return true if they both have the same sign
+ return ((fCrossA > 0.0) == (fCrossB > 0.0));
+ }
+
+ void addTriangleFan(const B2DPolygon& rCandidate, B2DPolygon& rTarget)
+ {
+ const sal_uInt32 nCount(rCandidate.count());
+
+ if(nCount > 2L)
+ {
+ const B2DPoint aStart(rCandidate.getB2DPoint(0L));
+ B2DPoint aLast(rCandidate.getB2DPoint(1L));
+
+ for(sal_uInt32 a(2L); a < nCount; a++)
+ {
+ const B2DPoint aCurrent(rCandidate.getB2DPoint(a));
+ rTarget.append(aStart);
+ rTarget.append(aLast);
+ rTarget.append(aCurrent);
+
+ // prepare next
+ aLast = aCurrent;
+ }
+ }
+ }
+
+ namespace
+ {
+ /// return 0 for input of 0, -1 for negative and 1 for positive input
+ inline int lcl_sgn( const double n )
+ {
+ return n == 0.0 ? 0 : 1 - 2*::rtl::math::isSignBitSet(n);
+ }
+ }
+
+ bool isRectangle( const B2DPolygon& rPoly )
+ {
+ // polygon must be closed to resemble a rect, and contain
+ // at least four points.
+ if( !rPoly.isClosed() ||
+ rPoly.count() < 4 ||
+ rPoly.areControlPointsUsed() )
+ {
+ return false;
+ }
+
+ // number of 90 degree turns the polygon has taken
+ int nNumTurns(0);
+
+ int nVerticalEdgeType=0;
+ int nHorizontalEdgeType=0;
+ bool bNullVertex(true);
+ bool bCWPolygon(false); // when true, polygon is CW
+ // oriented, when false, CCW
+ bool bOrientationSet(false); // when false, polygon
+ // orientation has not yet
+ // been determined.
+
+ // scan all _edges_ (which involves coming back to point 0
+ // for the last edge - thus the modulo operation below)
+ const sal_Int32 nCount( rPoly.count() );
+ for( sal_Int32 i=0; i<nCount; ++i )
+ {
+ const B2DPoint& rPoint0( rPoly.getB2DPoint(i % nCount) );
+ const B2DPoint& rPoint1( rPoly.getB2DPoint((i+1) % nCount) );
+
+ // is 0 for zero direction vector, 1 for south edge and -1
+ // for north edge (standard screen coordinate system)
+ int nCurrVerticalEdgeType( lcl_sgn( rPoint1.getY() - rPoint0.getY() ) );
+
+ // is 0 for zero direction vector, 1 for east edge and -1
+ // for west edge (standard screen coordinate system)
+ int nCurrHorizontalEdgeType( lcl_sgn(rPoint1.getX() - rPoint0.getX()) );
+
+ if( nCurrVerticalEdgeType && nCurrHorizontalEdgeType )
+ return false; // oblique edge - for sure no rect
+
+ const bool bCurrNullVertex( !nCurrVerticalEdgeType && !nCurrHorizontalEdgeType );
+
+ // current vertex is equal to previous - just skip,
+ // until we have a real edge
+ if( bCurrNullVertex )
+ continue;
+
+ // if previous edge has two identical points, because
+ // no previous edge direction was available, simply
+ // take this first non-null edge as the start
+ // direction. That's what will happen here, if
+ // bNullVertex is false
+ if( !bNullVertex )
+ {
+ // 2D cross product - is 1 for CW and -1 for CCW turns
+ const int nCrossProduct( nHorizontalEdgeType*nCurrVerticalEdgeType -
+ nVerticalEdgeType*nCurrHorizontalEdgeType );
+
+ if( !nCrossProduct )
+ continue; // no change in orientation -
+ // collinear edges - just go on
+
+ // if polygon orientation is not set, we'll
+ // determine it now
+ if( !bOrientationSet )
+ {
+ bCWPolygon = nCrossProduct == 1;
+ bOrientationSet = true;
+ }
+ else
+ {
+ // if current turn orientation is not equal
+ // initial orientation, this is not a
+ // rectangle (as rectangles have consistent
+ // orientation).
+ if( (nCrossProduct == 1) != bCWPolygon )
+ return false;
+ }
+
+ ++nNumTurns;
+
+ // More than four 90 degree turns are an
+ // indication that this must not be a rectangle.
+ if( nNumTurns > 4 )
+ return false;
+ }
+
+ // store current state for the next turn
+ nVerticalEdgeType = nCurrVerticalEdgeType;
+ nHorizontalEdgeType = nCurrHorizontalEdgeType;
+ bNullVertex = false; // won't reach this line,
+ // if bCurrNullVertex is
+ // true - see above
+ }
+
+ return true;
+ }
+
+ B3DPolygon createB3DPolygonFromB2DPolygon(const B2DPolygon& rCandidate, double fZCoordinate)
+ {
+ if(rCandidate.areControlPointsUsed())
+ {
+ // call myself recursively with subdivided input
+ const B2DPolygon aCandidate(adaptiveSubdivideByAngle(rCandidate));
+ return createB3DPolygonFromB2DPolygon(aCandidate, fZCoordinate);
+ }
+ else
+ {
+ B3DPolygon aRetval;
+
+ for(sal_uInt32 a(0L); a < rCandidate.count(); a++)
+ {
+ B2DPoint aPoint(rCandidate.getB2DPoint(a));
+ aRetval.append(B3DPoint(aPoint.getX(), aPoint.getY(), fZCoordinate));
+ }
+
+ // copy closed state
+ aRetval.setClosed(rCandidate.isClosed());
+
+ return aRetval;
+ }
+ }
+
+ B2DPolygon createB2DPolygonFromB3DPolygon(const B3DPolygon& rCandidate, const B3DHomMatrix& rMat)
+ {
+ B2DPolygon aRetval;
+ const sal_uInt32 nCount(rCandidate.count());
+ const bool bIsIdentity(rMat.isIdentity());
+
+ for(sal_uInt32 a(0L); a < nCount; a++)
+ {
+ B3DPoint aCandidate(rCandidate.getB3DPoint(a));
+
+ if(!bIsIdentity)
+ {
+ aCandidate *= rMat;
+ }
+
+ aRetval.append(B2DPoint(aCandidate.getX(), aCandidate.getY()));
+ }
+
+ // copy closed state
+ aRetval.setClosed(rCandidate.isClosed());
+
+ return aRetval;
+ }
+
+ double getDistancePointToEndlessRay(const B2DPoint& rPointA, const B2DPoint& rPointB, const B2DPoint& rTestPoint, double& rCut)
+ {
+ if(rPointA.equal(rPointB))
+ {
+ rCut = 0.0;
+ const B2DVector aVector(rTestPoint - rPointA);
+ return aVector.getLength();
+ }
+ else
+ {
+ // get the relative cut value on line vector (Vector1) for cut with perpendicular through TestPoint
+ const B2DVector aVector1(rPointB - rPointA);
+ const B2DVector aVector2(rTestPoint - rPointA);
+ const double fDividend((aVector2.getX() * aVector1.getX()) + (aVector2.getY() * aVector1.getY()));
+ const double fDivisor((aVector1.getX() * aVector1.getX()) + (aVector1.getY() * aVector1.getY()));
+
+ rCut = fDividend / fDivisor;
+
+ const B2DPoint aCutPoint(rPointA + rCut * aVector1);
+ const B2DVector aVector(rTestPoint - aCutPoint);
+ return aVector.getLength();
+ }
+ }
+
+ double getSmallestDistancePointToEdge(const B2DPoint& rPointA, const B2DPoint& rPointB, const B2DPoint& rTestPoint, double& rCut)
+ {
+ if(rPointA.equal(rPointB))
+ {
+ rCut = 0.0;
+ const B2DVector aVector(rTestPoint - rPointA);
+ return aVector.getLength();
+ }
+ else
+ {
+ // get the relative cut value on line vector (Vector1) for cut with perpendicular through TestPoint
+ const B2DVector aVector1(rPointB - rPointA);
+ const B2DVector aVector2(rTestPoint - rPointA);
+ const double fDividend((aVector2.getX() * aVector1.getX()) + (aVector2.getY() * aVector1.getY()));
+ const double fDivisor((aVector1.getX() * aVector1.getX()) + (aVector1.getY() * aVector1.getY()));
+ const double fCut(fDividend / fDivisor);
+
+ if(fCut < 0.0)
+ {
+ // not in line range, get distance to PointA
+ rCut = 0.0;
+ return aVector2.getLength();
+ }
+ else if(fCut > 1.0)
+ {
+ // not in line range, get distance to PointB
+ rCut = 1.0;
+ const B2DVector aVector(rTestPoint - rPointB);
+ return aVector.getLength();
+ }
+ else
+ {
+ // in line range
+ const B2DPoint aCutPoint(rPointA + fCut * aVector1);
+ const B2DVector aVector(rTestPoint - aCutPoint);
+ rCut = fCut;
+ return aVector.getLength();
+ }
+ }
+ }
+
+ double getSmallestDistancePointToPolygon(const B2DPolygon& rCandidate, const B2DPoint& rTestPoint, sal_uInt32& rEdgeIndex, double& rCut)
+ {
+ double fRetval(DBL_MAX);
+ const sal_uInt32 nPointCount(rCandidate.count());
+
+ if(nPointCount > 1L)
+ {
+ const double fZero(0.0);
+ const sal_uInt32 nEdgeCount(rCandidate.isClosed() ? nPointCount : nPointCount - 1L);
+ B2DCubicBezier aBezier;
+ aBezier.setStartPoint(rCandidate.getB2DPoint(0));
+
+ for(sal_uInt32 a(0L); a < nEdgeCount; a++)
+ {
+ const sal_uInt32 nNextIndex((a + 1) % nPointCount);
+ aBezier.setEndPoint(rCandidate.getB2DPoint(nNextIndex));
+ double fEdgeDist;
+ double fNewCut;
+ bool bEdgeIsCurve(false);
+
+ if(rCandidate.areControlPointsUsed())
+ {
+ aBezier.setControlPointA(rCandidate.getNextControlPoint(a));
+ aBezier.setControlPointB(rCandidate.getPrevControlPoint(nNextIndex));
+ aBezier.testAndSolveTrivialBezier();
+ bEdgeIsCurve = aBezier.isBezier();
+ }
+
+ if(bEdgeIsCurve)
+ {
+ fEdgeDist = aBezier.getSmallestDistancePointToBezierSegment(rTestPoint, fNewCut);
+ }
+ else
+ {
+ fEdgeDist = getSmallestDistancePointToEdge(aBezier.getStartPoint(), aBezier.getEndPoint(), rTestPoint, fNewCut);
+ }
+
+ if(DBL_MAX == fRetval || fEdgeDist < fRetval)
+ {
+ fRetval = fEdgeDist;
+ rEdgeIndex = a;
+ rCut = fNewCut;
+
+ if(fTools::equal(fRetval, fZero))
+ {
+ // already found zero distance, cannot get better. Ensure numerical zero value and end loop.
+ fRetval = 0.0;
+ break;
+ }
+ }
+
+ // prepare next step
+ aBezier.setStartPoint(aBezier.getEndPoint());
+ }
+
+ if(1.0 == rCut)
+ {
+ // correct rEdgeIndex when not last point
+ if(rCandidate.isClosed())
+ {
+ rEdgeIndex = getIndexOfSuccessor(rEdgeIndex, rCandidate);
+ rCut = 0.0;
+ }
+ else
+ {
+ if(rEdgeIndex != nEdgeCount - 1L)
+ {
+ rEdgeIndex++;
+ rCut = 0.0;
+ }
+ }
+ }
+ }
+
+ return fRetval;
+ }
+
+ B2DPoint distort(const B2DPoint& rCandidate, const B2DRange& rOriginal, const B2DPoint& rTopLeft, const B2DPoint& rTopRight, const B2DPoint& rBottomLeft, const B2DPoint& rBottomRight)
+ {
+ if(fTools::equalZero(rOriginal.getWidth()) || fTools::equalZero(rOriginal.getHeight()))
+ {
+ return rCandidate;
+ }
+ else
+ {
+ const double fRelativeX((rCandidate.getX() - rOriginal.getMinX()) / rOriginal.getWidth());
+ const double fRelativeY((rCandidate.getY() - rOriginal.getMinY()) / rOriginal.getHeight());
+ const double fOneMinusRelativeX(1.0 - fRelativeX);
+ const double fOneMinusRelativeY(1.0 - fRelativeY);
+ const double fNewX((fOneMinusRelativeY) * ((fOneMinusRelativeX) * rTopLeft.getX() + fRelativeX * rTopRight.getX()) +
+ fRelativeY * ((fOneMinusRelativeX) * rBottomLeft.getX() + fRelativeX * rBottomRight.getX()));
+ const double fNewY((fOneMinusRelativeX) * ((fOneMinusRelativeY) * rTopLeft.getY() + fRelativeY * rBottomLeft.getY()) +
+ fRelativeX * ((fOneMinusRelativeY) * rTopRight.getY() + fRelativeY * rBottomRight.getY()));
+
+ return B2DPoint(fNewX, fNewY);
+ }
+ }
+
+ B2DPolygon distort(const B2DPolygon& rCandidate, const B2DRange& rOriginal, const B2DPoint& rTopLeft, const B2DPoint& rTopRight, const B2DPoint& rBottomLeft, const B2DPoint& rBottomRight)
+ {
+ const sal_uInt32 nPointCount(rCandidate.count());
+
+ if(nPointCount && 0.0 != rOriginal.getWidth() && 0.0 != rOriginal.getHeight())
+ {
+ B2DPolygon aRetval;
+
+ for(sal_uInt32 a(0L); a < nPointCount; a++)
+ {
+ aRetval.append(distort(rCandidate.getB2DPoint(a), rOriginal, rTopLeft, rTopRight, rBottomLeft, rBottomRight));
+
+ if(rCandidate.areControlPointsUsed())
+ {
+ if(!rCandidate.getPrevControlPoint(a).equalZero())
+ {
+ aRetval.setPrevControlPoint(a, distort(rCandidate.getPrevControlPoint(a), rOriginal, rTopLeft, rTopRight, rBottomLeft, rBottomRight));
+ }
+
+ if(!rCandidate.getNextControlPoint(a).equalZero())
+ {
+ aRetval.setNextControlPoint(a, distort(rCandidate.getNextControlPoint(a), rOriginal, rTopLeft, rTopRight, rBottomLeft, rBottomRight));
+ }
+ }
+ }
+
+ aRetval.setClosed(rCandidate.isClosed());
+ return aRetval;
+ }
+ else
+ {
+ return rCandidate;
+ }
+ }
+
+ B2DPolygon rotateAroundPoint(const B2DPolygon& rCandidate, const B2DPoint& rCenter, double fAngle)
+ {
+ const sal_uInt32 nPointCount(rCandidate.count());
+ B2DPolygon aRetval(rCandidate);
+
+ if(nPointCount)
+ {
+ const B2DHomMatrix aMatrix(basegfx::tools::createRotateAroundPoint(rCenter, fAngle));
+
+ aRetval.transform(aMatrix);
+ }
+
+ return aRetval;
+ }
+
+ B2DPolygon expandToCurve(const B2DPolygon& rCandidate)
+ {
+ B2DPolygon aRetval(rCandidate);
+
+ for(sal_uInt32 a(0L); a < rCandidate.count(); a++)
+ {
+ expandToCurveInPoint(aRetval, a);
+ }
+
+ return aRetval;
+ }
+
+ bool expandToCurveInPoint(B2DPolygon& rCandidate, sal_uInt32 nIndex)
+ {
+ OSL_ENSURE(nIndex < rCandidate.count(), "expandToCurveInPoint: Access to polygon out of range (!)");
+ bool bRetval(false);
+ const sal_uInt32 nPointCount(rCandidate.count());
+
+ if(nPointCount)
+ {
+ // predecessor
+ if(!rCandidate.isPrevControlPointUsed(nIndex))
+ {
+ if(!rCandidate.isClosed() && 0 == nIndex)
+ {
+ // do not create previous vector for start point of open polygon
+ }
+ else
+ {
+ const sal_uInt32 nPrevIndex((nIndex + (nPointCount - 1)) % nPointCount);
+ rCandidate.setPrevControlPoint(nIndex, interpolate(rCandidate.getB2DPoint(nIndex), rCandidate.getB2DPoint(nPrevIndex), 1.0 / 3.0));
+ bRetval = true;
+ }
+ }
+
+ // successor
+ if(!rCandidate.isNextControlPointUsed(nIndex))
+ {
+ if(!rCandidate.isClosed() && nIndex + 1 == nPointCount)
+ {
+ // do not create next vector for end point of open polygon
+ }
+ else
+ {
+ const sal_uInt32 nNextIndex((nIndex + 1) % nPointCount);
+ rCandidate.setNextControlPoint(nIndex, interpolate(rCandidate.getB2DPoint(nIndex), rCandidate.getB2DPoint(nNextIndex), 1.0 / 3.0));
+ bRetval = true;
+ }
+ }
+ }
+
+ return bRetval;
+ }
+
+ B2DPolygon setContinuity(const B2DPolygon& rCandidate, B2VectorContinuity eContinuity)
+ {
+ B2DPolygon aRetval(rCandidate);
+
+ for(sal_uInt32 a(0L); a < rCandidate.count(); a++)
+ {
+ setContinuityInPoint(aRetval, a, eContinuity);
+ }
+
+ return aRetval;
+ }
+
+ bool setContinuityInPoint(B2DPolygon& rCandidate, sal_uInt32 nIndex, B2VectorContinuity eContinuity)
+ {
+ OSL_ENSURE(nIndex < rCandidate.count(), "setContinuityInPoint: Access to polygon out of range (!)");
+ bool bRetval(false);
+ const sal_uInt32 nPointCount(rCandidate.count());
+
+ if(nPointCount)
+ {
+ const B2DPoint aCurrentPoint(rCandidate.getB2DPoint(nIndex));
+
+ switch(eContinuity)
+ {
+ case CONTINUITY_NONE :
+ {
+ if(rCandidate.isPrevControlPointUsed(nIndex))
+ {
+ if(!rCandidate.isClosed() && 0 == nIndex)
+ {
+ // remove existing previous vector for start point of open polygon
+ rCandidate.resetPrevControlPoint(nIndex);
+ }
+ else
+ {
+ const sal_uInt32 nPrevIndex((nIndex + (nPointCount - 1)) % nPointCount);
+ rCandidate.setPrevControlPoint(nIndex, interpolate(aCurrentPoint, rCandidate.getB2DPoint(nPrevIndex), 1.0 / 3.0));
+ }
+
+ bRetval = true;
+ }
+
+ if(rCandidate.isNextControlPointUsed(nIndex))
+ {
+ if(!rCandidate.isClosed() && nIndex == nPointCount + 1)
+ {
+ // remove next vector for end point of open polygon
+ rCandidate.resetNextControlPoint(nIndex);
+ }
+ else
+ {
+ const sal_uInt32 nNextIndex((nIndex + 1) % nPointCount);
+ rCandidate.setNextControlPoint(nIndex, interpolate(aCurrentPoint, rCandidate.getB2DPoint(nNextIndex), 1.0 / 3.0));
+ }
+
+ bRetval = true;
+ }
+
+ break;
+ }
+ case CONTINUITY_C1 :
+ {
+ if(rCandidate.isPrevControlPointUsed(nIndex) && rCandidate.isNextControlPointUsed(nIndex))
+ {
+ // lengths both exist since both are used
+ B2DVector aVectorPrev(rCandidate.getPrevControlPoint(nIndex) - aCurrentPoint);
+ B2DVector aVectorNext(rCandidate.getNextControlPoint(nIndex) - aCurrentPoint);
+ const double fLenPrev(aVectorPrev.getLength());
+ const double fLenNext(aVectorNext.getLength());
+ aVectorPrev.normalize();
+ aVectorNext.normalize();
+ const B2VectorOrientation aOrientation(getOrientation(aVectorPrev, aVectorNext));
+
+ if(ORIENTATION_NEUTRAL == aOrientation && aVectorPrev.scalar(aVectorNext) < 0.0)
+ {
+ // parallel and opposite direction; check length
+ if(fTools::equal(fLenPrev, fLenNext))
+ {
+ // this would be even C2, but we want C1. Use the lengths of the corresponding edges.
+ const sal_uInt32 nPrevIndex((nIndex + (nPointCount - 1)) % nPointCount);
+ const sal_uInt32 nNextIndex((nIndex + 1) % nPointCount);
+ const double fLenPrevEdge(B2DVector(rCandidate.getB2DPoint(nPrevIndex) - aCurrentPoint).getLength() * (1.0 / 3.0));
+ const double fLenNextEdge(B2DVector(rCandidate.getB2DPoint(nNextIndex) - aCurrentPoint).getLength() * (1.0 / 3.0));
+
+ rCandidate.setControlPoints(nIndex,
+ aCurrentPoint + (aVectorPrev * fLenPrevEdge),
+ aCurrentPoint + (aVectorNext * fLenNextEdge));
+ bRetval = true;
+ }
+ }
+ else
+ {
+ // not parallel or same direction, set vectors and length
+ const B2DVector aNormalizedPerpendicular(getNormalizedPerpendicular(aVectorPrev + aVectorNext));
+
+ if(ORIENTATION_POSITIVE == aOrientation)
+ {
+ rCandidate.setControlPoints(nIndex,
+ aCurrentPoint - (aNormalizedPerpendicular * fLenPrev),
+ aCurrentPoint + (aNormalizedPerpendicular * fLenNext));
+ }
+ else
+ {
+ rCandidate.setControlPoints(nIndex,
+ aCurrentPoint + (aNormalizedPerpendicular * fLenPrev),
+ aCurrentPoint - (aNormalizedPerpendicular * fLenNext));
+ }
+
+ bRetval = true;
+ }
+ }
+ break;
+ }
+ case CONTINUITY_C2 :
+ {
+ if(rCandidate.isPrevControlPointUsed(nIndex) && rCandidate.isNextControlPointUsed(nIndex))
+ {
+ // lengths both exist since both are used
+ B2DVector aVectorPrev(rCandidate.getPrevControlPoint(nIndex) - aCurrentPoint);
+ B2DVector aVectorNext(rCandidate.getNextControlPoint(nIndex) - aCurrentPoint);
+ const double fCommonLength((aVectorPrev.getLength() + aVectorNext.getLength()) / 2.0);
+ aVectorPrev.normalize();
+ aVectorNext.normalize();
+ const B2VectorOrientation aOrientation(getOrientation(aVectorPrev, aVectorNext));
+
+ if(ORIENTATION_NEUTRAL == aOrientation && aVectorPrev.scalar(aVectorNext) < 0.0)
+ {
+ // parallel and opposite direction; set length. Use one direction for better numerical correctness
+ const B2DVector aScaledDirection(aVectorPrev * fCommonLength);
+
+ rCandidate.setControlPoints(nIndex,
+ aCurrentPoint + aScaledDirection,
+ aCurrentPoint - aScaledDirection);
+ }
+ else
+ {
+ // not parallel or same direction, set vectors and length
+ const B2DVector aNormalizedPerpendicular(getNormalizedPerpendicular(aVectorPrev + aVectorNext));
+ const B2DVector aPerpendicular(aNormalizedPerpendicular * fCommonLength);
+
+ if(ORIENTATION_POSITIVE == aOrientation)
+ {
+ rCandidate.setControlPoints(nIndex,
+ aCurrentPoint - aPerpendicular,
+ aCurrentPoint + aPerpendicular);
+ }
+ else
+ {
+ rCandidate.setControlPoints(nIndex,
+ aCurrentPoint + aPerpendicular,
+ aCurrentPoint - aPerpendicular);
+ }
+ }
+
+ bRetval = true;
+ }
+ break;
+ }
+ }
+ }
+
+ return bRetval;
+ }
+
+ B2DPolygon growInNormalDirection(const B2DPolygon& rCandidate, double fValue)
+ {
+ if(0.0 != fValue)
+ {
+ if(rCandidate.areControlPointsUsed())
+ {
+ // call myself recursively with subdivided input
+ const B2DPolygon aCandidate(adaptiveSubdivideByAngle(rCandidate));
+ return growInNormalDirection(aCandidate, fValue);
+ }
+ else
+ {
+ B2DPolygon aRetval;
+ const sal_uInt32 nPointCount(rCandidate.count());
+
+ if(nPointCount)
+ {
+ B2DPoint aPrev(rCandidate.getB2DPoint(nPointCount - 1L));
+ B2DPoint aCurrent(rCandidate.getB2DPoint(0L));
+
+ for(sal_uInt32 a(0L); a < nPointCount; a++)
+ {
+ const B2DPoint aNext(rCandidate.getB2DPoint(a + 1L == nPointCount ? 0L : a + 1L));
+ const B2DVector aBack(aPrev - aCurrent);
+ const B2DVector aForw(aNext - aCurrent);
+ const B2DVector aPerpBack(getNormalizedPerpendicular(aBack));
+ const B2DVector aPerpForw(getNormalizedPerpendicular(aForw));
+ B2DVector aDirection(aPerpBack - aPerpForw);
+ aDirection.normalize();
+ aDirection *= fValue;
+ aRetval.append(aCurrent + aDirection);
+
+ // prepare next step
+ aPrev = aCurrent;
+ aCurrent = aNext;
+ }
+ }
+
+ // copy closed state
+ aRetval.setClosed(rCandidate.isClosed());
+
+ return aRetval;
+ }
+ }
+ else
+ {
+ return rCandidate;
+ }
+ }
+
+ B2DPolygon reSegmentPolygon(const B2DPolygon& rCandidate, sal_uInt32 nSegments)
+ {
+ B2DPolygon aRetval;
+ const sal_uInt32 nPointCount(rCandidate.count());
+
+ if(nPointCount && nSegments)
+ {
+ // get current segment count
+ const sal_uInt32 nSegmentCount(rCandidate.isClosed() ? nPointCount : nPointCount - 1L);
+
+ if(nSegmentCount == nSegments)
+ {
+ aRetval = rCandidate;
+ }
+ else
+ {
+ const double fLength(getLength(rCandidate));
+ const sal_uInt32 nLoopCount(rCandidate.isClosed() ? nSegments : nSegments + 1L);
+
+ for(sal_uInt32 a(0L); a < nLoopCount; a++)
+ {
+ const double fRelativePos((double)a / (double)nSegments); // 0.0 .. 1.0
+ const B2DPoint aNewPoint(getPositionRelative(rCandidate, fRelativePos, fLength));
+ aRetval.append(aNewPoint);
+ }
+
+ // copy closed flag
+ aRetval.setClosed(rCandidate.isClosed());
+ }
+ }
+
+ return aRetval;
+ }
+
+ B2DPolygon reSegmentPolygonEdges(const B2DPolygon& rCandidate, sal_uInt32 nSubEdges, bool bHandleCurvedEdges, bool bHandleStraightEdges)
+ {
+ const sal_uInt32 nPointCount(rCandidate.count());
+
+ if(nPointCount < 2 || nSubEdges < 2 || (!bHandleCurvedEdges && !bHandleStraightEdges))
+ {
+ // nothing to do:
+ // - less than two points -> no edge at all
+ // - less than two nSubEdges -> no resegment necessary
+ // - neither bHandleCurvedEdges nor bHandleStraightEdges -> nothing to do
+ return rCandidate;
+ }
+ else
+ {
+ B2DPolygon aRetval;
+ const sal_uInt32 nEdgeCount(rCandidate.isClosed() ? nPointCount : nPointCount - 1);
+ B2DCubicBezier aCurrentEdge;
+
+ // prepare first edge and add start point to target
+ aCurrentEdge.setStartPoint(rCandidate.getB2DPoint(0));
+ aRetval.append(aCurrentEdge.getStartPoint());
+
+ for(sal_uInt32 a(0); a < nEdgeCount; a++)
+ {
+ // fill edge
+ const sal_uInt32 nNextIndex((a + 1) % nPointCount);
+ aCurrentEdge.setControlPointA(rCandidate.getNextControlPoint(a));
+ aCurrentEdge.setControlPointB(rCandidate.getPrevControlPoint(nNextIndex));
+ aCurrentEdge.setEndPoint(rCandidate.getB2DPoint(nNextIndex));
+
+ if(aCurrentEdge.isBezier())
+ {
+ if(bHandleCurvedEdges)
+ {
+ for(sal_uInt32 b(nSubEdges); b > 1; b--)
+ {
+ const double fSplitPoint(1.0 / b);
+ B2DCubicBezier aLeftPart;
+
+ aCurrentEdge.split(fSplitPoint, &aLeftPart, &aCurrentEdge);
+ aRetval.appendBezierSegment(aLeftPart.getControlPointA(), aLeftPart.getControlPointB(), aLeftPart.getEndPoint());
+ }
+ }
+
+ // copy remaining segment to target
+ aRetval.appendBezierSegment(aCurrentEdge.getControlPointA(), aCurrentEdge.getControlPointB(), aCurrentEdge.getEndPoint());
+ }
+ else
+ {
+ if(bHandleStraightEdges)
+ {
+ for(sal_uInt32 b(nSubEdges); b > 1; b--)
+ {
+ const double fSplitPoint(1.0 / b);
+ const B2DPoint aSplitPoint(interpolate(aCurrentEdge.getStartPoint(), aCurrentEdge.getEndPoint(), fSplitPoint));
+
+ aRetval.append(aSplitPoint);
+ aCurrentEdge.setStartPoint(aSplitPoint);
+ }
+ }
+
+ // copy remaining segment to target
+ aRetval.append(aCurrentEdge.getEndPoint());
+ }
+
+ // prepare next step
+ aCurrentEdge.setStartPoint(aCurrentEdge.getEndPoint());
+ }
+
+ // copy closed flag and return
+ aRetval.setClosed(rCandidate.isClosed());
+ return aRetval;
+ }
+ }
+
+ B2DPolygon interpolate(const B2DPolygon& rOld1, const B2DPolygon& rOld2, double t)
+ {
+ OSL_ENSURE(rOld1.count() == rOld2.count(), "B2DPolygon interpolate: Different geometry (!)");
+
+ if(fTools::lessOrEqual(t, 0.0) || rOld1 == rOld2)
+ {
+ return rOld1;
+ }
+ else if(fTools::moreOrEqual(t, 1.0))
+ {
+ return rOld2;
+ }
+ else
+ {
+ B2DPolygon aRetval;
+ const bool bInterpolateVectors(rOld1.areControlPointsUsed() || rOld2.areControlPointsUsed());
+ aRetval.setClosed(rOld1.isClosed() && rOld2.isClosed());
+
+ for(sal_uInt32 a(0L); a < rOld1.count(); a++)
+ {
+ aRetval.append(interpolate(rOld1.getB2DPoint(a), rOld2.getB2DPoint(a), t));
+
+ if(bInterpolateVectors)
+ {
+ aRetval.setPrevControlPoint(a, interpolate(rOld1.getPrevControlPoint(a), rOld2.getPrevControlPoint(a), t));
+ aRetval.setNextControlPoint(a, interpolate(rOld1.getNextControlPoint(a), rOld2.getNextControlPoint(a), t));
+ }
+ }
+
+ return aRetval;
+ }
+ }
+
+ bool isPolyPolygonEqualRectangle( const B2DPolyPolygon& rPolyPoly,
+ const B2DRange& rRect )
+ {
+ // exclude some cheap cases first
+ if( rPolyPoly.count() != 1 )
+ return false;
+
+ // fill array with rectangle vertices
+ const B2DPoint aPoints[] =
+ {
+ B2DPoint(rRect.getMinX(),rRect.getMinY()),
+ B2DPoint(rRect.getMaxX(),rRect.getMinY()),
+ B2DPoint(rRect.getMaxX(),rRect.getMaxY()),
+ B2DPoint(rRect.getMinX(),rRect.getMaxY())
+ };
+
+ const B2DPolygon& rPoly( rPolyPoly.getB2DPolygon(0) );
+ const sal_uInt32 nCount( rPoly.count() );
+ const double epsilon = ::std::numeric_limits<double>::epsilon();
+
+ for(unsigned int j=0; j<4; ++j)
+ {
+ const B2DPoint &p1 = aPoints[j];
+ const B2DPoint &p2 = aPoints[(j+1)%4];
+ bool bPointOnBoundary = false;
+ for( sal_uInt32 i=0; i<nCount; ++i )
+ {
+ const B2DPoint p(rPoly.getB2DPoint(i));
+
+ // 1 | x0 y0 1 |
+ // A = - | x1 y1 1 |
+ // 2 | x2 y2 1 |
+ double fDoubleArea = p2.getX()*p.getY() -
+ p2.getY()*p.getX() -
+ p1.getX()*p.getY() +
+ p1.getY()*p.getX() +
+ p1.getX()*p2.getY() -
+ p1.getY()*p2.getX();
+
+ if(fDoubleArea < epsilon)
+ {
+ bPointOnBoundary=true;
+ break;
+ }
+ }
+ if(!(bPointOnBoundary))
+ return false;
+ }
+
+ return true;
+ }
+
+
+ // create simplified version of the original polygon by
+ // replacing segments with spikes/loops and self intersections
+ // by several trivial sub-segments
+ B2DPolygon createSimplifiedPolygon( const B2DPolygon& rCandidate )
+ {
+ const sal_uInt32 nCount(rCandidate.count());
+
+ if(nCount && rCandidate.areControlPointsUsed())
+ {
+ const sal_uInt32 nEdgeCount(rCandidate.isClosed() ? nCount : nCount - 1);
+ B2DPolygon aRetval;
+ B2DCubicBezier aSegment;
+
+ aSegment.setStartPoint(rCandidate.getB2DPoint(0));
+ aRetval.append(aSegment.getStartPoint());
+
+ for(sal_uInt32 a(0); a < nEdgeCount; a++)
+ {
+ // fill edge
+ const sal_uInt32 nNextIndex((a + 1) % nCount);
+ aSegment.setControlPointA(rCandidate.getNextControlPoint(a));
+ aSegment.setControlPointB(rCandidate.getPrevControlPoint(nNextIndex));
+ aSegment.setEndPoint(rCandidate.getB2DPoint(nNextIndex));
+
+ if(aSegment.isBezier())
+ {
+ double fExtremumPos(0.0);
+ sal_uInt32 nExtremumCounter(4);
+
+ while(nExtremumCounter-- && aSegment.isBezier() && aSegment.getMinimumExtremumPosition(fExtremumPos))
+ {
+ // split off left, now extremum-free part and append
+ B2DCubicBezier aLeft;
+
+ aSegment.split(fExtremumPos, &aLeft, &aSegment);
+ aLeft.testAndSolveTrivialBezier();
+ aSegment.testAndSolveTrivialBezier();
+
+ if(aLeft.isBezier())
+ {
+ aRetval.appendBezierSegment(aLeft.getControlPointA(), aLeft.getControlPointB(), aLeft.getEndPoint());
+ }
+ else
+ {
+ aRetval.append(aLeft.getEndPoint());
+ }
+ }
+
+ // append (evtl. reduced) rest of Segment
+ if(aSegment.isBezier())
+ {
+ aRetval.appendBezierSegment(aSegment.getControlPointA(), aSegment.getControlPointB(), aSegment.getEndPoint());
+ }
+ else
+ {
+ aRetval.append(aSegment.getEndPoint());
+ }
+ }
+ else
+ {
+ // simple edge, append end point
+ aRetval.append(aSegment.getEndPoint());
+ }
+
+ // prepare next edge
+ aSegment.setStartPoint(aSegment.getEndPoint());
+ }
+
+ // copy closed flag and check for double points
+ aRetval.setClosed(rCandidate.isClosed());
+ aRetval.removeDoublePoints();
+
+ return aRetval;
+ }
+ else
+ {
+ return rCandidate;
+ }
+ }
+
+ // #i76891#
+ B2DPolygon simplifyCurveSegments(const B2DPolygon& rCandidate)
+ {
+ const sal_uInt32 nPointCount(rCandidate.count());
+
+ if(nPointCount && rCandidate.areControlPointsUsed())
+ {
+ // prepare loop
+ const sal_uInt32 nEdgeCount(rCandidate.isClosed() ? nPointCount : nPointCount - 1);
+ B2DPolygon aRetval;
+ B2DCubicBezier aBezier;
+ aBezier.setStartPoint(rCandidate.getB2DPoint(0));
+
+ // try to avoid costly reallocations
+ aRetval.reserve( nEdgeCount+1);
+
+ // add start point
+ aRetval.append(aBezier.getStartPoint());
+
+ for(sal_uInt32 a(0L); a < nEdgeCount; a++)
+ {
+ // get values for edge
+ const sal_uInt32 nNextIndex((a + 1) % nPointCount);
+ aBezier.setEndPoint(rCandidate.getB2DPoint(nNextIndex));
+ aBezier.setControlPointA(rCandidate.getNextControlPoint(a));
+ aBezier.setControlPointB(rCandidate.getPrevControlPoint(nNextIndex));
+ aBezier.testAndSolveTrivialBezier();
+
+ // still bezier?
+ if(aBezier.isBezier())
+ {
+ // add edge with control vectors
+ aRetval.appendBezierSegment(aBezier.getControlPointA(), aBezier.getControlPointB(), aBezier.getEndPoint());
+ }
+ else
+ {
+ // add edge
+ aRetval.append(aBezier.getEndPoint());
+ }
+
+ // next point
+ aBezier.setStartPoint(aBezier.getEndPoint());
+ }
+
+ if(rCandidate.isClosed())
+ {
+ // set closed flag, rescue control point and correct last double point
+ closeWithGeometryChange(aRetval);
+ }
+
+ return aRetval;
+ }
+ else
+ {
+ return rCandidate;
+ }
+ }
+
+ // makes the given indexed point the new polygon start point. To do that, the points in the
+ // polygon will be rotated. This is only valid for closed polygons, for non-closed ones
+ // an assertion will be triggered
+ B2DPolygon makeStartPoint(const B2DPolygon& rCandidate, sal_uInt32 nIndexOfNewStatPoint)
+ {
+ const sal_uInt32 nPointCount(rCandidate.count());
+
+ if(nPointCount > 2 && nIndexOfNewStatPoint != 0 && nIndexOfNewStatPoint < nPointCount)
+ {
+ OSL_ENSURE(rCandidate.isClosed(), "makeStartPoint: only valid for closed polygons (!)");
+ B2DPolygon aRetval;
+
+ for(sal_uInt32 a(0); a < nPointCount; a++)
+ {
+ const sal_uInt32 nSourceIndex((a + nIndexOfNewStatPoint) % nPointCount);
+ aRetval.append(rCandidate.getB2DPoint(nSourceIndex));
+
+ if(rCandidate.areControlPointsUsed())
+ {
+ aRetval.setPrevControlPoint(a, rCandidate.getPrevControlPoint(nSourceIndex));
+ aRetval.setNextControlPoint(a, rCandidate.getNextControlPoint(nSourceIndex));
+ }
+ }
+
+ return aRetval;
+ }
+
+ return rCandidate;
+ }
+
+ B2DPolygon createEdgesOfGivenLength(const B2DPolygon& rCandidate, double fLength, double fStart, double fEnd)
+ {
+ B2DPolygon aRetval;
+
+ if(fLength < 0.0)
+ {
+ fLength = 0.0;
+ }
+
+ if(!fTools::equalZero(fLength))
+ {
+ if(fStart < 0.0)
+ {
+ fStart = 0.0;
+ }
+
+ if(fEnd < 0.0)
+ {
+ fEnd = 0.0;
+ }
+
+ if(fEnd < fStart)
+ {
+ fEnd = fStart;
+ }
+
+ // iterate and consume pieces with fLength. First subdivide to reduce input to line segments
+ const B2DPolygon aCandidate(rCandidate.areControlPointsUsed() ? rCandidate.getDefaultAdaptiveSubdivision() : rCandidate);
+ const sal_uInt32 nPointCount(aCandidate.count());
+
+ if(nPointCount > 1)
+ {
+ const bool bEndActive(!fTools::equalZero(fEnd));
+ const sal_uInt32 nEdgeCount(aCandidate.isClosed() ? nPointCount : nPointCount - 1);
+ B2DPoint aCurrent(aCandidate.getB2DPoint(0));
+ double fPositionInEdge(fStart);
+ double fAbsolutePosition(fStart);
+
+ for(sal_uInt32 a(0); a < nEdgeCount; a++)
+ {
+ const sal_uInt32 nNextIndex((a + 1) % nPointCount);
+ const B2DPoint aNext(aCandidate.getB2DPoint(nNextIndex));
+ const B2DVector aEdge(aNext - aCurrent);
+ double fEdgeLength(aEdge.getLength());
+
+ if(!fTools::equalZero(fEdgeLength))
+ {
+ while(fTools::less(fPositionInEdge, fEdgeLength))
+ {
+ // move position on edge forward as long as on edge
+ const double fScalar(fPositionInEdge / fEdgeLength);
+ aRetval.append(aCurrent + (aEdge * fScalar));
+ fPositionInEdge += fLength;
+
+ if(bEndActive)
+ {
+ fAbsolutePosition += fLength;
+
+ if(fTools::more(fAbsolutePosition, fEnd))
+ {
+ break;
+ }
+ }
+ }
+
+ // substract length of current edge
+ fPositionInEdge -= fEdgeLength;
+ }
+
+ if(bEndActive && fTools::more(fAbsolutePosition, fEnd))
+ {
+ break;
+ }
+
+ // prepare next step
+ aCurrent = aNext;
+ }
+
+ // keep closed state
+ aRetval.setClosed(aCandidate.isClosed());
+ }
+ else
+ {
+ // source polygon has only one point, return unchanged
+ aRetval = aCandidate;
+ }
+ }
+
+ return aRetval;
+ }
+
+ B2DPolygon createWaveline(const B2DPolygon& rCandidate, double fWaveWidth, double fWaveHeight)
+ {
+ B2DPolygon aRetval;
+
+ if(fWaveWidth < 0.0)
+ {
+ fWaveWidth = 0.0;
+ }
+
+ if(fWaveHeight < 0.0)
+ {
+ fWaveHeight = 0.0;
+ }
+
+ const bool bHasWidth(!fTools::equalZero(fWaveWidth));
+ const bool bHasHeight(!fTools::equalZero(fWaveHeight));
+
+ if(bHasWidth)
+ {
+ if(bHasHeight)
+ {
+ // width and height, create waveline. First subdivide to reduce input to line segments
+ // of WaveWidth. Last segment may be missing. If this turns out to be a problem, it
+ // may be added here again using the original last point from rCandidate. It may
+ // also be the case that rCandidate was closed. To simplify things it is handled here
+ // as if it was opened.
+ // Result from createEdgesOfGivenLength contains no curved segments, handle as straight
+ // edges.
+ const B2DPolygon aEqualLenghEdges(createEdgesOfGivenLength(rCandidate, fWaveWidth));
+ const sal_uInt32 nPointCount(aEqualLenghEdges.count());
+
+ if(nPointCount > 1)
+ {
+ // iterate over straight edges, add start point
+ B2DPoint aCurrent(aEqualLenghEdges.getB2DPoint(0));
+ aRetval.append(aCurrent);
+
+ for(sal_uInt32 a(0); a < nPointCount - 1; a++)
+ {
+ const sal_uInt32 nNextIndex((a + 1) % nPointCount);
+ const B2DPoint aNext(aEqualLenghEdges.getB2DPoint(nNextIndex));
+ const B2DVector aEdge(aNext - aCurrent);
+ const B2DVector aPerpendicular(getNormalizedPerpendicular(aEdge));
+ const B2DVector aControlOffset((aEdge * 0.467308) - (aPerpendicular * fWaveHeight));
+
+ // add curve segment
+ aRetval.appendBezierSegment(
+ aCurrent + aControlOffset,
+ aNext - aControlOffset,
+ aNext);
+
+ // prepare next step
+ aCurrent = aNext;
+ }
+ }
+ }
+ else
+ {
+ // width but no height -> return original polygon
+ aRetval = rCandidate;
+ }
+ }
+ else
+ {
+ // no width -> no waveline, stay empty and return
+ }
+
+ return aRetval;
+ }
+
+ //////////////////////////////////////////////////////////////////////
+ // comparators with tolerance for 2D Polygons
+
+ bool equal(const B2DPolygon& rCandidateA, const B2DPolygon& rCandidateB, const double& rfSmallValue)
+ {
+ const sal_uInt32 nPointCount(rCandidateA.count());
+
+ if(nPointCount != rCandidateB.count())
+ return false;
+
+ const bool bClosed(rCandidateA.isClosed());
+
+ if(bClosed != rCandidateB.isClosed())
+ return false;
+
+ const bool bAreControlPointsUsed(rCandidateA.areControlPointsUsed());
+
+ if(bAreControlPointsUsed != rCandidateB.areControlPointsUsed())
+ return false;
+
+ for(sal_uInt32 a(0); a < nPointCount; a++)
+ {
+ const B2DPoint aPoint(rCandidateA.getB2DPoint(a));
+
+ if(!aPoint.equal(rCandidateB.getB2DPoint(a), rfSmallValue))
+ return false;
+
+ if(bAreControlPointsUsed)
+ {
+ const basegfx::B2DPoint aPrev(rCandidateA.getPrevControlPoint(a));
+
+ if(!aPrev.equal(rCandidateB.getPrevControlPoint(a), rfSmallValue))
+ return false;
+
+ const basegfx::B2DPoint aNext(rCandidateA.getNextControlPoint(a));
+
+ if(!aNext.equal(rCandidateB.getNextControlPoint(a), rfSmallValue))
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ bool equal(const B2DPolygon& rCandidateA, const B2DPolygon& rCandidateB)
+ {
+ const double fSmallValue(fTools::getSmallValue());
+
+ return equal(rCandidateA, rCandidateB, fSmallValue);
+ }
+
+ // snap points of horizontal or vertical edges to discrete values
+ B2DPolygon snapPointsOfHorizontalOrVerticalEdges(const B2DPolygon& rCandidate)
+ {
+ const sal_uInt32 nPointCount(rCandidate.count());
+
+ if(nPointCount > 1)
+ {
+ // Start by copying the source polygon to get a writeable copy. The closed state is
+ // copied by aRetval's initialisation, too, so no need to copy it in this method
+ B2DPolygon aRetval(rCandidate);
+
+ // prepare geometry data. Get rounded from original
+ B2ITuple aPrevTuple(basegfx::fround(rCandidate.getB2DPoint(nPointCount - 1)));
+ B2DPoint aCurrPoint(rCandidate.getB2DPoint(0));
+ B2ITuple aCurrTuple(basegfx::fround(aCurrPoint));
+
+ // loop over all points. This will also snap the implicit closing edge
+ // even when not closed, but that's no problem here
+ for(sal_uInt32 a(0); a < nPointCount; a++)
+ {
+ // get next point. Get rounded from original
+ const bool bLastRun(a + 1 == nPointCount);
+ const sal_uInt32 nNextIndex(bLastRun ? 0 : a + 1);
+ const B2DPoint aNextPoint(rCandidate.getB2DPoint(nNextIndex));
+ const B2ITuple aNextTuple(basegfx::fround(aNextPoint));
+
+ // get the states
+ const bool bPrevVertical(aPrevTuple.getX() == aCurrTuple.getX());
+ const bool bNextVertical(aNextTuple.getX() == aCurrTuple.getX());
+ const bool bPrevHorizontal(aPrevTuple.getY() == aCurrTuple.getY());
+ const bool bNextHorizontal(aNextTuple.getY() == aCurrTuple.getY());
+ const bool bSnapX(bPrevVertical || bNextVertical);
+ const bool bSnapY(bPrevHorizontal || bNextHorizontal);
+
+ if(bSnapX || bSnapY)
+ {
+ const B2DPoint aSnappedPoint(
+ bSnapX ? aCurrTuple.getX() : aCurrPoint.getX(),
+ bSnapY ? aCurrTuple.getY() : aCurrPoint.getY());
+
+ aRetval.setB2DPoint(a, aSnappedPoint);
+ }
+
+ // prepare next point
+ if(!bLastRun)
+ {
+ aPrevTuple = aCurrTuple;
+ aCurrPoint = aNextPoint;
+ aCurrTuple = aNextTuple;
+ }
+ }
+
+ return aRetval;
+ }
+ else
+ {
+ return rCandidate;
+ }
+ }
+
+ } // end of namespace tools
+} // end of namespace basegfx
+
+//////////////////////////////////////////////////////////////////////////////
+// eof
diff --git a/basegfx/source/polygon/b2dpolygontriangulator.cxx b/basegfx/source/polygon/b2dpolygontriangulator.cxx
new file mode 100644
index 000000000000..83fcc036c996
--- /dev/null
+++ b/basegfx/source/polygon/b2dpolygontriangulator.cxx
@@ -0,0 +1,466 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basegfx.hxx"
+#include <basegfx/polygon/b2dpolygontriangulator.hxx>
+#include <osl/diagnose.h>
+#include <basegfx/point/b2dpoint.hxx>
+#include <basegfx/polygon/b2dpolygon.hxx>
+#include <basegfx/vector/b2dvector.hxx>
+#include <basegfx/polygon/b2dpolygontools.hxx>
+#include <basegfx/polygon/b2dpolypolygontools.hxx>
+#include <basegfx/range/b2drange.hxx>
+#include <basegfx/numeric/ftools.hxx>
+
+#include <algorithm>
+
+//////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+ namespace
+ {
+ class EdgeEntry
+ {
+ EdgeEntry* mpNext;
+ B2DPoint maStart;
+ B2DPoint maEnd;
+ double mfAtan2;
+
+ public:
+ EdgeEntry(const B2DPoint& rStart, const B2DPoint& rEnd)
+ : mpNext(0L),
+ maStart(rStart),
+ maEnd(rEnd),
+ mfAtan2(0.0)
+ {
+ // make sure edge goes down. If horizontal, let it go to the right (left-handed).
+ bool bSwap(false);
+
+ if(::basegfx::fTools::equal(maStart.getY(), maEnd.getY()))
+ {
+ if(maStart.getX() > maEnd.getX())
+ {
+ bSwap = true;
+ }
+ }
+ else if(maStart.getY() > maEnd.getY())
+ {
+ bSwap = true;
+ }
+
+ if(bSwap)
+ {
+ maStart = rEnd;
+ maEnd = rStart;
+ }
+
+ mfAtan2 = atan2(maEnd.getY() - maStart.getY(), maEnd.getX() - maStart.getX());
+ }
+
+ ~EdgeEntry()
+ {
+ }
+
+ bool operator<(const EdgeEntry& rComp) const
+ {
+ if(::basegfx::fTools::equal(maStart.getY(), rComp.maStart.getY()))
+ {
+ if(::basegfx::fTools::equal(maStart.getX(), rComp.maStart.getX()))
+ {
+ // same in x and y -> same start point. Sort emitting vectors from left to right.
+ return (mfAtan2 > rComp.mfAtan2);
+ }
+
+ return (maStart.getX() < rComp.maStart.getX());
+ }
+
+ return (maStart.getY() < rComp.maStart.getY());
+ }
+
+ bool operator==(const EdgeEntry& rComp) const
+ {
+ return (maStart.equal(rComp.maStart) && maEnd.equal(rComp.maEnd));
+ }
+
+ bool operator!=(const EdgeEntry& rComp) const
+ {
+ return !(*this == rComp);
+ }
+
+ const B2DPoint& getStart() const { return maStart; }
+ const B2DPoint& getEnd() const { return maEnd; }
+
+ EdgeEntry* getNext() const { return mpNext; }
+ void setNext(EdgeEntry* pNext) { mpNext = pNext; }
+ };
+
+ //////////////////////////////////////////////////////////////////////////////
+
+ typedef ::std::vector< EdgeEntry > EdgeEntries;
+ typedef ::std::vector< EdgeEntry* > EdgeEntryPointers;
+
+ //////////////////////////////////////////////////////////////////////////////
+
+ class Triangulator
+ {
+ EdgeEntry* mpList;
+ EdgeEntries maStartEntries;
+ EdgeEntryPointers maNewEdgeEntries;
+ B2DPolygon maResult;
+
+ void handleClosingEdge(const B2DPoint& rStart, const B2DPoint& rEnd);
+ bool CheckPointInTriangle(EdgeEntry* pEdgeA, EdgeEntry* pEdgeB, const B2DPoint& rTestPoint);
+ void createTriangle(const B2DPoint& rA, const B2DPoint& rB, const B2DPoint& rC);
+
+ public:
+ Triangulator(const B2DPolyPolygon& rCandidate);
+ ~Triangulator();
+
+ const B2DPolygon getResult() const { return maResult; }
+ };
+
+ void Triangulator::handleClosingEdge(const B2DPoint& rStart, const B2DPoint& rEnd)
+ {
+ // create an entry, else the comparison might use the wrong edges
+ EdgeEntry aNew(rStart, rEnd);
+ EdgeEntry* pCurr = mpList;
+ EdgeEntry* pPrev = 0L;
+
+ while(pCurr
+ && pCurr->getStart().getY() <= aNew.getStart().getY()
+ && *pCurr != aNew)
+ {
+ pPrev = pCurr;
+ pCurr = pCurr->getNext();
+ }
+
+ if(pCurr && *pCurr == aNew)
+ {
+ // found closing edge, remove
+ if(pPrev)
+ {
+ pPrev->setNext(pCurr->getNext());
+ }
+ else
+ {
+ mpList = pCurr->getNext();
+ }
+ }
+ else
+ {
+ // insert closing edge
+ EdgeEntry* pNew = new EdgeEntry(aNew);
+ maNewEdgeEntries.push_back(pNew);
+ pCurr = mpList;
+ pPrev = 0L;
+
+ while(pCurr && *pCurr < *pNew)
+ {
+ pPrev = pCurr;
+ pCurr = pCurr->getNext();
+ }
+
+ if(pPrev)
+ {
+ pNew->setNext(pPrev->getNext());
+ pPrev->setNext(pNew);
+ }
+ else
+ {
+ pNew->setNext(mpList);
+ mpList = pNew;
+ }
+ }
+ }
+
+ bool Triangulator::CheckPointInTriangle(EdgeEntry* pEdgeA, EdgeEntry* pEdgeB, const B2DPoint& rTestPoint)
+ {
+ // inside triangle or on edge?
+ if(tools::isPointInTriangle(pEdgeA->getStart(), pEdgeA->getEnd(), pEdgeB->getEnd(), rTestPoint, true))
+ {
+ // but not on point
+ if(!rTestPoint.equal(pEdgeA->getEnd()) && !rTestPoint.equal(pEdgeB->getEnd()))
+ {
+ // found point in triangle -> split triangle inserting two edges
+ EdgeEntry* pStart = new EdgeEntry(pEdgeA->getStart(), rTestPoint);
+ EdgeEntry* pEnd = new EdgeEntry(*pStart);
+ maNewEdgeEntries.push_back(pStart);
+ maNewEdgeEntries.push_back(pEnd);
+
+ pStart->setNext(pEnd);
+ pEnd->setNext(pEdgeA->getNext());
+ pEdgeA->setNext(pStart);
+
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ void Triangulator::createTriangle(const B2DPoint& rA, const B2DPoint& rB, const B2DPoint& rC)
+ {
+ maResult.append(rA);
+ maResult.append(rB);
+ maResult.append(rC);
+ }
+
+ // consume as long as there are edges
+ Triangulator::Triangulator(const B2DPolyPolygon& rCandidate)
+ : mpList(0L)
+ {
+ // add all available edges to the single linked local list which will be sorted
+ // by Y,X,atan2 when adding nodes
+ if(rCandidate.count())
+ {
+ for(sal_uInt32 a(0L); a < rCandidate.count(); a++)
+ {
+ const B2DPolygon aPolygonCandidate(rCandidate.getB2DPolygon(a));
+ const sal_uInt32 nCount(aPolygonCandidate.count());
+
+ if(nCount > 2L)
+ {
+ B2DPoint aPrevPnt(aPolygonCandidate.getB2DPoint(nCount - 1L));
+
+ for(sal_uInt32 b(0L); b < nCount; b++)
+ {
+ B2DPoint aNextPnt(aPolygonCandidate.getB2DPoint(b));
+
+ if( !aPrevPnt.equal(aNextPnt) )
+ {
+ maStartEntries.push_back(EdgeEntry(aPrevPnt, aNextPnt));
+ }
+
+ aPrevPnt = aNextPnt;
+ }
+ }
+ }
+
+ if(maStartEntries.size())
+ {
+ // sort initial list
+ ::std::sort(maStartEntries.begin(), maStartEntries.end());
+
+ // insert to own simply linked list
+ EdgeEntries::iterator aPos(maStartEntries.begin());
+ mpList = &(*aPos++);
+ EdgeEntry* pLast = mpList;
+
+ while(aPos != maStartEntries.end())
+ {
+ EdgeEntry* pEntry = &(*aPos++);
+ pLast->setNext(pEntry);
+ pLast = pEntry;
+ }
+ }
+ }
+
+ while(mpList)
+ {
+ if(mpList->getNext() && mpList->getNext()->getStart().equal(mpList->getStart()))
+ {
+ // next candidate. There are two edges and start point is equal.
+ // Length is not zero.
+ EdgeEntry* pEdgeA = mpList;
+ EdgeEntry* pEdgeB = pEdgeA->getNext();
+
+ if( pEdgeA->getEnd().equal(pEdgeB->getEnd()) )
+ {
+ // start and end equal -> neutral triangle, delete both
+ mpList = pEdgeB->getNext();
+ }
+ else
+ {
+ const B2DVector aLeft(pEdgeA->getEnd() - pEdgeA->getStart());
+ const B2DVector aRight(pEdgeB->getEnd() - pEdgeA->getStart());
+
+ if(ORIENTATION_NEUTRAL == getOrientation(aLeft, aRight))
+ {
+ // edges are parallel and have different length -> neutral triangle,
+ // delete both edges and handle closing edge
+ mpList = pEdgeB->getNext();
+ handleClosingEdge(pEdgeA->getEnd(), pEdgeB->getEnd());
+ }
+ else
+ {
+ // not parallel, look for points inside
+ B2DRange aRange(pEdgeA->getStart(), pEdgeA->getEnd());
+ aRange.expand(pEdgeB->getEnd());
+ EdgeEntry* pTestEdge = pEdgeB->getNext();
+ bool bNoPointInTriangle(true);
+
+ // look for start point in triangle
+ while(bNoPointInTriangle && pTestEdge)
+ {
+ if(aRange.getMaxY() < pTestEdge->getStart().getY())
+ {
+ // edge is below test range and edges are sorted -> stop looking
+ break;
+ }
+ else
+ {
+ // do not look for edges with same start point, they are sorted and cannot end inside.
+ if(!pTestEdge->getStart().equal(pEdgeA->getStart()))
+ {
+ if(aRange.isInside(pTestEdge->getStart()))
+ {
+ bNoPointInTriangle = CheckPointInTriangle(pEdgeA, pEdgeB, pTestEdge->getStart());
+ }
+ }
+ }
+
+ // next candidate
+ pTestEdge = pTestEdge->getNext();
+ }
+
+ if(bNoPointInTriangle)
+ {
+ // look for end point in triange
+ pTestEdge = pEdgeB->getNext();
+
+ while(bNoPointInTriangle && pTestEdge)
+ {
+ if(aRange.getMaxY() < pTestEdge->getStart().getY())
+ {
+ // edge is below test range and edges are sorted -> stop looking
+ break;
+ }
+ else
+ {
+ // do not look for edges with same end point, they are sorted and cannot end inside.
+ if(!pTestEdge->getEnd().equal(pEdgeA->getStart()))
+ {
+ if(aRange.isInside(pTestEdge->getEnd()))
+ {
+ bNoPointInTriangle = CheckPointInTriangle(pEdgeA, pEdgeB, pTestEdge->getEnd());
+ }
+ }
+ }
+
+ // next candidate
+ pTestEdge = pTestEdge->getNext();
+ }
+ }
+
+ if(bNoPointInTriangle)
+ {
+ // create triangle, remove edges, handle closing edge
+ mpList = pEdgeB->getNext();
+ createTriangle(pEdgeA->getStart(), pEdgeB->getEnd(), pEdgeA->getEnd());
+ handleClosingEdge(pEdgeA->getEnd(), pEdgeB->getEnd());
+ }
+ }
+ }
+ }
+ else
+ {
+ // only one entry at start point, delete it
+ mpList = mpList->getNext();
+ }
+ }
+ }
+
+ Triangulator::~Triangulator()
+ {
+ EdgeEntryPointers::iterator aIter(maNewEdgeEntries.begin());
+
+ while(aIter != maNewEdgeEntries.end())
+ {
+ delete (*aIter++);
+ }
+ }
+
+ } // end of anonymous namespace
+} // end of namespace basegfx
+
+//////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+ namespace triangulator
+ {
+ B2DPolygon triangulate(const B2DPolygon& rCandidate)
+ {
+ B2DPolygon aRetval;
+
+ // subdivide locally (triangulate does not work with beziers), remove double and neutral points
+ B2DPolygon aCandidate(rCandidate.areControlPointsUsed() ? tools::adaptiveSubdivideByAngle(rCandidate) : rCandidate);
+ aCandidate.removeDoublePoints();
+ aCandidate = tools::removeNeutralPoints(aCandidate);
+
+ if(2L == aCandidate.count())
+ {
+ // candidate IS a triangle, just append
+ aRetval.append(aCandidate);
+ }
+ else if(aCandidate.count() > 2L)
+ {
+ if(tools::isConvex(aCandidate))
+ {
+ // polygon is convex, just use a triangle fan
+ tools::addTriangleFan(aCandidate, aRetval);
+ }
+ else
+ {
+ // polygon is concave.
+ const B2DPolyPolygon aCandPolyPoly(aCandidate);
+ Triangulator aTriangulator(aCandPolyPoly);
+ aRetval = aTriangulator.getResult();
+ }
+ }
+
+ return aRetval;
+ }
+
+ B2DPolygon triangulate(const B2DPolyPolygon& rCandidate)
+ {
+ B2DPolygon aRetval;
+
+ // subdivide locally (triangulate does not work with beziers)
+ B2DPolyPolygon aCandidate(rCandidate.areControlPointsUsed() ? tools::adaptiveSubdivideByAngle(rCandidate) : rCandidate);
+
+ if(1L == aCandidate.count())
+ {
+ // single polygon -> single polygon triangulation
+ const B2DPolygon aSinglePolygon(aCandidate.getB2DPolygon(0L));
+ aRetval = triangulate(aSinglePolygon);
+ }
+ else
+ {
+ Triangulator aTriangulator(aCandidate);
+ aRetval = aTriangulator.getResult();
+ }
+
+ return aRetval;
+ }
+ } // end of namespace triangulator
+} // end of namespace basegfx
+
+//////////////////////////////////////////////////////////////////////////////
+// eof
diff --git a/basegfx/source/polygon/b2dpolypolygon.cxx b/basegfx/source/polygon/b2dpolypolygon.cxx
new file mode 100644
index 000000000000..9b28dffd19af
--- /dev/null
+++ b/basegfx/source/polygon/b2dpolypolygon.cxx
@@ -0,0 +1,432 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basegfx.hxx"
+#include <basegfx/polygon/b2dpolypolygon.hxx>
+#include <osl/diagnose.h>
+#include <basegfx/polygon/b2dpolygon.hxx>
+#include <basegfx/polygon/b2dpolypolygontools.hxx>
+#include <rtl/instance.hxx>
+#include <basegfx/matrix/b2dhommatrix.hxx>
+
+#include <functional>
+#include <vector>
+#include <algorithm>
+
+//////////////////////////////////////////////////////////////////////////////
+
+class ImplB2DPolyPolygon
+{
+ typedef ::std::vector< basegfx::B2DPolygon > PolygonVector;
+
+ PolygonVector maPolygons;
+
+public:
+ ImplB2DPolyPolygon() : maPolygons()
+ {
+ }
+
+ ImplB2DPolyPolygon(const basegfx::B2DPolygon& rToBeCopied) :
+ maPolygons(1,rToBeCopied)
+ {
+ }
+
+ bool operator==(const ImplB2DPolyPolygon& rPolygonList) const
+ {
+ // same polygon count?
+ if(maPolygons.size() != rPolygonList.maPolygons.size())
+ return false;
+
+ // compare polygon content
+ if(!(maPolygons == rPolygonList.maPolygons))
+ return false;
+
+ return true;
+ }
+
+ const basegfx::B2DPolygon& getB2DPolygon(sal_uInt32 nIndex) const
+ {
+ return maPolygons[nIndex];
+ }
+
+ void setB2DPolygon(sal_uInt32 nIndex, const basegfx::B2DPolygon& rPolygon)
+ {
+ maPolygons[nIndex] = rPolygon;
+ }
+
+ void insert(sal_uInt32 nIndex, const basegfx::B2DPolygon& rPolygon, sal_uInt32 nCount)
+ {
+ if(nCount)
+ {
+ // add nCount copies of rPolygon
+ PolygonVector::iterator aIndex(maPolygons.begin());
+ aIndex += nIndex;
+ maPolygons.insert(aIndex, nCount, rPolygon);
+ }
+ }
+
+ void insert(sal_uInt32 nIndex, const basegfx::B2DPolyPolygon& rPolyPolygon)
+ {
+ const sal_uInt32 nCount = rPolyPolygon.count();
+
+ if(nCount)
+ {
+ // add nCount polygons from rPolyPolygon
+ maPolygons.reserve(maPolygons.size() + nCount);
+ PolygonVector::iterator aIndex(maPolygons.begin());
+ aIndex += nIndex;
+
+ for(sal_uInt32 a(0L); a < nCount; a++)
+ {
+ aIndex = maPolygons.insert(aIndex, rPolyPolygon.getB2DPolygon(a));
+ aIndex++;
+ }
+ }
+ }
+
+ void remove(sal_uInt32 nIndex, sal_uInt32 nCount)
+ {
+ if(nCount)
+ {
+ // remove polygon data
+ PolygonVector::iterator aStart(maPolygons.begin());
+ aStart += nIndex;
+ const PolygonVector::iterator aEnd(aStart + nCount);
+
+ maPolygons.erase(aStart, aEnd);
+ }
+ }
+
+ sal_uInt32 count() const
+ {
+ return maPolygons.size();
+ }
+
+ void setClosed(bool bNew)
+ {
+ for(sal_uInt32 a(0L); a < maPolygons.size(); a++)
+ {
+ maPolygons[a].setClosed(bNew);
+ }
+ }
+
+ void flip()
+ {
+ std::for_each( maPolygons.begin(),
+ maPolygons.end(),
+ std::mem_fun_ref( &basegfx::B2DPolygon::flip ));
+ }
+
+ void removeDoublePoints()
+ {
+ std::for_each( maPolygons.begin(),
+ maPolygons.end(),
+ std::mem_fun_ref( &basegfx::B2DPolygon::removeDoublePoints ));
+ }
+
+ void transform(const basegfx::B2DHomMatrix& rMatrix)
+ {
+ for(sal_uInt32 a(0L); a < maPolygons.size(); a++)
+ {
+ maPolygons[a].transform(rMatrix);
+ }
+ }
+
+ void makeUnique()
+ {
+ std::for_each( maPolygons.begin(),
+ maPolygons.end(),
+ std::mem_fun_ref( &basegfx::B2DPolygon::makeUnique ));
+ }
+
+ const basegfx::B2DPolygon* begin() const
+ {
+ if(maPolygons.empty())
+ return 0;
+ else
+ return &maPolygons.front();
+ }
+
+ const basegfx::B2DPolygon* end() const
+ {
+ if(maPolygons.empty())
+ return 0;
+ else
+ return (&maPolygons.back())+1;
+ }
+
+ basegfx::B2DPolygon* begin()
+ {
+ if(maPolygons.empty())
+ return 0;
+ else
+ return &maPolygons.front();
+ }
+
+ basegfx::B2DPolygon* end()
+ {
+ if(maPolygons.empty())
+ return 0;
+ else
+ return &(maPolygons.back())+1;
+ }
+};
+
+//////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+ namespace { struct DefaultPolyPolygon: public rtl::Static<B2DPolyPolygon::ImplType,
+ DefaultPolyPolygon> {}; }
+
+ B2DPolyPolygon::B2DPolyPolygon() :
+ mpPolyPolygon(DefaultPolyPolygon::get())
+ {
+ }
+
+ B2DPolyPolygon::B2DPolyPolygon(const B2DPolyPolygon& rPolyPolygon) :
+ mpPolyPolygon(rPolyPolygon.mpPolyPolygon)
+ {
+ }
+
+ B2DPolyPolygon::B2DPolyPolygon(const B2DPolygon& rPolygon) :
+ mpPolyPolygon( ImplB2DPolyPolygon(rPolygon) )
+ {
+ }
+
+ B2DPolyPolygon::~B2DPolyPolygon()
+ {
+ }
+
+ B2DPolyPolygon& B2DPolyPolygon::operator=(const B2DPolyPolygon& rPolyPolygon)
+ {
+ mpPolyPolygon = rPolyPolygon.mpPolyPolygon;
+ return *this;
+ }
+
+ void B2DPolyPolygon::makeUnique()
+ {
+ mpPolyPolygon.make_unique();
+ mpPolyPolygon->makeUnique();
+ }
+
+ bool B2DPolyPolygon::operator==(const B2DPolyPolygon& rPolyPolygon) const
+ {
+ if(mpPolyPolygon.same_object(rPolyPolygon.mpPolyPolygon))
+ return true;
+
+ return ((*mpPolyPolygon) == (*rPolyPolygon.mpPolyPolygon));
+ }
+
+ bool B2DPolyPolygon::operator!=(const B2DPolyPolygon& rPolyPolygon) const
+ {
+ return !((*this) == rPolyPolygon);
+ }
+
+ sal_uInt32 B2DPolyPolygon::count() const
+ {
+ return mpPolyPolygon->count();
+ }
+
+ B2DPolygon B2DPolyPolygon::getB2DPolygon(sal_uInt32 nIndex) const
+ {
+ OSL_ENSURE(nIndex < mpPolyPolygon->count(), "B2DPolyPolygon access outside range (!)");
+
+ return mpPolyPolygon->getB2DPolygon(nIndex);
+ }
+
+ void B2DPolyPolygon::setB2DPolygon(sal_uInt32 nIndex, const B2DPolygon& rPolygon)
+ {
+ OSL_ENSURE(nIndex < mpPolyPolygon->count(), "B2DPolyPolygon access outside range (!)");
+
+ if(getB2DPolygon(nIndex) != rPolygon)
+ mpPolyPolygon->setB2DPolygon(nIndex, rPolygon);
+ }
+
+ bool B2DPolyPolygon::areControlPointsUsed() const
+ {
+ for(sal_uInt32 a(0L); a < mpPolyPolygon->count(); a++)
+ {
+ const B2DPolygon& rPolygon = mpPolyPolygon->getB2DPolygon(a);
+
+ if(rPolygon.areControlPointsUsed())
+ {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ void B2DPolyPolygon::insert(sal_uInt32 nIndex, const B2DPolygon& rPolygon, sal_uInt32 nCount)
+ {
+ OSL_ENSURE(nIndex <= mpPolyPolygon->count(), "B2DPolyPolygon Insert outside range (!)");
+
+ if(nCount)
+ mpPolyPolygon->insert(nIndex, rPolygon, nCount);
+ }
+
+ void B2DPolyPolygon::append(const B2DPolygon& rPolygon, sal_uInt32 nCount)
+ {
+ if(nCount)
+ mpPolyPolygon->insert(mpPolyPolygon->count(), rPolygon, nCount);
+ }
+
+ B2DPolyPolygon B2DPolyPolygon::getDefaultAdaptiveSubdivision() const
+ {
+ B2DPolyPolygon aRetval;
+
+ for(sal_uInt32 a(0L); a < mpPolyPolygon->count(); a++)
+ {
+ aRetval.append(mpPolyPolygon->getB2DPolygon(a).getDefaultAdaptiveSubdivision());
+ }
+
+ return aRetval;
+ }
+
+ B2DRange B2DPolyPolygon::getB2DRange() const
+ {
+ B2DRange aRetval;
+
+ for(sal_uInt32 a(0L); a < mpPolyPolygon->count(); a++)
+ {
+ aRetval.expand(mpPolyPolygon->getB2DPolygon(a).getB2DRange());
+ }
+
+ return aRetval;
+ }
+
+ void B2DPolyPolygon::insert(sal_uInt32 nIndex, const B2DPolyPolygon& rPolyPolygon)
+ {
+ OSL_ENSURE(nIndex <= mpPolyPolygon->count(), "B2DPolyPolygon Insert outside range (!)");
+
+ if(rPolyPolygon.count())
+ mpPolyPolygon->insert(nIndex, rPolyPolygon);
+ }
+
+ void B2DPolyPolygon::append(const B2DPolyPolygon& rPolyPolygon)
+ {
+ if(rPolyPolygon.count())
+ mpPolyPolygon->insert(mpPolyPolygon->count(), rPolyPolygon);
+ }
+
+ void B2DPolyPolygon::remove(sal_uInt32 nIndex, sal_uInt32 nCount)
+ {
+ OSL_ENSURE(nIndex + nCount <= mpPolyPolygon->count(), "B2DPolyPolygon Remove outside range (!)");
+
+ if(nCount)
+ mpPolyPolygon->remove(nIndex, nCount);
+ }
+
+ void B2DPolyPolygon::clear()
+ {
+ mpPolyPolygon = DefaultPolyPolygon::get();
+ }
+
+ bool B2DPolyPolygon::isClosed() const
+ {
+ bool bRetval(true);
+
+ // PolyPOlygon is closed when all contained Polygons are closed or
+ // no Polygon exists.
+ for(sal_uInt32 a(0L); bRetval && a < mpPolyPolygon->count(); a++)
+ {
+ if(!(mpPolyPolygon->getB2DPolygon(a)).isClosed())
+ {
+ bRetval = false;
+ }
+ }
+
+ return bRetval;
+ }
+
+ void B2DPolyPolygon::setClosed(bool bNew)
+ {
+ if(bNew != isClosed())
+ mpPolyPolygon->setClosed(bNew);
+ }
+
+ void B2DPolyPolygon::flip()
+ {
+ if(mpPolyPolygon->count())
+ {
+ mpPolyPolygon->flip();
+ }
+ }
+
+ bool B2DPolyPolygon::hasDoublePoints() const
+ {
+ bool bRetval(false);
+
+ for(sal_uInt32 a(0L); !bRetval && a < mpPolyPolygon->count(); a++)
+ {
+ if((mpPolyPolygon->getB2DPolygon(a)).hasDoublePoints())
+ {
+ bRetval = true;
+ }
+ }
+
+ return bRetval;
+ }
+
+ void B2DPolyPolygon::removeDoublePoints()
+ {
+ if(hasDoublePoints())
+ mpPolyPolygon->removeDoublePoints();
+ }
+
+ void B2DPolyPolygon::transform(const B2DHomMatrix& rMatrix)
+ {
+ if(mpPolyPolygon->count() && !rMatrix.isIdentity())
+ {
+ mpPolyPolygon->transform(rMatrix);
+ }
+ }
+
+ const B2DPolygon* B2DPolyPolygon::begin() const
+ {
+ return mpPolyPolygon->begin();
+ }
+
+ const B2DPolygon* B2DPolyPolygon::end() const
+ {
+ return mpPolyPolygon->end();
+ }
+
+ B2DPolygon* B2DPolyPolygon::begin()
+ {
+ return mpPolyPolygon->begin();
+ }
+
+ B2DPolygon* B2DPolyPolygon::end()
+ {
+ return mpPolyPolygon->end();
+ }
+} // end of namespace basegfx
+
+// eof
diff --git a/basegfx/source/polygon/b2dpolypolygoncutter.cxx b/basegfx/source/polygon/b2dpolypolygoncutter.cxx
new file mode 100644
index 000000000000..4f9cf3a75f72
--- /dev/null
+++ b/basegfx/source/polygon/b2dpolypolygoncutter.cxx
@@ -0,0 +1,1014 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basegfx.hxx"
+#include <osl/diagnose.h>
+#include <basegfx/numeric/ftools.hxx>
+#include <basegfx/polygon/b2dpolypolygoncutter.hxx>
+#include <basegfx/point/b2dpoint.hxx>
+#include <basegfx/vector/b2dvector.hxx>
+#include <basegfx/polygon/b2dpolygon.hxx>
+#include <basegfx/polygon/b2dpolygontools.hxx>
+#include <basegfx/polygon/b2dpolygoncutandtouch.hxx>
+#include <basegfx/range/b2drange.hxx>
+#include <basegfx/polygon/b2dpolypolygontools.hxx>
+#include <basegfx/curve/b2dcubicbezier.hxx>
+#include <vector>
+#include <algorithm>
+
+//////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+ namespace
+ {
+ //////////////////////////////////////////////////////////////////////////////
+
+ struct StripHelper
+ {
+ B2DRange maRange;
+ sal_Int32 mnDepth;
+ B2VectorOrientation meOrinetation;
+ };
+
+ //////////////////////////////////////////////////////////////////////////////
+
+ struct PN
+ {
+ public:
+ B2DPoint maPoint;
+ sal_uInt32 mnI;
+ sal_uInt32 mnIP;
+ sal_uInt32 mnIN;
+ };
+
+ //////////////////////////////////////////////////////////////////////////////
+
+ struct VN
+ {
+ public:
+ B2DVector maPrev;
+ B2DVector maNext;
+
+ // to have the correct curve segments in the crossover checks,
+ // it is necessary to keep the original next vectors, too. Else,
+ // it may happen to use a already switched next vector which
+ // would interpolate the wrong comparison point
+ B2DVector maOriginalNext;
+ };
+
+ //////////////////////////////////////////////////////////////////////////////
+
+ struct SN
+ {
+ public:
+ PN* mpPN;
+
+ bool operator<(const SN& rComp) const
+ {
+ if(fTools::equal(mpPN->maPoint.getX(), rComp.mpPN->maPoint.getX()))
+ {
+ if(fTools::equal(mpPN->maPoint.getY(), rComp.mpPN->maPoint.getY()))
+ {
+ return (mpPN->mnI < rComp.mpPN->mnI);
+ }
+ else
+ {
+ return fTools::less(mpPN->maPoint.getY(), rComp.mpPN->maPoint.getY());
+ }
+ }
+ else
+ {
+ return fTools::less(mpPN->maPoint.getX(), rComp.mpPN->maPoint.getX());
+ }
+ }
+ };
+
+ //////////////////////////////////////////////////////////////////////////////
+
+ typedef ::std::vector< PN > PNV;
+ typedef ::std::vector< VN > VNV;
+ typedef ::std::vector< SN > SNV;
+
+ //////////////////////////////////////////////////////////////////////////////
+
+ class solver
+ {
+ private:
+ const B2DPolyPolygon maOriginal;
+ PNV maPNV;
+ VNV maVNV;
+ SNV maSNV;
+
+ unsigned mbIsCurve : 1;
+ unsigned mbChanged : 1;
+
+ void impAddPolygon(const sal_uInt32 aPos, const B2DPolygon& rGeometry)
+ {
+ const sal_uInt32 nCount(rGeometry.count());
+ PN aNewPN;
+ VN aNewVN;
+ SN aNewSN;
+
+ for(sal_uInt32 a(0); a < nCount; a++)
+ {
+ const B2DPoint aPoint(rGeometry.getB2DPoint(a));
+ aNewPN.maPoint = aPoint;
+ aNewPN.mnI = aPos + a;
+ aNewPN.mnIP = aPos + ((a != 0) ? a - 1 : nCount - 1);
+ aNewPN.mnIN = aPos + ((a + 1 == nCount) ? 0 : a + 1);
+ maPNV.push_back(aNewPN);
+
+ if(mbIsCurve)
+ {
+ aNewVN.maPrev = rGeometry.getPrevControlPoint(a) - aPoint;
+ aNewVN.maNext = rGeometry.getNextControlPoint(a) - aPoint;
+ aNewVN.maOriginalNext = aNewVN.maNext;
+ maVNV.push_back(aNewVN);
+ }
+
+ aNewSN.mpPN = &maPNV[maPNV.size() - 1];
+ maSNV.push_back(aNewSN);
+ }
+ }
+
+ bool impLeftOfEdges(const B2DVector& rVecA, const B2DVector& rVecB, const B2DVector& rTest)
+ {
+ // tests if rTest is left of both directed line segments along the line -rVecA, rVecB. Test is
+ // with border.
+ if(rVecA.cross(rVecB) > 0.0)
+ {
+ // b is left turn seen from a, test if Test is left of both and so inside (left is seeen as inside)
+ const bool bBoolA(fTools::moreOrEqual(rVecA.cross(rTest), 0.0));
+ const bool bBoolB(fTools::lessOrEqual(rVecB.cross(rTest), 0.0));
+
+ return (bBoolA && bBoolB);
+ }
+ else
+ {
+ // b is right turn seen from a, test if Test is right of both and so outside (left is seeen as inside)
+ const bool bBoolA(fTools::lessOrEqual(rVecA.cross(rTest), 0.0));
+ const bool bBoolB(fTools::moreOrEqual(rVecB.cross(rTest), 0.0));
+
+ return (!(bBoolA && bBoolB));
+ }
+ }
+
+ void impSwitchNext(PN& rPNa, PN& rPNb)
+ {
+ ::std::swap(rPNa.mnIN, rPNb.mnIN);
+
+ if(mbIsCurve)
+ {
+ VN& rVNa = maVNV[rPNa.mnI];
+ VN& rVNb = maVNV[rPNb.mnI];
+
+ ::std::swap(rVNa.maNext, rVNb.maNext);
+ }
+
+ if(!mbChanged)
+ {
+ mbChanged = true;
+ }
+ }
+
+ B2DCubicBezier createSegment(const PN& rPN, bool bPrev) const
+ {
+ const B2DPoint& rStart(rPN.maPoint);
+ const B2DPoint& rEnd(maPNV[bPrev ? rPN.mnIP : rPN.mnIN].maPoint);
+ const B2DVector& rCPA(bPrev ? maVNV[rPN.mnI].maPrev : maVNV[rPN.mnI].maNext);
+ // Use maOriginalNext, not maNext to create the original (yet unchanged)
+ // curve segment. Otherwise, this segment would NOT ne correct.
+ const B2DVector& rCPB(bPrev ? maVNV[maPNV[rPN.mnIP].mnI].maOriginalNext : maVNV[maPNV[rPN.mnIN].mnI].maPrev);
+
+ return B2DCubicBezier(rStart, rStart + rCPA, rEnd + rCPB, rEnd);
+ }
+
+ void impHandleCommon(PN& rPNa, PN& rPNb)
+ {
+ if(mbIsCurve)
+ {
+ const B2DCubicBezier aNextA(createSegment(rPNa, false));
+ const B2DCubicBezier aPrevA(createSegment(rPNa, true));
+
+ if(aNextA.equal(aPrevA))
+ {
+ // deadend on A (identical edge)
+ return;
+ }
+
+ const B2DCubicBezier aNextB(createSegment(rPNb, false));
+ const B2DCubicBezier aPrevB(createSegment(rPNb, true));
+
+ if(aNextB.equal(aPrevB))
+ {
+ // deadend on B (identical edge)
+ return;
+ }
+
+ if(aPrevA.equal(aPrevB))
+ {
+ // common edge in same direction
+ if(aNextA.equal(aNextB))
+ {
+ // common edge in same direction continues
+ return;
+ }
+ else
+ {
+ // common edge in same direction leave
+ // action is done on enter
+ return;
+ }
+ }
+ else if(aPrevA.equal(aNextB))
+ {
+ // common edge in opposite direction
+ if(aNextA.equal(aPrevB))
+ {
+ // common edge in opposite direction continues
+ return;
+ }
+ else
+ {
+ // common edge in opposite direction leave
+ impSwitchNext(rPNa, rPNb);
+ }
+ }
+ else if(aNextA.equal(aNextB))
+ {
+ // common edge in same direction enter
+ // search leave edge
+ PN* pPNa2 = &maPNV[rPNa.mnIN];
+ PN* pPNb2 = &maPNV[rPNb.mnIN];
+ bool bOnEdge(true);
+
+ do
+ {
+ const B2DCubicBezier aNextA2(createSegment(*pPNa2, false));
+ const B2DCubicBezier aNextB2(createSegment(*pPNb2, false));
+
+ if(aNextA2.equal(aNextB2))
+ {
+ pPNa2 = &maPNV[pPNa2->mnIN];
+ pPNb2 = &maPNV[pPNb2->mnIN];
+ }
+ else
+ {
+ bOnEdge = false;
+ }
+ }
+ while(bOnEdge && pPNa2 != &rPNa && pPNa2 != &rPNa);
+
+ if(bOnEdge)
+ {
+ // loop over two identical polygon paths
+ return;
+ }
+ else
+ {
+ // enter at rPNa, rPNb; leave at pPNa2, pPNb2. No common edges
+ // at enter/leave. Check for crossover.
+ const B2DVector aPrevCA(aPrevA.interpolatePoint(0.5) - aPrevA.getStartPoint());
+ const B2DVector aNextCA(aNextA.interpolatePoint(0.5) - aNextA.getStartPoint());
+ const B2DVector aPrevCB(aPrevB.interpolatePoint(0.5) - aPrevB.getStartPoint());
+ const bool bEnter(impLeftOfEdges(aPrevCA, aNextCA, aPrevCB));
+
+ const B2DCubicBezier aNextA2(createSegment(*pPNa2, false));
+ const B2DCubicBezier aPrevA2(createSegment(*pPNa2, true));
+ const B2DCubicBezier aNextB2(createSegment(*pPNb2, false));
+ const B2DVector aPrevCA2(aPrevA2.interpolatePoint(0.5) - aPrevA2.getStartPoint());
+ const B2DVector aNextCA2(aNextA2.interpolatePoint(0.5) - aNextA2.getStartPoint());
+ const B2DVector aNextCB2(aNextB2.interpolatePoint(0.5) - aNextB2.getStartPoint());
+ const bool bLeave(impLeftOfEdges(aPrevCA2, aNextCA2, aNextCB2));
+
+ if(bEnter != bLeave)
+ {
+ // crossover
+ impSwitchNext(rPNa, rPNb);
+ }
+ }
+ }
+ else if(aNextA.equal(aPrevB))
+ {
+ // common edge in opposite direction enter
+ impSwitchNext(rPNa, rPNb);
+ }
+ else
+ {
+ // no common edges, check for crossover
+ const B2DVector aPrevCA(aPrevA.interpolatePoint(0.5) - aPrevA.getStartPoint());
+ const B2DVector aNextCA(aNextA.interpolatePoint(0.5) - aNextA.getStartPoint());
+ const B2DVector aPrevCB(aPrevB.interpolatePoint(0.5) - aPrevB.getStartPoint());
+ const B2DVector aNextCB(aNextB.interpolatePoint(0.5) - aNextB.getStartPoint());
+
+ const bool bEnter(impLeftOfEdges(aPrevCA, aNextCA, aPrevCB));
+ const bool bLeave(impLeftOfEdges(aPrevCA, aNextCA, aNextCB));
+
+ if(bEnter != bLeave)
+ {
+ // crossover
+ impSwitchNext(rPNa, rPNb);
+ }
+ }
+ }
+ else
+ {
+ const B2DPoint& rNextA(maPNV[rPNa.mnIN].maPoint);
+ const B2DPoint& rPrevA(maPNV[rPNa.mnIP].maPoint);
+
+ if(rNextA.equal(rPrevA))
+ {
+ // deadend on A
+ return;
+ }
+
+ const B2DPoint& rNextB(maPNV[rPNb.mnIN].maPoint);
+ const B2DPoint& rPrevB(maPNV[rPNb.mnIP].maPoint);
+
+ if(rNextB.equal(rPrevB))
+ {
+ // deadend on B
+ return;
+ }
+
+ if(rPrevA.equal(rPrevB))
+ {
+ // common edge in same direction
+ if(rNextA.equal(rNextB))
+ {
+ // common edge in same direction continues
+ return;
+ }
+ else
+ {
+ // common edge in same direction leave
+ // action is done on enter
+ return;
+ }
+ }
+ else if(rPrevA.equal(rNextB))
+ {
+ // common edge in opposite direction
+ if(rNextA.equal(rPrevB))
+ {
+ // common edge in opposite direction continues
+ return;
+ }
+ else
+ {
+ // common edge in opposite direction leave
+ impSwitchNext(rPNa, rPNb);
+ }
+ }
+ else if(rNextA.equal(rNextB))
+ {
+ // common edge in same direction enter
+ // search leave edge
+ PN* pPNa2 = &maPNV[rPNa.mnIN];
+ PN* pPNb2 = &maPNV[rPNb.mnIN];
+ bool bOnEdge(true);
+
+ do
+ {
+ const B2DPoint& rNextA2(maPNV[pPNa2->mnIN].maPoint);
+ const B2DPoint& rNextB2(maPNV[pPNb2->mnIN].maPoint);
+
+ if(rNextA2.equal(rNextB2))
+ {
+ pPNa2 = &maPNV[pPNa2->mnIN];
+ pPNb2 = &maPNV[pPNb2->mnIN];
+ }
+ else
+ {
+ bOnEdge = false;
+ }
+ }
+ while(bOnEdge && pPNa2 != &rPNa && pPNa2 != &rPNa);
+
+ if(bOnEdge)
+ {
+ // loop over two identical polygon paths
+ return;
+ }
+ else
+ {
+ // enter at rPNa, rPNb; leave at pPNa2, pPNb2. No common edges
+ // at enter/leave. Check for crossover.
+ const B2DPoint& aPointE(rPNa.maPoint);
+ const B2DVector aPrevAE(rPrevA - aPointE);
+ const B2DVector aNextAE(rNextA - aPointE);
+ const B2DVector aPrevBE(rPrevB - aPointE);
+
+ const B2DPoint& aPointL(pPNa2->maPoint);
+ const B2DVector aPrevAL(maPNV[pPNa2->mnIP].maPoint - aPointL);
+ const B2DVector aNextAL(maPNV[pPNa2->mnIN].maPoint - aPointL);
+ const B2DVector aNextBL(maPNV[pPNb2->mnIN].maPoint - aPointL);
+
+ const bool bEnter(impLeftOfEdges(aPrevAE, aNextAE, aPrevBE));
+ const bool bLeave(impLeftOfEdges(aPrevAL, aNextAL, aNextBL));
+
+ if(bEnter != bLeave)
+ {
+ // crossover; switch start or end
+ impSwitchNext(rPNa, rPNb);
+ }
+ }
+ }
+ else if(rNextA.equal(rPrevB))
+ {
+ // common edge in opposite direction enter
+ impSwitchNext(rPNa, rPNb);
+ }
+ else
+ {
+ // no common edges, check for crossover
+ const B2DPoint& aPoint(rPNa.maPoint);
+ const B2DVector aPrevA(rPrevA - aPoint);
+ const B2DVector aNextA(rNextA - aPoint);
+ const B2DVector aPrevB(rPrevB - aPoint);
+ const B2DVector aNextB(rNextB - aPoint);
+
+ const bool bEnter(impLeftOfEdges(aPrevA, aNextA, aPrevB));
+ const bool bLeave(impLeftOfEdges(aPrevA, aNextA, aNextB));
+
+ if(bEnter != bLeave)
+ {
+ // crossover
+ impSwitchNext(rPNa, rPNb);
+ }
+ }
+ }
+ }
+
+ void impSolve()
+ {
+ // sort by point to identify common nodes
+ ::std::sort(maSNV.begin(), maSNV.end());
+
+ // handle common nodes
+ const sal_uInt32 nNodeCount(maSNV.size());
+
+ for(sal_uInt32 a(0); a < nNodeCount - 1; a++)
+ {
+ // test a before using it, not after. Also use nPointCount instead of aSortNodes.size()
+ PN& rPNb = *(maSNV[a].mpPN);
+
+ for(sal_uInt32 b(a + 1); b < nNodeCount && rPNb.maPoint.equal(maSNV[b].mpPN->maPoint); b++)
+ {
+ impHandleCommon(rPNb, *maSNV[b].mpPN);
+ }
+ }
+ }
+
+ public:
+ solver(const B2DPolygon& rOriginal)
+ : maOriginal(B2DPolyPolygon(rOriginal)),
+ mbIsCurve(false),
+ mbChanged(false)
+ {
+ const sal_uInt32 nOriginalCount(rOriginal.count());
+
+ if(nOriginalCount)
+ {
+ B2DPolygon aGeometry(tools::addPointsAtCutsAndTouches(rOriginal));
+ aGeometry.removeDoublePoints();
+ aGeometry = tools::simplifyCurveSegments(aGeometry);
+ mbIsCurve = aGeometry.areControlPointsUsed();
+
+ const sal_uInt32 nPointCount(aGeometry.count());
+
+ // If it's not a pezier polygon, at least four points are needed to create
+ // a self-intersection. If it's a bezier polygon, the minimum point number
+ // is two, since with a single point You get a curve, but no self-intersection
+ if(nPointCount > 3 || (nPointCount > 1 && mbIsCurve))
+ {
+ // reserve space in point, control and sort vector.
+ maSNV.reserve(nPointCount);
+ maPNV.reserve(nPointCount);
+ maVNV.reserve(mbIsCurve ? nPointCount : 0);
+
+ // fill data
+ impAddPolygon(0, aGeometry);
+
+ // solve common nodes
+ impSolve();
+ }
+ }
+ }
+
+ solver(const B2DPolyPolygon& rOriginal)
+ : maOriginal(rOriginal),
+ mbIsCurve(false),
+ mbChanged(false)
+ {
+ sal_uInt32 nOriginalCount(maOriginal.count());
+
+ if(nOriginalCount)
+ {
+ B2DPolyPolygon aGeometry(tools::addPointsAtCutsAndTouches(maOriginal, true));
+ aGeometry.removeDoublePoints();
+ aGeometry = tools::simplifyCurveSegments(aGeometry);
+ mbIsCurve = aGeometry.areControlPointsUsed();
+ nOriginalCount = aGeometry.count();
+
+ if(nOriginalCount)
+ {
+ sal_uInt32 nPointCount(0);
+ sal_uInt32 a(0);
+
+ // count points
+ for(a = 0; a < nOriginalCount; a++)
+ {
+ const B2DPolygon aCandidate(aGeometry.getB2DPolygon(a));
+ const sal_uInt32 nCandCount(aCandidate.count());
+
+ // If it's not a bezier curve, at least three points would be needed to have a
+ // topological relevant (not empty) polygon. Since its not known here if trivial
+ // edges (dead ends) will be kept or sorted out, add non-bezier polygons with
+ // more than one point.
+ // For bezier curves, the minimum for defining an area is also one.
+ if(nCandCount)
+ {
+ nPointCount += nCandCount;
+ }
+ }
+
+ if(nPointCount)
+ {
+ // reserve space in point, control and sort vector.
+ maSNV.reserve(nPointCount);
+ maPNV.reserve(nPointCount);
+ maVNV.reserve(mbIsCurve ? nPointCount : 0);
+
+ // fill data
+ sal_uInt32 nInsertIndex(0);
+
+ for(a = 0; a < nOriginalCount; a++)
+ {
+ const B2DPolygon aCandidate(aGeometry.getB2DPolygon(a));
+ const sal_uInt32 nCandCount(aCandidate.count());
+
+ // use same condition as above, the data vector is
+ // pre-allocated
+ if(nCandCount)
+ {
+ impAddPolygon(nInsertIndex, aCandidate);
+ nInsertIndex += nCandCount;
+ }
+ }
+
+ // solve common nodes
+ impSolve();
+ }
+ }
+ }
+ }
+
+ B2DPolyPolygon getB2DPolyPolygon()
+ {
+ if(mbChanged)
+ {
+ B2DPolyPolygon aRetval;
+ const sal_uInt32 nCount(maPNV.size());
+ sal_uInt32 nCountdown(nCount);
+
+ for(sal_uInt32 a(0); nCountdown && a < nCount; a++)
+ {
+ PN& rPN = maPNV[a];
+
+ if(SAL_MAX_UINT32 != rPN.mnI)
+ {
+ // unused node, start new part polygon
+ B2DPolygon aNewPart;
+ PN* pPNCurr = &rPN;
+
+ do
+ {
+ const B2DPoint& rPoint = pPNCurr->maPoint;
+ aNewPart.append(rPoint);
+
+ if(mbIsCurve)
+ {
+ const VN& rVNCurr = maVNV[pPNCurr->mnI];
+
+ if(!rVNCurr.maPrev.equalZero())
+ {
+ aNewPart.setPrevControlPoint(aNewPart.count() - 1, rPoint + rVNCurr.maPrev);
+ }
+
+ if(!rVNCurr.maNext.equalZero())
+ {
+ aNewPart.setNextControlPoint(aNewPart.count() - 1, rPoint + rVNCurr.maNext);
+ }
+ }
+
+ pPNCurr->mnI = SAL_MAX_UINT32;
+ nCountdown--;
+ pPNCurr = &(maPNV[pPNCurr->mnIN]);
+ }
+ while(pPNCurr != &rPN && SAL_MAX_UINT32 != pPNCurr->mnI);
+
+ // close and add
+ aNewPart.setClosed(true);
+ aRetval.append(aNewPart);
+ }
+ }
+
+ return aRetval;
+ }
+ else
+ {
+ // no change, return original
+ return maOriginal;
+ }
+ }
+ };
+
+ //////////////////////////////////////////////////////////////////////////////
+
+ } // end of anonymous namespace
+} // end of namespace basegfx
+
+//////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+ namespace tools
+ {
+ //////////////////////////////////////////////////////////////////////////////
+
+ B2DPolyPolygon solveCrossovers(const B2DPolyPolygon& rCandidate)
+ {
+ if(rCandidate.count() > 1L)
+ {
+ solver aSolver(rCandidate);
+ return aSolver.getB2DPolyPolygon();
+ }
+ else
+ {
+ return rCandidate;
+ }
+ }
+
+ //////////////////////////////////////////////////////////////////////////////
+
+ B2DPolyPolygon solveCrossovers(const B2DPolygon& rCandidate)
+ {
+ solver aSolver(rCandidate);
+ return aSolver.getB2DPolyPolygon();
+ }
+
+ //////////////////////////////////////////////////////////////////////////////
+
+ B2DPolyPolygon stripNeutralPolygons(const B2DPolyPolygon& rCandidate)
+ {
+ B2DPolyPolygon aRetval;
+
+ for(sal_uInt32 a(0L); a < rCandidate.count(); a++)
+ {
+ const B2DPolygon aCandidate(rCandidate.getB2DPolygon(a));
+
+ if(ORIENTATION_NEUTRAL != tools::getOrientation(aCandidate))
+ {
+ aRetval.append(aCandidate);
+ }
+ }
+
+ return aRetval;
+ }
+
+ //////////////////////////////////////////////////////////////////////////////
+
+ B2DPolyPolygon stripDispensablePolygons(const B2DPolyPolygon& rCandidate, bool bKeepAboveZero)
+ {
+ const sal_uInt32 nCount(rCandidate.count());
+ B2DPolyPolygon aRetval;
+
+ if(nCount)
+ {
+ if(nCount == 1L)
+ {
+ if(!bKeepAboveZero && ORIENTATION_POSITIVE == tools::getOrientation(rCandidate.getB2DPolygon(0L)))
+ {
+ aRetval = rCandidate;
+ }
+ }
+ else
+ {
+ sal_uInt32 a, b;
+ ::std::vector< StripHelper > aHelpers;
+ aHelpers.resize(nCount);
+
+ for(a = 0L; a < nCount; a++)
+ {
+ const B2DPolygon aCandidate(rCandidate.getB2DPolygon(a));
+ StripHelper* pNewHelper = &(aHelpers[a]);
+ pNewHelper->maRange = tools::getRange(aCandidate);
+ pNewHelper->meOrinetation = tools::getOrientation(aCandidate);
+ pNewHelper->mnDepth = (ORIENTATION_NEGATIVE == pNewHelper->meOrinetation ? -1L : 0L);
+ }
+
+ for(a = 0L; a < nCount - 1L; a++)
+ {
+ const B2DPolygon aCandA(rCandidate.getB2DPolygon(a));
+ StripHelper& rHelperA = aHelpers[a];
+
+ for(b = a + 1L; b < nCount; b++)
+ {
+ const B2DPolygon aCandB(rCandidate.getB2DPolygon(b));
+ StripHelper& rHelperB = aHelpers[b];
+ const bool bAInB(rHelperB.maRange.isInside(rHelperA.maRange) && tools::isInside(aCandB, aCandA, true));
+ const bool bBInA(rHelperA.maRange.isInside(rHelperB.maRange) && tools::isInside(aCandA, aCandB, true));
+
+ if(bAInB && bBInA)
+ {
+ // congruent
+ if(rHelperA.meOrinetation == rHelperB.meOrinetation)
+ {
+ // two polys or two holes. Lower one of them to get one of them out of the way.
+ // Since each will be contained in the other one, both will be increased, too.
+ // So, for lowering, increase only one of them
+ rHelperA.mnDepth++;
+ }
+ else
+ {
+ // poly and hole. They neutralize, so get rid of both. Move securely below zero.
+ rHelperA.mnDepth = -((sal_Int32)nCount);
+ rHelperB.mnDepth = -((sal_Int32)nCount);
+ }
+ }
+ else
+ {
+ if(bAInB)
+ {
+ if(ORIENTATION_NEGATIVE == rHelperB.meOrinetation)
+ {
+ rHelperA.mnDepth--;
+ }
+ else
+ {
+ rHelperA.mnDepth++;
+ }
+ }
+ else if(bBInA)
+ {
+ if(ORIENTATION_NEGATIVE == rHelperA.meOrinetation)
+ {
+ rHelperB.mnDepth--;
+ }
+ else
+ {
+ rHelperB.mnDepth++;
+ }
+ }
+ }
+ }
+ }
+
+ for(a = 0L; a < nCount; a++)
+ {
+ const StripHelper& rHelper = aHelpers[a];
+ bool bAcceptEntry(bKeepAboveZero ? 1L <= rHelper.mnDepth : 0L == rHelper.mnDepth);
+
+ if(bAcceptEntry)
+ {
+ aRetval.append(rCandidate.getB2DPolygon(a));
+ }
+ }
+ }
+ }
+
+ return aRetval;
+ }
+
+ //////////////////////////////////////////////////////////////////////////////
+
+ B2DPolyPolygon prepareForPolygonOperation(const B2DPolygon& rCandidate)
+ {
+ solver aSolver(rCandidate);
+ B2DPolyPolygon aRetval(stripNeutralPolygons(aSolver.getB2DPolyPolygon()));
+
+ return correctOrientations(aRetval);
+ }
+
+ B2DPolyPolygon prepareForPolygonOperation(const B2DPolyPolygon& rCandidate)
+ {
+ solver aSolver(rCandidate);
+ B2DPolyPolygon aRetval(stripNeutralPolygons(aSolver.getB2DPolyPolygon()));
+
+ return correctOrientations(aRetval);
+ }
+
+ B2DPolyPolygon solvePolygonOperationOr(const B2DPolyPolygon& rCandidateA, const B2DPolyPolygon& rCandidateB)
+ {
+ if(!rCandidateA.count())
+ {
+ return rCandidateB;
+ }
+ else if(!rCandidateB.count())
+ {
+ return rCandidateA;
+ }
+ else
+ {
+ // concatenate polygons, solve crossovers and throw away all sub-polygons
+ // which have a depth other than 0.
+ B2DPolyPolygon aRetval(rCandidateA);
+
+ aRetval.append(rCandidateB);
+ aRetval = solveCrossovers(aRetval);
+ aRetval = stripNeutralPolygons(aRetval);
+
+ return stripDispensablePolygons(aRetval, false);
+ }
+ }
+
+ B2DPolyPolygon solvePolygonOperationXor(const B2DPolyPolygon& rCandidateA, const B2DPolyPolygon& rCandidateB)
+ {
+ if(!rCandidateA.count())
+ {
+ return rCandidateB;
+ }
+ else if(!rCandidateB.count())
+ {
+ return rCandidateA;
+ }
+ else
+ {
+ // XOR is pretty simple: By definition it is the simple concatenation of
+ // the single polygons since we imply XOR fill rule. Make it intersection-free
+ // and correct orientations
+ B2DPolyPolygon aRetval(rCandidateA);
+
+ aRetval.append(rCandidateB);
+ aRetval = solveCrossovers(aRetval);
+ aRetval = stripNeutralPolygons(aRetval);
+
+ return correctOrientations(aRetval);
+ }
+ }
+
+ B2DPolyPolygon solvePolygonOperationAnd(const B2DPolyPolygon& rCandidateA, const B2DPolyPolygon& rCandidateB)
+ {
+ if(!rCandidateA.count())
+ {
+ return B2DPolyPolygon();
+ }
+ else if(!rCandidateB.count())
+ {
+ return B2DPolyPolygon();
+ }
+ else
+ {
+ // concatenate polygons, solve crossovers and throw away all sub-polygons
+ // with a depth of < 1. This means to keep all polygons where at least two
+ // polygons do overlap.
+ B2DPolyPolygon aRetval(rCandidateA);
+
+ aRetval.append(rCandidateB);
+ aRetval = solveCrossovers(aRetval);
+ aRetval = stripNeutralPolygons(aRetval);
+
+ return stripDispensablePolygons(aRetval, true);
+ }
+ }
+
+ B2DPolyPolygon solvePolygonOperationDiff(const B2DPolyPolygon& rCandidateA, const B2DPolyPolygon& rCandidateB)
+ {
+ if(!rCandidateA.count())
+ {
+ return B2DPolyPolygon();
+ }
+ else if(!rCandidateB.count())
+ {
+ return rCandidateA;
+ }
+ else
+ {
+ // Make B topologically to holes and append to A
+ B2DPolyPolygon aRetval(rCandidateB);
+
+ aRetval.flip();
+ aRetval.append(rCandidateA);
+
+ // solve crossovers and throw away all sub-polygons which have a
+ // depth other than 0.
+ aRetval = basegfx::tools::solveCrossovers(aRetval);
+ aRetval = basegfx::tools::stripNeutralPolygons(aRetval);
+
+ return basegfx::tools::stripDispensablePolygons(aRetval, false);
+ }
+ }
+
+ B2DPolyPolygon mergeToSinglePolyPolygon(const std::vector< basegfx::B2DPolyPolygon >& rInput)
+ {
+ std::vector< basegfx::B2DPolyPolygon > aInput(rInput);
+
+ // first step: prepareForPolygonOperation and simple merge of non-overlapping
+ // PolyPolygons for speedup; this is possible for the wanted OR-operation
+ if(aInput.size())
+ {
+ std::vector< basegfx::B2DPolyPolygon > aResult;
+ aResult.reserve(aInput.size());
+
+ for(sal_uInt32 a(0); a < aInput.size(); a++)
+ {
+ const basegfx::B2DPolyPolygon aCandidate(prepareForPolygonOperation(aInput[a]));
+
+ if(aResult.size())
+ {
+ const B2DRange aCandidateRange(aCandidate.getB2DRange());
+ bool bCouldMergeSimple(false);
+
+ for(sal_uInt32 b(0); !bCouldMergeSimple && b < aResult.size(); b++)
+ {
+ basegfx::B2DPolyPolygon aTarget(aResult[b]);
+ const B2DRange aTargetRange(aTarget.getB2DRange());
+
+ if(!aCandidateRange.overlaps(aTargetRange))
+ {
+ aTarget.append(aCandidate);
+ aResult[b] = aTarget;
+ bCouldMergeSimple = true;
+ }
+ }
+
+ if(!bCouldMergeSimple)
+ {
+ aResult.push_back(aCandidate);
+ }
+ }
+ else
+ {
+ aResult.push_back(aCandidate);
+ }
+ }
+
+ aInput = aResult;
+ }
+
+ // second step: melt pairwise to a single PolyPolygon
+ while(aInput.size() > 1)
+ {
+ std::vector< basegfx::B2DPolyPolygon > aResult;
+ aResult.reserve((aInput.size() / 2) + 1);
+
+ for(sal_uInt32 a(0); a < aInput.size(); a += 2)
+ {
+ if(a + 1 < aInput.size())
+ {
+ // a pair for processing
+ aResult.push_back(solvePolygonOperationOr(aInput[a], aInput[a + 1]));
+ }
+ else
+ {
+ // last single PolyPolygon; copy to target to not lose it
+ aResult.push_back(aInput[a]);
+ }
+ }
+
+ aInput = aResult;
+ }
+
+ // third step: get result
+ if(1 == aInput.size())
+ {
+ return aInput[0];
+ }
+
+ return B2DPolyPolygon();
+ }
+
+ //////////////////////////////////////////////////////////////////////////////
+
+ } // end of namespace tools
+} // end of namespace basegfx
+
+//////////////////////////////////////////////////////////////////////////////
+// eof
diff --git a/basegfx/source/polygon/b2dpolypolygonrasterconverter.cxx b/basegfx/source/polygon/b2dpolypolygonrasterconverter.cxx
new file mode 100644
index 000000000000..b795c04e158e
--- /dev/null
+++ b/basegfx/source/polygon/b2dpolypolygonrasterconverter.cxx
@@ -0,0 +1,702 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basegfx.hxx"
+
+#include <basegfx/polygon/b2dpolypolygonrasterconverter.hxx>
+
+#include <basegfx/numeric/ftools.hxx>
+#include <basegfx/polygon/b2dpolygon.hxx>
+#include <basegfx/polygon/b2dpolygontools.hxx>
+#include <basegfx/polygon/b2dpolypolygontools.hxx>
+
+#include <boost/mem_fn.hpp>
+
+#include <algorithm>
+
+namespace basegfx
+{
+ class radixSort {
+
+ //! public interface
+ public:
+
+ //! default constructor
+ radixSort( void );
+
+ //! destructor
+ ~radixSort( void );
+
+ bool sort( const float *pInput, sal_uInt32 nNumElements, sal_uInt32 dwStride );
+
+ inline sal_uInt32 *indices( void ) const { return m_indices1; }
+
+ //! private attributes
+ private:
+
+ // current size of index list
+ sal_uInt32 m_current_size;
+
+ // last known size of index list
+ sal_uInt32 m_previous_size;
+
+ // index lists
+ sal_uInt32 *m_indices1;
+ sal_uInt32 *m_indices2;
+
+ sal_uInt32 m_counter[256*4];
+ sal_uInt32 m_offset[256];
+
+ //! private methods
+ private:
+
+ bool resize( sal_uInt32 nNumElements );
+ inline void reset_indices( void );
+ bool prepareCounters( const float *pInput, sal_uInt32 nNumElements, sal_uInt32 dwStride );
+ };
+
+ inline radixSort::radixSort( void ) {
+
+ m_indices1 = NULL;
+ m_indices2 = NULL;
+ m_current_size = 0;
+ m_previous_size = 0;
+
+ reset_indices();
+ }
+
+ inline radixSort::~radixSort( void ) {
+
+ delete [] m_indices2;
+ delete [] m_indices1;
+ }
+
+ bool radixSort::resize( sal_uInt32 nNumElements ) {
+
+ if(nNumElements==m_previous_size)
+ return true;
+
+ if(nNumElements > m_current_size) {
+
+ // release index lists
+ if(m_indices2)
+ delete [] m_indices2;
+ if(m_indices1)
+ delete [] m_indices1;
+
+ // allocate new index lists
+ m_indices1 = new sal_uInt32[nNumElements];
+ m_indices2 = new sal_uInt32[nNumElements];
+
+ // check for out of memory situation
+ if(!m_indices1 || !m_indices2) {
+ delete [] m_indices1;
+ delete [] m_indices2;
+ m_indices1 = NULL;
+ m_indices2 = NULL;
+ m_current_size = 0;
+ return false;
+ }
+
+ m_current_size = nNumElements;
+ }
+
+ m_previous_size = nNumElements;
+
+ // initialize indices
+ reset_indices();
+
+ return true;
+ }
+
+ inline void radixSort::reset_indices( void ) {
+
+ for(sal_uInt32 i=0;i<m_current_size;i++)
+ m_indices1[i] = i;
+ }
+
+ bool radixSort::prepareCounters( const float *pInput, sal_uInt32 nNumElements, sal_uInt32 dwStride ) {
+
+ // clear counters
+ sal_uInt32 *ptr = m_counter;
+ for(int i=0; i<64; ++i)
+ {
+ *ptr++ = 0;
+ *ptr++ = 0;
+ *ptr++ = 0;
+ *ptr++ = 0;
+ *ptr++ = 0;
+ *ptr++ = 0;
+ *ptr++ = 0;
+ *ptr++ = 0;
+ *ptr++ = 0;
+ *ptr++ = 0;
+ *ptr++ = 0;
+ *ptr++ = 0;
+ *ptr++ = 0;
+ *ptr++ = 0;
+ *ptr++ = 0;
+ *ptr++ = 0;
+ }
+
+ // prepare pointers to relevant memory addresses
+ sal_uInt8 *p = (sal_uInt8*)pInput;
+ sal_uInt8 *pe = p+(nNumElements*dwStride);
+ sal_uInt32 *h0= &m_counter[0];
+ sal_uInt32 *h1= &m_counter[256];
+ sal_uInt32 *h2= &m_counter[512];
+ sal_uInt32 *h3= &m_counter[768];
+
+ sal_uInt32 *Indices = m_indices1;
+ float previous_value = *(float *)(((sal_uInt8 *)pInput)+(m_indices1[0]*dwStride));
+ bool bSorted = true;
+ while(p!=pe) {
+ float value = *(float *)(((sal_uInt8 *)pInput)+((*Indices++)*dwStride));
+ if(value<previous_value) {
+ bSorted = false;
+ break;
+ }
+ previous_value = value;
+ h0[*p++]++;
+ h1[*p++]++;
+ h2[*p++]++;
+ h3[*p++]++;
+ p += dwStride-4;
+ }
+ if(bSorted)
+ return true;
+ while(p!=pe) {
+ h0[*p++]++;
+ h1[*p++]++;
+ h2[*p++]++;
+ h3[*p++]++;
+ p += dwStride-4;
+ }
+ return false;
+ }
+
+ bool radixSort::sort( const float *pInput, sal_uInt32 nNumElements, sal_uInt32 dwStride ) {
+
+ if(!(pInput))
+ return false;
+ if(!(nNumElements))
+ return false;
+ if(!(resize(nNumElements)))
+ return false;
+
+ // prepare radix counters, return if already sorted
+ if(prepareCounters(pInput,nNumElements,dwStride))
+ return true;
+
+ // count number of negative values
+ sal_uInt32 num_negatives = 0;
+ sal_uInt32 *h3= &m_counter[768];
+ for(sal_uInt32 i=128;i<256;i++)
+ num_negatives += h3[i];
+
+ // perform passes, one for each byte
+ for(sal_uInt32 j=0;j<4;j++) {
+
+ // ignore this pass if all values have the same byte
+ bool bRun = true;
+ sal_uInt32 *current_counter = &m_counter[j<<8];
+ sal_uInt8 unique_value = *(((sal_uInt8*)pInput)+j);
+ if(current_counter[unique_value]==nNumElements)
+ bRun=false;
+
+ // does the incoming byte contain the sign bit?
+ sal_uInt32 i;
+ if(j!=3) {
+ if(bRun) {
+ m_offset[0] = 0;
+ for(i=1;i<256;i++)
+ m_offset[i] = m_offset[i-1] + current_counter[i-1];
+ sal_uInt8 *InputBytes = (sal_uInt8 *)pInput;
+ sal_uInt32 *Indices = m_indices1;
+ sal_uInt32 *IndicesEnd = &m_indices1[nNumElements];
+ InputBytes += j;
+ while(Indices!=IndicesEnd) {
+ sal_uInt32 id = *Indices++;
+ m_indices2[m_offset[InputBytes[id*dwStride]]++] = id;
+ }
+ sal_uInt32 *Tmp = m_indices1;
+ m_indices1 = m_indices2;
+ m_indices2 = Tmp;
+ }
+ }
+ else {
+ if(bRun) {
+ m_offset[0] = num_negatives;
+ for(i=1;i<128;i++)
+ m_offset[i] = m_offset[i-1] + current_counter[i-1];
+ m_offset[255] = 0;
+ for(i=0;i<127;i++)
+ m_offset[254-i] = m_offset[255-i] + current_counter[255-i];
+ for(i=128;i<256;i++)
+ m_offset[i] += current_counter[i];
+ for(i=0;i<nNumElements;i++) {
+ sal_uInt32 Radix = (*(sal_uInt32 *)(((sal_uInt8 *)pInput)+(m_indices1[i]*dwStride)))>>24;
+ if(Radix<128) m_indices2[m_offset[Radix]++] = m_indices1[i];
+ else m_indices2[--m_offset[Radix]] = m_indices1[i];
+ }
+ sal_uInt32 *Tmp = m_indices1;
+ m_indices1 = m_indices2;
+ m_indices2 = Tmp;
+ }
+ else {
+ if(unique_value>=128) {
+ for(i=0;i<nNumElements;i++)
+ m_indices2[i] = m_indices1[nNumElements-i-1];
+ sal_uInt32 *Tmp = m_indices1;
+ m_indices1 = m_indices2;
+ m_indices2 = Tmp;
+ }
+ }
+ }
+ }
+
+ return true;
+ }
+
+ //************************************************************
+ // Internal vertex storage of B2DPolyPolygonRasterConverter
+ //************************************************************
+
+ inline B2DPolyPolygonRasterConverter::Vertex::Vertex() :
+ aP1(),
+ aP2(),
+ bDownwards( true )
+ {
+ }
+
+ inline B2DPolyPolygonRasterConverter::Vertex::Vertex( const B2DPoint& rP1, const B2DPoint& rP2, bool bDown ) :
+ aP1( rP1 ),
+ aP2( rP2 ),
+ bDownwards( bDown )
+ {
+ }
+
+
+ //************************************************************
+ // Helper class for holding horizontal line segments during raster
+ // conversion
+ //************************************************************
+
+ namespace
+ {
+ class ImplLineNode
+ {
+ public:
+ sal_Int32 mnYCounter;
+ float mfXPos;
+ float mfXDelta;
+ bool mbDownwards;
+
+ public:
+ /**rP1 and rP2 must not have equal y values, when rounded
+ to integer!
+ */
+ ImplLineNode(const B2DPoint& rP1, const B2DPoint& rP2, bool bDown) :
+ mnYCounter( fround(rP2.getY()) - fround(rP1.getY()) ),
+ mfXPos( (float)(rP1.getX()) ),
+ mfXDelta((float) ((rP2.getX() - rP1.getX()) / mnYCounter) ),
+ mbDownwards( bDown )
+ {
+ }
+
+ /// get current x position
+ const float& getXPos() const
+ {
+ return mfXPos;
+ }
+
+ /// returns true, if line ends on this Y value
+ float nextLine()
+ {
+ if(mnYCounter>=0)
+ {
+ // go one step in Y
+ mfXPos += mfXDelta;
+ --mnYCounter;
+ return mfXDelta;
+ }
+
+ return 0.0f;
+ }
+
+ bool isEnded()
+ {
+ return mnYCounter<=0;
+ }
+
+ bool isDownwards()
+ {
+ return mbDownwards;
+ }
+ };
+ }
+
+ typedef ::std::vector<ImplLineNode> VectorOfLineNodes;
+
+
+ //************************************************************
+ // Base2D PolyPolygon Raster Converter (Rasterizer)
+ //************************************************************
+
+ namespace
+ {
+ struct VertexComparator
+ {
+ bool operator()( const B2DPolyPolygonRasterConverter::Vertex& rLHS,
+ const B2DPolyPolygonRasterConverter::Vertex& rRHS )
+ {
+ return rLHS.aP1.getX() < rRHS.aP1.getX();
+ }
+ };
+ }
+
+ void B2DPolyPolygonRasterConverter::init()
+ {
+ if(!maPolyPolyRectangle.isEmpty())
+ {
+ const sal_Int32 nMinY( fround(maPolyPolyRectangle.getMinY()) );
+ const sal_Int32 nScanlines(fround(maPolyPolyRectangle.getMaxY()) - nMinY);
+
+ maScanlines.resize( nScanlines+1 );
+
+ // add all polygons
+ for( sal_uInt32 i(0), nCount(maPolyPolygon.count());
+ i < nCount;
+ ++i )
+ {
+ // add all vertices
+ const B2DPolygon& rPoly( maPolyPolygon.getB2DPolygon(i) );
+ for( sal_uInt32 k(0), nVertices(rPoly.count());
+ k<nVertices;
+ ++k )
+ {
+ const B2DPoint& rP1( rPoly.getB2DPoint(k) );
+ const B2DPoint& rP2( rPoly.getB2DPoint( (k + 1) % nVertices ) );
+
+ const sal_Int32 nVertexYP1( fround(rP1.getY()) );
+ const sal_Int32 nVertexYP2( fround(rP2.getY()) );
+
+ // insert only vertices which are not strictly
+ // horizontal. Note that the ImplLineNode relies on
+ // this.
+ if(nVertexYP1 != nVertexYP2)
+ {
+ if( nVertexYP2 < nVertexYP1 )
+ {
+ const sal_Int32 nStartScanline(nVertexYP2 - nMinY);
+
+ // swap edges
+ maScanlines[ nStartScanline ].push_back( Vertex(rP2, rP1, false) );
+ }
+ else
+ {
+ const sal_Int32 nStartScanline(nVertexYP1 - nMinY);
+
+ maScanlines[ nStartScanline ].push_back( Vertex(rP1, rP2, true) );
+ }
+ }
+ }
+ }
+
+ // now sort all scanlines, with increasing x coordinates
+ VectorOfVertexVectors::iterator aIter( maScanlines.begin() );
+ VectorOfVertexVectors::iterator aEnd( maScanlines.end() );
+ while( aIter != aEnd )
+ {
+ ::std::sort( aIter->begin(),
+ aIter->end(),
+ VertexComparator() );
+ ++aIter;
+ }
+ }
+ }
+
+ B2DPolyPolygonRasterConverter::B2DPolyPolygonRasterConverter( const B2DPolyPolygon& rPolyPoly ) :
+ maPolyPolygon( rPolyPoly ),
+ maPolyPolyRectangle( tools::getRange( rPolyPoly ) ),
+ maScanlines()
+ {
+ init();
+ }
+
+ namespace
+ {
+ B2DRectangle getCombinedBounds( const B2DPolyPolygon& rPolyPolyRaster,
+ const B2DRectangle& rRasterArea )
+ {
+ B2DRectangle aRect( tools::getRange( rPolyPolyRaster ) );
+ aRect.expand( rRasterArea );
+
+ return aRect;
+ }
+ }
+
+ B2DPolyPolygonRasterConverter::B2DPolyPolygonRasterConverter( const B2DPolyPolygon& rPolyPolyRaster,
+ const B2DRectangle& rRasterArea ) :
+ maPolyPolygon( rPolyPolyRaster ),
+ maPolyPolyRectangle(
+ getCombinedBounds( rPolyPolyRaster,
+ rRasterArea ) ),
+ maScanlines()
+ {
+ init();
+ }
+
+ B2DPolyPolygonRasterConverter::~B2DPolyPolygonRasterConverter()
+ {
+ }
+
+ namespace
+ {
+ class LineNodeGenerator
+ {
+ public:
+ LineNodeGenerator( VectorOfLineNodes& rActiveVertices ) :
+ mrActiveVertices( rActiveVertices )
+ {
+ }
+
+ void operator()( const B2DPolyPolygonRasterConverter::Vertex& rVertex )
+ {
+ mrActiveVertices.push_back( ImplLineNode(rVertex.aP1,
+ rVertex.aP2,
+ rVertex.bDownwards) );
+ }
+
+ private:
+ VectorOfLineNodes& mrActiveVertices;
+ };
+
+ struct LineNodeComparator
+ {
+ bool operator()( const ImplLineNode& rLHS, const ImplLineNode& rRHS )
+ {
+ return rLHS.getXPos() < rRHS.getXPos();
+ }
+ };
+ }
+
+ void B2DPolyPolygonRasterConverter::rasterConvert( FillRule eFillRule )
+ {
+ if( maScanlines.empty() )
+ return; // no scanlines at all -> bail out
+
+ const sal_Int32 nMinY( fround(maPolyPolyRectangle.getMinY()) );
+ const sal_Int32 nScanlines(fround(maPolyPolyRectangle.getMaxY()) - nMinY);
+
+ // Vector of currently active vertices. A vertex is active, if
+ // it crosses or touches the current scanline.
+ VectorOfLineNodes aActiveVertices;
+
+ // mickey's optimized version...
+ radixSort rs;
+ std::size_t nb(0);
+ std::size_t nb_previous(0);
+ bool bSort(false);
+
+ // process each scanline
+ for( sal_Int32 y(0); y <= nScanlines; ++y )
+ {
+ // add vertices which start at current scanline into
+ // active vertex vector
+ ::std::for_each( maScanlines[y].begin(),
+ maScanlines[y].end(),
+ LineNodeGenerator( aActiveVertices ) );
+ nb = aActiveVertices.size();
+ if(nb != nb_previous)
+ {
+ nb_previous = nb;
+ bSort = true;
+ }
+
+ // sort with increasing X
+ if(bSort)
+ {
+ bSort = false;
+
+ if( nb )
+ {
+ rs.sort(&aActiveVertices[0].mfXPos,
+ nb,
+ sizeof(ImplLineNode));
+ }
+ }
+
+ const std::size_t nLen( nb );
+ if( !nLen )
+ {
+ // empty scanline - call derived with an 'off' span
+ // for the full width
+ span( maPolyPolyRectangle.getMinX(),
+ maPolyPolyRectangle.getMaxX(),
+ nMinY + y,
+ false );
+ }
+ else
+ {
+ const sal_Int32 nCurrY( nMinY + y );
+
+ // scanline not empty - forward all scans to derived,
+ // according to selected fill rule
+
+ // TODO(P1): Maybe allow these 'off' span calls to be
+ // switched off (or all 'on' span calls, depending on
+ // use case scenario)
+
+ // sorting didn't change the order of the elements
+ // in memory but prepared a list of indices in sorted order.
+ // thus we now process the nodes with an additional indirection.
+ sal_uInt32 *sorted = rs.indices();
+
+ // call derived with 'off' span for everything left of first active span
+ if( aActiveVertices[sorted[0]].getXPos() > maPolyPolyRectangle.getMinX() )
+ {
+ span( maPolyPolyRectangle.getMinX(),
+ aActiveVertices[sorted[0]].getXPos(),
+ nCurrY,
+ false );
+ }
+
+ switch( eFillRule )
+ {
+ default:
+ OSL_ENSURE(false,
+ "B2DPolyPolygonRasterConverter::rasterConvert(): Unexpected fill rule");
+ return;
+
+ case FillRule_EVEN_ODD:
+ // process each span in current scanline, with
+ // even-odd fill rule
+ for( ::std::size_t i(0), nLength(aActiveVertices.size());
+ i+1 < nLength;
+ ++i )
+ {
+ sal_uInt32 nIndex = sorted[i];
+ sal_uInt32 nNextIndex = sorted[i+1];
+ span( aActiveVertices[nIndex].getXPos(),
+ aActiveVertices[nNextIndex].getXPos(),
+ nCurrY,
+ i % 2 == 0 );
+
+ float delta = aActiveVertices[nIndex].nextLine();
+ if(delta > 0.0f)
+ {
+ if(aActiveVertices[nIndex].getXPos() > aActiveVertices[nNextIndex].getXPos())
+ bSort = true;
+ }
+ else if(delta < 0.0f)
+ {
+ if(i)
+ {
+ sal_uInt32 nPrevIndex = sorted[i-1];
+ if(aActiveVertices[nIndex].getXPos() < aActiveVertices[nPrevIndex].getXPos())
+ bSort = true;
+ }
+ }
+ }
+ break;
+
+ case FillRule_NONZERO_WINDING_NUMBER:
+ // process each span in current scanline, with
+ // non-zero winding numbe fill rule
+ sal_Int32 nWindingNumber(0);
+ for( ::std::size_t i(0), nLength(aActiveVertices.size());
+ i+1 < nLength;
+ ++i )
+ {
+ sal_uInt32 nIndex = sorted[i];
+ sal_uInt32 nNextIndex = sorted[i+1];
+ nWindingNumber += -1 + 2*aActiveVertices[nIndex].isDownwards();
+
+ span( aActiveVertices[nIndex].getXPos(),
+ aActiveVertices[nNextIndex].getXPos(),
+ nCurrY,
+ nWindingNumber != 0 );
+
+ float delta = aActiveVertices[nIndex].nextLine();
+ if(delta > 0.0f)
+ {
+ if(aActiveVertices[nIndex].getXPos() > aActiveVertices[nNextIndex].getXPos())
+ bSort = true;
+ }
+ else if(delta < 0.0f)
+ {
+ if(i)
+ {
+ sal_uInt32 nPrevIndex = sorted[i-1];
+ if(aActiveVertices[nIndex].getXPos() < aActiveVertices[nPrevIndex].getXPos())
+ bSort = true;
+ }
+ }
+ }
+ break;
+ }
+
+ // call derived with 'off' span for everything right of last active span
+ if( aActiveVertices[sorted[nb-1]].getXPos()+1.0 < maPolyPolyRectangle.getMaxX() )
+ {
+ span( aActiveVertices[sorted[nb-1]].getXPos()+1.0,
+ maPolyPolyRectangle.getMaxX(),
+ nCurrY,
+ false );
+ }
+
+ // also call nextLine on very last line node
+ sal_uInt32 nIndex = sorted[nb-1];
+ float delta = aActiveVertices[nIndex].nextLine();
+ if(delta < 0.0f)
+ {
+ if(nb)
+ {
+ sal_uInt32 nPrevIndex = sorted[nb-2];
+ if(aActiveVertices[nIndex].getXPos() < aActiveVertices[nPrevIndex].getXPos())
+ bSort = true;
+ }
+ }
+ }
+
+ // remove line nodes which have ended on the current scanline
+ aActiveVertices.erase( ::std::remove_if( aActiveVertices.begin(),
+ aActiveVertices.end(),
+ ::boost::mem_fn( &ImplLineNode::isEnded ) ),
+ aActiveVertices.end() );
+ nb = aActiveVertices.size();
+ if(nb != nb_previous)
+ {
+ nb_previous = nb;
+ bSort = true;
+ }
+ }
+ }
+}
+// eof
diff --git a/basegfx/source/polygon/b2dpolypolygontools.cxx b/basegfx/source/polygon/b2dpolypolygontools.cxx
new file mode 100644
index 000000000000..dcfa34f93c02
--- /dev/null
+++ b/basegfx/source/polygon/b2dpolypolygontools.cxx
@@ -0,0 +1,585 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basegfx.hxx"
+#include <basegfx/polygon/b2dpolypolygontools.hxx>
+#include <osl/diagnose.h>
+#include <basegfx/polygon/b2dpolypolygon.hxx>
+#include <basegfx/polygon/b2dpolygon.hxx>
+#include <basegfx/polygon/b2dpolygontools.hxx>
+#include <basegfx/numeric/ftools.hxx>
+#include <basegfx/polygon/b2dpolypolygoncutter.hxx>
+
+#include <numeric>
+
+//////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+ namespace tools
+ {
+ B2DPolyPolygon correctOrientations(const B2DPolyPolygon& rCandidate)
+ {
+ B2DPolyPolygon aRetval(rCandidate);
+ const sal_uInt32 nCount(aRetval.count());
+
+ for(sal_uInt32 a(0L); a < nCount; a++)
+ {
+ const B2DPolygon aCandidate(rCandidate.getB2DPolygon(a));
+ const B2VectorOrientation aOrientation(tools::getOrientation(aCandidate));
+ sal_uInt32 nDepth(0L);
+
+ for(sal_uInt32 b(0L); b < nCount; b++)
+ {
+ if(b != a)
+ {
+ const B2DPolygon aCompare(rCandidate.getB2DPolygon(b));
+
+ if(tools::isInside(aCompare, aCandidate, true))
+ {
+ nDepth++;
+ }
+ }
+ }
+
+ const bool bShallBeHole(1L == (nDepth & 0x00000001));
+ const bool bIsHole(ORIENTATION_NEGATIVE == aOrientation);
+
+ if(bShallBeHole != bIsHole && ORIENTATION_NEUTRAL != aOrientation)
+ {
+ B2DPolygon aFlipped(aCandidate);
+ aFlipped.flip();
+ aRetval.setB2DPolygon(a, aFlipped);
+ }
+ }
+
+ return aRetval;
+ }
+
+ B2DPolyPolygon correctOutmostPolygon(const B2DPolyPolygon& rCandidate)
+ {
+ const sal_uInt32 nCount(rCandidate.count());
+
+ if(nCount > 1L)
+ {
+ for(sal_uInt32 a(0L); a < nCount; a++)
+ {
+ const B2DPolygon aCandidate(rCandidate.getB2DPolygon(a));
+ sal_uInt32 nDepth(0L);
+
+ for(sal_uInt32 b(0L); b < nCount; b++)
+ {
+ if(b != a)
+ {
+ const B2DPolygon aCompare(rCandidate.getB2DPolygon(b));
+
+ if(tools::isInside(aCompare, aCandidate, true))
+ {
+ nDepth++;
+ }
+ }
+ }
+
+ if(!nDepth)
+ {
+ B2DPolyPolygon aRetval(rCandidate);
+
+ if(a != 0L)
+ {
+ // exchange polygon a and polygon 0L
+ aRetval.setB2DPolygon(0L, aCandidate);
+ aRetval.setB2DPolygon(a, rCandidate.getB2DPolygon(0L));
+ }
+
+ // exit
+ return aRetval;
+ }
+ }
+ }
+
+ return rCandidate;
+ }
+
+ B2DPolyPolygon adaptiveSubdivideByDistance(const B2DPolyPolygon& rCandidate, double fDistanceBound)
+ {
+ if(rCandidate.areControlPointsUsed())
+ {
+ const sal_uInt32 nPolygonCount(rCandidate.count());
+ B2DPolyPolygon aRetval;
+
+ for(sal_uInt32 a(0L); a < nPolygonCount; a++)
+ {
+ const B2DPolygon aCandidate(rCandidate.getB2DPolygon(a));
+
+ if(aCandidate.areControlPointsUsed())
+ {
+ aRetval.append(tools::adaptiveSubdivideByDistance(aCandidate, fDistanceBound));
+ }
+ else
+ {
+ aRetval.append(aCandidate);
+ }
+ }
+
+ return aRetval;
+ }
+ else
+ {
+ return rCandidate;
+ }
+ }
+
+ B2DPolyPolygon adaptiveSubdivideByAngle(const B2DPolyPolygon& rCandidate, double fAngleBound)
+ {
+ if(rCandidate.areControlPointsUsed())
+ {
+ const sal_uInt32 nPolygonCount(rCandidate.count());
+ B2DPolyPolygon aRetval;
+
+ for(sal_uInt32 a(0L); a < nPolygonCount; a++)
+ {
+ const B2DPolygon aCandidate(rCandidate.getB2DPolygon(a));
+
+ if(aCandidate.areControlPointsUsed())
+ {
+ aRetval.append(tools::adaptiveSubdivideByAngle(aCandidate, fAngleBound));
+ }
+ else
+ {
+ aRetval.append(aCandidate);
+ }
+ }
+
+ return aRetval;
+ }
+ else
+ {
+ return rCandidate;
+ }
+ }
+
+ B2DPolyPolygon adaptiveSubdivideByCount(const B2DPolyPolygon& rCandidate, sal_uInt32 nCount)
+ {
+ if(rCandidate.areControlPointsUsed())
+ {
+ const sal_uInt32 nPolygonCount(rCandidate.count());
+ B2DPolyPolygon aRetval;
+
+ for(sal_uInt32 a(0L); a < nPolygonCount; a++)
+ {
+ const B2DPolygon aCandidate(rCandidate.getB2DPolygon(a));
+
+ if(aCandidate.areControlPointsUsed())
+ {
+ aRetval.append(tools::adaptiveSubdivideByCount(aCandidate, nCount));
+ }
+ else
+ {
+ aRetval.append(aCandidate);
+ }
+ }
+
+ return aRetval;
+ }
+ else
+ {
+ return rCandidate;
+ }
+ }
+
+ bool isInside(const B2DPolyPolygon& rCandidate, const B2DPoint& rPoint, bool bWithBorder)
+ {
+ const sal_uInt32 nPolygonCount(rCandidate.count());
+
+ if(1L == nPolygonCount)
+ {
+ return isInside(rCandidate.getB2DPolygon(0L), rPoint, bWithBorder);
+ }
+ else
+ {
+ sal_Int32 nInsideCount(0L);
+
+ for(sal_uInt32 a(0L); a < nPolygonCount; a++)
+ {
+ const B2DPolygon aPolygon(rCandidate.getB2DPolygon(a));
+ const bool bInside(isInside(aPolygon, rPoint, bWithBorder));
+
+ if(bInside)
+ {
+ nInsideCount++;
+ }
+ }
+
+ return (nInsideCount % 2L);
+ }
+ }
+
+ B2DRange getRangeWithControlPoints(const B2DPolyPolygon& rCandidate)
+ {
+ B2DRange aRetval;
+ const sal_uInt32 nPolygonCount(rCandidate.count());
+
+ for(sal_uInt32 a(0L); a < nPolygonCount; a++)
+ {
+ B2DPolygon aCandidate = rCandidate.getB2DPolygon(a);
+ aRetval.expand(tools::getRangeWithControlPoints(aCandidate));
+ }
+
+ return aRetval;
+ }
+
+ B2DRange getRange(const B2DPolyPolygon& rCandidate)
+ {
+ B2DRange aRetval;
+ const sal_uInt32 nPolygonCount(rCandidate.count());
+
+ for(sal_uInt32 a(0L); a < nPolygonCount; a++)
+ {
+ B2DPolygon aCandidate = rCandidate.getB2DPolygon(a);
+ aRetval.expand(tools::getRange(aCandidate));
+ }
+
+ return aRetval;
+ }
+
+ void applyLineDashing(const B2DPolyPolygon& rCandidate, const ::std::vector<double>& rDotDashArray, B2DPolyPolygon* pLineTarget, B2DPolyPolygon* pGapTarget, double fFullDashDotLen)
+ {
+ if(0.0 == fFullDashDotLen && rDotDashArray.size())
+ {
+ // calculate fFullDashDotLen from rDotDashArray
+ fFullDashDotLen = ::std::accumulate(rDotDashArray.begin(), rDotDashArray.end(), 0.0);
+ }
+
+ if(rCandidate.count() && fFullDashDotLen > 0.0)
+ {
+ B2DPolyPolygon aLineTarget, aGapTarget;
+
+ for(sal_uInt32 a(0L); a < rCandidate.count(); a++)
+ {
+ const B2DPolygon aCandidate(rCandidate.getB2DPolygon(a));
+
+ applyLineDashing(
+ aCandidate,
+ rDotDashArray,
+ pLineTarget ? &aLineTarget : 0,
+ pGapTarget ? &aGapTarget : 0,
+ fFullDashDotLen);
+
+ if(pLineTarget)
+ {
+ pLineTarget->append(aLineTarget);
+ }
+
+ if(pGapTarget)
+ {
+ pGapTarget->append(aGapTarget);
+ }
+ }
+ }
+ }
+
+ bool isInEpsilonRange(const B2DPolyPolygon& rCandidate, const B2DPoint& rTestPosition, double fDistance)
+ {
+ const sal_uInt32 nPolygonCount(rCandidate.count());
+
+ for(sal_uInt32 a(0L); a < nPolygonCount; a++)
+ {
+ B2DPolygon aCandidate(rCandidate.getB2DPolygon(a));
+
+ if(isInEpsilonRange(aCandidate, rTestPosition, fDistance))
+ {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ B3DPolyPolygon createB3DPolyPolygonFromB2DPolyPolygon(const B2DPolyPolygon& rCandidate, double fZCoordinate)
+ {
+ const sal_uInt32 nPolygonCount(rCandidate.count());
+ B3DPolyPolygon aRetval;
+
+ for(sal_uInt32 a(0L); a < nPolygonCount; a++)
+ {
+ B2DPolygon aCandidate(rCandidate.getB2DPolygon(a));
+
+ aRetval.append(createB3DPolygonFromB2DPolygon(aCandidate, fZCoordinate));
+ }
+
+ return aRetval;
+ }
+
+ B2DPolyPolygon createB2DPolyPolygonFromB3DPolyPolygon(const B3DPolyPolygon& rCandidate, const B3DHomMatrix& rMat)
+ {
+ const sal_uInt32 nPolygonCount(rCandidate.count());
+ B2DPolyPolygon aRetval;
+
+ for(sal_uInt32 a(0L); a < nPolygonCount; a++)
+ {
+ B3DPolygon aCandidate(rCandidate.getB3DPolygon(a));
+
+ aRetval.append(createB2DPolygonFromB3DPolygon(aCandidate, rMat));
+ }
+
+ return aRetval;
+ }
+
+ double getSmallestDistancePointToPolyPolygon(const B2DPolyPolygon& rCandidate, const B2DPoint& rTestPoint, sal_uInt32& rPolygonIndex, sal_uInt32& rEdgeIndex, double& rCut)
+ {
+ double fRetval(DBL_MAX);
+ const double fZero(0.0);
+ const sal_uInt32 nPolygonCount(rCandidate.count());
+
+ for(sal_uInt32 a(0L); a < nPolygonCount; a++)
+ {
+ const B2DPolygon aCandidate(rCandidate.getB2DPolygon(a));
+ sal_uInt32 nNewEdgeIndex;
+ double fNewCut;
+ const double fNewDistance(getSmallestDistancePointToPolygon(aCandidate, rTestPoint, nNewEdgeIndex, fNewCut));
+
+ if(DBL_MAX == fRetval || fNewDistance < fRetval)
+ {
+ fRetval = fNewDistance;
+ rPolygonIndex = a;
+ rEdgeIndex = nNewEdgeIndex;
+ rCut = fNewCut;
+
+ if(fTools::equal(fRetval, fZero))
+ {
+ // already found zero distance, cannot get better. Ensure numerical zero value and end loop.
+ fRetval = 0.0;
+ break;
+ }
+ }
+ }
+
+ return fRetval;
+ }
+
+ B2DPolyPolygon distort(const B2DPolyPolygon& rCandidate, const B2DRange& rOriginal, const B2DPoint& rTopLeft, const B2DPoint& rTopRight, const B2DPoint& rBottomLeft, const B2DPoint& rBottomRight)
+ {
+ const sal_uInt32 nPolygonCount(rCandidate.count());
+ B2DPolyPolygon aRetval;
+
+ for(sal_uInt32 a(0L); a < nPolygonCount; a++)
+ {
+ const B2DPolygon aCandidate(rCandidate.getB2DPolygon(a));
+
+ aRetval.append(distort(aCandidate, rOriginal, rTopLeft, rTopRight, rBottomLeft, rBottomRight));
+ }
+
+ return aRetval;
+ }
+
+ B2DPolyPolygon rotateAroundPoint(const B2DPolyPolygon& rCandidate, const B2DPoint& rCenter, double fAngle)
+ {
+ const sal_uInt32 nPolygonCount(rCandidate.count());
+ B2DPolyPolygon aRetval;
+
+ for(sal_uInt32 a(0L); a < nPolygonCount; a++)
+ {
+ const B2DPolygon aCandidate(rCandidate.getB2DPolygon(a));
+
+ aRetval.append(rotateAroundPoint(aCandidate, rCenter, fAngle));
+ }
+
+ return aRetval;
+ }
+
+ B2DPolyPolygon expandToCurve(const B2DPolyPolygon& rCandidate)
+ {
+ const sal_uInt32 nPolygonCount(rCandidate.count());
+ B2DPolyPolygon aRetval;
+
+ for(sal_uInt32 a(0L); a < nPolygonCount; a++)
+ {
+ const B2DPolygon aCandidate(rCandidate.getB2DPolygon(a));
+
+ aRetval.append(expandToCurve(aCandidate));
+ }
+
+ return aRetval;
+ }
+
+ B2DPolyPolygon setContinuity(const B2DPolyPolygon& rCandidate, B2VectorContinuity eContinuity)
+ {
+ if(rCandidate.areControlPointsUsed())
+ {
+ const sal_uInt32 nPolygonCount(rCandidate.count());
+ B2DPolyPolygon aRetval;
+
+ for(sal_uInt32 a(0L); a < nPolygonCount; a++)
+ {
+ const B2DPolygon aCandidate(rCandidate.getB2DPolygon(a));
+
+ aRetval.append(setContinuity(aCandidate, eContinuity));
+ }
+
+ return aRetval;
+ }
+ else
+ {
+ return rCandidate;
+ }
+ }
+
+ B2DPolyPolygon growInNormalDirection(const B2DPolyPolygon& rCandidate, double fValue)
+ {
+ if(0.0 != fValue)
+ {
+ B2DPolyPolygon aRetval;
+
+ for(sal_uInt32 a(0L); a < rCandidate.count(); a++)
+ {
+ aRetval.append(growInNormalDirection(rCandidate.getB2DPolygon(a), fValue));
+ }
+
+ return aRetval;
+ }
+ else
+ {
+ return rCandidate;
+ }
+ }
+
+ void correctGrowShrinkPolygonPair(B2DPolyPolygon& /*rOriginal*/, B2DPolyPolygon& /*rGrown*/)
+ {
+ }
+
+ B2DPolyPolygon reSegmentPolyPolygon(const B2DPolyPolygon& rCandidate, sal_uInt32 nSegments)
+ {
+ B2DPolyPolygon aRetval;
+
+ for(sal_uInt32 a(0L); a < rCandidate.count(); a++)
+ {
+ aRetval.append(reSegmentPolygon(rCandidate.getB2DPolygon(a), nSegments));
+ }
+
+ return aRetval;
+ }
+
+ B2DPolyPolygon interpolate(const B2DPolyPolygon& rOld1, const B2DPolyPolygon& rOld2, double t)
+ {
+ OSL_ENSURE(rOld1.count() == rOld2.count(), "B2DPolyPolygon interpolate: Different geometry (!)");
+ B2DPolyPolygon aRetval;
+
+ for(sal_uInt32 a(0L); a < rOld1.count(); a++)
+ {
+ aRetval.append(interpolate(rOld1.getB2DPolygon(a), rOld2.getB2DPolygon(a), t));
+ }
+
+ return aRetval;
+ }
+
+ bool isRectangle( const B2DPolyPolygon& rPoly )
+ {
+ // exclude some cheap cases first
+ if( rPoly.count() != 1 )
+ return false;
+
+ return isRectangle( rPoly.getB2DPolygon(0) );
+ }
+
+ // #i76891#
+ B2DPolyPolygon simplifyCurveSegments(const B2DPolyPolygon& rCandidate)
+ {
+ if(rCandidate.areControlPointsUsed())
+ {
+ B2DPolyPolygon aRetval;
+
+ for(sal_uInt32 a(0L); a < rCandidate.count(); a++)
+ {
+ aRetval.append(simplifyCurveSegments(rCandidate.getB2DPolygon(a)));
+ }
+
+ return aRetval;
+ }
+ else
+ {
+ return rCandidate;
+ }
+ }
+
+ B2DPolyPolygon reSegmentPolyPolygonEdges(const B2DPolyPolygon& rCandidate, sal_uInt32 nSubEdges, bool bHandleCurvedEdges, bool bHandleStraightEdges)
+ {
+ B2DPolyPolygon aRetval;
+
+ for(sal_uInt32 a(0L); a < rCandidate.count(); a++)
+ {
+ aRetval.append(reSegmentPolygonEdges(rCandidate.getB2DPolygon(a), nSubEdges, bHandleCurvedEdges, bHandleStraightEdges));
+ }
+
+ return aRetval;
+ }
+
+ //////////////////////////////////////////////////////////////////////
+ // comparators with tolerance for 2D PolyPolygons
+
+ bool equal(const B2DPolyPolygon& rCandidateA, const B2DPolyPolygon& rCandidateB, const double& rfSmallValue)
+ {
+ const sal_uInt32 nPolygonCount(rCandidateA.count());
+
+ if(nPolygonCount != rCandidateB.count())
+ return false;
+
+ for(sal_uInt32 a(0); a < nPolygonCount; a++)
+ {
+ const B2DPolygon aCandidate(rCandidateA.getB2DPolygon(a));
+
+ if(!equal(aCandidate, rCandidateB.getB2DPolygon(a), rfSmallValue))
+ return false;
+ }
+
+ return true;
+ }
+
+ bool equal(const B2DPolyPolygon& rCandidateA, const B2DPolyPolygon& rCandidateB)
+ {
+ const double fSmallValue(fTools::getSmallValue());
+
+ return equal(rCandidateA, rCandidateB, fSmallValue);
+ }
+
+ B2DPolyPolygon snapPointsOfHorizontalOrVerticalEdges(const B2DPolyPolygon& rCandidate)
+ {
+ B2DPolyPolygon aRetval;
+
+ for(sal_uInt32 a(0L); a < rCandidate.count(); a++)
+ {
+ aRetval.append(snapPointsOfHorizontalOrVerticalEdges(rCandidate.getB2DPolygon(a)));
+ }
+
+ return aRetval;
+ }
+
+ } // end of namespace tools
+} // end of namespace basegfx
+
+//////////////////////////////////////////////////////////////////////////////
+// eof
diff --git a/basegfx/source/polygon/b2dsvgpolypolygon.cxx b/basegfx/source/polygon/b2dsvgpolypolygon.cxx
new file mode 100644
index 000000000000..d2815337edaf
--- /dev/null
+++ b/basegfx/source/polygon/b2dsvgpolypolygon.cxx
@@ -0,0 +1,1108 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basegfx.hxx"
+
+#include <basegfx/polygon/b2dpolygontools.hxx>
+#include <basegfx/polygon/b2dpolypolygontools.hxx>
+#include <basegfx/polygon/b2dpolygontools.hxx>
+#include <basegfx/polygon/b2dpolypolygon.hxx>
+#include <basegfx/matrix/b2dhommatrix.hxx>
+#include <basegfx/matrix/b2dhommatrixtools.hxx>
+#include <rtl/ustring.hxx>
+#include <rtl/math.hxx>
+
+namespace basegfx
+{
+ namespace tools
+ {
+ namespace
+ {
+ void lcl_skipSpaces(sal_Int32& io_rPos,
+ const ::rtl::OUString& rStr,
+ const sal_Int32 nLen)
+ {
+ while( io_rPos < nLen &&
+ sal_Unicode(' ') == rStr[io_rPos] )
+ {
+ ++io_rPos;
+ }
+ }
+
+ void lcl_skipSpacesAndCommas(sal_Int32& io_rPos,
+ const ::rtl::OUString& rStr,
+ const sal_Int32 nLen)
+ {
+ while(io_rPos < nLen
+ && (sal_Unicode(' ') == rStr[io_rPos] || sal_Unicode(',') == rStr[io_rPos]))
+ {
+ ++io_rPos;
+ }
+ }
+
+ inline bool lcl_isOnNumberChar(const sal_Unicode aChar, bool bSignAllowed = true)
+ {
+ const bool bPredicate( (sal_Unicode('0') <= aChar && sal_Unicode('9') >= aChar)
+ || (bSignAllowed && sal_Unicode('+') == aChar)
+ || (bSignAllowed && sal_Unicode('-') == aChar) );
+
+ return bPredicate;
+ }
+
+ inline bool lcl_isOnNumberChar(const ::rtl::OUString& rStr, const sal_Int32 nPos, bool bSignAllowed = true)
+ {
+ return lcl_isOnNumberChar(rStr[nPos],
+ bSignAllowed);
+ }
+
+ bool lcl_getDoubleChar(double& o_fRetval,
+ sal_Int32& io_rPos,
+ const ::rtl::OUString& rStr,
+ const sal_Int32 /*nLen*/)
+ {
+ sal_Unicode aChar( rStr[io_rPos] );
+ ::rtl::OUStringBuffer sNumberString;
+
+ if(sal_Unicode('+') == aChar || sal_Unicode('-') == aChar)
+ {
+ sNumberString.append(rStr[io_rPos]);
+ aChar = rStr[++io_rPos];
+ }
+
+ while((sal_Unicode('0') <= aChar && sal_Unicode('9') >= aChar)
+ || sal_Unicode('.') == aChar)
+ {
+ sNumberString.append(rStr[io_rPos]);
+ aChar = rStr[++io_rPos];
+ }
+
+ if(sal_Unicode('e') == aChar || sal_Unicode('E') == aChar)
+ {
+ sNumberString.append(rStr[io_rPos]);
+ aChar = rStr[++io_rPos];
+
+ if(sal_Unicode('+') == aChar || sal_Unicode('-') == aChar)
+ {
+ sNumberString.append(rStr[io_rPos]);
+ aChar = rStr[++io_rPos];
+ }
+
+ while(sal_Unicode('0') <= aChar && sal_Unicode('9') >= aChar)
+ {
+ sNumberString.append(rStr[io_rPos]);
+ aChar = rStr[++io_rPos];
+ }
+ }
+
+ if(sNumberString.getLength())
+ {
+ rtl_math_ConversionStatus eStatus;
+ o_fRetval = ::rtl::math::stringToDouble( sNumberString.makeStringAndClear(),
+ (sal_Unicode)('.'),
+ (sal_Unicode)(','),
+ &eStatus,
+ NULL );
+ return ( eStatus == rtl_math_ConversionStatus_Ok );
+ }
+
+ return false;
+ }
+
+ bool lcl_importDoubleAndSpaces( double& o_fRetval,
+ sal_Int32& io_rPos,
+ const ::rtl::OUString& rStr,
+ const sal_Int32 nLen )
+ {
+ if( !lcl_getDoubleChar(o_fRetval, io_rPos, rStr, nLen) )
+ return false;
+
+ lcl_skipSpacesAndCommas(io_rPos, rStr, nLen);
+
+ return true;
+ }
+
+ bool lcl_importNumberAndSpaces(sal_Int32& o_nRetval,
+ sal_Int32& io_rPos,
+ const ::rtl::OUString& rStr,
+ const sal_Int32 nLen)
+ {
+ sal_Unicode aChar( rStr[io_rPos] );
+ ::rtl::OUStringBuffer sNumberString;
+
+ if(sal_Unicode('+') == aChar || sal_Unicode('-') == aChar)
+ {
+ sNumberString.append(rStr[io_rPos]);
+ aChar = rStr[++io_rPos];
+ }
+
+ while(sal_Unicode('0') <= aChar && sal_Unicode('9') >= aChar)
+ {
+ sNumberString.append(rStr[io_rPos]);
+ aChar = rStr[++io_rPos];
+ }
+
+ if(sNumberString.getLength())
+ {
+ o_nRetval = sNumberString.makeStringAndClear().toInt32();
+ lcl_skipSpacesAndCommas(io_rPos, rStr, nLen);
+
+ return true;
+ }
+
+ return false;
+ }
+
+ void lcl_skipNumber(sal_Int32& io_rPos,
+ const ::rtl::OUString& rStr,
+ const sal_Int32 nLen)
+ {
+ bool bSignAllowed(true);
+
+ while(io_rPos < nLen && lcl_isOnNumberChar(rStr, io_rPos, bSignAllowed))
+ {
+ bSignAllowed = false;
+ ++io_rPos;
+ }
+ }
+
+ void lcl_skipDouble(sal_Int32& io_rPos,
+ const ::rtl::OUString& rStr,
+ const sal_Int32 /*nLen*/)
+ {
+ sal_Unicode aChar( rStr[io_rPos] );
+
+ if(sal_Unicode('+') == aChar || sal_Unicode('-') == aChar)
+ aChar = rStr[++io_rPos];
+
+ while((sal_Unicode('0') <= aChar && sal_Unicode('9') >= aChar)
+ || sal_Unicode('.') == aChar)
+ {
+ aChar = rStr[++io_rPos];
+ }
+
+ if(sal_Unicode('e') == aChar || sal_Unicode('E') == aChar)
+ {
+ aChar = rStr[++io_rPos];
+
+ if(sal_Unicode('+') == aChar || sal_Unicode('-') == aChar)
+ aChar = rStr[++io_rPos];
+
+ while(sal_Unicode('0') <= aChar && sal_Unicode('9') >= aChar)
+ {
+ aChar = rStr[++io_rPos];
+ }
+ }
+ }
+ void lcl_skipNumberAndSpacesAndCommas(sal_Int32& io_rPos,
+ const ::rtl::OUString& rStr,
+ const sal_Int32 nLen)
+ {
+ lcl_skipNumber(io_rPos, rStr, nLen);
+ lcl_skipSpacesAndCommas(io_rPos, rStr, nLen);
+ }
+
+ // #100617# Allow to skip doubles, too.
+ void lcl_skipDoubleAndSpacesAndCommas(sal_Int32& io_rPos,
+ const ::rtl::OUString& rStr,
+ const sal_Int32 nLen)
+ {
+ lcl_skipDouble(io_rPos, rStr, nLen);
+ lcl_skipSpacesAndCommas(io_rPos, rStr, nLen);
+ }
+
+ void lcl_putNumberChar( ::rtl::OUStringBuffer& rStr,
+ double fValue )
+ {
+ rStr.append( fValue );
+ }
+
+ void lcl_putNumberCharWithSpace( ::rtl::OUStringBuffer& rStr,
+ double fValue,
+ double fOldValue,
+ bool bUseRelativeCoordinates )
+ {
+ if( bUseRelativeCoordinates )
+ fValue -= fOldValue;
+
+ const sal_Int32 aLen( rStr.getLength() );
+ if(aLen)
+ {
+ if( lcl_isOnNumberChar(rStr.charAt(aLen - 1), false) &&
+ fValue >= 0.0 )
+ {
+ rStr.append( sal_Unicode(' ') );
+ }
+ }
+
+ lcl_putNumberChar(rStr, fValue);
+ }
+
+ inline sal_Unicode lcl_getCommand( sal_Char cUpperCaseCommand,
+ sal_Char cLowerCaseCommand,
+ bool bUseRelativeCoordinates )
+ {
+ return bUseRelativeCoordinates ? cLowerCaseCommand : cUpperCaseCommand;
+ }
+ }
+
+ bool importFromSvgD(B2DPolyPolygon& o_rPolyPolygon, const ::rtl::OUString& rSvgDStatement)
+ {
+ o_rPolyPolygon.clear();
+ const sal_Int32 nLen(rSvgDStatement.getLength());
+ sal_Int32 nPos(0);
+ bool bIsClosed(false);
+ double nLastX( 0.0 );
+ double nLastY( 0.0 );
+ B2DPolygon aCurrPoly;
+
+ // skip initial whitespace
+ lcl_skipSpaces(nPos, rSvgDStatement, nLen);
+
+ while(nPos < nLen)
+ {
+ bool bRelative(false);
+ bool bMoveTo(false);
+ const sal_Unicode aCurrChar(rSvgDStatement[nPos]);
+
+ switch(aCurrChar)
+ {
+ case 'z' :
+ case 'Z' :
+ {
+ nPos++;
+ lcl_skipSpaces(nPos, rSvgDStatement, nLen);
+
+ // remember closed state of current polygon
+ bIsClosed = true;
+ break;
+ }
+
+ case 'm' :
+ case 'M' :
+ {
+ bMoveTo = true;
+ // FALLTHROUGH intended
+ }
+ case 'l' :
+ case 'L' :
+ {
+ if('m' == aCurrChar || 'l' == aCurrChar)
+ {
+ bRelative = true;
+ }
+
+ if(bMoveTo)
+ {
+ // new polygon start, finish old one
+ if(aCurrPoly.count())
+ {
+ // add current polygon
+ if(bIsClosed)
+ {
+ closeWithGeometryChange(aCurrPoly);
+ }
+
+ o_rPolyPolygon.append(aCurrPoly);
+
+ // reset import values
+ bIsClosed = false;
+ aCurrPoly.clear();
+ }
+ }
+
+ nPos++;
+ lcl_skipSpaces(nPos, rSvgDStatement, nLen);
+
+ while(nPos < nLen && lcl_isOnNumberChar(rSvgDStatement, nPos))
+ {
+ double nX, nY;
+
+ if(!lcl_importDoubleAndSpaces(nX, nPos, rSvgDStatement, nLen)) return false;
+ if(!lcl_importDoubleAndSpaces(nY, nPos, rSvgDStatement, nLen)) return false;
+
+ if(bRelative)
+ {
+ nX += nLastX;
+ nY += nLastY;
+ }
+
+ // set last position
+ nLastX = nX;
+ nLastY = nY;
+
+ // add point
+ aCurrPoly.append(B2DPoint(nX, nY));
+ }
+ break;
+ }
+
+ case 'h' :
+ {
+ bRelative = true;
+ // FALLTHROUGH intended
+ }
+ case 'H' :
+ {
+ nPos++;
+ lcl_skipSpaces(nPos, rSvgDStatement, nLen);
+
+ while(nPos < nLen && lcl_isOnNumberChar(rSvgDStatement, nPos))
+ {
+ double nX, nY(nLastY);
+
+ if(!lcl_importDoubleAndSpaces(nX, nPos, rSvgDStatement, nLen)) return false;
+
+ if(bRelative)
+ {
+ nX += nLastX;
+ }
+
+ // set last position
+ nLastX = nX;
+
+ // add point
+ aCurrPoly.append(B2DPoint(nX, nY));
+ }
+ break;
+ }
+
+ case 'v' :
+ {
+ bRelative = true;
+ // FALLTHROUGH intended
+ }
+ case 'V' :
+ {
+ nPos++;
+ lcl_skipSpaces(nPos, rSvgDStatement, nLen);
+
+ while(nPos < nLen && lcl_isOnNumberChar(rSvgDStatement, nPos))
+ {
+ double nX(nLastX), nY;
+
+ if(!lcl_importDoubleAndSpaces(nY, nPos, rSvgDStatement, nLen)) return false;
+
+ if(bRelative)
+ {
+ nY += nLastY;
+ }
+
+ // set last position
+ nLastY = nY;
+
+ // add point
+ aCurrPoly.append(B2DPoint(nX, nY));
+ }
+ break;
+ }
+
+ case 's' :
+ {
+ bRelative = true;
+ // FALLTHROUGH intended
+ }
+ case 'S' :
+ {
+ nPos++;
+ lcl_skipSpaces(nPos, rSvgDStatement, nLen);
+
+ while(nPos < nLen && lcl_isOnNumberChar(rSvgDStatement, nPos))
+ {
+ double nX, nY;
+ double nX2, nY2;
+
+ if(!lcl_importDoubleAndSpaces(nX2, nPos, rSvgDStatement, nLen)) return false;
+ if(!lcl_importDoubleAndSpaces(nY2, nPos, rSvgDStatement, nLen)) return false;
+ if(!lcl_importDoubleAndSpaces(nX, nPos, rSvgDStatement, nLen)) return false;
+ if(!lcl_importDoubleAndSpaces(nY, nPos, rSvgDStatement, nLen)) return false;
+
+ if(bRelative)
+ {
+ nX2 += nLastX;
+ nY2 += nLastY;
+ nX += nLastX;
+ nY += nLastY;
+ }
+
+ // ensure existance of start point
+ if(!aCurrPoly.count())
+ {
+ aCurrPoly.append(B2DPoint(nLastX, nLastY));
+ }
+
+ // get first control point. It's the reflection of the PrevControlPoint
+ // of the last point. If not existent, use current point (see SVG)
+ B2DPoint aPrevControl(B2DPoint(nLastX, nLastY));
+ const sal_uInt32 nIndex(aCurrPoly.count() - 1);
+
+ if(aCurrPoly.areControlPointsUsed() && aCurrPoly.isPrevControlPointUsed(nIndex))
+ {
+ const B2DPoint aPrevPoint(aCurrPoly.getB2DPoint(nIndex));
+ const B2DPoint aPrevControlPoint(aCurrPoly.getPrevControlPoint(nIndex));
+
+ // use mirrored previous control point
+ aPrevControl.setX((2.0 * aPrevPoint.getX()) - aPrevControlPoint.getX());
+ aPrevControl.setY((2.0 * aPrevPoint.getY()) - aPrevControlPoint.getY());
+ }
+
+ // append curved edge
+ aCurrPoly.appendBezierSegment(aPrevControl, B2DPoint(nX2, nY2), B2DPoint(nX, nY));
+
+ // set last position
+ nLastX = nX;
+ nLastY = nY;
+ }
+ break;
+ }
+
+ case 'c' :
+ {
+ bRelative = true;
+ // FALLTHROUGH intended
+ }
+ case 'C' :
+ {
+ nPos++;
+ lcl_skipSpaces(nPos, rSvgDStatement, nLen);
+
+ while(nPos < nLen && lcl_isOnNumberChar(rSvgDStatement, nPos))
+ {
+ double nX, nY;
+ double nX1, nY1;
+ double nX2, nY2;
+
+ if(!lcl_importDoubleAndSpaces(nX1, nPos, rSvgDStatement, nLen)) return false;
+ if(!lcl_importDoubleAndSpaces(nY1, nPos, rSvgDStatement, nLen)) return false;
+ if(!lcl_importDoubleAndSpaces(nX2, nPos, rSvgDStatement, nLen)) return false;
+ if(!lcl_importDoubleAndSpaces(nY2, nPos, rSvgDStatement, nLen)) return false;
+ if(!lcl_importDoubleAndSpaces(nX, nPos, rSvgDStatement, nLen)) return false;
+ if(!lcl_importDoubleAndSpaces(nY, nPos, rSvgDStatement, nLen)) return false;
+
+ if(bRelative)
+ {
+ nX1 += nLastX;
+ nY1 += nLastY;
+ nX2 += nLastX;
+ nY2 += nLastY;
+ nX += nLastX;
+ nY += nLastY;
+ }
+
+ // ensure existance of start point
+ if(!aCurrPoly.count())
+ {
+ aCurrPoly.append(B2DPoint(nLastX, nLastY));
+ }
+
+ // append curved edge
+ aCurrPoly.appendBezierSegment(B2DPoint(nX1, nY1), B2DPoint(nX2, nY2), B2DPoint(nX, nY));
+
+ // set last position
+ nLastX = nX;
+ nLastY = nY;
+ }
+ break;
+ }
+
+ // #100617# quadratic beziers are imported as cubic ones
+ case 'q' :
+ {
+ bRelative = true;
+ // FALLTHROUGH intended
+ }
+ case 'Q' :
+ {
+ nPos++;
+ lcl_skipSpaces(nPos, rSvgDStatement, nLen);
+
+ while(nPos < nLen && lcl_isOnNumberChar(rSvgDStatement, nPos))
+ {
+ double nX, nY;
+ double nX1, nY1;
+
+ if(!lcl_importDoubleAndSpaces(nX1, nPos, rSvgDStatement, nLen)) return false;
+ if(!lcl_importDoubleAndSpaces(nY1, nPos, rSvgDStatement, nLen)) return false;
+ if(!lcl_importDoubleAndSpaces(nX, nPos, rSvgDStatement, nLen)) return false;
+ if(!lcl_importDoubleAndSpaces(nY, nPos, rSvgDStatement, nLen)) return false;
+
+ if(bRelative)
+ {
+ nX1 += nLastX;
+ nY1 += nLastY;
+ nX += nLastX;
+ nY += nLastY;
+ }
+
+ // calculate the cubic bezier coefficients from the quadratic ones
+ const double nX1Prime((nX1 * 2.0 + nLastX) / 3.0);
+ const double nY1Prime((nY1 * 2.0 + nLastY) / 3.0);
+ const double nX2Prime((nX1 * 2.0 + nX) / 3.0);
+ const double nY2Prime((nY1 * 2.0 + nY) / 3.0);
+
+ // ensure existance of start point
+ if(!aCurrPoly.count())
+ {
+ aCurrPoly.append(B2DPoint(nLastX, nLastY));
+ }
+
+ // append curved edge
+ aCurrPoly.appendBezierSegment(B2DPoint(nX1Prime, nY1Prime), B2DPoint(nX2Prime, nY2Prime), B2DPoint(nX, nY));
+
+ // set last position
+ nLastX = nX;
+ nLastY = nY;
+ }
+ break;
+ }
+
+ // #100617# relative quadratic beziers are imported as cubic
+ case 't' :
+ {
+ bRelative = true;
+ // FALLTHROUGH intended
+ }
+ case 'T' :
+ {
+ nPos++;
+ lcl_skipSpaces(nPos, rSvgDStatement, nLen);
+
+ while(nPos < nLen && lcl_isOnNumberChar(rSvgDStatement, nPos))
+ {
+ double nX, nY;
+
+ if(!lcl_importDoubleAndSpaces(nX, nPos, rSvgDStatement, nLen)) return false;
+ if(!lcl_importDoubleAndSpaces(nY, nPos, rSvgDStatement, nLen)) return false;
+
+ if(bRelative)
+ {
+ nX += nLastX;
+ nY += nLastY;
+ }
+
+ // ensure existance of start point
+ if(!aCurrPoly.count())
+ {
+ aCurrPoly.append(B2DPoint(nLastX, nLastY));
+ }
+
+ // get first control point. It's the reflection of the PrevControlPoint
+ // of the last point. If not existent, use current point (see SVG)
+ B2DPoint aPrevControl(B2DPoint(nLastX, nLastY));
+ const sal_uInt32 nIndex(aCurrPoly.count() - 1);
+ const B2DPoint aPrevPoint(aCurrPoly.getB2DPoint(nIndex));
+
+ if(aCurrPoly.areControlPointsUsed() && aCurrPoly.isPrevControlPointUsed(nIndex))
+ {
+ const B2DPoint aPrevControlPoint(aCurrPoly.getPrevControlPoint(nIndex));
+
+ // use mirrored previous control point
+ aPrevControl.setX((2.0 * aPrevPoint.getX()) - aPrevControlPoint.getX());
+ aPrevControl.setY((2.0 * aPrevPoint.getY()) - aPrevControlPoint.getY());
+ }
+
+ if(!aPrevControl.equal(aPrevPoint))
+ {
+ // there is a prev control point, and we have the already mirrored one
+ // in aPrevControl. We also need the quadratic control point for this
+ // new quadratic segment to calculate the 2nd cubic control point
+ const B2DPoint aQuadControlPoint(
+ ((3.0 * aPrevControl.getX()) - aPrevPoint.getX()) / 2.0,
+ ((3.0 * aPrevControl.getY()) - aPrevPoint.getY()) / 2.0);
+
+ // calculate the cubic bezier coefficients from the quadratic ones.
+ const double nX2Prime((aQuadControlPoint.getX() * 2.0 + nX) / 3.0);
+ const double nY2Prime((aQuadControlPoint.getY() * 2.0 + nY) / 3.0);
+
+ // append curved edge, use mirrored cubic control point directly
+ aCurrPoly.appendBezierSegment(aPrevControl, B2DPoint(nX2Prime, nY2Prime), B2DPoint(nX, nY));
+ }
+ else
+ {
+ // when no previous control, SVG says to use current point -> straight line.
+ // Just add end point
+ aCurrPoly.append(B2DPoint(nX, nY));
+ }
+
+ // set last position
+ nLastX = nX;
+ nLastY = nY;
+ }
+ break;
+ }
+
+ case 'a' :
+ {
+ bRelative = true;
+ // FALLTHROUGH intended
+ }
+ case 'A' :
+ {
+ nPos++;
+ lcl_skipSpaces(nPos, rSvgDStatement, nLen);
+
+ while(nPos < nLen && lcl_isOnNumberChar(rSvgDStatement, nPos))
+ {
+ double nX, nY;
+ double fRX, fRY, fPhi;
+ sal_Int32 bLargeArcFlag, bSweepFlag;
+
+ if(!lcl_importDoubleAndSpaces(fRX, nPos, rSvgDStatement, nLen)) return false;
+ if(!lcl_importDoubleAndSpaces(fRY, nPos, rSvgDStatement, nLen)) return false;
+ if(!lcl_importDoubleAndSpaces(fPhi, nPos, rSvgDStatement, nLen)) return false;
+ if(!lcl_importNumberAndSpaces(bLargeArcFlag, nPos, rSvgDStatement, nLen)) return false;
+ if(!lcl_importNumberAndSpaces(bSweepFlag, nPos, rSvgDStatement, nLen)) return false;
+ if(!lcl_importDoubleAndSpaces(nX, nPos, rSvgDStatement, nLen)) return false;
+ if(!lcl_importDoubleAndSpaces(nY, nPos, rSvgDStatement, nLen)) return false;
+
+ if(bRelative)
+ {
+ nX += nLastX;
+ nY += nLastY;
+ }
+
+ const B2DPoint aPrevPoint(aCurrPoly.getB2DPoint(aCurrPoly.count() - 1));
+
+ if( nX == nLastX && nY == nLastY )
+ continue; // start==end -> skip according to SVG spec
+
+ if( fRX == 0.0 || fRY == 0.0 )
+ {
+ // straight line segment according to SVG spec
+ aCurrPoly.append(B2DPoint(nX, nY));
+ }
+ else
+ {
+ // normalize according to SVG spec
+ fRX=fabs(fRX); fRY=fabs(fRY);
+
+ // from the SVG spec, appendix F.6.4
+
+ // |x1'| |cos phi sin phi| |(x1 - x2)/2|
+ // |y1'| = |-sin phi cos phi| |(y1 - y2)/2|
+ const B2DPoint p1(nLastX, nLastY);
+ const B2DPoint p2(nX, nY);
+ B2DHomMatrix aTransform(basegfx::tools::createRotateB2DHomMatrix(-fPhi*M_PI/180));
+
+ const B2DPoint p1_prime( aTransform * B2DPoint(((p1-p2)/2.0)) );
+
+ // ______________________________________ rx y1'
+ // |cx'| + / rx^2 ry^2 - rx^2 y1'^2 - ry^2 x1^2 ry
+ // |cy'| =-/ rx^2y1'^2 + ry^2 x1'^2 - ry x1'
+ // rx
+ // chose + if f_A != f_S
+ // chose - if f_A = f_S
+ B2DPoint aCenter_prime;
+ const double fRadicant(
+ (fRX*fRX*fRY*fRY - fRX*fRX*p1_prime.getY()*p1_prime.getY() - fRY*fRY*p1_prime.getX()*p1_prime.getX())/
+ (fRX*fRX*p1_prime.getY()*p1_prime.getY() + fRY*fRY*p1_prime.getX()*p1_prime.getX()));
+ if( fRadicant < 0.0 )
+ {
+ // no solution - according to SVG
+ // spec, scale up ellipse
+ // uniformly such that it passes
+ // through end points (denominator
+ // of radicant solved for fRY,
+ // with s=fRX/fRY)
+ const double fRatio(fRX/fRY);
+ const double fRadicant2(
+ p1_prime.getY()*p1_prime.getY() +
+ p1_prime.getX()*p1_prime.getX()/(fRatio*fRatio));
+ if( fRadicant2 < 0.0 )
+ {
+ // only trivial solution, one
+ // of the axes 0 -> straight
+ // line segment according to
+ // SVG spec
+ aCurrPoly.append(B2DPoint(nX, nY));
+ continue;
+ }
+
+ fRY=sqrt(fRadicant2);
+ fRX=fRatio*fRY;
+
+ // keep center_prime forced to (0,0)
+ }
+ else
+ {
+ const double fFactor(
+ (bLargeArcFlag==bSweepFlag ? -1.0 : 1.0) *
+ sqrt(fRadicant));
+
+ // actually calculate center_prime
+ aCenter_prime = B2DPoint(
+ fFactor*fRX*p1_prime.getY()/fRY,
+ -fFactor*fRY*p1_prime.getX()/fRX);
+ }
+
+ // + u - v
+ // angle(u,v) = arccos( ------------ ) (take the sign of (ux vy - uy vx))
+ // - ||u|| ||v||
+
+ // 1 | (x1' - cx')/rx |
+ // theta1 = angle(( ), | | )
+ // 0 | (y1' - cy')/ry |
+ const B2DPoint aRadii(fRX,fRY);
+ double fTheta1(
+ B2DVector(1.0,0.0).angle(
+ (p1_prime-aCenter_prime)/aRadii));
+
+ // |1| | (-x1' - cx')/rx |
+ // theta2 = angle( | | , | | )
+ // |0| | (-y1' - cy')/ry |
+ double fTheta2(
+ B2DVector(1.0,0.0).angle(
+ (-p1_prime-aCenter_prime)/aRadii));
+
+ // map both angles to [0,2pi)
+ fTheta1 = fmod(2*M_PI+fTheta1,2*M_PI);
+ fTheta2 = fmod(2*M_PI+fTheta2,2*M_PI);
+
+ // make sure the large arc is taken
+ // (since
+ // createPolygonFromEllipseSegment()
+ // normalizes to e.g. cw arc)
+ const bool bFlipSegment( (bLargeArcFlag!=0) ==
+ (fmod(fTheta2+2*M_PI-fTheta1,
+ 2*M_PI)<M_PI) );
+ if( bFlipSegment )
+ std::swap(fTheta1,fTheta2);
+
+ // finally, create bezier polygon from this
+ B2DPolygon aSegment(
+ tools::createPolygonFromUnitEllipseSegment(
+ fTheta1, fTheta2 ));
+
+ // transform ellipse by rotation & move to final center
+ aTransform = basegfx::tools::createScaleB2DHomMatrix(fRX, fRY);
+ aTransform.translate(aCenter_prime.getX(),
+ aCenter_prime.getY());
+ aTransform.rotate(fPhi*M_PI/180);
+ const B2DPoint aOffset((p1+p2)/2.0);
+ aTransform.translate(aOffset.getX(),
+ aOffset.getY());
+ aSegment.transform(aTransform);
+
+ // createPolygonFromEllipseSegment()
+ // always creates arcs that are
+ // positively oriented - flip polygon
+ // if we swapped angles above
+ if( bFlipSegment )
+ aSegment.flip();
+ aCurrPoly.append(aSegment);
+ }
+
+ // set last position
+ nLastX = nX;
+ nLastY = nY;
+ }
+ break;
+ }
+
+ default:
+ {
+ OSL_ENSURE(false, "importFromSvgD(): skipping tags in svg:d element (unknown)!");
+ OSL_TRACE("importFromSvgD(): skipping tags in svg:d element (unknown: \"%c\")!", aCurrChar);
+ ++nPos;
+ break;
+ }
+ }
+ }
+
+ if(aCurrPoly.count())
+ {
+ // end-process last poly
+ if(bIsClosed)
+ {
+ closeWithGeometryChange(aCurrPoly);
+ }
+
+ o_rPolyPolygon.append(aCurrPoly);
+ }
+
+ return true;
+ }
+
+ bool importFromSvgPoints( B2DPolygon& o_rPoly,
+ const ::rtl::OUString& rSvgPointsAttribute )
+ {
+ o_rPoly.clear();
+ const sal_Int32 nLen(rSvgPointsAttribute.getLength());
+ sal_Int32 nPos(0);
+ double nX, nY;
+
+ // skip initial whitespace
+ lcl_skipSpaces(nPos, rSvgPointsAttribute, nLen);
+
+ while(nPos < nLen)
+ {
+ if(!lcl_importDoubleAndSpaces(nX, nPos, rSvgPointsAttribute, nLen)) return false;
+ if(!lcl_importDoubleAndSpaces(nY, nPos, rSvgPointsAttribute, nLen)) return false;
+
+ // add point
+ o_rPoly.append(B2DPoint(nX, nY));
+
+ // skip to next number, or finish
+ lcl_skipSpaces(nPos, rSvgPointsAttribute, nLen);
+ }
+
+ return true;
+ }
+
+ ::rtl::OUString exportToSvgD(
+ const B2DPolyPolygon& rPolyPolygon,
+ bool bUseRelativeCoordinates,
+ bool bDetectQuadraticBeziers)
+ {
+ const sal_uInt32 nCount(rPolyPolygon.count());
+ ::rtl::OUStringBuffer aResult;
+ B2DPoint aCurrentSVGPosition(0.0, 0.0); // SVG assumes (0,0) as the initial current point
+
+ for(sal_uInt32 i(0); i < nCount; i++)
+ {
+ const B2DPolygon aPolygon(rPolyPolygon.getB2DPolygon(i));
+ const sal_uInt32 nPointCount(aPolygon.count());
+
+ if(nPointCount)
+ {
+ const bool bPolyUsesControlPoints(aPolygon.areControlPointsUsed());
+ const sal_uInt32 nEdgeCount(aPolygon.isClosed() ? nPointCount : nPointCount - 1);
+ sal_Unicode aLastSVGCommand(' '); // last SVG command char
+ B2DPoint aLeft, aRight; // for quadratic bezier test
+
+ // handle polygon start point
+ B2DPoint aEdgeStart(aPolygon.getB2DPoint(0));
+ aResult.append(lcl_getCommand('M', 'm', bUseRelativeCoordinates));
+ lcl_putNumberCharWithSpace(aResult, aEdgeStart.getX(), aCurrentSVGPosition.getX(), bUseRelativeCoordinates);
+ lcl_putNumberCharWithSpace(aResult, aEdgeStart.getY(), aCurrentSVGPosition.getY(), bUseRelativeCoordinates);
+ aLastSVGCommand = lcl_getCommand('L', 'l', bUseRelativeCoordinates);
+ aCurrentSVGPosition = aEdgeStart;
+
+ for(sal_uInt32 nIndex(0); nIndex < nEdgeCount; nIndex++)
+ {
+ // prepare access to next point
+ const sal_uInt32 nNextIndex((nIndex + 1) % nPointCount);
+ const B2DPoint aEdgeEnd(aPolygon.getB2DPoint(nNextIndex));
+
+ // handle edge from (aEdgeStart, aEdgeEnd) using indices (nIndex, nNextIndex)
+ const bool bEdgeIsBezier(bPolyUsesControlPoints
+ && (aPolygon.isNextControlPointUsed(nIndex) || aPolygon.isPrevControlPointUsed(nNextIndex)));
+
+ if(bEdgeIsBezier)
+ {
+ // handle bezier edge
+ const B2DPoint aControlEdgeStart(aPolygon.getNextControlPoint(nIndex));
+ const B2DPoint aControlEdgeEnd(aPolygon.getPrevControlPoint(nNextIndex));
+ bool bIsQuadraticBezier(false);
+
+ // check continuity at current edge's start point. For SVG, do NOT use an
+ // existing continuity since no 'S' or 's' statement should be written. At
+ // import, that 'previous' control vector is not available. SVG documentation
+ // says for interpretation:
+ //
+ // "(If there is no previous command or if the previous command was
+ // not an C, c, S or s, assume the first control point is coincident
+ // with the current point.)"
+ //
+ // That's what is done from our import, so avoid exporting it as first statement
+ // is necessary.
+ const bool bSymmetricAtEdgeStart(
+ 0 != nIndex
+ && CONTINUITY_C2 == aPolygon.getContinuityInPoint(nIndex));
+
+ if(bDetectQuadraticBeziers)
+ {
+ // check for quadratic beziers - that's
+ // the case if both control points are in
+ // the same place when they are prolonged
+ // to the common quadratic control point
+ //
+ // Left: P = (3P1 - P0) / 2
+ // Right: P = (3P2 - P3) / 2
+ aLeft = B2DPoint((3.0 * aControlEdgeStart - aEdgeStart) / 2.0);
+ aRight= B2DPoint((3.0 * aControlEdgeEnd - aEdgeEnd) / 2.0);
+ bIsQuadraticBezier = aLeft.equal(aRight);
+ }
+
+ if(bIsQuadraticBezier)
+ {
+ // approximately equal, export as quadratic bezier
+ if(bSymmetricAtEdgeStart)
+ {
+ const sal_Unicode aCommand(lcl_getCommand('T', 't', bUseRelativeCoordinates));
+
+ if(aLastSVGCommand != aCommand)
+ {
+ aResult.append(aCommand);
+ aLastSVGCommand = aCommand;
+ }
+
+ lcl_putNumberCharWithSpace(aResult, aEdgeEnd.getX(), aCurrentSVGPosition.getX(), bUseRelativeCoordinates);
+ lcl_putNumberCharWithSpace(aResult, aEdgeEnd.getY(), aCurrentSVGPosition.getY(), bUseRelativeCoordinates);
+ aLastSVGCommand = aCommand;
+ aCurrentSVGPosition = aEdgeEnd;
+ }
+ else
+ {
+ const sal_Unicode aCommand(lcl_getCommand('Q', 'q', bUseRelativeCoordinates));
+
+ if(aLastSVGCommand != aCommand)
+ {
+ aResult.append(aCommand);
+ aLastSVGCommand = aCommand;
+ }
+
+ lcl_putNumberCharWithSpace(aResult, aLeft.getX(), aCurrentSVGPosition.getX(), bUseRelativeCoordinates);
+ lcl_putNumberCharWithSpace(aResult, aLeft.getY(), aCurrentSVGPosition.getY(), bUseRelativeCoordinates);
+ lcl_putNumberCharWithSpace(aResult, aEdgeEnd.getX(), aCurrentSVGPosition.getX(), bUseRelativeCoordinates);
+ lcl_putNumberCharWithSpace(aResult, aEdgeEnd.getY(), aCurrentSVGPosition.getY(), bUseRelativeCoordinates);
+ aLastSVGCommand = aCommand;
+ aCurrentSVGPosition = aEdgeEnd;
+ }
+ }
+ else
+ {
+ // export as cubic bezier
+ if(bSymmetricAtEdgeStart)
+ {
+ const sal_Unicode aCommand(lcl_getCommand('S', 's', bUseRelativeCoordinates));
+
+ if(aLastSVGCommand != aCommand)
+ {
+ aResult.append(aCommand);
+ aLastSVGCommand = aCommand;
+ }
+
+ lcl_putNumberCharWithSpace(aResult, aControlEdgeEnd.getX(), aCurrentSVGPosition.getX(), bUseRelativeCoordinates);
+ lcl_putNumberCharWithSpace(aResult, aControlEdgeEnd.getY(), aCurrentSVGPosition.getY(), bUseRelativeCoordinates);
+ lcl_putNumberCharWithSpace(aResult, aEdgeEnd.getX(), aCurrentSVGPosition.getX(), bUseRelativeCoordinates);
+ lcl_putNumberCharWithSpace(aResult, aEdgeEnd.getY(), aCurrentSVGPosition.getY(), bUseRelativeCoordinates);
+ aLastSVGCommand = aCommand;
+ aCurrentSVGPosition = aEdgeEnd;
+ }
+ else
+ {
+ const sal_Unicode aCommand(lcl_getCommand('C', 'c', bUseRelativeCoordinates));
+
+ if(aLastSVGCommand != aCommand)
+ {
+ aResult.append(aCommand);
+ aLastSVGCommand = aCommand;
+ }
+
+ lcl_putNumberCharWithSpace(aResult, aControlEdgeStart.getX(), aCurrentSVGPosition.getX(), bUseRelativeCoordinates);
+ lcl_putNumberCharWithSpace(aResult, aControlEdgeStart.getY(), aCurrentSVGPosition.getY(), bUseRelativeCoordinates);
+ lcl_putNumberCharWithSpace(aResult, aControlEdgeEnd.getX(), aCurrentSVGPosition.getX(), bUseRelativeCoordinates);
+ lcl_putNumberCharWithSpace(aResult, aControlEdgeEnd.getY(), aCurrentSVGPosition.getY(), bUseRelativeCoordinates);
+ lcl_putNumberCharWithSpace(aResult, aEdgeEnd.getX(), aCurrentSVGPosition.getX(), bUseRelativeCoordinates);
+ lcl_putNumberCharWithSpace(aResult, aEdgeEnd.getY(), aCurrentSVGPosition.getY(), bUseRelativeCoordinates);
+ aLastSVGCommand = aCommand;
+ aCurrentSVGPosition = aEdgeEnd;
+ }
+ }
+ }
+ else
+ {
+ // straight edge
+ if(0 == nNextIndex)
+ {
+ // it's a closed polygon's last edge and it's not a bezier edge, so there is
+ // no need to write it
+ }
+ else
+ {
+ const bool bXEqual(aEdgeStart.getX() == aEdgeEnd.getX());
+ const bool bYEqual(aEdgeStart.getY() == aEdgeEnd.getY());
+
+ if(bXEqual && bYEqual)
+ {
+ // point is a double point; do not export at all
+ }
+ else if(bXEqual)
+ {
+ // export as vertical line
+ const sal_Unicode aCommand(lcl_getCommand('V', 'v', bUseRelativeCoordinates));
+
+ if(aLastSVGCommand != aCommand)
+ {
+ aResult.append(aCommand);
+ aLastSVGCommand = aCommand;
+ }
+
+ lcl_putNumberCharWithSpace(aResult, aEdgeEnd.getY(), aCurrentSVGPosition.getY(), bUseRelativeCoordinates);
+ aCurrentSVGPosition = aEdgeEnd;
+ }
+ else if(bYEqual)
+ {
+ // export as horizontal line
+ const sal_Unicode aCommand(lcl_getCommand('H', 'h', bUseRelativeCoordinates));
+
+ if(aLastSVGCommand != aCommand)
+ {
+ aResult.append(aCommand);
+ aLastSVGCommand = aCommand;
+ }
+
+ lcl_putNumberCharWithSpace(aResult, aEdgeEnd.getX(), aCurrentSVGPosition.getX(), bUseRelativeCoordinates);
+ aCurrentSVGPosition = aEdgeEnd;
+ }
+ else
+ {
+ // export as line
+ const sal_Unicode aCommand(lcl_getCommand('L', 'l', bUseRelativeCoordinates));
+
+ if(aLastSVGCommand != aCommand)
+ {
+ aResult.append(aCommand);
+ aLastSVGCommand = aCommand;
+ }
+
+ lcl_putNumberCharWithSpace(aResult, aEdgeEnd.getX(), aCurrentSVGPosition.getX(), bUseRelativeCoordinates);
+ lcl_putNumberCharWithSpace(aResult, aEdgeEnd.getY(), aCurrentSVGPosition.getY(), bUseRelativeCoordinates);
+ aCurrentSVGPosition = aEdgeEnd;
+ }
+ }
+ }
+
+ // prepare edge start for next loop step
+ aEdgeStart = aEdgeEnd;
+ }
+
+ // close path if closed poly (Z and z are equivalent here, but looks nicer when case is matched)
+ if(aPolygon.isClosed())
+ {
+ aResult.append(lcl_getCommand('Z', 'z', bUseRelativeCoordinates));
+ }
+ }
+ }
+
+ return aResult.makeStringAndClear();
+ }
+ }
+}
+
+// eof
diff --git a/basegfx/source/polygon/b2dtrapezoid.cxx b/basegfx/source/polygon/b2dtrapezoid.cxx
new file mode 100644
index 000000000000..c1e0f7f6c7c1
--- /dev/null
+++ b/basegfx/source/polygon/b2dtrapezoid.cxx
@@ -0,0 +1,1228 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: b2dpolygontriangulator.cxx,v $
+ * $Revision: 1.7 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basegfx.hxx"
+#include <basegfx/polygon/b2dtrapezoid.hxx>
+#include <basegfx/range/b1drange.hxx>
+#include <basegfx/polygon/b2dpolygontools.hxx>
+#include <list>
+
+//////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+ namespace trapezoidhelper
+ {
+ //////////////////////////////////////////////////////////////////////////////
+ // helper class to hold a simple ege. This is only used for horizontal edges
+ // currently, thus the YPositions will be equal. I did not create a special
+ // class for this since holdingthe pointers is more effective and also can be
+ // used as baseclass for the traversing edges
+
+ class TrDeSimpleEdge
+ {
+ protected:
+ // pointers to start and end point
+ const B2DPoint* mpStart;
+ const B2DPoint* mpEnd;
+
+ public:
+ // constructor
+ TrDeSimpleEdge(
+ const B2DPoint* pStart,
+ const B2DPoint* pEnd)
+ : mpStart(pStart),
+ mpEnd(pEnd)
+ {
+ }
+
+ // data read access
+ const B2DPoint& getStart() const { return *mpStart; }
+ const B2DPoint& getEnd() const { return *mpEnd; }
+ };
+
+ //////////////////////////////////////////////////////////////////////////////
+ // define vector of simple edges
+
+ typedef ::std::vector< TrDeSimpleEdge > TrDeSimpleEdges;
+
+ //////////////////////////////////////////////////////////////////////////////
+ // helper class for holding a traversing edge. It will always have some
+ // distance in YPos. The slope (in a numerically useful form, see comments) is
+ // hold and used in SortValue to allow sorting traversing edges by Y, X and slope
+ // (in that order)
+
+ class TrDeEdgeEntry : public TrDeSimpleEdge
+ {
+ private:
+ // the slope in a numerical useful form for sorting
+ sal_uInt32 mnSortValue;
+
+ public:
+ // convenience data read access
+ double getDeltaX() const { return mpEnd->getX() - mpStart->getX(); }
+ double getDeltaY() const { return mpEnd->getY() - mpStart->getY(); }
+
+ // convenience data read access. SortValue is created on demand since
+ // it is not always used
+ sal_uInt32 getSortValue() const
+ {
+ if(0 != mnSortValue)
+ return mnSortValue;
+
+ // get radiant; has to be in the range ]0.0 .. pi[, thus scale to full
+ // sal_uInt32 range for maximum precision
+ const double fRadiant(atan2(getDeltaY(), getDeltaX()) * (SAL_MAX_UINT32 / F_PI));
+
+ // convert to sal_uInt32 value
+ const_cast< TrDeEdgeEntry* >(this)->mnSortValue = sal_uInt32(fRadiant);
+
+ return mnSortValue;
+ }
+
+ // constructor. SortValue can be given when known, use zero otherwise
+ TrDeEdgeEntry(
+ const B2DPoint* pStart,
+ const B2DPoint* pEnd,
+ sal_uInt32 nSortValue = 0)
+ : TrDeSimpleEdge(pStart, pEnd),
+ mnSortValue(nSortValue)
+ {
+ // force traversal of deltaY downward
+ if(mpEnd->getY() < mpStart->getY())
+ {
+ std::swap(mpStart, mpEnd);
+ }
+
+ // no horizontal edges allowed, all neeed to traverse vertically
+ OSL_ENSURE(mpEnd->getY() > mpStart->getY(), "Illegal TrDeEdgeEntry constructed (!)");
+ }
+
+ // data write access to StartPoint
+ void setStart( const B2DPoint* pNewStart)
+ {
+ OSL_ENSURE(0 != pNewStart, "No null pointer allowed here (!)");
+
+ if(mpStart != pNewStart)
+ {
+ mpStart = pNewStart;
+
+ // no horizontal edges allowed, all neeed to traverse vertivally
+ OSL_ENSURE(mpEnd->getY() > mpStart->getY(), "Illegal TrDeEdgeEntry constructed (!)");
+ }
+ }
+
+ // data write access to EndPoint
+ void setEnd( const B2DPoint* pNewEnd)
+ {
+ OSL_ENSURE(0 != pNewEnd, "No null pointer allowed here (!)");
+
+ if(mpEnd != pNewEnd)
+ {
+ mpEnd = pNewEnd;
+
+ // no horizontal edges allowed, all neeed to traverse vertivally
+ OSL_ENSURE(mpEnd->getY() > mpStart->getY(), "Illegal TrDeEdgeEntry constructed (!)");
+ }
+ }
+
+ // operator for sort support. Sort by Y, X and slope (in that order)
+ bool operator<(const TrDeEdgeEntry& rComp) const
+ {
+ if(fTools::equal(getStart().getY(), rComp.getStart().getY(), fTools::getSmallValue()))
+ {
+ if(fTools::equal(getStart().getX(), rComp.getStart().getX(), fTools::getSmallValue()))
+ {
+ // when start points are equal, use the direction the edge is pointing
+ // to. That value is created on demand and derived from atan2 in the
+ // range ]0.0 .. pi[ (without extremas, we always have a deltaY in this
+ // class) and scaled to sal_uInt32 range for best precision. 0 means no angle,
+ // while SAL_MAX_UINT32 means pi. Thus, the higher the value, the more left
+ // the edge traverses.
+ return (getSortValue() > rComp.getSortValue());
+ }
+ else
+ {
+ return fTools::less(getStart().getX(), rComp.getStart().getX());
+ }
+ }
+ else
+ {
+ return fTools::less(getStart().getY(), rComp.getStart().getY());
+ }
+ }
+
+ // method for cut support
+ B2DPoint getCutPointForGivenY(double fGivenY)
+ {
+ // Calculate cut point locally (do not use interpolate) since it is numerically
+ // necessary to guarantee the new, equal Y-coordinate
+ const double fFactor((fGivenY - getStart().getY()) / getDeltaY());
+ const double fDeltaXNew(fFactor * getDeltaX());
+
+ return B2DPoint(getStart().getX() + fDeltaXNew, fGivenY);
+ }
+ };
+
+ //////////////////////////////////////////////////////////////////////////////
+ // define double linked list of edges (for fast random insert)
+
+ typedef ::std::list< TrDeEdgeEntry > TrDeEdgeEntries;
+
+ } // end of anonymous namespace
+} // end of namespace basegfx
+
+//////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+ namespace trapezoidhelper
+ {
+ // helper class to handle the complete trapezoid subdivision of a PolyPolygon
+ class TrapezoidSubdivider
+ {
+ private:
+ // local data
+ sal_uInt32 mnInitialEdgeEntryCount;
+ TrDeEdgeEntries maTrDeEdgeEntries;
+ ::std::vector< B2DPoint > maPoints;
+ ::std::vector< B2DPoint* > maNewPoints;
+
+ void addEdgeSorted(
+ TrDeEdgeEntries::iterator aCurrent,
+ const TrDeEdgeEntry& rNewEdge)
+ {
+ // Loop while new entry is bigger, use operator<
+ while(aCurrent != maTrDeEdgeEntries.end() && (*aCurrent) < rNewEdge)
+ {
+ aCurrent++;
+ }
+
+ // Insert before first which is smaller or equal or at end
+ maTrDeEdgeEntries.insert(aCurrent, rNewEdge);
+ }
+
+ bool splitEdgeAtGivenPoint(
+ TrDeEdgeEntries::reference aEdge,
+ const B2DPoint& rCutPoint,
+ TrDeEdgeEntries::iterator aCurrent)
+ {
+ // do not create edges without deltaY: do not split when start is identical
+ if(aEdge.getStart().equal(rCutPoint, fTools::getSmallValue()))
+ {
+ return false;
+ }
+
+ // do not create edges without deltaY: do not split when end is identical
+ if(aEdge.getEnd().equal(rCutPoint, fTools::getSmallValue()))
+ {
+ return false;
+ }
+
+ const double fOldDeltaYStart(rCutPoint.getY() - aEdge.getStart().getY());
+
+ if(fTools::lessOrEqual(fOldDeltaYStart, 0.0))
+ {
+ // do not split: the resulting edge would be horizontal
+ // correct it to new start point
+ aEdge.setStart(&rCutPoint);
+ return false;
+ }
+
+ const double fNewDeltaYStart(aEdge.getEnd().getY() - rCutPoint.getY());
+
+ if(fTools::lessOrEqual(fNewDeltaYStart, 0.0))
+ {
+ // do not split: the resulting edge would be horizontal
+ // correct it to new end point
+ aEdge.setEnd(&rCutPoint);
+ return false;
+ }
+
+ // Create new entry
+ const TrDeEdgeEntry aNewEdge(
+ &rCutPoint,
+ &aEdge.getEnd(),
+ aEdge.getSortValue());
+
+ // Correct old entry
+ aEdge.setEnd(&rCutPoint);
+
+ // Insert sorted (to avoid new sort)
+ addEdgeSorted(aCurrent, aNewEdge);
+
+ return true;
+ }
+
+ bool testAndCorrectEdgeIntersection(
+ TrDeEdgeEntries::reference aEdgeA,
+ TrDeEdgeEntries::reference aEdgeB,
+ TrDeEdgeEntries::iterator aCurrent)
+ {
+ // Exclude simple cases: same start or end point
+ if(aEdgeA.getStart().equal(aEdgeB.getStart(), fTools::getSmallValue()))
+ {
+ return false;
+ }
+
+ if(aEdgeA.getStart().equal(aEdgeB.getEnd(), fTools::getSmallValue()))
+ {
+ return false;
+ }
+
+ if(aEdgeA.getEnd().equal(aEdgeB.getStart(), fTools::getSmallValue()))
+ {
+ return false;
+ }
+
+ if(aEdgeA.getEnd().equal(aEdgeB.getEnd(), fTools::getSmallValue()))
+ {
+ return false;
+ }
+
+ // Exclude simple cases: one of the edges has no length anymore
+ if(aEdgeA.getStart().equal(aEdgeA.getEnd(), fTools::getSmallValue()))
+ {
+ return false;
+ }
+
+ if(aEdgeB.getStart().equal(aEdgeB.getEnd(), fTools::getSmallValue()))
+ {
+ return false;
+ }
+
+ // check if one point is on the other edge (a touch, not a cut)
+ const B2DVector aDeltaB(aEdgeB.getDeltaX(), aEdgeB.getDeltaY());
+
+ if(tools::isPointOnEdge(aEdgeA.getStart(), aEdgeB.getStart(), aDeltaB))
+ {
+ return splitEdgeAtGivenPoint(aEdgeB, aEdgeA.getStart(), aCurrent);
+ }
+
+ if(tools::isPointOnEdge(aEdgeA.getEnd(), aEdgeB.getStart(), aDeltaB))
+ {
+ return splitEdgeAtGivenPoint(aEdgeB, aEdgeA.getEnd(), aCurrent);
+ }
+
+ const B2DVector aDeltaA(aEdgeA.getDeltaX(), aEdgeA.getDeltaY());
+
+ if(tools::isPointOnEdge(aEdgeB.getStart(), aEdgeA.getStart(), aDeltaA))
+ {
+ return splitEdgeAtGivenPoint(aEdgeA, aEdgeB.getStart(), aCurrent);
+ }
+
+ if(tools::isPointOnEdge(aEdgeB.getEnd(), aEdgeA.getStart(), aDeltaA))
+ {
+ return splitEdgeAtGivenPoint(aEdgeA, aEdgeB.getEnd(), aCurrent);
+ }
+
+ // check for cut inside edges. Use both t-values to choose the more precise
+ // one later
+ double fCutA(0.0);
+ double fCutB(0.0);
+
+ if(tools::findCut(
+ aEdgeA.getStart(), aDeltaA,
+ aEdgeB.getStart(), aDeltaB,
+ CUTFLAG_LINE,
+ &fCutA,
+ &fCutB))
+ {
+ // use a simple metric (length criteria) for choosing the numerically
+ // better cut
+ const double fSimpleLengthA(aDeltaA.getX() + aDeltaA.getY());
+ const double fSimpleLengthB(aDeltaB.getX() + aDeltaB.getY());
+ const bool bAIsLonger(fSimpleLengthA > fSimpleLengthB);
+ B2DPoint* pNewPoint = bAIsLonger
+ ? new B2DPoint(aEdgeA.getStart() + (fCutA * aDeltaA))
+ : new B2DPoint(aEdgeB.getStart() + (fCutB * aDeltaB));
+ bool bRetval(false);
+
+ // try to split both edges
+ bRetval = splitEdgeAtGivenPoint(aEdgeA, *pNewPoint, aCurrent);
+ bRetval |= splitEdgeAtGivenPoint(aEdgeB, *pNewPoint, aCurrent);
+
+ if(bRetval)
+ {
+ maNewPoints.push_back(pNewPoint);
+ }
+ else
+ {
+ delete pNewPoint;
+ }
+
+ return bRetval;
+ }
+
+ return false;
+ }
+
+ void solveHorizontalEdges(TrDeSimpleEdges& rTrDeSimpleEdges)
+ {
+ if(rTrDeSimpleEdges.size() && maTrDeEdgeEntries.size())
+ {
+ // there were horizontal edges. These can be excluded, but
+ // cuts with other edges need to be solved and added before
+ // ignoring them
+ sal_uInt32 a(0);
+
+ for(a = 0; a < rTrDeSimpleEdges.size(); a++)
+ {
+ // get horizontal edge as candidate; prepare it's range and fixed Y
+ const TrDeSimpleEdge& rHorEdge = rTrDeSimpleEdges[a];
+ const B1DRange aRange(rHorEdge.getStart().getX(), rHorEdge.getEnd().getX());
+ const double fFixedY(rHorEdge.getStart().getY());
+
+ // loop over traversing edges
+ TrDeEdgeEntries::iterator aCurrent(maTrDeEdgeEntries.begin());
+
+ do
+ {
+ // get compare edge
+ TrDeEdgeEntries::reference aCompare(*aCurrent++);
+
+ if(fTools::lessOrEqual(aCompare.getEnd().getY(), fFixedY))
+ {
+ // edge ends above horizontal edge, continue
+ continue;
+ }
+
+ if(fTools::moreOrEqual(aCompare.getStart().getY(), fFixedY))
+ {
+ // edge starts below horizontal edge, continue
+ continue;
+ }
+
+ // vertical overlap, get horizontal range
+ const B1DRange aCompareRange(aCompare.getStart().getX(), aCompare.getEnd().getX());
+
+ if(aRange.overlaps(aCompareRange))
+ {
+ // possible cut, get cut point
+ const B2DPoint aSplit(aCompare.getCutPointForGivenY(fFixedY));
+
+ if(fTools::more(aSplit.getX(), aRange.getMinimum())
+ && fTools::less(aSplit.getX(), aRange.getMaximum()))
+ {
+ // cut is in XRange of horizontal edge, potenitally needed cut
+ B2DPoint* pNewPoint = new B2DPoint(aSplit);
+
+ if(splitEdgeAtGivenPoint(aCompare, *pNewPoint, aCurrent))
+ {
+ maNewPoints.push_back(pNewPoint);
+ }
+ else
+ {
+ delete pNewPoint;
+ }
+ }
+ }
+ }
+ while(aCurrent != maTrDeEdgeEntries.end()
+ && fTools::less(aCurrent->getStart().getY(), fFixedY));
+ }
+ }
+ }
+
+ public:
+ TrapezoidSubdivider(
+ const B2DPolyPolygon& rSourcePolyPolygon)
+ : mnInitialEdgeEntryCount(0),
+ maTrDeEdgeEntries(),
+ maPoints(),
+ maNewPoints()
+ {
+ B2DPolyPolygon aSource(rSourcePolyPolygon);
+ const sal_uInt32 nPolygonCount(rSourcePolyPolygon.count());
+ TrDeSimpleEdges aTrDeSimpleEdges;
+ sal_uInt32 a(0), b(0);
+ sal_uInt32 nAllPointCount(0);
+
+ // ensure there are no curves used
+ if(aSource.areControlPointsUsed())
+ {
+ aSource = aSource.getDefaultAdaptiveSubdivision();
+ }
+
+ for(a = 0; a < nPolygonCount; a++)
+ {
+ // 1st run: count points
+ const B2DPolygon aPolygonCandidate(aSource.getB2DPolygon(a));
+ const sal_uInt32 nCount(aPolygonCandidate.count());
+
+ if(nCount > 2)
+ {
+ nAllPointCount += nCount;
+ }
+ }
+
+ if(nAllPointCount)
+ {
+ // reserve needed points. CAUTION: maPoints size is NOT to be changed anymore
+ // after 2nd loop since pointers to it are used in the edges
+ maPoints.reserve(nAllPointCount);
+
+ for(a = 0; a < nPolygonCount; a++)
+ {
+ // 2nd run: add points
+ const B2DPolygon aPolygonCandidate(aSource.getB2DPolygon(a));
+ const sal_uInt32 nCount(aPolygonCandidate.count());
+
+ if(nCount > 2)
+ {
+ for(b = 0; b < nCount; b++)
+ {
+ maPoints.push_back(aPolygonCandidate.getB2DPoint(b));
+ }
+ }
+ }
+
+ // Moved the edge construction to a 3rd run: doing it in the 2nd run is
+ // possible(and i used it), but requires a working vector::reserve()
+ // implementation, else the vector will be reallocated and the pointers
+ // in the edges may be wrong. Security first here.
+ sal_uInt32 nStartIndex(0);
+
+ for(a = 0; a < nPolygonCount; a++)
+ {
+ const B2DPolygon aPolygonCandidate(aSource.getB2DPolygon(a));
+ const sal_uInt32 nCount(aPolygonCandidate.count());
+
+ if(nCount > 2)
+ {
+ // get the last point of the current polygon
+ B2DPoint* pPrev(&maPoints[nCount + nStartIndex - 1]);
+
+ for(b = 0; b < nCount; b++)
+ {
+ // get next point
+ B2DPoint* pCurr(&maPoints[nStartIndex++]);
+
+ if(fTools::equal(pPrev->getY(), pCurr->getY(), fTools::getSmallValue()))
+ {
+ // horizontal edge, check for single point
+ if(!fTools::equal(pPrev->getX(), pCurr->getX(), fTools::getSmallValue()))
+ {
+ // X-order not needed, just add
+ aTrDeSimpleEdges.push_back(TrDeSimpleEdge(pPrev, pCurr));
+
+ const double fMiddle((pPrev->getY() + pCurr->getY()) * 0.5);
+ pPrev->setY(fMiddle);
+ pCurr->setY(fMiddle);
+ }
+ }
+ else
+ {
+ // vertical edge. Positive Y-direction is guaranteed by the
+ // TrDeEdgeEntry constructor
+ maTrDeEdgeEntries.push_back(TrDeEdgeEntry(pPrev, pCurr, 0));
+ mnInitialEdgeEntryCount++;
+ }
+
+ // prepare next step
+ pPrev = pCurr;
+ }
+ }
+ }
+ }
+
+ if(maTrDeEdgeEntries.size())
+ {
+ // single and initial sort of traversing edges
+ maTrDeEdgeEntries.sort();
+
+ // solve horizontal edges if there are any detected
+ solveHorizontalEdges(aTrDeSimpleEdges);
+ }
+ }
+
+ ~TrapezoidSubdivider()
+ {
+ // delete the extra points created for cuts
+ const sal_uInt32 nCount(maNewPoints.size());
+
+ for(sal_uInt32 a(0); a < nCount; a++)
+ {
+ delete maNewPoints[a];
+ }
+ }
+
+ void Subdivide(B2DTrapezoidVector& ro_Result)
+ {
+ // This is the central subdivider. The strategy is to use the first two entries
+ // from the traversing edges as a potential trapezoid and do the needed corrections
+ // and adaptions on the way.
+ //
+ // There always must be two edges with the same YStart value: When adding the polygons
+ // in the constructor, there is always a topmost point from which two edges start; when
+ // the topmost is an edge, there is a start and end of this edge from which two edges
+ // start. All cases have two edges with same StartY (QED).
+ //
+ // Based on this these edges get corrected when:
+ // - one is longer than the other
+ // - they intersect
+ // - they intersect with other edges
+ // - another edge starts inside the thought trapezoid
+ //
+ // All this cases again produce a valid state so that the first two edges have a common
+ // Ystart again. Some cases lead to a restart of the process, some allow consuming the
+ // edges and create the intended trapezoid.
+ //
+ // Be careful when doing chages here: It is essential to keep all possible paths
+ // in valid states and to be numerically correct. This is especially needed e.g.
+ // by using fTools::equal(..) in the more robust small-value incarnation.
+ B1DRange aLeftRange;
+ B1DRange aRightRange;
+
+ if(!maTrDeEdgeEntries.empty())
+ {
+ // measuring shows that the relation between edges and created trapezoids is
+ // mostly in the 1:1 range, thus reserve as much trapezoids as edges exist. Do
+ // not use maTrDeEdgeEntries.size() since that may be a non-constant time
+ // operation for Lists. Instead, use mnInitialEdgeEntryCount which will contain
+ // the roughly counted adds to the List
+ ro_Result.reserve(ro_Result.size() + mnInitialEdgeEntryCount);
+ }
+
+ while(!maTrDeEdgeEntries.empty())
+ {
+ // Prepare current operator and get first edge
+ TrDeEdgeEntries::iterator aCurrent(maTrDeEdgeEntries.begin());
+ TrDeEdgeEntries::reference aLeft(*aCurrent++);
+
+ if(aCurrent == maTrDeEdgeEntries.end())
+ {
+ // Should not happen: No 2nd edge; consume the single edge
+ // to not have an endless loop and start next. During development
+ // i constantly had breakpoints here, so i am sure enough to add an
+ // assertion here
+ OSL_ENSURE(false, "Trapeziod decomposer in illegal state (!)");
+ maTrDeEdgeEntries.pop_front();
+ continue;
+ }
+
+ // get second edge
+ TrDeEdgeEntries::reference aRight(*aCurrent++);
+
+ if(!fTools::equal(aLeft.getStart().getY(), aRight.getStart().getY(), fTools::getSmallValue()))
+ {
+ // Should not happen: We have a 2nd edge, but YStart is on another
+ // line; consume the single edge to not have an endless loop and start
+ // next. During development i constantly had breakpoints here, so i am
+ // sure enough to add an assertion here
+ OSL_ENSURE(false, "Trapeziod decomposer in illegal state (!)");
+ maTrDeEdgeEntries.pop_front();
+ continue;
+ }
+
+ // aLeft and aRight build a thought trapezoid now. They have a common
+ // start line (same Y for start points). Potentially, one of the edges
+ // is longer than the other. It is only needed to look at the shorter
+ // length which build the potential trapezoid. To do so, get the end points
+ // locally and adapt the evtl. longer one. Use only aLeftEnd and aRightEnd
+ // from here on, not the aLeft.getEnd() or aRight.getEnd() accesses.
+ B2DPoint aLeftEnd(aLeft.getEnd());
+ B2DPoint aRightEnd(aRight.getEnd());
+
+ // check if end points are on the same line. If yes, no adaption
+ // needs to be prepared. Also remember which one actually is longer.
+ const bool bEndOnSameLine(fTools::equal(aLeftEnd.getY(), aRightEnd.getY(), fTools::getSmallValue()));
+ bool bLeftIsLonger(false);
+
+ if(!bEndOnSameLine)
+ {
+ // check which edge is longer and correct accordingly
+ bLeftIsLonger = fTools::more(aLeftEnd.getY(), aRightEnd.getY());
+
+ if(bLeftIsLonger)
+ {
+ aLeftEnd = aLeft.getCutPointForGivenY(aRightEnd.getY());
+ }
+ else
+ {
+ aRightEnd = aRight.getCutPointForGivenY(aLeftEnd.getY());
+ }
+ }
+
+ // check for same start and end points
+ const bool bSameStartPoint(aLeft.getStart().equal(aRight.getStart(), fTools::getSmallValue()));
+ const bool bSameEndPoint(aLeftEnd.equal(aRightEnd, fTools::getSmallValue()));
+
+ // check the simple case that the edges form a 'blind' edge (deadend)
+ if(bSameStartPoint && bSameEndPoint)
+ {
+ // correct the longer edge if prepared
+ if(!bEndOnSameLine)
+ {
+ if(bLeftIsLonger)
+ {
+ B2DPoint* pNewPoint = new B2DPoint(aLeftEnd);
+
+ if(splitEdgeAtGivenPoint(aLeft, *pNewPoint, aCurrent))
+ {
+ maNewPoints.push_back(pNewPoint);
+ }
+ else
+ {
+ delete pNewPoint;
+ }
+ }
+ else
+ {
+ B2DPoint* pNewPoint = new B2DPoint(aRightEnd);
+
+ if(splitEdgeAtGivenPoint(aRight, *pNewPoint, aCurrent))
+ {
+ maNewPoints.push_back(pNewPoint);
+ }
+ else
+ {
+ delete pNewPoint;
+ }
+ }
+ }
+
+ // consume both edges and start next run
+ maTrDeEdgeEntries.pop_front();
+ maTrDeEdgeEntries.pop_front();
+
+ continue;
+ }
+
+ // check if the edges self-intersect. This can only happen when
+ // start and end point are different
+ bool bRangesSet(false);
+
+ if(!(bSameStartPoint || bSameEndPoint))
+ {
+ // get XRanges of edges
+ aLeftRange = B1DRange(aLeft.getStart().getX(), aLeftEnd.getX());
+ aRightRange = B1DRange(aRight.getStart().getX(), aRightEnd.getX());
+ bRangesSet = true;
+
+ // use fast range test first
+ if(aLeftRange.overlaps(aRightRange))
+ {
+ // real cut test and correction. If correction was needed,
+ // start new run
+ if(testAndCorrectEdgeIntersection(aLeft, aRight, aCurrent))
+ {
+ continue;
+ }
+ }
+ }
+
+ // now we need to check if there are intersections with other edges
+ // or if other edges start inside the candidate trapezoid
+ if(aCurrent != maTrDeEdgeEntries.end()
+ && fTools::less(aCurrent->getStart().getY(), aLeftEnd.getY()))
+ {
+ // get XRanges of edges
+ if(!bRangesSet)
+ {
+ aLeftRange = B1DRange(aLeft.getStart().getX(), aLeftEnd.getX());
+ aRightRange = B1DRange(aRight.getStart().getX(), aRightEnd.getX());
+ }
+
+ // build full XRange for fast check
+ B1DRange aAllRange(aLeftRange);
+ aAllRange.expand(aRightRange);
+
+ // prepare loop iterator; aCurrent needs to stay unchanged for
+ // eventual sorted insertions of new EdgeNodes. Also prepare stop flag
+ TrDeEdgeEntries::iterator aLoop(aCurrent);
+ bool bDone(false);
+
+ do
+ {
+ // get compare edge and it's XRange
+ TrDeEdgeEntries::reference aCompare(*aLoop++);
+
+ // avoid edges using the same start point as one of
+ // the edges. These can neither have their start point
+ // in the thought trapezoid nor cut with one of the edges
+ if(aCompare.getStart().equal(aRight.getStart(), fTools::getSmallValue()))
+ {
+ continue;
+ }
+
+ // get compare XRange
+ const B1DRange aCompareRange(aCompare.getStart().getX(), aCompare.getEnd().getX());
+
+ // use fast range test first
+ if(aAllRange.overlaps(aCompareRange))
+ {
+ // check for start point inside thought trapezoid
+ if(fTools::more(aCompare.getStart().getY(), aLeft.getStart().getY()))
+ {
+ // calculate the two possible split points at compare's Y
+ const B2DPoint aSplitLeft(aLeft.getCutPointForGivenY(aCompare.getStart().getY()));
+ const B2DPoint aSplitRight(aRight.getCutPointForGivenY(aCompare.getStart().getY()));
+
+ // check for start point of aCompare being inside thought
+ // trapezoid
+ if(aCompare.getStart().getX() >= aSplitLeft.getX() &&
+ aCompare.getStart().getX() <= aSplitRight.getX())
+ {
+ // is inside, correct and restart loop
+ B2DPoint* pNewLeft = new B2DPoint(aSplitLeft);
+
+ if(splitEdgeAtGivenPoint(aLeft, *pNewLeft, aCurrent))
+ {
+ maNewPoints.push_back(pNewLeft);
+ }
+ else
+ {
+ delete pNewLeft;
+ }
+
+ B2DPoint* pNewRight = new B2DPoint(aSplitRight);
+
+ if(splitEdgeAtGivenPoint(aRight, *pNewRight, aCurrent))
+ {
+ maNewPoints.push_back(pNewRight);
+ }
+ else
+ {
+ delete pNewRight;
+ }
+
+ bDone = true;
+ }
+ }
+
+ if(!bDone && aLeftRange.overlaps(aCompareRange))
+ {
+ // test for concrete cut of compare edge with left edge
+ bDone = testAndCorrectEdgeIntersection(aLeft, aCompare, aCurrent);
+ }
+
+ if(!bDone && aRightRange.overlaps(aCompareRange))
+ {
+ // test for concrete cut of compare edge with Right edge
+ bDone = testAndCorrectEdgeIntersection(aRight, aCompare, aCurrent);
+ }
+ }
+ }
+ while(!bDone
+ && aLoop != maTrDeEdgeEntries.end()
+ && fTools::less(aLoop->getStart().getY(), aLeftEnd.getY()));
+
+ if(bDone)
+ {
+ // something needed to be changed; start next loop
+ continue;
+ }
+ }
+
+ // when we get here, the intended trapezoid can be used. It needs to
+ // be corrected, eventually (if prepared); but this is no reason not to
+ // use it in the same loop iteration
+ if(!bEndOnSameLine)
+ {
+ if(bLeftIsLonger)
+ {
+ B2DPoint* pNewPoint = new B2DPoint(aLeftEnd);
+
+ if(splitEdgeAtGivenPoint(aLeft, *pNewPoint, aCurrent))
+ {
+ maNewPoints.push_back(pNewPoint);
+ }
+ else
+ {
+ delete pNewPoint;
+ }
+ }
+ else
+ {
+ B2DPoint* pNewPoint = new B2DPoint(aRightEnd);
+
+ if(splitEdgeAtGivenPoint(aRight, *pNewPoint, aCurrent))
+ {
+ maNewPoints.push_back(pNewPoint);
+ }
+ else
+ {
+ delete pNewPoint;
+ }
+ }
+ }
+
+ // the two edges start at the same Y, they use the same DeltaY, they
+ // do not cut themselves and not any other edge in range. Create a
+ // B2DTrapezoid and consume both edges
+ ro_Result.push_back(
+ B2DTrapezoid(
+ aLeft.getStart().getX(),
+ aRight.getStart().getX(),
+ aLeft.getStart().getY(),
+ aLeftEnd.getX(),
+ aRightEnd.getX(),
+ aLeftEnd.getY()));
+
+ maTrDeEdgeEntries.pop_front();
+ maTrDeEdgeEntries.pop_front();
+ }
+ }
+ };
+ } // end of anonymous namespace
+} // end of namespace basegfx
+
+//////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+ B2DTrapezoid::B2DTrapezoid(
+ const double& rfTopXLeft,
+ const double& rfTopXRight,
+ const double& rfTopY,
+ const double& rfBottomXLeft,
+ const double& rfBottomXRight,
+ const double& rfBottomY)
+ : mfTopXLeft(rfTopXLeft),
+ mfTopXRight(rfTopXRight),
+ mfTopY(rfTopY),
+ mfBottomXLeft(rfBottomXLeft),
+ mfBottomXRight(rfBottomXRight),
+ mfBottomY(rfBottomY)
+ {
+ // guarantee mfTopXRight >= mfTopXLeft
+ if(mfTopXLeft > mfTopXRight)
+ {
+ std::swap(mfTopXLeft, mfTopXRight);
+ }
+
+ // guarantee mfBottomXRight >= mfBottomXLeft
+ if(mfBottomXLeft > mfBottomXRight)
+ {
+ std::swap(mfBottomXLeft, mfBottomXRight);
+ }
+
+ // guarantee mfBottomY >= mfTopY
+ if(mfTopY > mfBottomY)
+ {
+ std::swap(mfTopY, mfBottomY);
+ std::swap(mfTopXLeft, mfBottomXLeft);
+ std::swap(mfTopXRight, mfBottomXRight);
+ }
+ }
+
+ B2DPolygon B2DTrapezoid::getB2DPolygon() const
+ {
+ B2DPolygon aRetval;
+
+ aRetval.append(B2DPoint(getTopXLeft(), getTopY()));
+ aRetval.append(B2DPoint(getTopXRight(), getTopY()));
+ aRetval.append(B2DPoint(getBottomXRight(), getBottomY()));
+ aRetval.append(B2DPoint(getBottomXLeft(), getBottomY()));
+ aRetval.setClosed(true);
+
+ return aRetval;
+ }
+} // end of namespace basegfx
+
+//////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+ namespace tools
+ {
+ // convert Source PolyPolygon to trapezoids
+ void trapezoidSubdivide(B2DTrapezoidVector& ro_Result, const B2DPolyPolygon& rSourcePolyPolygon)
+ {
+ trapezoidhelper::TrapezoidSubdivider aTrapezoidSubdivider(rSourcePolyPolygon);
+
+ aTrapezoidSubdivider.Subdivide(ro_Result);
+ }
+
+ void createLineTrapezoidFromEdge(
+ B2DTrapezoidVector& ro_Result,
+ const B2DPoint& rPointA,
+ const B2DPoint& rPointB,
+ double fLineWidth)
+ {
+ if(fTools::lessOrEqual(fLineWidth, 0.0))
+ {
+ // no line witdh
+ return;
+ }
+
+ if(rPointA.equal(rPointB, fTools::getSmallValue()))
+ {
+ // points are equal, no edge
+ return;
+ }
+
+ const double fHalfLineWidth(0.5 * fLineWidth);
+
+ if(fTools::equal(rPointA.getX(), rPointB.getX(), fTools::getSmallValue()))
+ {
+ // vertical line
+ const double fLeftX(rPointA.getX() - fHalfLineWidth);
+ const double fRightX(rPointA.getX() + fHalfLineWidth);
+
+ ro_Result.push_back(
+ B2DTrapezoid(
+ fLeftX,
+ fRightX,
+ std::min(rPointA.getY(), rPointB.getY()),
+ fLeftX,
+ fRightX,
+ std::max(rPointA.getY(), rPointB.getY())));
+ }
+ else if(fTools::equal(rPointA.getY(), rPointB.getY(), fTools::getSmallValue()))
+ {
+ // horizontal line
+ const double fLeftX(std::min(rPointA.getX(), rPointB.getX()));
+ const double fRightX(std::max(rPointA.getX(), rPointB.getX()));
+
+ ro_Result.push_back(
+ B2DTrapezoid(
+ fLeftX,
+ fRightX,
+ rPointA.getY() - fHalfLineWidth,
+ fLeftX,
+ fRightX,
+ rPointA.getY() + fHalfLineWidth));
+ }
+ else
+ {
+ // diagonal line
+ // create perpendicular vector
+ const B2DVector aDelta(rPointB - rPointA);
+ B2DVector aPerpendicular(-aDelta.getY(), aDelta.getX());
+ aPerpendicular.setLength(fHalfLineWidth);
+
+ // create StartLow, StartHigh, EndLow and EndHigh
+ const B2DPoint aStartLow(rPointA + aPerpendicular);
+ const B2DPoint aStartHigh(rPointA - aPerpendicular);
+ const B2DPoint aEndHigh(rPointB - aPerpendicular);
+ const B2DPoint aEndLow(rPointB + aPerpendicular);
+
+ // create EdgeEntries
+ basegfx::trapezoidhelper::TrDeEdgeEntries aTrDeEdgeEntries;
+
+ aTrDeEdgeEntries.push_back(basegfx::trapezoidhelper::TrDeEdgeEntry(&aStartLow, &aStartHigh, 0));
+ aTrDeEdgeEntries.push_back(basegfx::trapezoidhelper::TrDeEdgeEntry(&aStartHigh, &aEndHigh, 0));
+ aTrDeEdgeEntries.push_back(basegfx::trapezoidhelper::TrDeEdgeEntry(&aEndHigh, &aEndLow, 0));
+ aTrDeEdgeEntries.push_back(basegfx::trapezoidhelper::TrDeEdgeEntry(&aEndLow, &aStartLow, 0));
+ aTrDeEdgeEntries.sort();
+
+ // here we know we have exactly four edges, and they do not cut, touch or
+ // intersect. This makes processing much easier. Get the first two as start
+ // edges for the thought trapezoid
+ basegfx::trapezoidhelper::TrDeEdgeEntries::iterator aCurrent(aTrDeEdgeEntries.begin());
+ basegfx::trapezoidhelper::TrDeEdgeEntries::reference aLeft(*aCurrent++);
+ basegfx::trapezoidhelper::TrDeEdgeEntries::reference aRight(*aCurrent++);
+ const bool bEndOnSameLine(fTools::equal(aLeft.getEnd().getY(), aRight.getEnd().getY(), fTools::getSmallValue()));
+
+ if(bEndOnSameLine)
+ {
+ // create two triangle trapezoids
+ ro_Result.push_back(
+ B2DTrapezoid(
+ aLeft.getStart().getX(),
+ aRight.getStart().getX(),
+ aLeft.getStart().getY(),
+ aLeft.getEnd().getX(),
+ aRight.getEnd().getX(),
+ aLeft.getEnd().getY()));
+
+ basegfx::trapezoidhelper::TrDeEdgeEntries::reference aLeft2(*aCurrent++);
+ basegfx::trapezoidhelper::TrDeEdgeEntries::reference aRight2(*aCurrent++);
+
+ ro_Result.push_back(
+ B2DTrapezoid(
+ aLeft2.getStart().getX(),
+ aRight2.getStart().getX(),
+ aLeft2.getStart().getY(),
+ aLeft2.getEnd().getX(),
+ aRight2.getEnd().getX(),
+ aLeft2.getEnd().getY()));
+ }
+ else
+ {
+ // create three trapezoids. Check which edge is longer and
+ // correct accordingly
+ const bool bLeftIsLonger(fTools::more(aLeft.getEnd().getY(), aRight.getEnd().getY()));
+
+ if(bLeftIsLonger)
+ {
+ basegfx::trapezoidhelper::TrDeEdgeEntries::reference aRight2(*aCurrent++);
+ basegfx::trapezoidhelper::TrDeEdgeEntries::reference aLeft2(*aCurrent++);
+ const B2DPoint aSplitLeft(aLeft.getCutPointForGivenY(aRight.getEnd().getY()));
+ const B2DPoint aSplitRight(aRight2.getCutPointForGivenY(aLeft.getEnd().getY()));
+
+ ro_Result.push_back(
+ B2DTrapezoid(
+ aLeft.getStart().getX(),
+ aRight.getStart().getX(),
+ aLeft.getStart().getY(),
+ aSplitLeft.getX(),
+ aRight.getEnd().getX(),
+ aRight.getEnd().getY()));
+
+ ro_Result.push_back(
+ B2DTrapezoid(
+ aSplitLeft.getX(),
+ aRight.getEnd().getX(),
+ aRight.getEnd().getY(),
+ aLeft2.getStart().getX(),
+ aSplitRight.getX(),
+ aLeft2.getStart().getY()));
+
+ ro_Result.push_back(
+ B2DTrapezoid(
+ aLeft2.getStart().getX(),
+ aSplitRight.getX(),
+ aLeft2.getStart().getY(),
+ aLeft2.getEnd().getX(),
+ aRight2.getEnd().getX(),
+ aLeft2.getEnd().getY()));
+ }
+ else
+ {
+ basegfx::trapezoidhelper::TrDeEdgeEntries::reference aLeft2(*aCurrent++);
+ basegfx::trapezoidhelper::TrDeEdgeEntries::reference aRight2(*aCurrent++);
+ const B2DPoint aSplitRight(aRight.getCutPointForGivenY(aLeft.getEnd().getY()));
+ const B2DPoint aSplitLeft(aLeft2.getCutPointForGivenY(aRight.getEnd().getY()));
+
+ ro_Result.push_back(
+ B2DTrapezoid(
+ aLeft.getStart().getX(),
+ aRight.getStart().getX(),
+ aLeft.getStart().getY(),
+ aLeft.getEnd().getX(),
+ aSplitRight.getX(),
+ aLeft.getEnd().getY()));
+
+ ro_Result.push_back(
+ B2DTrapezoid(
+ aLeft.getEnd().getX(),
+ aSplitRight.getX(),
+ aLeft.getEnd().getY(),
+ aSplitLeft.getX(),
+ aRight.getEnd().getX(),
+ aRight2.getStart().getY()));
+
+ ro_Result.push_back(
+ B2DTrapezoid(
+ aSplitLeft.getX(),
+ aRight.getEnd().getX(),
+ aRight2.getStart().getY(),
+ aLeft2.getEnd().getX(),
+ aRight2.getEnd().getX(),
+ aLeft2.getEnd().getY()));
+ }
+ }
+ }
+ }
+
+ void createLineTrapezoidFromB2DPolygon(
+ B2DTrapezoidVector& ro_Result,
+ const B2DPolygon& rPolygon,
+ double fLineWidth)
+ {
+ if(fTools::lessOrEqual(fLineWidth, 0.0))
+ {
+ return;
+ }
+
+ // ensure there are no curves used
+ B2DPolygon aSource(rPolygon);
+
+ if(aSource.areControlPointsUsed())
+ {
+ const double fPrecisionFactor = 0.25;
+ aSource = adaptiveSubdivideByDistance( aSource, fLineWidth * fPrecisionFactor );
+ }
+
+ const sal_uInt32 nPointCount(aSource.count());
+
+ if(!nPointCount)
+ {
+ return;
+ }
+
+ const sal_uInt32 nEdgeCount(aSource.isClosed() ? nPointCount : nPointCount - 1);
+ B2DPoint aCurrent(aSource.getB2DPoint(0));
+
+ ro_Result.reserve(ro_Result.size() + (3 * nEdgeCount));
+
+ for(sal_uInt32 a(0); a < nEdgeCount; a++)
+ {
+ const sal_uInt32 nNextIndex((a + 1) % nPointCount);
+ const B2DPoint aNext(aSource.getB2DPoint(nNextIndex));
+
+ createLineTrapezoidFromEdge(ro_Result, aCurrent, aNext, fLineWidth);
+ aCurrent = aNext;
+ }
+ }
+
+ void createLineTrapezoidFromB2DPolyPolygon(
+ B2DTrapezoidVector& ro_Result,
+ const B2DPolyPolygon& rPolyPolygon,
+ double fLineWidth)
+ {
+ if(fTools::lessOrEqual(fLineWidth, 0.0))
+ {
+ return;
+ }
+
+ // ensure there are no curves used
+ B2DPolyPolygon aSource(rPolyPolygon);
+
+ if(aSource.areControlPointsUsed())
+ {
+ aSource = aSource.getDefaultAdaptiveSubdivision();
+ }
+
+ const sal_uInt32 nCount(aSource.count());
+
+ if(!nCount)
+ {
+ return;
+ }
+
+ for(sal_uInt32 a(0); a < nCount; a++)
+ {
+ createLineTrapezoidFromB2DPolygon(
+ ro_Result,
+ aSource.getB2DPolygon(a),
+ fLineWidth);
+ }
+ }
+
+ } // end of namespace tools
+} // end of namespace basegfx
+
+//////////////////////////////////////////////////////////////////////////////
+// eof
diff --git a/basegfx/source/polygon/b3dpolygon.cxx b/basegfx/source/polygon/b3dpolygon.cxx
new file mode 100644
index 000000000000..1985d3301d4b
--- /dev/null
+++ b/basegfx/source/polygon/b3dpolygon.cxx
@@ -0,0 +1,1816 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basegfx.hxx"
+#include <osl/diagnose.h>
+#include <basegfx/polygon/b3dpolygon.hxx>
+#include <basegfx/point/b3dpoint.hxx>
+#include <basegfx/matrix/b3dhommatrix.hxx>
+#include <rtl/instance.hxx>
+#include <basegfx/point/b2dpoint.hxx>
+#include <basegfx/color/bcolor.hxx>
+#include <basegfx/matrix/b2dhommatrix.hxx>
+#include <vector>
+#include <algorithm>
+
+//////////////////////////////////////////////////////////////////////////////
+
+class CoordinateData3D
+{
+ basegfx::B3DPoint maPoint;
+
+public:
+ CoordinateData3D()
+ : maPoint()
+ {
+ }
+
+ explicit CoordinateData3D(const basegfx::B3DPoint& rData)
+ : maPoint(rData)
+ {
+ }
+
+ const basegfx::B3DPoint& getCoordinate() const
+ {
+ return maPoint;
+ }
+
+ void setCoordinate(const basegfx::B3DPoint& rValue)
+ {
+ if(rValue != maPoint)
+ maPoint = rValue;
+ }
+
+ bool operator==(const CoordinateData3D& rData) const
+ {
+ return (maPoint == rData.getCoordinate());
+ }
+
+ void transform(const basegfx::B3DHomMatrix& rMatrix)
+ {
+ maPoint *= rMatrix;
+ }
+};
+
+//////////////////////////////////////////////////////////////////////////////
+
+class CoordinateDataArray3D
+{
+ typedef ::std::vector< CoordinateData3D > CoordinateData3DVector;
+
+ CoordinateData3DVector maVector;
+
+public:
+ explicit CoordinateDataArray3D(sal_uInt32 nCount)
+ : maVector(nCount)
+ {
+ }
+
+ explicit CoordinateDataArray3D(const CoordinateDataArray3D& rOriginal)
+ : maVector(rOriginal.maVector)
+ {
+ }
+
+ CoordinateDataArray3D(const CoordinateDataArray3D& rOriginal, sal_uInt32 nIndex, sal_uInt32 nCount)
+ : maVector(rOriginal.maVector.begin() + nIndex, rOriginal.maVector.begin() + (nIndex + nCount))
+ {
+ }
+
+ ~CoordinateDataArray3D()
+ {
+ }
+
+ ::basegfx::B3DVector getNormal() const
+ {
+ ::basegfx::B3DVector aRetval;
+ const sal_uInt32 nPointCount(maVector.size());
+
+ if(nPointCount > 2)
+ {
+ sal_uInt32 nISmallest(0);
+ sal_uInt32 a(0);
+ const basegfx::B3DPoint* pSmallest(&maVector[0].getCoordinate());
+ const basegfx::B3DPoint* pNext(0);
+ const basegfx::B3DPoint* pPrev(0);
+
+ // To guarantee a correctly oriented point, choose an outmost one
+ // which then cannot be concave
+ for(a = 1; a < nPointCount; a++)
+ {
+ const basegfx::B3DPoint& rCandidate = maVector[a].getCoordinate();
+
+ if((rCandidate.getX() < pSmallest->getX())
+ || (rCandidate.getX() == pSmallest->getX() && rCandidate.getY() < pSmallest->getY())
+ || (rCandidate.getX() == pSmallest->getX() && rCandidate.getY() == pSmallest->getY() && rCandidate.getZ() < pSmallest->getZ()))
+ {
+ nISmallest = a;
+ pSmallest = &rCandidate;
+ }
+ }
+
+ // look for a next point different from minimal one
+ for(a = (nISmallest + 1) % nPointCount; a != nISmallest; a = (a + 1) % nPointCount)
+ {
+ const basegfx::B3DPoint& rCandidate = maVector[a].getCoordinate();
+
+ if(!rCandidate.equal(*pSmallest))
+ {
+ pNext = &rCandidate;
+ break;
+ }
+ }
+
+ // look for a previous point different from minimal one
+ for(a = (nISmallest + nPointCount - 1) % nPointCount; a != nISmallest; a = (a + nPointCount - 1) % nPointCount)
+ {
+ const basegfx::B3DPoint& rCandidate = maVector[a].getCoordinate();
+
+ if(!rCandidate.equal(*pSmallest))
+ {
+ pPrev = &rCandidate;
+ break;
+ }
+ }
+
+ // we always have a minimal point. If we also have a different next and previous,
+ // we can calculate the normal
+ if(pNext && pPrev)
+ {
+ const basegfx::B3DVector aPrev(*pPrev - *pSmallest);
+ const basegfx::B3DVector aNext(*pNext - *pSmallest);
+
+ aRetval = cross(aPrev, aNext);
+ aRetval.normalize();
+ }
+ }
+
+ return aRetval;
+ }
+
+ sal_uInt32 count() const
+ {
+ return maVector.size();
+ }
+
+ bool operator==(const CoordinateDataArray3D& rCandidate) const
+ {
+ return (maVector == rCandidate.maVector);
+ }
+
+ const basegfx::B3DPoint& getCoordinate(sal_uInt32 nIndex) const
+ {
+ return maVector[nIndex].getCoordinate();
+ }
+
+ void setCoordinate(sal_uInt32 nIndex, const basegfx::B3DPoint& rValue)
+ {
+ maVector[nIndex].setCoordinate(rValue);
+ }
+
+ void insert(sal_uInt32 nIndex, const CoordinateData3D& rValue, sal_uInt32 nCount)
+ {
+ if(nCount)
+ {
+ // add nCount copies of rValue
+ CoordinateData3DVector::iterator aIndex(maVector.begin());
+ aIndex += nIndex;
+ maVector.insert(aIndex, nCount, rValue);
+ }
+ }
+
+ void insert(sal_uInt32 nIndex, const CoordinateDataArray3D& rSource)
+ {
+ const sal_uInt32 nCount(rSource.maVector.size());
+
+ if(nCount)
+ {
+ // insert data
+ CoordinateData3DVector::iterator aIndex(maVector.begin());
+ aIndex += nIndex;
+ CoordinateData3DVector::const_iterator aStart(rSource.maVector.begin());
+ CoordinateData3DVector::const_iterator aEnd(rSource.maVector.end());
+ maVector.insert(aIndex, aStart, aEnd);
+ }
+ }
+
+ void remove(sal_uInt32 nIndex, sal_uInt32 nCount)
+ {
+ if(nCount)
+ {
+ // remove point data
+ CoordinateData3DVector::iterator aStart(maVector.begin());
+ aStart += nIndex;
+ const CoordinateData3DVector::iterator aEnd(aStart + nCount);
+ maVector.erase(aStart, aEnd);
+ }
+ }
+
+ void flip()
+ {
+ if(maVector.size() > 1)
+ {
+ const sal_uInt32 nHalfSize(maVector.size() >> 1L);
+ CoordinateData3DVector::iterator aStart(maVector.begin());
+ CoordinateData3DVector::iterator aEnd(maVector.end() - 1L);
+
+ for(sal_uInt32 a(0); a < nHalfSize; a++)
+ {
+ ::std::swap(*aStart, *aEnd);
+ aStart++;
+ aEnd--;
+ }
+ }
+ }
+
+ void transform(const ::basegfx::B3DHomMatrix& rMatrix)
+ {
+ CoordinateData3DVector::iterator aStart(maVector.begin());
+ CoordinateData3DVector::iterator aEnd(maVector.end());
+
+ for(; aStart != aEnd; aStart++)
+ {
+ aStart->transform(rMatrix);
+ }
+ }
+};
+
+//////////////////////////////////////////////////////////////////////////////
+
+class BColorArray
+{
+ typedef ::std::vector< ::basegfx::BColor > BColorDataVector;
+
+ BColorDataVector maVector;
+ sal_uInt32 mnUsedEntries;
+
+public:
+ explicit BColorArray(sal_uInt32 nCount)
+ : maVector(nCount),
+ mnUsedEntries(0L)
+ {
+ }
+
+ explicit BColorArray(const BColorArray& rOriginal)
+ : maVector(rOriginal.maVector),
+ mnUsedEntries(rOriginal.mnUsedEntries)
+ {
+ }
+
+ BColorArray(const BColorArray& rOriginal, sal_uInt32 nIndex, sal_uInt32 nCount)
+ : maVector(),
+ mnUsedEntries(0L)
+ {
+ BColorDataVector::const_iterator aStart(rOriginal.maVector.begin());
+ aStart += nIndex;
+ BColorDataVector::const_iterator aEnd(aStart);
+ aEnd += nCount;
+ maVector.reserve(nCount);
+
+ for(; aStart != aEnd; aStart++)
+ {
+ if(!aStart->equalZero())
+ mnUsedEntries++;
+
+ maVector.push_back(*aStart);
+ }
+ }
+
+ ~BColorArray()
+ {
+ }
+
+ sal_uInt32 count() const
+ {
+ return maVector.size();
+ }
+
+ bool operator==(const BColorArray& rCandidate) const
+ {
+ return (maVector == rCandidate.maVector);
+ }
+
+ bool isUsed() const
+ {
+ return (0L != mnUsedEntries);
+ }
+
+ const ::basegfx::BColor& getBColor(sal_uInt32 nIndex) const
+ {
+ return maVector[nIndex];
+ }
+
+ void setBColor(sal_uInt32 nIndex, const ::basegfx::BColor& rValue)
+ {
+ bool bWasUsed(mnUsedEntries && !maVector[nIndex].equalZero());
+ bool bIsUsed(!rValue.equalZero());
+
+ if(bWasUsed)
+ {
+ if(bIsUsed)
+ {
+ maVector[nIndex] = rValue;
+ }
+ else
+ {
+ maVector[nIndex] = ::basegfx::BColor::getEmptyBColor();
+ mnUsedEntries--;
+ }
+ }
+ else
+ {
+ if(bIsUsed)
+ {
+ maVector[nIndex] = rValue;
+ mnUsedEntries++;
+ }
+ }
+ }
+
+ void insert(sal_uInt32 nIndex, const ::basegfx::BColor& rValue, sal_uInt32 nCount)
+ {
+ if(nCount)
+ {
+ // add nCount copies of rValue
+ BColorDataVector::iterator aIndex(maVector.begin());
+ aIndex += nIndex;
+ maVector.insert(aIndex, nCount, rValue);
+
+ if(!rValue.equalZero())
+ mnUsedEntries += nCount;
+ }
+ }
+
+ void insert(sal_uInt32 nIndex, const BColorArray& rSource)
+ {
+ const sal_uInt32 nCount(rSource.maVector.size());
+
+ if(nCount)
+ {
+ // insert data
+ BColorDataVector::iterator aIndex(maVector.begin());
+ aIndex += nIndex;
+ BColorDataVector::const_iterator aStart(rSource.maVector.begin());
+ BColorDataVector::const_iterator aEnd(rSource.maVector.end());
+ maVector.insert(aIndex, aStart, aEnd);
+
+ for(; aStart != aEnd; aStart++)
+ {
+ if(!aStart->equalZero())
+ mnUsedEntries++;
+ }
+ }
+ }
+
+ void remove(sal_uInt32 nIndex, sal_uInt32 nCount)
+ {
+ if(nCount)
+ {
+ const BColorDataVector::iterator aDeleteStart(maVector.begin() + nIndex);
+ const BColorDataVector::iterator aDeleteEnd(aDeleteStart + nCount);
+ BColorDataVector::const_iterator aStart(aDeleteStart);
+
+ for(; mnUsedEntries && aStart != aDeleteEnd; aStart++)
+ {
+ if(!aStart->equalZero())
+ mnUsedEntries--;
+ }
+
+ // remove point data
+ maVector.erase(aDeleteStart, aDeleteEnd);
+ }
+ }
+
+ void flip()
+ {
+ if(maVector.size() > 1)
+ {
+ const sal_uInt32 nHalfSize(maVector.size() >> 1L);
+ BColorDataVector::iterator aStart(maVector.begin());
+ BColorDataVector::iterator aEnd(maVector.end() - 1L);
+
+ for(sal_uInt32 a(0); a < nHalfSize; a++)
+ {
+ ::std::swap(*aStart, *aEnd);
+ aStart++;
+ aEnd--;
+ }
+ }
+ }
+};
+
+//////////////////////////////////////////////////////////////////////////////
+
+class NormalsArray3D
+{
+ typedef ::std::vector< ::basegfx::B3DVector > NormalsData3DVector;
+
+ NormalsData3DVector maVector;
+ sal_uInt32 mnUsedEntries;
+
+public:
+ explicit NormalsArray3D(sal_uInt32 nCount)
+ : maVector(nCount),
+ mnUsedEntries(0L)
+ {
+ }
+
+ explicit NormalsArray3D(const NormalsArray3D& rOriginal)
+ : maVector(rOriginal.maVector),
+ mnUsedEntries(rOriginal.mnUsedEntries)
+ {
+ }
+
+ NormalsArray3D(const NormalsArray3D& rOriginal, sal_uInt32 nIndex, sal_uInt32 nCount)
+ : maVector(),
+ mnUsedEntries(0L)
+ {
+ NormalsData3DVector::const_iterator aStart(rOriginal.maVector.begin());
+ aStart += nIndex;
+ NormalsData3DVector::const_iterator aEnd(aStart);
+ aEnd += nCount;
+ maVector.reserve(nCount);
+
+ for(; aStart != aEnd; aStart++)
+ {
+ if(!aStart->equalZero())
+ mnUsedEntries++;
+
+ maVector.push_back(*aStart);
+ }
+ }
+
+ ~NormalsArray3D()
+ {
+ }
+
+ sal_uInt32 count() const
+ {
+ return maVector.size();
+ }
+
+ bool operator==(const NormalsArray3D& rCandidate) const
+ {
+ return (maVector == rCandidate.maVector);
+ }
+
+ bool isUsed() const
+ {
+ return (0L != mnUsedEntries);
+ }
+
+ const ::basegfx::B3DVector& getNormal(sal_uInt32 nIndex) const
+ {
+ return maVector[nIndex];
+ }
+
+ void setNormal(sal_uInt32 nIndex, const ::basegfx::B3DVector& rValue)
+ {
+ bool bWasUsed(mnUsedEntries && !maVector[nIndex].equalZero());
+ bool bIsUsed(!rValue.equalZero());
+
+ if(bWasUsed)
+ {
+ if(bIsUsed)
+ {
+ maVector[nIndex] = rValue;
+ }
+ else
+ {
+ maVector[nIndex] = ::basegfx::B3DVector::getEmptyVector();
+ mnUsedEntries--;
+ }
+ }
+ else
+ {
+ if(bIsUsed)
+ {
+ maVector[nIndex] = rValue;
+ mnUsedEntries++;
+ }
+ }
+ }
+
+ void insert(sal_uInt32 nIndex, const ::basegfx::B3DVector& rValue, sal_uInt32 nCount)
+ {
+ if(nCount)
+ {
+ // add nCount copies of rValue
+ NormalsData3DVector::iterator aIndex(maVector.begin());
+ aIndex += nIndex;
+ maVector.insert(aIndex, nCount, rValue);
+
+ if(!rValue.equalZero())
+ mnUsedEntries += nCount;
+ }
+ }
+
+ void insert(sal_uInt32 nIndex, const NormalsArray3D& rSource)
+ {
+ const sal_uInt32 nCount(rSource.maVector.size());
+
+ if(nCount)
+ {
+ // insert data
+ NormalsData3DVector::iterator aIndex(maVector.begin());
+ aIndex += nIndex;
+ NormalsData3DVector::const_iterator aStart(rSource.maVector.begin());
+ NormalsData3DVector::const_iterator aEnd(rSource.maVector.end());
+ maVector.insert(aIndex, aStart, aEnd);
+
+ for(; aStart != aEnd; aStart++)
+ {
+ if(!aStart->equalZero())
+ mnUsedEntries++;
+ }
+ }
+ }
+
+ void remove(sal_uInt32 nIndex, sal_uInt32 nCount)
+ {
+ if(nCount)
+ {
+ const NormalsData3DVector::iterator aDeleteStart(maVector.begin() + nIndex);
+ const NormalsData3DVector::iterator aDeleteEnd(aDeleteStart + nCount);
+ NormalsData3DVector::const_iterator aStart(aDeleteStart);
+
+ for(; mnUsedEntries && aStart != aDeleteEnd; aStart++)
+ {
+ if(!aStart->equalZero())
+ mnUsedEntries--;
+ }
+
+ // remove point data
+ maVector.erase(aDeleteStart, aDeleteEnd);
+ }
+ }
+
+ void flip()
+ {
+ if(maVector.size() > 1)
+ {
+ const sal_uInt32 nHalfSize(maVector.size() >> 1L);
+ NormalsData3DVector::iterator aStart(maVector.begin());
+ NormalsData3DVector::iterator aEnd(maVector.end() - 1L);
+
+ for(sal_uInt32 a(0); a < nHalfSize; a++)
+ {
+ ::std::swap(*aStart, *aEnd);
+ aStart++;
+ aEnd--;
+ }
+ }
+ }
+
+ void transform(const basegfx::B3DHomMatrix& rMatrix)
+ {
+ NormalsData3DVector::iterator aStart(maVector.begin());
+ NormalsData3DVector::iterator aEnd(maVector.end());
+
+ for(; aStart != aEnd; aStart++)
+ {
+ (*aStart) *= rMatrix;
+ }
+ }
+};
+
+//////////////////////////////////////////////////////////////////////////////
+
+class TextureCoordinate2D
+{
+ typedef ::std::vector< ::basegfx::B2DPoint > TextureData2DVector;
+
+ TextureData2DVector maVector;
+ sal_uInt32 mnUsedEntries;
+
+public:
+ explicit TextureCoordinate2D(sal_uInt32 nCount)
+ : maVector(nCount),
+ mnUsedEntries(0L)
+ {
+ }
+
+ explicit TextureCoordinate2D(const TextureCoordinate2D& rOriginal)
+ : maVector(rOriginal.maVector),
+ mnUsedEntries(rOriginal.mnUsedEntries)
+ {
+ }
+
+ TextureCoordinate2D(const TextureCoordinate2D& rOriginal, sal_uInt32 nIndex, sal_uInt32 nCount)
+ : maVector(),
+ mnUsedEntries(0L)
+ {
+ TextureData2DVector::const_iterator aStart(rOriginal.maVector.begin());
+ aStart += nIndex;
+ TextureData2DVector::const_iterator aEnd(aStart);
+ aEnd += nCount;
+ maVector.reserve(nCount);
+
+ for(; aStart != aEnd; aStart++)
+ {
+ if(!aStart->equalZero())
+ mnUsedEntries++;
+
+ maVector.push_back(*aStart);
+ }
+ }
+
+ ~TextureCoordinate2D()
+ {
+ }
+
+ sal_uInt32 count() const
+ {
+ return maVector.size();
+ }
+
+ bool operator==(const TextureCoordinate2D& rCandidate) const
+ {
+ return (maVector == rCandidate.maVector);
+ }
+
+ bool isUsed() const
+ {
+ return (0L != mnUsedEntries);
+ }
+
+ const ::basegfx::B2DPoint& getTextureCoordinate(sal_uInt32 nIndex) const
+ {
+ return maVector[nIndex];
+ }
+
+ void setTextureCoordinate(sal_uInt32 nIndex, const ::basegfx::B2DPoint& rValue)
+ {
+ bool bWasUsed(mnUsedEntries && !maVector[nIndex].equalZero());
+ bool bIsUsed(!rValue.equalZero());
+
+ if(bWasUsed)
+ {
+ if(bIsUsed)
+ {
+ maVector[nIndex] = rValue;
+ }
+ else
+ {
+ maVector[nIndex] = ::basegfx::B2DPoint::getEmptyPoint();
+ mnUsedEntries--;
+ }
+ }
+ else
+ {
+ if(bIsUsed)
+ {
+ maVector[nIndex] = rValue;
+ mnUsedEntries++;
+ }
+ }
+ }
+
+ void insert(sal_uInt32 nIndex, const ::basegfx::B2DPoint& rValue, sal_uInt32 nCount)
+ {
+ if(nCount)
+ {
+ // add nCount copies of rValue
+ TextureData2DVector::iterator aIndex(maVector.begin());
+ aIndex += nIndex;
+ maVector.insert(aIndex, nCount, rValue);
+
+ if(!rValue.equalZero())
+ mnUsedEntries += nCount;
+ }
+ }
+
+ void insert(sal_uInt32 nIndex, const TextureCoordinate2D& rSource)
+ {
+ const sal_uInt32 nCount(rSource.maVector.size());
+
+ if(nCount)
+ {
+ // insert data
+ TextureData2DVector::iterator aIndex(maVector.begin());
+ aIndex += nIndex;
+ TextureData2DVector::const_iterator aStart(rSource.maVector.begin());
+ TextureData2DVector::const_iterator aEnd(rSource.maVector.end());
+ maVector.insert(aIndex, aStart, aEnd);
+
+ for(; aStart != aEnd; aStart++)
+ {
+ if(!aStart->equalZero())
+ mnUsedEntries++;
+ }
+ }
+ }
+
+ void remove(sal_uInt32 nIndex, sal_uInt32 nCount)
+ {
+ if(nCount)
+ {
+ const TextureData2DVector::iterator aDeleteStart(maVector.begin() + nIndex);
+ const TextureData2DVector::iterator aDeleteEnd(aDeleteStart + nCount);
+ TextureData2DVector::const_iterator aStart(aDeleteStart);
+
+ for(; mnUsedEntries && aStart != aDeleteEnd; aStart++)
+ {
+ if(!aStart->equalZero())
+ mnUsedEntries--;
+ }
+
+ // remove point data
+ maVector.erase(aDeleteStart, aDeleteEnd);
+ }
+ }
+
+ void flip()
+ {
+ if(maVector.size() > 1)
+ {
+ const sal_uInt32 nHalfSize(maVector.size() >> 1L);
+ TextureData2DVector::iterator aStart(maVector.begin());
+ TextureData2DVector::iterator aEnd(maVector.end() - 1L);
+
+ for(sal_uInt32 a(0); a < nHalfSize; a++)
+ {
+ ::std::swap(*aStart, *aEnd);
+ aStart++;
+ aEnd--;
+ }
+ }
+ }
+
+ void transform(const ::basegfx::B2DHomMatrix& rMatrix)
+ {
+ TextureData2DVector::iterator aStart(maVector.begin());
+ TextureData2DVector::iterator aEnd(maVector.end());
+
+ for(; aStart != aEnd; aStart++)
+ {
+ (*aStart) *= rMatrix;
+ }
+ }
+};
+
+//////////////////////////////////////////////////////////////////////////////
+
+class ImplB3DPolygon
+{
+ // The point vector. This vector exists always and defines the
+ // count of members.
+ CoordinateDataArray3D maPoints;
+
+ // The BColor vector. This vectors are created on demand
+ // and may be zero.
+ BColorArray* mpBColors;
+
+ // The Normals vector. This vectors are created on demand
+ // and may be zero.
+ NormalsArray3D* mpNormals;
+
+ // The TextureCoordinates vector. This vectors are created on demand
+ // and may be zero.
+ TextureCoordinate2D* mpTextureCoordiantes;
+
+ // The calculated plane normal. mbPlaneNormalValid says if it's valid.
+ ::basegfx::B3DVector maPlaneNormal;
+
+ // bitfield
+ // flag which decides if this polygon is opened or closed
+ unsigned mbIsClosed : 1;
+
+ // flag which says if maPlaneNormal is up-to-date
+ unsigned mbPlaneNormalValid : 1;
+
+protected:
+ void invalidatePlaneNormal()
+ {
+ if(mbPlaneNormalValid)
+ {
+ mbPlaneNormalValid = false;
+ }
+ }
+
+public:
+ // This constructor is only used from the static identity polygon, thus
+ // the RefCount is set to 1 to never 'delete' this static incarnation.
+ ImplB3DPolygon()
+ : maPoints(0L),
+ mpBColors(0L),
+ mpNormals(0L),
+ mpTextureCoordiantes(0L),
+ maPlaneNormal(::basegfx::B3DVector::getEmptyVector()),
+ mbIsClosed(false),
+ mbPlaneNormalValid(true)
+ {
+ // complete initialization with defaults
+ }
+
+ ImplB3DPolygon(const ImplB3DPolygon& rToBeCopied)
+ : maPoints(rToBeCopied.maPoints),
+ mpBColors(0L),
+ mpNormals(0L),
+ mpTextureCoordiantes(0L),
+ maPlaneNormal(rToBeCopied.maPlaneNormal),
+ mbIsClosed(rToBeCopied.mbIsClosed),
+ mbPlaneNormalValid(rToBeCopied.mbPlaneNormalValid)
+ {
+ // complete initialization using copy
+ if(rToBeCopied.mpBColors && rToBeCopied.mpBColors->isUsed())
+ {
+ mpBColors = new BColorArray(*rToBeCopied.mpBColors);
+ }
+
+ if(rToBeCopied.mpNormals && rToBeCopied.mpNormals->isUsed())
+ {
+ mpNormals = new NormalsArray3D(*rToBeCopied.mpNormals);
+ }
+
+ if(rToBeCopied.mpTextureCoordiantes && rToBeCopied.mpTextureCoordiantes->isUsed())
+ {
+ mpTextureCoordiantes = new TextureCoordinate2D(*rToBeCopied.mpTextureCoordiantes);
+ }
+ }
+
+ ImplB3DPolygon(const ImplB3DPolygon& rToBeCopied, sal_uInt32 nIndex, sal_uInt32 nCount)
+ : maPoints(rToBeCopied.maPoints, nIndex, nCount),
+ mpBColors(0L),
+ mpNormals(0L),
+ mpTextureCoordiantes(0L),
+ maPlaneNormal(::basegfx::B3DVector::getEmptyVector()),
+ mbIsClosed(rToBeCopied.mbIsClosed),
+ mbPlaneNormalValid(false)
+ {
+ // complete initialization using partly copy
+ if(rToBeCopied.mpBColors && rToBeCopied.mpBColors->isUsed())
+ {
+ mpBColors = new BColorArray(*rToBeCopied.mpBColors, nIndex, nCount);
+
+ if(!mpBColors->isUsed())
+ {
+ delete mpBColors;
+ mpBColors = 0L;
+ }
+ }
+
+ if(rToBeCopied.mpNormals && rToBeCopied.mpNormals->isUsed())
+ {
+ mpNormals = new NormalsArray3D(*rToBeCopied.mpNormals, nIndex, nCount);
+
+ if(!mpNormals->isUsed())
+ {
+ delete mpNormals;
+ mpNormals = 0L;
+ }
+ }
+
+ if(rToBeCopied.mpTextureCoordiantes && rToBeCopied.mpTextureCoordiantes->isUsed())
+ {
+ mpTextureCoordiantes = new TextureCoordinate2D(*rToBeCopied.mpTextureCoordiantes, nIndex, nCount);
+
+ if(!mpTextureCoordiantes->isUsed())
+ {
+ delete mpTextureCoordiantes;
+ mpTextureCoordiantes = 0L;
+ }
+ }
+ }
+
+ ~ImplB3DPolygon()
+ {
+ if(mpBColors)
+ {
+ delete mpBColors;
+ mpBColors = 0L;
+ }
+
+ if(mpNormals)
+ {
+ delete mpNormals;
+ mpNormals = 0L;
+ }
+
+ if(mpTextureCoordiantes)
+ {
+ delete mpTextureCoordiantes;
+ mpTextureCoordiantes = 0L;
+ }
+ }
+
+ sal_uInt32 count() const
+ {
+ return maPoints.count();
+ }
+
+ bool isClosed() const
+ {
+ return mbIsClosed;
+ }
+
+ void setClosed(bool bNew)
+ {
+ if(bNew != (bool)mbIsClosed)
+ {
+ mbIsClosed = bNew;
+ }
+ }
+
+ inline bool impBColorsAreEqual(const ImplB3DPolygon& rCandidate) const
+ {
+ bool bBColorsAreEqual(true);
+
+ if(mpBColors)
+ {
+ if(rCandidate.mpBColors)
+ {
+ bBColorsAreEqual = (*mpBColors == *rCandidate.mpBColors);
+ }
+ else
+ {
+ // candidate has no BColors, so it's assumed all unused.
+ bBColorsAreEqual = !mpBColors->isUsed();
+ }
+ }
+ else
+ {
+ if(rCandidate.mpBColors)
+ {
+ // we have no TextureCoordiantes, so it's assumed all unused.
+ bBColorsAreEqual = !rCandidate.mpBColors->isUsed();
+ }
+ }
+
+ return bBColorsAreEqual;
+ }
+
+ inline bool impNormalsAreEqual(const ImplB3DPolygon& rCandidate) const
+ {
+ bool bNormalsAreEqual(true);
+
+ if(mpNormals)
+ {
+ if(rCandidate.mpNormals)
+ {
+ bNormalsAreEqual = (*mpNormals == *rCandidate.mpNormals);
+ }
+ else
+ {
+ // candidate has no normals, so it's assumed all unused.
+ bNormalsAreEqual = !mpNormals->isUsed();
+ }
+ }
+ else
+ {
+ if(rCandidate.mpNormals)
+ {
+ // we have no normals, so it's assumed all unused.
+ bNormalsAreEqual = !rCandidate.mpNormals->isUsed();
+ }
+ }
+
+ return bNormalsAreEqual;
+ }
+
+ inline bool impTextureCoordinatesAreEqual(const ImplB3DPolygon& rCandidate) const
+ {
+ bool bTextureCoordinatesAreEqual(true);
+
+ if(mpTextureCoordiantes)
+ {
+ if(rCandidate.mpTextureCoordiantes)
+ {
+ bTextureCoordinatesAreEqual = (*mpTextureCoordiantes == *rCandidate.mpTextureCoordiantes);
+ }
+ else
+ {
+ // candidate has no TextureCoordinates, so it's assumed all unused.
+ bTextureCoordinatesAreEqual = !mpTextureCoordiantes->isUsed();
+ }
+ }
+ else
+ {
+ if(rCandidate.mpTextureCoordiantes)
+ {
+ // we have no TextureCoordiantes, so it's assumed all unused.
+ bTextureCoordinatesAreEqual = !rCandidate.mpTextureCoordiantes->isUsed();
+ }
+ }
+
+ return bTextureCoordinatesAreEqual;
+ }
+
+ bool operator==(const ImplB3DPolygon& rCandidate) const
+ {
+ if(mbIsClosed == rCandidate.mbIsClosed)
+ {
+ if(maPoints == rCandidate.maPoints)
+ {
+ if(impBColorsAreEqual(rCandidate))
+ {
+ if(impNormalsAreEqual(rCandidate))
+ {
+ if(impTextureCoordinatesAreEqual(rCandidate))
+ {
+ return true;
+ }
+ }
+ }
+ }
+ }
+
+ return false;
+ }
+
+ const ::basegfx::B3DPoint& getPoint(sal_uInt32 nIndex) const
+ {
+ return maPoints.getCoordinate(nIndex);
+ }
+
+ void setPoint(sal_uInt32 nIndex, const ::basegfx::B3DPoint& rValue)
+ {
+ maPoints.setCoordinate(nIndex, rValue);
+ invalidatePlaneNormal();
+ }
+
+ void insert(sal_uInt32 nIndex, const ::basegfx::B3DPoint& rPoint, sal_uInt32 nCount)
+ {
+ if(nCount)
+ {
+ CoordinateData3D aCoordinate(rPoint);
+ maPoints.insert(nIndex, aCoordinate, nCount);
+ invalidatePlaneNormal();
+
+ if(mpBColors)
+ {
+ mpBColors->insert(nIndex, ::basegfx::BColor::getEmptyBColor(), nCount);
+ }
+
+ if(mpNormals)
+ {
+ mpNormals->insert(nIndex, ::basegfx::B3DVector::getEmptyVector(), nCount);
+ }
+
+ if(mpTextureCoordiantes)
+ {
+ mpTextureCoordiantes->insert(nIndex, ::basegfx::B2DPoint::getEmptyPoint(), nCount);
+ }
+ }
+ }
+
+ const ::basegfx::BColor& getBColor(sal_uInt32 nIndex) const
+ {
+ if(mpBColors)
+ {
+ return mpBColors->getBColor(nIndex);
+ }
+ else
+ {
+ return ::basegfx::BColor::getEmptyBColor();
+ }
+ }
+
+ void setBColor(sal_uInt32 nIndex, const ::basegfx::BColor& rValue)
+ {
+ if(!mpBColors)
+ {
+ if(!rValue.equalZero())
+ {
+ mpBColors = new BColorArray(maPoints.count());
+ mpBColors->setBColor(nIndex, rValue);
+ }
+ }
+ else
+ {
+ mpBColors->setBColor(nIndex, rValue);
+
+ if(!mpBColors->isUsed())
+ {
+ delete mpBColors;
+ mpBColors = 0L;
+ }
+ }
+ }
+
+ bool areBColorsUsed() const
+ {
+ return (mpBColors && mpBColors->isUsed());
+ }
+
+ void clearBColors()
+ {
+ if(mpBColors)
+ {
+ delete mpBColors;
+ mpBColors = 0L;
+ }
+ }
+
+ const ::basegfx::B3DVector& getNormal() const
+ {
+ if(!mbPlaneNormalValid)
+ {
+ const_cast< ImplB3DPolygon* >(this)->maPlaneNormal = maPoints.getNormal();
+ const_cast< ImplB3DPolygon* >(this)->mbPlaneNormalValid = true;
+ }
+
+ return maPlaneNormal;
+ }
+
+ const ::basegfx::B3DVector& getNormal(sal_uInt32 nIndex) const
+ {
+ if(mpNormals)
+ {
+ return mpNormals->getNormal(nIndex);
+ }
+ else
+ {
+ return ::basegfx::B3DVector::getEmptyVector();
+ }
+ }
+
+ void setNormal(sal_uInt32 nIndex, const ::basegfx::B3DVector& rValue)
+ {
+ if(!mpNormals)
+ {
+ if(!rValue.equalZero())
+ {
+ mpNormals = new NormalsArray3D(maPoints.count());
+ mpNormals->setNormal(nIndex, rValue);
+ }
+ }
+ else
+ {
+ mpNormals->setNormal(nIndex, rValue);
+
+ if(!mpNormals->isUsed())
+ {
+ delete mpNormals;
+ mpNormals = 0L;
+ }
+ }
+ }
+
+ void transformNormals(const ::basegfx::B3DHomMatrix& rMatrix)
+ {
+ if(mpNormals)
+ {
+ mpNormals->transform(rMatrix);
+ }
+ }
+
+ bool areNormalsUsed() const
+ {
+ return (mpNormals && mpNormals->isUsed());
+ }
+
+ void clearNormals()
+ {
+ if(mpNormals)
+ {
+ delete mpNormals;
+ mpNormals = 0L;
+ }
+ }
+
+ const ::basegfx::B2DPoint& getTextureCoordinate(sal_uInt32 nIndex) const
+ {
+ if(mpTextureCoordiantes)
+ {
+ return mpTextureCoordiantes->getTextureCoordinate(nIndex);
+ }
+ else
+ {
+ return ::basegfx::B2DPoint::getEmptyPoint();
+ }
+ }
+
+ void setTextureCoordinate(sal_uInt32 nIndex, const ::basegfx::B2DPoint& rValue)
+ {
+ if(!mpTextureCoordiantes)
+ {
+ if(!rValue.equalZero())
+ {
+ mpTextureCoordiantes = new TextureCoordinate2D(maPoints.count());
+ mpTextureCoordiantes->setTextureCoordinate(nIndex, rValue);
+ }
+ }
+ else
+ {
+ mpTextureCoordiantes->setTextureCoordinate(nIndex, rValue);
+
+ if(!mpTextureCoordiantes->isUsed())
+ {
+ delete mpTextureCoordiantes;
+ mpTextureCoordiantes = 0L;
+ }
+ }
+ }
+
+ bool areTextureCoordinatesUsed() const
+ {
+ return (mpTextureCoordiantes && mpTextureCoordiantes->isUsed());
+ }
+
+ void clearTextureCoordinates()
+ {
+ if(mpTextureCoordiantes)
+ {
+ delete mpTextureCoordiantes;
+ mpTextureCoordiantes = 0L;
+ }
+ }
+
+ void transformTextureCoordinates(const ::basegfx::B2DHomMatrix& rMatrix)
+ {
+ if(mpTextureCoordiantes)
+ {
+ mpTextureCoordiantes->transform(rMatrix);
+ }
+ }
+
+ void insert(sal_uInt32 nIndex, const ImplB3DPolygon& rSource)
+ {
+ const sal_uInt32 nCount(rSource.maPoints.count());
+
+ if(nCount)
+ {
+ maPoints.insert(nIndex, rSource.maPoints);
+ invalidatePlaneNormal();
+
+ if(rSource.mpBColors && rSource.mpBColors->isUsed())
+ {
+ if(!mpBColors)
+ {
+ mpBColors = new BColorArray(maPoints.count());
+ }
+
+ mpBColors->insert(nIndex, *rSource.mpBColors);
+ }
+ else
+ {
+ if(mpBColors)
+ {
+ mpBColors->insert(nIndex, ::basegfx::BColor::getEmptyBColor(), nCount);
+ }
+ }
+
+ if(rSource.mpNormals && rSource.mpNormals->isUsed())
+ {
+ if(!mpNormals)
+ {
+ mpNormals = new NormalsArray3D(maPoints.count());
+ }
+
+ mpNormals->insert(nIndex, *rSource.mpNormals);
+ }
+ else
+ {
+ if(mpNormals)
+ {
+ mpNormals->insert(nIndex, ::basegfx::B3DVector::getEmptyVector(), nCount);
+ }
+ }
+
+ if(rSource.mpTextureCoordiantes && rSource.mpTextureCoordiantes->isUsed())
+ {
+ if(!mpTextureCoordiantes)
+ {
+ mpTextureCoordiantes = new TextureCoordinate2D(maPoints.count());
+ }
+
+ mpTextureCoordiantes->insert(nIndex, *rSource.mpTextureCoordiantes);
+ }
+ else
+ {
+ if(mpTextureCoordiantes)
+ {
+ mpTextureCoordiantes->insert(nIndex, ::basegfx::B2DPoint::getEmptyPoint(), nCount);
+ }
+ }
+ }
+ }
+
+ void remove(sal_uInt32 nIndex, sal_uInt32 nCount)
+ {
+ if(nCount)
+ {
+ maPoints.remove(nIndex, nCount);
+ invalidatePlaneNormal();
+
+ if(mpBColors)
+ {
+ mpBColors->remove(nIndex, nCount);
+
+ if(!mpBColors->isUsed())
+ {
+ delete mpBColors;
+ mpBColors = 0L;
+ }
+ }
+
+ if(mpNormals)
+ {
+ mpNormals->remove(nIndex, nCount);
+
+ if(!mpNormals->isUsed())
+ {
+ delete mpNormals;
+ mpNormals = 0L;
+ }
+ }
+
+ if(mpTextureCoordiantes)
+ {
+ mpTextureCoordiantes->remove(nIndex, nCount);
+
+ if(!mpTextureCoordiantes->isUsed())
+ {
+ delete mpTextureCoordiantes;
+ mpTextureCoordiantes = 0L;
+ }
+ }
+ }
+ }
+
+ void flip()
+ {
+ if(maPoints.count() > 1)
+ {
+ maPoints.flip();
+
+ if(mbPlaneNormalValid)
+ {
+ // mirror plane normal
+ maPlaneNormal = -maPlaneNormal;
+ }
+
+ if(mpBColors)
+ {
+ mpBColors->flip();
+ }
+
+ if(mpNormals)
+ {
+ mpNormals->flip();
+ }
+
+ if(mpTextureCoordiantes)
+ {
+ mpTextureCoordiantes->flip();
+ }
+ }
+ }
+
+ bool hasDoublePoints() const
+ {
+ if(mbIsClosed)
+ {
+ // check for same start and end point
+ const sal_uInt32 nIndex(maPoints.count() - 1L);
+
+ if(maPoints.getCoordinate(0L) == maPoints.getCoordinate(nIndex))
+ {
+ const bool bBColorEqual(!mpBColors || (mpBColors->getBColor(0L) == mpBColors->getBColor(nIndex)));
+
+ if(bBColorEqual)
+ {
+ const bool bNormalsEqual(!mpNormals || (mpNormals->getNormal(0L) == mpNormals->getNormal(nIndex)));
+
+ if(bNormalsEqual)
+ {
+ const bool bTextureCoordinatesEqual(!mpTextureCoordiantes || (mpTextureCoordiantes->getTextureCoordinate(0L) == mpTextureCoordiantes->getTextureCoordinate(nIndex)));
+
+ if(bTextureCoordinatesEqual)
+ {
+ return true;
+ }
+ }
+ }
+ }
+ }
+
+ // test for range
+ for(sal_uInt32 a(0L); a < maPoints.count() - 1L; a++)
+ {
+ if(maPoints.getCoordinate(a) == maPoints.getCoordinate(a + 1L))
+ {
+ const bool bBColorEqual(!mpBColors || (mpBColors->getBColor(a) == mpBColors->getBColor(a + 1L)));
+
+ if(bBColorEqual)
+ {
+ const bool bNormalsEqual(!mpNormals || (mpNormals->getNormal(a) == mpNormals->getNormal(a + 1L)));
+
+ if(bNormalsEqual)
+ {
+ const bool bTextureCoordinatesEqual(!mpTextureCoordiantes || (mpTextureCoordiantes->getTextureCoordinate(a) == mpTextureCoordiantes->getTextureCoordinate(a + 1L)));
+
+ if(bTextureCoordinatesEqual)
+ {
+ return true;
+ }
+ }
+ }
+ }
+ }
+
+ return false;
+ }
+
+ void removeDoublePointsAtBeginEnd()
+ {
+ // Only remove DoublePoints at Begin and End when poly is closed
+ if(mbIsClosed)
+ {
+ bool bRemove;
+
+ do
+ {
+ bRemove = false;
+
+ if(maPoints.count() > 1L)
+ {
+ const sal_uInt32 nIndex(maPoints.count() - 1L);
+ bRemove = (maPoints.getCoordinate(0L) == maPoints.getCoordinate(nIndex));
+
+ if(bRemove && mpBColors && !(mpBColors->getBColor(0L) == mpBColors->getBColor(nIndex)))
+ {
+ bRemove = false;
+ }
+
+ if(bRemove && mpNormals && !(mpNormals->getNormal(0L) == mpNormals->getNormal(nIndex)))
+ {
+ bRemove = false;
+ }
+
+ if(bRemove && mpTextureCoordiantes && !(mpTextureCoordiantes->getTextureCoordinate(0L) == mpTextureCoordiantes->getTextureCoordinate(nIndex)))
+ {
+ bRemove = false;
+ }
+ }
+
+ if(bRemove)
+ {
+ const sal_uInt32 nIndex(maPoints.count() - 1L);
+ remove(nIndex, 1L);
+ }
+ } while(bRemove);
+ }
+ }
+
+ void removeDoublePointsWholeTrack()
+ {
+ sal_uInt32 nIndex(0L);
+
+ // test as long as there are at least two points and as long as the index
+ // is smaller or equal second last point
+ while((maPoints.count() > 1L) && (nIndex <= maPoints.count() - 2L))
+ {
+ const sal_uInt32 nNextIndex(nIndex + 1L);
+ bool bRemove(maPoints.getCoordinate(nIndex) == maPoints.getCoordinate(nNextIndex));
+
+ if(bRemove && mpBColors && !(mpBColors->getBColor(nIndex) == mpBColors->getBColor(nNextIndex)))
+ {
+ bRemove = false;
+ }
+
+ if(bRemove && mpNormals && !(mpNormals->getNormal(nIndex) == mpNormals->getNormal(nNextIndex)))
+ {
+ bRemove = false;
+ }
+
+ if(bRemove && mpTextureCoordiantes && !(mpTextureCoordiantes->getTextureCoordinate(nIndex) == mpTextureCoordiantes->getTextureCoordinate(nNextIndex)))
+ {
+ bRemove = false;
+ }
+
+ if(bRemove)
+ {
+ // if next is same as index and the control vectors are unused, delete index
+ remove(nIndex, 1L);
+ }
+ else
+ {
+ // if different, step forward
+ nIndex++;
+ }
+ }
+ }
+
+ void transform(const ::basegfx::B3DHomMatrix& rMatrix)
+ {
+ maPoints.transform(rMatrix);
+
+ // Here, it seems to be possible to transform a valid plane normal and to avoid
+ // invalidation, but it's not true. If the transformation contains shears or e.g.
+ // perspective projection, the orthogonality to the transformed plane will not
+ // be preserved. It may be possible to test that at the matrix to not invalidate in
+ // all cases or to extract a matrix which does not 'shear' the vector which is
+ // a normal in this case. As long as this is not sure, i will just invalidate.
+ invalidatePlaneNormal();
+ }
+};
+
+//////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+ namespace { struct DefaultPolygon : public rtl::Static< B3DPolygon::ImplType,
+ DefaultPolygon > {}; }
+
+ B3DPolygon::B3DPolygon() :
+ mpPolygon(DefaultPolygon::get())
+ {
+ }
+
+ B3DPolygon::B3DPolygon(const B3DPolygon& rPolygon) :
+ mpPolygon(rPolygon.mpPolygon)
+ {
+ }
+
+ B3DPolygon::B3DPolygon(const B3DPolygon& rPolygon, sal_uInt32 nIndex, sal_uInt32 nCount) :
+ mpPolygon(ImplB3DPolygon(*rPolygon.mpPolygon, nIndex, nCount))
+ {
+ // TODO(P2): one extra temporary here (cow_wrapper copies
+ // given ImplB3DPolygon into its internal impl_t wrapper type)
+ OSL_ENSURE(nIndex + nCount > rPolygon.mpPolygon->count(), "B3DPolygon constructor outside range (!)");
+ }
+
+ B3DPolygon::~B3DPolygon()
+ {
+ }
+
+ B3DPolygon& B3DPolygon::operator=(const B3DPolygon& rPolygon)
+ {
+ mpPolygon = rPolygon.mpPolygon;
+ return *this;
+ }
+
+ void B3DPolygon::makeUnique()
+ {
+ mpPolygon.make_unique();
+ }
+
+ bool B3DPolygon::operator==(const B3DPolygon& rPolygon) const
+ {
+ if(mpPolygon.same_object(rPolygon.mpPolygon))
+ return true;
+
+ return (*mpPolygon == *rPolygon.mpPolygon);
+ }
+
+ bool B3DPolygon::operator!=(const B3DPolygon& rPolygon) const
+ {
+ return !(*this == rPolygon);
+ }
+
+ sal_uInt32 B3DPolygon::count() const
+ {
+ return mpPolygon->count();
+ }
+
+ basegfx::B3DPoint B3DPolygon::getB3DPoint(sal_uInt32 nIndex) const
+ {
+ OSL_ENSURE(nIndex < mpPolygon->count(), "B3DPolygon access outside range (!)");
+
+ return mpPolygon->getPoint(nIndex);
+ }
+
+ void B3DPolygon::setB3DPoint(sal_uInt32 nIndex, const basegfx::B3DPoint& rValue)
+ {
+ OSL_ENSURE(nIndex < mpPolygon->count(), "B3DPolygon access outside range (!)");
+
+ if(getB3DPoint(nIndex) != rValue)
+ mpPolygon->setPoint(nIndex, rValue);
+ }
+
+ BColor B3DPolygon::getBColor(sal_uInt32 nIndex) const
+ {
+ OSL_ENSURE(nIndex < mpPolygon->count(), "B3DPolygon access outside range (!)");
+
+ return mpPolygon->getBColor(nIndex);
+ }
+
+ void B3DPolygon::setBColor(sal_uInt32 nIndex, const BColor& rValue)
+ {
+ OSL_ENSURE(nIndex < mpPolygon->count(), "B3DPolygon access outside range (!)");
+
+ if(mpPolygon->getBColor(nIndex) != rValue)
+ mpPolygon->setBColor(nIndex, rValue);
+ }
+
+ bool B3DPolygon::areBColorsUsed() const
+ {
+ return mpPolygon->areBColorsUsed();
+ }
+
+ void B3DPolygon::clearBColors()
+ {
+ if(mpPolygon->areBColorsUsed())
+ mpPolygon->clearBColors();
+ }
+
+ B3DVector B3DPolygon::getNormal() const
+ {
+ return mpPolygon->getNormal();
+ }
+
+ B3DVector B3DPolygon::getNormal(sal_uInt32 nIndex) const
+ {
+ OSL_ENSURE(nIndex < mpPolygon->count(), "B3DPolygon access outside range (!)");
+
+ return mpPolygon->getNormal(nIndex);
+ }
+
+ void B3DPolygon::setNormal(sal_uInt32 nIndex, const B3DVector& rValue)
+ {
+ OSL_ENSURE(nIndex < mpPolygon->count(), "B3DPolygon access outside range (!)");
+
+ if(mpPolygon->getNormal(nIndex) != rValue)
+ mpPolygon->setNormal(nIndex, rValue);
+ }
+
+ void B3DPolygon::transformNormals(const B3DHomMatrix& rMatrix)
+ {
+ if(mpPolygon->areNormalsUsed() && !rMatrix.isIdentity())
+ mpPolygon->transformNormals(rMatrix);
+ }
+
+ bool B3DPolygon::areNormalsUsed() const
+ {
+ return mpPolygon->areNormalsUsed();
+ }
+
+ void B3DPolygon::clearNormals()
+ {
+ if(mpPolygon->areNormalsUsed())
+ mpPolygon->clearNormals();
+ }
+
+ B2DPoint B3DPolygon::getTextureCoordinate(sal_uInt32 nIndex) const
+ {
+ OSL_ENSURE(nIndex < mpPolygon->count(), "B3DPolygon access outside range (!)");
+
+ return mpPolygon->getTextureCoordinate(nIndex);
+ }
+
+ void B3DPolygon::setTextureCoordinate(sal_uInt32 nIndex, const B2DPoint& rValue)
+ {
+ OSL_ENSURE(nIndex < mpPolygon->count(), "B3DPolygon access outside range (!)");
+
+ if(mpPolygon->getTextureCoordinate(nIndex) != rValue)
+ mpPolygon->setTextureCoordinate(nIndex, rValue);
+ }
+
+ void B3DPolygon::transformTextureCoordiantes(const B2DHomMatrix& rMatrix)
+ {
+ if(mpPolygon->areTextureCoordinatesUsed() && !rMatrix.isIdentity())
+ mpPolygon->transformTextureCoordinates(rMatrix);
+ }
+
+ bool B3DPolygon::areTextureCoordinatesUsed() const
+ {
+ return mpPolygon->areTextureCoordinatesUsed();
+ }
+
+ void B3DPolygon::clearTextureCoordinates()
+ {
+ if(mpPolygon->areTextureCoordinatesUsed())
+ mpPolygon->clearTextureCoordinates();
+ }
+
+ void B3DPolygon::insert(sal_uInt32 nIndex, const ::basegfx::B3DPoint& rPoint, sal_uInt32 nCount)
+ {
+ OSL_ENSURE(nIndex <= mpPolygon->count(), "B3DPolygon Insert outside range (!)");
+
+ if(nCount)
+ mpPolygon->insert(nIndex, rPoint, nCount);
+ }
+
+ void B3DPolygon::append(const basegfx::B3DPoint& rPoint, sal_uInt32 nCount)
+ {
+ if(nCount)
+ mpPolygon->insert(mpPolygon->count(), rPoint, nCount);
+ }
+
+ void B3DPolygon::insert(sal_uInt32 nIndex, const B3DPolygon& rPoly, sal_uInt32 nIndex2, sal_uInt32 nCount)
+ {
+ OSL_ENSURE(nIndex <= mpPolygon->count(), "B3DPolygon Insert outside range (!)");
+
+ if(rPoly.count())
+ {
+ if(!nCount)
+ {
+ nCount = rPoly.count();
+ }
+
+ if(0L == nIndex2 && nCount == rPoly.count())
+ {
+ mpPolygon->insert(nIndex, *rPoly.mpPolygon);
+ }
+ else
+ {
+ OSL_ENSURE(nIndex2 + nCount <= rPoly.mpPolygon->count(), "B3DPolygon Insert outside range (!)");
+ ImplB3DPolygon aTempPoly(*rPoly.mpPolygon, nIndex2, nCount);
+ mpPolygon->insert(nIndex, aTempPoly);
+ }
+ }
+ }
+
+ void B3DPolygon::append(const B3DPolygon& rPoly, sal_uInt32 nIndex, sal_uInt32 nCount)
+ {
+ if(rPoly.count())
+ {
+ if(!nCount)
+ {
+ nCount = rPoly.count();
+ }
+
+ if(0L == nIndex && nCount == rPoly.count())
+ {
+ mpPolygon->insert(mpPolygon->count(), *rPoly.mpPolygon);
+ }
+ else
+ {
+ OSL_ENSURE(nIndex + nCount <= rPoly.mpPolygon->count(), "B3DPolygon Append outside range (!)");
+ ImplB3DPolygon aTempPoly(*rPoly.mpPolygon, nIndex, nCount);
+ mpPolygon->insert(mpPolygon->count(), aTempPoly);
+ }
+ }
+ }
+
+ void B3DPolygon::remove(sal_uInt32 nIndex, sal_uInt32 nCount)
+ {
+ OSL_ENSURE(nIndex + nCount <= mpPolygon->count(), "B3DPolygon Remove outside range (!)");
+
+ if(nCount)
+ mpPolygon->remove(nIndex, nCount);
+ }
+
+ void B3DPolygon::clear()
+ {
+ mpPolygon = DefaultPolygon::get();
+ }
+
+ bool B3DPolygon::isClosed() const
+ {
+ return mpPolygon->isClosed();
+ }
+
+ void B3DPolygon::setClosed(bool bNew)
+ {
+ if(isClosed() != bNew)
+ mpPolygon->setClosed(bNew);
+ }
+
+ void B3DPolygon::flip()
+ {
+ if(count() > 1)
+ mpPolygon->flip();
+ }
+
+ bool B3DPolygon::hasDoublePoints() const
+ {
+ return (mpPolygon->count() > 1L && mpPolygon->hasDoublePoints());
+ }
+
+ void B3DPolygon::removeDoublePoints()
+ {
+ if(hasDoublePoints())
+ {
+ mpPolygon->removeDoublePointsAtBeginEnd();
+ mpPolygon->removeDoublePointsWholeTrack();
+ }
+ }
+
+ void B3DPolygon::transform(const basegfx::B3DHomMatrix& rMatrix)
+ {
+ if(mpPolygon->count() && !rMatrix.isIdentity())
+ {
+ mpPolygon->transform(rMatrix);
+ }
+ }
+} // end of namespace basegfx
+
+//////////////////////////////////////////////////////////////////////////////
+// eof
diff --git a/basegfx/source/polygon/b3dpolygonclipper.cxx b/basegfx/source/polygon/b3dpolygonclipper.cxx
new file mode 100644
index 000000000000..88ebf12dae7b
--- /dev/null
+++ b/basegfx/source/polygon/b3dpolygonclipper.cxx
@@ -0,0 +1,574 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basegfx.hxx"
+
+#include <basegfx/polygon/b3dpolygonclipper.hxx>
+#include <osl/diagnose.h>
+#include <basegfx/polygon/b3dpolygontools.hxx>
+#include <basegfx/numeric/ftools.hxx>
+#include <basegfx/matrix/b3dhommatrix.hxx>
+#include <basegfx/polygon/b3dpolygontools.hxx>
+#include <basegfx/range/b3drange.hxx>
+#include <basegfx/point/b2dpoint.hxx>
+#include <basegfx/range/b2drange.hxx>
+#include <basegfx/color/bcolor.hxx>
+
+//////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+ namespace
+ {
+ inline bool impIsInside(const B3DPoint& rCandidate, double fPlaneOffset, tools::B3DOrientation ePlaneOrthogonal)
+ {
+ if(tools::B3DORIENTATION_X == ePlaneOrthogonal)
+ {
+ return fTools::moreOrEqual(rCandidate.getX(), fPlaneOffset);
+ }
+ else if(tools::B3DORIENTATION_Y == ePlaneOrthogonal)
+ {
+ return fTools::moreOrEqual(rCandidate.getY(), fPlaneOffset);
+ }
+ else
+ {
+ return fTools::moreOrEqual(rCandidate.getZ(), fPlaneOffset);
+ }
+ }
+
+ inline double impGetCut(const B3DPoint& rCurrent, const B3DPoint& rNext, double fPlaneOffset, tools::B3DOrientation ePlaneOrthogonal)
+ {
+ if(tools::B3DORIENTATION_X == ePlaneOrthogonal)
+ {
+ return ((fPlaneOffset - rCurrent.getX())/(rNext.getX() - rCurrent.getX()));
+ }
+ else if(tools::B3DORIENTATION_Y == ePlaneOrthogonal)
+ {
+ return ((fPlaneOffset - rCurrent.getY())/(rNext.getY() - rCurrent.getY()));
+ }
+ else
+ {
+ return ((fPlaneOffset - rCurrent.getZ())/(rNext.getZ() - rCurrent.getZ()));
+ }
+ }
+
+ void impAppendCopy(B3DPolygon& rDest, const B3DPolygon& rSource, sal_uInt32 nIndex)
+ {
+ rDest.append(rSource.getB3DPoint(nIndex));
+
+ if(rSource.areBColorsUsed())
+ {
+ rDest.setBColor(rDest.count() - 1L, rSource.getBColor(nIndex));
+ }
+
+ if(rSource.areNormalsUsed())
+ {
+ rDest.setNormal(rDest.count() - 1L, rSource.getNormal(nIndex));
+ }
+
+ if(rSource.areTextureCoordinatesUsed())
+ {
+ rDest.setTextureCoordinate(rDest.count() - 1L, rSource.getTextureCoordinate(nIndex));
+ }
+ }
+
+ void impAppendInterpolate(B3DPolygon& rDest, const B3DPolygon& rSource, sal_uInt32 nIndA, sal_uInt32 nIndB, double fCut)
+ {
+ const B3DPoint aCurrPoint(rSource.getB3DPoint(nIndA));
+ const B3DPoint aNextPoint(rSource.getB3DPoint(nIndB));
+ rDest.append(interpolate(aCurrPoint, aNextPoint, fCut));
+
+ if(rSource.areBColorsUsed())
+ {
+ const BColor aCurrBColor(rSource.getBColor(nIndA));
+ const BColor aNextBColor(rSource.getBColor(nIndB));
+ rDest.setBColor(rDest.count() - 1L, interpolate(aCurrBColor, aNextBColor, fCut));
+ }
+
+ if(rSource.areNormalsUsed())
+ {
+ const B3DVector aCurrVector(rSource.getNormal(nIndA));
+ const B3DVector aNextVector(rSource.getNormal(nIndB));
+ rDest.setNormal(rDest.count() - 1L, interpolate(aCurrVector, aNextVector, fCut));
+ }
+
+ if(rSource.areTextureCoordinatesUsed())
+ {
+ const B2DPoint aCurrTxCo(rSource.getTextureCoordinate(nIndA));
+ const B2DPoint aNextTxCo(rSource.getTextureCoordinate(nIndB));
+ rDest.setTextureCoordinate(rDest.count() - 1L, interpolate(aCurrTxCo, aNextTxCo, fCut));
+ }
+ }
+ }
+} // end of namespace basegfx
+
+//////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+ namespace tools
+ {
+ B3DPolyPolygon clipPolygonOnOrthogonalPlane(const B3DPolygon& rCandidate, B3DOrientation ePlaneOrthogonal, bool bClipPositive, double fPlaneOffset, bool bStroke)
+ {
+ B3DPolyPolygon aRetval;
+
+ if(rCandidate.count())
+ {
+ const B3DRange aCandidateRange(getRange(rCandidate));
+
+ if(B3DORIENTATION_X == ePlaneOrthogonal && fTools::moreOrEqual(aCandidateRange.getMinX(), fPlaneOffset))
+ {
+ // completely above and on the clip plane.
+ if(bClipPositive)
+ {
+ // add completely
+ aRetval.append(rCandidate);
+ }
+ }
+ else if(B3DORIENTATION_X == ePlaneOrthogonal && fTools::lessOrEqual(aCandidateRange.getMaxX(), fPlaneOffset))
+ {
+ // completely below and on the clip plane.
+ if(!bClipPositive)
+ {
+ // add completely
+ aRetval.append(rCandidate);
+ }
+ }
+ else if(B3DORIENTATION_Y == ePlaneOrthogonal && fTools::moreOrEqual(aCandidateRange.getMinY(), fPlaneOffset))
+ {
+ // completely above and on the clip plane.
+ if(bClipPositive)
+ {
+ // add completely
+ aRetval.append(rCandidate);
+ }
+ }
+ else if(B3DORIENTATION_Y == ePlaneOrthogonal && fTools::lessOrEqual(aCandidateRange.getMaxY(), fPlaneOffset))
+ {
+ // completely below and on the clip plane.
+ if(!bClipPositive)
+ {
+ // add completely
+ aRetval.append(rCandidate);
+ }
+ }
+ else if(B3DORIENTATION_Z == ePlaneOrthogonal && fTools::moreOrEqual(aCandidateRange.getMinZ(), fPlaneOffset))
+ {
+ // completely above and on the clip plane.
+ if(bClipPositive)
+ {
+ // add completely
+ aRetval.append(rCandidate);
+ }
+ }
+ else if(B3DORIENTATION_Z == ePlaneOrthogonal && fTools::lessOrEqual(aCandidateRange.getMaxZ(), fPlaneOffset))
+ {
+ // completely below and on the clip plane.
+ if(!bClipPositive)
+ {
+ // add completely
+ aRetval.append(rCandidate);
+ }
+ }
+ else
+ {
+ // prepare loop(s)
+ B3DPolygon aNewPolygon;
+ B3DPoint aCurrent(rCandidate.getB3DPoint(0L));
+ const sal_uInt32 nPointCount(rCandidate.count());
+ const sal_uInt32 nEdgeCount(rCandidate.isClosed() ? nPointCount : nPointCount - 1L);
+ bool bCurrentInside(impIsInside(aCurrent, fPlaneOffset, ePlaneOrthogonal) == bClipPositive);
+
+ if(bCurrentInside)
+ {
+ impAppendCopy(aNewPolygon, rCandidate, 0L);
+ }
+
+ if(bStroke)
+ {
+ // open polygon, create clipped line snippets.
+ for(sal_uInt32 a(0L); a < nEdgeCount; a++)
+ {
+ // get next point data
+ const sal_uInt32 nNextIndex((a + 1L == nPointCount) ? 0L : a + 1L);
+ const B3DPoint aNext(rCandidate.getB3DPoint(nNextIndex));
+ const bool bNextInside(impIsInside(aNext, fPlaneOffset, ePlaneOrthogonal) == bClipPositive);
+
+ if(bCurrentInside != bNextInside)
+ {
+ // change inside/outside
+ if(bNextInside)
+ {
+ // entering, finish existing and start new line polygon
+ if(aNewPolygon.count() > 1L)
+ {
+ aRetval.append(aNewPolygon);
+ }
+
+ aNewPolygon.clear();
+ }
+
+ // calculate and add cut point
+ const double fCut(impGetCut(aCurrent, aNext, fPlaneOffset, ePlaneOrthogonal));
+ impAppendInterpolate(aNewPolygon, rCandidate, a, nNextIndex, fCut);
+
+ // pepare next step
+ bCurrentInside = bNextInside;
+ }
+
+ if(bNextInside)
+ {
+ impAppendCopy(aNewPolygon, rCandidate, nNextIndex);
+ }
+
+ // pepare next step
+ aCurrent = aNext;
+ }
+
+ if(aNewPolygon.count() > 1L)
+ {
+ aRetval.append(aNewPolygon);
+ }
+ }
+ else
+ {
+ // closed polygon, create single clipped closed polygon
+ for(sal_uInt32 a(0L); a < nEdgeCount; a++)
+ {
+ // get next point data, use offset
+ const sal_uInt32 nNextIndex((a + 1L == nPointCount) ? 0L : a + 1L);
+ const B3DPoint aNext(rCandidate.getB3DPoint(nNextIndex));
+ const bool bNextInside(impIsInside(aNext, fPlaneOffset, ePlaneOrthogonal) == bClipPositive);
+
+ if(bCurrentInside != bNextInside)
+ {
+ // calculate and add cut point
+ const double fCut(impGetCut(aCurrent, aNext, fPlaneOffset, ePlaneOrthogonal));
+ impAppendInterpolate(aNewPolygon, rCandidate, a, nNextIndex, fCut);
+
+ // pepare next step
+ bCurrentInside = bNextInside;
+ }
+
+ if(bNextInside && nNextIndex)
+ {
+ impAppendCopy(aNewPolygon, rCandidate, nNextIndex);
+ }
+
+ // pepare next step
+ aCurrent = aNext;
+ }
+
+ if(aNewPolygon.count() > 2L)
+ {
+ aNewPolygon.setClosed(true);
+ aRetval.append(aNewPolygon);
+ }
+ }
+ }
+ }
+
+ return aRetval;
+ }
+
+ B3DPolyPolygon clipPolyPolygonOnOrthogonalPlane(const B3DPolyPolygon& rCandidate, B3DOrientation ePlaneOrthogonal, bool bClipPositive, double fPlaneOffset, bool bStroke)
+ {
+ B3DPolyPolygon aRetval;
+
+ for(sal_uInt32 a(0L); a < rCandidate.count(); a++)
+ {
+ aRetval.append(clipPolygonOnOrthogonalPlane(rCandidate.getB3DPolygon(a), ePlaneOrthogonal, bClipPositive, fPlaneOffset, bStroke));
+ }
+
+ return aRetval;
+ }
+
+ B3DPolyPolygon clipPolyPolygonOnRange(const B3DPolyPolygon& rCandidate, const B2DRange& rRange, bool bInside, bool bStroke)
+ {
+ B3DPolyPolygon aRetval;
+
+ for(sal_uInt32 a(0L); a < rCandidate.count(); a++)
+ {
+ aRetval.append(clipPolygonOnRange(rCandidate.getB3DPolygon(a), rRange, bInside, bStroke));
+ }
+
+ return aRetval;
+ }
+
+ B3DPolyPolygon clipPolygonOnRange(const B3DPolygon& rCandidate, const B2DRange& rRange, bool bInside, bool bStroke)
+ {
+ B3DPolyPolygon aRetval;
+
+ if(rRange.isEmpty())
+ {
+ // clipping against an empty range. Nothing is inside an empty range, so the polygon
+ // is outside the range. So only return if not inside is wanted
+ if(!bInside && rCandidate.count())
+ {
+ aRetval.append(rCandidate);
+ }
+ }
+ else if(rCandidate.count())
+ {
+ const B3DRange aCandidateRange3D(getRange(rCandidate));
+ const B2DRange aCandidateRange(
+ aCandidateRange3D.getMinX(), aCandidateRange3D.getMinY(),
+ aCandidateRange3D.getMaxX(), aCandidateRange3D.getMaxY());
+
+ if(rRange.isInside(aCandidateRange))
+ {
+ // candidate is completely inside given range, nothing to do. Is also true with curves.
+ if(bInside)
+ {
+ aRetval.append(rCandidate);
+ }
+ }
+ else if(!rRange.overlaps(aCandidateRange))
+ {
+ // candidate is completely outside given range, nothing to do. Is also true with curves.
+ if(!bInside)
+ {
+ aRetval.append(rCandidate);
+ }
+ }
+ else
+ {
+ // clip against the six planes of the range
+ // against lower X
+ aRetval = clipPolygonOnOrthogonalPlane(rCandidate, tools::B3DORIENTATION_X, bInside, rRange.getMinX(), bStroke);
+
+ if(aRetval.count())
+ {
+ // against lower Y
+ if(1L == aRetval.count())
+ {
+ aRetval = clipPolygonOnOrthogonalPlane(aRetval.getB3DPolygon(0L), tools::B3DORIENTATION_Y, bInside, rRange.getMinY(), bStroke);
+ }
+ else
+ {
+ aRetval = clipPolyPolygonOnOrthogonalPlane(aRetval, tools::B3DORIENTATION_Y, bInside, rRange.getMinY(), bStroke);
+ }
+
+ if(aRetval.count())
+ {
+ // against higher X
+ if(1L == aRetval.count())
+ {
+ aRetval = clipPolygonOnOrthogonalPlane(aRetval.getB3DPolygon(0L), tools::B3DORIENTATION_X, !bInside, rRange.getMaxX(), bStroke);
+ }
+ else
+ {
+ aRetval = clipPolyPolygonOnOrthogonalPlane(aRetval, tools::B3DORIENTATION_X, !bInside, rRange.getMaxX(), bStroke);
+ }
+
+ if(aRetval.count())
+ {
+ // against higher Y
+ if(1L == aRetval.count())
+ {
+ aRetval = clipPolygonOnOrthogonalPlane(aRetval.getB3DPolygon(0L), tools::B3DORIENTATION_Y, !bInside, rRange.getMaxY(), bStroke);
+ }
+ else
+ {
+ aRetval = clipPolyPolygonOnOrthogonalPlane(aRetval, tools::B3DORIENTATION_Y, !bInside, rRange.getMaxY(), bStroke);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ return aRetval;
+ }
+
+ B3DPolyPolygon clipPolyPolygonOnRange(const B3DPolyPolygon& rCandidate, const B3DRange& rRange, bool bInside, bool bStroke)
+ {
+ B3DPolyPolygon aRetval;
+
+ for(sal_uInt32 a(0L); a < rCandidate.count(); a++)
+ {
+ aRetval.append(clipPolygonOnRange(rCandidate.getB3DPolygon(a), rRange, bInside, bStroke));
+ }
+
+ return aRetval;
+ }
+
+ B3DPolyPolygon clipPolygonOnRange(const B3DPolygon& rCandidate, const B3DRange& rRange, bool bInside, bool bStroke)
+ {
+ B3DPolyPolygon aRetval;
+
+ if(rRange.isEmpty())
+ {
+ // clipping against an empty range. Nothing is inside an empty range, so the polygon
+ // is outside the range. So only return if not inside is wanted
+ if(!bInside && rCandidate.count())
+ {
+ aRetval.append(rCandidate);
+ }
+ }
+ else if(rCandidate.count())
+ {
+ const B3DRange aCandidateRange(getRange(rCandidate));
+
+ if(rRange.isInside(aCandidateRange))
+ {
+ // candidate is completely inside given range, nothing to do. Is also true with curves.
+ if(bInside)
+ {
+ aRetval.append(rCandidate);
+ }
+ }
+ else if(!rRange.overlaps(aCandidateRange))
+ {
+ // candidate is completely outside given range, nothing to do. Is also true with curves.
+ if(!bInside)
+ {
+ aRetval.append(rCandidate);
+ }
+ }
+ else
+ {
+ // clip against X,Y first and see if there's something left
+ const B2DRange aCandidateRange2D(rRange.getMinX(), rRange.getMinY(), rRange.getMaxX(), rRange.getMaxY());
+ aRetval = clipPolygonOnRange(rCandidate, aCandidateRange2D, bInside, bStroke);
+
+ if(aRetval.count())
+ {
+ // against lower Z
+ if(1L == aRetval.count())
+ {
+ aRetval = clipPolygonOnOrthogonalPlane(aRetval.getB3DPolygon(0L), tools::B3DORIENTATION_Z, bInside, rRange.getMinZ(), bStroke);
+ }
+ else
+ {
+ aRetval = clipPolyPolygonOnOrthogonalPlane(aRetval, tools::B3DORIENTATION_Z, bInside, rRange.getMinZ(), bStroke);
+ }
+
+ if(aRetval.count())
+ {
+ // against higher Z
+ if(1L == aRetval.count())
+ {
+ aRetval = clipPolygonOnOrthogonalPlane(aRetval.getB3DPolygon(0L), tools::B3DORIENTATION_Z, !bInside, rRange.getMaxZ(), bStroke);
+ }
+ else
+ {
+ aRetval = clipPolyPolygonOnOrthogonalPlane(aRetval, tools::B3DORIENTATION_Z, !bInside, rRange.getMaxZ(), bStroke);
+ }
+ }
+ }
+ }
+ }
+
+ return aRetval;
+ }
+
+ B3DPolyPolygon clipPolygonOnPlane(const B3DPolygon& rCandidate, const B3DPoint& rPointOnPlane, const B3DVector& rPlaneNormal, bool bClipPositive, bool bStroke)
+ {
+ B3DPolyPolygon aRetval;
+
+ if(rPlaneNormal.equalZero())
+ {
+ // not really a plane definition, return polygon
+ aRetval.append(rCandidate);
+ }
+ else if(rCandidate.count())
+ {
+ // build transform to project planeNormal on X-Axis and pointOnPlane to null point
+ B3DHomMatrix aMatrixTransform;
+ aMatrixTransform.translate(-rPointOnPlane.getX(), -rPointOnPlane.getY(), -rPointOnPlane.getZ());
+ const double fRotInXY(atan2(rPlaneNormal.getY(), rPlaneNormal.getX()));
+ const double fRotInXZ(atan2(-rPlaneNormal.getZ(), rPlaneNormal.getXYLength()));
+ if(!fTools::equalZero(fRotInXY) || !fTools::equalZero(fRotInXZ))
+ {
+ aMatrixTransform.rotate(0.0, fRotInXZ, fRotInXY);
+ }
+
+ // transform polygon to clip scenario
+ B3DPolygon aCandidate(rCandidate);
+ aCandidate.transform(aMatrixTransform);
+
+ // clip on YZ plane
+ aRetval = clipPolygonOnOrthogonalPlane(aCandidate, tools::B3DORIENTATION_X, bClipPositive, 0.0, bStroke);
+
+ if(aRetval.count())
+ {
+ // if there is a result, it needs to be transformed back
+ aMatrixTransform.invert();
+ aRetval.transform(aMatrixTransform);
+ }
+ }
+
+ return aRetval;
+ }
+
+ B3DPolyPolygon clipPolyPolygonOnPlane(const B3DPolyPolygon& rCandidate, const B3DPoint& rPointOnPlane, const B3DVector& rPlaneNormal, bool bClipPositive, bool bStroke)
+ {
+ B3DPolyPolygon aRetval;
+
+ if(rPlaneNormal.equalZero())
+ {
+ // not really a plane definition, return polygon
+ aRetval = rCandidate;
+ }
+ else if(rCandidate.count())
+ {
+ // build transform to project planeNormal on X-Axis and pointOnPlane to null point
+ B3DHomMatrix aMatrixTransform;
+ aMatrixTransform.translate(-rPointOnPlane.getX(), -rPointOnPlane.getY(), -rPointOnPlane.getZ());
+ const double fRotInXY(atan2(rPlaneNormal.getY(), rPlaneNormal.getX()));
+ const double fRotInXZ(atan2(-rPlaneNormal.getZ(), rPlaneNormal.getXYLength()));
+ if(!fTools::equalZero(fRotInXY) || !fTools::equalZero(fRotInXZ))
+ {
+ aMatrixTransform.rotate(0.0, fRotInXZ, fRotInXY);
+ }
+
+ // transform polygon to clip scenario
+ aRetval = rCandidate;
+ aRetval.transform(aMatrixTransform);
+
+ // clip on YZ plane
+ aRetval = clipPolyPolygonOnOrthogonalPlane(aRetval, tools::B3DORIENTATION_X, bClipPositive, 0.0, bStroke);
+
+ if(aRetval.count())
+ {
+ // if there is a result, it needs to be transformed back
+ aMatrixTransform.invert();
+ aRetval.transform(aMatrixTransform);
+ }
+ }
+
+ return aRetval;
+ }
+
+ } // end of namespace tools
+} // end of namespace basegfx
+
+//////////////////////////////////////////////////////////////////////////////
+
+// eof
diff --git a/basegfx/source/polygon/b3dpolygontools.cxx b/basegfx/source/polygon/b3dpolygontools.cxx
new file mode 100644
index 000000000000..77bbbd379d3c
--- /dev/null
+++ b/basegfx/source/polygon/b3dpolygontools.cxx
@@ -0,0 +1,1263 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basegfx.hxx"
+#include <osl/diagnose.h>
+#include <basegfx/polygon/b3dpolygontools.hxx>
+#include <basegfx/polygon/b3dpolygon.hxx>
+#include <basegfx/numeric/ftools.hxx>
+#include <basegfx/range/b3drange.hxx>
+#include <basegfx/point/b2dpoint.hxx>
+#include <basegfx/matrix/b3dhommatrix.hxx>
+#include <basegfx/polygon/b2dpolygon.hxx>
+#include <basegfx/polygon/b2dpolygontools.hxx>
+#include <basegfx/tuple/b3ituple.hxx>
+#include <numeric>
+
+//////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+ namespace tools
+ {
+ // B3DPolygon tools
+ void checkClosed(B3DPolygon& rCandidate)
+ {
+ while(rCandidate.count() > 1L
+ && rCandidate.getB3DPoint(0L).equal(rCandidate.getB3DPoint(rCandidate.count() - 1L)))
+ {
+ rCandidate.setClosed(true);
+ rCandidate.remove(rCandidate.count() - 1L);
+ }
+ }
+
+ // Get successor and predecessor indices. Returning the same index means there
+ // is none. Same for successor.
+ sal_uInt32 getIndexOfPredecessor(sal_uInt32 nIndex, const B3DPolygon& rCandidate)
+ {
+ OSL_ENSURE(nIndex < rCandidate.count(), "getIndexOfPredecessor: Access to polygon out of range (!)");
+
+ if(nIndex)
+ {
+ return nIndex - 1L;
+ }
+ else if(rCandidate.count())
+ {
+ return rCandidate.count() - 1L;
+ }
+ else
+ {
+ return nIndex;
+ }
+ }
+
+ sal_uInt32 getIndexOfSuccessor(sal_uInt32 nIndex, const B3DPolygon& rCandidate)
+ {
+ OSL_ENSURE(nIndex < rCandidate.count(), "getIndexOfPredecessor: Access to polygon out of range (!)");
+
+ if(nIndex + 1L < rCandidate.count())
+ {
+ return nIndex + 1L;
+ }
+ else
+ {
+ return 0L;
+ }
+ }
+
+ B3DRange getRange(const B3DPolygon& rCandidate)
+ {
+ B3DRange aRetval;
+ const sal_uInt32 nPointCount(rCandidate.count());
+
+ for(sal_uInt32 a(0L); a < nPointCount; a++)
+ {
+ const B3DPoint aTestPoint(rCandidate.getB3DPoint(a));
+ aRetval.expand(aTestPoint);
+ }
+
+ return aRetval;
+ }
+
+ B3DVector getNormal(const B3DPolygon& rCandidate)
+ {
+ return rCandidate.getNormal();
+ }
+
+ B3DVector getPositiveOrientedNormal(const B3DPolygon& rCandidate)
+ {
+ B3DVector aRetval(rCandidate.getNormal());
+
+ if(ORIENTATION_NEGATIVE == getOrientation(rCandidate))
+ {
+ aRetval = -aRetval;
+ }
+
+ return aRetval;
+ }
+
+ B2VectorOrientation getOrientation(const B3DPolygon& rCandidate)
+ {
+ B2VectorOrientation eRetval(ORIENTATION_NEUTRAL);
+
+ if(rCandidate.count() > 2L)
+ {
+ const double fSignedArea(getSignedArea(rCandidate));
+
+ if(fSignedArea > 0.0)
+ {
+ eRetval = ORIENTATION_POSITIVE;
+ }
+ else if(fSignedArea < 0.0)
+ {
+ eRetval = ORIENTATION_NEGATIVE;
+ }
+ }
+
+ return eRetval;
+ }
+
+ double getSignedArea(const B3DPolygon& rCandidate)
+ {
+ double fRetval(0.0);
+ const sal_uInt32 nPointCount(rCandidate.count());
+
+ if(nPointCount > 2)
+ {
+ const B3DVector aAbsNormal(absolute(getNormal(rCandidate)));
+ sal_uInt16 nCase(3); // default: ignore z
+
+ if(aAbsNormal.getX() > aAbsNormal.getY())
+ {
+ if(aAbsNormal.getX() > aAbsNormal.getZ())
+ {
+ nCase = 1; // ignore x
+ }
+ }
+ else if(aAbsNormal.getY() > aAbsNormal.getZ())
+ {
+ nCase = 2; // ignore y
+ }
+
+ B3DPoint aPreviousPoint(rCandidate.getB3DPoint(nPointCount - 1L));
+
+ for(sal_uInt32 a(0L); a < nPointCount; a++)
+ {
+ const B3DPoint aCurrentPoint(rCandidate.getB3DPoint(a));
+
+ switch(nCase)
+ {
+ case 1: // ignore x
+ fRetval += aPreviousPoint.getZ() * aCurrentPoint.getY();
+ fRetval -= aPreviousPoint.getY() * aCurrentPoint.getZ();
+ break;
+ case 2: // ignore y
+ fRetval += aPreviousPoint.getX() * aCurrentPoint.getZ();
+ fRetval -= aPreviousPoint.getZ() * aCurrentPoint.getX();
+ break;
+ case 3: // ignore z
+ fRetval += aPreviousPoint.getX() * aCurrentPoint.getY();
+ fRetval -= aPreviousPoint.getY() * aCurrentPoint.getX();
+ break;
+ }
+
+ // prepare next step
+ aPreviousPoint = aCurrentPoint;
+ }
+
+ switch(nCase)
+ {
+ case 1: // ignore x
+ fRetval /= 2.0 * aAbsNormal.getX();
+ break;
+ case 2: // ignore y
+ fRetval /= 2.0 * aAbsNormal.getY();
+ break;
+ case 3: // ignore z
+ fRetval /= 2.0 * aAbsNormal.getZ();
+ break;
+ }
+ }
+
+ return fRetval;
+ }
+
+ double getArea(const B3DPolygon& rCandidate)
+ {
+ double fRetval(0.0);
+
+ if(rCandidate.count() > 2)
+ {
+ fRetval = getSignedArea(rCandidate);
+ const double fZero(0.0);
+
+ if(fTools::less(fRetval, fZero))
+ {
+ fRetval = -fRetval;
+ }
+ }
+
+ return fRetval;
+ }
+
+ double getEdgeLength(const B3DPolygon& rCandidate, sal_uInt32 nIndex)
+ {
+ OSL_ENSURE(nIndex < rCandidate.count(), "getEdgeLength: Access to polygon out of range (!)");
+ double fRetval(0.0);
+ const sal_uInt32 nPointCount(rCandidate.count());
+
+ if(nIndex < nPointCount)
+ {
+ if(rCandidate.isClosed() || ((nIndex + 1L) != nPointCount))
+ {
+ const sal_uInt32 nNextIndex(getIndexOfSuccessor(nIndex, rCandidate));
+ const B3DPoint aCurrentPoint(rCandidate.getB3DPoint(nIndex));
+ const B3DPoint aNextPoint(rCandidate.getB3DPoint(nNextIndex));
+ const B3DVector aVector(aNextPoint - aCurrentPoint);
+ fRetval = aVector.getLength();
+ }
+ }
+
+ return fRetval;
+ }
+
+ double getLength(const B3DPolygon& rCandidate)
+ {
+ double fRetval(0.0);
+ const sal_uInt32 nPointCount(rCandidate.count());
+
+ if(nPointCount > 1L)
+ {
+ const sal_uInt32 nLoopCount(rCandidate.isClosed() ? nPointCount : nPointCount - 1L);
+
+ for(sal_uInt32 a(0L); a < nLoopCount; a++)
+ {
+ const sal_uInt32 nNextIndex(getIndexOfSuccessor(a, rCandidate));
+ const B3DPoint aCurrentPoint(rCandidate.getB3DPoint(a));
+ const B3DPoint aNextPoint(rCandidate.getB3DPoint(nNextIndex));
+ const B3DVector aVector(aNextPoint - aCurrentPoint);
+ fRetval += aVector.getLength();
+ }
+ }
+
+ return fRetval;
+ }
+
+ B3DPoint getPositionAbsolute(const B3DPolygon& rCandidate, double fDistance, double fLength)
+ {
+ B3DPoint aRetval;
+ const sal_uInt32 nPointCount(rCandidate.count());
+
+ if(nPointCount > 1L)
+ {
+ sal_uInt32 nIndex(0L);
+ bool bIndexDone(false);
+ const double fZero(0.0);
+ double fEdgeLength(fZero);
+
+ // get length if not given
+ if(fTools::equalZero(fLength))
+ {
+ fLength = getLength(rCandidate);
+ }
+
+ // handle fDistance < 0.0
+ if(fTools::less(fDistance, fZero))
+ {
+ if(rCandidate.isClosed())
+ {
+ // if fDistance < 0.0 increment with multiple of fLength
+ sal_uInt32 nCount(sal_uInt32(-fDistance / fLength));
+ fDistance += double(nCount + 1L) * fLength;
+ }
+ else
+ {
+ // crop to polygon start
+ fDistance = fZero;
+ bIndexDone = true;
+ }
+ }
+
+ // handle fDistance >= fLength
+ if(fTools::moreOrEqual(fDistance, fLength))
+ {
+ if(rCandidate.isClosed())
+ {
+ // if fDistance >= fLength decrement with multiple of fLength
+ sal_uInt32 nCount(sal_uInt32(fDistance / fLength));
+ fDistance -= (double)(nCount) * fLength;
+ }
+ else
+ {
+ // crop to polygon end
+ fDistance = fZero;
+ nIndex = nPointCount - 1L;
+ bIndexDone = true;
+ }
+ }
+
+ // look for correct index. fDistance is now [0.0 .. fLength[
+ if(!bIndexDone)
+ {
+ do
+ {
+ // get length of next edge
+ fEdgeLength = getEdgeLength(rCandidate, nIndex);
+
+ if(fTools::moreOrEqual(fDistance, fEdgeLength))
+ {
+ // go to next edge
+ fDistance -= fEdgeLength;
+ nIndex++;
+ }
+ else
+ {
+ // it's on this edge, stop
+ bIndexDone = true;
+ }
+ } while (!bIndexDone);
+ }
+
+ // get the point using nIndex
+ aRetval = rCandidate.getB3DPoint(nIndex);
+
+ // if fDistance != 0.0, move that length on the edge. The edge
+ // length is in fEdgeLength.
+ if(!fTools::equalZero(fDistance))
+ {
+ sal_uInt32 nNextIndex(getIndexOfSuccessor(nIndex, rCandidate));
+ const B3DPoint aNextPoint(rCandidate.getB3DPoint(nNextIndex));
+ double fRelative(fZero);
+
+ if(!fTools::equalZero(fEdgeLength))
+ {
+ fRelative = fDistance / fEdgeLength;
+ }
+
+ // add calculated average value to the return value
+ aRetval += interpolate(aRetval, aNextPoint, fRelative);
+ }
+ }
+
+ return aRetval;
+ }
+
+ B3DPoint getPositionRelative(const B3DPolygon& rCandidate, double fDistance, double fLength)
+ {
+ // get length if not given
+ if(fTools::equalZero(fLength))
+ {
+ fLength = getLength(rCandidate);
+ }
+
+ // multiply fDistance with real length to get absolute position and
+ // use getPositionAbsolute
+ return getPositionAbsolute(rCandidate, fDistance * fLength, fLength);
+ }
+
+ void applyLineDashing(const B3DPolygon& rCandidate, const ::std::vector<double>& rDotDashArray, B3DPolyPolygon* pLineTarget, B3DPolyPolygon* pGapTarget, double fDotDashLength)
+ {
+ const sal_uInt32 nPointCount(rCandidate.count());
+ const sal_uInt32 nDotDashCount(rDotDashArray.size());
+
+ if(fTools::lessOrEqual(fDotDashLength, 0.0))
+ {
+ fDotDashLength = ::std::accumulate(rDotDashArray.begin(), rDotDashArray.end(), 0.0);
+ }
+
+ if(fTools::more(fDotDashLength, 0.0) && (pLineTarget || pGapTarget) && nPointCount)
+ {
+ // clear targets
+ if(pLineTarget)
+ {
+ pLineTarget->clear();
+ }
+
+ if(pGapTarget)
+ {
+ pGapTarget->clear();
+ }
+
+ // prepare current edge's start
+ B3DPoint aCurrentPoint(rCandidate.getB3DPoint(0));
+ const sal_uInt32 nEdgeCount(rCandidate.isClosed() ? nPointCount : nPointCount - 1);
+
+ // prepare DotDashArray iteration and the line/gap switching bool
+ sal_uInt32 nDotDashIndex(0);
+ bool bIsLine(true);
+ double fDotDashMovingLength(rDotDashArray[0]);
+ B3DPolygon aSnippet;
+
+ // iterate over all edges
+ for(sal_uInt32 a(0); a < nEdgeCount; a++)
+ {
+ // update current edge
+ double fLastDotDashMovingLength(0.0);
+ const sal_uInt32 nNextIndex((a + 1) % nPointCount);
+ const B3DPoint aNextPoint(rCandidate.getB3DPoint(nNextIndex));
+ const double fEdgeLength(B3DVector(aNextPoint - aCurrentPoint).getLength());
+
+ while(fTools::less(fDotDashMovingLength, fEdgeLength))
+ {
+ // new split is inside edge, create and append snippet [fLastDotDashMovingLength, fDotDashMovingLength]
+ const bool bHandleLine(bIsLine && pLineTarget);
+ const bool bHandleGap(!bIsLine && pGapTarget);
+
+ if(bHandleLine || bHandleGap)
+ {
+ if(!aSnippet.count())
+ {
+ aSnippet.append(interpolate(aCurrentPoint, aNextPoint, fLastDotDashMovingLength / fEdgeLength));
+ }
+
+ aSnippet.append(interpolate(aCurrentPoint, aNextPoint, fDotDashMovingLength / fEdgeLength));
+
+ if(bHandleLine)
+ {
+ pLineTarget->append(aSnippet);
+ }
+ else
+ {
+ pGapTarget->append(aSnippet);
+ }
+
+ aSnippet.clear();
+ }
+
+ // prepare next DotDashArray step and flip line/gap flag
+ fLastDotDashMovingLength = fDotDashMovingLength;
+ fDotDashMovingLength += rDotDashArray[(++nDotDashIndex) % nDotDashCount];
+ bIsLine = !bIsLine;
+ }
+
+ // append snippet [fLastDotDashMovingLength, fEdgeLength]
+ const bool bHandleLine(bIsLine && pLineTarget);
+ const bool bHandleGap(!bIsLine && pGapTarget);
+
+ if(bHandleLine || bHandleGap)
+ {
+ if(!aSnippet.count())
+ {
+ aSnippet.append(interpolate(aCurrentPoint, aNextPoint, fLastDotDashMovingLength / fEdgeLength));
+ }
+
+ aSnippet.append(aNextPoint);
+ }
+
+ // prepare move to next edge
+ fDotDashMovingLength -= fEdgeLength;
+
+ // prepare next edge step (end point gets new start point)
+ aCurrentPoint = aNextPoint;
+ }
+
+ // append last intermediate results (if exists)
+ if(aSnippet.count())
+ {
+ if(bIsLine && pLineTarget)
+ {
+ pLineTarget->append(aSnippet);
+ }
+ else if(!bIsLine && pGapTarget)
+ {
+ pGapTarget->append(aSnippet);
+ }
+ }
+
+ // check if start and end polygon may be merged
+ if(pLineTarget)
+ {
+ const sal_uInt32 nCount(pLineTarget->count());
+
+ if(nCount > 1)
+ {
+ // these polygons were created above, there exists none with less than two points,
+ // thus dircet point access below is allowed
+ const B3DPolygon aFirst(pLineTarget->getB3DPolygon(0));
+ B3DPolygon aLast(pLineTarget->getB3DPolygon(nCount - 1));
+
+ if(aFirst.getB3DPoint(0).equal(aLast.getB3DPoint(aLast.count() - 1)))
+ {
+ // start of first and end of last are the same -> merge them
+ aLast.append(aFirst);
+ aLast.removeDoublePoints();
+ pLineTarget->setB3DPolygon(0, aLast);
+ pLineTarget->remove(nCount - 1);
+ }
+ }
+ }
+
+ if(pGapTarget)
+ {
+ const sal_uInt32 nCount(pGapTarget->count());
+
+ if(nCount > 1)
+ {
+ // these polygons were created above, there exists none with less than two points,
+ // thus dircet point access below is allowed
+ const B3DPolygon aFirst(pGapTarget->getB3DPolygon(0));
+ B3DPolygon aLast(pGapTarget->getB3DPolygon(nCount - 1));
+
+ if(aFirst.getB3DPoint(0).equal(aLast.getB3DPoint(aLast.count() - 1)))
+ {
+ // start of first and end of last are the same -> merge them
+ aLast.append(aFirst);
+ aLast.removeDoublePoints();
+ pGapTarget->setB3DPolygon(0, aLast);
+ pGapTarget->remove(nCount - 1);
+ }
+ }
+ }
+ }
+ else
+ {
+ // parameters make no sense, just add source to targets
+ if(pLineTarget)
+ {
+ pLineTarget->append(rCandidate);
+ }
+
+ if(pGapTarget)
+ {
+ pGapTarget->append(rCandidate);
+ }
+ }
+ }
+
+ B3DPolygon applyDefaultNormalsSphere( const B3DPolygon& rCandidate, const B3DPoint& rCenter)
+ {
+ B3DPolygon aRetval(rCandidate);
+
+ for(sal_uInt32 a(0L); a < aRetval.count(); a++)
+ {
+ B3DVector aVector(aRetval.getB3DPoint(a) - rCenter);
+ aVector.normalize();
+ aRetval.setNormal(a, aVector);
+ }
+
+ return aRetval;
+ }
+
+ B3DPolygon invertNormals( const B3DPolygon& rCandidate)
+ {
+ B3DPolygon aRetval(rCandidate);
+
+ if(aRetval.areNormalsUsed())
+ {
+ for(sal_uInt32 a(0L); a < aRetval.count(); a++)
+ {
+ aRetval.setNormal(a, -aRetval.getNormal(a));
+ }
+ }
+
+ return aRetval;
+ }
+
+ B3DPolygon applyDefaultTextureCoordinatesParallel( const B3DPolygon& rCandidate, const B3DRange& rRange, bool bChangeX, bool bChangeY)
+ {
+ B3DPolygon aRetval(rCandidate);
+
+ if(bChangeX || bChangeY)
+ {
+ // create projection of standard texture coordinates in (X, Y) onto
+ // the 3d coordinates straight
+ const double fWidth(rRange.getWidth());
+ const double fHeight(rRange.getHeight());
+ const bool bWidthSet(!fTools::equalZero(fWidth));
+ const bool bHeightSet(!fTools::equalZero(fHeight));
+ const double fOne(1.0);
+
+ for(sal_uInt32 a(0L); a < aRetval.count(); a++)
+ {
+ const B3DPoint aPoint(aRetval.getB3DPoint(a));
+ B2DPoint aTextureCoordinate(aRetval.getTextureCoordinate(a));
+
+ if(bChangeX)
+ {
+ if(bWidthSet)
+ {
+ aTextureCoordinate.setX((aPoint.getX() - rRange.getMinX()) / fWidth);
+ }
+ else
+ {
+ aTextureCoordinate.setX(0.0);
+ }
+ }
+
+ if(bChangeY)
+ {
+ if(bHeightSet)
+ {
+ aTextureCoordinate.setY(fOne - ((aPoint.getY() - rRange.getMinY()) / fHeight));
+ }
+ else
+ {
+ aTextureCoordinate.setY(fOne);
+ }
+ }
+
+ aRetval.setTextureCoordinate(a, aTextureCoordinate);
+ }
+ }
+
+ return aRetval;
+ }
+
+ B3DPolygon applyDefaultTextureCoordinatesSphere( const B3DPolygon& rCandidate, const B3DPoint& rCenter, bool bChangeX, bool bChangeY)
+ {
+ B3DPolygon aRetval(rCandidate);
+
+ if(bChangeX || bChangeY)
+ {
+ // create texture coordinates using sphere projection to cartesian coordinates,
+ // use object's center as base
+ const double fOne(1.0);
+ const sal_uInt32 nPointCount(aRetval.count());
+ bool bPolarPoints(false);
+ sal_uInt32 a;
+
+ // create center cartesian coordinates to have a possibility to decide if on boundary
+ // transitions which value to choose
+ const B3DRange aPlaneRange(getRange(rCandidate));
+ const B3DPoint aPlaneCenter(aPlaneRange.getCenter() - rCenter);
+ const double fXCenter(fOne - ((atan2(aPlaneCenter.getZ(), aPlaneCenter.getX()) + F_PI) / F_2PI));
+
+ for(a = 0L; a < nPointCount; a++)
+ {
+ const B3DVector aVector(aRetval.getB3DPoint(a) - rCenter);
+ const double fY(fOne - ((atan2(aVector.getY(), aVector.getXZLength()) + F_PI2) / F_PI));
+ B2DPoint aTexCoor(aRetval.getTextureCoordinate(a));
+
+ if(fTools::equalZero(fY))
+ {
+ // point is a north polar point, no useful X-coordinate can be created.
+ if(bChangeY)
+ {
+ aTexCoor.setY(0.0);
+
+ if(bChangeX)
+ {
+ bPolarPoints = true;
+ }
+ }
+ }
+ else if(fTools::equal(fY, fOne))
+ {
+ // point is a south polar point, no useful X-coordinate can be created. Set
+ // Y-coordinte, though
+ if(bChangeY)
+ {
+ aTexCoor.setY(fOne);
+
+ if(bChangeX)
+ {
+ bPolarPoints = true;
+ }
+ }
+ }
+ else
+ {
+ double fX(fOne - ((atan2(aVector.getZ(), aVector.getX()) + F_PI) / F_2PI));
+
+ // correct cartesinan point coordiante dependent from center value
+ if(fX > fXCenter + 0.5)
+ {
+ fX -= fOne;
+ }
+ else if(fX < fXCenter - 0.5)
+ {
+ fX += fOne;
+ }
+
+ if(bChangeX)
+ {
+ aTexCoor.setX(fX);
+ }
+
+ if(bChangeY)
+ {
+ aTexCoor.setY(fY);
+ }
+ }
+
+ aRetval.setTextureCoordinate(a, aTexCoor);
+ }
+
+ if(bPolarPoints)
+ {
+ // correct X-texture coordinates if polar points are contained. Those
+ // coordinates cannot be correct, so use prev or next X-coordinate
+ for(a = 0L; a < nPointCount; a++)
+ {
+ B2DPoint aTexCoor(aRetval.getTextureCoordinate(a));
+
+ if(fTools::equalZero(aTexCoor.getY()) || fTools::equal(aTexCoor.getY(), fOne))
+ {
+ // get prev, next TexCoor and test for pole
+ const B2DPoint aPrevTexCoor(aRetval.getTextureCoordinate(a ? a - 1L : nPointCount - 1L));
+ const B2DPoint aNextTexCoor(aRetval.getTextureCoordinate((a + 1L) % nPointCount));
+ const bool bPrevPole(fTools::equalZero(aPrevTexCoor.getY()) || fTools::equal(aPrevTexCoor.getY(), fOne));
+ const bool bNextPole(fTools::equalZero(aNextTexCoor.getY()) || fTools::equal(aNextTexCoor.getY(), fOne));
+
+ if(!bPrevPole && !bNextPole)
+ {
+ // both no poles, mix them
+ aTexCoor.setX((aPrevTexCoor.getX() + aNextTexCoor.getX()) / 2.0);
+ }
+ else if(!bNextPole)
+ {
+ // copy next
+ aTexCoor.setX(aNextTexCoor.getX());
+ }
+ else
+ {
+ // copy prev, even if it's a pole, hopefully it is already corrected
+ aTexCoor.setX(aPrevTexCoor.getX());
+ }
+
+ aRetval.setTextureCoordinate(a, aTexCoor);
+ }
+ }
+ }
+ }
+
+ return aRetval;
+ }
+
+ bool isInEpsilonRange(const B3DPoint& rEdgeStart, const B3DPoint& rEdgeEnd, const B3DPoint& rTestPosition, double fDistance)
+ {
+ // build edge vector
+ const B3DVector aEdge(rEdgeEnd - rEdgeStart);
+ bool bDoDistanceTestStart(false);
+ bool bDoDistanceTestEnd(false);
+
+ if(aEdge.equalZero())
+ {
+ // no edge, just a point. Do one of the distance tests.
+ bDoDistanceTestStart = true;
+ }
+ else
+ {
+ // calculate fCut in aEdge
+ const B3DVector aTestEdge(rTestPosition - rEdgeStart);
+ const double fScalarTestEdge(aEdge.scalar(aTestEdge));
+ const double fScalarStartEdge(aEdge.scalar(rEdgeStart));
+ const double fScalarEdge(aEdge.scalar(aEdge));
+ const double fCut((fScalarTestEdge - fScalarStartEdge) / fScalarEdge);
+ const double fZero(0.0);
+ const double fOne(1.0);
+
+ if(fTools::less(fCut, fZero))
+ {
+ // left of rEdgeStart
+ bDoDistanceTestStart = true;
+ }
+ else if(fTools::more(fCut, fOne))
+ {
+ // right of rEdgeEnd
+ bDoDistanceTestEnd = true;
+ }
+ else
+ {
+ // inside line [0.0 .. 1.0]
+ const B3DPoint aCutPoint(interpolate(rEdgeStart, rEdgeEnd, fCut));
+ const B3DVector aDelta(rTestPosition - aCutPoint);
+ const double fDistanceSquare(aDelta.scalar(aDelta));
+
+ if(fDistanceSquare <= fDistance * fDistance * fDistance)
+ {
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ }
+ }
+
+ if(bDoDistanceTestStart)
+ {
+ const B3DVector aDelta(rTestPosition - rEdgeStart);
+ const double fDistanceSquare(aDelta.scalar(aDelta));
+
+ if(fDistanceSquare <= fDistance * fDistance * fDistance)
+ {
+ return true;
+ }
+ }
+ else if(bDoDistanceTestEnd)
+ {
+ const B3DVector aDelta(rTestPosition - rEdgeEnd);
+ const double fDistanceSquare(aDelta.scalar(aDelta));
+
+ if(fDistanceSquare <= fDistance * fDistance * fDistance)
+ {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ bool isInEpsilonRange(const B3DPolygon& rCandidate, const B3DPoint& rTestPosition, double fDistance)
+ {
+ const sal_uInt32 nPointCount(rCandidate.count());
+
+ if(nPointCount)
+ {
+ const sal_uInt32 nEdgeCount(rCandidate.isClosed() ? nPointCount : nPointCount - 1L);
+ B3DPoint aCurrent(rCandidate.getB3DPoint(0));
+
+ if(nEdgeCount)
+ {
+ // edges
+ for(sal_uInt32 a(0); a < nEdgeCount; a++)
+ {
+ const sal_uInt32 nNextIndex((a + 1) % nPointCount);
+ const B3DPoint aNext(rCandidate.getB3DPoint(nNextIndex));
+
+ if(isInEpsilonRange(aCurrent, aNext, rTestPosition, fDistance))
+ {
+ return true;
+ }
+
+ // prepare next step
+ aCurrent = aNext;
+ }
+ }
+ else
+ {
+ // no edges, but points -> not closed. Check single point. Just
+ // use isInEpsilonRange with twice the same point, it handles those well
+ if(isInEpsilonRange(aCurrent, aCurrent, rTestPosition, fDistance))
+ {
+ return true;
+ }
+ }
+ }
+
+ return false;
+ }
+
+ bool isInside(const B3DPolygon& rCandidate, const B3DPoint& rPoint, bool bWithBorder)
+ {
+ if(bWithBorder && isPointOnPolygon(rCandidate, rPoint, true))
+ {
+ return true;
+ }
+ else
+ {
+ bool bRetval(false);
+ const B3DVector aPlaneNormal(rCandidate.getNormal());
+
+ if(!aPlaneNormal.equalZero())
+ {
+ const sal_uInt32 nPointCount(rCandidate.count());
+
+ if(nPointCount)
+ {
+ B3DPoint aCurrentPoint(rCandidate.getB3DPoint(nPointCount - 1));
+ const double fAbsX(fabs(aPlaneNormal.getX()));
+ const double fAbsY(fabs(aPlaneNormal.getY()));
+ const double fAbsZ(fabs(aPlaneNormal.getZ()));
+
+ if(fAbsX > fAbsY && fAbsX > fAbsZ)
+ {
+ // normal points mostly in X-Direction, use YZ-Polygon projection for check
+ // x -> y, y -> z
+ for(sal_uInt32 a(0); a < nPointCount; a++)
+ {
+ const B3DPoint aPreviousPoint(aCurrentPoint);
+ aCurrentPoint = rCandidate.getB3DPoint(a);
+
+ // cross-over in Z?
+ const bool bCompZA(fTools::more(aPreviousPoint.getZ(), rPoint.getZ()));
+ const bool bCompZB(fTools::more(aCurrentPoint.getZ(), rPoint.getZ()));
+
+ if(bCompZA != bCompZB)
+ {
+ // cross-over in Y?
+ const bool bCompYA(fTools::more(aPreviousPoint.getY(), rPoint.getY()));
+ const bool bCompYB(fTools::more(aCurrentPoint.getY(), rPoint.getY()));
+
+ if(bCompYA == bCompYB)
+ {
+ if(bCompYA)
+ {
+ bRetval = !bRetval;
+ }
+ }
+ else
+ {
+ const double fCompare(
+ aCurrentPoint.getY() - (aCurrentPoint.getZ() - rPoint.getZ()) *
+ (aPreviousPoint.getY() - aCurrentPoint.getY()) /
+ (aPreviousPoint.getZ() - aCurrentPoint.getZ()));
+
+ if(fTools::more(fCompare, rPoint.getY()))
+ {
+ bRetval = !bRetval;
+ }
+ }
+ }
+ }
+ }
+ else if(fAbsY > fAbsX && fAbsY > fAbsZ)
+ {
+ // normal points mostly in Y-Direction, use XZ-Polygon projection for check
+ // x -> x, y -> z
+ for(sal_uInt32 a(0); a < nPointCount; a++)
+ {
+ const B3DPoint aPreviousPoint(aCurrentPoint);
+ aCurrentPoint = rCandidate.getB3DPoint(a);
+
+ // cross-over in Z?
+ const bool bCompZA(fTools::more(aPreviousPoint.getZ(), rPoint.getZ()));
+ const bool bCompZB(fTools::more(aCurrentPoint.getZ(), rPoint.getZ()));
+
+ if(bCompZA != bCompZB)
+ {
+ // cross-over in X?
+ const bool bCompXA(fTools::more(aPreviousPoint.getX(), rPoint.getX()));
+ const bool bCompXB(fTools::more(aCurrentPoint.getX(), rPoint.getX()));
+
+ if(bCompXA == bCompXB)
+ {
+ if(bCompXA)
+ {
+ bRetval = !bRetval;
+ }
+ }
+ else
+ {
+ const double fCompare(
+ aCurrentPoint.getX() - (aCurrentPoint.getZ() - rPoint.getZ()) *
+ (aPreviousPoint.getX() - aCurrentPoint.getX()) /
+ (aPreviousPoint.getZ() - aCurrentPoint.getZ()));
+
+ if(fTools::more(fCompare, rPoint.getX()))
+ {
+ bRetval = !bRetval;
+ }
+ }
+ }
+ }
+ }
+ else
+ {
+ // normal points mostly in Z-Direction, use XY-Polygon projection for check
+ // x -> x, y -> y
+ for(sal_uInt32 a(0); a < nPointCount; a++)
+ {
+ const B3DPoint aPreviousPoint(aCurrentPoint);
+ aCurrentPoint = rCandidate.getB3DPoint(a);
+
+ // cross-over in Y?
+ const bool bCompYA(fTools::more(aPreviousPoint.getY(), rPoint.getY()));
+ const bool bCompYB(fTools::more(aCurrentPoint.getY(), rPoint.getY()));
+
+ if(bCompYA != bCompYB)
+ {
+ // cross-over in X?
+ const bool bCompXA(fTools::more(aPreviousPoint.getX(), rPoint.getX()));
+ const bool bCompXB(fTools::more(aCurrentPoint.getX(), rPoint.getX()));
+
+ if(bCompXA == bCompXB)
+ {
+ if(bCompXA)
+ {
+ bRetval = !bRetval;
+ }
+ }
+ else
+ {
+ const double fCompare(
+ aCurrentPoint.getX() - (aCurrentPoint.getY() - rPoint.getY()) *
+ (aPreviousPoint.getX() - aCurrentPoint.getX()) /
+ (aPreviousPoint.getY() - aCurrentPoint.getY()));
+
+ if(fTools::more(fCompare, rPoint.getX()))
+ {
+ bRetval = !bRetval;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ return bRetval;
+ }
+ }
+
+ bool isInside(const B3DPolygon& rCandidate, const B3DPolygon& rPolygon, bool bWithBorder)
+ {
+ const sal_uInt32 nPointCount(rPolygon.count());
+
+ for(sal_uInt32 a(0L); a < nPointCount; a++)
+ {
+ const B3DPoint aTestPoint(rPolygon.getB3DPoint(a));
+
+ if(!isInside(rCandidate, aTestPoint, bWithBorder))
+ {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ bool isPointOnLine(const B3DPoint& rStart, const B3DPoint& rEnd, const B3DPoint& rCandidate, bool bWithPoints)
+ {
+ if(rCandidate.equal(rStart) || rCandidate.equal(rEnd))
+ {
+ // candidate is in epsilon around start or end -> inside
+ return bWithPoints;
+ }
+ else if(rStart.equal(rEnd))
+ {
+ // start and end are equal, but candidate is outside their epsilon -> outside
+ return false;
+ }
+ else
+ {
+ const B3DVector aEdgeVector(rEnd - rStart);
+ const B3DVector aTestVector(rCandidate - rStart);
+
+ if(areParallel(aEdgeVector, aTestVector))
+ {
+ const double fZero(0.0);
+ const double fOne(1.0);
+ double fParamTestOnCurr(0.0);
+
+ if(aEdgeVector.getX() > aEdgeVector.getY())
+ {
+ if(aEdgeVector.getX() > aEdgeVector.getZ())
+ {
+ // X is biggest
+ fParamTestOnCurr = aTestVector.getX() / aEdgeVector.getX();
+ }
+ else
+ {
+ // Z is biggest
+ fParamTestOnCurr = aTestVector.getZ() / aEdgeVector.getZ();
+ }
+ }
+ else
+ {
+ if(aEdgeVector.getY() > aEdgeVector.getZ())
+ {
+ // Y is biggest
+ fParamTestOnCurr = aTestVector.getY() / aEdgeVector.getY();
+ }
+ else
+ {
+ // Z is biggest
+ fParamTestOnCurr = aTestVector.getZ() / aEdgeVector.getZ();
+ }
+ }
+
+ if(fTools::more(fParamTestOnCurr, fZero) && fTools::less(fParamTestOnCurr, fOne))
+ {
+ return true;
+ }
+ }
+
+ return false;
+ }
+ }
+
+ bool isPointOnPolygon(const B3DPolygon& rCandidate, const B3DPoint& rPoint, bool bWithPoints)
+ {
+ const sal_uInt32 nPointCount(rCandidate.count());
+
+ if(nPointCount > 1L)
+ {
+ const sal_uInt32 nLoopCount(rCandidate.isClosed() ? nPointCount : nPointCount - 1L);
+ B3DPoint aCurrentPoint(rCandidate.getB3DPoint(0));
+
+ for(sal_uInt32 a(0); a < nLoopCount; a++)
+ {
+ const B3DPoint aNextPoint(rCandidate.getB3DPoint((a + 1) % nPointCount));
+
+ if(isPointOnLine(aCurrentPoint, aNextPoint, rPoint, bWithPoints))
+ {
+ return true;
+ }
+
+ aCurrentPoint = aNextPoint;
+ }
+ }
+ else if(nPointCount && bWithPoints)
+ {
+ return rPoint.equal(rCandidate.getB3DPoint(0));
+ }
+
+ return false;
+ }
+
+ bool getCutBetweenLineAndPlane(const B3DVector& rPlaneNormal, const B3DPoint& rPlanePoint, const B3DPoint& rEdgeStart, const B3DPoint& rEdgeEnd, double& fCut)
+ {
+ if(!rPlaneNormal.equalZero() && !rEdgeStart.equal(rEdgeEnd))
+ {
+ const B3DVector aTestEdge(rEdgeEnd - rEdgeStart);
+ const double fScalarEdge(rPlaneNormal.scalar(aTestEdge));
+
+ if(!fTools::equalZero(fScalarEdge))
+ {
+ const B3DVector aCompareEdge(rPlanePoint - rEdgeStart);
+ const double fScalarCompare(rPlaneNormal.scalar(aCompareEdge));
+
+ fCut = fScalarCompare / fScalarEdge;
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ bool getCutBetweenLineAndPolygon(const B3DPolygon& rCandidate, const B3DPoint& rEdgeStart, const B3DPoint& rEdgeEnd, double& fCut)
+ {
+ const sal_uInt32 nPointCount(rCandidate.count());
+
+ if(nPointCount > 2 && !rEdgeStart.equal(rEdgeEnd))
+ {
+ const B3DVector aPlaneNormal(rCandidate.getNormal());
+
+ if(!aPlaneNormal.equalZero())
+ {
+ const B3DPoint aPointOnPlane(rCandidate.getB3DPoint(0));
+
+ return getCutBetweenLineAndPlane(aPlaneNormal, aPointOnPlane, rEdgeStart, rEdgeEnd, fCut);
+ }
+ }
+
+ return false;
+ }
+
+ //////////////////////////////////////////////////////////////////////
+ // comparators with tolerance for 3D Polygons
+
+ bool equal(const B3DPolygon& rCandidateA, const B3DPolygon& rCandidateB, const double& rfSmallValue)
+ {
+ const sal_uInt32 nPointCount(rCandidateA.count());
+
+ if(nPointCount != rCandidateB.count())
+ return false;
+
+ const bool bClosed(rCandidateA.isClosed());
+
+ if(bClosed != rCandidateB.isClosed())
+ return false;
+
+ for(sal_uInt32 a(0); a < nPointCount; a++)
+ {
+ const B3DPoint aPoint(rCandidateA.getB3DPoint(a));
+
+ if(!aPoint.equal(rCandidateB.getB3DPoint(a), rfSmallValue))
+ return false;
+ }
+
+ return true;
+ }
+
+ bool equal(const B3DPolygon& rCandidateA, const B3DPolygon& rCandidateB)
+ {
+ const double fSmallValue(fTools::getSmallValue());
+
+ return equal(rCandidateA, rCandidateB, fSmallValue);
+ }
+
+ // snap points of horizontal or vertical edges to discrete values
+ B3DPolygon snapPointsOfHorizontalOrVerticalEdges(const B3DPolygon& rCandidate)
+ {
+ const sal_uInt32 nPointCount(rCandidate.count());
+
+ if(nPointCount > 1)
+ {
+ // Start by copying the source polygon to get a writeable copy. The closed state is
+ // copied by aRetval's initialisation, too, so no need to copy it in this method
+ B3DPolygon aRetval(rCandidate);
+
+ // prepare geometry data. Get rounded from original
+ B3ITuple aPrevTuple(basegfx::fround(rCandidate.getB3DPoint(nPointCount - 1)));
+ B3DPoint aCurrPoint(rCandidate.getB3DPoint(0));
+ B3ITuple aCurrTuple(basegfx::fround(aCurrPoint));
+
+ // loop over all points. This will also snap the implicit closing edge
+ // even when not closed, but that's no problem here
+ for(sal_uInt32 a(0); a < nPointCount; a++)
+ {
+ // get next point. Get rounded from original
+ const bool bLastRun(a + 1 == nPointCount);
+ const sal_uInt32 nNextIndex(bLastRun ? 0 : a + 1);
+ const B3DPoint aNextPoint(rCandidate.getB3DPoint(nNextIndex));
+ const B3ITuple aNextTuple(basegfx::fround(aNextPoint));
+
+ // get the states
+ const bool bPrevVertical(aPrevTuple.getX() == aCurrTuple.getX());
+ const bool bNextVertical(aNextTuple.getX() == aCurrTuple.getX());
+ const bool bPrevHorizontal(aPrevTuple.getY() == aCurrTuple.getY());
+ const bool bNextHorizontal(aNextTuple.getY() == aCurrTuple.getY());
+ const bool bSnapX(bPrevVertical || bNextVertical);
+ const bool bSnapY(bPrevHorizontal || bNextHorizontal);
+
+ if(bSnapX || bSnapY)
+ {
+ const B3DPoint aSnappedPoint(
+ bSnapX ? aCurrTuple.getX() : aCurrPoint.getX(),
+ bSnapY ? aCurrTuple.getY() : aCurrPoint.getY(),
+ aCurrPoint.getZ());
+
+ aRetval.setB3DPoint(a, aSnappedPoint);
+ }
+
+ // prepare next point
+ if(!bLastRun)
+ {
+ aPrevTuple = aCurrTuple;
+ aCurrPoint = aNextPoint;
+ aCurrTuple = aNextTuple;
+ }
+ }
+
+ return aRetval;
+ }
+ else
+ {
+ return rCandidate;
+ }
+ }
+
+ } // end of namespace tools
+} // end of namespace basegfx
+
+//////////////////////////////////////////////////////////////////////////////
+
+// eof
diff --git a/basegfx/source/polygon/b3dpolypolygon.cxx b/basegfx/source/polygon/b3dpolypolygon.cxx
new file mode 100644
index 000000000000..a29680b14a59
--- /dev/null
+++ b/basegfx/source/polygon/b3dpolypolygon.cxx
@@ -0,0 +1,446 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basegfx.hxx"
+#include <osl/diagnose.h>
+#include <basegfx/polygon/b3dpolypolygon.hxx>
+#include <basegfx/polygon/b3dpolygon.hxx>
+#include <rtl/instance.hxx>
+#include <basegfx/matrix/b2dhommatrix.hxx>
+#include <basegfx/matrix/b3dhommatrix.hxx>
+#include <functional>
+#include <vector>
+#include <algorithm>
+
+//////////////////////////////////////////////////////////////////////////////
+
+class ImplB3DPolyPolygon
+{
+ typedef ::std::vector< ::basegfx::B3DPolygon > PolygonVector;
+
+ PolygonVector maPolygons;
+
+public:
+ ImplB3DPolyPolygon() : maPolygons()
+ {
+ }
+
+ ImplB3DPolyPolygon(const ::basegfx::B3DPolygon& rToBeCopied) :
+ maPolygons(1,rToBeCopied)
+ {
+ }
+
+ bool operator==(const ImplB3DPolyPolygon& rPolygonList) const
+ {
+ // same polygon count?
+ if(maPolygons.size() != rPolygonList.maPolygons.size())
+ return false;
+
+ // compare polygon content
+ if(maPolygons != rPolygonList.maPolygons)
+ return false;
+
+ return true;
+ }
+
+ const ::basegfx::B3DPolygon& getB3DPolygon(sal_uInt32 nIndex) const
+ {
+ return maPolygons[nIndex];
+ }
+
+ void setB3DPolygon(sal_uInt32 nIndex, const ::basegfx::B3DPolygon& rPolygon)
+ {
+ maPolygons[nIndex] = rPolygon;
+ }
+
+ void insert(sal_uInt32 nIndex, const ::basegfx::B3DPolygon& rPolygon, sal_uInt32 nCount)
+ {
+ if(nCount)
+ {
+ // add nCount copies of rPolygon
+ PolygonVector::iterator aIndex(maPolygons.begin());
+ aIndex += nIndex;
+ maPolygons.insert(aIndex, nCount, rPolygon);
+ }
+ }
+
+ void insert(sal_uInt32 nIndex, const ::basegfx::B3DPolyPolygon& rPolyPolygon)
+ {
+ const sal_uInt32 nCount = rPolyPolygon.count();
+
+ if(nCount)
+ {
+ // add nCount polygons from rPolyPolygon
+ maPolygons.reserve(maPolygons.size() + nCount);
+ PolygonVector::iterator aIndex(maPolygons.begin());
+ aIndex += nIndex;
+
+ for(sal_uInt32 a(0L); a < nCount; a++)
+ {
+ maPolygons.insert(aIndex, rPolyPolygon.getB3DPolygon(a));
+ aIndex++;
+ }
+ }
+ }
+
+ void remove(sal_uInt32 nIndex, sal_uInt32 nCount)
+ {
+ if(nCount)
+ {
+ // remove polygon data
+ PolygonVector::iterator aStart(maPolygons.begin());
+ aStart += nIndex;
+ const PolygonVector::iterator aEnd(aStart + nCount);
+
+ maPolygons.erase(aStart, aEnd);
+ }
+ }
+
+ sal_uInt32 count() const
+ {
+ return maPolygons.size();
+ }
+
+ void setClosed(bool bNew)
+ {
+ for(sal_uInt32 a(0L); a < maPolygons.size(); a++)
+ {
+ maPolygons[a].setClosed(bNew);
+ }
+ }
+
+ void flip()
+ {
+ std::for_each( maPolygons.begin(),
+ maPolygons.end(),
+ std::mem_fun_ref( &::basegfx::B3DPolygon::flip ));
+ }
+
+ void removeDoublePoints()
+ {
+ std::for_each( maPolygons.begin(),
+ maPolygons.end(),
+ std::mem_fun_ref( &::basegfx::B3DPolygon::removeDoublePoints ));
+ }
+
+ void transform(const ::basegfx::B3DHomMatrix& rMatrix)
+ {
+ for(sal_uInt32 a(0L); a < maPolygons.size(); a++)
+ {
+ maPolygons[a].transform(rMatrix);
+ }
+ }
+
+ void clearBColors()
+ {
+ for(sal_uInt32 a(0L); a < maPolygons.size(); a++)
+ {
+ maPolygons[a].clearBColors();
+ }
+ }
+
+ void transformNormals(const ::basegfx::B3DHomMatrix& rMatrix)
+ {
+ for(sal_uInt32 a(0L); a < maPolygons.size(); a++)
+ {
+ maPolygons[a].transformNormals(rMatrix);
+ }
+ }
+
+ void clearNormals()
+ {
+ for(sal_uInt32 a(0L); a < maPolygons.size(); a++)
+ {
+ maPolygons[a].clearNormals();
+ }
+ }
+
+ void transformTextureCoordiantes(const ::basegfx::B2DHomMatrix& rMatrix)
+ {
+ for(sal_uInt32 a(0L); a < maPolygons.size(); a++)
+ {
+ maPolygons[a].transformTextureCoordiantes(rMatrix);
+ }
+ }
+
+ void clearTextureCoordinates()
+ {
+ for(sal_uInt32 a(0L); a < maPolygons.size(); a++)
+ {
+ maPolygons[a].clearTextureCoordinates();
+ }
+ }
+
+ void makeUnique()
+ {
+ std::for_each( maPolygons.begin(),
+ maPolygons.end(),
+ std::mem_fun_ref( &::basegfx::B3DPolygon::makeUnique ));
+ }
+};
+
+//////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+ namespace { struct DefaultPolyPolygon : public rtl::Static<B3DPolyPolygon::ImplType,
+ DefaultPolyPolygon> {}; }
+
+ B3DPolyPolygon::B3DPolyPolygon() :
+ mpPolyPolygon(DefaultPolyPolygon::get())
+ {
+ }
+
+ B3DPolyPolygon::B3DPolyPolygon(const B3DPolyPolygon& rPolyPolygon) :
+ mpPolyPolygon(rPolyPolygon.mpPolyPolygon)
+ {
+ }
+
+ B3DPolyPolygon::B3DPolyPolygon(const B3DPolygon& rPolygon) :
+ mpPolyPolygon( ImplB3DPolyPolygon(rPolygon) )
+ {
+ }
+
+ B3DPolyPolygon::~B3DPolyPolygon()
+ {
+ }
+
+ B3DPolyPolygon& B3DPolyPolygon::operator=(const B3DPolyPolygon& rPolyPolygon)
+ {
+ mpPolyPolygon = rPolyPolygon.mpPolyPolygon;
+ return *this;
+ }
+
+ void B3DPolyPolygon::makeUnique()
+ {
+ mpPolyPolygon.make_unique();
+ mpPolyPolygon->makeUnique();
+ }
+
+ bool B3DPolyPolygon::operator==(const B3DPolyPolygon& rPolyPolygon) const
+ {
+ if(mpPolyPolygon.same_object(rPolyPolygon.mpPolyPolygon))
+ return true;
+
+ return ((*mpPolyPolygon) == (*rPolyPolygon.mpPolyPolygon));
+ }
+
+ bool B3DPolyPolygon::operator!=(const B3DPolyPolygon& rPolyPolygon) const
+ {
+ return !(*this == rPolyPolygon);
+ }
+
+ sal_uInt32 B3DPolyPolygon::count() const
+ {
+ return mpPolyPolygon->count();
+ }
+
+ B3DPolygon B3DPolyPolygon::getB3DPolygon(sal_uInt32 nIndex) const
+ {
+ OSL_ENSURE(nIndex < mpPolyPolygon->count(), "B3DPolyPolygon access outside range (!)");
+
+ return mpPolyPolygon->getB3DPolygon(nIndex);
+ }
+
+ void B3DPolyPolygon::setB3DPolygon(sal_uInt32 nIndex, const B3DPolygon& rPolygon)
+ {
+ OSL_ENSURE(nIndex < mpPolyPolygon->count(), "B3DPolyPolygon access outside range (!)");
+
+ if(getB3DPolygon(nIndex) != rPolygon)
+ mpPolyPolygon->setB3DPolygon(nIndex, rPolygon);
+ }
+
+ bool B3DPolyPolygon::areBColorsUsed() const
+ {
+ for(sal_uInt32 a(0L); a < mpPolyPolygon->count(); a++)
+ {
+ if((mpPolyPolygon->getB3DPolygon(a)).areBColorsUsed())
+ {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ void B3DPolyPolygon::clearBColors()
+ {
+ if(areBColorsUsed())
+ mpPolyPolygon->clearBColors();
+ }
+
+ void B3DPolyPolygon::transformNormals(const B3DHomMatrix& rMatrix)
+ {
+ if(!rMatrix.isIdentity())
+ mpPolyPolygon->transformNormals(rMatrix);
+ }
+
+ bool B3DPolyPolygon::areNormalsUsed() const
+ {
+ for(sal_uInt32 a(0L); a < mpPolyPolygon->count(); a++)
+ {
+ if((mpPolyPolygon->getB3DPolygon(a)).areNormalsUsed())
+ {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ void B3DPolyPolygon::clearNormals()
+ {
+ if(areNormalsUsed())
+ mpPolyPolygon->clearNormals();
+ }
+
+ void B3DPolyPolygon::transformTextureCoordiantes(const B2DHomMatrix& rMatrix)
+ {
+ if(!rMatrix.isIdentity())
+ mpPolyPolygon->transformTextureCoordiantes(rMatrix);
+ }
+
+ bool B3DPolyPolygon::areTextureCoordinatesUsed() const
+ {
+ for(sal_uInt32 a(0L); a < mpPolyPolygon->count(); a++)
+ {
+ if((mpPolyPolygon->getB3DPolygon(a)).areTextureCoordinatesUsed())
+ {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ void B3DPolyPolygon::clearTextureCoordinates()
+ {
+ if(areTextureCoordinatesUsed())
+ mpPolyPolygon->clearTextureCoordinates();
+ }
+
+ void B3DPolyPolygon::insert(sal_uInt32 nIndex, const B3DPolygon& rPolygon, sal_uInt32 nCount)
+ {
+ OSL_ENSURE(nIndex <= mpPolyPolygon->count(), "B3DPolyPolygon Insert outside range (!)");
+
+ if(nCount)
+ mpPolyPolygon->insert(nIndex, rPolygon, nCount);
+ }
+
+ void B3DPolyPolygon::append(const B3DPolygon& rPolygon, sal_uInt32 nCount)
+ {
+ if(nCount)
+ mpPolyPolygon->insert(mpPolyPolygon->count(), rPolygon, nCount);
+ }
+
+ void B3DPolyPolygon::insert(sal_uInt32 nIndex, const B3DPolyPolygon& rPolyPolygon)
+ {
+ OSL_ENSURE(nIndex <= mpPolyPolygon->count(), "B3DPolyPolygon Insert outside range (!)");
+
+ if(rPolyPolygon.count())
+ mpPolyPolygon->insert(nIndex, rPolyPolygon);
+ }
+
+ void B3DPolyPolygon::append(const B3DPolyPolygon& rPolyPolygon)
+ {
+ if(rPolyPolygon.count())
+ mpPolyPolygon->insert(mpPolyPolygon->count(), rPolyPolygon);
+ }
+
+ void B3DPolyPolygon::remove(sal_uInt32 nIndex, sal_uInt32 nCount)
+ {
+ OSL_ENSURE(nIndex + nCount <= mpPolyPolygon->count(), "B3DPolyPolygon Remove outside range (!)");
+
+ if(nCount)
+ mpPolyPolygon->remove(nIndex, nCount);
+ }
+
+ void B3DPolyPolygon::clear()
+ {
+ mpPolyPolygon = DefaultPolyPolygon::get();
+ }
+
+ bool B3DPolyPolygon::isClosed() const
+ {
+ bool bRetval(true);
+
+ // PolyPOlygon is closed when all contained Polygons are closed or
+ // no Polygon exists.
+ for(sal_uInt32 a(0L); bRetval && a < mpPolyPolygon->count(); a++)
+ {
+ if(!(mpPolyPolygon->getB3DPolygon(a)).isClosed())
+ {
+ bRetval = false;
+ }
+ }
+
+ return bRetval;
+ }
+
+ void B3DPolyPolygon::setClosed(bool bNew)
+ {
+ if(bNew != isClosed())
+ mpPolyPolygon->setClosed(bNew);
+ }
+
+ void B3DPolyPolygon::flip()
+ {
+ mpPolyPolygon->flip();
+ }
+
+ bool B3DPolyPolygon::hasDoublePoints() const
+ {
+ bool bRetval(false);
+
+ for(sal_uInt32 a(0L); !bRetval && a < mpPolyPolygon->count(); a++)
+ {
+ if((mpPolyPolygon->getB3DPolygon(a)).hasDoublePoints())
+ {
+ bRetval = true;
+ }
+ }
+
+ return bRetval;
+ }
+
+ void B3DPolyPolygon::removeDoublePoints()
+ {
+ if(hasDoublePoints())
+ mpPolyPolygon->removeDoublePoints();
+ }
+
+ void B3DPolyPolygon::transform(const B3DHomMatrix& rMatrix)
+ {
+ if(mpPolyPolygon->count() && !rMatrix.isIdentity())
+ {
+ mpPolyPolygon->transform(rMatrix);
+ }
+ }
+} // end of namespace basegfx
+
+// eof
diff --git a/basegfx/source/polygon/b3dpolypolygontools.cxx b/basegfx/source/polygon/b3dpolypolygontools.cxx
new file mode 100644
index 000000000000..d86a4526acfd
--- /dev/null
+++ b/basegfx/source/polygon/b3dpolypolygontools.cxx
@@ -0,0 +1,556 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basegfx.hxx"
+#include <basegfx/polygon/b3dpolypolygontools.hxx>
+#include <basegfx/range/b3drange.hxx>
+#include <basegfx/polygon/b3dpolypolygon.hxx>
+#include <basegfx/polygon/b3dpolygon.hxx>
+#include <basegfx/polygon/b3dpolygontools.hxx>
+#include <numeric>
+#include <basegfx/matrix/b3dhommatrix.hxx>
+#include <basegfx/numeric/ftools.hxx>
+#include <osl/mutex.hxx>
+
+//////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+ namespace tools
+ {
+ // B3DPolyPolygon tools
+ B3DRange getRange(const B3DPolyPolygon& rCandidate)
+ {
+ B3DRange aRetval;
+ const sal_uInt32 nPolygonCount(rCandidate.count());
+
+ for(sal_uInt32 a(0L); a < nPolygonCount; a++)
+ {
+ B3DPolygon aCandidate = rCandidate.getB3DPolygon(a);
+ aRetval.expand(getRange(aCandidate));
+ }
+
+ return aRetval;
+ }
+
+ void applyLineDashing(const B3DPolyPolygon& rCandidate, const ::std::vector<double>& rDotDashArray, B3DPolyPolygon* pLineTarget, B3DPolyPolygon* pGapTarget, double fFullDashDotLen)
+ {
+ if(0.0 == fFullDashDotLen && rDotDashArray.size())
+ {
+ // calculate fFullDashDotLen from rDotDashArray
+ fFullDashDotLen = ::std::accumulate(rDotDashArray.begin(), rDotDashArray.end(), 0.0);
+ }
+
+ if(rCandidate.count() && fFullDashDotLen > 0.0)
+ {
+ B3DPolyPolygon aLineTarget, aGapTarget;
+
+ for(sal_uInt32 a(0L); a < rCandidate.count(); a++)
+ {
+ const B3DPolygon aCandidate(rCandidate.getB3DPolygon(a));
+
+ applyLineDashing(
+ aCandidate,
+ rDotDashArray,
+ pLineTarget ? &aLineTarget : 0,
+ pGapTarget ? &aGapTarget : 0,
+ fFullDashDotLen);
+
+ if(pLineTarget)
+ {
+ pLineTarget->append(aLineTarget);
+ }
+
+ if(pGapTarget)
+ {
+ pGapTarget->append(aGapTarget);
+ }
+ }
+ }
+ }
+
+ B3DPolyPolygon createUnitCubePolyPolygon()
+ {
+ static B3DPolyPolygon aRetval;
+ ::osl::Mutex m_mutex;
+
+ if(!aRetval.count())
+ {
+ B3DPolygon aTemp;
+ aTemp.append(B3DPoint(0.0, 0.0, 1.0));
+ aTemp.append(B3DPoint(0.0, 1.0, 1.0));
+ aTemp.append(B3DPoint(1.0, 1.0, 1.0));
+ aTemp.append(B3DPoint(1.0, 0.0, 1.0));
+ aTemp.setClosed(true);
+ aRetval.append(aTemp);
+
+ aTemp.clear();
+ aTemp.append(B3DPoint(0.0, 0.0, 0.0));
+ aTemp.append(B3DPoint(0.0, 1.0, 0.0));
+ aTemp.append(B3DPoint(1.0, 1.0, 0.0));
+ aTemp.append(B3DPoint(1.0, 0.0, 0.0));
+ aTemp.setClosed(true);
+ aRetval.append(aTemp);
+
+ aTemp.clear();
+ aTemp.append(B3DPoint(0.0, 0.0, 0.0));
+ aTemp.append(B3DPoint(0.0, 0.0, 1.0));
+ aRetval.append(aTemp);
+
+ aTemp.clear();
+ aTemp.append(B3DPoint(0.0, 1.0, 0.0));
+ aTemp.append(B3DPoint(0.0, 1.0, 1.0));
+ aRetval.append(aTemp);
+
+ aTemp.clear();
+ aTemp.append(B3DPoint(1.0, 1.0, 0.0));
+ aTemp.append(B3DPoint(1.0, 1.0, 1.0));
+ aRetval.append(aTemp);
+
+ aTemp.clear();
+ aTemp.append(B3DPoint(1.0, 0.0, 0.0));
+ aTemp.append(B3DPoint(1.0, 0.0, 1.0));
+ aRetval.append(aTemp);
+ }
+
+ return aRetval;
+ }
+
+ B3DPolyPolygon createUnitCubeFillPolyPolygon()
+ {
+ static B3DPolyPolygon aRetval;
+ ::osl::Mutex m_mutex;
+
+ if(!aRetval.count())
+ {
+ B3DPolygon aTemp;
+
+ // all points
+ const B3DPoint A(0.0, 0.0, 0.0);
+ const B3DPoint B(0.0, 1.0, 0.0);
+ const B3DPoint C(1.0, 1.0, 0.0);
+ const B3DPoint D(1.0, 0.0, 0.0);
+ const B3DPoint E(0.0, 0.0, 1.0);
+ const B3DPoint F(0.0, 1.0, 1.0);
+ const B3DPoint G(1.0, 1.0, 1.0);
+ const B3DPoint H(1.0, 0.0, 1.0);
+
+ // create bottom
+ aTemp.append(D);
+ aTemp.append(A);
+ aTemp.append(E);
+ aTemp.append(H);
+ aTemp.setClosed(true);
+ aRetval.append(aTemp);
+
+ // create front
+ aTemp.clear();
+ aTemp.append(B);
+ aTemp.append(A);
+ aTemp.append(D);
+ aTemp.append(C);
+ aTemp.setClosed(true);
+ aRetval.append(aTemp);
+
+ // create left
+ aTemp.clear();
+ aTemp.append(E);
+ aTemp.append(A);
+ aTemp.append(B);
+ aTemp.append(F);
+ aTemp.setClosed(true);
+ aRetval.append(aTemp);
+
+ // create top
+ aTemp.clear();
+ aTemp.append(C);
+ aTemp.append(G);
+ aTemp.append(F);
+ aTemp.append(B);
+ aTemp.setClosed(true);
+ aRetval.append(aTemp);
+
+ // create right
+ aTemp.clear();
+ aTemp.append(H);
+ aTemp.append(G);
+ aTemp.append(C);
+ aTemp.append(D);
+ aTemp.setClosed(true);
+ aRetval.append(aTemp);
+
+ // create back
+ aTemp.clear();
+ aTemp.append(F);
+ aTemp.append(G);
+ aTemp.append(H);
+ aTemp.append(E);
+ aTemp.setClosed(true);
+ aRetval.append(aTemp);
+ }
+
+ return aRetval;
+ }
+
+ B3DPolyPolygon createCubePolyPolygonFromB3DRange( const B3DRange& rRange)
+ {
+ B3DPolyPolygon aRetval;
+
+ if(!rRange.isEmpty())
+ {
+ aRetval = createUnitCubePolyPolygon();
+ B3DHomMatrix aTrans;
+ aTrans.scale(rRange.getWidth(), rRange.getHeight(), rRange.getDepth());
+ aTrans.translate(rRange.getMinX(), rRange.getMinY(), rRange.getMinZ());
+ aRetval.transform(aTrans);
+ aRetval.removeDoublePoints();
+ }
+
+ return aRetval;
+ }
+
+ B3DPolyPolygon createCubeFillPolyPolygonFromB3DRange( const B3DRange& rRange)
+ {
+ B3DPolyPolygon aRetval;
+
+ if(!rRange.isEmpty())
+ {
+ aRetval = createUnitCubeFillPolyPolygon();
+ B3DHomMatrix aTrans;
+ aTrans.scale(rRange.getWidth(), rRange.getHeight(), rRange.getDepth());
+ aTrans.translate(rRange.getMinX(), rRange.getMinY(), rRange.getMinZ());
+ aRetval.transform(aTrans);
+ aRetval.removeDoublePoints();
+ }
+
+ return aRetval;
+ }
+
+ // helper for getting the 3D Point from given cartesian coordiantes. fVer is defined from
+ // [F_PI2 .. -F_PI2], fHor from [0.0 .. F_2PI]
+ inline B3DPoint getPointFromCartesian(double fVer, double fHor)
+ {
+ const double fCosHor(cos(fHor));
+ return B3DPoint(fCosHor * cos(fVer), sin(fHor), fCosHor * -sin(fVer));
+ }
+
+ B3DPolyPolygon createUnitSpherePolyPolygon(
+ sal_uInt32 nHorSeg, sal_uInt32 nVerSeg,
+ double fVerStart, double fVerStop,
+ double fHorStart, double fHorStop)
+ {
+ B3DPolyPolygon aRetval;
+ sal_uInt32 a, b;
+
+ if(!nHorSeg)
+ {
+ nHorSeg = fround(fabs(fHorStop - fHorStart) / (F_2PI / 24.0));
+ }
+
+ if(!nHorSeg)
+ {
+ nHorSeg = 1L;
+ }
+
+ if(!nVerSeg)
+ {
+ nVerSeg = fround(fabs(fVerStop - fVerStart) / (F_2PI / 24.0));
+ }
+
+ if(!nVerSeg)
+ {
+ nVerSeg = 1L;
+ }
+
+ // create constants
+ const double fVerDiffPerStep((fVerStop - fVerStart) / (double)nVerSeg);
+ const double fHorDiffPerStep((fHorStop - fHorStart) / (double)nHorSeg);
+ bool bHorClosed(fTools::equal(fHorStop - fHorStart, F_2PI));
+ bool bVerFromTop(fTools::equal(fVerStart, F_PI2));
+ bool bVerToBottom(fTools::equal(fVerStop, -F_PI2));
+
+ // create horizontal rings
+ const sal_uInt32 nLoopVerInit(bVerFromTop ? 1L : 0L);
+ const sal_uInt32 nLoopVerLimit(bVerToBottom ? nVerSeg : nVerSeg + 1L);
+ const sal_uInt32 nLoopHorLimit(bHorClosed ? nHorSeg : nHorSeg + 1L);
+
+ for(a = nLoopVerInit; a < nLoopVerLimit; a++)
+ {
+ const double fVer(fVerStart + ((double)(a) * fVerDiffPerStep));
+ B3DPolygon aNew;
+
+ for(b = 0L; b < nLoopHorLimit; b++)
+ {
+ const double fHor(fHorStart + ((double)(b) * fHorDiffPerStep));
+ aNew.append(getPointFromCartesian(fHor, fVer));
+ }
+
+ aNew.setClosed(bHorClosed);
+ aRetval.append(aNew);
+ }
+
+ // create vertical half-rings
+ for(a = 0L; a < nLoopHorLimit; a++)
+ {
+ const double fHor(fHorStart + ((double)(a) * fHorDiffPerStep));
+ B3DPolygon aNew;
+
+ if(bVerFromTop)
+ {
+ aNew.append(B3DPoint(0.0, 1.0, 0.0));
+ }
+
+ for(b = nLoopVerInit; b < nLoopVerLimit; b++)
+ {
+ const double fVer(fVerStart + ((double)(b) * fVerDiffPerStep));
+ aNew.append(getPointFromCartesian(fHor, fVer));
+ }
+
+ if(bVerToBottom)
+ {
+ aNew.append(B3DPoint(0.0, -1.0, 0.0));
+ }
+
+ aRetval.append(aNew);
+ }
+
+ return aRetval;
+ }
+
+ B3DPolyPolygon createSpherePolyPolygonFromB3DRange( const B3DRange& rRange,
+ sal_uInt32 nHorSeg, sal_uInt32 nVerSeg,
+ double fVerStart, double fVerStop,
+ double fHorStart, double fHorStop)
+ {
+ B3DPolyPolygon aRetval(createUnitSpherePolyPolygon(nHorSeg, nVerSeg, fVerStart, fVerStop, fHorStart, fHorStop));
+
+ if(aRetval.count())
+ {
+ // move and scale whole construct which is now in [-1.0 .. 1.0] in all directions
+ B3DHomMatrix aTrans;
+ aTrans.translate(1.0, 1.0, 1.0);
+ aTrans.scale(rRange.getWidth() / 2.0, rRange.getHeight() / 2.0, rRange.getDepth() / 2.0);
+ aTrans.translate(rRange.getMinX(), rRange.getMinY(), rRange.getMinZ());
+ aRetval.transform(aTrans);
+ }
+
+ return aRetval;
+ }
+
+ B3DPolyPolygon createUnitSphereFillPolyPolygon(
+ sal_uInt32 nHorSeg, sal_uInt32 nVerSeg,
+ bool bNormals,
+ double fVerStart, double fVerStop,
+ double fHorStart, double fHorStop)
+ {
+ B3DPolyPolygon aRetval;
+
+ if(!nHorSeg)
+ {
+ nHorSeg = fround(fabs(fHorStop - fHorStart) / (F_2PI / 24.0));
+ }
+
+ if(!nHorSeg)
+ {
+ nHorSeg = 1L;
+ }
+
+ if(!nVerSeg)
+ {
+ nVerSeg = fround(fabs(fVerStop - fVerStart) / (F_2PI / 24.0));
+ }
+
+ if(!nVerSeg)
+ {
+ nVerSeg = 1L;
+ }
+
+ // vertical loop
+ for(sal_uInt32 a(0L); a < nVerSeg; a++)
+ {
+ const double fVer(fVerStart + (((fVerStop - fVerStart) * a) / nVerSeg));
+ const double fVer2(fVerStart + (((fVerStop - fVerStart) * (a + 1)) / nVerSeg));
+
+ // horizontal loop
+ for(sal_uInt32 b(0L); b < nHorSeg; b++)
+ {
+ const double fHor(fHorStart + (((fHorStop - fHorStart) * b) / nHorSeg));
+ const double fHor2(fHorStart + (((fHorStop - fHorStart) * (b + 1)) / nHorSeg));
+ B3DPolygon aNew;
+
+ aNew.append(getPointFromCartesian(fHor, fVer));
+ aNew.append(getPointFromCartesian(fHor2, fVer));
+ aNew.append(getPointFromCartesian(fHor2, fVer2));
+ aNew.append(getPointFromCartesian(fHor, fVer2));
+
+ if(bNormals)
+ {
+ for(sal_uInt32 c(0L); c < aNew.count(); c++)
+ {
+ aNew.setNormal(c, ::basegfx::B3DVector(aNew.getB3DPoint(c)));
+ }
+ }
+
+ aNew.setClosed(true);
+ aRetval.append(aNew);
+ }
+ }
+
+ return aRetval;
+ }
+
+ B3DPolyPolygon createSphereFillPolyPolygonFromB3DRange( const B3DRange& rRange,
+ sal_uInt32 nHorSeg, sal_uInt32 nVerSeg,
+ bool bNormals,
+ double fVerStart, double fVerStop,
+ double fHorStart, double fHorStop)
+ {
+ B3DPolyPolygon aRetval(createUnitSphereFillPolyPolygon(nHorSeg, nVerSeg, bNormals, fVerStart, fVerStop, fHorStart, fHorStop));
+
+ if(aRetval.count())
+ {
+ // move and scale whole construct which is now in [-1.0 .. 1.0] in all directions
+ B3DHomMatrix aTrans;
+ aTrans.translate(1.0, 1.0, 1.0);
+ aTrans.scale(rRange.getWidth() / 2.0, rRange.getHeight() / 2.0, rRange.getDepth() / 2.0);
+ aTrans.translate(rRange.getMinX(), rRange.getMinY(), rRange.getMinZ());
+ aRetval.transform(aTrans);
+ }
+
+ return aRetval;
+ }
+
+ B3DPolyPolygon applyDefaultNormalsSphere( const B3DPolyPolygon& rCandidate, const B3DPoint& rCenter)
+ {
+ B3DPolyPolygon aRetval;
+
+ for(sal_uInt32 a(0L); a < rCandidate.count(); a++)
+ {
+ aRetval.append(applyDefaultNormalsSphere(rCandidate.getB3DPolygon(a), rCenter));
+ }
+
+ return aRetval;
+ }
+
+ B3DPolyPolygon invertNormals( const B3DPolyPolygon& rCandidate)
+ {
+ B3DPolyPolygon aRetval;
+
+ for(sal_uInt32 a(0L); a < rCandidate.count(); a++)
+ {
+ aRetval.append(invertNormals(rCandidate.getB3DPolygon(a)));
+ }
+
+ return aRetval;
+ }
+
+ B3DPolyPolygon applyDefaultTextureCoordinatesParallel( const B3DPolyPolygon& rCandidate, const B3DRange& rRange, bool bChangeX, bool bChangeY)
+ {
+ B3DPolyPolygon aRetval;
+
+ for(sal_uInt32 a(0L); a < rCandidate.count(); a++)
+ {
+ aRetval.append(applyDefaultTextureCoordinatesParallel(rCandidate.getB3DPolygon(a), rRange, bChangeX, bChangeY));
+ }
+
+ return aRetval;
+ }
+
+ B3DPolyPolygon applyDefaultTextureCoordinatesSphere( const B3DPolyPolygon& rCandidate, const B3DPoint& rCenter, bool bChangeX, bool bChangeY)
+ {
+ B3DPolyPolygon aRetval;
+
+ for(sal_uInt32 a(0L); a < rCandidate.count(); a++)
+ {
+ aRetval.append(applyDefaultTextureCoordinatesSphere(rCandidate.getB3DPolygon(a), rCenter, bChangeX, bChangeY));
+ }
+
+ return aRetval;
+ }
+
+ bool isInside(const B3DPolyPolygon& rCandidate, const B3DPoint& rPoint, bool bWithBorder)
+ {
+ const sal_uInt32 nPolygonCount(rCandidate.count());
+
+ if(1L == nPolygonCount)
+ {
+ return isInside(rCandidate.getB3DPolygon(0), rPoint, bWithBorder);
+ }
+ else
+ {
+ sal_Int32 nInsideCount(0);
+
+ for(sal_uInt32 a(0); a < nPolygonCount; a++)
+ {
+ const B3DPolygon aPolygon(rCandidate.getB3DPolygon(a));
+ const bool bInside(isInside(aPolygon, rPoint, bWithBorder));
+
+ if(bInside)
+ {
+ nInsideCount++;
+ }
+ }
+
+ return (nInsideCount % 2L);
+ }
+ }
+
+ //////////////////////////////////////////////////////////////////////
+ // comparators with tolerance for 3D PolyPolygons
+
+ bool equal(const B3DPolyPolygon& rCandidateA, const B3DPolyPolygon& rCandidateB, const double& rfSmallValue)
+ {
+ const sal_uInt32 nPolygonCount(rCandidateA.count());
+
+ if(nPolygonCount != rCandidateB.count())
+ return false;
+
+ for(sal_uInt32 a(0); a < nPolygonCount; a++)
+ {
+ const B3DPolygon aCandidate(rCandidateA.getB3DPolygon(a));
+
+ if(!equal(aCandidate, rCandidateB.getB3DPolygon(a), rfSmallValue))
+ return false;
+ }
+
+ return true;
+ }
+
+ bool equal(const B3DPolyPolygon& rCandidateA, const B3DPolyPolygon& rCandidateB)
+ {
+ const double fSmallValue(fTools::getSmallValue());
+
+ return equal(rCandidateA, rCandidateB, fSmallValue);
+ }
+
+ } // end of namespace tools
+} // end of namespace basegfx
+
+//////////////////////////////////////////////////////////////////////////////
+
+// eof
diff --git a/basegfx/source/polygon/makefile.mk b/basegfx/source/polygon/makefile.mk
new file mode 100644
index 000000000000..7ac71ada5e8e
--- /dev/null
+++ b/basegfx/source/polygon/makefile.mk
@@ -0,0 +1,63 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..$/..
+PRJNAME=basegfx
+TARGET=polygon
+
+#UNOUCRRDB=$(SOLARBINDIR)$/applicat.rdb
+ENABLE_EXCEPTIONS=TRUE
+#USE_DEFFILE=TRUE
+
+# --- Settings ----------------------------------
+
+.INCLUDE : settings.mk
+
+# --- Files -------------------------------------
+
+SLOFILES= \
+ $(SLO)$/b2dpolygon.obj \
+ $(SLO)$/b2dpolygontools.obj \
+ $(SLO)$/b2dpolypolygon.obj \
+ $(SLO)$/b2dpolypolygontools.obj \
+ $(SLO)$/b2dsvgpolypolygon.obj \
+ $(SLO)$/b2dlinegeometry.obj \
+ $(SLO)$/b2dpolypolygoncutter.obj \
+ $(SLO)$/b2dpolypolygonrasterconverter.obj \
+ $(SLO)$/b2dpolygonclipper.obj \
+ $(SLO)$/b2dpolygontriangulator.obj \
+ $(SLO)$/b2dpolygoncutandtouch.obj \
+ $(SLO)$/b2dtrapezoid.obj \
+ $(SLO)$/b3dpolygon.obj \
+ $(SLO)$/b3dpolygontools.obj \
+ $(SLO)$/b3dpolypolygon.obj \
+ $(SLO)$/b3dpolypolygontools.obj \
+ $(SLO)$/b3dpolygonclipper.obj
+
+# --- Targets ----------------------------------
+
+.INCLUDE : target.mk
diff --git a/basegfx/source/range/b1drange.cxx b/basegfx/source/range/b1drange.cxx
new file mode 100644
index 000000000000..6581b04680e2
--- /dev/null
+++ b/basegfx/source/range/b1drange.cxx
@@ -0,0 +1,56 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basegfx.hxx"
+#include <basegfx/range/b1drange.hxx>
+#include <basegfx/range/b1irange.hxx>
+#include <basegfx/numeric/ftools.hxx>
+
+namespace basegfx
+{
+ B1DRange::B1DRange( const B1IRange& rRange ) :
+ maRange()
+ {
+ if( !rRange.isEmpty() )
+ {
+ maRange = rRange.getMinimum();
+ expand(rRange.getMaximum());
+ }
+ }
+
+ B1IRange fround(const B1DRange& rRange)
+ {
+ return rRange.isEmpty() ?
+ B1IRange() :
+ B1IRange( fround( rRange.getMinimum()),
+ fround( rRange.getMaximum()) );
+ }
+
+} // end of namespace basegfx
+
+// eof
diff --git a/basegfx/source/range/b2dpolyrange.cxx b/basegfx/source/range/b2dpolyrange.cxx
new file mode 100644
index 000000000000..e212e083ef55
--- /dev/null
+++ b/basegfx/source/range/b2dpolyrange.cxx
@@ -0,0 +1,423 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: b2dmultirange.cxx,v $
+ * $Revision: 1.8 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basegfx.hxx"
+#include <basegfx/range/b2dpolyrange.hxx>
+
+#include <basegfx/range/b2drange.hxx>
+#include <basegfx/range/b2drangeclipper.hxx>
+#include <basegfx/tuple/b2dtuple.hxx>
+#include <basegfx/polygon/b2dpolypolygon.hxx>
+
+#include <boost/bind.hpp>
+#include <boost/tuple/tuple.hpp>
+#include <algorithm>
+#include <vector>
+
+static basegfx::B2VectorOrientation flipOrientation(
+ basegfx::B2VectorOrientation eOrient)
+{
+ return eOrient == basegfx::ORIENTATION_POSITIVE ?
+ basegfx::ORIENTATION_NEGATIVE : basegfx::ORIENTATION_POSITIVE;
+}
+
+namespace basegfx
+{
+ class ImplB2DPolyRange
+ {
+ void updateBounds()
+ {
+ maBounds.reset();
+ std::for_each(maRanges.begin(),
+ maRanges.end(),
+ boost::bind(
+ (void (B2DRange::*)(const B2DRange&))(
+ &B2DRange::expand),
+ boost::ref(maBounds),
+ _1));
+ }
+
+ public:
+ ImplB2DPolyRange() :
+ maBounds(),
+ maRanges(),
+ maOrient()
+ {}
+
+ explicit ImplB2DPolyRange( const B2DPolyRange::ElementType& rElem ) :
+ maBounds( boost::get<0>(rElem) ),
+ maRanges( 1, boost::get<0>(rElem) ),
+ maOrient( 1, boost::get<1>(rElem) )
+ {}
+
+ explicit ImplB2DPolyRange( const B2DRange& rRange, B2VectorOrientation eOrient ) :
+ maBounds( rRange ),
+ maRanges( 1, rRange ),
+ maOrient( 1, eOrient )
+ {}
+
+ bool operator==(const ImplB2DPolyRange& rRHS) const
+ {
+ return maRanges == rRHS.maRanges && maOrient == rRHS.maOrient;
+ }
+
+ sal_uInt32 count() const
+ {
+ return maRanges.size();
+ }
+
+ B2DPolyRange::ElementType getElement(sal_uInt32 nIndex) const
+ {
+ return boost::make_tuple(maRanges[nIndex],
+ maOrient[nIndex]);
+ }
+
+ void setElement(sal_uInt32 nIndex, const B2DPolyRange::ElementType& rElement )
+ {
+ maRanges[nIndex] = boost::get<0>(rElement);
+ maOrient[nIndex] = boost::get<1>(rElement);
+ updateBounds();
+ }
+
+ void setElement(sal_uInt32 nIndex, const B2DRange& rRange, B2VectorOrientation eOrient )
+ {
+ maRanges[nIndex] = rRange;
+ maOrient[nIndex] = eOrient;
+ updateBounds();
+ }
+
+ void insertElement(sal_uInt32 nIndex, const B2DPolyRange::ElementType& rElement, sal_uInt32 nCount)
+ {
+ maRanges.insert(maRanges.begin()+nIndex, nCount, boost::get<0>(rElement));
+ maOrient.insert(maOrient.begin()+nIndex, nCount, boost::get<1>(rElement));
+ maBounds.expand(boost::get<0>(rElement));
+ }
+
+ void insertElement(sal_uInt32 nIndex, const B2DRange& rRange, B2VectorOrientation eOrient, sal_uInt32 nCount)
+ {
+ maRanges.insert(maRanges.begin()+nIndex, nCount, rRange);
+ maOrient.insert(maOrient.begin()+nIndex, nCount, eOrient);
+ maBounds.expand(rRange);
+ }
+
+ void appendElement(const B2DPolyRange::ElementType& rElement, sal_uInt32 nCount)
+ {
+ maRanges.insert(maRanges.end(), nCount, boost::get<0>(rElement));
+ maOrient.insert(maOrient.end(), nCount, boost::get<1>(rElement));
+ maBounds.expand(boost::get<0>(rElement));
+ }
+
+ void appendElement(const B2DRange& rRange, B2VectorOrientation eOrient, sal_uInt32 nCount)
+ {
+ maRanges.insert(maRanges.end(), nCount, rRange);
+ maOrient.insert(maOrient.end(), nCount, eOrient);
+ maBounds.expand(rRange);
+ }
+
+ void insertPolyRange(sal_uInt32 nIndex, const ImplB2DPolyRange& rPolyRange)
+ {
+ maRanges.insert(maRanges.begin()+nIndex, rPolyRange.maRanges.begin(), rPolyRange.maRanges.end());
+ maOrient.insert(maOrient.begin()+nIndex, rPolyRange.maOrient.begin(), rPolyRange.maOrient.end());
+ updateBounds();
+ }
+
+ void appendPolyRange(const ImplB2DPolyRange& rPolyRange)
+ {
+ maRanges.insert(maRanges.end(),
+ rPolyRange.maRanges.begin(),
+ rPolyRange.maRanges.end());
+ maOrient.insert(maOrient.end(),
+ rPolyRange.maOrient.begin(),
+ rPolyRange.maOrient.end());
+ updateBounds();
+ }
+
+ void remove(sal_uInt32 nIndex, sal_uInt32 nCount)
+ {
+ maRanges.erase(maRanges.begin()+nIndex,maRanges.begin()+nIndex+nCount);
+ maOrient.erase(maOrient.begin()+nIndex,maOrient.begin()+nIndex+nCount);
+ updateBounds();
+ }
+
+ void clear()
+ {
+ std::vector<B2DRange> aTmpRanges;
+ std::vector<B2VectorOrientation> aTmpOrient;
+
+ maRanges.swap(aTmpRanges);
+ maOrient.swap(aTmpOrient);
+
+ maBounds.reset();
+ }
+
+ void flip()
+ {
+ std::for_each(maOrient.begin(),
+ maOrient.end(),
+ boost::bind(
+ &flipOrientation,
+ _1));
+ }
+
+ B2DRange getBounds() const
+ {
+ return maBounds;
+ }
+
+ template< typename ValueType > bool isInside( const ValueType& rValue ) const
+ {
+ if( !maBounds.isInside( rValue ) )
+ return false;
+
+ // cannot use boost::bind here, since isInside is overloaded.
+ // It is currently not possible to resolve the overload
+ // by considering one of the other template arguments.
+ std::vector<B2DRange>::const_iterator aCurr( maRanges.begin() );
+ const std::vector<B2DRange>::const_iterator aEnd ( maRanges.end() );
+ while( aCurr != aEnd )
+ if( aCurr->isInside( rValue ) )
+ return true;
+
+ return false;
+ }
+
+ bool overlaps( const B2DRange& rRange ) const
+ {
+ if( !maBounds.overlaps( rRange ) )
+ return false;
+
+ const std::vector<B2DRange>::const_iterator aEnd( maRanges.end() );
+ return std::find_if( maRanges.begin(),
+ aEnd,
+ boost::bind<bool>( boost::mem_fn( &B2DRange::overlaps ),
+ _1,
+ boost::cref(rRange) ) ) != aEnd;
+ }
+
+ B2DPolyPolygon solveCrossovers() const
+ {
+ return tools::solveCrossovers(maRanges,maOrient);
+ }
+
+ const B2DRange* begin() const
+ {
+ if(maRanges.empty())
+ return 0;
+ else
+ return &maRanges.front();
+ }
+
+ const B2DRange* end() const
+ {
+ if(maRanges.empty())
+ return 0;
+ else
+ return (&maRanges.back())+1;
+ }
+
+ B2DRange* begin()
+ {
+ if(maRanges.empty())
+ return 0;
+ else
+ return &maRanges.front();
+ }
+
+ B2DRange* end()
+ {
+ if(maRanges.empty())
+ return 0;
+ else
+ return (&maRanges.back())+1;
+ }
+
+ private:
+ B2DRange maBounds;
+ std::vector<B2DRange> maRanges;
+ std::vector<B2VectorOrientation> maOrient;
+ };
+
+ B2DPolyRange::B2DPolyRange() :
+ mpImpl()
+ {}
+
+ B2DPolyRange::~B2DPolyRange()
+ {}
+
+ B2DPolyRange::B2DPolyRange( const ElementType& rElem ) :
+ mpImpl( ImplB2DPolyRange( rElem ) )
+ {}
+
+ B2DPolyRange::B2DPolyRange( const B2DRange& rRange, B2VectorOrientation eOrient ) :
+ mpImpl( ImplB2DPolyRange( rRange, eOrient ) )
+ {}
+
+ B2DPolyRange::B2DPolyRange( const B2DPolyRange& rRange ) :
+ mpImpl( rRange.mpImpl )
+ {}
+
+ B2DPolyRange& B2DPolyRange::operator=( const B2DPolyRange& rRange )
+ {
+ mpImpl = rRange.mpImpl;
+ return *this;
+ }
+
+ void B2DPolyRange::makeUnique()
+ {
+ mpImpl.make_unique();
+ }
+
+ bool B2DPolyRange::operator==(const B2DPolyRange& rRange) const
+ {
+ if(mpImpl.same_object(rRange.mpImpl))
+ return true;
+
+ return ((*mpImpl) == (*rRange.mpImpl));
+ }
+
+ bool B2DPolyRange::operator!=(const B2DPolyRange& rRange) const
+ {
+ return !(*this == rRange);
+ }
+
+ sal_uInt32 B2DPolyRange::count() const
+ {
+ return mpImpl->count();
+ }
+
+ B2DPolyRange::ElementType B2DPolyRange::getElement(sal_uInt32 nIndex) const
+ {
+ return mpImpl->getElement(nIndex);
+ }
+
+ void B2DPolyRange::setElement(sal_uInt32 nIndex, const ElementType& rElement )
+ {
+ mpImpl->setElement(nIndex, rElement);
+ }
+
+ void B2DPolyRange::setElement(sal_uInt32 nIndex, const B2DRange& rRange, B2VectorOrientation eOrient )
+ {
+ mpImpl->setElement(nIndex, rRange, eOrient );
+ }
+
+ void B2DPolyRange::insertElement(sal_uInt32 nIndex, const ElementType& rElement, sal_uInt32 nCount)
+ {
+ mpImpl->insertElement(nIndex, rElement, nCount );
+ }
+
+ void B2DPolyRange::insertElement(sal_uInt32 nIndex, const B2DRange& rRange, B2VectorOrientation eOrient, sal_uInt32 nCount)
+ {
+ mpImpl->insertElement(nIndex, rRange, eOrient, nCount );
+ }
+
+ void B2DPolyRange::appendElement(const ElementType& rElement, sal_uInt32 nCount)
+ {
+ mpImpl->appendElement(rElement, nCount);
+ }
+
+ void B2DPolyRange::appendElement(const B2DRange& rRange, B2VectorOrientation eOrient, sal_uInt32 nCount)
+ {
+ mpImpl->appendElement(rRange, eOrient, nCount );
+ }
+
+ void B2DPolyRange::insertPolyRange(sal_uInt32 nIndex, const B2DPolyRange& rRange)
+ {
+ mpImpl->insertPolyRange(nIndex, *rRange.mpImpl);
+ }
+
+ void B2DPolyRange::appendPolyRange(const B2DPolyRange& rRange)
+ {
+ mpImpl->appendPolyRange(*rRange.mpImpl);
+ }
+
+ void B2DPolyRange::remove(sal_uInt32 nIndex, sal_uInt32 nCount)
+ {
+ mpImpl->remove(nIndex, nCount);
+ }
+
+ void B2DPolyRange::clear()
+ {
+ mpImpl->clear();
+ }
+
+ void B2DPolyRange::flip()
+ {
+ mpImpl->flip();
+ }
+
+ B2DRange B2DPolyRange::getBounds() const
+ {
+ return mpImpl->getBounds();
+ }
+
+ bool B2DPolyRange::isInside( const B2DTuple& rTuple ) const
+ {
+ return mpImpl->isInside(rTuple);
+ }
+
+ bool B2DPolyRange::isInside( const B2DRange& rRange ) const
+ {
+ return mpImpl->isInside(rRange);
+ }
+
+ bool B2DPolyRange::overlaps( const B2DRange& rRange ) const
+ {
+ return mpImpl->overlaps(rRange);
+ }
+
+ B2DPolyPolygon B2DPolyRange::solveCrossovers() const
+ {
+ return mpImpl->solveCrossovers();
+ }
+
+ const B2DRange* B2DPolyRange::begin() const
+ {
+ return mpImpl->begin();
+ }
+
+ const B2DRange* B2DPolyRange::end() const
+ {
+ return mpImpl->end();
+ }
+
+ B2DRange* B2DPolyRange::begin()
+ {
+ return mpImpl->begin();
+ }
+
+ B2DRange* B2DPolyRange::end()
+ {
+ return mpImpl->end();
+ }
+
+} // end of namespace basegfx
+
+// eof
diff --git a/basegfx/source/range/b2drange.cxx b/basegfx/source/range/b2drange.cxx
new file mode 100644
index 000000000000..693470c3ef14
--- /dev/null
+++ b/basegfx/source/range/b2drange.cxx
@@ -0,0 +1,74 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basegfx.hxx"
+
+#include <basegfx/range/b2drange.hxx>
+#include <basegfx/range/b2irange.hxx>
+#include <basegfx/numeric/ftools.hxx>
+#include <basegfx/matrix/b2dhommatrix.hxx>
+
+namespace basegfx
+{
+ B2DRange::B2DRange( const B2IRange& rRange ) :
+ maRangeX(),
+ maRangeY()
+ {
+ if( !rRange.isEmpty() )
+ {
+ maRangeX = rRange.getMinX();
+ maRangeY = rRange.getMinY();
+
+ maRangeX.expand(rRange.getMaxX());
+ maRangeY.expand(rRange.getMaxY());
+ }
+ }
+
+ void B2DRange::transform(const B2DHomMatrix& rMatrix)
+ {
+ if(!isEmpty() && !rMatrix.isIdentity())
+ {
+ const B2DRange aSource(*this);
+ reset();
+ expand(rMatrix * B2DPoint(aSource.getMinX(), aSource.getMinY()));
+ expand(rMatrix * B2DPoint(aSource.getMaxX(), aSource.getMinY()));
+ expand(rMatrix * B2DPoint(aSource.getMinX(), aSource.getMaxY()));
+ expand(rMatrix * B2DPoint(aSource.getMaxX(), aSource.getMaxY()));
+ }
+ }
+
+ B2IRange fround(const B2DRange& rRange)
+ {
+ return rRange.isEmpty() ?
+ B2IRange() :
+ B2IRange(fround(rRange.getMinimum()),
+ fround(rRange.getMaximum()));
+ }
+} // end of namespace basegfx
+
+// eof
diff --git a/basegfx/source/range/b2drangeclipper.cxx b/basegfx/source/range/b2drangeclipper.cxx
new file mode 100644
index 000000000000..524479b4fde0
--- /dev/null
+++ b/basegfx/source/range/b2drangeclipper.cxx
@@ -0,0 +1,950 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: b2dmultirange.cxx,v $
+ * $Revision: 1.8 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basegfx.hxx"
+
+#include <rtl/math.hxx>
+
+#include <basegfx/tuple/b2dtuple.hxx>
+#include <basegfx/range/b2drange.hxx>
+#include <basegfx/range/b2dpolyrange.hxx>
+#include <basegfx/polygon/b2dpolypolygon.hxx>
+#include <basegfx/polygon/b2dpolygontools.hxx>
+#include <basegfx/polygon/b2dpolypolygontools.hxx>
+
+#include <o3tl/vector_pool.hxx>
+#include <boost/bind.hpp>
+#include <boost/utility.hpp>
+
+#include <algorithm>
+#include <deque>
+#include <list>
+
+
+namespace basegfx
+{
+ namespace
+ {
+ // Generating a poly-polygon from a bunch of rectangles
+ //
+ // Helper functionality for sweep-line algorithm
+ // ====================================================
+
+ typedef std::vector<B2DRange> VectorOfRanges;
+
+ class ImplPolygon;
+ typedef o3tl::vector_pool<ImplPolygon> VectorOfPolygons;
+
+
+ /** This class represents an active edge
+
+ As the sweep line traverses across the overall area,
+ rectangle edges parallel to it generate events, and
+ rectangle edges orthogonal to it generate active
+ edges. This class represents the latter.
+ */
+ class ActiveEdge
+ {
+ public:
+ /** The two possible active rectangle edges differ by one
+ coordinate value - the upper edge has the lower, the
+ lower edge the higher value.
+ */
+ enum EdgeType {
+ /// edge with lower coordinate value
+ UPPER=0,
+ /// edge with higher coordinate value
+ LOWER=1
+ };
+
+ enum EdgeDirection {
+ /// edge proceeds to the left
+ PROCEED_LEFT=0,
+ /// edge proceeds to the right
+ PROCEED_RIGHT=1
+ };
+
+ /** Create active edge
+
+ @param rRect
+ Rectangle this edge is part of
+
+ @param fInvariantCoord
+ The invariant ccordinate value of this edge
+
+ @param eEdgeType
+ Is fInvariantCoord the lower or the higher value, for
+ this rect?
+ */
+ ActiveEdge( const B2DRectangle& rRect,
+ const double& fInvariantCoord,
+ std::ptrdiff_t nPolyIdx,
+ EdgeType eEdgeType,
+ EdgeDirection eEdgeDirection ) :
+ mfInvariantCoord(fInvariantCoord),
+ mpAssociatedRect( &rRect ),
+ mnPolygonIdx( nPolyIdx ),
+ meEdgeType( eEdgeType ),
+ meEdgeDirection( eEdgeDirection )
+ {}
+
+ double getInvariantCoord() const { return mfInvariantCoord; }
+ const B2DRectangle& getRect() const { return *mpAssociatedRect; }
+ std::ptrdiff_t getTargetPolygonIndex() const { return mnPolygonIdx; }
+ void setTargetPolygonIndex( std::ptrdiff_t nIdx ) { mnPolygonIdx = nIdx; }
+ EdgeType getEdgeType() const { return meEdgeType; }
+ EdgeDirection getEdgeDirection() const { return meEdgeDirection; }
+
+ /// For STL sort
+ bool operator<( const ActiveEdge& rRHS ) const { return mfInvariantCoord < rRHS.mfInvariantCoord; }
+
+ private:
+ /** The invariant coordinate value of this edge (e.g. the
+ common y value, for a horizontal edge)
+ */
+ double mfInvariantCoord;
+
+ /** Associated rectangle
+
+ This on the one hand saves some storage space (the
+ vector of rectangles is persistent, anyway), and on
+ the other hand provides an identifier to match active
+ edges and x events (see below)
+
+ Ptr because class needs to be assignable
+ */
+ const B2DRectangle* mpAssociatedRect;
+
+ /** Index of the polygon this edge is currently involved
+ with.
+
+ Note that this can change for some kinds of edge
+ intersection, as the algorithm tends to swap
+ associated polygons there.
+
+ -1 denotes no assigned polygon
+ */
+ std::ptrdiff_t mnPolygonIdx;
+
+ /// 'upper' or 'lower' edge of original rectangle.
+ EdgeType meEdgeType;
+
+ /// 'left' or 'right'
+ EdgeDirection meEdgeDirection;
+ };
+
+ // Needs to be list - various places hold ptrs to elements
+ typedef std::list< ActiveEdge > ListOfEdges;
+
+
+ /** Element of the sweep line event list
+
+ As the sweep line traverses across the overall area,
+ rectangle edges parallel to it generate events, and
+ rectangle edges orthogonal to it generate active
+ edges. This class represents the former.
+
+ The class defines an element of the sweep line list. The
+ sweep line's position jumps in steps defined by the
+ coordinates of the sorted SweepLineEvent entries.
+ */
+ class SweepLineEvent
+ {
+ public:
+ /** The two possible sweep line rectangle edges differ by
+ one coordinate value - the starting edge has the
+ lower, the finishing edge the higher value.
+ */
+ enum EdgeType {
+ /// edge with lower coordinate value
+ STARTING_EDGE=0,
+ /// edge with higher coordinate value
+ FINISHING_EDGE=1
+ };
+
+ /** The two possible sweep line directions
+ */
+ enum EdgeDirection {
+ PROCEED_UP=0,
+ PROCEED_DOWN=1
+ };
+
+ /** Create sweep line event
+
+ @param fPos
+ Coordinate position of the event
+
+ @param rRect
+ Rectangle this event is generated for.
+
+ @param eEdgeType
+ Is fPos the lower or the higher value, for the
+ rectangle this event is generated for?
+ */
+ SweepLineEvent( double fPos,
+ const B2DRectangle& rRect,
+ EdgeType eEdgeType,
+ EdgeDirection eDirection) :
+ mfPos( fPos ),
+ mpAssociatedRect( &rRect ),
+ meEdgeType( eEdgeType ),
+ meEdgeDirection( eDirection )
+ {}
+
+ double getPos() const { return mfPos; }
+ const B2DRectangle& getRect() const { return *mpAssociatedRect; }
+ EdgeType getEdgeType() const { return meEdgeType; }
+ EdgeDirection getEdgeDirection() const { return meEdgeDirection; }
+
+ /// For STL sort
+ bool operator<( const SweepLineEvent& rRHS ) const { return mfPos < rRHS.mfPos; }
+
+ private:
+ /// position of the event, in the direction of the line sweep
+ double mfPos;
+
+ /** Rectangle this event is generated for
+
+ This on the one hand saves some storage space (the
+ vector of rectangles is persistent, anyway), and on
+ the other hand provides an identifier to match active
+ edges and events (see below)
+
+ Ptr because class needs to be assignable
+ */
+ const B2DRectangle* mpAssociatedRect;
+
+ /// 'upper' or 'lower' edge of original rectangle.
+ EdgeType meEdgeType;
+
+ /// 'up' or 'down'
+ EdgeDirection meEdgeDirection;
+ };
+
+ typedef std::vector< SweepLineEvent > VectorOfEvents;
+
+
+ /** Smart point container for B2DMultiRange::getPolyPolygon()
+
+ This class provides methods needed only here, and is used
+ as a place to store some additional information per
+ polygon. Also, most of the intersection logic is
+ implemented here.
+ */
+ class ImplPolygon
+ {
+ public:
+ /** Create polygon
+ */
+ ImplPolygon() :
+ mpLeadingRightEdge(NULL),
+ mnIdx(-1),
+ maPoints(),
+ mbIsFinished(false)
+ {
+ // completely ad-hoc. but what the hell.
+ maPoints.reserve(11);
+ }
+
+ void setPolygonPoolIndex( std::ptrdiff_t nIdx ) { mnIdx = nIdx; }
+ bool isFinished() const { return mbIsFinished; }
+
+ /// Add point to the end of the existing points
+ void append( const B2DPoint& rPoint )
+ {
+ OSL_PRECOND( maPoints.empty() ||
+ maPoints.back().getX() == rPoint.getX() ||
+ maPoints.back().getY() == rPoint.getY(),
+ "ImplPolygon::append(): added point violates 90 degree line angle constraint!" );
+
+ if( maPoints.empty() ||
+ maPoints.back() != rPoint )
+ {
+ // avoid duplicate points
+ maPoints.push_back( rPoint );
+ }
+ }
+
+ /** Perform the intersection of this polygon with an
+ active edge.
+
+ @param rEvent
+ The vertical line event that generated the
+ intersection
+
+ @param rActiveEdge
+ The active edge that generated the intersection
+
+ @param rPolygonPool
+ Polygon pool, we sometimes need to allocate a new one
+
+ @param bIsFinishingEdge
+ True, when this is hitting the last edge of the
+ vertical sweep - every vertical sweep starts and ends
+ with upper and lower edge of the _same_ rectangle.
+
+ @return the new current polygon (that's the one
+ processing must proceed with, when going through the
+ list of upcoming active edges).
+ */
+ std::ptrdiff_t intersect( SweepLineEvent& rEvent,
+ ActiveEdge& rActiveEdge,
+ VectorOfPolygons& rPolygonPool,
+ B2DPolyPolygon& rRes,
+ bool isFinishingEdge )
+ {
+ OSL_PRECOND( !isFinished(),
+ "ImplPolygon::intersect(): called on already finished polygon!" );
+ OSL_PRECOND( !isFinishingEdge
+ || (isFinishingEdge && &rEvent.getRect() == &rActiveEdge.getRect()),
+ "ImplPolygon::intersect(): inconsistent ending!" );
+
+ const B2DPoint aIntersectionPoint( rEvent.getPos(),
+ rActiveEdge.getInvariantCoord() );
+
+ // intersection point, goes to our polygon
+ // unconditionally
+ append(aIntersectionPoint);
+
+ const bool isSweepLineEnteringRect(
+ rEvent.getEdgeType() == SweepLineEvent::STARTING_EDGE);
+ if( isFinishingEdge )
+ {
+ if( isSweepLineEnteringRect )
+ handleFinalOwnRightEdge(rActiveEdge);
+ else
+ handleFinalOwnLeftEdge(rActiveEdge,
+ rPolygonPool,
+ rRes);
+
+ // we're done with this rect & sweep line
+ return -1;
+ }
+ else if( metOwnEdge(rEvent,rActiveEdge) )
+ {
+ handleInitialOwnEdge(rEvent, rActiveEdge);
+
+ // point already added, all init done, continue
+ // with same poly
+ return mnIdx;
+ }
+ else
+ {
+ OSL_ENSURE( rActiveEdge.getTargetPolygonIndex() != -1,
+ "ImplPolygon::intersect(): non-trivial intersection hit empty polygon!" );
+
+ const bool isHittingLeftEdge(
+ rActiveEdge.getEdgeDirection() == ActiveEdge::PROCEED_LEFT);
+
+ if( isHittingLeftEdge )
+ return handleComplexLeftEdge(rActiveEdge,
+ aIntersectionPoint,
+ rPolygonPool,
+ rRes);
+ else
+ return handleComplexRightEdge(rActiveEdge,
+ aIntersectionPoint,
+ rPolygonPool);
+ }
+ }
+
+ private:
+ std::ptrdiff_t getPolygonPoolIndex() const { return mnIdx; }
+
+ void handleInitialOwnEdge(SweepLineEvent& rEvent,
+ ActiveEdge& rActiveEdge)
+ {
+ const bool isActiveEdgeProceedLeft(
+ rActiveEdge.getEdgeDirection() == ActiveEdge::PROCEED_LEFT);
+ const bool isSweepLineEnteringRect(
+ rEvent.getEdgeType() == SweepLineEvent::STARTING_EDGE);
+ (void)isActiveEdgeProceedLeft;
+ (void)isSweepLineEnteringRect;
+
+ OSL_ENSURE( isSweepLineEnteringRect == isActiveEdgeProceedLeft,
+ "ImplPolygon::intersect(): sweep initial own edge hit: wrong polygon order" );
+
+ OSL_ENSURE( isSweepLineEnteringRect ||
+ mpLeadingRightEdge == &rActiveEdge,
+ "ImplPolygon::intersect(): sweep initial own edge hit: wrong leading edge" );
+ }
+
+ void handleFinalOwnRightEdge(ActiveEdge& rActiveEdge)
+ {
+ OSL_ENSURE( rActiveEdge.getEdgeDirection() == ActiveEdge::PROCEED_RIGHT,
+ "ImplPolygon::handleInitialOwnRightEdge(): start edge wrong polygon order" );
+
+ rActiveEdge.setTargetPolygonIndex(mnIdx);
+ mpLeadingRightEdge = &rActiveEdge;
+ }
+
+ void handleFinalOwnLeftEdge(ActiveEdge& rActiveEdge,
+ VectorOfPolygons& rPolygonPool,
+ B2DPolyPolygon& rRes)
+ {
+ OSL_ENSURE( rActiveEdge.getEdgeDirection() == ActiveEdge::PROCEED_LEFT,
+ "ImplPolygon::handleFinalOwnLeftEdge(): end edge wrong polygon order" );
+
+ const bool isHittingOurTail(
+ rActiveEdge.getTargetPolygonIndex() == mnIdx);
+
+ if( isHittingOurTail )
+ finish(rRes); // just finish. no fuss.
+ else
+ {
+ // temp poly hits final left edge
+ const std::ptrdiff_t nTmpIdx=rActiveEdge.getTargetPolygonIndex();
+ ImplPolygon& rTmp=rPolygonPool.get(nTmpIdx);
+
+ // active edge's polygon has points
+ // already. ours need to go in front of them.
+ maPoints.insert(maPoints.end(),
+ rTmp.maPoints.begin(),
+ rTmp.maPoints.end());
+
+ // adjust leading edges, we're switching the polygon
+ ActiveEdge* const pFarEdge=rTmp.mpLeadingRightEdge;
+
+ mpLeadingRightEdge = pFarEdge;
+ pFarEdge->setTargetPolygonIndex(mnIdx);
+
+ // nTmpIdx is an empty shell, get rid of it
+ rPolygonPool.free(nTmpIdx);
+ }
+ }
+
+ std::ptrdiff_t handleComplexLeftEdge(ActiveEdge& rActiveEdge,
+ const B2DPoint& rIntersectionPoint,
+ VectorOfPolygons& rPolygonPool,
+ B2DPolyPolygon& rRes)
+ {
+ const bool isHittingOurTail(
+ rActiveEdge.getTargetPolygonIndex() == mnIdx);
+ if( isHittingOurTail )
+ {
+ finish(rRes);
+
+ // so "this" is done - need new polygon to collect
+ // further points
+ const std::ptrdiff_t nIdxNewPolygon=rPolygonPool.alloc();
+ rPolygonPool.get(nIdxNewPolygon).setPolygonPoolIndex(nIdxNewPolygon);
+ rPolygonPool.get(nIdxNewPolygon).append(rIntersectionPoint);
+
+ rActiveEdge.setTargetPolygonIndex(nIdxNewPolygon);
+
+ return nIdxNewPolygon;
+ }
+ else
+ {
+ const std::ptrdiff_t nTmpIdx=rActiveEdge.getTargetPolygonIndex();
+ ImplPolygon& rTmp=rPolygonPool.get(nTmpIdx);
+
+ // active edge's polygon has points
+ // already. ours need to go in front of them.
+ maPoints.insert(maPoints.end(),
+ rTmp.maPoints.begin(),
+ rTmp.maPoints.end());
+
+ rTmp.maPoints.clear();
+ rTmp.append(rIntersectionPoint);
+
+ // adjust leading edges, we're switching the polygon
+ ActiveEdge* const pFarEdge=rTmp.mpLeadingRightEdge;
+ ActiveEdge* const pNearEdge=&rActiveEdge;
+
+ rTmp.mpLeadingRightEdge = NULL;
+ pNearEdge->setTargetPolygonIndex(nTmpIdx);
+
+ mpLeadingRightEdge = pFarEdge;
+ pFarEdge->setTargetPolygonIndex(mnIdx);
+
+ return nTmpIdx;
+ }
+ }
+
+ std::ptrdiff_t handleComplexRightEdge(ActiveEdge& rActiveEdge,
+ const B2DPoint& rIntersectionPoint,
+ VectorOfPolygons& rPolygonPool)
+ {
+ const std::ptrdiff_t nTmpIdx=rActiveEdge.getTargetPolygonIndex();
+ ImplPolygon& rTmp=rPolygonPool.get(nTmpIdx);
+
+ rTmp.append(rIntersectionPoint);
+
+ rActiveEdge.setTargetPolygonIndex(mnIdx);
+ mpLeadingRightEdge = &rActiveEdge;
+
+ rTmp.mpLeadingRightEdge = NULL;
+
+ return nTmpIdx;
+ }
+
+ /// True when sweep line hits our own active edge
+ bool metOwnEdge(const SweepLineEvent& rEvent,
+ ActiveEdge& rActiveEdge)
+ {
+ const bool bHitOwnEdge=&rEvent.getRect() == &rActiveEdge.getRect();
+ return bHitOwnEdge;
+ }
+
+ /// Retrieve B2DPolygon from this object
+ B2DPolygon getPolygon() const
+ {
+ B2DPolygon aRes;
+ std::for_each( maPoints.begin(),
+ maPoints.end(),
+ boost::bind(
+ &B2DPolygon::append,
+ boost::ref(aRes),
+ _1,
+ 1 ) );
+ aRes.setClosed( true );
+ return aRes;
+ }
+
+ /** Finish this polygon, push to result set.
+ */
+ void finish(B2DPolyPolygon& rRes)
+ {
+ OSL_PRECOND( maPoints.empty() ||
+ maPoints.front().getX() == maPoints.back().getX() ||
+ maPoints.front().getY() == maPoints.back().getY(),
+ "ImplPolygon::finish(): first and last point violate 90 degree line angle constraint!" );
+
+ mbIsFinished = true;
+ mpLeadingRightEdge = NULL;
+
+ rRes.append(getPolygon());
+ }
+
+ /** Refers to the current leading edge element of this
+ polygon, or NULL. The leading edge denotes the 'front'
+ of the polygon vertex sequence, i.e. the coordinates
+ at the polygon's leading edge are returned from
+ maPoints.front()
+ */
+ ActiveEdge* mpLeadingRightEdge;
+
+ /// current index into vector pool
+ std::ptrdiff_t mnIdx;
+
+ /// Container for the actual polygon points
+ std::vector<B2DPoint> maPoints;
+
+ /// When true, this polygon is 'done', i.e. nothing must be added anymore.
+ bool mbIsFinished;
+ };
+
+ /** Init sweep line event list
+
+ This method fills the event list with the sweep line
+ events generated from the input rectangles, and sorts them
+ with increasing x.
+ */
+ void setupSweepLineEventListFromRanges( VectorOfEvents& o_rEventVector,
+ const std::vector<B2DRange>& rRanges,
+ const std::vector<B2VectorOrientation>& rOrientations )
+ {
+ // we need exactly 2*rectVec.size() events: one for the
+ // left, and one for the right edge of each rectangle
+ o_rEventVector.clear();
+ o_rEventVector.reserve( 2*rRanges.size() );
+
+ // generate events
+ // ===============
+
+ // first pass: add all left edges in increasing order
+ std::vector<B2DRange>::const_iterator aCurrRect=rRanges.begin();
+ std::vector<B2VectorOrientation>::const_iterator aCurrOrientation=rOrientations.begin();
+ const std::vector<B2DRange>::const_iterator aEnd=rRanges.end();
+ const std::vector<B2VectorOrientation>::const_iterator aEndOrientation=rOrientations.end();
+ while( aCurrRect != aEnd && aCurrOrientation != aEndOrientation )
+ {
+ const B2DRectangle& rCurrRect( *aCurrRect++ );
+
+ o_rEventVector.push_back(
+ SweepLineEvent( rCurrRect.getMinX(),
+ rCurrRect,
+ SweepLineEvent::STARTING_EDGE,
+ (*aCurrOrientation++) == ORIENTATION_POSITIVE ?
+ SweepLineEvent::PROCEED_UP : SweepLineEvent::PROCEED_DOWN) );
+ }
+
+ // second pass: add all right edges in reversed order
+ std::vector<B2DRange>::const_reverse_iterator aCurrRectR=rRanges.rbegin();
+ std::vector<B2VectorOrientation>::const_reverse_iterator aCurrOrientationR=rOrientations.rbegin();
+ const std::vector<B2DRange>::const_reverse_iterator aEndR=rRanges.rend();
+ const std::vector<B2VectorOrientation>::const_reverse_iterator aEndOrientationR=rOrientations.rend();
+ while( aCurrRectR != aEndR )
+ {
+ const B2DRectangle& rCurrRect( *aCurrRectR++ );
+
+ o_rEventVector.push_back(
+ SweepLineEvent( rCurrRect.getMaxX(),
+ rCurrRect,
+ SweepLineEvent::FINISHING_EDGE,
+ (*aCurrOrientationR++) == ORIENTATION_POSITIVE ?
+ SweepLineEvent::PROCEED_DOWN : SweepLineEvent::PROCEED_UP ) );
+ }
+
+ // sort events
+ // ===========
+
+ // since we use stable_sort, the order of events with the
+ // same x value will not change. The elaborate two-pass
+ // add above thus ensures, that for each two rectangles
+ // with similar left and right x coordinates, the
+ // rectangle whose left event comes first will have its
+ // right event come last. This is advantageous for the
+ // clip algorithm below, see handleRightEdgeCrossing().
+
+ // TODO(P3): Use radix sort (from
+ // b2dpolypolygonrasterconverter, or have your own
+ // templatized version).
+ std::stable_sort( o_rEventVector.begin(),
+ o_rEventVector.end() );
+ }
+
+ /** Insert two active edge segments for the given rectangle.
+
+ This method creates two active edge segments from the
+ given rect, and inserts them into the active edge list,
+ such that this stays sorted (if it was before).
+
+ @param io_rEdgeList
+ Active edge list to insert into
+
+ @param io_rPolygons
+ Vector of polygons. Each rectangle added creates one
+ tentative result polygon in this vector, and the edge list
+ entries holds a reference to that polygon (this _requires_
+ that the polygon vector does not reallocate, i.e. it must
+ have at least the maximal number of rectangles reserved)
+
+ @param o_CurrentPolygon
+ The then-current polygon when processing this sweep line
+ event
+
+ @param rCurrEvent
+ The actual event that caused this call
+ */
+ void createActiveEdgesFromStartEvent( ListOfEdges& io_rEdgeList,
+ VectorOfPolygons& io_rPolygonPool,
+ SweepLineEvent& rCurrEvent )
+ {
+ ListOfEdges aNewEdges;
+ const B2DRectangle& rRect=rCurrEvent.getRect();
+ const bool bGoesDown=rCurrEvent.getEdgeDirection() == SweepLineEvent::PROCEED_DOWN;
+
+ // start event - new rect starts here, needs polygon to
+ // collect points into
+ const std::ptrdiff_t nIdxPolygon=io_rPolygonPool.alloc();
+ io_rPolygonPool.get(nIdxPolygon).setPolygonPoolIndex(nIdxPolygon);
+
+ // upper edge
+ aNewEdges.push_back(
+ ActiveEdge(
+ rRect,
+ rRect.getMinY(),
+ bGoesDown ? nIdxPolygon : -1,
+ ActiveEdge::UPPER,
+ bGoesDown ? ActiveEdge::PROCEED_LEFT : ActiveEdge::PROCEED_RIGHT) );
+ // lower edge
+ aNewEdges.push_back(
+ ActiveEdge(
+ rRect,
+ rRect.getMaxY(),
+ bGoesDown ? -1 : nIdxPolygon,
+ ActiveEdge::LOWER,
+ bGoesDown ? ActiveEdge::PROCEED_RIGHT : ActiveEdge::PROCEED_LEFT ) );
+
+ // furthermore, have to respect a special tie-breaking
+ // rule here, for edges which share the same y value:
+ // newly added upper edges must be inserted _before_ any
+ // other edge with the same y value, and newly added lower
+ // edges must be _after_ all other edges with the same
+ // y. This ensures that the left vertical edge processing
+ // below encounters the upper edge of the current rect
+ // first, and the lower edge last, which automatically
+ // starts and finishes this rect correctly (as only then,
+ // the polygon will have their associated active edges
+ // set).
+ const double nMinY( rRect.getMinY() );
+ const double nMaxY( rRect.getMaxY() );
+ ListOfEdges::iterator aCurr( io_rEdgeList.begin() );
+ const ListOfEdges::iterator aEnd ( io_rEdgeList.end() );
+ while( aCurr != aEnd )
+ {
+ const double nCurrY( aCurr->getInvariantCoord() );
+
+ if( nCurrY >= nMinY &&
+ aNewEdges.size() == 2 ) // only add, if not yet done.
+ {
+ // insert upper edge _before_ aCurr. Thus, it will
+ // be the first entry for a range of equal y
+ // values. Using splice here, since we hold
+ // references to the moved list element!
+ io_rEdgeList.splice( aCurr,
+ aNewEdges,
+ aNewEdges.begin() );
+ }
+
+ if( nCurrY > nMaxY )
+ {
+ // insert lower edge _before_ aCurr. Thus, it will
+ // be the last entry for a range of equal y values
+ // (aCurr is the first entry strictly larger than
+ // nMaxY). Using splice here, since we hold
+ // references to the moved list element!
+ io_rEdgeList.splice( aCurr,
+ aNewEdges,
+ aNewEdges.begin() );
+ // done with insertion, can early-exit here.
+ return;
+ }
+
+ ++aCurr;
+ }
+
+ // append remainder of aNewList (might still contain 2 or
+ // 1 elements, depending of the contents of io_rEdgeList).
+ io_rEdgeList.splice( aCurr,
+ aNewEdges );
+ }
+
+ inline bool isSameRect(ActiveEdge& rEdge,
+ const basegfx::B2DRange& rRect)
+ {
+ return &rEdge.getRect() == &rRect;
+ }
+
+ // wow what a hack. necessary because stl's list::erase does
+ // not eat reverse_iterator
+ template<typename Cont, typename Iter> Iter eraseFromList(Cont&, Iter);
+ template<> inline ListOfEdges::iterator eraseFromList(
+ ListOfEdges& rList, ListOfEdges::iterator aIter)
+ {
+ return rList.erase(aIter);
+ }
+ template<> inline ListOfEdges::reverse_iterator eraseFromList(
+ ListOfEdges& rList, ListOfEdges::reverse_iterator aIter)
+ {
+ return ListOfEdges::reverse_iterator(
+ rList.erase(boost::prior(aIter.base())));
+ }
+
+ template<int bPerformErase,
+ typename Iterator> inline void processActiveEdges(
+ Iterator first,
+ Iterator last,
+ ListOfEdges& rActiveEdgeList,
+ SweepLineEvent& rCurrEvent,
+ VectorOfPolygons& rPolygonPool,
+ B2DPolyPolygon& rRes )
+ {
+ const basegfx::B2DRange& rCurrRect=rCurrEvent.getRect();
+
+ // fast-forward to rCurrEvent's first active edge (holds
+ // for both starting and finishing sweep line events, a
+ // rect is regarded _outside_ any rects whose events have
+ // started earlier
+ first = std::find_if(first, last,
+ boost::bind(
+ &isSameRect,
+ _1,
+ boost::cref(rCurrRect)));
+
+ if(first == last)
+ return;
+
+ int nCount=0;
+ std::ptrdiff_t nCurrPolyIdx=-1;
+ while(first != last)
+ {
+ if( nCurrPolyIdx == -1 )
+ nCurrPolyIdx=first->getTargetPolygonIndex();
+
+ OSL_ASSERT(nCurrPolyIdx != -1);
+
+ // second encounter of my rect -> second edge
+ // encountered, done
+ const bool bExit=
+ nCount &&
+ isSameRect(*first,
+ rCurrRect);
+
+ // deal with current active edge
+ nCurrPolyIdx =
+ rPolygonPool.get(nCurrPolyIdx).intersect(
+ rCurrEvent,
+ *first,
+ rPolygonPool,
+ rRes,
+ bExit);
+
+ // prune upper & lower active edges, if requested
+ if( bPerformErase && (bExit || !nCount) )
+ first = eraseFromList(rActiveEdgeList,first);
+ else
+ ++first;
+
+ // delayed exit, had to prune first
+ if( bExit )
+ return;
+
+ ++nCount;
+ }
+ }
+
+ template<int bPerformErase> inline void processActiveEdgesTopDown(
+ SweepLineEvent& rCurrEvent,
+ ListOfEdges& rActiveEdgeList,
+ VectorOfPolygons& rPolygonPool,
+ B2DPolyPolygon& rRes )
+ {
+ processActiveEdges<bPerformErase>(
+ rActiveEdgeList. begin(),
+ rActiveEdgeList. end(),
+ rActiveEdgeList,
+ rCurrEvent,
+ rPolygonPool,
+ rRes);
+ }
+
+ template<int bPerformErase> inline void processActiveEdgesBottomUp(
+ SweepLineEvent& rCurrEvent,
+ ListOfEdges& rActiveEdgeList,
+ VectorOfPolygons& rPolygonPool,
+ B2DPolyPolygon& rRes )
+ {
+ processActiveEdges<bPerformErase>(
+ rActiveEdgeList. rbegin(),
+ rActiveEdgeList. rend(),
+ rActiveEdgeList,
+ rCurrEvent,
+ rPolygonPool,
+ rRes);
+ }
+
+ enum{ NoErase=0, PerformErase=1 };
+
+ void handleStartingEdge( SweepLineEvent& rCurrEvent,
+ ListOfEdges& rActiveEdgeList,
+ VectorOfPolygons& rPolygonPool,
+ B2DPolyPolygon& rRes)
+ {
+ // inject two new active edges for rect
+ createActiveEdgesFromStartEvent( rActiveEdgeList,
+ rPolygonPool,
+ rCurrEvent );
+
+ if( SweepLineEvent::PROCEED_DOWN == rCurrEvent.getEdgeDirection() )
+ processActiveEdgesTopDown<NoErase>(
+ rCurrEvent, rActiveEdgeList, rPolygonPool, rRes);
+ else
+ processActiveEdgesBottomUp<NoErase>(
+ rCurrEvent, rActiveEdgeList, rPolygonPool, rRes);
+ }
+
+ void handleFinishingEdge( SweepLineEvent& rCurrEvent,
+ ListOfEdges& rActiveEdgeList,
+ VectorOfPolygons& rPolygonPool,
+ B2DPolyPolygon& rRes)
+ {
+ if( SweepLineEvent::PROCEED_DOWN == rCurrEvent.getEdgeDirection() )
+ processActiveEdgesTopDown<PerformErase>(
+ rCurrEvent, rActiveEdgeList, rPolygonPool, rRes);
+ else
+ processActiveEdgesBottomUp<PerformErase>(
+ rCurrEvent, rActiveEdgeList, rPolygonPool, rRes);
+ }
+
+ inline void handleSweepLineEvent( SweepLineEvent& rCurrEvent,
+ ListOfEdges& rActiveEdgeList,
+ VectorOfPolygons& rPolygonPool,
+ B2DPolyPolygon& rRes)
+ {
+ if( SweepLineEvent::STARTING_EDGE == rCurrEvent.getEdgeType() )
+ handleStartingEdge(rCurrEvent,rActiveEdgeList,rPolygonPool,rRes);
+ else
+ handleFinishingEdge(rCurrEvent,rActiveEdgeList,rPolygonPool,rRes);
+ }
+ }
+
+ namespace tools
+ {
+ B2DPolyPolygon solveCrossovers(const std::vector<B2DRange>& rRanges,
+ const std::vector<B2VectorOrientation>& rOrientations)
+ {
+ // sweep-line algorithm to generate a poly-polygon
+ // from a bunch of rectangles
+ // ===============================================
+ //
+ // This algorithm uses the well-known sweep line
+ // concept, explained in every good text book about
+ // computational geometry.
+ //
+ // We start with creating two structures for every
+ // rectangle, one representing the left x coordinate,
+ // one representing the right x coordinate (and both
+ // referencing the original rect). These structs are
+ // sorted with increasing x coordinates.
+ //
+ // Then, we start processing the resulting list from
+ // the beginning. Every entry in the list defines a
+ // point in time of the line sweeping from left to
+ // right across all rectangles.
+ VectorOfEvents aSweepLineEvents;
+ setupSweepLineEventListFromRanges( aSweepLineEvents,
+ rRanges,
+ rOrientations );
+
+ B2DPolyPolygon aRes;
+ VectorOfPolygons aPolygonPool;
+ ListOfEdges aActiveEdgeList;
+
+ // sometimes not enough, but a usable compromise
+ aPolygonPool.reserve( rRanges.size() );
+
+ std::for_each( aSweepLineEvents.begin(),
+ aSweepLineEvents.end(),
+ boost::bind(
+ &handleSweepLineEvent,
+ _1,
+ boost::ref(aActiveEdgeList),
+ boost::ref(aPolygonPool),
+ boost::ref(aRes)) );
+
+ return aRes;
+ }
+ }
+}
+
diff --git a/basegfx/source/range/b2xrange.cxx b/basegfx/source/range/b2xrange.cxx
new file mode 100644
index 000000000000..296b54574800
--- /dev/null
+++ b/basegfx/source/range/b2xrange.cxx
@@ -0,0 +1,142 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basegfx.hxx"
+
+#include <basegfx/range/b2drange.hxx>
+#include <basegfx/range/b2irange.hxx>
+#include <basegfx/range/b2ibox.hxx>
+
+
+namespace basegfx
+{
+ namespace
+ {
+ /** Generic implementation of the difference set computation
+
+ @tpl RangeType
+ Type to operate on. Must provide ValueType and TraitsType
+ nested types.
+ */
+ template< class RangeType > void doComputeSetDifference(
+ ::std::vector< RangeType >& o_rRanges,
+ const RangeType& a,
+ const RangeType& b )
+ {
+ o_rRanges.clear();
+
+ // special-casing the empty rect case (this will fail most
+ // of the times below, because of the DBL_MIN/MAX special
+ // values denoting emptyness in the rectangle.
+ if( a.isEmpty() )
+ {
+ o_rRanges.push_back( b );
+ return;
+ }
+ if( b.isEmpty() )
+ {
+ o_rRanges.push_back( a );
+ return;
+ }
+
+ const typename RangeType::ValueType ax(a.getMinX());
+ const typename RangeType::ValueType ay(a.getMinY());
+ const typename RangeType::TraitsType::DifferenceType aw(a.getWidth());
+ const typename RangeType::TraitsType::DifferenceType ah(a.getHeight());
+ const typename RangeType::ValueType bx(b.getMinX());
+ const typename RangeType::ValueType by(b.getMinY());
+ const typename RangeType::TraitsType::DifferenceType bw(b.getWidth());
+ const typename RangeType::TraitsType::DifferenceType bh(b.getHeight());
+
+ const typename RangeType::TraitsType::DifferenceType h0( (by > ay) ? by - ay : 0 );
+ const typename RangeType::TraitsType::DifferenceType h3( (by + bh < ay + ah) ? ay + ah - by - bh : 0 );
+ const typename RangeType::TraitsType::DifferenceType w1( (bx > ax) ? bx - ax : 0 );
+ const typename RangeType::TraitsType::DifferenceType w2( (ax + aw > bx + bw) ? ax + aw - bx - bw : 0 );
+ const typename RangeType::TraitsType::DifferenceType h12( (h0 + h3 < ah) ? ah - h0 - h3 : 0 );
+
+ // TODO(E2): Use numeric_cast instead of static_cast here,
+ // need range checks!
+ if (h0 > 0)
+ o_rRanges.push_back(
+ RangeType(ax,ay,
+ static_cast<typename RangeType::ValueType>(ax+aw),
+ static_cast<typename RangeType::ValueType>(ay+h0)) );
+
+ if (w1 > 0 && h12 > 0)
+ o_rRanges.push_back(
+ RangeType(ax,
+ static_cast<typename RangeType::ValueType>(ay+h0),
+ static_cast<typename RangeType::ValueType>(ax+w1),
+ static_cast<typename RangeType::ValueType>(ay+h0+h12)) );
+
+ if (w2 > 0 && h12 > 0)
+ o_rRanges.push_back(
+ RangeType(static_cast<typename RangeType::ValueType>(bx+bw),
+ static_cast<typename RangeType::ValueType>(ay+h0),
+ static_cast<typename RangeType::ValueType>(bx+bw+w2),
+ static_cast<typename RangeType::ValueType>(ay+h0+h12)) );
+
+ if (h3 > 0)
+ o_rRanges.push_back(
+ RangeType(ax,
+ static_cast<typename RangeType::ValueType>(ay+h0+h12),
+ static_cast<typename RangeType::ValueType>(ax+aw),
+ static_cast<typename RangeType::ValueType>(ay+h0+h12+h3)) );
+ }
+ }
+
+ ::std::vector< B2IRange >& computeSetDifference( ::std::vector< B2IRange >& o_rResult,
+ const B2IRange& rFirst,
+ const B2IRange& rSecond )
+ {
+ doComputeSetDifference( o_rResult, rFirst, rSecond );
+
+ return o_rResult;
+ }
+
+ ::std::vector< B2DRange >& computeSetDifference( ::std::vector< B2DRange >& o_rResult,
+ const B2DRange& rFirst,
+ const B2DRange& rSecond )
+ {
+ doComputeSetDifference( o_rResult, rFirst, rSecond );
+
+ return o_rResult;
+ }
+
+ ::std::vector< B2IBox >& computeSetDifference( ::std::vector< B2IBox >& o_rResult,
+ const B2IBox& rFirst,
+ const B2IBox& rSecond )
+ {
+ doComputeSetDifference( o_rResult, rFirst, rSecond );
+
+ return o_rResult;
+ }
+
+} // end of namespace basegfx
+
+// eof
diff --git a/basegfx/source/range/b3drange.cxx b/basegfx/source/range/b3drange.cxx
new file mode 100644
index 000000000000..aaeeae684bdd
--- /dev/null
+++ b/basegfx/source/range/b3drange.cxx
@@ -0,0 +1,85 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basegfx.hxx"
+#include <basegfx/range/b3drange.hxx>
+#include <basegfx/range/b3irange.hxx>
+#include <basegfx/numeric/ftools.hxx>
+#include <basegfx/matrix/b3dhommatrix.hxx>
+
+namespace basegfx
+{
+ B3DRange::B3DRange(const B3IRange& rRange) :
+ maRangeX(),
+ maRangeY(),
+ maRangeZ()
+ {
+ if( !rRange.isEmpty() )
+ {
+ maRangeX = rRange.getMinX();
+ maRangeY = rRange.getMinY();
+ maRangeZ = rRange.getMinZ();
+
+ maRangeX.expand( rRange.getMaxX() );
+ maRangeY.expand( rRange.getMaxY() );
+ maRangeZ.expand( rRange.getMaxZ() );
+ }
+ }
+
+ void B3DRange::transform(const B3DHomMatrix& rMatrix)
+ {
+ if(!isEmpty() && !rMatrix.isIdentity())
+ {
+ const B3DRange aSource(*this);
+ reset();
+ expand(rMatrix * B3DPoint(aSource.getMinX(), aSource.getMinY(), aSource.getMinZ()));
+ expand(rMatrix * B3DPoint(aSource.getMaxX(), aSource.getMinY(), aSource.getMinZ()));
+ expand(rMatrix * B3DPoint(aSource.getMinX(), aSource.getMaxY(), aSource.getMinZ()));
+ expand(rMatrix * B3DPoint(aSource.getMaxX(), aSource.getMaxY(), aSource.getMinZ()));
+ expand(rMatrix * B3DPoint(aSource.getMinX(), aSource.getMinY(), aSource.getMaxZ()));
+ expand(rMatrix * B3DPoint(aSource.getMaxX(), aSource.getMinY(), aSource.getMaxZ()));
+ expand(rMatrix * B3DPoint(aSource.getMinX(), aSource.getMaxY(), aSource.getMaxZ()));
+ expand(rMatrix * B3DPoint(aSource.getMaxX(), aSource.getMaxY(), aSource.getMaxZ()));
+ }
+ }
+
+ B3IRange fround(const B3DRange& rRange )
+ {
+ return rRange.isEmpty() ?
+ B3IRange() :
+ B3IRange(fround(rRange.getMinX()),
+ fround(rRange.getMinY()),
+ fround(rRange.getMinZ()),
+ fround(rRange.getMaxX()),
+ fround(rRange.getMaxY()),
+ fround(rRange.getMaxZ()));
+ }
+
+} // end of namespace basegfx
+
+// eof
diff --git a/basegfx/source/range/makefile.mk b/basegfx/source/range/makefile.mk
new file mode 100644
index 000000000000..5e05eeda94d9
--- /dev/null
+++ b/basegfx/source/range/makefile.mk
@@ -0,0 +1,52 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..$/..
+PRJNAME=basegfx
+TARGET=range
+
+#UNOUCRRDB=$(SOLARBINDIR)$/applicat.rdb
+ENABLE_EXCEPTIONS=TRUE
+#USE_DEFFILE=TRUE
+
+# --- Settings ----------------------------------
+
+.INCLUDE : settings.mk
+
+# --- Files -------------------------------------
+
+SLOFILES= \
+ $(SLO)$/b1drange.obj \
+ $(SLO)$/b2drange.obj \
+ $(SLO)$/b2xrange.obj \
+ $(SLO)$/b2dpolyrange.obj \
+ $(SLO)$/b2drangeclipper.obj \
+ $(SLO)$/b3drange.obj
+
+# --- Targets ----------------------------------
+
+.INCLUDE : target.mk
diff --git a/basegfx/source/raster/bpixelraster.cxx b/basegfx/source/raster/bpixelraster.cxx
new file mode 100644
index 000000000000..dd62ebd67634
--- /dev/null
+++ b/basegfx/source/raster/bpixelraster.cxx
@@ -0,0 +1,40 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basegfx.hxx"
+
+#include <basegfx/raster/bpixelraster.hxx>
+
+//////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+} // end of namespace basegfx
+
+//////////////////////////////////////////////////////////////////////////////
+// eof
diff --git a/basegfx/source/raster/bzpixelraster.cxx b/basegfx/source/raster/bzpixelraster.cxx
new file mode 100644
index 000000000000..dd1fe7719b1b
--- /dev/null
+++ b/basegfx/source/raster/bzpixelraster.cxx
@@ -0,0 +1,40 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basegfx.hxx"
+
+#include <basegfx/raster/bzpixelraster.hxx>
+
+//////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+} // end of namespace basegfx
+
+//////////////////////////////////////////////////////////////////////////////
+// eof
diff --git a/basegfx/source/raster/makefile.mk b/basegfx/source/raster/makefile.mk
new file mode 100644
index 000000000000..1381b9f6d716
--- /dev/null
+++ b/basegfx/source/raster/makefile.mk
@@ -0,0 +1,49 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..$/..
+PRJNAME=basegfx
+TARGET=raster
+
+#UNOUCRRDB=$(SOLARBINDIR)$/applicat.rdb
+ENABLE_EXCEPTIONS=TRUE
+#USE_DEFFILE=TRUE
+
+# --- Settings ----------------------------------
+
+.INCLUDE : settings.mk
+
+# --- Files -------------------------------------
+
+SLOFILES= \
+ $(SLO)$/bpixelraster.obj \
+ $(SLO)$/bzpixelraster.obj \
+ $(SLO)$/rasterconvert3d.obj
+
+# --- Targets ----------------------------------
+
+.INCLUDE : target.mk
diff --git a/basegfx/source/raster/rasterconvert3d.cxx b/basegfx/source/raster/rasterconvert3d.cxx
new file mode 100644
index 000000000000..2c42dc313451
--- /dev/null
+++ b/basegfx/source/raster/rasterconvert3d.cxx
@@ -0,0 +1,353 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basegfx.hxx"
+
+#include <basegfx/raster/rasterconvert3d.hxx>
+#include <basegfx/polygon/b3dpolygon.hxx>
+#include <basegfx/polygon/b3dpolypolygon.hxx>
+#include <basegfx/point/b3dpoint.hxx>
+
+//////////////////////////////////////////////////////////////////////////////
+// implementations of the 3D raster converter
+
+namespace basegfx
+{
+ void RasterConverter3D::addArea(const B3DPolygon& rFill, const B3DHomMatrix* pViewToEye)
+ {
+ const sal_uInt32 nPointCount(rFill.count());
+
+ for(sal_uInt32 a(0); a < nPointCount; a++)
+ {
+ addEdge(rFill, a, (a + 1) % nPointCount, pViewToEye);
+ }
+ }
+
+ void RasterConverter3D::addArea(const B3DPolyPolygon& rFill, const B3DHomMatrix* pViewToEye)
+ {
+ const sal_uInt32 nPolyCount(rFill.count());
+
+ for(sal_uInt32 a(0); a < nPolyCount; a++)
+ {
+ addArea(rFill.getB3DPolygon(a), pViewToEye);
+ }
+ }
+
+ RasterConverter3D::RasterConverter3D()
+ : InterpolatorProvider3D(),
+ maLineEntries()
+ {}
+
+ RasterConverter3D::~RasterConverter3D()
+ {}
+
+ void RasterConverter3D::rasterconvertB3DArea(sal_Int32 nStartLine, sal_Int32 nStopLine)
+ {
+ if(maLineEntries.size())
+ {
+ OSL_ENSURE(nStopLine >= nStartLine, "nStopLine is bigger than nStartLine (!)");
+
+ // sort global entries by Y, X once. After this, the vector
+ // is seen as frozen. Pointers to it's entries will be used in the following code.
+ ::std::sort(maLineEntries.begin(), maLineEntries.end());
+
+ // local parameters
+ ::std::vector< RasterConversionLineEntry3D >::iterator aCurrentEntry(maLineEntries.begin());
+ ::std::vector< RasterConversionLineEntry3D* > aCurrentLine;
+ ::std::vector< RasterConversionLineEntry3D* > aNextLine;
+ ::std::vector< RasterConversionLineEntry3D* >::iterator aRasterConversionLineEntry3D;
+ sal_uInt32 nPairCount(0);
+
+ // get scanlines first LineNumber as start
+ sal_Int32 nLineNumber(::std::max(aCurrentEntry->getY(), nStartLine));
+
+ while((aCurrentLine.size() || aCurrentEntry != maLineEntries.end()) && (nLineNumber < nStopLine))
+ {
+ // add all entries which start at current line to current scanline
+ while(aCurrentEntry != maLineEntries.end())
+ {
+ const sal_Int32 nCurrentLineNumber(aCurrentEntry->getY());
+
+ if(nCurrentLineNumber > nLineNumber)
+ {
+ // line is below current one, done (since array is sorted)
+ break;
+ }
+ else
+ {
+ // less or equal. Line is above or at current one. Advance it exactly to
+ // current line
+ const sal_uInt32 nStep(nLineNumber - nCurrentLineNumber);
+
+ if(!nStep || aCurrentEntry->decrementRasterConversionLineEntry3D(nStep))
+ {
+ // add when exactly on current line or when incremet to it did not
+ // completely consume it
+ if(nStep)
+ {
+ aCurrentEntry->incrementRasterConversionLineEntry3D(nStep, *this);
+ }
+
+ aCurrentLine.push_back(&(*(aCurrentEntry)));
+ }
+ }
+
+ aCurrentEntry++;
+ }
+
+ // sort current scanline using comparator. Only X is used there
+ // since all entries are already in one processed line. This needs to be done
+ // everytime since not only new spans may have benn added or old removed,
+ // but incrementing may also have changed the order
+ ::std::sort(aCurrentLine.begin(), aCurrentLine.end(), lineComparator());
+
+ // process current scanline
+ aRasterConversionLineEntry3D = aCurrentLine.begin();
+ aNextLine.clear();
+ nPairCount = 0;
+
+ while(aRasterConversionLineEntry3D != aCurrentLine.end())
+ {
+ RasterConversionLineEntry3D& rPrevScanRasterConversionLineEntry3D(**aRasterConversionLineEntry3D++);
+
+ // look for 2nd span
+ if(aRasterConversionLineEntry3D != aCurrentLine.end())
+ {
+ // work on span from rPrevScanRasterConversionLineEntry3D to aRasterConversionLineEntry3D, fLineNumber is valid
+ processLineSpan(rPrevScanRasterConversionLineEntry3D, **aRasterConversionLineEntry3D, nLineNumber, nPairCount++);
+ }
+
+ // increment to next line
+ if(rPrevScanRasterConversionLineEntry3D.decrementRasterConversionLineEntry3D(1))
+ {
+ rPrevScanRasterConversionLineEntry3D.incrementRasterConversionLineEntry3D(1, *this);
+ aNextLine.push_back(&rPrevScanRasterConversionLineEntry3D);
+ }
+ }
+
+ // copy back next scanline if count has changed
+ if(aNextLine.size() != aCurrentLine.size())
+ {
+ aCurrentLine = aNextLine;
+ }
+
+ // increment fLineNumber
+ nLineNumber++;
+ }
+ }
+ }
+
+ void RasterConverter3D::addEdge(const B3DPolygon& rFill, sal_uInt32 a, sal_uInt32 b, const B3DHomMatrix* pViewToEye)
+ {
+ B3DPoint aStart(rFill.getB3DPoint(a));
+ B3DPoint aEnd(rFill.getB3DPoint(b));
+ sal_Int32 nYStart(fround(aStart.getY()));
+ sal_Int32 nYEnd(fround(aEnd.getY()));
+
+ if(nYStart != nYEnd)
+ {
+ if(nYStart > nYEnd)
+ {
+ ::std::swap(aStart, aEnd);
+ ::std::swap(nYStart, nYEnd);
+ ::std::swap(a, b);
+ }
+
+ const sal_uInt32 nYDelta(nYEnd - nYStart);
+ const double fInvYDelta(1.0 / nYDelta);
+ maLineEntries.push_back(RasterConversionLineEntry3D(
+ aStart.getX(), (aEnd.getX() - aStart.getX()) * fInvYDelta,
+ aStart.getZ(), (aEnd.getZ() - aStart.getZ()) * fInvYDelta,
+ nYStart, nYDelta));
+
+ // if extra interpolation data is used, add it to the last created entry
+ RasterConversionLineEntry3D& rEntry = maLineEntries[maLineEntries.size() - 1];
+
+ if(rFill.areBColorsUsed())
+ {
+ rEntry.setColorIndex(addColorInterpolator(rFill.getBColor(a), rFill.getBColor(b), fInvYDelta));
+ }
+
+ if(rFill.areNormalsUsed())
+ {
+ rEntry.setNormalIndex(addNormalInterpolator(rFill.getNormal(a), rFill.getNormal(b), fInvYDelta));
+ }
+
+ if(rFill.areTextureCoordinatesUsed())
+ {
+ if(pViewToEye)
+ {
+ const double fEyeA(((*pViewToEye) * aStart).getZ());
+ const double fEyeB(((*pViewToEye) * aEnd).getZ());
+
+ rEntry.setInverseTextureIndex(addInverseTextureInterpolator(
+ rFill.getTextureCoordinate(a),
+ rFill.getTextureCoordinate(b),
+ fEyeA, fEyeB, fInvYDelta));
+ }
+ else
+ {
+ rEntry.setTextureIndex(addTextureInterpolator(
+ rFill.getTextureCoordinate(a),
+ rFill.getTextureCoordinate(b),
+ fInvYDelta));
+ }
+ }
+ }
+ }
+
+ void RasterConverter3D::rasterconvertB3DEdge(const B3DPolygon& rLine, sal_uInt32 nA, sal_uInt32 nB, sal_Int32 nStartLine, sal_Int32 nStopLine, sal_uInt16 nLineWidth)
+ {
+ B3DPoint aStart(rLine.getB3DPoint(nA));
+ B3DPoint aEnd(rLine.getB3DPoint(nB));
+ const double fZBufferLineAdd(0x00ff);
+ static bool bForceToPolygon(false);
+
+ if(nLineWidth > 1 || bForceToPolygon)
+ {
+ // this is not a hairline anymore, in most cases since it's an oversampled
+ // hairline to get e.g. AA for Z-Buffering. Create fill geometry.
+ if(!aStart.equal(aEnd))
+ {
+ reset();
+ maLineEntries.clear();
+
+ B2DVector aVector(aEnd.getX() - aStart.getX(), aEnd.getY() - aStart.getY());
+ aVector.normalize();
+ const B2DVector aPerpend(getPerpendicular(aVector) * ((static_cast<double>(nLineWidth) + 0.5) * 0.5));
+ const double fZStartWithAdd(aStart.getZ() + fZBufferLineAdd);
+ const double fZEndWithAdd(aEnd.getZ() + fZBufferLineAdd);
+
+ B3DPolygon aPolygon;
+ aPolygon.append(B3DPoint(aStart.getX() + aPerpend.getX(), aStart.getY() + aPerpend.getY(), fZStartWithAdd));
+ aPolygon.append(B3DPoint(aEnd.getX() + aPerpend.getX(), aEnd.getY() + aPerpend.getY(), fZEndWithAdd));
+ aPolygon.append(B3DPoint(aEnd.getX() - aPerpend.getX(), aEnd.getY() - aPerpend.getY(), fZEndWithAdd));
+ aPolygon.append(B3DPoint(aStart.getX() - aPerpend.getX(), aStart.getY() - aPerpend.getY(), fZStartWithAdd));
+ aPolygon.setClosed(true);
+
+ addArea(aPolygon, 0);
+ }
+ }
+ else
+ {
+ // it's a hairline. Use direct RasterConversionLineEntry creation to
+ // rasterconvert lines as similar to areas as possible to avoid Z-Fighting
+ sal_Int32 nYStart(fround(aStart.getY()));
+ sal_Int32 nYEnd(fround(aEnd.getY()));
+
+ if(nYStart == nYEnd)
+ {
+ // horizontal line, check X
+ const sal_Int32 nXStart(static_cast<sal_Int32>(aStart.getX()));
+ const sal_Int32 nXEnd(static_cast<sal_Int32>(aEnd.getX()));
+
+ if(nXStart != nXEnd)
+ {
+ reset();
+ maLineEntries.clear();
+
+ // horizontal line, create vertical entries. These will be sorted by
+ // X anyways, so no need to distinguish the case here
+ maLineEntries.push_back(RasterConversionLineEntry3D(
+ aStart.getX(), 0.0,
+ aStart.getZ() + fZBufferLineAdd, 0.0,
+ nYStart, 1));
+ maLineEntries.push_back(RasterConversionLineEntry3D(
+ aEnd.getX(), 0.0,
+ aEnd.getZ() + fZBufferLineAdd, 0.0,
+ nYStart, 1));
+ }
+ }
+ else
+ {
+ reset();
+ maLineEntries.clear();
+
+ if(nYStart > nYEnd)
+ {
+ ::std::swap(aStart, aEnd);
+ ::std::swap(nYStart, nYEnd);
+ }
+
+ const sal_uInt32 nYDelta(static_cast<sal_uInt32>(nYEnd - nYStart));
+ const double fInvYDelta(1.0 / nYDelta);
+
+ // non-horizontal line, create two parallell entries. These will be sorted by
+ // X anyways, so no need to distinguish the case here
+ maLineEntries.push_back(RasterConversionLineEntry3D(
+ aStart.getX(), (aEnd.getX() - aStart.getX()) * fInvYDelta,
+ aStart.getZ() + fZBufferLineAdd, (aEnd.getZ() - aStart.getZ()) * fInvYDelta,
+ nYStart, nYDelta));
+
+ RasterConversionLineEntry3D& rEntry = maLineEntries[maLineEntries.size() - 1];
+
+ // need to choose a X-Distance for the 2nd edge which guarantees all pixels
+ // of the line to be set. This is exactly the X-Increment for one Y-Step.
+ // Same is true for Z, so in both cases, add one increment to them. To also
+ // guarantee one pixel per line, add a minimum of one for X.
+ const double fDistanceX(fabs(rEntry.getX().getInc()) >= 1.0 ? rEntry.getX().getInc() : 1.0);
+
+ maLineEntries.push_back(RasterConversionLineEntry3D(
+ rEntry.getX().getVal() + fDistanceX, rEntry.getX().getInc(),
+ rEntry.getZ().getVal() + rEntry.getZ().getInc(), rEntry.getZ().getInc(),
+ nYStart, nYDelta));
+ }
+ }
+
+ if(maLineEntries.size())
+ {
+ rasterconvertB3DArea(nStartLine, nStopLine);
+ }
+ }
+
+ void RasterConverter3D::rasterconvertB3DPolyPolygon(const B3DPolyPolygon& rFill, const B3DHomMatrix* pViewToEye, sal_Int32 nStartLine, sal_Int32 nStopLine)
+ {
+ reset();
+ maLineEntries.clear();
+ addArea(rFill, pViewToEye);
+ rasterconvertB3DArea(nStartLine, nStopLine);
+ }
+
+ void RasterConverter3D::rasterconvertB3DPolygon(const B3DPolygon& rLine, sal_Int32 nStartLine, sal_Int32 nStopLine, sal_uInt16 nLineWidth)
+ {
+ const sal_uInt32 nPointCount(rLine.count());
+
+ if(nPointCount)
+ {
+ const sal_uInt32 nEdgeCount(rLine.isClosed() ? nPointCount : nPointCount - 1);
+
+ for(sal_uInt32 a(0); a < nEdgeCount; a++)
+ {
+ rasterconvertB3DEdge(rLine, a, (a + 1) % nPointCount, nStartLine, nStopLine, nLineWidth);
+ }
+ }
+ }
+} // end of namespace basegfx
+
+//////////////////////////////////////////////////////////////////////////////
+// eof
diff --git a/basegfx/source/tools/b2dclipstate.cxx b/basegfx/source/tools/b2dclipstate.cxx
new file mode 100644
index 000000000000..005dca1aa66a
--- /dev/null
+++ b/basegfx/source/tools/b2dclipstate.cxx
@@ -0,0 +1,662 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: b2dmultirange.cxx,v $
+ * $Revision: 1.8 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basegfx.hxx"
+#include <basegfx/tools/b2dclipstate.hxx>
+
+#include <basegfx/range/b2drange.hxx>
+#include <basegfx/range/b2dpolyrange.hxx>
+#include <basegfx/range/b2drangeclipper.hxx>
+#include <basegfx/polygon/b2dpolygon.hxx>
+#include <basegfx/polygon/b2dpolygontools.hxx>
+#include <basegfx/polygon/b2dpolypolygon.hxx>
+#include <basegfx/polygon/b2dpolypolygontools.hxx>
+#include <basegfx/polygon/b2dpolypolygoncutter.hxx>
+
+namespace basegfx
+{
+namespace tools
+{
+ struct ImplB2DClipState
+ {
+ public:
+ enum Operation {UNION, INTERSECT, XOR, SUBTRACT};
+
+ ImplB2DClipState() :
+ maPendingPolygons(),
+ maPendingRanges(),
+ maClipPoly(),
+ mePendingOps(UNION)
+ {}
+
+ explicit ImplB2DClipState( const B2DRange& rRange ) :
+ maPendingPolygons(),
+ maPendingRanges(),
+ maClipPoly(
+ tools::createPolygonFromRect(rRange)),
+ mePendingOps(UNION)
+ {}
+
+ explicit ImplB2DClipState( const B2DPolygon& rPoly ) :
+ maPendingPolygons(),
+ maPendingRanges(),
+ maClipPoly(rPoly),
+ mePendingOps(UNION)
+ {}
+
+ explicit ImplB2DClipState( const B2DPolyPolygon& rPoly ) :
+ maPendingPolygons(),
+ maPendingRanges(),
+ maClipPoly(rPoly),
+ mePendingOps(UNION)
+ {}
+
+ bool isCleared() const
+ {
+ return !maClipPoly.count()
+ && !maPendingPolygons.count()
+ && !maPendingRanges.count();
+ }
+
+ void makeClear()
+ {
+ maPendingPolygons.clear();
+ maPendingRanges.clear();
+ maClipPoly.clear();
+ mePendingOps = UNION;
+ }
+
+ bool isNullClipPoly() const
+ {
+ return maClipPoly.count() == 1
+ && !maClipPoly.getB2DPolygon(0).count();
+ }
+
+ bool isNull() const
+ {
+ return !maPendingPolygons.count()
+ && !maPendingRanges.count()
+ && isNullClipPoly();
+ }
+
+ void makeNull()
+ {
+ maPendingPolygons.clear();
+ maPendingRanges.clear();
+ maClipPoly.clear();
+ maClipPoly.append(B2DPolygon());
+ mePendingOps = UNION;
+ }
+
+ bool operator==(const ImplB2DClipState& rRHS) const
+ {
+ return maPendingPolygons == rRHS.maPendingPolygons
+ && maPendingRanges == rRHS.maPendingRanges
+ && maClipPoly == rRHS.maClipPoly
+ && mePendingOps == rRHS.mePendingOps;
+ }
+
+ void addRange(const B2DRange& rRange, Operation eOp)
+ {
+ if( rRange.isEmpty() )
+ return;
+
+ commitPendingPolygons();
+ if( mePendingOps != eOp )
+ commitPendingRanges();
+
+ mePendingOps = eOp;
+ maPendingRanges.appendElement(
+ rRange,
+ ORIENTATION_POSITIVE);
+ }
+
+ void addPolygon(B2DPolygon aPoly, Operation eOp)
+ {
+ commitPendingRanges();
+ if( mePendingOps != eOp )
+ commitPendingPolygons();
+
+ mePendingOps = eOp;
+ maPendingPolygons.append(aPoly);
+ }
+
+ void addPolyPolygon(B2DPolyPolygon aPoly, Operation eOp)
+ {
+ commitPendingRanges();
+ if( mePendingOps != eOp )
+ commitPendingPolygons();
+
+ mePendingOps = eOp;
+ maPendingPolygons.append(aPoly);
+ }
+
+ void addClipState(const ImplB2DClipState& rOther, Operation eOp)
+ {
+ if( rOther.mePendingOps == mePendingOps
+ && !rOther.maClipPoly.count()
+ && !rOther.maPendingPolygons.count() )
+ {
+ maPendingRanges.appendPolyRange( rOther.maPendingRanges );
+ }
+ else
+ {
+ commitPendingRanges();
+ commitPendingPolygons();
+ rOther.commitPendingRanges();
+ rOther.commitPendingPolygons();
+
+ maPendingPolygons = rOther.maClipPoly;
+ mePendingOps = eOp;
+ }
+ }
+
+ void unionRange(const B2DRange& rRange)
+ {
+ if( isCleared() )
+ return;
+
+ addRange(rRange,UNION);
+ }
+
+ void unionPolygon(const B2DPolygon& rPoly)
+ {
+ if( isCleared() )
+ return;
+
+ addPolygon(rPoly,UNION);
+ }
+
+ void unionPolyPolygon(const B2DPolyPolygon& rPolyPoly)
+ {
+ if( isCleared() )
+ return;
+
+ addPolyPolygon(rPolyPoly,UNION);
+ }
+
+ void unionClipState(const ImplB2DClipState& rOther)
+ {
+ if( isCleared() )
+ return;
+
+ addClipState(rOther, UNION);
+ }
+
+ void intersectRange(const B2DRange& rRange)
+ {
+ if( isNull() )
+ return;
+
+ addRange(rRange,INTERSECT);
+ }
+
+ void intersectPolygon(const B2DPolygon& rPoly)
+ {
+ if( isNull() )
+ return;
+
+ addPolygon(rPoly,INTERSECT);
+ }
+
+ void intersectPolyPolygon(const B2DPolyPolygon& rPolyPoly)
+ {
+ if( isNull() )
+ return;
+
+ addPolyPolygon(rPolyPoly,INTERSECT);
+ }
+
+ void intersectClipState(const ImplB2DClipState& rOther)
+ {
+ if( isNull() )
+ return;
+
+ addClipState(rOther, INTERSECT);
+ }
+
+ void subtractRange(const B2DRange& rRange )
+ {
+ if( isNull() )
+ return;
+
+ addRange(rRange,SUBTRACT);
+ }
+
+ void subtractPolygon(const B2DPolygon& rPoly)
+ {
+ if( isNull() )
+ return;
+
+ addPolygon(rPoly,SUBTRACT);
+ }
+
+ void subtractPolyPolygon(const B2DPolyPolygon& rPolyPoly)
+ {
+ if( isNull() )
+ return;
+
+ addPolyPolygon(rPolyPoly,SUBTRACT);
+ }
+
+ void subtractClipState(const ImplB2DClipState& rOther)
+ {
+ if( isNull() )
+ return;
+
+ addClipState(rOther, SUBTRACT);
+ }
+
+ void xorRange(const B2DRange& rRange)
+ {
+ addRange(rRange,XOR);
+ }
+
+ void xorPolygon(const B2DPolygon& rPoly)
+ {
+ addPolygon(rPoly,XOR);
+ }
+
+ void xorPolyPolygon(const B2DPolyPolygon& rPolyPoly)
+ {
+ addPolyPolygon(rPolyPoly,XOR);
+ }
+
+ void xorClipState(const ImplB2DClipState& rOther)
+ {
+ addClipState(rOther, XOR);
+ }
+
+ B2DPolyPolygon getClipPoly() const
+ {
+ commitPendingRanges();
+ commitPendingPolygons();
+
+ return maClipPoly;
+ }
+
+ private:
+ void commitPendingPolygons() const
+ {
+ if( !maPendingPolygons.count() )
+ return;
+
+ // assumption: maClipPoly has kept polygons prepared for
+ // clipping; i.e. no neutral polygons & correct
+ // orientation
+ maPendingPolygons = tools::prepareForPolygonOperation(maPendingPolygons);
+ const bool bIsEmpty=isNullClipPoly();
+ const bool bIsCleared=!maClipPoly.count();
+ switch(mePendingOps)
+ {
+ case UNION:
+ OSL_ASSERT( !bIsCleared );
+
+ if( bIsEmpty )
+ maClipPoly = maPendingPolygons;
+ else
+ maClipPoly = tools::solvePolygonOperationOr(
+ maClipPoly,
+ maPendingPolygons);
+ break;
+ case INTERSECT:
+ OSL_ASSERT( !bIsEmpty );
+
+ if( bIsCleared )
+ maClipPoly = maPendingPolygons;
+ else
+ maClipPoly = tools::solvePolygonOperationAnd(
+ maClipPoly,
+ maPendingPolygons);
+ break;
+ case XOR:
+ if( bIsEmpty )
+ maClipPoly = maPendingPolygons;
+ else if( bIsCleared )
+ {
+ // not representable, strictly speaking,
+ // using polygons with the common even/odd
+ // or nonzero winding number fill rule. If
+ // we'd want to represent it, fill rule
+ // would need to be "non-negative winding
+ // number" (and we then would return
+ // 'holes' here)
+
+ // going for an ugly hack meanwhile
+ maClipPoly = tools::solvePolygonOperationXor(
+ B2DPolyPolygon(
+ tools::createPolygonFromRect(B2DRange(-1E20,-1E20,1E20,1E20))),
+ maPendingPolygons);
+ }
+ else
+ maClipPoly = tools::solvePolygonOperationXor(
+ maClipPoly,
+ maPendingPolygons);
+ break;
+ case SUBTRACT:
+ OSL_ASSERT( !bIsEmpty );
+
+ // first union all pending ones, subtract en bloc then
+ maPendingPolygons = solveCrossovers(maPendingPolygons);
+ maPendingPolygons = stripNeutralPolygons(maPendingPolygons);
+ maPendingPolygons = stripDispensablePolygons(maPendingPolygons, false);
+
+ if( bIsCleared )
+ {
+ // not representable, strictly speaking,
+ // using polygons with the common even/odd
+ // or nonzero winding number fill rule. If
+ // we'd want to represent it, fill rule
+ // would need to be "non-negative winding
+ // number" (and we then would return
+ // 'holes' here)
+
+ // going for an ugly hack meanwhile
+ maClipPoly = tools::solvePolygonOperationDiff(
+ B2DPolyPolygon(
+ tools::createPolygonFromRect(B2DRange(-1E20,-1E20,1E20,1E20))),
+ maPendingPolygons);
+ }
+ else
+ maClipPoly = tools::solvePolygonOperationDiff(
+ maClipPoly,
+ maPendingPolygons);
+ break;
+ }
+
+ maPendingPolygons.clear();
+ mePendingOps = UNION;
+ }
+
+ void commitPendingRanges() const
+ {
+ if( !maPendingRanges.count() )
+ return;
+
+ // use the specialized range clipper for the win
+ B2DPolyPolygon aCollectedRanges;
+ const bool bIsEmpty=isNullClipPoly();
+ const bool bIsCleared=!maClipPoly.count();
+ switch(mePendingOps)
+ {
+ case UNION:
+ OSL_ASSERT( !bIsCleared );
+
+ aCollectedRanges = maPendingRanges.solveCrossovers();
+ aCollectedRanges = stripNeutralPolygons(aCollectedRanges);
+ aCollectedRanges = stripDispensablePolygons(aCollectedRanges, false);
+ if( bIsEmpty )
+ maClipPoly = aCollectedRanges;
+ else
+ maClipPoly = tools::solvePolygonOperationOr(
+ maClipPoly,
+ aCollectedRanges);
+ break;
+ case INTERSECT:
+ OSL_ASSERT( !bIsEmpty );
+
+ aCollectedRanges = maPendingRanges.solveCrossovers();
+ aCollectedRanges = stripNeutralPolygons(aCollectedRanges);
+ if( maPendingRanges.count() > 1 )
+ aCollectedRanges = stripDispensablePolygons(aCollectedRanges, true);
+
+ if( bIsCleared )
+ maClipPoly = aCollectedRanges;
+ else
+ maClipPoly = tools::solvePolygonOperationAnd(
+ maClipPoly,
+ aCollectedRanges);
+ break;
+ case XOR:
+ aCollectedRanges = maPendingRanges.solveCrossovers();
+ aCollectedRanges = stripNeutralPolygons(aCollectedRanges);
+ aCollectedRanges = correctOrientations(aCollectedRanges);
+
+ if( bIsEmpty )
+ maClipPoly = aCollectedRanges;
+ else if( bIsCleared )
+ {
+ // not representable, strictly speaking,
+ // using polygons with the common even/odd
+ // or nonzero winding number fill rule. If
+ // we'd want to represent it, fill rule
+ // would need to be "non-negative winding
+ // number" (and we then would return
+ // 'holes' here)
+
+ // going for an ugly hack meanwhile
+ maClipPoly = tools::solvePolygonOperationXor(
+ B2DPolyPolygon(
+ tools::createPolygonFromRect(B2DRange(-1E20,-1E20,1E20,1E20))),
+ aCollectedRanges);
+ }
+ else
+ maClipPoly = tools::solvePolygonOperationXor(
+ maClipPoly,
+ aCollectedRanges);
+ break;
+ case SUBTRACT:
+ OSL_ASSERT( !bIsEmpty );
+
+ // first union all pending ranges, subtract en bloc then
+ aCollectedRanges = maPendingRanges.solveCrossovers();
+ aCollectedRanges = stripNeutralPolygons(aCollectedRanges);
+ aCollectedRanges = stripDispensablePolygons(aCollectedRanges, false);
+
+ if( bIsCleared )
+ {
+ // not representable, strictly speaking,
+ // using polygons with the common even/odd
+ // or nonzero winding number fill rule. If
+ // we'd want to represent it, fill rule
+ // would need to be "non-negative winding
+ // number" (and we then would return
+ // 'holes' here)
+
+ // going for an ugly hack meanwhile
+ maClipPoly = tools::solvePolygonOperationDiff(
+ B2DPolyPolygon(
+ tools::createPolygonFromRect(B2DRange(-1E20,-1E20,1E20,1E20))),
+ aCollectedRanges);
+ }
+ else
+ maClipPoly = tools::solvePolygonOperationDiff(
+ maClipPoly,
+ aCollectedRanges);
+ break;
+ }
+
+ maPendingRanges.clear();
+ mePendingOps = UNION;
+ }
+
+ mutable B2DPolyPolygon maPendingPolygons;
+ mutable B2DPolyRange maPendingRanges;
+ mutable B2DPolyPolygon maClipPoly;
+ mutable Operation mePendingOps;
+ };
+
+ B2DClipState::B2DClipState() :
+ mpImpl()
+ {}
+
+ B2DClipState::~B2DClipState()
+ {}
+
+ B2DClipState::B2DClipState( const B2DClipState& rOrig ) :
+ mpImpl(rOrig.mpImpl)
+ {}
+
+ B2DClipState::B2DClipState( const B2DRange& rRange ) :
+ mpImpl( ImplB2DClipState(rRange) )
+ {}
+
+ B2DClipState::B2DClipState( const B2DPolygon& rPoly ) :
+ mpImpl( ImplB2DClipState(rPoly) )
+ {}
+
+ B2DClipState::B2DClipState( const B2DPolyPolygon& rPolyPoly ) :
+ mpImpl( ImplB2DClipState(rPolyPoly) )
+ {}
+
+ B2DClipState& B2DClipState::operator=( const B2DClipState& rRHS )
+ {
+ mpImpl = rRHS.mpImpl;
+ return *this;
+ }
+
+ void B2DClipState::makeUnique()
+ {
+ mpImpl.make_unique();
+ }
+
+ void B2DClipState::makeNull()
+ {
+ mpImpl->makeNull();
+ }
+
+ bool B2DClipState::isNull() const
+ {
+ return mpImpl->isNull();
+ }
+
+ void B2DClipState::makeClear()
+ {
+ mpImpl->makeClear();
+ }
+
+ bool B2DClipState::isCleared() const
+ {
+ return mpImpl->isCleared();
+ }
+
+ bool B2DClipState::operator==(const B2DClipState& rRHS) const
+ {
+ if(mpImpl.same_object(rRHS.mpImpl))
+ return true;
+
+ return ((*mpImpl) == (*rRHS.mpImpl));
+ }
+
+ bool B2DClipState::operator!=(const B2DClipState& rRHS) const
+ {
+ return !(*this == rRHS);
+ }
+
+ void B2DClipState::unionRange(const B2DRange& rRange)
+ {
+ mpImpl->unionRange(rRange);
+ }
+
+ void B2DClipState::unionPolygon(const B2DPolygon& rPoly)
+ {
+ mpImpl->unionPolygon(rPoly);
+ }
+
+ void B2DClipState::unionPolyPolygon(const B2DPolyPolygon& rPolyPoly)
+ {
+ mpImpl->unionPolyPolygon(rPolyPoly);
+ }
+
+ void B2DClipState::unionClipState(const B2DClipState& rState)
+ {
+ mpImpl->unionClipState(*rState.mpImpl);
+ }
+
+ void B2DClipState::intersectRange(const B2DRange& rRange)
+ {
+ mpImpl->intersectRange(rRange);
+ }
+
+ void B2DClipState::intersectPolygon(const B2DPolygon& rPoly)
+ {
+ mpImpl->intersectPolygon(rPoly);
+ }
+
+ void B2DClipState::intersectPolyPolygon(const B2DPolyPolygon& rPolyPoly)
+ {
+ mpImpl->intersectPolyPolygon(rPolyPoly);
+ }
+
+ void B2DClipState::intersectClipState(const B2DClipState& rState)
+ {
+ mpImpl->intersectClipState(*rState.mpImpl);
+ }
+
+ void B2DClipState::subtractRange(const B2DRange& rRange)
+ {
+ mpImpl->subtractRange(rRange);
+ }
+
+ void B2DClipState::subtractPolygon(const B2DPolygon& rPoly)
+ {
+ mpImpl->subtractPolygon(rPoly);
+ }
+
+ void B2DClipState::subtractPolyPolygon(const B2DPolyPolygon& rPolyPoly)
+ {
+ mpImpl->subtractPolyPolygon(rPolyPoly);
+ }
+
+ void B2DClipState::subtractClipState(const B2DClipState& rState)
+ {
+ mpImpl->subtractClipState(*rState.mpImpl);
+ }
+
+ void B2DClipState::xorRange(const B2DRange& rRange)
+ {
+ mpImpl->xorRange(rRange);
+ }
+
+ void B2DClipState::xorPolygon(const B2DPolygon& rPoly)
+ {
+ mpImpl->xorPolygon(rPoly);
+ }
+
+ void B2DClipState::xorPolyPolygon(const B2DPolyPolygon& rPolyPoly)
+ {
+ mpImpl->xorPolyPolygon(rPolyPoly);
+ }
+
+ void B2DClipState::xorClipState(const B2DClipState& rState)
+ {
+ mpImpl->xorClipState(*rState.mpImpl);
+ }
+
+ B2DPolyPolygon B2DClipState::getClipPoly() const
+ {
+ return mpImpl->getClipPoly();
+ }
+
+} // end of namespace tools
+} // end of namespace basegfx
+
+// eof
diff --git a/basegfx/source/tools/canvastools.cxx b/basegfx/source/tools/canvastools.cxx
new file mode 100755
index 000000000000..2192148461dc
--- /dev/null
+++ b/basegfx/source/tools/canvastools.cxx
@@ -0,0 +1,674 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basegfx.hxx"
+
+#include <com/sun/star/geometry/RealSize2D.hpp>
+#include <com/sun/star/geometry/RealPoint2D.hpp>
+#include <com/sun/star/geometry/RealRectangle2D.hpp>
+#include <com/sun/star/geometry/RealRectangle3D.hpp>
+#include <com/sun/star/geometry/RealBezierSegment2D.hpp>
+#include <com/sun/star/geometry/AffineMatrix2D.hpp>
+#include <com/sun/star/geometry/AffineMatrix3D.hpp>
+#include <com/sun/star/geometry/Matrix2D.hpp>
+#include <com/sun/star/geometry/IntegerSize2D.hpp>
+#include <com/sun/star/geometry/IntegerPoint2D.hpp>
+#include <com/sun/star/geometry/IntegerRectangle2D.hpp>
+#include <com/sun/star/rendering/XPolyPolygon2D.hpp>
+#include <com/sun/star/rendering/XGraphicDevice.hpp>
+#include <com/sun/star/awt/Size.hpp>
+#include <com/sun/star/awt/Point.hpp>
+#include <com/sun/star/awt/Rectangle.hpp>
+#include <basegfx/tools/unopolypolygon.hxx>
+#include <basegfx/matrix/b2dhommatrix.hxx>
+#include <basegfx/matrix/b3dhommatrix.hxx>
+#include <basegfx/vector/b2dsize.hxx>
+#include <basegfx/point/b2dpoint.hxx>
+#include <basegfx/range/b2drectangle.hxx>
+#include <basegfx/range/b3drange.hxx>
+#include <basegfx/vector/b2isize.hxx>
+#include <basegfx/point/b2ipoint.hxx>
+#include <basegfx/range/b2irectangle.hxx>
+#include <basegfx/polygon/b2dpolygon.hxx>
+#include <basegfx/polygon/b2dpolypolygon.hxx>
+#include <basegfx/tools/canvastools.hxx>
+#include <limits>
+
+using namespace ::com::sun::star;
+
+namespace basegfx
+{
+
+ namespace unotools
+ {
+ namespace
+ {
+ uno::Sequence< geometry::RealBezierSegment2D > bezierSequenceFromB2DPolygon(const ::basegfx::B2DPolygon& rPoly)
+ {
+ const sal_uInt32 nPointCount(rPoly.count());
+ uno::Sequence< geometry::RealBezierSegment2D > outputSequence(nPointCount);
+ geometry::RealBezierSegment2D* pOutput = outputSequence.getArray();
+
+ // fill sequences and imply clodes polygon on this implementation layer
+ for(sal_uInt32 a(0); a < nPointCount; a++)
+ {
+ const basegfx::B2DPoint aStart(rPoly.getB2DPoint(a));
+ const basegfx::B2DPoint aControlA(rPoly.getNextControlPoint(a));
+ const basegfx::B2DPoint aControlB(rPoly.getPrevControlPoint((a + 1) % nPointCount));
+
+ pOutput[a] = geometry::RealBezierSegment2D(
+ aStart.getX(), aStart.getY(),
+ aControlA.getX(), aControlA.getY(),
+ aControlB.getX(), aControlB.getY());
+ }
+
+ return outputSequence;
+ }
+
+ uno::Sequence< geometry::RealPoint2D > pointSequenceFromB2DPolygon( const ::basegfx::B2DPolygon& rPoly )
+ {
+ const sal_uInt32 nNumPoints( rPoly.count() );
+
+ uno::Sequence< geometry::RealPoint2D > outputSequence( nNumPoints );
+ geometry::RealPoint2D* pOutput = outputSequence.getArray();
+
+ // fill sequence from polygon
+ sal_uInt32 i;
+ for( i=0; i<nNumPoints; ++i )
+ {
+ const ::basegfx::B2DPoint aPoint( rPoly.getB2DPoint(i) );
+
+ pOutput[i] = geometry::RealPoint2D( aPoint.getX(),
+ aPoint.getY() );
+ }
+
+ return outputSequence;
+ }
+ }
+
+ //---------------------------------------------------------------------------------------
+
+ uno::Sequence< uno::Sequence< geometry::RealBezierSegment2D > > bezierSequenceSequenceFromB2DPolyPolygon( const ::basegfx::B2DPolyPolygon& rPolyPoly )
+ {
+ const sal_uInt32 nNumPolies( rPolyPoly.count() );
+ sal_uInt32 i;
+
+ uno::Sequence< uno::Sequence< geometry::RealBezierSegment2D > > outputSequence( nNumPolies );
+ uno::Sequence< geometry::RealBezierSegment2D >* pOutput = outputSequence.getArray();
+
+ for( i=0; i<nNumPolies; ++i )
+ {
+ pOutput[i] = bezierSequenceFromB2DPolygon( rPolyPoly.getB2DPolygon(i) );
+ }
+
+ return outputSequence;
+ }
+
+ //---------------------------------------------------------------------------------------
+
+ uno::Sequence< uno::Sequence< geometry::RealPoint2D > > pointSequenceSequenceFromB2DPolyPolygon( const ::basegfx::B2DPolyPolygon& rPolyPoly )
+ {
+ const sal_uInt32 nNumPolies( rPolyPoly.count() );
+ sal_uInt32 i;
+
+ uno::Sequence< uno::Sequence< geometry::RealPoint2D > > outputSequence( nNumPolies );
+ uno::Sequence< geometry::RealPoint2D >* pOutput = outputSequence.getArray();
+
+ for( i=0; i<nNumPolies; ++i )
+ {
+ pOutput[i] = pointSequenceFromB2DPolygon( rPolyPoly.getB2DPolygon(i) );
+ }
+
+ return outputSequence;
+ }
+
+ //---------------------------------------------------------------------------------------
+
+ uno::Reference< rendering::XPolyPolygon2D > xPolyPolygonFromB2DPolygon( const uno::Reference< rendering::XGraphicDevice >& xGraphicDevice,
+ const ::basegfx::B2DPolygon& rPoly )
+ {
+ uno::Reference< rendering::XPolyPolygon2D > xRes;
+
+ if( !xGraphicDevice.is() )
+ return xRes;
+
+ if( rPoly.areControlPointsUsed() )
+ {
+ uno::Sequence< uno::Sequence< geometry::RealBezierSegment2D > > outputSequence( 1 );
+ outputSequence[0] = bezierSequenceFromB2DPolygon( rPoly );
+
+ xRes.set( xGraphicDevice->createCompatibleBezierPolyPolygon( outputSequence ),
+ uno::UNO_QUERY );
+ }
+ else
+ {
+ uno::Sequence< uno::Sequence< geometry::RealPoint2D > > outputSequence( 1 );
+ outputSequence[0] = pointSequenceFromB2DPolygon( rPoly );
+
+ xRes.set( xGraphicDevice->createCompatibleLinePolyPolygon( outputSequence ),
+ uno::UNO_QUERY );
+ }
+
+ if( xRes.is() && rPoly.isClosed() )
+ xRes->setClosed( 0, sal_True );
+
+ return xRes;
+ }
+
+ //---------------------------------------------------------------------------------------
+
+ uno::Reference< rendering::XPolyPolygon2D > xPolyPolygonFromB2DPolyPolygon( const uno::Reference< rendering::XGraphicDevice >& xGraphicDevice,
+ const ::basegfx::B2DPolyPolygon& rPolyPoly )
+ {
+ uno::Reference< rendering::XPolyPolygon2D > xRes;
+
+ if( !xGraphicDevice.is() )
+ return xRes;
+
+ const sal_uInt32 nNumPolies( rPolyPoly.count() );
+ sal_uInt32 i;
+
+ if( rPolyPoly.areControlPointsUsed() )
+ {
+ xRes.set( xGraphicDevice->createCompatibleBezierPolyPolygon(
+ bezierSequenceSequenceFromB2DPolyPolygon( rPolyPoly ) ),
+ uno::UNO_QUERY );
+ }
+ else
+ {
+ xRes.set( xGraphicDevice->createCompatibleLinePolyPolygon(
+ pointSequenceSequenceFromB2DPolyPolygon( rPolyPoly ) ),
+ uno::UNO_QUERY );
+ }
+
+ for( i=0; i<nNumPolies; ++i )
+ {
+ xRes->setClosed( i, rPolyPoly.getB2DPolygon(i).isClosed() );
+ }
+
+ return xRes;
+ }
+
+ //---------------------------------------------------------------------------------------
+
+ ::basegfx::B2DPolygon polygonFromPoint2DSequence( const uno::Sequence< geometry::RealPoint2D >& points )
+ {
+ const sal_Int32 nCurrSize( points.getLength() );
+
+ ::basegfx::B2DPolygon aPoly;
+
+ for( sal_Int32 nCurrPoint=0; nCurrPoint<nCurrSize; ++nCurrPoint )
+ aPoly.append( b2DPointFromRealPoint2D( points[nCurrPoint] ) );
+
+ return aPoly;
+ }
+
+ //---------------------------------------------------------------------------------------
+
+ ::basegfx::B2DPolyPolygon polyPolygonFromPoint2DSequenceSequence( const uno::Sequence< uno::Sequence< geometry::RealPoint2D > >& points )
+ {
+ ::basegfx::B2DPolyPolygon aRes;
+
+ for( sal_Int32 nCurrPoly=0; nCurrPoly<points.getLength(); ++nCurrPoly )
+ {
+ aRes.append( polygonFromPoint2DSequence( points[nCurrPoly] ) );
+ }
+
+ return aRes;
+ }
+
+ //---------------------------------------------------------------------------------------
+
+ ::basegfx::B2DPolygon polygonFromBezier2DSequence( const uno::Sequence< geometry::RealBezierSegment2D >& curves )
+ {
+ const sal_Int32 nSize(curves.getLength());
+ basegfx::B2DPolygon aRetval;
+
+ if(nSize)
+ {
+ // prepare start with providing a start point. Use the first point from
+ // the sequence for this
+ const geometry::RealBezierSegment2D& rFirstSegment(curves[0]); // #i79917# first segment, not last
+ aRetval.append(basegfx::B2DPoint(rFirstSegment.Px, rFirstSegment.Py));
+
+ for(sal_Int32 a(0); a < nSize; a++)
+ {
+ const geometry::RealBezierSegment2D& rCurrSegment(curves[a]);
+ const geometry::RealBezierSegment2D& rNextSegment(curves[(a + 1) % nSize]);
+
+ // append curved edge with the control points and the next point
+ aRetval.appendBezierSegment(
+ basegfx::B2DPoint(rCurrSegment.C1x, rCurrSegment.C1y),
+ basegfx::B2DPoint(rCurrSegment.C2x, rCurrSegment.C2y), // #i79917# Argh! An x for an y!!
+ basegfx::B2DPoint(rNextSegment.Px, rNextSegment.Py));
+ }
+
+ // rescue the control point and remove the now double-added point
+ aRetval.setPrevControlPoint(0, aRetval.getPrevControlPoint(aRetval.count() - 1));
+ aRetval.remove(aRetval.count() - 1);
+ }
+
+ return aRetval;
+ }
+
+ //---------------------------------------------------------------------------------------
+
+ ::basegfx::B2DPolyPolygon polyPolygonFromBezier2DSequenceSequence( const uno::Sequence< uno::Sequence< geometry::RealBezierSegment2D > >& curves )
+ {
+ ::basegfx::B2DPolyPolygon aRes;
+
+ for( sal_Int32 nCurrPoly=0; nCurrPoly<curves.getLength(); ++nCurrPoly )
+ {
+ aRes.append( polygonFromBezier2DSequence( curves[nCurrPoly] ) );
+ }
+
+ return aRes;
+ }
+
+ //---------------------------------------------------------------------------------------
+
+ ::basegfx::B2DPolyPolygon b2DPolyPolygonFromXPolyPolygon2D( const uno::Reference< rendering::XPolyPolygon2D >& xPoly )
+ {
+ ::basegfx::unotools::UnoPolyPolygon* pPolyImpl =
+ dynamic_cast< ::basegfx::unotools::UnoPolyPolygon* >( xPoly.get() );
+
+ if( pPolyImpl )
+ {
+ return pPolyImpl->getPolyPolygon();
+ }
+ else
+ {
+ // not a known implementation object - try data source
+ // interfaces
+ const sal_Int32 nPolys( xPoly->getNumberOfPolygons() );
+
+ uno::Reference< rendering::XBezierPolyPolygon2D > xBezierPoly(
+ xPoly,
+ uno::UNO_QUERY );
+
+ if( xBezierPoly.is() )
+ {
+ return ::basegfx::unotools::polyPolygonFromBezier2DSequenceSequence(
+ xBezierPoly->getBezierSegments( 0,
+ nPolys,
+ 0,
+ -1 ) );
+ }
+ else
+ {
+ uno::Reference< rendering::XLinePolyPolygon2D > xLinePoly(
+ xPoly,
+ uno::UNO_QUERY );
+
+ // no implementation class and no data provider
+ // found - contract violation.
+ if( !xLinePoly.is() )
+ {
+ throw lang::IllegalArgumentException(
+ ::rtl::OUString::createFromAscii(
+ "basegfx::unotools::b2DPolyPolygonFromXPolyPolygon2D(): Invalid input"
+ "poly-polygon, cannot retrieve vertex data"),
+ uno::Reference< uno::XInterface >(),
+ 0 );
+ }
+
+ return ::basegfx::unotools::polyPolygonFromPoint2DSequenceSequence(
+ xLinePoly->getPoints( 0,
+ nPolys,
+ 0,
+ -1 ));
+ }
+ }
+ }
+
+ //---------------------------------------------------------------------------------------
+
+ ::basegfx::B2DHomMatrix& homMatrixFromAffineMatrix( ::basegfx::B2DHomMatrix& output,
+ const geometry::AffineMatrix2D& input )
+ {
+ // ensure last row is [0,0,1] (and optimized away)
+ output.identity();
+
+ output.set(0,0, input.m00);
+ output.set(0,1, input.m01);
+ output.set(0,2, input.m02);
+ output.set(1,0, input.m10);
+ output.set(1,1, input.m11);
+ output.set(1,2, input.m12);
+
+ return output;
+ }
+
+ ::basegfx::B2DHomMatrix homMatrixFromAffineMatrix( const geometry::AffineMatrix2D& input )
+ {
+ ::basegfx::B2DHomMatrix output;
+
+ output.set(0,0, input.m00);
+ output.set(0,1, input.m01);
+ output.set(0,2, input.m02);
+ output.set(1,0, input.m10);
+ output.set(1,1, input.m11);
+ output.set(1,2, input.m12);
+
+ return output;
+ }
+
+ ::basegfx::B3DHomMatrix homMatrixFromAffineMatrix3D( const ::com::sun::star::geometry::AffineMatrix3D& input )
+ {
+ ::basegfx::B3DHomMatrix output;
+
+ output.set(0,0, input.m00);
+ output.set(0,1, input.m01);
+ output.set(0,2, input.m02);
+ output.set(0,3, input.m03);
+
+ output.set(1,0, input.m10);
+ output.set(1,1, input.m11);
+ output.set(1,2, input.m12);
+ output.set(1,3, input.m13);
+
+ output.set(2,0, input.m20);
+ output.set(2,1, input.m21);
+ output.set(2,2, input.m22);
+ output.set(2,3, input.m23);
+
+ return output;
+ }
+
+ geometry::AffineMatrix2D& affineMatrixFromHomMatrix( geometry::AffineMatrix2D& output,
+ const ::basegfx::B2DHomMatrix& input)
+ {
+ output.m00 = input.get(0,0);
+ output.m01 = input.get(0,1);
+ output.m02 = input.get(0,2);
+ output.m10 = input.get(1,0);
+ output.m11 = input.get(1,1);
+ output.m12 = input.get(1,2);
+
+ return output;
+ }
+
+ geometry::AffineMatrix3D& affineMatrixFromHomMatrix3D(
+ geometry::AffineMatrix3D& output,
+ const ::basegfx::B3DHomMatrix& input)
+ {
+ output.m00 = input.get(0,0);
+ output.m01 = input.get(0,1);
+ output.m02 = input.get(0,2);
+ output.m03 = input.get(0,3);
+
+ output.m10 = input.get(1,0);
+ output.m11 = input.get(1,1);
+ output.m12 = input.get(1,2);
+ output.m13 = input.get(1,3);
+
+ output.m20 = input.get(2,0);
+ output.m21 = input.get(2,1);
+ output.m22 = input.get(2,2);
+ output.m23 = input.get(2,3);
+
+ return output;
+ }
+
+ //---------------------------------------------------------------------------------------
+
+ ::basegfx::B2DHomMatrix& homMatrixFromMatrix( ::basegfx::B2DHomMatrix& output,
+ const geometry::Matrix2D& input )
+ {
+ // ensure last row is [0,0,1] (and optimized away)
+ output.identity();
+
+ output.set(0,0, input.m00);
+ output.set(0,1, input.m01);
+ output.set(1,0, input.m10);
+ output.set(1,1, input.m11);
+
+ return output;
+ }
+
+ //---------------------------------------------------------------------------------------
+
+ geometry::RealSize2D size2DFromB2DSize( const ::basegfx::B2DVector& rVec )
+ {
+ return geometry::RealSize2D( rVec.getX(),
+ rVec.getY() );
+ }
+
+ geometry::RealPoint2D point2DFromB2DPoint( const ::basegfx::B2DPoint& rPoint )
+ {
+ return geometry::RealPoint2D( rPoint.getX(),
+ rPoint.getY() );
+ }
+
+ geometry::RealRectangle2D rectangle2DFromB2DRectangle( const ::basegfx::B2DRange& rRect )
+ {
+ return geometry::RealRectangle2D( rRect.getMinX(),
+ rRect.getMinY(),
+ rRect.getMaxX(),
+ rRect.getMaxY() );
+ }
+
+ geometry::RealRectangle3D rectangle3DFromB3DRectangle( const ::basegfx::B3DRange& rRect )
+ {
+ return geometry::RealRectangle3D( rRect.getMinX(),
+ rRect.getMinY(),
+ rRect.getMinZ(),
+ rRect.getMaxX(),
+ rRect.getMaxY(),
+ rRect.getMaxZ());
+ }
+
+ ::basegfx::B2DVector b2DSizeFromRealSize2D( const geometry::RealSize2D& rSize )
+ {
+ return ::basegfx::B2DVector( rSize.Width,
+ rSize.Height );
+ }
+
+ ::basegfx::B2DPoint b2DPointFromRealPoint2D( const geometry::RealPoint2D& rPoint )
+ {
+ return ::basegfx::B2DPoint( rPoint.X,
+ rPoint.Y );
+ }
+
+ ::basegfx::B2DRange b2DRectangleFromRealRectangle2D( const geometry::RealRectangle2D& rRect )
+ {
+ return ::basegfx::B2DRange( rRect.X1,
+ rRect.Y1,
+ rRect.X2,
+ rRect.Y2 );
+ }
+
+ ::basegfx::B3DRange b3DRectangleFromRealRectangle3D( const geometry::RealRectangle3D& rRect )
+ {
+ return ::basegfx::B3DRange( rRect.X1,
+ rRect.Y1,
+ rRect.Z1,
+ rRect.X2,
+ rRect.Y2,
+ rRect.Z2);
+ }
+
+ geometry::IntegerSize2D integerSize2DFromB2ISize( const ::basegfx::B2IVector& rSize )
+ {
+ return geometry::IntegerSize2D( rSize.getX(),
+ rSize.getY() );
+ }
+
+ geometry::IntegerPoint2D integerPoint2DFromB2IPoint( const ::basegfx::B2IPoint& rPoint )
+ {
+ return geometry::IntegerPoint2D( rPoint.getX(),
+ rPoint.getY() );
+ }
+
+ geometry::IntegerRectangle2D integerRectangle2DFromB2IRectangle( const ::basegfx::B2IRange& rRectangle )
+ {
+ return geometry::IntegerRectangle2D( rRectangle.getMinX(), rRectangle.getMinY(),
+ rRectangle.getMaxX(), rRectangle.getMaxY() );
+ }
+
+ ::basegfx::B2IVector b2ISizeFromIntegerSize2D( const geometry::IntegerSize2D& rSize )
+ {
+ return ::basegfx::B2IVector( rSize.Width,
+ rSize.Height );
+ }
+
+ ::basegfx::B2IPoint b2IPointFromIntegerPoint2D( const geometry::IntegerPoint2D& rPoint )
+ {
+ return ::basegfx::B2IPoint( rPoint.X,
+ rPoint.Y );
+ }
+
+ ::basegfx::B2IRange b2IRectangleFromIntegerRectangle2D( const geometry::IntegerRectangle2D& rRectangle )
+ {
+ return ::basegfx::B2IRange( rRectangle.X1, rRectangle.Y1,
+ rRectangle.X2, rRectangle.Y2 );
+ }
+
+ awt::Size awtSizeFromB2ISize( const ::basegfx::B2IVector& rVec )
+ {
+ return awt::Size( rVec.getX(),
+ rVec.getY() );
+ }
+
+ awt::Point awtPointFromB2IPoint( const ::basegfx::B2IPoint& rPoint )
+ {
+ return awt::Point( rPoint.getX(),
+ rPoint.getY() );
+ }
+
+ awt::Rectangle awtRectangleFromB2IRectangle( const ::basegfx::B2IRange& rRect )
+ {
+ OSL_ENSURE( rRect.getWidth() < ::std::numeric_limits< sal_Int32 >::max() &&
+ rRect.getWidth() > ::std::numeric_limits< sal_Int32 >::min(),
+ "awtRectangleFromB2IRectangle(): width overflow" );
+ OSL_ENSURE( rRect.getHeight() < ::std::numeric_limits< sal_Int32 >::max() &&
+ rRect.getHeight() > ::std::numeric_limits< sal_Int32 >::min(),
+ "awtRectangleFromB2IRectangle(): height overflow" );
+
+ return awt::Rectangle( rRect.getMinX(),
+ rRect.getMinY(),
+ static_cast< sal_Int32 >(rRect.getWidth()),
+ static_cast< sal_Int32 >(rRect.getHeight()) );
+ }
+
+ ::basegfx::B2IVector b2ISizeFromAwtSize( const awt::Size& rSize )
+ {
+ return ::basegfx::B2IVector( rSize.Width,
+ rSize.Height );
+ }
+
+ ::basegfx::B2IPoint b2IPointFromAwtPoint( const awt::Point& rPoint )
+ {
+ return ::basegfx::B2IPoint( rPoint.X,
+ rPoint.Y );
+ }
+
+ ::basegfx::B2IRange b2IRectangleFromAwtRectangle( const awt::Rectangle& rRect )
+ {
+ return ::basegfx::B2IRange( rRect.X,
+ rRect.Y,
+ rRect.X + rRect.Width,
+ rRect.Y + rRect.Height );
+ }
+
+ ::basegfx::B2IRange b2ISurroundingRangeFromB2DRange( const ::basegfx::B2DRange& rRange )
+ {
+ return ::basegfx::B2IRange( static_cast<sal_Int32>( floor(rRange.getMinX()) ),
+ static_cast<sal_Int32>( floor(rRange.getMinY()) ),
+ static_cast<sal_Int32>( ceil(rRange.getMaxX()) ),
+ static_cast<sal_Int32>( ceil(rRange.getMaxY()) ) );
+ }
+
+ ::basegfx::B2DRange b2DSurroundingIntegerRangeFromB2DRange( const ::basegfx::B2DRange& rRange )
+ {
+ return ::basegfx::B2DRange( floor(rRange.getMinX()),
+ floor(rRange.getMinY()),
+ ceil(rRange.getMaxX()),
+ ceil(rRange.getMaxY()) );
+ }
+
+ // Geometry comparisons
+ // ===================================================================
+
+ bool RealSize2DAreEqual( const ::com::sun::star::geometry::RealSize2D& rA, const ::com::sun::star::geometry::RealSize2D& rB )
+ {
+ return (rA.Width == rB.Width && rA.Height == rB.Height);
+ }
+
+ bool RealPoint2DAreEqual( const ::com::sun::star::geometry::RealPoint2D& rA, const ::com::sun::star::geometry::RealPoint2D& rB )
+ {
+ return (rA.X == rB.X && rA.Y == rB.Y);
+ }
+
+ bool RealRectangle2DAreEqual( const ::com::sun::star::geometry::RealRectangle2D& rA, const ::com::sun::star::geometry::RealRectangle2D& rB )
+ {
+ return (rA.X1 == rB.X1 && rA.Y1 == rB.Y1 && rA.X2 == rB.X2 && rA.Y2 == rB.Y2);
+ }
+
+ bool RealRectangle3DAreEqual( const ::com::sun::star::geometry::RealRectangle3D& rA, const ::com::sun::star::geometry::RealRectangle3D& rB )
+ {
+ return (rA.X1 == rB.X1 && rA.Y1 == rB.Y1 && rA.Z1 == rB.Z1 && rA.X2 == rB.X2 && rA.Y2 == rB.Y2 && rA.Z2 == rB.Z2);
+ }
+
+ bool AffineMatrix2DAreEqual( const ::com::sun::star::geometry::AffineMatrix2D& rA, const ::com::sun::star::geometry::AffineMatrix2D& rB )
+ {
+ return (rA.m00 == rB.m00 && rA.m01 == rB.m01 && rA.m02 == rB.m02 && rA.m10 == rB.m10 && rA.m11 == rB.m11 && rA.m12 == rB.m12);
+ }
+
+ bool IntegerSize2DAreEqual( const ::com::sun::star::geometry::IntegerSize2D& rA, const ::com::sun::star::geometry::IntegerSize2D& rB )
+ {
+ return (rA.Width == rB.Width && rA.Height == rB.Height);
+ }
+
+ bool IntegerPoint2DAreEqual( const ::com::sun::star::geometry::IntegerPoint2D& rA, const ::com::sun::star::geometry::IntegerPoint2D& rB )
+ {
+ return (rA.X == rB.X && rA.Y == rB.Y);
+ }
+
+ bool IntegerRectangle2DAreEqual( const ::com::sun::star::geometry::IntegerRectangle2D& rA, const ::com::sun::star::geometry::IntegerRectangle2D& rB )
+ {
+ return (rA.X1 == rB.X1 && rA.Y1 == rB.Y1 && rA.X2 == rB.X2 && rA.Y2 == rB.Y2);
+ }
+
+ bool awtSizeAreEqual( const ::com::sun::star::awt::Size& rA, const ::com::sun::star::awt::Size& rB )
+ {
+ return (rA.Width == rB.Width && rA.Height == rB.Height);
+ }
+
+ bool awtPointAreEqual( const ::com::sun::star::awt::Point& rA, const ::com::sun::star::awt::Point& rB )
+ {
+ return (rA.X == rB.X && rA.Y == rB.Y);
+ }
+
+ bool awtRectangleAreEqual( const ::com::sun::star::awt::Rectangle& rA, const ::com::sun::star::awt::Rectangle& rB )
+ {
+ return (rA.X == rB.X && rA.Y == rB.Y && rA.Width == rB.Width && rA.Height == rB.Height);
+ }
+ } // namespace bgfxtools
+
+} // namespace canvas
diff --git a/basegfx/source/tools/debugplotter.cxx b/basegfx/source/tools/debugplotter.cxx
new file mode 100755
index 000000000000..2c68eb44a846
--- /dev/null
+++ b/basegfx/source/tools/debugplotter.cxx
@@ -0,0 +1,413 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basegfx.hxx"
+#include <osl/diagnose.h>
+
+#include <basegfx/curve/b2dcubicbezier.hxx>
+
+#include <basegfx/tools/debugplotter.hxx>
+#include <boost/bind.hpp>
+
+
+namespace basegfx
+{
+ namespace
+ {
+ void outputHeader( const ::rtl::OString& rTitle,
+ ::std::ostream* pStm )
+ {
+ // output gnuplot setup
+ if( pStm )
+ {
+ *pStm << "#!/usr/bin/gnuplot -persist" << ::std::endl <<
+ "#" << ::std::endl <<
+ "# automatically generated by basegfx, don't change!" << ::std::endl <<
+ "#" << ::std::endl <<
+ "# --- " << (const sal_Char*)rTitle << " ---" << ::std::endl <<
+ "#" << ::std::endl <<
+ "set parametric" << ::std::endl <<
+ "# set terminal postscript eps enhanced color " << ::std::endl <<
+ "# set output \"plot.eps\"" << ::std::endl <<
+ // This function plots a cubic bezier curve. P,q,r,s
+ // are the control point elements of the corresponding
+ // output coordinate component (i.e. x components for
+ // the x plot, and y components for the y plot)
+ "cubicBezier(p,q,r,s,t) = p*(1-t)**3+q*3*(1-t)**2*t+r*3*(1-t)*t**2+s*t**3" << ::std::endl <<
+ // This function plots the derivative of a cubic
+ // bezier curve. P,q,r,s are the control point
+ // components of the _original_ curve
+ "cubicBezDerivative(p,q,r,s,t) = 3*(q-p)*(1-t)**2+6*(r-q)*(1-t)*t+3*(s-r)*t**2" << ::std::endl <<
+ // Plot a line's component of a line between a and b
+ // (where a and b should be the corresponding
+ // components of the line's start and end point,
+ // respectively)
+ "line(p,q,r) = p*(1-t)+q*t" << ::std::endl <<
+ // Plot a line's x component of a line in implicit
+ // form ax + by + c = 0
+ "implicitLineX(a,b,c,t) = a*-c + t*-b" << ::std::endl <<
+ // Plot a line's y component of a line in implicit
+ // form ax + by + c = 0
+ "implicitLineY(a,b,c,t) = b*-c + t*a" << ::std::endl <<
+ "pointmarkx(c,t) = c-0.03*t" << ::std::endl << // hack for displaying single points in parametric form
+ "pointmarky(c,t) = c+0.03*t" << ::std::endl << // hack for displaying single points in parametric form
+ "# end of setup" << ::std::endl;
+ }
+ else
+ {
+ OSL_TRACE( "#!/usr/bin/gnuplot -persist\n",
+ "#\n",
+ "# automatically generated by basegfx, don't change!\n",
+ "#\n",
+ "# --- %s ---\n",
+ "#\n",
+ "set parametric\n",
+ // This function plots a cubic bezier curve. P,q,r,s
+ // are the control point elements of the corresponding
+ // output coordinate component (i.e. x components for
+ // the x plot, and y components for the y plot)
+ "cubicBezier(p,q,r,s,t) = p*(1-t)**3+q*3*(1-t)**2*t+r*3*(1-t)*t**2+s*t**3\n",
+ // This function plots the derivative of a cubic
+ // bezier curve. P,q,r,s are the control point
+ // components of the _original_ curve
+ "cubicBezDerivative(p,q,r,s,t) = 3*(q-p)*(1-t)**2+6*(r-q)*(1-t)*t+3*(s-r)*t**2\n",
+ // Plot a line's component of a line between a and b
+ // (where a and b should be the corresponding
+ // components of the line's start and end point,
+ // respectively)
+ "line(p,q,r) = p*(1-t)+q*t\n",
+ // Plot a line's x component of a line in implicit
+ // form ax + by + c = 0
+ "implicitLineX(a,b,c,t) = a*-c + t*-b\n",
+ // Plot a line's y component of a line in implicit
+ // form ax + by + c = 0
+ "implicitLineY(a,b,c,t) = b*-c + t*a\n",
+ "pointmarkx(c,t) = c-0.03*t\n", // hack for displaying single points in parametric form
+ "pointmarky(c,t) = c+0.03*t\n", // hack for displaying single points in parametric form
+ "# end of setup\n",
+ (const sal_Char*)rTitle );
+ }
+ }
+
+ class Writer
+ {
+ public:
+ Writer( ::std::ostream* pStm ) :
+ mpStream( pStm )
+ {
+ }
+
+ void outputPoint( const ::std::pair< B2DPoint, ::rtl::OString >& rElem )
+ {
+ if( mpStream )
+ *mpStream << " " << rElem.first.getX() << "\t" << rElem.first.getY() << ::std::endl;
+ else
+ OSL_TRACE( " %f\t%f\n", rElem.first.getX(), rElem.first.getY() );
+ }
+
+ void outputVector( const ::std::pair< B2DVector, ::rtl::OString >& rElem )
+ {
+ if( mpStream )
+ *mpStream << " " << rElem.first.getX() << "\t" << rElem.first.getY() << ::std::endl << ::std::endl;
+ else
+ OSL_TRACE( " %f\t%f\n\n", rElem.first.getX(), rElem.first.getY() );
+ }
+
+ void outputRect( const ::std::pair< B2DRange, ::rtl::OString >& rElem )
+ {
+ const double nX0( rElem.first.getMinX() );
+ const double nY0( rElem.first.getMinY() );
+ const double nX1( rElem.first.getMaxX() );
+ const double nY1( rElem.first.getMaxY() );
+
+ if( mpStream )
+ *mpStream << " "
+ << nX0 << "\t" << nY0 << "\t"
+ << nX1 << "\t" << nY0 << "\t"
+ << nX1 << "\t" << nY1 << "\t"
+ << nX0 << "\t" << nY1 << "\t"
+ << nX0 << "\t" << nY0 << ::std::endl << ::std::endl;
+
+ else
+ OSL_TRACE( " %f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\n\n",
+ nX0, nY0,
+ nX1, nY0,
+ nX1, nY1,
+ nX0, nY1,
+ nX0, nY0 );
+ }
+
+ private:
+ ::std::ostream* mpStream;
+ };
+ }
+
+ DebugPlotter::DebugPlotter( const sal_Char* pTitle ) :
+ maTitle( pTitle ),
+ maPoints(),
+ maVectors(),
+ maRanges(),
+ maPolygons(),
+ mpOutputStream(NULL)
+ {
+ }
+
+ DebugPlotter::DebugPlotter( const sal_Char* pTitle,
+ ::std::ostream& rOutputStream ) :
+ maTitle( pTitle ),
+ maPoints(),
+ maVectors(),
+ maRanges(),
+ maPolygons(),
+ mpOutputStream(&rOutputStream)
+ {
+ }
+
+ DebugPlotter::~DebugPlotter()
+ {
+ const bool bHavePoints( !maPoints.empty() );
+ const bool bHaveVectors( !maVectors.empty() );
+ const bool bHaveRanges( !maRanges.empty() );
+ const bool bHavePolygons( !maPolygons.empty() );
+
+ if( bHavePoints ||
+ bHaveVectors ||
+ bHaveRanges ||
+ bHavePolygons )
+ {
+ outputHeader( maTitle, mpOutputStream );
+
+ print( "\n\n# parametric primitive output\n"
+ "plot [t=0:1] \\\n" );
+
+ // output plot declarations for used entities
+ bool bNeedColon( false );
+ if( bHavePoints )
+ {
+ print( " '-' using ($1):($2) title \"Points\" with points" );
+ bNeedColon = true;
+ }
+ if( bHaveVectors )
+ {
+ if( bNeedColon )
+ print( ", \\\n" );
+
+ print( " '-' using ($1):($2) title \"Vectors\" with lp" );
+ bNeedColon = true;
+ }
+ if( bHaveRanges )
+ {
+ if( bNeedColon )
+ print( ", \\\n" );
+
+ print( " '-' using ($1):($2) title \"Ranges\" with lines" );
+ bNeedColon = true;
+ }
+ if( bHavePolygons )
+ {
+ const ::std::size_t nSize( maPolygons.size() );
+ for( ::std::size_t i=0; i<nSize; ++i )
+ {
+ if( maPolygons.at(i).first.areControlPointsUsed() )
+ {
+ const B2DPolygon& rCurrPoly( maPolygons.at(i).first );
+
+ const sal_uInt32 nCount( rCurrPoly.count() );
+ for( sal_uInt32 k=0; k<nCount; ++k )
+ {
+ if( bNeedColon )
+ print( ", \\\n" );
+
+ const B2DPoint& rP0( rCurrPoly.getB2DPoint(k) );
+ const B2DPoint& rP1( rCurrPoly.getNextControlPoint(k) );
+ const B2DPoint& rP2( rCurrPoly.getPrevControlPoint((k + 1) % nCount) );
+ const B2DPoint& rP3( k+1<nCount ? rCurrPoly.getB2DPoint(k+1) : rCurrPoly.getB2DPoint(k) );
+
+ if( mpOutputStream )
+ *mpOutputStream << " cubicBezier("
+ << rP0.getX() << ","
+ << rP1.getX() << ","
+ << rP2.getX() << ","
+ << rP3.getX() << ",t), \\\n cubicBezier("
+ << rP0.getY() << ","
+ << rP1.getY() << ","
+ << rP2.getY() << ","
+ << rP3.getY() << ",t)";
+ else
+ OSL_TRACE( " cubicBezier(%f,%f,%f,%f,t), \\\n"
+ " cubicBezier(%f,%f,%f,%f,t)",
+ rP0.getX(),
+ rP1.getX(),
+ rP2.getX(),
+ rP3.getX(),
+ rP0.getY(),
+ rP1.getY(),
+ rP2.getY(),
+ rP3.getY() );
+
+ bNeedColon = true;
+ }
+ }
+ else
+ {
+ if( bNeedColon )
+ print( ", \\\n" );
+
+ if( mpOutputStream )
+ *mpOutputStream << " '-' using ($1):($2) title \"Polygon "
+ << (const sal_Char*)maPolygons.at(i).second << "\" with lp";
+ else
+ OSL_TRACE( " '-' using ($1):($2) title \"Polygon %s\" with lp",
+ (const sal_Char*)maPolygons.at(i).second );
+
+ bNeedColon = true;
+ }
+ }
+ }
+
+ if( bHavePoints )
+ {
+ Writer aWriter( mpOutputStream );
+
+ ::std::for_each( maPoints.begin(),
+ maPoints.end(),
+ ::boost::bind( &Writer::outputPoint,
+ ::boost::ref( aWriter ),
+ _1 ) );
+ print( "e\n" );
+ }
+
+ if( bHaveVectors )
+ {
+ Writer aWriter( mpOutputStream );
+
+ ::std::for_each( maVectors.begin(),
+ maVectors.end(),
+ ::boost::bind( &Writer::outputVector,
+ ::boost::ref( aWriter ),
+ _1 ) );
+ print( "e\n" );
+ }
+
+ if( bHaveRanges )
+ {
+ Writer aWriter( mpOutputStream );
+
+ ::std::for_each( maRanges.begin(),
+ maRanges.end(),
+ ::boost::bind( &Writer::outputRect,
+ ::boost::ref( aWriter ),
+ _1 ) );
+ print( "e\n" );
+ }
+
+ if( bHavePolygons )
+ {
+ const ::std::size_t nSize( maPolygons.size() );
+ for( ::std::size_t i=0; i<nSize; ++i )
+ {
+ if( !maPolygons.at(i).first.areControlPointsUsed() )
+ {
+ const B2DPolygon& rCurrPoly( maPolygons.at(i).first );
+
+ const sal_uInt32 nCount( rCurrPoly.count() );
+ for( sal_uInt32 k=0; k<nCount; ++k )
+ {
+ const B2DPoint& rP( rCurrPoly.getB2DPoint(k) );
+
+ if( mpOutputStream )
+ *mpOutputStream << " " << rP.getX() << "," << rP.getY();
+ else
+ OSL_TRACE( " %f,%f",
+ rP.getX(),
+ rP.getX() );
+ }
+
+ print( "\ne\n" );
+ }
+ }
+ }
+ }
+ }
+
+ void DebugPlotter::plot( const B2DPoint& rPoint,
+ const sal_Char* pTitle )
+ {
+ maPoints.push_back( ::std::make_pair( rPoint,
+ ::rtl::OString( pTitle ) ) );
+ }
+
+ void DebugPlotter::plot( const B2DVector& rVec,
+ const sal_Char* pTitle )
+ {
+ maVectors.push_back( ::std::make_pair( rVec,
+ ::rtl::OString( pTitle ) ) );
+ }
+
+ void DebugPlotter::plot( const B2DCubicBezier& rBezier,
+ const sal_Char* pTitle )
+ {
+ B2DPolygon aPoly;
+ aPoly.append(rBezier.getStartPoint());
+ aPoly.appendBezierSegment(rBezier.getControlPointA(), rBezier.getControlPointB(), rBezier.getEndPoint());
+ maPolygons.push_back( ::std::make_pair( aPoly,
+ ::rtl::OString( pTitle ) ) );
+ }
+
+ void DebugPlotter::plot( const B2DRange& rRange,
+ const sal_Char* pTitle )
+ {
+ maRanges.push_back( ::std::make_pair( rRange,
+ ::rtl::OString( pTitle ) ) );
+ }
+
+ void DebugPlotter::plot( const B2DPolygon& rPoly,
+ const sal_Char* pTitle )
+ {
+ maPolygons.push_back( ::std::make_pair( rPoly,
+ ::rtl::OString( pTitle ) ) );
+ }
+
+ void DebugPlotter::plot( const B2DPolyPolygon& rPoly,
+ const sal_Char* pTitle )
+ {
+ const ::rtl::OString aTitle( pTitle );
+ const sal_uInt32 nCount( rPoly.count() );
+ for( sal_uInt32 i=0; i<nCount; ++i )
+ maPolygons.push_back( ::std::make_pair( rPoly.getB2DPolygon( i ),
+ aTitle ) );
+ }
+
+ void DebugPlotter::print( const sal_Char* pStr )
+ {
+ if( mpOutputStream )
+ *mpOutputStream << pStr;
+ else
+ OSL_TRACE( pStr );
+ }
+}
diff --git a/basegfx/source/tools/gradienttools.cxx b/basegfx/source/tools/gradienttools.cxx
new file mode 100644
index 000000000000..857b668da68e
--- /dev/null
+++ b/basegfx/source/tools/gradienttools.cxx
@@ -0,0 +1,349 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basegfx.hxx"
+
+#include <basegfx/tools/gradienttools.hxx>
+#include <basegfx/point/b2dpoint.hxx>
+#include <basegfx/range/b2drange.hxx>
+#include <basegfx/matrix/b2dhommatrixtools.hxx>
+
+namespace basegfx
+{
+ /** Most of the setup for linear & axial gradient is the same, except
+ for the border treatment. Factored out here.
+ */
+ static void init1DGradientInfo(ODFGradientInfo& o_rGradientInfo,
+ const B2DRange& rTargetRange,
+ sal_uInt32 nSteps,
+ double fBorder,
+ double fAngle,
+ bool bAxial)
+ {
+ o_rGradientInfo.maTextureTransform.identity();
+ o_rGradientInfo.maBackTextureTransform.identity();
+ o_rGradientInfo.mnSteps = nSteps;
+
+ fAngle = -fAngle;
+
+ double fTargetSizeX(rTargetRange.getWidth());
+ double fTargetSizeY(rTargetRange.getHeight());
+ double fTargetOffsetX(rTargetRange.getMinX());
+ double fTargetOffsetY(rTargetRange.getMinY());
+
+ // add object expansion
+ if(0.0 != fAngle)
+ {
+ const double fAbsCos(fabs(cos(fAngle)));
+ const double fAbsSin(fabs(sin(fAngle)));
+ const double fNewX(fTargetSizeX * fAbsCos + fTargetSizeY * fAbsSin);
+ const double fNewY(fTargetSizeY * fAbsCos + fTargetSizeX * fAbsSin);
+ fTargetOffsetX -= (fNewX - fTargetSizeX) / 2.0;
+ fTargetOffsetY -= (fNewY - fTargetSizeY) / 2.0;
+ fTargetSizeX = fNewX;
+ fTargetSizeY = fNewY;
+ }
+
+ const double fSizeWithoutBorder=1.0 - fBorder;
+ if( bAxial )
+ {
+ o_rGradientInfo.maTextureTransform.scale(1.0, fSizeWithoutBorder * .5);
+ o_rGradientInfo.maTextureTransform.translate(0.0, 0.5);
+ }
+ else
+ {
+ if(!fTools::equal(fSizeWithoutBorder, 1.0))
+ {
+ o_rGradientInfo.maTextureTransform.scale(1.0, fSizeWithoutBorder);
+ o_rGradientInfo.maTextureTransform.translate(0.0, fBorder);
+ }
+ }
+
+ o_rGradientInfo.maTextureTransform.scale(fTargetSizeX, fTargetSizeY);
+
+ // add texture rotate after scale to keep perpendicular angles
+ if(0.0 != fAngle)
+ {
+ const B2DPoint aCenter(0.5*fTargetSizeX,
+ 0.5*fTargetSizeY);
+ o_rGradientInfo.maTextureTransform *=
+ basegfx::tools::createRotateAroundPoint(aCenter, fAngle);
+ }
+
+ // add object translate
+ o_rGradientInfo.maTextureTransform.translate(fTargetOffsetX, fTargetOffsetY);
+
+ // prepare aspect for texture
+ o_rGradientInfo.mfAspectRatio = (0.0 != fTargetSizeY) ? fTargetSizeX / fTargetSizeY : 1.0;
+
+ // build transform from u,v to [0.0 .. 1.0].
+ o_rGradientInfo.maBackTextureTransform = o_rGradientInfo.maTextureTransform;
+ o_rGradientInfo.maBackTextureTransform.invert();
+ }
+
+ /** Most of the setup for radial & ellipsoidal gradient is the same,
+ except for the border treatment. Factored out here.
+ */
+ static void initEllipticalGradientInfo(ODFGradientInfo& o_rGradientInfo,
+ const B2DRange& rTargetRange,
+ const B2DVector& rOffset,
+ sal_uInt32 nSteps,
+ double fBorder,
+ double fAngle,
+ bool bCircular)
+ {
+ o_rGradientInfo.maTextureTransform.identity();
+ o_rGradientInfo.maBackTextureTransform.identity();
+ o_rGradientInfo.mnSteps = nSteps;
+
+ fAngle = -fAngle;
+
+ double fTargetSizeX(rTargetRange.getWidth());
+ double fTargetSizeY(rTargetRange.getHeight());
+ double fTargetOffsetX(rTargetRange.getMinX());
+ double fTargetOffsetY(rTargetRange.getMinY());
+
+ // add object expansion
+ if( bCircular )
+ {
+ const double fOriginalDiag(sqrt((fTargetSizeX * fTargetSizeX) + (fTargetSizeY * fTargetSizeY)));
+ fTargetOffsetX -= (fOriginalDiag - fTargetSizeX) / 2.0;
+ fTargetOffsetY -= (fOriginalDiag - fTargetSizeY) / 2.0;
+ fTargetSizeX = fOriginalDiag;
+ fTargetSizeY = fOriginalDiag;
+ }
+ else
+ {
+ fTargetOffsetX -= (0.4142 / 2.0 ) * fTargetSizeX;
+ fTargetOffsetY -= (0.4142 / 2.0 ) * fTargetSizeY;
+ fTargetSizeX = 1.4142 * fTargetSizeX;
+ fTargetSizeY = 1.4142 * fTargetSizeY;
+ }
+
+ const double fHalfBorder((1.0 - fBorder) * 0.5);
+ o_rGradientInfo.maTextureTransform.scale(fHalfBorder, fHalfBorder);
+
+ o_rGradientInfo.maTextureTransform.translate(0.5, 0.5);
+ o_rGradientInfo.maTextureTransform.scale(fTargetSizeX, fTargetSizeY);
+
+ // add texture rotate after scale to keep perpendicular angles
+ if( !bCircular && 0.0 != fAngle)
+ {
+ const B2DPoint aCenter(0.5*fTargetSizeX,
+ 0.5*fTargetSizeY);
+ o_rGradientInfo.maTextureTransform *=
+ basegfx::tools::createRotateAroundPoint(aCenter, fAngle);
+ }
+
+ // add defined offsets after rotation
+ if(0.5 != rOffset.getX() || 0.5 != rOffset.getY())
+ {
+ // use original target size
+ fTargetOffsetX += (rOffset.getX() - 0.5) * rTargetRange.getWidth();
+ fTargetOffsetY += (rOffset.getY() - 0.5) * rTargetRange.getHeight();
+ }
+
+ // add object translate
+ o_rGradientInfo.maTextureTransform.translate(fTargetOffsetX, fTargetOffsetY);
+
+ // prepare aspect for texture
+ o_rGradientInfo.mfAspectRatio = (0.0 != fTargetSizeY) ? fTargetSizeX / fTargetSizeY : 1.0;
+
+ // build transform from u,v to [0.0 .. 1.0].
+ o_rGradientInfo.maBackTextureTransform = o_rGradientInfo.maTextureTransform;
+ o_rGradientInfo.maBackTextureTransform.invert();
+ }
+
+ /** Setup for rect & square gradient is exactly the same. Factored out
+ here.
+ */
+ static void initRectGradientInfo(ODFGradientInfo& o_rGradientInfo,
+ const B2DRange& rTargetRange,
+ const B2DVector& rOffset,
+ sal_uInt32 nSteps,
+ double fBorder,
+ double fAngle)
+ {
+ o_rGradientInfo.maTextureTransform.identity();
+ o_rGradientInfo.maBackTextureTransform.identity();
+ o_rGradientInfo.mnSteps = nSteps;
+
+ fAngle = -fAngle;
+
+ double fTargetSizeX(rTargetRange.getWidth());
+ double fTargetSizeY(rTargetRange.getHeight());
+ double fTargetOffsetX(rTargetRange.getMinX());
+ double fTargetOffsetY(rTargetRange.getMinY());
+
+ // add object expansion
+ if(0.0 != fAngle)
+ {
+ const double fAbsCos(fabs(cos(fAngle)));
+ const double fAbsSin(fabs(sin(fAngle)));
+ const double fNewX(fTargetSizeX * fAbsCos + fTargetSizeY * fAbsSin);
+ const double fNewY(fTargetSizeY * fAbsCos + fTargetSizeX * fAbsSin);
+ fTargetOffsetX -= (fNewX - fTargetSizeX) / 2.0;
+ fTargetOffsetY -= (fNewY - fTargetSizeY) / 2.0;
+ fTargetSizeX = fNewX;
+ fTargetSizeY = fNewY;
+ }
+
+ const double fHalfBorder((1.0 - fBorder) * 0.5);
+ o_rGradientInfo.maTextureTransform.scale(fHalfBorder, fHalfBorder);
+
+ o_rGradientInfo.maTextureTransform.translate(0.5, 0.5);
+ o_rGradientInfo.maTextureTransform.scale(fTargetSizeX, fTargetSizeY);
+
+ // add texture rotate after scale to keep perpendicular angles
+ if(0.0 != fAngle)
+ {
+ const B2DPoint aCenter(0.5*fTargetSizeX,
+ 0.5*fTargetSizeY);
+ o_rGradientInfo.maTextureTransform *=
+ basegfx::tools::createRotateAroundPoint(aCenter, fAngle);
+ }
+
+ // add defined offsets after rotation
+ if(0.5 != rOffset.getX() || 0.5 != rOffset.getY())
+ {
+ // use scaled target size
+ fTargetOffsetX += (rOffset.getX() - 0.5) * fTargetSizeX;
+ fTargetOffsetY += (rOffset.getY() - 0.5) * fTargetSizeY;
+ }
+
+ // add object translate
+ o_rGradientInfo.maTextureTransform.translate(fTargetOffsetX, fTargetOffsetY);
+
+ // prepare aspect for texture
+ o_rGradientInfo.mfAspectRatio = (0.0 != fTargetSizeY) ? fTargetSizeX / fTargetSizeY : 1.0;
+
+ // build transform from u,v to [0.0 .. 1.0]. As base, use inverse texture transform
+ o_rGradientInfo.maBackTextureTransform = o_rGradientInfo.maTextureTransform;
+ o_rGradientInfo.maBackTextureTransform.invert();
+ }
+
+ namespace tools
+ {
+ ODFGradientInfo& createLinearODFGradientInfo(ODFGradientInfo& o_rGradientInfo,
+ const B2DRange& rTargetArea,
+ sal_uInt32 nSteps,
+ double fBorder,
+ double fAngle)
+ {
+ init1DGradientInfo(o_rGradientInfo,
+ rTargetArea,
+ nSteps,
+ fBorder,
+ fAngle,
+ false);
+ return o_rGradientInfo;
+ }
+
+ ODFGradientInfo& createAxialODFGradientInfo(ODFGradientInfo& o_rGradientInfo,
+ const B2DRange& rTargetArea,
+ sal_uInt32 nSteps,
+ double fBorder,
+ double fAngle)
+ {
+ init1DGradientInfo(o_rGradientInfo,
+ rTargetArea,
+ nSteps,
+ fBorder,
+ fAngle,
+ true);
+ return o_rGradientInfo;
+ }
+
+ ODFGradientInfo& createRadialODFGradientInfo(ODFGradientInfo& o_rGradientInfo,
+ const B2DRange& rTargetArea,
+ const B2DVector& rOffset,
+ sal_uInt32 nSteps,
+ double fBorder)
+ {
+ initEllipticalGradientInfo(o_rGradientInfo,
+ rTargetArea,
+ rOffset,
+ nSteps,
+ fBorder,
+ 0.0,
+ true);
+ return o_rGradientInfo;
+ }
+
+ ODFGradientInfo& createEllipticalODFGradientInfo(ODFGradientInfo& o_rGradientInfo,
+ const B2DRange& rTargetArea,
+ const B2DVector& rOffset,
+ sal_uInt32 nSteps,
+ double fBorder,
+ double fAngle)
+ {
+ initEllipticalGradientInfo(o_rGradientInfo,
+ rTargetArea,
+ rOffset,
+ nSteps,
+ fBorder,
+ fAngle,
+ false);
+ return o_rGradientInfo;
+ }
+
+ ODFGradientInfo& createSquareODFGradientInfo(ODFGradientInfo& o_rGradientInfo,
+ const B2DRange& rTargetArea,
+ const B2DVector& rOffset,
+ sal_uInt32 nSteps,
+ double fBorder,
+ double fAngle)
+ {
+ initRectGradientInfo(o_rGradientInfo,
+ rTargetArea,
+ rOffset,
+ nSteps,
+ fBorder,
+ fAngle);
+ return o_rGradientInfo;
+ }
+
+ ODFGradientInfo& createRectangularODFGradientInfo(ODFGradientInfo& o_rGradientInfo,
+ const B2DRange& rTargetArea,
+ const B2DVector& rOffset,
+ sal_uInt32 nSteps,
+ double fBorder,
+ double fAngle)
+ {
+ initRectGradientInfo(o_rGradientInfo,
+ rTargetArea,
+ rOffset,
+ nSteps,
+ fBorder,
+ fAngle);
+ return o_rGradientInfo;
+ }
+
+ } // namespace tools
+
+} // namespace basegfx
diff --git a/basegfx/source/tools/keystoplerp.cxx b/basegfx/source/tools/keystoplerp.cxx
new file mode 100644
index 000000000000..883bfec6bc96
--- /dev/null
+++ b/basegfx/source/tools/keystoplerp.cxx
@@ -0,0 +1,107 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: canvastools.hxx,v $
+ * $Revision: 1.10 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basegfx.hxx"
+
+#include "basegfx/tools/keystoplerp.hxx"
+#include <com/sun/star/uno/Sequence.hxx>
+
+#include <algorithm>
+
+static void validateInput(const std::vector<double>& rKeyStops)
+{
+ (void)rKeyStops;
+#ifdef DBG_UTIL
+ OSL_ENSURE( rKeyStops.size() > 1,
+ "KeyStopLerp::KeyStopLerp(): key stop vector must have two entries or more" );
+
+ // rKeyStops must be sorted in ascending order
+ for( ::std::size_t i=1, len=rKeyStops.size(); i<len; ++i )
+ {
+ if( rKeyStops[i-1] > rKeyStops[i] )
+ OSL_ENSURE( false,
+ "KeyStopLerp::KeyStopLerp(): time vector is not sorted in ascending order!" );
+ }
+#endif
+}
+
+namespace basegfx
+{
+ namespace tools
+ {
+ KeyStopLerp::KeyStopLerp( const std::vector<double>& rKeyStops ) :
+ maKeyStops(rKeyStops),
+ mnLastIndex(0)
+ {
+ validateInput(maKeyStops);
+ }
+
+ KeyStopLerp::KeyStopLerp( const ::com::sun::star::uno::Sequence<double>& rKeyStops ) :
+ maKeyStops(rKeyStops.getLength()),
+ mnLastIndex(0)
+ {
+ std::copy( rKeyStops.getConstArray(),
+ rKeyStops.getConstArray()+rKeyStops.getLength(),
+ maKeyStops.begin() );
+ validateInput(maKeyStops);
+ }
+
+ KeyStopLerp::ResultType KeyStopLerp::lerp(double fAlpha) const
+ {
+ // cached value still okay?
+ if( maKeyStops.at(mnLastIndex) < fAlpha ||
+ maKeyStops.at(mnLastIndex+1) >= fAlpha )
+ {
+ // nope, find new index
+ mnLastIndex = std::min<std::ptrdiff_t>(
+ maKeyStops.size()-2,
+ // range is ensured by max below
+ std::max<std::ptrdiff_t>(
+ 0,
+ std::distance( maKeyStops.begin(),
+ std::lower_bound( maKeyStops.begin(),
+ maKeyStops.end(),
+ fAlpha )) - 1 ));
+ }
+
+ // lerp between stop and stop+1
+ const double fRawLerp=
+ (fAlpha-maKeyStops.at(mnLastIndex)) /
+ (maKeyStops.at(mnLastIndex+1) - maKeyStops.at(mnLastIndex));
+
+ // clamp to permissible range (input fAlpha might be
+ // everything)
+ return ResultType(
+ mnLastIndex,
+ clamp(fRawLerp,0.0,1.0));
+ }
+ }
+}
diff --git a/basegfx/source/tools/liangbarsky.cxx b/basegfx/source/tools/liangbarsky.cxx
new file mode 100644
index 000000000000..f07cea4a34d9
--- /dev/null
+++ b/basegfx/source/tools/liangbarsky.cxx
@@ -0,0 +1,132 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basegfx.hxx"
+
+#include "basegfx/tools/tools.hxx"
+#include "basegfx/numeric/ftools.hxx"
+#include "basegfx/range/b2drange.hxx"
+
+
+namespace basegfx
+{
+ namespace tools
+ {
+ namespace
+ {
+ // see Foley/vanDam, pp. 122 for the Liang-Barsky line
+ // clipping algorithm
+ inline bool liangBarskyClipT( double nDenom,
+ double nNumerator,
+ double& io_rTE,
+ double& io_rTL )
+ {
+ double t;
+ if( nDenom > 0 )
+ {
+ t = nNumerator / nDenom;
+ if( t > io_rTL )
+ return false;
+ else if( t > io_rTE )
+ io_rTE = t;
+ }
+ else if( nDenom < 0 )
+ {
+ t = nNumerator / nDenom;
+ if( t < io_rTE )
+ return false;
+ else
+ io_rTL = t;
+ }
+ else if( nNumerator > 0 )
+ {
+ return false;
+ }
+
+ return true;
+ }
+ }
+
+ // see Foley/vanDam, pp. 122 for the Liang-Barsky line
+ // clipping algorithm
+ bool liangBarskyClip2D( ::basegfx::B2DPoint& io_rStart,
+ ::basegfx::B2DPoint& io_rEnd,
+ const ::basegfx::B2DRange& rClipRect )
+ {
+ const double nDX( io_rEnd.getX() - io_rStart.getX() );
+ const double nDY( io_rEnd.getY() - io_rStart.getY() );
+
+ if( ::basegfx::fTools::equalZero( nDX ) &&
+ ::basegfx::fTools::equalZero( nDY ) )
+ {
+ return rClipRect.isInside( io_rStart );
+ }
+ else
+ {
+ double nTE( 0.0 );
+ double nTL( 1.0 );
+ if( liangBarskyClipT(nDX, rClipRect.getMinX() - io_rStart.getX(),
+ nTE, nTL ) ) // inside wrt. left edge
+ {
+ if( liangBarskyClipT(-nDX, io_rStart.getX() - rClipRect.getMaxX(),
+ nTE, nTL ) ) // inside wrt. right edge
+ {
+ if( liangBarskyClipT(nDY, rClipRect.getMinY() - io_rStart.getY(),
+ nTE, nTL ) ) // inside wrt. bottom edge
+ {
+ if( liangBarskyClipT(-nDY, io_rStart.getY() - rClipRect.getMaxY(),
+ nTE, nTL ) ) // inside wrt. top edge
+ {
+ // compute actual intersection points,
+ // if nTL has changed
+ if( nTL < 1.0 )
+ {
+ io_rEnd.setX( io_rStart.getX() + nTL*nDX );
+ io_rEnd.setY( io_rStart.getY() + nTL*nDY );
+ }
+
+ // compute actual intersection points,
+ // if nTE has changed
+ if( nTE > 0.0 )
+ {
+ io_rStart.setX( io_rStart.getX() + nTE*nDX );
+ io_rStart.setY( io_rStart.getY() + nTE*nDY );
+ }
+
+ // line is (at least partially) visible
+ return true;
+ }
+ }
+ }
+ }
+ }
+
+ return false;
+ }
+ }
+}
diff --git a/basegfx/source/tools/makefile.mk b/basegfx/source/tools/makefile.mk
new file mode 100755
index 000000000000..0a0977f7305d
--- /dev/null
+++ b/basegfx/source/tools/makefile.mk
@@ -0,0 +1,51 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..$/..
+PRJNAME=basegfx
+TARGET=tools
+
+ENABLE_EXCEPTIONS=TRUE
+
+# --- Settings ----------------------------------
+
+.INCLUDE : settings.mk
+
+# --- Files -------------------------------------
+
+SLOFILES= $(SLO)$/b2dclipstate.obj \
+ $(SLO)$/canvastools.obj \
+ $(SLO)$/gradienttools.obj \
+ $(SLO)$/debugplotter.obj \
+ $(SLO)$/keystoplerp.obj \
+ $(SLO)$/liangbarsky.obj \
+ $(SLO)$/tools.obj \
+ $(SLO)$/unopolypolygon.obj
+
+# --- Targets ----------------------------------
+
+.INCLUDE : target.mk
diff --git a/basegfx/source/tools/tools.cxx b/basegfx/source/tools/tools.cxx
new file mode 100644
index 000000000000..d375f144169d
--- /dev/null
+++ b/basegfx/source/tools/tools.cxx
@@ -0,0 +1,124 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basegfx.hxx"
+
+#include "basegfx/tools/tools.hxx"
+#include "basegfx/range/b2drange.hxx"
+
+#include <algorithm>
+
+
+namespace basegfx
+{
+ namespace tools
+ {
+ namespace
+ {
+ inline double distance( const double& nX,
+ const double& nY,
+ const ::basegfx::B2DVector& rNormal,
+ const double& nC )
+ {
+ return nX*rNormal.getX() + nY*rNormal.getY() - nC;
+ }
+
+ void moveLineOutsideRect( ::basegfx::B2DPoint& io_rStart,
+ ::basegfx::B2DPoint& io_rEnd,
+ const ::basegfx::B2DVector& rMoveDirection,
+ const ::basegfx::B2DRange& rFitTarget )
+ {
+ // calc c for normal line form equation n x - c = 0
+ const double nC( rMoveDirection.scalar( io_rStart ) );
+
+ // calc maximum orthogonal distance for all four bound
+ // rect corners to the line
+ const double nMaxDistance( ::std::max(
+ 0.0,
+ ::std::max(
+ distance(rFitTarget.getMinX(),
+ rFitTarget.getMinY(),
+ rMoveDirection,
+ nC),
+ ::std::max(
+ distance(rFitTarget.getMinX(),
+ rFitTarget.getMaxY(),
+ rMoveDirection,
+ nC),
+ ::std::max(
+ distance(rFitTarget.getMaxX(),
+ rFitTarget.getMinY(),
+ rMoveDirection,
+ nC),
+ distance(rFitTarget.getMaxX(),
+ rFitTarget.getMaxY(),
+ rMoveDirection,
+ nC) ) ) ) ) );
+
+ // now move line points, such that the bound rect
+ // points are all either 'on' or on the negative side
+ // of the half-plane
+ io_rStart += nMaxDistance*rMoveDirection;
+ io_rEnd += nMaxDistance*rMoveDirection;
+ }
+ }
+
+ void infiniteLineFromParallelogram( ::basegfx::B2DPoint& io_rLeftTop,
+ ::basegfx::B2DPoint& io_rLeftBottom,
+ ::basegfx::B2DPoint& io_rRightTop,
+ ::basegfx::B2DPoint& io_rRightBottom,
+ const ::basegfx::B2DRange& rFitTarget )
+ {
+ // For the top and bottom border line of the
+ // parallelogram, we determine the distance to all four
+ // corner points of the bound rect (tl, tr, bl, br). When
+ // using the unit normal form for lines (n x - c = 0), and
+ // choosing n to point 'outwards' the parallelogram, then
+ // all bound rect corner points having positive distance
+ // to the line lie outside the extended gradient rect, and
+ // thus, the corresponding border line must be moved the
+ // maximum distance outwards.
+
+ // don't use the top and bottom border line direction, and
+ // calculate the normal from them. Instead, use the
+ // vertical lines (lt - lb or rt - rb), as they more
+ // faithfully represent the direction of the
+ // to-be-generated infinite line
+ ::basegfx::B2DVector aDirectionVertical( io_rLeftTop - io_rLeftBottom );
+ aDirectionVertical.normalize();
+
+ const ::basegfx::B2DVector aNormalTop( aDirectionVertical );
+ const ::basegfx::B2DVector aNormalBottom( -aDirectionVertical );
+
+ // now extend parallelogram, such that the bound rect
+ // point are included
+ moveLineOutsideRect( io_rLeftTop, io_rRightTop, aNormalTop, rFitTarget );
+ moveLineOutsideRect( io_rLeftBottom, io_rRightBottom, aNormalBottom, rFitTarget );
+ }
+ }
+}
diff --git a/basegfx/source/tools/unopolypolygon.cxx b/basegfx/source/tools/unopolypolygon.cxx
new file mode 100755
index 000000000000..871fed7c7d18
--- /dev/null
+++ b/basegfx/source/tools/unopolypolygon.cxx
@@ -0,0 +1,486 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basegfx.hxx"
+
+#include <com/sun/star/geometry/AffineMatrix2D.hpp>
+#include <com/sun/star/rendering/RenderState.hpp>
+#include <com/sun/star/rendering/ViewState.hpp>
+#include <com/sun/star/rendering/XCanvas.hpp>
+#include <com/sun/star/rendering/CompositeOperation.hpp>
+
+#include <basegfx/matrix/b2dhommatrix.hxx>
+#include <basegfx/range/b2drange.hxx>
+#include <basegfx/range/b2drectangle.hxx>
+#include <basegfx/point/b2dpoint.hxx>
+#include <basegfx/tools/canvastools.hxx>
+#include <basegfx/polygon/b2dpolygon.hxx>
+#include <basegfx/polygon/b2dpolypolygontools.hxx>
+#include <basegfx/tools/unopolypolygon.hxx>
+#include <basegfx/matrix/b2dhommatrixtools.hxx>
+
+
+using namespace ::com::sun::star;
+
+namespace basegfx
+{
+namespace unotools
+{
+ UnoPolyPolygon::UnoPolyPolygon( const B2DPolyPolygon& rPolyPoly ) :
+ UnoPolyPolygonBase( m_aMutex ),
+ maPolyPoly( rPolyPoly ),
+ meFillRule( rendering::FillRule_EVEN_ODD )
+ {
+ // or else races will haunt us.
+ maPolyPoly.makeUnique();
+ }
+
+ void SAL_CALL UnoPolyPolygon::addPolyPolygon(
+ const geometry::RealPoint2D& position,
+ const uno::Reference< rendering::XPolyPolygon2D >& polyPolygon ) throw (lang::IllegalArgumentException,uno::RuntimeException)
+ {
+ osl::MutexGuard const guard( m_aMutex );
+ modifying();
+
+ // TODO(F1): Correctly fulfill the UNO API
+ // specification. This will probably result in a vector of
+ // poly-polygons to be stored in this object.
+
+ const sal_Int32 nPolys( polyPolygon->getNumberOfPolygons() );
+
+ if( !polyPolygon.is() || !nPolys )
+ {
+ // invalid or empty polygon - nothing to do.
+ return;
+ }
+
+ B2DPolyPolygon aSrcPoly;
+ const UnoPolyPolygon* pSrc( dynamic_cast< UnoPolyPolygon* >(polyPolygon.get()) );
+
+ // try to extract polygon data from interface. First,
+ // check whether it's the same implementation object,
+ // which we can tunnel then.
+ if( pSrc )
+ {
+ aSrcPoly = pSrc->getPolyPolygon();
+ }
+ else
+ {
+ // not a known implementation object - try data source
+ // interfaces
+ uno::Reference< rendering::XBezierPolyPolygon2D > xBezierPoly(
+ polyPolygon,
+ uno::UNO_QUERY );
+
+ if( xBezierPoly.is() )
+ {
+ aSrcPoly = unotools::polyPolygonFromBezier2DSequenceSequence(
+ xBezierPoly->getBezierSegments( 0,
+ nPolys,
+ 0,
+ -1 ) );
+ }
+ else
+ {
+ uno::Reference< rendering::XLinePolyPolygon2D > xLinePoly(
+ polyPolygon,
+ uno::UNO_QUERY );
+
+ // no implementation class and no data provider
+ // found - contract violation.
+ if( !xLinePoly.is() )
+ throw lang::IllegalArgumentException(
+ ::rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "UnoPolyPolygon::addPolyPolygon(): Invalid input "
+ "poly-polygon, cannot retrieve vertex data")),
+ static_cast<cppu::OWeakObject*>(this), 1);
+
+ aSrcPoly = unotools::polyPolygonFromPoint2DSequenceSequence(
+ xLinePoly->getPoints( 0,
+ nPolys,
+ 0,
+ -1 ) );
+ }
+ }
+
+ const B2DRange aBounds( tools::getRange( aSrcPoly ) );
+ const B2DVector aOffset( unotools::b2DPointFromRealPoint2D( position ) -
+ aBounds.getMinimum() );
+
+ if( !aOffset.equalZero() )
+ {
+ const B2DHomMatrix aTranslate(tools::createTranslateB2DHomMatrix(aOffset));
+ aSrcPoly.transform( aTranslate );
+ }
+
+ maPolyPoly.append( aSrcPoly );
+ }
+
+ sal_Int32 SAL_CALL UnoPolyPolygon::getNumberOfPolygons() throw (uno::RuntimeException)
+ {
+ osl::MutexGuard const guard( m_aMutex );
+ return maPolyPoly.count();
+ }
+
+ sal_Int32 SAL_CALL UnoPolyPolygon::getNumberOfPolygonPoints(
+ sal_Int32 polygon ) throw (lang::IndexOutOfBoundsException,uno::RuntimeException)
+ {
+ osl::MutexGuard const guard( m_aMutex );
+ checkIndex( polygon );
+
+ return maPolyPoly.getB2DPolygon(polygon).count();
+ }
+
+ rendering::FillRule SAL_CALL UnoPolyPolygon::getFillRule() throw (uno::RuntimeException)
+ {
+ osl::MutexGuard const guard( m_aMutex );
+ return meFillRule;
+ }
+
+ void SAL_CALL UnoPolyPolygon::setFillRule(
+ rendering::FillRule fillRule ) throw (uno::RuntimeException)
+ {
+ osl::MutexGuard const guard( m_aMutex );
+ modifying();
+
+ meFillRule = fillRule;
+ }
+
+ sal_Bool SAL_CALL UnoPolyPolygon::isClosed(
+ sal_Int32 index ) throw (lang::IndexOutOfBoundsException,uno::RuntimeException)
+ {
+ osl::MutexGuard const guard( m_aMutex );
+ checkIndex( index );
+
+ return maPolyPoly.getB2DPolygon(index).isClosed();
+ }
+
+ void SAL_CALL UnoPolyPolygon::setClosed(
+ sal_Int32 index,
+ sal_Bool closedState ) throw (lang::IndexOutOfBoundsException,uno::RuntimeException)
+ {
+ osl::MutexGuard const guard( m_aMutex );
+ modifying();
+
+ if( index == -1L )
+ {
+ // set all
+ maPolyPoly.setClosed( closedState );
+ }
+ else
+ {
+ checkIndex( index );
+
+ // fetch referenced polygon, change state
+ B2DPolygon aTmp( maPolyPoly.getB2DPolygon(index) );
+ aTmp.setClosed( closedState );
+
+ // set back to container
+ maPolyPoly.setB2DPolygon( index, aTmp );
+ }
+ }
+
+ uno::Sequence< uno::Sequence< geometry::RealPoint2D > > SAL_CALL UnoPolyPolygon::getPoints(
+ sal_Int32 nPolygonIndex,
+ sal_Int32 nNumberOfPolygons,
+ sal_Int32 nPointIndex,
+ sal_Int32 nNumberOfPoints ) throw (lang::IndexOutOfBoundsException,uno::RuntimeException)
+ {
+ osl::MutexGuard const guard( m_aMutex );
+
+ return unotools::pointSequenceSequenceFromB2DPolyPolygon(
+ getSubsetPolyPolygon( nPolygonIndex,
+ nNumberOfPolygons,
+ nPointIndex,
+ nNumberOfPoints ) );
+ }
+
+ void SAL_CALL UnoPolyPolygon::setPoints(
+ const uno::Sequence< uno::Sequence< geometry::RealPoint2D > >& points,
+ sal_Int32 nPolygonIndex ) throw (lang::IndexOutOfBoundsException,uno::RuntimeException)
+ {
+ osl::MutexGuard const guard( m_aMutex );
+ modifying();
+
+ const B2DPolyPolygon& rNewPolyPoly(
+ unotools::polyPolygonFromPoint2DSequenceSequence( points ) );
+
+ if( nPolygonIndex == -1 )
+ {
+ maPolyPoly = rNewPolyPoly;
+ }
+ else
+ {
+ checkIndex( nPolygonIndex );
+
+ maPolyPoly.insert( nPolygonIndex, rNewPolyPoly );
+ }
+ }
+
+ geometry::RealPoint2D SAL_CALL UnoPolyPolygon::getPoint(
+ sal_Int32 nPolygonIndex,
+ sal_Int32 nPointIndex ) throw (lang::IndexOutOfBoundsException,uno::RuntimeException)
+ {
+ osl::MutexGuard const guard( m_aMutex );
+ checkIndex( nPolygonIndex );
+
+ const B2DPolygon& rPoly( maPolyPoly.getB2DPolygon( nPolygonIndex ) );
+
+ if( nPointIndex < 0 || nPointIndex >= static_cast<sal_Int32>(rPoly.count()) )
+ throw lang::IndexOutOfBoundsException();
+
+ return unotools::point2DFromB2DPoint( rPoly.getB2DPoint( nPointIndex ) );
+ }
+
+ void SAL_CALL UnoPolyPolygon::setPoint(
+ const geometry::RealPoint2D& point,
+ sal_Int32 nPolygonIndex,
+ sal_Int32 nPointIndex ) throw (lang::IndexOutOfBoundsException,uno::RuntimeException)
+ {
+ osl::MutexGuard const guard( m_aMutex );
+ checkIndex( nPolygonIndex );
+ modifying();
+
+ B2DPolygon aPoly( maPolyPoly.getB2DPolygon( nPolygonIndex ) );
+
+ if( nPointIndex < 0 || nPointIndex >= static_cast<sal_Int32>(aPoly.count()) )
+ throw lang::IndexOutOfBoundsException();
+
+ aPoly.setB2DPoint( nPointIndex,
+ unotools::b2DPointFromRealPoint2D( point ) );
+ maPolyPoly.setB2DPolygon( nPolygonIndex, aPoly );
+ }
+
+ uno::Sequence< uno::Sequence< geometry::RealBezierSegment2D > > SAL_CALL UnoPolyPolygon::getBezierSegments(
+ sal_Int32 nPolygonIndex,
+ sal_Int32 nNumberOfPolygons,
+ sal_Int32 nPointIndex,
+ sal_Int32 nNumberOfPoints ) throw (lang::IndexOutOfBoundsException, uno::RuntimeException)
+ {
+ osl::MutexGuard const guard( m_aMutex );
+ return unotools::bezierSequenceSequenceFromB2DPolyPolygon(
+ getSubsetPolyPolygon( nPolygonIndex,
+ nNumberOfPolygons,
+ nPointIndex,
+ nNumberOfPoints ) );
+ }
+
+ void SAL_CALL UnoPolyPolygon::setBezierSegments(
+ const uno::Sequence< uno::Sequence< geometry::RealBezierSegment2D > >& points,
+ sal_Int32 nPolygonIndex ) throw (lang::IndexOutOfBoundsException,
+ uno::RuntimeException)
+ {
+ osl::MutexGuard const guard( m_aMutex );
+ modifying();
+ const B2DPolyPolygon& rNewPolyPoly(
+ unotools::polyPolygonFromBezier2DSequenceSequence( points ) );
+
+ if( nPolygonIndex == -1 )
+ {
+ maPolyPoly = rNewPolyPoly;
+ }
+ else
+ {
+ checkIndex( nPolygonIndex );
+
+ maPolyPoly.insert( nPolygonIndex, rNewPolyPoly );
+ }
+ }
+
+ geometry::RealBezierSegment2D SAL_CALL UnoPolyPolygon::getBezierSegment( sal_Int32 nPolygonIndex,
+ sal_Int32 nPointIndex ) throw (lang::IndexOutOfBoundsException,
+ uno::RuntimeException)
+ {
+ osl::MutexGuard const guard( m_aMutex );
+ checkIndex( nPolygonIndex );
+
+ const B2DPolygon& rPoly( maPolyPoly.getB2DPolygon( nPolygonIndex ) );
+ const sal_uInt32 nPointCount(rPoly.count());
+
+ if( nPointIndex < 0 || nPointIndex >= static_cast<sal_Int32>(nPointCount) )
+ throw lang::IndexOutOfBoundsException();
+
+ const B2DPoint& rPt( rPoly.getB2DPoint( nPointIndex ) );
+ const B2DPoint& rCtrl0( rPoly.getNextControlPoint(nPointIndex) );
+ const B2DPoint& rCtrl1( rPoly.getPrevControlPoint((nPointIndex + 1) % nPointCount) );
+
+ return geometry::RealBezierSegment2D( rPt.getX(),
+ rPt.getY(),
+ rCtrl0.getX(),
+ rCtrl0.getY(),
+ rCtrl1.getX(),
+ rCtrl1.getY() );
+ }
+
+ void SAL_CALL UnoPolyPolygon::setBezierSegment( const geometry::RealBezierSegment2D& segment,
+ sal_Int32 nPolygonIndex,
+ sal_Int32 nPointIndex ) throw (lang::IndexOutOfBoundsException,
+ uno::RuntimeException)
+ {
+ osl::MutexGuard const guard( m_aMutex );
+ checkIndex( nPolygonIndex );
+ modifying();
+
+ B2DPolygon aPoly( maPolyPoly.getB2DPolygon( nPolygonIndex ) );
+ const sal_uInt32 nPointCount(aPoly.count());
+
+ if( nPointIndex < 0 || nPointIndex >= static_cast<sal_Int32>(nPointCount) )
+ throw lang::IndexOutOfBoundsException();
+
+ aPoly.setB2DPoint( nPointIndex,
+ B2DPoint( segment.Px,
+ segment.Py ) );
+ aPoly.setNextControlPoint(nPointIndex,
+ B2DPoint(segment.C1x, segment.C1y));
+ aPoly.setPrevControlPoint((nPointIndex + 1) % nPointCount,
+ B2DPoint(segment.C2x, segment.C2y));
+
+ maPolyPoly.setB2DPolygon( nPolygonIndex, aPoly );
+ }
+
+ B2DPolyPolygon UnoPolyPolygon::getSubsetPolyPolygon(
+ sal_Int32 nPolygonIndex,
+ sal_Int32 nNumberOfPolygons,
+ sal_Int32 nPointIndex,
+ sal_Int32 nNumberOfPoints ) const
+ {
+ osl::MutexGuard const guard( m_aMutex );
+ checkIndex( nPolygonIndex );
+
+ const sal_Int32 nPolyCount( maPolyPoly.count() );
+
+ // check for "full polygon" case
+ if( !nPolygonIndex &&
+ !nPointIndex &&
+ nNumberOfPolygons == nPolyCount &&
+ nNumberOfPoints == -1 )
+ {
+ return maPolyPoly;
+ }
+
+ B2DPolyPolygon aSubsetPoly;
+
+ // create temporary polygon (as an extract from maPoly,
+ // which contains the requested subset)
+ for( sal_Int32 i=nPolygonIndex; i<nNumberOfPolygons; ++i )
+ {
+ checkIndex(i);
+
+ const B2DPolygon& rCurrPoly( maPolyPoly.getB2DPolygon(i) );
+
+ sal_Int32 nFirstPoint(0);
+ sal_Int32 nLastPoint(nPolyCount-1);
+
+ if( nPointIndex && i==nPolygonIndex )
+ {
+ // very first polygon - respect nPointIndex, if
+ // not zero
+
+ // empty polygon - impossible to specify _any_
+ // legal value except 0 here!
+ if( !nPolyCount && nPointIndex )
+ throw lang::IndexOutOfBoundsException();
+
+ nFirstPoint = nPointIndex;
+ }
+
+ if( i==nNumberOfPolygons-1 && nNumberOfPoints != -1 )
+ {
+ // very last polygon - respect nNumberOfPoints
+
+ // empty polygon - impossible to specify _any_
+ // legal value except -1 here!
+ if( !nPolyCount )
+ throw lang::IndexOutOfBoundsException();
+
+ nLastPoint = nFirstPoint+nNumberOfPoints;
+ }
+
+ if( !nPolyCount )
+ {
+ // empty polygon - index checks already performed
+ // above, now simply append empty polygon
+ aSubsetPoly.append( rCurrPoly );
+ }
+ else
+ {
+ if( nFirstPoint < 0 || nFirstPoint >= nPolyCount )
+ throw lang::IndexOutOfBoundsException();
+
+ if( nLastPoint < 0 || nLastPoint >= nPolyCount )
+ throw lang::IndexOutOfBoundsException();
+
+ B2DPolygon aTmp;
+ for( sal_Int32 j=nFirstPoint; j<nLastPoint; ++j )
+ aTmp.append( rCurrPoly.getB2DPoint(j) );
+
+ aSubsetPoly.append( aTmp );
+ }
+ }
+
+ return aSubsetPoly;
+ }
+
+ B2DPolyPolygon UnoPolyPolygon::getPolyPolygonUnsafe() const
+ {
+ return maPolyPoly;
+ }
+
+#define IMPLEMENTATION_NAME "gfx::internal::UnoPolyPolygon"
+#define SERVICE_NAME "com.sun.star.rendering.PolyPolygon2D"
+ ::rtl::OUString SAL_CALL UnoPolyPolygon::getImplementationName() throw( uno::RuntimeException )
+ {
+ return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( IMPLEMENTATION_NAME ) );
+ }
+
+ sal_Bool SAL_CALL UnoPolyPolygon::supportsService( const ::rtl::OUString& ServiceName ) throw( uno::RuntimeException )
+ {
+ return ServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM ( SERVICE_NAME ) );
+ }
+
+ uno::Sequence< ::rtl::OUString > SAL_CALL UnoPolyPolygon::getSupportedServiceNames() throw( uno::RuntimeException )
+ {
+ uno::Sequence< ::rtl::OUString > aRet(1);
+ aRet[0] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( SERVICE_NAME ) );
+
+ return aRet;
+ }
+
+ B2DPolyPolygon UnoPolyPolygon::getPolyPolygon() const
+ {
+ osl::MutexGuard const guard( m_aMutex );
+
+ // detach result from us
+ B2DPolyPolygon aRet( maPolyPoly );
+ aRet.makeUnique();
+ return aRet;
+ }
+
+}
+}
diff --git a/basegfx/source/tuple/b2dtuple.cxx b/basegfx/source/tuple/b2dtuple.cxx
new file mode 100644
index 000000000000..01a3bf145d7e
--- /dev/null
+++ b/basegfx/source/tuple/b2dtuple.cxx
@@ -0,0 +1,84 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basegfx.hxx"
+#include <basegfx/tuple/b2dtuple.hxx>
+#include <basegfx/numeric/ftools.hxx>
+#include <rtl/instance.hxx>
+
+namespace { struct EmptyTuple : public rtl::Static<basegfx::B2DTuple, EmptyTuple> {}; }
+#include <basegfx/tuple/b2ituple.hxx>
+
+namespace basegfx
+{
+ const B2DTuple& B2DTuple::getEmptyTuple()
+ {
+ return EmptyTuple::get();
+ }
+
+ B2DTuple::B2DTuple(const B2ITuple& rTup)
+ : mfX( rTup.getX() ),
+ mfY( rTup.getY() )
+ {}
+
+ void B2DTuple::correctValues(const double fCompareValue)
+ {
+ if(0.0 == fCompareValue)
+ {
+ if(::basegfx::fTools::equalZero(mfX))
+ {
+ mfX = 0.0;
+ }
+
+ if(::basegfx::fTools::equalZero(mfY))
+ {
+ mfY = 0.0;
+ }
+ }
+ else
+ {
+ if(::basegfx::fTools::equal(mfX, fCompareValue))
+ {
+ mfX = fCompareValue;
+ }
+
+ if(::basegfx::fTools::equal(mfY, fCompareValue))
+ {
+ mfY = fCompareValue;
+ }
+ }
+ }
+
+ B2ITuple fround(const B2DTuple& rTup)
+ {
+ return B2ITuple(fround(rTup.getX()), fround(rTup.getY()));
+ }
+
+} // end of namespace basegfx
+
+// eof
diff --git a/basegfx/source/tuple/b2i64tuple.cxx b/basegfx/source/tuple/b2i64tuple.cxx
new file mode 100644
index 000000000000..3457fc138dd1
--- /dev/null
+++ b/basegfx/source/tuple/b2i64tuple.cxx
@@ -0,0 +1,44 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basegfx.hxx"
+#include <basegfx/tuple/b2i64tuple.hxx>
+#include <rtl/instance.hxx>
+
+namespace { struct EmptyTuple : public rtl::Static<basegfx::B2I64Tuple, EmptyTuple> {}; }
+
+namespace basegfx
+{
+ const B2I64Tuple& B2I64Tuple::getEmptyTuple()
+ {
+ return EmptyTuple::get();
+ }
+
+} // end of namespace basegfx
+
+// eof
diff --git a/basegfx/source/tuple/b2ituple.cxx b/basegfx/source/tuple/b2ituple.cxx
new file mode 100644
index 000000000000..eb9888f11ecb
--- /dev/null
+++ b/basegfx/source/tuple/b2ituple.cxx
@@ -0,0 +1,153 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basegfx.hxx"
+#include <basegfx/tuple/b2ituple.hxx>
+#include <basegfx/tuple/b2dtuple.hxx>
+#include <rtl/instance.hxx>
+
+namespace { struct EmptyTuple : public rtl::Static<basegfx::B2ITuple, EmptyTuple> {}; }
+
+namespace basegfx
+{
+ const B2ITuple& B2ITuple::getEmptyTuple()
+ {
+ return EmptyTuple::get();
+ }
+
+ // external operators
+ //////////////////////////////////////////////////////////////////////////
+
+ B2ITuple minimum(const B2ITuple& rTupA, const B2ITuple& rTupB)
+ {
+ B2ITuple aMin(
+ (rTupB.getX() < rTupA.getX()) ? rTupB.getX() : rTupA.getX(),
+ (rTupB.getY() < rTupA.getY()) ? rTupB.getY() : rTupA.getY());
+ return aMin;
+ }
+
+ B2ITuple maximum(const B2ITuple& rTupA, const B2ITuple& rTupB)
+ {
+ B2ITuple aMax(
+ (rTupB.getX() > rTupA.getX()) ? rTupB.getX() : rTupA.getX(),
+ (rTupB.getY() > rTupA.getY()) ? rTupB.getY() : rTupA.getY());
+ return aMax;
+ }
+
+ B2ITuple absolute(const B2ITuple& rTup)
+ {
+ B2ITuple aAbs(
+ (0 > rTup.getX()) ? -rTup.getX() : rTup.getX(),
+ (0 > rTup.getY()) ? -rTup.getY() : rTup.getY());
+ return aAbs;
+ }
+
+ B2DTuple interpolate(const B2ITuple& rOld1, const B2ITuple& rOld2, double t)
+ {
+ B2DTuple aInt(
+ ((rOld2.getX() - rOld1.getX()) * t) + rOld1.getX(),
+ ((rOld2.getY() - rOld1.getY()) * t) + rOld1.getY());
+ return aInt;
+ }
+
+ B2DTuple average(const B2ITuple& rOld1, const B2ITuple& rOld2)
+ {
+ B2DTuple aAvg(
+ (rOld1.getX() + rOld2.getX()) * 0.5,
+ (rOld1.getY() + rOld2.getY()) * 0.5);
+ return aAvg;
+ }
+
+ B2DTuple average(const B2ITuple& rOld1, const B2ITuple& rOld2, const B2ITuple& rOld3)
+ {
+ B2DTuple aAvg(
+ (rOld1.getX() + rOld2.getX() + rOld3.getX()) * (1.0 / 3.0),
+ (rOld1.getY() + rOld2.getY() + rOld3.getY()) * (1.0 / 3.0));
+ return aAvg;
+ }
+
+ B2ITuple operator+(const B2ITuple& rTupA, const B2ITuple& rTupB)
+ {
+ B2ITuple aSum(rTupA);
+ aSum += rTupB;
+ return aSum;
+ }
+
+ B2ITuple operator-(const B2ITuple& rTupA, const B2ITuple& rTupB)
+ {
+ B2ITuple aSub(rTupA);
+ aSub -= rTupB;
+ return aSub;
+ }
+
+ B2ITuple operator/(const B2ITuple& rTupA, const B2ITuple& rTupB)
+ {
+ B2ITuple aDiv(rTupA);
+ aDiv /= rTupB;
+ return aDiv;
+ }
+
+ B2ITuple operator*(const B2ITuple& rTupA, const B2ITuple& rTupB)
+ {
+ B2ITuple aMul(rTupA);
+ aMul *= rTupB;
+ return aMul;
+ }
+
+ B2ITuple operator*(const B2ITuple& rTup, sal_Int32 t)
+ {
+ B2ITuple aNew(rTup);
+ aNew *= t;
+ return aNew;
+ }
+
+ B2ITuple operator*(sal_Int32 t, const B2ITuple& rTup)
+ {
+ B2ITuple aNew(rTup);
+ aNew *= t;
+ return aNew;
+ }
+
+ B2ITuple operator/(const B2ITuple& rTup, sal_Int32 t)
+ {
+ B2ITuple aNew(rTup);
+ aNew /= t;
+ return aNew;
+ }
+
+ B2ITuple operator/(sal_Int32 t, const B2ITuple& rTup)
+ {
+ B2ITuple aNew(t, t);
+ B2ITuple aTmp(rTup);
+ aNew /= aTmp;
+ return aNew;
+ }
+
+} // end of namespace basegfx
+
+// eof
diff --git a/basegfx/source/tuple/b3dtuple.cxx b/basegfx/source/tuple/b3dtuple.cxx
new file mode 100644
index 000000000000..d9204154b192
--- /dev/null
+++ b/basegfx/source/tuple/b3dtuple.cxx
@@ -0,0 +1,55 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basegfx.hxx"
+#include <basegfx/tuple/b3dtuple.hxx>
+#include <rtl/instance.hxx>
+
+namespace { struct EmptyTuple : public rtl::Static<basegfx::B3DTuple, EmptyTuple> {}; }
+#include <basegfx/tuple/b3ituple.hxx>
+
+namespace basegfx
+{
+ const B3DTuple& B3DTuple::getEmptyTuple()
+ {
+ return EmptyTuple::get();
+ }
+
+ B3DTuple::B3DTuple(const B3ITuple& rTup)
+ : mfX( rTup.getX() ),
+ mfY( rTup.getY() ),
+ mfZ( rTup.getZ() )
+ {}
+
+ B3ITuple fround(const B3DTuple& rTup)
+ {
+ return B3ITuple(fround(rTup.getX()), fround(rTup.getY()), fround(rTup.getZ()));
+ }
+} // end of namespace basegfx
+
+// eof
diff --git a/basegfx/source/tuple/b3i64tuple.cxx b/basegfx/source/tuple/b3i64tuple.cxx
new file mode 100644
index 000000000000..ce2094568bb8
--- /dev/null
+++ b/basegfx/source/tuple/b3i64tuple.cxx
@@ -0,0 +1,43 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basegfx.hxx"
+#include <basegfx/tuple/b3i64tuple.hxx>
+#include <rtl/instance.hxx>
+
+namespace { struct EmptyTuple : public rtl::Static<basegfx::B3I64Tuple, EmptyTuple> {}; }
+
+namespace basegfx
+{
+ const B3I64Tuple& B3I64Tuple::getEmptyTuple()
+ {
+ return EmptyTuple::get();
+ }
+} // end of namespace basegfx
+
+// eof
diff --git a/basegfx/source/tuple/b3ituple.cxx b/basegfx/source/tuple/b3ituple.cxx
new file mode 100644
index 000000000000..014e8876588c
--- /dev/null
+++ b/basegfx/source/tuple/b3ituple.cxx
@@ -0,0 +1,43 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basegfx.hxx"
+#include <basegfx/tuple/b3ituple.hxx>
+#include <rtl/instance.hxx>
+
+namespace { struct EmptyTuple : public rtl::Static<basegfx::B3ITuple, EmptyTuple> {}; }
+
+namespace basegfx
+{
+ const B3ITuple& B3ITuple::getEmptyTuple()
+ {
+ return EmptyTuple::get();
+ }
+} // end of namespace basegfx
+
+// eof
diff --git a/basegfx/source/tuple/makefile.mk b/basegfx/source/tuple/makefile.mk
new file mode 100644
index 000000000000..01a4c6de2d3c
--- /dev/null
+++ b/basegfx/source/tuple/makefile.mk
@@ -0,0 +1,52 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..$/..
+PRJNAME=basegfx
+TARGET=tuple
+
+#UNOUCRRDB=$(SOLARBINDIR)$/applicat.rdb
+#ENABLE_EXCEPTIONS=FALSE
+#USE_DEFFILE=TRUE
+
+# --- Settings ----------------------------------
+
+.INCLUDE : settings.mk
+
+# --- Files -------------------------------------
+
+SLOFILES= \
+ $(SLO)$/b2dtuple.obj \
+ $(SLO)$/b3dtuple.obj \
+ $(SLO)$/b2ituple.obj \
+ $(SLO)$/b3ituple.obj \
+ $(SLO)$/b2i64tuple.obj \
+ $(SLO)$/b3i64tuple.obj
+
+# --- Targets ----------------------------------
+
+.INCLUDE : target.mk
diff --git a/basegfx/source/vector/b2dvector.cxx b/basegfx/source/vector/b2dvector.cxx
new file mode 100644
index 000000000000..bb08b104eff8
--- /dev/null
+++ b/basegfx/source/vector/b2dvector.cxx
@@ -0,0 +1,219 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basegfx.hxx"
+#include <basegfx/vector/b2dvector.hxx>
+#include <basegfx/matrix/b2dhommatrix.hxx>
+#include <basegfx/numeric/ftools.hxx>
+
+namespace basegfx
+{
+ B2DVector& B2DVector::normalize()
+ {
+ double fLen(scalar(*this));
+
+ if(fTools::equalZero(fLen))
+ {
+ mfX = 0.0;
+ mfY = 0.0;
+ }
+ else
+ {
+ const double fOne(1.0);
+
+ if(!fTools::equal(fOne, fLen))
+ {
+ fLen = sqrt(fLen);
+
+ if(!fTools::equalZero(fLen))
+ {
+ mfX /= fLen;
+ mfY /= fLen;
+ }
+ }
+ }
+
+ return *this;
+ }
+
+ B2DVector& B2DVector::operator=( const B2DTuple& rVec )
+ {
+ mfX = rVec.getX();
+ mfY = rVec.getY();
+ return *this;
+ }
+
+
+ double B2DVector::getLength() const
+ {
+ if(fTools::equalZero(mfX))
+ {
+ return fabs(mfY);
+ }
+ else if(fTools::equalZero(mfY))
+ {
+ return fabs(mfX);
+ }
+
+ return hypot( mfX, mfY );
+ }
+
+ double B2DVector::scalar( const B2DVector& rVec ) const
+ {
+ return((mfX * rVec.mfX) + (mfY * rVec.mfY));
+ }
+
+ double B2DVector::cross( const B2DVector& rVec ) const
+ {
+ return(mfX * rVec.getY() - mfY * rVec.getX());
+ }
+
+ double B2DVector::angle( const B2DVector& rVec ) const
+ {
+ return atan2(mfX * rVec.getY() - mfY * rVec.getX(),
+ mfX * rVec.getX() + mfY * rVec.getY());
+ }
+
+ const B2DVector& B2DVector::getEmptyVector()
+ {
+ return (const B2DVector&) B2DTuple::getEmptyTuple();
+ }
+
+ B2DVector& B2DVector::operator*=( const B2DHomMatrix& rMat )
+ {
+ const double fTempX( rMat.get(0,0)*mfX +
+ rMat.get(0,1)*mfY );
+ const double fTempY( rMat.get(1,0)*mfX +
+ rMat.get(1,1)*mfY );
+ mfX = fTempX;
+ mfY = fTempY;
+
+ return *this;
+ }
+
+ B2DVector& B2DVector::setLength(double fLen)
+ {
+ double fLenNow(scalar(*this));
+
+ if(!fTools::equalZero(fLenNow))
+ {
+ const double fOne(10.0);
+
+ if(!fTools::equal(fOne, fLenNow))
+ {
+ fLen /= sqrt(fLenNow);
+ }
+
+ mfX *= fLen;
+ mfY *= fLen;
+ }
+
+ return *this;
+ }
+
+ bool B2DVector::isNormalized() const
+ {
+ const double fOne(1.0);
+ const double fScalar(scalar(*this));
+
+ return fTools::equal(fOne, fScalar);
+ }
+
+ bool areParallel( const B2DVector& rVecA, const B2DVector& rVecB )
+ {
+ const double fValA(rVecA.getX() * rVecB.getY());
+ const double fValB(rVecA.getY() * rVecB.getX());
+
+ return fTools::equal(fValA, fValB);
+ }
+
+ B2VectorOrientation getOrientation( const B2DVector& rVecA, const B2DVector& rVecB )
+ {
+ double fVal(rVecA.getX() * rVecB.getY() - rVecA.getY() * rVecB.getX());
+
+ if(fTools::equalZero(fVal))
+ {
+ return ORIENTATION_NEUTRAL;
+ }
+
+ if(fVal > 0.0)
+ {
+ return ORIENTATION_POSITIVE;
+ }
+ else
+ {
+ return ORIENTATION_NEGATIVE;
+ }
+ }
+
+ B2DVector getPerpendicular( const B2DVector& rNormalizedVec )
+ {
+ B2DVector aPerpendicular(-rNormalizedVec.getY(), rNormalizedVec.getX());
+ return aPerpendicular;
+ }
+
+ B2DVector getNormalizedPerpendicular( const B2DVector& rVec )
+ {
+ B2DVector aPerpendicular(rVec);
+ aPerpendicular.normalize();
+ const double aTemp(-aPerpendicular.getY());
+ aPerpendicular.setY(aPerpendicular.getX());
+ aPerpendicular.setX(aTemp);
+ return aPerpendicular;
+ }
+
+ B2DVector operator*( const B2DHomMatrix& rMat, const B2DVector& rVec )
+ {
+ B2DVector aRes( rVec );
+ return aRes*=rMat;
+ }
+
+ B2VectorContinuity getContinuity(const B2DVector& rBackVector, const B2DVector& rForwardVector )
+ {
+ if(rBackVector.equalZero() || rForwardVector.equalZero())
+ {
+ return CONTINUITY_NONE;
+ }
+
+ if(fTools::equal(rBackVector.getX(), -rForwardVector.getX()) && fTools::equal(rBackVector.getY(), -rForwardVector.getY()))
+ {
+ // same direction and same length -> C2
+ return CONTINUITY_C2;
+ }
+
+ if(areParallel(rBackVector, rForwardVector) && rBackVector.scalar(rForwardVector) < 0.0)
+ {
+ // parallel and opposite direction -> C1
+ return CONTINUITY_C1;
+ }
+
+ return CONTINUITY_NONE;
+ }
+} // end of namespace basegfx
+
+// eof
diff --git a/basegfx/source/vector/b2ivector.cxx b/basegfx/source/vector/b2ivector.cxx
new file mode 100644
index 000000000000..026a600c0c94
--- /dev/null
+++ b/basegfx/source/vector/b2ivector.cxx
@@ -0,0 +1,159 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basegfx.hxx"
+#include <basegfx/vector/b2ivector.hxx>
+#include <basegfx/matrix/b2dhommatrix.hxx>
+#include <basegfx/numeric/ftools.hxx>
+
+namespace basegfx
+{
+ B2IVector& B2IVector::operator=( const ::basegfx::B2ITuple& rVec )
+ {
+ mnX = rVec.getX();
+ mnY = rVec.getY();
+ return *this;
+ }
+
+
+ double B2IVector::getLength() const
+ {
+ return hypot( mnX, mnY );
+ }
+
+ double B2IVector::scalar( const B2IVector& rVec ) const
+ {
+ return((mnX * rVec.mnX) + (mnY * rVec.mnY));
+ }
+
+ double B2IVector::cross( const B2IVector& rVec ) const
+ {
+ return(mnX * rVec.getY() - mnY * rVec.getX());
+ }
+
+ double B2IVector::angle( const B2IVector& rVec ) const
+ {
+ return atan2(double( mnX * rVec.getY() - mnY * rVec.getX()),
+ double( mnX * rVec.getX() + mnY * rVec.getY()));
+ }
+
+ const B2IVector& B2IVector::getEmptyVector()
+ {
+ return (const B2IVector&) ::basegfx::B2ITuple::getEmptyTuple();
+ }
+
+ B2IVector& B2IVector::operator*=( const B2DHomMatrix& rMat )
+ {
+ mnX = fround( rMat.get(0,0)*mnX +
+ rMat.get(0,1)*mnY );
+ mnY = fround( rMat.get(1,0)*mnX +
+ rMat.get(1,1)*mnY );
+
+ return *this;
+ }
+
+ B2IVector& B2IVector::setLength(double fLen)
+ {
+ double fLenNow(scalar(*this));
+
+ if(!::basegfx::fTools::equalZero(fLenNow))
+ {
+ const double fOne(10.0);
+
+ if(!::basegfx::fTools::equal(fOne, fLenNow))
+ {
+ fLen /= sqrt(fLenNow);
+ }
+
+ mnX = fround( mnX*fLen );
+ mnY = fround( mnY*fLen );
+ }
+
+ return *this;
+ }
+
+ bool areParallel( const B2IVector& rVecA, const B2IVector& rVecB )
+ {
+ double fVal(rVecA.getX() * rVecB.getY() - rVecA.getY() * rVecB.getX());
+ return ::basegfx::fTools::equalZero(fVal);
+ }
+
+ B2VectorOrientation getOrientation( const B2IVector& rVecA, const B2IVector& rVecB )
+ {
+ double fVal(rVecA.getX() * rVecB.getY() - rVecA.getY() * rVecB.getX());
+
+ if(fVal > 0.0)
+ {
+ return ORIENTATION_POSITIVE;
+ }
+
+ if(fVal < 0.0)
+ {
+ return ORIENTATION_NEGATIVE;
+ }
+
+ return ORIENTATION_NEUTRAL;
+ }
+
+ B2IVector getPerpendicular( const B2IVector& rNormalizedVec )
+ {
+ B2IVector aPerpendicular(-rNormalizedVec.getY(), rNormalizedVec.getX());
+ return aPerpendicular;
+ }
+
+ B2IVector operator*( const B2DHomMatrix& rMat, const B2IVector& rVec )
+ {
+ B2IVector aRes( rVec );
+ return aRes*=rMat;
+ }
+
+ B2VectorContinuity getContinuity(const B2IVector& rBackVector, const B2IVector& rForwardVector )
+ {
+ B2VectorContinuity eRetval(CONTINUITY_NONE);
+
+ if(!rBackVector.equalZero() && !rForwardVector.equalZero())
+ {
+ const B2IVector aInverseForwardVector(-rForwardVector.getX(), -rForwardVector.getY());
+
+ if(rBackVector == aInverseForwardVector)
+ {
+ // same direction and same length -> C2
+ eRetval = CONTINUITY_C2;
+ }
+ else if(areParallel(rBackVector, aInverseForwardVector))
+ {
+ // same direction -> C1
+ eRetval = CONTINUITY_C1;
+ }
+ }
+
+ return eRetval;
+ }
+} // end of namespace basegfx
+
+// eof
diff --git a/basegfx/source/vector/b3dvector.cxx b/basegfx/source/vector/b3dvector.cxx
new file mode 100644
index 000000000000..74e4eb07eb33
--- /dev/null
+++ b/basegfx/source/vector/b3dvector.cxx
@@ -0,0 +1,115 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basegfx.hxx"
+#include <basegfx/vector/b3dvector.hxx>
+#include <basegfx/matrix/b3dhommatrix.hxx>
+
+//////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+ B3DVector& B3DVector::normalize()
+ {
+ double fLen(scalar(*this));
+
+ if(!::basegfx::fTools::equalZero(fLen))
+ {
+ const double fOne(1.0);
+
+ if(!::basegfx::fTools::equal(fOne, fLen))
+ {
+ fLen = sqrt(fLen);
+
+ if(!::basegfx::fTools::equalZero(fLen))
+ {
+ mfX /= fLen;
+ mfY /= fLen;
+ mfZ /= fLen;
+ }
+ }
+ }
+
+ return *this;
+ }
+
+ B3DVector B3DVector::getPerpendicular(const B3DVector& rNormalizedVec) const
+ {
+ B3DVector aNew(*this);
+ aNew = cross(aNew, rNormalizedVec);
+ aNew.normalize();
+ return aNew;
+ }
+
+ B3DVector B3DVector::getProjectionOnPlane(const B3DVector& rNormalizedPlane) const
+ {
+ B3DVector aNew(*this);
+ aNew = cross(aNew, rNormalizedPlane);
+ aNew = cross(aNew, rNormalizedPlane);
+
+ aNew.mfX = mfX - aNew.mfX;
+ aNew.mfY = mfY - aNew.mfY;
+ aNew.mfZ = mfZ - aNew.mfZ;
+
+ return aNew;
+ }
+
+ B3DVector& B3DVector::operator*=( const ::basegfx::B3DHomMatrix& rMat )
+ {
+ const double fTempX( rMat.get(0,0)*mfX + rMat.get(0,1)*mfY + rMat.get(0,2)*mfZ );
+ const double fTempY( rMat.get(1,0)*mfX + rMat.get(1,1)*mfY + rMat.get(1,2)*mfZ );
+ const double fTempZ( rMat.get(2,0)*mfX + rMat.get(2,1)*mfY + rMat.get(2,2)*mfZ );
+ mfX = fTempX;
+ mfY = fTempY;
+ mfZ = fTempZ;
+
+ return *this;
+ }
+
+ B3DVector operator*( const ::basegfx::B3DHomMatrix& rMat, const B3DVector& rVec )
+ {
+ B3DVector aRes( rVec );
+ return aRes*=rMat;
+ }
+
+ bool areParallel( const B3DVector& rVecA, const B3DVector& rVecB )
+ {
+ // i think fastest is to compare relations, need no square or division
+ if(!fTools::equal(rVecA.getX() * rVecB.getY(), rVecA.getY() * rVecB.getX()))
+ return false;
+
+ if(!fTools::equal(rVecA.getX() * rVecB.getZ(), rVecA.getZ() * rVecB.getX()))
+ return false;
+
+ return (fTools::equal(rVecA.getY() * rVecB.getZ(), rVecA.getZ() * rVecB.getY()));
+ }
+
+} // end of namespace basegfx
+
+//////////////////////////////////////////////////////////////////////////////
+// eof
diff --git a/basegfx/source/vector/b3ivector.cxx b/basegfx/source/vector/b3ivector.cxx
new file mode 100644
index 000000000000..a11871ef1b19
--- /dev/null
+++ b/basegfx/source/vector/b3ivector.cxx
@@ -0,0 +1,51 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basegfx.hxx"
+#include <basegfx/vector/b3ivector.hxx>
+#include <basegfx/matrix/b3dhommatrix.hxx>
+
+namespace basegfx
+{
+ B3IVector& B3IVector::operator*=( const B3DHomMatrix& rMat )
+ {
+ mnX = fround( rMat.get(0,0)*mnX + rMat.get(0,1)*mnY + rMat.get(0,2)*mnZ );
+ mnY = fround( rMat.get(1,0)*mnX + rMat.get(1,1)*mnY + rMat.get(1,2)*mnZ );
+ mnZ = fround( rMat.get(2,0)*mnX + rMat.get(2,1)*mnY + rMat.get(2,2)*mnZ );
+
+ return *this;
+ }
+
+ B3IVector operator*( const B3DHomMatrix& rMat, const B3IVector& rVec )
+ {
+ B3IVector aRes( rVec );
+ return aRes*=rMat;
+ }
+} // end of namespace basegfx
+
+// eof
diff --git a/basegfx/source/vector/makefile.mk b/basegfx/source/vector/makefile.mk
new file mode 100644
index 000000000000..defc7a31dd51
--- /dev/null
+++ b/basegfx/source/vector/makefile.mk
@@ -0,0 +1,50 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..$/..
+PRJNAME=basegfx
+TARGET=vector
+
+#UNOUCRRDB=$(SOLARBINDIR)$/applicat.rdb
+#ENABLE_EXCEPTIONS=FALSE
+#USE_DEFFILE=TRUE
+
+# --- Settings ----------------------------------
+
+.INCLUDE : settings.mk
+
+# --- Files -------------------------------------
+
+SLOFILES= \
+ $(SLO)$/b2dvector.obj \
+ $(SLO)$/b3dvector.obj \
+ $(SLO)$/b2ivector.obj \
+ $(SLO)$/b3ivector.obj
+
+# --- Targets ----------------------------------
+
+.INCLUDE : target.mk
diff --git a/basegfx/source/workbench/Makefile b/basegfx/source/workbench/Makefile
new file mode 100644
index 000000000000..fe23a4d06708
--- /dev/null
+++ b/basegfx/source/workbench/Makefile
@@ -0,0 +1,16 @@
+# Testbuild
+
+#test : bezierclip.cxx convexhull.cxx
+# g++ -Wall -g \
+# -I. -I. -I../inc -I./inc -I./unx/inc -I./unxlngi4/inc -I. -I/develop4/update/SRX644/unxlngi4/inc.m4/stl -I/develop4/update/SRX644/unxlngi4/inc.m4/external -I/develop4/update/SRX644/unxlngi4/inc.m4 -I/develop4/update/SRX644/src.m4/solenv/unxlngi4/inc -I/net/grande/develop6/update/dev/gcc_3.0.1_linux_libc2.11_turbolinux/include -I/develop4/update/SRX644/src.m4/solenv/inc -I/develop4/update/SRX644/unxlngi4/inc.m4/stl -I/net/grande.germany/develop6/update/dev/gcc_3.0.1_linux_libc2.11_turbolinux/redhat60/usr/include -I/net/grande.germany/develop6/update/dev/gcc_3.0.1_linux_libc2.11_turbolinux/redhat60/usr/include/X11 -I/develop4/update/SRX644/src.m4/res -I/net/grande/develop6/update/dev/Linux_JDK_1.4.0/include -I/net/grande/develop6/update/dev/Linux_JDK_1.4.0/include/linux -I. -I./res -I. \
+# -include preinclude.h -D_USE_NAMESPACE -DGLIBC=2 -D_USE_NAMESPACE=1 -DSTLPORT_VERSION=400 -D_STLP_DEBUG \
+# bezierclip.cxx convexhull.cxx -o bezierclip
+
+prog : bezierclip.cxx convexhull.cxx
+ g++ -Wall -g bezierclip.cxx convexhull.cxx -o bezierclip
+
+test : testconvexhull.cxx
+ g++ -Wall -g testconvexhull.cxx -o testhull
+
+.cxx.o:
+ g++ -c $(LOCALDEFINES) $(CCFLAGS) $<
diff --git a/basegfx/source/workbench/bezierclip.cxx b/basegfx/source/workbench/bezierclip.cxx
new file mode 100644
index 000000000000..12c0d6f7d6df
--- /dev/null
+++ b/basegfx/source/workbench/bezierclip.cxx
@@ -0,0 +1,2057 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basegfx.hxx"
+
+#include <algorithm>
+#include <iterator>
+#include <vector>
+#include <utility>
+
+#include <math.h>
+
+#include "bezierclip.hxx"
+#include "gauss.hxx"
+
+
+
+// what to test
+#define WITH_ASSERTIONS
+//#define WITH_CONVEXHULL_TEST
+//#define WITH_MULTISUBDIVIDE_TEST
+//#define WITH_FATLINE_TEST
+//#define WITH_CALCFOCUS_TEST
+//#define WITH_SAFEPARAMBASE_TEST
+//#define WITH_SAFEPARAMS_TEST
+//#define WITH_SAFEPARAM_DETAILED_TEST
+//#define WITH_SAFEFOCUSPARAM_CALCFOCUS
+//#define WITH_SAFEFOCUSPARAM_TEST
+//#define WITH_SAFEFOCUSPARAM_DETAILED_TEST
+#define WITH_BEZIERCLIP_TEST
+
+
+
+// -----------------------------------------------------------------------------
+
+/* Implementation of the so-called 'Fat-Line Bezier Clipping Algorithm' by Sederberg et al.
+ *
+ * Actual reference is: T. W. Sederberg and T Nishita: Curve
+ * intersection using Bezier clipping. In Computer Aided Design, 22
+ * (9), 1990, pp. 538--549
+ */
+
+// -----------------------------------------------------------------------------
+
+/* Misc helper
+ * ===========
+ */
+int fallFac( int n, int k )
+{
+#ifdef WITH_ASSERTIONS
+ assert(n>=k); // "For factorials, n must be greater or equal k"
+ assert(n>=0); // "For factorials, n must be positive"
+ assert(k>=0); // "For factorials, k must be positive"
+#endif
+
+ int res( 1 );
+
+ while( k-- && n ) res *= n--;
+
+ return res;
+}
+
+// -----------------------------------------------------------------------------
+
+int fac( int n )
+{
+ return fallFac(n, n);
+}
+
+// -----------------------------------------------------------------------------
+
+/* Bezier fat line clipping part
+ * =============================
+ */
+
+// -----------------------------------------------------------------------------
+
+void Impl_calcFatLine( FatLine& line, const Bezier& c )
+{
+ // Prepare normalized implicit line
+ // ================================
+
+ // calculate vector orthogonal to p1-p4:
+ line.a = -(c.p0.y - c.p3.y);
+ line.b = (c.p0.x - c.p3.x);
+
+ // normalize
+ const double len( sqrt( line.a*line.a + line.b*line.b ) );
+ if( !tolZero(len) )
+ {
+ line.a /= len;
+ line.b /= len;
+ }
+
+ line.c = -(line.a*c.p0.x + line.b*c.p0.y);
+
+
+ // Determine bounding fat line from it
+ // ===================================
+
+ // calc control point distances
+ const double dP2( calcLineDistance(line.a, line.b, line.c, c.p1.x, c.p1.y ) );
+ const double dP3( calcLineDistance(line.a, line.b, line.c, c.p2.x, c.p2.y ) );
+
+ // calc approximate bounding lines to curve (tight bounds are
+ // possible here, but more expensive to calculate and thus not
+ // worth the overhead)
+ if( dP2 * dP3 > 0.0 )
+ {
+ line.dMin = 3.0/4.0 * ::std::min(0.0, ::std::min(dP2, dP3));
+ line.dMax = 3.0/4.0 * ::std::max(0.0, ::std::max(dP2, dP3));
+ }
+ else
+ {
+ line.dMin = 4.0/9.0 * ::std::min(0.0, ::std::min(dP2, dP3));
+ line.dMax = 4.0/9.0 * ::std::max(0.0, ::std::max(dP2, dP3));
+ }
+}
+
+void Impl_calcBounds( Point2D& leftTop,
+ Point2D& rightBottom,
+ const Bezier& c1 )
+{
+ leftTop.x = ::std::min( c1.p0.x, ::std::min( c1.p1.x, ::std::min( c1.p2.x, c1.p3.x ) ) );
+ leftTop.y = ::std::min( c1.p0.y, ::std::min( c1.p1.y, ::std::min( c1.p2.y, c1.p3.y ) ) );
+ rightBottom.x = ::std::max( c1.p0.x, ::std::max( c1.p1.x, ::std::max( c1.p2.x, c1.p3.x ) ) );
+ rightBottom.y = ::std::max( c1.p0.y, ::std::max( c1.p1.y, ::std::max( c1.p2.y, c1.p3.y ) ) );
+}
+
+bool Impl_doBBoxIntersect( const Bezier& c1,
+ const Bezier& c2 )
+{
+ // calc rectangular boxes from c1 and c2
+ Point2D lt1;
+ Point2D rb1;
+ Point2D lt2;
+ Point2D rb2;
+
+ Impl_calcBounds( lt1, rb1, c1 );
+ Impl_calcBounds( lt2, rb2, c2 );
+
+ if( ::std::min(rb1.x, rb2.x) < ::std::max(lt1.x, lt2.x) ||
+ ::std::min(rb1.y, rb2.y) < ::std::max(lt1.y, lt2.y) )
+ {
+ return false;
+ }
+ else
+ {
+ return true;
+ }
+}
+
+/* calculates two t's for the given bernstein control polygon: the first is
+ * the intersection of the min value line with the convex hull from
+ * the left, the second is the intersection of the max value line with
+ * the convex hull from the right.
+ */
+bool Impl_calcSafeParams( double& t1,
+ double& t2,
+ const Polygon2D& rPoly,
+ double lowerYBound,
+ double upperYBound )
+{
+ // need the convex hull of the control polygon, as this is
+ // guaranteed to completely bound the curve
+ Polygon2D convHull( convexHull(rPoly) );
+
+ // init min and max buffers
+ t1 = 0.0 ;
+ double currLowerT( 1.0 );
+
+ t2 = 1.0;
+ double currHigherT( 0.0 );
+
+ if( convHull.size() <= 1 )
+ return false; // only one point? Then we're done with clipping
+
+ /* now, clip against lower and higher bounds */
+ Point2D p0;
+ Point2D p1;
+
+ bool bIntersection( false );
+
+ for( Polygon2D::size_type i=0; i<convHull.size(); ++i )
+ {
+ // have to check against convHull.size() segments, as the
+ // convex hull is, by definition, closed. Thus, for the
+ // last point, we take the first point as partner.
+ if( i+1 == convHull.size() )
+ {
+ // close the polygon
+ p0 = convHull[i];
+ p1 = convHull[0];
+ }
+ else
+ {
+ p0 = convHull[i];
+ p1 = convHull[i+1];
+ }
+
+ // is the segment in question within or crossing the
+ // horizontal band spanned by lowerYBound and upperYBound? If
+ // not, we've got no intersection. If yes, we maybe don't have
+ // an intersection, but we've got to update the permissible
+ // range, nevertheless. This is because inside lying segments
+ // leads to full range forbidden.
+ if( (tolLessEqual(p0.y, upperYBound) || tolLessEqual(p1.y, upperYBound)) &&
+ (tolGreaterEqual(p0.y, lowerYBound) || tolGreaterEqual(p1.y, lowerYBound)) )
+ {
+ // calc intersection of convex hull segment with
+ // one of the horizontal bounds lines
+ const double r_x( p1.x - p0.x );
+ const double r_y( p1.y - p0.y );
+
+ if( tolZero(r_y) )
+ {
+ // r_y is virtually zero, thus we've got a horizontal
+ // line. Now check whether we maybe coincide with lower or
+ // upper horizonal bound line.
+ if( tolEqual(p0.y, lowerYBound) ||
+ tolEqual(p0.y, upperYBound) )
+ {
+ // yes, simulate intersection then
+ currLowerT = ::std::min(currLowerT, ::std::min(p0.x, p1.x));
+ currHigherT = ::std::max(currHigherT, ::std::max(p0.x, p1.x));
+ }
+ }
+ else
+ {
+ // check against lower and higher bounds
+ // =====================================
+
+ // calc intersection with horizontal dMin line
+ const double currTLow( (lowerYBound - p0.y) * r_x / r_y + p0.x );
+
+ // calc intersection with horizontal dMax line
+ const double currTHigh( (upperYBound - p0.y) * r_x / r_y + p0.x );
+
+ currLowerT = ::std::min(currLowerT, ::std::min(currTLow, currTHigh));
+ currHigherT = ::std::max(currHigherT, ::std::max(currTLow, currTHigh));
+ }
+
+ // set flag that at least one segment is contained or
+ // intersects given horizontal band.
+ bIntersection = true;
+ }
+ }
+
+#ifndef WITH_SAFEPARAMBASE_TEST
+ // limit intersections found to permissible t parameter range
+ t1 = ::std::max(0.0, currLowerT);
+ t2 = ::std::min(1.0, currHigherT);
+#endif
+
+ return bIntersection;
+}
+
+
+/* calculates two t's for the given bernstein polynomial: the first is
+ * the intersection of the min value line with the convex hull from
+ * the left, the second is the intersection of the max value line with
+ * the convex hull from the right.
+ *
+ * The polynomial coefficients c0 to c3 given to this method
+ * must correspond to t values of 0, 1/3, 2/3 and 1, respectively.
+ */
+bool Impl_calcSafeParams_clip( double& t1,
+ double& t2,
+ const FatLine& bounds,
+ double c0,
+ double c1,
+ double c2,
+ double c3 )
+{
+ /* first of all, determine convex hull of c0-c3 */
+ Polygon2D poly(4);
+ poly[0] = Point2D(0, c0);
+ poly[1] = Point2D(1.0/3.0, c1);
+ poly[2] = Point2D(2.0/3.0, c2);
+ poly[3] = Point2D(1, c3);
+
+#ifndef WITH_SAFEPARAM_DETAILED_TEST
+
+ return Impl_calcSafeParams( t1, t2, poly, bounds.dMin, bounds.dMax );
+
+#else
+ bool bRet( Impl_calcSafeParams( t1, t2, poly, bounds.dMin, bounds.dMax ) );
+
+ Polygon2D convHull( convexHull( poly ) );
+
+ cout << "# convex hull testing" << endl
+ << "plot [t=0:1] ";
+ cout << " bez("
+ << poly[0].x << ","
+ << poly[1].x << ","
+ << poly[2].x << ","
+ << poly[3].x << ",t),bez("
+ << poly[0].y << ","
+ << poly[1].y << ","
+ << poly[2].y << ","
+ << poly[3].y << ",t), "
+ << "t, " << bounds.dMin << ", "
+ << "t, " << bounds.dMax << ", "
+ << t1 << ", t, "
+ << t2 << ", t, "
+ << "'-' using ($1):($2) title \"control polygon\" with lp, "
+ << "'-' using ($1):($2) title \"convex hull\" with lp" << endl;
+
+ unsigned int k;
+ for( k=0; k<poly.size(); ++k )
+ {
+ cout << poly[k].x << " " << poly[k].y << endl;
+ }
+ cout << poly[0].x << " " << poly[0].y << endl;
+ cout << "e" << endl;
+
+ for( k=0; k<convHull.size(); ++k )
+ {
+ cout << convHull[k].x << " " << convHull[k].y << endl;
+ }
+ cout << convHull[0].x << " " << convHull[0].y << endl;
+ cout << "e" << endl;
+
+ return bRet;
+#endif
+}
+
+// -----------------------------------------------------------------------------
+
+void Impl_deCasteljauAt( Bezier& part1,
+ Bezier& part2,
+ const Bezier& input,
+ double t )
+{
+ // deCasteljau bezier arc, scheme is:
+ //
+ // First row is C_0^n,C_1^n,...,C_n^n
+ // Second row is P_1^n,...,P_n^n
+ // etc.
+ // with P_k^r = (1 - x_s)P_{k-1}^{r-1} + x_s P_k{r-1}
+ //
+ // this results in:
+ //
+ // P1 P2 P3 P4
+ // L1 P2 P3 R4
+ // L2 H R3
+ // L3 R2
+ // L4/R1
+ if( tolZero(t) )
+ {
+ // t is zero -> part2 is input curve, part1 is empty (input.p0, that is)
+ part1.p0.x = part1.p1.x = part1.p2.x = part1.p3.x = input.p0.x;
+ part1.p0.y = part1.p1.y = part1.p2.y = part1.p3.y = input.p0.y;
+ part2 = input;
+ }
+ else if( tolEqual(t, 1.0) )
+ {
+ // t is one -> part1 is input curve, part2 is empty (input.p3, that is)
+ part1 = input;
+ part2.p0.x = part2.p1.x = part2.p2.x = part2.p3.x = input.p3.x;
+ part2.p0.y = part2.p1.y = part2.p2.y = part2.p3.y = input.p3.y;
+ }
+ else
+ {
+ part1.p0.x = input.p0.x; part1.p0.y = input.p0.y;
+ part1.p1.x = (1.0 - t)*part1.p0.x + t*input.p1.x; part1.p1.y = (1.0 - t)*part1.p0.y + t*input.p1.y;
+ const double Hx ( (1.0 - t)*input.p1.x + t*input.p2.x ), Hy ( (1.0 - t)*input.p1.y + t*input.p2.y );
+ part1.p2.x = (1.0 - t)*part1.p1.x + t*Hx; part1.p2.y = (1.0 - t)*part1.p1.y + t*Hy;
+ part2.p3.x = input.p3.x; part2.p3.y = input.p3.y;
+ part2.p2.x = (1.0 - t)*input.p2.x + t*input.p3.x; part2.p2.y = (1.0 - t)*input.p2.y + t*input.p3.y;
+ part2.p1.x = (1.0 - t)*Hx + t*part2.p2.x; part2.p1.y = (1.0 - t)*Hy + t*part2.p2.y;
+ part2.p0.x = (1.0 - t)*part1.p2.x + t*part2.p1.x; part2.p0.y = (1.0 - t)*part1.p2.y + t*part2.p1.y;
+ part1.p3.x = part2.p0.x; part1.p3.y = part2.p0.y;
+ }
+}
+
+// -----------------------------------------------------------------------------
+
+void printCurvesWithSafeRange( const Bezier& c1, const Bezier& c2, double t1_c1, double t2_c1,
+ const Bezier& c2_part, const FatLine& bounds_c2 )
+{
+ static int offset = 0;
+
+ cout << "# safe param range testing" << endl
+ << "plot [t=0.0:1.0] ";
+
+ // clip safe ranges off c1
+ Bezier c1_part1;
+ Bezier c1_part2;
+ Bezier c1_part3;
+
+ // subdivide at t1_c1
+ Impl_deCasteljauAt( c1_part1, c1_part2, c1, t1_c1 );
+ // subdivide at t2_c1
+ Impl_deCasteljauAt( c1_part1, c1_part3, c1_part2, t2_c1 );
+
+ // output remaining segment (c1_part1)
+
+ cout << "bez("
+ << c1.p0.x+offset << ","
+ << c1.p1.x+offset << ","
+ << c1.p2.x+offset << ","
+ << c1.p3.x+offset << ",t),bez("
+ << c1.p0.y << ","
+ << c1.p1.y << ","
+ << c1.p2.y << ","
+ << c1.p3.y << ",t), bez("
+ << c2.p0.x+offset << ","
+ << c2.p1.x+offset << ","
+ << c2.p2.x+offset << ","
+ << c2.p3.x+offset << ",t),bez("
+ << c2.p0.y << ","
+ << c2.p1.y << ","
+ << c2.p2.y << ","
+ << c2.p3.y << ",t), "
+#if 1
+ << "bez("
+ << c1_part1.p0.x+offset << ","
+ << c1_part1.p1.x+offset << ","
+ << c1_part1.p2.x+offset << ","
+ << c1_part1.p3.x+offset << ",t),bez("
+ << c1_part1.p0.y << ","
+ << c1_part1.p1.y << ","
+ << c1_part1.p2.y << ","
+ << c1_part1.p3.y << ",t), "
+#endif
+#if 1
+ << "bez("
+ << c2_part.p0.x+offset << ","
+ << c2_part.p1.x+offset << ","
+ << c2_part.p2.x+offset << ","
+ << c2_part.p3.x+offset << ",t),bez("
+ << c2_part.p0.y << ","
+ << c2_part.p1.y << ","
+ << c2_part.p2.y << ","
+ << c2_part.p3.y << ",t), "
+#endif
+ << "linex("
+ << bounds_c2.a << ","
+ << bounds_c2.b << ","
+ << bounds_c2.c << ",t)+" << offset << ", liney("
+ << bounds_c2.a << ","
+ << bounds_c2.b << ","
+ << bounds_c2.c << ",t) title \"fat line (center)\", linex("
+ << bounds_c2.a << ","
+ << bounds_c2.b << ","
+ << bounds_c2.c-bounds_c2.dMin << ",t)+" << offset << ", liney("
+ << bounds_c2.a << ","
+ << bounds_c2.b << ","
+ << bounds_c2.c-bounds_c2.dMin << ",t) title \"fat line (min) \", linex("
+ << bounds_c2.a << ","
+ << bounds_c2.b << ","
+ << bounds_c2.c-bounds_c2.dMax << ",t)+" << offset << ", liney("
+ << bounds_c2.a << ","
+ << bounds_c2.b << ","
+ << bounds_c2.c-bounds_c2.dMax << ",t) title \"fat line (max) \"" << endl;
+
+ offset += 1;
+}
+
+// -----------------------------------------------------------------------------
+
+void printResultWithFinalCurves( const Bezier& c1, const Bezier& c1_part,
+ const Bezier& c2, const Bezier& c2_part,
+ double t1_c1, double t2_c1 )
+{
+ static int offset = 0;
+
+ cout << "# final result" << endl
+ << "plot [t=0.0:1.0] ";
+
+ cout << "bez("
+ << c1.p0.x+offset << ","
+ << c1.p1.x+offset << ","
+ << c1.p2.x+offset << ","
+ << c1.p3.x+offset << ",t),bez("
+ << c1.p0.y << ","
+ << c1.p1.y << ","
+ << c1.p2.y << ","
+ << c1.p3.y << ",t), bez("
+ << c1_part.p0.x+offset << ","
+ << c1_part.p1.x+offset << ","
+ << c1_part.p2.x+offset << ","
+ << c1_part.p3.x+offset << ",t),bez("
+ << c1_part.p0.y << ","
+ << c1_part.p1.y << ","
+ << c1_part.p2.y << ","
+ << c1_part.p3.y << ",t), "
+ << " pointmarkx(bez("
+ << c1.p0.x+offset << ","
+ << c1.p1.x+offset << ","
+ << c1.p2.x+offset << ","
+ << c1.p3.x+offset << ","
+ << t1_c1 << "),t), "
+ << " pointmarky(bez("
+ << c1.p0.y << ","
+ << c1.p1.y << ","
+ << c1.p2.y << ","
+ << c1.p3.y << ","
+ << t1_c1 << "),t), "
+ << " pointmarkx(bez("
+ << c1.p0.x+offset << ","
+ << c1.p1.x+offset << ","
+ << c1.p2.x+offset << ","
+ << c1.p3.x+offset << ","
+ << t2_c1 << "),t), "
+ << " pointmarky(bez("
+ << c1.p0.y << ","
+ << c1.p1.y << ","
+ << c1.p2.y << ","
+ << c1.p3.y << ","
+ << t2_c1 << "),t), "
+
+ << "bez("
+ << c2.p0.x+offset << ","
+ << c2.p1.x+offset << ","
+ << c2.p2.x+offset << ","
+ << c2.p3.x+offset << ",t),bez("
+ << c2.p0.y << ","
+ << c2.p1.y << ","
+ << c2.p2.y << ","
+ << c2.p3.y << ",t), "
+ << "bez("
+ << c2_part.p0.x+offset << ","
+ << c2_part.p1.x+offset << ","
+ << c2_part.p2.x+offset << ","
+ << c2_part.p3.x+offset << ",t),bez("
+ << c2_part.p0.y << ","
+ << c2_part.p1.y << ","
+ << c2_part.p2.y << ","
+ << c2_part.p3.y << ",t)" << endl;
+
+ offset += 1;
+}
+
+// -----------------------------------------------------------------------------
+
+/** determine parameter ranges [0,t1) and (t2,1] on c1, where c1 is guaranteed to lie outside c2.
+ Returns false, if the two curves don't even intersect.
+
+ @param t1
+ Range [0,t1) on c1 is guaranteed to lie outside c2
+
+ @param t2
+ Range (t2,1] on c1 is guaranteed to lie outside c2
+
+ @param c1_orig
+ Original curve c1
+
+ @param c1_part
+ Subdivided current part of c1
+
+ @param c2_orig
+ Original curve c2
+
+ @param c2_part
+ Subdivided current part of c2
+ */
+bool Impl_calcClipRange( double& t1,
+ double& t2,
+ const Bezier& c1_orig,
+ const Bezier& c1_part,
+ const Bezier& c2_orig,
+ const Bezier& c2_part )
+{
+ // TODO: Maybe also check fat line orthogonal to P0P3, having P0
+ // and P3 as the extremal points
+
+ if( Impl_doBBoxIntersect(c1_part, c2_part) )
+ {
+ // Calculate fat lines around c1
+ FatLine bounds_c2;
+
+ // must use the subdivided version of c2, since the fat line
+ // algorithm works implicitely with the convex hull bounding
+ // box.
+ Impl_calcFatLine(bounds_c2, c2_part);
+
+ // determine clip positions on c2. Can use original c1 (which
+ // is necessary anyway, to get the t's on the original curve),
+ // since the distance calculations work directly in the
+ // Bernstein polynom parameter domain.
+ if( Impl_calcSafeParams_clip( t1, t2, bounds_c2,
+ calcLineDistance( bounds_c2.a,
+ bounds_c2.b,
+ bounds_c2.c,
+ c1_orig.p0.x,
+ c1_orig.p0.y ),
+ calcLineDistance( bounds_c2.a,
+ bounds_c2.b,
+ bounds_c2.c,
+ c1_orig.p1.x,
+ c1_orig.p1.y ),
+ calcLineDistance( bounds_c2.a,
+ bounds_c2.b,
+ bounds_c2.c,
+ c1_orig.p2.x,
+ c1_orig.p2.y ),
+ calcLineDistance( bounds_c2.a,
+ bounds_c2.b,
+ bounds_c2.c,
+ c1_orig.p3.x,
+ c1_orig.p3.y ) ) )
+ {
+ //printCurvesWithSafeRange(c1_orig, c2_orig, t1, t2, c2_part, bounds_c2);
+
+ // they do intersect
+ return true;
+ }
+ }
+
+ // they don't intersect: nothing to do
+ return false;
+}
+
+// -----------------------------------------------------------------------------
+
+/* Tangent intersection part
+ * =========================
+ */
+
+// -----------------------------------------------------------------------------
+
+void Impl_calcFocus( Bezier& res, const Bezier& c )
+{
+ // arbitrary small value, for now
+ // TODO: find meaningful value
+ const double minPivotValue( 1.0e-20 );
+
+ Point2D::value_type fMatrix[6];
+ Point2D::value_type fRes[2];
+
+ // calc new curve from hodograph, c and linear blend
+
+ // Coefficients for derivative of c are (C_i=n(C_{i+1} - C_i)):
+ //
+ // 3(P1 - P0), 3(P2 - P1), 3(P3 - P2) (bezier curve of degree 2)
+ //
+ // The hodograph is then (bezier curve of 2nd degree is P0(1-t)^2 + 2P1(1-t)t + P2t^2):
+ //
+ // 3(P1 - P0)(1-t)^2 + 6(P2 - P1)(1-t)t + 3(P3 - P2)t^2
+ //
+ // rotate by 90 degrees: x=-y, y=x and you get the normal vector function N(t):
+ //
+ // x(t) = -(3(P1.y - P0.y)(1-t)^2 + 6(P2.y - P1.y)(1-t)t + 3(P3.y - P2.y)t^2)
+ // y(t) = 3(P1.x - P0.x)(1-t)^2 + 6(P2.x - P1.x)(1-t)t + 3(P3.x - P2.x)t^2
+ //
+ // Now, the focus curve is defined to be F(t)=P(t) + c(t)N(t),
+ // where P(t) is the original curve, and c(t)=c0(1-t) + c1 t
+ //
+ // This results in the following expression for F(t):
+ //
+ // x(t) = P0.x (1-t)^3 + 3 P1.x (1-t)^2t + 3 P2.x (1.t)t^2 + P3.x t^3 -
+ // (c0(1-t) + c1 t)(3(P1.y - P0.y)(1-t)^2 + 6(P2.y - P1.y)(1-t)t + 3(P3.y - P2.y)t^2)
+ //
+ // y(t) = P0.y (1-t)^3 + 3 P1.y (1-t)^2t + 3 P2.y (1.t)t^2 + P3.y t^3 +
+ // (c0(1-t) + c1 t)(3(P1.x - P0.x)(1-t)^2 + 6(P2.x - P1.x)(1-t)t + 3(P3.x - P2.x)t^2)
+ //
+ // As a heuristic, we set F(0)=F(1) (thus, the curve is closed and _tends_ to be small):
+ //
+ // For F(0), the following results:
+ //
+ // x(0) = P0.x - c0 3(P1.y - P0.y)
+ // y(0) = P0.y + c0 3(P1.x - P0.x)
+ //
+ // For F(1), the following results:
+ //
+ // x(1) = P3.x - c1 3(P3.y - P2.y)
+ // y(1) = P3.y + c1 3(P3.x - P2.x)
+ //
+ // Reorder, collect and substitute into F(0)=F(1):
+ //
+ // P0.x - c0 3(P1.y - P0.y) = P3.x - c1 3(P3.y - P2.y)
+ // P0.y + c0 3(P1.x - P0.x) = P3.y + c1 3(P3.x - P2.x)
+ //
+ // which yields
+ //
+ // (P0.y - P1.y)c0 + (P3.y - P2.y)c1 = (P3.x - P0.x)/3
+ // (P1.x - P0.x)c0 + (P2.x - P3.x)c1 = (P3.y - P0.y)/3
+ //
+
+ // so, this is what we calculate here (determine c0 and c1):
+ fMatrix[0] = c.p1.x - c.p0.x;
+ fMatrix[1] = c.p2.x - c.p3.x;
+ fMatrix[2] = (c.p3.y - c.p0.y)/3.0;
+ fMatrix[3] = c.p0.y - c.p1.y;
+ fMatrix[4] = c.p3.y - c.p2.y;
+ fMatrix[5] = (c.p3.x - c.p0.x)/3.0;
+
+ // TODO: determine meaningful value for
+ if( !solve(fMatrix, 2, 3, fRes, minPivotValue) )
+ {
+ // TODO: generate meaningful values here
+ // singular or nearly singular system -- use arbitrary
+ // values for res
+ fRes[0] = 0.0;
+ fRes[1] = 1.0;
+
+ cerr << "Matrix singular!" << endl;
+ }
+
+ // now, the reordered and per-coefficient collected focus curve is
+ // the following third degree bezier curve F(t):
+ //
+ // x(t) = P0.x (1-t)^3 + 3 P1.x (1-t)^2t + 3 P2.x (1.t)t^2 + P3.x t^3 -
+ // (c0(1-t) + c1 t)(3(P1.y - P0.y)(1-t)^2 + 6(P2.y - P1.y)(1-t)t + 3(P3.y - P2.y)t^2)
+ // = P0.x (1-t)^3 + 3 P1.x (1-t)^2t + 3 P2.x (1.t)t^2 + P3.x t^3 -
+ // (3c0P1.y(1-t)^3 - 3c0P0.y(1-t)^3 + 6c0P2.y(1-t)^2t - 6c0P1.y(1-t)^2t +
+ // 3c0P3.y(1-t)t^2 - 3c0P2.y(1-t)t^2 +
+ // 3c1P1.y(1-t)^2t - 3c1P0.y(1-t)^2t + 6c1P2.y(1-t)t^2 - 6c1P1.y(1-t)t^2 +
+ // 3c1P3.yt^3 - 3c1P2.yt^3)
+ // = (P0.x - 3 c0 P1.y + 3 c0 P0.y)(1-t)^3 +
+ // 3(P1.x - c1 P1.y + c1 P0.y - 2 c0 P2.y + 2 c0 P1.y)(1-t)^2t +
+ // 3(P2.x - 2 c1 P2.y + 2 c1 P1.y - c0 P3.y + c0 P2.y)(1-t)t^2 +
+ // (P3.x - 3 c1 P3.y + 3 c1 P2.y)t^3
+ // = (P0.x - 3 c0(P1.y - P0.y))(1-t)^3 +
+ // 3(P1.x - c1(P1.y - P0.y) - 2c0(P2.y - P1.y))(1-t)^2t +
+ // 3(P2.x - 2 c1(P2.y - P1.y) - c0(P3.y - P2.y))(1-t)t^2 +
+ // (P3.x - 3 c1(P3.y - P2.y))t^3
+ //
+ // y(t) = P0.y (1-t)^3 + 3 P1.y (1-t)^2t + 3 P2.y (1-t)t^2 + P3.y t^3 +
+ // (c0(1-t) + c1 t)(3(P1.x - P0.x)(1-t)^2 + 6(P2.x - P1.x)(1-t)t + 3(P3.x - P2.x)t^2)
+ // = P0.y (1-t)^3 + 3 P1.y (1-t)^2t + 3 P2.y (1-t)t^2 + P3.y t^3 +
+ // 3c0(P1.x - P0.x)(1-t)^3 + 6c0(P2.x - P1.x)(1-t)^2t + 3c0(P3.x - P2.x)(1-t)t^2 +
+ // 3c1(P1.x - P0.x)(1-t)^2t + 6c1(P2.x - P1.x)(1-t)t^2 + 3c1(P3.x - P2.x)t^3
+ // = (P0.y + 3 c0 (P1.x - P0.x))(1-t)^3 +
+ // 3(P1.y + 2 c0 (P2.x - P1.x) + c1 (P1.x - P0.x))(1-t)^2t +
+ // 3(P2.y + c0 (P3.x - P2.x) + 2 c1 (P2.x - P1.x))(1-t)t^2 +
+ // (P3.y + 3 c1 (P3.x - P2.x))t^3
+ //
+ // Therefore, the coefficients F0 to F3 of the focus curve are:
+ //
+ // F0.x = (P0.x - 3 c0(P1.y - P0.y)) F0.y = (P0.y + 3 c0 (P1.x - P0.x))
+ // F1.x = (P1.x - c1(P1.y - P0.y) - 2c0(P2.y - P1.y)) F1.y = (P1.y + 2 c0 (P2.x - P1.x) + c1 (P1.x - P0.x))
+ // F2.x = (P2.x - 2 c1(P2.y - P1.y) - c0(P3.y - P2.y)) F2.y = (P2.y + c0 (P3.x - P2.x) + 2 c1 (P2.x - P1.x))
+ // F3.x = (P3.x - 3 c1(P3.y - P2.y)) F3.y = (P3.y + 3 c1 (P3.x - P2.x))
+ //
+ res.p0.x = c.p0.x - 3*fRes[0]*(c.p1.y - c.p0.y);
+ res.p1.x = c.p1.x - fRes[1]*(c.p1.y - c.p0.y) - 2*fRes[0]*(c.p2.y - c.p1.y);
+ res.p2.x = c.p2.x - 2*fRes[1]*(c.p2.y - c.p1.y) - fRes[0]*(c.p3.y - c.p2.y);
+ res.p3.x = c.p3.x - 3*fRes[1]*(c.p3.y - c.p2.y);
+
+ res.p0.y = c.p0.y + 3*fRes[0]*(c.p1.x - c.p0.x);
+ res.p1.y = c.p1.y + 2*fRes[0]*(c.p2.x - c.p1.x) + fRes[1]*(c.p1.x - c.p0.x);
+ res.p2.y = c.p2.y + fRes[0]*(c.p3.x - c.p2.x) + 2*fRes[1]*(c.p2.x - c.p1.x);
+ res.p3.y = c.p3.y + 3*fRes[1]*(c.p3.x - c.p2.x);
+}
+
+// -----------------------------------------------------------------------------
+
+bool Impl_calcSafeParams_focus( double& t1,
+ double& t2,
+ const Bezier& curve,
+ const Bezier& focus )
+{
+ // now, we want to determine which normals of the original curve
+ // P(t) intersect with the focus curve F(t). The condition for
+ // this statement is P'(t)(P(t) - F) = 0, i.e. hodograph P'(t) and
+ // line through P(t) and F are perpendicular.
+ // If you expand this equation, you end up with something like
+ //
+ // (\sum_{i=0}^n (P_i - F)B_i^n(t))^T (\sum_{j=0}^{n-1} n(P_{j+1} - P_j)B_j^{n-1}(t))
+ //
+ // Multiplying that out (as the scalar product is linear, we can
+ // extract some terms) yields:
+ //
+ // (P_i - F)^T n(P_{j+1} - P_j) B_i^n(t)B_j^{n-1}(t) + ...
+ //
+ // If we combine the B_i^n(t)B_j^{n-1}(t) product, we arrive at a
+ // Bernstein polynomial of degree 2n-1, as
+ //
+ // \binom{n}{i}(1-t)^{n-i}t^i) \binom{n-1}{j}(1-t)^{n-1-j}t^j) =
+ // \binom{n}{i}\binom{n-1}{j}(1-t)^{2n-1-i-j}t^{i+j}
+ //
+ // Thus, with the defining equation for a 2n-1 degree Bernstein
+ // polynomial
+ //
+ // \sum_{i=0}^{2n-1} d_i B_i^{2n-1}(t)
+ //
+ // the d_i are calculated as follows:
+ //
+ // d_i = \sum_{j+k=i, j\in\{0,...,n\}, k\in\{0,...,n-1\}} \frac{\binom{n}{j}\binom{n-1}{k}}{\binom{2n-1}{i}} n (P_{k+1} - P_k)^T(P_j - F)
+ //
+ //
+ // Okay, but F is now not a single point, but itself a curve
+ // F(u). Thus, for every value of u, we get a different 2n-1
+ // bezier curve from the above equation. Therefore, we have a
+ // tensor product bezier patch, with the following defining
+ // equation:
+ //
+ // d(t,u) = \sum_{i=0}^{2n-1} \sum_{j=0}^m B_i^{2n-1}(t) B_j^{m}(u) d_{ij}, where
+ // d_{ij} = \sum_{k+l=i, l\in\{0,...,n\}, k\in\{0,...,n-1\}} \frac{\binom{n}{l}\binom{n-1}{k}}{\binom{2n-1}{i}} n (P_{k+1} - P_k)^T(P_l - F_j)
+ //
+ // as above, only that now F is one of the focus' control points.
+ //
+ // Note the difference in the binomial coefficients to the
+ // reference paper, these formulas most probably contained a typo.
+ //
+ // To determine, where D(t,u) is _not_ zero (these are the parts
+ // of the curve that don't share normals with the focus and can
+ // thus be safely clipped away), we project D(u,t) onto the
+ // (d(t,u), t) plane, determine the convex hull there and proceed
+ // as for the curve intersection part (projection is orthogonal to
+ // u axis, thus simply throw away u coordinate).
+ //
+ // \fallfac are so-called falling factorials (see Concrete
+ // Mathematics, p. 47 for a definition).
+ //
+
+ // now, for tensor product bezier curves, the convex hull property
+ // holds, too. Thus, we simply project the control points (t_{ij},
+ // u_{ij}, d_{ij}) onto the (t,d) plane and calculate the
+ // intersections of the convex hull with the t axis, as for the
+ // bezier clipping case.
+
+ //
+ // calc polygon of control points (t_{ij}, d_{ij}):
+ //
+ const int n( 3 ); // cubic bezier curves, as a matter of fact
+ const int i_card( 2*n );
+ const int j_card( n + 1 );
+ const int k_max( n-1 );
+ Polygon2D controlPolygon( i_card*j_card ); // vector of (t_{ij}, d_{ij}) in row-major order
+
+ int i, j, k, l; // variable notation from formulas above and Sederberg article
+ Point2D::value_type d;
+ for( i=0; i<i_card; ++i )
+ {
+ for( j=0; j<j_card; ++j )
+ {
+ // calc single d_{ij} sum:
+ for( d=0.0, k=::std::max(0,i-n); k<=k_max && k<=i; ++k )
+ {
+ l = i - k; // invariant: k + l = i
+ assert(k>=0 && k<=n-1); // k \in {0,...,n-1}
+ assert(l>=0 && l<=n); // l \in {0,...,n}
+
+ // TODO: find, document and assert proper limits for n and int's max_val.
+ // This becomes important should anybody wants to use
+ // this code for higher-than-cubic beziers
+ d += static_cast<double>(fallFac(n,l)*fallFac(n-1,k)*fac(i)) /
+ static_cast<double>(fac(l)*fac(k) * fallFac(2*n-1,i)) * n *
+ ( (curve[k+1].x - curve[k].x)*(curve[l].x - focus[j].x) + // dot product here
+ (curve[k+1].y - curve[k].y)*(curve[l].y - focus[j].y) );
+ }
+
+ // Note that the t_{ij} values are evenly spaced on the
+ // [0,1] interval, thus t_{ij}=i/(2n-1)
+ controlPolygon[ i*j_card + j ] = Point2D( i/(2.0*n-1.0), d );
+ }
+ }
+
+#ifndef WITH_SAFEFOCUSPARAM_DETAILED_TEST
+
+ // calc safe parameter range, to determine [0,t1] and [t2,1] where
+ // no zero crossing is guaranteed.
+ return Impl_calcSafeParams( t1, t2, controlPolygon, 0.0, 0.0 );
+
+#else
+ bool bRet( Impl_calcSafeParams( t1, t2, controlPolygon, 0.0, 0.0 ) );
+
+ Polygon2D convHull( convexHull( controlPolygon ) );
+
+ cout << "# convex hull testing (focus)" << endl
+ << "plot [t=0:1] ";
+ cout << "'-' using ($1):($2) title \"control polygon\" with lp, "
+ << "'-' using ($1):($2) title \"convex hull\" with lp" << endl;
+
+ unsigned int count;
+ for( count=0; count<controlPolygon.size(); ++count )
+ {
+ cout << controlPolygon[count].x << " " << controlPolygon[count].y << endl;
+ }
+ cout << controlPolygon[0].x << " " << controlPolygon[0].y << endl;
+ cout << "e" << endl;
+
+ for( count=0; count<convHull.size(); ++count )
+ {
+ cout << convHull[count].x << " " << convHull[count].y << endl;
+ }
+ cout << convHull[0].x << " " << convHull[0].y << endl;
+ cout << "e" << endl;
+
+ return bRet;
+#endif
+}
+
+// -----------------------------------------------------------------------------
+
+/** Calc all values t_i on c1, for which safeRanges functor does not
+ give a safe range on c1 and c2.
+
+ This method is the workhorse of the bezier clipping. Because c1
+ and c2 must be alternatingly tested against each other (first
+ determine safe parameter interval on c1 with regard to c2, then
+ the other way around), we call this method recursively with c1 and
+ c2 swapped.
+
+ @param result
+ Output iterator where the final t values are added to. If curves
+ don't intersect, nothing is added.
+
+ @param delta
+ Maximal allowed distance to true critical point (measured in the
+ original curve's coordinate system)
+
+ @param safeRangeFunctor
+ Functor object, that must provide the following operator():
+ bool safeRangeFunctor( double& t1,
+ double& t2,
+ const Bezier& c1_orig,
+ const Bezier& c1_part,
+ const Bezier& c2_orig,
+ const Bezier& c2_part );
+ This functor must calculate the safe ranges [0,t1] and [t2,1] on
+ c1_orig, where c1_orig is 'safe' from c2_part. If the whole
+ c1_orig is safe, false must be returned, true otherwise.
+ */
+template <class Functor> void Impl_applySafeRanges_rec( ::std::back_insert_iterator< ::std::vector< ::std::pair<double, double> > >& result,
+ double delta,
+ const Functor& safeRangeFunctor,
+ int recursionLevel,
+ const Bezier& c1_orig,
+ const Bezier& c1_part,
+ double last_t1_c1,
+ double last_t2_c1,
+ const Bezier& c2_orig,
+ const Bezier& c2_part,
+ double last_t1_c2,
+ double last_t2_c2 )
+{
+ // check end condition
+ // ===================
+
+ // TODO: tidy up recursion handling. maybe put everything in a
+ // struct and swap that here at method entry
+
+ // TODO: Implement limit on recursion depth. Should that limit be
+ // reached, chances are that we're on a higher-order tangency. For
+ // this case, AW proposed to take the middle of the current
+ // interval, and to correct both curve's tangents at that new
+ // endpoint to be equal. That virtually generates a first-order
+ // tangency, and justifies to return a single intersection
+ // point. Otherwise, inside/outside test might fail here.
+
+ for( int i=0; i<recursionLevel; ++i ) cerr << " ";
+ if( recursionLevel % 2 )
+ {
+ cerr << "level: " << recursionLevel
+ << " t: "
+ << last_t1_c2 + (last_t2_c2 - last_t1_c2)/2.0
+ << ", c1: " << last_t1_c2 << " " << last_t2_c2
+ << ", c2: " << last_t1_c1 << " " << last_t2_c1
+ << endl;
+ }
+ else
+ {
+ cerr << "level: " << recursionLevel
+ << " t: "
+ << last_t1_c1 + (last_t2_c1 - last_t1_c1)/2.0
+ << ", c1: " << last_t1_c1 << " " << last_t2_c1
+ << ", c2: " << last_t1_c2 << " " << last_t2_c2
+ << endl;
+ }
+
+ // refine solution
+ // ===============
+
+ double t1_c1, t2_c1;
+
+ // Note: we first perform the clipping and only test for precision
+ // sufficiency afterwards, since we want to exploit the fact that
+ // Impl_calcClipRange returns false if the curves don't
+ // intersect. We would have to check that separately for the end
+ // condition, otherwise.
+
+ // determine safe range on c1_orig
+ if( safeRangeFunctor( t1_c1, t2_c1, c1_orig, c1_part, c2_orig, c2_part ) )
+ {
+ // now, t1 and t2 are calculated on the original curve
+ // (but against a fat line calculated from the subdivided
+ // c2, namely c2_part). If the [t1,t2] range is outside
+ // our current [last_t1,last_t2] range, we're done in this
+ // branch - the curves no longer intersect.
+ if( tolLessEqual(t1_c1, last_t2_c1) && tolGreaterEqual(t2_c1, last_t1_c1) )
+ {
+ // As noted above, t1 and t2 are calculated on the
+ // original curve, but against a fat line
+ // calculated from the subdivided c2, namely
+ // c2_part. Our domain to work on is
+ // [last_t1,last_t2], on the other hand, so values
+ // of [t1,t2] outside that range are irrelevant
+ // here. Clip range appropriately.
+ t1_c1 = ::std::max(t1_c1, last_t1_c1);
+ t2_c1 = ::std::min(t2_c1, last_t2_c1);
+
+ // TODO: respect delta
+ // for now, end condition is just a fixed threshold on the t's
+
+ // check end condition
+ // ===================
+
+#if 1
+ if( fabs(last_t2_c1 - last_t1_c1) < 0.0001 &&
+ fabs(last_t2_c2 - last_t1_c2) < 0.0001 )
+#else
+ if( fabs(last_t2_c1 - last_t1_c1) < 0.01 &&
+ fabs(last_t2_c2 - last_t1_c2) < 0.01 )
+#endif
+ {
+ // done. Add to result
+ if( recursionLevel % 2 )
+ {
+ // uneven level: have to swap the t's, since curves are swapped, too
+ *result++ = ::std::make_pair( last_t1_c2 + (last_t2_c2 - last_t1_c2)/2.0,
+ last_t1_c1 + (last_t2_c1 - last_t1_c1)/2.0 );
+ }
+ else
+ {
+ *result++ = ::std::make_pair( last_t1_c1 + (last_t2_c1 - last_t1_c1)/2.0,
+ last_t1_c2 + (last_t2_c2 - last_t1_c2)/2.0 );
+ }
+
+#if 0
+ //printResultWithFinalCurves( c1_orig, c1_part, c2_orig, c2_part, last_t1_c1, last_t2_c1 );
+ printResultWithFinalCurves( c1_orig, c1_part, c2_orig, c2_part, t1_c1, t2_c1 );
+#else
+ // calc focus curve of c2
+ Bezier focus;
+ Impl_calcFocus(focus, c2_part); // need to use subdivided c2
+
+ safeRangeFunctor( t1_c1, t2_c1, c1_orig, c1_part, c2_orig, c2_part );
+
+ //printResultWithFinalCurves( c1_orig, c1_part, c2_orig, focus, t1_c1, t2_c1 );
+ printResultWithFinalCurves( c1_orig, c1_part, c2_orig, focus, last_t1_c1, last_t2_c1 );
+#endif
+ }
+ else
+ {
+ // heuristic: if parameter range is not reduced by at least
+ // 20%, subdivide longest curve, and clip shortest against
+ // both parts of longest
+// if( (last_t2_c1 - last_t1_c1 - t2_c1 + t1_c1) / (last_t2_c1 - last_t1_c1) < 0.2 )
+ if( false )
+ {
+ // subdivide and descend
+ // =====================
+
+ Bezier part1;
+ Bezier part2;
+
+ double intervalMiddle;
+
+ if( last_t2_c1 - last_t1_c1 > last_t2_c2 - last_t1_c2 )
+ {
+ // subdivide c1
+ // ============
+
+ intervalMiddle = last_t1_c1 + (last_t2_c1 - last_t1_c1)/2.0;
+
+ // subdivide at the middle of the interval (as
+ // we're not subdividing on the original
+ // curve, this simply amounts to subdivision
+ // at 0.5)
+ Impl_deCasteljauAt( part1, part2, c1_part, 0.5 );
+
+ // and descend recursively with swapped curves
+ Impl_applySafeRanges_rec( result, delta, safeRangeFunctor, recursionLevel+1,
+ c2_orig, c2_part, last_t1_c2, last_t2_c2,
+ c1_orig, part1, last_t1_c1, intervalMiddle );
+
+ Impl_applySafeRanges_rec( result, delta, safeRangeFunctor, recursionLevel+1,
+ c2_orig, c2_part, last_t1_c2, last_t2_c2,
+ c1_orig, part2, intervalMiddle, last_t2_c1 );
+ }
+ else
+ {
+ // subdivide c2
+ // ============
+
+ intervalMiddle = last_t1_c2 + (last_t2_c2 - last_t1_c2)/2.0;
+
+ // subdivide at the middle of the interval (as
+ // we're not subdividing on the original
+ // curve, this simply amounts to subdivision
+ // at 0.5)
+ Impl_deCasteljauAt( part1, part2, c2_part, 0.5 );
+
+ // and descend recursively with swapped curves
+ Impl_applySafeRanges_rec( result, delta, safeRangeFunctor, recursionLevel+1,
+ c2_orig, part1, last_t1_c2, intervalMiddle,
+ c1_orig, c1_part, last_t1_c1, last_t2_c1 );
+
+ Impl_applySafeRanges_rec( result, delta, safeRangeFunctor, recursionLevel+1,
+ c2_orig, part2, intervalMiddle, last_t2_c2,
+ c1_orig, c1_part, last_t1_c1, last_t2_c1 );
+ }
+ }
+ else
+ {
+ // apply calculated clip
+ // =====================
+
+ // clip safe ranges off c1_orig
+ Bezier c1_part1;
+ Bezier c1_part2;
+ Bezier c1_part3;
+
+ // subdivide at t1_c1
+ Impl_deCasteljauAt( c1_part1, c1_part2, c1_orig, t1_c1 );
+
+ // subdivide at t2_c1. As we're working on
+ // c1_part2 now, we have to adapt t2_c1 since
+ // we're no longer in the original parameter
+ // interval. This is based on the following
+ // assumption: t2_new = (t2-t1)/(1-t1), which
+ // relates the t2 value into the new parameter
+ // range [0,1] of c1_part2.
+ Impl_deCasteljauAt( c1_part1, c1_part3, c1_part2, (t2_c1-t1_c1)/(1.0-t1_c1) );
+
+ // descend with swapped curves and c1_part1 as the
+ // remaining (middle) segment
+ Impl_applySafeRanges_rec( result, delta, safeRangeFunctor, recursionLevel+1,
+ c2_orig, c2_part, last_t1_c2, last_t2_c2,
+ c1_orig, c1_part1, t1_c1, t2_c1 );
+ }
+ }
+ }
+ }
+}
+
+// -----------------------------------------------------------------------------
+
+struct ClipBezierFunctor
+{
+ bool operator()( double& t1_c1,
+ double& t2_c1,
+ const Bezier& c1_orig,
+ const Bezier& c1_part,
+ const Bezier& c2_orig,
+ const Bezier& c2_part ) const
+ {
+ return Impl_calcClipRange( t1_c1, t2_c1, c1_orig, c1_part, c2_orig, c2_part );
+ }
+};
+
+// -----------------------------------------------------------------------------
+
+struct BezierTangencyFunctor
+{
+ bool operator()( double& t1_c1,
+ double& t2_c1,
+ const Bezier& c1_orig,
+ const Bezier& c1_part,
+ const Bezier& c2_orig,
+ const Bezier& c2_part ) const
+ {
+ // calc focus curve of c2
+ Bezier focus;
+ Impl_calcFocus(focus, c2_part); // need to use subdivided c2
+ // here, as the whole curve is
+ // used for focus calculation
+
+ // determine safe range on c1_orig
+ bool bRet( Impl_calcSafeParams_focus( t1_c1, t2_c1,
+ c1_orig, // use orig curve here, need t's on original curve
+ focus ) );
+
+ cerr << "range: " << t2_c1 - t1_c1 << ", ret: " << bRet << endl;
+
+ return bRet;
+ }
+};
+
+// -----------------------------------------------------------------------------
+
+/** Perform a bezier clip (curve against curve)
+
+ @param result
+ Output iterator where the final t values are added to. This
+ iterator will remain empty, if there are no intersections.
+
+ @param delta
+ Maximal allowed distance to true intersection (measured in the
+ original curve's coordinate system)
+ */
+void clipBezier( ::std::back_insert_iterator< ::std::vector< ::std::pair<double, double> > >& result,
+ double delta,
+ const Bezier& c1,
+ const Bezier& c2 )
+{
+#if 0
+ // first of all, determine list of collinear normals. Collinear
+ // normals typically separate two intersections, thus, subdivide
+ // at all collinear normal's t values beforehand. This will cater
+ // for tangent intersections, where two or more intersections are
+ // infinitesimally close together.
+
+ // TODO: evaluate effects of higher-than-second-order
+ // tangencies. Sederberg et al. state that collinear normal
+ // algorithm then degrades quickly.
+
+ ::std::vector< ::std::pair<double,double> > results;
+ ::std::back_insert_iterator< ::std::vector< ::std::pair<double, double> > > ii(results);
+
+ Impl_calcCollinearNormals( ii, delta, 0, c1, c1, 0.0, 1.0, c2, c2, 0.0, 1.0 );
+
+ // As Sederberg's collinear normal theorem is only sufficient, not
+ // necessary for two intersections left and right, we've to test
+ // all segments generated by the collinear normal algorithm
+ // against each other. In other words, if the two curves are both
+ // divided in a left and a right part, the collinear normal
+ // theorem does _not_ state that the left part of curve 1 does not
+ // e.g. intersect with the right part of curve 2.
+
+ // divide c1 and c2 at collinear normal intersection points
+ ::std::vector< Bezier > c1_segments( results.size()+1 );
+ ::std::vector< Bezier > c2_segments( results.size()+1 );
+ Bezier c1_remainder( c1 );
+ Bezier c2_remainder( c2 );
+ unsigned int i;
+ for( i=0; i<results.size(); ++i )
+ {
+ Bezier c1_part2;
+ Impl_deCasteljauAt( c1_segments[i], c1_part2, c1_remainder, results[i].first );
+ c1_remainder = c1_part2;
+
+ Bezier c2_part2;
+ Impl_deCasteljauAt( c2_segments[i], c2_part2, c2_remainder, results[i].second );
+ c2_remainder = c2_part2;
+ }
+ c1_segments[i] = c1_remainder;
+ c2_segments[i] = c2_remainder;
+
+ // now, c1/c2_segments contain all segments, then
+ // clip every resulting segment against every other
+ unsigned int c1_curr, c2_curr;
+ for( c1_curr=0; c1_curr<c1_segments.size(); ++c1_curr )
+ {
+ for( c2_curr=0; c2_curr<c2_segments.size(); ++c2_curr )
+ {
+ if( c1_curr != c2_curr )
+ {
+ Impl_clipBezier_rec(result, delta, 0,
+ c1_segments[c1_curr], c1_segments[c1_curr],
+ 0.0, 1.0,
+ c2_segments[c2_curr], c2_segments[c2_curr],
+ 0.0, 1.0);
+ }
+ }
+ }
+#else
+ Impl_applySafeRanges_rec( result, delta, BezierTangencyFunctor(), 0, c1, c1, 0.0, 1.0, c2, c2, 0.0, 1.0 );
+ //Impl_applySafeRanges_rec( result, delta, ClipBezierFunctor(), 0, c1, c1, 0.0, 1.0, c2, c2, 0.0, 1.0 );
+#endif
+ // that's it, boys'n'girls!
+}
+
+int main(int argc, const char *argv[])
+{
+ double curr_Offset( 0 );
+ unsigned int i,j,k;
+
+ Bezier someCurves[] =
+ {
+// {Point2D(0.0,0.0),Point2D(0.0,1.0),Point2D(1.0,1.0),Point2D(1.0,0.0)},
+// {Point2D(0.0,0.0),Point2D(0.0,1.0),Point2D(1.0,1.0),Point2D(1.0,0.5)},
+// {Point2D(1.0,0.0),Point2D(0.0,0.0),Point2D(0.0,1.0),Point2D(1.0,1.0)}
+// {Point2D(0.25+1,0.5),Point2D(0.25+1,0.708333),Point2D(0.423611+1,0.916667),Point2D(0.770833+1,0.980324)},
+// {Point2D(0.0+1,0.0),Point2D(0.0+1,1.0),Point2D(1.0+1,1.0),Point2D(1.0+1,0.5)}
+
+// tangency1
+// {Point2D(0.627124+1,0.828427),Point2D(0.763048+1,0.828507),Point2D(0.885547+1,0.77312),Point2D(0.950692+1,0.67325)},
+// {Point2D(0.0,1.0),Point2D(0.1,1.0),Point2D(0.4,1.0),Point2D(0.5,1.0)}
+
+// {Point2D(0.0,0.0),Point2D(0.0,1.0),Point2D(1.0,1.0),Point2D(1.0,0.5)},
+// {Point2D(0.60114,0.933091),Point2D(0.69461,0.969419),Point2D(0.80676,0.992976),Point2D(0.93756,0.998663)}
+// {Point2D(1.0,0.0),Point2D(0.0,0.0),Point2D(0.0,1.0),Point2D(1.0,1.0)},
+// {Point2D(0.62712,0.828427),Point2D(0.76305,0.828507),Point2D(0.88555,0.77312),Point2D(0.95069,0.67325)}
+
+// clipping1
+// {Point2D(0.0,0.0),Point2D(0.0,3.5),Point2D(1.0,-2.5),Point2D(1.0,1.0)},
+// {Point2D(0.0,1.0),Point2D(3.5,1.0),Point2D(-2.5,0.0),Point2D(1.0,0.0)}
+
+// tangency2
+// {Point2D(0.0,1.0),Point2D(3.5,1.0),Point2D(-2.5,0.0),Point2D(1.0,0.0)},
+// {Point2D(15.3621,0.00986464),Point2D(15.3683,0.0109389),Point2D(15.3682,0.0109315),Point2D(15.3621,0.00986464)}
+
+// tangency3
+// {Point2D(1.0,0.0),Point2D(0.0,0.0),Point2D(0.0,1.0),Point2D(1.0,1.0)},
+// {Point2D(-0.5,0.0),Point2D(0.5,0.0),Point2D(0.5,1.0),Point2D(-0.5,1.0)}
+
+// tangency4
+// {Point2D(-0.5,0.0),Point2D(0.5,0.0),Point2D(0.5,1.0),Point2D(-0.5,1.0)},
+// {Point2D(0.26,0.4),Point2D(0.25,0.5),Point2D(0.25,0.5),Point2D(0.26,0.6)}
+
+// tangency5
+// {Point2D(0.0,0.0),Point2D(0.0,3.5),Point2D(1.0,-2.5),Point2D(1.0,1.0)},
+// {Point2D(15.3621,0.00986464),Point2D(15.3683,0.0109389),Point2D(15.3682,0.0109315),Point2D(15.3621,0.00986464)}
+
+// tangency6
+// {Point2D(0.0,0.0),Point2D(0.0,3.5),Point2D(1.0,-2.5),Point2D(1.0,1.0)},
+// {Point2D(15.3621,10.00986464),Point2D(15.3683,10.0109389),Point2D(15.3682,10.0109315),Point2D(15.3621,10.00986464)}
+
+// tangency7
+// {Point2D(2.505,0.0),Point2D(2.505+4.915,4.300),Point2D(2.505+3.213,10.019),Point2D(2.505-2.505,10.255)},
+// {Point2D(15.3621,10.00986464),Point2D(15.3683,10.0109389),Point2D(15.3682,10.0109315),Point2D(15.3621,10.00986464)}
+
+// tangency Sederberg example
+ {Point2D(2.505,0.0),Point2D(2.505+4.915,4.300),Point2D(2.505+3.213,10.019),Point2D(2.505-2.505,10.255)},
+ {Point2D(5.33+9.311,0.0),Point2D(5.33+9.311-13.279,4.205),Point2D(5.33+9.311-10.681,9.119),Point2D(5.33+9.311-2.603,10.254)}
+
+// clipping2
+// {Point2D(-0.5,0.0),Point2D(0.5,0.0),Point2D(0.5,1.0),Point2D(-0.5,1.0)},
+// {Point2D(0.2575,0.4),Point2D(0.2475,0.5),Point2D(0.2475,0.5),Point2D(0.2575,0.6)}
+
+// {Point2D(0.0,0.1),Point2D(0.2,3.5),Point2D(1.0,-2.5),Point2D(1.1,1.2)},
+// {Point2D(0.0,1.0),Point2D(3.5,0.9),Point2D(-2.5,0.1),Point2D(1.1,0.2)}
+// {Point2D(0.0,0.1),Point2D(0.2,3.0),Point2D(1.0,-2.0),Point2D(1.1,1.2)},
+// {Point2D(0.627124+1,0.828427),Point2D(0.763048+1,0.828507),Point2D(0.885547+1,0.77312),Point2D(0.950692+1,0.67325)}
+// {Point2D(0.0,1.0),Point2D(3.0,0.9),Point2D(-2.0,0.1),Point2D(1.1,0.2)}
+// {Point2D(0.0,4.0),Point2D(0.1,5.0),Point2D(0.9,5.0),Point2D(1.0,4.0)},
+// {Point2D(0.0,0.0),Point2D(0.1,0.5),Point2D(0.9,0.5),Point2D(1.0,0.0)},
+// {Point2D(0.0,0.1),Point2D(0.1,1.5),Point2D(0.9,1.5),Point2D(1.0,0.1)},
+// {Point2D(0.0,-4.0),Point2D(0.1,-5.0),Point2D(0.9,-5.0),Point2D(1.0,-4.0)}
+ };
+
+ // output gnuplot setup
+ cout << "#!/usr/bin/gnuplot -persist" << endl
+ << "#" << endl
+ << "# automatically generated by bezierclip, don't change!" << endl
+ << "#" << endl
+ << "set parametric" << endl
+ << "bez(p,q,r,s,t) = p*(1-t)**3+q*3*(1-t)**2*t+r*3*(1-t)*t**2+s*t**3" << endl
+ << "bezd(p,q,r,s,t) = 3*(q-p)*(1-t)**2+6*(r-q)*(1-t)*t+3*(s-r)*t**2" << endl
+ << "pointmarkx(c,t) = c-0.03*t" << endl
+ << "pointmarky(c,t) = c+0.03*t" << endl
+ << "linex(a,b,c,t) = a*-c + t*-b" << endl
+ << "liney(a,b,c,t) = b*-c + t*a" << endl << endl
+ << "# end of setup" << endl << endl;
+
+#ifdef WITH_CONVEXHULL_TEST
+ // test convex hull algorithm
+ const double convHull_xOffset( curr_Offset );
+ curr_Offset += 20;
+ cout << "# convex hull testing" << endl
+ << "plot [t=0:1] ";
+ for( i=0; i<sizeof(someCurves)/sizeof(Bezier); ++i )
+ {
+ Polygon2D aTestPoly(4);
+ aTestPoly[0] = someCurves[i].p0;
+ aTestPoly[1] = someCurves[i].p1;
+ aTestPoly[2] = someCurves[i].p2;
+ aTestPoly[3] = someCurves[i].p3;
+
+ aTestPoly[0].x += convHull_xOffset;
+ aTestPoly[1].x += convHull_xOffset;
+ aTestPoly[2].x += convHull_xOffset;
+ aTestPoly[3].x += convHull_xOffset;
+
+ cout << " bez("
+ << aTestPoly[0].x << ","
+ << aTestPoly[1].x << ","
+ << aTestPoly[2].x << ","
+ << aTestPoly[3].x << ",t),bez("
+ << aTestPoly[0].y << ","
+ << aTestPoly[1].y << ","
+ << aTestPoly[2].y << ","
+ << aTestPoly[3].y << ",t), '-' using ($1):($2) title \"convex hull " << i << "\" with lp";
+
+ if( i+1<sizeof(someCurves)/sizeof(Bezier) )
+ cout << ",\\" << endl;
+ else
+ cout << endl;
+ }
+ for( i=0; i<sizeof(someCurves)/sizeof(Bezier); ++i )
+ {
+ Polygon2D aTestPoly(4);
+ aTestPoly[0] = someCurves[i].p0;
+ aTestPoly[1] = someCurves[i].p1;
+ aTestPoly[2] = someCurves[i].p2;
+ aTestPoly[3] = someCurves[i].p3;
+
+ aTestPoly[0].x += convHull_xOffset;
+ aTestPoly[1].x += convHull_xOffset;
+ aTestPoly[2].x += convHull_xOffset;
+ aTestPoly[3].x += convHull_xOffset;
+
+ Polygon2D convHull( convexHull(aTestPoly) );
+
+ for( k=0; k<convHull.size(); ++k )
+ {
+ cout << convHull[k].x << " " << convHull[k].y << endl;
+ }
+ cout << convHull[0].x << " " << convHull[0].y << endl;
+ cout << "e" << endl;
+ }
+#endif
+
+#ifdef WITH_MULTISUBDIVIDE_TEST
+ // test convex hull algorithm
+ const double multiSubdivide_xOffset( curr_Offset );
+ curr_Offset += 20;
+ cout << "# multi subdivide testing" << endl
+ << "plot [t=0:1] ";
+ for( i=0; i<sizeof(someCurves)/sizeof(Bezier); ++i )
+ {
+ Bezier c( someCurves[i] );
+ Bezier c1_part1;
+ Bezier c1_part2;
+ Bezier c1_part3;
+
+ c.p0.x += multiSubdivide_xOffset;
+ c.p1.x += multiSubdivide_xOffset;
+ c.p2.x += multiSubdivide_xOffset;
+ c.p3.x += multiSubdivide_xOffset;
+
+ const double t1( 0.1+i/(3.0*sizeof(someCurves)/sizeof(Bezier)) );
+ const double t2( 0.9-i/(3.0*sizeof(someCurves)/sizeof(Bezier)) );
+
+ // subdivide at t1
+ Impl_deCasteljauAt( c1_part1, c1_part2, c, t1 );
+
+ // subdivide at t2_c1. As we're working on
+ // c1_part2 now, we have to adapt t2_c1 since
+ // we're no longer in the original parameter
+ // interval. This is based on the following
+ // assumption: t2_new = (t2-t1)/(1-t1), which
+ // relates the t2 value into the new parameter
+ // range [0,1] of c1_part2.
+ Impl_deCasteljauAt( c1_part1, c1_part3, c1_part2, (t2-t1)/(1.0-t1) );
+
+ // subdivide at t2
+ Impl_deCasteljauAt( c1_part3, c1_part2, c, t2 );
+
+ cout << " bez("
+ << c1_part1.p0.x << ","
+ << c1_part1.p1.x << ","
+ << c1_part1.p2.x << ","
+ << c1_part1.p3.x << ",t), bez("
+ << c1_part1.p0.y+0.01 << ","
+ << c1_part1.p1.y+0.01 << ","
+ << c1_part1.p2.y+0.01 << ","
+ << c1_part1.p3.y+0.01 << ",t) title \"middle " << i << "\", "
+ << " bez("
+ << c1_part2.p0.x << ","
+ << c1_part2.p1.x << ","
+ << c1_part2.p2.x << ","
+ << c1_part2.p3.x << ",t), bez("
+ << c1_part2.p0.y << ","
+ << c1_part2.p1.y << ","
+ << c1_part2.p2.y << ","
+ << c1_part2.p3.y << ",t) title \"right " << i << "\", "
+ << " bez("
+ << c1_part3.p0.x << ","
+ << c1_part3.p1.x << ","
+ << c1_part3.p2.x << ","
+ << c1_part3.p3.x << ",t), bez("
+ << c1_part3.p0.y << ","
+ << c1_part3.p1.y << ","
+ << c1_part3.p2.y << ","
+ << c1_part3.p3.y << ",t) title \"left " << i << "\"";
+
+
+ if( i+1<sizeof(someCurves)/sizeof(Bezier) )
+ cout << ",\\" << endl;
+ else
+ cout << endl;
+ }
+#endif
+
+#ifdef WITH_FATLINE_TEST
+ // test fatline algorithm
+ const double fatLine_xOffset( curr_Offset );
+ curr_Offset += 20;
+ cout << "# fat line testing" << endl
+ << "plot [t=0:1] ";
+ for( i=0; i<sizeof(someCurves)/sizeof(Bezier); ++i )
+ {
+ Bezier c( someCurves[i] );
+
+ c.p0.x += fatLine_xOffset;
+ c.p1.x += fatLine_xOffset;
+ c.p2.x += fatLine_xOffset;
+ c.p3.x += fatLine_xOffset;
+
+ FatLine line;
+
+ Impl_calcFatLine(line, c);
+
+ cout << " bez("
+ << c.p0.x << ","
+ << c.p1.x << ","
+ << c.p2.x << ","
+ << c.p3.x << ",t), bez("
+ << c.p0.y << ","
+ << c.p1.y << ","
+ << c.p2.y << ","
+ << c.p3.y << ",t) title \"bezier " << i << "\", linex("
+ << line.a << ","
+ << line.b << ","
+ << line.c << ",t), liney("
+ << line.a << ","
+ << line.b << ","
+ << line.c << ",t) title \"fat line (center) on " << i << "\", linex("
+ << line.a << ","
+ << line.b << ","
+ << line.c-line.dMin << ",t), liney("
+ << line.a << ","
+ << line.b << ","
+ << line.c-line.dMin << ",t) title \"fat line (min) on " << i << "\", linex("
+ << line.a << ","
+ << line.b << ","
+ << line.c-line.dMax << ",t), liney("
+ << line.a << ","
+ << line.b << ","
+ << line.c-line.dMax << ",t) title \"fat line (max) on " << i << "\"";
+
+ if( i+1<sizeof(someCurves)/sizeof(Bezier) )
+ cout << ",\\" << endl;
+ else
+ cout << endl;
+ }
+#endif
+
+#ifdef WITH_CALCFOCUS_TEST
+ // test focus curve algorithm
+ const double focus_xOffset( curr_Offset );
+ curr_Offset += 20;
+ cout << "# focus line testing" << endl
+ << "plot [t=0:1] ";
+ for( i=0; i<sizeof(someCurves)/sizeof(Bezier); ++i )
+ {
+ Bezier c( someCurves[i] );
+
+ c.p0.x += focus_xOffset;
+ c.p1.x += focus_xOffset;
+ c.p2.x += focus_xOffset;
+ c.p3.x += focus_xOffset;
+
+ // calc focus curve
+ Bezier focus;
+ Impl_calcFocus(focus, c);
+
+ cout << " bez("
+ << c.p0.x << ","
+ << c.p1.x << ","
+ << c.p2.x << ","
+ << c.p3.x << ",t), bez("
+ << c.p0.y << ","
+ << c.p1.y << ","
+ << c.p2.y << ","
+ << c.p3.y << ",t) title \"bezier " << i << "\", bez("
+ << focus.p0.x << ","
+ << focus.p1.x << ","
+ << focus.p2.x << ","
+ << focus.p3.x << ",t), bez("
+ << focus.p0.y << ","
+ << focus.p1.y << ","
+ << focus.p2.y << ","
+ << focus.p3.y << ",t) title \"focus " << i << "\"";
+
+
+ if( i+1<sizeof(someCurves)/sizeof(Bezier) )
+ cout << ",\\" << endl;
+ else
+ cout << endl;
+ }
+#endif
+
+#ifdef WITH_SAFEPARAMBASE_TEST
+ // test safe params base method
+ double safeParamsBase_xOffset( curr_Offset );
+ cout << "# safe param base method testing" << endl
+ << "plot [t=0:1] ";
+ for( i=0; i<sizeof(someCurves)/sizeof(Bezier); ++i )
+ {
+ Bezier c( someCurves[i] );
+
+ c.p0.x += safeParamsBase_xOffset;
+ c.p1.x += safeParamsBase_xOffset;
+ c.p2.x += safeParamsBase_xOffset;
+ c.p3.x += safeParamsBase_xOffset;
+
+ Polygon2D poly(4);
+ poly[0] = c.p0;
+ poly[1] = c.p1;
+ poly[2] = c.p2;
+ poly[3] = c.p3;
+
+ double t1, t2;
+
+ bool bRet( Impl_calcSafeParams( t1, t2, poly, 0, 1 ) );
+
+ Polygon2D convHull( convexHull( poly ) );
+
+ cout << " bez("
+ << poly[0].x << ","
+ << poly[1].x << ","
+ << poly[2].x << ","
+ << poly[3].x << ",t),bez("
+ << poly[0].y << ","
+ << poly[1].y << ","
+ << poly[2].y << ","
+ << poly[3].y << ",t), "
+ << "t+" << safeParamsBase_xOffset << ", 0, "
+ << "t+" << safeParamsBase_xOffset << ", 1, ";
+ if( bRet )
+ {
+ cout << t1+safeParamsBase_xOffset << ", t, "
+ << t2+safeParamsBase_xOffset << ", t, ";
+ }
+ cout << "'-' using ($1):($2) title \"control polygon\" with lp, "
+ << "'-' using ($1):($2) title \"convex hull\" with lp";
+
+ if( i+1<sizeof(someCurves)/sizeof(Bezier) )
+ cout << ",\\" << endl;
+ else
+ cout << endl;
+
+ safeParamsBase_xOffset += 2;
+ }
+
+ safeParamsBase_xOffset = curr_Offset;
+ for( i=0; i<sizeof(someCurves)/sizeof(Bezier); ++i )
+ {
+ Bezier c( someCurves[i] );
+
+ c.p0.x += safeParamsBase_xOffset;
+ c.p1.x += safeParamsBase_xOffset;
+ c.p2.x += safeParamsBase_xOffset;
+ c.p3.x += safeParamsBase_xOffset;
+
+ Polygon2D poly(4);
+ poly[0] = c.p0;
+ poly[1] = c.p1;
+ poly[2] = c.p2;
+ poly[3] = c.p3;
+
+ double t1, t2;
+
+ Impl_calcSafeParams( t1, t2, poly, 0, 1 );
+
+ Polygon2D convHull( convexHull( poly ) );
+
+ unsigned int k;
+ for( k=0; k<poly.size(); ++k )
+ {
+ cout << poly[k].x << " " << poly[k].y << endl;
+ }
+ cout << poly[0].x << " " << poly[0].y << endl;
+ cout << "e" << endl;
+
+ for( k=0; k<convHull.size(); ++k )
+ {
+ cout << convHull[k].x << " " << convHull[k].y << endl;
+ }
+ cout << convHull[0].x << " " << convHull[0].y << endl;
+ cout << "e" << endl;
+
+ safeParamsBase_xOffset += 2;
+ }
+ curr_Offset += 20;
+#endif
+
+#ifdef WITH_SAFEPARAMS_TEST
+ // test safe parameter range algorithm
+ const double safeParams_xOffset( curr_Offset );
+ curr_Offset += 20;
+ cout << "# safe param range testing" << endl
+ << "plot [t=0.0:1.0] ";
+ for( i=0; i<sizeof(someCurves)/sizeof(Bezier); ++i )
+ {
+ for( j=i+1; j<sizeof(someCurves)/sizeof(Bezier); ++j )
+ {
+ Bezier c1( someCurves[i] );
+ Bezier c2( someCurves[j] );
+
+ c1.p0.x += safeParams_xOffset;
+ c1.p1.x += safeParams_xOffset;
+ c1.p2.x += safeParams_xOffset;
+ c1.p3.x += safeParams_xOffset;
+ c2.p0.x += safeParams_xOffset;
+ c2.p1.x += safeParams_xOffset;
+ c2.p2.x += safeParams_xOffset;
+ c2.p3.x += safeParams_xOffset;
+
+ double t1, t2;
+
+ if( Impl_calcClipRange(t1, t2, c1, c1, c2, c2) )
+ {
+ // clip safe ranges off c1
+ Bezier c1_part1;
+ Bezier c1_part2;
+ Bezier c1_part3;
+
+ // subdivide at t1_c1
+ Impl_deCasteljauAt( c1_part1, c1_part2, c1, t1 );
+ // subdivide at t2_c1
+ Impl_deCasteljauAt( c1_part1, c1_part3, c1_part2, (t2-t1)/(1.0-t1) );
+
+ // output remaining segment (c1_part1)
+
+ cout << " bez("
+ << c1.p0.x << ","
+ << c1.p1.x << ","
+ << c1.p2.x << ","
+ << c1.p3.x << ",t),bez("
+ << c1.p0.y << ","
+ << c1.p1.y << ","
+ << c1.p2.y << ","
+ << c1.p3.y << ",t), bez("
+ << c2.p0.x << ","
+ << c2.p1.x << ","
+ << c2.p2.x << ","
+ << c2.p3.x << ",t),bez("
+ << c2.p0.y << ","
+ << c2.p1.y << ","
+ << c2.p2.y << ","
+ << c2.p3.y << ",t), bez("
+ << c1_part1.p0.x << ","
+ << c1_part1.p1.x << ","
+ << c1_part1.p2.x << ","
+ << c1_part1.p3.x << ",t),bez("
+ << c1_part1.p0.y << ","
+ << c1_part1.p1.y << ","
+ << c1_part1.p2.y << ","
+ << c1_part1.p3.y << ",t)";
+
+ if( i+2<sizeof(someCurves)/sizeof(Bezier) )
+ cout << ",\\" << endl;
+ else
+ cout << endl;
+ }
+ }
+ }
+#endif
+
+#ifdef WITH_SAFEPARAM_DETAILED_TEST
+ // test safe parameter range algorithm
+ const double safeParams2_xOffset( curr_Offset );
+ curr_Offset += 20;
+ if( sizeof(someCurves)/sizeof(Bezier) > 1 )
+ {
+ Bezier c1( someCurves[0] );
+ Bezier c2( someCurves[1] );
+
+ c1.p0.x += safeParams2_xOffset;
+ c1.p1.x += safeParams2_xOffset;
+ c1.p2.x += safeParams2_xOffset;
+ c1.p3.x += safeParams2_xOffset;
+ c2.p0.x += safeParams2_xOffset;
+ c2.p1.x += safeParams2_xOffset;
+ c2.p2.x += safeParams2_xOffset;
+ c2.p3.x += safeParams2_xOffset;
+
+ double t1, t2;
+
+ // output happens here
+ Impl_calcClipRange(t1, t2, c1, c1, c2, c2);
+ }
+#endif
+
+#ifdef WITH_SAFEFOCUSPARAM_TEST
+ // test safe parameter range from focus algorithm
+ const double safeParamsFocus_xOffset( curr_Offset );
+ curr_Offset += 20;
+ cout << "# safe param range from focus testing" << endl
+ << "plot [t=0.0:1.0] ";
+ for( i=0; i<sizeof(someCurves)/sizeof(Bezier); ++i )
+ {
+ for( j=i+1; j<sizeof(someCurves)/sizeof(Bezier); ++j )
+ {
+ Bezier c1( someCurves[i] );
+ Bezier c2( someCurves[j] );
+
+ c1.p0.x += safeParamsFocus_xOffset;
+ c1.p1.x += safeParamsFocus_xOffset;
+ c1.p2.x += safeParamsFocus_xOffset;
+ c1.p3.x += safeParamsFocus_xOffset;
+ c2.p0.x += safeParamsFocus_xOffset;
+ c2.p1.x += safeParamsFocus_xOffset;
+ c2.p2.x += safeParamsFocus_xOffset;
+ c2.p3.x += safeParamsFocus_xOffset;
+
+ double t1, t2;
+
+ Bezier focus;
+#ifdef WITH_SAFEFOCUSPARAM_CALCFOCUS
+#if 0
+ {
+ // clip safe ranges off c1_orig
+ Bezier c1_part1;
+ Bezier c1_part2;
+ Bezier c1_part3;
+
+ // subdivide at t1_c1
+ Impl_deCasteljauAt( c1_part1, c1_part2, c2, 0.30204 );
+
+ // subdivide at t2_c1. As we're working on
+ // c1_part2 now, we have to adapt t2_c1 since
+ // we're no longer in the original parameter
+ // interval. This is based on the following
+ // assumption: t2_new = (t2-t1)/(1-t1), which
+ // relates the t2 value into the new parameter
+ // range [0,1] of c1_part2.
+ Impl_deCasteljauAt( c1_part1, c1_part3, c1_part2, (0.57151-0.30204)/(1.0-0.30204) );
+
+ c2 = c1_part1;
+ Impl_calcFocus( focus, c2 );
+ }
+#else
+ Impl_calcFocus( focus, c2 );
+#endif
+#else
+ focus = c2;
+#endif
+ // determine safe range on c1
+ bool bRet( Impl_calcSafeParams_focus( t1, t2,
+ c1, focus ) );
+
+ cerr << "t1: " << t1 << ", t2: " << t2 << endl;
+
+ // clip safe ranges off c1
+ Bezier c1_part1;
+ Bezier c1_part2;
+ Bezier c1_part3;
+
+ // subdivide at t1_c1
+ Impl_deCasteljauAt( c1_part1, c1_part2, c1, t1 );
+ // subdivide at t2_c1
+ Impl_deCasteljauAt( c1_part1, c1_part3, c1_part2, (t2-t1)/(1.0-t1) );
+
+ // output remaining segment (c1_part1)
+
+ cout << " bez("
+ << c1.p0.x << ","
+ << c1.p1.x << ","
+ << c1.p2.x << ","
+ << c1.p3.x << ",t),bez("
+ << c1.p0.y << ","
+ << c1.p1.y << ","
+ << c1.p2.y << ","
+ << c1.p3.y << ",t) title \"c1\", "
+#ifdef WITH_SAFEFOCUSPARAM_CALCFOCUS
+ << "bez("
+ << c2.p0.x << ","
+ << c2.p1.x << ","
+ << c2.p2.x << ","
+ << c2.p3.x << ",t),bez("
+ << c2.p0.y << ","
+ << c2.p1.y << ","
+ << c2.p2.y << ","
+ << c2.p3.y << ",t) title \"c2\", "
+ << "bez("
+ << focus.p0.x << ","
+ << focus.p1.x << ","
+ << focus.p2.x << ","
+ << focus.p3.x << ",t),bez("
+ << focus.p0.y << ","
+ << focus.p1.y << ","
+ << focus.p2.y << ","
+ << focus.p3.y << ",t) title \"focus\"";
+#else
+ << "bez("
+ << c2.p0.x << ","
+ << c2.p1.x << ","
+ << c2.p2.x << ","
+ << c2.p3.x << ",t),bez("
+ << c2.p0.y << ","
+ << c2.p1.y << ","
+ << c2.p2.y << ","
+ << c2.p3.y << ",t) title \"focus\"";
+#endif
+ if( bRet )
+ {
+ cout << ", bez("
+ << c1_part1.p0.x << ","
+ << c1_part1.p1.x << ","
+ << c1_part1.p2.x << ","
+ << c1_part1.p3.x << ",t),bez("
+ << c1_part1.p0.y+0.01 << ","
+ << c1_part1.p1.y+0.01 << ","
+ << c1_part1.p2.y+0.01 << ","
+ << c1_part1.p3.y+0.01 << ",t) title \"part\"";
+ }
+
+ if( i+2<sizeof(someCurves)/sizeof(Bezier) )
+ cout << ",\\" << endl;
+ else
+ cout << endl;
+ }
+ }
+#endif
+
+#ifdef WITH_SAFEFOCUSPARAM_DETAILED_TEST
+ // test safe parameter range algorithm
+ const double safeParams3_xOffset( curr_Offset );
+ curr_Offset += 20;
+ if( sizeof(someCurves)/sizeof(Bezier) > 1 )
+ {
+ Bezier c1( someCurves[0] );
+ Bezier c2( someCurves[1] );
+
+ c1.p0.x += safeParams3_xOffset;
+ c1.p1.x += safeParams3_xOffset;
+ c1.p2.x += safeParams3_xOffset;
+ c1.p3.x += safeParams3_xOffset;
+ c2.p0.x += safeParams3_xOffset;
+ c2.p1.x += safeParams3_xOffset;
+ c2.p2.x += safeParams3_xOffset;
+ c2.p3.x += safeParams3_xOffset;
+
+ double t1, t2;
+
+ Bezier focus;
+#ifdef WITH_SAFEFOCUSPARAM_CALCFOCUS
+ Impl_calcFocus( focus, c2 );
+#else
+ focus = c2;
+#endif
+
+ // determine safe range on c1, output happens here
+ Impl_calcSafeParams_focus( t1, t2,
+ c1, focus );
+ }
+#endif
+
+#ifdef WITH_BEZIERCLIP_TEST
+ ::std::vector< ::std::pair<double, double> > result;
+ ::std::back_insert_iterator< ::std::vector< ::std::pair<double, double> > > ii(result);
+
+ // test full bezier clipping
+ const double bezierClip_xOffset( curr_Offset );
+ curr_Offset += 20;
+ cout << endl << endl << "# bezier clip testing" << endl
+ << "plot [t=0:1] ";
+ for( i=0; i<sizeof(someCurves)/sizeof(Bezier); ++i )
+ {
+ for( j=i+1; j<sizeof(someCurves)/sizeof(Bezier); ++j )
+ {
+ Bezier c1( someCurves[i] );
+ Bezier c2( someCurves[j] );
+
+ c1.p0.x += bezierClip_xOffset;
+ c1.p1.x += bezierClip_xOffset;
+ c1.p2.x += bezierClip_xOffset;
+ c1.p3.x += bezierClip_xOffset;
+ c2.p0.x += bezierClip_xOffset;
+ c2.p1.x += bezierClip_xOffset;
+ c2.p2.x += bezierClip_xOffset;
+ c2.p3.x += bezierClip_xOffset;
+
+ cout << " bez("
+ << c1.p0.x << ","
+ << c1.p1.x << ","
+ << c1.p2.x << ","
+ << c1.p3.x << ",t),bez("
+ << c1.p0.y << ","
+ << c1.p1.y << ","
+ << c1.p2.y << ","
+ << c1.p3.y << ",t), bez("
+ << c2.p0.x << ","
+ << c2.p1.x << ","
+ << c2.p2.x << ","
+ << c2.p3.x << ",t),bez("
+ << c2.p0.y << ","
+ << c2.p1.y << ","
+ << c2.p2.y << ","
+ << c2.p3.y << ",t), '-' using (bez("
+ << c1.p0.x << ","
+ << c1.p1.x << ","
+ << c1.p2.x << ","
+ << c1.p3.x
+ << ",$1)):(bez("
+ << c1.p0.y << ","
+ << c1.p1.y << ","
+ << c1.p2.y << ","
+ << c1.p3.y << ",$1)) title \"bezier " << i << " clipped against " << j << " (t on " << i << ")\", "
+ << " '-' using (bez("
+ << c2.p0.x << ","
+ << c2.p1.x << ","
+ << c2.p2.x << ","
+ << c2.p3.x
+ << ",$1)):(bez("
+ << c2.p0.y << ","
+ << c2.p1.y << ","
+ << c2.p2.y << ","
+ << c2.p3.y << ",$1)) title \"bezier " << i << " clipped against " << j << " (t on " << j << ")\"";
+
+ if( i+2<sizeof(someCurves)/sizeof(Bezier) )
+ cout << ",\\" << endl;
+ else
+ cout << endl;
+ }
+ }
+ for( i=0; i<sizeof(someCurves)/sizeof(Bezier); ++i )
+ {
+ for( j=i+1; j<sizeof(someCurves)/sizeof(Bezier); ++j )
+ {
+ result.clear();
+ Bezier c1( someCurves[i] );
+ Bezier c2( someCurves[j] );
+
+ c1.p0.x += bezierClip_xOffset;
+ c1.p1.x += bezierClip_xOffset;
+ c1.p2.x += bezierClip_xOffset;
+ c1.p3.x += bezierClip_xOffset;
+ c2.p0.x += bezierClip_xOffset;
+ c2.p1.x += bezierClip_xOffset;
+ c2.p2.x += bezierClip_xOffset;
+ c2.p3.x += bezierClip_xOffset;
+
+ clipBezier( ii, 0.00001, c1, c2 );
+
+ for( k=0; k<result.size(); ++k )
+ {
+ cout << result[k].first << endl;
+ }
+ cout << "e" << endl;
+
+ for( k=0; k<result.size(); ++k )
+ {
+ cout << result[k].second << endl;
+ }
+ cout << "e" << endl;
+ }
+ }
+#endif
+
+ return 0;
+}
diff --git a/basegfx/source/workbench/bezierclip.hxx b/basegfx/source/workbench/bezierclip.hxx
new file mode 100644
index 000000000000..ca16ad0fdd44
--- /dev/null
+++ b/basegfx/source/workbench/bezierclip.hxx
@@ -0,0 +1,93 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef BASEGFX_BEZIERCLIP_HXX
+#define BASEGFX_BEZIERCLIP_HXX
+
+#include <vector>
+
+struct Point2D
+{
+ typedef double value_type;
+ Point2D( double _x, double _y ) : x(_x), y(_y) {}
+ Point2D() : x(), y() {}
+ double x;
+ double y;
+};
+
+struct Bezier
+{
+ Point2D p0;
+ Point2D p1;
+ Point2D p2;
+ Point2D p3;
+
+ Point2D& operator[]( int i ) { return reinterpret_cast<Point2D*>(this)[i]; }
+ const Point2D& operator[]( int i ) const { return reinterpret_cast<const Point2D*>(this)[i]; }
+};
+
+struct FatLine
+{
+ // line L through p1 and p4 in normalized implicit form
+ double a;
+ double b;
+ double c;
+
+ // the upper and lower distance from this line
+ double dMin;
+ double dMax;
+};
+
+template <typename DataType> DataType calcLineDistance( const DataType& a,
+ const DataType& b,
+ const DataType& c,
+ const DataType& x,
+ const DataType& y )
+{
+ return a*x + b*y + c;
+}
+
+typedef ::std::vector< Point2D > Polygon2D;
+
+/* little abs template */
+template <typename NumType> NumType absval( NumType x )
+{
+ return x<0 ? -x : x;
+}
+
+Polygon2D convexHull( const Polygon2D& rPoly );
+
+// TODO: find proper epsilon here (try ::std::numeric_limits<NumType>::epsilon()?)!
+#define DBL_EPSILON 1.0e-100
+
+/* little approximate comparions */
+template <typename NumType> bool tolZero( NumType n ) { return fabs(n) < DBL_EPSILON; }
+template <typename NumType> bool tolEqual( NumType n1, NumType n2 ) { return tolZero(n1-n2); }
+template <typename NumType> bool tolLessEqual( NumType n1, NumType n2 ) { return tolEqual(n1,n2) || n1<n2; }
+template <typename NumType> bool tolGreaterEqual( NumType n1, NumType n2 ) { return tolEqual(n1,n2) || n1>n2; }
+
+#endif /* BASEGFX_BEZIERCLIP_HXX */
diff --git a/basegfx/source/workbench/convexhull.cxx b/basegfx/source/workbench/convexhull.cxx
new file mode 100644
index 000000000000..99d9fb86c1d9
--- /dev/null
+++ b/basegfx/source/workbench/convexhull.cxx
@@ -0,0 +1,213 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basegfx.hxx"
+
+#include <algorithm>
+#include <functional>
+#include <vector>
+
+#include "bezierclip.hxx"
+
+// -----------------------------------------------------------------------------
+
+/* Implements the theta function from Sedgewick: Algorithms in XXX, chapter 24 */
+template <class PointType> double theta( const PointType& p1, const PointType& p2 )
+{
+ typename PointType::value_type dx, dy, ax, ay;
+ double t;
+
+ dx = p2.x - p1.x; ax = absval( dx );
+ dy = p2.y - p1.y; ay = absval( dy );
+ t = (ax+ay == 0) ? 0 : (double) dy/(ax+ay);
+ if( dx < 0 )
+ t = 2-t;
+ else if( dy < 0 )
+ t = 4+t;
+
+ return t*90.0;
+}
+
+/* Model of LessThanComparable for theta sort.
+ * Uses the theta function from Sedgewick: Algorithms in XXX, chapter 24
+ */
+template <class PointType> class ThetaCompare : public ::std::binary_function< const PointType&, const PointType&, bool >
+{
+public:
+ ThetaCompare( const PointType& rRefPoint ) : maRefPoint( rRefPoint ) {}
+
+ bool operator() ( const PointType& p1, const PointType& p2 )
+ {
+ // return true, if p1 precedes p2 in the angle relative to maRefPoint
+ return theta(maRefPoint, p1) < theta(maRefPoint, p2);
+ }
+
+ double operator() ( const PointType& p ) const
+ {
+ return theta(maRefPoint, p);
+ }
+
+private:
+ PointType maRefPoint;
+};
+
+/* Implementation of the predicate 'counter-clockwise' for three points, from Sedgewick: Algorithms in XXX, chapter 24 */
+template <class PointType, class CmpFunctor> typename PointType::value_type ccw( const PointType& p0, const PointType& p1, const PointType& p2, CmpFunctor& thetaCmp )
+{
+ typename PointType::value_type dx1, dx2, dy1, dy2;
+ typename PointType::value_type theta0( thetaCmp(p0) );
+ typename PointType::value_type theta1( thetaCmp(p1) );
+ typename PointType::value_type theta2( thetaCmp(p2) );
+
+#if 0
+ if( theta0 == theta1 ||
+ theta0 == theta2 ||
+ theta1 == theta2 )
+ {
+ // cannot reliably compare, as at least two points are
+ // theta-equal. See bug description below
+ return 0;
+ }
+#endif
+
+ dx1 = p1.x - p0.x; dy1 = p1.y - p0.y;
+ dx2 = p2.x - p0.x; dy2 = p2.y - p0.y;
+
+ if( dx1*dy2 > dy1*dx2 )
+ return +1;
+
+ if( dx1*dy2 < dy1*dx2 )
+ return -1;
+
+ if( (dx1*dx2 < 0) || (dy1*dy2 < 0) )
+ return -1;
+
+ if( (dx1*dx1 + dy1*dy1) < (dx2*dx2 + dy2*dy2) )
+ return +1;
+
+ return 0;
+}
+
+/*
+ Bug
+ ===
+
+ Sometimes, the resulting polygon is not the convex hull (see below
+ for an edge configuration to reproduce that problem)
+
+ Problem analysis:
+ =================
+
+ The root cause of this bug is the fact that the second part of
+ the algorithm (the 'wrapping' of the point set) relies on the
+ previous theta sorting. Namely, it is required that the
+ generated point ordering, when interpreted as a polygon, is not
+ self-intersecting. This property, although, cannot be
+ guaranteed due to limited floating point accuracy. For example,
+ for two points very close together, and at the same time very
+ far away from the theta reference point p1, can appear on the
+ same theta value (because floating point accuracy is limited),
+ although on different rays to p1 when inspected locally.
+
+ Example:
+
+ /
+ P3 /
+ |\ /
+ | /
+ |/ \
+ P2 \
+ \
+ ...____________\
+ P1
+
+ Here, P2 and P3 are theta-equal relative to P1, but the local
+ ccw measure always says 'left turn'. Thus, the convex hull is
+ wrong at this place.
+
+ Solution:
+ =========
+
+ If two points are theta-equal and checked via ccw, ccw must
+ also classify them as 'equal'. Thus, the second stage of the
+ convex hull algorithm sorts the first one out, effectively
+ reducing a cluster of theta-equal points to only one. This
+ single point can then be treated correctly.
+*/
+
+
+/* Implementation of Graham's convex hull algorithm, see Sedgewick: Algorithms in XXX, chapter 25 */
+Polygon2D convexHull( const Polygon2D& rPoly )
+{
+ const Polygon2D::size_type N( rPoly.size() );
+ Polygon2D result( N + 1 );
+ ::std::copy(rPoly.begin(), rPoly.end(), result.begin()+1 );
+ Polygon2D::size_type min, i;
+
+ // determine safe point on hull (smallest y value)
+ for( min=1, i=2; i<=N; ++i )
+ {
+ if( result[i].y < result[min].y )
+ min = i;
+ }
+
+ // determine safe point on hull (largest x value)
+ for( i=1; i<=N; ++i )
+ {
+ if( result[i].y == result[min].y &&
+ result[i].x > result[min].x )
+ {
+ min = i;
+ }
+ }
+
+ // TODO: add inner elimination optimization from Sedgewick: Algorithms in XXX, chapter 25
+ // TODO: use radix sort instead of ::std::sort(), calc theta only once and store
+
+ // setup first point and sort
+ ::std::swap( result[1], result[min] );
+ ThetaCompare<Point2D> cmpFunc(result[1]);
+ ::std::sort( result.begin()+1, result.end(), cmpFunc );
+
+ // setup sentinel
+ result[0] = result[N];
+
+ // generate convex hull
+ Polygon2D::size_type M;
+ for( M=3, i=4; i<=N; ++i )
+ {
+ while( ccw(result[M], result[M-1], result[i], cmpFunc) >= 0 )
+ --M;
+
+ ++M;
+ ::std::swap( result[M], result[i] );
+ }
+
+ // copy range [1,M] to output
+ return Polygon2D( result.begin()+1, result.begin()+M+1 );
+}
diff --git a/basegfx/source/workbench/gauss.hxx b/basegfx/source/workbench/gauss.hxx
new file mode 100644
index 000000000000..63910c6ded2d
--- /dev/null
+++ b/basegfx/source/workbench/gauss.hxx
@@ -0,0 +1,172 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+/** This method eliminates elements below main diagonal in the given
+ matrix by gaussian elimination.
+
+ @param matrix
+ The matrix to operate on. Last column is the result vector (right
+ hand side of the linear equation). After successful termination,
+ the matrix is upper triangular. The matrix is expected to be in
+ row major order.
+
+ @param rows
+ Number of rows in matrix
+
+ @param cols
+ Number of columns in matrix
+
+ @param minPivot
+ If the pivot element gets lesser than minPivot, this method fails,
+ otherwise, elimination succeeds and true is returned.
+
+ @return true, if elimination succeeded.
+ */
+template <class Matrix, typename BaseType>
+bool eliminate( Matrix& matrix,
+ int rows,
+ int cols,
+ const BaseType& minPivot )
+{
+ BaseType temp;
+ int max, i, j, k; /* *must* be signed, when looping like: j>=0 ! */
+
+ /* eliminate below main diagonal */
+ for(i=0; i<cols-1; ++i)
+ {
+ /* find best pivot */
+ max = i;
+ for(j=i+1; j<rows; ++j)
+ if( fabs(matrix[ j*cols + i ]) > fabs(matrix[ max*cols + i ]) )
+ max = j;
+
+ /* check pivot value */
+ if( fabs(matrix[ max*cols + i ]) < minPivot )
+ return false; /* pivot too small! */
+
+ /* interchange rows 'max' and 'i' */
+ for(k=0; k<cols; ++k)
+ {
+ temp = matrix[ i*cols + k ];
+ matrix[ i*cols + k ] = matrix[ max*cols + k ];
+ matrix[ max*cols + k ] = temp;
+ }
+
+ /* eliminate column */
+ for(j=i+1; j<rows; ++j)
+ for(k=cols-1; k>=i; --k)
+ matrix[ j*cols + k ] -= matrix[ i*cols + k ] *
+ matrix[ j*cols + i ] / matrix[ i*cols + i ];
+ }
+
+ /* everything went well */
+ return true;
+}
+
+
+/** Retrieve solution vector of linear system by substituting backwards.
+
+ This operation _relies_ on the previous successful
+ application of eliminate()!
+
+ @param matrix
+ Matrix in upper diagonal form, as e.g. generated by eliminate()
+
+ @param rows
+ Number of rows in matrix
+
+ @param cols
+ Number of columns in matrix
+
+ @param result
+ Result vector. Given matrix must have space for one column (rows entries).
+
+ @return true, if back substitution was possible (i.e. no division
+ by zero occured).
+ */
+template <class Matrix, class Vector, typename BaseType>
+bool substitute( const Matrix& matrix,
+ int rows,
+ int cols,
+ Vector& result )
+{
+ BaseType temp;
+ int j,k; /* *must* be signed, when looping like: j>=0 ! */
+
+ /* substitute backwards */
+ for(j=rows-1; j>=0; --j)
+ {
+ temp = 0.0;
+ for(k=j+1; k<cols-1; ++k)
+ temp += matrix[ j*cols + k ] * result[k];
+
+ if( matrix[ j*cols + j ] == 0.0 )
+ return false; /* imminent division by zero! */
+
+ result[j] = (matrix[ j*cols + cols-1 ] - temp) / matrix[ j*cols + j ];
+ }
+
+ /* everything went well */
+ return true;
+}
+
+
+/** This method determines solution of given linear system, if any
+
+ This is a wrapper for eliminate and substitute, given matrix must
+ contain right side of equation as the last column.
+
+ @param matrix
+ The matrix to operate on. Last column is the result vector (right
+ hand side of the linear equation). After successful termination,
+ the matrix is upper triangular. The matrix is expected to be in
+ row major order.
+
+ @param rows
+ Number of rows in matrix
+
+ @param cols
+ Number of columns in matrix
+
+ @param minPivot
+ If the pivot element gets lesser than minPivot, this method fails,
+ otherwise, elimination succeeds and true is returned.
+
+ @return true, if elimination succeeded.
+ */
+template <class Matrix, class Vector, typename BaseType>
+bool solve( Matrix& matrix,
+ int rows,
+ int cols,
+ Vector& result,
+ BaseType minPivot )
+{
+ if( eliminate<Matrix,BaseType>(matrix, rows, cols, minPivot) )
+ return substitute<Matrix,Vector,BaseType>(matrix, rows, cols, result);
+
+ return false;
+}
diff --git a/basegfx/test/basegfx1d.cxx b/basegfx/test/basegfx1d.cxx
new file mode 100644
index 000000000000..41ac65da56e3
--- /dev/null
+++ b/basegfx/test/basegfx1d.cxx
@@ -0,0 +1,73 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basegfx.hxx"
+// autogenerated file with codegen.pl
+
+#include "cppunit/TestAssert.h"
+#include "cppunit/TestFixture.h"
+#include "cppunit/extensions/HelperMacros.h"
+#include "cppunit/plugin/TestPlugIn.h"
+
+namespace basegfx1d
+{
+
+class b1drange : public CppUnit::TestFixture
+{
+public:
+ // initialise your test code values here.
+ void setUp()
+ {
+ }
+
+ void tearDown()
+ {
+ }
+
+ // insert your test code here.
+ // this is only demonstration code
+ void EmptyMethod()
+ {
+ // CPPUNIT_ASSERT_MESSAGE("a message", 1 == 1);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(b1drange);
+ CPPUNIT_TEST(EmptyMethod);
+ CPPUNIT_TEST_SUITE_END();
+}; // class b1drange
+
+// -----------------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION(basegfx1d::b1drange);
+} // namespace basegfx1d
+
+CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/basegfx/test/basegfx2d.cxx b/basegfx/test/basegfx2d.cxx
new file mode 100644
index 000000000000..31005a158982
--- /dev/null
+++ b/basegfx/test/basegfx2d.cxx
@@ -0,0 +1,1461 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basegfx.hxx"
+// autogenerated file with codegen.pl
+
+#include "cppunit/TestAssert.h"
+#include "cppunit/TestFixture.h"
+#include "cppunit/extensions/HelperMacros.h"
+
+#include <basegfx/matrix/b2dhommatrix.hxx>
+#include <basegfx/polygon/b2dpolygon.hxx>
+#include <basegfx/polygon/b2dpolygontools.hxx>
+#include <basegfx/curve/b2dcubicbezier.hxx>
+#include <basegfx/curve/b2dbeziertools.hxx>
+#include <basegfx/polygon/b2dpolypolygontools.hxx>
+#include <basegfx/polygon/b2dpolygonclipper.hxx>
+#include <basegfx/polygon/b2dpolypolygon.hxx>
+#include <basegfx/range/b2dpolyrange.hxx>
+#include <basegfx/numeric/ftools.hxx>
+#include <basegfx/color/bcolor.hxx>
+#include <basegfx/color/bcolortools.hxx>
+
+#include <basegfx/tools/debugplotter.hxx>
+
+#include <iostream>
+#include <fstream>
+
+using namespace ::basegfx;
+
+
+namespace basegfx2d
+{
+
+class b2dsvgdimpex : public CppUnit::TestFixture
+{
+private:
+ ::rtl::OUString aPath0;
+ ::rtl::OUString aPath1;
+ ::rtl::OUString aPath2;
+ ::rtl::OUString aPath3;
+
+public:
+ // initialise your test code values here.
+ void setUp()
+ {
+ // simple rectangle
+ aPath0 = ::rtl::OUString::createFromAscii(
+ "M 10 10-10 10-10-10 10-10Z" );
+
+ // simple bezier polygon
+ aPath1 = ::rtl::OUString::createFromAscii(
+ "m11430 0c-8890 3810 5715 6985 5715 6985 "
+ "0 0-17145-1905-17145-1905 0 0 22860-10160 "
+ "16510 6350-6350 16510-3810-11430-3810-11430z" );
+
+ // '@' as a bezier polygon
+ aPath2 = ::rtl::OUString::createFromAscii(
+ "m1917 1114c-89-189-233-284-430-284-167 "
+ "0-306 91-419 273-113 182-170 370-170 564 "
+ "0 145 33 259 98 342 65 84 150 126 257 126 "
+ "77 0 154-19 231-57 77-38 147-97 210-176 63"
+ "-79 99-143 109-190 38-199 76-398 114-598z"
+ "m840 1646c-133 73-312 139-537 197-225 57"
+ "-440 86-644 87-483-1-866-132-1150-392-284"
+ "-261-426-619-426-1076 0-292 67-560 200-803 "
+ "133-243 321-433 562-569 241-136 514-204 821"
+ "-204 405 0 739 125 1003 374 264 250 396 550 "
+ "396 899 0 313-88 576-265 787-177 212-386 318"
+ "-627 318-191 0-308-94-352-281-133 187-315 281"
+ "-546 281-172 0-315-67-428-200-113-133-170-301"
+ "-170-505 0-277 90-527 271-751 181-223 394"
+ "-335 640-335 196 0 353 83 470 250 13-68 26"
+ "-136 41-204 96 0 192 0 288 0-74 376-148 752"
+ "-224 1128-21 101-31 183-31 245 0 39 9 70 26 "
+ "93 17 24 39 36 67 36 145 0 279-80 400-240 121"
+ "-160 182-365 182-615 0-288-107-533-322-734"
+ "-215-201-487-301-816-301-395 0-715 124-960 "
+ "373-245 249-368 569-368 958 0 385 119 685 "
+ "357 900 237 216 557 324 958 325 189-1 389-27 "
+ "600-77 211-52 378-110 503-174 27 70 54 140 81 210z" );
+
+ // first part of 'Hello World' as a line polygon
+ aPath3 = ::rtl::OUString::createFromAscii(
+ "m1598 125h306v2334h-306v-1105h-1293v1105h-305v"
+ "-2334h305v973h1293zm2159 1015 78-44 85 235-91 "
+ "47-91 40-90 34-90 29-89 21-88 16-88 10-88 3-102"
+ "-4-97-12-91-19-85-26-40-16-39-18-38-20-36-22-34"
+ "-24-33-26-32-27-30-30-29-31-27-33-25-33-23-36-21"
+ "-36-19-38-18-40-16-40-26-86-18-91-11-97-4-103 3"
+ "-98 11-94 17-89 24-84 31-79 37-75 22-35 23-34 24"
+ "-33 27-32 28-30 29-28 31-27 31-24 33-22 34-21 35"
+ "-18 37-17 38-14 38-13 41-11 41-8 86-12 91-4 82 4 "
+ "78 10 37 9 37 9 36 12 35 14 33 15 33 17 32 19 31 "
+ "21 30 22 30 25 55 54 26 29 24 31 22 32 21 33 19 "
+ "34 18 36 30 74 23 80 17 84 10 89 3 94v78h-1277l6 "
+ "75 10 70 14 66 19 62 23 57 13 26 14 26 15 25 17 "
+ "23 17 22 19 21 19 20 21 18 21 18 23 16 23 14 24 "
+ "14 26 12 26 11 27 10 28 8 59 13 63 7 67 3 80-3 81"
+ "-9 79-14 80-21 78-26 79-32zm-1049-808-12 53h963l"
+ "-7-51-11-49-14-46-17-43-21-40-24-38-27-36-31-32"
+ "-33-29-35-25-37-22-38-17-40-14-41-9-42-6-44-2-48 "
+ "2-46 6-44 9-42 13-40 17-38 21-36 24-34 28-32 32"
+ "-29 34-26 38-23 41-20 44-17 47zm1648-1293h288v"
+ "2459h-288zm752-2459h288v2459h-288zm1286-1750 86-11 "
+ "91-4 91 4 85 12 42 8 39 11 39 13 38 14 36 17 35 18 "
+ "34 20 33 23 31 24 30 26 29 28 28 30 26 32 25 33 23 "
+ "34 21 35 37 75 31 80 24 84 16 90 11 94 3 100-3 100"
+ "-11 95-16 89-24 85-31 80-37 74-21 35-23 35-25 32-26 "
+ "32-28 30-29 28-30 26-31 24-33 22-34 21-35 18-36 17"
+ "-38 14-39 13-39 10-42 9-85 12-91 4-91-4-86-12-41-9"
+ "-40-10-39-13-37-14-36-17-35-18-34-21-33-22-31-24-30"
+ "-26-29-28-28-30-26-32-25-32-23-35-21-35-38-74-30-80"
+ "-24-85-17-89-11-95-3-100 3-101 11-95 17-90 24-85 30"
+ "-79 38-75 21-35 23-35 25-32 26-32 28-30 29-28 30-26 "
+ "31-24 33-22 34-20 35-18 36-16 37-15 39-12 40-11z" );
+ }
+
+ void tearDown()
+ {
+ }
+
+ void impex()
+ {
+ B2DPolyPolygon aPoly;
+ ::rtl::OUString aExport;
+
+ CPPUNIT_ASSERT_MESSAGE("importing simple rectangle from SVG-D",
+ tools::importFromSvgD( aPoly,
+ aPath0 ));
+ aExport = tools::exportToSvgD( aPoly );
+ const char* sExportString = "m10 10h-20v-20h20z";
+ CPPUNIT_ASSERT_MESSAGE("exporting rectangle to SVG-D",
+ !aExport.compareToAscii(sExportString) );
+ CPPUNIT_ASSERT_MESSAGE("importing simple rectangle from SVG-D (round-trip",
+ tools::importFromSvgD( aPoly,
+ aExport ));
+ aExport = tools::exportToSvgD( aPoly );
+ CPPUNIT_ASSERT_MESSAGE("exporting rectangle to SVG-D (round-trip)",
+ !aExport.compareToAscii(sExportString));
+
+ CPPUNIT_ASSERT_MESSAGE("importing simple bezier polygon from SVG-D",
+ tools::importFromSvgD( aPoly,
+ aPath1 ));
+ aExport = tools::exportToSvgD( aPoly );
+
+ // Adaptions for B2DPolygon bezier change (see #i77162#):
+ //
+ // The import/export of aPath1 does not reproduce aExport again. This is
+ // correct since aPath1 contains a segment with non-used control points
+ // which gets exported now correctly as 'l' and also a point (#4, index 3)
+ // with C2 continuity which produces a 's' staement now.
+ //
+ // The old SVGexport identified nun-used ControlVectors erraneously as bezier segments
+ // because the 2nd vector at the start point was used, even when added
+ // with start point was identical to end point. Exactly for that reason
+ // i reworked the B2DPolygon to use prev, next control points.
+ //
+ // so for correct unit test i add the new exported string here as sExportStringSimpleBezier
+ // and compare to it.
+ const char* sExportStringSimpleBezier =
+ "m11430 0c-8890 3810 5715 6985 5715 6985"
+ "l-17145-1905c0 0 22860-10160 16510 6350"
+ "s-3810-11430-3810-11430z";
+ CPPUNIT_ASSERT_MESSAGE("exporting bezier polygon to SVG-D", !aExport.compareToAscii(sExportStringSimpleBezier));
+
+ // Adaptions for B2DPolygon bezier change (see #i77162#):
+ //
+ // a 2nd good test is that re-importing of aExport has to create the same
+ // B2DPolPolygon again:
+ B2DPolyPolygon aReImport;
+ CPPUNIT_ASSERT_MESSAGE("importing simple bezier polygon from SVG-D", tools::importFromSvgD( aReImport, aExport));
+ CPPUNIT_ASSERT_MESSAGE("re-imported polygon needs to be identical", aReImport == aPoly);
+
+ CPPUNIT_ASSERT_MESSAGE("importing '@' from SVG-D", tools::importFromSvgD( aPoly, aPath2 ));
+ aExport = tools::exportToSvgD( aPoly );
+
+ // Adaptions for B2DPolygon bezier change (see #i77162#):
+ //
+ // same here, the corrected export with the corrected B2DPolygon is simply more efficient,
+ // so i needed to change the compare string. Also adding the re-import comparison below.
+ const char* sExportString1 =
+ "m1917 1114c-89-189-233-284-430-284-167 0-306 91-419 273s-170 370-17"
+ "0 564c0 145 33 259 98 342 65 84 150 126 257 126q115.5 0 231-57s147-97 210-176 99-143 109-190c38-199 76-398 114"
+ "-598zm840 1646c-133 73-312 139-537 197-225 57-440 86-644 87-483-1-866-132-1150-392-284-261-426-619-426-1076 0-"
+ "292 67-560 200-803s321-433 562-569 514-204 821-204c405 0 739 125 1003 374 264 250 396 550 396 899 0 313-88 576"
+ "-265 787q-265.5 318-627 318c-191 0-308-94-352-281-133 187-315 281-546 281-172 0-315-67-428-200s-170-301-170-50"
+ "5c0-277 90-527 271-751 181-223 394-335 640-335 196 0 353 83 470 250 13-68 26-136 41-204q144 0 288 0c-74 376-14"
+ "8 752-224 1128-21 101-31 183-31 245 0 39 9 70 26 93 17 24 39 36 67 36 145 0 279-80 400-240s182-365 182-615c0-2"
+ "88-107-533-322-734s-487-301-816-301c-395 0-715 124-960 373s-368 569-368 958q0 577.5 357 900c237 216 557 324 95"
+ "8 325 189-1 389-27 600-77 211-52 378-110 503-174q40.5 105 81 210z";
+ CPPUNIT_ASSERT_MESSAGE("re-importing '@' from SVG-D", tools::importFromSvgD( aReImport, aExport));
+ CPPUNIT_ASSERT_MESSAGE("re-imported '@' needs to be identical", aReImport == aPoly);
+
+ CPPUNIT_ASSERT_MESSAGE("exporting '@' to SVG-D", !aExport.compareToAscii(sExportString1));
+ CPPUNIT_ASSERT_MESSAGE("importing '@' from SVG-D (round-trip",
+ tools::importFromSvgD( aPoly,
+ aExport ));
+ aExport = tools::exportToSvgD( aPoly );
+ CPPUNIT_ASSERT_MESSAGE("exporting '@' to SVG-D (round-trip)",
+ !aExport.compareToAscii(sExportString1));
+
+
+ CPPUNIT_ASSERT_MESSAGE("importing complex polygon from SVG-D",
+ tools::importFromSvgD( aPoly,
+ aPath3 ));
+ aExport = tools::exportToSvgD( aPoly );
+ const char* sExportString2 =
+ "m1598 125h306v2334h-306v-1105h-1293v1105h-305v-2334h305v973h1293"
+ "zm2159 1015 78-44 85 235-91 47-91 40-90 34-90 29-89 21-88 16-88 10-88 3-102-4-97"
+ "-12-91-19-85-26-40-16-39-18-38-20-36-22-34-24-33-26-32-27-30-30-29-31-27-33-25-3"
+ "3-23-36-21-36-19-38-18-40-16-40-26-86-18-91-11-97-4-103 3-98 11-94 17-89 24-84 3"
+ "1-79 37-75 22-35 23-34 24-33 27-32 28-30 29-28 31-27 31-24 33-22 34-21 35-18 37-"
+ "17 38-14 38-13 41-11 41-8 86-12 91-4 82 4 78 10 37 9 37 9 36 12 35 14 33 15 33 1"
+ "7 32 19 31 21 30 22 30 25 55 54 26 29 24 31 22 32 21 33 19 34 18 36 30 74 23 80 "
+ "17 84 10 89 3 94v78h-1277l6 75 10 70 14 66 19 62 23 57 13 26 14 26 15 25 17 23 1"
+ "7 22 19 21 19 20 21 18 21 18 23 16 23 14 24 14 26 12 26 11 27 10 28 8 59 13 63 7"
+ " 67 3 80-3 81-9 79-14 80-21 78-26 79-32zm-1049-808-12 53h963l-7-51-11-49-14-46-1"
+ "7-43-21-40-24-38-27-36-31-32-33-29-35-25-37-22-38-17-40-14-41-9-42-6-44-2-48 2-4"
+ "6 6-44 9-42 13-40 17-38 21-36 24-34 28-32 32-29 34-26 38-23 41-20 44-17 47zm1648"
+ "-1293h288v2459h-288zm752-2459h288v2459h-288zm1286-1750 86-11 91-4 91 4 85 12 42 "
+ "8 39 11 39 13 38 14 36 17 35 18 34 20 33 23 31 24 30 26 29 28 28 30 26 32 25 33 "
+ "23 34 21 35 37 75 31 80 24 84 16 90 11 94 3 100-3 100-11 95-16 89-24 85-31 80-37"
+ " 74-21 35-23 35-25 32-26 32-28 30-29 28-30 26-31 24-33 22-34 21-35 18-36 17-38 1"
+ "4-39 13-39 10-42 9-85 12-91 4-91-4-86-12-41-9-40-10-39-13-37-14-36-17-35-18-34-2"
+ "1-33-22-31-24-30-26-29-28-28-30-26-32-25-32-23-35-21-35-38-74-30-80-24-85-17-89-"
+ "11-95-3-100 3-101 11-95 17-90 24-85 30-79 38-75 21-35 23-35 25-32 26-32 28-30 29"
+ "-28 30-26 31-24 33-22 34-20 35-18 36-16 37-15 39-12 40-11z";
+ CPPUNIT_ASSERT_MESSAGE("exporting complex polygon to SVG-D",
+ !aExport.compareToAscii(sExportString2));
+ CPPUNIT_ASSERT_MESSAGE("importing complex polygon from SVG-D (round-trip",
+ tools::importFromSvgD( aPoly,
+ aExport ));
+ aExport = tools::exportToSvgD( aPoly );
+ CPPUNIT_ASSERT_MESSAGE("exporting complex polygon to SVG-D (round-trip)",
+ !aExport.compareToAscii(sExportString2));
+
+ const B2DPolygon aRect(
+ tools::createPolygonFromRect( B2DRange(0.0,0.0,4000.0,4000.0) ));
+ aExport = tools::exportToSvgD( B2DPolyPolygon(aRect), false, false);
+
+ const char* sExportStringRect = "M0 0H4000V4000H0Z";
+ CPPUNIT_ASSERT_MESSAGE("exporting to rectangle svg-d string",
+ !aExport.compareToAscii(sExportStringRect));
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(b2dsvgdimpex);
+ CPPUNIT_TEST(impex);
+ CPPUNIT_TEST_SUITE_END();
+}; // class b2dsvgdimpex
+
+class b2dpolyrange : public CppUnit::TestFixture
+{
+private:
+public:
+ void setUp()
+ {}
+
+ void tearDown()
+ {}
+
+ void check()
+ {
+ B2DPolyRange aRange;
+ aRange.appendElement(B2DRange(0,0,1,1),ORIENTATION_POSITIVE);
+ aRange.appendElement(B2DRange(2,2,3,3),ORIENTATION_POSITIVE);
+
+ CPPUNIT_ASSERT_MESSAGE("simple poly range - count",
+ aRange.count() == 2);
+ CPPUNIT_ASSERT_MESSAGE("simple poly range - first element",
+ aRange.getElement(0).head == B2DRange(0,0,1,1));
+ CPPUNIT_ASSERT_MESSAGE("simple poly range - second element",
+ aRange.getElement(1).head == B2DRange(2,2,3,3));
+
+ // B2DPolyRange relies on correctly orientated rects
+ const B2DRange aRect(0,0,1,1);
+ CPPUNIT_ASSERT_MESSAGE("createPolygonFromRect - correct orientation",
+ tools::getOrientation(
+ tools::createPolygonFromRect(aRect)) == ORIENTATION_POSITIVE );
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(b2dpolyrange);
+ CPPUNIT_TEST(check);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+class b2dbeziertools : public CppUnit::TestFixture
+{
+private:
+ B2DCubicBezier aHalfCircle; // not exactly, but a look-alike
+ B2DCubicBezier aQuarterCircle; // not exactly, but a look-alike
+ B2DCubicBezier aLoop; // identical endpoints, curve goes back to where it started
+ B2DCubicBezier aStraightLineDistinctEndPoints; // truly a line
+ B2DCubicBezier aStraightLineDistinctEndPoints2; // truly a line, with slightly different control points
+ B2DCubicBezier aStraightLineIdenticalEndPoints; // degenerate case of aLoop
+ B2DCubicBezier aStraightLineIdenticalEndPoints2;// degenerate case of aLoop, with slightly different control points
+ B2DCubicBezier aCrossing; // curve self-intersects somewhere in the middle
+ B2DCubicBezier aCusp; // curve has a point of undefined tangency
+
+
+public:
+ // initialise your test code values here.
+ void setUp()
+ {
+ const B2DPoint a00(0.0, 0.0);
+ const B2DPoint a10(1.0, 0.0);
+ const B2DPoint a11(1.0, 1.0);
+ const B2DPoint a01(0.0, 1.0);
+ const B2DPoint middle( 0.5, 0.5 );
+ const B2DPoint quarterDown( 0.25, 0.25 );
+ const B2DPoint quarterUp( 0.75, 0.75 );
+
+ aHalfCircle = B2DCubicBezier(a00, a01, a11, a10);
+
+ // The spline control points become
+ //
+ // (R * cos(A), R * sin(A))
+ // (R * cos(A) - h * sin(A), R * sin(A) + h * cos (A))
+ // (R * cos(B) + h * sin(B), R * sin(B) - h * cos (B))
+ // (R * cos(B), R * sin(B))
+ //
+ // where h = 4/3 * R * tan ((B-A)/4)
+ //
+ // with R being the radius, A start angle and B end angle (A < B).
+ //
+ // (This calculation courtesy Carl Worth, himself based on
+ // Michael Goldapp and Dokken/Daehlen)
+
+ // Choosing R=1, A=0, B=pi/2
+ const double h( 4.0/3.0 * tan(M_PI/8.0) );
+ aQuarterCircle = B2DCubicBezier(a10 + B2DPoint(1.0,0.0),
+ B2DPoint(B2DPoint( 1.0, h ) + B2DPoint(1.0,0.0)),
+ B2DPoint(B2DPoint( h, 1.0) + B2DPoint(1.0,0.0)),
+ a01 + B2DPoint(1.0,0.0));
+
+ aCusp = B2DCubicBezier(a00 + B2DPoint(2.0,0.0),
+ B2DPoint(a11 + B2DPoint(2.0,0.0)),
+ B2DPoint(a01 + B2DPoint(2.0,0.0)),
+ a10 + B2DPoint(2.0,0.0));
+
+ aLoop = B2DCubicBezier(a00 + B2DPoint(3.0,0.0),
+ B2DPoint(a01 + B2DPoint(3.0,0.0)),
+ B2DPoint(a10 + B2DPoint(3.0,0.0)),
+ a00 + B2DPoint(3.0,0.0));
+
+ aStraightLineDistinctEndPoints = B2DCubicBezier(a00 + B2DPoint(4.0,0.0),
+ B2DPoint(middle + B2DPoint(4.0,0.0)),
+ B2DPoint(middle + B2DPoint(4.0,0.0)),
+ a11 + B2DPoint(4.0,0.0));
+
+ aStraightLineDistinctEndPoints2 = B2DCubicBezier(a00 + B2DPoint(5.0,0.0),
+ B2DPoint(quarterDown + B2DPoint(5.0,0.0)),
+ B2DPoint(quarterUp + B2DPoint(5.0,0.0)),
+ a11 + B2DPoint(5.0,0.0));
+
+ aStraightLineIdenticalEndPoints = B2DCubicBezier(a00 + B2DPoint(6.0,0.0),
+ B2DPoint(a11 + B2DPoint(6.0,0.0)),
+ B2DPoint(a11 + B2DPoint(6.0,0.0)),
+ a00 + B2DPoint(6.0,0.0));
+
+ aStraightLineIdenticalEndPoints2 = B2DCubicBezier(a00 + B2DPoint(7.0,0.0),
+ B2DPoint(quarterDown + B2DPoint(7.0,0.0)),
+ B2DPoint(quarterUp + B2DPoint(7.0,0.0)),
+ a00 + B2DPoint(7.0,0.0));
+
+ aCrossing = B2DCubicBezier(a00 + B2DPoint(8.0,0.0),
+ B2DPoint(B2DPoint(2.0,2.0) + B2DPoint(8.0,0.0)),
+ B2DPoint(B2DPoint(-1.0,2.0) + B2DPoint(8.0,0.0)),
+ a10 + B2DPoint(8.0,0.0));
+
+ ::std::ofstream output("bez_testcases.gnuplot");
+ DebugPlotter aPlotter( "Original curves",
+ output );
+
+ aPlotter.plot( aHalfCircle,
+ "half circle" );
+ aPlotter.plot( aQuarterCircle,
+ "quarter circle" );
+ aPlotter.plot( aCusp,
+ "cusp" );
+ aPlotter.plot( aLoop,
+ "loop" );
+ aPlotter.plot( aStraightLineDistinctEndPoints,
+ "straight line 0" );
+ aPlotter.plot( aStraightLineDistinctEndPoints2,
+ "straight line 1" );
+ aPlotter.plot( aStraightLineIdenticalEndPoints,
+ "straight line 2" );
+ aPlotter.plot( aStraightLineIdenticalEndPoints2,
+ "straight line 3" );
+ aPlotter.plot( aCrossing,
+ "crossing" );
+
+ // break up a complex bezier (loopy, spiky or self intersecting)
+ // into simple segments (left to right)
+ B2DCubicBezier aSegment = aCrossing;
+ double fExtremePos(0.0);
+
+ aPlotter.plot( aSegment, "segment" );
+ while(aSegment.getMinimumExtremumPosition(fExtremePos))
+ {
+ aSegment.split(fExtremePos, 0, &aSegment);
+ aPlotter.plot( aSegment, "segment" );
+ }
+ }
+
+ void tearDown()
+ {
+ }
+
+ void adaptiveByDistance()
+ {
+ ::std::ofstream output("bez_adaptiveByDistance.gnuplot");
+ DebugPlotter aPlotter( "distance-adaptive subdivision",
+ output );
+
+ const double fBound( 0.0001 );
+ B2DPolygon result;
+
+ aHalfCircle.adaptiveSubdivideByDistance(result, fBound);
+ aPlotter.plot(result,
+ "half circle"); result.clear();
+
+ aQuarterCircle.adaptiveSubdivideByDistance(result, fBound);
+ aPlotter.plot(result,
+ "quarter circle"); result.clear();
+
+ aLoop.adaptiveSubdivideByDistance(result, fBound);
+ aPlotter.plot(result,
+ "loop"); result.clear();
+
+ aStraightLineDistinctEndPoints.adaptiveSubdivideByDistance(result, fBound);
+ aPlotter.plot(result,
+ "straight line 0"); result.clear();
+
+ aStraightLineDistinctEndPoints2.adaptiveSubdivideByDistance(result, fBound);
+ aPlotter.plot(result,
+ "straight line 1"); result.clear();
+
+ aStraightLineIdenticalEndPoints.adaptiveSubdivideByDistance(result, fBound);
+ aPlotter.plot(result,
+ "straight line 2"); result.clear();
+
+ aStraightLineIdenticalEndPoints2.adaptiveSubdivideByDistance(result, fBound);
+ aPlotter.plot(result,
+ "straight line 3"); result.clear();
+
+ aCrossing.adaptiveSubdivideByDistance(result, fBound);
+ aPlotter.plot(result,
+ "straight line 4"); result.clear();
+
+ aCusp.adaptiveSubdivideByDistance(result, fBound);
+ aPlotter.plot(result,
+ "straight line 5"); result.clear();
+
+ CPPUNIT_ASSERT_MESSAGE("adaptiveByDistance", true );
+ }
+
+ void adaptiveByAngle()
+ {
+ const double fBound( 5.0 );
+ B2DPolygon result;
+
+ ::std::ofstream output("bez_adaptiveByAngle.gnuplot");
+ DebugPlotter aPlotter( "angle-adaptive subdivision",
+ output );
+
+ aHalfCircle.adaptiveSubdivideByAngle(result, fBound, true);
+ aPlotter.plot(result,
+ "half circle"); result.clear();
+
+ aQuarterCircle.adaptiveSubdivideByAngle(result, fBound, true);
+ aPlotter.plot(result,
+ "quarter cirle"); result.clear();
+
+ aLoop.adaptiveSubdivideByAngle(result, fBound, true);
+ aPlotter.plot(result,
+ "loop"); result.clear();
+
+ aStraightLineDistinctEndPoints.adaptiveSubdivideByAngle(result, fBound, true);
+ aPlotter.plot(result,
+ "straight line 0"); result.clear();
+
+ aStraightLineDistinctEndPoints2.adaptiveSubdivideByAngle(result, fBound, true);
+ aPlotter.plot(result,
+ "straight line 1"); result.clear();
+
+ aStraightLineIdenticalEndPoints.adaptiveSubdivideByAngle(result, fBound, true);
+ aPlotter.plot(result,
+ "straight line 2"); result.clear();
+
+ aStraightLineIdenticalEndPoints2.adaptiveSubdivideByAngle(result, fBound, true);
+ aPlotter.plot(result,
+ "straight line 3"); result.clear();
+
+ aCrossing.adaptiveSubdivideByAngle(result, fBound, true);
+ aPlotter.plot(result,
+ "straight line 4"); result.clear();
+
+ aCusp.adaptiveSubdivideByAngle(result, fBound, true);
+ aPlotter.plot(result,
+ "straight line 5"); result.clear();
+
+ CPPUNIT_ASSERT_MESSAGE("adaptiveByAngle", true );
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(b2dbeziertools);
+ CPPUNIT_TEST(adaptiveByDistance); // TODO: add tests for quadratic bezier (subdivide and degree reduction)
+ CPPUNIT_TEST(adaptiveByAngle);
+ CPPUNIT_TEST_SUITE_END();
+}; // class b2dcubicbezier
+
+
+class b2dcubicbezier : public CppUnit::TestFixture
+{
+public:
+ // initialise your test code values here.
+ void setUp()
+ {
+ }
+
+ void tearDown()
+ {
+ }
+
+ // insert your test code here.
+ void EmptyMethod()
+ {
+ // this is demonstration code
+ // CPPUNIT_ASSERT_MESSAGE("a message", 1 == 1);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(b2dcubicbezier);
+ CPPUNIT_TEST(EmptyMethod);
+ CPPUNIT_TEST_SUITE_END();
+}; // class b2dcubicbezier
+
+
+class b2dhommatrix : public CppUnit::TestFixture
+{
+private:
+ B2DHomMatrix maIdentity;
+ B2DHomMatrix maScale;
+ B2DHomMatrix maTranslate;
+ B2DHomMatrix maShear;
+ B2DHomMatrix maAffine;
+ B2DHomMatrix maPerspective;
+
+public:
+ // initialise your test code values here.
+ void setUp()
+ {
+ // setup some test matrices
+ maIdentity.identity(); // force compact layout
+ maIdentity.set(0,0, 1.0);
+ maIdentity.set(0,1, 0.0);
+ maIdentity.set(0,2, 0.0);
+ maIdentity.set(1,0, 0.0);
+ maIdentity.set(1,1, 1.0);
+ maIdentity.set(1,2, 0.0);
+
+ maScale.identity(); // force compact layout
+ maScale.set(0,0, 2.0);
+ maScale.set(1,1, 20.0);
+
+ maTranslate.identity(); // force compact layout
+ maTranslate.set(0,2, 20.0);
+ maTranslate.set(1,2, 2.0);
+
+ maShear.identity(); // force compact layout
+ maShear.set(0,1, 3.0);
+ maShear.set(1,0, 7.0);
+ maShear.set(1,1, 22.0);
+
+ maAffine.identity(); // force compact layout
+ maAffine.set(0,0, 1.0);
+ maAffine.set(0,1, 2.0);
+ maAffine.set(0,2, 3.0);
+ maAffine.set(1,0, 4.0);
+ maAffine.set(1,1, 5.0);
+ maAffine.set(1,2, 6.0);
+
+ maPerspective.set(0,0, 1.0);
+ maPerspective.set(0,1, 2.0);
+ maPerspective.set(0,2, 3.0);
+ maPerspective.set(1,0, 4.0);
+ maPerspective.set(1,1, 5.0);
+ maPerspective.set(1,2, 6.0);
+ maPerspective.set(2,0, 7.0);
+ maPerspective.set(2,1, 8.0);
+ maPerspective.set(2,2, 9.0);
+ }
+
+ void tearDown()
+ {
+ }
+
+ void equal()
+ {
+ B2DHomMatrix aIdentity;
+ B2DHomMatrix aScale;
+ B2DHomMatrix aTranslate;
+ B2DHomMatrix aShear;
+ B2DHomMatrix aAffine;
+ B2DHomMatrix aPerspective;
+
+ // setup some test matrices
+ aIdentity.identity(); // force compact layout
+ aIdentity.set(0,0, 1.0);
+ aIdentity.set(0,1, 0.0);
+ aIdentity.set(0,2, 0.0);
+ aIdentity.set(1,0, 0.0);
+ aIdentity.set(1,1, 1.0);
+ aIdentity.set(1,2, 0.0);
+
+ aScale.identity(); // force compact layout
+ aScale.set(0,0, 2.0);
+ aScale.set(1,1, 20.0);
+
+ aTranslate.identity(); // force compact layout
+ aTranslate.set(0,2, 20.0);
+ aTranslate.set(1,2, 2.0);
+
+ aShear.identity(); // force compact layout
+ aShear.set(0,1, 3.0);
+ aShear.set(1,0, 7.0);
+ aShear.set(1,1, 22.0);
+
+ aAffine.identity(); // force compact layout
+ aAffine.set(0,0, 1.0);
+ aAffine.set(0,1, 2.0);
+ aAffine.set(0,2, 3.0);
+ aAffine.set(1,0, 4.0);
+ aAffine.set(1,1, 5.0);
+ aAffine.set(1,2, 6.0);
+
+ aPerspective.set(0,0, 1.0);
+ aPerspective.set(0,1, 2.0);
+ aPerspective.set(0,2, 3.0);
+ aPerspective.set(1,0, 4.0);
+ aPerspective.set(1,1, 5.0);
+ aPerspective.set(1,2, 6.0);
+ aPerspective.set(2,0, 7.0);
+ aPerspective.set(2,1, 8.0);
+ aPerspective.set(2,2, 9.0);
+
+ CPPUNIT_ASSERT_MESSAGE("operator==: identity matrix", aIdentity == maIdentity);
+ CPPUNIT_ASSERT_MESSAGE("operator==: scale matrix", aScale == maScale);
+ CPPUNIT_ASSERT_MESSAGE("operator==: translate matrix", aTranslate == maTranslate);
+ CPPUNIT_ASSERT_MESSAGE("operator==: shear matrix", aShear == maShear);
+ CPPUNIT_ASSERT_MESSAGE("operator==: affine matrix", aAffine == maAffine);
+ CPPUNIT_ASSERT_MESSAGE("operator==: perspective matrix", aPerspective == maPerspective);
+ }
+
+ void identity()
+ {
+ B2DHomMatrix ident;
+
+ CPPUNIT_ASSERT_MESSAGE("identity", maIdentity == ident);
+ }
+
+ void scale()
+ {
+ B2DHomMatrix mat;
+ mat.scale(2.0,20.0);
+ CPPUNIT_ASSERT_MESSAGE("scale", maScale == mat);
+ }
+
+ void translate()
+ {
+ B2DHomMatrix mat;
+ mat.translate(20.0,2.0);
+ CPPUNIT_ASSERT_MESSAGE("translate", maTranslate == mat);
+ }
+
+ void shear()
+ {
+ B2DHomMatrix mat;
+ mat.shearX(3.0);
+ mat.shearY(7.0);
+ CPPUNIT_ASSERT_MESSAGE("translate", maShear == mat);
+ }
+
+ void multiply()
+ {
+ B2DHomMatrix affineAffineProd;
+
+ affineAffineProd.set(0,0, 9);
+ affineAffineProd.set(0,1, 12);
+ affineAffineProd.set(0,2, 18);
+ affineAffineProd.set(1,0, 24);
+ affineAffineProd.set(1,1, 33);
+ affineAffineProd.set(1,2, 48);
+
+ B2DHomMatrix affinePerspectiveProd;
+
+ affinePerspectiveProd.set(0,0, 30);
+ affinePerspectiveProd.set(0,1, 36);
+ affinePerspectiveProd.set(0,2, 42);
+ affinePerspectiveProd.set(1,0, 66);
+ affinePerspectiveProd.set(1,1, 81);
+ affinePerspectiveProd.set(1,2, 96);
+ affinePerspectiveProd.set(2,0, 7);
+ affinePerspectiveProd.set(2,1, 8);
+ affinePerspectiveProd.set(2,2, 9);
+
+ B2DHomMatrix perspectiveAffineProd;
+
+ perspectiveAffineProd.set(0,0, 9);
+ perspectiveAffineProd.set(0,1, 12);
+ perspectiveAffineProd.set(0,2, 18);
+ perspectiveAffineProd.set(1,0, 24);
+ perspectiveAffineProd.set(1,1, 33);
+ perspectiveAffineProd.set(1,2, 48);
+ perspectiveAffineProd.set(2,0, 39);
+ perspectiveAffineProd.set(2,1, 54);
+ perspectiveAffineProd.set(2,2, 78);
+
+ B2DHomMatrix perspectivePerspectiveProd;
+
+ perspectivePerspectiveProd.set(0,0, 30);
+ perspectivePerspectiveProd.set(0,1, 36);
+ perspectivePerspectiveProd.set(0,2, 42);
+ perspectivePerspectiveProd.set(1,0, 66);
+ perspectivePerspectiveProd.set(1,1, 81);
+ perspectivePerspectiveProd.set(1,2, 96);
+ perspectivePerspectiveProd.set(2,0, 102);
+ perspectivePerspectiveProd.set(2,1, 126);
+ perspectivePerspectiveProd.set(2,2, 150);
+
+ B2DHomMatrix temp;
+
+ temp = maAffine;
+ temp*=maAffine;
+ CPPUNIT_ASSERT_MESSAGE("multiply: both compact", temp == affineAffineProd);
+
+ temp = maPerspective;
+ temp*=maAffine;
+ CPPUNIT_ASSERT_MESSAGE("multiply: first compact", temp == affinePerspectiveProd);
+
+ temp = maAffine;
+ temp*=maPerspective;
+ CPPUNIT_ASSERT_MESSAGE("multiply: second compact", temp == perspectiveAffineProd);
+
+ temp = maPerspective;
+ temp*=maPerspective;
+ CPPUNIT_ASSERT_MESSAGE("multiply: none compact", temp == perspectivePerspectiveProd);
+ }
+
+ void impFillMatrix(B2DHomMatrix& rSource, double fScaleX, double fScaleY, double fShearX, double fRotate)
+ {
+ // fill rSource with a linear combination of scale, shear and rotate
+ rSource.identity();
+ rSource.scale(fScaleX, fScaleY);
+ rSource.shearX(fShearX);
+ rSource.rotate(fRotate);
+ }
+
+ bool impDecomposeComposeTest(double fScaleX, double fScaleY, double fShearX, double fRotate)
+ {
+ // linear combine matrix with given values
+ B2DHomMatrix aSource;
+ impFillMatrix(aSource, fScaleX, fScaleY, fShearX, fRotate);
+
+ // decompose that matrix
+ B2DTuple aDScale;
+ B2DTuple aDTrans;
+ double fDRot;
+ double fDShX;
+ bool bWorked = aSource.decompose(aDScale, aDTrans, fDRot, fDShX);
+
+ // linear combine another matrix with decomposition results
+ B2DHomMatrix aRecombined;
+ impFillMatrix(aRecombined, aDScale.getX(), aDScale.getY(), fDShX, fDRot);
+
+ // if decomposition worked, matrices need to be the same
+ return bWorked && aSource == aRecombined;
+ }
+
+ void decompose()
+ {
+ // test matrix decompositions. Each matrix decomposed and rebuilt
+ // using the decompose result should be the same as before. Test
+ // with all ranges of values. Translations are not tested since these
+ // are just the two rightmost values and uncritical
+ static double fSX(10.0);
+ static double fSY(12.0);
+ static double fR(45.0 * F_PI180);
+ static double fS(15.0 * F_PI180);
+
+ // check all possible scaling combinations
+ CPPUNIT_ASSERT_MESSAGE("decompose: error test A1", impDecomposeComposeTest(fSX, fSY, 0.0, 0.0));
+ CPPUNIT_ASSERT_MESSAGE("decompose: error test A2", impDecomposeComposeTest(-fSX, fSY, 0.0, 0.0));
+ CPPUNIT_ASSERT_MESSAGE("decompose: error test A3", impDecomposeComposeTest(fSX, -fSY, 0.0, 0.0));
+ CPPUNIT_ASSERT_MESSAGE("decompose: error test A4", impDecomposeComposeTest(-fSX, -fSY, 0.0, 0.0));
+
+ // check all possible scaling combinations with positive rotation
+ CPPUNIT_ASSERT_MESSAGE("decompose: error test B1", impDecomposeComposeTest(fSX, fSY, 0.0, fR));
+ CPPUNIT_ASSERT_MESSAGE("decompose: error test B2", impDecomposeComposeTest(-fSX, fSY, 0.0, fR));
+ CPPUNIT_ASSERT_MESSAGE("decompose: error test B3", impDecomposeComposeTest(fSX, -fSY, 0.0, fR));
+ CPPUNIT_ASSERT_MESSAGE("decompose: error test B4", impDecomposeComposeTest(-fSX, -fSY, 0.0, fR));
+
+ // check all possible scaling combinations with negative rotation
+ CPPUNIT_ASSERT_MESSAGE("decompose: error test C1", impDecomposeComposeTest(fSX, fSY, 0.0, -fR));
+ CPPUNIT_ASSERT_MESSAGE("decompose: error test C2", impDecomposeComposeTest(-fSX, fSY, 0.0, -fR));
+ CPPUNIT_ASSERT_MESSAGE("decompose: error test C3", impDecomposeComposeTest(fSX, -fSY, 0.0, -fR));
+ CPPUNIT_ASSERT_MESSAGE("decompose: error test C4", impDecomposeComposeTest(-fSX, -fSY, 0.0, -fR));
+
+ // check all possible scaling combinations with positive shear
+ CPPUNIT_ASSERT_MESSAGE("decompose: error test D1", impDecomposeComposeTest(fSX, fSY, tan(fS), 0.0));
+ CPPUNIT_ASSERT_MESSAGE("decompose: error test D2", impDecomposeComposeTest(-fSX, fSY, tan(fS), 0.0));
+ CPPUNIT_ASSERT_MESSAGE("decompose: error test D3", impDecomposeComposeTest(fSX, -fSY, tan(fS), 0.0));
+ CPPUNIT_ASSERT_MESSAGE("decompose: error test D4", impDecomposeComposeTest(-fSX, -fSY, tan(fS), 0.0));
+
+ // check all possible scaling combinations with negative shear
+ CPPUNIT_ASSERT_MESSAGE("decompose: error test E1", impDecomposeComposeTest(fSX, fSY, tan(-fS), 0.0));
+ CPPUNIT_ASSERT_MESSAGE("decompose: error test E2", impDecomposeComposeTest(-fSX, fSY, tan(-fS), 0.0));
+ CPPUNIT_ASSERT_MESSAGE("decompose: error test E3", impDecomposeComposeTest(fSX, -fSY, tan(-fS), 0.0));
+ CPPUNIT_ASSERT_MESSAGE("decompose: error test E4", impDecomposeComposeTest(-fSX, -fSY, tan(-fS), 0.0));
+
+ // check all possible scaling combinations with positive rotate and positive shear
+ CPPUNIT_ASSERT_MESSAGE("decompose: error test F1", impDecomposeComposeTest(fSX, fSY, tan(fS), fR));
+ CPPUNIT_ASSERT_MESSAGE("decompose: error test F2", impDecomposeComposeTest(-fSX, fSY, tan(fS), fR));
+ CPPUNIT_ASSERT_MESSAGE("decompose: error test F3", impDecomposeComposeTest(fSX, -fSY, tan(fS), fR));
+ CPPUNIT_ASSERT_MESSAGE("decompose: error test F4", impDecomposeComposeTest(-fSX, -fSY, tan(fS), fR));
+
+ // check all possible scaling combinations with negative rotate and positive shear
+ CPPUNIT_ASSERT_MESSAGE("decompose: error test G1", impDecomposeComposeTest(fSX, fSY, tan(fS), -fR));
+ CPPUNIT_ASSERT_MESSAGE("decompose: error test G2", impDecomposeComposeTest(-fSX, fSY, tan(fS), -fR));
+ CPPUNIT_ASSERT_MESSAGE("decompose: error test G3", impDecomposeComposeTest(fSX, -fSY, tan(fS), -fR));
+ CPPUNIT_ASSERT_MESSAGE("decompose: error test G4", impDecomposeComposeTest(-fSX, -fSY, tan(fS), -fR));
+
+ // check all possible scaling combinations with positive rotate and negative shear
+ CPPUNIT_ASSERT_MESSAGE("decompose: error test H1", impDecomposeComposeTest(fSX, fSY, tan(-fS), fR));
+ CPPUNIT_ASSERT_MESSAGE("decompose: error test H2", impDecomposeComposeTest(-fSX, fSY, tan(-fS), fR));
+ CPPUNIT_ASSERT_MESSAGE("decompose: error test H3", impDecomposeComposeTest(fSX, -fSY, tan(-fS), fR));
+ CPPUNIT_ASSERT_MESSAGE("decompose: error test H4", impDecomposeComposeTest(-fSX, -fSY, tan(-fS), fR));
+
+ // check all possible scaling combinations with negative rotate and negative shear
+ CPPUNIT_ASSERT_MESSAGE("decompose: error test I1", impDecomposeComposeTest(fSX, fSY, tan(-fS), -fR));
+ CPPUNIT_ASSERT_MESSAGE("decompose: error test I2", impDecomposeComposeTest(-fSX, fSY, tan(-fS), -fR));
+ CPPUNIT_ASSERT_MESSAGE("decompose: error test I3", impDecomposeComposeTest(fSX, -fSY, tan(-fS), -fR));
+ CPPUNIT_ASSERT_MESSAGE("decompose: error test I4", impDecomposeComposeTest(-fSX, -fSY, tan(-fS), -fR));
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(b2dhommatrix);
+ CPPUNIT_TEST(equal);
+ CPPUNIT_TEST(identity);
+ CPPUNIT_TEST(scale);
+ CPPUNIT_TEST(translate);
+ CPPUNIT_TEST(shear);
+ CPPUNIT_TEST(multiply);
+ CPPUNIT_TEST(decompose);
+ CPPUNIT_TEST_SUITE_END();
+
+}; // class b2dhommatrix
+
+
+class b2dhompoint : public CppUnit::TestFixture
+{
+public:
+ // initialise your test code values here.
+ void setUp()
+ {
+ }
+
+ void tearDown()
+ {
+ }
+
+ // insert your test code here.
+ void EmptyMethod()
+ {
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(b2dhompoint);
+ CPPUNIT_TEST(EmptyMethod);
+ CPPUNIT_TEST_SUITE_END();
+}; // class b2dhompoint
+
+
+class b2dpoint : public CppUnit::TestFixture
+{
+public:
+ // initialise your test code values here.
+ void setUp()
+ {
+ }
+
+ void tearDown()
+ {
+ }
+
+ // insert your test code here.
+ // this is only demonstration code
+ void EmptyMethod()
+ {
+ // CPPUNIT_ASSERT_MESSAGE("a message", 1 == 1);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(b2dpoint);
+ CPPUNIT_TEST(EmptyMethod);
+ CPPUNIT_TEST_SUITE_END();
+}; // class b2dpoint
+
+
+class b2dpolygon : public CppUnit::TestFixture
+{
+public:
+ // initialise your test code values here.
+ void setUp()
+ {
+ }
+
+ void tearDown()
+ {
+ }
+
+ // insert your test code here.
+ void testBasics()
+ {
+ B2DPolygon aPoly;
+
+ aPoly.appendBezierSegment(B2DPoint(1,1),B2DPoint(2,2),B2DPoint(3,3));
+
+ CPPUNIT_ASSERT_MESSAGE("#1 first polygon point wrong",
+ aPoly.getB2DPoint(0) == B2DPoint(3,3));
+ CPPUNIT_ASSERT_MESSAGE("#1 first control point wrong",
+ aPoly.getPrevControlPoint(0) == B2DPoint(2,2));
+ CPPUNIT_ASSERT_MESSAGE("#1 second control point wrong",
+ aPoly.getNextControlPoint(0) == B2DPoint(3,3));
+ CPPUNIT_ASSERT_MESSAGE("next control point not used",
+ aPoly.isNextControlPointUsed(0) == false);
+
+ aPoly.setNextControlPoint(0,B2DPoint(4,4));
+ CPPUNIT_ASSERT_MESSAGE("#1.1 second control point wrong",
+ aPoly.getNextControlPoint(0) == B2DPoint(4,4));
+ CPPUNIT_ASSERT_MESSAGE("next control point used",
+ aPoly.isNextControlPointUsed(0) == true);
+ CPPUNIT_ASSERT_MESSAGE("areControlPointsUsed() wrong",
+ aPoly.areControlPointsUsed() == true);
+ CPPUNIT_ASSERT_MESSAGE("getContinuityInPoint() wrong",
+ aPoly.getContinuityInPoint(0) == CONTINUITY_C2);
+
+ aPoly.resetControlPoints();
+ CPPUNIT_ASSERT_MESSAGE("resetControlPoints() did not clear",
+ aPoly.getB2DPoint(0) == B2DPoint(3,3));
+ CPPUNIT_ASSERT_MESSAGE("resetControlPoints() did not clear",
+ aPoly.getPrevControlPoint(0) == B2DPoint(3,3));
+ CPPUNIT_ASSERT_MESSAGE("resetControlPoints() did not clear",
+ aPoly.getNextControlPoint(0) == B2DPoint(3,3));
+ CPPUNIT_ASSERT_MESSAGE("areControlPointsUsed() wrong #2",
+ aPoly.areControlPointsUsed() == false);
+
+ aPoly.clear();
+ aPoly.append(B2DPoint(0,0));
+ aPoly.appendBezierSegment(B2DPoint(1,1),B2DPoint(2,2),B2DPoint(3,3));
+
+ CPPUNIT_ASSERT_MESSAGE("#2 first polygon point wrong",
+ aPoly.getB2DPoint(0) == B2DPoint(0,0));
+ CPPUNIT_ASSERT_MESSAGE("#2 first control point wrong",
+ aPoly.getPrevControlPoint(0) == B2DPoint(0,0));
+ CPPUNIT_ASSERT_MESSAGE("#2 second control point wrong",
+ aPoly.getNextControlPoint(0) == B2DPoint(1,1));
+ CPPUNIT_ASSERT_MESSAGE("#2 third control point wrong",
+ aPoly.getPrevControlPoint(1) == B2DPoint(2,2));
+ CPPUNIT_ASSERT_MESSAGE("#2 fourth control point wrong",
+ aPoly.getNextControlPoint(1) == B2DPoint(3,3));
+ CPPUNIT_ASSERT_MESSAGE("#2 second polygon point wrong",
+ aPoly.getB2DPoint(1) == B2DPoint(3,3));
+ }
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(b2dpolygon);
+ CPPUNIT_TEST(testBasics);
+ CPPUNIT_TEST_SUITE_END();
+}; // class b2dpolygon
+
+
+class b2dpolygontools : public CppUnit::TestFixture
+{
+public:
+ // initialise your test code values here.
+ void setUp()
+ {
+ }
+
+ void tearDown()
+ {
+ }
+
+ // insert your test code here.
+ // this is only demonstration code
+ void testIsRectangle()
+ {
+ B2DPolygon aRect1(
+ tools::createPolygonFromRect(
+ B2DRange(0,0,1,1) ) );
+
+ B2DPolygon aRect2;
+ aRect2.append( B2DPoint(0,0) );
+ aRect2.append( B2DPoint(1,0) );
+ aRect2.append( B2DPoint(1,.5));
+ aRect2.append( B2DPoint(1,1) );
+ aRect2.append( B2DPoint(0,1) );
+ aRect2.setClosed(true);
+
+ B2DPolygon aNonRect1;
+ aNonRect1.append( B2DPoint(0,0) );
+ aNonRect1.append( B2DPoint(1,0) );
+ aNonRect1.append( B2DPoint(1,1) );
+ aNonRect1.append( B2DPoint(0.5,1) );
+ aNonRect1.append( B2DPoint(0.5,0) );
+ aNonRect1.setClosed(true);
+
+ B2DPolygon aNonRect2;
+ aNonRect2.append( B2DPoint(0,0) );
+ aNonRect2.append( B2DPoint(1,1) );
+ aNonRect2.append( B2DPoint(1,0) );
+ aNonRect2.append( B2DPoint(0,1) );
+ aNonRect2.setClosed(true);
+
+ B2DPolygon aNonRect3;
+ aNonRect3.append( B2DPoint(0,0) );
+ aNonRect3.append( B2DPoint(1,0) );
+ aNonRect3.append( B2DPoint(1,1) );
+ aNonRect3.setClosed(true);
+
+ B2DPolygon aNonRect4;
+ aNonRect4.append( B2DPoint(0,0) );
+ aNonRect4.append( B2DPoint(1,0) );
+ aNonRect4.append( B2DPoint(1,1) );
+ aNonRect4.append( B2DPoint(0,1) );
+
+ B2DPolygon aNonRect5;
+ aNonRect5.append( B2DPoint(0,0) );
+ aNonRect5.append( B2DPoint(1,0) );
+ aNonRect5.append( B2DPoint(1,1) );
+ aNonRect5.append( B2DPoint(0,1) );
+ aNonRect5.setControlPoints(1,B2DPoint(1,0),B2DPoint(-11,0));
+ aNonRect5.setClosed(true);
+
+ CPPUNIT_ASSERT_MESSAGE("checking rectangle-ness of rectangle 1",
+ tools::isRectangle( aRect1 ));
+ CPPUNIT_ASSERT_MESSAGE("checking rectangle-ness of rectangle 2",
+ tools::isRectangle( aRect2 ));
+ CPPUNIT_ASSERT_MESSAGE("checking non-rectangle-ness of polygon 1",
+ !tools::isRectangle( aNonRect1 ));
+ CPPUNIT_ASSERT_MESSAGE("checking non-rectangle-ness of polygon 2",
+ !tools::isRectangle( aNonRect2 ));
+ CPPUNIT_ASSERT_MESSAGE("checking non-rectangle-ness of polygon 3",
+ !tools::isRectangle( aNonRect3 ));
+ CPPUNIT_ASSERT_MESSAGE("checking non-rectangle-ness of polygon 4",
+ !tools::isRectangle( aNonRect4 ));
+ CPPUNIT_ASSERT_MESSAGE("checking non-rectangle-ness of polygon 5",
+ !tools::isRectangle( aNonRect5 ));
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(b2dpolygontools);
+ CPPUNIT_TEST(testIsRectangle);
+ CPPUNIT_TEST_SUITE_END();
+}; // class b2dpolygontools
+
+
+class b2dpolypolygon : public CppUnit::TestFixture
+{
+public:
+ // initialise your test code values here.
+ void setUp()
+ {
+ }
+
+ void tearDown()
+ {
+ }
+
+ // insert your test code here.
+ void EmptyMethod()
+ {
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(b2dpolypolygon);
+ CPPUNIT_TEST(EmptyMethod);
+ CPPUNIT_TEST_SUITE_END();
+}; // class b2dpolypolygon
+
+
+class b2dquadraticbezier : public CppUnit::TestFixture
+{
+public:
+ // initialise your test code values here.
+ void setUp()
+ {
+ }
+
+ void tearDown()
+ {
+ }
+
+ // insert your test code here.
+ // this is only demonstration code
+ void EmptyMethod()
+ {
+ // CPPUNIT_ASSERT_MESSAGE("a message", 1 == 1);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(b2dquadraticbezier);
+ CPPUNIT_TEST(EmptyMethod);
+ CPPUNIT_TEST_SUITE_END();
+}; // class b2dquadraticbezier
+
+
+class b2drange : public CppUnit::TestFixture
+{
+public:
+ // initialise your test code values here.
+ void setUp()
+ {
+ }
+
+ void tearDown()
+ {
+ }
+
+ // insert your test code here.
+ void EmptyMethod()
+ {
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(b2drange);
+ CPPUNIT_TEST(EmptyMethod);
+ CPPUNIT_TEST_SUITE_END();
+}; // class b2drange
+
+
+class b2dtuple : public CppUnit::TestFixture
+{
+public:
+ // initialise your test code values here.
+ void setUp()
+ {
+ }
+
+ void tearDown()
+ {
+ }
+
+ // insert your test code here.
+ // this is only demonstration code
+ void EmptyMethod()
+ {
+ // CPPUNIT_ASSERT_MESSAGE("a message", 1 == 1);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(b2dtuple);
+ CPPUNIT_TEST(EmptyMethod);
+ CPPUNIT_TEST_SUITE_END();
+}; // class b2dtuple
+
+
+class b2dvector : public CppUnit::TestFixture
+{
+public:
+ // initialise your test code values here.
+ void setUp()
+ {
+ }
+
+ void tearDown()
+ {
+ }
+
+ // insert your test code here.
+ void EmptyMethod()
+ {
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(b2dvector);
+ CPPUNIT_TEST(EmptyMethod);
+ CPPUNIT_TEST_SUITE_END();
+}; // class b2dvector
+
+class bcolor : public CppUnit::TestFixture
+{
+ BColor maWhite;
+ BColor maBlack;
+ BColor maRed;
+ BColor maGreen;
+ BColor maBlue;
+ BColor maYellow;
+ BColor maMagenta;
+ BColor maCyan;
+
+public:
+ bcolor() :
+ maWhite(1,1,1),
+ maBlack(0,0,0),
+ maRed(1,0,0),
+ maGreen(0,1,0),
+ maBlue(0,0,1),
+ maYellow(1,1,0),
+ maMagenta(1,0,1),
+ maCyan(0,1,1)
+ {}
+
+
+ // initialise your test code values here.
+ void setUp()
+ {
+ }
+
+ void tearDown()
+ {
+ }
+
+ // insert your test code here.
+ void hslTest()
+ {
+ CPPUNIT_ASSERT_MESSAGE("white",
+ tools::rgb2hsl(maWhite) == BColor(0,0,1));
+ CPPUNIT_ASSERT_MESSAGE("black",
+ tools::rgb2hsl(maBlack) == BColor(0,0,0));
+ CPPUNIT_ASSERT_MESSAGE("red",
+ tools::rgb2hsl(maRed) == BColor(0,1,0.5));
+ CPPUNIT_ASSERT_MESSAGE("green",
+ tools::rgb2hsl(maGreen) == BColor(120,1,0.5));
+ CPPUNIT_ASSERT_MESSAGE("blue",
+ tools::rgb2hsl(maBlue) == BColor(240,1,0.5));
+ CPPUNIT_ASSERT_MESSAGE("yellow",
+ tools::rgb2hsl(maYellow) == BColor(60,1,0.5));
+ CPPUNIT_ASSERT_MESSAGE("magenta",
+ tools::rgb2hsl(maMagenta) == BColor(300,1,0.5));
+ CPPUNIT_ASSERT_MESSAGE("cyan",
+ tools::rgb2hsl(maCyan) == BColor(180,1,0.5));
+ CPPUNIT_ASSERT_MESSAGE("third hue case",
+ tools::rgb2hsl(BColor(0,0.5,1)) == BColor(210,1,0.5));
+
+ CPPUNIT_ASSERT_MESSAGE("roundtrip white",
+ tools::hsl2rgb(tools::rgb2hsl(maWhite)) == maWhite);
+ CPPUNIT_ASSERT_MESSAGE("roundtrip black",
+ tools::hsl2rgb(tools::rgb2hsl(maBlack)) == maBlack);
+ CPPUNIT_ASSERT_MESSAGE("roundtrip red",
+ tools::hsl2rgb(tools::rgb2hsl(maRed)) == maRed);
+ CPPUNIT_ASSERT_MESSAGE("roundtrip green",
+ tools::hsl2rgb(tools::rgb2hsl(maGreen)) == maGreen);
+ CPPUNIT_ASSERT_MESSAGE("roundtrip blue",
+ tools::hsl2rgb(tools::rgb2hsl(maBlue)) == maBlue);
+ CPPUNIT_ASSERT_MESSAGE("roundtrip yellow",
+ tools::hsl2rgb(tools::rgb2hsl(maYellow)) == maYellow);
+ CPPUNIT_ASSERT_MESSAGE("roundtrip magenta",
+ tools::hsl2rgb(tools::rgb2hsl(maMagenta)) == maMagenta);
+ CPPUNIT_ASSERT_MESSAGE("roundtrip cyan",
+ tools::hsl2rgb(tools::rgb2hsl(maCyan)) == maCyan);
+
+ CPPUNIT_ASSERT_MESSAGE("grey10",
+ tools::rgb2hsl(maWhite*.1) == BColor(0,0,.1));
+ CPPUNIT_ASSERT_MESSAGE("grey90",
+ tools::rgb2hsl(maWhite*.9) == BColor(0,0,.9));
+ CPPUNIT_ASSERT_MESSAGE("red/2",
+ tools::rgb2hsl(maRed*.5) == BColor(0,1,0.25));
+ CPPUNIT_ASSERT_MESSAGE("green/2",
+ tools::rgb2hsl(maGreen*.5) == BColor(120,1,0.25));
+ CPPUNIT_ASSERT_MESSAGE("blue/2",
+ tools::rgb2hsl(maBlue*.5) == BColor(240,1,0.25));
+ CPPUNIT_ASSERT_MESSAGE("yellow/2",
+ tools::rgb2hsl(maYellow*.5) == BColor(60,1,0.25));
+ CPPUNIT_ASSERT_MESSAGE("magenta/2",
+ tools::rgb2hsl(maMagenta*.5) == BColor(300,1,0.25));
+ CPPUNIT_ASSERT_MESSAGE("cyan/2",
+ tools::rgb2hsl(maCyan*.5) == BColor(180,1,0.25));
+
+ CPPUNIT_ASSERT_MESSAGE("pastel",
+ tools::rgb2hsl(BColor(.75,.25,.25)) == BColor(0,.5,.5));
+ }
+
+ // insert your test code here.
+ void hsvTest()
+ {
+ CPPUNIT_ASSERT_MESSAGE("white",
+ tools::rgb2hsv(maWhite) == BColor(0,0,1));
+ CPPUNIT_ASSERT_MESSAGE("black",
+ tools::rgb2hsv(maBlack) == BColor(0,0,0));
+ CPPUNIT_ASSERT_MESSAGE("red",
+ tools::rgb2hsv(maRed) == BColor(0,1,1));
+ CPPUNIT_ASSERT_MESSAGE("green",
+ tools::rgb2hsv(maGreen) == BColor(120,1,1));
+ CPPUNIT_ASSERT_MESSAGE("blue",
+ tools::rgb2hsv(maBlue) == BColor(240,1,1));
+ CPPUNIT_ASSERT_MESSAGE("yellow",
+ tools::rgb2hsv(maYellow) == BColor(60,1,1));
+ CPPUNIT_ASSERT_MESSAGE("magenta",
+ tools::rgb2hsv(maMagenta) == BColor(300,1,1));
+ CPPUNIT_ASSERT_MESSAGE("cyan",
+ tools::rgb2hsv(maCyan) == BColor(180,1,1));
+
+ CPPUNIT_ASSERT_MESSAGE("roundtrip white",
+ tools::hsv2rgb(tools::rgb2hsv(maWhite)) == maWhite);
+ CPPUNIT_ASSERT_MESSAGE("roundtrip black",
+ tools::hsv2rgb(tools::rgb2hsv(maBlack)) == maBlack);
+ CPPUNIT_ASSERT_MESSAGE("roundtrip red",
+ tools::hsv2rgb(tools::rgb2hsv(maRed)) == maRed);
+ CPPUNIT_ASSERT_MESSAGE("roundtrip green",
+ tools::hsv2rgb(tools::rgb2hsv(maGreen)) == maGreen);
+ CPPUNIT_ASSERT_MESSAGE("roundtrip blue",
+ tools::hsv2rgb(tools::rgb2hsv(maBlue)) == maBlue);
+ CPPUNIT_ASSERT_MESSAGE("roundtrip yellow",
+ tools::hsv2rgb(tools::rgb2hsv(maYellow)) == maYellow);
+ CPPUNIT_ASSERT_MESSAGE("roundtrip magenta",
+ tools::hsv2rgb(tools::rgb2hsv(maMagenta)) == maMagenta);
+ CPPUNIT_ASSERT_MESSAGE("roundtrip cyan",
+ tools::hsv2rgb(tools::rgb2hsv(maCyan)) == maCyan);
+
+ CPPUNIT_ASSERT_MESSAGE("grey10",
+ tools::rgb2hsv(maWhite*.1) == BColor(0,0,.1));
+ CPPUNIT_ASSERT_MESSAGE("grey90",
+ tools::rgb2hsv(maWhite*.9) == BColor(0,0,.9));
+ CPPUNIT_ASSERT_MESSAGE("red/2",
+ tools::rgb2hsv(maRed*.5) == BColor(0,1,0.5));
+ CPPUNIT_ASSERT_MESSAGE("green/2",
+ tools::rgb2hsv(maGreen*.5) == BColor(120,1,0.5));
+ CPPUNIT_ASSERT_MESSAGE("blue/2",
+ tools::rgb2hsv(maBlue*.5) == BColor(240,1,0.5));
+ CPPUNIT_ASSERT_MESSAGE("yellow/2",
+ tools::rgb2hsv(maYellow*.5) == BColor(60,1,0.5));
+ CPPUNIT_ASSERT_MESSAGE("magenta/2",
+ tools::rgb2hsv(maMagenta*.5) == BColor(300,1,0.5));
+ CPPUNIT_ASSERT_MESSAGE("cyan/2",
+ tools::rgb2hsv(maCyan*.5) == BColor(180,1,0.5));
+
+ CPPUNIT_ASSERT_MESSAGE("pastel",
+ tools::rgb2hsv(BColor(.5,.25,.25)) == BColor(0,.5,.5));
+ }
+
+ void ciexyzTest()
+ {
+ tools::rgb2ciexyz(maWhite);
+ tools::rgb2ciexyz(maBlack);
+ tools::rgb2ciexyz(maRed);
+ tools::rgb2ciexyz(maGreen);
+ tools::rgb2ciexyz(maBlue);
+ tools::rgb2ciexyz(maYellow);
+ tools::rgb2ciexyz(maMagenta);
+ tools::rgb2ciexyz(maCyan);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(bcolor);
+ CPPUNIT_TEST(hslTest);
+ CPPUNIT_TEST(hsvTest);
+ CPPUNIT_TEST(ciexyzTest);
+ CPPUNIT_TEST_SUITE_END();
+}; // class b2dvector
+
+// -----------------------------------------------------------------------------
+
+CPPUNIT_TEST_SUITE_REGISTRATION(basegfx2d::b2dsvgdimpex);
+CPPUNIT_TEST_SUITE_REGISTRATION(basegfx2d::b2dpolyrange);
+CPPUNIT_TEST_SUITE_REGISTRATION(basegfx2d::b2dcubicbezier);
+CPPUNIT_TEST_SUITE_REGISTRATION(basegfx2d::b2dhommatrix);
+CPPUNIT_TEST_SUITE_REGISTRATION(basegfx2d::b2dhompoint);
+CPPUNIT_TEST_SUITE_REGISTRATION(basegfx2d::b2dpoint);
+CPPUNIT_TEST_SUITE_REGISTRATION(basegfx2d::b2dpolygon);
+CPPUNIT_TEST_SUITE_REGISTRATION(basegfx2d::b2dpolygontools);
+CPPUNIT_TEST_SUITE_REGISTRATION(basegfx2d::b2dpolypolygon);
+CPPUNIT_TEST_SUITE_REGISTRATION(basegfx2d::b2dquadraticbezier);
+CPPUNIT_TEST_SUITE_REGISTRATION(basegfx2d::b2drange);
+CPPUNIT_TEST_SUITE_REGISTRATION(basegfx2d::b2dtuple);
+CPPUNIT_TEST_SUITE_REGISTRATION(basegfx2d::b2dvector);
+CPPUNIT_TEST_SUITE_REGISTRATION(basegfx2d::bcolor);
+} // namespace basegfx2d
+
+
+// -----------------------------------------------------------------------------
+
+// this macro creates an empty function, which will called by the RegisterAllFunctions()
+// to let the user the possibility to also register some functions by hand.
+// NOADDITIONAL;
+
diff --git a/basegfx/test/basegfx3d.cxx b/basegfx/test/basegfx3d.cxx
new file mode 100644
index 000000000000..a16132e0810f
--- /dev/null
+++ b/basegfx/test/basegfx3d.cxx
@@ -0,0 +1,222 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basegfx.hxx"
+// autogenerated file with codegen.pl
+
+#include "cppunit/TestAssert.h"
+#include "cppunit/TestFixture.h"
+#include "cppunit/extensions/HelperMacros.h"
+
+namespace basegfx3d
+{
+
+class b3dhommatrix : public CppUnit::TestFixture
+{
+public:
+ // initialise your test code values here.
+ void setUp()
+ {
+ }
+
+ void tearDown()
+ {
+ }
+
+ // insert your test code here.
+ // this is only demonstration code
+ void EmptyMethod()
+ {
+ // CPPUNIT_ASSERT_MESSAGE("a message", 1 == 1);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(b3dhommatrix);
+ CPPUNIT_TEST(EmptyMethod);
+ CPPUNIT_TEST_SUITE_END();
+}; // class b3dhommatrix
+
+
+class b3dhompoint : public CppUnit::TestFixture
+{
+public:
+ // initialise your test code values here.
+ void setUp()
+ {
+ }
+
+ void tearDown()
+ {
+ }
+
+ // insert your test code here.
+ void EmptyMethod()
+ {
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(b3dhompoint);
+ CPPUNIT_TEST(EmptyMethod);
+ CPPUNIT_TEST_SUITE_END();
+}; // class b3dhompoint
+
+
+class b3dpoint : public CppUnit::TestFixture
+{
+public:
+ // initialise your test code values here.
+ void setUp()
+ {
+ }
+
+ void tearDown()
+ {
+ }
+
+ // insert your test code here.
+ // this is only demonstration code
+ void EmptyMethod()
+ {
+ // CPPUNIT_ASSERT_MESSAGE("a message", 1 == 1);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(b3dpoint);
+ CPPUNIT_TEST(EmptyMethod);
+ CPPUNIT_TEST_SUITE_END();
+}; // class b3dpoint
+
+
+class b3drange : public CppUnit::TestFixture
+{
+public:
+ // initialise your test code values here.
+ void setUp()
+ {
+ }
+
+ void tearDown()
+ {
+ }
+
+ // insert your test code here.
+ void EmptyMethod()
+ {
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(b3drange);
+ CPPUNIT_TEST(EmptyMethod);
+ CPPUNIT_TEST_SUITE_END();
+}; // class b3drange
+
+
+class b3dtuple : public CppUnit::TestFixture
+{
+public:
+ // initialise your test code values here.
+ void setUp()
+ {
+ }
+
+ void tearDown()
+ {
+ }
+
+ // insert your test code here.
+ // this is only demonstration code
+ void EmptyMethod()
+ {
+ // CPPUNIT_ASSERT_MESSAGE("a message", 1 == 1);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(b3dtuple);
+ CPPUNIT_TEST(EmptyMethod);
+ CPPUNIT_TEST_SUITE_END();
+}; // class b3dtuple
+
+
+class b3dvector : public CppUnit::TestFixture
+{
+public:
+ // initialise your test code values here.
+ void setUp()
+ {
+ }
+
+ void tearDown()
+ {
+ }
+
+ // insert your test code here.
+ void EmptyMethod()
+ {
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(b3dvector);
+ CPPUNIT_TEST(EmptyMethod);
+ CPPUNIT_TEST_SUITE_END();
+}; // class b3dvector
+
+// -----------------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION(basegfx3d::b3dhommatrix);
+CPPUNIT_TEST_SUITE_REGISTRATION(basegfx3d::b3dhompoint);
+CPPUNIT_TEST_SUITE_REGISTRATION(basegfx3d::b3dpoint);
+CPPUNIT_TEST_SUITE_REGISTRATION(basegfx3d::b3drange);
+CPPUNIT_TEST_SUITE_REGISTRATION(basegfx3d::b3dtuple);
+CPPUNIT_TEST_SUITE_REGISTRATION(basegfx3d::b3dvector);
+} // namespace basegfx3d
+
+
+// -----------------------------------------------------------------------------
+
+// this macro creates an empty function, which will called by the RegisterAllFunctions()
+// to let the user the possibility to also register some functions by hand.
+// NOADDITIONAL;
+
diff --git a/basegfx/test/basegfxtools.cxx b/basegfx/test/basegfxtools.cxx
new file mode 100644
index 000000000000..1a8b97a559b2
--- /dev/null
+++ b/basegfx/test/basegfxtools.cxx
@@ -0,0 +1,110 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basegfx.hxx"
+// autogenerated file with codegen.pl
+
+#include "cppunit/TestAssert.h"
+#include "cppunit/TestFixture.h"
+#include "cppunit/extensions/HelperMacros.h"
+
+#include <basegfx/tools/keystoplerp.hxx>
+#include <basegfx/numeric/ftools.hxx>
+
+#include <boost/tuple/tuple.hpp>
+
+using namespace ::basegfx;
+using namespace ::boost::tuples;
+
+namespace basegfxtools
+{
+
+class KeyStopLerpTest : public CppUnit::TestFixture
+{
+ tools::KeyStopLerp maKeyStops;
+
+ static std::vector<double> getTestVector()
+ {
+ std::vector<double> aStops(3);
+ aStops[0] = 0.1;
+ aStops[1] = 0.5;
+ aStops[2] = 0.9;
+ return aStops;
+ }
+
+public:
+ KeyStopLerpTest() :
+ maKeyStops(getTestVector())
+ {}
+
+ void setUp()
+ {}
+
+ void tearDown()
+ {}
+
+ void test()
+ {
+ double fAlpha;
+ std::ptrdiff_t nIndex;
+
+ tie(nIndex,fAlpha) = maKeyStops.lerp(-1.0);
+ CPPUNIT_ASSERT_MESSAGE("-1.0", nIndex==0 && fAlpha==0.0);
+
+ tie(nIndex,fAlpha) = maKeyStops.lerp(0.1);
+ CPPUNIT_ASSERT_MESSAGE("0.1", nIndex==0 && fAlpha==0.0);
+
+ tie(nIndex,fAlpha) = maKeyStops.lerp(0.3);
+ CPPUNIT_ASSERT_MESSAGE("0.3", nIndex==0 && fTools::equal(fAlpha,0.5));
+
+ tie(nIndex,fAlpha) = maKeyStops.lerp(0.5);
+ CPPUNIT_ASSERT_MESSAGE("0.5", nIndex==0 && fTools::equal(fAlpha,1.0));
+
+ tie(nIndex,fAlpha) = maKeyStops.lerp(0.51);
+ CPPUNIT_ASSERT_MESSAGE("0.51", nIndex==1 && fTools::equal(fAlpha,0.025));
+
+ tie(nIndex,fAlpha) = maKeyStops.lerp(0.9);
+ CPPUNIT_ASSERT_MESSAGE("0.51", nIndex==1 && fTools::equal(fAlpha,1.0));
+
+ tie(nIndex,fAlpha) = maKeyStops.lerp(1.0);
+ CPPUNIT_ASSERT_MESSAGE("0.51", nIndex==1 && fAlpha==1.0);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(KeyStopLerpTest);
+ CPPUNIT_TEST(test);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+// -----------------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION(basegfxtools::KeyStopLerpTest);
+} // namespace basegfxtools
diff --git a/basegfx/test/boxclipper.cxx b/basegfx/test/boxclipper.cxx
new file mode 100644
index 000000000000..d52218a51ee0
--- /dev/null
+++ b/basegfx/test/boxclipper.cxx
@@ -0,0 +1,419 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basegfx.hxx"
+// autogenerated file with codegen.pl
+
+#include "cppunit/TestAssert.h"
+#include "cppunit/TestFixture.h"
+#include "cppunit/extensions/HelperMacros.h"
+
+#include <basegfx/matrix/b2dhommatrix.hxx>
+#include <basegfx/curve/b2dcubicbezier.hxx>
+#include <basegfx/curve/b2dbeziertools.hxx>
+#include <basegfx/range/b2dpolyrange.hxx>
+#include <basegfx/polygon/b2dpolygon.hxx>
+#include <basegfx/polygon/b2dpolygontools.hxx>
+#include <basegfx/polygon/b2dpolypolygontools.hxx>
+#include <basegfx/polygon/b2dpolypolygoncutter.hxx>
+#include <basegfx/polygon/b2dpolygonclipper.hxx>
+#include <basegfx/polygon/b2dpolypolygon.hxx>
+#include <basegfx/numeric/ftools.hxx>
+
+#include <boost/bind.hpp>
+
+using namespace ::basegfx;
+
+
+namespace basegfx2d
+{
+/// Gets a random ordinal [0,n)
+inline double getRandomOrdinal( const ::std::size_t n )
+{
+ // use this one when displaying polygons in OOo, which still sucks
+ // great rocks when trying to import non-integer svg:d attributes
+ // return sal_Int64(double(n) * rand() / (RAND_MAX + 1.0));
+ return double(n) * rand() / (RAND_MAX + 1.0);
+}
+
+inline bool compare(const B2DPoint& left, const B2DPoint& right)
+{
+ return left.getX()<right.getX()
+ || (left.getX()==right.getX() && left.getY()<right.getY());
+}
+
+
+class boxclipper : public CppUnit::TestFixture
+{
+private:
+ B2DPolyRange aDisjunctRanges;
+ B2DPolyRange aEqualRanges;
+ B2DPolyRange aIntersectionN;
+ B2DPolyRange aIntersectionE;
+ B2DPolyRange aIntersectionS;
+ B2DPolyRange aIntersectionW;
+ B2DPolyRange aIntersectionNE;
+ B2DPolyRange aIntersectionSE;
+ B2DPolyRange aIntersectionSW;
+ B2DPolyRange aIntersectionNW;
+ B2DPolyRange aRingIntersection;
+ B2DPolyRange aRingIntersection2;
+ B2DPolyRange aRingIntersectExtraStrip;
+ B2DPolyRange aComplexIntersections;
+ B2DPolyRange aRandomIntersections;
+
+public:
+ // initialise your test code values here.
+ void setUp()
+ {
+ B2DRange aCenter(100, 100, -100, -100);
+ B2DRange aOffside(800, 800, 1000, 1000);
+ B2DRange aNorth(100, 0, -100, -200);
+ B2DRange aSouth(100, 200, -100, 0);
+ B2DRange aEast(0, 100, 200, -100);
+ B2DRange aWest(-200, 100, 0, -100);
+ B2DRange aNorthEast(0, 0, 200, -200);
+ B2DRange aSouthEast(0, 0, 200, 200);
+ B2DRange aSouthWest(0, 0, -200, 200);
+ B2DRange aNorthWest(0, 0, -200, -200);
+
+ B2DRange aNorth2(-150, 50, 150, 350);
+ B2DRange aSouth2(-150, -50, 150, -350);
+ B2DRange aEast2 (50, -150, 350, 150);
+ B2DRange aWest2 (-50, -150,-350, 150);
+
+ aDisjunctRanges.appendElement( aCenter, ORIENTATION_NEGATIVE );
+ aDisjunctRanges.appendElement( aOffside, ORIENTATION_NEGATIVE );
+
+ aEqualRanges.appendElement( aCenter, ORIENTATION_NEGATIVE );
+ aEqualRanges.appendElement( aCenter, ORIENTATION_NEGATIVE );
+
+ aIntersectionN.appendElement( aCenter, ORIENTATION_NEGATIVE );
+ aIntersectionN.appendElement( aNorth, ORIENTATION_NEGATIVE );
+
+ aIntersectionE.appendElement( aCenter, ORIENTATION_NEGATIVE );
+ aIntersectionE.appendElement( aEast, ORIENTATION_NEGATIVE );
+
+ aIntersectionS.appendElement( aCenter, ORIENTATION_NEGATIVE );
+ aIntersectionS.appendElement( aSouth, ORIENTATION_NEGATIVE );
+
+ aIntersectionW.appendElement( aCenter, ORIENTATION_NEGATIVE );
+ aIntersectionW.appendElement( aWest, ORIENTATION_NEGATIVE );
+
+ aIntersectionNE.appendElement( aCenter, ORIENTATION_NEGATIVE );
+ aIntersectionNE.appendElement( aNorthEast, ORIENTATION_NEGATIVE );
+
+ aIntersectionSE.appendElement( aCenter, ORIENTATION_NEGATIVE );
+ aIntersectionSE.appendElement( aSouthEast, ORIENTATION_NEGATIVE );
+
+ aIntersectionSW.appendElement( aCenter, ORIENTATION_NEGATIVE );
+ aIntersectionSW.appendElement( aSouthWest, ORIENTATION_NEGATIVE );
+
+ aIntersectionNW.appendElement( aCenter, ORIENTATION_NEGATIVE );
+ aIntersectionNW.appendElement( aNorthWest, ORIENTATION_NEGATIVE );
+
+ aRingIntersection.appendElement( aNorth2, ORIENTATION_NEGATIVE );
+ aRingIntersection.appendElement( aEast2, ORIENTATION_NEGATIVE );
+ aRingIntersection.appendElement( aSouth2, ORIENTATION_NEGATIVE );
+
+ aRingIntersection2 = aRingIntersection;
+ aRingIntersection2.appendElement( aWest2, ORIENTATION_NEGATIVE );
+
+ aRingIntersectExtraStrip = aRingIntersection2;
+ aRingIntersectExtraStrip.appendElement( B2DRange(0, -25, 200, 25),
+ ORIENTATION_NEGATIVE );
+
+ aComplexIntersections.appendElement( aCenter, ORIENTATION_NEGATIVE );
+ aComplexIntersections.appendElement( aOffside, ORIENTATION_NEGATIVE );
+ aComplexIntersections.appendElement( aCenter, ORIENTATION_NEGATIVE );
+ aComplexIntersections.appendElement( aNorth, ORIENTATION_NEGATIVE );
+ aComplexIntersections.appendElement( aEast, ORIENTATION_NEGATIVE );
+ aComplexIntersections.appendElement( aSouth, ORIENTATION_NEGATIVE );
+ aComplexIntersections.appendElement( aWest, ORIENTATION_NEGATIVE );
+ aComplexIntersections.appendElement( aNorthEast, ORIENTATION_NEGATIVE );
+ aComplexIntersections.appendElement( aSouthEast, ORIENTATION_NEGATIVE );
+ aComplexIntersections.appendElement( aSouthWest, ORIENTATION_NEGATIVE );
+ aComplexIntersections.appendElement( aNorthWest, ORIENTATION_NEGATIVE );
+
+#ifdef GENERATE_RANDOM
+ for( int i=0; i<800; ++i )
+ {
+ B2DRange aRandomRange(
+ getRandomOrdinal( 1000 ),
+ getRandomOrdinal( 1000 ),
+ getRandomOrdinal( 1000 ),
+ getRandomOrdinal( 1000 ) );
+
+ aRandomIntersections.appendElement( aRandomRange, ORIENTATION_NEGATIVE );
+ }
+#else
+ const char* randomSvg="m394 783h404v57h-404zm-197-505h571v576h-571zm356-634h75v200h-75zm-40-113h403v588h-403zm93-811h111v494h-111zm-364-619h562v121h-562zm-134-8h292v27h-292zm110 356h621v486h-621zm78-386h228v25h-228zm475-345h201v201h-201zm-2-93h122v126h-122zm-417-243h567v524h-567zm-266-738h863v456h-863zm262-333h315v698h-315zm-328-826h43v393h-43zm830-219h120v664h-120zm-311-636h221v109h-221zm-500 137h628v19h-628zm681-94h211v493h-211zm-366-646h384v355h-384zm-189-199h715v247h-715zm165-459h563v601h-563zm258-479h98v606h-98zm270-517h65v218h-65zm-44-259h96v286h-96zm-599-202h705v468h-705zm216-803h450v494h-450zm-150-22h26v167h-26zm-55-599h50v260h-50zm190-278h490v387h-490zm-290-453h634v392h-634zm257 189h552v300h-552zm-151-690h136v455h-136zm12-597h488v432h-488zm501-459h48v39h-48zm-224-112h429v22h-429zm-281 102h492v621h-492zm519-158h208v17h-208zm-681-563h56v427h-56zm126-451h615v392h-615zm-47-410h598v522h-598zm-32 316h79v110h-79zm-71-129h18v127h-18zm126-993h743v589h-743zm211-430h428v750h-428zm61-554h100v220h-100zm-353-49h658v157h-658zm778-383h115v272h-115zm-249-541h119v712h-119zm203 86h94v40h-94z";
+ B2DPolyPolygon randomPoly;
+ tools::importFromSvgD(
+ randomPoly,
+ rtl::OUString::createFromAscii(randomSvg));
+ std::for_each(randomPoly.begin(),
+ randomPoly.end(),
+ boost::bind(
+ &B2DPolyRange::appendElement,
+ boost::ref(aRandomIntersections),
+ boost::bind(
+ &B2DPolygon::getB2DRange,
+ _1),
+ ORIENTATION_NEGATIVE,
+ 1));
+#endif
+ }
+
+ void tearDown()
+ {
+ }
+
+ B2DPolyPolygon normalizePoly( const B2DPolyPolygon& rPoly )
+ {
+ B2DPolyPolygon aRes;
+ for( sal_uInt32 i=0; i<rPoly.count(); ++i )
+ {
+ B2DPolygon aTmp=rPoly.getB2DPolygon(i);
+ if( ORIENTATION_NEGATIVE == tools::getOrientation(aTmp) )
+ aTmp.flip();
+
+ aTmp=tools::removeNeutralPoints(aTmp);
+
+ B2DPoint* pSmallest=0;
+ for(B2DPoint* pCurr=aTmp.begin(); pCurr!=aTmp.end(); ++pCurr)
+ {
+ if( ! pSmallest || compare(*pCurr, *pSmallest) )
+ {
+ pSmallest=pCurr;
+ }
+ }
+
+ if( pSmallest )
+ std::rotate(aTmp.begin(),pSmallest,aTmp.end());
+
+ aRes.append(aTmp);
+ }
+
+ // boxclipper & generic clipper disagree slightly on area-less
+ // polygons (one or two points only)
+ aRes = tools::stripNeutralPolygons(aRes);
+
+ // now, sort all polygons with increasing 0th point
+ std::sort(aRes.begin(),
+ aRes.end(),
+ boost::bind(
+ &compare,
+ boost::bind(
+ &B2DPolygon::getB2DPoint,
+ _1,0),
+ boost::bind(
+ &B2DPolygon::getB2DPoint,
+ _2,0)));
+
+ return aRes;
+ }
+
+ void verifyPoly(const char* sName, const char* sSvg, const B2DPolyRange& toTest)
+ {
+ B2DPolyPolygon aTmp1;
+ CPPUNIT_ASSERT_MESSAGE(sName,
+ tools::importFromSvgD(
+ aTmp1,
+ rtl::OUString::createFromAscii(sSvg)));
+
+ const rtl::OUString aSvg=
+ tools::exportToSvgD(toTest.solveCrossovers());
+ B2DPolyPolygon aTmp2;
+ CPPUNIT_ASSERT_MESSAGE(sName,
+ tools::importFromSvgD(
+ aTmp2,
+ aSvg));
+
+ CPPUNIT_ASSERT_MESSAGE(
+ sName,
+ normalizePoly(aTmp2) == normalizePoly(aTmp1));
+ }
+
+ void verifyPoly()
+ {
+ const char* disjunct="m100 100v-200h-200v200zm1100 900v-200h-200v200z";
+ const char* equal="m100 100v-200h-200v200zm200 0v-200h-200v200h200z";
+ const char* intersectionN="m100 0v-100h-200v100zm200 100v-200-100h-200v100 200z";
+ const char* intersectionE="m100 100v-200h-100v200zm200 0v-200h-200-100v200h100z";
+ const char* intersectionS="m100 100v-200h-200v200 100h200v-100zm0 0v-100h-200v100z";
+ const char* intersectionW="m0 100v-200h-100v200zm200 0v-200h-200-100v200h100z";
+ const char* intersectionNE="m100 0v-100h-100v100zm200 0v-200h-200v100h-100v200h200v-100z";
+ const char* intersectionSE="m200 200v-200h-100v-100h-200v200h100v100zm100-100v-100h-100v100z";
+ const char* intersectionSW="m0 100v-100h-100v100zm200 0v-200h-200v100h-100v200h200v-100z";
+ const char* intersectionNW="m100 100v-200h-100v-100h-200v200h100v100zm100-100v-100h-100v100z";
+ const char* ringIntersection="m150 150v-100h-100v100zm300 0v-300h-200v-200h-300v300h200v100h-200v300h300v-200zm0-200v-100h-100v100z";
+ const char* ringIntersection2="m-50-50v-100h-100v100zm100 200v-100h-100v100zm500 0v-300h-200v-200h-300v200h-200v300h200v200h300v-200zm-200-100v-100h100v100zm100-100v-100h-100v100zm100 200v-100h-100v100z";
+ const char* ringIntersectExtraStrip="m-50-50v-100h-100v100zm100 200v-100h-100v100zm500 0v-300h-200v-200h-300v200h-200v300h200v200h300v-200zm-200-100v-100h100v25h-50v50h50v25zm150-25v-50h-150v50zm100-75v-100h-100v100zm100 200v-100h-100v100z";
+ // TODO: old clipper impl. debug difference
+ //const char* complexIntersections="m100 0h-100v-100 100h-100 100v100-100zm0 0zm200 0h-100v-100h-100v-100 100h-100v100h-100 100v100h100v100-100h100v-100zm0 0h-100v-100 100h-100 100v100-100h100zm0 0v-100h-100-100v100 100h100 100v-100zm100 0v-100h-100v-100h-100-100v100h-100v100 100h100v100h100 100v-100h100v-100zm-200 0zm100 0v-100h-100-100v100 100h100 100v-100zm100 100v-200-100h-200-100-100v100 200 100h100 100 200v-100zm-200-100zm1000 1000v-200h-200v200z";
+ const char* complexIntersections="m0 0zm0 0zm0 0zm0 0v-100 100h-100 100v100-100h100zm-100 0v-100 100h-100 100v100-100h100zm0 0v-100h-100-100v100 100h100 100v-100zm0 0v-100h-100-100v100 100h100 100v-100zm0 0v-100h-100v-100 100h-100v100h-100 100v100h100v100-100h100v-100h100zm-100-100v-100h-100-100v100h-100v100 100h100v100h100 100v-100h100v-100-100zm0 0v-100h-200-100-100v100 200 100h100 100 200v-100-200zm600 900v200h200v-200z";
+ const char* randomIntersections="m63 457v-393h-43v393zm114 63v-8h-48v8zm-14 477v-127h-18v127zm693-923v-5h-119v5zm-260 457v-1h-14v1zm-220-375v-27h-8v27zm78 755v-22h-7v22zm203-774v-8h-158v8zm-108 375v-17h23v17zm813-19v-189h-21v-12h-26v-54h-17v-69h-25v-22h-62v-73h104v-5h-104-15v-17h-49v-1h-8v-16h-119v16h-386v18h-38-24v34h-23v26h-23v-26h-8v26h-18v27h18v339h8v-339h23v339h8v17h-8v13h8v5h-8v1h8v42h15v20h17v94h18 3v224h165v39h130v2h75v4h98v-4h153v-2h77v-20h4v-28h11v-218h-11v-27h3v-1h8v-17h-8v-63h8v-51h18v-32zm-581 32v-13h-14v13zm-78-78v-7h-32v7zm124 14v-21h-14v21zm595 32v-189h-26v-12h-4v-9h-13v-45h-13v-10h-12v-59h-62v-22h-26v-10h11v-63h15v-5h-15-49v-17h-8v-1h-119v1h-107v17h-279-38v34h-24v26h-23v27h23v284h-15v55h15v17h-15v13h15v5h-15v1h15v42h17v20h18v94h3 14v62h8v48h90v32h18v61h35v21h8v2h122v37h75v2h98v-2h153v-20h77v-28h4v-29h5v-40h-5v-149h-1v-27h1v-1h3v-17h-3v-46h3v-17-51h8v-32zm-563 2v-13h-14v13zm198 30v-13h-39v13zm204-43v-21h3v21zm-168-21v-21h-39v21zm306 0v-21h-5v21zm178 115v-272h-20v-12h-2v-54h-21v-164h1v-22h-27v-48h-743v47h-23v18h-71v24h-8v419h-39v19h60v156h66 32v202h-72v110h79v-88h11v39h3v48h621v-14h96v-82h35v-326zm-570-420v-4h-156v4zm63 481v-18h-11v18zm72 0v-25h-14v25zm465-112v-13h-5v13zm-46-43v-21h1v21zm-37-21v-21h-12v21zm-352 21v-21h23v21zm-23 30v-17h23v17zm-23 18v-5h23v5zm-23 82v-19h23v19zm272 75v-3h-35v3zm-76-192v-13h-39v13zm150 30v-13h-35v13zm-76 6v-1h-39v1zm11 106v-25h-11v25zm150 160v-14h-75v14zm318-304v-11h-13v-43h-2v-2h-10v-37h-4v37h-27v3h-31v-3-37h-5v37h-43v3h-2v21h2v21h-2v30h-1v-30h-8v-21h8v-21h-8v-3h-5v-62h5v-11h-5v-29h-8v-52h-15v-17-38h-15v-52h-89v16h-22v36h-175v55h-15v1h-25v51h-23v-41h-14v41h-2v105h-4v21h4v21h-4v13h4v17h-4-18v13h18v5h-18v1h18v42h4v11h2v9h14v-9h23v9h40v19h-40v25h40v2h82v2h75v43h-75v3h75 40v60h35v-60h23 34 12 15v-3h-15v-43h15v-48h10v-37h11v-31h1v1h45v30h5v-30h20v-1h11v1h8v30h19v20h3v-20h1v-30h10v-1h2v-32zm-146-329v-1h-2v1zm-117 211v-11 11zm-76 0v-11h-13v11zm13 65v-65h1v65zm-1 42v-21h1v16h35v5zm-36 30v-17h36v17zm-36 18v-5h36v5zm180-5v-13h-13v-17h5v-13h-5v-21h5v-21h-5v-3h-8v-62h8v-11h-8v-29h-9v-51h-6v-1-17h-15v-38h-54v-36h-35v36h-22v38h-67v17h-108v1h-15v51h-25v105h-23v-105h-14v105h-2v21h2v21h-2v13h2v17h-2-4v13h4v5h-4v1h4v42h2v11h14v-11h23v11h40v9h82v19h-82v25h82v2h75v2h40v43h-40v3h40 35 23v-3h-23v-43h23v-2h34v2h12v-2h6v-46h9v-20h8v-17h2v-26h-2v-5zm-127-64v-21 21zm89 51v-17h3v17zm-57-17v-13h-35v13zm58 61v-26h-19v-5h19v-13h-23v-17h23v-13h-23v-21h23v-21h-23v-65h23v-11h-23v-14h-35v-15 15h-22v14h-18v11h18v65h-18v21h18v16h22v5h-22v13h22v17h-22-18v13h18v5h-18v1h18v25h22v17h35v-17zm0-25v-1h-35v1zm-22-390v6h-175v5h-31v-15h228v4zm344 352v-189h-2v-12h-21v-54h-26v-164h26v-5h-26v-17h-119v-36h-562v35h-62v18h-23v34h-23v-10h-48v419h-8v8h8v5h71v5h-58v1h58v42h8v114h32 18v224h3v39h165v34h456v-32h77v-2h4v-20h11v-28h4v-218h-4v-28h36v-17h-36v-63h39v-83zm-50 0v-11h-1v-43h-3v-2h-6v-39h-4v-34h-13v-60h-12v-12h-31v72h-31v-72-9h-59v-17-38h-5v-59h-8v-5h8v-1h-8v-16h-2v16h-13v-11h-15v-5h-89v5h-22v11h-175v6h-15v7h-25v16h-43v36h-18v66h-54v-107h-32v107h-4v41h-8v105h-6v7h6v14h8v21h-8v13h8v17h-8-14v13h14v5h-14v1h14v42h8v20h90v19h-34v7h-15v68h26v-50h23v50h18 4v62h16v-62h15v110h8v10h3v22h119v11h75v50h75v-50h23v-11h34v11h48v-11h30v-22h21v-120h20v-3h11v3h30v-3h13-13v-27h13v-1h17v-17h-17v-46h17v-17h6v-51h3v-32zm-256-32v-21h-35v-65h35v-11h-35v-14 14h-22v11h22v65h-22v21h22v16-16zm89 69v-5h3v5zm-3 26v-26h-31v-5h31v-13h-31v-17h31v-13h-31v-21h31v-21h-31v-65h31v-11h-31v-14h-23v-15h-35v-51 51h-22v15h-18v14h-35v11h35v65h-35v21h35v16h18v5h-18v13h18v17h-18-36-39-61v13h61v5h-61v1h61v25h39v-25h36v25h18v17h22v11h35v-11h23v-17zm-19-25v-1h-4v-5h4v-13h-4-35-22v13h22v5h-22v1h22v25h35v-25zm23 252v-36h34v36zm-34-99v-43h34v43zm35-128v-26h-8v-5h8v-13h-8v-17h8v-13h-8v-21h8v-21h-8v-3h-9v-62h9v-11h-9v-29h-6v-51-1h-15v-17h-54v-38h-35v38h-22v11h-53v6h-14v1h-108v51h-15v105h-25v21h25v21h-25v13h25v17h-25-23-14-2v13h2v5h-2v1h2v42h14v-42h23v42h40v11h82v9h75v46h40v2h35v-2h23v-4h31v-42h3v46h12v-46h6v-20h9v-17zm-15-61v-13h-12v13zm12 30v-13h-12v13zm12 31v-26h-12v26zm12 131v-3h-12v3zm12 110v-14h-12v14zm27-241v-26h-9v-5h9v-13h-9v-17h9v-13h-9v-21h9v-21h-9v-3h-6v-62h6v-11h-6v-29-51h-15v-1h-54v-17h-35v11h-22v6h-53v1h-14v51h-108v105h-15v21h15v21h-15v13h15v17h-15-25v13h25v5h-25v1h25v25h15v17h21v6h61v5h75v9h18v42h22v4h35v-4h23v-42h31v-9h3v9h12v-9-11h6v-17zm0 0v-26h-6v-5h6v-13h-6v-17h6v-13h-6v-21h6v-21h-6v-3-62-11-29h-15v-51h-54v-1h-35v-6 6h-22v1h-53v51h-14v24h-87v81h-21v21h21v21h-21v13h21v17h-21-15v13h15v5h-15v1h15v25h21v17h61v6h39v-6h36v11h18v9h22v42h35v-42h23v-9h31v-11h3v11h12v-11-17zm0 0v-26-5-13-17-13-21-21-3h-12v3h-3v-65h15v-11h-15v-29h-54v-51h-35v-1 1h-22v51h-53v29h-1v-5h-13v5h-26v76h-61v21h61v21h-61v13h61v17h-61-21v13h21v5h-21v1h21v25h61v17h39v-17h36v17h18v11h22v9h35v-9h23v-11h31v-17h3v17h12v-17zm15-419v-12h-2v12zm186 356v-56h-8v-133h-4v-12h-13v-9h-13v-45h-12v-10h-62v-59-6h-26v-16h-33v-10h33v-12h-33v-22h-5v-29h49v-5h-49-8v-17h-119v17h-107-279v34h-38v26h-24v27h24v179h-7v105h-17v55h17v17h-17v13h17v5h-17v1h17v42h18v20h3v94h14 8v62h41v37h26v-37h23v48h18v32h35v61h8v21h122v2h75v37h98v-37h34v17h119v-57h11v29h66v-29h4v-40h-4v-26h3v-123h-3v-27h3v-1h1v-17h-1v-46h1v-17h3v-51-32zm0 0v-54h-4v-2h-3v-73h-10v-60h-13v-12h-12v-9h-31v9h-31v-9-55h-59v-59h-5v-5h5v-1h-5v-16h-8v-10h8v-12h-8v-22h-119v34h117v10h-28v-6h-89v6h-22v5h-175v11h-40v13h-147v11h-4v107h-8v41h-6v105h-22v21h28v21h-17v13h17v17h-14-3v13h3v5h-3v1h3v42h14v20h8v94h41 26 23 18v62h4v48h31v10h8v22h3v11h119v50h75v21h98v-71h34v71h48v-71h30v-11h21v-22h20v-120h11v120h43v-123h17-17v-27h17v-1h6v-17h-6v-46h6v-17h3v-51h1v-32zm-4 0v-11h-6v-43h-4v-2h-13v-39h-12v-34h-4v34h-27v2h-31v-2-34h-48v36h-2v37h-1v-73h-8v-29-52h-5v-17h-8v-38h-15v-59h-15v-6h-89v6h-22v7h-175v16h-15v36h-25v55h-39v11h-4v41h-18v105h-54v-105h-32v105h-4v7h4v14h86v21h-86v13h86v17h-86-4v13h4v5h-4v1h4v42h86v11h18v9h4v19h-4v25h4v50h16v-48h23v45h-8v3h8 122v96h-119v14h119v10h75v22h75v-22h23v-10h34v10h48v-24h-36v-36h15v-60h21v-3h-11v-43h2v15h9v-15h46v15h5v-15h20v-2h-20v-46h20v-37h11v37h8v46h-8v2h8v15h22v-15h1v-2h-1v-46h1v-17h12v-20h13v-31h4v-32zm-142 148v-2h-9v2zm9-2v-46h46v46zm-46 45v-28h46v28zm67-191v-11h-1v-42h-3v42h-19v11h19v32h3v-32zm-61 0v-11h-5v11zm96 0v-11h-4v-43h-13v-2h-2v-37h-10v-2h-4v2h-27v37h-31v-37-2h-5v2h-43v37h-2v3h-1v-3h-8v-62-11-29h-5v-52h-8v-17h-15v-38-52h-15v-7h-89v7h-22v16h-175v36h-15v55h-25v1h-37v10h-2v41h-4v105h-18v21h18v21h-18v13h18v17h-18-86v13h86v5h-86v1h86v42h18v11h4v9h2v19h-2v25h2v2h14v-2h23v2h40v2h82v43h-122v3h122 75v96h-75v14h75v10h75v-10h23v-14h-23v-36h23v-60h34v60h12v-60h15 10v-3h-10v-43h10v-48h11v-37h46v37h5v-37h20v-30h11v30h8v37h22v-17h1v-20h12v-31h13v-32zm-13 0v-11h-2v-43h-10v-2h-4v2h-19v1h-8v42h-31v-21-21-3h-5v3h-43v21h43v21h-43v11h43v19h-45v13h45v1h5v-1h20v-13h-20v-19h31v32h8v1h19v30h3v-30h1v-1h10v-32zm-72 148v-2h-5v2zm5 43h-5zm66-191v-11h-3v11zm-38 146v-46h11v46zm-11 45v-28h11v28zm-11 149v-4h11v4zm-11 40v-40h-8v40zm92-380v-54-2h-4v-133h-13v-12h-13v-9h-12v-45h-31v45h-31v-55-59h-59v-5h33v-1h-33v-16h-5v-10h5v-12h-5v-22h-8v-29h8v-5h-8-119-107v5h107v29h-386v26h-38v27h40v20h-4v11h-14v148h-22v105h-7v55h18v17h-18v13h18v5h-18v1h18v42h3v20h14v94h8 41v62h26v-62h23v62h18v48h4v10h31v22h8v61h122v21h75v2h98v-2h34v2h99v-84h20v-22h11v22h43v-22h23v-123h-6v-27h6v-1h3v-17h-3v-46h3v-17h1v-51h3v-32zm-43 148v-2h-22v2zm22 43h-30zm66 189v-40h-66v40zm41-380v-11h-10v-43h-4v1h-19v42h-8v11h8v32h19v1h3v-1h1v-32zm38 0v-11h-3v-43h-6v-2h-4v-39h-13v-34h-12v-60h-4v60h-27v34h-31v-34-72h-48v72h-3v-29h-8v-52-17h-5v-38h-8v-59h-15v-6h-15v-11h-89v11h-22v6h-175v7h-15v16h-25v36h-43v66h-18v41h-54v-41h-32v41h-4v105h-8v7h8v14h4v21h-4v13h4v17h-4-8v13h8v5h-8v1h8v42h4v11h86v9h18v19h-18v25h18v50h4 16 15 8v110h3v10h119v22h75v11h75v-11h23v-22h34v22h48v-22h30v-24h-30v-96h51v-3h20-20v-28h20v-15h11v15h8v1h22v-1h13v-17h-12v-46h12v-17h17v-51h6v-32z";
+
+ verifyPoly("disjunct", disjunct, aDisjunctRanges);
+ verifyPoly("equal", equal, aEqualRanges);
+ verifyPoly("intersectionN", intersectionN, aIntersectionN);
+ verifyPoly("intersectionE", intersectionE, aIntersectionE);
+ verifyPoly("intersectionS", intersectionS, aIntersectionS);
+ verifyPoly("intersectionW", intersectionW, aIntersectionW);
+ verifyPoly("intersectionNE", intersectionNE, aIntersectionNE);
+ verifyPoly("intersectionSE", intersectionSE, aIntersectionSE);
+ verifyPoly("intersectionSW", intersectionSW, aIntersectionSW);
+ verifyPoly("intersectionNW", intersectionNW, aIntersectionNW);
+ verifyPoly("ringIntersection", ringIntersection, aRingIntersection);
+ verifyPoly("ringIntersection2", ringIntersection2, aRingIntersection2);
+ verifyPoly("ringIntersectExtraStrip", ringIntersectExtraStrip, aRingIntersectExtraStrip);
+ verifyPoly("complexIntersections", complexIntersections, aComplexIntersections);
+ verifyPoly("randomIntersections", randomIntersections, aRandomIntersections);
+ }
+
+ void dumpSvg(const char* pName,
+ const ::basegfx::B2DPolyPolygon& rPoly)
+ {
+ (void)pName; (void)rPoly;
+#if defined(VERBOSE)
+ fprintf(stderr, "%s - svg:d=\"%s\"\n",
+ pName, rtl::OUStringToOString(
+ basegfx::tools::exportToSvgD(rPoly),
+ RTL_TEXTENCODING_UTF8).getStr() );
+#endif
+ }
+
+ void getPolyPolygon()
+ {
+ dumpSvg("disjunct",aDisjunctRanges.solveCrossovers());
+ dumpSvg("equal",aEqualRanges.solveCrossovers());
+ dumpSvg("intersectionN",aIntersectionN.solveCrossovers());
+ dumpSvg("intersectionE",aIntersectionE.solveCrossovers());
+ dumpSvg("intersectionS",aIntersectionS.solveCrossovers());
+ dumpSvg("intersectionW",aIntersectionW.solveCrossovers());
+ dumpSvg("intersectionNE",aIntersectionNE.solveCrossovers());
+ dumpSvg("intersectionSE",aIntersectionSE.solveCrossovers());
+ dumpSvg("intersectionSW",aIntersectionSW.solveCrossovers());
+ dumpSvg("intersectionNW",aIntersectionNW.solveCrossovers());
+ dumpSvg("ringIntersection",aRingIntersection.solveCrossovers());
+ dumpSvg("ringIntersection2",aRingIntersection2.solveCrossovers());
+ dumpSvg("aRingIntersectExtraStrip",aRingIntersectExtraStrip.solveCrossovers());
+ dumpSvg("complexIntersections",aComplexIntersections.solveCrossovers());
+ dumpSvg("randomIntersections",aRandomIntersections.solveCrossovers());
+
+ CPPUNIT_ASSERT_MESSAGE("getPolyPolygon", true );
+ }
+
+ void validatePoly( const char* pName, const B2DPolyRange& rRange )
+ {
+ B2DPolyPolygon genericClip;
+ const sal_uInt32 nCount=rRange.count();
+ for( sal_uInt32 i=0; i<nCount; ++i )
+ {
+ B2DPolygon aRect=tools::createPolygonFromRect(
+ rRange.getElement(i).head);
+ if( rRange.getElement(i).tail.head == ORIENTATION_NEGATIVE )
+ aRect.flip();
+
+ genericClip.append(aRect);
+ }
+
+#if defined(VERBOSE)
+ fprintf(stderr, "%s input - svg:d=\"%s\"\n",
+ pName, rtl::OUStringToOString(
+ basegfx::tools::exportToSvgD(
+ genericClip),
+ RTL_TEXTENCODING_UTF8).getStr() );
+#endif
+
+ const B2DPolyPolygon boxClipResult=rRange.solveCrossovers();
+ const rtl::OUString boxClipSvg(
+ basegfx::tools::exportToSvgD(
+ normalizePoly(
+ boxClipResult)));
+#if defined(VERBOSE)
+ fprintf(stderr, "%s boxclipper - svg:d=\"%s\"\n",
+ pName, rtl::OUStringToOString(
+ boxClipSvg,
+ RTL_TEXTENCODING_UTF8).getStr() );
+#endif
+
+ genericClip = tools::solveCrossovers(genericClip);
+ const rtl::OUString genericClipSvg(
+ basegfx::tools::exportToSvgD(
+ normalizePoly(
+ genericClip)));
+#if defined(VERBOSE)
+ fprintf(stderr, "%s genclipper - svg:d=\"%s\"\n",
+ pName, rtl::OUStringToOString(
+ genericClipSvg,
+ RTL_TEXTENCODING_UTF8).getStr() );
+#endif
+
+ CPPUNIT_ASSERT_MESSAGE(pName,
+ genericClipSvg == boxClipSvg);
+ }
+
+ void validatePoly()
+ {
+ validatePoly("disjunct", aDisjunctRanges);
+ validatePoly("equal", aEqualRanges);
+ validatePoly("intersectionN", aIntersectionN);
+ validatePoly("intersectionE", aIntersectionE);
+ validatePoly("intersectionS", aIntersectionS);
+ validatePoly("intersectionW", aIntersectionW);
+ validatePoly("intersectionNE", aIntersectionNE);
+ validatePoly("intersectionSE", aIntersectionSE);
+ validatePoly("intersectionSW", aIntersectionSW);
+ validatePoly("intersectionNW", aIntersectionNW);
+ // subtle differences on Solaris Intel, comparison not smart enough
+ // (due to floating point inaccuracies)
+ //validatePoly("ringIntersection", aRingIntersection);
+ //validatePoly("ringIntersection2", aRingIntersection2);
+ //validatePoly("ringIntersectExtraStrip", aRingIntersectExtraStrip);
+ // generic clipper buggy here, likely
+ //validatePoly("complexIntersections", aComplexIntersections);
+ //validatePoly("randomIntersections", aRandomIntersections);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(boxclipper);
+ CPPUNIT_TEST(validatePoly);
+ CPPUNIT_TEST(verifyPoly);
+ CPPUNIT_TEST(getPolyPolygon);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+// -----------------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION(basegfx2d::boxclipper);
+} // namespace basegfx2d
diff --git a/basegfx/test/clipstate.cxx b/basegfx/test/clipstate.cxx
new file mode 100644
index 000000000000..3d9f59979aa7
--- /dev/null
+++ b/basegfx/test/clipstate.cxx
@@ -0,0 +1,178 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basegfx.hxx"
+// autogenerated file with codegen.pl
+
+#include "cppunit/TestAssert.h"
+#include "cppunit/TestFixture.h"
+#include "cppunit/extensions/HelperMacros.h"
+
+#include <basegfx/tools/b2dclipstate.hxx>
+#include <basegfx/range/b2dpolyrange.hxx>
+#include <basegfx/polygon/b2dpolygon.hxx>
+#include <basegfx/polygon/b2dpolygontools.hxx>
+#include <basegfx/polygon/b2dpolypolygontools.hxx>
+#include <basegfx/polygon/b2dpolypolygon.hxx>
+#include <basegfx/numeric/ftools.hxx>
+
+#include <boost/bind.hpp>
+
+using namespace ::basegfx;
+
+
+namespace basegfx2d
+{
+
+class clipstate : public CppUnit::TestFixture
+{
+private:
+ tools::B2DClipState aUnion1;
+ tools::B2DClipState aUnion2;
+ tools::B2DClipState aIntersect;
+ tools::B2DClipState aXor;
+ tools::B2DClipState aSubtract;
+
+public:
+ void setUp()
+ {
+ B2DRange aCenter(100, 100, -100, -100);
+ B2DRange aNorth(-10, -110, 10, -90);
+ B2DRange aWest(-110, -10, -90, 10);
+ B2DRange aSouth(-10, 110, 10, 90);
+ B2DRange aEast(110, -10, 90, 10);
+
+ aUnion1.unionRange(aCenter);
+ aUnion1.unionRange(aNorth);
+ aUnion1.unionRange(aWest);
+ aUnion1.unionRange(aSouth);
+ aUnion1.unionRange(aEast);
+
+ aUnion2.makeNull();
+ aUnion2.unionRange(aCenter);
+ aUnion2.unionRange(aNorth);
+ aUnion2.unionRange(aWest);
+ aUnion2.unionRange(aSouth);
+ aUnion2.unionRange(aEast);
+
+ aIntersect.intersectRange(aCenter);
+ aIntersect.intersectRange(aNorth);
+ aIntersect.intersectRange(aWest);
+ aIntersect.intersectRange(aSouth);
+ aIntersect.intersectRange(aEast);
+
+ aXor.makeNull();
+ aXor.xorRange(aCenter);
+ aXor.xorRange(aNorth);
+ aXor.xorRange(aWest);
+ aXor.xorRange(aSouth);
+ aXor.xorRange(aEast);
+
+ aSubtract.intersectRange(aCenter);
+ aSubtract.subtractRange(aNorth);
+ aSubtract.subtractRange(aWest);
+ aSubtract.subtractRange(aSouth);
+ aSubtract.subtractRange(aEast);
+ }
+
+ void tearDown()
+ {}
+
+ void verifyPoly(const char* sName, const char* sSvg, const tools::B2DClipState& toTest)
+ {
+#if defined(VERBOSE)
+ fprintf(stderr, "%s - svg:d=\"%s\"\n",
+ sName, rtl::OUStringToOString(
+ basegfx::tools::exportToSvgD(toTest.getClipPoly()),
+ RTL_TEXTENCODING_UTF8).getStr() );
+#endif
+
+ B2DPolyPolygon aTmp1;
+ CPPUNIT_ASSERT_MESSAGE(sName,
+ tools::importFromSvgD(
+ aTmp1,
+ rtl::OUString::createFromAscii(sSvg)));
+
+ const rtl::OUString aSvg=
+ tools::exportToSvgD(toTest.getClipPoly());
+ B2DPolyPolygon aTmp2;
+ CPPUNIT_ASSERT_MESSAGE(sName,
+ tools::importFromSvgD(
+ aTmp2,
+ aSvg));
+
+ CPPUNIT_ASSERT_MESSAGE(
+ sName,
+ aTmp2 == aTmp1);
+ }
+
+ void verifySimpleRange()
+ {
+ const char* unionSvg="m100 10v90h-90v10h-20v-10h-90v-90h-10v-20h10v-90h90v-10h20v10h90v90h10v20z";
+ const char* intersectSvg="m-100 10v-20h10v20zm80 90v-10h20v10zm-20-190v-10h20v10zm80 100v-20h10v20z";
+ const char* xorSvg="m-100 10h10v-20h-10zm90 110h20v-10h-20zm0-180h20v-10h-20zm100 110h10v-20h-10zm10 20v90h-90v10h-20v-10h-90v-90h-10v-20h10v-90h90v-10h20v10h90v90h10v20z";
+ const char* subtractSvg="m-90 10v-20h-10v-90h90v10h20v-10h90v90h-10v20h10v90h-90v-10h-20v10h-90v-90z";
+
+ CPPUNIT_ASSERT_MESSAGE("cleared clip stays empty under union operation",
+ aUnion1.isCleared());
+ verifyPoly("union", unionSvg, aUnion2);
+ verifyPoly("intersect", intersectSvg, aIntersect);
+ verifyPoly("xor", xorSvg, aXor);
+ verifyPoly("subtract", subtractSvg, aSubtract);
+ }
+
+ void verifyMixedClips()
+ {
+ tools::B2DClipState aMixedClip;
+
+ const char* unionSvg="m100 10v90h-90v10h-20v-10h-90v-90h-10v-20h10v-90h90v-10h20v10h90v90h10v20z";
+
+ B2DPolyPolygon aTmp1;
+ tools::importFromSvgD(
+ aTmp1,
+ rtl::OUString::createFromAscii(unionSvg));
+
+ aMixedClip.intersectPolyPolygon(aTmp1);
+ aMixedClip.subtractRange(B2DRange(-20,-150,20,0));
+ aMixedClip.subtractRange(B2DRange(-150,-20,0,20));
+ aMixedClip.xorRange(B2DRange(-150,-150,150,150));
+
+ const char* mixedClipSvg="m0 0v20h-100v80h90v10h20v-10h90v-90h10v-20h-10v-90h-80v100zm-40-20v-80h-80v80zm-50 170v-300h300v300z";
+ verifyPoly("mixed clip", mixedClipSvg, aMixedClip);
+ }
+
+ CPPUNIT_TEST_SUITE(clipstate);
+ CPPUNIT_TEST(verifySimpleRange);
+ CPPUNIT_TEST(verifyMixedClips);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+// -----------------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION(basegfx2d::clipstate);
+} // namespace basegfx2d
diff --git a/basegfx/test/export.map b/basegfx/test/export.map
new file mode 100644
index 000000000000..3308588ef6f8
--- /dev/null
+++ b/basegfx/test/export.map
@@ -0,0 +1,34 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+UDK_3_0_0 {
+ global:
+ cppunitTestPlugIn;
+
+ local:
+ *;
+};
diff --git a/basegfx/test/genericclipper.cxx b/basegfx/test/genericclipper.cxx
new file mode 100644
index 000000000000..84230a084493
--- /dev/null
+++ b/basegfx/test/genericclipper.cxx
@@ -0,0 +1,159 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basegfx.hxx"
+// autogenerated file with codegen.pl
+
+#include "cppunit/TestAssert.h"
+#include "cppunit/TestFixture.h"
+#include "cppunit/extensions/HelperMacros.h"
+
+#include <basegfx/matrix/b2dhommatrix.hxx>
+#include <basegfx/curve/b2dcubicbezier.hxx>
+#include <basegfx/curve/b2dbeziertools.hxx>
+#include <basegfx/range/b2dpolyrange.hxx>
+#include <basegfx/polygon/b2dpolygon.hxx>
+#include <basegfx/polygon/b2dpolygontools.hxx>
+#include <basegfx/polygon/b2dpolypolygontools.hxx>
+#include <basegfx/polygon/b2dpolypolygoncutter.hxx>
+#include <basegfx/polygon/b2dpolygonclipper.hxx>
+#include <basegfx/polygon/b2dpolypolygon.hxx>
+#include <basegfx/numeric/ftools.hxx>
+
+#include <boost/bind.hpp>
+
+using namespace ::basegfx;
+
+
+namespace basegfx2d
+{
+
+class genericclipper : public CppUnit::TestFixture
+{
+private:
+ B2DPolygon aSelfIntersecting;
+ B2DPolygon aShiftedRectangle;
+
+public:
+ // initialise your test code values here.
+ void setUp()
+ {
+ aSelfIntersecting.append(B2DPoint(0, 0));
+ aSelfIntersecting.append(B2DPoint(0, 100));
+ aSelfIntersecting.append(B2DPoint(75, 100));
+ aSelfIntersecting.append(B2DPoint(75, 50));
+ aSelfIntersecting.append(B2DPoint(25, 50));
+ aSelfIntersecting.append(B2DPoint(25, 150));
+ aSelfIntersecting.append(B2DPoint(100,150));
+ aSelfIntersecting.append(B2DPoint(100,0));
+ aSelfIntersecting.setClosed(true);
+
+ aShiftedRectangle = tools::createPolygonFromRect(
+ B2DRange(0,90,20,150));
+ }
+
+ void tearDown()
+ {}
+
+ void validate(const char* pName,
+ const char* pValidSvgD,
+ B2DPolyPolygon (*pFunc)(const B2DPolyPolygon&, const B2DPolyPolygon&))
+ {
+ const B2DPolyPolygon aSelfIntersect(
+ tools::prepareForPolygonOperation(aSelfIntersecting));
+ const B2DPolyPolygon aRect(
+ tools::prepareForPolygonOperation(aShiftedRectangle));
+#if defined(VERBOSE)
+ fprintf(stderr, "%s input LHS - svg:d=\"%s\"\n",
+ pName, rtl::OUStringToOString(
+ basegfx::tools::exportToSvgD(
+ aSelfIntersect),
+ RTL_TEXTENCODING_UTF8).getStr() );
+ fprintf(stderr, "%s input RHS - svg:d=\"%s\"\n",
+ pName, rtl::OUStringToOString(
+ basegfx::tools::exportToSvgD(
+ aRect),
+ RTL_TEXTENCODING_UTF8).getStr() );
+#endif
+
+ const B2DPolyPolygon aRes=
+ pFunc(aSelfIntersect, aRect);
+
+#if defined(VERBOSE)
+ fprintf(stderr, "%s - svg:d=\"%s\"\n",
+ pName, rtl::OUStringToOString(
+ basegfx::tools::exportToSvgD(aRes),
+ RTL_TEXTENCODING_UTF8).getStr() );
+#endif
+
+ rtl::OUString aValid=rtl::OUString::createFromAscii(pValidSvgD);
+
+ CPPUNIT_ASSERT_MESSAGE(pName,
+ basegfx::tools::exportToSvgD(aRes) == aValid);
+ }
+
+ void validateOr()
+ {
+ const char* pValid="m0 0h100v150h-75v-50h-5v50h-20v-50-10zm75 10v-50h-50v50z";
+ validate("validateOr", pValid, &tools::solvePolygonOperationOr);
+ }
+
+ void validateXor()
+ {
+ const char* pValid="m0 0h100v150h-75v-50h-5v50h-20v-50-10zm0 10h20v-10h-20zm75 10v-50h-50v50z";
+ validate("validateXor", pValid, &tools::solvePolygonOperationXor);
+ }
+
+ void validateAnd()
+ {
+ const char* pValid="m0 100v-10h20v10z";
+ validate("validateAnd", pValid, &tools::solvePolygonOperationAnd);
+ }
+
+ void validateDiff()
+ {
+ const char* pValid="m0 90v-90h100v150h-75v-50h-5v-10zm55 10v-50h-50v50z";
+ validate("validateDiff", pValid, &tools::solvePolygonOperationDiff);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(genericclipper);
+ CPPUNIT_TEST(validateOr);
+ CPPUNIT_TEST(validateXor);
+ CPPUNIT_TEST(validateAnd);
+ CPPUNIT_TEST(validateDiff);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+// -----------------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION(basegfx2d::genericclipper);
+} // namespace basegfx2d
diff --git a/basegfx/test/makefile.mk b/basegfx/test/makefile.mk
new file mode 100644
index 000000000000..2c0f30c291a9
--- /dev/null
+++ b/basegfx/test/makefile.mk
@@ -0,0 +1,80 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..
+
+PRJNAME=basegfx
+TARGET=tests
+
+ENABLE_EXCEPTIONS=TRUE
+
+# --- Settings -----------------------------------------------------
+
+.INCLUDE : settings.mk
+
+CFLAGSCXX += $(CPPUNIT_CFLAGS)
+
+# --- Common ----------------------------------------------------------
+
+SHL1OBJS= \
+ $(SLO)$/basegfx1d.obj \
+ $(SLO)$/basegfx2d.obj \
+ $(SLO)$/basegfx3d.obj \
+ $(SLO)$/boxclipper.obj \
+ $(SLO)$/basegfxtools.obj \
+ $(SLO)$/clipstate.obj \
+ $(SLO)$/genericclipper.obj \
+ $(SLO)$/testtools.obj
+
+SHL1TARGET= basegfx_tests
+SHL1STDLIBS= \
+ $(BASEGFXLIB) \
+ $(SALLIB) \
+ $(CPPUHELPERLIB) \
+ $(CPPULIB) \
+ $(CPPUNITLIB)
+
+SHL1IMPLIB= i$(SHL1TARGET)
+
+DEF1NAME =$(SHL1TARGET)
+SHL1VERSIONMAP = export.map
+SHL1RPATH = NONE
+
+# END ------------------------------------------------------------------
+
+#------------------------------- All object files -------------------------------
+# do this here, so we get right dependencies
+SLOFILES=$(SHL1OBJS)
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : target.mk
+.INCLUDE : _cppunit.mk
+
+.IF "$(verbose)"!="" || "$(VERBOSE)"!=""
+CDEFS+= -DVERBOSE
+.ENDIF
diff --git a/basegfx/test/testtools.cxx b/basegfx/test/testtools.cxx
new file mode 100644
index 000000000000..e96eb4d8edce
--- /dev/null
+++ b/basegfx/test/testtools.cxx
@@ -0,0 +1,235 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basegfx.hxx"
+
+#include "testtools.hxx"
+
+#include <basegfx/point/b2dpoint.hxx>
+#include <basegfx/vector/b2dvector.hxx>
+#include <basegfx/range/b2drange.hxx>
+#include <basegfx/curve/b2dcubicbezier.hxx>
+#include <basegfx/polygon/b2dpolygon.hxx>
+#include <basegfx/polygon/b2dpolypolygon.hxx>
+
+#include <algorithm>
+
+
+namespace basegfx
+{
+ namespace testtools
+ {
+ Plotter::Plotter( ::std::ostream& rOutputStream ) :
+ mrOutputStream(rOutputStream),
+ maPoints(),
+ mbFirstElement( true )
+ {
+ // output gnuplot setup. We switch gnuplot to parametric
+ // mode, therefore every plot has at least _two_
+ // functions: one for the x and one for the y value, both
+ // depending on t.
+ mrOutputStream << "#!/usr/bin/gnuplot -persist" << ::std::endl
+ << "#" << ::std::endl
+ << "# automatically generated by basegfx::testtools::Plotter, don't change!" << ::std::endl
+ << "#" << ::std::endl
+ << "set parametric" << ::std::endl
+ // This function plots a cubic bezier curve. P,q,r,s
+ // are the control point elements of the corresponding
+ // output coordinate component (i.e. x components for
+ // the x plot, and y components for the y plot)
+ << "cubicBezier(p,q,r,s,t) = p*(1-t)**3+q*3*(1-t)**2*t+r*3*(1-t)*t**2+s*t**3" << ::std::endl
+
+ // This function plots the derivative of a cubic
+ // bezier curve. P,q,r,s are the control point
+ // components of the _original_ curve
+ << "cubicBezDerivative(p,q,r,s,t) = 3*(q-p)*(1-t)**2+6*(r-q)*(1-t)*t+3*(s-r)*t**2" << ::std::endl
+
+ // Plot a line's x component of a line in implicit
+ // form ax + by + c = 0
+ << "implicitLineX(a,b,c,t) = a*-c + t*-b" << ::std::endl
+
+ // Plot a line's y component of a line in implicit
+ // form ax + by + c = 0
+ << "implicitLineY(a,b,c,t) = b*-c + t*a" << ::std::endl
+
+ // Plot a line's component of a line between a and b
+ // (where a and b should be the corresponding
+ // components of the line's start and end point,
+ // respectively)
+ << "line(a,b,t) = a*(1-t) + b*t" << ::std::endl << ::std::endl
+ << "# end of setup" << ::std::endl << ::std::endl
+
+ // Start the actual plot line
+ << "plot [t=0:1] ";
+ }
+
+ namespace
+ {
+ class PointWriter
+ {
+ public:
+ PointWriter( ::std::ostream& rOutputStream ) :
+ mrOutputStream( rOutputStream )
+ {
+ }
+
+ void operator()( const B2DPoint& rPoint ) const
+ {
+ mrOutputStream << rPoint.getX() << "\t" << rPoint.getY() << ::std::endl;
+ mrOutputStream << "e" << ::std::endl;
+ }
+
+ private:
+ ::std::ostream& mrOutputStream;
+ };
+ }
+
+ Plotter::~Plotter()
+ {
+ // End the plot line
+ mrOutputStream << ::std::endl;
+
+ // write stored data points. Cannot write before, since
+ // this is an inline dataset, which must be after the plot <...>
+ // line
+ ::std::for_each( maPoints.begin(), maPoints.end(), PointWriter(mrOutputStream) );
+ }
+
+ void Plotter::plot( const B2DPolygon& rPoly )
+ {
+ const sal_uInt32 pointCount( rPoly.count() );
+
+ if( pointCount < 1 )
+ return;
+
+ if( pointCount == 1 )
+ {
+ plot( rPoly.getB2DPoint(0) );
+ return;
+ }
+
+ sal_uInt32 i;
+ for( i=0; i<pointCount-1; ++i )
+ {
+ if(rPoly.isNextControlPointUsed(i) || rPoly.isPrevControlPointUsed(i + 1))
+ {
+ const B2DCubicBezier aBezierPlot(
+ rPoly.getB2DPoint(i), rPoly.getNextControlPoint(i),
+ rPoly.getPrevControlPoint(i + 1), rPoly.getB2DPoint(i + 1));
+
+ plot(aBezierPlot);
+ }
+ else
+ {
+ plot( rPoly.getB2DPoint(i), rPoly.getB2DPoint(i+1) );
+ }
+ }
+ }
+
+ void Plotter::plot( const B2DPolyPolygon& rPolyPoly )
+ {
+ const sal_uInt32 nPolyCount( rPolyPoly.count() );
+
+ sal_uInt32 i;
+ for( i=0; i<nPolyCount; ++i )
+ {
+ plot( rPolyPoly.getB2DPolygon(i) );
+ }
+ }
+
+ void Plotter::plot( const B2DPoint& rPoint )
+ {
+ maPoints.push_back( rPoint );
+ writeSeparator();
+ mrOutputStream << "'-' using ($1):($2) title \"Point " << maPoints.size() << "\" with points";
+ }
+
+ void Plotter::plot( const B2DRange& rRect )
+ {
+ // TODO: do that also as a data file plot. maPoints must
+ // then become polymorph, but WTF.
+
+ // decompose into four lines
+ plot( B2DPoint(rRect.getMinX(),
+ rRect.getMinY()),
+ B2DPoint(rRect.getMaxX(),
+ rRect.getMinY()) );
+ plot( B2DPoint(rRect.getMaxX(),
+ rRect.getMinY()),
+ B2DPoint(rRect.getMaxX(),
+ rRect.getMaxY()) );
+ plot( B2DPoint(rRect.getMaxX(),
+ rRect.getMaxY()),
+ B2DPoint(rRect.getMinX(),
+ rRect.getMaxY()) );
+ plot( B2DPoint(rRect.getMinX(),
+ rRect.getMaxY()),
+ B2DPoint(rRect.getMinX(),
+ rRect.getMinY()) );
+ }
+
+ void Plotter::plot( const B2DPoint& rStartPoint, const B2DPoint& rEndPoint )
+ {
+ writeSeparator();
+ mrOutputStream << "line(" << rStartPoint.getX()
+ << "," << rEndPoint.getX()
+ << ",t), "
+ << "line(" << rStartPoint.getY()
+ << "," << rEndPoint.getY()
+ << ",t)";
+ }
+
+ void Plotter::plot( const B2DCubicBezier& rCurve )
+ {
+ writeSeparator();
+ mrOutputStream << "cubicBezier(" << rCurve.getStartPoint().getX()
+ << "," << rCurve.getControlPointA().getX()
+ << "," << rCurve.getControlPointB().getX()
+ << "," << rCurve.getEndPoint().getX()
+ << ",t), "
+ << "cubicBezier(" << rCurve.getStartPoint().getY()
+ << "," << rCurve.getControlPointA().getY()
+ << "," << rCurve.getControlPointB().getY()
+ << "," << rCurve.getEndPoint().getY()
+ << ",t)";
+ }
+
+ void Plotter::writeSeparator()
+ {
+ if( mbFirstElement )
+ {
+ mbFirstElement = false;
+ }
+ else
+ {
+ mrOutputStream << ", ";
+ }
+ }
+
+ }
+}
diff --git a/basegfx/test/testtools.hxx b/basegfx/test/testtools.hxx
new file mode 100644
index 000000000000..1837f9f31a89
--- /dev/null
+++ b/basegfx/test/testtools.hxx
@@ -0,0 +1,98 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BASEGFX_TESTTOOLS_HXX
+#define _BASEGFX_TESTTOOLS_HXX
+
+#include <basegfx/point/b2dpoint.hxx>
+
+#include <vector>
+#include <iostream>
+
+
+namespace basegfx
+{
+ class B2DCubicBezier;
+ class B2DPolygon;
+ class B2DPolyPolygon;
+ class B2DRange;
+
+ namespace testtools
+ {
+ class Plotter
+ {
+ public:
+ /** Create a plotter for the given output stream
+
+ This class can be used to generate gnuplot scripts for
+ a number of basegfx graphics primitives, useful for
+ debugging, regression-testing and comparing basegfx.
+ */
+ Plotter( ::std::ostream& rOutputStream );
+
+ /** Delete the plotter
+
+ This implicitely flushes all potential pending writes
+ to the output stream
+ */
+ ~Plotter();
+
+ /** Plot a 2d polygon into the current graph
+ */
+ void plot( const B2DPolygon& rPoly );
+
+ /** Plot a 2d polyPolygon into the current graph
+ */
+ void plot( const B2DPolyPolygon& rPolyPoly );
+
+ /** Plot a 2d point into the current graph
+ */
+ void plot( const B2DPoint& rPoint );
+
+ /** Plot a 2d rectangle into the current graph
+ */
+ void plot( const B2DRange& rRect );
+
+ /** Plot a 2d line into the current graph
+ */
+ void plot( const B2DPoint& rStartPoint, const B2DPoint& rEndPoint );
+
+ /** Plot a 2d cubic bezier curve into the current graph
+ */
+ void plot( const B2DCubicBezier& rCurve );
+
+ private:
+ void writeSeparator();
+
+ ::std::ostream& mrOutputStream;
+ ::std::vector< B2DPoint > maPoints;
+ bool mbFirstElement;
+ };
+ }
+}
+
+#endif /* _BASEGFX_TESTTOOLS_HXX */
diff --git a/basegfx/util/basegfx.flt b/basegfx/util/basegfx.flt
new file mode 100644
index 000000000000..57bb2e2ff324
--- /dev/null
+++ b/basegfx/util/basegfx.flt
@@ -0,0 +1,6 @@
+__CT
+__real
++getImplementation
+Impl
+IMP
+internal \ No newline at end of file
diff --git a/basegfx/util/makefile.mk b/basegfx/util/makefile.mk
new file mode 100644
index 000000000000..4d5d92ce7551
--- /dev/null
+++ b/basegfx/util/makefile.mk
@@ -0,0 +1,85 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..
+
+PRJNAME=basegfx
+TARGET=basegfx
+
+# --- Settings ---------------------------------------------------
+
+.INCLUDE : settings.mk
+
+# --- Allgemein ---------------------------------------------------
+
+LIB1TARGET=$(SLB)$/basegfx.lib
+LIB1FILES=\
+ $(SLB)$/curve.lib \
+ $(SLB)$/matrix.lib \
+ $(SLB)$/numeric.lib \
+ $(SLB)$/point.lib \
+ $(SLB)$/polygon.lib \
+ $(SLB)$/range.lib \
+ $(SLB)$/tuple.lib \
+ $(SLB)$/tools.lib \
+ $(SLB)$/vector.lib \
+ $(SLB)$/color.lib \
+ $(SLB)$/pixel.lib \
+ $(SLB)$/raster.lib
+
+SHL1TARGET= basegfx$(DLLPOSTFIX)
+.IF "$(GUI)" == "OS2"
+SHL1TARGET= bgfx
+.ENDIF
+SHL1IMPLIB= ibasegfx
+
+SHL1STDLIBS=\
+ $(SALLIB) \
+ $(CPPUHELPERLIB) \
+ $(CPPULIB)
+
+SHL1DEF= $(MISC)$/$(SHL1TARGET).def
+SHL1LIBS= $(SLB)$/basegfx.lib
+
+DEF1NAME =$(SHL1TARGET)
+DEF1DEPN =$(MISC)$/$(SHL1TARGET).flt \
+ $(LIB1TARGET)
+
+DEF1DES =BaseGFX
+DEFLIB1NAME =basegfx
+
+LIB2TARGET=$(LB)$/$(TARGET)_s.lib
+LIB2ARCHIV=$(LB)$/lib$(TARGET)_s.a
+LIB2FILES=$(LIB1FILES)
+
+# --- Targets -----------------------------------------------------------
+
+.INCLUDE : target.mk
+
+$(MISC)$/$(SHL1TARGET).flt : makefile.mk
+ @$(TYPE) $(TARGET).flt > $@
+
diff --git a/basic/inc/basic/basicmanagerrepository.hxx b/basic/inc/basic/basicmanagerrepository.hxx
new file mode 100644
index 000000000000..c4ff6d515026
--- /dev/null
+++ b/basic/inc/basic/basicmanagerrepository.hxx
@@ -0,0 +1,146 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef BASICMANAGERREPOSITORY_HXX
+#define BASICMANAGERREPOSITORY_HXX
+
+/** === begin UNO includes === **/
+#include <com/sun/star/frame/XModel.hpp>
+#include <com/sun/star/embed/XStorage.hpp>
+/** === end UNO includes === **/
+
+class BasicManager;
+
+//........................................................................
+namespace basic
+{
+//........................................................................
+
+ //====================================================================
+ //= BasicManagerRepository
+ //====================================================================
+ /** specifies a callback for instances which are interested in BasicManagers
+ created by the BasicManagerRepository.
+ */
+ class SAL_NO_VTABLE BasicManagerCreationListener
+ {
+ public:
+ /** is called when a BasicManager has been created
+
+ @param _rxForDocument
+ denotes the document for which the BasicManager has been created. If this is <NULL/>,
+ then the BasicManager is the application-wide BasicManager.
+
+ @param _pBasicManager
+ denotes the BasicManager which has been created. The listener might for instance
+ decide to add global variables to it, or otherwise initialize it.
+ */
+ virtual void onBasicManagerCreated(
+ const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel >& _rxForDocument,
+ BasicManager& _rBasicManager
+ ) = 0;
+ };
+
+ //====================================================================
+ //= BasicManagerRepository
+ //====================================================================
+ class BasicManagerRepository
+ {
+ public:
+ /** returns the BasicManager belonging to the given document
+
+ If the BasicManager does not yet exist, it is created. In this case, if the application's
+ BasicManager does not yet exist, it is also created. This is necessary since
+ the application's BasicManager acts as parent for all document's BasicManagers.
+
+ If you're interested in this case - the implicit creation of the application's BasicManager -,
+ then you need to register as BasicManagerCreationListener.
+
+ @param _rxDocumentModel
+ denotes the document model whose BasicManager is to be retrieved. Must not be <NULL/>.
+ The document should support the XDocumentInfoSupplier interface, for retrieving
+ its title, which is needed in some error conditions.
+ Also it <em>must</em> support the XStorageBasedDocument interface, since we
+ must be able to retrieve the document's storage. If this interface is <em>not</em>
+ supported, creating a new BasicManager will certainly fail.
+
+ @return
+ the BasicManager for this model.
+
+ @attention
+ The returned BasicManager instances is owned by the repository. In particular,
+ you are not allowed to delete it. Instead, the given model is observed: As soon
+ as it's closed, the associated BasicManager is deleted.
+ */
+ static BasicManager* getDocumentBasicManager(
+ const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel >& _rxDocumentModel
+ );
+
+ /** returns the application-wide BasicManager
+
+ @param _bCreate
+ determines whether the BasicManager should be created (<TRUE/>) if it
+ does not yet exist.
+
+ @attention
+ If the BasicManager is newly created, then it is still owned by the repository.
+ In particular, you are not allowed to delete it. Instead, call resetApplicationBasicManager
+ to release the BasicManager.
+ */
+ static BasicManager* getApplicationBasicManager( bool _bCreate );
+
+ /** resets the application-wide BasicManager to <NULL/>
+ */
+ static void resetApplicationBasicManager();
+
+ /** registers a BasicManagerCreationListener instance which is notified whenever
+ the repository creates a BasicManager instance.
+
+ Note that this listener is <em>not</em> called when somebody else
+ creates BasicManager instances.
+
+ If the same listener is registered multiple times, it is also notified
+ multiple times, and needs to be revoked once for each registration.
+ */
+ static void registerCreationListener(
+ BasicManagerCreationListener& _rListener
+ );
+
+ /** reveokes a BasicManagerCreationListener instance which has previously
+ been registered to be notified about created BasicManager instances.
+ */
+ static void revokeCreationListener(
+ BasicManagerCreationListener& _rListener
+ );
+ };
+
+//........................................................................
+} // namespace basic
+//........................................................................
+
+#endif // BASICMANAGERREPOSITORY_HXX
+
diff --git a/basic/inc/basic/basicrt.hxx b/basic/inc/basic/basicrt.hxx
new file mode 100644
index 000000000000..6d50e1cddc07
--- /dev/null
+++ b/basic/inc/basic/basicrt.hxx
@@ -0,0 +1,79 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef _BASICRT_HXX
+#define _BASICRT_HXX
+
+#include <tools/string.hxx>
+#include <basic/sbxdef.hxx>
+
+class SbiRuntime;
+class SbErrorStackEntry;
+
+class BasicRuntime
+{
+ SbiRuntime* pRun;
+public:
+ BasicRuntime( SbiRuntime* p ) : pRun ( p ){;}
+ const String GetSourceRevision();
+ const String GetModuleName( SbxNameType nType );
+ const String GetMethodName( SbxNameType nType );
+ xub_StrLen GetLine();
+ xub_StrLen GetCol1();
+ xub_StrLen GetCol2();
+ BOOL IsRun();
+ BOOL IsValid() { return pRun != NULL; }
+ BasicRuntime GetNextRuntime();
+};
+
+class BasicErrorStackEntry
+{
+ SbErrorStackEntry *pEntry;
+public:
+ BasicErrorStackEntry( SbErrorStackEntry *p ) : pEntry ( p ){;}
+ const String GetSourceRevision();
+ const String GetModuleName( SbxNameType nType );
+ const String GetMethodName( SbxNameType nType );
+ xub_StrLen GetLine();
+ xub_StrLen GetCol1();
+ xub_StrLen GetCol2();
+};
+
+class BasicRuntimeAccess
+{
+public:
+ static BasicRuntime GetRuntime();
+ static bool HasRuntime();
+ static USHORT GetStackEntryCount();
+ static BasicErrorStackEntry GetStackEntry( USHORT nIndex );
+ static BOOL HasStack();
+ static void DeleteStack();
+
+ static BOOL IsRunInit();
+};
+
+#endif
+
diff --git a/basic/inc/basic/basmgr.hxx b/basic/inc/basic/basmgr.hxx
new file mode 100644
index 000000000000..5c62c347fbdd
--- /dev/null
+++ b/basic/inc/basic/basmgr.hxx
@@ -0,0 +1,261 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+//
+#ifndef _BASMGR_HXX
+#define _BASMGR_HXX
+
+#include <tools/string.hxx>
+#include <svl/brdcst.hxx>
+#include <basic/sbstar.hxx>
+#include <com/sun/star/script/XStorageBasedLibraryContainer.hpp>
+#include <com/sun/star/script/XStarBasicAccess.hpp>
+
+
+// Basic XML Import/Export
+com::sun::star::uno::Reference< com::sun::star::script::XStarBasicAccess >
+ getStarBasicAccess( BasicManager* pMgr );
+
+
+
+class SotStorage;
+
+#define BASERR_ID_STDLIBOPEN ERRCODE_BASMGR_STDLIBOPEN
+#define BASERR_ID_STDLIBSAVE ERRCODE_BASMGR_STDLIBSAVE
+#define BASERR_ID_LIBLOAD ERRCODE_BASMGR_LIBLOAD
+#define BASERR_ID_LIBCREATE ERRCODE_BASMGR_LIBCREATE
+#define BASERR_ID_LIBSAVE ERRCODE_BASMGR_LIBSAVE
+#define BASERR_ID_LIBDEL ERRCODE_BASMGR_LIBDEL
+#define BASERR_ID_MGROPEN ERRCODE_BASMGR_MGROPEN
+#define BASERR_ID_MGRSAVE ERRCODE_BASMGR_MGRSAVE
+#define BASERR_ID_REMOVELIB ERRCODE_BASMGR_REMOVELIB
+#define BASERR_ID_UNLOADLIB ERRCODE_BASMGR_UNLOADLIB
+
+#define BASERR_REASON_OPENSTORAGE 0x0001
+#define BASERR_REASON_OPENLIBSTORAGE 0x0002
+#define BASERR_REASON_OPENMGRSTREAM 0x0004
+#define BASERR_REASON_OPENLIBSTREAM 0x0008
+#define BASERR_REASON_LIBNOTFOUND 0x0010
+#define BASERR_REASON_STORAGENOTFOUND 0x0020
+#define BASERR_REASON_BASICLOADERROR 0x0040
+#define BASERR_REASON_NOSTORAGENAME 0x0080
+
+#define BASERR_REASON_STDLIB 0x0100
+
+class BasicError
+{
+private:
+ ULONG nErrorId;
+ USHORT nReason;
+ String aErrStr;
+
+public:
+ BasicError();
+ BasicError( const BasicError& rErr );
+ BasicError( ULONG nId, USHORT nR, const String& rErrStr );
+
+ ULONG GetErrorId() const { return nErrorId; }
+ USHORT GetReason() const { return nReason; }
+ String GetErrorStr() { return aErrStr; }
+
+ void SetErrorId( ULONG n ) { nErrorId = n; }
+ void SetReason( USHORT n ) { nReason = n; }
+ void SetErrorStr( const String& rStr) { aErrStr = rStr; }
+};
+
+
+//
+
+class BasicLibs;
+class ErrorManager;
+class BasicLibInfo;
+class BasicErrorManager;
+namespace basic { class BasicManagerCleaner; }
+
+// Library password handling for 5.0 documents
+class OldBasicPassword
+{
+public:
+ virtual void setLibraryPassword( const String& rLibraryName, const String& rPassword ) = 0;
+ virtual String getLibraryPassword( const String& rLibraryName ) = 0;
+ virtual void clearLibraryPassword( const String& rLibraryName ) = 0;
+ virtual sal_Bool hasLibraryPassword( const String& rLibraryName ) = 0;
+};
+
+struct LibraryContainerInfo
+{
+ ::com::sun::star::uno::Reference< com::sun::star::script::XPersistentLibraryContainer > mxScriptCont;
+ ::com::sun::star::uno::Reference< com::sun::star::script::XPersistentLibraryContainer > mxDialogCont;
+ OldBasicPassword* mpOldBasicPassword;
+
+ LibraryContainerInfo()
+ :mpOldBasicPassword( NULL )
+ {
+ }
+
+ LibraryContainerInfo
+ (
+ com::sun::star::uno::Reference< com::sun::star::script::XPersistentLibraryContainer > xScriptCont,
+ com::sun::star::uno::Reference< com::sun::star::script::XPersistentLibraryContainer > xDialogCont,
+ OldBasicPassword* pOldBasicPassword
+ )
+ : mxScriptCont( xScriptCont )
+ , mxDialogCont( xDialogCont )
+ , mpOldBasicPassword( pOldBasicPassword )
+ {}
+};
+
+struct BasicManagerImpl;
+
+
+#define LIB_NOTFOUND 0xFFFF
+
+class BasicManager : public SfxBroadcaster
+{
+ friend class LibraryContainer_Impl;
+ friend class StarBasicAccess_Impl;
+ friend class BasMgrContainerListenerImpl;
+ friend class ::basic::BasicManagerCleaner;
+
+private:
+ BasicLibs* pLibs;
+ BasicErrorManager* pErrorMgr;
+
+ String aName;
+ String maStorageName;
+ BOOL bBasMgrModified;
+ BOOL mbDocMgr;
+
+ BasicManagerImpl* mpImpl;
+
+ void Init();
+
+protected:
+ BOOL ImpLoadLibary( BasicLibInfo* pLibInfo ) const;
+ BOOL ImpLoadLibary( BasicLibInfo* pLibInfo, SotStorage* pCurStorage, BOOL bInfosOnly = FALSE ) const;
+ void ImpCreateStdLib( StarBASIC* pParentFromStdLib );
+ void ImpMgrNotLoaded( const String& rStorageName );
+ BasicLibInfo* CreateLibInfo();
+ void LoadBasicManager( SotStorage& rStorage, const String& rBaseURL, BOOL bLoadBasics = TRUE );
+ void LoadOldBasicManager( SotStorage& rStorage );
+ BOOL ImplLoadBasic( SvStream& rStrm, StarBASICRef& rOldBasic ) const;
+ BOOL ImplEncryptStream( SvStream& rStream ) const;
+ BasicLibInfo* FindLibInfo( StarBASIC* pBasic ) const;
+ void CheckModules( StarBASIC* pBasic, BOOL bReference ) const;
+ void SetFlagToAllLibs( short nFlag, BOOL bSet ) const;
+ BasicManager(); // Nur zum anpassen von Pfaden bei 'Speichern unter'.
+ ~BasicManager();
+
+public:
+ TYPEINFO();
+ BasicManager( SotStorage& rStorage, const String& rBaseURL, StarBASIC* pParentFromStdLib = NULL, String* pLibPath = NULL, BOOL bDocMgr = FALSE );
+ BasicManager( StarBASIC* pStdLib, String* pLibPath = NULL, BOOL bDocMgr = FALSE );
+
+ /** deletes the given BasicManager instance
+
+ This method is necessary since normally, BasicManager instances are owned by the BasicManagerRepository,
+ and expected to be deleted by the repository only. However, there exists quite some legacy code,
+ which needs to explicitly delete a BasicManager itself. This code must not use the (protected)
+ destructor, but LegacyDeleteBasicManager.
+ */
+ static void LegacyDeleteBasicManager( BasicManager*& _rpManager );
+
+ void SetStorageName( const String& rName ) { maStorageName = rName; }
+ String GetStorageName() const { return maStorageName; }
+ void SetName( const String& rName ) { aName = rName; }
+ String GetName() const { return aName; }
+
+
+ USHORT GetLibCount() const;
+ StarBASIC* GetLib( USHORT nLib ) const;
+ StarBASIC* GetLib( const String& rName ) const;
+ USHORT GetLibId( const String& rName ) const;
+
+ String GetLibName( USHORT nLib );
+
+ /** announces the library containers which belong to this BasicManager
+
+ The method will automatically add two global constants, BasicLibraries and DialogLibraries,
+ to the BasicManager.
+ */
+ void SetLibraryContainerInfo( const LibraryContainerInfo& rInfo );
+
+ const ::com::sun::star::uno::Reference< com::sun::star::script::XPersistentLibraryContainer >&
+ GetDialogLibraryContainer() const;
+ const ::com::sun::star::uno::Reference< com::sun::star::script::XPersistentLibraryContainer >&
+ GetScriptLibraryContainer() const;
+
+ BOOL LoadLib( USHORT nLib );
+ BOOL RemoveLib( USHORT nLib, BOOL bDelBasicFromStorage );
+
+ // Modify-Flag wird nur beim Speichern zurueckgesetzt.
+ BOOL IsModified() const;
+ BOOL IsBasicModified() const;
+
+ BOOL HasErrors();
+ void ClearErrors();
+ BasicError* GetFirstError();
+ BasicError* GetNextError();
+
+ /** sets a global constant in the basic library, referring to some UNO object, to a new value.
+
+ If a constant with this name already existed before, its value is changed, and the old constant is
+ returned. If it does not yet exist, it is newly created, and inserted into the basic library.
+ */
+ ::com::sun::star::uno::Any
+ SetGlobalUNOConstant( const sal_Char* _pAsciiName, const ::com::sun::star::uno::Any& _rValue );
+
+ /** retrieves a global constant in the basic library, referring to some UNO object, returns true if a value is found ( value is in aOut ) false otherwise. */
+ bool GetGlobalUNOConstant( const sal_Char* _pAsciiName, ::com::sun::star::uno::Any& aOut );
+ /** determines whether there are password-protected modules whose size exceedes the
+ legacy module size
+ @param _out_rModuleNames
+ takes the names of modules whose size exceeds the legacy limit
+ */
+ bool LegacyPsswdBinaryLimitExceeded( ::com::sun::star::uno::Sequence< rtl::OUString >& _out_rModuleNames );
+
+private:
+ BOOL IsReference( USHORT nLib );
+
+ BOOL SetLibName( USHORT nLib, const String& rName );
+
+ StarBASIC* GetStdLib() const;
+ StarBASIC* AddLib( SotStorage& rStorage, const String& rLibName, BOOL bReference );
+ BOOL RemoveLib( USHORT nLib );
+ BOOL HasLib( const String& rName ) const;
+
+ StarBASIC* CreateLibForLibContainer( const String& rLibName,
+ const com::sun::star::uno::Reference< com::sun::star::script::XLibraryContainer >&
+ xScriptCont );
+ // For XML import/export:
+ StarBASIC* CreateLib( const String& rLibName );
+ StarBASIC* CreateLib( const String& rLibName, const String& Password,
+ const String& LinkTargetURL );
+};
+
+void SetAppBasicManager( BasicManager* pBasMgr );
+
+#endif //_BASMGR_HXX
diff --git a/basic/inc/basic/basrdll.hxx b/basic/inc/basic/basrdll.hxx
new file mode 100644
index 000000000000..aecf55c26a22
--- /dev/null
+++ b/basic/inc/basic/basrdll.hxx
@@ -0,0 +1,59 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BASRDLL_HXX
+#define _BASRDLL_HXX
+
+class ResMgr;
+
+#include <vcl/accel.hxx>
+
+class BasicDLL
+{
+private:
+ ResMgr* pSttResMgr;
+ ResMgr* pBasResMgr;
+
+ BOOL bDebugMode;
+ BOOL bBreakEnabled;
+
+public:
+ BasicDLL();
+ ~BasicDLL();
+
+ ResMgr* GetSttResMgr() const { return pSttResMgr; }
+ ResMgr* GetBasResMgr() const { return pBasResMgr; }
+
+ static void BasicBreak();
+
+ static void EnableBreak( BOOL bEnable );
+ static void SetDebugMode( BOOL bDebugMode );
+};
+
+#define BASIC_DLL() (*(BasicDLL**)GetAppData( SHL_BASIC ) )
+
+#endif //_BASRDLL_HXX
diff --git a/basic/inc/basic/dispdefs.hxx b/basic/inc/basic/dispdefs.hxx
new file mode 100644
index 000000000000..3b86d54d6b39
--- /dev/null
+++ b/basic/inc/basic/dispdefs.hxx
@@ -0,0 +1,38 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef _BASIC_DISPDEFS_HXX
+#define _BASIC_DISPDEFS_HXX
+
+#define DH_MODE_DATA_VALID 0x0001 // ModeData (for compatibility with old Office)
+
+#define DH_MODE_KURZNAME 0x0002 // View short name instead of UniqueID (if possible)
+#define DH_MODE_LANGNAME 0x0004 // Always view long name
+#define DH_MODE_ALLWIN 0x0008 // View all windows
+#define DH_MODE_SEND_DATA 0x0010 // Send data to Testtool
+
+#endif
+
diff --git a/basic/inc/basic/mybasic.hxx b/basic/inc/basic/mybasic.hxx
new file mode 100644
index 000000000000..02002f43cdd4
--- /dev/null
+++ b/basic/inc/basic/mybasic.hxx
@@ -0,0 +1,94 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _MYBASIC_HXX
+#define _MYBASIC_HXX
+
+#include <basic/sbstar.hxx>
+
+class BasicApp;
+class AppBasEd;
+class ErrorEntry;
+
+class BasicError {
+ AppBasEd* pWin;
+ USHORT nLine, nCol1, nCol2;
+ String aText;
+public:
+ BasicError( AppBasEd*, USHORT, const String&, USHORT, USHORT, USHORT );
+ void Show();
+};
+
+DECLARE_LIST( ErrorList, BasicError* )
+
+#define SBXID_MYBASIC 0x594D // MyBasic: MY
+#define SBXCR_TEST 0x54534554 // TEST
+
+class MyBasic : public StarBASIC
+{
+ SbError nError;
+ virtual BOOL ErrorHdl();
+ virtual USHORT BreakHdl();
+
+protected:
+ Link GenLogHdl();
+ Link GenWinInfoHdl();
+ Link GenModuleWinExistsHdl();
+ Link GenWriteStringHdl();
+
+ virtual void StartListeningTT( SfxBroadcaster &rBroadcaster );
+
+ String GenRealString( const String &aResString );
+
+public:
+ SBX_DECL_PERSIST_NODATA(SBXCR_TEST,SBXID_MYBASIC,1);
+ TYPEINFO();
+ ErrorList aErrors;
+ MyBasic();
+ virtual ~MyBasic();
+ virtual BOOL Compile( SbModule* );
+ void Reset();
+ SbError GetErrors() { return nError; }
+
+ // Do not use #ifdefs here because this header file is both used for testtool and basic
+ SbxObject *pTestObject; // for Testool; otherwise NULL
+
+ virtual void LoadIniFile();
+
+ // Determines the extended symbol type for syntax highlighting
+ virtual SbTextType GetSymbolType( const String &Symbol, BOOL bWasTTControl );
+ virtual const String GetSpechialErrorText();
+ virtual void ReportRuntimeError( AppBasEd *pEditWin );
+ virtual void DebugFindNoErrors( BOOL bDebugFindNoErrors );
+
+ static void SetCompileModule( SbModule *pMod );
+ static SbModule *GetCompileModule();
+};
+
+SV_DECL_IMPL_REF(MyBasic)
+
+#endif
diff --git a/basic/inc/basic/process.hxx b/basic/inc/basic/process.hxx
new file mode 100644
index 000000000000..20cdbe1d4aa4
--- /dev/null
+++ b/basic/inc/basic/process.hxx
@@ -0,0 +1,63 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _PROCESS_HXX
+#define _PROCESS_HXX
+
+#include <tools/string.hxx>
+#include <vos/process.hxx>
+
+#include <map>
+
+typedef std::map< String, String > Environment;
+typedef Environment::value_type EnvironmentVariable;
+
+class Process
+{
+ // Internal members and methods
+ NAMESPACE_VOS(OArgumentList) *pArgumentList;
+ NAMESPACE_VOS(OEnvironment) *pEnvList;
+ NAMESPACE_VOS(OProcess) *pProcess;
+ BOOL ImplIsRunning();
+ long ImplGetExitCode();
+ BOOL bWasGPF;
+ BOOL bHasBeenStarted;
+
+public:
+ Process();
+ ~Process();
+ // Methoden
+ void SetImage( const String &aAppPath, const String &aAppParams, const Environment *pEnv = NULL );
+ BOOL Start();
+ ULONG GetExitCode();
+ BOOL IsRunning();
+ BOOL WasGPF();
+
+ BOOL Terminate();
+};
+
+#endif
diff --git a/basic/inc/basic/sbdef.hxx b/basic/inc/basic/sbdef.hxx
new file mode 100644
index 000000000000..70512584f9b7
--- /dev/null
+++ b/basic/inc/basic/sbdef.hxx
@@ -0,0 +1,110 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _SB_SBDEF_HXX
+#define _SB_SBDEF_HXX
+
+#include <basic/sbxdef.hxx>
+#include <svl/svarray.hxx>
+
+#define _BASIC_TEXTPORTIONS
+
+// Type of a text token (syntax highlighting)
+enum SbTextType
+{
+ SB_KEYWORD = 1, // Keywords
+ SB_SYMBOL, // Symbols
+ SB_STRING, // Strings
+ SB_NUMBER, // Numbers
+ SB_PUNCTUATION, // Brackets, points, etc.
+ SB_COMMENT, // Comments
+ SB_DUMMY = 255 // workaround for #i31479
+};
+
+// Active language
+enum SbLanguageMode
+{
+ SB_LANG_GLOBAL, // As in SbiGlobals struct
+ SB_LANG_BASIC, // StarBasic (Default)
+ SB_LANG_VBSCRIPT, // Visual-Basic-Script
+ SB_LANG_JAVASCRIPT // JavaScript
+};
+
+#ifdef _BASIC_TEXTPORTIONS
+struct SbTextPortion
+{ // Syntax Highlighting: a text portion
+ xub_StrLen nLine; // Line number
+ xub_StrLen nStart, nEnd; // 1st and last column
+ SbTextType eType; // Type of the portion
+};
+
+SV_DECL_VARARR(SbTextPortions, SbTextPortion,16,16)
+#else
+class SbTextPortions;
+#endif
+
+// Returns type name for Basic type, array flag is ignored
+// implementation: basic/source/runtime/methods.cxx
+String getBasicTypeName( SbxDataType eType );
+
+// Returns type name for Basic objects, especially
+// important for SbUnoObj instances
+// implementation: basic/source/classes/sbunoobj.cxx
+class SbxObject;
+String getBasicObjectTypeName( SbxObject* pObj );
+
+// Allows Basic IDE to set watch mode to suppress errors
+// implementation: basic/source/runtime/runtime.cxx
+void setBasicWatchMode( bool bOn );
+
+// Debug Flags:
+#define SbDEBUG_BREAK 0x0001 // Break-Callback
+#define SbDEBUG_STEPINTO 0x0002 // Single Step-Callback
+#define SbDEBUG_STEPOVER 0x0004 // Additional flag Step Over
+#define SbDEBUG_CONTINUE 0x0008 // Do not change flags
+#define SbDEBUG_STEPOUT 0x0010 // Leave Sub
+
+#define SBXID_BASIC 0x6273 // sb: StarBASIC
+#define SBXID_BASICMOD 0x6d62 // bm: StarBASIC Module
+#define SBXID_BASICPROP 0x7262 // pr: StarBASIC Property
+#define SBXID_BASICMETHOD 0x6d65 // me: StarBASIC Method
+#define SBXID_JSCRIPTMOD 0x6a62 // jm: JavaScript Module
+#define SBXID_JSCRIPTMETH 0x6a64 // jm: JavaScript Module
+
+#define SBX_HINT_BASICSTART SFX_HINT_USER04
+#define SBX_HINT_BASICSTOP SFX_HINT_USER05
+
+// #115826
+enum PropertyMode
+{
+ PROPERTY_MODE_NONE,
+ PROPERTY_MODE_GET,
+ PROPERTY_MODE_LET,
+ PROPERTY_MODE_SET
+};
+
+#endif
diff --git a/basic/inc/basic/sberrors.hxx b/basic/inc/basic/sberrors.hxx
new file mode 100644
index 000000000000..c34176e0bde7
--- /dev/null
+++ b/basic/inc/basic/sberrors.hxx
@@ -0,0 +1,562 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _SB_SBERRORS_HXX
+#define _SB_SBERRORS_HXX
+
+#include <basic/sbxdef.hxx>
+
+#ifndef __RSC
+typedef ULONG SbError;
+#endif
+
+// Mapping to SbxError
+#define ERRCODE_BASIC_SYNTAX ERRCODE_SBX_SYNTAX // unspecified syntax error
+#define ERRCODE_BASIC_BAD_ARGUMENT ERRCODE_SBX_NOTIMP // Invalid procedure call
+#define ERRCODE_BASIC_MATH_OVERFLOW ERRCODE_SBX_OVERFLOW // Overflow
+#define ERRCODE_BASIC_OUT_OF_RANGE ERRCODE_SBX_BOUNDS // Subscript out of range
+#define ERRCODE_BASIC_ZERODIV ERRCODE_SBX_ZERODIV // Division by zero
+#define ERRCODE_BASIC_CONVERSION ERRCODE_SBX_CONVERSION // Type mismatch
+#define ERRCODE_BASIC_BAD_PARAMETER ERRCODE_SBX_BAD_PARAMETER // Invalid Parameter
+#define ERRCODE_BASIC_PROC_UNDEFINED ERRCODE_SBX_PROC_UNDEFINED // Sub or Function not defined
+#define ERRCODE_BASIC_INTERNAL_ERROR ERRCODE_SBX_ERROR // internal error
+#define ERRCODE_BASIC_NO_OBJECT ERRCODE_SBX_NO_OBJECT // Object variable not set
+#define ERRCODE_BASIC_CANNOT_LOAD ERRCODE_SBX_CANNOT_LOAD // Can't load module
+#define ERRCODE_BASIC_BAD_INDEX ERRCODE_SBX_BAD_INDEX // Invalid object index
+#define ERRCODE_BASIC_NO_ACTIVE_OBJECT ERRCODE_SBX_NO_ACTIVE_OBJECT // No active view or document
+#define ERRCODE_BASIC_BAD_PROP_VALUE ERRCODE_SBX_BAD_PROP_VALUE // Bad property value
+#define ERRCODE_BASIC_PROP_READONLY ERRCODE_SBX_PROP_READONLY // Property is read only
+#define ERRCODE_BASIC_PROP_WRITEONLY ERRCODE_SBX_PROP_WRITEONLY // Property is write only
+#define ERRCODE_BASIC_INVALID_OBJECT ERRCODE_SBX_INVALID_OBJECT // Invalid object reference
+#define ERRCODE_BASIC_NO_METHOD ERRCODE_SBX_NO_METHOD // Property or method not found
+#define ERRCODE_BASIC_INVALID_USAGE_OBJECT ERRCODE_SBX_INVALID_USAGE_OBJECT // Invalid usee of object
+#define ERRCODE_BASIC_NO_OLE ERRCODE_SBX_NO_OLE // Class does not support OLE
+#define ERRCODE_BASIC_BAD_METHOD ERRCODE_SBX_BAD_METHOD // Object doesn't support method
+#define ERRCODE_BASIC_OLE_ERROR ERRCODE_SBX_OLE_ERROR // OLE Automation error
+#define ERRCODE_BASIC_BAD_ACTION ERRCODE_SBX_BAD_ACTION // Object doesn't support this action
+#define ERRCODE_BASIC_NO_NAMED_ARGS ERRCODE_SBX_NO_NAMED_ARGS // Object doesn't support named args
+#define ERRCODE_BASIC_BAD_LOCALE ERRCODE_SBX_BAD_LOCALE // Object doesn't support current locale setting
+#define ERRCODE_BASIC_NAMED_NOT_FOUND ERRCODE_SBX_NAMED_NOT_FOUND // Named argument not found
+#define ERRCODE_BASIC_NOT_OPTIONAL ERRCODE_SBX_NOT_OPTIONAL // Argument not optional
+#define ERRCODE_BASIC_WRONG_ARGS ERRCODE_SBX_WRONG_ARGS // Wrong number of arguments
+#define ERRCODE_BASIC_NOT_A_COLL ERRCODE_SBX_NOT_A_COLL // Object not a collection
+
+// Append Basic specific error messages to ERRCODE_AREA_SBX
+#define ERRCODE_BASIC_NO_GOSUB ((LAST_SBX_ERROR_ID+1UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME) // Return without Gosub
+#define ERRCODE_BASIC_REDO_FROM_START ((LAST_SBX_ERROR_ID+2UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME) // Redo form start (SB internal)
+#define ERRCODE_BASIC_NO_MEMORY ((LAST_SBX_ERROR_ID+3UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME) // Out of memory
+#define ERRCODE_BASIC_ALREADY_DIM ((LAST_SBX_ERROR_ID+4UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME) // Array already dimensioned
+#define ERRCODE_BASIC_DUPLICATE_DEF ((LAST_SBX_ERROR_ID+5UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME) // Duplicate definition
+#define ERRCODE_BASIC_VAR_UNDEFINED ((LAST_SBX_ERROR_ID+6UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME) // Variable undefined (SB)
+#define ERRCODE_BASIC_USER_ABORT ((LAST_SBX_ERROR_ID+7UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME) // User interrupt occurred
+#define ERRCODE_BASIC_BAD_RESUME ((LAST_SBX_ERROR_ID+8UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME) // Resume without error
+#define ERRCODE_BASIC_STACK_OVERFLOW ((LAST_SBX_ERROR_ID+9UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME) // Out of stack space
+#define ERRCODE_BASIC_BAD_DLL_LOAD ((LAST_SBX_ERROR_ID+10UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME) // Error in loading DLL
+#define ERRCODE_BASIC_BAD_DLL_CALL ((LAST_SBX_ERROR_ID+11UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME) // Bad DLL calling convention
+#define ERRCODE_BASIC_BAD_CHANNEL ((LAST_SBX_ERROR_ID+12UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME) // Bad file name or number
+#define ERRCODE_BASIC_FILE_NOT_FOUND ((LAST_SBX_ERROR_ID+13UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME) // File not found
+#define ERRCODE_BASIC_BAD_FILE_MODE ((LAST_SBX_ERROR_ID+14UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME) // Bad file mode
+#define ERRCODE_BASIC_FILE_ALREADY_OPEN ((LAST_SBX_ERROR_ID+15UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME) // File already open
+#define ERRCODE_BASIC_IO_ERROR ((LAST_SBX_ERROR_ID+16UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME) // Device I/O error
+#define ERRCODE_BASIC_FILE_EXISTS ((LAST_SBX_ERROR_ID+17UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME) // File already exists
+#define ERRCODE_BASIC_BAD_RECORD_LENGTH ((LAST_SBX_ERROR_ID+18UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME) // bad record length
+#define ERRCODE_BASIC_DISK_FULL ((LAST_SBX_ERROR_ID+19UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME) // disk full
+#define ERRCODE_BASIC_READ_PAST_EOF ((LAST_SBX_ERROR_ID+20UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME) // Input past end of file
+#define ERRCODE_BASIC_BAD_RECORD_NUMBER ((LAST_SBX_ERROR_ID+21UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME) // Bad record number
+#define ERRCODE_BASIC_TOO_MANY_FILES ((LAST_SBX_ERROR_ID+22UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME) // Too many files
+#define ERRCODE_BASIC_NO_DEVICE ((LAST_SBX_ERROR_ID+23UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME) // Device not available
+#define ERRCODE_BASIC_ACCESS_DENIED ((LAST_SBX_ERROR_ID+24UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME) // Permission denied
+#define ERRCODE_BASIC_NOT_READY ((LAST_SBX_ERROR_ID+25UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME) // Disk not ready
+#define ERRCODE_BASIC_NOT_IMPLEMENTED ((LAST_SBX_ERROR_ID+26UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME) // Feature not implemented
+#define ERRCODE_BASIC_DIFFERENT_DRIVE ((LAST_SBX_ERROR_ID+27UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME) // No rename with different drive
+#define ERRCODE_BASIC_ACCESS_ERROR ((LAST_SBX_ERROR_ID+28UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME) // Path/File access error
+#define ERRCODE_BASIC_PATH_NOT_FOUND ((LAST_SBX_ERROR_ID+29UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME) // Path not found
+#define ERRCODE_BASIC_BAD_PATTERN ((LAST_SBX_ERROR_ID+30UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME) // Invalid pattern string
+#define ERRCODE_BASIC_IS_NULL ((LAST_SBX_ERROR_ID+31UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME) // Invalid use of Null
+
+// DDE messages from 250-299
+#define ERRCODE_BASIC_DDE_ERROR ((LAST_SBX_ERROR_ID+32UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME)
+#define ERRCODE_BASIC_DDE_WAITINGACK ((LAST_SBX_ERROR_ID+33UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME)
+#define ERRCODE_BASIC_DDE_OUTOFCHANNELS ((LAST_SBX_ERROR_ID+34UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME)
+#define ERRCODE_BASIC_DDE_NO_RESPONSE ((LAST_SBX_ERROR_ID+35UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME)
+#define ERRCODE_BASIC_DDE_MULT_RESPONSES ((LAST_SBX_ERROR_ID+36UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME)
+#define ERRCODE_BASIC_DDE_CHANNEL_LOCKED ((LAST_SBX_ERROR_ID+37UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME)
+#define ERRCODE_BASIC_DDE_NOTPROCESSED ((LAST_SBX_ERROR_ID+38UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME)
+#define ERRCODE_BASIC_DDE_TIMEOUT ((LAST_SBX_ERROR_ID+39UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME)
+#define ERRCODE_BASIC_DDE_USER_INTERRUPT ((LAST_SBX_ERROR_ID+40UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME)
+#define ERRCODE_BASIC_DDE_BUSY ((LAST_SBX_ERROR_ID+41UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME)
+#define ERRCODE_BASIC_DDE_NO_DATA ((LAST_SBX_ERROR_ID+42UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME)
+#define ERRCODE_BASIC_DDE_WRONG_DATA_FORMAT ((LAST_SBX_ERROR_ID+43UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME)
+#define ERRCODE_BASIC_DDE_PARTNER_QUIT ((LAST_SBX_ERROR_ID+44UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME)
+#define ERRCODE_BASIC_DDE_CONV_CLOSED ((LAST_SBX_ERROR_ID+45UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME)
+#define ERRCODE_BASIC_DDE_NO_CHANNEL ((LAST_SBX_ERROR_ID+46UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME)
+#define ERRCODE_BASIC_DDE_INVALID_LINK ((LAST_SBX_ERROR_ID+47UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME)
+#define ERRCODE_BASIC_DDE_QUEUE_OVERFLOW ((LAST_SBX_ERROR_ID+48UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME)
+#define ERRCODE_BASIC_DDE_LINK_ALREADY_EST ((LAST_SBX_ERROR_ID+49UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME)
+#define ERRCODE_BASIC_DDE_LINK_INV_TOPIC ((LAST_SBX_ERROR_ID+50UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME)
+#define ERRCODE_BASIC_DDE_DLL_NOT_FOUND ((LAST_SBX_ERROR_ID+51UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME)
+
+#define ERRCODE_BASIC_NEEDS_OBJECT ((LAST_SBX_ERROR_ID+52UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME) // Object required
+#define ERRCODE_BASIC_BAD_ORDINAL ((LAST_SBX_ERROR_ID+53UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME) // Invalid ordinal
+#define ERRCODE_BASIC_DLLPROC_NOT_FOUND ((LAST_SBX_ERROR_ID+54UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME) // Specified DLL function not found
+#define ERRCODE_BASIC_BAD_CLIPBD_FORMAT ((LAST_SBX_ERROR_ID+55UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME) // Invalid clipboard format
+
+// Debugger messages from 700-799
+
+#define ERRCODE_BASIC_PROPERTY_NOT_FOUND ((LAST_SBX_ERROR_ID+56UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME) // Class not have property
+#define ERRCODE_BASIC_METHOD_NOT_FOUND ((LAST_SBX_ERROR_ID+57UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME) // Class does not have method
+#define ERRCODE_BASIC_ARG_MISSING ((LAST_SBX_ERROR_ID+58UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME) // Missing required argument
+#define ERRCODE_BASIC_BAD_NUMBER_OF_ARGS ((LAST_SBX_ERROR_ID+59UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME) // Bad number of arguments
+#define ERRCODE_BASIC_METHOD_FAILED ((LAST_SBX_ERROR_ID+60UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME) // Method failed
+#define ERRCODE_BASIC_SETPROP_FAILED ((LAST_SBX_ERROR_ID+61UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME) // Unable to set property
+#define ERRCODE_BASIC_GETPROP_FAILED ((LAST_SBX_ERROR_ID+62UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME) // Unable to get property
+
+// Compiler Errors (do not occure at runtime)
+// These IDs can shift at any time
+
+#define ERRCODE_BASIC_UNEXPECTED ((LAST_SBX_ERROR_ID+63UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_COMPILER) // Unexpected symbol: xx
+// #define ERRCODE_BASIC_COMPILER_BGN ERRCODE_BASIC_UNEXPECTED
+#define ERRCODE_BASIC_EXPECTED ((LAST_SBX_ERROR_ID+64UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_COMPILER) // Expected: xx
+#define ERRCODE_BASIC_SYMBOL_EXPECTED ((LAST_SBX_ERROR_ID+65UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_COMPILER) // Symbol expected
+#define ERRCODE_BASIC_VAR_EXPECTED ((LAST_SBX_ERROR_ID+66UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_COMPILER) // Variable expected
+#define ERRCODE_BASIC_LABEL_EXPECTED ((LAST_SBX_ERROR_ID+67UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_COMPILER) // Label expected
+#define ERRCODE_BASIC_LVALUE_EXPECTED ((LAST_SBX_ERROR_ID+68UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_COMPILER) // Lvalue expected
+#define ERRCODE_BASIC_VAR_DEFINED ((LAST_SBX_ERROR_ID+69UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_COMPILER) // Variable xxx already defined
+#define ERRCODE_BASIC_PROC_DEFINED ((LAST_SBX_ERROR_ID+70UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_COMPILER) // Procedure xx already defined
+#define ERRCODE_BASIC_LABEL_DEFINED ((LAST_SBX_ERROR_ID+71UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_COMPILER) // Label xxx already defined
+#define ERRCODE_BASIC_UNDEF_VAR ((LAST_SBX_ERROR_ID+72UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_COMPILER) // Variable xx undefined
+#define ERRCODE_BASIC_UNDEF_ARRAY ((LAST_SBX_ERROR_ID+73UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_COMPILER) // Array or function xx undefined
+#define ERRCODE_BASIC_UNDEF_PROC ((LAST_SBX_ERROR_ID+74UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_COMPILER) // Procedure xxx undefined
+#define ERRCODE_BASIC_UNDEF_LABEL ((LAST_SBX_ERROR_ID+75UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_COMPILER) // Label xxx undefined
+#define ERRCODE_BASIC_UNDEF_TYPE ((LAST_SBX_ERROR_ID+76UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_COMPILER) // Unknown user defined type xxx
+#define ERRCODE_BASIC_BAD_EXIT ((LAST_SBX_ERROR_ID+77UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_COMPILER) // Exit XXX expected
+#define ERRCODE_BASIC_BAD_BLOCK ((LAST_SBX_ERROR_ID+78UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_COMPILER) // Unterminated statement block: missing XX
+#define ERRCODE_BASIC_BAD_BRACKETS ((LAST_SBX_ERROR_ID+79UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_COMPILER) // Parentheses do not match
+#define ERRCODE_BASIC_BAD_DECLARATION ((LAST_SBX_ERROR_ID+80UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_COMPILER) // Symbol xx defined differently
+#define ERRCODE_BASIC_BAD_PARAMETERS ((LAST_SBX_ERROR_ID+81UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_COMPILER) // Parameters do not match
+#define ERRCODE_BASIC_BAD_CHAR_IN_NUMBER ((LAST_SBX_ERROR_ID+82UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_COMPILER) // Bad character in number
+#define ERRCODE_BASIC_MUST_HAVE_DIMS ((LAST_SBX_ERROR_ID+83UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_COMPILER) // Array needs dimensioning
+#define ERRCODE_BASIC_NO_IF ((LAST_SBX_ERROR_ID+84UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_COMPILER) // Else/Endif without If
+#define ERRCODE_BASIC_NOT_IN_SUBR ((LAST_SBX_ERROR_ID+85UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_COMPILER) // xxx not allowed within a sub
+#define ERRCODE_BASIC_NOT_IN_MAIN ((LAST_SBX_ERROR_ID+86UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_COMPILER) // xxx not allowed outside a sub
+#define ERRCODE_BASIC_WRONG_DIMS ((LAST_SBX_ERROR_ID+87UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_COMPILER) // Dimensions do not match
+#define ERRCODE_BASIC_BAD_OPTION ((LAST_SBX_ERROR_ID+88UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_COMPILER) // Unknown option: xxx
+#define ERRCODE_BASIC_CONSTANT_REDECLARED ((LAST_SBX_ERROR_ID+89UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_COMPILER) // Constant xx redeclared
+#define ERRCODE_BASIC_PROG_TOO_LARGE ((LAST_SBX_ERROR_ID+90UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_COMPILER) // Program is too large
+#define ERRCODE_BASIC_NO_STRINGS_ARRAYS ((LAST_SBX_ERROR_ID+91UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_COMPILER)
+
+#define ERRCODE_BASIC_EXCEPTION ((LAST_SBX_ERROR_ID+92UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME)
+
+#define ERRCODE_BASMGR_STDLIBOPEN (LAST_SBX_ERROR_ID+93UL) | ERRCODE_AREA_SBX
+#define ERRCODE_BASMGR_STDLIBSAVE (LAST_SBX_ERROR_ID+94UL) | ERRCODE_AREA_SBX
+#define ERRCODE_BASMGR_LIBLOAD (LAST_SBX_ERROR_ID+95UL) | ERRCODE_AREA_SBX
+#define ERRCODE_BASMGR_LIBCREATE (LAST_SBX_ERROR_ID+96UL) | ERRCODE_AREA_SBX
+#define ERRCODE_BASMGR_LIBSAVE (LAST_SBX_ERROR_ID+97UL) | ERRCODE_AREA_SBX
+#define ERRCODE_BASMGR_LIBDEL (LAST_SBX_ERROR_ID+98UL) | ERRCODE_AREA_SBX
+#define ERRCODE_BASMGR_MGROPEN (LAST_SBX_ERROR_ID+99UL) | ERRCODE_AREA_SBX
+#define ERRCODE_BASMGR_MGRSAVE (LAST_SBX_ERROR_ID+100UL) | ERRCODE_AREA_SBX
+#define ERRCODE_BASMGR_REMOVELIB (LAST_SBX_ERROR_ID+101UL) | ERRCODE_AREA_SBX
+#define ERRCODE_BASMGR_UNLOADLIB (LAST_SBX_ERROR_ID+102UL) | ERRCODE_AREA_SBX
+
+#define ERRCODE_BASIC_ARRAY_FIX ((LAST_SBX_ERROR_ID+104UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_COMPILER) // This array is fixed
+#define ERRCODE_BASIC_STRING_OVERFLOW ((LAST_SBX_ERROR_ID+105UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_COMPILER) // Out of string space
+#define ERRCODE_BASIC_EXPR_TOO_COMPLEX ((LAST_SBX_ERROR_ID+106UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_COMPILER) // Expression too complex
+#define ERRCODE_BASIC_OPER_NOT_PERFORM ((LAST_SBX_ERROR_ID+107UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_COMPILER) // Can't perform requested operation
+#define ERRCODE_BASIC_TOO_MANY_DLL ((LAST_SBX_ERROR_ID+108UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_COMPILER) // Too many dll application clients
+#define ERRCODE_BASIC_LOOP_NOT_INIT ((LAST_SBX_ERROR_ID+109UL) | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_COMPILER) // For loop not initialized
+
+#define ERRCODE_BASIC_COMPAT ((LAST_SBX_ERROR_ID+103UL)| ERRCODE_AREA_SBX | ERRCODE_CLASS_RUNTIME)
+
+// Map old codes to new codes
+#define SbERR_SYNTAX ERRCODE_BASIC_SYNTAX
+#define SbERR_NO_GOSUB ERRCODE_BASIC_NO_GOSUB
+#define SbERR_REDO_FROM_START ERRCODE_BASIC_REDO_FROM_START
+#define SbERR_BAD_ARGUMENT ERRCODE_BASIC_BAD_ARGUMENT
+#define SbERR_MATH_OVERFLOW ERRCODE_BASIC_MATH_OVERFLOW
+#define SbERR_NO_MEMORY ERRCODE_BASIC_NO_MEMORY
+#define SbERR_ALREADY_DIM ERRCODE_BASIC_ALREADY_DIM
+#define SbERR_OUT_OF_RANGE ERRCODE_BASIC_OUT_OF_RANGE
+#define SbERR_DUPLICATE_DEF ERRCODE_BASIC_DUPLICATE_DEF
+#define SbERR_ZERODIV ERRCODE_BASIC_ZERODIV
+#define SbERR_VAR_UNDEFINED ERRCODE_BASIC_VAR_UNDEFINED
+#define SbERR_CONVERSION ERRCODE_BASIC_CONVERSION
+#define SbERR_BAD_PARAMETER ERRCODE_BASIC_BAD_PARAMETER
+#define SbERR_USER_ABORT ERRCODE_BASIC_USER_ABORT
+#define SbERR_BAD_RESUME ERRCODE_BASIC_BAD_RESUME
+#define SbERR_STACK_OVERFLOW ERRCODE_BASIC_STACK_OVERFLOW
+#define SbERR_PROC_UNDEFINED ERRCODE_BASIC_PROC_UNDEFINED
+#define SbERR_BAD_DLL_LOAD ERRCODE_BASIC_BAD_DLL_LOAD
+#define SbERR_BAD_DLL_CALL ERRCODE_BASIC_BAD_DLL_CALL
+#define SbERR_INTERNAL_ERROR ERRCODE_BASIC_INTERNAL_ERROR
+#define SbERR_BAD_CHANNEL ERRCODE_BASIC_BAD_CHANNEL
+#define SbERR_FILE_NOT_FOUND ERRCODE_BASIC_FILE_NOT_FOUND
+#define SbERR_BAD_FILE_MODE ERRCODE_BASIC_BAD_FILE_MODE
+#define SbERR_FILE_ALREADY_OPEN ERRCODE_BASIC_FILE_ALREADY_OPEN
+#define SbERR_IO_ERROR ERRCODE_BASIC_IO_ERROR
+#define SbERR_FILE_EXISTS ERRCODE_BASIC_FILE_EXISTS
+#define SbERR_BAD_RECORD_LENGTH ERRCODE_BASIC_BAD_RECORD_LENGTH
+#define SbERR_DISK_FULL ERRCODE_BASIC_DISK_FULL
+#define SbERR_READ_PAST_EOF ERRCODE_BASIC_READ_PAST_EOF
+#define SbERR_BAD_RECORD_NUMBER ERRCODE_BASIC_BAD_RECORD_NUMBER
+#define SbERR_TOO_MANY_FILES ERRCODE_BASIC_TOO_MANY_FILES
+#define SbERR_NO_DEVICE ERRCODE_BASIC_NO_DEVICE
+#define SbERR_ACCESS_DENIED ERRCODE_BASIC_ACCESS_DENIED
+#define SbERR_NOT_READY ERRCODE_BASIC_NOT_READY
+#define SbERR_NOT_IMPLEMENTED ERRCODE_BASIC_NOT_IMPLEMENTED
+#define SbERR_DIFFERENT_DRIVE ERRCODE_BASIC_DIFFERENT_DRIVE
+#define SbERR_ACCESS_ERROR ERRCODE_BASIC_ACCESS_ERROR
+#define SbERR_PATH_NOT_FOUND ERRCODE_BASIC_PATH_NOT_FOUND
+#define SbERR_NO_OBJECT ERRCODE_BASIC_NO_OBJECT
+#define SbERR_BAD_PATTERN ERRCODE_BASIC_BAD_PATTERN
+#define SBERR_IS_NULL ERRCODE_BASIC_IS_NULL
+#define SbERR_DDE_ERROR ERRCODE_BASIC_DDE_ERROR
+#define SbERR_DDE_WAITINGACK ERRCODE_BASIC_DDE_WAITINGACK
+#define SbERR_DDE_OUTOFCHANNELS ERRCODE_BASIC_DDE_OUTOFCHANNELS
+#define SbERR_DDE_NO_RESPONSE ERRCODE_BASIC_DDE_NO_RESPONSE
+#define SbERR_DDE_MULT_RESPONSES ERRCODE_BASIC_DDE_MULT_RESPONSES
+#define SbERR_DDE_CHANNEL_LOCKED ERRCODE_BASIC_DDE_CHANNEL_LOCKED
+#define SbERR_DDE_NOTPROCESSED ERRCODE_BASIC_DDE_NOTPROCESSED
+#define SbERR_DDE_TIMEOUT ERRCODE_BASIC_DDE_TIMEOUT
+#define SbERR_DDE_USER_INTERRUPT ERRCODE_BASIC_DDE_USER_INTERRUPT
+#define SbERR_DDE_BUSY ERRCODE_BASIC_DDE_BUSY
+#define SbERR_DDE_NO_DATA ERRCODE_BASIC_DDE_NO_DATA
+#define SbERR_DDE_WRONG_DATA_FORMAT ERRCODE_BASIC_DDE_WRONG_DATA_FORMAT
+#define SbERR_DDE_PARTNER_QUIT ERRCODE_BASIC_DDE_PARTNER_QUIT
+#define SbERR_DDE_CONV_CLOSED ERRCODE_BASIC_DDE_CONV_CLOSED
+#define SbERR_DDE_NO_CHANNEL ERRCODE_BASIC_DDE_NO_CHANNEL
+#define SbERR_DDE_INVALID_LINK ERRCODE_BASIC_DDE_INVALID_LINK
+#define SbERR_DDE_QUEUE_OVERFLOW ERRCODE_BASIC_DDE_QUEUE_OVERFLOW
+#define SbERR_DDE_LINK_ALREADY_EST ERRCODE_BASIC_DDE_LINK_ALREADY_EST
+#define SbERR_DDE_LINK_INV_TOPIC ERRCODE_BASIC_DDE_LINK_INV_TOPIC
+#define SbERR_DDE_DLL_NOT_FOUND ERRCODE_BASIC_DDE_DLL_NOT_FOUND
+#define SbERR_CANNOT_LOAD ERRCODE_BASIC_CANNOT_LOAD
+#define SbERR_BAD_INDEX ERRCODE_BASIC_BAD_INDEX
+#define SbERR_NO_ACTIVE_OBJECT ERRCODE_BASIC_NO_ACTIVE_OBJECT
+#define SbERR_BAD_PROP_VALUE ERRCODE_BASIC_BAD_PROP_VALUE
+#define SbERR_PROP_READONLY ERRCODE_BASIC_PROP_READONLY
+#define SbERR_PROP_WRITEONLY ERRCODE_BASIC_PROP_WRITEONLY
+#define SbERR_INVALID_OBJECT ERRCODE_BASIC_INVALID_OBJECT
+#define SbERR_NO_METHOD ERRCODE_BASIC_NO_METHOD
+#define SbERR_NEEDS_OBJECT ERRCODE_BASIC_NEEDS_OBJECT
+#define SbERR_INVALID_USAGE_OBJECT ERRCODE_BASIC_INVALID_USAGE_OBJECT
+#define SbERR_NO_OLE ERRCODE_BASIC_NO_OLE
+#define SbERR_BAD_METHOD ERRCODE_BASIC_BAD_METHOD
+#define SbERR_OLE_ERROR ERRCODE_BASIC_OLE_ERROR
+#define SbERR_BAD_ACTION ERRCODE_BASIC_BAD_ACTION
+#define SbERR_NO_NAMED_ARGS ERRCODE_BASIC_NO_NAMED_ARGS
+#define SbERR_BAD_LOCALE ERRCODE_BASIC_BAD_LOCALE
+#define SbERR_NAMED_NOT_FOUND ERRCODE_BASIC_NAMED_NOT_FOUND
+#define SbERR_NOT_OPTIONAL ERRCODE_BASIC_NOT_OPTIONAL
+#define SbERR_WRONG_ARGS ERRCODE_BASIC_WRONG_ARGS
+#define SbERR_NOT_A_COLL ERRCODE_BASIC_NOT_A_COLL
+#define SbERR_BAD_ORDINAL ERRCODE_BASIC_BAD_ORDINAL
+#define SbERR_DLLPROC_NOT_FOUND ERRCODE_BASIC_DLLPROC_NOT_FOUND
+#define SbERR_BAD_CLIPBD_FORMAT ERRCODE_BASIC_BAD_CLIPBD_FORMAT
+#define SbERR_PROPERTY_NOT_FOUND ERRCODE_BASIC_PROPERTY_NOT_FOUND
+#define SbERR_METHOD_NOT_FOUND ERRCODE_BASIC_METHOD_NOT_FOUND
+#define SbERR_ARG_MISSING ERRCODE_BASIC_ARG_MISSING
+#define SbERR_BAD_NUMBER_OF_ARGS ERRCODE_BASIC_BAD_NUMBER_OF_ARGS
+#define SbERR_METHOD_FAILED ERRCODE_BASIC_METHOD_FAILED
+#define SbERR_SETPROP_FAILED ERRCODE_BASIC_SETPROP_FAILED
+#define SbERR_GETPROP_FAILED ERRCODE_BASIC_GETPROP_FAILED
+// #define SbERR_COMPILER_BGN ERRCODE_BASIC_COMPILER_BGN
+#define SbERR_UNEXPECTED ERRCODE_BASIC_UNEXPECTED
+#define SbERR_EXPECTED ERRCODE_BASIC_EXPECTED
+#define SbERR_SYMBOL_EXPECTED ERRCODE_BASIC_SYMBOL_EXPECTED
+#define SbERR_VAR_EXPECTED ERRCODE_BASIC_VAR_EXPECTED
+#define SbERR_LABEL_EXPECTED ERRCODE_BASIC_LABEL_EXPECTED
+#define SbERR_LVALUE_EXPECTED ERRCODE_BASIC_LVALUE_EXPECTED
+#define SbERR_VAR_DEFINED ERRCODE_BASIC_VAR_DEFINED
+#define SbERR_PROC_DEFINED ERRCODE_BASIC_PROC_DEFINED
+#define SbERR_LABEL_DEFINED ERRCODE_BASIC_LABEL_DEFINED
+#define SbERR_UNDEF_VAR ERRCODE_BASIC_UNDEF_VAR
+#define SbERR_UNDEF_ARRAY ERRCODE_BASIC_UNDEF_ARRAY
+#define SbERR_UNDEF_PROC ERRCODE_BASIC_UNDEF_PROC
+#define SbERR_UNDEF_LABEL ERRCODE_BASIC_UNDEF_LABEL
+#define SbERR_UNDEF_TYPE ERRCODE_BASIC_UNDEF_TYPE
+#define SbERR_BAD_EXIT ERRCODE_BASIC_BAD_EXIT
+#define SbERR_BAD_BLOCK ERRCODE_BASIC_BAD_BLOCK
+#define SbERR_BAD_BRACKETS ERRCODE_BASIC_BAD_BRACKETS
+#define SbERR_BAD_DECLARATION ERRCODE_BASIC_BAD_DECLARATION
+#define SbERR_BAD_PARAMETERS ERRCODE_BASIC_BAD_PARAMETERS
+#define SbERR_BAD_CHAR_IN_NUMBER ERRCODE_BASIC_BAD_CHAR_IN_NUMBER
+#define SbERR_MUST_HAVE_DIMS ERRCODE_BASIC_MUST_HAVE_DIMS
+#define SbERR_NO_IF ERRCODE_BASIC_NO_IF
+#define SbERR_NOT_IN_SUBR ERRCODE_BASIC_NOT_IN_SUBR
+#define SbERR_NOT_IN_MAIN ERRCODE_BASIC_NOT_IN_MAIN
+#define SbERR_WRONG_DIMS ERRCODE_BASIC_WRONG_DIMS
+#define SbERR_BAD_OPTION ERRCODE_BASIC_BAD_OPTION
+#define SbERR_CONSTANT_REDECLARED ERRCODE_BASIC_CONSTANT_REDECLARED
+#define SbERR_PROG_TOO_LARGE ERRCODE_BASIC_PROG_TOO_LARGE
+#define SbERR_NO_STRINGS_ARRAYS ERRCODE_BASIC_NO_STRINGS_ARRAYS
+#define SbERR_BASIC_EXCEPTION ERRCODE_BASIC_EXCEPTION
+#define SbERR_BASIC_COMPAT ERRCODE_BASIC_COMPAT
+#define SbERR_BASIC_ARRAY_FIX ERRCODE_BASIC_ARRAY_FIX
+#define SbERR_BASIC_STRING_OVERFLOW ERRCODE_BASIC_STRING_OVERFLOW
+#define SbERR_BASIC_EXPR_TOO_COMPLEX ERRCODE_BASIC_EXPR_TOO_COMPLEX
+#define SbERR_BASIC_OPER_NOT_PERFORM ERRCODE_BASIC_OPER_NOT_PERFORM
+#define SbERR_BASIC_TOO_MANY_DLL ERRCODE_BASIC_TOO_MANY_DLL
+#define SbERR_BASIC_LOOP_NOT_INIT ERRCODE_BASIC_LOOP_NOT_INIT
+// #define SbERR_COMPILER_END ERRCODE_BASIC_COMPILER_END
+
+/* ALT
+#define SbERR_SYNTAX 2 // unspecified syntax error
+#define SbERR_NO_GOSUB 3 // Return without Gosub
+#define SbERR_REDO_FROM_START 4 // Redo form start (SB internal)
+#define SbERR_BAD_ARGUMENT 5 // Invalid procedure call
+#define SbERR_MATH_OVERFLOW 6 // Overflow
+#define SbERR_NO_MEMORY 7 // Out of memory
+#define SbERR_ALREADY_DIM 8 // Array already dimensioned
+#define SbERR_OUT_OF_RANGE 9 // Subscript out of range
+#define SbERR_DUPLICATE_DEF 10 // Duplicate definition
+#define SbERR_ZERODIV 11 // Division by zero
+#define SbERR_VAR_UNDEFINED 12 // Variable undefined (SB)
+#define SbERR_CONVERSION 13 // Type mismatch
+#define SbERR_BAD_PARAMETER 14 // Invalid Parameter
+#define SbERR_USER_ABORT 18 // User interrupt occurred
+#define SbERR_BAD_RESUME 20 // Resume without error
+#define SbERR_STACK_OVERFLOW 28 // Out of stack space
+#define SbERR_PROC_UNDEFINED 35 // Sub or Function not defined
+#define SbERR_BAD_DLL_LOAD 48 // Error in loading DLL
+#define SbERR_BAD_DLL_CALL 49 // Bad DLL calling convention
+#define SbERR_INTERNAL_ERROR 51 // internal error
+#define SbERR_BAD_CHANNEL 52 // Bad file name or number
+#define SbERR_FILE_NOT_FOUND 53 // File not found
+#define SbERR_BAD_FILE_MODE 54 // Bad file mode
+#define SbERR_FILE_ALREADY_OPEN 55 // File already open
+#define SbERR_IO_ERROR 57 // Device I/O error
+#define SbERR_FILE_EXISTS 58 // File already exists
+#define SbERR_BAD_RECORD_LENGTH 59 // bad record length
+#define SbERR_DISK_FULL 61 // disk full
+#define SbERR_READ_PAST_EOF 62 // Input past end of file
+#define SbERR_BAD_RECORD_NUMBER 63 // Bad record number
+#define SbERR_TOO_MANY_FILES 67 // Too many files
+#define SbERR_NO_DEVICE 68 // Device not available
+#define SbERR_ACCESS_DENIED 70 // Permission denied
+#define SbERR_NOT_READY 71 // Disk not ready
+#define SbERR_NOT_IMPLEMENTED 73 // Feature not implemented
+#define SbERR_DIFFERENT_DRIVE 74 // No rename with different drive
+#define SbERR_ACCESS_ERROR 75 // Path/File access error
+#define SbERR_PATH_NOT_FOUND 76 // Path not found
+#define SbERR_NO_OBJECT 91 // Object variable not set
+#define SbERR_BAD_PATTERN 93 // Invalid pattern string
+#define SBERR_IS_NULL 94 // Invalid use of Null
+
+// DDE messages from 250-299
+#define SbERR_DDE_ERROR 250
+#define SbERR_DDE_WAITINGACK 280
+#define SbERR_DDE_OUTOFCHANNELS 281
+#define SbERR_DDE_NO_RESPONSE 282
+#define SbERR_DDE_MULT_RESPONSES 283
+#define SbERR_DDE_CHANNEL_LOCKED 284
+#define SbERR_DDE_NOTPROCESSED 285
+#define SbERR_DDE_TIMEOUT 286
+#define SbERR_DDE_USER_INTERRUPT 287
+#define SbERR_DDE_BUSY 288
+#define SbERR_DDE_NO_DATA 289
+#define SbERR_DDE_WRONG_DATA_FORMAT 290
+#define SbERR_DDE_PARTNER_QUIT 291
+#define SbERR_DDE_CONV_CLOSED 292
+#define SbERR_DDE_NO_CHANNEL 293
+#define SbERR_DDE_INVALID_LINK 294
+#define SbERR_DDE_QUEUE_OVERFLOW 295
+#define SbERR_DDE_LINK_ALREADY_EST 296
+#define SbERR_DDE_LINK_INV_TOPIC 297
+#define SbERR_DDE_DLL_NOT_FOUND 298
+
+#define SbERR_CANNOT_LOAD 323 // Can't load module
+#define SbERR_BAD_INDEX 341 // Invalid object index
+#define SbERR_NO_ACTIVE_OBJECT 366 // No active view or document
+#define SbERR_BAD_PROP_VALUE 380 // Bad property value
+#define SbERR_PROP_READONLY 382 // Property is read only
+#define SbERR_PROP_WRITEONLY 394 // Property is write only
+#define SbERR_INVALID_OBJECT 420 // Invalid object reference
+#define SbERR_NO_METHOD 423 // Property or method not found
+#define SbERR_NEEDS_OBJECT 424 // Object required
+#define SbERR_INVALID_USAGE_OBJECT 425 // Invalid usee of object
+#define SbERR_NO_OLE 430 // Class does not support OLE
+#define SbERR_BAD_METHOD 438 // Object doesn't support method
+#define SbERR_OLE_ERROR 440 // OLE Automation error
+#define SbERR_BAD_ACTION 445 // Object doesn't support this action
+#define SbERR_NO_NAMED_ARGS 446 // Object doesn't support named args
+#define SbERR_BAD_LOCALE 447 // Object doesn't support current locale setting
+#define SbERR_NAMED_NOT_FOUND 448 // Named argument not found
+#define SbERR_NOT_OPTIONAL 449 // Argument not optional
+#define SbERR_WRONG_ARGS 450 // Wrong number of arguments
+#define SbERR_NOT_A_COLL 451 // Object not a collection
+#define SbERR_BAD_ORDINAL 452 // Invalid ordinal
+#define SbERR_DLLPROC_NOT_FOUND 453 // Specified DLL function not found
+#define SbERR_BAD_CLIPBD_FORMAT 460 // Invalid clipboard format
+
+// Debugger messages from 700-799
+
+#define SbERR_PROPERTY_NOT_FOUND 1000 // Class not have property
+#define SbERR_METHOD_NOT_FOUND 1001 // Class does not have method
+#define SbERR_ARG_MISSING 1002 // Missing required argument
+#define SbERR_BAD_NUMBER_OF_ARGS 1003 // Bad number of arguments
+#define SbERR_METHOD_FAILED 1004 // Method failed
+#define SbERR_SETPROP_FAILED 1005 // Unable to set property
+#define SbERR_GETPROP_FAILED 1006 // Unable to get property
+
+// Compiler Errors (do not happen at runtime)
+// These IDs can shift at any time
+
+#define SbERR_COMPILER_BGN 950
+#define SbERR_UNEXPECTED 951 // Unexpected symbol: xx
+#define SbERR_EXPECTED 952 // Expected: xx
+#define SbERR_SYMBOL_EXPECTED 953 // Symbol expected
+#define SbERR_VAR_EXPECTED 954 // Variable expected
+#define SbERR_LABEL_EXPECTED 955 // Label expected
+#define SbERR_LVALUE_EXPECTED 956 // Lvalue expected
+#define SbERR_VAR_DEFINED 957 // Variable xxx already defined
+#define SbERR_PROC_DEFINED 958 // Procedure xx already defined
+#define SbERR_LABEL_DEFINED 959 // Label xxx already defined
+#define SbERR_UNDEF_VAR 960 // Variable xx undefined
+#define SbERR_UNDEF_ARRAY 961 // Array or function xx undefined
+#define SbERR_UNDEF_PROC 962 // Procedure xxx undefined
+#define SbERR_UNDEF_LABEL 963 // Label xxx undefined
+#define SbERR_UNDEF_TYPE 964 // Unknown user defined type xxx
+#define SbERR_BAD_EXIT 965 // Exit XXX expexted
+#define SbERR_BAD_BLOCK 966 // Unterminated statement block: missing XX
+#define SbERR_BAD_BRACKETS 967 // Parentheses do not match
+#define SbERR_BAD_DECLARATION 968 // Symbol xx defined differently
+#define SbERR_BAD_PARAMETERS 969 // Parameters do not match
+#define SbERR_BAD_CHAR_IN_NUMBER 970 // Bad character in number
+#define SbERR_MUST_HAVE_DIMS 971 // Array needs dimensioning
+#define SbERR_NO_IF 972 // Else/Endif without If
+#define SbERR_NOT_IN_SUBR 973 // xxx not allowed within a sub
+#define SbERR_NOT_IN_MAIN 974 // xxx not allowed outside a sub
+#define SbERR_WRONG_DIMS 975 // Dimensions do not match
+#define SbERR_BAD_OPTION 976 // Unknown option: xxx
+#define SbERR_CONSTANT_REDECLARED 977 // Constant xx redeclared
+#define SbERR_PROG_TOO_LARGE 978 // Program is too large
+#define SbERR_NO_STRINGS_ARRAYS 979
+#define SbERR_COMPILER_END 299
+*/
+
+// Grid messages from 30000-30999
+// OLE messages from 31000-31999
+
+#endif
diff --git a/basic/inc/basic/sbmeth.hxx b/basic/inc/basic/sbmeth.hxx
new file mode 100644
index 000000000000..4e426ffe8552
--- /dev/null
+++ b/basic/inc/basic/sbmeth.hxx
@@ -0,0 +1,101 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _SB_SBMETH_HXX
+#define _SB_SBMETH_HXX
+
+#include <tools/errcode.hxx>
+#include <basic/sbxmeth.hxx>
+#include <basic/sbdef.hxx>
+
+class SbModule;
+class SbMethodImpl;
+
+class SbMethod : public SbxMethod
+{
+ friend class SbiRuntime;
+ friend class SbiFactory;
+ friend class SbModule;
+ friend class SbClassModuleObject;
+ friend class SbiCodeGen;
+ friend class SbJScriptMethod;
+ friend class SbIfaceMapperMethod;
+
+ SbMethodImpl* mpSbMethodImpl; // Impl data
+ SbModule* pMod;
+ USHORT nDebugFlags;
+ USHORT nLine1, nLine2;
+ UINT32 nStart;
+ BOOL bInvalid;
+ SbxArrayRef refStatics;
+ SbMethod( const String&, SbxDataType, SbModule* );
+ SbMethod( const SbMethod& );
+ virtual BOOL LoadData( SvStream&, USHORT );
+ virtual BOOL StoreData( SvStream& ) const;
+ virtual ~SbMethod();
+
+public:
+ SBX_DECL_PERSIST_NODATA(SBXCR_SBX,SBXID_BASICMETHOD,2);
+ TYPEINFO();
+ virtual SbxInfo* GetInfo();
+ SbxArray* GetLocals();
+ SbxArray* GetStatics();
+ void ClearStatics();
+ SbModule* GetModule() { return pMod; }
+ UINT32 GetId() const { return nStart; }
+ USHORT GetDebugFlags() { return nDebugFlags; }
+ void SetDebugFlags( USHORT n ) { nDebugFlags = n; }
+ void GetLineRange( USHORT&, USHORT& );
+
+ // Schnittstelle zum Ausfuehren einer Methode aus den Applikationen
+ virtual ErrCode Call( SbxValue* pRet = NULL );
+ virtual void Broadcast( ULONG nHintId );
+};
+
+#ifndef __SB_SBMETHODREF_HXX
+#define __SB_SBMETHODREF_HXX
+SV_DECL_IMPL_REF(SbMethod)
+#endif
+
+class SbIfaceMapperMethod : public SbMethod
+{
+ friend class SbiRuntime;
+
+ SbMethodRef mxImplMeth;
+
+public:
+ TYPEINFO();
+ SbIfaceMapperMethod( const String& rName, SbMethod* pImplMeth )
+ : SbMethod( rName, pImplMeth->GetType(), NULL )
+ , mxImplMeth( pImplMeth )
+ {}
+ virtual ~SbIfaceMapperMethod();
+ SbMethod* getImplMethod( void )
+ { return mxImplMeth; }
+};
+
+#endif
diff --git a/basic/inc/basic/sbmod.hxx b/basic/inc/basic/sbmod.hxx
new file mode 100644
index 000000000000..abb482f7bfe5
--- /dev/null
+++ b/basic/inc/basic/sbmod.hxx
@@ -0,0 +1,187 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _SB_SBMOD_HXX
+#define _SB_SBMOD_HXX
+
+#include <com/sun/star/script/XInvocation.hpp>
+#include <basic/sbdef.hxx>
+#include <basic/sbxobj.hxx>
+#include <basic/sbxdef.hxx>
+#include <rtl/ustring.hxx>
+#include <vector>
+
+class SbMethod;
+class SbProperty;
+class SbiRuntime;
+class SbiBreakpoints;
+class SbiImage;
+class SbProcedureProperty;
+class SbIfaceMapperMethod;
+class SbClassModuleObject;
+
+struct ClassModuleRunInitItem;
+struct SbClassData;
+class SbModuleImpl;
+
+class SbModule : public SbxObject
+{
+ friend class TestToolObj; // allows module initialisation at runtime
+ friend class SbiCodeGen;
+ friend class SbMethod;
+ friend class SbiRuntime;
+ friend class StarBASIC;
+ friend class SbClassModuleObject;
+
+ SbModuleImpl* mpSbModuleImpl; // Impl data
+ std::vector< String > mModuleVariableNames;
+
+protected:
+ com::sun::star::uno::Reference< com::sun::star::script::XInvocation > mxWrapper;
+ ::rtl::OUString aOUSource;
+ String aComment;
+ SbiImage* pImage; // the Image
+ SbiBreakpoints* pBreaks; // Breakpoints
+ SbClassData* pClassData;
+ BOOL mbVBACompat;
+ INT32 mnType;
+ SbxObjectRef pDocObject; // an impl object ( used by Document Modules )
+ bool bIsProxyModule;
+
+ static void implProcessModuleRunInit( ClassModuleRunInitItem& rItem );
+ void StartDefinitions();
+ SbMethod* GetMethod( const String&, SbxDataType );
+ SbProperty* GetProperty( const String&, SbxDataType );
+ SbProcedureProperty* GetProcedureProperty( const String&, SbxDataType );
+ SbIfaceMapperMethod* GetIfaceMapperMethod( const String&, SbMethod* );
+ void EndDefinitions( BOOL=FALSE );
+ USHORT Run( SbMethod* );
+ void RunInit();
+ void ClearPrivateVars();
+ void GlobalRunInit( BOOL bBasicStart ); // for all modules
+ void GlobalRunDeInit( void );
+ const BYTE* FindNextStmnt( const BYTE*, USHORT&, USHORT& ) const;
+ const BYTE* FindNextStmnt( const BYTE*, USHORT&, USHORT&,
+ BOOL bFollowJumps, const SbiImage* pImg=NULL ) const;
+ virtual BOOL LoadData( SvStream&, USHORT );
+ virtual BOOL StoreData( SvStream& ) const;
+ virtual BOOL LoadCompleted();
+ virtual void SFX_NOTIFY( SfxBroadcaster& rBC, const TypeId& rBCType,
+ const SfxHint& rHint, const TypeId& rHintType );
+ virtual ~SbModule();
+public:
+ SBX_DECL_PERSIST_NODATA(SBXCR_SBX,SBXID_BASICMOD,2);
+ TYPEINFO();
+ SbModule( const String&, BOOL bCompat = FALSE );
+ virtual void SetParent( SbxObject* );
+ virtual void Clear();
+
+ virtual SbxVariable* Find( const String&, SbxClassType );
+
+ virtual const String& GetSource() const;
+ const ::rtl::OUString& GetSource32() const;
+ const String& GetComment() const { return aComment; }
+ virtual void SetSource( const String& r );
+ void SetSource32( const ::rtl::OUString& r );
+ void SetComment( const String& r );
+
+ virtual BOOL Compile();
+ BOOL Disassemble( String& rText );
+ virtual BOOL IsCompiled() const;
+ const SbxObject* FindType( String aTypeName ) const;
+
+ virtual BOOL IsBreakable( USHORT nLine ) const;
+ virtual USHORT GetBPCount() const;
+ virtual USHORT GetBP( USHORT n ) const;
+ virtual BOOL IsBP( USHORT nLine ) const;
+ virtual BOOL SetBP( USHORT nLine );
+ virtual BOOL ClearBP( USHORT nLine );
+ virtual void ClearAllBP();
+
+ // Lines of Subs
+ virtual SbMethod* GetFunctionForLine( USHORT );
+
+ // Store only image, no source (needed for new password protection)
+ BOOL StoreBinaryData( SvStream& );
+ BOOL StoreBinaryData( SvStream&, USHORT nVer );
+ BOOL LoadBinaryData( SvStream&, USHORT nVer );
+ BOOL LoadBinaryData( SvStream& );
+ BOOL ExceedsLegacyModuleSize();
+ void fixUpMethodStart( bool bCvtToLegacy, SbiImage* pImg = NULL ) const;
+ BOOL IsVBACompat() const;
+ void SetVBACompat( BOOL bCompat );
+ INT32 GetModuleType() { return mnType; }
+ void SetModuleType( INT32 nType ) { mnType = nType; }
+ bool isProxyModule() { return bIsProxyModule; }
+ void AddVarName( const String& aName );
+ void RemoveVars();
+ ::com::sun::star::uno::Reference< ::com::sun::star::script::XInvocation > GetUnoModule();
+ bool createCOMWrapperForIface( ::com::sun::star::uno::Any& o_rRetAny, SbClassModuleObject* pProxyClassModuleObject );
+};
+
+#ifndef __SB_SBMODULEREF_HXX
+#define __SB_SBMODULEREF_HXX
+
+SV_DECL_IMPL_REF(SbModule)
+
+#endif
+
+class SbClassModuleImpl;
+
+// Object class for instances of class modules
+class SbClassModuleObject : public SbModule
+{
+ SbClassModuleImpl* mpSbClassModuleImpl;
+
+ SbModule* mpClassModule;
+ bool mbInitializeEventDone;
+
+public:
+ TYPEINFO();
+ SbClassModuleObject( SbModule* pClassModule );
+ ~SbClassModuleObject();
+
+ // Overridden to support NameAccess etc.
+ virtual SbxVariable* Find( const String&, SbxClassType );
+
+ virtual void SFX_NOTIFY( SfxBroadcaster&, const TypeId&, const SfxHint& rHint, const TypeId& );
+
+ SbModule* getClassModule( void )
+ { return mpClassModule; }
+
+ void triggerInitializeEvent( void );
+ void triggerTerminateEvent( void );
+};
+
+#ifndef __SB_SBCLASSMODULEREF_HXX
+#define __SB_SBCLASSMODULEREF_HXX
+
+SV_DECL_IMPL_REF(SbClassModuleObject);
+
+#endif
+
+#endif
diff --git a/basic/inc/basic/sbobjmod.hxx b/basic/inc/basic/sbobjmod.hxx
new file mode 100644
index 000000000000..9ff46d1931f3
--- /dev/null
+++ b/basic/inc/basic/sbobjmod.hxx
@@ -0,0 +1,119 @@
+/*************************************************************************
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: sbobjmod.hxx,v $
+ *
+ * $Revision: 1.4 $
+ *
+ * last change: $Author: $ $Date: 2007/08/27 16:31:39 $
+ *
+ * The Contents of this file are made available subject to
+ * the terms of GNU Lesser General Public License Version 2.1.
+ *
+ *
+ * GNU Lesser General Public License Version 2.1
+ * =============================================
+ * Copyright 2005 by Sun Microsystems, Inc.
+ * 901 San Antonio Road, Palo Alto, CA 94303, USA
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1, as published by the Free Software Foundation.
+ *
+ * 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser 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
+ *
+ ************************************************************************/
+
+#ifndef _SB_OBJMOD_HXX
+#define _SB_OBJMOD_HXX
+
+#include <rtl/ref.hxx>
+#include <basic/sbmod.hxx>
+#include <basic/sbstar.hxx>
+#include <com/sun/star/script/ModuleInfo.hpp>
+#include <com/sun/star/lang/XEventListener.hpp>
+#include <com/sun/star/awt/XDialog.hpp>
+#include <com/sun/star/frame/XModel.hpp>
+
+namespace css = ::com::sun::star;
+
+// Basic-Module for excel object.
+
+class SbObjModule : public SbModule
+{
+ SbObjModule( const SbObjModule& );
+ SbObjModule();
+public:
+ TYPEINFO();
+ SbObjModule( const String& rName, const com::sun::star::script::ModuleInfo& mInfo, bool bIsVbaCompatible );
+ virtual SbxVariable* Find( const XubString& rName, SbxClassType t );
+ using SbxValue::GetObject;
+ SbxVariable* GetObject();
+ void SetUnoObject( const com::sun::star::uno::Any& aObj )throw ( com::sun::star::uno::RuntimeException ) ;
+};
+
+class FormObjEventListenerImpl;
+
+class SbUserFormModule : public SbObjModule
+{
+ com::sun::star::script::ModuleInfo m_mInfo;
+ ::rtl::Reference< FormObjEventListenerImpl > m_DialogListener;
+ css::uno::Reference<css::awt::XDialog> m_xDialog;
+ css::uno::Reference<css::frame::XModel> m_xModel;
+ String sFormName;
+ bool mbInit;
+ SbUserFormModule( const SbUserFormModule& );
+ SbUserFormModule();
+
+//protected:
+ virtual void InitObject();
+public:
+ TYPEINFO();
+ SbUserFormModule( const String& rName, const com::sun::star::script::ModuleInfo& mInfo, bool bIsVBACompat );
+ virtual ~SbUserFormModule();
+ virtual SbxVariable* Find( const XubString& rName, SbxClassType t );
+ void ResetApiObj();
+ void Unload();
+ void Load();
+ void triggerMethod( const String& );
+ void triggerMethod( const String&, css::uno::Sequence< css::uno::Any >& );
+ void triggerActivateEvent();
+ void triggerDeactivateEvent();
+ void triggerInitializeEvent();
+ void triggerTerminateEvent();
+ void triggerLayoutEvent();
+ void triggerResizeEvent();
+
+ class SbUserFormModuleInstance* CreateInstance();
+};
+
+class SbUserFormModuleInstance : public SbUserFormModule
+{
+ SbUserFormModule* m_pParentModule;
+
+public:
+ SbUserFormModuleInstance( SbUserFormModule* pParentModule, const String& rName,
+ const com::sun::star::script::ModuleInfo& mInfo, bool bIsVBACompat );
+
+ virtual BOOL IsClass( const String& ) const;
+ virtual SbxVariable* Find( const XubString& rName, SbxClassType t );
+};
+
+
+#ifndef __SB_SBOBJMODULEREF_HXX
+#define __SB_SBOBJMODULEREF_HXX
+
+SV_DECL_IMPL_REF(SbObjModule);
+
+#endif
+#endif
+
diff --git a/basic/inc/basic/sbprop.hxx b/basic/inc/basic/sbprop.hxx
new file mode 100644
index 000000000000..60cd9e5353c0
--- /dev/null
+++ b/basic/inc/basic/sbprop.hxx
@@ -0,0 +1,80 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _SB_SBPROPERTY_HXX
+#define _SB_SBPROPERTY_HXX
+
+#include <basic/sbxprop.hxx>
+#include <basic/sbdef.hxx>
+
+class SbModule;
+
+class SbProperty : public SbxProperty
+{
+ friend class SbiFactory;
+ friend class SbModule;
+ friend class SbProcedureProperty;
+ SbModule* pMod;
+ BOOL bInvalid;
+ SbProperty( const String&, SbxDataType, SbModule* );
+ virtual ~SbProperty();
+public:
+ SBX_DECL_PERSIST_NODATA(SBXCR_SBX,SBXID_BASICPROP,1);
+ TYPEINFO();
+ SbModule* GetModule() { return pMod; }
+};
+
+#ifndef __SB_SBPROPERTYREF_HXX
+#define __SB_SBPROPERTYREF_HXX
+SV_DECL_IMPL_REF(SbProperty)
+#endif
+
+class SbProcedureProperty : public SbxProperty
+{
+ bool mbSet; // Flag for set command
+
+ virtual ~SbProcedureProperty();
+
+public:
+ SbProcedureProperty( const String& r, SbxDataType t )
+ : SbxProperty( r, t ) // , pMod( p )
+ , mbSet( false )
+ {}
+ TYPEINFO();
+
+ bool isSet( void )
+ { return mbSet; }
+ void setSet( bool bSet )
+ { mbSet = bSet; }
+};
+
+#ifndef __SB_SBPROCEDUREPROPERTYREF_HXX
+#define __SB_SBPROCEDUREPROPERTYREF_HXX
+SV_DECL_IMPL_REF(SbProcedureProperty)
+#endif
+
+#endif
diff --git a/basic/inc/basic/sbstar.hxx b/basic/inc/basic/sbstar.hxx
new file mode 100644
index 000000000000..a234dc206ec7
--- /dev/null
+++ b/basic/inc/basic/sbstar.hxx
@@ -0,0 +1,220 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _SB_SBSTAR_HXX
+#define _SB_SBSTAR_HXX
+
+#include <basic/sbx.hxx>
+#include <basic/sbxobj.hxx>
+#ifndef _RTL_USTRING_HXX
+#include <rtl/ustring.hxx>
+#endif
+#include <osl/mutex.hxx>
+
+#include <basic/sbdef.hxx>
+#include <basic/sberrors.hxx>
+#include <com/sun/star/script/ModuleInfo.hpp>
+
+class SbModule; // completed module
+class SbiInstance; // runtime instance
+class SbiRuntime; // currently running procedure
+class SbiImage; // compiled image
+class BasicLibInfo; // info block for basic manager
+class SbiBreakpoints;
+class SbTextPortions;
+class SbMethod;
+class BasicManager;
+
+class StarBASICImpl;
+
+class StarBASIC : public SbxObject
+{
+ friend class SbiScanner;
+ friend class SbiExpression; // Access to RTL
+ friend class SbiInstance;
+ friend class SbiRuntime;
+
+ StarBASICImpl* mpStarBASICImpl;
+
+ SbxArrayRef pModules; // List of all modules
+ SbxObjectRef pRtl; // Runtime Library
+ SbxArrayRef xUnoListeners; // Listener handled by CreateUnoListener
+
+ // Handler-Support:
+ Link aErrorHdl; // Error handler
+ Link aBreakHdl; // Breakpoint handler
+ BOOL bNoRtl; // if TRUE: do not search RTL
+ BOOL bBreak; // if TRUE: Break, otherwise Step
+ BOOL bDocBasic;
+ BOOL bVBAEnabled;
+ BasicLibInfo* pLibInfo; // Info block for basic manager
+ SbLanguageMode eLanguageMode; // LanguageMode of the basic object
+ BOOL bQuit;
+
+ SbxObjectRef pVBAGlobals;
+ SbxObject* getVBAGlobals( );
+
+protected:
+ BOOL CError( SbError, const String&, xub_StrLen, xub_StrLen, xub_StrLen );
+private:
+ BOOL RTError( SbError, xub_StrLen, xub_StrLen, xub_StrLen );
+ BOOL RTError( SbError, const String& rMsg, xub_StrLen, xub_StrLen, xub_StrLen );
+ USHORT BreakPoint( xub_StrLen nLine, xub_StrLen nCol1, xub_StrLen nCol2 );
+ USHORT StepPoint( xub_StrLen nLine, xub_StrLen nCol1, xub_StrLen nCol2 );
+ virtual BOOL LoadData( SvStream&, USHORT );
+ virtual BOOL StoreData( SvStream& ) const;
+
+protected:
+
+ virtual BOOL ErrorHdl();
+ virtual USHORT BreakHdl();
+ virtual ~StarBASIC();
+
+public:
+
+ SBX_DECL_PERSIST_NODATA(SBXCR_SBX,SBXID_BASIC,1);
+ TYPEINFO();
+
+ StarBASIC( StarBASIC* pParent = NULL, BOOL bIsDocBasic = FALSE );
+
+ // #51727 SetModified overridden so that the Modfied-State is
+ // not delivered to Parent.
+ virtual void SetModified( BOOL );
+
+ void* operator new( size_t );
+ void operator delete( void* );
+
+ virtual void Insert( SbxVariable* );
+ using SbxObject::Remove;
+ virtual void Remove( SbxVariable* );
+ virtual void Clear();
+
+ BasicLibInfo* GetLibInfo() { return pLibInfo; }
+ void SetLibInfo( BasicLibInfo* p ) { pLibInfo = p; }
+
+ // Compiler-Interface
+ SbModule* MakeModule( const String& rName, const String& rSrc );
+ SbModule* MakeModule32( const String& rName, const ::rtl::OUString& rSrc );
+ SbModule* MakeModule32( const String& rName, const com::sun::star::script::ModuleInfo& mInfo, const ::rtl::OUString& rSrc );
+ BOOL Compile( SbModule* );
+ BOOL Disassemble( SbModule*, String& rText );
+ static void Stop();
+ static void Error( SbError );
+ static void Error( SbError, const String& rMsg );
+ static void FatalError( SbError );
+ static void FatalError( SbError, const String& rMsg );
+ static BOOL IsRunning();
+ static SbError GetErrBasic();
+ // #66536 make additional message accessible by RTL function Error
+ static String GetErrorMsg();
+ static xub_StrLen GetErl();
+ // Highlighting
+ void Highlight( const String& rSrc, SbTextPortions& rList );
+
+ virtual SbxVariable* Find( const String&, SbxClassType );
+ virtual BOOL Call( const String&, SbxArray* = NULL );
+
+ SbxArray* GetModules() { return pModules; }
+ SbxObject* GetRtl() { return pRtl; }
+ SbModule* FindModule( const String& );
+ // Run init code of all modules (including the inserted Doc-Basics)
+ void InitAllModules( StarBASIC* pBasicNotToInit = NULL );
+ void DeInitAllModules( void );
+ void ClearAllModuleVars( void );
+ void ActivateObject( const String*, BOOL );
+ BOOL LoadOldModules( SvStream& );
+
+ // #43011 For TestTool; deletes global vars
+ void ClearGlobalVars( void );
+
+ // Calls for error and break handler
+ static USHORT GetLine();
+ static USHORT GetCol1();
+ static USHORT GetCol2();
+ static void SetErrorData( SbError nCode, USHORT nLine,
+ USHORT nCol1, USHORT nCol2 );
+
+ // Specific to error handler
+ static void MakeErrorText( SbError, const String& aMsg );
+ static const String& GetErrorText();
+ static SbError GetErrorCode();
+ static BOOL IsCompilerError();
+ static USHORT GetVBErrorCode( SbError nError );
+ static SbError GetSfxFromVBError( USHORT nError );
+ static void SetGlobalLanguageMode( SbLanguageMode eLangMode );
+ static SbLanguageMode GetGlobalLanguageMode();
+ // Local settings
+ void SetLanguageMode( SbLanguageMode eLangMode )
+ { eLanguageMode = eLangMode; }
+ SbLanguageMode GetLanguageMode();
+
+ // Specific for break handler
+ BOOL IsBreak() const { return bBreak; }
+
+ static Link GetGlobalErrorHdl();
+ static void SetGlobalErrorHdl( const Link& rNewHdl );
+ Link GetErrorHdl() const { return aErrorHdl; }
+ void SetErrorHdl( const Link& r ) { aErrorHdl = r; }
+
+ static Link GetGlobalBreakHdl();
+ static void SetGlobalBreakHdl( const Link& rNewHdl );
+ Link GetBreakHdl() const { return aBreakHdl; }
+ void SetBreakHdl( const Link& r ) { aBreakHdl = r; }
+
+ SbxArrayRef getUnoListeners( void );
+
+ static SbxBase* FindSBXInCurrentScope( const String& rName );
+ static SbxVariable* FindVarInCurrentScopy
+ ( const String& rName, USHORT& rStatus );
+ static SbMethod* GetActiveMethod( USHORT nLevel = 0 );
+ static SbModule* GetActiveModule();
+ void SetVBAEnabled( BOOL bEnabled );
+ BOOL isVBAEnabled();
+
+ // #60175 TRUE: SFX-Resource is not displayed on basic errors
+ static void StaticSuppressSfxResource( BOOL bSuppress );
+
+ // #91147 TRUE: Reschedule is enabled (default>, FALSE: No reschedule
+ static void StaticEnableReschedule( BOOL bReschedule );
+
+ SbxObjectRef getRTL( void ) { return pRtl; }
+ BOOL IsDocBasic() { return bDocBasic; }
+ SbxVariable* VBAFind( const String& rName, SbxClassType t );
+ bool GetUNOConstant( const sal_Char* _pAsciiName, ::com::sun::star::uno::Any& aOut );
+ void QuitAndExitApplication();
+ BOOL IsQuitApplication() { return bQuit; };
+};
+
+#ifndef __SB_SBSTARBASICREF_HXX
+#define __SB_SBSTARBASICREF_HXX
+
+SV_DECL_IMPL_REF(StarBASIC)
+
+#endif
+
+#endif
+
diff --git a/basic/inc/basic/sbstdobj.hxx b/basic/inc/basic/sbstdobj.hxx
new file mode 100644
index 000000000000..5cc76c8bd9c3
--- /dev/null
+++ b/basic/inc/basic/sbstdobj.hxx
@@ -0,0 +1,145 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _SBSTDOBJ1_HXX
+#define _SBSTDOBJ1_HXX
+
+#include <basic/sbxobj.hxx>
+#ifndef _GRAPH_HXX //autogen
+#include <vcl/graph.hxx>
+#endif
+#include <basic/sbxfac.hxx>
+class StarBASIC;
+class SbStdFactory;
+
+//--------------------
+// class SbStdFactory
+//--------------------
+class SbStdFactory : public SbxFactory
+{
+public:
+ SbStdFactory();
+
+ virtual SbxObject* CreateObject( const String& rClassName );
+};
+
+//--------------------
+// class SbStdPicture
+//--------------------
+class SbStdPicture : public SbxObject
+{
+protected:
+ Graphic aGraphic;
+
+ ~SbStdPicture();
+ virtual void SFX_NOTIFY( SfxBroadcaster& rBC, const TypeId& rBCType,
+ const SfxHint& rHint, const TypeId& rHintType );
+
+ void PropType( SbxVariable* pVar, SbxArray* pPar, BOOL bWrite );
+ void PropWidth( SbxVariable* pVar, SbxArray* pPar, BOOL bWrite );
+ void PropHeight( SbxVariable* pVar, SbxArray* pPar, BOOL bWrite );
+
+public:
+ TYPEINFO();
+
+ SbStdPicture();
+ virtual SbxVariable* Find( const String&, SbxClassType );
+
+ Graphic GetGraphic() const { return aGraphic; }
+ void SetGraphic( const Graphic& rGrf ) { aGraphic = rGrf; }
+};
+
+//-----------------
+// class SbStdFont
+//-----------------
+class SbStdFont : public SbxObject
+{
+protected:
+ BOOL bBold;
+ BOOL bItalic;
+ BOOL bStrikeThrough;
+ BOOL bUnderline;
+ USHORT nSize;
+ String aName;
+
+ ~SbStdFont();
+ virtual void SFX_NOTIFY( SfxBroadcaster& rBC, const TypeId& rBCType,
+ const SfxHint& rHint, const TypeId& rHintType );
+
+ void PropBold( SbxVariable* pVar, SbxArray* pPar, BOOL bWrite );
+ void PropItalic( SbxVariable* pVar, SbxArray* pPar, BOOL bWrite );
+ void PropStrikeThrough( SbxVariable* pVar, SbxArray* pPar, BOOL bWrite );
+ void PropUnderline( SbxVariable* pVar, SbxArray* pPar, BOOL bWrite );
+ void PropSize( SbxVariable* pVar, SbxArray* pPar, BOOL bWrite );
+ void PropName( SbxVariable* pVar, SbxArray* pPar, BOOL bWrite );
+
+public:
+ TYPEINFO();
+
+ SbStdFont();
+ virtual SbxVariable* Find( const String&, SbxClassType );
+
+ void SetBold( BOOL bB ) { bBold = bB; }
+ BOOL IsBold() const { return bBold; }
+ void SetItalic( BOOL bI ) { bItalic = bI; }
+ BOOL IsItalic() const { return bItalic; }
+ void SetStrikeThrough( BOOL bS ) { bStrikeThrough = bS; }
+ BOOL IsStrikeThrough() const { return bStrikeThrough; }
+ void SetUnderline( BOOL bU ) { bUnderline = bU; }
+ BOOL IsUnderline() const { return bUnderline; }
+ void SetSize( USHORT nS ) { nSize = nS; }
+ USHORT GetSize() const { return nSize; }
+ void SetFontName( const String& rName ) { aName = rName; }
+ String GetFontName() const { return aName; }
+};
+
+//----------------------
+// class SbStdClipboard
+//----------------------
+class SbStdClipboard : public SbxObject
+{
+protected:
+
+ ~SbStdClipboard();
+ virtual void SFX_NOTIFY( SfxBroadcaster& rBC, const TypeId& rBCType,
+ const SfxHint& rHint, const TypeId& rHintType );
+
+ void MethClear( SbxVariable* pVar, SbxArray* pPar_, BOOL bWrite );
+ void MethGetData( SbxVariable* pVar, SbxArray* pPar_, BOOL bWrite );
+ void MethGetFormat( SbxVariable* pVar, SbxArray* pPar_, BOOL bWrite );
+ void MethGetText( SbxVariable* pVar, SbxArray* pPar_, BOOL bWrite );
+ void MethSetData( SbxVariable* pVar, SbxArray* pPar_, BOOL bWrite );
+ void MethSetText( SbxVariable* pVar, SbxArray* pPar_, BOOL bWrite );
+
+public:
+ TYPEINFO();
+
+ SbStdClipboard();
+ virtual SbxVariable* Find( const String&, SbxClassType );
+};
+
+#endif
diff --git a/basic/inc/basic/sbuno.hxx b/basic/inc/basic/sbuno.hxx
new file mode 100644
index 000000000000..d816d424313b
--- /dev/null
+++ b/basic/inc/basic/sbuno.hxx
@@ -0,0 +1,47 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _SB_SBUNO_HXX
+#define _SB_SBUNO_HXX
+
+#include <basic/sbxobj.hxx>
+
+namespace com { namespace sun { namespace star { namespace uno { class Any; }}}}
+
+// Returns a SbxObject that wrapps an Uno Interface
+// Implementation in basic/source/classes/sbunoobj.cxx
+SbxObjectRef GetSbUnoObject( const String& aName, const com::sun::star::uno::Any& aUnoObj_ );
+
+// Force creation of all properties for debugging
+void createAllObjectProperties( SbxObject* pObj );
+
+::com::sun::star::uno::Any sbxToUnoValue( SbxVariable* pVar );
+
+void unoToSbxValue( SbxVariable* pVar, const ::com::sun::star::uno::Any& aValue );
+
+#endif
+
diff --git a/basic/inc/basic/sbx.hxx b/basic/inc/basic/sbx.hxx
new file mode 100644
index 000000000000..2eb194708739
--- /dev/null
+++ b/basic/inc/basic/sbx.hxx
@@ -0,0 +1,369 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _SBXCLASS_HXX
+#define _SBXCLASS_HXX
+
+#include "tools/ref.hxx"
+#include "svl/svarray.hxx"
+#include "svl/smplhint.hxx"
+#include "svl/lstner.hxx"
+#include <basic/sbxdef.hxx>
+#include <basic/sbxform.hxx>
+
+#ifndef __SBX_SBXOBJECT_HXX
+#include <basic/sbxobj.hxx>
+#endif
+#include <basic/sbxprop.hxx>
+#include <basic/sbxmeth.hxx>
+
+class BigInt;
+class String;
+class UniString;
+class SvStream;
+class SbxBase;
+class SbxVariable;
+class SbxProperty;
+class SbxMethod;
+class SbxObject;
+class SbxArray;
+class SbxDimArray;
+class SbxFactory;
+struct SbxINT64;
+struct SbxUINT64;
+
+class SfxBroadcaster;
+class SvDispatch;
+
+///////////////////////////////////////////////////////////////////////////
+
+////////////////////////////////////////////////////////////////////////////
+
+#ifndef __SBX_SBXPARAMINFO
+#define __SBX_SBXPARAMINFO
+
+// Parameter information
+struct SbxParamInfo
+{
+ const String aName; // Name of the parameter
+ SbxBaseRef aTypeRef; // Object, if object type
+ SbxDataType eType; // Data type
+ UINT16 nFlags; // Flag-Bits
+ UINT32 nUserData; // IDs etc.
+ SbxParamInfo( const String& s, SbxDataType t, USHORT n, SbxBase* b = NULL )
+ : aName( s ), aTypeRef( b ), eType( t ), nFlags( n ), nUserData( 0 ) {}
+ ~SbxParamInfo() {}
+};
+
+//#if 0 // _SOLAR__PRIVATE
+SV_DECL_PTRARR_DEL(SbxParams,SbxParamInfo*,4,4)
+//#else
+//typedef SvPtrarr SbxParams;
+//#endif
+
+#endif
+
+#ifndef __SBX_SBXINFO
+#define __SBX_SBXINFO
+
+class SbxInfo : public SvRefBase
+{
+ friend class SbxVariable;
+ friend class SbMethod;
+
+ String aComment;
+ String aHelpFile;
+ UINT32 nHelpId;
+ SbxParams aParams;
+
+protected:
+ BOOL LoadData( SvStream&, USHORT );
+ BOOL StoreData( SvStream& ) const;
+ virtual ~SbxInfo();
+public:
+ SbxInfo();
+ SbxInfo( const String&, UINT32 );
+
+ void AddParam( const String&, SbxDataType, USHORT=SBX_READ );
+ void AddParam( const SbxParamInfo& );
+ const SbxParamInfo* GetParam( USHORT n ) const; // index starts with 1!
+ const String& GetComment() const { return aComment; }
+ const String& GetHelpFile() const { return aHelpFile; }
+ UINT32 GetHelpId() const { return nHelpId; }
+
+ void SetComment( const String& r ) { aComment = r; }
+ void SetHelpFile( const String& r ) { aHelpFile = r; }
+ void SetHelpId( UINT32 nId ) { nHelpId = nId; }
+};
+
+#endif
+
+#ifndef __SBX_SBXHINT_HXX
+#define __SBX_SBXHINT_HXX
+
+class SbxHint : public SfxSimpleHint
+{
+ SbxVariable* pVar;
+public:
+ TYPEINFO();
+ SbxHint( ULONG n, SbxVariable* v ) : SfxSimpleHint( n ), pVar( v ) {}
+ SbxVariable* GetVar() const { return pVar; }
+};
+
+#endif
+
+#ifndef __SBX_SBXALIAS_HXX
+#define __SBX_SBXALIAS_HXX
+
+// SbxAlias is an alias for a var or object
+class SbxAlias : public SbxVariable, public SfxListener
+{
+ SbxVariableRef xAlias;
+ virtual ~SbxAlias();
+ virtual void Broadcast( ULONG );
+ virtual void SFX_NOTIFY( SfxBroadcaster& rBC, const TypeId& rBCType,
+ const SfxHint& rHint, const TypeId& rHintType );
+public:
+ SbxAlias( const String& rName, SbxVariable* pOriginal );
+ SbxAlias( const SbxAlias& );
+ SbxAlias& operator=( const SbxAlias& );
+};
+
+#endif
+
+#ifndef __SBX_SBXARRAY
+#define __SBX_SBXARRAY
+
+// SbxArray ist ein eindimensionales, dynamisches Array
+// von SbxVariablen. Put()/Insert() konvertieren die Variablen in den
+// angegebenen Datentyp, falls er nicht SbxVARIANT ist.
+
+class SbxVarRefs;
+class SbxVariableRef;
+
+class SbxArrayImpl;
+
+class SbxArray : public SbxBase
+{
+// #100883 Method to set method directly to parameter array
+ friend class SbMethod;
+ friend class SbClassModuleObject;
+ friend SbxObject* cloneTypeObjectImpl( const SbxObject& rTypeObj );
+ void PutDirect( SbxVariable* pVar, UINT32 nIdx );
+
+ SbxArrayImpl* mpSbxArrayImpl; // Impl data
+ SbxVarRefs* pData; // The variables
+
+protected:
+ SbxDataType eType; // Data type of the array
+ virtual ~SbxArray();
+ virtual BOOL LoadData( SvStream&, USHORT );
+ virtual BOOL StoreData( SvStream& ) const;
+
+public:
+ SBX_DECL_PERSIST_NODATA(SBXCR_SBX,SBXID_ARRAY,1);
+ TYPEINFO();
+ SbxArray( SbxDataType=SbxVARIANT );
+ SbxArray( const SbxArray& );
+ SbxArray& operator=( const SbxArray& );
+ virtual void Clear();
+ USHORT Count() const;
+ virtual SbxDataType GetType() const;
+ virtual SbxClassType GetClass() const;
+ SbxVariableRef& GetRef( USHORT );
+ SbxVariable* Get( USHORT );
+ void Put( SbxVariable*, USHORT );
+ void Insert( SbxVariable*, USHORT );
+ void Remove( USHORT );
+ void Remove( SbxVariable* );
+ void Merge( SbxArray* );
+ const String& GetAlias( USHORT );
+ void PutAlias( const String&, USHORT );
+ SbxVariable* FindUserData( UINT32 nUserData );
+ virtual SbxVariable* Find( const String&, SbxClassType );
+
+ // Additional methods for 32-bit indices
+ UINT32 Count32() const;
+ SbxVariableRef& GetRef32( UINT32 );
+ SbxVariable* Get32( UINT32 );
+ void Put32( SbxVariable*, UINT32 );
+ void Insert32( SbxVariable*, UINT32 );
+ void Remove32( UINT32 );
+};
+
+#endif
+
+#ifndef __SBX_SBXDIMARRAY_HXX
+#define __SBX_SBXDIMARRAY_HXX
+
+// SbxDimArray is an array that can dimensioned using BASIC conventions.
+struct SbxDim;
+
+class SbxDimArrayImpl;
+
+class SbxDimArray : public SbxArray
+{
+ SbxDimArrayImpl* mpSbxDimArrayImpl; // Impl data
+
+ SbxDim* pFirst, *pLast; // Links to Dimension table
+ short nDim; // Number of dimensions
+ void AddDimImpl32( INT32, INT32, BOOL bAllowSize0 );
+ bool mbHasFixedSize;
+protected:
+ USHORT Offset( const short* );
+ UINT32 Offset32( const INT32* );
+ USHORT Offset( SbxArray* );
+ UINT32 Offset32( SbxArray* );
+ virtual BOOL LoadData( SvStream&, USHORT );
+ virtual BOOL StoreData( SvStream& ) const;
+ virtual ~SbxDimArray();
+public:
+ SBX_DECL_PERSIST_NODATA(SBXCR_SBX,SBXID_DIMARRAY,1);
+ TYPEINFO();
+ SbxDimArray( SbxDataType=SbxVARIANT );
+ SbxDimArray( const SbxDimArray& );
+ SbxDimArray& operator=( const SbxDimArray& );
+ virtual void Clear();
+ using SbxArray::GetRef;
+ SbxVariableRef& GetRef( const short* );
+ using SbxArray::Get;
+ SbxVariable* Get( const short* );
+ using SbxArray::Put;
+ void Put( SbxVariable*, const short* );
+ SbxVariableRef& GetRef( SbxArray* );
+ SbxVariable* Get( SbxArray* );
+ void Put( SbxVariable*, SbxArray* );
+
+ short GetDims() const { return nDim; }
+ void AddDim( short, short );
+ void unoAddDim( short, short );
+ BOOL GetDim( short, short&, short& ) const;
+
+ using SbxArray::GetRef32;
+ SbxVariableRef& GetRef32( const INT32* );
+ using SbxArray::Get32;
+ SbxVariable* Get32( const INT32* );
+ using SbxArray::Put32;
+ void Put32( SbxVariable*, const INT32* );
+ void AddDim32( INT32, INT32 );
+ void unoAddDim32( INT32, INT32 );
+ BOOL GetDim32( INT32, INT32&, INT32& ) const;
+ bool hasFixedSize() { return mbHasFixedSize; };
+ void setHasFixedSize( bool bHasFixedSize ) {mbHasFixedSize = bHasFixedSize; };
+};
+
+#endif
+
+#ifndef __SBX_SBXCOLLECTION_HXX
+#define __SBX_SBXCOLLECTION_HXX
+
+class SbxCollection : public SbxObject
+{
+ void Initialize();
+protected:
+ virtual ~SbxCollection();
+ virtual BOOL LoadData( SvStream&, USHORT );
+ virtual void SFX_NOTIFY( SfxBroadcaster& rBC, const TypeId& rBCType,
+ const SfxHint& rHint, const TypeId& rHintType );
+ // Overridable methods (why not pure virtual?):
+ virtual void CollAdd( SbxArray* pPar );
+ virtual void CollItem( SbxArray* pPar );
+ virtual void CollRemove( SbxArray* pPar );
+
+public:
+ SBX_DECL_PERSIST_NODATA(SBXCR_SBX,SBXID_COLLECTION,1);
+ TYPEINFO();
+ SbxCollection( const String& rClassname );
+ SbxCollection( const SbxCollection& );
+ SbxCollection& operator=( const SbxCollection& );
+ virtual SbxVariable* FindUserData( UINT32 nUserData );
+ virtual SbxVariable* Find( const String&, SbxClassType );
+ virtual void Clear();
+};
+
+#endif
+
+#ifndef __SBX_SBXSTDCOLLECTION_HXX
+#define __SBX_SBXSTDCOLLECTION_HXX
+
+class SbxStdCollection : public SbxCollection
+{
+protected:
+ String aElemClass;
+ BOOL bAddRemoveOk;
+ virtual ~SbxStdCollection();
+ virtual BOOL LoadData( SvStream&, USHORT );
+ virtual BOOL StoreData( SvStream& ) const;
+ virtual void CollAdd( SbxArray* pPar );
+ virtual void CollRemove( SbxArray* pPar );
+public:
+ SBX_DECL_PERSIST_NODATA(SBXCR_SBX,SBXID_FIXCOLLECTION,1);
+ TYPEINFO();
+ SbxStdCollection
+ ( const String& rClassname, const String& rElemClass, BOOL=TRUE );
+ SbxStdCollection( const SbxStdCollection& );
+ SbxStdCollection& operator=( const SbxStdCollection& );
+ virtual void Insert( SbxVariable* );
+ const String& GetElementClass() const { return aElemClass; }
+};
+
+#endif
+
+#ifndef __SBX_SBXREFS_HXX
+#define __SBX_SBXREFS_HXX
+
+SV_IMPL_REF(SbxBase)
+
+SV_IMPL_REF(SbxVariable)
+
+#ifndef SBX_ARRAY_DECL_DEFINED
+#define SBX_ARRAY_DECL_DEFINED
+SV_DECL_REF(SbxArray)
+#endif
+#ifndef SBX_ARRAY_IMPL_DEFINED
+#define SBX_ARRAY_IMPL_DEFINED
+SV_IMPL_REF(SbxArray)
+#endif
+
+#ifndef SBX_INFO_DECL_DEFINED
+#define SBX_INFO_DECL_DEFINED
+SV_DECL_REF(SbxInfo)
+#endif
+#ifndef SBX_INFO_IMPL_DEFINED
+#define SBX_INFO_IMPL_DEFINED
+SV_IMPL_REF(SbxInfo)
+#endif
+
+#ifndef SBX_DIMARRAY_DECL_DEFINED
+#define SBX_DIMARRAY_DECL_DEFINED
+SV_DECL_REF(SbxDimArray)
+#endif
+SV_IMPL_REF(SbxDimArray)
+
+#endif
+
+#endif
diff --git a/basic/inc/basic/sbxbase.hxx b/basic/inc/basic/sbxbase.hxx
new file mode 100644
index 000000000000..0812b2622828
--- /dev/null
+++ b/basic/inc/basic/sbxbase.hxx
@@ -0,0 +1,60 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _SBXBASE_HXX
+#define _SBXBASE_HXX
+
+#include <i18npool/lang.h>
+#include "tools/list.hxx"
+#include "svl/svarray.hxx"
+#include <basic/sbxdef.hxx>
+
+class SbxFactory;
+class SbxVariable;
+class SbxBasicFormater;
+
+SV_DECL_PTRARR_DEL(SbxFacs,SbxFactory*,5,5)
+DECLARE_LIST(SbxVarList_Impl, SbxVariable*)
+
+// AppData-Struktur for SBX:
+struct SbxAppData
+{
+ SbxError eSbxError; // Error code
+ SbxFacs aFacs; // Factories
+ SbxVarList_Impl aVars; // for Dump
+ SbxBasicFormater *pBasicFormater; // Pointer to Format()-Command helper class
+
+ LanguageType eBasicFormaterLangType;
+ // It might be useful to store this class 'global' because some string reosurces are saved here
+
+ SbxAppData() : eSbxError( SbxERR_OK ), aFacs(), pBasicFormater( NULL ) {}
+ ~SbxAppData();
+};
+
+SbxAppData* GetSbxData_Impl();
+
+#endif
diff --git a/basic/inc/basic/sbxcore.hxx b/basic/inc/basic/sbxcore.hxx
new file mode 100644
index 000000000000..83e474521cc2
--- /dev/null
+++ b/basic/inc/basic/sbxcore.hxx
@@ -0,0 +1,181 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _SBXCORE_HXX
+#define _SBXCORE_HXX
+
+#include <tools/rtti.hxx>
+#include <tools/ref.hxx>
+#include <tools/debug.hxx>
+
+#include <basic/sbxdef.hxx>
+
+class SvStream;
+class String;
+class UniString;
+
+// The following Macro defines four (five) necessary methods within a
+// SBX object. LoadPrivateData() and StorePrivateData() must be implemented.
+// They are necessary for loading/storing the data of derived classes.
+// Load() and Store() must not be overridden.
+
+// This version of the Macros does not define Load/StorePrivateData()-methods
+#define SBX_DECL_PERSIST_NODATA( nCre, nSbxId, nVer ) \
+ virtual UINT32 GetCreator() const { return nCre; } \
+ virtual UINT16 GetVersion() const { return nVer; } \
+ virtual UINT16 GetSbxId() const { return nSbxId; }
+
+#define SBX_DECL_PERSIST_NODATA_() \
+ virtual UINT32 GetCreator() const; \
+ virtual UINT16 GetVersion() const; \
+ virtual UINT16 GetSbxId() const;
+
+// This version of the macro defines Load/StorePrivateData()-methods
+#define SBX_DECL_PERSIST( nCre, nSbxId, nVer ) \
+ virtual BOOL LoadPrivateData( SvStream&, USHORT ); \
+ virtual BOOL StorePrivateData( SvStream& ) const; \
+ SBX_DECL_PERSIST_NODATA( nCre, nSbxId, nVer )
+
+#define SBX_DECL_PERSIST_() \
+ virtual BOOL LoadPrivateData( SvStream&, USHORT ); \
+ virtual BOOL StorePrivateData( SvStream& ) const; \
+ SBX_DECL_PERSIST_NODATA_()
+
+#define SBX_IMPL_PERSIST( C, nCre, nSbxId, nVer ) \
+ UINT32 C::GetCreator() const { return nCre; } \
+ UINT16 C::GetVersion() const { return nVer; } \
+ UINT16 C::GetSbxId() const { return nSbxId; }
+
+class SbxBase;
+class SbxFactory;
+class SbxObject;
+
+DBG_NAMEEX(SbxBase)
+
+class SbxBaseImpl;
+
+class SbxBase : virtual public SvRefBase
+{
+ SbxBaseImpl* mpSbxBaseImpl; // Impl data
+
+ virtual BOOL LoadData( SvStream&, USHORT );
+ virtual BOOL StoreData( SvStream& ) const;
+protected:
+ USHORT nFlags; // Flag-Bits
+
+ SbxBase();
+ SbxBase( const SbxBase& );
+ SbxBase& operator=( const SbxBase& );
+ virtual ~SbxBase();
+ SBX_DECL_PERSIST(0,0,0);
+public:
+ TYPEINFO();
+ inline void SetFlags( USHORT n );
+ inline USHORT GetFlags() const;
+ inline void SetFlag( USHORT n );
+ inline void ResetFlag( USHORT n );
+ inline BOOL IsSet( USHORT n ) const;
+ inline BOOL IsReset( USHORT n ) const;
+ inline BOOL CanRead() const;
+ inline BOOL CanWrite() const;
+ inline BOOL IsModified() const;
+ inline BOOL IsConst() const;
+ inline BOOL IsHidden() const;
+ inline BOOL IsVisible() const;
+
+ virtual BOOL IsFixed() const;
+ virtual void SetModified( BOOL );
+
+ virtual SbxDataType GetType() const;
+ virtual SbxClassType GetClass() const;
+
+ virtual void Clear();
+
+ static SbxBase* Load( SvStream& );
+ static void Skip( SvStream& );
+ BOOL Store( SvStream& );
+ virtual BOOL LoadCompleted();
+ virtual BOOL StoreCompleted();
+
+ static SbxError GetError();
+ static void SetError( SbxError );
+ static BOOL IsError();
+ static void ResetError();
+
+ // Set the factory for Load/Store/Create
+ static void AddFactory( SbxFactory* );
+ static void RemoveFactory( SbxFactory* );
+
+ static SbxBase* Create( UINT16, UINT32=SBXCR_SBX );
+ static SbxObject* CreateObject( const String& );
+ // Sbx solution as replacement for SfxBroadcaster::Enable()
+ static void StaticEnableBroadcasting( BOOL bEnable );
+ static BOOL StaticIsEnabledBroadcasting( void );
+};
+
+#ifndef SBX_BASE_DECL_DEFINED
+#define SBX_BASE_DECL_DEFINED
+SV_DECL_REF(SbxBase)
+#endif
+
+inline void SbxBase::SetFlags( USHORT n )
+{ DBG_CHKTHIS( SbxBase, 0 ); nFlags = n; }
+
+inline USHORT SbxBase::GetFlags() const
+{ DBG_CHKTHIS( SbxBase, 0 ); return nFlags; }
+
+inline void SbxBase::SetFlag( USHORT n )
+{ DBG_CHKTHIS( SbxBase, 0 ); nFlags |= n; }
+
+inline void SbxBase::ResetFlag( USHORT n )
+{ DBG_CHKTHIS( SbxBase, 0 ); nFlags &= ~n; }
+
+inline BOOL SbxBase::IsSet( USHORT n ) const
+{ DBG_CHKTHIS( SbxBase, 0 ); return BOOL( ( nFlags & n ) != 0 ); }
+
+inline BOOL SbxBase::IsReset( USHORT n ) const
+{ DBG_CHKTHIS( SbxBase, 0 ); return BOOL( ( nFlags & n ) == 0 ); }
+
+inline BOOL SbxBase::CanRead() const
+{ DBG_CHKTHIS( SbxBase, 0 ); return IsSet( SBX_READ ); }
+
+inline BOOL SbxBase::CanWrite() const
+{ DBG_CHKTHIS( SbxBase, 0 ); return IsSet( SBX_WRITE ); }
+
+inline BOOL SbxBase::IsModified() const
+{ DBG_CHKTHIS( SbxBase, 0 ); return IsSet( SBX_MODIFIED ); }
+
+inline BOOL SbxBase::IsConst() const
+{ DBG_CHKTHIS( SbxBase, 0 ); return IsSet( SBX_CONST ); }
+
+inline BOOL SbxBase::IsHidden() const
+{ DBG_CHKTHIS( SbxBase, 0 ); return IsSet( SBX_HIDDEN ); }
+
+inline BOOL SbxBase::IsVisible() const
+{ DBG_CHKTHIS( SbxBase, 0 ); return IsReset( SBX_INVISIBLE ); }
+
+#endif
diff --git a/basic/inc/basic/sbxdef.hxx b/basic/inc/basic/sbxdef.hxx
new file mode 100644
index 000000000000..89322be776f9
--- /dev/null
+++ b/basic/inc/basic/sbxdef.hxx
@@ -0,0 +1,384 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+
+#ifndef _SBXDEF_HXX
+#define _SBXDEF_HXX
+
+
+#ifndef __RSC
+#ifndef _SOLAR_H
+#include <tools/solar.h>
+#endif
+#include "tools/errcode.hxx"
+
+#ifndef _SBX_CLASS_TYPE
+#define _SBX_CLASS_TYPE
+
+enum SbxClassType { // SBX-class-IDs (order is important!)
+ SbxCLASS_DONTCARE = 1, // don't care (search, not 0 due to StarBASIC)
+ SbxCLASS_ARRAY, // Array of SbxVariables
+ SbxCLASS_VALUE, // simple value
+ SbxCLASS_VARIABLE, // Variable (from here there is Broadcaster)
+ SbxCLASS_METHOD, // Method (Function or Sub)
+ SbxCLASS_PROPERTY, // Property
+ SbxCLASS_OBJECT // Object
+};
+
+#endif
+
+#ifndef _SBX_DATA_TYPE
+#define _SBX_DATA_TYPE
+
+enum SbxDataType {
+ SbxEMPTY = 0, // * Uninitialized
+ SbxNULL = 1, // * Contains no valid data
+ SbxINTEGER = 2, // * Integer (INT16)
+ SbxLONG = 3, // * Long integer (INT32)
+ SbxSINGLE = 4, // * Single-precision floating point number (float)
+ SbxDOUBLE = 5, // * Double-precision floating point number (double)
+ SbxCURRENCY = 6, // Currency (INT64)
+ SbxDATE = 7, // * Date (double)
+ SbxSTRING = 8, // * String (StarView)
+ SbxOBJECT = 9, // * SbxBase object pointer
+ SbxERROR = 10, // * Error (UINT16)
+ SbxBOOL = 11, // * Boolean (0 or -1)
+ SbxVARIANT = 12, // * Anzeige fuer varianten Datentyp
+ SbxDATAOBJECT = 13, // * Common data object w/o ref count
+
+ SbxCHAR = 16, // * signed char
+ SbxBYTE = 17, // * unsigned char
+ SbxUSHORT = 18, // * unsigned short (UINT16)
+ SbxULONG = 19, // * unsigned long (UINT32)
+ SbxLONG64 = 20, // signed 64-bit int
+ SbxULONG64 = 21, // unsigned 64-bit int
+ SbxINT = 22, // * signed machine-dependent int
+ SbxUINT = 23, // * unsigned machine-dependent int
+ SbxVOID = 24, // * no value (= SbxEMPTY)
+ SbxHRESULT = 25, // HRESULT
+ SbxPOINTER = 26, // generic pointer
+ SbxDIMARRAY = 27, // dimensioned array
+ SbxCARRAY = 28, // C style array
+ SbxUSERDEF = 29, // user defined
+ SbxLPSTR = 30, // * null terminated string
+ SbxLPWSTR = 31, // wide null terminated string
+ SbxCoreSTRING = 32, // AB 10.4.97, fuer GetCoreString(), nur zum Konvertieren
+ SbxWSTRING = 33, // AB 4.10.2000 Reimplemented for backwards compatibility (#78919)
+ SbxWCHAR = 34, // AB 4.10.2000 Reimplemented for backwards compatibility (#78919)
+ SbxSALINT64 = 35, // for UNO hyper
+ SbxSALUINT64 = 36, // for UNO unsigned hyper
+ SbxDECIMAL = 37, // for UNO/automation Decimal
+
+ SbxVECTOR = 0x1000, // simple counted array
+ SbxARRAY = 0x2000, // array
+ SbxBYREF = 0x4000, // access by reference
+
+ SbxSV1 = 128, // first defined data type for StarView
+ SbxMEMORYSTREAM, // SvMemoryStream
+ SbxSTORAGE, // SvStorage
+
+ SbxUSER1 = 256, // first user defined data type
+ SbxUSERn = 2047 // last user defined data type
+};
+
+const UINT32 SBX_TYPE_WITH_EVENTS_FLAG = 0x10000;
+const UINT32 SBX_FIXED_LEN_STRING_FLAG = 0x10000; // same value as above as no conflict possible
+
+#endif
+
+#ifndef _SBX_OPERATOR
+#define _SBX_OPERATOR
+
+enum SbxOperator {
+ // Arithmetical:
+ SbxEXP, // this ^ var
+ SbxMUL, // this * var
+ SbxDIV, // this / var
+ SbxMOD, // this MOD var
+ SbxPLUS, // this + var
+ SbxMINUS, // this - var
+ SbxNEG, // -this (var is ignored)
+ SbxIDIV, // this / var (both operands max. INT32!)
+ // Boolean operators (max INT32!):
+ SbxAND, // this & var
+ SbxOR, // this | var
+ SbxXOR, // this ^ var
+ SbxEQV, // ~this ^ var
+ SbxIMP, // ~this | var
+ SbxNOT, // ~this (var is ignored)
+ // String-concat:
+ SbxCAT, // this & var
+ // Comparisons:
+ SbxEQ, // this = var
+ SbxNE, // this <> var
+ SbxLT, // this < var
+ SbxGT, // this > var
+ SbxLE, // this <= var
+ SbxGE // this >= var
+};
+
+#endif
+
+#ifndef _SBX_NAME_TYPE
+#define _SBX_NAME_TYPE
+
+enum SbxNameType { // Type of the questioned name of a variable
+ SbxNAME_NONE, // plain name
+ SbxNAME_SHORT, // Name(A,B)
+ SbxNAME_SHORT_TYPES, // Name%(A%,B$)
+ SbxNAME_LONG_TYPES // Name(A As Integer, B As String) As Integer
+};
+
+#endif
+
+// AB: 20.3.96: New error messages
+typedef ULONG SbxError; // Preserve old type
+
+#endif
+// von #ifndef __RSC
+
+
+// New error codes per define
+#define ERRCODE_SBX_OK ERRCODE_NONE // processed
+#define ERRCODE_SBX_SYNTAX (1UL | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_COMPILER) // Syntaxerror in parser (where else could syntax errors happen? ;-)
+#define ERRCODE_SBX_NOTIMP (2UL | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_NOTSUPPORTED) // not possible
+#define ERRCODE_SBX_OVERFLOW (3UL | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_SBX) // overflow
+#define ERRCODE_SBX_BOUNDS (4UL | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_SBX) // Invalid array index
+#define ERRCODE_SBX_ZERODIV (5UL | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_SBX) // Division by zero
+#define ERRCODE_SBX_CONVERSION (6UL | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_SBX) // wrong data type
+#define ERRCODE_SBX_BAD_PARAMETER (7UL | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME) // invalid Parameter
+#define ERRCODE_SBX_PROC_UNDEFINED (8UL | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME) // BASIC-Sub or Function undefined
+#define ERRCODE_SBX_ERROR (9UL | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_UNKNOWN) // other object-related error
+#define ERRCODE_SBX_NO_OBJECT (10UL | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME) // Object variable unassigned
+#define ERRCODE_SBX_CANNOT_LOAD (11UL | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_CREATE) // Object cannot be loaded or initialized
+#define ERRCODE_SBX_BAD_INDEX (12UL | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_SBX) // Invalid object index
+#define ERRCODE_SBX_NO_ACTIVE_OBJECT (13UL | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_ACCESS) // Object ist not activated
+#define ERRCODE_SBX_BAD_PROP_VALUE (14UL | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME) // Bad property value
+#define ERRCODE_SBX_PROP_READONLY (15UL | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_READ) // Property is read only
+#define ERRCODE_SBX_PROP_WRITEONLY (16UL | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_WRITE) // Property is write only
+#define ERRCODE_SBX_INVALID_OBJECT (17UL | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_ACCESS) // Invalid object reference
+#define ERRCODE_SBX_NO_METHOD (18UL | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME) // Property oder Methode unbekannt
+#define ERRCODE_SBX_INVALID_USAGE_OBJECT (19UL | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_ACCESS) // Invalid object usage
+#define ERRCODE_SBX_NO_OLE (20UL | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_ACCESS) // No OLE-Object
+#define ERRCODE_SBX_BAD_METHOD (21UL | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME) // Method not supported
+#define ERRCODE_SBX_OLE_ERROR (22UL | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME) // OLE Automation Error
+#define ERRCODE_SBX_BAD_ACTION (23UL | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_NOTSUPPORTED) // Action not supported
+#define ERRCODE_SBX_NO_NAMED_ARGS (24UL | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME) // No named arguments
+#define ERRCODE_SBX_BAD_LOCALE (25UL | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_NOTSUPPORTED) // Locale settings not supported
+#define ERRCODE_SBX_NAMED_NOT_FOUND (26UL | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME) // Unknown named argument
+#define ERRCODE_SBX_NOT_OPTIONAL (27UL | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME) // Argument not optional
+#define ERRCODE_SBX_WRONG_ARGS (28UL | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_SBX) // Invalid number of arguments
+#define ERRCODE_SBX_NOT_A_COLL (29UL | ERRCODE_AREA_SBX | \
+ ERRCODE_CLASS_RUNTIME) // Object contains no elements
+#define LAST_SBX_ERROR_ID 29UL
+
+
+// Less important for resources
+#ifndef __RSC
+
+// Map old codes to new ones
+#define SbxERR_OK ERRCODE_SBX_OK
+#define SbxERR_SYNTAX ERRCODE_SBX_SYNTAX
+#define SbxERR_NOTIMP ERRCODE_SBX_NOTIMP
+#define SbxERR_OVERFLOW ERRCODE_SBX_OVERFLOW
+#define SbxERR_BOUNDS ERRCODE_SBX_BOUNDS
+#define SbxERR_ZERODIV ERRCODE_SBX_ZERODIV
+#define SbxERR_CONVERSION ERRCODE_SBX_CONVERSION
+#define SbxERR_BAD_PARAMETER ERRCODE_SBX_BAD_PARAMETER
+#define SbxERR_PROC_UNDEFINED ERRCODE_SBX_PROC_UNDEFINED
+#define SbxERR_ERROR ERRCODE_SBX_ERROR
+#define SbxERR_NO_OBJECT ERRCODE_SBX_NO_OBJECT
+#define SbxERR_CANNOT_LOAD ERRCODE_SBX_CANNOT_LOAD
+#define SbxERR_BAD_INDEX ERRCODE_SBX_BAD_INDEX
+#define SbxERR_NO_ACTIVE_OBJECT ERRCODE_SBX_NO_ACTIVE_OBJECT
+#define SbxERR_BAD_PROP_VALUE ERRCODE_SBX_BAD_PROP_VALUE
+#define SbxERR_PROP_READONLY ERRCODE_SBX_PROP_READONLY
+#define SbxERR_PROP_WRITEONLY ERRCODE_SBX_PROP_WRITEONLY
+#define SbxERR_INVALID_OBJECT ERRCODE_SBX_INVALID_OBJECT
+#define SbxERR_NO_METHOD ERRCODE_SBX_NO_METHOD
+#define SbxERR_INVALID_USAGE_OBJECT ERRCODE_SBX_INVALID_USAGE_OBJECT
+#define SbxERR_NO_OLE ERRCODE_SBX_NO_OLE
+#define SbxERR_BAD_METHOD ERRCODE_SBX_BAD_METHOD
+#define SbxERR_OLE_ERROR ERRCODE_SBX_OLE_ERROR
+#define SbxERR_BAD_ACTION ERRCODE_SBX_BAD_ACTION
+#define SbxERR_NO_NAMED_ARGS ERRCODE_SBX_NO_NAMED_ARGS
+#define SbxERR_BAD_LOCALE ERRCODE_SBX_BAD_LOCALE
+#define SbxERR_NAMED_NOT_FOUND ERRCODE_SBX_NAMED_NOT_FOUND
+#define SbxERR_NOT_OPTIONAL ERRCODE_SBX_NOT_OPTIONAL
+#define SbxERR_WRONG_ARGS ERRCODE_SBX_WRONG_ARGS
+#define SbxERR_NOT_A_COLL ERRCODE_SBX_NOT_A_COLL
+
+
+/* Old codes with VB error codes
+enum SbxError { // Ergebnis einer Rechenoperation/Konversion
+ SbxERR_OK = 0, // durchgefuehrt
+ SbxERR_SYNTAX = 2, // Syntaxfehler im Parser
+ SbxERR_NOTIMP = 5, // nicht moeglich
+ SbxERR_OVERFLOW = 6, // Ueberlauf
+ SbxERR_BOUNDS = 9, // Array-Index ungueltig
+ SbxERR_ZERODIV = 11, // Division durch Null
+ SbxERR_CONVERSION = 13, // falscher Datentyp
+ SbxERR_BAD_PARAMETER = 14, // ungltiger Parameter
+ SbxERR_PROC_UNDEFINED = 35, // BASIC-Sub oder Function undefiniert
+ SbxERR_ERROR = 51, // andere Fehler
+ // Objektbezogene Fehler
+ SbxERR_NO_OBJECT = 91, // Objektvariable nicht belegt
+ SbxERR_CANNOT_LOAD = 323, // Objekt kann nicht geladen/eingerichtet werden
+ SbxERR_BAD_INDEX = 341, // Invalid object index
+ SbxERR_NO_ACTIVE_OBJECT=366,// Objekt ist nicht aktiviert
+ SbxERR_BAD_PROP_VALUE = 380,// Bad property value
+ SbxERR_PROP_READONLY = 382, // Property is read only
+ SbxERR_PROP_WRITEONLY = 394,// Property is write only
+ SbxERR_INVALID_OBJECT = 420,// Invalid object reference
+ SbxERR_NO_METHOD = 423, // Property oder Methode unbekannt
+ SbxERR_INVALID_USAGE_OBJECT=425,// Falsche Verwendung eines Objekts
+ SbxERR_NO_OLE = 430, // Kein OLE-Objekt
+ SbxERR_BAD_METHOD = 438, // Methode nicht untersttzt
+ SbxERR_OLE_ERROR = 440, // OLE Automation-Fehler
+ SbxERR_BAD_ACTION = 445, // Aktion nicht untersttzt
+ SbxERR_NO_NAMED_ARGS = 446, // Keine benannten Argumente
+ SbxERR_BAD_LOCALE = 447, // Laenderspezifische Einstellungen nicht untersttzt
+ SbxERR_NAMED_NOT_FOUND = 448,// Unbekanntes benanntes Argument
+ SbxERR_NOT_OPTIONAL = 449, // Argument nicht optional
+ SbxERR_WRONG_ARGS = 450, // Falsche Zahl von Argumenten
+ SbxERR_NOT_A_COLL = 451 // Objekt enthlt keine Elemente
+};
+*/
+
+// Flag-Bits:
+#define SBX_READ 0x0001 // Read permission
+#define SBX_WRITE 0x0002 // Write permission
+#define SBX_READWRITE 0x0003 // Read/Write permission
+#define SBX_DONTSTORE 0x0004 // Don't store object
+#define SBX_MODIFIED 0x0008 // Object was changed
+#define SBX_FIXED 0x0010 // Fixed data type (SbxVariable)
+#define SBX_CONST 0x0020 // Definition of const value
+#define SBX_OPTIONAL 0x0040 // Parameter is optional
+#define SBX_HIDDEN 0x0080 // Element is invisible
+#define SBX_INVISIBLE 0x0100 // Element is not found by Find()
+#define SBX_EXTSEARCH 0x0200 // Object is searched completely
+#define SBX_EXTFOUND 0x0400 // Variable was found through extended search
+#define SBX_GBLSEARCH 0x0800 // Global search via Parents
+#define SBX_RESERVED 0x1000 // reserved
+#define SBX_PRIVATE 0x1000 // #110004, #112015, cannot conflict with SBX_RESERVED
+#define SBX_NO_BROADCAST 0x2000 // No broadcast on Get/Put
+#define SBX_REFERENCE 0x4000 // Parameter is Reference (DLL-call)
+#define SBX_NO_MODIFY 0x8000 // SetModified is suppressed
+#define SBX_WITH_EVENTS 0x0080 // Same value as unused SBX_HIDDEN
+
+// Broadcaster-IDs:
+#define SBX_HINT_DYING SFX_HINT_DYING
+#define SBX_HINT_DATAWANTED SFX_HINT_USER00
+#define SBX_HINT_DATACHANGED SFX_HINT_DATACHANGED
+#define SBX_HINT_CONVERTED SFX_HINT_USER01
+#define SBX_HINT_INFOWANTED SFX_HINT_USER02
+#define SBX_HINT_OBJECTCHANGED SFX_HINT_USER03
+
+// List of all creators for Load/Store
+
+#define SBXCR_SBX 0x20584253 // SBX(blank)
+
+// List of predefined SBX-IDs. New SBX-IDs must be precisly defined so that
+// they are unique within the Stream and appropriate Factory.
+
+#define SBXID_VALUE 0x4E4E // NN: SbxValue
+#define SBXID_VARIABLE 0x4156 // VA: SbxVariable
+#define SBXID_ARRAY 0x5241 // AR: SbxArray
+#define SBXID_DIMARRAY 0x4944 // DI: SbxDimArray
+#define SBXID_OBJECT 0x424F // OB: SbxObject
+#define SBXID_COLLECTION 0x4F43 // CO: SbxCollection
+#define SBXID_FIXCOLLECTION 0x4346 // FC: SbxStdCollection
+#define SBXID_METHOD 0x454D // ME: SbxMethod
+#define SBXID_PROPERTY 0x5250 // PR: SbxProperty
+
+// StarBASIC restricts the base data type to different intervals.
+// These intervals are fixed due to portability and independent
+// of the implementation. Only type double is greedy and takes
+// what it gets.
+
+#define SbxMAXCHAR ((sal_Unicode)65535)
+#define SbxMINCHAR (0)
+#define SbxMAXBYTE ( 255)
+#define SbxMAXINT ( 32767)
+#define SbxMININT (-32768)
+#define SbxMAXUINT ((UINT16) 65535)
+#define SbxMAXLNG ( 2147483647)
+#define SbxMINLNG ((INT32)(-2147483647-1))
+#define SbxMAXULNG ((UINT32) 0xffffffff)
+
+#define SbxMAXSALINT64 SAL_MAX_INT64
+#define SbxMINSALINT64 SAL_MIN_INT64
+#define SbxMAXSALUINT64 SAL_MAX_UINT64
+
+#define SbxMAXSNG ( 3.402823e+38)
+#define SbxMINSNG (-3.402823e+38)
+#define SbxMAXSNG2 ( 1.175494351e-38)
+#define SbxMINSNG2 (-1.175494351e-38)
+#define SbxMAXCURR ( 922337203685477.5807)
+#define SbxMINCURR (-922337203685477.5808)
+#define CURRENCY_FACTOR 10000
+#define SbxMAXCURRLNG (SbxMAXLNG/CURRENCY_FACTOR)
+#define SbxMINCURRLNG (SbxMINLNG/CURRENCY_FACTOR)
+
+// Max valid offset index of a Sbx-Array (due to 64K limit)
+#define SBX_MAXINDEX 0x3FF0
+#define SBX_MAXINDEX32 SbxMAXLNG
+
+// The numeric values of TRUE and FALSE
+enum SbxBOOL { SbxFALSE = 0, SbxTRUE = -1 };
+
+#endif // __RSC
+
+#endif
diff --git a/basic/inc/basic/sbxfac.hxx b/basic/inc/basic/sbxfac.hxx
new file mode 100644
index 000000000000..f72cebd8d979
--- /dev/null
+++ b/basic/inc/basic/sbxfac.hxx
@@ -0,0 +1,48 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef __SBX_SBX_FACTORY_HXX
+#define __SBX_SBX_FACTORY_HXX
+
+#include <basic/sbxdef.hxx>
+
+class SbxBase;
+class SbxObject;
+class String;
+class UniString;
+
+class SbxFactory
+{
+ BOOL bHandleLast; // TRUE: Factory is asked at last because of its expensiveness
+public:
+ SbxFactory( BOOL bLast=FALSE ) { bHandleLast = bLast; }
+ BOOL IsHandleLast( void ) { return bHandleLast; }
+ virtual SbxBase* Create( UINT16 nSbxId, UINT32 = SBXCR_SBX );
+ virtual SbxObject* CreateObject( const String& );
+};
+
+#endif
diff --git a/basic/inc/basic/sbxform.hxx b/basic/inc/basic/sbxform.hxx
new file mode 100644
index 000000000000..0e8ab2466271
--- /dev/null
+++ b/basic/inc/basic/sbxform.hxx
@@ -0,0 +1,181 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _SBXFORM_HXX
+#define _SBXFORM_HXX
+
+//====================================================================
+// Implementation class for Basic command: Format$( d,formatStr )
+//====================================================================
+/*
+ Grammar of format string (a try):
+ -----------------------------------------------
+
+ format_string := {\special_char} general_format | scientific_format {\special_char} {;format_string}
+ general_format := {#[,]}{0[,]}[.{0}{#}]
+ scientific_format := {0}[.{0}{#}](e | E)(+ | -){#}{0}
+
+ percent_char := '%'
+ special_char := \char | + | - | ( | ) | $ | space_char
+ char := all_ascii_chars
+ space_char := ' '
+
+ {} repeated multiple times (incl. zero times)
+ [] exactly one or zero times
+ () parenthesis, e.g. (e | E) means e or E times
+
+ Additional predefined formats for the format string:
+ "General Number"
+ "Currency"
+ "Fixed"
+ "Standard"
+ "Percent"
+ "Scientific"
+ "Yes/No"
+ "True/False"
+ "On/Off"
+
+ Note: invalid format string are ignored just as in VisualBasic, the output is
+ probably 'undefined'. ASCII letters are outputted directly.
+
+ Constraints in VisualBasic:
+ - the exponent (scientific syntax) has a maximum of three digits!
+
+ Constraints of new implementation:
+ - the '+' sign is not allowed as wildcard in the mantissa
+
+ TODO:
+ - Date formatting
+ Wildcards are: 'h', 'm', 's', 'y'
+ predefined String-Constants/Commands:
+ "AMPM", "Long Date", "Long Time"
+*/
+
+/*
+ There are two possibilities to get the number of digits of a number:
+
+ a) use sprintf()
+ b) use log10() and pow() digit
+*/
+#define _with_sprintf // use a)
+
+#include <tools/string.hxx>
+
+class SbxBasicFormater {
+ public:
+ // Constructor takes signs for decimal point, thousand separation sign
+ // and necessary resource strings.
+ SbxBasicFormater( sal_Unicode _cDecPoint, sal_Unicode _cThousandSep,
+ String _sOnStrg,
+ String _sOffStrg,
+ String _sYesStrg,
+ String _sNoStrg,
+ String _sTrueStrg,
+ String _sFalseStrg,
+ String _sCurrencyStrg,
+ String _sCurrencyFormatStrg );
+
+ /* Basic command: Format$( number,format-string )
+
+ Parameter:
+ dNumber : number to be formated
+ sFormatStrg : the Format-String, e.g. ###0.0###
+
+ Return value:
+ String containing the formatted output
+ */
+ String BasicFormat( double dNumber, String sFormatStrg );
+ String BasicFormatNull( String sFormatStrg );
+
+ static BOOL isBasicFormat( String sFormatStrg );
+
+ private:
+ //*** some helper methods ***
+ //void ShowError( char *sErrMsg );
+ inline void ShiftString( String& sStrg, USHORT nStartPos );
+ inline void StrAppendChar( String& sStrg, sal_Unicode ch );
+ void AppendDigit( String& sStrg, short nDigit );
+ void LeftShiftDecimalPoint( String& sStrg );
+ void StrRoundDigit( String& sStrg, short nPos, BOOL& bOverflow );
+ void StrRoundDigit( String& sStrg, short nPos );
+ void ParseBack( String& sStrg, const String& sFormatStrg,
+ short nFormatPos );
+#ifdef _with_sprintf
+ // Methods for string conversion with sprintf():
+ void InitScan( double _dNum );
+ void InitExp( double _dNewExp );
+ short GetDigitAtPosScan( short nPos, BOOL& bFoundFirstDigit );
+ short GetDigitAtPosExpScan( double dNewExponent, short nPos,
+ BOOL& bFoundFirstDigit );
+ short GetDigitAtPosExpScan( short nPos, BOOL& bFoundFirstDigit );
+#else
+ // Methods for direct 'calculation' with log10() and pow():
+ short GetDigitAtPos( double dNumber, short nPos, double& dNextNumber,
+ BOOL& bFoundFirstDigit );
+ short RoundDigit( double dNumber );
+#endif
+ String GetPosFormatString( const String& sFormatStrg, BOOL & bFound );
+ String GetNegFormatString( const String& sFormatStrg, BOOL & bFound );
+ String Get0FormatString( const String& sFormatStrg, BOOL & bFound );
+ String GetNullFormatString( const String& sFormatStrg, BOOL & bFound );
+ short AnalyseFormatString( const String& sFormatStrg,
+ short& nNoOfDigitsLeft, short& nNoOfDigitsRight,
+ short& nNoOfOptionalDigitsLeft,
+ short& nNoOfExponentDigits,
+ short& nNoOfOptionalExponentDigits,
+ BOOL& bPercent, BOOL& bCurrency, BOOL& bScientific,
+ BOOL& bGenerateThousandSeparator,
+ short& nMultipleThousandSeparators );
+ void ScanFormatString( double dNumber, const String& sFormatStrg,
+ String& sReturnStrg, BOOL bCreateSign );
+
+ //*** Data ***
+ sal_Unicode cDecPoint; // sign for the decimal point
+ sal_Unicode cThousandSep; // sign for thousand delimiter
+ // Text for output:
+ String sOnStrg;
+ String sOffStrg;
+ String sYesStrg;
+ String sNoStrg;
+ String sTrueStrg;
+ String sFalseStrg;
+ String sCurrencyStrg;
+ String sCurrencyFormatStrg;
+
+ //*** temporary data for scan loop ***
+ //-----------------------------------------------
+ // String containing the number in scientific format
+ String sSciNumStrg;
+ // String containing the exponent of the number
+ String sNumExpStrg;
+ double dNum; // the number that is scanned
+ short nNumExp; // the exponent of the number
+ short nExpExp; // the number of digits in the exponent
+};
+
+#endif
+
diff --git a/basic/inc/basic/sbxmeth.hxx b/basic/inc/basic/sbxmeth.hxx
new file mode 100644
index 000000000000..5cc9af6f877a
--- /dev/null
+++ b/basic/inc/basic/sbxmeth.hxx
@@ -0,0 +1,62 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef __SBX_SBXMETHOD_HXX
+#define __SBX_SBXMETHOD_HXX
+
+#include <basic/sbxvar.hxx>
+
+class SbxMethodImpl;
+
+class SbxMethod : public SbxVariable
+{
+ SbxMethodImpl* mpSbxMethodImpl; // Impl data
+
+public:
+ SBX_DECL_PERSIST_NODATA(SBXCR_SBX,SBXID_METHOD,1);
+ TYPEINFO();
+ SbxMethod( const String& r, SbxDataType t )
+ : SbxVariable( t ) { SetName( r ); }
+ SbxMethod( const SbxMethod& r ) : SvRefBase( r ), SbxVariable( r ) {}
+ SbxMethod& operator=( const SbxMethod& r )
+ { SbxVariable::operator=( r ); return *this; }
+ BOOL Run( SbxValues* pValues = NULL );
+ virtual SbxClassType GetClass() const;
+};
+
+#ifndef __SBX_SBXMETHODREF_HXX
+#define __SBX_SBXMETHODREF_HXX
+
+#ifndef SBX_METHOD_DECL_DEFINED
+#define SBX_METHOD_DECL_DEFINED
+SV_DECL_REF(SbxMethod)
+#endif
+SV_IMPL_REF(SbxMethod)
+
+#endif
+#endif
+
diff --git a/basic/inc/basic/sbxmstrm.hxx b/basic/inc/basic/sbxmstrm.hxx
new file mode 100644
index 000000000000..ebd6a2b93484
--- /dev/null
+++ b/basic/inc/basic/sbxmstrm.hxx
@@ -0,0 +1,49 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _SBXMSTRM_HXX
+#define _SBXMSTRM_HXX 1
+
+#include <tools/stream.hxx>
+#include <basic/sbxdef.hxx>
+#include <basic/sbxcore.hxx>
+
+SV_DECL_REF(SbxMemoryStream)
+
+class SbxMemoryStream : public SbxBase, public SvMemoryStream
+{
+ public:
+ SbxMemoryStream(ULONG nInitSize_=512, ULONG nResize_=64) :
+ SvMemoryStream(nInitSize_,nResize_) {}
+ ~SbxMemoryStream();
+
+ virtual SbxDataType GetType() const;
+};
+
+SV_IMPL_REF(SbxMemoryStream)
+
+#endif
diff --git a/basic/inc/basic/sbxobj.hxx b/basic/inc/basic/sbxobj.hxx
new file mode 100644
index 000000000000..a1ed962502cd
--- /dev/null
+++ b/basic/inc/basic/sbxobj.hxx
@@ -0,0 +1,125 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _SBX_SBXOBJECT_HXX
+#define _SBX_SBXOBJECT_HXX
+
+#include <svl/lstner.hxx>
+#include <basic/sbxvar.hxx>
+
+///////////////////////////////////////////////////////////////////////////
+
+class SbxProperty;
+class SvDispatch;
+
+class SbxObjectImpl;
+
+class SbxObject : public SbxVariable, public SfxListener
+{
+ SbxObjectImpl* mpSbxObjectImpl; // Impl data
+
+ SbxArray* FindVar( SbxVariable*, USHORT& );
+ // AB 23.3.1997, special method for VCPtrRemove (see below)
+ SbxArray* VCPtrFindVar( SbxVariable*, USHORT& );
+protected:
+ SbxArrayRef pMethods; // Methods
+ SbxArrayRef pProps; // Properties
+ SbxArrayRef pObjs; // Objects
+ SbxProperty* pDfltProp; // Default-Property
+ String aClassName; // Classname
+ String aDfltPropName;
+ virtual BOOL LoadData( SvStream&, USHORT );
+ virtual BOOL StoreData( SvStream& ) const;
+ virtual ~SbxObject();
+ virtual void SFX_NOTIFY( SfxBroadcaster& rBC, const TypeId& rBCType,
+ const SfxHint& rHint, const TypeId& rHintType );
+public:
+ SBX_DECL_PERSIST_NODATA(SBXCR_SBX,SBXID_OBJECT,1);
+ TYPEINFO();
+ SbxObject( const String& rClassname );
+ SbxObject( const SbxObject& );
+ SbxObject& operator=( const SbxObject& );
+ virtual SbxDataType GetType() const;
+ virtual SbxClassType GetClass() const;
+ virtual void Clear();
+
+ virtual BOOL IsClass( const String& ) const;
+ const String& GetClassName() const { return aClassName; }
+ void SetClassName( const String &rNew ) { aClassName = rNew; }
+ // Default-Property
+ SbxProperty* GetDfltProperty();
+ void SetDfltProperty( const String& r );
+ void SetDfltProperty( SbxProperty* );
+ // Search for an element
+ virtual SbxVariable* FindUserData( UINT32 nUserData );
+ virtual SbxVariable* Find( const String&, SbxClassType );
+ SbxVariable* FindQualified( const String&, SbxClassType );
+ // Quick-Call-Interface for Methods
+ virtual BOOL Call( const String&, SbxArray* = NULL );
+ // Execution of DDE-Commands
+ SbxVariable* Execute( const String& );
+ // Manage elements
+ virtual BOOL GetAll( SbxClassType ) { return TRUE; }
+ SbxVariable* Make( const String&, SbxClassType, SbxDataType );
+ virtual SbxObject* MakeObject( const String&, const String& );
+ virtual void Insert( SbxVariable* );
+ // AB 23.4.1997, Optimization, Insertion without check for duplicate Entries and
+ // without Broadcasts, only used in SO2/auto.cxx
+ void QuickInsert( SbxVariable* );
+ // AB 23.3.1997, Special-Method, allow corresponding controls
+ void VCPtrInsert( SbxVariable* );
+ virtual void Remove( const String&, SbxClassType );
+ virtual void Remove( SbxVariable* );
+ // AB 23.3.1997, deletion per pointer for controls (duplicate names!)
+ void VCPtrRemove( SbxVariable* );
+ void SetPos( SbxVariable*, USHORT );
+
+ // Macro-Recording
+ virtual String GenerateSource( const String &rLinePrefix,
+ const SbxObject *pRelativeTo );
+ // Direct access on arrays
+ SbxArray* GetMethods() { return pMethods; }
+ SbxArray* GetProperties() { return pProps; }
+ SbxArray* GetObjects() { return pObjs; }
+ // Hooks
+ virtual SvDispatch* GetSvDispatch();
+ // Debugging
+ void Dump( SvStream&, BOOL bDumpAll=FALSE );
+
+ static void GarbageCollection( ULONG nObjects = 0 /* ::= all */ );
+};
+
+#ifndef __SBX_SBXOBJECTREF_HXX
+
+#ifndef SBX_OBJECT_DECL_DEFINED
+#define SBX_OBJECT_DECL_DEFINED
+SV_DECL_REF(SbxObject)
+#endif
+SV_IMPL_REF(SbxObject)
+
+#endif /* __SBX_SBXOBJECTREF_HXX */
+#endif /* _SBX_SBXOBJECT_HXX */
diff --git a/basic/inc/basic/sbxprop.hxx b/basic/inc/basic/sbxprop.hxx
new file mode 100644
index 000000000000..467b86ee604c
--- /dev/null
+++ b/basic/inc/basic/sbxprop.hxx
@@ -0,0 +1,61 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef __SBX_SBXPROPERTY_HXX
+#define __SBX_SBXPROPERTY_HXX
+
+#include <basic/sbxvar.hxx>
+
+class SbxPropertyImpl;
+
+class SbxProperty : public SbxVariable
+{
+ SbxPropertyImpl* mpSbxPropertyImpl; // Impl data
+
+public:
+ SBX_DECL_PERSIST_NODATA(SBXCR_SBX,SBXID_PROPERTY,1);
+ TYPEINFO();
+ SbxProperty( const String& r, SbxDataType t )
+ : SbxVariable( t ) { SetName( r ); }
+ SbxProperty( const SbxProperty& r ) : SvRefBase( r ), SbxVariable( r ) {}
+ SbxProperty& operator=( const SbxProperty& r )
+ { SbxVariable::operator=( r ); return *this; }
+ virtual SbxClassType GetClass() const;
+};
+
+#ifndef __SBX_SBXPROPERTYREF_HXX
+#define __SBX_SBXPROPERTYREF_HXX
+
+#ifndef SBX_PROPERTY_DECL_DEFINED
+#define SBX_PROPERTY_DECL_DEFINED
+SV_DECL_REF(SbxProperty)
+#endif
+SV_IMPL_REF(SbxProperty)
+
+#endif
+
+#endif
diff --git a/basic/inc/basic/sbxvar.hxx b/basic/inc/basic/sbxvar.hxx
new file mode 100644
index 000000000000..0cddcbdf8d17
--- /dev/null
+++ b/basic/inc/basic/sbxvar.hxx
@@ -0,0 +1,514 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _SBXVAR_HXX
+#define _SBXVAR_HXX
+
+#include <rtl/ustring.hxx>
+#include <tools/string.hxx>
+#include <com/sun/star/bridge/oleautomation/Decimal.hpp>
+#include <basic/sbxcore.hxx>
+
+#ifndef __SBX_64
+#define __SBX_64
+
+struct SbxINT64
+{
+ INT32 nHigh; UINT32 nLow;
+
+#if FALSE
+ SbxINT64() : nHigh( 0 ), nLow( 0 ) {}
+ SbxINT64( UINT8 n ) : nHigh( 0 ), nLow( n ) {}
+ SbxINT64( UINT16 n ) : nHigh( 0 ), nLow( n ) {}
+ SbxINT64( UINT32 n ) : nHigh( 0 ), nLow( n ) {}
+ SbxINT64( unsigned int n ) : nHigh( 0 ), nLow( n ) {}
+ SbxINT64( INT8 n ) : nHigh( n < 0 ? -1 : 0 ), nLow( n ) {}
+ SbxINT64( INT16 n ) : nHigh( n < 0 ? -1 : 0 ), nLow( n ) {}
+ SbxINT64( INT32 n ) : nHigh( n < 0 ? -1 : 0 ), nLow( n ) {}
+ SbxINT64( int n ) : nHigh( n < 0 ? -1 : 0 ), nLow( n ) {}
+ SbxINT64( SbxINT64 &r ) : nHigh( r.nHigh ), nLow( r.nLow ) {}
+
+ SbxINT64( BigInt &r );
+ SbxINT64( double n );
+#endif
+ void CHS()
+ {
+ nLow ^= (UINT32)-1;
+ nHigh ^= -1;
+ nLow++;
+ if( !nLow )
+ nHigh++;
+ }
+
+ // blc/os2i do not like operator =
+ void Set(double n)
+ {
+ if( n >= 0 )
+ {
+ nHigh = (INT32)(n / (double)4294967296.0);
+ nLow = (UINT32)(n - ((double)nHigh * (double)4294967296.0) + 0.5);
+ }
+ else {
+ nHigh = (INT32)(-n / (double)4294967296.0);
+ nLow = (UINT32)(-n - ((double)nHigh * (double)4294967296.0) + 0.5);
+ CHS();
+ }
+ }
+ void Set(INT32 n) { nHigh = n < 0 ? -1 : 0; nLow = n; }
+
+ void SetMax() { nHigh = 0x7FFFFFFF; nLow = 0xFFFFFFFF; }
+ void SetMin() { nHigh = 0x80000000; nLow = 0x00000000; }
+ void SetNull() { nHigh = 0x00000000; nLow = 0x00000000; }
+
+ int operator ! () const { return !nHigh && !nLow; }
+
+ SbxINT64 &operator -= ( const SbxINT64 &r );
+ SbxINT64 &operator += ( const SbxINT64 &r );
+ SbxINT64 &operator /= ( const SbxINT64 &r );
+ SbxINT64 &operator %= ( const SbxINT64 &r );
+ SbxINT64 &operator *= ( const SbxINT64 &r );
+ SbxINT64 &operator &= ( const SbxINT64 &r );
+ SbxINT64 &operator |= ( const SbxINT64 &r );
+ SbxINT64 &operator ^= ( const SbxINT64 &r );
+
+ friend SbxINT64 operator - ( const SbxINT64 &l, const SbxINT64 &r );
+ friend SbxINT64 operator + ( const SbxINT64 &l, const SbxINT64 &r );
+ friend SbxINT64 operator / ( const SbxINT64 &l, const SbxINT64 &r );
+ friend SbxINT64 operator % ( const SbxINT64 &l, const SbxINT64 &r );
+ friend SbxINT64 operator * ( const SbxINT64 &l, const SbxINT64 &r );
+ friend SbxINT64 operator & ( const SbxINT64 &l, const SbxINT64 &r );
+ friend SbxINT64 operator | ( const SbxINT64 &l, const SbxINT64 &r );
+ friend SbxINT64 operator ^ ( const SbxINT64 &l, const SbxINT64 &r );
+
+ friend SbxINT64 operator - ( const SbxINT64 &r );
+ friend SbxINT64 operator ~ ( const SbxINT64 &r );
+
+ static double GetMin() { return ((double)0x7FFFFFFF*(double)4294967296.0
+ + (double)0xFFFFFFFF)
+ / CURRENCY_FACTOR; }
+ static double GetMax() { return ((double)0x80000000*(double)4294967296.0
+ + (double)0xFFFFFFFF)
+ / CURRENCY_FACTOR; }
+};
+
+struct SbxUINT64
+{
+ UINT32 nHigh; UINT32 nLow;
+ void Set(double n)
+ {
+ nHigh = (UINT32)(n / (double)4294967296.0);
+ nLow = (UINT32)(n - ((double)nHigh * (double)4294967296.0));
+ }
+
+ void Set(UINT32 n) { nHigh = 0; nLow = n; }
+
+ void SetMax() { nHigh = 0xFFFFFFFF; nLow = 0xFFFFFFFF; }
+ void SetMin() { nHigh = 0x00000000; nLow = 0x00000000; }
+ void SetNull() { nHigh = 0x00000000; nLow = 0x00000000; }
+
+ int operator ! () const { return !nHigh && !nLow; }
+
+ SbxUINT64 &operator -= ( const SbxUINT64 &r );
+ SbxUINT64 &operator += ( const SbxUINT64 &r );
+ SbxUINT64 &operator /= ( const SbxUINT64 &r );
+ SbxUINT64 &operator %= ( const SbxUINT64 &r );
+ SbxUINT64 &operator *= ( const SbxUINT64 &r );
+ SbxUINT64 &operator &= ( const SbxUINT64 &r );
+ SbxUINT64 &operator |= ( const SbxUINT64 &r );
+ SbxUINT64 &operator ^= ( const SbxUINT64 &r );
+
+ friend SbxUINT64 operator - ( const SbxUINT64 &l, const SbxUINT64 &r );
+ friend SbxUINT64 operator + ( const SbxUINT64 &l, const SbxUINT64 &r );
+ friend SbxUINT64 operator / ( const SbxUINT64 &l, const SbxUINT64 &r );
+ friend SbxUINT64 operator % ( const SbxUINT64 &l, const SbxUINT64 &r );
+ friend SbxUINT64 operator * ( const SbxUINT64 &l, const SbxUINT64 &r );
+ friend SbxUINT64 operator & ( const SbxUINT64 &l, const SbxUINT64 &r );
+ friend SbxUINT64 operator | ( const SbxUINT64 &l, const SbxUINT64 &r );
+ friend SbxUINT64 operator ^ ( const SbxUINT64 &l, const SbxUINT64 &r );
+
+ friend SbxUINT64 operator ~ ( const SbxUINT64 &r );
+};
+
+#endif
+
+#ifndef __SBX_SBXVALUES_HXX
+#define __SBX_SBXVALUES_HXX
+
+class BigInt;
+class SbxDecimal;
+
+struct SbxValues
+{
+ union {
+ sal_Unicode nChar;
+ BYTE nByte;
+ INT16 nInteger;
+ INT32 nLong;
+ UINT16 nUShort;
+ UINT32 nULong;
+ float nSingle;
+ double nDouble;
+ SbxINT64 nLong64;
+ SbxUINT64 nULong64;
+ sal_Int64 nInt64;
+ sal_uInt64 uInt64;
+ int nInt;
+ unsigned int nUInt;
+ ::rtl::OUString* pOUString;
+ SbxDecimal* pDecimal;
+
+ SbxBase* pObj;
+ sal_Unicode* pChar;
+ BYTE* pByte;
+ INT16* pInteger;
+ INT32* pLong;
+ UINT16* pUShort;
+ UINT32* pULong;
+ float* pSingle;
+ double* pDouble;
+ SbxINT64* pLong64;
+ SbxUINT64* pULong64;
+ sal_Int64* pnInt64;
+ sal_uInt64* puInt64;
+ int* pInt;
+ unsigned int* pUInt;
+ void* pData;
+ };
+ SbxDataType eType;
+
+ SbxValues(): pData( NULL ), eType(SbxEMPTY) {}
+ SbxValues( SbxDataType e ): eType(e) {}
+ SbxValues( char _nChar ): nChar( _nChar ), eType(SbxCHAR) {}
+ SbxValues( BYTE _nByte ): nByte( _nByte ), eType(SbxBYTE) {}
+ SbxValues( short _nInteger ): nInteger( _nInteger ), eType(SbxINTEGER ) {}
+ SbxValues( long _nLong ): nLong( _nLong ), eType(SbxLONG) {}
+ SbxValues( USHORT _nUShort ): nUShort( _nUShort ), eType(SbxUSHORT) {}
+ SbxValues( ULONG _nULong ): nULong( _nULong ), eType(SbxULONG) {}
+ SbxValues( float _nSingle ): nSingle( _nSingle ), eType(SbxSINGLE) {}
+ SbxValues( double _nDouble ): nDouble( _nDouble ), eType(SbxDOUBLE) {}
+ SbxValues( int _nInt ): nInt( _nInt ), eType(SbxINT) {}
+ SbxValues( unsigned int _nUInt ): nUInt( _nUInt ), eType(SbxUINT) {}
+ SbxValues( const ::rtl::OUString* _pString ): pOUString( (::rtl::OUString*)_pString ), eType(SbxSTRING) {}
+ SbxValues( SbxBase* _pObj ): pObj( _pObj ), eType(SbxOBJECT) {}
+ SbxValues( sal_Unicode* _pChar ): pChar( _pChar ), eType(SbxLPSTR) {}
+ SbxValues( void* _pData ): pData( _pData ), eType(SbxPOINTER) {}
+ SbxValues( const BigInt &rBig );
+};
+
+#endif
+
+#ifndef __SBX_SBXVALUE
+#define __SBX_SBXVALUE
+
+struct SbxValues;
+
+class SbxValueImpl;
+
+class SbxValue : public SbxBase
+{
+ SbxValueImpl* mpSbxValueImplImpl; // Impl data
+
+ // #55226 Transport additional infos
+ SbxValue* TheRealValue( BOOL bObjInObjError ) const;
+ SbxValue* TheRealValue() const;
+protected:
+ SbxValues aData; // Data
+ ::rtl::OUString aPic; // Picture-String
+ String aToolString; // tool string copy
+
+ virtual void Broadcast( ULONG ); // Broadcast-Call
+ virtual ~SbxValue();
+ virtual BOOL LoadData( SvStream&, USHORT );
+ virtual BOOL StoreData( SvStream& ) const;
+public:
+ SBX_DECL_PERSIST_NODATA(SBXCR_SBX,SBXID_VALUE,1);
+ TYPEINFO();
+ SbxValue();
+ SbxValue( SbxDataType, void* = NULL );
+ SbxValue( const SbxValue& );
+ SbxValue& operator=( const SbxValue& );
+ virtual void Clear();
+ virtual BOOL IsFixed() const;
+
+ BOOL IsInteger() const { return BOOL( GetType() == SbxINTEGER ); }
+ BOOL IsLong() const { return BOOL( GetType() == SbxLONG ); }
+ BOOL IsSingle() const { return BOOL( GetType() == SbxSINGLE ); }
+ BOOL IsDouble() const { return BOOL( GetType() == SbxDOUBLE ); }
+ BOOL IsString() const { return BOOL( GetType() == SbxSTRING ); }
+ BOOL IsDate() const { return BOOL( GetType() == SbxDATE ); }
+ BOOL IsCurrency()const { return BOOL( GetType() == SbxCURRENCY ); }
+ BOOL IsObject() const { return BOOL( GetType() == SbxOBJECT ); }
+ BOOL IsDataObject()const{return BOOL( GetType() == SbxDATAOBJECT);}
+ BOOL IsBool() const { return BOOL( GetType() == SbxBOOL ); }
+ BOOL IsErr() const { return BOOL( GetType() == SbxERROR ); }
+ BOOL IsEmpty() const { return BOOL( GetType() == SbxEMPTY ); }
+ BOOL IsNull() const { return BOOL( GetType() == SbxNULL ); }
+ BOOL IsChar() const { return BOOL( GetType() == SbxCHAR ); }
+ BOOL IsByte() const { return BOOL( GetType() == SbxBYTE ); }
+ BOOL IsUShort() const { return BOOL( GetType() == SbxUSHORT ); }
+ BOOL IsULong() const { return BOOL( GetType() == SbxULONG ); }
+ BOOL IsInt() const { return BOOL( GetType() == SbxINT ); }
+ BOOL IsUInt() const { return BOOL( GetType() == SbxUINT ); }
+ BOOL IspChar() const { return BOOL( GetType() == SbxLPSTR ); }
+ BOOL IsNumeric() const;
+ BOOL IsNumericRTL() const; // #41692 Interface for Basic
+ BOOL ImpIsNumeric( BOOL bOnlyIntntl ) const; // Implementation
+
+ virtual SbxClassType GetClass() const;
+ virtual SbxDataType GetType() const;
+ SbxDataType GetFullType() const;
+ BOOL SetType( SbxDataType );
+
+ virtual BOOL Get( SbxValues& ) const;
+ BOOL GetNoBroadcast( SbxValues& );
+ const SbxValues& GetValues_Impl() const { return aData; }
+ virtual BOOL Put( const SbxValues& );
+
+ inline SbxValues * data() { return &aData; }
+
+ SbxINT64 GetCurrency() const;
+ SbxINT64 GetLong64() const;
+ SbxUINT64 GetULong64() const;
+ sal_Int64 GetInt64() const;
+ sal_uInt64 GetUInt64() const;
+ INT16 GetInteger() const;
+ INT32 GetLong() const;
+ float GetSingle() const;
+ double GetDouble() const;
+ double GetDate() const;
+ BOOL GetBool() const;
+ UINT16 GetErr() const;
+ const String& GetString() const;
+ const String& GetCoreString() const;
+ ::rtl::OUString GetOUString() const;
+ SbxDecimal* GetDecimal() const;
+ SbxBase* GetObject() const;
+ BOOL HasObject() const;
+ void* GetData() const;
+ sal_Unicode GetChar() const;
+ BYTE GetByte() const;
+ UINT16 GetUShort() const;
+ UINT32 GetULong() const;
+ int GetInt() const;
+
+ BOOL PutCurrency( const SbxINT64& );
+ BOOL PutLong64( const SbxINT64& );
+ BOOL PutULong64( const SbxUINT64& );
+ BOOL PutInt64( sal_Int64 );
+ BOOL PutUInt64( sal_uInt64 );
+ BOOL PutInteger( INT16 );
+ BOOL PutLong( INT32 );
+ BOOL PutSingle( float );
+ BOOL PutDouble( double );
+ BOOL PutDate( double );
+ BOOL PutBool( BOOL );
+ BOOL PutErr( USHORT );
+ BOOL PutStringExt( const ::rtl::OUString& ); // with extended analysis (International, "TRUE"/"FALSE")
+ BOOL PutString( const ::rtl::OUString& );
+ BOOL PutString( const sal_Unicode* ); // Type = SbxSTRING
+ BOOL PutpChar( const sal_Unicode* ); // Type = SbxLPSTR
+ BOOL PutDecimal( SbxDecimal* pDecimal );
+ BOOL PutObject( SbxBase* );
+ BOOL PutData( void* );
+ BOOL PutChar( sal_Unicode );
+ BOOL PutByte( BYTE );
+ BOOL PutUShort( UINT16 );
+ BOOL PutULong( UINT32 );
+ BOOL PutInt( int );
+ BOOL PutEmpty();
+ BOOL PutNull();
+
+ // Special decimal methods
+ BOOL PutDecimal( com::sun::star::bridge::oleautomation::Decimal& rAutomationDec );
+ BOOL fillAutomationDecimal( com::sun::star::bridge::oleautomation::Decimal& rAutomationDec );
+
+ virtual BOOL Convert( SbxDataType );
+ virtual BOOL Compute( SbxOperator, const SbxValue& );
+ virtual BOOL Compare( SbxOperator, const SbxValue& ) const;
+ BOOL Scan( const String&, USHORT* = NULL );
+ void Format( String&, const String* = NULL ) const;
+
+ // Interface for CDbl in Basic
+ static SbxError ScanNumIntnl( const String& rSrc, double& nVal, BOOL bSingle=FALSE );
+
+ // The following operators are definied for easier handling.
+ // Error conditions (overflow, conversions) are not
+ // taken into consideration.
+
+ inline int operator ==( const SbxValue& ) const;
+ inline int operator !=( const SbxValue& ) const;
+ inline int operator <( const SbxValue& ) const;
+ inline int operator >( const SbxValue& ) const;
+ inline int operator <=( const SbxValue& ) const;
+ inline int operator >=( const SbxValue& ) const;
+
+ inline SbxValue& operator *=( const SbxValue& );
+ inline SbxValue& operator /=( const SbxValue& );
+ inline SbxValue& operator %=( const SbxValue& );
+ inline SbxValue& operator +=( const SbxValue& );
+ inline SbxValue& operator -=( const SbxValue& );
+ inline SbxValue& operator &=( const SbxValue& );
+ inline SbxValue& operator |=( const SbxValue& );
+ inline SbxValue& operator ^=( const SbxValue& );
+};
+
+inline int SbxValue::operator==( const SbxValue& r ) const
+{ return Compare( SbxEQ, r ); }
+
+inline int SbxValue::operator!=( const SbxValue& r ) const
+{ return Compare( SbxNE, r ); }
+
+inline int SbxValue::operator<( const SbxValue& r ) const
+{ return Compare( SbxLT, r ); }
+
+inline int SbxValue::operator>( const SbxValue& r ) const
+{ return Compare( SbxGT, r ); }
+
+inline int SbxValue::operator<=( const SbxValue& r ) const
+{ return Compare( SbxLE, r ); }
+
+inline int SbxValue::operator>=( const SbxValue& r ) const
+{ return Compare( SbxGE, r ); }
+
+inline SbxValue& SbxValue::operator*=( const SbxValue& r )
+{ Compute( SbxMUL, r ); return *this; }
+
+inline SbxValue& SbxValue::operator/=( const SbxValue& r )
+{ Compute( SbxDIV, r ); return *this; }
+
+inline SbxValue& SbxValue::operator%=( const SbxValue& r )
+{ Compute( SbxMOD, r ); return *this; }
+
+inline SbxValue& SbxValue::operator+=( const SbxValue& r )
+{ Compute( SbxPLUS, r ); return *this; }
+
+inline SbxValue& SbxValue::operator-=( const SbxValue& r )
+{ Compute( SbxMINUS, r ); return *this; }
+
+inline SbxValue& SbxValue::operator&=( const SbxValue& r )
+{ Compute( SbxAND, r ); return *this; }
+
+inline SbxValue& SbxValue::operator|=( const SbxValue& r )
+{ Compute( SbxOR, r ); return *this; }
+
+inline SbxValue& SbxValue::operator^=( const SbxValue& r )
+{ Compute( SbxXOR, r ); return *this; }
+
+#endif
+
+#ifndef __SBX_SBXVARIABLE_HXX
+#define __SBX_SBXVARIABLE_HXX
+
+class SbxArray;
+class SbxInfo;
+
+#ifndef SBX_ARRAY_DECL_DEFINED
+#define SBX_ARRAY_DECL_DEFINED
+SV_DECL_REF(SbxArray)
+#endif
+
+#ifndef SBX_INFO_DECL_DEFINED
+#define SBX_INFO_DECL_DEFINED
+SV_DECL_REF(SbxInfo)
+#endif
+
+class SfxBroadcaster;
+
+class SbxVariableImpl;
+
+class SbxVariable : public SbxValue
+{
+ friend class SbMethod;
+
+ SbxVariableImpl* mpSbxVariableImpl; // Impl data
+ SfxBroadcaster* pCst; // Broadcaster, if needed
+ String maName; // Name, if available
+ SbxArrayRef mpPar; // Parameter-Array, if set
+ USHORT nHash; // Hash-ID for search
+
+ SbxVariableImpl* getImpl( void );
+
+protected:
+ SbxInfoRef pInfo; // Probably called information
+ sal_uIntPtr nUserData; // User data for Call()
+ SbxObject* pParent; // Currently attached object
+ virtual ~SbxVariable();
+ virtual BOOL LoadData( SvStream&, USHORT );
+ virtual BOOL StoreData( SvStream& ) const;
+public:
+ SBX_DECL_PERSIST_NODATA(SBXCR_SBX,SBXID_VARIABLE,2);
+ TYPEINFO();
+ SbxVariable();
+ SbxVariable( SbxDataType, void* = NULL );
+ SbxVariable( const SbxVariable& );
+ SbxVariable& operator=( const SbxVariable& );
+
+ void Dump( SvStream&, BOOL bDumpAll=FALSE );
+
+ virtual void SetName( const String& );
+ virtual const String& GetName( SbxNameType = SbxNAME_NONE ) const;
+ USHORT GetHashCode() const { return nHash; }
+
+ virtual void SetModified( BOOL );
+
+ sal_uIntPtr GetUserData() const { return nUserData; }
+ void SetUserData( sal_uIntPtr n ) { nUserData = n; }
+
+ virtual SbxDataType GetType() const;
+ virtual SbxClassType GetClass() const;
+
+ // Parameter-Interface
+ virtual SbxInfo* GetInfo();
+ void SetInfo( SbxInfo* p );
+ void SetParameters( SbxArray* p );
+ SbxArray* GetParameters() const { return mpPar; }
+
+ // Sfx-Broadcasting-Support:
+ // Due to data reduction and better DLL-hierarchie currently via casting
+ SfxBroadcaster& GetBroadcaster();
+ BOOL IsBroadcaster() const { return BOOL( pCst != NULL ); }
+ virtual void Broadcast( ULONG nHintId );
+
+ inline const SbxObject* GetParent() const { return pParent; }
+ inline SbxObject* GetParent() { return pParent; }
+ virtual void SetParent( SbxObject* );
+
+ const String& GetDeclareClassName( void );
+ void SetDeclareClassName( const String& );
+ void SetComListener( ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > xComListener );
+
+ static USHORT MakeHashCode( const String& rName );
+};
+
+#ifndef SBX_VARIABLE_DECL_DEFINED
+#define SBX_VARIABLE_DECL_DEFINED
+SV_DECL_REF(SbxVariable)
+#endif
+
+#endif
+
+#endif // _SBXVAR_HXX
diff --git a/basic/inc/basic/testtool.hxx b/basic/inc/basic/testtool.hxx
new file mode 100644
index 000000000000..37e90bb5cd68
--- /dev/null
+++ b/basic/inc/basic/testtool.hxx
@@ -0,0 +1,160 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef _BASIC_TESTTOOL_HXX_
+#define _BASIC_TESTTOOL_HXX_
+
+#include <svl/smplhint.hxx>
+#include <tools/string.hxx>
+
+#define TESTTOOL_DEFAULT_PORT 12479
+#define UNO_DEFAULT_PORT 12480
+#define DEFAULT_HOST "localhost"
+
+#define TT_SIGNATURE_FOR_UNICODE_TEXTFILES "'encoding UTF-8 Do not remove or change this line!"
+
+#define ASSERTION_STACK_PREFIX "Backtrace:"
+
+// #94145# Due to a tab in TT_SIGNATURE_FOR_UNICODE_TEXTFILES which is changed to blanks by some editors
+// this routine became necessary
+BOOL IsTTSignatureForUnicodeTextfile( String aLine );
+
+//#include "testapp.hxx"
+#define ADD_ERROR_QUIET(nNr, aStr) \
+{ \
+ ErrorEntry *pErr; \
+ if ( BasicRuntimeAccess::HasRuntime() ) \
+ { \
+ BasicRuntime aRun = BasicRuntimeAccess::GetRuntime(); \
+ xub_StrLen aErrLn = StarBASIC::GetErl(); \
+ if ( 0 == aErrLn ) \
+ aErrLn = aRun.GetLine(); \
+ pErr = new ErrorEntry(nNr, aStr, \
+ aErrLn, aRun.GetCol1(), aRun.GetCol2()); \
+ } \
+ else \
+ { \
+ pErr = new ErrorEntry(nNr, aStr); \
+ } \
+ P_FEHLERLISTE->C40_INSERT(ErrorEntry, pErr, P_FEHLERLISTE->Count());\
+}
+// ??? Irgendwann noch was mit der UID anfangen !!
+#define ADD_ERROR(nNr, aStr) { \
+ if ( !SbxBase::IsError() ) \
+ SbxBase::SetError( nNr ); \
+ ADD_ERROR_QUIET(nNr, aStr); \
+}
+
+#define POP_ERROR() P_FEHLERLISTE->DeleteAndDestroy(0)
+#define GET_ERROR() P_FEHLERLISTE->GetObject(0)
+#define IS_ERROR() ( P_FEHLERLISTE->Count() > 0 )
+
+// Transmission of error logs
+enum TTLogType { LOG_RUN, LOG_TEST_CASE, LOG_ERROR, LOG_CALL_STACK, LOG_MESSAGE, LOG_WARNING, LOG_ASSERTION, LOG_QA_ERROR, LOG_ASSERTION_STACK };
+
+struct TTDebugData
+{
+public:
+ TTLogType aLogType;
+ String aMsg;
+ String aFilename;
+ xub_StrLen nLine;
+ xub_StrLen nCol1;
+ xub_StrLen nCol2;
+};
+
+struct TTLogMsg
+{
+public:
+ String aLogFileName;
+ TTDebugData aDebugData;
+};
+
+// For transmission of window information from the Testapp
+struct WinInfoRec
+{
+public:
+ String aUId;
+ String aKurzname;
+ String aSlotname;
+ String aLangname;
+ USHORT nRType;
+ String aRName;
+ BOOL bIsReset;
+};
+
+// Defines for syntax Highlighting
+#define TT_KEYWORD ((SbTextType)100) // Including locally executed commands like 'use' ...
+#define TT_REMOTECMD ((SbTextType)101) // Remotely executed commands like 'nodebug'
+#define TT_LOCALCMD ((SbTextType)102) // Locally executed commands like 'use'
+#define TT_CONTROL ((SbTextType)103) // Possibly available control loaded by 'use'
+#define TT_SLOT ((SbTextType)104) // Available Slots loaded by 'use'
+#define TT_METHOD ((SbTextType)105) // Possibly allowed Method for controls
+#define TT_NOMETHOD ((SbTextType)106) // No Possibly allowed Method for controls
+
+#define FILELIST1 ((SbTextType)111) // Symbols in file 1
+#define FILELIST2 ((SbTextType)112) // Symbols in file 2
+#define FILELIST3 ((SbTextType)113) // Symbols in file 3
+#define FILELIST4 ((SbTextType)114) // Symbols in file 4
+
+/// defines for hints from TestToolObj to the Application
+#define SBX_HINT_LANGUAGE_EXTENSION_LOADED SFX_HINT_USER06
+#define SBX_HINT_EXECUTION_STATUS_INFORMATION SFX_HINT_USER07
+
+#define TT_EXECUTION_ENTERWAIT 0x01
+#define TT_EXECUTION_LEAVEWAIT 0x02
+#define TT_EXECUTION_SHOW_ACTION 0x03
+#define TT_EXECUTION_HIDE_ACTION 0x04
+
+class TTExecutionStatusHint : public SfxSimpleHint
+{
+private:
+ USHORT mnType;
+ String maExecutionStatus;
+ String maAdditionalExecutionStatus;
+
+public:
+ TYPEINFO();
+ TTExecutionStatusHint( USHORT nType, sal_Char *pExecutionStatus, const sal_Char *pAdditionalExecutionStatus = "" )
+ : SfxSimpleHint(SBX_HINT_EXECUTION_STATUS_INFORMATION)
+ , mnType( nType )
+ , maExecutionStatus( pExecutionStatus, RTL_TEXTENCODING_ASCII_US )
+ , maAdditionalExecutionStatus( pAdditionalExecutionStatus, RTL_TEXTENCODING_ASCII_US )
+ {;}
+
+ TTExecutionStatusHint( USHORT nType, const String &aExecutionStatus = String(), const String &aAdditionalExecutionStatus = String() )
+ : SfxSimpleHint(SBX_HINT_EXECUTION_STATUS_INFORMATION)
+ , mnType( nType )
+ , maExecutionStatus( aExecutionStatus )
+ , maAdditionalExecutionStatus( aAdditionalExecutionStatus )
+ {;}
+
+ const String& GetExecutionStatus() const { return maExecutionStatus; }
+ const String& GetAdditionalExecutionStatus() const { return maAdditionalExecutionStatus; }
+ USHORT GetType(){ return mnType; }
+};
+
+#endif // _BASIC_TESTTOOL_HXX_
diff --git a/basic/inc/basic/ttglobal.hrc b/basic/inc/basic/ttglobal.hrc
new file mode 100644
index 000000000000..0248a06c7247
--- /dev/null
+++ b/basic/inc/basic/ttglobal.hrc
@@ -0,0 +1,49 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _TTGLOBAL_HXX
+#define _TTGLOBAL_HXX
+
+///////////////////////////////
+// Error message that go to the Resultfile.
+// *********************
+// *** !!ATTENTION!! ***
+// *********************
+// Theses numbers MUST NOT change ever!
+// Because they are stored in the Resultfiles and if you showed them again
+// the appropriate new or no Strings are viewed.
+///////////////////////////////
+
+// Start of Ressources for the Testtool (own file)
+// > 256 and > 9100 (Biggest res in TT itself)
+#define TT_START 20000 // Messages from /basic/source/testtool
+#define BAS_START 21000 // Messages from /basic/source/app
+#define SVT_START 22000 // Messages from /svtools/source/plugapp
+
+
+#endif
+
diff --git a/basic/inc/basic/ttstrhlp.hxx b/basic/inc/basic/ttstrhlp.hxx
new file mode 100644
index 000000000000..1827d013c492
--- /dev/null
+++ b/basic/inc/basic/ttstrhlp.hxx
@@ -0,0 +1,74 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef _BASIC_TTSTRHLP_HXX
+#define _BASIC_TTSTRHLP_HXX
+
+#include <tools/string.hxx>
+
+#define CByteString( constAsciiStr ) ByteString( RTL_CONSTASCII_STRINGPARAM ( constAsciiStr ) )
+#define CUniString( constAsciiStr ) UniString( RTL_CONSTASCII_USTRINGPARAM ( constAsciiStr ) )
+
+#define StartKenn CUniString("%")
+#define EndKenn CUniString("%")
+#define UIdKenn ( StartKenn.AppendAscii("UId") )
+#define MethodKenn ( StartKenn.AppendAscii("Method") )
+#define TypeKenn ( StartKenn.AppendAscii("RType") )
+#define SlotKenn ( StartKenn.AppendAscii("SlotId") )
+#define RcKenn ( StartKenn.AppendAscii("RCommand") )
+#define TabKenn ( StartKenn.AppendAscii("Tab") )
+#define MakeStringParam(Type,aText) ( Type.AppendAscii("=").Append( aText ).Append( EndKenn ) )
+#define MakeStringNumber(Type,nNumber) MakeStringParam (Type, UniString::CreateFromInt32(nNumber))
+#define UIdString(aID) MakeStringParam(UIdKenn,aID.GetText())
+#define MethodString(nNumber) MakeStringNumber(MethodKenn,nNumber)
+#define TypeString(nNumber) MakeStringNumber(TypeKenn,nNumber)
+#define SlotString(nNumber) MakeStringNumber(SlotKenn,nNumber)
+#define RcString(nNumber) MakeStringNumber(RcKenn,nNumber)
+#define TabString(nNumber) MakeStringNumber(TabKenn,nNumber)
+
+#define ResKenn ( StartKenn.AppendAscii("ResId") )
+#define BaseArgKenn ( StartKenn.AppendAscii("Arg") )
+#define ArgKenn(nNumber) ( BaseArgKenn.Append( UniString::CreateFromInt32(nNumber) ) )
+#define ResString(nNumber) MakeStringNumber(ResKenn,nNumber)
+#define ArgString(nNumber, aText) MakeStringParam(ArgKenn(nNumber),aText)
+
+UniString GEN_RES_STR0( ULONG nResId );
+UniString GEN_RES_STR1( ULONG nResId, const String &Text1 );
+UniString GEN_RES_STR2( ULONG nResId, const String &Text1, const String &Text2 );
+UniString GEN_RES_STR3( ULONG nResId, const String &Text1, const String &Text2, const String &Text3 );
+
+#define GEN_RES_STR1c( nResId, Text1 ) GEN_RES_STR1( nResId, CUniString(Text1) )
+#define GEN_RES_STR2c2( nResId, Text1, Text2 ) GEN_RES_STR2( nResId, Text1, CUniString(Text2) )
+#define GEN_RES_STR3c3( nResId, Text1, Text2, Text3 ) GEN_RES_STR3( nResId, Text1, Text2, CUniString(Text3) )
+
+#define IMPL_GEN_RES_STR \
+UniString GEN_RES_STR0( ULONG nResId ) { return ResString( nResId ); } \
+UniString GEN_RES_STR1( ULONG nResId, const UniString &Text1 ) { return GEN_RES_STR0( nResId ).Append( ArgString( 1, Text1 ) ); } \
+UniString GEN_RES_STR2( ULONG nResId, const UniString &Text1, const UniString &Text2 ) { return GEN_RES_STR1( nResId, Text1 ).Append( ArgString( 2, Text2 ) ); } \
+UniString GEN_RES_STR3( ULONG nResId, const UniString &Text1, const UniString &Text2, const UniString &Text3 ) { return GEN_RES_STR2( nResId, Text1, Text2 ).Append( ArgString( 3, Text3 ) );}
+
+#endif
+
diff --git a/basic/inc/basrid.hxx b/basic/inc/basrid.hxx
new file mode 100644
index 000000000000..d12d05c3436a
--- /dev/null
+++ b/basic/inc/basrid.hxx
@@ -0,0 +1,45 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BASRID_HXX
+#define _BASRID_HXX
+
+#include <tools/resid.hxx>
+
+class SttResId : public ResId
+{
+ public:
+ SttResId( sal_uInt32 nId );
+};
+
+class BasResId : public ResId
+{
+ public:
+ BasResId( sal_uInt32 nId );
+};
+
+#endif //_BASRID_HXX
diff --git a/basic/inc/makefile.mk b/basic/inc/makefile.mk
new file mode 100644
index 000000000000..1b56b6774806
--- /dev/null
+++ b/basic/inc/makefile.mk
@@ -0,0 +1,47 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+PRJ=..
+
+PRJNAME=basic
+TARGET=inc
+
+# --- Settings -----------------------------------------------------
+
+.INCLUDE : settings.mk
+
+# --- Files --------------------------------------------------------
+# --- Targets -------------------------------------------------------
+
+.INCLUDE : target.mk
+
+.IF "$(ENABLE_PCH)"!=""
+ALLTAR : \
+ $(SLO)$/precompiled.pch \
+ $(SLO)$/precompiled_ex.pch
+
+.ENDIF # "$(ENABLE_PCH)"!=""
+
diff --git a/basic/inc/modsizeexceeded.hxx b/basic/inc/modsizeexceeded.hxx
new file mode 100644
index 000000000000..e2d716259f09
--- /dev/null
+++ b/basic/inc/modsizeexceeded.hxx
@@ -0,0 +1,61 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BASIC_MODSIZEEXCEEDED_HXX
+#define _BASIC_MODSIZEEXCEEDED_HXX
+
+#include <com/sun/star/task/XInteractionHandler.hpp>
+#include <cppuhelper/implbase1.hxx>
+
+class ModuleSizeExceeded : public ::cppu::WeakImplHelper1< ::com::sun::star::task::XInteractionRequest >
+{
+ // C++ interface
+ public:
+ ModuleSizeExceeded( const com::sun::star::uno::Sequence< ::rtl::OUString>& sModules );
+
+ sal_Bool isAbort() const;
+ sal_Bool isApprove() const;
+
+ // UNO interface
+ public:
+ virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< com::sun::star::task::XInteractionContinuation > > SAL_CALL getContinuations() throw( ::com::sun::star::uno::RuntimeException ) { return m_lContinuations; }
+ com::sun::star::uno::Any SAL_CALL getRequest() throw( com::sun::star::uno::RuntimeException )
+ {
+ return m_aRequest;
+ }
+
+ // member
+ private:
+ rtl::OUString m_sMods;
+ com::sun::star::uno::Any m_aRequest;
+ com::sun::star::uno::Sequence< com::sun::star::uno::Reference< com::sun::star::task::XInteractionContinuation > > m_lContinuations;
+ com::sun::star::uno::Reference< com::sun::star::task::XInteractionContinuation > m_xAbort;
+ com::sun::star::uno::Reference< com::sun::star::task::XInteractionContinuation> m_xApprove;
+};
+
+#endif
+
diff --git a/basic/inc/pch/precompiled_basic.cxx b/basic/inc/pch/precompiled_basic.cxx
new file mode 100644
index 000000000000..c27c1c7a66a6
--- /dev/null
+++ b/basic/inc/pch/precompiled_basic.cxx
@@ -0,0 +1,29 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "precompiled_basic.hxx"
+
diff --git a/basic/inc/pch/precompiled_basic.hxx b/basic/inc/pch/precompiled_basic.hxx
new file mode 100644
index 000000000000..e8f9e004ca6a
--- /dev/null
+++ b/basic/inc/pch/precompiled_basic.hxx
@@ -0,0 +1,288 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): Generated on 2006-09-01 17:49:31.374198
+
+#ifdef PRECOMPILED_HEADERS
+
+//---MARKER---
+
+#include "com/sun/star/awt/XControl.hpp"
+#include "com/sun/star/awt/XControlContainer.hpp"
+#include "com/sun/star/awt/XControlModel.hpp"
+#include "com/sun/star/awt/XDialog.hpp"
+#include "com/sun/star/awt/XWindow.hpp"
+#include "com/sun/star/beans/MethodConcept.hpp"
+#include "com/sun/star/beans/PropertyAttribute.hpp"
+#include "com/sun/star/beans/PropertyConcept.hpp"
+#include "com/sun/star/beans/PropertyValue.hpp"
+#include "com/sun/star/beans/XExactName.hpp"
+#include "com/sun/star/beans/XIntrospection.hpp"
+#include "com/sun/star/beans/XIntrospectionAccess.hpp"
+#include "com/sun/star/beans/XMaterialHolder.hpp"
+#include "com/sun/star/beans/XPropertyAccess.hpp"
+#include "com/sun/star/beans/XPropertyContainer.hpp"
+#include "com/sun/star/beans/XPropertySet.hpp"
+#include "com/sun/star/beans/XPropertySetInfo.hpp"
+#include "com/sun/star/bridge/XBridge.hpp"
+#include "com/sun/star/bridge/XBridgeFactory.hpp"
+#include "com/sun/star/bridge/oleautomation/Currency.hpp"
+#include "com/sun/star/bridge/oleautomation/Date.hpp"
+#include "com/sun/star/bridge/oleautomation/Decimal.hpp"
+#include "com/sun/star/bridge/oleautomation/NamedArgument.hpp"
+#include "com/sun/star/container/XContainer.hpp"
+#include "com/sun/star/container/XEnumeration.hpp"
+#include "com/sun/star/container/XEnumerationAccess.hpp"
+#include "com/sun/star/container/XHierarchicalNameAccess.hpp"
+#include "com/sun/star/container/XIndexAccess.hpp"
+#include "com/sun/star/container/XNameAccess.hpp"
+#include "com/sun/star/container/XNameContainer.hpp"
+#include "com/sun/star/document/XDocumentInfoSupplier.hpp"
+#include "com/sun/star/document/XStorageBasedDocument.hpp"
+#include "com/sun/star/embed/ElementModes.hpp"
+#include "com/sun/star/embed/XEncryptionProtectedSource.hpp"
+#include "com/sun/star/embed/XStorage.hpp"
+#include "com/sun/star/embed/XTransactedObject.hpp"
+#include "com/sun/star/frame/XModel.hpp"
+#include "com/sun/star/i18n/XCalendar.hpp"
+#include "com/sun/star/io/XActiveDataSource.hpp"
+#include "com/sun/star/io/XInputStream.hpp"
+#include "com/sun/star/io/XOutputStream.hpp"
+#include "com/sun/star/io/XSeekable.hpp"
+#include "com/sun/star/io/XStream.hpp"
+#include "com/sun/star/io/XTextOutputStream.hpp"
+#include "com/sun/star/lang/Locale.hpp"
+#include "com/sun/star/lang/XComponent.hpp"
+#include "com/sun/star/lang/XInitialization.hpp"
+#include "com/sun/star/lang/XMultiServiceFactory.hpp"
+#include "com/sun/star/lang/XServiceInfo.hpp"
+#include "com/sun/star/lang/XSingleServiceFactory.hpp"
+#include "com/sun/star/lang/XTypeProvider.hpp"
+#include "com/sun/star/reflection/XIdlArray.hpp"
+#include "com/sun/star/reflection/XIdlClass.hpp"
+#include "com/sun/star/reflection/XIdlClassProvider.hpp"
+#include "com/sun/star/reflection/XIdlReflection.hpp"
+#include "com/sun/star/reflection/XTypeDescription.hpp"
+#include "com/sun/star/registry/XImplementationRegistration.hpp"
+#include "com/sun/star/script/ArrayWrapper.hpp"
+#include "com/sun/star/script/BasicErrorException.hpp"
+#include "com/sun/star/script/ScriptEventDescriptor.hpp"
+#include "com/sun/star/script/XAllListener.hpp"
+#include "com/sun/star/script/XDefaultMethod.hpp"
+#include "com/sun/star/script/XDefaultProperty.hpp"
+#include "com/sun/star/script/XEventAttacher.hpp"
+#include "com/sun/star/script/XInvocation.hpp"
+#include "com/sun/star/script/XInvocationAdapterFactory.hpp"
+#include "com/sun/star/script/XLibraryContainer.hpp"
+#include "com/sun/star/script/XLibraryContainer2.hpp"
+#include "com/sun/star/script/XLibraryContainerExport.hpp"
+#include "com/sun/star/script/XLibraryContainerPassword.hpp"
+#include "com/sun/star/script/XScriptEventsAttacher.hpp"
+#include "com/sun/star/script/XScriptEventsSupplier.hpp"
+#include "com/sun/star/script/XStarBasicAccess.hpp"
+#include "com/sun/star/script/XStarBasicDialogInfo.hpp"
+#include "com/sun/star/script/XStarBasicLibraryInfo.hpp"
+#include "com/sun/star/script/XStarBasicModuleInfo.hpp"
+#include "com/sun/star/script/XTypeConverter.hpp"
+#include "com/sun/star/script/provider/XScriptProvider.hpp"
+#include "com/sun/star/script/provider/XScriptProviderFactory.hpp"
+#include "com/sun/star/script/provider/XScriptProviderSupplier.hpp"
+#include "com/sun/star/task/ErrorCodeIOException.hpp"
+#include "com/sun/star/ucb/XContentProvider.hpp"
+#include "com/sun/star/ucb/XContentProviderManager.hpp"
+#include "com/sun/star/ucb/XSimpleFileAccess.hpp"
+#include "com/sun/star/ucb/XSimpleFileAccess3.hpp"
+#include "com/sun/star/uno/Any.hxx"
+#include "com/sun/star/uno/DeploymentException.hpp"
+#include "com/sun/star/uno/Sequence.hxx"
+#include "com/sun/star/uno/XComponentContext.hpp"
+#include "com/sun/star/util/DateTime.hpp"
+#include "com/sun/star/util/XMacroExpander.hpp"
+#include "com/sun/star/util/XStringSubstitution.hpp"
+#include "com/sun/star/xml/sax/InputSource.hpp"
+#include "com/sun/star/xml/sax/XDocumentHandler.hpp"
+#include "com/sun/star/xml/sax/XExtendedDocumentHandler.hpp"
+#include "com/sun/star/xml/sax/XParser.hpp"
+
+#include "comphelper/anytostring.hxx"
+#include "comphelper/componentmodule.hxx"
+#include "comphelper/processfactory.hxx"
+#include "comphelper/regpathhelper.hxx"
+#include "comphelper/stl_types.hxx"
+#include "comphelper/storagehelper.hxx"
+
+#include "cppuhelper/basemutex.hxx"
+#include "cppuhelper/component.hxx"
+#include "cppuhelper/exc_hlp.hxx"
+#include "cppuhelper/factory.hxx"
+#include "cppuhelper/implbase1.hxx"
+#include "cppuhelper/implbase2.hxx"
+#include "cppuhelper/implbase5.hxx"
+#include "cppuhelper/interfacecontainer.hxx"
+#include "cppuhelper/servicefactory.hxx"
+#include "cppuhelper/typeprovider.hxx"
+
+#include "i18npool/lang.h"
+
+#include "osl/file.hxx"
+#include "osl/module.h"
+#include "osl/mutex.hxx"
+#include "osl/process.h"
+#include "osl/security.h"
+#include "osl/time.h"
+
+#include "rtl/byteseq.hxx"
+#include "rtl/digest.h"
+#include "rtl/instance.hxx"
+#include "rtl/math.hxx"
+#include "rtl/strbuf.hxx"
+#include "rtl/textenc.h"
+#include "rtl/ustrbuf.hxx"
+#include "rtl/ustring.hxx"
+
+#include "sal/alloca.h"
+#include "sal/types.h"
+
+#include "sot/storage.hxx"
+#include "sot/storinfo.hxx"
+
+#include "svl/brdcst.hxx"
+#include "svtools/ctrlbox.hxx"
+#include "svtools/ctrltool.hxx"
+#include "svtools/ehdl.hxx"
+#include "svtools/filedlg.hxx"
+#include "svl/hint.hxx"
+#include "svl/lstner.hxx"
+#include "unotools/pathoptions.hxx"
+#include "svtools/sfxecode.hxx"
+#include "svl/smplhint.hxx"
+#include "svl/solar.hrc"
+#include "svtools/stringtransfer.hxx"
+#include "svl/svarray.hxx"
+#include "svl/svdde.hxx"
+#include "svtools/svmedit.hxx"
+#include "svl/svstdarr.hxx"
+#include "svtools/svtdata.hxx"
+#include "svtools/svtools.hrc"
+#include "svtools/svtreebx.hxx"
+#include "unotools/syslocale.hxx"
+#include "svtools/taskbar.hxx"
+#include "svtools/textdata.hxx"
+#include "svtools/texteng.hxx"
+#include "svtools/textview.hxx"
+#include "svtools/transfer.hxx"
+#include "svtools/txtattr.hxx"
+#include "svl/undo.hxx"
+#include "svl/zforlist.hxx"
+#include "svl/zformat.hxx"
+
+
+#include "tools/color.hxx"
+#include "tools/config.hxx"
+#include "tools/date.hxx"
+#include "tools/debug.hxx"
+#include "tools/diagnose_ex.h"
+#include "tools/errcode.hxx"
+#include "tools/errinf.hxx"
+#include "tools/fsys.hxx"
+#include "tools/gen.hxx"
+#include "tools/link.hxx"
+#include "tools/list.hxx"
+#include "tools/rc.hxx"
+#include "tools/rcid.h"
+#include "tools/ref.hxx"
+#include "tools/resid.hxx"
+#include "tools/rtti.hxx"
+#include "tools/shl.hxx"
+#include "tools/solar.h"
+#include "tools/stream.hxx"
+#include "tools/string.hxx"
+#include "tools/table.hxx"
+#include "tools/tenccvt.hxx"
+#include "tools/time.hxx"
+#include "tools/urlobj.hxx"
+#include "tools/wldcrd.hxx"
+
+#include "ucbhelper/configurationkeys.hxx"
+#include "ucbhelper/content.hxx"
+#include "ucbhelper/contentbroker.hxx"
+
+#include "unotools/charclass.hxx"
+#include "unotools/eventlisteneradapter.hxx"
+#include "unotools/localedatawrapper.hxx"
+#include "unotools/streamwrap.hxx"
+#include "unotools/transliterationwrapper.hxx"
+#include "unotools/ucbstreamhelper.hxx"
+
+
+#include "vcl/accel.hxx"
+#include "vcl/button.hxx"
+#include "vcl/decoview.hxx"
+#include "vcl/dialog.hxx"
+#include "vcl/dockwin.hxx"
+#include "vcl/edit.hxx"
+#include "vcl/field.hxx"
+#include "vcl/fixed.hxx"
+#include "vcl/floatwin.hxx"
+#include "vcl/font.hxx"
+#include "vcl/gradient.hxx"
+#include "vcl/graph.hxx"
+#include "vcl/help.hxx"
+#include "vcl/image.hxx"
+#include "vcl/jobset.hxx"
+#include "vcl/lstbox.hxx"
+#include "vcl/mapmod.hxx"
+#include "vcl/menu.hxx"
+#include "vcl/metric.hxx"
+#include "vcl/msgbox.hxx"
+#include "vcl/print.hxx"
+#include "vcl/scrbar.hxx"
+#include "vcl/settings.hxx"
+#include "vcl/sound.hxx"
+#include "vcl/splitwin.hxx"
+#include "vcl/status.hxx"
+#include "vcl/svapp.hxx"
+#include "vcl/tabctrl.hxx"
+#include "vcl/tabdlg.hxx"
+#include "vcl/tabpage.hxx"
+#include "vcl/timer.hxx"
+#include "vcl/toolbox.hxx"
+#include "vcl/window.hxx"
+#include "vcl/wintypes.hxx"
+#include "vcl/wrkwin.hxx"
+
+#include "vos/diagnose.hxx"
+#include "vos/macros.hxx"
+#include "vos/mutex.hxx"
+#include "vos/process.hxx"
+
+#include "xmlscript/xmldlg_imexp.hxx"
+#include "xmlscript/xmllib_imexp.hxx"
+#include "xmlscript/xmlmod_imexp.hxx"
+//---MARKER---
+
+#endif
diff --git a/basic/inc/sb.hrc b/basic/inc/sb.hrc
new file mode 100644
index 000000000000..c371d2abc046
--- /dev/null
+++ b/basic/inc/sb.hrc
@@ -0,0 +1,47 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _SB_HRC
+#define _SB_HRC
+
+#include <svl/solar.hrc>
+
+#ifndef IDS_SBERR_START
+ #define IDS_SBERR_START RID_BASIC_START
+#endif
+
+#define IDS_SBERR_TERMINATED IDS_SBERR_START+2000
+#define IDS_SBERR_STOREREF IDS_SBERR_START+2001
+
+// #define IDS_SBERR_LIBLOAD IDS_SBERR_START+2002
+// #define IDS_SBERR_LIBSAVE IDS_SBERR_START+2003
+// #define IDS_SBERR_MGROPEN IDS_SBERR_START+2004
+// #define IDS_SBERR_MGRSAVE IDS_SBERR_START+2005
+// #define IDS_SBERR_REMOVELIB IDS_SBERR_START+2006
+// #define IDS_SBERR_UNLOADLIB IDS_SBERR_START+2007
+
+#endif
diff --git a/basic/inc/sb.hxx b/basic/inc/sb.hxx
new file mode 100644
index 000000000000..ecc85bfa4000
--- /dev/null
+++ b/basic/inc/sb.hxx
@@ -0,0 +1,42 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _SB_HXX
+#define _SB_HXX
+
+#ifndef _SBERRORS_HXX
+ #include <basic/sberrors.hxx>
+#endif
+
+
+#include <basic/sbdef.hxx>
+#include <basic/sbmeth.hxx>
+#include <basic/sbmod.hxx>
+#include <basic/sbprop.hxx>
+#include <basic/sbstar.hxx>
+
+#endif
diff --git a/basic/inc/svtmsg.hrc b/basic/inc/svtmsg.hrc
new file mode 100644
index 000000000000..ff215d3fc9cb
--- /dev/null
+++ b/basic/inc/svtmsg.hrc
@@ -0,0 +1,115 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#include "basic/ttglobal.hrc"
+
+
+// Here are the messages of /basic/source/app included
+
+///////////////////////////////
+// Error message that go to the Resultfile.
+// *********************
+// *** !!ATTENTION!! ***
+// *********************
+// Theses numbers MUST NOT change ever!
+// Because they are stored in the Resultfiles and if you showed them again
+// the appropriate new or no Strings are viewed.
+///////////////////////////////
+
+#define S_GPF_ABORT ( SVT_START + 0 )
+#define S_APP_SHUTDOWN ( SVT_START + 1 )
+#define S_SID_EXECUTE_FAILED_NO_DISPATCHER ( SVT_START + 2 )
+#define S_SID_EXECUTE_FAILED ( SVT_START + 3 )
+#define S_UNO_PROPERTY_NITIALIZE_FAILED ( SVT_START + 4 )
+#define S_RESETAPPLICATION_FAILED_COMPLEX ( SVT_START + 5 )
+#define S_RESETAPPLICATION_FAILED_UNKNOWN ( SVT_START + 6 )
+#define S_NO_ACTIVE_WINDOW ( SVT_START + 7 )
+#define S_NO_DIALOG_IN_GETACTIVE ( SVT_START + 8 )
+#define S_NO_POPUP ( SVT_START + 9 )
+#define S_NO_SUBMENU ( SVT_START + 10 )
+#define S_CONTROLTYPE_NOT_SUPPORTED ( SVT_START + 11 )
+#define S_SELECTION_BY_ATTRIBUTE_ONLY_DIRECTORIES ( SVT_START + 12 )
+#define S_NO_MORE_FILES ( SVT_START + 13 )
+#define S_UNKNOWN_METHOD ( SVT_START + 14 )
+#define S_INVALID_PARAMETERS ( SVT_START + 15 )
+#define S_POINTER_OUTSIDE_APPWIN ( SVT_START + 16 )
+#define S_UNKNOWN_COMMAND ( SVT_START + 17 )
+#define S_WIN_NOT_FOUND ( SVT_START + 18 )
+#define S_WIN_INVISIBLE ( SVT_START + 19 )
+#define S_WIN_DISABLED ( SVT_START + 20 )
+#define S_NUMBER_TOO_BIG ( SVT_START + 21 )
+#define S_NUMBER_TOO_SMALL ( SVT_START + 22 )
+#define S_WINDOW_DISAPPEARED ( SVT_START + 23 )
+#define S_ERROR_SAVING_IMAGE ( SVT_START + 24 )
+#define S_INVALID_POSITION ( SVT_START + 25 )
+#define S_SPLITWIN_NOT_FOUND ( SVT_START + 26 )
+#define S_INTERNAL_ERROR ( SVT_START + 27 )
+#define S_NO_STATUSBAR ( SVT_START + 28 )
+#define S_ITEMS_INVISIBLE ( SVT_START + 29 )
+#define S_TABPAGE_NOT_FOUND ( SVT_START + 30 )
+#define S_TRISTATE_NOT_ALLOWED ( SVT_START + 31 )
+#define S_ERROR_IN_SET_TEXT ( SVT_START + 32 )
+#define S_ATTEMPT_TO_WRITE_READONLY ( SVT_START + 33 )
+#define S_NO_SELECT_FALSE ( SVT_START + 34 )
+#define S_ENTRY_NOT_FOUND ( SVT_START + 35 )
+#define S_METHOD_FAILED ( SVT_START + 36 )
+#define S_HELPID_ON_TOOLBOX_NOT_FOUND ( SVT_START + 37 )
+#define S_BUTTON_DISABLED_ON_TOOLBOX ( SVT_START + 38 )
+#define S_BUTTON_HIDDEN_ON_TOOLBOX ( SVT_START + 39 )
+#define S_CANNOT_MAKE_BUTTON_VISIBLE_IN_TOOLBOX ( SVT_START + 40 )
+#define S_TEAROFF_FAILED ( SVT_START + 41 )
+#define S_NO_SELECTED_ENTRY_DEPRECATED ( SVT_START + 42 ) // Has to stay in for old res files
+#define S_SELECT_DESELECT_VIA_STRING_NOT_IMPLEMENTED ( SVT_START + 43 )
+#define S_ALLOWED_ONLY_IN_FLOATING_MODE ( SVT_START + 44 )
+#define S_ALLOWED_ONLY_IN_DOCKING_MODE ( SVT_START + 45 )
+#define S_SIZE_NOT_CHANGEABLE ( SVT_START + 46 )
+#define S_NO_OK_BUTTON ( SVT_START + 47 )
+#define S_NO_CANCEL_BUTTON ( SVT_START + 48 )
+#define S_NO_YES_BUTTON ( SVT_START + 49 )
+#define S_NO_NO_BUTTON ( SVT_START + 50 )
+#define S_NO_RETRY_BUTTON ( SVT_START + 51 )
+#define S_NO_HELP_BUTTON ( SVT_START + 52 )
+#define S_NO_DEFAULT_BUTTON ( SVT_START + 53 )
+#define S_BUTTON_ID_NOT_THERE ( SVT_START + 54 )
+#define S_BUTTONID_REQUIRED ( SVT_START + 55 )
+#define S_UNKNOWN_TYPE ( SVT_START + 56 )
+#define S_UNPACKING_STORAGE_FAILED ( SVT_START + 57 )
+#define S_NO_LIST_BOX_BUTTON ( SVT_START + 58 )
+#define S_UNO_URL_EXECUTE_FAILED_NO_DISPATCHER ( SVT_START + 59 )
+#define S_UNO_URL_EXECUTE_FAILED_NO_FRAME ( SVT_START + 60 )
+#define S_NO_MENU ( SVT_START + 61 )
+#define S_NO_SELECTED_ENTRY ( SVT_START + 62 )
+#define S_UNO_URL_EXECUTE_FAILED_DISABLED ( SVT_START + 63 )
+#define S_NO_SCROLLBAR ( SVT_START + 64 )
+#define S_NO_SAX_PARSER ( SVT_START + 65 )
+#define S_CANNOT_CREATE_DIRECTORY ( SVT_START + 66 )
+#define S_DIRECTORY_NOT_EMPTY ( SVT_START + 67 )
+#define S_DEPRECATED ( SVT_START + 68 )
+#define S_SIZE_BELOW_MINIMUM ( SVT_START + 69 )
+#define S_CANNOT_FIND_FLOATING_WIN ( SVT_START + 70 )
+#define S_NO_LIST_BOX_STRING ( SVT_START + 71 )
+#define S_SLOT_IN_EXECUTE ( SVT_START + 72 )
+#define S_MENU_NOT_CLOSING ( SVT_START + 73 )
diff --git a/basic/inc/testtool.hrc b/basic/inc/testtool.hrc
new file mode 100644
index 000000000000..075b462944c9
--- /dev/null
+++ b/basic/inc/testtool.hrc
@@ -0,0 +1,36 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#define S_INVALID_KEYCODE 257
+#define S_MANDATORY_FILE 258
+#define S_READING_LONGNAMES 259
+#define S_READING_SLOT_IDS 260
+#define S_READING_CONTROLS 261
+#define S_READING_BASIC_MODULE 262
+#define S_STARTING_APPLICATION 263
+
+
+
diff --git a/basic/inc/ttmsg.hrc b/basic/inc/ttmsg.hrc
new file mode 100644
index 000000000000..26f250bc6a6a
--- /dev/null
+++ b/basic/inc/ttmsg.hrc
@@ -0,0 +1,111 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#include "basic/ttglobal.hrc"
+
+
+// Here are the messages of directory /basic/source/testtool included
+
+///////////////////////////////
+// Error message that go to the Resultfile.
+// *********************
+// *** !!ATTENTION!! ***
+// *********************
+// Theses numbers MUST NOT change ever!
+// Because they are stored in the Resultfiles and if you showed them again
+// the appropriate new or no Strings are viewed.
+///////////////////////////////
+
+#define S_NAME_NOT_THERE ( TT_START + 0 )
+#define S_DOUBLE_NAME ( TT_START + 1 )
+#define S_READING_FILE ( TT_START + 2 )
+#define S_CANNOT_OPEN_FILE ( TT_START + 3 )
+#define S_INVALID_LINE ( TT_START + 4 )
+#define S_SHORTNAME_UNKNOWN ( TT_START + 5 )
+#define S_LONGNAME_UNKNOWN ( TT_START + 6 )
+#define S_FIRST_SHORTNAME_REQ_ASTRX ( TT_START + 7 )
+#define S_TIMOUT_WAITING ( TT_START + 8 )
+#define S_APPLICATION_RESTARTED ( TT_START + 9 )
+#define S_APPLICATION_START_FAILED ( TT_START + 10 )
+#define S_TIMOUT_SENDING ( TT_START + 11 )
+#define S_NO_CONNECTION ( TT_START + 12 )
+#define S_NO_FILES_FOUND ( TT_START + 13 ) // Not used anymore. needed only for old *.res files
+#define S_ERRORS_DETECTED ( TT_START + 14 )
+#define S_NO_ERRORS_DETECTED ( TT_START + 15 )
+#define S_WARNINGS_DETECTED ( TT_START + 16 )
+#define S_NO_WARNINGS_DETECTED ( TT_START + 17 )
+#define S_UNKNOWN_SLOT_CONTROL ( TT_START + 18 )
+#define S_RETURN_SEQUENCE_MISSMATCH ( TT_START + 19 )
+#define S_RETURNED_VALUE_ID_MISSMATCH ( TT_START + 20 )
+#define S_RETURNED_VALUE_NO_RECEIVER ( TT_START + 21 )
+#define S_UNKNOWN_METHOD ( TT_START + 22 )
+#define S_INCLUDE_FILE_WARNINGS_DETECTED ( TT_START + 23 )
+#define S_NO_INCLUDE_FILE_WARNINGS_DETECTED ( TT_START + 24 )
+
+// Strings
+
+
+/*
+#define S_ ( TT_START + 0 )
+#define S_ ( TT_START + 0 )
+#define S_ ( TT_START + 0 )
+#define S_ ( TT_START + 0 )
+#define S_ ( TT_START + 0 )
+#define S_ ( TT_START + 0 )
+#define S_ ( TT_START + 0 )
+#define S_ ( TT_START + 0 )
+#define S_ ( TT_START + 0 )
+#define S_ ( TT_START + 0 )
+#define S_ ( TT_START + 0 )
+#define S_ ( TT_START + 0 )
+#define S_ ( TT_START + 0 )
+#define S_ ( TT_START + 0 )
+#define S_ ( TT_START + 0 )
+#define S_ ( TT_START + 0 )
+#define S_ ( TT_START + 0 )
+#define S_ ( TT_START + 0 )
+#define S_ ( TT_START + 0 )
+#define S_ ( TT_START + 0 )
+#define S_ ( TT_START + 0 )
+#define S_ ( TT_START + 0 )
+#define S_ ( TT_START + 0 )
+#define S_ ( TT_START + 0 )
+#define S_ ( TT_START + 0 )
+#define S_ ( TT_START + 0 )
+#define S_ ( TT_START + 0 )
+#define S_ ( TT_START + 0 )
+#define S_ ( TT_START + 0 )
+#define S_ ( TT_START + 0 )
+#define S_ ( TT_START + 0 )
+#define S_ ( TT_START + 0 )
+#define S_ ( TT_START + 0 )
+#define S_ ( TT_START + 0 )
+#define S_ ( TT_START + 0 )
+#define S_ ( TT_START + 0 )
+#define S_ ( TT_START + 0 )
+#define S_ ( TT_START + 0 )
+#define S_ ( TT_START + 0 )
+*/
diff --git a/basic/prj/build.lst b/basic/prj/build.lst
new file mode 100755
index 000000000000..c00a3d8412d3
--- /dev/null
+++ b/basic/prj/build.lst
@@ -0,0 +1,13 @@
+sb basic : l10n offuh oovbaapi svtools xmlscript framework salhelper NULL
+sb basic usr1 - all sb_mkout NULL
+sb basic\inc nmake - all sb_inc NULL
+sb basic\source\app nmake - all sb_app sb_class sb_inc NULL
+sb basic\source\basmgr nmake - all sb_mgr sb_inc NULL
+sb basic\source\classes nmake - all sb_class sb_inc NULL
+sb basic\source\comp nmake - all sb_comp sb_inc NULL
+sb basic\source\runtime nmake - all sb_rt sb_inc sb_class NULL
+sb basic\source\sample nmake - all sb_samp sb_inc NULL
+sb basic\source\sbx nmake - all sb_sbx sb_inc NULL
+sb basic\source\uno nmake - all sb_uno sb_inc NULL
+sb basic\util nmake - all sb_util sb_app sb_class sb_comp sb_mgr sb_rt sb_samp sb_sbx sb_uno NULL
+
diff --git a/basic/prj/d.lst b/basic/prj/d.lst
new file mode 100644
index 000000000000..d2a083ebcb1e
--- /dev/null
+++ b/basic/prj/d.lst
@@ -0,0 +1,59 @@
+mkdir: %COMMON_DEST%\bin%_EXT%\hid
+mkdir: %COMMON_DEST%\res%_EXT%
+
+..\%COMMON_OUTDIR%\misc\*.hid %COMMON_DEST%\bin%_EXT%\hid\*.hid
+..\%__SRC%\lib\basic.lib %_DEST%\lib%_EXT%\basic.lib
+..\%__SRC%\lib\lib*.so %_DEST%\lib%_EXT%
+..\%__SRC%\lib\*.dylib %_DEST%\lib%_EXT%\*.dylib
+..\%__SRC%\lib\*.a %_DEST%\lib%_EXT%\*.a
+..\%__SRC%\slb\sb.lib %_DEST%\lib%_EXT%\xsb.lib
+..\%__SRC%\srs\classes.srs %_DEST%\res%_EXT%\basic.srs
+..\%COMMON_OUTDIR%\srs\classes_srs.hid %COMMON_DEST%\res%_EXT%\basic_srs.hid
+..\%__SRC%\bin\sb?????.dll %_DEST%\bin%_EXT%\sb?????.dll
+..\%__SRC%\bin\sb?????.sym %_DEST%\bin%_EXT%\sb?????.sym
+..\%__SRC%\misc\sb?????.map %_DEST%\bin%_EXT%\sb?????.map
+..\%__SRC%\bin\stt*.res %_DEST%\bin%_EXT%\stt*.res
+..\%__SRC%\bin\sb*.res %_DEST%\bin%_EXT%\sb*.res
+..\%__SRC%\lib\app.lib %_DEST%\lib%_EXT%\app.lib
+..\%__SRC%\lib\libapp.a %_DEST%\lib%_EXT%\libapp.a
+..\%__SRC%\lib\sample.lib %_DEST%\lib%_EXT%\sample.lib
+..\%__SRC%\lib\libsample.a %_DEST%\lib%_EXT%\libsample.a
+
+mkdir: %_DEST%\inc%_EXT%\basic
+..\inc\testtool.hrc %_DEST%\inc%_EXT%\basic\testtool.hrc
+..\inc\ttmsg.hrc %_DEST%\inc%_EXT%\basic\ttmsg.hrc
+..\inc\basic\ttglobal.hrc %_DEST%\inc%_EXT%\basic\ttglobal.hrc
+..\inc\svtmsg.hrc %_DEST%\inc%_EXT%\basic\svtmsg.hrc
+
+..\inc\basic\sbdef.hxx %_DEST%\inc%_EXT%\basic\sbdef.hxx
+..\inc\basic\sbmod.hxx %_DEST%\inc%_EXT%\basic\sbmod.hxx
+..\inc\basic\sbjsmod.hxx %_DEST%\inc%_EXT%\basic\sbjsmod.hxx
+..\inc\basic\sbmeth.hxx %_DEST%\inc%_EXT%\basic\sbmeth.hxx
+..\inc\basic\sbprop.hxx %_DEST%\inc%_EXT%\basic\sbprop.hxx
+..\inc\basic\sbstar.hxx %_DEST%\inc%_EXT%\basic\sbstar.hxx
+..\inc\basic\sbuno.hxx %_DEST%\inc%_EXT%\basic\sbuno.hxx
+..\inc\basic\basmgr.hxx %_DEST%\inc%_EXT%\basic\basmgr.hxx
+..\inc\basic\sberrors.hxx %_DEST%\inc%_EXT%\basic\sberrors.hxx
+..\inc\basic\basrdll.hxx %_DEST%\inc%_EXT%\basic\basrdll.hxx
+..\inc\basic\sbstdobj.hxx %_DEST%\inc%_EXT%\basic\sbstdobj.hxx
+..\inc\basic\process.hxx %_DEST%\inc%_EXT%\basic\process.hxx
+..\inc\basic\mybasic.hxx %_DEST%\inc%_EXT%\basic\mybasic.hxx
+..\inc\basic\testtool.hxx %_DEST%\inc%_EXT%\basic\testtool.hxx
+..\inc\basic\basicrt.hxx %_DEST%\inc%_EXT%\basic\basicrt.hxx
+..\inc\basic\dispdefs.hxx %_DEST%\inc%_EXT%\basic\dispdefs.hxx
+..\inc\basic\ttstrhlp.hxx %_DEST%\inc%_EXT%\basic\ttstrhlp.hxx
+
+..\inc\basic\sbx.hxx %_DEST%\inc%_EXT%\basic\sbx.hxx
+..\inc\basic\sbxcore.hxx %_DEST%\inc%_EXT%\basic\sbxcore.hxx
+..\inc\basic\sbxdef.hxx %_DEST%\inc%_EXT%\basic\sbxdef.hxx
+..\inc\basic\sbxform.hxx %_DEST%\inc%_EXT%\basic\sbxform.hxx
+..\inc\basic\sbxmeth.hxx %_DEST%\inc%_EXT%\basic\sbxmeth.hxx
+..\inc\basic\sbxobj.hxx %_DEST%\inc%_EXT%\basic\sbxobj.hxx
+..\inc\basic\sbxprop.hxx %_DEST%\inc%_EXT%\basic\sbxprop.hxx
+..\inc\basic\sbxvar.hxx %_DEST%\inc%_EXT%\basic\sbxvar.hxx
+..\inc\basic\sbxbase.hxx %_DEST%\inc%_EXT%\basic\sbxbase.hxx
+..\inc\basic\sbxfac.hxx %_DEST%\inc%_EXT%\basic\sbxfac.hxx
+..\inc\basic\sbxmstrm.hxx %_DEST%\inc%_EXT%\basic\sbxmstrm.hxx
+
+..\inc\basic\basicmanagerrepository.hxx %_DEST%\inc%_EXT%\basic\basicmanagerrepository.hxx
+..\inc\modsizeexceeded.hxx %_DEST%\inc%_EXT%\basic\modsizeexceeded.hxx
diff --git a/basic/source/app/app.cxx b/basic/source/app/app.cxx
new file mode 100644
index 000000000000..fd613a81673f
--- /dev/null
+++ b/basic/source/app/app.cxx
@@ -0,0 +1,1948 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+
+#ifndef _MSGBOX_HXX //autogen
+#include <vcl/msgbox.hxx>
+#endif
+#include <tools/fsys.hxx>
+#ifndef _SV_FILEDLG_HXX //autogen
+#include <svtools/filedlg.hxx>
+#endif
+#include <tools/config.hxx>
+
+#include <vcl/font.hxx>
+
+#ifndef _BASIC_TTRESHLP_HXX
+#include <basic/ttstrhlp.hxx>
+#endif
+#include <basic/sbx.hxx>
+#include <svtools/filedlg.hxx>
+
+#include <osl/module.h>
+
+#include "basic.hrc"
+#include "app.hxx"
+#include "printer.hxx"
+#include "status.hxx"
+#include "appedit.hxx"
+#include "appbased.hxx"
+#include "apperror.hxx"
+#include <basic/mybasic.hxx>
+#include "ttbasic.hxx"
+#include "dialogs.hxx"
+#include <basic/basrdll.hxx>
+#include "basrid.hxx"
+
+#ifndef _RUNTIME_HXX
+#include "runtime.hxx"
+#endif
+#include "sbintern.hxx"
+
+#ifdef _USE_UNO
+#include <ucbhelper/contentbroker.hxx>
+#include <ucbhelper/configurationkeys.hxx>
+#include <comphelper/regpathhelper.hxx>
+#include <comphelper/processfactory.hxx>
+#include <com/sun/star/beans/PropertyValue.hpp>
+#include <com/sun/star/lang/XComponent.hpp>
+#include <cppuhelper/bootstrap.hxx>
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+#include <com/sun/star/ucb/XContentProviderManager.hpp>
+
+#include <ucbhelper/content.hxx>
+#include <unotools/syslocale.hxx>
+
+using namespace comphelper;
+using namespace cppu;
+using namespace rtl;
+using namespace com::sun::star;
+using namespace com::sun::star::uno;
+using namespace com::sun::star::lang;
+using namespace com::sun::star::ucb;
+using namespace com::sun::star::beans;
+
+#endif /* _USE_UNO */
+
+IMPL_GEN_RES_STR;
+
+#ifdef DBG_UTIL
+// filter Messages generated due to missing configuration Bug:#83887#
+void TestToolDebugMessageFilter( const sal_Char *pString, BOOL bIsOsl )
+{
+ static BOOL static_bInsideFilter = FALSE;
+
+ // Ignore messages during filtering to avoid endless recursions
+ if ( static_bInsideFilter )
+ return;
+
+ static_bInsideFilter = TRUE;
+
+ ByteString aMessage( pString );
+
+ BOOL bIgnore = FALSE;
+
+ if ( bIsOsl )
+ {
+ // OSL
+ if ( aMessage.Search( CByteString("Cannot open Configuration: Connector: unknown delegatee com.sun.star.connection.Connector.portal") ) != STRING_NOTFOUND )
+ bIgnore = TRUE;
+ }
+ else
+ {
+ // DBG
+#if ! (OSL_DEBUG_LEVEL > 1)
+ if ( aMessage.Search( CByteString("SelectAppIconPixmap") ) != STRING_NOTFOUND )
+ bIgnore = TRUE;
+#endif
+ if ( aMessage.Search( CByteString("PropertySetRegistry::") ) != STRING_NOTFOUND )
+ bIgnore = TRUE;
+ if ( aMessage.Search( CByteString("property value missing") ) != STRING_NOTFOUND )
+ bIgnore = TRUE;
+ if ( aMessage.Search( CByteString("getDateFormatsImpl") ) != STRING_NOTFOUND
+ && aMessage.Search( CByteString("no date formats") ) != STRING_NOTFOUND )
+ bIgnore = TRUE;
+ if ( aMessage.Search( CByteString("ucb::configureUcb(): Bad arguments") ) != STRING_NOTFOUND )
+ bIgnore = TRUE;
+ if ( aMessage.Search( CByteString("CreateInstance with arguments exception") ) != STRING_NOTFOUND )
+ bIgnore = TRUE;
+ if ( aMessage.Search( CByteString("AcquireTree failed") ) != STRING_NOTFOUND )
+ bIgnore = TRUE;
+ }
+
+
+ if ( bIgnore )
+ {
+ static_bInsideFilter = FALSE;
+ return;
+ }
+
+ if ( bIsOsl )
+ {
+ // due to issue #i36895 only print on console
+ // unfortunately the osl assertions deadlock by design :-( on recursive calls of assertions
+ printf("%s\n", pString );
+ }
+ else
+ {
+ try
+ {
+ aBasicApp.DbgPrintMsgBox( pString );
+ }
+ catch ( ... )
+
+ {
+ printf("DbgPrintMsgBox failed: %s\n", pString );
+ }
+ }
+/* DBG_INSTOUTERROR( DBG_OUT_MSGBOX )
+ DBG_ERROR( pString );
+ DBG_INSTOUTERROR( DBG_OUT_TESTTOOL )*/
+ static_bInsideFilter = FALSE;
+}
+void SAL_CALL DBG_TestToolDebugMessageFilter( const sal_Char *pString )
+{
+ TestToolDebugMessageFilter( pString, FALSE );
+}
+extern "C" void SAL_CALL osl_TestToolDebugMessageFilter( const sal_Char *pString )
+{
+ if ( !getenv( "DISABLE_SAL_DBGBOX" ) )
+ TestToolDebugMessageFilter( pString, TRUE );
+}
+#endif
+
+// #94145# Due to a tab in TT_SIGNATURE_FOR_UNICODE_TEXTFILES which is changed to blanks by some editors
+// this routine became necessary
+BOOL IsTTSignatureForUnicodeTextfile( String aLine )
+{
+ aLine.SearchAndReplace( '\t', ' ' );
+ String ThreeBlanks = CUniString(" ");
+ String TwoBlanks = CUniString(" ");
+ while ( aLine.SearchAndReplace( ThreeBlanks, TwoBlanks ) != STRING_NOTFOUND )
+ {}
+ return aLine.EqualsAscii( TT_SIGNATURE_FOR_UNICODE_TEXTFILES );
+}
+
+BasicApp aBasicApp; // Application instance
+
+uno::Reference< XContentProviderManager > InitializeUCB( void )
+{
+ uno::Reference< XMultiServiceFactory > xSMgr;
+ try
+ {
+ xSMgr = uno::Reference< XMultiServiceFactory >(
+ defaultBootstrap_InitialComponentContext()->getServiceManager(),
+ UNO_QUERY_THROW);
+ }
+ catch( com::sun::star::uno::Exception & exc )
+ {
+ fprintf( stderr, "Couldn't bootstrap uno servicemanager for reason : %s\n" ,
+ OUStringToOString( exc.Message, RTL_TEXTENCODING_ASCII_US ).getStr() );
+ InfoBox( NULL, String( exc.Message ) ).Execute();
+ throw ;
+ }
+
+
+ //////////////////////////////////////////////////////////////////////
+ // set global factory
+ setProcessServiceFactory( xSMgr );
+
+/* // Create simple ConfigManager
+ Sequence< Any > aConfArgs(3);
+ aConfArgs[0] <<= PropertyValue( OUString::createFromAscii("servertype"), 0, makeAny( OUString::createFromAscii("local") ), ::com::sun::star::beans::PropertyState_DIRECT_VALUE );
+ aConfArgs[1] <<= PropertyValue( OUString::createFromAscii("sourcepath"), 0, makeAny( OUString::createFromAscii("g:\\") ), ::com::sun::star::beans::PropertyState_DIRECT_VALUE );
+ aConfArgs[2] <<= PropertyValue( OUString::createFromAscii("updatepath"), 0, makeAny( OUString::createFromAscii("g:\\") ), ::com::sun::star::beans::PropertyState_DIRECT_VALUE );
+
+ uno::Reference< XContentProvider > xConfProvider
+ ( xSMgr->createInstanceWithArguments( OUString::createFromAscii( "com.sun.star.configuration.ConfigurationProvider" ), aConfArgs), UNO_QUERY );
+*/
+
+
+// Create unconfigured Ucb:
+/* Sequence< Any > aArgs(1);
+ aArgs[1] = makeAny ( xConfProvider );*/
+ Sequence< Any > aArgs;
+ ::ucbhelper::ContentBroker::initialize( xSMgr, aArgs );
+ uno::Reference< XContentProviderManager > xUcb =
+ ::ucbhelper::ContentBroker::get()->getContentProviderManagerInterface();
+
+ uno::Reference< XContentProvider > xFileProvider
+ ( xSMgr->createInstance( OUString::createFromAscii( "com.sun.star.ucb.FileContentProvider" ) ), UNO_QUERY );
+ xUcb->registerContentProvider( xFileProvider, OUString::createFromAscii( "file" ), sal_True );
+
+
+/* uno::Reference< XContentProvider > xPackageProvider
+ ( xSMgr->createInstance( OUString::createFromAscii( "com.sun.star.ucb.PackageContentProvider" ) ), UNO_QUERY );
+ xUcb->registerContentProvider( xPackageProvider, OUString::createFromAscii( "vnd.sun.star.pkg" ), sal_True );
+ */
+
+ return xUcb;
+}
+
+static void ReplaceStringHookProc( UniString& rStr )
+{
+ static String aTestToolName( RTL_CONSTASCII_USTRINGPARAM( "VCLTestTool" ) ); // HACK, should be read from ressources
+
+ if ( rStr.SearchAscii( "%PRODUCT" ) != STRING_NOTFOUND )
+ {
+ rStr.SearchAndReplaceAllAscii( "%PRODUCTNAME", aTestToolName );
+ /*
+ rStr.SearchAndReplaceAllAscii( "%PRODUCTVERSION", rVersion );
+ rStr.SearchAndReplaceAllAscii( "%ABOUTBOXPRODUCTVERSION", rAboutBoxVersion );
+ rStr.SearchAndReplaceAllAscii( "%PRODUCTEXTENSION", rExtension );
+ rStr.SearchAndReplaceAllAscii( "%PRODUCTXMLFILEFORMATNAME", rXMLFileFormatName );
+ rStr.SearchAndReplaceAllAscii( "%PRODUCTXMLFILEFORMATVERSION", rXMLFileFormatVersion );
+ */
+ }
+}
+
+void BasicApp::Main( )
+{
+#ifdef DBG_UTIL
+// Install filter for OSLAsserts
+ DbgPrintMsgBox = DbgGetPrintMsgBox();
+ DbgSetPrintTestTool( DBG_TestToolDebugMessageFilter );
+ DBG_INSTOUTERROR( DBG_OUT_TESTTOOL );
+
+ if ( osl_setDebugMessageFunc( osl_TestToolDebugMessageFilter ) )
+ DBG_ERROR("osl_setDebugMessageFunc returns non NULL pointer");
+#endif
+
+ ResMgr::SetReadStringHook( ReplaceStringHookProc );
+
+ try
+ {
+#ifdef _USE_UNO
+ uno::Reference< XContentProviderManager > xUcb = InitializeUCB();
+#endif
+
+ {
+ DirEntry aIniPath( Config::GetConfigName( Config::GetDefDirectory(), CUniString("testtool") ) );
+ if ( !aIniPath.Exists() )
+ { // look for it besides the executable
+ DirEntry aAppFileName( GetAppFileName() );
+ String aAppDir ( aAppFileName.GetPath().GetFull() );
+
+// DirEntry aDefIniPath( Config::GetConfigName( aAppDir, CUniString("testtool") ) );
+// Do not use Config::GetConfigName here because is uses a hidden file for UNIX
+
+ DirEntry aDefIniPath( aAppDir );
+ ByteString aFileName;
+#ifdef UNX
+ aFileName = "testtoolrc";
+#else
+ aFileName = "testtool.ini";
+#endif
+ aDefIniPath += DirEntry( aFileName );
+
+ if ( aDefIniPath.Exists() )
+ {
+ aDefIniPath.CopyTo( aIniPath, FSYS_ACTION_COPYFILE );
+ FileStat::SetReadOnlyFlag( aIniPath, FALSE );
+ }
+ }
+ }
+
+ {
+ LanguageType aRequestedLanguage;
+ Config aConf(Config::GetConfigName( Config::GetDefDirectory(), CUniString("testtool") ));
+
+ // 1033 = LANGUAGE_ENGLISH_US
+ // 1031 = LANGUAGE_GERMAN
+ aConf.SetGroup("Misc");
+ ByteString aLang = aConf.ReadKey( "Language", ByteString::CreateFromInt32( LANGUAGE_SYSTEM ) );
+ aRequestedLanguage = LanguageType( aLang.ToInt32() );
+
+ AllSettings aSettings = GetSettings();
+ aSettings.SetUILanguage( aRequestedLanguage );
+ aSettings.SetLanguage( aRequestedLanguage );
+// International aInternational;
+// aInternational = GetSettings().GetInternational();
+// aInternational = International( aRequestedLanguage );
+// aSettings.SetInternational( aInternational );
+ SetSettings( aSettings );
+// aInternational = GetSettings().GetInternational();
+ }
+
+// ResMgr::CreateResMgr( CREATEVERSIONRESMGR( stt ), )
+//const char* ResMgr::GetLang( LanguageType& nType, USHORT nPrio )
+
+// ResMgr::CreateResMgr( CREATEVERSIONRESMGR( stt )
+// ResMgr *pRes = new ResMgr( "testtool.res" );
+// Resource::SetResManager( pRes );
+
+ BasicDLL aBasicDLL;
+ nWait = 0;
+
+ // Hilfe:
+// pHelp = new Help;
+// SetHelp( pHelp );
+// Help::EnableContextHelp();
+// Help::EnableExtHelp();
+// DeactivateExtHelp();
+
+ // Acceleratoren
+ Accelerator aAccel( SttResId( MAIN_ACCEL ) );
+ InsertAccel( &aAccel );
+ pMainAccel = &aAccel;
+
+ // Frame Window:
+ pFrame = new BasicFrame;
+ aAccel.SetSelectHdl( LINK( pFrame, BasicFrame, Accel ) );
+
+ pFrame->Show();
+
+ SetSystemWindowMode( SYSTEMWINDOW_MODE_NOAUTOMODE );
+ SetSystemWindowMode( SYSTEMWINDOW_MODE_DIALOG );
+
+ // Instantiate a SvtSysLocale to avoid permant instatiation
+ // and deletion of SvtSysLocale_Impl in SvtSysLocale Ctor/Dtor
+ // because in the testtool szenario Basic is the only instance
+ // instatiating SvtSysLocale (#107417).
+ SvtSysLocale aSysLocale;
+
+ PostUserEvent( LINK( this, BasicApp, LateInit ) );
+ Execute();
+
+// delete pHelp;
+ delete pFrame;
+
+ RemoveAccel( pMainAccel );
+
+ }
+ catch( class Exception & rEx)
+ {
+ printf( "Exception not caught: %s\n", ByteString( String(rEx.Message), RTL_TEXTENCODING_ASCII_US ).GetBuffer() );
+ String aMsg( String::CreateFromAscii( "Exception not caught: " ) );
+ aMsg.Append( String( rEx.Message ) );
+ InfoBox( NULL, aMsg ).Execute();
+ throw;
+ }
+ catch( ... )
+ {
+ printf( "unknown Exception not caught\n" );
+ InfoBox( NULL, String::CreateFromAscii( "unknown Exception not caught" ) ).Execute();
+ throw;
+ }
+}
+
+void BasicApp::LoadIniFile()
+{
+ pFrame->LoadIniFile();
+}
+
+void BasicApp::SetFocus()
+{
+ if( pFrame->pWork && pFrame->pWork->ISA(AppEdit) )
+ ((AppEdit*)pFrame->pWork)->pDataEdit->GrabFocus();
+}
+
+IMPL_LINK( BasicApp, LateInit, void *, pDummy )
+{
+ (void) pDummy; /* avoid warning about unused parameter */
+ USHORT i;
+ for ( i = 0 ; i < Application::GetCommandLineParamCount() ; i++ )
+ {
+ if ( Application::GetCommandLineParam( i ).Copy(0,4).CompareIgnoreCaseToAscii("-run") == COMPARE_EQUAL
+#ifndef UNX
+ || Application::GetCommandLineParam( i ).Copy(0,4).CompareIgnoreCaseToAscii("/run") == COMPARE_EQUAL
+#endif
+ )
+ pFrame->SetAutoRun( TRUE );
+ else if ( Application::GetCommandLineParam( i ).Copy(0,7).CompareIgnoreCaseToAscii("-result") == COMPARE_EQUAL
+#ifndef UNX
+ || Application::GetCommandLineParam( i ).Copy(0,7).CompareIgnoreCaseToAscii("/result") == COMPARE_EQUAL
+#endif
+ )
+ {
+ if ( (i+1) < Application::GetCommandLineParamCount() )
+ {
+ if ( ByteString( Application::GetCommandLineParam( i+1 ), osl_getThreadTextEncoding() ).IsNumericAscii() )
+ {
+ MsgEdit::SetMaxLogLen( sal::static_int_cast< USHORT >( Application::GetCommandLineParam( i+1 ).ToInt32() ) );
+ }
+ i++;
+ }
+ }
+ }
+
+ // now load the files after the switches have been set. Espechially -run is of interest sunce it changes the behavior
+ for ( i = 0 ; i < Application::GetCommandLineParamCount() ; i++ )
+ {
+ if ( Application::GetCommandLineParam( i ).Copy(0,1).CompareToAscii("-") != COMPARE_EQUAL
+#ifndef UNX
+ && Application::GetCommandLineParam( i ).Copy(0,1).CompareToAscii("/") != COMPARE_EQUAL
+#endif
+ )
+ {
+ pFrame->LoadFile( Application::GetCommandLineParam( i ) );
+ }
+ else if ( Application::GetCommandLineParam( i ).Copy(0,7).CompareIgnoreCaseToAscii("-result") == COMPARE_EQUAL
+#ifndef UNX
+ || Application::GetCommandLineParam( i ).Copy(0,7).CompareIgnoreCaseToAscii("/result") == COMPARE_EQUAL
+#endif
+ )
+ { // Increment count to skip the parameter. This works even if it is not given
+ i++;
+ }
+ }
+
+ pFrame->pStatus->SetStatusSize( pFrame->pStatus->GetStatusSize()+1 );
+ pFrame->pStatus->SetStatusSize( pFrame->pStatus->GetStatusSize()-1 );
+
+ if ( pFrame->IsAutoRun() )
+ {
+ pFrame->Command( RID_RUNSTART );
+ }
+
+ if ( pFrame->IsAutoRun() )
+ pFrame->Command( RID_QUIT );
+
+ return 0;
+}
+
+//////////////////////////////////////////////////////////////////////////
+
+class FloatingExecutionStatus : public FloatingWindow
+{
+public:
+ FloatingExecutionStatus( Window * pParent );
+ void SetStatus( String aW );
+ void SetAdditionalInfo( String aF );
+
+private:
+ Timer aAusblend;
+ DECL_LINK(HideNow, FloatingExecutionStatus* );
+ FixedText aStatus;
+ FixedText aAdditionalInfo;
+};
+
+
+FloatingExecutionStatus::FloatingExecutionStatus( Window * pParent )
+ : FloatingWindow( pParent, SttResId(LOAD_CONF) ),
+ aStatus( this, SttResId( WORK ) ),
+ aAdditionalInfo( this, SttResId( FILENAME ) )
+{
+ FreeResource();
+ aAusblend.SetTimeoutHdl( LINK(this, FloatingExecutionStatus, HideNow ) );
+ aAusblend.SetTimeout(5000); // in ms
+ aAusblend.Start();
+}
+
+void FloatingExecutionStatus::SetStatus( String aW )
+{
+ Show( TRUE, SHOW_NOFOCUSCHANGE | SHOW_NOACTIVATE );
+ ToTop( TOTOP_NOGRABFOCUS );
+ aAusblend.Start();
+ aStatus.SetText( aW );
+}
+
+void FloatingExecutionStatus::SetAdditionalInfo( String aF )
+{
+ Show( TRUE, SHOW_NOFOCUSCHANGE | SHOW_NOACTIVATE );
+ ToTop( TOTOP_NOGRABFOCUS );
+ aAusblend.Start();
+ aAdditionalInfo.SetText( aF );
+}
+
+IMPL_LINK(FloatingExecutionStatus, HideNow, FloatingExecutionStatus*, pFLC )
+{
+ (void) pFLC; /* avoid warning about unused parameter */
+ Hide();
+ return 0;
+}
+
+//////////////////////////////////////////////////////////////////////////
+
+TYPEINIT1(TTExecutionStatusHint, SfxSimpleHint);
+
+BasicFrame::BasicFrame() : WorkWindow( NULL,
+ WinBits( WB_APP | WB_MOVEABLE | WB_SIZEABLE | WB_CLOSEABLE ) )
+, bIsAutoRun( FALSE )
+, pDisplayHidDlg( NULL )
+, pEditVar ( 0 )
+, bAutoReload( FALSE )
+, bAutoSave( TRUE )
+, pBasic( NULL )
+, pExecutionStatus( NULL )
+, pStatus( NULL )
+, pList( NULL )
+, pWork( NULL )
+, pPrn( NULL )
+{
+
+ Application::SetDefDialogParent( this );
+ AlwaysEnableInput( TRUE );
+ pBasic = TTBasic::CreateMyBasic(); // depending on what was linked to the executable
+ bInBreak = FALSE;
+ bDisas = FALSE;
+ nFlags = 0;
+// Icon aAppIcon;
+
+ if ( pBasic->pTestObject ) // Are we the testtool?
+ {
+// aAppIcon = Icon( ResId( RID_APPICON2 ) );
+ aAppName = String( SttResId( IDS_APPNAME2 ) );
+ }
+ else
+ {
+// aAppIcon = Icon( ResId( RID_APPICON ) );
+ aAppName = String( SttResId( IDS_APPNAME ) );
+ }
+
+ // Menu:
+ MenuBar *pBar = new MenuBar( SttResId( RID_APPMENUBAR ) );
+ SetMenuBar( pBar );
+
+ pBar->SetHighlightHdl( LINK( this, BasicFrame, HighlightMenu ) );
+
+
+ // Menu Handler:
+ PopupMenu* pFileMenu = pBar->GetPopupMenu( RID_APPFILE );
+ pFileMenu->SetSelectHdl( LINK( this, BasicFrame, MenuCommand ) );
+ pFileMenu->SetHighlightHdl( LINK( this, BasicFrame, HighlightMenu ) );
+ pFileMenu->SetActivateHdl( LINK( this, BasicFrame, InitMenu ) );
+ pFileMenu->SetDeactivateHdl( LINK( this, BasicFrame, DeInitMenu ) );
+ if (Basic().pTestObject ) // Are we TestTool?
+ {
+ pFileMenu->RemoveItem( pFileMenu->GetItemPos( RID_FILELOADLIB ) -1 ); // Separator before
+ pFileMenu->RemoveItem( pFileMenu->GetItemPos( RID_FILELOADLIB ) );
+ pFileMenu->RemoveItem( pFileMenu->GetItemPos( RID_FILESAVELIB ) );
+ }
+
+ PopupMenu* pEditMenu = pBar->GetPopupMenu( RID_APPEDIT );
+ pEditMenu->SetSelectHdl( LINK( this, BasicFrame, MenuCommand ) );
+ pEditMenu->SetHighlightHdl( LINK( this, BasicFrame, HighlightMenu ) );
+ pEditMenu->SetActivateHdl( LINK( this, BasicFrame, InitMenu ) );
+ pEditMenu->SetDeactivateHdl( LINK( this, BasicFrame, DeInitMenu ) );
+ PopupMenu* pRunMenu = pBar->GetPopupMenu( RID_APPRUN );
+ pRunMenu->SetSelectHdl( LINK( this, BasicFrame, MenuCommand ) );
+ pRunMenu->SetHighlightHdl( LINK( this, BasicFrame, HighlightMenu ) );
+ pRunMenu->SetActivateHdl( LINK( this, BasicFrame, InitMenu ) );
+ pRunMenu->SetDeactivateHdl( LINK( this, BasicFrame, DeInitMenu ) );
+ if (Basic().pTestObject ) // Are we TestTool?
+ {
+ pRunMenu->RemoveItem( pRunMenu->GetItemPos( RID_RUNDISAS ) );
+ pRunMenu->RemoveItem( pRunMenu->GetItemPos( RID_RUNCOMPILE ) );
+ }
+
+ PopupMenu *pExtras;
+ if (Basic().pTestObject ) // Are we TestTool?
+ {
+ pExtras = new PopupMenu( SttResId( RID_TT_EXTRAS ) );
+ pBar->InsertItem( RID_TT_EXTRAS, String( SttResId( RID_TT_EXTRAS_NAME ) ), 0, pBar->GetItemPos( RID_APPWINDOW ) );
+ pBar->SetPopupMenu( RID_TT_EXTRAS, pExtras );
+
+ pExtras->SetSelectHdl( LINK( this, BasicFrame, MenuCommand ) );
+ pExtras->SetHighlightHdl( LINK( this, BasicFrame, HighlightMenu ) );
+ pExtras->SetDeactivateHdl( LINK( this, BasicFrame, DeInitMenu ) );
+ }
+
+ PopupMenu* pWinMenu = pBar->GetPopupMenu( RID_APPWINDOW );
+ pWinMenu->SetSelectHdl( LINK( this, BasicFrame, MenuCommand ) );
+ pWinMenu->SetHighlightHdl( LINK( this, BasicFrame, HighlightMenu ) );
+ pWinMenu->SetDeactivateHdl( LINK( this, BasicFrame, DeInitMenu ) );
+ PopupMenu* pHelpMenu = pBar->GetPopupMenu( RID_APPHELP );
+ pHelpMenu->SetSelectHdl( LINK( this, BasicFrame, MenuCommand ) );
+ pHelpMenu->SetHighlightHdl( LINK( this, BasicFrame, HighlightMenu ) );
+ pHelpMenu->SetActivateHdl( LINK( this, BasicFrame, InitMenu ) );
+ pHelpMenu->SetDeactivateHdl( LINK( this, BasicFrame, DeInitMenu ) );
+
+#ifndef UNX
+ pPrn = new BasicPrinter;
+#else
+ pPrn = NULL;
+#endif
+ pList = new EditList;
+ pStatus = new StatusLine( this );
+
+ LoadIniFile();
+
+ UpdateTitle();
+// SetIcon( aAppIcon );
+
+ // Size: half width, 0.75 * height - 2 * IconSize
+ {
+ Config aConf(Config::GetConfigName( Config::GetDefDirectory(), CUniString("testtool") ));
+ aConf.SetGroup("WinGeom");
+ SetWindowState( aConf.ReadKey("WinParams", "") );
+ }
+
+// pWork = new AppEdit( this, NULL );
+// pWork->Show();
+// pWork->Close();
+
+ aLineNum.SetTimeoutHdl( LINK( this, BasicFrame, ShowLineNr ) );
+ aLineNum.SetTimeout(200);
+ aLineNum.Start();
+
+
+ aCheckFiles.SetTimeout( 10000 );
+ aCheckFiles.SetTimeoutHdl( LINK( this, BasicFrame, CheckAllFiles ) );
+ aCheckFiles.Start();
+
+ GetMenuBar()->SetCloserHdl( LINK( this, BasicFrame, CloseButtonClick ) );
+ GetMenuBar()->SetFloatButtonClickHdl( LINK( this, BasicFrame, FloatButtonClick ) );
+ GetMenuBar()->SetHideButtonClickHdl( LINK( this, BasicFrame, HideButtonClick ) );
+}
+
+const ByteString ProfilePrefix("_profile_");
+const USHORT ProfilePrefixLen = ProfilePrefix.Len();
+
+void BasicFrame::LoadIniFile()
+{
+ USHORT i;
+ Config aConf(Config::GetConfigName( Config::GetDefDirectory(), CUniString("testtool") ));
+
+ for ( i = 0 ; i < aConf.GetGroupCount() ; i++ )
+ {
+ aConf.SetGroup( ByteString( aConf.GetGroupName( i ) ) );
+ if ( ( aConf.ReadKey( "Aktuell" ).Len() || aConf.ReadKey( "Alle" ).Len() )
+ &&( !aConf.ReadKey( "Current" ).Len() && !aConf.ReadKey( "All" ).Len() ) )
+ {
+ aConf.WriteKey( "Current", aConf.ReadKey( "Aktuell" ) );
+ aConf.WriteKey( "All", aConf.ReadKey( "Alle" ) );
+ }
+ }
+
+ aConf.SetGroup("Misc");
+ ByteString aTemp;
+ ByteString aCurrentProfile = aConf.ReadKey( "CurrentProfile", "Misc" );
+
+ pStatus->SetProfileName( String( aCurrentProfile.Copy( ProfilePrefixLen ), RTL_TEXTENCODING_UTF8 ) );
+
+ aConf.SetGroup( aCurrentProfile );
+ aTemp = aConf.ReadKey( "AutoReload", "0" );
+ bAutoReload = ( aTemp.CompareTo("1") == COMPARE_EQUAL );
+ aTemp = aConf.ReadKey( "AutoSave", "0" );
+ bAutoSave = ( aTemp.CompareTo("1") == COMPARE_EQUAL );
+
+ LoadLRU();
+
+ if ( pBasic )
+ pBasic->LoadIniFile();
+
+ for ( i = 0 ; i < pList->Count() ; i++ )
+ pList->GetObject( i )->LoadIniFile();
+}
+
+BasicFrame::~BasicFrame()
+{
+ AppWin* p = pList->First();
+ DBG_ASSERT( !p, "Still open FileWindows");
+ if( p )
+ while( (p = pList->Remove() ) != NULL )
+ delete p;
+
+ MenuBar *pBar = GetMenuBar();
+ SetMenuBar( NULL );
+ delete pBar;
+
+ delete pStatus;
+ delete pPrn;
+ delete pList;
+// delete pExecutionStatus;
+// delete pBasic;
+ pBasic.Clear();
+}
+
+void BasicFrame::Command( const CommandEvent& rCEvt )
+{
+ switch( rCEvt.GetCommand() ) {
+ case COMMAND_SHOWDIALOG:
+ {
+ const CommandDialogData* pData = rCEvt.GetDialogData();
+ if ( pData)
+ {
+ const int nCommand = pData->GetDialogId();
+
+ switch (nCommand)
+ {
+ case SHOWDIALOG_ID_PREFERENCES :
+ Command( RID_OPTIONS );
+ break;
+
+ case SHOWDIALOG_ID_ABOUT :
+ Command( RID_HELPABOUT );
+ break;
+
+ default :
+ ;
+ }
+ }
+ }
+ break;
+ }
+}
+
+void BasicFrame::UpdateTitle()
+{
+ String aTitle;
+ aTitle += aAppName;
+ if ( aAppMode.Len() )
+ {
+ aTitle.AppendAscii(" [");
+ aTitle += aAppMode;
+ aTitle.AppendAscii("]");
+ }
+ aTitle.AppendAscii(" - ");
+ aTitle += aAppFile;
+ SetText( aTitle );
+}
+
+IMPL_LINK( BasicFrame, CheckAllFiles, Timer*, pTimer )
+{
+ if ( pWork )
+ {
+ AppWin* pStartWin = pWork;
+ Window* pFocusWin = Application::GetFocusWindow();
+ for ( int i = pList->Count()-1 ; i >= 0 ; i-- )
+ pList->GetObject( i )->CheckReload();
+
+ if ( pWork != pStartWin )
+ {
+ pWork = pStartWin;
+ pWork->ToTop();
+ }
+ if ( pFocusWin )
+ pFocusWin->GrabFocus();
+ }
+ pTimer->Start();
+ return 0;
+}
+
+BOOL BasicFrame::IsAutoRun()
+{
+ return bIsAutoRun;
+}
+
+void BasicFrame::SetAutoRun( BOOL bAuto )
+{
+ bIsAutoRun = bAuto;
+}
+
+void BasicFrame::Notify( SfxBroadcaster&, const SfxHint& rHint )
+{
+ if ( rHint.ISA( TTExecutionStatusHint ) )
+ {
+ TTExecutionStatusHint *pStatusHint = ( TTExecutionStatusHint* )&rHint;
+ switch ( pStatusHint->GetType() )
+ {
+ case TT_EXECUTION_ENTERWAIT:
+ {
+ EnterWait();
+ }
+ break;
+ case TT_EXECUTION_LEAVEWAIT:
+ {
+ LeaveWait();
+ }
+ break;
+ case TT_EXECUTION_SHOW_ACTION:
+ {
+ String aTotalStatus( pStatusHint->GetExecutionStatus() );
+ aTotalStatus.AppendAscii( " " );
+ aTotalStatus.Append( pStatusHint->GetAdditionalExecutionStatus() );
+ pStatus->Message( aTotalStatus );
+/* if ( !pExecutionStatus )
+ pExecutionStatus = new FloatingExecutionStatus( this );
+ pExecutionStatus->SetStatus( pStatusHint->GetExecutionStatus() );
+ pExecutionStatus->SetAdditionalInfo( pStatusHint->GetAdditionalExecutionStatus() );*/
+ }
+ break;
+ case TT_EXECUTION_HIDE_ACTION:
+ {
+/* if ( pExecutionStatus )
+ {
+ delete pExecutionStatus;
+ pExecutionStatus = NULL;
+ }*/
+ }
+ break;
+ }
+ }
+
+
+ Broadcast( rHint );
+}
+
+void BasicFrame::Resize()
+{
+ Config aConf(Config::GetConfigName( Config::GetDefDirectory(), CUniString("testtool") ));
+ aConf.SetGroup("WinGeom");
+ aConf.WriteKey("WinParams",GetWindowState());
+
+ // Statusbar
+ Size aOutSize = GetOutputSizePixel();
+ Size aStatusSize = pStatus->GetSizePixel();
+ Point aStatusPos( 0, aOutSize.Height() - aStatusSize.Height() );
+ aStatusSize.Width() = aOutSize.Width();
+
+ pStatus->SetPosPixel( aStatusPos );
+ pStatus->SetSizePixel( aStatusSize );
+
+
+ // Resize possibly maximized window
+ ULONG i;
+ for( i = pList->Count(); i > 0 ; i-- )
+ {
+ if ( pList->GetObject( i-1 )->GetWinState() == TT_WIN_STATE_MAX )
+ pList->GetObject( i-1 )->Maximize();
+ }
+}
+
+void BasicFrame::Move()
+{
+ Config aConf(Config::GetConfigName( Config::GetDefDirectory(), CUniString("testtool") ));
+ aConf.SetGroup("WinGeom");
+ aConf.WriteKey("WinParams",GetWindowState());
+}
+
+void BasicFrame::GetFocus()
+{
+ if ( pWork )
+ pWork->GrabFocus();
+}
+
+IMPL_LINK( BasicFrame, CloseButtonClick, void*, EMPTYARG )
+{
+ AppWin* p;
+ for ( p = pList->Last() ; p && p->GetWinState() != TT_WIN_STATE_MAX ; p = pList->Prev() )
+ {};
+ if ( p )
+ p->GrabFocus();
+ return Command( RID_FILECLOSE, FALSE );
+}
+
+IMPL_LINK( BasicFrame, FloatButtonClick, void*, EMPTYARG )
+{
+ AppWin* p;
+ for ( p = pList->Last() ; p && p->GetWinState() != TT_WIN_STATE_MAX ; p = pList->Prev() )
+ {};
+ if ( p )
+ p->TitleButtonClick( TITLE_BUTTON_DOCKING );
+ return 1;
+}
+
+IMPL_LINK( BasicFrame, HideButtonClick, void*, EMPTYARG )
+{
+ AppWin* p;
+ for ( p = pList->Last() ; p && p->GetWinState() != TT_WIN_STATE_MAX ; p = pList->Prev() )
+ {};
+ if ( p )
+ p->TitleButtonClick( TITLE_BUTTON_HIDE );
+ return 1;
+}
+
+void BasicFrame::WinShow_Hide()
+{
+ if ( !pList->Count() )
+ return;
+
+ AppWin* p;
+ BOOL bWasFullscreen = FALSE;
+ for ( p = pList->Last() ; p ; p = pList->Prev() )
+ {
+ if ( p->pDataEdit )
+ {
+ if ( p->GetWinState() & TT_WIN_STATE_HIDE // Hidden
+ || ( bWasFullscreen && ( !p->IsPined() || p->GetWinState() & TT_WIN_STATE_MAX ))
+ )
+ p->Hide( SHOW_NOFOCUSCHANGE | SHOW_NOACTIVATE );
+ else
+ p->Show( TRUE, SHOW_NOFOCUSCHANGE | SHOW_NOACTIVATE );
+ }
+ bWasFullscreen |= p->GetWinState() == TT_WIN_STATE_MAX;
+ }
+}
+
+void BasicFrame::WinMax_Restore()
+{
+ // The application buttons
+ AppWin* p;
+ BOOL bHasFullscreenWin = FALSE;
+ for( p = pList->First(); p && !bHasFullscreenWin ; p = pList->Next() )
+ bHasFullscreenWin |= ( p->GetWinState() == TT_WIN_STATE_MAX );
+ GetMenuBar()->ShowButtons( bHasFullscreenWin, FALSE, FALSE );
+ WinShow_Hide();
+}
+
+void BasicFrame::RemoveWindow( AppWin *pWin )
+{
+// delete pIcon;
+ pList->Remove( pWin );
+ pWork = pList->Last();
+
+ WinShow_Hide();
+
+ if ( pWork )
+ pWork->ToTop();
+
+ WinMax_Restore();
+
+ Menu* pMenu = GetMenuBar();
+ if( pList->Count() == 0 ) {
+ pMenu->EnableItem( RID_APPEDIT, FALSE );
+ pMenu->EnableItem( RID_APPRUN, FALSE );
+ pMenu->EnableItem( RID_APPWINDOW, FALSE );
+ }
+
+ PopupMenu* pWinMenu = pMenu->GetPopupMenu( RID_APPWINDOW );
+
+ pWinMenu->RemoveItem( pWinMenu->GetItemPos( pWin->GetWinId() ) );
+
+ // Remove separator
+ if ( pWinMenu->GetItemType( pWinMenu->GetItemCount() - 1 ) == MENUITEM_SEPARATOR )
+ pWinMenu->RemoveItem( pWinMenu->GetItemCount() - 1 );
+
+ pStatus->LoadTaskToolBox();
+}
+
+void BasicFrame::AddWindow( AppWin *pWin )
+{
+ pList->Insert( pWin, LIST_APPEND );
+ pWork = pWin;
+
+ WinMax_Restore();
+
+ // Enable main menu
+ MenuBar* pMenu = GetMenuBar();
+ if( pList->Count() > 0 ) {
+ pMenu->EnableItem( RID_APPEDIT, TRUE );
+ pMenu->EnableItem( RID_APPRUN, TRUE );
+ pMenu->EnableItem( RID_APPWINDOW, TRUE );
+ }
+
+ PopupMenu* pWinMenu = pMenu->GetPopupMenu( RID_APPWINDOW );
+ USHORT nLastID = pWinMenu->GetItemId( pWinMenu->GetItemCount() - 1 );
+
+ // Separator necessary
+ if ( nLastID < RID_WIN_FILE1 && pWinMenu->GetItemType( pWinMenu->GetItemCount() - 1 ) != MENUITEM_SEPARATOR )
+ pWinMenu->InsertSeparator();
+
+ // Find free ID
+ USHORT nFreeID = RID_WIN_FILE1;
+ while ( pWinMenu->GetItemPos( nFreeID ) != MENU_ITEM_NOTFOUND && nFreeID < RID_WIN_FILEn )
+ nFreeID++;
+
+ pWin->SetWinId( nFreeID );
+ pWinMenu->InsertItem( nFreeID, pWin->GetText() );
+}
+
+void BasicFrame::WindowRenamed( AppWin *pWin )
+{
+ MenuBar* pMenu = GetMenuBar();
+ PopupMenu* pWinMenu = pMenu->GetPopupMenu( RID_APPWINDOW );
+
+ pWinMenu->SetItemText( pWin->GetWinId(), pWin->GetText() );
+
+ pStatus->LoadTaskToolBox();
+
+ aAppFile = pWin->GetText();
+ UpdateTitle();
+}
+
+void BasicFrame::FocusWindow( AppWin *pWin )
+{
+ pWork = pWin;
+ pList->Remove( pWin );
+ pList->Insert( pWin, LIST_APPEND );
+ pWin->Minimize( FALSE );
+
+ aAppFile = pWin->GetText();
+ UpdateTitle();
+
+ WinShow_Hide();
+ pStatus->LoadTaskToolBox();
+}
+
+BOOL BasicFrame::Close()
+{
+ if( bInBreak || Basic().IsRunning() )
+ if( RET_NO == QueryBox( this, SttResId( IDS_RUNNING ) ).Execute() )
+ return FALSE;
+
+ StarBASIC::Stop();
+ bInBreak = FALSE;
+ if( CloseAll() )
+ {
+ aLineNum.Stop();
+
+ // Close remaining dialogs to avoid assertions
+ while ( GetWindow( WINDOW_OVERLAP )->GetWindow( WINDOW_FIRSTOVERLAP ) )
+ {
+ delete GetWindow( WINDOW_OVERLAP )->GetWindow( WINDOW_FIRSTOVERLAP )->GetWindow( WINDOW_CLIENT );
+ }
+
+ Application::SetDefDialogParent( NULL );
+ WorkWindow::Close();
+
+ return TRUE;
+ } else return FALSE;
+}
+
+BOOL BasicFrame::CloseAll()
+{
+ while ( pList->Count() )
+ if ( !pList->Last()->Close() )
+ return FALSE;
+ return TRUE;
+}
+
+BOOL BasicFrame::CompileAll()
+{
+ AppWin* p;
+ for( p = pList->First(); p; p = pList->Next() )
+ if( p->ISA(AppBasEd) && !((AppBasEd*)p)->Compile() ) return FALSE;
+ return TRUE;
+}
+
+// Setup menu
+#define MENU2FILENAME( Name ) Name.Copy( Name.SearchAscii(" ") +1).EraseAllChars( '~' )
+#define LRUNr( nNr ) CByteString("LRU").Append( ByteString::CreateFromInt32( nNr ) )
+String FILENAME2MENU( USHORT nNr, String aName )
+{
+ String aRet;
+ if ( nNr <= 9 )
+ aRet = CUniString("~").Append( UniString::CreateFromInt32( nNr ) );
+ else if ( nNr == 10 )
+ aRet = CUniString("1~0");
+ else
+ aRet = UniString::CreateFromInt32( nNr );
+
+ return aRet.AppendAscii(" ").Append( aName );
+}
+
+void BasicFrame::AddToLRU(String const& aFile)
+{
+ Config aConfig(Config::GetConfigName( Config::GetDefDirectory(), CUniString("testtool") ));
+ PopupMenu *pPopup = GetMenuBar()->GetPopupMenu(RID_APPFILE);
+
+ aConfig.SetGroup("LRU");
+ USHORT nMaxLRU = (USHORT)aConfig.ReadKey("MaxLRU","4").ToInt32();
+ DirEntry aFileEntry( aFile );
+ USHORT i,nLastMove = nMaxLRU;
+
+ for ( i = 1 ; i<nMaxLRU && nLastMove == nMaxLRU ; i++ )
+ {
+ if ( DirEntry( UniString( aConfig.ReadKey(LRUNr(i),""), RTL_TEXTENCODING_UTF8 ) ) == aFileEntry )
+ nLastMove = i;
+ }
+
+ if ( pPopup->GetItemPos( IDM_FILE_LRU1 ) == MENU_ITEM_NOTFOUND )
+ pPopup->InsertSeparator();
+ for ( i = nLastMove ; i>1 ; i-- )
+ {
+ if ( aConfig.ReadKey(LRUNr(i-1),"").Len() )
+ {
+ aConfig.WriteKey(LRUNr(i), aConfig.ReadKey(LRUNr(i-1),""));
+ if ( pPopup->GetItemPos( IDM_FILE_LRU1 + i-1 ) == MENU_ITEM_NOTFOUND )
+ pPopup->InsertItem(IDM_FILE_LRU1 + i-1, FILENAME2MENU( i, MENU2FILENAME( pPopup->GetItemText(IDM_FILE_LRU1 + i-1-1) ) ));
+ else
+ pPopup->SetItemText(IDM_FILE_LRU1 + i-1,FILENAME2MENU( i, MENU2FILENAME( pPopup->GetItemText(IDM_FILE_LRU1 + i-1-1) ) ));
+ }
+ }
+ aConfig.WriteKey(LRUNr(1), ByteString( aFile, RTL_TEXTENCODING_UTF8 ) );
+ if ( pPopup->GetItemPos( IDM_FILE_LRU1 ) == MENU_ITEM_NOTFOUND )
+ pPopup->InsertItem(IDM_FILE_LRU1,FILENAME2MENU( 1, aFile));
+ else
+ pPopup->SetItemText(IDM_FILE_LRU1,FILENAME2MENU( 1, aFile));
+}
+
+void BasicFrame::LoadLRU()
+{
+ Config aConfig(Config::GetConfigName( Config::GetDefDirectory(), CUniString("testtool") ));
+ PopupMenu *pPopup = GetMenuBar()->GetPopupMenu(RID_APPFILE);
+ BOOL bAddSep = TRUE;
+
+ aConfig.SetGroup("LRU");
+ USHORT nMaxLRU = (USHORT)aConfig.ReadKey("MaxLRU","4").ToInt32();
+
+ if ( pPopup )
+ bAddSep = pPopup->GetItemPos( IDM_FILE_LRU1 ) == MENU_ITEM_NOTFOUND;
+
+ USHORT i;
+ for ( i = 1; i <= nMaxLRU && pPopup != NULL; i++)
+ {
+ String aFile = UniString( aConfig.ReadKey(LRUNr(i)), RTL_TEXTENCODING_UTF8 );
+
+ if (aFile.Len() != 0)
+ {
+ if (bAddSep)
+ {
+ pPopup->InsertSeparator();
+ bAddSep = FALSE;
+ }
+
+ if ( pPopup->GetItemPos( IDM_FILE_LRU1 + i-1 ) == MENU_ITEM_NOTFOUND )
+ pPopup->InsertItem(IDM_FILE_LRU1 + i-1, FILENAME2MENU( i, aFile ));
+ else
+ pPopup->SetItemText(IDM_FILE_LRU1 + i-1, FILENAME2MENU( i, aFile ));
+ }
+ }
+ i = nMaxLRU+1;
+ while ( pPopup->GetItemPos( IDM_FILE_LRU1 + i-1 ) != MENU_ITEM_NOTFOUND )
+ {
+ pPopup->RemoveItem( pPopup->GetItemPos( IDM_FILE_LRU1 + i-1 ) );
+ i++;
+ }
+}
+
+IMPL_LINK( BasicFrame, InitMenu, Menu *, pMenu )
+{
+ BOOL bNormal = BOOL( !bInBreak );
+ pMenu->EnableItem( RID_RUNCOMPILE, bNormal );
+
+ BOOL bHasEdit = BOOL( /*bNormal &&*/ pWork != NULL );
+
+// pMenu->EnableItem( RID_FILENEW, bNormal ); // always possible
+// pMenu->EnableItem( RID_FILEOPEN, bNormal );
+ pMenu->EnableItem( RID_FILECLOSE, bHasEdit );
+ pMenu->EnableItem( RID_FILESAVE, bHasEdit );
+ pMenu->EnableItem( RID_FILESAVEAS, bHasEdit );
+ pMenu->EnableItem( RID_FILEPRINT, bHasEdit );
+ pMenu->EnableItem( RID_FILESETUP, bHasEdit );
+ pMenu->EnableItem( RID_FILELOADLIB, bNormal );
+ pMenu->EnableItem( RID_FILESAVELIB, bHasEdit );
+
+ BOOL bHasErr = BOOL( bNormal && pBasic->GetErrors() != 0 );
+ BOOL bNext = bHasErr & bNormal;
+ BOOL bPrev = bHasErr & bNormal;
+ if( bHasErr )
+ {
+ ULONG n = pBasic->aErrors.GetCurPos();
+ if( n == 0 )
+ bPrev = FALSE;
+ if( USHORT(n+1) == pBasic->GetErrors() )
+ bNext = FALSE;
+ }
+ pMenu->EnableItem( RID_RUNNEXTERR, bNext );
+ pMenu->EnableItem( RID_RUNPREVERR, bPrev );
+ pMenu->CheckItem( RID_RUNDISAS, bDisas );
+ if( pWork )
+ pWork->InitMenu( pMenu );
+
+ return TRUE;
+}
+
+IMPL_LINK_INLINE_START( BasicFrame, DeInitMenu, Menu *, pMenu )
+{
+ (void) pMenu; /* avoid warning about unused parameter */
+/* pMenu->EnableItem( RID_RUNCOMPILE );
+
+ pMenu->EnableItem( RID_FILECLOSE );
+ pMenu->EnableItem( RID_FILESAVE );
+ pMenu->EnableItem( RID_FILESAVEAS );
+ pMenu->EnableItem( RID_FILEPRINT );
+ pMenu->EnableItem( RID_FILESETUP );
+ pMenu->EnableItem( RID_FILELOADLIB );
+ pMenu->EnableItem( RID_FILESAVELIB );
+
+ pMenu->EnableItem( RID_RUNNEXTERR );
+ pMenu->EnableItem( RID_RUNPREVERR );
+ if( pWork ) pWork->DeInitMenu( pMenu );
+*/
+ SetAutoRun( FALSE );
+ String aString;
+ pStatus->Message( aString );
+ return 0L;
+}
+IMPL_LINK_INLINE_END( BasicFrame, DeInitMenu, Menu *, pMenu )
+
+IMPL_LINK_INLINE_START( BasicFrame, HighlightMenu, Menu *, pMenu )
+{
+ String s = pMenu->GetHelpText( pMenu->GetCurItemId() );
+ pStatus->Message( s );
+ return 0L;
+}
+IMPL_LINK_INLINE_END( BasicFrame, HighlightMenu, Menu *, pMenu )
+
+IMPL_LINK_INLINE_START( BasicFrame, MenuCommand, Menu *, pMenu )
+{
+ USHORT nId = pMenu->GetCurItemId();
+ BOOL bChecked = pMenu->IsItemChecked( nId );
+ return Command( nId, bChecked );
+}
+IMPL_LINK_INLINE_END( BasicFrame, MenuCommand, Menu *, pMenu )
+
+IMPL_LINK_INLINE_START( BasicFrame, Accel, Accelerator*, pAcc )
+{
+ SetAutoRun( FALSE );
+ return Command( pAcc->GetCurItemId() );
+}
+IMPL_LINK_INLINE_END( BasicFrame, Accel, Accelerator*, pAcc )
+
+IMPL_LINK_INLINE_START( BasicFrame, ShowLineNr, AutoTimer *, pTimer )
+{
+ (void) pTimer; /* avoid warning about unused parameter */
+ String aPos;
+ if ( pWork && pWork->ISA(AppBasEd))
+ {
+ aPos = String::CreateFromInt32(pWork->GetLineNr());
+ }
+ pStatus->Pos( aPos );
+ return 0L;
+}
+IMPL_LINK_INLINE_END( BasicFrame, ShowLineNr, AutoTimer *, pTimer )
+
+
+MsgEdit* BasicFrame::GetMsgTree( String aLogFileName )
+{
+ if ( FindErrorWin( aLogFileName ) )
+ {
+ return FindErrorWin( aLogFileName )->GetMsgTree();
+ }
+ else
+ { // create new Window on the fly
+ AppError *pNewWindow = new AppError( this, aLogFileName );
+ pNewWindow->Show();
+ pNewWindow->GrabFocus();
+ return pNewWindow->GetMsgTree();
+ }
+}
+
+IMPL_LINK( BasicFrame, Log, TTLogMsg *, pLogMsg )
+{
+ GetMsgTree( pLogMsg->aLogFileName )->AddAnyMsg( pLogMsg );
+ return 0L;
+}
+
+IMPL_LINK( BasicFrame, WinInfo, WinInfoRec*, pWinInfo )
+{
+ if ( !pDisplayHidDlg )
+ pDisplayHidDlg = new DisplayHidDlg( this );
+ if ( pDisplayHidDlg )
+ {
+ pDisplayHidDlg->AddData( pWinInfo );
+ pDisplayHidDlg->Show();
+ }
+ return 0;
+}
+
+AppBasEd* BasicFrame::CreateModuleWin( SbModule* pMod )
+{
+ String aModName = pMod->GetName();
+ if ( aModName.Copy(0,2).CompareToAscii("--") == COMPARE_EQUAL )
+ aModName.Erase(0,2);
+ pMod->SetName(aModName);
+ AppBasEd* p = new AppBasEd( this, pMod );
+ p->Show();
+ p->GrabFocus();
+ p->ToTop();
+ return p;
+}
+
+BOOL BasicFrame::LoadFile( String aFilename )
+{
+ BOOL bIsResult = DirEntry( aFilename ).GetExtension().CompareIgnoreCaseToAscii("RES") == COMPARE_EQUAL;
+ BOOL bIsBasic = DirEntry( aFilename ).GetExtension().CompareIgnoreCaseToAscii("BAS") == COMPARE_EQUAL;
+ bIsBasic |= DirEntry( aFilename ).GetExtension().CompareIgnoreCaseToAscii("INC") == COMPARE_EQUAL;
+
+ AppWin* p;
+ BOOL bSuccess = TRUE;
+ if ( bIsResult )
+ {
+ p = new AppError( this, aFilename );
+ }
+ else if ( bIsBasic )
+ {
+ p = new AppBasEd( this, NULL );
+ bSuccess = p->Load( aFilename );
+ }
+ else
+ {
+ p = new AppEdit( this );
+ bSuccess = p->Load( aFilename );
+ }
+ if ( bSuccess )
+ {
+ p->Show();
+ p->GrabFocus();
+ }
+ else
+ delete p;
+
+ return bSuccess;
+}
+
+// Execute command
+long BasicFrame::Command( short nID, BOOL bChecked )
+{
+ BasicError* pErr;
+
+ switch( nID ) {
+ case RID_FILENEW: {
+ AppBasEd* p = new AppBasEd( this, NULL );
+ p->Show();
+ p->GrabFocus();
+ // InitMenu(GetMenuBar()->GetPopupMenu( RID_APPRUN ));
+ } break;
+ case RID_FILEOPEN:
+ {
+ String s;
+ if( QueryFileName( s, FT_BASIC_SOURCE | FT_RESULT_FILE, FALSE ) ) {
+ AddToLRU( s );
+ LoadFile( s );
+// InitMenu(GetMenuBar()->GetPopupMenu( RID_APPRUN ));
+ }
+ } break;
+ case RID_FILELOADLIB:
+ LoadLibrary();
+ break;
+ case RID_FILESAVELIB:
+ SaveLibrary();
+ break;
+ case RID_FILECLOSE:
+ if( pWork && pWork->Close() ){};
+// InitMenu(GetMenuBar()->GetPopupMenu( RID_APPRUN ));
+ break;
+ case RID_FILEPRINT:
+ if( pWork )
+ pPrn->Print( pWork->GetText(), pWork->pDataEdit->GetText(), this );
+ break;
+ case RID_FILESETUP:
+ break;
+ case RID_QUIT:
+ if( Close() ) aBasicApp.Quit();
+ break;
+
+
+ case RID_RUNSTART:
+ nFlags = SbDEBUG_BREAK;
+ goto start;
+ case RID_RUNSTEPOVER:
+ nFlags = SbDEBUG_STEPINTO | SbDEBUG_STEPOVER;
+ goto start;
+ case RID_RUNSTEPINTO:
+ nFlags = SbDEBUG_STEPINTO;
+ goto start;
+ case RID_RUNTOCURSOR:
+ if ( pWork && pWork->ISA(AppBasEd) && ((AppBasEd*)pWork)->GetModule()->SetBP(pWork->GetLineNr()) )
+ {
+ SbModule *pModule = ((AppBasEd*)pWork)->GetModule();
+#if OSL_DEBUG_LEVEL > 1
+ USHORT x;
+ x = pWork->GetLineNr();
+ x = ((AppBasEd*)pWork)->GetModule()->GetBPCount();
+ if ( !x )
+ x = pModule->SetBP(pWork->GetLineNr());
+ x = pModule->GetBPCount();
+#endif
+
+ for ( USHORT nMethod = 0; nMethod < pModule->GetMethods()->Count(); nMethod++ )
+ {
+ SbMethod* pMethod = (SbMethod*)pModule->GetMethods()->Get( nMethod );
+ DBG_ASSERT( pMethod, "Methode nicht gefunden! (NULL)" );
+ pMethod->SetDebugFlags( pMethod->GetDebugFlags() | SbDEBUG_BREAK );
+ }
+ }
+ nFlags = SbDEBUG_BREAK;
+ goto start;
+ start: {
+// InitMenu(GetMenuBar()->GetPopupMenu( RID_APPRUN ));
+ if ( !Basic().IsRunning() || bInBreak )
+ {
+ AppBasEd* p = NULL;
+ if( pWork && pWork->ISA(AppBasEd) )
+ {
+ p = ((AppBasEd*)pWork);
+ p->ToTop();
+ }
+ else
+ {
+ AppWin *w = NULL;
+ for ( w = pList->Last() ; w ? !w->ISA(AppBasEd) : FALSE ; w = pList->Prev() ) ;
+ if ( w )
+ {
+ p = ((AppBasEd*)w);
+ p->ToTop();
+ }
+ else
+ if ( IsAutoRun() )
+ printf( "No file loaded to run.\n" );
+ }
+
+ if( bInBreak )
+ // Reset the flag
+ bInBreak = FALSE;
+ else
+ {
+ if( IsAutoSave() && !SaveAll() ) break;
+ if( !CompileAll() ) break;
+ String aString;
+ pStatus->Message( aString );
+ if( p )
+ {
+ BasicDLL::SetDebugMode( TRUE );
+ Basic().ClearGlobalVars();
+ p->Run();
+ BasicDLL::SetDebugMode( FALSE );
+ // If cancelled during Interactive=FALSE
+// BasicDLL::EnableBreak( TRUE );
+ }
+ }}
+ }
+// InitMenu(GetMenuBar()->GetPopupMenu( RID_APPRUN )); // after run
+ break;
+ case RID_RUNCOMPILE:
+ if( pWork && pWork->ISA(AppBasEd) && SaveAll() )
+ {
+ ((AppBasEd*)pWork)->Compile();
+ pWork->ToTop();
+ pWork->GrabFocus();
+ }
+ break;
+ case RID_RUNDISAS:
+ bDisas = BOOL( !bChecked );
+ break;
+ case RID_RUNBREAK:
+ if ( Basic().IsRunning() && !bInBreak )
+ {
+// pINST->CalcBreakCallLevel(SbDEBUG_STEPINTO);
+ pINST->nBreakCallLvl = pINST->nCallLvl;
+ }
+ break;
+ case RID_RUNSTOP:
+ Basic().Stop();
+ bInBreak = FALSE;
+ break;
+ case RID_RUNNEXTERR:
+ pErr = pBasic->aErrors.Next();
+ if( pErr ) pErr->Show();
+ break;
+ case RID_RUNPREVERR:
+ pErr = pBasic->aErrors.Prev();
+ if( pErr ) pErr->Show();
+ break;
+
+ case RID_OPTIONS:
+ {
+ OptionsDialog *pOptions = new OptionsDialog( this, SttResId(IDD_OPTIONS_DLG) );
+ pOptions->Show();
+ }
+ break;
+ case RID_DECLARE_HELPER:
+ InfoBox( this, SttResId( IDS_NOT_YET_IMPLEMENTED ) ).Execute();
+ break;
+
+ case RID_WINTILE:
+ {
+ WindowArrange aArange;
+ for ( ULONG i = 0 ; i < pList->Count() ; i++ )
+ {
+ aArange.AddWindow( pList->GetObject( i ) );
+ pList->GetObject( i )->Restore();
+ }
+
+
+ sal_Int32 nTitleHeight;
+ {
+ sal_Int32 nDummy1, nDummy2, nDummy3;
+ GetBorder( nDummy1, nTitleHeight, nDummy2, nDummy3 );
+ }
+
+ Size aSize = GetOutputSizePixel();
+ aSize.Height() -= nTitleHeight;
+ Rectangle aRect( Point( 0, nTitleHeight ), aSize );
+
+ aArange.Arrange( WINDOWARRANGE_TILE, aRect );
+
+ }
+ break;
+ case RID_WINTILEHORZ:
+ {
+ WindowArrange aArange;
+ for ( ULONG i = 0 ; i < pList->Count() ; i++ )
+ {
+ aArange.AddWindow( pList->GetObject( i ) );
+ pList->GetObject( i )->Restore();
+ }
+
+
+ sal_Int32 nTitleHeight;
+ {
+ sal_Int32 nDummy1, nDummy2, nDummy3;
+ GetBorder( nDummy1, nTitleHeight, nDummy2, nDummy3 );
+ }
+
+ Size aSize = GetOutputSizePixel();
+ aSize.Height() -= nTitleHeight;
+ Rectangle aRect( Point( 0, nTitleHeight ), aSize );
+
+ aArange.Arrange( WINDOWARRANGE_HORZ, aRect );
+
+ }
+ break;
+ case RID_WINTILEVERT:
+//#define WINDOWARRANGE_TILE 1
+//#define WINDOWARRANGE_HORZ 2
+//#define WINDOWARRANGE_VERT 3
+//#define WINDOWARRANGE_CASCADE 4
+ {
+ WindowArrange aArange;
+ for ( ULONG i = 0 ; i < pList->Count() ; i++ )
+ {
+ aArange.AddWindow( pList->GetObject( i ) );
+ pList->GetObject( i )->Restore();
+ }
+
+
+ sal_Int32 nTitleHeight;
+ {
+ sal_Int32 nDummy1, nDummy2, nDummy3;
+ GetBorder( nDummy1, nTitleHeight, nDummy2, nDummy3 );
+ }
+
+ Size aSize = GetOutputSizePixel();
+ aSize.Height() -= nTitleHeight;
+ Rectangle aRect( Point( 0, nTitleHeight ), aSize );
+
+ aArange.Arrange( WINDOWARRANGE_VERT, aRect );
+
+ }
+ break;
+ case RID_WINCASCADE:
+ {
+ for ( USHORT i = 0 ; i < pList->Count() ; i++ )
+ {
+ pList->GetObject( i )->Cascade( i );
+ }
+ }
+ break;
+
+/* case RID_HELPTOPIC:
+ if( pWork ) pWork->Help();
+ break;
+ case RID_HELPKEYS:
+ aBasicApp.pHelp->Start( CUniString( "Keyboard" ) );
+ break;
+ case RID_HELPINDEX:
+ aBasicApp.pHelp->Start( OOO_HELP_INDEX );
+ break;
+ case RID_HELPINTRO:
+ aBasicApp.pHelp->Start( OOO_HELP_HELPONHELP );
+ break;
+*/ case RID_HELPABOUT:
+ {
+ SttResId aResId( IDD_ABOUT_DIALOG );
+ if ( Basic().pTestObject ) // Are we TestTool?
+ aResId = SttResId( IDD_TT_ABOUT_DIALOG );
+ else
+ aResId = SttResId( IDD_ABOUT_DIALOG );
+ AboutDialog aAbout( this, aResId );
+ aAbout.Execute();
+ }
+ break;
+ case RID_POPUPEDITVAR:
+ {
+ new VarEditDialog( this, pEditVar );
+ }
+ break;
+ default:
+ if ( nID >= RID_WIN_FILE1 && nID <= RID_WIN_FILEn )
+ {
+ MenuBar* pMenu = GetMenuBar();
+ PopupMenu* pWinMenu = pMenu->GetPopupMenu( RID_APPWINDOW );
+ String aName = pWinMenu->GetItemText( nID );
+ aName.EraseAllChars( L'~' );
+ AppWin* pWin = FindWin( aName );
+ if ( pWin )
+ pWin->ToTop();
+ }
+ else if ( nID >= IDM_FILE_LRU1 && nID <= IDM_FILE_LRUn )
+ {
+ String s = MENU2FILENAME( GetMenuBar()->GetPopupMenu(RID_APPFILE)->GetItemText(nID) );
+
+ AddToLRU( s );
+ LoadFile( s );
+// InitMenu(GetMenuBar()->GetPopupMenu( RID_APPRUN ));
+ }
+ else
+ {
+// InitMenu(GetMenuBar()->GetPopupMenu( RID_APPEDIT )); // So da Delete richtig ist
+ if( pWork )
+ pWork->Command( CommandEvent( Point(), nID ) );
+// InitMenu(GetMenuBar()->GetPopupMenu( RID_APPEDIT )); // So da Delete richtig ist
+ }
+ }
+ return TRUE;
+}
+
+BOOL BasicFrame::SaveAll()
+{
+ AppWin* p, *q = pWork;
+ for( p = pList->First(); p; p = pList->Next() )
+ {
+ USHORT nRes = p->QuerySave( QUERY_DISK_CHANGED );
+ if( (( nRes == SAVE_RES_ERROR ) && QueryBox(this,SttResId(IDS_ASKSAVEERROR)).Execute() == RET_NO )
+ || ( nRes == SAVE_RES_CANCEL ) )
+ return FALSE;
+ }
+ if ( q )
+ q->ToTop();
+ return TRUE;
+}
+
+IMPL_LINK( BasicFrame, ModuleWinExists, String*, pFilename )
+{
+ return FindModuleWin( *pFilename ) != NULL;
+}
+
+AppBasEd* BasicFrame::FindModuleWin( const String& rName )
+{
+ AppWin* p;
+ for( p = pList->First(); p; p = pList->Next() )
+ {
+ if( p->ISA(AppBasEd) && ((AppBasEd*)p)->GetModName() == rName )
+ return ((AppBasEd*)p);
+ }
+ return NULL;
+}
+
+AppError* BasicFrame::FindErrorWin( const String& rName )
+{
+ AppWin* p;
+ for( p = pList->First(); p; p = pList->Next() )
+ {
+ if( p->ISA(AppError) && ((AppError*)p)->GetText() == rName )
+ return ((AppError*)p);
+ }
+ return NULL;
+}
+
+AppWin* BasicFrame::FindWin( const String& rName )
+{
+ AppWin* p;
+ for( p = pList->First(); p; p = pList->Next() )
+ {
+ if( p->GetText() == rName )
+ return p;
+ }
+ return NULL;
+}
+
+AppWin* BasicFrame::FindWin( USHORT nWinId )
+{
+ AppWin* p;
+ for( p = pList->First(); p; p = pList->Next() )
+ {
+ if( p->GetWinId() == nWinId )
+ return p;
+ }
+ return NULL;
+}
+
+AppWin* BasicFrame::IsWinValid( AppWin* pMaybeWin )
+{
+ AppWin* p;
+ for( p = pList->First(); p; p = pList->Next() )
+ {
+ if( p == pMaybeWin )
+ return p;
+ }
+ return NULL;
+}
+
+IMPL_LINK( BasicFrame, WriteString, String*, pString )
+{
+ if ( pList->Last() )
+ {
+ pList->Last()->pDataEdit->ReplaceSelected( *pString );
+ return TRUE;
+ }
+ else
+ return FALSE;
+}
+
+class NewFileDialog : public FileDialog
+{
+private:
+ String aLastPath;
+public:
+ ByteString aFilterType;
+ NewFileDialog( Window* pParent, WinBits nWinStyle ):FileDialog( pParent, nWinStyle ){};
+ virtual short Execute();
+ virtual void FilterSelect();
+};
+
+void NewFileDialog::FilterSelect()
+{
+ String aTemp = GetPath();
+ if ( aLastPath.Len() == 0 )
+ aLastPath = DirEntry( GetPath() ).GetPath().GetFull();
+ if ( aLastPath.CompareIgnoreCaseToAscii( DirEntry( GetPath() ).GetPath().GetFull() ) != COMPARE_EQUAL )
+ return; // User decides after he has changed the path
+
+ String aCurFilter = GetCurFilter();
+ USHORT nFilterNr = 0;
+ while ( nFilterNr < GetFilterCount() && aCurFilter != GetFilterName( nFilterNr ) )
+ {
+ nFilterNr++;
+ }
+ aFilterType = ByteString( GetFilterType( nFilterNr ), RTL_TEXTENCODING_UTF8 );
+
+ Config aConf(Config::GetConfigName( Config::GetDefDirectory(), CUniString("testtool") ));
+ aConf.SetGroup( "Misc" );
+ ByteString aCurrentProfile = aConf.ReadKey( "CurrentProfile", "Path" );
+ aConf.SetGroup( aCurrentProfile );
+ aLastPath = UniString( aConf.ReadKey( aFilterType, aConf.ReadKey( "BaseDir" ) ), RTL_TEXTENCODING_UTF8 );
+ SetPath( aLastPath );
+// if ( IsInExecute() )
+// SetPath( "" );
+}
+
+short NewFileDialog::Execute()
+{
+ BOOL bRet = (BOOL)FileDialog::Execute();
+ if ( bRet )
+ {
+ Config aConf(Config::GetConfigName( Config::GetDefDirectory(), CUniString("testtool") ));
+ aConf.SetGroup( "Misc" );
+ ByteString aCurrentProfile = aConf.ReadKey( "CurrentProfile", "Path" );
+ aConf.SetGroup( aCurrentProfile );
+ aConf.WriteKey( aFilterType, ByteString( DirEntry( GetPath() ).GetPath().GetFull(), RTL_TEXTENCODING_UTF8 ) );
+ aConf.WriteKey( "LastFilterName", ByteString( GetCurFilter(), RTL_TEXTENCODING_UTF8 ) );
+ }
+ return bRet;
+}
+
+BOOL BasicFrame::QueryFileName
+ (String& rName, FileType nFileType, BOOL bSave )
+{
+ NewFileDialog aDlg( this, bSave ? WinBits( WB_SAVEAS ) :
+ WinBits( WB_OPEN ) );
+ aDlg.SetText( String( SttResId( bSave ? IDS_SAVEDLG : IDS_LOADDLG ) ) );
+
+ if ( nFileType & FT_RESULT_FILE )
+ {
+ aDlg.SetDefaultExt( String( SttResId( IDS_RESFILE ) ) );
+ aDlg.AddFilter( String( SttResId( IDS_RESFILTER ) ), String( SttResId( IDS_RESFILE ) ) );
+ aDlg.AddFilter( String( SttResId( IDS_TXTFILTER ) ), String( SttResId( IDS_TXTFILE ) ) );
+ aDlg.SetCurFilter( SttResId( IDS_RESFILTER ) );
+ }
+
+ if ( nFileType & FT_BASIC_SOURCE )
+ {
+ aDlg.SetDefaultExt( String( SttResId( IDS_NONAMEFILE ) ) );
+ aDlg.AddFilter( String( SttResId( IDS_BASFILTER ) ), String( SttResId( IDS_NONAMEFILE ) ) );
+ aDlg.AddFilter( String( SttResId( IDS_INCFILTER ) ), String( SttResId( IDS_INCFILE ) ) );
+ aDlg.SetCurFilter( SttResId( IDS_BASFILTER ) );
+ }
+
+ if ( nFileType & FT_BASIC_LIBRARY )
+ {
+ aDlg.SetDefaultExt( String( SttResId( IDS_LIBFILE ) ) );
+ aDlg.AddFilter( String( SttResId( IDS_LIBFILTER ) ), String( SttResId( IDS_LIBFILE ) ) );
+ aDlg.SetCurFilter( SttResId( IDS_LIBFILTER ) );
+ }
+
+ Config aConf(Config::GetConfigName( Config::GetDefDirectory(), CUniString("testtool") ));
+ aConf.SetGroup( "Misc" );
+ ByteString aCurrentProfile = aConf.ReadKey( "CurrentProfile", "Path" );
+ aConf.SetGroup( aCurrentProfile );
+ ByteString aFilter( aConf.ReadKey( "LastFilterName") );
+ if ( aFilter.Len() )
+ aDlg.SetCurFilter( String( aFilter, RTL_TEXTENCODING_UTF8 ) );
+ else
+ aDlg.SetCurFilter( String( SttResId( IDS_BASFILTER ) ) );
+
+ aDlg.FilterSelect(); // Selects the last used path
+// if ( bSave )
+ if ( rName.Len() > 0 )
+ aDlg.SetPath( rName );
+
+ if( aDlg.Execute() )
+ {
+ rName = aDlg.GetPath();
+/* rExtension = aDlg.GetCurrentFilter();
+ var i:integer;
+ for ( i = 0 ; i < aDlg.GetFilterCount() ; i++ )
+ if ( rExtension == aDlg.GetFilterName( i ) )
+ rExtension = aDlg.GetFilterType( i );
+*/
+ return TRUE;
+ } else return FALSE;
+}
+
+USHORT BasicFrame::BreakHandler()
+{
+ bInBreak = TRUE;
+// InitMenu(GetMenuBar()->GetPopupMenu( RID_APPRUN ));
+// MenuBar aBar( ResId( RID_APPMENUBAR ) );
+// aBar.EnableItem( RID_APPEDIT, FALSE );
+ SetAppMode( String( SttResId ( IDS_APPMODE_BREAK ) ) );
+ while( bInBreak )
+ GetpApp()->Yield();
+ SetAppMode( String( SttResId ( IDS_APPMODE_RUN ) ) );
+// aBar.EnableItem( RID_APPEDIT, TRUE );
+// InitMenu(GetMenuBar()->GetPopupMenu( RID_APPRUN ));
+ return nFlags;
+}
+
+void BasicFrame::LoadLibrary()
+{
+ String s;
+ if( QueryFileName( s, FT_BASIC_LIBRARY, FALSE ) )
+ {
+ CloseAll();
+ SvFileStream aStrm( s, STREAM_STD_READ );
+ MyBasic* pNew = (MyBasic*) SbxBase::Load( aStrm );
+ if( pNew && pNew->ISA( MyBasic ) )
+ {
+ pBasic = pNew;
+ // Show all contents if existing
+ SbxArray* pMods = pBasic->GetModules();
+ for( USHORT i = 0; i < pMods->Count(); i++ )
+ {
+ SbModule* pMod = (SbModule*) pMods->Get( i );
+ AppWin* p = new AppBasEd( this, pMod );
+ p->Show();
+ }
+ }
+ else
+ {
+ delete pNew;
+ ErrorBox( this, SttResId( IDS_READERROR ) ).Execute();
+ }
+ }
+}
+
+void BasicFrame::SaveLibrary()
+{
+ String s;
+ if( QueryFileName( s, FT_BASIC_LIBRARY, TRUE ) )
+ {
+ SvFileStream aStrm( s, STREAM_STD_WRITE );
+ if( !Basic().Store( aStrm ) )
+ ErrorBox( this, SttResId( IDS_WRITEERROR ) ).Execute();
+ }
+}
+
+String BasicFrame::GenRealString( const String &aResString )
+{
+ xub_StrLen nStart,nGleich = 0,nEnd = 0,nStartPos = 0;
+ String aType,aValue,aResult(aResString);
+ String aString;
+ xub_StrLen nInsertPos = 0;
+ BOOL bFound;
+ bFound = FALSE;
+
+ while ( (nStart = aResult.Search(StartKenn,nStartPos)) != STRING_NOTFOUND &&
+ (nGleich = aResult.SearchAscii("=",nStart+StartKenn.Len())) != STRING_NOTFOUND &&
+ (nEnd = aResult.Search(EndKenn,nGleich+1)) != STRING_NOTFOUND)
+ {
+ aType = aResult.Copy(nStart,nGleich-nStart);
+ aValue = aResult.Copy(nGleich+1,nEnd-nGleich-1);
+ if ( aType.CompareTo(ResKenn) == COMPARE_EQUAL )
+ {
+ if ( bFound )
+ {
+ // insert results of previous resource
+ DBG_ASSERT( aString.SearchAscii( "($Arg" ) == STRING_NOTFOUND, "Argument missing in String");
+ aResult.Insert( aString, nInsertPos );
+ nStart = nStart + aString.Len();
+ nEnd = nEnd + aString.Len();
+ aString.Erase();
+ }
+// if ( Resource::GetResManager()->IsAvailable( ResId( aValue ) ) )
+ aString = String( SttResId( (USHORT)(aValue.ToInt32()) ) );
+// else
+ {
+// DBG_ERROR( "Could not load resource!" );
+// return aResString;
+ }
+ nInsertPos = nStart;
+ nStartPos = nStart;
+ aResult.Erase( nStart, nEnd-nStart+1 );
+ bFound = TRUE;
+ }
+ else if ( aType.Search(BaseArgKenn) == 0 ) // Starts with BaseArgKenn
+ {
+ // TODO: What the hell is that for??
+ USHORT nArgNr = USHORT( aType.Copy( BaseArgKenn.Len() ).ToInt32() );
+ DBG_ASSERT( aString.Search( CUniString("($Arg").Append( String::CreateFromInt32(nArgNr) ).AppendAscii(")") ) != STRING_NOTFOUND, "Extra Argument given in String");
+ aString.SearchAndReplace( CUniString("($Arg").Append( String::CreateFromInt32(nArgNr) ).AppendAscii(")"), aValue );
+ nStartPos = nStart;
+ aResult.Erase( nStart, nEnd-nStart+1 );
+ }
+ else
+ {
+ DBG_ERROR( CByteString("Unknown replacement in String: ").Append( ByteString( aResult.Copy(nStart,nEnd-nStart), RTL_TEXTENCODING_UTF8 ) ).GetBuffer() );
+ nStartPos = nStartPos + StartKenn.Len();
+ }
+ }
+ if ( bFound )
+ {
+ DBG_ASSERT( aString.SearchAscii( "($Arg" ) == STRING_NOTFOUND, "Argument missing in String");
+ aResult.Insert( aString, nInsertPos );
+ }
+ return aResult;
+}
+
+
diff --git a/basic/source/app/app.hxx b/basic/source/app/app.hxx
new file mode 100644
index 000000000000..cd76b6481def
--- /dev/null
+++ b/basic/source/app/app.hxx
@@ -0,0 +1,196 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BASICAPP_HXX
+#define _BASICAPP_HXX
+
+#include <vcl/svapp.hxx>
+#ifndef _HELP_HXX //autogen
+#include <vcl/help.hxx>
+#endif
+#ifndef _MENU_HXX //autogen
+#include <vcl/menu.hxx>
+#endif
+#ifndef _WRKWIN_HXX //autogen
+#include <vcl/wrkwin.hxx>
+#endif
+#include <vcl/timer.hxx>
+#include <svl/brdcst.hxx>
+#include <svl/lstner.hxx>
+
+class BasicFrame;
+#include <basic/mybasic.hxx>
+
+class EditList;
+class AppWin;
+class AppEdit;
+class AppBasEd;
+class MsgEdit;
+class AppError;
+class StatusLine;
+class BasicPrinter;
+struct TTLogMsg;
+
+class BasicApp : public Application {
+ short nWait; // Wait-Zaehler
+public:
+// Help* pHelp; // Hilfesystem
+ BasicFrame* pFrame; // Frame Window
+// MenuBar* pMainMenu; // Hauptmenue
+ Accelerator* pMainAccel; // Acceleratoren
+
+ void Main( );
+
+ void LoadIniFile();
+ void SetFocus();
+ void Wait( BOOL );
+ DECL_LINK( LateInit, void * );
+
+#ifdef DBG_UTIL
+ DbgPrintLine DbgPrintMsgBox;
+#endif
+};
+
+
+typedef USHORT FileType;
+
+#define FT_NO_FILE (FileType)0x00 // An error has occurred ...
+#define FT_BASIC_SOURCE (FileType)0x01
+#define FT_BASIC_INCLUDE (FileType)0x02
+#define FT_RESULT_FILE (FileType)0x04
+#define FT_RESULT_FILE_TXT (FileType)0x08
+#define FT_BASIC_LIBRARY (FileType)0x10
+
+struct WinInfoRec;
+class DisplayHidDlg;
+
+class FloatingExecutionStatus;
+
+class BasicFrame : public WorkWindow, public SfxBroadcaster, public SfxListener
+{
+using SystemWindow::Notify;
+using Window::Command;
+
+virtual BOOL Close();
+ BOOL CloseAll(); // Close all windows
+ BOOL CompileAll(); // Compile all texts
+ AutoTimer aLineNum; // Show the line numbers
+virtual void Resize();
+virtual void Move();
+virtual void GetFocus();
+ void LoadLibrary();
+ void SaveLibrary();
+ BOOL bIsAutoRun;
+ DisplayHidDlg* pDisplayHidDlg;
+
+// BreakPoint *pRunToCursorBP;
+
+ SbxVariable *pEditVar;
+
+
+
+ Timer aCheckFiles; // Checks the files for changes
+ BOOL bAutoReload;
+ BOOL bAutoSave;
+ DECL_LINK( CheckAllFiles, Timer* );
+
+ MyBasicRef pBasic; // BASIC-Engine
+
+ String aAppName; // Title bar content
+ String aAppFile; // AppName AppFile [AppMode]
+ String aAppMode;
+ void UpdateTitle();
+ DECL_LINK( CloseButtonClick, void* );
+ DECL_LINK( FloatButtonClick, void* );
+ DECL_LINK( HideButtonClick, void* );
+
+ FloatingExecutionStatus *pExecutionStatus;
+
+public:
+ BOOL IsAutoRun();
+ void SetAutoRun( BOOL bAuto );
+ BOOL bInBreak; // TRUE if in Break-Handler
+ StatusLine* pStatus; // Status line
+ EditList* pList; // List of edit windows
+ AppWin* pWork; // Current edit window
+ BasicPrinter* pPrn; // Printer
+ BOOL bDisas; // TRUE: disassemble
+ USHORT nFlags; // Debugging-Flags
+ USHORT nMaximizedWindows; // Number of maximized windows
+ void FocusWindow( AppWin *pWin );
+ void WinMax_Restore();
+ void WinShow_Hide();
+ void RemoveWindow( AppWin *pWin );
+ void AddWindow( AppWin *pWin );
+ void WindowRenamed( AppWin *pWin );
+
+ BasicFrame();
+ ~BasicFrame();
+ MyBasic& Basic() { return *pBasic; }
+ void AddToLRU(String const& aFile);
+ void LoadLRU();
+ DECL_LINK( InitMenu, Menu * );
+ DECL_LINK( DeInitMenu, Menu * );
+ DECL_LINK( HighlightMenu, Menu * );
+ DECL_LINK( MenuCommand, Menu * );
+ DECL_LINK( Accel, Accelerator * );
+ DECL_LINK( ShowLineNr, AutoTimer * );
+ MsgEdit* GetMsgTree( String aLogFileName );
+ DECL_LINK( Log, TTLogMsg * );
+ DECL_LINK( WinInfo, WinInfoRec * );
+ BOOL LoadFile( String aFilename );
+ long Command( short,BOOL=FALSE ); // Command handler
+ virtual void Command( const CommandEvent& rCEvt ); // Command handler
+ BOOL SaveAll(); // Save all windows
+ BOOL QueryFileName( String& rName, FileType nFileType, BOOL bSave ); // Query for filename
+ DECL_LINK( ModuleWinExists, String* );
+ DECL_LINK( WriteString, String* );
+ AppBasEd* CreateModuleWin( SbModule* pMod );
+ AppBasEd* FindModuleWin( const String& );
+ AppError* FindErrorWin( const String& );
+ AppWin* FindWin( const String& );
+ AppWin* FindWin( USHORT nWinId );
+ AppWin* IsWinValid( AppWin* pMaybeWin );
+ USHORT BreakHandler(); // Break-Handler-Callback
+
+ void SetEditVar( SbxVariable *pVar ){ pEditVar = pVar;}
+ SbxVariable* GetEditVar(){ return pEditVar;}
+ BOOL IsAutoReload() { return bAutoReload; }
+ BOOL IsAutoSave() { return bAutoSave; }
+ void LoadIniFile();
+
+ virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint );
+
+ void SetAppMode( const String &aNewMode ){ aAppMode = aNewMode; UpdateTitle(); }
+
+ String GenRealString( const String &aResString );
+
+};
+
+extern BasicApp aBasicApp;
+
+#endif
diff --git a/basic/source/app/appbased.cxx b/basic/source/app/appbased.cxx
new file mode 100644
index 000000000000..847a2fde02ec
--- /dev/null
+++ b/basic/source/app/appbased.cxx
@@ -0,0 +1,299 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+
+#ifndef _MSGBOX_HXX //autogen
+#include <vcl/msgbox.hxx>
+#endif
+#include <basic/sbx.hxx>
+#include <svtools/texteng.hxx>
+#include <svtools/textview.hxx>
+#include <basic/sbmeth.hxx>
+#include <svtools/stringtransfer.hxx>
+
+#ifndef _BASIC_TTRESHLP_HXX
+#include <basic/ttstrhlp.hxx>
+#endif
+
+#include "basic.hrc"
+#include "status.hxx"
+#include "appbased.hxx"
+#include "brkpnts.hxx"
+#include <basic/testtool.hxx> // defines for Syntaxhighlighting
+#include "basrid.hxx"
+
+
+TYPEINIT1(AppBasEd,AppEdit);
+AppBasEd::AppBasEd( BasicFrame* pParent, SbModule* p )
+: AppEdit( pParent )
+, pBreakpoints( NULL )
+{
+ pBreakpoints = new BreakpointWindow( this );
+ pBreakpoints->SetFont( ((TextEdit*)pDataEdit)->GetTextEditImp().pTextEngine->GetFont() );
+
+ pBreakpoints->Show();
+
+
+ ((TextEdit*)pDataEdit)->GetTextEditImp().pTextView->SetAutoIndentMode( TRUE );
+ ((TextEdit*)pDataEdit)->GetTextEditImp().pTextEngine->SetMaxTextLen( STRING_MAXLEN );
+// ((TextEdit*)pDataEdit)->GetTextEditImp().pTextEngine->SetWordDelimiters( CUniString(" ,.;:(){}[]\"'+-*/<>^\\") );
+ ((TextEdit*)pDataEdit)->GetTextEditImp().SyntaxHighlight( TRUE );
+ ((TextEdit*)pDataEdit)->SaveAsUTF8( TRUE );
+
+ String aEmpty;
+
+ pMod = p;
+ if( !pMod )
+ {
+ String aModName = *pNoName;
+ aModName += String::CreateFromInt32( nCount );
+ pMod = pFrame->Basic().MakeModule( aModName, aEmpty );
+ }
+ bCompiled = pMod->IsCompiled();
+
+ pBreakpoints->SetModule( pMod );
+
+ // Define icon:
+// pIcon = new Icon( ResId( RID_WORKICON ) );
+// if( pIcon ) SetIcon( *pIcon );
+
+ SetText( pMod->GetName() );
+ pDataEdit->SetText( pMod->GetSource() );
+
+ // If a module was given, load the source from harddisk
+ if ( p )
+ LoadSource();
+
+ // Dispatch event AFTER loading the sourcecode
+ ((TextEdit*)pDataEdit)->SetBreakpointWindow( pBreakpoints );
+
+ // Touch compile flag
+ pDataEdit->SetModifyHdl( LINK( this, AppBasEd, EditChange ) );
+
+}
+
+AppBasEd::~AppBasEd()
+{
+ pBreakpoints->SaveBreakpoints( GetText() );
+ delete pBreakpoints;
+ pMod->SetName( CUniString("--").Append( pMod->GetName() ) );
+}
+
+void AppBasEd::Notify( SfxBroadcaster&, const SfxHint& rHint )
+{
+ const SfxSimpleHint* p = PTR_CAST(SfxSimpleHint,&rHint);
+ if( p )
+ {
+ ULONG nHintId = p->GetId();
+ if( nHintId == SBX_HINT_LANGUAGE_EXTENSION_LOADED )
+ {
+ ((TextEdit*)pDataEdit)->GetTextEditImp().InvalidateSyntaxHighlight();
+ }
+ }
+}
+
+FileType AppBasEd::GetFileType()
+{
+ return FT_BASIC_SOURCE;
+}
+
+IMPL_LINK_INLINE_START( AppBasEd, EditChange, void *, p )
+{
+ (void) p; /* avoid warning about unused parameter */
+ bCompiled = FALSE;
+ return TRUE;
+}
+IMPL_LINK_INLINE_END( AppBasEd, EditChange, void *, p )
+
+// Set up the menu
+long AppBasEd::InitMenu( Menu* pMenu )
+{
+ AppEdit::InitMenu (pMenu );
+ BOOL bRunning = pFrame->Basic().IsRunning();
+ pMenu->EnableItem( RID_RUNCOMPILE, !bCompiled && !bRunning );
+ return TRUE;
+}
+
+long AppBasEd::DeInitMenu( Menu* pMenu )
+{
+ AppEdit::DeInitMenu (pMenu );
+ pMenu->EnableItem( RID_RUNCOMPILE );
+ return TRUE;
+}
+
+// Menu Handler
+void AppBasEd::Command( const CommandEvent& rCEvt )
+{
+ switch( rCEvt.GetCommand() ) {
+ case RID_TOGLEBRKPNT:
+ ((TextEdit*)pDataEdit)->GetBreakpointWindow()->ToggleBreakpoint( pDataEdit->GetLineNr() );
+ break;
+ default:
+ AppEdit::Command( rCEvt );
+ }
+}
+
+void AppBasEd::Resize()
+{
+ if( pDataEdit )
+ {
+ AppEdit::Resize();
+
+ // Insert breakpoint window
+ Size aEditSize = pDataEdit->GetSizePixel();
+ Point aEditPos = pDataEdit->GetPosPixel();
+
+ pBreakpoints->SetPosPixel( aEditPos );
+
+ aEditPos.X() += BREAKPOINTSWIDTH;
+ pDataEdit->SetPosPixel( aEditPos );
+ aEditSize.Width() -= BREAKPOINTSWIDTH;
+ pDataEdit->SetSizePixel( aEditSize );
+
+ aEditSize.Width() = BREAKPOINTSWIDTH;
+ pBreakpoints->SetSizePixel( aEditSize );
+ }
+}
+
+void AppBasEd::PostLoad()
+{
+ pMod->SetName( GetText() );
+ pMod->Clear();
+ pMod->SetSource( pDataEdit->GetText() );
+ bCompiled = FALSE; // because the code might have changed in the meantime
+ AppEdit::PostLoad();
+
+ pBreakpoints->LoadBreakpoints( GetText() );
+}
+
+USHORT AppBasEd::ImplSave()
+{
+ pBreakpoints->SaveBreakpoints( GetText() );
+ return AppEdit::ImplSave();
+}
+
+void AppBasEd::Reload()
+{
+ TextSelection aSelMemo = pDataEdit->GetSelection();
+ LoadSource();
+ pDataEdit->SetSelection( aSelMemo );
+}
+
+// Reload source code file after change
+void AppBasEd::LoadSource()
+{
+ BOOL bErr;
+
+// if( pDataEdit->GetText().Len() != 0 ) return;
+ String aName = pMod->GetName();
+ bErr = !pDataEdit->Load( aName );
+ pBreakpoints->LoadBreakpoints( GetText() );
+ if( bErr )
+ ErrorBox( this, SttResId( IDS_READERROR ) ).Execute();
+ else
+ UpdateFileInfo( HAS_BEEN_LOADED );
+ bCompiled = FALSE; // because the code might have changed in the meantime
+}
+
+// Save as (new name)
+void AppBasEd::PostSaveAs()
+{
+ pMod->SetName( GetText() );
+ AppEdit::PostSaveAs();
+}
+
+// Compile
+BOOL AppBasEd::Compile()
+{
+ if( !pDataEdit->HasText() || bCompiled )
+ return TRUE;
+ pMod->SetSource( pDataEdit->GetText() );
+ BOOL bRes = FALSE;
+ if( pFrame->Basic().Compile( pMod ) )
+ {
+ bRes = TRUE;
+ if( pFrame->bDisas )
+ Disassemble();
+ TextSelection aSel( pDataEdit->GetSelection() );
+ String aString;
+ pFrame->pStatus->Message( aString );
+ if( aSel.HasRange() )
+ aSel.GetStart() = aSel.GetEnd(), pDataEdit->SetSelection( aSel );
+
+ pBreakpoints->SetBPsInModule();
+ }
+ else
+ {
+ BasicError* pErr = pFrame->Basic().aErrors.First();
+ if( pErr ) pErr->Show();
+ }
+ return bCompiled = bRes;
+}
+
+void AppBasEd::Disassemble()
+{
+ String aText;
+ if( pFrame->Basic().Disassemble( pMod, aText ) )
+ ::svt::OStringTransfer::CopyString( aText, this );
+}
+
+void AppBasEd::Run()
+{
+ pFrame->Basic().Reset();
+ SbxArray* pAllModules = pFrame->Basic().GetModules();
+ for (USHORT i = 0; i < pAllModules->Count(); i++)
+ {
+ if ( (pAllModules->Get(i)->GetName()).Copy(0,2).CompareToAscii( "--" ) == COMPARE_EQUAL )
+ {
+ // Little hack to get around basic
+ SbxVariableRef pRMod = pAllModules->Get(i);
+ pFrame->Basic().Remove(pRMod);
+ i--;
+ }
+ }
+
+ SbMethod* pMain = (SbMethod*) pMod->Find( CUniString("Main"), SbxCLASS_METHOD );
+ if( pMain )
+ {
+ pMain->SetDebugFlags( pFrame->nFlags );
+ // Triggers a call!
+ pFrame->SetAppMode( String( SttResId( IDS_APPMODE_RUN ) ) );
+ pMain->Run();
+ if (aBasicApp.pFrame)
+ {
+ BasicError* pErr = aBasicApp.pFrame->Basic().aErrors.First();
+ if( pErr )
+ pErr->Show();
+ aBasicApp.pFrame->SetAppMode( String() );
+ }
+ pMain->SetDebugFlags( 0 );
+ }
+}
+
+
diff --git a/basic/source/app/appbased.hxx b/basic/source/app/appbased.hxx
new file mode 100644
index 000000000000..339f0c1a3d18
--- /dev/null
+++ b/basic/source/app/appbased.hxx
@@ -0,0 +1,74 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _APPBASED_HXX
+#define _APPBASED_HXX
+
+#include <basic/sbmod.hxx>
+#ifndef _SB_APPEDIT_HXX
+#include "appedit.hxx"
+#endif
+#ifndef _SB_TEXTEDIT_HXX
+#include "textedit.hxx"
+#endif
+
+class BasicFrame;
+class BreakpointWindow;
+
+class AppBasEd : public AppEdit { // Editor-Window:
+using DockingWindow::Notify;
+
+ SbModuleRef pMod; // compile module
+ BOOL bCompiled; // TRUE if compiled
+protected:
+ DECL_LINK( EditChange, void * );
+#define BREAKPOINTSWIDTH 15
+ BreakpointWindow *pBreakpoints;
+ virtual USHORT ImplSave(); // Save file
+
+public:
+ TYPEINFO();
+ AppBasEd( BasicFrame*, SbModule* );
+ ~AppBasEd();
+ FileType GetFileType(); // Returns Filetype
+ SbModule* GetModule() { return pMod; }
+ long InitMenu( Menu* ); // Initialision of the menus
+ virtual long DeInitMenu( Menu* ); // Reset to enable all shortcuts
+ virtual void Command( const CommandEvent& rCEvt ); // Command handler
+ virtual void Resize(); // Includes the breakpoint bar
+ virtual void PostLoad(); // Set source of module
+ virtual void PostSaveAs(); // Postprocess of module...
+ void Reload();
+ void LoadSource(); // Load source for object
+ BOOL Compile(); // Compile text
+ void Run(); // Run image
+ void Disassemble(); // Disassemble image
+ const String& GetModName() const { return pMod->GetName(); }
+ virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint );
+};
+
+#endif
diff --git a/basic/source/app/appedit.cxx b/basic/source/app/appedit.cxx
new file mode 100644
index 000000000000..d5769f3acb31
--- /dev/null
+++ b/basic/source/app/appedit.cxx
@@ -0,0 +1,301 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+#include <tools/config.hxx>
+#include <svtools/ctrltool.hxx>
+#include <svtools/textview.hxx>
+#include <svtools/texteng.hxx>
+#include <svl/undo.hxx>
+
+#ifndef _BASIC_TTRESHLP_HXX
+#include <basic/ttstrhlp.hxx>
+#endif
+
+#include "basic.hrc"
+#include "appedit.hxx"
+#include "brkpnts.hxx"
+
+TYPEINIT1(AppEdit,AppWin);
+AppEdit::AppEdit( BasicFrame* pParent )
+: AppWin( pParent )
+, pVScroll( NULL )
+, pHScroll( NULL )
+, nCurTextWidth(5)
+{
+ String aEmpty;
+ // perhaps load the Untitled-String:
+
+ pDataEdit = new TextEdit( this, WB_LEFT );
+ LoadIniFile();
+ // define Icon:
+// pIcon = new Icon( ResId( RID_WORKICON ) );
+// if( pIcon ) SetIcon( *pIcon );
+
+ pDataEdit->SetText( aEmpty );
+
+ pDataEdit->Show();
+
+ pVScroll = new ScrollBar( this, WB_VSCROLL|WB_DRAG );
+ pVScroll->Show();
+ pVScroll->SetScrollHdl( LINK( this, AppEdit, Scroll ) );
+ pHScroll = new ScrollBar( this, WB_HSCROLL|WB_DRAG );
+ pHScroll->Show();
+ pHScroll->SetScrollHdl( LINK( this, AppEdit, Scroll ) );
+
+ InitScrollBars();
+}
+
+AppEdit::~AppEdit()
+{
+ DataEdit *pHold = pDataEdit;
+ pDataEdit = NULL;
+ delete pHold;
+ delete pHScroll;
+ delete pVScroll;
+}
+
+void AppEdit::LoadIniFile()
+{
+ TextView *pTextView = ((TextEdit*)pDataEdit)->aEdit.pTextView;
+ BOOL bWasModified = pTextView->GetTextEngine()->IsModified();
+ pTextView->GetTextEngine()->SetModified( FALSE );
+
+ FontList aFontList( pFrame ); // Just some Window is needed
+ Config aConf(Config::GetConfigName( Config::GetDefDirectory(), CUniString("testtool") ));
+ aConf.SetGroup("Misc");
+ String aFontName = String( aConf.ReadKey( "ScriptFontName", "Courier" ), RTL_TEXTENCODING_UTF8 );
+ String aFontStyle = String( aConf.ReadKey( "ScriptFontStyle", "normal" ), RTL_TEXTENCODING_UTF8 );
+ String aFontSize = String( aConf.ReadKey( "ScriptFontSize", "12" ), RTL_TEXTENCODING_UTF8 );
+ Font aFont = aFontList.Get( aFontName, aFontStyle );
+// ULONG nFontSize = aFontSize.GetValue( FUNIT_POINT );
+ ULONG nFontSize = aFontSize.ToInt32();
+// aFont.SetSize( Size( nFontSize, nFontSize ) );
+ aFont.SetHeight( nFontSize );
+
+#if OSL_DEBUG_LEVEL > 1
+ {
+ Font aFont2( OutputDevice::GetDefaultFont( DEFAULTFONT_FIXED, Application::GetSettings().GetUILanguage(), 0, pFrame ));
+ }
+#endif
+ aFont.SetTransparent( FALSE );
+// aFont.SetAlign( ALIGN_BOTTOM );
+// aFont.SetHeight( aFont.GetHeight()+2 );
+ pDataEdit->SetFont( aFont );
+
+ if ( ((TextEdit*)pDataEdit)->GetBreakpointWindow() )
+ {
+ ((TextEdit*)pDataEdit)->GetBreakpointWindow()->SetFont( aFont );
+ ((TextEdit*)pDataEdit)->GetBreakpointWindow()->Invalidate();
+ }
+
+ pTextView->GetTextEngine()->SetModified( bWasModified ); // Perhaps reset the flag
+}
+
+void AppEdit::Command( const CommandEvent& rCEvt )
+{
+ switch( rCEvt.GetCommand() ) {
+ case COMMAND_WHEEL:
+ {
+ HandleScrollCommand( rCEvt, pHScroll, pVScroll );
+ }
+ break;
+ default:
+ AppWin::Command( rCEvt );
+ }
+}
+
+
+IMPL_LINK( AppEdit, Scroll, ScrollBar*, pScroll )
+{
+ (void) pScroll; /* avoid warning about unused parameter */
+ if ( !pHScroll || !pVScroll )
+ return 0;
+
+ TextView *pTextView = ((TextEdit*)pDataEdit)->aEdit.pTextView;
+ pTextView->SetStartDocPos( Point( pHScroll->GetThumbPos(), pVScroll->GetThumbPos() ) );
+ pTextView->Invalidate();
+
+ if ( ((TextEdit*)pDataEdit)->GetBreakpointWindow() )
+ ((TextEdit*)pDataEdit)->GetBreakpointWindow()->Scroll( 0, ((TextEdit*)pDataEdit)->GetBreakpointWindow()->GetCurYOffset() - pTextView->GetStartDocPos().Y() );
+
+ return 0L;
+}
+
+
+void AppEdit::InitScrollBars()
+{
+ if ( !pHScroll || !pVScroll )
+ return;
+
+ TextView *pTextView = ((TextEdit*)pDataEdit)->aEdit.pTextView;
+
+ SetScrollBarRanges();
+
+ Size aOutSz( pTextView->GetWindow()->GetOutputSizePixel() );
+ pVScroll->SetVisibleSize( aOutSz.Height() );
+ pVScroll->SetPageSize( aOutSz.Height() * 8 / 10 );
+ pVScroll->SetLineSize( GetTextHeight() +2 ); // +2 is empirical. don't know why
+ pVScroll->SetThumbPos( pTextView->GetStartDocPos().Y() );
+ pVScroll->Show();
+
+ pHScroll->SetVisibleSize( aOutSz.Width() );
+ pHScroll->SetPageSize( aOutSz.Width() * 8 / 10 );
+ pHScroll->SetLineSize( GetTextWidth( CUniString("x") ) );
+ pHScroll->SetThumbPos( pTextView->GetStartDocPos().X() );
+ pHScroll->Show();
+}
+
+void AppEdit::SetScrollBarRanges()
+{
+ // Extra-Method, not InitScrollBars, but for EditEngine-Events.
+
+ if ( !pHScroll || !pVScroll )
+ return;
+
+ pHScroll->SetRange( Range( 0, nCurTextWidth ) );
+ pVScroll->SetRange( Range( 0, ((TextEdit*)pDataEdit)->aEdit.pTextEngine->GetTextHeight() ) );
+}
+
+
+
+USHORT AppEdit::GetLineNr()
+{
+ return pDataEdit->GetLineNr();
+}
+
+FileType AppEdit::GetFileType()
+{
+ return FT_BASIC_SOURCE;
+}
+
+// Set up the menu
+long AppEdit::InitMenu( Menu* pMenu )
+{
+ AppWin::InitMenu (pMenu );
+
+ if( pDataEdit )
+ {
+ USHORT UndoCount = ((TextEdit*)pDataEdit)->aEdit.pTextEngine->GetUndoManager().GetUndoActionCount();
+ USHORT RedoCount = ((TextEdit*)pDataEdit)->aEdit.pTextEngine->GetUndoManager().GetRedoActionCount();
+
+ pMenu->EnableItem( RID_EDITUNDO, UndoCount > 0 );
+ pMenu->EnableItem( RID_EDITREDO, RedoCount > 0 );
+ }
+
+ return TRUE;
+}
+
+long AppEdit::DeInitMenu( Menu* pMenu )
+{
+ AppWin::DeInitMenu (pMenu );
+
+ pMenu->EnableItem( RID_EDITUNDO );
+ pMenu->EnableItem( RID_EDITREDO );
+
+ return TRUE;
+}
+
+void AppEdit::Resize()
+{
+ if( !pDataEdit )
+ return;
+
+ Point rHStart,rVStart;
+ Size rHSize,rVSize;
+ Size rNewSize( GetOutputSizePixel() );
+
+ if ( pHScroll )
+ {
+ rHSize = pHScroll->GetSizePixel();
+ ULONG nHieght = rHSize.Height();
+ rNewSize.Height() -= nHieght;
+ rHStart.Y() = rNewSize.Height();
+ }
+
+ if ( pVScroll )
+ {
+ rVSize = pVScroll->GetSizePixel();
+ ULONG nWidth = rVSize.Width();
+ rNewSize.Width() -= nWidth;
+ rVStart.X() = rNewSize.Width();
+ }
+
+ rHSize.Width() = rNewSize.Width();
+ rVSize.Height() = rNewSize.Height();
+
+ if ( pHScroll )
+ {
+ pHScroll->SetPosPixel( rHStart );
+ pHScroll->SetSizePixel( rHSize );
+ }
+
+ if ( pVScroll )
+ {
+ pVScroll->SetPosPixel( rVStart );
+ pVScroll->SetSizePixel( rVSize );
+ }
+ pDataEdit->SetPosPixel( Point() );
+ pDataEdit->SetSizePixel( rNewSize );
+
+
+ TextView *pTextView = ((TextEdit*)pDataEdit)->aEdit.pTextView;
+ long nVisY = pTextView->GetStartDocPos().Y();
+ pTextView->ShowCursor();
+ Size aOutSz( pTextView->GetWindow()->GetOutputSizePixel() );
+ long nMaxVisAreaStart = pTextView->GetTextEngine()->GetTextHeight() - aOutSz.Height();
+ if ( nMaxVisAreaStart < 0 )
+ nMaxVisAreaStart = 0;
+ if ( pTextView->GetStartDocPos().Y() > nMaxVisAreaStart )
+ {
+ Point aStartDocPos( pTextView->GetStartDocPos() );
+ aStartDocPos.Y() = nMaxVisAreaStart;
+ pTextView->SetStartDocPos( aStartDocPos );
+ pTextView->ShowCursor();
+// pModulWindow->GetBreakPointWindow().GetCurYOffset() = aStartDocPos.Y();
+ }
+ InitScrollBars();
+ if ( nVisY != pTextView->GetStartDocPos().Y() )
+ pTextView->GetWindow()->Invalidate();
+
+}
+
+void AppEdit::PostLoad()
+{
+}
+
+void AppEdit::PostSaveAs()
+{
+}
+
+void AppEdit::Highlight( USHORT nLine, USHORT nCol1, USHORT nCol2 )
+{
+ ((TextEdit*)pDataEdit)->Highlight( nLine, nCol1, nCol2 );
+ ToTop();
+}
+
diff --git a/basic/source/app/appedit.hxx b/basic/source/app/appedit.hxx
new file mode 100644
index 000000000000..4a003bd0482d
--- /dev/null
+++ b/basic/source/app/appedit.hxx
@@ -0,0 +1,70 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _APPEDIT_HXX
+#define _APPEDIT_HXX
+
+#ifndef _SCRBAR_HXX //autogen
+#include <vcl/scrbar.hxx>
+#endif
+
+#include "appwin.hxx"
+#include "textedit.hxx"
+
+class BasicFrame;
+
+class AppEdit : public AppWin { // Editor window
+using Window::Scroll;
+
+public:
+ ScrollBar *pVScroll;
+ ScrollBar *pHScroll;
+ void SetScrollBarRanges();
+ ULONG nCurTextWidth;
+private:
+ void InitScrollBars();
+protected:
+ DECL_LINK( Scroll, ScrollBar* );
+public:
+ TYPEINFO();
+ AppEdit( BasicFrame* );
+ ~AppEdit();
+ USHORT GetLineNr(); // Current line number
+ FileType GetFileType(); // Returns the file type
+ virtual long InitMenu( Menu* ); // Inits the menu
+ virtual long DeInitMenu( Menu* ); // Reset to enable all Shortcuts
+ virtual void Command( const CommandEvent& rCEvt ); // Command Handler
+ void Resize();
+ void PostLoad();
+ void PostSaveAs();
+ void Mark( short, short, short ); // Select text
+ void Highlight( USHORT nLine, USHORT nCol1, USHORT nCol2 );
+ virtual BOOL ReloadAllowed(){ return !StarBASIC::IsRunning(); }
+ virtual void LoadIniFile(); // (re)load ini file after change
+};
+
+#endif
diff --git a/basic/source/app/apperror.cxx b/basic/source/app/apperror.cxx
new file mode 100644
index 000000000000..001c77a38146
--- /dev/null
+++ b/basic/source/app/apperror.cxx
@@ -0,0 +1,115 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+#include <tools/config.hxx>
+#include <svtools/ctrltool.hxx>
+#ifndef _BASIC_TTRESHLP_HXX
+#include <basic/ttstrhlp.hxx>
+#endif
+#include "basic.hrc"
+#include "apperror.hxx"
+
+TYPEINIT1(AppError,AppWin);
+AppError::AppError( BasicFrame* pParent, String aFileName )
+: AppWin( pParent )
+{
+ SetText( aFileName ); // Call before MsgEdit!!
+ pDataEdit = new MsgEdit( this, pParent, WB_HSCROLL | WB_VSCROLL | WB_LEFT );
+ LoadIniFile();
+ bHasFile = pDataEdit->Load( aFileName );
+ DirEntry aEntry( aFileName );
+ UpdateFileInfo( HAS_BEEN_LOADED );
+ // Define icon
+// pIcon = new Icon( ResId( RID_WORKICON ) );
+// if( pIcon ) SetIcon( *pIcon );
+
+ pDataEdit->Show();
+ GrabFocus();
+}
+
+AppError::~AppError()
+{
+ DataEdit* pTemp = pDataEdit;
+ pDataEdit = NULL;
+ delete pTemp;
+}
+
+// Set up the menu
+long AppError::InitMenu( Menu* pMenu )
+{
+ AppWin::InitMenu (pMenu );
+
+ pMenu->EnableItem( RID_EDITUNDO, FALSE );
+ pMenu->EnableItem( RID_EDITREDO, FALSE );
+
+ return TRUE;
+}
+
+long AppError::DeInitMenu( Menu* pMenu )
+{
+ AppWin::DeInitMenu (pMenu );
+
+ pMenu->EnableItem( RID_EDITUNDO );
+ pMenu->EnableItem( RID_EDITREDO );
+
+ return TRUE;
+}
+
+USHORT AppError::GetLineNr(){ return pDataEdit->GetLineNr(); }
+
+FileType AppError::GetFileType()
+{
+ return FT_RESULT_FILE;
+}
+
+void AppError::LoadIniFile()
+{
+ Config aConf(Config::GetConfigName( Config::GetDefDirectory(), CUniString("testtool") ));
+ aConf.SetGroup("Misc");
+ ByteString aCurrentProfile = aConf.ReadKey( "CurrentProfile", "Path" );
+ aConf.SetGroup( aCurrentProfile );
+ aBaseDir = DirEntry( aConf.ReadKey("BaseDir") );
+
+
+ FontList aFontList( pFrame ); // Just some Window is needed
+ aConf.SetGroup("Misc");
+ String aFontName = String( aConf.ReadKey( "ScriptFontName", "Courier" ), RTL_TEXTENCODING_UTF8 );
+ String aFontStyle = String( aConf.ReadKey( "ScriptFontStyle", "normal" ), RTL_TEXTENCODING_UTF8 );
+ String aFontSize = String( aConf.ReadKey( "ScriptFontSize", "12" ), RTL_TEXTENCODING_UTF8 );
+ Font aFont = aFontList.Get( aFontName, aFontStyle );
+// ULONG nFontSize = aFontSize.GetValue( FUNIT_POINT );
+ ULONG nFontSize = aFontSize.ToInt32();
+// aFont.SetSize( Size( nFontSize, nFontSize ) );
+ aFont.SetHeight( nFontSize );
+
+ aFont.SetTransparent( FALSE );
+// aFont.SetAlign( ALIGN_BOTTOM );
+// aFont.SetHeight( aFont.GetHeight()+2 );
+ pDataEdit->SetFont( aFont );
+}
diff --git a/basic/source/app/apperror.hxx b/basic/source/app/apperror.hxx
new file mode 100644
index 000000000000..c5be8836efd9
--- /dev/null
+++ b/basic/source/app/apperror.hxx
@@ -0,0 +1,49 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <appwin.hxx>
+#include <msgedit.hxx>
+
+class AppError : public AppWin
+{
+protected:
+ DECL_LINK( EditChange, MsgEdit * );
+public:
+ TYPEINFO();
+ AppError( BasicFrame*, String );
+ ~AppError();
+// long Command( short nID );
+ virtual long InitMenu( Menu* );
+ virtual long DeInitMenu( Menu* );
+ USHORT GetLineNr();
+ FileType GetFileType();
+ MsgEdit* GetMsgTree() { return ((MsgEdit*)pDataEdit); }
+ virtual BOOL ReloadAllowed(){ return !StarBASIC::IsRunning(); }
+ virtual void LoadIniFile(); // (re)load ini file after change
+ DirEntry aBaseDir;
+};
+
diff --git a/basic/source/app/appwin.cxx b/basic/source/app/appwin.cxx
new file mode 100644
index 000000000000..b0a6c07ec956
--- /dev/null
+++ b/basic/source/app/appwin.cxx
@@ -0,0 +1,657 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+
+#include <stdio.h>
+#ifndef _MSGBOX_HXX //autogen
+#include <vcl/msgbox.hxx>
+#endif
+#include <tools/fsys.hxx>
+#include <svtools/stringtransfer.hxx>
+
+#include "basic.hrc"
+#include "app.hxx"
+#include <basic/mybasic.hxx>
+#include "status.hxx"
+#include "appwin.hxx"
+#include "dataedit.hxx"
+#include "dialogs.hxx"
+#include "basrid.hxx"
+
+String *AppWin::pNoName = NULL; // contains the "Untitled"-String
+short AppWin::nNumber = 0; // consecutive number
+short AppWin::nCount = 0; // number of edit windows
+
+TYPEINIT0(AppWin);
+AppWin::AppWin( BasicFrame* pParent )
+: DockingWindow( pParent, WB_SIZEMOVE | WB_CLOSEABLE | WB_PINABLE )
+, nSkipReload(0)
+, bHasFile( FALSE )
+, bReloadAborted( FALSE )
+, pFrame( pParent )
+, bFind( TRUE )
+, pDataEdit(NULL)
+{
+ // Load the Untitled string if not yet loaded
+ if( !pNoName )
+ pNoName = new String( SttResId( IDS_NONAME ) );
+ nCount++;
+
+ // Get maximized state from current window
+ USHORT nInitialWinState;
+ if ( pFrame->pWork )
+ {
+ nInitialWinState = pFrame->pWork->GetWinState();
+ nInitialWinState &= TT_WIN_STATE_MAX | TT_WIN_STATE_FLOAT;
+ }
+ else
+ nInitialWinState = TT_WIN_STATE_MAX;
+
+ StartListening( *pFrame );
+ pFrame->AddWindow( this );
+
+ ShowTitleButton( TITLE_BUTTON_DOCKING );
+ ShowTitleButton( TITLE_BUTTON_HIDE );
+ SetActivateMode( ACTIVATE_MODE_GRABFOCUS );
+
+ Cascade( nCount );
+ if ( TT_WIN_STATE_MAX == nInitialWinState )
+ Maximize();
+}
+
+AppWin::~AppWin()
+{
+ nCount--;
+ pFrame->RemoveWindow( this );
+ pFrame = NULL; // Set to stop setting window text after BasicRun
+}
+
+void AppWin::SetText( const XubString& rStr )
+{
+ DockingWindow::SetText( rStr );
+ pFrame->WindowRenamed( this );
+}
+
+void AppWin::TitleButtonClick( USHORT nButton )
+{
+ if ( TITLE_BUTTON_DOCKING == nButton )
+ if ( TT_WIN_STATE_MAX != nWinState )
+ Maximize();
+ else
+ Restore();
+ else // if ( TITLE_BUTTON_HIDE == nButton )
+ Minimize( TRUE );
+}
+
+void AppWin::Maximize()
+{
+ if ( TT_WIN_STATE_MAX != nWinState )
+ {
+ nNormalPos = GetPosPixel();
+ nNormalSize = GetSizePixel();
+
+ SetFloatingMode( FALSE );
+
+ pFrame->nMaximizedWindows++;
+ nWinState = TT_WIN_STATE_MAX;
+ }
+ sal_Int32 nTitleHeight;
+ {
+ sal_Int32 nDummy1, nDummy2, nDummy3;
+ pFrame->GetBorder( nDummy1, nTitleHeight, nDummy2, nDummy3 );
+ }
+
+ Size aSize = pFrame->GetOutputSizePixel();
+ aSize.Height() -= nTitleHeight;
+ aSize.Height() -= 2;
+ aSize.Width() -= 2;
+ SetSizePixel( aSize );
+ SetPosPixel( Point( 1,1 ) );
+ pFrame->WinMax_Restore();
+}
+
+void AppWin::Restore()
+{
+ SetFloatingMode( TRUE );
+ SetPosSizePixel( nNormalPos, nNormalSize );
+
+ if ( TT_WIN_STATE_MAX == nWinState )
+ pFrame->nMaximizedWindows--;
+
+ nWinState = TT_WIN_STATE_FLOAT;
+ pFrame->WinMax_Restore();
+}
+
+void AppWin::Minimize( BOOL bMinimize )
+{
+ if ( bMinimize )
+ nWinState |= TT_WIN_STATE_HIDE;
+ else
+ nWinState &= ~TT_WIN_STATE_HIDE;
+ pFrame->WinMax_Restore();
+}
+
+void AppWin::Cascade( USHORT nNr )
+{
+ Restore();
+
+ nNr--;
+ nNr %= 10;
+ nNr++;
+
+ sal_Int32 nTitleHeight;
+ {
+ sal_Int32 nDummy1, nDummy2, nDummy3;
+ pFrame->GetBorder( nDummy1, nTitleHeight, nDummy2, nDummy3 );
+ }
+
+ Size aWinSize = pFrame->GetOutputSizePixel();
+ aWinSize.Width() -= aWinSize.Width() / 5; // reduce to 80 %
+ aWinSize.Height() -= nTitleHeight * nNr; // snip height to appropriate value
+ aWinSize.Height() -= 2;
+
+ Point nPos( nTitleHeight * nNr, nTitleHeight * nNr );
+
+ SetPosSizePixel( nPos, aWinSize );
+}
+
+void AppWin::RequestHelp( const HelpEvent& )
+{
+ Help();
+}
+
+void AppWin::Help()
+{
+ String s = pDataEdit->GetSelected();
+ if( s.Len() > 0 )
+ {
+ // Trim leading whitespaces
+ while( s.GetChar(0) == ' ' )
+ s.Erase( 0, 1 );
+// aBasicApp.pHelp->Start( s );
+ }
+ else
+ {
+// aBasicApp.pHelp->Start( OOO_HELP_INDEX );
+ }
+}
+
+void AppWin::Resize()
+{
+ if( pDataEdit )
+ {
+ pDataEdit->SetPosPixel( Point( 0, 0 ) );
+ pDataEdit->SetSizePixel( GetOutputSizePixel() );
+ }
+}
+
+void AppWin::GetFocus()
+{
+ pFrame->FocusWindow( this );
+ if( pDataEdit ) // GetFocus is called by the destructor, so this check
+ {
+ pDataEdit->GrabFocus();
+// InitMenu(GetpApp()->GetAppMenu()->GetPopupMenu( RID_APPEDIT ));
+ }
+}
+
+long AppWin::PreNotify( NotifyEvent& rNEvt )
+{
+
+ if ( rNEvt.GetType() == EVENT_MOUSEBUTTONDOWN )
+ Activate();
+ if ( rNEvt.GetType() == EVENT_GETFOCUS )
+ if ( pFrame->pList->Last() != this )
+ Activate();
+ return FALSE; // Der event soll weiter verarbeitet werden
+}
+
+void AppWin::Activate()
+{
+ GrabFocus();
+}
+
+// Set up the menu
+long AppWin::InitMenu( Menu* pMenu )
+{
+
+ ::rtl::OUString aTemp;
+ BOOL bMarked;
+ if( pDataEdit )
+ {
+ TextSelection r = pDataEdit->GetSelection();
+ bMarked = r.HasRange();
+ }
+ else
+ bMarked = FALSE;
+ pMenu->EnableItem( RID_EDITREPEAT, (aFind.Len() != 0 ) );
+ pMenu->EnableItem( RID_EDITCUT, bMarked );
+ pMenu->EnableItem( RID_EDITCOPY, bMarked );
+ pMenu->EnableItem( RID_EDITPASTE, ( ::svt::OStringTransfer::PasteString( aTemp, this ) ) );
+ pMenu->EnableItem( RID_EDITDEL, bMarked );
+// pMenu->EnableItem( RID_HELPTOPIC, bMarked );
+
+ BOOL bHasText;
+ if( pDataEdit )
+ bHasText = pDataEdit->HasText();
+ else
+ bHasText = FALSE;
+ BOOL bRunning = pFrame->Basic().IsRunning();
+ BOOL bCanExecute = BOOL( (!bRunning && bHasText) || pFrame->bInBreak );
+ pMenu->EnableItem( RID_RUNSTART, bCanExecute );
+ pMenu->EnableItem( RID_RUNBREAK, bRunning && !pFrame->bInBreak);
+ pMenu->EnableItem( RID_RUNSTOP, bRunning );
+ pMenu->EnableItem( RID_RUNTOCURSOR, bCanExecute );
+ pMenu->EnableItem( RID_RUNSTEPINTO, bCanExecute );
+ pMenu->EnableItem( RID_RUNSTEPOVER, bCanExecute );
+ return TRUE;
+}
+
+long AppWin::DeInitMenu( Menu* pMenu )
+{
+ pMenu->EnableItem( RID_EDITREPEAT );
+ pMenu->EnableItem( RID_EDITCUT );
+ pMenu->EnableItem( RID_EDITCOPY );
+ pMenu->EnableItem( RID_EDITPASTE );
+ pMenu->EnableItem( RID_EDITDEL );
+
+ pMenu->EnableItem( RID_RUNSTART );
+ pMenu->EnableItem( RID_RUNBREAK );
+ pMenu->EnableItem( RID_RUNSTOP );
+ pMenu->EnableItem( RID_RUNTOCURSOR );
+ pMenu->EnableItem( RID_RUNSTEPINTO );
+ pMenu->EnableItem( RID_RUNSTEPOVER );
+ return TRUE;
+}
+
+// Menu Handler
+
+void AppWin::Command( const CommandEvent& rCEvt )
+{
+ TextSelection r = pDataEdit->GetSelection();
+ BOOL bHasMark = r.HasRange();
+ switch( rCEvt.GetCommand() ) {
+ case RID_FILESAVE:
+ QuerySave( QUERY_DISK_CHANGED | SAVE_NOT_DIRTY ); break;
+ case RID_FILESAVEAS:
+ SaveAs(); break;
+ case RID_EDITSEARCH:
+ Find(); break;
+ case RID_EDITREPLACE:
+ Replace(); break;
+ case RID_EDITREPEAT:
+ Repeat(); break;
+ case RID_EDITCUT:
+ if( bHasMark )
+ pDataEdit->Cut();
+ break;
+ case RID_EDITCOPY:
+ if( bHasMark )
+ pDataEdit->Copy();
+ break;
+ case RID_EDITPASTE:
+ {
+ ::rtl::OUString aTemp;
+ if( ::svt::OStringTransfer::PasteString( aTemp, this ) )
+ pDataEdit->Paste();
+ }
+ break;
+ case RID_EDITDEL:
+ /*if( bHasMark ) */pDataEdit->Delete();
+ break;
+ case RID_EDITUNDO:
+ pDataEdit->Undo();
+ break;
+ case RID_EDITREDO:
+ pDataEdit->Redo();
+ break;
+ case COMMAND_CONTEXTMENU:
+ {
+ PopupMenu *pKontext = NULL;
+ pDataEdit->BuildKontextMenu( pKontext );
+ if ( pKontext )
+ {
+ USHORT nRes = pKontext->Execute( this, GetPointerPosPixel() );
+ if ( nRes )
+ pFrame->Command( nRes );
+ delete pKontext;
+ }
+ }
+ break;
+ }
+}
+
+
+BOOL AppWin::IsSkipReload()
+{
+ return nSkipReload != 0;
+}
+
+void AppWin::SkipReload( BOOL bSkip )
+{
+ DBG_ASSERT( bSkip || nSkipReload, "SkipReload aufgehoben ohne es zu aktivieren");
+ if ( bSkip )
+ nSkipReload++;
+ else
+ nSkipReload--;
+}
+
+BOOL AppWin::DiskFileChanged( USHORT nWhat )
+{
+ if ( !bHasFile )
+ return FALSE;
+
+ switch ( nWhat )
+ {
+ case SINCE_LAST_LOAD:
+ {
+ if ( bReloadAborted )
+ return TRUE;
+ else
+ return DiskFileChanged( SINCE_LAST_ASK_RELOAD );
+ }
+// uncomment to avoid compiler warning
+// break;
+ case SINCE_LAST_ASK_RELOAD:
+ {
+ String aFilename( GetText() );
+
+ DirEntry aFile( aFilename );
+ FileStat aStat( aFile );
+
+ return ( !aLastAccess.GetError() != !aStat.GetError() )
+ || aLastAccess.IsYounger( aStat ) || aStat.IsYounger( aLastAccess );
+ }
+// uncomment to avoid compiler warning
+// break;
+ default:
+ DBG_ERROR("Not Implemented in AppWin::DiskFileChanged");
+ }
+ return TRUE;
+}
+
+void AppWin::UpdateFileInfo( USHORT nWhat )
+{
+ switch ( nWhat )
+ {
+ case HAS_BEEN_LOADED:
+ {
+ bReloadAborted = FALSE;
+ UpdateFileInfo( ASKED_RELOAD );
+
+ }
+ break;
+ case ASKED_RELOAD:
+ {
+ String aFilename( GetText() );
+
+ DirEntry aFile( aFilename );
+ aLastAccess.Update( aFile );
+ }
+ break;
+ default:
+ DBG_ERROR("Not Implemented in AppWin::UpdateFileInfo");
+ }
+}
+
+void AppWin::CheckReload()
+{
+ if ( IsSkipReload() || !bHasFile )
+ return;
+
+ String aFilename( GetText() );
+ DirEntry aFile( aFilename );
+ if ( !aFilename.Len() )
+ return;
+
+ if ( !aFile.Exists() )
+ return;
+
+// FileStat aStat( aFile );
+
+ if ( DiskFileChanged( SINCE_LAST_ASK_RELOAD ) && ReloadAllowed() )
+ {
+ UpdateFileInfo( ASKED_RELOAD );
+ ToTop();
+ Update();
+ if ( (IsModified() && QueryBox( this, SttResId( IDS_ASKDIRTYRELOAD ) ).Execute() == RET_YES )
+ || ( !IsModified() && ( pFrame->IsAutoReload() || QueryBox( this, SttResId( IDS_ASKRELOAD ) ).Execute() == RET_YES ) ) )
+ {
+ Reload();
+ }
+ else
+ {
+ bReloadAborted = TRUE;
+ }
+ }
+}
+
+void AppWin::Reload()
+{
+ SkipReload();
+ TextSelection aSelMemo = pDataEdit->GetSelection();
+ Load( GetText() );
+ pDataEdit->SetSelection( aSelMemo );
+ SkipReload( FALSE );
+}
+
+// Load file
+BOOL AppWin::Load( const String& aName )
+{
+ SkipReload();
+ BOOL bErr;
+
+// if( !QuerySave() )
+// return;
+ bErr = !pDataEdit->Load( aName );
+ if( bErr )
+ {
+ ErrorBox aBox( this, SttResId( IDS_READERROR ) );
+ String aMsg = aBox.GetMessText();
+ aMsg.AppendAscii("\n\"");
+ aMsg.Append( aName );
+ aMsg.AppendAscii("\"");
+ if ( pFrame->IsAutoRun() )
+ {
+ printf( "%s\n", ByteString( aMsg, osl_getThreadTextEncoding() ).GetBuffer() );
+ }
+ else
+ {
+ aBox.SetMessText( aMsg );
+ aBox.Execute();
+ }
+ }
+ else
+ {
+ DirEntry aEntry( aName );
+ String aModName = aEntry.GetFull();
+ SetText( aModName );
+ UpdateFileInfo( HAS_BEEN_LOADED );
+ PostLoad();
+ bHasFile = TRUE;
+ }
+ SkipReload( FALSE );
+ return !bErr;
+}
+
+// Save file
+USHORT AppWin::ImplSave()
+{
+ SkipReload();
+ USHORT nResult = SAVE_RES_NOT_SAVED;
+ String s1 = *pNoName;
+ String s2 = GetText().Copy( 0, s1.Len() );
+ if( s1 == s2 )
+ nResult = SaveAs();
+ else {
+ String aName = GetText();
+ if ( pDataEdit->Save( aName ) )
+ {
+ nResult = SAVE_RES_SAVED;
+ bHasFile = TRUE;
+ }
+ else
+ {
+ nResult = SAVE_RES_ERROR;
+ ErrorBox( this, SttResId( IDS_WRITEERROR ) ).Execute();
+ }
+ UpdateFileInfo( HAS_BEEN_LOADED );
+ }
+ SkipReload( FALSE );
+ return nResult;
+}
+
+// Save to new file name
+USHORT AppWin::SaveAs()
+{
+ SkipReload();
+ String s1 = *pNoName;
+ String s2 = GetText().Copy( 0, s1.Len() );
+ if( s1 == s2 ) s2.Erase();
+ else s2 = GetText();
+ if( pFrame->QueryFileName( s2, GetFileType(), TRUE ) )
+ {
+ SetText( s2 );
+ PostSaveAs();
+ SkipReload( FALSE );
+ return ImplSave();
+ }
+ else
+ {
+ SkipReload( FALSE );
+ return SAVE_RES_CANCEL;
+ }
+}
+
+// Should we save the file?
+USHORT AppWin::QuerySave( QueryBits nBits )
+{
+ BOOL bQueryDirty = ( nBits & QUERY_DIRTY ) != 0;
+ BOOL bQueryDiskChanged = ( nBits & QUERY_DISK_CHANGED ) != 0;
+ BOOL bSaveNotDirty = ( nBits & SAVE_NOT_DIRTY ) != 0;
+
+ SkipReload();
+ short nResult;
+ if ( IsModified() || bSaveNotDirty )
+ nResult = RET_YES;
+ else
+ nResult = RET_NO;
+
+ BOOL bAlwaysEnableInput = pFrame->IsAlwaysEnableInput();
+ pFrame->AlwaysEnableInput( FALSE );
+ if( ( ( IsModified() || bSaveNotDirty ) && bQueryDirty ) || ( DiskFileChanged( SINCE_LAST_LOAD ) && bQueryDiskChanged ) )
+ {
+ ToTop();
+ if ( ( ( IsModified() && bQueryDirty ) && DiskFileChanged( SINCE_LAST_LOAD ) )
+ || ( IsModified() && ( DiskFileChanged( SINCE_LAST_LOAD ) && bQueryDiskChanged ) ) )
+ nResult = QueryBox( this, SttResId( IDS_ASK_DIRTY_AND_DISKCHANGE_SAVE ) ).Execute();
+ else if ( ( IsModified() && bQueryDirty ) )
+ nResult = QueryBox( this, SttResId( IDS_ASK_DIRTY_SAVE ) ).Execute();
+ else
+ nResult = QueryBox( this, SttResId( IDS_ASK_DISKCHANGE_SAVE ) ).Execute();
+ }
+ pFrame->AlwaysEnableInput( bAlwaysEnableInput );
+
+ USHORT nReturn;
+ switch( nResult )
+ {
+ case RET_YES:
+ nReturn = ImplSave();
+ break;
+ case RET_NO:
+ nReturn = SAVE_RES_NOT_SAVED;
+ break;
+ case RET_CANCEL:
+ nReturn = SAVE_RES_CANCEL;
+ break;
+ default:
+ DBG_ERROR("switch default where no default should be: Internal error");
+ nReturn = SAVE_RES_CANCEL;
+ }
+ SkipReload( FALSE );
+ return nReturn;
+}
+
+BOOL AppWin::Close()
+{
+ switch ( QuerySave( QUERY_DIRTY ) )
+ {
+ case SAVE_RES_NOT_SAVED:
+ case SAVE_RES_SAVED:
+ {
+ DockingWindow::Close();
+ delete this;
+ return TRUE;
+ }
+// uncomment to avoid compiler warning
+// break;
+ case SAVE_RES_ERROR:
+ return FALSE;
+// uncomment to avoid compiler warning
+// break;
+ case SAVE_RES_CANCEL:
+ return FALSE;
+// uncomment to avoid compiler warning
+// break;
+ default:
+ DBG_ERROR("Not Implemented in AppWin::Close");
+ return FALSE;
+ }
+}
+
+// Search and find text
+void AppWin::Find()
+{
+ SttResId aResId( IDD_FIND_DIALOG );
+ FindDialog aDlg( this, aResId, aFind );
+ if( aDlg.Execute() ) {
+ bFind = TRUE;
+ Repeat();
+ }
+}
+
+// Replace text
+void AppWin::Replace()
+{
+ SttResId aResId( IDD_REPLACE_DIALOG );
+ ReplaceDialog* pDlg = new ReplaceDialog
+ (this, aResId, aFind, aReplace );
+ if( pDlg->Execute() ) {
+ bFind = FALSE;
+ Repeat();
+ }
+}
+
+// Repeat search/replace operation
+void AppWin::Repeat()
+{
+ if( (aFind.Len() != 0 ) && ( pDataEdit->Find( aFind ) || (ErrorBox(this,SttResId(IDS_PATTERNNOTFOUND)).Execute() && FALSE) ) && !bFind )
+ pDataEdit->ReplaceSelected( aReplace );
+}
+
diff --git a/basic/source/app/appwin.hxx b/basic/source/app/appwin.hxx
new file mode 100644
index 000000000000..0e864e69eef9
--- /dev/null
+++ b/basic/source/app/appwin.hxx
@@ -0,0 +1,138 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _APPWIN_HXX
+#define _APPWIN_HXX
+
+//#include <sb.hxx>
+#include <vcl/dockwin.hxx>
+#include <tools/fsys.hxx>
+
+#include "app.hxx"
+#include "dataedit.hxx"
+
+typedef USHORT QueryBits;
+#define QUERY_NONE ( QueryBits ( 0x00 ) )
+#define QUERY_DIRTY ( QueryBits ( 0x01 ) )
+#define QUERY_DISK_CHANGED ( QueryBits ( 0x02 ) )
+#define QUERY_ALL ( QUERY_DIRTY | QUERY_DISK_CHANGED )
+#define SAVE_NOT_DIRTY ( QueryBits ( 0x04 ) )
+
+#define SAVE_RES_SAVED TRUE
+#define SAVE_RES_NOT_SAVED FALSE
+#define SAVE_RES_ERROR 3
+#define SAVE_RES_CANCEL 4
+
+
+#define SINCE_LAST_LOAD 1
+#define SINCE_LAST_ASK_RELOAD 2
+
+#define HAS_BEEN_LOADED 1 // includes ASKED_RELOAD
+#define ASKED_RELOAD 2
+
+
+#define TT_WIN_STATE_MAX 0x01
+#define TT_WIN_STATE_FLOAT 0x02
+#define TT_WIN_STATE_HIDE 0x04
+
+class BasicFrame;
+
+class AppWin : public DockingWindow, public SfxListener // Document window
+{
+ friend class MsgEdit;
+protected:
+ static short nNumber; // serial number
+ static short nCount; // number of edit windows
+ static String *pNoName; // "Untitled"
+ FileStat aLastAccess; // Last access time of loaded file
+ USHORT nSkipReload; // Sometimes there must not be a reload
+ BOOL bHasFile; // Otherwise reload does not make sense
+ BOOL bReloadAborted; // Is set if reload was cancelled so that we can ask again wehn closing
+
+ short nId; // ID-Nummer( "Unnamed n" )
+ BasicFrame* pFrame; // Parent-Window
+// Icon* pIcon; // Document icon
+ String aFind; // Search string
+ String aReplace; // Replace string
+ BOOL bFind; // TRUE if search not replace
+ void RequestHelp( const HelpEvent& ); // Help handler
+ void GetFocus(); // activate
+ virtual USHORT ImplSave(); // Save file
+ USHORT nWinState; // Maximized, Iconized or Normal
+ Point nNormalPos; // Position if normal
+ Size nNormalSize; // Size if Normal
+ virtual long PreNotify( NotifyEvent& rNEvt );
+ USHORT nWinId;
+
+public:
+ TYPEINFO();
+ AppWin( BasicFrame* );
+ ~AppWin();
+ DataEdit* pDataEdit; // Data area
+ virtual USHORT GetLineNr()=0; // Current line number
+ virtual long InitMenu( Menu* ); // Init of the menu
+ virtual long DeInitMenu( Menu* ); // reset to enable all shortcuts
+ virtual void Command( const CommandEvent& rCEvt ); // Command handler
+ virtual void Resize();
+ virtual void Help();
+ virtual BOOL Load( const String& ); // Load file
+ virtual void PostLoad(){} // Set source at module
+ virtual USHORT SaveAs(); // Save file as
+ virtual void PostSaveAs(){}
+ virtual void Find(); // find text
+ virtual void Replace(); // replace text
+ virtual void Repeat(); // repeat find/replace
+ virtual BOOL Close(); // close window
+ virtual void Activate(); // window was activated
+ virtual FileType GetFileType()=0; // returns the filetype
+ virtual BOOL ReloadAllowed(){ return TRUE; }
+ virtual void Reload(); // Reload after change on disk
+ virtual void LoadIniFile(){;} // (re)load ini file after change
+ void CheckReload(); // Checks and asks if reload should performed
+ BOOL DiskFileChanged( USHORT nWhat ); // Checks file for changes
+ void UpdateFileInfo( USHORT nWhat ); // Remembers last file state
+ BOOL IsSkipReload(); // Should we test reload?
+ void SkipReload( BOOL bSkip = TRUE );
+ USHORT GetWinState(){ return nWinState; }
+ void Maximize();
+ void Restore();
+ void Minimize( BOOL bMinimize );
+ void Cascade( USHORT nNr );
+
+ USHORT QuerySave( QueryBits nBits = QUERY_ALL );
+ BOOL IsModified() { return pDataEdit->IsModified(); }
+ BasicFrame* GetBasicFrame() { return pFrame; }
+ virtual void TitleButtonClick( USHORT nButton );
+ virtual void SetText( const XubString& rStr );
+
+ USHORT GetWinId() { return nWinId; }
+ void SetWinId( USHORT nWId ) { nWinId = nWId; }
+};
+
+DECLARE_LIST( EditList, AppWin* )
+
+#endif
diff --git a/basic/source/app/basic.hrc b/basic/source/app/basic.hrc
new file mode 100644
index 000000000000..e4a69d9d2942
--- /dev/null
+++ b/basic/source/app/basic.hrc
@@ -0,0 +1,184 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#define RID_OPTLIST 101
+#define RID_OPTLINES 102
+#define RID_OPTPACKS 103
+#define RID_OPTPACKD 104
+#define RID_OPTWARN1 105
+#define RID_OPTWARN2 106
+#define RID_OPTVIRT 107
+#define RID_PARAMS 108
+#define RID_RETTYPE 109
+#define RID_RETVAL 110
+//#define RID_APPICON 500
+//#define RID_APPICON2 501
+//#define RID_WORKICON 502
+//#define RID_LOADICON 503
+//#define RID_SAVEICON 504
+#define RID_APPMENUBAR 1000
+#define RID_APPFILE 1001
+#define RID_APPEDIT 1002
+#define RID_APPRUN 1003
+#define RID_APPWINDOW 1004
+#define RID_APPHELP 1005
+#define RID_FILE 1100
+#define RID_FILENEW 1101
+#define RID_FILEOPEN 1102
+#define RID_FILECLOSE 1103
+#define RID_FILESAVE 1104
+#define RID_FILESAVEAS 1105
+#define RID_FILELOADLIB 1106
+#define RID_FILESAVELIB 1107
+#define RID_FILEPRINT 1109
+#define RID_FILESETUP 1110
+#define RID_QUIT 1111
+#define IDM_FILE_LRU1 1112
+#define IDM_FILE_LRUn 1199
+#define RID_EDIT 1200
+#define RID_EDITUNDO 1201
+#define RID_EDITREDO 1202
+#define RID_EDITCUT 1203
+#define RID_EDITCOPY 1204
+#define RID_EDITPASTE 1205
+#define RID_EDITDEL 1206
+#define RID_EDITSEARCH 1207
+#define RID_EDITREPLACE 1208
+#define RID_EDITREPEAT 1209
+#define RID_RUN 1300
+#define RID_RUNCOMPILE 1301
+#define RID_RUNSTART 1302
+#define RID_RUNBREAK 1304
+#define RID_RUNSTOP 1303
+#define RID_RUNNEXTERR 1307
+#define RID_RUNPREVERR 1308
+#define RID_RUNDISAS 1310
+#define RID_RUNSTEPINTO 1311
+#define RID_RUNSTEPOVER 1312
+#define RID_RUNTOCURSOR 1313
+#define RID_TOGLEBRKPNT 1314
+#define RID_TT_EXTRAS_NAME 1400
+#define RID_TT_EXTRAS 1401
+#define RID_OPTIONS 1402
+#define RID_DECLARE_HELPER 1403
+#define RID_WINDOW 1501
+#define RID_WINTILE 1502
+#define RID_WINTILEHORZ 1503
+#define RID_WINTILEVERT 1504
+#define RID_WINCASCADE 1505
+#define RID_WIN_FILE1 1520
+#define RID_WIN_FILEn 1599
+
+#define RID_HELP 1601
+//#define RID_HELPINDEX 1602
+//#define RID_HELPKEYS 1603
+//#define RID_HELPINTRO 1604
+//#define RID_HELPTOPIC 1605
+#define RID_HELPABOUT 1606
+#define RID_POPUP 1700
+#define RID_POPUPEDITVAR 1701
+
+
+
+#define IDS_APPNAME 2000
+#define IDS_APPNAME2 2001
+#define IDS_APPMODE_BREAK 2002
+#define IDS_APPMODE_RUN 2003
+#define IDS_NONAME 2100
+#define IDS_NONAMEFILE 2101
+#define IDS_INCFILE 2102
+#define IDS_LIBFILE 2103
+#define IDS_RESFILE 2104
+#define IDS_TXTFILE 2105
+#define IDS_READERROR 2103
+#define IDS_WRITEERROR 2104
+#define IDS_COMPERROR 2105
+#define IDS_CONTINUE 2106
+#define IDS_CANCEL 2107
+#define IDS_NOPRINTERERROR 2108
+#define IDS_PATTERNNOTFOUND 2109
+#define IDS_INVALID_VALUE 2110
+#define IDS_ASK_DIRTY_SAVE 2200
+#define IDS_ASK_DISKCHANGE_SAVE 2201
+#define IDS_ASK_DIRTY_AND_DISKCHANGE_SAVE 2202
+#define IDS_ASKSAVEERROR 2203
+#define IDS_ASKRELOAD 2204
+#define IDS_ASKDIRTYRELOAD 2205
+#define IDS_LOADDLG 2300
+#define IDS_SAVEDLG 2301
+#define IDS_BASFILTER 2304
+#define IDS_LIBFILTER 2305
+#define IDS_INCFILTER 2306
+#define IDS_RESFILTER 2307
+#define IDS_TXTFILTER 2308
+#define IDS_PAGE 2401
+#define IDS_PRINTMSG 2402
+#define IDS_CANTLOAD 2501
+#define IDS_CANTSAVE 2502
+#define IDS_ERROR1 2601
+#define IDS_ERROR2 2602
+#define IDS_WARNING1 2603
+#define IDS_NO_LONGNAME 2604
+#define IDS_WARNING_PREFIX 2605
+#define IDS_OBJECT 2606
+#define IDS_EDIT_VAR 2607
+
+#define IDS_NOMAINPGM 2701
+#define IDS_DISASWIN 2702
+#define IDS_RUNNING 2703
+#define IDS_NOT_YET_IMPLEMENTED 2704
+#define IDS_LOSS_OF_INFORMATION 2705
+
+#define RID_ACCEL 3000
+
+#define IDD_LOADSAVE_DIALOG 4001
+#define IDD_ABOUT_DIALOG 4002
+#define IDD_TT_ABOUT_DIALOG 4003
+#define IDD_FIND_DIALOG 4004
+#define IDD_REPLACE_DIALOG 4005
+#define IDD_PRINT_DIALOG 4006
+#define IDD_OPTIONS_DLG 4007
+#define RID_TP_PROFILE 4008
+#define RID_TP_CRASH 4009
+#define RID_TP_MISC 4010
+#define RID_TP_FONT 4011
+#define RID_TP_GENERIC 4012
+#define IDD_DISPLAY_HID 4013
+#define IDD_EDIT_VAR 4014
+
+
+//#define RID_APPFONT 5000
+//#define RID_APPEDITFONT 5001
+//#define RID_DLGBRUSH 5002
+#define RID_CALLDLG 6001
+#define MBP_PLUS 8001
+#define MBP_MINUS 8002
+#define RID_IMGLST_LAYOUT 8005
+#define MAIN_ACCEL 9001
+
+#define LOAD_CONF 10001
+#define WORK 10002
+#define FILENAME 10003
diff --git a/basic/source/app/basic.src b/basic/source/app/basic.src
new file mode 100644
index 000000000000..0713fd859f56
--- /dev/null
+++ b/basic/source/app/basic.src
@@ -0,0 +1,1472 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "basic.hrc"
+#include "resids.hrc"
+
+ModalDialog RID_CALLDLG {
+ PosSize = MAP_SYSFONT (18,18,142,142);
+ SVLook = TRUE;
+ MOVEABLE = TRUE;
+ CLOSEABLE = TRUE;
+// WinChilds = {
+// FixedText {
+// Text = "Aktuelle Parameter";
+// PosSize = MAP_SYSFONT (10,10,120,8);
+// };
+// };
+ FixedText RID_RETTYPE {
+ PosSize = MAP_SYSFONT (10,70,120,8);
+ };
+ Edit RID_RETVAL {
+ PosSize = MAP_SYSFONT (10,85,120,12);
+ Border = TRUE;
+ TabStop = TRUE;
+ };
+ ListBox RID_PARAMS {
+ PosSize = MAP_SYSFONT (10,25,120,40);
+ TabStop = TRUE;
+ Border = TRUE;
+ };
+ OKButton RID_OK {
+ PosSize = MAP_SYSFONT (50,105,40,14);
+ TabStop = TRUE;
+ DefButton = TRUE;
+ };
+ Text[ en-US ] = "Dynamic Link No. ";
+};
+
+ModalDialog IDD_ABOUT_DIALOG {
+ Pos = MAP_APPFONT( 58, 17 );
+ Size = MAP_APPFONT( 155, 106 );
+ SVLook = TRUE;
+/*
+ WINCHILDS = {
+ FixedText {
+ Pos = MAP_APPFONT( 40, 5 );
+ Size = MAP_APPFONT( 110, 10 );
+ TEXT = "Testtool";
+ CENTER = TRUE;
+ };
+ FixedText {
+ Pos = MAP_APPFONT( 40, 20 );
+ Size = MAP_APPFONT( 110, 20 );
+ TEXT = "Ojektorientiertes BASIC-Entwicklungssystem";
+ CENTER = TRUE;
+ };
+ FixedText {
+ Pos = MAP_APPFONT( 40, 45 );
+ Size = MAP_APPFONT( 110, 10 );
+ TEXT = "Version 2.0 May 2002";
+ CENTER = TRUE;
+ };
+ FixedText {
+ Pos = MAP_APPFONT( 40, 60 );
+ Size = MAP_APPFONT( 110, 10 );
+ TEXT = "1995-2010 Oracle";
+ CENTER = TRUE;
+ };
+ };
+*/
+// FixedIcon RID_ICON {
+// Pos = MAP_APPFONT( 20, 26 );
+// Size = MAP_APPFONT( 20, 20 );
+// FIXED = Icon {
+// FILE = "basic.ico";
+// };
+// };
+ OKButton RID_OK {
+ Pos = MAP_APPFONT( 55, 80 );
+ Size = MAP_APPFONT( 40, 14 );
+ DefButton = TRUE;
+ };
+};
+
+ModalDialog IDD_TT_ABOUT_DIALOG {
+ Pos = MAP_APPFONT( 58, 17 );
+ Size = MAP_APPFONT( 120, 81 );
+ SVLook = TRUE;
+ MOVEABLE = TRUE;
+ FixedText 1 {
+ Pos = MAP_APPFONT( 5, 10 );
+ Size = MAP_APPFONT( 110, 10 );
+ CENTER = TRUE;
+ TEXT[ en-US ] = "VCLTestTool";
+ };
+ FixedText RID_VERSIONSTRING {
+ Pos = MAP_APPFONT( 5, 25 );
+ Size = MAP_APPFONT( 110, 10 );
+ Text = UPDVER;
+ CENTER = TRUE;
+ };
+ FixedText 4 {
+ Pos = MAP_APPFONT( 5, 40 );
+ Size = MAP_APPFONT( 110, 10 );
+ CENTER = TRUE;
+ TEXT[ en-US ] = "©1995-2010 Oracle";
+ };
+ OKButton RID_OK {
+ Pos = MAP_APPFONT( 40, 60 );
+ Size = MAP_APPFONT( 40, 14 );
+ DefButton = TRUE;
+ };
+ TEXT[ en-US ] = "About VCLTestTool";
+};
+
+ModalDialog IDD_FIND_DIALOG {
+ Pos = MAP_APPFONT( 69, 30 );
+ Size = MAP_APPFONT( 185, 70 );
+ SVLook = TRUE;
+ MOVEABLE = TRUE;
+ // CLOSEABLE = TRUE; // Hat cancelbutton
+
+ FixedText RID_FIXEDTEXT1 {
+ Pos = MAP_APPFONT( 5, 10 );
+ Size = MAP_APPFONT( 30, 10 );
+ TEXT[ en-US ] = "~Text";
+ };
+ Edit RID_FIND {
+ BORDER = TRUE;
+ Pos = MAP_APPFONT( 40, 8 );
+ Size = MAP_APPFONT( 135, 12 );
+ TABSTOP = TRUE;
+ };
+ OKButton RID_OK {
+ Pos = MAP_APPFONT( 30, 30 );
+ Size = MAP_APPFONT( 50, 14 );
+ TABSTOP = TRUE;
+ DefButton = TRUE;
+ TEXT[ en-US ] = "~Find";
+ };
+ CancelButton RID_CANCEL {
+ Pos = MAP_APPFONT( 105, 30 );
+ Size = MAP_APPFONT( 50, 14 );
+ TABSTOP = TRUE;
+ TEXT[ en-US ] = "~Cancel";
+ };
+ TEXT[ en-US ] = "Testtool: Find Text";
+};
+
+ModalDialog IDD_REPLACE_DIALOG {
+ Pos = MAP_APPFONT( 69, 30 );
+ Size = MAP_APPFONT( 185, 88 );
+ SVLook = TRUE;
+ MOVEABLE = TRUE;
+ // CLOSEABLE = TRUE; // Hat cancelbutton
+ FixedText RID_FIXEDTEXT1 {
+ Pos = MAP_APPFONT( 5, 10 );
+ Size = MAP_APPFONT( 55, 10 );
+ TEXT[ en-US ] = "~Search for";
+ };
+ FixedText RID_FIXEDTEXT2 {
+ Pos = MAP_APPFONT( 5, 30 );
+ Size = MAP_APPFONT( 55, 10 );
+ TEXT[ en-US ] = "~Replace by";
+ };
+ Edit RID_FIND {
+ BORDER = TRUE;
+ Pos = MAP_APPFONT( 65, 8 );
+ Size = MAP_APPFONT( 110, 12 );
+ TABSTOP = TRUE;
+ };
+ Edit RID_REPLACE {
+ BORDER = TRUE;
+ Pos = MAP_APPFONT( 65, 28 );
+ Size = MAP_APPFONT( 110, 12 );
+ TABSTOP = TRUE;
+ };
+ OKButton RID_OK {
+ Pos = MAP_APPFONT( 30, 50 );
+ Size = MAP_APPFONT( 50, 14 );
+ TABSTOP = TRUE;
+ DefButton = TRUE;
+ TEXT[ en-US ] = "~Replace";
+ };
+ CancelButton RID_CANCEL {
+ Pos = MAP_APPFONT( 105, 50 );
+ Size = MAP_APPFONT( 50, 14 );
+ TABSTOP = TRUE;
+ TEXT[ en-US ] = "~Cancel";
+ };
+ TEXT[ en-US ] = "Testtool: Replace Text";
+};
+
+InfoBox IDS_NOPRINTERERROR {
+ MESSAGE[ en-US ] = "The print function is not available!";
+};
+ErrorBox IDS_CANTLOAD {
+ MESSAGE[ en-US ] = "Library cannot be loaded!";
+ Title[ en-US ] = "Testtool Error";
+};
+ErrorBox IDS_CANTSAVE {
+ MESSAGE[ en-US ] = "Library cannot be saved!";
+ Title[ en-US ] = "Testtool Error";
+};
+ErrorBox IDS_NOMAINPGM {
+ MESSAGE[ en-US ] = "This window does not contain a main program!";
+ Title[ en-US ] = "Testtool Error";
+};
+ErrorBox IDS_READERROR {
+ MESSAGE[ en-US ] = "File cannot be read!";
+ Title[ en-US ] = "Testtool Error";
+};
+ErrorBox IDS_WRITEERROR {
+ MESSAGE[ en-US ] = "File cannot be saved!";
+ Title[ en-US ] = "Testtool Error";
+};
+ErrorBox IDS_PATTERNNOTFOUND {
+ MESSAGE[ en-US ] = "Search key not found!";
+ Title[ en-US ] = "Testtool Error";
+};
+ErrorBox IDS_INVALID_VALUE {
+ MESSAGE[ en-US ] = "The value is invalid and cannot be set.";
+ Title[ en-US ] = "Testtool Error";
+};
+
+QueryBox IDS_ASKSAVEERROR {
+ TITLE = "Testtool";
+ BUTTONS = WB_YES_NO;
+ MESSAGE[ en-US ] = "Error saving files! Run anyway?";
+ Title[ en-US ] = "Testtool";
+};
+QueryBox IDS_ASK_DIRTY_SAVE {
+ TITLE = "Testtool";
+ BUTTONS = WB_YES_NO_CANCEL;
+ MESSAGE[ en-US ] = "File has been changed. Save?";
+ Title[ en-US ] = "Testtool";
+};
+QueryBox IDS_ASK_DIRTY_AND_DISKCHANGE_SAVE {
+ TITLE = "Testtool";
+ BUTTONS = WB_YES_NO_CANCEL;
+ MESSAGE[ en-US ] = "File has been changed on data medium\nand in the Editor. Save?";
+ Title[ en-US ] = "Testtool";
+};
+QueryBox IDS_ASK_DISKCHANGE_SAVE {
+ TITLE = "Testtool";
+ BUTTONS = WB_YES_NO_CANCEL;
+ MESSAGE[ en-US ] = "File has been changed on data medium.\nOverwrite?";
+ Title[ en-US ] = "Testtool";
+};
+QueryBox IDS_ASKRELOAD {
+ TITLE = "Testtool";
+ BUTTONS = WB_YES_NO;
+ MESSAGE[ en-US ] = "File has been changed on data medium. Reload?";
+ Title[ en-US ] = "Testtool";
+};
+QueryBox IDS_ASKDIRTYRELOAD {
+ TITLE = "Testtool";
+ BUTTONS = WB_YES_NO;
+ MESSAGE[ en-US ] = "File has been changed on data medium\nand in the Editor. Reload?";
+ Title[ en-US ] = "Testtool";
+};
+QueryBox IDS_RUNNING {
+ TITLE = "Testtool";
+ BUTTONS = WB_YES_NO;
+ MESSAGE[ en-US ] = "BASIC is still running! Exit anyway?";
+ Title[ en-US ] = "Testtool";
+};
+QueryBox IDS_LOSS_OF_INFORMATION {
+ TITLE = "Testtool";
+ BUTTONS = WB_OK_CANCEL;
+ MESSAGE[ en-US ] = "Saving in an external format causes information loss.";
+ Title[ en-US ] = "Testtool";
+};
+
+InfoBox IDS_NOT_YET_IMPLEMENTED
+{
+ MESSAGE[ en-US ] = "Not yet implemented";
+};
+
+
+String IDS_WARNING1 {
+ TEXT[ en-US ] = "Warning ";
+};
+String IDS_ERROR1 {
+ TEXT[ en-US ] = "Error ";
+};
+String IDS_ERROR2 {
+ TEXT[ en-US ] = " in line ";
+};
+String IDS_NO_LONGNAME {
+ TEXT[ en-US ] = "No entries in Hid.Lst";
+};
+String IDS_WARNING_PREFIX
+{
+ Text[ en-US ] = "Warning: ";
+};
+String IDS_OBJECT
+{
+ Text[ en-US ] = "Object";
+};
+String IDS_EDIT_VAR
+{
+ Text[ en-US ] = "Edit ($Arg1)";
+};
+
+String IDS_APPNAME {
+ TEXT[ en-US ] = "Testtool";
+};
+String IDS_APPNAME2 {
+ TEXT[ en-US ] = "VCLTestTool";
+};
+String IDS_APPMODE_BREAK {
+ text[ en-US ] = "Break";
+};
+String IDS_APPMODE_RUN {
+ text[ en-US ] = "Run";
+};
+String IDS_NONAME {
+ TEXT[ en-US ] = "Unnamed";
+};
+
+String IDS_NONAMEFILE {
+#if defined ( UNX )
+TEXT = "*.bas";
+#else
+TEXT = "*.BAS";
+#endif
+};
+String IDS_INCFILE {
+#if defined ( UNX )
+TEXT = "*.inc";
+#else
+TEXT = "*.INC";
+#endif
+};
+String IDS_LIBFILE {
+#if defined ( UNX )
+TEXT = "*.sb";
+#else
+TEXT = "*.SB";
+#endif
+};
+String IDS_RESFILE {
+#if defined ( UNX )
+TEXT = "*.res";
+#else
+TEXT = "*.RES";
+#endif
+};
+String IDS_TXTFILE {
+#if defined ( UNX )
+TEXT = "*.txt";
+#else
+TEXT = "*.TXT";
+#endif
+};
+
+String IDS_LOADDLG {
+ TEXT[ en-US ] = "Testtool: Load File";
+};
+String IDS_SAVEDLG {
+ TEXT[ en-US ] = "Testtool: Save File";
+};
+String IDS_BASFILTER {
+ TEXT[ en-US ] = "Source files (*.BAS)";
+};
+String IDS_INCFILTER {
+ TEXT[ en-US ] = "Include files (*.INC)";
+};
+String IDS_LIBFILTER {
+ TEXT[ en-US ] = "Libraries (*.SB)";
+};
+String IDS_RESFILTER {
+ TEXT[ en-US ] = "Result files (*.RES)";
+};
+String IDS_TXTFILTER {
+ TEXT[ en-US ] = "Results as text file (*.TXT)";
+};
+String IDS_PAGE {
+ TEXT[ en-US ] = "Page ";
+};
+String IDS_PRINTMSG {
+ TEXT[ en-US ] = "Printout of ";
+};
+String IDS_CONTINUE {
+ TEXT[ en-US ] = "Continue";
+};
+String IDS_CANCEL {
+ TEXT[ en-US ] = "Cancel";
+};
+String IDS_DISASWIN {
+ TEXT[ en-US ] = "Disassembly";
+};
+//Icon RID_APPICON {
+// FILE = "basic.ico";
+//};
+//Icon RID_APPICON2 {
+// FILE = "testtool.ico";
+//};
+//Icon RID_WORKICON {
+// FILE = "work.ico";
+//};
+
+Bitmap MBP_PLUS {
+ File = "plus.bmp";
+};
+Bitmap MBP_MINUS {
+ File = "minus.bmp";
+};
+
+Menu RID_APPMENUBAR {
+ ItemList = {
+ MenuItem {
+ Identifier = RID_APPFILE;
+ SUBMENU = Menu ,RID_FILE;
+ TEXT[ en-US ] = "~File";
+ };
+ MenuItem {
+ Identifier = RID_APPEDIT;
+ SUBMENU = Menu ,RID_EDIT;
+ TEXT[ en-US ] = "~Edit";
+ };
+ MenuItem {
+ Identifier = RID_APPRUN;
+ SUBMENU = Menu ,RID_RUN;
+ TEXT[ en-US ] = "~Program";
+ };
+ MenuItem {
+ Identifier = RID_APPWINDOW;
+ SUBMENU = Menu ,RID_WINDOW;
+ TEXT[ en-US ] = "~Window";
+ };
+ MenuItem {
+ SEPARATOR = TRUE;
+ };
+ MenuItem {
+ HELP = TRUE;
+ Identifier = RID_APPHELP;
+ SUBMENU = Menu ,RID_HELP;
+ TEXT[ en-US ] = "~Help";
+ };
+ };
+};
+Menu RID_FILE {
+ ITEMLIST = {
+ MenuItem {
+ Identifier = RID_FILENEW;
+ TEXT[ en-US ] = "~New";
+ AccelKey = KeyCode { Function = KEYFUNC_NEW; };
+ };
+ MenuItem {
+ Identifier = RID_FILEOPEN;
+ TEXT[ en-US ] = "~Open...";
+ AccelKey = KeyCode { Function = KEYFUNC_OPEN; };
+ };
+ MenuItem {
+ SEPARATOR = TRUE;
+ };
+ MenuItem {
+ Identifier = RID_FILECLOSE;
+ TEXT[ en-US ] = "~Close";
+ AccelKey = KeyCode { Function = KEYFUNC_CLOSE; };
+ };
+ MenuItem {
+ Identifier = RID_FILESAVE;
+ TEXT[ en-US ] = "~Save";
+ AccelKey = KeyCode { Function = KEYFUNC_SAVE; };
+ };
+ MenuItem {
+ Identifier = RID_FILESAVEAS;
+ TEXT[ en-US ] = "Save~ As...";
+ AccelKey = KeyCode { Function = KEYFUNC_SAVEAS; };
+ };
+ MenuItem {
+ SEPARATOR = TRUE;
+ };
+ MenuItem {
+ Identifier = RID_FILELOADLIB;
+ TEXT[ en-US ] = "~Load Library...";
+ };
+ MenuItem {
+ Identifier = RID_FILESAVELIB;
+ TEXT[ en-US ] = "Save Li~brary...";
+ };
+ MenuItem {
+ SEPARATOR = TRUE;
+ };
+ MenuItem {
+ Identifier = RID_FILEPRINT;
+ TEXT[ en-US ] = "~Print";
+ };
+ MenuItem {
+ Identifier = RID_FILESETUP;
+ TEXT[ en-US ] = "P~rinter Setting...";
+ };
+ MenuItem {
+ SEPARATOR = TRUE;
+ };
+ MenuItem {
+ Identifier = RID_QUIT;
+ TEXT[ en-US ] = "~Exit";
+ AccelKey = KeyCode { Function = KEYFUNC_QUIT; };
+ };
+ };
+};
+Menu RID_EDIT {
+ ITEMLIST = {
+ MenuItem {
+ Identifier = RID_EDITUNDO;
+ TEXT[ en-US ] = "~Undo";
+// AccelKey = KeyCode { Function = KEYFUNC_CUT; };
+ };
+ MenuItem {
+ Identifier = RID_EDITREDO;
+ TEXT[ en-US ] = "~Redo";
+// AccelKey = KeyCode { Function = KEYFUNC_CUT; };
+ };
+ MenuItem {
+ SEPARATOR = TRUE;
+ };
+ MenuItem {
+ Identifier = RID_EDITCUT;
+ TEXT[ en-US ] = "~Cut";
+ AccelKey = KeyCode { Function = KEYFUNC_CUT; };
+ };
+ MenuItem {
+ Identifier = RID_EDITCOPY;
+ TEXT[ en-US ] = "~Copy";
+ AccelKey = KeyCode { Function = KEYFUNC_COPY; };
+ };
+ MenuItem {
+ Identifier = RID_EDITPASTE;
+ TEXT[ en-US ] = "~Paste";
+ AccelKey = KeyCode { Function = KEYFUNC_PASTE; };
+ };
+ MenuItem {
+ Identifier = RID_EDITDEL;
+ TEXT[ en-US ] = "~Delete";
+ AccelKey = KeyCode { Function = KEYFUNC_DELETE; };
+ };
+ MenuItem {
+ SEPARATOR = TRUE;
+ };
+ MenuItem {
+ Identifier = RID_EDITSEARCH;
+ TEXT[ en-US ] = "~Find...";
+ AccelKey = KeyCode { Function = KEYFUNC_FIND; };
+ };
+ MenuItem {
+ Identifier = RID_EDITREPLACE;
+ TEXT[ en-US ] = "~Replace...";
+ };
+ MenuItem {
+ Identifier = RID_EDITREPEAT;
+ TEXT[ en-US ] = "Repeat S~earch";
+ AccelKey = KeyCode { Code = KEY_F3; };
+// AccelKey = KeyCode { Function = KEYFUNC_REPEAT; };
+ };
+ };
+};
+Menu RID_RUN {
+ ITEMLIST = {
+ MenuItem {
+ Identifier = RID_RUNCOMPILE;
+ TEXT[ en-US ] = "~Compile";
+ };
+ MenuItem {
+ Identifier = RID_RUNDISAS;
+ TEXT[ en-US ] = "~Disassemble";
+ };
+ MenuItem {
+ Identifier = RID_RUNSTART;
+ TEXT[ en-US ] = "~Start";
+ AccelKey = KeyCode { Code = KEY_F5; };
+ };
+ MenuItem {
+ Identifier = RID_RUNSTEPINTO;
+ TEXT[ en-US ] = "~Single Step";
+ AccelKey = KeyCode { Code = KEY_F8; };
+ };
+ MenuItem {
+ Identifier = RID_RUNSTEPOVER;
+ TEXT[ en-US ] = "Si~ngle Step over Procedure";
+ AccelKey = KeyCode { Code = KEY_F10; };
+ };
+// MenuItem {
+// Identifier = RID_RUNTOCURSOR;
+// TEXT = "Run to cursor";
+// AccelKey = KeyCode { Code = KEY_F7; };
+// };
+ MenuItem {
+ Identifier = RID_TOGLEBRKPNT;
+ TEXT[ en-US ] = "Set / Delete Break Point";
+ AccelKey = KeyCode { Code = KEY_F9; };
+ };
+ MenuItem {
+ Identifier = RID_RUNBREAK;
+ TEXT[ en-US ] = "~Break";
+ AccelKey = KeyCode { Code = KEY_F5; Modifier1 = TRUE; };
+ };
+ MenuItem {
+ Identifier = RID_RUNSTOP;
+ TEXT[ en-US ] = "~Stop";
+ AccelKey = KeyCode { Code = KEY_F5; Shift = TRUE; };
+ };
+ MenuItem {
+ Identifier = RID_RUNNEXTERR;
+ TEXT[ en-US ] = "~Next Error";
+ AccelKey = KeyCode { Code = KEY_F8; Shift = TRUE; };
+ };
+ MenuItem {
+ Identifier = RID_RUNPREVERR;
+ TEXT[ en-US ] = "~Previous Error";
+ AccelKey = KeyCode { Code = KEY_F7; Shift = TRUE; };
+ };
+ MenuItem {
+ SEPARATOR = TRUE;
+ };
+ };
+};
+// Wird nur beim Test Tool eingefgt
+
+// unter Folgendem Name
+String RID_TT_EXTRAS_NAME
+{
+ Text[ en-US ] = "E~xtra";
+};
+
+Menu RID_TT_EXTRAS {
+ ITEMLIST = {
+ MenuItem {
+ Identifier = RID_OPTIONS;
+ TEXT[ en-US ] = "~Settings";
+ };
+/* comment out till it gets functionality #i26908
+ MenuItem {
+ Identifier = RID_DECLARE_HELPER;
+ Text [ en-US ] = "~Record Dialogs";
+ };*/
+ };
+};
+Menu RID_WINDOW {
+ ITEMLIST = {
+/* MenuItem {
+ Identifier = RID_WINCASCADE;
+ TEXT[ en-US ] = "~Cascade";
+ };
+ MenuItem {
+ Identifier = RID_WINTILE;
+ TEXT[ en-US ] = "~Tile";
+ };
+ MenuItem {
+ Identifier = RID_WINTILEHORZ;
+ TEXT[ en-US ] = "~Arrange Horizontally";
+ };
+ MenuItem {
+ Identifier = RID_WINTILEVERT;
+ TEXT[ en-US ] = "~Arrange Vertically";
+ };*/
+ };
+};
+Menu RID_HELP {
+ ITEMLIST = {
+/* MenuItem {
+ Identifier = RID_HELPINDEX;
+ TEXT = "~Index";
+ };
+ MenuItem {
+ SEPARATOR = TRUE;
+ };
+ MenuItem {
+ Identifier = RID_HELPKEYS;
+ TEXT = "~Tastaturbelegung";
+ };
+ MenuItem {
+ Identifier = RID_HELPINTRO;
+ TEXT = "~Anleitung";
+ };
+ MenuItem {
+ SEPARATOR = TRUE;
+ };
+ MenuItem {
+ Identifier = RID_HELPTOPIC;
+ TEXT = "~Markierter Text";
+ };
+ MenuItem {
+ SEPARATOR = TRUE;
+ };
+*/ MenuItem {
+ ABOUT = TRUE;
+ Identifier = RID_HELPABOUT;
+ TEXT[ en-US ] = "~About...";
+ };
+ };
+};
+ModelessDialog IDD_PRINT_DIALOG {
+ Pos = MAP_APPFONT( 83, 42 );
+ Size = MAP_APPFONT( 171, 94 );
+ MOVEABLE = TRUE;
+ SVLook = TRUE;
+ FixedText RID_TEXT {
+ Pos = MAP_APPFONT( 11, 9 );
+ Size = MAP_APPFONT( 146, 28 );
+ CENTER = TRUE;
+ TEXT[ en-US ] = "Print ";
+ };
+ CancelButton RID_CANCEL {
+ Pos = MAP_APPFONT( 56, 46 );
+ Size = MAP_APPFONT( 47, 19 );
+ TEXT[ en-US ] = "Cancel";
+ };
+ TEXT[ en-US ] = "Testtool: Print File";
+};
+
+
+TabDialog IDD_OPTIONS_DLG
+{
+ OutputSize = TRUE ;
+ SVLook = TRUE ;
+ Size = MAP_APPFONT( 248, 140 );
+ Text[ en-US ] = "Settings";
+ Moveable = TRUE ;
+ Closeable = TRUE ;
+ TabControl RES_TC_OPTIONS
+ {
+ OutputSize = TRUE ;
+ Pos = MAP_APPFONT( 4, 4 );
+ Size = MAP_APPFONT( 240, 116 );
+ Hide = FALSE ;
+ PageList =
+ {
+ PageItem
+ {
+ Identifier = RID_TP_GEN ;
+ Text[ en-US ] = "Generic";
+ };
+ PageItem
+ {
+ Identifier = RID_TP_PRO ;
+ Text[ en-US ] = "Profile";
+ };
+ PageItem
+ {
+ Identifier = RID_TP_CRA ;
+ Text[ en-US ] = "Crashreport";
+ };
+ PageItem
+ {
+ Identifier = RID_TP_MIS ;
+ Text[ en-US ] = "Misc";
+ };
+ PageItem
+ {
+ Identifier = RID_TP_FON ;
+ Text[ en-US ] = "Font";
+ };
+ };
+ };
+};
+
+
+TabPage RID_TP_GENERIC {
+ Hide = TRUE ;
+ SVLook = TRUE ;
+ Size = MAP_APPFONT( 244, 100 );
+ FixedLine RID_FL_AREA {
+ Pos = MAP_APPFONT( 4, 2 );
+ Size = MAP_APPFONT( 228, 8 );
+ Text[ en-US ] = "Area";
+ };
+ ComboBox RID_CB_AREA {
+ HScroll = TRUE;
+ VScroll = TRUE;
+ AutoHScroll = TRUE;
+ Border = TRUE;
+ Pos = MAP_APPFONT( 8, 12 );
+ Size = MAP_APPFONT( 132, 88 );
+ TabStop = TRUE;
+ DropDown = TRUE;
+ };
+ PushButton RID_PB_NEW_AREA {
+ Pos = MAP_APPFONT( 144, 12 );
+ Size = MAP_APPFONT( 40, 12 );
+ TabStop = TRUE;
+ Text[ en-US ] = "New";
+ };
+ PushButton RID_PD_DEL_AREA {
+ Pos = MAP_APPFONT( 188, 12 );
+ Size = MAP_APPFONT( 40, 12 );
+ TabStop = TRUE;
+ Text[ en-US ] = "Delete";
+ };
+ FixedLine RID_FL_VALUE {
+ Pos = MAP_APPFONT( 4, 32 );
+ Size = MAP_APPFONT( 228, 8 );
+ Text[ en-US ] = "Setting";
+ };
+ ComboBox RID_CB_VALUE {
+ HScroll = TRUE;
+ VScroll = TRUE;
+ AutoHScroll = TRUE;
+ Border = TRUE;
+ Pos = MAP_APPFONT( 8, 48 );
+ Size = MAP_APPFONT( 176, 44 );
+ TabStop = TRUE;
+ };
+ PushButton RID_PB_SELECT_FILE {
+ Pos = MAP_APPFONT( 188, 48 );
+ Size = MAP_APPFONT( 40, 12 );
+ TabStop = TRUE;
+ Text[ en-US ] = "Path ...";
+ Disable = TRUE;
+ Hide = TRUE;
+ };
+ PushButton RID_PB_NEW_VALUE {
+ Pos = MAP_APPFONT( 188, 48 );
+ Size = MAP_APPFONT( 40, 12 );
+ TabStop = TRUE;
+ Text[ en-US ] = "New";
+ };
+ PushButton RID_PB_DEL_VALUE {
+ Pos = MAP_APPFONT( 188, 64 );
+ Size = MAP_APPFONT( 40, 12 );
+ TabStop = TRUE;
+ Text[ en-US ] = "Delete";
+ };
+};
+
+
+TabPage RID_TP_PROFILE {
+ Hide = TRUE ;
+ SVLook = TRUE ;
+ Size = MAP_APPFONT( 244, 100 );
+ FixedLine RID_FL_PROFILE {
+ Pos = MAP_APPFONT( 4, 4 );
+ Size = MAP_APPFONT( 22, 8 );
+ Text[ en-US ] = "Profile";
+ };
+ ComboBox RID_CB_PROFILE {
+ HScroll = TRUE;
+ VScroll = TRUE;
+ AutoHScroll = TRUE;
+ Border = TRUE;
+ Pos = MAP_APPFONT( 30, 2 );
+ Size = MAP_APPFONT( 110, 88 );
+ TabStop = TRUE;
+ DropDown = TRUE;
+ };
+ PushButton RID_PB_NEW_PROFILE {
+ Pos = MAP_APPFONT( 144, 2 );
+ Size = MAP_APPFONT( 40, 12 );
+ TabStop = TRUE;
+ Text[ en-US ] = "New";
+ };
+ PushButton RID_PD_DEL_PROFILE {
+ Pos = MAP_APPFONT( 188, 2 );
+ Size = MAP_APPFONT( 40, 12 );
+ TabStop = TRUE;
+ Text[ en-US ] = "Delete";
+ };
+ FixedLine FL_DIRECTORIES {
+ Pos = MAP_APPFONT( 4, 16 );
+ Size = MAP_APPFONT( 230, 8 );
+ Text[ en-US ] = "Profile settings";
+ };
+ FixedText LOG_TEXT {
+ Pos = MAP_APPFONT( 7, 26 );
+ Size = MAP_APPFONT( 86, 12 );
+ Text[ en-US ] = "Log base directory";
+ };
+ FixedText BASIS_TEXT {
+ Pos = MAP_APPFONT( 7, 42 );
+ Size = MAP_APPFONT( 86, 12 );
+ Text[ en-US ] = "Base directory";
+ };
+ CheckBox HID_CHECK {
+ Pos = MAP_APPFONT( 7, 58 );
+ Size = MAP_APPFONT( 86, 12 );
+ Text[ en-US ] = "Default HID directory";
+ TabStop = TRUE;
+ Hide = FALSE;
+ };
+ Edit LOG_NAME {
+ Border = TRUE;
+ Pos = MAP_APPFONT( 97, 26 );
+ Size = MAP_APPFONT( 116, 12 );
+ TabStop = TRUE;
+ };
+ Edit BASIS_NAME {
+ Border = TRUE;
+ Pos = MAP_APPFONT( 97, 42 );
+ Size = MAP_APPFONT( 116, 12 );
+ TabStop = TRUE;
+ };
+ Edit HID_NAME {
+ Border = TRUE;
+ Pos = MAP_APPFONT( 97, 58 );
+ Size = MAP_APPFONT( 116, 12 );
+ TabStop = TRUE;
+ };
+ PushButton LOG_SET {
+ Pos = MAP_APPFONT( 217, 26 );
+ Size = MAP_APPFONT( 12, 12 );
+ TabStop = TRUE;
+ Text[ en-US ] = "...";
+ };
+ PushButton BASIS_SET {
+ Pos = MAP_APPFONT( 217, 42 );
+ Size = MAP_APPFONT( 12, 12 );
+ TabStop = TRUE;
+ Text[ en-US ] = "...";
+ };
+ PushButton HID_SET {
+ Pos = MAP_APPFONT( 217, 58 );
+ Size = MAP_APPFONT( 12, 12 );
+ TabStop = TRUE;
+ Text[ en-US ] = "...";
+ };
+ CheckBox CB_AUTORELOAD {
+ Pos = MAP_APPFONT( 7, 74 );
+ Size = MAP_APPFONT( 115, 12 );
+ Text[ en-US ] = "AutoReload";
+ };
+ CheckBox CB_AUTOSAVE {
+ Pos = MAP_APPFONT( 7, 87 );
+ Size = MAP_APPFONT( 115, 12 );
+ Text[ en-US ] = "Save before execute";
+ };
+ CheckBox CB_STOPONSYNTAXERRORS {
+ Pos = MAP_APPFONT( 132, 74 );
+ Size = MAP_APPFONT( 115, 12 );
+ Text[ en-US ] = "Stop on Syntax Errors";
+ };
+};
+
+TabPage RID_TP_CRASH {
+ Hide = TRUE ;
+ SVLook = TRUE ;
+ Size = MAP_APPFONT( 244, 100 );
+ FixedLine FL_CRASHREPORT {
+ Pos = MAP_APPFONT( 4, 2 );
+ Size = MAP_APPFONT( 230, 8 );
+ Text[ en-US ] = "Crashreport";
+ };
+ CheckBox CB_USEPROXY {
+ Pos = MAP_APPFONT( 8, 12 );
+ Size = MAP_APPFONT( 120, 12 );
+ Text[ en-US ] = "Use Proxy";
+ };
+ FixedText FT_CRHOST {
+ Pos = MAP_APPFONT( 8+12, 12+13 );
+ Size = MAP_APPFONT( 30, 12 );
+ Text[ en-US ] = "Host";
+ };
+ Edit ED_CRHOST {
+ Border = TRUE;
+ Pos = MAP_APPFONT( 43+12, 12+13 );
+ Size = MAP_APPFONT( 80, 12 );
+ TabStop = TRUE;
+ };
+ FixedText FT_CRPORT {
+ Pos = MAP_APPFONT( 8+12, 12+13+16 );
+ Size = MAP_APPFONT( 30, 12 );
+ Text[ en-US ] = "Port";
+ };
+ NumericField NF_CRPORT {
+ Border = TRUE;
+ Pos = MAP_APPFONT( 43+12, 12+13+16 );
+ Size = MAP_APPFONT( 40, 12 );
+ TabStop = TRUE;
+ Right = TRUE;
+ Repeat = TRUE;
+ Spin = TRUE;
+ Minimum = 1024;
+ Maximum = 0xffff;
+ First = 1024;
+ Last = 0xffff;
+ };
+ CheckBox CB_ALLOWCONTACT {
+ Pos = MAP_APPFONT( 8, 12+13+16+16 );
+ Size = MAP_APPFONT( 120, 12 );
+ Text[ en-US ] = "Allow Contact";
+ };
+ FixedText FT_EMAIL {
+ Pos = MAP_APPFONT( 8+12, 12+13+16+16+13 );
+ Size = MAP_APPFONT( 30, 12 );
+ Text[ en-US ] = "EMail";
+ };
+ Edit ED_EMAIL {
+ Border = TRUE;
+ Pos = MAP_APPFONT( 43+12, 12+13+16+16+13 );
+ Size = MAP_APPFONT( 80, 12 );
+ TabStop = TRUE;
+ };
+};
+
+
+TabPage RID_TP_MISC {
+ Hide = TRUE ;
+ SVLook = TRUE ;
+ Size = MAP_APPFONT( 244, 100 );
+ FixedLine FL_COMMUNICATION {
+ Pos = MAP_APPFONT( 4, 2 );
+ Size = MAP_APPFONT( 230, 8 );
+ Text[ en-US ] = "Communication";
+ };
+ FixedText FT_HOST {
+ Pos = MAP_APPFONT( 8, 12 );
+ Size = MAP_APPFONT( 30, 12 );
+ Text[ en-US ] = "Host";
+ };
+ Edit ED_HOST {
+ Border = TRUE;
+ Pos = MAP_APPFONT( 43, 12);
+ Size = MAP_APPFONT( 80, 12 );
+ TabStop = TRUE;
+ };
+ FixedText FT_TTPORT {
+ Pos = MAP_APPFONT( 132, 12 );
+ Size = MAP_APPFONT( 70, 12 );
+ Text[ en-US ] = "Testtool Port";
+ };
+ NumericField NF_TTPORT {
+ Border = TRUE;
+ Pos = MAP_APPFONT( 191, 12);
+ Size = MAP_APPFONT( 40, 12 );
+ TabStop = TRUE;
+ Right = TRUE;
+ Repeat = TRUE;
+ Spin = TRUE;
+ Minimum = 1024;
+ Maximum = 0xffff;
+ First = 1024;
+ Last = 0xffff;
+ };
+ FixedText FT_UNOPORT {
+ Pos = MAP_APPFONT( 132, 12+15 );
+ Size = MAP_APPFONT( 70, 12 );
+ Text[ en-US ] = "Remote UNO Port";
+ };
+ NumericField NF_UNOPORT {
+ Border = TRUE;
+ Pos = MAP_APPFONT( 191, 12+15);
+ Size = MAP_APPFONT( 40, 12 );
+ TabStop = TRUE;
+ Right = TRUE;
+ Repeat = TRUE;
+ Spin = TRUE;
+ Minimum = 1024;
+ Maximum = 0xffff;
+ First = 1024;
+ Last = 0xffff;
+ };
+
+ FixedLine FL_OTHER {
+ Pos = MAP_APPFONT( 4, 27 +13 );
+ Size = MAP_APPFONT( 230, 8 );
+ Text[ en-US ] = "Other settings";
+ };
+ FixedText TIMEOUT_TEXT {
+ Pos = MAP_APPFONT( 8, 50 );
+ Size = MAP_APPFONT( 70, 12 );
+ Text[ en-US ] = "Server Timeout";
+ };
+ TimeField SERVER_TIMEOUT {
+ Border = TRUE;
+ Pos = MAP_APPFONT( 83, 50 );
+ Size = MAP_APPFONT( 40, 12 );
+ TabStop = TRUE;
+ Repeat = TRUE;
+ Spin = TRUE;
+ Format = TIMEF_SEC;
+ Duration = TRUE;
+ };
+ FixedText FT_LRU {
+ Pos = MAP_APPFONT( 132, 50 );
+ Size = MAP_APPFONT( 70, 12 );
+ Text[ en-US ] = "Max LRU Files";
+ };
+ NumericField TF_MAX_LRU {
+ Border = TRUE;
+ Pos = MAP_APPFONT( 191, 50);
+ Size = MAP_APPFONT( 40, 12 );
+ TabStop = TRUE;
+ Right = TRUE;
+ Repeat = TRUE;
+ Spin = TRUE;
+ Minimum = 0;
+ Maximum = IDM_FILE_LRUn - IDM_FILE_LRU1 +1;
+ };
+ FixedText FT_PROGDIR {
+ Pos = MAP_APPFONT( 8, 50+15 );
+ Size = MAP_APPFONT( 76, 12 );
+ Text[ en-US ] = "OOo Program Dir";
+ };
+ Edit ED_PROGDIR {
+ Border = TRUE;
+ Pos = MAP_APPFONT( 83, 50+15 );
+ Size = MAP_APPFONT( 219-83-4, 12 );
+ TabStop = TRUE;
+ };
+ PushButton PB_PROGDIR {
+ Pos = MAP_APPFONT( 219, 50+15 );
+ Size = MAP_APPFONT( 12, 12 );
+ TabStop = TRUE;
+ Text[ en-US ] = "...";
+ };
+};
+
+
+TabPage RID_TP_FONT {
+ Hide = TRUE ;
+ SVLook = TRUE ;
+ Size = MAP_APPFONT( 244, 100 );
+ FixedText FT_FONTNAME {
+ Pos = MAP_APPFONT( 4, 2 );
+ Size = MAP_APPFONT( 123, 8 );
+ Text[ en-US ] = "Type";
+ };
+ ComboBox CB_FONTNAME {
+ Pos = MAP_APPFONT( 4, 12 );
+ Size = MAP_APPFONT( 123, 12*4 );
+ Sort = TRUE;
+ AutoHScroll = TRUE;
+ };
+ FixedText FT_FONTSTYLE {
+ Pos = MAP_APPFONT( 131, 2 );
+ Size = MAP_APPFONT( 65, 8 );
+ Text[ en-US ] = "Typeface";
+ };
+ ComboBox CB_FONTSTYLE {
+ Pos = MAP_APPFONT( 131, 12 );
+ Size = MAP_APPFONT( 65, 12*4 );
+ AutoHScroll = TRUE;
+ };
+ FixedText FT_FONTSIZE {
+ Pos = MAP_APPFONT( 200, 2 );
+ Size = MAP_APPFONT( 29, 8 );
+ Text[ en-US ] = "Size";
+ };
+ MetricBox MB_FONTSIZE {
+ Pos = MAP_APPFONT( 200, 12 );
+ Size = MAP_APPFONT( 29, 12*4 );
+ AutoHScroll = TRUE;
+ };
+ FixedText FT_PREVIEW {
+ Pos = MAP_APPFONT( 4, 12*5+5 );
+ Size = MAP_APPFONT( 229, 30 );
+ Center = TRUE;
+ Border = TRUE;
+ };
+ // 229 is max
+};
+
+
+FloatingWindow IDD_DISPLAY_HID {
+ OutputSize = TRUE;
+ SVLook = TRUE;
+ Size = MAP_APPFONT( 261, 160 );
+ Moveable = TRUE;
+ Closeable = TRUE;
+ Sizeable = TRUE;
+ Zoomable = TRUE;
+ Hide = TRUE;
+ ClipChildren = TRUE;
+ ToolBox RID_TB_CONF {
+ Border = TRUE;
+ Pos = MAP_APPFONT( 0, 0 );
+ Size = MAP_APPFONT( 260, 14 );
+/* ItemList = {
+ ToolBoxItem {
+ Text = "erster der Toolbox";
+ };
+ };*/
+// Hide = TRUE;
+ };
+ FixedText RID_FT_CONTROLS {
+ Pos = MAP_APPFONT( 4, 16 );
+ Size = MAP_APPFONT( 128, 10 );
+ Text[ en-US ] = "Controls";
+ };
+ MultiListBox RID_MLB_CONTROLS {
+ Border = TRUE;
+ AutoHScroll = TRUE;
+ Pos = MAP_APPFONT( 4, 28 );
+ Size = MAP_APPFONT( 208, 88 );
+ TabStop = TRUE;
+ };
+ FixedText RID_FT_SLOTS {
+ Pos = MAP_APPFONT( 4, 120 );
+ Size = MAP_APPFONT( 128, 10 );
+ Text[ en-US ] = "Slots";
+ };
+ MultiListBox RID_MLB_SLOTS {
+ Border = TRUE;
+ AutoHScroll = TRUE;
+ Pos = MAP_APPFONT( 4, 132 );
+ Size = MAP_APPFONT( 208, 24 );
+ TabStop = TRUE;
+ };
+ PushButton RID_PB_KOPIEREN {
+ Pos = MAP_APPFONT( 216, 28 );
+ Size = MAP_APPFONT( 40, 12 );
+ TabStop = TRUE;
+ Text[ en-US ] = "Copy";
+ };
+ PushButton RID_PB_BENENNEN {
+ Pos = MAP_APPFONT( 216, 44 );
+ Size = MAP_APPFONT( 40, 12 );
+ TabStop = TRUE;
+ Hide = TRUE;
+ Text[ en-US ] = "Name";
+ };
+ PushButton RID_PB_SELECTALL {
+ Pos = MAP_APPFONT( 216, 44 );
+ Size = MAP_APPFONT( 40, 12 );
+ TabStop = TRUE;
+ Text[ en-US ] = "Select all";
+ };
+ OKButton RID_OK_CLOSE {
+ Pos = MAP_APPFONT( 216, 144 );
+ Size = MAP_APPFONT( 40, 12 );
+ TabStop = TRUE;
+ Text[ en-US ] = "Close";
+ };
+ Text[ en-US ] = "Display HId";
+};
+
+
+
+Accelerator MAIN_ACCEL {
+ ItemList = {
+ AcceleratorItem {
+ Identifier = RID_FILENEW;
+ Key = KeyCode { Function = KEYFUNC_NEW; };
+ };
+ AcceleratorItem {
+ Identifier = RID_FILEOPEN;
+ Key = KeyCode { Function = KEYFUNC_OPEN; };
+ };
+ AcceleratorItem {
+ Identifier = RID_FILECLOSE;
+ Key = KeyCode { Function = KEYFUNC_CLOSE; };
+ };
+ AcceleratorItem {
+ Identifier = RID_FILESAVE;
+ Key = KeyCode { Function = KEYFUNC_SAVE; };
+ };
+ AcceleratorItem {
+ Identifier = RID_FILESAVEAS;
+ Key = KeyCode { Function = KEYFUNC_SAVEAS; };
+ };
+ AcceleratorItem {
+ Identifier = RID_QUIT;
+ Key = KeyCode { Function = KEYFUNC_QUIT; };
+ };
+// AcceleratorItem {
+// Identifier = RID_EDITCUT;
+// Key = KeyCode { Function = KEYFUNC_CUT; };
+// };
+// AcceleratorItem {
+// Identifier = RID_EDITCOPY;
+// Key = KeyCode { Function = KEYFUNC_COPY; };
+// };
+// AcceleratorItem {
+// Identifier = RID_EDITPASTE;
+// Key = KeyCode { Function = KEYFUNC_PASTE; };
+// };
+// AcceleratorItem {
+// Identifier = RID_EDITDEL;
+// Key = KeyCode { Function = KEYFUNC_DELETE; };
+// };
+ AcceleratorItem {
+ Identifier = RID_EDITSEARCH;
+ Key = KeyCode { Function = KEYFUNC_FIND; };
+ };
+ AcceleratorItem {
+ Identifier = RID_EDITREPEAT;
+ Key = KeyCode { Code = KEY_F3; };
+// Key = KeyCode { Function = KEYFUNC_REPEAT; };
+ };
+ AcceleratorItem {
+ Identifier = RID_RUNSTART;
+ Key = KeyCode { Code = KEY_F5; };
+ };
+ AcceleratorItem {
+ Identifier = RID_RUNSTEPINTO;
+ Key = KeyCode { Code = KEY_F8; };
+ };
+ AcceleratorItem {
+ Identifier = RID_TOGLEBRKPNT;
+ Key = KeyCode { Code = KEY_F9; };
+ };
+ AcceleratorItem {
+ Identifier = RID_RUNSTEPOVER;
+ Key = KeyCode { Code = KEY_F10; };
+ };
+ AcceleratorItem {
+ Identifier = RID_RUNTOCURSOR;
+ Key = KeyCode { Code = KEY_F7; };
+ };
+ AcceleratorItem {
+ Identifier = RID_RUNBREAK;
+ Key = KeyCode { Code = KEY_F5; Modifier1 = TRUE; };
+ };
+ AcceleratorItem {
+ Identifier = RID_RUNSTOP;
+ Key = KeyCode { Code = KEY_F5; Shift = TRUE; };
+ };
+ AcceleratorItem {
+ Identifier = RID_RUNNEXTERR;
+ Key = KeyCode { Code = KEY_F8; Shift = TRUE; };
+ };
+ AcceleratorItem {
+ Identifier = RID_RUNPREVERR;
+ Key = KeyCode { Code = KEY_F7; Shift = TRUE; };
+ };
+ };
+};
+
+ImageList RID_IMGLST_LAYOUT
+{
+ Prefix = "im";
+ MaskColor = Color { Red = 0xFFFF ; Green = 0xFFFF ; Blue = 0xFFFF ; };
+ IdList =
+ {
+ IMGID_BRKENABLED ;
+ IMGID_BRKDISABLED ;
+ IMGID_STEPMARKER ;
+ IMGID_ERRORMARKER ;
+ };
+};
+
+ModelessDialog IDD_EDIT_VAR {
+ Pos = MAP_APPFONT( 0, 0 );
+ Size = MAP_APPFONT( 171, 87 );
+ Moveable = TRUE;
+ Closeable = TRUE;
+ FixedText RID_FT_NAME {
+ Pos = MAP_APPFONT( 8, 8 );
+ Size = MAP_APPFONT( 40, 10 );
+ Text[ en-US ] = "Name";
+ };
+ FixedText RID_FT_CONTENT {
+ Pos = MAP_APPFONT( 8, 21 );
+ Size = MAP_APPFONT( 40, 10 );
+ Text[ en-US ] = "Content";
+ };
+ FixedText RID_FT_NEW_CONTENT {
+ Pos = MAP_APPFONT( 8, 38 );
+ Size = MAP_APPFONT( 40, 10 );
+ Text[ en-US ] = "New content";
+ };
+ FixedText RID_FT_NAME_VALUE {
+ Pos = MAP_APPFONT( 53, 8 );
+ Size = MAP_APPFONT( 111, 10 );
+ Text[ en-US ] = "Name of variable";
+ };
+ FixedText RID_FT_CONTENT_VALUE {
+ Pos = MAP_APPFONT( 53, 21 );
+ Size = MAP_APPFONT( 111, 10 );
+ Text[ en-US ] = "Previous contents";
+ };
+ RadioButton RID_RB_NEW_BOOL_T {
+ Hide = TRUE;
+ Pos = MAP_APPFONT( 53, 37 );
+ Size = MAP_APPFONT( 40, 12 );
+ TabStop = TRUE;
+ Text[ en-US ] = "True";
+ };
+ RadioButton RID_RB_NEW_BOOL_F {
+ Hide = TRUE;
+ Pos = MAP_APPFONT( 98, 37 );
+ Size = MAP_APPFONT( 40, 12 );
+ TabStop = TRUE;
+ Text[ en-US ] = "False";
+ };
+ NumericField RID_NF_NEW_INTEGER {
+ Border = TRUE;
+ Hide = TRUE;
+ Pos = MAP_APPFONT( 53, 37 );
+ Size = MAP_APPFONT( 111, 12 );
+ TabStop = TRUE;
+ Repeat = TRUE;
+ Spin = TRUE;
+ Minimum = -32768;
+ Maximum = 32767;
+ First = -32768;
+ Last = 32767;
+ SpinSize = 10;
+ };
+ NumericField RID_NF_NEW_LONG {
+ Border = TRUE;
+ Hide = TRUE;
+ Pos = MAP_APPFONT( 53, 37 );
+ Size = MAP_APPFONT( 111, 12 );
+ TabStop = TRUE;
+ Repeat = TRUE;
+ Spin = TRUE;
+ Minimum = -2147483648;
+ Maximum = 2147483647;
+ First = -2147483648;
+ Last = 2147483647;
+ SpinSize = 10;
+ };
+ Edit RID_ED_NEW_STRING {
+ Hide = TRUE;
+ Border = TRUE;
+ Pos = MAP_APPFONT( 53, 37 );
+ Size = MAP_APPFONT( 111, 12 );
+ TabStop = TRUE;
+ Text[ en-US ] = "Edit";
+ };
+ OKButton RID_OK {
+ Pos = MAP_APPFONT( 33, 58 );
+ Size = MAP_APPFONT( 40, 12 );
+ TabStop = TRUE;
+ };
+ CancelButton RID_CANCEL {
+ Pos = MAP_APPFONT( 93, 58 );
+ Size = MAP_APPFONT( 40, 12 );
+ TabStop = TRUE;
+ };
+ Text[ en-US ] = "Edit variable";
+};
+
+FloatingWindow LOAD_CONF {
+ SVLook = TRUE;
+ Pos = MAP_APPFONT( 66, 23 );
+ Size = MAP_APPFONT( 156, 51 );
+ Moveable = TRUE;
+ FixedText WORK {
+ SVLook = TRUE;
+ Pos = MAP_APPFONT( 0, 8 );
+ Size = MAP_APPFONT( 155, 10 );
+ Center = TRUE;
+ Text[ en-US ] = "Slot IDs";
+ };
+ FixedText FILENAME {
+ SVLook = TRUE;
+ Pos = MAP_APPFONT( 0, 21 );
+ Size = MAP_APPFONT( 155, 10 );
+ Center = TRUE;
+ Text[ en-US ] = "File.win";
+ };
+ Text[ en-US ] = "Reading Configuration Files";
+};
+
diff --git a/basic/source/app/basicrt.cxx b/basic/source/app/basicrt.cxx
new file mode 100644
index 000000000000..e6c9f550ad5b
--- /dev/null
+++ b/basic/source/app/basicrt.cxx
@@ -0,0 +1,144 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+
+
+#include "sbintern.hxx"
+#include "runtime.hxx"
+#include <basic/basicrt.hxx>
+
+const String BasicRuntime::GetSourceRevision()
+{
+ return pRun->GetModule()->GetComment();
+}
+
+const String BasicRuntime::GetModuleName( SbxNameType nType )
+{
+ return pRun->GetModule()->GetName( nType );
+}
+
+const String BasicRuntime::GetMethodName( SbxNameType nType )
+{
+ return pRun->GetMethod()->GetName( nType );
+}
+
+xub_StrLen BasicRuntime::GetLine()
+{
+ return pRun->nLine;
+}
+
+xub_StrLen BasicRuntime::GetCol1()
+{
+ return pRun->nCol1;
+}
+
+xub_StrLen BasicRuntime::GetCol2()
+{
+ return pRun->nCol2;
+}
+
+BOOL BasicRuntime::IsRun()
+{
+ return pRun->IsRun();
+}
+
+BasicRuntime BasicRuntime::GetNextRuntime()
+{
+ return BasicRuntime ( pRun->pNext );
+}
+
+
+
+const String BasicErrorStackEntry::GetSourceRevision()
+{
+ return pEntry->aMethod->GetModule()->GetComment();
+}
+
+const String BasicErrorStackEntry::GetModuleName( SbxNameType nType )
+{
+ return pEntry->aMethod->GetModule()->GetName( nType );
+}
+
+const String BasicErrorStackEntry::GetMethodName( SbxNameType nType )
+{
+ return pEntry->aMethod->GetName( nType );
+}
+
+xub_StrLen BasicErrorStackEntry::GetLine()
+{
+ return pEntry->nLine;
+}
+
+xub_StrLen BasicErrorStackEntry::GetCol1()
+{
+ return pEntry->nCol1;
+}
+
+xub_StrLen BasicErrorStackEntry::GetCol2()
+{
+ return pEntry->nCol2;
+}
+
+
+
+BasicRuntime BasicRuntimeAccess::GetRuntime()
+{
+ return BasicRuntime( pINST->pRun );
+}
+
+bool BasicRuntimeAccess::HasRuntime()
+{
+ return pINST && pINST->pRun != NULL;
+}
+
+USHORT BasicRuntimeAccess::GetStackEntryCount()
+{
+ return GetSbData()->pErrStack->Count();
+}
+
+BasicErrorStackEntry BasicRuntimeAccess::GetStackEntry( USHORT nIndex )
+{
+ return BasicErrorStackEntry( GetSbData()->pErrStack->GetObject( nIndex ) );
+}
+
+BOOL BasicRuntimeAccess::HasStack()
+{
+ return GetSbData()->pErrStack != NULL;
+}
+
+void BasicRuntimeAccess::DeleteStack()
+{
+ delete GetSbData()->pErrStack;
+ GetSbData()->pErrStack = NULL;
+}
+
+BOOL BasicRuntimeAccess::IsRunInit()
+{
+ return GetSbData()->bRunInit;
+}
diff --git a/basic/source/app/basmsg.hrc b/basic/source/app/basmsg.hrc
new file mode 100644
index 000000000000..5f66605dc725
--- /dev/null
+++ b/basic/source/app/basmsg.hrc
@@ -0,0 +1,45 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#include "basic/ttglobal.hrc"
+
+
+// Hier sind die Messages aus dem Verzeichnis /basic/source/app enhalten
+
+
+///////////////////////////////
+// Fehlermeldungen, die in das Resultfile gelangen.
+// *********************
+// *** !!ACHTUNG!! ***
+// *********************
+// Die Nummern drfen sich NIE! ndern,
+// da sie in den Resultfiles gespeichert sind, und bei erneutem Anzeigen
+// statdessen die entsprechenden neuen oder garkeine Strings angzeigt werden.
+///////////////////////////////
+
+#define S_PROG_START ( BAS_START + 0 )
+#define S_ERROR_OUTSIDE_TESTCASE ( BAS_START + 1 )
+#define S_WARNING_PREFIX ( BAS_START + 2 )
diff --git a/basic/source/app/basmsg.src b/basic/source/app/basmsg.src
new file mode 100644
index 000000000000..6de25e82a170
--- /dev/null
+++ b/basic/source/app/basmsg.src
@@ -0,0 +1,54 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#include "basmsg.hrc"
+
+
+// Hier sind die Messages aus dem Verzeichnis /basic/source/app enhalten
+
+
+///////////////////////////////
+// Fehlermeldungen, die in das Resultfile gelangen.
+// *********************
+// *** !!ACHTUNG!! ***
+// *********************
+// Die Nummern drfen sich NIE! ndern,
+// da sie in den Resultfiles gespeichert sind, und bei erneutem Anzeigen
+// statdessen die entsprechenden neuen oder garkeine Strings angzeigt werden.
+///////////////////////////////
+String S_PROG_START
+{
+ Text[ en-US ] = "Program start: ($Arg1); ($Arg2)";
+};
+String S_ERROR_OUTSIDE_TESTCASE
+{
+ Text[ en-US ] = "Error outside of test case";
+};
+String S_WARNING_PREFIX
+{
+ Text[ en-US ] = "Warning: ";
+};
+
diff --git a/basic/source/app/brkpnts.cxx b/basic/source/app/brkpnts.cxx
new file mode 100644
index 000000000000..7bafc87e548a
--- /dev/null
+++ b/basic/source/app/brkpnts.cxx
@@ -0,0 +1,386 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+#include <tools/list.hxx>
+#include <basic/sbx.hxx>
+#include <basic/sbmod.hxx>
+#include <basic/sbstar.hxx>
+#include <basic/sbmeth.hxx>
+#include <vcl/image.hxx>
+#include <svtools/textdata.hxx>
+#include <tools/config.hxx>
+#include <vcl/gradient.hxx>
+
+#ifndef _BASIC_TTRESHLP_HXX
+#include <basic/ttstrhlp.hxx>
+#endif
+
+#include "brkpnts.hxx"
+#include "basic.hrc"
+#include "resids.hrc"
+#include "basrid.hxx"
+
+struct Breakpoint
+{
+ USHORT nLine;
+
+ Breakpoint( USHORT nL ) { nLine = nL; }
+};
+
+
+ImageList* BreakpointWindow::pImages = NULL;
+
+
+BreakpointWindow::BreakpointWindow( Window *pParent )
+: Window( pParent )
+, nCurYOffset( 0 )
+, nMarkerPos( MARKER_NOMARKER )
+, pModule( NULL )
+, bErrorMarker( FALSE )
+{
+ if ( !pImages )
+ pImages = new ImageList( SttResId( RID_IMGLST_LAYOUT ) );
+
+ Gradient aGradient( GRADIENT_AXIAL, Color( 185, 182, 215 ), Color( 250, 245, 255 ) );
+ aGradient.SetAngle(900);
+ SetBackground( aGradient );
+ Show();
+}
+
+
+void BreakpointWindow::Reset()
+{
+ Breakpoint* pBrk = First();
+ while ( pBrk )
+ {
+ delete pBrk;
+ pBrk = Next();
+ }
+ Clear();
+
+ pModule->ClearAllBP();
+}
+
+void BreakpointWindow::SetModule( SbModule *pMod )
+{
+ pModule = pMod;
+ USHORT i;
+ for ( i=0 ; i < pModule->GetBPCount() ; i++ )
+ {
+ InsertBreakpoint( pModule->GetBP( i ) );
+ }
+ SetBPsInModule();
+}
+
+
+void BreakpointWindow::SetBPsInModule()
+{
+ pModule->ClearAllBP();
+
+ Breakpoint* pBrk = First();
+ while ( pBrk )
+ {
+ pModule->SetBP( (USHORT)pBrk->nLine );
+#if OSL_DEBUG_LEVEL > 1
+ DBG_ASSERT( !pModule->IsCompiled() || pModule->IsBP( (USHORT)pBrk->nLine ), "Brechpunkt wurde nicht gesetzt" );
+#endif
+ pBrk = Next();
+ }
+ for ( USHORT nMethod = 0; nMethod < pModule->GetMethods()->Count(); nMethod++ )
+ {
+ SbMethod* pMethod = (SbMethod*)pModule->GetMethods()->Get( nMethod );
+ DBG_ASSERT( pMethod, "Methode nicht gefunden! (NULL)" );
+ pMethod->SetDebugFlags( pMethod->GetDebugFlags() | SbDEBUG_BREAK );
+ }
+}
+
+
+void BreakpointWindow::InsertBreakpoint( USHORT nLine )
+{
+ Breakpoint* pNewBrk = new Breakpoint( nLine );
+ Breakpoint* pBrk = First();
+ while ( pBrk )
+ {
+ if ( nLine <= pBrk->nLine )
+ {
+ if ( pBrk->nLine != nLine )
+ Insert( pNewBrk );
+ else
+ delete pNewBrk;
+ pNewBrk = NULL;
+ pBrk = NULL;
+ }
+ else
+ pBrk = Next();
+ }
+ // No insert position found => LIST_APPEND
+ if ( pNewBrk )
+ Insert( pNewBrk, LIST_APPEND );
+
+ Invalidate();
+
+ if ( pModule->SetBP( nLine ) )
+ {
+#if OSL_DEBUG_LEVEL > 1
+ DBG_ASSERT( !pModule->IsCompiled() || pModule->IsBP( nLine ), "Brechpunkt wurde nicht gesetzt" );
+#endif
+ if ( StarBASIC::IsRunning() )
+ {
+ for ( USHORT nMethod = 0; nMethod < pModule->GetMethods()->Count(); nMethod++ )
+ {
+ SbMethod* pMethod = (SbMethod*)pModule->GetMethods()->Get( nMethod );
+ DBG_ASSERT( pMethod, "Methode nicht gefunden! (NULL)" );
+ pMethod->SetDebugFlags( pMethod->GetDebugFlags() | SbDEBUG_BREAK );
+ }
+ }
+ }
+#if OSL_DEBUG_LEVEL > 1
+ DBG_ASSERT( !pModule->IsCompiled() || pModule->IsBP( nLine ), "Brechpunkt wurde nicht gesetzt" );
+#endif
+}
+
+
+Breakpoint* BreakpointWindow::FindBreakpoint( ULONG nLine )
+{
+ Breakpoint* pBrk = First();
+ while ( pBrk )
+ {
+ if ( pBrk->nLine == nLine )
+ return pBrk;
+
+ pBrk = Next();
+ }
+
+ return (Breakpoint*)0;
+}
+
+
+void BreakpointWindow::AdjustBreakpoints( ULONG nLine, BOOL bInserted )
+{
+ if ( nLine == 0 ) //TODO: nLine == TEXT_PARA_ALL+1
+ return;
+ Breakpoint* pBrk = First();
+ while ( pBrk )
+ {
+ BOOL bDelBrk = FALSE;
+ if ( pBrk->nLine == nLine )
+ {
+ if ( bInserted )
+ pBrk->nLine++;
+ else
+ bDelBrk = TRUE;
+ }
+ else if ( pBrk->nLine > nLine )
+ {
+ if ( bInserted )
+ pBrk->nLine++;
+ else
+ pBrk->nLine--;
+ }
+
+ if ( bDelBrk )
+ {
+ ULONG n = GetCurPos();
+ delete Remove( pBrk );
+ pBrk = Seek( n );
+ }
+ else
+ {
+ pBrk = Next();
+ }
+ }
+ Invalidate();
+}
+
+
+void BreakpointWindow::LoadBreakpoints( String aFilename )
+{
+ Config aConfig(Config::GetConfigName( Config::GetDefDirectory(), CUniString("testtool") ));
+
+ aConfig.SetGroup("Breakpoints");
+
+ ByteString aBreakpoints;
+ aBreakpoints = aConfig.ReadKey( ByteString( aFilename, RTL_TEXTENCODING_UTF8 ) );
+
+ xub_StrLen i;
+
+ for ( i = 0 ; i < aBreakpoints.GetTokenCount( ';' ) ; i++ )
+ {
+ InsertBreakpoint( (USHORT)aBreakpoints.GetToken( i, ';' ).ToInt32() );
+ }
+}
+
+
+void BreakpointWindow::SaveBreakpoints( String aFilename )
+{
+ ByteString aBreakpoints;
+
+ Breakpoint* pBrk = First();
+ while ( pBrk )
+ {
+ if ( aBreakpoints.Len() )
+ aBreakpoints += ';';
+
+ aBreakpoints += ByteString::CreateFromInt32( pBrk->nLine );
+ pBrk = Next();
+ }
+
+ Config aConfig(Config::GetConfigName( Config::GetDefDirectory(), CUniString("testtool") ));
+
+ aConfig.SetGroup("Breakpoints");
+
+ if ( aBreakpoints.Len() )
+ aConfig.WriteKey( ByteString( aFilename, RTL_TEXTENCODING_UTF8 ), aBreakpoints );
+ else
+ aConfig.DeleteKey( ByteString( aFilename, RTL_TEXTENCODING_UTF8 ) );
+}
+
+
+void BreakpointWindow::Paint( const Rectangle& )
+{
+ Size aOutSz( GetOutputSize() );
+ long nLineHeight = GetTextHeight();
+
+ Image aBrk( pImages->GetImage( IMGID_BRKENABLED ) );
+ Size aBmpSz( aBrk.GetSizePixel() );
+ aBmpSz = PixelToLogic( aBmpSz );
+ Point aBmpOff( 0, 0 );
+ aBmpOff.X() = ( aOutSz.Width() - aBmpSz.Width() ) / 2;
+ aBmpOff.Y() = ( nLineHeight - aBmpSz.Height() ) / 2;
+
+ Breakpoint* pBrk = First();
+ while ( pBrk )
+ {
+#if OSL_DEBUG_LEVEL > 1
+ DBG_ASSERT( !pModule->IsCompiled() || pModule->IsBP( pBrk->nLine ), "Brechpunkt wurde nicht gesetzt" );
+#endif
+ ULONG nLine = pBrk->nLine-1;
+ ULONG nY = nLine*nLineHeight - nCurYOffset;
+ DrawImage( Point( 0, nY ) + aBmpOff, aBrk );
+ pBrk = Next();
+ }
+ ShowMarker( TRUE );
+}
+
+
+Breakpoint* BreakpointWindow::FindBreakpoint( const Point& rMousePos )
+{
+ long nLineHeight = GetTextHeight();
+ long nYPos = rMousePos.Y() + nCurYOffset;
+
+ Breakpoint* pBrk = First();
+ while ( pBrk )
+ {
+ ULONG nLine = pBrk->nLine-1;
+ long nY = nLine*nLineHeight;
+ if ( ( nYPos > nY ) && ( nYPos < ( nY + nLineHeight ) ) )
+ return pBrk;
+ pBrk = Next();
+ }
+ return 0;
+}
+
+
+void BreakpointWindow::ToggleBreakpoint( USHORT nLine )
+{
+ Breakpoint* pBrk = FindBreakpoint( nLine );
+ if ( pBrk ) // remove
+ {
+ pModule->ClearBP( nLine );
+ delete Remove( pBrk );
+ }
+ else // create one
+ {
+ InsertBreakpoint( nLine );
+ }
+
+ Invalidate();
+}
+
+void BreakpointWindow::ShowMarker( BOOL bShow )
+{
+ if ( nMarkerPos == MARKER_NOMARKER )
+ return;
+
+ Size aOutSz( GetOutputSize() );
+ long nLineHeight = GetTextHeight();
+
+ Image aMarker;
+ if ( bErrorMarker )
+ aMarker = pImages->GetImage( IMGID_ERRORMARKER );
+ else
+ aMarker = pImages->GetImage( IMGID_STEPMARKER );
+
+ Size aMarkerSz( aMarker.GetSizePixel() );
+ aMarkerSz = PixelToLogic( aMarkerSz );
+ Point aMarkerOff( 0, 0 );
+ aMarkerOff.X() = ( aOutSz.Width() - aMarkerSz.Width() ) / 2;
+ aMarkerOff.Y() = ( nLineHeight - aMarkerSz.Height() ) / 2;
+
+ ULONG nY = nMarkerPos*nLineHeight - nCurYOffset;
+ Point aPos( 0, nY );
+ aPos += aMarkerOff;
+ if ( bShow )
+ DrawImage( aPos, aMarker );
+ else
+ Invalidate( Rectangle( aPos, aMarkerSz ) );
+}
+
+
+void BreakpointWindow::MouseButtonDown( const MouseEvent& rMEvt )
+{
+ if ( rMEvt.GetClicks() == 2 )
+ {
+ Point aMousePos( PixelToLogic( rMEvt.GetPosPixel() ) );
+ long nLineHeight = GetTextHeight();
+ long nYPos = aMousePos.Y() + nCurYOffset;
+ long nLine = nYPos / nLineHeight + 1;
+ ToggleBreakpoint( sal::static_int_cast< USHORT >(nLine) );
+ Invalidate();
+ }
+}
+
+
+void BreakpointWindow::SetMarkerPos( USHORT nLine, BOOL bError )
+{
+ ShowMarker( FALSE ); // Remove old one
+ nMarkerPos = nLine;
+ bErrorMarker = bError;
+ ShowMarker( TRUE ); // Draw new one
+ Update();
+}
+
+
+void BreakpointWindow::Scroll( long nHorzScroll, long nVertScroll, USHORT nFlags )
+{
+ (void) nFlags; /* avoid warning about unused parameter */
+ nCurYOffset -= nVertScroll;
+ Window::Scroll( nHorzScroll, nVertScroll );
+}
+
diff --git a/basic/source/app/brkpnts.hxx b/basic/source/app/brkpnts.hxx
new file mode 100644
index 000000000000..05a03666a71b
--- /dev/null
+++ b/basic/source/app/brkpnts.hxx
@@ -0,0 +1,94 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <vcl/window.hxx>
+
+#define MARKER_NOMARKER 0xFFFF
+
+
+class SbModule;
+class BreakpointListe;
+struct Breakpoint;
+class ImageList;
+
+DECLARE_LIST( BreakpointList, Breakpoint* )
+
+class BreakpointWindow : public Window, public BreakpointList
+{
+using Window::Scroll;
+
+public:
+ BreakpointWindow( Window *pParent );
+// ~BreakpointWindow();
+
+ void Reset();
+
+ void SetModule( SbModule *pMod );
+ void SetBPsInModule();
+
+ void InsertBreakpoint( USHORT nLine );
+ void ToggleBreakpoint( USHORT nLine );
+ void AdjustBreakpoints( ULONG nLine, BOOL bInserted );
+
+ void LoadBreakpoints( String aFilename );
+ void SaveBreakpoints( String aFilename );
+
+protected:
+ Breakpoint* FindBreakpoint( ULONG nLine );
+
+private:
+ long nCurYOffset;
+ USHORT nMarkerPos;
+ SbModule* pModule;
+ BOOL bErrorMarker;
+ static ImageList *pImages;
+
+protected:
+ virtual void Paint( const Rectangle& );
+ Breakpoint* FindBreakpoint( const Point& rMousePos );
+ void ShowMarker( BOOL bShow );
+ virtual void MouseButtonDown( const MouseEvent& rMEvt );
+
+public:
+
+// void SetModulWindow( ModulWindow* pWin )
+// { pModulWindow = pWin; }
+
+ void SetMarkerPos( USHORT nLine, BOOL bErrorMarker = FALSE );
+
+ virtual void Scroll( long nHorzScroll, long nVertScroll,
+ USHORT nFlags = 0 );
+ long& GetCurYOffset() { return nCurYOffset; }
+};
+
+
+
+
+
+
+
+
diff --git a/basic/source/app/dataedit.hxx b/basic/source/app/dataedit.hxx
new file mode 100644
index 000000000000..cbb114108c56
--- /dev/null
+++ b/basic/source/app/dataedit.hxx
@@ -0,0 +1,116 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef DATAEDIT_HXX
+#define DATAEDIT_HXX
+
+#include <vcl/menu.hxx>
+#include <tools/link.hxx>
+#include <tools/gen.hxx>
+#include <svtools/textdata.hxx>
+
+class String;
+class Font;
+
+// Find, Load and Save must be implemented,
+// the others must exist in MemberType
+#define DATA_FUNC_DEF( MemberName, MemberType ) \
+public: \
+ MemberType MemberName; \
+ BOOL Find( const String& rStr ); \
+ BOOL Load( const String& rStr ); \
+ BOOL Save( const String& rStr ); \
+ \
+ void GrabFocus(){ MemberName.GrabFocus(); } \
+ void Show(){ MemberName.Show(); } \
+ void SetPosPixel( const Point& rNewPos ){ MemberName.SetPosPixel(rNewPos); }\
+ void SetSizePixel( const Size& rNewSize ){ MemberName.SetSizePixel(rNewSize); } \
+ Size GetSizePixel(){ return MemberName.GetSizePixel(); } \
+ Point GetPosPixel(){ return MemberName.GetPosPixel(); } \
+ void Update(){ MemberName.Update(); } \
+ void SetFont( const Font& rNewFont ){ MemberName.SetFont(rNewFont); } \
+ \
+ void Delete(); \
+ void Cut(); \
+ void Copy(); \
+ void Paste(); \
+ void Undo(); \
+ void Redo(); \
+ String GetText() const; \
+ void SetText( const String& rStr ); \
+ BOOL HasText() const; \
+ String GetSelected(); \
+ TextSelection GetSelection() const; \
+ void SetSelection( const TextSelection& rSelection ); \
+ USHORT GetLineNr() const; \
+ void ReplaceSelected( const String& rStr ); \
+ BOOL IsModified(); \
+ void SetModifyHdl( Link l );
+
+
+class DataEdit
+{
+public:
+ virtual ~DataEdit(){}
+
+ virtual void Delete()=0;
+ virtual void Cut()=0;
+ virtual void Copy()=0;
+ virtual void Paste()=0;
+
+ virtual void Undo()=0;
+ virtual void Redo()=0;
+
+ virtual BOOL Find( const String& )=0; // Find and select text
+ virtual BOOL Load( const String& )=0; // Load text from file
+ virtual BOOL Save( const String& )=0; // Save text to file
+ virtual String GetSelected()=0;
+ virtual void GrabFocus()=0;
+ virtual TextSelection GetSelection() const=0;
+ virtual void SetSelection( const TextSelection& rSelection )=0;
+ virtual USHORT GetLineNr() const=0;
+ virtual String GetText() const=0;
+ virtual void SetText( const String& rStr )=0;
+ virtual BOOL HasText() const=0; // to avoid GetText.Len()
+ virtual void ReplaceSelected( const String& rStr )=0;
+ virtual BOOL IsModified()=0;
+ virtual void SetModifyHdl( Link )=0;
+ virtual void Show()=0;
+ virtual void SetPosPixel( const Point& rNewPos )=0;
+ virtual void SetSizePixel( const Size& rNewSize )=0;
+ virtual Size GetSizePixel()=0;
+ virtual Point GetPosPixel()=0;
+ virtual void Update()=0;
+ virtual void SetFont( const Font& rNewFont )=0;
+
+ virtual void BuildKontextMenu( PopupMenu *&pMenu )
+ {
+ (void) pMenu; /* avoid warning about unused parameter */
+ }
+};
+
+#endif
diff --git a/basic/source/app/dialogs.cxx b/basic/source/app/dialogs.cxx
new file mode 100644
index 000000000000..c5abb472a0e4
--- /dev/null
+++ b/basic/source/app/dialogs.cxx
@@ -0,0 +1,1507 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+#include <tools/solar.h>
+
+#include <algorithm>
+#include <tools/rc.hxx>
+#include <vcl/metric.hxx>
+#ifndef _DIALOG_HXX //autogen
+#include <vcl/dialog.hxx>
+#endif
+#ifndef _BUTTON_HXX //autogen
+#include <vcl/button.hxx>
+#endif
+#ifndef _FIXED_HXX //autogen
+#include <vcl/fixed.hxx>
+#endif
+#ifndef _EDIT_HXX //autogen
+#include <vcl/edit.hxx>
+#endif
+#include <tools/config.hxx>
+#ifndef _MSGBOX_HXX //autogen
+#include <vcl/msgbox.hxx>
+#endif
+#include <tools/debug.hxx>
+#ifndef _SV_FILEDLG_HXX //autogen
+#include <svtools/filedlg.hxx>
+#endif
+#include <tools/stream.hxx>
+#include <tools/fsys.hxx>
+#include <svtools/stringtransfer.hxx>
+#include <vcl/splitwin.hxx>
+#ifndef _ZFORLIST_HXX //autogen
+#include <svl/zformat.hxx>
+#endif
+#include <svtools/ctrltool.hxx>
+
+// Ohne Includeschutz
+#include <svtools/svtdata.hxx>
+#include <svl/solar.hrc>
+
+
+#include <basic/dispdefs.hxx>
+#include <basic/testtool.hxx>
+#include "dialogs.hxx"
+#include "resids.hrc"
+#include "basic.hrc"
+
+#include "app.hxx"
+#include "basrid.hxx"
+
+#include "_version.h"
+
+AboutDialog::AboutDialog( Window* pParent, const ResId& id )
+: ModalDialog( pParent, id )
+, a1( this, ResId( 1, *id.GetResMgr() ) )
+, a4( this, ResId( 4, *id.GetResMgr() ) )
+, aVersionString( this, ResId( RID_VERSIONSTRING, *id.GetResMgr() ) )
+, aOk ( this, ResId( RID_OK, *id.GetResMgr() ) )
+{
+ FreeResource();
+}
+
+////////////////////////////////////////////////////////////////////
+
+FindDialog::FindDialog( Window* pParent, const ResId& id, String& Text )
+: ModalDialog( pParent, id )
+, aFT1( this, ResId( RID_FIXEDTEXT1, *id.GetResMgr() ) )
+, aFind( this, ResId( RID_FIND, *id.GetResMgr() ) )
+, aOk( this, ResId( RID_OK, *id.GetResMgr() ) )
+, aCancel( this, ResId( RID_CANCEL, *id.GetResMgr() ) )
+{
+ FreeResource();
+ pFind = &Text;
+ // Button-Handler:
+ aOk.SetClickHdl( LINK( this, FindDialog, ButtonClick ) );
+ aCancel.SetClickHdl( LINK( this, FindDialog, ButtonClick ) );
+ aFind.SetText( Text );
+}
+
+IMPL_LINK_INLINE_START( FindDialog, ButtonClick, Button *, pB )
+{
+ if( pB == &aOk ) {
+ *pFind = aFind.GetText();
+ EndDialog( TRUE );
+ } else EndDialog( FALSE );
+ return TRUE;
+}
+IMPL_LINK_INLINE_END( FindDialog, ButtonClick, Button *, pB )
+
+ReplaceDialog::ReplaceDialog(Window* pParent, const ResId& id, String& Old, String& New )
+: ModalDialog( pParent, id )
+, aFT1( this, ResId( RID_FIXEDTEXT1, *id.GetResMgr() ) )
+, aFT2( this, ResId( RID_FIXEDTEXT2, *id.GetResMgr() ) )
+, aFind( this, ResId( RID_FIND, *id.GetResMgr() ) )
+, aReplace(this, ResId( RID_REPLACE, *id.GetResMgr() ) )
+, aOk( this, ResId( RID_OK, *id.GetResMgr() ) )
+, aCancel( this, ResId( RID_CANCEL, *id.GetResMgr() ) )
+{
+ FreeResource();
+ pFind = &Old;
+ pReplace = &New;
+ // Button-Handler:
+ aOk.SetClickHdl( LINK( this, ReplaceDialog, ButtonClick ) );
+ aCancel.SetClickHdl( LINK( this, ReplaceDialog, ButtonClick ) );
+ aFind.SetText( Old );
+ aReplace.SetText( New );
+}
+
+IMPL_LINK( ReplaceDialog, ButtonClick, Button *, pB )
+{
+ if( pB == &aOk ) {
+ *pFind = aFind.GetText();
+ *pReplace = aReplace.GetText();
+ EndDialog( TRUE );
+ } else EndDialog( FALSE );
+ return TRUE;
+}
+
+////////////////////////////////////////////////////////////////////
+
+
+void CheckButtons( ComboBox &aCB, Button &aNewB, Button &aDelB )
+{
+ aNewB.Enable( aCB.GetEntryPos( aCB.GetText() ) == COMBOBOX_ENTRY_NOTFOUND && aCB.GetText().Len() );
+ aDelB.Enable( aCB.GetEntryPos( aCB.GetText() ) != COMBOBOX_ENTRY_NOTFOUND );
+}
+
+
+void ConfEdit::Init( Config &aConf )
+{
+ aConf.SetGroup("Misc");
+ ByteString aCurrentProfile = aConf.ReadKey( "CurrentProfile", "Path" );
+ aConf.SetGroup( aCurrentProfile );
+
+ String aTemp = UniString( aConf.ReadKey( aKeyName ), RTL_TEXTENCODING_UTF8 );
+ aEdit.SetText( aTemp );
+}
+
+ConfEdit::ConfEdit( Window* pParent, USHORT nResText, USHORT nResEdit, USHORT nResButton, const ByteString& aKN, Config &aConf )
+: PushButton( pParent, SttResId(nResButton) )
+, aText( pParent, SttResId(nResText) )
+, aEdit( pParent, SttResId(nResEdit) )
+, aKeyName(aKN)
+{
+ Init( aConf );
+}
+
+ConfEdit::ConfEdit( Window* pParent, USHORT nResEdit, USHORT nResButton, const ByteString& aKN, Config &aConf )
+: PushButton( pParent, SttResId(nResButton) )
+, aText( pParent )
+, aEdit( pParent, SttResId(nResEdit) )
+, aKeyName(aKN)
+{
+ Init( aConf );
+ aText.Hide();
+}
+
+void ConfEdit::Save( Config &aConf )
+{
+ aConf.SetGroup("Misc");
+ ByteString aCurrentProfile = aConf.ReadKey( "CurrentProfile", "Path" );
+ aConf.SetGroup( aCurrentProfile );
+ aConf.WriteKey( aKeyName, ByteString( aEdit.GetText(), RTL_TEXTENCODING_UTF8 ) );
+}
+
+void ConfEdit::Reload( Config &aConf )
+{
+ aConf.SetGroup("Misc");
+ ByteString aCurrentProfile = aConf.ReadKey( "CurrentProfile", "Path" );
+ aConf.SetGroup( aCurrentProfile );
+ String aValue = String( aConf.ReadKey( aKeyName ), RTL_TEXTENCODING_UTF8 );
+ aEdit.SetText( aValue );
+}
+
+void ConfEdit::Click()
+{
+ PathDialog aPD( this );
+ aPD.SetPath( aEdit.GetText() );
+ if ( aPD.Execute() )
+ {
+ aEdit.SetText( aPD.GetPath() );
+ aEdit.Modify();
+ }
+}
+
+OptConfEdit::OptConfEdit( Window* pParent, USHORT nResCheck, USHORT nResEdit, USHORT nResButton, const ByteString& aKN, ConfEdit& rBaseEdit, Config& aConf )
+: ConfEdit( pParent, nResEdit, nResButton, aKN, aConf )
+, aCheck( pParent, SttResId( nResCheck ) )
+, rBase( rBaseEdit )
+{
+ aCheck.SetToggleHdl( LINK( this, OptConfEdit, ToggleHdl ) );
+ rBase.SetModifyHdl( LINK( this, OptConfEdit, BaseModifyHdl ) );
+}
+
+void OptConfEdit::Reload( Config &aConf )
+{
+ ConfEdit::Reload( aConf );
+
+ DirEntry aCalculatedHIDDir( rBase.GetValue() );
+ aCalculatedHIDDir += DirEntry( "global/hid", FSYS_STYLE_FAT );
+
+ DirEntry aCurrentHIDDir( aEdit.GetText() );
+
+ aCheck.Check( aCalculatedHIDDir == aCurrentHIDDir || aEdit.GetText().Len() == 0 );
+ aEdit.Enable( !aCheck.IsChecked() );
+ Enable( !aCheck.IsChecked() );
+}
+
+IMPL_LINK( OptConfEdit, ToggleHdl, CheckBox*, EMPTYARG )
+{
+ BaseModifyHdl( &aEdit );
+ aEdit.Enable( !aCheck.IsChecked() );
+ Enable( !aCheck.IsChecked() );
+ return 0;
+}
+
+IMPL_LINK( OptConfEdit, BaseModifyHdl, Edit*, EMPTYARG )
+{
+ if ( aCheck.IsChecked() )
+ {
+ DirEntry aCalculatedHIDDir( rBase.GetValue() );
+ aCalculatedHIDDir += DirEntry( "global/hid", FSYS_STYLE_FAT );
+ aEdit.SetText( aCalculatedHIDDir.GetFull() );
+ }
+ return 0;
+}
+
+
+OptionsDialog::OptionsDialog( Window* pParent, const ResId& aResId )
+: TabDialog( pParent, aResId )
+, aTabCtrl( this, ResId( RES_TC_OPTIONS, *aResId.GetResMgr() ) )
+, aOK( this )
+, aCancel( this )
+, aConfig( Config::GetConfigName( Config::GetDefDirectory(), CUniString("testtool") ) )
+{
+ aConfig.EnablePersistence( FALSE );
+ FreeResource();
+ aTabCtrl.SetActivatePageHdl( LINK( this, OptionsDialog, ActivatePageHdl ) );
+ aTabCtrl.SetCurPageId( RID_TP_PRO );
+ ActivatePageHdl( &aTabCtrl );
+
+ aOK.SetClickHdl( LINK( this, OptionsDialog, OKClick ) );
+
+ aOK.Show();
+ aCancel.Show();
+}
+
+OptionsDialog::~OptionsDialog()
+{
+ for ( USHORT i = 0; i < aTabCtrl.GetPageCount(); i++ )
+ delete aTabCtrl.GetTabPage( aTabCtrl.GetPageId( i ) );
+};
+
+BOOL OptionsDialog::Close()
+{
+ if ( TabDialog::Close() )
+ {
+ delete this;
+ return TRUE;
+ }
+ else
+ return FALSE;
+}
+
+
+IMPL_LINK( OptionsDialog, ActivatePageHdl, TabControl *, pTabCtrl )
+{
+ USHORT nId = pTabCtrl->GetCurPageId();
+ // If TabPage was not yet created, do it
+ if ( !pTabCtrl->GetTabPage( nId ) )
+ {
+ TabPage *pNewTabPage = NULL;
+ switch ( nId )
+ {
+ case RID_TP_GEN:
+ pNewTabPage = new GenericOptions( pTabCtrl, aConfig );
+ break;
+ case RID_TP_PRO:
+ pNewTabPage = new ProfileOptions( pTabCtrl, aConfig );
+ break;
+ case RID_TP_CRA:
+ pNewTabPage = new CrashreportOptions( pTabCtrl, aConfig );
+ break;
+ case RID_TP_MIS:
+ pNewTabPage = new MiscOptions( pTabCtrl, aConfig );
+ break;
+ case RID_TP_FON:
+ pNewTabPage = new FontOptions( pTabCtrl, aConfig );
+ break;
+ default: DBG_ERROR( "PageHdl: Unbekannte ID!" );
+ }
+ DBG_ASSERT( pNewTabPage, "Keine Page!" );
+ pTabCtrl->SetTabPage( nId, pNewTabPage );
+ }
+ return 0;
+}
+
+
+
+
+IMPL_LINK( OptionsDialog, OKClick, Button *, pButton )
+{
+ (void) pButton; /* avoid warning about unused parameter */
+ aConfig.EnablePersistence();
+ GenericOptions *pGeneric;
+ pGeneric = (GenericOptions*)aTabCtrl.GetTabPage( RID_TP_GEN );
+ if ( pGeneric )
+ pGeneric->Save( aConfig );
+
+ ProfileOptions *pProfile;
+ pProfile = (ProfileOptions*)aTabCtrl.GetTabPage( RID_TP_PRO );
+ if ( pProfile )
+ pProfile->Save( aConfig );
+
+ CrashreportOptions *pCrash;
+ pCrash = (CrashreportOptions*)aTabCtrl.GetTabPage( RID_TP_CRA );
+ if ( pCrash )
+ pCrash->Save( aConfig );
+
+ MiscOptions *pMisc;
+ pMisc = (MiscOptions*)aTabCtrl.GetTabPage( RID_TP_MIS );
+ if ( pMisc )
+ pMisc->Save( aConfig );
+
+ FontOptions *pFonts;
+ pFonts = (FontOptions*)aTabCtrl.GetTabPage( RID_TP_FON );
+ if ( pFonts )
+ pFonts->Save( aConfig );
+
+ aConfig.Flush();
+
+ ((BasicApp*)GetpApp())->LoadIniFile();
+ Close();
+ return 0;
+}
+
+const ByteString ProfilePrefix("_profile_");
+const USHORT ProfilePrefixLen = ProfilePrefix.Len();
+
+ProfileOptions::ProfileOptions( Window* pParent, Config &rConfig )
+: TabPage( pParent, SttResId( RID_TP_PROFILE ) )
+, rConf( rConfig )
+
+, aFlProfile( this, SttResId( RID_FL_PROFILE ) )
+, aCbProfile( this, SttResId( RID_CB_PROFILE ) )
+, aPbNewProfile( this, SttResId( RID_PB_NEW_PROFILE ) )
+, aPbDelProfile( this, SttResId( RID_PD_DEL_PROFILE ) )
+
+, aDirs( this, SttResId(FL_DIRECTORIES) )
+, aLog( this, LOG_TEXT, LOG_NAME, LOG_SET, "LogBaseDir", rConfig )
+, aBasis( this, BASIS_TEXT, BASIS_NAME, BASIS_SET, "BaseDir", rConfig )
+, aHID( this, HID_CHECK, HID_NAME, HID_SET, "HIDDir", aBasis, rConfig )
+
+, aAutoReload( this, SttResId(CB_AUTORELOAD) )
+, aAutoSave( this, SttResId(CB_AUTOSAVE) )
+, aStopOnSyntaxError( this, SttResId(CB_STOPONSYNTAXERRORS) )
+{
+ FreeResource();
+
+ aCbProfile.EnableAutocomplete( TRUE );
+
+ aCbProfile.SetSelectHdl( LINK( this, ProfileOptions, Select ) );
+
+ aPbNewProfile.SetClickHdl( LINK( this, ProfileOptions, NewProfile ) );
+ aPbDelProfile.SetClickHdl( LINK( this, ProfileOptions, DelProfile ) );
+ aCbProfile.SetModifyHdl( LINK( this, ProfileOptions, CheckButtonsHdl ) );
+
+ LoadData();
+ ReloadProfile();
+}
+
+void ProfileOptions::LoadData()
+{
+ // collect all profiles (all groups starting with the ProfilePrefix)
+ for ( USHORT i = 0 ; i < rConf.GetGroupCount() ; i++ )
+ {
+ ByteString aProfile = rConf.GetGroupName( i );
+ if ( aProfile.Match( ProfilePrefix ) )
+ aCbProfile.InsertEntry( String( aProfile.Copy( ProfilePrefixLen ), RTL_TEXTENCODING_UTF8 ) );
+ }
+ // set the current profile
+ rConf.SetGroup( "Misc" );
+ ByteString aCurrentProfile = rConf.ReadKey( "CurrentProfile", "Path" );
+ aCbProfile.SetText( String( aCurrentProfile.Copy( ProfilePrefixLen ), RTL_TEXTENCODING_UTF8 ) );
+ CheckButtons( aCbProfile, aPbNewProfile, aPbDelProfile );
+}
+
+IMPL_LINK( ProfileOptions, Select, ComboBox*, EMPTYARG )
+{
+ if ( aCbProfile.GetEntryPos( aCbProfile.GetText() ) == LISTBOX_ENTRY_NOTFOUND )
+ return 1;
+ Save();
+ ByteString aProfileKey( ByteString( ProfilePrefix ).Append( ByteString( aCbProfile.GetText(), RTL_TEXTENCODING_UTF8 ) ) );
+ rConf.SetGroup( "Misc" );
+ rConf.WriteKey( "CurrentProfile", aProfileKey );
+ ReloadProfile();
+
+ return 0;
+}
+
+void ProfileOptions::ReloadProfile()
+{
+ aLog.Reload( rConf );
+ aBasis.Reload( rConf );
+ aHID.Reload( rConf );
+
+ ByteString aTemp;
+ rConf.SetGroup( "Misc" );
+ ByteString aCurrentProfile = rConf.ReadKey( "CurrentProfile", "Misc" );
+ rConf.SetGroup( aCurrentProfile );
+ aTemp = rConf.ReadKey( "AutoReload", "0" );
+ aAutoReload.Check( aTemp.Equals("1") );
+ aTemp = rConf.ReadKey( "AutoSave", "0" );
+ aAutoSave.Check( aTemp.Equals("1") );
+ aTemp = rConf.ReadKey( "StopOnSyntaxError", "0" );
+ aStopOnSyntaxError.Check( aTemp.Equals("1") );
+
+ CheckButtons( aCbProfile, aPbNewProfile, aPbDelProfile );
+}
+
+IMPL_LINK( ProfileOptions, DelProfile, Button*, EMPTYARG )
+{
+ String aProfile = aCbProfile.GetText();
+ ByteString aProfileKey( ByteString( ProfilePrefix ).Append( ByteString( aProfile, RTL_TEXTENCODING_UTF8 ) ) );
+ if ( aCbProfile.GetEntryPos( aProfile ) != COMBOBOX_ENTRY_NOTFOUND )
+ {
+ aCbProfile.RemoveEntry( aProfile );
+ rConf.DeleteGroup( aProfileKey );
+ }
+ // Set first remaining profile as current profile
+ aCbProfile.SetText( aCbProfile.GetEntry( 0 ) );
+ aProfile = aCbProfile.GetText();
+ aProfileKey = ByteString( ProfilePrefix ).Append( ByteString( aProfile, RTL_TEXTENCODING_UTF8 ) );
+ rConf.SetGroup( "Misc" );
+ rConf.WriteKey( "CurrentProfile", aProfileKey );
+ ReloadProfile();
+ CheckButtons( aCbProfile, aPbNewProfile, aPbDelProfile );
+
+ return 0;
+}
+
+IMPL_LINK( ProfileOptions, NewProfile, Button*, EMPTYARG )
+{
+ aCbProfile.InsertEntry( aCbProfile.GetText() );
+ ByteString aProfileKey( ByteString( ProfilePrefix ).Append( ByteString( aCbProfile.GetText(), RTL_TEXTENCODING_UTF8 ) ) );
+ rConf.SetGroup( "Misc" );
+ rConf.WriteKey( "CurrentProfile", aProfileKey );
+ // save last profile as new data for new profile
+ Save();
+ CheckButtons( aCbProfile, aPbNewProfile, aPbDelProfile );
+
+ return 0;
+}
+
+IMPL_LINK( ProfileOptions, CheckButtonsHdl, ComboBox*, pCB )
+{
+ (void) pCB; /* avoid warning about unused parameter */
+ CheckButtons( aCbProfile, aPbNewProfile, aPbDelProfile );
+ return 0;
+}
+
+void ProfileOptions::Save()
+{
+ Save(rConf);
+}
+
+void ProfileOptions::Save( Config &rConfig )
+{
+ // save data to current profile
+ aLog.Save( rConfig );
+ aBasis.Save( rConfig );
+ aHID.Save( rConfig );
+
+ rConfig.SetGroup( "Misc" );
+ ByteString aCurrentProfile = rConfig.ReadKey( "CurrentProfile", "Misc" );
+ rConfig.SetGroup( aCurrentProfile );
+ rConfig.WriteKey( "AutoReload", aAutoReload.IsChecked()?"1":"0" );
+ rConfig.WriteKey( "AutoSave", aAutoSave.IsChecked()?"1":"0" );
+ rConfig.WriteKey( "StopOnSyntaxError", aStopOnSyntaxError.IsChecked()?"1":"0" );
+}
+
+CrashreportOptions::CrashreportOptions( Window* pParent, Config &aConfig )
+: TabPage( pParent, SttResId( RID_TP_CRASH ) )
+, aFLCrashreport( this, SttResId( FL_CRASHREPORT ) )
+, aCBUseProxy( this, SttResId( CB_USEPROXY ) )
+, aFTCRHost( this, SttResId( FT_CRHOST ) )
+, aEDCRHost( this, SttResId( ED_CRHOST ) )
+, aFTCRPort( this, SttResId( FT_CRPORT ) )
+, aNFCRPort( this, SttResId( NF_CRPORT ) )
+, aCBAllowContact( this, SttResId( CB_ALLOWCONTACT ) )
+, aFTEMail( this, SttResId( FT_EMAIL ) )
+, aEDEMail( this, SttResId( ED_EMAIL ) )
+{
+ FreeResource();
+
+ aNFCRPort.SetUseThousandSep( FALSE );
+
+ ByteString aTemp;
+
+ aConfig.SetGroup("Crashreporter");
+
+ aTemp = aConfig.ReadKey( "UseProxy", "false" );
+ if ( aTemp.EqualsIgnoreCaseAscii( "true" ) || aTemp.Equals( "1" ) )
+ aCBUseProxy.Check();
+ else
+ aCBUseProxy.Check( FALSE );
+
+ aCBUseProxy.SetToggleHdl( LINK( this, CrashreportOptions, CheckProxy ) );
+ LINK( this, CrashreportOptions, CheckProxy ).Call( NULL ); // call once to initialize
+
+ aTemp = aConfig.ReadKey( "ProxyServer" );
+ aEDCRHost.SetText( String( aTemp, RTL_TEXTENCODING_UTF8 ) );
+ aTemp = aConfig.ReadKey( "ProxyPort", "8080" );
+ aNFCRPort.SetValue( aTemp.ToInt32() );
+
+
+ aTemp = aConfig.ReadKey( "AllowContact", "false" );
+ if ( aTemp.EqualsIgnoreCaseAscii( "true" ) || aTemp.Equals( "1" ) )
+ aCBAllowContact.Check();
+ else
+ aCBAllowContact.Check( FALSE );
+
+ aCBAllowContact.SetToggleHdl( LINK( this, CrashreportOptions, CheckResponse ) );
+ LINK( this, CrashreportOptions, CheckResponse ).Call( NULL ); // call once to initialize
+
+ aTemp = aConfig.ReadKey( "ReturnAddress" );
+ aEDEMail.SetText( String( aTemp, RTL_TEXTENCODING_UTF8 ) );
+}
+
+
+void CrashreportOptions::Save( Config &aConfig )
+{
+ aConfig.SetGroup("Crashreporter");
+
+ if ( aCBUseProxy.IsChecked() )
+ aConfig.WriteKey( "UseProxy", "true" );
+ else
+ aConfig.WriteKey( "UseProxy", "false" );
+
+ aConfig.WriteKey( "ProxyServer", ByteString( aEDCRHost.GetText(), RTL_TEXTENCODING_UTF8 ) );
+ aConfig.WriteKey( "ProxyPort", ByteString::CreateFromInt64( aNFCRPort.GetValue() ) );
+
+ if ( aCBAllowContact.IsChecked() )
+ aConfig.WriteKey( "AllowContact", "true" );
+ else
+ aConfig.WriteKey( "AllowContact", "false" );
+
+ aConfig.WriteKey( "ReturnAddress", ByteString( aEDEMail.GetText(), RTL_TEXTENCODING_UTF8 ) );
+}
+
+IMPL_LINK( CrashreportOptions, CheckProxy, void*, EMPTYARG )
+{
+ aFTCRHost.Enable( aCBUseProxy.IsChecked() );
+ aEDCRHost.Enable( aCBUseProxy.IsChecked() );
+ aFTCRPort.Enable( aCBUseProxy.IsChecked() );
+ aNFCRPort.Enable( aCBUseProxy.IsChecked() );
+
+ return 0;
+}
+IMPL_LINK( CrashreportOptions, CheckResponse, void*, EMPTYARG )
+{
+ aFTEMail.Enable( aCBAllowContact.IsChecked() );
+ aEDEMail.Enable( aCBAllowContact.IsChecked() );
+ return 0;
+}
+
+MiscOptions::MiscOptions( Window* pParent, Config &aConfig )
+: TabPage( pParent, SttResId( RID_TP_MISC ) )
+, aFLCommunication( this, SttResId(FL_COMMUNICATION) )
+, aFTHost( this, SttResId(FT_HOST) )
+, aEDHost( this, SttResId(ED_HOST) )
+, aFTTTPort( this, SttResId(FT_TTPORT) )
+, aNFTTPort( this, SttResId(NF_TTPORT) )
+, aFTUNOPort( this, SttResId(FT_UNOPORT) )
+, aNFUNOPort( this, SttResId(NF_UNOPORT) )
+, aOther( this, SttResId(FL_OTHER) )
+, aTimeoutText( this, SttResId(TIMEOUT_TEXT) )
+, aServerTimeout( this, SttResId(SERVER_TIMEOUT) )
+, aFTLRU( this, SttResId(FT_LRU) )
+, aTFMaxLRU( this, SttResId(TF_MAX_LRU) )
+, aFTProgDir( this, SttResId(FT_PROGDIR) )
+, aEDProgDir( this, SttResId(ED_PROGDIR) )
+, aPBProgDir( this, SttResId(PB_PROGDIR) )
+{
+ FreeResource();
+
+ aNFTTPort.SetUseThousandSep( FALSE );
+ aNFUNOPort.SetUseThousandSep( FALSE );
+ aTFMaxLRU.SetUseThousandSep( FALSE );
+
+ ByteString aTemp;
+
+ aConfig.SetGroup("Communication");
+ aTemp = aConfig.ReadKey( "Host", DEFAULT_HOST );
+ aEDHost.SetText( String( aTemp, RTL_TEXTENCODING_UTF8 ) );
+ aTemp = aConfig.ReadKey( "TTPort", ByteString::CreateFromInt32( TESTTOOL_DEFAULT_PORT ) );
+ aNFTTPort.SetValue( aTemp.ToInt32() );
+ aTemp = aConfig.ReadKey( "UnoPort", ByteString::CreateFromInt32( UNO_DEFAULT_PORT ) );
+ aNFUNOPort.SetValue( aTemp.ToInt32() );
+
+ aConfig.SetGroup("Misc");
+ aTemp = aConfig.ReadKey( "ServerTimeout", "10000" ); // Default 1 Minute
+ aServerTimeout.SetTime( Time(aTemp.ToInt32()) );
+
+ aConfig.SetGroup("LRU");
+ aTemp = aConfig.ReadKey( "MaxLRU", "4" );
+ aTFMaxLRU.SetValue( aTemp.ToInt32() );
+
+ aConfig.SetGroup("OOoProgramDir");
+ aTemp = aConfig.ReadKey( "Current" );
+ aEDProgDir.SetText( String( aTemp, RTL_TEXTENCODING_UTF8 ) );
+ aPBProgDir.SetClickHdl( LINK( this, MiscOptions, Click ) );
+}
+
+IMPL_LINK( MiscOptions, Click, void*, EMPTYARG )
+{
+ PathDialog aPD( this );
+ aPD.SetPath( aEDProgDir.GetText() );
+ if ( aPD.Execute() )
+ aEDProgDir.SetText( aPD.GetPath() );
+ return 0;
+}
+
+
+void MiscOptions::Save( Config &aConfig )
+{
+ aConfig.SetGroup("Communication");
+ aConfig.WriteKey( "Host", ByteString( aEDHost.GetText(), RTL_TEXTENCODING_UTF8 ) );
+ aConfig.WriteKey( "TTPort", ByteString::CreateFromInt64( aNFTTPort.GetValue() ) );
+ aConfig.WriteKey( "UnoPort", ByteString::CreateFromInt64( aNFUNOPort.GetValue() ) );
+
+ aConfig.SetGroup("Misc");
+ aConfig.WriteKey( "ServerTimeout", ByteString::CreateFromInt32( aServerTimeout.GetTime().GetTime() ) );
+
+ aConfig.SetGroup("LRU");
+ ByteString aTemp = aConfig.ReadKey( "MaxLRU", "4" );
+ USHORT nOldMaxLRU = (USHORT)aTemp.ToInt32();
+ USHORT n;
+ for ( n = nOldMaxLRU ; n > aTFMaxLRU.GetValue() ; n-- )
+ aConfig.DeleteKey( ByteString("LRU").Append( ByteString::CreateFromInt32( n ) ) );
+ aConfig.WriteKey( "MaxLRU", ByteString::CreateFromInt64( aTFMaxLRU.GetValue() ) );
+
+ aConfig.SetGroup("OOoProgramDir");
+ aConfig.WriteKey( C_KEY_AKTUELL, ByteString( aEDProgDir.GetText(), RTL_TEXTENCODING_UTF8 ) );
+ aConfig.WriteKey( C_KEY_TYPE, ByteString( "PATH" ) );
+}
+
+
+FontOptions::FontOptions( Window* pParent, Config &aConfig )
+: TabPage( pParent, SttResId( RID_TP_FONT ) )
+, aFTFontName( this, SttResId(FT_FONTNAME) )
+, aFontName( this, SttResId(CB_FONTNAME) )
+, aFTStyle( this, SttResId(FT_FONTSTYLE) )
+, aFontStyle( this, SttResId(CB_FONTSTYLE) )
+, aFTSize( this, SttResId(FT_FONTSIZE) )
+, aFontSize( this, SttResId(MB_FONTSIZE) )
+, aFTPreview( this, SttResId(FT_PREVIEW) )
+, aFontList( this )
+{
+ FreeResource();
+
+ aFontName.Fill( &aFontList );
+ aFontName.EnableWYSIWYG();
+ aFontName.EnableSymbols();
+
+// aFontSize.SetUnit( FUNIT_POINT );
+// MapMode aMode( MAP_POINT );
+// aFTPreview.SetMapMode( aMode );
+
+ aFontName.SetModifyHdl( LINK( this, FontOptions, FontNameChanged ) );
+ aFontStyle.SetModifyHdl( LINK( this, FontOptions, FontStyleChanged ) );
+ aFontSize.SetModifyHdl( LINK( this, FontOptions, FontSizeChanged ) );
+
+ ByteString aTemp;
+ aConfig.SetGroup("Misc");
+ aTemp = aConfig.ReadKey( "ScriptFontName", "Courier" );
+ aFontName.SetText( String( aTemp, RTL_TEXTENCODING_UTF8 ) );
+ aFontName.Modify();
+ aTemp = aConfig.ReadKey( "ScriptFontStyle", "normal" );
+ aFontStyle.SetText( String( aTemp, RTL_TEXTENCODING_UTF8 ) );
+ aFontStyle.Modify();
+ aTemp = aConfig.ReadKey( "ScriptFontSize", "12" );
+ aFontSize.SetText( String( aTemp, RTL_TEXTENCODING_UTF8 ) );
+ aFontSize.Modify();
+}
+
+IMPL_LINK( FontOptions, FontNameChanged, void*, EMPTYARG )
+{
+ aFontStyle.Fill( aFontName.GetText(), &aFontList );
+ FontStyleChanged( NULL );
+ return 0;
+}
+
+IMPL_LINK( FontOptions, FontStyleChanged, void*, EMPTYARG )
+{
+ FontInfo aFontInfo( aFontList.Get( aFontName.GetText(), aFontStyle.GetText() ) );
+ aFontSize.Fill( &aFontInfo, &aFontList );
+ FontSizeChanged( NULL );
+ return 0;
+}
+
+IMPL_LINK( FontOptions, FontSizeChanged, void*, EMPTYARG )
+{
+ UpdatePreview();
+ return 0;
+}
+
+void FontOptions::UpdatePreview()
+{
+ Font aFont = aFontList.Get( aFontName.GetText(), aFontStyle.GetText() );
+// ULONG nFontSize = aFontSize.GetValue( FUNIT_POINT );
+ ULONG nFontSize = static_cast<ULONG>((aFontSize.GetValue() + 5) / 10);
+ aFont.SetHeight( nFontSize );
+ aFTPreview.SetFont( aFont );
+ aFTPreview.SetText( aFontName.GetText() );
+ aFTPreview.Invalidate();
+}
+
+
+void FontOptions::Save( Config &aConfig )
+{
+ aConfig.SetGroup("Misc");
+ aConfig.WriteKey( "ScriptFontName", aFontName.GetText(), RTL_TEXTENCODING_UTF8 );
+ aConfig.WriteKey( "ScriptFontStyle", aFontStyle.GetText(), RTL_TEXTENCODING_UTF8 );
+ aConfig.WriteKey( "ScriptFontSize", aFontSize.GetText(), RTL_TEXTENCODING_UTF8 );
+}
+
+
+GenericOptions::GenericOptions( Window* pParent, Config &aConfig )
+: TabPage( pParent, SttResId( RID_TP_GENERIC ) )
+, aConf( aConfig )
+
+, aFlArea( this, SttResId( RID_FL_AREA ) )
+, aCbArea( this, SttResId( RID_CB_AREA ) )
+, aPbNewArea( this, SttResId( RID_PB_NEW_AREA ) )
+, aPbDelArea( this, SttResId( RID_PD_DEL_AREA ) )
+
+, aFlValue( this, SttResId( RID_FL_VALUE ) )
+, aCbValue( this, SttResId( RID_CB_VALUE ) )
+
+, aPbSelectPath( this, SttResId( RID_PB_SELECT_FILE ) )
+, aPbNewValue( this, SttResId( RID_PB_NEW_VALUE ) )
+, aPbDelValue( this, SttResId( RID_PB_DEL_VALUE ) )
+
+, nMoveButtons( 0 )
+, bShowSelectPath( FALSE )
+{
+ FreeResource();
+ LoadData();
+
+ aCbArea.EnableAutocomplete( TRUE );
+ aCbValue.EnableAutocomplete( TRUE );
+
+ aCbArea.SetSelectHdl( LINK( this, GenericOptions, LoadGroup ) );
+
+ aPbNewArea.SetClickHdl( LINK( this, GenericOptions, NewGroup ) );
+ aPbDelArea.SetClickHdl( LINK( this, GenericOptions, DelGroup ) );
+
+ aPbSelectPath.SetClickHdl( LINK( this, GenericOptions, SelectPath ) );
+ aPbNewValue.SetClickHdl( LINK( this, GenericOptions, NewValue ) );
+ aPbDelValue.SetClickHdl( LINK( this, GenericOptions, DelValue ) );
+
+ aCbArea.SetModifyHdl( LINK( this, GenericOptions, CheckButtonsHdl ) );
+ aCbValue.SetModifyHdl( LINK( this, GenericOptions, CheckButtonsHdl ) );
+ aCbValue.SetSelectHdl( LINK( this, GenericOptions, CheckButtonsHdl ) );
+
+ aMoveTimer.SetTimeout( 60 );
+ aMoveTimer.SetTimeoutHdl( LINK( this, GenericOptions, MoveButtons ) );
+}
+
+GenericOptions::~GenericOptions()
+{
+}
+
+StringList* GenericOptions::GetAllGroups()
+{
+ StringList* pGroups = new StringList();
+ for ( USHORT i = 0 ; i < aConf.GetGroupCount() ; i++ )
+ {
+ String *pGroup = new String( aConf.GetGroupName( i ), RTL_TEXTENCODING_UTF8 );
+ pGroups->Insert( pGroup );
+ }
+ return pGroups;
+}
+
+void GenericOptions::LoadData()
+{
+ StringList* pGroups = GetAllGroups();
+ String* pGroup;
+ while ( (pGroup = pGroups->First()) != NULL )
+ {
+ pGroups->Remove( pGroup );
+ aConf.SetGroup( ByteString( *pGroup, RTL_TEXTENCODING_UTF8 ) );
+ if ( aConf.ReadKey( C_KEY_AKTUELL ).Len() > 0 )
+ {
+ aCbArea.InsertEntry( *pGroup );
+ }
+ delete pGroup;
+ }
+ delete pGroups;
+ aCbArea.SetText( aCbArea.GetEntry( 0 ) );
+ CheckButtons( aCbArea, aPbNewArea, aPbDelArea );
+
+ // Add load the data
+ LINK( this, GenericOptions, LoadGroup ).Call( NULL );
+}
+
+void GenericOptions::ShowSelectPath( const String aType )
+{
+ Point aNPos = aPbNewValue.GetPosPixel();
+ Point aDPos = aPbDelValue.GetPosPixel();
+ long nDelta = aDPos.Y() - aNPos.Y();
+ if ( aType.EqualsIgnoreCaseAscii( "PATH" ) && !bShowSelectPath )
+ { // Show Path button
+ nMoveButtons += nDelta;
+ aMoveTimer.Start();
+ bShowSelectPath = TRUE;
+ aPbSelectPath.Show( TRUE );
+ aPbSelectPath.Enable( TRUE );
+ }
+ else if ( !aType.EqualsIgnoreCaseAscii( "PATH" ) && bShowSelectPath )
+ { // Hide Path button
+ nMoveButtons -= nDelta;
+ aMoveTimer.Start();
+ bShowSelectPath = FALSE;
+ aPbSelectPath.Enable( FALSE );
+ }
+}
+
+IMPL_LINK( GenericOptions, MoveButtons, AutoTimer*, aTimer )
+{
+ if ( nMoveButtons == 0 )
+ {
+ aTimer->Stop();
+ aPbSelectPath.Show( bShowSelectPath );
+ return 0;
+ }
+
+ int nStep = (nMoveButtons > 0) ? 2 : -2;
+ if ( nMoveButtons <= 1 && nMoveButtons >= -1 )
+ nStep = nMoveButtons;
+
+ nMoveButtons -= nStep ;
+
+ Point aPos;
+
+ aPos = aPbNewValue.GetPosPixel();
+ aPos.Y() += nStep;
+ aPbNewValue.SetPosPixel( aPos );
+
+ aPos = aPbDelValue.GetPosPixel();
+ aPos.Y() += nStep;
+ aPbDelValue.SetPosPixel( aPos );
+ return 0;
+}
+
+String GenericOptions::ReadKey( const ByteString &aGroup, const ByteString &aKey )
+{
+ aConf.SetGroup( aGroup );
+ return UniString( aConf.ReadKey( aKey ), RTL_TEXTENCODING_UTF8 );
+}
+
+IMPL_LINK( GenericOptions, LoadGroup, ComboBox*, EMPTYARG )
+{
+ String aCurrentValue;
+ String aAllValues;
+ String aType;
+
+ if ( aLastGroupName.Len() )
+ { // Cache values?
+ aCurrentValue = aCbValue.GetText();
+ if ( aCbValue.GetEntryPos( aCurrentValue ) == COMBOBOX_ENTRY_NOTFOUND )
+ { // Create a new value
+ LINK( this, GenericOptions, NewValue ).Call( NULL );
+ }
+
+ aConf.SetGroup( aLastGroupName );
+ aConf.WriteKey( C_KEY_AKTUELL, ByteString( aCurrentValue, RTL_TEXTENCODING_UTF8 ) );
+ USHORT i;
+ for ( i=0 ; i < aCbValue.GetEntryCount() ; i++ )
+ {
+ if ( i > 0 )
+ aAllValues += ';';
+ aAllValues += aCbValue.GetEntry( i );
+ }
+ aConf.WriteKey( C_KEY_ALLE, ByteString( aAllValues, RTL_TEXTENCODING_UTF8 ) );
+ }
+
+ aCbValue.Clear();
+
+ ByteString aGroupName = ByteString( aCbArea.GetText(), RTL_TEXTENCODING_UTF8 );
+ aCurrentValue = ReadKey( aGroupName, C_KEY_AKTUELL );
+ aAllValues = ReadKey( aGroupName, C_KEY_ALLE );
+ aType = ReadKey( aGroupName, C_KEY_TYPE );
+
+ xub_StrLen i;
+ for ( i=0 ; i < aAllValues.GetTokenCount() ; i++ )
+ {
+ aCbValue.InsertEntry( aAllValues.GetToken( i ) );
+ }
+ aCbValue.SetText( aCurrentValue );
+
+ aLastGroupName = aGroupName;
+ CheckButtons( aCbArea, aPbNewArea, aPbDelArea );
+ CheckButtons( aCbValue, aPbNewValue, aPbDelValue );
+ ShowSelectPath( aType );
+ return 0;
+}
+
+IMPL_LINK( GenericOptions, DelGroup, Button*, EMPTYARG )
+{
+ String aGroup = aCbArea.GetText();
+ if ( aCbArea.GetEntryPos( aGroup ) != COMBOBOX_ENTRY_NOTFOUND )
+ {
+ aCbArea.RemoveEntry( aGroup );
+ ByteString aByteGroup( aGroup, RTL_TEXTENCODING_UTF8 );
+ aConf.DeleteGroup( aByteGroup );
+ }
+
+ aCbArea.SetText( aCbArea.GetEntry( 0 ) );
+ LINK( this, GenericOptions, LoadGroup ).Call( NULL );
+
+ return 0;
+}
+
+IMPL_LINK( GenericOptions, NewGroup, Button*, EMPTYARG )
+{
+ aCbArea.InsertEntry( aCbArea.GetText() );
+
+ LINK( this, GenericOptions, LoadGroup ).Call( NULL );
+
+ return 0;
+}
+
+IMPL_LINK( GenericOptions, SelectPath, Button*, EMPTYARG )
+{
+ PathDialog aPD( this );
+ aPD.SetPath( aCbValue.GetText() );
+ if ( aPD.Execute() )
+ {
+ aCbValue.SetText( aPD.GetPath() );
+ CheckButtons( aCbValue, aPbNewValue, aPbDelValue );
+ if ( aPbNewValue.IsEnabled() )
+ {
+ LINK( this, GenericOptions, NewValue ).Call( NULL );
+ }
+ }
+ return 1;
+}
+
+IMPL_LINK( GenericOptions, DelValue, Button*, EMPTYARG )
+{
+ String aValue = aCbValue.GetText();
+ if ( aCbValue.GetEntryPos( aValue ) != COMBOBOX_ENTRY_NOTFOUND )
+ {
+ aCbValue.RemoveEntry( aValue );
+ }
+
+ aCbValue.SetText( aCbValue.GetEntry( 0 ) );
+ CheckButtons( aCbValue, aPbNewValue, aPbDelValue );
+ return 0;
+}
+
+IMPL_LINK( GenericOptions, NewValue, Button*, EMPTYARG )
+{
+ aCbValue.InsertEntry( aCbValue.GetText() );
+ CheckButtons( aCbValue, aPbNewValue, aPbDelValue );
+ return 0;
+}
+
+IMPL_LINK( GenericOptions, CheckButtonsHdl, ComboBox*, pCB )
+{
+ if ( pCB == &aCbArea )
+ CheckButtons( aCbArea, aPbNewArea, aPbDelArea );
+ if ( pCB == &aCbValue )
+ CheckButtons( aCbValue, aPbNewValue, aPbDelValue );
+ return 0;
+}
+
+void GenericOptions::Save( Config &aConfig )
+{
+ (void) aConfig; /* avoid warning about unused parameter */
+ DBG_ASSERT( &aConfig == &aConf, "Saving to different Configuration" );
+
+ // Save changes
+ LINK( this, GenericOptions, LoadGroup ).Call( NULL );
+}
+
+
+class TextAndWin : public DockingWindow
+{
+ FixedText *pFt;
+ Window *pWin;
+ Window* pFtOriginalParent;
+ Window* pWinOriginalParent;
+ long nSpace; // default space
+ BOOL bAlignTop;
+
+public:
+ TextAndWin( Window *pParent, FixedText *pFtP, Window *pWinP, long nSpaceP, BOOL bAlignTopP );
+ ~TextAndWin();
+
+ virtual void Resize();
+};
+
+TextAndWin::TextAndWin( Window *pParent, FixedText *pFtP, Window *pWinP, long nSpaceP, BOOL bAlignTopP )
+: DockingWindow( pParent )
+, pFt( pFtP )
+, pWin( pWinP )
+, nSpace( nSpaceP )
+, bAlignTop( bAlignTopP )
+{
+ pFtOriginalParent = pFt->GetParent();
+ pWinOriginalParent = pWin->GetParent();
+ pFt->SetParent( this );
+ pWin->SetParent( this );
+}
+
+TextAndWin::~TextAndWin()
+{
+ pFt->SetParent( pFtOriginalParent );
+ pWin->SetParent( pWinOriginalParent );
+}
+
+void TextAndWin::Resize()
+{
+ long nTopSpace = bAlignTop ? 0 : nSpace;
+ long nBottomSpace = bAlignTop ? nSpace : 0;
+
+ long nFixedTextOffset;
+ if ( GetOutputSizePixel().Height() < 3 * pFt->GetSizePixel().Height() )
+ {
+ pFt->Hide();
+ nFixedTextOffset = 0;
+ }
+ else
+ {
+ pFt->Show();
+ nFixedTextOffset = pFt->GetSizePixel().Height() + nSpace;
+
+ // FixedText positioning
+ pFt->SetPosPixel( Point( 0, nTopSpace ) );
+ }
+
+ // Window positioning
+ long nWinPosY = nFixedTextOffset;
+ nWinPosY += nTopSpace;
+ pWin->SetPosPixel( Point( 0, nWinPosY ) );
+
+ // Set size of window
+ long nWinHeight = GetOutputSizePixel().Height();
+ nWinHeight -= nWinPosY;
+ nWinHeight -= nBottomSpace;
+ pWin->SetSizePixel( Size( GetOutputSizePixel().Width(), nWinHeight ) );
+}
+
+DisplayHidDlg::DisplayHidDlg( Window * pParent )
+: FloatingWindow( pParent, SttResId( IDD_DISPLAY_HID ) )
+, aTbConf( this, SttResId( RID_TB_CONF ) )
+, aFtControls( this, SttResId( RID_FT_CONTROLS ) )
+, aMlbControls( this, SttResId( RID_MLB_CONTROLS ) )
+, aFtSlots( this, SttResId( RID_FT_SLOTS ) )
+, aMlbSlots( this, SttResId( RID_MLB_SLOTS ) )
+, aPbKopieren( this, SttResId( RID_PB_KOPIEREN ) )
+, aPbBenennen( this, SttResId( RID_PB_BENENNEN ) )
+, aPbSelectAll( this, SttResId( RID_PB_SELECTALL ) )
+, aOKClose( this, SttResId( RID_OK_CLOSE ) )
+, nDisplayMode( DH_MODE_KURZNAME | DH_MODE_LANGNAME ) // If we have an old office use this default
+{
+ FreeResource();
+
+/* ResMgr* pRM = CREATERESMGR( svt );
+ ToolBox aOrig( this, ResId( 12345, pRM ) );
+ delete pRM;
+
+ aTbConf.CopyItem( aOrig, 4 );
+ aTbConf.InsertSeparator();
+ aTbConf.CopyItem( aOrig, 5 );
+ aTbConf.CopyItem( aOrig, 6 );
+ aTbConf.CopyItem( aOrig, 7 ); */
+ aTbConf.SetOutStyle( TOOLBOX_STYLE_FLAT );
+
+#if OSL_DEBUG_LEVEL < 2
+ aTbConf.Hide();
+#endif
+
+ pSplit = new SplitWindow( this );
+ pControls = new TextAndWin( pSplit, &aFtControls, &aMlbControls, aMlbControls.GetPosPixel().X(), TRUE );
+ pSlots = new TextAndWin( pSplit, &aFtSlots, &aMlbSlots, aMlbControls.GetPosPixel().X(), FALSE );
+
+ pSplit->SetPosPixel( aFtControls.GetPosPixel() );
+ pSplit->InsertItem( 1, pControls, 70, SPLITWINDOW_APPEND, 0, SWIB_PERCENTSIZE );
+ pSplit->InsertItem( 2, pSlots, 30, SPLITWINDOW_APPEND, 0, SWIB_PERCENTSIZE );
+ pSplit->Show();
+
+ aTbConf.SetBorderStyle( WINDOW_BORDER_NORMAL );
+ aPbKopieren.SetClickHdl( LINK( this, DisplayHidDlg, CopyToClipboard ) );
+ aPbSelectAll.SetClickHdl( LINK( this, DisplayHidDlg, SelectAll ) );
+
+ aMlbControls.SetSelectHdl( LINK( this, DisplayHidDlg, Select ) );
+ aMlbSlots.SetSelectHdl( LINK( this, DisplayHidDlg, Select ) );
+ Select( NULL );
+}
+
+DisplayHidDlg::~DisplayHidDlg()
+{
+ delete pControls;
+ delete pSlots;
+ delete pSplit;
+}
+
+IMPL_LINK( DisplayHidDlg, CopyToClipboard, void*, EMPTYARG )
+{
+ String aSammel;
+ USHORT i;
+
+ for ( i=0 ; i < aMlbControls.GetSelectEntryCount() ; i++ )
+ {
+ if ( aSammel.Len() )
+ aSammel += '\n';
+ aSammel += aMlbControls.GetSelectEntry( i );
+ }
+ for ( i=0 ; i < aMlbSlots.GetSelectEntryCount() ; i++ )
+ {
+ if ( aSammel.Len() )
+ aSammel += '\n';
+ aSammel += aMlbSlots.GetSelectEntry( i );
+ }
+ ::svt::OStringTransfer::CopyString( aSammel, this );
+ return 0;
+}
+
+IMPL_LINK( DisplayHidDlg, SelectAll, PushButton*, pButton )
+{
+ if ( pButton->GetState() != STATE_CHECK )
+ {
+ USHORT i;
+ for ( i=0 ; i < aMlbControls.GetEntryCount() ; i++ )
+ aMlbControls.SelectEntryPos( i );
+ for ( i=0 ; i < aMlbSlots.GetEntryCount() ; i++ )
+ aMlbSlots.SelectEntryPos( i );
+ }
+ else
+ {
+ aMlbControls.SetNoSelection();
+ aMlbControls.Invalidate();
+ aMlbSlots.SetNoSelection();
+ aMlbSlots.Invalidate();
+ }
+ Select( NULL );
+ return 0;
+}
+
+IMPL_LINK( DisplayHidDlg, Select, void*, EMPTYARG )
+{
+ if ( !aMlbControls.GetSelectEntryCount() && !aMlbSlots.GetSelectEntryCount() )
+ aPbSelectAll.SetState( STATE_NOCHECK );
+ else if ( aMlbControls.GetSelectEntryCount() == aMlbControls.GetEntryCount()
+ && aMlbSlots.GetSelectEntryCount() == aMlbSlots.GetEntryCount() )
+ aPbSelectAll.SetState( STATE_CHECK );
+ else
+ aPbSelectAll.SetState( STATE_DONTKNOW );
+ return 0;
+}
+
+void DisplayHidDlg::AddData( WinInfoRec* pWinInfo )
+{
+ if ( pWinInfo->bIsReset )
+ {
+ aMlbControls.Clear();
+ aMlbSlots.Clear();
+
+ if ( pWinInfo->nRType & DH_MODE_DATA_VALID ) // no old office
+ nDisplayMode = pWinInfo->nRType; // Is used for mode transmission while reset
+// if ( pWinInfo->aUId.GetULONG() & DH_MODE_DATA_VALID ) // kein altes Office
+// nDisplayMode = pWinInfo->aUId.GetULONG(); // Wird im Reset zur �bermittlung des Modus verwendet
+
+ return;
+ }
+
+ String aMsg;
+ if ( ( nDisplayMode & DH_MODE_KURZNAME ) )
+ {
+ if ( pWinInfo->aKurzname.Len() > 0 )
+ aMsg += pWinInfo->aKurzname;
+ else
+ {
+ aMsg.AppendAscii( "--" );
+ aMsg += pWinInfo->aUId;
+ aMsg.AppendAscii( ": " );
+ aMsg += pWinInfo->aRName;
+ }
+ aMsg.Expand(20);
+ }
+ else
+ {
+ aMsg += pWinInfo->aUId;
+ aMsg.Expand(13);
+ }
+ aMsg.AppendAscii( " " ); // At least three blanks
+
+ if ( nDisplayMode & DH_MODE_LANGNAME )
+ {
+ if ( pWinInfo->aLangname.Len() > 0 )
+ aMsg += pWinInfo->aLangname;
+ else
+ aMsg += String( SttResId( IDS_NO_LONGNAME ) );
+ }
+
+ aMlbControls.InsertEntry( aMsg );
+
+
+ // Do we have a Slotname?
+ if ( ( nDisplayMode & DH_MODE_KURZNAME ) && pWinInfo->aSlotname.Len() > 0 )
+ {
+ aMsg = pWinInfo->aSlotname;
+ aMsg.Expand(20);
+ aMsg.AppendAscii( " " );
+
+ if ( nDisplayMode & DH_MODE_LANGNAME )
+ {
+ if ( pWinInfo->aLangname.Len() > 0 )
+ aMsg += pWinInfo->aLangname;
+ else
+ aMsg += String( SttResId( IDS_NO_LONGNAME ) );
+ }
+
+ aMlbSlots.InsertEntry( aMsg );
+ }
+}
+
+void DisplayHidDlg::Resize()
+{
+
+ if ( IsRollUp() )
+ {
+ // We want only the toolbox to be seend
+ SetOutputSizePixel( aTbConf.GetSizePixel() );
+ }
+ else
+ {
+// SetUpdateMode( FALSE );
+
+ // Minimum size
+ Size aSize( GetOutputSizePixel() );
+ aSize.Width() = std::max( aSize.Width(), (long)(aOKClose.GetSizePixel().Width() * 3 ));
+ aSize.Height() = std::max( aSize.Height(), (long)(aOKClose.GetSizePixel().Height() * 8 ));
+ SetOutputSizePixel( aSize );
+
+ // Default space
+ long nSpace = pSplit->GetPosPixel().X();
+
+ // Adapt ToolBox width
+ aTbConf.SetSizePixel( Size ( GetSizePixel().Width(), aTbConf.CalcWindowSizePixel().Height() ) );
+ aTbConf.SetSizePixel( Size() ); // Hide at first
+
+ // SplitWindow positioning
+ pSplit->SetPosPixel( Point( nSpace, nSpace + aTbConf.GetPosPixel().Y() + aTbConf.GetSizePixel().Height() ) );
+
+ // Calculate width of SplitWindows
+ long nSplitWidth = GetSizePixel().Width();
+ nSplitWidth -= aPbBenennen.GetSizePixel().Width();
+ nSplitWidth -= 3 * nSpace; // Spaces
+ nSplitWidth -= nSpace / 2; // Little more space at right margin
+
+ // Calculate hight of SplitWindows
+ long nSplitHeight = GetOutputSizePixel().Height();
+ nSplitHeight -= pSplit->GetPosPixel().Y();
+ nSplitHeight -= nSpace; // bottom margin
+
+ // Set size of SplitWindows
+ pSplit->SetSizePixel( Size( nSplitWidth, nSplitHeight ) );
+
+ Point aPos;
+
+ // Button "Copy" positioning
+ aPos = pSplit->GetPosPixel();
+ aPos.Move( nSplitWidth, 0 );
+ aPos.Move( nSpace, 0 );
+ aPbKopieren.SetPosPixel( aPos );
+
+ // Button "Get all"
+ aPos.Move( 0, aPbKopieren.GetSizePixel().Height() );
+ aPos.Move( 0, nSpace );
+ aPbSelectAll.SetPosPixel( aPos );
+
+ // Button "Name"
+ aPos.Move( 0, aPbSelectAll.GetSizePixel().Height() );
+ aPos.Move( 0, nSpace );
+ aPbBenennen.SetPosPixel( aPos );
+
+ // "Close" Button
+ aPos = pSplit->GetPosPixel();
+ aPos.Move( nSpace, -aOKClose.GetSizePixel().Height() );
+ aPos.Move( pSplit->GetSizePixel().Width(), pSplit->GetSizePixel().Height() );
+ aOKClose.SetPosPixel( aPos );
+
+// SetUpdateMode( TRUE );
+// Invalidate();
+ }
+ FloatingWindow::Resize();
+}
+
+
+VarEditDialog::VarEditDialog( Window * pParent, SbxVariable *pPVar )
+: ModelessDialog( pParent, SttResId( IDD_EDIT_VAR ) )
+, aFixedTextRID_FT_NAME( this, SttResId( RID_FT_NAME ) )
+, aFixedTextRID_FT_CONTENT( this, SttResId( RID_FT_CONTENT ) )
+, aFixedTextRID_FT_NEW_CONTENT( this, SttResId( RID_FT_NEW_CONTENT ) )
+, aFixedTextRID_FT_NAME_VALUE( this, SttResId( RID_FT_NAME_VALUE ) )
+, aFixedTextRID_FT_CONTENT_VALUE( this, SttResId( RID_FT_CONTENT_VALUE ) )
+
+, aRadioButtonRID_RB_NEW_BOOL_T( this, SttResId( RID_RB_NEW_BOOL_T ) )
+, aRadioButtonRID_RB_NEW_BOOL_F( this, SttResId( RID_RB_NEW_BOOL_F ) )
+, aNumericFieldRID_NF_NEW_INTEGER( this, SttResId( RID_NF_NEW_INTEGER ) )
+, aNumericFieldRID_NF_NEW_LONG( this, SttResId( RID_NF_NEW_LONG ) )
+, aEditRID_ED_NEW_STRING( this, SttResId( RID_ED_NEW_STRING ) )
+
+, aOKButtonRID_OK( this, SttResId( RID_OK ) )
+, aCancelButtonRID_CANCEL( this, SttResId( RID_CANCEL ) )
+, pVar( pPVar )
+{
+ aFixedTextRID_FT_NAME_VALUE.SetText( pVar->GetName() );
+ aFixedTextRID_FT_CONTENT_VALUE.SetText( pVar->GetString() );
+
+ SbxDataType eType = pVar->GetType();
+ if ( ( eType & ( SbxVECTOR | SbxARRAY | SbxBYREF )) == 0 )
+ {
+ switch ( eType )
+ {
+ case SbxBOOL:
+ aRadioButtonRID_RB_NEW_BOOL_T.Show();
+ aRadioButtonRID_RB_NEW_BOOL_F.Show();
+ if ( pVar->GetBool() )
+ aRadioButtonRID_RB_NEW_BOOL_T.Check();
+ else
+ aRadioButtonRID_RB_NEW_BOOL_F.Check();
+ break;
+// case SbxCURRENCY:
+// case SbxDATE:
+// break;
+ case SbxINTEGER:
+ aNumericFieldRID_NF_NEW_INTEGER.Show();
+ aNumericFieldRID_NF_NEW_INTEGER.SetText( pVar->GetString() );
+ aNumericFieldRID_NF_NEW_INTEGER.Reformat();
+ break;
+ case SbxLONG:
+ aNumericFieldRID_NF_NEW_LONG.Show();
+ aNumericFieldRID_NF_NEW_LONG.SetText( pVar->GetString() );
+ aNumericFieldRID_NF_NEW_LONG.Reformat();
+ // Must be hardcoded otherwise the Rsc Compiler will fail
+ aNumericFieldRID_NF_NEW_LONG.SetMin( -aNumericFieldRID_NF_NEW_LONG.GetMax()-1 );
+ aNumericFieldRID_NF_NEW_LONG.SetFirst( -aNumericFieldRID_NF_NEW_LONG.GetLast()-1 );
+ break;
+// case SbxOBJECT: // cannot be edited
+// break;
+ case SbxSINGLE:
+ case SbxDOUBLE:
+ case SbxSTRING:
+ case SbxVARIANT:
+ case SbxEMPTY:
+ aEditRID_ED_NEW_STRING.Show();
+ aEditRID_ED_NEW_STRING.SetText( pVar->GetString() );
+ break;
+ default: // don't know how to edit
+ ;
+ }
+ }
+
+
+ aOKButtonRID_OK.SetClickHdl( LINK( this, VarEditDialog, OKClick ) );
+}
+
+
+IMPL_LINK( VarEditDialog, OKClick, Button *, pButton )
+{
+ (void) pButton; /* avoid warning about unused parameter */
+ BOOL bWasError = SbxBase::IsError(); // Probably an error is thrown
+
+
+ SbxDataType eType = pVar->GetType();
+/*
+Boolean
+Currency
+Date
+Double
+Integer
+Long
+Object
+Single
+String
+Variant
+
+
+atof
+
+ ecvt
+ f
+ gcvt
+
+SvNumberformat::
+ static double StringToDouble( const xub_Unicode* pStr,
+ const International& rIntl,
+ int& nErrno,
+ const xub_Unicode** ppEnd = NULL );
+ // Converts just as strtod a decimal string to a double.
+ // Decimal and thousand separators come from International,
+ // leading spaces are omitted.
+ // If ppEnd!=NULL then *ppEnd is set after the parsed data.
+ // If pStr contains only the String to be parsed, then if success:
+ // **ppEnd=='\0' and *ppEnd-pStr==strlen(pStr).
+ // If overflow fVal=+/-HUGE_VAL, if underflow 0,
+ // nErrno is in this cases set to ERANGE otherwise 0.
+ // "+/-1.#INF" are recognized as +/-HUGE_VAL.
+
+ */
+
+
+
+ String aContent( aEditRID_ED_NEW_STRING.GetText() );
+ BOOL bError = FALSE;
+ switch ( eType )
+ {
+ case SbxBOOL:
+ pVar->PutBool( aRadioButtonRID_RB_NEW_BOOL_T.IsChecked() );
+ break;
+// case SbxCURRENCY:
+// pVar->PutCurrency( aContent );
+// break;
+// case SbxDATE:
+// pVar->PutDate( aContent );
+// break;
+ case SbxINTEGER:
+ pVar->PutInteger( (INT16)aNumericFieldRID_NF_NEW_INTEGER.GetValue() );
+ break;
+ case SbxLONG:
+ pVar->PutLong( static_cast<INT32>(aNumericFieldRID_NF_NEW_LONG.GetValue()) );
+ break;
+ case SbxDOUBLE:
+ case SbxSINGLE:
+ bError = !pVar->PutStringExt( aContent );
+ break;
+ case SbxSTRING:
+ pVar->PutString( aContent );
+ break;
+ case SbxVARIANT:
+ case SbxEMPTY:
+ bError = !pVar->PutStringExt( aContent );
+ break;
+ default: // don't know how to edit
+ ;
+ }
+
+
+// pVar->PutStringExt( aEditRID_ED_NEW_STRING.GetText() );
+ if ( !bWasError && SbxBase::IsError() )
+ {
+ bError = TRUE;
+ SbxBase::ResetError();
+ }
+
+ if ( bError )
+ {
+ ErrorBox( this, SttResId( IDS_INVALID_VALUE ) ).Execute();
+ return 1;
+ }
+
+// if ( aEditRID_ED_NEW_STRING.GetText().Compare( pVar->GetString() ) != COMPARE_EQUAL )
+// {
+// aFixedTextRID_FT_CONTENT_VALUE.SetText( pVar->GetString() );
+// aEditRID_ED_NEW_STRING.SetText( pVar->GetString() );
+// return 1;
+// }
+
+ Close();
+ return 0;
+}
+
+
+
diff --git a/basic/source/app/dialogs.hxx b/basic/source/app/dialogs.hxx
new file mode 100644
index 000000000000..fbd67aa85f1b
--- /dev/null
+++ b/basic/source/app/dialogs.hxx
@@ -0,0 +1,371 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _DIALOGS_HXX
+#define _DIALOGS_HXX
+
+#ifndef _DIALOG_HXX //autogen
+#include <vcl/dialog.hxx>
+#endif
+#ifndef _BUTTON_HXX //autogen
+#include <vcl/button.hxx>
+#endif
+#ifndef _EDIT_HXX //autogen
+#include <vcl/edit.hxx>
+#endif
+#ifndef _FIELD_HXX //autogen
+#include <vcl/field.hxx>
+#endif
+#include <vcl/fixed.hxx>
+#include <vcl/tabdlg.hxx>
+#include <vcl/tabctrl.hxx>
+#include <vcl/tabpage.hxx>
+#include <tools/config.hxx>
+#ifndef _TOOLS_LIST_HXX
+#include <tools/list.hxx>
+#endif
+#include <vcl/lstbox.hxx>
+#include <vcl/floatwin.hxx>
+#include <vcl/toolbox.hxx>
+#include <svtools/ctrltool.hxx>
+#include <svtools/ctrlbox.hxx>
+
+class SbxVariable;
+
+#ifndef _BASIC_TTRESHLP_HXX
+#include <basic/ttstrhlp.hxx>
+#endif
+
+class AboutDialog : public ModalDialog {
+ FixedText a1,a4,aVersionString;
+ OKButton aOk;
+public:
+ AboutDialog (Window*, const ResId&);
+};
+
+class FindDialog : public ModalDialog {
+ FixedText aFT1;
+ Edit aFind;
+ OKButton aOk;
+ CancelButton aCancel;
+ String* pFind;
+ DECL_LINK( ButtonClick, Button * );
+public:
+ FindDialog (Window*, const ResId&, String&);
+};
+
+class ReplaceDialog : public ModalDialog {
+ FixedText aFT1;
+ FixedText aFT2;
+ Edit aFind;
+ Edit aReplace;
+ OKButton aOk;
+ CancelButton aCancel;
+ String* pFind;
+ String* pReplace;
+ DECL_LINK( ButtonClick, Button * );
+public:
+ ReplaceDialog (Window*, const ResId&, String&, String&);
+};
+
+////////////////////////////////////////////////////////////////////
+
+class ConfEdit : public PushButton
+{
+protected:
+ FixedText aText;
+ Edit aEdit;
+ ByteString aKeyName;
+
+ void Init( Config &aConf );
+
+public:
+ ConfEdit( Window* pParent, USHORT nResText, USHORT nResEdit, USHORT nResButton, const ByteString& aKN, Config &aConf );
+ ConfEdit( Window* pParent, USHORT nResEdit, USHORT nResButton, const ByteString& aKN, Config &aConf );
+ void Save( Config &aConf );
+ void Reload( Config &aConf );
+ void Click();
+ String GetValue() { return aEdit.GetText(); };
+ void SetModifyHdl( Link aLink ) { aEdit.SetModifyHdl( aLink ); };
+};
+
+
+class OptConfEdit : public ConfEdit
+{
+protected:
+ CheckBox aCheck;
+ ConfEdit& rBase;
+ DECL_LINK( ToggleHdl, CheckBox* );
+public:
+ OptConfEdit( Window* pParent, USHORT nResCheck, USHORT nResEdit, USHORT nResButton, const ByteString& aKN, ConfEdit& rBaseEdit, Config& aConf );
+ void Reload( Config &aConf );
+ DECL_LINK( BaseModifyHdl, Edit* );
+};
+
+
+class OptionsDialog : public TabDialog
+{
+private:
+ TabControl aTabCtrl;
+
+ OKButton aOK;
+ CancelButton aCancel;
+ DECL_LINK( OKClick, Button * );
+
+ Config aConfig;
+
+public:
+ OptionsDialog( Window* pParent, const ResId& );
+ ~OptionsDialog();
+ virtual BOOL Close();
+
+
+ DECL_LINK( ActivatePageHdl, TabControl * );
+};
+
+class ProfileOptions : public TabPage
+{
+ Config &rConf;
+
+ FixedLine aFlProfile;
+ ComboBox aCbProfile;
+ PushButton aPbNewProfile;
+ PushButton aPbDelProfile;
+
+ FixedLine aDirs;
+ ConfEdit aLog;
+ ConfEdit aBasis;
+ OptConfEdit aHID;
+
+ CheckBox aAutoReload;
+ CheckBox aAutoSave;
+ CheckBox aStopOnSyntaxError;
+
+ void LoadData();
+
+ DECL_LINK( Select, ComboBox* );
+ DECL_LINK( DelProfile, Button* );
+ DECL_LINK( NewProfile, Button* );
+ DECL_LINK( CheckButtonsHdl, ComboBox* );
+
+ void ReloadProfile();
+ void Save();
+
+public:
+ ProfileOptions( Window*, Config &rConfig );
+ void Save( Config &rConfig );
+};
+
+
+class CrashreportOptions : public TabPage
+{
+ FixedLine aFLCrashreport;
+ CheckBox aCBUseProxy;
+ FixedText aFTCRHost;
+ Edit aEDCRHost;
+ FixedText aFTCRPort;
+ NumericField aNFCRPort;
+
+ CheckBox aCBAllowContact;
+ FixedText aFTEMail;
+ Edit aEDEMail;
+
+ DECL_LINK( CheckProxy, void*);
+ DECL_LINK( CheckResponse, void*);
+
+public:
+ CrashreportOptions( Window*, Config &aConfig );
+ void Save( Config &aConfig );
+};
+
+class MiscOptions : public TabPage
+{
+ FixedLine aFLCommunication;
+ FixedText aFTHost;
+ Edit aEDHost;
+ FixedText aFTTTPort;
+ NumericField aNFTTPort;
+ FixedText aFTUNOPort;
+ NumericField aNFUNOPort;
+ FixedLine aOther;
+ FixedText aTimeoutText;
+ TimeField aServerTimeout;
+ FixedText aFTLRU;
+ NumericField aTFMaxLRU;
+ FixedText aFTProgDir;
+ Edit aEDProgDir;
+ PushButton aPBProgDir;
+
+ DECL_LINK( Click, void*);
+
+public:
+ MiscOptions( Window*, Config &aConfig );
+ void Save( Config &aConfig );
+};
+
+class FontOptions : public TabPage
+{
+ FixedText aFTFontName;
+ FontNameBox aFontName;
+ FixedText aFTStyle;
+ FontStyleBox aFontStyle;
+ FixedText aFTSize;
+ FontSizeBox aFontSize;
+ FixedText aFTPreview;
+
+ FontList aFontList;
+
+ DECL_LINK( FontNameChanged, void* );
+ DECL_LINK( FontStyleChanged, void* );
+ DECL_LINK( FontSizeChanged, void* );
+
+ void UpdatePreview();
+
+public:
+ FontOptions( Window*, Config &aConfig );
+ void Save( Config &aConfig );
+};
+
+
+DECLARE_LIST( StringList, String * )
+#define C_KEY_ALLE CByteString("All")
+#define C_KEY_AKTUELL CByteString("Current")
+#define C_KEY_TYPE CByteString("Type")
+#define C_KEY_DELETE CByteString("Deleted Groups")
+
+class GenericOptions : public TabPage
+{
+ Config &aConf;
+
+ FixedLine aFlArea;
+ ComboBox aCbArea;
+ PushButton aPbNewArea;
+ PushButton aPbDelArea;
+
+ FixedLine aFlValue;
+ ComboBox aCbValue;
+ PushButton aPbSelectPath;
+ PushButton aPbNewValue;
+ PushButton aPbDelValue;
+
+ int nMoveButtons;
+ BOOL bShowSelectPath;
+ AutoTimer aMoveTimer;
+ DECL_LINK( MoveButtons, AutoTimer* );
+
+ ByteString aLastGroupName;
+
+ String ReadKey( const ByteString &aGroup, const ByteString &aKey );
+
+ StringList* GetAllGroups();
+ void LoadData();
+
+ void ShowSelectPath( const String aType );
+
+ DECL_LINK( LoadGroup, ComboBox* );
+ DECL_LINK( DelGroup, Button* );
+ DECL_LINK( NewGroup, Button* );
+ DECL_LINK( SelectPath, Button* );
+ DECL_LINK( DelValue, Button* );
+ DECL_LINK( NewValue, Button* );
+ DECL_LINK( CheckButtonsHdl, ComboBox* );
+
+public:
+ GenericOptions( Window*, Config &aConfig );
+ ~GenericOptions();
+ void Save( Config &aConfig );
+};
+
+
+struct WinInfoRec;
+class SplitWindow;
+
+class DisplayHidDlg : public FloatingWindow
+{
+protected:
+ ToolBox aTbConf;
+ FixedText aFtControls;
+ MultiListBox aMlbControls;
+ FixedText aFtSlots;
+ MultiListBox aMlbSlots;
+ PushButton aPbKopieren;
+ PushButton aPbBenennen;
+ PushButton aPbSelectAll;
+ OKButton aOKClose;
+
+ DockingWindow* pControls;
+ DockingWindow* pSlots;
+ SplitWindow *pSplit;
+
+ ULONG nDisplayMode;
+
+ DECL_LINK( Select, void* );
+ DECL_LINK( SelectAll, PushButton* );
+ DECL_LINK( CopyToClipboard, void* );
+
+public:
+ DisplayHidDlg( Window * pParent );
+ virtual ~DisplayHidDlg();
+
+ virtual void Resize();
+
+ void AddData( WinInfoRec* pWinInfo );
+
+};
+
+
+class VarEditDialog : public ModelessDialog
+{
+protected:
+ FixedText aFixedTextRID_FT_NAME;
+ FixedText aFixedTextRID_FT_CONTENT;
+ FixedText aFixedTextRID_FT_NEW_CONTENT;
+ FixedText aFixedTextRID_FT_NAME_VALUE;
+ FixedText aFixedTextRID_FT_CONTENT_VALUE;
+
+ RadioButton aRadioButtonRID_RB_NEW_BOOL_T;
+ RadioButton aRadioButtonRID_RB_NEW_BOOL_F;
+ NumericField aNumericFieldRID_NF_NEW_INTEGER;
+ NumericField aNumericFieldRID_NF_NEW_LONG;
+ Edit aEditRID_ED_NEW_STRING;
+
+ OKButton aOKButtonRID_OK;
+ CancelButton aCancelButtonRID_CANCEL;
+
+ SbxVariable *pVar;
+
+ DECL_LINK( OKClick, Button * );
+
+// BOOL bCompare = FALSE;
+// String aCompareString;
+
+public:
+ VarEditDialog( Window * pParent, SbxVariable *pPVar );
+};
+
+
+#endif
diff --git a/basic/source/app/makefile.mk b/basic/source/app/makefile.mk
new file mode 100644
index 000000000000..07ceed6e5116
--- /dev/null
+++ b/basic/source/app/makefile.mk
@@ -0,0 +1,101 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..$/..
+
+PRJNAME=basic
+TARGET=app
+
+LIBTARGET = NO
+
+# --- Settings ------------------------------------------------------------
+
+.INCLUDE : settings.mk
+
+# --- Common ------------------------------------------------------------
+
+OBJFILES = \
+ $(OBJ)$/ttbasic.obj \
+ $(OBJ)$/basicrt.obj \
+ $(OBJ)$/processw.obj \
+ $(OBJ)$/process.obj \
+ $(OBJ)$/brkpnts.obj \
+ $(OBJ)$/mybasic.obj \
+ $(OBJ)$/status.obj \
+ $(OBJ)$/printer.obj \
+ $(OBJ)$/appwin.obj \
+ $(OBJ)$/appedit.obj \
+ $(OBJ)$/appbased.obj \
+ $(OBJ)$/apperror.obj \
+ $(OBJ)$/textedit.obj \
+ $(OBJ)$/msgedit.obj \
+ $(OBJ)$/dialogs.obj \
+
+EXCEPTIONSFILES = \
+ $(OBJ)$/app.obj \
+ $(OBJ)$/printer.obj \
+ $(OBJ)$/process.obj
+
+.IF "$(GUI)" == "WNT"
+EXCEPTIONSFILES += \
+ $(OBJ)$/process.obj
+.ENDIF
+
+SRS1NAME=$(TARGET)
+SRC1FILES = \
+ basic.src \
+ ttmsg.src \
+ basmsg.src \
+ svtmsg.src \
+ testtool.src
+
+LIB1TARGET=$(LB)$/app.lib
+LIB1ARCHIV=$(LB)$/libapp.a
+LIB1OBJFILES = \
+ $(OBJ)$/basicrt.obj \
+ $(OBJ)$/processw.obj \
+ $(OBJ)$/process.obj \
+ $(OBJ)$/brkpnts.obj \
+ $(OBJ)$/app.obj \
+ $(OBJ)$/mybasic.obj \
+ $(OBJ)$/status.obj \
+ $(OBJ)$/printer.obj \
+ $(OBJ)$/appwin.obj \
+ $(OBJ)$/appedit.obj \
+ $(OBJ)$/appbased.obj \
+ $(OBJ)$/apperror.obj \
+ $(OBJ)$/textedit.obj \
+ $(OBJ)$/msgedit.obj \
+ $(OBJ)$/dialogs.obj \
+ $(OBJ)$/sbintern.obj
+
+# --- Targets ------------------------------------------------------------
+
+.INCLUDE : target.mk
+
+$(OBJ)$/dialogs.obj : $(INCCOM)$/_version.h
+
diff --git a/basic/source/app/msgedit.cxx b/basic/source/app/msgedit.cxx
new file mode 100644
index 000000000000..51864a397435
--- /dev/null
+++ b/basic/source/app/msgedit.cxx
@@ -0,0 +1,999 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+/*************************************************************************
+File Versions so far:
+No Version Initial Implementation without Version Information
+Version 2 changed order of entries(New Entries at the end)
+Version 3 Changed Charset from CHARSET_IBMPC to RTL_TEXTENCODING_UTF8
+
+*************************************************************************/
+#include <cstdio>
+#include <tools/time.hxx>
+#include <tools/stream.hxx>
+#ifndef _MSGBOX_HXX //autogen
+#include <vcl/msgbox.hxx>
+#endif
+#ifndef _SOUND_HXX //autogen
+#include <vcl/sound.hxx>
+#endif
+#include <tools/fsys.hxx>
+#include <svtools/stringtransfer.hxx>
+#include <unotools/syslocale.hxx>
+#ifndef _BASIC_TTRESHLP_HXX
+#include <basic/ttstrhlp.hxx>
+#endif
+#include "basic.hrc"
+#include "msgedit.hxx"
+#include "app.hxx"
+#include "apperror.hxx"
+#include "appbased.hxx"
+#include "basmsg.hrc"
+#include "basrid.hxx"
+
+USHORT MsgEdit::nMaxLogLen = 0;
+BOOL MsgEdit::bLimitLogLen = FALSE;
+BOOL MsgEdit::bPrintLogToStdout = FALSE;
+BOOL MsgEdit::bPrintLogToStdoutSet = FALSE;
+
+#define WARNING_PREFIX String( SttResId( S_WARNING_PREFIX ) )
+#define VERSION_STRING CUniString("File Format Version: ")
+#define THIS_VERSION 2
+
+#define LOGTYPE( pEntry ) ((pEntry && pEntry->GetUserData())?((TTDebugData*)pEntry->GetUserData())->aLogType:LOG_ERROR)
+
+MsgEdit::MsgEdit( AppError* pParent, BasicFrame *pBF, const WinBits& aBits )
+: pBasicFrame(pBF)
+, pCurrentRun(NULL)
+, pCurrentTestCase(NULL)
+, pCurrentAssertion( NULL )
+, pCurrentError(NULL)
+, bModified(FALSE)
+, bFileLoading(FALSE)
+, nVersion(0)
+, pAppError( pParent )
+, aEditTree( pParent, pBF, aBits | WB_HASBUTTONS | WB_HASLINES | WB_HASBUTTONSATROOT )
+{
+// SetFont( aEditTree.GetDefaultFont( DEFAULTFONT_FIXED, aEditTree.GetSettings().GetLanguage(), 0, &aEditTree ) );
+ aEditTree.SetNodeBitmaps( Bitmap( SttResId (MBP_PLUS) ), Bitmap( SttResId (MBP_MINUS) ) );
+ aEditTree.SetSelectionMode( MULTIPLE_SELECTION );
+ if ( aEditTree.GetModel()->GetSortMode() != SortNone )
+ aEditTree.GetModel()->SetSortMode( SortNone );
+
+ if ( !bPrintLogToStdoutSet )
+ {
+ bPrintLogToStdoutSet = TRUE;
+ for ( USHORT i = 0 ; i < Application::GetCommandLineParamCount() ; i++ )
+ {
+ if ( Application::GetCommandLineParam( i ).Copy(0,9).CompareIgnoreCaseToAscii("-printlog") == COMPARE_EQUAL
+ #ifndef UNX
+ || Application::GetCommandLineParam( i ).Copy(0,9).CompareIgnoreCaseToAscii("/printlog") == COMPARE_EQUAL
+ #endif
+ )
+ bPrintLogToStdout = TRUE;
+ }
+ }
+}
+
+MsgEdit::~MsgEdit()
+{}
+
+// set the LogType since calling the add method can be from other add methods
+#define COPY_TTDEBUGDATA( LOGTYPE ) \
+ TTDebugData *pTTDebugData = new TTDebugData; \
+ *pTTDebugData = aDebugData; \
+ pTTDebugData->aLogType = LOGTYPE; \
+
+
+void MsgEdit::AddAnyMsg( TTLogMsg *LogMsg )
+{
+ if ( LogMsg->aDebugData.aFilename.Copy(0,2).CompareToAscii( "--" ) == COMPARE_EQUAL )
+ LogMsg->aDebugData.aFilename.Erase(0,2);
+
+ if ( LogMsg->aDebugData.aFilename.Len() && LogMsg->aDebugData.aFilename.GetChar(0) != '~' ) // do we want to convert
+ {
+ DirEntry aConvert( LogMsg->aDebugData.aFilename );
+ if ( pAppError->aBaseDir.Contains( aConvert ) )
+ {
+ aConvert.ToRel( pAppError->aBaseDir );
+ LogMsg->aDebugData.aFilename = CUniString("~"); // mark as converted
+ LogMsg->aDebugData.aFilename += aConvert.GetFull( FSYS_STYLE_VFAT );
+ }
+ else if ( !bFileLoading )
+ {
+ LogMsg->aDebugData.aFilename.Insert( CUniString("~-"), 0); // mark as unconvertable
+ }
+ }
+ xub_StrLen nPos;
+ LogMsg->aDebugData.aMsg.ConvertLineEnd();
+ // does the message have several lines -> repeat the call for each line
+ if ( (nPos = LogMsg->aDebugData.aMsg.Search( CUniString("\n").ConvertLineEnd() )) != STRING_NOTFOUND )
+ {
+ String aOriginalMsg = LogMsg->aDebugData.aMsg;
+ xub_StrLen nSysLineEndLen = CUniString("\n").ConvertLineEnd().Len();
+ String aLastPart = LogMsg->aDebugData.aMsg.Copy( nPos+nSysLineEndLen );
+ LogMsg->aDebugData.aMsg.Erase( nPos );
+ AddAnyMsg( LogMsg );
+ if ( aLastPart.Len() )
+ {
+ LogMsg->aDebugData.aMsg = aLastPart;
+ AddAnyMsg( LogMsg );
+ }
+ LogMsg->aDebugData.aMsg = aOriginalMsg;
+ }
+ else
+ {
+ String aUILogMsg( pBasicFrame->GenRealString( LogMsg->aDebugData.aMsg ) );
+ switch ( LogMsg->aDebugData.aLogType )
+ {
+ case LOG_RUN:
+ {
+ if ( LogMsg->aDebugData.aMsg.Len() == 0 )
+ {
+ SvtSysLocale aLocale;
+ LogMsg->aDebugData.aMsg = GEN_RES_STR2( S_PROG_START,
+ aLocale.GetLocaleData().getDate(Date()),
+ aLocale.GetLocaleData().getTime(Time()) );
+ aUILogMsg = pBasicFrame->GenRealString( LogMsg->aDebugData.aMsg );
+ }
+ AddRun( aUILogMsg, LogMsg->aDebugData ); break;
+ }
+ case LOG_TEST_CASE: AddTestCase( aUILogMsg, LogMsg->aDebugData ); break;
+ case LOG_ERROR: AddError( aUILogMsg, LogMsg->aDebugData ); break;
+ case LOG_CALL_STACK:AddCallStack( aUILogMsg, LogMsg->aDebugData ); break;
+ case LOG_MESSAGE: AddMessage( aUILogMsg, LogMsg->aDebugData ); break;
+ case LOG_WARNING: AddWarning( aUILogMsg, LogMsg->aDebugData ); break;
+ case LOG_ASSERTION: AddAssertion( aUILogMsg, LogMsg->aDebugData ); break;
+ case LOG_ASSERTION_STACK: AddAssertionStack( aUILogMsg, LogMsg->aDebugData ); break;
+ case LOG_QA_ERROR: AddQAError( aUILogMsg, LogMsg->aDebugData ); break;
+ default:DBG_ERROR("Unbekannter Typ in ResultFile. Speichern des ResultFile resultiert in Informationsverlust");
+ }
+
+ if ( !bFileLoading )
+ { // Comes from Testtool and must be written immediately
+ BOOL bFileWasChanged = pAppError->DiskFileChanged( SINCE_LAST_LOAD );
+
+ DBG_ASSERT( aLogFileName == LogMsg->aLogFileName, "Logging to different logfile as before" );
+ DirEntry aEntry( LogMsg->aLogFileName );
+ BOOL bNewFile = !aEntry.Exists();
+ SvFileStream aStrm( LogMsg->aLogFileName, STREAM_STD_WRITE );
+ if ( bNewFile )
+ {
+ String aSave = VERSION_STRING.Append( UniString::CreateFromInt32( 3 ) ).AppendAscii("\n"); // Version 3
+ aSave.ConvertLineEnd(LINEEND_CRLF);
+ aStrm << ByteString( aSave, RTL_TEXTENCODING_IBM_850 ).GetBuffer();
+ }
+
+ String aLogMsg = Impl_MakeSaveText( LogMsg->aDebugData ).AppendAscii("\n");
+
+ if( aStrm.IsOpen() )
+ {
+ aLogMsg.ConvertLineEnd(LINEEND_CRLF);
+ aStrm.Seek(STREAM_SEEK_TO_END);
+ aStrm << ByteString( aLogMsg, RTL_TEXTENCODING_UTF8 ).GetBuffer();
+ aStrm.Close();
+ }
+ if ( !bFileWasChanged )
+ pAppError->UpdateFileInfo( HAS_BEEN_LOADED );
+
+
+ // now write to stdout
+ if ( bPrintLogToStdout )
+ {
+ String aPrintMsg, aOriginalMsg;
+
+ aOriginalMsg = LogMsg->aDebugData.aMsg;
+ // converting to human readable string for adding errors to list in testobject
+ LogMsg->aDebugData.aMsg = pBasicFrame->GenRealString( LogMsg->aDebugData.aMsg );
+
+ aPrintMsg = Impl_MakeSaveText( LogMsg->aDebugData ).AppendAscii("\n");
+
+ // restore Original Msg
+ LogMsg->aDebugData.aMsg = aOriginalMsg;
+
+ printf( ByteString( aPrintMsg, RTL_TEXTENCODING_UTF8 ).GetBuffer() );
+ }
+ }
+ }
+ // converting to human readable string for adding errors to list in testobject
+ LogMsg->aDebugData.aMsg = pBasicFrame->GenRealString( LogMsg->aDebugData.aMsg );
+}
+
+void MsgEdit::AddRun( String aMsg, TTDebugData aDebugData )
+{
+ if ( !bFileLoading && bLimitLogLen )
+ {
+ USHORT nSkip = nMaxLogLen;
+ SvLBoxEntry *pRun = aEditTree.First();
+ while ( nSkip-- && pRun )
+ pRun = aEditTree.NextSibling( pRun );
+ // Remove all Entries thereafter
+ if ( pRun )
+ {
+ while ( pRun && aEditTree.NextSibling( pRun ) )
+ aEditTree.GetModel()->Remove( aEditTree.NextSibling( pRun ) );
+
+ aEditTree.GetModel()->Remove( pRun );
+ bModified = TRUE;
+ lModify.Call( NULL );
+ Save( aLogFileName );
+ pAppError->UpdateFileInfo( HAS_BEEN_LOADED );
+ }
+ }
+
+ COPY_TTDEBUGDATA( LOG_RUN );
+ if ( !bFileLoading || ( bFileLoading && nVersion >= 2 ) )
+ pCurrentRun = aEditTree.InsertEntry( aMsg, NULL, FALSE, 0, pTTDebugData );
+ else // First file format
+ pCurrentRun = aEditTree.InsertEntry( aMsg, NULL, FALSE, LIST_APPEND, pTTDebugData ); // and therefor at the end
+
+ aEditTree.ShowEntry( pCurrentRun );
+ pCurrentTestCase = NULL;
+ pCurrentAssertion = NULL;
+ pCurrentError = NULL;
+}
+
+void MsgEdit::AddTestCase( String aMsg, TTDebugData aDebugData )
+{
+ if ( pCurrentRun )
+ {
+ if ( aMsg.Len() == 0 ) // End of Testcase
+ {
+ pCurrentTestCase = NULL;
+ }
+ else
+ {
+ COPY_TTDEBUGDATA( LOG_TEST_CASE );
+ pCurrentTestCase = aEditTree.InsertEntry( aMsg, pCurrentRun, FALSE, LIST_APPEND, pTTDebugData );
+ aEditTree.ShowEntry( pCurrentTestCase );
+ }
+ }
+ pCurrentAssertion = NULL;
+ pCurrentError = NULL;
+}
+
+void MsgEdit::AddError( String aMsg, TTDebugData aDebugData )
+{
+ if ( !pCurrentTestCase )
+ {
+ TTLogMsg aLogMsg;
+ aLogMsg.aDebugData = aDebugData;
+ aLogMsg.aDebugData.aMsg = GEN_RES_STR0( S_ERROR_OUTSIDE_TESTCASE );
+ aLogMsg.aDebugData.aLogType = LOG_TEST_CASE;
+ aLogMsg.aLogFileName = aLogFileName;
+ AddAnyMsg( &aLogMsg );
+ }
+ if ( pCurrentTestCase )
+ {
+ COPY_TTDEBUGDATA( LOG_ERROR );
+ pCurrentError = aEditTree.InsertEntry( aMsg, pCurrentTestCase, FALSE, LIST_APPEND, pTTDebugData );
+ aEditTree.ShowEntry( pCurrentError );
+ }
+}
+
+void MsgEdit::AddCallStack( String aMsg, TTDebugData aDebugData )
+{
+ DBG_ASSERT( pCurrentError, "Callstack ohne CurrentError im Journal" );
+ if ( pCurrentError )
+ {
+ COPY_TTDEBUGDATA( LOG_CALL_STACK );
+ aEditTree.InsertEntry( aMsg, pCurrentError, FALSE, LIST_APPEND, pTTDebugData );
+ }
+}
+
+void MsgEdit::AddMessage( String aMsg, TTDebugData aDebugData )
+{
+ SvLBoxEntry *pThisEntry = NULL;
+ COPY_TTDEBUGDATA( LOG_MESSAGE );
+ if ( pCurrentTestCase )
+ pThisEntry = aEditTree.InsertEntry( aMsg, pCurrentTestCase, FALSE, LIST_APPEND, pTTDebugData );
+ else if ( pCurrentRun )
+ {
+ pThisEntry = aEditTree.InsertEntry( aMsg, pCurrentRun, FALSE, LIST_APPEND, pTTDebugData );
+ aEditTree.ShowEntry( pThisEntry );
+ }
+ else
+ {
+ AddRun( aMsg, aDebugData );
+ pThisEntry = aEditTree.InsertEntry( aMsg, pCurrentRun, FALSE, LIST_APPEND, pTTDebugData );
+ aEditTree.ShowEntry( pThisEntry );
+ }
+}
+
+void MsgEdit::AddWarning( String aMsg, TTDebugData aDebugData )
+{
+ SvLBoxEntry *pThisEntry = NULL;
+ String aCompleteMsg;
+ aCompleteMsg = WARNING_PREFIX.Append( aMsg );
+ COPY_TTDEBUGDATA( LOG_WARNING );
+
+ if ( pCurrentTestCase )
+ pThisEntry = aEditTree.InsertEntry( aCompleteMsg, pCurrentTestCase, FALSE, LIST_APPEND, pTTDebugData );
+ else if ( pCurrentRun )
+ {
+ pThisEntry = aEditTree.InsertEntry( aCompleteMsg, pCurrentRun, FALSE, LIST_APPEND, pTTDebugData );
+ aEditTree.ShowEntry( pThisEntry );
+ }
+ else
+ {
+ AddRun( aMsg, aDebugData );
+ pThisEntry = aEditTree.InsertEntry( aCompleteMsg, pCurrentRun, FALSE, LIST_APPEND, pTTDebugData );
+ aEditTree.ShowEntry( pThisEntry );
+ }
+
+ while ( !aEditTree.IsEntryVisible( pThisEntry ) && ( pThisEntry = aEditTree.GetParent( pThisEntry ) ) != NULL )
+ aEditTree.InvalidateEntry( pThisEntry );
+}
+
+void MsgEdit::AddAssertion( String aMsg, TTDebugData aDebugData )
+{
+ const String aAssertionStackPrefix( CUniString(ASSERTION_STACK_PREFIX) );
+ if ( aMsg.Match( aAssertionStackPrefix ) == aAssertionStackPrefix.Len() )
+ {
+ AddAssertionStack( aMsg, aDebugData );
+ return;
+ }
+ SvLBoxEntry *pThisEntry = NULL;
+ COPY_TTDEBUGDATA( LOG_ASSERTION );
+ if ( pCurrentTestCase )
+ pThisEntry = aEditTree.InsertEntry( aMsg, pCurrentTestCase, FALSE, LIST_APPEND, pTTDebugData );
+ else if ( pCurrentRun )
+ {
+ pThisEntry = aEditTree.InsertEntry( aMsg, pCurrentRun, FALSE, LIST_APPEND, pTTDebugData );
+ aEditTree.ShowEntry( pThisEntry );
+ }
+ else
+ {
+ AddRun( aMsg, aDebugData );
+ pThisEntry = aEditTree.InsertEntry( aMsg, pCurrentRun, FALSE, LIST_APPEND, pTTDebugData );
+ aEditTree.ShowEntry( pThisEntry );
+ }
+
+ pCurrentAssertion = pThisEntry;
+
+ while ( !aEditTree.IsEntryVisible( pThisEntry ) && ( pThisEntry = aEditTree.GetParent( pThisEntry ) ) != NULL )
+ aEditTree.InvalidateEntry( pThisEntry );
+}
+
+void MsgEdit::AddAssertionStack( String aMsg, TTDebugData aDebugData )
+{
+ SvLBoxEntry *pThisEntry = NULL;
+ COPY_TTDEBUGDATA( LOG_ASSERTION_STACK );
+ if ( pCurrentAssertion )
+ pThisEntry = aEditTree.InsertEntry( aMsg, pCurrentAssertion, FALSE, LIST_APPEND, pTTDebugData );
+ else if ( pCurrentTestCase )
+ pThisEntry = aEditTree.InsertEntry( aMsg, pCurrentTestCase, FALSE, LIST_APPEND, pTTDebugData );
+ else if ( pCurrentRun )
+ {
+ pThisEntry = aEditTree.InsertEntry( aMsg, pCurrentRun, FALSE, LIST_APPEND, pTTDebugData );
+ aEditTree.ShowEntry( pThisEntry );
+ }
+ else
+ {
+ AddRun( aMsg, aDebugData );
+ pThisEntry = aEditTree.InsertEntry( aMsg, pCurrentRun, FALSE, LIST_APPEND, pTTDebugData );
+ aEditTree.ShowEntry( pThisEntry );
+ }
+
+ while ( !aEditTree.IsEntryVisible( pThisEntry ) && ( pThisEntry = aEditTree.GetParent( pThisEntry ) ) != NULL )
+ aEditTree.InvalidateEntry( pThisEntry );
+}
+
+void MsgEdit::AddQAError( String aMsg, TTDebugData aDebugData )
+{
+ SvLBoxEntry *pThisEntry = NULL;
+ COPY_TTDEBUGDATA( LOG_QA_ERROR );
+ if ( pCurrentTestCase )
+ pThisEntry = aEditTree.InsertEntry( aMsg, pCurrentTestCase, FALSE, LIST_APPEND, pTTDebugData );
+ else if ( pCurrentRun )
+ {
+ pThisEntry = aEditTree.InsertEntry( aMsg, pCurrentRun, FALSE, LIST_APPEND, pTTDebugData );
+ aEditTree.ShowEntry( pThisEntry );
+ }
+ else
+ {
+ AddRun( aMsg, aDebugData );
+ pThisEntry = aEditTree.InsertEntry( aMsg, pCurrentRun, FALSE, LIST_APPEND, pTTDebugData );
+ aEditTree.ShowEntry( pThisEntry );
+ }
+
+ while ( !aEditTree.IsEntryVisible( pThisEntry ) && ( pThisEntry = aEditTree.GetParent( pThisEntry ) ) != NULL )
+ aEditTree.InvalidateEntry( pThisEntry );
+}
+
+/*
+ SvLBoxEntry* GetEntry( SvLBoxEntry* pParent, ULONG nPos ) const { return SvLBox::GetEntry(pParent,nPos); }
+ SvLBoxEntry* GetEntry( ULONG nRootPos ) const { return SvLBox::GetEntry(nRootPos);}
+
+
+
+ SvLBoxEntry* FirstChild(SvLBoxEntry* pParent ) const { return (SvLBoxEntry*)(pModel->FirstChild(pParent)); }
+ SvLBoxEntry* NextSibling(SvLBoxEntry* pEntry ) const { return (SvLBoxEntry*)(pModel->NextSibling( pEntry )); }
+ SvLBoxEntry* PrevSibling(SvLBoxEntry* pEntry ) const { return (SvLBoxEntry*)(pModel->PrevSibling( pEntry )); }
+
+ SvLBoxEntry* FirstSelected() const { return (SvLBoxEntry*)SvListView::FirstSelected(); }
+ SvLBoxEntry* NextSelected( SvLBoxEntry* pEntry ) const { return (SvLBoxEntry*)(SvListView::NextSelected(pEntry)); }
+ SvLBoxEntry* PrevSelected( SvLBoxEntry* pEntry ) const { return (SvLBoxEntry*)(SvListView::PrevSelected(pEntry)); }
+ SvLBoxEntry* LastSelected() const { return (SvLBoxEntry*)(SvListView::LastSelected()); }
+
+ SvLBoxEntry* GetEntry( SvLBoxEntry* pParent, ULONG nPos ) const { return (SvLBoxEntry*)(pModel->GetEntry(pParent,nPos)); }
+ SvLBoxEntry* GetEntry( ULONG nRootPos ) const { return (SvLBoxEntry*)(pModel->GetEntry(nRootPos)); }
+
+ SvLBoxEntry* GetParent( SvLBoxEntry* pEntry ) const { return (SvLBoxEntry*)(pModel->GetParent(pEntry)); }
+ SvLBoxEntry* GetRootLevelParent(SvLBoxEntry* pEntry ) const { return (SvLBoxEntry*)(pModel->GetRootLevelParent( pEntry ));}
+
+ BOOL IsInChildList( SvListEntry* pParent, SvListEntry* pChild) const;
+ SvListEntry* GetEntry( SvListEntry* pParent, ULONG nPos ) const;
+ SvListEntry* GetEntry( ULONG nRootPos ) const;
+ SvListEntry* GetEntryAtAbsPos( ULONG nAbsPos ) const;
+ SvListEntry* GetParent( SvListEntry* pEntry ) const;
+ SvListEntry* GetRootLevelParent( SvListEntry* pEntry ) const;
+*/
+
+//#define CHECK( pMemo ) if ( pMemo && !aEditTree.GetViewData( pMemo ) ) pMemo = NULL
+#define CHECK( pMemo ) if ( pMemo && !aEditTree.GetModel()->IsInChildList( NULL, pMemo ) ) pMemo = NULL
+void MsgEdit::Delete()
+{
+ aEditTree.RemoveSelection();
+ CHECK( pCurrentRun );
+ CHECK( pCurrentTestCase );
+ CHECK( pCurrentAssertion );
+ CHECK( pCurrentError );
+ bModified = TRUE;
+ lModify.Call( NULL );
+}
+
+void MsgEdit::Cut(){ Copy(); Delete(); bModified = TRUE; lModify.Call( NULL ); }
+void MsgEdit::Copy(){ ::svt::OStringTransfer::CopyString( GetSelected(), &aEditTree ); }
+/**/void MsgEdit::Paste(){ Sound::Beep(); }
+void MsgEdit::Undo(){ Sound::Beep(); }
+void MsgEdit::Redo(){ Sound::Beep(); }
+
+
+String MsgEdit::Impl_MakeText( SvLBoxEntry *pEntry ) const
+{
+ String aRet;
+ TTDebugData *aData = (TTDebugData*)pEntry->GetUserData();
+ switch ( aData->aLogType )
+ {
+ case LOG_RUN: aRet.AppendAscii("\n"); break;
+ case LOG_TEST_CASE: break;
+ case LOG_ERROR: break;
+ case LOG_CALL_STACK:aRet.AppendAscii("--> "); break;
+ case LOG_MESSAGE: break;
+ case LOG_WARNING: break;
+ case LOG_ASSERTION: break;
+ case LOG_ASSERTION_STACK:aRet.AppendAscii("--> "); break;
+ case LOG_QA_ERROR: break;
+ default:DBG_ERROR("Unknown type in ResultWindow!");
+ }
+ aRet += aEditTree.GetEntryText( pEntry );
+ return aRet;
+}
+
+String MsgEdit::Impl_MakeSaveText( TTDebugData aData ) const
+{
+// LogType;Filename;Line;Col1;Col2;Message
+ String aRet;
+ aRet += String::CreateFromInt32( (int)aData.aLogType );
+ aRet += ';';
+ aRet += aData.aFilename;
+ aRet += ';';
+ aRet += String::CreateFromInt32( aData.nLine );
+ aRet += ';';
+ aRet += String::CreateFromInt32( aData.nCol1 );
+ aRet += ';';
+ aRet += String::CreateFromInt32( aData.nCol2 );
+ aRet += ';';
+ aRet += '"';
+ aRet += aData.aMsg;
+ aRet += '"';
+ return aRet;
+}
+
+String MsgEdit::Impl_MakeSaveText( SvLBoxEntry *pEntry ) const
+{
+// LogType;Filename;Line;Col1;Col2;Message
+ String aRet;
+ TTDebugData *aData = (TTDebugData*)pEntry->GetUserData();
+
+ if ( aEditTree.PrevSibling( pEntry ) && LOGTYPE( aEditTree.PrevSibling( pEntry ) ) == LOG_TEST_CASE )
+ { // To properly finish cases and warnings/msgs are in correct hierarchie
+ aRet += String::CreateFromInt32( (int)LOG_TEST_CASE );
+ aRet.AppendAscii(";;0;0;0;\"\"\n");
+ }
+ aRet += Impl_MakeSaveText( *aData );
+ return aRet;
+}
+
+String MsgEdit::GetSelected()
+{
+ String aRet;
+ SvLBoxEntry *pEntry = aEditTree.FirstSelected();
+ while ( pEntry )
+ {
+ aRet += Impl_MakeText( pEntry );
+ aRet += '\n';
+ pEntry = aEditTree.NextSelected( pEntry );
+ }
+ aRet.ConvertLineEnd();
+ return aRet;
+}
+
+TextSelection MsgEdit::GetSelection() const
+{
+ ULONG nStart=0,nEnd=0;
+
+ if ( aEditTree.FirstSelected() )
+ {
+ nStart = aEditTree.GetModel()->GetAbsPos(aEditTree.FirstSelected() );
+ if ( aEditTree.LastSelected() )
+ nEnd = aEditTree.GetModel()->GetAbsPos(aEditTree.LastSelected() );
+ return TextSelection( TextPaM( nStart, 0 ), TextPaM( nEnd, STRING_MAXLEN ) );
+ }
+ else
+ return TextSelection();
+}
+
+void MsgEdit::SetSelection( const TextSelection& rSelection )
+{
+ ULONG nStart,nEnd;
+
+ while ( aEditTree.GetSelectionCount() )
+ aEditTree.Select( aEditTree.FirstSelected(), FALSE );
+
+ if ( rSelection.HasRange() )
+ {
+ nStart = rSelection.GetStart().GetPara();
+ nEnd = rSelection.GetEnd().GetPara();
+
+ for ( ULONG i = nStart ; i <= nEnd ; i++ )
+ aEditTree.Select( aEditTree.GetModel()->GetEntryAtAbsPos( i ), TRUE );
+ }
+}
+
+USHORT MsgEdit::GetLineNr() const
+{
+ if ( aEditTree.GetCurEntry() )
+ return (USHORT)aEditTree.GetModel()->GetAbsPos(aEditTree.GetCurEntry() ) + 1;
+ else
+ return 0;
+}
+
+void MsgEdit::ReplaceSelected( const String& rStr )
+{
+ (void) rStr; /* avoid warning about unused parameter */
+ Sound::Beep();
+ DBG_ERROR("Not Implemented");
+}
+
+BOOL MsgEdit::IsModified(){ return bModified; }
+void MsgEdit::SetModifyHdl( Link l ){ lModify = l; }
+
+String MsgEdit::GetText() const
+{
+ String aRet;
+ SvLBoxEntry *pEntry = aEditTree.First();
+ while ( pEntry )
+ {
+ aRet += Impl_MakeText( pEntry );
+ aRet += '\n';
+ pEntry = aEditTree.Next( pEntry );
+ }
+ aRet.ConvertLineEnd();
+ return aRet;
+}
+
+void MsgEdit::SetText( const String& rStr )
+{
+ (void) rStr; /* avoid warning about unused parameter */
+ Sound::Beep();
+ DBG_ERROR("Not Implemented");
+}
+
+BOOL MsgEdit::HasText() const
+{
+ return aEditTree.First() != NULL;
+}
+
+// Search from the beginning or mark start + 1
+BOOL MsgEdit::Find( const String& s )
+{
+ TextSelection r = GetSelection();
+ USHORT bgn = (USHORT) r.GetStart().GetPara() + 1;
+ if ( r.GetStart().GetPara() == 0 )
+ bgn = 0; // Search from the beginning
+
+ SvLBoxEntry *pEntry = aEditTree.GetModel()->GetEntryAtAbsPos( bgn );
+ while ( pEntry )
+ {
+ if( aEditTree.GetEntryText( pEntry ).Search( s, 0 ) != STRING_NOTFOUND )
+ {
+ aEditTree.SetCurEntry( pEntry );
+ return TRUE;
+ }
+ pEntry = aEditTree.Next( pEntry );
+ }
+ return FALSE;
+}
+
+/******************************************************************
+
+ Fileformat of *.res file:
+ Information are stored as semicolon separated strings
+ Order:
+
+ LogType;Filename;Line;Col1;Col2;Message
+
+******************************************************************/
+
+BOOL MsgEdit::Load( const String& aName )
+{
+ aLogFileName = aName;
+ BOOL bOk = TRUE, bFirstLine = TRUE;
+ BOOL bLoadError = FALSE;
+ SvFileStream aStrm( aName, STREAM_STD_READ );
+ if( aStrm.IsOpen() )
+ {
+ aEditTree.Clear();
+ String aLine;
+ bFileLoading = TRUE; // To avoid logging to disk
+ TTLogMsg *pLogMsg = new TTLogMsg;
+ while( !aStrm.IsEof() && bOk )
+ {
+ if ( nVersion >= 3 ) // utf8
+ aStrm.ReadByteStringLine( aLine, RTL_TEXTENCODING_UTF8 );
+ else
+ aStrm.ReadByteStringLine( aLine, RTL_TEXTENCODING_IBM_850 );
+
+ if( aStrm.GetError() != SVSTREAM_OK )
+ bOk = FALSE;
+
+#define TOKEN( n ) aLine.GetToken( n )
+
+ if ( aLine.GetTokenCount() >= 6 )
+ {
+// LogType;Filename;Line;Col1;Col2;Message
+ TTDebugData aDebugData;
+ aDebugData.aLogType = TTLogType( TOKEN(0).ToInt32() );
+ aDebugData.aFilename = TOKEN(1);
+ aDebugData.nLine = USHORT( TOKEN(2).ToInt32() );
+ aDebugData.nCol1 = USHORT( TOKEN(3).ToInt32() );
+ aDebugData.nCol2 = USHORT( TOKEN(4).ToInt32() );
+ aDebugData.aMsg = aLine.GetQuotedToken( 5, CUniString("\"\"") );
+
+ // Remove leading and trailing quotes
+ aDebugData.aMsg.Erase(0,1);
+ aDebugData.aMsg.Erase(aDebugData.aMsg.Len()-1,1);
+
+ pLogMsg->aLogFileName.Erase();
+ pLogMsg->aDebugData = aDebugData;
+
+ AddAnyMsg( pLogMsg );
+ }
+ else if ( bFirstLine && (aLine.Search( VERSION_STRING ) == 0) )
+ nVersion = USHORT( aLine.Copy( VERSION_STRING.Len() ).ToInt32() );
+ else if ( aLine.Len() )
+ bLoadError = TRUE;
+
+ bFirstLine = FALSE;
+ }
+ bFileLoading = FALSE;
+ delete pLogMsg;
+ aStrm.Close();
+ if ( nVersion < 2 && !bLoadError )
+ Save( aName ); // Necessary to avoid mess
+
+ }
+ else
+ bOk = FALSE;
+ return bOk;
+}
+
+BOOL MsgEdit::Save( const String& aName )
+{
+ BOOL bOk = TRUE;
+ BOOL bIsText = DirEntry( aName ).GetExtension().CompareIgnoreCaseToAscii("TXT") == COMPARE_EQUAL;
+ if ( bIsText && !QueryBox( NULL, SttResId( IDS_LOSS_OF_INFORMATION ) ).Execute() )
+ return FALSE;
+ SvFileStream aStrm( aName, STREAM_STD_WRITE | STREAM_TRUNC );
+ if( aStrm.IsOpen() )
+ {
+ if ( bIsText )
+ {
+ String aSave = GetText();
+ aSave.ConvertLineEnd(LINEEND_CRLF);
+ aStrm << ByteString( aSave, RTL_TEXTENCODING_UTF8 ).GetBuffer();
+ }
+ else
+ {
+// LogType;Filename;Line;Col1;Col2;Message
+ String aSave = VERSION_STRING.Append( UniString::CreateFromInt32( 3 ) ).AppendAscii("\n"); // Version 3
+ SvLBoxEntry *pRun = aEditTree.First();
+ while ( pRun && aEditTree.NextSibling( pRun ) )
+ pRun = aEditTree.NextSibling( pRun );
+
+ aSave.ConvertLineEnd(LINEEND_CRLF);
+ aStrm << ByteString( aSave, RTL_TEXTENCODING_IBM_850 ).GetBuffer();
+
+ SvLBoxEntry *pEntry;
+ while ( pRun )
+ {
+ pEntry = pRun;
+ while ( pEntry && ( pEntry == pRun || LOGTYPE( pEntry ) != LOG_RUN ) )
+ {
+ aSave = Impl_MakeSaveText( pEntry );
+ aSave += '\n';
+ aSave.ConvertLineEnd(LINEEND_CRLF);
+ aStrm << ByteString( aSave, RTL_TEXTENCODING_UTF8 ).GetBuffer();
+ pEntry = aEditTree.Next( pEntry );
+ }
+ pRun = aEditTree.PrevSibling( pRun );
+
+ }
+ }
+ if( aStrm.GetError() != SVSTREAM_OK )
+ bOk = FALSE;
+ else
+ {
+ bModified = FALSE;
+ lModify.Call( NULL );
+ }
+
+ }
+ else
+ bOk = FALSE;
+ return bOk;
+}
+
+
+TTTreeListBox::TTTreeListBox( AppError* pParent, BasicFrame* pBF, WinBits nWinStyle )
+: SvTreeListBox( pParent, nWinStyle )
+, pBasicFrame(pBF)
+, pAppError( pParent )
+//, nDeselectParent(0)
+{}
+
+BOOL TTTreeListBox::JumpToSourcecode( SvLBoxEntry *pThisEntry )
+{
+ if ( pThisEntry && pThisEntry->GetUserData() && ((TTDebugData*)pThisEntry->GetUserData())->aFilename.Len() > 0 )
+ {
+ TTDebugData *aData = (TTDebugData*)pThisEntry->GetUserData();
+ String aFilename = aData->aFilename;
+ if ( aData->aFilename.GetChar(0) == '~' )
+ {
+ if ( aData->aFilename.GetChar(1) == '-' )
+ {
+ aFilename.Erase( 0,2 );
+ }
+ else
+ {
+ aFilename.Erase( 0,1 );
+ DirEntry aConvert( pAppError->aBaseDir );
+ aConvert += DirEntry( aFilename, FSYS_STYLE_VFAT );
+ aFilename = aConvert.GetFull();
+ }
+ }
+
+ if ( pBasicFrame->FindModuleWin( aFilename ) )
+ {
+ AppWin *pWin = pBasicFrame->FindModuleWin( aFilename );
+ pWin->ToTop();
+ }
+ else if ( pBasicFrame->Basic().FindModule( CUniString( "--" ).Append( aFilename ) ) )
+ {
+ SbModule* pMod = pBasicFrame->Basic().FindModule( CUniString( "--" ).Append( aFilename ) );
+ pBasicFrame->CreateModuleWin( pMod );
+ }
+ else
+ pBasicFrame->LoadFile( aFilename );
+
+ if ( pBasicFrame->pWork && pBasicFrame->pWork->ISA(AppEdit) )
+ ((AppEdit*)pBasicFrame->pWork)->Highlight( aData->nLine, aData->nCol1, aData->nCol2 );
+ return FALSE;
+ }
+ return TRUE;
+}
+
+BOOL TTTreeListBox::DoubleClickHdl()
+{
+ return JumpToSourcecode( GetHdlEntry() );
+}
+
+/*ULONG TTTreeListBox::SelectChildren( SvLBoxEntry* pParent, BOOL bSelect )
+{
+ SvLBoxEntry *pEntry = FirstChild( pParent );
+ ULONG nRet = 0;
+ while ( pEntry )
+ {
+ nRet++;
+ Select( pEntry, bSelect );
+ pEntry = NextSibling( pEntry );
+ }
+ return nRet;
+}
+
+
+void TTTreeListBox::SelectHdl()
+{
+ SvLBoxEntry* pHdlEntry = GetHdlEntry();
+
+ SelectChildren( pHdlEntry, TRUE );
+ Select( pHdlEntry, TRUE );
+// InitMenu(pApp->GetAppMenu()->GetPopupMenu( RID_APPEDIT )); // So da Delete richtig ist
+}
+
+void TTTreeListBox::DeselectHdl()
+{
+ SvLBoxEntry* pHdlEntry = GetHdlEntry();
+ if ( GetParent( pHdlEntry ) )
+ {
+ nDeselectParent++;
+ Select( GetParent( pHdlEntry ), FALSE );
+ nDeselectParent--;
+ }
+ if ( !nDeselectParent )
+ {
+ SelectChildren( pHdlEntry, FALSE );
+ Select( pHdlEntry, FALSE );
+ }
+ Invalidate();
+} */
+
+
+void TTTreeListBox::KeyInput( const KeyEvent& rKEvt )
+{
+ switch ( rKEvt.GetKeyCode().GetFunction() )
+ {
+ case KEYFUNC_CUT:
+ Control::GetParent()->Command( CommandEvent( Point(), RID_EDITCUT ) );
+ break;
+ case KEYFUNC_COPY:
+ Control::GetParent()->Command( CommandEvent( Point(), RID_EDITCOPY ) );
+ break;
+ case KEYFUNC_PASTE:
+ Control::GetParent()->Command( CommandEvent( Point(), RID_EDITPASTE ) );
+ break;
+ case KEYFUNC_DELETE:
+ Control::GetParent()->Command( CommandEvent( Point(), RID_EDITDEL ) );
+ break;
+ default:
+ if ( rKEvt.GetKeyCode().GetCode() == KEY_RETURN )
+ JumpToSourcecode( GetCurEntry() );
+ else
+ SvTreeListBox::KeyInput( rKEvt );
+ }
+}
+
+
+TTFeatures TTTreeListBox::GetFeatures( SvLBoxEntry* pEntry )
+{
+ switch ( LOGTYPE( pEntry ) )
+ {
+ case LOG_MESSAGE:
+ return HasNothing;
+ case LOG_WARNING :
+ return HasWarning;
+ case LOG_ERROR:
+ case LOG_CALL_STACK:
+ return HasError;
+ case LOG_RUN:
+ case LOG_TEST_CASE:
+ {
+ SvLBoxEntry* pThisEntry = FirstChild( pEntry );
+ TTFeatures aResult = HasNothing;
+ while ( pThisEntry && !( (aResult & HasError) == HasError ) )
+ {
+ if ( !IsEntryVisible( pThisEntry ) )
+ aResult |= GetFeatures( pThisEntry );
+ pThisEntry = NextSibling( pThisEntry );
+ }
+ return aResult;
+ }
+ case LOG_ASSERTION:
+ case LOG_ASSERTION_STACK:
+ return HasAssertion;
+ case LOG_QA_ERROR:
+ return HasQAError;
+ default:
+ DBG_ERROR("Unknown type in ResultWindow");
+ }
+ return HasNothing;
+}
+
+
+class TTLBoxString : public SvLBoxString
+{
+public:
+
+ TTLBoxString( SvLBoxEntry* pEntry, USHORT nFlags,
+ const String& rStr ) : SvLBoxString(pEntry,nFlags,rStr) {}
+
+ virtual void Paint( const Point& rPos, SvLBox& rDev, USHORT nFlags,
+ SvLBoxEntry* pEntry);
+};
+
+
+void TTLBoxString::Paint( const Point& rPos, SvLBox& rDev, USHORT nFlags,
+ SvLBoxEntry* pEntry )
+{
+ TTFeatures aFeatures = ((TTTreeListBox*)&rDev)->GetFeatures( pEntry );
+
+ Font aOldFont( rDev.GetFont());
+ Font aFont( aOldFont );
+ if ( aFeatures != HasNothing )
+ {
+ Color aCol;
+ if ( ( aFeatures & HasError ) == HasError )
+ aCol = Color( 255, 130, 130 ); // Red
+ else if ( ( aFeatures & HasWarning ) == HasWarning )
+ aCol = Color( 255, 200, 120 ); // Ocker oder so
+ else if ( ( aFeatures & HasAssertion ) == HasAssertion )
+ aCol = Color( 0xd0, 0xd0, 0xff ); // blueish
+ else
+ aCol = Color( 0xd0, 0xff, 0xd0 ); // greenish
+
+ if( rDev.IsSelected(pEntry) )
+ aFont.SetColor( aCol );
+ else
+ {
+ aFont.SetFillColor( aCol );
+ aFont.SetTransparent( FALSE );
+ Color aCol2( COL_BLACK );
+ aFont.SetColor( aCol2 );
+ }
+
+ rDev.SetFont( aFont );
+ rDev.DrawText( rPos, GetText() );
+ }
+ else
+ {
+ if( !rDev.IsSelected(pEntry) )
+ {
+ Color aCol( COL_BLACK );
+ aFont.SetColor( aCol );
+ }
+ rDev.SetFont( aFont );
+ SvLBoxString::Paint( rPos, rDev, nFlags, pEntry );
+ }
+ rDev.SetFont( aOldFont );
+}
+
+
+void TTTreeListBox::InitEntry(SvLBoxEntry* pEntry,
+ const String& rStr ,const Image& rImg1, const Image& rImg2,
+ SvLBoxButtonKind eButtonKind )
+{
+ USHORT nColToHilite = 1; //0==Bitmap;1=="Column1";2=="Column2"
+ SvTreeListBox::InitEntry( pEntry, rStr, rImg1, rImg2, eButtonKind );
+ SvLBoxString* pCol = (SvLBoxString*)pEntry->GetItem( nColToHilite );
+ TTLBoxString* pStr = new TTLBoxString( pEntry, 0, pCol->GetText() );
+ pEntry->ReplaceItem( pStr, nColToHilite );
+}
+
diff --git a/basic/source/app/msgedit.hxx b/basic/source/app/msgedit.hxx
new file mode 100644
index 000000000000..76b085668768
--- /dev/null
+++ b/basic/source/app/msgedit.hxx
@@ -0,0 +1,114 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _MSGEDIT_HXX
+#define _MSGEDIT_HXX
+
+#include <svtools/svtreebx.hxx>
+#include <basic/testtool.hxx>
+#include "dataedit.hxx"
+
+class BasicFrame;
+class AppError;
+
+#define SelectChildren SelectChilds // Sonst wird mir schlecht
+
+typedef USHORT TTFeatures; // Bitfield for features of the entries
+#define HasNothing TTFeatures(0x00)
+#define HasError TTFeatures(0x01)
+#define HasWarning TTFeatures(0x02)
+#define HasAssertion TTFeatures(0x04)
+#define HasQAError TTFeatures(0x08)
+
+
+class TTTreeListBox : public SvTreeListBox
+{
+protected:
+// virtual void Command( const CommandEvent& rCEvt );
+// USHORT nDeselectParent;
+ BasicFrame *pBasicFrame;
+ void InitEntry( SvLBoxEntry*, const String&, const Image&,
+ const Image&, SvLBoxButtonKind eButtonKind );
+ AppError *pAppError;
+
+ BOOL JumpToSourcecode( SvLBoxEntry *pThisEntry );
+
+public:
+ TTTreeListBox( AppError* pParent, BasicFrame* pBF, WinBits nWinStyle=0 );
+ ~TTTreeListBox(){}
+
+// virtual void SelectHdl();
+// virtual void DeselectHdl();
+ virtual BOOL DoubleClickHdl();
+
+ virtual void KeyInput( const KeyEvent& rKEvt );
+
+// ULONG SelectChildren( SvLBoxEntry* pParent, BOOL bSelect );
+ TTFeatures GetFeatures( SvLBoxEntry* );
+};
+
+class MsgEdit : public DataEdit
+{
+ BasicFrame *pBasicFrame;
+
+ SvLBoxEntry *pCurrentRun;
+ SvLBoxEntry *pCurrentTestCase;
+ SvLBoxEntry *pCurrentAssertion;
+ SvLBoxEntry *pCurrentError;
+ BOOL bModified;
+ Link lModify;
+ BOOL bFileLoading; // TRUE while loading a file
+ String Impl_MakeText( SvLBoxEntry *pEntry ) const;
+ String Impl_MakeSaveText( SvLBoxEntry *pEntry ) const;
+ String Impl_MakeSaveText( TTDebugData aData ) const;
+ USHORT nVersion; // Stores file version
+ AppError* pAppError;
+ String aLogFileName;
+
+ static USHORT nMaxLogLen;
+ static BOOL bLimitLogLen;
+ static BOOL bPrintLogToStdout;
+ static BOOL bPrintLogToStdoutSet; // has it been initialized yet
+public:
+ MsgEdit( AppError*, BasicFrame *pBF, const WinBits& );
+ ~MsgEdit();
+ void AddAnyMsg( TTLogMsg *LogMsg );
+ void AddRun( String aMsg, TTDebugData aDebugData );
+ void AddTestCase( String aMsg, TTDebugData aDebugData );
+ void AddError( String aMsg, TTDebugData aDebugData );
+ void AddCallStack( String aMsg, TTDebugData aDebugData );
+ void AddMessage( String aMsg, TTDebugData aDebugData );
+ void AddWarning( String aMsg, TTDebugData aDebugData );
+ void AddAssertion( String aMsg, TTDebugData aDebugData );
+ void AddAssertionStack( String aMsg, TTDebugData aDebugData );
+ void AddQAError( String aMsg, TTDebugData aDebugData );
+
+ static void SetMaxLogLen( USHORT nLen ) { nMaxLogLen = nLen; bLimitLogLen = TRUE; }
+DATA_FUNC_DEF( aEditTree, TTTreeListBox )
+};
+
+#endif
diff --git a/basic/source/app/mybasic.cxx b/basic/source/app/mybasic.cxx
new file mode 100644
index 000000000000..f69c4c468111
--- /dev/null
+++ b/basic/source/app/mybasic.cxx
@@ -0,0 +1,304 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+
+#ifndef _MSGBOX_HXX //autogen
+#include <vcl/msgbox.hxx>
+#endif
+#include <basic/sbx.hxx>
+
+// AB-Uno-Test
+//#define unotest
+#ifdef unotest
+#ifndef _USR_UNO_HXX
+#include <usr/uno.hxx>
+#endif
+#include <basic/sbuno.hxx>
+#include <sbunoobj.hxx>
+#endif
+
+#include "sbintern.hxx"
+
+#ifndef _BASIC_TTRESHLP_HXX
+#include <basic/ttstrhlp.hxx>
+#endif
+#include <basic/mybasic.hxx>
+#include "basic.hrc"
+#include "appbased.hxx"
+
+#include "status.hxx"
+#include "basic.hrc"
+
+#include "object.hxx"
+
+#include "processw.hxx"
+#include "basrid.hxx"
+
+TYPEINIT1(MyBasic,StarBASIC)
+
+class MyFactory : public SbxFactory
+{
+public:
+ virtual SbxBase* Create( UINT16 nSbxId, UINT32 = SBXCR_SBX );
+};
+
+static SampleObjectFac aFac1;
+static MyFactory aFac2;
+static ProcessFactory aProcessFac;
+static short nInst = 0;
+
+SbxBase* MyFactory::Create( UINT16 nSbxId, UINT32 nCr )
+{
+ if( nCr == SBXCR_TEST && nSbxId == SBXID_MYBASIC )
+ return new MyBasic;
+ else
+ return NULL;
+}
+
+MyBasic::MyBasic() : StarBASIC()
+{
+ nError = 0;
+ if( !nInst++ )
+ {
+ AddFactory( &aFac1 );
+ AddFactory( &aFac2 );
+ AddFactory( &aProcessFac );
+ }
+ SbxVariable* p = new SbxCollection( CUniString("MyColl") );
+ p->SetName( CUniString("Objects") );
+ Insert( p );
+
+ // AB-Uno-Test
+#ifdef unotest
+ // Get Uno-Service-Manager and Reflection Service
+ createAndSetDefaultServiceManager(); // done later
+
+ // Get Uno-Test-Object
+ UsrAny aObjAny = getIntrospectionTestObject();
+
+ // Box object into SbUnoObject
+ String aName( "UnoObject" );
+ SbxObjectRef xSbUnoObj = GetSbUnoObject( aName, aObjAny );
+ //SbxObjectRef xSbUnoObj = new SbUnoObject( aName, aObjAny );
+ Insert( (SbxObject*)xSbUnoObj );
+#endif
+
+ pTestObject = NULL;
+}
+
+Link MyBasic::GenLogHdl()
+{
+ return LINK( GetpApp()->GetAppWindow(), BasicFrame, Log );
+}
+
+Link MyBasic::GenWinInfoHdl()
+{
+ return LINK( GetpApp()->GetAppWindow(), BasicFrame, WinInfo );
+}
+
+Link MyBasic::GenModuleWinExistsHdl()
+{
+ return LINK( GetpApp()->GetAppWindow(), BasicFrame, ModuleWinExists );
+}
+
+Link MyBasic::GenWriteStringHdl()
+{
+ return LINK( GetpApp()->GetAppWindow(), BasicFrame, WriteString );
+}
+
+void MyBasic::StartListeningTT( SfxBroadcaster &rBroadcaster )
+{
+ ((BasicFrame*)GetpApp()->GetAppWindow())->StartListening( rBroadcaster );
+}
+
+void MyBasic::SetCompileModule( SbModule *pMod )
+{
+ GetSbData()->pCompMod = pMod;
+}
+
+SbModule *MyBasic::GetCompileModule()
+{
+ return GetSbData()->pCompMod;
+}
+
+String MyBasic::GenRealString( const String &aResString )
+{
+ return ((BasicFrame*)GetpApp()->GetAppWindow())->GenRealString( aResString );
+}
+
+void MyBasic::LoadIniFile()
+{
+}
+
+SbTextType MyBasic::GetSymbolType( const String &rSymbol, BOOL bWasTTControl )
+{
+ (void) rSymbol; /* avoid warning about unused parameter */
+ (void) bWasTTControl; /* avoid warning about unused parameter */
+ return SB_SYMBOL; // Everything here is of type SB_SYMBOL and continues to be so
+}
+
+
+MyBasic::~MyBasic()
+{
+ aErrors.Clear();
+ if( !--nInst )
+ {
+ RemoveFactory( &aFac1 );
+ RemoveFactory( &aFac2 );
+ RemoveFactory( &aProcessFac );
+ }
+}
+
+void MyBasic::Reset()
+{
+ aErrors.Clear();
+ nError = 0;
+}
+
+BOOL MyBasic::Compile( SbModule* p )
+{
+ Reset();
+ return StarBASIC::Compile( p );
+}
+
+BOOL MyBasic::ErrorHdl()
+{
+ AppBasEd* pWin = aBasicApp.pFrame->FindModuleWin( GetActiveModule()->GetName() );
+ if( !pWin )
+ { // open a window
+ pWin = aBasicApp.pFrame->CreateModuleWin( GetActiveModule() );
+ }
+ else
+ pWin->ToTop();
+ if( IsCompilerError() )
+ {
+ aErrors.Insert(
+ new BasicError
+ ( pWin,
+ 0, StarBASIC::GetErrorText(), GetLine(), GetCol1(), GetCol2() ),
+ LIST_APPEND );
+ nError++;
+ return BOOL( nError < 20 ); // Cancel after 20 errors
+ }
+ else
+ {
+ ReportRuntimeError( pWin );
+ return FALSE;
+ }
+}
+
+void MyBasic::ReportRuntimeError( AppBasEd *pEditWin )
+{
+ String nErrorText;
+ nErrorText = GetSpechialErrorText();
+
+ if ( pEditWin ) // just in case the focus is not right
+ pEditWin->ToTop();
+
+ BasicError( pEditWin,
+ GetVBErrorCode( GetErrorCode() ), nErrorText, GetLine(),
+ GetCol1(), GetCol2() ).Show();
+}
+
+void MyBasic::DebugFindNoErrors( BOOL bDebugFindNoErrors )
+{
+ (void) bDebugFindNoErrors; /* avoid warning about unused parameter */
+}
+
+const String MyBasic::GetSpechialErrorText()
+{
+ return GetErrorText();
+}
+
+USHORT MyBasic::BreakHdl()
+{
+ SbModule* pMod = GetActiveModule();
+ if( pMod )
+ {
+ AppBasEd* pWin = aBasicApp.pFrame->FindModuleWin( pMod->GetName() );
+ if( !pWin )
+ { // open a window
+ pWin = aBasicApp.pFrame->CreateModuleWin( pMod );
+ }
+ else
+ pWin->ToTop();
+ pWin->Highlight( GetLine(), GetCol1(), GetCol2() );
+ }
+
+ if( IsBreak() ) // If Breakpoint (or "Run to Cursor")
+ {
+// if ( GetActiveModule()->IsBP(GetLine()) )
+// GetActiveModule()->ClearBP(GetLine());
+ return aBasicApp.pFrame->BreakHandler();
+ }
+ else
+ {
+ return aBasicApp.pFrame->BreakHandler();
+ }
+}
+
+/***************************************************************************
+|*
+|* class BasicError
+|*
+***************************************************************************/
+
+BasicError::BasicError
+ ( AppBasEd* w, USHORT nE, const String& r, USHORT nL, USHORT nC1, USHORT nC2 )
+ : aText( SttResId( IDS_ERROR1 ) )
+{
+ pWin = w;
+ nLine = nL;
+ nCol1 = nC1;
+ nCol2 = nC2;
+ if( nE )
+ {
+ aText += String::CreateFromInt32( nE );
+ aText.AppendAscii(": ");
+ aText += r;
+ }
+ else
+ aText = r;
+}
+
+// This is a sample how to build the error information
+// to highlight a statement
+void BasicError::Show()
+{
+ if( pWin && aBasicApp.pFrame->IsWinValid( pWin ) )
+ {
+ pWin->Highlight( nLine, nCol1, nCol2 );
+ aBasicApp.pFrame->pStatus->Message( aText );
+ }
+ else
+ MessBox( aBasicApp.pFrame, WB_OK, aBasicApp.pFrame->GetText(),
+ aText ).Execute();
+}
+
+
diff --git a/basic/source/app/printer.cxx b/basic/source/app/printer.cxx
new file mode 100644
index 000000000000..0ad562970fe6
--- /dev/null
+++ b/basic/source/app/printer.cxx
@@ -0,0 +1,122 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+
+#ifndef _PRINT_HXX //autogen
+#include <vcl/print.hxx>
+#endif
+#ifndef _DIALOG_HXX //autogen
+#include <vcl/dialog.hxx>
+#endif
+#ifndef _FIXED_HXX //autogen
+#include <vcl/fixed.hxx>
+#endif
+#ifndef _BUTTON_HXX //autogen
+#include <vcl/button.hxx>
+#endif
+#ifndef _BASIC_TTRESHLP_HXX
+#include <basic/ttstrhlp.hxx>
+#endif
+
+#include <algorithm>
+
+#include "app.hxx"
+#include "printer.hxx"
+#include "basic.hrc"
+#include "resids.hrc"
+#include "basrid.hxx"
+
+class PrintingDialog : public ModelessDialog {
+ String aName;
+ FixedText aText;
+ CancelButton aCancel;
+public:
+ PrintingDialog( Window*, BasicPrinter*, ResId&, String& );
+ void ChangeMessage( short );
+};
+
+BasicPrinter::BasicPrinter() : mpPrinter( new Printer() )
+{
+ nPage = 0; nLine = 9999;
+ mpPrinter->SetMapMode( MapMode( MAP_POINT ) );
+ Size s( mpPrinter->GetOutputSize() );
+ // Use 10 point font
+ Font aFont( FAMILY_MODERN, Size( 0, 10 ) );
+ aFont.SetPitch( PITCH_FIXED );
+ mpPrinter->SetFont( aFont );
+ // Output: 6 Lines/Inch = 12 Point
+ nLines = (short) s.Height() / 12;
+ nYoff = 12;
+}
+
+void BasicPrinter::Header()
+{
+ if( nPage ) mpListener->EndPage();
+ nPage++;
+ mpListener->StartPage();
+ String aHdr;
+ String aPage( SttResId( IDS_PAGE ) );
+ aPage.Append( String::CreateFromInt32(nPage) );
+ aHdr = aFile.Copy( 0, 80 - aPage.Len() );
+ aHdr.Expand( 80 - aPage.Len(), ' ' );
+ aHdr += aPage;
+ mpPrinter->DrawText( Point( 0, 0 ), aHdr );
+ nLine = 2;
+}
+
+void BasicPrinter::Print( const String& rFile, const String& rText, BasicFrame *pFrame )
+{
+ nPage = 0; nLine = 9999;
+ aFile = rFile;
+ // Disable PRINT-Menu
+ MenuBar* pBar = pFrame->GetMenuBar();
+ Menu* pFileMenu = pBar->GetPopupMenu( RID_APPFILE );
+ pFileMenu->EnableItem( RID_FILEPRINT, FALSE );
+
+ mpListener.reset( new vcl::OldStylePrintAdaptor( mpPrinter ) );
+ mpListener->StartPage();
+ xub_StrLen nDone=0;
+ while( nDone < rText.Len() )
+ {
+ if( nLine >= nLines ) Header();
+ xub_StrLen nLineEnd = std::min( rText.Search( '\n', nDone ), rText.Search( '\r', nDone ) );
+ mpPrinter->DrawText( Point( 0, nLine * nYoff ), rText, nDone, nLineEnd-nDone-1 );
+ nDone = nLineEnd;
+ if( nDone <= rText.Len() && rText.GetChar(nDone) == '\r' ) nDone++;
+ if( nDone <= rText.Len() && rText.GetChar(nDone) == '\n' ) nDone++;
+ nLine++;
+ }
+ mpListener->EndPage();
+
+ Printer::PrintJob( mpListener, mpPrinter->GetJobSetup() );
+ nPage = 1;
+ pFileMenu->EnableItem( RID_FILEPRINT, TRUE );
+}
+
+
diff --git a/basic/source/app/printer.hxx b/basic/source/app/printer.hxx
new file mode 100644
index 000000000000..505835278234
--- /dev/null
+++ b/basic/source/app/printer.hxx
@@ -0,0 +1,52 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BASICPRN_HXX
+#define _BASICPRN_HXX
+
+#include "vcl/print.hxx"
+#include "vcl/oldprintadaptor.hxx"
+
+class BasicPrinter
+{
+ boost::shared_ptr<Printer> mpPrinter;
+ boost::shared_ptr<vcl::OldStylePrintAdaptor> mpListener;
+
+ short nLine; // aktuelle Zeile
+ short nPage; // aktuelle Seite
+ short nLines; // Zeilen pro Seite
+ short nYoff; // Zeilenabstand in Points
+ String aFile; // Dateiname
+
+ void Header(); // Seitenkopf drucken
+ void StartPage();
+public:
+ BasicPrinter();
+ void Print( const String& rFile, const String& rText, BasicFrame *pFrame );
+};
+
+#endif
diff --git a/basic/source/app/process.cxx b/basic/source/app/process.cxx
new file mode 100644
index 000000000000..c37af05ac8da
--- /dev/null
+++ b/basic/source/app/process.cxx
@@ -0,0 +1,229 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+
+
+#ifdef WNT
+#include <tools/prewin.h>
+#include "winbase.h"
+#include <tools/postwin.h>
+#endif
+#include <tools/errcode.hxx>
+#include <vos/process.hxx>
+#include <basic/sbxcore.hxx>
+#include <tools/string.hxx>
+#include <osl/file.hxx>
+
+#ifndef _BASIC_TTRESHLP_HXX
+#include <basic/ttstrhlp.hxx>
+#endif
+
+//#ifndef _BYTE_STRING_LIST
+//DECLARE_LIST( ByteStringList, ByteString * );
+//#define _BYTE_STRING_LIST
+//#endif
+
+#include <basic/process.hxx>
+
+Process::Process()
+: pArgumentList( NULL )
+, pEnvList( NULL )
+, pProcess( NULL )
+, bWasGPF( FALSE )
+, bHasBeenStarted( FALSE )
+{
+}
+
+Process::~Process()
+{
+// delete pArgumentList;
+// delete pEnvList;
+ delete pProcess;
+}
+
+
+BOOL Process::ImplIsRunning()
+{
+ if ( pProcess && bHasBeenStarted )
+ {
+ NAMESPACE_VOS(OProcess::TProcessInfo) aProcessInfo;
+ pProcess->getInfo( NAMESPACE_VOS(OProcess::TData_ExitCode), &aProcessInfo );
+ if ( !(aProcessInfo.Fields & NAMESPACE_VOS(OProcess::TData_ExitCode)) )
+ return TRUE;
+ else
+ return FALSE;
+ }
+ else
+ return FALSE;
+}
+
+long Process::ImplGetExitCode()
+{
+ if ( pProcess )
+ {
+ NAMESPACE_VOS(OProcess::TProcessInfo) aProcessInfo;
+ pProcess->getInfo( NAMESPACE_VOS(OProcess::TData_ExitCode), &aProcessInfo );
+ if ( !(aProcessInfo.Fields & NAMESPACE_VOS(OProcess::TData_ExitCode)) )
+ SbxBase::SetError( SbxERR_NO_ACTIVE_OBJECT );
+ return aProcessInfo.Code;
+ }
+ else
+ SbxBase::SetError( SbxERR_NO_ACTIVE_OBJECT );
+ return 0;
+}
+
+
+////////////////////////////////////////////////////////////////////////////
+
+void Process::SetImage( const String &aAppPath, const String &aAppParams, const Environment *pEnv )
+{ // Set image file of executable
+ if ( pProcess && ImplIsRunning() )
+ SbxBase::SetError( SbxERR_NO_ACTIVE_OBJECT );
+ else
+ {
+ delete pArgumentList; pArgumentList = NULL;
+ delete pEnvList; pEnvList = NULL;
+ delete pProcess; pProcess = NULL;
+
+ xub_StrLen i, nCount = aAppParams.GetQuotedTokenCount( CUniString("\"\"" ), ' ' );
+ ::rtl::OUString *pParamList = new ::rtl::OUString[nCount];
+
+ xub_StrLen nParamCount = 0;
+ for ( i = 0 ; i < nCount ; i++ )
+ {
+ ::rtl::OUString aTemp = ::rtl::OUString(aAppParams.GetQuotedToken( i, CUniString("\"\"''" ), ' ' ));
+ if ( aTemp.getLength() )
+ {
+ pParamList[nParamCount] = aTemp;
+ nParamCount++;
+ }
+ }
+ pArgumentList = new NAMESPACE_VOS(OArgumentList)( pParamList, nCount );
+
+
+ ::rtl::OUString *pEnvArray = NULL;
+ if ( pEnv )
+ {
+ pEnvArray = new ::rtl::OUString[pEnv->size()];
+
+ xub_StrLen nEnvCount = 0;
+ Environment::const_iterator aIter = pEnv->begin();
+ while ( aIter != pEnv->end() )
+ {
+ ::rtl::OUString aTemp = ::rtl::OUString( (*aIter).first );
+ aTemp += ::rtl::OUString::createFromAscii( "=" );
+ aTemp += ::rtl::OUString( (*aIter).second );
+ pEnvArray[nEnvCount] = aTemp;
+ nEnvCount++;
+ aIter++;
+ }
+ pEnvList = new NAMESPACE_VOS(OEnvironment)( pEnvArray, nEnvCount );
+ }
+
+ ::rtl::OUString aNormalizedAppPath;
+ osl::FileBase::getFileURLFromSystemPath( ::rtl::OUString(aAppPath), aNormalizedAppPath );
+ pProcess = new NAMESPACE_VOS(OProcess)( aNormalizedAppPath );
+ bHasBeenStarted = FALSE;
+
+ delete [] pParamList;
+ delete [] pEnvArray;
+ }
+}
+
+BOOL Process::Start()
+{ // Start program
+ BOOL bSuccess=FALSE;
+ if ( pProcess && !ImplIsRunning() )
+ {
+ bWasGPF = FALSE;
+#ifdef WNT
+// sal_uInt32 nErrorMode = SetErrorMode(SEM_NOOPENFILEERRORBOX | SEM_NOALIGNMENTFAULTEXCEPT | SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX);
+ sal_uInt32 nErrorMode = SetErrorMode(SEM_NOOPENFILEERRORBOX | SEM_NOALIGNMENTFAULTEXCEPT | SEM_NOGPFAULTERRORBOX);
+ try
+ {
+#endif
+ if ( pEnvList )
+ {
+ bSuccess = pProcess->execute( (NAMESPACE_VOS(OProcess)::TProcessOption)
+ ( NAMESPACE_VOS(OProcess)::TOption_SearchPath
+ /*| NAMESPACE_VOS(OProcess)::TOption_Detached*/
+ /*| NAMESPACE_VOS(OProcess)::TOption_Wait*/ ),
+ *pArgumentList,
+ *pEnvList ) == NAMESPACE_VOS(OProcess)::E_None;
+ }
+ else
+ {
+ bSuccess = pProcess->execute( (NAMESPACE_VOS(OProcess)::TProcessOption)
+ ( NAMESPACE_VOS(OProcess)::TOption_SearchPath
+ /*| NAMESPACE_VOS(OProcess)::TOption_Detached*/
+ /*| NAMESPACE_VOS(OProcess)::TOption_Wait*/ ),
+ *pArgumentList ) == NAMESPACE_VOS(OProcess)::E_None;
+ }
+#ifdef WNT
+ }
+ catch( ... )
+ {
+ bWasGPF = TRUE;
+ // TODO: Output debug message !!
+ }
+ nErrorMode = SetErrorMode(nErrorMode);
+#endif
+ bHasBeenStarted = bSuccess;
+ }
+ else
+ SbxBase::SetError( SbxERR_NO_ACTIVE_OBJECT );
+ return bSuccess;
+}
+
+ULONG Process::GetExitCode()
+{ // ExitCode of program after execution
+ return ImplGetExitCode();
+}
+
+BOOL Process::IsRunning()
+{
+ return ImplIsRunning();
+}
+
+BOOL Process::WasGPF()
+{ // Did the process fail?
+#ifdef WNT
+ return ImplGetExitCode() == 3221225477;
+#else
+ return bWasGPF;
+#endif
+}
+
+BOOL Process::Terminate()
+{
+ if ( ImplIsRunning() )
+ return pProcess->terminate() == vos::OProcess::E_None;
+ return TRUE;
+}
+
diff --git a/basic/source/app/processw.cxx b/basic/source/app/processw.cxx
new file mode 100644
index 000000000000..291ea9db33b7
--- /dev/null
+++ b/basic/source/app/processw.cxx
@@ -0,0 +1,282 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+
+
+#include <tools/errcode.hxx>
+#include <basic/sbxobj.hxx>
+#include <basic/sbx.hxx>
+#ifndef __SBX_SBXVARIABLE_HXX //autogen
+#include <basic/sbxvar.hxx>
+#endif
+
+//#include <osl/thread.h>
+#ifndef _BASIC_TTRESHLP_HXX
+#include <basic/ttstrhlp.hxx>
+#endif
+
+#include "processw.hxx"
+
+// Process has the following elements:
+// 1) Properties:
+// none
+// 2) Methods:
+// SetImage( Filename )
+// BOOL Start
+// USHORT GetExitCode
+// BOOL IsRunning
+// BOOL WasGPF
+
+
+// This implementation is a sample for a table driven version that
+// can contain lots of elements. The elements are taken into the object
+// when they are needed.
+
+// The nArgs field of a table entry is scrambled as follows:
+#define _ARGSMASK 0x00FF // Up to 255 arguments
+#define _RWMASK 0x0F00 // Mask for R/W-Bits
+#define _TYPEMASK 0xF000 // Mask for entry type
+
+#define _READ 0x0100 // can be read
+#define _BWRITE 0x0200 // can be used as Lvaluen
+#define _LVALUE _BWRITE
+#define _READWRITE 0x0300 // can read and written
+#define _OPT 0x0400 // TRUE: optional parameter
+#define _METHOD 0x1000 // Mask-Bit for a method
+#define _PROPERTY 0x2000 // Mask-Bit for a property
+#define _COLL 0x4000 // Mask-Bit for a collection
+
+// Combination of the bits above:
+#define _FUNCTION 0x1100 // Mask for a Function
+#define _LFUNCTION 0x1300 // Mask for a Function, that can be uses as Lvalue
+#define _ROPROP 0x2100 // Mask Read Only-Property
+#define _WOPROP 0x2200 // Mask Write Only-Property
+#define _RWPROP 0x2300 // Mask Read/Write-Property
+#define _COLLPROP 0x4100 // Mask Read-Collection-Element
+
+#define COLLNAME "Elements" // Name of the collection, hard coded
+
+
+ProcessWrapper::Methods ProcessWrapper::aProcessMethods[] = {
+// Imagefile of the Executable
+{ "SetImage", SbxEMPTY, &ProcessWrapper::PSetImage, 1 | _FUNCTION },
+ // Two Named Parameter
+ { "Filename", SbxSTRING, NULL, 0 },
+ { "Params", SbxSTRING, NULL, _OPT },
+// Program is started
+{ "Start", SbxBOOL, &ProcessWrapper::PStart, 0 | _FUNCTION },
+// ExitCode of the program
+{ "GetExitCode", SbxULONG, &ProcessWrapper::PGetExitCode, 0 | _FUNCTION },
+// Program is running
+{ "IsRunning", SbxBOOL, &ProcessWrapper::PIsRunning, 0 | _FUNCTION },
+// Program has faulted with GPF etc.
+{ "WasGPF", SbxBOOL, &ProcessWrapper::PWasGPF, 0 | _FUNCTION },
+
+{ NULL, SbxNULL, NULL, -1 }}; // End of table
+
+
+ProcessWrapper::ProcessWrapper() : SbxObject( CUniString("Process") )
+{
+ pProcess = new Process();
+ SetName( CUniString("Process") );
+ pMethods = &aProcessMethods[0];
+}
+
+ProcessWrapper::~ProcessWrapper()
+{
+ delete pProcess;
+}
+
+// Search for an element:
+// Linear search through the method table until an appropriate one
+// can be found.
+// If the the method/property cannot be found, NULL is return
+// without an error code, so that we can ask the whole
+// chain of objects for the method/property.
+SbxVariable* ProcessWrapper::Find( const String& rName, SbxClassType t )
+{
+ // Is the element already available?
+ SbxVariable* pRes = SbxObject::Find( rName, t );
+ if( !pRes && t != SbxCLASS_OBJECT )
+ {
+ // otherwise search
+ Methods* p = pMethods;
+ short nIndex = 0;
+ BOOL bFound = FALSE;
+ while( p->nArgs != -1 )
+ {
+ if( rName.EqualsIgnoreCaseAscii( p->pName ) )
+ {
+ bFound = TRUE; break;
+ }
+ nIndex += ( p->nArgs & _ARGSMASK ) + 1;
+ p = pMethods + nIndex;
+ }
+ if( bFound )
+ {
+ // isolate Args fields:
+ short nAccess = ( p->nArgs & _RWMASK ) >> 8;
+ short nType = ( p->nArgs & _TYPEMASK );
+ String aMethodName( p->pName, RTL_TEXTENCODING_ASCII_US );
+ SbxClassType eCT = SbxCLASS_OBJECT;
+ if( nType & _PROPERTY )
+ eCT = SbxCLASS_PROPERTY;
+ else if( nType & _METHOD )
+ eCT = SbxCLASS_METHOD;
+ pRes = Make( aMethodName, eCT, p->eType );
+ // We set array index + 1 because there are other
+ // default properties that must be activated
+ pRes->SetUserData( nIndex + 1 );
+ pRes->SetFlags( nAccess );
+ }
+ }
+ return pRes;
+}
+
+// Activation of an element or request for an info block
+void ProcessWrapper::SFX_NOTIFY( SfxBroadcaster& rBC, const TypeId& rBCT,
+ const SfxHint& rHint, const TypeId& rHT )
+{
+ const SbxHint* pHint = PTR_CAST(SbxHint,&rHint);
+ if( pHint )
+ {
+ SbxVariable* pVar = pHint->GetVar();
+ SbxArray* pNotifyPar = pVar->GetParameters();
+ USHORT nIndex = (USHORT) pVar->GetUserData();
+ // No index: put through
+ if( nIndex )
+ {
+ ULONG t = pHint->GetId();
+ if( t == SBX_HINT_INFOWANTED )
+ pVar->SetInfo( GetInfo( (short) pVar->GetUserData() ) );
+ else
+ {
+ BOOL bWrite = FALSE;
+ if( t == SBX_HINT_DATACHANGED )
+ bWrite = TRUE;
+ if( t == SBX_HINT_DATAWANTED || bWrite )
+ {
+ // Parameter-Test for methods:
+ USHORT nPar = pMethods[ --nIndex ].nArgs & 0x00FF;
+ // Element 0 is the return value
+ if( ( !pNotifyPar && nPar )
+ || ( pNotifyPar && pNotifyPar->Count() < nPar+1 ) )
+ SetError( SbxERR_WRONG_ARGS );
+ // ready for call
+ else
+ {
+ (this->*(pMethods[ nIndex ].pFunc))( pVar, pNotifyPar, bWrite );
+ }
+ }
+ }
+ }
+ SbxObject::SFX_NOTIFY( rBC, rBCT, rHint, rHT );
+ }
+}
+
+// Building the info struct for single elements
+SbxInfo* ProcessWrapper::GetInfo( short nIdx )
+{
+ Methods* p = &pMethods[ nIdx ];
+ // Wenn mal eine Hilfedatei zur Verfuegung steht:
+ // SbxInfo* pResultInfo = new SbxInfo( Hilfedateiname, p->nHelpId );
+ SbxInfo* pResultInfo = new SbxInfo;
+ short nPar = p->nArgs & _ARGSMASK;
+ for( short i = 0; i < nPar; i++ )
+ {
+ p++;
+ String aMethodName( p->pName, RTL_TEXTENCODING_ASCII_US );
+ USHORT nInfoFlags = ( p->nArgs >> 8 ) & 0x03;
+ if( p->nArgs & _OPT )
+ nInfoFlags |= SBX_OPTIONAL;
+ pResultInfo->AddParam( aMethodName, p->eType, nInfoFlags );
+ }
+ return pResultInfo;
+}
+
+
+////////////////////////////////////////////////////////////////////////////
+
+
+////////////////////////////////////////////////////////////////////////////
+
+// Properties and methods save the return value in argv[0] (Get, bPut = FALSE)
+// and store the value from argv[0] (Put, bPut = TRUE)
+
+void ProcessWrapper::PSetImage( SbxVariable* pVar, SbxArray* pMethodePar, BOOL bWriteIt )
+{ // Imagefile of the executable
+ (void) pVar; /* avoid warning about unused parameter */
+ (void) bWriteIt; /* avoid warning about unused parameter */
+ if ( pMethodePar->Count() >= 2 )
+ pProcess->SetImage(pMethodePar->Get( 1 )->GetString(), pMethodePar->Get( 2 )->GetString() );
+ else
+ pProcess->SetImage(pMethodePar->Get( 1 )->GetString(), String() );
+}
+
+void ProcessWrapper::PStart( SbxVariable* pVar, SbxArray* pMethodePar, BOOL bWriteIt )
+{ // Program is started
+ (void) pMethodePar; /* avoid warning about unused parameter */
+ (void) bWriteIt; /* avoid warning about unused parameter */
+ pVar->PutBool( pProcess->Start() );
+}
+
+void ProcessWrapper::PGetExitCode( SbxVariable* pVar, SbxArray* pMethodePar, BOOL bWriteIt )
+{ // ExitCode of the program after it was finished
+ (void) pMethodePar; /* avoid warning about unused parameter */
+ (void) bWriteIt; /* avoid warning about unused parameter */
+ pVar->PutULong( pProcess->GetExitCode() );
+}
+
+void ProcessWrapper::PIsRunning( SbxVariable* pVar, SbxArray* pMethodePar, BOOL bWriteIt )
+{ // Program is still running
+ (void) pMethodePar; /* avoid warning about unused parameter */
+ (void) bWriteIt; /* avoid warning about unused parameter */
+ pVar->PutBool( pProcess->IsRunning() );
+}
+
+void ProcessWrapper::PWasGPF( SbxVariable* pVar, SbxArray* pMethodePar, BOOL bWriteIt )
+{ // Program faulted with GPF etc.
+ (void) pMethodePar; /* avoid warning about unused parameter */
+ (void) bWriteIt; /* avoid warning about unused parameter */
+ pVar->PutBool( pProcess->WasGPF() );
+}
+
+
+
+
+
+
+// The factory creates our object
+SbxObject* ProcessFactory::CreateObject( const String& rClass )
+{
+ if( rClass.CompareIgnoreCaseToAscii( "Process" ) == COMPARE_EQUAL )
+ return new ProcessWrapper();
+ return NULL;
+}
+
diff --git a/basic/source/app/processw.hxx b/basic/source/app/processw.hxx
new file mode 100644
index 000000000000..e04396e20809
--- /dev/null
+++ b/basic/source/app/processw.hxx
@@ -0,0 +1,90 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _PROCESSW_HXX
+#define _PROCESSW_HXX
+
+#include <basic/sbxfac.hxx>
+#ifndef __SBX_SBXVARIABLE_HXX //autogen
+#include <basic/sbxvar.hxx>
+#endif
+#include <basic/sbxobj.hxx>
+#include <basic/process.hxx>
+
+class ProcessWrapper : public SbxObject
+{
+using SbxVariable::GetInfo;
+// Definition of a table entry. This is done here because
+// through this methods and property can declared as private.
+#if defined ( ICC ) || defined ( HPUX ) || defined ( C50 ) || defined ( C52 )
+public:
+#endif
+ typedef void( ProcessWrapper::*pMeth )
+ ( SbxVariable* pThis, SbxArray* pArgs, BOOL bWrite );
+#if defined ( ICC ) || defined ( HPUX )
+private:
+#endif
+
+ struct Methods {
+ const char* pName; // Name of the entry
+ SbxDataType eType; // Data type
+ pMeth pFunc; // Function Pointer
+ short nArgs; // Arguments and flags
+ };
+ static Methods aProcessMethods[]; // Method table
+ Methods *pMethods; // Current method table
+
+ void PSetImage( SbxVariable* pVar, SbxArray* pPar, BOOL bWrite );
+ void PStart( SbxVariable* pVar, SbxArray* pPar, BOOL bWrite );
+ void PGetExitCode( SbxVariable* pVar, SbxArray* pPar, BOOL bWrite );
+ void PIsRunning( SbxVariable* pVar, SbxArray* pPar, BOOL bWrite );
+ void PWasGPF( SbxVariable* pVar, SbxArray* pPar, BOOL bWrite );
+
+ // Internal members and methods
+ Process *pProcess;
+
+ // Fill info block
+ SbxInfo* GetInfo( short nIdx );
+
+ // Broadcaster Notification
+ virtual void SFX_NOTIFY( SfxBroadcaster& rBC, const TypeId& rBCType,
+ const SfxHint& rHint, const TypeId& rHintType );
+public:
+ ProcessWrapper();
+ ~ProcessWrapper();
+ // Search for an element
+ virtual SbxVariable* Find( const String&, SbxClassType );
+};
+
+// Factory
+class ProcessFactory : public SbxFactory
+{
+public:
+ virtual SbxObject* CreateObject( const String& );
+};
+
+#endif
diff --git a/basic/source/app/resids.hrc b/basic/source/app/resids.hrc
new file mode 100644
index 000000000000..5d3fbb098dde
--- /dev/null
+++ b/basic/source/app/resids.hrc
@@ -0,0 +1,158 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _RESIDS_HRC
+#define _RESIDS_HRC
+
+#define RID_OK 1
+#define RID_CANCEL 2
+#define RID_FILENAME 3
+#define RID_PATHNAME 4
+#define RID_FILELIST 5
+#define RID_DIRSLIST 6
+#define RID_FIND 7
+#define RID_REPLACE 8
+//#define RID_ICON 9
+//#define RID_EDITFIELD 10
+#define RID_TEXT 11
+//#define RID_FRAME1 12
+//#define RID_FRAME2 13
+#define RID_VERSIONSTRING 14
+#define RID_FIXEDTEXT1 15
+#define RID_FIXEDTEXT2 16
+
+
+// OptionsDialog
+#define RES_TC_OPTIONS 20
+
+// GenericOptions
+#define RID_TP_GEN 30
+#define RID_FL_AREA 31
+#define RID_CB_AREA 32
+#define RID_PB_NEW_AREA 33
+#define RID_PD_DEL_AREA 34
+#define RID_FL_VALUE 35
+#define RID_CB_VALUE 36
+#define RID_PB_SELECT_FILE 37
+#define RID_PB_NEW_VALUE 38
+#define RID_PB_DEL_VALUE 39
+
+// ProfileOptions
+#define RID_TP_PRO 40
+#define RID_FL_PROFILE 41
+#define RID_CB_PROFILE 42
+#define RID_PB_NEW_PROFILE 43
+#define RID_PD_DEL_PROFILE 44
+#define FL_DIRECTORIES 45
+#define LOG_TEXT 46
+#define BASIS_TEXT 47
+#define HID_CHECK 48
+#define LOG_NAME 49
+#define BASIS_NAME 50
+#define HID_NAME 51
+#define LOG_SET 52
+#define BASIS_SET 53
+#define HID_SET 54
+#define CB_AUTORELOAD 55
+#define CB_AUTOSAVE 56
+#define CB_STOPONSYNTAXERRORS 57
+
+// Crashreporter Options
+#define RID_TP_CRA 50
+#define FL_CRASHREPORT 51
+#define CB_USEPROXY 52
+#define FT_CRHOST 53
+#define ED_CRHOST 54
+#define FT_CRPORT 55
+#define NF_CRPORT 56
+#define CB_ALLOWCONTACT 57
+#define FT_EMAIL 58
+#define ED_EMAIL 59
+
+// MiscOptions
+#define RID_TP_MIS 60
+#define FL_COMMUNICATION 61
+#define FT_HOST 62
+#define ED_HOST 63
+#define FT_TTPORT 64
+#define NF_TTPORT 65
+#define FT_UNOPORT 66
+#define NF_UNOPORT 67
+#define FL_OTHER 68
+#define TIMEOUT_TEXT 69
+#define SERVER_TIMEOUT 70
+#define FT_LRU 71
+#define TF_MAX_LRU 72
+#define FT_PROGDIR 73
+#define ED_PROGDIR 74
+#define PB_PROGDIR 75
+
+
+// Font Settings
+#define RID_TP_FON 70
+#define FT_FONTNAME 71
+#define CB_FONTNAME 72
+#define FT_FONTSTYLE 73
+#define CB_FONTSTYLE 74
+#define FT_FONTSIZE 75
+#define MB_FONTSIZE 76
+#define FT_PREVIEW 77
+
+// DisplayHId
+#define RID_TB_CONF 80
+#define RID_FT_CONTROLS 81
+#define RID_MLB_CONTROLS 82
+#define RID_FT_SLOTS 83
+#define RID_MLB_SLOTS 84
+#define RID_PB_KOPIEREN 85
+#define RID_PB_BENENNEN 86
+#define RID_PB_SELECTALL 87
+#define RID_OK_CLOSE 88
+
+
+// BreakpointWindow
+#define IMGID_BRKENABLED 30838
+#define IMGID_BRKDISABLED 30839
+#define IMGID_STEPMARKER 30840
+#define IMGID_ERRORMARKER 30841
+
+
+// Edit Variables
+#define RID_FT_NAME 100
+#define RID_FT_CONTENT 101
+#define RID_FT_NEW_CONTENT 102
+#define RID_FT_NAME_VALUE 103
+#define RID_FT_CONTENT_VALUE 104
+
+#define RID_RB_NEW_BOOL_T 105
+#define RID_RB_NEW_BOOL_F 106
+#define RID_NF_NEW_INTEGER 107
+#define RID_NF_NEW_LONG 108
+#define RID_ED_NEW_STRING 109
+
+#endif
+
diff --git a/basic/source/app/status.cxx b/basic/source/app/status.cxx
new file mode 100644
index 000000000000..604fdedfc133
--- /dev/null
+++ b/basic/source/app/status.cxx
@@ -0,0 +1,125 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+
+#include "app.hxx"
+#include "basic.hrc"
+#include "appwin.hxx"
+#include "status.hxx"
+
+#include <vcl/decoview.hxx>
+
+StatusLine::StatusLine( BasicFrame* p )
+: TaskBar( p )
+, pFrame( p )
+{
+ // initialize TaskToolBox
+ TaskToolBox* pTempTaskToolBox = GetTaskToolBox();
+ pTempTaskToolBox->SetActivateTaskHdl( LINK( this, StatusLine, ActivateTask ) );
+
+ // initialize TaskStatusBar
+ TaskStatusBar* pTempStatusBar = GetStatusBar();
+ long nCharWidth = GetTextWidth( '0' ); // We state: All numbers has the same width
+ pTempStatusBar->InsertItem( ST_MESSAGE, GetTextWidth( 'X' ) * 20, SIB_LEFT | SIB_IN | SIB_AUTOSIZE );
+ pTempStatusBar->InsertItem( ST_LINE, 5*nCharWidth );
+ pTempStatusBar->InsertItem( ST_PROF, GetTextWidth( 'X' ) * 10 );
+ pTempStatusBar->InsertStatusField();
+
+ Show();
+}
+
+void StatusLine::Message( const String& s )
+{
+ GetStatusBar()->SetItemText( ST_MESSAGE, s );
+}
+
+void StatusLine::Pos( const String& s )
+{
+ GetStatusBar()->SetItemText( ST_LINE, s );
+}
+
+void StatusLine::SetProfileName( const String& s )
+{
+ GetStatusBar()->SetItemText( ST_PROF, s );
+}
+
+
+IMPL_LINK( StatusLine, ActivateTask, TaskToolBox*, pTTB )
+{
+ USHORT nFirstWinPos=0;
+ MenuBar* pMenu = pFrame->GetMenuBar();
+ PopupMenu* pWinMenu = pMenu->GetPopupMenu( RID_APPWINDOW );
+
+ while ( pWinMenu->GetItemId( nFirstWinPos ) < RID_WIN_FILE1 && nFirstWinPos < pWinMenu->GetItemCount() )
+ nFirstWinPos++;
+
+ nFirstWinPos += pTTB->GetItemPos( pTTB->GetCurItemId() ) / 2;
+
+ USHORT x;
+ x = pTTB->GetItemPos( pTTB->GetCurItemId() );
+ x = pWinMenu->GetItemId( nFirstWinPos );
+ x = pWinMenu->GetItemCount();
+ AppWin* pWin = pFrame->FindWin( pWinMenu->GetItemText( pWinMenu->GetItemId( nFirstWinPos ) ).EraseAllChars( L'~' ) );
+ if ( pWin )
+ {
+ pWin->Minimize( FALSE );
+ pWin->ToTop();
+ }
+ return 0;
+}
+
+void StatusLine::LoadTaskToolBox()
+{
+ USHORT nFirstWinPos=0;
+ MenuBar* pMenu = pFrame->GetMenuBar();
+ PopupMenu* pWinMenu = pMenu->GetPopupMenu( RID_APPWINDOW );
+
+ while ( pWinMenu->GetItemId( nFirstWinPos ) < RID_WIN_FILE1 && nFirstWinPos < pWinMenu->GetItemCount() )
+ nFirstWinPos++;
+
+ TaskToolBox* pTaskToolBox = GetTaskToolBox();
+
+ pTaskToolBox->StartUpdateTask();
+
+ while ( nFirstWinPos < pWinMenu->GetItemCount() )
+ { // There are windows
+ Window* pWin = pFrame->FindWin( pWinMenu->GetItemId( nFirstWinPos ) );
+
+ if ( pWin )
+ pTaskToolBox->UpdateTask( Image(), pWin->GetText(), pWin == pFrame->pList->Last() && !( pFrame->pList->Last()->GetWinState() & TT_WIN_STATE_HIDE ) );
+
+ nFirstWinPos++;
+ }
+
+ pTaskToolBox->EndUpdateTask();
+ Resize();
+ Invalidate();
+}
+
+
diff --git a/basic/source/app/status.hxx b/basic/source/app/status.hxx
new file mode 100644
index 000000000000..fd9ab033009e
--- /dev/null
+++ b/basic/source/app/status.hxx
@@ -0,0 +1,54 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BASICSTATUS_HXX
+#define _BASICSTATUS_HXX
+
+#include <svtools/taskbar.hxx>
+#include <vcl/status.hxx>
+
+#define ST_MESSAGE 1
+#define ST_LINE 2
+#define ST_PROF 3
+
+class BasicFrame;
+
+class StatusLine : public TaskBar
+{
+protected:
+ BasicFrame* pFrame;
+ DECL_LINK( ActivateTask, TaskToolBox* );
+
+public:
+ StatusLine( BasicFrame* );
+ void Message( const String& ); // Show text
+ void Pos( const String& s ); // Show text position
+ void SetProfileName( const String& s ); // Current Profile
+ void LoadTaskToolBox();
+};
+
+#endif
diff --git a/basic/source/app/svtmsg.src b/basic/source/app/svtmsg.src
new file mode 100644
index 000000000000..89686ebfc0ee
--- /dev/null
+++ b/basic/source/app/svtmsg.src
@@ -0,0 +1,339 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#include "svtmsg.hrc"
+
+
+// Hier sind die Messages aus dem Verzeichnis /basic/source/app enhalten
+
+
+///////////////////////////////
+// Fehlermeldungen, die in das Resultfile gelangen.
+// *********************
+// *** !!ACHTUNG!! ***
+// *********************
+// Die Nummern drfen sich NIE! ndern,
+// da sie in den Resultfiles gespeichert sind, und bei erneutem Anzeigen
+// statdessen die entsprechenden neuen oder garkeine Strings angzeigt werden.
+///////////////////////////////
+String S_GPF_ABORT
+{
+ Text[ en-US ] = "Program aborted with GPF";
+};
+String S_APP_SHUTDOWN
+{
+ Text[ en-US ] = "Application has been shut down";
+};
+String S_SID_EXECUTE_FAILED_NO_DISPATCHER
+{
+ Text[ en-US ] = "Slot ID cannot be executed. No ActiveDispatcher";
+};
+String S_SID_EXECUTE_FAILED
+{
+ Text[ en-US ] = "Slot ID could not be executed";
+};
+String S_UNO_PROPERTY_NITIALIZE_FAILED
+{
+ Text[ en-US ] = "UnoSlot: Properties could not be initialized";
+};
+String S_RESETAPPLICATION_FAILED_COMPLEX
+{
+ Text[ en-US ] = "ResetApplication failed: too complex";
+};
+String S_RESETAPPLICATION_FAILED_UNKNOWN
+{
+ Text[ en-US ] = "ResetApplication failed: unknown window type";
+};
+String S_NO_ACTIVE_WINDOW
+{
+ Text[ en-US ] = "No active window found (GetNextCloseWindow)";
+};
+String S_NO_DIALOG_IN_GETACTIVE
+{
+ Text[ en-US ] = "GetActive does not return a dialog! Inform development";
+};
+String S_NO_POPUP
+{
+ Text[ en-US ] = "Pop-up menu not open";
+};
+String S_NO_SUBMENU
+{
+ Text[ en-US ] = "Submenu does not exist";
+};
+String S_CONTROLTYPE_NOT_SUPPORTED
+{
+ Text[ en-US ] = "ControlType ($Arg1) is not supported";
+};
+String S_SELECTION_BY_ATTRIBUTE_ONLY_DIRECTORIES
+{
+ Text[ en-US ] = "Selection by attributes only possible for directories";
+};
+String S_NO_MORE_FILES
+{
+ Text[ en-US ] = "No more files";
+};
+String S_UNKNOWN_METHOD
+{
+ Text[ en-US ] = "Unknown method '($Arg1)' on ($Arg2)";
+};
+String S_INVALID_PARAMETERS
+{
+ Text[ en-US ] = "Invalid Parameters";
+};
+String S_POINTER_OUTSIDE_APPWIN
+{
+ Text[ en-US ] = "Pointer not inside application window at '($Arg1)'";
+};
+String S_UNKNOWN_COMMAND
+{
+ Text[ en-US ] = "Unknown command '($Arg1)'";
+};
+String S_WIN_NOT_FOUND
+{
+ Text[ en-US ] = "($Arg1) could not be found";
+};
+String S_WIN_INVISIBLE
+{
+ Text[ en-US ] = "($Arg1) is not visible";
+};
+String S_WIN_DISABLED
+{
+ Text[ en-US ] = "($Arg1) could not be accessed. Disabled";
+};
+String S_NUMBER_TOO_BIG
+{
+ Text[ en-US ] = "Entry number ($Arg2) is too large in ($Arg1). Max. allowed is ($Arg3)";
+};
+String S_NUMBER_TOO_SMALL
+{
+ Text[ en-US ] = "The entry number ($Arg2) is too small in ($Arg1). Min allowed is ($Arg3)";
+};
+String S_WINDOW_DISAPPEARED
+{
+ Text[ en-US ] = "Window disappeared in the meantime at ($Arg1)";
+};
+String S_ERROR_SAVING_IMAGE
+{
+ Text[ en-US ] = "Error #($Arg1) when saving the image";
+};
+String S_INVALID_POSITION
+{
+ Text[ en-US ] = "Invalid position at ($Arg1)";
+};
+String S_SPLITWIN_NOT_FOUND
+{
+ Text[ en-US ] = "SplitWindow not found at ($Arg1)";
+};
+String S_INTERNAL_ERROR
+{
+ Text[ en-US ] = "Internal error at ($Arg1)";
+};
+String S_NO_STATUSBAR
+{
+ Text[ en-US ] = "No status bar at ($Arg1)";
+};
+String S_ITEMS_INVISIBLE
+{
+ Text[ en-US ] = "The items are hidden at ($Arg1)";
+};
+String S_TABPAGE_NOT_FOUND
+{
+ Text[ en-US ] = "Tab page not found at ($Arg1)";
+};
+String S_TRISTATE_NOT_ALLOWED
+{
+ Text[ en-US ] = "Tristate cannot be set at ($Arg1)";
+};
+String S_ERROR_IN_SET_TEXT
+{
+ Text[ en-US ] = "Set text did not function";
+};
+String S_ATTEMPT_TO_WRITE_READONLY
+{
+ Text[ en-US ] = "Attempt to write on read-only ($Arg1)";
+};
+String S_NO_SELECT_FALSE
+{
+ Text[ en-US ] = "Select FALSE not allowed. Use MultiSelect at ($Arg1)";
+};
+String S_ENTRY_NOT_FOUND
+{
+ Text[ en-US ] = "\"($Arg2)\" entry at ($Arg1) not found";
+};
+String S_METHOD_FAILED
+{
+ Text[ en-US ] = "($Arg1) of entry \"($Arg2)\" failed";
+};
+String S_HELPID_ON_TOOLBOX_NOT_FOUND
+{
+ Text[ en-US ] = "HelpID in ToolBox not found at ($Arg1)";
+};
+String S_BUTTON_DISABLED_ON_TOOLBOX
+{
+ Text[ en-US ] = "The button is disabled in ToolBox at ($Arg1)";
+};
+String S_BUTTON_HIDDEN_ON_TOOLBOX
+{
+ Text[ en-US ] = "The button is hidden in ToolBox at ($Arg1)";
+};
+String S_CANNOT_MAKE_BUTTON_VISIBLE_IN_TOOLBOX
+{
+ Text[ en-US ] = "Button cannot be made visible in ToolBox at ($Arg1)";
+};
+String S_TEAROFF_FAILED
+{
+ Text[ en-US ] = "TearOff failed in ToolBox at ($Arg1)";
+};
+
+// Has to stay in for old res files
+String S_NO_SELECTED_ENTRY_DEPRECATED
+{
+ Text[ en-US ] = "No entry is selected in TreeListBox at ($Arg1)";
+};
+String S_NO_SELECTED_ENTRY
+{
+ Text[ en-US ] = "No entry is selected in ($Arg2) at ($Arg1)";
+};
+String S_SELECT_DESELECT_VIA_STRING_NOT_IMPLEMENTED
+{
+ Text[ en-US ] = "Select/Deselect with string not implemented at ($Arg1)";
+};
+String S_ALLOWED_ONLY_IN_FLOATING_MODE
+{
+ Text[ en-US ] = "Method only allowed in floating mode at ($Arg1)";
+};
+String S_ALLOWED_ONLY_IN_DOCKING_MODE
+{
+ Text[ en-US ] = "Method only allowed in docking mode at ($Arg1)";
+};
+String S_SIZE_NOT_CHANGEABLE
+{
+ Text[ en-US ] = "Size cannot be altered at ($Arg1)";
+};
+String S_NO_OK_BUTTON
+{
+ Text[ en-US ] = "There is no OK button at ($Arg1)";
+};
+String S_NO_CANCEL_BUTTON
+{
+ Text[ en-US ] = "There is no Cancel button at ($Arg1)";
+};
+String S_NO_YES_BUTTON
+{
+ Text[ en-US ] = "There is no Yes button at ($Arg1)";
+};
+String S_NO_NO_BUTTON
+{
+ Text[ en-US ] = "There is no No button at ($Arg1)";
+};
+String S_NO_RETRY_BUTTON
+{
+ Text[ en-US ] = "There is no Repeat button at ($Arg1)";
+};
+String S_NO_HELP_BUTTON
+{
+ Text[ en-US ] = "There is no Help button at ($Arg1)";
+};
+String S_NO_DEFAULT_BUTTON
+{
+ Text[ en-US ] = "There is no Default button defined at ($Arg1)";
+};
+String S_BUTTON_ID_NOT_THERE
+{
+ Text[ en-US ] = "There is no button with ID ($Arg1) at ($Arg2)";
+};
+String S_BUTTONID_REQUIRED
+{
+ Text[ en-US ] = "A button ID needs to be given at ($Arg1)";
+};
+String S_UNKNOWN_TYPE
+{
+ Text[ en-US ] = "Unknown object type ($Arg1) from UId or method '($Arg2)' not supported";
+};
+String S_UNPACKING_STORAGE_FAILED
+{
+ Text[ en-US ] = "Unpacking storage \"($Arg1)\" to \"($Arg2)\" failed";
+};
+String S_NO_LIST_BOX_BUTTON
+{
+ Text[ en-US ] = "ListBoxButton does not exist in ($Arg1)";
+};
+String S_UNO_URL_EXECUTE_FAILED_NO_DISPATCHER
+{
+ Text[ en-US ] = "UNO URL \"($Arg1)\" could not be executed: No dispatcher was found.";
+};
+String S_UNO_URL_EXECUTE_FAILED_NO_FRAME
+{
+ Text[ en-US ] = "UNO URL \"($Arg1)\" could not be executed: No ActiveFrame on desktop.";
+};
+String S_NO_MENU
+{
+ Text[ en-US ] = "There is no menu at ($Arg1)";
+};
+String S_UNO_URL_EXECUTE_FAILED_DISABLED
+{
+ Text[ en-US ] = "UNO URL \"($Arg1)\" could not be run: Disabled";
+};
+String S_NO_SCROLLBAR
+{
+ Text[ en-US ] = "No scroll bar at ($Arg1)";
+};
+String S_NO_SAX_PARSER
+{
+ Text[ en-US ] = "No SAX Parser when using ($Arg1). Initialize with 'SAXReadFile' first.";
+};
+String S_CANNOT_CREATE_DIRECTORY
+{
+ Text[ en-US ] = "Cannot create Directory: \"($Arg1)\"";
+};
+String S_DIRECTORY_NOT_EMPTY
+{
+ Text[ en-US ] = "Directory has to be Empty to unpack to. Directory: \"($Arg1)\"";
+};
+String S_DEPRECATED
+{
+ Text[ en-US ] = "Deprecated! Please change the script.";
+};
+String S_SIZE_BELOW_MINIMUM
+{
+ Text[ en-US ] = "The Size is below the minimum. x=($Arg1) ,y=($Arg2)";
+};
+String S_CANNOT_FIND_FLOATING_WIN
+{
+ Text[ en-US ] = "Cannot find FloatingWindow for floating DockingWindow at ($Arg1).";
+};
+String S_NO_LIST_BOX_STRING
+{
+ Text[ en-US ] = "String does not exist in ($Arg1)";
+};
+String S_SLOT_IN_EXECUTE
+{
+ Text[ en-US ] = "Another Slot is being executed already.";
+};
+String S_MENU_NOT_CLOSING
+{
+ Text[ en-US ] = "Menu not closing.";
+};
diff --git a/basic/source/app/testbasi.cxx b/basic/source/app/testbasi.cxx
new file mode 100644
index 000000000000..b63986b63b2d
--- /dev/null
+++ b/basic/source/app/testbasi.cxx
@@ -0,0 +1,31 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+#define testtool
+#include "mybasic.cxx"
diff --git a/basic/source/app/testtool.idl b/basic/source/app/testtool.idl
new file mode 100644
index 000000000000..acda657881c7
--- /dev/null
+++ b/basic/source/app/testtool.idl
@@ -0,0 +1,47 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+module
+"484E40E0-1F23-101C-9961-04021C007002"
+"5A30E000-1F23-101C-9961-04021C007002"
+App
+[
+HelpText( "Test" ),
+TypeLibFile( "testtool.tlb" )
+]
+{
+ interface TestToolAutomation
+ [
+ uuid( "6706E171-FB05-101B-804c-04021c007002" )
+ ]
+ {
+ void Start( String aFilePath );
+ BOOL Call( String aProcName, UINT32 nUId );
+ void Close( );
+ }
+}
+
+
diff --git a/basic/source/app/testtool.src b/basic/source/app/testtool.src
new file mode 100644
index 000000000000..245cff6c7917
--- /dev/null
+++ b/basic/source/app/testtool.src
@@ -0,0 +1,61 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#include "testtool.hrc"
+
+
+///////////////////////////////
+// Strings
+///////////////////////////////
+String S_INVALID_KEYCODE
+{
+ Text[ en-US ] = "Is an invalid KeyCode!";
+};
+String S_MANDATORY_FILE
+{
+ Text[ en-US ] = "\ncould not be found.\nThis file is indispensable.";
+};
+String S_READING_LONGNAMES
+{
+ Text[ en-US ] = "Reading long-names";
+};
+String S_READING_SLOT_IDS
+{
+ Text[ en-US ] = "Reading Slot IDs";
+};
+String S_READING_CONTROLS
+{
+ Text[ en-US ] = "Reading Controls";
+};
+String S_READING_BASIC_MODULE
+{
+ Text[ en-US ] = "Reading BASIC module";
+};
+String S_STARTING_APPLICATION
+{
+ Text[ en-US ] = "Starting application";
+};
+
diff --git a/basic/source/app/textedit.cxx b/basic/source/app/textedit.cxx
new file mode 100644
index 000000000000..bd18d4176803
--- /dev/null
+++ b/basic/source/app/textedit.cxx
@@ -0,0 +1,866 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+#include <tools/stream.hxx>
+#include <svtools/texteng.hxx>
+#include <svtools/textview.hxx>
+#include <svtools/txtattr.hxx>
+#include <basic/sbxmeth.hxx>
+#ifndef _BASIC_TTRESHLP_HXX
+#include <basic/ttstrhlp.hxx>
+#endif
+
+#include "basic.hrc"
+#include "textedit.hxx"
+#include "appedit.hxx"
+#include "brkpnts.hxx"
+#include <basic/testtool.hxx> // defines for syntax highlighting
+
+TextEditImp::TextEditImp( AppEdit* pParent, const WinBits& aBits )
+: Window( pParent, aBits )
+, pAppEdit( pParent )
+, bHighlightning( FALSE )
+, bDoSyntaxHighlight( FALSE )
+, bDelayHighlight( TRUE )
+, nTipId( 0 )
+, bViewMoved( FALSE )
+{
+ pTextEngine = new TextEngine();
+ pTextEngine->SetMaxTextLen( STRING_MAXLEN );
+ pTextEngine->EnableUndo( TRUE );
+
+ pTextView = new TextView( pTextEngine, this );
+ pTextEngine->InsertView( pTextView );
+ pTextEngine->SetModified( FALSE );
+
+ aSyntaxIdleTimer.SetTimeout( 200 );
+ aSyntaxIdleTimer.SetTimeoutHdl( LINK( this, TextEditImp, SyntaxTimerHdl ) );
+
+ aImplSyntaxIdleTimer.SetTimeout( 1 );
+ aImplSyntaxIdleTimer.SetTimeoutHdl( LINK( this, TextEditImp, SyntaxTimerHdl ) );
+
+ StartListening( *pTextEngine );
+
+ HideTipTimer.SetTimeout( 5000 ); // 5 seconds
+ ShowTipTimer.SetTimeout( 500 ); // 1/2 seconds
+ HideTipTimer.SetTimeoutHdl( LINK( this, TextEditImp, HideVarContents ) );
+ ShowTipTimer.SetTimeoutHdl( LINK( this, TextEditImp, ShowVarContents ) );
+}
+
+TextEditImp::~TextEditImp()
+{
+ pTextEngine->RemoveView( pTextView );
+ delete pTextView;
+ delete pTextEngine;
+}
+
+BOOL TextEditImp::ViewMoved()
+{
+ BOOL bOld = bViewMoved;
+ bViewMoved = FALSE;
+ return bOld;
+}
+
+void TextEditImp::Notify( SfxBroadcaster& rBC, const SfxHint& rHint )
+{
+ (void) rBC; /* avoid warning about unused parameter */
+ if ( rHint.ISA( TextHint ) )
+ {
+ const TextHint& rTextHint = (const TextHint&)rHint;
+ if( rTextHint.GetId() == TEXT_HINT_VIEWSCROLLED )
+ {
+ pAppEdit->pHScroll->SetThumbPos( pTextView->GetStartDocPos().X() );
+ pAppEdit->pVScroll->SetThumbPos( pTextView->GetStartDocPos().Y() );
+ if ( ((TextEdit*)(pAppEdit->pDataEdit))->GetBreakpointWindow() )
+ ((TextEdit*)(pAppEdit->pDataEdit))->GetBreakpointWindow()->Scroll( 0, ((TextEdit*)(pAppEdit->pDataEdit))->GetBreakpointWindow()->GetCurYOffset() - pTextView->GetStartDocPos().Y() );
+ bViewMoved = TRUE;
+ }
+ else if( rTextHint.GetId() == TEXT_HINT_TEXTHEIGHTCHANGED )
+ {
+ if ( pTextView->GetStartDocPos().Y() )
+ {
+ long nOutHeight = GetOutputSizePixel().Height();
+ long nTextHeight = pTextEngine->GetTextHeight();
+ if ( nTextHeight < nOutHeight )
+ pTextView->Scroll( 0, pTextView->GetStartDocPos().Y() );
+ }
+
+ pAppEdit->SetScrollBarRanges();
+ }
+ else if( rTextHint.GetId() == TEXT_HINT_TEXTFORMATTED )
+ {
+ ULONG nWidth = pTextEngine->CalcTextWidth();
+ if ( (ULONG)nWidth != pAppEdit->nCurTextWidth )
+ {
+ pAppEdit->nCurTextWidth = nWidth;
+ if ( pAppEdit->pHScroll )
+ { // Initialization finished?
+ pAppEdit->pHScroll->SetRange( Range( 0, (long)nWidth) );
+ pAppEdit->pHScroll->SetThumbPos( pTextView->GetStartDocPos().X() );
+ }
+ }
+ }
+ else if( rTextHint.GetId() == TEXT_HINT_PARAINSERTED )
+ {
+ if ( ((TextEdit*)(pAppEdit->pDataEdit))->GetBreakpointWindow() )
+ ((TextEdit*)(pAppEdit->pDataEdit))->GetBreakpointWindow()->AdjustBreakpoints( rTextHint.GetValue()+1, TRUE );
+ }
+ else if( rTextHint.GetId() == TEXT_HINT_PARAREMOVED )
+ {
+ if ( ((TextEdit*)(pAppEdit->pDataEdit))->GetBreakpointWindow() )
+ ((TextEdit*)(pAppEdit->pDataEdit))->GetBreakpointWindow()->AdjustBreakpoints( rTextHint.GetValue()+1, FALSE );
+
+ // Itchy adaption for two signs at line ends instead of one (hard coded default)
+ pTextEngine->SetMaxTextLen( STRING_MAXLEN - pTextEngine->GetParagraphCount() );
+ }
+ else if( rTextHint.GetId() == TEXT_HINT_FORMATPARA )
+ {
+ DoDelayedSyntaxHighlight(
+ sal::static_int_cast< xub_StrLen >( rTextHint.GetValue() ) );
+ if ( pTextView->GetTextEngine()->IsModified() )
+ ModifyHdl.Call( NULL );
+ }
+ }
+}
+
+#define TEXTATTR_SPECHIAL 55
+class TextAttribSpechial : public TextAttrib
+{
+private:
+ FontWeight maFontWeight;
+
+public:
+ TextAttribSpechial( const FontWeight& rFontWeight );
+ TextAttribSpechial( const TextAttribSpechial& rAttr );
+ ~TextAttribSpechial() {;}
+
+ virtual void SetFont( Font& rFont ) const;
+ virtual TextAttrib* Clone() const;
+ virtual int operator==( const TextAttrib& rAttr ) const;
+};
+
+TextAttribSpechial::TextAttribSpechial( const FontWeight& rFontWeight )
+ : TextAttrib( TEXTATTR_SPECHIAL ), maFontWeight( rFontWeight )
+{}
+
+TextAttribSpechial::TextAttribSpechial( const TextAttribSpechial& rAttr )
+ : TextAttrib( rAttr ), maFontWeight( rAttr.maFontWeight )
+{}
+
+void TextAttribSpechial::SetFont( Font& rFont ) const
+{
+ rFont.SetWeight( maFontWeight );
+}
+
+TextAttrib* TextAttribSpechial::Clone() const
+{
+ return new TextAttribSpechial( *this );
+}
+
+int TextAttribSpechial::operator==( const TextAttrib& rAttr ) const
+{
+ return ( ( TextAttrib::operator==(rAttr ) ) &&
+ ( maFontWeight == ((const TextAttribSpechial&)rAttr).maFontWeight ) );
+}
+
+void TextEditImp::ImpDoHighlight( const String& rSource, ULONG nLineOff )
+{
+ SbTextPortions aPortionList;
+ pAppEdit->GetBasicFrame()->Basic().Highlight( rSource, aPortionList );
+
+ USHORT nCount = aPortionList.Count();
+ if ( !nCount )
+ return;
+
+ SbTextPortion& rLast = aPortionList[nCount-1];
+ if ( rLast.nStart > rLast.nEnd ) // Nur bis Bug von MD behoben
+ {
+#if OSL_DEBUG_LEVEL > 1
+ DBG_ERROR( "MD-Bug nicht beseitigt!" );
+#endif
+ nCount--;
+ aPortionList.Remove( nCount);
+ if ( !nCount )
+ return;
+ }
+
+ // here is the postprocessing for types for the TestTool
+ USHORT i;
+ BOOL bWasTTControl = FALSE;
+ for ( i = 0; i < aPortionList.Count(); i++ )
+ {
+ SbTextPortion& r = aPortionList[i];
+// DBG_ASSERT( r.nStart <= r.nEnd, "Highlight: Start > End?" );
+ if ( r.nStart > r.nEnd ) // Nur bis Bug von MD behoben
+ continue;
+
+ SbTextType eType = r.eType;
+ Color aColor;
+ switch ( eType )
+ {
+ case SB_SYMBOL:
+ {
+ String aSymbol = rSource.Copy( r.nStart, r.nEnd - r.nStart +1 );
+ r.eType = pAppEdit->GetBasicFrame()->Basic().GetSymbolType( aSymbol, bWasTTControl );
+
+ if ( r.eType == TT_CONTROL )
+ bWasTTControl = TRUE;
+ else
+ bWasTTControl = FALSE;
+ }
+ break;
+ case SB_PUNCTUATION:
+ {
+ String aPunctuation = rSource.Copy( r.nStart, r.nEnd - r.nStart +1 );
+ if ( aPunctuation.CompareToAscii( "." ) != COMPARE_EQUAL )
+ bWasTTControl = FALSE;
+ }
+ break;
+ default:
+ bWasTTControl = FALSE;
+ }
+ }
+
+ // Es muessen nur die Blanks und Tabs mit attributiert werden.
+ // If there are two equal attributes one after another,
+ // they are optimized by the EditEngine.
+ xub_StrLen nLastEnd = 0;
+#ifdef DBG_UTIL
+ xub_StrLen nLine1 = aPortionList[0].nLine;
+#endif
+ for ( i = 0; i < nCount; i++ )
+ {
+ SbTextPortion& r = aPortionList[i];
+ DBG_ASSERT( r.nLine == nLine1, "doch mehrere Zeilen ?" );
+ DBG_ASSERT( r.nStart <= r.nEnd, "Highlight: Start > End?" );
+ if ( r.nStart > r.nEnd ) // Nur bis Bug von MD behoben
+ continue;
+
+ if ( r.nStart > nLastEnd )
+ {
+ // Kann ich mich drauf verlassen, dass alle ausser
+ // Blank und Tab gehighlightet wird ?!
+ r.nStart = nLastEnd;
+ }
+ nLastEnd = r.nEnd+1;
+ if ( ( i == (nCount-1) ) && ( r.nEnd < rSource.Len() ) )
+ r.nEnd = rSource.Len()-1;
+ }
+
+ BOOL bWasModified = pTextEngine->IsModified();
+ for ( i = 0; i < aPortionList.Count(); i++ )
+ {
+ SbTextPortion& r = aPortionList[i];
+// DBG_ASSERT( r.nStart <= r.nEnd, "Highlight: Start > End?" );
+ if ( r.nStart > r.nEnd ) // Nur bis Bug von MD behoben
+ continue;
+
+ SbTextType eCol = r.eType;
+ Color aColor;
+ ULONG nLine = nLineOff+r.nLine-1; // -1, because BASIC starts with 1
+ switch ( +eCol )
+ {
+ case SB_KEYWORD:
+ aColor = Color( COL_BLUE );
+ break;
+ case SB_SYMBOL:
+ aColor = Color( RGB_COLORDATA( 0x00, 0x60, 0x00 ) );
+ break;
+ case SB_STRING:
+ aColor = Color( COL_RED );
+ break;
+ case SB_NUMBER:
+ aColor = Color( COL_MAGENTA );
+ break;
+ case SB_PUNCTUATION:
+ aColor = Color( COL_BLACK );
+ break;
+ case SB_COMMENT:
+ aColor = Color( COL_GRAY );
+ break;
+ case TT_KEYWORD:
+ case TT_LOCALCMD:
+ aColor = Color( COL_LIGHTBLUE );
+ break;
+ case TT_REMOTECMD:
+ aColor = Color( RGB_COLORDATA( 0x00, 0xB0, 0xB0 ) );
+ break;
+ case TT_CONTROL:
+ case TT_SLOT:
+ aColor = Color( RGB_COLORDATA( 0x00, 0xB0, 0x00 ) );
+ break;
+ case TT_METHOD:
+ aColor = Color( RGB_COLORDATA( 0x00, 0xB0, 0x00 ) );
+ break;
+ case TT_NOMETHOD:
+ {
+ aColor = Color( COL_RED );
+ pTextEngine->SetAttrib( TextAttribSpechial( WEIGHT_BOLD ), nLine, r.nStart, r.nEnd+1 );
+ }
+ break;
+ default:
+ {
+ aColor = Color( RGB_COLORDATA( 0xff, 0x80, 0x80 ) );
+ DBG_ERROR( "Unknown syntax color" );
+ }
+ }
+ pTextEngine->SetAttrib( TextAttribFontColor( aColor ), nLine, r.nStart, r.nEnd+1 );
+ }
+ // Highlighting should not modify the text
+ pTextEngine->SetModified( bWasModified );
+}
+
+void TextEditImp::DoSyntaxHighlight( ULONG nPara )
+{
+ // Due to delayed syntax highlight it can happend that the
+ // paragraph does no longer exist
+ if ( nPara < pTextEngine->GetParagraphCount() )
+ {
+ // leider weis ich nicht, ob genau diese Zeile Modified() ...
+// if ( pProgress )
+// pProgress->StepProgress();
+ pTextEngine->RemoveAttribs( nPara );
+ String aSource( pTextEngine->GetText( nPara ) );
+ ImpDoHighlight( aSource, nPara );
+ }
+}
+
+void TextEditImp::DoDelayedSyntaxHighlight( xub_StrLen nPara )
+{
+ // Paragraph is added to 'List', processed in TimerHdl.
+ // => Do not manipulate paragraphs while EditEngine is formatting
+// if ( pProgress )
+// pProgress->StepProgress();
+
+ if ( !bHighlightning && bDoSyntaxHighlight )
+ {
+ if ( bDelayHighlight )
+ {
+ aSyntaxLineTable.Insert( nPara, (void*)(ULONG)1 );
+ aSyntaxIdleTimer.Start();
+ }
+ else
+ DoSyntaxHighlight( nPara );
+ }
+}
+
+IMPL_LINK( TextEditImp, SyntaxTimerHdl, Timer *, EMPTYARG )
+{
+ DBG_ASSERT( pTextView, "Not yet a View but Syntax-Highlight ?!" );
+ pTextEngine->SetUpdateMode( FALSE );
+
+ bHighlightning = TRUE;
+ USHORT nLine;
+ while ( aSyntaxLineTable.First() && !Application::AnyInput( INPUT_MOUSEANDKEYBOARD ) )
+ {
+ nLine = (USHORT)aSyntaxLineTable.GetCurKey();
+ DoSyntaxHighlight( nLine );
+ aSyntaxLineTable.Remove( nLine );
+/* if ( Application::AnyInput() )
+ {
+ aSyntaxIdleTimer.Start(); // Starten, falls wir in einem Dialog landen
+ pTextView->ShowCursor( TRUE, TRUE );
+ pTextEngine->SetUpdateMode( TRUE );
+ bHighlightning = FALSE;
+ GetpApp()->Reschedule();
+ bHighlightning = TRUE;
+ pTextEngine->SetUpdateMode( FALSE );
+ }*/
+ }
+
+ BOOL bWasModified = pTextEngine->IsModified();
+ if ( aSyntaxLineTable.Count() > 3 ) // Without VDev
+ {
+ pTextEngine->SetUpdateMode( TRUE );
+ pTextView->ShowCursor( TRUE, TRUE );
+ }
+ else
+ pTextEngine->SetUpdateMode( TRUE ); // ! With VDev
+// pTextView->ForceUpdate();
+
+ // SetUpdateMode( TRUE ) soll kein Modify setzen
+ pTextEngine->SetModified( bWasModified );
+
+ // SyntaxTimerHdl wird gerufen, wenn Text-Aenderung
+ // => gute Gelegenheit, Textbreite zu ermitteln!
+// long nPrevTextWidth = nCurTextWidth;
+// nCurTextWidth = pTextEngine->CalcTextWidth();
+// if ( nCurTextWidth != nPrevTextWidth )
+// SetScrollBarRanges();
+ bHighlightning = FALSE;
+
+ if ( aSyntaxLineTable.First() )
+ aImplSyntaxIdleTimer.Start();
+
+// while ( Application::AnyInput() )
+// Application::Reschedule(); // Reschedule, da der UserEvent keine Paints etc. durchlsst
+
+ return 0;
+}
+
+void TextEditImp::InvalidateSyntaxHighlight()
+{
+ for ( xub_StrLen i = 0; i < pTextEngine->GetParagraphCount(); i++ )
+ DoDelayedSyntaxHighlight( i );
+}
+
+void TextEditImp::SyntaxHighlight( BOOL bNew )
+{
+ if ( ( bNew && bDoSyntaxHighlight ) || ( !bNew && !bDoSyntaxHighlight ) )
+ return;
+
+ bDoSyntaxHighlight = bNew;
+ if ( !pTextEngine )
+ return;
+
+
+ if ( bDoSyntaxHighlight )
+ {
+ InvalidateSyntaxHighlight();
+ }
+ else
+ {
+ aSyntaxIdleTimer.Stop();
+ pTextEngine->SetUpdateMode( FALSE );
+ for ( ULONG i = 0; i < pTextEngine->GetParagraphCount(); i++ )
+ pTextEngine->RemoveAttribs( i );
+
+// pTextEngine->QuickFormatDoc();
+ pTextEngine->SetUpdateMode( TRUE );
+ pTextView->ShowCursor(TRUE, TRUE );
+ }
+}
+
+
+void TextEditImp::SetFont( const Font& rNewFont )
+{
+ pTextEngine->SetFont(rNewFont);
+}
+
+BOOL TextEditImp::IsModified()
+{
+ return pTextEngine->IsModified();
+}
+
+void TextEditImp::KeyInput( const KeyEvent& rKeyEvent )
+{
+ BOOL bWasModified = pTextView->GetTextEngine()->IsModified();
+ pTextView->GetTextEngine()->SetModified( FALSE );
+
+ if ( !pTextView->KeyInput( rKeyEvent ) )
+ Window::KeyInput( rKeyEvent );
+
+ if ( pTextView->GetTextEngine()->IsModified() )
+ ModifyHdl.Call( NULL );
+ else
+ pTextView->GetTextEngine()->SetModified( bWasModified );
+}
+
+void TextEditImp::Paint( const Rectangle& rRect ){ pTextView->Paint( rRect );}
+void TextEditImp::MouseButtonUp( const MouseEvent& rMouseEvent ){ pTextView->MouseButtonUp( rMouseEvent );}
+//void TextEditImp::MouseButtonDown( const MouseEvent& rMouseEvent ){ pTextView->MouseButtonDown( rMouseEvent );}
+//void TextEditImp::MouseMove( const MouseEvent& rMouseEvent ){ pTextView->MouseMove( rMouseEvent );}
+//void TextEditImp::Command( const CommandEvent& rCEvt ){ pTextView->Command( rCEvt );}
+//BOOL TextEditImp::Drop( const DropEvent& rEvt ){ return FALSE /*pTextView->Drop( rEvt )*/;}
+//BOOL TextEditImp::QueryDrop( DropEvent& rEvt ){ return FALSE /*pTextView->QueryDrop( rEvt )*/;}
+
+
+void TextEditImp::Command( const CommandEvent& rCEvt )
+{
+ switch( rCEvt.GetCommand() ) {
+ case COMMAND_CONTEXTMENU:
+ case COMMAND_WHEEL:
+ GetParent()->Command( rCEvt );
+ break;
+ default:
+ pTextView->Command( rCEvt );
+ }
+}
+
+
+void TextEditImp::MouseButtonDown( const MouseEvent& rMouseEvent )
+{
+ pTextView->MouseButtonDown( rMouseEvent );
+ HideVarContents( NULL );
+ ShowTipTimer.Stop();
+}
+
+
+void TextEditImp::MouseMove( const MouseEvent& rMEvt )
+{
+ pTextView->MouseMove( rMEvt );
+ HideVarContents( NULL );
+ if ( rMEvt.GetButtons() == 0 )
+ ShowTipTimer.Start();
+ if ( rMEvt.IsLeaveWindow() )
+ ShowTipTimer.Stop();
+}
+
+
+IMPL_LINK( TextEditImp, HideVarContents, void*, EMPTYARG )
+{
+ if ( nTipId )
+ {
+ Help::HideTip( nTipId );
+ nTipId = 0;
+ aTipWord = String();
+ }
+ return 0;
+}
+
+static const char cSuffixes[] = "%&!#@$";
+
+
+SbxBase* TextEditImp::GetSbxAtMousePos( String &aWord )
+{
+ Point aPos = GetPointerPosPixel();
+ Point aDocPos = pTextView->GetDocPos( aPos );
+ aWord = pTextEngine->GetWord( pTextEngine->GetPaM( aDocPos ) );
+
+ if ( aWord.Len() /*&& !Application::GetAppInternational().IsNumeric( aWord )*/ )
+ {
+ xub_StrLen nLastChar = aWord.Len()-1;
+ String aSuffixes = CUniString( cSuffixes );
+ if ( aSuffixes.Search( aWord.GetChar(nLastChar) ) != STRING_NOTFOUND )
+ aWord.Erase( nLastChar, 1 );
+ // because perhaps TestTools throws an error
+ BOOL bWasError = SbxBase::IsError();
+ pAppEdit->GetBasicFrame()->Basic().DebugFindNoErrors( TRUE );
+ SbxBase* pSBX = StarBASIC::FindSBXInCurrentScope( aWord );
+ pAppEdit->GetBasicFrame()->Basic().DebugFindNoErrors( FALSE );
+ DBG_ASSERT( !( !bWasError && SbxBase::IsError()), "Error generated while retrieving Variable data for viewing" );
+ if ( !bWasError && SbxBase::IsError() )
+ SbxBase::ResetError();
+
+ return pSBX;
+ }
+ return NULL;
+}
+
+
+IMPL_LINK( TextEditImp, ShowVarContents, void*, EMPTYARG )
+{
+ String aWord;
+ SbxBase* pSBX = GetSbxAtMousePos( aWord );
+ String aHelpText;
+ Point aPos = GetPointerPosPixel();
+
+ if ( pSBX && pSBX->ISA( SbxVariable ) && !pSBX->ISA( SbxMethod ) )
+ {
+ SbxVariable* pVar = (SbxVariable*)pSBX;
+ SbxDataType eType = pVar->GetType();
+ if ( eType == SbxOBJECT )
+ {
+ // Can cause a crash: Type == Object does not mean pVar == Object
+ if ( pVar->GetObject() && pVar->GetObject()->ISA( SbxObject ) )
+ aHelpText = ((SbxObject*)(pVar->GetObject()))->GetClassName();
+ else
+ aHelpText = CUniString("Object");
+ }
+ else if ( eType & SbxARRAY )
+ aHelpText = CUniString("{...}");
+ else if ( eType != SbxEMPTY )
+ {
+ aHelpText = pVar->GetName();
+ if ( !aHelpText.Len() ) // Name is not copied in arguments
+ aHelpText = aWord;
+ aHelpText += '=';
+ aHelpText += pVar->GetString();
+ }
+ }
+
+
+ if ( aHelpText.Len() && aTipPos != aPos && aTipWord != aWord )
+ {
+ if ( nTipId )
+ Help::HideTip( nTipId );
+ nTipId = Help::ShowTip( this, Rectangle(), aHelpText );
+
+ HideTipTimer.Start();
+ aTipWord = aWord;
+ aTipPos = aPos;
+ }
+ if ( nTipId && aTipPos != aPos )
+ {
+ Help::HideTip( nTipId );
+ nTipId = 0;
+ aTipWord = String();
+ }
+
+ return 0;
+}
+
+
+void TextEditImp::BuildKontextMenu( PopupMenu *&pMenu )
+{
+ String aWord;
+ SbxBase* pSBX = GetSbxAtMousePos( aWord );
+ if ( pSBX && pSBX->ISA( SbxVariable ) && !pSBX->ISA( SbxMethod ) )
+ {
+ SbxVariable* pVar = (SbxVariable*)pSBX;
+ SbxDataType eType = pVar->GetType();
+
+ if ( ( eType & ( SbxVECTOR | SbxARRAY | SbxBYREF )) == 0 )
+ {
+
+/*
+Boolean
+Currency
+Date
+Double
+Integer
+Long
+Object
+Single
+String
+Variant(Empty)
+*/
+ switch ( eType )
+ {
+ case SbxBOOL:
+// case SbxCURRENCY:
+// case SbxDATE:
+ case SbxDOUBLE:
+ case SbxINTEGER:
+ case SbxLONG:
+// case SbxOBJECT: // cannot be edited
+ case SbxSINGLE:
+ case SbxSTRING:
+
+ case SbxVARIANT: // does not occure, instead SbxEMPTY
+ case SbxEMPTY:
+ {
+ pAppEdit->GetBasicFrame()->SetEditVar( pVar );
+ if ( !pMenu )
+ pMenu = new PopupMenu();
+ else
+ pMenu->InsertSeparator();
+
+ pMenu->InsertItem( RID_POPUPEDITVAR, ((BasicFrame*)GetpApp()->GetAppWindow())->GenRealString( GEN_RES_STR1( IDS_EDIT_VAR, aWord ) ) );
+ }
+ break;
+ default:
+ ;
+ }
+ }
+ }
+}
+
+
+
+
+DBG_NAME(TextEdit)
+
+TextEdit::TextEdit( AppEdit* pParent, const WinBits& aBits )
+: pBreakpointWindow( NULL )
+, bFileWasUTF8( FALSE )
+, bSaveAsUTF8( FALSE )
+, aEdit( pParent, aBits | WB_NOHIDESELECTION )
+{
+DBG_CTOR(TextEdit,0);
+}
+
+TextEdit::~TextEdit()
+{DBG_DTOR(TextEdit,0);}
+
+void TextEdit::Highlight( ULONG nLine, xub_StrLen nCol1, xub_StrLen nCol2 )
+{
+ if ( nLine ) // Should not occure but at 'Sub expected' in first line
+ nLine--;
+
+ String s = aEdit.pTextEngine->GetText( nLine );
+
+ if( nCol1 == STRING_NOTFOUND )
+ {
+ // No column given
+ nCol1 = 0;
+ nCol2 = STRING_NOTFOUND;
+ }
+ if( nCol2 == STRING_NOTFOUND )
+ {
+ nCol2 = s.Len();
+ }
+ // Adaption to the Precompiler | EditText != Compilied Text
+ if ( nCol2 > s.Len() )
+ nCol2 = s.Len();
+ if ( nCol1 >= nCol2 )
+ nCol1 = 0;
+
+ // Because nCol2 *may* point after the current statement
+ // (because the next one starts there) there are space
+ // that must be removed
+ BOOL bColon = FALSE;
+
+ while ( s.GetChar( nCol2 ) == ' ' && nCol2 > nCol1 && !bColon )
+ {
+ nCol2--;
+ if ( s.GetChar( nCol2 ) == ':' )
+ {
+ nCol2--;
+ bColon = TRUE;
+ }
+ }
+
+ aEdit.ViewMoved();
+ aEdit.pTextView->SetSelection( TextSelection(TextPaM(nLine,nCol2+1), TextPaM(nLine,nCol1)) );
+ if ( aEdit.ViewMoved() )
+ {
+ aEdit.pTextView->SetSelection( TextSelection(TextPaM(TEXT_PARA_ALL,1)) ); // fix #105169#
+ aEdit.pTextView->SetSelection( TextSelection(TextPaM((nLine>=2?nLine-2:0),nCol2+1)) );
+ aEdit.pTextView->SetSelection( TextSelection(TextPaM(nLine,nCol2+1), TextPaM(nLine,nCol1)) );
+ }
+}
+
+
+void TextEdit::Delete(){ aEdit.pTextView->KeyInput( KeyEvent( 0, KeyCode( KEYFUNC_DELETE ) )); }
+void TextEdit::Cut(){ aEdit.pTextView->Cut(); }
+void TextEdit::Copy(){ aEdit.pTextView->Copy(); }
+void TextEdit::Paste(){ aEdit.pTextView->Paste(); }
+void TextEdit::Undo(){ aEdit.pTextView->Undo(); }
+void TextEdit::Redo(){ aEdit.pTextView->Redo(); }
+String TextEdit::GetSelected(){ return aEdit.pTextView->GetSelected(); }
+TextSelection TextEdit::GetSelection() const{ return aEdit.pTextView->GetSelection(); }
+void TextEdit::SetSelection( const TextSelection& rSelection ){ aEdit.pTextView->SetSelection( rSelection ); }
+
+USHORT TextEdit::GetLineNr() const
+{
+ return sal::static_int_cast< USHORT >(
+ aEdit.pTextView->GetSelection().GetEnd().GetPara()+1);
+}
+
+void TextEdit::ReplaceSelected( const String& rStr ){ aEdit.pTextView->InsertText(rStr); }
+BOOL TextEdit::IsModified(){ return aEdit.IsModified(); }
+
+String TextEdit::GetText() const
+{
+ return aEdit.pTextEngine->GetText( GetSystemLineEnd() );
+}
+
+void TextEdit::SetText( const String& rStr ){ aEdit.pTextEngine->SetText(rStr); aEdit.pTextEngine->SetModified( FALSE ); }
+void TextEdit::SetModifyHdl( Link l ){ aEdit.SetModifyHdl(l); }
+BOOL TextEdit::HasText() const { return aEdit.pTextEngine->GetTextLen() > 0; }
+
+// Search from the beginning or at mark + 1
+BOOL TextEdit::Find( const String& s )
+{
+ DBG_CHKTHIS(TextEdit,0);
+
+ TextSelection aSelection = aEdit.pTextView->GetSelection();
+ ULONG nPara = aSelection.GetStart().GetPara();
+ xub_StrLen nIndex = aSelection.GetStart().GetIndex();
+
+ if ( aSelection.HasRange() )
+ nIndex ++;
+
+ while ( nPara <= aEdit.pTextEngine->GetParagraphCount() )
+ {
+ String aText = aEdit.pTextEngine->GetText( nPara );
+
+ nIndex = aText.Search( s, nIndex );
+ if( nIndex != STRING_NOTFOUND )
+ {
+ aEdit.pTextView->SetSelection( TextSelection( TextPaM( nPara, nIndex ), TextPaM( nPara, nIndex + s.Len() ) ) );
+ return TRUE;
+ }
+ nIndex = 0;
+ nPara++;
+ }
+ return FALSE;
+}
+
+BOOL TextEdit::Load( const String& aName )
+{
+DBG_CHKTHIS(TextEdit,0);
+ BOOL bOk = TRUE;
+ SvFileStream aStrm( aName, STREAM_STD_READ );
+ if( aStrm.IsOpen() )
+ {
+ String aText, aLine, aLineBreak;
+ BOOL bIsFirstLine = TRUE;
+ aLineBreak += '\n';
+ aLineBreak.ConvertLineEnd();
+ rtl_TextEncoding aFileEncoding = RTL_TEXTENCODING_IBM_850;
+ while( !aStrm.IsEof() && bOk )
+ {
+ aStrm.ReadByteStringLine( aLine, aFileEncoding );
+ if ( bIsFirstLine && IsTTSignatureForUnicodeTextfile( aLine ) )
+ {
+ aFileEncoding = RTL_TEXTENCODING_UTF8;
+ bFileWasUTF8 = TRUE;
+ }
+ else
+ {
+ if ( !bIsFirstLine )
+ aText += aLineBreak;
+ aText += aLine;
+ bIsFirstLine = FALSE;
+ }
+ if( aStrm.GetError() != SVSTREAM_OK )
+ bOk = FALSE;
+ }
+ SetText( aText );
+ }
+ else
+ bOk = FALSE;
+ return bOk;
+}
+
+BOOL TextEdit::Save( const String& aName )
+{
+DBG_CHKTHIS(TextEdit,0);
+ BOOL bOk = TRUE;
+ SvFileStream aStrm( aName, STREAM_STD_WRITE | STREAM_TRUNC );
+ rtl_TextEncoding aFileEncoding = RTL_TEXTENCODING_IBM_850;
+ if( aStrm.IsOpen() )
+ {
+ if ( bFileWasUTF8 || bSaveAsUTF8 )
+ {
+ aStrm << TT_SIGNATURE_FOR_UNICODE_TEXTFILES;
+ aStrm << sal_Char(_LF);
+ aFileEncoding = RTL_TEXTENCODING_UTF8;
+ }
+ String aSave = GetText();
+ aSave.ConvertLineEnd(LINEEND_LF);
+ aStrm << ByteString( aSave, aFileEncoding ).GetBuffer();
+ if( aStrm.GetError() != SVSTREAM_OK )
+ bOk = FALSE;
+ else
+ aEdit.pTextEngine->SetModified(FALSE);
+ } else bOk = FALSE;
+ return bOk;
+}
+
+
+void TextEdit::BuildKontextMenu( PopupMenu *&pMenu )
+{
+ DataEdit::BuildKontextMenu( pMenu );
+ aEdit.BuildKontextMenu( pMenu );
+}
+
+
diff --git a/basic/source/app/textedit.hxx b/basic/source/app/textedit.hxx
new file mode 100644
index 000000000000..354c94dc44ab
--- /dev/null
+++ b/basic/source/app/textedit.hxx
@@ -0,0 +1,138 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _TEXTEDIT_HXX
+#define _TEXTEDIT_HXX
+
+class AppEdit;
+class TextEngine;
+class TextView;
+class TextEdit;
+class BreakpointWindow;
+
+#include <vcl/timer.hxx>
+#include <tools/table.hxx>
+#include <tools/debug.hxx>
+#include <svl/lstner.hxx>
+#include <svtools/svmedit.hxx>
+
+#include "dataedit.hxx"
+
+//#include <xtextedt.hxx>
+
+class TextEditImp : public Window, public SfxListener
+{
+using Window::Notify;
+
+protected:
+ void DoSyntaxHighlight( ULONG nPara );
+
+
+private:
+ AppEdit *pAppEdit;
+ Link ModifyHdl;
+
+ Timer aSyntaxIdleTimer;
+ Timer aImplSyntaxIdleTimer;
+ DECL_LINK( SyntaxTimerHdl, Timer * );
+ Table aSyntaxLineTable;
+
+ void Notify( SfxBroadcaster& rBC, const SfxHint& rHint );
+
+ void ImpDoHighlight( const String& rSource, ULONG nLineOff );
+ BOOL bHighlightning;
+ BOOL bDoSyntaxHighlight;
+ BOOL bDelayHighlight;
+
+
+ SbxBase* GetSbxAtMousePos( String &aWord );
+ virtual void MouseMove( const MouseEvent& rMEvt );
+ DECL_LINK( HideVarContents, void* );
+ DECL_LINK( ShowVarContents, void* );
+ Point aTipPos;
+ String aTipWord;
+ ULONG nTipId;
+
+ Timer HideTipTimer;
+ Timer ShowTipTimer;
+
+ BOOL bViewMoved;
+
+public:
+ TextEditImp( AppEdit *pParent, const WinBits& aBits );
+ ~TextEditImp();
+
+ TextEngine *pTextEngine;
+ TextView *pTextView;
+
+ void SetFont( const Font& rNewFont );
+ BOOL IsModified();
+ void SetModifyHdl( Link l ){ ModifyHdl = l; }
+
+ void KeyInput( const KeyEvent& rKeyEvent );
+ void Paint( const Rectangle& rRect );
+ void MouseButtonUp( const MouseEvent& rMouseEvent );
+ void MouseButtonDown( const MouseEvent& rMouseEvent );
+// void MouseMove( const MouseEvent& rMouseEvent );
+ void Command( const CommandEvent& rCEvt );
+ //BOOL Drop( const DropEvent& rEvt );
+ //BOOL QueryDrop( DropEvent& rEvt );
+
+ BOOL ViewMoved();
+
+ void DoDelayedSyntaxHighlight( xub_StrLen nPara );
+ void InvalidateSyntaxHighlight();
+ void SyntaxHighlight( BOOL bNew );
+ void BuildKontextMenu( PopupMenu *&pMenu );
+};
+
+
+
+DBG_NAMEEX(TextEdit)
+class TextEdit : public DataEdit {
+
+ BreakpointWindow *pBreakpointWindow;
+ BOOL bFileWasUTF8;
+ BOOL bSaveAsUTF8;
+
+public:
+ TextEdit( AppEdit*, const WinBits& );
+ ~TextEdit();
+ void Highlight( ULONG nLine, xub_StrLen nCol1, xub_StrLen nCol2 );
+ TextEditImp& GetTextEditImp() { return aEdit; }
+
+ void SetBreakpointWindow( BreakpointWindow *pBPWindow ){ pBreakpointWindow = pBPWindow; }
+ BreakpointWindow *GetBreakpointWindow(){ return pBreakpointWindow; }
+
+ DATA_FUNC_DEF( aEdit, TextEditImp )
+
+ virtual void BuildKontextMenu( PopupMenu *&pMenu );
+
+ void SaveAsUTF8( BOOL bUTF8 ) { bSaveAsUTF8 = bUTF8; }
+};
+
+#endif
diff --git a/basic/source/app/ttbasic.cxx b/basic/source/app/ttbasic.cxx
new file mode 100644
index 000000000000..98ffc1e4c08d
--- /dev/null
+++ b/basic/source/app/ttbasic.cxx
@@ -0,0 +1,36 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+#include <basic/mybasic.hxx>
+#include "ttbasic.hxx"
+
+MyBasic* TTBasic::CreateMyBasic()
+{
+ return new MyBasic;
+}
diff --git a/basic/source/app/ttbasic.hxx b/basic/source/app/ttbasic.hxx
new file mode 100644
index 000000000000..04d74daa1bb7
--- /dev/null
+++ b/basic/source/app/ttbasic.hxx
@@ -0,0 +1,32 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+class TTBasic
+{
+public:
+ static MyBasic* CreateMyBasic();
+};
+
diff --git a/basic/source/app/ttmsg.src b/basic/source/app/ttmsg.src
new file mode 100644
index 000000000000..63a6643f3cf1
--- /dev/null
+++ b/basic/source/app/ttmsg.src
@@ -0,0 +1,160 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#include "ttmsg.hrc"
+
+
+// Hier sind die Messages aus dem Verzeichnis /basic/source/testtool enhalten
+
+
+///////////////////////////////
+// Fehlermeldungen, die in das Resultfile gelangen.
+// *********************
+// *** !!ACHTUNG!! ***
+// *********************
+// Die Nummern drfen sich NIE! ndern,
+// da sie in den Resultfiles gespeichert sind, und bei erneutem Anzeigen
+// statdessen die entsprechenden neuen oder garkeine Strings angzeigt werden.
+///////////////////////////////
+String S_NAME_NOT_THERE
+{
+ Text[ en-US ] = "Name doesn't exist: #($Arg1)";
+};
+String S_DOUBLE_NAME
+{
+ Text[ en-US ] = "Name double: ($Arg1)";
+};
+String S_READING_FILE
+{
+ Text[ en-US ] = "Reading the files";
+};
+String S_CANNOT_OPEN_FILE
+{
+ Text[ en-US ] = "File cannot be opened: ($Arg1)";
+};
+String S_INVALID_LINE
+{
+ Text[ en-US ] = "Line \"($Arg1)\" is invalid.";
+};
+String S_SHORTNAME_UNKNOWN
+{
+ Text[ en-US ] = "Short-name unknown during copying: ($Arg1)";
+};
+String S_LONGNAME_UNKNOWN
+{
+ Text[ en-US ] = "Long-name unknown: ($Arg1)";
+};
+String S_FIRST_SHORTNAME_REQ_ASTRX
+{
+ Text[ en-US ] = "First short-name must start with * . Ignoring.";
+};
+String S_TIMOUT_WAITING
+{
+ Text[ en-US ] = "Server Timeout while waiting for answer. Sequence No: ($Arg1)";
+};
+String S_APPLICATION_RESTARTED
+{
+ Text[ en-US ] = "Application has been restarted.";
+};
+String S_APPLICATION_START_FAILED
+{
+ Text[ en-US ] = "Application \"($Arg1)\" cannot be started. ";
+};
+String S_TIMOUT_SENDING
+{
+ Text[ en-US ] = "Server Timeout while sending. Sequence No: ($Arg1)";
+};
+String S_NO_CONNECTION
+{
+ Text[ en-US ] = "No connection. Sequence No: ($Arg1)";
+};
+String S_NO_FILES_FOUND // Not used anymore. needed only for old *.res files
+{
+ Text[ en-US ] = "No ($Arg1) files found";
+};
+String S_ERRORS_DETECTED
+{
+ Text[ en-US ] = "** ($Arg1) errors occurred";
+};
+String S_NO_ERRORS_DETECTED
+{
+ Text[ en-US ] = "** No errors have occurred";
+};
+String S_WARNINGS_DETECTED
+{
+ Text[ en-US ] = "** ($Arg1) warnings occurred";
+};
+String S_NO_WARNINGS_DETECTED
+{
+ Text[ en-US ] = "** No warnings have occurred";
+};
+String S_INCLUDE_FILE_WARNINGS_DETECTED
+{
+ Text[ en-US ] = "** ($Arg1) warnings occurred during initialization";
+};
+String S_NO_INCLUDE_FILE_WARNINGS_DETECTED
+{
+ Text[ en-US ] = "** No warnings occurred during initialization";
+};
+String S_UNKNOWN_SLOT_CONTROL
+{
+ Text[ en-US ] = "Slot/Control unknown :\"($Arg1)\"";
+};
+String S_RETURN_SEQUENCE_MISSMATCH
+{
+ Text[ en-US ] = "Return Stream has wrong sequence: ($Arg1) instead of ($Arg2)";
+};
+String S_RETURNED_VALUE_ID_MISSMATCH
+{
+ Text[ en-US ] = "Return value received but different Id expected";
+};
+String S_RETURNED_VALUE_NO_RECEIVER
+{
+ Text[ en-US ] = "Return value received but no receiver defined";
+};
+String S_UNKNOWN_METHOD
+{
+ Text[ en-US ] = "Unknown method on object :($Arg1).($Arg2)";
+};
+/*
+String
+{
+ Text[ en-US ] = ;
+};
+String
+{
+ Text[ en-US ] = ;
+};
+String
+{
+ Text[ en-US ] = ;
+};
+String
+{
+ Text[ en-US ] = ;
+};
+*/
+
diff --git a/basic/source/basmgr/basicmanagerrepository.cxx b/basic/source/basmgr/basicmanagerrepository.cxx
new file mode 100644
index 000000000000..f6a16ffa80c0
--- /dev/null
+++ b/basic/source/basmgr/basicmanagerrepository.cxx
@@ -0,0 +1,641 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+#include <basic/basicmanagerrepository.hxx>
+#include <basic/basmgr.hxx>
+#include "scriptcont.hxx"
+#include "dlgcont.hxx"
+#include <basic/sbuno.hxx>
+#include "sbintern.hxx"
+
+/** === begin UNO includes === **/
+#include <com/sun/star/beans/XPropertySet.hpp>
+#include <com/sun/star/document/XStorageBasedDocument.hpp>
+#include <com/sun/star/document/XEmbeddedScripts.hpp>
+/** === end UNO includes === **/
+#include <svtools/ehdl.hxx>
+#include <svtools/sfxecode.hxx>
+#include <unotools/pathoptions.hxx>
+#include <svl/smplhint.hxx>
+#include <vcl/svapp.hxx>
+#include <tools/debug.hxx>
+#include <tools/diagnose_ex.h>
+#include <tools/urlobj.hxx>
+#include <comphelper/stl_types.hxx>
+#include <comphelper/processfactory.hxx>
+#include <comphelper/documentinfo.hxx>
+#include <unotools/eventlisteneradapter.hxx>
+
+#ifndef INCLUDED_OSL_DOUBLECHECKEDLOCKING_H
+#include <rtl/instance.hxx>
+#endif
+
+#include <map>
+
+//........................................................................
+namespace basic
+{
+//........................................................................
+
+ /** === begin UNO using === **/
+ using ::com::sun::star::uno::Reference;
+ using ::com::sun::star::frame::XModel;
+ using ::com::sun::star::uno::XInterface;
+ using ::com::sun::star::uno::UNO_QUERY;
+ using ::com::sun::star::embed::XStorage;
+ using ::com::sun::star::script::XPersistentLibraryContainer;
+ using ::com::sun::star::uno::Any;
+ using ::com::sun::star::lang::XMultiServiceFactory;
+ using ::com::sun::star::uno::UNO_QUERY_THROW;
+ using ::com::sun::star::beans::XPropertySet;
+ using ::com::sun::star::uno::Exception;
+ using ::com::sun::star::document::XStorageBasedDocument;
+ using ::com::sun::star::lang::XComponent;
+ using ::com::sun::star::document::XEmbeddedScripts;
+ /** === end UNO using === **/
+
+ typedef BasicManager* BasicManagerPointer;
+ typedef ::std::map< Reference< XInterface >, BasicManagerPointer, ::comphelper::OInterfaceCompare< XInterface > > BasicManagerStore;
+
+ typedef ::std::vector< BasicManagerCreationListener* > CreationListeners;
+
+ //====================================================================
+ //= BasicManagerCleaner
+ //====================================================================
+ /// is the only instance which is allowed to delete a BasicManager instance
+ class BasicManagerCleaner
+ {
+ public:
+ static void deleteBasicManager( BasicManager*& _rpManager )
+ {
+ delete _rpManager;
+ _rpManager = NULL;
+ }
+ };
+
+ //====================================================================
+ //= ImplRepository
+ //====================================================================
+ class ImplRepository : public ::utl::OEventListenerAdapter, public SfxListener
+ {
+ private:
+ friend struct CreateImplRepository;
+ ImplRepository();
+
+ private:
+ ::osl::Mutex m_aMutex;
+ BasicManagerStore m_aStore;
+ CreationListeners m_aCreationListeners;
+
+ public:
+ static ImplRepository& Instance();
+
+ BasicManager* getDocumentBasicManager( const Reference< XModel >& _rxDocumentModel );
+ BasicManager* getApplicationBasicManager( bool _bCreate );
+ void setApplicationBasicManager( BasicManager* _pBasicManager );
+ void registerCreationListener( BasicManagerCreationListener& _rListener );
+ void revokeCreationListener( BasicManagerCreationListener& _rListener );
+
+ private:
+ /** retrieves the location at which the BasicManager for the given model
+ is stored.
+
+ If previously, the BasicManager for this model has never been requested,
+ then the model is added to the map, with an initial NULL BasicManager.
+
+ @param _rxDocumentModel
+ the model whose BasicManager's location is to be retrieved. Must not be <NULL/>.
+
+ @precond
+ our mutex is locked
+ */
+ BasicManagerPointer&
+ impl_getLocationForModel( const Reference< XModel >& _rxDocumentModel );
+
+ /** creates a new BasicManager instance for the given model
+ */
+ BasicManagerPointer
+ impl_createManagerForModel( const Reference< XModel >& _rxDocumentModel );
+
+ /** creates the application-wide BasicManager
+ */
+ BasicManagerPointer impl_createApplicationBasicManager();
+
+ /** notifies all listeners which expressed interest in the creation of BasicManager instances.
+ */
+ void impl_notifyCreationListeners(
+ const Reference< XModel >& _rxDocumentModel,
+ BasicManager& _rManager
+ );
+
+ /** retrieves the current storage of a given document
+
+ @param _rxDocument
+ the document whose storage is to be retrieved.
+
+ @param _out_rStorage
+ takes the storage upon successful return. Note that this might be <NULL/> even
+ if <TRUE/> is returned. In this case, the document has not yet been saved.
+
+ @return
+ <TRUE/> if the storage could be successfully retrieved (in which case
+ <arg>_out_rStorage</arg> might or might not be <NULL/>), <FALSE/> otherwise.
+ In the latter case, processing this document should stop.
+ */
+ bool impl_getDocumentStorage_nothrow( const Reference< XModel >& _rxDocument, Reference< XStorage >& _out_rStorage );
+
+ /** retrieves the containers for Basic and Dialog libraries for a given document
+
+ @param _rxDocument
+ the document whose containers are to be retrieved.
+
+ @param _out_rxBasicLibraries
+ takes the basic library container upon successful return
+
+ @param _out_rxDialogLibraries
+ takes the dialog library container upon successful return
+
+ @return
+ <TRUE/> if and only if both containers exist, and could successfully be retrieved
+ */
+ bool impl_getDocumentLibraryContainers_nothrow(
+ const Reference< XModel >& _rxDocument,
+ Reference< XPersistentLibraryContainer >& _out_rxBasicLibraries,
+ Reference< XPersistentLibraryContainer >& _out_rxDialogLibraries
+ );
+
+ /** initializes the given library containers, which belong to a document
+ */
+ void impl_initDocLibraryContainers_nothrow(
+ const Reference< XPersistentLibraryContainer >& _rxBasicLibraries,
+ const Reference< XPersistentLibraryContainer >& _rxDialogLibraries
+ );
+
+ // OEventListenerAdapter overridables
+ virtual void _disposing( const ::com::sun::star::lang::EventObject& _rSource );
+
+ // SfxListener overridables
+ virtual void Notify( SfxBroadcaster& _rBC, const SfxHint& _rHint );
+
+ /** removes the Model/BasicManager pair given by iterator from our store
+ */
+ void impl_removeFromRepository( BasicManagerStore::iterator _pos );
+
+ private:
+ StarBASIC* impl_getDefaultAppBasicLibrary();
+ };
+
+ //====================================================================
+ //= CreateImplRepository
+ //====================================================================
+ struct CreateImplRepository
+ {
+ ImplRepository* operator()()
+ {
+ static ImplRepository* pRepository = new ImplRepository;
+ return pRepository;
+ }
+ };
+
+
+ //====================================================================
+ //= ImplRepository
+ //====================================================================
+ //--------------------------------------------------------------------
+ ImplRepository::ImplRepository()
+ {
+ }
+
+ //--------------------------------------------------------------------
+ ImplRepository& ImplRepository::Instance()
+ {
+ return *rtl_Instance< ImplRepository, CreateImplRepository, ::osl::MutexGuard, ::osl::GetGlobalMutex >::
+ create( CreateImplRepository(), ::osl::GetGlobalMutex() );
+ }
+
+ //--------------------------------------------------------------------
+ BasicManager* ImplRepository::getDocumentBasicManager( const Reference< XModel >& _rxDocumentModel )
+ {
+ ::osl::MutexGuard aGuard( m_aMutex );
+
+ BasicManagerPointer& pBasicManager = impl_getLocationForModel( _rxDocumentModel );
+ if ( pBasicManager == NULL )
+ pBasicManager = impl_createManagerForModel( _rxDocumentModel );
+
+ return pBasicManager;
+ }
+
+ //--------------------------------------------------------------------
+ BasicManager* ImplRepository::getApplicationBasicManager( bool _bCreate )
+ {
+ ::osl::MutexGuard aGuard( m_aMutex );
+
+ BasicManager* pAppManager = GetSbData()->pAppBasMgr;
+ if ( ( pAppManager == NULL ) && _bCreate )
+ pAppManager = impl_createApplicationBasicManager();
+
+ return pAppManager;
+ }
+
+ //--------------------------------------------------------------------
+ void ImplRepository::setApplicationBasicManager( BasicManager* _pBasicManager )
+ {
+ ::osl::MutexGuard aGuard( m_aMutex );
+
+ BasicManager* pPreviousManager = getApplicationBasicManager( false );
+ BasicManagerCleaner::deleteBasicManager( pPreviousManager );
+
+ GetSbData()->pAppBasMgr = _pBasicManager;
+ }
+
+ //--------------------------------------------------------------------
+ BasicManager* ImplRepository::impl_createApplicationBasicManager()
+ {
+ ::osl::MutexGuard aGuard( m_aMutex );
+ OSL_PRECOND( getApplicationBasicManager( false ) == NULL, "ImplRepository::impl_createApplicationBasicManager: there already is one!" );
+
+ // Determine Directory
+ SvtPathOptions aPathCFG;
+ String aAppBasicDir( aPathCFG.GetBasicPath() );
+ if ( !aAppBasicDir.Len() )
+ aPathCFG.SetBasicPath( String::CreateFromAscii("$(prog)") );
+
+ // #58293# soffice.new search only in user dir => first dir
+ String aAppFirstBasicDir = aAppBasicDir.GetToken(1);
+
+ // Create basic and load it
+ // MT: #47347# AppBasicDir is now a PATH
+ INetURLObject aAppBasic( SvtPathOptions().SubstituteVariable( String::CreateFromAscii("$(progurl)") ) );
+ aAppBasic.insertName( Application::GetAppName() );
+
+ BasicManager* pBasicManager = new BasicManager( new StarBASIC, &aAppBasicDir );
+ setApplicationBasicManager( pBasicManager );
+
+ // Als Destination das erste Dir im Pfad:
+ String aFileName( aAppBasic.getName() );
+ aAppBasic = INetURLObject( aAppBasicDir.GetToken(1) );
+ DBG_ASSERT( aAppBasic.GetProtocol() != INET_PROT_NOT_VALID, "Invalid URL!" );
+ aAppBasic.insertName( aFileName );
+ pBasicManager->SetStorageName( aAppBasic.PathToFileName() );
+
+ // Basic container
+ SfxScriptLibraryContainer* pBasicCont = new SfxScriptLibraryContainer( Reference< XStorage >() );
+ Reference< XPersistentLibraryContainer > xBasicCont( pBasicCont );
+ pBasicCont->setBasicManager( pBasicManager );
+
+ // Dialog container
+ SfxDialogLibraryContainer* pDialogCont = new SfxDialogLibraryContainer( Reference< XStorage >() );
+ Reference< XPersistentLibraryContainer > xDialogCont( pDialogCont );
+
+ LibraryContainerInfo aInfo( xBasicCont, xDialogCont, static_cast< OldBasicPassword* >( pBasicCont ) );
+ pBasicManager->SetLibraryContainerInfo( aInfo );
+
+ // global constants
+
+ // StarDesktop
+ Reference< XMultiServiceFactory > xSMgr = ::comphelper::getProcessServiceFactory();
+ pBasicManager->SetGlobalUNOConstant(
+ "StarDesktop",
+ makeAny( xSMgr->createInstance( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.frame.Desktop" ) ) ) )
+ );
+
+ // (BasicLibraries and DialogLibraries have automatically been added in SetLibraryContainerInfo)
+
+ // notify
+ impl_notifyCreationListeners( NULL, *pBasicManager );
+
+ // outta here
+ return pBasicManager;
+ }
+
+ //--------------------------------------------------------------------
+ void ImplRepository::registerCreationListener( BasicManagerCreationListener& _rListener )
+ {
+ ::osl::MutexGuard aGuard( m_aMutex );
+ m_aCreationListeners.push_back( &_rListener );
+ }
+
+ //--------------------------------------------------------------------
+ void ImplRepository::revokeCreationListener( BasicManagerCreationListener& _rListener )
+ {
+ ::osl::MutexGuard aGuard( m_aMutex );
+ CreationListeners::iterator pos = ::std::find( m_aCreationListeners.begin(), m_aCreationListeners.end(), &_rListener );
+ if ( pos != m_aCreationListeners.end() )
+ m_aCreationListeners.erase( pos );
+ else {
+ DBG_ERROR( "ImplRepository::revokeCreationListener: listener is not registered!" );
+ }
+ }
+
+ //--------------------------------------------------------------------
+ void ImplRepository::impl_notifyCreationListeners( const Reference< XModel >& _rxDocumentModel, BasicManager& _rManager )
+ {
+ for ( CreationListeners::const_iterator loop = m_aCreationListeners.begin();
+ loop != m_aCreationListeners.end();
+ ++loop
+ )
+ {
+ (*loop)->onBasicManagerCreated( _rxDocumentModel, _rManager );
+ }
+ }
+
+ //--------------------------------------------------------------------
+ StarBASIC* ImplRepository::impl_getDefaultAppBasicLibrary()
+ {
+ BasicManager* pAppManager = getApplicationBasicManager( true );
+
+ StarBASIC* pAppBasic = pAppManager ? pAppManager->GetLib(0) : NULL;
+ DBG_ASSERT( pAppBasic != NULL, "impl_getApplicationBasic: unable to determine the default application's Basic library!" );
+ return pAppBasic;
+ }
+
+ //--------------------------------------------------------------------
+ BasicManagerPointer& ImplRepository::impl_getLocationForModel( const Reference< XModel >& _rxDocumentModel )
+ {
+ Reference< XInterface > xNormalized( _rxDocumentModel, UNO_QUERY );
+ DBG_ASSERT( xNormalized.is(), "ImplRepository::impl_getLocationForModel: invalid model!" );
+
+ BasicManagerPointer& location = m_aStore[ xNormalized ];
+ return location;
+ }
+
+ //--------------------------------------------------------------------
+ void ImplRepository::impl_initDocLibraryContainers_nothrow( const Reference< XPersistentLibraryContainer >& _rxBasicLibraries, const Reference< XPersistentLibraryContainer >& _rxDialogLibraries )
+ {
+ OSL_PRECOND( _rxBasicLibraries.is() && _rxDialogLibraries.is(),
+ "ImplRepository::impl_initDocLibraryContainers_nothrow: illegal library containers, this will crash!" );
+
+ try
+ {
+ // ensure there's a standard library in the basic container
+ ::rtl::OUString aStdLibName( RTL_CONSTASCII_USTRINGPARAM( "Standard" ) );
+ if ( !_rxBasicLibraries->hasByName( aStdLibName ) )
+ _rxBasicLibraries->createLibrary( aStdLibName );
+ // as well as in the dialog container
+ if ( !_rxDialogLibraries->hasByName( aStdLibName ) )
+ _rxDialogLibraries->createLibrary( aStdLibName );
+ }
+ catch( const Exception& )
+ {
+ DBG_UNHANDLED_EXCEPTION();
+ }
+ }
+
+ //--------------------------------------------------------------------
+ BasicManagerPointer ImplRepository::impl_createManagerForModel( const Reference< XModel >& _rxDocumentModel )
+ {
+ StarBASIC* pAppBasic = impl_getDefaultAppBasicLibrary();
+
+ BasicManager* pBasicManager( NULL );
+ Reference< XStorage > xStorage;
+ if ( !impl_getDocumentStorage_nothrow( _rxDocumentModel, xStorage ) )
+ // the document is not able to provide the storage it is based on.
+ return pBasicManager;
+
+ Reference< XPersistentLibraryContainer > xBasicLibs;
+ Reference< XPersistentLibraryContainer > xDialogLibs;
+ if ( !impl_getDocumentLibraryContainers_nothrow( _rxDocumentModel, xBasicLibs, xDialogLibs ) )
+ // the document does not have BasicLibraries and DialogLibraries
+ return pBasicManager;
+
+ if ( xStorage.is() )
+ {
+ // load BASIC-manager
+ SfxErrorContext aErrContext( ERRCTX_SFX_LOADBASIC,
+ ::comphelper::DocumentInfo::getDocumentTitle( _rxDocumentModel ) );
+ String aAppBasicDir = SvtPathOptions().GetBasicPath();
+
+ // Storage and BaseURL are only needed by binary documents!
+ SotStorageRef xDummyStor = new SotStorage( ::rtl::OUString() );
+ pBasicManager = new BasicManager( *xDummyStor, String() /* TODO/LATER: xStorage */,
+ pAppBasic,
+ &aAppBasicDir, TRUE );
+ if ( pBasicManager->HasErrors() )
+ {
+ // handle errors
+ BasicError* pErr = pBasicManager->GetFirstError();
+ while ( pErr )
+ {
+ // show message to user
+ if ( ERRCODE_BUTTON_CANCEL == ErrorHandler::HandleError( pErr->GetErrorId() ) )
+ {
+ // user wants to break loading of BASIC-manager
+ BasicManagerCleaner::deleteBasicManager( pBasicManager );
+ xStorage.clear();
+ break;
+ }
+ pErr = pBasicManager->GetNextError();
+ }
+ }
+ }
+
+ // not loaded?
+ if ( !xStorage.is() )
+ {
+ // create new BASIC-manager
+ StarBASIC* pBasic = new StarBASIC( pAppBasic );
+ pBasic->SetFlag( SBX_EXTSEARCH );
+ pBasicManager = new BasicManager( pBasic, NULL, TRUE );
+ }
+
+ // knit the containers with the BasicManager
+ LibraryContainerInfo aInfo( xBasicLibs, xDialogLibs, dynamic_cast< OldBasicPassword* >( xBasicLibs.get() ) );
+ OSL_ENSURE( aInfo.mpOldBasicPassword, "ImplRepository::impl_createManagerForModel: wrong BasicLibraries implementation!" );
+ pBasicManager->SetLibraryContainerInfo( aInfo );
+ //pBasicCont->setBasicManager( pBasicManager );
+ // that's not needed anymore today. The containers will retrieve their associated
+ // BasicManager from the BasicManagerRepository, when needed.
+
+ // initialize the containers
+ impl_initDocLibraryContainers_nothrow( xBasicLibs, xDialogLibs );
+
+ // damit auch Dialoge etc. 'qualifiziert' angesprochen werden k"onnen
+ pBasicManager->GetLib(0)->SetParent( pAppBasic );
+
+ // global properties in the document's Basic
+ pBasicManager->SetGlobalUNOConstant( "ThisComponent", makeAny( _rxDocumentModel ) );
+
+ // notify
+ impl_notifyCreationListeners( _rxDocumentModel, *pBasicManager );
+
+ // register as listener for this model being disposed/closed
+ Reference< XComponent > xDocumentComponent( _rxDocumentModel, UNO_QUERY );
+ OSL_ENSURE( xDocumentComponent.is(), "ImplRepository::impl_createManagerForModel: the document must be an XComponent!" );
+ startComponentListening( xDocumentComponent );
+
+ // register as listener for the BasicManager being destroyed
+ StartListening( *pBasicManager );
+
+ return pBasicManager;
+ }
+
+ //--------------------------------------------------------------------
+ bool ImplRepository::impl_getDocumentStorage_nothrow( const Reference< XModel >& _rxDocument, Reference< XStorage >& _out_rStorage )
+ {
+ _out_rStorage.clear();
+ try
+ {
+ Reference< XStorageBasedDocument > xStorDoc( _rxDocument, UNO_QUERY_THROW );
+ _out_rStorage.set( xStorDoc->getDocumentStorage() );
+ }
+ catch( const Exception& )
+ {
+ DBG_UNHANDLED_EXCEPTION();
+ return false;
+ }
+ return true;
+ }
+
+ //--------------------------------------------------------------------
+ bool ImplRepository::impl_getDocumentLibraryContainers_nothrow( const Reference< XModel >& _rxDocument,
+ Reference< XPersistentLibraryContainer >& _out_rxBasicLibraries, Reference< XPersistentLibraryContainer >& _out_rxDialogLibraries )
+ {
+ _out_rxBasicLibraries.clear();
+ _out_rxDialogLibraries.clear();
+ try
+ {
+ Reference< XEmbeddedScripts > xScripts( _rxDocument, UNO_QUERY_THROW );
+ _out_rxBasicLibraries.set( xScripts->getBasicLibraries(), UNO_QUERY_THROW );
+ _out_rxDialogLibraries.set( xScripts->getDialogLibraries(), UNO_QUERY_THROW );
+ }
+ catch( const Exception& )
+ {
+ DBG_UNHANDLED_EXCEPTION();
+ }
+ return _out_rxBasicLibraries.is() && _out_rxDialogLibraries.is();
+ }
+
+ //--------------------------------------------------------------------
+ void ImplRepository::impl_removeFromRepository( BasicManagerStore::iterator _pos )
+ {
+ OSL_PRECOND( _pos != m_aStore.end(), "ImplRepository::impl_removeFromRepository: invalid position!" );
+
+ BasicManager* pManager = _pos->second;
+
+ // *first* remove from map (else Notify won't work properly)
+ m_aStore.erase( _pos );
+
+ // *then* delete the BasicManager
+ EndListening( *pManager );
+ BasicManagerCleaner::deleteBasicManager( pManager );
+ }
+
+ //--------------------------------------------------------------------
+ void ImplRepository::_disposing( const ::com::sun::star::lang::EventObject& _rSource )
+ {
+ ::osl::MutexGuard aGuard( m_aMutex );
+
+ Reference< XInterface > xNormalizedSource( _rSource.Source, UNO_QUERY );
+ #if OSL_DEBUG_LEVEL > 0
+ bool bFound = false;
+ #endif
+
+ for ( BasicManagerStore::iterator loop = m_aStore.begin();
+ loop != m_aStore.end();
+ ++loop
+ )
+ {
+ if ( loop->first.get() == xNormalizedSource.get() )
+ {
+ impl_removeFromRepository( loop );
+ #if OSL_DEBUG_LEVEL > 0
+ bFound = true;
+ #endif
+ break;
+ }
+ }
+
+ OSL_ENSURE( bFound, "ImplRepository::_disposing: where does this come from?" );
+ }
+
+ //--------------------------------------------------------------------
+ void ImplRepository::Notify( SfxBroadcaster& _rBC, const SfxHint& _rHint )
+ {
+ const SfxSimpleHint* pSimpleHint = dynamic_cast< const SfxSimpleHint* >( &_rHint );
+ if ( !pSimpleHint || ( pSimpleHint->GetId() != SFX_HINT_DYING ) )
+ // not interested in
+ return;
+
+ BasicManager* pManager = dynamic_cast< BasicManager* >( &_rBC );
+ OSL_ENSURE( pManager, "ImplRepository::Notify: where does this come from?" );
+
+ for ( BasicManagerStore::iterator loop = m_aStore.begin();
+ loop != m_aStore.end();
+ ++loop
+ )
+ {
+ if ( loop->second == pManager )
+ {
+ // a BasicManager which is still in our repository is being deleted.
+ // That's bad, since by definition, we *own* all instances in our
+ // repository.
+ OSL_ENSURE( false, "ImplRepository::Notify: nobody should tamper with the managers, except ourself!" );
+ m_aStore.erase( loop );
+ break;
+ }
+ }
+ }
+
+ //====================================================================
+ //= BasicManagerRepository
+ //====================================================================
+ //--------------------------------------------------------------------
+ BasicManager* BasicManagerRepository::getDocumentBasicManager( const Reference< XModel >& _rxDocumentModel )
+ {
+ return ImplRepository::Instance().getDocumentBasicManager( _rxDocumentModel );
+ }
+
+ //--------------------------------------------------------------------
+ BasicManager* BasicManagerRepository::getApplicationBasicManager( bool _bCreate )
+ {
+ return ImplRepository::Instance().getApplicationBasicManager( _bCreate );
+ }
+
+ //--------------------------------------------------------------------
+ void BasicManagerRepository::resetApplicationBasicManager()
+ {
+ return ImplRepository::Instance().setApplicationBasicManager( NULL );
+ }
+
+ //--------------------------------------------------------------------
+ void BasicManagerRepository::registerCreationListener( BasicManagerCreationListener& _rListener )
+ {
+ ImplRepository::Instance().registerCreationListener( _rListener );
+ }
+
+ //--------------------------------------------------------------------
+ void BasicManagerRepository::revokeCreationListener( BasicManagerCreationListener& _rListener )
+ {
+ ImplRepository::Instance().revokeCreationListener( _rListener );
+ }
+
+//........................................................................
+} // namespace basic
+//........................................................................
+
diff --git a/basic/source/basmgr/basmgr.cxx b/basic/source/basmgr/basmgr.cxx
new file mode 100644
index 000000000000..84763468e64c
--- /dev/null
+++ b/basic/source/basmgr/basmgr.cxx
@@ -0,0 +1,2490 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+#include <tools/stream.hxx>
+#include <sot/storage.hxx>
+#include <tools/urlobj.hxx>
+#include <svl/smplhint.hxx>
+#include <vcl/svapp.hxx>
+#include <vcl/window.hxx>
+#include <vcl/wrkwin.hxx>
+#include <vcl/msgbox.hxx>
+#include <basic/sbx.hxx>
+#include <sot/storinfo.hxx>
+#include <unotools/pathoptions.hxx>
+#include <tools/debug.hxx>
+#include <tools/diagnose_ex.h>
+#include <basic/sbmod.hxx>
+#include <basic/sbobjmod.hxx>
+
+#include <basic/sbuno.hxx>
+#include <basic/basmgr.hxx>
+#include <sbunoobj.hxx>
+#include "basrid.hxx"
+#include "sbintern.hxx"
+#include <sb.hrc>
+
+
+#define LIB_SEP 0x01
+#define LIBINFO_SEP 0x02
+#define LIBINFO_ID 0x1491
+#define PASSWORD_MARKER 0x31452134
+
+
+// Library API, implemented for XML import/export
+
+#include <com/sun/star/container/XNameContainer.hpp>
+#include <com/sun/star/container/XContainer.hpp>
+#include <com/sun/star/script/XStarBasicAccess.hpp>
+#include <com/sun/star/script/XStarBasicModuleInfo.hpp>
+#include <com/sun/star/script/XStarBasicDialogInfo.hpp>
+#include <com/sun/star/script/XStarBasicLibraryInfo.hpp>
+#include <com/sun/star/script/XLibraryContainerPassword.hpp>
+#include <com/sun/star/script/ModuleInfo.hpp>
+#include <com/sun/star/script/vba/XVBACompatibility.hpp>
+#include <com/sun/star/script/vba/XVBAModuleInfo.hpp>
+
+#include <cppuhelper/implbase1.hxx>
+
+using com::sun::star::uno::Reference;
+using namespace com::sun::star::container;
+using namespace com::sun::star::uno;
+using namespace com::sun::star::lang;
+using namespace com::sun::star::script;
+using namespace cppu;
+
+typedef WeakImplHelper1< XNameContainer > NameContainerHelper;
+typedef WeakImplHelper1< XStarBasicModuleInfo > ModuleInfoHelper;
+typedef WeakImplHelper1< XStarBasicDialogInfo > DialogInfoHelper;
+typedef WeakImplHelper1< XStarBasicLibraryInfo > LibraryInfoHelper;
+typedef WeakImplHelper1< XStarBasicAccess > StarBasicAccessHelper;
+
+
+
+#define CURR_VER 2
+
+// Version 1
+// ULONG nEndPos
+// USHORT nId
+// USHORT nVer
+// BOOL bDoLoad
+// String LibName
+// String AbsStorageName
+// String RelStorageName
+// Version 2
+// + BOOL bReference
+
+static const char* szStdLibName = "Standard";
+static const char szBasicStorage[] = "StarBASIC";
+static const char* szOldManagerStream = "BasicManager";
+static const char szManagerStream[] = "BasicManager2";
+static const char* szImbedded = "LIBIMBEDDED";
+static const char* szCryptingKey = "CryptedBasic";
+static const char* szScriptLanguage = "StarBasic";
+
+TYPEINIT1( BasicManager, SfxBroadcaster );
+DBG_NAME( BasicManager );
+
+StreamMode eStreamReadMode = STREAM_READ | STREAM_NOCREATE | STREAM_SHARE_DENYALL;
+StreamMode eStorageReadMode = STREAM_READ | STREAM_SHARE_DENYWRITE;
+
+DECLARE_LIST( BasErrorLst, BasicError* )
+
+//----------------------------------------------------------------------------
+// BasicManager impl data
+struct BasicManagerImpl
+{
+ LibraryContainerInfo maContainerInfo;
+
+ // Save stream data
+ SvMemoryStream* mpManagerStream;
+ SvMemoryStream** mppLibStreams;
+ sal_Int32 mnLibStreamCount;
+ sal_Bool mbModifiedByLibraryContainer;
+ sal_Bool mbError;
+
+ BasicManagerImpl( void )
+ : mpManagerStream( NULL )
+ , mppLibStreams( NULL )
+ , mnLibStreamCount( 0 )
+ , mbModifiedByLibraryContainer( sal_False )
+ , mbError( sal_False )
+ {}
+ ~BasicManagerImpl();
+};
+
+BasicManagerImpl::~BasicManagerImpl()
+{
+ delete mpManagerStream;
+ if( mppLibStreams )
+ {
+ for( sal_Int32 i = 0 ; i < mnLibStreamCount ; i++ )
+ delete mppLibStreams[i];
+ delete[] mppLibStreams;
+ }
+}
+
+//============================================================================
+// BasMgrContainerListenerImpl
+//============================================================================
+
+typedef ::cppu::WeakImplHelper1< ::com::sun::star::container::XContainerListener > ContainerListenerHelper;
+
+class BasMgrContainerListenerImpl: public ContainerListenerHelper
+{
+ BasicManager* mpMgr;
+ ::rtl::OUString maLibName; // empty -> no lib, but lib container
+
+public:
+ BasMgrContainerListenerImpl( BasicManager* pMgr, ::rtl::OUString aLibName )
+ : mpMgr( pMgr )
+ , maLibName( aLibName ) {}
+
+ static void insertLibraryImpl( const Reference< XLibraryContainer >& xScriptCont, BasicManager* pMgr,
+ Any aLibAny, ::rtl::OUString aLibName );
+ static void addLibraryModulesImpl( BasicManager* pMgr, Reference< XNameAccess > xLibNameAccess,
+ ::rtl::OUString aLibName );
+
+
+ // XEventListener
+ virtual void SAL_CALL disposing( const ::com::sun::star::lang::EventObject& Source )
+ throw(::com::sun::star::uno::RuntimeException);
+
+ // XContainerListener
+ virtual void SAL_CALL elementInserted( const ::com::sun::star::container::ContainerEvent& Event )
+ throw(::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL elementReplaced( const ::com::sun::star::container::ContainerEvent& Event )
+ throw(::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL elementRemoved( const ::com::sun::star::container::ContainerEvent& Event )
+ throw(::com::sun::star::uno::RuntimeException);
+};
+
+
+//============================================================================
+// BasMgrContainerListenerImpl
+//============================================================================
+
+void BasMgrContainerListenerImpl::insertLibraryImpl( const Reference< XLibraryContainer >& xScriptCont,
+ BasicManager* pMgr, Any aLibAny, ::rtl::OUString aLibName )
+{
+ Reference< XNameAccess > xLibNameAccess;
+ aLibAny >>= xLibNameAccess;
+
+ if( !pMgr->GetLib( aLibName ) )
+ {
+ BasicManager* pBasMgr = static_cast< BasicManager* >( pMgr );
+#ifdef DBG_UTIL
+ StarBASIC* pLib =
+#endif
+ pBasMgr->CreateLibForLibContainer( aLibName, xScriptCont );
+ DBG_ASSERT( pLib, "XML Import: Basic library could not be created");
+ }
+
+ Reference< XContainer> xLibContainer( xLibNameAccess, UNO_QUERY );
+ if( xLibContainer.is() )
+ {
+ // Register listener for library
+ Reference< XContainerListener > xLibraryListener
+ = static_cast< XContainerListener* >
+ ( new BasMgrContainerListenerImpl( pMgr, aLibName ) );
+ xLibContainer->addContainerListener( xLibraryListener );
+ }
+
+ if( xScriptCont->isLibraryLoaded( aLibName ) )
+ {
+ addLibraryModulesImpl( pMgr, xLibNameAccess, aLibName );
+ }
+}
+
+
+void BasMgrContainerListenerImpl::addLibraryModulesImpl( BasicManager* pMgr,
+ Reference< XNameAccess > xLibNameAccess, ::rtl::OUString aLibName )
+{
+ Sequence< ::rtl::OUString > aModuleNames = xLibNameAccess->getElementNames();
+ sal_Int32 nModuleCount = aModuleNames.getLength();
+
+ StarBASIC* pLib = pMgr->GetLib( aLibName );
+ DBG_ASSERT( pLib, "BasMgrContainerListenerImpl::addLibraryModulesImpl: Unknown lib!");
+ if( pLib )
+ {
+ const ::rtl::OUString* pNames = aModuleNames.getConstArray();
+ for( sal_Int32 j = 0 ; j < nModuleCount ; j++ )
+ {
+ ::rtl::OUString aModuleName = pNames[ j ];
+ Any aElement = xLibNameAccess->getByName( aModuleName );
+ ::rtl::OUString aMod;
+ aElement >>= aMod;
+ Reference< vba::XVBAModuleInfo > xVBAModuleInfo( xLibNameAccess, UNO_QUERY );
+ if ( xVBAModuleInfo.is() && xVBAModuleInfo->hasModuleInfo( aModuleName ) )
+ {
+ ModuleInfo mInfo = xVBAModuleInfo->getModuleInfo( aModuleName );
+ OSL_TRACE("#addLibraryModulesImpl - aMod");
+ pLib->MakeModule32( aModuleName, mInfo, aMod );
+ }
+ else
+ pLib->MakeModule32( aModuleName, aMod );
+ }
+ }
+
+ pLib->SetModified( FALSE );
+}
+
+
+
+// XEventListener
+//----------------------------------------------------------------------------
+
+void SAL_CALL BasMgrContainerListenerImpl::disposing( const EventObject& Source )
+ throw( RuntimeException )
+{
+ (void)Source;
+}
+
+// XContainerListener
+//----------------------------------------------------------------------------
+
+void SAL_CALL BasMgrContainerListenerImpl::elementInserted( const ContainerEvent& Event )
+ throw( RuntimeException )
+{
+ sal_Bool bLibContainer = ( maLibName.getLength() == 0 );
+ ::rtl::OUString aName;
+ Event.Accessor >>= aName;
+
+ mpMgr->mpImpl->mbModifiedByLibraryContainer = sal_True;
+
+ if( bLibContainer )
+ {
+ Reference< XLibraryContainer > xScriptCont( Event.Source, UNO_QUERY );
+ insertLibraryImpl( xScriptCont, mpMgr, Event.Element, aName );
+ StarBASIC* pLib = mpMgr->GetLib( aName );
+ if ( pLib )
+ {
+ Reference< vba::XVBACompatibility > xVBACompat( xScriptCont, UNO_QUERY );
+ if ( xVBACompat.is() )
+ pLib->SetVBAEnabled( xVBACompat->getVBACompatibilityMode() );
+ }
+ }
+ else
+ {
+
+ StarBASIC* pLib = mpMgr->GetLib( maLibName );
+ DBG_ASSERT( pLib, "BasMgrContainerListenerImpl::elementInserted: Unknown lib!");
+ if( pLib )
+ {
+ SbModule* pMod = pLib->FindModule( aName );
+ if( !pMod )
+ {
+ ::rtl::OUString aMod;
+ Event.Element >>= aMod;
+ Reference< vba::XVBAModuleInfo > xVBAModuleInfo( Event.Source, UNO_QUERY );
+ if ( xVBAModuleInfo.is() && xVBAModuleInfo->hasModuleInfo( aName ) )
+ {
+ ModuleInfo mInfo = xVBAModuleInfo->getModuleInfo( aName );
+ pLib->MakeModule32( aName, mInfo, aMod );
+ }
+ else
+ pLib->MakeModule32( aName, aMod );
+ pLib->SetModified( FALSE );
+ }
+ }
+ }
+}
+
+//----------------------------------------------------------------------------
+
+void SAL_CALL BasMgrContainerListenerImpl::elementReplaced( const ContainerEvent& Event )
+ throw( RuntimeException )
+{
+ ::rtl::OUString aName;
+ Event.Accessor >>= aName;
+
+ mpMgr->mpImpl->mbModifiedByLibraryContainer = sal_True;
+
+ // Replace not possible for library container
+#ifdef DBG_UTIL
+ sal_Bool bLibContainer = ( maLibName.getLength() == 0 );
+#endif
+ DBG_ASSERT( !bLibContainer, "library container fired elementReplaced()");
+
+ StarBASIC* pLib = mpMgr->GetLib( maLibName );
+ if( pLib )
+ {
+ SbModule* pMod = pLib->FindModule( aName );
+ ::rtl::OUString aMod;
+ Event.Element >>= aMod;
+
+ if( pMod )
+ pMod->SetSource32( aMod );
+ else
+ pLib->MakeModule32( aName, aMod );
+
+ pLib->SetModified( FALSE );
+ }
+}
+
+//----------------------------------------------------------------------------
+
+void SAL_CALL BasMgrContainerListenerImpl::elementRemoved( const ContainerEvent& Event )
+ throw( RuntimeException )
+{
+ ::rtl::OUString aName;
+ Event.Accessor >>= aName;
+
+ mpMgr->mpImpl->mbModifiedByLibraryContainer = sal_True;
+
+ sal_Bool bLibContainer = ( maLibName.getLength() == 0 );
+ if( bLibContainer )
+ {
+ StarBASIC* pLib = mpMgr->GetLib( aName );
+ if( pLib )
+ {
+ USHORT nLibId = mpMgr->GetLibId( aName );
+ mpMgr->RemoveLib( nLibId, FALSE );
+ }
+ }
+ else
+ {
+ StarBASIC* pLib = mpMgr->GetLib( maLibName );
+ SbModule* pMod = pLib ? pLib->FindModule( aName ) : NULL;
+ if( pMod )
+ {
+ pLib->Remove( pMod );
+ pLib->SetModified( FALSE );
+ }
+ }
+}
+
+
+//=====================================================================
+
+class BasicErrorManager
+{
+private:
+ BasErrorLst aErrorList;
+
+public:
+ ~BasicErrorManager();
+
+ void Reset();
+ void InsertError( const BasicError& rError );
+
+ BOOL HasErrors() { return (BOOL)aErrorList.Count(); }
+ BasicError* GetFirstError() { return aErrorList.First(); }
+ BasicError* GetNextError() { return aErrorList.Next(); }
+};
+
+
+BasicErrorManager::~BasicErrorManager()
+{
+ Reset();
+}
+
+void BasicErrorManager::Reset()
+{
+ BasicError* pError = (BasicError*)aErrorList.First();
+ while ( pError )
+ {
+ delete pError;
+ pError = (BasicError*)aErrorList.Next();
+ }
+ aErrorList.Clear();
+}
+
+void BasicErrorManager::InsertError( const BasicError& rError )
+{
+ aErrorList.Insert( new BasicError( rError ), LIST_APPEND );
+}
+
+
+BasicError::BasicError()
+{
+ nErrorId = 0;
+ nReason = 0;
+}
+
+BasicError::BasicError( ULONG nId, USHORT nR, const String& rErrStr ) :
+ aErrStr( rErrStr )
+{
+ nErrorId = nId;
+ nReason = nR;
+}
+
+BasicError::BasicError( const BasicError& rErr ) :
+ aErrStr( rErr.aErrStr )
+{
+ nErrorId = rErr.nErrorId;
+ nReason = rErr.nReason;
+}
+
+
+class BasicLibInfo
+{
+private:
+ StarBASICRef xLib;
+ String aLibName;
+ String aStorageName; // String is sufficient, unique at runtime
+ String aRelStorageName;
+ String aPassword;
+
+ BOOL bDoLoad;
+ BOOL bReference;
+ BOOL bPasswordVerified;
+ BOOL bFoundInPath; // Must not relativated again!
+
+ // Lib represents library in new UNO library container
+ Reference< XLibraryContainer > mxScriptCont;
+
+public:
+ BasicLibInfo();
+ BasicLibInfo( const String& rStorageName );
+
+ BOOL IsReference() const { return bReference; }
+ BOOL& IsReference() { return bReference; }
+
+ BOOL IsExtern() const { return ! aStorageName.EqualsAscii(szImbedded); }
+
+ void SetStorageName( const String& rName ) { aStorageName = rName; }
+ const String& GetStorageName() const { return aStorageName; }
+
+ void SetRelStorageName( const String& rN ) { aRelStorageName = rN; }
+ const String& GetRelStorageName() const { return aRelStorageName; }
+ void CalcRelStorageName( const String& rMgrStorageName );
+
+ StarBASICRef GetLib() const
+ {
+ if( mxScriptCont.is() && mxScriptCont->hasByName( aLibName ) &&
+ !mxScriptCont->isLibraryLoaded( aLibName ) )
+ return StarBASICRef();
+ return xLib;
+ }
+ StarBASICRef& GetLibRef() { return xLib; }
+ void SetLib( StarBASIC* pBasic ) { xLib = pBasic; }
+
+ const String& GetLibName() const { return aLibName; }
+ void SetLibName( const String& rName ) { aLibName = rName; }
+
+ // Only temporary for Load/Save
+ BOOL DoLoad() { return bDoLoad; }
+
+ BOOL HasPassword() const { return aPassword.Len() != 0; }
+ const String& GetPassword() const { return aPassword; }
+ void SetPassword( const String& rNewPassword )
+ { aPassword = rNewPassword; }
+ BOOL IsPasswordVerified() const { return bPasswordVerified; }
+ void SetPasswordVerified() { bPasswordVerified = TRUE; }
+
+ BOOL IsFoundInPath() const { return bFoundInPath; }
+ void SetFoundInPath( BOOL bInPath ) { bFoundInPath = bInPath; }
+
+ void Store( SotStorageStream& rSStream, const String& rBasMgrStorageName, BOOL bUseOldReloadInfo );
+ static BasicLibInfo* Create( SotStorageStream& rSStream );
+
+ Reference< XLibraryContainer > GetLibraryContainer( void )
+ { return mxScriptCont; }
+ void SetLibraryContainer( const Reference< XLibraryContainer >& xScriptCont )
+ { mxScriptCont = xScriptCont; }
+};
+
+DECLARE_LIST( BasicLibsBase, BasicLibInfo* )
+
+class BasicLibs : public BasicLibsBase
+{
+public:
+ String aBasicLibPath; // TODO: Should be member of manager, but currently not incompatible
+};
+
+BasicLibInfo::BasicLibInfo()
+{
+ bReference = FALSE;
+ bPasswordVerified = FALSE;
+ bDoLoad = FALSE;
+ bFoundInPath = FALSE;
+ mxScriptCont = NULL;
+ aStorageName = String::CreateFromAscii(szImbedded);
+ aRelStorageName = String::CreateFromAscii(szImbedded);
+}
+
+BasicLibInfo::BasicLibInfo( const String& rStorageName )
+{
+ bReference = TRUE;
+ bPasswordVerified = FALSE;
+ bDoLoad = FALSE;
+ mxScriptCont = NULL;
+ aStorageName = rStorageName;
+}
+
+void BasicLibInfo::Store( SotStorageStream& rSStream, const String& rBasMgrStorageName, BOOL bUseOldReloadInfo )
+{
+ ULONG nStartPos = rSStream.Tell();
+ sal_uInt32 nEndPos = 0;
+
+ USHORT nId = LIBINFO_ID;
+ USHORT nVer = CURR_VER;
+
+ rSStream << nEndPos;
+ rSStream << nId;
+ rSStream << nVer;
+
+ String aCurStorageName = INetURLObject(rBasMgrStorageName, INET_PROT_FILE).GetMainURL( INetURLObject::NO_DECODE );
+ DBG_ASSERT(aCurStorageName.Len() != 0, "Bad storage name");
+
+ // If not set initialize StorageName
+ if ( aStorageName.Len() == 0 )
+ aStorageName = aCurStorageName;
+
+ // Load again?
+ BOOL bDoLoad_ = xLib.Is();
+ if ( bUseOldReloadInfo )
+ bDoLoad_ = DoLoad();
+ rSStream << bDoLoad_;
+
+ // The name of the lib...
+ rSStream.WriteByteString(GetLibName());
+
+ // Absolute path...
+ if ( ! GetStorageName().EqualsAscii(szImbedded) )
+ {
+ String aSName = INetURLObject( GetStorageName(), INET_PROT_FILE).GetMainURL( INetURLObject::NO_DECODE );
+ DBG_ASSERT(aSName.Len() != 0, "Bad storage name");
+ rSStream.WriteByteString( aSName );
+ }
+ else
+ rSStream.WriteByteString( szImbedded );
+
+ // Relative path...
+ if ( ( aStorageName == aCurStorageName ) || ( aStorageName.EqualsAscii(szImbedded) ) )
+ rSStream.WriteByteString( szImbedded );
+ else
+ {
+ // Do not determine the relative path if the file was only found in path:
+ // because the relative path would change and after moving the lib the
+ // the file cannot be found.
+ if ( !IsFoundInPath() )
+ CalcRelStorageName( aCurStorageName );
+ rSStream.WriteByteString(aRelStorageName);
+ }
+
+ // ------------------------------
+ // Version 2
+ // ------------------------------
+
+ // reference...
+ rSStream << bReference;
+
+ // ------------------------------
+ // End
+ // ------------------------------
+
+ nEndPos = rSStream.Tell();
+ rSStream.Seek( nStartPos );
+ rSStream << nEndPos;
+ rSStream.Seek( nEndPos );
+}
+
+BasicLibInfo* BasicLibInfo::Create( SotStorageStream& rSStream )
+{
+ BasicLibInfo* pInfo = new BasicLibInfo;
+
+ sal_uInt32 nEndPos;
+ USHORT nId;
+ USHORT nVer;
+
+ rSStream >> nEndPos;
+ rSStream >> nId;
+ rSStream >> nVer;
+
+ DBG_ASSERT( nId == LIBINFO_ID, "Keine BasicLibInfo !?" );
+ if( nId == LIBINFO_ID )
+ {
+ // Reload?
+ BOOL bDoLoad;
+ rSStream >> bDoLoad;
+ pInfo->bDoLoad = bDoLoad;
+
+ // The name of the lib...
+ String aName;
+ rSStream.ReadByteString(aName);
+ pInfo->SetLibName( aName );
+
+ // Absolute path...
+ String aStorageName;
+ rSStream.ReadByteString(aStorageName);
+ pInfo->SetStorageName( aStorageName );
+
+ // Relative path...
+ String aRelStorageName;
+ rSStream.ReadByteString(aRelStorageName);
+ pInfo->SetRelStorageName( aRelStorageName );
+
+ if ( nVer >= 2 )
+ {
+ BOOL bReferenz;
+ rSStream >> bReferenz;
+ pInfo->IsReference() = bReferenz;
+ }
+
+ rSStream.Seek( nEndPos );
+ }
+ return pInfo;
+}
+
+void BasicLibInfo::CalcRelStorageName( const String& rMgrStorageName )
+{
+ if ( rMgrStorageName.Len() )
+ {
+ INetURLObject aAbsURLObj( rMgrStorageName );
+ aAbsURLObj.removeSegment();
+ String aPath = aAbsURLObj.GetMainURL( INetURLObject::NO_DECODE );
+ UniString aRelURL = INetURLObject::GetRelURL( aPath, GetStorageName() );
+ SetRelStorageName( aRelURL );
+ }
+ else
+ SetRelStorageName( String() );
+}
+BasicManager::BasicManager( SotStorage& rStorage, const String& rBaseURL, StarBASIC* pParentFromStdLib, String* pLibPath, BOOL bDocMgr ) : mbDocMgr( bDocMgr )
+{
+ DBG_CTOR( BasicManager, 0 );
+
+ Init();
+
+ if( pLibPath )
+ pLibs->aBasicLibPath = *pLibPath;
+
+ String aStorName( rStorage.GetName() );
+ maStorageName = INetURLObject(aStorName, INET_PROT_FILE).GetMainURL( INetURLObject::NO_DECODE );
+
+ // #91251: Storage name not longer available for documents < 5.0
+ // Should be no real problem, because only relative storage names
+ // (links) can be affected.
+ // DBG_ASSERT( aStorName.Len(), "No Storage Name!" );
+ // DBG_ASSERT(aStorageName.Len() != 0, "Bad storage name");
+
+ // If there is no Manager Stream, no further actions are necessary
+ if ( rStorage.IsStream( String(RTL_CONSTASCII_USTRINGPARAM(szManagerStream)) ) )
+ {
+ LoadBasicManager( rStorage, rBaseURL );
+ // StdLib contains Parent:
+ StarBASIC* pStdLib = GetStdLib();
+ DBG_ASSERT( pStdLib, "Standard-Lib not loaded?" );
+ if ( !pStdLib )
+ {
+ // Should never happen, but if it happens we wont crash...
+ pStdLib = new StarBASIC( NULL, mbDocMgr );
+ BasicLibInfo* pStdLibInfo = pLibs->GetObject( 0 );
+ if ( !pStdLibInfo )
+ pStdLibInfo = CreateLibInfo();
+ pStdLibInfo->SetLib( pStdLib );
+ StarBASICRef xStdLib = pStdLibInfo->GetLib();
+ xStdLib->SetName( String::CreateFromAscii(szStdLibName) );
+ pStdLibInfo->SetLibName( String::CreateFromAscii(szStdLibName) );
+ xStdLib->SetFlag( SBX_DONTSTORE | SBX_EXTSEARCH );
+ xStdLib->SetModified( FALSE );
+ }
+ else
+ {
+ pStdLib->SetParent( pParentFromStdLib );
+ // The other get StdLib as parent:
+ for ( USHORT nBasic = 1; nBasic < GetLibCount(); nBasic++ )
+ {
+ StarBASIC* pBasic = GetLib( nBasic );
+ if ( pBasic )
+ {
+// pBasic->SetParent( pStdLib );
+ pStdLib->Insert( pBasic );
+ pBasic->SetFlag( SBX_EXTSEARCH );
+ }
+ }
+ // Modified through insert
+ pStdLib->SetModified( FALSE );
+ }
+
+ // #91626 Save all stream data to save it unmodified if basic isn't modified
+ // in an 6.0+ office. So also the old basic dialogs can be saved.
+ SotStorageStreamRef xManagerStream = rStorage.OpenSotStream
+ ( String(RTL_CONSTASCII_USTRINGPARAM(szManagerStream)), eStreamReadMode );
+ mpImpl->mpManagerStream = new SvMemoryStream();
+ *static_cast<SvStream*>(&xManagerStream) >> *mpImpl->mpManagerStream;
+
+ SotStorageRef xBasicStorage = rStorage.OpenSotStorage
+ ( String(RTL_CONSTASCII_USTRINGPARAM(szBasicStorage)), eStorageReadMode, FALSE );
+ if( xBasicStorage.Is() && !xBasicStorage->GetError() )
+ {
+ USHORT nLibs = GetLibCount();
+ mpImpl->mppLibStreams = new SvMemoryStream*[ nLibs ];
+ for( USHORT nL = 0; nL < nLibs; nL++ )
+ {
+ BasicLibInfo* pInfo = pLibs->GetObject( nL );
+ DBG_ASSERT( pInfo, "pInfo?!" );
+ SotStorageStreamRef xBasicStream = xBasicStorage->OpenSotStream( pInfo->GetLibName(), eStreamReadMode );
+ mpImpl->mppLibStreams[nL] = new SvMemoryStream();
+ *static_cast<SvStream*>(&xBasicStream) >> *( mpImpl->mppLibStreams[nL] );
+ }
+ }
+ else
+ mpImpl->mbError = sal_True;
+ }
+ else
+ {
+ ImpCreateStdLib( pParentFromStdLib );
+ if ( rStorage.IsStream( String::CreateFromAscii(szOldManagerStream) ) )
+ LoadOldBasicManager( rStorage );
+ }
+
+ bBasMgrModified = FALSE;
+}
+
+void copyToLibraryContainer( StarBASIC* pBasic, const LibraryContainerInfo& rInfo )
+{
+ Reference< XLibraryContainer > xScriptCont( rInfo.mxScriptCont.get() );
+ if ( !xScriptCont.is() )
+ return;
+
+ String aLibName = pBasic->GetName();
+ if( !xScriptCont->hasByName( aLibName ) )
+ xScriptCont->createLibrary( aLibName );
+
+ Any aLibAny = xScriptCont->getByName( aLibName );
+ Reference< XNameContainer > xLib;
+ aLibAny >>= xLib;
+ if ( !xLib.is() )
+ return;
+
+ USHORT nModCount = pBasic->GetModules()->Count();
+ for ( USHORT nMod = 0 ; nMod < nModCount ; nMod++ )
+ {
+ SbModule* pModule = (SbModule*)pBasic->GetModules()->Get( nMod );
+ DBG_ASSERT( pModule, "Modul nicht erhalten!" );
+
+ String aModName = pModule->GetName();
+ if( !xLib->hasByName( aModName ) )
+ {
+ ::rtl::OUString aSource = pModule->GetSource32();
+ Any aSourceAny;
+ aSourceAny <<= aSource;
+ xLib->insertByName( aModName, aSourceAny );
+ }
+ }
+}
+
+const Reference< XPersistentLibraryContainer >& BasicManager::GetDialogLibraryContainer() const
+{
+ return mpImpl->maContainerInfo.mxDialogCont;
+}
+
+const Reference< XPersistentLibraryContainer >& BasicManager::GetScriptLibraryContainer() const
+{
+ return mpImpl->maContainerInfo.mxScriptCont;
+}
+
+void BasicManager::SetLibraryContainerInfo( const LibraryContainerInfo& rInfo )
+{
+ mpImpl->maContainerInfo = rInfo;
+
+ Reference< XLibraryContainer > xScriptCont( mpImpl->maContainerInfo.mxScriptCont.get() );
+ StarBASIC* pStdLib = GetStdLib();
+ String aLibName = pStdLib->GetName();
+ if( xScriptCont.is() )
+ {
+ // Register listener for lib container
+ ::rtl::OUString aEmptyLibName;
+ Reference< XContainerListener > xLibContainerListener
+ = static_cast< XContainerListener* >
+ ( new BasMgrContainerListenerImpl( this, aEmptyLibName ) );
+
+ Reference< XContainer> xLibContainer( xScriptCont, UNO_QUERY );
+ xLibContainer->addContainerListener( xLibContainerListener );
+
+ Sequence< ::rtl::OUString > aScriptLibNames = xScriptCont->getElementNames();
+ const ::rtl::OUString* pScriptLibName = aScriptLibNames.getConstArray();
+ sal_Int32 i, nNameCount = aScriptLibNames.getLength();
+
+ if( nNameCount )
+ {
+ for( i = 0 ; i < nNameCount ; ++i, ++pScriptLibName )
+ {
+ Any aLibAny = xScriptCont->getByName( *pScriptLibName );
+
+ if ( pScriptLibName->equalsAscii( "Standard" ) )
+ xScriptCont->loadLibrary( *pScriptLibName );
+
+ BasMgrContainerListenerImpl::insertLibraryImpl
+ ( xScriptCont, this, aLibAny, *pScriptLibName );
+ }
+ }
+ else
+ {
+ // No libs? Maybe an 5.2 document already loaded
+ USHORT nLibs = GetLibCount();
+ for( USHORT nL = 0; nL < nLibs; nL++ )
+ {
+ BasicLibInfo* pBasLibInfo = pLibs->GetObject( nL );
+ StarBASIC* pLib = pBasLibInfo->GetLib();
+ if( !pLib )
+ {
+ BOOL bLoaded = ImpLoadLibary( pBasLibInfo, NULL, FALSE );
+ if( bLoaded )
+ pLib = pBasLibInfo->GetLib();
+ }
+ if( pLib )
+ {
+ copyToLibraryContainer( pLib, mpImpl->maContainerInfo );
+ if( pBasLibInfo->HasPassword() )
+ {
+ OldBasicPassword* pOldBasicPassword =
+ mpImpl->maContainerInfo.mpOldBasicPassword;
+ if( pOldBasicPassword )
+ {
+ pOldBasicPassword->setLibraryPassword
+ ( pLib->GetName(), pBasLibInfo->GetPassword() );
+ pBasLibInfo->SetPasswordVerified();
+ }
+ }
+ }
+ }
+
+ mpImpl->mbModifiedByLibraryContainer = sal_False;
+ }
+ }
+
+ SetGlobalUNOConstant( "BasicLibraries", makeAny( mpImpl->maContainerInfo.mxScriptCont ) );
+ SetGlobalUNOConstant( "DialogLibraries", makeAny( mpImpl->maContainerInfo.mxDialogCont ) );
+}
+
+BasicManager::BasicManager( StarBASIC* pSLib, String* pLibPath, BOOL bDocMgr ) : mbDocMgr( bDocMgr )
+{
+ DBG_CTOR( BasicManager, 0 );
+ Init();
+ DBG_ASSERT( pSLib, "BasicManager cannot be created with a NULL-Pointer!" );
+
+ if( pLibPath )
+ pLibs->aBasicLibPath = *pLibPath;
+
+ BasicLibInfo* pStdLibInfo = CreateLibInfo();
+ pStdLibInfo->SetLib( pSLib );
+ StarBASICRef xStdLib = pStdLibInfo->GetLib();
+ xStdLib->SetName( String::CreateFromAscii(szStdLibName));
+ pStdLibInfo->SetLibName( String::CreateFromAscii(szStdLibName) );
+ pSLib->SetFlag( SBX_DONTSTORE | SBX_EXTSEARCH );
+
+ // Save is only necessary if basic has changed
+ xStdLib->SetModified( FALSE );
+ bBasMgrModified = FALSE;
+}
+
+BasicManager::BasicManager()
+{
+ DBG_CTOR( BasicManager, 0 );
+ // This ctor may only be used to adapt relative paths for 'Save As'.
+ // There is no AppBasic so libs must not be loaded...
+ Init();
+}
+
+void BasicManager::ImpMgrNotLoaded( const String& rStorageName )
+{
+ // pErrInf is only destroyed if the error os processed by an
+ // ErrorHandler
+ StringErrorInfo* pErrInf = new StringErrorInfo( ERRCODE_BASMGR_MGROPEN, rStorageName, ERRCODE_BUTTON_OK );
+ pErrorMgr->InsertError( BasicError( *pErrInf, BASERR_REASON_OPENMGRSTREAM, rStorageName ) );
+
+ // Create a stdlib otherwise we crash!
+ BasicLibInfo* pStdLibInfo = CreateLibInfo();
+ pStdLibInfo->SetLib( new StarBASIC( NULL, mbDocMgr ) );
+ StarBASICRef xStdLib = pStdLibInfo->GetLib();
+ xStdLib->SetName( String::CreateFromAscii(szStdLibName) );
+ pStdLibInfo->SetLibName( String::CreateFromAscii(szStdLibName) );
+ xStdLib->SetFlag( SBX_DONTSTORE | SBX_EXTSEARCH );
+ xStdLib->SetModified( FALSE );
+}
+
+
+void BasicManager::ImpCreateStdLib( StarBASIC* pParentFromStdLib )
+{
+ BasicLibInfo* pStdLibInfo = CreateLibInfo();
+ StarBASIC* pStdLib = new StarBASIC( pParentFromStdLib, mbDocMgr );
+ pStdLibInfo->SetLib( pStdLib );
+ pStdLib->SetName( String::CreateFromAscii(szStdLibName) );
+ pStdLibInfo->SetLibName( String::CreateFromAscii(szStdLibName) );
+ pStdLib->SetFlag( SBX_DONTSTORE | SBX_EXTSEARCH );
+}
+
+
+void BasicManager::LoadBasicManager( SotStorage& rStorage, const String& rBaseURL, BOOL bLoadLibs )
+{
+ DBG_CHKTHIS( BasicManager, 0 );
+
+// StreamMode eStreamMode = STREAM_READ | STREAM_NOCREATE | STREAM_SHARE_DENYWRITE;
+
+ SotStorageStreamRef xManagerStream = rStorage.OpenSotStream
+ ( String(RTL_CONSTASCII_USTRINGPARAM(szManagerStream)), eStreamReadMode );
+
+ String aStorName( rStorage.GetName() );
+ // #i13114 removed, DBG_ASSERT( aStorName.Len(), "No Storage Name!" );
+
+ if ( !xManagerStream.Is() || xManagerStream->GetError() || ( xManagerStream->Seek( STREAM_SEEK_TO_END ) == 0 ) )
+ {
+ ImpMgrNotLoaded( aStorName );
+ return;
+ }
+
+ maStorageName = INetURLObject(aStorName, INET_PROT_FILE).GetMainURL( INetURLObject::NO_DECODE );
+ // #i13114 removed, DBG_ASSERT(aStorageName.Len() != 0, "Bad storage name");
+
+ String aRealStorageName = maStorageName; // for relative paths, can be modified through BaseURL
+
+ // If loaded from template, only BaseURL is used:
+ //String aBaseURL = INetURLObject::GetBaseURL();
+ if ( rBaseURL.Len() )
+ {
+ INetURLObject aObj( rBaseURL );
+ if ( aObj.GetProtocol() == INET_PROT_FILE )
+ aRealStorageName = aObj.PathToFileName();
+ }
+
+ xManagerStream->SetBufferSize( 1024 );
+ xManagerStream->Seek( STREAM_SEEK_TO_BEGIN );
+
+ sal_uInt32 nEndPos;
+ *xManagerStream >> nEndPos;
+
+ USHORT nLibs;
+ *xManagerStream >> nLibs;
+ // Plausi!
+ if( nLibs & 0xF000 )
+ {
+ DBG_ASSERT( !this, "BasicManager-Stream defect!" );
+ return;
+ }
+ for ( USHORT nL = 0; nL < nLibs; nL++ )
+ {
+ BasicLibInfo* pInfo = BasicLibInfo::Create( *xManagerStream );
+
+ // Correct absolute pathname if relative is existing.
+ // Always try relative first if there are two stands on disk
+ if ( pInfo->GetRelStorageName().Len() && ( ! pInfo->GetRelStorageName().EqualsAscii(szImbedded) ) )
+ {
+ INetURLObject aObj( aRealStorageName, INET_PROT_FILE );
+ aObj.removeSegment();
+ bool bWasAbsolute = FALSE;
+ aObj = aObj.smartRel2Abs( pInfo->GetRelStorageName(), bWasAbsolute );
+
+ //*** TODO: Replace if still necessary
+ /* if ( SfxContentHelper::Exists( aObj.GetMainURL() ) )
+ pInfo->SetStorageName( aObj.GetMainURL() );
+ else */
+ //*** TODO-End
+ if ( pLibs->aBasicLibPath.Len() )
+ {
+ // Search lib in path
+ String aSearchFile = pInfo->GetRelStorageName();
+ SvtPathOptions aPathCFG;
+ if( aPathCFG.SearchFile( aSearchFile, SvtPathOptions::PATH_BASIC ) )
+ {
+ pInfo->SetStorageName( aSearchFile );
+ pInfo->SetFoundInPath( TRUE );
+ }
+ }
+ }
+
+ pLibs->Insert( pInfo, LIST_APPEND );
+ // Libs from external files should be loaded only when necessary.
+ // But references are loaded at once, otherwise some big customers get into trouble
+ if ( bLoadLibs && pInfo->DoLoad() &&
+ ( ( !pInfo->IsExtern() ) || ( pInfo->IsReference() ) ) )
+ {
+ ImpLoadLibary( pInfo, &rStorage );
+ }
+ }
+
+ xManagerStream->Seek( nEndPos );
+ xManagerStream->SetBufferSize( 0 );
+ xManagerStream.Clear();
+}
+
+void BasicManager::LoadOldBasicManager( SotStorage& rStorage )
+{
+ DBG_CHKTHIS( BasicManager, 0 );
+
+// StreamMode eStreamMode = STREAM_READ | STREAM_NOCREATE | STREAM_SHARE_DENYWRITE;
+
+ SotStorageStreamRef xManagerStream = rStorage.OpenSotStream
+ ( String::CreateFromAscii(szOldManagerStream), eStreamReadMode );
+
+ String aStorName( rStorage.GetName() );
+ DBG_ASSERT( aStorName.Len(), "No Storage Name!" );
+
+ if ( !xManagerStream.Is() || xManagerStream->GetError() || ( xManagerStream->Seek( STREAM_SEEK_TO_END ) == 0 ) )
+ {
+ ImpMgrNotLoaded( aStorName );
+ return;
+ }
+
+ xManagerStream->SetBufferSize( 1024 );
+ xManagerStream->Seek( STREAM_SEEK_TO_BEGIN );
+ sal_uInt32 nBasicStartOff, nBasicEndOff;
+ *xManagerStream >> nBasicStartOff;
+ *xManagerStream >> nBasicEndOff;
+
+ DBG_ASSERT( !xManagerStream->GetError(), "Ungueltiger Manager-Stream!" );
+
+ xManagerStream->Seek( nBasicStartOff );
+ if( !ImplLoadBasic( *xManagerStream, pLibs->GetObject(0)->GetLibRef() ) )
+ {
+// String aErrorText( BasicResId( IDS_SBERR_MGROPEN ) );
+// aErrorText.SearchAndReplace( "XX", aStorName );
+ StringErrorInfo* pErrInf = new StringErrorInfo( ERRCODE_BASMGR_MGROPEN, aStorName, ERRCODE_BUTTON_OK );
+ pErrorMgr->InsertError( BasicError( *pErrInf, BASERR_REASON_OPENMGRSTREAM, aStorName ) );
+ // und es geht weiter...
+ }
+ xManagerStream->Seek( nBasicEndOff+1 ); // +1: 0x00 as separator
+ String aLibs;
+ xManagerStream->ReadByteString(aLibs);
+ xManagerStream->SetBufferSize( 0 );
+ xManagerStream.Clear(); // Close stream
+
+ if ( aLibs.Len() )
+ {
+ String aCurStorageName( aStorName );
+ INetURLObject aCurStorage( aCurStorageName, INET_PROT_FILE );
+ USHORT nLibs = aLibs.GetTokenCount( LIB_SEP );
+ for ( USHORT nLib = 0; nLib < nLibs; nLib++ )
+ {
+ String aLibInfo( aLibs.GetToken( nLib, LIB_SEP ) );
+ // TODO: Remove == 2
+ DBG_ASSERT( ( aLibInfo.GetTokenCount( LIBINFO_SEP ) == 2 ) || ( aLibInfo.GetTokenCount( LIBINFO_SEP ) == 3 ), "Ungueltige Lib-Info!" );
+ String aLibName( aLibInfo.GetToken( 0, LIBINFO_SEP ) );
+ String aLibAbsStorageName( aLibInfo.GetToken( 1, LIBINFO_SEP ) );
+ String aLibRelStorageName( aLibInfo.GetToken( 2, LIBINFO_SEP ) );
+ INetURLObject aLibAbsStorage( aLibAbsStorageName, INET_PROT_FILE );
+
+ INetURLObject aLibRelStorage( aStorName );
+ aLibRelStorage.removeSegment();
+ bool bWasAbsolute = FALSE;
+ aLibRelStorage = aLibRelStorage.smartRel2Abs( aLibRelStorageName, bWasAbsolute);
+ DBG_ASSERT(!bWasAbsolute, "RelStorageName was absolute!" );
+
+ SotStorageRef xStorageRef;
+ if ( ( aLibAbsStorage == aCurStorage ) || ( aLibRelStorageName.EqualsAscii(szImbedded) ) )
+ xStorageRef = &rStorage;
+ else
+ {
+ xStorageRef = new SotStorage( FALSE, aLibAbsStorage.GetMainURL
+ ( INetURLObject::NO_DECODE ), eStorageReadMode, TRUE );
+ if ( xStorageRef->GetError() != ERRCODE_NONE )
+ xStorageRef = new SotStorage( FALSE, aLibRelStorage.
+ GetMainURL( INetURLObject::NO_DECODE ), eStorageReadMode, TRUE );
+ }
+ if ( xStorageRef.Is() )
+ AddLib( *xStorageRef, aLibName, FALSE );
+ else
+ {
+// String aErrorText( BasicResId( IDS_SBERR_LIBLOAD ) );
+// aErrorText.SearchAndReplace( "XX", aLibName );
+ StringErrorInfo* pErrInf = new StringErrorInfo( ERRCODE_BASMGR_LIBLOAD, aStorName, ERRCODE_BUTTON_OK );
+ pErrorMgr->InsertError( BasicError( *pErrInf, BASERR_REASON_STORAGENOTFOUND, aStorName ) );
+ }
+ }
+ }
+}
+
+BasicManager::~BasicManager()
+{
+ DBG_DTOR( BasicManager, 0 );
+
+ // Notify listener if something needs to be saved
+ Broadcast( SfxSimpleHint( SFX_HINT_DYING) );
+
+ // Destroy Basic-Infos...
+ // In reverse order
+ BasicLibInfo* pInf = pLibs->Last();
+ while ( pInf )
+ {
+ delete pInf;
+ pInf = pLibs->Prev();
+ }
+ pLibs->Clear();
+ delete pLibs;
+ delete pErrorMgr;
+ delete mpImpl;
+}
+
+void BasicManager::LegacyDeleteBasicManager( BasicManager*& _rpManager )
+{
+ delete _rpManager;
+ _rpManager = NULL;
+}
+
+void BasicManager::Init()
+{
+ DBG_CHKTHIS( BasicManager, 0 );
+
+ bBasMgrModified = FALSE;
+ pErrorMgr = new BasicErrorManager;
+ pLibs = new BasicLibs;
+ mpImpl = new BasicManagerImpl();
+}
+
+BasicLibInfo* BasicManager::CreateLibInfo()
+{
+ DBG_CHKTHIS( BasicManager, 0 );
+
+ BasicLibInfo* pInf = new BasicLibInfo;
+ pLibs->Insert( pInf, LIST_APPEND );
+ return pInf;
+}
+
+BOOL BasicManager::ImpLoadLibary( BasicLibInfo* pLibInfo, SotStorage* pCurStorage, BOOL bInfosOnly ) const
+{
+ DBG_CHKTHIS( BasicManager, 0 );
+
+ DBG_ASSERT( pLibInfo, "LibInfo!?" );
+
+ String aStorageName( pLibInfo->GetStorageName() );
+ if ( !aStorageName.Len() || ( aStorageName.EqualsAscii(szImbedded) ) )
+ aStorageName = GetStorageName();
+
+ SotStorageRef xStorage;
+ // The current must not be opened again...
+ if ( pCurStorage )
+ {
+ String aStorName( pCurStorage->GetName() );
+ // #i13114 removed, DBG_ASSERT( aStorName.Len(), "No Storage Name!" );
+
+ INetURLObject aCurStorageEntry(aStorName, INET_PROT_FILE);
+ // #i13114 removed, DBG_ASSERT(aCurStorageEntry.GetMainURL( INetURLObject::NO_DECODE ).Len() != 0, "Bad storage name");
+
+ INetURLObject aStorageEntry(aStorageName, INET_PROT_FILE);
+ // #i13114 removed, DBG_ASSERT(aCurStorageEntry.GetMainURL( INetURLObject::NO_DECODE ).Len() != 0, "Bad storage name");
+
+ if ( aCurStorageEntry == aStorageEntry )
+ xStorage = pCurStorage;
+ }
+
+ if ( !xStorage.Is() )
+ xStorage = new SotStorage( FALSE, aStorageName, eStorageReadMode );
+
+ SotStorageRef xBasicStorage = xStorage->OpenSotStorage
+ ( String(RTL_CONSTASCII_USTRINGPARAM(szBasicStorage)), eStorageReadMode, FALSE );
+
+ if ( !xBasicStorage.Is() || xBasicStorage->GetError() )
+ {
+ StringErrorInfo* pErrInf = new StringErrorInfo( ERRCODE_BASMGR_MGROPEN, xStorage->GetName(), ERRCODE_BUTTON_OK );
+ pErrorMgr->InsertError( BasicError( *pErrInf, BASERR_REASON_OPENLIBSTORAGE, pLibInfo->GetLibName() ) );
+ }
+ else
+ {
+ // In the Basic-Storage every lib is in a Stream...
+ SotStorageStreamRef xBasicStream = xBasicStorage->OpenSotStream( pLibInfo->GetLibName(), eStreamReadMode );
+ if ( !xBasicStream.Is() || xBasicStream->GetError() )
+ {
+ StringErrorInfo* pErrInf = new StringErrorInfo( ERRCODE_BASMGR_LIBLOAD , pLibInfo->GetLibName(), ERRCODE_BUTTON_OK );
+ pErrorMgr->InsertError( BasicError( *pErrInf, BASERR_REASON_OPENLIBSTREAM, pLibInfo->GetLibName() ) );
+ }
+ else
+ {
+ BOOL bLoaded = FALSE;
+ if ( xBasicStream->Seek( STREAM_SEEK_TO_END ) != 0 )
+ {
+ if ( !bInfosOnly )
+ {
+ if ( !pLibInfo->GetLib().Is() )
+ pLibInfo->SetLib( new StarBASIC( GetStdLib(), mbDocMgr ) );
+ xBasicStream->SetBufferSize( 1024 );
+ xBasicStream->Seek( STREAM_SEEK_TO_BEGIN );
+ bLoaded = ImplLoadBasic( *xBasicStream, pLibInfo->GetLibRef() );
+ xBasicStream->SetBufferSize( 0 );
+ StarBASICRef xStdLib = pLibInfo->GetLib();
+ xStdLib->SetName( pLibInfo->GetLibName() );
+ xStdLib->SetModified( FALSE );
+ xStdLib->SetFlag( SBX_DONTSTORE );
+ }
+ else
+ {
+ // Skip Basic...
+ xBasicStream->Seek( STREAM_SEEK_TO_BEGIN );
+ ImplEncryptStream( *xBasicStream );
+ SbxBase::Skip( *xBasicStream );
+ bLoaded = TRUE;
+ }
+ }
+ if ( !bLoaded )
+ {
+ StringErrorInfo* pErrInf = new StringErrorInfo( ERRCODE_BASMGR_LIBLOAD, pLibInfo->GetLibName(), ERRCODE_BUTTON_OK );
+ pErrorMgr->InsertError( BasicError( *pErrInf, BASERR_REASON_BASICLOADERROR, pLibInfo->GetLibName() ) );
+ }
+ else
+ {
+ // Perhaps there are additional information in the stream...
+ xBasicStream->SetKey( szCryptingKey );
+ xBasicStream->RefreshBuffer();
+ sal_uInt32 nPasswordMarker = 0;
+ *xBasicStream >> nPasswordMarker;
+ if ( ( nPasswordMarker == PASSWORD_MARKER ) && !xBasicStream->IsEof() )
+ {
+ String aPassword;
+ xBasicStream->ReadByteString(aPassword);
+ pLibInfo->SetPassword( aPassword );
+ }
+ xBasicStream->SetKey( ByteString() );
+ CheckModules( pLibInfo->GetLib(), pLibInfo->IsReference() );
+ }
+ return bLoaded;
+ }
+ }
+ return FALSE;
+}
+
+BOOL BasicManager::ImplEncryptStream( SvStream& rStrm ) const
+{
+ ULONG nPos = rStrm.Tell();
+ UINT32 nCreator;
+ rStrm >> nCreator;
+ rStrm.Seek( nPos );
+ BOOL bProtected = FALSE;
+ if ( nCreator != SBXCR_SBX )
+ {
+ // Should only be the case for encrypted Streams
+ bProtected = TRUE;
+ rStrm.SetKey( szCryptingKey );
+ rStrm.RefreshBuffer();
+ }
+ return bProtected;
+}
+
+// This code is necessary to load the BASIC of Beta 1
+// TODO: Which Beta 1?
+BOOL BasicManager::ImplLoadBasic( SvStream& rStrm, StarBASICRef& rOldBasic ) const
+{
+ BOOL bProtected = ImplEncryptStream( rStrm );
+ SbxBaseRef xNew = SbxBase::Load( rStrm );
+ BOOL bLoaded = FALSE;
+ if( xNew.Is() )
+ {
+ if( xNew->IsA( TYPE(StarBASIC) ) )
+ {
+ StarBASIC* pNew = (StarBASIC*)(SbxBase*) xNew;
+ // Use the Parent of the old BASICs
+ if( rOldBasic.Is() )
+ {
+ pNew->SetParent( rOldBasic->GetParent() );
+ if( pNew->GetParent() )
+ pNew->GetParent()->Insert( pNew );
+ pNew->SetFlag( SBX_EXTSEARCH );
+ }
+ rOldBasic = pNew;
+
+ // Fill new libray container (5.2 -> 6.0)
+ copyToLibraryContainer( pNew, mpImpl->maContainerInfo );
+
+/*
+ if( rOldBasic->GetParent() )
+ {
+ rOldBasic->GetParent()->Insert( rOldBasic );
+ rOldBasic->SetFlag( SBX_EXTSEARCH );
+ }
+*/
+ pNew->SetModified( FALSE );
+ bLoaded = TRUE;
+ }
+ }
+ if ( bProtected )
+ rStrm.SetKey( ByteString() );
+ return bLoaded;
+}
+
+void BasicManager::CheckModules( StarBASIC* pLib, BOOL bReference ) const
+{
+ if ( !pLib )
+ return;
+
+ BOOL bModified = pLib->IsModified();
+
+ for ( USHORT nMod = 0; nMod < pLib->GetModules()->Count(); nMod++ )
+ {
+ SbModule* pModule = (SbModule*)pLib->GetModules()->Get( nMod );
+ DBG_ASSERT( pModule, "Modul nicht erhalten!" );
+ if ( !pModule->IsCompiled() && !StarBASIC::GetErrorCode() )
+ pLib->Compile( pModule );
+ }
+
+ // #67477, AB 8.12.99 On demand compile in referenced libs should not
+ // cause modified
+ if( !bModified && bReference )
+ {
+ DBG_ERROR( "Per Reference eingebundene Basic-Library ist nicht compiliert!" );
+ pLib->SetModified( FALSE );
+ }
+}
+
+StarBASIC* BasicManager::AddLib( SotStorage& rStorage, const String& rLibName, BOOL bReference )
+{
+ DBG_CHKTHIS( BasicManager, 0 );
+
+ String aStorName( rStorage.GetName() );
+ DBG_ASSERT( aStorName.Len(), "No Storage Name!" );
+
+ String aStorageName = INetURLObject(aStorName, INET_PROT_FILE).GetMainURL( INetURLObject::NO_DECODE );
+ DBG_ASSERT(aStorageName.Len() != 0, "Bad storage name");
+
+ String aNewLibName( rLibName );
+ while ( HasLib( aNewLibName ) )
+ aNewLibName += '_';
+
+ BasicLibInfo* pLibInfo = CreateLibInfo();
+ // Use original name otherwise ImpLoadLibary failes...
+ pLibInfo->SetLibName( rLibName );
+ // Funktioniert so aber nicht, wenn Name doppelt
+// USHORT nLibId = GetLibId( rLibName );
+ USHORT nLibId = (USHORT) pLibs->GetPos( pLibInfo );
+
+ // Set StorageName before load because it is compared with pCurStorage
+ pLibInfo->SetStorageName( aStorageName );
+ BOOL bLoaded = ImpLoadLibary( pLibInfo, &rStorage );
+
+ if ( bLoaded )
+ {
+ if ( aNewLibName != rLibName )
+ SetLibName( nLibId, aNewLibName );
+
+ if ( bReference )
+ {
+ pLibInfo->GetLib()->SetModified( FALSE ); // Don't save in this case
+ pLibInfo->SetRelStorageName( String() );
+// pLibInfo->CalcRelStorageName( GetStorageName() );
+ pLibInfo->IsReference() = TRUE;
+ }
+ else
+ {
+ pLibInfo->GetLib()->SetModified( TRUE ); // Must be saved after Add!
+ pLibInfo->SetStorageName( String::CreateFromAscii(szImbedded) ); // Save in BasicManager-Storage
+ }
+ bBasMgrModified = TRUE;
+ }
+ else
+ {
+ RemoveLib( nLibId, FALSE );
+ pLibInfo = 0;
+ }
+
+ if( pLibInfo )
+ return &*pLibInfo->GetLib() ;
+ else
+ return 0;
+}
+
+BOOL BasicManager::IsReference( USHORT nLib )
+{
+ DBG_CHKTHIS( BasicManager, 0 );
+
+ BasicLibInfo* pLibInfo = pLibs->GetObject( nLib );
+ DBG_ASSERT( pLibInfo, "Lib?!" );
+ if ( pLibInfo )
+ return pLibInfo->IsReference();
+
+ return FALSE;
+}
+
+BOOL BasicManager::RemoveLib( USHORT nLib )
+{
+ // Only pyhsical deletion if no reference
+ return RemoveLib( nLib, !IsReference( nLib ) );
+}
+
+BOOL BasicManager::RemoveLib( USHORT nLib, BOOL bDelBasicFromStorage )
+{
+ DBG_CHKTHIS( BasicManager, 0 );
+ DBG_ASSERT( nLib, "Standard-Lib cannot be removed!" );
+
+ BasicLibInfo* pLibInfo = pLibs->GetObject( nLib );
+ DBG_ASSERT( pLibInfo, "Lib not found!" );
+
+ if ( !pLibInfo || !nLib )
+ {
+// String aErrorText( BasicResId( IDS_SBERR_REMOVELIB ) );
+ StringErrorInfo* pErrInf = new StringErrorInfo( ERRCODE_BASMGR_REMOVELIB, String(), ERRCODE_BUTTON_OK );
+ pErrorMgr->InsertError( BasicError( *pErrInf, BASERR_REASON_STDLIB, pLibInfo->GetLibName() ) );
+ return FALSE;
+ }
+
+ // If one of the streams cannot be opened, this is not an error,
+ // because BASIC was never written before...
+ if ( bDelBasicFromStorage && !pLibInfo->IsReference() &&
+ ( !pLibInfo->IsExtern() || SotStorage::IsStorageFile( pLibInfo->GetStorageName() ) ) )
+ {
+ SotStorageRef xStorage;
+ if ( !pLibInfo->IsExtern() )
+ xStorage = new SotStorage( FALSE, GetStorageName() );
+ else
+ xStorage = new SotStorage( FALSE, pLibInfo->GetStorageName() );
+
+ if ( xStorage->IsStorage( String(RTL_CONSTASCII_USTRINGPARAM(szBasicStorage)) ) )
+ {
+ SotStorageRef xBasicStorage = xStorage->OpenSotStorage
+ ( String(RTL_CONSTASCII_USTRINGPARAM(szBasicStorage)), STREAM_STD_READWRITE, FALSE );
+
+ if ( !xBasicStorage.Is() || xBasicStorage->GetError() )
+ {
+// String aErrorText( BasicResId( IDS_SBERR_REMOVELIB ) );
+ StringErrorInfo* pErrInf = new StringErrorInfo( ERRCODE_BASMGR_REMOVELIB, String(), ERRCODE_BUTTON_OK );
+ pErrorMgr->InsertError( BasicError( *pErrInf, BASERR_REASON_OPENLIBSTORAGE, pLibInfo->GetLibName() ) );
+ }
+ else if ( xBasicStorage->IsStream( pLibInfo->GetLibName() ) )
+ {
+ xBasicStorage->Remove( pLibInfo->GetLibName() );
+ xBasicStorage->Commit();
+
+ // If no further stream available,
+ // delete the SubStorage.
+ SvStorageInfoList aInfoList( 0, 4 );
+ xBasicStorage->FillInfoList( &aInfoList );
+ if ( !aInfoList.Count() )
+ {
+ xBasicStorage.Clear();
+ xStorage->Remove( String(RTL_CONSTASCII_USTRINGPARAM(szBasicStorage)) );
+ xStorage->Commit();
+ // If no further Streams or SubStorages available,
+ // delete the Storage, too.
+ aInfoList.Clear();
+ xStorage->FillInfoList( &aInfoList );
+ if ( !aInfoList.Count() )
+ {
+ String aName_( xStorage->GetName() );
+ xStorage.Clear();
+ //*** TODO: Replace if still necessary
+ //SfxContentHelper::Kill( aName );
+ //*** TODO-End
+ }
+ }
+ }
+ }
+ }
+ bBasMgrModified = TRUE;
+ if ( pLibInfo->GetLib().Is() )
+ GetStdLib()->Remove( pLibInfo->GetLib() );
+ delete pLibs->Remove( pLibInfo );
+ return TRUE; // Remove was successful, del unimportant
+}
+
+USHORT BasicManager::GetLibCount() const
+{
+ DBG_CHKTHIS( BasicManager, 0 );
+ return (USHORT)pLibs->Count();
+}
+
+StarBASIC* BasicManager::GetLib( USHORT nLib ) const
+{
+ DBG_CHKTHIS( BasicManager, 0 );
+ BasicLibInfo* pInf = pLibs->GetObject( nLib );
+ DBG_ASSERT( pInf, "Lib existiert nicht!" );
+ if ( pInf )
+ return pInf->GetLib();
+ return 0;
+}
+
+StarBASIC* BasicManager::GetStdLib() const
+{
+ DBG_CHKTHIS( BasicManager, 0 );
+ StarBASIC* pLib = GetLib( 0 );
+ return pLib;
+}
+
+StarBASIC* BasicManager::GetLib( const String& rName ) const
+{
+ DBG_CHKTHIS( BasicManager, 0 );
+
+ BasicLibInfo* pInf = pLibs->First();
+ while ( pInf )
+ {
+ if ( pInf->GetLibName().CompareIgnoreCaseToAscii( rName ) == COMPARE_EQUAL )// Check if available...
+ return pInf->GetLib();
+
+ pInf = pLibs->Next();
+ }
+ return 0;
+}
+
+USHORT BasicManager::GetLibId( const String& rName ) const
+{
+ DBG_CHKTHIS( BasicManager, 0 );
+
+ BasicLibInfo* pInf = pLibs->First();
+ while ( pInf )
+ {
+ if ( pInf->GetLibName().CompareIgnoreCaseToAscii( rName ) == COMPARE_EQUAL )
+ return (USHORT)pLibs->GetCurPos();
+
+ pInf = pLibs->Next();
+ }
+ return LIB_NOTFOUND;
+}
+
+BOOL BasicManager::HasLib( const String& rName ) const
+{
+ DBG_CHKTHIS( BasicManager, 0 );
+
+ BasicLibInfo* pInf = pLibs->First();
+ while ( pInf )
+ {
+ if ( pInf->GetLibName().CompareIgnoreCaseToAscii( rName ) == COMPARE_EQUAL )
+ return TRUE;
+
+ pInf = pLibs->Next();
+ }
+ return FALSE;
+}
+
+BOOL BasicManager::SetLibName( USHORT nLib, const String& rName )
+{
+ DBG_CHKTHIS( BasicManager, 0 );
+
+ BasicLibInfo* pLibInfo = pLibs->GetObject( nLib );
+ DBG_ASSERT( pLibInfo, "Lib?!" );
+ if ( pLibInfo )
+ {
+ pLibInfo->SetLibName( rName );
+ if ( pLibInfo->GetLib().Is() )
+ {
+ StarBASICRef xStdLib = pLibInfo->GetLib();
+ xStdLib->SetName( rName );
+ xStdLib->SetModified( TRUE );
+ }
+ bBasMgrModified = TRUE;
+ return TRUE;
+ }
+ return FALSE;
+}
+
+String BasicManager::GetLibName( USHORT nLib )
+{
+ DBG_CHKTHIS( BasicManager, 0 );
+
+ BasicLibInfo* pLibInfo = pLibs->GetObject( nLib );
+ DBG_ASSERT( pLibInfo, "Lib?!" );
+ if ( pLibInfo )
+ return pLibInfo->GetLibName();
+ return String();
+}
+
+BOOL BasicManager::LoadLib( USHORT nLib )
+{
+ DBG_CHKTHIS( BasicManager, 0 );
+
+ BOOL bDone = FALSE;
+ BasicLibInfo* pLibInfo = pLibs->GetObject( nLib );
+ DBG_ASSERT( pLibInfo, "Lib?!" );
+ if ( pLibInfo )
+ {
+ Reference< XLibraryContainer > xLibContainer = pLibInfo->GetLibraryContainer();
+ if( xLibContainer.is() )
+ {
+ String aLibName = pLibInfo->GetLibName();
+ xLibContainer->loadLibrary( aLibName );
+ bDone = xLibContainer->isLibraryLoaded( aLibName );;
+ }
+ else
+ {
+ bDone = ImpLoadLibary( pLibInfo, NULL, FALSE );
+ StarBASIC* pLib = GetLib( nLib );
+ if ( pLib )
+ {
+ // pLib->SetParent( GetStdLib() );
+ GetStdLib()->Insert( pLib );
+ pLib->SetFlag( SBX_EXTSEARCH );
+ }
+ }
+ }
+ else
+ {
+// String aErrorText( BasicResId( IDS_SBERR_LIBLOAD ) );
+// aErrorText.SearchAndReplace( "XX", "" );
+ StringErrorInfo* pErrInf = new StringErrorInfo( ERRCODE_BASMGR_LIBLOAD, String(), ERRCODE_BUTTON_OK );
+ pErrorMgr->InsertError( BasicError( *pErrInf, BASERR_REASON_LIBNOTFOUND, String::CreateFromInt32(nLib) ) );
+ }
+ return bDone;
+}
+
+StarBASIC* BasicManager::CreateLib( const String& rLibName )
+{
+ DBG_CHKTHIS( BasicManager, 0 );
+ if ( GetLib( rLibName ) )
+ return 0;
+
+ BasicLibInfo* pLibInfo = CreateLibInfo();
+ StarBASIC* pNew = new StarBASIC( GetStdLib(), mbDocMgr );
+ GetStdLib()->Insert( pNew );
+ pNew->SetFlag( SBX_EXTSEARCH | SBX_DONTSTORE );
+ pLibInfo->SetLib( pNew );
+ pLibInfo->SetLibName( rLibName );
+ pLibInfo->GetLib()->SetName( rLibName );
+ return pLibInfo->GetLib();
+}
+
+// For XML import/export:
+StarBASIC* BasicManager::CreateLib
+ ( const String& rLibName, const String& Password, const String& LinkTargetURL )
+{
+ // Ask if lib exists because standard lib is always there
+ StarBASIC* pLib = GetLib( rLibName );
+ if( !pLib )
+ {
+ if( LinkTargetURL.Len() != 0 )
+ {
+ SotStorageRef xStorage = new SotStorage( FALSE, LinkTargetURL, STREAM_READ | STREAM_SHARE_DENYWRITE );
+ if( !xStorage->GetError() )
+ {
+ pLib = AddLib( *xStorage, rLibName, TRUE );
+
+ //if( !pLibInfo )
+ //pLibInfo = FindLibInfo( pLib );
+ //pLibInfo->SetStorageName( LinkTargetURL );
+ //pLibInfo->GetLib()->SetModified( FALSE ); // Dann nicht speichern
+ //pLibInfo->SetRelStorageName( String() );
+ //pLibInfo->IsReference() = TRUE;
+ }
+ //else
+ //Message?
+
+ DBG_ASSERT( pLib, "XML Import: Linked basic library could not be loaded");
+ }
+ else
+ {
+ pLib = CreateLib( rLibName );
+ if( Password.Len() != 0 )
+ {
+ BasicLibInfo* pLibInfo = FindLibInfo( pLib );
+ pLibInfo ->SetPassword( Password );
+ }
+ }
+ //ExternalSourceURL ?
+ }
+ return pLib;
+}
+
+StarBASIC* BasicManager::CreateLibForLibContainer( const String& rLibName,
+ const Reference< XLibraryContainer >& xScriptCont )
+{
+ DBG_CHKTHIS( BasicManager, 0 );
+ if ( GetLib( rLibName ) )
+ return 0;
+
+ BasicLibInfo* pLibInfo = CreateLibInfo();
+ StarBASIC* pNew = new StarBASIC( GetStdLib(), mbDocMgr );
+ GetStdLib()->Insert( pNew );
+ pNew->SetFlag( SBX_EXTSEARCH | SBX_DONTSTORE );
+ pLibInfo->SetLib( pNew );
+ pLibInfo->SetLibName( rLibName );
+ pLibInfo->GetLib()->SetName( rLibName );
+ pLibInfo->SetLibraryContainer( xScriptCont );
+ return pNew;
+}
+
+
+BasicLibInfo* BasicManager::FindLibInfo( StarBASIC* pBasic ) const
+{
+ DBG_CHKTHIS( BasicManager, 0 );
+
+ BasicLibInfo* pInf = ((BasicManager*)this)->pLibs->First();
+ while ( pInf )
+ {
+ if ( pInf->GetLib() == pBasic )
+ return pInf;
+
+ pInf = ((BasicManager*)this)->pLibs->Next();
+ }
+ return 0;
+}
+
+
+BOOL BasicManager::IsModified() const
+{
+ DBG_CHKTHIS( BasicManager, 0 );
+
+ if ( bBasMgrModified )
+ return TRUE;
+ return IsBasicModified();
+}
+
+BOOL BasicManager::IsBasicModified() const
+{
+ DBG_CHKTHIS( BasicManager, 0 );
+
+ BasicLibInfo* pInf = pLibs->First();
+ while ( pInf )
+ {
+ if ( pInf->GetLib().Is() && pInf->GetLib()->IsModified() )
+ return TRUE;
+
+ pInf = pLibs->Next();
+ }
+ return FALSE;
+}
+
+void BasicManager::SetFlagToAllLibs( short nFlag, BOOL bSet ) const
+{
+ USHORT nLibs = GetLibCount();
+ for ( USHORT nL = 0; nL < nLibs; nL++ )
+ {
+ BasicLibInfo* pInfo = pLibs->GetObject( nL );
+ DBG_ASSERT( pInfo, "Info?!" );
+ StarBASIC* pLib = pInfo->GetLib();
+ if ( pLib )
+ {
+ if ( bSet )
+ pLib->SetFlag( nFlag );
+ else
+ pLib->ResetFlag( nFlag );
+ }
+ }
+}
+
+BOOL BasicManager::HasErrors()
+{
+ DBG_CHKTHIS( BasicManager, 0 );
+ return pErrorMgr->HasErrors();
+}
+
+void BasicManager::ClearErrors()
+{
+ DBG_CHKTHIS( BasicManager, 0 );
+ pErrorMgr->Reset();
+}
+
+BasicError* BasicManager::GetFirstError()
+{
+ DBG_CHKTHIS( BasicManager, 0 );
+ return pErrorMgr->GetFirstError();
+}
+
+BasicError* BasicManager::GetNextError()
+{
+ DBG_CHKTHIS( BasicManager, 0 );
+ return pErrorMgr->GetNextError();
+}
+bool BasicManager::GetGlobalUNOConstant( const sal_Char* _pAsciiName, ::com::sun::star::uno::Any& aOut )
+{
+ bool bRes = false;
+ StarBASIC* pStandardLib = GetStdLib();
+ OSL_PRECOND( pStandardLib, "BasicManager::GetGlobalUNOConstant: no lib to read from!" );
+ if ( pStandardLib )
+ bRes = pStandardLib->GetUNOConstant( _pAsciiName, aOut );
+ return bRes;
+}
+
+Any BasicManager::SetGlobalUNOConstant( const sal_Char* _pAsciiName, const Any& _rValue )
+{
+ Any aOldValue;
+
+ StarBASIC* pStandardLib = GetStdLib();
+ OSL_PRECOND( pStandardLib, "BasicManager::SetGlobalUNOConstant: no lib to insert into!" );
+ if ( !pStandardLib )
+ return aOldValue;
+
+ ::rtl::OUString sVarName( ::rtl::OUString::createFromAscii( _pAsciiName ) );
+
+ // obtain the old value
+ SbxVariable* pVariable = pStandardLib->Find( sVarName, SbxCLASS_OBJECT );
+ if ( pVariable )
+ aOldValue = sbxToUnoValue( pVariable );
+
+ SbxObjectRef xUnoObj = GetSbUnoObject( sVarName, _rValue );
+ xUnoObj->SetFlag( SBX_DONTSTORE );
+ pStandardLib->Insert( xUnoObj );
+
+ return aOldValue;
+}
+
+bool BasicManager::LegacyPsswdBinaryLimitExceeded( ::com::sun::star::uno::Sequence< rtl::OUString >& _out_rModuleNames )
+{
+ try
+ {
+ Reference< XNameAccess > xScripts( GetScriptLibraryContainer(), UNO_QUERY_THROW );
+ Reference< XLibraryContainerPassword > xPassword( GetScriptLibraryContainer(), UNO_QUERY_THROW );
+
+ Sequence< ::rtl::OUString > aNames( xScripts->getElementNames() );
+ const ::rtl::OUString* pNames = aNames.getConstArray();
+ const ::rtl::OUString* pNamesEnd = aNames.getConstArray() + aNames.getLength();
+ for ( ; pNames != pNamesEnd; ++pNames )
+ {
+ if( /*pLib->mbSharedIndexFile ||*/ !xPassword->isLibraryPasswordProtected( *pNames ) )
+ continue;
+
+ StarBASIC* pBasicLib = GetLib( *pNames );
+ if ( !pBasicLib )
+ continue;
+
+ Reference< XNameAccess > xScriptLibrary( xScripts->getByName( *pNames ), UNO_QUERY_THROW );
+ Sequence< ::rtl::OUString > aElementNames( xScriptLibrary->getElementNames() );
+ sal_Int32 nLen = aElementNames.getLength();
+
+ Sequence< ::rtl::OUString > aBigModules( nLen );
+ sal_Int32 nBigModules = 0;
+
+ const ::rtl::OUString* pElementNames = aElementNames.getConstArray();
+ const ::rtl::OUString* pElementNamesEnd = aElementNames.getConstArray() + aElementNames.getLength();
+ for ( ; pElementNames != pElementNamesEnd; ++pElementNames )
+ {
+ SbModule* pMod = pBasicLib->FindModule( *pElementNames );
+ if ( pMod && pMod->ExceedsLegacyModuleSize() )
+ aBigModules[ nBigModules++ ] = *pElementNames;
+ }
+
+ if ( nBigModules )
+ {
+ aBigModules.realloc( nBigModules );
+ _out_rModuleNames = aBigModules;
+ return true;
+ }
+ }
+ }
+ catch( const Exception& )
+ {
+ DBG_UNHANDLED_EXCEPTION();
+ }
+ return false;
+}
+
+//=====================================================================
+
+class ModuleInfo_Impl : public ModuleInfoHelper
+{
+ ::rtl::OUString maName;
+ ::rtl::OUString maLanguage;
+ ::rtl::OUString maSource;
+
+public:
+ ModuleInfo_Impl( const ::rtl::OUString& aName, const ::rtl::OUString& aLanguage, const ::rtl::OUString& aSource )
+ : maName( aName ), maLanguage( aLanguage), maSource( aSource ) {}
+
+ // Methods XStarBasicModuleInfo
+ virtual ::rtl::OUString SAL_CALL getName() throw(RuntimeException)
+ { return maName; }
+ virtual ::rtl::OUString SAL_CALL getLanguage() throw(RuntimeException)
+ { return maLanguage; }
+ virtual ::rtl::OUString SAL_CALL getSource() throw(RuntimeException)
+ { return maSource; }
+};
+
+
+//=====================================================================
+
+class DialogInfo_Impl : public DialogInfoHelper
+{
+ ::rtl::OUString maName;
+ Sequence< sal_Int8 > mData;
+
+public:
+ DialogInfo_Impl( const ::rtl::OUString& aName, Sequence< sal_Int8 > Data )
+ : maName( aName ), mData( Data ) {}
+
+ // Methods XStarBasicDialogInfo
+ virtual ::rtl::OUString SAL_CALL getName() throw(RuntimeException)
+ { return maName; }
+ virtual Sequence< sal_Int8 > SAL_CALL getData() throw(RuntimeException)
+ { return mData; }
+};
+
+
+//=====================================================================
+
+class LibraryInfo_Impl : public LibraryInfoHelper
+{
+ ::rtl::OUString maName;
+ Reference< XNameContainer > mxModuleContainer;
+ Reference< XNameContainer > mxDialogContainer;
+ ::rtl::OUString maPassword;
+ ::rtl::OUString maExternaleSourceURL;
+ ::rtl::OUString maLinkTargetURL;
+
+public:
+ LibraryInfo_Impl
+ (
+ const ::rtl::OUString& aName,
+ Reference< XNameContainer > xModuleContainer,
+ Reference< XNameContainer > xDialogContainer,
+ const ::rtl::OUString& aPassword,
+ const ::rtl::OUString& aExternaleSourceURL,
+ const ::rtl::OUString& aLinkTargetURL
+ )
+ : maName( aName )
+ , mxModuleContainer( xModuleContainer )
+ , mxDialogContainer( xDialogContainer )
+ , maPassword( aPassword )
+ , maExternaleSourceURL( aExternaleSourceURL )
+ , maLinkTargetURL( aLinkTargetURL )
+ {}
+
+ // Methods XStarBasicLibraryInfo
+ virtual ::rtl::OUString SAL_CALL getName() throw(RuntimeException)
+ { return maName; }
+ virtual Reference< XNameContainer > SAL_CALL getModuleContainer() throw(RuntimeException)
+ { return mxModuleContainer; }
+ virtual Reference< XNameContainer > SAL_CALL getDialogContainer() throw(RuntimeException)
+ { return mxDialogContainer; }
+ virtual ::rtl::OUString SAL_CALL getPassword() throw(RuntimeException)
+ { return maPassword; }
+ virtual ::rtl::OUString SAL_CALL getExternalSourceURL() throw(RuntimeException)
+ { return maExternaleSourceURL; }
+ virtual ::rtl::OUString SAL_CALL getLinkTargetURL() throw(RuntimeException)
+ { return maLinkTargetURL; }
+};
+
+//=====================================================================
+
+class ModuleContainer_Impl : public NameContainerHelper
+{
+ StarBASIC* mpLib;
+
+public:
+ ModuleContainer_Impl( StarBASIC* pLib )
+ :mpLib( pLib ) {}
+
+ // Methods XElementAccess
+ virtual Type SAL_CALL getElementType()
+ throw(RuntimeException);
+ virtual sal_Bool SAL_CALL hasElements()
+ throw(RuntimeException);
+
+ // Methods XNameAccess
+ virtual Any SAL_CALL getByName( const ::rtl::OUString& aName )
+ throw(NoSuchElementException, WrappedTargetException, RuntimeException);
+ virtual Sequence< ::rtl::OUString > SAL_CALL getElementNames()
+ throw(RuntimeException);
+ virtual sal_Bool SAL_CALL hasByName( const ::rtl::OUString& aName )
+ throw(RuntimeException);
+
+ // Methods XNameReplace
+ virtual void SAL_CALL replaceByName( const ::rtl::OUString& aName, const Any& aElement )
+ throw(IllegalArgumentException, NoSuchElementException, WrappedTargetException, RuntimeException);
+
+ // Methods XNameContainer
+ virtual void SAL_CALL insertByName( const ::rtl::OUString& aName, const Any& aElement )
+ throw(IllegalArgumentException, ElementExistException, WrappedTargetException, RuntimeException);
+ virtual void SAL_CALL removeByName( const ::rtl::OUString& Name )
+ throw(NoSuchElementException, WrappedTargetException, RuntimeException);
+};
+
+// Methods XElementAccess
+Type ModuleContainer_Impl::getElementType()
+ throw(RuntimeException)
+{
+ Type aModuleType = ::getCppuType( (const Reference< XStarBasicModuleInfo > *)0 );
+ return aModuleType;
+}
+
+sal_Bool ModuleContainer_Impl::hasElements()
+ throw(RuntimeException)
+{
+ SbxArray* pMods = mpLib ? mpLib->GetModules() : NULL;
+ return pMods && pMods->Count() > 0;
+}
+
+// Methods XNameAccess
+Any ModuleContainer_Impl::getByName( const ::rtl::OUString& aName )
+ throw(NoSuchElementException, WrappedTargetException, RuntimeException)
+{
+ SbModule* pMod = mpLib ? mpLib->FindModule( aName ) : NULL;
+ if( !pMod )
+ throw NoSuchElementException();
+ Reference< XStarBasicModuleInfo > xMod = (XStarBasicModuleInfo*)new ModuleInfo_Impl
+ ( aName, ::rtl::OUString::createFromAscii( szScriptLanguage ), pMod->GetSource32() );
+ Any aRetAny;
+ aRetAny <<= xMod;
+ return aRetAny;
+}
+
+Sequence< ::rtl::OUString > ModuleContainer_Impl::getElementNames()
+ throw(RuntimeException)
+{
+ SbxArray* pMods = mpLib ? mpLib->GetModules() : NULL;
+ USHORT nMods = pMods ? pMods->Count() : 0;
+ Sequence< ::rtl::OUString > aRetSeq( nMods );
+ ::rtl::OUString* pRetSeq = aRetSeq.getArray();
+ for( USHORT i = 0 ; i < nMods ; i++ )
+ {
+ SbxVariable* pMod = pMods->Get( i );
+ pRetSeq[i] = ::rtl::OUString( pMod->GetName() );
+ }
+ return aRetSeq;
+}
+
+sal_Bool ModuleContainer_Impl::hasByName( const ::rtl::OUString& aName )
+ throw(RuntimeException)
+{
+ SbModule* pMod = mpLib ? mpLib->FindModule( aName ) : NULL;
+ sal_Bool bRet = (pMod != NULL);
+ return bRet;
+}
+
+
+// Methods XNameReplace
+void ModuleContainer_Impl::replaceByName( const ::rtl::OUString& aName, const Any& aElement )
+ throw(IllegalArgumentException, NoSuchElementException, WrappedTargetException, RuntimeException)
+{
+ removeByName( aName );
+ insertByName( aName, aElement );
+}
+
+
+// Methods XNameContainer
+void ModuleContainer_Impl::insertByName( const ::rtl::OUString& aName, const Any& aElement )
+ throw(IllegalArgumentException, ElementExistException, WrappedTargetException, RuntimeException)
+{
+ Type aModuleType = ::getCppuType( (const Reference< XStarBasicModuleInfo > *)0 );
+ Type aAnyType = aElement.getValueType();
+ if( aModuleType != aAnyType )
+ throw IllegalArgumentException();
+ Reference< XStarBasicModuleInfo > xMod;
+ aElement >>= xMod;
+ mpLib->MakeModule32( aName, xMod->getSource() );
+}
+
+void ModuleContainer_Impl::removeByName( const ::rtl::OUString& Name )
+ throw(NoSuchElementException, WrappedTargetException, RuntimeException)
+{
+ SbModule* pMod = mpLib ? mpLib->FindModule( Name ) : NULL;
+ if( !pMod )
+ throw NoSuchElementException();
+ mpLib->Remove( pMod );
+}
+
+
+//=====================================================================
+
+Sequence< sal_Int8 > implGetDialogData( SbxObject* pDialog )
+{
+ SvMemoryStream aMemStream;
+ pDialog->Store( aMemStream );
+ sal_Int32 nLen = aMemStream.Tell();
+ Sequence< sal_Int8 > aData( nLen );
+ sal_Int8* pDestData = aData.getArray();
+ const sal_Int8* pSrcData = (const sal_Int8*)aMemStream.GetData();
+ rtl_copyMemory( pDestData, pSrcData, nLen );
+ return aData;
+}
+
+SbxObject* implCreateDialog( Sequence< sal_Int8 > aData )
+{
+ sal_Int8* pData = aData.getArray();
+ SvMemoryStream aMemStream( pData, aData.getLength(), STREAM_READ );
+ SbxObject* pDialog = (SbxObject*)SbxBase::Load( aMemStream );
+ return pDialog;
+}
+
+// HACK! Because this value is defined in basctl/inc/vcsbxdef.hxx
+// which we can't include here, we have to use the value directly
+#define SBXID_DIALOG 101
+
+
+class DialogContainer_Impl : public NameContainerHelper
+{
+ StarBASIC* mpLib;
+
+public:
+ DialogContainer_Impl( StarBASIC* pLib )
+ :mpLib( pLib ) {}
+
+ // Methods XElementAccess
+ virtual Type SAL_CALL getElementType()
+ throw(RuntimeException);
+ virtual sal_Bool SAL_CALL hasElements()
+ throw(RuntimeException);
+
+ // Methods XNameAccess
+ virtual Any SAL_CALL getByName( const ::rtl::OUString& aName )
+ throw(NoSuchElementException, WrappedTargetException, RuntimeException);
+ virtual Sequence< ::rtl::OUString > SAL_CALL getElementNames()
+ throw(RuntimeException);
+ virtual sal_Bool SAL_CALL hasByName( const ::rtl::OUString& aName )
+ throw(RuntimeException);
+
+ // Methods XNameReplace
+ virtual void SAL_CALL replaceByName( const ::rtl::OUString& aName, const Any& aElement )
+ throw(IllegalArgumentException, NoSuchElementException, WrappedTargetException, RuntimeException);
+
+ // Methods XNameContainer
+ virtual void SAL_CALL insertByName( const ::rtl::OUString& aName, const Any& aElement )
+ throw(IllegalArgumentException, ElementExistException, WrappedTargetException, RuntimeException);
+ virtual void SAL_CALL removeByName( const ::rtl::OUString& Name )
+ throw(NoSuchElementException, WrappedTargetException, RuntimeException);
+};
+
+// Methods XElementAccess
+Type DialogContainer_Impl::getElementType()
+ throw(RuntimeException)
+{
+ Type aModuleType = ::getCppuType( (const Reference< XStarBasicDialogInfo > *)0 );
+ return aModuleType;
+}
+
+sal_Bool DialogContainer_Impl::hasElements()
+ throw(RuntimeException)
+{
+ sal_Bool bRet = sal_False;
+
+ mpLib->GetAll( SbxCLASS_OBJECT );
+ sal_Int16 nCount = mpLib->GetObjects()->Count();
+ for( sal_Int16 nObj = 0; nObj < nCount ; nObj++ )
+ {
+ SbxVariable* pVar = mpLib->GetObjects()->Get( nObj );
+ if ( pVar->ISA( SbxObject ) && ( ((SbxObject*)pVar)->GetSbxId() == SBXID_DIALOG ) )
+ {
+ bRet = sal_True;
+ break;
+ }
+ }
+ return bRet;
+}
+
+// Methods XNameAccess
+Any DialogContainer_Impl::getByName( const ::rtl::OUString& aName )
+ throw(NoSuchElementException, WrappedTargetException, RuntimeException)
+{
+ SbxVariable* pVar = mpLib->GetObjects()->Find( aName, SbxCLASS_DONTCARE );
+ if( !( pVar && pVar->ISA( SbxObject ) &&
+ ( ((SbxObject*)pVar)->GetSbxId() == SBXID_DIALOG ) ) )
+ {
+ throw NoSuchElementException();
+ }
+
+ Reference< XStarBasicDialogInfo > xDialog =
+ (XStarBasicDialogInfo*)new DialogInfo_Impl
+ ( aName, implGetDialogData( (SbxObject*)pVar ) );
+
+ Any aRetAny;
+ aRetAny <<= xDialog;
+ return aRetAny;
+}
+
+Sequence< ::rtl::OUString > DialogContainer_Impl::getElementNames()
+ throw(RuntimeException)
+{
+ mpLib->GetAll( SbxCLASS_OBJECT );
+ sal_Int16 nCount = mpLib->GetObjects()->Count();
+ Sequence< ::rtl::OUString > aRetSeq( nCount );
+ ::rtl::OUString* pRetSeq = aRetSeq.getArray();
+ sal_Int32 nDialogCounter = 0;
+
+ for( sal_Int16 nObj = 0; nObj < nCount ; nObj++ )
+ {
+ SbxVariable* pVar = mpLib->GetObjects()->Get( nObj );
+ if ( pVar->ISA( SbxObject ) && ( ((SbxObject*)pVar)->GetSbxId() == SBXID_DIALOG ) )
+ {
+ pRetSeq[ nDialogCounter ] = ::rtl::OUString( pVar->GetName() );
+ nDialogCounter++;
+ }
+ }
+ aRetSeq.realloc( nDialogCounter );
+ return aRetSeq;
+}
+
+sal_Bool DialogContainer_Impl::hasByName( const ::rtl::OUString& aName )
+ throw(RuntimeException)
+{
+ sal_Bool bRet = sal_False;
+ SbxVariable* pVar = mpLib->GetObjects()->Find( aName, SbxCLASS_DONTCARE );
+ if( pVar && pVar->ISA( SbxObject ) &&
+ ( ((SbxObject*)pVar)->GetSbxId() == SBXID_DIALOG ) )
+ {
+ bRet = sal_True;
+ }
+ return bRet;
+}
+
+
+// Methods XNameReplace
+void DialogContainer_Impl::replaceByName( const ::rtl::OUString& aName, const Any& aElement )
+ throw(IllegalArgumentException, NoSuchElementException, WrappedTargetException, RuntimeException)
+{
+ removeByName( aName );
+ insertByName( aName, aElement );
+}
+
+
+// Methods XNameContainer
+void DialogContainer_Impl::insertByName( const ::rtl::OUString& aName, const Any& aElement )
+ throw(IllegalArgumentException, ElementExistException, WrappedTargetException, RuntimeException)
+{
+ (void)aName;
+ Type aModuleType = ::getCppuType( (const Reference< XStarBasicDialogInfo > *)0 );
+ Type aAnyType = aElement.getValueType();
+ if( aModuleType != aAnyType )
+ throw IllegalArgumentException();
+ Reference< XStarBasicDialogInfo > xMod;
+ aElement >>= xMod;
+ SbxObjectRef xDialog = implCreateDialog( xMod->getData() );
+ mpLib->Insert( xDialog );
+}
+
+void DialogContainer_Impl::removeByName( const ::rtl::OUString& Name )
+ throw(NoSuchElementException, WrappedTargetException, RuntimeException)
+{
+ (void)Name;
+ SbxVariable* pVar = mpLib->GetObjects()->Find( Name, SbxCLASS_DONTCARE );
+ if( !( pVar && pVar->ISA( SbxObject ) &&
+ ( ((SbxObject*)pVar)->GetSbxId() == SBXID_DIALOG ) ) )
+ {
+ throw NoSuchElementException();
+ }
+ mpLib->Remove( pVar );
+}
+
+
+//=====================================================================
+
+
+class LibraryContainer_Impl : public NameContainerHelper
+{
+ BasicManager* mpMgr;
+
+public:
+ LibraryContainer_Impl( BasicManager* pMgr )
+ :mpMgr( pMgr ) {}
+
+ // Methods XElementAccess
+ virtual Type SAL_CALL getElementType()
+ throw(RuntimeException);
+ virtual sal_Bool SAL_CALL hasElements()
+ throw(RuntimeException);
+
+ // Methods XNameAccess
+ virtual Any SAL_CALL getByName( const ::rtl::OUString& aName )
+ throw(NoSuchElementException, WrappedTargetException, RuntimeException);
+ virtual Sequence< ::rtl::OUString > SAL_CALL getElementNames()
+ throw(RuntimeException);
+ virtual sal_Bool SAL_CALL hasByName( const ::rtl::OUString& aName )
+ throw(RuntimeException);
+
+ // Methods XNameReplace
+ virtual void SAL_CALL replaceByName( const ::rtl::OUString& aName, const Any& aElement )
+ throw(IllegalArgumentException, NoSuchElementException, WrappedTargetException, RuntimeException);
+
+ // Methods XNameContainer
+ virtual void SAL_CALL insertByName( const ::rtl::OUString& aName, const Any& aElement )
+ throw(IllegalArgumentException, ElementExistException, WrappedTargetException, RuntimeException);
+ virtual void SAL_CALL removeByName( const ::rtl::OUString& Name )
+ throw(NoSuchElementException, WrappedTargetException, RuntimeException);
+};
+
+
+// Methods XElementAccess
+Type LibraryContainer_Impl::getElementType()
+ throw(RuntimeException)
+{
+ Type aType = ::getCppuType( (const Reference< XStarBasicLibraryInfo > *)0 );
+ return aType;
+}
+
+sal_Bool LibraryContainer_Impl::hasElements()
+ throw(RuntimeException)
+{
+ sal_Int32 nLibs = mpMgr->GetLibCount();
+ sal_Bool bRet = (nLibs > 0);
+ return bRet;
+}
+
+// Methods XNameAccess
+Any LibraryContainer_Impl::getByName( const ::rtl::OUString& aName )
+ throw(NoSuchElementException, WrappedTargetException, RuntimeException)
+{
+ Any aRetAny;
+ if( !mpMgr->HasLib( aName ) )
+ throw NoSuchElementException();
+ StarBASIC* pLib = mpMgr->GetLib( aName );
+
+ Reference< XNameContainer > xModuleContainer =
+ (XNameContainer*)new ModuleContainer_Impl( pLib );
+
+ Reference< XNameContainer > xDialogContainer;
+ (XNameContainer*)new DialogContainer_Impl( pLib );
+
+ BasicLibInfo* pLibInfo = mpMgr->FindLibInfo( pLib );
+
+ ::rtl::OUString aPassword = pLibInfo->GetPassword();
+
+ // TODO Only provide extern info!
+ ::rtl::OUString aExternaleSourceURL;
+ ::rtl::OUString aLinkTargetURL;
+ if( pLibInfo->IsReference() )
+ aLinkTargetURL = pLibInfo->GetStorageName();
+ else if( pLibInfo->IsExtern() )
+ aExternaleSourceURL = pLibInfo->GetStorageName();
+
+ Reference< XStarBasicLibraryInfo > xLibInfo = new LibraryInfo_Impl
+ (
+ aName,
+ xModuleContainer,
+ xDialogContainer,
+ aPassword,
+ aExternaleSourceURL,
+ aLinkTargetURL
+ );
+
+ aRetAny <<= xLibInfo;
+ return aRetAny;
+}
+
+Sequence< ::rtl::OUString > LibraryContainer_Impl::getElementNames()
+ throw(RuntimeException)
+{
+ USHORT nLibs = mpMgr->GetLibCount();
+ Sequence< ::rtl::OUString > aRetSeq( nLibs );
+ ::rtl::OUString* pRetSeq = aRetSeq.getArray();
+ for( USHORT i = 0 ; i < nLibs ; i++ )
+ {
+ pRetSeq[i] = ::rtl::OUString( mpMgr->GetLibName( i ) );
+ }
+ return aRetSeq;
+}
+
+sal_Bool LibraryContainer_Impl::hasByName( const ::rtl::OUString& aName )
+ throw(RuntimeException)
+{
+ sal_Bool bRet = mpMgr->HasLib( aName );
+ return bRet;
+}
+
+// Methods XNameReplace
+void LibraryContainer_Impl::replaceByName( const ::rtl::OUString& aName, const Any& aElement )
+ throw(IllegalArgumentException, NoSuchElementException, WrappedTargetException, RuntimeException)
+{
+ removeByName( aName );
+ insertByName( aName, aElement );
+}
+
+// Methods XNameContainer
+void LibraryContainer_Impl::insertByName( const ::rtl::OUString& aName, const Any& aElement )
+ throw(IllegalArgumentException, ElementExistException, WrappedTargetException, RuntimeException)
+{
+ (void)aName;
+ (void)aElement;
+ // TODO: Insert a complete Library?!
+}
+
+void LibraryContainer_Impl::removeByName( const ::rtl::OUString& Name )
+ throw(NoSuchElementException, WrappedTargetException, RuntimeException)
+{
+ StarBASIC* pLib = mpMgr->GetLib( Name );
+ if( !pLib )
+ throw NoSuchElementException();
+ USHORT nLibId = mpMgr->GetLibId( Name );
+ mpMgr->RemoveLib( nLibId );
+}
+
+//=====================================================================
+
+typedef WeakImplHelper1< XStarBasicAccess > StarBasicAccessHelper;
+
+
+class StarBasicAccess_Impl : public StarBasicAccessHelper
+{
+ BasicManager* mpMgr;
+ Reference< XNameContainer > mxLibContainer;
+
+public:
+ StarBasicAccess_Impl( BasicManager* pMgr )
+ :mpMgr( pMgr ) {}
+
+public:
+
+ // Methods
+ virtual Reference< XNameContainer > SAL_CALL getLibraryContainer()
+ throw(RuntimeException);
+ virtual void SAL_CALL createLibrary( const ::rtl::OUString& LibName, const ::rtl::OUString& Password,
+ const ::rtl::OUString& ExternalSourceURL, const ::rtl::OUString& LinkTargetURL )
+ throw(ElementExistException, RuntimeException);
+ virtual void SAL_CALL addModule( const ::rtl::OUString& LibraryName, const ::rtl::OUString& ModuleName,
+ const ::rtl::OUString& Language, const ::rtl::OUString& Source )
+ throw(NoSuchElementException, RuntimeException);
+ virtual void SAL_CALL addDialog( const ::rtl::OUString& LibraryName, const ::rtl::OUString& DialogName,
+ const Sequence< sal_Int8 >& Data )
+ throw(NoSuchElementException, RuntimeException);
+
+};
+
+Reference< XNameContainer > SAL_CALL StarBasicAccess_Impl::getLibraryContainer()
+ throw(RuntimeException)
+{
+ if( !mxLibContainer.is() )
+ mxLibContainer = (XNameContainer*)new LibraryContainer_Impl( mpMgr );
+ return mxLibContainer;
+}
+
+void SAL_CALL StarBasicAccess_Impl::createLibrary
+(
+ const ::rtl::OUString& LibName,
+ const ::rtl::OUString& Password,
+ const ::rtl::OUString& ExternalSourceURL,
+ const ::rtl::OUString& LinkTargetURL
+)
+ throw(ElementExistException, RuntimeException)
+{
+ (void)ExternalSourceURL;
+#ifdef DBG_UTIL
+ StarBASIC* pLib =
+#endif
+ mpMgr->CreateLib( LibName, Password, LinkTargetURL );
+ DBG_ASSERT( pLib, "XML Import: Basic library could not be created");
+}
+
+void SAL_CALL StarBasicAccess_Impl::addModule
+(
+ const ::rtl::OUString& LibraryName,
+ const ::rtl::OUString& ModuleName,
+ const ::rtl::OUString& Language,
+ const ::rtl::OUString& Source
+)
+ throw(NoSuchElementException, RuntimeException)
+{
+ (void)Language;
+ StarBASIC* pLib = mpMgr->GetLib( LibraryName );
+ DBG_ASSERT( pLib, "XML Import: Lib for module unknown");
+ if( pLib )
+ pLib->MakeModule32( ModuleName, Source );
+}
+
+void SAL_CALL StarBasicAccess_Impl::addDialog
+(
+ const ::rtl::OUString& LibraryName,
+ const ::rtl::OUString& DialogName,
+ const Sequence< sal_Int8 >& Data
+)
+ throw(NoSuchElementException, RuntimeException)
+{
+ (void)LibraryName;
+ (void)DialogName;
+ (void)Data;
+}
+
+// Basic XML Import/Export
+Reference< XStarBasicAccess > getStarBasicAccess( BasicManager* pMgr )
+{
+ Reference< XStarBasicAccess > xRet =
+ new StarBasicAccess_Impl( (BasicManager*)pMgr );
+ return xRet;
+}
+
diff --git a/basic/source/basmgr/makefile.mk b/basic/source/basmgr/makefile.mk
new file mode 100644
index 000000000000..e08e9cc753bd
--- /dev/null
+++ b/basic/source/basmgr/makefile.mk
@@ -0,0 +1,46 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+PRJ=..$/..
+
+PRJNAME=basic
+TARGET=basicmgr
+ENABLE_EXCEPTIONS=TRUE
+
+# --- Settings -----------------------------------------------------------
+
+.INCLUDE : settings.mk
+
+
+# --- Allgemein -----------------------------------------------------------
+
+SLOFILES= \
+ $(SLO)$/basmgr.obj \
+ $(SLO)$/basicmanagerrepository.obj
+
+# --- Targets -------------------------------------------------------------
+
+.INCLUDE : target.mk
diff --git a/basic/source/classes/disas.cxx b/basic/source/classes/disas.cxx
new file mode 100644
index 000000000000..a837a3dc4f24
--- /dev/null
+++ b/basic/source/classes/disas.cxx
@@ -0,0 +1,687 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+
+#include <stdio.h>
+#include <string.h>
+#include <tools/stream.hxx>
+#include <basic/sbx.hxx>
+#include "sb.hxx"
+#include "iosys.hxx"
+#include "disas.hxx"
+#include "sbtrace.hxx"
+
+
+static const char* pOp1[] = {
+ "NOP",
+
+ // Operators
+ // the following operators have the same order as in
+ // enum SbxVarOp
+ "EXP", "MUL", "DIV", "MOD", "PLUS", "MINUS", "NEG",
+ "EQ", "NE", "LT", "GT", "LE", "GE",
+ "IDIV", "AND", "OR", "XOR", "EQV", "IMP", "NOT",
+ "CAT",
+ // End enum SbxVarOp
+ "LIKE", "IS",
+ // Load/Store
+ "ARGC", // Create new Argv
+ "ARGV", // TOS ==> current Argv
+ "INPUT", // Input ==> TOS
+ "LINPUT", // Line Input ==> TOS
+ "GET", // get TOS
+ "SET", // Save Object TOS ==> TOS-1
+ "PUT", // TOS ==> TOS-1
+ "CONST", // TOS ==> TOS-1, then ReadOnly
+ "DIM", // DIM
+ "REDIM", // REDIM
+ "REDIMP", // REDIM PRESERVE
+ "ERASE", // delete TOS
+ // Branch
+ "STOP", // End of program
+ "INITFOR", // FOR-Variable init
+ "NEXT", // FOR-Variable increment
+ "CASE", // Begin CASE
+ "ENDCASE", // End CASE
+ "STDERR", // Default error handling
+ "NOERROR", // No error handling
+ "LEAVE", // leave UP
+ // I/O
+ "CHANNEL", // TOS = Channelnumber
+ "PRINT", // print TOS
+ "PRINTF", // print TOS in field
+ "WRITE", // write TOS
+ "RENAME", // Rename Tos+1 to Tos
+ "PROMPT", // TOS = Prompt for Input
+ "RESTART", // Define restart point
+ "STDIO", // Switch to I/O channel 0
+ // Misc
+ "EMPTY", // Empty statement to stack
+ "ERROR", // TOS = error code
+ "LSET", // Save object TOS ==> TOS-1
+ "RSET", // Save object TOS ==> TOS-1 (TODO: Same as above?)
+ "REDIMP_ERASE",
+ "INITFOREACH",
+ "VBASET",
+ "ERASE_CLEAR",
+ "ARRAYACCESS",
+ "BYVAL"
+};
+
+static const char* pOp2[] = {
+ "NUMBER", // Load a numeric constant (+ID)
+ "STRING", // Load a string constant (+ID)
+ "CONSTANT", // Immediate Load (+value)
+ "ARGN", // Save named args in argv (+StringID)
+ "PAD", // Pad String to defined length (+length)
+ // Branches
+ "JUMP", // Jump to target (+Target)
+ "JUMP.T", // evaluate TOS, conditional jump (+Target)
+ "JUMP.F", // evaluate TOS, conditional jump (+Target)
+ "ONJUMP", // evaluate TOS, jump into JUMP-table (+MaxVal)
+ "GOSUB", // UP-Call (+Target)
+ "RETURN", // UP-Return (+0 or Target)
+ "TESTFOR", // Test FOR-Variable, increment (+Endlabel)
+ "CASETO", // Tos+1 <= Case <= Tos, 2xremove (+Target)
+ "ERRHDL", // Error-Handler (+Offset)
+ "RESUME", // Resume after errors (+0 or 1 or Label)
+ // I/O
+ "CLOSE", // (+channel/0)
+ "PRCHAR", // (+char)
+ // Objects
+ "SETCLASS", // Test Set + Classname (+StringId)
+ "TESTCLASS", // Check TOS class (+StringId)
+ "LIB", // Set Libname for Declare-Procs (+StringId)
+ // New since Beta 3 (TODO: Which Beta3?)
+ "BASED", // TOS is incremted about BASE, push BASE before
+ "ARGTYP", // Convert last parameter in argv (+Type)
+ "VBASETCLASS",
+};
+
+static const char* pOp3[] = {
+ // All opcodes with two operands
+ "RTL", // Load from RTL (+StringID+Typ)
+ "FIND", // Load (+StringID+Typ)
+ "ELEM", // Load element (+StringID+Typ)
+ "PARAM", // Parameter (+Offset+Typ)
+
+ // Branching
+ "CALL", // Call DECLARE method (+StringID+Typ)
+ "CALL.C", // Call Cdecl-DECLARE method (+StringID+Typ)
+ "CASEIS", // Case-Test (+Test-Opcode+False-Target)
+ "STMNT", // Start of a statement (+Line+Col)
+
+ // I/O
+ "OPEN", // (+SvStreamFlags+Flags)
+
+ // Objects and variables
+ "LOCAL", // Local variables (+StringID+Typ)
+ "PUBLIC", // Modul global var (+StringID+Typ)
+ "GLOBAL", // Global var (+StringID+Typ)
+ "CREATE", // Create object (+StringId+StringId)
+ "STATIC", // Create static object (+StringId+StringId)
+ "TCREATE", // Create User defined Object (+StringId+StringId)
+ "DCREATE", // Create User defined Object-Array kreieren (+StringId+StringId)
+ "GLOBAL_P", // Define persistent global var (existing after basic restart)
+ // P=PERSIST (+StringID+Typ)
+ "FIND_G", // Searches for global var with special handling due to _GLOBAL_P
+ "DCREATE_REDIMP", // Change dimensions of a user defined Object-Array (+StringId+StringId)
+ "FIND_CM", // Search inside a class module (CM) to enable global search in time
+ "PUBLIC_P", // Module global Variable (persisted between calls)(+StringID+Typ)
+ "FIND_STATIC", // local static var lookup (+StringID+Typ)
+};
+
+static const char** pOps[3] = { pOp1, pOp2, pOp3 };
+
+typedef void( SbiDisas::*Func )( String& ); // Processing routines
+
+static const Func pOperand2[] = {
+ &SbiDisas::StrOp, // Load a numeric constant (+ID)
+ &SbiDisas::StrOp, // Load a string constant (+ID)
+ &SbiDisas::ImmOp, // Immediate Load (+Wert)
+ &SbiDisas::StrOp, // Save a named argument (+ID)
+ &SbiDisas::ImmOp, // Strip String to fixed size (+length)
+
+ // Branches
+ &SbiDisas::LblOp, // Jump (+Target)
+ &SbiDisas::LblOp, // eval TOS, conditional jump (+Target)
+ &SbiDisas::LblOp, // eval TOS, conditional jump (+Target)
+ &SbiDisas::OnOp, // eval TOS, jump in JUMP table (+MaxVal)
+ &SbiDisas::LblOp, // UP call (+Target)
+ &SbiDisas::ReturnOp, // UP Return (+0 or Target)
+ &SbiDisas::LblOp, // test FOR-Variable, increment (+Endlabel)
+ &SbiDisas::LblOp, // Tos+1 <= Case <= Tos), 2xremove (+Target)
+ &SbiDisas::LblOp, // Error handler (+Offset)
+ &SbiDisas::ResumeOp, // Resume after errors (+0 or 1 or Label)
+
+ // I/O
+ &SbiDisas::CloseOp, // (+channel/0)
+ &SbiDisas::CharOp, // (+char)
+
+ // Objects
+ &SbiDisas::StrOp, // Test classname (+StringId)
+ &SbiDisas::StrOp, // TESTCLASS, Check TOS class (+StringId)
+ &SbiDisas::StrOp, // Set libname for declare procs (+StringId)
+ &SbiDisas::ImmOp, // TOS is incremented about BASE erhoeht, BASE pushed before
+ &SbiDisas::TypeOp, // Convert last parameter to/in(?) argv (+Typ)
+ &SbiDisas::StrOp, // VBASETCLASS (+StringId)
+};
+
+static const Func pOperand3[] = {
+ // All opcodes with two operands
+ &SbiDisas::VarOp, // Load from RTL (+StringID+Typ)
+ &SbiDisas::VarOp, // Load (+StringID+Typ)
+ &SbiDisas::VarOp, // Load Element (+StringID+Typ)
+ &SbiDisas::OffOp, // Parameter (+Offset+Typ)
+
+ // Branch
+ &SbiDisas::VarOp, // Call DECLARE-Method (+StringID+Typ)
+ &SbiDisas::VarOp, // Call CDecl-DECLARE-Methode (+StringID+Typ)
+ &SbiDisas::CaseOp, // Case-Test (+Test-Opcode+False-Target)
+ &SbiDisas::StmntOp, // Statement (+Row+Column)
+
+ // I/O
+ &SbiDisas::StrmOp, // (+SvStreamFlags+Flags)
+
+ // Objects
+ &SbiDisas::VarDefOp, // Define local var (+StringID+Typ)
+ &SbiDisas::VarDefOp, // Define Module global var (+StringID+Typ)
+ &SbiDisas::VarDefOp, // Define global var (+StringID+Typ)
+ &SbiDisas::Str2Op, // Create object (+StringId+StringId)
+ &SbiDisas::VarDefOp, // Define static object (+StringID+Typ)
+ &SbiDisas::Str2Op, // Create User defined Object (+StringId+StringId)
+ &SbiDisas::Str2Op, // Create User defined Object-Array (+StringId+StringId)
+ &SbiDisas::VarDefOp, // Define persistent global var P=PERSIST (+StringID+Typ)
+ &SbiDisas::VarOp, // Searches for global var with special handling due to _GLOBAL_P
+ &SbiDisas::Str2Op, // Redimensionate User defined Object-Array (+StringId+StringId)
+ &SbiDisas::VarOp, // FIND_CM
+ &SbiDisas::VarDefOp, // PUBLIC_P
+ &SbiDisas::VarOp, // FIND_STATIC
+};
+
+// TODO: Why as method? Isn't a simple define sufficient?
+static const char* _crlf()
+{
+#if defined (UNX) || defined( PM2 )
+ return "\n";
+#else
+ return "\r\n";
+#endif
+}
+
+// This method exists because we want to load the file as own segment
+BOOL SbModule::Disassemble( String& rText )
+{
+ rText.Erase();
+ if( pImage )
+ {
+ SbiDisas aDisas( this, pImage );
+ aDisas.Disas( rText );
+ }
+ return BOOL( rText.Len() != 0 );
+}
+
+SbiDisas::SbiDisas( SbModule* p, const SbiImage* q ) : rImg( *q ), pMod( p )
+{
+ memset( cLabels, 0, 8192 );
+ nLine = 0;
+ nOff = 0;
+ nPC = 0;
+ nOp1 = nOp2 = nParts = 0;
+ eOp = _NOP;
+ // Set Label-Bits
+ nOff = 0;
+ while( Fetch() )
+ {
+ switch( eOp )
+ {
+ case _RESUME: if( nOp1 <= 1 ) break;
+ case _RETURN: if( !nOp1 ) break;
+ case _JUMP:
+ case _JUMPT:
+ case _JUMPF:
+ case _GOSUB:
+ case _TESTFOR:
+ case _CASEIS:
+ case _CASETO:
+ case _ERRHDL:
+ cLabels[ (nOp1 & 0xffff) >> 3 ] |= ( 1 << ( nOp1 & 7 ) );
+ break;
+ default: break;
+ }
+ }
+ nOff = 0;
+ // Add the publics
+ for( USHORT i = 0; i < pMod->GetMethods()->Count(); i++ )
+ {
+ SbMethod* pMeth = PTR_CAST(SbMethod,pMod->GetMethods()->Get( i ));
+ if( pMeth )
+ {
+ USHORT nPos = (USHORT) (pMeth->GetId());
+ cLabels[ nPos >> 3 ] |= ( 1 << ( nPos & 7 ) );
+ }
+ }
+}
+
+// Read current opcode
+BOOL SbiDisas::Fetch()
+{
+ nPC = nOff;
+ if( nOff >= rImg.GetCodeSize() )
+ return FALSE;
+ const unsigned char* p = (const unsigned char*)( rImg.GetCode() + nOff );
+ eOp = (SbiOpcode) ( *p++ & 0xFF );
+ if( eOp <= SbOP0_END )
+ {
+ nOp1 = nOp2 = 0;
+ nParts = 1;
+ nOff++;
+ return TRUE;
+ }
+ else if( eOp <= SbOP1_END )
+ {
+ nOff += 5;
+ if( nOff > rImg.GetCodeSize() )
+ return FALSE;
+ nOp1 = *p++; nOp1 |= *p++ << 8; nOp1 |= *p++ << 16; nOp1 |= *p++ << 24;
+ nParts = 2;
+ return TRUE;
+ }
+ else if( eOp <= SbOP2_END )
+ {
+ nOff += 9;
+ if( nOff > rImg.GetCodeSize() )
+ return FALSE;
+ nOp1 = *p++; nOp1 |= *p++ << 8; nOp1 |= *p++ << 16; nOp1 |= *p++ << 24;
+ nOp2 = *p++; nOp2 |= *p++ << 8; nOp2 |= *p++ << 16; nOp2 |= *p++ << 24;
+ nParts = 3;
+ return TRUE;
+ }
+ else
+ return FALSE;
+}
+
+void SbiDisas::Disas( SvStream& r )
+{
+ String aText;
+ nOff = 0;
+ while( DisasLine( aText ) )
+ {
+ ByteString aByteText( aText, gsl_getSystemTextEncoding() );
+ r.WriteLine( aByteText );
+ }
+}
+
+void SbiDisas::Disas( String& r )
+{
+ r.Erase();
+ String aText;
+ nOff = 0;
+ while( DisasLine( aText ) )
+ {
+ r += aText;
+ r.AppendAscii( _crlf() );
+ }
+ aText.ConvertLineEnd();
+}
+
+BOOL SbiDisas::DisasLine( String& rText )
+{
+ char cBuf[ 100 ];
+ const char* pMask[] = {
+ "%08" SAL_PRIXUINT32 " ",
+ "%08" SAL_PRIXUINT32 " %02X ",
+ "%08" SAL_PRIXUINT32 " %02X %08X ",
+ "%08" SAL_PRIXUINT32 " %02X %08X %08X " };
+ rText.Erase();
+ if( !Fetch() )
+ return FALSE;
+
+#ifdef DBG_TRACE_BASIC
+ String aTraceStr_STMNT;
+#endif
+
+ // New line?
+ if( eOp == _STMNT && nOp1 != nLine )
+ {
+ // Find line
+ String aSource = rImg.aOUSource;
+ nLine = nOp1;
+ USHORT n = 0;
+ USHORT l = (USHORT)nLine;
+ while( --l ) {
+ n = aSource.SearchAscii( "\n", n );
+ if( n == STRING_NOTFOUND ) break;
+ else n++;
+ }
+ // Show position
+ if( n != STRING_NOTFOUND )
+ {
+ USHORT n2 = aSource.SearchAscii( "\n", n );
+ if( n2 == STRING_NOTFOUND ) n2 = aSource.Len() - n;
+ String s( aSource.Copy( n, n2 - n + 1 ) );
+ BOOL bDone;
+ do {
+ bDone = TRUE;
+ n = s.Search( '\r' );
+ if( n != STRING_NOTFOUND ) bDone = FALSE, s.Erase( n, 1 );
+ n = s.Search( '\n' );
+ if( n != STRING_NOTFOUND ) bDone = FALSE, s.Erase( n, 1 );
+ } while( !bDone );
+// snprintf( cBuf, sizeof(cBuf), pMask[ 0 ], nPC );
+// rText += cBuf;
+ rText.AppendAscii( "; " );
+ rText += s;
+ rText.AppendAscii( _crlf() );
+
+#ifdef DBG_TRACE_BASIC
+ aTraceStr_STMNT = s;
+#endif
+ }
+ }
+
+ // Label?
+ const char* p = "";
+ if( cLabels[ nPC >> 3 ] & ( 1 << ( nPC & 7 ) ) )
+ {
+ // Public?
+ ByteString aByteMethName;
+ for( USHORT i = 0; i < pMod->GetMethods()->Count(); i++ )
+ {
+ SbMethod* pMeth = PTR_CAST(SbMethod,pMod->GetMethods()->Get( i ));
+ if( pMeth )
+ {
+ aByteMethName = ByteString( pMeth->GetName(), gsl_getSystemTextEncoding() );
+ if( pMeth->GetId() == nPC )
+ {
+ p = aByteMethName.GetBuffer();
+ break;
+ }
+ if( pMeth->GetId() >= nPC )
+ break;
+ }
+ }
+ snprintf( cBuf, sizeof(cBuf), pMask[ 0 ], nPC );
+ rText.AppendAscii( cBuf );
+ if( p && *p )
+ {
+ rText.AppendAscii( p );
+ }
+ else
+ {
+ // fix warning (now error) for "Lbl%04lX" format
+ snprintf( cBuf, sizeof(cBuf), "Lbl%08" SAL_PRIXUINT32, nPC );
+ rText.AppendAscii( cBuf );
+ }
+ rText += ':';
+ rText.AppendAscii( _crlf() );
+ }
+ snprintf( cBuf, sizeof(cBuf), pMask[ nParts ], nPC, (USHORT) eOp, nOp1, nOp2 );
+
+ String aPCodeStr;
+ aPCodeStr.AppendAscii( cBuf );
+ int n = eOp;
+ if( eOp >= SbOP2_START )
+ n -= SbOP2_START;
+ else if( eOp >= SbOP1_START )
+ n -= SbOP1_START;
+ aPCodeStr += '\t';
+ aPCodeStr.AppendAscii( pOps[ nParts-1 ][ n ] );
+ aPCodeStr += '\t';
+ switch( nParts )
+ {
+ case 2: (this->*( pOperand2[ n ] ) )( aPCodeStr ); break;
+ case 3: (this->*( pOperand3[ n ] ) )( aPCodeStr ); break;
+ }
+
+ rText += aPCodeStr;
+
+#ifdef DBG_TRACE_BASIC
+ dbg_RegisterTraceTextForPC( pMod, nPC, aTraceStr_STMNT, aPCodeStr );
+#endif
+
+ return TRUE;
+}
+
+// Read from StringPool
+void SbiDisas::StrOp( String& rText )
+{
+ String aStr = rImg.GetString( (USHORT)nOp1 );
+ ByteString aByteString( aStr, RTL_TEXTENCODING_ASCII_US );
+ const char* p = aByteString.GetBuffer();
+ if( p )
+ {
+ rText += '"';
+ rText.AppendAscii( p );
+ rText += '"';
+ }
+ else
+ {
+ rText.AppendAscii( "?String? " );
+ rText += (USHORT)nOp1;
+ }
+}
+
+void SbiDisas::Str2Op( String& rText )
+{
+ StrOp( rText );
+ rText += ',';
+ String s;
+ nOp1 = nOp2;
+ StrOp( s );
+ rText += s;
+}
+
+// Immediate Operand
+void SbiDisas::ImmOp( String& rText )
+{
+ rText += String::CreateFromInt32(nOp1);
+}
+
+// OnGoto Operand
+void SbiDisas::OnOp( String& rText )
+{
+ rText += String::CreateFromInt32(nOp1 & 0x7FFF);
+ if( nOp1 & 0x800 )
+ rText.AppendAscii( "\t; Gosub" );
+}
+
+// Label
+void SbiDisas::LblOp( String& rText )
+{
+ char cBuf[ 10 ];
+ snprintf( cBuf, sizeof(cBuf), "Lbl%04" SAL_PRIXUINT32, nOp1 );
+ rText.AppendAscii( cBuf );
+}
+
+// 0 or Label
+void SbiDisas::ReturnOp( String& rText )
+{
+ if( nOp1 )
+ LblOp( rText );
+}
+
+// 0, 1 or Label
+void SbiDisas::ResumeOp( String& rText )
+{
+ switch( nOp1 )
+ {
+ case 1: rText.AppendAscii( "NEXT" ); break;
+ case 2: LblOp( rText );
+ }
+}
+
+// print Prompt
+// FALSE/TRUE
+void SbiDisas::PromptOp( String& rText )
+{
+ if( nOp1 )
+ rText.AppendAscii( "\"? \"" );
+}
+
+// 0 or 1
+void SbiDisas::CloseOp( String& rText )
+{
+ rText.AppendAscii( nOp1 ? "Channel" : "All" );
+}
+
+// Print character
+void SbiDisas::CharOp( String& rText )
+{
+ const char* p = NULL;
+ switch( nOp1 )
+ {
+ case 7: p = "'\\a'"; break;
+ case 9: p = "'\\t'"; break;
+ case 10: p = "'\\n'"; break;
+ case 12: p = "'\\f'"; break;
+ case 13: p = "'\\r'"; break;
+ }
+ if( p ) rText.AppendAscii( p );
+ else if( nOp1 >= ' ' )
+ rText += '\'',
+ rText += (char) nOp1,
+ rText += '\'';
+ else
+ rText.AppendAscii( "char " ),
+ rText += (USHORT)nOp1;
+}
+
+// Print var: String-ID and type
+void SbiDisas::VarOp( String& rText )
+{
+ rText += rImg.GetString( (USHORT)(nOp1 & 0x7FFF) );
+ rText.AppendAscii( "\t; " );
+ // The type
+ UINT32 n = nOp1;
+ nOp1 = nOp2;
+ TypeOp( rText );
+ if( n & 0x8000 )
+ rText.AppendAscii( ", Args" );
+}
+
+// Define variable: String-ID and type
+void SbiDisas::VarDefOp( String& rText )
+{
+ rText += rImg.GetString( (USHORT)(nOp1 & 0x7FFF) );
+ rText.AppendAscii( "\t; " );
+ // The Typ
+ nOp1 = nOp2;
+ TypeOp( rText );
+}
+
+// Print variable: Offset and Typ
+void SbiDisas::OffOp( String& rText )
+{
+ rText += String::CreateFromInt32( nOp1 & 0x7FFF );
+ rText.AppendAscii( "\t; " );
+ // The type
+ UINT32 n = nOp1;
+ nOp1 = nOp2;
+ TypeOp( rText );
+ if( n & 0x8000 )
+ rText.AppendAscii( ", Args" );
+}
+
+// Data type
+#ifdef HP9000 // TODO: remove this!
+static char* SbiDisas_TypeOp_pTypes[13] = {
+ "Empty","Null","Integer","Long","Single","Double",
+ "Currency","Date","String","Object","Error","Boolean",
+ "Variant" };
+#define pTypes SbiDisas_TypeOp_pTypes
+#endif
+void SbiDisas::TypeOp( String& rText )
+{
+ // AB 19.1.96: Typ kann Flag fr BYVAL enthalten (StepARGTYP)
+ if( nOp1 & 0x8000 )
+ {
+ nOp1 &= 0x7FFF; // Flag wegfiltern
+ rText.AppendAscii( "BYVAL " );
+ }
+ if( nOp1 < 13 )
+ {
+#ifndef HP9000
+ static char pTypes[][13] = {
+ "Empty","Null","Integer","Long","Single","Double",
+ "Currency","Date","String","Object","Error","Boolean",
+ "Variant" };
+#endif
+ rText.AppendAscii( pTypes[ nOp1 ] );
+ }
+ else
+ {
+ rText.AppendAscii( "type " );
+ rText += (USHORT)nOp1;
+ }
+}
+#ifdef HP9000
+#undef pTypes
+#endif
+
+// TRUE-Label, condition Opcode
+void SbiDisas::CaseOp( String& rText )
+{
+ LblOp( rText );
+ rText += ',';
+ rText.AppendAscii( pOp1[ nOp2 - SbxEQ + _EQ ] );
+}
+
+// Row, column
+void SbiDisas::StmntOp( String& rText )
+{
+ rText += String::CreateFromInt32( nOp1 );
+ rText += ',';
+ UINT32 nCol = nOp2 & 0xFF;
+ UINT32 nFor = nOp2 / 0x100;
+ rText += String::CreateFromInt32( nCol );
+ rText.AppendAscii( " (For-Level: " );
+ rText += String::CreateFromInt32( nFor );
+ rText += ')';
+}
+
+// open mode, flags
+void SbiDisas::StrmOp( String& rText )
+{
+ char cBuf[ 10 ];
+ snprintf( cBuf, sizeof(cBuf), "%04" SAL_PRIXUINT32, nOp1 );
+ rText.AppendAscii( cBuf );
+ if( nOp2 & SBSTRM_INPUT )
+ rText.AppendAscii( ", Input" );
+ if( nOp2 & SBSTRM_OUTPUT )
+ rText.AppendAscii( ", Output" );
+ if( nOp2 & SBSTRM_APPEND )
+ rText.AppendAscii( ", Append" );
+ if( nOp2 & SBSTRM_RANDOM )
+ rText.AppendAscii( ", Random" );
+ if( nOp2 & SBSTRM_BINARY )
+ rText.AppendAscii( ", Binary" );
+}
+
+
diff --git a/basic/source/classes/errobject.cxx b/basic/source/classes/errobject.cxx
new file mode 100644
index 000000000000..0ec0454e2bb5
--- /dev/null
+++ b/basic/source/classes/errobject.cxx
@@ -0,0 +1,225 @@
+/*************************************************************************
+*
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2000, 2010 Oracle and/or its affiliates.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org 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 Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+*
+************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+#include "errobject.hxx"
+
+#include <cppuhelper/implbase2.hxx>
+#include <com/sun/star/script/XDefaultProperty.hpp>
+#include "sbintern.hxx"
+#include "runtime.hxx"
+
+using namespace ::com::sun::star;
+using namespace ::ooo;
+
+typedef ::cppu::WeakImplHelper2< vba::XErrObject, script::XDefaultProperty > ErrObjectImpl_BASE;
+
+class ErrObject : public ErrObjectImpl_BASE
+{
+ rtl::OUString m_sHelpFile;
+ rtl::OUString m_sSource;
+ rtl::OUString m_sDescription;
+ sal_Int32 m_nNumber;
+ sal_Int32 m_nHelpContext;
+
+public:
+ ErrObject();
+ ~ErrObject();
+ // Attributes
+ virtual ::sal_Int32 SAL_CALL getNumber() throw (uno::RuntimeException);
+ virtual void SAL_CALL setNumber( ::sal_Int32 _number ) throw (uno::RuntimeException);
+ virtual ::sal_Int32 SAL_CALL getHelpContext() throw (uno::RuntimeException);
+ virtual void SAL_CALL setHelpContext( ::sal_Int32 _helpcontext ) throw (uno::RuntimeException);
+ virtual ::rtl::OUString SAL_CALL getHelpFile() throw (uno::RuntimeException);
+ virtual void SAL_CALL setHelpFile( const ::rtl::OUString& _helpfile ) throw (uno::RuntimeException);
+ virtual ::rtl::OUString SAL_CALL getDescription() throw (uno::RuntimeException);
+ virtual void SAL_CALL setDescription( const ::rtl::OUString& _description ) throw (uno::RuntimeException);
+ virtual ::rtl::OUString SAL_CALL getSource() throw (uno::RuntimeException);
+ virtual void SAL_CALL setSource( const ::rtl::OUString& _source ) throw (uno::RuntimeException);
+
+ // Methods
+ virtual void SAL_CALL Clear( ) throw (uno::RuntimeException);
+ virtual void SAL_CALL Raise( const uno::Any& Number, const uno::Any& Source, const uno::Any& Description, const uno::Any& HelpFile, const uno::Any& HelpContext ) throw (uno::RuntimeException);
+ // XDefaultProperty
+ virtual ::rtl::OUString SAL_CALL getDefaultPropertyName( ) throw (uno::RuntimeException);
+
+ // Helper method
+ void setData( const uno::Any& Number, const uno::Any& Source, const uno::Any& Description,
+ const uno::Any& HelpFile, const uno::Any& HelpContext ) throw (uno::RuntimeException);
+};
+
+
+ErrObject::~ErrObject()
+{
+}
+
+ErrObject::ErrObject() : m_nNumber(0), m_nHelpContext(0)
+{
+}
+
+sal_Int32 SAL_CALL
+ErrObject::getNumber() throw (uno::RuntimeException)
+{
+ return m_nNumber;
+}
+
+void SAL_CALL
+ErrObject::setNumber( ::sal_Int32 _number ) throw (uno::RuntimeException)
+{
+ pINST->setErrorVB( _number, String() );
+ ::rtl::OUString _description = pINST->GetErrorMsg();
+ setData( uno::makeAny( _number ), uno::Any(), uno::makeAny( _description ), uno::Any(), uno::Any() );
+}
+
+::sal_Int32 SAL_CALL
+ErrObject::getHelpContext() throw (uno::RuntimeException)
+{
+ return m_nHelpContext;
+}
+void SAL_CALL
+ErrObject::setHelpContext( ::sal_Int32 _helpcontext ) throw (uno::RuntimeException)
+{
+ m_nHelpContext = _helpcontext;
+}
+
+::rtl::OUString SAL_CALL
+ErrObject::getHelpFile() throw (uno::RuntimeException)
+{
+ return m_sHelpFile;
+}
+
+void SAL_CALL
+ErrObject::setHelpFile( const ::rtl::OUString& _helpfile ) throw (uno::RuntimeException)
+{
+ m_sHelpFile = _helpfile;
+}
+
+::rtl::OUString SAL_CALL
+ErrObject::getDescription() throw (uno::RuntimeException)
+{
+ return m_sDescription;
+}
+
+void SAL_CALL
+ErrObject::setDescription( const ::rtl::OUString& _description ) throw (uno::RuntimeException)
+{
+ m_sDescription = _description;
+}
+
+::rtl::OUString SAL_CALL
+ErrObject::getSource() throw (uno::RuntimeException)
+{
+ return m_sSource;
+}
+
+void SAL_CALL
+ErrObject::setSource( const ::rtl::OUString& _source ) throw (uno::RuntimeException)
+{
+ m_sSource = _source;
+}
+
+// Methods
+void SAL_CALL
+ErrObject::Clear( ) throw (uno::RuntimeException)
+{
+ m_sHelpFile = rtl::OUString();
+ m_sSource = m_sHelpFile;
+ m_sDescription = m_sSource;
+ m_nNumber = 0;
+ m_nHelpContext = 0;
+}
+
+void SAL_CALL
+ErrObject::Raise( const uno::Any& Number, const uno::Any& Source, const uno::Any& Description, const uno::Any& HelpFile, const uno::Any& HelpContext ) throw (uno::RuntimeException)
+{
+ setData( Number, Source, Description, HelpFile, HelpContext );
+ if ( m_nNumber )
+ pINST->ErrorVB( m_nNumber, m_sDescription );
+}
+
+// XDefaultProperty
+::rtl::OUString SAL_CALL
+ErrObject::getDefaultPropertyName( ) throw (uno::RuntimeException)
+{
+ static rtl::OUString sDfltPropName( RTL_CONSTASCII_USTRINGPARAM("Number") );
+ return sDfltPropName;
+}
+
+void ErrObject::setData( const uno::Any& Number, const uno::Any& Source, const uno::Any& Description, const uno::Any& HelpFile, const uno::Any& HelpContext )
+ throw (uno::RuntimeException)
+{
+ if ( !Number.hasValue() )
+ throw uno::RuntimeException( rtl::OUString::createFromAscii("Missing Required Paramater"), uno::Reference< uno::XInterface >() );
+ Number >>= m_nNumber;
+ Description >>= m_sDescription;
+ Source >>= m_sSource;
+ HelpFile >>= m_sHelpFile;
+ HelpContext >>= m_nHelpContext;
+}
+
+// SbxErrObject
+SbxErrObject::SbxErrObject( const String& rName, const Any& rUnoObj )
+ : SbUnoObject( rName, rUnoObj )
+ , m_pErrObject( NULL )
+{
+ OSL_TRACE("SbxErrObject::SbxErrObject ctor");
+ rUnoObj >>= m_xErr;
+ if ( m_xErr.is() )
+ {
+ SetDfltProperty( uno::Reference< script::XDefaultProperty >( m_xErr, uno::UNO_QUERY_THROW )->getDefaultPropertyName() ) ;
+ m_pErrObject = static_cast< ErrObject* >( m_xErr.get() );
+ }
+}
+
+SbxErrObject::~SbxErrObject()
+{
+ OSL_TRACE("SbxErrObject::~SbxErrObject dtor");
+}
+
+uno::Reference< vba::XErrObject >
+SbxErrObject::getUnoErrObject()
+{
+ SbxVariable* pVar = getErrObject();
+ SbxErrObject* pGlobErr = static_cast< SbxErrObject* >( pVar );
+ return pGlobErr->m_xErr;
+}
+
+SbxVariableRef
+SbxErrObject::getErrObject()
+{
+ static SbxVariableRef pGlobErr = new SbxErrObject( String( RTL_CONSTASCII_USTRINGPARAM("Err")), uno::makeAny( uno::Reference< vba::XErrObject >( new ErrObject() ) ) );
+ return pGlobErr;
+}
+
+void SbxErrObject::setNumberAndDescription( ::sal_Int32 _number, const ::rtl::OUString& _description )
+ throw (uno::RuntimeException)
+{
+ if( m_pErrObject != NULL )
+ m_pErrObject->setData( uno::makeAny( _number ), uno::Any(), uno::makeAny( _description ), uno::Any(), uno::Any() );
+}
+
diff --git a/basic/source/classes/eventatt.cxx b/basic/source/classes/eventatt.cxx
new file mode 100644
index 000000000000..791e9fe5a8c1
--- /dev/null
+++ b/basic/source/classes/eventatt.cxx
@@ -0,0 +1,647 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+
+//#include <stl_queue.h>
+#include <osl/mutex.hxx>
+#include <comphelper/processfactory.hxx>
+
+
+#include <com/sun/star/script/XEventAttacher.hpp>
+#include <com/sun/star/script/XAllListener.hpp>
+#include <com/sun/star/script/XScriptEventsSupplier.hpp>
+#include <com/sun/star/script/XScriptEventsAttacher.hpp>
+#include <com/sun/star/script/ScriptEventDescriptor.hpp>
+#include <com/sun/star/script/XLibraryContainer.hpp>
+#include <com/sun/star/beans/XPropertySet.hpp>
+#include <com/sun/star/container/XNameContainer.hpp>
+#include <com/sun/star/resource/XStringResourceSupplier.hpp>
+#include <com/sun/star/resource/XStringResourceManager.hpp>
+#include <com/sun/star/awt/XControlContainer.hpp>
+#include <com/sun/star/awt/XControlModel.hpp>
+#include <com/sun/star/awt/XControl.hpp>
+#include <com/sun/star/awt/XDialog.hpp>
+#include <com/sun/star/awt/XWindow.hpp>
+#include <com/sun/star/script/provider/XScriptProviderFactory.hpp>
+
+#include <com/sun/star/script/provider/XScriptProviderSupplier.hpp>
+#include <com/sun/star/script/provider/XScriptProvider.hpp>
+#include <com/sun/star/awt/XDialogProvider.hpp>
+
+#include <com/sun/star/frame/XModel.hpp>
+#include <com/sun/star/frame/XDesktop.hpp>
+#include <com/sun/star/container/XEnumerationAccess.hpp>
+#include <basic/basicmanagerrepository.hxx>
+#include <basic/basmgr.hxx>
+//==================================================================================================
+
+#include <xmlscript/xmldlg_imexp.hxx>
+#include <sbunoobj.hxx>
+#include <basic/sbstar.hxx>
+#include <basic/sbmeth.hxx>
+#include <basic/sbuno.hxx>
+#include <runtime.hxx>
+#include <sbintern.hxx>
+
+
+#include <cppuhelper/implbase1.hxx>
+using namespace ::com::sun::star;
+using namespace ::com::sun::star::uno;
+using namespace ::com::sun::star::script;
+using namespace ::com::sun::star::resource;
+
+using namespace ::com::sun::star::uno;
+using namespace ::com::sun::star::lang;
+using namespace ::com::sun::star::beans;
+using namespace ::com::sun::star::script;
+using namespace ::com::sun::star::container;
+using namespace ::com::sun::star::reflection;
+using namespace ::com::sun::star::awt;
+using namespace ::com::sun::star::io;
+using namespace ::cppu;
+using namespace ::osl;
+
+
+
+Reference< frame::XModel > getModelFromBasic( SbxObject* pBasic )
+{
+ OSL_PRECOND( pBasic != NULL, "getModelFromBasic: illegal call!" );
+ if ( !pBasic )
+ return NULL;
+
+ // look for the ThisComponent variable, first in the parent (which
+ // might be the document's Basic), then in the parent's parent (which might be
+ // the application Basic)
+ const ::rtl::OUString sThisComponent( RTL_CONSTASCII_USTRINGPARAM( "ThisComponent" ) );
+ SbxVariable* pThisComponent = NULL;
+
+ SbxObject* pLookup = pBasic->GetParent();
+ while ( pLookup && !pThisComponent )
+ {
+ pThisComponent = pLookup->Find( sThisComponent, SbxCLASS_OBJECT );
+ pLookup = pLookup->GetParent();
+ }
+ if ( !pThisComponent )
+ {
+ OSL_TRACE("Failed to get ThisComponent");
+ // the application Basic, at the latest, should have this variable
+ return NULL;
+ }
+
+ Any aThisComponent( sbxToUnoValue( pThisComponent ) );
+ Reference< frame::XModel > xModel( aThisComponent, UNO_QUERY );
+ if ( !xModel.is() )
+ {
+ // it's no XModel. Okay, ThisComponent nowadays is allowed to be a controller.
+ Reference< frame::XController > xController( aThisComponent, UNO_QUERY );
+ if ( xController.is() )
+ xModel = xController->getModel();
+ }
+
+ if ( !xModel.is() )
+ return NULL;
+
+#if OSL_DEBUG_LEVEL > 0
+ OSL_TRACE("Have model ThisComponent points to url %s",
+ ::rtl::OUStringToOString( xModel->getURL(),
+ RTL_TEXTENCODING_ASCII_US ).pData->buffer );
+#endif
+
+ return xModel;
+}
+
+void SFURL_firing_impl( const ScriptEvent& aScriptEvent, Any* pRet, const Reference< frame::XModel >& xModel )
+{
+ OSL_TRACE("SFURL_firing_impl() processing script url %s",
+ ::rtl::OUStringToOString( aScriptEvent.ScriptCode,
+ RTL_TEXTENCODING_ASCII_US ).pData->buffer );
+ try
+ {
+ Reference< provider::XScriptProvider > xScriptProvider;
+ if ( xModel.is() )
+ {
+ Reference< provider::XScriptProviderSupplier > xSupplier( xModel, UNO_QUERY );
+ OSL_ENSURE( xSupplier.is(), "SFURL_firing_impl: failed to get script provider supplier" );
+ if ( xSupplier.is() )
+ xScriptProvider.set( xSupplier->getScriptProvider() );
+ }
+ else
+ {
+ Reference< XComponentContext > xContext;
+ Reference< XPropertySet > xProps( ::comphelper::getProcessServiceFactory(), UNO_QUERY );
+ OSL_ASSERT( xProps.is() );
+ OSL_VERIFY( xProps->getPropertyValue( ::rtl::OUString::createFromAscii( "DefaultContext" ) ) >>= xContext );
+ if ( xContext.is() )
+ {
+ Reference< provider::XScriptProviderFactory > xFactory(
+ xContext->getValueByName(
+ ::rtl::OUString::createFromAscii( "/singletons/com.sun.star.script.provider.theMasterScriptProviderFactory" ) ),
+ UNO_QUERY );
+ OSL_ENSURE( xFactory.is(), "SFURL_firing_impl: failed to get master script provider factory" );
+ if ( xFactory.is() )
+ {
+ Any aCtx;
+ aCtx <<= ::rtl::OUString::createFromAscii( "user" );
+ xScriptProvider.set( xFactory->createScriptProvider( aCtx ), UNO_QUERY );
+ }
+ }
+ }
+
+ if ( !xScriptProvider.is() )
+ {
+ OSL_TRACE("SFURL_firing_impl() Failed to create msp");
+ return;
+ }
+ Sequence< Any > inArgs( 0 );
+ Sequence< Any > outArgs( 0 );
+ Sequence< sal_Int16 > outIndex;
+
+ // get Arguments for script
+ inArgs = aScriptEvent.Arguments;
+
+ Reference< provider::XScript > xScript = xScriptProvider->getScript( aScriptEvent.ScriptCode );
+
+ if ( !xScript.is() )
+ {
+ OSL_TRACE("SFURL_firing_impl() Failed to obtain XScript");
+ return;
+ }
+
+ Any result = xScript->invoke( inArgs, outIndex, outArgs );
+ if ( pRet )
+ {
+ *pRet = result;
+ }
+ }
+ catch ( RuntimeException& re )
+ {
+ OSL_TRACE("SFURL_firing_impl() Caught RuntimeException reason %s.",
+ ::rtl::OUStringToOString( re.Message,
+ RTL_TEXTENCODING_ASCII_US ).pData->buffer );
+ }
+ catch ( Exception& e )
+ {
+ OSL_TRACE("SFURL_firing_impl() Caught Exception reason %s.",
+ ::rtl::OUStringToOString( e.Message,
+ RTL_TEXTENCODING_ASCII_US ).pData->buffer );
+ }
+
+}
+
+
+class BasicScriptListener_Impl : public WeakImplHelper1< XScriptListener >
+{
+ StarBASICRef maBasicRef;
+ Reference< frame::XModel > m_xModel;
+
+ virtual void firing_impl(const ScriptEvent& aScriptEvent, Any* pRet);
+
+public:
+ BasicScriptListener_Impl( StarBASIC* pBasic, const Reference< frame::XModel >& xModel )
+ : maBasicRef( pBasic ), m_xModel( xModel ) {}
+
+ // Methods of XAllListener
+ virtual void SAL_CALL firing(const ScriptEvent& aScriptEvent)
+ throw( RuntimeException );
+ virtual Any SAL_CALL approveFiring(const ScriptEvent& aScriptEvent)
+ throw( InvocationTargetException, RuntimeException );
+
+ // Methods of XEventListener
+ virtual void SAL_CALL disposing(const EventObject& Source)
+ throw( RuntimeException );
+};
+
+// Methods XAllListener
+void BasicScriptListener_Impl::firing( const ScriptEvent& aScriptEvent ) throw ( RuntimeException )
+{
+ firing_impl( aScriptEvent, NULL );
+}
+
+Any BasicScriptListener_Impl::approveFiring( const ScriptEvent& aScriptEvent )
+ throw ( InvocationTargetException, RuntimeException )
+{
+ Any aRetAny;
+ firing_impl( aScriptEvent, &aRetAny );
+ return aRetAny;
+}
+
+// Methods XEventListener
+void BasicScriptListener_Impl::disposing(const EventObject& ) throw ( RuntimeException )
+{
+ // TODO: ???
+ //NAMESPACE_VOS(OGuard) guard( Application::GetSolarMutex() );
+ //xSbxObj.Clear();
+}
+
+
+void BasicScriptListener_Impl::firing_impl( const ScriptEvent& aScriptEvent, Any* pRet )
+{
+ //Guard< Mutex > aGuard( Mutex::getGlobalMutex() );
+ //{
+ if( aScriptEvent.ScriptType.compareToAscii( "StarBasic" ) == 0 )
+ {
+ // Full qualified name?
+ String aMacro( aScriptEvent.ScriptCode );
+ String aLibName;
+ String aLocation;
+ if( aMacro.GetTokenCount( '.' ) == 3 )
+ {
+ sal_uInt16 nLast = 0;
+ ::rtl::OUString aFullLibName = aMacro.GetToken( 0, '.', nLast );
+
+ sal_Int32 nIndex = aFullLibName.indexOf( (sal_Unicode)':' );
+ if (nIndex >= 0)
+ {
+ aLocation = aFullLibName.copy( 0, nIndex );
+ aLibName = aFullLibName.copy( nIndex + 1 );
+ }
+
+ String aModul = aMacro.GetToken( 0, '.', nLast );
+ aMacro.Erase( 0, nLast );
+ }
+
+ SbxObject* p = maBasicRef;
+ SbxObject* pParent = p->GetParent();
+ SbxObject* pParentParent = pParent ? pParent->GetParent() : NULL;
+
+ StarBASICRef xAppStandardBasic;
+ StarBASICRef xDocStandardBasic;
+ if( pParentParent )
+ {
+ // Own basic must be document library
+ xAppStandardBasic = (StarBASIC*)pParentParent;
+ xDocStandardBasic = (StarBASIC*)pParent;
+ }
+ else if( pParent )
+ {
+ String aName = p->GetName();
+ if( aName.EqualsAscii("Standard") )
+ {
+ // Own basic is doc standard lib
+ xDocStandardBasic = (StarBASIC*)p;
+ }
+ xAppStandardBasic = (StarBASIC*)pParent;
+ }
+ else
+ {
+ xAppStandardBasic = (StarBASIC*)p;
+ }
+
+ sal_Bool bSearchLib = true;
+ StarBASICRef xLibSearchBasic;
+ if( aLocation.EqualsAscii("application") )
+ xLibSearchBasic = xAppStandardBasic;
+ else if( aLocation.EqualsAscii("document") )
+ xLibSearchBasic = xDocStandardBasic;
+ else
+ bSearchLib = false;
+
+ SbxVariable* pMethVar = NULL;
+ // Be still tolerant and make default search if no search basic exists
+ if( bSearchLib && xLibSearchBasic.Is() )
+ {
+ StarBASICRef xLibBasic;
+ sal_Int16 nCount = xLibSearchBasic->GetObjects()->Count();
+ for( sal_Int16 nObj = -1; nObj < nCount ; nObj++ )
+ {
+ StarBASIC* pBasic;
+ if( nObj == -1 )
+ {
+ pBasic = (StarBASIC*)xLibSearchBasic;
+ }
+ else
+ {
+ SbxVariable* pVar = xLibSearchBasic->GetObjects()->Get( nObj );
+ pBasic = PTR_CAST(StarBASIC,pVar);
+ }
+ if( pBasic )
+ {
+ String aName = pBasic->GetName();
+ if( aName == aLibName )
+ {
+ // Search only in the lib, not automatically in application basic
+ USHORT nFlags = pBasic->GetFlags();
+ pBasic->ResetFlag( SBX_GBLSEARCH );
+ pMethVar = pBasic->Find( aMacro, SbxCLASS_DONTCARE );
+ pBasic->SetFlags( nFlags );
+ break;
+ }
+ }
+ }
+ }
+
+ // Default: Be tolerant and search everywhere
+ if( (!pMethVar || !pMethVar->ISA(SbMethod)) && maBasicRef.Is() )
+ pMethVar = maBasicRef->FindQualified( aMacro, SbxCLASS_DONTCARE );
+
+ SbMethod* pMeth = PTR_CAST(SbMethod,pMethVar);
+ if( !pMeth )
+ return;
+
+ // Setup parameters
+ SbxArrayRef xArray;
+ String aTmp;
+ sal_Int32 nCnt = aScriptEvent.Arguments.getLength();
+ if( nCnt )
+ {
+ xArray = new SbxArray;
+ const Any *pArgs = aScriptEvent.Arguments.getConstArray();
+ for( sal_Int32 i = 0; i < nCnt; i++ )
+ {
+ SbxVariableRef xVar = new SbxVariable( SbxVARIANT );
+ unoToSbxValue( (SbxVariable*)xVar, pArgs[i] );
+ xArray->Put( xVar, sal::static_int_cast< USHORT >(i+1) );
+ }
+ }
+
+ // Call method
+ SbxVariableRef xValue = pRet ? new SbxVariable : 0;
+ if( xArray.Is() )
+ pMeth->SetParameters( xArray );
+ pMeth->Call( xValue );
+ if( pRet )
+ *pRet = sbxToUnoValue( xValue );
+ pMeth->SetParameters( NULL );
+ }
+ else // scripting framework script
+ {
+ //callBasic via scripting framework
+ SFURL_firing_impl( aScriptEvent, pRet, m_xModel );
+
+ }
+}
+
+Any implFindDialogLibForDialog( const Any& rDlgAny, SbxObject* pBasic )
+{
+ Any aRetDlgLibAny;
+
+ SbxVariable* pDlgLibContVar = pBasic->Find
+ ( String::CreateFromAscii("DialogLibraries"), SbxCLASS_OBJECT );
+ if( pDlgLibContVar && pDlgLibContVar->ISA(SbUnoObject) )
+ {
+ SbUnoObject* pDlgLibContUnoObj = (SbUnoObject*)(SbxBase*)pDlgLibContVar;
+ Any aDlgLibContAny = pDlgLibContUnoObj->getUnoAny();
+
+ Reference< XLibraryContainer > xDlgLibContNameAccess( aDlgLibContAny, UNO_QUERY );
+ OSL_ENSURE( xDlgLibContNameAccess.is(), "implFindDialogLibForDialog: no lib container for the given dialog!" );
+ if( xDlgLibContNameAccess.is() )
+ {
+ Sequence< ::rtl::OUString > aLibNames = xDlgLibContNameAccess->getElementNames();
+ const ::rtl::OUString* pLibNames = aLibNames.getConstArray();
+ sal_Int32 nLibNameCount = aLibNames.getLength();
+
+ for( sal_Int32 iLib = 0 ; iLib < nLibNameCount ; iLib++ )
+ {
+ if ( !xDlgLibContNameAccess->isLibraryLoaded( pLibNames[ iLib ] ) )
+ // if the library isn't loaded, then the dialog cannot originate from this lib
+ continue;
+
+ Any aDlgLibAny = xDlgLibContNameAccess->getByName( pLibNames[ iLib ] );
+
+ Reference< XNameAccess > xDlgLibNameAccess( aDlgLibAny, UNO_QUERY );
+ OSL_ENSURE( xDlgLibNameAccess.is(), "implFindDialogLibForDialog: invalid dialog lib!" );
+ if( xDlgLibNameAccess.is() )
+ {
+ Sequence< ::rtl::OUString > aDlgNames = xDlgLibNameAccess->getElementNames();
+ const ::rtl::OUString* pDlgNames = aDlgNames.getConstArray();
+ sal_Int32 nDlgNameCount = aDlgNames.getLength();
+
+ for( sal_Int32 iDlg = 0 ; iDlg < nDlgNameCount ; iDlg++ )
+ {
+ Any aDlgAny = xDlgLibNameAccess->getByName( pDlgNames[ iDlg ] );
+ if( aDlgAny == rDlgAny )
+ {
+ aRetDlgLibAny = aDlgLibAny;
+ break;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ return aRetDlgLibAny;
+}
+
+Any implFindDialogLibForDialogBasic( const Any& aAnyISP, SbxObject* pBasic, StarBASIC*& pFoundBasic )
+{
+ Any aDlgLibAny;
+ // Find dialog library for dialog, direct access is not possible here
+ StarBASIC* pStartedBasic = (StarBASIC*)pBasic;
+ SbxObject* pParentBasic = pStartedBasic ? pStartedBasic->GetParent() : NULL;
+ SbxObject* pParentParentBasic = pParentBasic ? pParentBasic->GetParent() : NULL;
+
+ SbxObject* pSearchBasic1 = NULL;
+ SbxObject* pSearchBasic2 = NULL;
+ if( pParentParentBasic )
+ {
+ pSearchBasic1 = pParentBasic;
+ pSearchBasic2 = pParentParentBasic;
+ }
+ else
+ {
+ pSearchBasic1 = pStartedBasic;
+ pSearchBasic2 = pParentBasic;
+ }
+ if( pSearchBasic1 )
+ {
+ aDlgLibAny = implFindDialogLibForDialog( aAnyISP, pSearchBasic1 );
+
+ if ( aDlgLibAny.hasValue() )
+ pFoundBasic = (StarBASIC*)pSearchBasic1;
+
+ else if( pSearchBasic2 )
+ {
+ aDlgLibAny = implFindDialogLibForDialog( aAnyISP, pSearchBasic2 );
+ if ( aDlgLibAny.hasValue() )
+ pFoundBasic = (StarBASIC*)pSearchBasic2;
+ }
+ }
+ return aDlgLibAny;
+}
+
+static ::rtl::OUString aDecorationPropName =
+ ::rtl::OUString::createFromAscii( "Decoration" );
+static ::rtl::OUString aTitlePropName =
+ ::rtl::OUString::createFromAscii( "Title" );
+
+void RTL_Impl_CreateUnoDialog( StarBASIC* pBasic, SbxArray& rPar, BOOL bWrite )
+{
+ static ::rtl::OUString aResourceResolverPropName = ::rtl::OUString::createFromAscii( "ResourceResolver" );
+
+ (void)pBasic;
+ (void)bWrite;
+
+ Reference< XMultiServiceFactory > xMSF( comphelper::getProcessServiceFactory() );
+ if( !xMSF.is() )
+ return;
+
+ // We need at least 1 parameter
+ if ( rPar.Count() < 2 )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+
+ // Get dialog
+ SbxBaseRef pObj = (SbxBase*)rPar.Get( 1 )->GetObject();
+ if( !(pObj && pObj->ISA(SbUnoObject)) )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+ SbUnoObject* pUnoObj = (SbUnoObject*)(SbxBase*)pObj;
+ Any aAnyISP = pUnoObj->getUnoAny();
+ TypeClass eType = aAnyISP.getValueType().getTypeClass();
+
+ if( eType != TypeClass_INTERFACE )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+
+ // Create new uno dialog
+ Reference< XNameContainer > xDialogModel( xMSF->createInstance
+ ( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.awt.UnoControlDialogModel" ) ) ),
+ UNO_QUERY );
+ if( !xDialogModel.is() )
+ return;
+
+ Reference< XInputStreamProvider > xISP;
+ aAnyISP >>= xISP;
+ if( !xISP.is() )
+ return;
+
+ Reference< XComponentContext > xContext;
+ Reference< XPropertySet > xProps( xMSF, UNO_QUERY );
+ OSL_ASSERT( xProps.is() );
+ OSL_VERIFY( xProps->getPropertyValue( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("DefaultContext")) ) >>= xContext );
+
+ // Import the DialogModel
+ Reference< XInputStream > xInput( xISP->createInputStream() );
+
+ // i83963 Force decoration
+ uno::Reference< beans::XPropertySet > xDlgModPropSet( xDialogModel, uno::UNO_QUERY );
+ if( xDlgModPropSet.is() )
+ {
+ bool bDecoration = true;
+ try
+ {
+ Any aDecorationAny = xDlgModPropSet->getPropertyValue( aDecorationPropName );
+ aDecorationAny >>= bDecoration;
+ if( !bDecoration )
+ {
+ xDlgModPropSet->setPropertyValue( aDecorationPropName, makeAny( true ) );
+ xDlgModPropSet->setPropertyValue( aTitlePropName, makeAny( ::rtl::OUString() ) );
+ }
+ }
+ catch( UnknownPropertyException& )
+ {}
+ }
+
+ Any aDlgLibAny;
+ bool bDocDialog = false;
+ StarBASIC* pFoundBasic = NULL;
+ OSL_TRACE("About to try get a hold of ThisComponent");
+ Reference< frame::XModel > xModel = getModelFromBasic( pINST->GetBasic() ) ;
+ aDlgLibAny = implFindDialogLibForDialogBasic( aAnyISP, pINST->GetBasic(), pFoundBasic );
+ // If we found the dialog then it belongs to the Search basic
+ if ( !pFoundBasic )
+ {
+ Reference< frame::XDesktop > xDesktop( xMSF->createInstance
+ ( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.frame.Desktop" ) ) ),
+ UNO_QUERY );
+ Reference< container::XEnumeration > xModels;
+ if ( xDesktop.is() )
+ {
+ Reference< container::XEnumerationAccess > xComponents( xDesktop->getComponents(), UNO_QUERY );
+ if ( xComponents.is() )
+ xModels.set( xComponents->createEnumeration(), UNO_QUERY );
+ if ( xModels.is() )
+ {
+ while ( xModels->hasMoreElements() )
+ {
+ Reference< frame::XModel > xNextModel( xModels->nextElement(), UNO_QUERY );
+ if ( xNextModel.is() )
+ {
+ BasicManager* pMgr = basic::BasicManagerRepository::getDocumentBasicManager( xNextModel );
+ if ( pMgr )
+ aDlgLibAny = implFindDialogLibForDialogBasic( aAnyISP, pMgr->GetLib(0), pFoundBasic );
+ if ( aDlgLibAny.hasValue() )
+ {
+ bDocDialog = true;
+ xModel = xNextModel;
+ break;
+ }
+ }
+ }
+ }
+ }
+ }
+ if ( pFoundBasic )
+ bDocDialog = pFoundBasic->IsDocBasic();
+ Reference< XScriptListener > xScriptListener = new BasicScriptListener_Impl( pINST->GetBasic(), xModel );
+
+ Sequence< Any > aArgs( 4 );
+ if( bDocDialog )
+ aArgs[ 0 ] <<= xModel;
+ else
+ aArgs[ 0 ] <<= uno::Reference< uno::XInterface >();
+ aArgs[ 1 ] <<= xInput;
+ aArgs[ 2 ] = aDlgLibAny;
+ aArgs[ 3 ] <<= xScriptListener;
+ // Create a "living" Dialog
+ Reference< XControl > xCntrl;
+ try
+ {
+ Reference< XDialogProvider > xDlgProv( xMSF->createInstanceWithArguments( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.comp.scripting.DialogProvider" ) ), aArgs ), UNO_QUERY );
+ xCntrl.set( xDlgProv->createDialog( rtl::OUString() ), UNO_QUERY_THROW );
+ // Add dialog model to dispose vector
+ Reference< XComponent > xDlgComponent( xCntrl->getModel(), UNO_QUERY );
+ pINST->getComponentVector().push_back( xDlgComponent );
+ // need ThisCompoent from calling script
+ }
+ // preserve existing bad behaviour, it's possible... but probably
+ // illegal to open 2 dialogs ( they ARE modal ) when this happens, sometimes
+ // create dialog fails. So, in this case let's not throw, just leave basic
+ // detect the unset object.
+ catch( uno::Exception& )
+ {
+ }
+
+ // Return dialog
+ Any aRetVal;
+ aRetVal <<= xCntrl;
+ SbxVariableRef refVar = rPar.Get(0);
+ unoToSbxValue( (SbxVariable*)refVar, aRetVal );
+}
+
+
+//===================================================================
+
diff --git a/basic/source/classes/image.cxx b/basic/source/classes/image.cxx
new file mode 100644
index 000000000000..79f49eb8724a
--- /dev/null
+++ b/basic/source/classes/image.cxx
@@ -0,0 +1,544 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+#include <tools/stream.hxx>
+#include <tools/tenccvt.hxx>
+#include <basic/sbx.hxx>
+#include "sb.hxx"
+#include <string.h> // memset() etc
+#include "image.hxx"
+#include <codegen.hxx>
+SbiImage::SbiImage()
+{
+ pStringOff = NULL;
+ pStrings = NULL;
+ pCode = NULL;
+ pLegacyPCode = NULL;
+ nFlags = 0;
+ nStrings = 0;
+ nStringSize= 0;
+ nCodeSize = 0;
+ nLegacyCodeSize =
+ nDimBase = 0;
+ bInit =
+ bError = FALSE;
+ bFirstInit = TRUE;
+ eCharSet = gsl_getSystemTextEncoding();
+}
+
+SbiImage::~SbiImage()
+{
+ Clear();
+}
+
+void SbiImage::Clear()
+{
+ delete[] pStringOff;
+ delete[] pStrings;
+ delete[] pCode;
+ ReleaseLegacyBuffer();
+ pStringOff = NULL;
+ pStrings = NULL;
+ pCode = NULL;
+ nFlags = 0;
+ nStrings = 0;
+ nStringSize= 0;
+ nLegacyCodeSize = 0;
+ nCodeSize = 0;
+ eCharSet = gsl_getSystemTextEncoding();
+ nDimBase = 0;
+ bError = FALSE;
+}
+
+/**************************************************************************
+*
+* Service-Routines for Load/Store
+*
+**************************************************************************/
+
+BOOL SbiGood( SvStream& r )
+{
+ return BOOL( !r.IsEof() && r.GetError() == SVSTREAM_OK );
+}
+
+// Open Record
+ULONG SbiOpenRecord( SvStream& r, UINT16 nSignature, UINT16 nElem )
+{
+ ULONG nPos = r.Tell();
+ r << nSignature << (INT32) 0 << nElem;
+ return nPos;
+}
+
+// Close Record
+void SbiCloseRecord( SvStream& r, ULONG nOff )
+{
+ ULONG nPos = r.Tell();
+ r.Seek( nOff + 2 );
+ r << (INT32) ( nPos - nOff - 8 );
+ r.Seek( nPos );
+}
+
+/**************************************************************************
+*
+* Load/Store
+*
+**************************************************************************/
+
+// If the version number does not find, binary parts are omitted, but not
+// source, comments and name
+BOOL SbiImage::Load( SvStream& r )
+{
+ UINT32 nVersion = 0; // Versionsnumber
+ return Load( r, nVersion );
+}
+BOOL SbiImage::Load( SvStream& r, UINT32& nVersion )
+{
+
+ UINT16 nSign, nCount;
+ UINT32 nLen, nOff;
+
+ Clear();
+ // Read Master-Record
+ r >> nSign >> nLen >> nCount;
+ ULONG nLast = r.Tell() + nLen;
+ UINT32 nCharSet; // System charset
+ UINT32 lDimBase;
+ UINT16 nReserved1;
+ UINT32 nReserved2;
+ UINT32 nReserved3;
+ BOOL bBadVer = FALSE;
+ if( nSign == B_MODULE )
+ {
+ r >> nVersion >> nCharSet >> lDimBase
+ >> nFlags >> nReserved1 >> nReserved2 >> nReserved3;
+ eCharSet = (CharSet) nCharSet;
+ eCharSet = GetSOLoadTextEncoding( eCharSet );
+ bBadVer = BOOL( nVersion > B_CURVERSION );
+ nDimBase = (USHORT) lDimBase;
+ }
+
+ bool bLegacy = ( nVersion < B_EXT_IMG_VERSION );
+
+ ULONG nNext;
+ while( ( nNext = r.Tell() ) < nLast )
+ {
+ short i;
+
+ r >> nSign >> nLen >> nCount;
+ nNext += nLen + 8;
+ if( r.GetError() == SVSTREAM_OK )
+ switch( nSign )
+ {
+ case B_NAME:
+ r.ReadByteString( aName, eCharSet );
+ //r >> aName;
+ break;
+ case B_COMMENT:
+ r.ReadByteString( aComment, eCharSet );
+ //r >> aComment;
+ break;
+ case B_SOURCE:
+ {
+ String aTmp;
+ r.ReadByteString( aTmp, eCharSet );
+ aOUSource = aTmp;
+ //r >> aSource;
+ break;
+ }
+#ifdef EXTENDED_BINARY_MODULES
+ case B_EXTSOURCE:
+ {
+ for( UINT16 j = 0 ; j < nCount ; j++ )
+ {
+ String aTmp;
+ r.ReadByteString( aTmp, eCharSet );
+ aOUSource += aTmp;
+ }
+ break;
+ }
+#endif
+ case B_PCODE:
+ if( bBadVer ) break;
+ pCode = new char[ nLen ];
+ nCodeSize = nLen;
+ r.Read( pCode, nCodeSize );
+ if ( bLegacy )
+ {
+ ReleaseLegacyBuffer(); // release any previously held buffer
+ nLegacyCodeSize = (UINT16) nCodeSize;
+ pLegacyPCode = pCode;
+
+ PCodeBuffConvertor< UINT16, UINT32 > aLegacyToNew( (BYTE*)pLegacyPCode, nLegacyCodeSize );
+ aLegacyToNew.convert();
+ pCode = (char*)aLegacyToNew.GetBuffer();
+ nCodeSize = aLegacyToNew.GetSize();
+ // we don't release the legacy buffer
+ // right now, thats because the module
+ // needs it to fix up the method
+ // nStart members. When that is done
+ // the module can release the buffer
+ // or it can wait until this routine
+ // is called again or when this class // destructs all of which will trigger
+ // release of the buffer.
+ }
+ break;
+ case B_PUBLICS:
+ case B_POOLDIR:
+ case B_SYMPOOL:
+ case B_LINERANGES:
+ break;
+ case B_STRINGPOOL:
+ if( bBadVer ) break;
+ MakeStrings( nCount );
+ for( i = 0; i < nStrings && SbiGood( r ); i++ )
+ {
+ r >> nOff;
+ pStringOff[ i ] = (USHORT) nOff;
+ }
+ r >> nLen;
+ if( SbiGood( r ) )
+ {
+ delete [] pStrings;
+ pStrings = new sal_Unicode[ nLen ];
+ nStringSize = (USHORT) nLen;
+
+ char* pByteStrings = new char[ nLen ];
+ r.Read( pByteStrings, nStringSize );
+ for( short j = 0; j < nStrings; j++ )
+ {
+ USHORT nOff2 = (USHORT) pStringOff[ j ];
+ String aStr( pByteStrings + nOff2, eCharSet );
+ memcpy( pStrings + nOff2, aStr.GetBuffer(), (aStr.Len() + 1) * sizeof( sal_Unicode ) );
+ }
+ delete[] pByteStrings;
+ } break;
+ case B_MODEND:
+ goto done;
+ default:
+ break;
+ }
+ else
+ break;
+ r.Seek( nNext );
+ }
+done:
+ r.Seek( nLast );
+ //if( eCharSet != ::GetSystemCharSet() )
+ //ConvertStrings();
+ if( !SbiGood( r ) )
+ bError = TRUE;
+ return BOOL( !bError );
+}
+
+BOOL SbiImage::Save( SvStream& r, UINT32 nVer )
+{
+ bool bLegacy = ( nVer < B_EXT_IMG_VERSION );
+
+ // detect if old code exceeds legacy limits
+ // if so, then disallow save
+ if ( bLegacy && ExceedsLegacyLimits() )
+ {
+ SbiImage aEmptyImg;
+ aEmptyImg.aName = aName;
+ aEmptyImg.Save( r, B_LEGACYVERSION );
+ return TRUE;
+ }
+ // First of all the header
+ ULONG nStart = SbiOpenRecord( r, B_MODULE, 1 );
+ ULONG nPos;
+
+ eCharSet = GetSOStoreTextEncoding( eCharSet );
+ if ( bLegacy )
+ r << (INT32) B_LEGACYVERSION;
+ else
+ r << (INT32) B_CURVERSION;
+ r << (INT32) eCharSet
+ << (INT32) nDimBase
+ << (INT16) nFlags
+ << (INT16) 0
+ << (INT32) 0
+ << (INT32) 0;
+
+ // Name?
+ if( aName.Len() && SbiGood( r ) )
+ {
+ nPos = SbiOpenRecord( r, B_NAME, 1 );
+ r.WriteByteString( aName, eCharSet );
+ //r << aName;
+ SbiCloseRecord( r, nPos );
+ }
+ // Comment?
+ if( aComment.Len() && SbiGood( r ) )
+ {
+ nPos = SbiOpenRecord( r, B_COMMENT, 1 );
+ r.WriteByteString( aComment, eCharSet );
+ //r << aComment;
+ SbiCloseRecord( r, nPos );
+ }
+ // Source?
+ if( aOUSource.getLength() && SbiGood( r ) )
+ {
+ nPos = SbiOpenRecord( r, B_SOURCE, 1 );
+ String aTmp;
+ sal_Int32 nLen = aOUSource.getLength();
+ const sal_Int32 nMaxUnitSize = STRING_MAXLEN - 1;
+ if( nLen > STRING_MAXLEN )
+ aTmp = aOUSource.copy( 0, nMaxUnitSize );
+ else
+ aTmp = aOUSource;
+ r.WriteByteString( aTmp, eCharSet );
+ //r << aSource;
+ SbiCloseRecord( r, nPos );
+
+#ifdef EXTENDED_BINARY_MODULES
+ if( nLen > STRING_MAXLEN )
+ {
+ sal_Int32 nRemainingLen = nLen - nMaxUnitSize;
+ UINT16 nUnitCount = UINT16( (nRemainingLen + nMaxUnitSize - 1) / nMaxUnitSize );
+ nPos = SbiOpenRecord( r, B_EXTSOURCE, nUnitCount );
+ for( UINT16 i = 0 ; i < nUnitCount ; i++ )
+ {
+ sal_Int32 nCopyLen =
+ (nRemainingLen > nMaxUnitSize) ? nMaxUnitSize : nRemainingLen;
+ String aTmp2 = aOUSource.copy( (i+1) * nMaxUnitSize, nCopyLen );
+ nRemainingLen -= nCopyLen;
+ r.WriteByteString( aTmp2, eCharSet );
+ }
+ SbiCloseRecord( r, nPos );
+ }
+#endif
+ }
+ // Binary data?
+ if( pCode && SbiGood( r ) )
+ {
+ nPos = SbiOpenRecord( r, B_PCODE, 1 );
+ if ( bLegacy )
+ {
+ ReleaseLegacyBuffer(); // release any previously held buffer
+ PCodeBuffConvertor< UINT32, UINT16 > aNewToLegacy( (BYTE*)pCode, nCodeSize );
+ aNewToLegacy.convert();
+ pLegacyPCode = (char*)aNewToLegacy.GetBuffer();
+ nLegacyCodeSize = aNewToLegacy.GetSize();
+ r.Write( pLegacyPCode, nLegacyCodeSize );
+ }
+ else
+ r.Write( pCode, nCodeSize );
+ SbiCloseRecord( r, nPos );
+ }
+ // String-Pool?
+ if( nStrings )
+ {
+ nPos = SbiOpenRecord( r, B_STRINGPOOL, nStrings );
+ // For every String:
+ // UINT32 Offset of the Strings in the Stringblock
+ short i;
+
+ for( i = 0; i < nStrings && SbiGood( r ); i++ )
+ r << (UINT32) pStringOff[ i ];
+
+ // Then the String-Block
+ char* pByteStrings = new char[ nStringSize ];
+ for( i = 0; i < nStrings; i++ )
+ {
+ USHORT nOff = (USHORT) pStringOff[ i ];
+ ByteString aStr( pStrings + nOff, eCharSet );
+ memcpy( pByteStrings + nOff, aStr.GetBuffer(), (aStr.Len() + 1) * sizeof( char ) );
+ }
+ r << (UINT32) nStringSize;
+ r.Write( pByteStrings, nStringSize );
+
+ delete[] pByteStrings;
+ SbiCloseRecord( r, nPos );
+ }
+ // Set overall length
+ SbiCloseRecord( r, nStart );
+ if( !SbiGood( r ) )
+ bError = TRUE;
+ return BOOL( !bError );
+}
+
+/**************************************************************************
+*
+* Routines called by the compiler
+*
+**************************************************************************/
+
+void SbiImage::MakeStrings( short nSize )
+{
+ nStrings = 0;
+ nStringIdx = 0;
+ nStringOff = 0;
+ nStringSize = 1024;
+ pStrings = new sal_Unicode[ nStringSize ];
+ pStringOff = new UINT32[ nSize ];
+ if( pStrings && pStringOff )
+ {
+ nStrings = nSize;
+ memset( pStringOff, 0, nSize * sizeof( UINT32 ) );
+ memset( pStrings, 0, nStringSize * sizeof( sal_Unicode ) );
+ }
+ else
+ bError = TRUE;
+}
+
+// Hinzufuegen eines Strings an den StringPool. Der String-Puffer
+// waechst dynamisch in 1K-Schritten
+// Add a string to StringPool. The String buffer is dynamically
+// growing in 1K-Steps
+void SbiImage::AddString( const String& r )
+{
+ if( nStringIdx >= nStrings )
+ bError = TRUE;
+ if( !bError )
+ {
+ xub_StrLen len = r.Len() + 1;
+ UINT32 needed = nStringOff + len;
+ if( needed > 0xFFFFFF00L )
+ bError = TRUE; // out of mem!
+ else if( needed > nStringSize )
+ {
+ UINT32 nNewLen = needed + 1024;
+ nNewLen &= 0xFFFFFC00; // trim to 1K border
+ if( nNewLen > 0xFFFFFF00L )
+ nNewLen = 0xFFFFFF00L;
+ sal_Unicode* p = NULL;
+ if( (p = new sal_Unicode[ nNewLen ]) != NULL )
+ {
+ memcpy( p, pStrings, nStringSize * sizeof( sal_Unicode ) );
+ delete[] pStrings;
+ pStrings = p;
+ nStringSize = sal::static_int_cast< UINT16 >(nNewLen);
+ }
+ else
+ bError = TRUE;
+ }
+ if( !bError )
+ {
+ pStringOff[ nStringIdx++ ] = nStringOff;
+ //ByteString aByteStr( r, eCharSet );
+ memcpy( pStrings + nStringOff, r.GetBuffer(), len * sizeof( sal_Unicode ) );
+ nStringOff = nStringOff + len;
+ // Last String? The update the size of the buffer
+ if( nStringIdx >= nStrings )
+ nStringSize = nStringOff;
+ }
+ }
+}
+
+// Add code block
+// The block was fetched by the compiler from class SbBuffer and
+// is already created with new. Additionally it contains all Integers
+// in Big Endian format, so can be directly read/written.
+void SbiImage::AddCode( char* p, UINT32 s )
+{
+ pCode = p;
+ nCodeSize = s;
+}
+
+// Add user type
+void SbiImage::AddType(SbxObject* pObject)
+{
+ if( !rTypes.Is() )
+ rTypes = new SbxArray;
+ SbxObject *pCopyObject = new SbxObject(*pObject);
+ rTypes->Insert (pCopyObject,rTypes->Count());
+}
+
+void SbiImage::AddEnum(SbxObject* pObject) // Register enum type
+{
+ if( !rEnums.Is() )
+ rEnums = new SbxArray;
+ rEnums->Insert( pObject, rEnums->Count() );
+}
+
+
+/**************************************************************************
+*
+* Accessing the image
+*
+**************************************************************************/
+
+// Note: IDs start with 1
+String SbiImage::GetString( short nId ) const
+{
+ if( nId && nId <= nStrings )
+ {
+ UINT32 nOff = pStringOff[ nId - 1 ];
+ sal_Unicode* pStr = pStrings + nOff;
+
+ // #i42467: Special treatment for vbNullChar
+ if( *pStr == 0 )
+ {
+ UINT32 nNextOff = (nId < nStrings) ? pStringOff[ nId ] : nStringOff;
+ UINT32 nLen = nNextOff - nOff - 1;
+ if( nLen == 1 )
+ {
+ // Force length 1 and make char 0 afterwards
+ String aNullCharStr( String::CreateFromAscii( " " ) );
+ aNullCharStr.SetChar( 0, 0 );
+ return aNullCharStr;
+ }
+ }
+ else
+ {
+ String aStr( pStr );
+ return aStr;
+ }
+ }
+ return String();
+}
+
+const SbxObject* SbiImage::FindType (String aTypeName) const
+{
+ return rTypes.Is() ? (SbxObject*)rTypes->Find(aTypeName,SbxCLASS_OBJECT) : NULL;
+}
+
+UINT16 SbiImage::CalcLegacyOffset( INT32 nOffset )
+{
+ return SbiCodeGen::calcLegacyOffSet( (BYTE*)pCode, nOffset ) ;
+}
+
+UINT32 SbiImage::CalcNewOffset( INT16 nOffset )
+{
+ return SbiCodeGen::calcNewOffSet( (BYTE*)pLegacyPCode, nOffset ) ;
+}
+
+void SbiImage::ReleaseLegacyBuffer()
+{
+ delete[] pLegacyPCode;
+ pLegacyPCode = NULL;
+ nLegacyCodeSize = 0;
+}
+
+BOOL SbiImage::ExceedsLegacyLimits()
+{
+ if ( ( nStringSize > 0xFF00L ) || ( CalcLegacyOffset( nCodeSize ) > 0xFF00L ) )
+ return TRUE;
+ return FALSE;
+}
diff --git a/basic/source/classes/makefile.mk b/basic/source/classes/makefile.mk
new file mode 100644
index 000000000000..e00ed4674cc1
--- /dev/null
+++ b/basic/source/classes/makefile.mk
@@ -0,0 +1,76 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..$/..
+
+PRJNAME=basic
+TARGET=classes
+LIBTARGET=NO
+
+# --- Settings -----------------------------------------------------------
+
+ENABLE_EXCEPTIONS=TRUE
+
+.INCLUDE : settings.mk
+
+ALLTAR .SEQUENTIAL : \
+ $(MISC)$/$(TARGET).don \
+ $(MISC)$/$(TARGET).slo
+
+$(MISC)$/$(TARGET).don : $(SOLARBINDIR)$/oovbaapi.rdb
+ +$(CPPUMAKER) -O$(OUT)$/inc -BUCR $(SOLARBINDIR)$/oovbaapi.rdb -X$(SOLARBINDIR)$/types.rdb && echo > $@
+ echo $@
+
+$(MISC)$/$(TARGET).slo : $(SLOTARGET)
+ echo $@
+
+# --- Allgemein -----------------------------------------------------------
+
+SLOFILES= \
+ $(SLO)$/sb.obj \
+ $(SLO)$/sbxmod.obj \
+ $(SLO)$/image.obj \
+ $(SLO)$/sbintern.obj \
+ $(SLO)$/sbunoobj.obj \
+ $(SLO)$/propacc.obj \
+ $(SLO)$/disas.obj \
+ $(SLO)$/errobject.obj \
+ $(SLO)$/eventatt.obj
+
+OBJFILES= \
+ $(OBJ)$/sbintern.obj
+
+SRS1NAME=$(TARGET)
+SRC1FILES= sb.src
+
+LIB1TARGET= $(SLB)$/$(TARGET).lib
+LIB1OBJFILES = $(SLOFILES)
+
+# --- Targets -------------------------------------------------------------
+
+.INCLUDE : target.mk
+
diff --git a/basic/source/classes/propacc.cxx b/basic/source/classes/propacc.cxx
new file mode 100644
index 000000000000..8c7fa0b273b2
--- /dev/null
+++ b/basic/source/classes/propacc.cxx
@@ -0,0 +1,430 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+
+#include "propacc.hxx"
+
+#include <tools/urlobj.hxx>
+#include <tools/errcode.hxx>
+#include <svl/svarray.hxx>
+#include <basic/sbstar.hxx>
+#include <sbunoobj.hxx>
+
+using com::sun::star::uno::Reference;
+using namespace com::sun::star::uno;
+using namespace com::sun::star::lang;
+using namespace com::sun::star::beans;
+using namespace cppu;
+
+
+//========================================================================
+
+// Declaration conversion from Sbx to UNO with known target type
+Any sbxToUnoValue( SbxVariable* pVar, const Type& rType, Property* pUnoProperty = NULL );
+
+//========================================================================
+
+#ifdef WNT
+#define CDECL _cdecl
+#endif
+#if defined(UNX) || defined(OS2)
+#define CDECL
+#endif
+
+int CDECL SbCompare_PropertyValues_Impl( const void *arg1, const void *arg2 )
+{
+ return ((PropertyValue*)arg1)->Name.compareTo( ((PropertyValue*)arg2)->Name );
+}
+
+extern "C" int CDECL SbCompare_UString_PropertyValue_Impl( const void *arg1, const void *arg2 )
+{
+ const ::rtl::OUString *pArg1 = (::rtl::OUString*) arg1;
+ const PropertyValue **pArg2 = (const PropertyValue**) arg2;
+ return pArg1->compareTo( (*pArg2)->Name );
+}
+
+int CDECL SbCompare_Properties_Impl( const void *arg1, const void *arg2 )
+{
+ return ((Property*)arg1)->Name.compareTo( ((Property*)arg2)->Name );
+}
+
+extern "C" int CDECL SbCompare_UString_Property_Impl( const void *arg1, const void *arg2 )
+{
+ const ::rtl::OUString *pArg1 = (::rtl::OUString*) arg1;
+ const Property *pArg2 = (Property*) arg2;
+ return pArg1->compareTo( pArg2->Name );
+}
+
+//----------------------------------------------------------------------------
+
+SbPropertyValues::SbPropertyValues()
+{
+}
+
+//----------------------------------------------------------------------------
+
+SbPropertyValues::~SbPropertyValues()
+{
+ _xInfo = Reference< XPropertySetInfo >();
+
+ for ( USHORT n = 0; n < _aPropVals.Count(); ++n )
+ delete _aPropVals.GetObject( n );
+}
+
+//----------------------------------------------------------------------------
+
+Reference< XPropertySetInfo > SbPropertyValues::getPropertySetInfo(void) throw( RuntimeException )
+{
+ // create on demand?
+ if ( !_xInfo.is() )
+ {
+ SbPropertySetInfo *pInfo = new SbPropertySetInfo( _aPropVals );
+ ((SbPropertyValues*)this)->_xInfo = (XPropertySetInfo*)pInfo;
+ }
+ return _xInfo;
+}
+
+//-------------------------------------------------------------------------
+
+INT32 SbPropertyValues::GetIndex_Impl( const ::rtl::OUString &rPropName ) const
+{
+ PropertyValue **ppPV;
+ ppPV = (PropertyValue **)
+ bsearch( &rPropName, _aPropVals.GetData(), _aPropVals.Count(),
+ sizeof( PropertyValue* ),
+ SbCompare_UString_PropertyValue_Impl );
+ return ppPV ? ( (ppPV-_aPropVals.GetData()) / sizeof(ppPV) ) : USHRT_MAX;
+}
+
+//----------------------------------------------------------------------------
+
+void SbPropertyValues::setPropertyValue(
+ const ::rtl::OUString& aPropertyName,
+ const Any& aValue)
+ throw (::com::sun::star::beans::UnknownPropertyException,
+ ::com::sun::star::beans::PropertyVetoException,
+ ::com::sun::star::lang::IllegalArgumentException,
+ ::com::sun::star::lang::WrappedTargetException,
+ ::com::sun::star::uno::RuntimeException)
+{
+ INT32 nIndex = GetIndex_Impl( aPropertyName );
+ PropertyValue *pPropVal = _aPropVals.GetObject(
+ sal::static_int_cast< USHORT >(nIndex));
+ pPropVal->Value = aValue;
+}
+
+//----------------------------------------------------------------------------
+
+Any SbPropertyValues::getPropertyValue(
+ const ::rtl::OUString& aPropertyName)
+ throw(::com::sun::star::beans::UnknownPropertyException,
+ ::com::sun::star::lang::WrappedTargetException,
+ ::com::sun::star::uno::RuntimeException)
+{
+ INT32 nIndex = GetIndex_Impl( aPropertyName );
+ if ( nIndex != USHRT_MAX )
+ return _aPropVals.GetObject(
+ sal::static_int_cast< USHORT >(nIndex))->Value;
+ return Any();
+}
+
+//----------------------------------------------------------------------------
+
+void SbPropertyValues::addPropertyChangeListener(
+ const ::rtl::OUString& aPropertyName,
+ const Reference< XPropertyChangeListener >& )
+ throw ()
+{
+ (void)aPropertyName;
+}
+
+//----------------------------------------------------------------------------
+
+void SbPropertyValues::removePropertyChangeListener(
+ const ::rtl::OUString& aPropertyName,
+ const Reference< XPropertyChangeListener >& )
+ throw ()
+{
+ (void)aPropertyName;
+}
+
+//----------------------------------------------------------------------------
+
+void SbPropertyValues::addVetoableChangeListener(
+ const ::rtl::OUString& aPropertyName,
+ const Reference< XVetoableChangeListener >& )
+ throw()
+{
+ (void)aPropertyName;
+}
+
+//----------------------------------------------------------------------------
+
+void SbPropertyValues::removeVetoableChangeListener(
+ const ::rtl::OUString& aPropertyName,
+ const Reference< XVetoableChangeListener >& )
+ throw()
+{
+ (void)aPropertyName;
+}
+
+//----------------------------------------------------------------------------
+
+Sequence< PropertyValue > SbPropertyValues::getPropertyValues(void) throw (::com::sun::star::uno::RuntimeException)
+{
+ Sequence<PropertyValue> aRet( _aPropVals.Count());
+ for ( USHORT n = 0; n < _aPropVals.Count(); ++n )
+ aRet.getArray()[n] = *_aPropVals.GetObject(n);
+ return aRet;
+}
+
+//----------------------------------------------------------------------------
+
+void SbPropertyValues::setPropertyValues(const Sequence< PropertyValue >& rPropertyValues )
+ throw (::com::sun::star::beans::UnknownPropertyException,
+ ::com::sun::star::beans::PropertyVetoException,
+ ::com::sun::star::lang::IllegalArgumentException,
+ ::com::sun::star::lang::WrappedTargetException,
+ ::com::sun::star::uno::RuntimeException)
+{
+ if ( _aPropVals.Count() )
+ throw PropertyExistException();
+
+ const PropertyValue *pPropVals = rPropertyValues.getConstArray();
+ for ( sal_Int16 n = 0; n < rPropertyValues.getLength(); ++n )
+ {
+ PropertyValue *pPropVal = new PropertyValue(pPropVals[n]);
+ _aPropVals.Insert( pPropVal, n );
+ }
+}
+
+//============================================================================
+//PropertySetInfoImpl
+
+PropertySetInfoImpl::PropertySetInfoImpl()
+{
+}
+
+INT32 PropertySetInfoImpl::GetIndex_Impl( const ::rtl::OUString &rPropName ) const
+{
+ Property *pP;
+ pP = (Property*)
+ bsearch( &rPropName, _aProps.getConstArray(), _aProps.getLength(),
+ sizeof( Property ),
+ SbCompare_UString_Property_Impl );
+ return pP ? sal::static_int_cast<INT32>( (pP-_aProps.getConstArray()) / sizeof(pP) ) : -1;
+}
+
+Sequence< Property > PropertySetInfoImpl::getProperties(void) throw()
+{
+ return _aProps;
+}
+
+Property PropertySetInfoImpl::getPropertyByName(const ::rtl::OUString& Name) throw( RuntimeException )
+{
+ sal_Int32 nIndex = GetIndex_Impl( Name );
+ if( USHRT_MAX != nIndex )
+ return _aProps.getConstArray()[ nIndex ];
+ return Property();
+}
+
+sal_Bool PropertySetInfoImpl::hasPropertyByName(const ::rtl::OUString& Name) throw( RuntimeException )
+{
+ sal_Int32 nIndex = GetIndex_Impl( Name );
+ return USHRT_MAX != nIndex;
+}
+
+
+//============================================================================
+
+SbPropertySetInfo::SbPropertySetInfo()
+{
+}
+
+//----------------------------------------------------------------------------
+
+SbPropertySetInfo::SbPropertySetInfo( const SbPropertyValueArr_Impl &rPropVals )
+{
+ aImpl._aProps.realloc( rPropVals.Count() );
+ for ( USHORT n = 0; n < rPropVals.Count(); ++n )
+ {
+ Property &rProp = aImpl._aProps.getArray()[n];
+ const PropertyValue &rPropVal = *rPropVals.GetObject(n);
+ rProp.Name = rPropVal.Name;
+ rProp.Handle = rPropVal.Handle;
+ rProp.Type = getCppuVoidType();
+ rProp.Attributes = 0;
+ }
+}
+
+//----------------------------------------------------------------------------
+
+SbPropertySetInfo::~SbPropertySetInfo()
+{
+}
+
+//-------------------------------------------------------------------------
+
+Sequence< Property > SbPropertySetInfo::getProperties(void) throw( RuntimeException )
+{
+ return aImpl.getProperties();
+}
+
+Property SbPropertySetInfo::getPropertyByName(const ::rtl::OUString& Name)
+ throw( RuntimeException )
+{
+ return aImpl.getPropertyByName( Name );
+}
+
+BOOL SbPropertySetInfo::hasPropertyByName(const ::rtl::OUString& Name)
+ throw( RuntimeException )
+{
+ return aImpl.hasPropertyByName( Name );
+}
+
+
+//----------------------------------------------------------------------------
+
+SbPropertyContainer::SbPropertyContainer()
+{
+}
+
+//----------------------------------------------------------------------------
+
+SbPropertyContainer::~SbPropertyContainer()
+{
+}
+
+//----------------------------------------------------------------------------
+void SbPropertyContainer::addProperty(const ::rtl::OUString& Name,
+ INT16 Attributes,
+ const Any& DefaultValue)
+ throw( PropertyExistException, IllegalTypeException,
+ IllegalArgumentException, RuntimeException )
+{
+ (void)Name;
+ (void)Attributes;
+ (void)DefaultValue;
+}
+
+//----------------------------------------------------------------------------
+void SbPropertyContainer::removeProperty(const ::rtl::OUString& Name)
+ throw( UnknownPropertyException, RuntimeException )
+{
+ (void)Name;
+}
+
+//----------------------------------------------------------------------------
+// XPropertySetInfo
+Sequence< Property > SbPropertyContainer::getProperties(void) throw ()
+{
+ return aImpl.getProperties();
+}
+
+Property SbPropertyContainer::getPropertyByName(const ::rtl::OUString& Name)
+ throw( RuntimeException )
+{
+ return aImpl.getPropertyByName( Name );
+}
+
+BOOL SbPropertyContainer::hasPropertyByName(const ::rtl::OUString& Name)
+ throw( RuntimeException )
+{
+ return aImpl.hasPropertyByName( Name );
+}
+
+//----------------------------------------------------------------------------
+
+Sequence< PropertyValue > SbPropertyContainer::getPropertyValues(void)
+{
+ return Sequence<PropertyValue>();
+}
+
+//----------------------------------------------------------------------------
+
+void SbPropertyContainer::setPropertyValues(const Sequence< PropertyValue >& PropertyValues_)
+{
+ (void)PropertyValues_;
+}
+
+//----------------------------------------------------------------------------
+
+void RTL_Impl_CreatePropertySet( StarBASIC* pBasic, SbxArray& rPar, BOOL bWrite )
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ // We need at least one parameter
+ // TODO: In this case < 2 is not correct ;-)
+ if ( rPar.Count() < 2 )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+
+ // Get class names of struct
+ String aServiceName( RTL_CONSTASCII_USTRINGPARAM("stardiv.uno.beans.PropertySet") );
+
+#if 0
+ // Service suchen und instanzieren
+ Reference< XMultiServiceFactory > xServiceManager = getProcessServiceFactory();
+ Reference< XInterface > xInterface;
+ if( xProv.is() )
+ xInterface = xProv->newInstance();
+#else
+ Reference< XInterface > xInterface = (OWeakObject*) new SbPropertyValues();
+#endif
+
+ SbxVariableRef refVar = rPar.Get(0);
+ if( xInterface.is() )
+ {
+ // Set PropertyValues
+ Any aArgAsAny = sbxToUnoValue( rPar.Get(1),
+ getCppuType( (Sequence<PropertyValue>*)0 ) );
+ Sequence<PropertyValue> *pArg =
+ (Sequence<PropertyValue>*) aArgAsAny.getValue();
+ Reference< XPropertyAccess > xPropAcc = Reference< XPropertyAccess >::query( xInterface );
+ xPropAcc->setPropertyValues( *pArg );
+
+ // Build a SbUnoObject and return it
+ Any aAny;
+ aAny <<= xInterface;
+ SbUnoObjectRef xUnoObj = new SbUnoObject( aServiceName, aAny );
+ if( xUnoObj->getUnoAny().getValueType().getTypeClass() != TypeClass_VOID )
+ {
+ // Return object
+ refVar->PutObject( (SbUnoObject*)xUnoObj );
+ return;
+ }
+ }
+
+ // Object could not be created
+ refVar->PutObject( NULL );
+}
+
diff --git a/basic/source/classes/sb.cxx b/basic/source/classes/sb.cxx
new file mode 100755
index 000000000000..056c2ea38c4c
--- /dev/null
+++ b/basic/source/classes/sb.cxx
@@ -0,0 +1,2109 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+
+#include <stdio.h>
+
+#include "sb.hxx"
+#include <tools/rcid.h>
+#include <tools/config.hxx>
+#include <tools/stream.hxx>
+#ifndef __RSC //autogen
+#include <tools/errinf.hxx>
+#endif
+#include <basic/sbx.hxx>
+#include <tools/list.hxx>
+#include <tools/shl.hxx>
+#include <tools/rc.hxx>
+#include <vcl/svapp.hxx>
+#include "sbunoobj.hxx"
+#include "sbjsmeth.hxx"
+#include "sbjsmod.hxx"
+#include "sbintern.hxx"
+#include "disas.hxx"
+#include "runtime.hxx"
+#include <basic/sbuno.hxx>
+#include <basic/sbobjmod.hxx>
+#include "stdobj.hxx"
+#include "filefmt.hxx"
+#include "sb.hrc"
+#include <basrid.hxx>
+#include <vos/mutex.hxx>
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+#include "errobject.hxx"
+#include <hash_map>
+
+#include <com/sun/star/script/ModuleType.hpp>
+#include <com/sun/star/script/ModuleInfo.hpp>
+using namespace ::com::sun::star::script;
+
+// #pragma SW_SEGMENT_CLASS( SBASIC, SBASIC_CODE )
+
+SV_IMPL_VARARR(SbTextPortions,SbTextPortion)
+
+TYPEINIT1(StarBASIC,SbxObject)
+
+#define RTLNAME "@SBRTL"
+// i#i68894#
+using com::sun::star::uno::Reference;
+using com::sun::star::uno::Any;
+using com::sun::star::uno::UNO_QUERY;
+using com::sun::star::lang::XMultiServiceFactory;
+
+const static String aThisComponent( RTL_CONSTASCII_USTRINGPARAM("ThisComponent") );
+const static String aVBAHook( RTL_CONSTASCII_USTRINGPARAM( "VBAGlobals" ) );
+
+SbxObject* StarBASIC::getVBAGlobals( )
+{
+ if ( !pVBAGlobals )
+ {
+ Any aThisDoc;
+ if ( GetUNOConstant("ThisComponent", aThisDoc) )
+ {
+ Reference< XMultiServiceFactory > xDocFac( aThisDoc, UNO_QUERY );
+ if ( xDocFac.is() )
+ {
+ try
+ {
+ xDocFac->createInstance( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ooo.vba.VBAGlobals" ) ) );
+ }
+ catch( Exception& )
+ {
+ // Ignore
+ }
+ }
+ }
+ pVBAGlobals = (SbUnoObject*)Find( aVBAHook , SbxCLASS_DONTCARE );
+ }
+ return pVBAGlobals;
+}
+
+// i#i68894#
+SbxVariable* StarBASIC::VBAFind( const String& rName, SbxClassType t )
+{
+ if( rName == aThisComponent )
+ return NULL;
+ // rename to init globals
+ if ( getVBAGlobals( ) )
+ return pVBAGlobals->Find( rName, t );
+ return NULL;
+
+}
+// Create array for conversion SFX <-> VB error code
+struct SFX_VB_ErrorItem
+{
+ USHORT nErrorVB;
+ SbError nErrorSFX;
+};
+
+const SFX_VB_ErrorItem __FAR_DATA SFX_VB_ErrorTab[] =
+{
+ { 1, SbERR_BASIC_EXCEPTION }, // #87844 Map exception to error code 1
+ { 2, SbERR_SYNTAX },
+ { 3, SbERR_NO_GOSUB },
+ { 4, SbERR_REDO_FROM_START },
+ { 5, SbERR_BAD_ARGUMENT },
+ { 6, SbERR_MATH_OVERFLOW },
+ { 7, SbERR_NO_MEMORY },
+ { 8, SbERR_ALREADY_DIM },
+ { 9, SbERR_OUT_OF_RANGE },
+ { 10, SbERR_DUPLICATE_DEF },
+ { 11, SbERR_ZERODIV },
+ { 12, SbERR_VAR_UNDEFINED },
+ { 13, SbERR_CONVERSION },
+ { 14, SbERR_BAD_PARAMETER },
+ { 18, SbERR_USER_ABORT },
+ { 20, SbERR_BAD_RESUME },
+ { 28, SbERR_STACK_OVERFLOW },
+ { 35, SbERR_PROC_UNDEFINED },
+ { 48, SbERR_BAD_DLL_LOAD },
+ { 49, SbERR_BAD_DLL_CALL },
+ { 51, SbERR_INTERNAL_ERROR },
+ { 52, SbERR_BAD_CHANNEL },
+ { 53, SbERR_FILE_NOT_FOUND },
+ { 54, SbERR_BAD_FILE_MODE },
+ { 55, SbERR_FILE_ALREADY_OPEN },
+ { 57, SbERR_IO_ERROR },
+ { 58, SbERR_FILE_EXISTS },
+ { 59, SbERR_BAD_RECORD_LENGTH },
+ { 61, SbERR_DISK_FULL },
+ { 62, SbERR_READ_PAST_EOF },
+ { 63, SbERR_BAD_RECORD_NUMBER },
+ { 67, SbERR_TOO_MANY_FILES },
+ { 68, SbERR_NO_DEVICE },
+ { 70, SbERR_ACCESS_DENIED },
+ { 71, SbERR_NOT_READY },
+ { 73, SbERR_NOT_IMPLEMENTED },
+ { 74, SbERR_DIFFERENT_DRIVE },
+ { 75, SbERR_ACCESS_ERROR },
+ { 76, SbERR_PATH_NOT_FOUND },
+ { 91, SbERR_NO_OBJECT },
+ { 93, SbERR_BAD_PATTERN },
+ { 94, SBERR_IS_NULL },
+ { 250, SbERR_DDE_ERROR },
+ { 280, SbERR_DDE_WAITINGACK },
+ { 281, SbERR_DDE_OUTOFCHANNELS },
+ { 282, SbERR_DDE_NO_RESPONSE },
+ { 283, SbERR_DDE_MULT_RESPONSES },
+ { 284, SbERR_DDE_CHANNEL_LOCKED },
+ { 285, SbERR_DDE_NOTPROCESSED },
+ { 286, SbERR_DDE_TIMEOUT },
+ { 287, SbERR_DDE_USER_INTERRUPT },
+ { 288, SbERR_DDE_BUSY },
+ { 289, SbERR_DDE_NO_DATA },
+ { 290, SbERR_DDE_WRONG_DATA_FORMAT },
+ { 291, SbERR_DDE_PARTNER_QUIT },
+ { 292, SbERR_DDE_CONV_CLOSED },
+ { 293, SbERR_DDE_NO_CHANNEL },
+ { 294, SbERR_DDE_INVALID_LINK },
+ { 295, SbERR_DDE_QUEUE_OVERFLOW },
+ { 296, SbERR_DDE_LINK_ALREADY_EST },
+ { 297, SbERR_DDE_LINK_INV_TOPIC },
+ { 298, SbERR_DDE_DLL_NOT_FOUND },
+ { 323, SbERR_CANNOT_LOAD },
+ { 341, SbERR_BAD_INDEX },
+ { 366, SbERR_NO_ACTIVE_OBJECT },
+ { 380, SbERR_BAD_PROP_VALUE },
+ { 382, SbERR_PROP_READONLY },
+ { 394, SbERR_PROP_WRITEONLY },
+ { 420, SbERR_INVALID_OBJECT },
+ { 423, SbERR_NO_METHOD },
+ { 424, SbERR_NEEDS_OBJECT },
+ { 425, SbERR_INVALID_USAGE_OBJECT },
+ { 430, SbERR_NO_OLE },
+ { 438, SbERR_BAD_METHOD },
+ { 440, SbERR_OLE_ERROR },
+ { 445, SbERR_BAD_ACTION },
+ { 446, SbERR_NO_NAMED_ARGS },
+ { 447, SbERR_BAD_LOCALE },
+ { 448, SbERR_NAMED_NOT_FOUND },
+ { 449, SbERR_NOT_OPTIONAL },
+ { 450, SbERR_WRONG_ARGS },
+ { 451, SbERR_NOT_A_COLL },
+ { 452, SbERR_BAD_ORDINAL },
+ { 453, SbERR_DLLPROC_NOT_FOUND },
+ { 460, SbERR_BAD_CLIPBD_FORMAT },
+ { 951, SbERR_UNEXPECTED },
+ { 952, SbERR_EXPECTED },
+ { 953, SbERR_SYMBOL_EXPECTED },
+ { 954, SbERR_VAR_EXPECTED },
+ { 955, SbERR_LABEL_EXPECTED },
+ { 956, SbERR_LVALUE_EXPECTED },
+ { 957, SbERR_VAR_DEFINED },
+ { 958, SbERR_PROC_DEFINED },
+ { 959, SbERR_LABEL_DEFINED },
+ { 960, SbERR_UNDEF_VAR },
+ { 961, SbERR_UNDEF_ARRAY },
+ { 962, SbERR_UNDEF_PROC },
+ { 963, SbERR_UNDEF_LABEL },
+ { 964, SbERR_UNDEF_TYPE },
+ { 965, SbERR_BAD_EXIT },
+ { 966, SbERR_BAD_BLOCK },
+ { 967, SbERR_BAD_BRACKETS },
+ { 968, SbERR_BAD_DECLARATION },
+ { 969, SbERR_BAD_PARAMETERS },
+ { 970, SbERR_BAD_CHAR_IN_NUMBER },
+ { 971, SbERR_MUST_HAVE_DIMS },
+ { 972, SbERR_NO_IF },
+ { 973, SbERR_NOT_IN_SUBR },
+ { 974, SbERR_NOT_IN_MAIN },
+ { 975, SbERR_WRONG_DIMS },
+ { 976, SbERR_BAD_OPTION },
+ { 977, SbERR_CONSTANT_REDECLARED },
+ { 978, SbERR_PROG_TOO_LARGE },
+ { 979, SbERR_NO_STRINGS_ARRAYS },
+ { 1000, SbERR_PROPERTY_NOT_FOUND },
+ { 1001, SbERR_METHOD_NOT_FOUND },
+ { 1002, SbERR_ARG_MISSING },
+ { 1003, SbERR_BAD_NUMBER_OF_ARGS },
+ { 1004, SbERR_METHOD_FAILED },
+ { 1005, SbERR_SETPROP_FAILED },
+ { 1006, SbERR_GETPROP_FAILED },
+ { 1007, SbERR_BASIC_COMPAT },
+ { 0xFFFF, 0xFFFFFFFFL } // End mark
+};
+
+// The StarBASIC factory is a hack. When a SbModule is created, its pointer
+// is saved and given to the following SbProperties/SbMethods. This restores
+// the Modul-relationshop. But it works only when a modul is loaded.
+// Can cause troubles with separately loaded properties!
+
+SbxBase* SbiFactory::Create( UINT16 nSbxId, UINT32 nCreator )
+{
+ if( nCreator == SBXCR_SBX )
+ {
+ String aEmpty;
+ switch( nSbxId )
+ {
+ case SBXID_BASIC:
+ return new StarBASIC( NULL );
+ case SBXID_BASICMOD:
+ return new SbModule( aEmpty );
+ case SBXID_BASICPROP:
+ return new SbProperty( aEmpty, SbxVARIANT, NULL );
+ case SBXID_BASICMETHOD:
+ return new SbMethod( aEmpty, SbxVARIANT, NULL );
+ case SBXID_JSCRIPTMOD:
+ return new SbJScriptModule( aEmpty );
+ case SBXID_JSCRIPTMETH:
+ return new SbJScriptMethod( aEmpty, SbxVARIANT, NULL );
+ }
+ }
+ return NULL;
+}
+
+SbxObject* SbiFactory::CreateObject( const String& rClass )
+{
+ if( rClass.EqualsIgnoreCaseAscii( "StarBASIC" ) )
+ return new StarBASIC( NULL );
+ else
+ if( rClass.EqualsIgnoreCaseAscii( "StarBASICModule" ) )
+ {
+ String aEmpty;
+ return new SbModule( aEmpty );
+ }
+ else
+ if( rClass.EqualsIgnoreCaseAscii( "Collection" ) )
+ {
+ String aCollectionName( RTL_CONSTASCII_USTRINGPARAM("Collection") );
+ return new BasicCollection( aCollectionName );
+ }
+ else
+ return NULL;
+}
+
+
+// Factory class to create OLE objects
+class SbOLEFactory : public SbxFactory
+{
+public:
+ virtual SbxBase* Create( UINT16 nSbxId, UINT32 = SBXCR_SBX );
+ virtual SbxObject* CreateObject( const String& );
+};
+
+SbxBase* SbOLEFactory::Create( UINT16, UINT32 )
+{
+ // Not supported
+ return NULL;
+}
+
+SbUnoObject* createOLEObject_Impl( const String& aType ); // sbunoobj.cxx
+
+SbxObject* SbOLEFactory::CreateObject( const String& rClassName )
+{
+ SbxObject* pRet = createOLEObject_Impl( rClassName );
+ return pRet;
+}
+
+
+//========================================================================
+// SbFormFactory, show user forms by: dim as new <user form name>
+
+class SbFormFactory : public SbxFactory
+{
+public:
+ virtual SbxBase* Create( UINT16 nSbxId, UINT32 = SBXCR_SBX );
+ virtual SbxObject* CreateObject( const String& );
+};
+
+SbxBase* SbFormFactory::Create( UINT16, UINT32 )
+{
+ // Not supported
+ return NULL;
+}
+
+SbxObject* SbFormFactory::CreateObject( const String& rClassName )
+{
+ if( SbModule* pMod = pMOD )
+ {
+ if( SbxVariable* pVar = pMod->Find( rClassName, SbxCLASS_OBJECT ) )
+ {
+ if( SbUserFormModule* pFormModule = PTR_CAST( SbUserFormModule, pVar->GetObject() ) )
+ {
+ pFormModule->Load();
+ return pFormModule->CreateInstance();
+ }
+ }
+ }
+ return 0;
+}
+
+
+//========================================================================
+// SbTypeFactory
+
+SbxObject* cloneTypeObjectImpl( const SbxObject& rTypeObj )
+{
+ SbxObject* pRet = new SbxObject( rTypeObj );
+ pRet->PutObject( pRet );
+
+ // Copy the properties, not only the reference to them
+ SbxArray* pProps = pRet->GetProperties();
+ UINT32 nCount = pProps->Count32();
+ for( UINT32 i = 0 ; i < nCount ; i++ )
+ {
+ SbxVariable* pVar = pProps->Get32( i );
+ SbxProperty* pProp = PTR_CAST( SbxProperty, pVar );
+ if( pProp )
+ {
+ SbxProperty* pNewProp = new SbxProperty( *pProp );
+ SbxDataType eVarType = pVar->GetType();
+ if( eVarType & SbxARRAY )
+ {
+ SbxBase* pParObj = pVar->GetObject();
+ SbxDimArray* pSource = PTR_CAST(SbxDimArray,pParObj);
+ SbxDimArray* pDest = new SbxDimArray( pVar->GetType() );
+ INT32 lb = 0;
+ INT32 ub = 0;
+
+ pDest->setHasFixedSize( pSource->hasFixedSize() );
+ if ( pSource->GetDims() && pSource->hasFixedSize() )
+ {
+ for ( INT32 j = 1 ; j <= pSource->GetDims(); ++j )
+ {
+ pSource->GetDim32( (INT32)j, lb, ub );
+ pDest->AddDim32( lb, ub );
+ }
+ }
+ else
+ pDest->unoAddDim( 0, -1 ); // variant array
+
+ USHORT nSavFlags = pVar->GetFlags();
+ pNewProp->ResetFlag( SBX_FIXED );
+ // need to reset the FIXED flag
+ // when calling PutObject ( because the type will not match Object )
+ pNewProp->PutObject( pDest );
+ pNewProp->SetFlags( nSavFlags );
+ }
+ if( eVarType == SbxOBJECT )
+ {
+ SbxBase* pObjBase = pVar->GetObject();
+ SbxObject* pSrcObj = PTR_CAST(SbxObject,pObjBase);
+ SbxObject* pDestObj = NULL;
+ if( pSrcObj != NULL )
+ pDestObj = cloneTypeObjectImpl( *pSrcObj );
+ pNewProp->PutObject( pDestObj );
+ }
+ pProps->PutDirect( pNewProp, i );
+ }
+ }
+ return pRet;
+}
+
+// Factory class to create user defined objects (type command)
+class SbTypeFactory : public SbxFactory
+{
+public:
+ virtual SbxBase* Create( UINT16 nSbxId, UINT32 = SBXCR_SBX );
+ virtual SbxObject* CreateObject( const String& );
+};
+
+SbxBase* SbTypeFactory::Create( UINT16, UINT32 )
+{
+ // Not supported
+ return NULL;
+}
+
+SbxObject* SbTypeFactory::CreateObject( const String& rClassName )
+{
+ SbxObject* pRet = NULL;
+ SbModule* pMod = pMOD;
+ if( pMod )
+ {
+ const SbxObject* pObj = pMod->FindType( rClassName );
+ if( pObj )
+ pRet = cloneTypeObjectImpl( *pObj );
+ }
+ return pRet;
+}
+
+SbxObject* createUserTypeImpl( const String& rClassName )
+{
+ SbxObject* pRetObj = pTYPEFAC->CreateObject( rClassName );
+ return pRetObj;
+}
+
+TYPEINIT1(SbClassModuleObject,SbModule)
+
+SbClassModuleObject::SbClassModuleObject( SbModule* pClassModule )
+ : SbModule( pClassModule->GetName() )
+ , mpClassModule( pClassModule )
+ , mbInitializeEventDone( false )
+{
+ aOUSource = pClassModule->aOUSource;
+ aComment = pClassModule->aComment;
+ pImage = pClassModule->pImage;
+ pBreaks = pClassModule->pBreaks;
+
+ SetClassName( pClassModule->GetName() );
+
+ // Allow search only internally
+ ResetFlag( SBX_GBLSEARCH );
+
+ // Copy the methods from original class module
+ SbxArray* pClassMethods = pClassModule->GetMethods();
+ UINT32 nMethodCount = pClassMethods->Count32();
+ UINT32 i;
+ for( i = 0 ; i < nMethodCount ; i++ )
+ {
+ SbxVariable* pVar = pClassMethods->Get32( i );
+
+ // Exclude SbIfaceMapperMethod to copy them in a second step
+ SbIfaceMapperMethod* pIfaceMethod = PTR_CAST( SbIfaceMapperMethod, pVar );
+ if( !pIfaceMethod )
+ {
+ SbMethod* pMethod = PTR_CAST(SbMethod, pVar );
+ if( pMethod )
+ {
+ USHORT nFlags_ = pMethod->GetFlags();
+ pMethod->SetFlag( SBX_NO_BROADCAST );
+ SbMethod* pNewMethod = new SbMethod( *pMethod );
+ pNewMethod->ResetFlag( SBX_NO_BROADCAST );
+ pMethod->SetFlags( nFlags_ );
+ pNewMethod->pMod = this;
+ pNewMethod->SetParent( this );
+ pMethods->PutDirect( pNewMethod, i );
+ StartListening( pNewMethod->GetBroadcaster(), TRUE );
+ }
+ }
+ }
+
+ // Copy SbIfaceMapperMethod in a second step to ensure that
+ // the corresponding base methods have already been copied
+ for( i = 0 ; i < nMethodCount ; i++ )
+ {
+ SbxVariable* pVar = pClassMethods->Get32( i );
+
+ SbIfaceMapperMethod* pIfaceMethod = PTR_CAST( SbIfaceMapperMethod, pVar );
+ if( pIfaceMethod )
+ {
+ SbMethod* pImplMethod = pIfaceMethod->getImplMethod();
+ if( !pImplMethod )
+ {
+ DBG_ERROR( "No ImplMethod" );
+ continue;
+ }
+
+ // Search for own copy of ImplMethod
+ String aImplMethodName = pImplMethod->GetName();
+ SbxVariable* p = pMethods->Find( aImplMethodName, SbxCLASS_METHOD );
+ SbMethod* pImplMethodCopy = p ? PTR_CAST(SbMethod,p) : NULL;
+ if( !pImplMethodCopy )
+ {
+ DBG_ERROR( "Found no ImplMethod copy" );
+ continue;
+ }
+ SbIfaceMapperMethod* pNewIfaceMethod =
+ new SbIfaceMapperMethod( pIfaceMethod->GetName(), pImplMethodCopy );
+ pMethods->PutDirect( pNewIfaceMethod, i );
+ }
+ }
+
+ // Copy the properties from original class module
+ SbxArray* pClassProps = pClassModule->GetProperties();
+ UINT32 nPropertyCount = pClassProps->Count32();
+ for( i = 0 ; i < nPropertyCount ; i++ )
+ {
+ SbxVariable* pVar = pClassProps->Get32( i );
+ SbProcedureProperty* pProcedureProp = PTR_CAST( SbProcedureProperty, pVar );
+ if( pProcedureProp )
+ {
+ USHORT nFlags_ = pProcedureProp->GetFlags();
+ pProcedureProp->SetFlag( SBX_NO_BROADCAST );
+ SbProcedureProperty* pNewProp = new SbProcedureProperty
+ ( pProcedureProp->GetName(), pProcedureProp->GetType() );
+ // ( pProcedureProp->GetName(), pProcedureProp->GetType(), this );
+ pNewProp->SetFlags( nFlags_ ); // Copy flags
+ pNewProp->ResetFlag( SBX_NO_BROADCAST ); // except the Broadcast if it was set
+ pProcedureProp->SetFlags( nFlags_ );
+ pProps->PutDirect( pNewProp, i );
+ StartListening( pNewProp->GetBroadcaster(), TRUE );
+ }
+ else
+ {
+ SbxProperty* pProp = PTR_CAST( SbxProperty, pVar );
+ if( pProp )
+ {
+ USHORT nFlags_ = pProp->GetFlags();
+ pProp->SetFlag( SBX_NO_BROADCAST );
+ SbxProperty* pNewProp = new SbxProperty( *pProp );
+
+ // Special handling for modules instances and collections, they need
+ // to be instantiated, otherwise all refer to the same base object
+ SbxDataType eVarType = pProp->GetType();
+ if( eVarType == SbxOBJECT )
+ {
+ SbxBase* pObjBase = pProp->GetObject();
+ SbxObject* pObj = PTR_CAST(SbxObject,pObjBase);
+ if( pObj != NULL )
+ {
+ String aObjClass = pObj->GetClassName();
+ (void)aObjClass;
+
+ SbClassModuleObject* pClassModuleObj = PTR_CAST(SbClassModuleObject,pObjBase);
+ if( pClassModuleObj != NULL )
+ {
+ SbModule* pLclClassModule = pClassModuleObj->getClassModule();
+ SbClassModuleObject* pNewObj = new SbClassModuleObject( pLclClassModule );
+ pNewObj->SetName( pProp->GetName() );
+ pNewObj->SetParent( pLclClassModule->pParent );
+ pNewProp->PutObject( pNewObj );
+ }
+ else if( aObjClass.EqualsIgnoreCaseAscii( "Collection" ) )
+ {
+ String aCollectionName( RTL_CONSTASCII_USTRINGPARAM("Collection") );
+ BasicCollection* pNewCollection = new BasicCollection( aCollectionName );
+ pNewCollection->SetName( pProp->GetName() );
+ pNewCollection->SetParent( pClassModule->pParent );
+ pNewProp->PutObject( pNewCollection );
+ }
+ }
+ }
+
+ pNewProp->ResetFlag( SBX_NO_BROADCAST );
+ pNewProp->SetParent( this );
+ pProps->PutDirect( pNewProp, i );
+ pProp->SetFlags( nFlags_ );
+ }
+ }
+ }
+ SetModuleType( ModuleType::CLASS );
+ mbVBACompat = pClassModule->mbVBACompat;
+}
+
+SbClassModuleObject::~SbClassModuleObject()
+{
+ if( StarBASIC::IsRunning() )
+ triggerTerminateEvent();
+
+ // Must be deleted by base class dtor because this data
+ // is not owned by the SbClassModuleObject object
+ pImage = NULL;
+ pBreaks = NULL;
+}
+
+void SbClassModuleObject::SFX_NOTIFY( SfxBroadcaster& rBC, const TypeId& rBCType,
+ const SfxHint& rHint, const TypeId& rHintType )
+{
+ bool bDone = false;
+
+ const SbxHint* pHint = PTR_CAST(SbxHint,&rHint);
+ if( pHint )
+ {
+ SbxVariable* pVar = pHint->GetVar();
+ SbProcedureProperty* pProcProperty = PTR_CAST( SbProcedureProperty, pVar );
+ if( pProcProperty )
+ {
+ bDone = true;
+
+ if( pHint->GetId() == SBX_HINT_DATAWANTED )
+ {
+ String aProcName;
+ aProcName.AppendAscii( "Property Get " );
+ aProcName += pProcProperty->GetName();
+
+ SbxVariable* pMeth = Find( aProcName, SbxCLASS_METHOD );
+ if( pMeth )
+ {
+ SbxValues aVals;
+ aVals.eType = SbxVARIANT;
+
+ SbxArray* pArg = pVar->GetParameters();
+ USHORT nVarParCount = (pArg != NULL) ? pArg->Count() : 0;
+ if( nVarParCount > 1 )
+ {
+ SbxArrayRef xMethParameters = new SbxArray;
+ xMethParameters->Put( pMeth, 0 ); // Method as parameter 0
+ for( USHORT i = 1 ; i < nVarParCount ; ++i )
+ {
+ SbxVariable* pPar = pArg->Get( i );
+ xMethParameters->Put( pPar, i );
+ }
+
+ pMeth->SetParameters( xMethParameters );
+ pMeth->Get( aVals );
+ pMeth->SetParameters( NULL );
+ }
+ else
+ {
+ pMeth->Get( aVals );
+ }
+
+ pVar->Put( aVals );
+ }
+ }
+ else if( pHint->GetId() == SBX_HINT_DATACHANGED )
+ {
+ SbxVariable* pMeth = NULL;
+
+ bool bSet = pProcProperty->isSet();
+ if( bSet )
+ {
+ pProcProperty->setSet( false );
+
+ String aProcName;
+ aProcName.AppendAscii( "Property Set " );
+ aProcName += pProcProperty->GetName();
+ pMeth = Find( aProcName, SbxCLASS_METHOD );
+ }
+ if( !pMeth ) // Let
+ {
+ String aProcName;
+ aProcName.AppendAscii( "Property Let " );
+ aProcName += pProcProperty->GetName();
+ pMeth = Find( aProcName, SbxCLASS_METHOD );
+ }
+
+ if( pMeth )
+ {
+ // Setup parameters
+ SbxArrayRef xArray = new SbxArray;
+ xArray->Put( pMeth, 0 ); // Method as parameter 0
+ xArray->Put( pVar, 1 );
+ pMeth->SetParameters( xArray );
+
+ SbxValues aVals;
+ pMeth->Get( aVals );
+ pMeth->SetParameters( NULL );
+ }
+ }
+ }
+ }
+
+ if( !bDone )
+ SbModule::SFX_NOTIFY( rBC, rBCType, rHint, rHintType );
+}
+
+SbxVariable* SbClassModuleObject::Find( const XubString& rName, SbxClassType t )
+{
+ SbxVariable* pRes = SbxObject::Find( rName, t );
+ if( pRes )
+ {
+ triggerInitializeEvent();
+
+ SbIfaceMapperMethod* pIfaceMapperMethod = PTR_CAST(SbIfaceMapperMethod,pRes);
+ if( pIfaceMapperMethod )
+ {
+ pRes = pIfaceMapperMethod->getImplMethod();
+ pRes->SetFlag( SBX_EXTFOUND );
+ }
+ }
+ return pRes;
+}
+
+void SbClassModuleObject::triggerInitializeEvent( void )
+{
+ static String aInitMethodName( RTL_CONSTASCII_USTRINGPARAM("Class_Initialize") );
+
+ if( mbInitializeEventDone )
+ return;
+
+ mbInitializeEventDone = true;
+
+ // Search method
+ SbxVariable* pMeth = SbxObject::Find( aInitMethodName, SbxCLASS_METHOD );
+ if( pMeth )
+ {
+ SbxValues aVals;
+ pMeth->Get( aVals );
+ }
+}
+
+void SbClassModuleObject::triggerTerminateEvent( void )
+{
+ static String aTermMethodName( RTL_CONSTASCII_USTRINGPARAM("Class_Terminate") );
+
+ if( !mbInitializeEventDone || GetSbData()->bRunInit )
+ return;
+
+ // Search method
+ SbxVariable* pMeth = SbxObject::Find( aTermMethodName, SbxCLASS_METHOD );
+ if( pMeth )
+ {
+ SbxValues aVals;
+ pMeth->Get( aVals );
+ }
+}
+
+
+SbClassData::SbClassData( void )
+{
+ mxIfaces = new SbxArray();
+}
+
+void SbClassData::clear( void )
+{
+ mxIfaces->Clear();
+ maRequiredTypes.clear();
+}
+
+SbClassFactory::SbClassFactory( void )
+{
+ String aDummyName;
+ xClassModules = new SbxObject( aDummyName );
+}
+
+SbClassFactory::~SbClassFactory()
+{}
+
+void SbClassFactory::AddClassModule( SbModule* pClassModule )
+{
+ SbxObject* pParent = pClassModule->GetParent();
+ xClassModules->Insert( pClassModule );
+ pClassModule->SetParent( pParent );
+}
+
+void SbClassFactory::RemoveClassModule( SbModule* pClassModule )
+{
+ xClassModules->Remove( pClassModule );
+}
+
+SbxBase* SbClassFactory::Create( UINT16, UINT32 )
+{
+ // Not supported
+ return NULL;
+}
+
+SbxObject* SbClassFactory::CreateObject( const String& rClassName )
+{
+ SbxVariable* pVar = xClassModules->Find( rClassName, SbxCLASS_DONTCARE );
+ SbxObject* pRet = NULL;
+ if( pVar )
+ {
+ SbModule* pMod = (SbModule*)pVar;
+ pRet = new SbClassModuleObject( pMod );
+ }
+ return pRet;
+}
+
+SbModule* SbClassFactory::FindClass( const String& rClassName )
+{
+ SbxVariable* pVar = xClassModules->Find( rClassName, SbxCLASS_DONTCARE );
+ SbModule* pMod = pVar ? (SbModule*)pVar : NULL;
+ return pMod;
+}
+
+StarBASIC::StarBASIC( StarBASIC* p, BOOL bIsDocBasic )
+ : SbxObject( String( RTL_CONSTASCII_USTRINGPARAM("StarBASIC") ) ), bDocBasic( bIsDocBasic )
+{
+ SetParent( p );
+ pLibInfo = NULL;
+ bNoRtl = bBreak = FALSE;
+ bVBAEnabled = FALSE;
+ pModules = new SbxArray;
+
+ if( !GetSbData()->nInst++ )
+ {
+ pSBFAC = new SbiFactory;
+ AddFactory( pSBFAC );
+ pUNOFAC = new SbUnoFactory;
+ AddFactory( pUNOFAC );
+ pTYPEFAC = new SbTypeFactory;
+ AddFactory( pTYPEFAC );
+ pCLASSFAC = new SbClassFactory;
+ AddFactory( pCLASSFAC );
+ pOLEFAC = new SbOLEFactory;
+ AddFactory( pOLEFAC );
+ pFORMFAC = new SbFormFactory;
+ AddFactory( pFORMFAC );
+ }
+ pRtl = new SbiStdObject( String( RTL_CONSTASCII_USTRINGPARAM(RTLNAME) ), this );
+ // Search via StarBasic is always global
+ SetFlag( SBX_GBLSEARCH );
+ pVBAGlobals = NULL;
+ bQuit = FALSE;
+}
+
+// #51727 Override SetModified so that the modified state
+// is not given to the parent
+void StarBASIC::SetModified( BOOL b )
+{
+ SbxBase::SetModified( b );
+}
+
+StarBASIC::~StarBASIC()
+{
+ if( !--GetSbData()->nInst )
+ {
+ RemoveFactory( pSBFAC );
+ delete pSBFAC; pSBFAC = NULL;
+ RemoveFactory( pUNOFAC );
+ delete pUNOFAC; pUNOFAC = NULL;
+ RemoveFactory( pTYPEFAC );
+ delete pTYPEFAC; pTYPEFAC = NULL;
+ RemoveFactory( pCLASSFAC );
+ delete pCLASSFAC; pCLASSFAC = NULL;
+ RemoveFactory( pOLEFAC );
+ delete pOLEFAC; pOLEFAC = NULL;
+ RemoveFactory( pFORMFAC );
+ delete pFORMFAC; pFORMFAC = NULL;
+
+#ifdef DBG_UTIL
+ // There is no need to clean SbiData at program end,
+ // but we dislike MLK's at Purify
+ // TODO: Where else???
+ SbiGlobals** pp = (SbiGlobals**) ::GetAppData( SHL_SBC );
+ SbiGlobals* p = *pp;
+ if( p )
+ {
+ delete p;
+ *pp = 0;
+ }
+#endif
+ }
+
+ // #100326 Set Parent NULL in registered listeners
+ if( xUnoListeners.Is() )
+ {
+ USHORT uCount = xUnoListeners->Count();
+ for( USHORT i = 0 ; i < uCount ; i++ )
+ {
+ SbxVariable* pListenerObj = xUnoListeners->Get( i );
+ pListenerObj->SetParent( NULL );
+ }
+ xUnoListeners = NULL;
+ }
+}
+
+// Override new() operator, so that everyone can create a new instance
+void* StarBASIC::operator new( size_t n )
+{
+ if( n < sizeof( StarBASIC ) )
+ {
+// DBG_ASSERT( FALSE, "Warnung: inkompatibler BASIC-Stand!" );
+ n = sizeof( StarBASIC );
+ }
+ return ::operator new( n );
+}
+
+void StarBASIC::operator delete( void* p )
+{
+ ::operator delete( p );
+}
+
+/**************************************************************************
+*
+* Creation/Managment of modules
+*
+**************************************************************************/
+
+SbModule* StarBASIC::MakeModule( const String& rName, const String& rSrc )
+{
+ return MakeModule32( rName, rSrc );
+}
+
+SbModule* StarBASIC::MakeModule32( const String& rName, const ::rtl::OUString& rSrc )
+{
+ ModuleInfo mInfo;
+ mInfo.ModuleType = ModuleType::NORMAL;
+ return MakeModule32( rName, mInfo, rSrc );
+}
+SbModule* StarBASIC::MakeModule32( const String& rName, const ModuleInfo& mInfo, const rtl::OUString& rSrc )
+{
+
+ OSL_TRACE("create module %s type mInfo %d", rtl::OUStringToOString( rName, RTL_TEXTENCODING_UTF8 ).getStr(), mInfo.ModuleType );
+ SbModule* p = NULL;
+ switch ( mInfo.ModuleType )
+ {
+ case ModuleType::DOCUMENT:
+ // In theory we should be able to create Object modules
+ // in ordinary basic ( in vba mode thought these are create
+ // by the application/basic and not by the user )
+ p = new SbObjModule( rName, mInfo, isVBAEnabled() );
+ break;
+ case ModuleType::CLASS:
+ p = new SbModule( rName, isVBAEnabled() );
+ p->SetModuleType( ModuleType::CLASS );
+ break;
+ case ModuleType::FORM:
+ p = new SbUserFormModule( rName, mInfo, isVBAEnabled() );
+ break;
+ default:
+ p = new SbModule( rName, isVBAEnabled() );
+
+ }
+ p->SetSource32( rSrc );
+ p->SetParent( this );
+ pModules->Insert( p, pModules->Count() );
+ SetModified( TRUE );
+ return p;
+}
+
+void StarBASIC::Insert( SbxVariable* pVar )
+{
+ if( pVar->IsA( TYPE(SbModule) ) )
+ {
+ pModules->Insert( pVar, pModules->Count() );
+ pVar->SetParent( this );
+ StartListening( pVar->GetBroadcaster(), TRUE );
+ }
+ else
+ {
+ BOOL bWasModified = IsModified();
+ SbxObject::Insert( pVar );
+ if( !bWasModified && pVar->IsSet( SBX_DONTSTORE ) )
+ SetModified( FALSE );
+ }
+}
+
+void StarBASIC::Remove( SbxVariable* pVar )
+{
+ if( pVar->IsA( TYPE(SbModule) ) )
+ {
+ // #87540 Can be last reference!
+ SbxVariableRef xVar = pVar;
+ pModules->Remove( pVar );
+ pVar->SetParent( 0 );
+ EndListening( pVar->GetBroadcaster() );
+ }
+ else
+ SbxObject::Remove( pVar );
+}
+
+BOOL StarBASIC::Compile( SbModule* pMod )
+{
+ return pMod ? pMod->Compile() : FALSE;
+}
+
+BOOL StarBASIC::Disassemble( SbModule* pMod, String& rText )
+{
+ rText.Erase();
+ if( pMod )
+ pMod->Disassemble( rText );
+ return BOOL( rText.Len() != 0 );
+}
+
+void StarBASIC::Clear()
+{
+ while( pModules->Count() )
+ pModules->Remove( pModules->Count() - 1 );
+}
+
+SbModule* StarBASIC::FindModule( const String& rName )
+{
+ for( USHORT i = 0; i < pModules->Count(); i++ )
+ {
+ SbModule* p = (SbModule*) pModules->Get( i );
+ if( p->GetName().EqualsIgnoreCaseAscii( rName ) )
+ return p;
+ }
+ return NULL;
+}
+
+
+struct ClassModuleRunInitItem
+{
+ SbModule* m_pModule;
+ bool m_bProcessing;
+ bool m_bRunInitDone;
+ //ModuleVector m_vModulesDependingOnThisModule;
+
+ ClassModuleRunInitItem( void )
+ : m_pModule( NULL )
+ , m_bProcessing( false )
+ , m_bRunInitDone( false )
+ {}
+ ClassModuleRunInitItem( SbModule* pModule )
+ : m_pModule( pModule )
+ , m_bProcessing( false )
+ , m_bRunInitDone( false )
+ {}
+};
+
+typedef std::hash_map< ::rtl::OUString, ClassModuleRunInitItem,
+ ::rtl::OUStringHash, ::std::equal_to< ::rtl::OUString > > ModuleInitDependencyMap;
+
+static ModuleInitDependencyMap* GpMIDMap = NULL;
+
+void SbModule::implProcessModuleRunInit( ClassModuleRunInitItem& rItem )
+{
+ ModuleInitDependencyMap& rMIDMap = *GpMIDMap;
+
+ rItem.m_bProcessing = true;
+
+ //bool bAnyDependencies = true;
+ SbModule* pModule = rItem.m_pModule;
+ if( pModule->pClassData != NULL )
+ {
+ StringVector& rReqTypes = pModule->pClassData->maRequiredTypes;
+ if( rReqTypes.size() > 0 )
+ {
+ for( StringVector::iterator it = rReqTypes.begin() ; it != rReqTypes.end() ; ++it )
+ {
+ String& rStr = *it;
+
+ // Is required type a class module?
+ ModuleInitDependencyMap::iterator itFind = rMIDMap.find( rStr );
+ if( itFind != rMIDMap.end() )
+ {
+ ClassModuleRunInitItem& rParentItem = itFind->second;
+ if( rParentItem.m_bProcessing )
+ {
+ // TODO: raise error?
+ DBG_ERROR( "Cyclic module dependency detected" );
+ continue;
+ }
+
+ if( !rParentItem.m_bRunInitDone )
+ implProcessModuleRunInit( rParentItem );
+ }
+ }
+ }
+ }
+
+ pModule->RunInit();
+ rItem.m_bRunInitDone = true;
+ rItem.m_bProcessing = false;
+}
+
+// Run Init-Code of all modules (including inserted libraries)
+void StarBASIC::InitAllModules( StarBASIC* pBasicNotToInit )
+{
+ // Init own modules
+ for ( USHORT nMod = 0; nMod < pModules->Count(); nMod++ )
+ {
+ SbModule* pModule = (SbModule*)pModules->Get( nMod );
+ if( !pModule->IsCompiled() )
+ pModule->Compile();
+ }
+ // compile modules first then RunInit ( otherwise there is
+ // can be order dependency, e.g. classmodule A has a member
+ // of of type classmodule B and classmodule B hasn't been compiled yet )
+
+ // Consider required types to init in right order. Class modules
+ // that are required by other modules have to be initialized first.
+ ModuleInitDependencyMap aMIDMap;
+ GpMIDMap = &aMIDMap;
+ for ( USHORT nMod = 0; nMod < pModules->Count(); nMod++ )
+ {
+ SbModule* pModule = (SbModule*)pModules->Get( nMod );
+ String aModuleName = pModule->GetName();
+ if( pModule->isProxyModule() )
+ aMIDMap[aModuleName] = ClassModuleRunInitItem( pModule );
+ }
+
+ ModuleInitDependencyMap::iterator it;
+ for( it = aMIDMap.begin() ; it != aMIDMap.end(); ++it )
+ {
+ ClassModuleRunInitItem& rItem = it->second;
+ SbModule::implProcessModuleRunInit( rItem );
+ }
+ GpMIDMap = NULL;
+
+ // Call RunInit on standard modules
+ for ( USHORT nMod = 0; nMod < pModules->Count(); nMod++ )
+ {
+ SbModule* pModule = (SbModule*)pModules->Get( nMod );
+ if( !pModule->isProxyModule() )
+ pModule->RunInit();
+ }
+
+ // Check all objects if they are BASIC,
+ // if yes initialize
+ for ( USHORT nObj = 0; nObj < pObjs->Count(); nObj++ )
+ {
+ SbxVariable* pVar = pObjs->Get( nObj );
+ StarBASIC* pBasic = PTR_CAST(StarBASIC,pVar);
+ if( pBasic && pBasic != pBasicNotToInit )
+ pBasic->InitAllModules();
+ }
+}
+
+// #88329 Put modules back to not initialised state to
+// force reinitialisation at next start
+void StarBASIC::DeInitAllModules( void )
+{
+ // Deinit own modules
+ for ( USHORT nMod = 0; nMod < pModules->Count(); nMod++ )
+ {
+ SbModule* pModule = (SbModule*)pModules->Get( nMod );
+ if( pModule->pImage )
+ pModule->pImage->bInit = false;
+ }
+
+ for ( USHORT nObj = 0; nObj < pObjs->Count(); nObj++ )
+ {
+ SbxVariable* pVar = pObjs->Get( nObj );
+ StarBASIC* pBasic = PTR_CAST(StarBASIC,pVar);
+ if( pBasic )
+ pBasic->DeInitAllModules();
+ }
+}
+
+// #43011 For TestTool, to delete global vars
+void StarBASIC::ClearGlobalVars( void )
+{
+ SbxArrayRef xProps( GetProperties() );
+ USHORT nPropCount = xProps->Count();
+ for ( USHORT nProp = 0 ; nProp < nPropCount ; ++nProp )
+ {
+ SbxBase* pVar = xProps->Get( nProp );
+ pVar->Clear();
+ }
+ SetModified( TRUE );
+}
+
+// This implementation at first searches within the runtime library,
+// then it looks for an element within one module. This moudle can be
+// a public var or an entrypoint. If it is not found and we look for a
+// method and a module with the given name is found the search continues
+// for entrypoint "Main".
+// If this fails again a conventional search over objects is performend.
+SbxVariable* StarBASIC::Find( const String& rName, SbxClassType t )
+{
+ static String aMainStr( RTL_CONSTASCII_USTRINGPARAM("Main") );
+
+ SbxVariable* pRes = NULL;
+ SbModule* pNamed = NULL;
+ // "Extended" search in Runtime Lib
+ // but only if SbiRuntime has not set the flag
+ if( !bNoRtl )
+ {
+ if( t == SbxCLASS_DONTCARE || t == SbxCLASS_OBJECT )
+ {
+ if( rName.EqualsIgnoreCaseAscii( RTLNAME ) )
+ pRes = pRtl;
+ }
+ if( !pRes )
+ pRes = ((SbiStdObject*) (SbxObject*) pRtl)->Find( rName, t );
+ if( pRes )
+ pRes->SetFlag( SBX_EXTFOUND );
+ }
+ // Search module
+ if( !pRes )
+ for( USHORT i = 0; i < pModules->Count(); i++ )
+ {
+ SbModule* p = (SbModule*) pModules->Get( i );
+ if( p->IsVisible() )
+ {
+ // Remember modul fpr Main() call
+ // or is the name equal?!?
+ if( p->GetName().EqualsIgnoreCaseAscii( rName ) )
+ {
+ if( t == SbxCLASS_OBJECT || t == SbxCLASS_DONTCARE )
+ {
+ pRes = p; break;
+ }
+ pNamed = p;
+ }
+ // Only variables qualified by the Module Name e.g. Sheet1.foo
+ // should work for Documant && Class type Modules
+ INT32 nType = p->GetModuleType();
+ if ( nType == ModuleType::DOCUMENT || nType == ModuleType::FORM )
+ continue;
+
+ // otherwise check if the element is available
+ // unset GBLSEARCH-Flag (due to Rekursion)
+ USHORT nGblFlag = p->GetFlags() & SBX_GBLSEARCH;
+ p->ResetFlag( SBX_GBLSEARCH );
+ pRes = p->Find( rName, t );
+ p->SetFlag( nGblFlag );
+ if( pRes )
+ break;
+ }
+ }
+ if( !pRes && pNamed && ( t == SbxCLASS_METHOD || t == SbxCLASS_DONTCARE ) &&
+ !pNamed->GetName().EqualsIgnoreCaseAscii( aMainStr ) )
+ pRes = pNamed->Find( aMainStr, SbxCLASS_METHOD );
+ if( !pRes )
+ pRes = SbxObject::Find( rName, t );
+ return pRes;
+}
+
+BOOL StarBASIC::Call( const String& rName, SbxArray* pParam )
+{
+ BOOL bRes = SbxObject::Call( rName, pParam );
+ if( !bRes )
+ {
+ SbxError eErr = SbxBase::GetError();
+ SbxBase::ResetError();
+ if( eErr != SbxERR_OK )
+ RTError( (SbError)eErr, 0, 0, 0 );
+ }
+ return bRes;
+}
+
+// Find method via name (e.g. query via BASIC IDE)
+SbxBase* StarBASIC::FindSBXInCurrentScope( const String& rName )
+{
+ if( !pINST )
+ return NULL;
+ if( !pINST->pRun )
+ return NULL;
+ return pINST->pRun->FindElementExtern( rName );
+}
+
+// Preserve old interface
+SbxVariable* StarBASIC::FindVarInCurrentScopy
+( const String& rName, USHORT& rStatus )
+{
+ rStatus = 1; // Presumption: nothing found
+ SbxVariable* pVar = NULL;
+ SbxBase* pSbx = FindSBXInCurrentScope( rName );
+ if( pSbx )
+ {
+ if( !pSbx->ISA(SbxMethod) && !pSbx->ISA(SbxObject) )
+ pVar = PTR_CAST(SbxVariable,pSbx);
+ }
+ if( pVar )
+ rStatus = 0; // We found something
+ return pVar;
+}
+
+void StarBASIC::QuitAndExitApplication()
+{
+ Stop();
+ bQuit = TRUE;
+}
+
+void StarBASIC::Stop()
+{
+ SbiInstance* p = pINST;
+ while( p )
+ {
+ p->Stop();
+ p = p->pNext;
+ }
+}
+
+BOOL StarBASIC::IsRunning()
+{
+ return BOOL( pINST != NULL );
+}
+
+/**************************************************************************
+*
+* Object factories and others
+*
+**************************************************************************/
+
+// Activation of an object. There is no need to access active objects
+// with name via BASIC. If NULL is given, everything is activated.
+void StarBASIC::ActivateObject( const String* pName, BOOL bActivate )
+{
+ if( pName )
+ {
+ SbxObject* p = (SbxObject*) SbxObject::Find( *pName, SbxCLASS_OBJECT );
+ if( p )
+ {
+ if( bActivate )
+ p->SetFlag( SBX_EXTSEARCH );
+ else
+ p->ResetFlag( SBX_EXTSEARCH );
+ }
+ }
+ else
+ {
+ for( USHORT i = 0; i < GetObjects()->Count(); i++ )
+ {
+ SbxObject* p = (SbxObject*) GetObjects()->Get( i );
+ if( bActivate )
+ p->SetFlag( SBX_EXTSEARCH );
+ else
+ p->ResetFlag( SBX_EXTSEARCH );
+ }
+ }
+}
+
+/**************************************************************************
+*
+* Debugging and error handling
+*
+**************************************************************************/
+
+SbMethod* StarBASIC::GetActiveMethod( USHORT nLevel )
+{
+ if( pINST )
+ return pINST->GetCaller( nLevel );
+ else
+ return NULL;
+}
+
+SbModule* StarBASIC::GetActiveModule()
+{
+ if( pINST && !IsCompilerError() )
+ return pINST->GetActiveModule();
+ else
+ return pCMOD;
+}
+
+USHORT StarBASIC::BreakPoint( USHORT l, USHORT c1, USHORT c2 )
+{
+ SetErrorData( 0, l, c1, c2 );
+ bBreak = TRUE;
+ if( GetSbData()->aBreakHdl.IsSet() )
+ return (USHORT) GetSbData()->aBreakHdl.Call( this );
+ else
+ return BreakHdl();
+}
+
+USHORT StarBASIC::StepPoint( USHORT l, USHORT c1, USHORT c2 )
+{
+ SetErrorData( 0, l, c1, c2 );
+ bBreak = FALSE;
+ if( GetSbData()->aBreakHdl.IsSet() )
+ return (USHORT) GetSbData()->aBreakHdl.Call( this );
+ else
+ return BreakHdl();
+}
+
+USHORT __EXPORT StarBASIC::BreakHdl()
+{
+ return (USHORT) ( aBreakHdl.IsSet()
+ ? aBreakHdl.Call( this ) : SbDEBUG_CONTINUE );
+}
+
+// Calls for error handler and break handler
+USHORT StarBASIC::GetLine() { return GetSbData()->nLine; }
+USHORT StarBASIC::GetCol1() { return GetSbData()->nCol1; }
+USHORT StarBASIC::GetCol2() { return GetSbData()->nCol2; }
+
+// Specific to error handler
+SbError StarBASIC::GetErrorCode() { return GetSbData()->nCode; }
+const String& StarBASIC::GetErrorText() { return GetSbData()->aErrMsg; }
+BOOL StarBASIC::IsCompilerError() { return GetSbData()->bCompiler; }
+void StarBASIC::SetGlobalLanguageMode( SbLanguageMode eLanguageMode )
+{
+ GetSbData()->eLanguageMode = eLanguageMode;
+}
+SbLanguageMode StarBASIC::GetGlobalLanguageMode()
+{
+ return GetSbData()->eLanguageMode;
+}
+// Local settings
+SbLanguageMode StarBASIC::GetLanguageMode()
+{
+ // Use global settings?
+ if( eLanguageMode == SB_LANG_GLOBAL )
+ return GetSbData()->eLanguageMode;
+ else
+ return eLanguageMode;
+}
+
+// AB: 29.3.96
+// Das Mapping zwischen alten und neuen Fehlercodes erfolgt, indem die Tabelle
+// SFX_VB_ErrorTab[] durchsucht wird. Dies ist zwar nicht besonders performant,
+// verbraucht aber viel weniger Speicher als entsprechende switch-Bloecke.
+// Die Umrechnung von Fehlercodes muss nicht schnell sein, daher auch keine
+// binaere Suche bei VB-Error -> SFX-Error.
+
+// Neue Fehler-Codes auf alte, Sbx-Kompatible zurueckmappen
+USHORT StarBASIC::GetVBErrorCode( SbError nError )
+{
+ USHORT nRet = 0;
+
+ if( SbiRuntime::isVBAEnabled() )
+ {
+ switch( nError )
+ {
+ case SbERR_BASIC_ARRAY_FIX:
+ return 10;
+ case SbERR_BASIC_STRING_OVERFLOW:
+ return 14;
+ case SbERR_BASIC_EXPR_TOO_COMPLEX:
+ return 16;
+ case SbERR_BASIC_OPER_NOT_PERFORM:
+ return 17;
+ case SbERR_BASIC_TOO_MANY_DLL:
+ return 47;
+ case SbERR_BASIC_LOOP_NOT_INIT:
+ return 92;
+ default:
+ nRet = 0;
+ }
+ }
+
+ // Suchschleife
+ const SFX_VB_ErrorItem* pErrItem;
+ USHORT nIndex = 0;
+ do
+ {
+ pErrItem = SFX_VB_ErrorTab + nIndex;
+ if( pErrItem->nErrorSFX == nError )
+ {
+ nRet = pErrItem->nErrorVB;
+ break;
+ }
+ nIndex++;
+ }
+ while( pErrItem->nErrorVB != 0xFFFF ); // bis End-Marke
+ return nRet;
+}
+
+SbError StarBASIC::GetSfxFromVBError( USHORT nError )
+{
+ SbError nRet = 0L;
+
+ if( SbiRuntime::isVBAEnabled() )
+ {
+ switch( nError )
+ {
+ case 1:
+ case 2:
+ case 4:
+ case 8:
+ case 12:
+ case 73:
+ return 0L;
+ case 10:
+ return SbERR_BASIC_ARRAY_FIX;
+ case 14:
+ return SbERR_BASIC_STRING_OVERFLOW;
+ case 16:
+ return SbERR_BASIC_EXPR_TOO_COMPLEX;
+ case 17:
+ return SbERR_BASIC_OPER_NOT_PERFORM;
+ case 47:
+ return SbERR_BASIC_TOO_MANY_DLL;
+ case 92:
+ return SbERR_BASIC_LOOP_NOT_INIT;
+ default:
+ nRet = 0L;
+ }
+ }
+ const SFX_VB_ErrorItem* pErrItem;
+ USHORT nIndex = 0;
+ do
+ {
+ pErrItem = SFX_VB_ErrorTab + nIndex;
+ if( pErrItem->nErrorVB == nError )
+ {
+ nRet = pErrItem->nErrorSFX;
+ break;
+ }
+ else if( pErrItem->nErrorVB > nError )
+ break; // kann nicht mehr gefunden werden
+
+ nIndex++;
+ }
+ while( pErrItem->nErrorVB != 0xFFFF ); // bis End-Marke
+ return nRet;
+}
+
+// Error- / Break-Daten setzen
+void StarBASIC::SetErrorData
+( SbError nCode, USHORT nLine, USHORT nCol1, USHORT nCol2 )
+{
+ SbiGlobals& aGlobals = *GetSbData();
+ aGlobals.nCode = nCode;
+ aGlobals.nLine = nLine;
+ aGlobals.nCol1 = nCol1;
+ aGlobals.nCol2 = nCol2;
+}
+
+//----------------------------------------------------------------
+// Hilfsklasse zum Zugriff auf String SubResourcen einer Resource.
+// Quelle: sfx2\source\doc\docfile.cxx (TLX)
+struct BasicStringList_Impl : private Resource
+{
+ ResId aResId;
+
+ BasicStringList_Impl( ResId& rErrIdP, USHORT nId)
+ : Resource( rErrIdP ),aResId(nId, *rErrIdP.GetResMgr() ){}
+ ~BasicStringList_Impl() { FreeResource(); }
+
+ String GetString(){ return String( aResId ); }
+ BOOL IsErrorTextAvailable( void )
+ { return IsAvailableRes(aResId.SetRT(RSC_STRING)); }
+};
+//----------------------------------------------------------------
+
+// #60175 Flag, das bei Basic-Fehlern das Anziehen der SFX-Resourcen verhindert
+static BOOL bStaticSuppressSfxResource = FALSE;
+
+void StarBASIC::StaticSuppressSfxResource( BOOL bSuppress )
+{
+ bStaticSuppressSfxResource = bSuppress;
+}
+
+// Hack for #83750, use bStaticSuppressSfxResource as setup flag
+BOOL runsInSetup( void )
+{
+ return bStaticSuppressSfxResource;
+}
+
+
+void StarBASIC::MakeErrorText( SbError nId, const String& aMsg )
+{
+ vos::OGuard aSolarGuard( Application::GetSolarMutex() );
+
+ if( bStaticSuppressSfxResource )
+ {
+ GetSbData()->aErrMsg = String( RTL_CONSTASCII_USTRINGPARAM("No resource: Error message not available") );
+ return;
+ }
+
+ USHORT nOldID = GetVBErrorCode( nId );
+
+ // Hilfsklasse instanzieren
+ BasResId aId( RID_BASIC_START );
+ BasicStringList_Impl aMyStringList( aId, USHORT(nId & ERRCODE_RES_MASK) );
+
+ if( aMyStringList.IsErrorTextAvailable() )
+ {
+ // Merge Message mit Zusatztext
+ String aMsg1 = aMyStringList.GetString();
+ // Argument-Platzhalter durch %s ersetzen
+ String aSrgStr( RTL_CONSTASCII_USTRINGPARAM("$(ARG1)") );
+ USHORT nResult = aMsg1.Search( aSrgStr );
+
+ if( nResult != STRING_NOTFOUND )
+ {
+ aMsg1.Erase( nResult, aSrgStr.Len() );
+ aMsg1.Insert( aMsg, nResult );
+ }
+ GetSbData()->aErrMsg = aMsg1;
+ }
+ else if( nOldID != 0 )
+ {
+ String aStdMsg( RTL_CONSTASCII_USTRINGPARAM("Fehler ") );
+ aStdMsg += String::CreateFromInt32( nOldID);
+ aStdMsg += String( RTL_CONSTASCII_USTRINGPARAM(": Kein Fehlertext verfuegbar!") );
+ GetSbData()->aErrMsg = aStdMsg;
+ }
+ else
+ GetSbData()->aErrMsg = String::EmptyString();
+
+}
+
+BOOL StarBASIC::CError
+ ( SbError code, const String& rMsg, USHORT l, USHORT c1, USHORT c2 )
+{
+ vos::OGuard aSolarGuard( Application::GetSolarMutex() );
+
+ // Compiler-Fehler waehrend der Laufzeit -> Programm anhalten
+ if( IsRunning() )
+ {
+ // #109018 Check if running Basic is affected
+ StarBASIC* pStartedBasic = pINST->GetBasic();
+ if( pStartedBasic != this )
+ return FALSE;
+
+ Stop();
+ }
+
+ // Flag setzen, damit GlobalRunInit den Fehler mitbekommt
+ GetSbData()->bGlobalInitErr = TRUE;
+
+ // Fehlertext basteln
+ MakeErrorText( code, rMsg );
+
+ // Umsetzung des Codes fuer String-Transport in SFX-Error
+ if( rMsg.Len() )
+ code = (ULONG)*new StringErrorInfo( code, String(rMsg) );
+
+ SetErrorData( code, l, c1, c2 );
+ GetSbData()->bCompiler = TRUE;
+ BOOL bRet;
+ if( GetSbData()->aErrHdl.IsSet() )
+ bRet = (BOOL) GetSbData()->aErrHdl.Call( this );
+ else
+ bRet = ErrorHdl();
+ GetSbData()->bCompiler = FALSE; // nur TRUE fuer Error-Handler
+ return bRet;
+}
+
+BOOL StarBASIC::RTError
+ ( SbError code, USHORT l, USHORT c1, USHORT c2 )
+{
+ return RTError( code, String(), l, c1, c2 );
+}
+
+BOOL StarBASIC::RTError( SbError code, const String& rMsg, USHORT l, USHORT c1, USHORT c2 )
+{
+ vos::OGuard aSolarGuard( Application::GetSolarMutex() );
+
+ SbError c = code;
+ if( (c & ERRCODE_CLASS_MASK) == ERRCODE_CLASS_COMPILER )
+ c = 0;
+ MakeErrorText( c, rMsg );
+
+ // Umsetzung des Codes fuer String-Transport in SFX-Error
+ if( rMsg.Len() )
+ {
+ // very confusing, even though MakeErrorText sets up the error text
+ // seems that this is not used ( if rMsg already has content )
+ // In the case of VBA MakeErrorText also formats the error to be alittle more
+ // like vba ( adds an error number etc )
+ if ( SbiRuntime::isVBAEnabled() && ( code == SbERR_BASIC_COMPAT ) )
+ {
+ String aTmp = '\'';
+ aTmp += String::CreateFromInt32( SbxErrObject::getUnoErrObject()->getNumber() );
+ aTmp += String( RTL_CONSTASCII_USTRINGPARAM("\'\n") );
+ aTmp += GetSbData()->aErrMsg.Len() ? GetSbData()->aErrMsg : rMsg;
+ code = (ULONG)*new StringErrorInfo( code, aTmp );
+ }
+ else
+ code = (ULONG)*new StringErrorInfo( code, String(rMsg) );
+ }
+
+ SetErrorData( code, l, c1, c2 );
+ if( GetSbData()->aErrHdl.IsSet() )
+ return (BOOL) GetSbData()->aErrHdl.Call( this );
+ else
+ return ErrorHdl();
+}
+
+void StarBASIC::Error( SbError n )
+{
+ Error( n, String() );
+}
+
+void StarBASIC::Error( SbError n, const String& rMsg )
+{
+ if( pINST )
+ pINST->Error( n, rMsg );
+}
+
+void StarBASIC::FatalError( SbError n )
+{
+ if( pINST )
+ pINST->FatalError( n );
+}
+
+void StarBASIC::FatalError( SbError _errCode, const String& _details )
+{
+ if( pINST )
+ pINST->FatalError( _errCode, _details );
+}
+
+SbError StarBASIC::GetErrBasic()
+{
+ if( pINST )
+ return pINST->GetErr();
+ else
+ return 0;
+}
+
+// #66536 Zusatz-Message fuer RTL-Funktion Error zugreifbar machen
+String StarBASIC::GetErrorMsg()
+{
+ if( pINST )
+ return pINST->GetErrorMsg();
+ else
+ return String();
+}
+
+USHORT StarBASIC::GetErl()
+{
+ if( pINST )
+ return pINST->GetErl();
+ else
+ return 0;
+}
+
+BOOL __EXPORT StarBASIC::ErrorHdl()
+{
+ return (BOOL) ( aErrorHdl.IsSet()
+ ? aErrorHdl.Call( this ) : FALSE );
+}
+
+Link StarBASIC::GetGlobalErrorHdl()
+{
+ return GetSbData()->aErrHdl;
+}
+
+void StarBASIC::SetGlobalErrorHdl( const Link& rLink )
+{
+ GetSbData()->aErrHdl = rLink;
+}
+
+
+Link StarBASIC::GetGlobalBreakHdl()
+{
+ return GetSbData()->aBreakHdl;
+}
+
+void StarBASIC::SetGlobalBreakHdl( const Link& rLink )
+{
+ GetSbData()->aBreakHdl = rLink;
+}
+
+SbxArrayRef StarBASIC::getUnoListeners( void )
+{
+ if( !xUnoListeners.Is() )
+ xUnoListeners = new SbxArray();
+ return xUnoListeners;
+}
+
+
+/**************************************************************************
+*
+* Laden und Speichern
+*
+**************************************************************************/
+
+BOOL StarBASIC::LoadData( SvStream& r, USHORT nVer )
+{
+ if( !SbxObject::LoadData( r, nVer ) )
+ return FALSE;
+
+ // #95459 Delete dialogs, otherwise endless recursion
+ // in SbxVarable::GetType() if dialogs are accessed
+ USHORT nObjCount = pObjs->Count();
+ SbxVariable** ppDeleteTab = new SbxVariable*[ nObjCount ];
+ USHORT nObj;
+
+ for( nObj = 0 ; nObj < nObjCount ; nObj++ )
+ {
+ SbxVariable* pVar = pObjs->Get( nObj );
+ StarBASIC* pBasic = PTR_CAST( StarBASIC, pVar );
+ ppDeleteTab[nObj] = pBasic ? NULL : pVar;
+ }
+ for( nObj = 0 ; nObj < nObjCount ; nObj++ )
+ {
+ SbxVariable* pVar = ppDeleteTab[nObj];
+ if( pVar )
+ pObjs->Remove( pVar );
+ }
+ delete[] ppDeleteTab;
+
+ UINT16 nMod;
+ pModules->Clear();
+ r >> nMod;
+ for( USHORT i = 0; i < nMod; i++ )
+ {
+ SbModule* pMod = (SbModule*) SbxBase::Load( r );
+ if( !pMod )
+ return FALSE;
+ else if( pMod->ISA(SbJScriptModule) )
+ {
+ // Ref zuweisen, damit pMod deleted wird
+ SbModuleRef xRef = pMod;
+ }
+ else
+ {
+ pMod->SetParent( this );
+ pModules->Put( pMod, i );
+ }
+ }
+ // HACK fuer SFX-Mist!
+ SbxVariable* p = Find( String( RTL_CONSTASCII_USTRINGPARAM("FALSE") ), SbxCLASS_PROPERTY );
+ if( p )
+ Remove( p );
+ p = Find( String( RTL_CONSTASCII_USTRINGPARAM("TRUE") ), SbxCLASS_PROPERTY );
+ if( p )
+ Remove( p );
+ // Ende des Hacks!
+ // Suche ueber StarBASIC ist immer global
+ DBG_ASSERT( IsSet( SBX_GBLSEARCH ), "Basic ohne GBLSEARCH geladen" );
+ SetFlag( SBX_GBLSEARCH );
+ return TRUE;
+}
+
+BOOL StarBASIC::StoreData( SvStream& r ) const
+{
+ if( !SbxObject::StoreData( r ) )
+ return FALSE;
+ r << (UINT16) pModules->Count();
+ for( USHORT i = 0; i < pModules->Count(); i++ )
+ {
+ SbModule* p = (SbModule*) pModules->Get( i );
+ if( !p->Store( r ) )
+ return FALSE;
+ }
+ return TRUE;
+}
+
+BOOL StarBASIC::LoadOldModules( SvStream& )
+{
+ return FALSE;
+}
+
+bool StarBASIC::GetUNOConstant( const sal_Char* _pAsciiName, ::com::sun::star::uno::Any& aOut )
+{
+ bool bRes = false;
+ ::rtl::OUString sVarName( ::rtl::OUString::createFromAscii( _pAsciiName ) );
+ SbUnoObject* pGlobs = dynamic_cast<SbUnoObject*>( Find( sVarName, SbxCLASS_DONTCARE ) );
+ if ( pGlobs )
+ {
+ aOut = pGlobs->getUnoAny();
+ bRes = true;
+ }
+ return bRes;
+}
+
+//========================================================================
+// #118116 Implementation Collection object
+
+TYPEINIT1(BasicCollection,SbxObject)
+
+static const char pCountStr[] = "Count";
+static const char pAddStr[] = "Add";
+static const char pItemStr[] = "Item";
+static const char pRemoveStr[] = "Remove";
+static USHORT nCountHash = 0, nAddHash, nItemHash, nRemoveHash;
+
+SbxInfoRef BasicCollection::xAddInfo = NULL;
+SbxInfoRef BasicCollection::xItemInfo = NULL;
+
+BasicCollection::BasicCollection( const XubString& rClass )
+ : SbxObject( rClass )
+{
+ if( !nCountHash )
+ {
+ nCountHash = MakeHashCode( String::CreateFromAscii( pCountStr ) );
+ nAddHash = MakeHashCode( String::CreateFromAscii( pAddStr ) );
+ nItemHash = MakeHashCode( String::CreateFromAscii( pItemStr ) );
+ nRemoveHash = MakeHashCode( String::CreateFromAscii( pRemoveStr ) );
+ }
+ Initialize();
+
+}
+
+BasicCollection::~BasicCollection()
+{}
+
+void BasicCollection::Clear()
+{
+ SbxObject::Clear();
+ Initialize();
+}
+
+void BasicCollection::Initialize()
+{
+ xItemArray = new SbxArray();
+ SetType( SbxOBJECT );
+ SetFlag( SBX_FIXED );
+ ResetFlag( SBX_WRITE );
+ SbxVariable* p;
+ p = Make( String::CreateFromAscii( pCountStr ), SbxCLASS_PROPERTY, SbxINTEGER );
+ p->ResetFlag( SBX_WRITE );
+ p->SetFlag( SBX_DONTSTORE );
+ p = Make( String::CreateFromAscii( pAddStr ), SbxCLASS_METHOD, SbxEMPTY );
+ p->SetFlag( SBX_DONTSTORE );
+ p = Make( String::CreateFromAscii( pItemStr ), SbxCLASS_METHOD, SbxVARIANT );
+ p->SetFlag( SBX_DONTSTORE );
+ p = Make( String::CreateFromAscii( pRemoveStr ), SbxCLASS_METHOD, SbxEMPTY );
+ p->SetFlag( SBX_DONTSTORE );
+ if ( !xAddInfo.Is() )
+ {
+ xAddInfo = new SbxInfo;
+ xAddInfo->AddParam( String( RTL_CONSTASCII_USTRINGPARAM("Item") ), SbxVARIANT, SBX_READ );
+ xAddInfo->AddParam( String( RTL_CONSTASCII_USTRINGPARAM("Key") ), SbxVARIANT, SBX_READ | SBX_OPTIONAL );
+ xAddInfo->AddParam( String( RTL_CONSTASCII_USTRINGPARAM("Before") ), SbxVARIANT, SBX_READ | SBX_OPTIONAL );
+ xAddInfo->AddParam( String( RTL_CONSTASCII_USTRINGPARAM("After") ), SbxVARIANT, SBX_READ | SBX_OPTIONAL );
+ }
+ if ( !xItemInfo.Is() )
+ {
+ xItemInfo = new SbxInfo;
+ xItemInfo->AddParam( String( RTL_CONSTASCII_USTRINGPARAM("Index") ), SbxVARIANT, SBX_READ | SBX_OPTIONAL);
+ }
+}
+
+SbxVariable* BasicCollection::Find( const XubString& rName, SbxClassType t )
+{
+ SbxVariable* pFind = SbxObject::Find( rName, t );
+ return pFind;
+}
+
+void BasicCollection::SFX_NOTIFY( SfxBroadcaster& rCst, const TypeId& rId1,
+ const SfxHint& rHint, const TypeId& rId2 )
+{
+ const SbxHint* p = PTR_CAST(SbxHint,&rHint);
+ if( p )
+ {
+ ULONG nId = p->GetId();
+ BOOL bRead = BOOL( nId == SBX_HINT_DATAWANTED );
+ BOOL bWrite = BOOL( nId == SBX_HINT_DATACHANGED );
+ BOOL bRequestInfo = BOOL( nId == SBX_HINT_INFOWANTED );
+ SbxVariable* pVar = p->GetVar();
+ SbxArray* pArg = pVar->GetParameters();
+ XubString aVarName( pVar->GetName() );
+ if( bRead || bWrite )
+ {
+ if( pVar->GetHashCode() == nCountHash
+ && aVarName.EqualsIgnoreCaseAscii( pCountStr ) )
+ pVar->PutLong( xItemArray->Count32() );
+ else if( pVar->GetHashCode() == nAddHash
+ && aVarName.EqualsIgnoreCaseAscii( pAddStr ) )
+ CollAdd( pArg );
+ else if( pVar->GetHashCode() == nItemHash
+ && aVarName.EqualsIgnoreCaseAscii( pItemStr ) )
+ CollItem( pArg );
+ else if( pVar->GetHashCode() == nRemoveHash
+ && aVarName.EqualsIgnoreCaseAscii( pRemoveStr ) )
+ CollRemove( pArg );
+ else
+ SbxObject::SFX_NOTIFY( rCst, rId1, rHint, rId2 );
+ return;
+ }
+ else if ( bRequestInfo )
+ {
+ if( pVar->GetHashCode() == nAddHash
+ && aVarName.EqualsIgnoreCaseAscii( pAddStr ) )
+ pVar->SetInfo( xAddInfo );
+ else if( pVar->GetHashCode() == nItemHash
+ && aVarName.EqualsIgnoreCaseAscii( pItemStr ) )
+ pVar->SetInfo( xItemInfo );
+ }
+ }
+ SbxObject::SFX_NOTIFY( rCst, rId1, rHint, rId2 );
+}
+
+INT32 BasicCollection::implGetIndex( SbxVariable* pIndexVar )
+{
+ INT32 nIndex = -1;
+ if( pIndexVar->GetType() == SbxSTRING )
+ nIndex = implGetIndexForName( pIndexVar->GetString() );
+ else
+ nIndex = pIndexVar->GetLong() - 1;
+ return nIndex;
+}
+
+INT32 BasicCollection::implGetIndexForName( const String& rName )
+{
+ INT32 nIndex = -1;
+ INT32 nCount = xItemArray->Count32();
+ INT32 nNameHash = MakeHashCode( rName );
+ for( INT32 i = 0 ; i < nCount ; i++ )
+ {
+ SbxVariable* pVar = xItemArray->Get32( i );
+ if( pVar->GetHashCode() == nNameHash &&
+ pVar->GetName().EqualsIgnoreCaseAscii( rName ) )
+ {
+ nIndex = i;
+ break;
+ }
+ }
+ return nIndex;
+}
+
+void BasicCollection::CollAdd( SbxArray* pPar_ )
+{
+ USHORT nCount = pPar_->Count();
+ if( nCount < 2 || nCount > 5 )
+ {
+ SetError( SbxERR_WRONG_ARGS );
+ return;
+ }
+
+ SbxVariable* pItem = pPar_->Get(1);
+ if( pItem )
+ {
+ int nNextIndex;
+ if( nCount < 4 )
+ {
+ nNextIndex = xItemArray->Count();
+ }
+ else
+ {
+ SbxVariable* pBefore = pPar_->Get(3);
+ if( nCount == 5 )
+ {
+ if( !( pBefore->IsErr() || ( pBefore->GetType() == SbxEMPTY ) ) )
+ {
+ SetError( SbERR_BAD_ARGUMENT );
+ return;
+ }
+ SbxVariable* pAfter = pPar_->Get(4);
+ INT32 nAfterIndex = implGetIndex( pAfter );
+ if( nAfterIndex == -1 )
+ {
+ SetError( SbERR_BAD_ARGUMENT );
+ return;
+ }
+ nNextIndex = nAfterIndex + 1;
+ }
+ else // if( nCount == 4 )
+ {
+ INT32 nBeforeIndex = implGetIndex( pBefore );
+ if( nBeforeIndex == -1 )
+ {
+ SetError( SbERR_BAD_ARGUMENT );
+ return;
+ }
+ nNextIndex = nBeforeIndex;
+ }
+ }
+
+ SbxVariableRef pNewItem = new SbxVariable( *pItem );
+ if( nCount >= 3 )
+ {
+ SbxVariable* pKey = pPar_->Get(2);
+ if( !( pKey->IsErr() || ( pKey->GetType() == SbxEMPTY ) ) )
+ {
+ if( pKey->GetType() != SbxSTRING )
+ {
+ SetError( SbERR_BAD_ARGUMENT );
+ return;
+ }
+ String aKey = pKey->GetString();
+ if( implGetIndexForName( aKey ) != -1 )
+ {
+ SetError( SbERR_BAD_ARGUMENT );
+ return;
+ }
+ pNewItem->SetName( aKey );
+ }
+ }
+ pNewItem->SetFlag( SBX_READWRITE );
+ xItemArray->Insert32( pNewItem, nNextIndex );
+ }
+ else
+ {
+ SetError( SbERR_BAD_ARGUMENT );
+ return;
+ }
+}
+
+void BasicCollection::CollItem( SbxArray* pPar_ )
+{
+ if( pPar_->Count() != 2 )
+ {
+ SetError( SbxERR_WRONG_ARGS );
+ return;
+ }
+ SbxVariable* pRes = NULL;
+ SbxVariable* p = pPar_->Get( 1 );
+ INT32 nIndex = implGetIndex( p );
+ if( nIndex >= 0 && nIndex < (INT32)xItemArray->Count32() )
+ pRes = xItemArray->Get32( nIndex );
+ if( !pRes )
+ SetError( SbERR_BAD_ARGUMENT );
+ else
+ *(pPar_->Get(0)) = *pRes;
+}
+
+void BasicCollection::CollRemove( SbxArray* pPar_ )
+{
+ if( pPar_ == NULL || pPar_->Count() != 2 )
+ {
+ SetError( SbxERR_WRONG_ARGS );
+ return;
+ }
+
+ SbxVariable* p = pPar_->Get( 1 );
+ INT32 nIndex = implGetIndex( p );
+ if( nIndex >= 0 && nIndex < (INT32)xItemArray->Count32() )
+ xItemArray->Remove32( nIndex );
+ else
+ SetError( SbERR_BAD_ARGUMENT );
+}
+
diff --git a/basic/source/classes/sb.src b/basic/source/classes/sb.src
new file mode 100644
index 000000000000..73cc1c3a0b2c
--- /dev/null
+++ b/basic/source/classes/sb.src
@@ -0,0 +1,681 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#define __RSC
+#ifndef _ERRCODE_HXX //autogen
+#include <tools/errcode.hxx>
+#endif
+#include "sb.hrc"
+#include <basic/sberrors.hxx>
+
+Resource RID_BASIC_START
+{
+ String SbERR_SYNTAX & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "Syntax error." ;
+ };
+ String SbERR_NO_GOSUB & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "Return without Gosub." ;
+ };
+ String SbERR_REDO_FROM_START & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "Incorrect entry; please retry." ;
+ };
+ String SbERR_BAD_ARGUMENT & ERRCODE_RES_MASK
+ {
+ /* ### ACHTUNG: Neuer Text in Resource? Ungltiger Prozeduraufruf : Ungltiger Prozeduraufruf */
+ Text [ en-US ] = "Invalid procedure call." ;
+ };
+ String SbERR_MATH_OVERFLOW & ERRCODE_RES_MASK
+ {
+ /* ### ACHTUNG: Neuer Text in Resource? berlauf : berlauf */
+ Text [ en-US ] = "Overflow." ;
+ };
+ String SbERR_NO_MEMORY & ERRCODE_RES_MASK
+ {
+ /* ### ACHTUNG: Neuer Text in Resource? Nicht gengend Speicher : Nicht gengend Speicher */
+ Text [ en-US ] = "Not enough memory." ;
+ };
+ String SbERR_ALREADY_DIM & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "Array already dimensioned." ;
+ };
+ String SbERR_OUT_OF_RANGE & ERRCODE_RES_MASK
+ {
+ /* ### ACHTUNG: Neuer Text in Resource? Index auerhalb des definierten Bereichs : Index auerhalb des definierten Bereichs */
+ Text [ en-US ] = "Index out of defined range." ;
+ };
+ String SbERR_DUPLICATE_DEF & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "Duplicate definition." ;
+ };
+ String SbERR_ZERODIV & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "Division by zero." ;
+ };
+ String SbERR_VAR_UNDEFINED & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "Variable not defined." ;
+ };
+ String SbERR_CONVERSION & ERRCODE_RES_MASK
+ {
+ /* ### ACHTUNG: Neuer Text in Resource? Datentypen unvertrglich : Datentypen unvertrglich */
+ Text [ en-US ] = "Data type mismatch." ;
+ };
+ String SbERR_BAD_PARAMETER & ERRCODE_RES_MASK
+ {
+ /* ### ACHTUNG: Neuer Text in Resource? Ungltiger Parameter : Ungltiger Parameter */
+ Text [ en-US ] = "Invalid parameter." ;
+ };
+ String SbERR_USER_ABORT & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "Process interrupted by user." ;
+ };
+ String SbERR_BAD_RESUME & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "Resume without error." ;
+ };
+ String SbERR_STACK_OVERFLOW & ERRCODE_RES_MASK
+ {
+ /* ### ACHTUNG: Neuer Text in Resource? Nicht gengend Stapelspeicher : Nicht gengend Stapelspeicher */
+ Text [ en-US ] = "Not enough stack memory." ;
+ };
+ String SbERR_PROC_UNDEFINED & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "Sub-procedure or function procedure not defined." ;
+ };
+ String SbERR_BAD_DLL_LOAD & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "Error loading DLL file." ;
+ };
+ String SbERR_BAD_DLL_CALL & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "Wrong DLL call convention." ;
+ };
+ String SbERR_INTERNAL_ERROR & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "Internal error $(ARG1)." ;
+ };
+ String SbERR_BAD_CHANNEL & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "Invalid file name or file number." ;
+ };
+ String SbERR_FILE_NOT_FOUND & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "File not found." ;
+ };
+ String SbERR_BAD_FILE_MODE & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "Incorrect file mode." ;
+ };
+ String SbERR_FILE_ALREADY_OPEN & ERRCODE_RES_MASK
+ {
+ /* ### ACHTUNG: Neuer Text in Resource? Datei bereits geffnet : Datei bereits geffnet */
+ Text [ en-US ] = "File already open." ;
+ };
+ String SbERR_IO_ERROR & ERRCODE_RES_MASK
+ {
+ /* ### ACHTUNG: Neuer Text in Resource? Gerte-E/A-Fehler : Gerte-E/A-Fehler */
+ Text [ en-US ] = "Device I/O error." ;
+ };
+ String SbERR_FILE_EXISTS & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "File already exists." ;
+ };
+ String SbERR_BAD_RECORD_LENGTH & ERRCODE_RES_MASK
+ {
+ /* ### ACHTUNG: Neuer Text in Resource? Falsche Datensatzlnge : Falsche Datensatzlnge */
+ Text [ en-US ] = "Incorrect record length." ;
+ };
+ String SbERR_DISK_FULL & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "Disk or hard drive full." ;
+ };
+ String SbERR_READ_PAST_EOF & ERRCODE_RES_MASK
+ {
+ /* ### ACHTUNG: Neuer Text in Resource? Lesen ber das Ende der Datei hinaus : Lesen ber das Ende der Datei hinaus */
+ Text [ en-US ] = "Reading exceeds EOF." ;
+ };
+ String SbERR_BAD_RECORD_NUMBER & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "Incorrect record number." ;
+ };
+ String SbERR_TOO_MANY_FILES & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "Too many files." ;
+ };
+ String SbERR_NO_DEVICE & ERRCODE_RES_MASK
+ {
+ /* ### ACHTUNG: Neuer Text in Resource? Gert nicht verfgbar : Gert nicht verfgbar */
+ Text [ en-US ] = "Device not available." ;
+ };
+ String SbERR_ACCESS_DENIED & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "Access denied." ;
+ };
+ String SbERR_NOT_READY & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "Disk not ready." ;
+ };
+ String SbERR_NOT_IMPLEMENTED & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "Not implemented." ;
+ };
+ String SbERR_DIFFERENT_DRIVE & ERRCODE_RES_MASK
+ {
+ /* ### ACHTUNG: Neuer Text in Resource? Umbenennen auf verschiedenen Laufwerken nicht mglich : Umbenennen auf verschiedenen Laufwerken nicht mglich */
+ Text [ en-US ] = "Renaming on different drives impossible." ;
+ };
+ String SbERR_ACCESS_ERROR & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "Path/File access error." ;
+ };
+ String SbERR_PATH_NOT_FOUND & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "Path not found." ;
+ };
+ String SbERR_NO_OBJECT & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "Object variable not set." ;
+ };
+ String SbERR_BAD_PATTERN & ERRCODE_RES_MASK
+ {
+ /* ### ACHTUNG: Neuer Text in Resource? Zeichenfolgenmuster unzulssig : Zeichenfolgenmuster unzulssig */
+ Text [ en-US ] = "Invalid string pattern." ;
+ };
+ String SBERR_IS_NULL & ERRCODE_RES_MASK
+ {
+ /* ### ACHTUNG: Neuer Text in Resource? Verwendung von Null unzulssig : Verwendung von Null unzulssig */
+ Text [ en-US ] = "Use of zero not permitted." ;
+ };
+ String SbERR_DDE_ERROR & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "DDE Error." ;
+ };
+ String SbERR_DDE_WAITINGACK & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "Awaiting response to DDE connection." ;
+ };
+ String SbERR_DDE_OUTOFCHANNELS & ERRCODE_RES_MASK
+ {
+ /* ### ACHTUNG: Neuer Text in Resource? Keine freien DDE-Kanle : Keine freien DDE-Kanle */
+ Text [ en-US ] = "No DDE channels available." ;
+ };
+ String SbERR_DDE_NO_RESPONSE & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "No application responded to DDE connect initiation." ;
+ };
+ String SbERR_DDE_MULT_RESPONSES & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "Too many applications responded to DDE connect initiation." ;
+ };
+ String SbERR_DDE_CHANNEL_LOCKED & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "DDE channel locked." ;
+ };
+ String SbERR_DDE_NOTPROCESSED & ERRCODE_RES_MASK
+ {
+ /* ### ACHTUNG: Neuer Text in Resource? Fremdapplikation kann DDE-Operation nicht ausfhren : Fremdapplikation kann DDE-Operation nicht ausfhren */
+ Text [ en-US ] = "External application cannot execute DDE operation." ;
+ };
+ String SbERR_DDE_TIMEOUT & ERRCODE_RES_MASK
+ {
+ /* ### ACHTUNG: Neuer Text in Resource? Zeitberschreitung whrend des Wartens auf DDE-Antwort : Zeitberschreitung whrend des Wartens auf DDE-Antwort */
+ Text [ en-US ] = "Timeout while waiting for DDE response." ;
+ };
+ String SbERR_DDE_USER_INTERRUPT & ERRCODE_RES_MASK
+ {
+ /* ### ACHTUNG: Neuer Text in Resource? Benutzer drckte ESCAPE whrend der DDE-Operation : Benutzer drckte ESCAPE whrend der DDE-Operation */
+ Text [ en-US ] = "User pressed ESCAPE during DDE operation." ;
+ };
+ String SbERR_DDE_BUSY & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "External application busy." ;
+ };
+ String SbERR_DDE_NO_DATA & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "DDE operation without data." ;
+ };
+ String SbERR_DDE_WRONG_DATA_FORMAT & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "Data are in wrong format." ;
+ };
+ String SbERR_DDE_PARTNER_QUIT & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "External application has been terminated." ;
+ };
+ String SbERR_DDE_CONV_CLOSED & ERRCODE_RES_MASK
+ {
+ /* ### ACHTUNG: Neuer Text in Resource? DDE-Verbindung ist unterbrochen oder gendert worden : DDE-Verbindung ist unterbrochen oder gendert worden */
+ Text [ en-US ] = "DDE connection interrupted or modified." ;
+ };
+ String SbERR_DDE_NO_CHANNEL & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "DDE method invoked with no channel open." ;
+ };
+ String SbERR_DDE_INVALID_LINK & ERRCODE_RES_MASK
+ {
+ /* ### ACHTUNG: Neuer Text in Resource? Ungltiges DDE-Linkformat : Ungltiges DDE-Linkformat */
+ Text [ en-US ] = "Invalid DDE link format." ;
+ };
+ String SbERR_DDE_QUEUE_OVERFLOW & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "DDE message has been lost." ;
+ };
+ String SbERR_DDE_LINK_ALREADY_EST & ERRCODE_RES_MASK
+ {
+ /* ### ACHTUNG: Neuer Text in Resource? Paste Link bereits durchgefhrt : Paste Link bereits durchgefhrt */
+ Text [ en-US ] = "Paste link already performed." ;
+ };
+ String SbERR_DDE_LINK_INV_TOPIC & ERRCODE_RES_MASK
+ {
+ /* ### ACHTUNG: Neuer Text in Resource? LinkMode kann wegen ungltigen Link-Topics nicht gesetzt werden : LinkMode kann wegen ungltigen Link-Topics nicht gesetzt werden */
+ Text [ en-US ] = "Link mode cannot be set due to invalid link topic." ;
+ };
+ String SbERR_DDE_DLL_NOT_FOUND & ERRCODE_RES_MASK
+ {
+ /* ### ACHTUNG: Neuer Text in Resource? Fr DDE wird DDEML.DLL bentigt : Fr DDE wird DDEML.DLL bentigt */
+ Text [ en-US ] = "DDE requires the DDEML.DLL file." ;
+ };
+ String SbERR_CANNOT_LOAD & ERRCODE_RES_MASK
+ {
+ /* ### ACHTUNG: Neuer Text in Resource? Das Modul kann nicht geladen werden, ungltiges Format : Das Modul kann nicht geladen werden, ungltiges Format */
+ Text [ en-US ] = "Module cannot be loaded; invalid format." ;
+ };
+ String SbERR_BAD_INDEX & ERRCODE_RES_MASK
+ {
+ /* ### ACHTUNG: Neuer Text in Resource? Ungltiger Objektindex : Ungltiger Objektindex */
+ Text [ en-US ] = "Invalid object index." ;
+ };
+ String SbERR_NO_ACTIVE_OBJECT & ERRCODE_RES_MASK
+ {
+ /* ### ACHTUNG: Neuer Text in Resource? Objekt ist nicht verfgbar : Objekt ist nicht verfgbar */
+ Text [ en-US ] = "Object is not available." ;
+ };
+ String SbERR_BAD_PROP_VALUE & ERRCODE_RES_MASK
+ {
+ /* ### ACHTUNG: Neuer Text in Resource? Falscher Wert fr Eigenschaft : Falscher Wert fr Eigenschaft */
+ Text [ en-US ] = "Incorrect property value." ;
+ };
+ String SbERR_PROP_READONLY & ERRCODE_RES_MASK
+ {
+ /* ### ACHTUNG: Neuer Text in Resource? Eigenschaft ist schreibgeschtzt : Eigenschaft ist schreibgeschtzt */
+ Text [ en-US ] = "This property is read-only." ;
+ };
+ String SbERR_PROP_WRITEONLY & ERRCODE_RES_MASK
+ {
+ /* ### ACHTUNG: Neuer Text in Resource? Eigenschaft ist lesegeschtzt : Eigenschaft ist lesegeschtzt */
+ Text [ en-US ] = "This property is write only." ;
+ };
+ String SbERR_INVALID_OBJECT & ERRCODE_RES_MASK
+ {
+ /* ### ACHTUNG: Neuer Text in Resource? Ungltige Objektreferenz : Ungltige Objektreferenz */
+ Text [ en-US ] = "Invalid object reference." ;
+ };
+ String SbERR_NO_METHOD & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "Property or method not found: $(ARG1)." ;
+ };
+ String SbERR_NEEDS_OBJECT & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "Object required." ;
+ };
+ String SbERR_INVALID_USAGE_OBJECT & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "Invalid use of an object." ;
+ };
+ String SbERR_NO_OLE & ERRCODE_RES_MASK
+ {
+ /* ### ACHTUNG: Neuer Text in Resource? OLE-Automatisierung wird von diesem Objekt nicht untersttzt : OLE-Automatisierung wird von diesem Objekt nicht untersttzt */
+ Text [ en-US ] = "OLE Automation is not supported by this object." ;
+ };
+ String SbERR_BAD_METHOD & ERRCODE_RES_MASK
+ {
+ /* ### ACHTUNG: Neuer Text in Resource? Objekt untersttzt diese Eigenschaft oder Methode nicht : Objekt untersttzt diese Eigenschaft oder Methode nicht */
+ Text [ en-US ] = "This property or method is not supported by the object." ;
+ };
+ String SbERR_OLE_ERROR & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "OLE Automation Error." ;
+ };
+ String SbERR_BAD_ACTION & ERRCODE_RES_MASK
+ {
+ /* ### ACHTUNG: Neuer Text in Resource? Diese Aktion wird vom angegebenen Objekt nicht untersttzt : Diese Aktion wird vom angegebenen Objekt nicht untersttzt */
+ Text [ en-US ] = "This action is not supported by given object." ;
+ };
+ String SbERR_NO_NAMED_ARGS & ERRCODE_RES_MASK
+ {
+ /* ### ACHTUNG: Neuer Text in Resource? Benannte Argumente werden vom angegebenen Objekt nicht untersttzt : Benannte Argumente werden vom angegebenen Objekt nicht untersttzt */
+ Text [ en-US ] = "Named arguments are not supported by given object." ;
+ };
+ String SbERR_BAD_LOCALE & ERRCODE_RES_MASK
+ {
+ /* ### ACHTUNG: Neuer Text in Resource? Das aktuelle Gebietsschema wird vom angegebenen Objekt nicht untersttzt : Das aktuelle Gebietsschema wird vom angegebenen Objekt nicht untersttzt */
+ Text [ en-US ] = "The current locale setting is not supported by the given object." ;
+ };
+ String SbERR_NAMED_NOT_FOUND & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "Named argument not found." ;
+ };
+ String SbERR_NOT_OPTIONAL & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "Argument is not optional." ;
+ };
+ String SbERR_WRONG_ARGS & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "Invalid number of arguments." ;
+ };
+ String SbERR_NOT_A_COLL & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "Object is not a list." ;
+ };
+ String SbERR_BAD_ORDINAL & ERRCODE_RES_MASK
+ {
+ /* ### ACHTUNG: Neuer Text in Resource? Ordnungszahl ungltig : Ordnungszahl ungltig */
+ Text [ en-US ] = "Invalid ordinal number." ;
+ };
+ String SbERR_DLLPROC_NOT_FOUND & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "Specified DLL function not found." ;
+ };
+ String SbERR_BAD_CLIPBD_FORMAT & ERRCODE_RES_MASK
+ {
+ /* ### ACHTUNG: Neuer Text in Resource? Ungltiges Clipboard-Format : Ungltiges Clipboard-Format */
+ Text [ en-US ] = "Invalid clipboard format." ;
+ };
+ String SbERR_PROPERTY_NOT_FOUND & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "Object does not have this property." ;
+ };
+ String SbERR_METHOD_NOT_FOUND & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "Object does not have this method." ;
+ };
+ String SbERR_ARG_MISSING & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "Required argument lacking." ;
+ };
+ String SbERR_BAD_NUMBER_OF_ARGS & ERRCODE_RES_MASK
+ {
+ /* ### ACHTUNG: Neuer Text in Resource? Ungltige Anzahl von Argumenten : Ungltige Anzahl von Argumenten */
+ Text [ en-US ] = "Invalid number of arguments." ;
+ };
+ String SbERR_METHOD_FAILED & ERRCODE_RES_MASK
+ {
+ /* ### ACHTUNG: Neuer Text in Resource? Fehler in Ausfhrung einer Methode : Fehler in Ausfhrung einer Methode */
+ Text [ en-US ] = "Error executing a method." ;
+ };
+ String SbERR_SETPROP_FAILED & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "Unable to set property." ;
+ };
+ String SbERR_GETPROP_FAILED & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "Unable to determine property." ;
+ };
+ // Compiler errors. These are not runtime errors.
+ String SbERR_UNEXPECTED & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "Unexpected symbol: $(ARG1)." ;
+ };
+ String SbERR_EXPECTED & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "Expected: $(ARG1)." ;
+ };
+ String SbERR_SYMBOL_EXPECTED & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "Symbol expected." ;
+ };
+ String SbERR_VAR_EXPECTED & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "Variable expected." ;
+ };
+ String SbERR_LABEL_EXPECTED & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "Label expected." ;
+ };
+ String SbERR_LVALUE_EXPECTED & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "Value cannot be applied." ;
+ };
+ String SbERR_VAR_DEFINED & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "Variable $(ARG1) already defined." ;
+ };
+ String SbERR_PROC_DEFINED & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "Sub procedure or function procedure $(ARG1) already defined." ;
+ };
+ String SbERR_LABEL_DEFINED & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "Label $(ARG1) already defined." ;
+ };
+ String SbERR_UNDEF_VAR & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "Variable $(ARG1) not found." ;
+ };
+ String SbERR_UNDEF_ARRAY & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "Array or procedure $(ARG1) not found." ;
+ };
+ String SbERR_UNDEF_PROC & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "Procedure $(ARG1) not found." ;
+ };
+ String SbERR_UNDEF_LABEL & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "Label $(ARG1) undefined." ;
+ };
+ String SbERR_UNDEF_TYPE & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "Unknown data type $(ARG1)." ;
+ };
+ String SbERR_BAD_EXIT & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "Exit $(ARG1) expected." ;
+ };
+ String SbERR_BAD_BLOCK & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "Statement block still open: $(ARG1) missing." ;
+ };
+ String SbERR_BAD_BRACKETS & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "Parentheses do not match." ;
+ };
+ String SbERR_BAD_DECLARATION & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "Symbol $(ARG1) already defined differently." ;
+ };
+ String SbERR_BAD_PARAMETERS & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "Parameters do not correspond to procedure." ;
+ };
+ String SbERR_BAD_CHAR_IN_NUMBER & ERRCODE_RES_MASK
+ {
+ /* ### ACHTUNG: Neuer Text in Resource? Ungltiges Zeichen in Zahl : Ungltiges Zeichen in Zahl */
+ Text [ en-US ] = "Invalid character in number." ;
+ };
+ String SbERR_MUST_HAVE_DIMS & ERRCODE_RES_MASK
+ {
+ /* ### ACHTUNG: Neuer Text in Resource? Array mu dimensioniert werden : Array mu dimensioniert werden */
+ Text [ en-US ] = "Array must be dimensioned." ;
+ };
+ String SbERR_NO_IF & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "Else/Endif without If." ;
+ };
+ String SbERR_NOT_IN_SUBR & ERRCODE_RES_MASK
+ {
+ /* ### ACHTUNG: Neuer Text in Resource? $(ARG1) innerhalb einer Prozedur unzulssig : $(ARG1) innerhalb einer Prozedur unzulssig */
+ Text [ en-US ] = "$(ARG1) not allowed within a procedure." ;
+ };
+ String SbERR_NOT_IN_MAIN & ERRCODE_RES_MASK
+ {
+ /* ### ACHTUNG: Neuer Text in Resource? $(ARG1) auerhalb einer Prozedur unzulssig : $(ARG1) auerhalb einer Prozedur unzulssig */
+ Text [ en-US ] = "$(ARG1) not allowed outside a procedure." ;
+ };
+ String SbERR_WRONG_DIMS & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "Dimension specifications do not match." ;
+ };
+ String SbERR_BAD_OPTION & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "Unknown option: $(ARG1)." ;
+ };
+ String SbERR_CONSTANT_REDECLARED & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "Constant $(ARG1) redefined." ;
+ };
+ String SbERR_PROG_TOO_LARGE & ERRCODE_RES_MASK
+ {
+ /* ### ACHTUNG: Neuer Text in Resource? Programm ist zu gro : Programm ist zu gro */
+ Text [ en-US ] = "Program too large." ;
+ };
+ String SbERR_NO_STRINGS_ARRAYS & ERRCODE_RES_MASK
+ {
+ /* ### ACHTUNG: Neuer Text in Resource? Strings oder Arrays unzulssig : Strings oder Arrays unzulssig */
+ Text [ en-US ] = "Strings or arrays not permitted." ;
+ };
+ String ERRCODE_BASIC_EXCEPTION & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "An exception occurred $(ARG1)." ;
+ };
+ String ERRCODE_BASIC_ARRAY_FIX & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "This array is fixed or temporarily locked." ;
+ };
+ String ERRCODE_BASIC_STRING_OVERFLOW & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "Out of string space." ;
+ };
+ String ERRCODE_BASIC_EXPR_TOO_COMPLEX & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "Expression Too Complex." ;
+ };
+ String ERRCODE_BASIC_OPER_NOT_PERFORM & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "Can't perform requested operation." ;
+ };
+ String ERRCODE_BASIC_TOO_MANY_DLL & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "Too many DLL application clients." ;
+ };
+ String ERRCODE_BASIC_LOOP_NOT_INIT & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "For loop not initialized." ;
+ };
+ String ERRCODE_BASIC_COMPAT & ERRCODE_RES_MASK
+ {
+ Text [ en-US ] = "$(ARG1)" ;
+ };
+};
+ // Hinweis: IDS_SBERR_TERMINATED = IDS_SBERR_START+2000.
+String IDS_SBERR_TERMINATED
+{
+ Text [ en-US ] = "The macro running has been interrupted" ;
+};
+String IDS_SBERR_STOREREF
+{
+ Text [ en-US ] = "Reference will not be saved: ";
+};
+String ERRCODE_BASMGR_LIBLOAD & ERRCODE_RES_MASK
+{
+ /* ### ACHTUNG: Neuer Text in Resource? Fehler beim Laden der Bibliothek '$(ARG1)' : Fehler beim Laden der Bibliothek ''$(ARG1)'' */
+ /* ### ACHTUNG: Neuer Text in Resource? Fehler beim Laden der Bibliothek '$(ARG1)' : Fehler beim Laden der Bibliothek ''$(ARG1) */
+ /* ### ACHTUNG: Neuer Text in Resource? Fehler beim Laden der Bibliothek '$(ARG1)' : Fehler beim Laden der Bibliothek ''$(ARG1) */
+ /* ### ACHTUNG: Neuer Text in Resource? Fehler beim Laden der Bibliothek '$(ARG1)' : Fehler beim Laden der Bibliothek ''$(ARG1)'' */
+ Text [ en-US ] = "Error loading library '$(ARG1)'." ;
+};
+String ERRCODE_BASMGR_LIBSAVE & ERRCODE_RES_MASK
+{
+ /* ### ACHTUNG: Neuer Text in Resource? Fehler beim Speichern der Bibliothek: '$(ARG1)' : Fehler beim Speichern der Bibliothek: ''$(ARG1)'' */
+ /* ### ACHTUNG: Neuer Text in Resource? Fehler beim Speichern der Bibliothek: '$(ARG1)' : Fehler beim Speichern der Bibliothek: ''$(ARG1) */
+ /* ### ACHTUNG: Neuer Text in Resource? Fehler beim Speichern der Bibliothek: '$(ARG1)' : Fehler beim Speichern der Bibliothek: ''$(ARG1) */
+ /* ### ACHTUNG: Neuer Text in Resource? Fehler beim Speichern der Bibliothek: '$(ARG1)' : Fehler beim Speichern der Bibliothek: ''$(ARG1)'' */
+ Text [ en-US ] = "Error saving library: '$(ARG1)'." ;
+};
+String ERRCODE_BASMGR_MGROPEN & ERRCODE_RES_MASK
+{
+ /* ### ACHTUNG: Neuer Text in Resource? Das BASIC aus der Datei '$(ARG1)' konnte nicht initialisiert werden : Das BASIC aus der Datei ''$(ARG1)'' konnte nicht initialisiert werden */
+ /* ### ACHTUNG: Neuer Text in Resource? Das BASIC aus der Datei '$(ARG1)' konnte nicht initialisiert werden : Das BASIC aus der Datei ''$(ARG1)'' konnte nicht initialisiert werden */
+ /* ### ACHTUNG: Neuer Text in Resource? Das BASIC aus der Datei '$(ARG1)' konnte nicht initialisiert werden : Das BASIC aus der Datei ''$(ARG1)'' konnte nicht initialisiert werden */
+ /* ### ACHTUNG: Neuer Text in Resource? Das BASIC aus der Datei '$(ARG1)' konnte nicht initialisiert werden : Das BASIC aus der Datei ''$(ARG1)'' konnte nicht initialisiert werden */
+ Text [ en-US ] = "The BASIC from the file '$(ARG1)' could not be initialized." ;
+};
+String ERRCODE_BASMGR_MGRSAVE & ERRCODE_RES_MASK
+{
+ Text [ en-US ] = "Error saving BASIC: '$(ARG1)'." ;
+};
+String ERRCODE_BASMGR_REMOVELIB & ERRCODE_RES_MASK
+{
+ Text [ en-US ] = "Error removing library." ;
+};
+String ERRCODE_BASMGR_UNLOADLIB & ERRCODE_RES_MASK
+{
+ Text [ en-US ] = "The library could not be removed from memory." ;
+};
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/basic/source/classes/sbintern.cxx b/basic/source/classes/sbintern.cxx
new file mode 100644
index 000000000000..55b5f7f371ce
--- /dev/null
+++ b/basic/source/classes/sbintern.cxx
@@ -0,0 +1,82 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+#include <tools/shl.hxx>
+
+#include "sbintern.hxx"
+#include "sbunoobj.hxx"
+#include "token.hxx" // Tokenizer
+#include "symtbl.hxx" // Symbolverwaltung
+#include "parser.hxx" // Parser
+#include "codegen.hxx" // Code-Generator
+#include <basic/basmgr.hxx>
+
+SV_IMPL_PTRARR(SbErrorStack, SbErrorStackEntry*)
+
+SbiGlobals* GetSbData()
+{
+ SbiGlobals** pp = (SbiGlobals**) ::GetAppData( SHL_SBC );
+ SbiGlobals* p = *pp;
+ if( !p )
+ p = *pp = new SbiGlobals;
+ return p;
+}
+
+SbiGlobals::SbiGlobals()
+{
+ pInst = NULL;
+ pMod = NULL;
+ pSbFac= NULL;
+ pUnoFac = NULL;
+ pTypeFac = NULL;
+ pOLEFac = NULL;
+ pCompMod = NULL; // JSM
+ nInst = 0;
+ nCode = 0;
+ nLine = 0;
+ nCol1 = nCol2 = 0;
+ bCompiler = FALSE;
+ bGlobalInitErr = FALSE;
+ bRunInit = FALSE;
+ eLanguageMode = SB_LANG_BASIC;
+ pErrStack = NULL;
+ pTransliterationWrapper = NULL;
+ bBlockCompilerError = FALSE;
+ pAppBasMgr = NULL;
+ pMSOMacroRuntimLib = NULL;
+}
+
+SbiGlobals::~SbiGlobals()
+{
+ delete pErrStack;
+ delete pSbFac;
+ delete pUnoFac;
+ delete pTransliterationWrapper;
+}
+
diff --git a/basic/source/classes/sbunoobj.cxx b/basic/source/classes/sbunoobj.cxx
new file mode 100755
index 000000000000..c9123b06341b
--- /dev/null
+++ b/basic/source/classes/sbunoobj.cxx
@@ -0,0 +1,4434 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+//#include <stl_queue.h>
+#include <vos/mutex.hxx>
+#include <vcl/svapp.hxx>
+#ifndef _TOOLERR_HXX //autogen
+#include <tools/errcode.hxx>
+#endif
+#include <svl/hint.hxx>
+
+#include <cppuhelper/implbase1.hxx>
+#include <cppuhelper/exc_hlp.hxx>
+#include <cppuhelper/typeprovider.hxx>
+#include <cppuhelper/extract.hxx>
+#include <comphelper/processfactory.hxx>
+
+#include <rtl/ustrbuf.hxx>
+#include <rtl/strbuf.hxx>
+
+#include <com/sun/star/script/ArrayWrapper.hpp>
+
+#include <com/sun/star/uno/XComponentContext.hpp>
+#include <com/sun/star/uno/DeploymentException.hpp>
+#include <com/sun/star/lang/XTypeProvider.hpp>
+#include <com/sun/star/lang/XSingleServiceFactory.hpp>
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+#include <com/sun/star/lang/XServiceInfo.hpp>
+#include <com/sun/star/beans/PropertyAttribute.hpp>
+#include <com/sun/star/beans/PropertyConcept.hpp>
+#include <com/sun/star/beans/MethodConcept.hpp>
+#include <com/sun/star/beans/XPropertySet.hpp>
+#include <com/sun/star/script/BasicErrorException.hpp>
+#include <com/sun/star/script/XAllListener.hpp>
+#include <com/sun/star/script/XInvocationAdapterFactory.hpp>
+#include <com/sun/star/script/XTypeConverter.hpp>
+#include <com/sun/star/script/XDefaultProperty.hpp>
+#include <com/sun/star/container/XNameAccess.hpp>
+#include <com/sun/star/container/XHierarchicalNameAccess.hpp>
+#include <com/sun/star/reflection/XIdlArray.hpp>
+#include <com/sun/star/reflection/XIdlReflection.hpp>
+#include <com/sun/star/reflection/XIdlClassProvider.hpp>
+#include <com/sun/star/reflection/XServiceConstructorDescription.hpp>
+#include <com/sun/star/bridge/oleautomation/NamedArgument.hpp>
+#include <com/sun/star/bridge/oleautomation/Date.hpp>
+#include <com/sun/star/bridge/oleautomation/Decimal.hpp>
+#include <com/sun/star/bridge/oleautomation/Currency.hpp>
+#include <com/sun/star/bridge/oleautomation/XAutomationObject.hpp>
+
+
+using com::sun::star::uno::Reference;
+using namespace com::sun::star::uno;
+using namespace com::sun::star::lang;
+using namespace com::sun::star::reflection;
+using namespace com::sun::star::beans;
+using namespace com::sun::star::script;
+using namespace com::sun::star::container;
+using namespace com::sun::star::bridge;
+using namespace cppu;
+
+
+#include<basic/sbstar.hxx>
+#include<basic/sbuno.hxx>
+#include<basic/sberrors.hxx>
+#include<sbunoobj.hxx>
+#include"sbjsmod.hxx"
+#include<basic/basmgr.hxx>
+#include<sbintern.hxx>
+#include<runtime.hxx>
+
+#include<math.h>
+#include <hash_map>
+#include <com/sun/star/reflection/XTypeDescriptionEnumerationAccess.hpp>
+#include <com/sun/star/reflection/XConstantsTypeDescription.hpp>
+
+TYPEINIT1(SbUnoMethod,SbxMethod)
+TYPEINIT1(SbUnoProperty,SbxProperty)
+TYPEINIT1(SbUnoObject,SbxObject)
+TYPEINIT1(SbUnoClass,SbxObject)
+TYPEINIT1(SbUnoService,SbxObject)
+TYPEINIT1(SbUnoServiceCtor,SbxMethod)
+TYPEINIT1(SbUnoSingleton,SbxObject)
+
+typedef WeakImplHelper1< XAllListener > BasicAllListenerHelper;
+
+// Flag, um immer ueber Invocation zu gehen
+//#define INVOCATION_ONLY
+
+
+// Identifier fuer die dbg_-Properies als Strings anlegen
+static char const ID_DBG_SUPPORTEDINTERFACES[] = "Dbg_SupportedInterfaces";
+static char const ID_DBG_PROPERTIES[] = "Dbg_Properties";
+static char const ID_DBG_METHODS[] = "Dbg_Methods";
+
+static ::rtl::OUString aSeqLevelStr( RTL_CONSTASCII_USTRINGPARAM("[]") );
+static ::rtl::OUString defaultNameSpace( RTL_CONSTASCII_USTRINGPARAM("ooo.vba") );
+
+// Gets the default property for an uno object. Note: There is some
+// redirection built in. The property name specifies the name
+// of the default property.
+
+bool SbUnoObject::getDefaultPropName( SbUnoObject* pUnoObj, String& sDfltProp )
+{
+ bool result = false;
+ Reference< XDefaultProperty> xDefaultProp( pUnoObj->maTmpUnoObj, UNO_QUERY );
+ if ( xDefaultProp.is() )
+ {
+ sDfltProp = xDefaultProp->getDefaultPropertyName();
+ if ( sDfltProp.Len() )
+ result = true;
+ }
+ return result;
+}
+
+SbxVariable* getDefaultProp( SbxVariable* pRef )
+{
+ SbxVariable* pDefaultProp = NULL;
+ if ( pRef->GetType() == SbxOBJECT )
+ {
+ SbxObject* pObj = PTR_CAST(SbxObject,(SbxVariable*) pRef);
+ if ( !pObj )
+ {
+ SbxBase* pObjVarObj = pRef->GetObject();
+ pObj = PTR_CAST(SbxObject,pObjVarObj);
+ }
+ if ( pObj && pObj->ISA(SbUnoObject) )
+ {
+ SbUnoObject* pUnoObj = PTR_CAST(SbUnoObject,(SbxObject*)pObj);
+ pDefaultProp = pUnoObj->GetDfltProperty();
+ }
+ }
+ return pDefaultProp;
+}
+
+Reference< XComponentContext > getComponentContext_Impl( void )
+{
+ static Reference< XComponentContext > xContext;
+
+ // Haben wir schon CoreReflection, sonst besorgen
+ if( !xContext.is() )
+ {
+ Reference< XMultiServiceFactory > xFactory = comphelper::getProcessServiceFactory();
+ Reference< XPropertySet > xProps( xFactory, UNO_QUERY );
+ OSL_ASSERT( xProps.is() );
+ if (xProps.is())
+ {
+ xProps->getPropertyValue(
+ ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("DefaultContext") ) ) >>= xContext;
+ OSL_ASSERT( xContext.is() );
+ }
+ }
+ return xContext;
+}
+
+// CoreReflection statisch speichern
+Reference< XIdlReflection > getCoreReflection_Impl( void )
+{
+ static Reference< XIdlReflection > xCoreReflection;
+
+ // Haben wir schon CoreReflection, sonst besorgen
+ if( !xCoreReflection.is() )
+ {
+ Reference< XComponentContext > xContext = getComponentContext_Impl();
+ if( xContext.is() )
+ {
+ xContext->getValueByName(
+ ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("/singletons/com.sun.star.reflection.theCoreReflection") ) )
+ >>= xCoreReflection;
+ OSL_ENSURE( xCoreReflection.is(), "### CoreReflection singleton not accessable!?" );
+ }
+ if( !xCoreReflection.is() )
+ {
+ throw DeploymentException(
+ ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("/singletons/com.sun.star.reflection.theCoreReflection singleton not accessable") ),
+ Reference< XInterface >() );
+ }
+ }
+ return xCoreReflection;
+}
+
+// CoreReflection statisch speichern
+Reference< XHierarchicalNameAccess > getCoreReflection_HierarchicalNameAccess_Impl( void )
+{
+ static Reference< XHierarchicalNameAccess > xCoreReflection_HierarchicalNameAccess;
+
+ if( !xCoreReflection_HierarchicalNameAccess.is() )
+ {
+ Reference< XIdlReflection > xCoreReflection = getCoreReflection_Impl();
+ if( xCoreReflection.is() )
+ {
+ xCoreReflection_HierarchicalNameAccess =
+ Reference< XHierarchicalNameAccess >( xCoreReflection, UNO_QUERY );
+ }
+ }
+ return xCoreReflection_HierarchicalNameAccess;
+}
+
+// Hold TypeProvider statically
+Reference< XHierarchicalNameAccess > getTypeProvider_Impl( void )
+{
+ static Reference< XHierarchicalNameAccess > xAccess;
+
+ // Haben wir schon CoreReflection, sonst besorgen
+ if( !xAccess.is() )
+ {
+ Reference< XComponentContext > xContext = getComponentContext_Impl();
+ if( xContext.is() )
+ {
+ xContext->getValueByName(
+ ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("/singletons/com.sun.star.reflection.theTypeDescriptionManager") ) )
+ >>= xAccess;
+ OSL_ENSURE( xAccess.is(), "### TypeDescriptionManager singleton not accessable!?" );
+ }
+ if( !xAccess.is() )
+ {
+ throw DeploymentException(
+ ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM
+ ("/singletons/com.sun.star.reflection.theTypeDescriptionManager singleton not accessable") ),
+ Reference< XInterface >() );
+ }
+ }
+ return xAccess;
+}
+
+// Hold TypeConverter statically
+Reference< XTypeConverter > getTypeConverter_Impl( void )
+{
+ static Reference< XTypeConverter > xTypeConverter;
+
+ // Haben wir schon CoreReflection, sonst besorgen
+ if( !xTypeConverter.is() )
+ {
+ Reference< XComponentContext > xContext = getComponentContext_Impl();
+ if( xContext.is() )
+ {
+ Reference<XMultiComponentFactory> xSMgr = xContext->getServiceManager();
+ xTypeConverter = Reference<XTypeConverter>(
+ xSMgr->createInstanceWithContext(
+ ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.script.Converter")),
+ xContext ), UNO_QUERY );
+ }
+ if( !xTypeConverter.is() )
+ {
+ throw DeploymentException(
+ ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM
+ ("com.sun.star.script.Converter service not accessable") ),
+ Reference< XInterface >() );
+ }
+ }
+ return xTypeConverter;
+}
+
+
+// #111851 factory function to create an OLE object
+SbUnoObject* createOLEObject_Impl( const String& aType )
+{
+ static Reference< XMultiServiceFactory > xOLEFactory;
+ static bool bNeedsInit = true;
+
+ if( bNeedsInit )
+ {
+ bNeedsInit = false;
+
+ Reference< XComponentContext > xContext = getComponentContext_Impl();
+ if( xContext.is() )
+ {
+ Reference<XMultiComponentFactory> xSMgr = xContext->getServiceManager();
+ xOLEFactory = Reference<XMultiServiceFactory>(
+ xSMgr->createInstanceWithContext(
+ ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.bridge.OleObjectFactory")),
+ xContext ), UNO_QUERY );
+ }
+ }
+
+ SbUnoObject* pUnoObj = NULL;
+ if( xOLEFactory.is() )
+ {
+ // some type names available in VBA can not be directly used in COM
+ ::rtl::OUString aOLEType = aType;
+ if ( aOLEType.equals( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "SAXXMLReader30" ) ) ) )
+ aOLEType = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Msxml2.SAXXMLReader.3.0" ) );
+
+ Reference< XInterface > xOLEObject = xOLEFactory->createInstance( aOLEType );
+ if( xOLEObject.is() )
+ {
+ Any aAny;
+ aAny <<= xOLEObject;
+ pUnoObj = new SbUnoObject( aType, aAny );
+ }
+ }
+ return pUnoObj;
+}
+
+
+namespace
+{
+ void lcl_indent( ::rtl::OUStringBuffer& _inout_rBuffer, sal_Int32 _nLevel )
+ {
+ while ( _nLevel-- > 0 )
+ _inout_rBuffer.appendAscii( " " );
+ }
+}
+
+void implAppendExceptionMsg( ::rtl::OUStringBuffer& _inout_rBuffer, const Exception& _e, const ::rtl::OUString& _rExceptionType, sal_Int32 _nLevel )
+{
+ _inout_rBuffer.appendAscii( "\n" );
+ lcl_indent( _inout_rBuffer, _nLevel );
+ _inout_rBuffer.appendAscii( "Type: " );
+
+ if ( _rExceptionType.getLength() == 0 )
+ _inout_rBuffer.appendAscii( "Unknown" );
+ else
+ _inout_rBuffer.append( _rExceptionType );
+
+ _inout_rBuffer.appendAscii( "\n" );
+ lcl_indent( _inout_rBuffer, _nLevel );
+ _inout_rBuffer.appendAscii( "Message: " );
+ _inout_rBuffer.append( _e.Message );
+
+}
+
+// Fehlermeldungs-Message bei Exception zusammenbauen
+::rtl::OUString implGetExceptionMsg( const Exception& e, const ::rtl::OUString& aExceptionType_ )
+{
+ ::rtl::OUStringBuffer aMessageBuf;
+ implAppendExceptionMsg( aMessageBuf, e, aExceptionType_, 0 );
+ return aMessageBuf.makeStringAndClear();
+}
+
+String implGetExceptionMsg( const Any& _rCaughtException )
+{
+ OSL_PRECOND( _rCaughtException.getValueTypeClass() == TypeClass_EXCEPTION, "implGetExceptionMsg: illegal argument!" );
+ if ( _rCaughtException.getValueTypeClass() != TypeClass_EXCEPTION )
+ return String();
+
+ return implGetExceptionMsg( *static_cast< const Exception* >( _rCaughtException.getValue() ), _rCaughtException.getValueTypeName() );
+}
+
+Any convertAny( const Any& rVal, const Type& aDestType )
+{
+ Any aConvertedVal;
+ Reference< XTypeConverter > xConverter = getTypeConverter_Impl();
+ try
+ {
+ aConvertedVal = xConverter->convertTo( rVal, aDestType );
+ }
+ catch( const IllegalArgumentException& )
+ {
+ StarBASIC::Error( ERRCODE_BASIC_EXCEPTION,
+ implGetExceptionMsg( ::cppu::getCaughtException() ) );
+ return aConvertedVal;
+ }
+ catch( CannotConvertException& e2 )
+ {
+ String aCannotConvertExceptionName
+ ( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.lang.IllegalArgumentException" ) );
+ StarBASIC::Error( ERRCODE_BASIC_EXCEPTION,
+ implGetExceptionMsg( e2, aCannotConvertExceptionName ) );
+ return aConvertedVal;
+ }
+ return aConvertedVal;
+}
+
+
+// #105565 Special Object to wrap a strongly typed Uno Any
+TYPEINIT1(SbUnoAnyObject,SbxObject)
+
+
+// TODO: Spaeter auslagern
+Reference<XIdlClass> TypeToIdlClass( const Type& rType )
+{
+ // void als Default-Klasse eintragen
+ Reference<XIdlClass> xRetClass;
+ typelib_TypeDescription * pTD = 0;
+ rType.getDescription( &pTD );
+
+ if( pTD )
+ {
+ ::rtl::OUString sOWName( pTD->pTypeName );
+ Reference< XIdlReflection > xRefl = getCoreReflection_Impl();
+ xRetClass = xRefl->forName( sOWName );
+ }
+ return xRetClass;
+}
+
+// Exception type unknown
+template< class EXCEPTION >
+String implGetExceptionMsg( const EXCEPTION& e )
+{
+ return implGetExceptionMsg( e, ::getCppuType( &e ).getTypeName() );
+}
+
+// Error-Message fuer WrappedTargetExceptions
+String implGetWrappedMsg( const WrappedTargetException& e )
+{
+ String aMsg;
+ Any aWrappedAny = e.TargetException;
+ Type aExceptionType = aWrappedAny.getValueType();
+
+ // Really an Exception?
+ if( aExceptionType.getTypeClass() == TypeClass_EXCEPTION )
+ {
+ Exception& e_ = *( (Exception*)aWrappedAny.getValue() );
+ aMsg = implGetExceptionMsg( e_, String( aExceptionType.getTypeName() ) );
+ }
+ // Otherwise use WrappedTargetException itself
+ else
+ {
+ aMsg = implGetExceptionMsg( e );
+ }
+
+ return aMsg;
+}
+
+void implHandleBasicErrorException( BasicErrorException& e )
+{
+ SbError nError = StarBASIC::GetSfxFromVBError( (USHORT)e.ErrorCode );
+ StarBASIC::Error( nError, e.ErrorMessageArgument );
+}
+
+void implHandleWrappedTargetException( const Any& _rWrappedTargetException )
+{
+ Any aExamine( _rWrappedTargetException );
+
+ // completely strip the first InvocationTargetException, its error message isn't of any
+ // interest to the user, it just says something like "invoking the UNO method went wrong.".
+ InvocationTargetException aInvocationError;
+ if ( aExamine >>= aInvocationError )
+ aExamine = aInvocationError.TargetException;
+
+ BasicErrorException aBasicError;
+
+ SbError nError( ERRCODE_BASIC_EXCEPTION );
+ ::rtl::OUStringBuffer aMessageBuf;
+
+ // strip any other WrappedTargetException instances, but this time preserve the error messages.
+ WrappedTargetException aWrapped;
+ sal_Int32 nLevel = 0;
+ while ( aExamine >>= aWrapped )
+ {
+ // special handling for BasicErrorException errors
+ if ( aWrapped.TargetException >>= aBasicError )
+ {
+ nError = StarBASIC::GetSfxFromVBError( (USHORT)aBasicError.ErrorCode );
+ aMessageBuf.append( aBasicError.ErrorMessageArgument );
+ aExamine.clear();
+ break;
+ }
+
+ // append this round's message
+ implAppendExceptionMsg( aMessageBuf, aWrapped, aExamine.getValueTypeName(), nLevel );
+ if ( aWrapped.TargetException.getValueTypeClass() == TypeClass_EXCEPTION )
+ // there is a next chain element
+ aMessageBuf.appendAscii( "\nTargetException:" );
+
+ // next round
+ aExamine = aWrapped.TargetException;
+ ++nLevel;
+ }
+
+ if ( aExamine.getValueTypeClass() == TypeClass_EXCEPTION )
+ {
+ // the last element in the chain is still an exception, but no WrappedTargetException
+ implAppendExceptionMsg( aMessageBuf, *static_cast< const Exception* >( aExamine.getValue() ), aExamine.getValueTypeName(), nLevel );
+ }
+
+ StarBASIC::Error( nError, aMessageBuf.makeStringAndClear() );
+}
+
+static void implHandleAnyException( const Any& _rCaughtException )
+{
+ BasicErrorException aBasicError;
+ WrappedTargetException aWrappedError;
+
+ if ( _rCaughtException >>= aBasicError )
+ {
+ implHandleBasicErrorException( aBasicError );
+ }
+ else if ( _rCaughtException >>= aWrappedError )
+ {
+ implHandleWrappedTargetException( _rCaughtException );
+ }
+ else
+ {
+ StarBASIC::Error( ERRCODE_BASIC_EXCEPTION, implGetExceptionMsg( _rCaughtException ) );
+ }
+}
+
+// Von Uno nach Sbx wandeln
+SbxDataType unoToSbxType( TypeClass eType )
+{
+ SbxDataType eRetType = SbxVOID;
+
+ switch( eType )
+ {
+ case TypeClass_INTERFACE:
+ case TypeClass_TYPE:
+ case TypeClass_STRUCT:
+ case TypeClass_EXCEPTION: eRetType = SbxOBJECT; break;
+
+ /* folgende Typen lassen wir erstmal weg
+ case TypeClass_SERVICE: break;
+ case TypeClass_CLASS: break;
+ case TypeClass_TYPEDEF: break;
+ case TypeClass_UNION: break;
+ case TypeClass_ARRAY: break;
+ */
+ case TypeClass_ENUM: eRetType = SbxLONG; break;
+ case TypeClass_SEQUENCE:
+ eRetType = (SbxDataType) ( SbxOBJECT | SbxARRAY );
+ break;
+
+ /*
+ case TypeClass_VOID: break;
+ case TypeClass_UNKNOWN: break;
+ */
+
+ case TypeClass_ANY: eRetType = SbxVARIANT; break;
+ case TypeClass_BOOLEAN: eRetType = SbxBOOL; break;
+ case TypeClass_CHAR: eRetType = SbxCHAR; break;
+ case TypeClass_STRING: eRetType = SbxSTRING; break;
+ case TypeClass_FLOAT: eRetType = SbxSINGLE; break;
+ case TypeClass_DOUBLE: eRetType = SbxDOUBLE; break;
+ //case TypeClass_OCTET: break;
+ case TypeClass_BYTE: eRetType = SbxINTEGER; break;
+ //case TypeClass_INT: eRetType = SbxINT; break;
+ case TypeClass_SHORT: eRetType = SbxINTEGER; break;
+ case TypeClass_LONG: eRetType = SbxLONG; break;
+ case TypeClass_HYPER: eRetType = SbxSALINT64; break;
+ //case TypeClass_UNSIGNED_OCTET: break;
+ case TypeClass_UNSIGNED_SHORT: eRetType = SbxUSHORT; break;
+ case TypeClass_UNSIGNED_LONG: eRetType = SbxULONG; break;
+ case TypeClass_UNSIGNED_HYPER: eRetType = SbxSALUINT64;break;
+ //case TypeClass_UNSIGNED_INT: eRetType = SbxUINT; break;
+ //case TypeClass_UNSIGNED_BYTE: eRetType = SbxUSHORT; break;
+ default: break;
+ }
+ return eRetType;
+}
+
+SbxDataType unoToSbxType( const Reference< XIdlClass >& xIdlClass )
+{
+ SbxDataType eRetType = SbxVOID;
+ if( xIdlClass.is() )
+ {
+ TypeClass eType = xIdlClass->getTypeClass();
+ eRetType = unoToSbxType( eType );
+ }
+ return eRetType;
+}
+
+static void implSequenceToMultiDimArray( SbxDimArray*& pArray, Sequence< sal_Int32 >& indices, Sequence< sal_Int32 >& sizes, const Any& aValue, sal_Int32& dimension, sal_Bool bIsZeroIndex, Type* pType = NULL )
+{
+ Type aType = aValue.getValueType();
+ TypeClass eTypeClass = aType.getTypeClass();
+
+ sal_Int32 indicesIndex = indices.getLength() -1;
+ sal_Int32 dimCopy = dimension;
+
+ if ( eTypeClass == TypeClass_SEQUENCE )
+ {
+ Reference< XIdlClass > xIdlTargetClass = TypeToIdlClass( aType );
+ Reference< XIdlArray > xIdlArray = xIdlTargetClass->getArray();
+ typelib_TypeDescription * pTD = 0;
+ aType.getDescription( &pTD );
+ Type aElementType( ((typelib_IndirectTypeDescription *)pTD)->pType );
+ ::typelib_typedescription_release( pTD );
+
+ sal_Int32 nLen = xIdlArray->getLen( aValue );
+ for ( sal_Int32 index = 0; index < nLen; ++index )
+ {
+ Any aElementAny = xIdlArray->get( aValue, (UINT32)index );
+ // This detects the dimension were currently processing
+ if ( dimCopy == dimension )
+ {
+ ++dimCopy;
+ if ( sizes.getLength() < dimCopy )
+ {
+ sizes.realloc( sizes.getLength() + 1 );
+ sizes[ sizes.getLength() - 1 ] = nLen;
+ indices.realloc( indices.getLength() + 1 );
+ indicesIndex = indices.getLength() - 1;
+ }
+ }
+
+ if ( bIsZeroIndex )
+ indices[ dimCopy - 1 ] = index;
+ else
+ indices[ dimCopy - 1] = index + 1;
+
+ implSequenceToMultiDimArray( pArray, indices, sizes, aElementAny, dimCopy, bIsZeroIndex, &aElementType );
+ }
+
+ }
+ else
+ {
+ if ( indices.getLength() < 1 )
+ {
+ // Should never ever get here ( indices.getLength()
+ // should equal number of dimensions in the array )
+ // And that should at least be 1 !
+ // #QUESTION is there a better error?
+ StarBASIC::Error( SbERR_INVALID_OBJECT );
+ return;
+ }
+
+ SbxDataType eSbxElementType = unoToSbxType( pType ? pType->getTypeClass() : aValue.getValueTypeClass() );
+ if ( !pArray )
+ {
+ pArray = new SbxDimArray( eSbxElementType );
+ sal_Int32 nIndexLen = indices.getLength();
+
+ // Dimension the array
+ for ( sal_Int32 index = 0; index < nIndexLen; ++index )
+ {
+ if ( bIsZeroIndex )
+ pArray->unoAddDim32( 0, sizes[ index ] - 1);
+ else
+ pArray->unoAddDim32( 1, sizes[ index ] );
+
+ }
+ }
+
+ if ( pArray )
+ {
+ SbxVariableRef xVar = new SbxVariable( eSbxElementType );
+ unoToSbxValue( (SbxVariable*)xVar, aValue );
+
+ sal_Int32* pIndices = indices.getArray();
+ pArray->Put32( (SbxVariable*)xVar, pIndices );
+
+ }
+ }
+}
+
+void unoToSbxValue( SbxVariable* pVar, const Any& aValue )
+{
+ Type aType = aValue.getValueType();
+ TypeClass eTypeClass = aType.getTypeClass();
+ switch( eTypeClass )
+ {
+ case TypeClass_TYPE:
+ {
+ // Map Type to IdlClass
+ Type aType_;
+ aValue >>= aType_;
+ Reference<XIdlClass> xClass = TypeToIdlClass( aType_ );
+ Any aClassAny;
+ aClassAny <<= xClass;
+
+ // SbUnoObject instanzieren
+ String aName;
+ SbUnoObject* pSbUnoObject = new SbUnoObject( aName, aClassAny );
+ SbxObjectRef xWrapper = (SbxObject*)pSbUnoObject;
+
+ // #51475 Wenn das Objekt ungueltig ist null liefern
+ if( pSbUnoObject->getUnoAny().getValueType().getTypeClass() == TypeClass_VOID )
+ {
+ pVar->PutObject( NULL );
+ }
+ else
+ {
+ pVar->PutObject( xWrapper );
+ }
+ }
+ break;
+ // Interfaces und Structs muessen in ein SbUnoObject gewrappt werden
+ case TypeClass_INTERFACE:
+ case TypeClass_STRUCT:
+ case TypeClass_EXCEPTION:
+ {
+ if( eTypeClass == TypeClass_STRUCT )
+ {
+ ArrayWrapper aWrap;
+ if ( (aValue >>= aWrap) )
+ {
+ SbxDimArray* pArray = NULL;
+ Sequence< sal_Int32 > indices;
+ Sequence< sal_Int32 > sizes;
+ sal_Int32 dimension = 0;
+ implSequenceToMultiDimArray( pArray, indices, sizes, aWrap.Array, dimension, aWrap.IsZeroIndex );
+ if ( pArray )
+ {
+ SbxDimArrayRef xArray = pArray;
+ USHORT nFlags = pVar->GetFlags();
+ pVar->ResetFlag( SBX_FIXED );
+ pVar->PutObject( (SbxDimArray*)xArray );
+ pVar->SetFlags( nFlags );
+ }
+ else
+ pVar->PutEmpty();
+ break;
+ }
+ else
+ {
+ SbiInstance* pInst = pINST;
+ if( pInst && pInst->IsCompatibility() )
+ {
+ oleautomation::Date aDate;
+ if( (aValue >>= aDate) )
+ {
+ pVar->PutDate( aDate.Value );
+ break;
+ }
+ else
+ {
+ oleautomation::Decimal aDecimal;
+ if( (aValue >>= aDecimal) )
+ {
+ pVar->PutDecimal( aDecimal );
+ break;
+ }
+ else
+ {
+ oleautomation::Currency aCurrency;
+ if( (aValue >>= aCurrency) )
+ {
+ sal_Int64 nValue64 = aCurrency.Value;
+ SbxINT64 aInt64;
+ aInt64.nHigh =
+ sal::static_int_cast< INT32 >(
+ nValue64 >> 32);
+ aInt64.nLow = (UINT32)( nValue64 & 0xffffffff );
+ pVar->PutCurrency( aInt64 );
+ break;
+ }
+ }
+ }
+ }
+ }
+ }
+ // SbUnoObject instanzieren
+ String aName;
+ SbUnoObject* pSbUnoObject = new SbUnoObject( aName, aValue );
+ //If this is called externally e.g. from the scripting
+ //framework then there is no 'active' runtime the default property will not be set up
+ //only a vba object will have XDefaultProp set anyway so... this
+ //test seems a bit of overkill
+ //if ( SbiRuntime::isVBAEnabled() )
+ {
+ String sDfltPropName;
+
+ if ( SbUnoObject::getDefaultPropName( pSbUnoObject, sDfltPropName ) )
+ pSbUnoObject->SetDfltProperty( sDfltPropName );
+ }
+ SbxObjectRef xWrapper = (SbxObject*)pSbUnoObject;
+
+ // #51475 Wenn das Objekt ungueltig ist null liefern
+ if( pSbUnoObject->getUnoAny().getValueType().getTypeClass() == TypeClass_VOID )
+ {
+ pVar->PutObject( NULL );
+ }
+ else
+ {
+ pVar->PutObject( xWrapper );
+ }
+ }
+ break;
+
+ /* folgende Typen lassen wir erstmal weg
+ case TypeClass_SERVICE: break;
+ case TypeClass_CLASS: break;
+ case TypeClass_TYPEDEF: break;
+ case TypeClass_UNION: break;
+ case TypeClass_ENUM: break;
+ case TypeClass_ARRAY: break;
+ */
+
+ case TypeClass_ENUM:
+ {
+ sal_Int32 nEnum = 0;
+ enum2int( nEnum, aValue );
+ pVar->PutLong( nEnum );
+ }
+ break;
+
+ case TypeClass_SEQUENCE:
+ {
+ Reference< XIdlClass > xIdlTargetClass = TypeToIdlClass( aType );
+ Reference< XIdlArray > xIdlArray = xIdlTargetClass->getArray();
+ sal_Int32 i, nLen = xIdlArray->getLen( aValue );
+
+ typelib_TypeDescription * pTD = 0;
+ aType.getDescription( &pTD );
+ OSL_ASSERT( pTD && pTD->eTypeClass == typelib_TypeClass_SEQUENCE );
+ Type aElementType( ((typelib_IndirectTypeDescription *)pTD)->pType );
+ ::typelib_typedescription_release( pTD );
+
+ // In Basic Array anlegen
+ SbxDimArrayRef xArray;
+ SbxDataType eSbxElementType = unoToSbxType( aElementType.getTypeClass() );
+ xArray = new SbxDimArray( eSbxElementType );
+ if( nLen > 0 )
+ {
+ xArray->unoAddDim32( 0, nLen - 1 );
+
+ // Elemente als Variablen eintragen
+ for( i = 0 ; i < nLen ; i++ )
+ {
+ // Elemente wandeln
+ Any aElementAny = xIdlArray->get( aValue, (UINT32)i );
+ SbxVariableRef xVar = new SbxVariable( eSbxElementType );
+ unoToSbxValue( (SbxVariable*)xVar, aElementAny );
+
+ // Ins Array braten
+ xArray->Put32( (SbxVariable*)xVar, &i );
+ }
+ }
+ else
+ {
+ xArray->unoAddDim( 0, -1 );
+ }
+
+ // Array zurueckliefern
+ USHORT nFlags = pVar->GetFlags();
+ pVar->ResetFlag( SBX_FIXED );
+ pVar->PutObject( (SbxDimArray*)xArray );
+ pVar->SetFlags( nFlags );
+
+ // #54548, Die Parameter duerfen hier nicht weggehauen werden
+ //pVar->SetParameters( NULL );
+ }
+ break;
+
+ /*
+ case TypeClass_VOID: break;
+ case TypeClass_UNKNOWN: break;
+
+ case TypeClass_ANY:
+ {
+ // Any rausholen und konvertieren
+ //Any* pAny = (Any*)aValue.get();
+ //if( pAny )
+ //unoToSbxValue( pVar, *pAny );
+ }
+ break;
+ */
+
+ case TypeClass_BOOLEAN: pVar->PutBool( *(sal_Bool*)aValue.getValue() ); break;
+ case TypeClass_CHAR:
+ {
+ pVar->PutChar( *(sal_Unicode*)aValue.getValue() );
+ break;
+ }
+ case TypeClass_STRING: { ::rtl::OUString val; aValue >>= val; pVar->PutString( String( val ) ); } break;
+ case TypeClass_FLOAT: { float val = 0; aValue >>= val; pVar->PutSingle( val ); } break;
+ case TypeClass_DOUBLE: { double val = 0; aValue >>= val; pVar->PutDouble( val ); } break;
+ //case TypeClass_OCTET: break;
+ case TypeClass_BYTE: { sal_Int8 val = 0; aValue >>= val; pVar->PutInteger( val ); } break;
+ //case TypeClass_INT: break;
+ case TypeClass_SHORT: { sal_Int16 val = 0; aValue >>= val; pVar->PutInteger( val ); } break;
+ case TypeClass_LONG: { sal_Int32 val = 0; aValue >>= val; pVar->PutLong( val ); } break;
+ case TypeClass_HYPER: { sal_Int64 val = 0; aValue >>= val; pVar->PutInt64( val ); } break;
+ //case TypeClass_UNSIGNED_OCTET:break;
+ case TypeClass_UNSIGNED_SHORT: { sal_uInt16 val = 0; aValue >>= val; pVar->PutUShort( val ); } break;
+ case TypeClass_UNSIGNED_LONG: { sal_uInt32 val = 0; aValue >>= val; pVar->PutULong( val ); } break;
+ case TypeClass_UNSIGNED_HYPER: { sal_uInt64 val = 0; aValue >>= val; pVar->PutUInt64( val ); } break;
+ //case TypeClass_UNSIGNED_INT: break;
+ //case TypeClass_UNSIGNED_BYTE: break;
+ default: pVar->PutEmpty(); break;
+ }
+}
+
+// Reflection fuer Sbx-Typen liefern
+Type getUnoTypeForSbxBaseType( SbxDataType eType )
+{
+ Type aRetType = getCppuVoidType();
+ switch( eType )
+ {
+ //case SbxEMPTY: eRet = TypeClass_VOID; break;
+ case SbxNULL: aRetType = ::getCppuType( (const Reference< XInterface > *)0 ); break;
+ case SbxINTEGER: aRetType = ::getCppuType( (sal_Int16*)0 ); break;
+ case SbxLONG: aRetType = ::getCppuType( (sal_Int32*)0 ); break;
+ case SbxSINGLE: aRetType = ::getCppuType( (float*)0 ); break;
+ case SbxDOUBLE: aRetType = ::getCppuType( (double*)0 ); break;
+ case SbxCURRENCY: aRetType = ::getCppuType( (oleautomation::Currency*)0 ); break;
+ case SbxDECIMAL: aRetType = ::getCppuType( (oleautomation::Decimal*)0 ); break;
+ case SbxDATE: {
+ SbiInstance* pInst = pINST;
+ if( pInst && pInst->IsCompatibility() )
+ aRetType = ::getCppuType( (double*)0 );
+ else
+ aRetType = ::getCppuType( (oleautomation::Date*)0 );
+ }
+ break;
+ // case SbxDATE: aRetType = ::getCppuType( (double*)0 ); break;
+ case SbxSTRING: aRetType = ::getCppuType( (::rtl::OUString*)0 ); break;
+ //case SbxOBJECT: break;
+ //case SbxERROR: break;
+ case SbxBOOL: aRetType = ::getCppuType( (sal_Bool*)0 ); break;
+ case SbxVARIANT: aRetType = ::getCppuType( (Any*)0 ); break;
+ //case SbxDATAOBJECT: break;
+ case SbxCHAR: aRetType = ::getCppuType( (sal_Unicode*)0 ); break;
+ case SbxBYTE: aRetType = ::getCppuType( (sal_Int8*)0 ); break;
+ case SbxUSHORT: aRetType = ::getCppuType( (sal_uInt16*)0 ); break;
+ case SbxULONG: aRetType = ::getCppuType( (sal_uInt32*)0 ); break;
+ //case SbxLONG64: break;
+ //case SbxULONG64: break;
+ // Maschinenabhaengige zur Sicherheit auf Hyper abbilden
+ case SbxINT: aRetType = ::getCppuType( (sal_Int32*)0 ); break;
+ case SbxUINT: aRetType = ::getCppuType( (sal_uInt32*)0 ); break;
+ //case SbxVOID: break;
+ //case SbxHRESULT: break;
+ //case SbxPOINTER: break;
+ //case SbxDIMARRAY: break;
+ //case SbxCARRAY: break;
+ //case SbxUSERDEF: break;
+ //case SbxLPSTR: break;
+ //case SbxLPWSTR: break;
+ //case SbxCoreSTRING: break;
+ default: break;
+ }
+ return aRetType;
+}
+
+// Konvertierung von Sbx nach Uno ohne bekannte Zielklasse fuer TypeClass_ANY
+Type getUnoTypeForSbxValue( SbxValue* pVal )
+{
+ Type aRetType = getCppuVoidType();
+ if( !pVal )
+ return aRetType;
+
+ // SbxType nach Uno wandeln
+ SbxDataType eBaseType = pVal->SbxValue::GetType();
+ if( eBaseType == SbxOBJECT )
+ {
+ SbxBaseRef xObj = (SbxBase*)pVal->GetObject();
+ if( !xObj )
+ {
+ // #109936 No error any more
+ // StarBASIC::Error( SbERR_INVALID_OBJECT );
+ aRetType = getCppuType( static_cast<Reference<XInterface> *>(0) );
+ return aRetType;
+ }
+
+ if( xObj->ISA(SbxDimArray) )
+ {
+ SbxBase* pObj = (SbxBase*)xObj;
+ SbxDimArray* pArray = (SbxDimArray*)pObj;
+
+ short nDims = pArray->GetDims();
+ Type aElementType = getUnoTypeForSbxBaseType( (SbxDataType)(pArray->GetType() & 0xfff) );
+ TypeClass eElementTypeClass = aElementType.getTypeClass();
+
+ // Normal case: One dimensional array
+ sal_Int32 nLower, nUpper;
+ if( nDims == 1 && pArray->GetDim32( 1, nLower, nUpper ) )
+ {
+ if( eElementTypeClass == TypeClass_VOID || eElementTypeClass == TypeClass_ANY )
+ {
+ // Wenn alle Elemente des Arrays vom gleichen Typ sind, wird
+ // der genommen, sonst wird das ganze als Any-Sequence betrachtet
+ sal_Bool bNeedsInit = sal_True;
+
+ INT32 nSize = nUpper - nLower + 1;
+ INT32 nIdx = nLower;
+ for( INT32 i = 0 ; i < nSize ; i++,nIdx++ )
+ {
+ SbxVariableRef xVar = pArray->Get32( &nIdx );
+ Type aType = getUnoTypeForSbxValue( (SbxVariable*)xVar );
+ if( bNeedsInit )
+ {
+ if( aType.getTypeClass() == TypeClass_VOID )
+ {
+ // #88522
+ // if only first element is void: different types -> []any
+ // if all elements are void: []void is not allowed -> []any
+ aElementType = getCppuType( (Any*)0 );
+ break;
+ }
+ aElementType = aType;
+ bNeedsInit = sal_False;
+ }
+ else if( aElementType != aType )
+ {
+ // Verschiedene Typen -> AnySequence
+ aElementType = getCppuType( (Any*)0 );
+ break;
+ }
+ }
+ }
+
+ ::rtl::OUString aSeqTypeName( aSeqLevelStr );
+ aSeqTypeName += aElementType.getTypeName();
+ aRetType = Type( TypeClass_SEQUENCE, aSeqTypeName );
+ }
+ // #i33795 Map also multi dimensional arrays to corresponding sequences
+ else if( nDims > 1 )
+ {
+ if( eElementTypeClass == TypeClass_VOID || eElementTypeClass == TypeClass_ANY )
+ {
+ // For this check the array's dim structure does not matter
+ UINT32 nFlatArraySize = pArray->Count32();
+
+ sal_Bool bNeedsInit = sal_True;
+ for( UINT32 i = 0 ; i < nFlatArraySize ; i++ )
+ {
+ SbxVariableRef xVar = pArray->SbxArray::Get32( i );
+ Type aType = getUnoTypeForSbxValue( (SbxVariable*)xVar );
+ if( bNeedsInit )
+ {
+ if( aType.getTypeClass() == TypeClass_VOID )
+ {
+ // if only first element is void: different types -> []any
+ // if all elements are void: []void is not allowed -> []any
+ aElementType = getCppuType( (Any*)0 );
+ break;
+ }
+ aElementType = aType;
+ bNeedsInit = sal_False;
+ }
+ else if( aElementType != aType )
+ {
+ // Verschiedene Typen -> AnySequence
+ aElementType = getCppuType( (Any*)0 );
+ break;
+ }
+ }
+ }
+
+ ::rtl::OUString aSeqTypeName;
+ for( short iDim = 0 ; iDim < nDims ; iDim++ )
+ aSeqTypeName += aSeqLevelStr;
+ aSeqTypeName += aElementType.getTypeName();
+ aRetType = Type( TypeClass_SEQUENCE, aSeqTypeName );
+ }
+ }
+ // Kein Array, sondern...
+ else if( xObj->ISA(SbUnoObject) )
+ {
+ aRetType = ((SbUnoObject*)(SbxBase*)xObj)->getUnoAny().getValueType();
+ }
+ // SbUnoAnyObject?
+ else if( xObj->ISA(SbUnoAnyObject) )
+ {
+ aRetType = ((SbUnoAnyObject*)(SbxBase*)xObj)->getValue().getValueType();
+ }
+ // Sonst ist es ein Nicht-Uno-Basic-Objekt -> default==void liefern
+ }
+ // Kein Objekt, Basistyp konvertieren
+ else
+ {
+ aRetType = getUnoTypeForSbxBaseType( eBaseType );
+ }
+ return aRetType;
+}
+
+// Deklaration Konvertierung von Sbx nach Uno mit bekannter Zielklasse
+Any sbxToUnoValue( SbxVariable* pVar, const Type& rType, Property* pUnoProperty = NULL );
+
+// Konvertierung von Sbx nach Uno ohne bekannte Zielklasse fuer TypeClass_ANY
+Any sbxToUnoValueImpl( SbxVariable* pVar, bool bBlockConversionToSmallestType = false )
+{
+ SbxDataType eBaseType = pVar->SbxValue::GetType();
+ if( eBaseType == SbxOBJECT )
+ {
+ SbxBaseRef xObj = (SbxBase*)pVar->GetObject();
+ if( xObj.Is() )
+ {
+ if( xObj->ISA(SbUnoAnyObject) )
+ return ((SbUnoAnyObject*)(SbxBase*)xObj)->getValue();
+ if( xObj->ISA(SbClassModuleObject) )
+ {
+ Any aRetAny;
+ SbClassModuleObject* pClassModuleObj = (SbClassModuleObject*)(SbxBase*)xObj;
+ SbModule* pClassModule = pClassModuleObj->getClassModule();
+ if( pClassModule->createCOMWrapperForIface( aRetAny, pClassModuleObj ) )
+ return aRetAny;
+ }
+ }
+ }
+
+ Type aType = getUnoTypeForSbxValue( pVar );
+ TypeClass eType = aType.getTypeClass();
+
+ if( !bBlockConversionToSmallestType )
+ {
+ // #79615 Choose "smallest" represention for int values
+ // because up cast is allowed, downcast not
+ switch( eType )
+ {
+ case TypeClass_FLOAT:
+ case TypeClass_DOUBLE:
+ {
+ double d = pVar->GetDouble();
+ if( d == floor( d ) )
+ {
+ if( d >= -128 && d <= 127 )
+ aType = ::getCppuType( (sal_Int8*)0 );
+ else if( d >= SbxMININT && d <= SbxMAXINT )
+ aType = ::getCppuType( (sal_Int16*)0 );
+ else if( d >= -SbxMAXLNG && d <= SbxMAXLNG )
+ aType = ::getCppuType( (sal_Int32*)0 );
+ }
+ break;
+ }
+ case TypeClass_SHORT:
+ {
+ sal_Int16 n = pVar->GetInteger();
+ if( n >= -128 && n <= 127 )
+ aType = ::getCppuType( (sal_Int8*)0 );
+ break;
+ }
+ case TypeClass_LONG:
+ {
+ sal_Int32 n = pVar->GetLong();
+ if( n >= -128 && n <= 127 )
+ aType = ::getCppuType( (sal_Int8*)0 );
+ else if( n >= SbxMININT && n <= SbxMAXINT )
+ aType = ::getCppuType( (sal_Int16*)0 );
+ break;
+ }
+ case TypeClass_UNSIGNED_SHORT:
+ {
+ sal_uInt16 n = pVar->GetUShort();
+ if( n <= 255 )
+ aType = ::getCppuType( (sal_uInt8*)0 );
+ break;
+ }
+ case TypeClass_UNSIGNED_LONG:
+ {
+ sal_uInt32 n = pVar->GetLong();
+ if( n <= 255 )
+ aType = ::getCppuType( (sal_uInt8*)0 );
+ else if( n <= SbxMAXUINT )
+ aType = ::getCppuType( (sal_uInt16*)0 );
+ break;
+ }
+ default: break;
+ }
+ }
+
+ return sbxToUnoValue( pVar, aType );
+}
+
+
+
+// Helper function for StepREDIMP
+static Any implRekMultiDimArrayToSequence( SbxDimArray* pArray,
+ const Type& aElemType, short nMaxDimIndex, short nActualDim,
+ sal_Int32* pActualIndices, sal_Int32* pLowerBounds, sal_Int32* pUpperBounds )
+{
+ sal_Int32 nSeqLevel = nMaxDimIndex - nActualDim + 1;
+ ::rtl::OUString aSeqTypeName;
+ sal_Int32 i;
+ for( i = 0 ; i < nSeqLevel ; i++ )
+ aSeqTypeName += aSeqLevelStr;
+
+ aSeqTypeName += aElemType.getTypeName();
+ Type aSeqType( TypeClass_SEQUENCE, aSeqTypeName );
+
+ // Create Sequence instance
+ Any aRetVal;
+ Reference< XIdlClass > xIdlTargetClass = TypeToIdlClass( aSeqType );
+ xIdlTargetClass->createObject( aRetVal );
+
+ // Alloc sequence according to array bounds
+ sal_Int32 nUpper = pUpperBounds[nActualDim];
+ sal_Int32 nLower = pLowerBounds[nActualDim];
+ sal_Int32 nSeqSize = nUpper - nLower + 1;
+ Reference< XIdlArray > xArray = xIdlTargetClass->getArray();
+ xArray->realloc( aRetVal, nSeqSize );
+
+ sal_Int32& ri = pActualIndices[nActualDim];
+
+ for( ri = nLower,i = 0 ; ri <= nUpper ; ri++,i++ )
+ {
+ Any aElementVal;
+
+ if( nActualDim < nMaxDimIndex )
+ {
+ aElementVal = implRekMultiDimArrayToSequence( pArray, aElemType,
+ nMaxDimIndex, nActualDim + 1, pActualIndices, pLowerBounds, pUpperBounds );
+ }
+ else
+ {
+ SbxVariable* pSource = pArray->Get32( pActualIndices );
+ aElementVal = sbxToUnoValue( pSource, aElemType );
+ }
+
+ try
+ {
+ // In die Sequence uebernehmen
+ xArray->set( aRetVal, i, aElementVal );
+ }
+ catch( const IllegalArgumentException& )
+ {
+ StarBASIC::Error( ERRCODE_BASIC_EXCEPTION,
+ implGetExceptionMsg( ::cppu::getCaughtException() ) );
+ }
+ catch (IndexOutOfBoundsException&)
+ {
+ StarBASIC::Error( SbERR_OUT_OF_RANGE );
+ }
+ }
+ return aRetVal;
+}
+
+// Map old interface
+Any sbxToUnoValue( SbxVariable* pVar )
+{
+ return sbxToUnoValueImpl( pVar );
+}
+
+// Konvertierung von Sbx nach Uno mit bekannter Zielklasse
+Any sbxToUnoValue( SbxVariable* pVar, const Type& rType, Property* pUnoProperty )
+{
+ Any aRetVal;
+
+ // #94560 No conversion of empty/void for MAYBE_VOID properties
+ if( pUnoProperty && pUnoProperty->Attributes & PropertyAttribute::MAYBEVOID )
+ {
+ if( pVar->IsEmpty() )
+ return aRetVal;
+ }
+
+ SbxDataType eBaseType = pVar->SbxValue::GetType();
+ if( eBaseType == SbxOBJECT )
+ {
+ SbxBaseRef xObj = (SbxBase*)pVar->GetObject();
+ if( xObj.Is() && xObj->ISA(SbUnoAnyObject) )
+ {
+ return ((SbUnoAnyObject*)(SbxBase*)xObj)->getValue();
+ }
+ }
+
+ TypeClass eType = rType.getTypeClass();
+ switch( eType )
+ {
+ case TypeClass_INTERFACE:
+ case TypeClass_STRUCT:
+ case TypeClass_EXCEPTION:
+ {
+ Reference< XIdlClass > xIdlTargetClass = TypeToIdlClass( rType );
+
+ // Null-Referenz?
+ if( pVar->IsNull() && eType == TypeClass_INTERFACE )
+ {
+ Reference< XInterface > xRef;
+ ::rtl::OUString aClassName = xIdlTargetClass->getName();
+ Type aClassType( xIdlTargetClass->getTypeClass(), aClassName.getStr() );
+ aRetVal.setValue( &xRef, aClassType );
+ }
+ else
+ {
+ // #112368 Special conversion for Decimal, Currency and Date
+ if( eType == TypeClass_STRUCT )
+ {
+ SbiInstance* pInst = pINST;
+ if( pInst && pInst->IsCompatibility() )
+ {
+ if( rType == ::getCppuType( (oleautomation::Decimal*)0 ) )
+ {
+ oleautomation::Decimal aDecimal;
+ pVar->fillAutomationDecimal( aDecimal );
+ aRetVal <<= aDecimal;
+ break;
+ }
+ else if( rType == ::getCppuType( (oleautomation::Currency*)0 ) )
+ {
+ SbxINT64 aInt64 = pVar->GetCurrency();
+ oleautomation::Currency aCurrency;
+ sal_Int64& rnValue64 = aCurrency.Value;
+ rnValue64 = aInt64.nHigh;
+ rnValue64 <<= 32;
+ rnValue64 |= aInt64.nLow;
+ aRetVal <<= aCurrency;
+ break;
+ }
+ else if( rType == ::getCppuType( (oleautomation::Date*)0 ) )
+ {
+ oleautomation::Date aDate;
+ aDate.Value = pVar->GetDate();
+ aRetVal <<= aDate;
+ break;
+ }
+ }
+ }
+
+ SbxBaseRef pObj = (SbxBase*)pVar->GetObject();
+ if( pObj && pObj->ISA(SbUnoObject) )
+ {
+ aRetVal = ((SbUnoObject*)(SbxBase*)pObj)->getUnoAny();
+ }
+ else
+ {
+ // #109936 NULL object -> NULL XInterface
+ Reference<XInterface> xInt;
+ aRetVal <<= xInt;
+ }
+ }
+ }
+ break;
+
+ /* folgende Typen lassen wir erstmal weg
+ case TypeClass_SERVICE: break;
+ case TypeClass_CLASS: break;
+ case TypeClass_TYPEDEF: break;
+ case TypeClass_UNION: break;
+ case TypeClass_ENUM: break;
+ case TypeClass_ARRAY: break;
+ */
+
+ // Array -> Sequence
+ case TypeClass_ENUM:
+ {
+ aRetVal = int2enum( pVar->GetLong(), rType );
+ }
+ break;
+
+ case TypeClass_SEQUENCE:
+ {
+ SbxBaseRef xObj = (SbxBase*)pVar->GetObject();
+ if( xObj && xObj->ISA(SbxDimArray) )
+ {
+ SbxBase* pObj = (SbxBase*)xObj;
+ SbxDimArray* pArray = (SbxDimArray*)pObj;
+
+ short nDims = pArray->GetDims();
+
+ // Normal case: One dimensional array
+ sal_Int32 nLower, nUpper;
+ if( nDims == 1 && pArray->GetDim32( 1, nLower, nUpper ) )
+ {
+ sal_Int32 nSeqSize = nUpper - nLower + 1;
+
+ // Instanz der geforderten Sequence erzeugen
+ Reference< XIdlClass > xIdlTargetClass = TypeToIdlClass( rType );
+ xIdlTargetClass->createObject( aRetVal );
+ Reference< XIdlArray > xArray = xIdlTargetClass->getArray();
+ xArray->realloc( aRetVal, nSeqSize );
+
+ // Element-Type
+ ::rtl::OUString aClassName = xIdlTargetClass->getName();
+ typelib_TypeDescription * pSeqTD = 0;
+ typelib_typedescription_getByName( &pSeqTD, aClassName.pData );
+ OSL_ASSERT( pSeqTD );
+ Type aElemType( ((typelib_IndirectTypeDescription *)pSeqTD)->pType );
+ // Reference< XIdlClass > xElementClass = TypeToIdlClass( aElemType );
+
+ // Alle Array-Member umwandeln und eintragen
+ sal_Int32 nIdx = nLower;
+ for( sal_Int32 i = 0 ; i < nSeqSize ; i++,nIdx++ )
+ {
+ SbxVariableRef xVar = pArray->Get32( &nIdx );
+
+ // Wert von Sbx nach Uno wandeln
+ Any aAnyValue = sbxToUnoValue( (SbxVariable*)xVar, aElemType );
+
+ try
+ {
+ // In die Sequence uebernehmen
+ xArray->set( aRetVal, i, aAnyValue );
+ }
+ catch( const IllegalArgumentException& )
+ {
+ StarBASIC::Error( ERRCODE_BASIC_EXCEPTION,
+ implGetExceptionMsg( ::cppu::getCaughtException() ) );
+ }
+ catch (IndexOutOfBoundsException&)
+ {
+ StarBASIC::Error( SbERR_OUT_OF_RANGE );
+ }
+ }
+ }
+ // #i33795 Map also multi dimensional arrays to corresponding sequences
+ else if( nDims > 1 )
+ {
+ // Element-Type
+ typelib_TypeDescription * pSeqTD = 0;
+ Type aCurType( rType );
+ sal_Int32 nSeqLevel = 0;
+ Type aElemType;
+ do
+ {
+ ::rtl::OUString aTypeName = aCurType.getTypeName();
+ typelib_typedescription_getByName( &pSeqTD, aTypeName.pData );
+ OSL_ASSERT( pSeqTD );
+ if( pSeqTD->eTypeClass == typelib_TypeClass_SEQUENCE )
+ {
+ aCurType = Type( ((typelib_IndirectTypeDescription *)pSeqTD)->pType );
+ nSeqLevel++;
+ }
+ else
+ {
+ aElemType = aCurType;
+ break;
+ }
+ }
+ while( true );
+
+ if( nSeqLevel == nDims )
+ {
+ sal_Int32* pLowerBounds = new sal_Int32[nDims];
+ sal_Int32* pUpperBounds = new sal_Int32[nDims];
+ sal_Int32* pActualIndices = new sal_Int32[nDims];
+ for( short i = 1 ; i <= nDims ; i++ )
+ {
+ sal_Int32 lBound, uBound;
+ pArray->GetDim32( i, lBound, uBound );
+
+ short j = i - 1;
+ pActualIndices[j] = pLowerBounds[j] = lBound;
+ pUpperBounds[j] = uBound;
+ }
+
+ aRetVal = implRekMultiDimArrayToSequence( pArray, aElemType,
+ nDims - 1, 0, pActualIndices, pLowerBounds, pUpperBounds );
+
+ delete[] pUpperBounds;
+ delete[] pLowerBounds;
+ delete[] pActualIndices;
+ }
+ }
+ }
+ }
+ break;
+
+ /*
+ case TypeClass_VOID: break;
+ case TypeClass_UNKNOWN: break;
+ */
+
+ // Bei Any die Klassen-unabhaengige Konvertierungs-Routine nutzen
+ case TypeClass_ANY:
+ {
+ aRetVal = sbxToUnoValueImpl( pVar );
+ }
+ break;
+
+ case TypeClass_BOOLEAN:
+ {
+ sal_Bool b = pVar->GetBool();
+ aRetVal.setValue( &b, getBooleanCppuType() );
+ break;
+ }
+ case TypeClass_CHAR:
+ {
+ sal_Unicode c = pVar->GetChar();
+ aRetVal.setValue( &c , getCharCppuType() );
+ break;
+ }
+ case TypeClass_STRING: aRetVal <<= pVar->GetOUString(); break;
+ case TypeClass_FLOAT: aRetVal <<= pVar->GetSingle(); break;
+ case TypeClass_DOUBLE: aRetVal <<= pVar->GetDouble(); break;
+ //case TypeClass_OCTET: break;
+
+ case TypeClass_BYTE:
+ {
+ sal_Int16 nVal = pVar->GetInteger();
+ sal_Bool bOverflow = sal_False;
+ if( nVal < -128 )
+ {
+ bOverflow = sal_True;
+ nVal = -128;
+ }
+ else if( nVal > 127 )
+ {
+ bOverflow = sal_True;
+ nVal = 127;
+ }
+ if( bOverflow )
+ StarBASIC::Error( ERRCODE_BASIC_MATH_OVERFLOW );
+
+ sal_Int8 nByteVal = (sal_Int8)nVal;
+ aRetVal <<= nByteVal;
+ break;
+ }
+ //case TypeClass_INT: break;
+ case TypeClass_SHORT: aRetVal <<= (sal_Int16)( pVar->GetInteger() ); break;
+ case TypeClass_LONG: aRetVal <<= (sal_Int32)( pVar->GetLong() ); break;
+ case TypeClass_HYPER: aRetVal <<= (sal_Int64)( pVar->GetInt64() ); break;
+ //case TypeClass_UNSIGNED_OCTET:break;
+ case TypeClass_UNSIGNED_SHORT: aRetVal <<= (sal_uInt16)( pVar->GetUShort() ); break;
+ case TypeClass_UNSIGNED_LONG: aRetVal <<= (sal_uInt32)( pVar->GetULong() ); break;
+ case TypeClass_UNSIGNED_HYPER: aRetVal <<= (sal_uInt64)( pVar->GetUInt64() ); break;
+ //case TypeClass_UNSIGNED_INT: break;
+ //case TypeClass_UNSIGNED_BYTE: break;
+ default: break;
+ }
+
+ return aRetVal;
+}
+
+// Dbg-Hilfsmethode zum Auslesen der in einem Object implementierten Interfaces
+String Impl_GetInterfaceInfo( const Reference< XInterface >& x, const Reference< XIdlClass >& xClass, USHORT nRekLevel )
+{
+ Type aIfaceType = ::getCppuType( (const Reference< XInterface > *)0 );
+ static Reference< XIdlClass > xIfaceClass = TypeToIdlClass( aIfaceType );
+
+ String aRetStr;
+ for( USHORT i = 0 ; i < nRekLevel ; i++ )
+ aRetStr.AppendAscii( " " );
+ aRetStr += String( xClass->getName() );
+ ::rtl::OUString aClassName = xClass->getName();
+ Type aClassType( xClass->getTypeClass(), aClassName.getStr() );
+
+ // Pruefen, ob das Interface wirklich unterstuetzt wird
+ if( !x->queryInterface( aClassType ).hasValue() )
+ {
+ aRetStr.AppendAscii( " (ERROR: Not really supported!)\n" );
+ }
+ // Gibt es Super-Interfaces
+ else
+ {
+ aRetStr.AppendAscii( "\n" );
+
+ // Super-Interfaces holen
+ Sequence< Reference< XIdlClass > > aSuperClassSeq = xClass->getSuperclasses();
+ const Reference< XIdlClass >* pClasses = aSuperClassSeq.getConstArray();
+ UINT32 nSuperIfaceCount = aSuperClassSeq.getLength();
+ for( UINT32 j = 0 ; j < nSuperIfaceCount ; j++ )
+ {
+ const Reference< XIdlClass >& rxIfaceClass = pClasses[j];
+ if( !rxIfaceClass->equals( xIfaceClass ) )
+ aRetStr += Impl_GetInterfaceInfo( x, rxIfaceClass, nRekLevel + 1 );
+ }
+ }
+ return aRetStr;
+}
+
+String getDbgObjectNameImpl( SbUnoObject* pUnoObj )
+{
+ String aName;
+ if( pUnoObj )
+ {
+ aName = pUnoObj->GetClassName();
+ if( !aName.Len() )
+ {
+ Any aToInspectObj = pUnoObj->getUnoAny();
+ TypeClass eType = aToInspectObj.getValueType().getTypeClass();
+ Reference< XInterface > xObj;
+ if( eType == TypeClass_INTERFACE )
+ xObj = *(Reference< XInterface >*)aToInspectObj.getValue();
+ if( xObj.is() )
+ {
+ Reference< XServiceInfo > xServiceInfo( xObj, UNO_QUERY );
+ if( xServiceInfo.is() )
+ aName = xServiceInfo->getImplementationName();
+ }
+ }
+ }
+ return aName;
+}
+
+String getDbgObjectName( SbUnoObject* pUnoObj )
+{
+ String aName = getDbgObjectNameImpl( pUnoObj );
+ if( !aName.Len() )
+ aName.AppendAscii( "Unknown" );
+
+ String aRet;
+ if( aName.Len() > 20 )
+ aRet.AppendAscii( "\n" );
+ aRet.AppendAscii( "\"" );
+ aRet += aName;
+ aRet.AppendAscii( "\":" );
+ return aRet;
+}
+
+String getBasicObjectTypeName( SbxObject* pObj )
+{
+ String aName;
+ if( pObj )
+ {
+ SbUnoObject* pUnoObj = PTR_CAST(SbUnoObject,pObj);
+ if( pUnoObj )
+ aName = getDbgObjectNameImpl( pUnoObj );
+ }
+ return aName;
+}
+
+bool checkUnoObjectType( SbUnoObject* pUnoObj,
+ const String& aClass )
+{
+ Any aToInspectObj = pUnoObj->getUnoAny();
+ TypeClass eType = aToInspectObj.getValueType().getTypeClass();
+ if( eType != TypeClass_INTERFACE )
+ return false;
+ const Reference< XInterface > x = *(Reference< XInterface >*)aToInspectObj.getValue();
+
+ // Return true for XInvocation based objects as interface type names don't count then
+ Reference< XInvocation > xInvocation( x, UNO_QUERY );
+ if( xInvocation.is() )
+ return true;
+
+ bool result = false;
+ Reference< XTypeProvider > xTypeProvider( x, UNO_QUERY );
+ if( xTypeProvider.is() )
+ {
+ Sequence< Type > aTypeSeq = xTypeProvider->getTypes();
+ const Type* pTypeArray = aTypeSeq.getConstArray();
+ UINT32 nIfaceCount = aTypeSeq.getLength();
+ for( UINT32 j = 0 ; j < nIfaceCount ; j++ )
+ {
+ const Type& rType = pTypeArray[j];
+
+ Reference<XIdlClass> xClass = TypeToIdlClass( rType );
+ if( !xClass.is() )
+ {
+ DBG_ERROR("failed to get XIdlClass for type");
+ break;
+ }
+ ::rtl::OUString sClassName = xClass->getName();
+ if ( sClassName.equals( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.bridge.oleautomation.XAutomationObject" ) ) ) )
+ {
+ // there is a hack in the extensions/source/ole/oleobj.cxx to return the typename of the automation object, lets check if it
+ // matches
+ Reference< XInvocation > xInv( aToInspectObj, UNO_QUERY );
+ if ( xInv.is() )
+ {
+ rtl::OUString sTypeName;
+ xInv->getValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("$GetTypeName") ) ) >>= sTypeName;
+ if ( sTypeName.getLength() == 0 || sTypeName.equals( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("IDispatch") ) ) )
+ // can't check type, leave it pass
+ result = true;
+ else
+ result = sTypeName.equals( aClass );
+ }
+ break; // finished checking automation object
+ }
+ OSL_TRACE("Checking if object implements %s",
+ OUStringToOString( defaultNameSpace + aClass,
+ RTL_TEXTENCODING_UTF8 ).getStr() );
+ // although interfaces in the ooo.vba.vba namespace
+ // obey the idl rules and have a leading X, in basic we
+ // want to be able to do something like
+ // 'dim wrkbooks as WorkBooks'
+ // so test assumes the 'X' has been dropped
+ sal_Int32 indexLastDot = sClassName.lastIndexOf('.');
+ if ( indexLastDot > -1 && sClassName.copy( indexLastDot + 1).equalsIgnoreAsciiCase( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("X") ) + aClass ) )
+ {
+ result = true;
+ break;
+ }
+ }
+ }
+ return result;
+}
+
+// Dbg-Hilfsmethode zum Auslesen der in einem Object implementierten Interfaces
+String Impl_GetSupportedInterfaces( SbUnoObject* pUnoObj )
+{
+ Any aToInspectObj = pUnoObj->getUnoAny();
+
+ // #54898: Nur TypeClass Interface zulasssen
+ TypeClass eType = aToInspectObj.getValueType().getTypeClass();
+ String aRet;
+ if( eType != TypeClass_INTERFACE )
+ {
+ aRet.AppendAscii( RTL_CONSTASCII_STRINGPARAM(ID_DBG_SUPPORTEDINTERFACES) );
+ aRet.AppendAscii( " not available.\n(TypeClass is not TypeClass_INTERFACE)\n" );
+ }
+ else
+ {
+ // Interface aus dem Any besorgen
+ const Reference< XInterface > x = *(Reference< XInterface >*)aToInspectObj.getValue();
+
+ // XIdlClassProvider-Interface ansprechen
+ Reference< XIdlClassProvider > xClassProvider( x, UNO_QUERY );
+ Reference< XTypeProvider > xTypeProvider( x, UNO_QUERY );
+
+ aRet.AssignAscii( "Supported interfaces by object " );
+ String aObjName = getDbgObjectName( pUnoObj );
+ aRet += aObjName;
+ aRet.AppendAscii( "\n" );
+ if( xTypeProvider.is() )
+ {
+ // Interfaces der Implementation holen
+ Sequence< Type > aTypeSeq = xTypeProvider->getTypes();
+ const Type* pTypeArray = aTypeSeq.getConstArray();
+ UINT32 nIfaceCount = aTypeSeq.getLength();
+ for( UINT32 j = 0 ; j < nIfaceCount ; j++ )
+ {
+ const Type& rType = pTypeArray[j];
+
+ Reference<XIdlClass> xClass = TypeToIdlClass( rType );
+ if( xClass.is() )
+ {
+ aRet += Impl_GetInterfaceInfo( x, xClass, 1 );
+ }
+ else
+ {
+ typelib_TypeDescription * pTD = 0;
+ rType.getDescription( &pTD );
+ String TypeName( ::rtl::OUString( pTD->pTypeName ) );
+
+ aRet.AppendAscii( "*** ERROR: No IdlClass for type \"" );
+ aRet += TypeName;
+ aRet.AppendAscii( "\"\n*** Please check type library\n" );
+ }
+ }
+ }
+ else if( xClassProvider.is() )
+ {
+
+ DBG_ERROR( "XClassProvider not supported in UNO3" );
+ }
+ }
+ return aRet;
+}
+
+
+
+// Dbg-Hilfsmethode SbxDataType -> String
+String Dbg_SbxDataType2String( SbxDataType eType )
+{
+ String aRet( RTL_CONSTASCII_USTRINGPARAM("Unknown Sbx-Type!") );
+ switch( +eType )
+ {
+ case SbxEMPTY: aRet = String( RTL_CONSTASCII_USTRINGPARAM("SbxEMPTY") ); break;
+ case SbxNULL: aRet = String( RTL_CONSTASCII_USTRINGPARAM("SbxNULL") ); break;
+ case SbxINTEGER: aRet = String( RTL_CONSTASCII_USTRINGPARAM("SbxINTEGER") ); break;
+ case SbxLONG: aRet = String( RTL_CONSTASCII_USTRINGPARAM("SbxLONG") ); break;
+ case SbxSINGLE: aRet = String( RTL_CONSTASCII_USTRINGPARAM("SbxSINGLE") ); break;
+ case SbxDOUBLE: aRet = String( RTL_CONSTASCII_USTRINGPARAM("SbxDOUBLE") ); break;
+ case SbxCURRENCY: aRet = String( RTL_CONSTASCII_USTRINGPARAM("SbxCURRENCY") ); break;
+ case SbxDECIMAL: aRet = String( RTL_CONSTASCII_USTRINGPARAM("SbxDECIMAL") ); break;
+ case SbxDATE: aRet = String( RTL_CONSTASCII_USTRINGPARAM("SbxDATE") ); break;
+ case SbxSTRING: aRet = String( RTL_CONSTASCII_USTRINGPARAM("SbxSTRING") ); break;
+ case SbxOBJECT: aRet = String( RTL_CONSTASCII_USTRINGPARAM("SbxOBJECT") ); break;
+ case SbxERROR: aRet = String( RTL_CONSTASCII_USTRINGPARAM("SbxERROR") ); break;
+ case SbxBOOL: aRet = String( RTL_CONSTASCII_USTRINGPARAM("SbxBOOL") ); break;
+ case SbxVARIANT: aRet = String( RTL_CONSTASCII_USTRINGPARAM("SbxVARIANT") ); break;
+ case SbxDATAOBJECT: aRet = String( RTL_CONSTASCII_USTRINGPARAM("SbxDATAOBJECT") ); break;
+ case SbxCHAR: aRet = String( RTL_CONSTASCII_USTRINGPARAM("SbxCHAR") ); break;
+ case SbxBYTE: aRet = String( RTL_CONSTASCII_USTRINGPARAM("SbxBYTE") ); break;
+ case SbxUSHORT: aRet = String( RTL_CONSTASCII_USTRINGPARAM("SbxUSHORT") ); break;
+ case SbxULONG: aRet = String( RTL_CONSTASCII_USTRINGPARAM("SbxULONG") ); break;
+ case SbxLONG64: aRet = String( RTL_CONSTASCII_USTRINGPARAM("SbxLONG64") ); break;
+ case SbxULONG64: aRet = String( RTL_CONSTASCII_USTRINGPARAM("SbxULONG64") ); break;
+ case SbxSALINT64: aRet = String( RTL_CONSTASCII_USTRINGPARAM("SbxINT64") ); break;
+ case SbxSALUINT64: aRet = String( RTL_CONSTASCII_USTRINGPARAM("SbxUINT64") ); break;
+ case SbxINT: aRet = String( RTL_CONSTASCII_USTRINGPARAM("SbxINT") ); break;
+ case SbxUINT: aRet = String( RTL_CONSTASCII_USTRINGPARAM("SbxUINT") ); break;
+ case SbxVOID: aRet = String( RTL_CONSTASCII_USTRINGPARAM("SbxVOID") ); break;
+ case SbxHRESULT: aRet = String( RTL_CONSTASCII_USTRINGPARAM("SbxHRESULT") ); break;
+ case SbxPOINTER: aRet = String( RTL_CONSTASCII_USTRINGPARAM("SbxPOINTER") ); break;
+ case SbxDIMARRAY: aRet = String( RTL_CONSTASCII_USTRINGPARAM("SbxDIMARRAY") ); break;
+ case SbxCARRAY: aRet = String( RTL_CONSTASCII_USTRINGPARAM("SbxCARRAY") ); break;
+ case SbxUSERDEF: aRet = String( RTL_CONSTASCII_USTRINGPARAM("SbxUSERDEF") ); break;
+ case SbxLPSTR: aRet = String( RTL_CONSTASCII_USTRINGPARAM("SbxLPSTR") ); break;
+ case SbxLPWSTR: aRet = String( RTL_CONSTASCII_USTRINGPARAM("SbxLPWSTR") ); break;
+ case SbxCoreSTRING: aRet = String( RTL_CONSTASCII_USTRINGPARAM("SbxCoreSTRING" ) ); break;
+ case SbxOBJECT | SbxARRAY: aRet = String( RTL_CONSTASCII_USTRINGPARAM("SbxARRAY") ); break;
+ default: break;
+ }
+ return aRet;
+}
+
+// Dbg-Hilfsmethode zum Anzeigen der Properties eines SbUnoObjects
+String Impl_DumpProperties( SbUnoObject* pUnoObj )
+{
+ String aRet( RTL_CONSTASCII_USTRINGPARAM("Properties of object ") );
+ String aObjName = getDbgObjectName( pUnoObj );
+ aRet += aObjName;
+
+ // Uno-Infos auswerten, um Arrays zu erkennen
+ Reference< XIntrospectionAccess > xAccess = pUnoObj->getIntrospectionAccess();
+ if( !xAccess.is() )
+ {
+ Reference< XInvocation > xInvok = pUnoObj->getInvocation();
+ if( xInvok.is() )
+ xAccess = xInvok->getIntrospection();
+ }
+ if( !xAccess.is() )
+ {
+ aRet.AppendAscii( "\nUnknown, no introspection available\n" );
+ return aRet;
+ }
+
+ Sequence<Property> props = xAccess->getProperties( PropertyConcept::ALL - PropertyConcept::DANGEROUS );
+ UINT32 nUnoPropCount = props.getLength();
+ const Property* pUnoProps = props.getConstArray();
+
+ SbxArray* pProps = pUnoObj->GetProperties();
+ USHORT nPropCount = pProps->Count();
+ USHORT nPropsPerLine = 1 + nPropCount / 30;
+ for( USHORT i = 0; i < nPropCount; i++ )
+ {
+ SbxVariable* pVar = pProps->Get( i );
+ if( pVar )
+ {
+ String aPropStr;
+ if( (i % nPropsPerLine) == 0 )
+ aPropStr.AppendAscii( "\n" );
+
+ // Typ und Namen ausgeben
+ // Ist es in Uno eine Sequence?
+ SbxDataType eType = pVar->GetFullType();
+
+ BOOL bMaybeVoid = FALSE;
+ if( i < nUnoPropCount )
+ {
+ const Property& rProp = pUnoProps[ i ];
+
+ // #63133: Bei MAYBEVOID Typ aus Uno neu konvertieren,
+ // damit nicht immer nur SbxEMPTY ausgegben wird.
+ if( rProp.Attributes & PropertyAttribute::MAYBEVOID )
+ {
+ eType = unoToSbxType( rProp.Type.getTypeClass() );
+ bMaybeVoid = TRUE;
+ }
+ if( eType == SbxOBJECT )
+ {
+ Type aType = rProp.Type;
+ if( aType.getTypeClass() == TypeClass_SEQUENCE )
+ eType = (SbxDataType) ( SbxOBJECT | SbxARRAY );
+ }
+ }
+ aPropStr += Dbg_SbxDataType2String( eType );
+ if( bMaybeVoid )
+ aPropStr.AppendAscii( "/void" );
+ aPropStr.AppendAscii( " " );
+ aPropStr += pVar->GetName();
+
+ if( i == nPropCount - 1 )
+ aPropStr.AppendAscii( "\n" );
+ else
+ aPropStr.AppendAscii( "; " );
+
+ aRet += aPropStr;
+ }
+ }
+ return aRet;
+}
+
+// Dbg-Hilfsmethode zum Anzeigen der Methoden eines SbUnoObjects
+String Impl_DumpMethods( SbUnoObject* pUnoObj )
+{
+ String aRet( RTL_CONSTASCII_USTRINGPARAM("Methods of object ") );
+ String aObjName = getDbgObjectName( pUnoObj );
+ aRet += aObjName;
+
+ // XIntrospectionAccess, um die Typen der Parameter auch ausgeben zu koennen
+ Reference< XIntrospectionAccess > xAccess = pUnoObj->getIntrospectionAccess();
+ if( !xAccess.is() )
+ {
+ Reference< XInvocation > xInvok = pUnoObj->getInvocation();
+ if( xInvok.is() )
+ xAccess = xInvok->getIntrospection();
+ }
+ if( !xAccess.is() )
+ {
+ aRet.AppendAscii( "\nUnknown, no introspection available\n" );
+ return aRet;
+ }
+ Sequence< Reference< XIdlMethod > > methods = xAccess->getMethods
+ ( MethodConcept::ALL - MethodConcept::DANGEROUS );
+ const Reference< XIdlMethod >* pUnoMethods = methods.getConstArray();
+
+ SbxArray* pMethods = pUnoObj->GetMethods();
+ USHORT nMethodCount = pMethods->Count();
+ if( !nMethodCount )
+ {
+ aRet.AppendAscii( "\nNo methods found\n" );
+ return aRet;
+ }
+ USHORT nPropsPerLine = 1 + nMethodCount / 30;
+ for( USHORT i = 0; i < nMethodCount; i++ )
+ {
+ SbxVariable* pVar = pMethods->Get( i );
+ if( pVar )
+ {
+ String aPropStr;
+ if( (i % nPropsPerLine) == 0 )
+ aPropStr.AppendAscii( "\n" );
+
+ // Methode ansprechen
+ const Reference< XIdlMethod >& rxMethod = pUnoMethods[i];
+
+ // Ist es in Uno eine Sequence?
+ SbxDataType eType = pVar->GetFullType();
+ if( eType == SbxOBJECT )
+ {
+ Reference< XIdlClass > xClass = rxMethod->getReturnType();
+ if( xClass.is() && xClass->getTypeClass() == TypeClass_SEQUENCE )
+ eType = (SbxDataType) ( SbxOBJECT | SbxARRAY );
+ }
+ // Name und Typ ausgeben
+ aPropStr += Dbg_SbxDataType2String( eType );
+ aPropStr.AppendAscii( " " );
+ aPropStr += pVar->GetName();
+ aPropStr.AppendAscii( " ( " );
+
+ // get-Methode darf keinen Parameter haben
+ Sequence< Reference< XIdlClass > > aParamsSeq = rxMethod->getParameterTypes();
+ UINT32 nParamCount = aParamsSeq.getLength();
+ const Reference< XIdlClass >* pParams = aParamsSeq.getConstArray();
+
+ if( nParamCount > 0 )
+ {
+ for( USHORT j = 0; j < nParamCount; j++ )
+ {
+ String aTypeStr = Dbg_SbxDataType2String( unoToSbxType( pParams[ j ] ) );
+ aPropStr += aTypeStr;
+
+ if( j < nParamCount - 1 )
+ aPropStr.AppendAscii( ", " );
+ }
+ }
+ else
+ aPropStr.AppendAscii( "void" );
+
+ aPropStr.AppendAscii( " ) " );
+
+ if( i == nMethodCount - 1 )
+ aPropStr.AppendAscii( "\n" );
+ else
+ aPropStr.AppendAscii( "; " );
+
+ aRet += aPropStr;
+ }
+ }
+ return aRet;
+}
+
+TYPEINIT1(AutomationNamedArgsSbxArray,SbxArray)
+
+// Implementation SbUnoObject
+void SbUnoObject::SFX_NOTIFY( SfxBroadcaster& rBC, const TypeId& rBCType,
+ const SfxHint& rHint, const TypeId& rHintType )
+{
+ if( bNeedIntrospection )
+ doIntrospection();
+
+ const SbxHint* pHint = PTR_CAST(SbxHint,&rHint);
+ if( pHint )
+ {
+ SbxVariable* pVar = pHint->GetVar();
+ SbxArray* pParams = pVar->GetParameters();
+ SbUnoProperty* pProp = PTR_CAST(SbUnoProperty,pVar);
+ SbUnoMethod* pMeth = PTR_CAST(SbUnoMethod,pVar);
+ if( pProp )
+ {
+ bool bInvocation = pProp->isInvocationBased();
+ if( pHint->GetId() == SBX_HINT_DATAWANTED )
+ {
+ // Test-Properties
+ INT32 nId = pProp->nId;
+ if( nId < 0 )
+ {
+ // Id == -1: Implementierte Interfaces gemaess ClassProvider anzeigen
+ if( nId == -1 ) // Property ID_DBG_SUPPORTEDINTERFACES"
+ {
+ String aRetStr = Impl_GetSupportedInterfaces( this );
+ pVar->PutString( aRetStr );
+ }
+ // Id == -2: Properties ausgeben
+ else if( nId == -2 ) // Property ID_DBG_PROPERTIES
+ {
+ // Jetzt muessen alle Properties angelegt werden
+ implCreateAll();
+ String aRetStr = Impl_DumpProperties( this );
+ pVar->PutString( aRetStr );
+ }
+ // Id == -3: Methoden ausgeben
+ else if( nId == -3 ) // Property ID_DBG_METHODS
+ {
+ // Jetzt muessen alle Properties angelegt werden
+ implCreateAll();
+ String aRetStr = Impl_DumpMethods( this );
+ pVar->PutString( aRetStr );
+ }
+ return;
+ }
+
+ if( !bInvocation && mxUnoAccess.is() )
+ {
+ try
+ {
+ // Wert holen
+ Reference< XPropertySet > xPropSet( mxUnoAccess->queryAdapter( ::getCppuType( (const Reference< XPropertySet > *)0 ) ), UNO_QUERY );
+ Any aRetAny = xPropSet->getPropertyValue( pProp->GetName() );
+ // Die Nutzung von getPropertyValue (statt ueber den Index zu gehen) ist
+ // nicht optimal, aber die Umstellung auf XInvocation steht ja ohnehin an
+ // Ansonsten kann auch FastPropertySet genutzt werden
+
+ // Wert von Uno nach Sbx uebernehmen
+ unoToSbxValue( pVar, aRetAny );
+ }
+ catch( const Exception& )
+ {
+ implHandleAnyException( ::cppu::getCaughtException() );
+ }
+ }
+ else if( bInvocation && mxInvocation.is() )
+ {
+ try
+ {
+ // Wert holen
+ Any aRetAny = mxInvocation->getValue( pProp->GetName() );
+
+ // Wert von Uno nach Sbx uebernehmen
+ unoToSbxValue( pVar, aRetAny );
+ }
+ catch( const Exception& )
+ {
+ implHandleAnyException( ::cppu::getCaughtException() );
+ }
+ }
+ }
+ else if( pHint->GetId() == SBX_HINT_DATACHANGED )
+ {
+ if( !bInvocation && mxUnoAccess.is() )
+ {
+ if( pProp->aUnoProp.Attributes & PropertyAttribute::READONLY )
+ {
+ StarBASIC::Error( SbERR_PROP_READONLY );
+ return;
+ }
+
+ // Wert von Uno nach Sbx uebernehmen
+ Any aAnyValue = sbxToUnoValue( pVar, pProp->aUnoProp.Type, &pProp->aUnoProp );
+ try
+ {
+ // Wert setzen
+ Reference< XPropertySet > xPropSet( mxUnoAccess->queryAdapter( ::getCppuType( (const Reference< XPropertySet > *)0 ) ), UNO_QUERY );
+ xPropSet->setPropertyValue( pProp->GetName(), aAnyValue );
+ // Die Nutzung von getPropertyValue (statt ueber den Index zu gehen) ist
+ // nicht optimal, aber die Umstellung auf XInvocation steht ja ohnehin an
+ // Ansonsten kann auch FastPropertySet genutzt werden
+ }
+ catch( const Exception& )
+ {
+ implHandleAnyException( ::cppu::getCaughtException() );
+ }
+ }
+ else if( bInvocation && mxInvocation.is() )
+ {
+ // Wert von Uno nach Sbx uebernehmen
+ Any aAnyValue = sbxToUnoValueImpl( pVar );
+ try
+ {
+ // Wert setzen
+ mxInvocation->setValue( pProp->GetName(), aAnyValue );
+ }
+ catch( const Exception& )
+ {
+ implHandleAnyException( ::cppu::getCaughtException() );
+ }
+ }
+ }
+ }
+ else if( pMeth )
+ {
+ bool bInvocation = pMeth->isInvocationBased();
+ if( pHint->GetId() == SBX_HINT_DATAWANTED )
+ {
+ // Anzahl Parameter -1 wegen Param0 == this
+ UINT32 nParamCount = pParams ? ((UINT32)pParams->Count() - 1) : 0;
+ Sequence<Any> args;
+ BOOL bOutParams = FALSE;
+ UINT32 i;
+
+ if( !bInvocation && mxUnoAccess.is() )
+ {
+ // Infos holen
+ const Sequence<ParamInfo>& rInfoSeq = pMeth->getParamInfos();
+ const ParamInfo* pParamInfos = rInfoSeq.getConstArray();
+ UINT32 nUnoParamCount = rInfoSeq.getLength();
+ UINT32 nAllocParamCount = nParamCount;
+
+ // Ueberschuessige Parameter ignorieren, Alternative: Error schmeissen
+ if( nParamCount > nUnoParamCount )
+ {
+ nParamCount = nUnoParamCount;
+ nAllocParamCount = nParamCount;
+ }
+ else if( nParamCount < nUnoParamCount )
+ {
+ SbiInstance* pInst = pINST;
+ if( pInst && pInst->IsCompatibility() )
+ {
+ // Check types
+ bool bError = false;
+ for( i = nParamCount ; i < nUnoParamCount ; i++ )
+ {
+ const ParamInfo& rInfo = pParamInfos[i];
+ const Reference< XIdlClass >& rxClass = rInfo.aType;
+ if( rxClass->getTypeClass() != TypeClass_ANY )
+ {
+ bError = true;
+ StarBASIC::Error( SbERR_NOT_OPTIONAL );
+ }
+ }
+ if( !bError )
+ nAllocParamCount = nUnoParamCount;
+ }
+ }
+
+ if( nAllocParamCount > 0 )
+ {
+ args.realloc( nAllocParamCount );
+ Any* pAnyArgs = args.getArray();
+ for( i = 0 ; i < nParamCount ; i++ )
+ {
+ const ParamInfo& rInfo = pParamInfos[i];
+ const Reference< XIdlClass >& rxClass = rInfo.aType;
+ //const XIdlClassRef& rxClass = pUnoParams[i];
+
+ com::sun::star::uno::Type aType( rxClass->getTypeClass(), rxClass->getName() );
+
+ // ACHTUNG: Bei den Sbx-Parametern den Offset nicht vergessen!
+ pAnyArgs[i] = sbxToUnoValue( pParams->Get( (USHORT)(i+1) ), aType );
+
+ // Wenn es nicht schon feststeht pruefen, ob Out-Parameter vorliegen
+ if( !bOutParams )
+ {
+ ParamMode aParamMode = rInfo.aMode;
+ if( aParamMode != ParamMode_IN )
+ bOutParams = TRUE;
+ }
+ }
+ }
+ }
+ else if( bInvocation && pParams && mxInvocation.is() )
+ {
+ bool bOLEAutomation = true;
+ // TODO: bOLEAutomation = xOLEAutomation.is()
+
+ AutomationNamedArgsSbxArray* pArgNamesArray = NULL;
+ if( bOLEAutomation )
+ pArgNamesArray = PTR_CAST(AutomationNamedArgsSbxArray,pParams);
+
+ args.realloc( nParamCount );
+ Any* pAnyArgs = args.getArray();
+ bool bBlockConversionToSmallestType = pINST->IsCompatibility();
+ if( pArgNamesArray )
+ {
+ Sequence< ::rtl::OUString >& rNameSeq = pArgNamesArray->getNames();
+ ::rtl::OUString* pNames = rNameSeq.getArray();
+
+ Any aValAny;
+ for( i = 0 ; i < nParamCount ; i++ )
+ {
+ USHORT iSbx = (USHORT)(i+1);
+
+ // ACHTUNG: Bei den Sbx-Parametern den Offset nicht vergessen!
+ aValAny = sbxToUnoValueImpl( pParams->Get( iSbx ),
+ bBlockConversionToSmallestType );
+
+ ::rtl::OUString aParamName = pNames[iSbx];
+ if( aParamName.getLength() )
+ {
+ oleautomation::NamedArgument aNamedArgument;
+ aNamedArgument.Name = aParamName;
+ aNamedArgument.Value = aValAny;
+ pAnyArgs[i] <<= aNamedArgument;
+ }
+ else
+ {
+ pAnyArgs[i] = aValAny;
+ }
+ }
+ }
+ else
+ {
+ for( i = 0 ; i < nParamCount ; i++ )
+ {
+ // ACHTUNG: Bei den Sbx-Parametern den Offset nicht vergessen!
+ pAnyArgs[i] = sbxToUnoValueImpl( pParams->Get( (USHORT)(i+1) ),
+ bBlockConversionToSmallestType );
+ }
+ }
+ }
+
+ // Methode callen
+ GetSbData()->bBlockCompilerError = TRUE; // #106433 Block compiler errors for API calls
+ try
+ {
+ if( !bInvocation && mxUnoAccess.is() )
+ {
+ Any aRetAny = pMeth->m_xUnoMethod->invoke( getUnoAny(), args );
+
+ // Wert von Uno nach Sbx uebernehmen
+ unoToSbxValue( pVar, aRetAny );
+
+ // Muessen wir Out-Parameter zurueckkopieren?
+ if( bOutParams )
+ {
+ const Any* pAnyArgs = args.getConstArray();
+
+ // Infos holen
+ const Sequence<ParamInfo>& rInfoSeq = pMeth->getParamInfos();
+ const ParamInfo* pParamInfos = rInfoSeq.getConstArray();
+
+ UINT32 j;
+ for( j = 0 ; j < nParamCount ; j++ )
+ {
+ const ParamInfo& rInfo = pParamInfos[j];
+ ParamMode aParamMode = rInfo.aMode;
+ if( aParamMode != ParamMode_IN )
+ unoToSbxValue( (SbxVariable*)pParams->Get( (USHORT)(j+1) ), pAnyArgs[ j ] );
+ }
+ }
+ }
+ else if( bInvocation && mxInvocation.is() )
+ {
+ Sequence< INT16 > OutParamIndex;
+ Sequence< Any > OutParam;
+ Any aRetAny = mxInvocation->invoke( pMeth->GetName(), args, OutParamIndex, OutParam );
+
+ // Wert von Uno nach Sbx uebernehmen
+ unoToSbxValue( pVar, aRetAny );
+
+ const INT16* pIndices = OutParamIndex.getConstArray();
+ UINT32 nLen = OutParamIndex.getLength();
+ if( nLen )
+ {
+ const Any* pNewValues = OutParam.getConstArray();
+ for( UINT32 j = 0 ; j < nLen ; j++ )
+ {
+ INT16 iTarget = pIndices[ j ];
+ if( iTarget >= (INT16)nParamCount )
+ break;
+ unoToSbxValue( (SbxVariable*)pParams->Get( (USHORT)(j+1) ), pNewValues[ j ] );
+ }
+ }
+ }
+
+ // #55460, Parameter hier weghauen, da das in unoToSbxValue()
+ // bei Arrays wegen #54548 nicht mehr gemacht wird
+ if( pParams )
+ pVar->SetParameters( NULL );
+ }
+ catch( const Exception& )
+ {
+ implHandleAnyException( ::cppu::getCaughtException() );
+ }
+ GetSbData()->bBlockCompilerError = FALSE; // #106433 Unblock compiler errors
+ }
+ }
+ else
+ SbxObject::SFX_NOTIFY( rBC, rBCType, rHint, rHintType );
+ }
+}
+
+
+#ifdef INVOCATION_ONLY
+// Aus USR
+Reference< XInvocation > createDynamicInvocationFor( const Any& aAny );
+#endif
+
+SbUnoObject::SbUnoObject( const String& aName_, const Any& aUnoObj_ )
+ : SbxObject( aName_ )
+ , bNeedIntrospection( TRUE )
+ , bIgnoreNativeCOMObjectMembers( FALSE )
+{
+ static Reference< XIntrospection > xIntrospection;
+
+ // Default-Properties von Sbx wieder rauspruegeln
+ Remove( XubString( RTL_CONSTASCII_USTRINGPARAM("Name") ), SbxCLASS_DONTCARE );
+ Remove( XubString( RTL_CONSTASCII_USTRINGPARAM("Parent") ), SbxCLASS_DONTCARE );
+
+ // Typ des Objekts pruefen
+ TypeClass eType = aUnoObj_.getValueType().getTypeClass();
+ Reference< XInterface > x;
+ if( eType == TypeClass_INTERFACE )
+ {
+ // Interface aus dem Any besorgen
+ x = *(Reference< XInterface >*)aUnoObj_.getValue();
+ if( !x.is() )
+ return;
+ }
+
+ Reference< XTypeProvider > xTypeProvider;
+#ifdef INVOCATION_ONLY
+ // Invocation besorgen
+ mxInvocation = createDynamicInvocationFor( aUnoObj_ );
+#else
+ // Hat das Object selbst eine Invocation?
+ mxInvocation = Reference< XInvocation >( x, UNO_QUERY );
+
+ xTypeProvider = Reference< XTypeProvider >( x, UNO_QUERY );
+#endif
+
+ if( mxInvocation.is() )
+ {
+ // #94670: This is WRONG because then the MaterialHolder doesn't refer
+ // to the object implementing XInvocation but to the object passed to
+ // the invocation service!!!
+ // mxMaterialHolder = Reference< XMaterialHolder >::query( mxInvocation );
+
+ // ExactName holen
+ mxExactNameInvocation = Reference< XExactName >::query( mxInvocation );
+
+ // Rest bezieht sich nur auf Introspection
+ if( !xTypeProvider.is() )
+ {
+ bNeedIntrospection = FALSE;
+ return;
+ }
+
+ // Ignore introspection based members for COM objects to avoid
+ // hiding of equally named COM symbols, e.g. XInvocation::getValue
+ Reference< oleautomation::XAutomationObject > xAutomationObject( aUnoObj_, UNO_QUERY );
+ if( xAutomationObject.is() )
+ bIgnoreNativeCOMObjectMembers = TRUE;
+ }
+
+ maTmpUnoObj = aUnoObj_;
+
+
+ //*** Namen bestimmen ***
+ BOOL bFatalError = TRUE;
+
+ // Ist es ein Interface oder eine struct?
+ BOOL bSetClassName = FALSE;
+ String aClassName_;
+ if( eType == TypeClass_STRUCT || eType == TypeClass_EXCEPTION )
+ {
+ // Struct ist Ok
+ bFatalError = FALSE;
+
+ // #67173 Echten Klassen-Namen eintragen
+ if( aName_.Len() == 0 )
+ {
+ aClassName_ = String( aUnoObj_.getValueType().getTypeName() );
+ bSetClassName = TRUE;
+ }
+ }
+ else if( eType == TypeClass_INTERFACE )
+ {
+ // #70197 Interface geht immer durch Typ im Any
+ bFatalError = FALSE;
+
+ // Nach XIdlClassProvider-Interface fragen
+ Reference< XIdlClassProvider > xClassProvider( x, UNO_QUERY );
+ if( xClassProvider.is() )
+ {
+ // #67173 Echten Klassen-Namen eintragen
+ if( aName_.Len() == 0 )
+ {
+ Sequence< Reference< XIdlClass > > szClasses = xClassProvider->getIdlClasses();
+ UINT32 nLen = szClasses.getLength();
+ if( nLen )
+ {
+ const Reference< XIdlClass > xImplClass = szClasses.getConstArray()[ 0 ];
+ if( xImplClass.is() )
+ {
+ aClassName_ = String( xImplClass->getName() );
+ bSetClassName = TRUE;
+ }
+ }
+ }
+ }
+ }
+ if( bSetClassName )
+ SetClassName( aClassName_ );
+
+ // Weder Interface noch Struct -> FatalError
+ if( bFatalError )
+ {
+ StarBASIC::FatalError( ERRCODE_BASIC_EXCEPTION );
+ return;
+ }
+
+ // #67781 Introspection erst on demand durchfuehren
+}
+
+SbUnoObject::~SbUnoObject()
+{
+}
+
+
+// #76470 Introspection on Demand durchfuehren
+void SbUnoObject::doIntrospection( void )
+{
+ static Reference< XIntrospection > xIntrospection;
+
+ if( !bNeedIntrospection )
+ return;
+ bNeedIntrospection = FALSE;
+
+ if( !xIntrospection.is() )
+ {
+ // Introspection-Service holen
+ Reference< XMultiServiceFactory > xFactory( comphelper::getProcessServiceFactory() );
+ if ( xFactory.is() )
+ {
+ Reference< XInterface > xI = xFactory->createInstance( rtl::OUString::createFromAscii("com.sun.star.beans.Introspection") );
+ if (xI.is())
+ xIntrospection = Reference< XIntrospection >::query( xI );
+ //xI->queryInterface( ::getCppuType( (const Reference< XIntrospection > *)0 ), xIntrospection );
+ }
+ }
+ if( !xIntrospection.is() )
+ {
+ StarBASIC::FatalError( ERRCODE_BASIC_EXCEPTION );
+ return;
+ }
+
+ // Introspection durchfuehren
+ try
+ {
+ mxUnoAccess = xIntrospection->inspect( maTmpUnoObj );
+ }
+ catch( RuntimeException& e )
+ {
+ StarBASIC::Error( ERRCODE_BASIC_EXCEPTION, implGetExceptionMsg( e ) );
+ }
+
+ if( !mxUnoAccess.is() )
+ {
+ // #51475 Ungueltiges Objekt kennzeichnen (kein mxMaterialHolder)
+ return;
+ }
+
+ // MaterialHolder vom Access holen
+ mxMaterialHolder = Reference< XMaterialHolder >::query( mxUnoAccess );
+
+ // ExactName vom Access holen
+ mxExactName = Reference< XExactName >::query( mxUnoAccess );
+}
+
+
+
+
+// #67781 Start einer Liste aller SbUnoMethod-Instanzen
+static SbUnoMethod* pFirst = NULL;
+
+void clearUnoMethods( void )
+{
+ SbUnoMethod* pMeth = pFirst;
+ while( pMeth )
+ {
+ pMeth->SbxValue::Clear();
+ pMeth = pMeth->pNext;
+ }
+}
+
+
+SbUnoMethod::SbUnoMethod
+(
+ const String& aName_,
+ SbxDataType eSbxType,
+ Reference< XIdlMethod > xUnoMethod_,
+ bool bInvocation
+)
+ : SbxMethod( aName_, eSbxType )
+ , mbInvocation( bInvocation )
+{
+ m_xUnoMethod = xUnoMethod_;
+ pParamInfoSeq = NULL;
+
+ // #67781 Methode in Liste eintragen
+ pNext = pFirst;
+ pPrev = NULL;
+ pFirst = this;
+ if( pNext )
+ pNext->pPrev = this;
+}
+
+SbUnoMethod::~SbUnoMethod()
+{
+ delete pParamInfoSeq;
+
+ if( this == pFirst )
+ pFirst = pNext;
+ else if( pPrev )
+ pPrev->pNext = pNext;
+ if( pNext )
+ pNext->pPrev = pPrev;
+}
+
+SbxInfo* SbUnoMethod::GetInfo()
+{
+ if( !pInfo && m_xUnoMethod.is() )
+ {
+ SbiInstance* pInst = pINST;
+ if( pInst && pInst->IsCompatibility() )
+ {
+ pInfo = new SbxInfo();
+
+ const Sequence<ParamInfo>& rInfoSeq = getParamInfos();
+ const ParamInfo* pParamInfos = rInfoSeq.getConstArray();
+ UINT32 nParamCount = rInfoSeq.getLength();
+
+ for( UINT32 i = 0 ; i < nParamCount ; i++ )
+ {
+ const ParamInfo& rInfo = pParamInfos[i];
+ ::rtl::OUString aParamName = rInfo.aName;
+
+ // const Reference< XIdlClass >& rxClass = rInfo.aType;
+ SbxDataType t = SbxVARIANT;
+ USHORT nFlags_ = SBX_READ;
+ pInfo->AddParam( aParamName, t, nFlags_ );
+ }
+ }
+ }
+ return pInfo;
+}
+
+const Sequence<ParamInfo>& SbUnoMethod::getParamInfos( void )
+{
+ if( !pParamInfoSeq && m_xUnoMethod.is() )
+ {
+ Sequence<ParamInfo> aTmp = m_xUnoMethod->getParameterInfos() ;
+ pParamInfoSeq = new Sequence<ParamInfo>( aTmp );
+ }
+ return *pParamInfoSeq;
+}
+
+SbUnoProperty::SbUnoProperty
+(
+ const String& aName_,
+ SbxDataType eSbxType,
+ const Property& aUnoProp_,
+ INT32 nId_,
+ bool bInvocation
+)
+ : SbxProperty( aName_, eSbxType )
+ , aUnoProp( aUnoProp_ )
+ , nId( nId_ )
+ , mbInvocation( bInvocation )
+{
+ // #54548, bei bedarf Dummy-Array einsetzen, damit SbiRuntime::CheckArray() geht
+ static SbxArrayRef xDummyArray = new SbxArray( SbxVARIANT );
+ if( eSbxType & SbxARRAY )
+ PutObject( xDummyArray );
+}
+
+SbUnoProperty::~SbUnoProperty()
+{}
+
+
+SbxVariable* SbUnoObject::Find( const String& rName, SbxClassType t )
+{
+ static Reference< XIdlMethod > xDummyMethod;
+ static Property aDummyProp;
+
+ SbxVariable* pRes = SbxObject::Find( rName, t );
+
+ if( bNeedIntrospection )
+ doIntrospection();
+
+ // Neu 4.3.1999: Properties on Demand anlegen, daher jetzt perIntrospectionAccess
+ // suchen, ob doch eine Property oder Methode des geforderten Namens existiert
+ if( !pRes )
+ {
+ ::rtl::OUString aUName( rName );
+ if( mxUnoAccess.is() && !bIgnoreNativeCOMObjectMembers )
+ {
+ if( mxExactName.is() )
+ {
+ ::rtl::OUString aUExactName = mxExactName->getExactName( aUName );
+ if( aUExactName.getLength() )
+ aUName = aUExactName;
+ }
+ if( mxUnoAccess->hasProperty( aUName, PropertyConcept::ALL - PropertyConcept::DANGEROUS ) )
+ {
+ const Property& rProp = mxUnoAccess->
+ getProperty( aUName, PropertyConcept::ALL - PropertyConcept::DANGEROUS );
+
+ // #58455 Wenn die Property void sein kann, muss als Typ Variant gesetzt werden
+ SbxDataType eSbxType;
+ if( rProp.Attributes & PropertyAttribute::MAYBEVOID )
+ eSbxType = SbxVARIANT;
+ else
+ eSbxType = unoToSbxType( rProp.Type.getTypeClass() );
+
+ // Property anlegen und reinbraten
+ SbxVariableRef xVarRef = new SbUnoProperty( rProp.Name, eSbxType, rProp, 0, false );
+ QuickInsert( (SbxVariable*)xVarRef );
+ pRes = xVarRef;
+ }
+ else if( mxUnoAccess->hasMethod( aUName,
+ MethodConcept::ALL - MethodConcept::DANGEROUS ) )
+ {
+ // Methode ansprechen
+ const Reference< XIdlMethod >& rxMethod = mxUnoAccess->
+ getMethod( aUName, MethodConcept::ALL - MethodConcept::DANGEROUS );
+
+ // SbUnoMethode anlegen und reinbraten
+ SbxVariableRef xMethRef = new SbUnoMethod( rxMethod->getName(),
+ unoToSbxType( rxMethod->getReturnType() ), rxMethod, false );
+ QuickInsert( (SbxVariable*)xMethRef );
+ pRes = xMethRef;
+ }
+
+ // Wenn immer noch nichts gefunden wurde, muss geprueft werden, ob NameAccess vorliegt
+ if( !pRes )
+ {
+ try
+ {
+ Reference< XNameAccess > xNameAccess( mxUnoAccess->queryAdapter( ::getCppuType( (const Reference< XPropertySet > *)0 ) ), UNO_QUERY );
+ ::rtl::OUString aUName2( rName );
+
+ if( xNameAccess.is() && xNameAccess->hasByName( aUName2 ) )
+ {
+ Any aAny = xNameAccess->getByName( aUName2 );
+
+ // ACHTUNG: Die hier erzeugte Variable darf wegen bei XNameAccess
+ // nicht als feste Property in das Object aufgenommen werden und
+ // wird daher nirgendwo gehalten.
+ // Wenn das Probleme gibt, muss das kuenstlich gemacht werden oder
+ // es muss eine Klasse SbUnoNameAccessProperty geschaffen werden,
+ // bei der die Existenz staendig neu ueberprueft und die ggf. weg-
+ // geworfen wird, wenn der Name nicht mehr gefunden wird.
+ pRes = new SbxVariable( SbxVARIANT );
+ unoToSbxValue( pRes, aAny );
+ }
+ }
+ catch( NoSuchElementException& e )
+ {
+ StarBASIC::Error( ERRCODE_BASIC_EXCEPTION, implGetExceptionMsg( e ) );
+ }
+ catch( const Exception& )
+ {
+ // Anlegen, damit der Exception-Fehler nicht ueberschrieben wird
+ if( !pRes )
+ pRes = new SbxVariable( SbxVARIANT );
+
+ implHandleAnyException( ::cppu::getCaughtException() );
+ }
+ }
+ }
+ if( !pRes && mxInvocation.is() )
+ {
+ if( mxExactNameInvocation.is() )
+ {
+ ::rtl::OUString aUExactName = mxExactNameInvocation->getExactName( aUName );
+ if( aUExactName.getLength() )
+ aUName = aUExactName;
+ }
+
+ try
+ {
+ if( mxInvocation->hasProperty( aUName ) )
+ {
+ // Property anlegen und reinbraten
+ SbxVariableRef xVarRef = new SbUnoProperty( aUName, SbxVARIANT, aDummyProp, 0, true );
+ QuickInsert( (SbxVariable*)xVarRef );
+ pRes = xVarRef;
+ }
+ else if( mxInvocation->hasMethod( aUName ) )
+ {
+ // SbUnoMethode anlegen und reinbraten
+ SbxVariableRef xMethRef = new SbUnoMethod( aUName, SbxVARIANT, xDummyMethod, true );
+ QuickInsert( (SbxVariable*)xMethRef );
+ pRes = xMethRef;
+ }
+ }
+ catch( RuntimeException& e )
+ {
+ // Anlegen, damit der Exception-Fehler nicht ueberschrieben wird
+ if( !pRes )
+ pRes = new SbxVariable( SbxVARIANT );
+
+ StarBASIC::Error( ERRCODE_BASIC_EXCEPTION, implGetExceptionMsg( e ) );
+ }
+ }
+ }
+
+ // Ganz am Schluss noch pruefen, ob die Dbg_-Properties gemeint sind
+
+ if( !pRes )
+ {
+ if( rName.EqualsIgnoreCaseAscii( ID_DBG_SUPPORTEDINTERFACES ) ||
+ rName.EqualsIgnoreCaseAscii( ID_DBG_PROPERTIES ) ||
+ rName.EqualsIgnoreCaseAscii( ID_DBG_METHODS ) )
+ {
+ // Anlegen
+ implCreateDbgProperties();
+
+ // Jetzt muessen sie regulaer gefunden werden
+ pRes = SbxObject::Find( rName, SbxCLASS_DONTCARE );
+ }
+ }
+ return pRes;
+}
+
+
+// Hilfs-Methode zum Anlegen der dbg_-Properties
+void SbUnoObject::implCreateDbgProperties( void )
+{
+ Property aProp;
+
+ // Id == -1: Implementierte Interfaces gemaess ClassProvider anzeigen
+ SbxVariableRef xVarRef = new SbUnoProperty( String(RTL_CONSTASCII_USTRINGPARAM(ID_DBG_SUPPORTEDINTERFACES)), SbxSTRING, aProp, -1, false );
+ QuickInsert( (SbxVariable*)xVarRef );
+
+ // Id == -2: Properties ausgeben
+ xVarRef = new SbUnoProperty( String(RTL_CONSTASCII_USTRINGPARAM(ID_DBG_PROPERTIES)), SbxSTRING, aProp, -2, false );
+ QuickInsert( (SbxVariable*)xVarRef );
+
+ // Id == -3: Methoden ausgeben
+ xVarRef = new SbUnoProperty( String(RTL_CONSTASCII_USTRINGPARAM(ID_DBG_METHODS)), SbxSTRING, aProp, -3, false );
+ QuickInsert( (SbxVariable*)xVarRef );
+}
+
+void SbUnoObject::implCreateAll( void )
+{
+ // Bestehende Methoden und Properties alle wieder wegwerfen
+ pMethods = new SbxArray;
+ pProps = new SbxArray;
+
+ if( bNeedIntrospection ) doIntrospection();
+
+ // Instrospection besorgen
+ Reference< XIntrospectionAccess > xAccess = mxUnoAccess;
+ if( !xAccess.is() || bIgnoreNativeCOMObjectMembers )
+ {
+ if( mxInvocation.is() )
+ xAccess = mxInvocation->getIntrospection();
+ else if( bIgnoreNativeCOMObjectMembers )
+ return;
+ }
+ if( !xAccess.is() )
+ return;
+
+ // Properties anlegen
+ Sequence<Property> props = xAccess->getProperties( PropertyConcept::ALL - PropertyConcept::DANGEROUS );
+ UINT32 nPropCount = props.getLength();
+ const Property* pProps_ = props.getConstArray();
+
+ UINT32 i;
+ for( i = 0 ; i < nPropCount ; i++ )
+ {
+ const Property& rProp = pProps_[ i ];
+
+ // #58455 Wenn die Property void sein kann, muss als Typ Variant gesetzt werden
+ SbxDataType eSbxType;
+ if( rProp.Attributes & PropertyAttribute::MAYBEVOID )
+ eSbxType = SbxVARIANT;
+ else
+ eSbxType = unoToSbxType( rProp.Type.getTypeClass() );
+
+ // Property anlegen und reinbraten
+ SbxVariableRef xVarRef = new SbUnoProperty( rProp.Name, eSbxType, rProp, i, false );
+ QuickInsert( (SbxVariable*)xVarRef );
+ }
+
+ // Dbg_-Properties anlegen
+ implCreateDbgProperties();
+
+ // Methoden anlegen
+ Sequence< Reference< XIdlMethod > > aMethodSeq = xAccess->getMethods
+ ( MethodConcept::ALL - MethodConcept::DANGEROUS );
+ UINT32 nMethCount = aMethodSeq.getLength();
+ const Reference< XIdlMethod >* pMethods_ = aMethodSeq.getConstArray();
+ for( i = 0 ; i < nMethCount ; i++ )
+ {
+ // Methode ansprechen
+ const Reference< XIdlMethod >& rxMethod = pMethods_[i];
+
+ // SbUnoMethode anlegen und reinbraten
+ SbxVariableRef xMethRef = new SbUnoMethod
+ ( rxMethod->getName(), unoToSbxType( rxMethod->getReturnType() ), rxMethod, false );
+ QuickInsert( (SbxVariable*)xMethRef );
+ }
+}
+
+
+// Wert rausgeben
+Any SbUnoObject::getUnoAny( void )
+{
+ Any aRetAny;
+ if( bNeedIntrospection ) doIntrospection();
+ if( mxMaterialHolder.is() )
+ aRetAny = mxMaterialHolder->getMaterial();
+ else if( mxInvocation.is() )
+ aRetAny <<= mxInvocation;
+ return aRetAny;
+}
+
+// Hilfsmethode zum Anlegen einer Uno-Struct per CoreReflection
+SbUnoObject* Impl_CreateUnoStruct( const String& aClassName )
+{
+ // CoreReflection holen
+ Reference< XIdlReflection > xCoreReflection = getCoreReflection_Impl();
+ if( !xCoreReflection.is() )
+ return NULL;
+
+ // Klasse suchen
+ Reference< XIdlClass > xClass;
+ Reference< XHierarchicalNameAccess > xHarryName =
+ getCoreReflection_HierarchicalNameAccess_Impl();
+ if( xHarryName.is() && xHarryName->hasByHierarchicalName( aClassName ) )
+ xClass = xCoreReflection->forName( aClassName );
+ if( !xClass.is() )
+ return NULL;
+
+ // Ist es ueberhaupt ein struct?
+ TypeClass eType = xClass->getTypeClass();
+ if ( ( eType != TypeClass_STRUCT ) && ( eType != TypeClass_EXCEPTION ) )
+ return NULL;
+
+ // Instanz erzeugen
+ Any aNewAny;
+ xClass->createObject( aNewAny );
+
+ // SbUnoObject daraus basteln
+ SbUnoObject* pUnoObj = new SbUnoObject( aClassName, aNewAny );
+ return pUnoObj;
+}
+
+
+// Factory-Klasse fuer das Anlegen von Uno-Structs per DIM AS NEW
+SbxBase* SbUnoFactory::Create( UINT16, UINT32 )
+{
+ // Ueber SbxId laeuft in Uno nix
+ return NULL;
+}
+
+SbxObject* SbUnoFactory::CreateObject( const String& rClassName )
+{
+ return Impl_CreateUnoStruct( rClassName );
+}
+
+
+// Provisorische Schnittstelle fuer UNO-Anbindung
+// Liefert ein SbxObject, das ein Uno-Interface wrappt
+SbxObjectRef GetSbUnoObject( const String& aName, const Any& aUnoObj_ )
+{
+ return new SbUnoObject( aName, aUnoObj_ );
+}
+
+// Force creation of all properties for debugging
+void createAllObjectProperties( SbxObject* pObj )
+{
+ if( !pObj )
+ return;
+
+ SbUnoObject* pUnoObj = PTR_CAST(SbUnoObject,pObj);
+ if( pUnoObj )
+ pUnoObj->createAllProperties();
+ else
+ pObj->GetAll( SbxCLASS_DONTCARE );
+}
+
+
+void RTL_Impl_CreateUnoStruct( StarBASIC* pBasic, SbxArray& rPar, BOOL bWrite )
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ // Wir brauchen mindestens 1 Parameter
+ if ( rPar.Count() < 2 )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+
+ // Klassen-Name der struct holen
+ String aClassName = rPar.Get(1)->GetString();
+
+ // Versuchen, gleichnamige Struct zu erzeugen
+ SbUnoObjectRef xUnoObj = Impl_CreateUnoStruct( aClassName );
+ if( !xUnoObj )
+ return;
+
+ // Objekt zurueckliefern
+ SbxVariableRef refVar = rPar.Get(0);
+ refVar->PutObject( (SbUnoObject*)xUnoObj );
+}
+
+void RTL_Impl_CreateUnoService( StarBASIC* pBasic, SbxArray& rPar, BOOL bWrite )
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ // Wir brauchen mindestens 1 Parameter
+ if ( rPar.Count() < 2 )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+
+ // Klassen-Name der struct holen
+ String aServiceName = rPar.Get(1)->GetString();
+
+ // Service suchen und instanzieren
+ Reference< XMultiServiceFactory > xFactory( comphelper::getProcessServiceFactory() );
+ Reference< XInterface > xInterface;
+ if ( xFactory.is() )
+ {
+ try
+ {
+ xInterface = xFactory->createInstance( aServiceName );
+ }
+ catch( const Exception& )
+ {
+ implHandleAnyException( ::cppu::getCaughtException() );
+ }
+ }
+
+ SbxVariableRef refVar = rPar.Get(0);
+ if( xInterface.is() )
+ {
+ Any aAny;
+ aAny <<= xInterface;
+
+ // SbUnoObject daraus basteln und zurueckliefern
+ SbUnoObjectRef xUnoObj = new SbUnoObject( aServiceName, aAny );
+ if( xUnoObj->getUnoAny().getValueType().getTypeClass() != TypeClass_VOID )
+ {
+ // Objekt zurueckliefern
+ refVar->PutObject( (SbUnoObject*)xUnoObj );
+ }
+ else
+ {
+ refVar->PutObject( NULL );
+ }
+ }
+ else
+ {
+ refVar->PutObject( NULL );
+ }
+}
+
+void RTL_Impl_CreateUnoServiceWithArguments( StarBASIC* pBasic, SbxArray& rPar, BOOL bWrite )
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ // Wir brauchen mindestens 2 Parameter
+ if ( rPar.Count() < 3 )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+
+ // Klassen-Name der struct holen
+ String aServiceName = rPar.Get(1)->GetString();
+ Any aArgAsAny = sbxToUnoValue( rPar.Get(2),
+ getCppuType( (Sequence<Any>*)0 ) );
+ Sequence< Any > aArgs;
+ aArgAsAny >>= aArgs;
+
+ // Service suchen und instanzieren
+ Reference< XMultiServiceFactory > xFactory( comphelper::getProcessServiceFactory() );
+ Reference< XInterface > xInterface;
+ if ( xFactory.is() )
+ {
+ try
+ {
+ xInterface = xFactory->createInstanceWithArguments( aServiceName, aArgs );
+ }
+ catch( const Exception& )
+ {
+ implHandleAnyException( ::cppu::getCaughtException() );
+ }
+ }
+
+ SbxVariableRef refVar = rPar.Get(0);
+ if( xInterface.is() )
+ {
+ Any aAny;
+ aAny <<= xInterface;
+
+ // SbUnoObject daraus basteln und zurueckliefern
+ SbUnoObjectRef xUnoObj = new SbUnoObject( aServiceName, aAny );
+ if( xUnoObj->getUnoAny().getValueType().getTypeClass() != TypeClass_VOID )
+ {
+ // Objekt zurueckliefern
+ refVar->PutObject( (SbUnoObject*)xUnoObj );
+ }
+ else
+ {
+ refVar->PutObject( NULL );
+ }
+ }
+ else
+ {
+ refVar->PutObject( NULL );
+ }
+}
+
+void RTL_Impl_GetProcessServiceManager( StarBASIC* pBasic, SbxArray& rPar, BOOL bWrite )
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ SbxVariableRef refVar = rPar.Get(0);
+
+ // Globalen Service-Manager holen
+ Reference< XMultiServiceFactory > xFactory( comphelper::getProcessServiceFactory() );
+ if( xFactory.is() )
+ {
+ Any aAny;
+ aAny <<= xFactory;
+
+ // SbUnoObject daraus basteln und zurueckliefern
+ SbUnoObjectRef xUnoObj = new SbUnoObject( String( RTL_CONSTASCII_USTRINGPARAM("ProcessServiceManager") ), aAny );
+ refVar->PutObject( (SbUnoObject*)xUnoObj );
+ }
+ else
+ {
+ refVar->PutObject( NULL );
+ }
+}
+
+void RTL_Impl_HasInterfaces( StarBASIC* pBasic, SbxArray& rPar, BOOL bWrite )
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ // Wir brauchen mindestens 2 Parameter
+ USHORT nParCount = rPar.Count();
+ if( nParCount < 3 )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+
+ // Variable fuer Rueckgabewert
+ SbxVariableRef refVar = rPar.Get(0);
+ refVar->PutBool( FALSE );
+
+ // Uno-Objekt holen
+ SbxBaseRef pObj = (SbxBase*)rPar.Get( 1 )->GetObject();
+ if( !(pObj && pObj->ISA(SbUnoObject)) )
+ return;
+ Any aAny = ((SbUnoObject*)(SbxBase*)pObj)->getUnoAny();
+ TypeClass eType = aAny.getValueType().getTypeClass();
+ if( eType != TypeClass_INTERFACE )
+ return;
+
+ // Interface aus dem Any besorgen
+ Reference< XInterface > x = *(Reference< XInterface >*)aAny.getValue();
+
+ // CoreReflection holen
+ Reference< XIdlReflection > xCoreReflection = getCoreReflection_Impl();
+ if( !xCoreReflection.is() )
+ return;
+
+ for( USHORT i = 2 ; i < nParCount ; i++ )
+ {
+ // Interface-Name der struct holen
+ String aIfaceName = rPar.Get( i )->GetString();
+
+ // Klasse suchen
+ Reference< XIdlClass > xClass = xCoreReflection->forName( aIfaceName );
+ if( !xClass.is() )
+ return;
+
+ // Pruefen, ob das Interface unterstuetzt wird
+ ::rtl::OUString aClassName = xClass->getName();
+ Type aClassType( xClass->getTypeClass(), aClassName.getStr() );
+ if( !x->queryInterface( aClassType ).hasValue() )
+ return;
+ }
+
+ // Alles hat geklappt, dann TRUE liefern
+ refVar->PutBool( TRUE );
+}
+
+void RTL_Impl_IsUnoStruct( StarBASIC* pBasic, SbxArray& rPar, BOOL bWrite )
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ // Wir brauchen mindestens 1 Parameter
+ if ( rPar.Count() < 2 )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+
+ // Variable fuer Rueckgabewert
+ SbxVariableRef refVar = rPar.Get(0);
+ refVar->PutBool( FALSE );
+
+ // Uno-Objekt holen
+ SbxVariableRef xParam = rPar.Get( 1 );
+ if( !xParam->IsObject() )
+ return;
+ SbxBaseRef pObj = (SbxBase*)rPar.Get( 1 )->GetObject();
+ if( !(pObj && pObj->ISA(SbUnoObject)) )
+ return;
+ Any aAny = ((SbUnoObject*)(SbxBase*)pObj)->getUnoAny();
+ TypeClass eType = aAny.getValueType().getTypeClass();
+ if( eType == TypeClass_STRUCT )
+ refVar->PutBool( TRUE );
+}
+
+
+void RTL_Impl_EqualUnoObjects( StarBASIC* pBasic, SbxArray& rPar, BOOL bWrite )
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() < 3 )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+
+ // Variable fuer Rueckgabewert
+ SbxVariableRef refVar = rPar.Get(0);
+ refVar->PutBool( FALSE );
+
+ // Uno-Objekte holen
+ SbxVariableRef xParam1 = rPar.Get( 1 );
+ if( !xParam1->IsObject() )
+ return;
+ SbxBaseRef pObj1 = (SbxBase*)xParam1->GetObject();
+ if( !(pObj1 && pObj1->ISA(SbUnoObject)) )
+ return;
+ Any aAny1 = ((SbUnoObject*)(SbxBase*)pObj1)->getUnoAny();
+ TypeClass eType1 = aAny1.getValueType().getTypeClass();
+ if( eType1 != TypeClass_INTERFACE )
+ return;
+ Reference< XInterface > x1;
+ aAny1 >>= x1;
+ //XInterfaceRef x1 = *(XInterfaceRef*)aAny1.get();
+
+ SbxVariableRef xParam2 = rPar.Get( 2 );
+ if( !xParam2->IsObject() )
+ return;
+ SbxBaseRef pObj2 = (SbxBase*)xParam2->GetObject();
+ if( !(pObj2 && pObj2->ISA(SbUnoObject)) )
+ return;
+ Any aAny2 = ((SbUnoObject*)(SbxBase*)pObj2)->getUnoAny();
+ TypeClass eType2 = aAny2.getValueType().getTypeClass();
+ if( eType2 != TypeClass_INTERFACE )
+ return;
+ Reference< XInterface > x2;
+ aAny2 >>= x2;
+ //XInterfaceRef x2 = *(XInterfaceRef*)aAny2.get();
+
+ if( x1 == x2 )
+ refVar->PutBool( TRUE );
+}
+
+typedef std::hash_map< ::rtl::OUString, std::vector< ::rtl::OUString >, ::rtl::OUStringHash, ::std::equal_to< ::rtl::OUString > > ModuleHash;
+
+
+// helper wrapper function to interact with TypeProvider and
+// XTypeDescriptionEnumerationAccess.
+// if it fails for whatever reason
+// returned Reference<> be null e.g. .is() will be false
+
+Reference< XTypeDescriptionEnumeration >
+getTypeDescriptorEnumeration( const ::rtl::OUString& sSearchRoot,
+ const Sequence< TypeClass >& types, TypeDescriptionSearchDepth depth )
+{
+ Reference< XTypeDescriptionEnumeration > xEnum;
+ Reference< XTypeDescriptionEnumerationAccess> xTypeEnumAccess( getTypeProvider_Impl(), UNO_QUERY );
+ if ( xTypeEnumAccess.is() )
+ {
+ try
+ {
+ xEnum = xTypeEnumAccess->createTypeDescriptionEnumeration(
+ sSearchRoot, types, depth );
+ }
+ catch( NoSuchTypeNameException& /*nstne*/ ) {}
+ catch( InvalidTypeNameException& /*nstne*/ ) {}
+ }
+ return xEnum;
+}
+
+typedef std::hash_map< ::rtl::OUString, Any, ::rtl::OUStringHash, ::std::equal_to< ::rtl::OUString > > VBAConstantsHash;
+
+SbxVariable* getVBAConstant( const String& rName )
+{
+ SbxVariable* pConst = NULL;
+ static VBAConstantsHash aConstCache;
+ static bool isInited = false;
+ if ( !isInited )
+ {
+ Sequence< TypeClass > types(1);
+ types[ 0 ] = TypeClass_CONSTANTS;
+ Reference< XTypeDescriptionEnumeration > xEnum = getTypeDescriptorEnumeration( defaultNameSpace, types, TypeDescriptionSearchDepth_INFINITE );
+
+ if ( !xEnum.is() )
+ return NULL;
+
+ while ( xEnum->hasMoreElements() )
+ {
+ Reference< XConstantsTypeDescription > xConstants( xEnum->nextElement(), UNO_QUERY );
+ if ( xConstants.is() )
+ {
+ Sequence< Reference< XConstantTypeDescription > > aConsts = xConstants->getConstants();
+ Reference< XConstantTypeDescription >* pSrc = aConsts.getArray();
+ sal_Int32 nLen = aConsts.getLength();
+ for ( sal_Int32 index =0; index<nLen; ++pSrc, ++index )
+ {
+ Reference< XConstantTypeDescription >& rXConst =
+ *pSrc;
+ ::rtl::OUString sFullName = rXConst->getName();
+ sal_Int32 indexLastDot = sFullName.lastIndexOf('.');
+ ::rtl::OUString sLeafName;
+ if ( indexLastDot > -1 )
+ sLeafName = sFullName.copy( indexLastDot + 1);
+ aConstCache[ sLeafName.toAsciiLowerCase() ] = rXConst->getConstantValue();
+ }
+ }
+ }
+ isInited = true;
+ }
+ ::rtl::OUString sKey( rName );
+ VBAConstantsHash::const_iterator it = aConstCache.find( sKey.toAsciiLowerCase() );
+ if ( it != aConstCache.end() )
+ {
+ pConst = new SbxVariable( SbxVARIANT );
+ pConst->SetName( rName );
+ unoToSbxValue( pConst, it->second );
+ }
+ return pConst;
+}
+
+// Funktion, um einen globalen Bezeichner im
+// UnoScope zu suchen und fuer Sbx zu wrappen
+SbUnoClass* findUnoClass( const String& rName )
+{
+ // #105550 Check if module exists
+ SbUnoClass* pUnoClass = NULL;
+
+ Reference< XHierarchicalNameAccess > xTypeAccess = getTypeProvider_Impl();
+ if( xTypeAccess->hasByHierarchicalName( rName ) )
+ {
+ Any aRet = xTypeAccess->getByHierarchicalName( rName );
+ Reference< XTypeDescription > xTypeDesc;
+ aRet >>= xTypeDesc;
+
+ if( xTypeDesc.is() )
+ {
+ TypeClass eTypeClass = xTypeDesc->getTypeClass();
+ if( eTypeClass == TypeClass_MODULE || eTypeClass == TypeClass_CONSTANTS )
+ pUnoClass = new SbUnoClass( rName );
+ }
+ }
+ return pUnoClass;
+}
+
+SbxVariable* SbUnoClass::Find( const XubString& rName, SbxClassType t )
+{
+ (void)t;
+
+ SbxVariable* pRes = SbxObject::Find( rName, SbxCLASS_VARIABLE );
+
+ // Wenn nichts gefunden wird, ist das Sub-Modul noch nicht bekannt
+ if( !pRes )
+ {
+ // Wenn es schon eine Klasse ist, nach einen Feld fragen
+ if( m_xClass.is() )
+ {
+ // Ist es ein Field
+ ::rtl::OUString aUStr( rName );
+ Reference< XIdlField > xField = m_xClass->getField( aUStr );
+ Reference< XIdlClass > xClass;
+ if( xField.is() )
+ {
+ try
+ {
+ Any aAny;
+ aAny = xField->get( aAny );
+
+ // Nach Sbx wandeln
+ pRes = new SbxVariable( SbxVARIANT );
+ pRes->SetName( rName );
+ unoToSbxValue( pRes, aAny );
+ }
+ catch( const Exception& )
+ {
+ implHandleAnyException( ::cppu::getCaughtException() );
+ }
+ }
+ }
+ else
+ {
+ // Vollqualifizierten Namen erweitern
+ String aNewName = GetName();
+ aNewName.AppendAscii( "." );
+ aNewName += rName;
+
+ // CoreReflection holen
+ Reference< XIdlReflection > xCoreReflection = getCoreReflection_Impl();
+ if( xCoreReflection.is() )
+ {
+ // Ist es eine Konstante?
+ Reference< XHierarchicalNameAccess > xHarryName( xCoreReflection, UNO_QUERY );
+ if( xHarryName.is() )
+ {
+ try
+ {
+ Any aValue = xHarryName->getByHierarchicalName( aNewName );
+ TypeClass eType = aValue.getValueType().getTypeClass();
+
+ // Interface gefunden? Dann ist es eine Klasse
+ if( eType == TypeClass_INTERFACE )
+ {
+ Reference< XInterface > xIface = *(Reference< XInterface >*)aValue.getValue();
+ Reference< XIdlClass > xClass( xIface, UNO_QUERY );
+ if( xClass.is() )
+ {
+ pRes = new SbxVariable( SbxVARIANT );
+ SbxObjectRef xWrapper = (SbxObject*)new SbUnoClass( aNewName, xClass );
+ pRes->PutObject( xWrapper );
+ }
+ }
+ else
+ {
+ pRes = new SbxVariable( SbxVARIANT );
+ unoToSbxValue( pRes, aValue );
+ }
+ }
+ catch( NoSuchElementException& e1 )
+ {
+ String aMsg = implGetExceptionMsg( e1 );
+ }
+ }
+
+ // Sonst wieder als Klasse annehmen
+ if( !pRes )
+ {
+ SbUnoClass* pNewClass = findUnoClass( aNewName );
+ if( pNewClass )
+ {
+ pRes = new SbxVariable( SbxVARIANT );
+ SbxObjectRef xWrapper = (SbxObject*)pNewClass;
+ pRes->PutObject( xWrapper );
+ }
+ }
+
+ // An UNO service?
+ if( !pRes )
+ {
+ SbUnoService* pUnoService = findUnoService( aNewName );
+ if( pUnoService )
+ {
+ pRes = new SbxVariable( SbxVARIANT );
+ SbxObjectRef xWrapper = (SbxObject*)pUnoService;
+ pRes->PutObject( xWrapper );
+ }
+ }
+
+ // An UNO singleton?
+ if( !pRes )
+ {
+ SbUnoSingleton* pUnoSingleton = findUnoSingleton( aNewName );
+ if( pUnoSingleton )
+ {
+ pRes = new SbxVariable( SbxVARIANT );
+ SbxObjectRef xWrapper = (SbxObject*)pUnoSingleton;
+ pRes->PutObject( xWrapper );
+ }
+ }
+ }
+ }
+
+ if( pRes )
+ {
+ pRes->SetName( rName );
+
+ // Variable einfuegen, damit sie spaeter im Find gefunden wird
+ QuickInsert( pRes );
+
+ // Uns selbst gleich wieder als Listener rausnehmen,
+ // die Werte sind alle konstant
+ if( pRes->IsBroadcaster() )
+ EndListening( pRes->GetBroadcaster(), TRUE );
+ }
+ }
+ return pRes;
+}
+
+
+SbUnoService* findUnoService( const String& rName )
+{
+ SbUnoService* pSbUnoService = NULL;
+
+ Reference< XHierarchicalNameAccess > xTypeAccess = getTypeProvider_Impl();
+ if( xTypeAccess->hasByHierarchicalName( rName ) )
+ {
+ Any aRet = xTypeAccess->getByHierarchicalName( rName );
+ Reference< XTypeDescription > xTypeDesc;
+ aRet >>= xTypeDesc;
+
+ if( xTypeDesc.is() )
+ {
+ TypeClass eTypeClass = xTypeDesc->getTypeClass();
+ if( eTypeClass == TypeClass_SERVICE )
+ {
+ Reference< XServiceTypeDescription2 > xServiceTypeDesc( xTypeDesc, UNO_QUERY );
+ if( xServiceTypeDesc.is() )
+ pSbUnoService = new SbUnoService( rName, xServiceTypeDesc );
+ }
+ }
+ }
+ return pSbUnoService;
+}
+
+SbxVariable* SbUnoService::Find( const String& rName, SbxClassType )
+{
+ SbxVariable* pRes = SbxObject::Find( rName, SbxCLASS_METHOD );
+
+ if( !pRes )
+ {
+ // Wenn es schon eine Klasse ist, nach einen Feld fragen
+ if( m_bNeedsInit && m_xServiceTypeDesc.is() )
+ {
+ m_bNeedsInit = false;
+
+ Sequence< Reference< XServiceConstructorDescription > > aSCDSeq = m_xServiceTypeDesc->getConstructors();
+ const Reference< XServiceConstructorDescription >* pCtorSeq = aSCDSeq.getConstArray();
+ int nCtorCount = aSCDSeq.getLength();
+ for( int i = 0 ; i < nCtorCount ; ++i )
+ {
+ Reference< XServiceConstructorDescription > xCtor = pCtorSeq[i];
+
+ String aName( xCtor->getName() );
+ if( !aName.Len() )
+ {
+ if( xCtor->isDefaultConstructor() )
+ aName = String::CreateFromAscii( "create" );
+ }
+
+ if( aName.Len() )
+ {
+ // Create and insert SbUnoServiceCtor
+ SbxVariableRef xSbCtorRef = new SbUnoServiceCtor( aName, xCtor );
+ QuickInsert( (SbxVariable*)xSbCtorRef );
+ }
+ }
+
+ pRes = SbxObject::Find( rName, SbxCLASS_METHOD );
+ }
+ }
+
+ return pRes;
+}
+
+void SbUnoService::SFX_NOTIFY( SfxBroadcaster& rBC, const TypeId& rBCType,
+ const SfxHint& rHint, const TypeId& rHintType )
+{
+ const SbxHint* pHint = PTR_CAST(SbxHint,&rHint);
+ if( pHint )
+ {
+ SbxVariable* pVar = pHint->GetVar();
+ SbxArray* pParams = pVar->GetParameters();
+ SbUnoServiceCtor* pUnoCtor = PTR_CAST(SbUnoServiceCtor,pVar);
+ if( pUnoCtor && pHint->GetId() == SBX_HINT_DATAWANTED )
+ {
+ // Parameter count -1 because of Param0 == this
+ UINT32 nParamCount = pParams ? ((UINT32)pParams->Count() - 1) : 0;
+ Sequence<Any> args;
+ BOOL bOutParams = FALSE;
+
+ Reference< XServiceConstructorDescription > xCtor = pUnoCtor->getServiceCtorDesc();
+ Sequence< Reference< XParameter > > aParameterSeq = xCtor->getParameters();
+ const Reference< XParameter >* pParameterSeq = aParameterSeq.getConstArray();
+ UINT32 nUnoParamCount = aParameterSeq.getLength();
+
+ // Default: Ignore not needed parameters
+ bool bParameterError = false;
+
+ // Is the last parameter a rest parameter?
+ bool bRestParameterMode = false;
+ if( nUnoParamCount > 0 )
+ {
+ Reference< XParameter > xLastParam = pParameterSeq[ nUnoParamCount - 1 ];
+ if( xLastParam.is() )
+ {
+ if( xLastParam->isRestParameter() )
+ bRestParameterMode = true;
+ }
+ }
+
+ // Too many parameters with context as first parameter?
+ USHORT nSbxParameterOffset = 1;
+ USHORT nParameterOffsetByContext = 0;
+ Reference < XComponentContext > xFirstParamContext;
+ if( nParamCount > nUnoParamCount )
+ {
+ // Check if first parameter is a context and use it
+ // then in createInstanceWithArgumentsAndContext
+ Any aArg0 = sbxToUnoValue( pParams->Get( nSbxParameterOffset ) );
+ if( (aArg0 >>= xFirstParamContext) && xFirstParamContext.is() )
+ nParameterOffsetByContext = 1;
+ }
+
+ UINT32 nEffectiveParamCount = nParamCount - nParameterOffsetByContext;
+ UINT32 nAllocParamCount = nEffectiveParamCount;
+ if( nEffectiveParamCount > nUnoParamCount )
+ {
+ if( !bRestParameterMode )
+ {
+ nEffectiveParamCount = nUnoParamCount;
+ nAllocParamCount = nUnoParamCount;
+ }
+ }
+ // Not enough parameters?
+ else if( nUnoParamCount > nEffectiveParamCount )
+ {
+ // RestParameterMode only helps if one (the last) parameter is missing
+ int nDiff = nUnoParamCount - nEffectiveParamCount;
+ if( !bRestParameterMode || nDiff > 1 )
+ {
+ bParameterError = true;
+ StarBASIC::Error( SbERR_NOT_OPTIONAL );
+ }
+ }
+
+ if( !bParameterError )
+ {
+ if( nAllocParamCount > 0 )
+ {
+ args.realloc( nAllocParamCount );
+ Any* pAnyArgs = args.getArray();
+ for( UINT32 i = 0 ; i < nEffectiveParamCount ; i++ )
+ {
+ USHORT iSbx = (USHORT)(i + nSbxParameterOffset + nParameterOffsetByContext);
+
+ // bRestParameterMode allows nEffectiveParamCount > nUnoParamCount
+ Reference< XParameter > xParam;
+ if( i < nUnoParamCount )
+ {
+ xParam = pParameterSeq[i];
+ if( !xParam.is() )
+ continue;
+
+ Reference< XTypeDescription > xParamTypeDesc = xParam->getType();
+ if( !xParamTypeDesc.is() )
+ continue;
+ com::sun::star::uno::Type aType( xParamTypeDesc->getTypeClass(), xParamTypeDesc->getName() );
+
+ // sbx paramter needs offset 1
+ pAnyArgs[i] = sbxToUnoValue( pParams->Get( iSbx ), aType );
+
+ // Check for out parameter if not already done
+ if( !bOutParams )
+ {
+ if( xParam->isOut() )
+ bOutParams = TRUE;
+ }
+ }
+ else
+ {
+ pAnyArgs[i] = sbxToUnoValue( pParams->Get( iSbx ) );
+ }
+ }
+ }
+
+ // "Call" ctor using createInstanceWithArgumentsAndContext
+ Reference < XComponentContext > xContext;
+ if( xFirstParamContext.is() )
+ {
+ xContext = xFirstParamContext;
+ }
+ else
+ {
+ Reference < XPropertySet > xProps( ::comphelper::getProcessServiceFactory(), UNO_QUERY_THROW );
+ xContext.set( xProps->getPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "DefaultContext" )) ), UNO_QUERY_THROW );
+ }
+ Reference< XMultiComponentFactory > xServiceMgr( xContext->getServiceManager() );
+
+ Any aRetAny;
+ if( xServiceMgr.is() )
+ {
+ String aServiceName = GetName();
+ Reference < XInterface > xRet;
+ try
+ {
+ xRet = xServiceMgr->createInstanceWithArgumentsAndContext( aServiceName, args, xContext );
+ }
+ catch( const Exception& )
+ {
+ implHandleAnyException( ::cppu::getCaughtException() );
+ }
+ aRetAny <<= xRet;
+ }
+ unoToSbxValue( pVar, aRetAny );
+
+ // Copy back out parameters?
+ if( bOutParams )
+ {
+ const Any* pAnyArgs = args.getConstArray();
+
+ for( UINT32 j = 0 ; j < nUnoParamCount ; j++ )
+ {
+ Reference< XParameter > xParam = pParameterSeq[j];
+ if( !xParam.is() )
+ continue;
+
+ if( xParam->isOut() )
+ unoToSbxValue( (SbxVariable*)pParams->Get( (USHORT)(j+1) ), pAnyArgs[ j ] );
+ }
+ }
+ }
+ }
+ else
+ SbxObject::SFX_NOTIFY( rBC, rBCType, rHint, rHintType );
+ }
+}
+
+
+
+static SbUnoServiceCtor* pFirstCtor = NULL;
+
+void clearUnoServiceCtors( void )
+{
+ SbUnoServiceCtor* pCtor = pFirstCtor;
+ while( pCtor )
+ {
+ pCtor->SbxValue::Clear();
+ pCtor = pCtor->pNext;
+ }
+}
+
+SbUnoServiceCtor::SbUnoServiceCtor( const String& aName_, Reference< XServiceConstructorDescription > xServiceCtorDesc )
+ : SbxMethod( aName_, SbxOBJECT )
+ , m_xServiceCtorDesc( xServiceCtorDesc )
+{
+}
+
+SbUnoServiceCtor::~SbUnoServiceCtor()
+{
+}
+
+SbxInfo* SbUnoServiceCtor::GetInfo()
+{
+ SbxInfo* pRet = NULL;
+
+ return pRet;
+}
+
+
+SbUnoSingleton* findUnoSingleton( const String& rName )
+{
+ SbUnoSingleton* pSbUnoSingleton = NULL;
+
+ Reference< XHierarchicalNameAccess > xTypeAccess = getTypeProvider_Impl();
+ if( xTypeAccess->hasByHierarchicalName( rName ) )
+ {
+ Any aRet = xTypeAccess->getByHierarchicalName( rName );
+ Reference< XTypeDescription > xTypeDesc;
+ aRet >>= xTypeDesc;
+
+ if( xTypeDesc.is() )
+ {
+ TypeClass eTypeClass = xTypeDesc->getTypeClass();
+ if( eTypeClass == TypeClass_SINGLETON )
+ {
+ Reference< XSingletonTypeDescription > xSingletonTypeDesc( xTypeDesc, UNO_QUERY );
+ if( xSingletonTypeDesc.is() )
+ pSbUnoSingleton = new SbUnoSingleton( rName, xSingletonTypeDesc );
+ }
+ }
+ }
+ return pSbUnoSingleton;
+}
+
+SbUnoSingleton::SbUnoSingleton( const String& aName_,
+ const Reference< XSingletonTypeDescription >& xSingletonTypeDesc )
+ : SbxObject( aName_ )
+ , m_xSingletonTypeDesc( xSingletonTypeDesc )
+{
+ SbxVariableRef xGetMethodRef =
+ new SbxMethod( String( RTL_CONSTASCII_USTRINGPARAM( "get" ) ), SbxOBJECT );
+ QuickInsert( (SbxVariable*)xGetMethodRef );
+}
+
+void SbUnoSingleton::SFX_NOTIFY( SfxBroadcaster& rBC, const TypeId& rBCType,
+ const SfxHint& rHint, const TypeId& rHintType )
+{
+ const SbxHint* pHint = PTR_CAST(SbxHint,&rHint);
+ if( pHint )
+ {
+ SbxVariable* pVar = pHint->GetVar();
+ SbxArray* pParams = pVar->GetParameters();
+ UINT32 nParamCount = pParams ? ((UINT32)pParams->Count() - 1) : 0;
+ UINT32 nAllowedParamCount = 1;
+
+ Reference < XComponentContext > xContextToUse;
+ if( nParamCount > 0 )
+ {
+ // Check if first parameter is a context and use it then
+ Reference < XComponentContext > xFirstParamContext;
+ Any aArg1 = sbxToUnoValue( pParams->Get( 1 ) );
+ if( (aArg1 >>= xFirstParamContext) && xFirstParamContext.is() )
+ xContextToUse = xFirstParamContext;
+ }
+
+ if( !xContextToUse.is() )
+ {
+ Reference < XPropertySet > xProps( ::comphelper::getProcessServiceFactory(), UNO_QUERY_THROW );
+ xContextToUse.set( xProps->getPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "DefaultContext" )) ), UNO_QUERY_THROW );
+ --nAllowedParamCount;
+ }
+
+ if( nParamCount > nAllowedParamCount )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+
+ Any aRetAny;
+ if( xContextToUse.is() )
+ {
+ String aSingletonName( RTL_CONSTASCII_USTRINGPARAM("/singletons/") );
+ aSingletonName += GetName();
+ Reference < XInterface > xRet;
+ xContextToUse->getValueByName( aSingletonName ) >>= xRet;
+ aRetAny <<= xRet;
+ }
+ unoToSbxValue( pVar, aRetAny );
+ }
+ else
+ SbxObject::SFX_NOTIFY( rBC, rBCType, rHint, rHintType );
+}
+
+
+//========================================================================
+//========================================================================
+//========================================================================
+
+// Implementation eines EventAttacher-bezogenen AllListeners, der
+// nur einzelne Events an einen allgemeinen AllListener weiterleitet
+class BasicAllListener_Impl : public BasicAllListenerHelper
+{
+ virtual void firing_impl(const AllEventObject& Event, Any* pRet);
+
+public:
+ SbxObjectRef xSbxObj;
+ ::rtl::OUString aPrefixName;
+
+ BasicAllListener_Impl( const ::rtl::OUString& aPrefixName );
+ ~BasicAllListener_Impl();
+
+ // Methoden von XInterface
+ //virtual BOOL queryInterface( Uik aUik, Reference< XInterface > & rOut );
+
+ // Methoden von XAllListener
+ virtual void SAL_CALL firing(const AllEventObject& Event) throw ( RuntimeException );
+ virtual Any SAL_CALL approveFiring(const AllEventObject& Event) throw ( RuntimeException );
+
+ // Methoden von XEventListener
+ virtual void SAL_CALL disposing(const EventObject& Source) throw ( RuntimeException );
+};
+
+
+//========================================================================
+BasicAllListener_Impl::BasicAllListener_Impl
+(
+ const ::rtl::OUString & aPrefixName_
+)
+ : aPrefixName( aPrefixName_ )
+{
+}
+
+//========================================================================
+BasicAllListener_Impl::~BasicAllListener_Impl()
+{
+}
+
+//========================================================================
+
+void BasicAllListener_Impl::firing_impl( const AllEventObject& Event, Any* pRet )
+{
+ NAMESPACE_VOS(OGuard) guard( Application::GetSolarMutex() );
+
+ if( xSbxObj.Is() )
+ {
+ ::rtl::OUString aMethodName = aPrefixName;
+ aMethodName = aMethodName + Event.MethodName;
+
+ SbxVariable * pP = xSbxObj;
+ while( pP->GetParent() )
+ {
+ pP = pP->GetParent();
+ StarBASIC * pLib = PTR_CAST(StarBASIC,pP);
+ if( pLib )
+ {
+ // In Basic Array anlegen
+ SbxArrayRef xSbxArray = new SbxArray( SbxVARIANT );
+ const Any * pArgs = Event.Arguments.getConstArray();
+ INT32 nCount = Event.Arguments.getLength();
+ for( INT32 i = 0; i < nCount; i++ )
+ {
+ // Elemente wandeln
+ SbxVariableRef xVar = new SbxVariable( SbxVARIANT );
+ unoToSbxValue( (SbxVariable*)xVar, pArgs[i] );
+ xSbxArray->Put( xVar, sal::static_int_cast< USHORT >(i+1) );
+ }
+
+ pLib->Call( aMethodName, xSbxArray );
+
+ // Return-Wert aus dem Param-Array holen, wenn verlangt
+ if( pRet )
+ {
+ SbxVariable* pVar = xSbxArray->Get( 0 );
+ if( pVar )
+ {
+ // #95792 Avoid a second call
+ USHORT nFlags = pVar->GetFlags();
+ pVar->SetFlag( SBX_NO_BROADCAST );
+ *pRet = sbxToUnoValueImpl( pVar );
+ pVar->SetFlags( nFlags );
+ }
+ }
+ break;
+ }
+ }
+ }
+}
+
+
+// Methoden von XAllListener
+void BasicAllListener_Impl::firing( const AllEventObject& Event ) throw ( RuntimeException )
+{
+ firing_impl( Event, NULL );
+}
+
+Any BasicAllListener_Impl::approveFiring( const AllEventObject& Event ) throw ( RuntimeException )
+{
+ Any aRetAny;
+ firing_impl( Event, &aRetAny );
+ return aRetAny;
+}
+
+//========================================================================
+// Methoden von XEventListener
+void BasicAllListener_Impl ::disposing(const EventObject& ) throw ( RuntimeException )
+{
+ NAMESPACE_VOS(OGuard) guard( Application::GetSolarMutex() );
+
+ xSbxObj.Clear();
+}
+
+
+
+//*************************************************************************
+// class InvocationToAllListenerMapper
+// helper class to map XInvocation to XAllListener (also in project eventattacher!)
+//*************************************************************************
+class InvocationToAllListenerMapper : public WeakImplHelper1< XInvocation >
+{
+public:
+ InvocationToAllListenerMapper( const Reference< XIdlClass >& ListenerType,
+ const Reference< XAllListener >& AllListener, const Any& Helper );
+
+ // XInvocation
+ virtual Reference< XIntrospectionAccess > SAL_CALL getIntrospection(void) throw( RuntimeException );
+ virtual Any SAL_CALL invoke(const ::rtl::OUString& FunctionName, const Sequence< Any >& Params, Sequence< sal_Int16 >& OutParamIndex, Sequence< Any >& OutParam)
+ throw( IllegalArgumentException, CannotConvertException, InvocationTargetException, RuntimeException );
+ virtual void SAL_CALL setValue(const ::rtl::OUString& PropertyName, const Any& Value)
+ throw( UnknownPropertyException, CannotConvertException, InvocationTargetException, RuntimeException );
+ virtual Any SAL_CALL getValue(const ::rtl::OUString& PropertyName) throw( UnknownPropertyException, RuntimeException );
+ virtual sal_Bool SAL_CALL hasMethod(const ::rtl::OUString& Name) throw( RuntimeException );
+ virtual sal_Bool SAL_CALL hasProperty(const ::rtl::OUString& Name) throw( RuntimeException );
+
+private:
+ Reference< XIdlReflection > m_xCoreReflection;
+ Reference< XAllListener > m_xAllListener;
+ Reference< XIdlClass > m_xListenerType;
+ Any m_Helper;
+};
+
+
+// Function to replace AllListenerAdapterService::createAllListerAdapter
+Reference< XInterface > createAllListenerAdapter
+(
+ const Reference< XInvocationAdapterFactory >& xInvocationAdapterFactory,
+ const Reference< XIdlClass >& xListenerType,
+ const Reference< XAllListener >& xListener,
+ const Any& Helper
+)
+{
+ Reference< XInterface > xAdapter;
+ if( xInvocationAdapterFactory.is() && xListenerType.is() && xListener.is() )
+ {
+ Reference< XInvocation > xInvocationToAllListenerMapper =
+ (XInvocation*)new InvocationToAllListenerMapper( xListenerType, xListener, Helper );
+ Type aListenerType( xListenerType->getTypeClass(), xListenerType->getName() );
+ xAdapter = xInvocationAdapterFactory->createAdapter( xInvocationToAllListenerMapper, aListenerType );
+ }
+ return xAdapter;
+}
+
+
+//--------------------------------------------------------------------------------------------------
+// InvocationToAllListenerMapper
+InvocationToAllListenerMapper::InvocationToAllListenerMapper
+ ( const Reference< XIdlClass >& ListenerType, const Reference< XAllListener >& AllListener, const Any& Helper )
+ : m_xAllListener( AllListener )
+ , m_xListenerType( ListenerType )
+ , m_Helper( Helper )
+{
+}
+
+//*************************************************************************
+Reference< XIntrospectionAccess > SAL_CALL InvocationToAllListenerMapper::getIntrospection(void)
+ throw( RuntimeException )
+{
+ return Reference< XIntrospectionAccess >();
+}
+
+//*************************************************************************
+Any SAL_CALL InvocationToAllListenerMapper::invoke(const ::rtl::OUString& FunctionName, const Sequence< Any >& Params,
+ Sequence< sal_Int16 >& OutParamIndex, Sequence< Any >& OutParam)
+ throw( IllegalArgumentException, CannotConvertException,
+ InvocationTargetException, RuntimeException )
+{
+ (void)OutParamIndex;
+ (void)OutParam ;
+
+ Any aRet;
+
+ // Check if to firing or approveFiring has to be called
+ Reference< XIdlMethod > xMethod = m_xListenerType->getMethod( FunctionName );
+ sal_Bool bApproveFiring = sal_False;
+ if( !xMethod.is() )
+ return aRet;
+ Reference< XIdlClass > xReturnType = xMethod->getReturnType();
+ Sequence< Reference< XIdlClass > > aExceptionSeq = xMethod->getExceptionTypes();
+ if( ( xReturnType.is() && xReturnType->getTypeClass() != TypeClass_VOID ) ||
+ aExceptionSeq.getLength() > 0 )
+ {
+ bApproveFiring = sal_True;
+ }
+ else
+ {
+ Sequence< ParamInfo > aParamSeq = xMethod->getParameterInfos();
+ sal_uInt32 nParamCount = aParamSeq.getLength();
+ if( nParamCount > 1 )
+ {
+ const ParamInfo* pInfos = aParamSeq.getConstArray();
+ for( sal_uInt32 i = 0 ; i < nParamCount ; i++ )
+ {
+ if( pInfos[ i ].aMode != ParamMode_IN )
+ {
+ bApproveFiring = sal_True;
+ break;
+ }
+ }
+ }
+ }
+
+ AllEventObject aAllEvent;
+ aAllEvent.Source = (OWeakObject*) this;
+ aAllEvent.Helper = m_Helper;
+ aAllEvent.ListenerType = Type(m_xListenerType->getTypeClass(), m_xListenerType->getName() );
+ aAllEvent.MethodName = FunctionName;
+ aAllEvent.Arguments = Params;
+ if( bApproveFiring )
+ aRet = m_xAllListener->approveFiring( aAllEvent );
+ else
+ m_xAllListener->firing( aAllEvent );
+ return aRet;
+}
+
+//*************************************************************************
+void SAL_CALL InvocationToAllListenerMapper::setValue(const ::rtl::OUString& PropertyName, const Any& Value)
+ throw( UnknownPropertyException, CannotConvertException,
+ InvocationTargetException, RuntimeException )
+{
+ (void)PropertyName;
+ (void)Value;
+}
+
+//*************************************************************************
+Any SAL_CALL InvocationToAllListenerMapper::getValue(const ::rtl::OUString& PropertyName)
+ throw( UnknownPropertyException, RuntimeException )
+{
+ (void)PropertyName;
+
+ return Any();
+}
+
+//*************************************************************************
+sal_Bool SAL_CALL InvocationToAllListenerMapper::hasMethod(const ::rtl::OUString& Name)
+ throw( RuntimeException )
+{
+ Reference< XIdlMethod > xMethod = m_xListenerType->getMethod( Name );
+ return xMethod.is();
+}
+
+//*************************************************************************
+sal_Bool SAL_CALL InvocationToAllListenerMapper::hasProperty(const ::rtl::OUString& Name)
+ throw( RuntimeException )
+{
+ Reference< XIdlField > xField = m_xListenerType->getField( Name );
+ return xField.is();
+}
+
+//========================================================================
+// Uno-Service erzeugen
+// 1. Parameter == Prefix-Name der Makros
+// 2. Parameter == voll qualifizierter Name des Listeners
+void SbRtl_CreateUnoListener( StarBASIC* pBasic, SbxArray& rPar, BOOL bWrite )
+//RTLFUNC(CreateUnoListener)
+{
+ (void)bWrite;
+
+ // Wir brauchen 2 Parameter
+ if ( rPar.Count() != 3 )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+
+ // Klassen-Name der struct holen
+ String aPrefixName = rPar.Get(1)->GetString();
+ String aListenerClassName = rPar.Get(2)->GetString();
+
+ // CoreReflection holen
+ Reference< XIdlReflection > xCoreReflection = getCoreReflection_Impl();
+ if( !xCoreReflection.is() )
+ return;
+
+ // AllListenerAdapterService holen
+ Reference< XMultiServiceFactory > xFactory( comphelper::getProcessServiceFactory() );
+ if( !xFactory.is() )
+ return;
+
+ // Klasse suchen
+ Reference< XIdlClass > xClass = xCoreReflection->forName( aListenerClassName );
+ if( !xClass.is() )
+ return;
+
+ // AB, 30.11.1999 InvocationAdapterFactory holen
+ Reference< XInvocationAdapterFactory > xInvocationAdapterFactory = Reference< XInvocationAdapterFactory >(
+ xFactory->createInstance( rtl::OUString::createFromAscii("com.sun.star.script.InvocationAdapterFactory") ), UNO_QUERY );
+
+ BasicAllListener_Impl * p;
+ Reference< XAllListener > xAllLst = p = new BasicAllListener_Impl( aPrefixName );
+ Any aTmp;
+ Reference< XInterface > xLst = createAllListenerAdapter( xInvocationAdapterFactory, xClass, xAllLst, aTmp );
+ if( !xLst.is() )
+ return;
+
+ ::rtl::OUString aClassName = xClass->getName();
+ Type aClassType( xClass->getTypeClass(), aClassName.getStr() );
+ aTmp = xLst->queryInterface( aClassType );
+ if( !aTmp.hasValue() )
+ return;
+
+ SbUnoObject* pUnoObj = new SbUnoObject( aListenerClassName, aTmp );
+ p->xSbxObj = pUnoObj;
+ p->xSbxObj->SetParent( pBasic );
+
+ // #100326 Register listener object to set Parent NULL in Dtor
+ SbxArrayRef xBasicUnoListeners = pBasic->getUnoListeners();
+ xBasicUnoListeners->Insert( pUnoObj, xBasicUnoListeners->Count() );
+
+ // Objekt zurueckliefern
+ SbxVariableRef refVar = rPar.Get(0);
+ refVar->PutObject( p->xSbxObj );
+}
+
+//========================================================================
+// Represents the DefaultContext property of the ProcessServiceManager
+// in the Basic runtime system.
+void RTL_Impl_GetDefaultContext( StarBASIC* pBasic, SbxArray& rPar, BOOL bWrite )
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ SbxVariableRef refVar = rPar.Get(0);
+
+ Reference< XMultiServiceFactory > xFactory = comphelper::getProcessServiceFactory();
+ Reference< XPropertySet> xPSMPropertySet( xFactory, UNO_QUERY );
+ if( xPSMPropertySet.is() )
+ {
+ Any aContextAny = xPSMPropertySet->getPropertyValue(
+ String( RTL_CONSTASCII_USTRINGPARAM("DefaultContext") ) );
+
+ SbUnoObjectRef xUnoObj = new SbUnoObject
+ ( String( RTL_CONSTASCII_USTRINGPARAM("DefaultContext") ),
+ aContextAny );
+ refVar->PutObject( (SbUnoObject*)xUnoObj );
+ }
+ else
+ {
+ refVar->PutObject( NULL );
+ }
+}
+
+//========================================================================
+// Creates a Basic wrapper object for a strongly typed Uno value
+// 1. parameter: Uno type as full qualified type name, e.g. "byte[]"
+void RTL_Impl_CreateUnoValue( StarBASIC* pBasic, SbxArray& rPar, BOOL bWrite )
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ // 2 parameters needed
+ if ( rPar.Count() != 3 )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+
+ // Klassen-Name der struct holen
+ String aTypeName = rPar.Get(1)->GetString();
+ SbxVariable* pVal = rPar.Get(2);
+
+ // Check the type
+ Reference< XHierarchicalNameAccess > xTypeAccess = getTypeProvider_Impl();
+ Any aRet;
+ try
+ {
+ aRet = xTypeAccess->getByHierarchicalName( aTypeName );
+ }
+ catch( NoSuchElementException& e1 )
+ {
+ String aNoSuchElementExceptionName
+ ( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.container.NoSuchElementException" ) );
+ StarBASIC::Error( ERRCODE_BASIC_EXCEPTION,
+ implGetExceptionMsg( e1, aNoSuchElementExceptionName ) );
+ return;
+ }
+ Reference< XTypeDescription > xTypeDesc;
+ aRet >>= xTypeDesc;
+ TypeClass eTypeClass = xTypeDesc->getTypeClass();
+ Type aDestType( eTypeClass, aTypeName );
+
+
+ // Preconvert value
+ Any aVal = sbxToUnoValueImpl( pVal );
+ Any aConvertedVal = convertAny( aVal, aDestType );
+
+ /*
+ // Convert
+ Reference< XTypeConverter > xConverter = getTypeConverter_Impl();
+ try
+ {
+ aConvertedVal = xConverter->convertTo( aVal, aDestType );
+ }
+ catch( IllegalArgumentException& e1 )
+ {
+ StarBASIC::Error( ERRCODE_BASIC_EXCEPTION,
+ implGetExceptionMsg( ::cppu::getCaughtException() ) );
+ return;
+ }
+ catch( CannotConvertException& e2 )
+ {
+ String aCannotConvertExceptionName
+ ( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.lang.IllegalArgumentException" ) );
+ StarBASIC::Error( ERRCODE_BASIC_EXCEPTION,
+ implGetExceptionMsg( e2, aCannotConvertExceptionName ) );
+ return;
+ }
+ */
+
+ SbxVariableRef refVar = rPar.Get(0);
+ SbxObjectRef xUnoAnyObject = new SbUnoAnyObject( aConvertedVal );
+ refVar->PutObject( xUnoAnyObject );
+}
+
+//==========================================================================
+
+typedef WeakImplHelper1< XInvocation > ModuleInvocationProxyHelper;
+
+class ModuleInvocationProxy : public ModuleInvocationProxyHelper
+{
+ ::rtl::OUString m_aPrefix;
+ SbxObjectRef m_xScopeObj;
+ bool m_bProxyIsClassModuleObject;
+
+public:
+ ModuleInvocationProxy( const ::rtl::OUString& aPrefix, SbxObjectRef xScopeObj );
+ ~ModuleInvocationProxy()
+ {}
+
+ // XInvocation
+ virtual Reference< XIntrospectionAccess > SAL_CALL getIntrospection() throw();
+ virtual void SAL_CALL setValue( const ::rtl::OUString& rProperty, const Any& rValue )
+ throw( UnknownPropertyException );
+ virtual Any SAL_CALL getValue( const ::rtl::OUString& rProperty )
+ throw( UnknownPropertyException );
+ virtual sal_Bool SAL_CALL hasMethod( const ::rtl::OUString& rName ) throw();
+ virtual sal_Bool SAL_CALL hasProperty( const ::rtl::OUString& rProp ) throw();
+
+ virtual Any SAL_CALL invoke( const ::rtl::OUString& rFunction,
+ const Sequence< Any >& rParams,
+ Sequence< sal_Int16 >& rOutParamIndex,
+ Sequence< Any >& rOutParam )
+ throw( CannotConvertException, InvocationTargetException );
+};
+
+ModuleInvocationProxy::ModuleInvocationProxy( const ::rtl::OUString& aPrefix, SbxObjectRef xScopeObj )
+ : m_aPrefix( aPrefix + ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("_") ) )
+ , m_xScopeObj( xScopeObj )
+{
+ m_bProxyIsClassModuleObject = xScopeObj.Is() ? xScopeObj->ISA(SbClassModuleObject) : false;
+}
+
+Reference< XIntrospectionAccess > SAL_CALL ModuleInvocationProxy::getIntrospection() throw()
+{
+ return Reference< XIntrospectionAccess >();
+}
+
+void SAL_CALL ModuleInvocationProxy::setValue( const ::rtl::OUString& rProperty, const Any& rValue ) throw( UnknownPropertyException )
+{
+ if( !m_bProxyIsClassModuleObject )
+ throw UnknownPropertyException();
+
+ NAMESPACE_VOS(OGuard) guard( Application::GetSolarMutex() );
+
+ ::rtl::OUString aPropertyFunctionName( RTL_CONSTASCII_USTRINGPARAM( "Property Set ") );
+ aPropertyFunctionName += m_aPrefix;
+ aPropertyFunctionName += rProperty;
+
+ SbxVariable* p = m_xScopeObj->Find( aPropertyFunctionName, SbxCLASS_METHOD );
+ SbMethod* pMeth = p != NULL ? PTR_CAST(SbMethod,p) : NULL;
+ if( pMeth == NULL )
+ {
+ // TODO: Check vba behavior concernig missing function
+ //StarBASIC::Error( SbERR_NO_METHOD, aFunctionName );
+ throw UnknownPropertyException();
+ }
+
+ // Setup parameter
+ SbxArrayRef xArray = new SbxArray;
+ SbxVariableRef xVar = new SbxVariable( SbxVARIANT );
+ unoToSbxValue( (SbxVariable*)xVar, rValue );
+ xArray->Put( xVar, 1 );
+
+ // Call property method
+ SbxVariableRef xValue = new SbxVariable;
+ pMeth->SetParameters( xArray );
+ pMeth->Call( xValue );
+ //aRet = sbxToUnoValue( xValue );
+ pMeth->SetParameters( NULL );
+
+ // TODO: OutParameter?
+
+ // throw InvocationTargetException();
+
+ //return aRet;
+
+}
+
+Any SAL_CALL ModuleInvocationProxy::getValue( const ::rtl::OUString& rProperty ) throw( UnknownPropertyException )
+{
+ if( !m_bProxyIsClassModuleObject )
+ throw UnknownPropertyException();
+
+ NAMESPACE_VOS(OGuard) guard( Application::GetSolarMutex() );
+
+ ::rtl::OUString aPropertyFunctionName( RTL_CONSTASCII_USTRINGPARAM( "Property Get ") );
+ aPropertyFunctionName += m_aPrefix;
+ aPropertyFunctionName += rProperty;
+
+ SbxVariable* p = m_xScopeObj->Find( aPropertyFunctionName, SbxCLASS_METHOD );
+ SbMethod* pMeth = p != NULL ? PTR_CAST(SbMethod,p) : NULL;
+ if( pMeth == NULL )
+ {
+ // TODO: Check vba behavior concernig missing function
+ //StarBASIC::Error( SbERR_NO_METHOD, aFunctionName );
+ throw UnknownPropertyException();
+ }
+
+ // Call method
+ SbxVariableRef xValue = new SbxVariable;
+ pMeth->Call( xValue );
+ Any aRet = sbxToUnoValue( xValue );
+ return aRet;
+}
+
+sal_Bool SAL_CALL ModuleInvocationProxy::hasMethod( const ::rtl::OUString& ) throw()
+{
+ return sal_False;
+}
+
+sal_Bool SAL_CALL ModuleInvocationProxy::hasProperty( const ::rtl::OUString& ) throw()
+{
+ return sal_False;
+}
+
+Any SAL_CALL ModuleInvocationProxy::invoke( const ::rtl::OUString& rFunction,
+ const Sequence< Any >& rParams,
+ Sequence< sal_Int16 >&,
+ Sequence< Any >& )
+ throw( CannotConvertException, InvocationTargetException )
+{
+ NAMESPACE_VOS(OGuard) guard( Application::GetSolarMutex() );
+
+ Any aRet;
+ if( !m_xScopeObj.Is() )
+ return aRet;
+
+ ::rtl::OUString aFunctionName = m_aPrefix;
+ aFunctionName += rFunction;
+
+ SbxVariable* p = m_xScopeObj->Find( aFunctionName, SbxCLASS_METHOD );
+ SbMethod* pMeth = p != NULL ? PTR_CAST(SbMethod,p) : NULL;
+ if( pMeth == NULL )
+ {
+ // TODO: Check vba behavior concernig missing function
+ //StarBASIC::Error( SbERR_NO_METHOD, aFunctionName );
+ return aRet;
+ }
+
+ // Setup parameters
+ SbxArrayRef xArray;
+ sal_Int32 nParamCount = rParams.getLength();
+ if( nParamCount )
+ {
+ xArray = new SbxArray;
+ const Any *pArgs = rParams.getConstArray();
+ for( sal_Int32 i = 0 ; i < nParamCount ; i++ )
+ {
+ SbxVariableRef xVar = new SbxVariable( SbxVARIANT );
+ unoToSbxValue( (SbxVariable*)xVar, pArgs[i] );
+ xArray->Put( xVar, sal::static_int_cast< USHORT >(i+1) );
+ }
+ }
+
+ // Call method
+ SbxVariableRef xValue = new SbxVariable;
+ if( xArray.Is() )
+ pMeth->SetParameters( xArray );
+ pMeth->Call( xValue );
+ aRet = sbxToUnoValue( xValue );
+ pMeth->SetParameters( NULL );
+
+ // TODO: OutParameter?
+
+ return aRet;
+}
+
+Reference< XInterface > createComListener( const Any& aControlAny, const ::rtl::OUString& aVBAType,
+ const ::rtl::OUString& aPrefix, SbxObjectRef xScopeObj )
+{
+ Reference< XInterface > xRet;
+
+ Reference< XComponentContext > xContext = getComponentContext_Impl();
+ Reference< XMultiComponentFactory > xServiceMgr( xContext->getServiceManager() );
+
+ Reference< XInvocation > xProxy = new ModuleInvocationProxy( aPrefix, xScopeObj );
+
+ Sequence<Any> args( 3 );
+ args[0] <<= aControlAny;
+ args[1] <<= aVBAType;
+ args[2] <<= xProxy;
+
+ try
+ {
+ xRet = xServiceMgr->createInstanceWithArgumentsAndContext(
+ ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.custom.UnoComListener")),
+ args, xContext );
+ }
+ catch( const Exception& )
+ {
+ implHandleAnyException( ::cppu::getCaughtException() );
+ }
+
+ return xRet;
+}
+
+// Handle module implements mechanism for OLE types
+bool SbModule::createCOMWrapperForIface( Any& o_rRetAny, SbClassModuleObject* pProxyClassModuleObject )
+{
+ // For now: Take first interface that allows to instantiate COM wrapper
+ // TODO: Check if support for multiple interfaces is needed
+
+ Reference< XComponentContext > xContext = getComponentContext_Impl();
+ Reference< XMultiComponentFactory > xServiceMgr( xContext->getServiceManager() );
+ Reference< XSingleServiceFactory > xComImplementsFactory
+ (
+ xServiceMgr->createInstanceWithContext(
+ ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.custom.ComImplementsFactory")), xContext ),
+ UNO_QUERY
+ );
+ if( !xComImplementsFactory.is() )
+ return false;
+
+ bool bSuccess = false;
+
+ SbxArray* pModIfaces = pClassData->mxIfaces;
+ USHORT nCount = pModIfaces->Count();
+ for( USHORT i = 0 ; i < nCount ; ++i )
+ {
+ SbxVariable* pVar = pModIfaces->Get( i );
+ ::rtl::OUString aIfaceName = pVar->GetName();
+
+ if( aIfaceName.getLength() != 0 )
+ {
+ ::rtl::OUString aPureIfaceName = aIfaceName;
+ sal_Int32 indexLastDot = aIfaceName.lastIndexOf('.');
+ if ( indexLastDot > -1 )
+ aPureIfaceName = aIfaceName.copy( indexLastDot + 1 );
+
+ Reference< XInvocation > xProxy = new ModuleInvocationProxy( aPureIfaceName, pProxyClassModuleObject );
+
+ Sequence<Any> args( 2 );
+ args[0] <<= aIfaceName;
+ args[1] <<= xProxy;
+
+ Reference< XInterface > xRet;
+ bSuccess = false;
+ try
+ {
+ xRet = xComImplementsFactory->createInstanceWithArguments( args );
+ bSuccess = true;
+ }
+ catch( const Exception& )
+ {
+ implHandleAnyException( ::cppu::getCaughtException() );
+ }
+
+ if( bSuccess )
+ {
+ o_rRetAny <<= xRet;
+ break;
+ }
+ }
+ }
+
+ return bSuccess;
+}
+
diff --git a/basic/source/classes/sbxmod.cxx b/basic/source/classes/sbxmod.cxx
new file mode 100644
index 000000000000..8b1069bbeab3
--- /dev/null
+++ b/basic/source/classes/sbxmod.cxx
@@ -0,0 +1,2456 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+
+#include <list>
+
+#include <vos/macros.hxx>
+#include <vcl/svapp.hxx>
+#include <tools/stream.hxx>
+#include <svl/brdcst.hxx>
+#include <tools/shl.hxx>
+#include <basic/sbx.hxx>
+#include "sb.hxx"
+#include <sbjsmeth.hxx>
+#include "sbjsmod.hxx"
+#include "sbintern.hxx"
+#include "image.hxx"
+#include "opcodes.hxx"
+#include "runtime.hxx"
+#include "token.hxx"
+#include "sbunoobj.hxx"
+#include "sbtrace.hxx"
+
+
+//#include <basic/hilight.hxx>
+#include <svtools/syntaxhighlight.hxx>
+
+#include <basic/basrdll.hxx>
+#include <vos/mutex.hxx>
+#include <basic/sbobjmod.hxx>
+#include <cppuhelper/implbase2.hxx>
+#include <com/sun/star/lang/XServiceInfo.hpp>
+#include <com/sun/star/script/ModuleType.hpp>
+#include <com/sun/star/script/vba/XVBACompatibility.hpp>
+#include <com/sun/star/beans/XPropertySet.hpp>
+
+using namespace com::sun::star;
+
+// for the bsearch
+#ifdef WNT
+#define CDECL _cdecl
+#endif
+#if defined(UNX) || defined(OS2)
+#define CDECL
+#endif
+#ifdef UNX
+#include <sys/resource.h>
+#endif
+
+#include <stdio.h>
+#include <com/sun/star/frame/XDesktop.hpp>
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+#include <comphelper/processfactory.hxx>
+#include <vcl/svapp.hxx>
+#include <map>
+#include <com/sun/star/reflection/XProxyFactory.hpp>
+#include <cppuhelper/implbase1.hxx>
+#include <basic/sbobjmod.hxx>
+#include <com/sun/star/uno/XAggregation.hpp>
+#include <map>
+#include <com/sun/star/script/XInvocation.hpp>
+
+ using namespace ::com::sun::star;
+using namespace com::sun::star::lang;
+using namespace com::sun::star::reflection;
+using namespace com::sun::star::beans;
+using namespace com::sun::star::script;
+
+
+#include <com/sun/star/script/XLibraryContainer.hpp>
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+#include <com/sun/star/awt/XDialogProvider.hpp>
+#include <com/sun/star/awt/XTopWindow.hpp>
+#include <com/sun/star/awt/XWindow.hpp>
+#include <com/sun/star/awt/XControl.hpp>
+#include <cppuhelper/implbase1.hxx>
+#include <comphelper/anytostring.hxx>
+#include <com/sun/star/beans/XPropertySet.hpp>
+
+typedef ::cppu::WeakImplHelper1< XInvocation > DocObjectWrapper_BASE;
+typedef ::std::map< sal_Int16, Any, ::std::less< sal_Int16 > > OutParamMap;
+::com::sun::star::uno::Any sbxToUnoValue( SbxVariable* pVar );
+void unoToSbxValue( SbxVariable* pVar, const ::com::sun::star::uno::Any& aValue );
+
+class DocObjectWrapper : public DocObjectWrapper_BASE
+{
+ Reference< XAggregation > m_xAggProxy;
+ Reference< XInvocation > m_xAggInv;
+ Reference< XTypeProvider > m_xAggregateTypeProv;
+ Sequence< Type > m_Types;
+ SbModule* m_pMod;
+ SbMethodRef getMethod( const rtl::OUString& aName ) throw (RuntimeException);
+ SbPropertyRef getProperty( const rtl::OUString& aName ) throw (RuntimeException);
+ String mName; // for debugging
+
+public:
+ DocObjectWrapper( SbModule* pMod );
+ virtual ~DocObjectWrapper();
+
+ virtual void SAL_CALL acquire() throw();
+ virtual void SAL_CALL release() throw();
+
+ virtual Sequence< sal_Int8 > SAL_CALL getImplementationId() throw (RuntimeException)
+ {
+ if( !m_xAggregateTypeProv.is() )
+ throw RuntimeException();
+ return m_xAggregateTypeProv->getImplementationId();
+ }
+
+ virtual Reference< XIntrospectionAccess > SAL_CALL getIntrospection( ) throw (RuntimeException);
+
+ virtual Any SAL_CALL invoke( const ::rtl::OUString& aFunctionName, const Sequence< Any >& aParams, Sequence< ::sal_Int16 >& aOutParamIndex, Sequence< Any >& aOutParam ) throw (IllegalArgumentException, CannotConvertException, InvocationTargetException, RuntimeException);
+ virtual void SAL_CALL setValue( const ::rtl::OUString& aPropertyName, const Any& aValue ) throw (UnknownPropertyException, CannotConvertException, InvocationTargetException, RuntimeException);
+ virtual Any SAL_CALL getValue( const ::rtl::OUString& aPropertyName ) throw (UnknownPropertyException, RuntimeException);
+ virtual ::sal_Bool SAL_CALL hasMethod( const ::rtl::OUString& aName ) throw (RuntimeException);
+ virtual ::sal_Bool SAL_CALL hasProperty( const ::rtl::OUString& aName ) throw (RuntimeException);
+ virtual Any SAL_CALL queryInterface( const Type& aType ) throw ( RuntimeException );
+
+ virtual Sequence< Type > SAL_CALL getTypes() throw ( RuntimeException );
+};
+
+DocObjectWrapper::DocObjectWrapper( SbModule* pVar ) : m_pMod( pVar ), mName( pVar->GetName() )
+{
+ SbObjModule* pMod = PTR_CAST(SbObjModule,pVar);
+ if ( pMod )
+ {
+ if ( pMod->GetModuleType() == ModuleType::DOCUMENT )
+ {
+ Reference< XMultiServiceFactory > xFactory = comphelper::getProcessServiceFactory();
+ // Use proxy factory service to create aggregatable proxy.
+ SbUnoObject* pUnoObj = PTR_CAST(SbUnoObject,pMod->GetObject() );
+ Reference< XInterface > xIf;
+ if ( pUnoObj )
+ {
+ Any aObj = pUnoObj->getUnoAny();
+ aObj >>= xIf;
+ if ( xIf.is() )
+ {
+ m_xAggregateTypeProv.set( xIf, UNO_QUERY );
+ m_xAggInv.set( xIf, UNO_QUERY );
+ }
+ }
+ if ( xIf.is() )
+ {
+ try
+ {
+ Reference< XMultiComponentFactory > xMFac( xFactory, UNO_QUERY_THROW );
+ Reference< XPropertySet> xPSMPropertySet( xMFac, UNO_QUERY_THROW );
+ Reference< XComponentContext > xCtx;
+ xPSMPropertySet->getPropertyValue(
+ String( RTL_CONSTASCII_USTRINGPARAM("DefaultContext") ) ) >>= xCtx;
+ Reference< XProxyFactory > xProxyFac( xMFac->createInstanceWithContext( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.reflection.ProxyFactory" ) ), xCtx ), UNO_QUERY_THROW );
+ m_xAggProxy = xProxyFac->createProxy( xIf );
+ }
+ catch( Exception& )
+ {
+ OSL_ENSURE( false, "DocObjectWrapper::DocObjectWrapper: Caught exception!" );
+ }
+ }
+
+ if ( m_xAggProxy.is() )
+ {
+ osl_incrementInterlockedCount( &m_refCount );
+
+ /* i35609 - Fix crash on Solaris. The setDelegator call needs
+ to be in its own block to ensure that all temporary Reference
+ instances that are acquired during the call are released
+ before m_refCount is decremented again */
+ {
+ m_xAggProxy->setDelegator( static_cast< cppu::OWeakObject * >( this ) );
+ }
+
+ osl_decrementInterlockedCount( &m_refCount );
+ }
+ }
+ }
+}
+
+void SAL_CALL
+DocObjectWrapper::acquire() throw ()
+{
+ osl_incrementInterlockedCount( &m_refCount );
+ OSL_TRACE("DocObjectWrapper::acquire(%s) 0x%x refcount is now %d", rtl::OUStringToOString( mName, RTL_TEXTENCODING_UTF8 ).getStr(), this, m_refCount );
+}
+void SAL_CALL
+DocObjectWrapper::release() throw ()
+{
+ if ( osl_decrementInterlockedCount( &m_refCount ) == 0 )
+ {
+ OSL_TRACE("DocObjectWrapper::release(%s) 0x%x refcount is now %d", rtl::OUStringToOString( mName, RTL_TEXTENCODING_UTF8 ).getStr(), this, m_refCount );
+ delete this;
+ }
+ else
+ OSL_TRACE("DocObjectWrapper::release(%s) 0x%x refcount is now %d", rtl::OUStringToOString( mName, RTL_TEXTENCODING_UTF8 ).getStr(), this, m_refCount );
+}
+
+DocObjectWrapper::~DocObjectWrapper()
+{
+}
+
+Sequence< Type > SAL_CALL DocObjectWrapper::getTypes()
+ throw ( RuntimeException )
+{
+ if ( m_Types.getLength() == 0 )
+ {
+ Sequence< Type > sTypes;
+ if ( m_xAggregateTypeProv.is() )
+ sTypes = m_xAggregateTypeProv->getTypes();
+ m_Types.realloc( sTypes.getLength() + 1 );
+ Type* pPtr = m_Types.getArray();
+ for ( int i=0; i<m_Types.getLength(); ++i, ++pPtr )
+ {
+ if ( i == 0 )
+ *pPtr = XInvocation::static_type( NULL );
+ else
+ *pPtr = sTypes[ i - 1 ];
+ }
+ }
+ return m_Types;
+}
+
+Reference< XIntrospectionAccess > SAL_CALL
+DocObjectWrapper::getIntrospection( ) throw (RuntimeException)
+{
+ return NULL;
+}
+
+Any SAL_CALL
+DocObjectWrapper::invoke( const ::rtl::OUString& aFunctionName, const Sequence< Any >& aParams, Sequence< ::sal_Int16 >& aOutParamIndex, Sequence< Any >& aOutParam ) throw (IllegalArgumentException, CannotConvertException, InvocationTargetException, RuntimeException)
+{
+ if ( m_xAggInv.is() && m_xAggInv->hasMethod( aFunctionName ) )
+ return m_xAggInv->invoke( aFunctionName, aParams, aOutParamIndex, aOutParam );
+ SbMethodRef pMethod = getMethod( aFunctionName );
+ if ( !pMethod )
+ throw RuntimeException();
+ // check number of parameters
+ sal_Int32 nParamsCount = aParams.getLength();
+ SbxInfo* pInfo = pMethod->GetInfo();
+ if ( pInfo )
+ {
+ sal_Int32 nSbxOptional = 0;
+ USHORT n = 1;
+ for ( const SbxParamInfo* pParamInfo = pInfo->GetParam( n ); pParamInfo; pParamInfo = pInfo->GetParam( ++n ) )
+ {
+ if ( ( pParamInfo->nFlags & SBX_OPTIONAL ) != 0 )
+ ++nSbxOptional;
+ else
+ nSbxOptional = 0;
+ }
+ sal_Int32 nSbxCount = n - 1;
+ if ( nParamsCount < nSbxCount - nSbxOptional )
+ {
+ throw RuntimeException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "wrong number of parameters!" ) ), Reference< XInterface >() );
+ }
+ }
+ // set parameters
+ SbxArrayRef xSbxParams;
+ if ( nParamsCount > 0 )
+ {
+ xSbxParams = new SbxArray;
+ const Any* pParams = aParams.getConstArray();
+ for ( sal_Int32 i = 0; i < nParamsCount; ++i )
+ {
+ SbxVariableRef xSbxVar = new SbxVariable( SbxVARIANT );
+ unoToSbxValue( static_cast< SbxVariable* >( xSbxVar ), pParams[i] );
+ xSbxParams->Put( xSbxVar, static_cast< USHORT >( i ) + 1 );
+
+ // Enable passing by ref
+ if ( xSbxVar->GetType() != SbxVARIANT )
+ xSbxVar->SetFlag( SBX_FIXED );
+ }
+ }
+ if ( xSbxParams.Is() )
+ pMethod->SetParameters( xSbxParams );
+
+ // call method
+ SbxVariableRef xReturn = new SbxVariable;
+ ErrCode nErr = SbxERR_OK;
+
+ nErr = pMethod->Call( xReturn );
+ Any aReturn;
+ // get output parameters
+ if ( xSbxParams.Is() )
+ {
+ SbxInfo* pInfo_ = pMethod->GetInfo();
+ if ( pInfo_ )
+ {
+ OutParamMap aOutParamMap;
+ for ( USHORT n = 1, nCount = xSbxParams->Count(); n < nCount; ++n )
+ {
+ const SbxParamInfo* pParamInfo = pInfo_->GetParam( n );
+ if ( pParamInfo && ( pParamInfo->eType & SbxBYREF ) != 0 )
+ {
+ SbxVariable* pVar = xSbxParams->Get( n );
+ if ( pVar )
+ {
+ SbxVariableRef xVar = pVar;
+ aOutParamMap.insert( OutParamMap::value_type( n - 1, sbxToUnoValue( xVar ) ) );
+ }
+ }
+ }
+ sal_Int32 nOutParamCount = aOutParamMap.size();
+ aOutParamIndex.realloc( nOutParamCount );
+ aOutParam.realloc( nOutParamCount );
+ sal_Int16* pOutParamIndex = aOutParamIndex.getArray();
+ Any* pOutParam = aOutParam.getArray();
+ for ( OutParamMap::iterator aIt = aOutParamMap.begin(); aIt != aOutParamMap.end(); ++aIt, ++pOutParamIndex, ++pOutParam )
+ {
+ *pOutParamIndex = aIt->first;
+ *pOutParam = aIt->second;
+ }
+ }
+ }
+
+ // get return value
+ aReturn = sbxToUnoValue( xReturn );
+
+ pMethod->SetParameters( NULL );
+
+ return aReturn;
+}
+
+void SAL_CALL
+DocObjectWrapper::setValue( const ::rtl::OUString& aPropertyName, const Any& aValue ) throw (UnknownPropertyException, CannotConvertException, InvocationTargetException, RuntimeException)
+{
+ if ( m_xAggInv.is() && m_xAggInv->hasProperty( aPropertyName ) )
+ return m_xAggInv->setValue( aPropertyName, aValue );
+
+ SbPropertyRef pProperty = getProperty( aPropertyName );
+ if ( !pProperty.Is() )
+ throw UnknownPropertyException();
+ unoToSbxValue( (SbxVariable*) pProperty, aValue );
+}
+
+Any SAL_CALL
+DocObjectWrapper::getValue( const ::rtl::OUString& aPropertyName ) throw (UnknownPropertyException, RuntimeException)
+{
+ if ( m_xAggInv.is() && m_xAggInv->hasProperty( aPropertyName ) )
+ return m_xAggInv->getValue( aPropertyName );
+
+ SbPropertyRef pProperty = getProperty( aPropertyName );
+ if ( !pProperty.Is() )
+ throw UnknownPropertyException();
+
+ SbxVariable* pProp = ( SbxVariable* ) pProperty;
+ if ( pProp->GetType() == SbxEMPTY )
+ pProperty->Broadcast( SBX_HINT_DATAWANTED );
+
+ Any aRet = sbxToUnoValue( pProp );
+ return aRet;
+}
+
+::sal_Bool SAL_CALL
+DocObjectWrapper::hasMethod( const ::rtl::OUString& aName ) throw (RuntimeException)
+{
+ if ( m_xAggInv.is() && m_xAggInv->hasMethod( aName ) )
+ return sal_True;
+ return getMethod( aName ).Is();
+}
+
+::sal_Bool SAL_CALL
+DocObjectWrapper::hasProperty( const ::rtl::OUString& aName ) throw (RuntimeException)
+{
+ sal_Bool bRes = sal_False;
+ if ( m_xAggInv.is() && m_xAggInv->hasProperty( aName ) )
+ bRes = sal_True;
+ else bRes = getProperty( aName ).Is();
+ return bRes;
+}
+
+Any SAL_CALL DocObjectWrapper::queryInterface( const Type& aType )
+ throw ( RuntimeException )
+{
+ Any aRet = DocObjectWrapper_BASE::queryInterface( aType );
+ if ( aRet.hasValue() )
+ return aRet;
+ else if ( m_xAggProxy.is() )
+ aRet = m_xAggProxy->queryAggregation( aType );
+ return aRet;
+}
+
+SbMethodRef DocObjectWrapper::getMethod( const rtl::OUString& aName ) throw (RuntimeException)
+{
+ SbMethodRef pMethod = NULL;
+ if ( m_pMod )
+ {
+ USHORT nSaveFlgs = m_pMod->GetFlags();
+ // Limit search to this module
+ m_pMod->ResetFlag( SBX_GBLSEARCH );
+ pMethod = (SbMethod*) m_pMod->SbModule::Find( aName, SbxCLASS_METHOD );
+ m_pMod->SetFlags( nSaveFlgs );
+ }
+
+ return pMethod;
+}
+
+SbPropertyRef DocObjectWrapper::getProperty( const rtl::OUString& aName ) throw (RuntimeException)
+{
+ SbPropertyRef pProperty = NULL;
+ if ( m_pMod )
+ {
+ USHORT nSaveFlgs = m_pMod->GetFlags();
+ // Limit search to this module.
+ m_pMod->ResetFlag( SBX_GBLSEARCH );
+ pProperty = (SbProperty*)m_pMod->SbModule::Find( aName, SbxCLASS_PROPERTY );
+ m_pMod->SetFlag( nSaveFlgs );
+ }
+
+ return pProperty;
+}
+
+TYPEINIT1(SbModule,SbxObject)
+TYPEINIT1(SbMethod,SbxMethod)
+TYPEINIT1(SbProperty,SbxProperty)
+TYPEINIT1(SbProcedureProperty,SbxProperty)
+TYPEINIT1(SbJScriptModule,SbModule)
+TYPEINIT1(SbJScriptMethod,SbMethod)
+TYPEINIT1(SbObjModule,SbModule)
+TYPEINIT1(SbUserFormModule,SbObjModule)
+
+SV_DECL_VARARR(SbiBreakpoints,USHORT,4,4)
+SV_IMPL_VARARR(SbiBreakpoints,USHORT)
+
+
+SV_IMPL_VARARR(HighlightPortions, HighlightPortion)
+
+bool getDefaultVBAMode( StarBASIC* pb )
+{
+ bool bResult = false;
+ if ( pb && pb->IsDocBasic() )
+ {
+ uno::Any aDoc;
+ if ( pb->GetUNOConstant( "ThisComponent", aDoc ) )
+ {
+ uno::Reference< beans::XPropertySet > xProp( aDoc, uno::UNO_QUERY );
+ if ( xProp.is() )
+ {
+ uno::Reference< script::vba::XVBACompatibility > xVBAMode( xProp->getPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("BasicLibraries") ) ), uno::UNO_QUERY );
+ if ( xVBAMode.is() )
+ bResult = xVBAMode->getVBACompatibilityMode() == sal_True;
+ }
+ }
+ }
+ return bResult;
+}
+
+class AsyncQuitHandler
+{
+ AsyncQuitHandler() {}
+ AsyncQuitHandler( const AsyncQuitHandler&);
+public:
+ static AsyncQuitHandler& instance()
+ {
+ static AsyncQuitHandler dInst;
+ return dInst;
+ }
+
+ void QuitApplication()
+ {
+ uno::Reference< lang::XMultiServiceFactory > xFactory = comphelper::getProcessServiceFactory();
+ if ( xFactory.is() )
+ {
+ uno::Reference< frame::XDesktop > xDeskTop( xFactory->createInstance( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.frame.Desktop") ) ), uno::UNO_QUERY );
+ if ( xDeskTop.is() )
+ xDeskTop->terminate();
+ }
+ }
+ DECL_LINK( OnAsyncQuit, void* );
+};
+
+IMPL_LINK( AsyncQuitHandler, OnAsyncQuit, void*, /*pNull*/ )
+{
+ QuitApplication();
+ return 0L;
+}
+
+#if 0
+bool UnlockControllerHack( StarBASIC* pBasic )
+{
+ bool bRes = false;
+ if ( pBasic && pBasic->IsDocBasic() )
+ {
+ uno::Any aUnoVar;
+ ::rtl::OUString sVarName( ::rtl::OUString::createFromAscii( "ThisComponent" ) );
+ SbUnoObject* pGlobs = dynamic_cast<SbUnoObject*>( pBasic->Find( sVarName, SbxCLASS_DONTCARE ) );
+ if ( pGlobs )
+ aUnoVar = pGlobs->getUnoAny();
+ uno::Reference< frame::XModel > xModel( aUnoVar, uno::UNO_QUERY);
+ if ( xModel.is() )
+ {
+ try
+ {
+ xModel->unlockControllers();
+ bRes = true;
+ }
+ catch( uno::Exception& )
+ {
+ }
+ }
+ }
+ return bRes;
+}
+#endif
+/////////////////////////////////////////////////////////////////////////////
+
+// Ein BASIC-Modul hat EXTSEARCH gesetzt, damit die im Modul enthaltenen
+// Elemente von anderen Modulen aus gefunden werden koennen.
+
+SbModule::SbModule( const String& rName, BOOL bVBACompat )
+ : SbxObject( String( RTL_CONSTASCII_USTRINGPARAM("StarBASICModule") ) ),
+ pImage( NULL ), pBreaks( NULL ), pClassData( NULL ), mbVBACompat( bVBACompat ), pDocObject( NULL ), bIsProxyModule( false )
+{
+ SetName( rName );
+ SetFlag( SBX_EXTSEARCH | SBX_GBLSEARCH );
+ SetModuleType( script::ModuleType::NORMAL );
+
+ // #i92642: Set name property to intitial name
+ SbxVariable* pNameProp = pProps->Find( String( RTL_CONSTASCII_USTRINGPARAM("Name") ), SbxCLASS_PROPERTY );
+ if( pNameProp != NULL )
+ pNameProp->PutString( GetName() );
+}
+
+SbModule::~SbModule()
+{
+ OSL_TRACE("Module named %s is destructing", rtl::OUStringToOString( GetName(), RTL_TEXTENCODING_UTF8 ).getStr() );
+ if( pImage )
+ delete pImage;
+ if( pBreaks )
+ delete pBreaks;
+ if( pClassData )
+ delete pClassData;
+ mxWrapper = NULL;
+}
+
+uno::Reference< script::XInvocation >
+SbModule::GetUnoModule()
+{
+ if ( !mxWrapper.is() )
+ mxWrapper = new DocObjectWrapper( this );
+
+ OSL_TRACE("Module named %s returning wrapper mxWrapper (0x%x)", rtl::OUStringToOString( GetName(), RTL_TEXTENCODING_UTF8 ).getStr(), mxWrapper.get() );
+ return mxWrapper;
+}
+
+BOOL SbModule::IsCompiled() const
+{
+ return BOOL( pImage != 0 );
+}
+
+const SbxObject* SbModule::FindType( String aTypeName ) const
+{
+ return pImage ? pImage->FindType( aTypeName ) : NULL;
+}
+
+
+// Aus dem Codegenerator: Loeschen des Images und Invalidieren der Entries
+
+void SbModule::StartDefinitions()
+{
+ delete pImage; pImage = NULL;
+ if( pClassData )
+ pClassData->clear();
+
+ // Methoden und Properties bleiben erhalten, sind jedoch ungueltig
+ // schliesslich sind ja u.U. die Infos belegt
+ USHORT i;
+ for( i = 0; i < pMethods->Count(); i++ )
+ {
+ SbMethod* p = PTR_CAST(SbMethod,pMethods->Get( i ) );
+ if( p )
+ p->bInvalid = TRUE;
+ }
+ for( i = 0; i < pProps->Count(); )
+ {
+ SbProperty* p = PTR_CAST(SbProperty,pProps->Get( i ) );
+ if( p )
+ pProps->Remove( i );
+ else
+ i++;
+ }
+}
+
+// Methode anfordern/anlegen
+
+SbMethod* SbModule::GetMethod( const String& rName, SbxDataType t )
+{
+ SbxVariable* p = pMethods->Find( rName, SbxCLASS_METHOD );
+ SbMethod* pMeth = p ? PTR_CAST(SbMethod,p) : NULL;
+ if( p && !pMeth )
+ pMethods->Remove( p );
+ if( !pMeth )
+ {
+ pMeth = new SbMethod( rName, t, this );
+ pMeth->SetParent( this );
+ pMeth->SetFlags( SBX_READ );
+ pMethods->Put( pMeth, pMethods->Count() );
+ StartListening( pMeth->GetBroadcaster(), TRUE );
+ }
+ // Per Default ist die Methode GUELTIG, da sie auch vom Compiler
+ // (Codegenerator) erzeugt werden kann
+ pMeth->bInvalid = FALSE;
+ pMeth->ResetFlag( SBX_FIXED );
+ pMeth->SetFlag( SBX_WRITE );
+ pMeth->SetType( t );
+ pMeth->ResetFlag( SBX_WRITE );
+ if( t != SbxVARIANT )
+ pMeth->SetFlag( SBX_FIXED );
+ return pMeth;
+}
+
+// Property anfordern/anlegen
+
+SbProperty* SbModule::GetProperty( const String& rName, SbxDataType t )
+{
+ SbxVariable* p = pProps->Find( rName, SbxCLASS_PROPERTY );
+ SbProperty* pProp = p ? PTR_CAST(SbProperty,p) : NULL;
+ if( p && !pProp )
+ pProps->Remove( p );
+ if( !pProp )
+ {
+ pProp = new SbProperty( rName, t, this );
+ pProp->SetFlag( SBX_READWRITE );
+ pProp->SetParent( this );
+ pProps->Put( pProp, pProps->Count() );
+ StartListening( pProp->GetBroadcaster(), TRUE );
+ }
+ return pProp;
+}
+
+SbProcedureProperty* SbModule::GetProcedureProperty
+ ( const String& rName, SbxDataType t )
+{
+ SbxVariable* p = pProps->Find( rName, SbxCLASS_PROPERTY );
+ SbProcedureProperty* pProp = p ? PTR_CAST(SbProcedureProperty,p) : NULL;
+ if( p && !pProp )
+ pProps->Remove( p );
+ if( !pProp )
+ {
+ pProp = new SbProcedureProperty( rName, t );
+ pProp->SetFlag( SBX_READWRITE );
+ pProp->SetParent( this );
+ pProps->Put( pProp, pProps->Count() );
+ StartListening( pProp->GetBroadcaster(), TRUE );
+ }
+ return pProp;
+}
+
+SbIfaceMapperMethod* SbModule::GetIfaceMapperMethod
+ ( const String& rName, SbMethod* pImplMeth )
+{
+ SbxVariable* p = pMethods->Find( rName, SbxCLASS_METHOD );
+ SbIfaceMapperMethod* pMapperMethod = p ? PTR_CAST(SbIfaceMapperMethod,p) : NULL;
+ if( p && !pMapperMethod )
+ pMethods->Remove( p );
+ if( !pMapperMethod )
+ {
+ pMapperMethod = new SbIfaceMapperMethod( rName, pImplMeth );
+ pMapperMethod->SetParent( this );
+ pMapperMethod->SetFlags( SBX_READ );
+ pMethods->Put( pMapperMethod, pMethods->Count() );
+ }
+ pMapperMethod->bInvalid = FALSE;
+ return pMapperMethod;
+}
+
+SbIfaceMapperMethod::~SbIfaceMapperMethod()
+{
+}
+
+TYPEINIT1(SbIfaceMapperMethod,SbMethod)
+
+
+// Aus dem Codegenerator: Ungueltige Eintraege entfernen
+
+void SbModule::EndDefinitions( BOOL bNewState )
+{
+ for( USHORT i = 0; i < pMethods->Count(); )
+ {
+ SbMethod* p = PTR_CAST(SbMethod,pMethods->Get( i ) );
+ if( p )
+ {
+ if( p->bInvalid )
+ pMethods->Remove( p );
+ else
+ {
+ p->bInvalid = bNewState;
+ i++;
+ }
+ }
+ else
+ i++;
+ }
+ SetModified( TRUE );
+}
+
+void SbModule::Clear()
+{
+ delete pImage; pImage = NULL;
+ if( pClassData )
+ pClassData->clear();
+ SbxObject::Clear();
+}
+
+
+SbxVariable* SbModule::Find( const XubString& rName, SbxClassType t )
+{
+ // make sure a search in an uninstatiated class module will fail
+ SbxVariable* pRes = SbxObject::Find( rName, t );
+ if ( bIsProxyModule && !GetSbData()->bRunInit )
+ return NULL;
+ if( !pRes && pImage )
+ {
+ SbiInstance* pInst = pINST;
+ if( pInst && pInst->IsCompatibility() )
+ {
+ // Put enum types as objects into module,
+ // allows MyEnum.First notation
+ SbxArrayRef xArray = pImage->GetEnums();
+ if( xArray.Is() )
+ {
+ SbxVariable* pEnumVar = xArray->Find( rName, SbxCLASS_DONTCARE );
+ SbxObject* pEnumObject = PTR_CAST( SbxObject, pEnumVar );
+ if( pEnumObject )
+ {
+ bool bPrivate = pEnumObject->IsSet( SBX_PRIVATE );
+ String aEnumName = pEnumObject->GetName();
+
+ pRes = new SbxVariable( SbxOBJECT );
+ pRes->SetName( aEnumName );
+ pRes->SetParent( this );
+ pRes->SetFlag( SBX_READ );
+ if( bPrivate )
+ pRes->SetFlag( SBX_PRIVATE );
+ pRes->PutObject( pEnumObject );
+ }
+ }
+ }
+ }
+ return pRes;
+}
+
+const ::rtl::OUString& SbModule::GetSource32() const
+{
+ return aOUSource;
+}
+
+const String& SbModule::GetSource() const
+{
+ static String aRetStr;
+ aRetStr = aOUSource;
+ return aRetStr;
+}
+
+// Parent und BASIC sind eins!
+
+void SbModule::SetParent( SbxObject* p )
+{
+ // #118083: Assertion is not valid any more
+ // DBG_ASSERT( !p || p->IsA( TYPE(StarBASIC) ), "SbModules nur in BASIC eintragen" );
+ pParent = p;
+}
+
+void SbModule::SFX_NOTIFY( SfxBroadcaster& rBC, const TypeId& rBCType,
+ const SfxHint& rHint, const TypeId& rHintType )
+{
+ const SbxHint* pHint = PTR_CAST(SbxHint,&rHint);
+ if( pHint )
+ {
+ SbxVariable* pVar = pHint->GetVar();
+ SbProperty* pProp = PTR_CAST(SbProperty,pVar);
+ SbMethod* pMeth = PTR_CAST(SbMethod,pVar);
+ if( pProp )
+ {
+ if( pProp->GetModule() != this )
+ SetError( SbxERR_BAD_ACTION );
+ }
+ else if( pMeth )
+ {
+ if( pHint->GetId() == SBX_HINT_DATAWANTED )
+ {
+ if( pMeth->bInvalid && !Compile() )
+ // Auto-Compile hat nicht geklappt!
+ StarBASIC::Error( SbERR_BAD_PROP_VALUE );
+ else
+ {
+ // Aufruf eines Unterprogramms
+ SbModule* pOld = pMOD;
+ pMOD = this;
+ Run( (SbMethod*) pVar );
+ pMOD = pOld;
+ }
+ }
+ }
+ else
+ {
+ // #i92642: Special handling for name property to avoid
+ // side effects when using name as variable implicitely
+ bool bForwardToSbxObject = true;
+
+ ULONG nId = pHint->GetId();
+ if( (nId == SBX_HINT_DATAWANTED || nId == SBX_HINT_DATACHANGED) &&
+ pVar->GetName().EqualsIgnoreCaseAscii( "name" ) )
+ bForwardToSbxObject = false;
+
+ if( bForwardToSbxObject )
+ SbxObject::SFX_NOTIFY( rBC, rBCType, rHint, rHintType );
+ }
+ }
+}
+
+// Das Setzen der Source macht das Image ungueltig
+// und scant die Methoden-Definitionen neu ein
+
+void SbModule::SetSource( const String& r )
+{
+ SetSource32( r );
+}
+
+void SbModule::SetSource32( const ::rtl::OUString& r )
+{
+ // Default basic mode to library container mode, but.. allow Option VBASupport 0/1 override
+ SetVBACompat( getDefaultVBAMode( static_cast< StarBASIC*>( GetParent() ) ) );
+ aOUSource = r;
+ StartDefinitions();
+ SbiTokenizer aTok( r );
+ while( !aTok.IsEof() )
+ {
+ SbiToken eEndTok = NIL;
+
+ // Suchen nach SUB oder FUNCTION
+ SbiToken eLastTok = NIL;
+ while( !aTok.IsEof() )
+ {
+ // #32385: Nicht bei declare
+ SbiToken eCurTok = aTok.Next();
+ if( eLastTok != DECLARE )
+ {
+ if( eCurTok == SUB )
+ {
+ eEndTok = ENDSUB; break;
+ }
+ if( eCurTok == FUNCTION )
+ {
+ eEndTok = ENDFUNC; break;
+ }
+ if( eCurTok == PROPERTY )
+ {
+ eEndTok = ENDPROPERTY; break;
+ }
+ if( eCurTok == OPTION )
+ {
+ eCurTok = aTok.Next();
+ if( eCurTok == COMPATIBLE )
+ aTok.SetCompatible( true );
+ else if ( ( eCurTok == VBASUPPORT ) && ( aTok.Next() == NUMBER ) )
+ {
+ BOOL bIsVBA = ( aTok.GetDbl()== 1 );
+ SetVBACompat( bIsVBA );
+ aTok.SetCompatible( bIsVBA );
+ }
+ }
+ }
+ eLastTok = eCurTok;
+ }
+ // Definition der Methode
+ SbMethod* pMeth = NULL;
+ if( eEndTok != NIL )
+ {
+ USHORT nLine1 = aTok.GetLine();
+ if( aTok.Next() == SYMBOL )
+ {
+ String aName_( aTok.GetSym() );
+ SbxDataType t = aTok.GetType();
+ if( t == SbxVARIANT && eEndTok == ENDSUB )
+ t = SbxVOID;
+ pMeth = GetMethod( aName_, t );
+ pMeth->nLine1 = pMeth->nLine2 = nLine1;
+ // Die Methode ist erst mal GUELTIG
+ pMeth->bInvalid = FALSE;
+ }
+ else
+ eEndTok = NIL;
+ }
+ // Skip bis END SUB/END FUNCTION
+ if( eEndTok != NIL )
+ {
+ while( !aTok.IsEof() )
+ {
+ if( aTok.Next() == eEndTok )
+ {
+ pMeth->nLine2 = aTok.GetLine();
+ break;
+ }
+ }
+ if( aTok.IsEof() )
+ pMeth->nLine2 = aTok.GetLine();
+ }
+ }
+ EndDefinitions( TRUE );
+}
+
+void SbModule::SetComment( const String& r )
+{
+ aComment = r;
+ SetModified( TRUE );
+}
+
+SbMethod* SbModule::GetFunctionForLine( USHORT nLine )
+{
+ for( USHORT i = 0; i < pMethods->Count(); i++ )
+ {
+ SbMethod* p = (SbMethod*) pMethods->Get( i );
+ if( p->GetSbxId() == SBXID_BASICMETHOD )
+ {
+ if( nLine >= p->nLine1 && nLine <= p->nLine2 )
+ return p;
+ }
+ }
+ return NULL;
+}
+
+// Ausstrahlen eines Hints an alle Basics
+
+static void _SendHint( SbxObject* pObj, ULONG nId, SbMethod* p )
+{
+ // Selbst ein BASIC?
+ if( pObj->IsA( TYPE(StarBASIC) ) && pObj->IsBroadcaster() )
+ pObj->GetBroadcaster().Broadcast( SbxHint( nId, p ) );
+ // Dann die Unterobjekte fragen
+ SbxArray* pObjs = pObj->GetObjects();
+ for( USHORT i = 0; i < pObjs->Count(); i++ )
+ {
+ SbxVariable* pVar = pObjs->Get( i );
+ if( pVar->IsA( TYPE(SbxObject) ) )
+ _SendHint( PTR_CAST(SbxObject,pVar), nId, p );
+ }
+}
+
+static void SendHint( SbxObject* pObj, ULONG nId, SbMethod* p )
+{
+ while( pObj->GetParent() )
+ pObj = pObj->GetParent();
+ _SendHint( pObj, nId, p );
+}
+
+// #57841 Uno-Objekte, die in RTL-Funktionen gehalten werden,
+// beim Programm-Ende freigeben, damit nichts gehalten wird.
+void ClearUnoObjectsInRTL_Impl_Rek( StarBASIC* pBasic )
+{
+ // return-Wert von CreateUnoService loeschen
+ static String aName( RTL_CONSTASCII_USTRINGPARAM("CreateUnoService") );
+ SbxVariable* pVar = pBasic->GetRtl()->Find( aName, SbxCLASS_METHOD );
+ if( pVar )
+ pVar->SbxValue::Clear();
+
+ // return-Wert von CreateUnoDialog loeschen
+ static String aName2( RTL_CONSTASCII_USTRINGPARAM("CreateUnoDialog") );
+ pVar = pBasic->GetRtl()->Find( aName2, SbxCLASS_METHOD );
+ if( pVar )
+ pVar->SbxValue::Clear();
+
+ // return-Wert von CDec loeschen
+ static String aName3( RTL_CONSTASCII_USTRINGPARAM("CDec") );
+ pVar = pBasic->GetRtl()->Find( aName3, SbxCLASS_METHOD );
+ if( pVar )
+ pVar->SbxValue::Clear();
+
+ // return-Wert von CreateObject loeschen
+ static String aName4( RTL_CONSTASCII_USTRINGPARAM("CreateObject") );
+ pVar = pBasic->GetRtl()->Find( aName4, SbxCLASS_METHOD );
+ if( pVar )
+ pVar->SbxValue::Clear();
+
+ // Ueber alle Sub-Basics gehen
+ SbxArray* pObjs = pBasic->GetObjects();
+ USHORT nCount = pObjs->Count();
+ for( USHORT i = 0 ; i < nCount ; i++ )
+ {
+ SbxVariable* pObjVar = pObjs->Get( i );
+ StarBASIC* pSubBasic = PTR_CAST( StarBASIC, pObjVar );
+ if( pSubBasic )
+ ClearUnoObjectsInRTL_Impl_Rek( pSubBasic );
+ }
+}
+
+void ClearUnoObjectsInRTL_Impl( StarBASIC* pBasic )
+{
+ // #67781 Rueckgabewerte der Uno-Methoden loeschen
+ clearUnoMethods();
+ clearUnoServiceCtors();
+
+ ClearUnoObjectsInRTL_Impl_Rek( pBasic );
+
+ // Oberstes Basic suchen
+ SbxObject* p = pBasic;
+ while( p->GetParent() )
+ p = p->GetParent();
+ if( ((StarBASIC*)p) != pBasic )
+ ClearUnoObjectsInRTL_Impl_Rek( (StarBASIC*)p );
+}
+BOOL SbModule::IsVBACompat() const
+{
+ return mbVBACompat;
+}
+
+void SbModule::SetVBACompat( BOOL bCompat )
+{
+ mbVBACompat = bCompat;
+}
+// Ausfuehren eines BASIC-Unterprogramms
+USHORT SbModule::Run( SbMethod* pMeth )
+{
+ static USHORT nMaxCallLevel = 0;
+ static String aMSOMacroRuntimeLibName = String::CreateFromAscii( "Launcher" );
+ static String aMSOMacroRuntimeAppSymbol = String::CreateFromAscii( "Application" );
+
+ USHORT nRes = 0;
+ BOOL bDelInst = BOOL( pINST == NULL );
+ StarBASICRef xBasic;
+ if( bDelInst )
+ {
+#ifdef DBG_TRACE_BASIC
+ dbg_InitTrace();
+#endif
+ // #32779: Basic waehrend der Ausfuehrung festhalten
+ xBasic = (StarBASIC*) GetParent();
+
+ pINST = new SbiInstance( (StarBASIC*) GetParent() );
+
+ // Launcher problem
+ // i80726 The Find below will genarate an error in Testtool so we reset it unless there was one before already
+ BOOL bWasError = SbxBase::GetError() != 0;
+ SbxVariable* pMSOMacroRuntimeLibVar = Find( aMSOMacroRuntimeLibName, SbxCLASS_OBJECT );
+ if ( !bWasError && (SbxBase::GetError() == SbxERR_PROC_UNDEFINED) )
+ SbxBase::ResetError();
+ if( pMSOMacroRuntimeLibVar )
+ {
+ StarBASIC* pMSOMacroRuntimeLib = PTR_CAST(StarBASIC,pMSOMacroRuntimeLibVar);
+ if( pMSOMacroRuntimeLib )
+ {
+ USHORT nGblFlag = pMSOMacroRuntimeLib->GetFlags() & SBX_GBLSEARCH;
+ pMSOMacroRuntimeLib->ResetFlag( SBX_GBLSEARCH );
+ SbxVariable* pAppSymbol = pMSOMacroRuntimeLib->Find( aMSOMacroRuntimeAppSymbol, SbxCLASS_METHOD );
+ pMSOMacroRuntimeLib->SetFlag( nGblFlag );
+ if( pAppSymbol )
+ {
+ pMSOMacroRuntimeLib->SetFlag( SBX_EXTSEARCH ); // Could have been disabled before
+ GetSbData()->pMSOMacroRuntimLib = pMSOMacroRuntimeLib;
+ }
+ }
+ }
+
+ // Error-Stack loeschen
+ SbErrorStack*& rErrStack = GetSbData()->pErrStack;
+ delete rErrStack;
+ rErrStack = NULL;
+
+ if( nMaxCallLevel == 0 )
+ {
+#ifdef UNX
+ struct rlimit rl;
+ getrlimit ( RLIMIT_STACK, &rl );
+ // printf( "RLIMIT_STACK = %ld\n", rl.rlim_cur );
+#endif
+#if defined LINUX
+ // Empiric value, 900 = needed bytes/Basic call level
+ // for Linux including 10% safety margin
+ nMaxCallLevel = rl.rlim_cur / 900;
+#elif defined SOLARIS
+ // Empiric value, 1650 = needed bytes/Basic call level
+ // for Solaris including 10% safety margin
+ nMaxCallLevel = rl.rlim_cur / 1650;
+#elif defined WIN32
+ nMaxCallLevel = 5800;
+#else
+ nMaxCallLevel = MAXRECURSION;
+#endif
+ }
+ }
+
+ // Rekursion zu tief?
+ if( ++pINST->nCallLvl <= nMaxCallLevel )
+ {
+ // Globale Variable in allen Mods definieren
+ GlobalRunInit( /* bBasicStart = */ bDelInst );
+
+ // Trat ein Compiler-Fehler auf? Dann starten wir nicht
+ if( GetSbData()->bGlobalInitErr == FALSE )
+ {
+ if( bDelInst )
+ {
+ SendHint( GetParent(), SBX_HINT_BASICSTART, pMeth );
+
+ // 16.10.96: #31460 Neues Konzept fuer StepInto/Over/Out
+ // Erklaerung siehe runtime.cxx bei SbiInstance::CalcBreakCallLevel()
+ // BreakCallLevel ermitteln
+ pINST->CalcBreakCallLevel( pMeth->GetDebugFlags() );
+ }
+
+ SbModule* pOldMod = pMOD;
+ pMOD = this;
+ SbiRuntime* pRt = new SbiRuntime( this, pMeth, pMeth->nStart );
+
+#ifdef DBG_TRACE_BASIC
+ dbg_traceNotifyCall( this, pMeth, pINST->nCallLvl );
+#endif
+
+ pRt->pNext = pINST->pRun;
+ if( pRt->pNext )
+ pRt->pNext->block();
+ pINST->pRun = pRt;
+ if ( mbVBACompat )
+ {
+ pINST->EnableCompatibility( TRUE );
+ }
+ while( pRt->Step() ) {}
+ if( pRt->pNext )
+ pRt->pNext->unblock();
+
+#ifdef DBG_TRACE_BASIC
+ bool bLeave = true;
+ dbg_traceNotifyCall( this, pMeth, pINST->nCallLvl, bLeave );
+#endif
+
+ // #63710 Durch ein anderes Thread-Handling bei Events kann es passieren,
+ // dass show-Aufruf an einem Dialog zurueckkehrt (durch schliessen des
+ // Dialogs per UI), BEVOR ein per Event ausgeloester weitergehender Call,
+ // der in Basic weiter oben im Stack steht und auf einen Basic-Breakpoint
+ // gelaufen ist, zurueckkehrt. Dann wird unten die Instanz zerstoert und
+ // wenn das noch im Call stehende Basic weiterlaeuft, gibt es einen GPF.
+ // Daher muss hier gewartet werden, bis andere Call zurueckkehrt.
+ if( bDelInst )
+ {
+ // Hier mit 1 statt 0 vergleichen, da vor nCallLvl--
+ while( pINST->nCallLvl != 1 )
+ GetpApp()->Yield();
+ }
+
+ nRes = TRUE;
+ pINST->pRun = pRt->pNext;
+ pINST->nCallLvl--; // Call-Level wieder runter
+
+ // Gibt es eine uebergeordnete Runtime-Instanz?
+ // Dann SbDEBUG_BREAK uebernehmen, wenn gesetzt
+ SbiRuntime* pRtNext = pRt->pNext;
+ if( pRtNext && (pRt->GetDebugFlags() & SbDEBUG_BREAK) )
+ pRtNext->SetDebugFlags( SbDEBUG_BREAK );
+
+ delete pRt;
+ pMOD = pOldMod;
+ if( bDelInst )
+ {
+ // #57841 Uno-Objekte, die in RTL-Funktionen gehalten werden,
+ // beim Programm-Ende freigeben, damit nichts gehalten wird.
+ ClearUnoObjectsInRTL_Impl( xBasic );
+
+ DBG_ASSERT(pINST->nCallLvl==0,"BASIC-Call-Level > 0");
+ delete pINST, pINST = NULL, bDelInst = FALSE;
+
+ // #i30690
+ vos::OGuard aSolarGuard( Application::GetSolarMutex() );
+ SendHint( GetParent(), SBX_HINT_BASICSTOP, pMeth );
+
+ GlobalRunDeInit();
+ }
+ }
+ else
+ pINST->nCallLvl--; // Call-Level wieder runter
+ }
+ else
+ {
+ pINST->nCallLvl--; // Call-Level wieder runter
+ StarBASIC::FatalError( SbERR_STACK_OVERFLOW );
+ }
+
+ // VBA always ensure screenupdating is enabled after completing
+ StarBASIC* pBasic = PTR_CAST(StarBASIC,GetParent());
+#if 0
+ if ( pBasic && pBasic->IsDocBasic() && !pINST )
+ UnlockControllerHack( pBasic );
+#endif
+ if( bDelInst )
+ {
+ // #57841 Uno-Objekte, die in RTL-Funktionen gehalten werden,
+ // beim Programm-Ende freigeben, damit nichts gehalten wird.
+ ClearUnoObjectsInRTL_Impl( xBasic );
+
+ delete pINST;
+ pINST = NULL;
+ }
+ if ( pBasic && pBasic->IsDocBasic() && pBasic->IsQuitApplication() && !pINST )
+ {
+ Application::PostUserEvent( LINK( &AsyncQuitHandler::instance(), AsyncQuitHandler, OnAsyncQuit ), NULL );
+ }
+
+ return nRes;
+}
+
+// Ausfuehren der Init-Methode eines Moduls nach dem Laden
+// oder der Compilation
+
+void SbModule::RunInit()
+{
+ if( pImage
+ && !pImage->bInit
+ && pImage->GetFlag( SBIMG_INITCODE ) )
+ {
+ // Flag setzen, dass RunInit aktiv ist (Testtool)
+ GetSbData()->bRunInit = TRUE;
+
+ // BOOL bDelInst = BOOL( pINST == NULL );
+ // if( bDelInst )
+ // pINST = new SbiInstance( (StarBASIC*) GetParent() );
+ SbModule* pOldMod = pMOD;
+ pMOD = this;
+ // Der Init-Code beginnt immer hier
+ SbiRuntime* pRt = new SbiRuntime( this, NULL, 0 );
+
+#ifdef DBG_TRACE_BASIC
+ dbg_traceNotifyCall( this, NULL, 0 );
+#endif
+
+ pRt->pNext = pINST->pRun;
+ pINST->pRun = pRt;
+ while( pRt->Step() ) {}
+
+#ifdef DBG_TRACE_BASIC
+ bool bLeave = true;
+ dbg_traceNotifyCall( this, NULL, 0, bLeave );
+#endif
+
+ pINST->pRun = pRt->pNext;
+ delete pRt;
+ pMOD = pOldMod;
+ // if( bDelInst )
+ // delete pINST, pINST = NULL;
+ pImage->bInit = TRUE;
+ pImage->bFirstInit = FALSE;
+
+ // RunInit ist nicht mehr aktiv
+ GetSbData()->bRunInit = FALSE;
+ }
+}
+
+// Mit private/dim deklarierte Variablen loeschen
+
+void SbModule::AddVarName( const String& aName )
+{
+ // see if the name is added allready
+ std::vector< String >::iterator it_end = mModuleVariableNames.end();
+ for ( std::vector< String >::iterator it = mModuleVariableNames.begin(); it != it_end; ++it )
+ {
+ if ( aName == *it )
+ return;
+ }
+ mModuleVariableNames.push_back( aName );
+}
+
+void SbModule::RemoveVars()
+{
+ std::vector< String >::iterator it_end = mModuleVariableNames.end();
+ for ( std::vector< String >::iterator it = mModuleVariableNames.begin(); it != it_end; ++it )
+ {
+ // We don't want a Find being called in a derived class ( e.g.
+ // SbUserform because it could trigger say an initialise event
+ // which would cause basic to be re-run in the middle of the init ( and remember RemoveVars is called from compile and we don't want code to run as part of the compile )
+ SbxVariableRef p = SbModule::Find( *it, SbxCLASS_PROPERTY );
+ if( p.Is() )
+ Remove (p);
+ }
+}
+
+void SbModule::ClearPrivateVars()
+{
+ for( USHORT i = 0 ; i < pProps->Count() ; i++ )
+ {
+ SbProperty* p = PTR_CAST(SbProperty,pProps->Get( i ) );
+ if( p )
+ {
+ // Arrays nicht loeschen, sondern nur deren Inhalt
+ if( p->GetType() & SbxARRAY )
+ {
+ SbxArray* pArray = PTR_CAST(SbxArray,p->GetObject());
+ if( pArray )
+ {
+ for( USHORT j = 0 ; j < pArray->Count() ; j++ )
+ {
+ SbxVariable* pj = PTR_CAST(SbxVariable,pArray->Get( j ));
+ pj->SbxValue::Clear();
+ /*
+ USHORT nFlags = pj->GetFlags();
+ pj->SetFlags( (nFlags | SBX_WRITE) & (~SBX_FIXED) );
+ pj->PutEmpty();
+ pj->SetFlags( nFlags );
+ */
+ }
+ }
+ }
+ else
+ {
+ p->SbxValue::Clear();
+ /*
+ USHORT nFlags = p->GetFlags();
+ p->SetFlags( (nFlags | SBX_WRITE) & (~SBX_FIXED) );
+ p->PutEmpty();
+ p->SetFlags( nFlags );
+ */
+ }
+ }
+ }
+}
+
+// Zunaechst in dieses Modul, um 358-faehig zu bleiben
+// (Branch in sb.cxx vermeiden)
+void StarBASIC::ClearAllModuleVars( void )
+{
+ // Eigene Module initialisieren
+ for ( USHORT nMod = 0; nMod < pModules->Count(); nMod++ )
+ {
+ SbModule* pModule = (SbModule*)pModules->Get( nMod );
+ // Nur initialisieren, wenn der Startcode schon ausgefuehrt wurde
+ if( pModule->pImage && pModule->pImage->bInit )
+ pModule->ClearPrivateVars();
+ }
+
+ /* #88042 This code can delete already used public vars during runtime!
+ // Alle Objekte ueberpruefen, ob es sich um ein Basic handelt
+ // Wenn ja, auch dort initialisieren
+ for ( USHORT nObj = 0; nObj < pObjs->Count(); nObj++ )
+ {
+ SbxVariable* pVar = pObjs->Get( nObj );
+ StarBASIC* pBasic = PTR_CAST(StarBASIC,pVar);
+ if( pBasic )
+ pBasic->ClearAllModuleVars();
+ }
+ */
+}
+
+// Ausfuehren des Init-Codes aller Module
+void SbModule::GlobalRunInit( BOOL bBasicStart )
+{
+ // Wenn kein Basic-Start, nur initialisieren, wenn Modul uninitialisiert
+ if( !bBasicStart )
+ if( !(pImage && !pImage->bInit) )
+ return;
+
+ // GlobalInitErr-Flag fuer Compiler-Error initialisieren
+ // Anhand dieses Flags kann in SbModule::Run() nach dem Aufruf
+ // von GlobalRunInit festgestellt werden, ob beim initialisieren
+ // der Module ein Fehler auftrat. Dann wird nicht gestartet.
+ GetSbData()->bGlobalInitErr = FALSE;
+
+ // Parent vom Modul ist ein Basic
+ StarBASIC *pBasic = PTR_CAST(StarBASIC,GetParent());
+ if( pBasic )
+ {
+ pBasic->InitAllModules();
+
+ SbxObject* pParent_ = pBasic->GetParent();
+ if( pParent_ )
+ {
+ StarBASIC * pParentBasic = PTR_CAST(StarBASIC,pParent_);
+ if( pParentBasic )
+ {
+ pParentBasic->InitAllModules( pBasic );
+
+ // #109018 Parent can also have a parent (library in doc)
+ SbxObject* pParentParent = pParentBasic->GetParent();
+ if( pParentParent )
+ {
+ StarBASIC * pParentParentBasic = PTR_CAST(StarBASIC,pParentParent);
+ if( pParentParentBasic )
+ pParentParentBasic->InitAllModules( pParentBasic );
+ }
+ }
+ }
+ }
+}
+
+void SbModule::GlobalRunDeInit( void )
+{
+ StarBASIC *pBasic = PTR_CAST(StarBASIC,GetParent());
+ if( pBasic )
+ {
+ pBasic->DeInitAllModules();
+
+ SbxObject* pParent_ = pBasic->GetParent();
+ if( pParent_ )
+ pBasic = PTR_CAST(StarBASIC,pParent_);
+ if( pBasic )
+ pBasic->DeInitAllModules();
+ }
+}
+
+// Suche nach dem naechsten STMNT-Befehl im Code. Wird vom STMNT-
+// Opcode verwendet, um die Endspalte zu setzen.
+
+const BYTE* SbModule::FindNextStmnt( const BYTE* p, USHORT& nLine, USHORT& nCol ) const
+{
+ return FindNextStmnt( p, nLine, nCol, FALSE );
+}
+
+const BYTE* SbModule::FindNextStmnt( const BYTE* p, USHORT& nLine, USHORT& nCol,
+ BOOL bFollowJumps, const SbiImage* pImg ) const
+{
+ UINT32 nPC = (UINT32) ( p - (const BYTE*) pImage->GetCode() );
+ while( nPC < pImage->GetCodeSize() )
+ {
+ SbiOpcode eOp = (SbiOpcode ) ( *p++ );
+ nPC++;
+ if( bFollowJumps && eOp == _JUMP && pImg )
+ {
+ DBG_ASSERT( pImg, "FindNextStmnt: pImg==NULL with FollowJumps option" );
+ UINT32 nOp1 = *p++; nOp1 |= *p++ << 8;
+ nOp1 |= *p++ << 16; nOp1 |= *p++ << 24;
+ p = (const BYTE*) pImg->GetCode() + nOp1;
+ }
+ else if( eOp >= SbOP1_START && eOp <= SbOP1_END )
+ p += 4, nPC += 4;
+ else if( eOp == _STMNT )
+ {
+ UINT32 nl, nc;
+ nl = *p++; nl |= *p++ << 8;
+ nl |= *p++ << 16 ; nl |= *p++ << 24;
+ nc = *p++; nc |= *p++ << 8;
+ nc |= *p++ << 16 ; nc |= *p++ << 24;
+ nLine = (USHORT)nl; nCol = (USHORT)nc;
+ return p;
+ }
+ else if( eOp >= SbOP2_START && eOp <= SbOP2_END )
+ p += 8, nPC += 8;
+ else if( !( eOp >= SbOP0_START && eOp <= SbOP0_END ) )
+ {
+ StarBASIC::FatalError( SbERR_INTERNAL_ERROR );
+ break;
+ }
+ }
+ return NULL;
+}
+
+// Testen, ob eine Zeile STMNT-Opcodes enthaelt
+
+BOOL SbModule::IsBreakable( USHORT nLine ) const
+{
+ if( !pImage )
+ return FALSE;
+ const BYTE* p = (const BYTE* ) pImage->GetCode();
+ USHORT nl, nc;
+ while( ( p = FindNextStmnt( p, nl, nc ) ) != NULL )
+ if( nl == nLine )
+ return TRUE;
+ return FALSE;
+}
+
+USHORT SbModule::GetBPCount() const
+{
+ return pBreaks ? pBreaks->Count() : 0;
+}
+
+USHORT SbModule::GetBP( USHORT n ) const
+{
+ if( pBreaks && n < pBreaks->Count() )
+ return pBreaks->GetObject( n );
+ else
+ return 0;
+}
+
+BOOL SbModule::IsBP( USHORT nLine ) const
+{
+ if( pBreaks )
+ {
+ const USHORT* p = pBreaks->GetData();
+ USHORT n = pBreaks->Count();
+ for( USHORT i = 0; i < n; i++, p++ )
+ {
+ USHORT b = *p;
+ if( b == nLine )
+ return TRUE;
+ if( b < nLine )
+ break;
+ }
+ }
+ return FALSE;
+}
+
+BOOL SbModule::SetBP( USHORT nLine )
+{
+ if( !IsBreakable( nLine ) )
+ return FALSE;
+ if( !pBreaks )
+ pBreaks = new SbiBreakpoints;
+ const USHORT* p = pBreaks->GetData();
+ USHORT n = pBreaks->Count();
+ USHORT i;
+ for( i = 0; i < n; i++, p++ )
+ {
+ USHORT b = *p;
+ if( b == nLine )
+ return TRUE;
+ if( b < nLine )
+ break;
+ }
+ pBreaks->Insert( &nLine, 1, i );
+
+ // #38568: Zur Laufzeit auch hier SbDEBUG_BREAK setzen
+ if( pINST && pINST->pRun )
+ pINST->pRun->SetDebugFlags( SbDEBUG_BREAK );
+
+ return IsBreakable( nLine );
+}
+
+BOOL SbModule::ClearBP( USHORT nLine )
+{
+ BOOL bRes = FALSE;
+ if( pBreaks )
+ {
+ const USHORT* p = pBreaks->GetData();
+ USHORT n = pBreaks->Count();
+ for( USHORT i = 0; i < n; i++, p++ )
+ {
+ USHORT b = *p;
+ if( b == nLine )
+ {
+ pBreaks->Remove( i, 1 ); bRes = TRUE; break;
+ }
+ if( b < nLine )
+ break;
+ }
+ if( !pBreaks->Count() )
+ delete pBreaks, pBreaks = NULL;
+ }
+ return bRes;
+}
+
+void SbModule::ClearAllBP()
+{
+ delete pBreaks; pBreaks = NULL;
+}
+
+void
+SbModule::fixUpMethodStart( bool bCvtToLegacy, SbiImage* pImg ) const
+{
+ if ( !pImg )
+ pImg = pImage;
+ for( UINT32 i = 0; i < pMethods->Count(); i++ )
+ {
+ SbMethod* pMeth = PTR_CAST(SbMethod,pMethods->Get( (USHORT)i ) );
+ if( pMeth )
+ {
+ //fixup method start positions
+ if ( bCvtToLegacy )
+ pMeth->nStart = pImg->CalcLegacyOffset( pMeth->nStart );
+ else
+ pMeth->nStart = pImg->CalcNewOffset( (USHORT)pMeth->nStart );
+ }
+ }
+
+}
+
+BOOL SbModule::LoadData( SvStream& rStrm, USHORT nVer )
+{
+ Clear();
+ if( !SbxObject::LoadData( rStrm, 1 ) )
+ return FALSE;
+ // Sicherheitshalber...
+ SetFlag( SBX_EXTSEARCH | SBX_GBLSEARCH );
+ BYTE bImage;
+ rStrm >> bImage;
+ if( bImage )
+ {
+ SbiImage* p = new SbiImage;
+ UINT32 nImgVer = 0;
+
+ if( !p->Load( rStrm, nImgVer ) )
+ {
+ delete p;
+ return FALSE;
+ }
+ // If the image is in old format, we fix up the method start offsets
+ if ( nImgVer < B_EXT_IMG_VERSION )
+ {
+ fixUpMethodStart( false, p );
+ p->ReleaseLegacyBuffer();
+ }
+ aComment = p->aComment;
+ SetName( p->aName );
+ if( p->GetCodeSize() )
+ {
+ aOUSource = p->aOUSource;
+ // Alte Version: Image weg
+ if( nVer == 1 )
+ {
+ SetSource32( p->aOUSource );
+ delete p;
+ }
+ else
+ pImage = p;
+ }
+ else
+ {
+ SetSource32( p->aOUSource );
+ delete p;
+ }
+ }
+ return TRUE;
+}
+
+BOOL SbModule::StoreData( SvStream& rStrm ) const
+{
+ BOOL bFixup = ( pImage && !pImage->ExceedsLegacyLimits() );
+ if ( bFixup )
+ fixUpMethodStart( true );
+ BOOL bRet = SbxObject::StoreData( rStrm );
+ if ( !bRet )
+ return FALSE;
+
+ if( pImage )
+ {
+ pImage->aOUSource = aOUSource;
+ pImage->aComment = aComment;
+ pImage->aName = GetName();
+ rStrm << (BYTE) 1;
+ // # PCode is saved only for legacy formats only
+ // It should be noted that it probably isn't necessary
+ // It would be better not to store the image ( more flexible with
+ // formats )
+ bool bRes = pImage->Save( rStrm, B_LEGACYVERSION );
+ if ( bFixup )
+ fixUpMethodStart( false ); // restore method starts
+ return bRes;
+
+ }
+ else
+ {
+ SbiImage aImg;
+ aImg.aOUSource = aOUSource;
+ aImg.aComment = aComment;
+ aImg.aName = GetName();
+ rStrm << (BYTE) 1;
+ return aImg.Save( rStrm );
+ }
+}
+
+BOOL SbModule::ExceedsLegacyModuleSize()
+{
+ if ( !IsCompiled() )
+ Compile();
+ if ( pImage && pImage->ExceedsLegacyLimits() )
+ return true;
+ return false;
+}
+
+
+// Store only image, no source
+BOOL SbModule::StoreBinaryData( SvStream& rStrm )
+{
+ return StoreBinaryData( rStrm, 0 );
+}
+
+BOOL SbModule::StoreBinaryData( SvStream& rStrm, USHORT nVer )
+{
+ BOOL bRet = Compile();
+ if( bRet )
+ {
+ BOOL bFixup = ( !nVer && !pImage->ExceedsLegacyLimits() );// save in old image format, fix up method starts
+
+ if ( bFixup ) // save in old image format, fix up method starts
+ fixUpMethodStart( true );
+ bRet = SbxObject::StoreData( rStrm );
+ if( bRet )
+ {
+ pImage->aOUSource = ::rtl::OUString();
+ pImage->aComment = aComment;
+ pImage->aName = GetName();
+
+ rStrm << (BYTE) 1;
+ if ( nVer )
+ bRet = pImage->Save( rStrm, B_EXT_IMG_VERSION );
+ else
+ bRet = pImage->Save( rStrm, B_LEGACYVERSION );
+ if ( bFixup )
+ fixUpMethodStart( false ); // restore method starts
+
+ pImage->aOUSource = aOUSource;
+ }
+ }
+ return bRet;
+}
+
+// Called for >= OO 1.0 passwd protected libraries only
+//
+
+BOOL SbModule::LoadBinaryData( SvStream& rStrm )
+{
+ ::rtl::OUString aKeepSource = aOUSource;
+ bool bRet = LoadData( rStrm, 2 );
+ LoadCompleted();
+ aOUSource = aKeepSource;
+ return bRet;
+}
+
+
+BOOL SbModule::LoadCompleted()
+{
+ SbxArray* p = GetMethods();
+ USHORT i;
+ for( i = 0; i < p->Count(); i++ )
+ {
+ SbMethod* q = PTR_CAST(SbMethod,p->Get( i ) );
+ if( q )
+ q->pMod = this;
+ }
+ p = GetProperties();
+ for( i = 0; i < p->Count(); i++ )
+ {
+ SbProperty* q = PTR_CAST(SbProperty,p->Get( i ) );
+ if( q )
+ q->pMod = this;
+ }
+ return TRUE;
+}
+
+/////////////////////////////////////////////////////////////////////////
+// Implementation SbJScriptModule (Basic-Modul fuer JavaScript-Sourcen)
+SbJScriptModule::SbJScriptModule( const String& rName )
+ :SbModule( rName )
+{
+}
+
+BOOL SbJScriptModule::LoadData( SvStream& rStrm, USHORT nVer )
+{
+ (void)nVer;
+
+ Clear();
+ if( !SbxObject::LoadData( rStrm, 1 ) )
+ return FALSE;
+
+ // Source-String holen
+ String aTmp;
+ rStrm.ReadByteString( aTmp, gsl_getSystemTextEncoding() );
+ aOUSource = aTmp;
+ //rStrm >> aSource;
+ return TRUE;
+}
+
+BOOL SbJScriptModule::StoreData( SvStream& rStrm ) const
+{
+ if( !SbxObject::StoreData( rStrm ) )
+ return FALSE;
+
+ // Source-String schreiben
+ String aTmp = aOUSource;
+ rStrm.WriteByteString( aTmp, gsl_getSystemTextEncoding() );
+ //rStrm << aSource;
+ return TRUE;
+}
+
+
+/////////////////////////////////////////////////////////////////////////
+
+SbMethod::SbMethod( const String& r, SbxDataType t, SbModule* p )
+ : SbxMethod( r, t ), pMod( p )
+{
+ bInvalid = TRUE;
+ nStart =
+ nDebugFlags =
+ nLine1 =
+ nLine2 = 0;
+ refStatics = new SbxArray;
+ // AB: 2.7.1996: HACK wegen 'Referenz kann nicht gesichert werden'
+ SetFlag( SBX_NO_MODIFY );
+}
+
+SbMethod::SbMethod( const SbMethod& r )
+ : SvRefBase( r ), SbxMethod( r )
+{
+ pMod = r.pMod;
+ bInvalid = r.bInvalid;
+ nStart = r.nStart;
+ nDebugFlags = r.nDebugFlags;
+ nLine1 = r.nLine1;
+ nLine2 = r.nLine2;
+ refStatics = r.refStatics;
+ SetFlag( SBX_NO_MODIFY );
+}
+
+SbMethod::~SbMethod()
+{
+}
+
+SbxArray* SbMethod::GetLocals()
+{
+ if( pINST )
+ return pINST->GetLocals( this );
+ else
+ return NULL;
+}
+
+void SbMethod::ClearStatics()
+{
+ refStatics = new SbxArray;
+
+}
+SbxArray* SbMethod::GetStatics()
+{
+ return refStatics;
+}
+
+BOOL SbMethod::LoadData( SvStream& rStrm, USHORT nVer )
+{
+ if( !SbxMethod::LoadData( rStrm, 1 ) )
+ return FALSE;
+ INT16 n;
+ rStrm >> n;
+ INT16 nTempStart = (INT16)nStart;
+ // nDebugFlags = n; // AB 16.1.96: Nicht mehr uebernehmen
+ if( nVer == 2 )
+ rStrm >> nLine1 >> nLine2 >> nTempStart >> bInvalid;
+ // AB: 2.7.1996: HACK wegen 'Referenz kann nicht gesichert werden'
+ SetFlag( SBX_NO_MODIFY );
+ nStart = nTempStart;
+ return TRUE;
+}
+
+BOOL SbMethod::StoreData( SvStream& rStrm ) const
+{
+ if( !SbxMethod::StoreData( rStrm ) )
+ return FALSE;
+ rStrm << (INT16) nDebugFlags
+ << (INT16) nLine1
+ << (INT16) nLine2
+ << (INT16) nStart
+ << (BYTE) bInvalid;
+ return TRUE;
+}
+
+void SbMethod::GetLineRange( USHORT& l1, USHORT& l2 )
+{
+ l1 = nLine1; l2 = nLine2;
+}
+
+// Kann spaeter mal weg
+
+SbxInfo* SbMethod::GetInfo()
+{
+ return pInfo;
+}
+
+// Schnittstelle zum Ausfuehren einer Methode aus den Applikationen
+// #34191# Mit speziellem RefCounting, damit das Basic nicht durch CloseDocument()
+// abgeschossen werden kann. Rueckgabewert wird als String geliefert.
+ErrCode SbMethod::Call( SbxValue* pRet )
+{
+ // RefCount vom Modul hochzaehlen
+ SbModule* pMod_ = (SbModule*)GetParent();
+ pMod_->AddRef();
+
+ // RefCount vom Basic hochzaehlen
+ StarBASIC* pBasic = (StarBASIC*)pMod_->GetParent();
+ pBasic->AddRef();
+
+ // Values anlegen, um Return-Wert zu erhalten
+ SbxValues aVals;
+ aVals.eType = SbxVARIANT;
+
+ // #104083: Compile BEFORE get
+ if( bInvalid && !pMod_->Compile() )
+ StarBASIC::Error( SbERR_BAD_PROP_VALUE );
+
+ Get( aVals );
+ if ( pRet )
+ pRet->Put( aVals );
+
+ // Gab es einen Error
+ ErrCode nErr = SbxBase::GetError();
+ SbxBase::ResetError();
+
+ // Objekte freigeben
+ pMod_->ReleaseRef();
+ pBasic->ReleaseRef();
+
+ return nErr;
+}
+
+
+// #100883 Own Broadcast for SbMethod
+void SbMethod::Broadcast( ULONG nHintId )
+{
+ if( pCst && !IsSet( SBX_NO_BROADCAST ) && StaticIsEnabledBroadcasting() )
+ {
+ // Da die Methode von aussen aufrufbar ist, hier noch einmal
+ // die Berechtigung testen
+ if( nHintId & SBX_HINT_DATAWANTED )
+ if( !CanRead() )
+ return;
+ if( nHintId & SBX_HINT_DATACHANGED )
+ if( !CanWrite() )
+ return;
+
+ if( pMod && !pMod->IsCompiled() )
+ pMod->Compile();
+
+ // Block broadcasts while creating new method
+ SfxBroadcaster* pSave = pCst;
+ pCst = NULL;
+ SbMethod* pThisCopy = new SbMethod( *this );
+ SbMethodRef xHolder = pThisCopy;
+ if( mpPar.Is() )
+ {
+ // this, als Element 0 eintragen, aber den Parent nicht umsetzen!
+ if( GetType() != SbxVOID )
+ mpPar->PutDirect( pThisCopy, 0 );
+ SetParameters( NULL );
+ }
+
+ pCst = pSave;
+ pSave->Broadcast( SbxHint( nHintId, pThisCopy ) );
+
+ USHORT nSaveFlags = GetFlags();
+ SetFlag( SBX_READWRITE );
+ pCst = NULL;
+ Put( pThisCopy->GetValues_Impl() );
+ pCst = pSave;
+ SetFlags( nSaveFlags );
+ }
+}
+
+/////////////////////////////////////////////////////////////////////////
+
+// Implementation SbJScriptMethod (Method-Klasse als Wrapper fuer JavaScript-Funktionen)
+
+SbJScriptMethod::SbJScriptMethod( const String& r, SbxDataType t, SbModule* p )
+ : SbMethod( r, t, p )
+{
+}
+
+SbJScriptMethod::~SbJScriptMethod()
+{}
+
+
+/////////////////////////////////////////////////////////////////////////
+SbObjModule::SbObjModule( const String& rName, const com::sun::star::script::ModuleInfo& mInfo, bool bIsVbaCompatible )
+ : SbModule( rName, bIsVbaCompatible )
+{
+ SetModuleType( mInfo.ModuleType );
+ if ( mInfo.ModuleType == script::ModuleType::FORM )
+ {
+ SetClassName( rtl::OUString::createFromAscii( "Form" ) );
+ }
+ else if ( mInfo.ModuleObject.is() )
+ SetUnoObject( uno::makeAny( mInfo.ModuleObject ) );
+}
+void
+SbObjModule::SetUnoObject( const uno::Any& aObj ) throw ( uno::RuntimeException )
+{
+ SbUnoObject* pUnoObj = PTR_CAST(SbUnoObject,(SbxVariable*)pDocObject);
+ if ( pUnoObj && pUnoObj->getUnoAny() == aObj ) // object is equal, nothing to do
+ return;
+ pDocObject = new SbUnoObject( GetName(), uno::makeAny( aObj ) );
+
+ com::sun::star::uno::Reference< com::sun::star::lang::XServiceInfo > xServiceInfo( aObj, com::sun::star::uno::UNO_QUERY_THROW );
+ if( xServiceInfo->supportsService( rtl::OUString::createFromAscii( "ooo.vba.excel.Worksheet" ) ) )
+ {
+ SetClassName( rtl::OUString::createFromAscii( "Worksheet" ) );
+ }
+ else if( xServiceInfo->supportsService( rtl::OUString::createFromAscii( "ooo.vba.excel.Workbook" ) ) )
+ {
+ SetClassName( rtl::OUString::createFromAscii( "Workbook" ) );
+ }
+}
+
+SbxVariable*
+SbObjModule::GetObject()
+{
+ return pDocObject;
+}
+SbxVariable*
+SbObjModule::Find( const XubString& rName, SbxClassType t )
+{
+ //OSL_TRACE("SbObjectModule find for %s", rtl::OUStringToOString( rName, RTL_TEXTENCODING_UTF8 ).getStr() );
+ SbxVariable* pVar = NULL;
+ if ( pDocObject)
+ pVar = pDocObject->Find( rName, t );
+ if ( !pVar )
+ pVar = SbModule::Find( rName, t );
+ return pVar;
+}
+
+typedef ::cppu::WeakImplHelper2< awt::XTopWindowListener, awt::XWindowListener > FormObjEventListener_BASE;
+
+class FormObjEventListenerImpl : public FormObjEventListener_BASE
+{
+ SbUserFormModule* mpUserForm;
+ uno::Reference< lang::XComponent > mxComponent;
+ bool mbDisposed;
+ sal_Bool mbOpened;
+ sal_Bool mbActivated;
+ sal_Bool mbShowing;
+ FormObjEventListenerImpl(); // not defined
+ FormObjEventListenerImpl(const FormObjEventListenerImpl&); // not defined
+
+public:
+ FormObjEventListenerImpl( SbUserFormModule* pUserForm, const uno::Reference< lang::XComponent >& xComponent ) :
+ mpUserForm( pUserForm ), mxComponent( xComponent) ,
+ mbDisposed( false ), mbOpened( sal_False ), mbActivated( sal_False ), mbShowing( sal_False )
+ {
+ if ( mxComponent.is() )
+ {
+ OSL_TRACE("*********** Registering the listeners");
+ try
+ {
+ uno::Reference< awt::XTopWindow >( mxComponent, uno::UNO_QUERY_THROW )->addTopWindowListener( this );
+ }
+ catch( uno::Exception& ) {}
+ try
+ {
+ uno::Reference< awt::XWindow >( mxComponent, uno::UNO_QUERY_THROW )->addWindowListener( this );
+ }
+ catch( uno::Exception& ) {}
+ }
+ }
+
+ virtual ~FormObjEventListenerImpl()
+ {
+ removeListener();
+ }
+
+ sal_Bool isShowing() const { return mbShowing; }
+
+ void removeListener()
+ {
+ if ( mxComponent.is() && !mbDisposed )
+ {
+ OSL_TRACE("*********** Removing the listeners");
+ try
+ {
+ uno::Reference< awt::XTopWindow >( mxComponent, uno::UNO_QUERY_THROW )->removeTopWindowListener( this );
+ }
+ catch( uno::Exception& ) {}
+ try
+ {
+ uno::Reference< awt::XWindow >( mxComponent, uno::UNO_QUERY_THROW )->removeWindowListener( this );
+ }
+ catch( uno::Exception& ) {}
+ }
+ mxComponent.clear();
+ }
+
+ virtual void SAL_CALL windowOpened( const lang::EventObject& /*e*/ ) throw (uno::RuntimeException)
+ {
+ if ( mpUserForm )
+ {
+ mbOpened = sal_True;
+ mbShowing = sal_True;
+ if ( mbActivated )
+ {
+ mbOpened = mbActivated = sal_False;
+ mpUserForm->triggerActivateEvent();
+ }
+ }
+ }
+
+ //liuchen 2009-7-21, support Excel VBA Form_QueryClose event
+ virtual void SAL_CALL windowClosing( const lang::EventObject& /*e*/ ) throw (uno::RuntimeException)
+ {
+#if IN_THE_FUTURE
+ uno::Reference< awt::XDialog > xDialog( e.Source, uno::UNO_QUERY );
+ if ( xDialog.is() )
+ {
+ uno::Reference< awt::XControl > xControl( xDialog, uno::UNO_QUERY );
+ if ( xControl->getPeer().is() )
+ {
+ uno::Reference< document::XVbaMethodParameter > xVbaMethodParameter( xControl->getPeer(), uno::UNO_QUERY );
+ if ( xVbaMethodParameter.is() )
+ {
+ sal_Int8 nCancel = 0;
+ sal_Int8 nCloseMode = 0;
+
+ Sequence< Any > aParams;
+ aParams.realloc(2);
+ aParams[0] <<= nCancel;
+ aParams[1] <<= nCloseMode;
+
+ mpUserForm->triggerMethod( rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Userform_QueryClose") ),
+ aParams);
+ xVbaMethodParameter->setVbaMethodParameter( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Cancel")), aParams[0]);
+ return;
+
+ }
+ }
+ }
+
+ mpUserForm->triggerMethod( rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Userform_QueryClose") ) );
+#endif
+ }
+ //liuchen 2009-7-21
+
+ virtual void SAL_CALL windowClosed( const lang::EventObject& /*e*/ ) throw (uno::RuntimeException)
+ {
+ mbOpened = sal_False;
+ mbShowing = sal_False;
+ }
+
+ virtual void SAL_CALL windowMinimized( const lang::EventObject& /*e*/ ) throw (uno::RuntimeException)
+ {
+ }
+
+ virtual void SAL_CALL windowNormalized( const lang::EventObject& /*e*/ ) throw (uno::RuntimeException)
+ {
+ }
+
+ virtual void SAL_CALL windowActivated( const lang::EventObject& /*e*/ ) throw (uno::RuntimeException)
+ {
+ if ( mpUserForm )
+ {
+ mbActivated = sal_True;
+ if ( mbOpened )
+ {
+ mbOpened = mbActivated = sal_False;
+ mpUserForm->triggerActivateEvent();
+ }
+ }
+ }
+
+ virtual void SAL_CALL windowDeactivated( const lang::EventObject& /*e*/ ) throw (uno::RuntimeException)
+ {
+ if ( mpUserForm )
+ mpUserForm->triggerDeactivateEvent();
+ }
+
+ virtual void SAL_CALL windowResized( const awt::WindowEvent& /*e*/ ) throw (uno::RuntimeException)
+ {
+ if ( mpUserForm )
+ {
+ mpUserForm->triggerResizeEvent();
+ mpUserForm->triggerLayoutEvent();
+ }
+ }
+
+ virtual void SAL_CALL windowMoved( const awt::WindowEvent& /*e*/ ) throw (uno::RuntimeException)
+ {
+ if ( mpUserForm )
+ mpUserForm->triggerLayoutEvent();
+ }
+
+ virtual void SAL_CALL windowShown( const lang::EventObject& /*e*/ ) throw (uno::RuntimeException)
+ {
+ }
+
+ virtual void SAL_CALL windowHidden( const lang::EventObject& /*e*/ ) throw (uno::RuntimeException)
+ {
+ }
+
+ virtual void SAL_CALL disposing( const lang::EventObject& /*Source*/ ) throw (uno::RuntimeException)
+ {
+ OSL_TRACE("** Userform/Dialog disposing");
+ mbDisposed = true;
+ mxComponent.clear();
+ if ( mpUserForm )
+ mpUserForm->ResetApiObj();
+ }
+};
+
+SbUserFormModule::SbUserFormModule( const String& rName, const com::sun::star::script::ModuleInfo& mInfo, bool bIsCompat )
+ : SbObjModule( rName, mInfo, bIsCompat )
+ , m_mInfo( mInfo )
+ , mbInit( false )
+{
+ m_xModel.set( mInfo.ModuleObject, uno::UNO_QUERY_THROW );
+}
+
+SbUserFormModule::~SbUserFormModule()
+{
+}
+
+void SbUserFormModule::ResetApiObj()
+{
+ if ( m_xDialog.is() ) // probably someone close the dialog window
+ {
+ triggerTerminateEvent();
+ }
+ pDocObject = NULL;
+ m_xDialog = NULL;
+}
+
+void SbUserFormModule::triggerMethod( const String& aMethodToRun )
+{
+ Sequence< Any > aArguments;
+ triggerMethod( aMethodToRun, aArguments );
+}
+void SbUserFormModule::triggerMethod( const String& aMethodToRun, Sequence< Any >& /*aArguments*/)
+{
+ OSL_TRACE("*** trigger %s ***", rtl::OUStringToOString( aMethodToRun, RTL_TEXTENCODING_UTF8 ).getStr() );
+ // Search method
+ SbxVariable* pMeth = SbObjModule::Find( aMethodToRun, SbxCLASS_METHOD );
+ if( pMeth )
+ {
+#if IN_THE_FUTURE
+ //liuchen 2009-7-21, support Excel VBA UserForm_QueryClose event with parameters
+ if ( aArguments.getLength() > 0 ) // Setup parameters
+ {
+ SbxArrayRef xArray = new SbxArray;
+ xArray->Put( pMeth, 0 ); // Method as parameter 0
+
+ for ( sal_Int32 i = 0; i < aArguments.getLength(); ++i )
+ {
+ SbxVariableRef xSbxVar = new SbxVariable( SbxVARIANT );
+ unoToSbxValue( static_cast< SbxVariable* >( xSbxVar ), aArguments[i] );
+ xArray->Put( xSbxVar, static_cast< USHORT >( i ) + 1 );
+
+ // Enable passing by ref
+ if ( xSbxVar->GetType() != SbxVARIANT )
+ xSbxVar->SetFlag( SBX_FIXED );
+ }
+ pMeth->SetParameters( xArray );
+
+ SbxValues aVals;
+ pMeth->Get( aVals );
+
+ for ( sal_Int32 i = 0; i < aArguments.getLength(); ++i )
+ {
+ aArguments[i] = sbxToUnoValue( xArray->Get( static_cast< USHORT >(i) + 1) );
+ }
+ pMeth->SetParameters( NULL );
+ }
+ else
+//liuchen 2009-7-21
+#endif
+ {
+ SbxValues aVals;
+ pMeth->Get( aVals );
+ }
+ }
+}
+
+void SbUserFormModule::triggerActivateEvent( void )
+{
+ OSL_TRACE("**** entering SbUserFormModule::triggerActivate");
+ triggerMethod( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("UserForm_Activate") ) );
+ OSL_TRACE("**** leaving SbUserFormModule::triggerActivate");
+}
+
+void SbUserFormModule::triggerDeactivateEvent( void )
+{
+ OSL_TRACE("**** SbUserFormModule::triggerDeactivate");
+ triggerMethod( rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Userform_Deactivate") ) );
+}
+
+void SbUserFormModule::triggerInitializeEvent( void )
+{
+ if ( mbInit )
+ return;
+ OSL_TRACE("**** SbUserFormModule::triggerInitializeEvent");
+ static String aInitMethodName( RTL_CONSTASCII_USTRINGPARAM("Userform_Initialize") );
+ triggerMethod( aInitMethodName );
+ mbInit = true;
+}
+
+void SbUserFormModule::triggerTerminateEvent( void )
+{
+ OSL_TRACE("**** SbUserFormModule::triggerTerminateEvent");
+ static String aTermMethodName( RTL_CONSTASCII_USTRINGPARAM("Userform_Terminate") );
+ triggerMethod( aTermMethodName );
+ mbInit=false;
+}
+
+void SbUserFormModule::triggerLayoutEvent( void )
+{
+ static String aMethodName( RTL_CONSTASCII_USTRINGPARAM("Userform_Layout") );
+ triggerMethod( aMethodName );
+}
+
+void SbUserFormModule::triggerResizeEvent( void )
+{
+ static String aMethodName( RTL_CONSTASCII_USTRINGPARAM("Userform_Resize") );
+ triggerMethod( aMethodName );
+}
+
+SbUserFormModuleInstance* SbUserFormModule::CreateInstance()
+{
+ SbUserFormModuleInstance* pInstance = new SbUserFormModuleInstance( this, GetName(), m_mInfo, IsVBACompat() );
+ return pInstance;
+}
+
+SbUserFormModuleInstance::SbUserFormModuleInstance( SbUserFormModule* pParentModule,
+ const String& rName, const com::sun::star::script::ModuleInfo& mInfo, bool bIsVBACompat )
+ : SbUserFormModule( rName, mInfo, bIsVBACompat )
+ , m_pParentModule( pParentModule )
+{
+}
+
+BOOL SbUserFormModuleInstance::IsClass( const XubString& rName ) const
+{
+ BOOL bParentNameMatches = m_pParentModule->GetName().EqualsIgnoreCaseAscii( rName );
+ BOOL bRet = bParentNameMatches || SbxObject::IsClass( rName );
+ return bRet;
+}
+
+SbxVariable* SbUserFormModuleInstance::Find( const XubString& rName, SbxClassType t )
+{
+ SbxVariable* pVar = m_pParentModule->Find( rName, t );
+ return pVar;
+}
+
+
+void SbUserFormModule::Load()
+{
+ OSL_TRACE("** load() ");
+ // forces a load
+ if ( !pDocObject )
+ InitObject();
+}
+
+//liuchen 2009-7-21 change to accmordate VBA's beheavior
+void SbUserFormModule::Unload()
+{
+ OSL_TRACE("** Unload() ");
+
+ sal_Int8 nCancel = 0;
+ sal_Int8 nCloseMode = 1;
+
+ Sequence< Any > aParams;
+ aParams.realloc(2);
+ aParams[0] <<= nCancel;
+ aParams[1] <<= nCloseMode;
+
+ triggerMethod( rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Userform_QueryClose") ), aParams);
+
+ aParams[0] >>= nCancel;
+ if (nCancel == 1)
+ {
+ return;
+ }
+
+ if ( m_xDialog.is() )
+ {
+ triggerTerminateEvent();
+ }
+ // Search method
+ SbxVariable* pMeth = SbObjModule::Find( String( RTL_CONSTASCII_USTRINGPARAM( "UnloadObject" ) ), SbxCLASS_METHOD );
+ if( pMeth )
+ {
+ OSL_TRACE("Attempting too run the UnloadObjectMethod");
+ m_xDialog.clear(); //release ref to the uno object
+ SbxValues aVals;
+ bool bWaitForDispose = true; // assume dialog is showing
+ if ( m_DialogListener.get() )
+ {
+ bWaitForDispose = m_DialogListener->isShowing();
+ OSL_TRACE("Showing %d", bWaitForDispose );
+ }
+ pMeth->Get( aVals);
+ if ( !bWaitForDispose )
+ {
+ // we've either already got a dispose or we'er never going to get one
+ ResetApiObj();
+ } // else wait for dispose
+ OSL_TRACE("UnloadObject completed ( we hope )");
+ }
+}
+//liuchen
+
+void SbUserFormModule::InitObject()
+{
+ try
+ {
+
+ String aHook( RTL_CONSTASCII_USTRINGPARAM( "VBAGlobals" ) );
+ SbUnoObject* pGlobs = (SbUnoObject*)GetParent()->Find( aHook, SbxCLASS_DONTCARE );
+ if ( m_xModel.is() && pGlobs )
+ {
+
+ uno::Reference< lang::XMultiServiceFactory > xVBAFactory( pGlobs->getUnoAny(), uno::UNO_QUERY_THROW );
+ uno::Reference< lang::XMultiServiceFactory > xFactory = comphelper::getProcessServiceFactory();
+ uno::Sequence< uno::Any > aArgs(1);
+ aArgs[ 0 ] <<= m_xModel;
+ rtl::OUString sDialogUrl( RTL_CONSTASCII_USTRINGPARAM("vnd.sun.star.script:" ) );
+ rtl::OUString sProjectName( RTL_CONSTASCII_USTRINGPARAM("Standard") );
+ if ( this->GetParent()->GetName().Len() )
+ sProjectName = this->GetParent()->GetName();
+ sDialogUrl = sDialogUrl.concat( sProjectName ).concat( rtl::OUString( '.') ).concat( GetName() ).concat( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("?location=document") ) );
+
+ uno::Reference< awt::XDialogProvider > xProvider( xFactory->createInstanceWithArguments( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.awt.DialogProvider")), aArgs ), uno::UNO_QUERY_THROW );
+ m_xDialog = xProvider->createDialog( sDialogUrl );
+
+ // create vba api object
+ aArgs.realloc( 4 );
+ aArgs[ 0 ] = uno::Any();
+ aArgs[ 1 ] <<= m_xDialog;
+ aArgs[ 2 ] <<= m_xModel;
+ aArgs[ 3 ] <<= rtl::OUString( GetParent()->GetName() );
+ pDocObject = new SbUnoObject( GetName(), uno::makeAny( xVBAFactory->createInstanceWithArguments( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("ooo.vba.msforms.UserForm")), aArgs ) ) );
+ uno::Reference< lang::XComponent > xComponent( aArgs[ 1 ], uno::UNO_QUERY_THROW );
+ // remove old listener if it exists
+ if ( m_DialogListener.get() )
+ m_DialogListener->removeListener();
+ m_DialogListener = new FormObjEventListenerImpl( this, xComponent );
+
+ triggerInitializeEvent();
+ }
+ }
+ catch( uno::Exception& )
+ {
+ }
+
+}
+
+SbxVariable*
+SbUserFormModule::Find( const XubString& rName, SbxClassType t )
+{
+ if ( !pDocObject && !GetSbData()->bRunInit && pINST )
+ InitObject();
+ return SbObjModule::Find( rName, t );
+}
+/////////////////////////////////////////////////////////////////////////
+
+SbProperty::SbProperty( const String& r, SbxDataType t, SbModule* p )
+ : SbxProperty( r, t ), pMod( p )
+{
+ bInvalid = FALSE;
+}
+
+SbProperty::~SbProperty()
+{}
+
+/////////////////////////////////////////////////////////////////////////
+
+SbProcedureProperty::~SbProcedureProperty()
+{}
+
diff --git a/basic/source/comp/buffer.cxx b/basic/source/comp/buffer.cxx
new file mode 100644
index 000000000000..74559bf0e6c4
--- /dev/null
+++ b/basic/source/comp/buffer.cxx
@@ -0,0 +1,250 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+
+#include "sbcomp.hxx"
+#include "buffer.hxx"
+#include <string.h>
+
+const static UINT32 UP_LIMIT=0xFFFFFF00L;
+
+// Der SbiBuffer wird in Inkrements von mindestens 16 Bytes erweitert.
+// Dies ist notwendig, da viele Klassen von einer Pufferlaenge
+// von x*16 Bytes ausgehen.
+
+SbiBuffer::SbiBuffer( SbiParser* p, short n )
+{
+ pParser = p;
+ n = ( (n + 15 ) / 16 ) * 16;
+ if( !n ) n = 16;
+ pBuf = NULL;
+ pCur = NULL;
+ nInc = n;
+ nSize =
+ nOff = 0;
+}
+
+SbiBuffer::~SbiBuffer()
+{
+ delete[] pBuf;
+}
+
+// Rausreichen des Puffers
+// Dies fuehrt zur Loeschung des Puffers!
+
+char* SbiBuffer::GetBuffer()
+{
+ char* p = pBuf;
+ pBuf = NULL;
+ pCur = NULL;
+ return p;
+}
+
+// Test, ob der Puffer n Bytes aufnehmen kann.
+// Im Zweifelsfall wird er vergroessert
+
+BOOL SbiBuffer::Check( USHORT n )
+{
+ if( !n ) return TRUE;
+ if( ( static_cast<UINT32>( nOff )+ n ) > static_cast<UINT32>( nSize ) )
+ {
+ if( nInc == 0 )
+ return FALSE;
+ USHORT nn = 0;
+ while( nn < n ) nn = nn + nInc;
+ char* p;
+ if( ( static_cast<UINT32>( nSize ) + nn ) > UP_LIMIT ) p = NULL;
+ else p = new char [nSize + nn];
+ if( !p )
+ {
+ pParser->Error( SbERR_PROG_TOO_LARGE );
+ nInc = 0;
+ delete[] pBuf; pBuf = NULL;
+ return FALSE;
+ }
+ else
+ {
+ if( nSize ) memcpy( p, pBuf, nSize );
+ delete[] pBuf;
+ pBuf = p;
+ pCur = pBuf + nOff;
+ nSize = nSize + nn;
+ }
+ }
+ return TRUE;
+}
+
+// Angleich des Puffers auf die uebergebene Byte-Grenze
+
+void SbiBuffer::Align( INT32 n )
+{
+ if( nOff % n ) {
+ UINT32 nn =( ( nOff + n ) / n ) * n;
+ if( nn <= UP_LIMIT )
+ {
+ nn = nn - nOff;
+ if( Check( static_cast<USHORT>(nn) ) )
+ {
+ memset( pCur, 0, nn );
+ pCur += nn;
+ nOff = nOff + nn;
+ }
+ }
+ }
+}
+
+// Patch einer Location
+
+void SbiBuffer::Patch( UINT32 off, UINT32 val )
+{
+ if( ( off + sizeof( UINT32 ) ) < nOff )
+ {
+ UINT16 val1 = static_cast<UINT16>( val & 0xFFFF );
+ UINT16 val2 = static_cast<UINT16>( val >> 16 );
+ BYTE* p = (BYTE*) pBuf + off;
+ *p++ = (char) ( val1 & 0xFF );
+ *p++ = (char) ( val1 >> 8 );
+ *p++ = (char) ( val2 & 0xFF );
+ *p = (char) ( val2 >> 8 );
+ }
+}
+
+// Forward References auf Labels und Prozeduren
+// bauen eine Kette auf. Der Anfang der Kette ist beim uebergebenen
+// Parameter, das Ende der Kette ist 0.
+
+void SbiBuffer::Chain( UINT32 off )
+{
+ if( off && pBuf )
+ {
+ BYTE *ip;
+ UINT32 i = off;
+ UINT32 val1 = (nOff & 0xFFFF);
+ UINT32 val2 = (nOff >> 16);
+ do
+ {
+ ip = (BYTE*) pBuf + i;
+ BYTE* pTmp = ip;
+ i = *pTmp++; i |= *pTmp++ << 8; i |= *pTmp++ << 16; i |= *pTmp++ << 24;
+
+ if( i >= nOff )
+ {
+ pParser->Error( SbERR_INTERNAL_ERROR, "BACKCHAIN" );
+ break;
+ }
+ *ip++ = (char) ( val1 & 0xFF );
+ *ip++ = (char) ( val1 >> 8 );
+ *ip++ = (char) ( val2 & 0xFF );
+ *ip = (char) ( val2 >> 8 );
+ } while( i );
+ }
+}
+
+BOOL SbiBuffer::operator +=( INT8 n )
+{
+ if( Check( 1 ) )
+ {
+ *pCur++ = (char) n; nOff++; return TRUE;
+ } else return FALSE;
+}
+
+BOOL SbiBuffer::operator +=( UINT8 n )
+{
+ if( Check( 1 ) )
+ {
+ *pCur++ = (char) n; nOff++; return TRUE;
+ } else return FALSE;
+}
+
+BOOL SbiBuffer::operator +=( INT16 n )
+{
+ if( Check( 2 ) )
+ {
+ *pCur++ = (char) ( n & 0xFF );
+ *pCur++ = (char) ( n >> 8 );
+ nOff += 2; return TRUE;
+ } else return FALSE;
+}
+
+BOOL SbiBuffer::operator +=( UINT16 n )
+{
+ if( Check( 2 ) )
+ {
+ *pCur++ = (char) ( n & 0xFF );
+ *pCur++ = (char) ( n >> 8 );
+ nOff += 2; return TRUE;
+ } else return FALSE;
+}
+
+BOOL SbiBuffer::operator +=( UINT32 n )
+{
+ if( Check( 4 ) )
+ {
+ UINT16 n1 = static_cast<UINT16>( n & 0xFFFF );
+ UINT16 n2 = static_cast<UINT16>( n >> 16 );
+ if ( operator +=( n1 ) && operator +=( n2 ) )
+ return TRUE;
+ return TRUE;
+ }
+ return FALSE;
+}
+
+BOOL SbiBuffer::operator +=( INT32 n )
+{
+ return operator +=( (UINT32) n );
+}
+
+
+BOOL SbiBuffer::operator +=( const String& n )
+{
+ USHORT l = n.Len() + 1;
+ if( Check( l ) )
+ {
+ ByteString aByteStr( n, gsl_getSystemTextEncoding() );
+ memcpy( pCur, aByteStr.GetBuffer(), l );
+ pCur += l;
+ nOff = nOff + l;
+ return TRUE;
+ }
+ else return FALSE;
+}
+
+BOOL SbiBuffer::Add( const void* p, USHORT len )
+{
+ if( Check( len ) )
+ {
+ memcpy( pCur, p, len );
+ pCur += len;
+ nOff = nOff + len;
+ return TRUE;
+ } else return FALSE;
+}
+
+
+
diff --git a/basic/source/comp/codegen.cxx b/basic/source/comp/codegen.cxx
new file mode 100644
index 000000000000..93fb18baf86e
--- /dev/null
+++ b/basic/source/comp/codegen.cxx
@@ -0,0 +1,539 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+
+#include <basic/sbx.hxx>
+#include "sbcomp.hxx"
+#include "image.hxx"
+#include <limits>
+#include <com/sun/star/script/ModuleType.hpp>
+
+// nInc ist die Inkrementgroesse der Puffer
+
+SbiCodeGen::SbiCodeGen( SbModule& r, SbiParser* p, short nInc )
+ : rMod( r ), aCode( p, nInc )
+{
+ pParser = p;
+ bStmnt = FALSE;
+ nLine = 0;
+ nCol = 0;
+ nForLevel = 0;
+}
+
+UINT32 SbiCodeGen::GetPC()
+{
+ return aCode.GetSize();
+}
+
+// Statement merken
+
+void SbiCodeGen::Statement()
+{
+ bStmnt = TRUE;
+
+ nLine = pParser->GetLine();
+ nCol = pParser->GetCol1();
+
+ // #29955 Information der for-Schleifen-Ebene
+ // in oberen Byte der Spalte speichern
+ nCol = (nCol & 0xff) + 0x100 * nForLevel;
+}
+
+// Anfang eines Statements markieren
+
+void SbiCodeGen::GenStmnt()
+{
+ if( bStmnt )
+ {
+ bStmnt = FALSE;
+ Gen( _STMNT, nLine, nCol );
+ }
+}
+
+// Die Gen-Routinen returnen den Offset des 1. Operanden,
+// damit Jumps dort ihr Backchain versenken koennen
+
+UINT32 SbiCodeGen::Gen( SbiOpcode eOpcode )
+{
+#ifdef DBG_UTIL
+ if( eOpcode < SbOP0_START || eOpcode > SbOP0_END )
+ pParser->Error( SbERR_INTERNAL_ERROR, "OPCODE1" );
+#endif
+ GenStmnt();
+ aCode += (UINT8) eOpcode;
+ return GetPC();
+}
+
+UINT32 SbiCodeGen::Gen( SbiOpcode eOpcode, UINT32 nOpnd )
+{
+#ifdef DBG_UTIL
+ if( eOpcode < SbOP1_START || eOpcode > SbOP1_END )
+ pParser->Error( SbERR_INTERNAL_ERROR, "OPCODE2" );
+#endif
+ GenStmnt();
+ aCode += (UINT8) eOpcode;
+ UINT32 n = GetPC();
+ aCode += nOpnd;
+ return n;
+}
+
+UINT32 SbiCodeGen::Gen( SbiOpcode eOpcode, UINT32 nOpnd1, UINT32 nOpnd2 )
+{
+#ifdef DBG_UTIL
+ if( eOpcode < SbOP2_START || eOpcode > SbOP2_END )
+ pParser->Error( SbERR_INTERNAL_ERROR, "OPCODE3" );
+#endif
+ GenStmnt();
+ aCode += (UINT8) eOpcode;
+ UINT32 n = GetPC();
+ aCode += nOpnd1;
+ aCode += nOpnd2;
+ return n;
+}
+
+// Abspeichern des erzeugten Images im Modul
+
+void SbiCodeGen::Save()
+{
+ SbiImage* p = new SbiImage;
+ rMod.StartDefinitions();
+ // OPTION BASE-Wert:
+ p->nDimBase = pParser->nBase;
+ // OPTION EXPLICIT-Flag uebernehmen
+ if( pParser->bExplicit )
+ p->SetFlag( SBIMG_EXPLICIT );
+
+ int nIfaceCount = 0;
+ if( rMod.mnType == com::sun::star::script::ModuleType::CLASS )
+ {
+ OSL_TRACE("COdeGen::save() classmodule processing");
+ rMod.bIsProxyModule = true;
+ p->SetFlag( SBIMG_CLASSMODULE );
+ pCLASSFAC->AddClassModule( &rMod );
+
+ nIfaceCount = pParser->aIfaceVector.size();
+ if( !rMod.pClassData )
+ rMod.pClassData = new SbClassData;
+ if( nIfaceCount )
+ {
+ for( int i = 0 ; i < nIfaceCount ; i++ )
+ {
+ const String& rIfaceName = pParser->aIfaceVector[i];
+ SbxVariable* pIfaceVar = new SbxVariable( SbxVARIANT );
+ pIfaceVar->SetName( rIfaceName );
+ SbxArray* pIfaces = rMod.pClassData->mxIfaces;
+ pIfaces->Insert( pIfaceVar, pIfaces->Count() );
+ }
+ }
+
+ rMod.pClassData->maRequiredTypes = pParser->aRequiredTypes;
+ }
+ else
+ {
+ pCLASSFAC->RemoveClassModule( &rMod );
+ // Only a ClassModule can revert to Normal
+ if ( rMod.mnType == com::sun::star::script::ModuleType::CLASS )
+ rMod.mnType = com::sun::star::script::ModuleType::NORMAL;
+ rMod.bIsProxyModule = false;
+ }
+
+ if( pParser->bText )
+ p->SetFlag( SBIMG_COMPARETEXT );
+ // GlobalCode-Flag
+ if( pParser->HasGlobalCode() )
+ p->SetFlag( SBIMG_INITCODE );
+ // Die Entrypoints:
+ for( SbiSymDef* pDef = pParser->aPublics.First(); pDef;
+ pDef = pParser->aPublics.Next() )
+ {
+ SbiProcDef* pProc = pDef->GetProcDef();
+ if( pProc && pProc->IsDefined() )
+ {
+ String aProcName = pProc->GetName();
+ String aIfaceProcName;
+ String aIfaceName;
+ USHORT nPassCount = 1;
+ if( nIfaceCount )
+ {
+ int nPropPrefixFound =
+ aProcName.Search( String( RTL_CONSTASCII_USTRINGPARAM("Property ") ) );
+ String aPureProcName = aProcName;
+ String aPropPrefix;
+ if( nPropPrefixFound == 0 )
+ {
+ aPropPrefix = aProcName.Copy( 0, 13 ); // 13 == Len( "Property ?et " )
+ aPureProcName = aProcName.Copy( 13 );
+ }
+ for( int i = 0 ; i < nIfaceCount ; i++ )
+ {
+ const String& rIfaceName = pParser->aIfaceVector[i];
+ int nFound = aPureProcName.Search( rIfaceName );
+ if( nFound == 0 && '_' == aPureProcName.GetChar( rIfaceName.Len() ) )
+ {
+ if( nPropPrefixFound == 0 )
+ aIfaceProcName += aPropPrefix;
+ aIfaceProcName += aPureProcName.Copy( rIfaceName.Len() + 1 );
+ aIfaceName = rIfaceName;
+ nPassCount = 2;
+ break;
+ }
+ }
+ }
+ SbMethod* pMeth = NULL;
+ for( USHORT nPass = 0 ; nPass < nPassCount ; nPass++ )
+ {
+ if( nPass == 1 )
+ aProcName = aIfaceProcName;
+
+ PropertyMode ePropMode = pProc->getPropertyMode();
+ if( ePropMode != PROPERTY_MODE_NONE )
+ {
+ SbxDataType ePropType = SbxEMPTY;
+ switch( ePropMode )
+ {
+ case PROPERTY_MODE_GET:
+ ePropType = pProc->GetType();
+ break;
+ case PROPERTY_MODE_LET:
+ {
+ // type == type of first parameter
+ ePropType = SbxVARIANT; // Default
+ SbiSymPool* pPool = &pProc->GetParams();
+ if( pPool->GetSize() > 1 )
+ {
+ SbiSymDef* pPar = pPool->Get( 1 );
+ if( pPar )
+ ePropType = pPar->GetType();
+ }
+ break;
+ }
+ case PROPERTY_MODE_SET:
+ ePropType = SbxOBJECT;
+ break;
+ case PROPERTY_MODE_NONE:
+ DBG_ERROR( "Illegal PropertyMode PROPERTY_MODE_NONE" );
+ break;
+ }
+ String aPropName = pProc->GetPropName();
+ if( nPass == 1 )
+ aPropName = aPropName.Copy( aIfaceName.Len() + 1 );
+ SbProcedureProperty* pProcedureProperty = NULL;
+ pProcedureProperty = rMod.GetProcedureProperty( aPropName, ePropType );
+ }
+ if( nPass == 1 )
+ {
+ SbIfaceMapperMethod* pMapperMeth = NULL;
+ pMapperMeth = rMod.GetIfaceMapperMethod( aProcName, pMeth );
+ }
+ else
+ {
+ pMeth = rMod.GetMethod( aProcName, pProc->GetType() );
+
+ // #110004
+ if( !pProc->IsPublic() )
+ pMeth->SetFlag( SBX_PRIVATE );
+
+ // Declare? -> Hidden
+ if( pProc->GetLib().Len() > 0 )
+ pMeth->SetFlag( SBX_HIDDEN );
+
+ pMeth->nStart = pProc->GetAddr();
+ pMeth->nLine1 = pProc->GetLine1();
+ pMeth->nLine2 = pProc->GetLine2();
+ // Die Parameter:
+ SbxInfo* pInfo = pMeth->GetInfo();
+ String aHelpFile, aComment;
+ ULONG nHelpId = 0;
+ if( pInfo )
+ {
+ // Die Zusatzdaten retten
+ aHelpFile = pInfo->GetHelpFile();
+ aComment = pInfo->GetComment();
+ nHelpId = pInfo->GetHelpId();
+ }
+ // Und die Parameterliste neu aufbauen
+ pInfo = new SbxInfo( aHelpFile, nHelpId );
+ pInfo->SetComment( aComment );
+ SbiSymPool* pPool = &pProc->GetParams();
+ // Das erste Element ist immer der Funktionswert!
+ for( USHORT i = 1; i < pPool->GetSize(); i++ )
+ {
+ SbiSymDef* pPar = pPool->Get( i );
+ SbxDataType t = pPar->GetType();
+ if( !pPar->IsByVal() )
+ t = (SbxDataType) ( t | SbxBYREF );
+ if( pPar->GetDims() )
+ t = (SbxDataType) ( t | SbxARRAY );
+ // #33677 Optional-Info durchreichen
+ USHORT nFlags = SBX_READ;
+ if( pPar->IsOptional() )
+ nFlags |= SBX_OPTIONAL;
+
+ pInfo->AddParam( pPar->GetName(), t, nFlags );
+
+ UINT32 nUserData = 0;
+ USHORT nDefaultId = pPar->GetDefaultId();
+ if( nDefaultId )
+ nUserData |= nDefaultId;
+ if( pPar->IsParamArray() )
+ nUserData |= PARAM_INFO_PARAMARRAY;
+ if( nUserData )
+ {
+ SbxParamInfo* pParam = (SbxParamInfo*)pInfo->GetParam( i );
+ pParam->nUserData = nUserData;
+ }
+ }
+ pMeth->SetInfo( pInfo );
+ }
+
+ } // for( iPass...
+ }
+ }
+ // Der Code
+ p->AddCode( aCode.GetBuffer(), aCode.GetSize() );
+
+ // Der globale StringPool. 0 ist nicht belegt.
+ SbiStringPool* pPool = &pParser->aGblStrings;
+ USHORT nSize = pPool->GetSize();
+ p->MakeStrings( nSize );
+ USHORT i;
+ for( i = 1; i <= nSize; i++ )
+ p->AddString( pPool->Find( i ) );
+
+ // Typen einfuegen
+ USHORT nCount = pParser->rTypeArray->Count();
+ for (i = 0; i < nCount; i++)
+ p->AddType((SbxObject *)pParser->rTypeArray->Get(i));
+
+ // Insert enum objects
+ nCount = pParser->rEnumArray->Count();
+ for (i = 0; i < nCount; i++)
+ p->AddEnum((SbxObject *)pParser->rEnumArray->Get(i));
+
+ if( !p->IsError() )
+ rMod.pImage = p;
+ else
+ delete p;
+
+ rMod.EndDefinitions();
+}
+
+template < class T >
+class PCodeVisitor
+{
+public:
+ virtual ~PCodeVisitor();
+
+ virtual void start( BYTE* pStart ) = 0;
+ virtual void processOpCode0( SbiOpcode eOp ) = 0;
+ virtual void processOpCode1( SbiOpcode eOp, T nOp1 ) = 0;
+ virtual void processOpCode2( SbiOpcode eOp, T nOp1, T nOp2 ) = 0;
+ virtual bool processParams() = 0;
+ virtual void end() = 0;
+};
+
+template <class T> PCodeVisitor< T >::~PCodeVisitor()
+{}
+
+template <class T>
+class PCodeBufferWalker
+{
+private:
+ T m_nBytes;
+ BYTE* m_pCode;
+ T readParam( BYTE*& pCode )
+ {
+ short nBytes = sizeof( T );
+ T nOp1=0;
+ for ( int i=0; i<nBytes; ++i )
+ nOp1 |= *pCode++ << ( i * 8);
+ return nOp1;
+ }
+public:
+ PCodeBufferWalker( BYTE* pCode, T nBytes ): m_nBytes( nBytes ), m_pCode( pCode )
+ {
+ }
+ void visitBuffer( PCodeVisitor< T >& visitor )
+ {
+ BYTE* pCode = m_pCode;
+ if ( !pCode )
+ return;
+ BYTE* pEnd = pCode + m_nBytes;
+ visitor.start( m_pCode );
+ T nOp1 = 0, nOp2 = 0;
+ for( ; pCode < pEnd; )
+ {
+ SbiOpcode eOp = (SbiOpcode)(*pCode++);
+
+ if ( eOp <= SbOP0_END )
+ visitor.processOpCode0( eOp );
+ else if( eOp >= SbOP1_START && eOp <= SbOP1_END )
+ {
+ if ( visitor.processParams() )
+ nOp1 = readParam( pCode );
+ else
+ pCode += sizeof( T );
+ visitor.processOpCode1( eOp, nOp1 );
+ }
+ else if( eOp >= SbOP2_START && eOp <= SbOP2_END )
+ {
+ if ( visitor.processParams() )
+ {
+ nOp1 = readParam( pCode );
+ nOp2 = readParam( pCode );
+ }
+ else
+ pCode += ( sizeof( T ) * 2 );
+ visitor.processOpCode2( eOp, nOp1, nOp2 );
+ }
+ }
+ visitor.end();
+ }
+};
+
+template < class T, class S >
+class OffSetAccumulator : public PCodeVisitor< T >
+{
+ T m_nNumOp0;
+ T m_nNumSingleParams;
+ T m_nNumDoubleParams;
+public:
+
+ OffSetAccumulator() : m_nNumOp0(0), m_nNumSingleParams(0), m_nNumDoubleParams(0){}
+ virtual void start( BYTE* /*pStart*/ ){}
+ virtual void processOpCode0( SbiOpcode /*eOp*/ ){ ++m_nNumOp0; }
+ virtual void processOpCode1( SbiOpcode /*eOp*/, T /*nOp1*/ ){ ++m_nNumSingleParams; }
+ virtual void processOpCode2( SbiOpcode /*eOp*/, T /*nOp1*/, T /*nOp2*/ ) { ++m_nNumDoubleParams; }
+ virtual void end(){}
+ S offset()
+ {
+ T result = 0 ;
+ static const S max = std::numeric_limits< S >::max();
+ result = m_nNumOp0 + ( ( sizeof(S) + 1 ) * m_nNumSingleParams ) + ( (( sizeof(S) * 2 )+ 1 ) * m_nNumDoubleParams );
+ if ( result > max )
+ return max;
+
+ return static_cast<S>(result);
+ }
+ virtual bool processParams(){ return false; }
+};
+
+
+
+template < class T, class S >
+
+class BufferTransformer : public PCodeVisitor< T >
+{
+ BYTE* m_pStart;
+ SbiBuffer m_ConvertedBuf;
+public:
+ BufferTransformer():m_pStart(NULL), m_ConvertedBuf( NULL, 1024 ) {}
+ virtual void start( BYTE* pStart ){ m_pStart = pStart; }
+ virtual void processOpCode0( SbiOpcode eOp )
+ {
+ m_ConvertedBuf += (UINT8)eOp;
+ }
+ virtual void processOpCode1( SbiOpcode eOp, T nOp1 )
+ {
+ m_ConvertedBuf += (UINT8)eOp;
+ switch( eOp )
+ {
+ case _JUMP:
+ case _JUMPT:
+ case _JUMPF:
+ case _GOSUB:
+ case _CASEIS:
+ case _RETURN:
+ case _ERRHDL:
+ case _TESTFOR:
+ nOp1 = static_cast<T>( convertBufferOffSet(m_pStart, nOp1) );
+ break;
+ case _RESUME:
+ if ( nOp1 > 1 )
+ nOp1 = static_cast<T>( convertBufferOffSet(m_pStart, nOp1) );
+ break;
+ default:
+ break; //
+
+ }
+ m_ConvertedBuf += (S)nOp1;
+ }
+ virtual void processOpCode2( SbiOpcode eOp, T nOp1, T nOp2 )
+ {
+ m_ConvertedBuf += (UINT8)eOp;
+ if ( eOp == _CASEIS )
+ if ( nOp1 )
+ nOp1 = static_cast<T>( convertBufferOffSet(m_pStart, nOp1) );
+ m_ConvertedBuf += (S)nOp1;
+ m_ConvertedBuf += (S)nOp2;
+
+ }
+ virtual bool processParams(){ return true; }
+ virtual void end() {}
+ // yeuch, careful here, you can only call
+ // GetBuffer on the returned SbiBuffer once, also
+ // you (as the caller) get to own the memory
+ SbiBuffer& buffer()
+ {
+ return m_ConvertedBuf;
+ }
+ static S convertBufferOffSet( BYTE* pStart, T nOp1 )
+ {
+ PCodeBufferWalker< T > aBuff( pStart, nOp1);
+ OffSetAccumulator< T, S > aVisitor;
+ aBuff.visitBuffer( aVisitor );
+ return aVisitor.offset();
+ }
+};
+
+UINT32
+SbiCodeGen::calcNewOffSet( BYTE* pCode, UINT16 nOffset )
+{
+ return BufferTransformer< UINT16, UINT32 >::convertBufferOffSet( pCode, nOffset );
+}
+
+UINT16
+SbiCodeGen::calcLegacyOffSet( BYTE* pCode, UINT32 nOffset )
+{
+ return BufferTransformer< UINT32, UINT16 >::convertBufferOffSet( pCode, nOffset );
+}
+
+template <class T, class S>
+void
+PCodeBuffConvertor<T,S>::convert()
+{
+ PCodeBufferWalker< T > aBuf( m_pStart, m_nSize );
+ BufferTransformer< T, S > aTrnsfrmer;
+ aBuf.visitBuffer( aTrnsfrmer );
+ m_pCnvtdBuf = (BYTE*)aTrnsfrmer.buffer().GetBuffer();
+ m_nCnvtdSize = static_cast<S>( aTrnsfrmer.buffer().GetSize() );
+}
+
+template class PCodeBuffConvertor< UINT16, UINT32 >;
+template class PCodeBuffConvertor< UINT32, UINT16 >;
diff --git a/basic/source/comp/dim.cxx b/basic/source/comp/dim.cxx
new file mode 100644
index 000000000000..59d77e3f3757
--- /dev/null
+++ b/basic/source/comp/dim.cxx
@@ -0,0 +1,1203 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+#include <basic/sbx.hxx>
+#include "sbcomp.hxx"
+
+SbxObject* cloneTypeObjectImpl( const SbxObject& rTypeObj );
+
+// Deklaration einer Variablen
+// Bei Fehlern wird bis zum Komma oder Newline geparst.
+// Returnwert: eine neue Instanz, die eingefuegt und dann geloescht wird.
+// Array-Indexe werden als SbiDimList zurueckgegeben
+
+SbiSymDef* SbiParser::VarDecl( SbiDimList** ppDim, BOOL bStatic, BOOL bConst )
+{
+ bool bWithEvents = false;
+ if( Peek() == WITHEVENTS )
+ {
+ Next();
+ bWithEvents = true;
+ }
+ if( !TestSymbol() ) return NULL;
+ SbxDataType t = eScanType;
+ SbiSymDef* pDef = bConst ? new SbiConstDef( aSym ) : new SbiSymDef( aSym );
+ SbiDimList* pDim = NULL;
+ // Klammern?
+ if( Peek() == LPAREN )
+ pDim = new SbiDimList( this );
+ pDef->SetType( t );
+ if( bStatic )
+ pDef->SetStatic();
+ if( bWithEvents )
+ pDef->SetWithEvents();
+ TypeDecl( *pDef );
+ if( !ppDim && pDim )
+ {
+ if(pDim->GetDims() )
+ Error( SbERR_EXPECTED, "()" );
+ delete pDim;
+ }
+ else if( ppDim )
+ *ppDim = pDim;
+ return pDef;
+}
+
+// Aufloesen einer AS-Typdeklaration
+// Der Datentyp wird in die uebergebene Variable eingetragen
+
+void SbiParser::TypeDecl( SbiSymDef& rDef, BOOL bAsNewAlreadyParsed )
+{
+ SbxDataType eType = rDef.GetType();
+ short nSize = 0;
+ if( bAsNewAlreadyParsed || Peek() == AS )
+ {
+ if( !bAsNewAlreadyParsed )
+ Next();
+ rDef.SetDefinedAs();
+ String aType;
+ SbiToken eTok = Next();
+ if( !bAsNewAlreadyParsed && eTok == NEW )
+ {
+ rDef.SetNew();
+ eTok = Next();
+ }
+ switch( eTok )
+ {
+ case ANY:
+ if( rDef.IsNew() )
+ Error( SbERR_SYNTAX );
+ eType = SbxVARIANT; break;
+ case TINTEGER:
+ case TLONG:
+ case TSINGLE:
+ case TDOUBLE:
+ case TCURRENCY:
+ case TDATE:
+ case TSTRING:
+ case TOBJECT:
+ case _ERROR_:
+ case TBOOLEAN:
+ case TVARIANT:
+ case TBYTE:
+ if( rDef.IsNew() )
+ Error( SbERR_SYNTAX );
+ eType = (eTok==TBYTE) ? SbxBYTE : SbxDataType( eTok - TINTEGER + SbxINTEGER );
+ if( eType == SbxSTRING )
+ {
+ // STRING*n ?
+ if( Peek() == MUL )
+ { // fixed size!
+ Next();
+ SbiConstExpression aSize( this );
+ nSize = aSize.GetShortValue();
+ if( nSize < 0 || (bVBASupportOn && nSize <= 0) )
+ Error( SbERR_OUT_OF_RANGE );
+ else
+ rDef.SetFixedStringLength( nSize );
+ }
+ }
+ break;
+ case SYMBOL: // kann nur ein TYPE oder eine Objektklasse sein!
+ if( eScanType != SbxVARIANT )
+ Error( SbERR_SYNTAX );
+ else
+ {
+ String aCompleteName = aSym;
+
+ // #52709 DIM AS NEW fuer Uno mit voll-qualifizierten Namen
+ if( Peek() == DOT )
+ {
+ String aDotStr( '.' );
+ while( Peek() == DOT )
+ {
+ aCompleteName += aDotStr;
+ Next();
+ SbiToken ePeekTok = Peek();
+ if( ePeekTok == SYMBOL || IsKwd( ePeekTok ) )
+ {
+ Next();
+ aCompleteName += aSym;
+ }
+ else
+ {
+ Next();
+ Error( SbERR_UNEXPECTED, SYMBOL );
+ break;
+ }
+ }
+ }
+ else if( rEnumArray->Find( aCompleteName, SbxCLASS_OBJECT ) )
+ {
+ eType = SbxLONG;
+ break;
+ }
+
+ // In den String-Pool uebernehmen
+ rDef.SetTypeId( aGblStrings.Add( aCompleteName ) );
+
+ if( rDef.IsNew() && pProc == NULL )
+ aRequiredTypes.push_back( aCompleteName );
+ }
+ eType = SbxOBJECT;
+ break;
+ case FIXSTRING: // new syntax for complex UNO types
+ rDef.SetTypeId( aGblStrings.Add( aSym ) );
+ eType = SbxOBJECT;
+ break;
+ default:
+ Error( SbERR_UNEXPECTED, eTok );
+ Next();
+ }
+ // Die Variable koennte mit Suffix deklariert sein
+ if( rDef.GetType() != SbxVARIANT )
+ {
+ if( rDef.GetType() != eType )
+ Error( SbERR_VAR_DEFINED, rDef.GetName() );
+ else if( eType == SbxSTRING && rDef.GetLen() != nSize )
+ Error( SbERR_VAR_DEFINED, rDef.GetName() );
+ }
+ rDef.SetType( eType );
+ rDef.SetLen( nSize );
+ }
+}
+
+// Hier werden Variable, Arrays und Strukturen definiert.
+// DIM/PRIVATE/PUBLIC/GLOBAL
+
+void SbiParser::Dim()
+{
+ DefVar( _DIM, ( pProc && bVBASupportOn ) ? pProc->IsStatic() : FALSE );
+}
+
+void SbiParser::DefVar( SbiOpcode eOp, BOOL bStatic )
+{
+ SbiSymPool* pOldPool = pPool;
+ BOOL bSwitchPool = FALSE;
+ BOOL bPersistantGlobal = FALSE;
+ SbiToken eFirstTok = eCurTok;
+ if( pProc && ( eCurTok == GLOBAL || eCurTok == PUBLIC || eCurTok == PRIVATE ) )
+ Error( SbERR_NOT_IN_SUBR, eCurTok );
+ if( eCurTok == PUBLIC || eCurTok == GLOBAL )
+ {
+ bSwitchPool = TRUE; // im richtigen Moment auf globalen Pool schalten
+ if( eCurTok == GLOBAL )
+ bPersistantGlobal = TRUE;
+ }
+ // behavior in VBA is that a module scope variable's lifetime is
+ // tied to the document. e.g. a module scope variable is global
+ if( GetBasic()->IsDocBasic() && bVBASupportOn && !pProc )
+ bPersistantGlobal = TRUE;
+ // PRIVATE ist Synonym fuer DIM
+ // _CONST_?
+ BOOL bConst = FALSE;
+ if( eCurTok == _CONST_ )
+ bConst = TRUE;
+ else if( Peek() == _CONST_ )
+ Next(), bConst = TRUE;
+
+ // #110004 It can also be a sub/function
+ if( !bConst && (eCurTok == SUB || eCurTok == FUNCTION || eCurTok == PROPERTY ||
+ eCurTok == STATIC || eCurTok == ENUM || eCurTok == DECLARE || eCurTok == TYPE) )
+ {
+ // Next token is read here, because !bConst
+ bool bPrivate = ( eFirstTok == PRIVATE );
+
+ if( eCurTok == STATIC )
+ {
+ Next();
+ DefStatic( bPrivate );
+ }
+ else if( eCurTok == SUB || eCurTok == FUNCTION || eCurTok == PROPERTY )
+ {
+ // End global chain if necessary (not done in
+ // SbiParser::Parse() under these conditions
+ if( bNewGblDefs && nGblChain == 0 )
+ {
+ nGblChain = aGen.Gen( _JUMP, 0 );
+ bNewGblDefs = FALSE;
+ }
+ Next();
+ DefProc( FALSE, bPrivate );
+ return;
+ }
+ else if( eCurTok == ENUM )
+ {
+ Next();
+ DefEnum( bPrivate );
+ return;
+ }
+ else if( eCurTok == DECLARE )
+ {
+ Next();
+ DefDeclare( bPrivate );
+ return;
+ }
+ // #i109049
+ else if( eCurTok == TYPE )
+ {
+ Next();
+ DefType( bPrivate );
+ return;
+ }
+ }
+
+#ifdef SHARED
+#define tmpSHARED
+#undef SHARED
+#endif
+ // SHARED wird ignoriert
+ if( Peek() == SHARED ) Next();
+#ifdef tmpSHARED
+#define SHARED
+#undef tmpSHARED
+#endif
+ // PRESERVE nur bei REDIM
+ if( Peek() == PRESERVE )
+ {
+ Next();
+ if( eOp == _REDIM )
+ eOp = _REDIMP;
+ else
+ Error( SbERR_UNEXPECTED, eCurTok );
+ }
+ SbiSymDef* pDef;
+ SbiDimList* pDim;
+
+ // AB 9.7.97, #40689, Statics -> Modul-Initialisierung, in Sub ueberspringen
+ UINT32 nEndOfStaticLbl = 0;
+ if( !bVBASupportOn && bStatic )
+ {
+ nEndOfStaticLbl = aGen.Gen( _JUMP, 0 );
+ aGen.Statement(); // bei static hier nachholen
+ }
+
+ BOOL bDefined = FALSE;
+ while( ( pDef = VarDecl( &pDim, bStatic, bConst ) ) != NULL )
+ {
+ EnableErrors();
+ // Variable suchen:
+ if( bSwitchPool )
+ pPool = &aGlobals;
+ SbiSymDef* pOld = pPool->Find( pDef->GetName() );
+ // AB 31.3.1996, #25651#, auch in Runtime-Library suchen
+ BOOL bRtlSym = FALSE;
+ if( !pOld )
+ {
+ pOld = CheckRTLForSym( pDef->GetName(), SbxVARIANT );
+ if( pOld )
+ bRtlSym = TRUE;
+ }
+ if( pOld && !(eOp == _REDIM || eOp == _REDIMP) )
+ {
+ if( pDef->GetScope() == SbLOCAL && pOld->GetScope() != SbLOCAL )
+ pOld = NULL;
+ }
+ if( pOld )
+ {
+ bDefined = TRUE;
+ // Bei RTL-Symbol immer Fehler
+ if( !bRtlSym && (eOp == _REDIM || eOp == _REDIMP) )
+ {
+ // Bei REDIM die Attribute vergleichen
+ SbxDataType eDefType;
+ bool bError_ = false;
+ if( pOld->IsStatic() )
+ {
+ bError_ = true;
+ }
+ else if( pOld->GetType() != ( eDefType = pDef->GetType() ) )
+ {
+ if( !( eDefType == SbxVARIANT && !pDef->IsDefinedAs() ) )
+ bError_ = true;
+ }
+ if( bError_ )
+ Error( SbERR_VAR_DEFINED, pDef->GetName() );
+ }
+ else
+ Error( SbERR_VAR_DEFINED, pDef->GetName() );
+ delete pDef; pDef = pOld;
+ }
+ else
+ pPool->Add( pDef );
+
+ // #36374: Variable vor Unterscheidung IsNew() anlegen
+ // Sonst Error bei Dim Identifier As New Type und option explicit
+ if( !bDefined && !(eOp == _REDIM || eOp == _REDIMP)
+ && ( !bConst || pDef->GetScope() == SbGLOBAL ) )
+ {
+ // Variable oder globale Konstante deklarieren
+ SbiOpcode eOp2;
+ switch ( pDef->GetScope() )
+ {
+ case SbGLOBAL: eOp2 = bPersistantGlobal ? _GLOBAL_P : _GLOBAL;
+ goto global;
+ case SbPUBLIC: eOp2 = bPersistantGlobal ? _PUBLIC_P : _PUBLIC;
+ // AB 9.7.97, #40689, kein eigener Opcode mehr
+ if( bVBASupportOn && bStatic )
+ {
+ eOp2 = _STATIC;
+ break;
+ }
+ global: aGen.BackChain( nGblChain );
+ nGblChain = 0;
+ bGblDefs = bNewGblDefs = TRUE;
+ break;
+ default: eOp2 = _LOCAL;
+ }
+ UINT32 nOpnd2 = sal::static_int_cast< UINT16 >( pDef->GetType() );
+ if( pDef->IsWithEvents() )
+ nOpnd2 |= SBX_TYPE_WITH_EVENTS_FLAG;
+
+ short nFixedStringLength = pDef->GetFixedStringLength();
+ if( nFixedStringLength >= 0 )
+ nOpnd2 |= (SBX_FIXED_LEN_STRING_FLAG + (UINT32(nFixedStringLength) << 17)); // len = all bits above 0x10000
+
+ aGen.Gen( eOp2, pDef->GetId(), nOpnd2 );
+ }
+
+ // Initialisierung fuer selbstdefinierte Datentypen
+ // und per NEW angelegte Variable
+ if( pDef->GetType() == SbxOBJECT
+ && pDef->GetTypeId() )
+ {
+ if( !bCompatible && !pDef->IsNew() )
+ {
+ String aTypeName( aGblStrings.Find( pDef->GetTypeId() ) );
+ if( rTypeArray->Find( aTypeName, SbxCLASS_OBJECT ) == NULL )
+ Error( SbERR_UNDEF_TYPE, aTypeName );
+ }
+
+ if( bConst )
+ {
+ Error( SbERR_SYNTAX );
+ }
+
+ if( pDim )
+ {
+ if( eOp == _REDIMP )
+ {
+ SbiExpression aExpr( this, *pDef, NULL );
+ aExpr.Gen();
+ aGen.Gen( _REDIMP_ERASE );
+
+ pDef->SetDims( pDim->GetDims() );
+ SbiExpression aExpr2( this, *pDef, pDim );
+ aExpr2.Gen();
+ aGen.Gen( _DCREATE_REDIMP, pDef->GetId(), pDef->GetTypeId() );
+ }
+ else
+ {
+ pDef->SetDims( pDim->GetDims() );
+ SbiExpression aExpr( this, *pDef, pDim );
+ aExpr.Gen();
+ aGen.Gen( _DCREATE, pDef->GetId(), pDef->GetTypeId() );
+ }
+ }
+ else
+ {
+ SbiExpression aExpr( this, *pDef );
+ aExpr.Gen();
+ SbiOpcode eOp_ = pDef->IsNew() ? _CREATE : _TCREATE;
+ aGen.Gen( eOp_, pDef->GetId(), pDef->GetTypeId() );
+ aGen.Gen( _SET );
+ }
+ }
+ else
+ {
+ if( bConst )
+ {
+ // Konstanten-Definition
+ if( pDim )
+ {
+ Error( SbERR_SYNTAX );
+ delete pDim;
+ }
+ SbiExpression aVar( this, *pDef );
+ if( !TestToken( EQ ) )
+ goto MyBreak; // AB 24.6.1996 (s.u.)
+ SbiConstExpression aExpr( this );
+ if( !bDefined && aExpr.IsValid() )
+ {
+ if( pDef->GetScope() == SbGLOBAL )
+ {
+ // Nur Code fuer globale Konstante erzeugen!
+ aVar.Gen();
+ aExpr.Gen();
+ aGen.Gen( _PUTC );
+ }
+ SbiConstDef* pConst = pDef->GetConstDef();
+ if( aExpr.GetType() == SbxSTRING )
+ pConst->Set( aExpr.GetString() );
+ else
+ pConst->Set( aExpr.GetValue(), aExpr.GetType() );
+ }
+ }
+ else if( pDim )
+ {
+ // Die Variable dimensionieren
+ // Bei REDIM die Var vorher loeschen
+ if( eOp == _REDIM )
+ {
+ SbiExpression aExpr( this, *pDef, NULL );
+ aExpr.Gen();
+ if ( bVBASupportOn )
+ // delete the array but
+ // clear the variable ( this
+ // allows the processing of
+ // the param to happen as normal without errors ( ordinary ERASE just clears the array )
+ aGen.Gen( _ERASE_CLEAR );
+ else
+ aGen.Gen( _ERASE );
+ }
+ else if( eOp == _REDIMP )
+ {
+ SbiExpression aExpr( this, *pDef, NULL );
+ aExpr.Gen();
+ aGen.Gen( _REDIMP_ERASE );
+ }
+ pDef->SetDims( pDim->GetDims() );
+ if( bPersistantGlobal )
+ pDef->SetGlobal( TRUE );
+ SbiExpression aExpr( this, *pDef, pDim );
+ aExpr.Gen();
+ pDef->SetGlobal( FALSE );
+ aGen.Gen( (eOp == _STATIC) ? _DIM : eOp );
+ }
+ }
+ if( !TestComma() )
+ goto MyBreak; // AB 24.6.1996 (s.u.)
+
+ // #27963# AB, 24.6.1996
+ // Einfuehrung bSwitchPool (s.o.): pPool darf beim VarDecl-Aufruf
+ // noch nicht auf &aGlobals gesetzt sein.
+ // Ansonsten soll das Verhalten aber absolut identisch bleiben,
+ // d.h. pPool muss immer am Schleifen-Ende zurueckgesetzt werden.
+ // auch bei break
+ pPool = pOldPool;
+ continue; // MyBreak berspingen
+ MyBreak:
+ pPool = pOldPool;
+ break;
+ }
+
+ // AB 9.7.97, #40689, Sprung ueber Statics-Deklaration abschliessen
+ if( !bVBASupportOn && bStatic )
+ {
+ // globalen Chain pflegen
+ nGblChain = aGen.Gen( _JUMP, 0 );
+ bGblDefs = bNewGblDefs = TRUE;
+
+ // fuer Sub Sprung auf Ende der statics eintragen
+ aGen.BackChain( nEndOfStaticLbl );
+ }
+
+ //pPool = pOldPool;
+}
+
+// Hier werden Arrays redimensioniert.
+
+void SbiParser::ReDim()
+{
+ DefVar( _REDIM, ( pProc && bVBASupportOn ) ? pProc->IsStatic() : FALSE );
+}
+
+// ERASE array, ...
+
+void SbiParser::Erase()
+{
+ while( !bAbort )
+ {
+ SbiExpression aExpr( this, SbLVALUE );
+ aExpr.Gen();
+ aGen.Gen( _ERASE );
+ if( !TestComma() ) break;
+ }
+}
+
+// Deklaration eines Datentyps
+
+void SbiParser::Type()
+{
+ DefType( FALSE );
+}
+
+void SbiParser::DefType( BOOL bPrivate )
+{
+ // TODO: Use bPrivate
+ (void)bPrivate;
+
+ // Neues Token lesen, es muss ein Symbol sein
+ if (!TestSymbol())
+ return;
+
+ if (rTypeArray->Find(aSym,SbxCLASS_OBJECT))
+ {
+ Error( SbERR_VAR_DEFINED, aSym );
+ return;
+ }
+
+ SbxObject *pType = new SbxObject(aSym);
+
+ SbiSymDef* pElem;
+ SbiDimList* pDim = NULL;
+ BOOL bDone = FALSE;
+
+ while( !bDone && !IsEof() )
+ {
+ switch( Peek() )
+ {
+ case ENDTYPE :
+ pElem = NULL;
+ bDone = TRUE;
+ Next();
+ break;
+
+ case EOLN :
+ case REM :
+ pElem = NULL;
+ Next();
+ break;
+
+ default:
+ pDim = NULL;
+ pElem = VarDecl(&pDim,FALSE,FALSE);
+ if( !pElem )
+ bDone = TRUE; // Error occured
+ }
+ if( pElem )
+ {
+ SbxArray *pTypeMembers = pType->GetProperties();
+ String aElemName = pElem->GetName();
+ if( pTypeMembers->Find( aElemName, SbxCLASS_DONTCARE) )
+ Error (SbERR_VAR_DEFINED);
+ else
+ {
+ SbxDataType eElemType = pElem->GetType();
+ SbxProperty *pTypeElem = new SbxProperty( aElemName, eElemType );
+ if( pDim )
+ {
+ SbxDimArray* pArray = new SbxDimArray( pElem->GetType() );
+ if ( pDim->GetSize() )
+ {
+ // Dimension the target array
+
+ for ( short i=0; i<pDim->GetSize();++i )
+ {
+ INT32 ub = -1;
+ INT32 lb = nBase;
+ SbiExprNode* pNode = pDim->Get(i)->GetExprNode();
+ ub = pNode->GetNumber();
+ if ( !pDim->Get( i )->IsBased() ) // each dim is low/up
+ {
+ if ( ++i >= pDim->GetSize() ) // trouble
+ StarBASIC::FatalError( SbERR_INTERNAL_ERROR );
+ pNode = pDim->Get(i)->GetExprNode();
+ lb = ub;
+ ub = pNode->GetNumber();
+ }
+ else if ( !bCompatible )
+ ub += nBase;
+ pArray->AddDim32( lb, ub );
+ }
+ pArray->setHasFixedSize( true );
+ }
+ else
+ pArray->unoAddDim( 0, -1 ); // variant array
+ USHORT nSavFlags = pTypeElem->GetFlags();
+ // need to reset the FIXED flag
+ // when calling PutObject ( because the type will not match Object )
+ pTypeElem->ResetFlag( SBX_FIXED );
+ pTypeElem->PutObject( pArray );
+ pTypeElem->SetFlags( nSavFlags );
+ }
+ // Nested user type?
+ if( eElemType == SbxOBJECT )
+ {
+ USHORT nElemTypeId = pElem->GetTypeId();
+ if( nElemTypeId != 0 )
+ {
+ String aTypeName( aGblStrings.Find( nElemTypeId ) );
+ SbxObject* pTypeObj = static_cast< SbxObject* >( rTypeArray->Find( aTypeName, SbxCLASS_OBJECT ) );
+ if( pTypeObj != NULL )
+ {
+ SbxObject* pCloneObj = cloneTypeObjectImpl( *pTypeObj );
+ pTypeElem->PutObject( pCloneObj );
+ }
+ }
+ }
+ delete pDim;
+ pTypeMembers->Insert( pTypeElem, pTypeMembers->Count() );
+ }
+ delete pElem;
+ }
+ }
+
+ pType->Remove( XubString( RTL_CONSTASCII_USTRINGPARAM("Name") ), SbxCLASS_DONTCARE );
+ pType->Remove( XubString( RTL_CONSTASCII_USTRINGPARAM("Parent") ), SbxCLASS_DONTCARE );
+
+ rTypeArray->Insert (pType,rTypeArray->Count());
+}
+
+
+// Declaration of Enum type
+
+void SbiParser::Enum()
+{
+ DefEnum( FALSE );
+}
+
+void SbiParser::DefEnum( BOOL bPrivate )
+{
+ // Neues Token lesen, es muss ein Symbol sein
+ if (!TestSymbol())
+ return;
+
+ String aEnumName = aSym;
+ if( rEnumArray->Find(aEnumName,SbxCLASS_OBJECT) )
+ {
+ Error( SbERR_VAR_DEFINED, aSym );
+ return;
+ }
+
+ SbxObject *pEnum = new SbxObject( aEnumName );
+ if( bPrivate )
+ pEnum->SetFlag( SBX_PRIVATE );
+
+ SbiSymDef* pElem;
+ SbiDimList* pDim;
+ BOOL bDone = FALSE;
+
+ // Starting with -1 to make first default value 0 after ++
+ sal_Int32 nCurrentEnumValue = -1;
+ while( !bDone && !IsEof() )
+ {
+ switch( Peek() )
+ {
+ case ENDENUM :
+ pElem = NULL;
+ bDone = TRUE;
+ Next();
+ break;
+
+ case EOLN :
+ case REM :
+ pElem = NULL;
+ Next();
+ break;
+
+ default:
+ {
+ // TODO: Check existing!
+ BOOL bDefined = FALSE;
+
+ pDim = NULL;
+ pElem = VarDecl( &pDim, FALSE, TRUE );
+ if( !pElem )
+ {
+ bDone = TRUE; // Error occured
+ break;
+ }
+ else if( pDim )
+ {
+ delete pDim;
+ Error( SbERR_SYNTAX );
+ bDone = TRUE; // Error occured
+ break;
+ }
+
+ SbiExpression aVar( this, *pElem );
+ if( Peek() == EQ )
+ {
+ Next();
+
+ SbiConstExpression aExpr( this );
+ if( !bDefined && aExpr.IsValid() )
+ {
+ SbxVariableRef xConvertVar = new SbxVariable();
+ if( aExpr.GetType() == SbxSTRING )
+ xConvertVar->PutString( aExpr.GetString() );
+ else
+ xConvertVar->PutDouble( aExpr.GetValue() );
+
+ nCurrentEnumValue = xConvertVar->GetLong();
+ }
+ }
+ else
+ nCurrentEnumValue++;
+
+ SbiSymPool* pPoolToUse = bPrivate ? pPool : &aGlobals;
+
+ SbiSymDef* pOld = pPoolToUse->Find( pElem->GetName() );
+ if( pOld )
+ {
+ Error( SbERR_VAR_DEFINED, pElem->GetName() );
+ bDone = TRUE; // Error occured
+ break;
+ }
+
+ pPool->Add( pElem );
+
+ if( !bPrivate )
+ {
+ SbiOpcode eOp = _GLOBAL;
+ aGen.BackChain( nGblChain );
+ nGblChain = 0;
+ bGblDefs = bNewGblDefs = TRUE;
+ aGen.Gen(
+ eOp, pElem->GetId(),
+ sal::static_int_cast< UINT16 >( pElem->GetType() ) );
+
+ aVar.Gen();
+ USHORT nStringId = aGen.GetParser()->aGblStrings.Add( nCurrentEnumValue, SbxLONG );
+ aGen.Gen( _NUMBER, nStringId );
+ aGen.Gen( _PUTC );
+ }
+
+ SbiConstDef* pConst = pElem->GetConstDef();
+ pConst->Set( nCurrentEnumValue, SbxLONG );
+ }
+ }
+ if( pElem )
+ {
+ SbxArray *pEnumMembers = pEnum->GetProperties();
+ SbxProperty *pEnumElem = new SbxProperty( pElem->GetName(), SbxLONG );
+ pEnumElem->PutLong( nCurrentEnumValue );
+ pEnumElem->ResetFlag( SBX_WRITE );
+ pEnumElem->SetFlag( SBX_CONST );
+ pEnumMembers->Insert( pEnumElem, pEnumMembers->Count() );
+ }
+ }
+
+ pEnum->Remove( XubString( RTL_CONSTASCII_USTRINGPARAM("Name") ), SbxCLASS_DONTCARE );
+ pEnum->Remove( XubString( RTL_CONSTASCII_USTRINGPARAM("Parent") ), SbxCLASS_DONTCARE );
+
+ rEnumArray->Insert( pEnum, rEnumArray->Count() );
+}
+
+
+// Prozedur-Deklaration
+// das erste Token ist bereits eingelesen (SUB/FUNCTION)
+// xxx Name [LIB "name"[ALIAS "name"]][(Parameter)][AS TYPE]
+
+SbiProcDef* SbiParser::ProcDecl( BOOL bDecl )
+{
+ BOOL bFunc = BOOL( eCurTok == FUNCTION );
+ BOOL bProp = BOOL( eCurTok == GET || eCurTok == SET || eCurTok == LET );
+ if( !TestSymbol() ) return NULL;
+ String aName( aSym );
+ SbxDataType eType = eScanType;
+ SbiProcDef* pDef = new SbiProcDef( this, aName, true );
+ pDef->SetType( eType );
+ if( Peek() == _CDECL_ )
+ {
+ Next(); pDef->SetCdecl();
+ }
+ if( Peek() == LIB )
+ {
+ Next();
+ if( Next() == FIXSTRING )
+ pDef->GetLib() = aSym;
+ else
+ Error( SbERR_SYNTAX );
+ }
+ if( Peek() == ALIAS )
+ {
+ Next();
+ if( Next() == FIXSTRING )
+ pDef->GetAlias() = aSym;
+ else
+ Error( SbERR_SYNTAX );
+ }
+ if( !bDecl )
+ {
+ // CDECL, LIB und ALIAS sind unzulaessig
+ if( pDef->GetLib().Len() )
+ Error( SbERR_UNEXPECTED, LIB );
+ if( pDef->GetAlias().Len() )
+ Error( SbERR_UNEXPECTED, ALIAS );
+ if( pDef->IsCdecl() )
+ Error( SbERR_UNEXPECTED, _CDECL_ );
+ pDef->SetCdecl( FALSE );
+ pDef->GetLib().Erase();
+ pDef->GetAlias().Erase();
+ }
+ else if( !pDef->GetLib().Len() )
+ {
+ // ALIAS und CDECL nur zusammen mit LIB
+ if( pDef->GetAlias().Len() )
+ Error( SbERR_UNEXPECTED, ALIAS );
+ if( pDef->IsCdecl() )
+ Error( SbERR_UNEXPECTED, _CDECL_ );
+ pDef->SetCdecl( FALSE );
+ pDef->GetAlias().Erase();
+ }
+ // Klammern?
+ if( Peek() == LPAREN )
+ {
+ Next();
+ if( Peek() == RPAREN )
+ Next();
+ else
+ for(;;) {
+ BOOL bByVal = FALSE;
+ BOOL bOptional = FALSE;
+ BOOL bParamArray = FALSE;
+ while( Peek() == BYVAL || Peek() == BYREF || Peek() == _OPTIONAL_ )
+ {
+ if ( Peek() == BYVAL ) Next(), bByVal = TRUE;
+ else if ( Peek() == BYREF ) Next(), bByVal = FALSE;
+ else if ( Peek() == _OPTIONAL_ ) Next(), bOptional = TRUE;
+ }
+ if( bCompatible && Peek() == PARAMARRAY )
+ {
+ if( bByVal || bOptional )
+ Error( SbERR_UNEXPECTED, PARAMARRAY );
+ Next();
+ bParamArray = TRUE;
+ }
+ SbiSymDef* pPar = VarDecl( NULL, FALSE, FALSE );
+ if( !pPar )
+ break;
+ if( bByVal )
+ pPar->SetByVal();
+ if( bOptional )
+ pPar->SetOptional();
+ if( bParamArray )
+ pPar->SetParamArray();
+ pDef->GetParams().Add( pPar );
+ SbiToken eTok = Next();
+ if( eTok != COMMA && eTok != RPAREN )
+ {
+ BOOL bError2 = TRUE;
+ if( bOptional && bCompatible && eTok == EQ )
+ {
+ SbiConstExpression* pDefaultExpr = new SbiConstExpression( this );
+ SbxDataType eType2 = pDefaultExpr->GetType();
+
+ USHORT nStringId;
+ if( eType2 == SbxSTRING )
+ nStringId = aGblStrings.Add( pDefaultExpr->GetString() );
+ else
+ nStringId = aGblStrings.Add( pDefaultExpr->GetValue(), eType2 );
+
+ pPar->SetDefaultId( nStringId );
+ delete pDefaultExpr;
+
+ eTok = Next();
+ if( eTok == COMMA || eTok == RPAREN )
+ bError2 = FALSE;
+ }
+ if( bError2 )
+ {
+ Error( SbERR_EXPECTED, RPAREN );
+ break;
+ }
+ }
+ if( eTok == RPAREN )
+ break;
+ }
+ }
+ TypeDecl( *pDef );
+ if( eType != SbxVARIANT && pDef->GetType() != eType )
+ Error( SbERR_BAD_DECLARATION, aName );
+// if( pDef->GetType() == SbxOBJECT )
+// pDef->SetType( SbxVARIANT ),
+// Error( SbERR_SYNTAX );
+ if( pDef->GetType() == SbxVARIANT && !( bFunc || bProp ) )
+ pDef->SetType( SbxEMPTY );
+ return pDef;
+}
+
+// DECLARE
+
+void SbiParser::Declare()
+{
+ DefDeclare( FALSE );
+}
+
+void SbiParser::DefDeclare( BOOL bPrivate )
+{
+ Next();
+ if( eCurTok != SUB && eCurTok != FUNCTION )
+ Error( SbERR_UNEXPECTED, eCurTok );
+ else
+ {
+ bool bFunction = (eCurTok == FUNCTION);
+
+ SbiProcDef* pDef = ProcDecl( TRUE );
+ if( pDef )
+ {
+ if( !pDef->GetLib().Len() )
+ Error( SbERR_EXPECTED, LIB );
+ // gibts den schon?
+ SbiSymDef* pOld = aPublics.Find( pDef->GetName() );
+ if( pOld )
+ {
+ SbiProcDef* p = pOld->GetProcDef();
+ if( !p )
+ {
+ // Als Variable deklariert
+ Error( SbERR_BAD_DECLARATION, pDef->GetName() );
+ delete pDef;
+ pDef = NULL;
+ }
+ else
+ pDef->Match( p );
+ }
+ else
+ aPublics.Add( pDef );
+
+ if ( pDef )
+ {
+ pDef->SetPublic( !bPrivate );
+
+ // New declare handling
+ if( pDef->GetLib().Len() > 0 )
+ {
+ if( bNewGblDefs && nGblChain == 0 )
+ {
+ nGblChain = aGen.Gen( _JUMP, 0 );
+ bNewGblDefs = FALSE;
+ }
+
+ USHORT nSavLine = nLine;
+ aGen.Statement();
+ pDef->Define();
+ pDef->SetLine1( nSavLine );
+ pDef->SetLine2( nSavLine );
+
+ SbiSymPool& rPool = pDef->GetParams();
+ USHORT nParCount = rPool.GetSize();
+
+ SbxDataType eType = pDef->GetType();
+ if( bFunction )
+ aGen.Gen( _PARAM, 0, sal::static_int_cast< UINT16 >( eType ) );
+
+ if( nParCount > 1 )
+ {
+ aGen.Gen( _ARGC );
+
+ for( USHORT i = 1 ; i < nParCount ; ++i )
+ {
+ SbiSymDef* pParDef = rPool.Get( i );
+ SbxDataType eParType = pParDef->GetType();
+
+ aGen.Gen( _PARAM, i, sal::static_int_cast< UINT16 >( eParType ) );
+ aGen.Gen( _ARGV );
+
+ USHORT nTyp = sal::static_int_cast< USHORT >( pParDef->GetType() );
+ if( pParDef->IsByVal() )
+ {
+ // Reset to avoid additional byval in call to wrapper function
+ pParDef->SetByVal( FALSE );
+ nTyp |= 0x8000;
+ }
+ aGen.Gen( _ARGTYP, nTyp );
+ }
+ }
+
+ aGen.Gen( _LIB, aGblStrings.Add( pDef->GetLib() ) );
+
+ SbiOpcode eOp = pDef->IsCdecl() ? _CALLC : _CALL;
+ USHORT nId = pDef->GetId();
+ if( pDef->GetAlias().Len() )
+ nId = ( nId & 0x8000 ) | aGblStrings.Add( pDef->GetAlias() );
+ if( nParCount > 1 )
+ nId |= 0x8000;
+ aGen.Gen( eOp, nId, sal::static_int_cast< UINT16 >( eType ) );
+
+ if( bFunction )
+ aGen.Gen( _PUT );
+
+ aGen.Gen( _LEAVE );
+ }
+ }
+ }
+ }
+}
+
+// Aufruf einer SUB oder FUNCTION
+
+void SbiParser::Call()
+{
+ String aName( aSym );
+ SbiExpression aVar( this, SbSYMBOL );
+ aVar.Gen( FORCE_CALL );
+ aGen.Gen( _GET );
+}
+
+// SUB/FUNCTION
+
+void SbiParser::SubFunc()
+{
+ DefProc( FALSE, FALSE );
+}
+
+// Einlesen einer Prozedur
+
+BOOL runsInSetup( void );
+
+void SbiParser::DefProc( BOOL bStatic, BOOL bPrivate )
+{
+ USHORT l1 = nLine, l2 = nLine;
+ BOOL bSub = BOOL( eCurTok == SUB );
+ BOOL bProperty = BOOL( eCurTok == PROPERTY );
+ PropertyMode ePropertyMode = PROPERTY_MODE_NONE;
+ if( bProperty )
+ {
+ Next();
+ if( eCurTok == GET )
+ ePropertyMode = PROPERTY_MODE_GET;
+ else if( eCurTok == LET )
+ ePropertyMode = PROPERTY_MODE_LET;
+ else if( eCurTok == SET )
+ ePropertyMode = PROPERTY_MODE_SET;
+ else
+ Error( SbERR_EXPECTED, "Get or Let or Set" );
+ }
+
+ SbiToken eExit = eCurTok;
+ SbiProcDef* pDef = ProcDecl( FALSE );
+ if( !pDef )
+ return;
+ pDef->setPropertyMode( ePropertyMode );
+
+ // Ist die Proc bereits deklariert?
+ SbiSymDef* pOld = aPublics.Find( pDef->GetName() );
+ if( pOld )
+ {
+ bool bError_ = false;
+
+ pProc = pOld->GetProcDef();
+ if( !pProc )
+ {
+ // Als Variable deklariert
+ Error( SbERR_BAD_DECLARATION, pDef->GetName() );
+ delete pDef;
+ pProc = NULL;
+ bError_ = true;
+ }
+ // #100027: Multiple declaration -> Error
+ // #112787: Not for setup, REMOVE for 8
+ else if( !runsInSetup() && pProc->IsUsedForProcDecl() )
+ {
+ PropertyMode ePropMode = pDef->getPropertyMode();
+ if( ePropMode == PROPERTY_MODE_NONE || ePropMode == pProc->getPropertyMode() )
+ {
+ Error( SbERR_PROC_DEFINED, pDef->GetName() );
+ delete pDef;
+ pProc = NULL;
+ bError_ = true;
+ }
+ }
+
+ if( !bError_ )
+ {
+ pDef->Match( pProc );
+ pProc = pDef;
+ }
+ }
+ else
+ aPublics.Add( pDef ), pProc = pDef;
+
+ if( !pProc )
+ return;
+ pProc->SetPublic( !bPrivate );
+
+ // Nun setzen wir die Suchhierarchie fuer Symbole sowie die aktuelle
+ // Prozedur.
+ aPublics.SetProcId( pProc->GetId() );
+ pProc->GetParams().SetParent( &aPublics );
+ if( bStatic )
+ {
+ if ( bVBASupportOn )
+ pProc->SetStatic( TRUE );
+ else
+ Error( SbERR_NOT_IMPLEMENTED ); // STATIC SUB ...
+ }
+ else
+ {
+ pProc->SetStatic( FALSE );
+ }
+ // Normalfall: Lokale Variable->Parameter->Globale Variable
+ pProc->GetLocals().SetParent( &pProc->GetParams() );
+ pPool = &pProc->GetLocals();
+
+ pProc->Define();
+ OpenBlock( eExit );
+ StmntBlock( bSub ? ENDSUB : (bProperty ? ENDPROPERTY : ENDFUNC) );
+ l2 = nLine;
+ pProc->SetLine1( l1 );
+ pProc->SetLine2( l2 );
+ pPool = &aPublics;
+ aPublics.SetProcId( 0 );
+ // Offene Labels?
+ pProc->GetLabels().CheckRefs();
+ CloseBlock();
+ aGen.Gen( _LEAVE );
+ pProc = NULL;
+}
+
+// STATIC variable|procedure
+
+void SbiParser::Static()
+{
+ DefStatic( FALSE );
+}
+
+void SbiParser::DefStatic( BOOL bPrivate )
+{
+ switch( Peek() )
+ {
+ case SUB:
+ case FUNCTION:
+ case PROPERTY:
+ // End global chain if necessary (not done in
+ // SbiParser::Parse() under these conditions
+ if( bNewGblDefs && nGblChain == 0 )
+ {
+ nGblChain = aGen.Gen( _JUMP, 0 );
+ bNewGblDefs = FALSE;
+ }
+ Next();
+ DefProc( TRUE, bPrivate );
+ break;
+ default: {
+ if( !pProc )
+ Error( SbERR_NOT_IN_SUBR );
+ // Pool umsetzen, damit STATIC-Deklarationen im globalen
+ // Pool landen
+ SbiSymPool* p = pPool; pPool = &aPublics;
+ DefVar( _STATIC, TRUE );
+ pPool = p;
+ } break;
+ }
+}
+
diff --git a/basic/source/comp/exprgen.cxx b/basic/source/comp/exprgen.cxx
new file mode 100644
index 000000000000..3e034af204f5
--- /dev/null
+++ b/basic/source/comp/exprgen.cxx
@@ -0,0 +1,270 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+
+#include "sbcomp.hxx"
+#include "expr.hxx"
+
+// Umsetztabelle fuer Token-Operatoren und Opcodes
+
+typedef struct {
+ SbiToken eTok; // Token
+ SbiOpcode eOp; // Opcode
+} OpTable;
+
+static OpTable aOpTable [] = {
+ { EXPON,_EXP },
+ { MUL, _MUL },
+ { DIV, _DIV },
+ { IDIV, _IDIV },
+ { MOD, _MOD },
+ { PLUS, _PLUS },
+ { MINUS,_MINUS },
+ { EQ, _EQ },
+ { NE, _NE },
+ { LE, _LE },
+ { GE, _GE },
+ { LT, _LT },
+ { GT, _GT },
+ { AND, _AND },
+ { OR, _OR },
+ { XOR, _XOR },
+ { EQV, _EQV },
+ { IMP, _IMP },
+ { NOT, _NOT },
+ { NEG, _NEG },
+ { CAT, _CAT },
+ { LIKE, _LIKE },
+ { IS, _IS },
+ { NIL, _NOP }};
+
+// Ausgabe eines Elements
+void SbiExprNode::Gen( RecursiveMode eRecMode )
+{
+ if( IsConstant() )
+ {
+ switch( GetType() )
+ {
+ case SbxEMPTY: pGen->Gen( _EMPTY ); break;
+ case SbxINTEGER: pGen->Gen( _CONST, (short) nVal ); break;
+ case SbxSTRING:
+ {
+ USHORT nStringId = pGen->GetParser()->aGblStrings.Add( aStrVal, TRUE );
+ pGen->Gen( _SCONST, nStringId ); break;
+ }
+ default:
+ {
+ USHORT nStringId = pGen->GetParser()->aGblStrings.Add( nVal, eType );
+ pGen->Gen( _NUMBER, nStringId );
+ }
+ }
+ }
+ else if( IsOperand() )
+ {
+ SbiExprNode* pWithParent_ = NULL;
+ SbiOpcode eOp;
+ if( aVar.pDef->GetScope() == SbPARAM )
+ {
+ eOp = _PARAM;
+ if( 0 == aVar.pDef->GetPos() )
+ {
+ bool bTreatFunctionAsParam = true;
+ if( eRecMode == FORCE_CALL )
+ {
+ bTreatFunctionAsParam = false;
+ }
+ else if( eRecMode == UNDEFINED )
+ {
+ if( aVar.pPar && aVar.pPar->IsBracket() )
+ bTreatFunctionAsParam = false;
+ }
+ if( !bTreatFunctionAsParam )
+ eOp = aVar.pDef->IsGlobal() ? _FIND_G : _FIND;
+ }
+ }
+ // AB: 17.12.1995, Spezialbehandlung fuer WITH
+ else if( (pWithParent_ = GetWithParent()) != NULL )
+ {
+ eOp = _ELEM; // .-Ausdruck in WITH
+ }
+ else
+ {
+ eOp = ( aVar.pDef->GetScope() == SbRTL ) ? _RTL :
+ (aVar.pDef->IsGlobal() ? _FIND_G : _FIND);
+ }
+
+ if( eOp == _FIND )
+ {
+
+ SbiProcDef* pProc = aVar.pDef->GetProcDef();
+ if ( pGen->GetParser()->bClassModule )
+ eOp = _FIND_CM;
+ else if ( aVar.pDef->IsStatic() || (pProc && pProc->IsStatic()) )
+ {
+ eOp = _FIND_STATIC;
+ }
+ }
+ for( SbiExprNode* p = this; p; p = p->aVar.pNext )
+ {
+ if( p == this && pWithParent_ != NULL )
+ pWithParent_->Gen();
+ p->GenElement( eOp );
+ eOp = _ELEM;
+ }
+ }
+ else if( IsTypeOf() )
+ {
+ pLeft->Gen();
+ pGen->Gen( _TESTCLASS, nTypeStrId );
+ }
+ else if( IsNew() )
+ {
+ pGen->Gen( _CREATE, 0, nTypeStrId );
+ }
+ else
+ {
+ pLeft->Gen();
+ if( pRight )
+ pRight->Gen();
+ for( OpTable* p = aOpTable; p->eTok != NIL; p++ )
+ {
+ if( p->eTok == eTok )
+ {
+ pGen->Gen( p->eOp ); break;
+ }
+ }
+ }
+}
+
+// Ausgabe eines Operanden-Elements
+
+void SbiExprNode::GenElement( SbiOpcode eOp )
+{
+#ifdef DBG_UTIL
+ if( (eOp < _RTL || eOp > _CALLC) && eOp != _FIND_G && eOp != _FIND_CM )
+ pGen->GetParser()->Error( SbERR_INTERNAL_ERROR, "Opcode" );
+#endif
+ SbiSymDef* pDef = aVar.pDef;
+ // Das ID ist entweder die Position oder das String-ID
+ // Falls das Bit 0x8000 gesetzt ist, hat die Variable
+ // eine Parameterliste.
+ USHORT nId = ( eOp == _PARAM ) ? pDef->GetPos() : pDef->GetId();
+ // Parameterliste aufbauen
+ if( aVar.pPar && aVar.pPar->GetSize() )
+ {
+ nId |= 0x8000;
+ aVar.pPar->Gen();
+ }
+
+ pGen->Gen( eOp, nId, sal::static_int_cast< UINT16 >( GetType() ) );
+
+ if( aVar.pvMorePar )
+ {
+ SbiExprListVector* pvMorePar = aVar.pvMorePar;
+ SbiExprListVector::iterator it;
+ for( it = pvMorePar->begin() ; it != pvMorePar->end() ; ++it )
+ {
+ SbiExprList* pExprList = *it;
+ pExprList->Gen();
+ pGen->Gen( _ARRAYACCESS );
+ }
+ }
+}
+
+// Erzeugen einer Argv-Tabelle
+// Das erste Element bleibt immer frei fuer Returnwerte etc.
+// Siehe auch SbiProcDef::SbiProcDef() in symtbl.cxx
+
+void SbiExprList::Gen()
+{
+ if( pFirst )
+ {
+ pParser->aGen.Gen( _ARGC );
+ // AB 10.1.96: Typ-Anpassung bei DECLARE
+ USHORT nCount = 1 /*, nParAnz = 0*/;
+// SbiSymPool* pPool = NULL;
+ for( SbiExpression* pExpr = pFirst; pExpr; pExpr = pExpr->pNext,nCount++ )
+ {
+ pExpr->Gen();
+ if( pExpr->GetName().Len() )
+ {
+ // named arg
+ USHORT nSid = pParser->aGblStrings.Add( pExpr->GetName() );
+ pParser->aGen.Gen( _ARGN, nSid );
+
+ /* TODO: Check after Declare concept change
+ // AB 10.1.96: Typanpassung bei named -> passenden Parameter suchen
+ if( pProc )
+ {
+ // Vorerst: Error ausloesen
+ pParser->Error( SbERR_NO_NAMED_ARGS );
+
+ // Spaeter, wenn Named Args bei DECLARE moeglich
+ //for( USHORT i = 1 ; i < nParAnz ; i++ )
+ //{
+ // SbiSymDef* pDef = pPool->Get( i );
+ // const String& rName = pDef->GetName();
+ // if( rName.Len() )
+ // {
+ // if( pExpr->GetName().ICompare( rName )
+ // == COMPARE_EQUAL )
+ // {
+ // pParser->aGen.Gen( _ARGTYP, pDef->GetType() );
+ // break;
+ // }
+ // }
+ //}
+ }
+ */
+ }
+ else
+ {
+ pParser->aGen.Gen( _ARGV );
+ }
+ }
+ }
+}
+
+void SbiExpression::Gen( RecursiveMode eRecMode )
+{
+ // AB: 17.12.1995, Spezialbehandlung fuer WITH
+ // Wenn pExpr == .-Ausdruck in With, zunaechst Gen fuer Basis-Objekt
+ pExpr->Gen( eRecMode );
+ if( bByVal )
+ pParser->aGen.Gen( _BYVAL );
+ if( bBased )
+ {
+ USHORT uBase = pParser->nBase;
+ if( pParser->IsCompatible() )
+ uBase |= 0x8000; // #109275 Flag compatiblity
+ pParser->aGen.Gen( _BASED, uBase );
+ pParser->aGen.Gen( _ARGV );
+ }
+}
+
diff --git a/basic/source/comp/exprnode.cxx b/basic/source/comp/exprnode.cxx
new file mode 100644
index 000000000000..d47c86f86ea8
--- /dev/null
+++ b/basic/source/comp/exprnode.cxx
@@ -0,0 +1,488 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+
+#include <math.h>
+
+#include <rtl/math.hxx>
+#include "sbcomp.hxx"
+#include "expr.hxx"
+
+//////////////////////////////////////////////////////////////////////////
+
+SbiExprNode::SbiExprNode( void )
+{
+ pLeft = NULL;
+ pRight = NULL;
+ eNodeType = SbxDUMMY;
+}
+
+SbiExprNode::SbiExprNode( SbiParser* p, SbiExprNode* l, SbiToken t, SbiExprNode* r )
+{
+ BaseInit( p );
+
+ pLeft = l;
+ pRight = r;
+ eTok = t;
+ nVal = 0;
+ eType = SbxVARIANT; // Nodes sind immer Variant
+ eNodeType = SbxNODE;
+ bComposite= TRUE;
+}
+
+SbiExprNode::SbiExprNode( SbiParser* p, double n, SbxDataType t )
+{
+ BaseInit( p );
+
+ eType = t;
+ eNodeType = SbxNUMVAL;
+ nVal = n;
+}
+
+SbiExprNode::SbiExprNode( SbiParser* p, const String& rVal )
+{
+ BaseInit( p );
+
+ eType = SbxSTRING;
+ eNodeType = SbxSTRVAL;
+ aStrVal = rVal;
+}
+
+SbiExprNode::SbiExprNode( SbiParser* p, const SbiSymDef& r, SbxDataType t, SbiExprList* l )
+{
+ BaseInit( p );
+
+ eType = ( t == SbxVARIANT ) ? r.GetType() : t;
+ eNodeType = SbxVARVAL;
+ aVar.pDef = (SbiSymDef*) &r;
+ aVar.pPar = l;
+ aVar.pvMorePar = NULL;
+ aVar.pNext= NULL;
+
+ // Funktionsergebnisse sind nie starr
+ bComposite= BOOL( aVar.pDef->GetProcDef() != NULL );
+}
+
+// #120061 TypeOf
+SbiExprNode::SbiExprNode( SbiParser* p, SbiExprNode* l, USHORT nId )
+{
+ BaseInit( p );
+
+ pLeft = l;
+ eType = SbxBOOL;
+ eNodeType = SbxTYPEOF;
+ nTypeStrId = nId;
+}
+
+// new <type>
+SbiExprNode::SbiExprNode( SbiParser* p, USHORT nId )
+{
+ BaseInit( p );
+
+ eType = SbxOBJECT;
+ eNodeType = SbxNEW;
+ nTypeStrId = nId;
+}
+
+// AB: 17.12.95, Hilfsfunktion fuer Ctor fuer einheitliche Initialisierung
+void SbiExprNode::BaseInit( SbiParser* p )
+{
+ pGen = &p->aGen;
+ eTok = NIL;
+ pLeft = NULL;
+ pRight = NULL;
+ pWithParent = NULL;
+ bComposite = FALSE;
+ bError = FALSE;
+}
+
+SbiExprNode::~SbiExprNode()
+{
+ delete pLeft;
+ delete pRight;
+ if( IsVariable() )
+ {
+ delete aVar.pPar;
+ delete aVar.pNext;
+ SbiExprListVector* pvMorePar = aVar.pvMorePar;
+ if( pvMorePar )
+ {
+ SbiExprListVector::iterator it;
+ for( it = pvMorePar->begin() ; it != pvMorePar->end() ; ++it )
+ delete *it;
+ delete pvMorePar;
+ }
+ }
+}
+
+SbiSymDef* SbiExprNode::GetVar()
+{
+ if( eNodeType == SbxVARVAL )
+ return aVar.pDef;
+ else
+ return NULL;
+}
+
+SbiSymDef* SbiExprNode::GetRealVar()
+{
+ SbiExprNode* p = GetRealNode();
+ if( p )
+ return p->GetVar();
+ else
+ return NULL;
+}
+
+// AB: 18.12.95
+SbiExprNode* SbiExprNode::GetRealNode()
+{
+ if( eNodeType == SbxVARVAL )
+ {
+ SbiExprNode* p = this;
+ while( p->aVar.pNext )
+ p = p->aVar.pNext;
+ return p;
+ }
+ else
+ return NULL;
+}
+
+// Diese Methode setzt den Typ um, falls er in den Integer-Bereich hineinpasst
+
+BOOL SbiExprNode::IsIntConst()
+{
+ if( eNodeType == SbxNUMVAL )
+ {
+ if( eType >= SbxINTEGER && eType <= SbxDOUBLE )
+ {
+ double n;
+ if( nVal >= SbxMININT && nVal <= SbxMAXINT && modf( nVal, &n ) == 0 )
+ {
+ nVal = (double) (short) nVal;
+ eType = SbxINTEGER;
+ return TRUE;
+ }
+ }
+ }
+ return FALSE;
+}
+
+BOOL SbiExprNode::IsNumber()
+{
+ return BOOL( eNodeType == SbxNUMVAL );
+}
+
+BOOL SbiExprNode::IsString()
+{
+ return BOOL( eNodeType == SbxSTRVAL );
+}
+
+BOOL SbiExprNode::IsVariable()
+{
+ return BOOL( eNodeType == SbxVARVAL );
+}
+
+BOOL SbiExprNode::IsLvalue()
+{
+ return IsVariable();
+}
+
+// Ermitteln der Tiefe eines Baumes
+
+short SbiExprNode::GetDepth()
+{
+ if( IsOperand() ) return 0;
+ else
+ {
+ short d1 = pLeft->GetDepth();
+ short d2 = pRight->GetDepth();
+ return( (d1 < d2 ) ? d2 : d1 ) + 1;
+ }
+}
+
+
+// Abgleich eines Baumes:
+// 1. Constant Folding
+// 2. Typabgleich
+// 3. Umwandlung der Operanden in Strings
+// 4. Hochziehen der Composite- und Error-Bits
+
+void SbiExprNode::Optimize()
+{
+ FoldConstants();
+ CollectBits();
+}
+
+// Hochziehen der Composite- und Fehlerbits
+
+void SbiExprNode::CollectBits()
+{
+ if( pLeft )
+ {
+ pLeft->CollectBits();
+ bError |= pLeft->bError;
+ bComposite |= pLeft->bComposite;
+ }
+ if( pRight )
+ {
+ pRight->CollectBits();
+ bError |= pRight->bError;
+ bComposite |= pRight->bComposite;
+ }
+}
+
+// Kann ein Zweig umgeformt werden, wird TRUE zurueckgeliefert. In diesem
+// Fall ist das Ergebnis im linken Zweig.
+
+void SbiExprNode::FoldConstants()
+{
+ if( IsOperand() || eTok == LIKE ) return;
+ if( pLeft )
+ pLeft->FoldConstants();
+ if( pRight )
+ {
+ pRight->FoldConstants();
+ if( pLeft->IsConstant() && pRight->IsConstant()
+ && pLeft->eNodeType == pRight->eNodeType )
+ {
+ CollectBits();
+ if( eTok == CAT )
+ // CAT verbindet auch zwei Zahlen miteinander!
+ eType = SbxSTRING;
+ if( pLeft->eType == SbxSTRING )
+ // Kein Type Mismatch!
+ eType = SbxSTRING;
+ if( eType == SbxSTRING )
+ {
+ String rl( pLeft->GetString() );
+ String rr( pRight->GetString() );
+ delete pLeft; pLeft = NULL;
+ delete pRight; pRight = NULL;
+ bComposite = FALSE;
+ if( eTok == PLUS || eTok == CAT )
+ {
+ eTok = CAT;
+ // Verkettung:
+ aStrVal = rl;
+ aStrVal += rr;
+ eType = SbxSTRING;
+ eNodeType = SbxSTRVAL;
+ }
+ else
+ {
+ eType = SbxDOUBLE;
+ eNodeType = SbxNUMVAL;
+ StringCompare eRes = rr.CompareTo( rl );
+ switch( eTok )
+ {
+ case EQ:
+ nVal = ( eRes == COMPARE_EQUAL ) ? SbxTRUE : SbxFALSE;
+ break;
+ case NE:
+ nVal = ( eRes != COMPARE_EQUAL ) ? SbxTRUE : SbxFALSE;
+ break;
+ case LT:
+ nVal = ( eRes == COMPARE_LESS ) ? SbxTRUE : SbxFALSE;
+ break;
+ case GT:
+ nVal = ( eRes == COMPARE_GREATER ) ? SbxTRUE : SbxFALSE;
+ break;
+ case LE:
+ nVal = ( eRes != COMPARE_GREATER ) ? SbxTRUE : SbxFALSE;
+ break;
+ case GE:
+ nVal = ( eRes != COMPARE_LESS ) ? SbxTRUE : SbxFALSE;
+ break;
+ default:
+ pGen->GetParser()->Error( SbERR_CONVERSION );
+ bError = TRUE;
+ }
+ }
+ }
+ else
+ {
+ double nl = pLeft->nVal;
+ double nr = pRight->nVal;
+ long ll = 0, lr = 0;
+ long llMod = 0, lrMod = 0;
+ if( ( eTok >= AND && eTok <= IMP )
+ || eTok == IDIV || eTok == MOD )
+ {
+ // Integer-Operationen
+ BOOL err = FALSE;
+ if( nl > SbxMAXLNG ) err = TRUE, nl = SbxMAXLNG;
+ else
+ if( nl < SbxMINLNG ) err = TRUE, nl = SbxMINLNG;
+ if( nr > SbxMAXLNG ) err = TRUE, nr = SbxMAXLNG;
+ else
+ if( nr < SbxMINLNG ) err = TRUE, nr = SbxMINLNG;
+ ll = (long) nl; lr = (long) nr;
+ llMod = (long) (nl < 0 ? nl - 0.5 : nl + 0.5);
+ lrMod = (long) (nr < 0 ? nr - 0.5 : nr + 0.5);
+ if( err )
+ {
+ pGen->GetParser()->Error( SbERR_MATH_OVERFLOW );
+ bError = TRUE;
+ }
+ }
+ BOOL bBothInt = BOOL( pLeft->eType < SbxSINGLE
+ && pRight->eType < SbxSINGLE );
+ delete pLeft; pLeft = NULL;
+ delete pRight; pRight = NULL;
+ nVal = 0;
+ eType = SbxDOUBLE;
+ eNodeType = SbxNUMVAL;
+ bComposite = FALSE;
+ BOOL bCheckType = FALSE;
+ switch( eTok )
+ {
+ case EXPON:
+ nVal = pow( nl, nr ); break;
+ case MUL:
+ bCheckType = TRUE;
+ nVal = nl * nr; break;
+ case DIV:
+ if( !nr )
+ {
+ pGen->GetParser()->Error( SbERR_ZERODIV ); nVal = HUGE_VAL;
+ bError = TRUE;
+ } else nVal = nl / nr;
+ break;
+ case PLUS:
+ bCheckType = TRUE;
+ nVal = nl + nr; break;
+ case MINUS:
+ bCheckType = TRUE;
+ nVal = nl - nr; break;
+ case EQ:
+ nVal = ( nl == nr ) ? SbxTRUE : SbxFALSE;
+ eType = SbxINTEGER; break;
+ case NE:
+ nVal = ( nl != nr ) ? SbxTRUE : SbxFALSE;
+ eType = SbxINTEGER; break;
+ case LT:
+ nVal = ( nl < nr ) ? SbxTRUE : SbxFALSE;
+ eType = SbxINTEGER; break;
+ case GT:
+ nVal = ( nl > nr ) ? SbxTRUE : SbxFALSE;
+ eType = SbxINTEGER; break;
+ case LE:
+ nVal = ( nl <= nr ) ? SbxTRUE : SbxFALSE;
+ eType = SbxINTEGER; break;
+ case GE:
+ nVal = ( nl >= nr ) ? SbxTRUE : SbxFALSE;
+ eType = SbxINTEGER; break;
+ case IDIV:
+ if( !lr )
+ {
+ pGen->GetParser()->Error( SbERR_ZERODIV ); nVal = HUGE_VAL;
+ bError = TRUE;
+ } else nVal = ll / lr;
+ eType = SbxLONG; break;
+ case MOD:
+ if( !lr )
+ {
+ pGen->GetParser()->Error( SbERR_ZERODIV ); nVal = HUGE_VAL;
+ bError = TRUE;
+ } else nVal = llMod % lrMod;
+ eType = SbxLONG; break;
+ case AND:
+ nVal = (double) ( ll & lr ); eType = SbxLONG; break;
+ case OR:
+ nVal = (double) ( ll | lr ); eType = SbxLONG; break;
+ case XOR:
+ nVal = (double) ( ll ^ lr ); eType = SbxLONG; break;
+ case EQV:
+ nVal = (double) ( ~ll ^ lr ); eType = SbxLONG; break;
+ case IMP:
+ nVal = (double) ( ~ll | lr ); eType = SbxLONG; break;
+ default: break;
+ }
+
+ if( !::rtl::math::isFinite( nVal ) )
+ pGen->GetParser()->Error( SbERR_MATH_OVERFLOW );
+
+ // Den Datentyp wiederherstellen, um Rundungsfehler
+ // zu killen
+ if( bCheckType && bBothInt
+ && nVal >= SbxMINLNG && nVal <= SbxMAXLNG )
+ {
+ // NK-Stellen weg
+ long n = (long) nVal;
+ nVal = n;
+ eType = ( n >= SbxMININT && n <= SbxMAXINT )
+ ? SbxINTEGER : SbxLONG;
+ }
+ }
+ }
+ }
+ else if( pLeft && pLeft->IsNumber() )
+ {
+ nVal = pLeft->nVal;
+ delete pLeft;
+ pLeft = NULL;
+ eType = SbxDOUBLE;
+ eNodeType = SbxNUMVAL;
+ bComposite = FALSE;
+ switch( eTok )
+ {
+ case NEG:
+ nVal = -nVal; break;
+ case NOT: {
+ // Integer-Operation!
+ BOOL err = FALSE;
+ if( nVal > SbxMAXLNG ) err = TRUE, nVal = SbxMAXLNG;
+ else
+ if( nVal < SbxMINLNG ) err = TRUE, nVal = SbxMINLNG;
+ if( err )
+ {
+ pGen->GetParser()->Error( SbERR_MATH_OVERFLOW );
+ bError = TRUE;
+ }
+ nVal = (double) ~((long) nVal);
+ eType = SbxLONG;
+ } break;
+ default: break;
+ }
+ }
+ if( eNodeType == SbxNUMVAL )
+ {
+ // Evtl auf INTEGER falten (wg. besserem Opcode)?
+ if( eType == SbxSINGLE || eType == SbxDOUBLE )
+ {
+ double x;
+ if( nVal >= SbxMINLNG && nVal <= SbxMAXLNG
+ && !modf( nVal, &x ) )
+ eType = SbxLONG;
+ }
+ if( eType == SbxLONG && nVal >= SbxMININT && nVal <= SbxMAXINT )
+ eType = SbxINTEGER;
+ }
+}
+
+
diff --git a/basic/source/comp/exprtree.cxx b/basic/source/comp/exprtree.cxx
new file mode 100644
index 000000000000..7a4ea5965558
--- /dev/null
+++ b/basic/source/comp/exprtree.cxx
@@ -0,0 +1,1136 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+
+#include "sbcomp.hxx"
+#include <basic/sbx.hxx> // w.g. ...IMPL_REF(...sbxvariable)
+#include "expr.hxx"
+
+/***************************************************************************
+|*
+|* SbiExpression
+|*
+***************************************************************************/
+
+SbiExpression::SbiExpression( SbiParser* p, SbiExprType t,
+ SbiExprMode eMode, const KeywordSymbolInfo* pKeywordSymbolInfo )
+{
+ pParser = p;
+ bError = bByVal = bBased = bBracket = FALSE;
+ nParenLevel = 0;
+ eCurExpr = t;
+ m_eMode = eMode;
+ pNext = NULL;
+ pExpr = (t != SbSTDEXPR ) ? Term( pKeywordSymbolInfo ) : Boolean();
+ if( t != SbSYMBOL )
+ pExpr->Optimize();
+ if( t == SbLVALUE && !pExpr->IsLvalue() )
+ p->Error( SbERR_LVALUE_EXPECTED );
+ if( t == SbOPERAND && !IsVariable() )
+ p->Error( SbERR_VAR_EXPECTED );
+}
+
+SbiExpression::SbiExpression( SbiParser* p, double n, SbxDataType t )
+{
+ pParser = p;
+ eCurExpr = SbOPERAND;
+ pNext = NULL;
+ bError = bByVal = bBased = bBracket = FALSE;
+ pExpr = new SbiExprNode( pParser, n, t );
+ pExpr->Optimize();
+}
+
+SbiExpression::SbiExpression( SbiParser* p, const String& r )
+{
+ pParser = p;
+ pNext = NULL;
+ bError = bByVal = bBased = bBracket = FALSE;
+ eCurExpr = SbOPERAND;
+ pExpr = new SbiExprNode( pParser, r );
+}
+
+SbiExpression::SbiExpression( SbiParser* p, const SbiSymDef& r, SbiExprList* pPar )
+{
+ pParser = p;
+ pNext = NULL;
+ bError = bByVal = bBased = bBracket = FALSE;
+ eCurExpr = SbOPERAND;
+ pExpr = new SbiExprNode( pParser, r, SbxVARIANT, pPar );
+}
+
+SbiExpression::SbiExpression( SbiParser* p, SbiToken t )
+{
+ pParser = p;
+ pNext = NULL;
+ bError = bByVal = bBased = bBracket = FALSE;
+ eCurExpr = SbOPERAND;
+ pExpr = new SbiExprNode( pParser, NULL, t, NULL );
+}
+
+SbiExpression::~SbiExpression()
+{
+ delete pExpr;
+}
+
+// Einlesen eines kompletten Bezeichners
+// Ein Bezeichner hat folgende Form:
+// name[(Parameter)][.Name[(parameter)]]...
+// Strukturelemente werden ueber das Element pNext verkoppelt,
+// damit sie nicht im Baum stehen.
+
+// Folgen Parameter ohne Klammer? Dies kann eine Zahl, ein String,
+// ein Symbol oder auch ein Komma sein (wenn der 1. Parameter fehlt)
+
+static BOOL DoParametersFollow( SbiParser* p, SbiExprType eCurExpr, SbiToken eTok )
+{
+ if( eTok == LPAREN )
+ return TRUE;
+ // Aber nur, wenn CALL-aehnlich!
+ if( !p->WhiteSpace() || eCurExpr != SbSYMBOL )
+ return FALSE;
+ if ( eTok == NUMBER || eTok == MINUS || eTok == FIXSTRING
+ || eTok == SYMBOL || eTok == COMMA || eTok == DOT || eTok == NOT || eTok == BYVAL )
+ {
+ return TRUE;
+ }
+ else // check for default params with reserved names ( e.g. names of tokens )
+ {
+ SbiTokenizer tokens( *(SbiTokenizer*)p );
+ // Urk the Next() / Peek() symantics are... weird
+ tokens.Next();
+ if ( tokens.Peek() == ASSIGN )
+ return TRUE;
+ }
+ return FALSE;
+}
+
+// Definition eines neuen Symbols
+
+static SbiSymDef* AddSym
+ ( SbiToken eTok, SbiSymPool& rPool, SbiExprType eCurExpr,
+ const String& rName, SbxDataType eType, SbiParameters* pPar )
+{
+ SbiSymDef* pDef;
+ // A= ist keine Prozedur
+ BOOL bHasType = BOOL( eTok == EQ || eTok == DOT );
+ if( ( !bHasType && eCurExpr == SbSYMBOL ) || pPar )
+ {
+ // Dies ist also eine Prozedur
+ // da suche man doch den richtigen Pool raus, da Procs
+ // immer in einem Public-Pool landen muessen
+ SbiSymPool* pPool = &rPool;
+ if( pPool->GetScope() != SbPUBLIC )
+ pPool = &rPool.GetParser()->aPublics;
+ SbiProcDef* pProc = pPool->AddProc( rName );
+
+ // Sonderbehandlung fuer Colls wie Documents(1)
+ if( eCurExpr == SbSTDEXPR )
+ bHasType = TRUE;
+
+ pDef = pProc;
+ pDef->SetType( bHasType ? eType : SbxEMPTY );
+ if( pPar )
+ {
+ // Dummy-Parameter generieren
+ USHORT n = 1;
+ for( short i = 0; i < pPar->GetSize(); i++ )
+ {
+ String aPar = String::CreateFromAscii( "PAR" );
+ aPar += ++n;
+ pProc->GetParams().AddSym( aPar );
+ }
+ }
+ }
+ else
+ {
+ // oder ein normales Symbol
+ pDef = rPool.AddSym( rName );
+ pDef->SetType( eType );
+ }
+ return pDef;
+}
+
+// Zur Zeit sind sogar Keywords zugelassen (wg. gleichnamiger Dflt-Properties)
+
+SbiExprNode* SbiExpression::Term( const KeywordSymbolInfo* pKeywordSymbolInfo )
+{
+ if( pParser->Peek() == DOT )
+ {
+ // eine WITH-Variable
+ SbiExprNode* pWithVar = pParser->GetWithVar();
+ // #26608: Ans Ende der Node-Kette gehen, um richtiges Objekt zu uebergeben
+ SbiSymDef* pDef = pWithVar ? pWithVar->GetRealVar() : NULL;
+ SbiExprNode* pNd = NULL;
+ if( !pDef )
+ {
+ pParser->Next();
+ }
+ else
+ {
+ pNd = ObjTerm( *pDef );
+ if( pNd )
+ pNd->SetWithParent( pWithVar );
+ }
+ if( !pNd )
+ {
+ pParser->Error( SbERR_UNEXPECTED, DOT );
+ pNd = new SbiExprNode( pParser, 1.0, SbxDOUBLE );
+ }
+ return pNd;
+ }
+
+ SbiToken eTok = (pKeywordSymbolInfo == NULL) ? pParser->Next() : pKeywordSymbolInfo->m_eTok;
+ // Anfang des Parsings merken
+ pParser->LockColumn();
+ String aSym( (pKeywordSymbolInfo == NULL) ? pParser->GetSym() : pKeywordSymbolInfo->m_aKeywordSymbol );
+ SbxDataType eType = (pKeywordSymbolInfo == NULL) ? pParser->GetType() : pKeywordSymbolInfo->m_eSbxDataType;
+ SbiParameters* pPar = NULL;
+ SbiExprListVector* pvMoreParLcl = NULL;
+ // Folgen Parameter?
+ SbiToken eNextTok = pParser->Peek();
+ // Ist es ein benannter Parameter?
+ // Dann einfach eine Stringkonstante erzeugen. Diese wird
+ // im SbiParameters-ctor erkannt und weiterverarbeitet
+ if( eNextTok == ASSIGN )
+ {
+ pParser->UnlockColumn();
+ return new SbiExprNode( pParser, aSym );
+ }
+ // ab hier sind keine Keywords zugelassen!
+ if( pParser->IsKwd( eTok ) )
+ {
+ if( pParser->IsCompatible() && eTok == INPUT )
+ {
+ eTok = SYMBOL;
+ }
+ else
+ {
+ pParser->Error( SbERR_SYNTAX );
+ bError = TRUE;
+ }
+ }
+
+ if( DoParametersFollow( pParser, eCurExpr, eTok = eNextTok ) )
+ {
+ bool bStandaloneExpression = (m_eMode == EXPRMODE_STANDALONE);
+ pPar = new SbiParameters( pParser, bStandaloneExpression );
+ bError |= !pPar->IsValid();
+ if( !bError )
+ bBracket = pPar->IsBracket();
+ eTok = pParser->Peek();
+
+ // i75443 check for additional sets of parameters
+ while( eTok == LPAREN )
+ {
+ if( pvMoreParLcl == NULL )
+ pvMoreParLcl = new SbiExprListVector();
+ SbiParameters* pAddPar = new SbiParameters( pParser );
+ pvMoreParLcl->push_back( pAddPar );
+ bError |= !pPar->IsValid();
+ eTok = pParser->Peek();
+ }
+ }
+ // Es koennte ein Objektteil sein, wenn . oder ! folgt
+ // Bei . muss aber die Variable bereits definiert sein; wenn pDef
+ // nach der Suche NULL ist, isses ein Objekt!
+ BOOL bObj = BOOL( ( eTok == DOT || eTok == EXCLAM )
+ && !pParser->WhiteSpace() );
+ if( bObj )
+ {
+ bBracket = FALSE; // Now the bracket for the first term is obsolete
+ if( eType == SbxVARIANT )
+ eType = SbxOBJECT;
+ else
+ {
+ // Name%. geht wirklich nicht!
+ pParser->Error( SbERR_BAD_DECLARATION, aSym );
+ bError = TRUE;
+ }
+ }
+ // Suche:
+ SbiSymDef* pDef = pParser->pPool->Find( aSym );
+ if( !pDef )
+ {
+ // Teil der Runtime-Library?
+ // AB 31.3.1996: In Parser-Methode ausgelagert
+ // (wird auch in SbiParser::DefVar() in DIM.CXX benoetigt)
+ pDef = pParser->CheckRTLForSym( aSym, eType );
+
+ // #i109184: Check if symbol is or later will be defined inside module
+ SbModule& rMod = pParser->aGen.GetModule();
+ SbxArray* pModMethods = rMod.GetMethods();
+ if( pModMethods->Find( aSym, SbxCLASS_DONTCARE ) )
+ pDef = NULL;
+ }
+ if( !pDef )
+ {
+ // Falls ein Punkt angegeben war, isses Teil eines Objekts,
+ // also muss der Returnwert ein Objekt sein
+ if( bObj )
+ eType = SbxOBJECT;
+ pDef = AddSym( eTok, *pParser->pPool, eCurExpr, aSym, eType, pPar );
+ // Looks like this is a local ( but undefined variable )
+ // if it is in a static procedure then make this Symbol
+ // static
+ if ( !bObj && pParser->pProc && pParser->pProc->IsStatic() )
+ pDef->SetStatic();
+ }
+ else
+ {
+
+ // Symbol ist bereits definiert.
+ // Ist es eine Konstante?
+ SbiConstDef* pConst = pDef->GetConstDef();
+ if( pConst )
+ {
+ if( pConst->GetType() == SbxSTRING )
+ return new SbiExprNode( pParser, pConst->GetString() );
+ else
+ return new SbiExprNode( pParser, pConst->GetValue(), pConst->GetType() );
+ }
+ // Hat es Dimensionen,
+ // und sind auch Parameter angegeben?
+ // (Wobei 0 Parameter () entsprechen)
+ if( pDef->GetDims() )
+ {
+ if( pPar && pPar->GetSize() && pPar->GetSize() != pDef->GetDims() )
+ pParser->Error( SbERR_WRONG_DIMS );
+ }
+ if( pDef->IsDefinedAs() )
+ {
+ SbxDataType eDefType = pDef->GetType();
+ // #119187 Only error if types conflict
+ if( eType >= SbxINTEGER && eType <= SbxSTRING && eType != eDefType )
+ {
+ // Wie? Erst mit AS definieren und dann einen Suffix nehmen?
+ pParser->Error( SbERR_BAD_DECLARATION, aSym );
+ bError = TRUE;
+ }
+ else if ( eType == SbxVARIANT )
+ // Falls nix angegeben, den Typ des Eintrags nehmen
+ // aber nur, wenn die Var nicht mit AS XXX definiert ist
+ // damit erwischen wir n% = 5 : print n
+ eType = eDefType;
+ }
+ // Typcheck bei Variablen:
+ // ist explizit im Scanner etwas anderes angegeben?
+ // Bei Methoden ist dies OK!
+ if( eType != SbxVARIANT && // Variant nimmt alles
+ eType != pDef->GetType() &&
+ !pDef->GetProcDef() )
+ {
+ // Es kann sein, dass pDef ein Objekt beschreibt, das bisher
+ // nur als SbxVARIANT erkannt wurde, dann Typ von pDef aendern
+ // AB, 16.12.95 (Vielleicht noch aehnliche Faelle moeglich ?!?)
+ if( eType == SbxOBJECT && pDef->GetType() == SbxVARIANT )
+ {
+ pDef->SetType( SbxOBJECT );
+ }
+ else
+ {
+ pParser->Error( SbERR_BAD_DECLARATION, aSym );
+ bError = TRUE;
+ }
+ }
+ }
+ SbiExprNode* pNd = new SbiExprNode( pParser, *pDef, eType );
+ if( !pPar )
+ pPar = new SbiParameters( pParser,FALSE,FALSE );
+ pNd->aVar.pPar = pPar;
+ pNd->aVar.pvMorePar = pvMoreParLcl;
+ if( bObj )
+ {
+ // AB, 8.1.95: Objekt kann auch vom Typ SbxVARIANT sein
+ if( pDef->GetType() == SbxVARIANT )
+ pDef->SetType( SbxOBJECT );
+ // Falls wir etwas mit Punkt einscannen, muss der
+ // Typ SbxOBJECT sein
+ if( pDef->GetType() != SbxOBJECT && pDef->GetType() != SbxVARIANT )
+ {
+ pParser->Error( SbERR_BAD_DECLARATION, aSym );
+ bError = TRUE;
+ }
+ if( !bError )
+ pNd->aVar.pNext = ObjTerm( *pDef );
+ }
+ // Merken der Spalte 1 wieder freigeben
+ pParser->UnlockColumn();
+ return pNd;
+}
+
+// Aufbau eines Objekt-Terms. Ein derartiger Term ist Teil
+// eines Ausdrucks, der mit einer Objektvariablen beginnt.
+
+SbiExprNode* SbiExpression::ObjTerm( SbiSymDef& rObj )
+{
+ pParser->Next();
+ SbiToken eTok = pParser->Next();
+ if( eTok != SYMBOL && !pParser->IsKwd( eTok ) && !pParser->IsExtra( eTok ) )
+ {
+ // #66745 Einige Operatoren koennen in diesem Kontext auch
+ // als Identifier zugelassen werden, wichtig fuer StarOne
+ if( eTok != MOD && eTok != NOT && eTok != AND && eTok != OR &&
+ eTok != XOR && eTok != EQV && eTok != IMP && eTok != IS )
+ {
+ pParser->Error( SbERR_VAR_EXPECTED );
+ bError = TRUE;
+ }
+ }
+ /* #118410 Allow type for Class methods and RTL object, e.g. RTL.Chr$(97)
+ else
+ {
+ if( pParser->GetType() != SbxVARIANT )
+ pParser->Error( SbERR_SYNTAX ), bError = TRUE;
+ }
+ */
+ if( bError )
+ return NULL;
+
+ String aSym( pParser->GetSym() );
+ SbxDataType eType = pParser->GetType();
+ SbiParameters* pPar = NULL;
+ SbiExprListVector* pvMoreParLcl = NULL;
+ eTok = pParser->Peek();
+ // Parameter?
+ if( DoParametersFollow( pParser, eCurExpr, eTok ) )
+ {
+ bool bStandaloneExpression = false;
+ pPar = new SbiParameters( pParser, bStandaloneExpression );
+ bError |= !pPar->IsValid();
+ eTok = pParser->Peek();
+
+ // i109624 check for additional sets of parameters
+ while( eTok == LPAREN )
+ {
+ if( pvMoreParLcl == NULL )
+ pvMoreParLcl = new SbiExprListVector();
+ SbiParameters* pAddPar = new SbiParameters( pParser );
+ pvMoreParLcl->push_back( pAddPar );
+ bError |= !pPar->IsValid();
+ eTok = pParser->Peek();
+ }
+
+ }
+ BOOL bObj = BOOL( ( eTok == DOT || eTok == EXCLAM ) && !pParser->WhiteSpace() );
+ if( bObj )
+ {
+ if( eType == SbxVARIANT )
+ eType = SbxOBJECT;
+ else
+ {
+ // Name%. geht wirklich nicht!
+ pParser->Error( SbERR_BAD_DECLARATION, aSym );
+ bError = TRUE;
+ }
+ }
+
+ // Der Symbol-Pool eines Objekts ist immer PUBLIC
+ SbiSymPool& rPool = rObj.GetPool();
+ rPool.SetScope( SbPUBLIC );
+ SbiSymDef* pDef = rPool.Find( aSym );
+ if( !pDef )
+ {
+ pDef = AddSym( eTok, rPool, eCurExpr, aSym, eType, pPar );
+ pDef->SetType( eType );
+ }
+
+ SbiExprNode* pNd = new SbiExprNode( pParser, *pDef, eType );
+ pNd->aVar.pPar = pPar;
+ pNd->aVar.pvMorePar = pvMoreParLcl;
+ if( bObj )
+ {
+ // Falls wir etwas mit Punkt einscannen, muss der
+ // Typ SbxOBJECT sein
+
+ // AB, 3.1.96
+ // Es kann sein, dass pDef ein Objekt beschreibt, das bisher
+ // nur als SbxVARIANT erkannt wurde, dann Typ von pDef aendern
+ if( pDef->GetType() == SbxVARIANT )
+ pDef->SetType( SbxOBJECT );
+
+ if( pDef->GetType() != SbxOBJECT )
+ {
+ pParser->Error( SbERR_BAD_DECLARATION, aSym );
+ bError = TRUE;
+ }
+ if( !bError )
+ {
+ pNd->aVar.pNext = ObjTerm( *pDef );
+ pNd->eType = eType;
+ }
+ }
+ return pNd;
+}
+
+// Als Operanden kommen in Betracht:
+// Konstante
+// skalare Variable
+// Strukturelemente
+// Array-Elemente
+// Funktionen
+// geklammerte Ausdruecke
+
+SbiExprNode* SbiExpression::Operand( bool bUsedForTypeOf )
+{
+ SbiExprNode *pRes;
+ SbiToken eTok;
+
+ // Operand testen:
+ switch( eTok = pParser->Peek() )
+ {
+ case SYMBOL:
+ pRes = Term();
+ // process something like "IF Not r Is Nothing Then .."
+ if( !bUsedForTypeOf && pParser->IsVBASupportOn() && pParser->Peek() == IS )
+ {
+ eTok = pParser->Next();
+ pRes = new SbiExprNode( pParser, pRes, eTok, Like() );
+ }
+ break;
+ case DOT: // .with
+ pRes = Term(); break;
+ case NUMBER:
+ pParser->Next();
+ pRes = new SbiExprNode( pParser, pParser->GetDbl(), pParser->GetType() );
+ break;
+ case FIXSTRING:
+ pParser->Next();
+ pRes = new SbiExprNode( pParser, pParser->GetSym() ); break;
+ case LPAREN:
+ pParser->Next();
+ if( nParenLevel == 0 && m_eMode == EXPRMODE_LPAREN_PENDING && pParser->Peek() == RPAREN )
+ {
+ m_eMode = EXPRMODE_EMPTY_PAREN;
+ pRes = new SbiExprNode(); // Dummy node
+ pParser->Next();
+ break;
+ }
+ nParenLevel++;
+ pRes = Boolean();
+ if( pParser->Peek() != RPAREN )
+ {
+ // If there was a LPARAM, it does not belong to the expression
+ if( nParenLevel == 1 && m_eMode == EXPRMODE_LPAREN_PENDING )
+ m_eMode = EXPRMODE_LPAREN_NOT_NEEDED;
+ else
+ pParser->Error( SbERR_BAD_BRACKETS );
+ }
+ else
+ {
+ pParser->Next();
+ if( nParenLevel == 1 && m_eMode == EXPRMODE_LPAREN_PENDING )
+ {
+ SbiToken eTokAfterRParen = pParser->Peek();
+ if( eTokAfterRParen == EQ || eTokAfterRParen == LPAREN || eTokAfterRParen == DOT )
+ m_eMode = EXPRMODE_ARRAY_OR_OBJECT;
+ else
+ m_eMode = EXPRMODE_STANDARD;
+ }
+ }
+ nParenLevel--;
+ pRes->bComposite = TRUE;
+ break;
+ default:
+ // Zur Zeit sind Keywords hier OK!
+ if( pParser->IsKwd( eTok ) )
+ pRes = Term();
+ else
+ {
+ pParser->Next();
+ pRes = new SbiExprNode( pParser, 1.0, SbxDOUBLE ); // bei Fehlern
+ pParser->Error( SbERR_UNEXPECTED, eTok );
+ }
+ }
+ return pRes;
+}
+
+SbiExprNode* SbiExpression::Unary()
+{
+ SbiExprNode* pNd;
+ SbiToken eTok = pParser->Peek();
+ switch( eTok )
+ {
+ case MINUS:
+ eTok = NEG;
+ case NOT:
+ pParser->Next();
+ pNd = new SbiExprNode( pParser, Unary(), eTok, NULL );
+ break;
+ case PLUS:
+ pParser->Next();
+ pNd = Unary();
+ break;
+ case TYPEOF:
+ {
+ pParser->Next();
+ bool bUsedForTypeOf = true;
+ SbiExprNode* pObjNode = Operand( bUsedForTypeOf );
+ pParser->TestToken( IS );
+ String aDummy;
+ SbiSymDef* pTypeDef = new SbiSymDef( aDummy );
+ pParser->TypeDecl( *pTypeDef, TRUE );
+ pNd = new SbiExprNode( pParser, pObjNode, pTypeDef->GetTypeId() );
+ break;
+ }
+ case NEW:
+ {
+ pParser->Next();
+ String aStr;
+ SbiSymDef* pTypeDef = new SbiSymDef( aStr );
+ pParser->TypeDecl( *pTypeDef, TRUE );
+ pNd = new SbiExprNode( pParser, pTypeDef->GetTypeId() );
+ break;
+ }
+ default:
+ pNd = Operand();
+ }
+ return pNd;
+}
+
+SbiExprNode* SbiExpression::Exp()
+{
+ SbiExprNode* pNd = Unary();
+ if( m_eMode != EXPRMODE_EMPTY_PAREN )
+ {
+ while( pParser->Peek() == EXPON ) {
+ SbiToken eTok = pParser->Next();
+ pNd = new SbiExprNode( pParser, pNd, eTok, Unary() );
+ }
+ }
+ return pNd;
+}
+
+SbiExprNode* SbiExpression::MulDiv()
+{
+ SbiExprNode* pNd = Exp();
+ if( m_eMode != EXPRMODE_EMPTY_PAREN )
+ {
+ for( ;; )
+ {
+ SbiToken eTok = pParser->Peek();
+ if( eTok != MUL && eTok != DIV )
+ break;
+ eTok = pParser->Next();
+ pNd = new SbiExprNode( pParser, pNd, eTok, Exp() );
+ }
+ }
+ return pNd;
+}
+
+SbiExprNode* SbiExpression::IntDiv()
+{
+ SbiExprNode* pNd = MulDiv();
+ if( m_eMode != EXPRMODE_EMPTY_PAREN )
+ {
+ while( pParser->Peek() == IDIV ) {
+ SbiToken eTok = pParser->Next();
+ pNd = new SbiExprNode( pParser, pNd, eTok, MulDiv() );
+ }
+ }
+ return pNd;
+}
+
+SbiExprNode* SbiExpression::Mod()
+{
+ SbiExprNode* pNd = IntDiv();
+ if( m_eMode != EXPRMODE_EMPTY_PAREN )
+ {
+ while( pParser->Peek() == MOD ) {
+ SbiToken eTok = pParser->Next();
+ pNd = new SbiExprNode( pParser, pNd, eTok, IntDiv() );
+ }
+ }
+ return pNd;
+}
+
+SbiExprNode* SbiExpression::AddSub()
+{
+ SbiExprNode* pNd = Mod();
+ if( m_eMode != EXPRMODE_EMPTY_PAREN )
+ {
+ for( ;; )
+ {
+ SbiToken eTok = pParser->Peek();
+ if( eTok != PLUS && eTok != MINUS )
+ break;
+ eTok = pParser->Next();
+ pNd = new SbiExprNode( pParser, pNd, eTok, Mod() );
+ }
+ }
+ return pNd;
+}
+
+SbiExprNode* SbiExpression::Cat()
+{
+ SbiExprNode* pNd = AddSub();
+ if( m_eMode != EXPRMODE_EMPTY_PAREN )
+ {
+ for( ;; )
+ {
+ SbiToken eTok = pParser->Peek();
+ if( eTok != CAT )
+ break;
+ eTok = pParser->Next();
+ pNd = new SbiExprNode( pParser, pNd, eTok, AddSub() );
+ }
+ }
+ return pNd;
+}
+
+SbiExprNode* SbiExpression::Comp()
+{
+ SbiExprNode* pNd = Cat();
+ if( m_eMode != EXPRMODE_EMPTY_PAREN )
+ {
+ short nCount = 0;
+ for( ;; )
+ {
+ SbiToken eTok = pParser->Peek();
+ if( m_eMode == EXPRMODE_ARRAY_OR_OBJECT )
+ break;
+ if( eTok != EQ && eTok != NE && eTok != LT
+ && eTok != GT && eTok != LE && eTok != GE )
+ break;
+ eTok = pParser->Next();
+ pNd = new SbiExprNode( pParser, pNd, eTok, Cat() );
+ nCount++;
+ }
+ }
+ return pNd;
+}
+
+SbiExprNode* SbiExpression::Like()
+{
+ SbiExprNode* pNd = Comp();
+ if( m_eMode != EXPRMODE_EMPTY_PAREN )
+ {
+ short nCount = 0;
+ while( pParser->Peek() == LIKE ) {
+ SbiToken eTok = pParser->Next();
+ pNd = new SbiExprNode( pParser, pNd, eTok, Comp() ), nCount++;
+ }
+ // Mehrere Operatoren hintereinander gehen nicht
+ if( nCount > 1 )
+ {
+ pParser->Error( SbERR_SYNTAX );
+ bError = TRUE;
+ }
+ }
+ return pNd;
+}
+
+SbiExprNode* SbiExpression::Boolean()
+{
+ SbiExprNode* pNd = Like();
+ if( m_eMode != EXPRMODE_EMPTY_PAREN )
+ {
+ for( ;; )
+ {
+ SbiToken eTok = pParser->Peek();
+ if( eTok != AND && eTok != OR && eTok != XOR
+ && eTok != EQV && eTok != IMP && eTok != IS )
+ break;
+ eTok = pParser->Next();
+ pNd = new SbiExprNode( pParser, pNd, eTok, Like() );
+ }
+ }
+ return pNd;
+}
+
+/***************************************************************************
+|*
+|* SbiConstExpression
+|*
+***************************************************************************/
+
+// Parsing einer Expression, die sich zu einer numerischen
+// Konstanten verarbeiten laesst.
+
+SbiConstExpression::SbiConstExpression( SbiParser* p ) : SbiExpression( p )
+{
+ if( pExpr->IsConstant() )
+ {
+ eType = pExpr->GetType();
+ if( pExpr->IsNumber() )
+ {
+ nVal = pExpr->nVal;
+ }
+ else
+ {
+ nVal = 0;
+ aVal = pExpr->aStrVal;
+ }
+ }
+ else
+ {
+ // #40204 Spezialbehandlung fuer BOOL-Konstanten
+ BOOL bIsBool = FALSE;
+ if( pExpr->eNodeType == SbxVARVAL )
+ {
+ SbiSymDef* pVarDef = pExpr->GetVar();
+
+ // Ist es eine BOOL-Konstante?
+ BOOL bBoolVal = FALSE;
+ if( pVarDef->GetName().EqualsIgnoreCaseAscii( "true" ) )
+ //if( pVarDef->GetName().ICompare( "true" ) == COMPARE_EQUAL )
+ {
+ bIsBool = TRUE;
+ bBoolVal = TRUE;
+ }
+ else if( pVarDef->GetName().EqualsIgnoreCaseAscii( "false" ) )
+ //else if( pVarDef->GetName().ICompare( "false" ) == COMPARE_EQUAL )
+ {
+ bIsBool = TRUE;
+ bBoolVal = FALSE;
+ }
+
+ // Wenn es ein BOOL ist, Node austauschen
+ if( bIsBool )
+ {
+ delete pExpr;
+ pExpr = new SbiExprNode( pParser, (bBoolVal ? SbxTRUE : SbxFALSE), SbxINTEGER );
+ eType = pExpr->GetType();
+ nVal = pExpr->nVal;
+ }
+ }
+
+ if( !bIsBool )
+ {
+ pParser->Error( SbERR_SYNTAX );
+ eType = SbxDOUBLE;
+ nVal = 0;
+ }
+ }
+}
+
+short SbiConstExpression::GetShortValue()
+{
+ if( eType == SbxSTRING )
+ {
+ SbxVariableRef refConv = new SbxVariable;
+ refConv->PutString( aVal );
+ return refConv->GetInteger();
+ }
+ else
+ {
+ double n = nVal;
+ if( n > 0 ) n += .5; else n -= .5;
+ if( n > SbxMAXINT ) n = SbxMAXINT, pParser->Error( SbERR_OUT_OF_RANGE );
+ else
+ if( n < SbxMININT ) n = SbxMININT, pParser->Error( SbERR_OUT_OF_RANGE );
+ return (short) n;
+ }
+}
+
+
+/***************************************************************************
+|*
+|* SbiExprList
+|*
+***************************************************************************/
+
+SbiExprList::SbiExprList( SbiParser* p )
+{
+ pParser = p;
+ pFirst = NULL;
+ nExpr =
+ nDim = 0;
+ bError =
+ bBracket = FALSE;
+}
+
+SbiExprList::~SbiExprList()
+{
+ SbiExpression* p = pFirst;
+ while( p )
+ {
+ SbiExpression* q = p->pNext;
+ delete p;
+ p = q;
+ }
+}
+
+// Parameter anfordern (ab 0)
+
+SbiExpression* SbiExprList::Get( short n )
+{
+ SbiExpression* p = pFirst;
+ while( n-- && p )
+ p = p->pNext;
+ return p;
+}
+
+void SbiExprList::addExpression( SbiExpression* pExpr )
+{
+ SbiExpression* p = pFirst;
+ while( p && p->pNext )
+ p = p->pNext;
+
+ p->pNext = pExpr;
+}
+
+
+/***************************************************************************
+|*
+|* SbiParameters
+|*
+***************************************************************************/
+
+// Parsender Konstruktor:
+// Die Parameterliste wird komplett geparst.
+// "Prozedurname()" ist OK.
+// Dann handelt es sich um eine Funktion ohne Parameter
+// respektive um die Angabe eines Arrays als Prozedurparameter.
+
+// #i79918/#i80532: bConst has never been set to true
+// -> reused as bStandaloneExpression
+//SbiParameters::SbiParameters( SbiParser* p, BOOL bConst, BOOL bPar) :
+SbiParameters::SbiParameters( SbiParser* p, BOOL bStandaloneExpression, BOOL bPar) :
+ SbiExprList( p )
+{
+ if( !bPar )
+ return;
+
+ SbiExpression *pExpr;
+ SbiToken eTok = pParser->Peek();
+
+ // evtl. Klammer auf weg:
+ bool bAssumeExprLParenMode = false;
+ bool bAssumeArrayMode = false;
+ if( eTok == LPAREN )
+ {
+ if( bStandaloneExpression )
+ {
+ bAssumeExprLParenMode = true;
+ }
+ else
+ {
+ bBracket = TRUE;
+ pParser->Next();
+ eTok = pParser->Peek();
+ }
+ }
+
+ // Ende-Test
+ if( ( bBracket && eTok == RPAREN ) || pParser->IsEoln( eTok ) )
+ {
+ if( eTok == RPAREN )
+ pParser->Next();
+ return;
+ }
+ // Parametertabelle einlesen und in richtiger Folge ablegen!
+ SbiExpression* pLast = NULL;
+ String aName;
+ while( !bError )
+ {
+ aName.Erase();
+ // Fehlendes Argument
+ if( eTok == COMMA )
+ {
+ pExpr = new SbiExpression( pParser, 0, SbxEMPTY );
+ //if( bConst )
+ // pParser->Error( SbERR_SYNTAX ), bError = TRUE;
+ }
+ // Benannte Argumente: entweder .name= oder name:=
+ else
+ {
+ bool bByVal = false;
+ if( eTok == BYVAL )
+ {
+ bByVal = true;
+ pParser->Next();
+ eTok = pParser->Peek();
+ }
+
+ if( bAssumeExprLParenMode )
+ {
+ pExpr = new SbiExpression( pParser, SbSTDEXPR, EXPRMODE_LPAREN_PENDING );
+ bAssumeExprLParenMode = FALSE;
+
+ SbiExprMode eModeAfter = pExpr->m_eMode;
+ if( eModeAfter == EXPRMODE_LPAREN_NOT_NEEDED )
+ {
+ bBracket = TRUE;
+ }
+ else if( eModeAfter == EXPRMODE_ARRAY_OR_OBJECT )
+ {
+ // Expression "looks" like an array assignment
+ // a(...)[(...)] = ? or a(...).b(...)
+ // RPAREN is already parsed
+ bBracket = TRUE;
+ bAssumeArrayMode = true;
+ eTok = NIL;
+ }
+ else if( eModeAfter == EXPRMODE_EMPTY_PAREN )
+ {
+ bBracket = TRUE;
+ delete pExpr;
+ if( bByVal )
+ pParser->Error( SbERR_LVALUE_EXPECTED );
+ return;
+ }
+ }
+ else
+ pExpr = new SbiExpression( pParser );
+
+ if( bByVal && pExpr->IsLvalue() )
+ pExpr->SetByVal();
+
+ //pExpr = bConst ? new SbiConstExpression( pParser )
+ // : new SbiExpression( pParser );
+ if( !bAssumeArrayMode )
+ {
+ if( pParser->Peek() == ASSIGN )
+ {
+ // VBA mode: name:=
+ // SbiExpression::Term() hat einen String daraus gemacht
+ aName = pExpr->GetString();
+ delete pExpr;
+ pParser->Next();
+ pExpr = new SbiExpression( pParser );
+ //if( bConst )
+ // pParser->Error( SbERR_SYNTAX ), bError = TRUE;
+ }
+ pExpr->GetName() = aName;
+ }
+ }
+ pExpr->pNext = NULL;
+ if( !pLast )
+ pFirst = pLast = pExpr;
+ else
+ pLast->pNext = pExpr, pLast = pExpr;
+ nExpr++;
+ bError |= !pExpr->IsValid();
+
+ if( bAssumeArrayMode )
+ break;
+
+ // Naechstes Element?
+ eTok = pParser->Peek();
+ if( eTok != COMMA )
+ {
+ if( ( bBracket && eTok == RPAREN ) || pParser->IsEoln( eTok ) )
+ break;
+ pParser->Error( bBracket
+ ? SbERR_BAD_BRACKETS
+ : SbERR_EXPECTED, COMMA );
+ bError = TRUE;
+ }
+ else
+ {
+ pParser->Next();
+ eTok = pParser->Peek();
+ if( ( bBracket && eTok == RPAREN ) || pParser->IsEoln( eTok ) )
+ break;
+ }
+ }
+ // Schliessende Klammer
+ if( eTok == RPAREN )
+ {
+ pParser->Next();
+ pParser->Peek();
+ if( !bBracket )
+ {
+ pParser->Error( SbERR_BAD_BRACKETS );
+ bError = TRUE;
+ }
+ }
+ nDim = nExpr;
+}
+
+/***************************************************************************
+|*
+|* SbiDimList
+|*
+***************************************************************************/
+
+// Parsender Konstruktor:
+// Eine Liste von Array-Dimensionen wird geparst. Die Ausdruecke werden
+// auf numerisch getestet. Das bCONST-Bit wird gesetzt, wenn alle Ausdruecke
+// Integer-Konstanten sind.
+
+SbiDimList::SbiDimList( SbiParser* p ) : SbiExprList( p )
+{
+ bConst = TRUE;
+
+ if( pParser->Next() != LPAREN )
+ {
+ pParser->Error( SbERR_EXPECTED, LPAREN );
+ bError = TRUE; return;
+ }
+
+ if( pParser->Peek() != RPAREN )
+ {
+ SbiExpression *pExpr1, *pExpr2, *pLast = NULL;
+ SbiToken eTok;
+ for( ;; )
+ {
+ pExpr1 = new SbiExpression( pParser );
+ eTok = pParser->Next();
+ if( eTok == TO )
+ {
+ pExpr2 = new SbiExpression( pParser );
+ eTok = pParser->Next();
+ bConst &= pExpr1->IsIntConstant() & pExpr2->IsIntConstant();
+ bError |= !pExpr1->IsValid();
+ bError |= !pExpr2->IsValid();
+ pExpr1->pNext = pExpr2;
+ if( !pLast )
+ pFirst = pExpr1;
+ else
+ pLast->pNext = pExpr1;
+ pLast = pExpr2;
+ nExpr += 2;
+ }
+ else
+ {
+ // Nur eine Dim-Angabe
+ pExpr1->SetBased();
+ pExpr1->pNext = NULL;
+ bConst &= pExpr1->IsIntConstant();
+ bError |= !pExpr1->IsValid();
+ if( !pLast )
+ pFirst = pLast = pExpr1;
+ else
+ pLast->pNext = pExpr1, pLast = pExpr1;
+ nExpr++;
+ }
+ nDim++;
+ if( eTok == RPAREN ) break;
+ if( eTok != COMMA )
+ {
+ pParser->Error( SbERR_BAD_BRACKETS );
+ pParser->Next();
+ break;
+ }
+ }
+ }
+ else pParser->Next();
+}
+
diff --git a/basic/source/comp/io.cxx b/basic/source/comp/io.cxx
new file mode 100644
index 000000000000..b211ea0b7b08
--- /dev/null
+++ b/basic/source/comp/io.cxx
@@ -0,0 +1,358 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+
+
+#include <tools/stream.hxx>
+#include "sbcomp.hxx"
+#include "iosys.hxx"
+
+// Test, ob ein I/O-Channel angegeben wurde
+
+BOOL SbiParser::Channel( BOOL bAlways )
+{
+ BOOL bRes = FALSE;
+ Peek();
+ if( IsHash() )
+ {
+ SbiExpression aExpr( this );
+ while( Peek() == COMMA || Peek() == SEMICOLON )
+ Next();
+ aExpr.Gen();
+ aGen.Gen( _CHANNEL );
+ bRes = TRUE;
+ }
+ else if( bAlways )
+ Error( SbERR_EXPECTED, "#" );
+ return bRes;
+}
+
+// Fuer PRINT und WRITE wird bei Objektvariablen versucht,
+// die Default-Property anzusprechen.
+
+// PRINT
+
+void SbiParser::Print()
+{
+ BOOL bChan = Channel();
+ // Die Ausdruecke zum Drucken:
+ while( !bAbort )
+ {
+ if( !IsEoln( Peek() ) )
+ {
+ SbiExpression* pExpr = new SbiExpression( this );
+ pExpr->Gen();
+ delete pExpr;
+ Peek();
+ aGen.Gen( eCurTok == COMMA ? _PRINTF : _BPRINT );
+ }
+ if( eCurTok == COMMA || eCurTok == SEMICOLON )
+ {
+ Next();
+ if( IsEoln( Peek() ) ) break;
+ }
+ else
+ {
+ aGen.Gen( _PRCHAR, '\n' );
+ break;
+ }
+ }
+ if( bChan )
+ aGen.Gen( _CHAN0 );
+}
+
+// WRITE #chan, expr, ...
+
+void SbiParser::Write()
+{
+ BOOL bChan = Channel();
+ // Die Ausdruecke zum Drucken:
+ while( !bAbort )
+ {
+ SbiExpression* pExpr = new SbiExpression( this );
+ pExpr->Gen();
+ delete pExpr;
+ aGen.Gen( _BWRITE );
+ if( Peek() == COMMA )
+ {
+ aGen.Gen( _PRCHAR, ',' );
+ Next();
+ if( IsEoln( Peek() ) ) break;
+ }
+ else
+ {
+ aGen.Gen( _PRCHAR, '\n' );
+ break;
+ }
+ }
+ if( bChan )
+ aGen.Gen( _CHAN0 );
+}
+
+
+// #i92642 Handle LINE keyword outside ::Next()
+void SbiParser::Line()
+{
+ // #i92642: Special handling to allow name as symbol
+ if( Peek() == INPUT )
+ {
+ Next();
+ LineInput();
+ }
+ else
+ {
+ aGen.Statement();
+
+ KeywordSymbolInfo aInfo;
+ aInfo.m_aKeywordSymbol = String( RTL_CONSTASCII_USTRINGPARAM( "line" ) );
+ aInfo.m_eSbxDataType = GetType();
+ aInfo.m_eTok = SYMBOL;
+
+ Symbol( &aInfo );
+ }
+}
+
+
+// LINE INPUT [prompt], var$
+
+void SbiParser::LineInput()
+{
+ Channel( TRUE );
+ // BOOL bChan = Channel( TRUE );
+ SbiExpression* pExpr = new SbiExpression( this, SbOPERAND );
+ /* AB 15.1.96: Keinen allgemeinen Ausdruck mehr zulassen
+ SbiExpression* pExpr = new SbiExpression( this );
+ if( !pExpr->IsVariable() )
+ {
+ SbiToken eTok = Peek();
+ if( eTok == COMMA || eTok == SEMICOLON ) Next();
+ else Error( SbERR_EXPECTED, COMMA );
+ // mit Prompt
+ if( !bChan )
+ {
+ pExpr->Gen();
+ aGen.Gen( _PROMPT );
+ }
+ else
+ Error( SbERR_VAR_EXPECTED );
+ delete pExpr;
+ pExpr = new SbiExpression( this, SbOPERAND );
+ }
+ */
+ if( !pExpr->IsVariable() )
+ Error( SbERR_VAR_EXPECTED );
+ if( pExpr->GetType() != SbxVARIANT && pExpr->GetType() != SbxSTRING )
+ Error( SbERR_CONVERSION );
+ pExpr->Gen();
+ aGen.Gen( _LINPUT );
+ delete pExpr;
+ aGen.Gen( _CHAN0 ); // ResetChannel() nicht mehr in StepLINPUT()
+}
+
+// INPUT
+
+void SbiParser::Input()
+{
+ aGen.Gen( _RESTART );
+ Channel( TRUE );
+ // BOOL bChan = Channel( TRUE );
+ SbiExpression* pExpr = new SbiExpression( this, SbOPERAND );
+ /* ALT: Jetzt keinen allgemeinen Ausdruck mehr zulassen
+ SbiExpression* pExpr = new SbiExpression( this );
+ ...
+ siehe LineInput
+ */
+ while( !bAbort )
+ {
+ if( !pExpr->IsVariable() )
+ Error( SbERR_VAR_EXPECTED );
+ pExpr->Gen();
+ aGen.Gen( _INPUT );
+ if( Peek() == COMMA )
+ {
+ Next();
+ delete pExpr;
+ pExpr = new SbiExpression( this, SbOPERAND );
+ }
+ else break;
+ }
+ delete pExpr;
+ aGen.Gen( _CHAN0 ); // ResetChannel() nicht mehr in StepINPUT()
+}
+
+// OPEN stringexpr FOR mode ACCCESS access mode AS Channel [Len=n]
+
+void SbiParser::Open()
+{
+ SbiExpression aFileName( this );
+ SbiToken eTok;
+ TestToken( FOR );
+ short nMode = 0;
+ short nFlags = 0;
+ switch( Next() )
+ {
+ case INPUT:
+ nMode = STREAM_READ; nFlags |= SBSTRM_INPUT; break;
+ case OUTPUT:
+ nMode = STREAM_WRITE | STREAM_TRUNC; nFlags |= SBSTRM_OUTPUT; break;
+ case APPEND:
+ nMode = STREAM_WRITE; nFlags |= SBSTRM_APPEND; break;
+ case RANDOM:
+ nMode = STREAM_READ | STREAM_WRITE; nFlags |= SBSTRM_RANDOM; break;
+ case BINARY:
+ nMode = STREAM_READ | STREAM_WRITE; nFlags |= SBSTRM_BINARY; break;
+ default:
+ Error( SbERR_SYNTAX );
+ }
+ if( Peek() == ACCESS )
+ {
+ Next();
+ eTok = Next();
+ // #27964# Nur STREAM_READ,STREAM_WRITE-Flags in nMode beeinflussen
+ nMode &= ~(STREAM_READ | STREAM_WRITE); // loeschen
+ if( eTok == READ )
+ {
+ if( Peek() == WRITE )
+ {
+ Next();
+ nMode |= (STREAM_READ | STREAM_WRITE);
+ }
+ else
+ nMode |= STREAM_READ;
+ }
+ else if( eTok == WRITE )
+ nMode |= STREAM_WRITE;
+ else
+ Error( SbERR_SYNTAX );
+ }
+ switch( Peek() )
+ {
+#ifdef SHARED
+#undef SHARED
+#define tmpSHARED
+#endif
+ case SHARED:
+ Next(); nMode |= STREAM_SHARE_DENYNONE; break;
+#ifdef tmpSHARED
+#define SHARED
+#undef tmpSHARED
+#endif
+ case LOCK:
+ Next();
+ eTok = Next();
+ if( eTok == READ )
+ {
+ if( Peek() == WRITE ) Next(), nMode |= STREAM_SHARE_DENYALL;
+ else nMode |= STREAM_SHARE_DENYREAD;
+ }
+ else if( eTok == WRITE )
+ nMode |= STREAM_SHARE_DENYWRITE;
+ else
+ Error( SbERR_SYNTAX );
+ break;
+ default: break;
+ }
+ TestToken( AS );
+ // Die Kanalnummer
+ SbiExpression* pChan = new SbiExpression( this );
+ if( !pChan )
+ Error( SbERR_SYNTAX );
+ SbiExpression* pLen = NULL;
+ if( Peek() == SYMBOL )
+ {
+ Next();
+ String aLen( aSym );
+ if( aLen.EqualsIgnoreCaseAscii( "LEN" ) )
+ {
+ TestToken( EQ );
+ pLen = new SbiExpression( this );
+ }
+ }
+ if( !pLen ) pLen = new SbiExpression( this, 128, SbxINTEGER );
+ // Der Stack fuer den OPEN-Befehl sieht wie folgt aus:
+ // Blocklaenge
+ // Kanalnummer
+ // Dateiname
+ pLen->Gen();
+ if( pChan )
+ pChan->Gen();
+ aFileName.Gen();
+ aGen.Gen( _OPEN, nMode, nFlags );
+ delete pLen;
+ delete pChan;
+}
+
+// NAME file AS file
+
+void SbiParser::Name()
+{
+ // #i92642: Special handling to allow name as symbol
+ if( Peek() == EQ )
+ {
+ aGen.Statement();
+
+ KeywordSymbolInfo aInfo;
+ aInfo.m_aKeywordSymbol = String( RTL_CONSTASCII_USTRINGPARAM( "name" ) );
+ aInfo.m_eSbxDataType = GetType();
+ aInfo.m_eTok = SYMBOL;
+
+ Symbol( &aInfo );
+ return;
+ }
+ SbiExpression aExpr1( this );
+ TestToken( AS );
+ SbiExpression aExpr2( this );
+ aExpr1.Gen();
+ aExpr2.Gen();
+ aGen.Gen( _RENAME );
+}
+
+// CLOSE [n,...]
+
+void SbiParser::Close()
+{
+ Peek();
+ if( IsEoln( eCurTok ) )
+ aGen.Gen( _CLOSE, 0 );
+ else
+ for( ;; )
+ {
+ SbiExpression aExpr( this );
+ while( Peek() == COMMA || Peek() == SEMICOLON )
+ Next();
+ aExpr.Gen();
+ aGen.Gen( _CHANNEL );
+ aGen.Gen( _CLOSE, 1 );
+
+ if( IsEoln( Peek() ) )
+ break;
+ }
+}
+
+
diff --git a/basic/source/comp/loops.cxx b/basic/source/comp/loops.cxx
new file mode 100644
index 000000000000..bd4540a8ffde
--- /dev/null
+++ b/basic/source/comp/loops.cxx
@@ -0,0 +1,558 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+
+#include "sbcomp.hxx"
+
+// Single-line IF und Multiline IF
+
+void SbiParser::If()
+{
+ UINT32 nEndLbl;
+ SbiToken eTok = NIL;
+ // Ende-Tokens ignorieren:
+ SbiExpression aCond( this );
+ aCond.Gen();
+ TestToken( THEN );
+ if( IsEoln( Next() ) )
+ {
+ // AB 13.5.1996: #27720# Am Ende jeden Blocks muss ein Jump zu ENDIF
+ // eingefuegt werden, damit bei ELSEIF nicht erneut die Bedingung
+ // ausgewertet wird. Die Tabelle nimmt alle Absprungstellen auf.
+#define JMP_TABLE_SIZE 100
+ UINT32 pnJmpToEndLbl[JMP_TABLE_SIZE]; // 100 ELSEIFs zulaessig
+ USHORT iJmp = 0; // aktueller Tabellen-Index
+
+ // multiline IF
+ nEndLbl = aGen.Gen( _JUMPF, 0 );
+ eTok = Peek();
+ while( !( eTok == ELSEIF || eTok == ELSE || eTok == ENDIF ) &&
+ !bAbort && Parse() )
+ {
+ eTok = Peek();
+ if( IsEof() )
+ {
+ Error( SbERR_BAD_BLOCK, IF ); bAbort = TRUE; return;
+ }
+ }
+ // ELSEIF?
+ while( eTok == ELSEIF )
+ {
+ // #27720# Bei erfolgreichem IF/ELSEIF auf ENDIF springen
+ if( iJmp >= JMP_TABLE_SIZE )
+ {
+ Error( SbERR_PROG_TOO_LARGE ); bAbort = TRUE; return;
+ }
+ pnJmpToEndLbl[iJmp++] = aGen.Gen( _JUMP, 0 );
+
+ Next();
+ aGen.BackChain( nEndLbl );
+
+ aGen.Statement();
+ SbiExpression* pCond = new SbiExpression( this );
+ pCond->Gen();
+ nEndLbl = aGen.Gen( _JUMPF, 0 );
+ delete pCond;
+ TestToken( THEN );
+ eTok = Peek();
+ while( !( eTok == ELSEIF || eTok == ELSE || eTok == ENDIF ) &&
+ !bAbort && Parse() )
+ {
+ eTok = Peek();
+ if( IsEof() )
+ {
+ Error( SbERR_BAD_BLOCK, ELSEIF ); bAbort = TRUE; return;
+ }
+ }
+ }
+ if( eTok == ELSE )
+ {
+ Next();
+ UINT32 nElseLbl = nEndLbl;
+ nEndLbl = aGen.Gen( _JUMP, 0 );
+ aGen.BackChain( nElseLbl );
+
+ aGen.Statement();
+ StmntBlock( ENDIF );
+ }
+ else if( eTok == ENDIF )
+ Next();
+
+ // #27720# Jmp-Tabelle abarbeiten
+ while( iJmp > 0 )
+ {
+ iJmp--;
+ aGen.BackChain( pnJmpToEndLbl[iJmp] );
+ }
+ }
+ else
+ {
+ // single line IF
+ bSingleLineIf = TRUE;
+ nEndLbl = aGen.Gen( _JUMPF, 0 );
+ Push( eCurTok );
+ while( !bAbort )
+ {
+ if( !Parse() ) break;
+ eTok = Peek();
+ if( eTok == ELSE || eTok == EOLN || eTok == REM )
+ break;
+ }
+ if( eTok == ELSE )
+ {
+ Next();
+ UINT32 nElseLbl = nEndLbl;
+ nEndLbl = aGen.Gen( _JUMP, 0 );
+ aGen.BackChain( nElseLbl );
+ while( !bAbort )
+ {
+ if( !Parse() ) break;
+ eTok = Peek();
+ if( eTok == EOLN )
+ break;
+ }
+ }
+ bSingleLineIf = FALSE;
+ }
+ aGen.BackChain( nEndLbl );
+}
+
+// ELSE/ELSEIF/ENDIF ohne IF
+
+void SbiParser::NoIf()
+{
+ Error( SbERR_NO_IF );
+ StmntBlock( ENDIF );
+}
+
+// DO WHILE...LOOP
+// DO ... LOOP WHILE
+
+void SbiParser::DoLoop()
+{
+ UINT32 nStartLbl = aGen.GetPC();
+ OpenBlock( DO );
+ SbiToken eTok = Next();
+ if( IsEoln( eTok ) )
+ {
+ // DO ... LOOP [WHILE|UNTIL expr]
+ StmntBlock( LOOP );
+ eTok = Next();
+ if( eTok == UNTIL || eTok == WHILE )
+ {
+ SbiExpression aExpr( this );
+ aExpr.Gen();
+ aGen.Gen( eTok == UNTIL ? _JUMPF : _JUMPT, nStartLbl );
+ } else
+ if (eTok == EOLN || eTok == REM)
+ aGen.Gen (_JUMP, nStartLbl);
+ else
+ Error( SbERR_EXPECTED, WHILE );
+ }
+ else
+ {
+ // DO [WHILE|UNTIL expr] ... LOOP
+ if( eTok == UNTIL || eTok == WHILE )
+ {
+ SbiExpression aCond( this );
+ aCond.Gen();
+ }
+ UINT32 nEndLbl = aGen.Gen( eTok == UNTIL ? _JUMPT : _JUMPF, 0 );
+ StmntBlock( LOOP );
+ TestEoln();
+ aGen.Gen( _JUMP, nStartLbl );
+ aGen.BackChain( nEndLbl );
+ }
+ CloseBlock();
+}
+
+// WHILE ... WEND
+
+void SbiParser::While()
+{
+ SbiExpression aCond( this );
+ UINT32 nStartLbl = aGen.GetPC();
+ aCond.Gen();
+ UINT32 nEndLbl = aGen.Gen( _JUMPF, 0 );
+ StmntBlock( WEND );
+ aGen.Gen( _JUMP, nStartLbl );
+ aGen.BackChain( nEndLbl );
+}
+
+// FOR var = expr TO expr STEP
+
+void SbiParser::For()
+{
+ bool bForEach = ( Peek() == EACH );
+ if( bForEach )
+ Next();
+ SbiExpression aLvalue( this, SbOPERAND );
+ aLvalue.Gen(); // Variable auf dem Stack
+
+ if( bForEach )
+ {
+ TestToken( _IN_ );
+ SbiExpression aCollExpr( this, SbOPERAND );
+ aCollExpr.Gen(); // Colletion var to for stack
+ TestEoln();
+ aGen.Gen( _INITFOREACH );
+ }
+ else
+ {
+ TestToken( EQ );
+ SbiExpression aStartExpr( this );
+ aStartExpr.Gen(); // Startausdruck auf dem Stack
+ TestToken( TO );
+ SbiExpression aStopExpr( this );
+ aStopExpr.Gen(); // Endausdruck auf dem Stack
+ if( Peek() == STEP )
+ {
+ Next();
+ SbiExpression aStepExpr( this );
+ aStepExpr.Gen();
+ }
+ else
+ {
+ SbiExpression aOne( this, 1, SbxINTEGER );
+ aOne.Gen();
+ }
+ TestEoln();
+ // Der Stack hat jetzt 4 Elemente: Variable, Start, Ende, Inkrement
+ // Startwert binden
+ aGen.Gen( _INITFOR );
+ }
+
+ UINT32 nLoop = aGen.GetPC();
+ // Test durchfuehren, evtl. Stack freigeben
+ UINT32 nEndTarget = aGen.Gen( _TESTFOR, 0 );
+ OpenBlock( FOR );
+ StmntBlock( NEXT );
+ aGen.Gen( _NEXT );
+ aGen.Gen( _JUMP, nLoop );
+ // Kommen Variable nach NEXT?
+ if( Peek() == SYMBOL )
+ {
+ SbiExpression aVar( this, SbOPERAND );
+ if( aVar.GetRealVar() != aLvalue.GetRealVar() )
+ Error( SbERR_EXPECTED, aLvalue.GetRealVar()->GetName() );
+ }
+ aGen.BackChain( nEndTarget );
+ CloseBlock();
+}
+
+// WITH .. END WITH
+
+void SbiParser::With()
+{
+ SbiExpression aVar( this, SbOPERAND );
+
+ // Letzten Knoten in der Objekt-Kette ueberpruefen
+ SbiExprNode *pNode = aVar.GetExprNode()->GetRealNode();
+ SbiSymDef* pDef = pNode->GetVar();
+ // Variant, AB 27.6.1997, #41090: bzw. empty -> mu Object sein
+ if( pDef->GetType() == SbxVARIANT || pDef->GetType() == SbxEMPTY )
+ pDef->SetType( SbxOBJECT );
+ else if( pDef->GetType() != SbxOBJECT )
+ Error( SbERR_NEEDS_OBJECT );
+
+ // Knoten auch auf SbxOBJECT setzen, damit spaeter Gen() klappt
+ pNode->SetType( SbxOBJECT );
+
+ OpenBlock( NIL, aVar.GetExprNode() );
+ StmntBlock( ENDWITH );
+ CloseBlock();
+}
+
+// LOOP/NEXT/WEND ohne Konstrukt
+
+void SbiParser::BadBlock()
+{
+ if( eEndTok )
+ Error( SbERR_BAD_BLOCK, eEndTok );
+ else
+ Error( SbERR_BAD_BLOCK, "Loop/Next/Wend" );
+}
+
+// On expr Goto/Gosub n,n,n...
+
+void SbiParser::OnGoto()
+{
+ SbiExpression aCond( this );
+ aCond.Gen();
+ UINT32 nLabelsTarget = aGen.Gen( _ONJUMP, 0 );
+ SbiToken eTok = Next();
+ if( eTok != GOTO && eTok != GOSUB )
+ {
+ Error( SbERR_EXPECTED, "GoTo/GoSub" );
+ eTok = GOTO;
+ }
+ // Label-Tabelle einlesen:
+ UINT32 nLbl = 0;
+ do
+ {
+ SbiToken eTok2 = NIL;
+ eTok2 = Next(); // Label holen
+ if( MayBeLabel() )
+ {
+ UINT32 nOff = pProc->GetLabels().Reference( aSym );
+ aGen.Gen( _JUMP, nOff );
+ nLbl++;
+ }
+ else Error( SbERR_LABEL_EXPECTED );
+ }
+ while( !bAbort && TestComma() );
+ if( eTok == GOSUB )
+ nLbl |= 0x8000;
+ aGen.Patch( nLabelsTarget, nLbl );
+}
+
+// GOTO/GOSUB
+
+void SbiParser::Goto()
+{
+ SbiOpcode eOp = eCurTok == GOTO ? _JUMP : _GOSUB;
+ Next();
+ if( MayBeLabel() )
+ {
+ UINT32 nOff = pProc->GetLabels().Reference( aSym );
+ aGen.Gen( eOp, nOff );
+ }
+ else Error( SbERR_LABEL_EXPECTED );
+}
+
+// RETURN [label]
+
+void SbiParser::Return()
+{
+ Next();
+ if( MayBeLabel() )
+ {
+ UINT32 nOff = pProc->GetLabels().Reference( aSym );
+ aGen.Gen( _RETURN, nOff );
+ }
+ else aGen.Gen( _RETURN, 0 );
+}
+
+// SELECT CASE
+
+void SbiParser::Select()
+{
+ TestToken( CASE );
+ SbiExpression aCase( this );
+ SbiToken eTok = NIL;
+ aCase.Gen();
+ aGen.Gen( _CASE );
+ TestEoln();
+ UINT32 nNextTarget = 0;
+ UINT32 nDoneTarget = 0;
+ BOOL bElse = FALSE;
+ // Die Cases einlesen:
+ while( !bAbort )
+ {
+ eTok = Next();
+ if( eTok == CASE )
+ {
+ if( nNextTarget )
+ aGen.BackChain( nNextTarget ), nNextTarget = 0;
+ aGen.Statement();
+ // Jeden Case einlesen
+ BOOL bDone = FALSE;
+ UINT32 nTrueTarget = 0;
+ if( Peek() == ELSE )
+ {
+ // CASE ELSE
+ Next();
+ bElse = TRUE;
+ }
+ else while( !bDone )
+ {
+ if( bElse )
+ Error( SbERR_SYNTAX );
+ SbiToken eTok2 = Peek();
+ if( eTok2 == IS || ( eTok2 >= EQ && eTok2 <= GE ) )
+ { // CASE [IS] operator expr
+ if( eTok2 == IS )
+ Next();
+ eTok2 = Peek();
+ if( eTok2 < EQ || eTok2 > GE )
+ Error( SbERR_SYNTAX );
+ else Next();
+ SbiExpression aCompare( this );
+ aCompare.Gen();
+ nTrueTarget = aGen.Gen(
+ _CASEIS, nTrueTarget,
+ sal::static_int_cast< UINT16 >(
+ SbxEQ + ( eTok2 - EQ ) ) );
+ }
+ else
+ { // CASE expr | expr TO expr
+ SbiExpression aCase1( this );
+ aCase1.Gen();
+ if( Peek() == TO )
+ {
+ // CASE a TO b
+ Next();
+ SbiExpression aCase2( this );
+ aCase2.Gen();
+ nTrueTarget = aGen.Gen( _CASETO, nTrueTarget );
+ }
+ else
+ // CASE a
+ nTrueTarget = aGen.Gen( _CASEIS, nTrueTarget, SbxEQ );
+
+ }
+ if( Peek() == COMMA ) Next();
+ else TestEoln(), bDone = TRUE;
+ }
+ // Alle Cases abgearbeitet
+ if( !bElse )
+ {
+ nNextTarget = aGen.Gen( _JUMP, nNextTarget );
+ aGen.BackChain( nTrueTarget );
+ }
+ // den Statement-Rumpf bauen
+ while( !bAbort )
+ {
+ eTok = Peek();
+ if( eTok == CASE || eTok == ENDSELECT )
+ break;
+ if( !Parse() ) goto done;
+ eTok = Peek();
+ if( eTok == CASE || eTok == ENDSELECT )
+ break;
+ }
+ if( !bElse )
+ nDoneTarget = aGen.Gen( _JUMP, nDoneTarget );
+ }
+ else if( !IsEoln( eTok ) )
+ break;
+ }
+done:
+ if( eTok != ENDSELECT )
+ Error( SbERR_EXPECTED, ENDSELECT );
+ if( nNextTarget )
+ aGen.BackChain( nNextTarget );
+ aGen.BackChain( nDoneTarget );
+ aGen.Gen( _ENDCASE );
+}
+
+// ON Error/Variable
+
+#ifdef _MSC_VER
+#pragma optimize("",off)
+#endif
+
+void SbiParser::On()
+{
+ SbiToken eTok = Peek();
+ String aString = SbiTokenizer::Symbol(eTok);
+ if (aString.EqualsIgnoreCaseAscii("ERROR"))
+ //if (!aString.ICompare("ERROR"))
+ eTok = _ERROR_; // Error kommt als SYMBOL
+ if( eTok != _ERROR_ && eTok != LOCAL ) OnGoto();
+ else
+ {
+ if( eTok == LOCAL ) Next();
+ Next (); // Kein TestToken mehr, da es sonst einen Fehler gibt
+
+ Next(); // Token nach Error holen
+ if( eCurTok == GOTO )
+ {
+ // ON ERROR GOTO label|0
+ Next();
+ bool bError_ = false;
+ if( MayBeLabel() )
+ {
+ if( eCurTok == NUMBER && !nVal )
+ aGen.Gen( _STDERROR );
+ else
+ {
+ UINT32 nOff = pProc->GetLabels().Reference( aSym );
+ aGen.Gen( _ERRHDL, nOff );
+ }
+ }
+ else if( eCurTok == MINUS )
+ {
+ Next();
+ if( eCurTok == NUMBER && nVal == 1 )
+ aGen.Gen( _STDERROR );
+ else
+ bError_ = true;
+ }
+ if( bError_ )
+ Error( SbERR_LABEL_EXPECTED );
+ }
+ else if( eCurTok == RESUME )
+ {
+ TestToken( NEXT );
+ aGen.Gen( _NOERROR );
+ }
+ else Error( SbERR_EXPECTED, "GoTo/Resume" );
+ }
+}
+
+#ifdef _MSC_VER
+#pragma optimize("",off)
+#endif
+
+// RESUME [0]|NEXT|label
+
+void SbiParser::Resume()
+{
+ UINT32 nLbl;
+
+ switch( Next() )
+ {
+ case EOS:
+ case EOLN:
+ aGen.Gen( _RESUME, 0 );
+ break;
+ case NEXT:
+ aGen.Gen( _RESUME, 1 );
+ Next();
+ break;
+ case NUMBER:
+ if( !nVal )
+ {
+ aGen.Gen( _RESUME, 0 );
+ break;
+ } // fall thru
+ case SYMBOL:
+ if( MayBeLabel() )
+ {
+ nLbl = pProc->GetLabels().Reference( aSym );
+ aGen.Gen( _RESUME, nLbl );
+ Next();
+ break;
+ } // fall thru
+ default:
+ Error( SbERR_LABEL_EXPECTED );
+ }
+}
+
diff --git a/basic/source/comp/makefile.mk b/basic/source/comp/makefile.mk
new file mode 100644
index 000000000000..d65f6a431e43
--- /dev/null
+++ b/basic/source/comp/makefile.mk
@@ -0,0 +1,60 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..$/..
+
+PRJNAME=basic
+TARGET=comp
+
+# --- Settings ------------------------------------------------------------
+
+.INCLUDE : settings.mk
+
+SLOFILES= \
+ $(SLO)$/buffer.obj \
+ $(SLO)$/codegen.obj \
+ $(SLO)$/dim.obj \
+ $(SLO)$/exprgen.obj \
+ $(SLO)$/exprnode.obj \
+ $(SLO)$/exprtree.obj \
+ $(SLO)$/io.obj \
+ $(SLO)$/loops.obj \
+ $(SLO)$/parser.obj \
+ $(SLO)$/sbcomp.obj \
+ $(SLO)$/scanner.obj \
+ $(SLO)$/symtbl.obj \
+ $(SLO)$/token.obj
+
+EXCEPTIONSFILES= \
+ $(SLO)$/codegen.obj \
+ $(SLO)$/dim.obj \
+ $(SLO)$/exprtree.obj \
+ $(SLO)$/parser.obj
+
+# --- Targets --------------------------------------------------------------
+
+.INCLUDE : target.mk
diff --git a/basic/source/comp/parser.cxx b/basic/source/comp/parser.cxx
new file mode 100644
index 000000000000..3d7178ae7688
--- /dev/null
+++ b/basic/source/comp/parser.cxx
@@ -0,0 +1,863 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+#include <basic/sbx.hxx>
+#include "sbcomp.hxx"
+#include <com/sun/star/script/ModuleType.hpp>
+
+struct SbiParseStack { // "Stack" fuer Statement-Blocks
+ SbiParseStack* pNext; // Chain
+ SbiExprNode* pWithVar; // Variable fuer WITH
+ SbiToken eExitTok; // Exit-Token
+ UINT32 nChain; // JUMP-Chain
+};
+
+struct SbiStatement {
+ SbiToken eTok;
+ void( SbiParser::*Func )(); // Verarbeitungsroutine
+ BOOL bMain; // TRUE: ausserhalb SUBs OK
+ BOOL bSubr; // TRUE: in SUBs OK
+};
+
+#define Y TRUE
+#define N FALSE
+
+static SbiStatement StmntTable [] = {
+{ CALL, &SbiParser::Call, N, Y, }, // CALL
+{ CLOSE, &SbiParser::Close, N, Y, }, // CLOSE
+{ _CONST_, &SbiParser::Dim, Y, Y, }, // CONST
+{ DECLARE, &SbiParser::Declare, Y, N, }, // DECLARE
+{ DEFBOOL, &SbiParser::DefXXX, Y, N, }, // DEFBOOL
+{ DEFCUR, &SbiParser::DefXXX, Y, N, }, // DEFCUR
+{ DEFDATE, &SbiParser::DefXXX, Y, N, }, // DEFDATE
+{ DEFDBL, &SbiParser::DefXXX, Y, N, }, // DEFDBL
+{ DEFERR, &SbiParser::DefXXX, Y, N, }, // DEFERR
+{ DEFINT, &SbiParser::DefXXX, Y, N, }, // DEFINT
+{ DEFLNG, &SbiParser::DefXXX, Y, N, }, // DEFLNG
+{ DEFOBJ, &SbiParser::DefXXX, Y, N, }, // DEFOBJ
+{ DEFSNG, &SbiParser::DefXXX, Y, N, }, // DEFSNG
+{ DEFSTR, &SbiParser::DefXXX, Y, N, }, // DEFSTR
+{ DEFVAR, &SbiParser::DefXXX, Y, N, }, // DEFVAR
+{ DIM, &SbiParser::Dim, Y, Y, }, // DIM
+{ DO, &SbiParser::DoLoop, N, Y, }, // DO
+{ ELSE, &SbiParser::NoIf, N, Y, }, // ELSE
+{ ELSEIF, &SbiParser::NoIf, N, Y, }, // ELSEIF
+{ ENDIF, &SbiParser::NoIf, N, Y, }, // ENDIF
+{ END, &SbiParser::Stop, N, Y, }, // END
+{ ENUM, &SbiParser::Enum, Y, N, }, // TYPE
+{ ERASE, &SbiParser::Erase, N, Y, }, // ERASE
+{ _ERROR_, &SbiParser::ErrorStmnt, N, Y, }, // ERROR
+{ EXIT, &SbiParser::Exit, N, Y, }, // EXIT
+{ FOR, &SbiParser::For, N, Y, }, // FOR
+{ FUNCTION, &SbiParser::SubFunc, Y, N, }, // FUNCTION
+{ GOSUB, &SbiParser::Goto, N, Y, }, // GOSUB
+{ GLOBAL, &SbiParser::Dim, Y, N, }, // GLOBAL
+{ GOTO, &SbiParser::Goto, N, Y, }, // GOTO
+{ IF, &SbiParser::If, N, Y, }, // IF
+{ IMPLEMENTS, &SbiParser::Implements, Y, N, }, // IMPLEMENTS
+{ INPUT, &SbiParser::Input, N, Y, }, // INPUT
+{ LET, &SbiParser::Assign, N, Y, }, // LET
+{ LINE, &SbiParser::Line, N, Y, }, // LINE, -> LINE INPUT (#i92642)
+{ LINEINPUT,&SbiParser::LineInput, N, Y, }, // LINE INPUT
+{ LOOP, &SbiParser::BadBlock, N, Y, }, // LOOP
+{ LSET, &SbiParser::LSet, N, Y, }, // LSET
+{ NAME, &SbiParser::Name, N, Y, }, // NAME
+{ NEXT, &SbiParser::BadBlock, N, Y, }, // NEXT
+{ ON, &SbiParser::On, N, Y, }, // ON
+{ OPEN, &SbiParser::Open, N, Y, }, // OPEN
+{ OPTION, &SbiParser::Option, Y, N, }, // OPTION
+{ PRINT, &SbiParser::Print, N, Y, }, // PRINT
+{ PRIVATE, &SbiParser::Dim, Y, N, }, // PRIVATE
+{ PROPERTY, &SbiParser::SubFunc, Y, N, }, // FUNCTION
+{ PUBLIC, &SbiParser::Dim, Y, N, }, // PUBLIC
+{ REDIM, &SbiParser::ReDim, N, Y, }, // DIM
+{ RESUME, &SbiParser::Resume, N, Y, }, // RESUME
+{ RETURN, &SbiParser::Return, N, Y, }, // RETURN
+{ RSET, &SbiParser::RSet, N, Y, }, // RSET
+{ SELECT, &SbiParser::Select, N, Y, }, // SELECT
+{ SET, &SbiParser::Set, N, Y, }, // SET
+{ STATIC, &SbiParser::Static, Y, Y, }, // STATIC
+{ STOP, &SbiParser::Stop, N, Y, }, // STOP
+{ SUB, &SbiParser::SubFunc, Y, N, }, // SUB
+{ TYPE, &SbiParser::Type, Y, N, }, // TYPE
+{ UNTIL, &SbiParser::BadBlock, N, Y, }, // UNTIL
+{ WHILE, &SbiParser::While, N, Y, }, // WHILE
+{ WEND, &SbiParser::BadBlock, N, Y, }, // WEND
+{ WITH, &SbiParser::With, N, Y, }, // WITH
+{ WRITE, &SbiParser::Write, N, Y, }, // WRITE
+
+{ NIL, NULL, N, N }
+};
+
+
+#ifdef _MSC_VER
+// 'this' : used in base member initializer list
+#pragma warning( disable: 4355 )
+#endif
+
+SbiParser::SbiParser( StarBASIC* pb, SbModule* pm )
+ : SbiTokenizer( pm->GetSource32(), pb ),
+ aGblStrings( this ),
+ aLclStrings( this ),
+ aGlobals( aGblStrings, SbGLOBAL ),
+ aPublics( aGblStrings, SbPUBLIC ),
+ aRtlSyms( aGblStrings, SbRTL ),
+ aGen( *pm, this, 1024 )
+{
+ pBasic = pb;
+ eCurExpr = SbSYMBOL;
+ eEndTok = NIL;
+ pProc = NULL;
+ pStack = NULL;
+ pWithVar = NULL;
+ nBase = 0;
+ bText =
+ bGblDefs =
+ bNewGblDefs =
+ bSingleLineIf =
+ bExplicit = FALSE;
+ bClassModule = ( pm->GetModuleType() == com::sun::star::script::ModuleType::CLASS );
+ OSL_TRACE("Parser - %s, bClassModule %d", rtl::OUStringToOString( pm->GetName(), RTL_TEXTENCODING_UTF8 ).getStr(), bClassModule );
+ pPool = &aPublics;
+ for( short i = 0; i < 26; i++ )
+ eDefTypes[ i ] = SbxVARIANT; // Kein expliziter Defaulttyp
+
+ aPublics.SetParent( &aGlobals );
+ aGlobals.SetParent( &aRtlSyms );
+
+ // Die globale Chainkette faengt bei Adresse 0 an:
+ nGblChain = aGen.Gen( _JUMP, 0 );
+
+ rTypeArray = new SbxArray; // Array fuer Benutzerdefinierte Typen
+ rEnumArray = new SbxArray; // Array for Enum types
+ bVBASupportOn = pm->IsVBACompat();
+ if ( bVBASupportOn )
+ EnableCompatibility();
+
+}
+
+
+// Ist Teil der Runtime-Library?
+SbiSymDef* SbiParser::CheckRTLForSym( const String& rSym, SbxDataType eType )
+{
+ SbxVariable* pVar = GetBasic()->GetRtl()->Find( rSym, SbxCLASS_DONTCARE );
+ SbiSymDef* pDef = NULL;
+ if( pVar )
+ {
+ if( pVar->IsA( TYPE(SbxMethod) ) )
+ {
+ SbiProcDef* pProc_ = aRtlSyms.AddProc( rSym );
+ pProc_->SetType( pVar->GetType() );
+ pDef = pProc_;
+ }
+ else
+ {
+ pDef = aRtlSyms.AddSym( rSym );
+ pDef->SetType( eType );
+ }
+ }
+ return pDef;
+}
+
+// Globale Chainkette schliessen
+
+BOOL SbiParser::HasGlobalCode()
+{
+ if( bGblDefs && nGblChain )
+ {
+ aGen.BackChain( nGblChain );
+ aGen.Gen( _LEAVE );
+ // aGen.Gen( _STOP );
+ nGblChain = 0;
+ }
+ return bGblDefs;
+}
+
+void SbiParser::OpenBlock( SbiToken eTok, SbiExprNode* pVar )
+{
+ SbiParseStack* p = new SbiParseStack;
+ p->eExitTok = eTok;
+ p->nChain = 0;
+ p->pWithVar = pWithVar;
+ p->pNext = pStack;
+ pStack = p;
+ pWithVar = pVar;
+
+ // #29955 for-Schleifen-Ebene pflegen
+ if( eTok == FOR )
+ aGen.IncForLevel();
+}
+
+void SbiParser::CloseBlock()
+{
+ if( pStack )
+ {
+ SbiParseStack* p = pStack;
+
+ // #29955 for-Schleifen-Ebene pflegen
+ if( p->eExitTok == FOR )
+ aGen.DecForLevel();
+
+ aGen.BackChain( p->nChain );
+ pStack = p->pNext;
+ pWithVar = p->pWithVar;
+ delete p;
+ }
+}
+
+// EXIT ...
+
+void SbiParser::Exit()
+{
+ SbiToken eTok = Next();
+ for( SbiParseStack* p = pStack; p; p = p->pNext )
+ {
+ SbiToken eExitTok = p->eExitTok;
+ if( eTok == eExitTok ||
+ (eTok == PROPERTY && (eExitTok == GET || eExitTok == LET) ) ) // #i109051
+ {
+ p->nChain = aGen.Gen( _JUMP, p->nChain );
+ return;
+ }
+ }
+ if( pStack )
+ Error( SbERR_EXPECTED, pStack->eExitTok );
+ else
+ Error( SbERR_BAD_EXIT );
+}
+
+BOOL SbiParser::TestSymbol( BOOL bKwdOk )
+{
+ Peek();
+ if( eCurTok == SYMBOL || ( bKwdOk && IsKwd( eCurTok ) ) )
+ {
+ Next(); return TRUE;
+ }
+ Error( SbERR_SYMBOL_EXPECTED );
+ return FALSE;
+}
+
+// Testen auf ein bestimmtes Token
+
+BOOL SbiParser::TestToken( SbiToken t )
+{
+ if( Peek() == t )
+ {
+ Next(); return TRUE;
+ }
+ else
+ {
+ Error( SbERR_EXPECTED, t );
+ return FALSE;
+ }
+}
+
+// Testen auf Komma oder EOLN
+
+BOOL SbiParser::TestComma()
+{
+ SbiToken eTok = Peek();
+ if( IsEoln( eTok ) )
+ {
+ Next();
+ return FALSE;
+ }
+ else if( eTok != COMMA )
+ {
+ Error( SbERR_EXPECTED, COMMA );
+ return FALSE;
+ }
+ Next();
+ return TRUE;
+}
+
+// Testen, ob EOLN vorliegt
+
+void SbiParser::TestEoln()
+{
+ if( !IsEoln( Next() ) )
+ {
+ Error( SbERR_EXPECTED, EOLN );
+ while( !IsEoln( Next() ) ) {}
+ }
+}
+
+// Parsing eines Statement-Blocks
+// Das Parsing laeuft bis zum Ende-Token.
+
+void SbiParser::StmntBlock( SbiToken eEnd )
+{
+ SbiToken xe = eEndTok;
+ eEndTok = eEnd;
+ while( !bAbort && Parse() ) {}
+ eEndTok = xe;
+ if( IsEof() )
+ {
+ Error( SbERR_BAD_BLOCK, eEnd );
+ bAbort = TRUE;
+ }
+}
+
+// Die Hauptroutine. Durch wiederholten Aufrufs dieser Routine wird
+// die Quelle geparst. Returnwert FALSE bei Ende/Fehlern.
+
+BOOL SbiParser::Parse()
+{
+ if( bAbort ) return FALSE;
+
+ EnableErrors();
+
+ bErrorIsSymbol = false;
+ Peek();
+ bErrorIsSymbol = true;
+ // Dateiende?
+ if( IsEof() )
+ {
+ // AB #33133: Falls keine Sub angelegt wurde, muss hier
+ // der globale Chain abgeschlossen werden!
+ // AB #40689: Durch die neue static-Behandlung kann noch
+ // ein nGblChain vorhanden sein, daher vorher abfragen
+ if( bNewGblDefs && nGblChain == 0 )
+ nGblChain = aGen.Gen( _JUMP, 0 );
+ return FALSE;
+ }
+
+ // Leerstatement?
+ if( IsEoln( eCurTok ) )
+ {
+ Next(); return TRUE;
+ }
+
+ if( !bSingleLineIf && MayBeLabel( TRUE ) )
+ {
+ // Ist ein Label
+ if( !pProc )
+ Error( SbERR_NOT_IN_MAIN, aSym );
+ else
+ pProc->GetLabels().Define( aSym );
+ Next(); Peek();
+ // Leerstatement?
+ if( IsEoln( eCurTok ) )
+ {
+ Next(); return TRUE;
+ }
+ }
+
+ // Ende des Parsings?
+ if( eCurTok == eEndTok ||
+ ( bVBASupportOn && // #i109075
+ (eCurTok == ENDFUNC || eCurTok == ENDPROPERTY || eCurTok == ENDSUB) &&
+ (eEndTok == ENDFUNC || eEndTok == ENDPROPERTY || eEndTok == ENDSUB) ) )
+ {
+ Next();
+ if( eCurTok != NIL )
+ aGen.Statement();
+ return FALSE;
+ }
+
+ // Kommentar?
+ if( eCurTok == REM )
+ {
+ Next(); return TRUE;
+ }
+
+ // Kommt ein Symbol, ist es entweder eine Variable( LET )
+ // oder eine SUB-Prozedur( CALL ohne Klammern )
+ // DOT fuer Zuweisungen im WITH-Block: .A=5
+ if( eCurTok == SYMBOL || eCurTok == DOT )
+ {
+ if( !pProc )
+ Error( SbERR_EXPECTED, SUB );
+ else
+ {
+ // Damit Zeile & Spalte stimmen...
+ Next();
+ Push( eCurTok );
+ aGen.Statement();
+ Symbol();
+ }
+ }
+ else
+ {
+ Next();
+
+ // Hier folgen nun die Statement-Parser.
+
+ SbiStatement* p;
+ for( p = StmntTable; p->eTok != NIL; p++ )
+ if( p->eTok == eCurTok )
+ break;
+ if( p->eTok != NIL )
+ {
+ if( !pProc && !p->bMain )
+ Error( SbERR_NOT_IN_MAIN, eCurTok );
+ else if( pProc && !p->bSubr )
+ Error( SbERR_NOT_IN_SUBR, eCurTok );
+ else
+ {
+ // globalen Chain pflegen
+ // AB #41606/#40689: Durch die neue static-Behandlung kann noch
+ // ein nGblChain vorhanden sein, daher vorher abfragen
+ if( bNewGblDefs && nGblChain == 0 &&
+ ( eCurTok == SUB || eCurTok == FUNCTION || eCurTok == PROPERTY ) )
+ {
+ nGblChain = aGen.Gen( _JUMP, 0 );
+ bNewGblDefs = FALSE;
+ }
+ // Statement-Opcode bitte auch am Anfang einer Sub
+ if( ( p->bSubr && (eCurTok != STATIC || Peek() == SUB || Peek() == FUNCTION ) ) ||
+ eCurTok == SUB || eCurTok == FUNCTION )
+ aGen.Statement();
+ (this->*( p->Func ) )();
+ SbxError nSbxErr = SbxBase::GetError();
+ if( nSbxErr )
+ SbxBase::ResetError(), Error( (SbError)nSbxErr );
+ }
+ }
+ else
+ Error( SbERR_UNEXPECTED, eCurTok );
+ }
+
+ // Test auf Ende des Statements:
+ // Kann auch ein ELSE sein, da vor dem ELSE kein : stehen muss!
+
+ if( !IsEos() )
+ {
+ Peek();
+ if( !IsEos() && eCurTok != ELSE )
+ {
+ // falls das Parsing abgebrochen wurde, bis zum ":" vorgehen:
+ Error( SbERR_UNEXPECTED, eCurTok );
+ while( !IsEos() ) Next();
+ }
+ }
+ // Der Parser bricht am Ende ab, das naechste Token ist noch nicht
+ // geholt!
+ return TRUE;
+}
+
+// Innerste With-Variable liefern
+SbiExprNode* SbiParser::GetWithVar()
+{
+ if( pWithVar )
+ return pWithVar;
+
+ // Sonst im Stack suchen
+ SbiParseStack* p = pStack;
+ while( p )
+ {
+ // LoopVar kann zur Zeit nur fuer with sein
+ if( p->pWithVar )
+ return p->pWithVar;
+ p = p->pNext;
+ }
+ return NULL;
+}
+
+
+// Zuweisung oder Subroutine Call
+
+void SbiParser::Symbol( const KeywordSymbolInfo* pKeywordSymbolInfo )
+{
+ SbiExprMode eMode = bVBASupportOn ? EXPRMODE_STANDALONE : EXPRMODE_STANDARD;
+ SbiExpression aVar( this, SbSYMBOL, eMode, pKeywordSymbolInfo );
+
+ bool bEQ = ( Peek() == EQ );
+ if( !bEQ && bVBASupportOn && aVar.IsBracket() )
+ Error( SbERR_EXPECTED, "=" );
+
+ RecursiveMode eRecMode = ( bEQ ? PREVENT_CALL : FORCE_CALL );
+ bool bSpecialMidHandling = false;
+ SbiSymDef* pDef = aVar.GetRealVar();
+ if( bEQ && pDef && pDef->GetScope() == SbRTL )
+ {
+ String aRtlName = pDef->GetName();
+ if( aRtlName.EqualsIgnoreCaseAscii("Mid") )
+ {
+ SbiExprNode* pExprNode = aVar.GetExprNode();
+ // SbiNodeType eNodeType;
+ if( pExprNode && pExprNode->GetNodeType() == SbxVARVAL )
+ {
+ SbiExprList* pPar = pExprNode->GetParameters();
+ short nParCount = pPar ? pPar->GetSize() : 0;
+ if( nParCount == 2 || nParCount == 3 )
+ {
+ if( nParCount == 2 )
+ pPar->addExpression( new SbiExpression( this, -1, SbxLONG ) );
+
+ TestToken( EQ );
+ pPar->addExpression( new SbiExpression( this ) );
+
+ bSpecialMidHandling = true;
+ }
+ }
+ }
+ }
+ aVar.Gen( eRecMode );
+ if( !bSpecialMidHandling )
+ {
+ if( !bEQ )
+ {
+ aGen.Gen( _GET );
+ }
+ else
+ {
+ // Dann muss es eine Zuweisung sein. Was anderes gibts nicht!
+ if( !aVar.IsLvalue() )
+ Error( SbERR_LVALUE_EXPECTED );
+ TestToken( EQ );
+ SbiExpression aExpr( this );
+ aExpr.Gen();
+ SbiOpcode eOp = _PUT;
+ // SbiSymDef* pDef = aVar.GetRealVar();
+ if( pDef )
+ {
+ if( pDef->GetConstDef() )
+ Error( SbERR_DUPLICATE_DEF, pDef->GetName() );
+ if( pDef->GetType() == SbxOBJECT )
+ {
+ eOp = _SET;
+ if( pDef->GetTypeId() )
+ {
+ aGen.Gen( _SETCLASS, pDef->GetTypeId() );
+ return;
+ }
+ }
+ }
+ aGen.Gen( eOp );
+ }
+ }
+}
+
+// Zuweisungen
+
+void SbiParser::Assign()
+{
+ SbiExpression aLvalue( this, SbLVALUE );
+ TestToken( EQ );
+ SbiExpression aExpr( this );
+ aLvalue.Gen();
+ aExpr.Gen();
+ USHORT nLen = 0;
+ SbiSymDef* pDef = aLvalue.GetRealVar();
+ {
+ if( pDef->GetConstDef() )
+ Error( SbERR_DUPLICATE_DEF, pDef->GetName() );
+ nLen = aLvalue.GetRealVar()->GetLen();
+ }
+ if( nLen )
+ aGen.Gen( _PAD, nLen );
+ aGen.Gen( _PUT );
+}
+
+// Zuweisungen einer Objektvariablen
+
+void SbiParser::Set()
+{
+ SbiExpression aLvalue( this, SbLVALUE );
+ SbxDataType eType = aLvalue.GetType();
+ if( eType != SbxOBJECT && eType != SbxEMPTY && eType != SbxVARIANT )
+ Error( SbERR_INVALID_OBJECT );
+ TestToken( EQ );
+ SbiSymDef* pDef = aLvalue.GetRealVar();
+ if( pDef && pDef->GetConstDef() )
+ Error( SbERR_DUPLICATE_DEF, pDef->GetName() );
+
+ SbiToken eTok = Peek();
+ if( eTok == NEW )
+ {
+ Next();
+ String aStr;
+ SbiSymDef* pTypeDef = new SbiSymDef( aStr );
+ TypeDecl( *pTypeDef, TRUE );
+
+ aLvalue.Gen();
+ // aGen.Gen( _CLASS, pDef->GetTypeId() | 0x8000 );
+ aGen.Gen( _CREATE, pDef->GetId(), pTypeDef->GetTypeId() );
+ aGen.Gen( _SETCLASS, pDef->GetTypeId() );
+ }
+ else
+ {
+ SbiExpression aExpr( this );
+ aLvalue.Gen();
+ aExpr.Gen();
+ // Its a good idea to distinguish between
+ // set someting = another &
+ // someting = another
+ // ( its necessary for vba objects where set is object
+ // specific and also doesn't involve processing default params )
+ if( pDef->GetTypeId() )
+ {
+ if ( bVBASupportOn )
+ aGen.Gen( _VBASETCLASS, pDef->GetTypeId() );
+ else
+ aGen.Gen( _SETCLASS, pDef->GetTypeId() );
+ }
+ else
+ {
+ if ( bVBASupportOn )
+ aGen.Gen( _VBASET );
+ else
+ aGen.Gen( _SET );
+ }
+ }
+ // aGen.Gen( _SET );
+}
+
+// JSM 07.10.95
+void SbiParser::LSet()
+{
+ SbiExpression aLvalue( this, SbLVALUE );
+ if( aLvalue.GetType() != SbxSTRING )
+ Error( SbERR_INVALID_OBJECT );
+ TestToken( EQ );
+ SbiSymDef* pDef = aLvalue.GetRealVar();
+ if( pDef && pDef->GetConstDef() )
+ Error( SbERR_DUPLICATE_DEF, pDef->GetName() );
+ SbiExpression aExpr( this );
+ aLvalue.Gen();
+ aExpr.Gen();
+ aGen.Gen( _LSET );
+}
+
+// JSM 07.10.95
+void SbiParser::RSet()
+{
+ SbiExpression aLvalue( this, SbLVALUE );
+ if( aLvalue.GetType() != SbxSTRING )
+ Error( SbERR_INVALID_OBJECT );
+ TestToken( EQ );
+ SbiSymDef* pDef = aLvalue.GetRealVar();
+ if( pDef && pDef->GetConstDef() )
+ Error( SbERR_DUPLICATE_DEF, pDef->GetName() );
+ SbiExpression aExpr( this );
+ aLvalue.Gen();
+ aExpr.Gen();
+ aGen.Gen( _RSET );
+}
+
+// DEFINT, DEFLNG, DEFSNG, DEFDBL, DEFSTR und so weiter
+
+void SbiParser::DefXXX()
+{
+ sal_Unicode ch1, ch2;
+ SbxDataType t = SbxDataType( eCurTok - DEFINT + SbxINTEGER );
+
+ while( !bAbort )
+ {
+ if( Next() != SYMBOL ) break;
+ ch1 = aSym.ToUpperAscii().GetBuffer()[0];
+ ch2 = 0;
+ if( Peek() == MINUS )
+ {
+ Next();
+ if( Next() != SYMBOL ) Error( SbERR_SYMBOL_EXPECTED );
+ else
+ {
+ ch2 = aSym.ToUpperAscii().GetBuffer()[0];
+ //ch2 = aSym.Upper();
+ if( ch2 < ch1 ) Error( SbERR_SYNTAX ), ch2 = 0;
+ }
+ }
+ if (!ch2) ch2 = ch1;
+ ch1 -= 'A'; ch2 -= 'A';
+ for (; ch1 <= ch2; ch1++) eDefTypes[ ch1 ] = t;
+ if( !TestComma() ) break;
+ }
+}
+
+// STOP/SYSTEM
+
+void SbiParser::Stop()
+{
+ aGen.Gen( _STOP );
+ Peek(); // #35694: Nur Peek(), damit EOL in Single-Line-If erkannt wird
+}
+
+// IMPLEMENTS
+
+void SbiParser::Implements()
+{
+ if( !bClassModule )
+ {
+ Error( SbERR_UNEXPECTED, IMPLEMENTS );
+ return;
+ }
+
+ Peek();
+ if( eCurTok != SYMBOL )
+ {
+ Error( SbERR_SYMBOL_EXPECTED );
+ return;
+ }
+
+ String aImplementedIface = aSym;
+ Next();
+ if( Peek() == DOT )
+ {
+ String aDotStr( '.' );
+ while( Peek() == DOT )
+ {
+ aImplementedIface += aDotStr;
+ Next();
+ SbiToken ePeekTok = Peek();
+ if( ePeekTok == SYMBOL || IsKwd( ePeekTok ) )
+ {
+ Next();
+ aImplementedIface += aSym;
+ }
+ else
+ {
+ Next();
+ Error( SbERR_SYMBOL_EXPECTED );
+ break;
+ }
+ }
+ }
+ aIfaceVector.push_back( aImplementedIface );
+}
+
+void SbiParser::EnableCompatibility()
+{
+ if( !bCompatible )
+ AddConstants();
+ bCompatible = TRUE;
+}
+
+// OPTION
+
+void SbiParser::Option()
+{
+ switch( Next() )
+ {
+ case EXPLICIT:
+ bExplicit = TRUE; break;
+ case BASE:
+ if( Next() == NUMBER )
+ {
+ if( nVal == 0 || nVal == 1 )
+ {
+ nBase = (short) nVal;
+ break;
+ }
+ }
+ Error( SbERR_EXPECTED, "0/1" );
+ break;
+ case PRIVATE:
+ {
+ String aString = SbiTokenizer::Symbol(Next());
+ if( !aString.EqualsIgnoreCaseAscii("Module") )
+ Error( SbERR_EXPECTED, "Module" );
+ break;
+ }
+ case COMPARE:
+ {
+ SbiToken eTok = Next();
+ if( eTok == BINARY )
+ bText = FALSE;
+ else if( eTok == SYMBOL && GetSym().EqualsIgnoreCaseAscii("text") )
+ bText = TRUE;
+ else
+ Error( SbERR_EXPECTED, "Text/Binary" );
+ break;
+ }
+ case COMPATIBLE:
+ EnableCompatibility();
+ break;
+
+ case CLASSMODULE:
+ bClassModule = TRUE;
+ aGen.GetModule().SetModuleType( com::sun::star::script::ModuleType::CLASS );
+ break;
+ case VBASUPPORT:
+ if( Next() == NUMBER )
+ {
+ if ( nVal == 1 || nVal == 0 )
+ {
+ bVBASupportOn = ( nVal == 1 );
+ if ( bVBASupportOn )
+ EnableCompatibility();
+ // if the module setting is different
+ // reset it to what the Option tells us
+ if ( bVBASupportOn != aGen.GetModule().IsVBACompat() )
+ aGen.GetModule().SetVBACompat( bVBASupportOn );
+ break;
+ }
+ }
+ Error( SbERR_EXPECTED, "0/1" );
+ break;
+ default:
+ Error( SbERR_BAD_OPTION, eCurTok );
+ }
+}
+
+void addStringConst( SbiSymPool& rPool, const char* pSym, const String& rStr )
+{
+ SbiConstDef* pConst = new SbiConstDef( String::CreateFromAscii( pSym ) );
+ pConst->SetType( SbxSTRING );
+ pConst->Set( rStr );
+ rPool.Add( pConst );
+}
+
+inline void addStringConst( SbiSymPool& rPool, const char* pSym, const char* pStr )
+{
+ addStringConst( rPool, pSym, String::CreateFromAscii( pStr ) );
+}
+
+void SbiParser::AddConstants( void )
+{
+ // #113063 Create constant RTL symbols
+ addStringConst( aPublics, "vbCr", "\x0D" );
+ addStringConst( aPublics, "vbCrLf", "\x0D\x0A" );
+ addStringConst( aPublics, "vbFormFeed", "\x0C" );
+ addStringConst( aPublics, "vbLf", "\x0A" );
+#if defined(UNX)
+ addStringConst( aPublics, "vbNewLine", "\x0A" );
+#else
+ addStringConst( aPublics, "vbNewLine", "\x0D\x0A" );
+#endif
+ addStringConst( aPublics, "vbNullString", "" );
+ addStringConst( aPublics, "vbTab", "\x09" );
+ addStringConst( aPublics, "vbVerticalTab", "\x0B" );
+
+ // Force length 1 and make char 0 afterwards
+ String aNullCharStr( String::CreateFromAscii( " " ) );
+ aNullCharStr.SetChar( 0, 0 );
+ addStringConst( aPublics, "vbNullChar", aNullCharStr );
+}
+
+// ERROR n
+
+void SbiParser::ErrorStmnt()
+{
+ SbiExpression aPar( this );
+ aPar.Gen();
+ aGen.Gen( _ERROR );
+}
+
diff --git a/basic/source/comp/sbcomp.cxx b/basic/source/comp/sbcomp.cxx
new file mode 100755
index 000000000000..5b7e5c70591d
--- /dev/null
+++ b/basic/source/comp/sbcomp.cxx
@@ -0,0 +1,477 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+
+#include <basic/sbx.hxx>
+#include "sbcomp.hxx"
+#include "image.hxx"
+#include "sbtrace.hxx"
+
+
+//==========================================================================
+// Tracing, for debugging only
+
+// To activate tracing enable in sbtrace.hxx
+#ifdef DBG_TRACE_BASIC
+
+#include <hash_map>
+
+// Trace Settings
+static const char* GpTraceFileName = "d:\\zBasic.Asm\\BasicTrace.txt";
+static const bool GbIncludePCodes = false;
+static const int GnIndentPerCallLevel = 4;
+static const int GnIndentForPCode = 2;
+
+struct TraceTextData
+{
+ rtl::OString m_aTraceStr_STMNT;
+ rtl::OString m_aTraceStr_PCode;
+};
+typedef std::hash_map< sal_Int32, TraceTextData > PCToTextDataMap;
+typedef std::hash_map< ::rtl::OUString, PCToTextDataMap*, ::rtl::OUStringHash, ::std::equal_to< ::rtl::OUString > > ModuleTraceMap;
+
+ModuleTraceMap GaModuleTraceMap;
+ModuleTraceMap& rModuleTraceMap = GaModuleTraceMap;
+
+static void lcl_PrepareTraceForModule( SbModule* pModule )
+{
+ String aModuleName = pModule->GetName();
+ ModuleTraceMap::iterator it = rModuleTraceMap.find( aModuleName );
+ if( it != rModuleTraceMap.end() )
+ {
+ PCToTextDataMap* pInnerMap = it->second;
+ delete pInnerMap;
+ rModuleTraceMap.erase( it );
+ }
+
+ String aDisassemblyStr;
+ pModule->Disassemble( aDisassemblyStr );
+}
+
+static void lcl_lineOut( const char* pFileName, const char* pStr, const char* pPreStr = NULL )
+{
+ const char* pPrintFirst = (pPreStr != NULL) ? pPreStr : "";
+ FILE* pFile = fopen( pFileName, "a+" );
+ if( pFile != NULL )
+ {
+ fprintf( pFile, "%s%s\n", pPrintFirst, pStr );
+ fclose( pFile );
+ }
+}
+
+const char* lcl_getSpaces( int nSpaceCount )
+{
+ static sal_Char Spaces[] = " "
+ " "
+ " ";
+ static int nAvailableSpaceCount = strlen( Spaces );
+ static sal_Char* pSpacesEnd = Spaces + nAvailableSpaceCount;
+
+ if( nSpaceCount > nAvailableSpaceCount )
+ nSpaceCount = nAvailableSpaceCount;
+
+ return pSpacesEnd - nSpaceCount;
+}
+
+static rtl::OString lcl_toOStringSkipLeadingWhites( const String& aStr )
+{
+ static sal_Char Buffer[1000];
+
+ rtl::OString aOStr = OUStringToOString( rtl::OUString( aStr ), RTL_TEXTENCODING_ASCII_US );
+ const sal_Char* pStr = aOStr.getStr();
+
+ // Skip whitespace
+ sal_Char c = *pStr;
+ while( c == ' ' || c == '\t' )
+ {
+ pStr++;
+ c = *pStr;
+ }
+
+ int nLen = strlen( pStr );
+ strncpy( Buffer, pStr, nLen );
+ Buffer[nLen] = 0;
+
+ rtl::OString aORetStr( Buffer );
+ return aORetStr;
+}
+
+String dumpMethodParameters( SbMethod* pMethod )
+{
+ String aStr;
+ if( pMethod == NULL )
+ return aStr;
+
+ SbxError eOld = SbxBase::GetError();
+
+ SbxArray* pParams = pMethod->GetParameters();
+ SbxInfo* pInfo = pMethod->GetInfo();
+ if ( pParams )
+ {
+ aStr += '(';
+ // 0 is sub itself
+ for ( USHORT nParam = 1; nParam < pParams->Count(); nParam++ )
+ {
+ SbxVariable* pVar = pParams->Get( nParam );
+ DBG_ASSERT( pVar, "Parameter?!" );
+ if ( pVar->GetName().Len() )
+ aStr += pVar->GetName();
+ else if ( pInfo )
+ {
+ const SbxParamInfo* pParam = pInfo->GetParam( nParam );
+ if ( pParam )
+ aStr += pParam->aName;
+ }
+ aStr += '=';
+ if( pVar->GetType() & SbxARRAY )
+ aStr += String( RTL_CONSTASCII_USTRINGPARAM( "..." ) );
+ else
+ aStr += pVar->GetString();
+ if ( nParam < ( pParams->Count() - 1 ) )
+ aStr += String( RTL_CONSTASCII_USTRINGPARAM( ", " ) );
+ }
+ aStr += ')';
+ }
+
+ SbxBase::ResetError();
+ if( eOld != SbxERR_OK )
+ SbxBase::SetError( eOld );
+
+ return aStr;
+}
+
+// Public functions
+void dbg_InitTrace( void )
+{
+ FILE* pFile = fopen( GpTraceFileName, "w" );
+ if( pFile != NULL )
+ fclose( pFile );
+}
+
+void dbg_traceStep( SbModule* pModule, UINT32 nPC, INT32 nCallLvl )
+{
+ SbModule* pTraceMod = pModule;
+ if( pTraceMod->ISA(SbClassModuleObject) )
+ {
+ SbClassModuleObject* pClassModuleObj = (SbClassModuleObject*)(SbxBase*)pTraceMod;
+ pTraceMod = pClassModuleObj->getClassModule();
+ }
+
+ String aModuleName = pTraceMod->GetName();
+ ModuleTraceMap::iterator it = rModuleTraceMap.find( aModuleName );
+ if( it == rModuleTraceMap.end() )
+ {
+ const char* pModuleNameStr = OUStringToOString( rtl::OUString( aModuleName ), RTL_TEXTENCODING_ASCII_US ).getStr();
+ char Buffer[200];
+ sprintf( Buffer, "TRACE ERROR: Unknown module \"%s\"", pModuleNameStr );
+ lcl_lineOut( GpTraceFileName, Buffer );
+ return;
+ }
+
+ PCToTextDataMap* pInnerMap = it->second;
+ if( pInnerMap == NULL )
+ {
+ lcl_lineOut( GpTraceFileName, "TRACE INTERNAL ERROR: No inner map" );
+ return;
+ }
+
+ PCToTextDataMap::iterator itInner = pInnerMap->find( nPC );
+ if( itInner == pInnerMap->end() )
+ {
+ const char* pModuleNameStr = OUStringToOString( rtl::OUString( aModuleName ), RTL_TEXTENCODING_ASCII_US ).getStr();
+ char Buffer[200];
+ sprintf( Buffer, "TRACE ERROR: No info for PC = %d in module \"%s\"", nPC, pModuleNameStr );
+ lcl_lineOut( GpTraceFileName, Buffer );
+ return;
+ }
+
+ //nCallLvl--;
+ //if( nCallLvl < 0 )
+ // nCallLvl = 0;
+ int nIndent = nCallLvl * GnIndentPerCallLevel;
+
+ const TraceTextData& rTraceTextData = itInner->second;
+ const rtl::OString& rStr_STMNT = rTraceTextData.m_aTraceStr_STMNT;
+ if( rStr_STMNT.getLength() )
+ lcl_lineOut( GpTraceFileName, rStr_STMNT.getStr(), lcl_getSpaces( nIndent ) );
+
+ if( !GbIncludePCodes )
+ return;
+
+ nIndent += GnIndentForPCode;
+ const rtl::OString& rStr_PCode = rTraceTextData.m_aTraceStr_PCode;
+ if( rStr_PCode.getLength() )
+ lcl_lineOut( GpTraceFileName, rStr_PCode.getStr(), lcl_getSpaces( nIndent ) );
+}
+
+void dbg_traceNotifyCall( SbModule* pModule, SbMethod* pMethod, INT32 nCallLvl, bool bLeave )
+{
+ static const char* pSeparator = "' ================================================================================";
+
+ SbModule* pTraceMod = pModule;
+ SbClassModuleObject* pClassModuleObj = NULL;
+ if( pTraceMod->ISA(SbClassModuleObject) )
+ {
+ pClassModuleObj = (SbClassModuleObject*)(SbxBase*)pTraceMod;
+ pTraceMod = pClassModuleObj->getClassModule();
+ }
+
+ if( nCallLvl > 0 )
+ nCallLvl--;
+ int nIndent = nCallLvl * GnIndentPerCallLevel;
+ if( !bLeave )
+ {
+ lcl_lineOut( GpTraceFileName, "" );
+ lcl_lineOut( GpTraceFileName, pSeparator, lcl_getSpaces( nIndent ) );
+ }
+
+ String aStr;
+ if( bLeave )
+ {
+ lcl_lineOut( GpTraceFileName, "}", lcl_getSpaces( nIndent ) );
+ aStr.AppendAscii( "' Leaving " );
+ }
+ else
+ {
+ aStr.AppendAscii( "Entering " );
+ }
+ String aModuleName = pTraceMod->GetName();
+ aStr += aModuleName;
+ if( pMethod != NULL )
+ {
+ aStr.AppendAscii( "::" );
+ String aMethodName = pMethod->GetName();
+ aStr += aMethodName;
+ }
+ else
+ {
+ aStr.AppendAscii( "/RunInit" );
+ }
+
+ if( pClassModuleObj != NULL )
+ {
+ aStr.AppendAscii( "[this=" );
+ aStr += pClassModuleObj->GetName();
+ aStr.AppendAscii( "]" );
+ }
+ if( !bLeave )
+ aStr += dumpMethodParameters( pMethod );
+
+ lcl_lineOut( GpTraceFileName, OUStringToOString( rtl::OUString( aStr ), RTL_TEXTENCODING_ASCII_US ).getStr(), lcl_getSpaces( nIndent ) );
+ if( !bLeave )
+ lcl_lineOut( GpTraceFileName, "{", lcl_getSpaces( nIndent ) );
+
+ if( bLeave )
+ lcl_lineOut( GpTraceFileName, "" );
+}
+
+void dbg_traceNotifyError( SbError nTraceErr, const String& aTraceErrMsg, bool bTraceErrHandled, INT32 nCallLvl )
+{
+ rtl::OString aOTraceErrMsg = OUStringToOString( rtl::OUString( aTraceErrMsg ), RTL_TEXTENCODING_ASCII_US );
+
+ char Buffer[200];
+ const char* pHandledStr = bTraceErrHandled ? " / HANDLED" : "";
+ sprintf( Buffer, "*** ERROR%s, Id = %d, Msg = \"%s\" ***", pHandledStr, (int)nTraceErr, aOTraceErrMsg.getStr() );
+ int nIndent = nCallLvl * GnIndentPerCallLevel;
+ lcl_lineOut( GpTraceFileName, Buffer, lcl_getSpaces( nIndent ) );
+}
+
+void dbg_RegisterTraceTextForPC( SbModule* pModule, UINT32 nPC,
+ const String& aTraceStr_STMNT, const String& aTraceStr_PCode )
+{
+ String aModuleName = pModule->GetName();
+ ModuleTraceMap::iterator it = rModuleTraceMap.find( aModuleName );
+ PCToTextDataMap* pInnerMap;
+ if( it == rModuleTraceMap.end() )
+ {
+ pInnerMap = new PCToTextDataMap();
+ rModuleTraceMap[ aModuleName ] = pInnerMap;
+ }
+ else
+ {
+ pInnerMap = it->second;
+ }
+
+ TraceTextData aData;
+
+ rtl::OString aOTraceStr_STMNT = lcl_toOStringSkipLeadingWhites( aTraceStr_STMNT );
+ aData.m_aTraceStr_STMNT = aOTraceStr_STMNT;
+
+ rtl::OString aOTraceStr_PCode = lcl_toOStringSkipLeadingWhites( aTraceStr_PCode );
+ aData.m_aTraceStr_PCode = aOTraceStr_PCode;
+
+ (*pInnerMap)[nPC] = aData;
+}
+
+#endif
+
+
+//==========================================================================
+// For debugging only
+//#define DBG_SAVE_DISASSEMBLY
+
+#ifdef DBG_SAVE_DISASSEMBLY
+static bool dbg_bDisassemble = true;
+#include <comphelper/processfactory.hxx>
+
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+#include <com/sun/star/ucb/XSimpleFileAccess3.hpp>
+#include <com/sun/star/io/XTextOutputStream.hpp>
+#include <com/sun/star/io/XActiveDataSource.hpp>
+
+using namespace comphelper;
+using namespace rtl;
+using namespace com::sun::star::uno;
+using namespace com::sun::star::lang;
+using namespace com::sun::star::ucb;
+using namespace com::sun::star::io;
+
+void dbg_SaveDisassembly( SbModule* pModule )
+{
+ bool bDisassemble = dbg_bDisassemble;
+ if( bDisassemble )
+ {
+ Reference< XSimpleFileAccess3 > xSFI;
+ Reference< XTextOutputStream > xTextOut;
+ Reference< XOutputStream > xOut;
+ Reference< XMultiServiceFactory > xSMgr = getProcessServiceFactory();
+ if( xSMgr.is() )
+ {
+ Reference< XSimpleFileAccess3 > xSFI = Reference< XSimpleFileAccess3 >( xSMgr->createInstance
+ ( OUString::createFromAscii( "com.sun.star.ucb.SimpleFileAccess" ) ), UNO_QUERY );
+ if( xSFI.is() )
+ {
+ String aFile( RTL_CONSTASCII_USTRINGPARAM("file:///d:/zBasic.Asm/Asm_") );
+ StarBASIC* pBasic = (StarBASIC*)pModule->GetParent();
+ if( pBasic )
+ {
+ aFile += pBasic->GetName();
+ aFile.AppendAscii( "_" );
+ }
+ aFile += pModule->GetName();
+ aFile.AppendAscii( ".txt" );
+
+ // String aFile( RTL_CONSTASCII_USTRINGPARAM("file:///d:/BasicAsm.txt") );
+ if( xSFI->exists( aFile ) )
+ xSFI->kill( aFile );
+ xOut = xSFI->openFileWrite( aFile );
+ Reference< XInterface > x = xSMgr->createInstance( OUString::createFromAscii( "com.sun.star.io.TextOutputStream" ) );
+ Reference< XActiveDataSource > xADS( x, UNO_QUERY );
+ xADS->setOutputStream( xOut );
+ xTextOut = Reference< XTextOutputStream >( x, UNO_QUERY );
+ }
+ }
+
+ if( xTextOut.is() )
+ {
+ String aDisassemblyStr;
+ pModule->Disassemble( aDisassemblyStr );
+ xTextOut->writeString( aDisassemblyStr );
+ }
+ xOut->closeOutput();
+ }
+}
+#endif
+
+
+// Diese Routine ist hier definiert, damit der Compiler als eigenes Segment
+// geladen werden kann.
+
+BOOL SbModule::Compile()
+{
+ if( pImage )
+ return TRUE;
+ StarBASIC* pBasic = PTR_CAST(StarBASIC,GetParent());
+ if( !pBasic )
+ return FALSE;
+ SbxBase::ResetError();
+ // Aktuelles Modul!
+ SbModule* pOld = pCMOD;
+ pCMOD = this;
+
+ SbiParser* pParser = new SbiParser( (StarBASIC*) GetParent(), this );
+ while( pParser->Parse() ) {}
+ if( !pParser->GetErrors() )
+ pParser->aGen.Save();
+ delete pParser;
+ // fuer den Disassembler
+ if( pImage )
+ pImage->aOUSource = aOUSource;
+
+ pCMOD = pOld;
+
+ // Beim Compilieren eines Moduls werden die Modul-globalen
+ // Variablen aller Module ungueltig
+ BOOL bRet = IsCompiled();
+ if( bRet )
+ {
+ pBasic->ClearAllModuleVars();
+ RemoveVars(); // remove 'this' Modules variables
+ // clear all method statics
+ for( USHORT i = 0; i < pMethods->Count(); i++ )
+ {
+ SbMethod* p = PTR_CAST(SbMethod,pMethods->Get( i ) );
+ if( p )
+ p->ClearStatics();
+ }
+
+ // #i31510 Init other libs only if Basic isn't running
+ if( pINST == NULL )
+ {
+ SbxObject* pParent_ = pBasic->GetParent();
+ if( pParent_ )
+ pBasic = PTR_CAST(StarBASIC,pParent_);
+ if( pBasic )
+ pBasic->ClearAllModuleVars();
+ }
+ }
+
+#ifdef DBG_SAVE_DISASSEMBLY
+ dbg_SaveDisassembly( this );
+#endif
+
+#ifdef DBG_TRACE_BASIC
+ lcl_PrepareTraceForModule( this );
+#endif
+
+ return bRet;
+}
+
+/**************************************************************************
+*
+* Syntax-Highlighting
+*
+**************************************************************************/
+
+void StarBASIC::Highlight( const String& rSrc, SbTextPortions& rList )
+{
+ SbiTokenizer aTok( rSrc );
+ aTok.Hilite( rList );
+}
+
diff --git a/basic/source/comp/scanner.cxx b/basic/source/comp/scanner.cxx
new file mode 100644
index 000000000000..dd68f20893f5
--- /dev/null
+++ b/basic/source/comp/scanner.cxx
@@ -0,0 +1,582 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+
+#include "sbcomp.hxx"
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+#if defined UNX
+#include <stdlib.h>
+#else
+#include <math.h> // atof()
+#endif
+#include <rtl/math.hxx>
+#include <vcl/svapp.hxx>
+#include <unotools/charclass.hxx>
+
+#include <runtime.hxx>
+
+SbiScanner::SbiScanner( const ::rtl::OUString& rBuf, StarBASIC* p ) : aBuf( rBuf )
+{
+ pBasic = p;
+ pLine = NULL;
+ nVal = 0;
+ eScanType = SbxVARIANT;
+ nErrors = 0;
+ nBufPos = 0;
+ nCurCol1 = 0;
+ nSavedCol1 = 0;
+ nColLock = 0;
+ nLine = 0;
+ nCol1 = 0;
+ nCol2 = 0;
+ nCol = 0;
+ bError =
+ bAbort =
+ bSpaces =
+ bNumber =
+ bSymbol =
+ bUsedForHilite =
+ bCompatible =
+ bVBASupportOn =
+ bPrevLineExtentsComment = FALSE;
+ bHash =
+ bErrors = TRUE;
+}
+
+SbiScanner::~SbiScanner()
+{}
+
+void SbiScanner::LockColumn()
+{
+ if( !nColLock++ )
+ nSavedCol1 = nCol1;
+}
+
+void SbiScanner::UnlockColumn()
+{
+ if( nColLock )
+ nColLock--;
+}
+
+void SbiScanner::GenError( SbError code )
+{
+ if( GetSbData()->bBlockCompilerError )
+ {
+ bAbort = TRUE;
+ return;
+ }
+ if( !bError && bErrors )
+ {
+ BOOL bRes = TRUE;
+ // Nur einen Fehler pro Statement reporten
+ bError = TRUE;
+ if( pBasic )
+ {
+ // Falls EXPECTED oder UNEXPECTED kommen sollte, bezieht es sich
+ // immer auf das letzte Token, also die Col1 uebernehmen
+ USHORT nc = nColLock ? nSavedCol1 : nCol1;
+ switch( code )
+ {
+ case SbERR_EXPECTED:
+ case SbERR_UNEXPECTED:
+ case SbERR_SYMBOL_EXPECTED:
+ case SbERR_LABEL_EXPECTED:
+ nc = nCol1;
+ if( nc > nCol2 ) nCol2 = nc;
+ break;
+ }
+ bRes = pBasic->CError( code, aError, nLine, nc, nCol2 );
+ }
+ bAbort |= !bRes |
+ ( code == SbERR_NO_MEMORY || code == SbERR_PROG_TOO_LARGE );
+ }
+ if( bErrors )
+ nErrors++;
+}
+
+// Falls sofort ein Doppelpunkt folgt, wird TRUE zurueckgeliefert.
+// Wird von SbiTokenizer::MayBeLabel() verwendet, um einen Label zu erkennen
+
+BOOL SbiScanner::DoesColonFollow()
+{
+ if( pLine && *pLine == ':' )
+ {
+ pLine++; nCol++; return TRUE;
+ }
+ else return FALSE;
+}
+
+// Testen auf ein legales Suffix
+
+static SbxDataType GetSuffixType( sal_Unicode c )
+{
+ static String aSuffixesStr = String::CreateFromAscii( "%&!#@ $" );
+ if( c )
+ {
+ sal_uInt32 n = aSuffixesStr.Search( c );
+ if( STRING_NOTFOUND != n && c != ' ' )
+ return SbxDataType( (USHORT) n + SbxINTEGER );
+ }
+ return SbxVARIANT;
+}
+
+// Einlesen des naechsten Symbols in die Variablen aSym, nVal und eType
+// Returnwert ist FALSE bei EOF oder Fehlern
+#define BUF_SIZE 80
+
+BOOL SbiScanner::NextSym()
+{
+ // Fuer den EOLN-Fall merken
+ USHORT nOldLine = nLine;
+ USHORT nOldCol1 = nCol1;
+ USHORT nOldCol2 = nCol2;
+ sal_Unicode buf[ BUF_SIZE ], *p = buf;
+ bHash = FALSE;
+
+ eScanType = SbxVARIANT;
+ aSym.Erase();
+ bSymbol =
+ bNumber = bSpaces = FALSE;
+
+ // Zeile einlesen?
+ if( !pLine )
+ {
+ INT32 n = nBufPos;
+ INT32 nLen = aBuf.getLength();
+ if( nBufPos >= nLen )
+ return FALSE;
+ const sal_Unicode* p2 = aBuf.getStr();
+ p2 += n;
+ while( ( n < nLen ) && ( *p2 != '\n' ) && ( *p2 != '\r' ) )
+ p2++, n++;
+ aLine = aBuf.copy( nBufPos, n - nBufPos );
+ if( n < nLen )
+ {
+ if( *p2 == '\r' && *( p2+1 ) == '\n' )
+ n += 2;
+ else
+ n++;
+ }
+ nBufPos = n;
+ pLine = aLine.getStr();
+ nOldLine = ++nLine;
+ nCol = nCol1 = nCol2 = nOldCol1 = nOldCol2 = 0;
+ nColLock = 0;
+ }
+
+ // Leerstellen weg:
+ while( *pLine && (( *pLine == ' ' ) || ( *pLine == '\t' ) || ( *pLine == '\f' )) )
+ pLine++, nCol++, bSpaces = TRUE;
+
+ nCol1 = nCol;
+
+ // nur Leerzeile?
+ if( !*pLine )
+ goto eoln;
+
+ if( bPrevLineExtentsComment )
+ goto PrevLineCommentLbl;
+
+ if( *pLine == '#' )
+ {
+ pLine++;
+ nCol++;
+ bHash = TRUE;
+ }
+
+ // Symbol? Dann Zeichen kopieren.
+ if( BasicSimpleCharClass::isAlpha( *pLine, bCompatible ) || *pLine == '_' )
+ {
+ // Wenn nach '_' nichts kommt, ist es ein Zeilenabschluss!
+ if( *pLine == '_' && !*(pLine+1) )
+ { pLine++;
+ goto eoln; }
+ bSymbol = TRUE;
+ short n = nCol;
+ for ( ; (BasicSimpleCharClass::isAlphaNumeric( *pLine, bCompatible ) || ( *pLine == '_' ) ); pLine++ )
+ nCol++;
+ aSym = aLine.copy( n, nCol - n );
+ // Abschliessendes '_' durch Space ersetzen, wenn Zeilenende folgt
+ // (sonst falsche Zeilenfortsetzung)
+ if( !bUsedForHilite && !*pLine && *(pLine-1) == '_' )
+ {
+ aSym.GetBufferAccess(); // #109693 force copy if necessary
+ *((sal_Unicode*)(pLine-1)) = ' '; // cast wegen const
+ }
+ // Typkennung?
+ // Das Ausrufezeichen bitte nicht testen, wenn
+ // danach noch ein Symbol anschliesst
+ else if( *pLine != '!' || !BasicSimpleCharClass::isAlpha( pLine[ 1 ], bCompatible ) )
+ {
+ SbxDataType t = GetSuffixType( *pLine );
+ if( t != SbxVARIANT )
+ {
+ eScanType = t;
+ pLine++;
+ nCol++;
+ }
+ }
+ }
+
+ // Zahl? Dann einlesen und konvertieren.
+ else if( BasicSimpleCharClass::isDigit( *pLine & 0xFF )
+ || ( *pLine == '.' && BasicSimpleCharClass::isDigit( *(pLine+1) & 0xFF ) ) )
+ {
+ short exp = 0;
+ short comma = 0;
+ short ndig = 0;
+ short ncdig = 0;
+ eScanType = SbxDOUBLE;
+ BOOL bBufOverflow = FALSE;
+ while( strchr( "0123456789.DEde", *pLine ) && *pLine )
+ {
+ // AB 4.1.1996: Buffer voll? -> leer weiter scannen
+ if( (p-buf) == (BUF_SIZE-1) )
+ {
+ bBufOverflow = TRUE;
+ pLine++, nCol++;
+ continue;
+ }
+ // Komma oder Exponent?
+ if( *pLine == '.' )
+ {
+ if( ++comma > 1 )
+ {
+ pLine++; nCol++; continue;
+ }
+ else *p++ = *pLine++, nCol++;
+ }
+ else if( strchr( "DdEe", *pLine ) )
+ {
+ if (++exp > 1)
+ {
+ pLine++; nCol++; continue;
+ }
+// if( toupper( *pLine ) == 'D' )
+// eScanType = SbxDOUBLE;
+ *p++ = 'E'; pLine++; nCol++;
+ // Vorzeichen hinter Exponent?
+ if( *pLine == '+' )
+ pLine++, nCol++;
+ else
+ if( *pLine == '-' )
+ *p++ = *pLine++, nCol++;
+ }
+ else
+ {
+ *p++ = *pLine++, nCol++;
+ if( comma && !exp ) ncdig++;
+ }
+ if (!exp) ndig++;
+ }
+ *p = 0;
+ aSym = p; bNumber = TRUE;
+ // Komma, Exponent mehrfach vorhanden?
+ if( comma > 1 || exp > 1 )
+ { aError = '.';
+ GenError( SbERR_BAD_CHAR_IN_NUMBER ); }
+
+ // #57844 Lokalisierte Funktion benutzen
+ nVal = rtl_math_uStringToDouble( buf, buf+(p-buf), '.', ',', NULL, NULL );
+ // ALT: nVal = atof( buf );
+
+ ndig = ndig - comma;
+ if( !comma && !exp )
+ {
+ if( nVal >= SbxMININT && nVal <= SbxMAXINT )
+ eScanType = SbxINTEGER;
+ else
+ if( nVal >= SbxMINLNG && nVal <= SbxMAXLNG )
+ eScanType = SbxLONG;
+ }
+ if( bBufOverflow )
+ GenError( SbERR_MATH_OVERFLOW );
+ // zu viele Zahlen fuer SINGLE?
+// if (ndig > 15 || ncdig > 6)
+// eScanType = SbxDOUBLE;
+// else
+// if( nVal > SbxMAXSNG || nVal < SbxMINSNG )
+// eScanType = SbxDOUBLE;
+
+ // Typkennung?
+ SbxDataType t = GetSuffixType( *pLine );
+ if( t != SbxVARIANT )
+ {
+ eScanType = t;
+ pLine++;
+ nCol++;
+ }
+ }
+
+ // Hex/Oktalzahl? Einlesen und konvertieren:
+ else if( *pLine == '&' )
+ {
+ pLine++; nCol++;
+ sal_Unicode cmp1[] = { '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F', 0 };
+ sal_Unicode cmp2[] = { '0', '1', '2', '3', '4', '5', '6', '7', 0 };
+ sal_Unicode *cmp = cmp1;
+ //char *cmp = "0123456789ABCDEF";
+ sal_Unicode base = 16;
+ sal_Unicode ndig = 8;
+ sal_Unicode xch = *pLine++ & 0xFF; nCol++;
+ switch( toupper( xch ) )
+ {
+ case 'O':
+ cmp = cmp2; base = 8; ndig = 11; break;
+ //cmp = "01234567"; base = 8; ndig = 11; break;
+ case 'H':
+ break;
+ default :
+ // Wird als Operator angesehen
+ pLine--; nCol--; nCol1 = nCol-1; aSym = '&'; return SYMBOL;
+ }
+ bNumber = TRUE;
+ long l = 0;
+ int i;
+ BOOL bBufOverflow = FALSE;
+ while( BasicSimpleCharClass::isAlphaNumeric( *pLine & 0xFF, bCompatible ) )
+ {
+ sal_Unicode ch = sal::static_int_cast< sal_Unicode >(
+ toupper( *pLine & 0xFF ) );
+ pLine++; nCol++;
+ // AB 4.1.1996: Buffer voll, leer weiter scannen
+ if( (p-buf) == (BUF_SIZE-1) )
+ bBufOverflow = TRUE;
+ else if( String( cmp ).Search( ch ) != STRING_NOTFOUND )
+ //else if( strchr( cmp, ch ) )
+ *p++ = ch;
+ else
+ {
+ aError = ch;
+ GenError( SbERR_BAD_CHAR_IN_NUMBER );
+ }
+ }
+ *p = 0;
+ for( p = buf; *p; p++ )
+ {
+ i = (*p & 0xFF) - '0';
+ if( i > 9 ) i -= 7;
+ l = ( l * base ) + i;
+ if( !ndig-- )
+ {
+ GenError( SbERR_MATH_OVERFLOW ); break;
+ }
+ }
+ if( *pLine == '&' ) pLine++, nCol++;
+ nVal = (double) l;
+ eScanType = ( l >= SbxMININT && l <= SbxMAXINT ) ? SbxINTEGER : SbxLONG;
+ if( bBufOverflow )
+ GenError( SbERR_MATH_OVERFLOW );
+ }
+
+ // Strings:
+ else if( *pLine == '"' || *pLine == '[' )
+ {
+ sal_Unicode cSep = *pLine;
+ if( cSep == '[' )
+ bSymbol = TRUE, cSep = ']';
+ short n = nCol+1;
+ while( *pLine )
+ {
+ do pLine++, nCol++;
+ while( *pLine && ( *pLine != cSep ) );
+ if( *pLine == cSep )
+ {
+ pLine++; nCol++;
+ if( *pLine != cSep || cSep == ']' ) break;
+ } else aError = cSep, GenError( SbERR_EXPECTED );
+ }
+ // If VBA Interop then doen't eat the [] chars
+ if ( cSep == ']' && bVBASupportOn )
+ aSym = aLine.copy( n - 1, nCol - n + 1);
+ else
+ aSym = aLine.copy( n, nCol - n - 1 );
+ // Doppelte Stringbegrenzer raus
+ String s( cSep );
+ s += cSep;
+ USHORT nIdx = 0;
+ do
+ {
+ nIdx = aSym.Search( s, nIdx );
+ if( nIdx == STRING_NOTFOUND )
+ break;
+ aSym.Erase( nIdx, 1 );
+ nIdx++;
+ }
+ while( true );
+ if( cSep != ']' )
+ eScanType = ( cSep == '#' ) ? SbxDATE : SbxSTRING;
+ }
+ // ungueltige Zeichen:
+ else if( ( *pLine & 0xFF ) >= 0x7F )
+ {
+ GenError( SbERR_SYNTAX ); pLine++; nCol++;
+ }
+ // andere Gruppen:
+ else
+ {
+ short n = 1;
+ switch( *pLine++ )
+ {
+ case '<': if( *pLine == '>' || *pLine == '=' ) n = 2; break;
+ case '>': if( *pLine == '=' ) n = 2; break;
+ case ':': if( *pLine == '=' ) n = 2; break;
+ }
+ aSym = aLine.copy( nCol, n );
+ pLine += n-1; nCol = nCol + n;
+ }
+
+ nCol2 = nCol-1;
+
+PrevLineCommentLbl:
+ // Kommentar?
+ if( bPrevLineExtentsComment || (eScanType != SbxSTRING &&
+ ( aSym.GetBuffer()[0] == '\'' || aSym.EqualsIgnoreCaseAscii( "REM" ) ) ) )
+ {
+ bPrevLineExtentsComment = FALSE;
+ aSym = String::CreateFromAscii( "REM" );
+ USHORT nLen = String( pLine ).Len();
+ if( bCompatible && pLine[ nLen - 1 ] == '_' && pLine[ nLen - 2 ] == ' ' )
+ bPrevLineExtentsComment = TRUE;
+ nCol2 = nCol2 + nLen;
+ pLine = NULL;
+ }
+ return TRUE;
+
+ // Sonst Zeilen-Ende: aber bitte auf '_' testen, ob die
+ // Zeile nicht weitergeht!
+eoln:
+ if( nCol && *--pLine == '_' )
+ {
+ pLine = NULL;
+ bool bRes = NextSym();
+ if( bVBASupportOn && aSym.GetBuffer()[0] == '.' )
+ {
+ // object _
+ // .Method
+ // ^^^ <- spaces is legal in MSO VBA
+ OSL_TRACE("*** resetting bSpaces***");
+ bSpaces = FALSE;
+ }
+ return bRes;
+ }
+ else
+ {
+ pLine = NULL;
+ nLine = nOldLine;
+ nCol1 = nOldCol1;
+ nCol2 = nOldCol2;
+ aSym = '\n';
+ nColLock = 0;
+ return TRUE;
+ }
+}
+
+LetterTable BasicSimpleCharClass::aLetterTable;
+
+LetterTable::LetterTable( void )
+{
+ for( int i = 0 ; i < 256 ; ++i )
+ IsLetterTab[i] = false;
+
+ IsLetterTab[0xC0] = true; // , CAPITAL LETTER A WITH GRAVE ACCENT
+ IsLetterTab[0xC1] = true; // , CAPITAL LETTER A WITH ACUTE ACCENT
+ IsLetterTab[0xC2] = true; // , CAPITAL LETTER A WITH CIRCUMFLEX ACCENT
+ IsLetterTab[0xC3] = true; // , CAPITAL LETTER A WITH TILDE
+ IsLetterTab[0xC4] = true; // , CAPITAL LETTER A WITH DIAERESIS
+ IsLetterTab[0xC5] = true; // , CAPITAL LETTER A WITH RING ABOVE
+ IsLetterTab[0xC6] = true; // , CAPITAL LIGATURE AE
+ IsLetterTab[0xC7] = true; // , CAPITAL LETTER C WITH CEDILLA
+ IsLetterTab[0xC8] = true; // , CAPITAL LETTER E WITH GRAVE ACCENT
+ IsLetterTab[0xC9] = true; // , CAPITAL LETTER E WITH ACUTE ACCENT
+ IsLetterTab[0xCA] = true; // , CAPITAL LETTER E WITH CIRCUMFLEX ACCENT
+ IsLetterTab[0xCB] = true; // , CAPITAL LETTER E WITH DIAERESIS
+ IsLetterTab[0xCC] = true; // , CAPITAL LETTER I WITH GRAVE ACCENT
+ IsLetterTab[0xCD] = true; // , CAPITAL LETTER I WITH ACUTE ACCENT
+ IsLetterTab[0xCE] = true; // , CAPITAL LETTER I WITH CIRCUMFLEX ACCENT
+ IsLetterTab[0xCF] = true; // , CAPITAL LETTER I WITH DIAERESIS
+ IsLetterTab[0xD0] = true; // , CAPITAL LETTER ETH
+ IsLetterTab[0xD1] = true; // , CAPITAL LETTER N WITH TILDE
+ IsLetterTab[0xD2] = true; // , CAPITAL LETTER O WITH GRAVE ACCENT
+ IsLetterTab[0xD3] = true; // , CAPITAL LETTER O WITH ACUTE ACCENT
+ IsLetterTab[0xD4] = true; // , CAPITAL LETTER O WITH CIRCUMFLEX ACCENT
+ IsLetterTab[0xD5] = true; // , CAPITAL LETTER O WITH TILDE
+ IsLetterTab[0xD6] = true; // , CAPITAL LETTER O WITH DIAERESIS
+ IsLetterTab[0xD8] = true; // , CAPITAL LETTER O WITH STROKE
+ IsLetterTab[0xD9] = true; // , CAPITAL LETTER U WITH GRAVE ACCENT
+ IsLetterTab[0xDA] = true; // , CAPITAL LETTER U WITH ACUTE ACCENT
+ IsLetterTab[0xDB] = true; // , CAPITAL LETTER U WITH CIRCUMFLEX ACCENT
+ IsLetterTab[0xDC] = true; // , CAPITAL LETTER U WITH DIAERESIS
+ IsLetterTab[0xDD] = true; // , CAPITAL LETTER Y WITH ACUTE ACCENT
+ IsLetterTab[0xDE] = true; // , CAPITAL LETTER THORN
+ IsLetterTab[0xDF] = true; // , SMALL LETTER SHARP S
+ IsLetterTab[0xE0] = true; // , SMALL LETTER A WITH GRAVE ACCENT
+ IsLetterTab[0xE1] = true; // , SMALL LETTER A WITH ACUTE ACCENT
+ IsLetterTab[0xE2] = true; // , SMALL LETTER A WITH CIRCUMFLEX ACCENT
+ IsLetterTab[0xE3] = true; // , SMALL LETTER A WITH TILDE
+ IsLetterTab[0xE4] = true; // , SMALL LETTER A WITH DIAERESIS
+ IsLetterTab[0xE5] = true; // , SMALL LETTER A WITH RING ABOVE
+ IsLetterTab[0xE6] = true; // , SMALL LIGATURE AE
+ IsLetterTab[0xE7] = true; // , SMALL LETTER C WITH CEDILLA
+ IsLetterTab[0xE8] = true; // , SMALL LETTER E WITH GRAVE ACCENT
+ IsLetterTab[0xE9] = true; // , SMALL LETTER E WITH ACUTE ACCENT
+ IsLetterTab[0xEA] = true; // , SMALL LETTER E WITH CIRCUMFLEX ACCENT
+ IsLetterTab[0xEB] = true; // , SMALL LETTER E WITH DIAERESIS
+ IsLetterTab[0xEC] = true; // , SMALL LETTER I WITH GRAVE ACCENT
+ IsLetterTab[0xED] = true; // , SMALL LETTER I WITH ACUTE ACCENT
+ IsLetterTab[0xEE] = true; // , SMALL LETTER I WITH CIRCUMFLEX ACCENT
+ IsLetterTab[0xEF] = true; // , SMALL LETTER I WITH DIAERESIS
+ IsLetterTab[0xF0] = true; // , SMALL LETTER ETH
+ IsLetterTab[0xF1] = true; // , SMALL LETTER N WITH TILDE
+ IsLetterTab[0xF2] = true; // , SMALL LETTER O WITH GRAVE ACCENT
+ IsLetterTab[0xF3] = true; // , SMALL LETTER O WITH ACUTE ACCENT
+ IsLetterTab[0xF4] = true; // , SMALL LETTER O WITH CIRCUMFLEX ACCENT
+ IsLetterTab[0xF5] = true; // , SMALL LETTER O WITH TILDE
+ IsLetterTab[0xF6] = true; // , SMALL LETTER O WITH DIAERESIS
+ IsLetterTab[0xF8] = true; // , SMALL LETTER O WITH OBLIQUE BAR
+ IsLetterTab[0xF9] = true; // , SMALL LETTER U WITH GRAVE ACCENT
+ IsLetterTab[0xFA] = true; // , SMALL LETTER U WITH ACUTE ACCENT
+ IsLetterTab[0xFB] = true; // , SMALL LETTER U WITH CIRCUMFLEX ACCENT
+ IsLetterTab[0xFC] = true; // , SMALL LETTER U WITH DIAERESIS
+ IsLetterTab[0xFD] = true; // , SMALL LETTER Y WITH ACUTE ACCENT
+ IsLetterTab[0xFE] = true; // , SMALL LETTER THORN
+ IsLetterTab[0xFF] = true; // , SMALL LETTER Y WITH DIAERESIS
+}
+
+bool LetterTable::isLetterUnicode( sal_Unicode c )
+{
+ static CharClass* pCharClass = NULL;
+ if( pCharClass == NULL )
+ pCharClass = new CharClass( Application::GetSettings().GetLocale() );
+ String aStr( c );
+ bool bRet = pCharClass->isLetter( aStr, 0 );
+ return bRet;
+}
diff --git a/basic/source/comp/symtbl.cxx b/basic/source/comp/symtbl.cxx
new file mode 100644
index 000000000000..d6b3dbb878fc
--- /dev/null
+++ b/basic/source/comp/symtbl.cxx
@@ -0,0 +1,536 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+
+#include "sbcomp.hxx"
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+
+SV_IMPL_PTRARR(SbiStrings,String*)
+SV_IMPL_PTRARR(SbiSymbols,SbiSymDef*)
+
+// Alle Symbolnamen werden im Stringpool des Symbol-Pools abgelegt, damit
+// alle Symbole im gleichen Case verarbeitet werden. Beim Speichern des
+// Code-Images wird der globale Stringpool mit den entsprechenden Sympools
+// gespeichert. Der lokale Stringpool nimmt alle Symbole auf, die nicht
+// ins Image wandern (Labels, Konstantennamen etc).
+
+/***************************************************************************
+|*
+|* SbiStringPool
+|*
+***************************************************************************/
+
+SbiStringPool::SbiStringPool( SbiParser* p )
+{
+ pParser = p;
+}
+
+SbiStringPool::~SbiStringPool()
+{}
+
+// Suchen
+
+const String& SbiStringPool::Find( USHORT n ) const
+{
+ if( !n || n > aData.Count() )
+ return aEmpty;
+ else
+ return *aData.GetObject( n-1 );
+}
+
+// Hinzufuegen eines Strings. Der String wird Case-Insensitiv
+// verglichen.
+
+short SbiStringPool::Add( const String& rVal, BOOL bNoCase )
+{
+ USHORT n = aData.Count();
+ for( USHORT i = 0; i < n; i++ )
+ {
+ String* p = aData.GetObject( i );
+ if( ( bNoCase && p->Equals( rVal ) )
+ || ( !bNoCase && p->EqualsIgnoreCaseAscii( rVal ) ) )
+ return i+1;
+ }
+ const String* pNew = new String( rVal );
+ aData.Insert( pNew, n++ );
+ return (short) n;
+}
+
+short SbiStringPool::Add( double n, SbxDataType t )
+{
+ char buf[ 40 ];
+ switch( t )
+ {
+ case SbxINTEGER: snprintf( buf, sizeof(buf), "%d", (short) n ); break;
+ case SbxLONG: snprintf( buf, sizeof(buf), "%ld", (long) n ); break;
+ case SbxSINGLE: snprintf( buf, sizeof(buf), "%.6g", (float) n ); break;
+ case SbxDOUBLE: snprintf( buf, sizeof(buf), "%.16g", n ); break;
+ default: break;
+ }
+ return Add( String::CreateFromAscii( buf ) );
+}
+
+/***************************************************************************
+|*
+|* SbiSymPool
+|*
+***************************************************************************/
+
+SbiSymPool::SbiSymPool( SbiStringPool& r, SbiSymScope s ) : rStrings( r )
+{
+ pParser = r.GetParser();
+ eScope = s;
+ pParent = NULL;
+ nCur =
+ nProcId = 0;
+}
+
+SbiSymPool::~SbiSymPool()
+{}
+
+// Inhalt loeschen
+
+void SbiSymPool::Clear()
+{
+ aData.DeleteAndDestroy( 0, aData.Count() );
+}
+
+SbiSymDef* SbiSymPool::First()
+{
+ nCur = (USHORT) -1;
+ return Next();
+}
+
+SbiSymDef* SbiSymPool::Next()
+{
+ if( ++nCur >= aData.Count() )
+ return NULL;
+ else
+ return aData.GetObject( nCur );
+}
+
+// Hinzufuegen eines Symbols
+
+SbiSymDef* SbiSymPool::AddSym( const String& rName )
+{
+ SbiSymDef* p = new SbiSymDef( rName );
+ p->nPos = aData.Count();
+ p->nId = rStrings.Add( rName );
+ p->nProcId = nProcId;
+ p->pIn = this;
+ const SbiSymDef* q = p;
+ aData.Insert( q, q->nPos );
+ return p;
+}
+
+SbiProcDef* SbiSymPool::AddProc( const String& rName )
+{
+ SbiProcDef* p = new SbiProcDef( pParser, rName );
+ p->nPos = aData.Count();
+ p->nId = rStrings.Add( rName );
+ // Procs sind immer global
+ p->nProcId = 0;
+ p->pIn = this;
+ const SbiSymDef* q = p;
+ aData.Insert( q, q->nPos );
+ return p;
+}
+
+// Hinzufuegen einer extern aufgebauten Symboldefinition
+
+void SbiSymPool::Add( SbiSymDef* pDef )
+{
+ if( pDef && pDef->pIn != this )
+ {
+ if( pDef->pIn )
+ {
+#ifdef DBG_UTIL
+ // schon in einem anderen Pool drin!
+ pParser->Error( SbERR_INTERNAL_ERROR, "Dbl Pool" );
+#endif
+ return;
+ }
+
+ pDef->nPos = aData.Count();
+ if( !pDef->nId )
+ {
+ // Bei statischen Variablen muss ein eindeutiger Name
+ // im Stringpool erzeugt werden (Form ProcName:VarName)
+ String aName( pDef->aName );
+ if( pDef->IsStatic() )
+ {
+ aName = pParser->aGblStrings.Find( nProcId );
+ aName += ':';
+ aName += pDef->aName;
+ }
+ pDef->nId = rStrings.Add( aName );
+ }
+ // Procs sind immer global
+ if( !pDef->GetProcDef() )
+ pDef->nProcId = nProcId;
+ pDef->pIn = this;
+ const SbiSymDef* q = pDef;
+ aData.Insert( q, q->nPos );
+ }
+}
+
+// Suchen eines Eintrags ueber den Namen. Es wird auch im Parent gesucht.
+
+SbiSymDef* SbiSymPool::Find( const String& rName ) const
+{
+ for( USHORT i = 0; i < aData.Count(); i++ )
+ {
+ SbiSymDef* p = aData.GetObject( i );
+ if( ( !p->nProcId || ( p->nProcId == nProcId ) )
+ && ( p->aName.EqualsIgnoreCaseAscii( rName ) ) )
+ return p;
+ }
+ if( pParent )
+ return pParent->Find( rName );
+ else
+ return NULL;
+}
+
+// Suchen ueber ID-Nummer
+
+SbiSymDef* SbiSymPool::FindId( USHORT n ) const
+{
+ for( USHORT i = 0; i < aData.Count(); i++ )
+ {
+ SbiSymDef* p = aData.GetObject( i );
+ if( p->nId == n && ( !p->nProcId || ( p->nProcId == nProcId ) ) )
+ return p;
+ }
+ if( pParent )
+ return pParent->FindId( n );
+ else
+ return NULL;
+}
+
+// Suchen ueber Position (ab 0)
+
+SbiSymDef* SbiSymPool::Get( USHORT n ) const
+{
+ if( n >= aData.Count() )
+ return NULL;
+ else
+ return aData.GetObject( n );
+}
+
+UINT32 SbiSymPool::Define( const String& rName )
+{
+ SbiSymDef* p = Find( rName );
+ if( p )
+ { if( p->IsDefined() )
+ pParser->Error( SbERR_LABEL_DEFINED, rName );
+ }
+ else
+ p = AddSym( rName );
+ return p->Define();
+}
+
+UINT32 SbiSymPool::Reference( const String& rName )
+{
+ SbiSymDef* p = Find( rName );
+ if( !p )
+ p = AddSym( rName );
+ //Sicherheitshalber
+ pParser->aGen.GenStmnt();
+ return p->Reference();
+}
+
+// Alle offenen Referenzen anmaulen
+
+void SbiSymPool::CheckRefs()
+{
+ for( USHORT i = 0; i < aData.Count(); i++ )
+ {
+ SbiSymDef* p = aData.GetObject( i );
+ if( !p->IsDefined() )
+ pParser->Error( SbERR_UNDEF_LABEL, p->GetName() );
+ }
+}
+
+/***************************************************************************
+|*
+|* Symbol-Definitionen
+|*
+***************************************************************************/
+
+SbiSymDef::SbiSymDef( const String& rName ) : aName( rName )
+{
+ eType = SbxEMPTY;
+ nDims = 0;
+ nTypeId = 0;
+ nProcId = 0;
+ nId = 0;
+ nPos = 0;
+ nLen = 0;
+ nChain = 0;
+ bAs =
+ bNew =
+ bStatic =
+ bOpt =
+ bParamArray =
+ bWithEvents =
+ bByVal =
+ bChained =
+ bGlobal = FALSE;
+ pIn =
+ pPool = NULL;
+ nDefaultId = 0;
+ nFixedStringLength = -1;
+}
+
+SbiSymDef::~SbiSymDef()
+{
+ delete pPool;
+}
+
+SbiProcDef* SbiSymDef::GetProcDef()
+{
+ return NULL;
+}
+
+SbiConstDef* SbiSymDef::GetConstDef()
+{
+ return NULL;
+}
+
+// Wenn der Name benoetigt wird, den aktuellen Namen
+// aus dem Stringpool nehmen
+
+const String& SbiSymDef::GetName()
+{
+ if( pIn )
+ aName = pIn->rStrings.Find( nId );
+ return aName;
+}
+
+// Eintragen eines Datentyps
+
+void SbiSymDef::SetType( SbxDataType t )
+{
+ if( t == SbxVARIANT && pIn )
+ {
+ sal_Unicode cu = aName.GetBuffer()[0];
+ if( cu < 256 )
+ {
+ char ch = (char)aName.GetBuffer()[0];
+ if( ch == '_' ) ch = 'Z';
+ int ch2 = toupper( ch );
+ unsigned char c = (unsigned char)ch2;
+ if( c > 0 && c < 128 )
+ t = pIn->pParser->eDefTypes[ ch2 - 'A' ];
+ }
+ }
+ eType = t;
+}
+
+// Aufbau einer Backchain, falls noch nicht definiert
+// Es wird der Wert zurueckgeliefert, der als Operand gespeichert
+// werden soll.
+
+UINT32 SbiSymDef::Reference()
+{
+ if( !bChained )
+ {
+ UINT32 n = nChain;
+ nChain = pIn->pParser->aGen.GetOffset();
+ return n;
+ }
+ else return nChain;
+}
+
+// Definition eines Symbols.
+// Hier wird der Backchain aufgeloest, falls vorhanden
+
+UINT32 SbiSymDef::Define()
+{
+ UINT32 n = pIn->pParser->aGen.GetPC();
+ pIn->pParser->aGen.GenStmnt();
+ if( nChain ) pIn->pParser->aGen.BackChain( nChain );
+ nChain = n;
+ bChained = TRUE;
+ return nChain;
+}
+
+// Eine Symboldefinition kann einen eigenen Pool haben. Dies ist
+// der Fall bei Objekten und Prozeduren (lokale Variable)
+
+SbiSymPool& SbiSymDef::GetPool()
+{
+ if( !pPool )
+ pPool = new SbiSymPool( pIn->pParser->aGblStrings, SbLOCAL ); // wird gedumpt
+ return *pPool;
+}
+
+SbiSymScope SbiSymDef::GetScope() const
+{
+ return pIn ? pIn->GetScope() : SbLOCAL;
+}
+
+////////////////////////////////////////////////////////////////////////////
+
+// Die Prozedur-Definition hat drei Pools:
+// 1) aParams: wird durch die Definition gefuellt. Enthaelt die Namen
+// der Parameter, wie sie innerhalb des Rumpfes verwendet werden.
+// Das erste Element ist der Returnwert.
+// 2) pPool: saemtliche lokale Variable
+// 3) aLabels: Labels
+
+SbiProcDef::SbiProcDef( SbiParser* pParser, const String& rName,
+ BOOL bProcDecl )
+ : SbiSymDef( rName )
+ , aParams( pParser->aGblStrings, SbPARAM ) // wird gedumpt
+ , aLabels( pParser->aLclStrings, SbLOCAL ) // wird nicht gedumpt
+ , mbProcDecl( bProcDecl )
+{
+ aParams.SetParent( &pParser->aPublics );
+ pPool = new SbiSymPool( pParser->aGblStrings, SbLOCAL ); // Locals
+ pPool->SetParent( &aParams );
+ nLine1 =
+ nLine2 = 0;
+ mePropMode = PROPERTY_MODE_NONE;
+ bPublic = TRUE;
+ bCdecl = FALSE;
+ bStatic = FALSE;
+ // Fuer Returnwerte ist das erste Element der Parameterliste
+ // immer mit dem Namen und dem Typ der Proc definiert
+ aParams.AddSym( aName );
+}
+
+SbiProcDef::~SbiProcDef()
+{}
+
+SbiProcDef* SbiProcDef::GetProcDef()
+{
+ return this;
+}
+
+void SbiProcDef::SetType( SbxDataType t )
+{
+ SbiSymDef::SetType( t );
+ aParams.Get( 0 )->SetType( eType );
+}
+
+// Match mit einer Forward-Deklaration
+// Falls der Match OK ist, wird pOld durch this im Pool ersetzt
+// pOld wird immer geloescht!
+
+void SbiProcDef::Match( SbiProcDef* pOld )
+{
+ SbiSymDef* po, *pn=NULL;
+ // Parameter 0 ist der Funktionsname
+ USHORT i;
+ for( i = 1; i < aParams.GetSize(); i++ )
+ {
+ po = pOld->aParams.Get( i );
+ pn = aParams.Get( i );
+ // Kein Typabgleich; das wird beim Laufen erledigt
+ // aber ist sie evtl. mit zu wenigen Parametern aufgerufen
+ // worden?
+ if( !po && !pn->IsOptional() && !pn->IsParamArray() )
+ break;
+ po = pOld->aParams.Next();
+ }
+ // Wurden zu viele Parameter angegeben?
+ if( pn && i < aParams.GetSize() && pOld->pIn )
+ {
+ // Die ganze Zeile markieren
+ pOld->pIn->GetParser()->SetCol1( 0 );
+ pOld->pIn->GetParser()->Error( SbERR_BAD_DECLARATION, aName );
+ }
+ if( !pIn && pOld->pIn )
+ {
+ // Alten Eintrag durch neuen ersetzen
+ SbiSymDef** pData = (SbiSymDef**) pOld->pIn->aData.GetData();
+ pData[ pOld->nPos ] = this;
+ nPos = pOld->nPos;
+ nId = pOld->nId;
+ pIn = pOld->pIn;
+ }
+ delete pOld;
+}
+
+void SbiProcDef::setPropertyMode( PropertyMode ePropMode )
+{
+ mePropMode = ePropMode;
+ if( mePropMode != PROPERTY_MODE_NONE )
+ {
+ // Prop name = original scanned procedure name
+ maPropName = aName;
+
+ // CompleteProcName includes "Property xxx "
+ // to avoid conflicts with other symbols
+ String aCompleteProcName;
+ aCompleteProcName.AppendAscii( "Property " );
+ switch( mePropMode )
+ {
+ case PROPERTY_MODE_GET: aCompleteProcName.AppendAscii( "Get " ); break;
+ case PROPERTY_MODE_LET: aCompleteProcName.AppendAscii( "Let " ); break;
+ case PROPERTY_MODE_SET: aCompleteProcName.AppendAscii( "Set " ); break;
+ case PROPERTY_MODE_NONE:
+ DBG_ERROR( "Illegal PropertyMode PROPERTY_MODE_NONE" );
+ break;
+ }
+ aCompleteProcName += aName;
+ aName = aCompleteProcName;
+ }
+}
+
+
+//////////////////////////////////////////////////////////////////////////
+
+SbiConstDef::SbiConstDef( const String& rName )
+ : SbiSymDef( rName )
+{
+ nVal = 0; eType = SbxINTEGER;
+}
+
+void SbiConstDef::Set( double n, SbxDataType t )
+{
+ aVal.Erase(); nVal = n; eType = t;
+}
+
+void SbiConstDef::Set( const String& n )
+{
+ aVal = n; nVal = 0; eType = SbxSTRING;
+}
+
+SbiConstDef::~SbiConstDef()
+{}
+
+SbiConstDef* SbiConstDef::GetConstDef()
+{
+ return this;
+}
+
diff --git a/basic/source/comp/token.cxx b/basic/source/comp/token.cxx
new file mode 100644
index 000000000000..8cb3126f03f1
--- /dev/null
+++ b/basic/source/comp/token.cxx
@@ -0,0 +1,714 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+
+#include <ctype.h>
+#include "sbcomp.hxx"
+
+struct TokenTable { SbiToken t; const char *s; };
+
+static short nToken; // Anzahl der Tokens
+
+static TokenTable* pTokTable;
+
+static TokenTable aTokTable_Basic [] = { // Token-Tabelle:
+
+ { CAT, "&" },
+ { MUL, "*" },
+ { PLUS, "+" },
+ { MINUS, "-" },
+ { DIV, "/" },
+ { EOS, ":" },
+ { ASSIGN, ":=" },
+ { LT, "<" },
+ { LE, "<=" },
+ { NE, "<>" },
+ { EQ, "=" },
+ { GT, ">" },
+ { GE, ">=" },
+ { ACCESS, "Access" },
+ { ALIAS, "Alias" },
+ { AND, "And" },
+ { ANY, "Any" },
+ { APPEND, "Append" },
+ { AS, "As" },
+ { BASE, "Base" },
+ { BINARY, "Binary" },
+ { TBOOLEAN, "Boolean" },
+ { BYREF, "ByRef", },
+ { TBYTE, "Byte", },
+ { BYVAL, "ByVal", },
+ { CALL, "Call" },
+ { CASE, "Case" },
+ { _CDECL_, "Cdecl" },
+ { CLASSMODULE, "ClassModule" },
+ { CLOSE, "Close" },
+ { COMPARE, "Compare" },
+ { COMPATIBLE,"Compatible" },
+ { _CONST_, "Const" },
+ { TCURRENCY,"Currency" },
+ { TDATE, "Date" },
+ { DECLARE, "Declare" },
+ { DEFBOOL, "DefBool" },
+ { DEFCUR, "DefCur" },
+ { DEFDATE, "DefDate" },
+ { DEFDBL, "DefDbl" },
+ { DEFERR, "DefErr" },
+ { DEFINT, "DefInt" },
+ { DEFLNG, "DefLng" },
+ { DEFOBJ, "DefObj" },
+ { DEFSNG, "DefSng" },
+ { DEFSTR, "DefStr" },
+ { DEFVAR, "DefVar" },
+ { DIM, "Dim" },
+ { DO, "Do" },
+ { TDOUBLE, "Double" },
+ { EACH, "Each" },
+ { ELSE, "Else" },
+ { ELSEIF, "ElseIf" },
+ { END, "End" },
+ { ENDENUM, "End Enum" },
+ { ENDFUNC, "End Function" },
+ { ENDIF, "End If" },
+ { ENDPROPERTY, "End Property" },
+ { ENDSELECT,"End Select" },
+ { ENDSUB, "End Sub" },
+ { ENDTYPE, "End Type" },
+ { ENDIF, "EndIf" },
+ { ENUM, "Enum" },
+ { EQV, "Eqv" },
+ { ERASE, "Erase" },
+ { _ERROR_, "Error" },
+ { EXIT, "Exit" },
+ { EXPLICIT, "Explicit" },
+ { FOR, "For" },
+ { FUNCTION, "Function" },
+ { GET, "Get" },
+ { GLOBAL, "Global" },
+ { GOSUB, "GoSub" },
+ { GOTO, "GoTo" },
+ { IF, "If" },
+ { IMP, "Imp" },
+ { IMPLEMENTS, "Implements" },
+ { _IN_, "In" },
+ { INPUT, "Input" }, // auch INPUT #
+ { TINTEGER, "Integer" },
+ { IS, "Is" },
+ { LET, "Let" },
+ { LIB, "Lib" },
+ { LIKE, "Like" },
+ { LINE, "Line" },
+ { LINEINPUT,"Line Input" },
+ { LOCAL, "Local" },
+ { LOCK, "Lock" },
+ { TLONG, "Long" },
+ { LOOP, "Loop" },
+ { LPRINT, "LPrint" },
+ { LSET, "LSet" }, // JSM
+ { MOD, "Mod" },
+ { NAME, "Name" },
+ { NEW, "New" },
+ { NEXT, "Next" },
+ { NOT, "Not" },
+ { TOBJECT, "Object" },
+ { ON, "On" },
+ { OPEN, "Open" },
+ { OPTION, "Option" },
+ { _OPTIONAL_, "Optional" },
+ { OR, "Or" },
+ { OUTPUT, "Output" },
+ { PARAMARRAY, "ParamArray" },
+ { PRESERVE, "Preserve" },
+ { PRINT, "Print" },
+ { PRIVATE, "Private" },
+ { PROPERTY, "Property" },
+ { PUBLIC, "Public" },
+ { RANDOM, "Random" },
+ { READ, "Read" },
+ { REDIM, "ReDim" },
+ { REM, "Rem" },
+ { RESUME, "Resume" },
+ { RETURN, "Return" },
+ { RSET, "RSet" }, // JSM
+ { SELECT, "Select" },
+ { SET, "Set" },
+#ifdef SHARED
+#undef SHARED
+#define tmpSHARED
+#endif
+ { SHARED, "Shared" },
+#ifdef tmpSHARED
+#define SHARED
+#undef tmpSHARED
+#endif
+ { TSINGLE, "Single" },
+ { STATIC, "Static" },
+ { STEP, "Step" },
+ { STOP, "Stop" },
+ { TSTRING, "String" },
+ { SUB, "Sub" },
+ { STOP, "System" },
+ { TEXT, "Text" },
+ { THEN, "Then" },
+ { TO, "To", },
+ { TYPE, "Type" },
+ { TYPEOF, "TypeOf" },
+ { UNTIL, "Until" },
+ { TVARIANT, "Variant" },
+ { VBASUPPORT, "VbaSupport" },
+ { WEND, "Wend" },
+ { WHILE, "While" },
+ { WITH, "With" },
+ { WITHEVENTS, "WithEvents" },
+ { WRITE, "Write" }, // auch WRITE #
+ { XOR, "Xor" },
+ { NIL, "" }
+};
+
+/*
+TokenTable aTokTable_Java [] = { // Token-Tabelle:
+
+ { JS_LOG_NOT, "!" },
+ { JS_NE, "!=" },
+ { JS_MOD, "%" },
+ { JS_ASS_MOD, "%=" },
+ { JS_BIT_AND, "&" },
+ { JS_LOG_AND, "&&" },
+ { JS_ASS_AND, "&=" },
+ { JS_LPAREN, "(" },
+ { JS_RPAREN, ")" },
+ { JS_MUL, "*" },
+ { JS_ASS_MUL, "*=" },
+ { JS_PLUS, "+" },
+ { JS_INC, "++" },
+ { JS_ASS_PLUS, "+=" },
+ { JS_COMMA, "," },
+ { JS_MINUS, "-" },
+ { JS_DEC, "--" },
+ { JS_ASS_MINUS, "-=" },
+ { JS_DIV, "/" },
+ { JS_ASS_DIV, "/=" },
+ { JS_COND_SEL, ":" },
+ { JS_LT, "<" },
+ { JS_LSHIFT, "<<" },
+ { JS_ASS_LSHIFT,"<<=" },
+ { JS_LE, "<=" },
+ { JS_NE, "<>" },
+ { JS_ASSIGNMENT,"=" },
+ { JS_EQ, "==" },
+ { JS_GT, ">" },
+ { JS_RSHIFT, ">>" },
+ { JS_ASS_RSHIFT,">>=" },
+ { JS_RSHIFT_Z, ">>>" },
+ { JS_ASS_RSHIFT_Z,">>>=" },
+ { JS_GE, ">=" },
+ { JS_COND_QUEST,"?" },
+ { ACCESS, "Access" },
+ { ALIAS, "Alias" },
+ { AND, "And" },
+ { ANY, "Any" },
+ { APPEND, "Append" },
+ { AS, "As" },
+ { BASE, "Base" },
+ { BINARY, "Binary" },
+ { TBOOLEAN, "Boolean" },
+ { BYVAL, "ByVal", },
+ { CALL, "Call" },
+ { CASE, "Case" },
+ { _CDECL_, "Cdecl" },
+ { CLOSE, "Close" },
+ { COMPARE, "Compare" },
+ { _CONST_, "Const" },
+ { TCURRENCY,"Currency" },
+ { TDATE, "Date" },
+ { DECLARE, "Declare" },
+ { DEFBOOL, "DefBool" },
+ { DEFCUR, "DefCur" },
+ { DEFDATE, "DefDate" },
+ { DEFDBL, "DefDbl" },
+ { DEFERR, "DefErr" },
+ { DEFINT, "DefInt" },
+ { DEFLNG, "DefLng" },
+ { DEFOBJ, "DefObj" },
+ { DEFSNG, "DefSng" },
+ { DEFSTR, "DefStr" },
+ { DEFVAR, "DefVar" },
+ { DIM, "Dim" },
+ { DO, "Do" },
+ { TDOUBLE, "Double" },
+ { EACH, "Each" },
+ { ELSE, "Else" },
+ { ELSEIF, "ElseIf" },
+ { END, "End" },
+ { ENDFUNC, "End Function" },
+ { ENDIF, "End If" },
+ { ENDSELECT,"End Select" },
+ { ENDSUB, "End Sub" },
+ { ENDTYPE, "End Type" },
+ { ENDIF, "EndIf" },
+ { EQV, "Eqv" },
+ { ERASE, "Erase" },
+ { _ERROR_, "Error" },
+ { EXIT, "Exit" },
+ { EXPLICIT, "Explicit" },
+ { FOR, "For" },
+ { FUNCTION, "Function" },
+ { GLOBAL, "Global" },
+ { GOSUB, "GoSub" },
+ { GOTO, "GoTo" },
+ { IF, "If" },
+ { IMP, "Imp" },
+ { _IN_, "In" },
+ { INPUT, "Input" }, // auch INPUT #
+ { TINTEGER, "Integer" },
+ { IS, "Is" },
+ { LET, "Let" },
+ { LIB, "Lib" },
+ { LINE, "Line" },
+ { LINEINPUT,"Line Input" },
+ { LOCAL, "Local" },
+ { LOCK, "Lock" },
+ { TLONG, "Long" },
+ { LOOP, "Loop" },
+ { LPRINT, "LPrint" },
+ { LSET, "LSet" }, // JSM
+ { MOD, "Mod" },
+ { NAME, "Name" },
+ { NEW, "New" },
+ { NEXT, "Next" },
+ { NOT, "Not" },
+ { TOBJECT, "Object" },
+ { ON, "On" },
+ { OPEN, "Open" },
+ { OPTION, "Option" },
+ { _OPTIONAL_, "Optional" },
+ { OR, "Or" },
+ { OUTPUT, "Output" },
+ { PRESERVE, "Preserve" },
+ { PRINT, "Print" },
+ { PRIVATE, "Private" },
+ { PUBLIC, "Public" },
+ { RANDOM, "Random" },
+ { READ, "Read" },
+ { REDIM, "ReDim" },
+ { REM, "Rem" },
+ { RESUME, "Resume" },
+ { RETURN, "Return" },
+ { RSET, "RSet" }, // JSM
+ { SELECT, "Select" },
+ { SET, "Set" },
+ { SHARED, "Shared" },
+ { TSINGLE, "Single" },
+ { STATIC, "Static" },
+ { STEP, "Step" },
+ { STOP, "Stop" },
+ { TSTRING, "String" },
+ { SUB, "Sub" },
+ { STOP, "System" },
+ { TEXT, "Text" },
+ { THEN, "Then" },
+ { TO, "To", },
+ { TYPE, "Type" },
+ { UNTIL, "Until" },
+ { TVARIANT, "Variant" },
+ { WEND, "Wend" },
+ { WHILE, "While" },
+ { WITH, "With" },
+ { WRITE, "Write" }, // auch WRITE #
+ { XOR, "Xor" },
+ { JS_LINDEX, "[" },
+ { JS_RINDEX, "]" },
+ { JS_BIT_XOR, "^" },
+ { JS_ASS_XOR, "^=" },
+ { JS_BIT_OR, "|" },
+ { JS_ASS_OR, "|=" },
+ { JS_LOG_OR, "||" },
+ { JS_BIT_NOT, "~" },
+ { NIL }
+};
+*/
+
+// #i109076
+TokenLabelInfo::TokenLabelInfo( void )
+{
+ m_pTokenCanBeLabelTab = new bool[VBASUPPORT+1];
+ for( int i = 0 ; i <= VBASUPPORT ; ++i )
+ m_pTokenCanBeLabelTab[i] = false;
+
+ // Token accepted as label by VBA
+ SbiToken eLabelToken[] = { ACCESS, ALIAS, APPEND, BASE, BINARY, CLASSMODULE,
+ COMPARE, COMPATIBLE, DEFERR, _ERROR_, EXPLICIT, LIB, LINE, LPRINT, NAME,
+ TOBJECT, OUTPUT, PROPERTY, RANDOM, READ, STEP, STOP, TEXT, VBASUPPORT, NIL };
+ SbiToken* pTok = eLabelToken;
+ SbiToken eTok;
+ for( pTok = eLabelToken ; (eTok = *pTok) != NIL ; ++pTok )
+ m_pTokenCanBeLabelTab[eTok] = true;
+}
+
+TokenLabelInfo::~TokenLabelInfo()
+{
+ delete[] m_pTokenCanBeLabelTab;
+}
+
+
+// Der Konstruktor ermittelt die Laenge der Token-Tabelle.
+
+SbiTokenizer::SbiTokenizer( const ::rtl::OUString& rSrc, StarBASIC* pb )
+ : SbiScanner( rSrc, pb )
+{
+ pTokTable = aTokTable_Basic;
+ //if( StarBASIC::GetGlobalLanguageMode() == SB_LANG_JAVASCRIPT )
+ // pTokTable = aTokTable_Java;
+ TokenTable *tp;
+ bEof = bAs = FALSE;
+ eCurTok = NIL;
+ ePush = NIL;
+ bEos = bKeywords = bErrorIsSymbol = TRUE;
+ if( !nToken )
+ for( nToken = 0, tp = pTokTable; tp->t; nToken++, tp++ ) {}
+}
+
+SbiTokenizer::~SbiTokenizer()
+{
+}
+
+// Wiederablage (Pushback) eines Tokens. (Bis zu 2 Tokens)
+
+void SbiTokenizer::Push( SbiToken t )
+{
+ if( ePush != NIL )
+ Error( SbERR_INTERNAL_ERROR, "PUSH" );
+ else ePush = t;
+}
+
+void SbiTokenizer::Error( SbError code, const char* pMsg )
+{
+ aError = String::CreateFromAscii( pMsg );
+ Error( code );
+}
+
+void SbiTokenizer::Error( SbError code, String aMsg )
+{
+ aError = aMsg;
+ Error( code );
+}
+
+void SbiTokenizer::Error( SbError code, SbiToken tok )
+{
+ aError = Symbol( tok );
+ Error( code );
+}
+
+// Einlesen des naechsten Tokens, ohne dass das Token geschluckt wird
+
+SbiToken SbiTokenizer::Peek()
+{
+ if( ePush == NIL )
+ {
+ USHORT nOldLine = nLine;
+ USHORT nOldCol1 = nCol1;
+ USHORT nOldCol2 = nCol2;
+ ePush = Next();
+ nPLine = nLine; nLine = nOldLine;
+ nPCol1 = nCol1; nCol1 = nOldCol1;
+ nPCol2 = nCol2; nCol2 = nOldCol2;
+ }
+ return eCurTok = ePush;
+}
+
+// Dies ist fuer die Decompilation.
+// Zahlen und Symbole liefern einen Leerstring zurueck.
+
+const String& SbiTokenizer::Symbol( SbiToken t )
+{
+ // Zeichen-Token?
+ if( t < FIRSTKWD )
+ {
+ aSym = (char) t;
+ return aSym;
+ }
+ switch( t )
+ {
+ case NEG : aSym = '-'; return aSym;
+ case EOS : aSym = String::CreateFromAscii( ":/CRLF" ); return aSym;
+ case EOLN : aSym = String::CreateFromAscii( "CRLF" ); return aSym;
+ default: break;
+ }
+ TokenTable* tp = pTokTable;
+ for( short i = 0; i < nToken; i++, tp++ )
+ {
+ if( tp->t == t )
+ {
+ aSym = String::CreateFromAscii( tp->s );
+ return aSym;
+ }
+ }
+ const sal_Unicode *p = aSym.GetBuffer();
+ if (*p <= ' ') aSym = String::CreateFromAscii( "???" );
+ return aSym;
+}
+
+// Einlesen des naechsten Tokens und Ablage desselben
+// Tokens, die nicht in der Token-Tabelle vorkommen, werden
+// direkt als Zeichen zurueckgeliefert.
+// Einige Worte werden gesondert behandelt.
+
+SbiToken SbiTokenizer::Next()
+{
+ if (bEof) return EOLN;
+ // Schon eines eingelesen?
+ if( ePush != NIL )
+ {
+ eCurTok = ePush;
+ ePush = NIL;
+ nLine = nPLine;
+ nCol1 = nPCol1;
+ nCol2 = nPCol2;
+ bEos = IsEoln( eCurTok );
+ return eCurTok;
+ }
+ TokenTable *tp;
+
+ // Sonst einlesen:
+ if( !NextSym() )
+ {
+ bEof = bEos = TRUE;
+ return eCurTok = EOLN;
+ }
+ // Zeilenende?
+ if( aSym.GetBuffer()[0] == '\n' )
+ {
+ bEos = TRUE; return eCurTok = EOLN;
+ }
+ bEos = FALSE;
+
+ // Zahl?
+ if( bNumber )
+ return eCurTok = NUMBER;
+
+ // String?
+ else if( ( eScanType == SbxDATE || eScanType == SbxSTRING ) && !bSymbol )
+ return eCurTok = FIXSTRING;
+ // Sonderfaelle von Zeichen, die zwischen "Z" und "a" liegen. ICompare()
+ // wertet die Position dieser Zeichen unterschiedlich aus.
+ else if( aSym.GetBuffer()[0] == '^' )
+ return eCurTok = EXPON;
+ else if( aSym.GetBuffer()[0] == '\\' )
+ return eCurTok = IDIV;
+ else
+ {
+ // Mit Typkennung oder ein Symbol und keine Keyword-Erkennung?
+ // Dann kein Token-Test
+ if( eScanType != SbxVARIANT
+ || ( !bKeywords && bSymbol ) )
+ return eCurTok = SYMBOL;
+ // Gueltiges Token?
+ short lb = 0;
+ short ub = nToken-1;
+ short delta;
+ do
+ {
+ delta = (ub - lb) >> 1;
+ tp = &pTokTable[ lb + delta ];
+ StringCompare res = aSym.CompareIgnoreCaseToAscii( tp->s );
+ // Gefunden?
+ if( res == COMPARE_EQUAL )
+ goto special;
+ // Groesser? Dann untere Haelfte
+ if( res == COMPARE_LESS )
+ {
+ if ((ub - lb) == 2) ub = lb;
+ else ub = ub - delta;
+ }
+ // Kleiner? Dann obere Haelfte
+ else
+ {
+ if ((ub -lb) == 2) lb = ub;
+ else lb = lb + delta;
+ }
+ } while( delta );
+ // Symbol? Wenn nicht >= Token
+ sal_Unicode ch = aSym.GetBuffer()[0];
+ if( !BasicSimpleCharClass::isAlpha( ch, bCompatible ) && !bSymbol )
+ return eCurTok = (SbiToken) (ch & 0x00FF);
+ return eCurTok = SYMBOL;
+ }
+special:
+ // #i92642
+ if( eCurTok != NIL && eCurTok != REM && eCurTok != EOLN && (tp->t == NAME || tp->t == LINE) )
+ return eCurTok = SYMBOL;
+ else if( tp->t == TEXT )
+ return eCurTok = SYMBOL;
+
+ // #i92642: Special LINE token handling -> SbiParser::Line()
+
+ // END IF, CASE, SUB, DEF, FUNCTION, TYPE, CLASS, WITH
+ if( tp->t == END )
+ {
+ // AB, 15.3.96, Spezialbehandlung fuer END, beim Peek() geht die
+ // aktuelle Zeile verloren, daher alles merken und danach restaurieren
+ USHORT nOldLine = nLine;
+ USHORT nOldCol = nCol;
+ USHORT nOldCol1 = nCol1;
+ USHORT nOldCol2 = nCol2;
+ String aOldSym = aSym;
+ SaveLine(); // pLine im Scanner sichern
+
+ eCurTok = Peek();
+ switch( eCurTok )
+ {
+ case IF: Next(); eCurTok = ENDIF; break;
+ case SELECT: Next(); eCurTok = ENDSELECT; break;
+ case SUB: Next(); eCurTok = ENDSUB; break;
+ case FUNCTION: Next(); eCurTok = ENDFUNC; break;
+ case PROPERTY: Next(); eCurTok = ENDPROPERTY; break;
+ case TYPE: Next(); eCurTok = ENDTYPE; break;
+ case ENUM: Next(); eCurTok = ENDENUM; break;
+ case WITH: Next(); eCurTok = ENDWITH; break;
+ default : eCurTok = END;
+ }
+ nCol1 = nOldCol1;
+ if( eCurTok == END )
+ {
+ // Alles zuruecksetzen, damit Token nach END ganz neu gelesen wird
+ ePush = NIL;
+ nLine = nOldLine;
+ nCol = nOldCol;
+ nCol2 = nOldCol2;
+ aSym = aOldSym;
+ RestoreLine(); // pLine im Scanner restaurieren
+ }
+ return eCurTok;
+ }
+ // Sind Datentypen Keywords?
+ // Nur nach AS, sonst sind es Symbole!
+ // Es gibt ja ERROR(), DATA(), STRING() etc.
+ eCurTok = tp->t;
+ // AS: Datentypen sind Keywords
+ if( tp->t == AS )
+ bAs = TRUE;
+ else
+ {
+ if( bAs )
+ bAs = FALSE;
+ else if( eCurTok >= DATATYPE1 && eCurTok <= DATATYPE2 && (bErrorIsSymbol || eCurTok != _ERROR_) )
+ eCurTok = SYMBOL;
+ }
+
+ // CLASSMODULE, PROPERTY, GET, ENUM token only visible in compatible mode
+ SbiToken eTok = tp->t;
+ if( bCompatible )
+ {
+ // #129904 Suppress system
+ if( eTok == STOP && aSym.CompareIgnoreCaseToAscii( "system" ) == COMPARE_EQUAL )
+ eCurTok = SYMBOL;
+ }
+ else
+ {
+ if( eTok == CLASSMODULE ||
+ eTok == IMPLEMENTS ||
+ eTok == PARAMARRAY ||
+ eTok == ENUM ||
+ eTok == PROPERTY ||
+ eTok == GET ||
+ eTok == TYPEOF )
+ {
+ eCurTok = SYMBOL;
+ }
+ }
+
+ bEos = IsEoln( eCurTok );
+ return eCurTok;
+}
+
+#ifdef _MSC_VER
+#pragma optimize("",off)
+#endif
+
+// Kann das aktuell eingelesene Token ein Label sein?
+
+BOOL SbiTokenizer::MayBeLabel( BOOL bNeedsColon )
+{
+ if( eCurTok == SYMBOL || m_aTokenLabelInfo.canTokenBeLabel( eCurTok ) )
+ return bNeedsColon ? DoesColonFollow() : TRUE;
+ else
+ return BOOL( eCurTok == NUMBER
+ && eScanType == SbxINTEGER
+ && nVal >= 0 );
+}
+
+#ifdef _MSC_VER
+#pragma optimize("",off)
+#endif
+
+
+void SbiTokenizer::Hilite( SbTextPortions& rList )
+{
+ bErrors = FALSE;
+ bUsedForHilite = TRUE;
+ SbiToken eLastTok = NIL;
+ for( ;; )
+ {
+ Next();
+ if( IsEof() )
+ break;
+ SbTextPortion aRes;
+ aRes.nLine = nLine;
+ aRes.nStart = nCol1;
+ aRes.nEnd = nCol2;
+ switch( eCurTok )
+ {
+ case REM:
+ aRes.eType = SB_COMMENT; break;
+ case SYMBOL:
+ aRes.eType = SB_SYMBOL; break;
+ case FIXSTRING:
+ aRes.eType = SB_STRING; break;
+ case NUMBER:
+ aRes.eType = SB_NUMBER; break;
+ default:
+ if( ( eCurTok >= FIRSTKWD && eCurTok <= LASTKWD )
+ || (eCurTok >= _CDECL_ ) )
+ aRes.eType = SB_KEYWORD;
+ else
+ aRes.eType = SB_PUNCTUATION;
+ }
+ // Die Folge xxx.Keyword sollte nicht als Kwd geflagt werden
+ if( aRes.eType == SB_KEYWORD
+ && ( eLastTok == DOT|| eLastTok == EXCLAM ) )
+ aRes.eType = SB_SYMBOL;
+ if( eCurTok != EOLN && aRes.nStart <= aRes.nEnd )
+ rList.Insert( aRes, rList.Count() );
+ if( aRes.eType == SB_COMMENT )
+ break;
+ eLastTok = eCurTok;
+ }
+ bUsedForHilite = FALSE;
+}
+
diff --git a/basic/source/inc/buffer.hxx b/basic/source/inc/buffer.hxx
new file mode 100644
index 000000000000..cbb1a1702354
--- /dev/null
+++ b/basic/source/inc/buffer.hxx
@@ -0,0 +1,63 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BUFFER_HXX
+#define _BUFFER_HXX
+
+#include <tools/solar.h>
+#include <tools/string.hxx>
+
+class SbiParser;
+
+class SbiBuffer { // Code/Konstanten-Puffer:
+ SbiParser* pParser; // fuer Fehlermeldungen
+ char* pBuf; // Puffer-Pointer
+ char* pCur; // aktueller Puffer-Pointer
+ UINT32 nOff; // aktuelles Offset
+ UINT32 nSize; // aktuelle Groesse
+ short nInc; // Inkrement
+ BOOL Check( USHORT ); // Buffergroesse testen
+public:
+ SbiBuffer( SbiParser*, short ); // Inkrement
+ ~SbiBuffer();
+ void Patch( UINT32, UINT32 ); // Patchen
+ void Chain( UINT32 ); // Back-Chain
+ void Align( INT32 ); // Alignment
+ BOOL Add( const void*, USHORT );// Element anfuegen
+ BOOL operator += (const String&);// Basic-String speichern
+ BOOL operator += (INT8); // Zeichen speichern
+ BOOL operator += (INT16); // Integer speichern
+ BOOL operator += (UINT8); // Zeichen speichern
+ BOOL operator += (UINT16); // Integer speichern
+ BOOL operator += (UINT32); // Integer speichern
+ BOOL operator += (INT32); // Integer speichern
+ char* GetBuffer(); // Puffer rausgeben (selbst loeschen!)
+ char* GetBufferPtr(){ return pBuf; }
+ UINT32 GetSize() { return nOff; }
+};
+
+#endif
diff --git a/basic/source/inc/codegen.hxx b/basic/source/inc/codegen.hxx
new file mode 100644
index 000000000000..a3fe02227cfd
--- /dev/null
+++ b/basic/source/inc/codegen.hxx
@@ -0,0 +1,92 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _CODEGEN_HXX
+#define _CODEGEN_HXX
+
+class SbiImage;
+class SbiParser;
+class SbModule;
+#include "opcodes.hxx"
+#include "buffer.hxx"
+
+class SbiCodeGen { // Code-Erzeugung:
+ SbiParser* pParser; // fuer Fehlermeldungen, Line, Column etc.
+ SbModule& rMod; // aktuelles Modul
+ SbiBuffer aCode; // Code-Puffer
+ short nLine, nCol; // Zeile, Spalte fuer Stmnt-Befehl
+ short nForLevel; // #29955 for-Schleifen-Ebene
+ BOOL bStmnt; // TRUE: Statement-Opcode liegt an
+public:
+ SbiCodeGen( SbModule&, SbiParser*, short );
+ SbiParser* GetParser() { return pParser; }
+ SbModule& GetModule() { return rMod; }
+ UINT32 Gen( SbiOpcode );
+ UINT32 Gen( SbiOpcode, UINT32 );
+ UINT32 Gen( SbiOpcode, UINT32, UINT32 );
+ void Patch( UINT32 o, UINT32 v ){ aCode.Patch( o, v ); }
+ void BackChain( UINT32 off ) { aCode.Chain( off ); }
+ void Statement();
+ void GenStmnt(); // evtl. Statement-Opcode erzeugen
+ UINT32 GetPC();
+ UINT32 GetOffset() { return GetPC() + 1; }
+ void Save();
+
+ // #29955 for-Schleifen-Ebene pflegen
+ void IncForLevel( void ) { nForLevel++; }
+ void DecForLevel( void ) { nForLevel--; }
+
+ static UINT32 calcNewOffSet( BYTE* pCode, UINT16 nOffset );
+ static UINT16 calcLegacyOffSet( BYTE* pCode, UINT32 nOffset );
+
+};
+
+template < class T, class S >
+class PCodeBuffConvertor
+{
+ T m_nSize; //
+ BYTE* m_pStart;
+ BYTE* m_pCnvtdBuf;
+ S m_nCnvtdSize; //
+
+ // Disable usual copying symantics and bodgy default ctor
+ PCodeBuffConvertor();
+ PCodeBuffConvertor(const PCodeBuffConvertor& );
+ PCodeBuffConvertor& operator = ( const PCodeBuffConvertor& );
+public:
+ PCodeBuffConvertor( BYTE* pCode, T nSize ): m_nSize( nSize ), m_pStart( pCode ), m_pCnvtdBuf( NULL ), m_nCnvtdSize( 0 ){ convert(); }
+ S GetSize(){ return m_nCnvtdSize; }
+ void convert();
+ // Caller owns the buffer returned
+ BYTE* GetBuffer() { return m_pCnvtdBuf; }
+};
+
+// #111897 PARAM_INFO flags start at 0x00010000 to not
+// conflict with DefaultId in SbxParamInfo::nUserData
+#define PARAM_INFO_PARAMARRAY 0x0010000
+
+#endif
diff --git a/basic/source/inc/collelem.hxx b/basic/source/inc/collelem.hxx
new file mode 100644
index 000000000000..cd1787d6ff01
--- /dev/null
+++ b/basic/source/inc/collelem.hxx
@@ -0,0 +1,47 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _SAMPLE_COLLELEM_HXX
+#define _SAMPLE_COLLELEM_HXX
+
+#include <basic/sbxobj.hxx>
+
+// Das Sample-Element ist ein kleines Objekt, das die Properties
+// Name und Value enthlt sowie die Methode Say, die den bergebenen
+// Text mit dem eigenen Namen verkoppelt. Der Name ist von aussen setzbar.
+// Die Implementation arbeitet ausschliesslich mit dynamischen Elementen.
+
+class SampleElement : public SbxObject
+{
+ // Broadcaster Notification
+ virtual void SFX_NOTIFY( SfxBroadcaster& rBC, const TypeId& rBCType,
+ const SfxHint& rHint, const TypeId& rHintType );
+public:
+ SampleElement( const String& );
+};
+
+#endif
diff --git a/basic/source/inc/disas.hxx b/basic/source/inc/disas.hxx
new file mode 100644
index 000000000000..328a085e6c29
--- /dev/null
+++ b/basic/source/inc/disas.hxx
@@ -0,0 +1,72 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _DISAS_HXX
+#define _DISAS_HXX
+
+#include "image.hxx"
+#include "opcodes.hxx"
+// find a place for this limit ( also used in
+class SvStream;
+#define MAX_LABELS 0x2000L
+class SbiDisas {
+ const SbiImage& rImg;
+ SbModule* pMod;
+ char cLabels[ MAX_LABELS ]; // Bitvektor fuer Labels
+ UINT32 nOff; // aktuelle Position
+ UINT32 nPC; // Position des Opcodes
+ SbiOpcode eOp; // Opcode
+ UINT32 nOp1, nOp2; // Operanden
+ UINT32 nParts; // 1, 2 oder 3
+ UINT32 nLine; // aktuelle Zeile
+ BOOL DisasLine( String& );
+ BOOL Fetch(); // naechster Opcode
+public:
+ SbiDisas( SbModule*, const SbiImage* );
+ void Disas( SvStream& );
+ void Disas( String& );
+ // NICHT AUFRUFEN
+ void StrOp( String& );
+ void Str2Op( String& );
+ void ImmOp( String& );
+ void OnOp( String& );
+ void LblOp( String& );
+ void ReturnOp( String& );
+ void ResumeOp( String& );
+ void PromptOp( String& );
+ void CloseOp( String& );
+ void CharOp( String& );
+ void VarOp( String& );
+ void VarDefOp( String& );
+ void OffOp( String& );
+ void TypeOp( String& );
+ void CaseOp( String& );
+ void StmntOp( String& );
+ void StrmOp( String& );
+};
+
+#endif
diff --git a/basic/source/inc/dlgcont.hxx b/basic/source/inc/dlgcont.hxx
new file mode 100644
index 000000000000..2c927a8286f4
--- /dev/null
+++ b/basic/source/inc/dlgcont.hxx
@@ -0,0 +1,175 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef BASIC_DIALOGCONTAINER_HXX
+#define BASIC_DIALOGCONTAINER_HXX
+
+#include "namecont.hxx"
+
+#ifndef _COM_SUN_STAR_AWT_XSTRINGRESOURCESUPPLIER_HPP_
+#include <com/sun/star/resource/XStringResourceSupplier.hpp>
+#endif
+#include "com/sun/star/resource/XStringResourcePersistence.hpp"
+
+#include <cppuhelper/implbase1.hxx>
+#include <comphelper/uno3.hxx>
+
+namespace basic
+{
+
+//============================================================================
+
+class SfxDialogLibraryContainer : public SfxLibraryContainer
+{
+ // Methods to distinguish between different library types
+ virtual SfxLibrary* SAL_CALL implCreateLibrary( const ::rtl::OUString& aName );
+ virtual SfxLibrary* SAL_CALL implCreateLibraryLink
+ ( const ::rtl::OUString& aName, const ::rtl::OUString& aLibInfoFileURL,
+ const ::rtl::OUString& StorageURL, sal_Bool ReadOnly );
+ virtual ::com::sun::star::uno::Any SAL_CALL createEmptyLibraryElement( void );
+ virtual bool SAL_CALL isLibraryElementValid( ::com::sun::star::uno::Any aElement ) const;
+ virtual void SAL_CALL writeLibraryElement
+ (
+ const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer>& xLibrary,
+ const ::rtl::OUString& aElementName,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::io::XOutputStream >& xOutput
+ )
+ throw(::com::sun::star::uno::Exception);
+
+ virtual ::com::sun::star::uno::Any SAL_CALL importLibraryElement
+ (
+ const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer>& xLibrary,
+ const ::rtl::OUString& aElementName,
+ const ::rtl::OUString& aFile,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream >& xElementStream );
+
+ virtual void SAL_CALL importFromOldStorage( const ::rtl::OUString& aFile );
+
+ virtual SfxLibraryContainer* createInstanceImpl( void );
+
+ virtual void onNewRootStorage();
+
+ virtual const sal_Char* SAL_CALL getInfoFileName() const;
+ virtual const sal_Char* SAL_CALL getOldInfoFileName() const;
+ virtual const sal_Char* SAL_CALL getLibElementFileExtension() const;
+ virtual const sal_Char* SAL_CALL getLibrariesDir() const;
+
+public:
+ SfxDialogLibraryContainer( void );
+ SfxDialogLibraryContainer( const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& xStorage );
+
+ // Methods XStorageBasedLibraryContainer
+ virtual void SAL_CALL storeLibrariesToStorage(
+ const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& RootStorage )
+ throw (::com::sun::star::uno::RuntimeException);
+
+ // Resource handling
+ ::com::sun::star::uno::Reference< ::com::sun::star::resource::XStringResourcePersistence >
+ implCreateStringResource( class SfxDialogLibrary* pDialog );
+
+ // Methods XServiceInfo
+ virtual ::rtl::OUString SAL_CALL getImplementationName( )
+ throw (::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames( )
+ throw (::com::sun::star::uno::RuntimeException);
+
+ // Service
+ static ::com::sun::star::uno::Sequence< ::rtl::OUString > getSupportedServiceNames_static();
+ static ::rtl::OUString getImplementationName_static();
+ static ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL Create
+ ( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& xServiceManager )
+ throw( ::com::sun::star::uno::Exception );
+};
+
+//============================================================================
+
+typedef ::cppu::ImplHelper1 < ::com::sun::star::resource::XStringResourceSupplier
+ > SfxDialogLibrary_BASE;
+
+class SfxDialogLibrary :public SfxLibrary
+ ,public SfxDialogLibrary_BASE
+{
+ SfxDialogLibraryContainer* m_pParent;
+ ::com::sun::star::uno::Reference
+ < ::com::sun::star::resource::XStringResourcePersistence> m_xStringResourcePersistence;
+ ::rtl::OUString m_aName;
+
+ // Provide modify state including resources
+ virtual sal_Bool isModified( void );
+ virtual void storeResources( void );
+ virtual void storeResourcesAsURL( const ::rtl::OUString& URL, const ::rtl::OUString& NewName );
+ virtual void storeResourcesToURL( const ::rtl::OUString& URL,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler >& xHandler );
+ virtual void storeResourcesToStorage( const ::com::sun::star::uno::Reference
+ < ::com::sun::star::embed::XStorage >& xStorage );
+
+public:
+ SfxDialogLibrary
+ (
+ ModifiableHelper& _rModifiable,
+ const ::rtl::OUString& aName,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xMSF,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::ucb::XSimpleFileAccess >& xSFI,
+ SfxDialogLibraryContainer* pParent
+ );
+
+ SfxDialogLibrary
+ (
+ ModifiableHelper& _rModifiable,
+ const ::rtl::OUString& aName,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xMSF,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::ucb::XSimpleFileAccess >& xSFI,
+ const ::rtl::OUString& aLibInfoFileURL, const ::rtl::OUString& aStorageURL, sal_Bool ReadOnly,
+ SfxDialogLibraryContainer* pParent
+ );
+
+ DECLARE_XINTERFACE()
+ DECLARE_XTYPEPROVIDER()
+
+ // XStringResourceSupplier
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::resource::XStringResourceResolver >
+ SAL_CALL getStringResource( ) throw (::com::sun::star::uno::RuntimeException);
+
+ ::rtl::OUString getName( void )
+ { return m_aName; }
+
+ ::com::sun::star::uno::Reference< ::com::sun::star::resource::XStringResourcePersistence >
+ getStringResourcePersistence( void )
+ {
+ return m_xStringResourcePersistence;
+ }
+
+ static bool containsValidDialog( const ::com::sun::star::uno::Any& aElement );
+
+protected:
+ virtual bool SAL_CALL isLibraryElementValid( ::com::sun::star::uno::Any aElement ) const;
+};
+
+} // namespace basic
+
+#endif
+
diff --git a/basic/source/inc/errobject.hxx b/basic/source/inc/errobject.hxx
new file mode 100644
index 000000000000..39e6e319caae
--- /dev/null
+++ b/basic/source/inc/errobject.hxx
@@ -0,0 +1,52 @@
+/*************************************************************************
+*
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2000, 2010 Oracle and/or its affiliates.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org 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 Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+*
+************************************************************************/
+
+#ifndef ERROBJECT_HXX
+#define ERROBJECT_HXX
+#include "sbunoobj.hxx"
+#include <ooo/vba/XErrObject.hpp>
+
+
+class SbxErrObject : public SbUnoObject
+{
+ class ErrObject* m_pErrObject;
+ com::sun::star::uno::Reference< ooo::vba::XErrObject > m_xErr;
+
+ SbxErrObject( const String& aName_, const com::sun::star::uno::Any& aUnoObj_ );
+ ~SbxErrObject();
+
+ class ErrObject* getImplErrObject( void )
+ { return m_pErrObject; }
+
+public:
+ static SbxVariableRef getErrObject();
+ static com::sun::star::uno::Reference< ooo::vba::XErrObject > getUnoErrObject();
+
+ void setNumberAndDescription( ::sal_Int32 _number, const ::rtl::OUString& _description )
+ throw (com::sun::star::uno::RuntimeException);
+};
+#endif
diff --git a/basic/source/inc/expr.hxx b/basic/source/inc/expr.hxx
new file mode 100644
index 000000000000..851d0d6f1fe5
--- /dev/null
+++ b/basic/source/inc/expr.hxx
@@ -0,0 +1,266 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _EXPR_HXX
+#define _EXPR_HXX
+
+#include "opcodes.hxx"
+#include "token.hxx"
+
+class SbiExprNode;
+class SbiExpression;
+class SbiExprList;
+class SbiDimList;
+class SbiParameters;
+class SbiParser;
+class SbiCodeGen;
+class SbiSymDef;
+class SbiProcDef;
+
+
+#include <vector>
+typedef ::std::vector<SbiExprList*> SbiExprListVector;
+
+struct SbVar { // Variablen-Element:
+ SbiExprNode* pNext; // Weiteres Element (bei Strukturen)
+ SbiSymDef* pDef; // Symboldefinition
+ SbiExprList* pPar; // optionale Parameter (wird geloescht)
+ SbiExprListVector* pvMorePar; // Array of arrays foo(pPar)(avMorePar[0])(avMorePar[1])...
+};
+
+struct KeywordSymbolInfo
+{
+ String m_aKeywordSymbol;
+ SbxDataType m_eSbxDataType;
+ SbiToken m_eTok;
+};
+
+enum SbiExprType { // Expression-Typen:
+ SbSTDEXPR, // normaler Ausdruck
+ SbLVALUE, // beliebiger lValue
+ SbSYMBOL, // beliebiges zusammengesetztes Symbol
+ SbOPERAND // Variable/Funktion
+};
+
+enum SbiExprMode { // Expression context:
+ EXPRMODE_STANDARD, // default
+ EXPRMODE_STANDALONE, // a param1, param2 OR a( param1, param2 ) = 42
+ EXPRMODE_LPAREN_PENDING, // start of parameter list with bracket, special handling
+ EXPRMODE_LPAREN_NOT_NEEDED, // pending LPAREN has not been used
+ EXPRMODE_ARRAY_OR_OBJECT, // '=' or '(' or '.' found after ')' on ParenLevel 0, stopping
+ // expression, assuming array syntax a(...)[(...)] = ?
+ // or a(...).b(...)
+ EXPRMODE_EMPTY_PAREN // It turned out that the paren don't contain anything: a()
+};
+
+enum SbiNodeType {
+ SbxNUMVAL, // nVal = Wert
+ SbxSTRVAL, // aStrVal = Wert, before #i59791/#i45570: nStringId = Wert
+ SbxVARVAL, // aVar = Wert
+ SbxTYPEOF, // TypeOf ObjExpr Is Type
+ SbxNODE, // Node
+ SbxNEW, // new <type> expression
+ SbxDUMMY
+};
+
+enum RecursiveMode
+{
+ UNDEFINED,
+ FORCE_CALL,
+ PREVENT_CALL
+};
+
+class SbiExprNode { // Operatoren (und Operanden)
+ friend class SbiExpression;
+ friend class SbiConstExpression;
+ union {
+ USHORT nTypeStrId; // gepoolter String-ID, #i59791/#i45570 Now only for TypeOf
+ double nVal; // numerischer Wert
+ SbVar aVar; // oder Variable
+ };
+ String aStrVal; // #i59791/#i45570 Store string directly
+ SbiExprNode* pLeft; // linker Zweig
+ SbiExprNode* pRight; // rechter Zweig (NULL bei unaeren Ops)
+ SbiExprNode* pWithParent; // Knoten, dessen Member this per with ist
+ SbiCodeGen* pGen; // Code-Generator
+ SbiNodeType eNodeType; // Art des Nodes
+ SbxDataType eType; // aktueller Datentyp
+ SbiToken eTok; // Token des Operators
+ BOOL bComposite; // TRUE: Zusammengesetzter Ausdruck
+ BOOL bError; // TRUE: Fehlerhaft
+ void FoldConstants(); // Constant Folding durchfuehren
+ void CollectBits(); // Umwandeln von Zahlen in Strings
+ BOOL IsOperand() // TRUE, wenn Operand
+ { return BOOL( eNodeType != SbxNODE && eNodeType != SbxTYPEOF && eNodeType != SbxNEW ); }
+ BOOL IsTypeOf()
+ { return BOOL( eNodeType == SbxTYPEOF ); }
+ BOOL IsNew()
+ { return BOOL( eNodeType == SbxNEW ); }
+ BOOL IsNumber(); // TRUE bei Zahlen
+ BOOL IsString(); // TRUE bei Strings
+ BOOL IsLvalue(); // TRUE, falls als Lvalue verwendbar
+ void GenElement( SbiOpcode ); // Element
+ void BaseInit( SbiParser* p ); // Hilfsfunktion fuer Ctor, AB 17.12.95
+public:
+ SbiExprNode( void );
+ SbiExprNode( SbiParser*, double, SbxDataType );
+ SbiExprNode( SbiParser*, const String& );
+ SbiExprNode( SbiParser*, const SbiSymDef&, SbxDataType, SbiExprList* = NULL );
+ SbiExprNode( SbiParser*, SbiExprNode*, SbiToken, SbiExprNode* );
+ SbiExprNode( SbiParser*, SbiExprNode*, USHORT ); // #120061 TypeOf
+ SbiExprNode( SbiParser*, USHORT ); // new <type>
+ virtual ~SbiExprNode();
+
+ BOOL IsValid() { return BOOL( !bError ); }
+ BOOL IsConstant() // TRUE bei konstantem Operanden
+ { return BOOL( eNodeType == SbxSTRVAL || eNodeType == SbxNUMVAL ); }
+ BOOL IsIntConst(); // TRUE bei Integer-Konstanten
+ BOOL IsVariable(); // TRUE, wenn Variable
+
+ SbiExprNode* GetWithParent() { return pWithParent; }
+ void SetWithParent( SbiExprNode* p ) { pWithParent = p; }
+
+ SbxDataType GetType() { return eType; }
+ void SetType( SbxDataType eTp ) { eType = eTp; }
+ SbiNodeType GetNodeType() { return eNodeType; }
+ SbiSymDef* GetVar(); // Variable (falls vorhanden)
+ SbiSymDef* GetRealVar(); // letzte Variable in x.y.z
+ SbiExprNode* GetRealNode(); // letzter Knoten in x.y.z
+ short GetDepth(); // Tiefe eines Baumes berechnen
+ const String& GetString() { return aStrVal; }
+ short GetNumber() { return (short)nVal; }
+ SbiExprList* GetParameters() { return aVar.pPar; }
+ SbiExprListVector* GetMoreParameters() { return aVar.pvMorePar; }
+
+ void Optimize(); // Baumabgleich
+
+ void Gen( RecursiveMode eRecMode = UNDEFINED ); // Ausgabe eines Nodes
+};
+
+class SbiExpression { // der Ausdruck:
+ friend class SbiExprList;
+ friend class SbiParameters;
+ friend class SbiDimList;
+protected:
+ String aArgName; // Name fuer bananntes Argument
+ SbiParser* pParser; // fuer Fehlermeldungen, Parsing
+ SbiExpression* pNext; // Link bei Parameterlisten
+ SbiExprNode* pExpr; // Der Expression-Baum
+ SbiExprType eCurExpr; // Art des Ausdrucks
+ SbiExprMode m_eMode; // Expression context
+ BOOL bBased; // TRUE: einfacher DIM-Teil (+BASE)
+ BOOL bError; // TRUE: Fehler
+ BOOL bByVal; // TRUE: ByVal-Parameter
+ BOOL bBracket; // TRUE: Parameter list with brackets
+ USHORT nParenLevel;
+ SbiExprNode* Term( const KeywordSymbolInfo* pKeywordSymbolInfo = NULL );
+ SbiExprNode* ObjTerm( SbiSymDef& );
+ SbiExprNode* Operand( bool bUsedForTypeOf = false );
+ SbiExprNode* Unary();
+ SbiExprNode* Exp();
+ SbiExprNode* MulDiv();
+ SbiExprNode* IntDiv();
+ SbiExprNode* Mod();
+ SbiExprNode* AddSub();
+ SbiExprNode* Cat();
+ SbiExprNode* Like();
+ SbiExprNode* Comp();
+ SbiExprNode* Boolean();
+public:
+ SbiExpression( SbiParser*, SbiExprType = SbSTDEXPR,
+ SbiExprMode eMode = EXPRMODE_STANDARD, const KeywordSymbolInfo* pKeywordSymbolInfo = NULL ); // Parsender Ctor
+ SbiExpression( SbiParser*, const String& );
+ SbiExpression( SbiParser*, double, SbxDataType = SbxDOUBLE );
+ SbiExpression( SbiParser*, const SbiSymDef&, SbiExprList* = NULL );
+ SbiExpression( SbiParser*, SbiToken ); // Spezial-Expr mit Spezial-Tokens
+ ~SbiExpression();
+ String& GetName() { return aArgName; }
+ void SetBased() { bBased = TRUE; }
+ BOOL IsBased() { return bBased; }
+ void SetByVal() { bByVal = TRUE; }
+ BOOL IsByVal() { return bByVal; }
+ BOOL IsBracket() { return bBracket; }
+ BOOL IsValid() { return pExpr->IsValid(); }
+ BOOL IsConstant() { return pExpr->IsConstant(); }
+ BOOL IsVariable() { return pExpr->IsVariable(); }
+ BOOL IsLvalue() { return pExpr->IsLvalue(); }
+ BOOL IsIntConstant() { return pExpr->IsIntConst(); }
+ const String& GetString() { return pExpr->GetString(); }
+ SbiSymDef* GetVar() { return pExpr->GetVar(); }
+ SbiSymDef* GetRealVar() { return pExpr->GetRealVar(); }
+ SbiExprNode* GetExprNode() { return pExpr; }
+ SbxDataType GetType() { return pExpr->GetType(); }
+ void SetType( SbxDataType eType){ pExpr->eType = eType; }
+ void Gen( RecursiveMode eRecMode = UNDEFINED ); // Ausgabe eines Nodes
+};
+
+class SbiConstExpression : public SbiExpression {
+ double nVal;
+ String aVal;
+ SbxDataType eType;
+public: // numerische Konstante
+ SbiConstExpression( SbiParser* );
+ SbxDataType GetType() { return eType; }
+ const String& GetString() { return aVal; }
+ double GetValue() { return nVal; }
+ short GetShortValue();
+};
+
+class SbiExprList { // Basisklasse fuer Parameter und Dims
+protected:
+ SbiParser* pParser; // Parser
+ SbiExpression* pFirst; // Expressions
+ short nExpr; // Anzahl Expressions
+ short nDim; // Anzahl Dimensionen
+ BOOL bError; // TRUE: Fehler
+ BOOL bBracket; // TRUE: Klammern
+public:
+ SbiExprList( SbiParser* );
+ virtual ~SbiExprList();
+ BOOL IsBracket() { return bBracket; }
+ BOOL IsValid() { return BOOL( !bError ); }
+ short GetSize() { return nExpr; }
+ short GetDims() { return nDim; }
+ SbiExpression* Get( short );
+ BOOL Test( const SbiProcDef& ); // Parameter-Checks
+ void Gen(); // Code-Erzeugung
+ void addExpression( SbiExpression* pExpr );
+};
+
+class SbiParameters : public SbiExprList {
+public:
+ SbiParameters( SbiParser*, BOOL bConst = FALSE, BOOL bPar = TRUE);// parsender Ctor
+};
+
+class SbiDimList : public SbiExprList {
+ BOOL bConst; // TRUE: Alles sind Integer-Konstanten
+public:
+ SbiDimList( SbiParser* ); // Parsender Ctor
+ BOOL IsConstant() { return bConst; }
+};
+
+#endif
diff --git a/basic/source/inc/filefmt.hxx b/basic/source/inc/filefmt.hxx
new file mode 100644
index 000000000000..dccdec703dd3
--- /dev/null
+++ b/basic/source/inc/filefmt.hxx
@@ -0,0 +1,178 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _SB_FILEFMT_HXX
+#define _SB_FILEFMT_HXX
+
+#include <tools/solar.h>
+
+class SvStream;
+
+// Version 2: Datentyp des Returnwerts fuer Publics
+// Version 3: neue Opcodes
+// Version 4: neue Opcodes
+// Version 5: Bug (Ansprung von STATIC-Variablen im Init-Code)
+// Version 6: Neue Opcodes und Bug (Globals anlegen, ohne BASIC zu beenden)
+// Version 7: Korrektur im WITH-Parsing
+// Version 8: Korrektur im IF-Parsing
+// Version 9: Init-Code auch mit LEAVE beenden, wenn keine SUB/FUNCTION folgt
+// Version A: #36374 Bei DIM AS NEW... auch Variablen anlegen
+// Version B: #40689 Static umgestellt
+// Version C: #41606 Bug bei Static
+// Version D: #42678 Bug bei RTL-Function spc
+// Version E: #56204 DCREATE, um auch bei DIM AS NEW Arrays anzulegen
+// Version F: #57844 Einfuehrung von SvNumberformat::StringToDouble
+// Version 10: #29955 For-Schleifen-Level in Statement-PCodes generieren
+// Version 11: #29955 Wegen Build-Inkonsistenzen Neu-Compilieren erzwingen
+
+#define B_LEGACYVERSION 0x00000011L
+#define B_CURVERSION 0x00000012L
+#define B_EXT_IMG_VERSION 0x00000012L
+
+// Eine Datei enthaelt entweder einen Modul- oder einen Library-Record.
+// Diese Records enthalten wiederum weitere Records. Jeder Record hat
+// den folgenden Header:
+
+// UINT16 Kennung
+// UINT32 Laenge des Records ohne Header
+// UINT16 Anzahl Unterelemente
+
+// Alle Datei-Offsets in Records sind relativ zum Start des Moduls!
+
+#define B_LIBRARY 0x4C42 // BL Library Record
+#define B_MODULE 0x4D42 // BM Module Record
+#define B_NAME 0x4E4D // MN module name
+#define B_COMMENT 0x434D // MC comment
+#define B_SOURCE 0x4353 // SC source code
+#define B_PCODE 0x4350 // PC p-code
+#define B_OLDPUBLICS 0x7550 // Pu publics
+#define B_PUBLICS 0x5550 // PU publics
+#define B_POOLDIR 0x4450 // PD symbol pool directory
+#define B_SYMPOOL 0x5953 // SY symbol pool
+#define B_STRINGPOOL 0x5453 // ST symbol pool
+#define B_LINERANGES 0x524C // LR line ranges for publics
+#define B_MODEND 0x454D // ME module end
+#define B_SBXOBJECTS 0x5853 // SX SBX objects
+
+#define EXTENDED_BINARY_MODULES
+#ifdef EXTENDED_BINARY_MODULES
+#define B_EXTSOURCE 0x5345 // ES extended source
+#endif
+
+// Ein Library Record enthaelt nur Module Records
+// UINT16 Kennung BL
+// UINT32 Laenge des Records
+// UINT16 Anzahl Module
+
+// Ein Modul-Record enthaelt alle anderen Recordtypen
+// UINT16 Kennung BM
+// UINT32 Laenge des Records
+// UINT16 1
+// Daten:
+// UINT32 Versionsnummer
+// UINT32 Zeichensatz
+// UINT32 Startadresse Initialisierungscode
+// UINT32 Startadresse Sub Main
+// UINT32 Reserviert
+// UINT32 Reserviert
+
+// Modulname, Kommentar und Quellcode:
+// UINT16 Kennung MN, MC oder SC
+// UINT32 Laenge des Records
+// UINT16 1
+// Daten:
+// String-Instanz
+
+// P-Code:
+// UINT16 Kennung PC
+// UINT32 Laenge des Records
+// UINT16 1
+// Daten:
+// Der P-Code als Bytesack
+
+// Alle Symbole und Strings werden in einem String-Pool gehalten.
+// Verweise auf diese Strings sind in Form eines Indexes in diesen Pool.
+
+// Liste aller Publics:
+// UINT16 Kennung PU oder Pu
+// UINT32 Laenge des Records
+// UINT16 Anzahl der Publics
+// Daten fuer jeden Public-Eintrag:
+// UINT16 String-Index
+// UINT32 Startadresse im P-Code-Image (UINT16 fuer alte Publics)
+// UINT16 Datentyp des Returnwertes (ab Version 2)
+
+// Verzeichnis der Symbol-Tabellen:
+// UINT16 Kennung SP
+// UINT32 Laenge des Records
+// UINT16 Anzahl der Symboltabellen
+// Daten fuer jede Symboltabelle:
+// UINT16 Stringindex des Namens
+// UINT16 Anzahl Symbole
+// UINT16 Scope-Kennung
+
+// Symboltabelle:
+// UINT16 Kennung SY
+// UINT32 Laenge des Records
+// UINT16 Anzahl der Symbole
+// Daten:
+// UINT16 Stringindex des Namens
+// UINT16 Anzahl Symbole
+// Daten fuer jedes Symbol:
+// UINT16 Stringindex des Namens
+// UINT16 Datentyp
+// UINT16 Laenge bei STRING*n-Symbolen (0x8000: STATIC-Variable)
+
+// Stringpool:
+// UINT16 Kennung ST
+// UINT32 Laenge des Records
+// UINT16 Anzahl der Strings
+// Daten fuer jeden String:
+// UINT32 Offset in den Block aller Strings
+// Danach folgt der Block aller Strings, die dort als ASCIIZ-Strings liegen.
+
+// Line Ranges:
+// UINT16 Kennung LR
+// UINT32 Laenge des Records
+// UINT16 Anzahl der Strings
+// Daten fuer jedes Public:
+// UINT16 1. Zeile (Sub XXX)
+// UINT16 2. Zeile (End Sub)
+
+// SBX-Objekte:
+// UINT16 Anzahl Objekte
+// .... Objektdaten
+
+////////////////////////////////////////////////////////////////////////////
+
+// Service-Routinen (in IMAGE.CXX)
+
+BOOL SbGood( SvStream& r );
+ULONG SbOpenRecord( SvStream&, UINT16 nSignature, UINT16 nElem );
+void SbCloseRecord( SvStream&, ULONG );
+
+#endif
diff --git a/basic/source/inc/image.hxx b/basic/source/inc/image.hxx
new file mode 100644
index 000000000000..d674b91faf71
--- /dev/null
+++ b/basic/source/inc/image.hxx
@@ -0,0 +1,110 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _SBIMAGE_HXX
+#define _SBIMAGE_HXX
+
+#include "sbintern.hxx"
+#ifndef _RTL_USTRING_HXX
+#include <rtl/ustring.hxx>
+#endif
+#include <filefmt.hxx>
+
+// Diese Klasse liest das vom Compiler erzeugte Image ein und verwaltet
+// den Zugriff auf die einzelnen Elemente.
+
+struct SbPublicEntry;
+
+class SbiImage {
+ friend class SbiCodeGen; // Compiler-Klassen, die die private-
+
+ SbxArrayRef rTypes; // User defined types
+ SbxArrayRef rEnums; // Enum types
+ UINT32* pStringOff; // StringId-Offsets
+ sal_Unicode* pStrings; // StringPool
+ char* pCode; // Code-Image
+ char* pLegacyPCode; // Code-Image
+ BOOL bError; // TRUE: Fehler
+ USHORT nFlags; // Flags (s.u.)
+ short nStrings; // Anzahl Strings
+ UINT32 nStringSize; // Groesse des String-Puffers
+ UINT32 nCodeSize; // Groesse des Code-Blocks
+ UINT16 nLegacyCodeSize; // Groesse des Code-Blocks
+ UINT16 nDimBase; // OPTION BASE-Wert
+ rtl_TextEncoding eCharSet; // Zeichensatz fuer Strings
+ // temporaere Verwaltungs-Variable:
+ short nStringIdx; // aktueller String-Index
+ UINT32 nStringOff; // aktuelle Pos im Stringpuffer
+ // Routinen fuer Compiler:
+ void MakeStrings( short ); // StringPool einrichten
+ void AddString( const String& );// String zufuegen
+ void AddCode( char*, UINT32 ); // Codeblock dazu
+ void AddType(SbxObject *); // User-Type mit aufnehmen
+ void AddEnum(SbxObject *); // Register enum type
+
+public:
+ String aName; // Makroname
+ ::rtl::OUString aOUSource; // Quellcode
+ String aComment; // Kommentar
+ BOOL bInit; // TRUE: Init-Code ist gelaufen
+ BOOL bFirstInit; // TRUE, wenn das Image das erste mal nach
+ // dem Compilieren initialisiert wird.
+ SbiImage();
+ ~SbiImage();
+ void Clear(); // Inhalt loeschen
+ BOOL Load( SvStream&, UINT32& nVer ); // Loads image from stream
+ // nVer is set to version
+ // of image
+ BOOL Load( SvStream& );
+ BOOL Save( SvStream&, UINT32 = B_CURVERSION );
+ BOOL IsError() { return bError; }
+
+ const char* GetCode() const { return pCode; }
+ UINT32 GetCodeSize() const { return nCodeSize; }
+ ::rtl::OUString& GetSource32() { return aOUSource; }
+ USHORT GetBase() const { return nDimBase; }
+ String GetString( short nId ) const;
+ //const char* GetString( short nId ) const;
+ const SbxObject* FindType (String aTypeName) const;
+
+ SbxArrayRef GetEnums() { return rEnums; }
+
+ void SetFlag( USHORT n ) { nFlags |= n; }
+ USHORT GetFlag( USHORT n ) const { return nFlags & n; }
+ UINT16 CalcLegacyOffset( INT32 nOffset );
+ UINT32 CalcNewOffset( INT16 nOffset );
+ void ReleaseLegacyBuffer();
+ BOOL ExceedsLegacyLimits();
+
+};
+
+#define SBIMG_EXPLICIT 0x0001 // OPTION EXPLICIT ist aktiv
+#define SBIMG_COMPARETEXT 0x0002 // OPTION COMPARE TEXT ist aktiv
+#define SBIMG_INITCODE 0x0004 // Init-Code vorhanden
+#define SBIMG_CLASSMODULE 0x0008 // OPTION ClassModule is active
+
+#endif
diff --git a/basic/source/inc/iosys.hxx b/basic/source/inc/iosys.hxx
new file mode 100644
index 000000000000..b0ebcb0e87f0
--- /dev/null
+++ b/basic/source/inc/iosys.hxx
@@ -0,0 +1,113 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _SBIOSYS_HXX
+#define _SBIOSYS_HXX
+
+#include <tools/stream.hxx>
+#ifndef _SBERRORS_HXX
+#include <basic/sberrors.hxx>
+#endif
+
+class SvStream;
+
+// Zur Zeit sind globale Dateien (Kanalnummern 256 bis 511)
+// nicht implementiert.
+
+#define CHANNELS 256
+#define CONSOLE 0
+
+#define SBSTRM_INPUT 0x0001 // Input
+#define SBSTRM_OUTPUT 0x0002 // Output
+#define SBSTRM_RANDOM 0x0004 // Random
+#define SBSTRM_APPEND 0x0008 // Append
+#define SBSTRM_BINARY 0x0010 // Binary
+
+class SbiStream {
+ SvStream* pStrm; // der Stream
+ ULONG nExpandOnWriteTo; // bei Schreibzugriff, den Stream
+ // bis zu dieser Groesse aufblasen
+ ByteString aLine; // aktuelle Zeile
+ ULONG nLine; // aktuelle Zeilennummer
+ short nLen; // Pufferlaenge
+ short nMode; // Bits:
+ short nChan; // aktueller Kanal
+ SbError nError; // letzter Fehlercode
+ void MapError(); // Fehlercode mappen
+
+public:
+ SbiStream();
+ ~SbiStream();
+ SbError Open( short, const ByteString&, short, short, short );
+ SbError Close();
+ SbError Read( ByteString&, USHORT = 0, bool bForceReadingPerByte=false );
+ SbError Read( char& );
+ SbError Write( const ByteString&, USHORT = 0 );
+
+ bool IsText() const { return (nMode & SBSTRM_BINARY) == 0; }
+ bool IsRandom() const { return (nMode & SBSTRM_RANDOM) != 0; }
+ bool IsBinary() const { return (nMode & SBSTRM_BINARY) != 0; }
+ bool IsSeq() const { return (nMode & SBSTRM_RANDOM) == 0; }
+ bool IsAppend() const { return (nMode & SBSTRM_APPEND) != 0; }
+ short GetBlockLen() const { return nLen; }
+ short GetMode() const { return nMode; }
+ ULONG GetLine() const { return nLine; }
+ void SetExpandOnWriteTo( ULONG n ) { nExpandOnWriteTo = n; }
+ void ExpandFile();
+ SvStream* GetStrm() { return pStrm; }
+};
+
+class SbiIoSystem {
+ SbiStream* pChan[ CHANNELS ];
+ ByteString aPrompt; // Input-Prompt
+ ByteString aIn, aOut; // Console-Buffer
+ short nChan; // aktueller Kanal
+ SbError nError; // letzter Fehlercode
+ void ReadCon( ByteString& );
+ void WriteCon( const ByteString& );
+public:
+ SbiIoSystem();
+ ~SbiIoSystem();
+ SbError GetError();
+ void Shutdown();
+ void SetPrompt( const ByteString& r ) { aPrompt = r; }
+ void SetChannel( short n ) { nChan = n; }
+ short GetChannel() const { return nChan;}
+ void ResetChannel() { nChan = 0; }
+ void Open( short, const ByteString&, short, short, short );
+ void Close();
+ void Read( ByteString&, short = 0 );
+ char Read();
+ void Write( const ByteString&, short = 0 );
+ short NextChannel();
+ // 0 == bad channel or no SvStream (nChannel=0..CHANNELS-1)
+ SbiStream* GetStream( short nChannel ) const;
+ void CloseAll(); // JSM
+};
+
+#endif
+
diff --git a/basic/source/inc/namecont.hxx b/basic/source/inc/namecont.hxx
new file mode 100644
index 000000000000..7fd6eb06f607
--- /dev/null
+++ b/basic/source/inc/namecont.hxx
@@ -0,0 +1,766 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef BASIC_NAMECONTAINER_HXX
+#define BASIC_NAMECONTAINER_HXX
+
+#include <hash_map>
+#include <com/sun/star/lang/XSingleServiceFactory.hpp>
+#include <com/sun/star/uno/XComponentContext.hpp>
+#include <com/sun/star/lang/XInitialization.hpp>
+#include <com/sun/star/script/XStorageBasedLibraryContainer.hpp>
+#include <com/sun/star/script/XLibraryContainerPassword.hpp>
+#include <com/sun/star/script/XLibraryContainerExport.hpp>
+#include <com/sun/star/script/XLibraryContainer3.hpp>
+#include <com/sun/star/container/XNameContainer.hpp>
+#include <com/sun/star/container/XContainer.hpp>
+#include <com/sun/star/ucb/XSimpleFileAccess.hpp>
+#include <com/sun/star/io/XOutputStream.hpp>
+#include <com/sun/star/io/XInputStream.hpp>
+#include <com/sun/star/util/XMacroExpander.hpp>
+#include <com/sun/star/util/XStringSubstitution.hpp>
+#include <com/sun/star/document/XStorageBasedDocument.hpp>
+#include <com/sun/star/lang/XServiceInfo.hpp>
+#include <com/sun/star/frame/XModel.hpp>
+#include <osl/mutex.hxx>
+#include <unotools/eventlisteneradapter.hxx>
+#include <cppuhelper/weakref.hxx>
+#include <cppuhelper/component.hxx>
+#include <cppuhelper/typeprovider.hxx>
+#include <cppuhelper/interfacecontainer.hxx>
+#include <cppuhelper/basemutex.hxx>
+#include <sot/storage.hxx>
+#include <xmlscript/xmllib_imexp.hxx>
+#include <com/sun/star/deployment/XPackage.hpp>
+
+#include <cppuhelper/implbase2.hxx>
+#include <cppuhelper/compbase8.hxx>
+#include <cppuhelper/interfacecontainer.hxx>
+#include <com/sun/star/script/vba/XVBACompatibility.hpp>
+
+class BasicManager;
+
+namespace basic
+{
+
+typedef ::cppu::WeakComponentImplHelper8<
+ ::com::sun::star::lang::XInitialization,
+ ::com::sun::star::script::XStorageBasedLibraryContainer,
+ ::com::sun::star::script::XLibraryContainerPassword,
+ ::com::sun::star::script::XLibraryContainerExport,
+ ::com::sun::star::script::XLibraryContainer3,
+ ::com::sun::star::container::XContainer,
+ ::com::sun::star::script::vba::XVBACompatibility,
+ ::com::sun::star::lang::XServiceInfo > LibraryContainerHelper;
+
+typedef ::cppu::WeakImplHelper2< ::com::sun::star::container::XNameContainer,
+ ::com::sun::star::container::XContainer > NameContainerHelper;
+
+
+struct hashName_Impl
+{
+ size_t operator()(const ::rtl::OUString Str) const
+ {
+ return (size_t)Str.hashCode();
+ }
+};
+
+struct eqName_Impl
+{
+ sal_Bool operator()(const ::rtl::OUString Str1, const ::rtl::OUString Str2) const
+ {
+ return ( Str1 == Str2 );
+ }
+};
+
+typedef std::hash_map
+<
+ ::rtl::OUString,
+ sal_Int32,
+ hashName_Impl,
+ eqName_Impl
+>
+NameContainerNameMap;
+
+
+//============================================================================
+
+class NameContainer : public ::cppu::BaseMutex, public NameContainerHelper
+{
+ NameContainerNameMap mHashMap;
+ ::com::sun::star::uno::Sequence< ::rtl::OUString > mNames;
+ ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any > mValues;
+ sal_Int32 mnElementCount;
+
+ ::com::sun::star::uno::Type mType;
+ ::com::sun::star::uno::XInterface* mpxEventSource;
+
+ ::cppu::OInterfaceContainerHelper maListenerContainer;
+
+public:
+ NameContainer( const ::com::sun::star::uno::Type& rType )
+ : mnElementCount( 0 )
+ , mType( rType )
+ , mpxEventSource( NULL )
+ , maListenerContainer( m_aMutex )
+ {}
+
+ void setEventSource( ::com::sun::star::uno::XInterface* pxEventSource )
+ { mpxEventSource = pxEventSource; }
+
+ // Methods XElementAccess
+ virtual ::com::sun::star::uno::Type SAL_CALL getElementType( )
+ throw(::com::sun::star::uno::RuntimeException);
+ virtual sal_Bool SAL_CALL hasElements( )
+ throw(::com::sun::star::uno::RuntimeException);
+
+ // Methods XNameAccess
+ virtual ::com::sun::star::uno::Any SAL_CALL getByName( const ::rtl::OUString& aName )
+ throw(::com::sun::star::container::NoSuchElementException,
+ ::com::sun::star::lang::WrappedTargetException,
+ ::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getElementNames( )
+ throw(::com::sun::star::uno::RuntimeException);
+ virtual sal_Bool SAL_CALL hasByName( const ::rtl::OUString& aName )
+ throw(::com::sun::star::uno::RuntimeException);
+
+ // Methods XNameReplace
+ virtual void SAL_CALL replaceByName( const ::rtl::OUString& aName, const ::com::sun::star::uno::Any& aElement )
+ throw(::com::sun::star::lang::IllegalArgumentException,
+ ::com::sun::star::container::NoSuchElementException,
+ ::com::sun::star::lang::WrappedTargetException,
+ ::com::sun::star::uno::RuntimeException);
+
+ // Methods XNameContainer
+ virtual void SAL_CALL insertByName( const ::rtl::OUString& aName, const ::com::sun::star::uno::Any& aElement )
+ throw(::com::sun::star::lang::IllegalArgumentException,
+ ::com::sun::star::container::ElementExistException,
+ ::com::sun::star::lang::WrappedTargetException,
+ ::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL removeByName( const ::rtl::OUString& Name )
+ throw(::com::sun::star::container::NoSuchElementException,
+ ::com::sun::star::lang::WrappedTargetException,
+ ::com::sun::star::uno::RuntimeException);
+
+ // Methods XContainer
+ virtual void SAL_CALL addContainerListener( const ::com::sun::star::uno::Reference<
+ ::com::sun::star::container::XContainerListener >& xListener )
+ throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL removeContainerListener( const ::com::sun::star::uno::Reference<
+ ::com::sun::star::container::XContainerListener >& xListener )
+ throw (::com::sun::star::uno::RuntimeException);
+};
+
+//============================================================================
+
+class SfxLibrary;
+
+enum InitMode
+{
+ DEFAULT,
+ CONTAINER_INIT_FILE,
+ LIBRARY_INIT_FILE,
+ OFFICE_DOCUMENT,
+ OLD_BASIC_STORAGE
+};
+
+class ModifiableHelper
+{
+private:
+ ::cppu::OInterfaceContainerHelper m_aModifyListeners;
+ ::cppu::OWeakObject& m_rEventSource;
+ sal_Bool mbModified;
+
+public:
+ ModifiableHelper( ::cppu::OWeakObject& _rEventSource, ::osl::Mutex& _rMutex )
+ :m_aModifyListeners( _rMutex )
+ ,m_rEventSource( _rEventSource )
+ ,mbModified( sal_False )
+ {
+ }
+
+ inline sal_Bool isModified() const { return mbModified; }
+ void setModified( sal_Bool _bModified );
+
+ inline void addModifyListener( const ::com::sun::star::uno::Reference< ::com::sun::star::util::XModifyListener >& _rxListener )
+ {
+ m_aModifyListeners.addInterface( _rxListener );
+ }
+
+ inline void removeModifyListener( const ::com::sun::star::uno::Reference< ::com::sun::star::util::XModifyListener >& _rxListener )
+ {
+ m_aModifyListeners.removeInterface( _rxListener );
+ }
+};
+
+class SfxLibraryContainer :public LibraryContainerHelper
+ ,public ::utl::OEventListenerAdapter
+{
+ sal_Bool mbVBACompat;
+protected:
+ ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > mxMSF;
+ ::com::sun::star::uno::Reference< ::com::sun::star::ucb::XSimpleFileAccess > mxSFI;
+ ::com::sun::star::uno::Reference< ::com::sun::star::util::XMacroExpander > mxMacroExpander;
+ ::com::sun::star::uno::Reference< ::com::sun::star::util::XStringSubstitution > mxStringSubstitution;
+ ::com::sun::star::uno::WeakReference< ::com::sun::star::frame::XModel > mxOwnerDocument;
+
+ ::osl::Mutex maMutex;
+ ModifiableHelper maModifiable;
+
+ NameContainer maNameContainer;
+ sal_Bool mbOldInfoFormat;
+ sal_Bool mbOasis2OOoFormat;
+
+ ::rtl::OUString maInitialDocumentURL;
+ ::rtl::OUString maInfoFileName;
+ ::rtl::OUString maOldInfoFileName;
+ ::rtl::OUString maLibElementFileExtension;
+ ::rtl::OUString maLibraryPath;
+ ::rtl::OUString maLibrariesDir;
+
+ ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage > mxStorage;
+ BasicManager* mpBasMgr;
+ sal_Bool mbOwnBasMgr;
+
+ InitMode meInitMode;
+
+ void implStoreLibrary( SfxLibrary* pLib,
+ const ::rtl::OUString& aName,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& xStorage );
+
+ // New variant for library export
+ void implStoreLibrary( SfxLibrary* pLib,
+ const ::rtl::OUString& aName,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& xStorage,
+ const ::rtl::OUString& aTargetURL,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::ucb::XSimpleFileAccess > xToUseSFI,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler >& xHandler );
+
+ void implStoreLibraryIndexFile( SfxLibrary* pLib, const ::xmlscript::LibDescriptor& rLib,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& xStorage );
+
+ // New variant for library export
+ void implStoreLibraryIndexFile( SfxLibrary* pLib, const ::xmlscript::LibDescriptor& rLib,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& xStorage,
+ const ::rtl::OUString& aTargetURL,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::ucb::XSimpleFileAccess > xToUseSFI );
+
+ sal_Bool implLoadLibraryIndexFile( SfxLibrary* pLib,
+ ::xmlscript::LibDescriptor& rLib,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& xStorage,
+ const ::rtl::OUString& aIndexFileName );
+
+ void implImportLibDescriptor( SfxLibrary* pLib, ::xmlscript::LibDescriptor& rLib );
+
+ // Methods to distinguish between deffirent library types
+ virtual SfxLibrary* SAL_CALL implCreateLibrary( const ::rtl::OUString& aName ) = 0;
+ virtual SfxLibrary* SAL_CALL implCreateLibraryLink
+ ( const ::rtl::OUString& aName, const ::rtl::OUString& aLibInfoFileURL,
+ const ::rtl::OUString& StorageURL, sal_Bool ReadOnly ) = 0;
+ virtual ::com::sun::star::uno::Any SAL_CALL createEmptyLibraryElement( void ) = 0;
+ virtual bool SAL_CALL isLibraryElementValid( ::com::sun::star::uno::Any aElement ) const = 0;
+ virtual void SAL_CALL writeLibraryElement
+ (
+ const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer>& xLibrary,
+ const ::rtl::OUString& aElementName,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::io::XOutputStream >& xOutput
+ )
+ throw(::com::sun::star::uno::Exception) = 0;
+
+ virtual ::com::sun::star::uno::Any SAL_CALL importLibraryElement
+ (
+ const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer>& xLibrary,
+ const ::rtl::OUString& aElementName,
+ const ::rtl::OUString& aFile,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream >& xElementStream ) = 0;
+ virtual void SAL_CALL importFromOldStorage( const ::rtl::OUString& aFile ) = 0;
+
+ // Password encryption
+ virtual sal_Bool implStorePasswordLibrary( SfxLibrary* pLib, const ::rtl::OUString& aName,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& xStorage, const ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler >& Handler );
+
+ // New variant for library export
+ virtual sal_Bool implStorePasswordLibrary( SfxLibrary* pLib, const ::rtl::OUString& aName,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& xStorage,
+ const ::rtl::OUString& aTargetURL,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::ucb::XSimpleFileAccess > xToUseSFI, const ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler >& Handler );
+
+ virtual sal_Bool implLoadPasswordLibrary( SfxLibrary* pLib, const ::rtl::OUString& Name,
+ sal_Bool bVerifyPasswordOnly=false )
+ throw(::com::sun::star::lang::WrappedTargetException,
+ ::com::sun::star::uno::RuntimeException);
+
+ virtual void onNewRootStorage() = 0;
+
+
+ // #56666, Creates another library container
+ // instance of the same derived class
+ virtual SfxLibraryContainer* createInstanceImpl( void ) = 0;
+
+
+ // Interface to get the BasicManager (Hack for password implementation)
+ BasicManager* getBasicManager( void );
+ ::rtl::OUString createAppLibraryFolder( SfxLibrary* pLib, const ::rtl::OUString& aName );
+
+ sal_Bool init( const ::rtl::OUString& rInitialDocumentURL,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& _rxInitialStorage );
+
+ virtual const sal_Char* SAL_CALL getInfoFileName() const = 0;
+ virtual const sal_Char* SAL_CALL getOldInfoFileName() const = 0;
+ virtual const sal_Char* SAL_CALL getLibElementFileExtension() const = 0;
+ virtual const sal_Char* SAL_CALL getLibrariesDir() const = 0;
+
+ // Handle maLibInfoFileURL and maStorageURL correctly
+ void checkStorageURL
+ (
+ const ::rtl::OUString& aSourceURL,
+ ::rtl::OUString& aLibInfoFileURL,
+ ::rtl::OUString& aStorageURL,
+ ::rtl::OUString& aUnexpandedStorageURL
+ );
+ ::rtl::OUString expand_url( const ::rtl::OUString& url )
+ throw(::com::sun::star::uno::RuntimeException);
+
+ SfxLibrary* getImplLib( const String& rLibraryName );
+
+ void storeLibraries_Impl(
+ const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& xStorage,
+ sal_Bool bComplete );
+
+ void SAL_CALL initializeFromDocumentURL( const ::rtl::OUString& _rInitialDocumentURL );
+ void SAL_CALL initializeFromDocument( const ::com::sun::star::uno::Reference< ::com::sun::star::document::XStorageBasedDocument >& _rxDocument );
+
+ // OEventListenerAdapter
+ virtual void _disposing( const ::com::sun::star::lang::EventObject& _rSource );
+
+ // OComponentHelper
+ virtual void SAL_CALL disposing();
+
+private:
+ sal_Bool init_Impl( const ::rtl::OUString& rInitialDocumentURL,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& _rxInitialStorage );
+ void implScanExtensions( void );
+
+public:
+ SfxLibraryContainer( void );
+ ~SfxLibraryContainer();
+
+
+ // Interface to set the BasicManager (Hack for password implementation)
+ void setBasicManager( BasicManager* pBasMgr )
+ {
+ mpBasMgr = pBasMgr;
+ }
+
+ void enterMethod();
+ void leaveMethod();
+ bool isDisposed() const { return rBHelper.bInDispose || rBHelper.bDisposed; }
+ void checkDisposed() const;
+
+ // Methods XElementAccess
+ virtual ::com::sun::star::uno::Type SAL_CALL getElementType()
+ throw(::com::sun::star::uno::RuntimeException);
+ virtual sal_Bool SAL_CALL hasElements()
+ throw(::com::sun::star::uno::RuntimeException);
+
+ // Methods XNameAccess
+ virtual ::com::sun::star::uno::Any SAL_CALL getByName( const ::rtl::OUString& aName )
+ throw(::com::sun::star::container::NoSuchElementException,
+ ::com::sun::star::lang::WrappedTargetException,
+ ::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getElementNames()
+ throw(::com::sun::star::uno::RuntimeException);
+ virtual sal_Bool SAL_CALL hasByName( const ::rtl::OUString& aName )
+ throw(::com::sun::star::uno::RuntimeException);
+
+ // Members XStorageBasedLibraryContainer
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage > SAL_CALL getRootStorage() throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL setRootStorage( const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& _rootstorage ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL storeLibrariesToStorage( const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& RootStorage ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException);
+
+ // Methods XModifiable (base of XPersistentLibraryContainer)
+ virtual ::sal_Bool SAL_CALL isModified( ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL setModified( ::sal_Bool bModified ) throw (::com::sun::star::beans::PropertyVetoException, ::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL addModifyListener( const ::com::sun::star::uno::Reference< ::com::sun::star::util::XModifyListener >& aListener ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL removeModifyListener( const ::com::sun::star::uno::Reference< ::com::sun::star::util::XModifyListener >& aListener ) throw (::com::sun::star::uno::RuntimeException);
+
+ // Methods XPersistentLibraryContainer (base of XStorageBasedLibraryContainer)
+ virtual ::com::sun::star::uno::Any SAL_CALL getRootLocation() throw (::com::sun::star::uno::RuntimeException);
+ virtual ::rtl::OUString SAL_CALL getContainerLocationName() throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL storeLibraries( ) throw (::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException);
+
+ //Methods XLibraryContainer3
+ virtual ::rtl::OUString SAL_CALL getOriginalLibraryLinkURL( const ::rtl::OUString& Name )
+ throw (::com::sun::star::lang::IllegalArgumentException,
+ ::com::sun::star::container::NoSuchElementException,
+ ::com::sun::star::uno::RuntimeException);
+
+ // Methods XLibraryContainer2 (base of XPersistentLibraryContainer)
+ virtual sal_Bool SAL_CALL isLibraryLink( const ::rtl::OUString& Name )
+ throw (::com::sun::star::container::NoSuchElementException,
+ ::com::sun::star::uno::RuntimeException);
+ virtual ::rtl::OUString SAL_CALL getLibraryLinkURL( const ::rtl::OUString& Name )
+ throw (::com::sun::star::lang::IllegalArgumentException,
+ ::com::sun::star::container::NoSuchElementException,
+ ::com::sun::star::uno::RuntimeException);
+ virtual sal_Bool SAL_CALL isLibraryReadOnly( const ::rtl::OUString& Name )
+ throw (::com::sun::star::container::NoSuchElementException,
+ ::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL setLibraryReadOnly( const ::rtl::OUString& Name, sal_Bool bReadOnly )
+ throw (::com::sun::star::container::NoSuchElementException,
+ ::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL renameLibrary( const ::rtl::OUString& Name, const ::rtl::OUString& NewName )
+ throw (::com::sun::star::container::NoSuchElementException,
+ ::com::sun::star::container::ElementExistException,
+ ::com::sun::star::uno::RuntimeException);
+
+ // Methods XLibraryContainer (base of XLibraryContainer2)
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer > SAL_CALL
+ createLibrary( const ::rtl::OUString& Name )
+ throw(::com::sun::star::lang::IllegalArgumentException,
+ ::com::sun::star::container::ElementExistException,
+ ::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess > SAL_CALL createLibraryLink
+ ( const ::rtl::OUString& Name, const ::rtl::OUString& StorageURL, sal_Bool ReadOnly )
+ throw(::com::sun::star::lang::IllegalArgumentException,
+ ::com::sun::star::container::ElementExistException,
+ ::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL removeLibrary( const ::rtl::OUString& Name )
+ throw(::com::sun::star::container::NoSuchElementException,
+ ::com::sun::star::lang::WrappedTargetException,
+ ::com::sun::star::uno::RuntimeException);
+ virtual sal_Bool SAL_CALL isLibraryLoaded( const ::rtl::OUString& Name )
+ throw(::com::sun::star::container::NoSuchElementException,
+ ::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL loadLibrary( const ::rtl::OUString& Name )
+ throw(::com::sun::star::container::NoSuchElementException,
+ ::com::sun::star::lang::WrappedTargetException,
+ ::com::sun::star::uno::RuntimeException);
+
+ // Methods XInitialization
+ virtual void SAL_CALL initialize( const ::com::sun::star::uno::Sequence<
+ ::com::sun::star::uno::Any >& aArguments )
+ throw (::com::sun::star::uno::Exception,
+ ::com::sun::star::uno::RuntimeException);
+
+ // Methods XLibraryContainerPassword
+ virtual sal_Bool SAL_CALL isLibraryPasswordProtected( const ::rtl::OUString& Name )
+ throw (::com::sun::star::container::NoSuchElementException,
+ ::com::sun::star::uno::RuntimeException);
+ virtual sal_Bool SAL_CALL isLibraryPasswordVerified( const ::rtl::OUString& Name )
+ throw (::com::sun::star::lang::IllegalArgumentException,
+ ::com::sun::star::container::NoSuchElementException,
+ ::com::sun::star::uno::RuntimeException);
+ virtual sal_Bool SAL_CALL verifyLibraryPassword( const ::rtl::OUString& Name, const ::rtl::OUString& Password )
+ throw (::com::sun::star::lang::IllegalArgumentException,
+ ::com::sun::star::container::NoSuchElementException,
+ ::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL changeLibraryPassword( const ::rtl::OUString& Name,
+ const ::rtl::OUString& OldPassword, const ::rtl::OUString& NewPassword )
+ throw (::com::sun::star::lang::IllegalArgumentException,
+ ::com::sun::star::container::NoSuchElementException,
+ ::com::sun::star::uno::RuntimeException);
+
+ // Methods XContainer
+ virtual void SAL_CALL addContainerListener( const ::com::sun::star::uno::Reference<
+ ::com::sun::star::container::XContainerListener >& xListener )
+ throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL removeContainerListener( const ::com::sun::star::uno::Reference<
+ ::com::sun::star::container::XContainerListener >& xListener )
+ throw (::com::sun::star::uno::RuntimeException);
+
+ // Methods XLibraryContainerExport
+ virtual void SAL_CALL exportLibrary( const ::rtl::OUString& Name, const ::rtl::OUString& URL,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler >& Handler )
+ throw (::com::sun::star::uno::Exception,
+ ::com::sun::star::container::NoSuchElementException,
+ ::com::sun::star::uno::RuntimeException);
+
+ // Methods XServiceInfo
+ virtual ::rtl::OUString SAL_CALL getImplementationName( )
+ throw (::com::sun::star::uno::RuntimeException) = 0;
+ virtual ::sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName )
+ throw (::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames( )
+ throw (::com::sun::star::uno::RuntimeException) = 0;
+ // Methods XVBACompatibility
+ virtual ::sal_Bool SAL_CALL getVBACompatibilityMode() throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL setVBACompatibilityMode( ::sal_Bool _vbacompatmodeon ) throw (::com::sun::star::uno::RuntimeException);
+};
+
+class LibraryContainerMethodGuard
+{
+private:
+ SfxLibraryContainer& m_rContainer;
+public:
+ LibraryContainerMethodGuard( SfxLibraryContainer& _rContainer )
+ :m_rContainer( _rContainer )
+ {
+ m_rContainer.enterMethod();
+ }
+
+ ~LibraryContainerMethodGuard()
+ {
+ m_rContainer.leaveMethod();
+ }
+};
+
+
+//============================================================================
+
+class SfxLibrary
+ : public ::com::sun::star::container::XNameContainer
+ , public ::com::sun::star::container::XContainer
+ , public ::cppu::BaseMutex
+ , public ::cppu::OComponentHelper
+{
+ friend class SfxLibraryContainer;
+ friend class SfxDialogLibraryContainer;
+ friend class SfxScriptLibraryContainer;
+
+ ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > mxMSF;
+ ::com::sun::star::uno::Reference< ::com::sun::star::ucb::XSimpleFileAccess > mxSFI;
+
+ ModifiableHelper& mrModifiable;
+ NameContainer maNameContainer;
+
+ sal_Bool mbLoaded;
+ sal_Bool mbIsModified;
+ sal_Bool mbInitialised;
+
+private:
+
+ ::rtl::OUString maLibElementFileExtension;
+ ::rtl::OUString maLibInfoFileURL;
+ ::rtl::OUString maStorageURL;
+ ::rtl::OUString maUnexpandedStorageURL;
+ ::rtl::OUString maOrignialStorageURL;
+
+ sal_Bool mbLink;
+ sal_Bool mbReadOnly;
+ sal_Bool mbReadOnlyLink;
+ sal_Bool mbPreload;
+
+ sal_Bool mbPasswordProtected;
+ sal_Bool mbPasswordVerified;
+ sal_Bool mbDoc50Password;
+ ::rtl::OUString maPassword;
+
+ sal_Bool mbSharedIndexFile;
+ sal_Bool mbExtension;
+
+ // Additional functionality for localisation
+ // Provide modify state including resources
+ virtual sal_Bool isModified( void ) = 0;
+ virtual void storeResources( void ) = 0;
+ virtual void storeResourcesAsURL( const ::rtl::OUString& URL, const ::rtl::OUString& NewName ) = 0;
+ virtual void storeResourcesToURL( const ::rtl::OUString& URL,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler >& xHandler ) = 0;
+ virtual void storeResourcesToStorage( const ::com::sun::star::uno::Reference
+ < ::com::sun::star::embed::XStorage >& xStorage ) = 0;
+
+protected:
+ inline sal_Bool implIsModified() const { return mbIsModified; }
+ void implSetModified( sal_Bool _bIsModified );
+
+private:
+ /** checks whether the lib is readonly, or a readonly link, throws an IllegalArgumentException if so
+ */
+ void impl_checkReadOnly();
+ /** checks whether the library is loaded, throws a LibraryNotLoadedException (wrapped in a WrappedTargetException),
+ if not.
+ */
+ void impl_checkLoaded();
+
+private:
+ void impl_removeWithoutChecks( const ::rtl::OUString& _rElementName );
+
+public:
+ SfxLibrary(
+ ModifiableHelper& _rModifiable,
+ const ::com::sun::star::uno::Type& aType,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xMSF,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::ucb::XSimpleFileAccess >& xSFI
+ );
+ SfxLibrary(
+ ModifiableHelper& _rModifiable,
+ const ::com::sun::star::uno::Type& aType,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xMSF,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::ucb::XSimpleFileAccess >& xSFI,
+ const ::rtl::OUString& aLibInfoFileURL,
+ const ::rtl::OUString&
+ aStorageURL,
+ sal_Bool ReadOnly
+ );
+
+ // Methods XInterface
+ virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( const ::com::sun::star::uno::Type& rType ) throw( ::com::sun::star::uno::RuntimeException );
+ virtual void SAL_CALL acquire() throw() { OComponentHelper::acquire(); }
+ virtual void SAL_CALL release() throw() { OComponentHelper::release(); }
+
+ // Methods XElementAccess
+ virtual ::com::sun::star::uno::Type SAL_CALL getElementType( )
+ throw(::com::sun::star::uno::RuntimeException);
+ virtual sal_Bool SAL_CALL hasElements( )
+ throw(::com::sun::star::uno::RuntimeException);
+
+ // Methods XNameAccess
+ virtual ::com::sun::star::uno::Any SAL_CALL getByName( const ::rtl::OUString& aName )
+ throw(::com::sun::star::container::NoSuchElementException,
+ ::com::sun::star::lang::WrappedTargetException,
+ ::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getElementNames( )
+ throw(::com::sun::star::uno::RuntimeException);
+ virtual sal_Bool SAL_CALL hasByName( const ::rtl::OUString& aName )
+ throw(::com::sun::star::uno::RuntimeException);
+
+ // Methods XNameReplace
+ virtual void SAL_CALL replaceByName( const ::rtl::OUString& aName, const ::com::sun::star::uno::Any& aElement )
+ throw(::com::sun::star::lang::IllegalArgumentException,
+ ::com::sun::star::container::NoSuchElementException,
+ ::com::sun::star::lang::WrappedTargetException,
+ ::com::sun::star::uno::RuntimeException);
+
+ // Methods XNameContainer
+ virtual void SAL_CALL insertByName( const ::rtl::OUString& aName, const ::com::sun::star::uno::Any& aElement )
+ throw(::com::sun::star::lang::IllegalArgumentException,
+ ::com::sun::star::container::ElementExistException,
+ ::com::sun::star::lang::WrappedTargetException,
+ ::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL removeByName( const ::rtl::OUString& Name )
+ throw(::com::sun::star::container::NoSuchElementException,
+ ::com::sun::star::lang::WrappedTargetException,
+ ::com::sun::star::uno::RuntimeException);
+
+ // XTypeProvider
+ ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes( )
+ throw( ::com::sun::star::uno::RuntimeException );
+ ::com::sun::star::uno::Sequence<sal_Int8> SAL_CALL getImplementationId( )
+ throw( ::com::sun::star::uno::RuntimeException );
+
+ // Methods XContainer
+ virtual void SAL_CALL addContainerListener( const ::com::sun::star::uno::Reference<
+ ::com::sun::star::container::XContainerListener >& xListener )
+ throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL removeContainerListener( const ::com::sun::star::uno::Reference<
+ ::com::sun::star::container::XContainerListener >& xListener )
+ throw (::com::sun::star::uno::RuntimeException);
+
+public:
+ struct LibraryContainerAccess { friend class SfxLibraryContainer; private: LibraryContainerAccess() { } };
+ void removeElementWithoutChecks( const ::rtl::OUString& _rElementName, LibraryContainerAccess )
+ {
+ impl_removeWithoutChecks( _rElementName );
+ }
+
+protected:
+ virtual bool SAL_CALL isLibraryElementValid( ::com::sun::star::uno::Any aElement ) const = 0;
+};
+
+//===================================================================
+class ScriptSubPackageIterator
+{
+ com::sun::star::uno::Reference< com::sun::star::deployment::XPackage > m_xMainPackage;
+
+ bool m_bIsValid;
+ bool m_bIsBundle;
+
+ com::sun::star::uno::Sequence< com::sun::star::uno::Reference
+ < com::sun::star::deployment::XPackage > > m_aSubPkgSeq;
+ sal_Int32 m_nSubPkgCount;
+ sal_Int32 m_iNextSubPkg;
+
+ com::sun::star::uno::Reference< com::sun::star::deployment::XPackage >
+ implDetectScriptPackage( const com::sun::star::uno::Reference
+ < com::sun::star::deployment::XPackage > xPackage, bool& rbPureDialogLib );
+
+public:
+ ScriptSubPackageIterator( com::sun::star::uno::Reference< com::sun::star::deployment::XPackage > xMainPackage );
+
+ com::sun::star::uno::Reference< com::sun::star::deployment::XPackage > getNextScriptSubPackage( bool& rbPureDialogLib );
+};
+
+enum IteratorState
+{
+ USER_EXTENSIONS,
+ SHARED_EXTENSIONS,
+ BUNDLED_EXTENSIONS,
+ END_REACHED
+};
+
+class ScriptExtensionIterator
+{
+public:
+ ScriptExtensionIterator( void );
+ rtl::OUString nextBasicOrDialogLibrary( bool& rbPureDialogLib );
+
+private:
+ com::sun::star::uno::Reference< com::sun::star::deployment::XPackage > implGetScriptPackageFromPackage
+ ( const com::sun::star::uno::Reference< com::sun::star::deployment::XPackage > xPackage,
+ bool& rbPureDialogLib );
+
+protected:
+ com::sun::star::uno::Reference< com::sun::star::deployment::XPackage >
+ implGetNextUserScriptPackage( bool& rbPureDialogLib );
+ com::sun::star::uno::Reference< com::sun::star::deployment::XPackage >
+ implGetNextSharedScriptPackage( bool& rbPureDialogLib );
+ com::sun::star::uno::Reference< com::sun::star::deployment::XPackage >
+ implGetNextBundledScriptPackage( bool& rbPureDialogLib );
+
+ com::sun::star::uno::Reference< com::sun::star::uno::XComponentContext > m_xContext;
+
+ IteratorState m_eState;
+
+ com::sun::star::uno::Sequence< com::sun::star::uno::Reference
+ < com::sun::star::deployment::XPackage > > m_aUserPackagesSeq;
+ bool m_bUserPackagesLoaded;
+
+ com::sun::star::uno::Sequence< com::sun::star::uno::Reference
+ < com::sun::star::deployment::XPackage > > m_aSharedPackagesSeq;
+ bool m_bSharedPackagesLoaded;
+
+ com::sun::star::uno::Sequence< com::sun::star::uno::Reference
+ < com::sun::star::deployment::XPackage > > m_aBundledPackagesSeq;
+ bool m_bBundledPackagesLoaded;
+
+
+ int m_iUserPackage;
+ int m_iSharedPackage;
+ int m_iBundledPackage;
+
+
+
+ ScriptSubPackageIterator* m_pScriptSubPackageIterator;
+
+}; // end class ScriptExtensionIterator
+
+
+
+} // namespace basic
+
+#endif
+
diff --git a/basic/source/inc/object.hxx b/basic/source/inc/object.hxx
new file mode 100644
index 000000000000..29e4f68cc133
--- /dev/null
+++ b/basic/source/inc/object.hxx
@@ -0,0 +1,100 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _SAMPLE_OBJECT_HXX
+#define _SAMPLE_OBJECT_HXX
+
+#include <basic/sbxfac.hxx>
+#ifndef __SBX_SBXVARIABLE_HXX //autogen
+#include <basic/sbxvar.hxx>
+#endif
+#include <basic/sbxobj.hxx>
+
+// 1) Properties:
+// Name der Name, R/O
+// Value ein double-Wert, R/W
+// 2) Methoden:
+// Display Ausgabe eines Textes
+// Square Argument * Argument
+// Event Aufruf eines Basic-Programms
+// 3) Unterobjekte:
+// eine Collection names "Elements". Der Zugriff ist sowohl als
+// Property (fuer das gesamte Objekt) als auch als Methode (fuer
+// einzelne Elemente, wird durchgereicht) implementiert.
+// Diese Implementation ist ein Beispiel fuer eine tabellengesteuerte
+// Version, die sehr viele Elemente enthalten kann.
+// Die Collection findet sich in COLLECTN.*, die in der Collection
+// enthaltenen Objekte in COLLELEM.*
+
+class SampleObject : public SbxObject
+{
+using SbxVariable::GetInfo;
+ // Definition eines Tabelleneintrags. Dies wird hier gemacht,
+ // da dadurch die Methoden und Properties als private deklariert
+ // werden koennen.
+#if defined ( ICC ) || defined ( HPUX ) || defined ( C50 ) || defined ( C52 )
+public:
+#endif
+ typedef void( SampleObject::*pMeth )
+ ( SbxVariable* pThis, SbxArray* pArgs, BOOL bWrite );
+#if defined ( ICC ) || defined ( HPUX )
+private:
+#endif
+
+ struct Methods {
+ const char* pName; // Name des Eintrags
+ SbxDataType eType; // Datentyp
+ pMeth pFunc; // Function Pointer
+ short nArgs; // Argumente und Flags
+ };
+ static Methods aMethods[]; // Methodentabelle
+
+ // Methoden
+ void Display( SbxVariable*, SbxArray*, BOOL );
+ void Event( SbxVariable*, SbxArray*, BOOL );
+ void Square( SbxVariable*, SbxArray*, BOOL );
+ void Create( SbxVariable*, SbxArray*, BOOL );
+ // Infoblock auffuellen
+ SbxInfo* GetInfo( short nIdx );
+ // Broadcaster Notification
+ virtual void SFX_NOTIFY( SfxBroadcaster& rBC, const TypeId& rBCType,
+ const SfxHint& rHint, const TypeId& rHintType );
+public:
+ SampleObject( const String& );
+ // Suchen eines Elements
+ virtual SbxVariable* Find( const String&, SbxClassType );
+};
+
+// Die dazugehoerige Factory:
+
+class SampleObjectFac : public SbxFactory
+{
+public:
+ virtual SbxObject* CreateObject( const String& );
+};
+
+#endif
diff --git a/basic/source/inc/opcodes.hxx b/basic/source/inc/opcodes.hxx
new file mode 100644
index 000000000000..ff7eff027f83
--- /dev/null
+++ b/basic/source/inc/opcodes.hxx
@@ -0,0 +1,172 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _OPCODES_HXX
+#define _OPCODES_HXX
+
+#include "sbintern.hxx"
+
+#ifdef MTW
+#undef _NUMBER
+#endif
+
+// Ein Opcode ist entweder 1, 3 oder 5 Bytes lang, je nach numerischen
+// Wert des Opcodes (s.u.).
+
+enum SbiOpcode {
+ // Alle Opcodes ohne Operanden
+ _NOP = 0,
+
+ SbOP0_START = _NOP,
+
+ // Operatoren
+ // die folgenden Operatoren sind genauso angeordnet
+ // wie der enum SbxVarOp
+ _EXP, _MUL, _DIV, _MOD, _PLUS, _MINUS, _NEG,
+ _EQ, _NE, _LT, _GT, _LE, _GE,
+ _IDIV, _AND, _OR, _XOR, _EQV, _IMP, _NOT,
+ _CAT,
+ // Ende enum SbxVarOp
+ _LIKE, _IS,
+ // Laden/speichern
+ _ARGC, // neuen Argv einrichten
+ _ARGV, // TOS ==> aktueller Argv
+ _INPUT, // Input ==> TOS
+ _LINPUT, // Line Input ==> TOS
+ _GET, // TOS anfassen
+ _SET, // Speichern Objekt TOS ==> TOS-1
+ _PUT, // TOS ==> TOS-1
+ _PUTC, // TOS ==> TOS-1, dann ReadOnly
+ _DIM, // DIM
+ _REDIM, // REDIM
+ _REDIMP, // REDIM PRESERVE
+ _ERASE, // TOS loeschen
+ // Verzweigen
+ _STOP, // Programmende
+ _INITFOR, // FOR-Variable initialisieren
+ _NEXT, // FOR-Variable inkrementieren
+ _CASE, // Anfang CASE
+ _ENDCASE, // Ende CASE
+ _STDERROR, // Standard-Fehlerbehandlung
+ _NOERROR, // keine Fehlerbehandlung
+ _LEAVE, // UP verlassen
+ // E/A
+ _CHANNEL, // TOS = Kanalnummer
+ _BPRINT, // print TOS
+ _PRINTF, // print TOS in field
+ _BWRITE, // write TOS
+ _RENAME, // Rename Tos+1 to Tos
+ _PROMPT, // TOS = Prompt for Input
+ _RESTART, // Restartpunkt definieren
+ _CHAN0, // I/O-Kanal 0
+ // Sonstiges
+ _EMPTY, // Leeren Ausdruck auf Stack
+ _ERROR, // TOS = Fehlercode
+ _LSET, // Speichern Objekt TOS ==> TOS-1
+ _RSET, // Speichern Objekt TOS ==> TOS-1
+ _REDIMP_ERASE, // Copies array to be later used by REDIM PRESERVE before erasing it
+ _INITFOREACH,
+ _VBASET, // VBA-like Set
+ _ERASE_CLEAR, // Erase array and clear variable
+ _ARRAYACCESS, // Assign parameters to TOS and get value, used for array of arrays
+ _BYVAL, // byref -> byval for lvalue parameter passed in call
+ SbOP0_END,
+
+ // Alle Opcodes mit einem Operanden
+
+ _NUMBER = 0x40, // Laden einer numerischen Konstanten (+ID)
+
+ SbOP1_START = _NUMBER,
+
+ _SCONST, // Laden einer Stringkonstanten (+ID)
+ _CONST, // Immediate Load (+Wert)
+ _ARGN, // Speichern eines named Args in Argv (+StringID)
+ _PAD, // String auf feste Laenge bringen (+Laenge)
+ // Verzweigungen
+ _JUMP, // Sprung (+Target)
+ _JUMPT, // TOS auswerten, bedingter Sprung (+Target)
+ _JUMPF, // TOS auswerten, bedingter Sprung (+Target)
+ _ONJUMP, // TOS auswerten, Sprung in JUMP-Tabelle (+MaxVal)
+ _GOSUB, // UP-Aufruf (+Target)
+ _RETURN, // UP-Return (+0 oder Target)
+ _TESTFOR, // FOR-Variable testen, inkrementieren (+Endlabel)
+ _CASETO, // Tos+1 <= Case <= Tos, 2xremove (+Target)
+ _ERRHDL, // Fehler-Handler (+Offset)
+ _RESUME, // Resume nach Fehlern (+0 or 1 or Label)
+ // E/A
+ _CLOSE, // (+Kanal/0)
+ _PRCHAR, // (+char)
+ // Verwaltung
+ _SETCLASS, // Set + Klassennamen testen (+StringId)
+ _TESTCLASS, // Check TOS class (+StringId)
+ _LIB, // Libnamen fuer Declare-Procs setzen (+StringId)
+ _BASED, // TOS wird um BASE erhoeht, BASE davor gepusht (+base)
+ // Typanpassung im Argv
+ _ARGTYP, // Letzten Parameter in Argv konvertieren (+Typ)
+ _VBASETCLASS, // VBA-like Set
+ SbOP1_END,
+
+ // Alle Opcodes mit zwei Operanden
+
+ _RTL = 0x80, // Laden aus RTL (+StringID+Typ)
+
+ SbOP2_START = _RTL,
+
+ _FIND, // Laden (+StringID+Typ)
+ _ELEM, // Laden Element (+StringID+Typ)
+ _PARAM, // Parameter (+Offset+Typ)
+ // Verzweigen
+ _CALL, // DECLARE-Methode rufen (+StringID+Typ)
+ _CALLC, // Cdecl-DECLARE-Methode rufen (+StringID+Typ)
+ _CASEIS, // Case-Test (+Test-Opcode+True-Target)
+ // Verwaltung
+ _STMNT, // Beginn eines Statements (+Line+Col)
+ // E/A
+ _OPEN, // (+SvStreamFlags+Flags)
+ // Objekte
+ _LOCAL, // Lokale Variable definieren (+StringID+Typ)
+ _PUBLIC, // Modulglobale Variable (+StringID+Typ)
+ _GLOBAL, // Globale Variable definieren, public-Anweisung (+StringID+Typ)
+ _CREATE, // Objekt kreieren (+StringId+StringID)
+ _STATIC, // Statische Variabl (+StringID+Typ) JSM
+ _TCREATE, // User Defined Objekt kreieren
+ _DCREATE, // Objekt-Array kreieren (+StringId+StringID)
+ _GLOBAL_P, // Globale Variable definieren, die beim Neustart von Basic
+ // nicht ueberschrieben wird, P=PERSIST (+StringID+Typ)
+ _FIND_G, // Sucht globale Variable mit Spezialbehandlung wegen _GLOBAL_P
+ _DCREATE_REDIMP, // Objekt-Array redimensionieren (+StringId+StringID)
+ _FIND_CM, // Search inside a class module (CM) to enable global search in time
+ _PUBLIC_P, // Module global Variable (persisted between calls)(+StringID+Typ)
+ _FIND_STATIC, // local static var lookup (+StringID+Typ)
+
+ SbOP2_END
+
+};
+
+
+
+#endif
diff --git a/basic/source/inc/parser.hxx b/basic/source/inc/parser.hxx
new file mode 100644
index 000000000000..733a65db7f61
--- /dev/null
+++ b/basic/source/inc/parser.hxx
@@ -0,0 +1,153 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _PARSER_HXX
+#define _PARSER_HXX
+
+#include "expr.hxx"
+#include "codegen.hxx"
+#include "symtbl.hxx"
+
+
+#include <vector>
+typedef ::std::vector< String > StringVector;
+
+struct SbiParseStack;
+
+class SbiParser : public SbiTokenizer
+{
+ friend class SbiExpression;
+
+ SbiParseStack* pStack; // Block-Stack
+ SbiProcDef* pProc; // aktuelle Prozedur
+ SbiExprNode* pWithVar; // aktuelle With-Variable
+ SbiToken eEndTok; // das Ende-Token
+ UINT32 nGblChain; // Chainkette fuer globale DIMs
+ BOOL bGblDefs; // TRUE globale Definitionen allgemein
+ BOOL bNewGblDefs; // TRUE globale Definitionen vor Sub
+ BOOL bSingleLineIf; // TRUE einzeiliges if-Statement
+
+ SbiSymDef* VarDecl( SbiDimList**,BOOL,BOOL );// Variablen-Deklaration
+ SbiProcDef* ProcDecl(BOOL bDecl);// Prozedur-Deklaration
+ void DefStatic( BOOL bPrivate );
+ void DefProc( BOOL bStatic, BOOL bPrivate ); // Prozedur einlesen
+ void DefVar( SbiOpcode eOp, BOOL bStatic ); // DIM/REDIM einlesen
+ void TypeDecl( SbiSymDef&, BOOL bAsNewAlreadyParsed=FALSE ); // AS-Deklaration
+ void OpenBlock( SbiToken, SbiExprNode* = NULL ); // Block oeffnen
+ void CloseBlock(); // Block aufloesen
+ BOOL Channel( BOOL=FALSE ); // Kanalnummer parsen
+ void StmntBlock( SbiToken ); // Statement-Block abarbeiten
+ void DefType( BOOL bPrivate ); // Parse type declaration
+ void DefEnum( BOOL bPrivate ); // Parse enum declaration
+ void DefDeclare( BOOL bPrivate );
+ void EnableCompatibility();
+public:
+ SbxArrayRef rTypeArray; // das Type-Array
+ SbxArrayRef rEnumArray; // Enum types
+ SbiStringPool aGblStrings; // der String-Pool
+ SbiStringPool aLclStrings; // der String-Pool
+ SbiSymPool aGlobals; // globale Variable
+ SbiSymPool aPublics; // modulglobale Variable
+ SbiSymPool aRtlSyms; // Runtime-Library
+ SbiCodeGen aGen; // Code-Generator
+ StarBASIC* pBasic; // StarBASIC-Instanz
+ SbiSymPool* pPool; // aktueller Pool
+ SbiExprType eCurExpr; // aktueller Expr-Typ
+ short nBase; // OPTION BASE-Wert
+ BOOL bText; // OPTION COMPARE TEXT
+ BOOL bExplicit; // TRUE: OPTION EXPLICIT
+ BOOL bClassModule; // TRUE: OPTION ClassModule
+ StringVector aIfaceVector; // Holds all interfaces implemented by a class module
+ StringVector aRequiredTypes; // Types used in Dim As New <type> outside subs
+ SbxDataType eDefTypes[26]; // DEFxxx-Datentypen
+
+ SbiParser( StarBASIC*, SbModule* );
+ BOOL Parse(); // die Aktion
+ SbiExprNode* GetWithVar(); // Innerste With-Variable liefern
+
+ // AB 31.3.1996, Symbol in Runtime-Library suchen
+ SbiSymDef* CheckRTLForSym( const String& rSym, SbxDataType eType );
+ void AddConstants( void );
+
+ BOOL HasGlobalCode(); // Globaler Code definiert?
+
+ BOOL TestToken( SbiToken ); // bestimmtes TOken?
+ BOOL TestSymbol( BOOL=FALSE ); // Symbol?
+ BOOL TestComma(); // Komma oder EOLN?
+ void TestEoln(); // EOLN?
+
+ void Symbol( const KeywordSymbolInfo* pKeywordSymbolInfo = NULL ); // Let oder Call
+ void ErrorStmnt(); // ERROR n
+ void NotImp(); // nicht implementiert
+ void BadBlock(); // LOOP/WEND/NEXT
+ void BadSyntax(); // Falsches SbiToken
+ void NoIf(); // ELSE/ELSE IF ohne IF
+ void Assign(); // LET
+ void Call(); // CALL
+ void Close(); // CLOSE
+ void Declare(); // DECLARE
+ void DefXXX(); // DEFxxx
+ void Dim(); // DIM
+ void ReDim(); // ReDim();
+ void Erase(); // ERASE
+ void Exit(); // EXIT
+ void For(); // FOR...NEXT
+ void Goto(); // GOTO / GOSUB
+ void If(); // IF
+ void Implements(); // IMPLEMENTS
+ void Input(); // INPUT, INPUT #
+ void Line(); // LINE -> LINE INPUT [#] (#i92642)
+ void LineInput(); // LINE INPUT, LINE INPUT #
+ void LSet(); // LSET
+ void Name(); // NAME .. AS ..
+ void On(); // ON ERROR/variable
+ void OnGoto(); // ON...GOTO / GOSUB
+ void Open(); // OPEN
+ void Option(); // OPTION
+ void Print(); // PRINT, PRINT #
+ void SubFunc(); // SUB / FUNCTION
+ void Resume(); // RESUME
+ void Return(); // RETURN
+ void RSet(); // RSET
+ void DoLoop(); // DO...LOOP
+ void Select(); // SELECT ... CASE
+ void Set(); // SET
+ void Static(); // STATIC
+ void Stop(); // STOP/SYSTEM
+ void Type(); // TYPE...AS...END TYPE
+ void Enum(); // TYPE...END ENUM
+ void While(); // WHILE/WEND
+ void With(); // WITH
+ void Write(); // WRITE
+};
+
+
+
+
+
+
+#endif
diff --git a/basic/source/inc/propacc.hxx b/basic/source/inc/propacc.hxx
new file mode 100644
index 000000000000..be396a426185
--- /dev/null
+++ b/basic/source/inc/propacc.hxx
@@ -0,0 +1,203 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef _SFX_PROPBAG_HXX
+#define _SFX_PROPBAG_HXX
+
+#include <svl/svarray.hxx>
+#ifndef _COM_SUN_STAR_BEANS_PROPERTYVALUE_HXX_
+#include <com/sun/star/beans/PropertyValue.hpp>
+#endif
+#ifndef _COM_SUN_STAR_BEANS_XPROPERTYSET_HXX_
+#include <com/sun/star/beans/XPropertySet.hpp>
+#endif
+#ifndef _COM_SUN_STAR_BEANS_XPROPERTYSETINFO_HXX_
+#include <com/sun/star/beans/XPropertySetInfo.hpp>
+#endif
+#ifndef _COM_SUN_STAR_BEANS_XPROPERTYACCESS_HXX_
+#include <com/sun/star/beans/XPropertyAccess.hpp>
+#endif
+#ifndef _COM_SUN_STAR_BEANS_XPROPERTYCONTAINER_HXX_
+#include <com/sun/star/beans/XPropertyContainer.hpp>
+#endif
+#include <cppuhelper/implbase1.hxx>
+#include <cppuhelper/implbase2.hxx>
+
+#define NS_BEANS ::com::sun::star::beans
+#define NS_LANG ::com::sun::star::lang
+#define NS_UNO ::com::sun::star::uno
+
+typedef NS_BEANS::PropertyValue* SbPropertyValuePtr;
+SV_DECL_PTRARR( SbPropertyValueArr_Impl, SbPropertyValuePtr, 4, 4 )
+
+typedef ::cppu::WeakImplHelper2< NS_BEANS::XPropertySet,
+ NS_BEANS::XPropertyAccess > SbPropertyValuesHelper;
+
+
+//==========================================================================
+
+class SbPropertyValues: public SbPropertyValuesHelper
+{
+ SbPropertyValueArr_Impl _aPropVals;
+ NS_UNO::Reference< ::com::sun::star::beans::XPropertySetInfo > _xInfo;
+
+private:
+ INT32 GetIndex_Impl( const ::rtl::OUString &rPropName ) const;
+
+public:
+ SbPropertyValues();
+ virtual ~SbPropertyValues();
+
+ // XPropertySet
+ virtual NS_UNO::Reference< NS_BEANS::XPropertySetInfo > SAL_CALL
+ getPropertySetInfo(void) throw( NS_UNO::RuntimeException );
+ virtual void SAL_CALL setPropertyValue(
+ const ::rtl::OUString& aPropertyName,
+ const NS_UNO::Any& aValue)
+ throw (::com::sun::star::beans::UnknownPropertyException,
+ ::com::sun::star::beans::PropertyVetoException,
+ ::com::sun::star::lang::IllegalArgumentException,
+ ::com::sun::star::lang::WrappedTargetException,
+ ::com::sun::star::uno::RuntimeException);
+ virtual NS_UNO::Any SAL_CALL getPropertyValue( const ::rtl::OUString& PropertyName )
+ throw( NS_BEANS::UnknownPropertyException,
+ NS_LANG::WrappedTargetException,
+ NS_UNO::RuntimeException);
+ virtual void SAL_CALL addPropertyChangeListener(
+ const ::rtl::OUString& aPropertyName,
+ const NS_UNO::Reference< NS_BEANS::XPropertyChangeListener >& )
+ throw ();
+ virtual void SAL_CALL removePropertyChangeListener(
+ const ::rtl::OUString& aPropertyName,
+ const NS_UNO::Reference< NS_BEANS::XPropertyChangeListener >& )
+ throw ();
+ virtual void SAL_CALL addVetoableChangeListener(
+ const ::rtl::OUString& aPropertyName,
+ const NS_UNO::Reference< NS_BEANS::XVetoableChangeListener >& )
+ throw ();
+ virtual void SAL_CALL removeVetoableChangeListener(
+ const ::rtl::OUString& aPropertyName,
+ const NS_UNO::Reference< NS_BEANS::XVetoableChangeListener >& )
+ throw ();
+
+ // XPropertyAccess
+ virtual NS_UNO::Sequence< NS_BEANS::PropertyValue > SAL_CALL getPropertyValues(void) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL setPropertyValues(const NS_UNO::Sequence< NS_BEANS::PropertyValue >& PropertyValues_) throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException);
+};
+
+//==========================================================================
+
+typedef ::cppu::WeakImplHelper1< NS_BEANS::XPropertySetInfo > SbPropertySetInfoHelper;
+
+// AB 20.3.2000 Help Class for XPropertySetInfo implementation
+class PropertySetInfoImpl
+{
+ friend class SbPropertySetInfo;
+ friend class SbPropertyContainer;
+
+ NS_UNO::Sequence< NS_BEANS::Property > _aProps;
+
+ sal_Int32 GetIndex_Impl( const ::rtl::OUString &rPropName ) const;
+
+public:
+ PropertySetInfoImpl();
+ PropertySetInfoImpl( NS_UNO::Sequence< NS_BEANS::Property >& rProps );
+
+ // XPropertySetInfo
+ NS_UNO::Sequence< NS_BEANS::Property > SAL_CALL getProperties(void) throw ();
+ NS_BEANS::Property SAL_CALL getPropertyByName(const ::rtl::OUString& Name)
+ throw( NS_UNO::RuntimeException );
+ sal_Bool SAL_CALL hasPropertyByName(const ::rtl::OUString& Name)
+ throw ( NS_UNO::RuntimeException );
+};
+
+class SbPropertySetInfo: public SbPropertySetInfoHelper
+{
+ PropertySetInfoImpl aImpl;
+
+public:
+ SbPropertySetInfo();
+ SbPropertySetInfo( const SbPropertyValueArr_Impl &rPropVals );
+ virtual ~SbPropertySetInfo();
+
+ // XPropertySetInfo
+ virtual NS_UNO::Sequence< NS_BEANS::Property > SAL_CALL getProperties(void)
+ throw( NS_UNO::RuntimeException );
+ virtual NS_BEANS::Property SAL_CALL getPropertyByName(const ::rtl::OUString& Name)
+ throw( NS_UNO::RuntimeException );
+ virtual sal_Bool SAL_CALL hasPropertyByName(const ::rtl::OUString& Name)
+ throw( NS_UNO::RuntimeException );
+};
+
+//==========================================================================
+
+typedef ::cppu::WeakImplHelper2< NS_BEANS::XPropertySetInfo, NS_BEANS::XPropertyContainer > SbPropertyContainerHelper;
+
+class SbPropertyContainer: public SbPropertyContainerHelper
+{
+ PropertySetInfoImpl aImpl;
+
+public:
+ SbPropertyContainer();
+ virtual ~SbPropertyContainer();
+
+ // XPropertyContainer
+ virtual void SAL_CALL addProperty( const ::rtl::OUString& Name,
+ INT16 Attributes,
+ const NS_UNO::Any& DefaultValue)
+ throw( NS_BEANS::PropertyExistException, NS_BEANS::IllegalTypeException,
+ NS_LANG::IllegalArgumentException, NS_UNO::RuntimeException );
+ virtual void SAL_CALL removeProperty(const ::rtl::OUString& Name)
+ throw( NS_BEANS::UnknownPropertyException, NS_UNO::RuntimeException );
+
+ // XPropertySetInfo
+ virtual NS_UNO::Sequence< NS_BEANS::Property > SAL_CALL getProperties(void) throw();
+ virtual NS_BEANS::Property SAL_CALL getPropertyByName(const ::rtl::OUString& Name)
+ throw( NS_UNO::RuntimeException );
+ virtual sal_Bool SAL_CALL hasPropertyByName(const ::rtl::OUString& Name)
+ throw( NS_UNO::RuntimeException );
+
+ // XPropertyAccess
+ virtual NS_UNO::Sequence< NS_BEANS::PropertyValue > SAL_CALL getPropertyValues(void);
+ virtual void SAL_CALL setPropertyValues(const NS_UNO::Sequence< NS_BEANS::PropertyValue >& PropertyValues_);
+};
+
+//=========================================================================
+
+class StarBASIC;
+class SbxArray;
+
+void RTL_Impl_CreatePropertySet( StarBASIC* pBasic, SbxArray& rPar, BOOL bWrite );
+
+
+#undef NS_BEANS
+#undef NS_LANG
+#undef NS_UNO
+
+
+
+#endif
+
diff --git a/basic/source/inc/runtime.hxx b/basic/source/inc/runtime.hxx
new file mode 100644
index 000000000000..6ca69209a752
--- /dev/null
+++ b/basic/source/inc/runtime.hxx
@@ -0,0 +1,530 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _SBRUNTIME_HXX
+#define _SBRUNTIME_HXX
+
+#ifndef _SBX_HXX
+#include <basic/sbx.hxx>
+#endif
+
+#include "sb.hxx"
+
+// Define activates class UCBStream in iosys.cxx
+#define _USE_UNO
+
+#ifdef _USE_UNO
+#include <rtl/ustring.hxx>
+#include <com/sun/star/uno/Sequence.hxx>
+#include <osl/file.hxx>
+#include <rtl/math.hxx>
+#include <i18npool/lang.h>
+
+#include <vector>
+#include <com/sun/star/lang/XComponent.hpp>
+#include <com/sun/star/container/XEnumeration.hpp>
+#include <unotools/localedatawrapper.hxx>
+
+using namespace com::sun::star::uno;
+using namespace com::sun::star::lang;
+using namespace com::sun::star::container;
+
+
+// Define activates old file implementation
+// (only in non UCB case)
+// #define _OLD_FILE_IMPL
+
+
+//#include <sal/types.h>
+//#include <rtl/byteseq.hxx>
+//#include <rtl/ustring>
+
+
+namespace basicEncoder
+{
+
+// TODO: Use exported functionality (code is copied from deamons2/ucb)
+class AsciiEncoder
+{
+public:
+ static ::rtl::OUString decodeUnoUrlParamValue(const rtl::OUString & rSource);
+ //static ::rtl::OUString encodeUnoUrlParamValue(const rtl::OUString & rSource);
+ //static ::rtl::ByteSequence decode(const ::rtl::OUString & string);
+ //static ::rtl::OUString encode(const ::rtl::ByteSequence & bytes);
+ //static void test();
+};
+
+}
+
+#endif /* _USE_UNO */
+
+class SbiInstance; // aktiver StarBASIC-Prozess
+class SbiRuntime; // aktive StarBASIC-Prozedur-Instanz
+
+struct SbiArgvStack; // Argv stack element
+struct SbiGosubStack; // GOSUB stack element
+class SbiImage; // Code-Image
+class SbiIoSystem; // Dateisystem
+class SbiDdeControl; // DDE-Steuerung
+class SbiDllMgr; // Aufrufe in DLLs
+class SvNumberFormatter; // Zeit/Datumsfunktionen
+
+enum ForType
+{
+ FOR_TO,
+ FOR_EACH_ARRAY,
+ FOR_EACH_COLLECTION,
+ FOR_EACH_XENUMERATION
+};
+
+struct SbiForStack { // for/next stack:
+ SbiForStack* pNext; // Chain
+ SbxVariableRef refVar; // loop variable
+ SbxVariableRef refEnd; // end expression / for each: Array/BasicCollection object
+ SbxVariableRef refInc; // increment expression
+
+ // For each support
+ ForType eForType;
+ INT32 nCurCollectionIndex;
+ INT32* pArrayCurIndices;
+ INT32* pArrayLowerBounds;
+ INT32* pArrayUpperBounds;
+ Reference< XEnumeration > xEnumeration;
+
+ SbiForStack( void )
+ : pArrayCurIndices( NULL )
+ , pArrayLowerBounds( NULL )
+ , pArrayUpperBounds( NULL )
+ {}
+ ~SbiForStack()
+ {
+ delete[] pArrayCurIndices;
+ delete[] pArrayLowerBounds;
+ delete[] pArrayUpperBounds;
+ }
+};
+
+struct SbiGosubStack { // GOSUB-Stack:
+ SbiGosubStack* pNext; // Chain
+ const BYTE* pCode; // Return-Pointer
+ USHORT nStartForLvl; // #118235: For Level in moment of gosub
+};
+
+#define MAXRECURSION 500 // max. 500 Rekursionen
+
+#define Sb_ATTR_NORMAL 0x0000
+#define Sb_ATTR_HIDDEN 0x0002
+#define Sb_ATTR_SYSTEM 0x0004
+#define Sb_ATTR_VOLUME 0x0008
+#define Sb_ATTR_DIRECTORY 0x0010
+#define Sb_ATTR_ARCHIVE 0x0020
+
+
+class Dir;
+class WildCard;
+
+class SbiRTLData
+{
+public:
+
+#ifdef _OLD_FILE_IMPL
+ Dir* pDir;
+#else
+ ::osl::Directory* pDir;
+#endif
+ INT16 nDirFlags;
+ short nCurDirPos;
+
+ String sFullNameToBeChecked;
+ WildCard* pWildCard;
+
+#ifdef _USE_UNO
+ Sequence< ::rtl::OUString > aDirSeq;
+#endif /* _USE_UNO */
+
+ SbiRTLData();
+ ~SbiRTLData();
+};
+
+// Die Instanz entspricht einem laufenden StarBASIC. Mehrere gleichzeitig
+// laufende BASICs werden ueber verkettete Instanzen verwaltet. Hier liegen
+// alle Daten, die nur leben, wenn BASIC auch lebt, wie z.B. das I/O-System.
+
+typedef ::std::vector
+<
+ ::com::sun::star::uno::Reference< ::com::sun::star::lang::XComponent >
+>
+ComponentVector_t;
+
+
+class SbiInstance
+{
+ friend class SbiRuntime;
+
+ SbiRTLData aRTLData;
+
+ SbiIoSystem* pIosys; // Dateisystem
+ SbiDdeControl* pDdeCtrl; // DDE
+ SbiDllMgr* pDllMgr; // DLL-Calls (DECLARE)
+ StarBASIC* pBasic;
+ SvNumberFormatter* pNumberFormatter;
+ LanguageType meFormatterLangType;
+ DateFormat meFormatterDateFormat;
+ sal_uInt32 nStdDateIdx, nStdTimeIdx, nStdDateTimeIdx;
+
+ SbError nErr; // aktueller Fehlercode
+ String aErrorMsg; // letzte Error-Message fuer $ARG
+ USHORT nErl; // aktuelle Fehlerzeile
+ BOOL bReschedule; // Flag: TRUE = Reschedule in Hauptschleife
+ BOOL bCompatibility; // Flag: TRUE = VBA runtime compatibility mode
+
+ ComponentVector_t ComponentVector;
+
+public:
+ SbiRuntime* pRun; // Call-Stack
+ SbiInstance* pNext; // Instanzen-Chain
+
+ // #31460 Neues Konzept fuer StepInto/Over/Out,
+ // Erklaerung siehe runtime.cxx bei SbiInstance::CalcBreakCallLevel()
+ USHORT nCallLvl; // Call-Level (wg. Rekursion)
+ USHORT nBreakCallLvl; // Call-Level zum Anhalten
+ void CalcBreakCallLevel( USHORT nFlags ); // Gemaess Flags setzen
+
+ SbiInstance( StarBASIC* );
+ ~SbiInstance();
+
+ void Error( SbError ); // trappable Error
+ void Error( SbError, const String& rMsg ); // trappable Error mit Message
+ void ErrorVB( sal_Int32 nVBNumber, const String& rMsg );
+ void setErrorVB( sal_Int32 nVBNumber, const String& rMsg );
+ void FatalError( SbError ); // non-trappable Error
+ void FatalError( SbError, const String& ); // non-trappable Error
+ void Abort(); // Abbruch mit aktuellem Fehlercode
+
+ void Stop();
+ SbError GetErr() { return nErr; }
+ String GetErrorMsg() { return aErrorMsg; }
+ xub_StrLen GetErl() { return nErl; }
+ void EnableReschedule( BOOL bEnable ) { bReschedule = bEnable; }
+ BOOL IsReschedule( void ) { return bReschedule; }
+ void EnableCompatibility( BOOL bEnable ) { bCompatibility = bEnable; }
+ BOOL IsCompatibility( void ) { return bCompatibility; }
+
+ ComponentVector_t& getComponentVector( void ) { return ComponentVector; }
+
+ SbMethod* GetCaller( USHORT );
+ SbModule* GetActiveModule();
+ SbxArray* GetLocals( SbMethod* );
+
+ SbiIoSystem* GetIoSystem() { return pIosys; }
+ SbiDdeControl* GetDdeControl() { return pDdeCtrl; }
+ StarBASIC* GetBasic( void ) { return pBasic; }
+ SbiDllMgr* GetDllMgr();
+ SbiRTLData* GetRTLData() const { return (SbiRTLData*)&aRTLData; }
+
+ SvNumberFormatter* GetNumberFormatter();
+ sal_uInt32 GetStdDateIdx() const { return nStdDateIdx; }
+ sal_uInt32 GetStdTimeIdx() const { return nStdTimeIdx; }
+ sal_uInt32 GetStdDateTimeIdx() const { return nStdDateTimeIdx; }
+
+ // #39629# NumberFormatter auch statisch anbieten
+ static void PrepareNumberFormatter( SvNumberFormatter*& rpNumberFormatter,
+ sal_uInt32 &rnStdDateIdx, sal_uInt32 &rnStdTimeIdx, sal_uInt32 &rnStdDateTimeIdx,
+ LanguageType* peFormatterLangType=NULL, DateFormat* peFormatterDateFormat=NULL );
+};
+
+SbiIoSystem* SbGetIoSystem(); // das aktuelle I/O-System
+
+
+// Verkettbare Items, um Referenzen temporaer zu halten
+struct RefSaveItem
+{
+ SbxVariableRef xRef;
+ RefSaveItem* pNext;
+
+ RefSaveItem() { pNext = NULL; }
+};
+
+
+// Eine Instanz dieser Klasse wird fuer jedes ausgefuehrte Unterprogramm
+// aufgesetzt. Diese Instanz ist das Herz der BASIC-Maschine und enthaelt
+// nur lokale Daten.
+
+class SbiRuntime
+{
+ typedef void( SbiRuntime::*pStep0 )();
+ typedef void( SbiRuntime::*pStep1 )( UINT32 nOp1 );
+ typedef void( SbiRuntime::*pStep2 )( UINT32 nOp1, UINT32 nOp2 );
+ static pStep0 aStep0[]; // Opcode-Tabelle Gruppe 0
+ static pStep1 aStep1[]; // Opcode-Tabelle Gruppe 1
+ static pStep2 aStep2[]; // Opcode-Tabelle Gruppe 2
+
+ StarBASIC& rBasic; // StarBASIC-Instanz
+ SbiInstance* pInst; // aktiver Thread
+ SbModule* pMod; // aktuelles Modul
+ SbMethod* pMeth; // Methoden-Instanz
+ SbiIoSystem* pIosys; // I/O-System
+ const SbiImage* pImg; // Code-Image
+ SbxArrayRef refExprStk; // expression stack
+ SbxArrayRef refCaseStk; // CASE expression stack
+ SbxArrayRef refRedimpArray; // Array saved to use for REDIM PRESERVE
+ SbxVariableRef xDummyVar; // Ersatz fuer nicht gefundene Variablen
+ SbiArgvStack* pArgvStk; // ARGV-Stack
+ SbiGosubStack* pGosubStk; // GOSUB stack
+ SbiForStack* pForStk; // FOR/NEXT-Stack
+ USHORT nExprLvl; // Tiefe des Expr-Stacks
+ USHORT nGosubLvl; // Zum Vermeiden von Tot-Rekursionen
+ USHORT nForLvl; // #118235: Maintain for level
+ const BYTE* pCode; // aktueller Code-Pointer
+ const BYTE* pStmnt; // Beginn des lezten Statements
+ const BYTE* pError; // Adresse des aktuellen Error-Handlers
+ const BYTE* pRestart; // Restart-Adresse
+ const BYTE* pErrCode; // Restart-Adresse RESUME NEXT
+ const BYTE* pErrStmnt; // Restart-Adresse RESUMT 0
+ String aLibName; // Lib-Name fuer Declare-Call
+ SbxArrayRef refParams; // aktuelle Prozedur-Parameter
+ SbxArrayRef refLocals; // lokale Variable
+ SbxArrayRef refArgv; // aktueller Argv
+ // AB, 28.3.2000 #74254, Ein refSaveObj reicht nicht! Neu: pRefSaveList (s.u.)
+ //SbxVariableRef refSaveObj; // #56368 Bei StepElem Referenz sichern
+ short nArgc; // aktueller Argc
+ BOOL bRun; // TRUE: Programm ist aktiv
+ BOOL bError; // TRUE: Fehler behandeln
+ BOOL bInError; // TRUE: in einem Fehler-Handler
+ BOOL bBlocked; // TRUE: blocked by next call level, #i48868
+ BOOL bVBAEnabled;
+ USHORT nFlags; // Debugging-Flags
+ SbError nError; // letzter Fehler
+ USHORT nOps; // Opcode-Zaehler
+ sal_uInt32 m_nLastTime;
+
+ RefSaveItem* pRefSaveList; // #74254 Temporaere Referenzen sichern
+ RefSaveItem* pItemStoreList; // Unbenutzte Items aufbewahren
+ void SaveRef( SbxVariable* pVar )
+ {
+ RefSaveItem* pItem = pItemStoreList;
+ if( pItem )
+ pItemStoreList = pItem->pNext;
+ else
+ pItem = new RefSaveItem();
+ pItem->pNext = pRefSaveList;
+ pItem->xRef = pVar;
+ pRefSaveList = pItem;
+ }
+ void ClearRefs( void )
+ {
+ while( pRefSaveList )
+ {
+ RefSaveItem* pToClearItem = pRefSaveList;
+ pRefSaveList = pToClearItem->pNext;
+ pToClearItem->xRef = NULL;
+ pToClearItem->pNext = pItemStoreList;
+ pItemStoreList = pToClearItem;
+ }
+ }
+
+ SbxVariable* FindElement
+ ( SbxObject* pObj, UINT32 nOp1, UINT32 nOp2, SbError, BOOL bLocal, BOOL bStatic = FALSE );
+ void SetupArgs( SbxVariable*, UINT32 );
+ SbxVariable* CheckArray( SbxVariable* );
+
+ void PushVar( SbxVariable* ); // Variable push
+ SbxVariableRef PopVar(); // Variable pop
+ SbxVariable* GetTOS( short=0 ); // Variable vom TOS holen
+ void TOSMakeTemp(); // TOS in temp. Variable wandeln
+ BOOL ClearExprStack(); // Expr-Stack freigeben
+
+ void PushGosub( const BYTE* ); // GOSUB-Element push
+ void PopGosub(); // GOSUB-Element pop
+ void ClearGosubStack(); // GOSUB-Stack freigeben
+
+ void PushArgv(); // Argv-Element push
+ void PopArgv(); // Argv-Element pop
+ void ClearArgvStack(); // Argv-Stack freigeben
+
+ void PushFor(); // For-Element push
+ void PushForEach(); // For-Each-Element push
+ void PopFor(); // For-Element pop
+ void ClearForStack(); // For-Stack freigeben
+
+ void StepArith( SbxOperator ); // arithmetische Verknuepfungen
+ void StepUnary( SbxOperator ); // unaere Verknuepfungen
+ void StepCompare( SbxOperator );// Vergleiche
+
+ void SetParameters( SbxArray* );// Parameter uebernehmen
+
+ // MUSS NOCH IMPLEMENTIERT WERDEN
+ void DllCall( const String&, const String&, SbxArray*, SbxDataType, BOOL );
+
+ // #56204 DIM-Funktionalitaet in Hilfsmethode auslagern (step0.cxx)
+ void DimImpl( SbxVariableRef refVar );
+
+ // #115829
+ bool implIsClass( SbxObject* pObj, const String& aClass );
+
+ void StepSETCLASS_impl( UINT32 nOp1, bool bHandleDflt = false );
+
+ // Die nachfolgenden Routinen werden vom Single Stepper
+ // gerufen und implementieren die einzelnen Opcodes
+ void StepNOP(), StepEXP(), StepMUL(), StepDIV();
+ void StepMOD(), StepPLUS(), StepMINUS(), StepNEG();
+ void StepEQ(), StepNE(), StepLT(), StepGT();
+ void StepLE(), StepGE(), StepIDIV(), StepAND();
+ void StepOR(), StepXOR(), StepEQV(), StepIMP();
+ void StepNOT(), StepCAT(), StepLIKE(), StepIS();
+ void StepCLONE(), StepOLDBASED(), StepARGC();
+ void StepARGV(), StepINPUT(), StepLINPUT(), StepSTOP();
+ void StepGET(), StepSET(), StepVBASET(), StepPUT(), StepPUTC();
+ void StepSET_Impl( SbxVariableRef& refVal, SbxVariableRef& refVar, bool bDefaultHandling = false );
+ void StepDIM(), StepREDIM(), StepREDIMP(), StepERASE();
+ void StepINITFOR(), StepNEXT(), StepERROR(), StepINITFOREACH();
+ void StepCASE(), StepENDCASE(), StepSTDERROR();
+ void StepNOERROR(), StepCHANNEL(), StepCHANNEL0(), StepPRINT();
+ void StepPRINTF(), StepWRITE(), StepRENAME(), StepPROMPT();
+ void StepRESTART(), StepEMPTY(), StepLEAVE();
+ void StepLSET(), StepRSET(), StepREDIMP_ERASE(), StepERASE_CLEAR();
+ void StepARRAYACCESS(), StepBYVAL();
+ // Alle Opcodes mit einem Operanden
+ void StepLOADNC( UINT32 ), StepLOADSC( UINT32 ), StepLOADI( UINT32 );
+ void StepARGN( UINT32 ), StepBASED( UINT32 ), StepPAD( UINT32 );
+ void StepJUMP( UINT32 ), StepJUMPT( UINT32 );
+ void StepJUMPF( UINT32 ), StepONJUMP( UINT32 );
+ void StepGOSUB( UINT32 ), StepRETURN( UINT32 );
+ void StepTESTFOR( UINT32 ), StepCASETO( UINT32 ), StepERRHDL( UINT32 );
+ void StepRESUME( UINT32 ), StepSETCLASS( UINT32 ), StepVBASETCLASS( UINT32 ), StepTESTCLASS( UINT32 ), StepLIB( UINT32 );
+ bool checkClass_Impl( const SbxVariableRef& refVal, const String& aClass, bool bRaiseErrors, bool bDefault = true );
+ void StepCLOSE( UINT32 ), StepPRCHAR( UINT32 ), StepARGTYP( UINT32 );
+ // Alle Opcodes mit zwei Operanden
+ void StepRTL( UINT32, UINT32 ), StepPUBLIC( UINT32, UINT32 ), StepPUBLIC_P( UINT32, UINT32 );
+ void StepPUBLIC_Impl( UINT32, UINT32, bool bUsedForClassModule );
+ void StepFIND_Impl( SbxObject* pObj, UINT32 nOp1, UINT32 nOp2, SbError, BOOL bLocal, BOOL bStatic = FALSE );
+ void StepFIND( UINT32, UINT32 ), StepELEM( UINT32, UINT32 );
+ void StepGLOBAL( UINT32, UINT32 ), StepLOCAL( UINT32, UINT32 );
+ void StepPARAM( UINT32, UINT32), StepCREATE( UINT32, UINT32 );
+ void StepCALL( UINT32, UINT32 ), StepCALLC( UINT32, UINT32 );
+ void StepCASEIS( UINT32, UINT32 ), StepSTMNT( UINT32, UINT32 );
+ SbxVariable* StepSTATIC_Impl( String& aName, SbxDataType& t );
+ void StepOPEN( UINT32, UINT32 ), StepSTATIC( UINT32, UINT32 );
+ void StepTCREATE(UINT32,UINT32), StepDCREATE(UINT32,UINT32);
+ void StepGLOBAL_P( UINT32, UINT32 ),StepFIND_G( UINT32, UINT32 );
+ void StepDCREATE_REDIMP(UINT32,UINT32), StepDCREATE_IMPL(UINT32,UINT32);
+ void StepFIND_CM( UINT32, UINT32 );
+ void StepFIND_STATIC( UINT32, UINT32 );
+ void implCreateFixedString( SbxVariable* pStrVar, UINT32 nOp2 );
+public:
+ void SetVBAEnabled( bool bEnabled );
+ USHORT GetImageFlag( USHORT n ) const;
+ USHORT GetBase();
+ xub_StrLen nLine,nCol1,nCol2; // aktuelle Zeile, Spaltenbereich
+ SbiRuntime* pNext; // Stack-Chain
+
+ SbiRuntime( SbModule*, SbMethod*, UINT32 );
+ ~SbiRuntime();
+ void Error( SbError, bool bVBATranslationAlreadyDone = false ); // Fehler setzen, falls != 0
+ void Error( SbError, const String& ); // Fehler setzen, falls != 0
+ void FatalError( SbError ); // Fehlerbehandlung=Standard, Fehler setzen
+ void FatalError( SbError, const String& ); // Fehlerbehandlung=Standard, Fehler setzen
+ static sal_Int32 translateErrorToVba( SbError nError, String& rMsg );
+ void DumpPCode();
+ BOOL Step(); // Einzelschritt (ein Opcode)
+ void Stop() { bRun = FALSE; }
+ BOOL IsRun() { return bRun; }
+ void block( void ) { bBlocked = TRUE; }
+ void unblock( void ) { bBlocked = FALSE; }
+ SbMethod* GetMethod() { return pMeth; }
+ SbModule* GetModule() { return pMod; }
+ USHORT GetDebugFlags() { return nFlags; }
+ void SetDebugFlags( USHORT nFl ) { nFlags = nFl; }
+ SbMethod* GetCaller();
+ SbxArray* GetLocals();
+ SbxArray* GetParams();
+
+ SbxBase* FindElementExtern( const String& rName );
+ static bool isVBAEnabled();
+
+};
+
+inline void checkArithmeticOverflow( double d )
+{
+ if( !::rtl::math::isFinite( d ) )
+ StarBASIC::Error( SbERR_MATH_OVERFLOW );
+}
+
+inline void checkArithmeticOverflow( SbxVariable* pVar )
+{
+ if( pVar->GetType() == SbxDOUBLE )
+ {
+ double d = pVar->GetDouble();
+ checkArithmeticOverflow( d );
+ }
+}
+
+// Hilfsfunktion, um aktives Basic zu finden
+StarBASIC* GetCurrentBasic( StarBASIC* pRTBasic );
+
+// Get information if security restrictions should be
+// used (File IO based on UCB, no RTL function SHELL
+// no DDE functionality, no DLLCALL) in basic because
+// of portal "virtual" users (portal user != UNIX user)
+// (Implemented in iosys.cxx)
+BOOL needSecurityRestrictions( void );
+
+// Returns TRUE if UNO is available, otherwise the old
+// file system implementation has to be used
+// (Implemented in iosys.cxx)
+BOOL hasUno( void );
+
+// Converts possibly relative paths to absolute paths
+// according to the setting done by ChDir/ChDrive
+// (Implemented in methods.cxx)
+String getFullPath( const String& aRelPath );
+
+// Sets (virtual) current path for UCB file access
+void implChDir( const String& aDir );
+
+// Sets (virtual) current drive for UCB file access
+void implChDrive( const String& aDrive );
+
+// Returns (virtual) current path for UCB file access
+String implGetCurDir( void );
+
+// Implementation of StepRENAME with UCB
+// (Implemented in methods.cxx, so step0.cxx
+// has not to be infected with UNO)
+void implStepRenameUCB( const String& aSource, const String& aDest );
+
+//*** OSL file access ***
+// #87427 OSL need File URLs, so map to getFullPath
+inline String getFullPathUNC( const String& aRelPath )
+{
+ return getFullPath( aRelPath );
+}
+void implStepRenameOSL( const String& aSource, const String& aDest );
+bool IsBaseIndexOne();
+
+#endif
+
diff --git a/basic/source/inc/sbcomp.hxx b/basic/source/inc/sbcomp.hxx
new file mode 100644
index 000000000000..6335a55da62f
--- /dev/null
+++ b/basic/source/inc/sbcomp.hxx
@@ -0,0 +1,38 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _SBCOMP_HXX
+#define _SBCOMP_HXX
+
+// das folgende habe ich der neuen Datei von MD entnommen! (MT)
+#include "sbintern.hxx"
+#include "token.hxx" // Tokenizer
+#include "symtbl.hxx" // Symbolverwaltung
+#include "parser.hxx" // Parser
+#include "codegen.hxx" // Code-Generator
+
+#endif
diff --git a/basic/source/inc/sbintern.hxx b/basic/source/inc/sbintern.hxx
new file mode 100644
index 000000000000..4c54e2301bd5
--- /dev/null
+++ b/basic/source/inc/sbintern.hxx
@@ -0,0 +1,150 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _SB_INTERN_HXX
+#define _SB_INTERN_HXX
+
+#include <basic/sbxfac.hxx>
+#include <unotools/transliterationwrapper.hxx>
+#include "sb.hxx"
+
+namespace utl
+{
+ class TransliterationWrapper;
+}
+class SbUnoFactory;
+class SbTypeFactory;
+class SbOLEFactory;
+class SbFormFactory;
+class SbiInstance;
+class SbModule;
+
+class SbiFactory : public SbxFactory
+{
+public:
+ virtual SbxBase* Create( UINT16 nSbxId, UINT32 = SBXCR_SBX );
+ virtual SbxObject* CreateObject( const String& );
+};
+
+typedef ::std::vector< String > StringVector;
+
+struct SbClassData
+{
+ SbxArrayRef mxIfaces;
+
+ // types this module depends on because of use in Dim As New <type>
+ // needed for initialization order of class modules
+ StringVector maRequiredTypes;
+
+ SbClassData( void );
+ ~SbClassData( void )
+ { clear(); }
+ void clear( void );
+};
+
+// #115824: Factory class to create class objects (type command)
+// Implementation: sb.cxx
+class SbClassFactory : public SbxFactory
+{
+ SbxObjectRef xClassModules;
+
+public:
+ SbClassFactory( void );
+ virtual ~SbClassFactory();
+
+ void AddClassModule( SbModule* pClassModule );
+ void RemoveClassModule( SbModule* pClassModule );
+
+ virtual SbxBase* Create( UINT16 nSbxId, UINT32 = SBXCR_SBX );
+ virtual SbxObject* CreateObject( const String& );
+
+ SbModule* FindClass( const String& rClassName );
+};
+
+// Stack fuer die im Fehlerfall abgebaute SbiRuntime Kette
+class SbErrorStackEntry
+{
+public:
+ SbErrorStackEntry(SbMethodRef aM, xub_StrLen nL, xub_StrLen nC1, xub_StrLen nC2)
+ : aMethod(aM), nLine(nL), nCol1(nC1), nCol2(nC2) {}
+ SbMethodRef aMethod;
+ xub_StrLen nLine;
+ xub_StrLen nCol1, nCol2;
+};
+
+SV_DECL_PTRARR_DEL(SbErrorStack, SbErrorStackEntry*, 1, 1)
+
+
+
+struct SbiGlobals
+{
+ SbiInstance* pInst; // alle aktiven Runtime-Instanzen
+ SbiFactory* pSbFac; // StarBASIC-Factory
+ SbUnoFactory* pUnoFac; // Factory fuer Uno-Structs bei DIM AS NEW
+ SbTypeFactory* pTypeFac; // Factory for user defined types
+ SbClassFactory* pClassFac; // Factory for user defined classes (based on class modules)
+ SbOLEFactory* pOLEFac; // Factory for OLE types
+ SbFormFactory* pFormFac; // Factory for user forms
+ SbModule* pMod; // aktuell aktives Modul
+ SbModule* pCompMod; // aktuell compiliertes Modul
+ short nInst; // Anzahl BASICs
+ Link aErrHdl; // globaler Error-Handler
+ Link aBreakHdl; // globaler Break-Handler
+ SbError nCode; // aktueller Fehlercode
+ xub_StrLen nLine; // aktuelle Zeile
+ xub_StrLen nCol1,nCol2; // aktuelle Spalten (von,bis)
+ BOOL bCompiler; // Flag fuer Compiler-Error
+ BOOL bGlobalInitErr; // Beim GlobalInit trat ein Compiler-Fehler auf
+ BOOL bRunInit; // TRUE, wenn RunInit vom Basic aktiv ist
+ String aErrMsg; // Puffer fuer GetErrorText()
+ SbLanguageMode eLanguageMode; // Flag fuer Visual-Basic-Script-Modus
+ SbErrorStack* pErrStack; // Stack fuer die im Fehlerfall abgebaute SbiRuntime Kette
+ ::utl::TransliterationWrapper* pTransliterationWrapper; // For StrComp
+ BOOL bBlockCompilerError;
+ BasicManager* pAppBasMgr;
+ StarBASIC* pMSOMacroRuntimLib; // Lib containing MSO Macro Runtime API entry symbols
+
+ SbiGlobals();
+ ~SbiGlobals();
+};
+
+// Utility-Makros und -Routinen
+
+SbiGlobals* GetSbData();
+
+#define pINST GetSbData()->pInst
+#define pMOD GetSbData()->pMod
+#define pCMOD GetSbData()->pCompMod
+#define pSBFAC GetSbData()->pSbFac
+#define pUNOFAC GetSbData()->pUnoFac
+#define pTYPEFAC GetSbData()->pTypeFac
+#define pCLASSFAC GetSbData()->pClassFac
+#define pOLEFAC GetSbData()->pOLEFac
+#define pFORMFAC GetSbData()->pFormFac
+
+#endif
+
diff --git a/basic/source/inc/sbjsmeth.hxx b/basic/source/inc/sbjsmeth.hxx
new file mode 100644
index 000000000000..80c301821884
--- /dev/null
+++ b/basic/source/inc/sbjsmeth.hxx
@@ -0,0 +1,53 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+
+#ifndef _SB_SBJSMETH_HXX
+#define _SB_SBJSMETH_HXX
+
+#include <basic/sbmeth.hxx>
+
+// Basic-Modul fuer JavaScript-Sourcen.
+// Alle Basic-spezifischen Methoden muessen virtuell ueberladen und deaktiviert
+// werden. Die Unterscheidung von normalen Modulen erfolgt uebr RTTI.
+
+class SbJScriptMethod : public SbMethod
+{
+public:
+ SbJScriptMethod( const String&, SbxDataType, SbModule* );
+ virtual ~SbJScriptMethod();
+
+ SBX_DECL_PERSIST_NODATA(SBXCR_SBX,SBXID_JSCRIPTMETH,2);
+ TYPEINFO();
+};
+
+#ifndef __SB_SBJSCRIPTMETHODREF_HXX
+#define __SB_SBJSCRIPTMETHODREF_HXX
+SV_DECL_IMPL_REF(SbJScriptMethod)
+#endif
+
+#endif
diff --git a/basic/source/inc/sbjsmod.hxx b/basic/source/inc/sbjsmod.hxx
new file mode 100644
index 000000000000..a9b035e79da2
--- /dev/null
+++ b/basic/source/inc/sbjsmod.hxx
@@ -0,0 +1,50 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _SB_SBJSMOD_HXX
+#define _SB_SBJSMOD_HXX
+
+#include <basic/sbmod.hxx>
+
+// Basic-Modul fuer JavaScript-Sourcen.
+// Alle Basic-spezifischen Methoden muessen virtuell ueberladen und deaktiviert
+// werden. Die Unterscheidung von normalen Modulen erfolgt uebr RTTI.
+
+class SbJScriptModule : public SbModule
+{
+ virtual BOOL LoadData( SvStream&, USHORT );
+ virtual BOOL StoreData( SvStream& ) const;
+public:
+ SBX_DECL_PERSIST_NODATA(SBXCR_SBX,SBXID_JSCRIPTMOD,1);
+ TYPEINFO();
+ SbJScriptModule( const String& ); // DURCHREICHEN
+};
+
+#endif
+
+
+
diff --git a/basic/source/inc/sbtrace.hxx b/basic/source/inc/sbtrace.hxx
new file mode 100755
index 000000000000..e8a482c2f6e9
--- /dev/null
+++ b/basic/source/inc/sbtrace.hxx
@@ -0,0 +1,42 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _SBTRACE_HXX
+#define _SBTRACE_HXX
+
+// #define DBG_TRACE_BASIC
+
+#ifdef DBG_TRACE_BASIC
+void dbg_InitTrace( void );
+void dbg_traceStep( SbModule* pModule, UINT32 nPC, INT32 nCallLvl );
+void dbg_traceNotifyCall( SbModule* pModule, SbMethod* pMethod, INT32 nCallLvl, bool bLeave = false );
+void dbg_traceNotifyError( SbError nTraceErr, const String& aTraceErrMsg, bool bTraceErrHandled, INT32 nCallLvl );
+void dbg_RegisterTraceTextForPC( SbModule* pModule, UINT32 nPC,
+ const String& aTraceStr_STMNT, const String& aTraceStr_PCode );
+#endif
+
+#endif
diff --git a/basic/source/inc/sbunoobj.hxx b/basic/source/inc/sbunoobj.hxx
new file mode 100644
index 000000000000..78afa9783ca8
--- /dev/null
+++ b/basic/source/inc/sbunoobj.hxx
@@ -0,0 +1,326 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef SB_UNO_OBJ
+#define SB_UNO_OBJ
+
+#include <basic/sbxobj.hxx>
+#include <basic/sbxmeth.hxx>
+#include <basic/sbxprop.hxx>
+#include <basic/sbxfac.hxx>
+#ifndef __SBX_SBX_HXX //autogen
+#include <basic/sbx.hxx>
+#endif
+#include <com/sun/star/beans/XMaterialHolder.hpp>
+#include <com/sun/star/beans/XExactName.hpp>
+#include <com/sun/star/beans/XIntrospectionAccess.hpp>
+#include <com/sun/star/beans/XIntrospection.hpp>
+#include <com/sun/star/script/XInvocation.hpp>
+#include <com/sun/star/reflection/XIdlClass.hpp>
+#include <com/sun/star/reflection/XServiceTypeDescription2.hpp>
+#include <com/sun/star/reflection/XSingletonTypeDescription.hpp>
+#include <rtl/ustring.hxx>
+
+class SbUnoObject: public SbxObject
+{
+ ::com::sun::star::uno::Reference< ::com::sun::star::beans::XIntrospectionAccess > mxUnoAccess;
+ ::com::sun::star::uno::Reference< ::com::sun::star::beans::XMaterialHolder > mxMaterialHolder;
+ ::com::sun::star::uno::Reference< ::com::sun::star::script::XInvocation > mxInvocation;
+ ::com::sun::star::uno::Reference< ::com::sun::star::beans::XExactName > mxExactName;
+ ::com::sun::star::uno::Reference< ::com::sun::star::beans::XExactName > mxExactNameInvocation;
+ BOOL bNeedIntrospection;
+ BOOL bIgnoreNativeCOMObjectMembers;
+ ::com::sun::star::uno::Any maTmpUnoObj; // Only to save obj for doIntrospection!
+
+ // Hilfs-Methode zum Anlegen der dbg_-Properties
+ void implCreateDbgProperties( void );
+
+ // Hilfs-Methode zum Anlegen aller Properties und Methoden
+ // (Beim on-demand-Mechanismus erforderlich fuer die dbg_-Properties)
+ void implCreateAll( void );
+
+public:
+ static bool getDefaultPropName( SbUnoObject* pUnoObj, String& sDfltProp );
+ TYPEINFO();
+ SbUnoObject( const String& aName_, const ::com::sun::star::uno::Any& aUnoObj_ );
+ ~SbUnoObject();
+
+ // #76470 Introspection on Demand durchfuehren
+ void doIntrospection( void );
+
+ // Find ueberladen, um z.B. NameAccess zu unterstuetzen
+ virtual SbxVariable* Find( const String&, SbxClassType );
+
+ // Force creation of all properties for debugging
+ void createAllProperties( void )
+ { implCreateAll(); }
+
+ // Wert rausgeben
+ ::com::sun::star::uno::Any getUnoAny( void );
+ ::com::sun::star::uno::Reference< ::com::sun::star::beans::XIntrospectionAccess > getIntrospectionAccess( void ) { return mxUnoAccess; }
+ ::com::sun::star::uno::Reference< ::com::sun::star::script::XInvocation > getInvocation( void ) { return mxInvocation; }
+
+ void SFX_NOTIFY( SfxBroadcaster&, const TypeId&, const SfxHint& rHint, const TypeId& );
+};
+SV_DECL_IMPL_REF(SbUnoObject);
+
+
+// #67781 Rueckgabewerte der Uno-Methoden loeschen
+void clearUnoMethods( void );
+
+class SbUnoMethod : public SbxMethod
+{
+ friend class SbUnoObject;
+ friend void clearUnoMethods( void );
+
+ ::com::sun::star::uno::Reference< ::com::sun::star::reflection::XIdlMethod > m_xUnoMethod;
+ ::com::sun::star::uno::Sequence< ::com::sun::star::reflection::ParamInfo >* pParamInfoSeq;
+
+ // #67781 Verweis auf vorige und naechste Methode in der Methoden-Liste
+ SbUnoMethod* pPrev;
+ SbUnoMethod* pNext;
+
+ bool mbInvocation; // Method is based on invocation
+
+public:
+ TYPEINFO();
+
+ SbUnoMethod( const String& aName_, SbxDataType eSbxType, ::com::sun::star::uno::Reference< ::com::sun::star::reflection::XIdlMethod > xUnoMethod_,
+ bool bInvocation );
+ virtual ~SbUnoMethod();
+ virtual SbxInfo* GetInfo();
+
+ const ::com::sun::star::uno::Sequence< ::com::sun::star::reflection::ParamInfo >& getParamInfos( void );
+
+ bool isInvocationBased( void )
+ { return mbInvocation; }
+};
+
+
+class SbUnoProperty : public SbxProperty
+{
+ friend class SbUnoObject;
+
+ // Daten der Uno-Property
+ ::com::sun::star::beans::Property aUnoProp;
+ INT32 nId;
+
+ bool mbInvocation; // Property is based on invocation
+
+ virtual ~SbUnoProperty();
+public:
+ TYPEINFO();
+ SbUnoProperty( const String& aName_, SbxDataType eSbxType,
+ const ::com::sun::star::beans::Property& aUnoProp_, INT32 nId_, bool bInvocation );
+
+ bool isInvocationBased( void )
+ { return mbInvocation; }
+};
+
+// Factory-Klasse fuer das Anlegen von Uno-Structs per DIM AS NEW
+class SbUnoFactory : public SbxFactory
+{
+public:
+ virtual SbxBase* Create( UINT16 nSbxId, UINT32 = SBXCR_SBX );
+ virtual SbxObject* CreateObject( const String& );
+};
+
+// Wrapper fuer eine Uno-Klasse
+class SbUnoClass : public SbxObject
+{
+ const ::com::sun::star::uno::Reference< ::com::sun::star::reflection::XIdlClass > m_xClass;
+
+public:
+ TYPEINFO();
+ SbUnoClass( const String& aName_ )
+ : SbxObject( aName_ )
+ {}
+ SbUnoClass( const String& aName_, const ::com::sun::star::uno::Reference< ::com::sun::star::reflection::XIdlClass >& xClass_ )
+ : SbxObject( aName_ )
+ , m_xClass( xClass_ )
+ {}
+ //~SbUnoClass();
+
+ // Find ueberladen, um Elemente on Demand anzulegen
+ virtual SbxVariable* Find( const String&, SbxClassType );
+
+ // Wert rausgeben
+ const ::com::sun::star::uno::Reference< ::com::sun::star::reflection::XIdlClass >& getUnoClass( void ) { return m_xClass; }
+
+ //void SFX_NOTIFY( SfxBroadcaster&, const TypeId&, const SfxHint& rHint, const TypeId& );
+};
+SV_DECL_IMPL_REF(SbUnoClass);
+
+
+// Funktion, um einen globalen Bezeichner im
+// UnoScope zu suchen und fuer Sbx zu wrappen
+SbUnoClass* findUnoClass( const String& rName );
+
+
+// Wrapper for UNO Service
+class SbUnoService : public SbxObject
+{
+ const ::com::sun::star::uno::Reference< ::com::sun::star::reflection::XServiceTypeDescription2 > m_xServiceTypeDesc;
+ bool m_bNeedsInit;
+
+public:
+ TYPEINFO();
+ SbUnoService( const String& aName_,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::reflection::XServiceTypeDescription2 >& xServiceTypeDesc )
+ : SbxObject( aName_ )
+ , m_xServiceTypeDesc( xServiceTypeDesc )
+ , m_bNeedsInit( true )
+ {}
+
+ virtual SbxVariable* Find( const String&, SbxClassType );
+
+ void SFX_NOTIFY( SfxBroadcaster&, const TypeId&, const SfxHint& rHint, const TypeId& );
+};
+SV_DECL_IMPL_REF(SbUnoService);
+
+SbUnoService* findUnoService( const String& rName );
+
+
+void clearUnoServiceCtors( void );
+
+class SbUnoServiceCtor : public SbxMethod
+{
+ friend class SbUnoService;
+ friend void clearUnoServiceCtors( void );
+
+ ::com::sun::star::uno::Reference< ::com::sun::star::reflection::XServiceConstructorDescription > m_xServiceCtorDesc;
+
+ SbUnoServiceCtor* pPrev;
+ SbUnoServiceCtor* pNext;
+
+public:
+ TYPEINFO();
+
+ SbUnoServiceCtor( const String& aName_, ::com::sun::star::uno::Reference< ::com::sun::star::reflection::XServiceConstructorDescription > xServiceCtorDesc );
+ virtual ~SbUnoServiceCtor();
+ virtual SbxInfo* GetInfo();
+
+ ::com::sun::star::uno::Reference< ::com::sun::star::reflection::XServiceConstructorDescription > getServiceCtorDesc( void )
+ { return m_xServiceCtorDesc; }
+};
+
+
+// Wrapper for UNO Singleton
+class SbUnoSingleton : public SbxObject
+{
+ const ::com::sun::star::uno::Reference< ::com::sun::star::reflection::XSingletonTypeDescription > m_xSingletonTypeDesc;
+
+public:
+ TYPEINFO();
+ SbUnoSingleton( const String& aName_,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::reflection::XSingletonTypeDescription >& xSingletonTypeDesc );
+
+ void SFX_NOTIFY( SfxBroadcaster&, const TypeId&, const SfxHint& rHint, const TypeId& );
+};
+SV_DECL_IMPL_REF(SbUnoSingleton);
+
+SbUnoSingleton* findUnoSingleton( const String& rName );
+
+
+// #105565 Special Object to wrap a strongly typed Uno Any
+class SbUnoAnyObject: public SbxObject
+{
+ ::com::sun::star::uno::Any mVal;
+
+public:
+ SbUnoAnyObject( const ::com::sun::star::uno::Any& rVal )
+ : SbxObject( String() )
+ , mVal( rVal )
+ {}
+
+ const ::com::sun::star::uno::Any& getValue( void )
+ { return mVal; }
+
+ TYPEINFO();
+};
+
+
+// #112509 Special SbxArray to transport named parameters for calls
+// to OLEAutomation objects through the UNO OLE automation bridge
+
+class AutomationNamedArgsSbxArray : public SbxArray
+{
+ ::com::sun::star::uno::Sequence< ::rtl::OUString > maNameSeq;
+public:
+ TYPEINFO();
+ AutomationNamedArgsSbxArray( sal_Int32 nSeqSize )
+ : maNameSeq( nSeqSize )
+ {}
+
+ ::com::sun::star::uno::Sequence< ::rtl::OUString >& getNames( void )
+ { return maNameSeq; }
+};
+
+
+class StarBASIC;
+
+// Impl-Methoden fuer RTL
+void RTL_Impl_CreateUnoStruct( StarBASIC* pBasic, SbxArray& rPar, BOOL bWrite );
+void RTL_Impl_CreateUnoService( StarBASIC* pBasic, SbxArray& rPar, BOOL bWrite );
+void RTL_Impl_CreateUnoServiceWithArguments( StarBASIC* pBasic, SbxArray& rPar, BOOL bWrite );
+void RTL_Impl_CreateUnoValue( StarBASIC* pBasic, SbxArray& rPar, BOOL bWrite );
+void RTL_Impl_GetProcessServiceManager( StarBASIC* pBasic, SbxArray& rPar, BOOL bWrite );
+void RTL_Impl_HasInterfaces( StarBASIC* pBasic, SbxArray& rPar, BOOL bWrite );
+void RTL_Impl_IsUnoStruct( StarBASIC* pBasic, SbxArray& rPar, BOOL bWrite );
+void RTL_Impl_EqualUnoObjects( StarBASIC* pBasic, SbxArray& rPar, BOOL bWrite );
+void RTL_Impl_GetDefaultContext( StarBASIC* pBasic, SbxArray& rPar, BOOL bWrite );
+
+
+//========================================================================
+// #118116 Collection object
+
+class BasicCollection : public SbxObject
+{
+ friend class SbiRuntime;
+ SbxArrayRef xItemArray;
+ static SbxInfoRef xAddInfo;
+ static SbxInfoRef xItemInfo;
+
+ void Initialize();
+ virtual ~BasicCollection();
+ virtual void SFX_NOTIFY( SfxBroadcaster& rBC, const TypeId& rBCType,
+ const SfxHint& rHint, const TypeId& rHintType );
+ INT32 implGetIndex( SbxVariable* pIndexVar );
+ INT32 implGetIndexForName( const String& rName );
+ void CollAdd( SbxArray* pPar_ );
+ void CollItem( SbxArray* pPar_ );
+ void CollRemove( SbxArray* pPar_ );
+
+public:
+ TYPEINFO();
+ BasicCollection( const String& rClassname );
+ virtual SbxVariable* Find( const String&, SbxClassType );
+ virtual void Clear();
+};
+
+#endif
+
+
diff --git a/basic/source/inc/scanner.hxx b/basic/source/inc/scanner.hxx
new file mode 100644
index 000000000000..9738e8763a1a
--- /dev/null
+++ b/basic/source/inc/scanner.hxx
@@ -0,0 +1,146 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _SCANNER_HXX
+#define _SCANNER_HXX
+
+#include <tools/string.hxx>
+#ifndef _SBERRORS_HXX
+#include <basic/sberrors.hxx>
+#endif
+
+// Der Scanner ist stand-alone, d.h. er kann von ueberallher verwendet
+// werden. Eine BASIC-Instanz ist fuer Fehlermeldungen notwendig. Ohne
+// BASIC werden die Fehler nur gezaehlt. Auch ist Basic notwendig, wenn
+// eine erweiterte SBX-Variable zur Erkennung von Datentypen etc. verwendet
+// werden soll.
+
+class StarBASIC;
+
+class SbiScanner
+{
+ ::rtl::OUString aBuf; // Input-Puffer
+ ::rtl::OUString aLine; // aktuelle Zeile
+ const sal_Unicode* pLine; // Pointer
+ const sal_Unicode* pSaveLine; // Merker fuer Line
+protected:
+ String aSym; // Symbolpuffer
+ String aError; // Fehler-String
+ SbxDataType eScanType; // evtl. Datentyp
+ StarBASIC* pBasic; // Instanz fuer Fehler-Callbacks
+ double nVal; // numerischer Wert
+ short nCurCol1; // aktuelle Spalte 1
+ short nSavedCol1; // gerettete Spalte 1
+ short nCol; // aktuelle Spaltennummer
+ short nErrors; // Anzahl Fehler
+ short nColLock; // Lock-Zaehler fuer Col1
+ INT32 nBufPos; // aktuelle Buffer-Pos
+ USHORT nLine; // aktuelle Zeile
+ USHORT nCol1, nCol2; // aktuelle 1. und 2. Spalte
+ BOOL bSymbol; // TRUE: Symbol gescannt
+ BOOL bNumber; // TRUE: Zahl gescannt
+ BOOL bSpaces; // TRUE: Whitespace vor Token
+ BOOL bErrors; // TRUE: Fehler generieren
+ BOOL bAbort; // TRUE: abbrechen
+ BOOL bHash; // TRUE: # eingelesen
+ BOOL bError; // TRUE: Fehler generieren
+ BOOL bUsedForHilite; // TRUE: Nutzung fuer Highlighting
+ BOOL bCompatible; // TRUE: OPTION Compatibl
+ BOOL bVBASupportOn; // TRUE: OPTION VBASupport 1 otherwise default False
+ BOOL bPrevLineExtentsComment; // TRUE: Previous line is comment and ends on "... _"
+
+ void GenError( SbError );
+public:
+ SbiScanner( const ::rtl::OUString&, StarBASIC* = NULL );
+ ~SbiScanner();
+
+ void EnableErrors() { bError = FALSE; }
+ BOOL IsHash() { return bHash; }
+ BOOL IsCompatible() { return bCompatible; }
+ void SetCompatible( bool b ) { bCompatible = b; } // #118206
+ BOOL IsVBASupportOn() { return bVBASupportOn; }
+ void SetVBASupportOn( bool b ) { bVBASupportOn = b; }
+ BOOL WhiteSpace() { return bSpaces; }
+ short GetErrors() { return nErrors; }
+ short GetLine() { return nLine; }
+ short GetCol1() { return nCol1; }
+ short GetCol2() { return nCol2; }
+ void SetCol1( short n ) { nCol1 = n; }
+ StarBASIC* GetBasic() { return pBasic; }
+ void SaveLine(void) { pSaveLine = pLine; }
+ void RestoreLine(void) { pLine = pSaveLine; }
+ void LockColumn();
+ void UnlockColumn();
+ BOOL DoesColonFollow();
+
+ BOOL NextSym(); // naechstes Symbol lesen
+ const String& GetSym() { return aSym; }
+ SbxDataType GetType() { return eScanType; }
+ double GetDbl() { return nVal; }
+};
+
+class LetterTable
+{
+ bool IsLetterTab[256];
+
+public:
+ LetterTable( void );
+
+ inline bool isLetter( sal_Unicode c )
+ {
+ bool bRet = (c < 256) ? IsLetterTab[c] : isLetterUnicode( c );
+ return bRet;
+ }
+ bool isLetterUnicode( sal_Unicode c );
+};
+
+class BasicSimpleCharClass
+{
+ static LetterTable aLetterTable;
+
+public:
+ static BOOL isAlpha( sal_Unicode c, bool bCompatible )
+ {
+ BOOL bRet = (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')
+ || (bCompatible && aLetterTable.isLetter( c ));
+ return bRet;
+ }
+
+ static BOOL isDigit( sal_Unicode c )
+ {
+ BOOL bRet = (c >= '0' && c <= '9');
+ return bRet;
+ }
+
+ static BOOL isAlphaNumeric( sal_Unicode c, bool bCompatible )
+ {
+ BOOL bRet = isDigit( c ) || isAlpha( c, bCompatible );
+ return bRet;
+ }
+};
+
+#endif
diff --git a/basic/source/inc/scriptcont.hxx b/basic/source/inc/scriptcont.hxx
new file mode 100644
index 000000000000..091fbc24cdbe
--- /dev/null
+++ b/basic/source/inc/scriptcont.hxx
@@ -0,0 +1,199 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef BASIC_SCRIPTCONTAINER_HXX
+#define BASIC_SCRIPTCONTAINER_HXX
+
+#include "namecont.hxx"
+#include <basic/basmgr.hxx>
+#include <com/sun/star/script/vba/XVBAModuleInfo.hpp>
+#include <comphelper/uno3.hxx>
+
+class BasicManager;
+
+//============================================================================
+
+namespace basic
+{
+
+class SfxScriptLibraryContainer : public SfxLibraryContainer, public OldBasicPassword
+{
+ ::rtl::OUString maScriptLanguage;
+
+ // Methods to distinguish between deffirent library types
+ virtual SfxLibrary* SAL_CALL implCreateLibrary( const ::rtl::OUString& aName );
+ virtual SfxLibrary* SAL_CALL implCreateLibraryLink
+ ( const ::rtl::OUString& aName, const ::rtl::OUString& aLibInfoFileURL,
+ const ::rtl::OUString& StorageURL, sal_Bool ReadOnly );
+ virtual ::com::sun::star::uno::Any SAL_CALL createEmptyLibraryElement( void );
+ virtual bool SAL_CALL isLibraryElementValid( ::com::sun::star::uno::Any aElement ) const;
+ virtual void SAL_CALL writeLibraryElement
+ (
+ const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer>& xLibrary,
+ const ::rtl::OUString& aElementName,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::io::XOutputStream >& xOutput
+ )
+ throw(::com::sun::star::uno::Exception);
+
+ virtual ::com::sun::star::uno::Any SAL_CALL importLibraryElement
+ (
+ const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer>& xLibrary,
+ const ::rtl::OUString& aElementName,
+ const ::rtl::OUString& aFile,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream >& xElementStream );
+
+ virtual void SAL_CALL importFromOldStorage( const ::rtl::OUString& aFile );
+
+ virtual SfxLibraryContainer* createInstanceImpl( void );
+
+
+ // Password encryption
+ virtual sal_Bool implStorePasswordLibrary( SfxLibrary* pLib, const ::rtl::OUString& aName,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage>& xStorage, const ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler >& Handler );
+
+ // New variant for library export
+ virtual sal_Bool implStorePasswordLibrary( SfxLibrary* pLib, const ::rtl::OUString& aName,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& xStorage,
+ const ::rtl::OUString& aTargetURL,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::ucb::XSimpleFileAccess > xToUseSFI, const ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler >& Handler );
+
+ virtual sal_Bool implLoadPasswordLibrary( SfxLibrary* pLib, const ::rtl::OUString& Name,
+ sal_Bool bVerifyPasswordOnly=false )
+ throw(::com::sun::star::lang::WrappedTargetException,
+ ::com::sun::star::uno::RuntimeException);
+
+ virtual void onNewRootStorage();
+
+
+ // OldBasicPassword interface
+ virtual void setLibraryPassword( const String& rLibraryName, const String& rPassword );
+ virtual String getLibraryPassword( const String& rLibraryName );
+ virtual void clearLibraryPassword( const String& rLibraryName );
+ virtual sal_Bool hasLibraryPassword( const String& rLibraryName );
+
+ virtual const sal_Char* SAL_CALL getInfoFileName() const;
+ virtual const sal_Char* SAL_CALL getOldInfoFileName() const;
+ virtual const sal_Char* SAL_CALL getLibElementFileExtension() const;
+ virtual const sal_Char* SAL_CALL getLibrariesDir() const;
+
+public:
+ SfxScriptLibraryContainer( void );
+ SfxScriptLibraryContainer( const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& xStorage );
+
+
+ // Methods XLibraryContainerPassword
+ virtual sal_Bool SAL_CALL isLibraryPasswordProtected( const ::rtl::OUString& Name )
+ throw (::com::sun::star::container::NoSuchElementException,
+ ::com::sun::star::uno::RuntimeException);
+ virtual sal_Bool SAL_CALL isLibraryPasswordVerified( const ::rtl::OUString& Name )
+ throw (::com::sun::star::lang::IllegalArgumentException,
+ ::com::sun::star::container::NoSuchElementException,
+ ::com::sun::star::uno::RuntimeException);
+ virtual sal_Bool SAL_CALL verifyLibraryPassword( const ::rtl::OUString& Name, const ::rtl::OUString& Password )
+ throw (::com::sun::star::lang::IllegalArgumentException,
+ ::com::sun::star::container::NoSuchElementException,
+ ::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL changeLibraryPassword( const ::rtl::OUString& Name,
+ const ::rtl::OUString& OldPassword, const ::rtl::OUString& NewPassword )
+ throw (::com::sun::star::lang::IllegalArgumentException,
+ ::com::sun::star::container::NoSuchElementException,
+ ::com::sun::star::uno::RuntimeException);
+
+ // Methods XServiceInfo
+ virtual ::rtl::OUString SAL_CALL getImplementationName( )
+ throw (::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames( )
+ throw (::com::sun::star::uno::RuntimeException);
+
+ // Service
+ static ::com::sun::star::uno::Sequence< ::rtl::OUString > getSupportedServiceNames_static();
+ static ::rtl::OUString getImplementationName_static();
+ static ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL Create
+ ( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& xServiceManager )
+ throw( ::com::sun::star::uno::Exception );
+
+};
+
+//============================================================================
+typedef std::hash_map< ::rtl::OUString, ::com::sun::star::script::ModuleInfo, ::rtl::OUStringHash, ::std::equal_to< ::rtl::OUString > > ModuleInfoMap;
+
+typedef ::cppu::ImplHelper1 < ::com::sun::star::script::vba::XVBAModuleInfo
+ > SfxScriptLibrary_BASE;
+
+class SfxScriptLibrary : public SfxLibrary
+ , public SfxScriptLibrary_BASE
+{
+ friend class SfxScriptLibraryContainer;
+
+ sal_Bool mbLoadedSource;
+ sal_Bool mbLoadedBinary;
+ ModuleInfoMap mModuleInfos;
+
+ // Provide modify state including resources
+ virtual sal_Bool isModified( void );
+ virtual void storeResources( void );
+ virtual void storeResourcesAsURL( const ::rtl::OUString& URL, const ::rtl::OUString& NewName );
+ virtual void storeResourcesToURL( const ::rtl::OUString& URL,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler >& xHandler );
+ virtual void storeResourcesToStorage( const ::com::sun::star::uno::Reference
+ < ::com::sun::star::embed::XStorage >& xStorage );
+
+public:
+ SfxScriptLibrary
+ (
+ ModifiableHelper& _rModifiable,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xMSF,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::ucb::XSimpleFileAccess >& xSFI
+ );
+
+ SfxScriptLibrary
+ (
+ ModifiableHelper& _rModifiable,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xMSF,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::ucb::XSimpleFileAccess >& xSFI,
+ const ::rtl::OUString& aLibInfoFileURL, const ::rtl::OUString& aStorageURL, sal_Bool ReadOnly
+ );
+
+ DECLARE_XINTERFACE()
+ DECLARE_XTYPEPROVIDER()
+
+ // XVBAModuleInfo
+ virtual ::com::sun::star::script::ModuleInfo SAL_CALL getModuleInfo( const ::rtl::OUString& ModuleName ) throw (::com::sun::star::container::NoSuchElementException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException);
+ virtual sal_Bool SAL_CALL hasModuleInfo( const ::rtl::OUString& ModuleName ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL insertModuleInfo( const ::rtl::OUString& ModuleName, const ::com::sun::star::script::ModuleInfo& ModuleInfo ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::container::ElementExistException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL removeModuleInfo( const ::rtl::OUString& ModuleName ) throw (::com::sun::star::container::NoSuchElementException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException);
+
+ static bool containsValidModule( const ::com::sun::star::uno::Any& _rElement );
+
+protected:
+ virtual bool SAL_CALL isLibraryElementValid( ::com::sun::star::uno::Any aElement ) const;
+};
+
+} // namespace base
+
+#endif
+
diff --git a/basic/source/inc/stdobj.hxx b/basic/source/inc/stdobj.hxx
new file mode 100644
index 000000000000..000e39973eb3
--- /dev/null
+++ b/basic/source/inc/stdobj.hxx
@@ -0,0 +1,51 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _SBSTDOBJ_HXX
+#define _SBSTDOBJ_HXX
+
+#include <basic/sbxobj.hxx>
+
+class StarBASIC;
+class SbStdFactory;
+
+class SbiStdObject : public SbxObject
+{
+ SbStdFactory* pStdFactory;
+
+ ~SbiStdObject();
+ using SbxVariable::GetInfo;
+ SbxInfo* GetInfo( short );
+ virtual void SFX_NOTIFY( SfxBroadcaster& rBC, const TypeId& rBCType,
+ const SfxHint& rHint, const TypeId& rHintType );
+public:
+ SbiStdObject( const String&, StarBASIC* );
+ virtual SbxVariable* Find( const String&, SbxClassType );
+ virtual void SetModified( BOOL );
+};
+
+#endif
diff --git a/basic/source/inc/symtbl.hxx b/basic/source/inc/symtbl.hxx
new file mode 100644
index 000000000000..f2fbaa0ac1f1
--- /dev/null
+++ b/basic/source/inc/symtbl.hxx
@@ -0,0 +1,250 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _SYMTBL_HXX
+#define _SYMTBL_HXX
+
+#include <svl/svarray.hxx>
+#include <tools/string.hxx>
+#include <basic/sbxdef.hxx>
+#include <basic/sbdef.hxx>
+
+class SbiSymDef; // Basisklasse
+class SbiProcDef; // Prozedur
+class SbiConstDef; // Konstante
+class SbiSymPool; // Symbol-Pool
+class SbiStringPool; // gepoolte Strings
+
+class SvStream;
+class SbiParser;
+
+enum SbiSymScope { SbLOCAL, SbPARAM, SbPUBLIC, SbGLOBAL, SbRTL };
+
+///////////////////////////////////////////////////////////////////////////
+
+// Der String-Pool nimmt String-Eintraege auf und sorgt dafuer,
+// dass sie nicht doppelt vorkommen.
+
+SV_DECL_PTRARR_DEL(SbiStrings,String*,5,5)
+
+class SbiStringPool { // String-Pool
+ SbiStrings aData; // Daten
+ String aEmpty; // for convenience
+ SbiParser* pParser; // der Parser
+public:
+ SbiStringPool( SbiParser* );
+ ~SbiStringPool();
+ USHORT GetSize() const { return aData.Count(); }
+ // AB 8.4.1999, Default wegen #64236 auf TRUE geaendert
+ // Wenn der Bug sauber behoben ist, wieder auf FALSE aendern.
+ short Add( const String&, BOOL=TRUE );
+ short Add( double, SbxDataType );
+ const String& Find( USHORT ) const;
+ SbiParser* GetParser() { return pParser; }
+};
+
+///////////////////////////////////////////////////////////////////////////
+
+SV_DECL_PTRARR_DEL(SbiSymbols,SbiSymDef*,5,5)
+
+class SbiSymPool { // Symbol-Pool
+ friend class SbiSymDef;
+ friend class SbiProcDef;
+protected:
+ SbiStringPool& rStrings; // verwendeter Stringpool
+ SbiSymbols aData; // Daten
+ SbiSymPool* pParent; // uebergeordneter Symbol-Pool
+ SbiParser* pParser; // der Parser
+ SbiSymScope eScope; // Scope des Pools
+ USHORT nProcId; // aktuelles ProcId fuer STATIC-Variable
+ USHORT nCur; // Iterator
+public:
+ SbiSymPool( SbiStringPool&, SbiSymScope );
+ ~SbiSymPool();
+
+ void Clear();
+
+ void SetParent( SbiSymPool* p ) { pParent = p; }
+ void SetProcId( short n ) { nProcId = n; }
+ USHORT GetSize() const { return aData.Count(); }
+ SbiSymScope GetScope() const { return eScope; }
+ void SetScope( SbiSymScope s ) { eScope = s; }
+ SbiParser* GetParser() { return pParser; }
+
+ SbiSymDef* AddSym( const String& ); // Symbol hinzufuegen
+ SbiProcDef* AddProc( const String& );// Prozedur hinzufuegen
+ void Add( SbiSymDef* ); // Symbol uebernehmen
+ SbiSymDef* Find( const String& ) const;// Variablenname
+ SbiSymDef* FindId( USHORT ) const; // Variable per ID suchen
+ SbiSymDef* Get( USHORT ) const; // Variable per Position suchen
+ SbiSymDef* First(), *Next(); // Iteratoren
+
+ UINT32 Define( const String& ); // Label definieren
+ UINT32 Reference( const String& ); // Label referenzieren
+ void CheckRefs(); // offene Referenzen suchen
+};
+
+///////////////////////////////////////////////////////////////////////////
+
+class SbiSymDef { // Allgemeiner Symboleintrag
+ friend class SbiSymPool;
+protected:
+ String aName; // Name des Eintrags
+ SbxDataType eType; // Typ des Eintrags
+ SbiSymPool* pIn; // Parent-Pool
+ SbiSymPool* pPool; // Pool fuer Unterelemente
+ short nLen; // Stringlaenge bei STRING*n
+ short nDims; // Array-Dimensionen
+ USHORT nId; // Symbol-Nummer
+ USHORT nTypeId; // String-ID des Datentyps (Dim X AS Dytentyp)
+ USHORT nProcId; // aktuelles ProcId fuer STATIC-Variable
+ USHORT nPos; // Positions-Nummer
+ UINT32 nChain; // Backchain-Kette
+ BOOL bNew : 1; // TRUE: Dim As New...
+ BOOL bChained : 1; // TRUE: Symbol ist in Code definiert
+ BOOL bByVal : 1; // TRUE: ByVal-Parameter
+ BOOL bOpt : 1; // TRUE: optionaler Parameter
+ BOOL bStatic : 1; // TRUE: STATIC-Variable
+ BOOL bAs : 1; // TRUE: Datentyp per AS XXX definiert
+ BOOL bGlobal : 1; // TRUE: Global-Variable
+ BOOL bParamArray : 1; // TRUE: ParamArray parameter
+ BOOL bWithEvents : 1; // TRUE: Declared WithEvents
+ USHORT nDefaultId; // Symbol number of default value
+ short nFixedStringLength; // String length in: Dim foo As String*Length
+public:
+ SbiSymDef( const String& );
+ virtual ~SbiSymDef();
+ virtual SbiProcDef* GetProcDef();
+ virtual SbiConstDef* GetConstDef();
+
+ SbxDataType GetType() const { return eType; }
+ virtual void SetType( SbxDataType );
+ const String& GetName();
+ SbiSymScope GetScope() const;
+ USHORT GetProcId() const{ return nProcId; }
+ UINT32 GetAddr() const { return nChain; }
+ USHORT GetId() const { return nId; }
+ USHORT GetTypeId() const{ return nTypeId; }
+ void SetTypeId( USHORT n ) { nTypeId = n; eType = SbxOBJECT; }
+ USHORT GetPos() const { return nPos; }
+ void SetLen( short n ){ nLen = n; }
+ short GetLen() const { return nLen; }
+ void SetDims( short n ) { nDims = n; }
+ short GetDims() const { return nDims; }
+ BOOL IsDefined() const{ return bChained; }
+ void SetOptional() { bOpt = TRUE; }
+ void SetParamArray() { bParamArray = TRUE; }
+ void SetWithEvents() { bWithEvents = TRUE; }
+ void SetByVal( BOOL bByVal_ = TRUE )
+ { bByVal = bByVal_; }
+ void SetStatic( BOOL bAsStatic = TRUE ) { bStatic = bAsStatic; }
+ void SetNew() { bNew = TRUE; }
+ void SetDefinedAs() { bAs = TRUE; }
+ void SetGlobal(BOOL b){ bGlobal = b; }
+ void SetDefaultId( USHORT n ) { nDefaultId = n; }
+ USHORT GetDefaultId( void ) { return nDefaultId; }
+ BOOL IsOptional() const{ return bOpt; }
+ BOOL IsParamArray() const{ return bParamArray; }
+ BOOL IsWithEvents() const{ return bWithEvents; }
+ BOOL IsByVal() const { return bByVal; }
+ BOOL IsStatic() const { return bStatic; }
+ BOOL IsNew() const { return bNew; }
+ BOOL IsDefinedAs() const { return bAs; }
+ BOOL IsGlobal() const { return bGlobal; }
+ short GetFixedStringLength( void ) const { return nFixedStringLength; }
+ void SetFixedStringLength( short n ) { nFixedStringLength = n; }
+
+ SbiSymPool& GetPool();
+ UINT32 Define(); // Symbol in Code definieren
+ UINT32 Reference(); // Symbol in Code referenzieren
+
+private:
+ SbiSymDef( const SbiSymDef& );
+
+};
+
+class SbiProcDef : public SbiSymDef { // Prozedur-Definition (aus Basic):
+ SbiSymPool aParams; // Parameter
+ SbiSymPool aLabels; // lokale Sprungziele
+ String aLibName; // LIB "name"
+ String aAlias; // ALIAS "name"
+ USHORT nLine1, nLine2; // Zeilenbereich
+ PropertyMode mePropMode; // Marks if this is a property procedure and which
+ String maPropName; // Property name if property procedure (!= proc name)
+ BOOL bCdecl : 1; // TRUE: CDECL angegeben
+ BOOL bPublic : 1; // TRUE: proc ist PUBLIC
+ BOOL mbProcDecl : 1; // TRUE: instanciated by SbiParser::ProcDecl
+public:
+ SbiProcDef( SbiParser*, const String&, BOOL bProcDecl=false );
+ virtual ~SbiProcDef();
+ virtual SbiProcDef* GetProcDef();
+ virtual void SetType( SbxDataType );
+ SbiSymPool& GetParams() { return aParams; }
+ SbiSymPool& GetLabels() { return aLabels; }
+ SbiSymPool& GetLocals() { return GetPool();}
+ String& GetLib() { return aLibName; }
+ String& GetAlias() { return aAlias; }
+ void SetPublic( BOOL b ) { bPublic = b; }
+ BOOL IsPublic() const { return bPublic; }
+ void SetCdecl( BOOL b = TRUE) { bCdecl = b; }
+ BOOL IsCdecl() const { return bCdecl; }
+ BOOL IsUsedForProcDecl() const { return mbProcDecl; }
+ void SetLine1( USHORT n ) { nLine1 = n; }
+ USHORT GetLine1() const { return nLine1; }
+ void SetLine2( USHORT n ) { nLine2 = n; }
+ USHORT GetLine2() const { return nLine2; }
+ PropertyMode getPropertyMode() { return mePropMode; }
+ void setPropertyMode( PropertyMode ePropMode );
+ const String& GetPropName() { return maPropName; }
+
+ // Match mit einer Forward-Deklaration. Die Parameternamen
+ // werden abgeglichen und die Forward-Deklaration wird
+ // durch this ersetzt
+ void Match( SbiProcDef* pForward );
+
+private:
+ SbiProcDef( const SbiProcDef& );
+
+};
+
+class SbiConstDef : public SbiSymDef
+{
+ double nVal;
+ String aVal;
+public:
+ SbiConstDef( const String& );
+ virtual ~SbiConstDef();
+ virtual SbiConstDef* GetConstDef();
+ void Set( double, SbxDataType );
+ void Set( const String& );
+ double GetValue() { return nVal; }
+ const String& GetString() { return aVal; }
+};
+
+
+#endif
+
diff --git a/basic/source/inc/token.hxx b/basic/source/inc/token.hxx
new file mode 100644
index 000000000000..930f68910b78
--- /dev/null
+++ b/basic/source/inc/token.hxx
@@ -0,0 +1,183 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _TOKEN_HXX
+#define _TOKEN_HXX
+
+#include "scanner.hxx"
+#ifndef _SBDEF_HXX
+#include <basic/sbdef.hxx>
+#endif
+
+#if defined( SHARED )
+#define SbiTokenSHAREDTMPUNDEF
+#undef SHARED
+#endif
+
+// Der Tokenizer ist stand-alone, d.h. er kann von ueberallher verwendet
+// werden. Eine BASIC-Instanz ist fuer Fehlermeldungen notwendig. Ohne
+// BASIC werden die Fehler nur gezaehlt. Auch ist Basic notwendig, wenn
+// eine erweiterte SBX-Variable zur Erkennung von Datentypen etc. verwendet
+// werden soll.
+
+enum SbiToken {
+ NIL = 0,
+ // Token zwischen 0x20 und 0x3F sind Literale:
+ LPAREN = '(', RPAREN = ')', COMMA = ',', DOT = '.', EXCLAM = '!',
+ HASH = '#', SEMICOLON = ';',
+
+ // Anweisungen:
+ FIRSTKWD = 0x40,
+ AS = FIRSTKWD, ALIAS, ASSIGN,
+ CALL, CASE, CLOSE, COMPARE, _CONST_,
+ DECLARE, DIM, DO,
+
+ // in der Reihenfolge der Datentyp-Enums!
+ DEFINT, DEFLNG, DEFSNG, DEFDBL, DEFCUR, DEFDATE, DEFSTR, DEFOBJ,
+ DEFERR, DEFBOOL, DEFVAR,
+ // in der Reihenfolge der Datentyp-Enums!
+ DATATYPE1,
+ TINTEGER = DATATYPE1,
+ TLONG, TSINGLE, TDOUBLE, TCURRENCY, TDATE, TSTRING, TOBJECT,
+ _ERROR_, TBOOLEAN, TVARIANT, TBYTE,
+ DATATYPE2 = TBYTE,
+
+ EACH, ELSE, ELSEIF, END, ERASE, EXIT,
+ FOR, FUNCTION,
+ GET, GLOBAL, GOSUB, GOTO,
+ IF, _IN_, INPUT,
+ LET, LINE, LINEINPUT, LOCAL, LOOP, LPRINT, LSET,
+ NAME, NEW, NEXT,
+ ON, OPEN, OPTION, IMPLEMENTS,
+ PRINT, PRIVATE, PROPERTY, PUBLIC,
+ REDIM, REM, RESUME, RETURN, RSET,
+ SELECT, SET, SHARED, STATIC, STEP, STOP, SUB,
+ TEXT, THEN, TO, TYPE, ENUM,
+ UNTIL,
+ WEND, WHILE, WITH, WRITE,
+ ENDENUM, ENDIF, ENDFUNC, ENDPROPERTY, ENDSUB, ENDTYPE, ENDSELECT, ENDWITH,
+ // Ende aller Keywords
+ LASTKWD = ENDWITH,
+ // Statement-Ende
+ EOS, EOLN,
+ // Operatoren:
+ EXPON, NEG, MUL,
+ DIV, IDIV, MOD, PLUS, MINUS,
+ EQ, NE, LT, GT, LE, GE,
+ NOT, AND, OR, XOR, EQV,
+ IMP, CAT, LIKE, IS, TYPEOF,
+ // Sonstiges:
+ FIRSTEXTRA,
+ NUMBER=FIRSTEXTRA, FIXSTRING, SYMBOL, _CDECL_, BYVAL, BYREF,
+ OUTPUT, RANDOM, APPEND, BINARY, ACCESS,
+ LOCK, READ, PRESERVE, BASE, ANY, LIB, _OPTIONAL_,
+ EXPLICIT, COMPATIBLE, CLASSMODULE, PARAMARRAY, WITHEVENTS,
+
+ // Ab hier kommen JavaScript-Tokens (gleiches enum, damit gleicher Typ)
+ FIRSTJAVA,
+ JS_BREAK=FIRSTJAVA, JS_CONTINUE, JS_FOR, JS_FUNCTION, JS_IF, JS_NEW,
+ JS_RETURN, JS_THIS, JS_VAR, JS_WHILE, JS_WITH,
+
+ // JavaScript-Operatoren
+ // _ASS_ = Assignment
+ JS_COMMA, JS_ASSIGNMENT, JS_ASS_PLUS, JS_ASS_MINUS, JS_ASS_MUL,
+ JS_ASS_DIV, JS_ASS_MOD, JS_ASS_LSHIFT, JS_ASS_RSHIFT, JS_ASS_RSHIFT_Z,
+ JS_ASS_AND, JS_ASS_XOR, JS_ASS_OR,
+ JS_COND_QUEST, JS_COND_SEL, JS_LOG_OR, JS_LOG_AND, JS_BIT_OR,
+ JS_BIT_XOR, JS_BIT_AND, JS_EQ, JS_NE, JS_LT, JS_LE,
+ JS_GT, JS_GE, JS_LSHIFT, JS_RSHIFT, JS_RSHIFT_Z,
+ JS_PLUS, JS_MINUS, JS_MUL, JS_DIV, JS_MOD, JS_LOG_NOT, JS_BIT_NOT,
+ JS_INC, JS_DEC, JS_LPAREN, JS_RPAREN, JS_LINDEX, JS_RINDEX
+ , VBASUPPORT
+};
+
+#ifdef SbiTokenSHAREDTMPUNDEF
+#define SHARED
+#undef SbiTokenSHAREDTMPUNDEF
+#endif
+
+// #i109076
+class TokenLabelInfo
+{
+ bool* m_pTokenCanBeLabelTab;
+
+public:
+ TokenLabelInfo( void );
+ TokenLabelInfo( const TokenLabelInfo& rInfo )
+ : m_pTokenCanBeLabelTab( NULL )
+ { (void)rInfo; }
+ ~TokenLabelInfo();
+
+ bool canTokenBeLabel( SbiToken eTok )
+ { return m_pTokenCanBeLabelTab[eTok]; }
+};
+
+class SbiTokenizer : public SbiScanner {
+ TokenLabelInfo m_aTokenLabelInfo;
+
+protected:
+ SbiToken eCurTok; // aktuelles Token
+ SbiToken ePush; // Pushback-Token
+ USHORT nPLine, nPCol1, nPCol2; // Pushback-Location
+ BOOL bEof; // TRUE bei Dateiende
+ BOOL bEos; // TRUE bei Statement-Ende
+ BOOL bKeywords; // TRUE, falls Keywords geparst werden
+ BOOL bAs; // letztes Keyword war AS
+ BOOL bErrorIsSymbol; // Handle Error token as Symbol, not keyword
+public:
+ SbiTokenizer( const ::rtl::OUString&, StarBASIC* = NULL );
+ ~SbiTokenizer();
+
+ inline BOOL IsEof() { return bEof; }
+ inline BOOL IsEos() { return bEos; }
+
+ void Push( SbiToken ); // Pushback eines Tokens
+ const String& Symbol( SbiToken );// Rueckumwandlung
+
+ SbiToken Peek(); // das naechste Token lesen
+ SbiToken Next(); // Ein Token lesen
+ BOOL MayBeLabel( BOOL= FALSE ); // Kann es ein Label sein?
+
+ void Hilite( SbTextPortions& ); // Syntax-Highlighting
+
+ void Error( SbError c ) { GenError( c ); }
+ void Error( SbError, SbiToken );
+ void Error( SbError, const char* );
+ void Error( SbError, String );
+
+ void Keywords( BOOL b ) { bKeywords = b; }
+
+ static BOOL IsEoln( SbiToken t )
+ { return BOOL( t == EOS || t == EOLN || t == REM ); }
+ static BOOL IsKwd( SbiToken t )
+ { return BOOL( t >= FIRSTKWD && t <= LASTKWD ); }
+ static BOOL IsExtra( SbiToken t )
+ { return BOOL( t >= FIRSTEXTRA ); }
+};
+
+
+#endif
diff --git a/basic/source/runtime/basrdll.cxx b/basic/source/runtime/basrdll.cxx
new file mode 100644
index 000000000000..799caf0cd954
--- /dev/null
+++ b/basic/source/runtime/basrdll.cxx
@@ -0,0 +1,104 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+#include <tools/shl.hxx>
+#include <vcl/svapp.hxx>
+#include <svl/solar.hrc>
+#include <tools/debug.hxx>
+#include <vcl/msgbox.hxx>
+
+#include <basic/sbstar.hxx>
+#include <basic/basrdll.hxx>
+#include <basrid.hxx>
+#include <sb.hrc>
+
+SttResId::SttResId( sal_uInt32 nId ) :
+ ResId( nId, *((*(BasicDLL**)GetAppData(SHL_BASIC))->GetSttResMgr()) )
+{
+}
+
+BasResId::BasResId( sal_uInt32 nId ) :
+ ResId( nId, *((*(BasicDLL**)GetAppData(SHL_BASIC))->GetBasResMgr()) )
+{
+}
+
+BasicDLL::BasicDLL()
+{
+ *(BasicDLL**)GetAppData(SHL_BASIC) = this;
+ ::com::sun::star::lang::Locale aLocale = Application::GetSettings().GetUILocale();
+ pSttResMgr = ResMgr::CreateResMgr(CREATEVERSIONRESMGR_NAME(stt), aLocale );
+ pBasResMgr = ResMgr::CreateResMgr(CREATEVERSIONRESMGR_NAME(sb), aLocale );
+ bDebugMode = FALSE;
+ bBreakEnabled = TRUE;
+}
+
+BasicDLL::~BasicDLL()
+{
+ delete pSttResMgr;
+ delete pBasResMgr;
+}
+
+void BasicDLL::EnableBreak( BOOL bEnable )
+{
+ BasicDLL* pThis = *(BasicDLL**)GetAppData(SHL_BASIC);
+ DBG_ASSERT( pThis, "BasicDLL::EnableBreak: Noch keine Instanz!" );
+ if ( pThis )
+ pThis->bBreakEnabled = bEnable;
+}
+
+void BasicDLL::SetDebugMode( BOOL bDebugMode )
+{
+ BasicDLL* pThis = *(BasicDLL**)GetAppData(SHL_BASIC);
+ DBG_ASSERT( pThis, "BasicDLL::EnableBreak: Noch keine Instanz!" );
+ if ( pThis )
+ pThis->bDebugMode = bDebugMode;
+}
+
+
+void BasicDLL::BasicBreak()
+{
+ //bJustStopping: Wenn jemand wie wild x-mal STOP drueckt, aber das Basic
+ // nicht schnell genug anhaelt, kommt die Box ggf. oefters...
+ static BOOL bJustStopping = FALSE;
+
+ BasicDLL* pThis = *(BasicDLL**)GetAppData(SHL_BASIC);
+ DBG_ASSERT( pThis, "BasicDLL::EnableBreak: Noch keine Instanz!" );
+ if ( pThis )
+ {
+ if ( StarBASIC::IsRunning() && !bJustStopping && ( pThis->bBreakEnabled || pThis->bDebugMode ) )
+ {
+ bJustStopping = TRUE;
+ StarBASIC::Stop();
+ String aMessageStr( BasResId( IDS_SBERR_TERMINATED ) );
+ InfoBox( 0, aMessageStr ).Execute();
+ bJustStopping = FALSE;
+ }
+ }
+}
+
diff --git a/basic/source/runtime/ddectrl.cxx b/basic/source/runtime/ddectrl.cxx
new file mode 100644
index 000000000000..89d473099f0b
--- /dev/null
+++ b/basic/source/runtime/ddectrl.cxx
@@ -0,0 +1,192 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+#include <tools/errcode.hxx>
+#include <svl/svdde.hxx>
+#include "ddectrl.hxx"
+#ifndef _SBERRORS_HXX
+#include <basic/sberrors.hxx>
+#endif
+
+#define DDE_FREECHANNEL ((DdeConnection*)0xffffffff)
+
+#define DDE_FIRSTERR 0x4000
+#define DDE_LASTERR 0x4011
+
+static const SbError nDdeErrMap[] =
+{
+ /* DMLERR_ADVACKTIMEOUT */ 0x4000, SbERR_DDE_TIMEOUT,
+ /* DMLERR_BUSY */ 0x4001, SbERR_DDE_BUSY,
+ /* DMLERR_DATAACKTIMEOUT */ 0x4002, SbERR_DDE_TIMEOUT,
+ /* DMLERR_DLL_NOT_INITIALIZED */ 0x4003, SbERR_DDE_ERROR,
+ /* DMLERR_DLL_USAGE */ 0x4004, SbERR_DDE_ERROR,
+ /* DMLERR_EXECACKTIMEOUT */ 0x4005, SbERR_DDE_TIMEOUT,
+ /* DMLERR_INVALIDPARAMETER */ 0x4006, SbERR_DDE_ERROR,
+ /* DMLERR_LOW_MEMORY */ 0x4007, SbERR_DDE_ERROR,
+ /* DMLERR_MEMORY_ERROR */ 0x4008, SbERR_DDE_ERROR,
+ /* DMLERR_NOTPROCESSED */ 0x4009, SbERR_DDE_NOTPROCESSED,
+ /* DMLERR_NO_CONV_ESTABLISHED */ 0x400a, SbERR_DDE_NO_CHANNEL,
+ /* DMLERR_POKEACKTIMEOUT */ 0x400b, SbERR_DDE_TIMEOUT,
+ /* DMLERR_POSTMSG_FAILED */ 0x400c, SbERR_DDE_QUEUE_OVERFLOW,
+ /* DMLERR_REENTRANCY */ 0x400d, SbERR_DDE_ERROR,
+ /* DMLERR_SERVER_DIED */ 0x400e, SbERR_DDE_PARTNER_QUIT,
+ /* DMLERR_SYS_ERROR */ 0x400f, SbERR_DDE_ERROR,
+ /* DMLERR_UNADVACKTIMEOUT */ 0x4010, SbERR_DDE_TIMEOUT,
+ /* DMLERR_UNFOUND_QUEUE_ID */ 0x4011, SbERR_DDE_NO_CHANNEL
+};
+
+SbError SbiDdeControl::GetLastErr( DdeConnection* pConv )
+{
+ if( !pConv )
+ return 0;
+ long nErr = pConv->GetError();
+ if( !nErr )
+ return 0;
+ if( nErr < DDE_FIRSTERR || nErr > DDE_LASTERR )
+ return SbERR_DDE_ERROR;
+ return nDdeErrMap[ 2*(nErr - DDE_FIRSTERR) + 1 ];
+}
+
+IMPL_LINK_INLINE( SbiDdeControl,Data , DdeData*, pData,
+{
+ aData = String::CreateFromAscii( (char*)(const void*)*pData );
+ return 1;
+}
+)
+
+SbiDdeControl::SbiDdeControl()
+{
+ pConvList = new DdeConnections;
+ DdeConnection* pPtr = DDE_FREECHANNEL;
+ pConvList->Insert( pPtr );
+}
+
+SbiDdeControl::~SbiDdeControl()
+{
+ TerminateAll();
+ delete pConvList;
+}
+
+INT16 SbiDdeControl::GetFreeChannel()
+{
+ INT16 nListSize = (INT16)pConvList->Count();
+ DdeConnection* pPtr = pConvList->First();
+ pPtr = pConvList->Next(); // nullten eintrag ueberspringen
+ INT16 nChannel;
+ for( nChannel = 1; nChannel < nListSize; nChannel++ )
+ {
+ if( pPtr == DDE_FREECHANNEL )
+ return nChannel;
+ pPtr = pConvList->Next();
+ }
+ pPtr = DDE_FREECHANNEL;
+ pConvList->Insert( pPtr, LIST_APPEND );
+ return nChannel;
+}
+
+SbError SbiDdeControl::Initiate( const String& rService, const String& rTopic,
+ INT16& rnHandle )
+{
+ SbError nErr;
+ DdeConnection* pConv = new DdeConnection( rService, rTopic );
+ nErr = GetLastErr( pConv );
+ if( nErr )
+ {
+ delete pConv;
+ rnHandle = 0;
+ }
+ else
+ {
+ INT16 nChannel = GetFreeChannel();
+ pConvList->Replace( pConv, (ULONG)nChannel );
+ rnHandle = nChannel;
+ }
+ return 0;
+}
+
+SbError SbiDdeControl::Terminate( INT16 nChannel )
+{
+ DdeConnection* pConv = pConvList->GetObject( (ULONG)nChannel );
+ if( !nChannel || !pConv || pConv == DDE_FREECHANNEL )
+ return SbERR_DDE_NO_CHANNEL;
+ pConvList->Replace( DDE_FREECHANNEL, (ULONG)nChannel );
+ delete pConv;
+ return 0L;
+}
+
+SbError SbiDdeControl::TerminateAll()
+{
+ INT16 nChannel = (INT16)pConvList->Count();
+ while( nChannel )
+ {
+ nChannel--;
+ Terminate( nChannel );
+ }
+
+ pConvList->Clear();
+ DdeConnection* pPtr = DDE_FREECHANNEL;
+ pConvList->Insert( pPtr );
+
+ return 0;
+}
+
+SbError SbiDdeControl::Request( INT16 nChannel, const String& rItem, String& rResult )
+{
+ DdeConnection* pConv = pConvList->GetObject( (ULONG)nChannel );
+ if( !nChannel || !pConv || pConv == DDE_FREECHANNEL )
+ return SbERR_DDE_NO_CHANNEL;
+
+ DdeRequest aRequest( *pConv, rItem, 30000 );
+ aRequest.SetDataHdl( LINK( this, SbiDdeControl, Data ) );
+ aRequest.Execute();
+ rResult = aData;
+ return GetLastErr( pConv );
+}
+
+SbError SbiDdeControl::Execute( INT16 nChannel, const String& rCommand )
+{
+ DdeConnection* pConv = pConvList->GetObject( (ULONG)nChannel );
+ if( !nChannel || !pConv || pConv == DDE_FREECHANNEL )
+ return SbERR_DDE_NO_CHANNEL;
+ DdeExecute aRequest( *pConv, rCommand, 30000 );
+ aRequest.Execute();
+ return GetLastErr( pConv );
+}
+
+SbError SbiDdeControl::Poke( INT16 nChannel, const String& rItem, const String& rData )
+{
+ DdeConnection* pConv = pConvList->GetObject( (ULONG)nChannel );
+ if( !nChannel || !pConv || pConv == DDE_FREECHANNEL )
+ return SbERR_DDE_NO_CHANNEL;
+ DdePoke aRequest( *pConv, rItem, DdeData(rData), 30000 );
+ aRequest.Execute();
+ return GetLastErr( pConv );
+}
+
+
diff --git a/basic/source/runtime/ddectrl.hxx b/basic/source/runtime/ddectrl.hxx
new file mode 100644
index 000000000000..c1e9da823a20
--- /dev/null
+++ b/basic/source/runtime/ddectrl.hxx
@@ -0,0 +1,64 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _DDECTRL_HXX
+#define _DDECTRL_HXX
+
+#include <tools/link.hxx>
+#ifndef _SBERRORS_HXX
+#include <basic/sberrors.hxx>
+#endif
+#include <tools/string.hxx>
+
+class DdeConnection;
+class DdeConnections;
+class DdeData;
+
+class SbiDdeControl
+{
+private:
+ DECL_LINK( Data, DdeData* );
+ SbError GetLastErr( DdeConnection* );
+ INT16 GetFreeChannel();
+ DdeConnections* pConvList;
+ String aData;
+
+public:
+
+ SbiDdeControl();
+ ~SbiDdeControl();
+
+ SbError Initiate( const String& rService, const String& rTopic,
+ INT16& rnHandle );
+ SbError Terminate( INT16 nChannel );
+ SbError TerminateAll();
+ SbError Request( INT16 nChannel, const String& rItem, String& rResult );
+ SbError Execute( INT16 nChannel, const String& rCommand );
+ SbError Poke( INT16 nChannel, const String& rItem, const String& rData );
+};
+
+#endif
diff --git a/basic/source/runtime/dllmgr.cxx b/basic/source/runtime/dllmgr.cxx
new file mode 100644
index 000000000000..04f1ee0a8acc
--- /dev/null
+++ b/basic/source/runtime/dllmgr.cxx
@@ -0,0 +1,738 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "precompiled_basic.hxx"
+#include "sal/config.h"
+
+#include <algorithm>
+#include <cstddef>
+#include <list>
+#include <map>
+#include <vector>
+
+#include "basic/sbx.hxx"
+#include "basic/sbxvar.hxx"
+#include "osl/thread.h"
+#include "rtl/ref.hxx"
+#include "rtl/string.hxx"
+#include "rtl/ustring.hxx"
+#include "salhelper/simplereferenceobject.hxx"
+#include "tools/svwin.h"
+
+#undef max
+
+#include "dllmgr.hxx"
+
+/* Open issues:
+
+ Only 32-bit Windows for now.
+
+ Missing support for functions returning structs (see TODO in call()).
+
+ Missing support for additional data types (64 bit integers, Any, ...; would
+ trigger OSL_ASSERT(false) in various switches).
+
+ It is assumed that the variables passed into SbiDllMgr::Call to represent
+ the arguments and return value have types that exactly match the Declare
+ statement; it would be better if this code had access to the function
+ signature from the Declare statement, so that it could convert the passed
+ variables accordingly.
+*/
+
+#if defined WNT // only 32-bit Windows, actually
+
+extern "C" {
+
+int __stdcall DllMgr_call32(FARPROC, void const * stack, std::size_t size);
+double __stdcall DllMgr_callFp(FARPROC, void const * stack, std::size_t size);
+
+}
+
+namespace {
+
+char * address(std::vector< char > & blob) {
+ return blob.empty() ? 0 : &blob[0];
+}
+
+SbError convert(rtl::OUString const & source, rtl::OString * target) {
+ return
+ source.convertToString(
+ target, osl_getThreadTextEncoding(),
+ (RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR |
+ RTL_UNICODETOTEXT_FLAGS_INVALID_ERROR))
+ ? ERRCODE_NONE : ERRCODE_BASIC_BAD_ARGUMENT;
+ //TODO: more specific errcode?
+}
+
+SbError convert(char const * source, sal_Int32 length, rtl::OUString * target) {
+ return
+ rtl_convertStringToUString(
+ &target->pData, source, length, osl_getThreadTextEncoding(),
+ (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR |
+ RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR |
+ RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR))
+ ? ERRCODE_NONE : ERRCODE_BASIC_BAD_ARGUMENT;
+ //TODO: more specific errcode?
+}
+
+struct UnmarshalData {
+ UnmarshalData(SbxVariable * theVariable, void * theBuffer):
+ variable(theVariable), buffer(theBuffer) {}
+
+ SbxVariable * variable;
+ void * buffer;
+};
+
+struct StringData: public UnmarshalData {
+ StringData(SbxVariable * theVariable, void * theBuffer, bool theSpecial):
+ UnmarshalData(theVariable, theBuffer), special(theSpecial) {}
+
+ bool special;
+};
+
+class MarshalData: private boost::noncopyable {
+public:
+ std::vector< char > * newBlob() {
+ blobs_.push_front(std::vector< char >());
+ return &blobs_.front();
+ }
+
+ std::vector< UnmarshalData > unmarshal;
+
+ std::vector< StringData > unmarshalStrings;
+
+private:
+ std::list< std::vector< char > > blobs_;
+};
+
+std::size_t align(std::size_t address, std::size_t alignment) {
+ // alignment = 2^k for some k >= 0
+ return (address + (alignment - 1)) & ~(alignment - 1);
+}
+
+char * align(
+ std::vector< char > & blob, std::size_t alignment, std::size_t offset,
+ std::size_t add)
+{
+ std::vector< char >::size_type n = blob.size();
+ n = align(n - offset, alignment) + offset; //TODO: overflow in align()
+ blob.resize(n + add); //TODO: overflow
+ return address(blob) + n;
+}
+
+template< typename T > void add(
+ std::vector< char > & blob, T const & data, std::size_t alignment,
+ std::size_t offset)
+{
+ *reinterpret_cast< T * >(align(blob, alignment, offset, sizeof (T))) = data;
+}
+
+std::size_t alignment(SbxVariable * variable) {
+ OSL_ASSERT(variable != 0);
+ if ((variable->GetType() & SbxARRAY) == 0) {
+ switch (variable->GetType()) {
+ case SbxINTEGER:
+ return 2;
+ case SbxLONG:
+ case SbxSINGLE:
+ case SbxSTRING:
+ return 4;
+ case SbxDOUBLE:
+ return 8;
+ case SbxOBJECT:
+ {
+ std::size_t n = 1;
+ SbxArray * props = PTR_CAST(SbxObject, variable->GetObject())->
+ GetProperties();
+ for (USHORT i = 0; i < props->Count(); ++i) {
+ n = std::max(n, alignment(props->Get(i)));
+ }
+ return n;
+ }
+ case SbxBOOL:
+ case SbxBYTE:
+ return 1;
+ default:
+ OSL_ASSERT(false);
+ return 1;
+ }
+ } else {
+ SbxDimArray * arr = PTR_CAST(SbxDimArray, variable->GetObject());
+ int dims = arr->GetDims();
+ std::vector< INT32 > low(dims);
+ for (int i = 0; i < dims; ++i) {
+ INT32 up;
+ arr->GetDim32(i + 1, low[i], up);
+ }
+ return alignment(arr->Get32(&low[0]));
+ }
+}
+
+SbError marshal(
+ bool outer, SbxVariable * variable, bool special,
+ std::vector< char > & blob, std::size_t offset, MarshalData & data);
+
+SbError marshalString(
+ SbxVariable * variable, bool special, MarshalData & data, void ** buffer)
+{
+ OSL_ASSERT(variable != 0 && buffer != 0);
+ rtl::OString str;
+ SbError e = convert(variable->GetString(), &str);
+ if (e != ERRCODE_NONE) {
+ return e;
+ }
+ std::vector< char > * blob = data.newBlob();
+ blob->insert(blob->begin(), str.getStr(), str.getStr() + str.getLength());
+ *buffer = address(*blob);
+ data.unmarshalStrings.push_back(StringData(variable, *buffer, special));
+ return ERRCODE_NONE;
+}
+
+SbError marshalStruct(
+ SbxVariable * variable, std::vector< char > & blob, std::size_t offset,
+ MarshalData & data)
+{
+ OSL_ASSERT(variable != 0);
+ SbxArray * props = PTR_CAST(SbxObject, variable->GetObject())->
+ GetProperties();
+ for (USHORT i = 0; i < props->Count(); ++i) {
+ SbError e = marshal(false, props->Get(i), false, blob, offset, data);
+ if (e != ERRCODE_NONE) {
+ return e;
+ }
+ }
+ return ERRCODE_NONE;
+}
+
+SbError marshalArray(
+ SbxVariable * variable, std::vector< char > & blob, std::size_t offset,
+ MarshalData & data)
+{
+ OSL_ASSERT(variable != 0);
+ SbxDimArray * arr = PTR_CAST(SbxDimArray, variable->GetObject());
+ int dims = arr->GetDims();
+ std::vector< INT32 > low(dims);
+ std::vector< INT32 > up(dims);
+ for (int i = 0; i < dims; ++i) {
+ arr->GetDim32(i + 1, low[i], up[i]);
+ }
+ for (std::vector< INT32 > idx = low;;) {
+ SbError e = marshal(
+ false, arr->Get32(&idx[0]), false, blob, offset, data);
+ if (e != ERRCODE_NONE) {
+ return e;
+ }
+ int i = dims - 1;
+ while (idx[i] == up[i]) {
+ idx[i] = low[i];
+ if (i == 0) {
+ return ERRCODE_NONE;
+ }
+ --i;
+ }
+ ++idx[i];
+ }
+}
+
+// 8-aligned structs are only 4-aligned on stack, so alignment of members in
+// such structs must take that into account via "offset"
+SbError marshal(
+ bool outer, SbxVariable * variable, bool special,
+ std::vector< char > & blob, std::size_t offset, MarshalData & data)
+{
+ OSL_ASSERT(variable != 0);
+ if ((variable->GetFlags() & SBX_REFERENCE) == 0) {
+ if ((variable->GetType() & SbxARRAY) == 0) {
+ switch (variable->GetType()) {
+ case SbxINTEGER:
+ add(blob, variable->GetInteger(), outer ? 4 : 2, offset);
+ break;
+ case SbxLONG:
+ add(blob, variable->GetLong(), 4, offset);
+ break;
+ case SbxSINGLE:
+ add(blob, variable->GetSingle(), 4, offset);
+ break;
+ case SbxDOUBLE:
+ add(blob, variable->GetDouble(), outer ? 4 : 8, offset);
+ break;
+ case SbxSTRING:
+ {
+ void * p;
+ SbError e = marshalString(variable, special, data, &p);
+ if (e != ERRCODE_NONE) {
+ return e;
+ }
+ add(blob, p, 4, offset);
+ break;
+ }
+ case SbxOBJECT:
+ {
+ align(blob, outer ? 4 : alignment(variable), offset, 0);
+ SbError e = marshalStruct(variable, blob, offset, data);
+ if (e != ERRCODE_NONE) {
+ return e;
+ }
+ break;
+ }
+ case SbxBOOL:
+ add(blob, variable->GetBool(), outer ? 4 : 1, offset);
+ break;
+ case SbxBYTE:
+ add(blob, variable->GetByte(), outer ? 4 : 1, offset);
+ break;
+ default:
+ OSL_ASSERT(false);
+ break;
+ }
+ } else {
+ SbError e = marshalArray(variable, blob, offset, data);
+ if (e != ERRCODE_NONE) {
+ return e;
+ }
+ }
+ } else {
+ if ((variable->GetType() & SbxARRAY) == 0) {
+ switch (variable->GetType()) {
+ case SbxINTEGER:
+ case SbxLONG:
+ case SbxSINGLE:
+ case SbxDOUBLE:
+ case SbxBOOL:
+ case SbxBYTE:
+ add(blob, variable->data(), 4, offset);
+ break;
+ case SbxSTRING:
+ {
+ std::vector< char > * blob2 = data.newBlob();
+ void * p;
+ SbError e = marshalString(variable, special, data, &p);
+ if (e != ERRCODE_NONE) {
+ return e;
+ }
+ add(*blob2, p, 4, 0);
+ add(blob, address(*blob2), 4, offset);
+ break;
+ }
+ case SbxOBJECT:
+ {
+ std::vector< char > * blob2 = data.newBlob();
+ SbError e = marshalStruct(variable, *blob2, 0, data);
+ if (e != ERRCODE_NONE) {
+ return e;
+ }
+ void * p = address(*blob2);
+ if (outer) {
+ data.unmarshal.push_back(UnmarshalData(variable, p));
+ }
+ add(blob, p, 4, offset);
+ break;
+ }
+ default:
+ OSL_ASSERT(false);
+ break;
+ }
+ } else {
+ std::vector< char > * blob2 = data.newBlob();
+ SbError e = marshalArray(variable, *blob2, 0, data);
+ if (e != ERRCODE_NONE) {
+ return e;
+ }
+ void * p = address(*blob2);
+ if (outer) {
+ data.unmarshal.push_back(UnmarshalData(variable, p));
+ }
+ add(blob, p, 4, offset);
+ }
+ }
+ return ERRCODE_NONE;
+}
+
+template< typename T > T read(void const ** pointer) {
+ T const * p = static_cast< T const * >(*pointer);
+ *pointer = static_cast< void const * >(p + 1);
+ return *p;
+}
+
+void const * unmarshal(SbxVariable * variable, void const * data) {
+ OSL_ASSERT(variable != 0);
+ if ((variable->GetType() & SbxARRAY) == 0) {
+ switch (variable->GetType()) {
+ case SbxINTEGER:
+ variable->PutInteger(read< sal_Int16 >(&data));
+ break;
+ case SbxLONG:
+ variable->PutLong(read< sal_Int32 >(&data));
+ break;
+ case SbxSINGLE:
+ variable->PutSingle(read< float >(&data));
+ break;
+ case SbxDOUBLE:
+ variable->PutDouble(read< double >(&data));
+ break;
+ case SbxSTRING:
+ read< char * >(&data); // handled by unmarshalString
+ break;
+ case SbxOBJECT:
+ {
+ data = reinterpret_cast< void const * >(
+ align(
+ reinterpret_cast< sal_uIntPtr >(data),
+ alignment(variable)));
+ SbxArray * props = PTR_CAST(SbxObject, variable->GetObject())->
+ GetProperties();
+ for (USHORT i = 0; i < props->Count(); ++i) {
+ data = unmarshal(props->Get(i), data);
+ }
+ break;
+ }
+ case SbxBOOL:
+ variable->PutBool(read< sal_Bool >(&data));
+ break;
+ case SbxBYTE:
+ variable->PutByte(read< sal_uInt8 >(&data));
+ break;
+ default:
+ OSL_ASSERT(false);
+ break;
+ }
+ } else {
+ SbxDimArray * arr = PTR_CAST(SbxDimArray, variable->GetObject());
+ int dims = arr->GetDims();
+ std::vector< INT32 > low(dims);
+ std::vector< INT32 > up(dims);
+ for (int i = 0; i < dims; ++i) {
+ arr->GetDim32(i + 1, low[i], up[i]);
+ }
+ for (std::vector< INT32 > idx = low;;) {
+ data = unmarshal(arr->Get32(&idx[0]), data);
+ int i = dims - 1;
+ while (idx[i] == up[i]) {
+ idx[i] = low[i];
+ if (i == 0) {
+ goto done;
+ }
+ --i;
+ }
+ ++idx[i];
+ }
+ done:;
+ }
+ return data;
+}
+
+SbError unmarshalString(StringData const & data, SbxVariable & result) {
+ rtl::OUString str;
+ if (data.buffer != 0) {
+ char const * p = static_cast< char const * >(data.buffer);
+ sal_Int32 len;
+ if (data.special) {
+ len = static_cast< sal_Int32 >(result.GetULong());
+ if (len < 0) { // i.e., DWORD result >= 2^31
+ return ERRCODE_BASIC_BAD_ARGUMENT;
+ //TODO: more specific errcode?
+ }
+ } else {
+ len = rtl_str_getLength(p);
+ }
+ SbError e = convert(p, len, &str);
+ if (e != ERRCODE_NONE) {
+ return e;
+ }
+ }
+ data.variable->PutString(String(str));
+ return ERRCODE_NONE;
+}
+
+struct ProcData {
+ rtl::OString name;
+ FARPROC proc;
+};
+
+SbError call(
+ rtl::OUString const & dll, ProcData const & proc, SbxArray * arguments,
+ SbxVariable & result)
+{
+ std::vector< char > stack;
+ MarshalData data;
+ // For DWORD GetLogicalDriveStringsA(DWORD nBufferLength, LPSTR lpBuffer)
+ // from kernel32, upon return, filled lpBuffer length is result DWORD, which
+ // requires special handling in unmarshalString; other functions might
+ // require similar treatment, too:
+ bool special =
+ dll.equalsIgnoreAsciiCaseAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("KERNEL32.DLL")) &&
+ (proc.name ==
+ rtl::OString(RTL_CONSTASCII_STRINGPARAM("GetLogicalDriveStringsA")));
+ for (USHORT i = 1; i < (arguments == 0 ? 0 : arguments->Count()); ++i) {
+ SbError e = marshal(
+ true, arguments->Get(i), special && i == 2, stack, stack.size(),
+ data);
+ if (e != ERRCODE_NONE) {
+ return e;
+ }
+ align(stack, 4, 0, 0);
+ }
+ switch (result.GetType()) {
+ case SbxEMPTY:
+ DllMgr_call32(proc.proc, address(stack), stack.size());
+ break;
+ case SbxINTEGER:
+ result.PutInteger(
+ static_cast< sal_Int16 >(
+ DllMgr_call32(proc.proc, address(stack), stack.size())));
+ break;
+ case SbxLONG:
+ result.PutLong(
+ static_cast< sal_Int32 >(
+ DllMgr_call32(proc.proc, address(stack), stack.size())));
+ break;
+ case SbxSINGLE:
+ result.PutSingle(
+ static_cast< float >(
+ DllMgr_callFp(proc.proc, address(stack), stack.size())));
+ break;
+ case SbxDOUBLE:
+ result.PutDouble(
+ DllMgr_callFp(proc.proc, address(stack), stack.size()));
+ break;
+ case SbxSTRING:
+ {
+ char const * s1 = reinterpret_cast< char const * >(
+ DllMgr_call32(proc.proc, address(stack), stack.size()));
+ rtl::OUString s2;
+ SbError e = convert(s1, rtl_str_getLength(s1), &s2);
+ if (e != ERRCODE_NONE) {
+ return e;
+ }
+ result.PutString(String(s2));
+ break;
+ }
+ case SbxOBJECT:
+ //TODO
+ DllMgr_call32(proc.proc, address(stack), stack.size());
+ break;
+ case SbxBOOL:
+ result.PutBool(
+ static_cast< sal_Bool >(
+ DllMgr_call32(proc.proc, address(stack), stack.size())));
+ break;
+ case SbxBYTE:
+ result.PutByte(
+ static_cast< sal_uInt8 >(
+ DllMgr_call32(proc.proc, address(stack), stack.size())));
+ break;
+ default:
+ OSL_ASSERT(false);
+ break;
+ }
+ for (USHORT i = 1; i < (arguments == 0 ? 0 : arguments->Count()); ++i) {
+ arguments->Get(i)->ResetFlag(SBX_REFERENCE);
+ //TODO: skipped for errors?!?
+ }
+ for (std::vector< UnmarshalData >::iterator i(data.unmarshal.begin());
+ i != data.unmarshal.end(); ++i)
+ {
+ unmarshal(i->variable, i->buffer);
+ }
+ for (std::vector< StringData >::iterator i(data.unmarshalStrings.begin());
+ i != data.unmarshalStrings.end(); ++i)
+ {
+ SbError e = unmarshalString(*i, result);
+ if (e != ERRCODE_NONE) {
+ return e;
+ }
+ }
+ return ERRCODE_NONE;
+}
+
+SbError getProcData(HMODULE handle, rtl::OUString const & name, ProcData * proc)
+{
+ OSL_ASSERT(proc != 0);
+ if (name.getLength() != 0 && name[0] == '@') { //TODO: "@" vs. "#"???
+ sal_Int32 n = name.copy(1).toInt32(); //TODO: handle bad input
+ if (n <= 0 || n > 0xFFFF) {
+ return ERRCODE_BASIC_BAD_ARGUMENT; //TODO: more specific errcode?
+ }
+ FARPROC p = GetProcAddress(handle, reinterpret_cast< LPCSTR >(n));
+ if (p != 0) {
+ proc->name = rtl::OString(RTL_CONSTASCII_STRINGPARAM("#")) +
+ rtl::OString::valueOf(n);
+ proc->proc = p;
+ return ERRCODE_NONE;
+ }
+ } else {
+ rtl::OString name8;
+ SbError e = convert(name, &name8);
+ if (e != ERRCODE_NONE) {
+ return e;
+ }
+ FARPROC p = GetProcAddress(handle, name8.getStr());
+ if (p != 0) {
+ proc->name = name8;
+ proc->proc = p;
+ return ERRCODE_NONE;
+ }
+ sal_Int32 i = name8.indexOf('#');
+ if (i != -1) {
+ name8 = name8.copy(0, i);
+ p = GetProcAddress(handle, name8.getStr());
+ if (p != 0) {
+ proc->name = name8;
+ proc->proc = p;
+ return ERRCODE_NONE;
+ }
+ }
+ rtl::OString real(
+ rtl::OString(RTL_CONSTASCII_STRINGPARAM("_")) + name8);
+ p = GetProcAddress(handle, real.getStr());
+ if (p != 0) {
+ proc->name = real;
+ proc->proc = p;
+ return ERRCODE_NONE;
+ }
+ real = name8 + rtl::OString(RTL_CONSTASCII_STRINGPARAM("A"));
+ p = GetProcAddress(handle, real.getStr());
+ if (p != 0) {
+ proc->name = real;
+ proc->proc = p;
+ return ERRCODE_NONE;
+ }
+ }
+ return ERRCODE_BASIC_PROC_UNDEFINED;
+}
+
+struct Dll: public salhelper::SimpleReferenceObject {
+private:
+ typedef std::map< rtl::OUString, ProcData > Procs;
+
+ virtual ~Dll();
+
+public:
+ Dll(): handle(0) {}
+
+ SbError getProc(rtl::OUString const & name, ProcData * proc);
+
+ HMODULE handle;
+ Procs procs;
+};
+
+Dll::~Dll() {
+ if (handle != 0 && !FreeLibrary(handle)) {
+ OSL_TRACE("FreeLibrary(%p) failed with %u", handle, GetLastError());
+ }
+}
+
+SbError Dll::getProc(rtl::OUString const & name, ProcData * proc) {
+ Procs::iterator i(procs.find(name));
+ if (i != procs.end()) {
+ *proc = i->second;
+ return ERRCODE_NONE;
+ }
+ SbError e = getProcData(handle, name, proc);
+ if (e == ERRCODE_NONE) {
+ procs.insert(Procs::value_type(name, *proc));
+ }
+ return e;
+}
+
+rtl::OUString fullDllName(rtl::OUString const & name) {
+ rtl::OUString full(name);
+ if (full.indexOf('.') == -1) {
+ full += rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".DLL"));
+ }
+ return full;
+}
+
+}
+
+struct SbiDllMgr::Impl: private boost::noncopyable {
+private:
+ typedef std::map< rtl::OUString, rtl::Reference< Dll > > Dlls;
+
+public:
+ Dll * getDll(rtl::OUString const & name);
+
+ Dlls dlls;
+};
+
+Dll * SbiDllMgr::Impl::getDll(rtl::OUString const & name) {
+ Dlls::iterator i(dlls.find(name));
+ if (i == dlls.end()) {
+ i = dlls.insert(Dlls::value_type(name, new Dll)).first;
+ HMODULE h = LoadLibraryW(reinterpret_cast<LPCWSTR>(name.getStr()));
+ if (h == 0) {
+ dlls.erase(i);
+ return 0;
+ }
+ i->second->handle = h;
+ }
+ return i->second.get();
+}
+
+SbError SbiDllMgr::Call(
+ rtl::OUString const & function, rtl::OUString const & library,
+ SbxArray * arguments, SbxVariable & result, bool cdeclConvention)
+{
+ if (cdeclConvention) {
+ return ERRCODE_BASIC_NOT_IMPLEMENTED;
+ }
+ rtl::OUString dllName(fullDllName(library));
+ Dll * dll = impl_->getDll(dllName);
+ if (dll == 0) {
+ return ERRCODE_BASIC_BAD_DLL_LOAD;
+ }
+ ProcData proc;
+ SbError e = dll->getProc(function, &proc);
+ if (e != ERRCODE_NONE) {
+ return e;
+ }
+ return call(dllName, proc, arguments, result);
+}
+
+void SbiDllMgr::FreeDll(rtl::OUString const & library) {
+ impl_->dlls.erase(library);
+}
+
+#else
+
+struct SbiDllMgr::Impl {};
+
+SbError SbiDllMgr::Call(
+ rtl::OUString const &, rtl::OUString const &, SbxArray *, SbxVariable &,
+ bool)
+{
+ return ERRCODE_BASIC_NOT_IMPLEMENTED;
+}
+
+void SbiDllMgr::FreeDll(rtl::OUString const &) {}
+
+#endif
+
+SbiDllMgr::SbiDllMgr(): impl_(new Impl) {}
+
+SbiDllMgr::~SbiDllMgr() {}
diff --git a/basic/source/runtime/dllmgr.hxx b/basic/source/runtime/dllmgr.hxx
new file mode 100644
index 000000000000..fdff8c2849be
--- /dev/null
+++ b/basic/source/runtime/dllmgr.hxx
@@ -0,0 +1,60 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_BASIC_SOURCE_RUNTIME_DLLMGR_HXX
+#define INCLUDED_BASIC_SOURCE_RUNTIME_DLLMGR_HXX
+
+#include "sal/config.h"
+
+#include <memory>
+
+#include "basic/sberrors.hxx"
+#include "boost/noncopyable.hpp"
+
+namespace rtl { class OUString; }
+class SbxArray;
+class SbxVariable;
+
+class SbiDllMgr: private boost::noncopyable {
+public:
+ SbiDllMgr();
+
+ ~SbiDllMgr();
+
+ SbError Call(
+ rtl::OUString const & function, rtl::OUString const & library,
+ SbxArray * arguments, SbxVariable & result, bool cdeclConvention);
+
+ void FreeDll(rtl::OUString const & library);
+
+private:
+ struct Impl;
+
+ std::auto_ptr< Impl > impl_;
+};
+
+#endif
diff --git a/basic/source/runtime/inputbox.cxx b/basic/source/runtime/inputbox.cxx
new file mode 100644
index 000000000000..17b98ad7addd
--- /dev/null
+++ b/basic/source/runtime/inputbox.cxx
@@ -0,0 +1,197 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+
+#ifndef _SV_BUTTON_HXX //autogen
+#include <vcl/button.hxx>
+#endif
+#include <vcl/fixed.hxx>
+#include <vcl/edit.hxx>
+#include <vcl/dialog.hxx>
+#include <vcl/svapp.hxx>
+#include "runtime.hxx"
+#include "stdobj.hxx"
+#include "rtlproto.hxx"
+
+class SvRTLInputBox : public ModalDialog
+{
+ Edit aEdit;
+ OKButton aOk;
+ CancelButton aCancel;
+ FixedText aPromptText;
+ String aText;
+
+ void PositionDialog( long nXTwips, long nYTwips, const Size& rDlgSize );
+ void InitButtons( const Size& rDlgSize );
+ void PositionEdit( const Size& rDlgSize );
+ void PositionPrompt( const String& rPrompt, const Size& rDlgSize );
+ DECL_LINK( OkHdl, Button * );
+ DECL_LINK( CancelHdl, Button * );
+
+public:
+ SvRTLInputBox( Window* pParent, const String& rPrompt, const String& rTitle,
+ const String& rDefault, long nXTwips = -1, long nYTwips = -1 );
+ String GetText() const { return aText; }
+};
+
+SvRTLInputBox::SvRTLInputBox( Window* pParent, const String& rPrompt,
+ const String& rTitle, const String& rDefault,
+ long nXTwips, long nYTwips ) :
+ ModalDialog( pParent,WB_3DLOOK | WB_MOVEABLE | WB_CLOSEABLE ),
+ aEdit( this, WB_LEFT | WB_BORDER ),
+ aOk( this ), aCancel( this ), aPromptText( this, WB_WORDBREAK )
+{
+ SetMapMode( MapMode( MAP_APPFONT ) );
+ Size aDlgSizeApp( 280, 80 );
+ PositionDialog( nXTwips, nYTwips, aDlgSizeApp );
+ InitButtons( aDlgSizeApp );
+ PositionEdit( aDlgSizeApp );
+ PositionPrompt( rPrompt, aDlgSizeApp );
+ aOk.Show();
+ aCancel.Show();
+ aEdit.Show();
+ aPromptText.Show();
+ SetText( rTitle );
+ Font aFont( GetFont());
+ Color aColor( GetBackground().GetColor() );
+ aFont.SetFillColor( aColor );
+ aEdit.SetFont( aFont );
+ aEdit.SetText( rDefault );
+ aEdit.SetSelection( Selection( SELECTION_MIN, SELECTION_MAX ) );
+}
+
+void SvRTLInputBox::InitButtons( const Size& rDlgSize )
+{
+ aOk.SetSizePixel( LogicToPixel( Size( 45, 15) ));
+ aCancel.SetSizePixel( LogicToPixel( Size( 45, 15) ));
+ Point aPos( rDlgSize.Width()-45-10, 5 );
+ aOk.SetPosPixel( LogicToPixel( Point(aPos) ));
+ aPos.Y() += 16;
+ aCancel.SetPosPixel( LogicToPixel( Point(aPos) ));
+ aOk.SetClickHdl(LINK(this,SvRTLInputBox, OkHdl));
+ aCancel.SetClickHdl(LINK(this,SvRTLInputBox,CancelHdl));
+}
+
+void SvRTLInputBox::PositionDialog(long nXTwips, long nYTwips, const Size& rDlgSize)
+{
+ SetSizePixel( LogicToPixel(rDlgSize) );
+ if( nXTwips != -1 && nYTwips != -1 )
+ {
+ Point aDlgPosApp( nXTwips, nYTwips );
+ SetPosPixel( LogicToPixel( aDlgPosApp, MAP_TWIP ) );
+ }
+}
+
+void SvRTLInputBox::PositionEdit( const Size& rDlgSize )
+{
+ aEdit.SetPosPixel( LogicToPixel( Point( 5,rDlgSize.Height()-35)));
+ aEdit.SetSizePixel( LogicToPixel( Size(rDlgSize.Width()-15,12)));
+}
+
+
+void SvRTLInputBox::PositionPrompt(const String& rPrompt,const Size& rDlgSize)
+{
+ if ( rPrompt.Len() == 0 )
+ return;
+ String aText_( rPrompt );
+ aText_.ConvertLineEnd( LINEEND_CR );
+ aPromptText.SetPosPixel( LogicToPixel(Point(5,5)));
+ aPromptText.SetText( aText_ );
+ Size aSize( rDlgSize );
+ aSize.Width() -= 70;
+ aSize.Height() -= 50;
+ aPromptText.SetSizePixel( LogicToPixel(aSize));
+}
+
+
+IMPL_LINK_INLINE_START( SvRTLInputBox, OkHdl, Button *, pButton )
+{
+ (void)pButton;
+
+ aText = aEdit.GetText();
+ EndDialog( 1 );
+ return 0;
+}
+IMPL_LINK_INLINE_END( SvRTLInputBox, OkHdl, Button *, pButton )
+
+IMPL_LINK_INLINE_START( SvRTLInputBox, CancelHdl, Button *, pButton )
+{
+ (void)pButton;
+
+ aText.Erase();
+ EndDialog( 0 );
+ return 0;
+}
+IMPL_LINK_INLINE_END( SvRTLInputBox, CancelHdl, Button *, pButton )
+
+
+// *********************************************************************
+// *********************************************************************
+// *********************************************************************
+
+// Syntax: String InputBox( Prompt, [Title], [Default] [, nXpos, nYpos ] )
+
+RTLFUNC(InputBox)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ ULONG nArgCount = rPar.Count();
+ if ( nArgCount < 2 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ else
+ {
+ String aTitle;
+ String aDefault;
+ INT32 nX = -1, nY = -1; // zentrieren
+ const String& rPrompt = rPar.Get(1)->GetString();
+ if ( nArgCount > 2 && !rPar.Get(2)->IsErr() )
+ aTitle = rPar.Get(2)->GetString();
+ if ( nArgCount > 3 && !rPar.Get(3)->IsErr() )
+ aDefault = rPar.Get(3)->GetString();
+ if ( nArgCount > 4 )
+ {
+ if ( nArgCount != 6 )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+ nX = rPar.Get(4)->GetLong();
+ nY = rPar.Get(5)->GetLong();
+ }
+ SvRTLInputBox *pDlg=new SvRTLInputBox(GetpApp()->GetDefDialogParent(),
+ rPrompt,aTitle,aDefault,nX,nY);
+ pDlg->Execute();
+ rPar.Get(0)->PutString( pDlg->GetText() );
+ delete pDlg;
+ }
+}
+
+
+
diff --git a/basic/source/runtime/iosys.cxx b/basic/source/runtime/iosys.cxx
new file mode 100644
index 000000000000..9940890286b4
--- /dev/null
+++ b/basic/source/runtime/iosys.cxx
@@ -0,0 +1,1048 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+#include <vcl/dialog.hxx>
+#include <vcl/edit.hxx>
+#ifndef _SV_BUTTON_HXX //autogen
+#include <vcl/button.hxx>
+#endif
+#include <vcl/msgbox.hxx>
+#include <vcl/svapp.hxx>
+#include <osl/security.h>
+#include <osl/file.hxx>
+#include <tools/urlobj.hxx>
+#include <vos/mutex.hxx>
+
+#include "runtime.hxx"
+
+#ifdef _USE_UNO
+
+// <-- encoding
+#include <sal/alloca.h>
+
+#include <ctype.h>
+#include <rtl/byteseq.hxx>
+#include <rtl/textenc.h>
+#include <rtl/ustrbuf.hxx>
+#include <rtl/textenc.h>
+#include <rtl/ustrbuf.hxx>
+// encoding -->
+#include <comphelper/processfactory.hxx>
+
+#include <com/sun/star/uno/Sequence.hxx>
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+#include <com/sun/star/ucb/XSimpleFileAccess.hpp>
+#include <com/sun/star/ucb/XContentProvider.hpp>
+#include <com/sun/star/ucb/XContentProviderManager.hpp>
+#include <com/sun/star/io/XInputStream.hpp>
+#include <com/sun/star/io/XOutputStream.hpp>
+#include <com/sun/star/io/XStream.hpp>
+#include <com/sun/star/io/XSeekable.hpp>
+#include <com/sun/star/bridge/XBridge.hpp>
+#include <com/sun/star/bridge/XBridgeFactory.hpp>
+
+using namespace comphelper;
+using namespace osl;
+using namespace com::sun::star::uno;
+using namespace com::sun::star::lang;
+using namespace com::sun::star::ucb;
+using namespace com::sun::star::io;
+using namespace com::sun::star::bridge;
+
+#endif /* _USE_UNO */
+
+#include "iosys.hxx"
+#include "sbintern.hxx"
+
+// Der Input-Dialog:
+
+class SbiInputDialog : public ModalDialog {
+ Edit aInput;
+ OKButton aOk;
+ CancelButton aCancel;
+ String aText;
+ DECL_LINK( Ok, Window * );
+ DECL_LINK( Cancel, Window * );
+public:
+ SbiInputDialog( Window*, const String& );
+ const String& GetInput() { return aText; }
+};
+
+SbiInputDialog::SbiInputDialog( Window* pParent, const String& rPrompt )
+ :ModalDialog( pParent, WB_3DLOOK | WB_MOVEABLE | WB_CLOSEABLE ),
+ aInput( this, WB_3DLOOK | WB_LEFT | WB_BORDER ),
+ aOk( this ), aCancel( this )
+{
+ SetText( rPrompt );
+ aOk.SetClickHdl( LINK( this, SbiInputDialog, Ok ) );
+ aCancel.SetClickHdl( LINK( this, SbiInputDialog, Cancel ) );
+ SetMapMode( MapMode( MAP_APPFONT ) );
+
+ Point aPt = LogicToPixel( Point( 50, 50 ) );
+ Size aSz = LogicToPixel( Size( 145, 65 ) );
+ SetPosSizePixel( aPt, aSz );
+ aPt = LogicToPixel( Point( 10, 10 ) );
+ aSz = LogicToPixel( Size( 120, 12 ) );
+ aInput.SetPosSizePixel( aPt, aSz );
+ aPt = LogicToPixel( Point( 15, 30 ) );
+ aSz = LogicToPixel( Size( 45, 15) );
+ aOk.SetPosSizePixel( aPt, aSz );
+ aPt = LogicToPixel( Point( 80, 30 ) );
+ aSz = LogicToPixel( Size( 45, 15) );
+ aCancel.SetPosSizePixel( aPt, aSz );
+
+ aInput.Show();
+ aOk.Show();
+ aCancel.Show();
+}
+
+IMPL_LINK_INLINE_START( SbiInputDialog, Ok, Window *, pWindow )
+{
+ (void)pWindow;
+
+ aText = aInput.GetText();
+ EndDialog( 1 );
+ return 0;
+}
+IMPL_LINK_INLINE_END( SbiInputDialog, Ok, Window *, pWindow )
+
+IMPL_LINK_INLINE_START( SbiInputDialog, Cancel, Window *, pWindow )
+{
+ (void)pWindow;
+
+ EndDialog( 0 );
+ return 0;
+}
+IMPL_LINK_INLINE_END( SbiInputDialog, Cancel, Window *, pWindow )
+
+//////////////////////////////////////////////////////////////////////////
+
+SbiStream::SbiStream()
+ : pStrm( 0 )
+{
+}
+
+SbiStream::~SbiStream()
+{
+ delete pStrm;
+}
+
+// Ummappen eines SvStream-Fehlers auf einen StarBASIC-Code
+
+void SbiStream::MapError()
+{
+ if( pStrm )
+ switch( pStrm->GetError() )
+ {
+ case SVSTREAM_OK:
+ nError = 0; break;
+ case SVSTREAM_FILE_NOT_FOUND:
+ nError = SbERR_FILE_NOT_FOUND; break;
+ case SVSTREAM_PATH_NOT_FOUND:
+ nError = SbERR_PATH_NOT_FOUND; break;
+ case SVSTREAM_TOO_MANY_OPEN_FILES:
+ nError = SbERR_TOO_MANY_FILES; break;
+ case SVSTREAM_ACCESS_DENIED:
+ nError = SbERR_ACCESS_DENIED; break;
+ case SVSTREAM_INVALID_PARAMETER:
+ nError = SbERR_BAD_ARGUMENT; break;
+ case SVSTREAM_OUTOFMEMORY:
+ nError = SbERR_NO_MEMORY; break;
+ default:
+ nError = SbERR_IO_ERROR; break;
+ }
+}
+
+#ifdef _USE_UNO
+
+// TODO: Code is copied from daemons2/source/uno/asciiEncoder.cxx
+
+::rtl::OUString findUserInDescription( const ::rtl::OUString& aDescription )
+{
+ ::rtl::OUString user;
+
+ sal_Int32 index;
+ sal_Int32 lastIndex = 0;
+
+ do
+ {
+ index = aDescription.indexOf((sal_Unicode) ',', lastIndex);
+ ::rtl::OUString token = (index == -1) ? aDescription.copy(lastIndex) : aDescription.copy(lastIndex, index - lastIndex);
+
+ lastIndex = index + 1;
+
+ sal_Int32 eindex = token.indexOf((sal_Unicode)'=');
+ ::rtl::OUString left = token.copy(0, eindex).toAsciiLowerCase().trim();
+ ::rtl::OUString right = INetURLObject::decode( token.copy(eindex + 1).trim(), '%',
+ INetURLObject::DECODE_WITH_CHARSET );
+
+ if(left.equals(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("user"))))
+ {
+ user = right;
+ break;
+ }
+ }
+ while(index != -1);
+
+ return user;
+}
+
+#endif
+
+
+// Hack for #83750
+BOOL runsInSetup( void );
+
+BOOL needSecurityRestrictions( void )
+{
+#ifdef _USE_UNO
+ static BOOL bNeedInit = TRUE;
+ static BOOL bRetVal = TRUE;
+
+ if( bNeedInit )
+ {
+ // Hack for #83750, use internal flag until
+ // setup provides own service manager
+ if( runsInSetup() )
+ {
+ // Setup is not critical
+ bRetVal = FALSE;
+ return bRetVal;
+ }
+
+ bNeedInit = FALSE;
+
+ // Get system user to compare to portal user
+ oslSecurity aSecurity = osl_getCurrentSecurity();
+ ::rtl::OUString aSystemUser;
+ sal_Bool bRet = osl_getUserName( aSecurity, &aSystemUser.pData );
+ if( !bRet )
+ {
+ // No valid security! -> Secure mode!
+ return TRUE;
+ }
+
+ Reference< XMultiServiceFactory > xSMgr = getProcessServiceFactory();
+ if( !xSMgr.is() )
+ return TRUE;
+ Reference< XBridgeFactory > xBridgeFac( xSMgr->createInstance
+ ( ::rtl::OUString::createFromAscii( "com.sun.star.bridge.BridgeFactory" ) ), UNO_QUERY );
+
+ Sequence< Reference< XBridge > > aBridgeSeq;
+ sal_Int32 nBridgeCount = 0;
+ if( xBridgeFac.is() )
+ {
+ aBridgeSeq = xBridgeFac->getExistingBridges();
+ nBridgeCount = aBridgeSeq.getLength();
+ }
+
+ if( nBridgeCount == 0 )
+ {
+ // No bridges -> local
+ bRetVal = FALSE;
+ return bRetVal;
+ }
+
+ // Iterate through all bridges to find (portal) user property
+ const Reference< XBridge >* pBridges = aBridgeSeq.getConstArray();
+ bRetVal = FALSE; // Now only TRUE if user different from portal user is found
+ sal_Int32 i;
+ for( i = 0 ; i < nBridgeCount ; i++ )
+ {
+ const Reference< XBridge >& rxBridge = pBridges[ i ];
+ ::rtl::OUString aDescription = rxBridge->getDescription();
+ ::rtl::OUString aPortalUser = findUserInDescription( aDescription );
+ if( aPortalUser.getLength() > 0 )
+ {
+ // User Found, compare to system user
+ if( aPortalUser == aSystemUser )
+ {
+ // Same user -> system security is ok, bRetVal stays FALSE
+ break;
+ }
+ else
+ {
+ // Different user -> Secure mode!
+ bRetVal = TRUE;
+ break;
+ }
+ }
+ }
+ // No user found or PortalUser != SystemUser -> Secure mode! (Keep default value)
+ }
+
+ return bRetVal;
+#else
+ return FALSE;
+#endif
+}
+
+// Returns TRUE if UNO is available, otherwise the old file
+// system implementation has to be used
+// #89378 New semantic: Don't just ask for UNO but for UCB
+BOOL hasUno( void )
+{
+#ifdef _USE_UNO
+ static BOOL bNeedInit = TRUE;
+ static BOOL bRetVal = TRUE;
+
+ if( bNeedInit )
+ {
+ bNeedInit = FALSE;
+ Reference< XMultiServiceFactory > xSMgr = getProcessServiceFactory();
+ if( !xSMgr.is() )
+ {
+ // No service manager at all
+ bRetVal = FALSE;
+ }
+ else
+ {
+ Reference< XContentProviderManager > xManager( xSMgr->createInstance( ::rtl::OUString::createFromAscii
+ ( "com.sun.star.ucb.UniversalContentBroker" ) ), UNO_QUERY );
+
+ if ( !( xManager.is() && xManager->queryContentProvider( ::rtl::OUString::createFromAscii( "file:///" ) ).is() ) )
+ {
+ // No UCB
+ bRetVal = FALSE;
+ }
+ }
+ }
+ return bRetVal;
+#else
+ return FALSE;
+#endif
+}
+
+
+
+#ifndef _OLD_FILE_IMPL
+
+class OslStream : public SvStream
+{
+ File maFile;
+ short mnStrmMode;
+
+public:
+ OslStream( const String& rName, short nStrmMode );
+ ~OslStream();
+ virtual ULONG GetData( void* pData, ULONG nSize );
+ virtual ULONG PutData( const void* pData, ULONG nSize );
+ virtual ULONG SeekPos( ULONG nPos );
+ virtual void FlushData();
+ virtual void SetSize( ULONG nSize );
+};
+
+OslStream::OslStream( const String& rName, short nStrmMode )
+ : maFile( rName )
+ , mnStrmMode( nStrmMode )
+{
+ sal_uInt32 nFlags;
+
+ if( (nStrmMode & (STREAM_READ | STREAM_WRITE)) == (STREAM_READ | STREAM_WRITE) )
+ {
+ nFlags = OpenFlag_Read | OpenFlag_Write;
+ }
+ else if( nStrmMode & STREAM_WRITE )
+ {
+ nFlags = OpenFlag_Write;
+ }
+ else //if( nStrmMode & STREAM_READ )
+ {
+ nFlags = OpenFlag_Read;
+ }
+
+ FileBase::RC nRet = maFile.open( nFlags );
+ if( nRet == FileBase::E_NOENT && nFlags != OpenFlag_Read )
+ {
+ nFlags |= OpenFlag_Create;
+ nRet = maFile.open( nFlags );
+ }
+
+ if( nRet != FileBase::E_None )
+ {
+ SetError( ERRCODE_IO_GENERAL );
+ }
+}
+
+
+OslStream::~OslStream()
+{
+ maFile.close();
+}
+
+ULONG OslStream::GetData( void* pData, ULONG nSize )
+{
+ sal_uInt64 nBytesRead = nSize;
+ FileBase::RC nRet = FileBase::E_None;
+ nRet = maFile.read( pData, nBytesRead, nBytesRead );
+ return (ULONG)nBytesRead;
+}
+
+ULONG OslStream::PutData( const void* pData, ULONG nSize )
+{
+ sal_uInt64 nBytesWritten;
+ FileBase::RC nRet = FileBase::E_None;
+ nRet = maFile.write( pData, (sal_uInt64)nSize, nBytesWritten );
+ return (ULONG)nBytesWritten;
+}
+
+ULONG OslStream::SeekPos( ULONG nPos )
+{
+ FileBase::RC nRet;
+ if( nPos == STREAM_SEEK_TO_END )
+ {
+ nRet = maFile.setPos( Pos_End, 0 );
+ }
+ else
+ {
+ nRet = maFile.setPos( Pos_Absolut, (sal_uInt64)nPos );
+ }
+ sal_uInt64 nRealPos;
+ nRet = maFile.getPos( nRealPos );
+ return sal::static_int_cast<ULONG>(nRealPos);
+}
+
+void OslStream::FlushData()
+{
+}
+
+void OslStream::SetSize( ULONG nSize )
+{
+ FileBase::RC nRet = FileBase::E_None;
+ nRet = maFile.setSize( (sal_uInt64)nSize );
+}
+
+#endif
+
+
+#ifdef _USE_UNO
+
+class UCBStream : public SvStream
+{
+ Reference< XInputStream > xIS;
+ Reference< XOutputStream > xOS;
+ Reference< XStream > xS;
+ Reference< XSeekable > xSeek;
+public:
+ UCBStream( Reference< XInputStream > & xIS );
+ UCBStream( Reference< XOutputStream > & xOS );
+ UCBStream( Reference< XStream > & xS );
+ ~UCBStream();
+ virtual ULONG GetData( void* pData, ULONG nSize );
+ virtual ULONG PutData( const void* pData, ULONG nSize );
+ virtual ULONG SeekPos( ULONG nPos );
+ virtual void FlushData();
+ virtual void SetSize( ULONG nSize );
+};
+
+/*
+ULONG UCBErrorToSvStramError( ucb::IOErrorCode nError )
+{
+ ULONG eReturn = ERRCODE_IO_GENERAL;
+ switch( nError )
+ {
+ case ucb::IOErrorCode_ABORT: eReturn = SVSTREAM_GENERALERROR; break;
+ case ucb::IOErrorCode_NOT_EXISTING: eReturn = SVSTREAM_FILE_NOT_FOUND; break;
+ case ucb::IOErrorCode_NOT_EXISTING_PATH: eReturn = SVSTREAM_PATH_NOT_FOUND; break;
+ case ucb::IOErrorCode_OUT_OF_FILE_HANDLES: eReturn = SVSTREAM_TOO_MANY_OPEN_FILES; break;
+ case ucb::IOErrorCode_ACCESS_DENIED: eReturn = SVSTREAM_ACCESS_DENIED; break;
+ case ucb::IOErrorCode_LOCKING_VIOLATION: eReturn = SVSTREAM_SHARING_VIOLATION; break;
+
+ case ucb::IOErrorCode_INVALID_ACCESS: eReturn = SVSTREAM_INVALID_ACCESS; break;
+ case ucb::IOErrorCode_CANT_CREATE: eReturn = SVSTREAM_CANNOT_MAKE; break;
+ case ucb::IOErrorCode_INVALID_PARAMETER: eReturn = SVSTREAM_INVALID_PARAMETER; break;
+
+ case ucb::IOErrorCode_CANT_READ: eReturn = SVSTREAM_READ_ERROR; break;
+ case ucb::IOErrorCode_CANT_WRITE: eReturn = SVSTREAM_WRITE_ERROR; break;
+ case ucb::IOErrorCode_CANT_SEEK: eReturn = SVSTREAM_SEEK_ERROR; break;
+ case ucb::IOErrorCode_CANT_TELL: eReturn = SVSTREAM_TELL_ERROR; break;
+
+ case ucb::IOErrorCode_OUT_OF_MEMORY: eReturn = SVSTREAM_OUTOFMEMORY; break;
+
+ case SVSTREAM_FILEFORMAT_ERROR: eReturn = SVSTREAM_FILEFORMAT_ERROR; break;
+ case ucb::IOErrorCode_WRONG_VERSION: eReturn = SVSTREAM_WRONGVERSION;
+ case ucb::IOErrorCode_OUT_OF_DISK_SPACE: eReturn = SVSTREAM_DISK_FULL; break;
+
+ case ucb::IOErrorCode_BAD_CRC: eReturn = ERRCODE_IO_BADCRC; break;
+ }
+ return eReturn;
+}
+*/
+
+UCBStream::UCBStream( Reference< XInputStream > & rStm )
+ : xIS( rStm )
+ , xSeek( rStm, UNO_QUERY )
+{
+}
+
+UCBStream::UCBStream( Reference< XOutputStream > & rStm )
+ : xOS( rStm )
+ , xSeek( rStm, UNO_QUERY )
+{
+}
+
+UCBStream::UCBStream( Reference< XStream > & rStm )
+ : xS( rStm )
+ , xSeek( rStm, UNO_QUERY )
+{
+}
+
+
+UCBStream::~UCBStream()
+{
+ try
+ {
+ if( xIS.is() )
+ xIS->closeInput();
+ else if( xOS.is() )
+ xOS->closeOutput();
+ else if( xS.is() )
+ {
+ Reference< XInputStream > xIS_ = xS->getInputStream();
+ if( xIS_.is() )
+ xIS_->closeInput();
+ }
+ }
+ catch( Exception & )
+ {
+ SetError( ERRCODE_IO_GENERAL );
+ }
+}
+
+ULONG UCBStream::GetData( void* pData, ULONG nSize )
+{
+ try
+ {
+ Reference< XInputStream > xISFromS;
+ if( xIS.is() )
+ {
+ Sequence<sal_Int8> aData;
+ nSize = xIS->readBytes( aData, nSize );
+ rtl_copyMemory( pData, aData.getConstArray(), nSize );
+ return nSize;
+ }
+ else if( xS.is() && (xISFromS = xS->getInputStream()).is() )
+ {
+ Sequence<sal_Int8> aData;
+ nSize = xISFromS->readBytes( aData, nSize );
+ rtl_copyMemory( pData, aData.getConstArray(), nSize );
+ return nSize;
+ }
+ else
+ SetError( ERRCODE_IO_GENERAL );
+ }
+ catch( Exception & )
+ {
+ SetError( ERRCODE_IO_GENERAL );
+ }
+ return 0;
+}
+
+ULONG UCBStream::PutData( const void* pData, ULONG nSize )
+{
+ try
+ {
+ Reference< XOutputStream > xOSFromS;
+ if( xOS.is() )
+ {
+ Sequence<sal_Int8> aData( (const sal_Int8 *)pData, nSize );
+ xOS->writeBytes( aData );
+ return nSize;
+ }
+ else if( xS.is() && (xOSFromS = xS->getOutputStream()).is() )
+ {
+ Sequence<sal_Int8> aData( (const sal_Int8 *)pData, nSize );
+ xOSFromS->writeBytes( aData );
+ return nSize;
+ }
+ else
+ SetError( ERRCODE_IO_GENERAL );
+ }
+ catch( Exception & )
+ {
+ SetError( ERRCODE_IO_GENERAL );
+ }
+ return 0;
+}
+
+ULONG UCBStream::SeekPos( ULONG nPos )
+{
+ try
+ {
+ if( xSeek.is() )
+ {
+ ULONG nLen = sal::static_int_cast<ULONG>( xSeek->getLength() );
+ if( nPos > nLen )
+ nPos = nLen;
+ xSeek->seek( nPos );
+ return nPos;
+ }
+ else
+ SetError( ERRCODE_IO_GENERAL );
+ }
+ catch( Exception & )
+ {
+ SetError( ERRCODE_IO_GENERAL );
+ }
+ return 0;
+}
+
+void UCBStream::FlushData()
+{
+ try
+ {
+ Reference< XOutputStream > xOSFromS;
+ if( xOS.is() )
+ xOS->flush();
+ else if( xS.is() && (xOSFromS = xS->getOutputStream()).is() )
+ xOSFromS->flush();
+ else
+ SetError( ERRCODE_IO_GENERAL );
+ }
+ catch( Exception & )
+ {
+ SetError( ERRCODE_IO_GENERAL );
+ }
+}
+
+void UCBStream::SetSize( ULONG nSize )
+{
+ (void)nSize;
+
+ DBG_ERROR( "not allowed to call from basic" );
+ SetError( ERRCODE_IO_GENERAL );
+}
+
+#endif
+
+// Oeffnen eines Streams
+SbError SbiStream::Open
+( short nCh, const ByteString& rName, short nStrmMode, short nFlags, short nL )
+{
+ nMode = nFlags;
+ nLen = nL;
+ nChan = nCh;
+ nLine = 0;
+ nExpandOnWriteTo = 0;
+ if( ( nStrmMode & ( STREAM_READ|STREAM_WRITE ) ) == STREAM_READ )
+ nStrmMode |= STREAM_NOCREATE;
+ String aStr( rName, gsl_getSystemTextEncoding() );
+ String aNameStr = getFullPath( aStr );
+
+#ifdef _USE_UNO
+ if( hasUno() )
+ {
+ Reference< XMultiServiceFactory > xSMgr = getProcessServiceFactory();
+ if( xSMgr.is() )
+ {
+ Reference< XSimpleFileAccess >
+ xSFI( xSMgr->createInstance( ::rtl::OUString::createFromAscii( "com.sun.star.ucb.SimpleFileAccess" ) ), UNO_QUERY );
+ if( xSFI.is() )
+ {
+ try
+ {
+
+ // #??? For write access delete file if it already exists (not for appending)
+ if( (nStrmMode & STREAM_WRITE) != 0 && !IsAppend() && !IsBinary() &&
+ xSFI->exists( aNameStr ) && !xSFI->isFolder( aNameStr ) )
+ {
+ xSFI->kill( aNameStr );
+ }
+
+ if( (nStrmMode & (STREAM_READ | STREAM_WRITE)) == (STREAM_READ | STREAM_WRITE) )
+ {
+ Reference< XStream > xIS = xSFI->openFileReadWrite( aNameStr );
+ pStrm = new UCBStream( xIS );
+ }
+ else if( nStrmMode & STREAM_WRITE )
+ {
+ Reference< XStream > xIS = xSFI->openFileReadWrite( aNameStr );
+ pStrm = new UCBStream( xIS );
+ // Open for writing is not implemented in ucb yet!!!
+ //Reference< XOutputStream > xIS = xSFI->openFileWrite( aNameStr );
+ //pStrm = new UCBStream( xIS );
+ }
+ else //if( nStrmMode & STREAM_READ )
+ {
+ Reference< XInputStream > xIS = xSFI->openFileRead( aNameStr );
+ pStrm = new UCBStream( xIS );
+ }
+
+ }
+ catch( Exception & )
+ {
+ nError = ERRCODE_IO_GENERAL;
+ }
+ }
+ }
+ }
+
+#endif
+ if( !pStrm )
+ {
+#ifdef _OLD_FILE_IMPL
+ pStrm = new SvFileStream( aNameStr, nStrmMode );
+#else
+ pStrm = new OslStream( aNameStr, nStrmMode );
+#endif
+ }
+ if( IsAppend() )
+ pStrm->Seek( STREAM_SEEK_TO_END );
+ MapError();
+ if( nError )
+ delete pStrm, pStrm = NULL;
+ return nError;
+}
+
+SbError SbiStream::Close()
+{
+ if( pStrm )
+ {
+ if( !hasUno() )
+ {
+#ifdef _OLD_FILE_IMPL
+ ((SvFileStream *)pStrm)->Close();
+#endif
+ }
+ MapError();
+ delete pStrm;
+ pStrm = NULL;
+ }
+ nChan = 0;
+ return nError;
+}
+
+SbError SbiStream::Read( ByteString& rBuf, USHORT n, bool bForceReadingPerByte )
+{
+ nExpandOnWriteTo = 0;
+ if( !bForceReadingPerByte && IsText() )
+ {
+ pStrm->ReadLine( rBuf );
+ nLine++;
+ }
+ else
+ {
+ if( !n ) n = nLen;
+ if( !n )
+ return nError = SbERR_BAD_RECORD_LENGTH;
+ rBuf.Fill( n, ' ' );
+ pStrm->Read( (void*)rBuf.GetBuffer(), n );
+ }
+ MapError();
+ if( !nError && pStrm->IsEof() )
+ nError = SbERR_READ_PAST_EOF;
+ return nError;
+}
+
+SbError SbiStream::Read( char& ch )
+{
+ nExpandOnWriteTo = 0;
+ if( !aLine.Len() )
+ {
+ Read( aLine, 0 );
+ aLine += '\n';
+ }
+ ch = aLine.GetBuffer()[0];
+ aLine.Erase( 0, 1 );
+ return nError;
+}
+
+void SbiStream::ExpandFile()
+{
+ if ( nExpandOnWriteTo )
+ {
+ ULONG nCur = pStrm->Seek(STREAM_SEEK_TO_END);
+ if( nCur < nExpandOnWriteTo )
+ {
+ ULONG nDiff = nExpandOnWriteTo - nCur;
+ char c = 0;
+ while( nDiff-- )
+ *pStrm << c;
+ }
+ else
+ {
+ pStrm->Seek( nExpandOnWriteTo );
+ }
+ nExpandOnWriteTo = 0;
+ }
+}
+
+SbError SbiStream::Write( const ByteString& rBuf, USHORT n )
+{
+ ExpandFile();
+ if( IsAppend() )
+ pStrm->Seek( STREAM_SEEK_TO_END );
+
+ if( IsText() )
+ {
+ aLine += rBuf;
+ // Raus damit, wenn das Ende ein LF ist, aber CRLF vorher
+ // strippen, da der SvStrm ein CRLF anfuegt!
+ USHORT nLineLen = aLine.Len();
+ if( nLineLen && aLine.GetBuffer()[ --nLineLen ] == 0x0A )
+ {
+ aLine.Erase( nLineLen );
+ if( nLineLen && aLine.GetBuffer()[ --nLineLen ] == 0x0D )
+ aLine.Erase( nLineLen );
+ pStrm->WriteLines( aLine );
+ aLine.Erase();
+ }
+ }
+ else
+ {
+ if( !n ) n = nLen;
+ if( !n )
+ return nError = SbERR_BAD_RECORD_LENGTH;
+ pStrm->Write( rBuf.GetBuffer(), n );
+ MapError();
+ }
+ return nError;
+}
+
+//////////////////////////////////////////////////////////////////////////
+
+// Zugriff auf das aktuelle I/O-System:
+
+SbiIoSystem* SbGetIoSystem()
+{
+ SbiInstance* pInst = pINST;
+ return pInst ? pInst->GetIoSystem() : NULL;
+}
+
+//////////////////////////////////////////////////////////////////////////
+
+SbiIoSystem::SbiIoSystem()
+{
+ for( short i = 0; i < CHANNELS; i++ )
+ pChan[ i ] = NULL;
+ nChan = 0;
+ nError = 0;
+}
+
+SbiIoSystem::~SbiIoSystem()
+{
+ Shutdown();
+}
+
+SbError SbiIoSystem::GetError()
+{
+ SbError n = nError; nError = 0;
+ return n;
+}
+
+void SbiIoSystem::Open
+ ( short nCh, const ByteString& rName, short nMode, short nFlags, short nLen )
+{
+ nError = 0;
+ if( nCh >= CHANNELS || !nCh )
+ nError = SbERR_BAD_CHANNEL;
+ else if( pChan[ nCh ] )
+ nError = SbERR_FILE_ALREADY_OPEN;
+ else
+ {
+ pChan[ nCh ] = new SbiStream;
+ nError = pChan[ nCh ]->Open( nCh, rName, nMode, nFlags, nLen );
+ if( nError )
+ delete pChan[ nCh ], pChan[ nCh ] = NULL;
+ }
+ nChan = 0;
+}
+
+// Aktuellen Kanal schliessen
+
+void SbiIoSystem::Close()
+{
+ if( !nChan )
+ nError = SbERR_BAD_CHANNEL;
+ else if( !pChan[ nChan ] )
+ nError = SbERR_BAD_CHANNEL;
+ else
+ {
+ nError = pChan[ nChan ]->Close();
+ delete pChan[ nChan ];
+ pChan[ nChan ] = NULL;
+ }
+ nChan = 0;
+}
+
+// Shutdown nach Programmlauf
+
+void SbiIoSystem::Shutdown()
+{
+ for( short i = 1; i < CHANNELS; i++ )
+ {
+ if( pChan[ i ] )
+ {
+ SbError n = pChan[ i ]->Close();
+ delete pChan[ i ];
+ pChan[ i ] = NULL;
+ if( n && !nError )
+ nError = n;
+ }
+ }
+ nChan = 0;
+ // Noch was zu PRINTen?
+ if( aOut.Len() )
+ {
+ String aOutStr( aOut, gsl_getSystemTextEncoding() );
+#if defined GCC
+ Window* pParent = Application::GetDefDialogParent();
+ MessBox( pParent, WinBits( WB_OK ), String(), aOutStr ).Execute();
+#else
+ MessBox( GetpApp()->GetDefDialogParent(), WinBits( WB_OK ), String(), aOutStr ).Execute();
+#endif
+ }
+ aOut.Erase();
+}
+
+// Aus aktuellem Kanal lesen
+
+void SbiIoSystem::Read( ByteString& rBuf, short n )
+{
+ if( !nChan )
+ ReadCon( rBuf );
+ else if( !pChan[ nChan ] )
+ nError = SbERR_BAD_CHANNEL;
+ else
+ nError = pChan[ nChan ]->Read( rBuf, n );
+}
+
+char SbiIoSystem::Read()
+{
+ char ch = ' ';
+ if( !nChan )
+ {
+ if( !aIn.Len() )
+ {
+ ReadCon( aIn );
+ aIn += '\n';
+ }
+ ch = aIn.GetBuffer()[0];
+ aIn.Erase( 0, 1 );
+ }
+ else if( !pChan[ nChan ] )
+ nError = SbERR_BAD_CHANNEL;
+ else
+ nError = pChan[ nChan ]->Read( ch );
+ return ch;
+}
+
+void SbiIoSystem::Write( const ByteString& rBuf, short n )
+{
+ if( !nChan )
+ WriteCon( rBuf );
+ else if( !pChan[ nChan ] )
+ nError = SbERR_BAD_CHANNEL;
+ else
+ nError = pChan[ nChan ]->Write( rBuf, n );
+}
+
+short SbiIoSystem::NextChannel()
+{
+ for( short i = 1; i < CHANNELS; i++ )
+ {
+ if( !pChan[ i ] )
+ return i;
+ }
+ nError = SbERR_TOO_MANY_FILES;
+ return CHANNELS;
+}
+
+// nChannel == 0..CHANNELS-1
+
+SbiStream* SbiIoSystem::GetStream( short nChannel ) const
+{
+ SbiStream* pRet = 0;
+ if( nChannel >= 0 && nChannel < CHANNELS )
+ pRet = pChan[ nChannel ];
+ return pRet;
+}
+
+void SbiIoSystem::CloseAll(void)
+{
+ for( short i = 1; i < CHANNELS; i++ )
+ {
+ if( pChan[ i ] )
+ {
+ SbError n = pChan[ i ]->Close();
+ delete pChan[ i ];
+ pChan[ i ] = NULL;
+ if( n && !nError )
+ nError = n;
+ }
+ }
+}
+
+/***************************************************************************
+*
+* Console Support
+*
+***************************************************************************/
+
+// Einlesen einer Zeile von der Console
+
+void SbiIoSystem::ReadCon( ByteString& rIn )
+{
+ String aPromptStr( aPrompt, gsl_getSystemTextEncoding() );
+ SbiInputDialog aDlg( NULL, aPromptStr );
+ if( aDlg.Execute() )
+ rIn = ByteString( aDlg.GetInput(), gsl_getSystemTextEncoding() );
+ else
+ nError = SbERR_USER_ABORT;
+ aPrompt.Erase();
+}
+
+// Ausgabe einer MessageBox, wenn im Console-Puffer ein CR ist
+
+void SbiIoSystem::WriteCon( const ByteString& rText )
+{
+ aOut += rText;
+ USHORT n1 = aOut.Search( '\n' );
+ USHORT n2 = aOut.Search( '\r' );
+ if( n1 != STRING_NOTFOUND || n2 != STRING_NOTFOUND )
+ {
+ if( n1 == STRING_NOTFOUND ) n1 = n2;
+ else
+ if( n2 == STRING_NOTFOUND ) n2 = n1;
+ if( n1 > n2 ) n1 = n2;
+ ByteString s( aOut.Copy( 0, n1 ) );
+ aOut.Erase( 0, n1 );
+ while( aOut.GetBuffer()[0] == '\n' || aOut.GetBuffer()[0] == '\r' )
+ aOut.Erase( 0, 1 );
+ String aStr( s, gsl_getSystemTextEncoding() );
+ {
+ vos::OGuard aSolarGuard( Application::GetSolarMutex() );
+ if( !MessBox( GetpApp()->GetDefDialogParent(),
+ WinBits( WB_OK_CANCEL | WB_DEF_OK ),
+ String(), aStr ).Execute() )
+ nError = SbERR_USER_ABORT;
+ }
+ }
+}
+
diff --git a/basic/source/runtime/makefile.mk b/basic/source/runtime/makefile.mk
new file mode 100644
index 000000000000..f2ed11196b28
--- /dev/null
+++ b/basic/source/runtime/makefile.mk
@@ -0,0 +1,71 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..$/..
+
+PRJNAME=basic
+TARGET=runtime
+
+ENABLE_EXCEPTIONS = TRUE
+
+# --- Settings -----------------------------------------------------------
+
+.INCLUDE : settings.mk
+
+
+# --- Allgemein -----------------------------------------------------------
+
+SLOFILES= \
+ $(SLO)$/basrdll.obj \
+ $(SLO)$/inputbox.obj \
+ $(SLO)$/runtime.obj \
+ $(SLO)$/step0.obj \
+ $(SLO)$/step1.obj \
+ $(SLO)$/step2.obj \
+ $(SLO)$/iosys.obj \
+ $(SLO)$/stdobj.obj \
+ $(SLO)$/stdobj1.obj \
+ $(SLO)$/methods.obj \
+ $(SLO)$/methods1.obj \
+ $(SLO)$/props.obj \
+ $(SLO)$/ddectrl.obj \
+ $(SLO)$/dllmgr.obj
+
+.IF "$(GUI)$(COM)$(CPU)" == "WNTMSCI"
+SLOFILES+= $(SLO)$/wnt.obj
+.ELIF "$(GUI)$(COM)$(CPU)" == "WNTGCCI"
+SLOFILES+= $(SLO)$/wnt-mingw.obj
+.ENDIF
+
+# --- Targets -------------------------------------------------------------
+
+.INCLUDE : target.mk
+
+$(SLO)$/%.obj: %.s
+#kendy: Cut'n'paste from bridges/source/cpp_uno/mingw_intel/makefile.mk
+ $(CC) -c -o $(SLO)$/$(@:b).obj $<
+ touch $@
diff --git a/basic/source/runtime/methods.cxx b/basic/source/runtime/methods.cxx
new file mode 100644
index 000000000000..1a60a5d79a45
--- /dev/null
+++ b/basic/source/runtime/methods.cxx
@@ -0,0 +1,4583 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+
+
+#include <tools/date.hxx>
+#include <basic/sbxvar.hxx>
+#ifndef _VOS_PROCESS_HXX
+#include <vos/process.hxx>
+#endif
+#include <vcl/svapp.hxx>
+#include <vcl/settings.hxx>
+#include <vcl/sound.hxx>
+#include <vcl/wintypes.hxx>
+#include <vcl/msgbox.hxx>
+#include <basic/sbx.hxx>
+#include <svl/zforlist.hxx>
+#include <rtl/math.hxx>
+#include <tools/urlobj.hxx>
+#include <osl/time.h>
+#include <unotools/charclass.hxx>
+#include <unotools/ucbstreamhelper.hxx>
+#include <tools/wldcrd.hxx>
+#include <i18npool/lang.h>
+
+#include "runtime.hxx"
+#include "sbunoobj.hxx"
+#ifdef WNT
+#include <tools/prewin.h>
+#include "winbase.h"
+#include <tools/postwin.h>
+#ifndef _FSYS_HXX //autogen
+#include <tools/fsys.hxx>
+#endif
+#else
+#include <osl/file.hxx>
+#endif
+#include "errobject.hxx"
+
+#ifdef _USE_UNO
+#include <comphelper/processfactory.hxx>
+
+#include <com/sun/star/uno/Sequence.hxx>
+#include <com/sun/star/util/DateTime.hpp>
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+#include <com/sun/star/lang/Locale.hpp>
+#include <com/sun/star/ucb/XSimpleFileAccess3.hpp>
+#include <com/sun/star/io/XInputStream.hpp>
+#include <com/sun/star/io/XOutputStream.hpp>
+#include <com/sun/star/io/XStream.hpp>
+#include <com/sun/star/io/XSeekable.hpp>
+
+using namespace comphelper;
+using namespace osl;
+using namespace com::sun::star::uno;
+using namespace com::sun::star::lang;
+using namespace com::sun::star::ucb;
+using namespace com::sun::star::io;
+
+#endif /* _USE_UNO */
+
+//#define _ENABLE_CUR_DIR
+
+#include "stdobj.hxx"
+#include <basic/sbstdobj.hxx>
+#include "rtlproto.hxx"
+#include "basrid.hxx"
+#include "image.hxx"
+#include "sb.hrc"
+#include "iosys.hxx"
+#include "ddectrl.hxx"
+#include <sbintern.hxx>
+
+#include <list>
+#include <math.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <ctype.h>
+
+#if defined (WIN) || defined (WNT) || defined (OS2)
+#include <direct.h> // _getdcwd get current work directory, _chdrive
+#endif
+
+#ifdef WIN
+#include <dos.h> // _dos_getfileattr
+#include <errno.h>
+#endif
+
+#ifdef UNX
+#include <errno.h>
+#include <unistd.h>
+#endif
+
+#ifdef WNT
+#include <io.h>
+#endif
+
+#include <basic/sbobjmod.hxx>
+
+static void FilterWhiteSpace( String& rStr )
+{
+ rStr.EraseAllChars( ' ' );
+ rStr.EraseAllChars( '\t' );
+ rStr.EraseAllChars( '\n' );
+ rStr.EraseAllChars( '\r' );
+}
+
+static long GetDayDiff( const Date& rDate )
+{
+ Date aRefDate( 1,1,1900 );
+ long nDiffDays;
+ if ( aRefDate > rDate )
+ {
+ nDiffDays = (long)(aRefDate - rDate);
+ nDiffDays *= -1;
+ }
+ else
+ nDiffDays = (long)(rDate - aRefDate);
+ nDiffDays += 2; // Anpassung VisualBasic: 1.Jan.1900 == 2
+ return nDiffDays;
+}
+
+static CharClass& GetCharClass( void )
+{
+ static sal_Bool bNeedsInit = sal_True;
+ static ::com::sun::star::lang::Locale aLocale;
+ if( bNeedsInit )
+ {
+ bNeedsInit = sal_False;
+ aLocale = Application::GetSettings().GetLocale();
+ }
+ static CharClass aCharClass( aLocale );
+ return aCharClass;
+}
+
+static inline BOOL isFolder( FileStatus::Type aType )
+{
+ return ( aType == FileStatus::Directory || aType == FileStatus::Volume );
+}
+
+
+//*** UCB file access ***
+
+// Converts possibly relative paths to absolute paths
+// according to the setting done by ChDir/ChDrive
+String getFullPath( const String& aRelPath )
+{
+ ::rtl::OUString aFileURL;
+
+ // #80204 Try first if it already is a valid URL
+ INetURLObject aURLObj( aRelPath );
+ aFileURL = aURLObj.GetMainURL( INetURLObject::NO_DECODE );
+
+ if( !aFileURL.getLength() )
+ {
+ File::getFileURLFromSystemPath( aRelPath, aFileURL );
+ }
+
+ return aFileURL;
+}
+
+// Sets (virtual) current path for UCB file access
+void implChDir( const String& aDir )
+{
+ (void)aDir;
+ // TODO
+}
+
+// Sets (virtual) current drive for UCB file access
+void implChDrive( const String& aDrive )
+{
+ (void)aDrive;
+ // TODO
+}
+
+// Returns (virtual) current path for UCB file access
+String implGetCurDir( void )
+{
+ String aRetStr;
+
+ return aRetStr;
+}
+
+// TODO: -> SbiGlobals
+static com::sun::star::uno::Reference< XSimpleFileAccess3 > getFileAccess( void )
+{
+ static com::sun::star::uno::Reference< XSimpleFileAccess3 > xSFI;
+ if( !xSFI.is() )
+ {
+ com::sun::star::uno::Reference< XMultiServiceFactory > xSMgr = getProcessServiceFactory();
+ if( xSMgr.is() )
+ {
+ xSFI = com::sun::star::uno::Reference< XSimpleFileAccess3 >( xSMgr->createInstance
+ ( ::rtl::OUString::createFromAscii( "com.sun.star.ucb.SimpleFileAccess" ) ), UNO_QUERY );
+ }
+ }
+ return xSFI;
+}
+
+
+
+// Properties und Methoden legen beim Get (bPut = FALSE) den Returnwert
+// im Element 0 des Argv ab; beim Put (bPut = TRUE) wird der Wert aus
+// Element 0 gespeichert.
+
+// CreateObject( class )
+
+RTLFUNC(CreateObject)
+{
+ (void)bWrite;
+
+ String aClass( rPar.Get( 1 )->GetString() );
+ SbxObjectRef p = SbxBase::CreateObject( aClass );
+ if( !p )
+ StarBASIC::Error( SbERR_CANNOT_LOAD );
+ else
+ {
+ // Convenience: BASIC als Parent eintragen
+ p->SetParent( pBasic );
+ rPar.Get( 0 )->PutObject( p );
+ }
+}
+
+// Error( n )
+
+RTLFUNC(Error)
+{
+ (void)bWrite;
+
+ if( !pBasic )
+ StarBASIC::Error( SbERR_INTERNAL_ERROR );
+ else
+ {
+ String aErrorMsg;
+ SbError nErr = 0L;
+ INT32 nCode = 0;
+ if( rPar.Count() == 1 )
+ {
+ nErr = StarBASIC::GetErrBasic();
+ aErrorMsg = StarBASIC::GetErrorMsg();
+ }
+ else
+ {
+ nCode = rPar.Get( 1 )->GetLong();
+ if( nCode > 65535L )
+ StarBASIC::Error( SbERR_CONVERSION );
+ else
+ nErr = StarBASIC::GetSfxFromVBError( (USHORT)nCode );
+ }
+
+ bool bVBA = SbiRuntime::isVBAEnabled();
+ String tmpErrMsg;
+ if( bVBA && aErrorMsg.Len() > 0 )
+ {
+ tmpErrMsg = aErrorMsg;
+ }
+ else
+ {
+ pBasic->MakeErrorText( nErr, aErrorMsg );
+ tmpErrMsg = pBasic->GetErrorText();
+ }
+ // If this rtlfunc 'Error' passed a errcode the same as the active Err Objects's
+ // current err then return the description for the error message if it is set
+ // ( complicated isn't it ? )
+ if ( bVBA && rPar.Count() > 1 )
+ {
+ com::sun::star::uno::Reference< ooo::vba::XErrObject > xErrObj( SbxErrObject::getUnoErrObject() );
+ if ( xErrObj.is() && xErrObj->getNumber() == nCode && xErrObj->getDescription().getLength() )
+ tmpErrMsg = xErrObj->getDescription();
+ }
+ rPar.Get( 0 )->PutString( tmpErrMsg );
+ }
+}
+
+// Sinus
+
+RTLFUNC(Sin)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() < 2 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ else
+ {
+ SbxVariableRef pArg = rPar.Get( 1 );
+ rPar.Get( 0 )->PutDouble( sin( pArg->GetDouble() ) );
+ }
+}
+
+// Cosinus
+
+RTLFUNC(Cos)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() < 2 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ else
+ {
+ SbxVariableRef pArg = rPar.Get( 1 );
+ rPar.Get( 0 )->PutDouble( cos( pArg->GetDouble() ) );
+ }
+}
+
+// Atn
+
+RTLFUNC(Atn)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() < 2 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ else
+ {
+ SbxVariableRef pArg = rPar.Get( 1 );
+ rPar.Get( 0 )->PutDouble( atan( pArg->GetDouble() ) );
+ }
+}
+
+
+
+RTLFUNC(Abs)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() < 2 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ else
+ {
+ SbxVariableRef pArg = rPar.Get( 1 );
+ rPar.Get( 0 )->PutDouble( fabs( pArg->GetDouble() ) );
+ }
+}
+
+
+RTLFUNC(Asc)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() < 2 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ else
+ {
+ SbxVariableRef pArg = rPar.Get( 1 );
+ String aStr( pArg->GetString() );
+ if ( aStr.Len() == 0 )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ rPar.Get(0)->PutEmpty();
+ }
+ else
+ {
+ sal_Unicode aCh = aStr.GetBuffer()[0];
+ rPar.Get(0)->PutLong( aCh );
+ }
+ }
+}
+
+RTLFUNC(Chr)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() < 2 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ else
+ {
+ SbxVariableRef pArg = rPar.Get( 1 );
+ sal_Unicode aCh = (sal_Unicode)pArg->GetUShort();
+ String aStr( aCh );
+ rPar.Get(0)->PutString( aStr );
+ }
+}
+
+
+#ifdef UNX
+#define _MAX_PATH 260
+#define _PATH_INCR 250
+#endif
+
+RTLFUNC(CurDir)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ // #57064 Obwohl diese Funktion nicht mit DirEntry arbeitet, ist sie von
+ // der Anpassung an virtuelle URLs nich betroffen, da bei Nutzung der
+ // DirEntry-Funktionalitaet keine Moeglichkeit besteht, das aktuelle so
+ // zu ermitteln, dass eine virtuelle URL geliefert werden koennte.
+
+// rPar.Get(0)->PutEmpty();
+#if defined (WIN) || defined (WNT) || defined (OS2)
+ int nCurDir = 0; // Current dir // JSM
+ if ( rPar.Count() == 2 )
+ {
+ String aDrive = rPar.Get(1)->GetString();
+ if ( aDrive.Len() != 1 )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+ else
+ {
+ nCurDir = (int)aDrive.GetBuffer()[0];
+ if ( !isalpha( nCurDir ) )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+ else
+ nCurDir -= ( 'A' - 1 );
+ }
+ }
+ char* pBuffer = new char[ _MAX_PATH ];
+#ifdef OS2
+ if( !nCurDir )
+ nCurDir = _getdrive();
+#endif
+ if ( _getdcwd( nCurDir, pBuffer, _MAX_PATH ) != 0 )
+ rPar.Get(0)->PutString( String::CreateFromAscii( pBuffer ) );
+ else
+ StarBASIC::Error( SbERR_NO_DEVICE );
+ delete [] pBuffer;
+
+#elif defined( UNX )
+
+ int nSize = _PATH_INCR;
+ char* pMem;
+ while( TRUE )
+ {
+ pMem = new char[nSize];
+ if( !pMem )
+ {
+ StarBASIC::Error( SbERR_NO_MEMORY );
+ return;
+ }
+ if( getcwd( pMem, nSize-1 ) != NULL )
+ {
+ rPar.Get(0)->PutString( String::CreateFromAscii(pMem) );
+ delete [] pMem;
+ return;
+ }
+ if( errno != ERANGE )
+ {
+ StarBASIC::Error( SbERR_INTERNAL_ERROR );
+ delete [] pMem;
+ return;
+ }
+ delete [] pMem;
+ nSize += _PATH_INCR;
+ };
+
+#endif
+}
+
+RTLFUNC(ChDir) // JSM
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutEmpty();
+ if (rPar.Count() == 2)
+ {
+#ifdef _ENABLE_CUR_DIR
+ String aPath = rPar.Get(1)->GetString();
+ BOOL bError = FALSE;
+#ifdef WNT
+ // #55997 Laut MI hilft es bei File-URLs einen DirEntry zwischenzuschalten
+ // #40996 Harmoniert bei Verwendung der WIN32-Funktion nicht mit getdir
+ DirEntry aEntry( aPath );
+ ByteString aFullPath( aEntry.GetFull(), gsl_getSystemTextEncoding() );
+ if( chdir( aFullPath.GetBuffer()) )
+ bError = TRUE;
+#else
+ if (!DirEntry(aPath).SetCWD())
+ bError = TRUE;
+#endif
+ if( bError )
+ StarBASIC::Error( SbERR_PATH_NOT_FOUND );
+#endif
+ }
+ else
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+}
+
+RTLFUNC(ChDrive) // JSM
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutEmpty();
+ if (rPar.Count() == 2)
+ {
+#ifdef _ENABLE_CUR_DIR
+ // Keine Laufwerke in Unix
+#ifndef UNX
+ String aPar1 = rPar.Get(1)->GetString();
+
+#if defined (WIN) || defined (WNT) || defined (OS2)
+ if (aPar1.Len() > 0)
+ {
+ int nCurDrive = (int)aPar1.GetBuffer()[0]; ;
+ if ( !isalpha( nCurDrive ) )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+ else
+ nCurDrive -= ( 'A' - 1 );
+ if (_chdrive(nCurDrive))
+ StarBASIC::Error( SbERR_NO_DEVICE );
+ }
+#endif
+
+#endif
+ // #ifndef UNX
+#endif
+ }
+ else
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+}
+
+
+// Implementation of StepRENAME with UCB
+void implStepRenameUCB( const String& aSource, const String& aDest )
+{
+ com::sun::star::uno::Reference< XSimpleFileAccess3 > xSFI = getFileAccess();
+ if( xSFI.is() )
+ {
+ try
+ {
+ String aSourceFullPath = getFullPath( aSource );
+ if( !xSFI->exists( aSourceFullPath ) )
+ {
+ StarBASIC::Error( SbERR_FILE_NOT_FOUND );
+ return;
+ }
+
+ String aDestFullPath = getFullPath( aDest );
+ if( xSFI->exists( aDestFullPath ) )
+ StarBASIC::Error( SbERR_FILE_EXISTS );
+ else
+ xSFI->move( aSourceFullPath, aDestFullPath );
+ }
+ catch( Exception & )
+ {
+ StarBASIC::Error( SbERR_FILE_NOT_FOUND );
+ }
+ }
+}
+
+// Implementation of StepRENAME with OSL
+void implStepRenameOSL( const String& aSource, const String& aDest )
+{
+ FileBase::RC nRet = File::move( getFullPathUNC( aSource ), getFullPathUNC( aDest ) );
+ if( nRet != FileBase::E_None )
+ {
+ StarBASIC::Error( SbERR_PATH_NOT_FOUND );
+ }
+}
+
+RTLFUNC(FileCopy) // JSM
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutEmpty();
+ if (rPar.Count() == 3)
+ {
+ String aSource = rPar.Get(1)->GetString();
+ String aDest = rPar.Get(2)->GetString();
+ // <-- UCB
+ if( hasUno() )
+ {
+ com::sun::star::uno::Reference< XSimpleFileAccess3 > xSFI = getFileAccess();
+ if( xSFI.is() )
+ {
+ try
+ {
+ xSFI->copy( getFullPath( aSource ), getFullPath( aDest ) );
+ }
+ catch( Exception & )
+ {
+ StarBASIC::Error( SbERR_PATH_NOT_FOUND );
+ }
+ }
+ }
+ else
+ // --> UCB
+ {
+#ifdef _OLD_FILE_IMPL
+ DirEntry aSourceDirEntry(aSource);
+ if (aSourceDirEntry.Exists())
+ {
+ if (aSourceDirEntry.CopyTo(DirEntry(aDest),FSYS_ACTION_COPYFILE) != FSYS_ERR_OK)
+ StarBASIC::Error( SbERR_PATH_NOT_FOUND );
+ }
+ else
+ StarBASIC::Error( SbERR_PATH_NOT_FOUND );
+#else
+ FileBase::RC nRet = File::copy( getFullPathUNC( aSource ), getFullPathUNC( aDest ) );
+ if( nRet != FileBase::E_None )
+ {
+ StarBASIC::Error( SbERR_PATH_NOT_FOUND );
+ }
+#endif
+ }
+ }
+ else
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+}
+
+RTLFUNC(Kill) // JSM
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutEmpty();
+ if (rPar.Count() == 2)
+ {
+ String aFileSpec = rPar.Get(1)->GetString();
+
+ // <-- UCB
+ if( hasUno() )
+ {
+ com::sun::star::uno::Reference< XSimpleFileAccess3 > xSFI = getFileAccess();
+ if( xSFI.is() )
+ {
+ String aFullPath = getFullPath( aFileSpec );
+ if( !xSFI->exists( aFullPath ) || xSFI->isFolder( aFullPath ) )
+ {
+ StarBASIC::Error( SbERR_FILE_NOT_FOUND );
+ return;
+ }
+ try
+ {
+ xSFI->kill( aFullPath );
+ }
+ catch( Exception & )
+ {
+ StarBASIC::Error( ERRCODE_IO_GENERAL );
+ }
+ }
+ }
+ else
+ // --> UCB
+ {
+#ifdef _OLD_FILE_IMPL
+ if(DirEntry(aFileSpec).Kill() != FSYS_ERR_OK)
+ StarBASIC::Error( SbERR_PATH_NOT_FOUND );
+#else
+ File::remove( getFullPathUNC( aFileSpec ) );
+#endif
+ }
+ }
+ else
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+}
+
+RTLFUNC(MkDir) // JSM
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutEmpty();
+ if (rPar.Count() == 2)
+ {
+ String aPath = rPar.Get(1)->GetString();
+
+ // <-- UCB
+ if( hasUno() )
+ {
+ com::sun::star::uno::Reference< XSimpleFileAccess3 > xSFI = getFileAccess();
+ if( xSFI.is() )
+ {
+ try
+ {
+ xSFI->createFolder( getFullPath( aPath ) );
+ }
+ catch( Exception & )
+ {
+ StarBASIC::Error( ERRCODE_IO_GENERAL );
+ }
+ }
+ }
+ else
+ // --> UCB
+ {
+#ifdef _OLD_FILE_IMPL
+ if (!DirEntry(aPath).MakeDir())
+ StarBASIC::Error( SbERR_PATH_NOT_FOUND );
+#else
+ Directory::create( getFullPathUNC( aPath ) );
+#endif
+ }
+ }
+ else
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+}
+
+
+#ifndef _OLD_FILE_IMPL
+
+// In OSL only empty directories can be deleted
+// so we have to delete all files recursively
+void implRemoveDirRecursive( const String& aDirPath )
+{
+ DirectoryItem aItem;
+ FileBase::RC nRet = DirectoryItem::get( aDirPath, aItem );
+ sal_Bool bExists = (nRet == FileBase::E_None);
+
+ FileStatus aFileStatus( FileStatusMask_Type );
+ nRet = aItem.getFileStatus( aFileStatus );
+ FileStatus::Type aType = aFileStatus.getFileType();
+ sal_Bool bFolder = isFolder( aType );
+
+ if( !bExists || !bFolder )
+ {
+ StarBASIC::Error( SbERR_PATH_NOT_FOUND );
+ return;
+ }
+
+ Directory aDir( aDirPath );
+ nRet = aDir.open();
+ if( nRet != FileBase::E_None )
+ {
+ StarBASIC::Error( SbERR_PATH_NOT_FOUND );
+ return;
+ }
+
+ for( ;; )
+ {
+ DirectoryItem aItem2;
+ nRet = aDir.getNextItem( aItem2 );
+ if( nRet != FileBase::E_None )
+ break;
+
+ // Handle flags
+ FileStatus aFileStatus2( FileStatusMask_Type | FileStatusMask_FileURL );
+ nRet = aItem2.getFileStatus( aFileStatus2 );
+ ::rtl::OUString aPath = aFileStatus2.getFileURL();
+
+ // Directory?
+ FileStatus::Type aType2 = aFileStatus2.getFileType();
+ sal_Bool bFolder2 = isFolder( aType2 );
+ if( bFolder2 )
+ {
+ implRemoveDirRecursive( aPath );
+ }
+ else
+ {
+ File::remove( aPath );
+ }
+ }
+ nRet = aDir.close();
+
+ nRet = Directory::remove( aDirPath );
+}
+#endif
+
+
+RTLFUNC(RmDir) // JSM
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutEmpty();
+ if (rPar.Count() == 2)
+ {
+ String aPath = rPar.Get(1)->GetString();
+ // <-- UCB
+ if( hasUno() )
+ {
+ com::sun::star::uno::Reference< XSimpleFileAccess3 > xSFI = getFileAccess();
+ if( xSFI.is() )
+ {
+ try
+ {
+ if( !xSFI->isFolder( aPath ) )
+ {
+ StarBASIC::Error( SbERR_PATH_NOT_FOUND );
+ return;
+ }
+ SbiInstance* pInst = pINST;
+ bool bCompatibility = ( pInst && pInst->IsCompatibility() );
+ if( bCompatibility )
+ {
+ Sequence< ::rtl::OUString > aContent = xSFI->getFolderContents( aPath, true );
+ sal_Int32 nCount = aContent.getLength();
+ if( nCount > 0 )
+ {
+ StarBASIC::Error( SbERR_ACCESS_ERROR );
+ return;
+ }
+ }
+
+ xSFI->kill( getFullPath( aPath ) );
+ }
+ catch( Exception & )
+ {
+ StarBASIC::Error( ERRCODE_IO_GENERAL );
+ }
+ }
+ }
+ else
+ // --> UCB
+ {
+#ifdef _OLD_FILE_IMPL
+ DirEntry aDirEntry(aPath);
+ if (aDirEntry.Kill() != FSYS_ERR_OK)
+ StarBASIC::Error( SbERR_PATH_NOT_FOUND );
+#else
+ implRemoveDirRecursive( getFullPathUNC( aPath ) );
+#endif
+ }
+ }
+ else
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+}
+
+RTLFUNC(SendKeys) // JSM
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutEmpty();
+ StarBASIC::Error(SbERR_NOT_IMPLEMENTED);
+}
+
+RTLFUNC(Exp)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if( rPar.Count() < 2 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ else
+ {
+ double aDouble = rPar.Get( 1 )->GetDouble();
+ aDouble = exp( aDouble );
+ checkArithmeticOverflow( aDouble );
+ rPar.Get( 0 )->PutDouble( aDouble );
+ }
+}
+
+RTLFUNC(FileLen)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() < 2 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ else
+ {
+ SbxVariableRef pArg = rPar.Get( 1 );
+ String aStr( pArg->GetString() );
+ INT32 nLen = 0;
+ // <-- UCB
+ if( hasUno() )
+ {
+ com::sun::star::uno::Reference< XSimpleFileAccess3 > xSFI = getFileAccess();
+ if( xSFI.is() )
+ {
+ try
+ {
+ nLen = xSFI->getSize( getFullPath( aStr ) );
+ }
+ catch( Exception & )
+ {
+ StarBASIC::Error( ERRCODE_IO_GENERAL );
+ }
+ }
+ }
+ else
+ // --> UCB
+ {
+#ifdef _OLD_FILE_IMPL
+ FileStat aStat = DirEntry( aStr );
+ nLen = aStat.GetSize();
+#else
+ DirectoryItem aItem;
+ FileBase::RC nRet = DirectoryItem::get( getFullPathUNC( aStr ), aItem );
+ FileStatus aFileStatus( FileStatusMask_FileSize );
+ nRet = aItem.getFileStatus( aFileStatus );
+ nLen = (INT32)aFileStatus.getFileSize();
+#endif
+ }
+ rPar.Get(0)->PutLong( (long)nLen );
+ }
+}
+
+
+RTLFUNC(Hex)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() < 2 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ else
+ {
+ char aBuffer[16];
+ SbxVariableRef pArg = rPar.Get( 1 );
+ if ( pArg->IsInteger() )
+ snprintf( aBuffer, sizeof(aBuffer), "%X", pArg->GetInteger() );
+ else
+ snprintf( aBuffer, sizeof(aBuffer), "%lX", static_cast<long unsigned int>(pArg->GetLong()) );
+ rPar.Get(0)->PutString( String::CreateFromAscii( aBuffer ) );
+ }
+}
+
+// InStr( [start],string,string,[compare] )
+
+RTLFUNC(InStr)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ ULONG nArgCount = rPar.Count()-1;
+ if ( nArgCount < 2 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ else
+ {
+ USHORT nStartPos = 1;
+
+ USHORT nFirstStringPos = 1;
+ if ( nArgCount >= 3 )
+ {
+ INT32 lStartPos = rPar.Get(1)->GetLong();
+ if( lStartPos <= 0 || lStartPos > 0xffff )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ lStartPos = 1;
+ }
+ nStartPos = (USHORT)lStartPos;
+ nFirstStringPos++;
+ }
+
+ SbiInstance* pInst = pINST;
+ int bTextMode;
+ bool bCompatibility = ( pInst && pInst->IsCompatibility() );
+ if( bCompatibility )
+ {
+ SbiRuntime* pRT = pInst ? pInst->pRun : NULL;
+ bTextMode = pRT ? pRT->GetImageFlag( SBIMG_COMPARETEXT ) : FALSE;
+ }
+ else
+ {
+ bTextMode = 1;;
+ }
+ if ( nArgCount == 4 )
+ bTextMode = rPar.Get(4)->GetInteger();
+
+ USHORT nPos;
+ const String& rToken = rPar.Get(nFirstStringPos+1)->GetString();
+
+ // #97545 Always find empty string
+ if( !rToken.Len() )
+ {
+ nPos = nStartPos;
+ }
+ else
+ {
+ if( !bTextMode )
+ {
+ const String& rStr1 = rPar.Get(nFirstStringPos)->GetString();
+
+ nPos = rStr1.Search( rToken, nStartPos-1 );
+ if ( nPos == STRING_NOTFOUND )
+ nPos = 0;
+ else
+ nPos++;
+ }
+ else
+ {
+ String aStr1 = rPar.Get(nFirstStringPos)->GetString();
+ String aToken = rToken;
+
+ aStr1.ToUpperAscii();
+ aToken.ToUpperAscii();
+
+ nPos = aStr1.Search( aToken, nStartPos-1 );
+ if ( nPos == STRING_NOTFOUND )
+ nPos = 0;
+ else
+ nPos++;
+ }
+ }
+ rPar.Get(0)->PutLong( nPos );
+ }
+}
+
+
+// InstrRev(string1, string2[, start[, compare]])
+
+RTLFUNC(InStrRev)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ ULONG nArgCount = rPar.Count()-1;
+ if ( nArgCount < 2 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ else
+ {
+ String aStr1 = rPar.Get(1)->GetString();
+ String aToken = rPar.Get(2)->GetString();
+
+ INT32 lStartPos = -1;
+ if ( nArgCount >= 3 )
+ {
+ lStartPos = rPar.Get(3)->GetLong();
+ if( (lStartPos <= 0 && lStartPos != -1) || lStartPos > 0xffff )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ lStartPos = -1;
+ }
+ }
+
+ SbiInstance* pInst = pINST;
+ int bTextMode;
+ bool bCompatibility = ( pInst && pInst->IsCompatibility() );
+ if( bCompatibility )
+ {
+ SbiRuntime* pRT = pInst ? pInst->pRun : NULL;
+ bTextMode = pRT ? pRT->GetImageFlag( SBIMG_COMPARETEXT ) : FALSE;
+ }
+ else
+ {
+ bTextMode = 1;;
+ }
+ if ( nArgCount == 4 )
+ bTextMode = rPar.Get(4)->GetInteger();
+
+ USHORT nStrLen = aStr1.Len();
+ USHORT nStartPos = lStartPos == -1 ? nStrLen : (USHORT)lStartPos;
+
+ USHORT nPos = 0;
+ if( nStartPos <= nStrLen )
+ {
+ USHORT nTokenLen = aToken.Len();
+ if( !nTokenLen )
+ {
+ // Always find empty string
+ nPos = nStartPos;
+ }
+ else if( nStrLen > 0 )
+ {
+ if( !bTextMode )
+ {
+ ::rtl::OUString aOUStr1 ( aStr1 );
+ ::rtl::OUString aOUToken( aToken );
+ sal_Int32 nRet = aOUStr1.lastIndexOf( aOUToken, nStartPos );
+ if( nRet == -1 )
+ nPos = 0;
+ else
+ nPos = (USHORT)nRet + 1;
+ }
+ else
+ {
+ aStr1.ToUpperAscii();
+ aToken.ToUpperAscii();
+
+ ::rtl::OUString aOUStr1 ( aStr1 );
+ ::rtl::OUString aOUToken( aToken );
+ sal_Int32 nRet = aOUStr1.lastIndexOf( aOUToken, nStartPos );
+
+ if( nRet == -1 )
+ nPos = 0;
+ else
+ nPos = (USHORT)nRet + 1;
+ }
+ }
+ }
+ rPar.Get(0)->PutLong( nPos );
+ }
+}
+
+
+/*
+ Int( 2.8 ) = 2.0
+ Int( -2.8 ) = -3.0
+ Fix( 2.8 ) = 2.0
+ Fix( -2.8 ) = -2.0 <- !!
+*/
+
+RTLFUNC(Int)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() < 2 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ else
+ {
+ SbxVariableRef pArg = rPar.Get( 1 );
+ double aDouble= pArg->GetDouble();
+ /*
+ floor( 2.8 ) = 2.0
+ floor( -2.8 ) = -3.0
+ */
+ aDouble = floor( aDouble );
+ rPar.Get(0)->PutDouble( aDouble );
+ }
+}
+
+
+
+RTLFUNC(Fix)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() < 2 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ else
+ {
+ SbxVariableRef pArg = rPar.Get( 1 );
+ double aDouble = pArg->GetDouble();
+ if ( aDouble >= 0.0 )
+ aDouble = floor( aDouble );
+ else
+ aDouble = ceil( aDouble );
+ rPar.Get(0)->PutDouble( aDouble );
+ }
+}
+
+
+RTLFUNC(LCase)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() < 2 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ else
+ {
+ CharClass& rCharClass = GetCharClass();
+ String aStr( rPar.Get(1)->GetString() );
+ rCharClass.toLower( aStr );
+ rPar.Get(0)->PutString( aStr );
+ }
+}
+
+RTLFUNC(Left)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() < 3 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ else
+ {
+ String aStr( rPar.Get(1)->GetString() );
+ INT32 lResultLen = rPar.Get(2)->GetLong();
+ if( lResultLen > 0xffff )
+ {
+ lResultLen = 0xffff;
+ }
+ else if( lResultLen < 0 )
+ {
+ lResultLen = 0;
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ }
+ aStr.Erase( (USHORT)lResultLen );
+ rPar.Get(0)->PutString( aStr );
+ }
+}
+
+RTLFUNC(Log)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() < 2 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ else
+ {
+ double aArg = rPar.Get(1)->GetDouble();
+ if ( aArg > 0 )
+ {
+ double d = log( aArg );
+ checkArithmeticOverflow( d );
+ rPar.Get( 0 )->PutDouble( d );
+ }
+ else
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ }
+}
+
+RTLFUNC(LTrim)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() < 2 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ else
+ {
+ String aStr( rPar.Get(1)->GetString() );
+ aStr.EraseLeadingChars();
+ rPar.Get(0)->PutString( aStr );
+ }
+}
+
+
+// Mid( String, nStart, nLength )
+
+RTLFUNC(Mid)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ ULONG nArgCount = rPar.Count()-1;
+ if ( nArgCount < 2 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ else
+ {
+ // #23178: Funktionalitaet von Mid$ als Anweisung nachbilden, indem
+ // als weiterer (4.) Parameter ein Ersetzungsstring aufgenommen wird.
+ // Anders als im Original kann in dieser Variante der 3. Parameter
+ // nLength nicht weggelassen werden. Ist ueber bWrite schon vorgesehen.
+ if( nArgCount == 4 )
+ bWrite = TRUE;
+
+ String aArgStr = rPar.Get(1)->GetString();
+ USHORT nStartPos = (USHORT)(rPar.Get(2)->GetLong() );
+ if ( nStartPos == 0 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ else
+ {
+ nStartPos--;
+ USHORT nLen = 0xffff;
+ bool bWriteNoLenParam = false;
+ if ( nArgCount == 3 || bWrite )
+ {
+ INT32 n = rPar.Get(3)->GetLong();
+ if( bWrite && n == -1 )
+ bWriteNoLenParam = true;
+ nLen = (USHORT)n;
+ }
+ String aResultStr;
+ if ( bWrite )
+ {
+ SbiInstance* pInst = pINST;
+ bool bCompatibility = ( pInst && pInst->IsCompatibility() );
+ if( bCompatibility )
+ {
+ USHORT nArgLen = aArgStr.Len();
+ if( nStartPos + 1 > nArgLen )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+
+ String aReplaceStr = rPar.Get(4)->GetString();
+ USHORT nReplaceStrLen = aReplaceStr.Len();
+ USHORT nReplaceLen;
+ if( bWriteNoLenParam )
+ {
+ nReplaceLen = nReplaceStrLen;
+ }
+ else
+ {
+ nReplaceLen = nLen;
+ if( nReplaceLen > nReplaceStrLen )
+ nReplaceLen = nReplaceStrLen;
+ }
+
+ USHORT nReplaceEndPos = nStartPos + nReplaceLen;
+ if( nReplaceEndPos > nArgLen )
+ nReplaceLen -= (nReplaceEndPos - nArgLen);
+
+ aResultStr = aArgStr;
+ USHORT nErase = nReplaceLen;
+ aResultStr.Erase( nStartPos, nErase );
+ aResultStr.Insert( aReplaceStr, 0, nReplaceLen, nStartPos );
+ }
+ else
+ {
+ aResultStr = aArgStr;
+ aResultStr.Erase( nStartPos, nLen );
+ aResultStr.Insert(rPar.Get(4)->GetString(),0,nLen,nStartPos);
+ }
+
+ rPar.Get(1)->PutString( aResultStr );
+ }
+ else
+ {
+ aResultStr = aArgStr.Copy( nStartPos, nLen );
+ rPar.Get(0)->PutString( aResultStr );
+ }
+ }
+ }
+}
+
+RTLFUNC(Oct)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() < 2 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ else
+ {
+ char aBuffer[16];
+ SbxVariableRef pArg = rPar.Get( 1 );
+ if ( pArg->IsInteger() )
+ snprintf( aBuffer, sizeof(aBuffer), "%o", pArg->GetInteger() );
+ else
+ snprintf( aBuffer, sizeof(aBuffer), "%lo", static_cast<long unsigned int>(pArg->GetLong()) );
+ rPar.Get(0)->PutString( String::CreateFromAscii( aBuffer ) );
+ }
+}
+
+// Replace(expression, find, replace[, start[, count[, compare]]])
+
+RTLFUNC(Replace)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ ULONG nArgCount = rPar.Count()-1;
+ if ( nArgCount < 3 || nArgCount > 6 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ else
+ {
+ String aExpStr = rPar.Get(1)->GetString();
+ String aFindStr = rPar.Get(2)->GetString();
+ String aReplaceStr = rPar.Get(3)->GetString();
+
+ INT32 lStartPos = 1;
+ if ( nArgCount >= 4 )
+ {
+ if( rPar.Get(4)->GetType() != SbxEMPTY )
+ lStartPos = rPar.Get(4)->GetLong();
+ if( lStartPos < 1 || lStartPos > 0xffff )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ lStartPos = 1;
+ }
+ }
+
+ INT32 lCount = -1;
+ if( nArgCount >=5 )
+ {
+ if( rPar.Get(5)->GetType() != SbxEMPTY )
+ lCount = rPar.Get(5)->GetLong();
+ if( lCount < -1 || lCount > 0xffff )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ lCount = -1;
+ }
+ }
+
+ SbiInstance* pInst = pINST;
+ int bTextMode;
+ bool bCompatibility = ( pInst && pInst->IsCompatibility() );
+ if( bCompatibility )
+ {
+ SbiRuntime* pRT = pInst ? pInst->pRun : NULL;
+ bTextMode = pRT ? pRT->GetImageFlag( SBIMG_COMPARETEXT ) : FALSE;
+ }
+ else
+ {
+ bTextMode = 1;
+ }
+ if ( nArgCount == 6 )
+ bTextMode = rPar.Get(6)->GetInteger();
+
+ USHORT nExpStrLen = aExpStr.Len();
+ USHORT nFindStrLen = aFindStr.Len();
+ USHORT nReplaceStrLen = aReplaceStr.Len();
+
+ if( lStartPos <= nExpStrLen )
+ {
+ USHORT nPos = static_cast<USHORT>( lStartPos - 1 );
+ USHORT nCounts = 0;
+ while( lCount == -1 || lCount > nCounts )
+ {
+ String aSrcStr( aExpStr );
+ if( bTextMode )
+ {
+ aSrcStr.ToUpperAscii();
+ aFindStr.ToUpperAscii();
+ }
+ nPos = aSrcStr.Search( aFindStr, nPos );
+ if( nPos != STRING_NOTFOUND )
+ {
+ aExpStr.Replace( nPos, nFindStrLen, aReplaceStr );
+ nPos = nPos - nFindStrLen + nReplaceStrLen + 1;
+ nCounts++;
+ }
+ else
+ {
+ break;
+ }
+ }
+ }
+ rPar.Get(0)->PutString( aExpStr.Copy( static_cast<USHORT>(lStartPos - 1) ) );
+ }
+}
+
+RTLFUNC(Right)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() < 3 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ else
+ {
+ const String& rStr = rPar.Get(1)->GetString();
+ INT32 lResultLen = rPar.Get(2)->GetLong();
+ if( lResultLen > 0xffff )
+ {
+ lResultLen = 0xffff;
+ }
+ else if( lResultLen < 0 )
+ {
+ lResultLen = 0;
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ }
+ USHORT nResultLen = (USHORT)lResultLen;
+ USHORT nStrLen = rStr.Len();
+ if ( nResultLen > nStrLen )
+ nResultLen = nStrLen;
+ String aResultStr = rStr.Copy( nStrLen-nResultLen );
+ rPar.Get(0)->PutString( aResultStr );
+ }
+}
+
+RTLFUNC(RTL)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get( 0 )->PutObject( pBasic->getRTL() );
+}
+
+RTLFUNC(RTrim)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() < 2 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ else
+ {
+ String aStr( rPar.Get(1)->GetString() );
+ aStr.EraseTrailingChars();
+ rPar.Get(0)->PutString( aStr );
+ }
+}
+
+RTLFUNC(Sgn)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() < 2 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ else
+ {
+ double aDouble = rPar.Get(1)->GetDouble();
+ INT16 nResult = 0;
+ if ( aDouble > 0 )
+ nResult = 1;
+ else if ( aDouble < 0 )
+ nResult = -1;
+ rPar.Get(0)->PutInteger( nResult );
+ }
+}
+
+RTLFUNC(Space)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() < 2 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ else
+ {
+ String aStr;
+ aStr.Fill( (USHORT)(rPar.Get(1)->GetLong() ));
+ rPar.Get(0)->PutString( aStr );
+ }
+}
+
+RTLFUNC(Spc)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() < 2 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ else
+ {
+ String aStr;
+ aStr.Fill( (USHORT)(rPar.Get(1)->GetLong() ));
+ rPar.Get(0)->PutString( aStr );
+ }
+}
+
+RTLFUNC(Sqr)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() < 2 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ else
+ {
+ double aDouble = rPar.Get(1)->GetDouble();
+ if ( aDouble >= 0 )
+ rPar.Get(0)->PutDouble( sqrt( aDouble ));
+ else
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ }
+}
+
+RTLFUNC(Str)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() < 2 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ else
+ {
+ String aStr;
+ SbxVariableRef pArg = rPar.Get( 1 );
+ pArg->Format( aStr );
+
+ // Numbers start with a space
+ if( pArg->IsNumericRTL() )
+ {
+ // Kommas durch Punkte ersetzen, damit es symmetrisch zu Val ist!
+ aStr.SearchAndReplace( ',', '.' );
+
+ SbiInstance* pInst = pINST;
+ bool bCompatibility = ( pInst && pInst->IsCompatibility() );
+ if( bCompatibility )
+ {
+ xub_StrLen nLen = aStr.Len();
+
+ const sal_Unicode* pBuf = aStr.GetBuffer();
+
+ bool bNeg = ( pBuf[0] == '-' );
+ USHORT iZeroSearch = 0;
+ if( bNeg )
+ iZeroSearch++;
+
+ USHORT iNext = iZeroSearch + 1;
+ if( pBuf[iZeroSearch] == '0' && nLen > iNext && pBuf[iNext] == '.' )
+ {
+ aStr.Erase( iZeroSearch, 1 );
+ pBuf = aStr.GetBuffer();
+ }
+ if( !bNeg )
+ aStr.Insert( ' ', 0 );
+ }
+ else
+ aStr.Insert( ' ', 0 );
+ }
+ rPar.Get(0)->PutString( aStr );
+ }
+}
+
+RTLFUNC(StrComp)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() < 3 )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ rPar.Get(0)->PutEmpty();
+ return;
+ }
+ const String& rStr1 = rPar.Get(1)->GetString();
+ const String& rStr2 = rPar.Get(2)->GetString();
+
+ SbiInstance* pInst = pINST;
+ INT16 nTextCompare;
+ bool bCompatibility = ( pInst && pInst->IsCompatibility() );
+ if( bCompatibility )
+ {
+ SbiRuntime* pRT = pInst ? pInst->pRun : NULL;
+ nTextCompare = pRT ? pRT->GetImageFlag( SBIMG_COMPARETEXT ) : FALSE;
+ }
+ else
+ {
+ nTextCompare = TRUE;
+ }
+ if ( rPar.Count() == 4 )
+ nTextCompare = rPar.Get(3)->GetInteger();
+
+ if( !bCompatibility )
+ nTextCompare = !nTextCompare;
+
+ StringCompare aResult;
+ sal_Int32 nRetValue = 0;
+ if( nTextCompare )
+ {
+ ::utl::TransliterationWrapper* pTransliterationWrapper = GetSbData()->pTransliterationWrapper;
+ if( !pTransliterationWrapper )
+ {
+ com::sun::star::uno::Reference< XMultiServiceFactory > xSMgr = getProcessServiceFactory();
+ pTransliterationWrapper = GetSbData()->pTransliterationWrapper =
+ new ::utl::TransliterationWrapper( xSMgr,
+ ::com::sun::star::i18n::TransliterationModules_IGNORE_CASE |
+ ::com::sun::star::i18n::TransliterationModules_IGNORE_KANA |
+ ::com::sun::star::i18n::TransliterationModules_IGNORE_WIDTH );
+ }
+
+ LanguageType eLangType = GetpApp()->GetSettings().GetLanguage();
+ pTransliterationWrapper->loadModuleIfNeeded( eLangType );
+ nRetValue = pTransliterationWrapper->compareString( rStr1, rStr2 );
+ }
+ else
+ {
+ aResult = rStr1.CompareTo( rStr2 );
+ if ( aResult == COMPARE_LESS )
+ nRetValue = -1;
+ else if ( aResult == COMPARE_GREATER )
+ nRetValue = 1;
+ }
+
+ rPar.Get(0)->PutInteger( sal::static_int_cast< INT16 >( nRetValue ) );
+}
+
+RTLFUNC(String)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() < 2 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ else
+ {
+ String aStr;
+ sal_Unicode aFiller;
+ INT32 lCount = rPar.Get(1)->GetLong();
+ if( lCount < 0 || lCount > 0xffff )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ USHORT nCount = (USHORT)lCount;
+ if( rPar.Get(2)->GetType() == SbxINTEGER )
+ aFiller = (sal_Unicode)rPar.Get(2)->GetInteger();
+ else
+ {
+ const String& rStr = rPar.Get(2)->GetString();
+ aFiller = rStr.GetBuffer()[0];
+ }
+ aStr.Fill( nCount, aFiller );
+ rPar.Get(0)->PutString( aStr );
+ }
+}
+
+RTLFUNC(Tan)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() < 2 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ else
+ {
+ SbxVariableRef pArg = rPar.Get( 1 );
+ rPar.Get( 0 )->PutDouble( tan( pArg->GetDouble() ) );
+ }
+}
+
+RTLFUNC(UCase)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() < 2 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ else
+ {
+ CharClass& rCharClass = GetCharClass();
+ String aStr( rPar.Get(1)->GetString() );
+ rCharClass.toUpper( aStr );
+ rPar.Get(0)->PutString( aStr );
+ }
+}
+
+
+RTLFUNC(Val)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() < 2 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ else
+ {
+ double nResult = 0.0;
+ char* pEndPtr;
+
+ String aStr( rPar.Get(1)->GetString() );
+// lt. Mikkysoft bei Kommas abbrechen!
+// for( USHORT n=0; n < aStr.Len(); n++ )
+// if( aStr[n] == ',' ) aStr[n] = '.';
+
+ FilterWhiteSpace( aStr );
+ if ( aStr.GetBuffer()[0] == '&' && aStr.Len() > 1 )
+ {
+ int nRadix = 10;
+ char aChar = (char)aStr.GetBuffer()[1];
+ if ( aChar == 'h' || aChar == 'H' )
+ nRadix = 16;
+ else if ( aChar == 'o' || aChar == 'O' )
+ nRadix = 8;
+ if ( nRadix != 10 )
+ {
+ ByteString aByteStr( aStr, gsl_getSystemTextEncoding() );
+ INT16 nlResult = (INT16)strtol( aByteStr.GetBuffer()+2, &pEndPtr, nRadix);
+ nResult = (double)nlResult;
+ }
+ }
+ else
+ {
+ // #57844 Lokalisierte Funktion benutzen
+ nResult = ::rtl::math::stringToDouble( aStr, '.', ',', NULL, NULL );
+ checkArithmeticOverflow( nResult );
+ // ATL: nResult = strtod( aStr.GetStr(), &pEndPtr );
+ }
+
+ rPar.Get(0)->PutDouble( nResult );
+ }
+}
+
+
+// Helper functions for date conversion
+INT16 implGetDateDay( double aDate )
+{
+ aDate -= 2.0; // normieren: 1.1.1900 => 0.0
+ Date aRefDate( 1, 1, 1900 );
+ if ( aDate >= 0.0 )
+ {
+ aDate = floor( aDate );
+ aRefDate += (ULONG)aDate;
+ }
+ else
+ {
+ aDate = ceil( aDate );
+ aRefDate -= (ULONG)(-1.0 * aDate);
+ }
+
+ INT16 nRet = (INT16)( aRefDate.GetDay() );
+ return nRet;
+}
+
+INT16 implGetDateMonth( double aDate )
+{
+ Date aRefDate( 1,1,1900 );
+ long nDays = (long)aDate;
+ nDays -= 2; // normieren: 1.1.1900 => 0.0
+ aRefDate += nDays;
+ INT16 nRet = (INT16)( aRefDate.GetMonth() );
+ return nRet;
+}
+
+INT16 implGetDateYear( double aDate )
+{
+ Date aRefDate( 1,1,1900 );
+ long nDays = (long) aDate;
+ nDays -= 2; // normieren: 1.1.1900 => 0.0
+ aRefDate += nDays;
+ INT16 nRet = (INT16)( aRefDate.GetYear() );
+ return nRet;
+}
+
+BOOL implDateSerial( INT16 nYear, INT16 nMonth, INT16 nDay, double& rdRet )
+{
+ if ( nYear < 30 && SbiRuntime::isVBAEnabled() )
+ nYear += 2000;
+ else if ( nYear < 100 )
+ nYear += 1900;
+ Date aCurDate( nDay, nMonth, nYear );
+ if ((nYear < 100 || nYear > 9999) )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return FALSE;
+ }
+ if ( !SbiRuntime::isVBAEnabled() )
+ {
+ if ( (nMonth < 1 || nMonth > 12 )||
+ (nDay < 1 || nDay > 31 ) )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return FALSE;
+ }
+ }
+ else
+ {
+ // grab the year & month
+ aCurDate = Date( 1, (( nMonth % 12 ) > 0 ) ? ( nMonth % 12 ) : 12 + ( nMonth % 12 ), nYear );
+
+ // adjust year based on month value
+ // e.g. 2000, 0, xx = 1999, 12, xx ( or December of the previous year )
+ // 2000, 13, xx = 2001, 1, xx ( or January of the following year )
+ if( ( nMonth < 1 ) || ( nMonth > 12 ) )
+ {
+ // inacurrate around leap year, don't use days to calculate,
+ // just modify the months directory
+ INT16 nYearAdj = ( nMonth /12 ); // default to positive months inputed
+ if ( nMonth <=0 )
+ nYearAdj = ( ( nMonth -12 ) / 12 );
+ aCurDate.SetYear( aCurDate.GetYear() + nYearAdj );
+ }
+
+ // adjust day value,
+ // e.g. 2000, 2, 0 = 2000, 1, 31 or the last day of the previous month
+ // 2000, 1, 32 = 2000, 2, 1 or the first day of the following month
+ if( ( nDay < 1 ) || ( nDay > aCurDate.GetDaysInMonth() ) )
+ aCurDate += nDay - 1;
+ else
+ aCurDate.SetDay( nDay );
+ }
+
+ long nDiffDays = GetDayDiff( aCurDate );
+ rdRet = (double)nDiffDays;
+ return TRUE;
+}
+
+// Function to convert date to ISO 8601 date format
+RTLFUNC(CDateToIso)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() == 2 )
+ {
+ double aDate = rPar.Get(1)->GetDate();
+
+ char Buffer[9];
+ snprintf( Buffer, sizeof( Buffer ), "%04d%02d%02d",
+ implGetDateYear( aDate ),
+ implGetDateMonth( aDate ),
+ implGetDateDay( aDate ) );
+ String aRetStr = String::CreateFromAscii( Buffer );
+ rPar.Get(0)->PutString( aRetStr );
+ }
+ else
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+}
+
+// Function to convert date from ISO 8601 date format
+RTLFUNC(CDateFromIso)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() == 2 )
+ {
+ String aStr = rPar.Get(1)->GetString();
+ INT16 iMonthStart = aStr.Len() - 4;
+ String aYearStr = aStr.Copy( 0, iMonthStart );
+ String aMonthStr = aStr.Copy( iMonthStart, 2 );
+ String aDayStr = aStr.Copy( iMonthStart+2, 2 );
+
+ double dDate;
+ if( implDateSerial( (INT16)aYearStr.ToInt32(),
+ (INT16)aMonthStr.ToInt32(), (INT16)aDayStr.ToInt32(), dDate ) )
+ {
+ rPar.Get(0)->PutDate( dDate );
+ }
+ }
+ else
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+}
+
+RTLFUNC(DateSerial)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() < 4 )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+ INT16 nYear = rPar.Get(1)->GetInteger();
+ INT16 nMonth = rPar.Get(2)->GetInteger();
+ INT16 nDay = rPar.Get(3)->GetInteger();
+
+ double dDate;
+ if( implDateSerial( nYear, nMonth, nDay, dDate ) )
+ rPar.Get(0)->PutDate( dDate );
+}
+
+RTLFUNC(TimeSerial)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() < 4 )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+ INT16 nHour = rPar.Get(1)->GetInteger();
+ if ( nHour == 24 )
+ nHour = 0; // Wegen UNO DateTimes, die bis 24 Uhr gehen
+ INT16 nMinute = rPar.Get(2)->GetInteger();
+ INT16 nSecond = rPar.Get(3)->GetInteger();
+ if ((nHour < 0 || nHour > 23) ||
+ (nMinute < 0 || nMinute > 59 ) ||
+ (nSecond < 0 || nSecond > 59 ))
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+
+ INT32 nSeconds = nHour;
+ nSeconds *= 3600;
+ nSeconds += nMinute * 60;
+ nSeconds += nSecond;
+ double nDays = ((double)nSeconds) / (double)(86400.0);
+ rPar.Get(0)->PutDate( nDays ); // JSM
+}
+
+RTLFUNC(DateValue)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() < 2 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ else
+ {
+ // #39629 pINST pruefen, kann aus URL-Zeile gerufen werden
+ SvNumberFormatter* pFormatter = NULL;
+ if( pINST )
+ pFormatter = pINST->GetNumberFormatter();
+ else
+ {
+ sal_uInt32 n; // Dummy
+ SbiInstance::PrepareNumberFormatter( pFormatter, n, n, n );
+ }
+
+ sal_uInt32 nIndex;
+ double fResult;
+ String aStr( rPar.Get(1)->GetString() );
+ BOOL bSuccess = pFormatter->IsNumberFormat( aStr, nIndex, fResult );
+ short nType = pFormatter->GetType( nIndex );
+
+ // DateValue("February 12, 1969") raises error if the system locale is not en_US
+ // by using SbiInstance::GetNumberFormatter.
+ // It seems that both locale number formatter and English number formatter
+ // are supported in Visual Basic.
+ LanguageType eLangType = GetpApp()->GetSettings().GetLanguage();
+ if( !bSuccess && ( eLangType != LANGUAGE_ENGLISH_US ) )
+ {
+ // Create a new SvNumberFormatter by using LANGUAGE_ENGLISH to get the date value;
+ com::sun::star::uno::Reference< com::sun::star::lang::XMultiServiceFactory >
+ xFactory = comphelper::getProcessServiceFactory();
+ SvNumberFormatter aFormatter( xFactory, LANGUAGE_ENGLISH_US );
+ bSuccess = aFormatter.IsNumberFormat( aStr, nIndex, fResult );
+ nType = aFormatter.GetType( nIndex );
+ }
+
+ if(bSuccess && (nType==NUMBERFORMAT_DATE || nType==NUMBERFORMAT_DATETIME))
+ {
+ if ( nType == NUMBERFORMAT_DATETIME )
+ {
+ // Zeit abschneiden
+ if ( fResult > 0.0 )
+ fResult = floor( fResult );
+ else
+ fResult = ceil( fResult );
+ }
+ // fResult += 2.0; // Anpassung StarCalcFormatter
+ rPar.Get(0)->PutDate( fResult ); // JSM
+ }
+ else
+ StarBASIC::Error( SbERR_CONVERSION );
+
+ // #39629 pFormatter kann selbst angefordert sein
+ if( !pINST )
+ delete pFormatter;
+ }
+}
+
+RTLFUNC(TimeValue)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() < 2 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ else
+ {
+ // #39629 pINST pruefen, kann aus URL-Zeile gerufen werden
+ SvNumberFormatter* pFormatter = NULL;
+ if( pINST )
+ pFormatter = pINST->GetNumberFormatter();
+ else
+ {
+ sal_uInt32 n; // Dummy
+ SbiInstance::PrepareNumberFormatter( pFormatter, n, n, n );
+ }
+
+ sal_uInt32 nIndex;
+ double fResult;
+ BOOL bSuccess = pFormatter->IsNumberFormat( rPar.Get(1)->GetString(),
+ nIndex, fResult );
+ short nType = pFormatter->GetType(nIndex);
+ if(bSuccess && (nType==NUMBERFORMAT_TIME||nType==NUMBERFORMAT_DATETIME))
+ {
+ if ( nType == NUMBERFORMAT_DATETIME )
+ // Tage abschneiden
+ fResult = fmod( fResult, 1 );
+ rPar.Get(0)->PutDate( fResult ); // JSM
+ }
+ else
+ StarBASIC::Error( SbERR_CONVERSION );
+
+ // #39629 pFormatter kann selbst angefordert sein
+ if( !pINST )
+ delete pFormatter;
+ }
+}
+
+RTLFUNC(Day)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() < 2 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ else
+ {
+ SbxVariableRef pArg = rPar.Get( 1 );
+ double aDate = pArg->GetDate();
+
+ INT16 nDay = implGetDateDay( aDate );
+ rPar.Get(0)->PutInteger( nDay );
+ }
+}
+
+RTLFUNC(Year)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() < 2 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ else
+ {
+ INT16 nYear = implGetDateYear( rPar.Get(1)->GetDate() );
+ rPar.Get(0)->PutInteger( nYear );
+ }
+}
+
+INT16 implGetHour( double dDate )
+{
+ if( dDate < 0.0 )
+ dDate *= -1.0;
+ double nFrac = dDate - floor( dDate );
+ nFrac *= 86400.0;
+ INT32 nSeconds = (INT32)(nFrac + 0.5);
+ INT16 nHour = (INT16)(nSeconds / 3600);
+ return nHour;
+}
+
+RTLFUNC(Hour)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() < 2 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ else
+ {
+ double nArg = rPar.Get(1)->GetDate();
+ INT16 nHour = implGetHour( nArg );
+ rPar.Get(0)->PutInteger( nHour );
+ }
+}
+
+INT16 implGetMinute( double dDate )
+{
+ if( dDate < 0.0 )
+ dDate *= -1.0;
+ double nFrac = dDate - floor( dDate );
+ nFrac *= 86400.0;
+ INT32 nSeconds = (INT32)(nFrac + 0.5);
+ INT16 nTemp = (INT16)(nSeconds % 3600);
+ INT16 nMin = nTemp / 60;
+ return nMin;
+}
+
+RTLFUNC(Minute)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() < 2 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ else
+ {
+ double nArg = rPar.Get(1)->GetDate();
+ INT16 nMin = implGetMinute( nArg );
+ rPar.Get(0)->PutInteger( nMin );
+ }
+}
+
+RTLFUNC(Month)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() < 2 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ else
+ {
+ INT16 nMonth = implGetDateMonth( rPar.Get(1)->GetDate() );
+ rPar.Get(0)->PutInteger( nMonth );
+ }
+}
+
+INT16 implGetSecond( double dDate )
+{
+ if( dDate < 0.0 )
+ dDate *= -1.0;
+ double nFrac = dDate - floor( dDate );
+ nFrac *= 86400.0;
+ INT32 nSeconds = (INT32)(nFrac + 0.5);
+ INT16 nTemp = (INT16)(nSeconds / 3600);
+ nSeconds -= nTemp * 3600;
+ nTemp = (INT16)(nSeconds / 60);
+ nSeconds -= nTemp * 60;
+
+ INT16 nRet = (INT16)nSeconds;
+ return nRet;
+}
+
+RTLFUNC(Second)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() < 2 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ else
+ {
+ double nArg = rPar.Get(1)->GetDate();
+ INT16 nSecond = implGetSecond( nArg );
+ rPar.Get(0)->PutInteger( nSecond );
+ }
+}
+
+double Now_Impl()
+{
+ Date aDate;
+ Time aTime;
+ double aSerial = (double)GetDayDiff( aDate );
+ long nSeconds = aTime.GetHour();
+ nSeconds *= 3600;
+ nSeconds += aTime.GetMin() * 60;
+ nSeconds += aTime.GetSec();
+ double nDays = ((double)nSeconds) / (double)(24.0*3600.0);
+ aSerial += nDays;
+ return aSerial;
+}
+
+// Date Now(void)
+
+RTLFUNC(Now)
+{
+ (void)pBasic;
+ (void)bWrite;
+ rPar.Get(0)->PutDate( Now_Impl() );
+}
+
+// Date Time(void)
+
+RTLFUNC(Time)
+{
+ (void)pBasic;
+
+ if ( !bWrite )
+ {
+ Time aTime;
+ SbxVariable* pMeth = rPar.Get( 0 );
+ String aRes;
+ if( pMeth->IsFixed() )
+ {
+ // Time$: hh:mm:ss
+ char buf[ 20 ];
+ snprintf( buf, sizeof(buf), "%02d:%02d:%02d",
+ aTime.GetHour(), aTime.GetMin(), aTime.GetSec() );
+ aRes = String::CreateFromAscii( buf );
+ }
+ else
+ {
+ // Time: system dependent
+ long nSeconds=aTime.GetHour();
+ nSeconds *= 3600;
+ nSeconds += aTime.GetMin() * 60;
+ nSeconds += aTime.GetSec();
+ double nDays = (double)nSeconds * ( 1.0 / (24.0*3600.0) );
+ Color* pCol;
+
+ // #39629 pINST pruefen, kann aus URL-Zeile gerufen werden
+ SvNumberFormatter* pFormatter = NULL;
+ sal_uInt32 nIndex;
+ if( pINST )
+ {
+ pFormatter = pINST->GetNumberFormatter();
+ nIndex = pINST->GetStdTimeIdx();
+ }
+ else
+ {
+ sal_uInt32 n; // Dummy
+ SbiInstance::PrepareNumberFormatter( pFormatter, n, nIndex, n );
+ }
+
+ pFormatter->GetOutputString( nDays, nIndex, aRes, &pCol );
+
+ // #39629 pFormatter kann selbst angefordert sein
+ if( !pINST )
+ delete pFormatter;
+ }
+ pMeth->PutString( aRes );
+ }
+ else
+ {
+ StarBASIC::Error( SbERR_NOT_IMPLEMENTED );
+ }
+}
+
+RTLFUNC(Timer)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ Time aTime;
+ long nSeconds = aTime.GetHour();
+ nSeconds *= 3600;
+ nSeconds += aTime.GetMin() * 60;
+ nSeconds += aTime.GetSec();
+ rPar.Get(0)->PutDate( (double)nSeconds );
+}
+
+
+RTLFUNC(Date)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( !bWrite )
+ {
+ Date aToday;
+ double nDays = (double)GetDayDiff( aToday );
+ SbxVariable* pMeth = rPar.Get( 0 );
+ if( pMeth->IsString() )
+ {
+ String aRes;
+ Color* pCol;
+
+ // #39629 pINST pruefen, kann aus URL-Zeile gerufen werden
+ SvNumberFormatter* pFormatter = NULL;
+ sal_uInt32 nIndex;
+ if( pINST )
+ {
+ pFormatter = pINST->GetNumberFormatter();
+ nIndex = pINST->GetStdDateIdx();
+ }
+ else
+ {
+ sal_uInt32 n; // Dummy
+ SbiInstance::PrepareNumberFormatter( pFormatter, nIndex, n, n );
+ }
+
+ pFormatter->GetOutputString( nDays, nIndex, aRes, &pCol );
+ pMeth->PutString( aRes );
+
+ // #39629 pFormatter kann selbst angefordert sein
+ if( !pINST )
+ delete pFormatter;
+ }
+ else
+ pMeth->PutDate( nDays );
+ }
+ else
+ {
+ StarBASIC::Error( SbERR_NOT_IMPLEMENTED );
+ }
+}
+
+RTLFUNC(IsArray)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() < 2 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ else
+ rPar.Get(0)->PutBool((rPar.Get(1)->GetType() & SbxARRAY) ? TRUE : FALSE );
+}
+
+RTLFUNC(IsObject)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() < 2 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ else
+ {
+ SbxVariable* pVar = rPar.Get(1);
+ SbxBase* pObj = (SbxBase*)pVar->GetObject();
+
+ // #100385: GetObject can result in an error, so reset it
+ SbxBase::ResetError();
+
+ SbUnoClass* pUnoClass;
+ BOOL bObject;
+ if( pObj && NULL != ( pUnoClass=PTR_CAST(SbUnoClass,pObj) ) )
+ {
+ bObject = pUnoClass->getUnoClass().is();
+ }
+ else
+ {
+ bObject = pVar->IsObject();
+ }
+ rPar.Get( 0 )->PutBool( bObject );
+ }
+}
+
+RTLFUNC(IsDate)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() < 2 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ else
+ {
+ // #46134 Nur String wird konvertiert, andere Typen ergeben FALSE
+ SbxVariableRef xArg = rPar.Get( 1 );
+ SbxDataType eType = xArg->GetType();
+ BOOL bDate = FALSE;
+
+ if( eType == SbxDATE )
+ {
+ bDate = TRUE;
+ }
+ else if( eType == SbxSTRING )
+ {
+ // Error loeschen
+ SbxError nPrevError = SbxBase::GetError();
+ SbxBase::ResetError();
+
+ // Konvertierung des Parameters nach SbxDATE erzwingen
+ xArg->SbxValue::GetDate();
+
+ // Bei Fehler ist es kein Date
+ bDate = !SbxBase::IsError();
+
+ // Error-Situation wiederherstellen
+ SbxBase::ResetError();
+ SbxBase::SetError( nPrevError );
+ }
+ rPar.Get( 0 )->PutBool( bDate );
+ }
+}
+
+RTLFUNC(IsEmpty)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() < 2 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ else
+ rPar.Get( 0 )->PutBool( rPar.Get(1)->IsEmpty() );
+}
+
+RTLFUNC(IsError)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() < 2 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ else
+ rPar.Get( 0 )->PutBool( rPar.Get(1)->IsErr() );
+}
+
+RTLFUNC(IsNull)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() < 2 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ else
+ {
+ // #51475 Wegen Uno-Objekten auch true liefern,
+ // wenn der pObj-Wert NULL ist
+ SbxVariableRef pArg = rPar.Get( 1 );
+ BOOL bNull = rPar.Get(1)->IsNull();
+ if( !bNull && pArg->GetType() == SbxOBJECT )
+ {
+ SbxBase* pObj = pArg->GetObject();
+ if( !pObj )
+ bNull = TRUE;
+ }
+ rPar.Get( 0 )->PutBool( bNull );
+ }
+}
+
+RTLFUNC(IsNumeric)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() < 2 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ else
+ rPar.Get( 0 )->PutBool( rPar.Get( 1 )->IsNumericRTL() );
+}
+
+// Das machen wir auf die billige Tour
+
+RTLFUNC(IsMissing)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() < 2 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ else
+ // #57915 Missing wird durch Error angezeigt
+ rPar.Get( 0 )->PutBool( rPar.Get(1)->IsErr() );
+}
+
+// Dir( [Maske] [,Attrs] )
+// ToDo: Library-globaler Datenbereich fuer Dir-Objekt und Flags
+
+
+String getDirectoryPath( String aPathStr )
+{
+ String aRetStr;
+
+ DirectoryItem aItem;
+ FileBase::RC nRet = DirectoryItem::get( aPathStr, aItem );
+ if( nRet == FileBase::E_None )
+ {
+ FileStatus aFileStatus( FileStatusMask_Type );
+ nRet = aItem.getFileStatus( aFileStatus );
+ if( nRet == FileBase::E_None )
+ {
+ FileStatus::Type aType = aFileStatus.getFileType();
+ if( isFolder( aType ) )
+ {
+ aRetStr = aPathStr;
+ }
+ else if( aType == FileStatus::Link )
+ {
+ FileStatus aFileStatus2( FileStatusMask_LinkTargetURL );
+ nRet = aItem.getFileStatus( aFileStatus2 );
+ if( nRet == FileBase::E_None )
+ aRetStr = getDirectoryPath( aFileStatus2.getLinkTargetURL() );
+ }
+ }
+ }
+ return aRetStr;
+}
+
+// Function looks for wildcards, removes them and always returns the pure path
+String implSetupWildcard( const String& rFileParam, SbiRTLData* pRTLData )
+{
+ static String aAsterisk = String::CreateFromAscii( "*" );
+ static sal_Char cDelim1 = (sal_Char)'/';
+ static sal_Char cDelim2 = (sal_Char)'\\';
+ static sal_Char cWild1 = '*';
+ static sal_Char cWild2 = '?';
+
+ delete pRTLData->pWildCard;
+ pRTLData->pWildCard = NULL;
+ pRTLData->sFullNameToBeChecked = String();
+
+ String aFileParam = rFileParam;
+ xub_StrLen nLastWild = aFileParam.SearchBackward( cWild1 );
+ if( nLastWild == STRING_NOTFOUND )
+ nLastWild = aFileParam.SearchBackward( cWild2 );
+ sal_Bool bHasWildcards = ( nLastWild != STRING_NOTFOUND );
+
+
+ xub_StrLen nLastDelim = aFileParam.SearchBackward( cDelim1 );
+ if( nLastDelim == STRING_NOTFOUND )
+ nLastDelim = aFileParam.SearchBackward( cDelim2 );
+
+ if( bHasWildcards )
+ {
+ // Wildcards in path?
+ if( nLastDelim != STRING_NOTFOUND && nLastDelim > nLastWild )
+ return aFileParam;
+ }
+ else
+ {
+ String aPathStr = getFullPath( aFileParam );
+ if( nLastDelim != aFileParam.Len() - 1 )
+ pRTLData->sFullNameToBeChecked = aPathStr;
+ return aPathStr;
+ }
+
+ String aPureFileName;
+ if( nLastDelim == STRING_NOTFOUND )
+ {
+ aPureFileName = aFileParam;
+ aFileParam = String();
+ }
+ else
+ {
+ aPureFileName = aFileParam.Copy( nLastDelim + 1 );
+ aFileParam = aFileParam.Copy( 0, nLastDelim );
+ }
+
+ // Try again to get a valid URL/UNC-path with only the path
+ String aPathStr = getFullPath( aFileParam );
+ xub_StrLen nPureLen = aPureFileName.Len();
+
+ // Is there a pure file name left? Otherwise the path is
+ // invalid anyway because it was not accepted by OSL before
+ if( nPureLen && aPureFileName != aAsterisk )
+ {
+ pRTLData->pWildCard = new WildCard( aPureFileName );
+ }
+ return aPathStr;
+}
+
+inline sal_Bool implCheckWildcard( const String& rName, SbiRTLData* pRTLData )
+{
+ sal_Bool bMatch = sal_True;
+
+ if( pRTLData->pWildCard )
+ bMatch = pRTLData->pWildCard->Matches( rName );
+ return bMatch;
+}
+
+
+bool isRootDir( String aDirURLStr )
+{
+ INetURLObject aDirURLObj( aDirURLStr );
+ BOOL bRoot = FALSE;
+
+ // Check if it's a root directory
+ sal_Int32 nCount = aDirURLObj.getSegmentCount();
+
+ // No segment means Unix root directory "file:///"
+ if( nCount == 0 )
+ {
+ bRoot = TRUE;
+ }
+ // Exactly one segment needs further checking, because it
+ // can be Unix "file:///foo/" -> no root
+ // or Windows "file:///c:/" -> root
+ else if( nCount == 1 )
+ {
+ ::rtl::OUString aSeg1 = aDirURLObj.getName( 0, TRUE,
+ INetURLObject::DECODE_WITH_CHARSET );
+ if( aSeg1.getStr()[1] == (sal_Unicode)':' )
+ {
+ bRoot = TRUE;
+ }
+ }
+ // More than one segments can never be root
+ // so bRoot remains FALSE
+
+ return bRoot;
+}
+
+RTLFUNC(Dir)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ String aPath;
+
+ USHORT nParCount = rPar.Count();
+ if( nParCount > 3 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ else
+ {
+ SbiRTLData* pRTLData = pINST->GetRTLData();
+
+ // #34645: Kann auch von der URL-Zeile ueber 'macro: Dir' aufgerufen werden
+ // dann existiert kein pRTLData und die Methode muss verlassen werden
+ if( !pRTLData )
+ return;
+
+ // <-- UCB
+ if( hasUno() )
+ {
+ com::sun::star::uno::Reference< XSimpleFileAccess3 > xSFI = getFileAccess();
+ if( xSFI.is() )
+ {
+ if ( nParCount >= 2 )
+ {
+ String aFileParam = rPar.Get(1)->GetString();
+
+ String aFileURLStr = implSetupWildcard( aFileParam, pRTLData );
+ if( pRTLData->sFullNameToBeChecked.Len() > 0 )
+ {
+ sal_Bool bExists = sal_False;
+ try { bExists = xSFI->exists( aFileURLStr ); }
+ catch( Exception & ) {}
+
+ String aNameOnlyStr;
+ if( bExists )
+ {
+ INetURLObject aFileURL( aFileURLStr );
+ aNameOnlyStr = aFileURL.getName( INetURLObject::LAST_SEGMENT,
+ true, INetURLObject::DECODE_WITH_CHARSET );
+ }
+ rPar.Get(0)->PutString( aNameOnlyStr );
+ return;
+ }
+
+ try
+ {
+ String aDirURLStr;
+ sal_Bool bFolder = xSFI->isFolder( aFileURLStr );
+
+ if( bFolder )
+ {
+ aDirURLStr = aFileURLStr;
+ }
+ else
+ {
+ String aEmptyStr;
+ rPar.Get(0)->PutString( aEmptyStr );
+ }
+
+ USHORT nFlags = 0;
+ if ( nParCount > 2 )
+ pRTLData->nDirFlags = nFlags = rPar.Get(2)->GetInteger();
+ else
+ pRTLData->nDirFlags = 0;
+
+ // Read directory
+ sal_Bool bIncludeFolders = ((nFlags & Sb_ATTR_DIRECTORY) != 0);
+ pRTLData->aDirSeq = xSFI->getFolderContents( aDirURLStr, bIncludeFolders );
+ pRTLData->nCurDirPos = 0;
+
+ // #78651 Add "." and ".." directories for VB compatibility
+ if( bIncludeFolders )
+ {
+ BOOL bRoot = isRootDir( aDirURLStr );
+
+ // If it's no root directory we flag the need for
+ // the "." and ".." directories by the value -2
+ // for the actual position. Later for -2 will be
+ // returned "." and for -1 ".."
+ if( !bRoot )
+ {
+ pRTLData->nCurDirPos = -2;
+ }
+ }
+ }
+ catch( Exception & )
+ {
+ //StarBASIC::Error( ERRCODE_IO_GENERAL );
+ }
+ }
+
+
+ if( pRTLData->aDirSeq.getLength() > 0 )
+ {
+ sal_Bool bFolderFlag = ((pRTLData->nDirFlags & Sb_ATTR_DIRECTORY) != 0);
+
+ SbiInstance* pInst = pINST;
+ bool bCompatibility = ( pInst && pInst->IsCompatibility() );
+ for( ;; )
+ {
+ if( pRTLData->nCurDirPos < 0 )
+ {
+ if( pRTLData->nCurDirPos == -2 )
+ {
+ aPath = ::rtl::OUString::createFromAscii( "." );
+ }
+ else if( pRTLData->nCurDirPos == -1 )
+ {
+ aPath = ::rtl::OUString::createFromAscii( ".." );
+ }
+ pRTLData->nCurDirPos++;
+ }
+ else if( pRTLData->nCurDirPos >= pRTLData->aDirSeq.getLength() )
+ {
+ pRTLData->aDirSeq.realloc( 0 );
+ aPath.Erase();
+ break;
+ }
+ else
+ {
+ ::rtl::OUString aFile = pRTLData->aDirSeq.getConstArray()[pRTLData->nCurDirPos++];
+
+ if( bCompatibility )
+ {
+ if( !bFolderFlag )
+ {
+ sal_Bool bFolder = xSFI->isFolder( aFile );
+ if( bFolder )
+ continue;
+ }
+ }
+ else
+ {
+ // Only directories
+ if( bFolderFlag )
+ {
+ sal_Bool bFolder = xSFI->isFolder( aFile );
+ if( !bFolder )
+ continue;
+ }
+ }
+
+ INetURLObject aURL( aFile );
+ aPath = aURL.getName( INetURLObject::LAST_SEGMENT, TRUE,
+ INetURLObject::DECODE_WITH_CHARSET );
+ }
+
+ sal_Bool bMatch = implCheckWildcard( aPath, pRTLData );
+ if( !bMatch )
+ continue;
+
+ break;
+ }
+ }
+ rPar.Get(0)->PutString( aPath );
+ }
+ }
+ else
+ // --> UCB
+ {
+#ifdef _OLD_FILE_IMPL
+ if ( nParCount >= 2 )
+ {
+ delete pRTLData->pDir;
+ pRTLData->pDir = 0; // wg. Sonderbehandlung Sb_ATTR_VOLUME
+ DirEntry aEntry( rPar.Get(1)->GetString() );
+ FileStat aStat( aEntry );
+ if(!aStat.GetError() && (aStat.GetKind() & FSYS_KIND_FILE))
+ {
+ // ah ja, ist nur ein dateiname
+ // Pfad abschneiden (wg. VB4)
+ rPar.Get(0)->PutString( aEntry.GetName() );
+ return;
+ }
+ USHORT nFlags = 0;
+ if ( nParCount > 2 )
+ pRTLData->nDirFlags = nFlags = rPar.Get(2)->GetInteger();
+ else
+ pRTLData->nDirFlags = 0;
+ // Nur diese Bitmaske ist unter Windows erlaubt
+ #ifdef WIN
+ if( nFlags & ~0x1E )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT ), pRTLData->nDirFlags = 0;
+ #endif
+ // Sb_ATTR_VOLUME wird getrennt gehandelt
+ if( pRTLData->nDirFlags & Sb_ATTR_VOLUME )
+ aPath = aEntry.GetVolume();
+ else
+ {
+ // Die richtige Auswahl treffen
+ USHORT nMode = FSYS_KIND_FILE;
+ if( nFlags & Sb_ATTR_DIRECTORY )
+ nMode |= FSYS_KIND_DIR;
+ if( nFlags == Sb_ATTR_DIRECTORY )
+ nMode = FSYS_KIND_DIR;
+ pRTLData->pDir = new Dir( aEntry, (DirEntryKind) nMode );
+ pRTLData->nCurDirPos = 0;
+ }
+ }
+
+ if( pRTLData->pDir )
+ {
+ for( ;; )
+ {
+ if( pRTLData->nCurDirPos >= pRTLData->pDir->Count() )
+ {
+ delete pRTLData->pDir;
+ pRTLData->pDir = 0;
+ aPath.Erase();
+ break;
+ }
+ DirEntry aNextEntry=(*(pRTLData->pDir))[pRTLData->nCurDirPos++];
+ aPath = aNextEntry.GetName(); //Full();
+ #ifdef WIN
+ aNextEntry.ToAbs();
+ String sFull(aNextEntry.GetFull());
+ unsigned nFlags;
+
+ if (_dos_getfileattr( sFull.GetStr(), &nFlags ))
+ StarBASIC::Error( SbERR_FILE_NOT_FOUND );
+ else
+ {
+ INT16 nCurFlags = pRTLData->nDirFlags;
+ if( (nCurFlags == Sb_ATTR_NORMAL)
+ && !(nFlags & ( _A_HIDDEN | _A_SYSTEM | _A_VOLID | _A_SUBDIR ) ) )
+ break;
+ else if( (nCurFlags & Sb_ATTR_HIDDEN) && (nFlags & _A_HIDDEN) )
+ break;
+ else if( (nCurFlags & Sb_ATTR_SYSTEM) && (nFlags & _A_SYSTEM) )
+ break;
+ else if( (nCurFlags & Sb_ATTR_VOLUME) && (nFlags & _A_VOLID) )
+ break;
+ else if( (nCurFlags & Sb_ATTR_DIRECTORY) && (nFlags & _A_SUBDIR) )
+ break;
+ }
+ #else
+ break;
+ #endif
+ }
+ }
+ rPar.Get(0)->PutString( aPath );
+#else
+ // TODO: OSL
+ if ( nParCount >= 2 )
+ {
+ String aFileParam = rPar.Get(1)->GetString();
+
+ String aDirURL = implSetupWildcard( aFileParam, pRTLData );
+
+ USHORT nFlags = 0;
+ if ( nParCount > 2 )
+ pRTLData->nDirFlags = nFlags = rPar.Get(2)->GetInteger();
+ else
+ pRTLData->nDirFlags = 0;
+
+ // Read directory
+ sal_Bool bIncludeFolders = ((nFlags & Sb_ATTR_DIRECTORY) != 0);
+ pRTLData->pDir = new Directory( aDirURL );
+ FileBase::RC nRet = pRTLData->pDir->open();
+ if( nRet != FileBase::E_None )
+ {
+ delete pRTLData->pDir;
+ pRTLData->pDir = NULL;
+ rPar.Get(0)->PutString( String() );
+ return;
+ }
+
+ // #86950 Add "." and ".." directories for VB compatibility
+ pRTLData->nCurDirPos = 0;
+ if( bIncludeFolders )
+ {
+ BOOL bRoot = isRootDir( aDirURL );
+
+ // If it's no root directory we flag the need for
+ // the "." and ".." directories by the value -2
+ // for the actual position. Later for -2 will be
+ // returned "." and for -1 ".."
+ if( !bRoot )
+ {
+ pRTLData->nCurDirPos = -2;
+ }
+ }
+
+ }
+
+ if( pRTLData->pDir )
+ {
+ sal_Bool bFolderFlag = ((pRTLData->nDirFlags & Sb_ATTR_DIRECTORY) != 0);
+ for( ;; )
+ {
+ if( pRTLData->nCurDirPos < 0 )
+ {
+ if( pRTLData->nCurDirPos == -2 )
+ {
+ aPath = ::rtl::OUString::createFromAscii( "." );
+ }
+ else if( pRTLData->nCurDirPos == -1 )
+ {
+ aPath = ::rtl::OUString::createFromAscii( ".." );
+ }
+ pRTLData->nCurDirPos++;
+ }
+ else
+ {
+ DirectoryItem aItem;
+ FileBase::RC nRet = pRTLData->pDir->getNextItem( aItem );
+ if( nRet != FileBase::E_None )
+ {
+ delete pRTLData->pDir;
+ pRTLData->pDir = NULL;
+ aPath.Erase();
+ break;
+ }
+
+ // Handle flags
+ FileStatus aFileStatus( FileStatusMask_Type | FileStatusMask_FileName );
+ nRet = aItem.getFileStatus( aFileStatus );
+
+ // Only directories?
+ if( bFolderFlag )
+ {
+ FileStatus::Type aType = aFileStatus.getFileType();
+ sal_Bool bFolder = isFolder( aType );
+ if( !bFolder )
+ continue;
+ }
+
+ aPath = aFileStatus.getFileName();
+ }
+
+ sal_Bool bMatch = implCheckWildcard( aPath, pRTLData );
+ if( !bMatch )
+ continue;
+
+ break;
+ }
+ }
+ rPar.Get(0)->PutString( aPath );
+#endif
+ }
+ }
+}
+
+
+RTLFUNC(GetAttr)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() == 2 )
+ {
+ INT16 nFlags = 0;
+
+ // In Windows, We want to use Windows API to get the file attributes
+ // for VBA interoperability.
+ #if defined( WNT )
+ if( SbiRuntime::isVBAEnabled() )
+ {
+ DirEntry aEntry( rPar.Get(1)->GetString() );
+ aEntry.ToAbs();
+
+ // #57064 Bei virtuellen URLs den Real-Path extrahieren
+ ByteString aByteStrFullPath( aEntry.GetFull(), gsl_getSystemTextEncoding() );
+ DWORD nRealFlags = GetFileAttributes (aByteStrFullPath.GetBuffer());
+ if (nRealFlags != 0xffffffff)
+ {
+ if (nRealFlags == FILE_ATTRIBUTE_NORMAL)
+ nRealFlags = 0;
+ nFlags = (INT16) (nRealFlags);
+ }
+ else
+ StarBASIC::Error( SbERR_FILE_NOT_FOUND );
+
+ rPar.Get(0)->PutInteger( nFlags );
+
+ return;
+ }
+ #endif
+
+ // <-- UCB
+ if( hasUno() )
+ {
+ com::sun::star::uno::Reference< XSimpleFileAccess3 > xSFI = getFileAccess();
+ if( xSFI.is() )
+ {
+ try
+ {
+ String aPath = getFullPath( rPar.Get(1)->GetString() );
+ sal_Bool bExists = sal_False;
+ try { bExists = xSFI->exists( aPath ); }
+ catch( Exception & ) {}
+ if( !bExists )
+ {
+ StarBASIC::Error( SbERR_FILE_NOT_FOUND );
+ return;
+ }
+
+ sal_Bool bReadOnly = xSFI->isReadOnly( aPath );
+ sal_Bool bHidden = xSFI->isHidden( aPath );
+ sal_Bool bDirectory = xSFI->isFolder( aPath );
+ if( bReadOnly )
+ nFlags |= 0x0001; // ATTR_READONLY
+ if( bHidden )
+ nFlags |= 0x0002; // ATTR_HIDDEN
+ if( bDirectory )
+ nFlags |= 0x0010; // ATTR_DIRECTORY
+ }
+ catch( Exception & )
+ {
+ StarBASIC::Error( ERRCODE_IO_GENERAL );
+ }
+ }
+ }
+ else
+ // --> UCB
+ {
+ DirectoryItem aItem;
+ FileBase::RC nRet = DirectoryItem::get( getFullPathUNC( rPar.Get(1)->GetString() ), aItem );
+ FileStatus aFileStatus( FileStatusMask_Attributes | FileStatusMask_Type );
+ nRet = aItem.getFileStatus( aFileStatus );
+ sal_uInt64 nAttributes = aFileStatus.getAttributes();
+ sal_Bool bReadOnly = (nAttributes & Attribute_ReadOnly) != 0;
+
+ FileStatus::Type aType = aFileStatus.getFileType();
+ sal_Bool bDirectory = isFolder( aType );
+ if( bReadOnly )
+ nFlags |= 0x0001; // ATTR_READONLY
+ if( bDirectory )
+ nFlags |= 0x0010; // ATTR_DIRECTORY
+ }
+ rPar.Get(0)->PutInteger( nFlags );
+ }
+ else
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+}
+
+
+RTLFUNC(FileDateTime)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() != 2 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ else
+ {
+ // <-- UCB
+ String aPath = rPar.Get(1)->GetString();
+ Time aTime;
+ Date aDate;
+ if( hasUno() )
+ {
+ com::sun::star::uno::Reference< XSimpleFileAccess3 > xSFI = getFileAccess();
+ if( xSFI.is() )
+ {
+ try
+ {
+ com::sun::star::util::DateTime aUnoDT = xSFI->getDateTimeModified( aPath );
+ aTime = Time( aUnoDT.Hours, aUnoDT.Minutes, aUnoDT.Seconds, aUnoDT.HundredthSeconds );
+ aDate = Date( aUnoDT.Day, aUnoDT.Month, aUnoDT.Year );
+ }
+ catch( Exception & )
+ {
+ StarBASIC::Error( ERRCODE_IO_GENERAL );
+ }
+ }
+ }
+ else
+ // --> UCB
+ {
+#ifdef _OLD_FILE_IMPL
+ DirEntry aEntry( aPath );
+ FileStat aStat( aEntry );
+ aTime = Time( aStat.TimeModified() );
+ aDate = Date( aStat.DateModified() );
+#else
+ DirectoryItem aItem;
+ FileBase::RC nRet = DirectoryItem::get( getFullPathUNC( aPath ), aItem );
+ FileStatus aFileStatus( FileStatusMask_ModifyTime );
+ nRet = aItem.getFileStatus( aFileStatus );
+ TimeValue aTimeVal = aFileStatus.getModifyTime();
+ oslDateTime aDT;
+ osl_getDateTimeFromTimeValue( &aTimeVal, &aDT );
+
+ aTime = Time( aDT.Hours, aDT.Minutes, aDT.Seconds, 10000000*aDT.NanoSeconds );
+ aDate = Date( aDT.Day, aDT.Month, aDT.Year );
+#endif
+ }
+
+ double fSerial = (double)GetDayDiff( aDate );
+ long nSeconds = aTime.GetHour();
+ nSeconds *= 3600;
+ nSeconds += aTime.GetMin() * 60;
+ nSeconds += aTime.GetSec();
+ double nDays = ((double)nSeconds) / (double)(24.0*3600.0);
+ fSerial += nDays;
+
+ Color* pCol;
+
+ // #39629 pINST pruefen, kann aus URL-Zeile gerufen werden
+ SvNumberFormatter* pFormatter = NULL;
+ sal_uInt32 nIndex;
+ if( pINST )
+ {
+ pFormatter = pINST->GetNumberFormatter();
+ nIndex = pINST->GetStdDateTimeIdx();
+ }
+ else
+ {
+ sal_uInt32 n; // Dummy
+ SbiInstance::PrepareNumberFormatter( pFormatter, n, n, nIndex );
+ }
+
+ String aRes;
+ pFormatter->GetOutputString( fSerial, nIndex, aRes, &pCol );
+ rPar.Get(0)->PutString( aRes );
+
+ // #39629 pFormatter kann selbst angefordert sein
+ if( !pINST )
+ delete pFormatter;
+ }
+}
+
+
+RTLFUNC(EOF)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ // AB 08/16/2000: No changes for UCB
+ if ( rPar.Count() != 2 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ else
+ {
+ INT16 nChannel = rPar.Get(1)->GetInteger();
+ // nChannel--; // macht MD beim Oeffnen auch nicht
+ SbiIoSystem* pIO = pINST->GetIoSystem();
+ SbiStream* pSbStrm = pIO->GetStream( nChannel );
+ if ( !pSbStrm )
+ {
+ StarBASIC::Error( SbERR_BAD_CHANNEL );
+ return;
+ }
+ BOOL bIsEof;
+ SvStream* pSvStrm = pSbStrm->GetStrm();
+ if ( pSbStrm->IsText() )
+ {
+ char cBla;
+ (*pSvStrm) >> cBla; // koennen wir noch ein Zeichen lesen
+ bIsEof = pSvStrm->IsEof();
+ if ( !bIsEof )
+ pSvStrm->SeekRel( -1 );
+ }
+ else
+ bIsEof = pSvStrm->IsEof(); // fuer binaerdateien!
+ rPar.Get(0)->PutBool( bIsEof );
+ }
+}
+
+RTLFUNC(FileAttr)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ // AB 08/16/2000: No changes for UCB
+
+ // #57064 Obwohl diese Funktion nicht mit DirEntry arbeitet, ist sie von
+ // der Anpassung an virtuelle URLs nich betroffen, da sie nur auf bereits
+ // geoeffneten Dateien arbeitet und der Name hier keine Rolle spielt.
+
+ if ( rPar.Count() != 3 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ else
+ {
+ INT16 nChannel = rPar.Get(1)->GetInteger();
+// nChannel--;
+ SbiIoSystem* pIO = pINST->GetIoSystem();
+ SbiStream* pSbStrm = pIO->GetStream( nChannel );
+ if ( !pSbStrm )
+ {
+ StarBASIC::Error( SbERR_BAD_CHANNEL );
+ return;
+ }
+ INT16 nRet;
+ if ( rPar.Get(2)->GetInteger() == 1 )
+ nRet = (INT16)(pSbStrm->GetMode());
+ else
+ nRet = 0; // System file handle not supported
+
+ rPar.Get(0)->PutInteger( nRet );
+ }
+}
+RTLFUNC(Loc)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ // AB 08/16/2000: No changes for UCB
+ if ( rPar.Count() != 2 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ else
+ {
+ INT16 nChannel = rPar.Get(1)->GetInteger();
+ SbiIoSystem* pIO = pINST->GetIoSystem();
+ SbiStream* pSbStrm = pIO->GetStream( nChannel );
+ if ( !pSbStrm )
+ {
+ StarBASIC::Error( SbERR_BAD_CHANNEL );
+ return;
+ }
+ SvStream* pSvStrm = pSbStrm->GetStrm();
+ ULONG nPos;
+ if( pSbStrm->IsRandom())
+ {
+ short nBlockLen = pSbStrm->GetBlockLen();
+ nPos = nBlockLen ? (pSvStrm->Tell() / nBlockLen) : 0;
+ nPos++; // Blockpositionen beginnen bei 1
+ }
+ else if ( pSbStrm->IsText() )
+ nPos = pSbStrm->GetLine();
+ else if( pSbStrm->IsBinary() )
+ nPos = pSvStrm->Tell();
+ else if ( pSbStrm->IsSeq() )
+ nPos = ( pSvStrm->Tell()+1 ) / 128;
+ else
+ nPos = pSvStrm->Tell();
+ rPar.Get(0)->PutLong( (INT32)nPos );
+ }
+}
+
+RTLFUNC(Lof)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ // AB 08/16/2000: No changes for UCB
+ if ( rPar.Count() != 2 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ else
+ {
+ INT16 nChannel = rPar.Get(1)->GetInteger();
+ SbiIoSystem* pIO = pINST->GetIoSystem();
+ SbiStream* pSbStrm = pIO->GetStream( nChannel );
+ if ( !pSbStrm )
+ {
+ StarBASIC::Error( SbERR_BAD_CHANNEL );
+ return;
+ }
+ SvStream* pSvStrm = pSbStrm->GetStrm();
+ ULONG nOldPos = pSvStrm->Tell();
+ ULONG nLen = pSvStrm->Seek( STREAM_SEEK_TO_END );
+ pSvStrm->Seek( nOldPos );
+ rPar.Get(0)->PutLong( (INT32)nLen );
+ }
+}
+
+
+RTLFUNC(Seek)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ // AB 08/16/2000: No changes for UCB
+ int nArgs = (int)rPar.Count();
+ if ( nArgs < 2 || nArgs > 3 )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+ INT16 nChannel = rPar.Get(1)->GetInteger();
+// nChannel--;
+ SbiIoSystem* pIO = pINST->GetIoSystem();
+ SbiStream* pSbStrm = pIO->GetStream( nChannel );
+ if ( !pSbStrm )
+ {
+ StarBASIC::Error( SbERR_BAD_CHANNEL );
+ return;
+ }
+ SvStream* pStrm = pSbStrm->GetStrm();
+
+ if ( nArgs == 2 ) // Seek-Function
+ {
+ ULONG nPos = pStrm->Tell();
+ if( pSbStrm->IsRandom() )
+ nPos = nPos / pSbStrm->GetBlockLen();
+ nPos++; // Basic zaehlt ab 1
+ rPar.Get(0)->PutLong( (INT32)nPos );
+ }
+ else // Seek-Statement
+ {
+ INT32 nPos = rPar.Get(2)->GetLong();
+ if ( nPos < 1 )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+ nPos--; // Basic zaehlt ab 1, SvStreams zaehlen ab 0
+ pSbStrm->SetExpandOnWriteTo( 0 );
+ if ( pSbStrm->IsRandom() )
+ nPos *= pSbStrm->GetBlockLen();
+ pStrm->Seek( (ULONG)nPos );
+ pSbStrm->SetExpandOnWriteTo( nPos );
+ }
+}
+
+RTLFUNC(Format)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ USHORT nArgCount = (USHORT)rPar.Count();
+ if ( nArgCount < 2 || nArgCount > 3 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ else
+ {
+ String aResult;
+ if( nArgCount == 2 )
+ rPar.Get(1)->Format( aResult );
+ else
+ {
+ String aFmt( rPar.Get(2)->GetString() );
+ rPar.Get(1)->Format( aResult, &aFmt );
+ }
+ rPar.Get(0)->PutString( aResult );
+ }
+}
+
+RTLFUNC(Randomize)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() > 2 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ INT16 nSeed;
+ if( rPar.Count() == 2 )
+ nSeed = (INT16)rPar.Get(1)->GetInteger();
+ else
+ nSeed = (INT16)rand();
+ srand( nSeed );
+}
+
+RTLFUNC(Rnd)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() > 2 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ else
+ {
+ double nRand = (double)rand();
+ nRand = ( nRand / (double)RAND_MAX );
+ rPar.Get(0)->PutDouble( nRand );
+ }
+}
+
+
+//
+// Syntax: Shell("Path",[ Window-Style,[ "Params", [ bSync = FALSE ]]])
+//
+// WindowStyles (VBA-kompatibel):
+// 2 == Minimized
+// 3 == Maximized
+// 10 == Full-Screen (Textmodus-Anwendungen OS/2, WIN95, WNT)
+//
+// !!!HACK der WindowStyle wird im Creator an Application::StartApp
+// uebergeben. Format: "xxxx2"
+//
+
+
+RTLFUNC(Shell)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ // No shell command for "virtual" portal users
+ if( needSecurityRestrictions() )
+ {
+ StarBASIC::Error(SbERR_NOT_IMPLEMENTED);
+ return;
+ }
+
+ ULONG nArgCount = rPar.Count();
+ if ( nArgCount < 2 || nArgCount > 5 )
+ {
+ rPar.Get(0)->PutLong(0);
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ }
+ else
+ {
+ USHORT nOptions = NAMESPACE_VOS(OProcess)::TOption_SearchPath|
+ NAMESPACE_VOS(OProcess)::TOption_Detached;
+ String aCmdLine = rPar.Get(1)->GetString();
+ // Zusaetzliche Parameter anhaengen, es muss eh alles geparsed werden
+ if( nArgCount >= 4 )
+ {
+ aCmdLine.AppendAscii( " " );
+ aCmdLine += rPar.Get(3)->GetString();
+ }
+ else if( !aCmdLine.Len() )
+ {
+ // Spezial-Behandlung (leere Liste) vermeiden
+ aCmdLine.AppendAscii( " " );
+ }
+ USHORT nLen = aCmdLine.Len();
+
+ // #55735 Wenn Parameter dabei sind, muessen die abgetrennt werden
+ // #72471 Auch die einzelnen Parameter trennen
+ std::list<String> aTokenList;
+ String aToken;
+ USHORT i = 0;
+ sal_Unicode c;
+ while( i < nLen )
+ {
+ // Spaces weg
+ for ( ;; ++i )
+ {
+ c = aCmdLine.GetBuffer()[ i ];
+ if ( c != ' ' && c != '\t' )
+ break;
+ }
+
+ if( c == '\"' || c == '\'' )
+ {
+ USHORT iFoundPos = aCmdLine.Search( c, i + 1 );
+
+ // Wenn nichts gefunden wurde, Rest kopieren
+ if( iFoundPos == STRING_NOTFOUND )
+ {
+ aToken = aCmdLine.Copy( i, STRING_LEN );
+ i = nLen;
+ }
+ else
+ {
+ aToken = aCmdLine.Copy( i + 1, (iFoundPos - i - 1) );
+ i = iFoundPos + 1;
+ }
+ }
+ else
+ {
+ USHORT iFoundSpacePos = aCmdLine.Search( ' ', i );
+ USHORT iFoundTabPos = aCmdLine.Search( '\t', i );
+ USHORT iFoundPos = Min( iFoundSpacePos, iFoundTabPos );
+
+ // Wenn nichts gefunden wurde, Rest kopieren
+ if( iFoundPos == STRING_NOTFOUND )
+ {
+ aToken = aCmdLine.Copy( i, STRING_LEN );
+ i = nLen;
+ }
+ else
+ {
+ aToken = aCmdLine.Copy( i, (iFoundPos - i) );
+ i = iFoundPos;
+ }
+ }
+
+ // In die Liste uebernehmen
+ aTokenList.push_back( aToken );
+ }
+ // #55735 / #72471 Ende
+
+ INT16 nWinStyle = 0;
+ if( nArgCount >= 3 )
+ {
+ nWinStyle = rPar.Get(2)->GetInteger();
+ switch( nWinStyle )
+ {
+ case 2:
+ nOptions |= NAMESPACE_VOS(OProcess)::TOption_Minimized;
+ break;
+ case 3:
+ nOptions |= NAMESPACE_VOS(OProcess)::TOption_Maximized;
+ break;
+ case 10:
+ nOptions |= NAMESPACE_VOS(OProcess)::TOption_FullScreen;
+ break;
+ }
+
+ BOOL bSync = FALSE;
+ if( nArgCount >= 5 )
+ bSync = rPar.Get(4)->GetBool();
+ if( bSync )
+ nOptions |= NAMESPACE_VOS(OProcess)::TOption_Wait;
+ }
+ NAMESPACE_VOS(OProcess)::TProcessOption eOptions =
+ (NAMESPACE_VOS(OProcess)::TProcessOption)nOptions;
+
+
+ // #72471 Parameter aufbereiten
+ std::list<String>::const_iterator iter = aTokenList.begin();
+ const String& rStr = *iter;
+ ::rtl::OUString aOUStrProg( rStr.GetBuffer(), rStr.Len() );
+ String aOUStrProgUNC = getFullPathUNC( aOUStrProg );
+
+ iter++;
+
+ USHORT nParamCount = sal::static_int_cast< USHORT >(
+ aTokenList.size() - 1 );
+ ::rtl::OUString* pArgumentList = NULL;
+ //const char** pParamList = NULL;
+ if( nParamCount )
+ {
+ pArgumentList = new ::rtl::OUString[ nParamCount ];
+ //pParamList = new const char*[ nParamCount ];
+ USHORT iList = 0;
+ while( iter != aTokenList.end() )
+ {
+ const String& rParamStr = (*iter);
+ pArgumentList[iList++] = ::rtl::OUString( rParamStr.GetBuffer(), rParamStr.Len() );
+ //pParamList[iList++] = (*iter).GetStr();
+ iter++;
+ }
+ }
+
+ //const char* pParams = aParams.Len() ? aParams.GetStr() : 0;
+ NAMESPACE_VOS(OProcess)* pApp;
+ pApp = new NAMESPACE_VOS(OProcess)( aOUStrProgUNC );
+ BOOL bSucc;
+ if( nParamCount == 0 )
+ {
+ bSucc = pApp->execute( eOptions ) == NAMESPACE_VOS(OProcess)::E_None;
+ }
+ else
+ {
+ NAMESPACE_VOS(OArgumentList) aArgList( pArgumentList, nParamCount );
+ bSucc = pApp->execute( eOptions, aArgList ) == NAMESPACE_VOS(OProcess)::E_None;
+ }
+
+ /*
+ if( nParamCount == 0 )
+ pApp = new NAMESPACE_VOS(OProcess)( pProg );
+ else
+ pApp = new NAMESPACE_VOS(OProcess)( pProg, pParamList, nParamCount );
+ BOOL bSucc = pApp->execute( eOptions ) == NAMESPACE_VOS(OProcess)::E_None;
+ */
+
+ delete pApp;
+ delete[] pArgumentList;
+ if( !bSucc )
+ StarBASIC::Error( SbERR_FILE_NOT_FOUND );
+ else
+ rPar.Get(0)->PutLong( 0 );
+ }
+}
+
+RTLFUNC(VarType)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() != 2 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ else
+ {
+ SbxDataType eType = rPar.Get(1)->GetType();
+ rPar.Get(0)->PutInteger( (INT16)eType );
+ }
+}
+
+// Exported function
+String getBasicTypeName( SbxDataType eType )
+{
+ static const char* pTypeNames[] =
+ {
+ "Empty", // SbxEMPTY
+ "Null", // SbxNULL
+ "Integer", // SbxINTEGER
+ "Long", // SbxLONG
+ "Single", // SbxSINGLE
+ "Double", // SbxDOUBLE
+ "Currency", // SbxCURRENCY
+ "Date", // SbxDATE
+ "String", // SbxSTRING
+ "Object", // SbxOBJECT
+ "Error", // SbxERROR
+ "Boolean", // SbxBOOL
+ "Variant", // SbxVARIANT
+ "DataObject", // SbxDATAOBJECT
+ "Unknown Type", //
+ "Unknown Type", //
+ "Char", // SbxCHAR
+ "Byte", // SbxBYTE
+ "UShort", // SbxUSHORT
+ "ULong", // SbxULONG
+ "Long64", // SbxLONG64
+ "ULong64", // SbxULONG64
+ "Int", // SbxINT
+ "UInt", // SbxUINT
+ "Void", // SbxVOID
+ "HResult", // SbxHRESULT
+ "Pointer", // SbxPOINTER
+ "DimArray", // SbxDIMARRAY
+ "CArray", // SbxCARRAY
+ "Userdef", // SbxUSERDEF
+ "Lpstr", // SbxLPSTR
+ "Lpwstr", // SbxLPWSTR
+ "Unknown Type", // SbxCoreSTRING
+ "WString", // SbxWSTRING
+ "WChar", // SbxWCHAR
+ "Int64", // SbxSALINT64
+ "UInt64", // SbxSALUINT64
+ "Decimal", // SbxDECIMAL
+ };
+
+ int nPos = ((int)eType) & 0x0FFF;
+ USHORT nTypeNameCount = sizeof( pTypeNames ) / sizeof( char* );
+ if ( nPos < 0 || nPos >= nTypeNameCount )
+ nPos = nTypeNameCount - 1;
+ String aRetStr = String::CreateFromAscii( pTypeNames[nPos] );
+ return aRetStr;
+}
+
+RTLFUNC(TypeName)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() != 2 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ else
+ {
+ SbxDataType eType = rPar.Get(1)->GetType();
+ BOOL bIsArray = ( ( eType & SbxARRAY ) != 0 );
+ String aRetStr = getBasicTypeName( eType );
+ if( bIsArray )
+ aRetStr.AppendAscii( "()" );
+ rPar.Get(0)->PutString( aRetStr );
+ }
+}
+
+RTLFUNC(Len)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() != 2 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ else
+ {
+ const String& rStr = rPar.Get(1)->GetString();
+ rPar.Get(0)->PutLong( (INT32)rStr.Len() );
+ }
+}
+
+RTLFUNC(DDEInitiate)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ // No DDE for "virtual" portal users
+ if( needSecurityRestrictions() )
+ {
+ StarBASIC::Error(SbERR_NOT_IMPLEMENTED);
+ return;
+ }
+
+ int nArgs = (int)rPar.Count();
+ if ( nArgs != 3 )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+ const String& rApp = rPar.Get(1)->GetString();
+ const String& rTopic = rPar.Get(2)->GetString();
+
+ SbiDdeControl* pDDE = pINST->GetDdeControl();
+ INT16 nChannel;
+ SbError nDdeErr = pDDE->Initiate( rApp, rTopic, nChannel );
+ if( nDdeErr )
+ StarBASIC::Error( nDdeErr );
+ else
+ rPar.Get(0)->PutInteger( nChannel );
+}
+
+RTLFUNC(DDETerminate)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ // No DDE for "virtual" portal users
+ if( needSecurityRestrictions() )
+ {
+ StarBASIC::Error(SbERR_NOT_IMPLEMENTED);
+ return;
+ }
+
+ rPar.Get(0)->PutEmpty();
+ int nArgs = (int)rPar.Count();
+ if ( nArgs != 2 )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+ INT16 nChannel = rPar.Get(1)->GetInteger();
+ SbiDdeControl* pDDE = pINST->GetDdeControl();
+ SbError nDdeErr = pDDE->Terminate( nChannel );
+ if( nDdeErr )
+ StarBASIC::Error( nDdeErr );
+}
+
+RTLFUNC(DDETerminateAll)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ // No DDE for "virtual" portal users
+ if( needSecurityRestrictions() )
+ {
+ StarBASIC::Error(SbERR_NOT_IMPLEMENTED);
+ return;
+ }
+
+ rPar.Get(0)->PutEmpty();
+ int nArgs = (int)rPar.Count();
+ if ( nArgs != 1 )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+
+ SbiDdeControl* pDDE = pINST->GetDdeControl();
+ SbError nDdeErr = pDDE->TerminateAll();
+ if( nDdeErr )
+ StarBASIC::Error( nDdeErr );
+
+}
+
+RTLFUNC(DDERequest)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ // No DDE for "virtual" portal users
+ if( needSecurityRestrictions() )
+ {
+ StarBASIC::Error(SbERR_NOT_IMPLEMENTED);
+ return;
+ }
+
+ int nArgs = (int)rPar.Count();
+ if ( nArgs != 3 )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+ INT16 nChannel = rPar.Get(1)->GetInteger();
+ const String& rItem = rPar.Get(2)->GetString();
+ SbiDdeControl* pDDE = pINST->GetDdeControl();
+ String aResult;
+ SbError nDdeErr = pDDE->Request( nChannel, rItem, aResult );
+ if( nDdeErr )
+ StarBASIC::Error( nDdeErr );
+ else
+ rPar.Get(0)->PutString( aResult );
+}
+
+RTLFUNC(DDEExecute)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ // No DDE for "virtual" portal users
+ if( needSecurityRestrictions() )
+ {
+ StarBASIC::Error(SbERR_NOT_IMPLEMENTED);
+ return;
+ }
+
+ rPar.Get(0)->PutEmpty();
+ int nArgs = (int)rPar.Count();
+ if ( nArgs != 3 )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+ INT16 nChannel = rPar.Get(1)->GetInteger();
+ const String& rCommand = rPar.Get(2)->GetString();
+ SbiDdeControl* pDDE = pINST->GetDdeControl();
+ SbError nDdeErr = pDDE->Execute( nChannel, rCommand );
+ if( nDdeErr )
+ StarBASIC::Error( nDdeErr );
+}
+
+RTLFUNC(DDEPoke)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ // No DDE for "virtual" portal users
+ if( needSecurityRestrictions() )
+ {
+ StarBASIC::Error(SbERR_NOT_IMPLEMENTED);
+ return;
+ }
+
+ rPar.Get(0)->PutEmpty();
+ int nArgs = (int)rPar.Count();
+ if ( nArgs != 4 )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+ INT16 nChannel = rPar.Get(1)->GetInteger();
+ const String& rItem = rPar.Get(2)->GetString();
+ const String& rData = rPar.Get(3)->GetString();
+ SbiDdeControl* pDDE = pINST->GetDdeControl();
+ SbError nDdeErr = pDDE->Poke( nChannel, rItem, rData );
+ if( nDdeErr )
+ StarBASIC::Error( nDdeErr );
+}
+
+
+RTLFUNC(FreeFile)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() != 1 )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+ SbiIoSystem* pIO = pINST->GetIoSystem();
+ short nChannel = 1;
+ while( nChannel < CHANNELS )
+ {
+ SbiStream* pStrm = pIO->GetStream( nChannel );
+ if( !pStrm )
+ {
+ rPar.Get(0)->PutInteger( nChannel );
+ return;
+ }
+ nChannel++;
+ }
+ StarBASIC::Error( SbERR_TOO_MANY_FILES );
+}
+
+RTLFUNC(LBound)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ USHORT nParCount = rPar.Count();
+ if ( nParCount != 3 && nParCount != 2 )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+ SbxBase* pParObj = rPar.Get(1)->GetObject();
+ SbxDimArray* pArr = PTR_CAST(SbxDimArray,pParObj);
+ if( pArr )
+ {
+ INT32 nLower, nUpper;
+ short nDim = (nParCount == 3) ? (short)rPar.Get(2)->GetInteger() : 1;
+ if( !pArr->GetDim32( nDim, nLower, nUpper ) )
+ StarBASIC::Error( SbERR_OUT_OF_RANGE );
+ else
+ rPar.Get(0)->PutLong( nLower );
+ }
+ else
+ StarBASIC::Error( SbERR_MUST_HAVE_DIMS );
+}
+
+RTLFUNC(UBound)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ USHORT nParCount = rPar.Count();
+ if ( nParCount != 3 && nParCount != 2 )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+
+ SbxBase* pParObj = rPar.Get(1)->GetObject();
+ SbxDimArray* pArr = PTR_CAST(SbxDimArray,pParObj);
+ if( pArr )
+ {
+ INT32 nLower, nUpper;
+ short nDim = (nParCount == 3) ? (short)rPar.Get(2)->GetInteger() : 1;
+ if( !pArr->GetDim32( nDim, nLower, nUpper ) )
+ StarBASIC::Error( SbERR_OUT_OF_RANGE );
+ else
+ rPar.Get(0)->PutLong( nUpper );
+ }
+ else
+ StarBASIC::Error( SbERR_MUST_HAVE_DIMS );
+}
+
+RTLFUNC(RGB)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() != 4 )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+
+ ULONG nRed = rPar.Get(1)->GetInteger() & 0xFF;
+ ULONG nGreen = rPar.Get(2)->GetInteger() & 0xFF;
+ ULONG nBlue = rPar.Get(3)->GetInteger() & 0xFF;
+ ULONG nRGB;
+
+ SbiInstance* pInst = pINST;
+ bool bCompatibility = ( pInst && pInst->IsCompatibility() );
+ if( bCompatibility )
+ {
+ nRGB = (nBlue << 16) | (nGreen << 8) | nRed;
+ }
+ else
+ {
+ nRGB = (nRed << 16) | (nGreen << 8) | nBlue;
+ }
+ rPar.Get(0)->PutLong( nRGB );
+}
+
+RTLFUNC(QBColor)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ static const INT32 pRGB[] =
+ {
+ 0x000000,
+ 0x800000,
+ 0x008000,
+ 0x808000,
+ 0x000080,
+ 0x800080,
+ 0x008080,
+ 0xC0C0C0,
+ 0x808080,
+ 0xFF0000,
+ 0x00FF00,
+ 0xFFFF00,
+ 0x0000FF,
+ 0xFF00FF,
+ 0x00FFFF,
+ 0xFFFFFF,
+ };
+
+ if ( rPar.Count() != 2 )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+
+ INT16 nCol = rPar.Get(1)->GetInteger();
+ if( nCol < 0 || nCol > 15 )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+ INT32 nRGB = pRGB[ nCol ];
+ rPar.Get(0)->PutLong( nRGB );
+}
+
+// StrConv(string, conversion, LCID)
+RTLFUNC(StrConv)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ ULONG nArgCount = rPar.Count()-1;
+ if( nArgCount < 2 || nArgCount > 3 )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+
+ String aOldStr = rPar.Get(1)->GetString();
+ INT32 nConversion = rPar.Get(2)->GetLong();
+
+ USHORT nLanguage = LANGUAGE_SYSTEM;
+ if( nArgCount == 3 )
+ {
+ // LCID not supported now
+ //nLanguage = rPar.Get(3)->GetInteger();
+ }
+
+ USHORT nOldLen = aOldStr.Len();
+ if( nOldLen == 0 )
+ {
+ // null string,return
+ rPar.Get(0)->PutString(aOldStr);
+ return;
+ }
+
+ INT32 nType = 0;
+ if ( (nConversion & 0x03) == 3 ) // vbProperCase
+ {
+ CharClass& rCharClass = GetCharClass();
+ aOldStr = rCharClass.toTitle( aOldStr.ToLowerAscii(), 0, nOldLen );
+ }
+ else if ( (nConversion & 0x01) == 1 ) // vbUpperCase
+ nType |= ::com::sun::star::i18n::TransliterationModules_LOWERCASE_UPPERCASE;
+ else if ( (nConversion & 0x02) == 2 ) // vbLowerCase
+ nType |= ::com::sun::star::i18n::TransliterationModules_UPPERCASE_LOWERCASE;
+
+ if ( (nConversion & 0x04) == 4 ) // vbWide
+ nType |= ::com::sun::star::i18n::TransliterationModules_HALFWIDTH_FULLWIDTH;
+ else if ( (nConversion & 0x08) == 8 ) // vbNarrow
+ nType |= ::com::sun::star::i18n::TransliterationModules_FULLWIDTH_HALFWIDTH;
+
+ if ( (nConversion & 0x10) == 16) // vbKatakana
+ nType |= ::com::sun::star::i18n::TransliterationModules_HIRAGANA_KATAKANA;
+ else if ( (nConversion & 0x20) == 32 ) // vbHiragana
+ nType |= ::com::sun::star::i18n::TransliterationModules_KATAKANA_HIRAGANA;
+
+ String aNewStr( aOldStr );
+ if( nType != 0 )
+ {
+ com::sun::star::uno::Reference< XMultiServiceFactory > xSMgr = getProcessServiceFactory();
+ ::utl::TransliterationWrapper aTransliterationWrapper( xSMgr,nType );
+ com::sun::star::uno::Sequence<sal_Int32> aOffsets;
+ aTransliterationWrapper.loadModuleIfNeeded( nLanguage );
+ aNewStr = aTransliterationWrapper.transliterate( aOldStr, nLanguage, 0, nOldLen, &aOffsets );
+ }
+
+ if ( (nConversion & 0x40) == 64 ) // vbUnicode
+ {
+ // convert the string to byte string, preserving unicode (2 bytes per character)
+ USHORT nSize = aNewStr.Len()*2;
+ const sal_Unicode* pSrc = aNewStr.GetBuffer();
+ sal_Char* pChar = new sal_Char[nSize+1];
+ for( USHORT i=0; i < nSize; i++ )
+ {
+ pChar[i] = static_cast< sal_Char >( i%2 ? ((*pSrc) >> 8) & 0xff : (*pSrc) & 0xff );
+ if( i%2 )
+ pSrc++;
+ }
+ pChar[nSize] = '\0';
+ ::rtl::OString aOStr(pChar);
+
+ // there is no concept about default codepage in unix. so it is incorrectly in unix
+ ::rtl::OUString aOUStr = ::rtl::OStringToOUString(aOStr, osl_getThreadTextEncoding());
+ aNewStr = String(aOUStr);
+ rPar.Get(0)->PutString( aNewStr );
+ return;
+ }
+ else if ( (nConversion & 0x80) == 128 ) // vbFromUnicode
+ {
+ ::rtl::OUString aOUStr(aNewStr);
+ // there is no concept about default codepage in unix. so it is incorrectly in unix
+ ::rtl::OString aOStr = ::rtl::OUStringToOString(aNewStr,osl_getThreadTextEncoding());
+ const sal_Char* pChar = aOStr.getStr();
+ USHORT nArraySize = static_cast< USHORT >( aOStr.getLength() );
+ SbxDimArray* pArray = new SbxDimArray(SbxBYTE);
+ bool bIncIndex = (IsBaseIndexOne() && SbiRuntime::isVBAEnabled() );
+ if(nArraySize)
+ {
+ if( bIncIndex )
+ pArray->AddDim( 1, nArraySize );
+ else
+ pArray->AddDim( 0, nArraySize-1 );
+ }
+ else
+ {
+ pArray->unoAddDim( 0, -1 );
+ }
+
+ for( USHORT i=0; i< nArraySize; i++)
+ {
+ SbxVariable* pNew = new SbxVariable( SbxBYTE );
+ pNew->PutByte(*pChar);
+ pChar++;
+ pNew->SetFlag( SBX_WRITE );
+ short index = i;
+ if( bIncIndex )
+ ++index;
+ pArray->Put( pNew, &index );
+ }
+
+ SbxVariableRef refVar = rPar.Get(0);
+ USHORT nFlags = refVar->GetFlags();
+ refVar->ResetFlag( SBX_FIXED );
+ refVar->PutObject( pArray );
+ refVar->SetFlags( nFlags );
+ refVar->SetParameters( NULL );
+ return;
+ }
+
+ rPar.Get(0)->PutString(aNewStr);
+}
+
+
+RTLFUNC(Beep)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() != 1 )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+ Sound::Beep();
+}
+
+RTLFUNC(Load)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if( rPar.Count() != 2 )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+
+ // Diesen Call einfach an das Object weiterreichen
+ SbxBase* pObj = (SbxObject*)rPar.Get(1)->GetObject();
+ if ( pObj )
+ {
+ if( pObj->IsA( TYPE( SbUserFormModule ) ) )
+ {
+ ((SbUserFormModule*)pObj)->Load();
+ }
+ else if( pObj->IsA( TYPE( SbxObject ) ) )
+ {
+ SbxVariable* pVar = ((SbxObject*)pObj)->
+ Find( String( RTL_CONSTASCII_USTRINGPARAM("Load") ), SbxCLASS_METHOD );
+ if( pVar )
+ pVar->GetInteger();
+ }
+ }
+}
+
+RTLFUNC(Unload)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutEmpty();
+ if( rPar.Count() != 2 )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+
+ // Diesen Call einfach an das Object weitereichen
+ SbxBase* pObj = (SbxObject*)rPar.Get(1)->GetObject();
+ if ( pObj )
+ {
+ if( pObj->IsA( TYPE( SbUserFormModule ) ) )
+ {
+ SbUserFormModule* pFormModule = ( SbUserFormModule* )pObj;
+ pFormModule->Unload();
+ }
+ else if( pObj->IsA( TYPE( SbxObject ) ) )
+ {
+ SbxVariable* pVar = ((SbxObject*)pObj)->
+ Find( String( RTL_CONSTASCII_USTRINGPARAM("Unload") ), SbxCLASS_METHOD );
+ if( pVar )
+ pVar->GetInteger();
+ }
+ }
+}
+
+RTLFUNC(LoadPicture)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if( rPar.Count() != 2 )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+
+ String aFileURL = getFullPath( rPar.Get(1)->GetString() );
+ SvStream* pStream = utl::UcbStreamHelper::CreateStream( aFileURL, STREAM_READ );
+ if( pStream != NULL )
+ {
+ Bitmap aBmp;
+ *pStream >> aBmp;
+ Graphic aGraphic( aBmp );
+
+ SbxObjectRef xRef = new SbStdPicture;
+ ((SbStdPicture*)(SbxObject*)xRef)->SetGraphic( aGraphic );
+ rPar.Get(0)->PutObject( xRef );
+ }
+ delete pStream;
+}
+
+RTLFUNC(SavePicture)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutEmpty();
+ if( rPar.Count() != 3 )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+
+ SbxBase* pObj = (SbxObject*)rPar.Get(1)->GetObject();
+ if( pObj->IsA( TYPE( SbStdPicture ) ) )
+ {
+ SvFileStream aOStream( rPar.Get(2)->GetString(), STREAM_WRITE | STREAM_TRUNC );
+ Graphic aGraphic = ((SbStdPicture*)pObj)->GetGraphic();
+ aOStream << aGraphic;
+ }
+}
+
+
+//-----------------------------------------------------------------------------------------
+
+RTLFUNC(AboutStarBasic)
+{
+ (void)pBasic;
+ (void)bWrite;
+ (void)rPar;
+}
+
+RTLFUNC(MsgBox)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ static const WinBits nStyleMap[] =
+ {
+ WB_OK, // MB_OK
+ WB_OK_CANCEL, // MB_OKCANCEL
+ WB_ABORT_RETRY_IGNORE, // MB_ABORTRETRYIGNORE
+ WB_YES_NO_CANCEL, // MB_YESNOCANCEL
+ WB_YES_NO, // MB_YESNO
+ WB_RETRY_CANCEL // MB_RETRYCANCEL
+ };
+ static const INT16 nButtonMap[] =
+ {
+ 2, // #define RET_CANCEL FALSE
+ 1, // #define RET_OK TRUE
+ 6, // #define RET_YES 2
+ 7, // #define RET_NO 3
+ 4 // #define RET_RETRY 4
+ };
+
+
+ USHORT nArgCount = (USHORT)rPar.Count();
+ if( nArgCount < 2 || nArgCount > 6 )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+ WinBits nWinBits;
+ WinBits nType = 0; // MB_OK
+ if( nArgCount >= 3 )
+ nType = (WinBits)rPar.Get(2)->GetInteger();
+ WinBits nStyle = nType;
+ nStyle &= 15; // Bits 4-16 loeschen
+ if( nStyle > 5 )
+ nStyle = 0;
+
+ nWinBits = nStyleMap[ nStyle ];
+
+ WinBits nWinDefBits;
+ nWinDefBits = (WB_DEF_OK | WB_DEF_RETRY | WB_DEF_YES);
+ if( nType & 256 )
+ {
+ if( nStyle == 5 )
+ nWinDefBits = WB_DEF_CANCEL;
+ else if( nStyle == 2 )
+ nWinDefBits = WB_DEF_RETRY;
+ else
+ nWinDefBits = (WB_DEF_CANCEL | WB_DEF_RETRY | WB_DEF_NO);
+ }
+ else if( nType & 512 )
+ {
+ if( nStyle == 2)
+ nWinDefBits = WB_DEF_IGNORE;
+ else
+ nWinDefBits = WB_DEF_CANCEL;
+ }
+ else if( nStyle == 2)
+ nWinDefBits = WB_DEF_CANCEL;
+ nWinBits |= nWinDefBits;
+
+ String aMsg = rPar.Get(1)->GetString();
+ String aTitle;
+ if( nArgCount >= 4 )
+ aTitle = rPar.Get(3)->GetString();
+ else
+ aTitle = GetpApp()->GetAppName();
+
+ nType &= (16+32+64);
+ MessBox* pBox = 0;
+ Window* pParent = GetpApp()->GetDefDialogParent();
+ switch( nType )
+ {
+ case 16:
+ pBox = new ErrorBox( pParent, nWinBits, aMsg );
+ break;
+ case 32:
+ pBox = new QueryBox( pParent, nWinBits, aMsg );
+ break;
+ case 48:
+ pBox = new WarningBox( pParent, nWinBits, aMsg );
+ break;
+ case 64:
+ pBox = new InfoBox( pParent, aMsg );
+ break;
+ default:
+ pBox = new MessBox( pParent, nWinBits, aTitle, aMsg );
+ }
+ pBox->SetText( aTitle );
+ USHORT nRet = (USHORT)pBox->Execute();
+ if( nRet == TRUE )
+ nRet = 1;
+
+ INT16 nMappedRet;
+ if( nStyle == 2 )
+ {
+ nMappedRet = nRet;
+ if( nMappedRet == 0 )
+ nMappedRet = 3; // Abort
+ }
+ else
+ nMappedRet = nButtonMap[ nRet ];
+
+ rPar.Get(0)->PutInteger( nMappedRet );
+ delete pBox;
+}
+
+RTLFUNC(SetAttr) // JSM
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutEmpty();
+ if ( rPar.Count() == 3 )
+ {
+ String aStr = rPar.Get(1)->GetString();
+ INT16 nFlags = rPar.Get(2)->GetInteger();
+
+ // <-- UCB
+ if( hasUno() )
+ {
+ com::sun::star::uno::Reference< XSimpleFileAccess3 > xSFI = getFileAccess();
+ if( xSFI.is() )
+ {
+ try
+ {
+ sal_Bool bReadOnly = (nFlags & 0x0001) != 0; // ATTR_READONLY
+ xSFI->setReadOnly( aStr, bReadOnly );
+ sal_Bool bHidden = (nFlags & 0x0002) != 0; // ATTR_HIDDEN
+ xSFI->setHidden( aStr, bHidden );
+ }
+ catch( Exception & )
+ {
+ StarBASIC::Error( ERRCODE_IO_GENERAL );
+ }
+ }
+ }
+ else
+ // --> UCB
+ {
+#ifdef _OLD_FILE_IMPL
+ // #57064 Bei virtuellen URLs den Real-Path extrahieren
+ DirEntry aEntry( aStr );
+ String aFile = aEntry.GetFull();
+ #ifdef WIN
+ int nErr = _dos_setfileattr( aFile.GetStr(),(unsigned ) nFlags );
+ if ( nErr )
+ {
+ if (errno == EACCES)
+ StarBASIC::Error( SbERR_ACCESS_DENIED );
+ else
+ StarBASIC::Error( SbERR_FILE_NOT_FOUND );
+ }
+ #endif
+ ByteString aByteFile( aFile, gsl_getSystemTextEncoding() );
+ #ifdef WNT
+ if (!SetFileAttributes (aByteFile.GetBuffer(),(DWORD)nFlags))
+ StarBASIC::Error(SbERR_FILE_NOT_FOUND);
+ #endif
+ #ifdef OS2
+ FILESTATUS3 aFileStatus;
+ APIRET rc = DosQueryPathInfo(aByteFile.GetBuffer(),1,
+ &aFileStatus,sizeof(FILESTATUS3));
+ if (!rc)
+ {
+ if (aFileStatus.attrFile != nFlags)
+ {
+ aFileStatus.attrFile = nFlags;
+ rc = DosSetPathInfo(aFile.GetStr(),1,
+ &aFileStatus,sizeof(FILESTATUS3),0);
+ if (rc)
+ StarBASIC::Error( SbERR_FILE_NOT_FOUND );
+ }
+ }
+ else
+ StarBASIC::Error( SbERR_FILE_NOT_FOUND );
+ #endif
+#else
+ // Not implemented
+#endif
+ }
+ }
+ else
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+}
+
+RTLFUNC(Reset) // JSM
+{
+ (void)pBasic;
+ (void)bWrite;
+ (void)rPar;
+
+ SbiIoSystem* pIO = pINST->GetIoSystem();
+ if (pIO)
+ pIO->CloseAll();
+}
+
+RTLFUNC(DumpAllObjects)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ USHORT nArgCount = (USHORT)rPar.Count();
+ if( nArgCount < 2 || nArgCount > 3 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ else if( !pBasic )
+ StarBASIC::Error( SbERR_INTERNAL_ERROR );
+ else
+ {
+ SbxObject* p = pBasic;
+ while( p->GetParent() )
+ p = p->GetParent();
+ SvFileStream aStrm( rPar.Get( 1 )->GetString(),
+ STREAM_WRITE | STREAM_TRUNC );
+ p->Dump( aStrm, rPar.Get( 2 )->GetBool() );
+ aStrm.Close();
+ if( aStrm.GetError() != SVSTREAM_OK )
+ StarBASIC::Error( SbERR_IO_ERROR );
+ }
+}
+
+
+RTLFUNC(FileExists)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() == 2 )
+ {
+ String aStr = rPar.Get(1)->GetString();
+ BOOL bExists = FALSE;
+
+ // <-- UCB
+ if( hasUno() )
+ {
+ com::sun::star::uno::Reference< XSimpleFileAccess3 > xSFI = getFileAccess();
+ if( xSFI.is() )
+ {
+ try
+ {
+ bExists = xSFI->exists( aStr );
+ }
+ catch( Exception & )
+ {
+ StarBASIC::Error( ERRCODE_IO_GENERAL );
+ }
+ }
+ }
+ else
+ // --> UCB
+ {
+#ifdef _OLD_FILE_IMPL
+ DirEntry aEntry( aStr );
+ bExists = aEntry.Exists();
+#else
+ DirectoryItem aItem;
+ FileBase::RC nRet = DirectoryItem::get( getFullPathUNC( aStr ), aItem );
+ bExists = (nRet == FileBase::E_None);
+#endif
+ }
+ rPar.Get(0)->PutBool( bExists );
+ }
+ else
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+}
+
+RTLFUNC(Partition)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() != 5 )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+
+ INT32 nNumber = rPar.Get(1)->GetLong();
+ INT32 nStart = rPar.Get(2)->GetLong();
+ INT32 nStop = rPar.Get(3)->GetLong();
+ INT32 nInterval = rPar.Get(4)->GetLong();
+
+ if( nStart < 0 || nStop <= nStart || nInterval < 1 )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+
+ // the Partition function inserts leading spaces before lowervalue and uppervalue
+ // so that they both have the same number of characters as the string
+ // representation of the value (Stop + 1). This ensures that if you use the output
+ // of the Partition function with several values of Number, the resulting text
+ // will be handled properly during any subsequent sort operation.
+
+ // calculate the maximun number of characters before lowervalue and uppervalue
+ ::rtl::OUString aBeforeStart = ::rtl::OUString::valueOf( nStart - 1 );
+ ::rtl::OUString aAfterStop = ::rtl::OUString::valueOf( nStop + 1 );
+ INT32 nLen1 = aBeforeStart.getLength();
+ INT32 nLen2 = aAfterStop.getLength();
+ INT32 nLen = nLen1 >= nLen2 ? nLen1:nLen2;
+
+ ::rtl::OUStringBuffer aRetStr( nLen * 2 + 1);
+ ::rtl::OUString aLowerValue;
+ ::rtl::OUString aUpperValue;
+ if( nNumber < nStart )
+ {
+ aUpperValue = aBeforeStart;
+ }
+ else if( nNumber > nStop )
+ {
+ aLowerValue = aAfterStop;
+ }
+ else
+ {
+ INT32 nLowerValue = nNumber;
+ INT32 nUpperValue = nLowerValue;
+ if( nInterval > 1 )
+ {
+ nLowerValue = ((( nNumber - nStart ) / nInterval ) * nInterval ) + nStart;
+ nUpperValue = nLowerValue + nInterval - 1;
+ }
+
+ aLowerValue = ::rtl::OUString::valueOf( nLowerValue );
+ aUpperValue = ::rtl::OUString::valueOf( nUpperValue );
+ }
+
+ nLen1 = aLowerValue.getLength();
+ nLen2 = aUpperValue.getLength();
+
+ if( nLen > nLen1 )
+ {
+ // appending the leading spaces for the lowervalue
+ for ( INT32 i= (nLen - nLen1) ; i > 0; --i )
+ aRetStr.appendAscii(" ");
+ }
+ aRetStr.append( aLowerValue ).appendAscii(":");
+ if( nLen > nLen2 )
+ {
+ // appending the leading spaces for the uppervalue
+ for ( INT32 i= (nLen - nLen2) ; i > 0; --i )
+ aRetStr.appendAscii(" ");
+ }
+ aRetStr.append( aUpperValue );
+ rPar.Get(0)->PutString( String(aRetStr.makeStringAndClear()) );
+}
diff --git a/basic/source/runtime/methods1.cxx b/basic/source/runtime/methods1.cxx
new file mode 100644
index 000000000000..62e9c388f5c5
--- /dev/null
+++ b/basic/source/runtime/methods1.cxx
@@ -0,0 +1,2621 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+
+#if defined(WIN)
+#include <string.h>
+#else
+#include <stdlib.h> // getenv
+#endif
+#include <vcl/svapp.hxx>
+#include <vcl/mapmod.hxx>
+#include <vcl/wrkwin.hxx>
+#include <vcl/timer.hxx>
+#include <basic/sbxvar.hxx>
+#ifndef _SBX_HXX
+#include <basic/sbx.hxx>
+#endif
+#include <svl/zforlist.hxx>
+#include <tools/fsys.hxx>
+#include <tools/urlobj.hxx>
+#include <osl/file.hxx>
+
+#ifdef OS2
+#define INCL_DOS
+#define INCL_DOSPROCESS
+#include <svpm.h>
+#endif
+
+#if defined(WIN)
+#include <tools/svwin.h>
+#endif
+
+#ifndef CLK_TCK
+#define CLK_TCK CLOCKS_PER_SEC
+#endif
+
+#include <vcl/jobset.hxx>
+#include <basic/sbobjmod.hxx>
+
+#include "sbintern.hxx"
+#include "runtime.hxx"
+#include "stdobj.hxx"
+#include "rtlproto.hxx"
+#include "dllmgr.hxx"
+#include <iosys.hxx>
+#include "sbunoobj.hxx"
+#include "propacc.hxx"
+
+
+#include <comphelper/processfactory.hxx>
+
+#include <com/sun/star/uno/Sequence.hxx>
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+#include <com/sun/star/i18n/XCalendar.hpp>
+
+using namespace comphelper;
+using namespace com::sun::star::uno;
+using namespace com::sun::star::i18n;
+
+
+static Reference< XCalendar > getLocaleCalendar( void )
+{
+ static Reference< XCalendar > xCalendar;
+ if( !xCalendar.is() )
+ {
+ Reference< XMultiServiceFactory > xSMgr = getProcessServiceFactory();
+ if( xSMgr.is() )
+ {
+ xCalendar = Reference< XCalendar >( xSMgr->createInstance
+ ( ::rtl::OUString::createFromAscii( "com.sun.star.i18n.LocaleCalendar" ) ), UNO_QUERY );
+ }
+ }
+
+ static com::sun::star::lang::Locale aLastLocale;
+ static bool bNeedsInit = true;
+
+ com::sun::star::lang::Locale aLocale = Application::GetSettings().GetLocale();
+ bool bNeedsReload = false;
+ if( bNeedsInit )
+ {
+ bNeedsInit = false;
+ bNeedsReload = true;
+ }
+ else if( aLocale.Language != aLastLocale.Language ||
+ aLocale.Country != aLastLocale.Country )
+ {
+ bNeedsReload = true;
+ }
+ if( bNeedsReload )
+ {
+ aLastLocale = aLocale;
+ xCalendar->loadDefaultCalendar( aLocale );
+ }
+ return xCalendar;
+}
+
+
+RTLFUNC(CBool) // JSM
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ BOOL bVal = FALSE;
+ if ( rPar.Count() == 2 )
+ {
+ SbxVariable *pSbxVariable = rPar.Get(1);
+ bVal = pSbxVariable->GetBool();
+ }
+ else
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+
+ rPar.Get(0)->PutBool(bVal);
+}
+
+RTLFUNC(CByte) // JSM
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ BYTE nByte = 0;
+ if ( rPar.Count() == 2 )
+ {
+ SbxVariable *pSbxVariable = rPar.Get(1);
+ nByte = pSbxVariable->GetByte();
+ }
+ else
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+
+ rPar.Get(0)->PutByte(nByte);
+}
+
+RTLFUNC(CCur) // JSM
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ SbxINT64 nCur;
+ if ( rPar.Count() == 2 )
+ {
+ SbxVariable *pSbxVariable = rPar.Get(1);
+ nCur = pSbxVariable->GetCurrency();
+ }
+ else
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+
+ rPar.Get(0)->PutCurrency( nCur );
+}
+
+RTLFUNC(CDec) // JSM
+{
+ (void)pBasic;
+ (void)bWrite;
+
+#ifdef WNT
+ SbxDecimal* pDec = NULL;
+ if ( rPar.Count() == 2 )
+ {
+ SbxVariable *pSbxVariable = rPar.Get(1);
+ pDec = pSbxVariable->GetDecimal();
+ }
+ else
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+
+ rPar.Get(0)->PutDecimal( pDec );
+#else
+ rPar.Get(0)->PutEmpty();
+ StarBASIC::Error(SbERR_NOT_IMPLEMENTED);
+#endif
+}
+
+RTLFUNC(CDate) // JSM
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ double nVal = 0.0;
+ if ( rPar.Count() == 2 )
+ {
+ SbxVariable *pSbxVariable = rPar.Get(1);
+ nVal = pSbxVariable->GetDate();
+ }
+ else
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+
+ rPar.Get(0)->PutDate(nVal);
+}
+
+RTLFUNC(CDbl) // JSM
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ double nVal = 0.0;
+ if ( rPar.Count() == 2 )
+ {
+ SbxVariable *pSbxVariable = rPar.Get(1);
+ if( pSbxVariable->GetType() == SbxSTRING )
+ {
+ // AB #41690 , String holen
+ String aScanStr = pSbxVariable->GetString();
+ SbError Error = SbxValue::ScanNumIntnl( aScanStr, nVal );
+ if( Error != SbxERR_OK )
+ StarBASIC::Error( Error );
+ }
+ else
+ {
+ nVal = pSbxVariable->GetDouble();
+ }
+ }
+ else
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+
+ rPar.Get(0)->PutDouble(nVal);
+}
+
+RTLFUNC(CInt) // JSM
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ INT16 nVal = 0;
+ if ( rPar.Count() == 2 )
+ {
+ SbxVariable *pSbxVariable = rPar.Get(1);
+ nVal = pSbxVariable->GetInteger();
+ }
+ else
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+
+ rPar.Get(0)->PutInteger(nVal);
+}
+
+RTLFUNC(CLng) // JSM
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ INT32 nVal = 0;
+ if ( rPar.Count() == 2 )
+ {
+ SbxVariable *pSbxVariable = rPar.Get(1);
+ nVal = pSbxVariable->GetLong();
+ }
+ else
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+
+ rPar.Get(0)->PutLong(nVal);
+}
+
+RTLFUNC(CSng) // JSM
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ float nVal = (float)0.0;
+ if ( rPar.Count() == 2 )
+ {
+ SbxVariable *pSbxVariable = rPar.Get(1);
+ if( pSbxVariable->GetType() == SbxSTRING )
+ {
+ // AB #41690 , String holen
+ double dVal = 0.0;
+ String aScanStr = pSbxVariable->GetString();
+ SbError Error = SbxValue::ScanNumIntnl( aScanStr, dVal, /*bSingle=*/TRUE );
+ if( SbxBase::GetError() == SbxERR_OK && Error != SbxERR_OK )
+ StarBASIC::Error( Error );
+ nVal = (float)dVal;
+ }
+ else
+ {
+ nVal = pSbxVariable->GetSingle();
+ }
+ }
+ else
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+
+ rPar.Get(0)->PutSingle(nVal);
+}
+
+RTLFUNC(CStr) // JSM
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ String aString;
+ if ( rPar.Count() == 2 )
+ {
+ SbxVariable *pSbxVariable = rPar.Get(1);
+ aString = pSbxVariable->GetString();
+ }
+ else
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+
+ rPar.Get(0)->PutString(aString);
+}
+
+RTLFUNC(CVar) // JSM
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ SbxValues aVals( SbxVARIANT );
+ if ( rPar.Count() == 2 )
+ {
+ SbxVariable *pSbxVariable = rPar.Get(1);
+ pSbxVariable->Get( aVals );
+ }
+ else
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+
+ rPar.Get(0)->Put( aVals );
+}
+
+RTLFUNC(CVErr)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ INT16 nErrCode = 0;
+ if ( rPar.Count() == 2 )
+ {
+ SbxVariable *pSbxVariable = rPar.Get(1);
+ nErrCode = pSbxVariable->GetInteger();
+ }
+ else
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+
+ rPar.Get(0)->PutErr( nErrCode );
+}
+
+RTLFUNC(Iif) // JSM
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() == 4 )
+ {
+ if (rPar.Get(1)->GetBool())
+ *rPar.Get(0) = *rPar.Get(2);
+ else
+ *rPar.Get(0) = *rPar.Get(3);
+ }
+ else
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+}
+
+RTLFUNC(GetSystemType)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() != 1 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ else
+ // Removed for SRC595
+ rPar.Get(0)->PutInteger( -1 );
+}
+
+RTLFUNC(GetGUIType)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() != 1 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ else
+ {
+ // 17.7.2000 Make simple solution for testtool / fat office
+#if defined (WNT)
+ rPar.Get(0)->PutInteger( 1 );
+#elif defined OS2
+ rPar.Get(0)->PutInteger( 2 );
+#elif defined UNX
+ rPar.Get(0)->PutInteger( 4 );
+#else
+ rPar.Get(0)->PutInteger( -1 );
+#endif
+ }
+}
+
+RTLFUNC(Red)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() != 2 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ else
+ {
+ ULONG nRGB = (ULONG)rPar.Get(1)->GetLong();
+ nRGB &= 0x00FF0000;
+ nRGB >>= 16;
+ rPar.Get(0)->PutInteger( (INT16)nRGB );
+ }
+}
+
+RTLFUNC(Green)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() != 2 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ else
+ {
+ ULONG nRGB = (ULONG)rPar.Get(1)->GetLong();
+ nRGB &= 0x0000FF00;
+ nRGB >>= 8;
+ rPar.Get(0)->PutInteger( (INT16)nRGB );
+ }
+}
+
+RTLFUNC(Blue)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() != 2 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ else
+ {
+ ULONG nRGB = (ULONG)rPar.Get(1)->GetLong();
+ nRGB &= 0x000000FF;
+ rPar.Get(0)->PutInteger( (INT16)nRGB );
+ }
+}
+
+
+RTLFUNC(Switch)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ USHORT nCount = rPar.Count();
+ if( !(nCount & 0x0001 ))
+ // Anzahl der Argumente muss ungerade sein
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ USHORT nCurExpr = 1;
+ while( nCurExpr < (nCount-1) )
+ {
+ if( rPar.Get( nCurExpr )->GetBool())
+ {
+ (*rPar.Get(0)) = *(rPar.Get(nCurExpr+1));
+ return;
+ }
+ nCurExpr += 2;
+ }
+ rPar.Get(0)->PutNull();
+}
+
+//i#64882# Common wait impl for existing Wait and new WaitUntil
+// rtl functions
+void Wait_Impl( bool bDurationBased, SbxArray& rPar )
+{
+ if( rPar.Count() != 2 )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+ long nWait = 0;
+ if ( bDurationBased )
+ {
+ double dWait = rPar.Get(1)->GetDouble();
+ double dNow = Now_Impl();
+ double dSecs = (double)( ( dWait - dNow ) * (double)( 24.0*3600.0) );
+ nWait = (long)( dSecs * 1000 ); // wait in thousands of sec
+ }
+ else
+ nWait = rPar.Get(1)->GetLong();
+ if( nWait < 0 )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+
+ Timer aTimer;
+ aTimer.SetTimeout( nWait );
+ aTimer.Start();
+ while ( aTimer.IsActive() )
+ Application::Yield();
+}
+
+//i#64882#
+RTLFUNC(Wait)
+{
+ (void)pBasic;
+ (void)bWrite;
+ Wait_Impl( false, rPar );
+}
+
+//i#64882# add new WaitUntil ( for application.wait )
+// share wait_impl with 'normal' oobasic wait
+RTLFUNC(WaitUntil)
+{
+ (void)pBasic;
+ (void)bWrite;
+ Wait_Impl( true, rPar );
+}
+
+RTLFUNC(DoEvents)
+{
+ (void)pBasic;
+ (void)bWrite;
+ (void)rPar;
+ // Dummy implementation as the following code leads
+ // to performance problems for unknown reasons
+ //Timer aTimer;
+ //aTimer.SetTimeout( 1 );
+ //aTimer.Start();
+ //while ( aTimer.IsActive() )
+ // Application::Reschedule();
+}
+
+RTLFUNC(GetGUIVersion)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() != 1 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ else
+ {
+ // Removed for SRC595
+ rPar.Get(0)->PutLong( -1 );
+ }
+}
+
+RTLFUNC(Choose)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() < 2 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ INT16 nIndex = rPar.Get(1)->GetInteger();
+ USHORT nCount = rPar.Count();
+ nCount--;
+ if( nCount == 1 || nIndex > (nCount-1) || nIndex < 1 )
+ {
+ rPar.Get(0)->PutNull();
+ return;
+ }
+ (*rPar.Get(0)) = *(rPar.Get(nIndex+1));
+}
+
+
+RTLFUNC(Trim)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() < 2 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ else
+ {
+ String aStr( rPar.Get(1)->GetString() );
+ aStr.EraseLeadingChars();
+ aStr.EraseTrailingChars();
+ rPar.Get(0)->PutString( aStr );
+ }
+}
+
+RTLFUNC(GetSolarVersion)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutLong( (INT32)SUPD );
+}
+
+RTLFUNC(TwipsPerPixelX)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ INT32 nResult = 0;
+ Size aSize( 100,0 );
+ MapMode aMap( MAP_TWIP );
+ OutputDevice* pDevice = Application::GetDefaultDevice();
+ if( pDevice )
+ {
+ aSize = pDevice->PixelToLogic( aSize, aMap );
+ nResult = aSize.Width() / 100;
+ }
+ rPar.Get(0)->PutLong( nResult );
+}
+
+RTLFUNC(TwipsPerPixelY)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ INT32 nResult = 0;
+ Size aSize( 0,100 );
+ MapMode aMap( MAP_TWIP );
+ OutputDevice* pDevice = Application::GetDefaultDevice();
+ if( pDevice )
+ {
+ aSize = pDevice->PixelToLogic( aSize, aMap );
+ nResult = aSize.Height() / 100;
+ }
+ rPar.Get(0)->PutLong( nResult );
+}
+
+
+RTLFUNC(FreeLibrary)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() != 2 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ pINST->GetDllMgr()->FreeDll( rPar.Get(1)->GetString() );
+}
+bool IsBaseIndexOne()
+{
+ bool result = false;
+ if ( pINST && pINST->pRun )
+ {
+ USHORT res = pINST->pRun->GetBase();
+ if ( res )
+ result = true;
+ }
+ return result;
+}
+
+RTLFUNC(Array)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ SbxDimArray* pArray = new SbxDimArray( SbxVARIANT );
+ USHORT nArraySize = rPar.Count() - 1;
+
+ // Option Base zunaechst ignorieren (kennt leider nur der Compiler)
+ bool bIncIndex = (IsBaseIndexOne() && SbiRuntime::isVBAEnabled() );
+ if( nArraySize )
+ {
+ if ( bIncIndex )
+ pArray->AddDim( 1, nArraySize );
+ else
+ pArray->AddDim( 0, nArraySize-1 );
+ }
+ else
+ {
+ pArray->unoAddDim( 0, -1 );
+ }
+
+ // Parameter ins Array uebernehmen
+ // ATTENTION: Using type USHORT for loop variable is
+ // mandatory to workaround a problem with the
+ // Solaris Intel compiler optimizer! See i104354
+ for( USHORT i = 0 ; i < nArraySize ; i++ )
+ {
+ SbxVariable* pVar = rPar.Get(i+1);
+ SbxVariable* pNew = new SbxVariable( *pVar );
+ pNew->SetFlag( SBX_WRITE );
+ short index = static_cast< short >(i);
+ if ( bIncIndex )
+ ++index;
+ pArray->Put( pNew, &index );
+ }
+
+ // Array zurueckliefern
+ SbxVariableRef refVar = rPar.Get(0);
+ USHORT nFlags = refVar->GetFlags();
+ refVar->ResetFlag( SBX_FIXED );
+ refVar->PutObject( pArray );
+ refVar->SetFlags( nFlags );
+ refVar->SetParameters( NULL );
+}
+
+
+// Featurewunsch #57868
+// Die Funktion liefert ein Variant-Array, wenn keine Parameter angegeben
+// werden, wird ein leeres Array erzeugt (entsprechend dim a(), entspricht
+// einer Sequence der Laenge 0 in Uno).
+// Wenn Parameter angegeben sind, wird fuer jeden eine Dimension erzeugt
+// DimArray( 2, 2, 4 ) entspricht DIM a( 2, 2, 4 )
+// Das Array ist immer vom Typ Variant
+RTLFUNC(DimArray)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ SbxDimArray * pArray = new SbxDimArray( SbxVARIANT );
+ USHORT nArrayDims = rPar.Count() - 1;
+ if( nArrayDims > 0 )
+ {
+ for( USHORT i = 0; i < nArrayDims ; i++ )
+ {
+ INT32 ub = rPar.Get(i+1)->GetLong();
+ if( ub < 0 )
+ {
+ StarBASIC::Error( SbERR_OUT_OF_RANGE );
+ ub = 0;
+ }
+ pArray->AddDim32( 0, ub );
+ }
+ }
+ else
+ pArray->unoAddDim( 0, -1 );
+
+ // Array zurueckliefern
+ SbxVariableRef refVar = rPar.Get(0);
+ USHORT nFlags = refVar->GetFlags();
+ refVar->ResetFlag( SBX_FIXED );
+ refVar->PutObject( pArray );
+ refVar->SetFlags( nFlags );
+ refVar->SetParameters( NULL );
+}
+
+/*
+ * FindObject und FindPropertyObject ermoeglichen es,
+ * Objekte und Properties vom Typ Objekt zur Laufzeit
+ * ueber ihren Namen als String-Parameter anzusprechen.
+ *
+ * Bsp.:
+ * MyObj.Prop1.Bla = 5
+ *
+ * entspricht:
+ * dim ObjVar as Object
+ * dim ObjProp as Object
+ * ObjName$ = "MyObj"
+ * ObjVar = FindObject( ObjName$ )
+ * PropName$ = "Prop1"
+ * ObjProp = FindPropertyObject( ObjVar, PropName$ )
+ * ObjProp.Bla = 5
+ *
+ * Dabei koennen die Namen zur Laufzeit dynamisch
+ * erzeugt werden und, so dass z.B. ueber Controls
+ * "TextEdit1" bis "TextEdit5" in einem Dialog in
+ * einer Schleife iteriert werden kann.
+ */
+
+// Objekt ueber den Namen ansprechen
+// 1. Parameter = Name des Objekts als String
+RTLFUNC(FindObject)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ // Wir brauchen einen Parameter
+ if ( rPar.Count() < 2 )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+
+ // 1. Parameter ist der Name
+ String aNameStr = rPar.Get(1)->GetString();
+
+ // Basic-Suchfunktion benutzen
+ SbxBase* pFind = StarBASIC::FindSBXInCurrentScope( aNameStr );
+ SbxObject* pFindObj = NULL;
+ if( pFind )
+ pFindObj = PTR_CAST(SbxObject,pFind);
+ /*
+ if( !pFindObj )
+ {
+ StarBASIC::Error( SbERR_VAR_UNDEFINED );
+ return;
+ }
+ */
+
+ // Objekt zurueckliefern
+ SbxVariableRef refVar = rPar.Get(0);
+ refVar->PutObject( pFindObj );
+}
+
+// Objekt-Property in einem Objekt ansprechen
+// 1. Parameter = Objekt
+// 2. Parameter = Name der Property als String
+RTLFUNC(FindPropertyObject)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ // Wir brauchen 2 Parameter
+ if ( rPar.Count() < 3 )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+
+ // 1. Parameter holen, muss Objekt sein
+ SbxBase* pObjVar = (SbxObject*)rPar.Get(1)->GetObject();
+ SbxObject* pObj = NULL;
+ if( pObjVar )
+ pObj = PTR_CAST(SbxObject,pObjVar);
+ if( !pObj && pObjVar && pObjVar->ISA(SbxVariable) )
+ {
+ SbxBase* pObjVarObj = ((SbxVariable*)pObjVar)->GetObject();
+ pObj = PTR_CAST(SbxObject,pObjVarObj);
+ }
+ /*
+ if( !pObj )
+ {
+ StarBASIC::Error( SbERR_VAR_UNDEFINED );
+ return;
+ }
+ */
+
+ // 2. Parameter ist der Name
+ String aNameStr = rPar.Get(2)->GetString();
+
+ // Jetzt muss ein Objekt da sein, sonst Error
+ SbxObject* pFindObj = NULL;
+ if( pObj )
+ {
+ // Im Objekt nach Objekt suchen
+ SbxVariable* pFindVar = pObj->Find( aNameStr, SbxCLASS_OBJECT );
+ pFindObj = PTR_CAST(SbxObject,pFindVar);
+ }
+ else
+ StarBASIC::Error( SbERR_BAD_PARAMETER );
+
+ // Objekt zurueckliefern
+ SbxVariableRef refVar = rPar.Get(0);
+ refVar->PutObject( pFindObj );
+}
+
+
+
+BOOL lcl_WriteSbxVariable( const SbxVariable& rVar, SvStream* pStrm,
+ BOOL bBinary, short nBlockLen, BOOL bIsArray )
+{
+ ULONG nFPos = pStrm->Tell();
+
+ BOOL bIsVariant = !rVar.IsFixed();
+ SbxDataType eType = rVar.GetType();
+
+ switch( eType )
+ {
+ case SbxBOOL:
+ case SbxCHAR:
+ case SbxBYTE:
+ if( bIsVariant )
+ *pStrm << (USHORT)SbxBYTE; // VarType Id
+ *pStrm << rVar.GetByte();
+ break;
+
+ case SbxEMPTY:
+ case SbxNULL:
+ case SbxVOID:
+ case SbxINTEGER:
+ case SbxUSHORT:
+ case SbxINT:
+ case SbxUINT:
+ if( bIsVariant )
+ *pStrm << (USHORT)SbxINTEGER; // VarType Id
+ *pStrm << rVar.GetInteger();
+ break;
+
+ case SbxLONG:
+ case SbxULONG:
+ case SbxLONG64:
+ case SbxULONG64:
+ if( bIsVariant )
+ *pStrm << (USHORT)SbxLONG; // VarType Id
+ *pStrm << rVar.GetLong();
+ break;
+
+ case SbxSINGLE:
+ if( bIsVariant )
+ *pStrm << (USHORT)eType; // VarType Id
+ *pStrm << rVar.GetSingle();
+ break;
+
+ case SbxDOUBLE:
+ case SbxCURRENCY:
+ case SbxDATE:
+ if( bIsVariant )
+ *pStrm << (USHORT)eType; // VarType Id
+ *pStrm << rVar.GetDouble();
+ break;
+
+ case SbxSTRING:
+ case SbxLPSTR:
+ {
+ const String& rStr = rVar.GetString();
+ if( !bBinary || bIsArray )
+ {
+ if( bIsVariant )
+ *pStrm << (USHORT)SbxSTRING;
+ pStrm->WriteByteString( rStr, gsl_getSystemTextEncoding() );
+ //*pStrm << rStr;
+ }
+ else
+ {
+ // ohne Laengenangabe! ohne Endekennung!
+ // What does that mean for Unicode?! Choosing conversion to ByteString...
+ ByteString aByteStr( rStr, gsl_getSystemTextEncoding() );
+ *pStrm << (const char*)aByteStr.GetBuffer();
+ //*pStrm << (const char*)rStr.GetStr();
+ }
+ }
+ break;
+
+ default:
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return FALSE;
+ }
+
+ if( nBlockLen )
+ pStrm->Seek( nFPos + nBlockLen );
+ return pStrm->GetErrorCode() ? FALSE : TRUE;
+}
+
+BOOL lcl_ReadSbxVariable( SbxVariable& rVar, SvStream* pStrm,
+ BOOL bBinary, short nBlockLen, BOOL bIsArray )
+{
+ (void)bBinary;
+ (void)bIsArray;
+
+ double aDouble;
+
+ ULONG nFPos = pStrm->Tell();
+
+ BOOL bIsVariant = !rVar.IsFixed();
+ SbxDataType eVarType = rVar.GetType();
+
+ SbxDataType eSrcType = eVarType;
+ if( bIsVariant )
+ {
+ USHORT nTemp;
+ *pStrm >> nTemp;
+ eSrcType = (SbxDataType)nTemp;
+ }
+
+ switch( eSrcType )
+ {
+ case SbxBOOL:
+ case SbxCHAR:
+ case SbxBYTE:
+ {
+ BYTE aByte;
+ *pStrm >> aByte;
+ rVar.PutByte( aByte );
+ }
+ break;
+
+ case SbxEMPTY:
+ case SbxNULL:
+ case SbxVOID:
+ case SbxINTEGER:
+ case SbxUSHORT:
+ case SbxINT:
+ case SbxUINT:
+ {
+ INT16 aInt;
+ *pStrm >> aInt;
+ rVar.PutInteger( aInt );
+ }
+ break;
+
+ case SbxLONG:
+ case SbxULONG:
+ case SbxLONG64:
+ case SbxULONG64:
+ {
+ INT32 aInt;
+ *pStrm >> aInt;
+ rVar.PutLong( aInt );
+ }
+ break;
+
+ case SbxSINGLE:
+ {
+ float nS;
+ *pStrm >> nS;
+ rVar.PutSingle( nS );
+ }
+ break;
+
+ case SbxDOUBLE:
+ case SbxCURRENCY:
+ {
+ *pStrm >> aDouble;
+ rVar.PutDouble( aDouble );
+ }
+ break;
+
+ case SbxDATE:
+ {
+ *pStrm >> aDouble;
+ rVar.PutDate( aDouble );
+ }
+ break;
+
+ case SbxSTRING:
+ case SbxLPSTR:
+ {
+ String aStr;
+ pStrm->ReadByteString( aStr, gsl_getSystemTextEncoding() );
+ rVar.PutString( aStr );
+ }
+ break;
+
+ default:
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return FALSE;
+ }
+
+ if( nBlockLen )
+ pStrm->Seek( nFPos + nBlockLen );
+ return pStrm->GetErrorCode() ? FALSE : TRUE;
+}
+
+
+// nCurDim = 1...n
+BOOL lcl_WriteReadSbxArray( SbxDimArray& rArr, SvStream* pStrm,
+ BOOL bBinary, short nCurDim, short* pOtherDims, BOOL bWrite )
+{
+ DBG_ASSERT( nCurDim > 0,"Bad Dim");
+ short nLower, nUpper;
+ if( !rArr.GetDim( nCurDim, nLower, nUpper ) )
+ return FALSE;
+ for( short nCur = nLower; nCur <= nUpper; nCur++ )
+ {
+ pOtherDims[ nCurDim-1 ] = nCur;
+ if( nCurDim != 1 )
+ lcl_WriteReadSbxArray(rArr, pStrm, bBinary, nCurDim-1, pOtherDims, bWrite);
+ else
+ {
+ SbxVariable* pVar = rArr.Get( (const short*)pOtherDims );
+ BOOL bRet;
+ if( bWrite )
+ bRet = lcl_WriteSbxVariable(*pVar, pStrm, bBinary, 0, TRUE );
+ else
+ bRet = lcl_ReadSbxVariable(*pVar, pStrm, bBinary, 0, TRUE );
+ if( !bRet )
+ return FALSE;
+ }
+ }
+ return TRUE;
+}
+
+void PutGet( SbxArray& rPar, BOOL bPut )
+{
+ // Wir brauchen 3 Parameter
+ if ( rPar.Count() != 4 )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+ INT16 nFileNo = rPar.Get(1)->GetInteger();
+ SbxVariable* pVar2 = rPar.Get(2);
+ BOOL bHasRecordNo = (BOOL)(pVar2->GetType() != SbxEMPTY);
+ long nRecordNo = pVar2->GetLong();
+ if ( nFileNo < 1 || ( bHasRecordNo && nRecordNo < 1 ) )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+ nRecordNo--; // wir moegen's ab 0!
+ SbiIoSystem* pIO = pINST->GetIoSystem();
+ SbiStream* pSbStrm = pIO->GetStream( nFileNo );
+ // das File muss Random (feste Record-Laenge) oder Binary sein
+ if ( !pSbStrm || !(pSbStrm->GetMode() & (SBSTRM_BINARY | SBSTRM_RANDOM)) )
+ {
+ StarBASIC::Error( SbERR_BAD_CHANNEL );
+ return;
+ }
+
+ SvStream* pStrm = pSbStrm->GetStrm();
+ BOOL bRandom = pSbStrm->IsRandom();
+ short nBlockLen = bRandom ? pSbStrm->GetBlockLen() : 0;
+
+ if( bPut )
+ {
+ // Datei aufplustern, falls jemand uebers Dateiende hinaus geseekt hat
+ pSbStrm->ExpandFile();
+ }
+
+ // auf die Startposition seeken
+ if( bHasRecordNo )
+ {
+ ULONG nFilePos = bRandom ? (ULONG)(nBlockLen*nRecordNo) : (ULONG)nRecordNo;
+ pStrm->Seek( nFilePos );
+ }
+
+ SbxDimArray* pArr = 0;
+ SbxVariable* pVar = rPar.Get(3);
+ if( pVar->GetType() & SbxARRAY )
+ {
+ SbxBase* pParObj = pVar->GetObject();
+ pArr = PTR_CAST(SbxDimArray,pParObj);
+ }
+
+ BOOL bRet;
+
+ if( pArr )
+ {
+ ULONG nFPos = pStrm->Tell();
+ short nDims = pArr->GetDims();
+ short* pDims = new short[ nDims ];
+ bRet = lcl_WriteReadSbxArray(*pArr,pStrm,!bRandom,nDims,pDims,bPut);
+ delete [] pDims;
+ if( nBlockLen )
+ pStrm->Seek( nFPos + nBlockLen );
+ }
+ else
+ {
+ if( bPut )
+ bRet = lcl_WriteSbxVariable(*pVar, pStrm, !bRandom, nBlockLen, FALSE);
+ else
+ bRet = lcl_ReadSbxVariable(*pVar, pStrm, !bRandom, nBlockLen, FALSE);
+ }
+ if( !bRet || pStrm->GetErrorCode() )
+ StarBASIC::Error( SbERR_IO_ERROR );
+}
+
+RTLFUNC(Put)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ PutGet( rPar, TRUE );
+}
+
+RTLFUNC(Get)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ PutGet( rPar, FALSE );
+}
+
+RTLFUNC(Environ)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() != 2 )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+ String aResult;
+ // sollte ANSI sein, aber unter Win16 in DLL nicht moeglich
+#if defined(WIN)
+ LPSTR lpszEnv = GetDOSEnvironment();
+ String aCompareStr( rPar.Get(1)->GetString() );
+ aCompareStr += '=';
+ const char* pCompare = aCompareStr.GetStr();
+ int nCompareLen = aCompareStr.Len();
+ while ( *lpszEnv )
+ {
+ // Es werden alle EnvString in der Form ENV=VAL 0-terminiert
+ // aneinander gehaengt.
+
+ if ( strnicmp( pCompare, lpszEnv, nCompareLen ) == 0 )
+ {
+ aResult = (const char*)(lpszEnv+nCompareLen);
+ rPar.Get(0)->PutString( aResult );
+ return;
+ }
+ lpszEnv += lstrlen( lpszEnv ) + 1; // Next Enviroment-String
+ }
+#else
+ ByteString aByteStr( rPar.Get(1)->GetString(), gsl_getSystemTextEncoding() );
+ const char* pEnvStr = getenv( aByteStr.GetBuffer() );
+ if ( pEnvStr )
+ aResult = String::CreateFromAscii( pEnvStr );
+#endif
+ rPar.Get(0)->PutString( aResult );
+}
+
+static double GetDialogZoomFactor( BOOL bX, long nValue )
+{
+ OutputDevice* pDevice = Application::GetDefaultDevice();
+ double nResult = 0;
+ if( pDevice )
+ {
+ Size aRefSize( nValue, nValue );
+#ifndef WIN
+ Fraction aFracX( 1, 26 );
+#else
+ Fraction aFracX( 1, 23 );
+#endif
+ Fraction aFracY( 1, 24 );
+ MapMode aMap( MAP_APPFONT, Point(), aFracX, aFracY );
+ Size aScaledSize = pDevice->LogicToPixel( aRefSize, aMap );
+ aRefSize = pDevice->LogicToPixel( aRefSize, MapMode(MAP_TWIP) );
+
+ double nRef, nScaled;
+ if( bX )
+ {
+ nRef = aRefSize.Width();
+ nScaled = aScaledSize.Width();
+ }
+ else
+ {
+ nRef = aRefSize.Height();
+ nScaled = aScaledSize.Height();
+ }
+ nResult = nScaled / nRef;
+ }
+ return nResult;
+}
+
+
+RTLFUNC(GetDialogZoomFactorX)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() != 2 )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+ rPar.Get(0)->PutDouble( GetDialogZoomFactor( TRUE, rPar.Get(1)->GetLong() ));
+}
+
+RTLFUNC(GetDialogZoomFactorY)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() != 2 )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+ rPar.Get(0)->PutDouble( GetDialogZoomFactor( FALSE, rPar.Get(1)->GetLong()));
+}
+
+
+RTLFUNC(EnableReschedule)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutEmpty();
+ if ( rPar.Count() != 2 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ if( pINST )
+ pINST->EnableReschedule( rPar.Get(1)->GetBool() );
+}
+
+RTLFUNC(GetSystemTicks)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() != 1 )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+ rPar.Get(0)->PutLong( Time::GetSystemTicks() );
+}
+
+RTLFUNC(GetPathSeparator)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() != 1 )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+ rPar.Get(0)->PutString( DirEntry::GetAccessDelimiter() );
+}
+
+RTLFUNC(ResolvePath)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() == 2 )
+ {
+ String aStr = rPar.Get(1)->GetString();
+ DirEntry aEntry( aStr );
+ //if( aEntry.IsVirtual() )
+ //aStr = aEntry.GetRealPathFromVirtualURL();
+ rPar.Get(0)->PutString( aStr );
+ }
+ else
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+}
+
+RTLFUNC(TypeLen)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() != 2 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ else
+ {
+ SbxDataType eType = rPar.Get(1)->GetType();
+ INT16 nLen = 0;
+ switch( eType )
+ {
+ case SbxEMPTY:
+ case SbxNULL:
+ case SbxVECTOR:
+ case SbxARRAY:
+ case SbxBYREF:
+ case SbxVOID:
+ case SbxHRESULT:
+ case SbxPOINTER:
+ case SbxDIMARRAY:
+ case SbxCARRAY:
+ case SbxUSERDEF:
+ nLen = 0;
+ break;
+
+ case SbxINTEGER:
+ case SbxERROR:
+ case SbxUSHORT:
+ case SbxINT:
+ case SbxUINT:
+ nLen = 2;
+ break;
+
+ case SbxLONG:
+ case SbxSINGLE:
+ case SbxULONG:
+ nLen = 4;
+ break;
+
+ case SbxDOUBLE:
+ case SbxCURRENCY:
+ case SbxDATE:
+ case SbxLONG64:
+ case SbxULONG64:
+ nLen = 8;
+ break;
+
+ case SbxOBJECT:
+ case SbxVARIANT:
+ case SbxDATAOBJECT:
+ nLen = 0;
+ break;
+
+ case SbxCHAR:
+ case SbxBYTE:
+ case SbxBOOL:
+ nLen = 1;
+ break;
+
+ case SbxLPSTR:
+ case SbxLPWSTR:
+ case SbxCoreSTRING:
+ case SbxSTRING:
+ nLen = (INT16)rPar.Get(1)->GetString().Len();
+ break;
+
+ default:
+ nLen = 0;
+ }
+ rPar.Get(0)->PutInteger( nLen );
+ }
+}
+
+
+// Uno-Struct eines beliebigen Typs erzeugen
+// 1. Parameter == Klassename, weitere Parameter zur Initialisierung
+RTLFUNC(CreateUnoStruct)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ RTL_Impl_CreateUnoStruct( pBasic, rPar, bWrite );
+}
+
+// Uno-Service erzeugen
+// 1. Parameter == Service-Name
+RTLFUNC(CreateUnoService)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ RTL_Impl_CreateUnoService( pBasic, rPar, bWrite );
+}
+
+RTLFUNC(CreateUnoServiceWithArguments)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ RTL_Impl_CreateUnoServiceWithArguments( pBasic, rPar, bWrite );
+}
+
+
+RTLFUNC(CreateUnoValue)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ RTL_Impl_CreateUnoValue( pBasic, rPar, bWrite );
+}
+
+
+// ServiceManager liefern (keine Parameter)
+RTLFUNC(GetProcessServiceManager)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ RTL_Impl_GetProcessServiceManager( pBasic, rPar, bWrite );
+}
+
+// PropertySet erzeugen
+// 1. Parameter == Sequence<PropertyValue>
+RTLFUNC(CreatePropertySet)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ RTL_Impl_CreatePropertySet( pBasic, rPar, bWrite );
+}
+
+// Abfragen, ob ein Interface unterstuetzt wird
+// Mehrere Interface-Namen als Parameter
+RTLFUNC(HasUnoInterfaces)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ RTL_Impl_HasInterfaces( pBasic, rPar, bWrite );
+}
+
+// Abfragen, ob ein Basic-Objekt ein Uno-Struct repraesentiert
+RTLFUNC(IsUnoStruct)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ RTL_Impl_IsUnoStruct( pBasic, rPar, bWrite );
+}
+
+// Abfragen, ob zwei Uno-Objekte identisch sind
+RTLFUNC(EqualUnoObjects)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ RTL_Impl_EqualUnoObjects( pBasic, rPar, bWrite );
+}
+
+// Instanciate "com.sun.star.awt.UnoControlDialog" on basis
+// of a DialogLibrary entry: Convert from XML-ByteSequence
+// and attach events. Implemented in classes\eventatt.cxx
+void RTL_Impl_CreateUnoDialog( StarBASIC* pBasic, SbxArray& rPar, BOOL bWrite );
+
+RTLFUNC(CreateUnoDialog)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ RTL_Impl_CreateUnoDialog( pBasic, rPar, bWrite );
+}
+
+// Return the application standard lib as root scope
+RTLFUNC(GlobalScope)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ SbxObject* p = pBasic;
+ while( p->GetParent() )
+ p = p->GetParent();
+
+ SbxVariableRef refVar = rPar.Get(0);
+ refVar->PutObject( p );
+}
+
+// Helper functions to convert Url from/to system paths
+RTLFUNC(ConvertToUrl)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() == 2 )
+ {
+ String aStr = rPar.Get(1)->GetString();
+ INetURLObject aURLObj( aStr, INET_PROT_FILE );
+ ::rtl::OUString aFileURL = aURLObj.GetMainURL( INetURLObject::NO_DECODE );
+ if( !aFileURL.getLength() )
+ ::osl::File::getFileURLFromSystemPath( aFileURL, aFileURL );
+ if( !aFileURL.getLength() )
+ aFileURL = aStr;
+ rPar.Get(0)->PutString( String(aFileURL) );
+ }
+ else
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+}
+
+RTLFUNC(ConvertFromUrl)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() == 2 )
+ {
+ String aStr = rPar.Get(1)->GetString();
+ ::rtl::OUString aSysPath;
+ ::osl::File::getSystemPathFromFileURL( aStr, aSysPath );
+ if( !aSysPath.getLength() )
+ aSysPath = aStr;
+ rPar.Get(0)->PutString( String(aSysPath) );
+ }
+ else
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+}
+
+
+// Provide DefaultContext
+RTLFUNC(GetDefaultContext)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ RTL_Impl_GetDefaultContext( pBasic, rPar, bWrite );
+}
+
+
+RTLFUNC(Join)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ USHORT nParCount = rPar.Count();
+ if ( nParCount != 3 && nParCount != 2 )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+ SbxBase* pParObj = rPar.Get(1)->GetObject();
+ SbxDimArray* pArr = PTR_CAST(SbxDimArray,pParObj);
+ if( pArr )
+ {
+ if( pArr->GetDims() != 1 )
+ StarBASIC::Error( SbERR_WRONG_DIMS ); // Syntax Error?!
+
+ String aDelim;
+ if( nParCount == 3 )
+ aDelim = rPar.Get(2)->GetString();
+ else
+ aDelim = String::CreateFromAscii( " " );
+
+ String aRetStr;
+ short nLower, nUpper;
+ pArr->GetDim( 1, nLower, nUpper );
+ for( short i = nLower ; i <= nUpper ; ++i )
+ {
+ String aStr = pArr->Get( &i )->GetString();
+ aRetStr += aStr;
+ if( i != nUpper )
+ aRetStr += aDelim;
+ }
+ rPar.Get(0)->PutString( aRetStr );
+ }
+ else
+ StarBASIC::Error( SbERR_MUST_HAVE_DIMS );
+}
+
+
+RTLFUNC(Split)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ USHORT nParCount = rPar.Count();
+ if ( nParCount < 2 )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+
+ String aExpression = rPar.Get(1)->GetString();
+ short nArraySize = 0;
+ StringVector vRet;
+ if( aExpression.Len() )
+ {
+ String aDelim;
+ if( nParCount >= 3 )
+ aDelim = rPar.Get(2)->GetString();
+ else
+ aDelim = String::CreateFromAscii( " " );
+
+ INT32 nCount = -1;
+ if( nParCount == 4 )
+ nCount = rPar.Get(3)->GetLong();
+
+ xub_StrLen nDelimLen = aDelim.Len();
+ if( nDelimLen )
+ {
+ xub_StrLen iSearch = STRING_NOTFOUND;
+ xub_StrLen iStart = 0;
+ do
+ {
+ bool bBreak = false;
+ if( nCount >= 0 && nArraySize == nCount - 1 )
+ bBreak = true;
+
+ iSearch = aExpression.Search( aDelim, iStart );
+ String aSubStr;
+ if( iSearch != STRING_NOTFOUND && !bBreak )
+ {
+ aSubStr = aExpression.Copy( iStart, iSearch - iStart );
+ iStart = iSearch + nDelimLen;
+ }
+ else
+ {
+ aSubStr = aExpression.Copy( iStart );
+ }
+ vRet.push_back( aSubStr );
+ nArraySize++;
+
+ if( bBreak )
+ break;
+ }
+ while( iSearch != STRING_NOTFOUND );
+ }
+ else
+ {
+ vRet.push_back( aExpression );
+ nArraySize = 1;
+ }
+ }
+
+ SbxDimArray* pArray = new SbxDimArray( SbxVARIANT );
+ pArray->unoAddDim( 0, nArraySize-1 );
+
+ // Parameter ins Array uebernehmen
+ for( short i = 0 ; i < nArraySize ; i++ )
+ {
+ SbxVariableRef xVar = new SbxVariable( SbxVARIANT );
+ xVar->PutString( vRet[i] );
+ pArray->Put( (SbxVariable*)xVar, &i );
+ }
+
+ // Array zurueckliefern
+ SbxVariableRef refVar = rPar.Get(0);
+ USHORT nFlags = refVar->GetFlags();
+ refVar->ResetFlag( SBX_FIXED );
+ refVar->PutObject( pArray );
+ refVar->SetFlags( nFlags );
+ refVar->SetParameters( NULL );
+}
+
+// MonthName(month[, abbreviate])
+RTLFUNC(MonthName)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ USHORT nParCount = rPar.Count();
+ if( nParCount != 2 && nParCount != 3 )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+
+ Reference< XCalendar > xCalendar = getLocaleCalendar();
+ if( !xCalendar.is() )
+ {
+ StarBASIC::Error( SbERR_INTERNAL_ERROR );
+ return;
+ }
+ Sequence< CalendarItem > aMonthSeq = xCalendar->getMonths();
+ sal_Int32 nMonthCount = aMonthSeq.getLength();
+
+ INT16 nVal = rPar.Get(1)->GetInteger();
+ if( nVal < 1 || nVal > nMonthCount )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+
+ BOOL bAbbreviate = false;
+ if( nParCount == 3 )
+ bAbbreviate = rPar.Get(2)->GetBool();
+
+ const CalendarItem* pCalendarItems = aMonthSeq.getConstArray();
+ const CalendarItem& rItem = pCalendarItems[nVal - 1];
+
+ ::rtl::OUString aRetStr = ( bAbbreviate ? rItem.AbbrevName : rItem.FullName );
+ rPar.Get(0)->PutString( String(aRetStr) );
+}
+
+// WeekdayName(weekday, abbreviate, firstdayofweek)
+RTLFUNC(WeekdayName)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ USHORT nParCount = rPar.Count();
+ if( nParCount < 2 || nParCount > 4 )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+
+ Reference< XCalendar > xCalendar = getLocaleCalendar();
+ if( !xCalendar.is() )
+ {
+ StarBASIC::Error( SbERR_INTERNAL_ERROR );
+ return;
+ }
+
+ Sequence< CalendarItem > aDaySeq = xCalendar->getDays();
+ INT16 nDayCount = (INT16)aDaySeq.getLength();
+ INT16 nDay = rPar.Get(1)->GetInteger();
+ INT16 nFirstDay = 0;
+ if( nParCount == 4 )
+ {
+ nFirstDay = rPar.Get(3)->GetInteger();
+ if( nFirstDay < 0 || nFirstDay > 7 )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+ }
+ if( nFirstDay == 0 )
+ nFirstDay = INT16( xCalendar->getFirstDayOfWeek() + 1 );
+
+ nDay = 1 + (nDay + nDayCount + nFirstDay - 2) % nDayCount;
+ if( nDay < 1 || nDay > nDayCount )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+
+ BOOL bAbbreviate = false;
+ if( nParCount >= 3 )
+ {
+ SbxVariable* pPar2 = rPar.Get(2);
+ if( !pPar2->IsErr() )
+ bAbbreviate = pPar2->GetBool();
+ }
+
+ const CalendarItem* pCalendarItems = aDaySeq.getConstArray();
+ const CalendarItem& rItem = pCalendarItems[nDay - 1];
+
+ ::rtl::OUString aRetStr = ( bAbbreviate ? rItem.AbbrevName : rItem.FullName );
+ rPar.Get(0)->PutString( String(aRetStr) );
+}
+
+INT16 implGetWeekDay( double aDate, bool bFirstDayParam = false, INT16 nFirstDay = 0 )
+{
+ Date aRefDate( 1,1,1900 );
+ long nDays = (long) aDate;
+ nDays -= 2; // normieren: 1.1.1900 => 0
+ aRefDate += nDays;
+ DayOfWeek aDay = aRefDate.GetDayOfWeek();
+ INT16 nDay;
+ if ( aDay != SUNDAY )
+ nDay = (INT16)aDay + 2;
+ else
+ nDay = 1; // 1==Sonntag
+
+ // #117253 Optional 2. parameter "firstdayofweek"
+ if( bFirstDayParam )
+ {
+ if( nFirstDay < 0 || nFirstDay > 7 )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return 0;
+ }
+ if( nFirstDay == 0 )
+ {
+ Reference< XCalendar > xCalendar = getLocaleCalendar();
+ if( !xCalendar.is() )
+ {
+ StarBASIC::Error( SbERR_INTERNAL_ERROR );
+ return 0;
+ }
+ nFirstDay = INT16( xCalendar->getFirstDayOfWeek() + 1 );
+ }
+ nDay = 1 + (nDay + 7 - nFirstDay) % 7;
+ }
+ return nDay;
+}
+
+RTLFUNC(Weekday)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ USHORT nParCount = rPar.Count();
+ if ( nParCount < 2 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ else
+ {
+ double aDate = rPar.Get(1)->GetDate();
+
+ bool bFirstDay = false;
+ INT16 nFirstDay = 0;
+ if ( nParCount > 2 )
+ {
+ nFirstDay = rPar.Get(2)->GetInteger();
+ bFirstDay = true;
+ }
+ INT16 nDay = implGetWeekDay( aDate, bFirstDay, nFirstDay );
+ rPar.Get(0)->PutInteger( nDay );
+ }
+}
+
+
+enum Interval
+{
+ INTERVAL_NONE,
+ INTERVAL_YYYY,
+ INTERVAL_Q,
+ INTERVAL_M,
+ INTERVAL_Y,
+ INTERVAL_D,
+ INTERVAL_W,
+ INTERVAL_WW,
+ INTERVAL_H,
+ INTERVAL_N,
+ INTERVAL_S
+};
+
+struct IntervalInfo
+{
+ Interval meInterval;
+ const char* mpStringCode;
+ double mdValue;
+ bool mbSimple;
+
+ IntervalInfo( Interval eInterval, const char* pStringCode, double dValue, bool bSimple )
+ : meInterval( eInterval )
+ , mpStringCode( pStringCode )
+ , mdValue( dValue )
+ , mbSimple( bSimple )
+ {}
+};
+
+static IntervalInfo pIntervalTable[] =
+{
+ IntervalInfo( INTERVAL_YYYY, "yyyy", 0.0, false ), // Year
+ IntervalInfo( INTERVAL_Q, "q", 0.0, false ), // Quarter
+ IntervalInfo( INTERVAL_M, "m", 0.0, false ), // Month
+ IntervalInfo( INTERVAL_Y, "y", 1.0, true ), // Day of year
+ IntervalInfo( INTERVAL_D, "d", 1.0, true ), // Day
+ IntervalInfo( INTERVAL_W, "w", 1.0, true ), // Weekday
+ IntervalInfo( INTERVAL_WW, "ww", 7.0, true ), // Week
+ IntervalInfo( INTERVAL_H, "h", (1.0 / 24.0), true ), // Hour
+ IntervalInfo( INTERVAL_N, "n", (1.0 / 1440.0), true), // Minute
+ IntervalInfo( INTERVAL_S, "s", (1.0 / 86400.0), true ), // Second
+ IntervalInfo( INTERVAL_NONE, NULL, 0.0, false )
+};
+
+IntervalInfo* getIntervalInfo( const String& rStringCode )
+{
+ IntervalInfo* pInfo = NULL;
+ INT16 i = 0;
+ while( (pInfo = pIntervalTable + i)->mpStringCode != NULL )
+ {
+ if( rStringCode.EqualsIgnoreCaseAscii( pInfo->mpStringCode ) )
+ break;
+ i++;
+ }
+ return pInfo;
+}
+
+// From methods.cxx
+BOOL implDateSerial( INT16 nYear, INT16 nMonth, INT16 nDay, double& rdRet );
+INT16 implGetDateDay( double aDate );
+INT16 implGetDateMonth( double aDate );
+INT16 implGetDateYear( double aDate );
+
+INT16 implGetHour( double dDate );
+INT16 implGetMinute( double dDate );
+INT16 implGetSecond( double dDate );
+
+
+inline void implGetDayMonthYear( INT16& rnYear, INT16& rnMonth, INT16& rnDay, double dDate )
+{
+ rnDay = implGetDateDay( dDate );
+ rnMonth = implGetDateMonth( dDate );
+ rnYear = implGetDateYear( dDate );
+}
+
+inline INT16 limitToINT16( INT32 n32 )
+{
+ if( n32 > 32767 )
+ n32 = 32767;
+ else if( n32 < -32768 )
+ n32 = -32768;
+ return (INT16)n32;
+}
+
+RTLFUNC(DateAdd)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ USHORT nParCount = rPar.Count();
+ if( nParCount != 4 )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+
+ String aStringCode = rPar.Get(1)->GetString();
+ IntervalInfo* pInfo = getIntervalInfo( aStringCode );
+ if( !pInfo )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+
+ INT32 lNumber = rPar.Get(2)->GetLong();
+ double dDate = rPar.Get(3)->GetDate();
+ double dNewDate = 0;
+ if( pInfo->mbSimple )
+ {
+ double dAdd = pInfo->mdValue * lNumber;
+ dNewDate = dDate + dAdd;
+ }
+ else
+ {
+ // Keep hours, minutes, seconds
+ double dHoursMinutesSeconds = dDate - floor( dDate );
+
+ BOOL bOk = TRUE;
+ INT16 nYear, nMonth, nDay;
+ INT16 nTargetYear16 = 0, nTargetMonth = 0;
+ implGetDayMonthYear( nYear, nMonth, nDay, dDate );
+ switch( pInfo->meInterval )
+ {
+ case INTERVAL_YYYY:
+ {
+ INT32 nTargetYear = lNumber + nYear;
+ nTargetYear16 = limitToINT16( nTargetYear );
+ nTargetMonth = nMonth;
+ bOk = implDateSerial( nTargetYear16, nTargetMonth, nDay, dNewDate );
+ break;
+ }
+ case INTERVAL_Q:
+ case INTERVAL_M:
+ {
+ bool bNeg = (lNumber < 0);
+ if( bNeg )
+ lNumber = -lNumber;
+ INT32 nYearsAdd;
+ INT16 nMonthAdd;
+ if( pInfo->meInterval == INTERVAL_Q )
+ {
+ nYearsAdd = lNumber / 4;
+ nMonthAdd = (INT16)( 3 * (lNumber % 4) );
+ }
+ else
+ {
+ nYearsAdd = lNumber / 12;
+ nMonthAdd = (INT16)( lNumber % 12 );
+ }
+
+ INT32 nTargetYear;
+ if( bNeg )
+ {
+ nTargetMonth = nMonth - nMonthAdd;
+ if( nTargetMonth <= 0 )
+ {
+ nTargetMonth += 12;
+ nYearsAdd++;
+ }
+ nTargetYear = (INT32)nYear - nYearsAdd;
+ }
+ else
+ {
+ nTargetMonth = nMonth + nMonthAdd;
+ if( nTargetMonth > 12 )
+ {
+ nTargetMonth -= 12;
+ nYearsAdd++;
+ }
+ nTargetYear = (INT32)nYear + nYearsAdd;
+ }
+ nTargetYear16 = limitToINT16( nTargetYear );
+ bOk = implDateSerial( nTargetYear16, nTargetMonth, nDay, dNewDate );
+ break;
+ }
+ default: break;
+ }
+
+ if( bOk )
+ {
+ // Overflow?
+ INT16 nNewYear, nNewMonth, nNewDay;
+ implGetDayMonthYear( nNewYear, nNewMonth, nNewDay, dNewDate );
+ if( nNewYear > 9999 || nNewYear < 100 )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+ INT16 nCorrectionDay = nDay;
+ while( nNewMonth > nTargetMonth )
+ {
+ nCorrectionDay--;
+ implDateSerial( nTargetYear16, nTargetMonth, nCorrectionDay, dNewDate );
+ implGetDayMonthYear( nNewYear, nNewMonth, nNewDay, dNewDate );
+ }
+ dNewDate += dHoursMinutesSeconds;
+ }
+ }
+
+ rPar.Get(0)->PutDate( dNewDate );
+}
+
+inline double RoundImpl( double d )
+{
+ return ( d >= 0 ) ? floor( d + 0.5 ) : -floor( -d + 0.5 );
+}
+
+RTLFUNC(DateDiff)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ // DateDiff(interval, date1, date2[, firstdayofweek[, firstweekofyear]])
+
+ USHORT nParCount = rPar.Count();
+ if( nParCount < 4 || nParCount > 6 )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+
+ String aStringCode = rPar.Get(1)->GetString();
+ IntervalInfo* pInfo = getIntervalInfo( aStringCode );
+ if( !pInfo )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+
+ double dDate1 = rPar.Get(2)->GetDate();
+ double dDate2 = rPar.Get(3)->GetDate();
+
+ double dRet = 0.0;
+ switch( pInfo->meInterval )
+ {
+ case INTERVAL_YYYY:
+ {
+ INT16 nYear1 = implGetDateYear( dDate1 );
+ INT16 nYear2 = implGetDateYear( dDate2 );
+ dRet = nYear2 - nYear1;
+ break;
+ }
+ case INTERVAL_Q:
+ {
+ INT16 nYear1 = implGetDateYear( dDate1 );
+ INT16 nYear2 = implGetDateYear( dDate2 );
+ INT16 nQ1 = 1 + (implGetDateMonth( dDate1 ) - 1) / 3;
+ INT16 nQ2 = 1 + (implGetDateMonth( dDate2 ) - 1) / 3;
+ INT16 nQGes1 = 4 * nYear1 + nQ1;
+ INT16 nQGes2 = 4 * nYear2 + nQ2;
+ dRet = nQGes2 - nQGes1;
+ break;
+ }
+ case INTERVAL_M:
+ {
+ INT16 nYear1 = implGetDateYear( dDate1 );
+ INT16 nYear2 = implGetDateYear( dDate2 );
+ INT16 nMonth1 = implGetDateMonth( dDate1 );
+ INT16 nMonth2 = implGetDateMonth( dDate2 );
+ INT16 nMonthGes1 = 12 * nYear1 + nMonth1;
+ INT16 nMonthGes2 = 12 * nYear2 + nMonth2;
+ dRet = nMonthGes2 - nMonthGes1;
+ break;
+ }
+ case INTERVAL_Y:
+ case INTERVAL_D:
+ {
+ double dDays1 = floor( dDate1 );
+ double dDays2 = floor( dDate2 );
+ dRet = dDays2 - dDays1;
+ break;
+ }
+ case INTERVAL_W:
+ case INTERVAL_WW:
+ {
+ double dDays1 = floor( dDate1 );
+ double dDays2 = floor( dDate2 );
+ if( pInfo->meInterval == INTERVAL_WW )
+ {
+ INT16 nFirstDay = 1; // Default
+ if( nParCount >= 5 )
+ {
+ nFirstDay = rPar.Get(4)->GetInteger();
+ if( nFirstDay < 0 || nFirstDay > 7 )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+ if( nFirstDay == 0 )
+ {
+ Reference< XCalendar > xCalendar = getLocaleCalendar();
+ if( !xCalendar.is() )
+ {
+ StarBASIC::Error( SbERR_INTERNAL_ERROR );
+ return;
+ }
+ nFirstDay = INT16( xCalendar->getFirstDayOfWeek() + 1 );
+ }
+ }
+ INT16 nDay1 = implGetWeekDay( dDate1 );
+ INT16 nDay1_Diff = nDay1 - nFirstDay;
+ if( nDay1_Diff < 0 )
+ nDay1_Diff += 7;
+ dDays1 -= nDay1_Diff;
+
+ INT16 nDay2 = implGetWeekDay( dDate2 );
+ INT16 nDay2_Diff = nDay2 - nFirstDay;
+ if( nDay2_Diff < 0 )
+ nDay2_Diff += 7;
+ dDays2 -= nDay2_Diff;
+ }
+
+ double dDiff = dDays2 - dDays1;
+ dRet = ( dDiff >= 0 ) ? floor( dDiff / 7.0 ) : -floor( -dDiff / 7.0 );
+ break;
+ }
+ case INTERVAL_H:
+ {
+ double dFactor = 24.0;
+ dRet = RoundImpl( dFactor * (dDate2 - dDate1) );
+ break;
+ }
+ case INTERVAL_N:
+ {
+ double dFactor =1440.0;
+ dRet = RoundImpl( dFactor * (dDate2 - dDate1) );
+ break;
+ }
+ case INTERVAL_S:
+ {
+ double dFactor = 86400.0;
+ dRet = RoundImpl( dFactor * (dDate2 - dDate1) );
+ break;
+ }
+ case INTERVAL_NONE:
+ break;
+ }
+ rPar.Get(0)->PutDouble( dRet );
+}
+
+double implGetDateOfFirstDayInFirstWeek
+ ( INT16 nYear, INT16& nFirstDay, INT16& nFirstWeek, bool* pbError = NULL )
+{
+ SbError nError = 0;
+ if( nFirstDay < 0 || nFirstDay > 7 )
+ nError = SbERR_BAD_ARGUMENT;
+
+ if( nFirstWeek < 0 || nFirstWeek > 3 )
+ nError = SbERR_BAD_ARGUMENT;
+
+ Reference< XCalendar > xCalendar;
+ if( nFirstDay == 0 || nFirstWeek == 0 )
+ {
+ xCalendar = getLocaleCalendar();
+ if( !xCalendar.is() )
+ nError = SbERR_BAD_ARGUMENT;
+ }
+
+ if( nError != 0 )
+ {
+ StarBASIC::Error( nError );
+ if( pbError )
+ *pbError = true;
+ return 0.0;
+ }
+
+ if( nFirstDay == 0 )
+ nFirstDay = INT16( xCalendar->getFirstDayOfWeek() + 1 );
+
+ INT16 nFirstWeekMinDays = 0; // Not used for vbFirstJan1 = default
+ if( nFirstWeek == 0 )
+ {
+ nFirstWeekMinDays = xCalendar->getMinimumNumberOfDaysForFirstWeek();
+ if( nFirstWeekMinDays == 1 )
+ {
+ nFirstWeekMinDays = 0;
+ nFirstWeek = 1;
+ }
+ else if( nFirstWeekMinDays == 4 )
+ nFirstWeek = 2;
+ else if( nFirstWeekMinDays == 7 )
+ nFirstWeek = 3;
+ }
+ else if( nFirstWeek == 2 )
+ nFirstWeekMinDays = 4; // vbFirstFourDays
+ else if( nFirstWeek == 3 )
+ nFirstWeekMinDays = 7; // vbFirstFourDays
+
+ double dBaseDate;
+ implDateSerial( nYear, 1, 1, dBaseDate );
+ double dRetDate = dBaseDate;
+
+ INT16 nWeekDay0101 = implGetWeekDay( dBaseDate );
+ INT16 nDayDiff = nWeekDay0101 - nFirstDay;
+ if( nDayDiff < 0 )
+ nDayDiff += 7;
+
+ if( nFirstWeekMinDays )
+ {
+ INT16 nThisWeeksDaysInYearCount = 7 - nDayDiff;
+ if( nThisWeeksDaysInYearCount < nFirstWeekMinDays )
+ nDayDiff -= 7;
+ }
+ dRetDate = dBaseDate - nDayDiff;
+ return dRetDate;
+}
+
+RTLFUNC(DatePart)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ // DatePart(interval, date[,firstdayofweek[, firstweekofyear]])
+
+ USHORT nParCount = rPar.Count();
+ if( nParCount < 3 || nParCount > 5 )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+
+ String aStringCode = rPar.Get(1)->GetString();
+ IntervalInfo* pInfo = getIntervalInfo( aStringCode );
+ if( !pInfo )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+
+ double dDate = rPar.Get(2)->GetDate();
+
+ INT32 nRet = 0;
+ switch( pInfo->meInterval )
+ {
+ case INTERVAL_YYYY:
+ {
+ nRet = implGetDateYear( dDate );
+ break;
+ }
+ case INTERVAL_Q:
+ {
+ nRet = 1 + (implGetDateMonth( dDate ) - 1) / 3;
+ break;
+ }
+ case INTERVAL_M:
+ {
+ nRet = implGetDateMonth( dDate );
+ break;
+ }
+ case INTERVAL_Y:
+ {
+ INT16 nYear = implGetDateYear( dDate );
+ double dBaseDate;
+ implDateSerial( nYear, 1, 1, dBaseDate );
+ nRet = 1 + INT32( dDate - dBaseDate );
+ break;
+ }
+ case INTERVAL_D:
+ {
+ nRet = implGetDateDay( dDate );
+ break;
+ }
+ case INTERVAL_W:
+ {
+ bool bFirstDay = false;
+ INT16 nFirstDay = 1; // Default
+ if( nParCount >= 4 )
+ {
+ nFirstDay = rPar.Get(3)->GetInteger();
+ bFirstDay = true;
+ }
+ nRet = implGetWeekDay( dDate, bFirstDay, nFirstDay );
+ break;
+ }
+ case INTERVAL_WW:
+ {
+ INT16 nFirstDay = 1; // Default
+ if( nParCount >= 4 )
+ nFirstDay = rPar.Get(3)->GetInteger();
+
+ INT16 nFirstWeek = 1; // Default
+ if( nParCount == 5 )
+ nFirstWeek = rPar.Get(4)->GetInteger();
+
+ INT16 nYear = implGetDateYear( dDate );
+ bool bError = false;
+ double dYearFirstDay = implGetDateOfFirstDayInFirstWeek( nYear, nFirstDay, nFirstWeek, &bError );
+ if( !bError )
+ {
+ if( dYearFirstDay > dDate )
+ {
+ // Date belongs to last year's week
+ dYearFirstDay = implGetDateOfFirstDayInFirstWeek( nYear - 1, nFirstDay, nFirstWeek );
+ }
+ else if( nFirstWeek != 1 )
+ {
+ // Check if date belongs to next year
+ double dNextYearFirstDay = implGetDateOfFirstDayInFirstWeek( nYear + 1, nFirstDay, nFirstWeek );
+ if( dDate >= dNextYearFirstDay )
+ dYearFirstDay = dNextYearFirstDay;
+ }
+
+ // Calculate week
+ double dDiff = dDate - dYearFirstDay;
+ nRet = 1 + INT32( dDiff / 7 );
+ }
+ break;
+ }
+ case INTERVAL_H:
+ {
+ nRet = implGetHour( dDate );
+ break;
+ }
+ case INTERVAL_N:
+ {
+ nRet = implGetMinute( dDate );
+ break;
+ }
+ case INTERVAL_S:
+ {
+ nRet = implGetSecond( dDate );
+ break;
+ }
+ case INTERVAL_NONE:
+ break;
+ }
+ rPar.Get(0)->PutLong( nRet );
+}
+
+// FormatDateTime(Date[,NamedFormat])
+RTLFUNC(FormatDateTime)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ USHORT nParCount = rPar.Count();
+ if( nParCount < 2 || nParCount > 3 )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+
+ double dDate = rPar.Get(1)->GetDate();
+ INT16 nNamedFormat = 0;
+ if( nParCount > 2 )
+ {
+ nNamedFormat = rPar.Get(2)->GetInteger();
+ if( nNamedFormat < 0 || nNamedFormat > 4 )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+ }
+
+ Reference< XCalendar > xCalendar = getLocaleCalendar();
+ if( !xCalendar.is() )
+ {
+ StarBASIC::Error( SbERR_INTERNAL_ERROR );
+ return;
+ }
+
+ String aRetStr;
+ SbxVariableRef pSbxVar = new SbxVariable( SbxSTRING );
+ switch( nNamedFormat )
+ {
+ // GeneralDate:
+ // Display a date and/or time. If there is a date part,
+ // display it as a short date. If there is a time part,
+ // display it as a long time. If present, both parts are displayed.
+
+ // 12/21/2004 11:24:50 AM
+ // 21.12.2004 12:13:51
+ case 0:
+ pSbxVar->PutDate( dDate );
+ aRetStr = pSbxVar->GetString();
+ break;
+
+ // LongDate: Display a date using the long date format specified
+ // in your computer's regional settings.
+ // Tuesday, December 21, 2004
+ // Dienstag, 21. December 2004
+ case 1:
+ {
+ SvNumberFormatter* pFormatter = NULL;
+ if( pINST )
+ pFormatter = pINST->GetNumberFormatter();
+ else
+ {
+ sal_uInt32 n; // Dummy
+ SbiInstance::PrepareNumberFormatter( pFormatter, n, n, n );
+ }
+
+ LanguageType eLangType = GetpApp()->GetSettings().GetLanguage();
+ ULONG nIndex = pFormatter->GetFormatIndex( NF_DATE_SYSTEM_LONG, eLangType );
+ Color* pCol;
+ pFormatter->GetOutputString( dDate, nIndex, aRetStr, &pCol );
+
+ if( !pINST )
+ delete pFormatter;
+
+ break;
+ }
+
+ // ShortDate: Display a date using the short date format specified
+ // in your computer's regional settings.
+ // 12/21/2004
+ // 21.12.2004
+ case 2:
+ pSbxVar->PutDate( floor(dDate) );
+ aRetStr = pSbxVar->GetString();
+ break;
+
+ // LongTime: Display a time using the time format specified
+ // in your computer's regional settings.
+ // 11:24:50 AM
+ // 12:13:51
+ case 3:
+ // ShortTime: Display a time using the 24-hour format (hh:mm).
+ // 11:24
+ case 4:
+ double n;
+ double dTime = modf( dDate, &n );
+ pSbxVar->PutDate( dTime );
+ if( nNamedFormat == 3 )
+ aRetStr = pSbxVar->GetString();
+ else
+ aRetStr = pSbxVar->GetString().Copy( 0, 5 );
+ break;
+ }
+
+ rPar.Get(0)->PutString( aRetStr );
+}
+
+RTLFUNC(Round)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ USHORT nParCount = rPar.Count();
+ if( nParCount != 2 && nParCount != 3 )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+
+ SbxVariable *pSbxVariable = rPar.Get(1);
+ double dVal = pSbxVariable->GetDouble();
+ double dRes = 0.0;
+ if( dVal != 0.0 )
+ {
+ bool bNeg = false;
+ if( dVal < 0.0 )
+ {
+ bNeg = true;
+ dVal = -dVal;
+ }
+
+ INT16 numdecimalplaces = 0;
+ if( nParCount == 3 )
+ {
+ numdecimalplaces = rPar.Get(2)->GetInteger();
+ if( numdecimalplaces < 0 || numdecimalplaces > 22 )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+ }
+
+ if( numdecimalplaces == 0 )
+ {
+ dRes = floor( dVal + 0.5 );
+ }
+ else
+ {
+ double dFactor = pow( 10.0, numdecimalplaces );
+ dVal *= dFactor;
+ dRes = floor( dVal + 0.5 );
+ dRes /= dFactor;
+ }
+
+ if( bNeg )
+ dRes = -dRes;
+ }
+ rPar.Get(0)->PutDouble( dRes );
+}
+
+RTLFUNC(StrReverse)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if ( rPar.Count() != 2 )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+
+ SbxVariable *pSbxVariable = rPar.Get(1);
+ if( pSbxVariable->IsNull() )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+
+ String aStr = pSbxVariable->GetString();
+ aStr.Reverse();
+ rPar.Get(0)->PutString( aStr );
+}
+
+RTLFUNC(CompatibilityMode)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ bool bEnabled = false;
+ USHORT nCount = rPar.Count();
+ if ( nCount != 1 && nCount != 2 )
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+
+ SbiInstance* pInst = pINST;
+ if( pInst )
+ {
+ if ( nCount == 2 )
+ pInst->EnableCompatibility( rPar.Get(1)->GetBool() );
+
+ bEnabled = pInst->IsCompatibility();
+ }
+ rPar.Get(0)->PutBool( bEnabled );
+}
+
+RTLFUNC(Input)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ // 2 parameters needed
+ if ( rPar.Count() < 3 )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+
+ USHORT nByteCount = rPar.Get(1)->GetUShort();
+ INT16 nFileNumber = rPar.Get(2)->GetInteger();
+
+ SbiIoSystem* pIosys = pINST->GetIoSystem();
+ SbiStream* pSbStrm = pIosys->GetStream( nFileNumber );
+ if ( !pSbStrm || !(pSbStrm->GetMode() & (SBSTRM_BINARY | SBSTRM_INPUT)) )
+ {
+ StarBASIC::Error( SbERR_BAD_CHANNEL );
+ return;
+ }
+
+ ByteString aByteBuffer;
+ SbError err = pSbStrm->Read( aByteBuffer, nByteCount, true );
+ if( !err )
+ err = pIosys->GetError();
+
+ if( err )
+ {
+ StarBASIC::Error( err );
+ return;
+ }
+ rPar.Get(0)->PutString( String( aByteBuffer, gsl_getSystemTextEncoding() ) );
+}
+
+// #115824
+RTLFUNC(Me)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ SbModule* pActiveModule = pINST->GetActiveModule();
+ SbClassModuleObject* pClassModuleObject = PTR_CAST(SbClassModuleObject,pActiveModule);
+ SbxVariableRef refVar = rPar.Get(0);
+ if( pClassModuleObject == NULL )
+ {
+ SbObjModule* pMod = PTR_CAST(SbObjModule,pActiveModule);
+ if ( pMod )
+ refVar->PutObject( pMod );
+ else
+ StarBASIC::Error( SbERR_INVALID_USAGE_OBJECT );
+ }
+ else
+ refVar->PutObject( pClassModuleObject );
+}
+
diff --git a/basic/source/runtime/props.cxx b/basic/source/runtime/props.cxx
new file mode 100644
index 000000000000..663d12fbcd72
--- /dev/null
+++ b/basic/source/runtime/props.cxx
@@ -0,0 +1,776 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+
+#include "runtime.hxx"
+#include "stdobj.hxx"
+#include "rtlproto.hxx"
+#include "errobject.hxx"
+
+
+// Properties und Methoden legen beim Get (bWrite = FALSE) den Returnwert
+// im Element 0 des Argv ab; beim Put (bWrite = TRUE) wird der Wert aus
+// Element 0 gespeichert.
+
+RTLFUNC(Erl)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get( 0 )->PutLong( StarBASIC::GetErl() );
+}
+
+RTLFUNC(Err)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ if( SbiRuntime::isVBAEnabled() )
+ {
+ rPar.Get( 0 )->PutObject( SbxErrObject::getErrObject() );
+ }
+ else
+ {
+ if( bWrite )
+ {
+ INT32 nVal = rPar.Get( 0 )->GetLong();
+ if( nVal <= 65535L )
+ StarBASIC::Error( StarBASIC::GetSfxFromVBError( (USHORT) nVal ) );
+ }
+ else
+ rPar.Get( 0 )->PutLong( StarBASIC::GetVBErrorCode( StarBASIC::GetErrBasic() ) );
+ }
+}
+
+RTLFUNC(False)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutBool( FALSE );
+}
+
+RTLFUNC(Empty)
+{
+ (void)pBasic;
+ (void)bWrite;
+ (void)rPar;
+}
+
+RTLFUNC(Nothing)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ // liefert eine leere Objekt-Variable.
+ rPar.Get( 0 )->PutObject( NULL );
+}
+
+RTLFUNC(Null)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ // liefert eine leere Objekt-Variable.
+ rPar.Get( 0 )->PutNull();
+}
+
+RTLFUNC(PI)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get( 0 )->PutDouble( F_PI );
+}
+
+RTLFUNC(True)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get( 0 )->PutBool( TRUE );
+}
+
+RTLFUNC(ATTR_NORMAL)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(0);
+}
+RTLFUNC(ATTR_READONLY)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(1);
+}
+RTLFUNC(ATTR_HIDDEN)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(2);
+}
+RTLFUNC(ATTR_SYSTEM)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(4);
+}
+RTLFUNC(ATTR_VOLUME)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(8);
+}
+RTLFUNC(ATTR_DIRECTORY)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(16);
+}
+RTLFUNC(ATTR_ARCHIVE)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(32);
+}
+
+RTLFUNC(V_EMPTY)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(0);
+}
+RTLFUNC(V_NULL)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(1);
+}
+RTLFUNC(V_INTEGER)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(2);
+}
+RTLFUNC(V_LONG)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(3);
+}
+RTLFUNC(V_SINGLE)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(4);
+}
+RTLFUNC(V_DOUBLE)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(5);
+}
+RTLFUNC(V_CURRENCY)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(6);
+}
+RTLFUNC(V_DATE)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(7);
+}
+RTLFUNC(V_STRING)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(8);
+}
+
+RTLFUNC(MB_OK)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(0);
+}
+RTLFUNC(MB_OKCANCEL)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(1);
+}
+RTLFUNC(MB_ABORTRETRYIGNORE)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(2);
+}
+RTLFUNC(MB_YESNOCANCEL)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(3);
+}
+RTLFUNC(MB_YESNO)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(4);
+}
+RTLFUNC(MB_RETRYCANCEL)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(5);
+}
+RTLFUNC(MB_ICONSTOP)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(16);
+}
+RTLFUNC(MB_ICONQUESTION)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(32);
+}
+RTLFUNC(MB_ICONEXCLAMATION)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(48);
+}
+RTLFUNC(MB_ICONINFORMATION)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(64);
+}
+RTLFUNC(MB_DEFBUTTON1)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(0);
+}
+RTLFUNC(MB_DEFBUTTON2)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(256);
+}
+RTLFUNC(MB_DEFBUTTON3)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(512);
+}
+RTLFUNC(MB_APPLMODAL)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(0);
+}
+RTLFUNC(MB_SYSTEMMODAL)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(4096);
+}
+
+RTLFUNC(IDOK)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(1);
+}
+
+RTLFUNC(IDCANCEL)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(2);
+}
+RTLFUNC(IDABORT)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(3);
+}
+RTLFUNC(IDRETRY)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(4);
+}
+RTLFUNC(IDYES)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(6);
+}
+RTLFUNC(IDNO)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(7);
+}
+
+RTLFUNC(CF_TEXT)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(1);
+}
+RTLFUNC(CF_BITMAP)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(2);
+}
+RTLFUNC(CF_METAFILEPICT)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(3);
+}
+
+RTLFUNC(TYP_AUTHORFLD)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(7);
+}
+RTLFUNC(TYP_CHAPTERFLD)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(4);
+}
+RTLFUNC(TYP_CONDTXTFLD)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(27);
+}
+RTLFUNC(TYP_DATEFLD)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(0);
+}
+RTLFUNC(TYP_DBFLD)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(19);
+}
+RTLFUNC(TYP_DBNAMEFLD)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(3);
+}
+RTLFUNC(TYP_DBNEXTSETFLD)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(24);
+}
+RTLFUNC(TYP_DBNUMSETFLD)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(25);
+}
+RTLFUNC(TYP_DBSETNUMBERFLD)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(26);
+}
+RTLFUNC(TYP_DDEFLD)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(14);
+}
+RTLFUNC(TYP_DOCINFOFLD)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(18);
+}
+RTLFUNC(TYP_DOCSTATFLD)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(6);
+}
+RTLFUNC(TYP_EXTUSERFLD)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(30);
+}
+RTLFUNC(TYP_FILENAMEFLD)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(2);
+}
+RTLFUNC(TYP_FIXDATEFLD)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(31);
+}
+RTLFUNC(TYP_FIXTIMEFLD)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(32);
+}
+RTLFUNC(TYP_FORMELFLD)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(10);
+}
+RTLFUNC(TYP_GETFLD)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(9);
+}
+RTLFUNC(TYP_GETREFFLD)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(13);
+}
+RTLFUNC(TYP_HIDDENPARAFLD)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(17);
+}
+RTLFUNC(TYP_HIDDENTXTFLD)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(11);
+}
+RTLFUNC(TYP_INPUTFLD)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(16);
+}
+RTLFUNC(TYP_MACROFLD)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(15);
+}
+RTLFUNC(TYP_NEXTPAGEFLD)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(28);
+}
+RTLFUNC(TYP_PAGENUMBERFLD)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(5);
+}
+RTLFUNC(TYP_POSTITFLD)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(21);
+}
+RTLFUNC(TYP_PREVPAGEFLD)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(29);
+}
+RTLFUNC(TYP_SEQFLD)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(23);
+}
+RTLFUNC(TYP_SETFLD)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(8);
+}
+RTLFUNC(TYP_SETINPFLD)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(33);
+}
+RTLFUNC(TYP_SETREFFLD)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(12);
+}
+RTLFUNC(TYP_TEMPLNAMEFLD)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(22);
+}
+RTLFUNC(TYP_TIMEFLD)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(1);
+}
+RTLFUNC(TYP_USERFLD)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(20);
+}
+RTLFUNC(TYP_USRINPFLD)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(34);
+}
+RTLFUNC(TYP_SETREFPAGEFLD)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(35);
+}
+RTLFUNC(TYP_GETREFPAGEFLD)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(36);
+}
+RTLFUNC(TYP_INTERNETFLD)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(37);
+}
+
+RTLFUNC(SET_ON)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(1);
+}
+RTLFUNC(SET_OFF)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(0);
+}
+RTLFUNC(TOGGLE)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(2);
+}
+
+RTLFUNC(FRAMEANCHORPAGE)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(1);
+}
+RTLFUNC(FRAMEANCHORPARA)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(14);
+}
+RTLFUNC(FRAMEANCHORCHAR)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(15);
+}
+
+RTLFUNC(CLEAR_ALLTABS)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(2);
+}
+RTLFUNC(CLEAR_TAB)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(1);
+}
+RTLFUNC(SET_TAB)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(0);
+}
+
+RTLFUNC(LINEPROP)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(0);
+}
+RTLFUNC(LINE_1)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(1);
+}
+RTLFUNC(LINE_15)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(2);
+}
+RTLFUNC(LINE_2)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(3);
+}
+
+RTLFUNC(TYP_JUMPEDITFLD)
+{
+ (void)pBasic;
+ (void)bWrite;
+
+ rPar.Get(0)->PutInteger(38);
+}
+
+
diff --git a/basic/source/runtime/rtlproto.hxx b/basic/source/runtime/rtlproto.hxx
new file mode 100644
index 000000000000..5437654f69a0
--- /dev/null
+++ b/basic/source/runtime/rtlproto.hxx
@@ -0,0 +1,349 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <basic/sbstar.hxx>
+
+#define RTLFUNC( name ) void SbRtl_##name( StarBASIC* pBasic, SbxArray& rPar, BOOL bWrite )
+#define RTLNAME( name ) &SbRtl_##name
+
+typedef void( *RtlCall ) ( StarBASIC* p, SbxArray& rArgs, BOOL bWrite );
+
+// Properties
+
+extern RTLFUNC(Date);
+extern RTLFUNC(Err);
+extern RTLFUNC(Erl);
+extern RTLFUNC(False);
+extern RTLFUNC(Empty);
+extern RTLFUNC(Nothing);
+extern RTLFUNC(Null);
+extern RTLFUNC(True);
+
+extern RTLFUNC(ATTR_NORMAL);
+extern RTLFUNC(ATTR_READONLY);
+extern RTLFUNC(ATTR_HIDDEN);
+extern RTLFUNC(ATTR_SYSTEM);
+extern RTLFUNC(ATTR_VOLUME);
+extern RTLFUNC(ATTR_DIRECTORY);
+extern RTLFUNC(ATTR_ARCHIVE);
+
+extern RTLFUNC(V_EMPTY);
+extern RTLFUNC(V_NULL);
+extern RTLFUNC(V_INTEGER);
+extern RTLFUNC(V_LONG);
+extern RTLFUNC(V_SINGLE);
+extern RTLFUNC(V_DOUBLE);
+extern RTLFUNC(V_CURRENCY);
+extern RTLFUNC(V_DATE);
+extern RTLFUNC(V_STRING);
+
+extern RTLFUNC(MB_OK);
+extern RTLFUNC(MB_OKCANCEL);
+extern RTLFUNC(MB_ABORTRETRYIGNORE);
+extern RTLFUNC(MB_YESNOCANCEL);
+extern RTLFUNC(MB_YESNO);
+extern RTLFUNC(MB_RETRYCANCEL);
+extern RTLFUNC(MB_ICONSTOP);
+extern RTLFUNC(MB_ICONQUESTION);
+extern RTLFUNC(MB_ICONEXCLAMATION);
+extern RTLFUNC(MB_ICONINFORMATION);
+extern RTLFUNC(MB_DEFBUTTON1);
+extern RTLFUNC(MB_DEFBUTTON2);
+extern RTLFUNC(MB_DEFBUTTON3);
+extern RTLFUNC(MB_APPLMODAL);
+extern RTLFUNC(MB_SYSTEMMODAL);
+
+extern RTLFUNC(IDOK);
+extern RTLFUNC(IDCANCEL);
+extern RTLFUNC(IDABORT);
+extern RTLFUNC(IDRETRY);
+extern RTLFUNC(IDYES);
+extern RTLFUNC(IDNO);
+
+extern RTLFUNC(CF_TEXT);
+extern RTLFUNC(CF_BITMAP);
+extern RTLFUNC(CF_METAFILEPICT);
+
+extern RTLFUNC(PI);
+
+extern RTLFUNC(SET_OFF);
+extern RTLFUNC(SET_ON);
+extern RTLFUNC(TOGGLE);
+
+extern RTLFUNC(TYP_AUTHORFLD);
+extern RTLFUNC(TYP_CHAPTERFLD);
+extern RTLFUNC(TYP_CONDTXTFLD);
+extern RTLFUNC(TYP_DATEFLD);
+extern RTLFUNC(TYP_DBFLD);
+extern RTLFUNC(TYP_DBNAMEFLD);
+extern RTLFUNC(TYP_DBNEXTSETFLD);
+extern RTLFUNC(TYP_DBNUMSETFLD);
+extern RTLFUNC(TYP_DBSETNUMBERFLD);
+extern RTLFUNC(TYP_DDEFLD);
+extern RTLFUNC(TYP_DOCINFOFLD);
+extern RTLFUNC(TYP_DOCSTATFLD);
+extern RTLFUNC(TYP_EXTUSERFLD);
+extern RTLFUNC(TYP_FILENAMEFLD);
+extern RTLFUNC(TYP_FIXDATEFLD);
+extern RTLFUNC(TYP_FIXTIMEFLD);
+extern RTLFUNC(TYP_FORMELFLD);
+extern RTLFUNC(TYP_GETFLD);
+extern RTLFUNC(TYP_GETREFFLD);
+extern RTLFUNC(TYP_HIDDENPARAFLD);
+extern RTLFUNC(TYP_HIDDENTXTFLD);
+extern RTLFUNC(TYP_INPUTFLD);
+extern RTLFUNC(TYP_MACROFLD);
+extern RTLFUNC(TYP_NEXTPAGEFLD);
+extern RTLFUNC(TYP_PAGENUMBERFLD);
+extern RTLFUNC(TYP_POSTITFLD);
+extern RTLFUNC(TYP_PREVPAGEFLD);
+extern RTLFUNC(TYP_SEQFLD);
+extern RTLFUNC(TYP_SETFLD);
+extern RTLFUNC(TYP_SETINPFLD);
+extern RTLFUNC(TYP_SETREFFLD);
+extern RTLFUNC(TYP_TEMPLNAMEFLD);
+extern RTLFUNC(TYP_TIMEFLD);
+extern RTLFUNC(TYP_USERFLD);
+extern RTLFUNC(TYP_USRINPFLD);
+extern RTLFUNC(TYP_SETREFPAGEFLD);
+extern RTLFUNC(TYP_GETREFPAGEFLD);
+extern RTLFUNC(TYP_INTERNETFLD);
+extern RTLFUNC(TYP_JUMPEDITFLD);
+
+extern RTLFUNC(FRAMEANCHORPAGE);
+extern RTLFUNC(FRAMEANCHORPARA);
+extern RTLFUNC(FRAMEANCHORCHAR);
+
+extern RTLFUNC(CLEAR_ALLTABS);
+extern RTLFUNC(CLEAR_TAB);
+extern RTLFUNC(SET_TAB);
+
+extern RTLFUNC(LINEPROP);
+extern RTLFUNC(LINE_1);
+extern RTLFUNC(LINE_15);
+extern RTLFUNC(LINE_2);
+
+// Methoden
+
+extern RTLFUNC(CreateObject);
+extern RTLFUNC(Error);
+extern RTLFUNC(Sin);
+extern RTLFUNC(Abs);
+extern RTLFUNC(Asc);
+extern RTLFUNC(Atn);
+extern RTLFUNC(Chr);
+extern RTLFUNC(Cos);
+extern RTLFUNC(CurDir);
+extern RTLFUNC(ChDir); // JSM
+extern RTLFUNC(ChDrive); // JSM
+extern RTLFUNC(FileCopy); // JSM
+extern RTLFUNC(Kill); // JSM
+extern RTLFUNC(MkDir); // JSM
+extern RTLFUNC(RmDir); // JSM
+extern RTLFUNC(SendKeys); // JSM
+extern RTLFUNC(DimArray);
+extern RTLFUNC(Dir);
+extern RTLFUNC(DoEvents);
+extern RTLFUNC(Exp);
+extern RTLFUNC(FileLen);
+extern RTLFUNC(Fix);
+extern RTLFUNC(Hex);
+extern RTLFUNC(Input);
+extern RTLFUNC(InStr);
+extern RTLFUNC(InStrRev);
+extern RTLFUNC(Int);
+extern RTLFUNC(Join);
+extern RTLFUNC(LCase);
+extern RTLFUNC(Left);
+extern RTLFUNC(Log);
+extern RTLFUNC(LTrim);
+extern RTLFUNC(Mid);
+extern RTLFUNC(Oct);
+extern RTLFUNC(Replace);
+extern RTLFUNC(Right);
+extern RTLFUNC(RTrim);
+extern RTLFUNC(RTL);
+extern RTLFUNC(Sgn);
+extern RTLFUNC(Space);
+extern RTLFUNC(Split);
+extern RTLFUNC(Sqr);
+extern RTLFUNC(Str);
+extern RTLFUNC(StrComp);
+extern RTLFUNC(String);
+extern RTLFUNC(StrReverse);
+extern RTLFUNC(Tan);
+extern RTLFUNC(UCase);
+extern RTLFUNC(Val);
+extern RTLFUNC(Len);
+extern RTLFUNC(Spc);
+extern RTLFUNC(DateSerial);
+extern RTLFUNC(TimeSerial);
+extern RTLFUNC(DateValue);
+extern RTLFUNC(TimeValue);
+extern RTLFUNC(Day);
+extern RTLFUNC(Hour);
+extern RTLFUNC(Minute);
+extern RTLFUNC(Month);
+extern RTLFUNC(MonthName);
+extern RTLFUNC(Now);
+extern RTLFUNC(Second);
+extern RTLFUNC(Time);
+extern RTLFUNC(Timer);
+extern RTLFUNC(Weekday);
+extern RTLFUNC(WeekdayName);
+extern RTLFUNC(Year);
+extern RTLFUNC(Date);
+extern RTLFUNC(InputBox);
+extern RTLFUNC(Me);
+extern RTLFUNC(MsgBox);
+extern RTLFUNC(IsArray);
+extern RTLFUNC(IsDate);
+extern RTLFUNC(IsEmpty);
+extern RTLFUNC(IsError);
+extern RTLFUNC(IsNull);
+extern RTLFUNC(IsNumeric);
+extern RTLFUNC(IsObject);
+extern RTLFUNC(IsUnoStruct);
+
+extern RTLFUNC(FileDateTime);
+extern RTLFUNC(Format);
+extern RTLFUNC(GetAttr);
+extern RTLFUNC(Randomize); // JSM
+extern RTLFUNC(Round);
+extern RTLFUNC(Rnd);
+extern RTLFUNC(Shell);
+extern RTLFUNC(VarType);
+extern RTLFUNC(TypeName);
+extern RTLFUNC(TypeLen);
+
+extern RTLFUNC(EOF);
+extern RTLFUNC(FileAttr);
+extern RTLFUNC(Loc);
+extern RTLFUNC(Lof);
+extern RTLFUNC(Seek);
+extern RTLFUNC(SetAttr); // JSM
+extern RTLFUNC(Reset); // JSM
+
+extern RTLFUNC(DDEInitiate);
+extern RTLFUNC(DDETerminate);
+extern RTLFUNC(DDETerminateAll);
+extern RTLFUNC(DDERequest);
+extern RTLFUNC(DDEExecute);
+extern RTLFUNC(DDEPoke);
+
+extern RTLFUNC(FreeFile);
+extern RTLFUNC(IsMissing);
+extern RTLFUNC(LBound);
+extern RTLFUNC(UBound);
+extern RTLFUNC(RGB);
+extern RTLFUNC(QBColor);
+extern RTLFUNC(StrConv);
+
+extern RTLFUNC(Beep);
+
+extern RTLFUNC(Load);
+extern RTLFUNC(Unload);
+extern RTLFUNC(AboutStarBasic);
+extern RTLFUNC(LoadPicture);
+extern RTLFUNC(SavePicture);
+
+extern RTLFUNC(CBool); // JSM
+extern RTLFUNC(CByte); // JSM
+extern RTLFUNC(CCur); // JSM
+extern RTLFUNC(CDate); // JSM
+extern RTLFUNC(CDbl); // JSM
+extern RTLFUNC(CInt); // JSM
+extern RTLFUNC(CLng); // JSM
+extern RTLFUNC(CSng); // JSM
+extern RTLFUNC(CStr); // JSM
+extern RTLFUNC(CVar); // JSM
+extern RTLFUNC(CVErr); // JSM
+
+extern RTLFUNC(Iif); // JSM
+
+extern RTLFUNC(DumpAllObjects);
+
+extern RTLFUNC(GetSystemType);
+extern RTLFUNC(GetGUIType);
+extern RTLFUNC(Red);
+extern RTLFUNC(Green);
+extern RTLFUNC(Blue);
+
+extern RTLFUNC(Switch);
+extern RTLFUNC(Wait);
+//i#64882# add new WaitUntil
+extern RTLFUNC(WaitUntil);
+
+extern RTLFUNC(GetGUIVersion);
+extern RTLFUNC(Choose);
+extern RTLFUNC(Trim);
+
+extern RTLFUNC(DateAdd);
+extern RTLFUNC(DateDiff);
+extern RTLFUNC(DatePart);
+extern RTLFUNC(FormatDateTime);
+extern RTLFUNC(GetSolarVersion);
+extern RTLFUNC(TwipsPerPixelX);
+extern RTLFUNC(TwipsPerPixelY);
+extern RTLFUNC(FreeLibrary);
+extern RTLFUNC(Array);
+extern RTLFUNC(FindObject);
+extern RTLFUNC(FindPropertyObject);
+extern RTLFUNC(EnableReschedule);
+
+extern RTLFUNC(Put);
+extern RTLFUNC(Get);
+extern RTLFUNC(Environ);
+extern RTLFUNC(GetDialogZoomFactorX);
+extern RTLFUNC(GetDialogZoomFactorY);
+extern RTLFUNC(GetSystemTicks);
+extern RTLFUNC(GetPathSeparator);
+extern RTLFUNC(ResolvePath);
+extern RTLFUNC(CreateUnoStruct);
+extern RTLFUNC(CreateUnoService);
+extern RTLFUNC(CreateUnoServiceWithArguments);
+extern RTLFUNC(CreateUnoValue);
+extern RTLFUNC(GetProcessServiceManager);
+extern RTLFUNC(GetDefaultContext);
+extern RTLFUNC(CreatePropertySet);
+extern RTLFUNC(CreateUnoListener);
+extern RTLFUNC(HasUnoInterfaces);
+extern RTLFUNC(EqualUnoObjects);
+extern RTLFUNC(CreateUnoDialog);
+extern RTLFUNC(GlobalScope);
+extern RTLFUNC(FileExists);
+extern RTLFUNC(ConvertToUrl);
+extern RTLFUNC(ConvertFromUrl);
+extern RTLFUNC(CDateToIso);
+extern RTLFUNC(CDateFromIso);
+extern RTLFUNC(CompatibilityMode);
+extern RTLFUNC(CDec);
+
+extern RTLFUNC(Partition); // Fong
+
+extern double Now_Impl();
+extern void Wait_Impl( bool bDurationBased, SbxArray& rPar );
diff --git a/basic/source/runtime/runtime.cxx b/basic/source/runtime/runtime.cxx
new file mode 100755
index 000000000000..1bb6fb82e113
--- /dev/null
+++ b/basic/source/runtime/runtime.cxx
@@ -0,0 +1,1268 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+#include <tools/fsys.hxx>
+#include <vcl/svapp.hxx>
+#include <tools/wldcrd.hxx>
+#include <svl/zforlist.hxx>
+#include <unotools/syslocale.hxx>
+#include "runtime.hxx"
+#include "sbintern.hxx"
+#include "opcodes.hxx"
+#include "codegen.hxx"
+#include "iosys.hxx"
+#include "image.hxx"
+#include "ddectrl.hxx"
+#include "dllmgr.hxx"
+#include <comphelper/processfactory.hxx>
+#include <com/sun/star/container/XEnumerationAccess.hpp>
+#include "sbunoobj.hxx"
+#include "errobject.hxx"
+#include "sbtrace.hxx"
+
+using namespace ::com::sun::star;
+
+bool SbiRuntime::isVBAEnabled()
+{
+ bool result = false;
+ SbiInstance* pInst = pINST;
+ if ( pInst && pINST->pRun )
+ result = pInst->pRun->bVBAEnabled;
+ return result;
+}
+
+// #91147 Global reschedule flag
+static BOOL bStaticGlobalEnableReschedule = TRUE;
+
+void StarBASIC::StaticEnableReschedule( BOOL bReschedule )
+{
+ bStaticGlobalEnableReschedule = bReschedule;
+}
+void StarBASIC::SetVBAEnabled( BOOL bEnabled )
+{
+ if ( bDocBasic )
+ {
+ bVBAEnabled = bEnabled;
+ }
+}
+
+BOOL StarBASIC::isVBAEnabled()
+{
+ if ( bDocBasic )
+ {
+ if( SbiRuntime::isVBAEnabled() )
+ return TRUE;
+ return bVBAEnabled;
+ }
+ return FALSE;
+}
+
+
+struct SbiArgvStack { // Argv stack:
+ SbiArgvStack* pNext; // Stack Chain
+ SbxArrayRef refArgv; // Argv
+ short nArgc; // Argc
+};
+
+SbiRuntime::pStep0 SbiRuntime::aStep0[] = { // Alle Opcodes ohne Operanden
+ &SbiRuntime::StepNOP,
+ &SbiRuntime::StepEXP,
+ &SbiRuntime::StepMUL,
+ &SbiRuntime::StepDIV,
+ &SbiRuntime::StepMOD,
+ &SbiRuntime::StepPLUS,
+ &SbiRuntime::StepMINUS,
+ &SbiRuntime::StepNEG,
+ &SbiRuntime::StepEQ,
+ &SbiRuntime::StepNE,
+ &SbiRuntime::StepLT,
+ &SbiRuntime::StepGT,
+ &SbiRuntime::StepLE,
+ &SbiRuntime::StepGE,
+ &SbiRuntime::StepIDIV,
+ &SbiRuntime::StepAND,
+ &SbiRuntime::StepOR,
+ &SbiRuntime::StepXOR,
+ &SbiRuntime::StepEQV,
+ &SbiRuntime::StepIMP,
+ &SbiRuntime::StepNOT,
+ &SbiRuntime::StepCAT,
+
+ &SbiRuntime::StepLIKE,
+ &SbiRuntime::StepIS,
+ // Laden/speichern
+ &SbiRuntime::StepARGC, // neuen Argv einrichten
+ &SbiRuntime::StepARGV, // TOS ==> aktueller Argv
+ &SbiRuntime::StepINPUT, // Input ==> TOS
+ &SbiRuntime::StepLINPUT, // Line Input ==> TOS
+ &SbiRuntime::StepGET, // TOS anfassen
+ &SbiRuntime::StepSET, // Speichern Objekt TOS ==> TOS-1
+ &SbiRuntime::StepPUT, // TOS ==> TOS-1
+ &SbiRuntime::StepPUTC, // TOS ==> TOS-1, dann ReadOnly
+ &SbiRuntime::StepDIM, // DIM
+ &SbiRuntime::StepREDIM, // REDIM
+ &SbiRuntime::StepREDIMP, // REDIM PRESERVE
+ &SbiRuntime::StepERASE, // TOS loeschen
+ // Verzweigen
+ &SbiRuntime::StepSTOP, // Programmende
+ &SbiRuntime::StepINITFOR, // FOR-Variable initialisieren
+ &SbiRuntime::StepNEXT, // FOR-Variable inkrementieren
+ &SbiRuntime::StepCASE, // Anfang CASE
+ &SbiRuntime::StepENDCASE, // Ende CASE
+ &SbiRuntime::StepSTDERROR, // Standard-Fehlerbehandlung
+ &SbiRuntime::StepNOERROR, // keine Fehlerbehandlung
+ &SbiRuntime::StepLEAVE, // UP verlassen
+ // E/A
+ &SbiRuntime::StepCHANNEL, // TOS = Kanalnummer
+ &SbiRuntime::StepPRINT, // print TOS
+ &SbiRuntime::StepPRINTF, // print TOS in field
+ &SbiRuntime::StepWRITE, // write TOS
+ &SbiRuntime::StepRENAME, // Rename Tos+1 to Tos
+ &SbiRuntime::StepPROMPT, // Input Prompt aus TOS definieren
+ &SbiRuntime::StepRESTART, // Set restart point
+ &SbiRuntime::StepCHANNEL0, // E/A-Kanal 0 einstellen
+ &SbiRuntime::StepEMPTY, // Leeren Ausdruck auf Stack
+ &SbiRuntime::StepERROR, // TOS = Fehlercode
+ &SbiRuntime::StepLSET, // Speichern Objekt TOS ==> TOS-1
+ &SbiRuntime::StepRSET, // Speichern Objekt TOS ==> TOS-1
+ &SbiRuntime::StepREDIMP_ERASE,// Copy array object for REDIMP
+ &SbiRuntime::StepINITFOREACH,// Init for each loop
+ &SbiRuntime::StepVBASET,// vba-like set statement
+ &SbiRuntime::StepERASE_CLEAR,// vba-like set statement
+ &SbiRuntime::StepARRAYACCESS,// access TOS as array
+ &SbiRuntime::StepBYVAL, // access TOS as array
+};
+
+SbiRuntime::pStep1 SbiRuntime::aStep1[] = { // Alle Opcodes mit einem Operanden
+ &SbiRuntime::StepLOADNC, // Laden einer numerischen Konstanten (+ID)
+ &SbiRuntime::StepLOADSC, // Laden einer Stringkonstanten (+ID)
+ &SbiRuntime::StepLOADI, // Immediate Load (+Wert)
+ &SbiRuntime::StepARGN, // Speichern eines named Args in Argv (+StringID)
+ &SbiRuntime::StepPAD, // String auf feste Laenge bringen (+Laenge)
+ // Verzweigungen
+ &SbiRuntime::StepJUMP, // Sprung (+Target)
+ &SbiRuntime::StepJUMPT, // TOS auswerten), bedingter Sprung (+Target)
+ &SbiRuntime::StepJUMPF, // TOS auswerten), bedingter Sprung (+Target)
+ &SbiRuntime::StepONJUMP, // TOS auswerten), Sprung in JUMP-Tabelle (+MaxVal)
+ &SbiRuntime::StepGOSUB, // UP-Aufruf (+Target)
+ &SbiRuntime::StepRETURN, // UP-Return (+0 oder Target)
+ &SbiRuntime::StepTESTFOR, // FOR-Variable testen), inkrementieren (+Endlabel)
+ &SbiRuntime::StepCASETO, // Tos+1 <= Case <= Tos), 2xremove (+Target)
+ &SbiRuntime::StepERRHDL, // Fehler-Handler (+Offset)
+ &SbiRuntime::StepRESUME, // Resume nach Fehlern (+0 or 1 or Label)
+ // E/A
+ &SbiRuntime::StepCLOSE, // (+Kanal/0)
+ &SbiRuntime::StepPRCHAR, // (+char)
+ // Verwaltung
+ &SbiRuntime::StepSETCLASS, // Set + Klassennamen testen (+StringId)
+ &SbiRuntime::StepTESTCLASS, // Check TOS class (+StringId)
+ &SbiRuntime::StepLIB, // Lib fuer Declare-Call (+StringId)
+ &SbiRuntime::StepBASED, // TOS wird um BASE erhoeht, BASE davor gepusht
+ &SbiRuntime::StepARGTYP, // Letzten Parameter in Argv konvertieren (+Typ)
+ &SbiRuntime::StepVBASETCLASS,// vba-like set statement
+};
+
+SbiRuntime::pStep2 SbiRuntime::aStep2[] = {// Alle Opcodes mit zwei Operanden
+ &SbiRuntime::StepRTL, // Laden aus RTL (+StringID+Typ)
+ &SbiRuntime::StepFIND, // Laden (+StringID+Typ)
+ &SbiRuntime::StepELEM, // Laden Element (+StringID+Typ)
+ &SbiRuntime::StepPARAM, // Parameter (+Offset+Typ)
+ // Verzweigen
+ &SbiRuntime::StepCALL, // Declare-Call (+StringID+Typ)
+ &SbiRuntime::StepCALLC, // CDecl-Declare-Call (+StringID+Typ)
+ &SbiRuntime::StepCASEIS, // Case-Test (+Test-Opcode+False-Target)
+ // Verwaltung
+ &SbiRuntime::StepSTMNT, // Beginn eines Statements (+Line+Col)
+ // E/A
+ &SbiRuntime::StepOPEN, // (+SvStreamFlags+Flags)
+ // Objekte
+ &SbiRuntime::StepLOCAL, // Lokale Variable definieren (+StringId+Typ)
+ &SbiRuntime::StepPUBLIC, // Modulglobale Variable (+StringID+Typ)
+ &SbiRuntime::StepGLOBAL, // Globale Variable definieren (+StringID+Typ)
+ &SbiRuntime::StepCREATE, // Objekt kreieren (+StringId+StringId)
+ &SbiRuntime::StepSTATIC, // Statische Variable (+StringId+StringId)
+ &SbiRuntime::StepTCREATE, // User Defined Objekte (+StringId+StringId)
+ &SbiRuntime::StepDCREATE, // Objekt-Array kreieren (+StringID+StringID)
+ &SbiRuntime::StepGLOBAL_P, // Globale Variable definieren, die beim Neustart
+ // von Basic nicht ueberschrieben wird (+StringID+Typ)
+ &SbiRuntime::StepFIND_G, // Sucht globale Variable mit Spezialbehandlung wegen _GLOBAL_P
+ &SbiRuntime::StepDCREATE_REDIMP, // Objekt-Array redimensionieren (+StringID+StringID)
+ &SbiRuntime::StepFIND_CM, // Search inside a class module (CM) to enable global search in time
+ &SbiRuntime::StepPUBLIC_P, // Search inside a class module (CM) to enable global search in time
+ &SbiRuntime::StepFIND_STATIC, // Search inside a class module (CM) to enable global search in time
+};
+
+
+//////////////////////////////////////////////////////////////////////////
+// SbiRTLData //
+//////////////////////////////////////////////////////////////////////////
+
+SbiRTLData::SbiRTLData()
+{
+ pDir = 0;
+ nDirFlags = 0;
+ nCurDirPos = 0;
+ pWildCard = NULL;
+}
+
+SbiRTLData::~SbiRTLData()
+{
+ delete pDir;
+ pDir = 0;
+ delete pWildCard;
+}
+
+//////////////////////////////////////////////////////////////////////////
+// SbiInstance //
+//////////////////////////////////////////////////////////////////////////
+
+// 16.10.96: #31460 Neues Konzept fuer StepInto/Over/Out
+// Die Entscheidung, ob StepPoint aufgerufen werden soll, wird anhand des
+// CallLevels getroffen. Angehalten wird, wenn der aktuelle CallLevel <=
+// nBreakCallLvl ist. Der aktuelle CallLevel kann niemals kleiner als 1
+// sein, da er beim Aufruf einer Methode (auch main) inkrementiert wird.
+// Daher bedeutet ein BreakCallLvl von 0, dass das Programm gar nicht
+// angehalten wird.
+// (siehe auch step2.cxx, SbiRuntime::StepSTMNT() )
+
+// Hilfsfunktion, um den BreakCallLevel gemaess der der Debug-Flags zu ermitteln
+void SbiInstance::CalcBreakCallLevel( USHORT nFlags )
+{
+ // Break-Flag wegfiltern
+ nFlags &= ~((USHORT)SbDEBUG_BREAK);
+
+ USHORT nRet;
+ switch( nFlags )
+ {
+ case SbDEBUG_STEPINTO:
+ nRet = nCallLvl + 1; // CallLevel+1 wird auch angehalten
+ break;
+ case SbDEBUG_STEPOVER | SbDEBUG_STEPINTO:
+ nRet = nCallLvl; // Aktueller CallLevel wird angehalten
+ break;
+ case SbDEBUG_STEPOUT:
+ nRet = nCallLvl - 1; // Kleinerer CallLevel wird angehalten
+ break;
+ case SbDEBUG_CONTINUE:
+ // Basic-IDE liefert 0 statt SbDEBUG_CONTINUE, also auch default=continue
+ default:
+ nRet = 0; // CallLevel ist immer >0 -> kein StepPoint
+ }
+ nBreakCallLvl = nRet; // Ergebnis uebernehmen
+}
+
+SbiInstance::SbiInstance( StarBASIC* p )
+{
+ pBasic = p;
+ pNext = NULL;
+ pRun = NULL;
+ pIosys = new SbiIoSystem;
+ pDdeCtrl = new SbiDdeControl;
+ pDllMgr = 0; // on demand
+ pNumberFormatter = 0; // on demand
+ nCallLvl = 0;
+ nBreakCallLvl = 0;
+ nErr =
+ nErl = 0;
+ bReschedule = TRUE;
+ bCompatibility = FALSE;
+}
+
+SbiInstance::~SbiInstance()
+{
+ while( pRun )
+ {
+ SbiRuntime* p = pRun->pNext;
+ delete pRun;
+ pRun = p;
+ }
+ delete pIosys;
+ delete pDdeCtrl;
+ delete pDllMgr;
+ delete pNumberFormatter;
+
+ try
+ {
+ int nSize = ComponentVector.size();
+ if( nSize )
+ {
+ for( int i = nSize - 1 ; i >= 0 ; --i )
+ {
+ Reference< XComponent > xDlgComponent = ComponentVector[i];
+ if( xDlgComponent.is() )
+ xDlgComponent->dispose();
+ }
+ }
+ }
+ catch( const Exception& )
+ {
+ DBG_ERROR( "SbiInstance::~SbiInstance: caught an exception while disposing the components!" );
+ }
+
+ ComponentVector.clear();
+}
+
+SbiDllMgr* SbiInstance::GetDllMgr()
+{
+ if( !pDllMgr )
+ pDllMgr = new SbiDllMgr;
+ return pDllMgr;
+}
+
+// #39629 NumberFormatter jetzt ueber statische Methode anlegen
+SvNumberFormatter* SbiInstance::GetNumberFormatter()
+{
+ LanguageType eLangType = GetpApp()->GetSettings().GetLanguage();
+ SvtSysLocale aSysLocale;
+ DateFormat eDate = aSysLocale.GetLocaleData().getDateFormat();
+ if( pNumberFormatter )
+ {
+ if( eLangType != meFormatterLangType ||
+ eDate != meFormatterDateFormat )
+ {
+ delete pNumberFormatter;
+ pNumberFormatter = NULL;
+ }
+ }
+ meFormatterLangType = eLangType;
+ meFormatterDateFormat = eDate;
+ if( !pNumberFormatter )
+ PrepareNumberFormatter( pNumberFormatter, nStdDateIdx, nStdTimeIdx, nStdDateTimeIdx,
+ &meFormatterLangType, &meFormatterDateFormat );
+ return pNumberFormatter;
+}
+
+// #39629 NumberFormatter auch statisch anbieten
+void SbiInstance::PrepareNumberFormatter( SvNumberFormatter*& rpNumberFormatter,
+ sal_uInt32 &rnStdDateIdx, sal_uInt32 &rnStdTimeIdx, sal_uInt32 &rnStdDateTimeIdx,
+ LanguageType* peFormatterLangType, DateFormat* peFormatterDateFormat )
+{
+ com::sun::star::uno::Reference< com::sun::star::lang::XMultiServiceFactory >
+ xFactory = comphelper::getProcessServiceFactory();
+
+ LanguageType eLangType;
+ if( peFormatterLangType )
+ eLangType = *peFormatterLangType;
+ else
+ eLangType = GetpApp()->GetSettings().GetLanguage();
+
+ DateFormat eDate;
+ if( peFormatterDateFormat )
+ eDate = *peFormatterDateFormat;
+ else
+ {
+ SvtSysLocale aSysLocale;
+ eDate = aSysLocale.GetLocaleData().getDateFormat();
+ }
+
+ rpNumberFormatter = new SvNumberFormatter( xFactory, eLangType );
+
+ xub_StrLen nCheckPos = 0; short nType;
+ rnStdTimeIdx = rpNumberFormatter->GetStandardFormat( NUMBERFORMAT_TIME, eLangType );
+
+ // Standard-Vorlagen des Formatters haben nur zweistellige
+ // Jahreszahl. Deshalb eigenes Format registrieren
+
+ // HACK, da der Numberformatter in PutandConvertEntry die Platzhalter
+ // fuer Monat, Tag, Jahr nicht entsprechend der Systemeinstellung
+ // austauscht. Problem: Print Year(Date) unter engl. BS
+ // siehe auch svtools\source\sbx\sbxdate.cxx
+
+ String aDateStr;
+ switch( eDate )
+ {
+ case MDY: aDateStr = String( RTL_CONSTASCII_USTRINGPARAM("MM.TT.JJJJ") ); break;
+ case DMY: aDateStr = String( RTL_CONSTASCII_USTRINGPARAM("TT.MM.JJJJ") ); break;
+ case YMD: aDateStr = String( RTL_CONSTASCII_USTRINGPARAM("JJJJ.MM.TT") ); break;
+ default: aDateStr = String( RTL_CONSTASCII_USTRINGPARAM("MM.TT.JJJJ") );
+ }
+ String aStr( aDateStr );
+ rpNumberFormatter->PutandConvertEntry( aStr, nCheckPos, nType,
+ rnStdDateIdx, LANGUAGE_GERMAN, eLangType );
+ nCheckPos = 0;
+ String aStrHHMMSS( RTL_CONSTASCII_USTRINGPARAM(" HH:MM:SS") );
+ aStr = aDateStr;
+ aStr += aStrHHMMSS;
+ rpNumberFormatter->PutandConvertEntry( aStr, nCheckPos, nType,
+ rnStdDateTimeIdx, LANGUAGE_GERMAN, eLangType );
+}
+
+
+
+// Engine laufenlassen. Falls Flags == SbDEBUG_CONTINUE, Flags uebernehmen
+
+void SbiInstance::Stop()
+{
+ for( SbiRuntime* p = pRun; p; p = p->pNext )
+ p->Stop();
+}
+
+// Allows Basic IDE to set watch mode to suppress errors
+static bool bWatchMode = false;
+
+void setBasicWatchMode( bool bOn )
+{
+ bWatchMode = bOn;
+}
+
+void SbiInstance::Error( SbError n )
+{
+ Error( n, String() );
+}
+
+void SbiInstance::Error( SbError n, const String& rMsg )
+{
+ if( !bWatchMode )
+ {
+ aErrorMsg = rMsg;
+ pRun->Error( n );
+ }
+}
+
+void SbiInstance::ErrorVB( sal_Int32 nVBNumber, const String& rMsg )
+{
+ if( !bWatchMode )
+ {
+ SbError n = StarBASIC::GetSfxFromVBError( static_cast< USHORT >( nVBNumber ) );
+ if ( !n )
+ n = nVBNumber; // force orig number, probably should have a specific table of vb ( localized ) errors
+
+ aErrorMsg = rMsg;
+ SbiRuntime::translateErrorToVba( n, aErrorMsg );
+
+ bool bVBATranslationAlreadyDone = true;
+ pRun->Error( SbERR_BASIC_COMPAT, bVBATranslationAlreadyDone );
+ }
+}
+
+void SbiInstance::setErrorVB( sal_Int32 nVBNumber, const String& rMsg )
+{
+ SbError n = StarBASIC::GetSfxFromVBError( static_cast< USHORT >( nVBNumber ) );
+ if( !n )
+ n = nVBNumber; // force orig number, probably should have a specific table of vb ( localized ) errors
+
+ aErrorMsg = rMsg;
+ SbiRuntime::translateErrorToVba( n, aErrorMsg );
+
+ nErr = n;
+}
+
+
+void SbiInstance::FatalError( SbError n )
+{
+ pRun->FatalError( n );
+}
+
+void SbiInstance::FatalError( SbError _errCode, const String& _details )
+{
+ pRun->FatalError( _errCode, _details );
+}
+
+void SbiInstance::Abort()
+{
+ // Basic suchen, in dem der Fehler auftrat
+ StarBASIC* pErrBasic = GetCurrentBasic( pBasic );
+ pErrBasic->RTError( nErr, aErrorMsg, pRun->nLine, pRun->nCol1, pRun->nCol2 );
+ pBasic->Stop();
+}
+
+// Hilfsfunktion, um aktives Basic zu finden, kann ungleich pRTBasic sein
+StarBASIC* GetCurrentBasic( StarBASIC* pRTBasic )
+{
+ StarBASIC* pCurBasic = pRTBasic;
+ SbModule* pActiveModule = pRTBasic->GetActiveModule();
+ if( pActiveModule )
+ {
+ SbxObject* pParent = pActiveModule->GetParent();
+ if( pParent && pParent->ISA(StarBASIC) )
+ pCurBasic = (StarBASIC*)pParent;
+ }
+ return pCurBasic;
+}
+
+SbModule* SbiInstance::GetActiveModule()
+{
+ if( pRun )
+ return pRun->GetModule();
+ else
+ return NULL;
+}
+
+SbMethod* SbiInstance::GetCaller( USHORT nLevel )
+{
+ SbiRuntime* p = pRun;
+ while( nLevel-- && p )
+ p = p->pNext;
+ if( p )
+ return p->GetCaller();
+ else
+ return NULL;
+}
+
+SbxArray* SbiInstance::GetLocals( SbMethod* pMeth )
+{
+ SbiRuntime* p = pRun;
+ while( p && p->GetMethod() != pMeth )
+ p = p->pNext;
+ if( p )
+ return p->GetLocals();
+ else
+ return NULL;
+}
+
+//////////////////////////////////////////////////////////////////////////
+// SbiInstance //
+//////////////////////////////////////////////////////////////////////////
+
+// Achtung: pMeth kann auch NULL sein (beim Aufruf des Init-Codes)
+
+SbiRuntime::SbiRuntime( SbModule* pm, SbMethod* pe, UINT32 nStart )
+ : rBasic( *(StarBASIC*)pm->pParent ), pInst( pINST ),
+ pMod( pm ), pMeth( pe ), pImg( pMod->pImage ), m_nLastTime(0)
+{
+ nFlags = pe ? pe->GetDebugFlags() : 0;
+ pIosys = pInst->pIosys;
+ pArgvStk = NULL;
+ pGosubStk = NULL;
+ pForStk = NULL;
+ pError = NULL;
+ pErrCode =
+ pErrStmnt =
+ pRestart = NULL;
+ pNext = NULL;
+ pCode =
+ pStmnt = (const BYTE* ) pImg->GetCode() + nStart;
+ bRun =
+ bError = TRUE;
+ bInError = FALSE;
+ bBlocked = FALSE;
+ nLine = 0;
+ nCol1 = 0;
+ nCol2 = 0;
+ nExprLvl = 0;
+ nArgc = 0;
+ nError = 0;
+ nGosubLvl = 0;
+ nForLvl = 0;
+ nOps = 0;
+ refExprStk = new SbxArray;
+ SetVBAEnabled( pMod->IsVBACompat() );
+#if defined GCC
+ SetParameters( pe ? pe->GetParameters() : (class SbxArray *)NULL );
+#else
+ SetParameters( pe ? pe->GetParameters() : NULL );
+#endif
+ pRefSaveList = NULL;
+ pItemStoreList = NULL;
+}
+
+SbiRuntime::~SbiRuntime()
+{
+ ClearGosubStack();
+ ClearArgvStack();
+ ClearForStack();
+
+ // #74254 Items zum Sichern temporaere Referenzen freigeben
+ ClearRefs();
+ while( pItemStoreList )
+ {
+ RefSaveItem* pToDeleteItem = pItemStoreList;
+ pItemStoreList = pToDeleteItem->pNext;
+ delete pToDeleteItem;
+ }
+}
+
+void SbiRuntime::SetVBAEnabled(bool bEnabled )
+{
+ bVBAEnabled = bEnabled;
+}
+
+// Aufbau der Parameterliste. Alle ByRef-Parameter werden direkt
+// uebernommen; von ByVal-Parametern werden Kopien angelegt. Falls
+// ein bestimmter Datentyp verlangt wird, wird konvertiert.
+
+void SbiRuntime::SetParameters( SbxArray* pParams )
+{
+ refParams = new SbxArray;
+ // fuer den Returnwert
+ refParams->Put( pMeth, 0 );
+
+ SbxInfo* pInfo = pMeth ? pMeth->GetInfo() : NULL;
+ USHORT nParamCount = pParams ? pParams->Count() : 1;
+ if( nParamCount > 1 )
+ {
+ for( USHORT i = 1 ; i < nParamCount ; i++ )
+ {
+ const SbxParamInfo* p = pInfo ? pInfo->GetParam( i ) : NULL;
+
+ // #111897 ParamArray
+ if( p && (p->nUserData & PARAM_INFO_PARAMARRAY) != 0 )
+ {
+ SbxDimArray* pArray = new SbxDimArray( SbxVARIANT );
+ USHORT nParamArrayParamCount = nParamCount - i;
+ pArray->unoAddDim( 0, nParamArrayParamCount - 1 );
+ for( USHORT j = i ; j < nParamCount ; j++ )
+ {
+ SbxVariable* v = pParams->Get( j );
+ short nDimIndex = j - i;
+ pArray->Put( v, &nDimIndex );
+ }
+ SbxVariable* pArrayVar = new SbxVariable( SbxVARIANT );
+ pArrayVar->SetFlag( SBX_READWRITE );
+ pArrayVar->PutObject( pArray );
+ refParams->Put( pArrayVar, i );
+
+ // Block ParamArray for missing parameter
+ pInfo = NULL;
+ break;
+ }
+
+ SbxVariable* v = pParams->Get( i );
+ // Methoden sind immer byval!
+ BOOL bByVal = v->IsA( TYPE(SbxMethod) );
+ SbxDataType t = v->GetType();
+ if( p )
+ {
+ bByVal |= BOOL( ( p->eType & SbxBYREF ) == 0 );
+ t = (SbxDataType) ( p->eType & 0x0FFF );
+
+ if( !bByVal && t != SbxVARIANT &&
+ (!v->IsFixed() || (SbxDataType)(v->GetType() & 0x0FFF ) != t) )
+ bByVal = TRUE;
+ }
+ if( bByVal )
+ {
+ SbxVariable* v2 = new SbxVariable( t );
+ v2->SetFlag( SBX_READWRITE );
+ *v2 = *v;
+ refParams->Put( v2, i );
+ }
+ else
+ {
+ if( t != SbxVARIANT && t != ( v->GetType() & 0x0FFF ) )
+ {
+ // Array konvertieren??
+ if( p && (p->eType & SbxARRAY) )
+ Error( SbERR_CONVERSION );
+ else
+ v->Convert( t );
+ }
+ refParams->Put( v, i );
+ }
+ if( p )
+ refParams->PutAlias( p->aName, i );
+ }
+ }
+
+ // ParamArray for missing parameter
+ if( pInfo )
+ {
+ // #111897 Check first missing parameter for ParamArray
+ const SbxParamInfo* p = pInfo->GetParam( nParamCount );
+ if( p && (p->nUserData & PARAM_INFO_PARAMARRAY) != 0 )
+ {
+ SbxDimArray* pArray = new SbxDimArray( SbxVARIANT );
+ pArray->unoAddDim( 0, -1 );
+ SbxVariable* pArrayVar = new SbxVariable( SbxVARIANT );
+ pArrayVar->SetFlag( SBX_READWRITE );
+ pArrayVar->PutObject( pArray );
+ refParams->Put( pArrayVar, nParamCount );
+ }
+ }
+}
+
+
+// Einen P-Code ausfuehren
+
+BOOL SbiRuntime::Step()
+{
+ if( bRun )
+ {
+ // Unbedingt gelegentlich die Kontrolle abgeben!
+ if( !( ++nOps & 0xF ) && pInst->IsReschedule() && bStaticGlobalEnableReschedule )
+ {
+ sal_uInt32 nTime = osl_getGlobalTimer();
+ if (nTime - m_nLastTime > 5 ) // 20 ms
+ {
+ Application::Reschedule();
+ m_nLastTime = nTime;
+ }
+ }
+
+ // #i48868 blocked by next call level?
+ while( bBlocked )
+ {
+ if( pInst->IsReschedule() && bStaticGlobalEnableReschedule )
+ Application::Reschedule();
+ }
+
+#ifdef DBG_TRACE_BASIC
+ UINT32 nPC = ( pCode - (const BYTE* )pImg->GetCode() );
+ dbg_traceStep( pMod, nPC, pINST->nCallLvl );
+#endif
+
+ SbiOpcode eOp = (SbiOpcode ) ( *pCode++ );
+ UINT32 nOp1, nOp2;
+ if( eOp <= SbOP0_END )
+ {
+ (this->*( aStep0[ eOp ] ) )();
+ }
+ else if( eOp >= SbOP1_START && eOp <= SbOP1_END )
+ {
+ nOp1 = *pCode++; nOp1 |= *pCode++ << 8; nOp1 |= *pCode++ << 16; nOp1 |= *pCode++ << 24;
+
+ (this->*( aStep1[ eOp - SbOP1_START ] ) )( nOp1 );
+ }
+ else if( eOp >= SbOP2_START && eOp <= SbOP2_END )
+ {
+ nOp1 = *pCode++; nOp1 |= *pCode++ << 8; nOp1 |= *pCode++ << 16; nOp1 |= *pCode++ << 24;
+ nOp2 = *pCode++; nOp2 |= *pCode++ << 8; nOp2 |= *pCode++ << 16; nOp2 |= *pCode++ << 24;
+ (this->*( aStep2[ eOp - SbOP2_START ] ) )( nOp1, nOp2 );
+ }
+ else
+ StarBASIC::FatalError( SbERR_INTERNAL_ERROR );
+
+ // SBX-Fehler aufgetreten?
+ SbError nSbError = SbxBase::GetError();
+ Error( ERRCODE_TOERROR(nSbError) ); // Warnings rausfiltern
+
+ // AB 13.2.1997, neues Error-Handling:
+ // ACHTUNG: Hier kann nError auch dann gesetzt sein, wenn !nSbError,
+ // da nError jetzt auch von anderen RT-Instanzen gesetzt werden kann
+
+ if( nError )
+ SbxBase::ResetError();
+
+ // AB,15.3.96: Fehler nur anzeigen, wenn BASIC noch aktiv
+ // (insbesondere nicht nach Compiler-Fehlern zur Laufzeit)
+ if( nError && bRun )
+ {
+#ifdef DBG_TRACE_BASIC
+ SbError nTraceErr = nError;
+ String aTraceErrMsg = GetSbData()->aErrMsg;
+ bool bTraceErrHandled = true;
+#endif
+ SbError err = nError;
+ ClearExprStack();
+ nError = 0;
+ pInst->nErr = err;
+ pInst->nErl = nLine;
+ pErrCode = pCode;
+ pErrStmnt = pStmnt;
+ // An error occured in an error handler
+ // force parent handler ( if there is one )
+ // to handle the error
+ bool bLetParentHandleThis = false;
+
+ // Im Error Handler? Dann Std-Error
+ if ( !bInError )
+ {
+ bInError = TRUE;
+
+ if( !bError ) // On Error Resume Next
+ StepRESUME( 1 );
+ else if( pError ) // On Error Goto ...
+ pCode = pError;
+ else
+ bLetParentHandleThis = true;
+ }
+ else
+ {
+ bLetParentHandleThis = true;
+ pError = NULL; //terminate the handler
+ }
+ if ( bLetParentHandleThis )
+ {
+ // AB 13.2.1997, neues Error-Handling:
+ // Uebergeordnete Error-Handler beruecksichtigen
+
+ // Wir haben keinen Error-Handler -> weiter oben suchen
+ SbiRuntime* pRtErrHdl = NULL;
+ SbiRuntime* pRt = this;
+ while( NULL != (pRt = pRt->pNext) )
+ {
+ // Gibt es einen Error-Handler?
+ if( pRt->bError == FALSE || pRt->pError != NULL )
+ {
+ pRtErrHdl = pRt;
+ break;
+ }
+ }
+
+ // Error-Hdl gefunden?
+ if( pRtErrHdl )
+ {
+ // (Neuen) Error-Stack anlegen
+ SbErrorStack*& rErrStack = GetSbData()->pErrStack;
+ if( rErrStack )
+ delete rErrStack;
+ rErrStack = new SbErrorStack();
+
+ // Alle im Call-Stack darunter stehenden RTs manipulieren
+ pRt = this;
+ do
+ {
+ // Fehler setzen
+ pRt->nError = err;
+ if( pRt != pRtErrHdl )
+ pRt->bRun = FALSE;
+
+ // In Error-Stack eintragen
+ SbErrorStackEntry *pEntry = new SbErrorStackEntry
+ ( pRt->pMeth, pRt->nLine, pRt->nCol1, pRt->nCol2 );
+ rErrStack->C40_INSERT(SbErrorStackEntry, pEntry, rErrStack->Count() );
+
+ // Nach RT mit Error-Handler aufhoeren
+ if( pRt == pRtErrHdl )
+ break;
+ pRt = pRt->pNext;
+ }
+ while( pRt );
+ }
+ // Kein Error-Hdl gefunden -> altes Vorgehen
+ else
+ {
+#ifdef DBG_TRACE_BASIC
+ bTraceErrHandled = false;
+#endif
+ pInst->Abort();
+ }
+
+ // ALT: Nur
+ // pInst->Abort();
+ }
+
+#ifdef DBG_TRACE_BASIC
+ dbg_traceNotifyError( nTraceErr, aTraceErrMsg, bTraceErrHandled, pINST->nCallLvl );
+#endif
+ }
+ }
+ return bRun;
+}
+
+void SbiRuntime::Error( SbError n, bool bVBATranslationAlreadyDone )
+{
+ if( n )
+ {
+ nError = n;
+ if( isVBAEnabled() && !bVBATranslationAlreadyDone )
+ {
+ String aMsg = pInst->GetErrorMsg();
+ sal_Int32 nVBAErrorNumber = translateErrorToVba( nError, aMsg );
+ SbxVariable* pSbxErrObjVar = SbxErrObject::getErrObject();
+ SbxErrObject* pGlobErr = static_cast< SbxErrObject* >( pSbxErrObjVar );
+ if( pGlobErr != NULL )
+ pGlobErr->setNumberAndDescription( nVBAErrorNumber, aMsg );
+
+ pInst->aErrorMsg = aMsg;
+ nError = SbERR_BASIC_COMPAT;
+ }
+ }
+}
+
+void SbiRuntime::Error( SbError _errCode, const String& _details )
+{
+ if ( _errCode )
+ {
+ OSL_ENSURE( pInst->pRun == this, "SbiRuntime::Error: can't propagate the error message details!" );
+ if ( pInst->pRun == this )
+ {
+ pInst->Error( _errCode, _details );
+ OSL_POSTCOND( nError == _errCode, "SbiRuntime::Error: the instance is expecte to propagate the error code back to me!" );
+ }
+ else
+ {
+ nError = _errCode;
+ }
+ }
+}
+
+void SbiRuntime::FatalError( SbError n )
+{
+ StepSTDERROR();
+ Error( n );
+}
+
+void SbiRuntime::FatalError( SbError _errCode, const String& _details )
+{
+ StepSTDERROR();
+ Error( _errCode, _details );
+}
+
+sal_Int32 SbiRuntime::translateErrorToVba( SbError nError, String& rMsg )
+{
+ // If a message is defined use that ( in preference to
+ // the defined one for the error ) NB #TODO
+ // if there is an error defined it more than likely
+ // is not the one you want ( some are the same though )
+ // we really need a new vba compatible error list
+ if ( !rMsg.Len() )
+ {
+ // TEST, has to be vb here always
+#ifdef DBG_UTIL
+ SbError nTmp = StarBASIC::GetSfxFromVBError( (USHORT)nError );
+ DBG_ASSERT( nTmp, "No VB error!" );
+#endif
+
+ StarBASIC::MakeErrorText( nError, rMsg );
+ rMsg = StarBASIC::GetErrorText();
+ if ( !rMsg.Len() ) // no message for err no, need localized resource here
+ rMsg = String( RTL_CONSTASCII_USTRINGPARAM("Internal Object Error:") );
+ }
+ // no num? most likely then it *is* really a vba err
+ USHORT nVBErrorCode = StarBASIC::GetVBErrorCode( nError );
+ sal_Int32 nVBAErrorNumber = ( nVBErrorCode == 0 ) ? nError : nVBErrorCode;
+ return nVBAErrorNumber;
+}
+
+//////////////////////////////////////////////////////////////////////////
+//
+// Parameter, Locals, Caller
+//
+//////////////////////////////////////////////////////////////////////////
+
+SbMethod* SbiRuntime::GetCaller()
+{
+ return pMeth;
+}
+
+SbxArray* SbiRuntime::GetLocals()
+{
+ return refLocals;
+}
+
+SbxArray* SbiRuntime::GetParams()
+{
+ return refParams;
+}
+
+//////////////////////////////////////////////////////////////////////////
+//
+// Stacks
+//
+//////////////////////////////////////////////////////////////////////////
+
+// Der Expression-Stack steht fuer die laufende Auswertung von Expressions
+// zur Verfuegung.
+
+void SbiRuntime::PushVar( SbxVariable* pVar )
+{
+ if( pVar )
+ refExprStk->Put( pVar, nExprLvl++ );
+}
+
+SbxVariableRef SbiRuntime::PopVar()
+{
+#ifdef DBG_UTIL
+ if( !nExprLvl )
+ {
+ StarBASIC::FatalError( SbERR_INTERNAL_ERROR );
+ return new SbxVariable;
+ }
+#endif
+ SbxVariableRef xVar = refExprStk->Get( --nExprLvl );
+#ifdef DBG_UTIL
+ if ( xVar->GetName().EqualsAscii( "Cells" ) )
+ DBG_TRACE( "" );
+#endif
+ // Methods halten im 0.Parameter sich selbst, also weghauen
+ if( xVar->IsA( TYPE(SbxMethod) ) )
+ xVar->SetParameters(0);
+ return xVar;
+}
+
+BOOL SbiRuntime::ClearExprStack()
+{
+ // Achtung: Clear() reicht nicht, da Methods geloescht werden muessen
+ while ( nExprLvl )
+ {
+ PopVar();
+ }
+ refExprStk->Clear();
+ return FALSE;
+}
+
+// Variable auf dem Expression-Stack holen, ohne sie zu entfernen
+// n zaehlt ab 0.
+
+SbxVariable* SbiRuntime::GetTOS( short n )
+{
+ n = nExprLvl - n - 1;
+#ifdef DBG_UTIL
+ if( n < 0 )
+ {
+ StarBASIC::FatalError( SbERR_INTERNAL_ERROR );
+ return new SbxVariable;
+ }
+#endif
+ return refExprStk->Get( (USHORT) n );
+}
+
+// Sicherstellen, dass TOS eine temporaere Variable ist
+
+void SbiRuntime::TOSMakeTemp()
+{
+ SbxVariable* p = refExprStk->Get( nExprLvl - 1 );
+ if( p->GetRefCount() != 1 )
+ {
+ SbxVariable* pNew = new SbxVariable( *p );
+ pNew->SetFlag( SBX_READWRITE );
+ refExprStk->Put( pNew, nExprLvl - 1 );
+ }
+}
+
+// Der GOSUB-Stack nimmt Returnadressen fuer GOSUBs auf
+
+void SbiRuntime::PushGosub( const BYTE* pc )
+{
+ if( ++nGosubLvl > MAXRECURSION )
+ StarBASIC::FatalError( SbERR_STACK_OVERFLOW );
+ SbiGosubStack* p = new SbiGosubStack;
+ p->pCode = pc;
+ p->pNext = pGosubStk;
+ p->nStartForLvl = nForLvl;
+ pGosubStk = p;
+}
+
+void SbiRuntime::PopGosub()
+{
+ if( !pGosubStk )
+ Error( SbERR_NO_GOSUB );
+ else
+ {
+ SbiGosubStack* p = pGosubStk;
+ pCode = p->pCode;
+ pGosubStk = p->pNext;
+ delete p;
+ nGosubLvl--;
+ }
+}
+
+// Entleeren des GOSUB-Stacks
+
+void SbiRuntime::ClearGosubStack()
+{
+ SbiGosubStack* p;
+ while(( p = pGosubStk ) != NULL )
+ pGosubStk = p->pNext, delete p;
+ nGosubLvl = 0;
+}
+
+// Der Argv-Stack nimmt aktuelle Argument-Vektoren auf
+
+void SbiRuntime::PushArgv()
+{
+ SbiArgvStack* p = new SbiArgvStack;
+ p->refArgv = refArgv;
+ p->nArgc = nArgc;
+ nArgc = 1;
+ refArgv.Clear();
+ p->pNext = pArgvStk;
+ pArgvStk = p;
+}
+
+void SbiRuntime::PopArgv()
+{
+ if( pArgvStk )
+ {
+ SbiArgvStack* p = pArgvStk;
+ pArgvStk = p->pNext;
+ refArgv = p->refArgv;
+ nArgc = p->nArgc;
+ delete p;
+ }
+}
+
+// Entleeren des Argv-Stacks
+
+void SbiRuntime::ClearArgvStack()
+{
+ while( pArgvStk )
+ PopArgv();
+}
+
+// Push des For-Stacks. Der Stack hat Inkrement, Ende, Beginn und Variable.
+// Nach Aufbau des Stack-Elements ist der Stack leer.
+
+void SbiRuntime::PushFor()
+{
+ SbiForStack* p = new SbiForStack;
+ p->eForType = FOR_TO;
+ p->pNext = pForStk;
+ pForStk = p;
+ // Der Stack ist wie folgt aufgebaut:
+ p->refInc = PopVar();
+ p->refEnd = PopVar();
+ SbxVariableRef xBgn = PopVar();
+ p->refVar = PopVar();
+ *(p->refVar) = *xBgn;
+ nForLvl++;
+}
+
+void SbiRuntime::PushForEach()
+{
+ SbiForStack* p = new SbiForStack;
+ p->pNext = pForStk;
+ pForStk = p;
+
+ SbxVariableRef xObjVar = PopVar();
+ SbxBase* pObj = xObjVar.Is() ? xObjVar->GetObject() : NULL;
+ if( pObj == NULL )
+ {
+ Error( SbERR_NO_OBJECT );
+ return;
+ }
+
+ bool bError_ = false;
+ BasicCollection* pCollection;
+ SbxDimArray* pArray;
+ SbUnoObject* pUnoObj;
+ if( (pArray = PTR_CAST(SbxDimArray,pObj)) != NULL )
+ {
+ p->eForType = FOR_EACH_ARRAY;
+ p->refEnd = (SbxVariable*)pArray;
+
+ short nDims = pArray->GetDims();
+ p->pArrayLowerBounds = new sal_Int32[nDims];
+ p->pArrayUpperBounds = new sal_Int32[nDims];
+ p->pArrayCurIndices = new sal_Int32[nDims];
+ sal_Int32 lBound, uBound;
+ for( short i = 0 ; i < nDims ; i++ )
+ {
+ pArray->GetDim32( i+1, lBound, uBound );
+ p->pArrayCurIndices[i] = p->pArrayLowerBounds[i] = lBound;
+ p->pArrayUpperBounds[i] = uBound;
+ }
+ }
+ else if( (pCollection = PTR_CAST(BasicCollection,pObj)) != NULL )
+ {
+ p->eForType = FOR_EACH_COLLECTION;
+ p->refEnd = pCollection;
+ p->nCurCollectionIndex = 0;
+ }
+ else if( (pUnoObj = PTR_CAST(SbUnoObject,pObj)) != NULL )
+ {
+ // XEnumerationAccess?
+ Any aAny = pUnoObj->getUnoAny();
+ Reference< XEnumerationAccess > xEnumerationAccess;
+ if( (aAny >>= xEnumerationAccess) )
+ {
+ p->xEnumeration = xEnumerationAccess->createEnumeration();
+ p->eForType = FOR_EACH_XENUMERATION;
+ }
+ else
+ {
+ bError_ = true;
+ }
+ }
+ else
+ {
+ bError_ = true;
+ }
+
+ if( bError_ )
+ {
+ Error( SbERR_CONVERSION );
+ return;
+ }
+
+ // Container variable
+ p->refVar = PopVar();
+ nForLvl++;
+}
+
+// Poppen des FOR-Stacks
+
+void SbiRuntime::PopFor()
+{
+ if( pForStk )
+ {
+ SbiForStack* p = pForStk;
+ pForStk = p->pNext;
+ delete p;
+ nForLvl--;
+ }
+}
+
+// Entleeren des FOR-Stacks
+
+void SbiRuntime::ClearForStack()
+{
+ while( pForStk )
+ PopFor();
+}
+
+//////////////////////////////////////////////////////////////////////////
+//
+// DLL-Aufrufe
+//
+//////////////////////////////////////////////////////////////////////////
+
+void SbiRuntime::DllCall
+ ( const String& aFuncName, // Funktionsname
+ const String& aDLLName, // Name der DLL
+ SbxArray* pArgs, // Parameter (ab Index 1, kann NULL sein)
+ SbxDataType eResType, // Returnwert
+ BOOL bCDecl ) // TRUE: nach C-Konventionen
+{
+ // No DllCall for "virtual" portal users
+ if( needSecurityRestrictions() )
+ {
+ StarBASIC::Error(SbERR_NOT_IMPLEMENTED);
+ return;
+ }
+
+ // MUSS NOCH IMPLEMENTIERT WERDEN
+ /*
+ String aMsg;
+ aMsg = "FUNC=";
+ aMsg += pFunc;
+ aMsg += " DLL=";
+ aMsg += pDLL;
+ MessBox( NULL, WB_OK, String( "DLL-CALL" ), aMsg ).Execute();
+ Error( SbERR_NOT_IMPLEMENTED );
+ */
+
+ SbxVariable* pRes = new SbxVariable( eResType );
+ SbiDllMgr* pDllMgr = pInst->GetDllMgr();
+ SbError nErr = pDllMgr->Call( aFuncName, aDLLName, pArgs, *pRes, bCDecl );
+ if( nErr )
+ Error( nErr );
+ PushVar( pRes );
+}
+USHORT
+SbiRuntime::GetImageFlag( USHORT n ) const
+{
+ return pImg->GetFlag( n );
+}
+USHORT
+SbiRuntime::GetBase()
+{
+ return pImg->GetBase();
+}
diff --git a/basic/source/runtime/stdobj.cxx b/basic/source/runtime/stdobj.cxx
new file mode 100644
index 000000000000..4455901bfeba
--- /dev/null
+++ b/basic/source/runtime/stdobj.cxx
@@ -0,0 +1,788 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+
+#include "runtime.hxx"
+#include "stdobj.hxx"
+#include <basic/sbstdobj.hxx>
+#include "rtlproto.hxx"
+#include "sbintern.hxx"
+
+// Das nArgs-Feld eines Tabelleneintrags ist wie folgt verschluesselt:
+// Zur Zeit wird davon ausgegangen, dass Properties keine Parameter
+// benoetigen!
+
+#define _ARGSMASK 0x007F // Bis zu 127 Argumente
+#define _COMPTMASK 0x0080 // Only valid in compatibility mode
+#define _RWMASK 0x0F00 // Maske fuer R/W-Bits
+#define _TYPEMASK 0xF000 // Maske fuer den Typ des Eintrags
+
+#define _READ 0x0100 // kann gelesen werden
+#define _BWRITE 0x0200 // kann as Lvalue verwendet werden
+#define _LVALUE _BWRITE // kann as Lvalue verwendet werden
+#define _READWRITE 0x0300 // beides
+#define _OPT 0x0400 // Parameter ist optional
+#define _CONST 0x0800 // Property ist const
+#define _METHOD 0x3000 // Masken-Bits fuer eine Methode
+#define _PROPERTY 0x4000 // Masken-Bit fuer eine Property
+#define _OBJECT 0x8000 // Masken-Bit fuer ein Objekt
+ // Kombination von oberen Bits:
+#define _FUNCTION 0x1100 // Maske fuer Function
+#define _LFUNCTION 0x1300 // Maske fuer Function, die auch als Lvalue geht
+#define _SUB 0x2100 // Maske fuer Sub
+#define _ROPROP 0x4100 // Maske Read Only-Property
+#define _WOPROP 0x4200 // Maske Write Only-Property
+#define _RWPROP 0x4300 // Maske Read/Write-Property
+#define _CPROP 0x4900 // Maske fuer Konstante
+
+struct Methods {
+ const char* pName; // Name des Eintrags
+ SbxDataType eType; // Datentyp
+ short nArgs; // Argumente und Flags
+ RtlCall pFunc; // Function Pointer
+ USHORT nHash; // Hashcode
+};
+
+static Methods aMethods[] = {
+
+{ "AboutStarBasic", SbxNULL, 1 | _FUNCTION, RTLNAME(AboutStarBasic),0 },
+ { "Name", SbxSTRING, 0,NULL,0 },
+{ "Abs", SbxDOUBLE, 1 | _FUNCTION, RTLNAME(Abs),0 },
+ { "number", SbxDOUBLE, 0,NULL,0 },
+{ "Array", SbxOBJECT, _FUNCTION, RTLNAME(Array),0 },
+{ "Asc", SbxLONG, 1 | _FUNCTION, RTLNAME(Asc),0 },
+ { "string", SbxSTRING, 0,NULL,0 },
+{ "AscW", SbxLONG, 1 | _FUNCTION | _COMPTMASK, RTLNAME(Asc),0},
+ { "string", SbxSTRING, 0,NULL,0 },
+{ "Atn", SbxDOUBLE, 1 | _FUNCTION, RTLNAME(Atn),0 },
+ { "number", SbxDOUBLE, 0,NULL,0 },
+{ "ATTR_ARCHIVE", SbxINTEGER, _CPROP, RTLNAME(ATTR_ARCHIVE),0 },
+{ "ATTR_DIRECTORY", SbxINTEGER, _CPROP, RTLNAME(ATTR_DIRECTORY),0 },
+{ "ATTR_HIDDEN", SbxINTEGER, _CPROP, RTLNAME(ATTR_HIDDEN),0 },
+{ "ATTR_NORMAL", SbxINTEGER, _CPROP, RTLNAME(ATTR_NORMAL),0 },
+{ "ATTR_READONLY", SbxINTEGER, _CPROP, RTLNAME(ATTR_READONLY),0 },
+{ "ATTR_SYSTEM", SbxINTEGER, _CPROP, RTLNAME(ATTR_SYSTEM),0 },
+{ "ATTR_VOLUME", SbxINTEGER, _CPROP, RTLNAME(ATTR_VOLUME),0 },
+
+{ "Beep", SbxNULL, _FUNCTION, RTLNAME(Beep),0 },
+{ "Blue", SbxINTEGER, 1 | _FUNCTION, RTLNAME(Blue),0 },
+ { "RGB-Value", SbxLONG, 0,NULL,0 },
+
+{ "CBool", SbxBOOL, 1 | _FUNCTION, RTLNAME(CBool),0 },
+ { "expression", SbxVARIANT, 0,NULL,0 },
+{ "CByte", SbxBYTE, 1 | _FUNCTION, RTLNAME(CByte),0 },
+ { "expression", SbxVARIANT, 0,NULL,0 },
+{ "CCur", SbxCURRENCY, 1 | _FUNCTION, RTLNAME(CCur),0 },
+ { "expression", SbxVARIANT, 0,NULL,0 },
+{ "CDate", SbxDATE, 1 | _FUNCTION, RTLNAME(CDate),0 },
+ { "expression", SbxVARIANT, 0,NULL,0 },
+{ "CDateFromIso", SbxDATE, 1 | _FUNCTION, RTLNAME(CDateFromIso),0 },
+ { "IsoDate", SbxSTRING, 0,NULL,0 },
+{ "CDateToIso", SbxSTRING, 1 | _FUNCTION, RTLNAME(CDateToIso),0 },
+ { "Date", SbxDATE, 0,NULL,0 },
+{ "CDec", SbxDECIMAL, 1 | _FUNCTION, RTLNAME(CDec),0 },
+ { "expression", SbxVARIANT, 0,NULL,0 },
+{ "CDbl", SbxDOUBLE, 1 | _FUNCTION, RTLNAME(CDbl),0 },
+ { "expression", SbxVARIANT, 0,NULL,0 },
+{ "CF_BITMAP", SbxINTEGER, _CPROP, RTLNAME(CF_BITMAP),0 },
+{ "CF_METAFILEPICT",SbxINTEGER, _CPROP, RTLNAME(CF_METAFILEPICT),0 },
+{ "CF_TEXT", SbxINTEGER, _CPROP, RTLNAME(CF_TEXT),0 },
+{ "ChDir", SbxNULL, 1 | _FUNCTION, RTLNAME(ChDir),0 },
+ { "string", SbxSTRING, 0,NULL,0 },
+{ "ChDrive", SbxNULL, 1 | _FUNCTION, RTLNAME(ChDrive),0 },
+ { "string", SbxSTRING, 0,NULL,0 },
+
+{ "Choose", SbxVARIANT, 2 | _FUNCTION, RTLNAME(Choose),0 },
+ { "Index", SbxINTEGER, 0,NULL,0 },
+ { "Expression", SbxVARIANT, 0,NULL,0 },
+
+{ "Chr", SbxSTRING, 1 | _FUNCTION, RTLNAME(Chr),0 },
+ { "string", SbxINTEGER, 0,NULL,0 },
+{ "ChrW", SbxSTRING, 1 | _FUNCTION | _COMPTMASK, RTLNAME(Chr),0},
+ { "string", SbxINTEGER, 0,NULL,0 },
+
+{ "CInt", SbxINTEGER, 1 | _FUNCTION, RTLNAME(CInt),0 },
+ { "expression", SbxVARIANT, 0,NULL,0 },
+{ "CLEAR_ALLTABS", SbxINTEGER, _CPROP, RTLNAME(CLEAR_ALLTABS),0 },
+{ "CLEAR_TAB", SbxINTEGER, _CPROP, RTLNAME(CLEAR_TAB),0 },
+{ "CLng", SbxLONG, 1 | _FUNCTION, RTLNAME(CLng),0 },
+ { "expression", SbxVARIANT, 0,NULL,0 },
+{ "CompatibilityMode", SbxBOOL, 1 | _FUNCTION, RTLNAME(CompatibilityMode),0},
+ { "bEnable", SbxBOOL, 0,NULL,0 },
+{ "ConvertFromUrl", SbxSTRING, 1 | _FUNCTION, RTLNAME(ConvertFromUrl),0 },
+ { "Url", SbxSTRING, 0,NULL,0 },
+{ "ConvertToUrl", SbxSTRING, 1 | _FUNCTION, RTLNAME(ConvertToUrl),0 },
+ { "SystemPath", SbxSTRING, 0,NULL,0 },
+{ "Cos", SbxDOUBLE, 1 | _FUNCTION, RTLNAME(Cos),0 },
+ { "number", SbxDOUBLE, 0,NULL,0 },
+{ "CreateObject", SbxOBJECT, 1 | _FUNCTION, RTLNAME( CreateObject ),0 },
+ { "class", SbxSTRING, 0,NULL,0 },
+{ "CreateUnoListener",SbxOBJECT, 1 | _FUNCTION, RTLNAME( CreateUnoListener ),0 },
+ { "prefix", SbxSTRING, 0,NULL,0 },
+ { "typename", SbxSTRING, 0,NULL,0 },
+{ "CreateUnoDialog",SbxOBJECT, 2 | _FUNCTION, RTLNAME( CreateUnoDialog ),0 },
+ { "dialoglibrary",SbxOBJECT, 0,NULL,0 },
+ { "dialogname", SbxSTRING, 0,NULL,0 },
+{ "CreateUnoService",SbxOBJECT, 1 | _FUNCTION, RTLNAME( CreateUnoService ),0 },
+ { "servicename", SbxSTRING, 0,NULL,0 },
+{ "CreateUnoServiceWithArguments",SbxOBJECT, 2 | _FUNCTION, RTLNAME( CreateUnoServiceWithArguments ),0 },
+ { "servicename", SbxSTRING, 0,NULL,0 },
+ { "arguments", SbxARRAY, 0,NULL,0 },
+{ "CreateUnoStruct",SbxOBJECT, 1 | _FUNCTION, RTLNAME( CreateUnoStruct ),0 },
+ { "classname", SbxSTRING, 0,NULL,0 },
+{ "CreateUnoValue", SbxOBJECT, 2 | _FUNCTION, RTLNAME( CreateUnoValue ),0 },
+ { "type", SbxSTRING, 0,NULL,0 },
+ { "value", SbxVARIANT, 0,NULL,0 },
+{ "CreatePropertySet",SbxOBJECT, 1 | _FUNCTION, RTLNAME( CreatePropertySet ),0 },
+ { "values", SbxARRAY, 0,NULL,0 },
+{ "CSng", SbxSINGLE, 1 | _FUNCTION, RTLNAME(CSng),0 },
+ { "expression", SbxVARIANT, 0,NULL,0 },
+{ "CStr", SbxSTRING, 1 | _FUNCTION, RTLNAME(CStr),0 },
+ { "expression", SbxVARIANT, 0,NULL,0 },
+{ "CurDir", SbxSTRING, 1 | _FUNCTION, RTLNAME(CurDir),0 },
+ { "string", SbxSTRING, 0,NULL,0 },
+{ "CVar", SbxVARIANT, 1 | _FUNCTION, RTLNAME(CVar),0 },
+ { "expression", SbxVARIANT, 0,NULL,0 },
+{ "CVErr", SbxVARIANT, 1 | _FUNCTION, RTLNAME(CVErr),0 },
+ { "expression", SbxVARIANT, 0,NULL,0 },
+
+{ "Date", SbxDATE, _LFUNCTION,RTLNAME(Date),0 },
+{ "DateAdd", SbxDATE, 3 | _FUNCTION, RTLNAME(DateAdd),0 },
+ { "Interval", SbxSTRING, 0,NULL,0 },
+ { "Number", SbxLONG, 0,NULL,0 },
+ { "Date", SbxDATE, 0,NULL,0 },
+{ "DateDiff", SbxDOUBLE, 5 | _FUNCTION, RTLNAME(DateDiff),0 },
+ { "Interval", SbxSTRING, 0,NULL,0 },
+ { "Date1", SbxDATE, 0,NULL,0 },
+ { "Date2", SbxDATE, 0,NULL,0 },
+ { "Firstdayofweek" , SbxINTEGER, _OPT,NULL,0 },
+ { "Firstweekofyear", SbxINTEGER, _OPT,NULL,0 },
+{ "DatePart", SbxLONG, 4 | _FUNCTION, RTLNAME(DatePart),0 },
+ { "Interval", SbxSTRING, 0,NULL,0 },
+ { "Date", SbxDATE, 0,NULL,0 },
+ { "Firstdayofweek" , SbxINTEGER, _OPT, NULL,0 },
+ { "Firstweekofyear", SbxINTEGER, _OPT, NULL,0 },
+{ "DateSerial", SbxDATE, 3 | _FUNCTION, RTLNAME(DateSerial),0 },
+ { "Year", SbxINTEGER, 0,NULL,0 },
+ { "Month", SbxINTEGER, 0,NULL,0 },
+ { "Day", SbxINTEGER, 0,NULL,0 },
+{ "DateValue", SbxDATE, 1 | _FUNCTION, RTLNAME(DateValue),0 },
+ { "String", SbxSTRING, 0,NULL,0 },
+{ "Day", SbxINTEGER, 1 | _FUNCTION, RTLNAME(Day),0 },
+ { "Date", SbxDATE, 0,NULL,0 },
+{ "Ddeexecute", SbxNULL, 2 | _FUNCTION, RTLNAME(DDEExecute),0 },
+ { "Channel", SbxLONG, 0,NULL,0 },
+ { "Command", SbxSTRING, 0,NULL,0 },
+{ "Ddeinitiate", SbxINTEGER, 2 | _FUNCTION, RTLNAME(DDEInitiate),0 },
+ { "Application", SbxSTRING, 0,NULL,0 },
+ { "Topic", SbxSTRING, 0,NULL,0 },
+{ "Ddepoke", SbxNULL, 3 | _FUNCTION, RTLNAME(DDEPoke),0 },
+ { "Channel", SbxLONG, 0,NULL,0 },
+ { "Item", SbxSTRING, 0,NULL,0 },
+ { "Data", SbxSTRING, 0,NULL,0 },
+{ "Dderequest", SbxSTRING, 2 | _FUNCTION, RTLNAME(DDERequest),0 },
+ { "Channel", SbxLONG, 0,NULL,0 },
+ { "Item", SbxSTRING, 0,NULL,0 },
+{ "Ddeterminate", SbxNULL, 1 | _FUNCTION, RTLNAME(DDETerminate),0 },
+ { "Channel", SbxLONG, 0,NULL,0 },
+{ "Ddeterminateall", SbxNULL, _FUNCTION, RTLNAME(DDETerminateAll),0 },
+{ "DimArray", SbxOBJECT, _FUNCTION, RTLNAME(DimArray),0 },
+{ "Dir", SbxSTRING, 2 | _FUNCTION, RTLNAME(Dir),0 },
+ { "FileSpec", SbxSTRING, _OPT, NULL,0 },
+ { "attrmask", SbxINTEGER, _OPT, NULL,0 },
+{ "DoEvents", SbxEMPTY, _FUNCTION, RTLNAME(DoEvents),0 },
+{ "DumpAllObjects", SbxEMPTY, 2 | _SUB, RTLNAME(DumpAllObjects),0 },
+ { "FileSpec", SbxSTRING, 0,NULL,0 },
+ { "DumpAll", SbxINTEGER, _OPT, NULL,0 },
+
+{ "Empty", SbxVARIANT, _CPROP, RTLNAME(Empty),0 },
+{ "EqualUnoObjects",SbxBOOL, 2 | _FUNCTION, RTLNAME(EqualUnoObjects),0 },
+ { "Variant", SbxVARIANT, 0,NULL,0 },
+ { "Variant", SbxVARIANT, 0,NULL,0 },
+{ "EnableReschedule", SbxNULL, 1 | _FUNCTION, RTLNAME(EnableReschedule),0},
+ { "bEnable", SbxBOOL, 0,NULL,0 },
+{ "Environ", SbxSTRING, 1 | _FUNCTION, RTLNAME(Environ),0 },
+ { "Environmentstring",SbxSTRING, 0,NULL,0 },
+{ "EOF", SbxBOOL, 1 | _FUNCTION, RTLNAME(EOF),0 },
+ { "Channel", SbxINTEGER, 0,NULL,0 },
+{ "Erl", SbxLONG, _ROPROP, RTLNAME( Erl ),0 },
+{ "Err", SbxVARIANT, _RWPROP, RTLNAME( Err ),0 },
+{ "Error", SbxSTRING, 1 | _FUNCTION, RTLNAME( Error ),0 },
+ { "code", SbxLONG, 0,NULL,0 },
+{ "Exp", SbxDOUBLE, 1 | _FUNCTION, RTLNAME(Exp),0 },
+ { "number", SbxDOUBLE, 0,NULL,0 },
+
+{ "False", SbxBOOL, _CPROP, RTLNAME(False),0 },
+{ "FileAttr", SbxINTEGER, 2 | _FUNCTION, RTLNAME(FileAttr),0 },
+ { "Channel", SbxINTEGER, 0,NULL,0 },
+ { "Attributes", SbxINTEGER, 0,NULL,0 },
+{ "FileCopy", SbxNULL, 2 | _FUNCTION, RTLNAME(FileCopy),0 },
+ { "Source", SbxSTRING, 0,NULL,0 },
+ { "Destination", SbxSTRING, 0,NULL,0 },
+{ "FileDateTime", SbxSTRING, 1 | _FUNCTION, RTLNAME(FileDateTime),0 },
+ { "filename", SbxSTRING, 0,NULL,0 },
+{ "FileExists", SbxBOOL, 1 | _FUNCTION, RTLNAME(FileExists),0 },
+ { "filename", SbxSTRING, 0,NULL,0 },
+{ "FileLen", SbxLONG, 1 | _FUNCTION, RTLNAME(FileLen),0 },
+ { "filename", SbxSTRING, 0,NULL,0 },
+{ "FindObject", SbxOBJECT, 1 | _FUNCTION, RTLNAME(FindObject),0 },
+ { "Name", SbxSTRING, 0,NULL,0 },
+{ "FindPropertyObject", SbxOBJECT, 2 | _FUNCTION, RTLNAME(FindPropertyObject),0 },
+ { "Object", SbxOBJECT, 0,NULL,0 },
+ { "Name", SbxSTRING, 0,NULL,0 },
+{ "Fix", SbxDOUBLE, 1 | _FUNCTION, RTLNAME(Fix),0 },
+ { "number", SbxDOUBLE, 0,NULL,0 },
+{ "Format", SbxSTRING, 2 | _FUNCTION, RTLNAME(Format),0 },
+ { "expression", SbxVARIANT, 0,NULL,0 },
+ { "format", SbxSTRING, _OPT, NULL,0 },
+{ "FormatDateTime", SbxSTRING, 2 | _FUNCTION | _COMPTMASK, RTLNAME(FormatDateTime),0 },
+ { "Date", SbxDATE, 0,NULL,0 },
+ { "NamedFormat", SbxINTEGER, _OPT, NULL,0 },
+{ "FRAMEANCHORCHAR", SbxINTEGER, _CPROP, RTLNAME(FRAMEANCHORCHAR),0 },
+{ "FRAMEANCHORPAGE", SbxINTEGER, _CPROP, RTLNAME(FRAMEANCHORPAGE),0 },
+{ "FRAMEANCHORPARA", SbxINTEGER, _CPROP, RTLNAME(FRAMEANCHORPARA),0 },
+{ "FreeFile", SbxINTEGER, _FUNCTION, RTLNAME(FreeFile),0 },
+{ "FreeLibrary", SbxNULL, 1 | _FUNCTION, RTLNAME(FreeLibrary),0 },
+ { "Modulename", SbxSTRING, 0,NULL,0 },
+
+{ "Get", SbxNULL, 3 | _FUNCTION, RTLNAME(Get),0 },
+ { "filenumber", SbxINTEGER, 0,NULL,0 },
+ { "recordnumber", SbxLONG, 0,NULL,0 },
+ { "variablename", SbxVARIANT, 0,NULL,0 },
+{ "GetAttr", SbxINTEGER, 1 | _FUNCTION, RTLNAME(GetAttr),0 },
+ { "filename", SbxSTRING, 0,NULL,0 },
+{ "GetDefaultContext", SbxOBJECT, 0 | _FUNCTION, RTLNAME(GetDefaultContext),0 },
+{ "GetDialogZoomFactorX", SbxDOUBLE, _FUNCTION,RTLNAME(GetDialogZoomFactorX),0 },
+{ "GetDialogZoomFactorY", SbxDOUBLE, _FUNCTION,RTLNAME(GetDialogZoomFactorY),0 },
+{ "GetGUIType", SbxINTEGER, _FUNCTION,RTLNAME(GetGUIType),0 },
+{ "GetGUIVersion", SbxLONG, _FUNCTION,RTLNAME(GetGUIVersion),0 },
+{ "GetPathSeparator", SbxSTRING, _FUNCTION,RTLNAME(GetPathSeparator),0 },
+{ "GetProcessServiceManager", SbxOBJECT, 0 | _FUNCTION, RTLNAME(GetProcessServiceManager),0 },
+{ "GetSolarVersion", SbxLONG, _FUNCTION,RTLNAME(GetSolarVersion),0 },
+{ "GetSystemTicks", SbxLONG, _FUNCTION,RTLNAME(GetSystemTicks),0 },
+{ "GetSystemType", SbxINTEGER, _FUNCTION,RTLNAME(GetSystemType),0 },
+{ "GlobalScope", SbxOBJECT, _FUNCTION,RTLNAME(GlobalScope),0 },
+{ "Green", SbxINTEGER, 1 | _FUNCTION, RTLNAME(Green),0 },
+ { "RGB-Value", SbxLONG, 0,NULL,0 },
+
+{ "HasUnoInterfaces", SbxBOOL, 1 | _FUNCTION, RTLNAME(HasUnoInterfaces),0},
+ { "InterfaceName",SbxSTRING, 0,NULL,0 },
+{ "Hex", SbxSTRING, 1 | _FUNCTION, RTLNAME(Hex),0 },
+ { "number", SbxLONG, 0,NULL,0 },
+{ "Hour", SbxINTEGER, 1 | _FUNCTION, RTLNAME(Hour),0 },
+ { "Date", SbxDATE, 0,NULL,0 },
+
+{ "IDABORT", SbxINTEGER, _CPROP, RTLNAME(IDABORT),0 },
+{ "IDCANCEL", SbxINTEGER, _CPROP, RTLNAME(IDCANCEL),0 },
+{ "IDNO", SbxINTEGER, _CPROP, RTLNAME(IDNO),0 },
+{ "IDOK", SbxINTEGER, _CPROP, RTLNAME(IDOK),0 },
+{ "IDRETRY", SbxINTEGER, _CPROP, RTLNAME(IDRETRY),0 },
+{ "IDYES", SbxINTEGER, _CPROP, RTLNAME(IDYES),0 },
+
+{ "Iif", SbxVARIANT, 3 | _FUNCTION, RTLNAME(Iif),0 },
+ { "Bool", SbxBOOL, 0,NULL,0 },
+ { "Variant1", SbxVARIANT, 0,NULL,0 },
+ { "Variant2", SbxVARIANT, 0,NULL,0 },
+
+{ "Input", SbxSTRING, 2 | _FUNCTION | _COMPTMASK, RTLNAME(Input),0},
+ { "Number", SbxLONG, 0,NULL,0 },
+ { "FileNumber", SbxLONG, 0,NULL,0 },
+{ "InputBox", SbxSTRING, 5 | _FUNCTION, RTLNAME(InputBox),0 },
+ { "Prompt", SbxSTRING, 0,NULL,0 },
+ { "Title", SbxSTRING, _OPT, NULL,0 },
+ { "Default", SbxSTRING, _OPT, NULL,0 },
+ { "XPosTwips", SbxLONG, _OPT, NULL,0 },
+ { "YPosTwips", SbxLONG, _OPT, NULL,0 },
+{ "InStr", SbxLONG, 4 | _FUNCTION, RTLNAME(InStr),0 },
+ { "Start", SbxSTRING, _OPT, NULL,0 },
+ { "String1", SbxSTRING, 0,NULL,0 },
+ { "String2", SbxSTRING, 0,NULL,0 },
+ { "Compare", SbxINTEGER, _OPT, NULL,0 },
+{ "InStrRev", SbxLONG, 4 | _FUNCTION | _COMPTMASK, RTLNAME(InStrRev),0},
+ { "String1", SbxSTRING, 0,NULL,0 },
+ { "String2", SbxSTRING, 0,NULL,0 },
+ { "Start", SbxSTRING, _OPT, NULL,0 },
+ { "Compare", SbxINTEGER, _OPT, NULL,0 },
+{ "Int", SbxDOUBLE, 1 | _FUNCTION, RTLNAME(Int),0 },
+ { "number", SbxDOUBLE, 0,NULL,0 },
+{ "IsArray", SbxBOOL, 1 | _FUNCTION, RTLNAME(IsArray),0 },
+ { "Variant", SbxVARIANT, 0,NULL,0 },
+{ "IsDate", SbxBOOL, 1 | _FUNCTION, RTLNAME(IsDate),0 },
+ { "Variant", SbxVARIANT, 0,NULL,0 },
+{ "IsEmpty", SbxBOOL, 1 | _FUNCTION, RTLNAME(IsEmpty),0 },
+ { "Variant", SbxVARIANT, 0,NULL,0 },
+{ "IsError", SbxBOOL, 1 | _FUNCTION, RTLNAME(IsError),0 },
+ { "Variant", SbxVARIANT, 0,NULL,0 },
+{ "IsMissing", SbxBOOL, 1 | _FUNCTION, RTLNAME(IsMissing),0 },
+ { "Variant", SbxVARIANT, 0,NULL,0 },
+{ "IsNull", SbxBOOL, 1 | _FUNCTION, RTLNAME(IsNull),0 },
+ { "Variant", SbxVARIANT, 0,NULL,0 },
+{ "IsNumeric", SbxBOOL, 1 | _FUNCTION, RTLNAME(IsNumeric),0 },
+ { "Variant", SbxVARIANT, 0,NULL,0 },
+{ "IsObject", SbxBOOL, 1 | _FUNCTION, RTLNAME(IsObject),0 },
+ { "Variant", SbxVARIANT, 0,NULL,0 },
+{ "IsUnoStruct", SbxBOOL, 1 | _FUNCTION, RTLNAME(IsUnoStruct),0 },
+ { "Variant", SbxVARIANT, 0,NULL,0 },
+{ "Join", SbxSTRING, 2 | _FUNCTION, RTLNAME(Join),0 },
+ { "list", SbxOBJECT, 0,NULL,0 },
+ { "delimiter", SbxSTRING, 0,NULL,0 },
+{ "Kill", SbxNULL, 1 | _FUNCTION, RTLNAME(Kill),0 },
+ { "filespec", SbxSTRING, 0,NULL,0 },
+{ "LBound", SbxLONG, 1 | _FUNCTION, RTLNAME(LBound),0 },
+ { "Variant", SbxVARIANT, 0,NULL,0 },
+{ "LCase", SbxSTRING, 1 | _FUNCTION, RTLNAME(LCase),0 },
+ { "string", SbxSTRING, 0,NULL,0 },
+{ "Left", SbxSTRING, 2 | _FUNCTION, RTLNAME(Left),0 },
+ { "String", SbxSTRING, 0,NULL,0 },
+ { "Count", SbxLONG, 0,NULL,0 },
+{ "Len", SbxLONG, 1 | _FUNCTION, RTLNAME(Len),0 },
+ { "StringOrVariant", SbxVARIANT, 0,NULL,0 },
+{ "LenB", SbxLONG, 1 | _FUNCTION, RTLNAME(Len),0 },
+ { "StringOrVariant", SbxVARIANT, 0,NULL,0 },
+{ "Load", SbxNULL, 1 | _FUNCTION, RTLNAME(Load),0 },
+ { "object", SbxOBJECT, 0,NULL,0 },
+{ "LoadPicture", SbxOBJECT, 1 | _FUNCTION, RTLNAME(LoadPicture),0 },
+ { "string", SbxSTRING, 0,NULL,0 },
+{ "Loc", SbxLONG, 1 | _FUNCTION, RTLNAME(Loc),0 },
+ { "Channel", SbxINTEGER, 0,NULL,0 },
+{ "Lof", SbxLONG, 1 | _FUNCTION, RTLNAME(Lof),0 },
+ { "Channel", SbxINTEGER, 0,NULL,0 },
+{ "Log", SbxDOUBLE, 1 | _FUNCTION, RTLNAME(Log),0 },
+ { "number", SbxDOUBLE, 0,NULL,0 },
+{ "LTrim", SbxSTRING, 1 | _FUNCTION, RTLNAME(LTrim),0 },
+ { "string", SbxSTRING, 0,NULL,0 },
+
+{ "MB_ABORTRETRYIGNORE", SbxINTEGER, _CPROP, RTLNAME(MB_ABORTRETRYIGNORE),0},
+{ "MB_APPLMODAL", SbxINTEGER, _CPROP, RTLNAME(MB_APPLMODAL),0 },
+{ "MB_DEFBUTTON1", SbxINTEGER, _CPROP, RTLNAME(MB_DEFBUTTON1),0 },
+{ "MB_DEFBUTTON2", SbxINTEGER, _CPROP, RTLNAME(MB_DEFBUTTON2),0 },
+{ "MB_DEFBUTTON3", SbxINTEGER, _CPROP, RTLNAME(MB_DEFBUTTON3),0 },
+{ "MB_ICONEXCLAMATION", SbxINTEGER, _CPROP, RTLNAME(MB_ICONEXCLAMATION),0},
+{ "MB_ICONINFORMATION", SbxINTEGER, _CPROP, RTLNAME(MB_ICONINFORMATION),0},
+{ "MB_ICONQUESTION",SbxINTEGER, _CPROP, RTLNAME(MB_ICONQUESTION),0 },
+{ "MB_ICONSTOP", SbxINTEGER, _CPROP, RTLNAME(MB_ICONSTOP),0 },
+{ "MB_OK", SbxINTEGER, _CPROP, RTLNAME(MB_OK),0 },
+{ "MB_OKCANCEL", SbxINTEGER, _CPROP, RTLNAME(MB_OKCANCEL),0 },
+{ "MB_RETRYCANCEL", SbxINTEGER, _CPROP, RTLNAME(MB_RETRYCANCEL),0 },
+{ "MB_SYSTEMMODAL", SbxINTEGER, _CPROP, RTLNAME(MB_SYSTEMMODAL),0 },
+{ "MB_YESNO", SbxINTEGER, _CPROP, RTLNAME(MB_YESNO),0 },
+{ "MB_YESNOCANCEL", SbxINTEGER, _CPROP, RTLNAME(MB_YESNOCANCEL),0 },
+
+{ "Me", SbxOBJECT, 0 | _FUNCTION | _COMPTMASK, RTLNAME(Me),0 },
+{ "Mid", SbxSTRING, 3 | _LFUNCTION,RTLNAME(Mid),0 },
+ { "String", SbxSTRING, 0,NULL,0 },
+ { "StartPos", SbxLONG, 0,NULL,0 },
+ { "Length", SbxLONG, _OPT, NULL,0 },
+{ "Minute", SbxINTEGER, 1 | _FUNCTION, RTLNAME(Minute),0 },
+ { "Date", SbxDATE, 0,NULL,0 },
+{ "MkDir", SbxNULL, 1 | _FUNCTION, RTLNAME(MkDir),0 },
+ { "pathname", SbxSTRING, 0,NULL,0 },
+{ "Month", SbxINTEGER, 1 | _FUNCTION, RTLNAME(Month),0 },
+ { "Date", SbxDATE, 0,NULL,0 },
+{ "MonthName", SbxSTRING, 2 | _FUNCTION | _COMPTMASK, RTLNAME(MonthName),0 },
+ { "Month", SbxINTEGER, 0,NULL,0 },
+ { "Abbreviate", SbxBOOL, _OPT, NULL,0 },
+{ "MsgBox", SbxINTEGER, 5 | _FUNCTION, RTLNAME(MsgBox),0 },
+ { "Prompt", SbxSTRING, 0,NULL,0 },
+ { "Buttons", SbxINTEGER, _OPT, NULL,0 },
+ { "Title", SbxSTRING, _OPT, NULL,0 },
+ { "Helpfile", SbxSTRING, _OPT, NULL,0 },
+ { "Context", SbxINTEGER, _OPT, NULL,0 },
+
+{ "Nothing", SbxOBJECT, _CPROP, RTLNAME(Nothing),0 },
+{ "Now", SbxDATE, _FUNCTION, RTLNAME(Now),0 },
+{ "Null", SbxNULL, _CPROP, RTLNAME(Null),0 },
+
+{ "Oct", SbxSTRING, 1 | _FUNCTION, RTLNAME(Oct),0 },
+ { "number", SbxLONG, 0,NULL,0 },
+
+{ "Partition", SbxSTRING, 4 | _FUNCTION, RTLNAME(Partition),0 },
+ { "number", SbxLONG, 0,NULL,0 },
+ { "start", SbxLONG, 0,NULL,0 },
+ { "stop", SbxLONG, 0,NULL,0 },
+ { "interval", SbxLONG, 0,NULL,0 },
+{ "Pi", SbxDOUBLE, _CPROP, RTLNAME(PI),0 },
+{ "Put", SbxNULL, 3 | _FUNCTION, RTLNAME(Put),0 },
+ { "filenumber", SbxINTEGER, 0,NULL,0 },
+ { "recordnumber", SbxLONG, 0,NULL,0 },
+ { "variablename", SbxVARIANT, 0,NULL,0 },
+
+{ "QBColor", SbxLONG, 1 | _FUNCTION, RTLNAME(QBColor),0 },
+ { "number", SbxINTEGER, 0,NULL,0 },
+
+{ "Randomize", SbxNULL, 1 | _FUNCTION, RTLNAME(Randomize),0 },
+ { "Number", SbxDOUBLE, _OPT, NULL,0 },
+{ "Red", SbxINTEGER, 1 | _FUNCTION, RTLNAME(Red),0 },
+ { "RGB-Value", SbxLONG, 0,NULL,0 },
+{ "Reset", SbxNULL, 0 | _FUNCTION, RTLNAME(Reset),0 },
+{ "ResolvePath", SbxSTRING, 1 | _FUNCTION, RTLNAME(ResolvePath),0 },
+ { "Path", SbxSTRING, 0,NULL,0 },
+{ "RGB", SbxLONG, 3 | _FUNCTION, RTLNAME(RGB),0 },
+ { "Red", SbxINTEGER, 0,NULL,0 },
+ { "Green", SbxINTEGER, 0,NULL,0 },
+ { "Blue", SbxINTEGER, 0,NULL,0 },
+{ "Replace", SbxSTRING, 6 | _FUNCTION, RTLNAME(Replace),0 },
+ { "Expression", SbxSTRING, 0,NULL,0 },
+ { "Find", SbxSTRING, 0,NULL,0 },
+ { "Replace", SbxSTRING, 0,NULL,0 },
+ { "Start", SbxINTEGER, _OPT, NULL,0 },
+ { "Count", SbxINTEGER, _OPT, NULL,0 },
+ { "Compare", SbxINTEGER, _OPT, NULL,0 },
+{ "Right", SbxSTRING, 2 | _FUNCTION, RTLNAME(Right),0 },
+ { "String", SbxSTRING, 0,NULL,0 },
+ { "Count", SbxLONG, 0,NULL,0 },
+{ "RmDir", SbxNULL, 1 | _FUNCTION, RTLNAME(RmDir),0 },
+ { "pathname", SbxSTRING, 0,NULL,0 },
+{ "Round", SbxDOUBLE, 2 | _FUNCTION | _COMPTMASK, RTLNAME(Round),0},
+ { "Expression", SbxDOUBLE, 0,NULL,0 },
+ { "Numdecimalplaces", SbxINTEGER, _OPT, NULL,0 },
+{ "Rnd", SbxDOUBLE, 1 | _FUNCTION, RTLNAME(Rnd),0 },
+ { "Number", SbxDOUBLE, _OPT, NULL,0 },
+{ "RTL", SbxOBJECT, 0 | _FUNCTION | _COMPTMASK, RTLNAME(RTL),0},
+{ "RTrim", SbxSTRING, 1 | _FUNCTION, RTLNAME(RTrim),0 },
+ { "string", SbxSTRING, 0,NULL,0 },
+
+{ "SavePicture", SbxNULL, 2 | _FUNCTION, RTLNAME(SavePicture),0 },
+ { "object", SbxOBJECT, 0,NULL,0 },
+ { "string", SbxSTRING, 0,NULL,0 },
+{ "Second", SbxINTEGER, 1 | _FUNCTION, RTLNAME(Second),0 },
+ { "Date", SbxDATE, 0,NULL,0 },
+{ "Seek", SbxLONG, 1 | _FUNCTION, RTLNAME(Seek),0 },
+ { "Channel", SbxINTEGER, 0,NULL,0 },
+{ "SendKeys", SbxNULL, 2 | _FUNCTION, RTLNAME(SendKeys),0 },
+ { "String", SbxSTRING, 0,NULL,0 },
+ { "Wait", SbxBOOL, _OPT, NULL,0 },
+{ "SetAttr", SbxNULL, 2 | _FUNCTION, RTLNAME(SetAttr),0 },
+ { "File" , SbxSTRING, 0,NULL,0 },
+ { "Attributes", SbxINTEGER, 0,NULL,0 },
+{ "SET_OFF", SbxINTEGER, _CPROP, RTLNAME(SET_OFF),0 },
+{ "SET_ON", SbxINTEGER, _CPROP, RTLNAME(SET_ON),0 },
+{ "SET_TAB", SbxINTEGER, _CPROP, RTLNAME(SET_TAB),0 },
+{ "Sgn", SbxINTEGER, 1 | _FUNCTION, RTLNAME(Sgn),0 },
+ { "number", SbxDOUBLE, 0,NULL,0 },
+{ "Shell", SbxLONG, 2 | _FUNCTION, RTLNAME(Shell),0 },
+ { "Commandstring",SbxSTRING, 0,NULL,0 },
+ { "WindowStyle", SbxINTEGER, _OPT, NULL,0 },
+{ "Sin", SbxDOUBLE, 1 | _FUNCTION, RTLNAME(Sin),0 },
+ { "number", SbxDOUBLE, 0,NULL,0 },
+{ "Space", SbxSTRING, 1 | _FUNCTION, RTLNAME(Space),0 },
+ { "string", SbxLONG, 0,NULL,0 },
+{ "Spc", SbxSTRING, 1 | _FUNCTION, RTLNAME(Spc),0 },
+ { "Count", SbxLONG, 0,NULL,0 },
+{ "Split", SbxOBJECT, 3 | _FUNCTION, RTLNAME(Split),0 },
+ { "expression", SbxSTRING, 0,NULL,0 },
+ { "delimiter", SbxSTRING, 0,NULL,0 },
+ { "count", SbxLONG, 0,NULL,0 },
+{ "Sqr", SbxDOUBLE, 1 | _FUNCTION, RTLNAME(Sqr),0 },
+ { "number", SbxDOUBLE, 0,NULL,0 },
+{ "Str", SbxSTRING, 1 | _FUNCTION, RTLNAME(Str),0 },
+ { "number", SbxDOUBLE, 0,NULL,0 },
+{ "StrComp", SbxINTEGER, 3 | _FUNCTION, RTLNAME(StrComp),0 },
+ { "String1", SbxSTRING, 0,NULL,0 },
+ { "String2", SbxSTRING, 0,NULL,0 },
+ { "Compare", SbxINTEGER, _OPT, NULL,0 },
+{ "StrConv", SbxOBJECT, 3 | _FUNCTION, RTLNAME(StrConv),0 },
+ { "String", SbxSTRING, 0,NULL,0 },
+ { "Conversion", SbxSTRING, 0,NULL,0 },
+ { "LCID", SbxINTEGER, _OPT,NULL,0 },
+{ "String", SbxSTRING, 2 | _FUNCTION, RTLNAME(String),0 },
+ { "Count", SbxLONG, 0,NULL,0 },
+ { "Filler", SbxVARIANT, 0,NULL,0 },
+{ "StrReverse", SbxSTRING, 1 | _FUNCTION | _COMPTMASK, RTLNAME(StrReverse),0 },
+ { "String1", SbxSTRING, 0,NULL,0 },
+{ "Switch", SbxVARIANT, 2 | _FUNCTION, RTLNAME(Switch),0 },
+ { "Expression", SbxVARIANT, 0,NULL,0 },
+ { "Value", SbxVARIANT, 0,NULL,0 },
+
+{ "Tan", SbxDOUBLE, 1 | _FUNCTION, RTLNAME(Tan),0 },
+ { "number", SbxDOUBLE, 0,NULL,0 },
+{ "Time", SbxVARIANT, _LFUNCTION,RTLNAME(Time),0 },
+{ "Timer", SbxDATE, _FUNCTION, RTLNAME(Timer),0 },
+{ "TimeSerial", SbxDATE, 3 | _FUNCTION, RTLNAME(TimeSerial),0 },
+ { "Hour", SbxLONG, 0,NULL,0 },
+ { "Minute", SbxLONG, 0,NULL,0 },
+ { "Second", SbxLONG, 0,NULL,0 },
+{ "TimeValue", SbxDATE, 1 | _FUNCTION, RTLNAME(TimeValue),0 },
+ { "String", SbxSTRING, 0,NULL,0 },
+{ "TOGGLE", SbxINTEGER, _CPROP, RTLNAME(TOGGLE),0 },
+{ "Trim", SbxSTRING, 1 | _FUNCTION, RTLNAME(Trim),0 },
+ { "String", SbxSTRING, 0,NULL,0 },
+{ "True", SbxBOOL, _CPROP, RTLNAME(True),0 },
+{ "TwipsPerPixelX", SbxLONG, _FUNCTION, RTLNAME(TwipsPerPixelX),0 },
+{ "TwipsPerPixelY", SbxLONG, _FUNCTION, RTLNAME(TwipsPerPixelY),0 },
+
+{ "TYP_AUTHORFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_AUTHORFLD),0 },
+{ "TYP_CHAPTERFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_CHAPTERFLD),0 },
+{ "TYP_CONDTXTFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_CONDTXTFLD),0 },
+{ "TYP_DATEFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_DATEFLD),0 },
+{ "TYP_DBFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_DBFLD),0 },
+{ "TYP_DBNAMEFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_DBNAMEFLD),0 },
+{ "TYP_DBNEXTSETFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_DBNEXTSETFLD),0 },
+{ "TYP_DBNUMSETFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_DBNUMSETFLD),0 },
+{ "TYP_DBSETNUMBERFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_DBSETNUMBERFLD),0 },
+{ "TYP_DDEFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_DDEFLD),0 },
+{ "TYP_DOCINFOFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_DOCINFOFLD),0 },
+{ "TYP_DOCSTATFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_DOCSTATFLD),0 },
+{ "TYP_EXTUSERFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_EXTUSERFLD),0 },
+{ "TYP_FILENAMEFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_FILENAMEFLD),0 },
+{ "TYP_FIXDATEFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_FIXDATEFLD),0 },
+{ "TYP_FIXTIMEFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_FIXTIMEFLD),0 },
+{ "TYP_FORMELFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_FORMELFLD),0 },
+{ "TYP_GETFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_GETFLD),0 },
+{ "TYP_GETREFFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_GETREFFLD),0 },
+{ "TYP_GETREFPAGEFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_GETREFPAGEFLD),0 },
+{ "TYP_HIDDENPARAFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_HIDDENPARAFLD),0 },
+{ "TYP_HIDDENTXTFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_HIDDENTXTFLD),0 },
+{ "TYP_INPUTFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_INPUTFLD),0 },
+{ "TYP_INTERNETFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_INTERNETFLD),0 },
+{ "TYP_JUMPEDITFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_JUMPEDITFLD),0 },
+{ "TYP_MACROFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_MACROFLD),0 },
+{ "TYP_NEXTPAGEFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_NEXTPAGEFLD),0 },
+{ "TYP_PAGENUMBERFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_PAGENUMBERFLD),0 },
+{ "TYP_POSTITFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_POSTITFLD),0 },
+{ "TYP_PREVPAGEFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_PREVPAGEFLD),0 },
+{ "TYP_SEQFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_SEQFLD),0 },
+{ "TYP_SETFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_SETFLD),0 },
+{ "TYP_SETINPFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_SETINPFLD),0 },
+{ "TYP_SETREFFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_SETREFFLD),0 },
+{ "TYP_SETREFPAGEFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_SETREFPAGEFLD),0 },
+{ "TYP_TEMPLNAMEFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_TEMPLNAMEFLD),0},
+{ "TYP_TIMEFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_TIMEFLD),0 },
+{ "TYP_USERFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_USERFLD),0 },
+{ "TYP_USRINPFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_USRINPFLD),0 },
+
+{ "TypeLen", SbxINTEGER, 1 | _FUNCTION, RTLNAME(TypeLen),0 },
+ { "Var", SbxVARIANT, 0,NULL,0 },
+{ "TypeName", SbxSTRING, 1 | _FUNCTION, RTLNAME(TypeName),0 },
+ { "Var", SbxVARIANT, 0,NULL,0 },
+
+{ "UBound", SbxLONG, 1 | _FUNCTION, RTLNAME(UBound),0 },
+ { "Var", SbxVARIANT, 0,NULL,0 },
+{ "UCase", SbxSTRING, 1 | _FUNCTION, RTLNAME(UCase),0 },
+ { "String", SbxSTRING, 0,NULL,0 },
+{ "Unload", SbxNULL, 1 | _FUNCTION, RTLNAME(Unload),0 },
+ { "Dialog", SbxOBJECT, 0,NULL,0 },
+
+{ "Val", SbxDOUBLE, 1 | _FUNCTION, RTLNAME(Val),0 },
+ { "String", SbxSTRING, 0,NULL,0 },
+{ "VarType", SbxINTEGER, 1 | _FUNCTION, RTLNAME(VarType),0 },
+ { "Var", SbxVARIANT, 0,NULL,0 },
+{ "V_EMPTY", SbxINTEGER, _CPROP, RTLNAME(V_EMPTY),0 },
+{ "V_NULL", SbxINTEGER, _CPROP, RTLNAME(V_NULL),0 },
+{ "V_INTEGER", SbxINTEGER, _CPROP, RTLNAME(V_INTEGER),0 },
+{ "V_LONG", SbxINTEGER, _CPROP, RTLNAME(V_LONG),0 },
+{ "V_SINGLE", SbxINTEGER, _CPROP, RTLNAME(V_SINGLE),0 },
+{ "V_DOUBLE", SbxINTEGER, _CPROP, RTLNAME(V_DOUBLE),0 },
+{ "V_CURRENCY", SbxINTEGER, _CPROP, RTLNAME(V_CURRENCY),0 },
+{ "V_DATE", SbxINTEGER, _CPROP, RTLNAME(V_DATE),0 },
+{ "V_STRING", SbxINTEGER, _CPROP, RTLNAME(V_STRING),0 },
+
+{ "Wait", SbxNULL, 1 | _FUNCTION, RTLNAME(Wait),0 },
+ { "Milliseconds", SbxLONG, 0,NULL,0 },
+//#i64882#
+{ "WaitUntil", SbxNULL, 1 | _FUNCTION, RTLNAME(WaitUntil),0 },
+ { "Date", SbxDOUBLE, 0,NULL,0 },
+{ "Weekday", SbxINTEGER, 2 | _FUNCTION, RTLNAME(Weekday),0 },
+ { "Date", SbxDATE, 0,NULL,0 },
+ { "Firstdayofweek", SbxINTEGER, _OPT, NULL,0 },
+{ "WeekdayName", SbxSTRING, 3 | _FUNCTION | _COMPTMASK, RTLNAME(WeekdayName),0 },
+ { "Weekday", SbxINTEGER, 0,NULL,0 },
+ { "Abbreviate", SbxBOOL, _OPT, NULL,0 },
+ { "Firstdayofweek", SbxINTEGER, _OPT, NULL,0 },
+{ "Year", SbxINTEGER, 1 | _FUNCTION, RTLNAME(Year),0 },
+ { "Date", SbxDATE, 0,NULL,0 },
+
+{ NULL, SbxNULL, -1,NULL,0 }}; // Tabellenende
+
+SbiStdObject::SbiStdObject( const String& r, StarBASIC* pb ) : SbxObject( r )
+{
+ // Muessen wir die Hashcodes initialisieren?
+ Methods* p = aMethods;
+ if( !p->nHash )
+ while( p->nArgs != -1 )
+ {
+ String aName_ = String::CreateFromAscii( p->pName );
+ p->nHash = SbxVariable::MakeHashCode( aName_ );
+ p += ( p->nArgs & _ARGSMASK ) + 1;
+ }
+
+ // #i92642: Remove default properties
+ Remove( XubString( RTL_CONSTASCII_USTRINGPARAM("Name") ), SbxCLASS_DONTCARE );
+ Remove( XubString( RTL_CONSTASCII_USTRINGPARAM("Parent") ), SbxCLASS_DONTCARE );
+
+ SetParent( pb );
+
+ pStdFactory = new SbStdFactory;
+ SbxBase::AddFactory( pStdFactory );
+
+ Insert( new SbStdClipboard );
+}
+
+SbiStdObject::~SbiStdObject()
+{
+ SbxBase::RemoveFactory( pStdFactory );
+ delete pStdFactory;
+}
+
+// Suche nach einem Element:
+// Hier wird linear durch die Methodentabelle gegangen, bis eine
+// passende Methode gefunden wurde. Auf Grund der Bits im nArgs-Feld
+// wird dann die passende Instanz eines SbxObjElement generiert.
+// Wenn die Methode/Property nicht gefunden wurde, nur NULL ohne
+// Fehlercode zurueckliefern, da so auch eine ganze Chain von
+// Objekten nach der Methode/Property befragt werden kann.
+
+SbxVariable* SbiStdObject::Find( const String& rName, SbxClassType t )
+{
+ // Bereits eingetragen?
+ SbxVariable* pVar = SbxObject::Find( rName, t );
+ if( !pVar )
+ {
+ // sonst suchen
+ USHORT nHash_ = SbxVariable::MakeHashCode( rName );
+ Methods* p = aMethods;
+ BOOL bFound = FALSE;
+ short nIndex = 0;
+ USHORT nSrchMask = _TYPEMASK;
+ switch( t )
+ {
+ case SbxCLASS_METHOD: nSrchMask = _METHOD; break;
+ case SbxCLASS_PROPERTY: nSrchMask = _PROPERTY; break;
+ case SbxCLASS_OBJECT: nSrchMask = _OBJECT; break;
+ default: break;
+ }
+ while( p->nArgs != -1 )
+ {
+ if( ( p->nArgs & nSrchMask )
+ && ( p->nHash == nHash_ )
+ && ( rName.EqualsIgnoreCaseAscii( p->pName ) ) )
+ {
+ bFound = TRUE;
+ if( p->nArgs & _COMPTMASK )
+ {
+ SbiInstance* pInst = pINST;
+ if( !pInst || !pInst->IsCompatibility() )
+ bFound = FALSE;
+ }
+ break;
+ }
+ nIndex += ( p->nArgs & _ARGSMASK ) + 1;
+ p = aMethods + nIndex;
+ }
+
+ if( bFound )
+ {
+ // Args-Felder isolieren:
+ short nAccess = ( p->nArgs & _RWMASK ) >> 8;
+ short nType = ( p->nArgs & _TYPEMASK );
+ if( p->nArgs & _CONST )
+ nAccess |= SBX_CONST;
+ String aName_ = String::CreateFromAscii( p->pName );
+ SbxClassType eCT = SbxCLASS_OBJECT;
+ if( nType & _PROPERTY )
+ eCT = SbxCLASS_PROPERTY;
+ else if( nType & _METHOD )
+ eCT = SbxCLASS_METHOD;
+ pVar = Make( aName_, eCT, p->eType );
+ pVar->SetUserData( nIndex + 1 );
+ pVar->SetFlags( nAccess );
+ }
+ }
+ return pVar;
+}
+
+// SetModified mu bei der RTL abgklemmt werden
+void SbiStdObject::SetModified( BOOL )
+{
+}
+
+// Aufruf einer Property oder Methode.
+
+void SbiStdObject::SFX_NOTIFY( SfxBroadcaster& rBC, const TypeId& rBCType,
+ const SfxHint& rHint, const TypeId& rHintType )
+
+{
+ const SbxHint* pHint = PTR_CAST(SbxHint,&rHint);
+ if( pHint )
+ {
+ SbxVariable* pVar = pHint->GetVar();
+ SbxArray* pPar_ = pVar->GetParameters();
+ ULONG t = pHint->GetId();
+ USHORT nCallId = (USHORT) pVar->GetUserData();
+ if( nCallId )
+ {
+ if( t == SBX_HINT_INFOWANTED )
+ pVar->SetInfo( GetInfo( (short) pVar->GetUserData() ) );
+ else
+ {
+ BOOL bWrite = FALSE;
+ if( t == SBX_HINT_DATACHANGED )
+ bWrite = TRUE;
+ if( t == SBX_HINT_DATAWANTED || bWrite )
+ {
+ RtlCall p = (RtlCall) aMethods[ nCallId-1 ].pFunc;
+ SbxArrayRef rPar( pPar_ );
+ if( !pPar_ )
+ {
+ rPar = pPar_ = new SbxArray;
+ pPar_->Put( pVar, 0 );
+ }
+ p( (StarBASIC*) GetParent(), *pPar_, bWrite );
+ return;
+ }
+ }
+ }
+ SbxObject::SFX_NOTIFY( rBC, rBCType, rHint, rHintType );
+ }
+}
+
+// Zusammenbau der Infostruktur fuer einzelne Elemente
+// Falls nIdx = 0, nix erzeugen (sind Std-Props!)
+
+SbxInfo* SbiStdObject::GetInfo( short nIdx )
+{
+ if( !nIdx )
+ return NULL;
+ Methods* p = &aMethods[ --nIdx ];
+ // Wenn mal eine Hilfedatei zur Verfuegung steht:
+ // SbxInfo* pInfo_ = new SbxInfo( Hilfedateiname, p->nHelpId );
+ SbxInfo* pInfo_ = new SbxInfo;
+ short nPar = p->nArgs & _ARGSMASK;
+ for( short i = 0; i < nPar; i++ )
+ {
+ p++;
+ String aName_ = String::CreateFromAscii( p->pName );
+ USHORT nFlags_ = ( p->nArgs >> 8 ) & 0x03;
+ if( p->nArgs & _OPT )
+ nFlags_ |= SBX_OPTIONAL;
+ pInfo_->AddParam( aName_, p->eType, nFlags_ );
+ }
+ return pInfo_;
+}
+
diff --git a/basic/source/runtime/stdobj1.cxx b/basic/source/runtime/stdobj1.cxx
new file mode 100644
index 000000000000..94b7973c7e77
--- /dev/null
+++ b/basic/source/runtime/stdobj1.cxx
@@ -0,0 +1,551 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+#include <vcl/wrkwin.hxx>
+#include <vcl/svapp.hxx>
+#include <svtools/transfer.hxx>
+#include "runtime.hxx"
+#include <basic/sbstdobj.hxx>
+
+#define ATTR_IMP_TYPE 1
+#define ATTR_IMP_WIDTH 2
+#define ATTR_IMP_HEIGHT 3
+#define ATTR_IMP_BOLD 4
+#define ATTR_IMP_ITALIC 5
+#define ATTR_IMP_STRIKETHROUGH 6
+#define ATTR_IMP_UNDERLINE 7
+#define ATTR_IMP_WEIGHT 8
+#define ATTR_IMP_SIZE 9
+#define ATTR_IMP_NAME 10
+
+#define METH_CLEAR 20
+#define METH_GETDATA 21
+#define METH_GETFORMAT 22
+#define METH_GETTEXT 23
+#define METH_SETDATA 24
+#define METH_SETTEXT 25
+
+//------------------------------------------------------------------------------
+SbStdFactory::SbStdFactory()
+{
+}
+
+SbxObject* SbStdFactory::CreateObject( const String& rClassName )
+{
+ if( rClassName.EqualsIgnoreCaseAscii( String( RTL_CONSTASCII_USTRINGPARAM("Picture") ) ) )
+ return new SbStdPicture;
+ else
+ if( rClassName.EqualsIgnoreCaseAscii( String( RTL_CONSTASCII_USTRINGPARAM("Font") ) ) )
+ return new SbStdFont;
+ else
+ return NULL;
+}
+
+//------------------------------------------------------------------------------
+
+
+
+void SbStdPicture::PropType( SbxVariable* pVar, SbxArray*, BOOL bWrite )
+{
+ if( bWrite )
+ {
+ StarBASIC::Error( SbERR_PROP_READONLY );
+ return;
+ }
+
+ GraphicType eType = aGraphic.GetType();
+ INT16 nType = 0;
+
+ if( eType == GRAPHIC_BITMAP )
+ nType = 1;
+ else
+ if( eType != GRAPHIC_NONE )
+ nType = 2;
+
+ pVar->PutInteger( nType );
+}
+
+
+void SbStdPicture::PropWidth( SbxVariable* pVar, SbxArray*, BOOL bWrite )
+{
+ if( bWrite )
+ {
+ StarBASIC::Error( SbERR_PROP_READONLY );
+ return;
+ }
+
+ Size aSize = aGraphic.GetPrefSize();
+ aSize = GetpApp()->GetAppWindow()->LogicToPixel( aSize, aGraphic.GetPrefMapMode() );
+ aSize = GetpApp()->GetAppWindow()->PixelToLogic( aSize, MapMode( MAP_TWIP ) );
+
+ pVar->PutInteger( (INT16)aSize.Width() );
+}
+
+void SbStdPicture::PropHeight( SbxVariable* pVar, SbxArray*, BOOL bWrite )
+{
+ if( bWrite )
+ {
+ StarBASIC::Error( SbERR_PROP_READONLY );
+ return;
+ }
+
+ Size aSize = aGraphic.GetPrefSize();
+ aSize = GetpApp()->GetAppWindow()->LogicToPixel( aSize, aGraphic.GetPrefMapMode() );
+ aSize = GetpApp()->GetAppWindow()->PixelToLogic( aSize, MapMode( MAP_TWIP ) );
+
+ pVar->PutInteger( (INT16)aSize.Height() );
+}
+
+
+TYPEINIT1( SbStdPicture, SbxObject );
+
+SbStdPicture::SbStdPicture() :
+ SbxObject( String( RTL_CONSTASCII_USTRINGPARAM("Picture") ) )
+{
+ // Properties
+ SbxVariable* p = Make( String( RTL_CONSTASCII_USTRINGPARAM("Type") ), SbxCLASS_PROPERTY, SbxVARIANT );
+ p->SetFlags( SBX_READ | SBX_DONTSTORE );
+ p->SetUserData( ATTR_IMP_TYPE );
+ p = Make( String( RTL_CONSTASCII_USTRINGPARAM("Width") ), SbxCLASS_PROPERTY, SbxVARIANT );
+ p->SetFlags( SBX_READ | SBX_DONTSTORE );
+ p->SetUserData( ATTR_IMP_WIDTH );
+ p = Make( String( RTL_CONSTASCII_USTRINGPARAM("Height") ), SbxCLASS_PROPERTY, SbxVARIANT );
+ p->SetFlags( SBX_READ | SBX_DONTSTORE );
+ p->SetUserData( ATTR_IMP_HEIGHT );
+}
+
+SbStdPicture::~SbStdPicture()
+{
+}
+
+
+SbxVariable* SbStdPicture::Find( const String& rName, SbxClassType t )
+{
+ // Bereits eingetragen?
+ return SbxObject::Find( rName, t );
+}
+
+
+
+void SbStdPicture::SFX_NOTIFY( SfxBroadcaster& rBC, const TypeId& rBCType,
+ const SfxHint& rHint, const TypeId& rHintType )
+
+{
+ const SbxHint* pHint = PTR_CAST( SbxHint, &rHint );
+
+ if( pHint )
+ {
+ if( pHint->GetId() == SBX_HINT_INFOWANTED )
+ {
+ SbxObject::SFX_NOTIFY( rBC, rBCType, rHint, rHintType );
+ return;
+ }
+
+ SbxVariable* pVar = pHint->GetVar();
+ SbxArray* pPar_ = pVar->GetParameters();
+ USHORT nWhich = (USHORT)pVar->GetUserData();
+ BOOL bWrite = pHint->GetId() == SBX_HINT_DATACHANGED;
+
+ // Propteries
+ switch( nWhich )
+ {
+ case ATTR_IMP_TYPE: PropType( pVar, pPar_, bWrite ); return;
+ case ATTR_IMP_WIDTH: PropWidth( pVar, pPar_, bWrite ); return;
+ case ATTR_IMP_HEIGHT: PropHeight( pVar, pPar_, bWrite ); return;
+ }
+
+ SbxObject::SFX_NOTIFY( rBC, rBCType, rHint, rHintType );
+ }
+}
+
+//-----------------------------------------------------------------------------
+
+void SbStdFont::PropBold( SbxVariable* pVar, SbxArray*, BOOL bWrite )
+{
+ if( bWrite )
+ SetBold( pVar->GetBool() );
+ else
+ pVar->PutBool( IsBold() );
+}
+
+void SbStdFont::PropItalic( SbxVariable* pVar, SbxArray*, BOOL bWrite )
+{
+ if( bWrite )
+ SetItalic( pVar->GetBool() );
+ else
+ pVar->PutBool( IsItalic() );
+}
+
+void SbStdFont::PropStrikeThrough( SbxVariable* pVar, SbxArray*, BOOL bWrite )
+{
+ if( bWrite )
+ SetStrikeThrough( pVar->GetBool() );
+ else
+ pVar->PutBool( IsStrikeThrough() );
+}
+
+void SbStdFont::PropUnderline( SbxVariable* pVar, SbxArray*, BOOL bWrite )
+{
+ if( bWrite )
+ SetUnderline( pVar->GetBool() );
+ else
+ pVar->PutBool( IsUnderline() );
+}
+
+void SbStdFont::PropSize( SbxVariable* pVar, SbxArray*, BOOL bWrite )
+{
+ if( bWrite )
+ SetSize( (USHORT)pVar->GetInteger() );
+ else
+ pVar->PutInteger( (INT16)GetSize() );
+}
+
+void SbStdFont::PropName( SbxVariable* pVar, SbxArray*, BOOL bWrite )
+{
+ if( bWrite )
+ SetFontName( pVar->GetString() );
+ else
+ pVar->PutString( GetFontName() );
+}
+
+
+TYPEINIT1( SbStdFont, SbxObject );
+
+SbStdFont::SbStdFont() :
+ SbxObject( String( RTL_CONSTASCII_USTRINGPARAM("Font") ) )
+{
+ // Properties
+ SbxVariable* p = Make( String( RTL_CONSTASCII_USTRINGPARAM("Bold") ), SbxCLASS_PROPERTY, SbxVARIANT );
+ p->SetFlags( SBX_READWRITE | SBX_DONTSTORE );
+ p->SetUserData( ATTR_IMP_BOLD );
+ p = Make( String( RTL_CONSTASCII_USTRINGPARAM("Italic") ), SbxCLASS_PROPERTY, SbxVARIANT );
+ p->SetFlags( SBX_READWRITE | SBX_DONTSTORE );
+ p->SetUserData( ATTR_IMP_ITALIC );
+ p = Make( String( RTL_CONSTASCII_USTRINGPARAM("StrikeThrough") ), SbxCLASS_PROPERTY, SbxVARIANT );
+ p->SetFlags( SBX_READWRITE | SBX_DONTSTORE );
+ p->SetUserData( ATTR_IMP_STRIKETHROUGH );
+ p = Make( String( RTL_CONSTASCII_USTRINGPARAM("Underline") ), SbxCLASS_PROPERTY, SbxVARIANT );
+ p->SetFlags( SBX_READWRITE | SBX_DONTSTORE );
+ p->SetUserData( ATTR_IMP_UNDERLINE );
+ p = Make( String( RTL_CONSTASCII_USTRINGPARAM("Size") ), SbxCLASS_PROPERTY, SbxVARIANT );
+ p->SetFlags( SBX_READWRITE | SBX_DONTSTORE );
+ p->SetUserData( ATTR_IMP_SIZE );
+
+ // Name Property selbst verarbeiten
+ p = Find( String( RTL_CONSTASCII_USTRINGPARAM("Name") ), SbxCLASS_PROPERTY );
+ DBG_ASSERT( p, "Keine Name Property" );
+ p->SetUserData( ATTR_IMP_NAME );
+}
+
+SbStdFont::~SbStdFont()
+{
+}
+
+
+SbxVariable* SbStdFont::Find( const String& rName, SbxClassType t )
+{
+ // Bereits eingetragen?
+ return SbxObject::Find( rName, t );
+}
+
+
+
+void SbStdFont::SFX_NOTIFY( SfxBroadcaster& rBC, const TypeId& rBCType,
+ const SfxHint& rHint, const TypeId& rHintType )
+{
+ const SbxHint* pHint = PTR_CAST( SbxHint, &rHint );
+
+ if( pHint )
+ {
+ if( pHint->GetId() == SBX_HINT_INFOWANTED )
+ {
+ SbxObject::SFX_NOTIFY( rBC, rBCType, rHint, rHintType );
+ return;
+ }
+
+ SbxVariable* pVar = pHint->GetVar();
+ SbxArray* pPar_ = pVar->GetParameters();
+ USHORT nWhich = (USHORT)pVar->GetUserData();
+ BOOL bWrite = pHint->GetId() == SBX_HINT_DATACHANGED;
+
+ // Propteries
+ switch( nWhich )
+ {
+ case ATTR_IMP_BOLD: PropBold( pVar, pPar_, bWrite ); return;
+ case ATTR_IMP_ITALIC: PropItalic( pVar, pPar_, bWrite ); return;
+ case ATTR_IMP_STRIKETHROUGH:PropStrikeThrough( pVar, pPar_, bWrite ); return;
+ case ATTR_IMP_UNDERLINE: PropUnderline( pVar, pPar_, bWrite ); return;
+ case ATTR_IMP_SIZE: PropSize( pVar, pPar_, bWrite ); return;
+ case ATTR_IMP_NAME: PropName( pVar, pPar_, bWrite ); return;
+ }
+
+ SbxObject::SFX_NOTIFY( rBC, rBCType, rHint, rHintType );
+ }
+}
+
+
+//-----------------------------------------------------------------------------
+
+/*
+class TransferableHelperImpl : public TransferableHelper
+{
+ SotFormatStringId mFormat;
+ String mString;
+ Graphic mGraphic;
+
+ virtual void AddSupportedFormats();
+ virtual sal_Bool GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor );
+
+public:
+ TransferableHelperImpl( void ) { mFormat = 0; }
+ TransferableHelperImpl( const String& rStr )
+ mFormat( FORMAT_STRING ), mString( rStr ) {}
+ TransferableHelperImpl( const Graphic& rGraphic );
+ mFormat( FORMAT_BITMAP ), mGraphic( rGraphic ) {}
+
+};
+
+void TransferableHelperImpl::AddSupportedFormats()
+{
+}
+
+sal_Bool TransferableHelperImpl::GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor )
+{
+ sal_uInt32 nFormat = SotExchange::GetFormat( rFlavor );
+ if( nFormat == FORMAT_STRING )
+ {
+ }
+ else if( nFormat == FORMAT_BITMAP ||
+ nFormat == FORMAT_GDIMETAFILE )
+ {
+ }
+}
+*/
+
+void SbStdClipboard::MethClear( SbxVariable*, SbxArray* pPar_, BOOL )
+{
+ if( pPar_ && (pPar_->Count() > 1) )
+ {
+ StarBASIC::Error( SbERR_BAD_NUMBER_OF_ARGS );
+ return;
+ }
+
+ //Clipboard::Clear();
+}
+
+void SbStdClipboard::MethGetData( SbxVariable* pVar, SbxArray* pPar_, BOOL )
+{
+ (void)pVar;
+
+ if( !pPar_ || (pPar_->Count() != 2) )
+ {
+ StarBASIC::Error( SbERR_BAD_NUMBER_OF_ARGS );
+ return;
+ }
+
+ USHORT nFormat = pPar_->Get(1)->GetInteger();
+ if( !nFormat || nFormat > 3 )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+
+ /*
+ if( nFormat == FORMAT_STRING )
+ pVar->PutString( Clipboard::PasteString() );
+ else
+ if( (nFormat == FORMAT_BITMAP) ||
+ (nFormat == FORMAT_GDIMETAFILE ) )
+ {
+ SbxObjectRef xPic = new SbStdPicture;
+ Graphic aGraph;
+ aGraph.Paste();
+ ((SbStdPicture*)(SbxObject*)xPic)->SetGraphic( aGraph );
+ pVar->PutObject( xPic );
+ }
+ */
+}
+
+void SbStdClipboard::MethGetFormat( SbxVariable* pVar, SbxArray* pPar_, BOOL )
+{
+ if( !pPar_ || (pPar_->Count() != 2) )
+ {
+ StarBASIC::Error( SbERR_BAD_NUMBER_OF_ARGS );
+ return;
+ }
+
+ USHORT nFormat = pPar_->Get(1)->GetInteger();
+ if( !nFormat || nFormat > 3 )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+
+ pVar->PutBool( FALSE );
+ //pVar->PutBool( Clipboard::HasFormat( nFormat ) );
+}
+
+void SbStdClipboard::MethGetText( SbxVariable* pVar, SbxArray* pPar_, BOOL )
+{
+ if( pPar_ && (pPar_->Count() > 1) )
+ {
+ StarBASIC::Error( SbERR_BAD_NUMBER_OF_ARGS );
+ return;
+ }
+
+ pVar->PutString( String() );
+ //pVar->PutString( Clipboard::PasteString() );
+}
+
+void SbStdClipboard::MethSetData( SbxVariable* pVar, SbxArray* pPar_, BOOL )
+{
+ (void)pVar;
+
+ if( !pPar_ || (pPar_->Count() != 3) )
+ {
+ StarBASIC::Error( SbERR_BAD_NUMBER_OF_ARGS );
+ return;
+ }
+
+ USHORT nFormat = pPar_->Get(2)->GetInteger();
+ if( !nFormat || nFormat > 3 )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+
+ /*
+ if( nFormat == FORMAT_STRING )
+ {
+ Clipboard::CopyString( pPar_->Get(1)->GetString() );
+ }
+ else
+ if( (nFormat == FORMAT_BITMAP) ||
+ (nFormat == FORMAT_GDIMETAFILE) )
+ {
+ SbxObject* pObj = (SbxObject*)pPar_->Get(1)->GetObject();
+
+ if( pObj && pObj->IsA( TYPE( SbStdPicture ) ) )
+ ((SbStdPicture*)(SbxObject*)pObj)->GetGraphic().Copy();
+ }
+ */
+}
+
+void SbStdClipboard::MethSetText( SbxVariable* pVar, SbxArray* pPar_, BOOL )
+{
+ (void)pVar;
+
+ if( !pPar_ || (pPar_->Count() != 2) )
+ {
+ StarBASIC::Error( SbERR_BAD_NUMBER_OF_ARGS );
+ return;
+ }
+
+ // Clipboard::CopyString( pPar_->Get(1)->GetString() );
+}
+
+
+TYPEINIT1( SbStdClipboard, SbxObject );
+
+SbStdClipboard::SbStdClipboard() :
+ SbxObject( String( RTL_CONSTASCII_USTRINGPARAM("Clipboard") ) )
+{
+ // Name Property selbst verarbeiten
+ SbxVariable* p = Find( String( RTL_CONSTASCII_USTRINGPARAM("Name") ), SbxCLASS_PROPERTY );
+ DBG_ASSERT( p, "Keine Name Property" );
+ p->SetUserData( ATTR_IMP_NAME );
+
+ //Methoden registrieren
+ p = Make( String( RTL_CONSTASCII_USTRINGPARAM("Clear") ), SbxCLASS_METHOD, SbxEMPTY );
+ p->SetFlag( SBX_DONTSTORE );
+ p->SetUserData( METH_CLEAR );
+ p = Make( String( RTL_CONSTASCII_USTRINGPARAM("GetData") ), SbxCLASS_METHOD, SbxEMPTY );
+ p->SetFlag( SBX_DONTSTORE );
+ p->SetUserData( METH_GETDATA );
+ p = Make( String( RTL_CONSTASCII_USTRINGPARAM("GetFormat") ), SbxCLASS_METHOD, SbxEMPTY );
+ p->SetFlag( SBX_DONTSTORE );
+ p->SetUserData( METH_GETFORMAT );
+ p = Make( String( RTL_CONSTASCII_USTRINGPARAM("GetText") ), SbxCLASS_METHOD, SbxEMPTY );
+ p->SetFlag( SBX_DONTSTORE );
+ p->SetUserData( METH_GETTEXT );
+ p = Make( String( RTL_CONSTASCII_USTRINGPARAM("SetData") ), SbxCLASS_METHOD, SbxEMPTY );
+ p->SetFlag( SBX_DONTSTORE );
+ p->SetUserData( METH_SETDATA );
+ p = Make( String( RTL_CONSTASCII_USTRINGPARAM("SetText") ), SbxCLASS_METHOD, SbxEMPTY );
+ p->SetFlag( SBX_DONTSTORE );
+ p->SetUserData( METH_SETTEXT );
+}
+
+SbStdClipboard::~SbStdClipboard()
+{
+}
+
+
+SbxVariable* SbStdClipboard::Find( const String& rName, SbxClassType t )
+{
+ // Bereits eingetragen?
+ return SbxObject::Find( rName, t );
+}
+
+
+
+void SbStdClipboard::SFX_NOTIFY( SfxBroadcaster& rBC, const TypeId& rBCType,
+ const SfxHint& rHint, const TypeId& rHintType )
+{
+ const SbxHint* pHint = PTR_CAST( SbxHint, &rHint );
+
+ if( pHint )
+ {
+ if( pHint->GetId() == SBX_HINT_INFOWANTED )
+ {
+ SbxObject::SFX_NOTIFY( rBC, rBCType, rHint, rHintType );
+ return;
+ }
+
+ SbxVariable* pVar = pHint->GetVar();
+ SbxArray* pPar_ = pVar->GetParameters();
+ USHORT nWhich = (USHORT)pVar->GetUserData();
+ BOOL bWrite = pHint->GetId() == SBX_HINT_DATACHANGED;
+
+ // Methods
+ switch( nWhich )
+ {
+ case METH_CLEAR: MethClear( pVar, pPar_, bWrite ); return;
+ case METH_GETDATA: MethGetData( pVar, pPar_, bWrite ); return;
+ case METH_GETFORMAT: MethGetFormat( pVar, pPar_, bWrite ); return;
+ case METH_GETTEXT: MethGetText( pVar, pPar_, bWrite ); return;
+ case METH_SETDATA: MethSetData( pVar, pPar_, bWrite ); return;
+ case METH_SETTEXT: MethSetText( pVar, pPar_, bWrite ); return;
+ }
+
+ SbxObject::SFX_NOTIFY( rBC, rBCType, rHint, rHintType );
+ }
+}
+
+
diff --git a/basic/source/runtime/step0.cxx b/basic/source/runtime/step0.cxx
new file mode 100644
index 000000000000..06a8bb19af00
--- /dev/null
+++ b/basic/source/runtime/step0.cxx
@@ -0,0 +1,1332 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+#include <vcl/msgbox.hxx>
+#include <tools/fsys.hxx>
+
+#include "errobject.hxx"
+#include "runtime.hxx"
+#include "sbintern.hxx"
+#include "iosys.hxx"
+#include <sb.hrc>
+#include <basrid.hxx>
+#include "sbunoobj.hxx"
+#include "image.hxx"
+#include <com/sun/star/uno/Any.hxx>
+#include <com/sun/star/util/SearchOptions.hdl>
+#include <vcl/svapp.hxx>
+#include <unotools/textsearch.hxx>
+
+Reference< XInterface > createComListener( const Any& aControlAny, const ::rtl::OUString& aVBAType,
+ const ::rtl::OUString& aPrefix, SbxObjectRef xScopeObj );
+
+#include <algorithm>
+
+SbxVariable* getDefaultProp( SbxVariable* pRef );
+
+void SbiRuntime::StepNOP()
+{}
+
+void SbiRuntime::StepArith( SbxOperator eOp )
+{
+ SbxVariableRef p1 = PopVar();
+ TOSMakeTemp();
+ SbxVariable* p2 = GetTOS();
+
+
+ // This could & should be moved to the MakeTempTOS() method in runtime.cxx
+ // In the code which this is cut'npaste from there is a check for a ref
+ // count != 1 based on which the copy of the SbxVariable is done.
+ // see orig code in MakeTempTOS ( and I'm not sure what the significance,
+ // of that is )
+ // here we alway seem to have a refcount of 1. Also it seems that
+ // MakeTempTOS is called for other operation, so I hold off for now
+ // until I have a better idea
+ if ( bVBAEnabled
+ && ( p2->GetType() == SbxOBJECT || p2->GetType() == SbxVARIANT )
+ )
+ {
+ SbxVariable* pDflt = getDefaultProp( p2 );
+ if ( pDflt )
+ {
+ pDflt->Broadcast( SBX_HINT_DATAWANTED );
+ // replacing new p2 on stack causes object pointed by
+ // pDft->pParent to be deleted, when p2->Compute() is
+ // called below pParent is accessed ( but its deleted )
+ // so set it to NULL now
+ pDflt->SetParent( NULL );
+ p2 = new SbxVariable( *pDflt );
+ p2->SetFlag( SBX_READWRITE );
+ refExprStk->Put( p2, nExprLvl - 1 );
+ }
+ }
+
+ p2->ResetFlag( SBX_FIXED );
+ p2->Compute( eOp, *p1 );
+
+ checkArithmeticOverflow( p2 );
+}
+
+void SbiRuntime::StepUnary( SbxOperator eOp )
+{
+ TOSMakeTemp();
+ SbxVariable* p = GetTOS();
+ p->Compute( eOp, *p );
+}
+
+void SbiRuntime::StepCompare( SbxOperator eOp )
+{
+ SbxVariableRef p1 = PopVar();
+ SbxVariableRef p2 = PopVar();
+
+ // Make sure objects with default params have
+ // values ( and type ) set as appropriate
+ SbxDataType p1Type = p1->GetType();
+ SbxDataType p2Type = p2->GetType();
+ if ( p1Type == p2Type )
+ {
+ if ( p1Type == SbxEMPTY )
+ {
+ p1->Broadcast( SBX_HINT_DATAWANTED );
+ p2->Broadcast( SBX_HINT_DATAWANTED );
+ }
+ // if both sides are an object and have default props
+ // then we need to use the default props
+ // we don't need to worry if only one side ( lhs, rhs ) is an
+ // object ( object side will get coerced to correct type in
+ // Compare )
+ else if ( p1Type == SbxOBJECT )
+ {
+ SbxVariable* pDflt = getDefaultProp( p1 );
+ if ( pDflt )
+ {
+ p1 = pDflt;
+ p1->Broadcast( SBX_HINT_DATAWANTED );
+ }
+ pDflt = getDefaultProp( p2 );
+ if ( pDflt )
+ {
+ p2 = pDflt;
+ p2->Broadcast( SBX_HINT_DATAWANTED );
+ }
+ }
+
+ }
+#ifndef WIN
+ static SbxVariable* pTRUE = NULL;
+ static SbxVariable* pFALSE = NULL;
+
+ if( p2->Compare( eOp, *p1 ) )
+ {
+ if( !pTRUE )
+ {
+ pTRUE = new SbxVariable;
+ pTRUE->PutBool( TRUE );
+ pTRUE->AddRef();
+ }
+ PushVar( pTRUE );
+ }
+ else
+ {
+ if( !pFALSE )
+ {
+ pFALSE = new SbxVariable;
+ pFALSE->PutBool( FALSE );
+ pFALSE->AddRef();
+ }
+ PushVar( pFALSE );
+ }
+#else
+ BOOL bRes = p2->Compare( eOp, *p1 );
+ SbxVariable* pRes = new SbxVariable;
+ pRes->PutBool( bRes );
+ PushVar( pRes );
+#endif
+}
+
+void SbiRuntime::StepEXP() { StepArith( SbxEXP ); }
+void SbiRuntime::StepMUL() { StepArith( SbxMUL ); }
+void SbiRuntime::StepDIV() { StepArith( SbxDIV ); }
+void SbiRuntime::StepIDIV() { StepArith( SbxIDIV ); }
+void SbiRuntime::StepMOD() { StepArith( SbxMOD ); }
+void SbiRuntime::StepPLUS() { StepArith( SbxPLUS ); }
+void SbiRuntime::StepMINUS() { StepArith( SbxMINUS ); }
+void SbiRuntime::StepCAT() { StepArith( SbxCAT ); }
+void SbiRuntime::StepAND() { StepArith( SbxAND ); }
+void SbiRuntime::StepOR() { StepArith( SbxOR ); }
+void SbiRuntime::StepXOR() { StepArith( SbxXOR ); }
+void SbiRuntime::StepEQV() { StepArith( SbxEQV ); }
+void SbiRuntime::StepIMP() { StepArith( SbxIMP ); }
+
+void SbiRuntime::StepNEG() { StepUnary( SbxNEG ); }
+void SbiRuntime::StepNOT() { StepUnary( SbxNOT ); }
+
+void SbiRuntime::StepEQ() { StepCompare( SbxEQ ); }
+void SbiRuntime::StepNE() { StepCompare( SbxNE ); }
+void SbiRuntime::StepLT() { StepCompare( SbxLT ); }
+void SbiRuntime::StepGT() { StepCompare( SbxGT ); }
+void SbiRuntime::StepLE() { StepCompare( SbxLE ); }
+void SbiRuntime::StepGE() { StepCompare( SbxGE ); }
+
+namespace
+{
+ bool NeedEsc(sal_Unicode cCode)
+ {
+ String sEsc(RTL_CONSTASCII_USTRINGPARAM(".^$+\\|{}()"));
+ return (STRING_NOTFOUND != sEsc.Search(cCode));
+ }
+
+ String VBALikeToRegexp(const String &rIn)
+ {
+ String sResult;
+ const sal_Unicode *start = rIn.GetBuffer();
+ const sal_Unicode *end = start + rIn.Len();
+
+ int seenright = 0;
+
+ sResult.Append('^');
+
+ while (start < end)
+ {
+ switch (*start)
+ {
+ case '?':
+ sResult.Append('.');
+ start++;
+ break;
+ case '*':
+ sResult.Append(String(RTL_CONSTASCII_USTRINGPARAM(".*")));
+ start++;
+ break;
+ case '#':
+ sResult.Append(String(RTL_CONSTASCII_USTRINGPARAM("[0-9]")));
+ start++;
+ break;
+ case ']':
+ sResult.Append('\\');
+ sResult.Append(*start++);
+ break;
+ case '[':
+ sResult.Append(*start++);
+ seenright = 0;
+ while (start < end && !seenright)
+ {
+ switch (*start)
+ {
+ case '[':
+ case '?':
+ case '*':
+ sResult.Append('\\');
+ sResult.Append(*start);
+ break;
+ case ']':
+ sResult.Append(*start);
+ seenright = 1;
+ break;
+ case '!':
+ sResult.Append('^');
+ break;
+ default:
+ if (NeedEsc(*start))
+ sResult.Append('\\');
+ sResult.Append(*start);
+ break;
+ }
+ start++;
+ }
+ break;
+ default:
+ if (NeedEsc(*start))
+ sResult.Append('\\');
+ sResult.Append(*start++);
+ }
+ }
+
+ sResult.Append('$');
+
+ return sResult;
+ }
+}
+
+void SbiRuntime::StepLIKE()
+{
+ SbxVariableRef refVar1 = PopVar();
+ SbxVariableRef refVar2 = PopVar();
+
+ String pattern = VBALikeToRegexp(refVar1->GetString());
+ String value = refVar2->GetString();
+
+ com::sun::star::util::SearchOptions aSearchOpt;
+
+ aSearchOpt.algorithmType = com::sun::star::util::SearchAlgorithms_REGEXP;
+
+ aSearchOpt.Locale = Application::GetSettings().GetLocale();
+ aSearchOpt.searchString = pattern;
+
+ int bTextMode(1);
+ bool bCompatibility = ( pINST && pINST->IsCompatibility() );
+ if( bCompatibility )
+ bTextMode = GetImageFlag( SBIMG_COMPARETEXT );
+
+ if( bTextMode )
+ aSearchOpt.transliterateFlags |= com::sun::star::i18n::TransliterationModules_IGNORE_CASE;
+
+ SbxVariable* pRes = new SbxVariable;
+ utl::TextSearch aSearch(aSearchOpt);
+ xub_StrLen nStart=0, nEnd=value.Len();
+ int bRes = aSearch.SearchFrwrd(value, &nStart, &nEnd);
+ pRes->PutBool( bRes != 0 );
+
+ PushVar( pRes );
+}
+
+// TOS und TOS-1 sind beides Objektvariable und enthalten den selben Pointer
+
+void SbiRuntime::StepIS()
+{
+ SbxVariableRef refVar1 = PopVar();
+ SbxVariableRef refVar2 = PopVar();
+
+ SbxDataType eType1 = refVar1->GetType();
+ SbxDataType eType2 = refVar2->GetType();
+ if ( eType1 == SbxEMPTY )
+ {
+ refVar1->Broadcast( SBX_HINT_DATAWANTED );
+ eType1 = refVar1->GetType();
+ }
+ if ( eType2 == SbxEMPTY )
+ {
+ refVar2->Broadcast( SBX_HINT_DATAWANTED );
+ eType2 = refVar2->GetType();
+ }
+
+ BOOL bRes = BOOL( eType1 == SbxOBJECT && eType2 == SbxOBJECT );
+ if ( bVBAEnabled && !bRes )
+ Error( SbERR_INVALID_USAGE_OBJECT );
+ bRes = ( bRes && refVar1->GetObject() == refVar2->GetObject() );
+ SbxVariable* pRes = new SbxVariable;
+ pRes->PutBool( bRes );
+ PushVar( pRes );
+}
+
+// Aktualisieren des Wertes von TOS
+
+void SbiRuntime::StepGET()
+{
+ SbxVariable* p = GetTOS();
+ p->Broadcast( SBX_HINT_DATAWANTED );
+}
+
+// #67607 Uno-Structs kopieren
+inline void checkUnoStructCopy( SbxVariableRef& refVal, SbxVariableRef& refVar )
+{
+ SbxDataType eVarType = refVar->GetType();
+ if( eVarType != SbxOBJECT )
+ return;
+
+ SbxObjectRef xValObj = (SbxObject*)refVal->GetObject();
+ if( !xValObj.Is() || xValObj->ISA(SbUnoAnyObject) )
+ return;
+
+ // #115826: Exclude ProcedureProperties to avoid call to Property Get procedure
+ if( refVar->ISA(SbProcedureProperty) )
+ return;
+
+ SbxObjectRef xVarObj = (SbxObject*)refVar->GetObject();
+ SbxDataType eValType = refVal->GetType();
+ if( eValType == SbxOBJECT && xVarObj == xValObj )
+ {
+ SbUnoObject* pUnoObj = PTR_CAST(SbUnoObject,(SbxObject*)xVarObj);
+ if( pUnoObj )
+ {
+ Any aAny = pUnoObj->getUnoAny();
+ if( aAny.getValueType().getTypeClass() == TypeClass_STRUCT )
+ {
+ SbUnoObject* pNewUnoObj = new SbUnoObject( pUnoObj->GetName(), aAny );
+ // #70324: ClassName uebernehmen
+ pNewUnoObj->SetClassName( pUnoObj->GetClassName() );
+ refVar->PutObject( pNewUnoObj );
+ }
+ }
+ }
+}
+
+
+// Ablage von TOS in TOS-1
+
+void SbiRuntime::StepPUT()
+{
+ SbxVariableRef refVal = PopVar();
+ SbxVariableRef refVar = PopVar();
+ // Store auf die eigene Methode (innerhalb einer Function)?
+ BOOL bFlagsChanged = FALSE;
+ USHORT n = 0;
+ if( (SbxVariable*) refVar == (SbxVariable*) pMeth )
+ {
+ bFlagsChanged = TRUE;
+ n = refVar->GetFlags();
+ refVar->SetFlag( SBX_WRITE );
+ }
+
+ // if left side arg is an object or variant and right handside isn't
+ // either an object or a variant then try and see if a default
+ // property exists.
+ // to use e.g. Range{"A1") = 34
+ // could equate to Range("A1").Value = 34
+ if ( bVBAEnabled )
+ {
+ if ( refVar->GetType() == SbxOBJECT )
+ {
+ SbxVariable* pDflt = getDefaultProp( refVar );
+ if ( pDflt )
+ refVar = pDflt;
+ }
+ if ( refVal->GetType() == SbxOBJECT )
+ {
+ SbxVariable* pDflt = getDefaultProp( refVal );
+ if ( pDflt )
+ refVal = pDflt;
+ }
+ }
+
+ *refVar = *refVal;
+ // lhs is a property who's value is currently null
+ if ( !bVBAEnabled || ( bVBAEnabled && refVar->GetType() != SbxEMPTY ) )
+ // #67607 Uno-Structs kopieren
+ checkUnoStructCopy( refVal, refVar );
+ if( bFlagsChanged )
+ refVar->SetFlags( n );
+}
+
+
+// Speichern Objektvariable
+// Nicht-Objekt-Variable fuehren zu Fehlern
+
+void SbiRuntime::StepSET_Impl( SbxVariableRef& refVal, SbxVariableRef& refVar, bool bHandleDefaultProp )
+{
+ // #67733 Typen mit Array-Flag sind auch ok
+
+ // Check var, !object is no error for sure if, only if type is fixed
+ SbxDataType eVarType = refVar->GetType();
+ if( !bHandleDefaultProp && eVarType != SbxOBJECT && !(eVarType & SbxARRAY) && refVar->IsFixed() )
+ {
+ Error( SbERR_INVALID_USAGE_OBJECT );
+ return;
+ }
+
+ // Check value, !object is no error for sure if, only if type is fixed
+ SbxDataType eValType = refVal->GetType();
+// bool bGetValObject = false;
+ if( !bHandleDefaultProp && eValType != SbxOBJECT && !(eValType & SbxARRAY) && refVal->IsFixed() )
+ {
+ Error( SbERR_INVALID_USAGE_OBJECT );
+ return;
+ }
+
+ // Getting in here causes problems with objects with default properties
+ // if they are SbxEMPTY I guess
+ if ( !bHandleDefaultProp || ( bHandleDefaultProp && eValType == SbxOBJECT ) )
+ {
+ // Auf refVal GetObject fuer Collections ausloesen
+ SbxBase* pObjVarObj = refVal->GetObject();
+ if( pObjVarObj )
+ {
+ SbxVariableRef refObjVal = PTR_CAST(SbxObject,pObjVarObj);
+
+ // #67733 Typen mit Array-Flag sind auch ok
+ if( refObjVal )
+ refVal = refObjVal;
+ else if( !(eValType & SbxARRAY) )
+ refVal = NULL;
+ }
+ }
+
+ // #52896 Wenn Uno-Sequences bzw. allgemein Arrays einer als
+ // Object deklarierten Variable zugewiesen werden, kann hier
+ // refVal ungueltig sein!
+ if( !refVal )
+ {
+ Error( SbERR_INVALID_USAGE_OBJECT );
+ }
+ else
+ {
+ // Store auf die eigene Methode (innerhalb einer Function)?
+ BOOL bFlagsChanged = FALSE;
+ USHORT n = 0;
+ if( (SbxVariable*) refVar == (SbxVariable*) pMeth )
+ {
+ bFlagsChanged = TRUE;
+ n = refVar->GetFlags();
+ refVar->SetFlag( SBX_WRITE );
+ }
+ SbProcedureProperty* pProcProperty = PTR_CAST(SbProcedureProperty,(SbxVariable*)refVar);
+ if( pProcProperty )
+ pProcProperty->setSet( true );
+
+ if ( bHandleDefaultProp )
+ {
+ // get default properties for lhs & rhs where necessary
+ // SbxVariable* defaultProp = NULL; unused variable
+ bool bLHSHasDefaultProp = false;
+ // LHS try determine if a default prop exists
+ if ( refVar->GetType() == SbxOBJECT )
+ {
+ SbxVariable* pDflt = getDefaultProp( refVar );
+ if ( pDflt )
+ {
+ refVar = pDflt;
+ bLHSHasDefaultProp = true;
+ }
+ }
+ // RHS only get a default prop is the rhs has one
+ if ( refVal->GetType() == SbxOBJECT )
+ {
+ // check if lhs is a null object
+ // if it is then use the object not the default property
+ SbxObject* pObj = NULL;
+
+
+ pObj = PTR_CAST(SbxObject,(SbxVariable*)refVar);
+
+ // calling GetObject on a SbxEMPTY variable raises
+ // object not set errors, make sure its an Object
+ if ( !pObj && refVar->GetType() == SbxOBJECT )
+ {
+ SbxBase* pObjVarObj = refVar->GetObject();
+ pObj = PTR_CAST(SbxObject,pObjVarObj);
+ }
+ SbxVariable* pDflt = NULL;
+ if ( pObj || bLHSHasDefaultProp )
+ // lhs is either a valid object || or has a defaultProp
+ pDflt = getDefaultProp( refVal );
+ if ( pDflt )
+ refVal = pDflt;
+ }
+ }
+
+ // Handle withevents
+ BOOL bWithEvents = refVar->IsSet( SBX_WITH_EVENTS );
+ if ( bWithEvents )
+ {
+ Reference< XInterface > xComListener;
+
+ SbxBase* pObj = refVal->GetObject();
+ SbUnoObject* pUnoObj = (pObj != NULL) ? PTR_CAST(SbUnoObject,pObj) : NULL;
+ if( pUnoObj != NULL )
+ {
+ Any aControlAny = pUnoObj->getUnoAny();
+ String aDeclareClassName = refVar->GetDeclareClassName();
+ ::rtl::OUString aVBAType = aDeclareClassName;
+ ::rtl::OUString aPrefix = refVar->GetName();
+ SbxObjectRef xScopeObj = refVar->GetParent();
+ xComListener = createComListener( aControlAny, aVBAType, aPrefix, xScopeObj );
+
+ refVal->SetDeclareClassName( aDeclareClassName );
+ refVal->SetComListener( xComListener ); // Hold reference
+ }
+
+ *refVar = *refVal;
+ }
+ else
+ {
+ *refVar = *refVal;
+ }
+
+ // lhs is a property who's value is currently (Empty e.g. no broadcast yet)
+ // in this case if there is a default prop involved the value of the
+ // default property may infact be void so the type will also be SbxEMPTY
+ // in this case we do not want to call checkUnoStructCopy 'cause that will
+ // cause an error also
+ if ( !bHandleDefaultProp || ( bHandleDefaultProp && ( refVar->GetType() != SbxEMPTY ) ) )
+ // #67607 Uno-Structs kopieren
+ checkUnoStructCopy( refVal, refVar );
+ if( bFlagsChanged )
+ refVar->SetFlags( n );
+ }
+}
+
+void SbiRuntime::StepSET()
+{
+ SbxVariableRef refVal = PopVar();
+ SbxVariableRef refVar = PopVar();
+ StepSET_Impl( refVal, refVar, bVBAEnabled ); // this is really assigment
+}
+
+void SbiRuntime::StepVBASET()
+{
+ SbxVariableRef refVal = PopVar();
+ SbxVariableRef refVar = PopVar();
+ // don't handle default property
+ StepSET_Impl( refVal, refVar, false ); // set obj = something
+}
+
+
+// JSM 07.10.95
+void SbiRuntime::StepLSET()
+{
+ SbxVariableRef refVal = PopVar();
+ SbxVariableRef refVar = PopVar();
+ if( refVar->GetType() != SbxSTRING
+ || refVal->GetType() != SbxSTRING )
+ Error( SbERR_INVALID_USAGE_OBJECT );
+ else
+ {
+ // Store auf die eigene Methode (innerhalb einer Function)?
+ USHORT n = refVar->GetFlags();
+ if( (SbxVariable*) refVar == (SbxVariable*) pMeth )
+ refVar->SetFlag( SBX_WRITE );
+ String aRefVarString = refVar->GetString();
+ String aRefValString = refVal->GetString();
+
+ USHORT nVarStrLen = aRefVarString.Len();
+ USHORT nValStrLen = aRefValString.Len();
+ String aNewStr;
+ if( nVarStrLen > nValStrLen )
+ {
+ aRefVarString.Fill(nVarStrLen,' ');
+ aNewStr = aRefValString.Copy( 0, nValStrLen );
+ aNewStr += aRefVarString.Copy( nValStrLen, nVarStrLen - nValStrLen );
+ }
+ else
+ {
+ aNewStr = aRefValString.Copy( 0, nVarStrLen );
+ }
+
+ refVar->PutString( aNewStr );
+ refVar->SetFlags( n );
+ }
+}
+
+// JSM 07.10.95
+void SbiRuntime::StepRSET()
+{
+ SbxVariableRef refVal = PopVar();
+ SbxVariableRef refVar = PopVar();
+ if( refVar->GetType() != SbxSTRING
+ || refVal->GetType() != SbxSTRING )
+ Error( SbERR_INVALID_USAGE_OBJECT );
+ else
+ {
+ // Store auf die eigene Methode (innerhalb einer Function)?
+ USHORT n = refVar->GetFlags();
+ if( (SbxVariable*) refVar == (SbxVariable*) pMeth )
+ refVar->SetFlag( SBX_WRITE );
+ String aRefVarString = refVar->GetString();
+ String aRefValString = refVal->GetString();
+
+ USHORT nPos = 0;
+ USHORT nVarStrLen = aRefVarString.Len();
+ if( nVarStrLen > aRefValString.Len() )
+ {
+ aRefVarString.Fill(nVarStrLen,' ');
+ nPos = nVarStrLen - aRefValString.Len();
+ }
+ aRefVarString = aRefVarString.Copy( 0, nPos );
+ aRefVarString += aRefValString.Copy( 0, nVarStrLen - nPos );
+ refVar->PutString(aRefVarString);
+
+ refVar->SetFlags( n );
+ }
+}
+
+// Ablage von TOS in TOS-1, dann ReadOnly-Bit setzen
+
+void SbiRuntime::StepPUTC()
+{
+ SbxVariableRef refVal = PopVar();
+ SbxVariableRef refVar = PopVar();
+ refVar->SetFlag( SBX_WRITE );
+ *refVar = *refVal;
+ refVar->ResetFlag( SBX_WRITE );
+ refVar->SetFlag( SBX_CONST );
+}
+
+// DIM
+// TOS = Variable fuer das Array mit Dimensionsangaben als Parameter
+
+void SbiRuntime::StepDIM()
+{
+ SbxVariableRef refVar = PopVar();
+ DimImpl( refVar );
+}
+
+// #56204 DIM-Funktionalitaet in Hilfsmethode auslagern (step0.cxx)
+void SbiRuntime::DimImpl( SbxVariableRef refVar )
+{
+ SbxArray* pDims = refVar->GetParameters();
+ // Muss eine gerade Anzahl Argumente haben
+ // Man denke daran, dass Arg[0] nicht zaehlt!
+ if( pDims && !( pDims->Count() & 1 ) )
+ StarBASIC::FatalError( SbERR_INTERNAL_ERROR );
+ else
+ {
+ SbxDataType eType = refVar->IsFixed() ? refVar->GetType() : SbxVARIANT;
+ SbxDimArray* pArray = new SbxDimArray( eType );
+ // AB 2.4.1996, auch Arrays ohne Dimensionsangaben zulassen (VB-komp.)
+ if( pDims )
+ {
+ for( USHORT i = 1; i < pDims->Count(); )
+ {
+ INT32 lb = pDims->Get( i++ )->GetLong();
+ INT32 ub = pDims->Get( i++ )->GetLong();
+ if( ub < lb )
+ Error( SbERR_OUT_OF_RANGE ), ub = lb;
+ pArray->AddDim32( lb, ub );
+ if ( lb != ub )
+ pArray->setHasFixedSize( true );
+ }
+ }
+ else
+ {
+ // #62867 Beim Anlegen eines Arrays der Laenge 0 wie bei
+ // Uno-Sequences der Laenge 0 eine Dimension anlegen
+ pArray->unoAddDim( 0, -1 );
+ }
+ USHORT nSavFlags = refVar->GetFlags();
+ refVar->ResetFlag( SBX_FIXED );
+ refVar->PutObject( pArray );
+ refVar->SetFlags( nSavFlags );
+ refVar->SetParameters( NULL );
+ }
+}
+
+// REDIM
+// TOS = Variable fuer das Array
+// argv = Dimensionsangaben
+
+void SbiRuntime::StepREDIM()
+{
+ // Im Moment ist es nichts anderes als Dim, da doppeltes Dim
+ // bereits vom Compiler erkannt wird.
+ StepDIM();
+}
+
+
+// Helper function for StepREDIMP
+void implCopyDimArray( SbxDimArray* pNewArray, SbxDimArray* pOldArray, short nMaxDimIndex,
+ short nActualDim, sal_Int32* pActualIndices, sal_Int32* pLowerBounds, sal_Int32* pUpperBounds )
+{
+ sal_Int32& ri = pActualIndices[nActualDim];
+ for( ri = pLowerBounds[nActualDim] ; ri <= pUpperBounds[nActualDim] ; ri++ )
+ {
+ if( nActualDim < nMaxDimIndex )
+ {
+ implCopyDimArray( pNewArray, pOldArray, nMaxDimIndex, nActualDim + 1,
+ pActualIndices, pLowerBounds, pUpperBounds );
+ }
+ else
+ {
+ SbxVariable* pSource = pOldArray->Get32( pActualIndices );
+ SbxVariable* pDest = pNewArray->Get32( pActualIndices );
+ if( pSource && pDest )
+ *pDest = *pSource;
+ }
+ }
+}
+
+// REDIM PRESERVE
+// TOS = Variable fuer das Array
+// argv = Dimensionsangaben
+
+void SbiRuntime::StepREDIMP()
+{
+ SbxVariableRef refVar = PopVar();
+ DimImpl( refVar );
+
+ // Now check, if we can copy from the old array
+ if( refRedimpArray.Is() )
+ {
+ SbxBase* pElemObj = refVar->GetObject();
+ SbxDimArray* pNewArray = PTR_CAST(SbxDimArray,pElemObj);
+ SbxDimArray* pOldArray = (SbxDimArray*)(SbxArray*)refRedimpArray;
+ if( pNewArray )
+ {
+ short nDimsNew = pNewArray->GetDims();
+ short nDimsOld = pOldArray->GetDims();
+ short nDims = nDimsNew;
+ BOOL bRangeError = FALSE;
+
+ // Store dims to use them for copying later
+ sal_Int32* pLowerBounds = new sal_Int32[nDims];
+ sal_Int32* pUpperBounds = new sal_Int32[nDims];
+ sal_Int32* pActualIndices = new sal_Int32[nDims];
+
+ if( nDimsOld != nDimsNew )
+ {
+ bRangeError = TRUE;
+ }
+ else
+ {
+ // Compare bounds
+ for( short i = 1 ; i <= nDims ; i++ )
+ {
+ sal_Int32 lBoundNew, uBoundNew;
+ sal_Int32 lBoundOld, uBoundOld;
+ pNewArray->GetDim32( i, lBoundNew, uBoundNew );
+ pOldArray->GetDim32( i, lBoundOld, uBoundOld );
+
+ /* #69094 Allow all dimensions to be changed
+ although Visual Basic is not able to do so.
+ // All bounds but the last have to be the same
+ if( i < nDims && ( lBoundNew != lBoundOld || uBoundNew != uBoundOld ) )
+ {
+ bRangeError = TRUE;
+ break;
+ }
+ else
+ */
+ {
+ // #69094: if( i == nDims )
+ {
+ lBoundNew = std::max( lBoundNew, lBoundOld );
+ uBoundNew = std::min( uBoundNew, uBoundOld );
+ }
+ short j = i - 1;
+ pActualIndices[j] = pLowerBounds[j] = lBoundNew;
+ pUpperBounds[j] = uBoundNew;
+ }
+ }
+ }
+
+ if( bRangeError )
+ {
+ StarBASIC::Error( SbERR_OUT_OF_RANGE );
+ }
+ else
+ {
+ // Copy data from old array by going recursively through all dimensions
+ // (It would be faster to work on the flat internal data array of an
+ // SbyArray but this solution is clearer and easier)
+ implCopyDimArray( pNewArray, pOldArray, nDims - 1,
+ 0, pActualIndices, pLowerBounds, pUpperBounds );
+ }
+
+ delete[] pUpperBounds;
+ delete[] pLowerBounds;
+ delete[] pActualIndices;
+ refRedimpArray = NULL;
+ }
+ }
+
+ //StarBASIC::FatalError( SbERR_NOT_IMPLEMENTED );
+}
+
+// REDIM_COPY
+// TOS = Array-Variable, Reference to array is copied
+// Variable is cleared as in ERASE
+
+void SbiRuntime::StepREDIMP_ERASE()
+{
+ SbxVariableRef refVar = PopVar();
+ SbxDataType eType = refVar->GetType();
+ if( eType & SbxARRAY )
+ {
+ SbxBase* pElemObj = refVar->GetObject();
+ SbxDimArray* pDimArray = PTR_CAST(SbxDimArray,pElemObj);
+ if( pDimArray )
+ {
+ refRedimpArray = pDimArray;
+ }
+
+ // As in ERASE
+ USHORT nSavFlags = refVar->GetFlags();
+ refVar->ResetFlag( SBX_FIXED );
+ refVar->SetType( SbxDataType(eType & 0x0FFF) );
+ refVar->SetFlags( nSavFlags );
+ refVar->Clear();
+ }
+ else
+ if( refVar->IsFixed() )
+ refVar->Clear();
+ else
+ refVar->SetType( SbxEMPTY );
+}
+
+void lcl_clearImpl( SbxVariableRef& refVar, SbxDataType& eType )
+{
+ USHORT nSavFlags = refVar->GetFlags();
+ refVar->ResetFlag( SBX_FIXED );
+ refVar->SetType( SbxDataType(eType & 0x0FFF) );
+ refVar->SetFlags( nSavFlags );
+ refVar->Clear();
+}
+
+void lcl_eraseImpl( SbxVariableRef& refVar, bool bVBAEnabled )
+{
+ SbxDataType eType = refVar->GetType();
+ if( eType & SbxARRAY )
+ {
+ if ( bVBAEnabled )
+ {
+ SbxBase* pElemObj = refVar->GetObject();
+ SbxDimArray* pDimArray = PTR_CAST(SbxDimArray,pElemObj);
+ bool bClearValues = true;
+ if( pDimArray )
+ {
+ if ( pDimArray->hasFixedSize() )
+ {
+ // Clear all Value(s)
+ pDimArray->SbxArray::Clear();
+ bClearValues = false;
+ }
+ else
+ pDimArray->Clear(); // clear Dims
+ }
+ if ( bClearValues )
+ {
+ SbxArray* pArray = PTR_CAST(SbxArray,pElemObj);
+ if ( pArray )
+ pArray->Clear();
+ }
+ }
+ else
+ // AB 2.4.1996
+ // Arrays haben bei Erase nach VB ein recht komplexes Verhalten. Hier
+ // werden zunaechst nur die Typ-Probleme bei REDIM (#26295) beseitigt:
+ // Typ hart auf den Array-Typ setzen, da eine Variable mit Array
+ // SbxOBJECT ist. Bei REDIM entsteht dann ein SbxOBJECT-Array und
+ // der ursruengliche Typ geht verloren -> Laufzeitfehler
+ lcl_clearImpl( refVar, eType );
+ }
+ else
+ if( refVar->IsFixed() )
+ refVar->Clear();
+ else
+ refVar->SetType( SbxEMPTY );
+}
+
+// Variable loeschen
+// TOS = Variable
+
+void SbiRuntime::StepERASE()
+{
+ SbxVariableRef refVar = PopVar();
+ lcl_eraseImpl( refVar, bVBAEnabled );
+}
+
+void SbiRuntime::StepERASE_CLEAR()
+{
+ SbxVariableRef refVar = PopVar();
+ lcl_eraseImpl( refVar, bVBAEnabled );
+ SbxDataType eType = refVar->GetType();
+ lcl_clearImpl( refVar, eType );
+}
+
+void SbiRuntime::StepARRAYACCESS()
+{
+ if( !refArgv )
+ StarBASIC::FatalError( SbERR_INTERNAL_ERROR );
+ SbxVariableRef refVar = PopVar();
+ refVar->SetParameters( refArgv );
+ PopArgv();
+ PushVar( CheckArray( refVar ) );
+}
+
+void SbiRuntime::StepBYVAL()
+{
+ // Copy variable on stack to break call by reference
+ SbxVariableRef pVar = PopVar();
+ SbxDataType t = pVar->GetType();
+
+ SbxVariable* pCopyVar = new SbxVariable( t );
+ pCopyVar->SetFlag( SBX_READWRITE );
+ *pCopyVar = *pVar;
+
+ PushVar( pCopyVar );
+}
+
+// Einrichten eines Argvs
+// nOp1 bleibt so -> 1. Element ist Returnwert
+
+void SbiRuntime::StepARGC()
+{
+ PushArgv();
+ refArgv = new SbxArray;
+ nArgc = 1;
+}
+
+// Speichern eines Arguments in Argv
+
+void SbiRuntime::StepARGV()
+{
+ if( !refArgv )
+ StarBASIC::FatalError( SbERR_INTERNAL_ERROR );
+ else
+ {
+ SbxVariableRef pVal = PopVar();
+
+ // Before fix of #94916:
+ // if( pVal->ISA(SbxMethod) || pVal->ISA(SbxProperty) )
+ if( pVal->ISA(SbxMethod) || pVal->ISA(SbUnoProperty) || pVal->ISA(SbProcedureProperty) )
+ {
+ // Methoden und Properties evaluieren!
+ SbxVariable* pRes = new SbxVariable( *pVal );
+ pVal = pRes;
+ }
+ refArgv->Put( pVal, nArgc++ );
+ }
+}
+
+// Input to Variable. Die Variable ist auf TOS und wird
+// anschliessend entfernt.
+
+void SbiRuntime::StepINPUT()
+{
+ String s;
+ char ch = 0;
+ SbError err;
+ // Skip whitespace
+ while( ( err = pIosys->GetError() ) == 0 )
+ {
+ ch = pIosys->Read();
+ if( ch != ' ' && ch != '\t' && ch != '\n' )
+ break;
+ }
+ if( !err )
+ {
+ // Scan until comma or whitespace
+ char sep = ( ch == '"' ) ? ch : 0;
+ if( sep ) ch = pIosys->Read();
+ while( ( err = pIosys->GetError() ) == 0 )
+ {
+ if( ch == sep )
+ {
+ ch = pIosys->Read();
+ if( ch != sep )
+ break;
+ }
+ else if( !sep && (ch == ',' || ch == '\n') )
+ break;
+ s += ch;
+ ch = pIosys->Read();
+ }
+ // skip whitespace
+ if( ch == ' ' || ch == '\t' )
+ while( ( err = pIosys->GetError() ) == 0 )
+ {
+ if( ch != ' ' && ch != '\t' && ch != '\n' )
+ break;
+ ch = pIosys->Read();
+ }
+ }
+ if( !err )
+ {
+ SbxVariableRef pVar = GetTOS();
+ // Zuerst versuchen, die Variable mit einem numerischen Wert
+ // zu fuellen, dann mit einem Stringwert
+ if( !pVar->IsFixed() || pVar->IsNumeric() )
+ {
+ USHORT nLen = 0;
+ if( !pVar->Scan( s, &nLen ) )
+ {
+ err = SbxBase::GetError();
+ SbxBase::ResetError();
+ }
+ // Der Wert muss komplett eingescant werden
+ else if( nLen != s.Len() && !pVar->PutString( s ) )
+ {
+ err = SbxBase::GetError();
+ SbxBase::ResetError();
+ }
+ else if( nLen != s.Len() && pVar->IsNumeric() )
+ {
+ err = SbxBase::GetError();
+ SbxBase::ResetError();
+ if( !err )
+ err = SbERR_CONVERSION;
+ }
+ }
+ else
+ {
+ pVar->PutString( s );
+ err = SbxBase::GetError();
+ SbxBase::ResetError();
+ }
+ }
+ if( err == SbERR_USER_ABORT )
+ Error( err );
+ else if( err )
+ {
+ if( pRestart && !pIosys->GetChannel() )
+ {
+ BasResId aId( IDS_SBERR_START + 4 );
+ String aMsg( aId );
+
+ //****** DONT CHECK IN, TEST ONLY *******
+ //****** DONT CHECK IN, TEST ONLY *******
+ // ErrorBox( NULL, WB_OK, aMsg ).Execute();
+ //****** DONT CHECK IN, TEST ONLY *******
+ //****** DONT CHECK IN, TEST ONLY *******
+
+ pCode = pRestart;
+ }
+ else
+ Error( err );
+ }
+ else
+ {
+ // pIosys->ResetChannel();
+ PopVar();
+ }
+}
+
+// Line Input to Variable. Die Variable ist auf TOS und wird
+// anschliessend entfernt.
+
+void SbiRuntime::StepLINPUT()
+{
+ ByteString aInput;
+ pIosys->Read( aInput );
+ Error( pIosys->GetError() );
+ SbxVariableRef p = PopVar();
+ p->PutString( String( aInput, gsl_getSystemTextEncoding() ) );
+ // pIosys->ResetChannel();
+}
+
+// Programmende
+
+void SbiRuntime::StepSTOP()
+{
+ pInst->Stop();
+}
+
+// FOR-Variable initialisieren
+
+void SbiRuntime::StepINITFOR()
+{
+ PushFor();
+}
+
+void SbiRuntime::StepINITFOREACH()
+{
+ PushForEach();
+}
+
+// FOR-Variable inkrementieren
+
+void SbiRuntime::StepNEXT()
+{
+ if( !pForStk )
+ {
+ StarBASIC::FatalError( SbERR_INTERNAL_ERROR );
+ return;
+ }
+ if( pForStk->eForType == FOR_TO )
+ pForStk->refVar->Compute( SbxPLUS, *pForStk->refInc );
+}
+
+// Anfang CASE: TOS in CASE-Stack
+
+void SbiRuntime::StepCASE()
+{
+ if( !refCaseStk.Is() )
+ refCaseStk = new SbxArray;
+ SbxVariableRef xVar = PopVar();
+ refCaseStk->Put( xVar, refCaseStk->Count() );
+}
+
+// Ende CASE: Variable freigeben
+
+void SbiRuntime::StepENDCASE()
+{
+ if( !refCaseStk || !refCaseStk->Count() )
+ StarBASIC::FatalError( SbERR_INTERNAL_ERROR );
+ else
+ refCaseStk->Remove( refCaseStk->Count() - 1 );
+}
+
+// Standard-Fehlerbehandlung
+
+void SbiRuntime::StepSTDERROR()
+{
+ pError = NULL; bError = TRUE;
+ pInst->aErrorMsg = String();
+ pInst->nErr = 0L;
+ pInst->nErl = 0;
+ nError = 0L;
+ SbxErrObject::getUnoErrObject()->Clear();
+}
+
+void SbiRuntime::StepNOERROR()
+{
+ pInst->aErrorMsg = String();
+ pInst->nErr = 0L;
+ pInst->nErl = 0;
+ nError = 0L;
+ SbxErrObject::getUnoErrObject()->Clear();
+ bError = FALSE;
+}
+
+// UP verlassen
+
+void SbiRuntime::StepLEAVE()
+{
+ bRun = FALSE;
+ // If VBA and we are leaving an ErrorHandler then clear the error ( it's been processed )
+ if ( bInError && pError )
+ SbxErrObject::getUnoErrObject()->Clear();
+}
+
+void SbiRuntime::StepCHANNEL() // TOS = Kanalnummer
+{
+ SbxVariableRef pChan = PopVar();
+ short nChan = pChan->GetInteger();
+ pIosys->SetChannel( nChan );
+ Error( pIosys->GetError() );
+}
+
+void SbiRuntime::StepCHANNEL0()
+{
+ pIosys->ResetChannel();
+}
+
+void SbiRuntime::StepPRINT() // print TOS
+{
+ SbxVariableRef p = PopVar();
+ String s1 = p->GetString();
+ String s;
+ if( p->GetType() >= SbxINTEGER && p->GetType() <= SbxDOUBLE )
+ s = ' '; // ein Blank davor
+ s += s1;
+ ByteString aByteStr( s, gsl_getSystemTextEncoding() );
+ pIosys->Write( aByteStr );
+ Error( pIosys->GetError() );
+}
+
+void SbiRuntime::StepPRINTF() // print TOS in field
+{
+ SbxVariableRef p = PopVar();
+ String s1 = p->GetString();
+ String s;
+ if( p->GetType() >= SbxINTEGER && p->GetType() <= SbxDOUBLE )
+ s = ' '; // ein Blank davor
+ s += s1;
+ s.Expand( 14, ' ' );
+ ByteString aByteStr( s, gsl_getSystemTextEncoding() );
+ pIosys->Write( aByteStr );
+ Error( pIosys->GetError() );
+}
+
+void SbiRuntime::StepWRITE() // write TOS
+{
+ SbxVariableRef p = PopVar();
+ // Muss der String gekapselt werden?
+ char ch = 0;
+ switch (p->GetType() )
+ {
+ case SbxSTRING: ch = '"'; break;
+ case SbxCURRENCY:
+ case SbxBOOL:
+ case SbxDATE: ch = '#'; break;
+ default: break;
+ }
+ String s;
+ if( ch )
+ s += ch;
+ s += p->GetString();
+ if( ch )
+ s += ch;
+ ByteString aByteStr( s, gsl_getSystemTextEncoding() );
+ pIosys->Write( aByteStr );
+ Error( pIosys->GetError() );
+}
+
+void SbiRuntime::StepRENAME() // Rename Tos+1 to Tos
+{
+ SbxVariableRef pTos1 = PopVar();
+ SbxVariableRef pTos = PopVar();
+ String aDest = pTos1->GetString();
+ String aSource = pTos->GetString();
+
+ // <-- UCB
+ if( hasUno() )
+ {
+ implStepRenameUCB( aSource, aDest );
+ }
+ else
+ // --> UCB
+ {
+#ifdef _OLD_FILE_IMPL
+ DirEntry aSourceDirEntry( aSource );
+ if( aSourceDirEntry.Exists() )
+ {
+ if( aSourceDirEntry.MoveTo( DirEntry(aDest) ) != FSYS_ERR_OK )
+ StarBASIC::Error( SbERR_PATH_NOT_FOUND );
+ }
+ else
+ StarBASIC::Error( SbERR_PATH_NOT_FOUND );
+#else
+ implStepRenameOSL( aSource, aDest );
+#endif
+ }
+}
+
+// TOS = Prompt
+
+void SbiRuntime::StepPROMPT()
+{
+ SbxVariableRef p = PopVar();
+ ByteString aStr( p->GetString(), gsl_getSystemTextEncoding() );
+ pIosys->SetPrompt( aStr );
+}
+
+// Set Restart point
+
+void SbiRuntime::StepRESTART()
+{
+ pRestart = pCode;
+}
+
+// Leerer Ausdruck auf Stack fuer fehlenden Parameter
+
+void SbiRuntime::StepEMPTY()
+{
+ // #57915 Die Semantik von StepEMPTY() ist die Repraesentation eines fehlenden
+ // Arguments. Dies wird in VB durch ein durch den Wert 448 (SbERR_NAMED_NOT_FOUND)
+ // vom Typ Error repraesentiert. StepEmpty jetzt muesste besser StepMISSING()
+ // heissen, aber der Name wird der Einfachkeit halber beibehalten.
+ SbxVariableRef xVar = new SbxVariable( SbxVARIANT );
+ xVar->PutErr( 448 );
+ PushVar( xVar );
+ // ALT: PushVar( new SbxVariable( SbxEMPTY ) );
+}
+
+// TOS = Fehlercode
+
+void SbiRuntime::StepERROR()
+{
+ SbxVariableRef refCode = PopVar();
+ USHORT n = refCode->GetUShort();
+ SbError error = StarBASIC::GetSfxFromVBError( n );
+ if ( bVBAEnabled )
+ pInst->Error( error );
+ else
+ Error( error );
+}
+
diff --git a/basic/source/runtime/step1.cxx b/basic/source/runtime/step1.cxx
new file mode 100644
index 000000000000..e23ef864218e
--- /dev/null
+++ b/basic/source/runtime/step1.cxx
@@ -0,0 +1,574 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+
+#include <stdlib.h>
+#include <rtl/math.hxx>
+#include <basic/sbuno.hxx>
+#include "runtime.hxx"
+#include "sbintern.hxx"
+#include "iosys.hxx"
+#include "image.hxx"
+#include "sbunoobj.hxx"
+#include "errobject.hxx"
+
+bool checkUnoObjectType( SbUnoObject* refVal,
+ const String& aClass );
+
+// Laden einer numerischen Konstanten (+ID)
+
+void SbiRuntime::StepLOADNC( UINT32 nOp1 )
+{
+ SbxVariable* p = new SbxVariable( SbxDOUBLE );
+
+ // #57844 Lokalisierte Funktion benutzen
+ String aStr = pImg->GetString( static_cast<short>( nOp1 ) );
+ // Auch , zulassen !!!
+ USHORT iComma = aStr.Search( ',' );
+ if( iComma != STRING_NOTFOUND )
+ {
+ String aStr1 = aStr.Copy( 0, iComma );
+ String aStr2 = aStr.Copy( iComma + 1 );
+ aStr = aStr1;
+ aStr += '.';
+ aStr += aStr2;
+ }
+ double n = ::rtl::math::stringToDouble( aStr, '.', ',', NULL, NULL );
+
+ p->PutDouble( n );
+ PushVar( p );
+}
+
+// Laden einer Stringkonstanten (+ID)
+
+void SbiRuntime::StepLOADSC( UINT32 nOp1 )
+{
+ SbxVariable* p = new SbxVariable;
+ p->PutString( pImg->GetString( static_cast<short>( nOp1 ) ) );
+ PushVar( p );
+}
+
+// Immediate Load (+Wert)
+
+void SbiRuntime::StepLOADI( UINT32 nOp1 )
+{
+ SbxVariable* p = new SbxVariable;
+ p->PutInteger( static_cast<INT16>( nOp1 ) );
+ PushVar( p );
+}
+
+// Speichern eines named Arguments in Argv (+Arg-Nr ab 1!)
+
+void SbiRuntime::StepARGN( UINT32 nOp1 )
+{
+ if( !refArgv )
+ StarBASIC::FatalError( SbERR_INTERNAL_ERROR );
+ else
+ {
+ String aAlias( pImg->GetString( static_cast<short>( nOp1 ) ) );
+ SbxVariableRef pVal = PopVar();
+ refArgv->Put( pVal, nArgc );
+ refArgv->PutAlias( aAlias, nArgc++ );
+ }
+}
+
+// Konvertierung des Typs eines Arguments in Argv fuer DECLARE-Fkt. (+Typ)
+
+void SbiRuntime::StepARGTYP( UINT32 nOp1 )
+{
+ if( !refArgv )
+ StarBASIC::FatalError( SbERR_INTERNAL_ERROR );
+ else
+ {
+ BOOL bByVal = (nOp1 & 0x8000) != 0; // Ist BYVAL verlangt?
+ SbxDataType t = (SbxDataType) (nOp1 & 0x7FFF);
+ SbxVariable* pVar = refArgv->Get( refArgv->Count() - 1 ); // letztes Arg
+
+ // BYVAL prfen
+ if( pVar->GetRefCount() > 2 ) // 2 ist normal fr BYVAL
+ {
+ // Parameter ist eine Referenz
+ if( bByVal )
+ {
+ // Call by Value ist verlangt -> Kopie anlegen
+ pVar = new SbxVariable( *pVar );
+ pVar->SetFlag( SBX_READWRITE );
+ refExprStk->Put( pVar, refArgv->Count() - 1 );
+ }
+ else
+ pVar->SetFlag( SBX_REFERENCE ); // Ref-Flag fr DllMgr
+ }
+ else
+ {
+ // Parameter ist KEINE Referenz
+ if( bByVal )
+ pVar->ResetFlag( SBX_REFERENCE ); // Keine Referenz -> OK
+ else
+ Error( SbERR_BAD_PARAMETERS ); // Referenz verlangt
+ }
+
+ if( pVar->GetType() != t )
+ {
+ // Variant, damit richtige Konvertierung
+ // Ausserdem Fehler, wenn SbxBYREF
+ pVar->Convert( SbxVARIANT );
+ pVar->Convert( t );
+ }
+ }
+}
+
+// String auf feste Laenge bringen (+Laenge)
+
+void SbiRuntime::StepPAD( UINT32 nOp1 )
+{
+ SbxVariable* p = GetTOS();
+ String& s = (String&)(const String&) *p;
+ if( s.Len() > nOp1 )
+ s.Erase( static_cast<xub_StrLen>( nOp1 ) );
+ else
+ s.Expand( static_cast<xub_StrLen>( nOp1 ), ' ' );
+}
+
+// Sprung (+Target)
+
+void SbiRuntime::StepJUMP( UINT32 nOp1 )
+{
+#ifdef DBG_UTIL
+ // #QUESTION shouln't this be
+ // if( (BYTE*)( nOp1+pImagGetCode() ) >= pImg->GetCodeSize() )
+ if( nOp1 >= pImg->GetCodeSize() )
+ StarBASIC::FatalError( SbERR_INTERNAL_ERROR );
+#endif
+ pCode = (const BYTE*) pImg->GetCode() + nOp1;
+}
+
+// TOS auswerten, bedingter Sprung (+Target)
+
+void SbiRuntime::StepJUMPT( UINT32 nOp1 )
+{
+ SbxVariableRef p = PopVar();
+ if( p->GetBool() )
+ StepJUMP( nOp1 );
+}
+
+// TOS auswerten, bedingter Sprung (+Target)
+
+void SbiRuntime::StepJUMPF( UINT32 nOp1 )
+{
+ SbxVariableRef p = PopVar();
+ if( !p->GetBool() )
+ StepJUMP( nOp1 );
+}
+
+// TOS auswerten, Sprung in JUMP-Tabelle (+MaxVal)
+// Sieht so aus:
+// ONJUMP 2
+// JUMP target1
+// JUMP target2
+// ...
+//Falls im Operanden 0x8000 gesetzt ist, Returnadresse pushen (ON..GOSUB)
+
+void SbiRuntime::StepONJUMP( UINT32 nOp1 )
+{
+ SbxVariableRef p = PopVar();
+ INT16 n = p->GetInteger();
+ if( nOp1 & 0x8000 )
+ {
+ nOp1 &= 0x7FFF;
+ //PushGosub( pCode + 3 * nOp1 );
+ PushGosub( pCode + 5 * nOp1 );
+ }
+ if( n < 1 || static_cast<UINT32>(n) > nOp1 )
+ n = static_cast<INT16>( nOp1 + 1 );
+ //nOp1 = (UINT32) ( (const char*) pCode - pImg->GetCode() ) + 3 * --n;
+ nOp1 = (UINT32) ( (const char*) pCode - pImg->GetCode() ) + 5 * --n;
+ StepJUMP( nOp1 );
+}
+
+// UP-Aufruf (+Target)
+
+void SbiRuntime::StepGOSUB( UINT32 nOp1 )
+{
+ PushGosub( pCode );
+ if( nOp1 >= pImg->GetCodeSize() )
+ StarBASIC::FatalError( SbERR_INTERNAL_ERROR );
+ pCode = (const BYTE*) pImg->GetCode() + nOp1;
+}
+
+// UP-Return (+0 oder Target)
+
+void SbiRuntime::StepRETURN( UINT32 nOp1 )
+{
+ PopGosub();
+ if( nOp1 )
+ StepJUMP( nOp1 );
+}
+
+// FOR-Variable testen (+Endlabel)
+
+void SbiRuntime::StepTESTFOR( UINT32 nOp1 )
+{
+ if( !pForStk )
+ {
+ StarBASIC::FatalError( SbERR_INTERNAL_ERROR );
+ return;
+ }
+
+ bool bEndLoop = false;
+ switch( pForStk->eForType )
+ {
+ case FOR_TO:
+ {
+ SbxOperator eOp = ( pForStk->refInc->GetDouble() < 0 ) ? SbxLT : SbxGT;
+ if( pForStk->refVar->Compare( eOp, *pForStk->refEnd ) )
+ bEndLoop = true;
+ break;
+ }
+ case FOR_EACH_ARRAY:
+ {
+ SbiForStack* p = pForStk;
+ if( p->pArrayCurIndices == NULL )
+ {
+ bEndLoop = true;
+ }
+ else
+ {
+ SbxDimArray* pArray = (SbxDimArray*)(SbxVariable*)p->refEnd;
+ short nDims = pArray->GetDims();
+
+ // Empty array?
+ if( nDims == 1 && p->pArrayLowerBounds[0] > p->pArrayUpperBounds[0] )
+ {
+ bEndLoop = true;
+ break;
+ }
+ SbxVariable* pVal = pArray->Get32( p->pArrayCurIndices );
+ *(p->refVar) = *pVal;
+
+ bool bFoundNext = false;
+ for( short i = 0 ; i < nDims ; i++ )
+ {
+ if( p->pArrayCurIndices[i] < p->pArrayUpperBounds[i] )
+ {
+ bFoundNext = true;
+ p->pArrayCurIndices[i]++;
+ for( short j = i - 1 ; j >= 0 ; j-- )
+ p->pArrayCurIndices[j] = p->pArrayLowerBounds[j];
+ break;
+ }
+ }
+ if( !bFoundNext )
+ {
+ delete[] p->pArrayCurIndices;
+ p->pArrayCurIndices = NULL;
+ }
+ }
+ break;
+ }
+ case FOR_EACH_COLLECTION:
+ {
+ BasicCollection* pCollection = (BasicCollection*)(SbxVariable*)pForStk->refEnd;
+ SbxArrayRef xItemArray = pCollection->xItemArray;
+ INT32 nCount = xItemArray->Count32();
+ if( pForStk->nCurCollectionIndex < nCount )
+ {
+ SbxVariable* pRes = xItemArray->Get32( pForStk->nCurCollectionIndex );
+ pForStk->nCurCollectionIndex++;
+ (*pForStk->refVar) = *pRes;
+ }
+ else
+ {
+ bEndLoop = true;
+ }
+ break;
+ }
+ case FOR_EACH_XENUMERATION:
+ {
+ SbiForStack* p = pForStk;
+ if( p->xEnumeration->hasMoreElements() )
+ {
+ Any aElem = p->xEnumeration->nextElement();
+ SbxVariableRef xVar = new SbxVariable( SbxVARIANT );
+ unoToSbxValue( (SbxVariable*)xVar, aElem );
+ (*pForStk->refVar) = *xVar;
+ }
+ else
+ {
+ bEndLoop = true;
+ }
+ break;
+ }
+ }
+ if( bEndLoop )
+ {
+ PopFor();
+ StepJUMP( nOp1 );
+ }
+}
+
+// Tos+1 <= Tos+2 <= Tos, 2xremove (+Target)
+
+void SbiRuntime::StepCASETO( UINT32 nOp1 )
+{
+ if( !refCaseStk || !refCaseStk->Count() )
+ StarBASIC::FatalError( SbERR_INTERNAL_ERROR );
+ else
+ {
+ SbxVariableRef xTo = PopVar();
+ SbxVariableRef xFrom = PopVar();
+ SbxVariableRef xCase = refCaseStk->Get( refCaseStk->Count() - 1 );
+ if( *xCase >= *xFrom && *xCase <= *xTo )
+ StepJUMP( nOp1 );
+ }
+}
+
+// Fehler-Handler
+
+void SbiRuntime::StepERRHDL( UINT32 nOp1 )
+{
+ const BYTE* p = pCode;
+ StepJUMP( nOp1 );
+ pError = pCode;
+ pCode = p;
+ pInst->aErrorMsg = String();
+ pInst->nErr = 0;
+ pInst->nErl = 0;
+ nError = 0;
+ SbxErrObject::getUnoErrObject()->Clear();
+}
+
+// Resume nach Fehlern (+0=statement, 1=next or Label)
+
+void SbiRuntime::StepRESUME( UINT32 nOp1 )
+{
+ // AB #32714 Resume ohne Error? -> Fehler
+ if( !bInError )
+ {
+ Error( SbERR_BAD_RESUME );
+ return;
+ }
+ if( nOp1 )
+ {
+ // Code-Zeiger auf naechstes Statement setzen
+ USHORT n1, n2;
+ pCode = pMod->FindNextStmnt( pErrCode, n1, n2, TRUE, pImg );
+ }
+ else
+ pCode = pErrStmnt;
+ if ( pError ) // current in error handler ( and got a Resume Next statment )
+ SbxErrObject::getUnoErrObject()->Clear();
+
+ if( nOp1 > 1 )
+ StepJUMP( nOp1 );
+ pInst->aErrorMsg = String();
+ pInst->nErr = 0;
+ pInst->nErl = 0;
+ nError = 0;
+ bInError = FALSE;
+
+ // Error-Stack loeschen
+ SbErrorStack*& rErrStack = GetSbData()->pErrStack;
+ delete rErrStack;
+ rErrStack = NULL;
+}
+
+// Kanal schliessen (+Kanal, 0=Alle)
+void SbiRuntime::StepCLOSE( UINT32 nOp1 )
+{
+ SbError err;
+ if( !nOp1 )
+ pIosys->Shutdown();
+ else
+ {
+ err = pIosys->GetError();
+ if( !err )
+ {
+ pIosys->Close();
+ }
+ }
+ err = pIosys->GetError();
+ Error( err );
+}
+
+// Zeichen ausgeben (+char)
+
+void SbiRuntime::StepPRCHAR( UINT32 nOp1 )
+{
+ ByteString s( (char) nOp1 );
+ pIosys->Write( s );
+ Error( pIosys->GetError() );
+}
+
+// Check, ob TOS eine bestimmte Objektklasse ist (+StringID)
+
+bool SbiRuntime::implIsClass( SbxObject* pObj, const String& aClass )
+{
+ bool bRet = true;
+
+ if( aClass.Len() != 0 )
+ {
+ bRet = pObj->IsClass( aClass );
+ if( !bRet )
+ bRet = aClass.EqualsIgnoreCaseAscii( String( RTL_CONSTASCII_USTRINGPARAM("object") ) );
+ if( !bRet )
+ {
+ String aObjClass = pObj->GetClassName();
+ SbModule* pClassMod = pCLASSFAC->FindClass( aObjClass );
+ SbClassData* pClassData;
+ if( pClassMod && (pClassData=pClassMod->pClassData) != NULL )
+ {
+ SbxVariable* pClassVar =
+ pClassData->mxIfaces->Find( aClass, SbxCLASS_DONTCARE );
+ bRet = (pClassVar != NULL);
+ }
+ }
+ }
+ return bRet;
+}
+
+bool SbiRuntime::checkClass_Impl( const SbxVariableRef& refVal,
+ const String& aClass, bool bRaiseErrors, bool bDefault )
+{
+ bool bOk = bDefault;
+
+ SbxDataType t = refVal->GetType();
+ if( t == SbxOBJECT )
+ {
+ SbxObject* pObj;
+ SbxVariable* pVal = (SbxVariable*)refVal;
+ if( pVal->IsA( TYPE(SbxObject) ) )
+ pObj = (SbxObject*) pVal;
+ else
+ {
+ pObj = (SbxObject*) refVal->GetObject();
+ if( pObj && !pObj->IsA( TYPE(SbxObject) ) )
+ pObj = NULL;
+ }
+ if( pObj )
+ {
+ if( !implIsClass( pObj, aClass ) )
+ {
+ if ( bVBAEnabled && pObj->IsA( TYPE(SbUnoObject) ) )
+ {
+ SbUnoObject* pUnoObj = PTR_CAST(SbUnoObject,pObj);
+ bOk = checkUnoObjectType( pUnoObj, aClass );
+ }
+ else
+ bOk = false;
+ if ( !bOk )
+ {
+ if( bRaiseErrors )
+ Error( SbERR_INVALID_USAGE_OBJECT );
+ }
+ }
+ else
+ {
+ bOk = true;
+
+ SbClassModuleObject* pClassModuleObject = PTR_CAST(SbClassModuleObject,pObj);
+ if( pClassModuleObject != NULL )
+ pClassModuleObject->triggerInitializeEvent();
+ }
+ }
+ }
+ else
+ {
+ if ( !bVBAEnabled )
+ {
+ if( bRaiseErrors )
+ Error( SbERR_NEEDS_OBJECT );
+ bOk = false;
+ }
+ }
+ return bOk;
+}
+
+void SbiRuntime::StepSETCLASS_impl( UINT32 nOp1, bool bHandleDflt )
+{
+ SbxVariableRef refVal = PopVar();
+ SbxVariableRef refVar = PopVar();
+ String aClass( pImg->GetString( static_cast<short>( nOp1 ) ) );
+
+ bool bOk = checkClass_Impl( refVal, aClass, true );
+ if( bOk )
+ StepSET_Impl( refVal, refVar, bHandleDflt ); // don't do handle dflt prop for a "proper" set
+}
+
+void SbiRuntime::StepVBASETCLASS( UINT32 nOp1 )
+{
+ StepSETCLASS_impl( nOp1, false );
+}
+
+void SbiRuntime::StepSETCLASS( UINT32 nOp1 )
+{
+ StepSETCLASS_impl( nOp1, true );
+}
+
+void SbiRuntime::StepTESTCLASS( UINT32 nOp1 )
+{
+ SbxVariableRef xObjVal = PopVar();
+ String aClass( pImg->GetString( static_cast<short>( nOp1 ) ) );
+ bool bDefault = !bVBAEnabled;
+ bool bOk = checkClass_Impl( xObjVal, aClass, false, bDefault );
+
+ SbxVariable* pRet = new SbxVariable;
+ pRet->PutBool( bOk );
+ PushVar( pRet );
+}
+
+// Library fuer anschliessenden Declare-Call definieren
+
+void SbiRuntime::StepLIB( UINT32 nOp1 )
+{
+ aLibName = pImg->GetString( static_cast<short>( nOp1 ) );
+}
+
+// TOS wird um BASE erhoeht, BASE davor gepusht (+BASE)
+// Dieser Opcode wird vor DIM/REDIM-Anweisungen gepusht,
+// wenn nur ein Index angegeben wurde.
+
+void SbiRuntime::StepBASED( UINT32 nOp1 )
+{
+ SbxVariable* p1 = new SbxVariable;
+ SbxVariableRef x2 = PopVar();
+
+ // #109275 Check compatiblity mode
+ bool bCompatible = ((nOp1 & 0x8000) != 0);
+ USHORT uBase = static_cast<USHORT>(nOp1 & 1); // Can only be 0 or 1
+ p1->PutInteger( uBase );
+ if( !bCompatible )
+ x2->Compute( SbxPLUS, *p1 );
+ PushVar( x2 ); // erst die Expr
+ PushVar( p1 ); // dann die Base
+}
+
+
+
+
+
diff --git a/basic/source/runtime/step2.cxx b/basic/source/runtime/step2.cxx
new file mode 100755
index 000000000000..587b0ae7a590
--- /dev/null
+++ b/basic/source/runtime/step2.cxx
@@ -0,0 +1,1261 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+
+#include "runtime.hxx"
+#ifndef GCC
+#endif
+#include "iosys.hxx"
+#include "image.hxx"
+#include "sbintern.hxx"
+#include "sbunoobj.hxx"
+#include "opcodes.hxx"
+
+#include <com/sun/star/container/XIndexAccess.hpp>
+#include <com/sun/star/script/XDefaultMethod.hpp>
+#include <com/sun/star/beans/XPropertySet.hpp>
+#include <com/sun/star/uno/Any.hxx>
+#include <comphelper/processfactory.hxx>
+
+using namespace com::sun::star::uno;
+using namespace com::sun::star::container;
+using namespace com::sun::star::lang;
+using namespace com::sun::star::beans;
+using namespace com::sun::star::script;
+
+using com::sun::star::uno::Reference;
+
+SbxVariable* getVBAConstant( const String& rName );
+
+// Suchen eines Elements
+// Die Bits im String-ID:
+// 0x8000 - Argv ist belegt
+
+SbxVariable* SbiRuntime::FindElement
+ ( SbxObject* pObj, UINT32 nOp1, UINT32 nOp2, SbError nNotFound, BOOL bLocal, BOOL bStatic )
+{
+ bool bIsVBAInterOp = SbiRuntime::isVBAEnabled();
+ if( bIsVBAInterOp )
+ {
+ StarBASIC* pMSOMacroRuntimeLib = GetSbData()->pMSOMacroRuntimLib;
+ if( pMSOMacroRuntimeLib != NULL )
+ pMSOMacroRuntimeLib->ResetFlag( SBX_EXTSEARCH );
+ }
+
+ SbxVariable* pElem = NULL;
+ if( !pObj )
+ {
+ Error( SbERR_NO_OBJECT );
+ pElem = new SbxVariable;
+ }
+ else
+ {
+ BOOL bFatalError = FALSE;
+ SbxDataType t = (SbxDataType) nOp2;
+ String aName( pImg->GetString( static_cast<short>( nOp1 & 0x7FFF ) ) );
+ // Hacky capture of Evaluate [] syntax
+ // this should be tackled I feel at the pcode level
+ if ( bIsVBAInterOp && aName.Search('[') == 0 )
+ {
+ // emulate pcode here
+ StepARGC();
+ // psuedo StepLOADSC
+ String sArg = aName.Copy( 1, aName.Len() - 2 );
+ SbxVariable* p = new SbxVariable;
+ p->PutString( sArg );
+ PushVar( p );
+ //
+ StepARGV();
+ nOp1 = nOp1 | 0x8000; // indicate params are present
+ aName = String::CreateFromAscii("Evaluate");
+ }
+ if( bLocal )
+ {
+ if ( bStatic )
+ {
+ if ( pMeth )
+ pElem = pMeth->GetStatics()->Find( aName, SbxCLASS_DONTCARE );
+ }
+
+ if ( !pElem )
+ pElem = refLocals->Find( aName, SbxCLASS_DONTCARE );
+ }
+ if( !pElem )
+ {
+ // Die RTL brauchen wir nicht mehr zu durchsuchen!
+ BOOL bSave = rBasic.bNoRtl;
+ rBasic.bNoRtl = TRUE;
+ pElem = pObj->Find( aName, SbxCLASS_DONTCARE );
+
+ // #110004, #112015: Make private really private
+ if( bLocal && pElem ) // Local as flag for global search
+ {
+ if( pElem->IsSet( SBX_PRIVATE ) )
+ {
+ SbiInstance* pInst_ = pINST;
+ if( pInst_ && pInst_->IsCompatibility() && pObj != pElem->GetParent() )
+ pElem = NULL; // Found but in wrong module!
+
+ // Interfaces: Use SBX_EXTFOUND
+ }
+ }
+ rBasic.bNoRtl = bSave;
+
+ // Ist es ein globaler Uno-Bezeichner?
+ if( bLocal && !pElem )
+ {
+ bool bSetName = true; // preserve normal behaviour
+
+ // i#i68894# if VBAInterOp favour searching vba globals
+ // over searching for uno classess
+ if ( bVBAEnabled )
+ {
+ // Try Find in VBA symbols space
+ pElem = rBasic.VBAFind( aName, SbxCLASS_DONTCARE );
+ if ( pElem )
+ bSetName = false; // don't overwrite uno name
+ else
+ pElem = getVBAConstant( aName );
+ }
+ // #72382 VORSICHT! Liefert jetzt wegen unbekannten
+ // Modulen IMMER ein Ergebnis!
+ SbUnoClass* pUnoClass = findUnoClass( aName );
+ if( pUnoClass )
+ {
+ pElem = new SbxVariable( t );
+ SbxValues aRes( SbxOBJECT );
+ aRes.pObj = pUnoClass;
+ pElem->SbxVariable::Put( aRes );
+ }
+
+ // #62939 Wenn eine Uno-Klasse gefunden wurde, muss
+ // das Wrapper-Objekt gehalten werden, da sonst auch
+ // die Uno-Klasse, z.B. "stardiv" immer wieder neu
+ // aus der Registry gelesen werden muss
+ if( pElem )
+ {
+ // #63774 Darf nicht mit gespeichert werden!!!
+ pElem->SetFlag( SBX_DONTSTORE );
+ pElem->SetFlag( SBX_NO_MODIFY);
+
+ // #72382 Lokal speichern, sonst werden alle implizit
+ // deklarierten Vars automatisch global !
+ if ( bSetName )
+ pElem->SetName( aName );
+ refLocals->Put( pElem, refLocals->Count() );
+ }
+ }
+
+ if( !pElem )
+ {
+ // Nicht da und nicht im Objekt?
+ // Hat das Ding Parameter, nicht einrichten!
+ if( nOp1 & 0x8000 )
+ bFatalError = TRUE;
+ // ALT: StarBASIC::FatalError( nNotFound );
+
+ // Sonst, falls keine Parameter sind, anderen Error Code verwenden
+ if( !bLocal || pImg->GetFlag( SBIMG_EXPLICIT ) )
+ {
+ // #39108 Bei explizit und als ELEM immer ein Fatal Error
+ bFatalError = TRUE;
+
+ // Falls keine Parameter sind, anderen Error Code verwenden
+ if( !( nOp1 & 0x8000 ) && nNotFound == SbERR_PROC_UNDEFINED )
+ nNotFound = SbERR_VAR_UNDEFINED;
+ }
+ if( bFatalError )
+ {
+ // #39108 Statt FatalError zu setzen, Dummy-Variable liefern
+ if( !xDummyVar.Is() )
+ xDummyVar = new SbxVariable( SbxVARIANT );
+ pElem = xDummyVar;
+
+ // Parameter von Hand loeschen
+ ClearArgvStack();
+
+ // Normalen Error setzen
+ Error( nNotFound, aName );
+ }
+ else
+ {
+ if ( bStatic )
+ pElem = StepSTATIC_Impl( aName, t );
+ if ( !pElem )
+ {
+ // Sonst Variable neu anlegen
+ pElem = new SbxVariable( t );
+ if( t != SbxVARIANT )
+ pElem->SetFlag( SBX_FIXED );
+ pElem->SetName( aName );
+ refLocals->Put( pElem, refLocals->Count() );
+ }
+ }
+ }
+ }
+ // #39108 Args koennen schon geloescht sein!
+ if( !bFatalError )
+ SetupArgs( pElem, nOp1 );
+ // Ein bestimmter Call-Type wurde gewuenscht, daher muessen
+ // wir hier den Typ setzen und das Ding anfassen, um den
+ // korrekten Returnwert zu erhalten!
+ if( pElem->IsA( TYPE(SbxMethod) ) )
+ {
+ // Soll der Typ konvertiert werden?
+ SbxDataType t2 = pElem->GetType();
+ BOOL bSet = FALSE;
+ if( !( pElem->GetFlags() & SBX_FIXED ) )
+ {
+ if( t != SbxVARIANT && t != t2 &&
+ t >= SbxINTEGER && t <= SbxSTRING )
+ pElem->SetType( t ), bSet = TRUE;
+ }
+ // pElem auf eine Ref zuweisen, um ggf. eine Temp-Var zu loeschen
+ SbxVariableRef refTemp = pElem;
+
+ // Moegliche Reste vom letzten Aufruf der SbxMethod beseitigen
+ // Vorher Schreiben freigeben, damit kein Error gesetzt wird.
+ USHORT nSavFlags = pElem->GetFlags();
+ pElem->SetFlag( SBX_READWRITE | SBX_NO_BROADCAST );
+ pElem->SbxValue::Clear();
+ pElem->SetFlags( nSavFlags );
+
+ // Erst nach dem Setzen anfassen, da z.B. LEFT()
+ // den Unterschied zwischen Left$() und Left() kennen muss
+
+ // AB 12.8.96: Da in PopVar() die Parameter von Methoden weggehauen
+ // werden, muessen wir hier explizit eine neue SbxMethod anlegen
+ SbxVariable* pNew = new SbxMethod( *((SbxMethod*)pElem) ); // das ist der Call!
+ //ALT: SbxVariable* pNew = new SbxVariable( *pElem ); // das ist der Call!
+
+ pElem->SetParameters(0); // sonst bleibt Ref auf sich selbst
+ pNew->SetFlag( SBX_READWRITE );
+
+ // den Datentypen zuruecksetzen?
+ if( bSet )
+ pElem->SetType( t2 );
+ pElem = pNew;
+ }
+ // Index-Access bei UnoObjekten beruecksichtigen
+ // definitely we want this for VBA where properties are often
+ // collections ( which need index access ), but lets only do
+ // this if we actually have params following
+ else if( bVBAEnabled && pElem->ISA(SbUnoProperty) && pElem->GetParameters() )
+ {
+ // pElem auf eine Ref zuweisen, um ggf. eine Temp-Var zu loeschen
+ SbxVariableRef refTemp = pElem;
+
+ // Variable kopieren und dabei den Notify aufloesen
+ SbxVariable* pNew = new SbxVariable( *((SbxVariable*)pElem) ); // das ist der Call!
+ pElem->SetParameters( NULL ); // sonst bleibt Ref auf sich selbst
+ pElem = pNew;
+ }
+ }
+ return CheckArray( pElem );
+}
+
+// Find-Funktion ueber Name fuer aktuellen Scope (z.B. Abfrage aus BASIC-IDE)
+SbxBase* SbiRuntime::FindElementExtern( const String& rName )
+{
+ // Hinweis zu #35281#: Es darf nicht davon ausgegangen werden, dass
+ // pMeth != null, da im RunInit noch keine gesetzt ist.
+
+ SbxVariable* pElem = NULL;
+ if( !pMod || !rName.Len() )
+ return NULL;
+
+ // Lokal suchen
+ if( refLocals )
+ pElem = refLocals->Find( rName, SbxCLASS_DONTCARE );
+
+ // In Statics suchen
+ if ( !pElem && pMeth )
+ {
+ // Bei Statics, Name der Methode davor setzen
+ String aMethName = pMeth->GetName();
+ aMethName += ':';
+ aMethName += rName;
+ pElem = pMod->Find(aMethName, SbxCLASS_DONTCARE);
+ }
+
+ // In Parameter-Liste suchen
+ if( !pElem && pMeth )
+ {
+ SbxInfo* pInfo = pMeth->GetInfo();
+ if( pInfo && refParams )
+ {
+ USHORT nParamCount = refParams->Count();
+ USHORT j = 1;
+ const SbxParamInfo* pParam = pInfo->GetParam( j );
+ while( pParam )
+ {
+ if( pParam->aName.EqualsIgnoreCaseAscii( rName ) )
+ {
+ if( j >= nParamCount )
+ {
+ // Parameter is missing
+ pElem = new SbxVariable( SbxSTRING );
+ pElem->PutString( String( RTL_CONSTASCII_USTRINGPARAM("<missing parameter>" ) ) );
+ }
+ else
+ {
+ pElem = refParams->Get( j );
+ }
+ break;
+ }
+ pParam = pInfo->GetParam( ++j );
+ }
+ }
+ }
+
+ // Im Modul suchen
+ if( !pElem )
+ {
+ // RTL nicht durchsuchen!
+ BOOL bSave = rBasic.bNoRtl;
+ rBasic.bNoRtl = TRUE;
+ pElem = pMod->Find( rName, SbxCLASS_DONTCARE );
+ rBasic.bNoRtl = bSave;
+ }
+ return pElem;
+}
+
+
+// Argumente eines Elements setzen
+// Dabei auch die Argumente umsetzen, falls benannte Parameter
+// verwendet wurden
+
+void SbiRuntime::SetupArgs( SbxVariable* p, UINT32 nOp1 )
+{
+ if( nOp1 & 0x8000 )
+ {
+ if( !refArgv )
+ StarBASIC::FatalError( SbERR_INTERNAL_ERROR );
+ BOOL bHasNamed = FALSE;
+ USHORT i;
+ USHORT nArgCount = refArgv->Count();
+ for( i = 1 ; i < nArgCount ; i++ )
+ {
+ if( refArgv->GetAlias( i ).Len() )
+ {
+ bHasNamed = TRUE; break;
+ }
+ }
+ if( bHasNamed )
+ {
+ // Wir haben mindestens einen benannten Parameter!
+ // Wir muessen also umsortieren
+ // Gibt es Parameter-Infos?
+ SbxInfo* pInfo = p->GetInfo();
+ if( !pInfo )
+ {
+ bool bError_ = true;
+
+ SbUnoMethod* pUnoMethod = PTR_CAST(SbUnoMethod,p);
+ SbUnoProperty* pUnoProperty = PTR_CAST(SbUnoProperty,p);
+ if( pUnoMethod || pUnoProperty )
+ {
+ SbUnoObject* pParentUnoObj = PTR_CAST( SbUnoObject,p->GetParent() );
+ if( pParentUnoObj )
+ {
+ Any aUnoAny = pParentUnoObj->getUnoAny();
+ Reference< XInvocation > xInvocation;
+ aUnoAny >>= xInvocation;
+ if( xInvocation.is() ) // TODO: if( xOLEAutomation.is() )
+ {
+ bError_ = false;
+
+ USHORT nCurPar = 1;
+ AutomationNamedArgsSbxArray* pArg =
+ new AutomationNamedArgsSbxArray( nArgCount );
+ ::rtl::OUString* pNames = pArg->getNames().getArray();
+ for( i = 1 ; i < nArgCount ; i++ )
+ {
+ SbxVariable* pVar = refArgv->Get( i );
+ const String& rName = refArgv->GetAlias( i );
+ if( rName.Len() )
+ pNames[i] = rName;
+ pArg->Put( pVar, nCurPar++ );
+ }
+ refArgv = pArg;
+ }
+ }
+ }
+ if( bError_ )
+ Error( SbERR_NO_NAMED_ARGS );
+ }
+ else
+ {
+ USHORT nCurPar = 1;
+ SbxArray* pArg = new SbxArray;
+ for( i = 1 ; i < nArgCount ; i++ )
+ {
+ SbxVariable* pVar = refArgv->Get( i );
+ const String& rName = refArgv->GetAlias( i );
+ if( rName.Len() )
+ {
+ // nCurPar wird auf den gefundenen Parameter gesetzt
+ USHORT j = 1;
+ const SbxParamInfo* pParam = pInfo->GetParam( j );
+ while( pParam )
+ {
+ if( pParam->aName.EqualsIgnoreCaseAscii( rName ) )
+ {
+ nCurPar = j;
+ break;
+ }
+ pParam = pInfo->GetParam( ++j );
+ }
+ if( !pParam )
+ {
+ Error( SbERR_NAMED_NOT_FOUND ); break;
+ }
+ }
+ pArg->Put( pVar, nCurPar++ );
+ }
+ refArgv = pArg;
+ }
+ }
+ // Eigene Var als Parameter 0
+ refArgv->Put( p, 0 );
+ p->SetParameters( refArgv );
+ PopArgv();
+ }
+ else
+ p->SetParameters( NULL );
+}
+
+// Holen eines Array-Elements
+
+SbxVariable* SbiRuntime::CheckArray( SbxVariable* pElem )
+{
+ // Falls wir ein Array haben, wollen wir bitte das Array-Element!
+ SbxArray* pPar;
+ if( pElem->GetType() & SbxARRAY )
+ {
+ SbxBase* pElemObj = pElem->GetObject();
+ SbxDimArray* pDimArray = PTR_CAST(SbxDimArray,pElemObj);
+ pPar = pElem->GetParameters();
+ if( pDimArray )
+ {
+ // Die Parameter koennen fehlen, wenn ein Array als
+ // Argument uebergeben wird.
+ if( pPar )
+ pElem = pDimArray->Get( pPar );
+ }
+ else
+ {
+ SbxArray* pArray = PTR_CAST(SbxArray,pElemObj);
+ if( pArray )
+ {
+ if( !pPar )
+ {
+ Error( SbERR_OUT_OF_RANGE );
+ pElem = new SbxVariable;
+ }
+ else
+ pElem = pArray->Get( pPar->Get( 1 )->GetInteger() );
+ }
+ }
+
+ // #42940, 0.Parameter zu NULL setzen, damit sich Var nicht selbst haelt
+ if( pPar )
+ pPar->Put( NULL, 0 );
+ }
+ // Index-Access bei UnoObjekten beruecksichtigen
+ else if( pElem->GetType() == SbxOBJECT && !pElem->ISA(SbxMethod) )
+ {
+ pPar = pElem->GetParameters();
+ if ( pPar )
+ {
+ // Ist es ein Uno-Objekt?
+ SbxBaseRef pObj = (SbxBase*)pElem->GetObject();
+ if( pObj )
+ {
+ if( pObj->ISA(SbUnoObject) )
+ {
+ SbUnoObject* pUnoObj = (SbUnoObject*)(SbxBase*)pObj;
+ Any aAny = pUnoObj->getUnoAny();
+
+ if( aAny.getValueType().getTypeClass() == TypeClass_INTERFACE )
+ {
+ Reference< XInterface > x = *(Reference< XInterface >*)aAny.getValue();
+ Reference< XIndexAccess > xIndexAccess( x, UNO_QUERY );
+ if ( !bVBAEnabled )
+ {
+ // Haben wir Index-Access?
+ if( xIndexAccess.is() )
+ {
+ UINT32 nParamCount = (UINT32)pPar->Count() - 1;
+ if( nParamCount != 1 )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return pElem;
+ }
+
+ // Index holen
+ INT32 nIndex = pPar->Get( 1 )->GetLong();
+ Reference< XInterface > xRet;
+ try
+ {
+ Any aAny2 = xIndexAccess->getByIndex( nIndex );
+ TypeClass eType = aAny2.getValueType().getTypeClass();
+ if( eType == TypeClass_INTERFACE )
+ xRet = *(Reference< XInterface >*)aAny2.getValue();
+ }
+ catch (IndexOutOfBoundsException&)
+ {
+ // Bei Exception erstmal immer von Konvertierungs-Problem ausgehen
+ StarBASIC::Error( SbERR_OUT_OF_RANGE );
+ }
+
+ // #57847 Immer neue Variable anlegen, sonst Fehler
+ // durch PutObject(NULL) bei ReadOnly-Properties.
+ pElem = new SbxVariable( SbxVARIANT );
+ if( xRet.is() )
+ {
+ aAny <<= xRet;
+
+ // #67173 Kein Namen angeben, damit echter Klassen-Namen eintragen wird
+ String aName;
+ SbxObjectRef xWrapper = (SbxObject*)new SbUnoObject( aName, aAny );
+ pElem->PutObject( xWrapper );
+ }
+ else
+ {
+ pElem->PutObject( NULL );
+ }
+ }
+ }
+ else
+ {
+ rtl::OUString sDefaultMethod;
+
+ Reference< XDefaultMethod > xDfltMethod( x, UNO_QUERY );
+
+ if ( xDfltMethod.is() )
+ sDefaultMethod = xDfltMethod->getDefaultMethodName();
+ else if( xIndexAccess.is() )
+ sDefaultMethod = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "getByIndex" ) );
+
+ if ( sDefaultMethod.getLength() )
+ {
+ SbxVariable* meth = pUnoObj->Find( sDefaultMethod, SbxCLASS_METHOD );
+ SbxVariableRef refTemp = meth;
+ if ( refTemp )
+ {
+ meth->SetParameters( pPar );
+ SbxVariable* pNew = new SbxMethod( *(SbxMethod*)meth );
+ pElem = pNew;
+ }
+ }
+ }
+ }
+
+ // #42940, 0.Parameter zu NULL setzen, damit sich Var nicht selbst haelt
+ pPar->Put( NULL, 0 );
+ }
+ else if( pObj->ISA(BasicCollection) )
+ {
+ BasicCollection* pCol = (BasicCollection*)(SbxBase*)pObj;
+ pElem = new SbxVariable( SbxVARIANT );
+ pPar->Put( pElem, 0 );
+ pCol->CollItem( pPar );
+ }
+ }
+ }
+ }
+
+ return pElem;
+}
+
+// Laden eines Elements aus der Runtime-Library (+StringID+Typ)
+
+void SbiRuntime::StepRTL( UINT32 nOp1, UINT32 nOp2 )
+{
+ PushVar( FindElement( rBasic.pRtl, nOp1, nOp2, SbERR_PROC_UNDEFINED, FALSE ) );
+}
+
+void
+SbiRuntime::StepFIND_Impl( SbxObject* pObj, UINT32 nOp1, UINT32 nOp2, SbError nNotFound, BOOL bLocal, BOOL bStatic )
+{
+ if( !refLocals )
+ refLocals = new SbxArray;
+ PushVar( FindElement( pObj, nOp1, nOp2, nNotFound, bLocal, bStatic ) );
+}
+// Laden einer lokalen/globalen Variablen (+StringID+Typ)
+
+void SbiRuntime::StepFIND( UINT32 nOp1, UINT32 nOp2 )
+{
+ StepFIND_Impl( pMod, nOp1, nOp2, SbERR_PROC_UNDEFINED, TRUE );
+}
+
+// Search inside a class module (CM) to enable global search in time
+void SbiRuntime::StepFIND_CM( UINT32 nOp1, UINT32 nOp2 )
+{
+
+ SbClassModuleObject* pClassModuleObject = PTR_CAST(SbClassModuleObject,pMod);
+ if( pClassModuleObject )
+ pMod->SetFlag( SBX_GBLSEARCH );
+
+ StepFIND_Impl( pMod, nOp1, nOp2, SbERR_PROC_UNDEFINED, TRUE );
+
+ if( pClassModuleObject )
+ pMod->ResetFlag( SBX_GBLSEARCH );
+}
+
+void SbiRuntime::StepFIND_STATIC( UINT32 nOp1, UINT32 nOp2 )
+{
+ StepFIND_Impl( pMod, nOp1, nOp2, SbERR_PROC_UNDEFINED, TRUE, TRUE );
+}
+
+// Laden eines Objekt-Elements (+StringID+Typ)
+// Das Objekt liegt auf TOS
+
+void SbiRuntime::StepELEM( UINT32 nOp1, UINT32 nOp2 )
+{
+ // Liegt auf dem TOS ein Objekt?
+ SbxVariableRef pObjVar = PopVar();
+
+ SbxObject* pObj = PTR_CAST(SbxObject,(SbxVariable*) pObjVar);
+ if( !pObj )
+ {
+ SbxBase* pObjVarObj = pObjVar->GetObject();
+ pObj = PTR_CAST(SbxObject,pObjVarObj);
+ }
+
+ // #56368 Bei StepElem Referenz sichern, sonst koennen Objekte
+ // in Qualifizierungsketten wie ActiveComponent.Selection(0).Text
+ // zu fueh die Referenz verlieren
+ // #74254 Jetzt per Liste
+ if( pObj )
+ SaveRef( (SbxVariable*)pObj );
+
+ PushVar( FindElement( pObj, nOp1, nOp2, SbERR_NO_METHOD, FALSE ) );
+}
+
+// Laden eines Parameters (+Offset+Typ)
+// Wenn der Datentyp nicht stimmen sollte, eine Kopie anlegen
+// Der Datentyp SbxEMPTY zeigt an, daa kein Parameter angegeben ist.
+// Get( 0 ) darf EMPTY sein
+
+void SbiRuntime::StepPARAM( UINT32 nOp1, UINT32 nOp2 )
+{
+ USHORT i = static_cast<USHORT>( nOp1 & 0x7FFF );
+ SbxDataType t = (SbxDataType) nOp2;
+ SbxVariable* p;
+
+ // #57915 Missing sauberer loesen
+ USHORT nParamCount = refParams->Count();
+ if( i >= nParamCount )
+ {
+ INT16 iLoop = i;
+ while( iLoop >= nParamCount )
+ {
+ p = new SbxVariable();
+
+ if( SbiRuntime::isVBAEnabled() &&
+ (t == SbxOBJECT || t == SbxSTRING) )
+ {
+ if( t == SbxOBJECT )
+ p->PutObject( NULL );
+ else
+ p->PutString( String() );
+ }
+ else
+ p->PutErr( 448 ); // Wie in VB: Error-Code 448 (SbERR_NAMED_NOT_FOUND)
+
+ refParams->Put( p, iLoop );
+ iLoop--;
+ }
+ }
+ p = refParams->Get( i );
+
+ if( p->GetType() == SbxERROR && ( i ) )
+ //if( p->GetType() == SbxEMPTY && ( i ) )
+ {
+ // Wenn ein Parameter fehlt, kann er OPTIONAL sein
+ BOOL bOpt = FALSE;
+ if( pMeth )
+ {
+ SbxInfo* pInfo = pMeth->GetInfo();
+ if ( pInfo )
+ {
+ const SbxParamInfo* pParam = pInfo->GetParam( i );
+ if( pParam && ( (pParam->nFlags & SBX_OPTIONAL) != 0 ) )
+ {
+ // Default value?
+ USHORT nDefaultId = sal::static_int_cast< USHORT >(
+ pParam->nUserData & 0xffff );
+ if( nDefaultId > 0 )
+ {
+ String aDefaultStr = pImg->GetString( nDefaultId );
+ p = new SbxVariable();
+ p->PutString( aDefaultStr );
+ refParams->Put( p, i );
+ }
+ bOpt = TRUE;
+ }
+ }
+ }
+ if( bOpt == FALSE )
+ Error( SbERR_NOT_OPTIONAL );
+ }
+ else if( t != SbxVARIANT && (SbxDataType)(p->GetType() & 0x0FFF ) != t )
+ {
+ SbxVariable* q = new SbxVariable( t );
+ SaveRef( q );
+ *q = *p;
+ p = q;
+ }
+ SetupArgs( p, nOp1 );
+ PushVar( CheckArray( p ) );
+}
+
+// Case-Test (+True-Target+Test-Opcode)
+
+void SbiRuntime::StepCASEIS( UINT32 nOp1, UINT32 nOp2 )
+{
+ if( !refCaseStk || !refCaseStk->Count() )
+ StarBASIC::FatalError( SbERR_INTERNAL_ERROR );
+ else
+ {
+ SbxVariableRef xComp = PopVar();
+ SbxVariableRef xCase = refCaseStk->Get( refCaseStk->Count() - 1 );
+ if( xCase->Compare( (SbxOperator) nOp2, *xComp ) )
+ StepJUMP( nOp1 );
+ }
+}
+
+// Aufruf einer DLL-Prozedur (+StringID+Typ)
+// Auch hier zeigt das MSB des StringIDs an, dass Argv belegt ist
+
+void SbiRuntime::StepCALL( UINT32 nOp1, UINT32 nOp2 )
+{
+ String aName = pImg->GetString( static_cast<short>( nOp1 & 0x7FFF ) );
+ SbxArray* pArgs = NULL;
+ if( nOp1 & 0x8000 )
+ pArgs = refArgv;
+ DllCall( aName, aLibName, pArgs, (SbxDataType) nOp2, FALSE );
+ aLibName = String();
+ if( nOp1 & 0x8000 )
+ PopArgv();
+}
+
+// Aufruf einer DLL-Prozedur nach CDecl (+StringID+Typ)
+// Auch hier zeigt das MSB des StringIDs an, dass Argv belegt ist
+
+void SbiRuntime::StepCALLC( UINT32 nOp1, UINT32 nOp2 )
+{
+ String aName = pImg->GetString( static_cast<short>( nOp1 & 0x7FFF ) );
+ SbxArray* pArgs = NULL;
+ if( nOp1 & 0x8000 )
+ pArgs = refArgv;
+ DllCall( aName, aLibName, pArgs, (SbxDataType) nOp2, TRUE );
+ aLibName = String();
+ if( nOp1 & 0x8000 )
+ PopArgv();
+}
+
+
+// Beginn eines Statements (+Line+Col)
+
+void SbiRuntime::StepSTMNT( UINT32 nOp1, UINT32 nOp2 )
+{
+ // Wenn der Expr-Stack am Anfang einen Statements eine Variable enthaelt,
+ // hat ein Trottel X als Funktion aufgerufen, obwohl es eine Variable ist!
+ BOOL bFatalExpr = FALSE;
+ String sUnknownMethodName;
+ if( nExprLvl > 1 )
+ bFatalExpr = TRUE;
+ else if( nExprLvl )
+ {
+ SbxVariable* p = refExprStk->Get( 0 );
+ if( p->GetRefCount() > 1
+ && refLocals.Is() && refLocals->Find( p->GetName(), p->GetClass() ) )
+ {
+ sUnknownMethodName = p->GetName();
+ bFatalExpr = TRUE;
+ }
+ }
+ // Der Expr-Stack ist nun nicht mehr notwendig
+ ClearExprStack();
+
+ // #56368 Kuenstliche Referenz fuer StepElem wieder freigeben,
+ // damit sie nicht ueber ein Statement hinaus erhalten bleibt
+ //refSaveObj = NULL;
+ // #74254 Jetzt per Liste
+ ClearRefs();
+
+ // Wir muessen hier hart abbrechen, da sonst Zeile und Spalte nicht mehr
+ // stimmen!
+ if( bFatalExpr)
+ {
+ StarBASIC::FatalError( SbERR_NO_METHOD, sUnknownMethodName );
+ return;
+ }
+ pStmnt = pCode - 9;
+ USHORT nOld = nLine;
+ nLine = static_cast<short>( nOp1 );
+
+ // #29955 & 0xFF, um for-Schleifen-Ebene wegzufiltern
+ nCol1 = static_cast<short>( nOp2 & 0xFF );
+
+ // Suchen des naechsten STMNT-Befehls,
+ // um die End-Spalte dieses Statements zu setzen
+ // Searches of the next STMNT instruction,
+ // around the final column of this statement to set
+
+ nCol2 = 0xffff;
+ USHORT n1, n2;
+ const BYTE* p = pMod->FindNextStmnt( pCode, n1, n2 );
+ if( p )
+ {
+ if( n1 == nOp1 )
+ {
+ // #29955 & 0xFF, um for-Schleifen-Ebene wegzufiltern
+ nCol2 = (n2 & 0xFF) - 1;
+ }
+ }
+
+ // #29955 for-Schleifen-Ebene korrigieren, #67452 NICHT im Error-Handler sonst Chaos
+ if( !bInError )
+ {
+ // (Bei Sprngen aus Schleifen tritt hier eine Differenz auf)
+ USHORT nExspectedForLevel = static_cast<USHORT>( nOp2 / 0x100 );
+ if( pGosubStk )
+ nExspectedForLevel = nExspectedForLevel + pGosubStk->nStartForLvl;
+
+ // Wenn der tatsaechliche For-Level zu klein ist, wurde aus
+ // einer Schleife heraus gesprungen -> korrigieren
+ while( nForLvl > nExspectedForLevel )
+ PopFor();
+ }
+
+ // 16.10.96: #31460 Neues Konzept fuer StepInto/Over/Out
+ // Erklrung siehe bei _ImplGetBreakCallLevel.
+ if( pInst->nCallLvl <= pInst->nBreakCallLvl )
+ //if( nFlags & SbDEBUG_STEPINTO )
+ {
+ StarBASIC* pStepBasic = GetCurrentBasic( &rBasic );
+ USHORT nNewFlags = pStepBasic->StepPoint( nLine, nCol1, nCol2 );
+
+ // Neuen BreakCallLevel ermitteln
+ pInst->CalcBreakCallLevel( nNewFlags );
+ }
+
+ // Breakpoints nur bei STMNT-Befehlen in neuer Zeile!
+ else if( ( nOp1 != nOld )
+ && ( nFlags & SbDEBUG_BREAK )
+ && pMod->IsBP( static_cast<USHORT>( nOp1 ) ) )
+ {
+ StarBASIC* pBreakBasic = GetCurrentBasic( &rBasic );
+ USHORT nNewFlags = pBreakBasic->BreakPoint( nLine, nCol1, nCol2 );
+
+ // Neuen BreakCallLevel ermitteln
+ pInst->CalcBreakCallLevel( nNewFlags );
+ //16.10.96, ALT:
+ //if( nNewFlags != SbDEBUG_CONTINUE )
+ // nFlags = nNewFlags;
+ }
+}
+
+// (+SvStreamFlags+Flags)
+// Stack: Blocklaenge
+// Kanalnummer
+// Dateiname
+
+void SbiRuntime::StepOPEN( UINT32 nOp1, UINT32 nOp2 )
+{
+ SbxVariableRef pName = PopVar();
+ SbxVariableRef pChan = PopVar();
+ SbxVariableRef pLen = PopVar();
+ short nBlkLen = pLen->GetInteger();
+ short nChan = pChan->GetInteger();
+ ByteString aName( pName->GetString(), gsl_getSystemTextEncoding() );
+ pIosys->Open( nChan, aName, static_cast<short>( nOp1 ),
+ static_cast<short>( nOp2 ), nBlkLen );
+ Error( pIosys->GetError() );
+}
+
+// Objekt kreieren (+StringID+StringID)
+
+void SbiRuntime::StepCREATE( UINT32 nOp1, UINT32 nOp2 )
+{
+ String aClass( pImg->GetString( static_cast<short>( nOp2 ) ) );
+ SbxObject *pObj = SbxBase::CreateObject( aClass );
+ if( !pObj )
+ Error( SbERR_INVALID_OBJECT );
+ else
+ {
+ String aName( pImg->GetString( static_cast<short>( nOp1 ) ) );
+ pObj->SetName( aName );
+ // Das Objekt muss BASIC rufen koennen
+ pObj->SetParent( &rBasic );
+ SbxVariable* pNew = new SbxVariable;
+ pNew->PutObject( pObj );
+ PushVar( pNew );
+ }
+}
+
+void SbiRuntime::StepDCREATE( UINT32 nOp1, UINT32 nOp2 )
+{
+ StepDCREATE_IMPL( nOp1, nOp2 );
+}
+
+void SbiRuntime::StepDCREATE_REDIMP( UINT32 nOp1, UINT32 nOp2 )
+{
+ StepDCREATE_IMPL( nOp1, nOp2 );
+}
+
+
+// Helper function for StepDCREATE_IMPL / bRedimp = true
+void implCopyDimArray_DCREATE( SbxDimArray* pNewArray, SbxDimArray* pOldArray, short nMaxDimIndex,
+ short nActualDim, sal_Int32* pActualIndices, sal_Int32* pLowerBounds, sal_Int32* pUpperBounds )
+{
+ sal_Int32& ri = pActualIndices[nActualDim];
+ for( ri = pLowerBounds[nActualDim] ; ri <= pUpperBounds[nActualDim] ; ri++ )
+ {
+ if( nActualDim < nMaxDimIndex )
+ {
+ implCopyDimArray_DCREATE( pNewArray, pOldArray, nMaxDimIndex, nActualDim + 1,
+ pActualIndices, pLowerBounds, pUpperBounds );
+ }
+ else
+ {
+ SbxVariable* pSource = pOldArray->Get32( pActualIndices );
+ pNewArray->Put32( pSource, pActualIndices );
+ }
+ }
+}
+
+// #56204 Objekt-Array kreieren (+StringID+StringID), DCREATE == Dim-Create
+void SbiRuntime::StepDCREATE_IMPL( UINT32 nOp1, UINT32 nOp2 )
+{
+ SbxVariableRef refVar = PopVar();
+
+ DimImpl( refVar );
+
+ // Das Array mit Instanzen der geforderten Klasse fuellen
+ SbxBaseRef xObj = (SbxBase*)refVar->GetObject();
+ if( !xObj )
+ {
+ StarBASIC::Error( SbERR_INVALID_OBJECT );
+ return;
+ }
+
+ SbxDimArray* pArray = 0;
+ if( xObj->ISA(SbxDimArray) )
+ {
+ SbxBase* pObj = (SbxBase*)xObj;
+ pArray = (SbxDimArray*)pObj;
+
+ // Dimensionen auswerten
+ short nDims = pArray->GetDims();
+ INT32 nTotalSize = 0;
+
+ // es muss ein eindimensionales Array sein
+ INT32 nLower, nUpper, nSize;
+ INT32 i;
+ for( i = 0 ; i < nDims ; i++ )
+ {
+ pArray->GetDim32( i+1, nLower, nUpper );
+ nSize = nUpper - nLower + 1;
+ if( i == 0 )
+ nTotalSize = nSize;
+ else
+ nTotalSize *= nSize;
+ }
+
+ // Objekte anlegen und ins Array eintragen
+ String aClass( pImg->GetString( static_cast<short>( nOp2 ) ) );
+ for( i = 0 ; i < nTotalSize ; i++ )
+ {
+ SbxObject *pClassObj = SbxBase::CreateObject( aClass );
+ if( !pClassObj )
+ {
+ Error( SbERR_INVALID_OBJECT );
+ break;
+ }
+ else
+ {
+ String aName( pImg->GetString( static_cast<short>( nOp1 ) ) );
+ pClassObj->SetName( aName );
+ // Das Objekt muss BASIC rufen koennen
+ pClassObj->SetParent( &rBasic );
+ pArray->SbxArray::Put32( pClassObj, i );
+ }
+ }
+ }
+
+ SbxDimArray* pOldArray = (SbxDimArray*)(SbxArray*)refRedimpArray;
+ if( pArray && pOldArray )
+ {
+ short nDimsNew = pArray->GetDims();
+ short nDimsOld = pOldArray->GetDims();
+ short nDims = nDimsNew;
+ BOOL bRangeError = FALSE;
+
+ // Store dims to use them for copying later
+ sal_Int32* pLowerBounds = new sal_Int32[nDims];
+ sal_Int32* pUpperBounds = new sal_Int32[nDims];
+ sal_Int32* pActualIndices = new sal_Int32[nDims];
+ if( nDimsOld != nDimsNew )
+ {
+ bRangeError = TRUE;
+ }
+ else
+ {
+ // Compare bounds
+ for( short i = 1 ; i <= nDims ; i++ )
+ {
+ sal_Int32 lBoundNew, uBoundNew;
+ sal_Int32 lBoundOld, uBoundOld;
+ pArray->GetDim32( i, lBoundNew, uBoundNew );
+ pOldArray->GetDim32( i, lBoundOld, uBoundOld );
+
+ lBoundNew = std::max( lBoundNew, lBoundOld );
+ uBoundNew = std::min( uBoundNew, uBoundOld );
+ short j = i - 1;
+ pActualIndices[j] = pLowerBounds[j] = lBoundNew;
+ pUpperBounds[j] = uBoundNew;
+ }
+ }
+
+ if( bRangeError )
+ {
+ StarBASIC::Error( SbERR_OUT_OF_RANGE );
+ }
+ else
+ {
+ // Copy data from old array by going recursively through all dimensions
+ // (It would be faster to work on the flat internal data array of an
+ // SbyArray but this solution is clearer and easier)
+ implCopyDimArray_DCREATE( pArray, pOldArray, nDims - 1,
+ 0, pActualIndices, pLowerBounds, pUpperBounds );
+ }
+ delete [] pUpperBounds;
+ delete [] pLowerBounds;
+ delete [] pActualIndices;
+ refRedimpArray = NULL;
+ }
+}
+
+// Objekt aus User-Type kreieren (+StringID+StringID)
+
+SbxObject* createUserTypeImpl( const String& rClassName ); // sb.cxx
+
+void SbiRuntime::StepTCREATE( UINT32 nOp1, UINT32 nOp2 )
+{
+ String aName( pImg->GetString( static_cast<short>( nOp1 ) ) );
+ String aClass( pImg->GetString( static_cast<short>( nOp2 ) ) );
+
+ SbxObject* pCopyObj = createUserTypeImpl( aClass );
+ if( pCopyObj )
+ pCopyObj->SetName( aName );
+ SbxVariable* pNew = new SbxVariable;
+ pNew->PutObject( pCopyObj );
+ pNew->SetDeclareClassName( aClass );
+ PushVar( pNew );
+}
+
+void SbiRuntime::implCreateFixedString( SbxVariable* pStrVar, UINT32 nOp2 )
+{
+ USHORT nCount = static_cast<USHORT>( nOp2 >> 17 ); // len = all bits above 0x10000
+ String aStr;
+ aStr.Fill( nCount, 0 );
+ pStrVar->PutString( aStr );
+}
+
+// Einrichten einer lokalen Variablen (+StringID+Typ)
+
+void SbiRuntime::StepLOCAL( UINT32 nOp1, UINT32 nOp2 )
+{
+ if( !refLocals.Is() )
+ refLocals = new SbxArray;
+ String aName( pImg->GetString( static_cast<short>( nOp1 ) ) );
+ if( refLocals->Find( aName, SbxCLASS_DONTCARE ) == NULL )
+ {
+ SbxDataType t = (SbxDataType)(nOp2 & 0xffff);
+ SbxVariable* p = new SbxVariable( t );
+ p->SetName( aName );
+ bool bWithEvents = ((t & 0xff) == SbxOBJECT && (nOp2 & SBX_TYPE_WITH_EVENTS_FLAG) != 0);
+ if( bWithEvents )
+ p->SetFlag( SBX_WITH_EVENTS );
+ bool bFixedString = ((t & 0xff) == SbxSTRING && (nOp2 & SBX_FIXED_LEN_STRING_FLAG) != 0);
+ if( bFixedString )
+ implCreateFixedString( p, nOp2 );
+ refLocals->Put( p, refLocals->Count() );
+ }
+}
+
+// Einrichten einer modulglobalen Variablen (+StringID+Typ)
+
+void SbiRuntime::StepPUBLIC_Impl( UINT32 nOp1, UINT32 nOp2, bool bUsedForClassModule )
+{
+ String aName( pImg->GetString( static_cast<short>( nOp1 ) ) );
+ SbxDataType t = (SbxDataType)(SbxDataType)(nOp2 & 0xffff);;
+ BOOL bFlag = pMod->IsSet( SBX_NO_MODIFY );
+ pMod->SetFlag( SBX_NO_MODIFY );
+ SbxVariableRef p = pMod->Find( aName, SbxCLASS_PROPERTY );
+ if( p.Is() )
+ pMod->Remove (p);
+ SbProperty* pProp = pMod->GetProperty( aName, t );
+ if( !bUsedForClassModule )
+ pProp->SetFlag( SBX_PRIVATE );
+ if( !bFlag )
+ pMod->ResetFlag( SBX_NO_MODIFY );
+ if( pProp )
+ {
+ pProp->SetFlag( SBX_DONTSTORE );
+ // AB: 2.7.1996: HACK wegen 'Referenz kann nicht gesichert werden'
+ pProp->SetFlag( SBX_NO_MODIFY);
+
+ bool bWithEvents = ((t & 0xff) == SbxOBJECT && (nOp2 & SBX_TYPE_WITH_EVENTS_FLAG) != 0);
+ if( bWithEvents )
+ pProp->SetFlag( SBX_WITH_EVENTS );
+ bool bFixedString = ((t & 0xff) == SbxSTRING && (nOp2 & SBX_FIXED_LEN_STRING_FLAG) != 0);
+ if( bFixedString )
+ implCreateFixedString( p, nOp2 );
+ }
+}
+
+void SbiRuntime::StepPUBLIC( UINT32 nOp1, UINT32 nOp2 )
+{
+ StepPUBLIC_Impl( nOp1, nOp2, false );
+}
+
+void SbiRuntime::StepPUBLIC_P( UINT32 nOp1, UINT32 nOp2 )
+{
+ // Creates module variable that isn't reinitialised when
+ // between invocations ( for VBASupport & document basic only )
+ if( pMod->pImage->bFirstInit )
+ {
+ bool bUsedForClassModule = pImg->GetFlag( SBIMG_CLASSMODULE );
+ StepPUBLIC_Impl( nOp1, nOp2, bUsedForClassModule );
+ }
+}
+
+// Einrichten einer globalen Variablen (+StringID+Typ)
+
+void SbiRuntime::StepGLOBAL( UINT32 nOp1, UINT32 nOp2 )
+{
+ if( pImg->GetFlag( SBIMG_CLASSMODULE ) )
+ StepPUBLIC_Impl( nOp1, nOp2, true );
+
+ String aName( pImg->GetString( static_cast<short>( nOp1 ) ) );
+ SbxDataType t = (SbxDataType)(nOp2 & 0xffff);
+
+ // Store module scope variables at module scope
+ // in non vba mode these are stored at the library level :/
+ // not sure if this really should not be enabled for ALL basic
+ SbxObject* pStorage = &rBasic;
+ if ( SbiRuntime::isVBAEnabled() )
+ {
+ pStorage = pMod;
+ pMod->AddVarName( aName );
+ }
+
+ BOOL bFlag = pStorage->IsSet( SBX_NO_MODIFY );
+ rBasic.SetFlag( SBX_NO_MODIFY );
+ SbxVariableRef p = pStorage->Find( aName, SbxCLASS_PROPERTY );
+ if( p.Is() )
+ pStorage->Remove (p);
+ p = pStorage->Make( aName, SbxCLASS_PROPERTY, t );
+ if( !bFlag )
+ pStorage->ResetFlag( SBX_NO_MODIFY );
+ if( p )
+ {
+ p->SetFlag( SBX_DONTSTORE );
+ // AB: 2.7.1996: HACK wegen 'Referenz kann nicht gesichert werden'
+ p->SetFlag( SBX_NO_MODIFY);
+ }
+}
+
+
+// Creates global variable that isn't reinitialised when
+// basic is restarted, P=PERSIST (+StringID+Typ)
+
+void SbiRuntime::StepGLOBAL_P( UINT32 nOp1, UINT32 nOp2 )
+{
+ if( pMod->pImage->bFirstInit )
+ {
+ StepGLOBAL( nOp1, nOp2 );
+ }
+}
+
+
+// Searches for global variable, behavior depends on the fact
+// if the variable is initialised for the first time
+
+void SbiRuntime::StepFIND_G( UINT32 nOp1, UINT32 nOp2 )
+{
+ if( pMod->pImage->bFirstInit )
+ {
+ // Behave like always during first init
+ StepFIND( nOp1, nOp2 );
+ }
+ else
+ {
+ // Return dummy variable
+ SbxDataType t = (SbxDataType) nOp2;
+ String aName( pImg->GetString( static_cast<short>( nOp1 & 0x7FFF ) ) );
+
+ SbxVariable* pDummyVar = new SbxVariable( t );
+ pDummyVar->SetName( aName );
+ PushVar( pDummyVar );
+ }
+}
+
+
+SbxVariable* SbiRuntime::StepSTATIC_Impl( String& aName, SbxDataType& t )
+{
+ SbxVariable* p = NULL;
+ if ( pMeth )
+ {
+ SbxArray* pStatics = pMeth->GetStatics();
+ if( pStatics && ( pStatics->Find( aName, SbxCLASS_DONTCARE ) == NULL ) )
+ {
+ p = new SbxVariable( t );
+ if( t != SbxVARIANT )
+ p->SetFlag( SBX_FIXED );
+ p->SetName( aName );
+ pStatics->Put( p, pStatics->Count() );
+ }
+ }
+ return p;
+}
+// Einrichten einer statischen Variablen (+StringID+Typ)
+void SbiRuntime::StepSTATIC( UINT32 nOp1, UINT32 nOp2 )
+{
+ String aName( pImg->GetString( static_cast<short>( nOp1 ) ) );
+ SbxDataType t = (SbxDataType) nOp2;
+ StepSTATIC_Impl( aName, t );
+}
+
diff --git a/basic/source/runtime/wnt-mingw.s b/basic/source/runtime/wnt-mingw.s
new file mode 100644
index 000000000000..8c332c1a8ce8
--- /dev/null
+++ b/basic/source/runtime/wnt-mingw.s
@@ -0,0 +1,53 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#***********************************************************************/
+
+.intel_syntax
+
+.globl _DllMgr_call32
+.globl _DllMgr_callFp
+
+_DllMgr_call32:
+_DllMgr_callFp:
+ push ebp
+ mov ebp, esp
+ push esi
+ push edi
+ mov ecx, [ebp+16]
+ jecxz $1
+ sub esp, ecx
+ mov edi, esp
+ mov esi, [ebp+12]
+ shr ecx, 2
+ rep movsd
+$1: call DWORD PTR [ebp+8]
+ # for extra safety, do not trust esp after call (in case the Basic Declare
+ # signature is wrong):
+ mov edi, [ebp-8]
+ mov esi, [ebp-4]
+ mov esp, ebp
+ pop ebp
+ ret 12
diff --git a/basic/source/runtime/wnt.asm b/basic/source/runtime/wnt.asm
new file mode 100644
index 000000000000..2a8710e34243
--- /dev/null
+++ b/basic/source/runtime/wnt.asm
@@ -0,0 +1,56 @@
+;*************************************************************************
+;
+; DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+;
+; Copyright 2000, 2010 Oracle and/or its affiliates.
+;
+; OpenOffice.org - a multi-platform office productivity suite
+;
+; This file is part of OpenOffice.org.
+;
+; OpenOffice.org is free software: you can redistribute it and/or modify
+; it under the terms of the GNU Lesser General Public License version 3
+; only, as published by the Free Software Foundation.
+;
+; OpenOffice.org 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 Lesser General Public License version 3 for more details
+; (a copy is included in the LICENSE file that accompanied this code).
+;
+; You should have received a copy of the GNU Lesser General Public License
+; version 3 along with OpenOffice.org. If not, see
+; <http://www.openoffice.org/license.html>
+; for a copy of the LGPLv3 License.
+;
+;***********************************************************************/
+
+.386
+
+PUBLIC _DllMgr_call32@12
+PUBLIC _DllMgr_callFp@12
+
+_TEXT SEGMENT
+_DllMgr_call32@12:
+_DllMgr_callFp@12:
+ push ebp
+ mov ebp, esp
+ push esi
+ push edi
+ mov ecx, [ebp+16]
+ jecxz $1
+ sub esp, ecx
+ mov edi, esp
+ mov esi, [ebp+12]
+ shr ecx, 2
+ rep movsd
+$1: call DWORD PTR [ebp+8]
+ ; for extra safety, do not trust esp after call (in case the Basic Declare
+ ; signature is wrong):
+ mov edi, [ebp-8]
+ mov esi, [ebp-4]
+ mov esp, ebp
+ pop ebp
+ ret 12
+_TEXT ENDS
+END
diff --git a/basic/source/sample/collelem.cxx b/basic/source/sample/collelem.cxx
new file mode 100644
index 000000000000..887917048c61
--- /dev/null
+++ b/basic/source/sample/collelem.cxx
@@ -0,0 +1,79 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+#include <tools/errcode.hxx>
+#include <vcl/msgbox.hxx>
+#include <basic/sbx.hxx>
+#include "collelem.hxx"
+
+// Das Sample-Element ist ein kleines Objekt, das die Properties
+// Name und Value enthlt sowie die Methode Say, die den bergebenen
+// Text mit dem eigenen Namen verkoppelt und ausgibt.
+
+SampleElement::SampleElement( const String& r ) : SbxObject( r )
+{
+ // Methode Say mit einem String-Parameter
+ SbxVariable* pMeth = Make( String( RTL_CONSTASCII_USTRINGPARAM("Say") ), SbxCLASS_METHOD, SbxEMPTY );
+ pMeth->SetUserData( 0x12345678 );
+ pMeth->ResetFlag( SBX_FIXED );
+ SbxInfo* pInfo_ = new SbxInfo;
+ pInfo_->AddParam( String( RTL_CONSTASCII_USTRINGPARAM("text") ), SbxSTRING, SBX_READ );
+ pMeth->SetInfo( pInfo_ );
+}
+
+void SampleElement::SFX_NOTIFY( SfxBroadcaster& rBC, const TypeId& rBCType,
+ const SfxHint& rHint, const TypeId& rHintType )
+{
+ const SbxHint* pHint = PTR_CAST(SbxHint,&rHint);
+ if( pHint )
+ {
+ SbxVariable* pVar = pHint->GetVar();
+ SbxArray* pPar_ = pVar->GetParameters();
+ ULONG t = pHint->GetId();
+ if( t == SBX_HINT_DATAWANTED && pVar->GetUserData() == 0x12345678 )
+ {
+ // Die Say-Methode:
+ // 1 Parameter + Returnwert
+ if( !pPar_ || pPar_->Count() != 2 )
+ SetError( SbxERR_WRONG_ARGS );
+ else
+ {
+ String s( GetName() );
+ s.AppendAscii( " says: " );
+ s += pPar_->Get( 1 )->GetString();
+ pPar_->Get( 0 )->SetType(SbxSTRING);
+ pPar_->Get( 0 )->PutString( s );
+ InfoBox( NULL, s ).Execute();
+ }
+ return;
+ }
+ SbxObject::SFX_NOTIFY( rBC, rBCType, rHint, rHintType );
+ }
+}
+
diff --git a/basic/source/sample/makefile.mk b/basic/source/sample/makefile.mk
new file mode 100644
index 000000000000..9aeb8e353414
--- /dev/null
+++ b/basic/source/sample/makefile.mk
@@ -0,0 +1,58 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..$/..
+
+PRJNAME=basic
+TARGET=sample
+
+# --- Settings ------------------------------------------------------------
+
+.INCLUDE : settings.mk
+
+# --- Allgemein ------------------------------------------------------------
+
+CXXFILES = \
+ object.cxx \
+ collelem.cxx
+
+
+OBJFILES = \
+ $(OBJ)$/object.obj \
+ $(OBJ)$/collelem.obj
+
+
+LIBTARGET = NO
+
+LIB1TARGET=$(LB)$/sample.lib
+LIB1ARCHIV=$(LB)$/libsample.a
+
+LIB1OBJFILES = $(OBJFILES)
+
+# --- Targets ------------------------------------------------------------
+
+.INCLUDE : target.mk
diff --git a/basic/source/sample/object.cxx b/basic/source/sample/object.cxx
new file mode 100644
index 000000000000..3c5fbeb3478c
--- /dev/null
+++ b/basic/source/sample/object.cxx
@@ -0,0 +1,278 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+#include <tools/errcode.hxx>
+#include <basic/sbxobj.hxx>
+#include <basic/sbx.hxx>
+#ifndef __SBX_SBXVARIABLE_HXX //autogen
+#include <basic/sbxvar.hxx>
+#endif
+#ifndef _MSGBOX_HXX //autogen
+#include <vcl/msgbox.hxx>
+#endif
+
+#include "object.hxx"
+#include "collelem.hxx"
+
+// Das Sample-Objekt hat folgende Elemente:
+// 1) Properties:
+// Name der Name
+// Value ein double-Wert, beide bereits als Default drin
+// 2) Methoden:
+// Create Erzeugen eines neuen Unterelements
+// Display Ausgabe eines Textes
+// Square Argument * Argument
+// Event Aufruf eines Basic-Eventhandlers
+// 3) Unterobjekte:
+// Per Create() kann ein neues Unterelement eingerichtet werden,
+// das indiziert werden kann, falls mehrere Objekte gleichen Namens
+// existieren.
+// Diese Implementation ist ein Beispiel fuer eine tabellengesteuerte
+// Version, die sehr viele Elemente enthalten kann. Die Elemente werden
+// je nach Bedarf aus der Tabelle in das Objekt uebernommen.
+// Die Collection findet sich in COLLECTN.*, die in der Collection
+// enthaltenen Objekte in COLLELEM.*
+
+// Das Sample-Objekt wird in ..\app\mybasic.cxx wie folgt in StarBASIC
+// eingebaut:
+
+// MyBasic::MyBasic() : StarBASIC()
+// {
+// AddFactory( new SampleObjectFac() );
+// }
+
+// Das nArgs-Feld eines Tabelleneintrags ist wie folgt verschluesselt:
+
+#define _ARGSMASK 0x00FF // Bis zu 255 Argumente
+#define _RWMASK 0x0F00 // Maske fuer R/W-Bits
+#define _TYPEMASK 0xF000 // Maske fuer den Typ des Eintrags
+
+#define _READ 0x0100 // kann gelesen werden
+#define _BWRITE 0x0200 // kann as Lvalue verwendet werden
+#define _LVALUE _BWRITE // kann as Lvalue verwendet werden
+#define _READWRITE 0x0300 // beides
+#define _OPT 0x0400 // TRUE: optionaler Parameter
+#define _METHOD 0x1000 // Masken-Bit fuer eine Methode
+#define _PROPERTY 0x2000 // Masken-Bit fuer eine Property
+#define _COLL 0x4000 // Masken-Bit fuer eine Collection
+ // Kombination von oberen Bits:
+#define _FUNCTION 0x1100 // Maske fuer Function
+#define _LFUNCTION 0x1300 // Maske fuer Function, die auch als Lvalue geht
+#define _ROPROP 0x2100 // Maske Read Only-Property
+#define _WOPROP 0x2200 // Maske Write Only-Property
+#define _RWPROP 0x2300 // Maske Read/Write-Property
+#define _COLLPROP 0x4100 // Maske Read-Collection-Element
+
+#define COLLNAME "Elements" // Name der Collection, hier mal hart verdrahtet
+
+SampleObject::Methods SampleObject::aMethods[] = {
+// Eine Sample-Methode (der Returnwert ist SbxNULL)
+{ "Display", SbxEMPTY, &SampleObject::Display, 1 | _FUNCTION },
+ // Ein Named Parameter
+ { "message", SbxSTRING, NULL, 0 },
+// Eine Sample-Funktion
+{ "Square", SbxDOUBLE, &SampleObject::Square, 1 | _FUNCTION },
+ // Ein Named Parameter
+ { "value", SbxDOUBLE, NULL, 0 },
+// Basic-Callback
+{ "Event", SbxEMPTY, &SampleObject::Event, 1 | _FUNCTION },
+ // Ein Named Parameter
+ { "event", SbxSTRING, NULL, 0 },
+// Element erzeugen
+{ "Create", SbxEMPTY, &SampleObject::Create, 1 | _FUNCTION },
+ // Ein Named Parameter
+ { "name", SbxSTRING, NULL, 0 },
+
+{ NULL, SbxNULL, NULL, -1 }}; // Tabellenende
+
+SampleObject::SampleObject( const String& rClass ) : SbxObject( rClass )
+{
+ SetName( String( RTL_CONSTASCII_USTRINGPARAM("Sample") ) );
+ PutDouble( 1.0 ); // Startwert fuer Value
+}
+
+// Suche nach einem Element:
+// Hier wird linear durch die Methodentabelle gegangen, bis eine
+// passende Methode gefunden wurde.
+// Wenn die Methode/Property nicht gefunden wurde, nur NULL ohne
+// Fehlercode zurueckliefern, da so auch eine ganze Chain von
+// Objekten nach der Methode/Property befragt werden kann.
+
+SbxVariable* SampleObject::Find( const String& rName, SbxClassType t )
+{
+ // Ist das Element bereits vorhanden?
+ SbxVariable* pRes = SbxObject::Find( rName, t );
+ if( !pRes && t != SbxCLASS_OBJECT )
+ {
+ // sonst suchen
+ Methods* p = aMethods;
+ short nIndex = 0;
+ BOOL bFound = FALSE;
+ while( p->nArgs != -1 )
+ {
+ if( rName.EqualsIgnoreCaseAscii( p->pName ) )
+ {
+ bFound = TRUE; break;
+ }
+ nIndex += ( p->nArgs & _ARGSMASK ) + 1;
+ p = aMethods + nIndex;
+ }
+ if( bFound )
+ {
+ // Args-Felder isolieren:
+ short nAccess = ( p->nArgs & _RWMASK ) >> 8;
+ short nType = ( p->nArgs & _TYPEMASK );
+ String aName_ = String::CreateFromAscii( p->pName );
+ SbxClassType eCT = SbxCLASS_OBJECT;
+ if( nType & _PROPERTY )
+ eCT = SbxCLASS_PROPERTY;
+ else if( nType & _METHOD )
+ eCT = SbxCLASS_METHOD;
+ pRes = Make( aName_, eCT, p->eType );
+ // Wir setzen den Array-Index + 1, da ja noch andere
+ // Standard-Properties existieren, die auch aktiviert
+ // werden muessen.
+ pRes->SetUserData( nIndex + 1 );
+ pRes->SetFlags( nAccess );
+ }
+ }
+ return pRes;
+}
+
+// Aktivierung eines Elements oder Anfordern eines Infoblocks
+
+void SampleObject::SFX_NOTIFY( SfxBroadcaster& rBC, const TypeId& rBCT,
+ const SfxHint& rHint, const TypeId& rHT )
+{
+ const SbxHint* pHint = PTR_CAST(SbxHint,&rHint);
+ if( pHint )
+ {
+ SbxVariable* pVar = pHint->GetVar();
+ SbxArray* pPar_ = pVar->GetParameters();
+ USHORT nIndex = (USHORT) pVar->GetUserData();
+ // kein Index: weiterreichen!
+ if( nIndex )
+ {
+ ULONG t = pHint->GetId();
+ if( t == SBX_HINT_INFOWANTED )
+ pVar->SetInfo( GetInfo( (short) pVar->GetUserData() ) );
+ else
+ {
+ BOOL bWrite = FALSE;
+ if( t == SBX_HINT_DATACHANGED )
+ bWrite = TRUE;
+ if( t == SBX_HINT_DATAWANTED || bWrite )
+ {
+ // Parameter-Test fuer Methoden:
+ USHORT nPar = aMethods[ --nIndex ].nArgs & 0x00FF;
+ // Element 0 ist der Returnwert
+ if( ( !pPar_ && nPar )
+ || ( pPar_->Count() != nPar+1 ) )
+ SetError( SbxERR_WRONG_ARGS );
+ // Alles klar, man kann den Call ausfuehren
+ else
+ {
+ (this->*(aMethods[ nIndex ].pFunc))( pVar, pPar_, bWrite );
+ }
+ }
+ }
+ }
+ SbxObject::SFX_NOTIFY( rBC, rBCT, rHint, rHT );
+ }
+}
+
+// Zusammenbau der Infostruktur fuer einzelne Elemente
+
+SbxInfo* SampleObject::GetInfo( short nIdx )
+{
+ Methods* p = &aMethods[ nIdx ];
+ // Wenn mal eine Hilfedatei zur Verfuegung steht:
+ // SbxInfo* pInfo_ = new SbxInfo( Hilfedateiname, p->nHelpId );
+ SbxInfo* pInfo_ = new SbxInfo;
+ short nPar = p->nArgs & _ARGSMASK;
+ for( short i = 0; i < nPar; i++ )
+ {
+ p++;
+ String aName_ = String::CreateFromAscii( p->pName );
+ USHORT nFlags_ = ( p->nArgs >> 8 ) & 0x03;
+ if( p->nArgs & _OPT )
+ nFlags_ |= SBX_OPTIONAL;
+ pInfo_->AddParam( aName_, p->eType, nFlags_ );
+ }
+ return pInfo_;
+}
+
+////////////////////////////////////////////////////////////////////////////
+
+// Properties und Methoden legen beim Get (bPut = FALSE) den Returnwert
+// im Element 0 des Argv ab; beim Put (bPut = TRUE) wird der Wert aus
+// Element 0 gespeichert.
+
+// Die Methoden:
+
+void SampleObject::Display( SbxVariable*, SbxArray* pPar_, BOOL )
+{
+ // GetString() loest u.U. auch einen Error aus!
+ String s( pPar_->Get( 1 )->GetString() );
+ if( !IsError() )
+ InfoBox( NULL, s ).Execute();
+}
+
+void SampleObject::Square( SbxVariable* pVar, SbxArray* pPar_, BOOL )
+{
+ double n = pPar_->Get( 1 )->GetDouble();
+ pVar->PutDouble( n * n );
+}
+
+// Callback nach BASIC:
+
+void SampleObject::Event( SbxVariable*, SbxArray* pPar_, BOOL )
+{
+ Call( pPar_->Get( 1 )->GetString(), NULL );
+}
+
+// Neues Element anlegen
+
+void SampleObject::Create( SbxVariable* pVar, SbxArray* pPar_, BOOL )
+{
+ pVar->PutObject(
+ MakeObject( pPar_->Get( 1 )->GetString(), String( RTL_CONSTASCII_USTRINGPARAM("SampleElement") ) ) );
+}
+
+// Die Factory legt unsere beiden Objekte an.
+
+SbxObject* SampleObjectFac::CreateObject( const String& rClass )
+{
+ if( rClass.EqualsIgnoreCaseAscii( "SampleObject" ) )
+ return new SampleObject( rClass );
+ if( rClass.EqualsIgnoreCaseAscii( "SampleElement" ) )
+ return new SampleElement( rClass );
+ return NULL;
+}
+
diff --git a/basic/source/sample/sample.bas b/basic/source/sample/sample.bas
new file mode 100644
index 000000000000..d0e416871af0
--- /dev/null
+++ b/basic/source/sample/sample.bas
@@ -0,0 +1,39 @@
+' Sample-Programm fuer Sample-Objekte
+
+Sub Main
+ Dim Sample As SampleObject
+ Dim Element1 As Object, Element2 As Object
+ Set Element1 = Sample!Create "Objekt"
+ Set Element2 = Sample.Create "Objekt"
+ Element1 = "Element 1"
+ Element2 = "Element 2"
+ For i = 0 to 1
+ Print Sample.Objekt( i )
+ Next
+ 'Test der Event-Methode im Sample-Objekt
+ Sample.Event "Bang"
+End Sub
+
+Sub Bang
+ print "Sample-Callback: BANG!"
+End Sub
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/basic/source/sbx/format.src b/basic/source/sbx/format.src
new file mode 100644
index 000000000000..7e576134fad5
--- /dev/null
+++ b/basic/source/sbx/format.src
@@ -0,0 +1,85 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "svtools/svtools.hrc"
+
+String STR_BASICKEY_FORMAT_ON
+{
+ Text [ en-US ] = "On" ;
+};
+String STR_BASICKEY_FORMAT_OFF
+{
+ Text [ en-US ] = "Off" ;
+};
+String STR_BASICKEY_FORMAT_TRUE
+{
+ Text [ en-US ] = "True" ;
+};
+String STR_BASICKEY_FORMAT_FALSE
+{
+ Text [ en-US ] = "False" ;
+};
+String STR_BASICKEY_FORMAT_YES
+{
+ Text [ en-US ] = "Yes" ;
+};
+String STR_BASICKEY_FORMAT_NO
+{
+ Text [ en-US ] = "No" ;
+};
+String STR_BASICKEY_FORMAT_CURRENCY
+{
+ Text [ en-US ] = "@0.00 $;@(0.00 $)" ;
+};
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/basic/source/sbx/makefile.mk b/basic/source/sbx/makefile.mk
new file mode 100644
index 000000000000..dfd8e72bf4da
--- /dev/null
+++ b/basic/source/sbx/makefile.mk
@@ -0,0 +1,77 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..$/..
+
+PRJNAME=basic
+TARGET=sbx
+
+# --- Settings -----------------------------------------------------------
+
+.INCLUDE : settings.mk
+
+
+# --- Allgemein -----------------------------------------------------------
+
+SRS1NAME=$(TARGET)
+SRC1FILES= format.src
+
+SLOFILES= \
+ $(SLO)$/sbxbase.obj \
+ $(SLO)$/sbxres.obj \
+ $(SLO)$/sbxvalue.obj \
+ $(SLO)$/sbxvals.obj \
+ $(SLO)$/sbxvar.obj \
+ $(SLO)$/sbxarray.obj \
+ $(SLO)$/sbxobj.obj \
+ $(SLO)$/sbxcoll.obj \
+ $(SLO)$/sbxexec.obj \
+ $(SLO)$/sbxint.obj \
+ $(SLO)$/sbxlng.obj \
+ $(SLO)$/sbxsng.obj \
+ $(SLO)$/sbxmstrm.obj \
+ $(SLO)$/sbxdbl.obj \
+ $(SLO)$/sbxcurr.obj \
+ $(SLO)$/sbxdate.obj \
+ $(SLO)$/sbxstr.obj \
+ $(SLO)$/sbxbool.obj \
+ $(SLO)$/sbxchar.obj \
+ $(SLO)$/sbxbyte.obj \
+ $(SLO)$/sbxuint.obj \
+ $(SLO)$/sbxulng.obj \
+ $(SLO)$/sbxform.obj \
+ $(SLO)$/sbxscan.obj \
+ $(SLO)$/sbxdec.obj
+
+
+EXCEPTIONSFILES=$(SLO)$/sbxarray.obj
+
+# --- Targets -------------------------------------------------------------
+
+.INCLUDE : target.mk
+
+
diff --git a/basic/source/sbx/sbxarray.cxx b/basic/source/sbx/sbxarray.cxx
new file mode 100644
index 000000000000..67e7ce71aded
--- /dev/null
+++ b/basic/source/sbx/sbxarray.cxx
@@ -0,0 +1,857 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+#include <tools/stream.hxx>
+#include <basic/sbx.hxx>
+#include "runtime.hxx"
+#include <vector>
+using namespace std;
+
+struct SbxDim { // eine Array-Dimension:
+ SbxDim* pNext; // Link
+ INT32 nLbound, nUbound; // Begrenzungen
+ INT32 nSize; // Anzahl Elemente
+};
+
+class SbxVarEntry : public SbxVariableRef {
+public:
+ XubString* pAlias;
+ SbxVarEntry() : SbxVariableRef(), pAlias( NULL ) {}
+ ~SbxVarEntry() { delete pAlias; }
+};
+
+typedef SbxVarEntry* SbxVarEntryPtr;
+typedef vector< SbxVarEntryPtr > SbxVarEntryPtrVector;
+class SbxVarRefs : public SbxVarEntryPtrVector
+{
+public:
+ SbxVarRefs( void ) {}
+};
+
+
+TYPEINIT1(SbxArray,SbxBase)
+TYPEINIT1(SbxDimArray,SbxArray)
+
+//////////////////////////////////////////////////////////////////////////
+//
+// SbxArray
+//
+//////////////////////////////////////////////////////////////////////////
+
+SbxArray::SbxArray( SbxDataType t ) : SbxBase()
+{
+ pData = new SbxVarRefs;
+ eType = t;
+ if( t != SbxVARIANT )
+ SetFlag( SBX_FIXED );
+}
+
+SbxArray::SbxArray( const SbxArray& rArray ) :
+ SvRefBase( rArray ), SbxBase()
+{
+ pData = new SbxVarRefs;
+ if( rArray.eType != SbxVARIANT )
+ SetFlag( SBX_FIXED );
+ *this = rArray;
+}
+
+SbxArray& SbxArray::operator=( const SbxArray& rArray )
+{
+ if( &rArray != this )
+ {
+ eType = rArray.eType;
+ Clear();
+ SbxVarRefs* pSrc = rArray.pData;
+ for( UINT32 i = 0; i < pSrc->size(); i++ )
+ {
+ SbxVarEntryPtr pSrcRef = (*pSrc)[i];
+ const SbxVariable* pSrc_ = *pSrcRef;
+ if( !pSrc_ )
+ continue;
+ SbxVarEntryPtr pDstRef = new SbxVarEntry;
+ *((SbxVariableRef*) pDstRef) = *((SbxVariableRef*) pSrcRef);
+ if( pSrcRef->pAlias )
+ pDstRef->pAlias = new XubString( *pSrcRef->pAlias );
+ if( eType != SbxVARIANT )
+ // Keine Objekte konvertieren
+ if( eType != SbxOBJECT || pSrc_->GetClass() != SbxCLASS_OBJECT )
+ ((SbxVariable*) pSrc_)->Convert( eType );
+ pData->push_back( pDstRef );
+ }
+ }
+ return *this;
+}
+
+SbxArray::~SbxArray()
+{
+ Clear();
+ delete pData;
+}
+
+SbxDataType SbxArray::GetType() const
+{
+ return (SbxDataType) ( eType | SbxARRAY );
+}
+
+SbxClassType SbxArray::GetClass() const
+{
+ return SbxCLASS_ARRAY;
+}
+
+void SbxArray::Clear()
+{
+ UINT32 nSize = pData->size();
+ for( UINT32 i = 0 ; i < nSize ; i++ )
+ {
+ SbxVarEntry* pEntry = (*pData)[i];
+ delete pEntry;
+ }
+ pData->clear();
+}
+
+UINT32 SbxArray::Count32() const
+{
+ return pData->size();
+}
+
+USHORT SbxArray::Count() const
+{
+ UINT32 nCount = pData->size();
+ DBG_ASSERT( nCount <= SBX_MAXINDEX, "SBX: Array-Index > SBX_MAXINDEX" );
+ return (USHORT)nCount;
+}
+
+SbxVariableRef& SbxArray::GetRef32( UINT32 nIdx )
+{
+ // Array ggf. vergroessern
+ DBG_ASSERT( nIdx <= SBX_MAXINDEX32, "SBX: Array-Index > SBX_MAXINDEX32" );
+ // Very Hot Fix
+ if( nIdx > SBX_MAXINDEX32 )
+ {
+ SetError( SbxERR_BOUNDS );
+ nIdx = 0;
+ }
+ while( pData->size() <= nIdx )
+ {
+ const SbxVarEntryPtr p = new SbxVarEntry;
+ pData->push_back( p );
+ }
+ return *((*pData)[nIdx]);
+}
+
+SbxVariableRef& SbxArray::GetRef( USHORT nIdx )
+{
+ // Array ggf. vergroessern
+ DBG_ASSERT( nIdx <= SBX_MAXINDEX, "SBX: Array-Index > SBX_MAXINDEX" );
+ // Very Hot Fix
+ if( nIdx > SBX_MAXINDEX )
+ {
+ SetError( SbxERR_BOUNDS );
+ nIdx = 0;
+ }
+ while( pData->size() <= nIdx )
+ {
+ const SbxVarEntryPtr p = new SbxVarEntry;
+ pData->push_back( p );
+ }
+ return *((*pData)[nIdx]);
+}
+
+SbxVariable* SbxArray::Get32( UINT32 nIdx )
+{
+ if( !CanRead() )
+ {
+ SetError( SbxERR_PROP_WRITEONLY );
+ return NULL;
+ }
+ SbxVariableRef& rRef = GetRef32( nIdx );
+
+ if ( !rRef.Is() )
+ rRef = new SbxVariable( eType );
+#ifdef DBG_UTIL
+ else
+ DBG_CHKOBJ( rRef, SbxBase, 0 );
+#endif
+
+ return rRef;
+}
+
+SbxVariable* SbxArray::Get( USHORT nIdx )
+{
+ if( !CanRead() )
+ {
+ SetError( SbxERR_PROP_WRITEONLY );
+ return NULL;
+ }
+ SbxVariableRef& rRef = GetRef( nIdx );
+
+ if ( !rRef.Is() )
+ rRef = new SbxVariable( eType );
+#ifdef DBG_UTIL
+ else
+ DBG_CHKOBJ( rRef, SbxBase, 0 );
+#endif
+
+ return rRef;
+}
+
+void SbxArray::Put32( SbxVariable* pVar, UINT32 nIdx )
+{
+ if( !CanWrite() )
+ SetError( SbxERR_PROP_READONLY );
+ else
+ {
+ if( pVar )
+ if( eType != SbxVARIANT )
+ // Keine Objekte konvertieren
+ if( eType != SbxOBJECT || pVar->GetClass() != SbxCLASS_OBJECT )
+ pVar->Convert( eType );
+ SbxVariableRef& rRef = GetRef32( nIdx );
+ if( (SbxVariable*) rRef != pVar )
+ {
+ rRef = pVar;
+ SetFlag( SBX_MODIFIED );
+ }
+ }
+}
+
+void SbxArray::Put( SbxVariable* pVar, USHORT nIdx )
+{
+ if( !CanWrite() )
+ SetError( SbxERR_PROP_READONLY );
+ else
+ {
+ if( pVar )
+ if( eType != SbxVARIANT )
+ // Keine Objekte konvertieren
+ if( eType != SbxOBJECT || pVar->GetClass() != SbxCLASS_OBJECT )
+ pVar->Convert( eType );
+ SbxVariableRef& rRef = GetRef( nIdx );
+ if( (SbxVariable*) rRef != pVar )
+ {
+ rRef = pVar;
+ SetFlag( SBX_MODIFIED );
+ }
+ }
+}
+
+const XubString& SbxArray::GetAlias( USHORT nIdx )
+{
+ if( !CanRead() )
+ {
+ SetError( SbxERR_PROP_WRITEONLY );
+ return String::EmptyString();
+ }
+ SbxVarEntry& rRef = (SbxVarEntry&) GetRef( nIdx );
+
+ if ( !rRef.pAlias )
+ return String::EmptyString();
+#ifdef DBG_UTIL
+ else
+ DBG_CHKOBJ( rRef, SbxBase, 0 );
+#endif
+
+ return *rRef.pAlias;
+}
+
+void SbxArray::PutAlias( const XubString& rAlias, USHORT nIdx )
+{
+ if( !CanWrite() )
+ SetError( SbxERR_PROP_READONLY );
+ else
+ {
+ SbxVarEntry& rRef = (SbxVarEntry&) GetRef( nIdx );
+ if( !rRef.pAlias )
+ rRef.pAlias = new XubString( rAlias );
+ else
+ *rRef.pAlias = rAlias;
+ }
+}
+
+void SbxArray::Insert32( SbxVariable* pVar, UINT32 nIdx )
+{
+ DBG_ASSERT( pData->size() <= SBX_MAXINDEX32, "SBX: Array wird zu gross" );
+ if( pData->size() > SBX_MAXINDEX32 )
+ return;
+ SbxVarEntryPtr p = new SbxVarEntry;
+ *((SbxVariableRef*) p) = pVar;
+ SbxVarEntryPtrVector::size_type nSize = pData->size();
+ if( nIdx > nSize )
+ nIdx = nSize;
+ if( eType != SbxVARIANT && pVar )
+ (*p)->Convert( eType );
+ if( nIdx == nSize )
+ {
+ pData->push_back( p );
+ }
+ else
+ {
+ pData->insert( pData->begin() + nIdx, p );
+ }
+ SetFlag( SBX_MODIFIED );
+}
+
+void SbxArray::Insert( SbxVariable* pVar, USHORT nIdx )
+{
+ DBG_ASSERT( pData->size() <= 0x3FF0, "SBX: Array wird zu gross" );
+ if( pData->size() > 0x3FF0 )
+ return;
+ Insert32( pVar, nIdx );
+}
+
+void SbxArray::Remove32( UINT32 nIdx )
+{
+ if( nIdx < pData->size() )
+ {
+ SbxVariableRef* pRef = (*pData)[nIdx];
+ pData->erase( pData->begin() + nIdx );
+ delete pRef;
+ SetFlag( SBX_MODIFIED );
+ }
+}
+
+void SbxArray::Remove( USHORT nIdx )
+{
+ if( nIdx < pData->size() )
+ {
+ SbxVariableRef* pRef = (*pData)[nIdx];
+ pData->erase( pData->begin() + nIdx );
+ delete pRef;
+ SetFlag( SBX_MODIFIED );
+ }
+}
+
+void SbxArray::Remove( SbxVariable* pVar )
+{
+ if( pVar )
+ {
+ for( UINT32 i = 0; i < pData->size(); i++ )
+ {
+ SbxVariableRef* pRef = (*pData)[i];
+ // SbxVariableRef* pRef = pData->GetObject( i );
+ if( *pRef == pVar )
+ {
+ Remove32( i ); break;
+ }
+ }
+ }
+}
+
+// Uebernahme der Daten aus dem uebergebenen Array, wobei
+// gleichnamige Variable ueberschrieben werden.
+
+void SbxArray::Merge( SbxArray* p )
+{
+ if( p )
+ {
+ UINT32 nSize = p->Count();
+ for( UINT32 i = 0; i < nSize; i++ )
+ {
+ SbxVarEntryPtr pRef1 = (*(p->pData))[i];
+ // Ist das Element by name schon drin?
+ // Dann ueberschreiben!
+ SbxVariable* pVar = *pRef1;
+ if( pVar )
+ {
+ XubString aName = pVar->GetName();
+ USHORT nHash = pVar->GetHashCode();
+ for( UINT32 j = 0; j < pData->size(); j++ )
+ {
+ SbxVariableRef* pRef2 = (*pData)[j];
+ if( (*pRef2)->GetHashCode() == nHash
+ && (*pRef2)->GetName().EqualsIgnoreCaseAscii( aName ) )
+ {
+ *pRef2 = pVar; pRef1 = NULL;
+ break;
+ }
+ }
+ if( pRef1 )
+ {
+ SbxVarEntryPtr pRef = new SbxVarEntry;
+ const SbxVarEntryPtr pTemp = pRef;
+ pData->push_back( pTemp );
+ *((SbxVariableRef*) pRef) = *((SbxVariableRef*) pRef1);
+ if( pRef1->pAlias )
+ pRef->pAlias = new XubString( *pRef1->pAlias );
+ }
+ }
+ }
+ }
+}
+
+// Suchen eines Elements ueber die Userdaten. Falls ein Element
+// ein Objekt ist, wird dieses ebenfalls durchsucht.
+
+SbxVariable* SbxArray::FindUserData( UINT32 nData )
+{
+ SbxVariable* p = NULL;
+ for( UINT32 i = 0; i < pData->size(); i++ )
+ {
+ SbxVariableRef* pRef = (*pData)[i];
+ SbxVariable* pVar = *pRef;
+ if( pVar )
+ {
+ if( pVar->IsVisible() && pVar->GetUserData() == nData )
+ {
+ p = pVar;
+ p->ResetFlag( SBX_EXTFOUND );
+ break; // JSM 06.10.95
+ }
+ // Haben wir ein Array/Objekt mit Extended Search?
+ else if( pVar->IsSet( SBX_EXTSEARCH ) )
+ {
+ switch( pVar->GetClass() )
+ {
+ case SbxCLASS_OBJECT:
+ {
+ // Objekte duerfen ihren Parent nicht durchsuchen
+ USHORT nOld = pVar->GetFlags();
+ pVar->ResetFlag( SBX_GBLSEARCH );
+ p = ((SbxObject*) pVar)->FindUserData( nData );
+ pVar->SetFlags( nOld );
+ break;
+ }
+ case SbxCLASS_ARRAY:
+ p = ((SbxArray*) pVar)->FindUserData( nData );
+ break;
+ default: break;
+ }
+ if( p )
+ {
+ p->SetFlag( SBX_EXTFOUND );
+ break;
+ }
+ }
+ }
+ }
+ return p;
+}
+
+// Suchen eines Elements ueber den Namen und den Typ. Falls ein Element
+// ein Objekt ist, wird dieses ebenfalls durchsucht.
+
+SbxVariable* SbxArray::Find( const XubString& rName, SbxClassType t )
+{
+ SbxVariable* p = NULL;
+ UINT32 nCount = pData->size();
+ if( !nCount )
+ return NULL;
+ BOOL bExtSearch = IsSet( SBX_EXTSEARCH );
+ USHORT nHash = SbxVariable::MakeHashCode( rName );
+ for( UINT32 i = 0; i < nCount; i++ )
+ {
+ SbxVariableRef* pRef = (*pData)[i];
+ SbxVariable* pVar = *pRef;
+ if( pVar && pVar->IsVisible() )
+ {
+ // Die ganz sichere Suche klappt auch, wenn es
+ // keinen Hascode gibt!
+ USHORT nVarHash = pVar->GetHashCode();
+ if( ( !nVarHash || nVarHash == nHash )
+ && ( t == SbxCLASS_DONTCARE || pVar->GetClass() == t )
+ && ( pVar->GetName().EqualsIgnoreCaseAscii( rName ) ) )
+ {
+ p = pVar;
+ p->ResetFlag( SBX_EXTFOUND );
+ break;
+ }
+ // Haben wir ein Array/Objekt mit Extended Search?
+ else if( bExtSearch && pVar->IsSet( SBX_EXTSEARCH ) )
+ {
+ switch( pVar->GetClass() )
+ {
+ case SbxCLASS_OBJECT:
+ {
+ // Objekte duerfen ihren Parent nicht durchsuchen
+ USHORT nOld = pVar->GetFlags();
+ pVar->ResetFlag( SBX_GBLSEARCH );
+ p = ((SbxObject*) pVar)->Find( rName, t );
+ pVar->SetFlags( nOld );
+ break;
+ }
+ case SbxCLASS_ARRAY:
+ p = ((SbxArray*) pVar)->Find( rName, t );
+ break;
+ default: break;
+ }
+ if( p )
+ {
+ p->SetFlag( SBX_EXTFOUND );
+ break;
+ }
+ }
+ }
+ }
+ return p;
+}
+
+BOOL SbxArray::LoadData( SvStream& rStrm, USHORT nVer )
+{
+ UINT16 nElem;
+ Clear();
+ BOOL bRes = TRUE;
+ USHORT f = nFlags;
+ nFlags |= SBX_WRITE;
+ rStrm >> nElem;
+ nElem &= 0x7FFF;
+ for( UINT32 n = 0; n < nElem; n++ )
+ {
+ UINT16 nIdx;
+ rStrm >> nIdx;
+ SbxVariable* pVar = (SbxVariable*) Load( rStrm );
+ if( pVar )
+ {
+ SbxVariableRef& rRef = GetRef( nIdx );
+ rRef = pVar;
+ }
+ else
+ {
+ bRes = FALSE; break;
+ }
+ }
+ if( bRes )
+ bRes = LoadPrivateData( rStrm, nVer );
+ nFlags = f;
+ return bRes;
+}
+
+BOOL SbxArray::StoreData( SvStream& rStrm ) const
+{
+ UINT32 nElem = 0;
+ UINT32 n;
+ // Welche Elemente sind ueberhaupt definiert?
+ for( n = 0; n < pData->size(); n++ )
+ {
+ SbxVariableRef* pRef = (*pData)[n];
+ SbxVariable* p = *pRef;
+ if( p && !( p->GetFlags() & SBX_DONTSTORE ) )
+ nElem++;
+ }
+ rStrm << (UINT16) nElem;
+ for( n = 0; n < pData->size(); n++ )
+ {
+ SbxVariableRef* pRef = (*pData)[n];
+ SbxVariable* p = *pRef;
+ if( p && !( p->GetFlags() & SBX_DONTSTORE ) )
+ {
+ rStrm << (UINT16) n;
+ if( !p->Store( rStrm ) )
+ return FALSE;
+ }
+ }
+ return StorePrivateData( rStrm );
+}
+
+// #100883 Method to set method directly to parameter array
+void SbxArray::PutDirect( SbxVariable* pVar, UINT32 nIdx )
+{
+ SbxVariableRef& rRef = GetRef32( nIdx );
+ rRef = pVar;
+}
+
+
+//////////////////////////////////////////////////////////////////////////
+//
+// SbxArray
+//
+//////////////////////////////////////////////////////////////////////////
+
+SbxDimArray::SbxDimArray( SbxDataType t ) : SbxArray( t ), mbHasFixedSize( false )
+{
+ pFirst = pLast = NULL;
+ nDim = 0;
+}
+
+SbxDimArray::SbxDimArray( const SbxDimArray& rArray )
+ : SvRefBase( rArray ), SbxArray( rArray.eType )
+{
+ pFirst = pLast = NULL;
+ nDim = 0;
+ *this = rArray;
+}
+
+SbxDimArray& SbxDimArray::operator=( const SbxDimArray& rArray )
+{
+ if( &rArray != this )
+ {
+ SbxArray::operator=( (const SbxArray&) rArray );
+ SbxDim* p = rArray.pFirst;
+ while( p )
+ {
+ AddDim32( p->nLbound, p->nUbound );
+ p = p->pNext;
+ }
+ this->mbHasFixedSize = rArray.mbHasFixedSize;
+ }
+ return *this;
+}
+
+SbxDimArray::~SbxDimArray()
+{
+ Clear();
+}
+
+void SbxDimArray::Clear()
+{
+ SbxDim* p = pFirst;
+ while( p )
+ {
+ SbxDim* q = p->pNext;
+ delete p;
+ p = q;
+ }
+ pFirst = pLast = NULL;
+ nDim = 0;
+}
+
+// Dimension hinzufuegen
+
+void SbxDimArray::AddDimImpl32( INT32 lb, INT32 ub, BOOL bAllowSize0 )
+{
+ SbxError eRes = SbxERR_OK;
+ if( ub < lb && !bAllowSize0 )
+ {
+ eRes = SbxERR_BOUNDS;
+ ub = lb;
+ }
+ SbxDim* p = new SbxDim;
+ p->nLbound = lb;
+ p->nUbound = ub;
+ p->nSize = ub - lb + 1;
+ p->pNext = NULL;
+ if( !pFirst )
+ pFirst = pLast = p;
+ else
+ pLast->pNext = p, pLast = p;
+ nDim++;
+ if( eRes )
+ SetError( eRes );
+}
+
+void SbxDimArray::AddDim( short lb, short ub )
+{
+ AddDimImpl32( lb, ub, FALSE );
+}
+
+void SbxDimArray::unoAddDim( short lb, short ub )
+{
+ AddDimImpl32( lb, ub, TRUE );
+}
+
+void SbxDimArray::AddDim32( INT32 lb, INT32 ub )
+{
+ AddDimImpl32( lb, ub, FALSE );
+}
+
+void SbxDimArray::unoAddDim32( INT32 lb, INT32 ub )
+{
+ AddDimImpl32( lb, ub, TRUE );
+}
+
+
+// Dimensionsdaten auslesen
+
+BOOL SbxDimArray::GetDim32( INT32 n, INT32& rlb, INT32& rub ) const
+{
+ if( n < 1 || n > nDim )
+ {
+ SetError( SbxERR_BOUNDS ); rub = rlb = 0; return FALSE;
+ }
+ SbxDim* p = pFirst;
+ while( --n )
+ p = p->pNext;
+ rub = p->nUbound;
+ rlb = p->nLbound;
+ return TRUE;
+}
+
+BOOL SbxDimArray::GetDim( short n, short& rlb, short& rub ) const
+{
+ INT32 rlb32, rub32;
+ BOOL bRet = GetDim32( n, rlb32, rub32 );
+ if( bRet )
+ {
+ if( rlb32 < -SBX_MAXINDEX || rub32 > SBX_MAXINDEX )
+ {
+ SetError( SbxERR_BOUNDS );
+ return FALSE;
+ }
+ rub = (short)rub32;
+ rlb = (short)rlb32;
+ }
+ return bRet;
+}
+
+// Element-Ptr anhand einer Index-Liste
+
+UINT32 SbxDimArray::Offset32( const INT32* pIdx )
+{
+ UINT32 nPos = 0;
+ for( SbxDim* p = pFirst; p; p = p->pNext )
+ {
+ INT32 nIdx = *pIdx++;
+ if( nIdx < p->nLbound || nIdx > p->nUbound )
+ {
+ nPos = (UINT32)SBX_MAXINDEX32 + 1; break;
+ }
+ nPos = nPos * p->nSize + nIdx - p->nLbound;
+ }
+ if( nDim == 0 || nPos > SBX_MAXINDEX32 )
+ {
+ SetError( SbxERR_BOUNDS ); nPos = 0;
+ }
+ return nPos;
+}
+
+USHORT SbxDimArray::Offset( const short* pIdx )
+{
+ long nPos = 0;
+ for( SbxDim* p = pFirst; p; p = p->pNext )
+ {
+ short nIdx = *pIdx++;
+ if( nIdx < p->nLbound || nIdx > p->nUbound )
+ {
+ nPos = SBX_MAXINDEX + 1; break;
+ }
+ nPos = nPos * p->nSize + nIdx - p->nLbound;
+ }
+ if( nDim == 0 || nPos > SBX_MAXINDEX )
+ {
+ SetError( SbxERR_BOUNDS ); nPos = 0;
+ }
+ return (USHORT) nPos;
+}
+
+SbxVariableRef& SbxDimArray::GetRef( const short* pIdx )
+{
+ return SbxArray::GetRef( Offset( pIdx ) );
+}
+
+SbxVariable* SbxDimArray::Get( const short* pIdx )
+{
+ return SbxArray::Get( Offset( pIdx ) );
+}
+
+void SbxDimArray::Put( SbxVariable* p, const short* pIdx )
+{
+ SbxArray::Put( p, Offset( pIdx ) );
+}
+
+SbxVariableRef& SbxDimArray::GetRef32( const INT32* pIdx )
+{
+ return SbxArray::GetRef32( Offset32( pIdx ) );
+}
+
+SbxVariable* SbxDimArray::Get32( const INT32* pIdx )
+{
+ return SbxArray::Get32( Offset32( pIdx ) );
+}
+
+void SbxDimArray::Put32( SbxVariable* p, const INT32* pIdx )
+{
+ SbxArray::Put32( p, Offset32( pIdx ) );
+}
+
+
+// Element-Nr anhand eines Parameter-Arrays
+
+UINT32 SbxDimArray::Offset32( SbxArray* pPar )
+{
+ if( nDim == 0 || !pPar || ( ( nDim != ( pPar->Count() - 1 ) ) && SbiRuntime::isVBAEnabled() ) )
+ {
+ SetError( SbxERR_BOUNDS ); return 0;
+ }
+ UINT32 nPos = 0;
+ USHORT nOff = 1; // Nicht Element 0!
+ for( SbxDim* p = pFirst; p && !IsError(); p = p->pNext )
+ {
+ INT32 nIdx = pPar->Get( nOff++ )->GetLong();
+ if( nIdx < p->nLbound || nIdx > p->nUbound )
+ {
+ nPos = (UINT32) SBX_MAXINDEX32+1; break;
+ }
+ nPos = nPos * p->nSize + nIdx - p->nLbound;
+ }
+ if( nPos > (UINT32) SBX_MAXINDEX32 )
+ {
+ SetError( SbxERR_BOUNDS ); nPos = 0;
+ }
+ return nPos;
+}
+
+USHORT SbxDimArray::Offset( SbxArray* pPar )
+{
+ UINT32 nPos = Offset32( pPar );
+ if( nPos > (long) SBX_MAXINDEX )
+ {
+ SetError( SbxERR_BOUNDS ); nPos = 0;
+ }
+ return (USHORT) nPos;
+}
+
+SbxVariableRef& SbxDimArray::GetRef( SbxArray* pPar )
+{
+ return SbxArray::GetRef32( Offset32( pPar ) );
+}
+
+SbxVariable* SbxDimArray::Get( SbxArray* pPar )
+{
+ return SbxArray::Get32( Offset32( pPar ) );
+}
+
+void SbxDimArray::Put( SbxVariable* p, SbxArray* pPar )
+{
+ SbxArray::Put32( p, Offset32( pPar ) );
+}
+
+BOOL SbxDimArray::LoadData( SvStream& rStrm, USHORT nVer )
+{
+ short nDimension;
+ rStrm >> nDimension;
+ for( short i = 0; i < nDimension && rStrm.GetError() == SVSTREAM_OK; i++ )
+ {
+ INT16 lb, ub;
+ rStrm >> lb >> ub;
+ AddDim( lb, ub );
+ }
+ return SbxArray::LoadData( rStrm, nVer );
+}
+
+BOOL SbxDimArray::StoreData( SvStream& rStrm ) const
+{
+ rStrm << (INT16) nDim;
+ for( short i = 0; i < nDim; i++ )
+ {
+ short lb, ub;
+ GetDim( i, lb, ub );
+ rStrm << (INT16) lb << (INT16) ub;
+ }
+ return SbxArray::StoreData( rStrm );
+}
+
diff --git a/basic/source/sbx/sbxbase.cxx b/basic/source/sbx/sbxbase.cxx
new file mode 100644
index 000000000000..b1815228cd99
--- /dev/null
+++ b/basic/source/sbx/sbxbase.cxx
@@ -0,0 +1,462 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+
+
+#include <tools/shl.hxx>
+#include <tools/stream.hxx>
+
+#include <basic/sbx.hxx>
+#include <basic/sbxfac.hxx>
+#include <basic/sbxbase.hxx>
+
+// AppData-Struktur fuer SBX:
+
+SV_IMPL_PTRARR(SbxParams,SbxParamInfo*);
+SV_IMPL_PTRARR(SbxFacs,SbxFactory*);
+
+TYPEINIT0(SbxBase)
+
+// SBX-Daten anfordern oder ggf. anlegen
+// wir legen den Bereich einfach an und verzichten auf die Freigabe!
+
+SbxAppData* GetSbxData_Impl()
+{
+#ifndef DOS
+ SbxAppData** ppData = (SbxAppData**) ::GetAppData( SHL_SBX );
+ SbxAppData* p = *ppData;
+ if( !p )
+ p = *ppData = new SbxAppData;
+ return p;
+#else
+ SbxAppData** ppData;
+ SbxAppData* p;
+ p = *ppData = new SbxAppData;
+ return p;
+#endif
+}
+
+SbxAppData::~SbxAppData()
+{
+ if( pBasicFormater )
+ delete pBasicFormater;
+}
+
+
+//////////////////////////////// SbxBase /////////////////////////////////
+
+DBG_NAME(SbxBase);
+
+SbxBase::SbxBase()
+{
+ DBG_CTOR( SbxBase, 0 );
+ nFlags = SBX_READWRITE;
+}
+
+SbxBase::SbxBase( const SbxBase& r )
+ : SvRefBase( r )
+{
+ DBG_CTOR( SbxBase, 0 );
+ nFlags = r.nFlags;
+}
+
+SbxBase::~SbxBase()
+{
+ DBG_DTOR(SbxBase,0);
+}
+
+SbxBase& SbxBase::operator=( const SbxBase& r )
+{
+ DBG_CHKTHIS( SbxBase, 0 );
+ nFlags = r.nFlags;
+ return *this;
+}
+
+SbxDataType SbxBase::GetType() const
+{
+ DBG_CHKTHIS( SbxBase, 0 );
+ return SbxEMPTY;
+}
+
+SbxClassType SbxBase::GetClass() const
+{
+ DBG_CHKTHIS( SbxBase, 0 );
+ return SbxCLASS_DONTCARE;
+}
+
+void SbxBase::Clear()
+{
+ DBG_CHKTHIS( SbxBase, 0 );
+}
+
+BOOL SbxBase::IsFixed() const
+{
+ DBG_CHKTHIS( SbxBase, 0 );
+ return IsSet( SBX_FIXED );
+}
+
+void SbxBase::SetModified( BOOL b )
+{
+ DBG_CHKTHIS( SbxBase, 0 );
+ if( IsSet( SBX_NO_MODIFY ) )
+ return;
+ if( b )
+ SetFlag( SBX_MODIFIED );
+ else
+ ResetFlag( SBX_MODIFIED );
+}
+
+SbxError SbxBase::GetError()
+{
+ return GetSbxData_Impl()->eSbxError;
+}
+
+void SbxBase::SetError( SbxError e )
+{
+ SbxAppData* p = GetSbxData_Impl();
+ if( e && p->eSbxError == SbxERR_OK )
+ p->eSbxError = e;
+}
+
+BOOL SbxBase::IsError()
+{
+ return BOOL( GetSbxData_Impl()->eSbxError != SbxERR_OK );
+}
+
+void SbxBase::ResetError()
+{
+ GetSbxData_Impl()->eSbxError = SbxERR_OK;
+}
+
+void SbxBase::AddFactory( SbxFactory* pFac )
+{
+ SbxAppData* p = GetSbxData_Impl();
+ const SbxFactory* pTemp = pFac;
+
+ // AB, 6.3.96: HandleLast-Flag beruecksichtigen
+ USHORT nPos = p->aFacs.Count(); // Einfuege-Position
+ if( !pFac->IsHandleLast() ) // Nur, wenn nicht selbst HandleLast
+ {
+ // Neue Factory vor Factories mit HandleLast einordnen
+ while( nPos > 0 &&
+ (static_cast<SbxFactory*>(p->aFacs.GetObject( nPos-1 )))->IsHandleLast() )
+ nPos--;
+ }
+ p->aFacs.Insert( pTemp, nPos );
+}
+
+void SbxBase::RemoveFactory( SbxFactory* pFac )
+{
+ SbxAppData* p = GetSbxData_Impl();
+ for( USHORT i = 0; i < p->aFacs.Count(); i++ )
+ {
+ if( p->aFacs.GetObject( i ) == pFac )
+ {
+ p->aFacs.Remove( i, 1 ); break;
+ }
+ }
+}
+
+
+SbxBase* SbxBase::Create( UINT16 nSbxId, UINT32 nCreator )
+{
+ // #91626: Hack to skip old Basic dialogs
+ // Problem: There does not exist a factory any more,
+ // so we have to create a dummy SbxVariable instead
+ if( nSbxId == 0x65 ) // Dialog Id
+ return new SbxVariable;
+
+ XubString aEmptyStr;
+ if( nCreator == SBXCR_SBX )
+ switch( nSbxId )
+ {
+ case SBXID_VALUE: return new SbxValue;
+ case SBXID_VARIABLE: return new SbxVariable;
+ case SBXID_ARRAY: return new SbxArray;
+ case SBXID_DIMARRAY: return new SbxDimArray;
+ case SBXID_OBJECT: return new SbxObject( aEmptyStr );
+ case SBXID_COLLECTION: return new SbxCollection( aEmptyStr );
+ case SBXID_FIXCOLLECTION:
+ return new SbxStdCollection( aEmptyStr, aEmptyStr );
+ case SBXID_METHOD: return new SbxMethod( aEmptyStr, SbxEMPTY );
+ case SBXID_PROPERTY: return new SbxProperty( aEmptyStr, SbxEMPTY );
+ }
+ // Unbekanter Typ: ber die Factories gehen!
+ SbxAppData* p = GetSbxData_Impl();
+ SbxBase* pNew = NULL;
+ for( USHORT i = 0; i < p->aFacs.Count(); i++ )
+ {
+ SbxFactory* pFac = p->aFacs.GetObject( i );
+ pNew = pFac->Create( nSbxId, nCreator );
+ if( pNew )
+ break;
+ }
+#ifdef DBG_UTIL
+ if( !pNew )
+ {
+ ByteString aMsg( "SBX: Keine Factory fuer SBX-ID " );
+ aMsg += ByteString::CreateFromInt32(nSbxId);
+ DbgError( aMsg.GetBuffer() );
+ }
+#endif
+ return pNew;
+}
+
+SbxObject* SbxBase::CreateObject( const XubString& rClass )
+{
+ SbxAppData* p = GetSbxData_Impl();
+ SbxObject* pNew = NULL;
+ for( USHORT i = 0; i < p->aFacs.Count(); i++ )
+ {
+ pNew = p->aFacs.GetObject( i )->CreateObject( rClass );
+ if( pNew )
+ break;
+ }
+#ifdef DBG_UTIL
+ if( !pNew )
+ {
+ ByteString aMsg( "SBX: Keine Factory fuer Objektklasse " );
+ ByteString aClassStr( (const UniString&)rClass, RTL_TEXTENCODING_ASCII_US );
+ aMsg += aClassStr;
+ DbgError( (const char*)aMsg.GetBuffer() );
+ }
+#endif
+ return pNew;
+}
+
+static BOOL bStaticEnableBroadcasting = TRUE;
+
+// Sbx-Loesung als Ersatz fuer SfxBroadcaster::Enable()
+void SbxBase::StaticEnableBroadcasting( BOOL bEnable )
+{
+ bStaticEnableBroadcasting = bEnable;
+}
+
+BOOL SbxBase::StaticIsEnabledBroadcasting( void )
+{
+ return bStaticEnableBroadcasting;
+}
+
+
+SbxBase* SbxBase::Load( SvStream& rStrm )
+{
+ UINT16 nSbxId, nFlags, nVer;
+ UINT32 nCreator, nSize;
+ rStrm >> nCreator >> nSbxId >> nFlags >> nVer;
+
+ // Eine Dummheit meinerseits korrigieren:
+ if( nFlags & SBX_RESERVED )
+ nFlags = ( nFlags & ~SBX_RESERVED ) | SBX_GBLSEARCH;
+
+ ULONG nOldPos = rStrm.Tell();
+ rStrm >> nSize;
+ SbxBase* p = Create( nSbxId, nCreator );
+ if( p )
+ {
+ p->nFlags = nFlags;
+ if( p->LoadData( rStrm, nVer ) )
+ {
+ ULONG nNewPos = rStrm.Tell();
+ nOldPos += nSize;
+ DBG_ASSERT( nOldPos >= nNewPos, "SBX: Zu viele Daten eingelesen" );
+ if( nOldPos != nNewPos )
+ rStrm.Seek( nOldPos );
+ if( !p->LoadCompleted() )
+ {
+ // Loeschen des Objekts
+ SbxBaseRef aRef( p );
+ p = NULL;
+ }
+ }
+ else
+ {
+ rStrm.SetError( SVSTREAM_FILEFORMAT_ERROR );
+ // Loeschen des Objekts
+ SbxBaseRef aRef( p );
+ p = NULL;
+ }
+ }
+ else
+ rStrm.SetError( SVSTREAM_FILEFORMAT_ERROR );
+ return p;
+}
+
+// Sbx-Objekt im Stream ueberspringen
+void SbxBase::Skip( SvStream& rStrm )
+{
+ UINT16 nSbxId, nFlags, nVer;
+ UINT32 nCreator, nSize;
+ rStrm >> nCreator >> nSbxId >> nFlags >> nVer;
+
+ ULONG nStartPos = rStrm.Tell();
+ rStrm >> nSize;
+
+ rStrm.Seek( nStartPos + nSize );
+}
+
+BOOL SbxBase::Store( SvStream& rStrm )
+{
+ DBG_CHKTHIS( SbxBase, 0 );
+ if( !( nFlags & SBX_DONTSTORE ) )
+ {
+ rStrm << (UINT32) GetCreator()
+ << (UINT16) GetSbxId()
+ << (UINT16) GetFlags()
+ << (UINT16) GetVersion();
+ ULONG nOldPos = rStrm.Tell();
+ rStrm << (UINT32) 0L;
+ BOOL bRes = StoreData( rStrm );
+ ULONG nNewPos = rStrm.Tell();
+ rStrm.Seek( nOldPos );
+ rStrm << (UINT32) ( nNewPos - nOldPos );
+ rStrm.Seek( nNewPos );
+ if( rStrm.GetError() != SVSTREAM_OK )
+ bRes = FALSE;
+ if( bRes )
+ bRes = StoreCompleted();
+ return bRes;
+ }
+ else
+ return TRUE;
+}
+
+BOOL SbxBase::LoadData( SvStream&, USHORT )
+{
+ DBG_CHKTHIS( SbxBase, 0 );
+ return FALSE;
+}
+
+BOOL SbxBase::StoreData( SvStream& ) const
+{
+ DBG_CHKTHIS( SbxBase, 0 );
+ return FALSE;
+}
+
+BOOL SbxBase::LoadPrivateData( SvStream&, USHORT )
+{
+ DBG_CHKTHIS( SbxBase, 0 );
+ return TRUE;
+}
+
+BOOL SbxBase::StorePrivateData( SvStream& ) const
+{
+ DBG_CHKTHIS( SbxBase, 0 );
+ return TRUE;
+}
+
+BOOL SbxBase::LoadCompleted()
+{
+ DBG_CHKTHIS( SbxBase, 0 );
+ return TRUE;
+}
+
+BOOL SbxBase::StoreCompleted()
+{
+ DBG_CHKTHIS( SbxBase, 0 );
+ return TRUE;
+}
+
+//////////////////////////////// SbxFactory ////////////////////////////////
+
+SbxBase* SbxFactory::Create( UINT16, UINT32 )
+{
+ return NULL;
+}
+
+SbxObject* SbxFactory::CreateObject( const XubString& )
+{
+ return NULL;
+}
+
+///////////////////////////////// SbxInfo //////////////////////////////////
+
+SbxInfo::~SbxInfo()
+{}
+
+void SbxInfo::AddParam
+ ( const XubString& rName, SbxDataType eType, USHORT nFlags )
+{
+ const SbxParamInfo* p = new SbxParamInfo( rName, eType, nFlags );
+ aParams.Insert( p, aParams.Count() );
+}
+
+void SbxInfo::AddParam( const SbxParamInfo& r )
+{
+ const SbxParamInfo* p = new SbxParamInfo
+ ( r.aName, r.eType, r.nFlags, r.aTypeRef );
+ aParams.Insert( p, aParams.Count() );
+}
+
+const SbxParamInfo* SbxInfo::GetParam( USHORT n ) const
+{
+ if( n < 1 || n > aParams.Count() )
+ return NULL;
+ else
+ return aParams.GetObject( n-1 );
+}
+
+BOOL SbxInfo::LoadData( SvStream& rStrm, USHORT nVer )
+{
+ aParams.Remove( 0, aParams.Count() );
+ UINT16 nParam;
+ rStrm.ReadByteString( aComment, RTL_TEXTENCODING_ASCII_US );
+ rStrm.ReadByteString( aHelpFile, RTL_TEXTENCODING_ASCII_US );
+ rStrm >> nHelpId >> nParam;
+ while( nParam-- )
+ {
+ XubString aName;
+ UINT16 nType, nFlags;
+ UINT32 nUserData = 0;
+ rStrm.ReadByteString( aName, RTL_TEXTENCODING_ASCII_US );
+ rStrm >> nType >> nFlags;
+ if( nVer > 1 )
+ rStrm >> nUserData;
+ AddParam( aName, (SbxDataType) nType, nFlags );
+ SbxParamInfo* p = aParams.GetObject( aParams.Count() - 1 );
+ p->nUserData = nUserData;
+ }
+ return TRUE;
+}
+
+BOOL SbxInfo::StoreData( SvStream& rStrm ) const
+{
+ rStrm.WriteByteString( aComment, RTL_TEXTENCODING_ASCII_US );
+ rStrm.WriteByteString( aHelpFile, RTL_TEXTENCODING_ASCII_US );
+ rStrm << nHelpId << aParams.Count();
+ for( USHORT i = 0; i < aParams.Count(); i++ )
+ {
+ SbxParamInfo* p = aParams.GetObject( i );
+ rStrm.WriteByteString( p->aName, RTL_TEXTENCODING_ASCII_US );
+ rStrm << (UINT16) p->eType
+ << (UINT16) p->nFlags
+ << (UINT32) p->nUserData;
+ }
+ return TRUE;
+}
+
diff --git a/basic/source/sbx/sbxbool.cxx b/basic/source/sbx/sbxbool.cxx
new file mode 100644
index 000000000000..3216e401b707
--- /dev/null
+++ b/basic/source/sbx/sbxbool.cxx
@@ -0,0 +1,252 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+#include <tools/errcode.hxx>
+#include <basic/sbx.hxx>
+#include "sbxconv.hxx"
+#include "sbxres.hxx"
+
+// AB 29.10.99 Unicode
+#ifndef _USE_NO_NAMESPACE
+using namespace rtl;
+#endif
+
+enum SbxBOOL ImpGetBool( const SbxValues* p )
+{
+ enum SbxBOOL nRes;
+ switch( +p->eType )
+ {
+ case SbxNULL:
+ SbxBase::SetError( SbxERR_CONVERSION );
+ case SbxEMPTY:
+ nRes = SbxFALSE; break;
+ case SbxCHAR:
+ nRes = p->nChar ? SbxTRUE : SbxFALSE; break;
+ case SbxBYTE:
+ nRes = p->nByte ? SbxTRUE : SbxFALSE; break;
+ case SbxINTEGER:
+ case SbxBOOL:
+ nRes = p->nInteger ? SbxTRUE : SbxFALSE; break;
+ case SbxERROR:
+ case SbxUSHORT:
+ nRes = p->nUShort ? SbxTRUE : SbxFALSE; break;
+ case SbxLONG:
+ nRes = p->nLong ? SbxTRUE : SbxFALSE; break;
+ case SbxULONG:
+ nRes = p->nULong ? SbxTRUE : SbxFALSE; break;
+ case SbxSINGLE:
+ nRes = p->nSingle ? SbxTRUE : SbxFALSE; break;
+ case SbxDATE:
+ case SbxDOUBLE:
+ nRes = p->nDouble ? SbxTRUE : SbxFALSE; break;
+ case SbxDECIMAL:
+ case SbxBYREF | SbxDECIMAL:
+ {
+ double dVal = 0.0;
+ if( p->pDecimal )
+ p->pDecimal->getDouble( dVal );
+ nRes = dVal ? SbxTRUE : SbxFALSE;
+ }
+ break;
+ case SbxSALINT64:
+ nRes = p->nInt64 ? SbxTRUE : SbxFALSE; break;
+ case SbxSALUINT64:
+ nRes = p->uInt64 ? SbxTRUE : SbxFALSE; break;
+ case SbxULONG64:
+ nRes = !!p->nULong64 ? SbxTRUE : SbxFALSE; break;
+ case SbxLONG64:
+ case SbxCURRENCY:
+ nRes = !!p->nLong64 ? SbxTRUE : SbxFALSE; break;
+ case SbxBYREF | SbxSTRING:
+ case SbxSTRING:
+ case SbxLPSTR:
+ nRes = SbxFALSE;
+ if ( p->pOUString )
+ {
+ if( p->pOUString->equalsIgnoreAsciiCase( SbxRes( STRING_TRUE ) ) )
+ nRes = SbxTRUE;
+ else if( p->pOUString->equalsIgnoreAsciiCase( SbxRes( STRING_FALSE ) ) )
+ {
+ // Jetzt kann es noch in eine Zahl konvertierbar sein
+ BOOL bError = TRUE;
+ double n;
+ SbxDataType t;
+ USHORT nLen = 0;
+ if( ImpScan( *p->pOUString, n, t, &nLen ) == SbxERR_OK )
+ {
+ if( nLen == p->pOUString->getLength() )
+ {
+ bError = FALSE;
+ if( n != 0.0 )
+ nRes = SbxTRUE;
+ }
+ }
+ if( bError )
+ SbxBase::SetError( SbxERR_CONVERSION );
+ }
+ }
+ break;
+ case SbxOBJECT:
+ {
+ SbxValue* pVal = PTR_CAST(SbxValue,p->pObj);
+ if( pVal )
+ nRes = pVal->GetBool() ? SbxTRUE : SbxFALSE;
+ else
+ {
+ SbxBase::SetError( SbxERR_NO_OBJECT ); nRes = SbxFALSE;
+ }
+ break;
+ }
+
+ case SbxBYREF | SbxCHAR:
+ nRes = *p->pChar ? SbxTRUE : SbxFALSE; break;
+ case SbxBYREF | SbxBYTE:
+ nRes = *p->pByte ? SbxTRUE : SbxFALSE; break;
+ case SbxBYREF | SbxINTEGER:
+ case SbxBYREF | SbxBOOL:
+ nRes = *p->pInteger ? SbxTRUE : SbxFALSE; break;
+ case SbxBYREF | SbxLONG:
+ nRes = *p->pLong ? SbxTRUE : SbxFALSE; break;
+ case SbxBYREF | SbxULONG:
+ nRes = *p->pULong ? SbxTRUE : SbxFALSE; break;
+ case SbxBYREF | SbxERROR:
+ case SbxBYREF | SbxUSHORT:
+ nRes = *p->pUShort ? SbxTRUE : SbxFALSE; break;
+ case SbxBYREF | SbxSINGLE:
+ nRes = ( *p->pSingle != 0 ) ? SbxTRUE : SbxFALSE; break;
+ case SbxBYREF | SbxDATE:
+ case SbxBYREF | SbxDOUBLE:
+ nRes = ( *p->pDouble != 0 ) ? SbxTRUE : SbxFALSE; break;
+ case SbxBYREF | SbxSALINT64:
+ nRes = ( *p->pnInt64 ) ? SbxTRUE : SbxFALSE; break;
+ case SbxBYREF | SbxSALUINT64:
+ nRes = ( *p->puInt64 ) ? SbxTRUE : SbxFALSE; break;
+ case SbxBYREF | SbxULONG64:
+ nRes = !!*p->pULong64 ? SbxTRUE : SbxFALSE; break;
+ case SbxBYREF | SbxLONG64:
+ case SbxBYREF | SbxCURRENCY:
+ nRes = !!*p->pLong64 ? SbxTRUE : SbxFALSE; break;
+
+ default:
+ SbxBase::SetError( SbxERR_CONVERSION ); nRes = SbxFALSE;
+ }
+ return nRes;
+}
+
+void ImpPutBool( SbxValues* p, INT16 n )
+{
+ if( n )
+ n = SbxTRUE;
+ switch( +p->eType )
+ {
+ case SbxCHAR:
+ p->nChar = (xub_Unicode) n; break;
+ case SbxUINT:
+ p->nByte = (BYTE) n; break;
+ case SbxINTEGER:
+ case SbxBOOL:
+ p->nInteger = n; break;
+ case SbxLONG:
+ p->nLong = n; break;
+ case SbxULONG:
+ p->nULong = (UINT32) n; break;
+ case SbxERROR:
+ case SbxUSHORT:
+ p->nUShort = (UINT16) n; break;
+ case SbxSINGLE:
+ p->nSingle = n; break;
+ case SbxDATE:
+ case SbxDOUBLE:
+ p->nDouble = n; break;
+ case SbxSALINT64:
+ p->nInt64 = n; break;
+ case SbxSALUINT64:
+ p->uInt64 = n; break;
+ case SbxULONG64:
+ p->nULong64.Set( (UINT32)n ); break;
+ case SbxLONG64:
+ case SbxCURRENCY:
+ p->nLong64.Set( (INT32)n ); break;
+ case SbxDECIMAL:
+ case SbxBYREF | SbxDECIMAL:
+ ImpCreateDecimal( p )->setInt( (INT16)n );
+ break;
+
+ case SbxBYREF | SbxSTRING:
+ case SbxSTRING:
+ case SbxLPSTR:
+ if ( !p->pOUString )
+ p->pOUString = new ::rtl::OUString( SbxRes( n ? STRING_TRUE : STRING_FALSE ) );
+ else
+ *p->pOUString = SbxRes( n ? STRING_TRUE : STRING_FALSE );
+ break;
+
+ case SbxOBJECT:
+ {
+ SbxValue* pVal = PTR_CAST(SbxValue,p->pObj);
+ if( pVal )
+ pVal->PutBool( BOOL( n != 0 ) );
+ else
+ SbxBase::SetError( SbxERR_NO_OBJECT );
+ break;
+ }
+ case SbxBYREF | SbxCHAR:
+ *p->pChar = (xub_Unicode) n; break;
+ case SbxBYREF | SbxBYTE:
+ *p->pByte = (BYTE) n; break;
+ case SbxBYREF | SbxINTEGER:
+ case SbxBYREF | SbxBOOL:
+ *p->pInteger = (INT16) n; break;
+ case SbxBYREF | SbxERROR:
+ case SbxBYREF | SbxUSHORT:
+ *p->pUShort = (UINT16) n; break;
+ case SbxBYREF | SbxLONG:
+ *p->pLong = n; break;
+ case SbxBYREF | SbxULONG:
+ *p->pULong = (UINT32) n; break;
+ case SbxBYREF | SbxSINGLE:
+ *p->pSingle = n; break;
+ case SbxBYREF | SbxDATE:
+ case SbxBYREF | SbxDOUBLE:
+ *p->pDouble = n; break;
+ case SbxBYREF | SbxSALINT64:
+ *p->pnInt64 = n; break;
+ case SbxBYREF | SbxSALUINT64:
+ *p->puInt64 = n; break;
+ case SbxBYREF | SbxULONG64:
+ p->pULong64->Set( (UINT32)n ); break;
+ case SbxBYREF | SbxLONG64:
+ case SbxBYREF | SbxCURRENCY:
+ p->pLong64->Set( (INT32)n ); break;
+
+ default:
+ SbxBase::SetError( SbxERR_CONVERSION );
+ }
+}
+
diff --git a/basic/source/sbx/sbxbyte.cxx b/basic/source/sbx/sbxbyte.cxx
new file mode 100644
index 000000000000..e13c63967fc3
--- /dev/null
+++ b/basic/source/sbx/sbxbyte.cxx
@@ -0,0 +1,329 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+#include <tools/errcode.hxx>
+#include <basic/sbx.hxx>
+#include "sbxconv.hxx"
+
+BYTE ImpGetByte( const SbxValues* p )
+{
+ SbxValues aTmp;
+ BYTE nRes;
+start:
+ switch( +p->eType )
+ {
+ case SbxNULL:
+ SbxBase::SetError( SbxERR_CONVERSION );
+ case SbxEMPTY:
+ nRes = 0; break;
+ case SbxCHAR:
+ if( p->nChar > SbxMAXBYTE )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = 0;
+ }
+ else
+ nRes = (BYTE) p->nChar;
+ break;
+ case SbxBYTE:
+ nRes = (BYTE) p->nByte; break;
+ case SbxINTEGER:
+ case SbxBOOL:
+ if( p->nInteger > SbxMAXBYTE )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = SbxMAXBYTE;
+ }
+ else if( p->nInteger < 0 )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = 0;
+ }
+ else
+ nRes = (BYTE) p->nInteger;
+ break;
+ case SbxERROR:
+ case SbxUSHORT:
+ if( p->nUShort > (USHORT) SbxMAXBYTE )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = SbxMAXBYTE;
+ }
+ else
+ nRes = (BYTE) p->nUShort;
+ break;
+ case SbxLONG:
+ if( p->nLong > SbxMAXBYTE )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = SbxMAXBYTE;
+ }
+ else if( p->nLong < 0 )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = 0;
+ }
+ else
+ nRes = (BYTE) p->nLong;
+ break;
+ case SbxULONG:
+ if( p->nULong > SbxMAXBYTE )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = SbxMAXBYTE;
+ }
+ else
+ nRes = (BYTE) p->nULong;
+ break;
+ case SbxSALINT64:
+ if( p->nInt64 > SbxMAXBYTE )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = SbxMAXBYTE;
+ }
+ else if( p->nInt64 < 0 )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = 0;
+ }
+ else
+ nRes = (BYTE) p->nInt64;
+ break;
+ case SbxSALUINT64:
+ if( p->uInt64 > SbxMAXBYTE )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = SbxMAXBYTE;
+ }
+ else
+ nRes = (BYTE) p->uInt64;
+ break;
+ case SbxSINGLE:
+ if( p->nSingle > SbxMAXBYTE )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = SbxMAXBYTE;
+ }
+ else if( p->nSingle < 0 )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = 0;
+ }
+ else
+ nRes = (BYTE) ImpRound( p->nSingle );
+ break;
+ case SbxDATE:
+ case SbxDOUBLE:
+ case SbxLONG64:
+ case SbxULONG64:
+ case SbxCURRENCY:
+ case SbxDECIMAL:
+ case SbxBYREF | SbxDECIMAL:
+ {
+ double dVal;
+ if( p->eType == SbxCURRENCY )
+ dVal = ImpCurrencyToDouble( p->nLong64 );
+ else if( p->eType == SbxLONG64 )
+ dVal = ImpINT64ToDouble( p->nLong64 );
+ else if( p->eType == SbxULONG64 )
+ dVal = ImpUINT64ToDouble( p->nULong64 );
+ else if( p->eType == SbxDECIMAL )
+ {
+ dVal = 0.0;
+ if( p->pDecimal )
+ p->pDecimal->getDouble( dVal );
+ }
+ else
+ dVal = p->nDouble;
+
+ if( dVal > SbxMAXBYTE )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = SbxMAXBYTE;
+ }
+ else if( dVal < 0 )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = 0;
+ }
+ else
+ nRes = (BYTE) ImpRound( dVal );
+ break;
+ }
+ case SbxBYREF | SbxSTRING:
+ case SbxSTRING:
+ case SbxLPSTR:
+ if( !p->pOUString )
+ nRes = 0;
+ else
+ {
+ double d;
+ SbxDataType t;
+ if( ImpScan( *p->pOUString, d, t, NULL ) != SbxERR_OK )
+ nRes = 0;
+ else if( d > SbxMAXBYTE )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = SbxMAXBYTE;
+ }
+ else if( d < 0 )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = 0;
+ }
+ else
+ nRes = (BYTE) ( d + 0.5 );
+ }
+ break;
+ case SbxOBJECT:
+ {
+ SbxValue* pVal = PTR_CAST(SbxValue,p->pObj);
+ if( pVal )
+ nRes = pVal->GetByte();
+ else
+ {
+ SbxBase::SetError( SbxERR_NO_OBJECT ); nRes = 0;
+ }
+ break;
+ }
+
+ case SbxBYREF | SbxBYTE:
+ nRes = p->nByte; break;
+
+ // ab hier wird getestet
+ case SbxBYREF | SbxCHAR:
+ aTmp.nChar = *p->pChar; goto ref;
+ case SbxBYREF | SbxINTEGER:
+ case SbxBYREF | SbxBOOL:
+ aTmp.nInteger = *p->pInteger; goto ref;
+ case SbxBYREF | SbxLONG:
+ aTmp.nLong = *p->pLong; goto ref;
+ case SbxBYREF | SbxULONG:
+ aTmp.nULong = *p->pULong; goto ref;
+ case SbxBYREF | SbxERROR:
+ case SbxBYREF | SbxUSHORT:
+ aTmp.nUShort = *p->pUShort; goto ref;
+ case SbxBYREF | SbxSINGLE:
+ aTmp.nSingle = *p->pSingle; goto ref;
+ case SbxBYREF | SbxDATE:
+ case SbxBYREF | SbxDOUBLE:
+ aTmp.nDouble = *p->pDouble; goto ref;
+ case SbxBYREF | SbxULONG64:
+ aTmp.nULong64 = *p->pULong64; goto ref;
+ case SbxBYREF | SbxLONG64:
+ case SbxBYREF | SbxCURRENCY:
+ aTmp.nLong64 = *p->pLong64; goto ref;
+ case SbxBYREF | SbxSALINT64:
+ aTmp.nInt64 = *p->pnInt64; goto ref;
+ case SbxBYREF | SbxSALUINT64:
+ aTmp.uInt64 = *p->puInt64; goto ref;
+ ref:
+ aTmp.eType = SbxDataType( p->eType & 0x0FFF );
+ p = &aTmp; goto start;
+
+ default:
+ SbxBase::SetError( SbxERR_CONVERSION ); nRes = 0;
+ }
+ return nRes;
+}
+
+void ImpPutByte( SbxValues* p, BYTE n )
+{
+ switch( +p->eType )
+ {
+ case SbxBYTE:
+ p->nByte = n; break;
+ case SbxINTEGER:
+ case SbxBOOL:
+ p->nInteger = n; break;
+ case SbxERROR:
+ case SbxUSHORT:
+ p->nUShort = n; break;
+ case SbxLONG:
+ p->nLong = n; break;
+ case SbxULONG:
+ p->nULong = n; break;
+ case SbxSINGLE:
+ p->nSingle = n; break;
+ case SbxDATE:
+ case SbxDOUBLE:
+ p->nDouble = n; break;
+ case SbxSALINT64:
+ p->nInt64 = n; break;
+ case SbxSALUINT64:
+ p->uInt64 = n; break;
+ case SbxULONG64:
+ p->nULong64 = ImpDoubleToUINT64( (double)n ); break;
+ case SbxLONG64:
+ p->nLong64 = ImpDoubleToINT64( (double)n ); break;
+ case SbxCURRENCY:
+ p->nLong64 = ImpDoubleToCurrency( (double)n ); break;
+ case SbxDECIMAL:
+ case SbxBYREF | SbxDECIMAL:
+ ImpCreateDecimal( p )->setByte( n );
+ break;
+
+ case SbxCHAR:
+ p->nChar = (xub_Unicode) n; break;
+
+ case SbxBYREF | SbxSTRING:
+ case SbxSTRING:
+ case SbxLPSTR:
+ if( !p->pOUString )
+ p->pOUString = new ::rtl::OUString;
+ ImpCvtNum( (double) n, 0, *p->pOUString );
+ break;
+ case SbxOBJECT:
+ {
+ SbxValue* pVal = PTR_CAST(SbxValue,p->pObj);
+ if( pVal )
+ pVal->PutByte( n );
+ else
+ SbxBase::SetError( SbxERR_NO_OBJECT );
+ break;
+ }
+ case SbxBYREF | SbxCHAR:
+ *p->pChar = (xub_Unicode) n; break;
+ case SbxBYREF | SbxBYTE:
+ *p->pByte = n; break;
+ case SbxBYREF | SbxINTEGER:
+ case SbxBYREF | SbxBOOL:
+ *p->pInteger = n; break;
+ case SbxBYREF | SbxERROR:
+ case SbxBYREF | SbxUSHORT:
+ *p->pUShort = n; break;
+ case SbxBYREF | SbxLONG:
+ *p->pLong = n; break;
+ case SbxBYREF | SbxULONG:
+ *p->pULong = n; break;
+ case SbxBYREF | SbxSINGLE:
+ *p->pSingle = n; break;
+ case SbxBYREF | SbxDATE:
+ case SbxBYREF | SbxDOUBLE:
+ *p->pDouble = n; break;
+ case SbxBYREF | SbxULONG64:
+ *p->pULong64 = ImpDoubleToUINT64( (double)n ); break;
+ case SbxBYREF | SbxLONG64:
+ *p->pLong64 = ImpDoubleToINT64( (double)n ); break;
+ case SbxBYREF | SbxSALINT64:
+ *p->pnInt64 = n; break;
+ case SbxBYREF | SbxSALUINT64:
+ *p->puInt64 = n; break;
+ case SbxBYREF | SbxCURRENCY:
+ *p->pLong64 = ImpDoubleToCurrency( (double)n ); break;
+
+ default:
+ SbxBase::SetError( SbxERR_CONVERSION );
+ }
+}
+
diff --git a/basic/source/sbx/sbxchar.cxx b/basic/source/sbx/sbxchar.cxx
new file mode 100644
index 000000000000..bd4ce91f451b
--- /dev/null
+++ b/basic/source/sbx/sbxchar.cxx
@@ -0,0 +1,324 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+#include <tools/errcode.hxx>
+#include <basic/sbx.hxx>
+#include "sbxconv.hxx"
+
+// AB 29.10.99 Unicode
+#ifndef _USE_NO_NAMESPACE
+using namespace rtl;
+#endif
+
+xub_Unicode ImpGetChar( const SbxValues* p )
+{
+ SbxValues aTmp;
+ xub_Unicode nRes = 0;
+start:
+ switch( +p->eType )
+ {
+ case SbxNULL:
+ SbxBase::SetError( SbxERR_CONVERSION );
+ case SbxEMPTY:
+ nRes = 0; break;
+ case SbxCHAR:
+ nRes = p->nChar; break;
+ case SbxBYTE:
+ nRes = (xub_Unicode) p->nByte;
+ break;
+ case SbxINTEGER:
+ case SbxBOOL:
+ if( p->nInteger < SbxMINCHAR )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = SbxMINCHAR;
+ }
+ else
+ nRes = (xub_Unicode) p->nInteger;
+ break;
+ case SbxERROR:
+ case SbxUSHORT:
+ nRes = (xub_Unicode) p->nUShort;
+ break;
+ case SbxLONG:
+ if( p->nLong > SbxMAXCHAR )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = SbxMAXCHAR;
+ }
+ else if( p->nLong < SbxMINCHAR )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = SbxMINCHAR;
+ }
+ else
+ nRes = (xub_Unicode) p->nLong;
+ break;
+ case SbxULONG:
+ if( p->nULong > SbxMAXCHAR )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = SbxMAXCHAR;
+ }
+ else
+ nRes = (xub_Unicode) p->nULong;
+ break;
+ case SbxSALINT64:
+ if( p->nInt64 > SbxMAXCHAR )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = SbxMAXCHAR;
+ }
+ else if( p->nInt64 < SbxMINCHAR )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = SbxMINCHAR;
+ }
+ else
+ nRes = (xub_Unicode) p->nInt64;
+ break;
+ case SbxSALUINT64:
+ if( p->uInt64 > SbxMAXCHAR )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = SbxMAXCHAR;
+ }
+ else
+ nRes = (xub_Unicode) p->uInt64;
+ break;
+ case SbxSINGLE:
+ if( p->nSingle > SbxMAXCHAR )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = SbxMAXCHAR;
+ }
+ else if( p->nSingle < SbxMINCHAR )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = SbxMINCHAR;
+ }
+ else
+ nRes = (xub_Unicode) ImpRound( p->nSingle );
+ break;
+ case SbxDATE:
+ case SbxDOUBLE:
+ case SbxLONG64:
+ case SbxULONG64:
+ case SbxCURRENCY:
+ case SbxDECIMAL:
+ case SbxBYREF | SbxDECIMAL:
+ {
+ double dVal;
+ if( p->eType == SbxCURRENCY )
+ dVal = ImpCurrencyToDouble( p->nLong64 );
+ else if( p->eType == SbxLONG64 )
+ dVal = ImpINT64ToDouble( p->nLong64 );
+ else if( p->eType == SbxULONG64 )
+ dVal = ImpUINT64ToDouble( p->nULong64 );
+ else if( p->eType == SbxDECIMAL )
+ {
+ dVal = 0.0;
+ if( p->pDecimal )
+ p->pDecimal->getDouble( dVal );
+ }
+ else
+ dVal = p->nDouble;
+
+ if( dVal > SbxMAXCHAR )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = SbxMAXCHAR;
+ }
+ else if( dVal < SbxMINCHAR )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = SbxMINCHAR;
+ }
+ else
+ nRes = (BYTE) ImpRound( dVal );
+ break;
+ }
+ case SbxBYREF | SbxSTRING:
+ case SbxSTRING:
+ case SbxLPSTR:
+ if ( p->pOUString )
+ {
+ double d;
+ SbxDataType t;
+ if( ImpScan( *p->pOUString, d, t, NULL ) != SbxERR_OK )
+ nRes = 0;
+ else if( d > SbxMAXCHAR )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = SbxMAXCHAR;
+ }
+ else if( d < SbxMINCHAR )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = SbxMINCHAR;
+ }
+ else
+ nRes = (xub_Unicode) ImpRound( d );
+ }
+ break;
+ case SbxOBJECT:
+ {
+ SbxValue* pVal = PTR_CAST(SbxValue,p->pObj);
+ if( pVal )
+ nRes = pVal->GetChar();
+ else
+ {
+ SbxBase::SetError( SbxERR_NO_OBJECT ); nRes = 0;
+ }
+ break;
+ }
+
+ case SbxBYREF | SbxCHAR:
+ nRes = *p->pChar; break;
+ // ab hier wird getestet
+ case SbxBYREF | SbxBYTE:
+ aTmp.nByte = *p->pByte; goto ref;
+ case SbxBYREF | SbxINTEGER:
+ case SbxBYREF | SbxBOOL:
+ aTmp.nInteger = *p->pInteger; goto ref;
+ case SbxBYREF | SbxLONG:
+ aTmp.nLong = *p->pLong; goto ref;
+ case SbxBYREF | SbxULONG:
+ aTmp.nULong = *p->pULong; goto ref;
+ case SbxBYREF | SbxERROR:
+ case SbxBYREF | SbxUSHORT:
+ aTmp.nUShort = *p->pUShort; goto ref;
+ case SbxBYREF | SbxSINGLE:
+ aTmp.nSingle = *p->pSingle; goto ref;
+ case SbxBYREF | SbxDATE:
+ case SbxBYREF | SbxDOUBLE:
+ aTmp.nDouble = *p->pDouble; goto ref;
+ case SbxBYREF | SbxULONG64:
+ aTmp.nULong64 = *p->pULong64; goto ref;
+ case SbxBYREF | SbxLONG64:
+ case SbxBYREF | SbxCURRENCY:
+ aTmp.nLong64 = *p->pLong64; goto ref;
+ case SbxBYREF | SbxSALINT64:
+ aTmp.nInt64 = *p->pnInt64; goto ref;
+ case SbxBYREF | SbxSALUINT64:
+ aTmp.uInt64 = *p->puInt64; goto ref;
+ ref:
+ aTmp.eType = SbxDataType( p->eType & 0x0FFF );
+ p = &aTmp; goto start;
+
+ default:
+ SbxBase::SetError( SbxERR_CONVERSION ); nRes = 0;
+ }
+ return nRes;
+}
+
+void ImpPutChar( SbxValues* p, xub_Unicode n )
+{
+ SbxValues aTmp;
+start:
+ switch( +p->eType )
+ {
+ case SbxCHAR:
+ p->nChar = n; break;
+ case SbxINTEGER:
+ case SbxBOOL:
+ p->nInteger = n; break;
+ case SbxLONG:
+ p->nLong = n; break;
+ case SbxSINGLE:
+ p->nSingle = n; break;
+ case SbxDATE:
+ case SbxDOUBLE:
+ p->nDouble = n; break;
+ case SbxSALINT64:
+ p->nInt64 = n; break;
+ case SbxSALUINT64:
+ p->uInt64 = n; break;
+ case SbxULONG64:
+ p->nULong64 = ImpDoubleToUINT64( (double)n ); break;
+ case SbxLONG64:
+ p->nLong64 = ImpDoubleToINT64( (double)n ); break;
+ case SbxCURRENCY:
+ p->nLong64 = ImpDoubleToCurrency( (double)n ); break;
+ case SbxBYREF | SbxDECIMAL:
+ ImpCreateDecimal( p )->setChar( n );
+ break;
+
+ // ab hier wird getestet
+ case SbxBYTE:
+ aTmp.pByte = &p->nByte; goto direct;
+ case SbxULONG:
+ aTmp.pULong = &p->nULong; goto direct;
+ case SbxERROR:
+ case SbxUSHORT:
+ aTmp.pUShort = &p->nUShort; goto direct;
+ direct:
+ aTmp.eType = SbxDataType( p->eType | SbxBYREF );
+ p = &aTmp; goto start;
+
+ case SbxBYREF | SbxSTRING:
+ case SbxSTRING:
+ case SbxLPSTR:
+ if ( !p->pOUString )
+ p->pOUString = new ::rtl::OUString( n );
+ else
+ *p->pOUString = ::rtl::OUString( n );
+ break;
+ case SbxOBJECT:
+ {
+ SbxValue* pVal = PTR_CAST(SbxValue,p->pObj);
+ if( pVal )
+ pVal->PutChar( n );
+ else
+ SbxBase::SetError( SbxERR_NO_OBJECT );
+ break;
+ }
+ case SbxBYREF | SbxCHAR:
+ *p->pChar = n; break;
+ case SbxBYREF | SbxBYTE:
+ *p->pByte = (BYTE) n; break;
+ case SbxBYREF | SbxINTEGER:
+ case SbxBYREF | SbxBOOL:
+ *p->pInteger = n; break;
+ case SbxBYREF | SbxERROR:
+ case SbxBYREF | SbxUSHORT:
+ *p->pUShort = (UINT16) n; break;
+ case SbxBYREF | SbxLONG:
+ *p->pLong = (INT32) n; break;
+ case SbxBYREF | SbxULONG:
+ *p->pULong = (UINT32) n; break;
+ case SbxBYREF | SbxSINGLE:
+ *p->pSingle = (float) n; break;
+ case SbxBYREF | SbxDATE:
+ case SbxBYREF | SbxDOUBLE:
+ *p->pDouble = (double) n; break;
+ case SbxBYREF | SbxSALINT64:
+ *p->pnInt64 = n; break;
+ case SbxBYREF | SbxSALUINT64:
+ *p->puInt64 = n; break;
+ case SbxBYREF | SbxULONG64:
+ *p->pULong64 = ImpDoubleToUINT64( (double)n ); break;
+ case SbxBYREF | SbxLONG64:
+ *p->pLong64 = ImpDoubleToINT64( (double)n ); break;
+ case SbxBYREF | SbxCURRENCY:
+ *p->pLong64 = ImpDoubleToCurrency( (double)n ); break;
+
+ default:
+ SbxBase::SetError( SbxERR_CONVERSION );
+ }
+}
+
+
diff --git a/basic/source/sbx/sbxcoll.cxx b/basic/source/sbx/sbxcoll.cxx
new file mode 100644
index 000000000000..7bd32900ecc9
--- /dev/null
+++ b/basic/source/sbx/sbxcoll.cxx
@@ -0,0 +1,301 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+
+
+#include <tools/stream.hxx>
+
+#include <basic/sbx.hxx>
+#include "sbxres.hxx"
+
+TYPEINIT1(SbxCollection,SbxObject)
+TYPEINIT1(SbxStdCollection,SbxCollection)
+
+static const char* pCount;
+static const char* pAdd;
+static const char* pItem;
+static const char* pRemove;
+static USHORT nCountHash = 0, nAddHash, nItemHash, nRemoveHash;
+
+/////////////////////////////////////////////////////////////////////////
+
+SbxCollection::SbxCollection( const XubString& rClass )
+ : SbxObject( rClass )
+{
+ if( !nCountHash )
+ {
+ pCount = GetSbxRes( STRING_COUNTPROP );
+ pAdd = GetSbxRes( STRING_ADDMETH );
+ pItem = GetSbxRes( STRING_ITEMMETH );
+ pRemove = GetSbxRes( STRING_REMOVEMETH );
+ nCountHash = MakeHashCode( String::CreateFromAscii( pCount ) );
+ nAddHash = MakeHashCode( String::CreateFromAscii( pAdd ) );
+ nItemHash = MakeHashCode( String::CreateFromAscii( pItem ) );
+ nRemoveHash = MakeHashCode( String::CreateFromAscii( pRemove ) );
+ }
+ Initialize();
+ // Fuer Zugriffe auf sich selbst
+ StartListening( GetBroadcaster(), TRUE );
+}
+
+SbxCollection::SbxCollection( const SbxCollection& rColl )
+ : SvRefBase( rColl ), SbxObject( rColl )
+{}
+
+SbxCollection& SbxCollection::operator=( const SbxCollection& r )
+{
+ if( &r != this )
+ SbxObject::operator=( r );
+ return *this;
+}
+
+SbxCollection::~SbxCollection()
+{}
+
+void SbxCollection::Clear()
+{
+ SbxObject::Clear();
+ Initialize();
+}
+
+void SbxCollection::Initialize()
+{
+ SetType( SbxOBJECT );
+ SetFlag( SBX_FIXED );
+ ResetFlag( SBX_WRITE );
+ SbxVariable* p;
+ p = Make( String::CreateFromAscii( pCount ), SbxCLASS_PROPERTY, SbxINTEGER );
+ p->ResetFlag( SBX_WRITE );
+ p->SetFlag( SBX_DONTSTORE );
+ p = Make( String::CreateFromAscii( pAdd ), SbxCLASS_METHOD, SbxEMPTY );
+ p->SetFlag( SBX_DONTSTORE );
+ p = Make( String::CreateFromAscii( pItem ), SbxCLASS_METHOD, SbxOBJECT );
+ p->SetFlag( SBX_DONTSTORE );
+ p = Make( String::CreateFromAscii( pRemove ), SbxCLASS_METHOD, SbxEMPTY );
+ p->SetFlag( SBX_DONTSTORE );
+}
+
+SbxVariable* SbxCollection::FindUserData( UINT32 nData )
+{
+ if( GetParameters() )
+ {
+ SbxObject* pObj = (SbxObject*) GetObject();
+ return pObj ? pObj->FindUserData( nData ) : NULL;
+ }
+ else
+ return SbxObject::FindUserData( nData );
+}
+
+SbxVariable* SbxCollection::Find( const XubString& rName, SbxClassType t )
+{
+ if( GetParameters() )
+ {
+ SbxObject* pObj = (SbxObject*) GetObject();
+ return pObj ? pObj->Find( rName, t ) : NULL;
+ }
+ else
+ return SbxObject::Find( rName, t );
+}
+
+void SbxCollection::SFX_NOTIFY( SfxBroadcaster& rCst, const TypeId& rId1,
+ const SfxHint& rHint, const TypeId& rId2 )
+{
+ const SbxHint* p = PTR_CAST(SbxHint,&rHint);
+ if( p )
+ {
+ ULONG nId = p->GetId();
+ BOOL bRead = BOOL( nId == SBX_HINT_DATAWANTED );
+ BOOL bWrite = BOOL( nId == SBX_HINT_DATACHANGED );
+ SbxVariable* pVar = p->GetVar();
+ SbxArray* pArg = pVar->GetParameters();
+ if( bRead || bWrite )
+ {
+ XubString aVarName( pVar->GetName() );
+ if( pVar == this )
+ CollItem( pArg );
+ else if( pVar->GetHashCode() == nCountHash
+ && aVarName.EqualsIgnoreCaseAscii( pCount ) )
+ pVar->PutLong( pObjs->Count() );
+ else if( pVar->GetHashCode() == nAddHash
+ && aVarName.EqualsIgnoreCaseAscii( pAdd ) )
+ CollAdd( pArg );
+ else if( pVar->GetHashCode() == nItemHash
+ && aVarName.EqualsIgnoreCaseAscii( pItem ) )
+ CollItem( pArg );
+ else if( pVar->GetHashCode() == nRemoveHash
+ && aVarName.EqualsIgnoreCaseAscii( pRemove ) )
+ CollRemove( pArg );
+ else
+ SbxObject::SFX_NOTIFY( rCst, rId1, rHint, rId2 );
+ return;
+ }
+ }
+ SbxObject::SFX_NOTIFY( rCst, rId1, rHint, rId2 );
+}
+
+// Default: Argument ist Objekt
+
+void SbxCollection::CollAdd( SbxArray* pPar_ )
+{
+ if( pPar_->Count() != 2 )
+ SetError( SbxERR_WRONG_ARGS );
+ else
+ {
+ SbxBase* pObj = pPar_->Get( 1 )->GetObject();
+ if( !pObj || !( pObj->ISA(SbxObject) ) )
+ SetError( SbxERR_NOTIMP );
+ else
+ Insert( (SbxObject*) pObj );
+ }
+}
+
+// Default: Index ab 1 oder der Objektname
+
+void SbxCollection::CollItem( SbxArray* pPar_ )
+{
+ if( pPar_->Count() != 2 )
+ SetError( SbxERR_WRONG_ARGS );
+ else
+ {
+ SbxVariable* pRes = NULL;
+ SbxVariable* p = pPar_->Get( 1 );
+ if( p->GetType() == SbxSTRING )
+ pRes = Find( p->GetString(), SbxCLASS_OBJECT );
+ else
+ {
+ short n = p->GetInteger();
+ if( n >= 1 && n <= (short) pObjs->Count() )
+ pRes = pObjs->Get( (USHORT) n - 1 );
+ }
+ if( !pRes )
+ SetError( SbxERR_BAD_INDEX );
+ pPar_->Get( 0 )->PutObject( pRes );
+ }
+}
+
+// Default: Index ab 1
+
+void SbxCollection::CollRemove( SbxArray* pPar_ )
+{
+ if( pPar_->Count() != 2 )
+ SetError( SbxERR_WRONG_ARGS );
+ else
+ {
+ short n = pPar_->Get( 1 )->GetInteger();
+ if( n < 1 || n > (short) pObjs->Count() )
+ SetError( SbxERR_BAD_INDEX );
+ else
+ Remove( pObjs->Get( (USHORT) n - 1 ) );
+ }
+}
+
+BOOL SbxCollection::LoadData( SvStream& rStrm, USHORT nVer )
+{
+ BOOL bRes = SbxObject::LoadData( rStrm, nVer );
+ Initialize();
+ return bRes;
+}
+
+/////////////////////////////////////////////////////////////////////////
+
+SbxStdCollection::SbxStdCollection
+ ( const XubString& rClass, const XubString& rElem, BOOL b )
+ : SbxCollection( rClass ), aElemClass( rElem ),
+ bAddRemoveOk( b )
+{}
+
+SbxStdCollection::SbxStdCollection( const SbxStdCollection& r )
+ : SvRefBase( r ), SbxCollection( r ),
+ aElemClass( r.aElemClass ), bAddRemoveOk( r.bAddRemoveOk )
+{}
+
+SbxStdCollection& SbxStdCollection::operator=( const SbxStdCollection& r )
+{
+ if( &r != this )
+ {
+ if( !r.aElemClass.EqualsIgnoreCaseAscii( aElemClass ) )
+ SetError( SbxERR_CONVERSION );
+ else
+ SbxCollection::operator=( r );
+ }
+ return *this;
+}
+
+SbxStdCollection::~SbxStdCollection()
+{}
+
+// Default: Fehler, wenn falsches Objekt
+
+void SbxStdCollection::Insert( SbxVariable* p )
+{
+ SbxObject* pObj = PTR_CAST(SbxObject,p);
+ if( pObj && !pObj->IsClass( aElemClass ) )
+ SetError( SbxERR_BAD_ACTION );
+ else
+ SbxCollection::Insert( p );
+}
+
+void SbxStdCollection::CollAdd( SbxArray* pPar_ )
+{
+ if( !bAddRemoveOk )
+ SetError( SbxERR_BAD_ACTION );
+ else
+ SbxCollection::CollAdd( pPar_ );
+}
+
+void SbxStdCollection::CollRemove( SbxArray* pPar_ )
+{
+ if( !bAddRemoveOk )
+ SetError( SbxERR_BAD_ACTION );
+ else
+ SbxCollection::CollRemove( pPar_ );
+}
+
+BOOL SbxStdCollection::LoadData( SvStream& rStrm, USHORT nVer )
+{
+ BOOL bRes = SbxCollection::LoadData( rStrm, nVer );
+ if( bRes )
+ {
+ rStrm.ReadByteString( aElemClass, RTL_TEXTENCODING_ASCII_US );
+ rStrm >> bAddRemoveOk;
+ }
+ return bRes;
+}
+
+BOOL SbxStdCollection::StoreData( SvStream& rStrm ) const
+{
+ BOOL bRes = SbxCollection::StoreData( rStrm );
+ if( bRes )
+ {
+ rStrm.WriteByteString( aElemClass, RTL_TEXTENCODING_ASCII_US );
+ rStrm << bAddRemoveOk;
+ }
+ return bRes;
+}
+
diff --git a/basic/source/sbx/sbxconv.hxx b/basic/source/sbx/sbxconv.hxx
new file mode 100644
index 000000000000..16fec542cded
--- /dev/null
+++ b/basic/source/sbx/sbxconv.hxx
@@ -0,0 +1,151 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _SBXCONV_HXX
+#define _SBXCONV_HXX
+
+#include "sbxdec.hxx"
+
+class SbxArray;
+
+// SBXSCAN.CXX
+extern void ImpCvtNum( double nNum, short nPrec, ::rtl::OUString& rRes, BOOL bCoreString=FALSE );
+extern SbxError ImpScan
+ ( const ::rtl::OUString& rSrc, double& nVal, SbxDataType& rType, USHORT* pLen,
+ BOOL bAllowIntntl=FALSE, BOOL bOnlyIntntl=FALSE );
+
+// mit erweiterter Auswertung (International, "TRUE"/"FALSE")
+extern BOOL ImpConvStringExt( ::rtl::OUString& rSrc, SbxDataType eTargetType );
+
+// SBXINT.CXX
+
+double ImpRound( double );
+INT16 ImpGetInteger( const SbxValues* );
+void ImpPutInteger( SbxValues*, INT16 );
+sal_Int64 ImpGetInt64( const SbxValues* );
+void ImpPutInt64( SbxValues*, sal_Int64 );
+sal_uInt64 ImpGetUInt64( const SbxValues* );
+void ImpPutUInt64( SbxValues*, sal_uInt64 );
+
+sal_Int64 ImpDoubleToSalInt64( double d );
+sal_uInt64 ImpDoubleToSalUInt64( double d );
+double ImpSalUInt64ToDouble( sal_uInt64 n );
+
+// SBXLNG.CXX
+
+INT32 ImpGetLong( const SbxValues* );
+void ImpPutLong( SbxValues*, INT32 );
+
+// SBXSNG.CXX
+
+float ImpGetSingle( const SbxValues* );
+void ImpPutSingle( SbxValues*, float );
+
+// SBXDBL.CXX
+
+double ImpGetDouble( const SbxValues* );
+void ImpPutDouble( SbxValues*, double, BOOL bCoreString=FALSE );
+
+#if FALSE
+// SBX64.CXX
+
+SbxINT64 ImpGetINT64( const SbxValues* );
+void ImpPutINT64( SbxValues*, const SbxINT64& );
+SbxUINT64 ImpGetUINT64( const SbxValues* );
+void ImpPutUINT64( SbxValues*, const SbxUINT64& );
+#endif
+
+// SBXCURR.CXX
+
+SbxUINT64 ImpDoubleToUINT64( double );
+double ImpUINT64ToDouble( const SbxUINT64& );
+SbxINT64 ImpDoubleToINT64( double );
+double ImpINT64ToDouble( const SbxINT64& );
+
+#if TRUE
+INT32 ImpGetCurrLong( const SbxValues* );
+void ImpPutCurrLong( SbxValues*, INT32 );
+INT32 ImpDoubleToCurrLong( double );
+double ImpCurrLongToDouble( INT32 );
+#endif
+
+SbxINT64 ImpGetCurrency( const SbxValues* );
+void ImpPutCurrency( SbxValues*, const SbxINT64& );
+inline
+SbxINT64 ImpDoubleToCurrency( double d )
+ { return ImpDoubleToINT64( d * CURRENCY_FACTOR ); }
+inline
+double ImpCurrencyToDouble( const SbxINT64 &r )
+ { return ImpINT64ToDouble( r ) / CURRENCY_FACTOR; }
+
+
+// SBXDEC.CXX
+
+SbxDecimal* ImpCreateDecimal( SbxValues* p );
+SbxDecimal* ImpGetDecimal( const SbxValues* p );
+void ImpPutDecimal( SbxValues* p, SbxDecimal* pDec );
+
+// SBXDATE.CXX
+
+double ImpGetDate( const SbxValues* );
+void ImpPutDate( SbxValues*, double );
+
+// SBXSTR.CXX
+
+::rtl::OUString ImpGetString( const SbxValues* );
+::rtl::OUString ImpGetCoreString( const SbxValues* );
+void ImpPutString( SbxValues*, const ::rtl::OUString* );
+
+// SBXCHAR.CXX
+
+sal_Unicode ImpGetChar( const SbxValues* );
+void ImpPutChar( SbxValues*, sal_Unicode );
+
+// SBXBYTE.CXX
+BYTE ImpGetByte( const SbxValues* );
+void ImpPutByte( SbxValues*, BYTE );
+
+// SBXUINT.CXX
+
+UINT16 ImpGetUShort( const SbxValues* );
+void ImpPutUShort( SbxValues*, UINT16 );
+
+// SBXULNG.CXX
+
+UINT32 ImpGetULong( const SbxValues* );
+void ImpPutULong( SbxValues*, UINT32 );
+
+// SBXBOOL.CXX
+
+enum SbxBOOL ImpGetBool( const SbxValues* );
+void ImpPutBool( SbxValues*, INT16 );
+
+// ByteArry <--> String
+SbxArray* StringToByteArray(const ::rtl::OUString& rStr);
+::rtl::OUString ByteArrayToString(SbxArray* pArr);
+
+#endif
diff --git a/basic/source/sbx/sbxcurr.cxx b/basic/source/sbx/sbxcurr.cxx
new file mode 100644
index 000000000000..e27b11d5166c
--- /dev/null
+++ b/basic/source/sbx/sbxcurr.cxx
@@ -0,0 +1,395 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+
+#include <basic/sbx.hxx>
+#include <tools/errcode.hxx>
+
+#define _TLBIGINT_INT64
+#include <tools/bigint.hxx>
+
+#include <basic/sbxvar.hxx>
+#include "sbxconv.hxx"
+
+static ::rtl::OUString ImpCurrencyToString( const SbxINT64& );
+static SbxINT64 ImpStringToCurrency( const ::rtl::OUString& );
+
+SbxINT64 ImpGetCurrency( const SbxValues* p )
+{
+ SbxValues aTmp;
+ SbxINT64 nRes;
+start:
+ switch( +p->eType )
+ {
+ case SbxNULL:
+ SbxBase::SetError( SbxERR_CONVERSION );
+ case SbxEMPTY:
+ nRes.SetNull(); break;
+ case SbxCHAR:
+ nRes = ImpDoubleToCurrency( (double)p->nChar ); break;
+ case SbxBYTE:
+ nRes = ImpDoubleToCurrency( (double)p->nByte ); break;
+ case SbxINTEGER:
+ case SbxBOOL:
+ nRes = ImpDoubleToCurrency( (double)p->nInteger ); break;
+ case SbxERROR:
+ case SbxUSHORT:
+ nRes = ImpDoubleToCurrency( (double)p->nUShort ); break;
+ case SbxCURRENCY:
+ nRes = p->nLong64; break;
+ case SbxLONG:
+ nRes = ImpDoubleToCurrency( (double)p->nLong );
+ break;
+ case SbxULONG:
+ nRes = ImpDoubleToCurrency( (double)p->nULong );
+ break;
+ case SbxSALINT64:
+ nRes = ImpDoubleToCurrency( (double)p->nInt64 );
+ break;
+ case SbxSALUINT64:
+ nRes = ImpDoubleToCurrency( ImpSalUInt64ToDouble( p->uInt64 ) );
+ break;
+ case SbxSINGLE:
+ if( p->nSingle > SbxMAXCURR )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes.SetMax();
+ }
+ else if( p->nSingle < SbxMINCURR )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes.SetMin();
+ }
+ else
+ nRes = ImpDoubleToCurrency( (double)p->nSingle );
+ break;
+ case SbxDATE:
+ case SbxDOUBLE:
+ if( p->nDouble > SbxMAXCURR )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes.SetMax();
+ }
+ else if( p->nDouble < SbxMINCURR )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes.SetMin();
+ }
+ else
+ nRes = ImpDoubleToCurrency( p->nDouble );
+ break;
+ case SbxDECIMAL:
+ case SbxBYREF | SbxDECIMAL:
+ {
+ double d = 0.0;
+ if( p->pDecimal )
+ p->pDecimal->getDouble( d );
+ if( d > SbxMAXCURR )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes.SetMax();
+ }
+ else if( d < SbxMINCURR )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes.SetMin();
+ }
+ else
+ nRes = ImpDoubleToCurrency( d );
+ break;
+ }
+ case SbxBYREF | SbxSTRING:
+ case SbxSTRING:
+ case SbxLPSTR:
+ if( !p->pOUString )
+ nRes.SetNull();
+ else
+ nRes = ImpStringToCurrency( *p->pOUString );
+ break;
+ case SbxOBJECT:
+ {
+ SbxValue* pVal = PTR_CAST(SbxValue,p->pObj);
+ if( pVal )
+ nRes = pVal->GetCurrency();
+ else
+ {
+ SbxBase::SetError( SbxERR_NO_OBJECT ); nRes.SetNull();
+ }
+ break;
+ }
+
+ case SbxBYREF | SbxCHAR:
+ nRes = ImpDoubleToCurrency( (double)*p->pChar ); break;
+ case SbxBYREF | SbxBYTE:
+ nRes = ImpDoubleToCurrency( (double)*p->pByte ); break;
+ case SbxBYREF | SbxINTEGER:
+ case SbxBYREF | SbxBOOL:
+ nRes = ImpDoubleToCurrency( (double)*p->pInteger ); break;
+ case SbxBYREF | SbxERROR:
+ case SbxBYREF | SbxUSHORT:
+ nRes = ImpDoubleToCurrency( (double)*p->pUShort ); break;
+ case SbxBYREF | SbxCURRENCY:
+ nRes = *p->pLong64; break;
+
+ // ab hier muss getestet werden
+ case SbxBYREF | SbxLONG:
+ aTmp.nLong = *p->pLong; goto ref;
+ case SbxBYREF | SbxULONG:
+ aTmp.nULong = *p->pULong; goto ref;
+ case SbxBYREF | SbxSINGLE:
+ aTmp.nSingle = *p->pSingle; goto ref;
+ case SbxBYREF | SbxDATE:
+ case SbxBYREF | SbxDOUBLE:
+ aTmp.nDouble = *p->pDouble; goto ref;
+ case SbxBYREF | SbxSALINT64:
+ aTmp.nInt64 = *p->pnInt64; goto ref;
+ case SbxBYREF | SbxSALUINT64:
+ aTmp.uInt64 = *p->puInt64; goto ref;
+ ref:
+ aTmp.eType = SbxDataType( p->eType & 0x0FFF );
+ p = &aTmp; goto start;
+
+ default:
+ SbxBase::SetError( SbxERR_CONVERSION ); nRes.SetNull();
+ }
+ return nRes;
+}
+
+void ImpPutCurrency( SbxValues* p, const SbxINT64 &r )
+{
+ double dVal = ImpCurrencyToDouble( r );
+ SbxValues aTmp;
+start:
+ switch( +p->eType )
+ {
+ // Hier sind Tests notwendig
+ case SbxCHAR:
+ aTmp.pChar = &p->nChar; goto direct;
+ case SbxBYTE:
+ aTmp.pByte = &p->nByte; goto direct;
+ case SbxINTEGER:
+ case SbxBOOL:
+ aTmp.pInteger = &p->nInteger; goto direct;
+ case SbxLONG:
+ aTmp.pLong = &p->nLong; goto direct;
+ case SbxULONG:
+ aTmp.pULong = &p->nULong; goto direct;
+ case SbxERROR:
+ case SbxUSHORT:
+ aTmp.pUShort = &p->nUShort; goto direct;
+ direct:
+ aTmp.eType = SbxDataType( p->eType | SbxBYREF );
+ p = &aTmp; goto start;
+
+ // ab hier nicht mehr
+ case SbxSINGLE:
+ p->nSingle = (float)dVal; break;
+ case SbxDATE:
+ case SbxDOUBLE:
+ p->nDouble = dVal; break;
+ case SbxSALINT64:
+ p->nInt64 = ImpDoubleToSalInt64( dVal ); break;
+ case SbxSALUINT64:
+ p->uInt64 = ImpDoubleToSalUInt64( dVal ); break;
+ case SbxCURRENCY:
+ p->nLong64 = r; break;
+ case SbxDECIMAL:
+ case SbxBYREF | SbxDECIMAL:
+ {
+ SbxDecimal* pDec = ImpCreateDecimal( p );
+ if( !pDec->setDouble( dVal ) )
+ SbxBase::SetError( SbxERR_OVERFLOW );
+ break;
+ }
+ case SbxBYREF | SbxSTRING:
+ case SbxSTRING:
+ case SbxLPSTR:
+ if( !p->pOUString )
+ p->pOUString = new ::rtl::OUString;
+
+ *p->pOUString = ImpCurrencyToString( r );
+ break;
+ case SbxOBJECT:
+ {
+ SbxValue* pVal = PTR_CAST(SbxValue,p->pObj);
+ if( pVal )
+ pVal->PutCurrency( r );
+ else
+ SbxBase::SetError( SbxERR_NO_OBJECT );
+ break;
+ }
+ case SbxBYREF | SbxCHAR:
+ if( dVal > SbxMAXCHAR )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); dVal = SbxMAXCHAR;
+ }
+ else if( dVal < SbxMINCHAR )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); dVal = SbxMINCHAR;
+ }
+ *p->pChar = (xub_Unicode) dVal; break;
+ case SbxBYREF | SbxBYTE:
+ if( dVal > SbxMAXBYTE )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); dVal = SbxMAXBYTE;
+ }
+ else if( dVal < 0 )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); dVal = 0;
+ }
+ *p->pByte = (BYTE) dVal; break;
+ case SbxBYREF | SbxINTEGER:
+ case SbxBYREF | SbxBOOL:
+ if( dVal > SbxMAXINT )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); dVal = SbxMAXINT;
+ }
+ else if( dVal < SbxMININT )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); dVal = SbxMININT;
+ }
+ *p->pInteger = (INT16) dVal; break;
+ case SbxBYREF | SbxERROR:
+ case SbxBYREF | SbxUSHORT:
+ if( dVal > SbxMAXUINT )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); dVal = SbxMAXUINT;
+ }
+ else if( dVal < 0 )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); dVal = 0;
+ }
+ *p->pUShort = (UINT16) dVal; break;
+ case SbxBYREF | SbxLONG:
+ if( dVal > SbxMAXLNG )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); dVal = SbxMAXLNG;
+ }
+ else if( dVal < SbxMINLNG )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); dVal = SbxMINLNG;
+ }
+ *p->pLong = (INT32) dVal; break;
+ case SbxBYREF | SbxULONG:
+ if( dVal > SbxMAXULNG )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); dVal = SbxMAXULNG;
+ }
+ else if( dVal < 0 )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); dVal = 0;
+ }
+ *p->pULong = (UINT32) dVal; break;
+ case SbxBYREF | SbxSALINT64:
+ *p->pnInt64 = ImpDoubleToSalInt64( dVal ); break;
+ case SbxBYREF | SbxSALUINT64:
+ *p->puInt64 = ImpDoubleToSalUInt64( dVal ); break;
+ case SbxBYREF | SbxSINGLE:
+ *p->pSingle = (float) dVal; break;
+ case SbxBYREF | SbxDATE:
+ case SbxBYREF | SbxDOUBLE:
+ *p->pDouble = (double) dVal; break;
+ case SbxBYREF | SbxCURRENCY:
+ *p->pLong64 = r; break;
+
+ default:
+ SbxBase::SetError( SbxERR_CONVERSION );
+ }
+}
+
+// Hilfs-Funktionen zur Wandlung
+
+static ::rtl::OUString ImpCurrencyToString( const SbxINT64 &r )
+{
+ BigInt a10000 = 10000;
+
+ //return GetpApp()->GetAppInternational().GetCurr( BigInt( r ), 4 );
+ BigInt aInt( r );
+ aInt.Abs();
+ BigInt aFrac = aInt;
+ aInt /= a10000;
+ aFrac %= a10000;
+ aFrac += a10000;
+
+ ::rtl::OUString aString;
+ if( r.nHigh < 0 )
+ aString = ::rtl::OUString( (sal_Unicode)'-' );
+ aString += aInt.GetString();
+ aString += ::rtl::OUString( (sal_Unicode)'.' );
+ aString += aFrac.GetString().GetBuffer()+1;
+ return aString;
+}
+
+static SbxINT64 ImpStringToCurrency( const ::rtl::OUString &r )
+{
+ int nDec = 4;
+ String aStr;
+ const sal_Unicode* p = r.getStr();
+
+ if( *p == '-' )
+ aStr += *p++;
+
+ while( *p >= '0' && *p <= '9' ) {
+ aStr += *p++;
+ if( *p == ',' )
+ p++;
+ }
+
+ if( *p == '.' ) {
+ p++;
+ while( nDec && *p >= '0' && *p <= '9' ) {
+ aStr += *p++;
+ nDec--;
+ }
+ }
+ while( nDec ) {
+ aStr += '0';
+ nDec--;
+ }
+
+ BigInt aBig( aStr );
+ SbxINT64 nRes;
+ aBig.INT64( &nRes );
+ return nRes;
+}
+
+double ImpINT64ToDouble( const SbxINT64 &r )
+{ return (double)r.nHigh*(double)4294967296.0 + (double)r.nLow; }
+
+SbxINT64 ImpDoubleToINT64( double d )
+{
+ SbxINT64 nRes;
+ nRes.Set( d );
+ return nRes;
+}
+
+double ImpUINT64ToDouble( const SbxUINT64 &r )
+{ return (double)r.nHigh*(double)4294967296.0 + (double)r.nLow; }
+
+SbxUINT64 ImpDoubleToUINT64( double d )
+{
+ SbxUINT64 nRes;
+ nRes.Set( d );
+ return nRes;
+}
+
diff --git a/basic/source/sbx/sbxdate.cxx b/basic/source/sbx/sbxdate.cxx
new file mode 100644
index 000000000000..3a0636e4e7fc
--- /dev/null
+++ b/basic/source/sbx/sbxdate.cxx
@@ -0,0 +1,414 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+#include <vcl/svapp.hxx>
+#include <svl/zforlist.hxx>
+#include <tools/errcode.hxx>
+#include <tools/color.hxx>
+#include <i18npool/lang.h>
+#include <basic/sbx.hxx>
+#include "sbxconv.hxx"
+#include "math.h"
+#include <comphelper/processfactory.hxx>
+
+
+double ImpGetDate( const SbxValues* p )
+{
+ double nRes;
+ switch( +p->eType )
+ {
+ case SbxNULL:
+ SbxBase::SetError( SbxERR_CONVERSION );
+ case SbxEMPTY:
+ nRes = 0; break;
+ case SbxCHAR:
+ nRes = p->nChar; break;
+ case SbxBYTE:
+ nRes = p->nByte; break;
+ case SbxINTEGER:
+ case SbxBOOL:
+ nRes = p->nInteger; break;
+ case SbxERROR:
+ case SbxUSHORT:
+ nRes = p->nUShort; break;
+ case SbxLONG:
+ nRes = (double) p->nLong; break;
+ case SbxULONG:
+ nRes = (double) p->nULong; break;
+ case SbxSINGLE:
+ nRes = p->nSingle; break;
+ case SbxDATE:
+ case SbxDOUBLE:
+ nRes = p->nDouble; break;
+ case SbxULONG64:
+ nRes = ImpUINT64ToDouble( p->nULong64 ); break;
+ case SbxLONG64:
+ nRes = ImpINT64ToDouble( p->nLong64 ); break;
+ case SbxCURRENCY:
+ nRes = ImpCurrencyToDouble( p->nLong64 ); break;
+ case SbxSALINT64:
+ nRes = static_cast< double >(p->nInt64); break;
+ case SbxSALUINT64:
+ nRes = ImpSalUInt64ToDouble( p->uInt64 ); break;
+ case SbxDECIMAL:
+ case SbxBYREF | SbxDECIMAL:
+ if( p->pDecimal )
+ p->pDecimal->getDouble( nRes );
+ else
+ nRes = 0.0;
+ break;
+ case SbxBYREF | SbxSTRING:
+ case SbxSTRING:
+ case SbxLPSTR:
+ if( !p->pOUString )
+ nRes = 0;
+ else
+ {
+#ifndef DOS
+ LanguageType eLangType = GetpApp()->GetSettings().GetLanguage();
+
+ SvNumberFormatter* pFormatter;
+ com::sun::star::uno::Reference< com::sun::star::lang::XMultiServiceFactory >
+ xFactory = comphelper::getProcessServiceFactory();
+ pFormatter = new SvNumberFormatter( xFactory, eLangType );
+
+ sal_uInt32 nIndex;
+ xub_StrLen nCheckPos = 0;
+ short nType = 127;
+
+ // Standard-Vorlagen des Formatters haben nur zweistellige
+ // Jahreszahl. Deshalb eigenes Format registrieren
+
+ // HACK, da der Numberformatter in PutandConvertEntry die Platzhalter
+ // fuer Monat, Tag, Jahr nicht entsprechend der Systemeinstellung
+ // austauscht. Problem: Print Year(Date) unter engl. BS
+ // siehe auch basic\source\runtime\runtime.cxx
+
+ SvtSysLocale aSysLocale;
+ DateFormat eDate = aSysLocale.GetLocaleData().getDateFormat();
+ String aDateStr;
+ switch( eDate )
+ {
+ case MDY: aDateStr.AssignAscii( "MM.TT.JJJJ" ); break;
+ case DMY: aDateStr.AssignAscii( "TT.MM.JJJJ" ); break;
+ case YMD: aDateStr.AssignAscii( "JJJJ.MM.TT" ); break;
+ default: aDateStr.AssignAscii( "MM.TT.JJJJ" );
+ }
+
+ String aStr( aDateStr );
+ aStr.AppendAscii( " HH:MM:SS" );
+
+ pFormatter->PutandConvertEntry( aStr, nCheckPos, nType,
+ nIndex, LANGUAGE_GERMAN, eLangType );
+ BOOL bSuccess = pFormatter->IsNumberFormat( *p->pOUString, nIndex, nRes );
+ if ( bSuccess )
+ {
+ short nType_ = pFormatter->GetType( nIndex );
+ if(!(nType_ & ( NUMBERFORMAT_DATETIME | NUMBERFORMAT_DATE |
+ NUMBERFORMAT_TIME | NUMBERFORMAT_DEFINED )))
+ bSuccess = FALSE;
+ }
+
+ if ( !bSuccess )
+ {
+ SbxBase::SetError( SbxERR_CONVERSION ); nRes = 0;
+ }
+
+ delete pFormatter;
+#else
+ SbxBase::SetError( SbxERR_CONVERSION ); nRes = 0;
+#endif
+ }
+ break;
+ case SbxOBJECT:
+ {
+ SbxValue* pVal = PTR_CAST(SbxValue,p->pObj);
+ if( pVal )
+ nRes = pVal->GetDate();
+ else
+ {
+ SbxBase::SetError( SbxERR_NO_OBJECT ); nRes = 0;
+ }
+ break;
+ }
+
+ case SbxBYREF | SbxCHAR:
+ nRes = *p->pChar; break;
+ case SbxBYREF | SbxBYTE:
+ nRes = *p->pByte; break;
+ case SbxBYREF | SbxINTEGER:
+ case SbxBYREF | SbxBOOL:
+ nRes = *p->pInteger; break;
+ case SbxBYREF | SbxLONG:
+ nRes = *p->pLong; break;
+ case SbxBYREF | SbxULONG:
+ nRes = *p->pULong; break;
+ case SbxBYREF | SbxERROR:
+ case SbxBYREF | SbxUSHORT:
+ nRes = *p->pUShort; break;
+ case SbxBYREF | SbxSINGLE:
+ nRes = *p->pSingle; break;
+ case SbxBYREF | SbxDATE:
+ case SbxBYREF | SbxDOUBLE:
+ nRes = *p->pDouble; break;
+ case SbxBYREF | SbxULONG64:
+ nRes = ImpUINT64ToDouble( *p->pULong64 ); break;
+ case SbxBYREF | SbxLONG64:
+ nRes = ImpINT64ToDouble( *p->pLong64 ); break;
+ case SbxBYREF | SbxCURRENCY:
+ nRes = ImpCurrencyToDouble( *p->pLong64 ); break;
+ case SbxBYREF | SbxSALINT64:
+ nRes = static_cast< double >(*p->pnInt64); break;
+ case SbxBYREF | SbxSALUINT64:
+ nRes = ImpSalUInt64ToDouble( *p->puInt64 ); break;
+
+ default:
+ SbxBase::SetError( SbxERR_CONVERSION ); nRes = 0;
+ }
+ return nRes;
+}
+
+void ImpPutDate( SbxValues* p, double n )
+{
+ SbxValues aTmp;
+
+start:
+ switch( +p->eType )
+ {
+ case SbxDATE:
+ case SbxDOUBLE:
+ p->nDouble = n; break;
+
+ // ab hier wird getestet
+ case SbxCHAR:
+ aTmp.pChar = &p->nChar; goto direct;
+ case SbxBYTE:
+ aTmp.pByte = &p->nByte; goto direct;
+ case SbxINTEGER:
+ case SbxBOOL:
+ aTmp.pInteger = &p->nInteger; goto direct;
+ case SbxLONG:
+ aTmp.pLong = &p->nLong; goto direct;
+ case SbxULONG:
+ aTmp.pULong = &p->nULong; goto direct;
+ case SbxERROR:
+ case SbxUSHORT:
+ aTmp.pUShort = &p->nUShort; goto direct;
+ case SbxSINGLE:
+ aTmp.pSingle = &p->nSingle; goto direct;
+ case SbxULONG64:
+ aTmp.pULong64 = &p->nULong64; goto direct;
+ case SbxLONG64:
+ case SbxCURRENCY:
+ aTmp.pLong64 = &p->nLong64; goto direct;
+ case SbxSALINT64:
+ aTmp.pnInt64 = &p->nInt64; goto direct;
+ case SbxSALUINT64:
+ aTmp.puInt64 = &p->uInt64; goto direct;
+ case SbxDECIMAL:
+ case SbxBYREF | SbxDECIMAL:
+ {
+ SbxDecimal* pDec = ImpCreateDecimal( p );
+ if( !pDec->setDouble( n ) )
+ SbxBase::SetError( SbxERR_OVERFLOW );
+ break;
+ }
+ direct:
+ aTmp.eType = SbxDataType( p->eType | SbxBYREF );
+ p = &aTmp; goto start;
+
+ case SbxBYREF | SbxSTRING:
+ case SbxSTRING:
+ case SbxLPSTR:
+#ifndef DOS
+ {
+ if( !p->pOUString )
+ p->pOUString = new ::rtl::OUString;
+ Color* pColor;
+
+ LanguageType eLangType = GetpApp()->GetSettings().GetLanguage();
+ SvNumberFormatter* pFormatter;
+ com::sun::star::uno::Reference< com::sun::star::lang::XMultiServiceFactory >
+ xFactory = comphelper::getProcessServiceFactory();
+ pFormatter = new SvNumberFormatter( xFactory, eLangType );
+
+ sal_uInt32 nIndex;
+ xub_StrLen nCheckPos = 0;
+ short nType;
+
+ SvtSysLocale aSysLocale;
+ DateFormat eDate = aSysLocale.GetLocaleData().getDateFormat();
+ String aStr;
+ // ist der ganzzahlige Teil 0, wollen wir kein Jahr!
+ if( n <= -1.0 || n >= 1.0 )
+ {
+ // Time only if != 00:00:00
+ if( floor( n ) == n )
+ {
+ switch( eDate )
+ {
+ case MDY: aStr.AssignAscii( "MM.TT.JJJJ" ); break;
+ case DMY: aStr.AssignAscii( "TT.MM.JJJJ" ); break;
+ case YMD: aStr.AssignAscii( "JJJJ.MM.TT" ); break;
+ default: aStr.AssignAscii( "MM.TT.JJJJ" );
+ }
+ }
+ else
+ {
+ switch( eDate )
+ {
+ case MDY: aStr.AssignAscii( "MM.TT.JJJJ HH:MM:SS" ); break;
+ case DMY: aStr.AssignAscii( "TT.MM.JJJJ HH:MM:SS" ); break;
+ case YMD: aStr.AssignAscii( "JJJJ.MM.TT HH:MM:SS" ); break;
+ default: aStr.AssignAscii( "MM.TT.JJJJ HH:MM:SS" );
+ }
+ }
+ }
+ else
+ aStr.AppendAscii( "HH:MM:SS" );
+
+ pFormatter->PutandConvertEntry( aStr,
+ nCheckPos,
+ nType,
+ nIndex,
+ LANGUAGE_GERMAN,
+ eLangType );
+ String aTmpString;
+ pFormatter->GetOutputString( n, nIndex, aTmpString, &pColor );
+ *p->pOUString = aTmpString;
+ delete pFormatter;
+#endif
+ break;
+#ifndef DOS
+ }
+#endif
+ case SbxOBJECT:
+ {
+ SbxValue* pVal = PTR_CAST(SbxValue,p->pObj);
+ if( pVal )
+ pVal->PutDate( n );
+ else
+ SbxBase::SetError( SbxERR_NO_OBJECT );
+ break;
+ }
+ case SbxBYREF | SbxCHAR:
+ if( n > SbxMAXCHAR )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = SbxMAXCHAR;
+ }
+ else if( n < SbxMINCHAR )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = SbxMINCHAR;
+ }
+ *p->pChar = (xub_Unicode) n; break;
+ case SbxBYREF | SbxBYTE:
+ if( n > SbxMAXBYTE )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = SbxMAXBYTE;
+ }
+ else if( n < 0 )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = 0;
+ }
+ *p->pByte = (BYTE) n; break;
+ case SbxBYREF | SbxINTEGER:
+ case SbxBYREF | SbxBOOL:
+ if( n > SbxMAXINT )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = SbxMAXINT;
+ }
+ else if( n < SbxMININT )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = SbxMININT;
+ }
+ *p->pInteger = (INT16) n; break;
+ case SbxBYREF | SbxERROR:
+ case SbxBYREF | SbxUSHORT:
+ if( n > SbxMAXUINT )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = SbxMAXUINT;
+ }
+ else if( n < 0 )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = 0;
+ }
+ *p->pUShort = (UINT16) n; break;
+ case SbxBYREF | SbxLONG:
+ if( n > SbxMAXLNG )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = SbxMAXLNG;
+ }
+ else if( n < SbxMINLNG )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = SbxMINLNG;
+ }
+ *p->pLong = (INT32) n; break;
+ case SbxBYREF | SbxULONG:
+ if( n > SbxMAXULNG )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = SbxMAXULNG;
+ }
+ else if( n < 0 )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = 0;
+ }
+ *p->pULong = (UINT32) n; break;
+ case SbxBYREF | SbxSINGLE:
+ if( n > SbxMAXSNG )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = SbxMAXSNG;
+ }
+ else if( n < SbxMINSNG )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = SbxMINSNG;
+ }
+ *p->pSingle = (float) n; break;
+ case SbxBYREF | SbxSALINT64:
+ *p->pnInt64 = ImpDoubleToSalInt64( n ); break;
+ case SbxBYREF | SbxSALUINT64:
+ *p->puInt64 = ImpDoubleToSalUInt64( n ); break;
+ case SbxBYREF | SbxDATE:
+ case SbxBYREF | SbxDOUBLE:
+ *p->pDouble = (double) n; break;
+ case SbxBYREF | SbxCURRENCY:
+ if( n > SbxMAXCURR )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = SbxMAXCURR;
+ }
+ else if( n < SbxMINCURR )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = SbxMINCURR;
+ }
+ *p->pLong64 = ImpDoubleToCurrency( n ); break;
+
+ default:
+ SbxBase::SetError( SbxERR_CONVERSION );
+ }
+}
+
diff --git a/basic/source/sbx/sbxdbl.cxx b/basic/source/sbx/sbxdbl.cxx
new file mode 100644
index 000000000000..be55d3409131
--- /dev/null
+++ b/basic/source/sbx/sbxdbl.cxx
@@ -0,0 +1,306 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+#include <tools/errcode.hxx>
+#include <basic/sbx.hxx>
+#include "sbxconv.hxx"
+#include "runtime.hxx"
+
+double ImpGetDouble( const SbxValues* p )
+{
+ double nRes;
+ switch( +p->eType )
+ {
+ case SbxNULL:
+ SbxBase::SetError( SbxERR_CONVERSION );
+ case SbxEMPTY:
+ nRes = 0; break;
+ case SbxCHAR:
+ nRes = p->nChar; break;
+ case SbxBYTE:
+ nRes = p->nByte; break;
+ case SbxINTEGER:
+ case SbxBOOL:
+ nRes = p->nInteger; break;
+ case SbxERROR:
+ case SbxUSHORT:
+ nRes = p->nUShort; break;
+ case SbxLONG:
+ nRes = p->nLong; break;
+ case SbxULONG:
+ nRes = p->nULong; break;
+ case SbxSINGLE:
+ nRes = p->nSingle; break;
+ case SbxDATE:
+ case SbxDOUBLE:
+ nRes = p->nDouble; break;
+ case SbxCURRENCY:
+ nRes = ImpCurrencyToDouble( p->nLong64 ); break;
+ case SbxSALINT64:
+ nRes = static_cast< double >(p->nInt64); break;
+ case SbxSALUINT64:
+ nRes = ImpSalUInt64ToDouble( p->uInt64 ); break;
+ case SbxDECIMAL:
+ case SbxBYREF | SbxDECIMAL:
+ if( p->pDecimal )
+ p->pDecimal->getDouble( nRes );
+ else
+ nRes = 0.0;
+ break;
+ case SbxBYREF | SbxSTRING:
+ case SbxSTRING:
+ case SbxLPSTR:
+ if( !p->pOUString )
+ {
+ nRes = 0;
+ if ( SbiRuntime::isVBAEnabled() )// VBA only behaviour
+ SbxBase::SetError( SbxERR_CONVERSION );
+ }
+ else
+ {
+ double d;
+ SbxDataType t;
+ if( ImpScan( *p->pOUString, d, t, NULL ) != SbxERR_OK )
+ {
+ nRes = 0;
+ if ( SbiRuntime::isVBAEnabled() )// VBA only behaviour
+ SbxBase::SetError( SbxERR_CONVERSION );
+ }
+ else
+ nRes = d;
+ }
+ break;
+ case SbxOBJECT:
+ {
+ SbxValue* pVal = PTR_CAST(SbxValue,p->pObj);
+ if( pVal )
+ nRes = pVal->GetDouble();
+ else
+ {
+ SbxBase::SetError( SbxERR_NO_OBJECT ); nRes = 0;
+ }
+ break;
+ }
+
+ case SbxBYREF | SbxCHAR:
+ nRes = *p->pChar; break;
+ case SbxBYREF | SbxBYTE:
+ nRes = *p->pByte; break;
+ case SbxBYREF | SbxINTEGER:
+ case SbxBYREF | SbxBOOL:
+ nRes = *p->pInteger; break;
+ case SbxBYREF | SbxLONG:
+ nRes = *p->pLong; break;
+ case SbxBYREF | SbxULONG:
+ nRes = *p->pULong; break;
+ case SbxBYREF | SbxERROR:
+ case SbxBYREF | SbxUSHORT:
+ nRes = *p->pUShort; break;
+ case SbxBYREF | SbxSINGLE:
+ nRes = *p->pSingle; break;
+ case SbxBYREF | SbxDATE:
+ case SbxBYREF | SbxDOUBLE:
+ nRes = *p->pDouble; break;
+ case SbxBYREF | SbxCURRENCY:
+ nRes = ImpCurrencyToDouble( *p->pLong64 ); break;
+ case SbxBYREF | SbxSALINT64:
+ nRes = static_cast< double >(*p->pnInt64); break;
+ case SbxBYREF | SbxSALUINT64:
+ nRes = ImpSalUInt64ToDouble( *p->puInt64 ); break;
+
+ default:
+ SbxBase::SetError( SbxERR_CONVERSION ); nRes = 0;
+ }
+ return nRes;
+}
+
+void ImpPutDouble( SbxValues* p, double n, BOOL bCoreString )
+{
+ SbxValues aTmp;
+start:
+ switch( +p->eType )
+ {
+ // Hier sind Tests notwendig
+ case SbxCHAR:
+ aTmp.pChar = &p->nChar; goto direct;
+ case SbxBYTE:
+ aTmp.pByte = &p->nByte; goto direct;
+ case SbxINTEGER:
+ case SbxBOOL:
+ aTmp.pInteger = &p->nInteger; goto direct;
+ case SbxLONG:
+ case SbxCURRENCY:
+ aTmp.pLong = &p->nLong; goto direct;
+ case SbxULONG:
+ aTmp.pULong = &p->nULong; goto direct;
+ case SbxERROR:
+ case SbxUSHORT:
+ aTmp.pUShort = &p->nUShort; goto direct;
+ case SbxSINGLE:
+ aTmp.pSingle = &p->nSingle; goto direct;
+ case SbxDECIMAL:
+ case SbxBYREF | SbxDECIMAL:
+ {
+ SbxDecimal* pDec = ImpCreateDecimal( p );
+ if( !pDec->setDouble( n ) )
+ SbxBase::SetError( SbxERR_OVERFLOW );
+ break;
+ }
+ direct:
+ aTmp.eType = SbxDataType( p->eType | SbxBYREF );
+ p = &aTmp; goto start;
+
+ // ab hier nicht mehr
+ case SbxSALINT64:
+ p->nInt64 = ImpDoubleToSalInt64( n ); break;
+ case SbxSALUINT64:
+ p->uInt64 = ImpDoubleToSalUInt64( n ); break;
+ case SbxDATE:
+ case SbxDOUBLE:
+ p->nDouble = n; break;
+
+ case SbxBYREF | SbxSTRING:
+ case SbxSTRING:
+ case SbxLPSTR:
+ if( !p->pOUString )
+ p->pOUString = new ::rtl::OUString;
+ ImpCvtNum( (double) n, 14, *p->pOUString, bCoreString );
+ break;
+ case SbxOBJECT:
+ {
+ SbxValue* pVal = PTR_CAST(SbxValue,p->pObj);
+ if( pVal )
+ pVal->PutDouble( n );
+ else
+ SbxBase::SetError( SbxERR_NO_OBJECT );
+ break;
+ }
+ case SbxBYREF | SbxCHAR:
+ if( n > SbxMAXCHAR )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = SbxMAXCHAR;
+ }
+ else if( n < SbxMINCHAR )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = SbxMINCHAR;
+ }
+ *p->pChar = (xub_Unicode) n; break;
+ case SbxBYREF | SbxBYTE:
+ if( n > SbxMAXBYTE )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = SbxMAXBYTE;
+ }
+ else if( n < 0 )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = 0;
+ }
+ *p->pByte = (BYTE) n; break;
+ case SbxBYREF | SbxINTEGER:
+ case SbxBYREF | SbxBOOL:
+ if( n > SbxMAXINT )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = SbxMAXINT;
+ }
+ else if( n < SbxMININT )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = SbxMININT;
+ }
+ *p->pInteger = (INT16) n; break;
+ case SbxBYREF | SbxERROR:
+ case SbxBYREF | SbxUSHORT:
+ if( n > SbxMAXUINT )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = SbxMAXUINT;
+ }
+ else if( n < 0 )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = 0;
+ }
+ *p->pUShort = (UINT16) n; break;
+ case SbxBYREF | SbxLONG:
+ if( n > SbxMAXLNG )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = SbxMAXLNG;
+ }
+ else if( n < SbxMINLNG )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = SbxMINLNG;
+ }
+ *p->pLong = (INT32) n; break;
+ case SbxBYREF | SbxULONG:
+ if( n > SbxMAXULNG )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = SbxMAXULNG;
+ }
+ else if( n < 0 )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = 0;
+ }
+ *p->pULong = (UINT32) n; break;
+ case SbxBYREF | SbxSINGLE:
+ if( n > SbxMAXSNG )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = SbxMAXSNG;
+ }
+ else if( n < SbxMINSNG )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = SbxMINSNG;
+ }
+ else if( n > 0 && n < SbxMAXSNG2 )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = SbxMAXSNG2;
+ }
+ else if( n < 0 && n > SbxMINSNG2 )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = SbxMINSNG2;
+ }
+ *p->pSingle = (float) n; break;
+ case SbxBYREF | SbxSALINT64:
+ *p->pnInt64 = ImpDoubleToSalInt64( n ); break;
+ case SbxBYREF | SbxSALUINT64:
+ *p->puInt64 = ImpDoubleToSalUInt64( n ); break;
+ case SbxBYREF | SbxDATE:
+ case SbxBYREF | SbxDOUBLE:
+ *p->pDouble = (double) n; break;
+ case SbxBYREF | SbxCURRENCY:
+ if( n > SbxMAXCURR )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = SbxMAXCURR;
+ }
+ else if( n < SbxMINCURR )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = SbxMINCURR;
+ }
+ *p->pLong64 = ImpDoubleToCurrency( n ); break;
+
+ default:
+ SbxBase::SetError( SbxERR_CONVERSION );
+ }
+}
+
diff --git a/basic/source/sbx/sbxdec.cxx b/basic/source/sbx/sbxdec.cxx
new file mode 100644
index 000000000000..2191d91c8d82
--- /dev/null
+++ b/basic/source/sbx/sbxdec.cxx
@@ -0,0 +1,797 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+#include <tools/errcode.hxx>
+
+#include <basic/sbx.hxx>
+#include "sbxconv.hxx"
+
+#include <com/sun/star/bridge/oleautomation/Decimal.hpp>
+
+
+// int GnDecCounter = 0;
+
+// Implementation SbxDecimal
+SbxDecimal::SbxDecimal( void )
+{
+ setInt( 0 );
+ mnRefCount = 0;
+ // GnDecCounter++;
+}
+
+SbxDecimal::SbxDecimal( const SbxDecimal& rDec )
+{
+#ifdef WIN32
+ maDec = rDec.maDec;
+#else
+ (void)rDec;
+#endif
+ mnRefCount = 0;
+ // GnDecCounter++;
+}
+
+SbxDecimal::SbxDecimal
+ ( const com::sun::star::bridge::oleautomation::Decimal& rAutomationDec )
+{
+#ifdef WIN32
+ maDec.scale = rAutomationDec.Scale;
+ maDec.sign = rAutomationDec.Sign;
+ maDec.Lo32 = rAutomationDec.LowValue;
+ maDec.Mid32 = rAutomationDec.MiddleValue;
+ maDec.Hi32 = rAutomationDec.HighValue;
+#else
+ (void)rAutomationDec;
+#endif
+ mnRefCount = 0;
+ // GnDecCounter++;
+}
+
+void SbxDecimal::fillAutomationDecimal
+ ( com::sun::star::bridge::oleautomation::Decimal& rAutomationDec )
+{
+#ifdef WIN32
+ rAutomationDec.Scale = maDec.scale;
+ rAutomationDec.Sign = maDec.sign;
+ rAutomationDec.LowValue = maDec.Lo32;
+ rAutomationDec.MiddleValue = maDec.Mid32;
+ rAutomationDec.HighValue = maDec.Hi32;
+#else
+ (void)rAutomationDec;
+#endif
+}
+
+SbxDecimal::~SbxDecimal()
+{
+ // GnDecCounter--;
+}
+
+void releaseDecimalPtr( SbxDecimal*& rpDecimal )
+{
+ if( rpDecimal )
+ {
+ rpDecimal->mnRefCount--;
+ if( rpDecimal->mnRefCount == 0 )
+ {
+ delete rpDecimal;
+ rpDecimal = NULL;
+ }
+ }
+}
+
+#ifdef WIN32
+
+bool SbxDecimal::operator -= ( const SbxDecimal &r )
+{
+ HRESULT hResult = VarDecSub( &maDec, (LPDECIMAL)&r.maDec, &maDec );
+ bool bRet = ( hResult == S_OK );
+ return bRet;
+}
+
+bool SbxDecimal::operator += ( const SbxDecimal &r )
+{
+ HRESULT hResult = VarDecAdd( &maDec, (LPDECIMAL)&r.maDec, &maDec );
+ bool bRet = ( hResult == S_OK );
+ return bRet;
+}
+
+bool SbxDecimal::operator /= ( const SbxDecimal &r )
+{
+ HRESULT hResult = VarDecDiv( &maDec, (LPDECIMAL)&r.maDec, &maDec );
+ bool bRet = ( hResult == S_OK );
+ return bRet;
+}
+
+bool SbxDecimal::operator *= ( const SbxDecimal &r )
+{
+ HRESULT hResult = VarDecMul( &maDec, (LPDECIMAL)&r.maDec, &maDec );
+ bool bRet = ( hResult == S_OK );
+ return bRet;
+}
+
+bool SbxDecimal::neg( void )
+{
+ HRESULT hResult = VarDecNeg( &maDec, &maDec );
+ bool bRet = ( hResult == S_OK );
+ return bRet;
+}
+
+bool SbxDecimal::isZero( void )
+{
+ SbxDecimal aZeroDec;
+ aZeroDec.setLong( 0 );
+ bool bZero = ( EQ == compare( *this, aZeroDec ) );
+ return bZero;
+}
+
+SbxDecimal::CmpResult compare( const SbxDecimal &rLeft, const SbxDecimal &rRight )
+{
+ HRESULT hResult = VarDecCmp( (LPDECIMAL)&rLeft.maDec, (LPDECIMAL)&rRight.maDec );
+ SbxDecimal::CmpResult eRes = (SbxDecimal::CmpResult)hResult;
+ return eRes;
+}
+
+void SbxDecimal::setChar( sal_Unicode val )
+{
+ VarDecFromUI2( (USHORT)val, &maDec );
+}
+
+void SbxDecimal::setByte( BYTE val )
+{
+ VarDecFromUI1( (BYTE)val, &maDec );
+}
+
+void SbxDecimal::setShort( INT16 val )
+{
+ VarDecFromI2( (short)val, &maDec );
+}
+
+void SbxDecimal::setLong( INT32 val )
+{
+ VarDecFromI4( (long)val, &maDec );
+}
+
+void SbxDecimal::setUShort( UINT16 val )
+{
+ VarDecFromUI2( (USHORT)val, &maDec );
+}
+
+void SbxDecimal::setULong( UINT32 val )
+{
+ VarDecFromUI4( (ULONG)val, &maDec );
+}
+
+bool SbxDecimal::setSingle( float val )
+{
+ bool bRet = ( VarDecFromR4( val, &maDec ) == S_OK );
+ return bRet;
+}
+
+bool SbxDecimal::setDouble( double val )
+{
+ bool bRet = ( VarDecFromR8( val, &maDec ) == S_OK );
+ return bRet;
+}
+
+void SbxDecimal::setInt( int val )
+{
+ setLong( (INT32)val );
+}
+
+void SbxDecimal::setUInt( unsigned int val )
+{
+ setULong( (UINT32)val );
+}
+
+// sbxscan.cxx
+void ImpGetIntntlSep( sal_Unicode& rcDecimalSep, sal_Unicode& rcThousandSep );
+
+bool SbxDecimal::setString( ::rtl::OUString* pOUString )
+{
+ static LCID nLANGID = MAKELANGID( LANG_ENGLISH, SUBLANG_ENGLISH_US );
+
+ // Convert delimiter
+ sal_Unicode cDecimalSep;
+ sal_Unicode cThousandSep;
+ ImpGetIntntlSep( cDecimalSep, cThousandSep );
+
+ bool bRet = false;
+ HRESULT hResult;
+ if( cDecimalSep != '.' || cThousandSep != ',' )
+ {
+ int nLen = pOUString->getLength();
+ sal_Unicode* pBuffer = new sal_Unicode[nLen + 1];
+ pBuffer[nLen] = 0;
+
+ const sal_Unicode* pSrc = pOUString->getStr();
+ int i;
+ for( i = 0 ; i < nLen ; ++i )
+ pBuffer[i] = pSrc[i];
+
+ sal_Unicode c;
+ i = 0;
+ while( (c = pBuffer[i]) != 0 )
+ {
+ if( c == cDecimalSep )
+ pBuffer[i] = '.';
+ else if( c == cThousandSep )
+ pBuffer[i] = ',';
+ i++;
+ }
+ hResult = VarDecFromStr( (OLECHAR*)pBuffer, nLANGID, 0, &maDec );
+ delete pBuffer;
+ }
+ else
+ {
+ hResult = VarDecFromStr( (OLECHAR*)pOUString->getStr(), nLANGID, 0, &maDec );
+ }
+ bRet = ( hResult == S_OK );
+ return bRet;
+}
+
+
+bool SbxDecimal::getChar( sal_Unicode& rVal )
+{
+ bool bRet = ( VarUI2FromDec( &maDec, &rVal ) == S_OK );
+ return bRet;
+}
+
+bool SbxDecimal::getByte( BYTE& rVal )
+{
+ bool bRet = ( VarUI1FromDec( &maDec, &rVal ) == S_OK );
+ return bRet;
+}
+
+bool SbxDecimal::getShort( INT16& rVal )
+{
+ bool bRet = ( VarI2FromDec( &maDec, &rVal ) == S_OK );
+ return bRet;
+}
+
+bool SbxDecimal::getLong( INT32& rVal )
+{
+ bool bRet = ( VarI4FromDec( &maDec, &rVal ) == S_OK );
+ return bRet;
+}
+
+bool SbxDecimal::getUShort( UINT16& rVal )
+{
+ bool bRet = ( VarUI2FromDec( &maDec, &rVal ) == S_OK );
+ return bRet;
+}
+
+bool SbxDecimal::getULong( UINT32& rVal )
+{
+ bool bRet = ( VarUI4FromDec( &maDec, &rVal ) == S_OK );
+ return bRet;
+}
+
+bool SbxDecimal::getSingle( float& rVal )
+{
+ bool bRet = ( VarR4FromDec( &maDec, &rVal ) == S_OK );
+ return bRet;
+}
+
+bool SbxDecimal::getDouble( double& rVal )
+{
+ bool bRet = ( VarR8FromDec( &maDec, &rVal ) == S_OK );
+ return bRet;
+}
+
+bool SbxDecimal::getInt( int& rVal )
+{
+ INT32 TmpVal;
+ bool bRet = getLong( TmpVal );
+ rVal = TmpVal;
+ return bRet;
+}
+
+bool SbxDecimal::getUInt( unsigned int& rVal )
+{
+ UINT32 TmpVal;
+ bool bRet = getULong( TmpVal );
+ rVal = TmpVal;
+ return bRet;
+}
+
+#else
+// !WIN32
+
+bool SbxDecimal::operator -= ( const SbxDecimal &r )
+{
+ (void)r;
+ return false;
+}
+
+bool SbxDecimal::operator += ( const SbxDecimal &r )
+{
+ (void)r;
+ return false;
+}
+
+bool SbxDecimal::operator /= ( const SbxDecimal &r )
+{
+ (void)r;
+ return false;
+}
+
+bool SbxDecimal::operator *= ( const SbxDecimal &r )
+{
+ (void)r;
+ return false;
+}
+
+bool SbxDecimal::neg( void )
+{
+ return false;
+}
+
+bool SbxDecimal::isZero( void )
+{
+ return false;
+}
+
+SbxDecimal::CmpResult compare( const SbxDecimal &rLeft, const SbxDecimal &rRight )
+{
+ (void)rLeft;
+ (void)rRight;
+ return (SbxDecimal::CmpResult)0;
+}
+
+void SbxDecimal::setChar( sal_Unicode val ) { (void)val; }
+void SbxDecimal::setByte( BYTE val ) { (void)val; }
+void SbxDecimal::setShort( INT16 val ) { (void)val; }
+void SbxDecimal::setLong( INT32 val ) { (void)val; }
+void SbxDecimal::setUShort( UINT16 val ) { (void)val; }
+void SbxDecimal::setULong( UINT32 val ) { (void)val; }
+bool SbxDecimal::setSingle( float val ) { (void)val; return false; }
+bool SbxDecimal::setDouble( double val ) { (void)val; return false; }
+void SbxDecimal::setInt( int val ) { (void)val; }
+void SbxDecimal::setUInt( unsigned int val ) { (void)val; }
+bool SbxDecimal::setString( ::rtl::OUString* pOUString ) { (void)pOUString; return false; }
+
+bool SbxDecimal::getChar( sal_Unicode& rVal ) { (void)rVal; return false; }
+bool SbxDecimal::getByte( BYTE& rVal ) { (void)rVal; return false; }
+bool SbxDecimal::getShort( INT16& rVal ) { (void)rVal; return false; }
+bool SbxDecimal::getLong( INT32& rVal ) { (void)rVal; return false; }
+bool SbxDecimal::getUShort( UINT16& rVal ) { (void)rVal; return false; }
+bool SbxDecimal::getULong( UINT32& rVal ) { (void)rVal; return false; }
+bool SbxDecimal::getSingle( float& rVal ) { (void)rVal; return false; }
+bool SbxDecimal::getDouble( double& rVal ) { (void)rVal; return false; }
+bool SbxDecimal::getInt( int& rVal ) { (void)rVal; return false; }
+bool SbxDecimal::getUInt( unsigned int& rVal ) { (void)rVal; return false; }
+
+#endif
+
+bool SbxDecimal::getString( ::rtl::OUString& rString )
+{
+#ifdef WIN32
+ static LCID nLANGID = MAKELANGID( LANG_ENGLISH, SUBLANG_ENGLISH_US );
+
+ bool bRet = false;
+
+ OLECHAR sz[100];
+ BSTR aBStr = SysAllocString( sz );
+ if( aBStr != NULL )
+ {
+ HRESULT hResult = VarBstrFromDec( &maDec, nLANGID, 0, &aBStr );
+ bRet = ( hResult == S_OK );
+ if( bRet )
+ {
+ // Convert delimiter
+ sal_Unicode cDecimalSep;
+ sal_Unicode cThousandSep;
+ ImpGetIntntlSep( cDecimalSep, cThousandSep );
+
+ if( cDecimalSep != '.' || cThousandSep != ',' )
+ {
+ sal_Unicode c;
+ int i = 0;
+ while( (c = aBStr[i]) != 0 )
+ {
+ if( c == '.' )
+ aBStr[i] = cDecimalSep;
+ else if( c == ',' )
+ aBStr[i] = cThousandSep;
+ i++;
+ }
+ }
+ rString = reinterpret_cast<const sal_Unicode*>(aBStr);
+ }
+
+ SysFreeString( aBStr );
+ }
+ return bRet;
+#else
+ (void)rString;
+ return false;
+#endif
+}
+
+SbxDecimal* ImpCreateDecimal( SbxValues* p )
+{
+#ifdef WIN32
+ if( !p )
+ return NULL;
+
+ SbxDecimal*& rpDecimal = p->pDecimal;
+ if( rpDecimal == NULL )
+ {
+ rpDecimal = new SbxDecimal();
+ rpDecimal->addRef();
+ }
+ return rpDecimal;
+#else
+ (void)p;
+ return NULL;
+#endif
+}
+
+SbxDecimal* ImpGetDecimal( const SbxValues* p )
+{
+#ifdef WIN32
+ SbxValues aTmp;
+ SbxDecimal* pnDecRes;
+
+ SbxDataType eType = p->eType;
+ if( eType == SbxDECIMAL && p->pDecimal )
+ {
+ pnDecRes = new SbxDecimal( *p->pDecimal );
+ pnDecRes->addRef();
+ return pnDecRes;
+ }
+ pnDecRes = new SbxDecimal();
+ pnDecRes->addRef();
+
+start:
+ switch( +eType )
+ {
+ case SbxNULL:
+ SbxBase::SetError( SbxERR_CONVERSION );
+ case SbxEMPTY:
+ pnDecRes->setShort( 0 ); break;
+ case SbxCHAR:
+ pnDecRes->setChar( p->nChar ); break;
+ case SbxBYTE:
+ pnDecRes->setByte( p->nByte ); break;
+ case SbxINTEGER:
+ case SbxBOOL:
+ pnDecRes->setInt( p->nInteger ); break;
+ case SbxERROR:
+ case SbxUSHORT:
+ pnDecRes->setUShort( p->nUShort ); break;
+ case SbxLONG:
+ pnDecRes->setLong( p->nLong ); break;
+ case SbxULONG:
+ pnDecRes->setULong( p->nULong ); break;
+ case SbxSINGLE:
+ if( !pnDecRes->setSingle( p->nSingle ) )
+ SbxBase::SetError( SbxERR_OVERFLOW );
+ break;
+ case SbxSALINT64:
+ {
+ double d = (double)p->nInt64;
+ pnDecRes->setDouble( d );
+ break;
+ }
+ case SbxSALUINT64:
+ {
+ double d = ImpSalUInt64ToDouble( p->uInt64 );
+ pnDecRes->setDouble( d );
+ break;
+ }
+ case SbxDATE:
+ case SbxDOUBLE:
+ case SbxLONG64:
+ case SbxULONG64:
+ case SbxCURRENCY:
+ {
+ double dVal;
+ if( p->eType == SbxCURRENCY )
+ dVal = ImpCurrencyToDouble( p->nLong64 );
+ else if( p->eType == SbxLONG64 )
+ dVal = ImpINT64ToDouble( p->nLong64 );
+ else if( p->eType == SbxULONG64 )
+ dVal = ImpUINT64ToDouble( p->nULong64 );
+ else
+ dVal = p->nDouble;
+
+ if( !pnDecRes->setDouble( dVal ) )
+ SbxBase::SetError( SbxERR_OVERFLOW );
+ break;
+ }
+ case SbxLPSTR:
+ case SbxSTRING:
+ case SbxBYREF | SbxSTRING:
+ pnDecRes->setString( p->pOUString ); break;
+ case SbxOBJECT:
+ {
+ SbxValue* pVal = PTR_CAST(SbxValue,p->pObj);
+ if( pVal )
+ pnDecRes->setDecimal( pVal->GetDecimal() );
+ else
+ {
+ SbxBase::SetError( SbxERR_NO_OBJECT );
+ pnDecRes->setShort( 0 );
+ }
+ break;
+ }
+
+ case SbxBYREF | SbxCHAR:
+ pnDecRes->setChar( *p->pChar ); break;
+ case SbxBYREF | SbxBYTE:
+ pnDecRes->setByte( *p->pByte ); break;
+ case SbxBYREF | SbxINTEGER:
+ case SbxBYREF | SbxBOOL:
+ pnDecRes->setInt( *p->pInteger ); break;
+ case SbxBYREF | SbxLONG:
+ pnDecRes->setLong( *p->pLong ); break;
+ case SbxBYREF | SbxULONG:
+ pnDecRes->setULong( *p->pULong ); break;
+ case SbxBYREF | SbxERROR:
+ case SbxBYREF | SbxUSHORT:
+ pnDecRes->setUShort( *p->pUShort ); break;
+
+ // ab hier muss getestet werden
+ case SbxBYREF | SbxSINGLE:
+ aTmp.nSingle = *p->pSingle; goto ref;
+ case SbxBYREF | SbxDATE:
+ case SbxBYREF | SbxDOUBLE:
+ aTmp.nDouble = *p->pDouble; goto ref;
+ case SbxBYREF | SbxULONG64:
+ aTmp.nULong64 = *p->pULong64; goto ref;
+ case SbxBYREF | SbxLONG64:
+ case SbxBYREF | SbxCURRENCY:
+ aTmp.nLong64 = *p->pLong64; goto ref;
+ case SbxBYREF | SbxSALINT64:
+ aTmp.nInt64 = *p->pnInt64; goto ref;
+ case SbxBYREF | SbxSALUINT64:
+ aTmp.uInt64 = *p->puInt64; goto ref;
+ ref:
+ aTmp.eType = SbxDataType( p->eType & 0x0FFF );
+ p = &aTmp; goto start;
+
+ default:
+ SbxBase::SetError( SbxERR_CONVERSION ); pnDecRes->setShort( 0 );
+ }
+ return pnDecRes;
+#else
+ (void)p;
+ return NULL;
+#endif
+}
+
+
+void ImpPutDecimal( SbxValues* p, SbxDecimal* pDec )
+{
+#ifdef WIN32
+ if( !pDec )
+ return;
+
+ SbxValues aTmp;
+start:
+ switch( +p->eType )
+ {
+ // hier muss getestet werden
+ case SbxCHAR:
+ aTmp.pChar = &p->nChar; goto direct;
+ case SbxBYTE:
+ aTmp.pByte = &p->nByte; goto direct;
+ case SbxULONG:
+ aTmp.pULong = &p->nULong; goto direct;
+ case SbxERROR:
+ case SbxUSHORT:
+ aTmp.pUShort = &p->nUShort; goto direct;
+ case SbxSALUINT64:
+ aTmp.puInt64 = &p->uInt64; goto direct;
+ case SbxINTEGER:
+ case SbxBOOL:
+ aTmp.pInteger = &p->nInteger; goto direct;
+ case SbxLONG:
+ aTmp.pLong = &p->nLong; goto direct;
+ case SbxSALINT64:
+ aTmp.pnInt64 = &p->nInt64; goto direct;
+ case SbxCURRENCY:
+ aTmp.pLong64 = &p->nLong64; goto direct;
+ direct:
+ aTmp.eType = SbxDataType( p->eType | SbxBYREF );
+ p = &aTmp; goto start;
+
+ // ab hier nicht mehr
+ case SbxDECIMAL:
+ case SbxBYREF | SbxDECIMAL:
+ {
+ if( pDec != p->pDecimal )
+ {
+ releaseDecimalPtr( p->pDecimal );
+ // if( p->pDecimal )
+ // p->pDecimal->ReleaseRef();
+ p->pDecimal = pDec;
+ if( pDec )
+ pDec->addRef();
+ }
+ break;
+ }
+ case SbxSINGLE:
+ {
+ float f;
+ pDec->getSingle( f );
+ p->nSingle = f;
+ break;
+ }
+ case SbxDATE:
+ case SbxDOUBLE:
+ {
+ double d;
+ pDec->getDouble( d );
+ p->nDouble = d;
+ break;
+ }
+ case SbxULONG64:
+ {
+ double d;
+ pDec->getDouble( d );
+ p->nULong64 = ImpDoubleToUINT64( d );
+ break;
+ }
+ case SbxLONG64:
+ {
+ double d;
+ pDec->getDouble( d );
+ p->nLong64 = ImpDoubleToINT64( d );
+ break;
+ }
+
+ case SbxLPSTR:
+ case SbxSTRING:
+ case SbxBYREF | SbxSTRING:
+ if( !p->pOUString )
+ p->pOUString = new ::rtl::OUString;
+ // ImpCvtNum( (double) n, 0, *p->pString );
+ pDec->getString( *p->pOUString );
+ break;
+ case SbxOBJECT:
+ {
+ SbxValue* pVal = PTR_CAST(SbxValue,p->pObj);
+ if( pVal )
+ pVal->PutDecimal( pDec );
+ else
+ SbxBase::SetError( SbxERR_NO_OBJECT );
+ break;
+ }
+
+ case SbxBYREF | SbxCHAR:
+ if( !pDec->getChar( *p->pChar ) )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW );
+ *p->pChar = 0;
+ }
+ break;
+ case SbxBYREF | SbxBYTE:
+ if( !pDec->getChar( *p->pChar ) )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW );
+ *p->pByte = 0;
+ }
+ break;
+ case SbxBYREF | SbxINTEGER:
+ case SbxBYREF | SbxBOOL:
+ if( !pDec->getShort( *p->pInteger ) )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW );
+ *p->pInteger = 0;
+ }
+ break;
+ // *p->pInteger = n; break;
+ case SbxBYREF | SbxERROR:
+ case SbxBYREF | SbxUSHORT:
+ if( !pDec->getUShort( *p->pUShort ) )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW );
+ *p->pUShort = 0;
+ }
+ break;
+ case SbxBYREF | SbxLONG:
+ if( !pDec->getLong( *p->pLong ) )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW );
+ *p->pLong = 0;
+ }
+ break;
+ case SbxBYREF | SbxULONG:
+ if( !pDec->getULong( *p->pULong ) )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW );
+ *p->pULong = 0;
+ }
+ break;
+ case SbxBYREF | SbxSALINT64:
+ {
+ double d;
+ if( !pDec->getDouble( d ) )
+ SbxBase::SetError( SbxERR_OVERFLOW );
+ else
+ *p->pnInt64 = ImpDoubleToSalInt64( d );
+ break;
+ }
+ case SbxBYREF | SbxSALUINT64:
+ {
+ double d;
+ if( !pDec->getDouble( d ) )
+ SbxBase::SetError( SbxERR_OVERFLOW );
+ else
+ *p->puInt64 = ImpDoubleToSalUInt64( d );
+ break;
+ }
+ case SbxBYREF | SbxSINGLE:
+ if( !pDec->getSingle( *p->pSingle ) )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW );
+ *p->pSingle = 0;
+ }
+ break;
+ // *p->pSingle = (float) n; break;
+ case SbxBYREF | SbxDATE:
+ case SbxBYREF | SbxDOUBLE:
+ if( !pDec->getDouble( *p->pDouble ) )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW );
+ *p->pDouble = 0;
+ }
+ break;
+ case SbxBYREF | SbxULONG64:
+ {
+ double d;
+ pDec->getDouble( d );
+ *p->pULong64 = ImpDoubleToUINT64( d );
+ break;
+ }
+ case SbxBYREF | SbxLONG64:
+ {
+ double d;
+ pDec->getDouble( d );
+ *p->pLong64 = ImpDoubleToINT64( d );
+ break;
+ }
+ case SbxBYREF | SbxCURRENCY:
+ {
+ double d;
+ pDec->getDouble( d );
+ *p->pLong64 = ImpDoubleToCurrency( d );
+ break;
+ }
+
+ default:
+ SbxBase::SetError( SbxERR_CONVERSION );
+ }
+#else
+ (void)p;
+ (void)pDec;
+#endif
+}
+
diff --git a/basic/source/sbx/sbxdec.hxx b/basic/source/sbx/sbxdec.hxx
new file mode 100644
index 000000000000..cd80bbad282e
--- /dev/null
+++ b/basic/source/sbx/sbxdec.hxx
@@ -0,0 +1,122 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+
+#ifndef __SBX_SBX_DEC_HXX
+#define __SBX_SBX_DEC_HXX
+
+#ifdef WIN32
+
+#undef WB_LEFT
+#undef WB_RIGHT
+#include <tools/prewin.h>
+} // close extern "C" {
+
+#ifndef __MINGW32__
+#include <comutil.h>
+#endif
+#include <oleauto.h>
+
+extern "C" { // reopen extern "C" {
+#include <tools/postwin.h>
+
+#endif
+#endif
+#include <basic/sbx.hxx>
+
+#include <com/sun/star/bridge/oleautomation/Decimal.hpp>
+
+
+// Decimal support
+// Implementation only for windows
+
+class SbxDecimal
+{
+ friend void releaseDecimalPtr( SbxDecimal*& rpDecimal );
+
+#ifdef WIN32
+ DECIMAL maDec;
+#endif
+ INT32 mnRefCount;
+
+public:
+ SbxDecimal( void );
+ SbxDecimal( const SbxDecimal& rDec );
+ SbxDecimal( const com::sun::star::bridge::oleautomation::Decimal& rAutomationDec );
+
+ ~SbxDecimal();
+
+ void addRef( void )
+ { mnRefCount++; }
+
+ void fillAutomationDecimal( com::sun::star::bridge::oleautomation::Decimal& rAutomationDec );
+
+ void setChar( sal_Unicode val );
+ void setByte( BYTE val );
+ void setShort( INT16 val );
+ void setLong( INT32 val );
+ void setUShort( UINT16 val );
+ void setULong( UINT32 val );
+ bool setSingle( float val );
+ bool setDouble( double val );
+ void setInt( int val );
+ void setUInt( unsigned int val );
+ bool setString( ::rtl::OUString* pOUString );
+ void setDecimal( SbxDecimal* pDecimal )
+ {
+#ifdef WIN32
+ if( pDecimal )
+ maDec = pDecimal->maDec;
+#else
+ (void)pDecimal;
+#endif
+ }
+
+ bool getChar( sal_Unicode& rVal );
+ bool getByte( BYTE& rVal );
+ bool getShort( INT16& rVal );
+ bool getLong( INT32& rVal );
+ bool getUShort( UINT16& rVal );
+ bool getULong( UINT32& rVal );
+ bool getSingle( float& rVal );
+ bool getDouble( double& rVal );
+ bool getInt( int& rVal );
+ bool getUInt( unsigned int& rVal );
+ bool getString( ::rtl::OUString& rString );
+
+ bool operator -= ( const SbxDecimal &r );
+ bool operator += ( const SbxDecimal &r );
+ bool operator /= ( const SbxDecimal &r );
+ bool operator *= ( const SbxDecimal &r );
+ bool neg( void );
+
+ bool isZero( void );
+
+ enum CmpResult { LT, EQ, GT };
+ friend CmpResult compare( const SbxDecimal &rLeft, const SbxDecimal &rRight );
+};
+
diff --git a/basic/source/sbx/sbxexec.cxx b/basic/source/sbx/sbxexec.cxx
new file mode 100644
index 000000000000..c602b130fc5e
--- /dev/null
+++ b/basic/source/sbx/sbxexec.cxx
@@ -0,0 +1,401 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+#include <tools/errcode.hxx>
+#ifndef _APP_HXX //autogen
+#include <vcl/svapp.hxx>
+#endif
+#include <basic/sbx.hxx>
+
+
+class SbxSimpleCharClass
+{
+public:
+ BOOL isAlpha( sal_Unicode c ) const
+ {
+ BOOL bRet = (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z');
+ return bRet;
+ }
+
+ BOOL isDigit( sal_Unicode c ) const
+ {
+ BOOL bRet = (c >= '0' && c <= '9');
+ return bRet;
+ }
+
+ BOOL isAlphaNumeric( sal_Unicode c ) const
+ {
+ BOOL bRet = isDigit( c ) || isAlpha( c );
+ return bRet;
+ }
+};
+
+
+static SbxVariable* Element
+ ( SbxObject* pObj, SbxObject* pGbl, const xub_Unicode** ppBuf,
+ SbxClassType, const SbxSimpleCharClass& rCharClass );
+
+static const xub_Unicode* SkipWhitespace( const xub_Unicode* p )
+{
+ while( *p && ( *p == ' ' || *p == '\t' ) )
+ p++;
+ return p;
+}
+
+// Scannen eines Symbol. Das Symbol wird in rSym eingetragen, der Returnwert
+// ist die neue Scanposition. Bei Fehlern ist das Symbol leer.
+
+static const xub_Unicode* Symbol( const xub_Unicode* p, XubString& rSym, const SbxSimpleCharClass& rCharClass )
+{
+ USHORT nLen = 0;
+ // Haben wir ein Sondersymbol?
+ if( *p == '[' )
+ {
+ rSym = ++p;
+ while( *p && *p != ']' )
+ p++, nLen++;
+ p++;
+ }
+ else
+ {
+ // Ein Symbol muss mit einem Buchstaben oder einem Underline beginnen
+ if( !rCharClass.isAlpha( *p ) && *p != '_' )
+ SbxBase::SetError( SbxERR_SYNTAX );
+ else
+ {
+ rSym = p;
+ // Dann darf es Buchstaben, Zahlen oder Underlines enthalten
+ while( *p && (rCharClass.isAlphaNumeric( *p ) || *p == '_') )
+ p++, nLen++;
+ // BASIC-Standard-Suffixe werden ignoriert
+ if( *p && (*p == '%' || *p == '&' || *p == '!' || *p == '#' || *p == '$' ) )
+ p++;
+ }
+ }
+ rSym.Erase( nLen );
+ return p;
+}
+
+// Qualifizierter Name. Element.Element....
+
+static SbxVariable* QualifiedName
+ ( SbxObject* pObj, SbxObject* pGbl, const xub_Unicode** ppBuf, SbxClassType t )
+{
+ static SbxSimpleCharClass aCharClass;
+
+ SbxVariableRef refVar;
+ const xub_Unicode* p = SkipWhitespace( *ppBuf );
+ if( aCharClass.isAlpha( *p ) || *p == '_' || *p == '[' )
+ {
+ // Element einlesen
+ refVar = Element( pObj, pGbl, &p, t, aCharClass );
+ while( refVar.Is() && (*p == '.' || *p == '!') )
+ {
+ // Es folgt noch ein Objektelement. Das aktuelle Element
+ // muss also ein SBX-Objekt sein oder liefern!
+ pObj = PTR_CAST(SbxObject,(SbxVariable*) refVar);
+ if( !pObj )
+ // Dann muss es ein Objekt liefern
+ pObj = PTR_CAST(SbxObject,refVar->GetObject());
+ refVar.Clear();
+ if( !pObj )
+ break;
+ p++;
+ // Und das naechste Element bitte
+ refVar = Element( pObj, pGbl, &p, t, aCharClass );
+ }
+ }
+ else
+ SbxBase::SetError( SbxERR_SYNTAX );
+ *ppBuf = p;
+ if( refVar.Is() )
+ refVar->AddRef();
+ return refVar;
+}
+
+// Einlesen eines Operanden. Dies kann eine Zahl, ein String oder
+// eine Funktion (mit optionalen Parametern) sein.
+
+static SbxVariable* Operand
+ ( SbxObject* pObj, SbxObject* pGbl, const xub_Unicode** ppBuf, BOOL bVar )
+{
+ static SbxSimpleCharClass aCharClass;
+
+ SbxVariableRef refVar( new SbxVariable );
+ const xub_Unicode* p = SkipWhitespace( *ppBuf );
+ if( !bVar && ( aCharClass.isDigit( *p )
+ || ( *p == '.' && aCharClass.isDigit( *( p+1 ) ) )
+ || *p == '-'
+ || *p == '&' ) )
+ {
+ // Eine Zahl kann direkt eingescant werden!
+ USHORT nLen;
+ if( !refVar->Scan( XubString( p ), &nLen ) )
+ refVar.Clear();
+ else
+ p += nLen;
+ }
+ else if( !bVar && *p == '"' )
+ {
+ // Ein String
+ XubString aString;
+ p++;
+ for( ;; )
+ {
+ // Das ist wohl ein Fehler
+ if( !*p )
+ return NULL;
+ // Doppelte Quotes sind OK
+ if( *p == '"' )
+ if( *++p != '"' )
+ break;
+ aString += *p++;
+ }
+ refVar->PutString( aString );
+ }
+ else
+ refVar = QualifiedName( pObj, pGbl, &p, SbxCLASS_DONTCARE );
+ *ppBuf = p;
+ if( refVar.Is() )
+ refVar->AddRef();
+ return refVar;
+}
+
+// Einlesen einer einfachen Term. Die Operatoren +, -, * und /
+// werden unterstuetzt.
+
+static SbxVariable* MulDiv( SbxObject* pObj, SbxObject* pGbl, const xub_Unicode** ppBuf )
+{
+ const xub_Unicode* p = *ppBuf;
+ SbxVariableRef refVar( Operand( pObj, pGbl, &p, FALSE ) );
+ p = SkipWhitespace( p );
+ while( refVar.Is() && ( *p == '*' || *p == '/' ) )
+ {
+ xub_Unicode cOp = *p++;
+ SbxVariableRef refVar2( Operand( pObj, pGbl, &p, FALSE ) );
+ if( refVar2.Is() )
+ {
+ // temporaere Variable!
+ SbxVariable* pVar = refVar;
+ pVar = new SbxVariable( *pVar );
+ refVar = pVar;
+ if( cOp == '*' )
+ *refVar *= *refVar2;
+ else
+ *refVar /= *refVar2;
+ }
+ else
+ {
+ refVar.Clear();
+ break;
+ }
+ }
+ *ppBuf = p;
+ if( refVar.Is() )
+ refVar->AddRef();
+ return refVar;
+}
+
+static SbxVariable* PlusMinus( SbxObject* pObj, SbxObject* pGbl, const xub_Unicode** ppBuf )
+{
+ const xub_Unicode* p = *ppBuf;
+ SbxVariableRef refVar( MulDiv( pObj, pGbl, &p ) );
+ p = SkipWhitespace( p );
+ while( refVar.Is() && ( *p == '+' || *p == '-' ) )
+ {
+ xub_Unicode cOp = *p++;
+ SbxVariableRef refVar2( MulDiv( pObj, pGbl, &p ) );
+ if( refVar2.Is() )
+ {
+ // temporaere Variable!
+ SbxVariable* pVar = refVar;
+ pVar = new SbxVariable( *pVar );
+ refVar = pVar;
+ if( cOp == '+' )
+ *refVar += *refVar2;
+ else
+ *refVar -= *refVar2;
+ }
+ else
+ {
+ refVar.Clear();
+ break;
+ }
+ }
+ *ppBuf = p;
+ if( refVar.Is() )
+ refVar->AddRef();
+ return refVar;
+}
+
+static SbxVariable* Assign( SbxObject* pObj, SbxObject* pGbl, const xub_Unicode** ppBuf )
+{
+ const xub_Unicode* p = *ppBuf;
+ SbxVariableRef refVar( Operand( pObj, pGbl, &p, TRUE ) );
+ p = SkipWhitespace( p );
+ if( refVar.Is() )
+ {
+ if( *p == '=' )
+ {
+ // Nur auf Props zuweisen!
+ if( refVar->GetClass() != SbxCLASS_PROPERTY )
+ {
+ SbxBase::SetError( SbxERR_BAD_ACTION );
+ refVar.Clear();
+ }
+ else
+ {
+ p++;
+ SbxVariableRef refVar2( PlusMinus( pObj, pGbl, &p ) );
+ if( refVar2.Is() )
+ {
+ SbxVariable* pVar = refVar;
+ SbxVariable* pVar2 = refVar2;
+ *pVar = *pVar2;
+ pVar->SetParameters( NULL );
+ }
+ }
+ }
+ else
+ // Einfacher Aufruf: einmal aktivieren
+ refVar->Broadcast( SBX_HINT_DATAWANTED );
+ }
+ *ppBuf = p;
+ if( refVar.Is() )
+ refVar->AddRef();
+ return refVar;
+}
+
+// Einlesen eines Elements. Dies ist ein Symbol, optional gefolgt
+// von einer Parameterliste. Das Symbol wird im angegebenen Objekt
+// gesucht und die Parameterliste wird ggf. angefuegt.
+
+static SbxVariable* Element
+ ( SbxObject* pObj, SbxObject* pGbl, const xub_Unicode** ppBuf,
+ SbxClassType t, const SbxSimpleCharClass& rCharClass )
+{
+ XubString aSym;
+ const xub_Unicode* p = Symbol( *ppBuf, aSym, rCharClass );
+ SbxVariableRef refVar;
+ if( aSym.Len() )
+ {
+ USHORT nOld = pObj->GetFlags();
+ if( pObj == pGbl )
+ pObj->SetFlag( SBX_GBLSEARCH );
+ refVar = pObj->Find( aSym, t );
+ pObj->SetFlags( nOld );
+ if( refVar.Is() )
+ {
+ refVar->SetParameters( NULL );
+ // folgen noch Parameter?
+ p = SkipWhitespace( p );
+ if( *p == '(' )
+ {
+ p++;
+ SbxArrayRef refPar = new SbxArray;
+ USHORT nArg = 0;
+ // Wird sind mal relaxed und akzeptieren auch
+ // das Zeilen- oder Komandoende als Begrenzer
+ // Parameter immer global suchen!
+ while( *p && *p != ')' && *p != ']' )
+ {
+ SbxVariableRef refArg = PlusMinus( pGbl, pGbl, &p );
+ if( !refArg )
+ {
+ // Fehler beim Parsing
+ refVar.Clear(); break;
+ }
+ else
+ {
+ // Man kopiere den Parameter, damit
+ // man den aktuellen Zustand hat (loest auch
+ // den Aufruf per Zugriff aus)
+ SbxVariable* pArg = refArg;
+ refPar->Put( new SbxVariable( *pArg ), ++nArg );
+ }
+ p = SkipWhitespace( p );
+ if( *p == ',' )
+ p++;
+ }
+ if( *p == ')' )
+ p++;
+ if( refVar.Is() )
+ refVar->SetParameters( refPar );
+ }
+ }
+ else
+ SbxBase::SetError( SbxERR_NO_METHOD );
+ }
+ *ppBuf = p;
+ if( refVar.Is() )
+ refVar->AddRef();
+ return refVar;
+}
+
+// Hauptroutine
+
+SbxVariable* SbxObject::Execute( const XubString& rTxt )
+{
+ SbxVariable* pVar = NULL;
+ const xub_Unicode* p = rTxt.GetBuffer();
+ for( ;; )
+ {
+ p = SkipWhitespace( p );
+ if( !*p )
+ break;
+ if( *p++ != '[' )
+ {
+ SetError( SbxERR_SYNTAX ); break;
+ }
+ pVar = Assign( this, this, &p );
+ if( !pVar )
+ break;
+ p = SkipWhitespace( p );
+ if( *p++ != ']' )
+ {
+ SetError( SbxERR_SYNTAX ); break;
+ }
+ }
+ return pVar;
+}
+
+SbxVariable* SbxObject::FindQualified( const XubString& rName, SbxClassType t )
+{
+ SbxVariable* pVar = NULL;
+ const xub_Unicode* p = rName.GetBuffer();
+ p = SkipWhitespace( p );
+ if( !*p )
+ return NULL;;
+ pVar = QualifiedName( this, this, &p, t );
+ p = SkipWhitespace( p );
+ if( *p )
+ SetError( SbxERR_SYNTAX );
+ return pVar;
+}
+
diff --git a/basic/source/sbx/sbxform.cxx b/basic/source/sbx/sbxform.cxx
new file mode 100644
index 000000000000..b53612f1e642
--- /dev/null
+++ b/basic/source/sbx/sbxform.cxx
@@ -0,0 +1,1168 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+
+#include <stdlib.h>
+
+#include <basic/sbxform.hxx>
+
+/*
+TODO: gibt es noch irgend welche Star-Basic Besonderheiten ?
+
+ was bedeutet: * als Platzhalter
+
+BEMERKUNG: Visual-Basic behandelt folgende (ung"ultige) Format-Strings
+ wie angezeigt:
+
+ ##0##.##0## --> ##000.000##
+
+ (diese Klasse verh"alt sich genau so).
+*/
+
+#include <stdio.h> // f"ur: sprintf()
+#include <float.h> // f"ur: DBL_DIG, DBL_EPSILON
+#include <math.h> // f"ur: floor(), fabs(), log10(), pow()
+
+//=================================================================
+//=========================== DEFINES =============================
+//=================================================================
+
+#define _NO_DIGIT -1
+
+#define MAX_NO_OF_EXP_DIGITS 5
+ // +4 wegen dem Wertebereich: zwischen -308 und +308
+ // +1 f"ur abschliessende 0
+#define MAX_NO_OF_DIGITS DBL_DIG
+#define MAX_DOUBLE_BUFFER_LENGTH MAX_NO_OF_DIGITS + 9
+ // +1 f"ur Vorzeichen
+ // +1 f"ur Ziffer vor dem Dezimal-Punkt
+ // +1 f"ur Dezimal-Punkt
+ // +2 f"ur Exponent E und Exp. Vorzeichen
+ // +3 f"ur den Wert des Exponenten
+ // +1 f"ur abschliessende 0
+
+// Defines f"ur die Ziffern:
+#define ASCII_0 '0' // 48
+#define ASCII_9 '9' // 57
+
+#define CREATE_1000SEP_CHAR '@'
+
+#define FORMAT_SEPARATOR ';'
+
+// vordefinierte Formate f"ur den Format$()-Befehl:
+#define BASICFORMAT_GENERALNUMBER "General Number"
+#define BASICFORMAT_CURRENCY "Currency"
+#define BASICFORMAT_FIXED "Fixed"
+#define BASICFORMAT_STANDARD "Standard"
+#define BASICFORMAT_PERCENT "Percent"
+#define BASICFORMAT_SCIENTIFIC "Scientific"
+#define BASICFORMAT_YESNO "Yes/No"
+#define BASICFORMAT_TRUEFALSE "True/False"
+#define BASICFORMAT_ONOFF "On/Off"
+
+#define EMPTYFORMATSTRING ""
+
+// Bem.: Visual-Basic hat bei Floating-Point-Zahlen maximal 12 Stellen
+// nach dem Dezimal-Punkt.
+// Alle Format-Strings sind kompatibel zu Visual-Basic:
+#define GENERALNUMBER_FORMAT "0.############"
+ // max. 12 Stellen in Visual-Basic !
+#define CURRENCY_FORMAT "@$0.00;@($0.00)"
+#define FIXED_FORMAT "0.00"
+#define STANDARD_FORMAT "@0.00"
+#define PERCENT_FORMAT "0.00%"
+#define SCIENTIFIC_FORMAT "#.00E+00"
+// BEMERKUNG: das Zeichen @ bedeutet, das Tausender-Separatoren erzeugt
+// weden sollen. Dies ist eine StarBasic 'Erweiterung'.
+
+//=================================================================
+
+// zur Bestimmung der Anzahl Stellen in dNumber
+double get_number_of_digits( double dNumber )
+//double floor_log10_fabs( double dNumber )
+{
+ if( dNumber==0.0 )
+ // 0 hat zumindest auch eine Stelle !
+ return 0.0; //ehemals 1.0, jetzt 0.0 wegen #40025;
+ else
+ return floor( log10( fabs( dNumber ) ) );
+}
+
+//=================================================================
+//======================= IMPLEMENTATION ==========================
+//=================================================================
+
+SbxBasicFormater::SbxBasicFormater( sal_Unicode _cDecPoint, sal_Unicode _cThousandSep,
+ String _sOnStrg,
+ String _sOffStrg,
+ String _sYesStrg,
+ String _sNoStrg,
+ String _sTrueStrg,
+ String _sFalseStrg,
+ String _sCurrencyStrg,
+ String _sCurrencyFormatStrg )
+{
+ cDecPoint = _cDecPoint;
+ cThousandSep = _cThousandSep;
+ sOnStrg = _sOnStrg;
+ sOffStrg = _sOffStrg;
+ sYesStrg = _sYesStrg;
+ sNoStrg = _sNoStrg;
+ sTrueStrg = _sTrueStrg;
+ sFalseStrg = _sFalseStrg;
+ sCurrencyStrg = _sCurrencyStrg;
+ sCurrencyFormatStrg = _sCurrencyFormatStrg;
+}
+
+// Funktion zur Ausgabe eines Fehler-Textes (zum Debuggen)
+/*
+void SbxBasicFormater::ShowError( char * sErrMsg )
+{
+// cout << "ERROR in Format$(): " << sErrMsg << endl;
+}
+*/
+// verschiebt alle Zeichen des Strings, angefangen von der nStartPos,
+// um eine Position zu gr"osseren Indizes, d.h. es wird Platz f"ur
+// ein neues (einzuf"ugendes) Zeichen geschafft.
+// ACHTUNG: der String MUSS gross genug sein !
+inline void SbxBasicFormater::ShiftString( String& sStrg, USHORT nStartPos )
+{
+ sStrg.Erase( nStartPos,1 );
+}
+
+// Funktion um ein Zeichen an einen String anzuh"angen
+inline void SbxBasicFormater::StrAppendChar( String& sStrg, sal_Unicode ch )
+{
+ sStrg.Insert( ch );
+}
+
+// h"angt die "ubergebene Ziffer nDigit an den "ubergebenen String sStrg
+// an, dabei wird "uberpr"uft ob nDigit eine g"ultige Ziffer ist,
+// falls dies nicht der Fall ist, wird nichts gemacht.
+void SbxBasicFormater::AppendDigit( String& sStrg, short nDigit )
+{
+ if( nDigit>=0 && nDigit<=9 )
+ StrAppendChar( sStrg, (sal_Unicode)(nDigit+ASCII_0) );
+}
+
+// verschiebt den Dezimal-Punkt um eine Stelle nach links
+void SbxBasicFormater::LeftShiftDecimalPoint( String& sStrg )
+{
+ USHORT nPos = sStrg.Search( cDecPoint );
+
+ if( nPos!=STRING_NOTFOUND )
+ {
+ // vertausche Dezimal-Punkt
+ sStrg.SetChar( nPos, sStrg.GetChar( nPos - 1 ) );
+ sStrg.SetChar( nPos-1, cDecPoint );
+ }
+}
+
+// rundet in einem String die Ziffer an der angegebenen Stelle,
+// es wird ein Flag zur"uckgeliefert, falls ein Overflow auftrat,
+// d.h. 99.99 --> 100.00, d.h. ein Gr"ossenordung ge"andert wurde
+// (geschieht beim Runden einer 9).
+void SbxBasicFormater::StrRoundDigit( String& sStrg, short nPos, BOOL& bOverflow )
+{
+ // wurde ggf ein falscher Index uebergeben --> Aufruf ignorieren
+ if( nPos<0 )
+ return;
+
+ bOverflow = FALSE;
+ // "uberspringe den Dezimalpunkt und Tausender-Trennzeichen
+ sal_Unicode c = sStrg.GetChar( nPos );
+ if( nPos>0 && (c == cDecPoint || c == cThousandSep) )
+ {
+ StrRoundDigit( sStrg,nPos-1,bOverflow );
+ // AENDERUNG ab 9.3.1997: nach rekursivem Call die Methode SOFORT beenden !
+ return;
+ }
+ // "uberspringe alle nicht-Ziffern:
+ // BEMERKUNG:
+ // in einem g"ultigen Format-String sollte die Ausgabe
+ // der Zahl an einem St"uck geschen, d.h. Sonderzeichen sollten
+ // NUR vor ODER nach der Zahl stehen und nicht mitten in der
+ // Format-Angabe f"ur die Zahl
+ while( nPos>=0 && (sStrg.GetChar( nPos )<ASCII_0 || sStrg.GetChar( nPos )>ASCII_9) )
+ nPos--;
+ // muss ggf. noch Platz f"ur eine weitere (f"uhrende) Ziffer
+ // geschaffen werden ?
+ if( nPos==-1 )
+ {
+ ShiftString( sStrg,0 );
+ // f"uhrende 1 einf"ugen: z.B. 99.99 f"ur 0.0
+ sStrg.SetChar( 0, '1' );
+ bOverflow = TRUE;
+ }
+ else
+ {
+ // ist die zu rundende Position eine Ziffer ?
+ sal_Unicode c2 = sStrg.GetChar( nPos );
+ if( c2 >= ASCII_0 && c2 <= ASCII_9 )
+ {
+ // muss eine 9 gerundet werden? Falls: Ja --> rekursiver Aufruf
+ if( c2 == ASCII_9 )
+ {
+ sStrg.SetChar( nPos, '0' );
+ StrRoundDigit( sStrg,nPos-1,bOverflow );
+ }
+ else
+ sStrg.SetChar( nPos, c2+1 );
+ }
+ else
+ {
+ // --> Nein, d.h. Platz f"ur Ziffer schaffen: z.B. -99.99 f"ur #0.0
+ // da gerundet wird MUSS es immer eine g"ultige Position
+ // nPos+1 geben !
+ ShiftString( sStrg,nPos+1 );
+ // f"uhrende 1 einf"ugen
+ sStrg.SetChar( nPos+1, '1' );
+ bOverflow = TRUE;
+ }
+ }
+}
+
+// rundet in einem String die Ziffer an der angegebenen Stelle
+void SbxBasicFormater::StrRoundDigit( String& sStrg, short nPos )
+{
+ BOOL bOverflow;
+
+ StrRoundDigit( sStrg,nPos,bOverflow );
+}
+
+// parse den Formatstring von der "ubergebenen Position zur"uck
+// und l"osche ggf. "uberf"ussige 0en, z.B. 4.50 in 0.0#
+void SbxBasicFormater::ParseBack( String& sStrg, const String& sFormatStrg,
+ short nFormatPos )
+{
+ // WICHTIG: nFormatPos kann auch negativ sein, in diesem Fall Aufruf ignorieren
+ for( short i=nFormatPos;
+ i>0 && sFormatStrg.GetChar( i ) == '#' && sStrg.GetChar( (sStrg.Len()-1) ) == '0';
+ i-- )
+ { sStrg.Erase( sStrg.Len()-1 ); }
+}
+
+#ifdef _with_sprintf
+
+/*
+ Bemerkung:
+ Zahl wird mit maximaler (sinnvollen) Genauigkeit in einen String
+ umgewandelt (mit sprintf()), dieser String wird dann im Schleifen-
+ Durchlauf nach der entsprechenden Ziffer durchsucht.
+*/
+// initialisiert die Daten der Klasse um einen Scan-Durchlauf durchzuf"uhren
+void SbxBasicFormater::InitScan( double _dNum )
+{
+ char sBuffer[ MAX_DOUBLE_BUFFER_LENGTH ];
+
+ dNum = _dNum;
+ InitExp( get_number_of_digits( dNum ) );
+ // maximal 15 Nachkomma-Stellen, Format-Beispiel: -1.234000000000000E-001
+ /*int nCount =*/ sprintf( sBuffer,"%+22.15lE",dNum );
+ sSciNumStrg.AssignAscii( sBuffer );
+}
+
+void SbxBasicFormater::InitExp( double _dNewExp )
+{
+ char sBuffer[ MAX_DOUBLE_BUFFER_LENGTH ];
+ // bestimme den Exponenten (kann immer GENAU durch int dargestellt werden)
+ nNumExp = (short)_dNewExp;
+ // und dessen String
+ /*int nCount =*/ sprintf( sBuffer,"%+i",nNumExp );
+ sNumExpStrg.AssignAscii( sBuffer );
+ // bestimme die Anzahl der Stellen im Exponenten
+ nExpExp = (short)get_number_of_digits( (double)nNumExp );
+}
+
+// bestimmt die Ziffer an der angegebenen Stelle (gedacht zur Anwendung im
+// Scan-Durchlauf)
+short SbxBasicFormater::GetDigitAtPosScan( short nPos, BOOL& bFoundFirstDigit )
+{
+ // Versuch eine gr"ossere Ziffer zu lesen,
+ // z.B. Stelle 4 in 1.234,
+ // oder eine Ziffer ausserhalb der Aufl"osung der
+ // Zahl (double) zu lesen (z.B. max. 15 Stellen).
+ if( nPos>nNumExp || abs(nNumExp-nPos)>MAX_NO_OF_DIGITS )
+ return _NO_DIGIT;
+ // bestimme den Index der Stelle in dem Number-String:
+ // "uberlese das Vorzeichen
+ USHORT no = 1;
+ // falls notwendig den Dezimal-Punkt "uberlesen:
+ if( nPos<nNumExp )
+ no++;
+ no += nNumExp-nPos;
+ // Abfrage der ersten (g"ultigen) Ziffer der Zahl --> Flag setzen
+ if( nPos==nNumExp )
+ bFoundFirstDigit = TRUE;
+ return (short)(sSciNumStrg.GetChar( no ) - ASCII_0);
+}
+
+short SbxBasicFormater::GetDigitAtPosExpScan( short nPos, BOOL& bFoundFirstDigit )
+{
+ // ist die abgefragte Stelle zu gross f"ur den Exponenten ?
+ if( nPos>nExpExp )
+ return -1;
+
+ // bestimme den Index der Stelle in dem Number-String:
+ // "uberlese das Vorzeichen
+ USHORT no = 1;
+ no += nExpExp-nPos;
+ // Abfrage der ersten (g"ultigen) Ziffer der Zahl --> Flag setzen
+ if( nPos==nExpExp )
+ bFoundFirstDigit = TRUE;
+ return (short)(sNumExpStrg.GetChar( no ) - ASCII_0);
+}
+
+// es kann ein Wert f"ur den Exponent angegeben werden, da ggf. die
+// Zahl ggf. NICHT normiert (z.B. 1.2345e-03) dargestellt werden soll,
+// sondern eventuell 123.345e-3 !
+short SbxBasicFormater::GetDigitAtPosExpScan( double dNewExponent, short nPos,
+ BOOL& bFoundFirstDigit )
+{
+ // neuer Exponent wurde "ubergeben, aktualisiere
+ // die tempor"aren Klassen-Variablen
+ InitExp( dNewExponent );
+ // und jetzt die Stelle bestimmen
+ return GetDigitAtPosExpScan( nPos,bFoundFirstDigit );
+}
+
+#else
+
+/* Probleme mit der folgenden Methode:
+
+TODO: ggf einen 'intelligenten' Peek-Parser um Rundungsfehler bei
+ double-Zahlen herauszufinden ? z.B. f"ur 0.00115 #.#e-000
+
+ Problem mit: format( 0.3345 , "0.000" )
+ Problem mit: format( 0.00115 , "0.0000" )
+
+*/
+// liefert die Ziffer an der angegebenen '10er System'-Position,
+// d.h. positive nPos f"ur Stellen vor dem Komma und negative
+// f"ur Stellen nach dem Komma.
+// nPos==0 bedeutet erste Stelle vor dem Komma, also 10^0.
+// liefert 0..9 f"ur g"ultige Ziffern und -1 f"ur nicht vorhanden,
+// d.h. falls die "ubergebene Zahl zu klein ist
+// (z.B. Stelle 5 bei dNumber=123).
+// Weiter wird in dNextNumber die um die f"uhrenden Stellen
+// (bis nPos) gek"urzte Zahl zur"uckgeliefert, z.B.
+// GetDigitAtPos( 3434.565 , 2 , dNewNumber ) --> dNewNumber = 434.565
+// dies kann f"ur Schleifenabarbeitung g"unstiger sein, d.h.
+// die Zahlen immer von der gr"ossten Stelle abarbeiten/scanen.
+// In bFoundFirstDigit wird ggf. ein Flag gesetzt wenn eine Ziffer
+// gefunden wurde, dies wird dazu verwendet um 'Fehler' beim Parsen 202
+// zu vermeiden, die
+//
+// ACHTUNG: anscheinend gibt es manchmal noch Probleme mit Rundungs-Fehlern!
+short SbxBasicFormater::GetDigitAtPos( double dNumber, short nPos,
+ double& dNextNumber, BOOL& bFoundFirstDigit )
+// ACHTUNG: nPos kann auch negativ werden, f"ur Stellen nach dem Dezimal-Punkt
+{
+ double dTemp = dNumber;
+ double dDigit,dPos;
+ short nMaxDigit;
+
+ // erst mal aus der Zahl eine positive Zahl machen:
+ dNumber = fabs( dNumber );
+ dPos = (double)nPos;
+
+ // "uberpr"ufe ob Zahl zu klein f"ur angegebene Stelle ist
+ nMaxDigit = (short)get_number_of_digits( dNumber );
+ // f"uhrende Ziffern 'l"oschen'
+ // Bem.: Fehler nur bei Zahlen gr"osser 0, d.h. bei Ziffern vor dem
+ // Dezimal-Punkt
+ if( nMaxDigit<nPos && !bFoundFirstDigit && nPos>=0 )
+ return _NO_DIGIT;
+ // Ziffer gefunden, setze Flag:
+ bFoundFirstDigit = TRUE;
+ for( short i=nMaxDigit; i>=nPos; i-- )
+ {
+ double dI = (double)i;
+ double dTemp1 = pow( 10.0,dI );
+ // pr"apariere nun die gesuchte Ziffer:
+ dDigit = floor( pow( 10.0,log10( fabs( dNumber ) )-dI ) );
+ dNumber -= dTemp1 * dDigit;
+ }
+ // Zuweisung f"ur optimierte Schleifen-Durchl"aufe
+ dNextNumber = dNumber;
+ // und zum Schluss noch die float-Rundungsungenauigkeiten heraus filtern
+ return RoundDigit( dDigit );
+}
+
+// rundet eine double-Zahl zwischen 0 und 9 auf die genaue
+// Integer-Zahl, z.B. 2.8 -> 3 und 2.2 -> 2
+short SbxBasicFormater::RoundDigit( double dNumber )
+{
+ // ist der Wertebereich g"ultig ?
+ if( dNumber<0.0 || dNumber>10.0 )
+ return -1;
+ short nTempHigh = (short)(dNumber+0.5); // ggf. floor( )
+ return nTempHigh;
+}
+
+#endif
+
+// kopiert den entsprechenden Teil des Format-Strings, falls vorhanden,
+// und liefert diesen zur"uck.
+// Somit wird ein neuer String erzeugt, der vom Aufrufer wieder freigegeben
+// werden muss
+String SbxBasicFormater::GetPosFormatString( const String& sFormatStrg, BOOL & bFound )
+{
+ bFound = FALSE; // default...
+ USHORT nPos = sFormatStrg.Search( FORMAT_SEPARATOR );
+
+ if( nPos!=STRING_NOTFOUND )
+ {
+ bFound = TRUE;
+ // der Format-String f"ur die positiven Zahlen ist alles
+ // vor dem ersten ';'
+ return sFormatStrg.Copy( 0,nPos );
+ }
+ // kein ; gefunden, liefere Leerstring
+ String aRetStr;
+ aRetStr.AssignAscii( EMPTYFORMATSTRING );
+ return aRetStr;
+}
+
+// siehe auch GetPosFormatString()
+String SbxBasicFormater::GetNegFormatString( const String& sFormatStrg, BOOL & bFound )
+{
+ bFound = FALSE; // default...
+ USHORT nPos = sFormatStrg.Search( FORMAT_SEPARATOR );
+
+ if( nPos!=STRING_NOTFOUND )
+ {
+ // der Format-String f"ur die negative Zahlen ist alles
+ // zwischen dem ersten und dem zweiten ';'.
+ // Daher: hole erst mal alles nach dem ersten ';'
+ String sTempStrg = sFormatStrg.Copy( nPos+1 );
+ // und suche darin ggf. ein weiteres ';'
+ nPos = sTempStrg.Search( FORMAT_SEPARATOR );
+ bFound = TRUE;
+ if( nPos==STRING_NOTFOUND )
+ // keins gefunden, liefere alles...
+ return sTempStrg;
+ else
+ // ansonsten den String zwischen den beiden ';' liefern
+ return sTempStrg.Copy( 0,nPos );
+ }
+ String aRetStr;
+ aRetStr.AssignAscii( EMPTYFORMATSTRING );
+ return aRetStr;
+}
+
+// siehe auch GetPosFormatString()
+String SbxBasicFormater::Get0FormatString( const String& sFormatStrg, BOOL & bFound )
+{
+ bFound = FALSE; // default...
+ USHORT nPos = sFormatStrg.Search( FORMAT_SEPARATOR );
+
+ if( nPos!=STRING_NOTFOUND )
+ {
+ // der Format-String f"ur die Null ist alles
+ // was nach dem zweiten ';' kommt.
+ // Daher: hole erst mal alles nach dem ersten ';'
+ String sTempStrg = sFormatStrg.Copy( nPos+1 );
+ // und suche darin ggf. ein weiteres ';'
+ nPos = sTempStrg.Search( FORMAT_SEPARATOR );
+ if( nPos!=STRING_NOTFOUND )
+ {
+ bFound = TRUE;
+ sTempStrg = sTempStrg.Copy( nPos+1 );
+ nPos = sTempStrg.Search( FORMAT_SEPARATOR );
+ if( nPos==STRING_NOTFOUND )
+ // keins gefunden, liefere alles...
+ return sTempStrg;
+ else
+ return sTempStrg.Copy( 0,nPos );
+ }
+ }
+ // kein ; gefunden, liefere Leerstring
+ String aRetStr;
+ aRetStr.AssignAscii( EMPTYFORMATSTRING );
+ return aRetStr;
+}
+
+// siehe auch GetPosFormatString()
+String SbxBasicFormater::GetNullFormatString( const String& sFormatStrg, BOOL & bFound )
+{
+ bFound = FALSE; // default...
+ USHORT nPos = sFormatStrg.Search( FORMAT_SEPARATOR );
+
+ if( nPos!=STRING_NOTFOUND )
+ {
+ // der Format-String f"ur die Null ist alles
+ // was nach dem dritten ';' kommt.
+ // Daher: hole erst mal alles nach dem ersten ';'
+ String sTempStrg = sFormatStrg.Copy( nPos+1 );
+ // und suche darin ggf. ein weiteres ';'
+ nPos = sTempStrg.Search( FORMAT_SEPARATOR );
+ if( nPos!=STRING_NOTFOUND )
+ {
+ // und suche nun nach dem dritten ';'
+ sTempStrg = sTempStrg.Copy( nPos+1 );
+ nPos = sTempStrg.Search( FORMAT_SEPARATOR );
+ if( nPos!=STRING_NOTFOUND )
+ {
+ bFound = TRUE;
+ return sTempStrg.Copy( nPos+1 );
+ }
+ }
+ }
+ // kein ; gefunden, liefere Leerstring
+ String aRetStr;
+ aRetStr.AssignAscii( EMPTYFORMATSTRING );
+ return aRetStr;
+}
+
+// analysiert den Format-String, liefert Wert <> 0 falls ein Fehler
+// aufgetreten ist
+short SbxBasicFormater::AnalyseFormatString( const String& sFormatStrg,
+ short& nNoOfDigitsLeft, short& nNoOfDigitsRight,
+ short& nNoOfOptionalDigitsLeft,
+ short& nNoOfExponentDigits, short& nNoOfOptionalExponentDigits,
+ BOOL& bPercent, BOOL& bCurrency, BOOL& bScientific,
+ BOOL& bGenerateThousandSeparator,
+ short& nMultipleThousandSeparators )
+{
+ USHORT nLen;
+ short nState = 0;
+
+ nLen = sFormatStrg.Len();
+ // initialisiere alle Z"ahler und Flags
+ nNoOfDigitsLeft = 0;
+ nNoOfDigitsRight = 0;
+ nNoOfOptionalDigitsLeft = 0;
+ nNoOfExponentDigits = 0;
+ nNoOfOptionalExponentDigits = 0;
+ bPercent = FALSE;
+ bCurrency = FALSE;
+ bScientific = FALSE;
+ // ab 11.7.97: sobald ein Komma in dem Format String gefunden wird,
+ // werden alle 3 Zehnerpotenzen markiert (d.h. tausender, milionen, ...)
+ // bisher wurde nur an den gesetzten Position ein Tausender-Separator
+ // ausgegeben oder wenn ein @ im Format-String stand.
+ // Dies war ein Missverstaendnis der VB Kompatiblitaet.
+ bGenerateThousandSeparator = sFormatStrg.Search( ',' ) != STRING_NOTFOUND;
+ nMultipleThousandSeparators = 0;
+ // und untersuche den Format-String nach den gew"unschten Informationen
+ for( USHORT i=0; i<nLen; i++ )
+ {
+ sal_Unicode c = sFormatStrg.GetChar( i );
+ switch( c ) {
+ case '#':
+ case '0':
+ if( nState==0 )
+ {
+ nNoOfDigitsLeft++;
+// TODO hier ggf. bessere Fehler-"Uberpr"ufung der Mantisse auf g"ultige Syntax (siehe Grammatik)
+ // ACHTUNG: 'undefiniertes' Verhalten falls # und 0
+ // gemischt werden !!!
+ // BEMERKUNG: eigentlich sind #-Platzhalter bei Scientific
+ // Darstellung vor dem Dezimal-Punkt sinnlos !
+ if( c=='#' )
+ nNoOfOptionalDigitsLeft++;
+ }
+ else if( nState==1 )
+ nNoOfDigitsRight++;
+ else if( nState==-1 ) // suche 0 im Exponent
+ {
+ if( c=='#' ) // # schaltet den Zustand weiter
+ {
+ nNoOfOptionalExponentDigits++;
+ nState = -2;
+ }
+ nNoOfExponentDigits++;
+ }
+ else if( nState==-2 ) // suche # im Exponent
+ {
+ if( c=='0' )
+ // ERROR: 0 nach # im Exponent ist NICHT erlaubt !!
+ return -4;
+ nNoOfOptionalExponentDigits++;
+ nNoOfExponentDigits++;
+ }
+ break;
+ case '.':
+ nState++;
+ if( nState>1 )
+ return -1; // ERROR: zu viele Dezimal-Punkte
+ break;
+ case '%':
+ bPercent = TRUE;
+ /* old:
+ bPercent++;
+ if( bPercent>1 )
+ return -2; // ERROR: zu viele Prozent-Zeichen
+ */
+ break;
+ case '(':
+ bCurrency = TRUE;
+ break;
+ case ',':
+ {
+ sal_Unicode ch = sFormatStrg.GetChar( i+1 );
+ // vorl"aufig wird NUR auf zwei aufeinanderfolgede
+ // Zeichen gepr"uft
+ if( ch!=0 && (ch==',' || ch=='.') )
+ nMultipleThousandSeparators++;
+ } break;
+ case 'e':
+ case 'E':
+ // #i13821 not when no digits before
+ if( nNoOfDigitsLeft > 0 || nNoOfDigitsRight > 0 )
+ {
+ nState = -1; // breche jetzt das Z"ahlen der Stellen ab
+ bScientific = TRUE;
+ }
+ /* old:
+ bScientific++;
+ if( bScientific>1 )
+ return -3; // ERROR: zu viele Exponent-Zeichen
+ */
+ break;
+ // EIGENES Kommando-Zeichen, das die Erzeugung der
+ // Tausender-Trennzeichen einschaltet
+ case '\\':
+ // Ignore next char
+ i++;
+ break;
+ case CREATE_1000SEP_CHAR:
+ bGenerateThousandSeparator = TRUE;
+ break;
+ }
+ }
+ return 0;
+}
+
+// das Flag bCreateSign zeigt an, dass bei der Mantisse ein Vorzeichen
+// erzeugt werden soll
+void SbxBasicFormater::ScanFormatString( double dNumber,
+ const String& sFormatStrg, String& sReturnStrg,
+ BOOL bCreateSign )
+{
+ short /*nErr,*/nNoOfDigitsLeft,nNoOfDigitsRight,nNoOfOptionalDigitsLeft,
+ nNoOfExponentDigits,nNoOfOptionalExponentDigits,
+ nMultipleThousandSeparators;
+ BOOL bPercent,bCurrency,bScientific,bGenerateThousandSeparator;
+
+ // Initialisiere den Return-String
+ sReturnStrg = String();
+
+ // analysiere den Format-String, d.h. bestimme folgende Werte:
+ /*
+ - Anzahl der Ziffern vor dem Komma
+ - Anzahl der Ziffern nach dem Komma
+ - optionale Ziffern vor dem Komma
+ - Anzahl der Ziffern im Exponent
+ - optionale Ziffern im Exponent
+ - Prozent-Zeichen gefunden ?
+ - () f"ur negatives Vorzeichen ?
+ - Exponetial-Schreibweise ?
+ - sollen Tausender-Separatoren erzeugt werden ?
+ - wird ein Prozent-Zeichen gefunden ? --> dNumber *= 100.0;
+ - gibt es aufeinanderfolgende Tausender-Trennzeichen ?
+ ,, oder ,. --> dNumber /= 1000.0;
+ - sonstige Fehler ? mehrfache Dezimalpunkte, E's, etc.
+ --> Fehler werden zur Zeit einfach ignoriert
+ */
+ /*nErr =*/ AnalyseFormatString( sFormatStrg,nNoOfDigitsLeft,nNoOfDigitsRight,
+ nNoOfOptionalDigitsLeft,nNoOfExponentDigits,
+ nNoOfOptionalExponentDigits,
+ bPercent,bCurrency,bScientific,bGenerateThousandSeparator,
+ nMultipleThousandSeparators );
+ /* es werden alle Fehler ignoriert, wie in Visual-Basic
+ if( nErr!=0 )
+ {
+ char sBuffer[512];
+
+ //sprintf( sBuffer,"bad format-string >%s< err=%i",sFormatStrg,nErr );
+ strcpy( sBuffer,"bad format-string" );
+ ShowError( sBuffer );
+ }
+ else
+ */
+ {
+ // Spezialbehandlung f"ur Spezialzeichen
+ if( bPercent )
+ dNumber *= 100.0;
+// TODO: diese Vorgabe (,, oder ,.) ist NICHT Visual-Basic kompatibel !
+ // Frage: soll das hier stehen bleiben (Anforderungen) ?
+ if( nMultipleThousandSeparators )
+ dNumber /= 1000.0;
+
+ // einige Arbeits-Variablen
+ double dExponent;
+ short i,nLen;
+ short nState,nDigitPos,nExponentPos,nMaxDigit,nMaxExponentDigit;
+ BOOL bFirstDigit,bFirstExponentDigit,bFoundFirstDigit,
+ bIsNegative,bZeroSpaceOn, bSignHappend,bDigitPosNegative;
+
+ // Initialisierung der Arbeits-Variablen
+ bSignHappend = FALSE;
+ bFoundFirstDigit = FALSE;
+ bIsNegative = dNumber<0.0;
+ nLen = sFormatStrg.Len();
+ dExponent = get_number_of_digits( dNumber );
+ nExponentPos = 0;
+ nMaxExponentDigit = 0;
+ nMaxDigit = (short)dExponent;
+ bDigitPosNegative = false;
+ if( bScientific )
+ {
+ //if( nNoOfOptionalDigitsLeft>0 )
+ // ShowError( "# in scientific-format in front of the decimal-point has no effect" );
+ // beim Exponent ggf. "uberz"ahlige Stellen vor dem Komma abziehen
+ dExponent = dExponent - (double)(nNoOfDigitsLeft-1);
+ nDigitPos = nMaxDigit;
+ nMaxExponentDigit = (short)get_number_of_digits( dExponent );
+ nExponentPos = nNoOfExponentDigits-1 - nNoOfOptionalExponentDigits;
+ }
+ else
+ {
+ nDigitPos = nNoOfDigitsLeft-1; // Z"ahlweise f"angt bei 0 an, 10^0
+ // hier ben"otigt man keine Exponent-Daten !
+ bDigitPosNegative = (nDigitPos < 0);
+ }
+ bFirstDigit = TRUE;
+ bFirstExponentDigit = TRUE;
+ nState = 0; // 0 --> Mantisse; 1 --> Exponent
+ bZeroSpaceOn = 0;
+
+
+#ifdef _with_sprintf
+ InitScan( dNumber );
+#endif
+ // scanne jetzt den Format-String:
+ sal_Unicode cForce = 0;
+ for( i=0; i<nLen; i++ )
+ {
+ sal_Unicode c;
+ if( cForce )
+ {
+ c = cForce;
+ cForce = 0;
+ }
+ else
+ {
+ c = sFormatStrg.GetChar( i );
+ }
+ switch( c ) {
+ case '0':
+ case '#':
+ if( nState==0 )
+ {
+ // Behandlung der Mantisse
+ if( bFirstDigit )
+ {
+ //org:bFirstDigit = FALSE;
+ // ggf. Vorzeichen erzeugen
+ // Bem.: bei bCurrency soll das negative
+ // Vorzeichen durch () angezeigt werden
+ if( bIsNegative && !bCreateSign/*!bCurrency*/ && !bSignHappend )
+ {
+ // nur einmal ein Vorzeichen ausgeben
+ bSignHappend = TRUE;
+ StrAppendChar( sReturnStrg,'-' );
+ }
+ // hier jetzt "uberz"ahlige Stellen ausgeben,
+ // d.h. vom Format-String nicht erfasste Stellen
+ if( nMaxDigit>nDigitPos )
+ {
+ for( short j=nMaxDigit; j>nDigitPos; j-- )
+ {
+ short nTempDigit;
+#ifdef _with_sprintf
+ AppendDigit( sReturnStrg,nTempDigit = GetDigitAtPosScan( j,bFoundFirstDigit ) );
+#else
+ AppendDigit( sReturnStrg,nTempDigit = GetDigitAtPos( dNumber,j,dNumber,bFoundFirstDigit ) );
+#endif
+ // wurde wirklich eine Ziffer eingefuegt ?
+ if( nTempDigit!=_NO_DIGIT )
+ // jetzt wurde wirklich eine Ziffer ausgegeben, Flag setzen
+ bFirstDigit = FALSE;
+ // muss ggf. ein Tausender-Trennzeichen erzeugt werden?
+ if( bGenerateThousandSeparator && ( c=='0' || nMaxDigit>=nDigitPos ) && j>0 && (j % 3 == 0) )
+ StrAppendChar( sReturnStrg,cThousandSep );
+ }
+ }
+ }
+ // muss f"ur eine leere Stelle eventuell eine 0 ausgegeben werden ?
+ if( nMaxDigit<nDigitPos && ( c=='0' || bZeroSpaceOn ) )
+ {
+ AppendDigit( sReturnStrg,0 ); // Ja
+ // jetzt wurde wirklich eine Ziffer ausgegeben, Flag setzen
+ bFirstDigit = FALSE;
+ bZeroSpaceOn = 1;
+ // BEM.: bei Visual-Basic schaltet die erste 0 f"ur alle
+ // nachfolgenden # (bis zum Dezimal-Punkt) die 0 ein,
+ // dieses Verhalten wird hier mit dem Flag simmuliert.
+ // muss ggf. ein Tausender-Trennzeichen erzeugt werden?
+ if( bGenerateThousandSeparator && ( c=='0' || nMaxDigit>=nDigitPos ) && nDigitPos>0 && (nDigitPos % 3 == 0) )
+ StrAppendChar( sReturnStrg,cThousandSep );
+ }
+ else
+ {
+ short nTempDigit;
+#ifdef _with_sprintf
+ AppendDigit( sReturnStrg,nTempDigit = GetDigitAtPosScan( nDigitPos,bFoundFirstDigit ) );
+#else
+ AppendDigit( sReturnStrg,nTempDigit = GetDigitAtPos( dNumber,nDigitPos,dNumber,bFoundFirstDigit ) );
+#endif
+ // wurde wirklich eine Ziffer eingefuegt ?
+ if( nTempDigit!=_NO_DIGIT )
+ // jetzt wurde wirklich eine Ziffer ausgegeben, Flag setzen
+ bFirstDigit = FALSE;
+ // muss ggf. ein Tausender-Trennzeichen erzeugt werden?
+ if( bGenerateThousandSeparator && ( c=='0' || nMaxDigit>=nDigitPos ) && nDigitPos>0 && (nDigitPos % 3 == 0) )
+ StrAppendChar( sReturnStrg,cThousandSep );
+ }
+ // und Position aktualisieren
+ nDigitPos--;
+ }
+ else
+ {
+ // Behandlung des Exponenten
+ if( bFirstExponentDigit )
+ {
+ // Vorzeichen wurde schon bei e/E ausgegeben
+ bFirstExponentDigit = FALSE;
+ if( nMaxExponentDigit>nExponentPos )
+ // hier jetzt "uberz"ahlige Stellen ausgeben,
+ // d.h. vom Format-String nicht erfasste Stellen
+ {
+ for( short j=nMaxExponentDigit; j>nExponentPos; j-- )
+ {
+#ifdef _with_sprintf
+ AppendDigit( sReturnStrg,GetDigitAtPosExpScan( dExponent,j,bFoundFirstDigit ) );
+#else
+ AppendDigit( sReturnStrg,GetDigitAtPos( dExponent,j,dExponent,bFoundFirstDigit ) );
+#endif
+ }
+ }
+ }
+ // muss f"ur eine leere Stelle eventuell eine 0 ausgegeben werden ?
+ if( nMaxExponentDigit<nExponentPos && c=='0' )
+ AppendDigit( sReturnStrg,0 ); // Ja
+ else
+#ifdef _with_sprintf
+ AppendDigit( sReturnStrg,GetDigitAtPosExpScan( dExponent,nExponentPos,bFoundFirstDigit ) );
+#else
+ AppendDigit( sReturnStrg,GetDigitAtPos( dExponent,nExponentPos,dExponent,bFoundFirstDigit ) );
+#endif
+ nExponentPos--;
+ }
+ break;
+ case '.':
+ if( bDigitPosNegative ) // #i13821: If no digits before .
+ {
+ bDigitPosNegative = false;
+ nDigitPos = 0;
+ cForce = '#';
+ i-=2;
+ break;
+ }
+ // gebe Komma aus
+ StrAppendChar( sReturnStrg,cDecPoint );
+ break;
+ case '%':
+ // ggf. "uberf"ussige 0en l"oschen, z.B. 4.500e4 in 0.0##e-00
+ ParseBack( sReturnStrg,sFormatStrg,i-1 );
+ // gebe Prozent-Zeichen aus
+ sReturnStrg.Insert('%');
+ break;
+ case 'e':
+ case 'E':
+ // muss Mantisse noch gerundet werden, bevor der Exponent angezeigt wird ?
+ {
+ // gibt es ueberhaupt eine Mantisse ?
+ if( bFirstDigit )
+ {
+ // anscheinend nicht, d.h. ungueltiger Format String, z.B. E000.00
+ // d.h. ignoriere diese e bzw. E Zeichen
+ // ggf. einen Fehler (wie Visual Basic) ausgeben ?
+
+ // #i13821: VB 6 behaviour
+ StrAppendChar( sReturnStrg,c );
+ break;
+ }
+
+ BOOL bOverflow = FALSE;
+#ifdef _with_sprintf
+ short nNextDigit = GetDigitAtPosScan( nDigitPos,bFoundFirstDigit );
+#else
+ short nNextDigit = GetDigitAtPos( dNumber,nDigitPos,dNumber,bFoundFirstDigit );
+#endif
+ if( nNextDigit>=5 )
+ StrRoundDigit( sReturnStrg,sReturnStrg.Len()-1,bOverflow );
+ if( bOverflow )
+ {
+ // es wurde eine f"uhrende 9 gerundet, d.h.
+ // verschiebe den Dezimal-Punkt um eine Stelle nach links
+ LeftShiftDecimalPoint( sReturnStrg );
+ // und l"osche die letzte Ziffer, diese wird
+ // duch die f"uhrende 1 ersetzt:
+ sReturnStrg.SetChar( sReturnStrg.Len()-1 , 0 );
+ // der Exponent muss um 1 erh"oht werden,
+ // da der Dezimalpunkt verschoben wurde
+ dExponent += 1.0;
+ }
+ // ggf. "uberf"ussige 0en l"oschen, z.B. 4.500e4 in 0.0##e-00
+ ParseBack( sReturnStrg,sFormatStrg,i-1 );
+ }
+ // "andere Zustand des Scanners
+ nState++;
+ // gebe Exponent-Zeichen aus
+ StrAppendChar( sReturnStrg,c );
+ // i++; // MANIPULATION der Schleifen-Variable !
+ c = sFormatStrg.GetChar( ++i );
+ // und gebe Vorzeichen / Exponent aus
+ if( c!=0 )
+ {
+ if( c=='-' )
+ {
+ // falls Exponent < 0 gebe - aus
+ if( dExponent<0.0 )
+ StrAppendChar( sReturnStrg,'-' );
+ }
+ else if( c=='+' )
+ {
+ // gebe auf jeden Fall das Vorzeichen des Exponenten aus !
+ if( dExponent<0.0 )
+ StrAppendChar( sReturnStrg,'-' );
+ else
+ StrAppendChar( sReturnStrg,'+' );
+ }
+ //else
+ // ShowError( "operator e/E did not find + or -" );
+ }
+ //else
+ // ShowError( "operator e/E ended with 0" );
+ break;
+ case ',':
+ // ACHTUNG: nur falls Zahl bisher ausgegeben wurde
+ // das Zeichen ausgeben
+ ////--> Siehe Kommentar vom 11.7. in AnalyseFormatString()
+ ////if( !bFirstDigit )
+ //// // gebe Tausender-Trennzeichen aus
+ //// StrAppendChar( sReturnStrg,cThousandSep );
+ break;
+ case ';':
+ break;
+ case '(':
+ case ')':
+ // ggf. "uberf"ussige 0en l"oschen, z.B. 4.500e4 in 0.0##e-00
+ ParseBack( sReturnStrg,sFormatStrg,i-1 );
+ if( bIsNegative )
+ StrAppendChar( sReturnStrg,c );
+ break;
+ case '$':
+ // den String fuer die Waehrung dranhengen:
+ sReturnStrg += sCurrencyStrg;
+ break;
+ case ' ':
+ case '-':
+ case '+':
+ // ggf. "uberf"ussige 0en l"oschen, z.B. 4.500e4 in 0.0##e-00
+ ParseBack( sReturnStrg,sFormatStrg,i-1 );
+ // gebe das jeweilige Zeichen direkt aus
+ StrAppendChar( sReturnStrg,c );
+ break;
+ case '\\':
+ // ggf. "uberf"ussige 0en l"oschen, z.B. 4.500e4 in 0.0##e-00
+ // falls Sonderzeichen am Ende oder mitten in
+ // Format-String vorkommen
+ ParseBack( sReturnStrg,sFormatStrg,i-1 );
+ // Sonderzeichen gefunden, gebe N"ACHSTES
+ // Zeichen direkt aus (falls es existiert)
+ // i++;
+ c = sFormatStrg.GetChar( ++i );
+ if( c!=0 )
+ StrAppendChar( sReturnStrg,c );
+ //else
+ // ShowError( "operator \\ ended with 0" );
+ break;
+ case CREATE_1000SEP_CHAR:
+ // hier ignorieren, Aktion wurde schon in
+ // AnalyseFormatString durchgef"uhrt
+ break;
+ default:
+ // auch die Zeichen und Ziffern ausgeben (wie in Visual-Basic)
+ if( ( c>='a' && c<='z' ) ||
+ ( c>='A' && c<='Z' ) ||
+ ( c>='1' && c<='9' ) )
+ StrAppendChar( sReturnStrg,c );
+ // else
+ // ignorieren !
+ // ehemals: ShowError( "bad character in format-string" );
+ }
+ }
+ // Format-String wurde vollst"andig gescanned,
+ // muss die letzte Stelle nun gerundet werden ?
+ // Dies hier ist jedoch NUR notwendig, falls das
+ // Zahlenformat NICHT Scientific-Format ist !
+ if( !bScientific )
+ {
+#ifdef _with_sprintf
+ short nNextDigit = GetDigitAtPosScan( nDigitPos,bFoundFirstDigit );
+#else
+ short nNextDigit = GetDigitAtPos( dNumber,nDigitPos,dNumber,bFoundFirstDigit );
+#endif
+ if( nNextDigit>=5 )
+ StrRoundDigit( sReturnStrg,sReturnStrg.Len()-1 );
+ }
+ // und ganz zum Schluss:
+ // ggf. "uberf"ussige 0en l"oschen, z.B. 4.500e4 in 0.0##e-00#,
+ // ABER nur Stellen nach dem Dezimal-Punkt k"onnen gel"oscht werden
+ if( nNoOfDigitsRight>0 )
+ ParseBack( sReturnStrg,sFormatStrg,sFormatStrg.Len()-1 );
+ }
+}
+
+String SbxBasicFormater::BasicFormatNull( String sFormatStrg )
+{
+ BOOL bNullFormatFound;
+ String sNullFormatStrg = GetNullFormatString( sFormatStrg,bNullFormatFound );
+
+ if( bNullFormatFound )
+ return sNullFormatStrg;
+ String aRetStr;
+ aRetStr.AssignAscii( "null" );
+ return aRetStr;
+}
+
+String SbxBasicFormater::BasicFormat( double dNumber, String sFormatStrg )
+{
+ BOOL bPosFormatFound,bNegFormatFound,b0FormatFound;
+
+ // analysiere Format-String auf vordefinierte Formate:
+ if( sFormatStrg.EqualsIgnoreCaseAscii( BASICFORMAT_GENERALNUMBER ) )
+ sFormatStrg.AssignAscii( GENERALNUMBER_FORMAT );
+ if( sFormatStrg.EqualsIgnoreCaseAscii( BASICFORMAT_CURRENCY ) )
+ sFormatStrg = sCurrencyFormatStrg; // old: CURRENCY_FORMAT;
+ if( sFormatStrg.EqualsIgnoreCaseAscii( BASICFORMAT_FIXED ) )
+ sFormatStrg.AssignAscii( FIXED_FORMAT );
+ if( sFormatStrg.EqualsIgnoreCaseAscii( BASICFORMAT_STANDARD ) )
+ sFormatStrg.AssignAscii( STANDARD_FORMAT );
+ if( sFormatStrg.EqualsIgnoreCaseAscii( BASICFORMAT_PERCENT ) )
+ sFormatStrg.AssignAscii( PERCENT_FORMAT );
+ if( sFormatStrg.EqualsIgnoreCaseAscii( BASICFORMAT_SCIENTIFIC ) )
+ sFormatStrg.AssignAscii( SCIENTIFIC_FORMAT );
+ if( sFormatStrg.EqualsIgnoreCaseAscii( BASICFORMAT_YESNO ) )
+ return ( dNumber==0.0 ) ? sNoStrg : sYesStrg ;
+ if( sFormatStrg.EqualsIgnoreCaseAscii( BASICFORMAT_TRUEFALSE ) )
+ return ( dNumber==0.0 ) ? sFalseStrg : sTrueStrg ;
+ if( sFormatStrg.EqualsIgnoreCaseAscii( BASICFORMAT_ONOFF ) )
+ return ( dNumber==0.0 ) ? sOffStrg : sOnStrg ;
+
+ // analysiere Format-String auf ';', d.h. Format-Strings f"ur
+ // positive-, negative- und 0-Werte
+ String sPosFormatStrg = GetPosFormatString( sFormatStrg, bPosFormatFound );
+ String sNegFormatStrg = GetNegFormatString( sFormatStrg, bNegFormatFound );
+ String s0FormatStrg = Get0FormatString( sFormatStrg, b0FormatFound );
+ //String sNullFormatStrg = GetNullFormatString( sFormatStrg, bNullFormatFound );
+
+ String sReturnStrg;
+ String sTempStrg;
+
+ if( dNumber==0.0 )
+ {
+ sTempStrg = sFormatStrg;
+ if( b0FormatFound )
+ {
+ // wurde ggf. Leer-String uebergeben ?
+ if( s0FormatStrg.Len() == 0 && bPosFormatFound )
+ // --> Ja, dann verwende String fuer positive Werte
+ sTempStrg = sPosFormatStrg;
+ else
+ sTempStrg = s0FormatStrg;
+ }
+ else if( bPosFormatFound )
+ {
+ // verwende String fuer positive Werte
+ sTempStrg = sPosFormatStrg;
+ }
+ ScanFormatString( dNumber, sTempStrg, sReturnStrg,/*bCreateSign=*/FALSE );
+ }
+ else
+ {
+ if( dNumber<0.0 )
+ {
+ if( bNegFormatFound )
+ {
+ // wurde ggf. Leer-String uebergeben ?
+ if( sNegFormatStrg.Len() == 0 && bPosFormatFound )
+ {
+ // --> Ja, dann verwende String fuer positive Werte
+ // und setzte Minus-Zeichen davor !
+ sTempStrg = String::CreateFromAscii("-");
+ sTempStrg += sPosFormatStrg;
+ }
+ else
+ sTempStrg = sNegFormatStrg;
+ }
+ else
+ sTempStrg = sFormatStrg;
+ // falls KEIN Format-String speziell f"ur negative Werte angegeben
+ // wurde, so soll das Vorzeichen ausgegeben werden
+ ScanFormatString( dNumber, sTempStrg, sReturnStrg,/*bCreateSign=*/bNegFormatFound/*sNegFormatStrg!=EMPTYFORMATSTRING*/ );
+ }
+ else // if( dNumber>0.0 )
+ {
+ ScanFormatString( dNumber,
+ (/*sPosFormatStrg!=EMPTYFORMATSTRING*/bPosFormatFound ? sPosFormatStrg : sFormatStrg),
+ sReturnStrg,/*bCreateSign=*/FALSE );
+ }
+ }
+ return sReturnStrg;
+}
+
+BOOL SbxBasicFormater::isBasicFormat( String sFormatStrg )
+{
+ if( sFormatStrg.EqualsIgnoreCaseAscii( BASICFORMAT_GENERALNUMBER ) )
+ return TRUE;
+ if( sFormatStrg.EqualsIgnoreCaseAscii( BASICFORMAT_CURRENCY ) )
+ return TRUE;
+ if( sFormatStrg.EqualsIgnoreCaseAscii( BASICFORMAT_FIXED ) )
+ return TRUE;
+ if( sFormatStrg.EqualsIgnoreCaseAscii( BASICFORMAT_STANDARD ) )
+ return TRUE;
+ if( sFormatStrg.EqualsIgnoreCaseAscii( BASICFORMAT_PERCENT ) )
+ return TRUE;
+ if( sFormatStrg.EqualsIgnoreCaseAscii( BASICFORMAT_SCIENTIFIC ) )
+ return TRUE;
+ if( sFormatStrg.EqualsIgnoreCaseAscii( BASICFORMAT_YESNO ) )
+ return TRUE;
+ if( sFormatStrg.EqualsIgnoreCaseAscii( BASICFORMAT_TRUEFALSE ) )
+ return TRUE;
+ if( sFormatStrg.EqualsIgnoreCaseAscii( BASICFORMAT_ONOFF ) )
+ return TRUE;
+ return FALSE;
+}
+
diff --git a/basic/source/sbx/sbxint.cxx b/basic/source/sbx/sbxint.cxx
new file mode 100644
index 000000000000..47c38aecb1c2
--- /dev/null
+++ b/basic/source/sbx/sbxint.cxx
@@ -0,0 +1,963 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+#include <tools/errcode.hxx>
+#include <basic/sbx.hxx>
+#include "sbxconv.hxx"
+
+double ImpRound( double d )
+{
+ return d + ( d < 0 ? -0.5 : 0.5 );
+}
+
+INT16 ImpGetInteger( const SbxValues* p )
+{
+ SbxValues aTmp;
+ INT16 nRes;
+start:
+ switch( +p->eType )
+ {
+ case SbxNULL:
+ SbxBase::SetError( SbxERR_CONVERSION );
+ case SbxEMPTY:
+ nRes = 0; break;
+ case SbxCHAR:
+ nRes = p->nChar; break;
+ case SbxBYTE:
+ nRes = p->nByte; break;
+ case SbxINTEGER:
+ case SbxBOOL:
+ nRes = p->nInteger; break;
+ case SbxERROR:
+ case SbxUSHORT:
+ if( p->nUShort > (USHORT) SbxMAXINT )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = SbxMAXINT;
+ }
+ else
+ nRes = (INT16) p->nUShort;
+ break;
+ case SbxLONG:
+ if( p->nLong > SbxMAXINT )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = SbxMAXINT;
+ }
+ else if( p->nLong < SbxMININT )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = SbxMININT;
+ }
+ else
+ nRes = (INT16) p->nLong;
+ break;
+ case SbxULONG:
+ if( p->nULong > SbxMAXINT )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = SbxMAXINT;
+ }
+ else
+ nRes = (INT16) p->nULong;
+ break;
+ case SbxSINGLE:
+ if( p->nSingle > SbxMAXINT )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = SbxMAXINT;
+ }
+ else if( p->nSingle < SbxMININT )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = SbxMININT;
+ }
+ else
+ nRes = (INT16) ImpRound( p->nSingle );
+ break;
+ case SbxSALINT64:
+ if( p->nInt64 > SbxMAXINT )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = SbxMAXINT;
+ }
+ else if( p->nInt64 < SbxMININT )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = SbxMININT;
+ }
+ else
+ nRes = (INT16) p->nInt64;
+ break;
+ case SbxSALUINT64:
+ if( p->uInt64 > SbxMAXINT )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = SbxMAXINT;
+ }
+ else
+ nRes = (INT16) p->uInt64;
+ break;
+ case SbxDATE:
+ case SbxDOUBLE:
+ case SbxLONG64:
+ case SbxULONG64:
+ case SbxCURRENCY:
+ case SbxDECIMAL:
+ case SbxBYREF | SbxDECIMAL:
+ {
+ double dVal;
+ if( p->eType == SbxCURRENCY )
+ dVal = ImpCurrencyToDouble( p->nLong64 );
+ else if( p->eType == SbxLONG64 )
+ dVal = ImpINT64ToDouble( p->nLong64 );
+ else if( p->eType == SbxULONG64 )
+ dVal = ImpUINT64ToDouble( p->nULong64 );
+ else if( p->eType == SbxDECIMAL )
+ {
+ dVal = 0.0;
+ if( p->pDecimal )
+ p->pDecimal->getDouble( dVal );
+ }
+ else
+ dVal = p->nDouble;
+
+ if( dVal > SbxMAXINT )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = SbxMAXINT;
+ }
+ else if( dVal < SbxMININT )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = SbxMININT;
+ }
+ else
+ nRes = (INT16) ImpRound( dVal );
+ break;
+ }
+ case SbxLPSTR:
+ case SbxSTRING:
+ case SbxBYREF | SbxSTRING:
+ if( !p->pOUString )
+ nRes = 0;
+ else
+ {
+ double d;
+ SbxDataType t;
+ if( ImpScan( *p->pOUString, d, t, NULL ) != SbxERR_OK )
+ nRes = 0;
+ else if( d > SbxMAXINT )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = SbxMAXINT;
+ }
+ else if( d < SbxMININT )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = SbxMININT;
+ }
+ else
+ nRes = (INT16) ImpRound( d );
+ }
+ break;
+ case SbxOBJECT:
+ {
+ SbxValue* pVal = PTR_CAST(SbxValue,p->pObj);
+ if( pVal )
+ nRes = pVal->GetInteger();
+ else
+ {
+ SbxBase::SetError( SbxERR_NO_OBJECT ); nRes = 0;
+ }
+ break;
+ }
+
+ case SbxBYREF | SbxCHAR:
+ nRes = *p->pChar; break;
+ case SbxBYREF | SbxBYTE:
+ nRes = *p->pByte; break;
+ case SbxBYREF | SbxINTEGER:
+ case SbxBYREF | SbxBOOL:
+ nRes = *p->pInteger; break;
+
+ // ab hier muss getestet werden
+ case SbxBYREF | SbxLONG:
+ aTmp.nLong = *p->pLong; goto ref;
+ case SbxBYREF | SbxULONG:
+ aTmp.nULong = *p->pULong; goto ref;
+ case SbxBYREF | SbxERROR:
+ case SbxBYREF | SbxUSHORT:
+ aTmp.nUShort = *p->pUShort; goto ref;
+ case SbxBYREF | SbxSINGLE:
+ aTmp.nSingle = *p->pSingle; goto ref;
+ case SbxBYREF | SbxDATE:
+ case SbxBYREF | SbxDOUBLE:
+ aTmp.nDouble = *p->pDouble; goto ref;
+ case SbxBYREF | SbxULONG64:
+ aTmp.nULong64 = *p->pULong64; goto ref;
+ case SbxBYREF | SbxLONG64:
+ case SbxBYREF | SbxCURRENCY:
+ aTmp.nLong64 = *p->pLong64; goto ref;
+ case SbxBYREF | SbxSALINT64:
+ aTmp.nInt64 = *p->pnInt64; goto ref;
+ case SbxBYREF | SbxSALUINT64:
+ aTmp.uInt64 = *p->puInt64; goto ref;
+ ref:
+ aTmp.eType = SbxDataType( p->eType & 0x0FFF );
+ p = &aTmp; goto start;
+
+ default:
+ SbxBase::SetError( SbxERR_CONVERSION ); nRes = 0;
+ }
+ return nRes;
+}
+
+void ImpPutInteger( SbxValues* p, INT16 n )
+{
+ SbxValues aTmp;
+start:
+ switch( +p->eType )
+ {
+ // hier muss getestet werden
+ case SbxCHAR:
+ aTmp.pChar = &p->nChar; goto direct;
+ case SbxBYTE:
+ aTmp.pByte = &p->nByte; goto direct;
+ case SbxULONG:
+ aTmp.pULong = &p->nULong; goto direct;
+ case SbxERROR:
+ case SbxUSHORT:
+ aTmp.pUShort = &p->nUShort; goto direct;
+ case SbxSALUINT64:
+ aTmp.puInt64 = &p->uInt64; goto direct;
+ direct:
+ aTmp.eType = SbxDataType( p->eType | SbxBYREF );
+ p = &aTmp; goto start;
+
+ // ab hier nicht mehr
+ case SbxINTEGER:
+ case SbxBOOL:
+ p->nInteger = n; break;
+ case SbxLONG:
+ p->nLong = n; break;
+ case SbxSINGLE:
+ p->nSingle = n; break;
+ case SbxDATE:
+ case SbxDOUBLE:
+ p->nDouble = n; break;
+ case SbxSALINT64:
+ p->nInt64 = n; break;
+ case SbxULONG64:
+ p->nULong64 = ImpDoubleToUINT64( (double)n ); break;
+ case SbxLONG64:
+ p->nLong64 = ImpDoubleToINT64( (double)n ); break;
+ case SbxCURRENCY:
+ p->nLong64 = ImpDoubleToCurrency( (double)n ); break;
+ case SbxDECIMAL:
+ case SbxBYREF | SbxDECIMAL:
+ ImpCreateDecimal( p )->setInt( n );
+ break;
+
+ case SbxLPSTR:
+ case SbxSTRING:
+ case SbxBYREF | SbxSTRING:
+ if( !p->pOUString )
+ p->pOUString = new ::rtl::OUString;
+ ImpCvtNum( (double) n, 0, *p->pOUString );
+ break;
+ case SbxOBJECT:
+ {
+ SbxValue* pVal = PTR_CAST(SbxValue,p->pObj);
+ if( pVal )
+ pVal->PutInteger( n );
+ else
+ SbxBase::SetError( SbxERR_NO_OBJECT );
+ break;
+ }
+ case SbxBYREF | SbxCHAR:
+ if( n < SbxMINCHAR )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = SbxMINCHAR;
+ }
+ *p->pChar = (char) n; break;
+ case SbxBYREF | SbxBYTE:
+ if( n > SbxMAXBYTE )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = SbxMAXBYTE;
+ }
+ else if( n < 0 )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = 0;
+ }
+ *p->pByte = (BYTE) n; break;
+ case SbxBYREF | SbxINTEGER:
+ case SbxBYREF | SbxBOOL:
+ *p->pInteger = n; break;
+ case SbxBYREF | SbxERROR:
+ case SbxBYREF | SbxUSHORT:
+ if( n < 0 )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = 0;
+ }
+ *p->pUShort = (UINT16) n; break;
+ case SbxBYREF | SbxLONG:
+ *p->pLong = (INT32) n; break;
+ case SbxBYREF | SbxULONG:
+ if( n < 0 )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = 0;
+ }
+ *p->pULong = (UINT32) n; break;
+ case SbxBYREF | SbxSALINT64:
+ *p->pnInt64 = n; break;
+ case SbxBYREF | SbxSALUINT64:
+ if( n < 0 )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); *p->puInt64 = 0;
+ }
+ else
+ *p->puInt64 = n;
+ break;
+ case SbxBYREF | SbxSINGLE:
+ *p->pSingle = (float) n; break;
+ case SbxBYREF | SbxDATE:
+ case SbxBYREF | SbxDOUBLE:
+ *p->pDouble = (double) n; break;
+ case SbxBYREF | SbxULONG64:
+ *p->pULong64 = ImpDoubleToUINT64( (double)n ); break;
+ case SbxBYREF | SbxLONG64:
+ *p->pLong64 = ImpDoubleToINT64( (double)n ); break;
+ case SbxBYREF | SbxCURRENCY:
+ *p->pLong64 = ImpDoubleToCurrency( (double)n ); break;
+
+ default:
+ SbxBase::SetError( SbxERR_CONVERSION );
+ }
+}
+
+
+// sal_Int64 / hyper
+
+sal_Int64 ImpDoubleToSalInt64( double d )
+{
+ sal_Int64 nRes;
+ if( d > SbxMAXSALINT64 )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = SbxMAXSALINT64;
+ }
+ else if( d < SbxMINSALINT64 )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = SbxMINSALINT64;
+ }
+ else
+ nRes = (sal_Int64) ImpRound( d );
+ return nRes;
+}
+
+sal_uInt64 ImpDoubleToSalUInt64( double d )
+{
+ sal_uInt64 nRes;
+ if( d > SbxMAXSALUINT64 )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = SbxMAXSALUINT64;
+ }
+ else if( d < 0.0 )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = 0;
+ }
+ else
+ nRes = (sal_uInt64) ImpRound( d );
+ return nRes;
+}
+
+double ImpSalUInt64ToDouble( sal_uInt64 n )
+{
+ double d = 0.0;
+ if( n > SbxMAXSALINT64 )
+ SbxBase::SetError( SbxERR_CONVERSION );
+ else
+ d = (double)(sal_Int64) n;
+ return d;
+}
+
+
+sal_Int64 ImpGetInt64( const SbxValues* p )
+{
+ SbxValues aTmp;
+ sal_Int64 nRes;
+start:
+ switch( +p->eType )
+ {
+ case SbxNULL:
+ SbxBase::SetError( SbxERR_CONVERSION );
+ case SbxEMPTY:
+ nRes = 0; break;
+ case SbxCHAR:
+ nRes = p->nChar; break;
+ case SbxBYTE:
+ nRes = p->nByte; break;
+ case SbxINTEGER:
+ case SbxBOOL:
+ nRes = p->nInteger; break;
+ case SbxERROR:
+ case SbxUSHORT:
+ nRes = p->nUShort; break;
+ case SbxLONG:
+ nRes = p->nLong; break;
+ case SbxULONG:
+ nRes = (sal_Int64) p->nULong; break;
+ case SbxSINGLE:
+ nRes = ImpDoubleToSalInt64( (double)p->nSingle );
+ break;
+ case SbxDATE:
+ case SbxDOUBLE:
+ case SbxLONG64:
+ case SbxULONG64:
+ case SbxCURRENCY:
+ {
+ double dVal;
+ if( p->eType == SbxCURRENCY )
+ dVal = ImpCurrencyToDouble( p->nLong64 );
+ else if( p->eType == SbxLONG64 )
+ dVal = ImpINT64ToDouble( p->nLong64 );
+ else if( p->eType == SbxULONG64 )
+ dVal = ImpUINT64ToDouble( p->nULong64 );
+ else
+ dVal = p->nDouble;
+
+ nRes = ImpDoubleToSalInt64( dVal );
+ break;
+ }
+ case SbxSALINT64:
+ nRes = p->nInt64; break;
+ case SbxSALUINT64:
+ if( p->uInt64 > SbxMAXSALINT64 )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = SbxMAXSALINT64;
+ }
+ else
+ nRes = (sal_Int64) p->uInt64;
+ break;
+
+ case SbxBYREF | SbxSTRING:
+ case SbxSTRING:
+ case SbxLPSTR:
+ if( !p->pOUString )
+ nRes = 0;
+ else
+ {
+ ::rtl::OString aOStr = ::rtl::OUStringToOString
+ ( *p->pOUString, RTL_TEXTENCODING_ASCII_US );
+ nRes = aOStr.toInt64();
+ if( nRes == 0 )
+ {
+ // Check if really 0 or invalid conversion
+ double d;
+ SbxDataType t;
+ if( ImpScan( *p->pOUString, d, t, NULL ) != SbxERR_OK )
+ nRes = 0;
+ else
+ nRes = ImpDoubleToSalInt64( d );
+ }
+ }
+ break;
+ case SbxOBJECT:
+ {
+ SbxValue* pVal = PTR_CAST(SbxValue,p->pObj);
+ if( pVal )
+ nRes = pVal->GetInt64();
+ else
+ {
+ SbxBase::SetError( SbxERR_NO_OBJECT ); nRes = 0;
+ }
+ break;
+ }
+
+ case SbxBYREF | SbxCHAR:
+ nRes = *p->pChar; break;
+ case SbxBYREF | SbxBYTE:
+ nRes = *p->pByte; break;
+ case SbxBYREF | SbxINTEGER:
+ case SbxBYREF | SbxBOOL:
+ nRes = *p->pInteger; break;
+ case SbxBYREF | SbxLONG:
+ nRes = *p->pLong; break;
+ case SbxBYREF | SbxULONG:
+ nRes = *p->pULong; break;
+ case SbxBYREF | SbxSALINT64:
+ nRes = *p->pnInt64; break;
+
+ // from here the values has to be checked
+ case SbxBYREF | SbxERROR:
+ case SbxBYREF | SbxUSHORT:
+ aTmp.nUShort = *p->pUShort; goto ref;
+ case SbxBYREF | SbxSINGLE:
+ aTmp.nSingle = *p->pSingle; goto ref;
+ case SbxBYREF | SbxDATE:
+ case SbxBYREF | SbxDOUBLE:
+ aTmp.nDouble = *p->pDouble; goto ref;
+ case SbxBYREF | SbxULONG64:
+ aTmp.nULong64 = *p->pULong64; goto ref;
+ case SbxBYREF | SbxLONG64:
+ case SbxBYREF | SbxCURRENCY:
+ aTmp.nLong64 = *p->pLong64; goto ref;
+ case SbxBYREF | SbxSALUINT64:
+ aTmp.uInt64 = *p->puInt64; goto ref;
+ ref:
+ aTmp.eType = SbxDataType( p->eType & 0x0FFF );
+ p = &aTmp; goto start;
+
+ default:
+ SbxBase::SetError( SbxERR_CONVERSION ); nRes = 0;
+ }
+ return nRes;
+}
+
+void ImpPutInt64( SbxValues* p, sal_Int64 n )
+{
+ SbxValues aTmp;
+
+start:
+ switch( +p->eType )
+ {
+ // Check neccessary
+ case SbxCHAR:
+ aTmp.pChar = &p->nChar; goto direct;
+ case SbxBYTE:
+ aTmp.pByte = &p->nByte; goto direct;
+ case SbxINTEGER:
+ case SbxBOOL:
+ aTmp.pInteger = &p->nInteger; goto direct;
+ case SbxULONG64:
+ aTmp.pULong64 = &p->nULong64; goto direct;
+ case SbxLONG64:
+ case SbxCURRENCY:
+ aTmp.pLong64 = &p->nLong64; goto direct;
+ case SbxULONG:
+ aTmp.pULong = &p->nULong; goto direct;
+ case SbxERROR:
+ case SbxUSHORT:
+ aTmp.pUShort = &p->nUShort; goto direct;
+ case SbxLONG:
+ aTmp.pnInt64 = &p->nInt64; goto direct;
+ case SbxSALUINT64:
+ aTmp.puInt64 = &p->uInt64; goto direct;
+
+ direct:
+ aTmp.eType = SbxDataType( p->eType | SbxBYREF );
+ p = &aTmp; goto start;
+
+ // Check not neccessary
+ case SbxSALINT64:
+ p->nInt64 = n; break;
+ case SbxSINGLE:
+ p->nSingle = (float) n; break;
+ case SbxDATE:
+ case SbxDOUBLE:
+ p->nDouble = (double) n; break;
+
+ case SbxBYREF | SbxSTRING:
+ case SbxSTRING:
+ case SbxLPSTR:
+ {
+ if( !p->pOUString )
+ p->pOUString = new ::rtl::OUString;
+
+ ::rtl::OString aOStr = ::rtl::OString::valueOf( n );
+ (*p->pOUString) = ::rtl::OStringToOUString
+ ( aOStr, RTL_TEXTENCODING_ASCII_US );
+ break;
+ }
+ case SbxOBJECT:
+ {
+ SbxValue* pVal = PTR_CAST(SbxValue,p->pObj);
+ if( pVal )
+ pVal->PutInt64( n );
+ else
+ SbxBase::SetError( SbxERR_NO_OBJECT );
+ break;
+ }
+ case SbxBYREF | SbxCHAR:
+ if( n > SbxMAXCHAR )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = SbxMAXCHAR;
+ }
+ else if( n < SbxMINCHAR )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = SbxMINCHAR;
+ }
+ *p->pChar = (xub_Unicode) n; break;
+ case SbxBYREF | SbxBYTE:
+ if( n > SbxMAXBYTE )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = SbxMAXBYTE;
+ }
+ else if( n < 0 )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = 0;
+ }
+ *p->pByte = (BYTE) n; break;
+ case SbxBYREF | SbxINTEGER:
+ case SbxBYREF | SbxBOOL:
+ if( n > SbxMAXINT )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = SbxMAXINT;
+ }
+ else if( n < SbxMININT )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = SbxMININT;
+ }
+ *p->pInteger = (INT16) n; break;
+ case SbxBYREF | SbxERROR:
+ case SbxBYREF | SbxUSHORT:
+ if( n > SbxMAXUINT )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = SbxMAXUINT;
+ }
+ else if( n < 0 )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = 0;
+ }
+ *p->pUShort = (UINT16) n; break;
+ case SbxBYREF | SbxLONG:
+ if( n > SbxMAXLNG )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = SbxMAXLNG;
+ }
+ else if( n < SbxMINLNG )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = SbxMINLNG;
+ }
+ *p->pLong = (INT32) n; break;
+ case SbxBYREF | SbxULONG:
+ if( n > SbxMAXULNG )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = SbxMAXULNG;
+ }
+ else if( n < 0 )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = 0;
+ }
+ *p->pULong = (UINT32) n; break;
+ case SbxBYREF | SbxSINGLE:
+ *p->pSingle = (float) n; break;
+ case SbxBYREF | SbxDATE:
+ case SbxBYREF | SbxDOUBLE:
+ *p->pDouble = (double) n; break;
+ case SbxBYREF | SbxCURRENCY:
+ if( n > SbxMAXCURR )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = (sal_Int64) SbxMAXCURR;
+ }
+ else if( n < SbxMINCURR )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = (sal_Int64) SbxMINCURR;
+ }
+ *p->pLong64 = ImpDoubleToCurrency( (double)n ); break;
+
+ case SbxBYREF | SbxSALINT64:
+ *p->pnInt64 = n; break;
+ case SbxBYREF | SbxSALUINT64:
+ if( n < 0 )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = 0;
+ }
+ *p->puInt64 = (sal_Int64) n; break;
+
+ default:
+ SbxBase::SetError( SbxERR_CONVERSION );
+ }
+}
+
+sal_uInt64 ImpGetUInt64( const SbxValues* p )
+{
+ SbxValues aTmp;
+ sal_uInt64 nRes;
+start:
+ switch( +p->eType )
+ {
+ case SbxNULL:
+ SbxBase::SetError( SbxERR_CONVERSION );
+ case SbxEMPTY:
+ nRes = 0; break;
+ case SbxCHAR:
+ nRes = p->nChar; break;
+ case SbxBYTE:
+ nRes = p->nByte; break;
+ case SbxINTEGER:
+ case SbxBOOL:
+ nRes = p->nInteger; break;
+ case SbxERROR:
+ case SbxUSHORT:
+ nRes = p->nUShort; break;
+ case SbxLONG:
+ nRes = p->nLong; break;
+ case SbxULONG:
+ nRes = (sal_uInt64) p->nULong; break;
+ case SbxSINGLE:
+ nRes = ImpDoubleToSalUInt64( (double)p->nSingle );
+ break;
+ case SbxDATE:
+ case SbxDOUBLE:
+ case SbxLONG64:
+ case SbxULONG64:
+ case SbxCURRENCY:
+ {
+ double dVal;
+ if( p->eType == SbxCURRENCY )
+ dVal = ImpCurrencyToDouble( p->nLong64 );
+ else if( p->eType == SbxLONG64 )
+ dVal = ImpINT64ToDouble( p->nLong64 );
+ else if( p->eType == SbxULONG64 )
+ dVal = ImpUINT64ToDouble( p->nULong64 );
+ else
+ dVal = p->nDouble;
+
+ nRes = ImpDoubleToSalUInt64( dVal );
+ break;
+ }
+ case SbxSALINT64:
+ if( p->nInt64 < 0 )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = 0;
+ }
+ else
+ nRes = (sal_uInt64) p->nInt64;
+ case SbxSALUINT64:
+ nRes = p->uInt64; break;
+
+ case SbxBYREF | SbxSTRING:
+ case SbxSTRING:
+ case SbxLPSTR:
+ if( !p->pOUString )
+ nRes = 0;
+ else
+ {
+ ::rtl::OString aOStr = ::rtl::OUStringToOString
+ ( *p->pOUString, RTL_TEXTENCODING_ASCII_US );
+ sal_Int64 n64 = aOStr.toInt64();
+ if( n64 == 0 )
+ {
+ // Check if really 0 or invalid conversion
+ double d;
+ SbxDataType t;
+ if( ImpScan( *p->pOUString, d, t, NULL ) != SbxERR_OK )
+ nRes = 0;
+ else if( d > SbxMAXSALUINT64 )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = SbxMAXSALUINT64;
+ }
+ else if( d < 0.0 )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = 0;
+ }
+ else
+ nRes = (sal_uInt64) ImpRound( d );
+ }
+ else if( n64 < 0 )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = 0;
+ }
+ else
+ {
+ nRes = n64;
+ }
+ }
+ break;
+ case SbxOBJECT:
+ {
+ SbxValue* pVal = PTR_CAST(SbxValue,p->pObj);
+ if( pVal )
+ nRes = pVal->GetUInt64();
+ else
+ {
+ SbxBase::SetError( SbxERR_NO_OBJECT ); nRes = 0;
+ }
+ break;
+ }
+
+ case SbxBYREF | SbxCHAR:
+ nRes = *p->pChar; break;
+ case SbxBYREF | SbxBYTE:
+ nRes = *p->pByte; break;
+ case SbxBYREF | SbxINTEGER:
+ case SbxBYREF | SbxBOOL:
+ nRes = *p->pInteger; break;
+ case SbxBYREF | SbxLONG:
+ nRes = *p->pLong; break;
+ case SbxBYREF | SbxULONG:
+ nRes = *p->pULong; break;
+ case SbxBYREF | SbxSALUINT64:
+ nRes = *p->puInt64; break;
+
+ // from here the values has to be checked
+ case SbxBYREF | SbxERROR:
+ case SbxBYREF | SbxUSHORT:
+ aTmp.nUShort = *p->pUShort; goto ref;
+ case SbxBYREF | SbxSINGLE:
+ aTmp.nSingle = *p->pSingle; goto ref;
+ case SbxBYREF | SbxDATE:
+ case SbxBYREF | SbxDOUBLE:
+ aTmp.nDouble = *p->pDouble; goto ref;
+ case SbxBYREF | SbxULONG64:
+ aTmp.nULong64 = *p->pULong64; goto ref;
+ case SbxBYREF | SbxLONG64:
+ case SbxBYREF | SbxCURRENCY:
+ aTmp.nLong64 = *p->pLong64; goto ref;
+ case SbxBYREF | SbxSALINT64:
+ aTmp.nInt64 = *p->pnInt64; goto ref;
+ ref:
+ aTmp.eType = SbxDataType( p->eType & 0x0FFF );
+ p = &aTmp; goto start;
+
+ default:
+ SbxBase::SetError( SbxERR_CONVERSION ); nRes = 0;
+ }
+ return nRes;
+}
+
+void ImpPutUInt64( SbxValues* p, sal_uInt64 n )
+{
+ SbxValues aTmp;
+
+start:
+ switch( +p->eType )
+ {
+ // Check neccessary
+ case SbxCHAR:
+ aTmp.pChar = &p->nChar; goto direct;
+ case SbxBYTE:
+ aTmp.pByte = &p->nByte; goto direct;
+ case SbxINTEGER:
+ case SbxBOOL:
+ aTmp.pInteger = &p->nInteger; goto direct;
+ case SbxULONG64:
+ aTmp.pULong64 = &p->nULong64; goto direct;
+ case SbxLONG64:
+ case SbxCURRENCY:
+ aTmp.pLong64 = &p->nLong64; goto direct;
+ case SbxULONG:
+ aTmp.pULong = &p->nULong; goto direct;
+ case SbxERROR:
+ case SbxUSHORT:
+ aTmp.pUShort = &p->nUShort; goto direct;
+ case SbxLONG:
+ aTmp.pnInt64 = &p->nInt64; goto direct;
+ case SbxSALINT64:
+ aTmp.pnInt64 = &p->nInt64; goto direct;
+ case SbxSINGLE:
+ aTmp.pSingle = &p->nSingle; goto direct;
+ case SbxDATE:
+ case SbxDOUBLE:
+ aTmp.pDouble = &p->nDouble; goto direct;
+
+ direct:
+ aTmp.eType = SbxDataType( p->eType | SbxBYREF );
+ p = &aTmp; goto start;
+
+ // Check not neccessary
+ case SbxSALUINT64:
+ p->uInt64 = n; break;
+
+ case SbxBYREF | SbxSTRING:
+ case SbxSTRING:
+ case SbxLPSTR:
+ if( !p->pOUString )
+ p->pOUString = new ::rtl::OUString;
+ if( n > SbxMAXSALINT64 )
+ SbxBase::SetError( SbxERR_CONVERSION );
+ else
+ {
+ ::rtl::OString aOStr = ::rtl::OString::valueOf( (sal_Int64)n );
+ (*p->pOUString) = ::rtl::OStringToOUString
+ ( aOStr, RTL_TEXTENCODING_ASCII_US );
+ }
+ break;
+ case SbxOBJECT:
+ {
+ SbxValue* pVal = PTR_CAST(SbxValue,p->pObj);
+ if( pVal )
+ pVal->PutUInt64( n );
+ else
+ SbxBase::SetError( SbxERR_NO_OBJECT );
+ break;
+ }
+ case SbxBYREF | SbxCHAR:
+ if( n > SbxMAXCHAR )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = SbxMAXCHAR;
+ }
+ *p->pChar = (xub_Unicode) n; break;
+ case SbxBYREF | SbxBYTE:
+ if( n > SbxMAXBYTE )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = SbxMAXBYTE;
+ }
+ *p->pByte = (BYTE) n; break;
+ case SbxBYREF | SbxINTEGER:
+ case SbxBYREF | SbxBOOL:
+ if( n > SbxMAXINT )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = SbxMAXINT;
+ }
+ *p->pInteger = (INT16) n; break;
+ case SbxBYREF | SbxERROR:
+ case SbxBYREF | SbxUSHORT:
+ if( n > SbxMAXUINT )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = SbxMAXUINT;
+ }
+ *p->pUShort = (UINT16) n; break;
+ case SbxBYREF | SbxLONG:
+ if( n > SbxMAXLNG )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = SbxMAXLNG;
+ }
+ *p->pLong = (INT32) n; break;
+ case SbxBYREF | SbxULONG:
+ if( n > SbxMAXULNG )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = SbxMAXULNG;
+ }
+ *p->pULong = (UINT32) n; break;
+ case SbxBYREF | SbxSINGLE:
+ *p->pDouble = (float)ImpSalUInt64ToDouble( n ); break;
+ case SbxBYREF | SbxDATE:
+ case SbxBYREF | SbxDOUBLE:
+ *p->pDouble = ImpSalUInt64ToDouble( n ); break;
+ case SbxBYREF | SbxCURRENCY:
+ if( n > SbxMAXSALINT64 || (sal_Int64)n > SbxMAXCURR )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = (sal_Int64) SbxMAXCURR;
+ }
+ *p->pLong64 = ImpDoubleToCurrency( (double)(sal_Int64) n ); break;
+
+ case SbxBYREF | SbxSALUINT64:
+ *p->puInt64 = n; break;
+ case SbxBYREF | SbxSALINT64:
+ if( n > SbxMAXSALINT64 )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = 0;
+ }
+ *p->pnInt64 = (sal_Int64) n; break;
+
+ default:
+ SbxBase::SetError( SbxERR_CONVERSION );
+ }
+}
+
+
diff --git a/basic/source/sbx/sbxlng.cxx b/basic/source/sbx/sbxlng.cxx
new file mode 100644
index 000000000000..1cf2d84061f9
--- /dev/null
+++ b/basic/source/sbx/sbxlng.cxx
@@ -0,0 +1,341 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+#include <tools/errcode.hxx>
+#include <basic/sbx.hxx>
+#include "sbxconv.hxx"
+
+INT32 ImpGetLong( const SbxValues* p )
+{
+ SbxValues aTmp;
+ INT32 nRes;
+start:
+ switch( +p->eType )
+ {
+ case SbxNULL:
+ SbxBase::SetError( SbxERR_CONVERSION );
+ case SbxEMPTY:
+ nRes = 0; break;
+ case SbxCHAR:
+ nRes = p->nChar; break;
+ case SbxBYTE:
+ nRes = p->nByte; break;
+ case SbxINTEGER:
+ case SbxBOOL:
+ nRes = p->nInteger; break;
+ case SbxERROR:
+ case SbxUSHORT:
+ nRes = p->nUShort; break;
+ case SbxLONG:
+ nRes = p->nLong; break;
+ case SbxULONG:
+ if( p->nULong > SbxMAXLNG )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = SbxMAXLNG;
+ }
+ else
+ nRes = (INT32) p->nULong;
+ break;
+ case SbxSINGLE:
+ if( p->nSingle > SbxMAXLNG )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = SbxMAXLNG;
+ }
+ else if( p->nSingle < SbxMINLNG )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = SbxMINLNG;
+ }
+ else
+ nRes = (INT32) ImpRound( p->nSingle );
+ break;
+ case SbxDATE:
+ case SbxDOUBLE:
+ case SbxLONG64:
+ case SbxULONG64:
+ case SbxSALINT64:
+ case SbxSALUINT64:
+ case SbxCURRENCY:
+ case SbxDECIMAL:
+ case SbxBYREF | SbxDECIMAL:
+ {
+ double dVal;
+ if( p->eType == SbxCURRENCY )
+ dVal = ImpCurrencyToDouble( p->nLong64 );
+ else if( p->eType == SbxLONG64 )
+ dVal = ImpINT64ToDouble( p->nLong64 );
+ else if( p->eType == SbxULONG64 )
+ dVal = ImpUINT64ToDouble( p->nULong64 );
+ else if( p->eType == SbxSALINT64 )
+ dVal = static_cast< double >(p->nInt64);
+ else if( p->eType == SbxSALUINT64 )
+ dVal = ImpSalUInt64ToDouble( p->uInt64 );
+ else if( p->eType == SbxDECIMAL )
+ {
+ dVal = 0.0;
+ if( p->pDecimal )
+ p->pDecimal->getDouble( dVal );
+ }
+ else
+ dVal = p->nDouble;
+
+ if( dVal > SbxMAXLNG )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = SbxMAXLNG;
+ }
+ else if( dVal < SbxMINLNG )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = SbxMINLNG;
+ }
+ else
+ nRes = (INT32) ImpRound( dVal );
+ break;
+ }
+ case SbxBYREF | SbxSTRING:
+ case SbxSTRING:
+ case SbxLPSTR:
+ if( !p->pOUString )
+ nRes = 0;
+ else
+ {
+ double d;
+ SbxDataType t;
+ if( ImpScan( *p->pOUString, d, t, NULL ) != SbxERR_OK )
+ nRes = 0;
+ else if( d > SbxMAXLNG )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = SbxMAXLNG;
+ }
+ else if( d < SbxMINLNG )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = SbxMINLNG;
+ }
+ else
+ nRes = (INT32) ImpRound( d );
+ }
+ break;
+ case SbxOBJECT:
+ {
+ SbxValue* pVal = PTR_CAST(SbxValue,p->pObj);
+ if( pVal )
+ nRes = pVal->GetLong();
+ else
+ {
+ SbxBase::SetError( SbxERR_NO_OBJECT ); nRes = 0;
+ }
+ break;
+ }
+
+ case SbxBYREF | SbxCHAR:
+ nRes = *p->pChar; break;
+ case SbxBYREF | SbxBYTE:
+ nRes = *p->pByte; break;
+ case SbxBYREF | SbxINTEGER:
+ case SbxBYREF | SbxBOOL:
+ nRes = *p->pInteger; break;
+ case SbxBYREF | SbxLONG:
+ nRes = *p->pLong; break;
+
+ // ab hier muss getestet werden
+ case SbxBYREF | SbxULONG:
+ aTmp.nULong = *p->pULong; goto ref;
+ case SbxBYREF | SbxERROR:
+ case SbxBYREF | SbxUSHORT:
+ aTmp.nUShort = *p->pUShort; goto ref;
+ case SbxBYREF | SbxSINGLE:
+ aTmp.nSingle = *p->pSingle; goto ref;
+ case SbxBYREF | SbxDATE:
+ case SbxBYREF | SbxDOUBLE:
+ aTmp.nDouble = *p->pDouble; goto ref;
+ case SbxBYREF | SbxSALINT64:
+ aTmp.nInt64 = *p->pnInt64; goto ref;
+ case SbxBYREF | SbxSALUINT64:
+ aTmp.uInt64 = *p->puInt64; goto ref;
+ case SbxBYREF | SbxULONG64:
+ aTmp.nULong64 = *p->pULong64; goto ref;
+ case SbxBYREF | SbxLONG64:
+ case SbxBYREF | SbxCURRENCY:
+ aTmp.nLong64 = *p->pLong64; goto ref;
+ ref:
+ aTmp.eType = SbxDataType( p->eType & 0x0FFF );
+ p = &aTmp; goto start;
+
+ default:
+ SbxBase::SetError( SbxERR_CONVERSION ); nRes = 0;
+ }
+ return nRes;
+}
+
+void ImpPutLong( SbxValues* p, INT32 n )
+{
+ SbxValues aTmp;
+
+start:
+ switch( +p->eType )
+ {
+ // Ab hier muss getestet werden
+ case SbxCHAR:
+ aTmp.pChar = &p->nChar; goto direct;
+ case SbxBYTE:
+ aTmp.pByte = &p->nByte; goto direct;
+ case SbxINTEGER:
+ case SbxBOOL:
+ aTmp.pInteger = &p->nInteger; goto direct;
+ case SbxULONG64:
+ aTmp.pULong64 = &p->nULong64; goto direct;
+ case SbxLONG64:
+ case SbxCURRENCY:
+ aTmp.pLong64 = &p->nLong64; goto direct;
+ case SbxULONG:
+ aTmp.pULong = &p->nULong; goto direct;
+ case SbxSALUINT64:
+ aTmp.puInt64 = &p->uInt64; goto direct;
+ case SbxERROR:
+ case SbxUSHORT:
+ aTmp.pUShort = &p->nUShort;
+ direct:
+ aTmp.eType = SbxDataType( p->eType | SbxBYREF );
+ p = &aTmp; goto start;
+
+ // ab hier nicht mehr
+ case SbxLONG:
+ p->nLong = n; break;
+ case SbxSINGLE:
+ p->nSingle = (float) n; break;
+ case SbxDATE:
+ case SbxDOUBLE:
+ p->nDouble = n; break;
+ case SbxSALINT64:
+ p->nInt64 = n; break;
+ case SbxDECIMAL:
+ case SbxBYREF | SbxDECIMAL:
+ ImpCreateDecimal( p )->setLong( n );
+ break;
+
+ case SbxBYREF | SbxSTRING:
+ case SbxSTRING:
+ case SbxLPSTR:
+ if( !p->pOUString )
+ p->pOUString = new ::rtl::OUString;
+ ImpCvtNum( (double) n, 0, *p->pOUString );
+ break;
+ case SbxOBJECT:
+ {
+ SbxValue* pVal = PTR_CAST(SbxValue,p->pObj);
+ if( pVal )
+ pVal->PutLong( n );
+ else
+ SbxBase::SetError( SbxERR_NO_OBJECT );
+ break;
+ }
+ case SbxBYREF | SbxCHAR:
+ if( n > SbxMAXCHAR )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = SbxMAXCHAR;
+ }
+ else if( n < SbxMINCHAR )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = SbxMINCHAR;
+ }
+ *p->pChar = (xub_Unicode) n; break;
+ case SbxBYREF | SbxBYTE:
+ if( n > SbxMAXBYTE )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = SbxMAXBYTE;
+ }
+ else if( n < 0 )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = 0;
+ }
+ *p->pByte = (BYTE) n; break;
+ case SbxBYREF | SbxINTEGER:
+ case SbxBYREF | SbxBOOL:
+ if( n > SbxMAXINT )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = SbxMAXINT;
+ }
+ else if( n < SbxMININT )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = SbxMININT;
+ }
+ *p->pInteger = (INT16) n; break;
+ case SbxBYREF | SbxERROR:
+ case SbxBYREF | SbxUSHORT:
+ if( n > SbxMAXUINT )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = SbxMAXUINT;
+ }
+ else if( n < 0 )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = 0;
+ }
+ *p->pUShort = (UINT16) n; break;
+ case SbxBYREF | SbxLONG:
+ *p->pLong = n; break;
+ case SbxBYREF | SbxULONG:
+ if( n < 0 )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = 0;
+ }
+ *p->pULong = (UINT32) n; break;
+ case SbxBYREF | SbxSALINT64:
+ *p->pnInt64 = n; break;
+ case SbxBYREF | SbxSALUINT64:
+ if( n < 0 )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); *p->puInt64 = 0;
+ }
+ else
+ *p->puInt64 = n;
+ break;
+ case SbxBYREF | SbxSINGLE:
+ *p->pSingle = (float) n; break;
+ case SbxBYREF | SbxDATE:
+ case SbxBYREF | SbxDOUBLE:
+ *p->pDouble = (double) n; break;
+ case SbxBYREF | SbxCURRENCY:
+ double d;
+ if( n > SbxMAXCURR )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); d = SbxMAXCURR;
+ }
+ else if( n < SbxMINCURR )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); d = SbxMINCURR;
+ }
+ else
+ {
+ d = n;
+ }
+ *p->pLong64 = ImpDoubleToCurrency( d ); break;
+
+ default:
+ SbxBase::SetError( SbxERR_CONVERSION );
+ }
+}
+
diff --git a/basic/source/sbx/sbxmstrm.cxx b/basic/source/sbx/sbxmstrm.cxx
new file mode 100644
index 000000000000..671c0bc5d1d9
--- /dev/null
+++ b/basic/source/sbx/sbxmstrm.cxx
@@ -0,0 +1,39 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+#include <basic/sbxmstrm.hxx>
+
+SbxDataType SbxMemoryStream::GetType() const
+{
+ return SbxMEMORYSTREAM;
+}
+
+SbxMemoryStream::~SbxMemoryStream()
+{
+}
diff --git a/basic/source/sbx/sbxobj.cxx b/basic/source/sbx/sbxobj.cxx
new file mode 100644
index 000000000000..b2b67fe3774f
--- /dev/null
+++ b/basic/source/sbx/sbxobj.cxx
@@ -0,0 +1,1145 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+#include <tools/stream.hxx>
+#include <vcl/sound.hxx>
+#include <basic/sbx.hxx>
+#include <basic/sbxbase.hxx>
+#include "sbxres.hxx"
+#include <svl/brdcst.hxx>
+
+TYPEINIT1(SbxMethod,SbxVariable)
+TYPEINIT1(SbxProperty,SbxVariable)
+TYPEINIT2(SbxObject,SbxVariable,SfxListener)
+
+static const char* pNameProp; // Name-Property
+static const char* pParentProp; // Parent-Property
+
+static USHORT nNameHash = 0, nParentHash = 0;
+
+/////////////////////////////////////////////////////////////////////////
+
+/////////////////////////////////////////////////////////////////////////
+
+SbxObject::SbxObject( const XubString& rClass )
+ : SbxVariable( SbxOBJECT ), aClassName( rClass )
+{
+ aData.pObj = this;
+ if( !nNameHash )
+ {
+ pNameProp = GetSbxRes( STRING_NAMEPROP );
+ pParentProp = GetSbxRes( STRING_PARENTPROP );
+ nNameHash = MakeHashCode( String::CreateFromAscii( pNameProp ) );
+ nParentHash = MakeHashCode( String::CreateFromAscii( pParentProp ) );
+ }
+ SbxObject::Clear();
+ SbxObject::SetName( rClass );
+}
+
+SbxObject::SbxObject( const SbxObject& rObj )
+ : SvRefBase( rObj ), SbxVariable( rObj.GetType() ),
+ SfxListener( rObj )
+{
+ *this = rObj;
+}
+
+SbxObject& SbxObject::operator=( const SbxObject& r )
+{
+ if( &r != this )
+ {
+ SbxVariable::operator=( r );
+ aClassName = r.aClassName;
+ pMethods = new SbxArray;
+ pProps = new SbxArray;
+ pObjs = new SbxArray( SbxOBJECT );
+ // Die Arrays werden kopiert, die Inhalte uebernommen
+ *pMethods = *r.pMethods;
+ *pProps = *r.pProps;
+ *pObjs = *r.pObjs;
+ // Da die Variablen uebernommen wurden, ist dies OK
+ pDfltProp = r.pDfltProp;
+ SetName( r.GetName() );
+ SetFlags( r.GetFlags() );
+ SetModified( TRUE );
+ }
+ return *this;
+}
+
+static void CheckParentsOnDelete( SbxObject* pObj, SbxArray* p )
+{
+ for( USHORT i = 0; i < p->Count(); i++ )
+ {
+ SbxVariableRef& rRef = p->GetRef( i );
+ if( rRef->IsBroadcaster() )
+ pObj->EndListening( rRef->GetBroadcaster(), TRUE );
+ // Hat das Element mehr als eine Referenz und noch einen Listener?
+ if( rRef->GetRefCount() > 1 )
+ {
+ rRef->SetParent( NULL );
+ DBG_ASSERT( !rRef->IsBroadcaster() || rRef->GetBroadcaster().GetListenerCount(), "Object element with dangling parent" );
+ }
+ }
+}
+
+SbxObject::~SbxObject()
+{
+ CheckParentsOnDelete( this, pProps );
+ CheckParentsOnDelete( this, pMethods );
+ CheckParentsOnDelete( this, pObjs );
+}
+
+SbxDataType SbxObject::GetType() const
+{
+ return SbxOBJECT;
+}
+
+SbxClassType SbxObject::GetClass() const
+{
+ return SbxCLASS_OBJECT;
+}
+
+void SbxObject::Clear()
+{
+ pMethods = new SbxArray;
+ pProps = new SbxArray;
+ pObjs = new SbxArray( SbxOBJECT );
+ SbxVariable* p;
+ p = Make( String::CreateFromAscii( pNameProp ), SbxCLASS_PROPERTY, SbxSTRING );
+ p->SetFlag( SBX_DONTSTORE );
+ p = Make( String::CreateFromAscii( pParentProp ), SbxCLASS_PROPERTY, SbxOBJECT );
+ p->ResetFlag( SBX_WRITE );
+ p->SetFlag( SBX_DONTSTORE );
+ pDfltProp = NULL;
+ SetModified( FALSE );
+}
+
+void SbxObject::SFX_NOTIFY( SfxBroadcaster&, const TypeId&,
+ const SfxHint& rHint, const TypeId& )
+{
+ const SbxHint* p = PTR_CAST(SbxHint,&rHint);
+ if( p )
+ {
+ ULONG nId = p->GetId();
+ BOOL bRead = BOOL( nId == SBX_HINT_DATAWANTED );
+ BOOL bWrite = BOOL( nId == SBX_HINT_DATACHANGED );
+ SbxVariable* pVar = p->GetVar();
+ if( bRead || bWrite )
+ {
+ XubString aVarName( pVar->GetName() );
+ USHORT nHash_ = MakeHashCode( aVarName );
+ if( nHash_ == nNameHash
+ && aVarName.EqualsIgnoreCaseAscii( pNameProp ) )
+ {
+ if( bRead )
+ pVar->PutString( GetName() );
+ else
+ SetName( pVar->GetString() );
+ }
+ else if( nHash_ == nParentHash
+ && aVarName.EqualsIgnoreCaseAscii( pParentProp ) )
+ {
+ SbxObject* p_ = GetParent();
+ if( !p_ )
+ p_ = this;
+ pVar->PutObject( p_ );
+ }
+ }
+ }
+}
+
+BOOL SbxObject::IsClass( const XubString& rName ) const
+{
+ return BOOL( aClassName.EqualsIgnoreCaseAscii( rName ) );
+}
+
+SbxVariable* SbxObject::FindUserData( UINT32 nData )
+{
+ if( !GetAll( SbxCLASS_DONTCARE ) )
+ return NULL;
+
+ SbxVariable* pRes = pMethods->FindUserData( nData );
+ if( !pRes )
+ pRes = pProps->FindUserData( nData );
+ if( !pRes )
+ pRes = pObjs->FindUserData( nData );
+ // Search in den Parents?
+ if( !pRes && IsSet( SBX_GBLSEARCH ) )
+ {
+ SbxObject* pCur = this;
+ while( !pRes && pCur->pParent )
+ {
+ // Ich selbst bin schon durchsucht worden!
+ USHORT nOwn = pCur->GetFlags();
+ pCur->ResetFlag( SBX_EXTSEARCH );
+ // Ich suche bereits global!
+ USHORT nPar = pCur->pParent->GetFlags();
+ pCur->pParent->ResetFlag( SBX_GBLSEARCH );
+ pRes = pCur->pParent->FindUserData( nData );
+ pCur->SetFlags( nOwn );
+ pCur->pParent->SetFlags( nPar );
+ pCur = pCur->pParent;
+ }
+ }
+ return pRes;
+}
+
+SbxVariable* SbxObject::Find( const XubString& rName, SbxClassType t )
+{
+#ifdef DBG_UTIL
+ static USHORT nLvl = 0;
+ static const char* pCls[] =
+ { "DontCare","Array","Value","Variable","Method","Property","Object" };
+ ByteString aNameStr1( (const UniString&)rName, RTL_TEXTENCODING_ASCII_US );
+ ByteString aNameStr2( (const UniString&)SbxVariable::GetName(), RTL_TEXTENCODING_ASCII_US );
+ DbgOutf( "SBX: Search %.*s %s %s in %s",
+ nLvl++, " ",
+ ( t >= SbxCLASS_DONTCARE && t <= SbxCLASS_OBJECT )
+ ? pCls[ t-1 ] : "Unknown class", aNameStr1.GetBuffer(), aNameStr1.GetBuffer() );
+#endif
+
+ if( !GetAll( t ) )
+ return NULL;
+ SbxVariable* pRes = NULL;
+ pObjs->SetFlag( SBX_EXTSEARCH );
+ if( t == SbxCLASS_DONTCARE )
+ {
+ pRes = pMethods->Find( rName, SbxCLASS_METHOD );
+ if( !pRes )
+ pRes = pProps->Find( rName, SbxCLASS_PROPERTY );
+ if( !pRes )
+ pRes = pObjs->Find( rName, t );
+ }
+ else
+ {
+ SbxArray* pArray = NULL;
+ switch( t )
+ {
+ case SbxCLASS_VARIABLE:
+ case SbxCLASS_PROPERTY: pArray = pProps; break;
+ case SbxCLASS_METHOD: pArray = pMethods; break;
+ case SbxCLASS_OBJECT: pArray = pObjs; break;
+ default:
+ DBG_ASSERT( !this, "Ungueltige SBX-Klasse" );
+ }
+ if( pArray )
+ pRes = pArray->Find( rName, t );
+ }
+ // Extended Search im Objekt-Array?
+ // Fuer Objekte und DontCare ist das Objektarray bereits
+ // durchsucht worden
+ if( !pRes && ( t == SbxCLASS_METHOD || t == SbxCLASS_PROPERTY ) )
+ pRes = pObjs->Find( rName, t );
+ // Search in den Parents?
+ if( !pRes && IsSet( SBX_GBLSEARCH ) )
+ {
+ SbxObject* pCur = this;
+ while( !pRes && pCur->pParent )
+ {
+ // Ich selbst bin schon durchsucht worden!
+ USHORT nOwn = pCur->GetFlags();
+ pCur->ResetFlag( SBX_EXTSEARCH );
+ // Ich suche bereits global!
+ USHORT nPar = pCur->pParent->GetFlags();
+ pCur->pParent->ResetFlag( SBX_GBLSEARCH );
+ pRes = pCur->pParent->Find( rName, t );
+ pCur->SetFlags( nOwn );
+ pCur->pParent->SetFlags( nPar );
+ pCur = pCur->pParent;
+ }
+ }
+#ifdef DBG_UTIL
+ nLvl--;
+ if( pRes )
+ {
+ ByteString aNameStr3( (const UniString&)rName, RTL_TEXTENCODING_ASCII_US );
+ ByteString aNameStr4( (const UniString&)SbxVariable::GetName(), RTL_TEXTENCODING_ASCII_US );
+ DbgOutf( "SBX: Found %.*s %s in %s",
+ nLvl, " ", aNameStr3.GetBuffer(), aNameStr4.GetBuffer() );
+ }
+#endif
+ return pRes;
+}
+
+// Kurzform: Die Parent-Kette wird durchsucht
+// Das ganze rekursiv, da Call() ueberladen sein kann
+// Qualified Names sind zugelassen
+
+BOOL SbxObject::Call( const XubString& rName, SbxArray* pParam )
+{
+ SbxVariable* pMeth = FindQualified( rName, SbxCLASS_DONTCARE);
+ if( pMeth && pMeth->ISA(SbxMethod) )
+ {
+ // FindQualified() koennte schon zugeschlagen haben!
+ if( pParam )
+ pMeth->SetParameters( pParam );
+ pMeth->Broadcast( SBX_HINT_DATAWANTED );
+ pMeth->SetParameters( NULL );
+ return TRUE;
+ }
+ SetError( SbxERR_NO_METHOD );
+ return FALSE;
+}
+
+SbxProperty* SbxObject::GetDfltProperty()
+{
+ if ( !pDfltProp && aDfltPropName.Len() )
+ {
+ pDfltProp = (SbxProperty*) Find( aDfltPropName, SbxCLASS_PROPERTY );
+ if( !pDfltProp )
+ pDfltProp = (SbxProperty*) Make( aDfltPropName, SbxCLASS_PROPERTY, SbxVARIANT );
+ }
+ return pDfltProp;
+}
+void SbxObject::SetDfltProperty( const XubString& rName )
+{
+ if ( rName != aDfltPropName )
+ pDfltProp = NULL;
+ aDfltPropName = rName;
+ SetModified( TRUE );
+}
+
+void SbxObject::SetDfltProperty( SbxProperty* p )
+{
+ if( p )
+ {
+ USHORT n;
+ SbxArray* pArray = FindVar( p, n );
+ pArray->Put( p, n );
+ if( p->GetParent() != this )
+ p->SetParent( this );
+ Broadcast( SBX_HINT_OBJECTCHANGED );
+ }
+ pDfltProp = p;
+ SetModified( TRUE );
+}
+
+// Suchen einer bereits vorhandenen Variablen. Falls sie gefunden wurde,
+// wird der Index gesetzt, sonst wird der Count des Arrays geliefert.
+// In jedem Fall wird das korrekte Array geliefert.
+
+SbxArray* SbxObject::FindVar( SbxVariable* pVar, USHORT& nArrayIdx )
+{
+ SbxArray* pArray = NULL;
+ if( pVar ) switch( pVar->GetClass() )
+ {
+ case SbxCLASS_VARIABLE:
+ case SbxCLASS_PROPERTY: pArray = pProps; break;
+ case SbxCLASS_METHOD: pArray = pMethods; break;
+ case SbxCLASS_OBJECT: pArray = pObjs; break;
+ default:
+ DBG_ASSERT( !this, "Ungueltige SBX-Klasse" );
+ }
+ if( pArray )
+ {
+ nArrayIdx = pArray->Count();
+ // ist die Variable per Name vorhanden?
+ pArray->ResetFlag( SBX_EXTSEARCH );
+ SbxVariable* pOld = pArray->Find( pVar->GetName(), pVar->GetClass() );
+ if( pOld )
+ for( USHORT i = 0; i < pArray->Count(); i++ )
+ {
+ SbxVariableRef& rRef = pArray->GetRef( i );
+ if( (SbxVariable*) rRef == pOld )
+ {
+ nArrayIdx = i; break;
+ }
+ }
+ }
+ return pArray;
+}
+
+// Falls ein neues Objekt eingerichtet wird, wird es, falls es bereits
+// eines mit diesem Namen gibt, indiziert.
+
+SbxVariable* SbxObject::Make( const XubString& rName, SbxClassType ct, SbxDataType dt )
+{
+ // Ist das Objekt bereits vorhanden?
+ SbxArray* pArray = NULL;
+ switch( ct )
+ {
+ case SbxCLASS_VARIABLE:
+ case SbxCLASS_PROPERTY: pArray = pProps; break;
+ case SbxCLASS_METHOD: pArray = pMethods; break;
+ case SbxCLASS_OBJECT: pArray = pObjs; break;
+ default:
+ DBG_ASSERT( !this, "Ungueltige SBX-Klasse" );
+ }
+ if( !pArray )
+ return NULL;
+ // Collections duerfen gleichnamige Objekte enthalten
+ if( !( ct == SbxCLASS_OBJECT && ISA(SbxCollection) ) )
+ {
+ SbxVariable* pRes = pArray->Find( rName, ct );
+ if( pRes )
+ {
+/* Wegen haeufiger Probleme (z.B. #67000) erstmal ganz raus
+#ifdef DBG_UTIL
+ if( pRes->GetHashCode() != nNameHash
+ && pRes->GetHashCode() != nParentHash )
+ {
+ XubString aMsg( "SBX-Element \"" );
+ aMsg += pRes->GetName();
+ aMsg += "\"\n in Objekt \"";
+ aMsg += GetName();
+ aMsg += "\" bereits vorhanden";
+ DbgError( (const char*)aMsg.GetStr() );
+ }
+#endif
+*/
+ return pRes;
+ }
+ }
+ SbxVariable* pVar = NULL;
+ switch( ct )
+ {
+ case SbxCLASS_VARIABLE:
+ case SbxCLASS_PROPERTY:
+ pVar = new SbxProperty( rName, dt );
+ break;
+ case SbxCLASS_METHOD:
+ pVar = new SbxMethod( rName, dt );
+ break;
+ case SbxCLASS_OBJECT:
+ pVar = CreateObject( rName );
+ break;
+ default: break;
+ }
+ pVar->SetParent( this );
+ pArray->Put( pVar, pArray->Count() );
+ SetModified( TRUE );
+ // Das Objekt lauscht immer
+ StartListening( pVar->GetBroadcaster(), TRUE );
+ Broadcast( SBX_HINT_OBJECTCHANGED );
+ return pVar;
+}
+
+SbxObject* SbxObject::MakeObject( const XubString& rName, const XubString& rClass )
+{
+ // Ist das Objekt bereits vorhanden?
+ if( !ISA(SbxCollection) )
+ {
+ SbxVariable* pRes = pObjs->Find( rName, SbxCLASS_OBJECT );
+ if( pRes )
+ {
+/* Wegen haeufiger Probleme (z.B. #67000) erstmal ganz raus
+#ifdef DBG_UTIL
+ if( pRes->GetHashCode() != nNameHash
+ && pRes->GetHashCode() != nParentHash )
+ {
+ XubString aMsg( "SBX-Objekt \"" );
+ aMsg += pRes->GetName();
+ aMsg += "\"\n in Objekt \"";
+ aMsg += GetName();
+ aMsg += "\" bereits vorhanden";
+ DbgError( (const char*)aMsg.GetStr() );
+ }
+#endif
+*/
+ return PTR_CAST(SbxObject,pRes);
+ }
+ }
+ SbxObject* pVar = CreateObject( rClass );
+ if( pVar )
+ {
+ pVar->SetName( rName );
+ pVar->SetParent( this );
+ pObjs->Put( pVar, pObjs->Count() );
+ SetModified( TRUE );
+ // Das Objekt lauscht immer
+ StartListening( pVar->GetBroadcaster(), TRUE );
+ Broadcast( SBX_HINT_OBJECTCHANGED );
+ }
+ return pVar;
+}
+
+void SbxObject::Insert( SbxVariable* pVar )
+{
+ USHORT nIdx;
+ SbxArray* pArray = FindVar( pVar, nIdx );
+ if( pArray )
+ {
+ // Hinein damit. Man sollte allerdings auf die Pointer aufpassen!
+ if( nIdx < pArray->Count() )
+ {
+ // dann gibt es dieses Element bereits
+ // Bei Collections duerfen gleichnamige Objekte hinein
+ if( pArray == pObjs && ISA(SbxCollection) )
+ nIdx = pArray->Count();
+ else
+ {
+ SbxVariable* pOld = pArray->Get( nIdx );
+ // schon drin: ueberschreiben
+ if( pOld == pVar )
+ return;
+
+/* Wegen haeufiger Probleme (z.B. #67000) erstmal ganz raus
+#ifdef DBG_UTIL
+ if( pOld->GetHashCode() != nNameHash
+ && pOld->GetHashCode() != nParentHash )
+ {
+ XubString aMsg( "SBX-Element \"" );
+ aMsg += pVar->GetName();
+ aMsg += "\"\n in Objekt \"";
+ aMsg += GetName();
+ aMsg += "\" bereits vorhanden";
+ DbgError( (const char*)aMsg.GetStr() );
+ }
+#endif
+*/
+ EndListening( pOld->GetBroadcaster(), TRUE );
+ if( pVar->GetClass() == SbxCLASS_PROPERTY )
+ {
+ if( pOld == pDfltProp )
+ pDfltProp = (SbxProperty*) pVar;
+ }
+ }
+ }
+ StartListening( pVar->GetBroadcaster(), TRUE );
+ pArray->Put( pVar, nIdx );
+ if( pVar->GetParent() != this )
+ pVar->SetParent( this );
+ SetModified( TRUE );
+ Broadcast( SBX_HINT_OBJECTCHANGED );
+#ifdef DBG_UTIL
+ static const char* pCls[] =
+ { "DontCare","Array","Value","Variable","Method","Property","Object" };
+ XubString aVarName( pVar->GetName() );
+ if ( !aVarName.Len() && pVar->ISA(SbxObject) )
+ aVarName = PTR_CAST(SbxObject,pVar)->GetClassName();
+ ByteString aNameStr1( (const UniString&)aVarName, RTL_TEXTENCODING_ASCII_US );
+ ByteString aNameStr2( (const UniString&)SbxVariable::GetName(), RTL_TEXTENCODING_ASCII_US );
+ DbgOutf( "SBX: Insert %s %s in %s",
+ ( pVar->GetClass() >= SbxCLASS_DONTCARE &&
+ pVar->GetClass() <= SbxCLASS_OBJECT )
+ ? pCls[ pVar->GetClass()-1 ] : "Unknown class", aNameStr1.GetBuffer(), aNameStr1.GetBuffer() );
+#endif
+ }
+}
+
+// AB 23.4.1997, Optimierung, Einfuegen ohne Ueberpruefung auf doppelte
+// Eintraege und ohne Broadcasts, wird nur in SO2/auto.cxx genutzt
+void SbxObject::QuickInsert( SbxVariable* pVar )
+{
+ SbxArray* pArray = NULL;
+ if( pVar )
+ {
+ switch( pVar->GetClass() )
+ {
+ case SbxCLASS_VARIABLE:
+ case SbxCLASS_PROPERTY: pArray = pProps; break;
+ case SbxCLASS_METHOD: pArray = pMethods; break;
+ case SbxCLASS_OBJECT: pArray = pObjs; break;
+ default:
+ DBG_ASSERT( !this, "Ungueltige SBX-Klasse" );
+ }
+ }
+ if( pArray )
+ {
+ StartListening( pVar->GetBroadcaster(), TRUE );
+ pArray->Put( pVar, pArray->Count() );
+ if( pVar->GetParent() != this )
+ pVar->SetParent( this );
+ SetModified( TRUE );
+#ifdef DBG_UTIL
+ static const char* pCls[] =
+ { "DontCare","Array","Value","Variable","Method","Property","Object" };
+ XubString aVarName( pVar->GetName() );
+ if ( !aVarName.Len() && pVar->ISA(SbxObject) )
+ aVarName = PTR_CAST(SbxObject,pVar)->GetClassName();
+ ByteString aNameStr1( (const UniString&)aVarName, RTL_TEXTENCODING_ASCII_US );
+ ByteString aNameStr2( (const UniString&)SbxVariable::GetName(), RTL_TEXTENCODING_ASCII_US );
+ DbgOutf( "SBX: Insert %s %s in %s",
+ ( pVar->GetClass() >= SbxCLASS_DONTCARE &&
+ pVar->GetClass() <= SbxCLASS_OBJECT )
+ ? pCls[ pVar->GetClass()-1 ] : "Unknown class", aNameStr1.GetBuffer(), aNameStr1.GetBuffer() );
+#endif
+ }
+}
+
+// AB 23.3.1997, Spezial-Methode, gleichnamige Controls zulassen
+void SbxObject::VCPtrInsert( SbxVariable* pVar )
+{
+ SbxArray* pArray = NULL;
+ if( pVar )
+ {
+ switch( pVar->GetClass() )
+ {
+ case SbxCLASS_VARIABLE:
+ case SbxCLASS_PROPERTY: pArray = pProps; break;
+ case SbxCLASS_METHOD: pArray = pMethods; break;
+ case SbxCLASS_OBJECT: pArray = pObjs; break;
+ default:
+ DBG_ASSERT( !this, "Ungueltige SBX-Klasse" );
+ }
+ }
+ if( pArray )
+ {
+ StartListening( pVar->GetBroadcaster(), TRUE );
+ pArray->Put( pVar, pArray->Count() );
+ if( pVar->GetParent() != this )
+ pVar->SetParent( this );
+ SetModified( TRUE );
+ Broadcast( SBX_HINT_OBJECTCHANGED );
+ }
+}
+
+void SbxObject::Remove( const XubString& rName, SbxClassType t )
+{
+ Remove( SbxObject::Find( rName, t ) );
+}
+
+void SbxObject::Remove( SbxVariable* pVar )
+{
+ USHORT nIdx;
+ SbxArray* pArray = FindVar( pVar, nIdx );
+ if( pArray && nIdx < pArray->Count() )
+ {
+#ifdef DBG_UTIL
+ XubString aVarName( pVar->GetName() );
+ if ( !aVarName.Len() && pVar->ISA(SbxObject) )
+ aVarName = PTR_CAST(SbxObject,pVar)->GetClassName();
+ ByteString aNameStr1( (const UniString&)aVarName, RTL_TEXTENCODING_ASCII_US );
+ ByteString aNameStr2( (const UniString&)SbxVariable::GetName(), RTL_TEXTENCODING_ASCII_US );
+#endif
+ SbxVariableRef pVar_ = pArray->Get( nIdx );
+ if( pVar_->IsBroadcaster() )
+ EndListening( pVar_->GetBroadcaster(), TRUE );
+ if( (SbxVariable*) pVar_ == pDfltProp )
+ pDfltProp = NULL;
+ pArray->Remove( nIdx );
+ if( pVar_->GetParent() == this )
+ pVar_->SetParent( NULL );
+ SetModified( TRUE );
+ Broadcast( SBX_HINT_OBJECTCHANGED );
+ }
+}
+
+// AB 23.3.1997, Loeschen per Pointer fuer Controls (doppelte Namen!)
+void SbxObject::VCPtrRemove( SbxVariable* pVar )
+{
+ USHORT nIdx;
+ // Neu FindVar-Methode, sonst identisch mit normaler Methode
+ SbxArray* pArray = VCPtrFindVar( pVar, nIdx );
+ if( pArray && nIdx < pArray->Count() )
+ {
+ SbxVariableRef xVar = pArray->Get( nIdx );
+ if( xVar->IsBroadcaster() )
+ EndListening( xVar->GetBroadcaster(), TRUE );
+ if( (SbxVariable*) xVar == pDfltProp )
+ pDfltProp = NULL;
+ pArray->Remove( nIdx );
+ if( xVar->GetParent() == this )
+ xVar->SetParent( NULL );
+ SetModified( TRUE );
+ Broadcast( SBX_HINT_OBJECTCHANGED );
+ }
+}
+
+// AB 23.3.1997, Zugehoerige Spezial-Methode, nur ueber Pointer suchen
+SbxArray* SbxObject::VCPtrFindVar( SbxVariable* pVar, USHORT& nArrayIdx )
+{
+ SbxArray* pArray = NULL;
+ if( pVar ) switch( pVar->GetClass() )
+ {
+ case SbxCLASS_VARIABLE:
+ case SbxCLASS_PROPERTY: pArray = pProps; break;
+ case SbxCLASS_METHOD: pArray = pMethods; break;
+ case SbxCLASS_OBJECT: pArray = pObjs; break;
+ default:
+ DBG_ASSERT( !this, "Ungueltige SBX-Klasse" );
+ }
+ if( pArray )
+ {
+ nArrayIdx = pArray->Count();
+ for( USHORT i = 0; i < pArray->Count(); i++ )
+ {
+ SbxVariableRef& rRef = pArray->GetRef( i );
+ if( (SbxVariable*) rRef == pVar )
+ {
+ nArrayIdx = i; break;
+ }
+ }
+ }
+ return pArray;
+}
+
+
+
+void SbxObject::SetPos( SbxVariable* pVar, USHORT nPos )
+{
+ USHORT nIdx;
+ SbxArray* pArray = FindVar( pVar, nIdx );
+ if( pArray )
+ {
+ if( nPos >= pArray->Count() )
+ nPos = pArray->Count() - 1;
+ if( nIdx < ( pArray->Count() - 1 ) )
+ {
+ SbxVariableRef refVar = pArray->Get( nIdx );
+ pArray->Remove( nIdx );
+ pArray->Insert( refVar, nPos );
+ }
+ }
+// SetModified( TRUE );
+// Broadcast( SBX_HINT_OBJECTCHANGED );
+}
+
+static BOOL LoadArray( SvStream& rStrm, SbxObject* pThis, SbxArray* pArray )
+{
+ SbxArrayRef p = (SbxArray*) SbxBase::Load( rStrm );
+ if( !p.Is() )
+ return FALSE;
+ for( USHORT i = 0; i < p->Count(); i++ )
+ {
+ SbxVariableRef& r = p->GetRef( i );
+ SbxVariable* pVar = r;
+ if( pVar )
+ {
+ pVar->SetParent( pThis );
+ pThis->StartListening( pVar->GetBroadcaster(), TRUE );
+ }
+ }
+ pArray->Merge( p );
+ return TRUE;
+}
+
+// Der Load eines Objekts ist additiv!
+
+BOOL SbxObject::LoadData( SvStream& rStrm, USHORT nVer )
+{
+ // Hilfe fuer das Einlesen alter Objekte: einfach TRUE zurueck,
+ // LoadPrivateData() muss Default-Zustand herstellen
+ if( !nVer )
+ return TRUE;
+
+ pDfltProp = NULL;
+ if( !SbxVariable::LoadData( rStrm, nVer ) )
+ return FALSE;
+ // Wenn kein fremdes Objekt enthalten ist, uns selbst eintragen
+ if( aData.eType == SbxOBJECT && !aData.pObj )
+ aData.pObj = this;
+ sal_uInt32 nSize;
+ XubString aDfltProp;
+ rStrm.ReadByteString( aClassName, RTL_TEXTENCODING_ASCII_US );
+ rStrm.ReadByteString( aDfltProp, RTL_TEXTENCODING_ASCII_US );
+ ULONG nPos = rStrm.Tell();
+ rStrm >> nSize;
+ if( !LoadPrivateData( rStrm, nVer ) )
+ return FALSE;
+ ULONG nNewPos = rStrm.Tell();
+ nPos += nSize;
+ DBG_ASSERT( nPos >= nNewPos, "SBX: Zu viele Daten eingelesen" );
+ if( nPos != nNewPos )
+ rStrm.Seek( nPos );
+ if( !LoadArray( rStrm, this, pMethods )
+ || !LoadArray( rStrm, this, pProps )
+ || !LoadArray( rStrm, this, pObjs ) )
+ return FALSE;
+ // Properties setzen
+ if( aDfltProp.Len() )
+ pDfltProp = (SbxProperty*) pProps->Find( aDfltProp, SbxCLASS_PROPERTY );
+ SetModified( FALSE );
+ return TRUE;
+}
+
+BOOL SbxObject::StoreData( SvStream& rStrm ) const
+{
+ if( !SbxVariable::StoreData( rStrm ) )
+ return FALSE;
+ XubString aDfltProp;
+ if( pDfltProp )
+ aDfltProp = pDfltProp->GetName();
+ rStrm.WriteByteString( aClassName, RTL_TEXTENCODING_ASCII_US );
+ rStrm.WriteByteString( aDfltProp, RTL_TEXTENCODING_ASCII_US );
+ ULONG nPos = rStrm.Tell();
+ rStrm << (UINT32) 0L;
+ if( !StorePrivateData( rStrm ) )
+ return FALSE;
+ ULONG nNew = rStrm.Tell();
+ rStrm.Seek( nPos );
+ rStrm << (UINT32) ( nNew - nPos );
+ rStrm.Seek( nNew );
+ if( !pMethods->Store( rStrm ) )
+ return FALSE;
+ if( !pProps->Store( rStrm ) )
+ return FALSE;
+ if( !pObjs->Store( rStrm ) )
+ return FALSE;
+ ((SbxObject*) this)->SetModified( FALSE );
+ return TRUE;
+}
+
+XubString SbxObject::GenerateSource( const XubString &rLinePrefix,
+ const SbxObject* )
+{
+ // Properties in einem String einsammeln
+ XubString aSource;
+ SbxArrayRef xProps( GetProperties() );
+ FASTBOOL bLineFeed = FALSE;
+ for ( USHORT nProp = 0; nProp < xProps->Count(); ++nProp )
+ {
+ SbxPropertyRef xProp = (SbxProperty*) xProps->Get(nProp);
+ XubString aPropName( xProp->GetName() );
+ if ( xProp->CanWrite()
+ && !( xProp->GetHashCode() == nNameHash
+ && aPropName.EqualsIgnoreCaseAscii( pNameProp ) ) )
+ {
+ // ausser vor dem ersten Property immer einen Umbruch einfuegen
+ if ( bLineFeed )
+ aSource.AppendAscii( "\n" );
+ else
+ bLineFeed = TRUE;
+
+ aSource += rLinePrefix;
+ aSource += '.';
+ aSource += aPropName;
+ aSource.AppendAscii( " = " );
+
+ // den Property-Wert textuell darstellen
+ switch ( xProp->GetType() )
+ {
+ case SbxEMPTY:
+ case SbxNULL:
+ // kein Wert
+ break;
+
+ case SbxSTRING:
+ {
+ // Strings in Anf"uhrungszeichen
+ aSource.AppendAscii( "\"" );
+ aSource += xProp->GetString();
+ aSource.AppendAscii( "\"" );
+ break;
+ }
+
+ default:
+ {
+ // sonstiges wie z.B. Zahlen direkt
+ aSource += xProp->GetString();
+ break;
+ }
+ }
+ }
+ }
+ return aSource;
+}
+
+static BOOL CollectAttrs( const SbxBase* p, XubString& rRes )
+{
+ XubString aAttrs;
+ if( p->IsHidden() )
+ aAttrs.AssignAscii( "Hidden" );
+ if( p->IsSet( SBX_EXTSEARCH ) )
+ {
+ if( aAttrs.Len() )
+ aAttrs += ',';
+ aAttrs.AppendAscii( "ExtSearch" );
+ }
+ if( !p->IsVisible() )
+ {
+ if( aAttrs.Len() )
+ aAttrs += ',';
+ aAttrs.AppendAscii( "Invisible" );
+ }
+ if( p->IsSet( SBX_DONTSTORE ) )
+ {
+ if( aAttrs.Len() )
+ aAttrs += ',';
+ aAttrs.AppendAscii( "DontStore" );
+ }
+ if( aAttrs.Len() )
+ {
+ rRes.AssignAscii( " (" );
+ rRes += aAttrs;
+ rRes += ')';
+ return TRUE;
+ }
+ else
+ {
+ rRes.Erase();
+ return FALSE;
+ }
+}
+
+void SbxObject::Dump( SvStream& rStrm, BOOL bFill )
+{
+ // Einr"uckung
+ static USHORT nLevel = 0;
+ if ( nLevel > 10 )
+ {
+ rStrm << "<too deep>" << endl;
+ return;
+ }
+ ++nLevel;
+ String aIndent;
+ for ( USHORT n = 1; n < nLevel; ++n )
+ aIndent.AppendAscii( " " );
+
+ // ggf. Objekt vervollst"andigen
+ if ( bFill )
+ GetAll( SbxCLASS_DONTCARE );
+
+ // Daten des Objekts selbst ausgeben
+ ByteString aNameStr( (const UniString&)GetName(), RTL_TEXTENCODING_ASCII_US );
+ ByteString aClassNameStr( (const UniString&)aClassName, RTL_TEXTENCODING_ASCII_US );
+ rStrm << "Object( "
+ << ByteString::CreateFromInt64( (ULONG) this ).GetBuffer() << "=='"
+ << ( aNameStr.Len() ? aNameStr.GetBuffer() : "<unnamed>" ) << "', "
+ << "of class '" << aClassNameStr.GetBuffer() << "', "
+ << "counts "
+ << ByteString::CreateFromInt64( GetRefCount() ).GetBuffer()
+ << " refs, ";
+ if ( GetParent() )
+ {
+ ByteString aParentNameStr( (const UniString&)GetName(), RTL_TEXTENCODING_ASCII_US );
+ rStrm << "in parent "
+ << ByteString::CreateFromInt64( (ULONG) GetParent() ).GetBuffer()
+ << "=='" << ( aParentNameStr.Len() ? aParentNameStr.GetBuffer() : "<unnamed>" ) << "'";
+ }
+ else
+ rStrm << "no parent ";
+ rStrm << " )" << endl;
+ ByteString aIndentNameStr( (const UniString&)aIndent, RTL_TEXTENCODING_ASCII_US );
+ rStrm << aIndentNameStr.GetBuffer() << "{" << endl;
+
+ // Flags
+ XubString aAttrs;
+ if( CollectAttrs( this, aAttrs ) )
+ {
+ ByteString aAttrStr( (const UniString&)aAttrs, RTL_TEXTENCODING_ASCII_US );
+ rStrm << aIndentNameStr.GetBuffer() << "- Flags: " << aAttrStr.GetBuffer() << endl;
+ }
+
+ // Methods
+ rStrm << aIndentNameStr.GetBuffer() << "- Methods:" << endl;
+ for( USHORT i = 0; i < pMethods->Count(); i++ )
+ {
+ SbxVariableRef& r = pMethods->GetRef( i );
+ SbxVariable* pVar = r;
+ if( pVar )
+ {
+ XubString aLine( aIndent );
+ aLine.AppendAscii( " - " );
+ aLine += pVar->GetName( SbxNAME_SHORT_TYPES );
+ XubString aAttrs2;
+ if( CollectAttrs( pVar, aAttrs2 ) )
+ aLine += aAttrs2;
+ if( !pVar->IsA( TYPE(SbxMethod) ) )
+ aLine.AppendAscii( " !! Not a Method !!" );
+ rStrm.WriteByteString( aLine, RTL_TEXTENCODING_ASCII_US );
+
+ // bei Object-Methods auch das Object ausgeben
+ if ( pVar->GetValues_Impl().eType == SbxOBJECT &&
+ pVar->GetValues_Impl().pObj &&
+ pVar->GetValues_Impl().pObj != this &&
+ pVar->GetValues_Impl().pObj != GetParent() )
+ {
+ rStrm << " contains ";
+ ((SbxObject*) pVar->GetValues_Impl().pObj)->Dump( rStrm, bFill );
+ }
+ else
+ rStrm << endl;
+ }
+ }
+
+ // Properties
+ rStrm << aIndentNameStr.GetBuffer() << "- Properties:" << endl;
+ {
+ for( USHORT i = 0; i < pProps->Count(); i++ )
+ {
+ SbxVariableRef& r = pProps->GetRef( i );
+ SbxVariable* pVar = r;
+ if( pVar )
+ {
+ XubString aLine( aIndent );
+ aLine.AppendAscii( " - " );
+ aLine += pVar->GetName( SbxNAME_SHORT_TYPES );
+ XubString aAttrs3;
+ if( CollectAttrs( pVar, aAttrs3 ) )
+ aLine += aAttrs3;
+ if( !pVar->IsA( TYPE(SbxProperty) ) )
+ aLine.AppendAscii( " !! Not a Property !!" );
+ rStrm.WriteByteString( aLine, RTL_TEXTENCODING_ASCII_US );
+
+ // bei Object-Properties auch das Object ausgeben
+ if ( pVar->GetValues_Impl().eType == SbxOBJECT &&
+ pVar->GetValues_Impl().pObj &&
+ pVar->GetValues_Impl().pObj != this &&
+ pVar->GetValues_Impl().pObj != GetParent() )
+ {
+ rStrm << " contains ";
+ ((SbxObject*) pVar->GetValues_Impl().pObj)->Dump( rStrm, bFill );
+ }
+ else
+ rStrm << endl;
+ }
+ }
+ }
+
+ // Objects
+ rStrm << aIndentNameStr.GetBuffer() << "- Objects:" << endl;
+ {
+ for( USHORT i = 0; i < pObjs->Count(); i++ )
+ {
+ SbxVariableRef& r = pObjs->GetRef( i );
+ SbxVariable* pVar = r;
+ if ( pVar )
+ {
+ rStrm << aIndentNameStr.GetBuffer() << " - Sub";
+ if ( pVar->ISA(SbxObject) )
+ ((SbxObject*) pVar)->Dump( rStrm, bFill );
+ else if ( pVar->ISA(SbxVariable) )
+ ((SbxVariable*) pVar)->Dump( rStrm, bFill );
+ }
+ }
+ }
+
+ rStrm << aIndentNameStr.GetBuffer() << "}" << endl << endl;
+ --nLevel;
+}
+
+SvDispatch* SbxObject::GetSvDispatch()
+{
+ return NULL;
+}
+
+BOOL SbxMethod::Run( SbxValues* pValues )
+{
+ SbxValues aRes;
+ if( !pValues )
+ pValues = &aRes;
+ pValues->eType = SbxVARIANT;
+ return Get( *pValues );
+}
+
+SbxClassType SbxMethod::GetClass() const
+{
+ return SbxCLASS_METHOD;
+}
+
+SbxClassType SbxProperty::GetClass() const
+{
+ return SbxCLASS_PROPERTY;
+}
+
+void SbxObject::GarbageCollection( ULONG nObjects )
+
+/* [Beschreibung]
+
+ Diese statische Methode durchsucht die n"achsten 'nObjects' der zur Zeit
+ existierenden <SbxObject>-Instanzen nach zyklischen Referenzen, die sich
+ nur noch selbst am Leben erhalten. Ist 'nObjects==0', dann werden
+ alle existierenden durchsucht.
+
+ zur Zeit nur implementiert: Object -> Parent-Property -> Parent -> Object
+*/
+
+{
+ (void)nObjects;
+
+ static BOOL bInGarbageCollection = FALSE;
+ if ( bInGarbageCollection )
+ return;
+ bInGarbageCollection = TRUE;
+
+#if 0
+ // erstes Object dieser Runde anspringen
+ BOOL bAll = !nObjects;
+ if ( bAll )
+ rObjects.First();
+ SbxObject *pObj = rObjects.GetCurObject();
+ if ( !pObj )
+ pObj = rObjects.First();
+
+ while ( pObj && 0 != nObjects-- )
+ {
+ // hat der Parent nur noch 1 Ref-Count?
+ SbxObject *pParent = PTR_CAST( SbxObject, pObj->GetParent() );
+ if ( pParent && 1 == pParent->GetRefCount() )
+ {
+ // dann alle Properies des Objects durchsuchen
+ SbxArray *pProps = pObj->GetProperties();
+ for ( USHORT n = 0; n < pProps->Count(); ++n )
+ {
+ // verweist die Property auf den Parent des Object?
+ SbxVariable *pProp = pProps->Get(n);
+ const SbxValues &rValues = pProp->GetValues_Impl();
+ if ( SbxOBJECT == rValues.eType &&
+ pParent == rValues.pObj )
+ {
+#ifdef DBG_UTIL
+ DbgOutf( "SBX: %s.%s with Object %s was garbage",
+ pObj->GetName().GetStr(),
+ pProp->GetName().GetStr(),
+ pParent->GetName().GetStr() );
+#endif
+ // dann freigeben
+ pProp->SbxValue::Clear();
+ Sound::Beep();
+ break;
+ }
+ }
+ }
+
+ // zum n"achsten
+ pObj = rObjects.Next();
+ if ( !bAll && !pObj )
+ pObj = rObjects.First();
+ }
+#endif
+
+// AB 28.10. Zur 507a vorerst raus, da SfxBroadcaster::Enable() wegfaellt
+#if 0
+#ifdef DBG_UTIL
+ SbxVarList_Impl &rVars = GetSbxData_Impl()->aVars;
+ DbgOutf( "SBX: garbage collector done, %lu objects remainding",
+ rVars.Count() );
+ if ( rVars.Count() > 200 && rVars.Count() < 210 )
+ {
+ SvFileStream aStream( "d:\\tmp\\dump.sbx", STREAM_STD_WRITE );
+ SfxBroadcaster::Enable(FALSE);
+ for ( ULONG n = 0; n < rVars.Count(); ++n )
+ {
+ SbxVariable *pVar = rVars.GetObject(n);
+ SbxObject *pObj = PTR_CAST(SbxObject, pVar);
+ USHORT nFlags = pVar->GetFlags();
+ pVar->SetFlag(SBX_NO_BROADCAST);
+ if ( pObj )
+ pObj->Dump(aStream);
+ else if ( !pVar->GetParent() || !pVar->GetParent()->ISA(SbxObject) )
+ pVar->Dump(aStream);
+ pVar->SetFlags(nFlags);
+ }
+ SfxBroadcaster::Enable(TRUE);
+ }
+#endif
+#endif
+ bInGarbageCollection = FALSE;
+}
+
diff --git a/basic/source/sbx/sbxres.cxx b/basic/source/sbx/sbxres.cxx
new file mode 100644
index 000000000000..369349e72069
--- /dev/null
+++ b/basic/source/sbx/sbxres.cxx
@@ -0,0 +1,91 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+
+#include "sbxres.hxx"
+
+static const char* pSbxRes[] = {
+ "Empty",
+ "Null",
+ "Integer",
+ "Long",
+ "Single",
+ "Double",
+ "Currency",
+ "Date",
+ "String",
+ "Object",
+ "Error",
+ "Boolean",
+ "Variant",
+ "Any",
+ "Type14",
+ "Type15",
+ "Char",
+ "Byte",
+ "UShort",
+ "ULong",
+ "Long64",
+ "ULong64",
+ "Int",
+ "UInt",
+ "Void",
+ "HResult",
+ "Pointer",
+ "DimArray",
+ "CArray",
+ "Any",
+ "LpStr",
+ "LpWStr",
+ " As ",
+ "Optional ",
+ "Byref ",
+
+ "Name",
+ "Parent",
+ "Application",
+ "Count",
+ "Add",
+ "Item",
+ "Remove",
+
+ "Error ", // mit Blank!
+ "False",
+ "True"
+};
+
+const char* GetSbxRes( USHORT nId )
+{
+ return ( ( nId > SBXRES_MAX ) ? "???" : pSbxRes[ nId ] );
+}
+
+SbxRes::SbxRes( USHORT nId )
+ : ::rtl::OUString( ::rtl::OUString::createFromAscii( GetSbxRes( nId ) ) )
+{}
+
diff --git a/basic/source/sbx/sbxres.hxx b/basic/source/sbx/sbxres.hxx
new file mode 100644
index 000000000000..8ed3c7054278
--- /dev/null
+++ b/basic/source/sbx/sbxres.hxx
@@ -0,0 +1,87 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _SBXRES_HXX
+#define _SBXRES_HXX
+
+#include <tools/string.hxx>
+
+// Zur Zeit sind Ressources im SVTOOLS-Projekt nicht vorgesehen.
+// Da es sich um unkritische Ressourcen handelt (BASIC-Keywords),
+// koennen wir mit Dummies arbeiten.
+
+#define STRING_TYPES 0
+#define STRING_EMPTY 0
+#define STRING_NULL 1
+#define STRING_INTEGER 2
+#define STRING_LONG 3
+#define STRING_SINGLE 4
+#define STRING_DOUBLE 5
+#define STRING_CURRENCY 6
+#define STRING_DATE 7
+#define STRING_STRING 8
+#define STRING_OBJECT 9
+#define STRING_ERROR 10
+#define STRING_BOOL 11
+#define STRING_VARIANT 12
+#define STRING_ANY 13
+#define STRING_CHAR 16
+#define STRING_BYTE 17
+#define STRING_USHORT 18
+#define STRING_ULONG 19
+#define STRING_INT 22
+#define STRING_UINT 23
+#define STRING_LPSTR 30
+#define STRING_LPWSTR 31
+#define STRING_AS 32
+#define STRING_OPTIONAL 33
+#define STRING_BYREF 34
+
+#define STRING_NAMEPROP 35
+#define STRING_PARENTPROP 36
+#define STRING_APPLPROP 37
+#define STRING_COUNTPROP 38
+#define STRING_ADDMETH 39
+#define STRING_ITEMMETH 40
+#define STRING_REMOVEMETH 41
+
+#define STRING_ERRORMSG 42
+#define STRING_FALSE 43
+#define STRING_TRUE 44
+
+#define SBXRES_MAX 44
+
+class SbxRes : public ::rtl::OUString
+{
+public:
+ SbxRes( USHORT );
+};
+
+const char* GetSbxRes( USHORT );
+
+
+#endif
diff --git a/basic/source/sbx/sbxscan.cxx b/basic/source/sbx/sbxscan.cxx
new file mode 100644
index 000000000000..b8aad9bbf2e4
--- /dev/null
+++ b/basic/source/sbx/sbxscan.cxx
@@ -0,0 +1,968 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+#include <tools/errcode.hxx>
+#include <basic/sbx.hxx>
+#include "sbxconv.hxx"
+
+#include "unotools/syslocale.hxx"
+
+#if defined ( UNX )
+#include <stdlib.h>
+#endif
+
+#ifndef _APP_HXX //autogen
+#include <vcl/svapp.hxx>
+#endif
+#include <math.h>
+#include <string.h>
+#include <ctype.h>
+
+#include "sbxres.hxx"
+#include <basic/sbxbase.hxx>
+#include <basic/sbxform.hxx>
+#include <svtools/svtools.hrc>
+
+#include "basrid.hxx"
+#include "runtime.hxx"
+
+#include <svl/zforlist.hxx>
+#include <comphelper/processfactory.hxx>
+
+
+void ImpGetIntntlSep( sal_Unicode& rcDecimalSep, sal_Unicode& rcThousandSep )
+{
+ SvtSysLocale aSysLocale;
+ const LocaleDataWrapper& rData = aSysLocale.GetLocaleData();
+ rcDecimalSep = rData.getNumDecimalSep().GetBuffer()[0];
+ rcThousandSep = rData.getNumThousandSep().GetBuffer()[0];
+}
+
+// Scannen eines Strings nach BASIC-Konventionen
+// Dies entspricht den ueblichen Konventionen, nur dass der Exponent
+// auch ein D sein darf, was den Datentyp auf SbxDOUBLE festlegt.
+// Die Routine versucht, den Datentyp so klein wie moeglich zu gestalten.
+// Das ganze gibt auch noch einen Konversionsfehler, wenn der Datentyp
+// Fixed ist und das ganze nicht hineinpasst!
+
+SbxError ImpScan( const ::rtl::OUString& rWSrc, double& nVal, SbxDataType& rType,
+ USHORT* pLen, BOOL bAllowIntntl, BOOL bOnlyIntntl )
+{
+ ::rtl::OString aBStr( ::rtl::OUStringToOString( rWSrc, RTL_TEXTENCODING_ASCII_US ) );
+
+ // Bei International Komma besorgen
+ char cIntntlComma, cIntntl1000;
+ char cNonIntntlComma = '.';
+
+ sal_Unicode cDecimalSep, cThousandSep = 0;
+ if( bAllowIntntl || bOnlyIntntl )
+ {
+ ImpGetIntntlSep( cDecimalSep, cThousandSep );
+ cIntntlComma = (char)cDecimalSep;
+ cIntntl1000 = (char)cThousandSep;
+ }
+ // Sonst einfach auch auf . setzen
+ else
+ {
+ cIntntlComma = cNonIntntlComma;
+ cIntntl1000 = cNonIntntlComma; // Unschaedlich machen
+ }
+ // Nur International -> IntnlComma uebernehmen
+ if( bOnlyIntntl )
+ {
+ cNonIntntlComma = cIntntlComma;
+ cIntntl1000 = (char)cThousandSep;
+ }
+
+ const char* pStart = aBStr.getStr();
+ const char* p = pStart;
+ char buf[ 80 ], *q = buf;
+ BOOL bRes = TRUE;
+ BOOL bMinus = FALSE;
+ nVal = 0;
+ SbxDataType eScanType = SbxSINGLE;
+ // Whitespace wech
+ while( *p &&( *p == ' ' || *p == '\t' ) ) p++;
+ // Zahl? Dann einlesen und konvertieren.
+ if( *p == '-' )
+ p++, bMinus = TRUE;
+ if( isdigit( *p ) ||( (*p == cNonIntntlComma || *p == cIntntlComma ||
+ *p == cIntntl1000) && isdigit( *(p+1 ) ) ) )
+ {
+ short exp = 0; // >0: Exponentteil
+ short comma = 0; // >0: Nachkomma
+ short ndig = 0; // Anzahl Ziffern
+ short ncdig = 0; // Anzahl Ziffern nach Komma
+ ByteString aSearchStr( "0123456789DEde" );
+ // Kommas ergaenzen
+ aSearchStr += cNonIntntlComma;
+ if( cIntntlComma != cNonIntntlComma )
+ aSearchStr += cIntntlComma;
+ if( bOnlyIntntl )
+ aSearchStr += cIntntl1000;
+ const char* pSearchStr = aSearchStr.GetBuffer();
+ while( strchr( pSearchStr, *p ) && *p )
+ {
+ // 1000er-Trenner ueberlesen
+ if( bOnlyIntntl && *p == cIntntl1000 )
+ {
+ p++;
+ continue;
+ }
+
+ // Komma oder Exponent?
+ if( *p == cNonIntntlComma || *p == cIntntlComma )
+ {
+ // Immer '.' einfuegen, damit atof funktioniert
+ p++;
+ if( ++comma > 1 )
+ continue;
+ else
+ *q++ = '.';
+ }
+ else if( strchr( "DdEe", *p ) )
+ {
+ if( ++exp > 1 )
+ {
+ p++; continue;
+ }
+ if( toupper( *p ) == 'D' )
+ eScanType = SbxDOUBLE;
+ *q++ = 'E'; p++;
+ // Vorzeichen hinter Exponent?
+ if( *p == '+' )
+ p++;
+ else
+ if( *p == '-' )
+ *q++ = *p++;
+ }
+ else
+ {
+ *q++ = *p++;
+ if( comma && !exp ) ncdig++;
+ }
+ if( !exp ) ndig++;
+ }
+ *q = 0;
+ // Komma, Exponent mehrfach vorhanden?
+ if( comma > 1 || exp > 1 )
+ bRes = FALSE;
+ // Kann auf Integer gefaltet werden?
+ if( !comma && !exp )
+ {
+ if( nVal >= SbxMININT && nVal <= SbxMAXINT )
+ eScanType = SbxINTEGER;
+ else if( nVal >= SbxMINLNG && nVal <= SbxMAXLNG )
+ eScanType = SbxLONG;
+ }
+
+ nVal = atof( buf );
+ ndig = ndig - comma;
+ // zu viele Zahlen fuer SINGLE?
+ if( ndig > 15 || ncdig > 6 )
+ eScanType = SbxDOUBLE;
+
+ // Typkennung?
+ if( strchr( "%!&#", *p ) && *p ) p++;
+ }
+ // Hex/Oktalzahl? Einlesen und konvertieren:
+ else if( *p == '&' )
+ {
+ p++;
+ eScanType = SbxLONG;
+ const char *cmp = "0123456789ABCDEF";
+ char base = 16;
+ char ndig = 8;
+ char xch = *p++;
+ switch( toupper( xch ) )
+ {
+ case 'O': cmp = "01234567"; base = 8; ndig = 11; break;
+ case 'H': break;
+ default : bRes = FALSE;
+ }
+ long l = 0;
+ int i;
+ while( isalnum( *p ) )
+ {
+ char ch = sal::static_int_cast< char >( toupper( *p ) );
+ p++;
+ if( strchr( cmp, ch ) ) *q++ = ch;
+ else bRes = FALSE;
+ }
+ *q = 0;
+ for( q = buf; *q; q++ )
+ {
+ i =( *q & 0xFF ) - '0';
+ if( i > 9 ) i -= 7;
+ l =( l * base ) + i;
+ if( !ndig-- )
+ bRes = FALSE;
+ }
+ if( *p == '&' ) p++;
+ nVal = (double) l;
+ if( l >= SbxMININT && l <= SbxMAXINT )
+ eScanType = SbxINTEGER;
+ }
+ else if ( SbiRuntime::isVBAEnabled() )
+ {
+ OSL_TRACE("Reporting error converting");
+ return SbxERR_CONVERSION;
+ }
+ if( pLen )
+ *pLen = (USHORT) ( p - pStart );
+ if( !bRes )
+ return SbxERR_CONVERSION;
+ if( bMinus )
+ nVal = -nVal;
+ rType = eScanType;
+ return SbxERR_OK;
+}
+
+// Schnittstelle fuer CDbl im Basic
+SbxError SbxValue::ScanNumIntnl( const String& rSrc, double& nVal, BOOL bSingle )
+{
+ SbxDataType t;
+ USHORT nLen = 0;
+ SbxError nRetError = ImpScan( rSrc, nVal, t, &nLen,
+ /*bAllowIntntl*/FALSE, /*bOnlyIntntl*/TRUE );
+ // Komplett gelesen?
+ if( nRetError == SbxERR_OK && nLen != rSrc.Len() )
+ nRetError = SbxERR_CONVERSION;
+
+ if( bSingle )
+ {
+ SbxValues aValues( nVal );
+ nVal = (double)ImpGetSingle( &aValues ); // Hier Error bei Overflow
+ }
+ return nRetError;
+}
+
+////////////////////////////////////////////////////////////////////////////
+
+static double roundArray[] = {
+ 5.0e+0, 0.5e+0, 0.5e-1, 0.5e-2, 0.5e-3, 0.5e-4, 0.5e-5, 0.5e-6, 0.5e-7,
+ 0.5e-8, 0.5e-9, 0.5e-10,0.5e-11,0.5e-12,0.5e-13,0.5e-14,0.5e-15 };
+
+/***************************************************************************
+|*
+|* void myftoa( double, char *, short, short, BOOL, BOOL )
+|*
+|* Beschreibung: Konversion double --> ASCII
+|* Parameter: double die Zahl.
+|* char * der Zielpuffer
+|* short Anzahl Nachkommastellen
+|* short Weite des Exponenten( 0=kein E )
+|* BOOL TRUE: mit 1000er Punkten
+|* BOOL TRUE: formatfreie Ausgabe
+|*
+***************************************************************************/
+
+static void myftoa( double nNum, char * pBuf, short nPrec, short nExpWidth,
+ BOOL bPt, BOOL bFix, sal_Unicode cForceThousandSep = 0 )
+{
+
+ short nExp = 0; // Exponent
+ short nDig = nPrec + 1; // Anzahl Digits in Zahl
+ short nDec; // Anzahl Vorkommastellen
+ register int i, digit;
+
+ // Komma besorgen
+ sal_Unicode cDecimalSep, cThousandSep;
+ ImpGetIntntlSep( cDecimalSep, cThousandSep );
+ if( cForceThousandSep )
+ cThousandSep = cForceThousandSep;
+
+ // Exponentberechnung:
+ nExp = 0;
+ if( nNum > 0.0 )
+ {
+ while( nNum < 1.0 ) nNum *= 10.0, nExp--;
+ while( nNum >= 10.0 ) nNum /= 10.0, nExp++;
+ }
+ if( !bFix && !nExpWidth )
+ nDig = nDig + nExp;
+ else if( bFix && !nPrec )
+ nDig = nExp + 1;
+
+ // Zahl runden:
+ if( (nNum += roundArray [( nDig > 16 ) ? 16 : nDig] ) >= 10.0 )
+ {
+ nNum = 1.0;
+ ++nExp;
+ if( !nExpWidth ) ++nDig;
+ }
+
+ // Bestimmung der Vorkommastellen:
+ if( !nExpWidth )
+ {
+ if( nExp < 0 )
+ {
+ // #41691: Auch bei bFix eine 0 spendieren
+ *pBuf++ = '0';
+ if( nPrec ) *pBuf++ = (char)cDecimalSep;
+ i = -nExp - 1;
+ if( nDig <= 0 ) i = nPrec;
+ while( i-- ) *pBuf++ = '0';
+ nDec = 0;
+ }
+ else
+ nDec = nExp+1;
+ }
+ else
+ nDec = 1;
+
+ // Zahl ausgeben:
+ if( nDig > 0 )
+ {
+ for( i = 0 ; ; ++i )
+ {
+ if( i < 16 )
+ {
+ digit = (int) nNum;
+ *pBuf++ = sal::static_int_cast< char >(digit + '0');
+ nNum =( nNum - digit ) * 10.0;
+ } else
+ *pBuf++ = '0';
+ if( --nDig == 0 ) break;
+ if( nDec )
+ {
+ nDec--;
+ if( !nDec )
+ *pBuf++ = (char)cDecimalSep;
+ else if( !(nDec % 3 ) && bPt )
+ *pBuf++ = (char)cThousandSep;
+ }
+ }
+ }
+
+ // Exponent ausgeben:
+ if( nExpWidth )
+ {
+ if( nExpWidth < 3 ) nExpWidth = 3;
+ nExpWidth -= 2;
+ *pBuf++ = 'E';
+ *pBuf++ =( nExp < 0 ) ?( (nExp = -nExp ), '-' ) : '+';
+ while( nExpWidth > 3 ) *pBuf++ = '0', nExpWidth--;
+ if( nExp >= 100 || nExpWidth == 3 )
+ {
+ *pBuf++ = sal::static_int_cast< char >(nExp/100 + '0');
+ nExp %= 100;
+ }
+ if( nExp/10 || nExpWidth >= 2 )
+ *pBuf++ = sal::static_int_cast< char >(nExp/10 + '0');
+ *pBuf++ = sal::static_int_cast< char >(nExp%10 + '0');
+ }
+ *pBuf = 0;
+}
+
+// Die Zahl wird unformatiert mit der angegebenen Anzahl NK-Stellen
+// aufbereitet. Evtl. wird ein Minus vorangestellt.
+// Diese Routine ist public, weil sie auch von den Put-Funktionen
+// der Klasse SbxImpSTRING verwendet wird.
+
+#ifdef _MSC_VER
+#pragma optimize( "", off )
+#pragma warning(disable: 4748) // "... because optimizations are disabled ..."
+#endif
+
+void ImpCvtNum( double nNum, short nPrec, ::rtl::OUString& rRes, BOOL bCoreString )
+{
+ char *q;
+ char cBuf[ 40 ], *p = cBuf;
+
+ sal_Unicode cDecimalSep, cThousandSep;
+ ImpGetIntntlSep( cDecimalSep, cThousandSep );
+ if( bCoreString )
+ cDecimalSep = '.';
+
+ if( nNum < 0.0 ) {
+ nNum = -nNum;
+ *p++ = '-';
+ }
+ double dMaxNumWithoutExp = (nPrec == 6) ? 1E6 : 1E14;
+ myftoa( nNum, p, nPrec,( nNum &&( nNum < 1E-1 || nNum > dMaxNumWithoutExp ) ) ? 4:0,
+ FALSE, TRUE, cDecimalSep );
+ // Trailing Zeroes weg:
+ for( p = cBuf; *p &&( *p != 'E' ); p++ ) {}
+ q = p; p--;
+ while( nPrec && *p == '0' ) nPrec--, p--;
+ if( *p == cDecimalSep ) p--;
+ while( *q ) *++p = *q++;
+ *++p = 0;
+ rRes = ::rtl::OUString::createFromAscii( cBuf );
+}
+
+#ifdef _MSC_VER
+#pragma optimize( "", on )
+#endif
+
+BOOL ImpConvStringExt( ::rtl::OUString& rSrc, SbxDataType eTargetType )
+{
+ // Merken, ob ueberhaupt was geaendert wurde
+ BOOL bChanged = FALSE;
+ ::rtl::OUString aNewString;
+
+ // Nur Spezial-Flle behandeln, als Default tun wir nichts
+ switch( eTargetType )
+ {
+ // Bei Fliesskomma International beruecksichtigen
+ case SbxSINGLE:
+ case SbxDOUBLE:
+ case SbxCURRENCY:
+ {
+ ::rtl::OString aBStr( ::rtl::OUStringToOString( rSrc, RTL_TEXTENCODING_ASCII_US ) );
+
+ // Komma besorgen
+ sal_Unicode cDecimalSep, cThousandSep;
+ ImpGetIntntlSep( cDecimalSep, cThousandSep );
+ aNewString = rSrc;
+
+ // Ersetzen, wenn DecimalSep kein '.' (nur den ersten)
+ if( cDecimalSep != (sal_Unicode)'.' )
+ {
+ sal_Int32 nPos = aNewString.indexOf( cDecimalSep );
+ if( nPos != -1 )
+ {
+ sal_Unicode* pStr = (sal_Unicode*)aNewString.getStr();
+ pStr[nPos] = (sal_Unicode)'.';
+ bChanged = TRUE;
+ }
+ }
+ break;
+ }
+
+ // Bei BOOL TRUE und FALSE als String pruefen
+ case SbxBOOL:
+ {
+ if( rSrc.equalsIgnoreAsciiCaseAscii( "true" ) )
+ {
+ aNewString = ::rtl::OUString::valueOf( (sal_Int32)SbxTRUE );
+ bChanged = TRUE;
+ }
+ else
+ if( rSrc.equalsIgnoreAsciiCaseAscii( "false" ) )
+ {
+ aNewString = ::rtl::OUString::valueOf( (sal_Int32)SbxFALSE );
+ bChanged = TRUE;
+ }
+ break;
+ }
+ default: break;
+ }
+ // String bei Aenderung uebernehmen
+ if( bChanged )
+ rSrc = aNewString;
+ return bChanged;
+}
+
+
+// Formatierte Zahlenausgabe
+// Der Returnwert ist die Anzahl Zeichen, die aus dem
+// Format verwendt wurden.
+
+#ifdef _old_format_code_
+// lasse diesen Code vorl"aufig drin, zum 'abgucken'
+// der bisherigen Implementation
+
+static USHORT printfmtnum( double nNum, XubString& rRes, const XubString& rWFmt )
+{
+ const String& rFmt = rWFmt;
+ char cFill = ' '; // Fuellzeichen
+ char cPre = 0; // Startzeichen( evtl. "$" )
+ short nExpDig= 0; // Anzahl Exponentstellen
+ short nPrec = 0; // Anzahl Nachkommastellen
+ short nWidth = 0; // Zahlenweite gesamnt
+ short nLen; // Laenge konvertierte Zahl
+ BOOL bPoint = FALSE; // TRUE: mit 1000er Kommas
+ BOOL bTrail = FALSE; // TRUE, wenn folgendes Minus
+ BOOL bSign = FALSE; // TRUE: immer mit Vorzeichen
+ BOOL bNeg = FALSE; // TRUE: Zahl ist negativ
+ char cBuf [1024]; // Zahlenpuffer
+ char * p;
+ const char* pFmt = rFmt;
+ rRes.Erase();
+ // $$ und ** abfangen. Einfach wird als Zeichen ausgegeben.
+ if( *pFmt == '$' )
+ if( *++pFmt != '$' ) rRes += '$';
+ if( *pFmt == '*' )
+ if( *++pFmt != '*' ) rRes += '*';
+
+ switch( *pFmt++ )
+ {
+ case 0:
+ break;
+ case '+':
+ bSign = TRUE; nWidth++; break;
+ case '*':
+ nWidth++; cFill = '*';
+ if( *pFmt == '$' ) nWidth++, pFmt++, cPre = '$';
+ break;
+ case '$':
+ nWidth++; cPre = '$'; break;
+ case '#':
+ case '.':
+ case ',':
+ pFmt--; break;
+ }
+ // Vorkomma:
+ for( ;; )
+ {
+ while( *pFmt == '#' ) pFmt++, nWidth++;
+ // 1000er Kommas?
+ if( *pFmt == ',' )
+ {
+ nWidth++; pFmt++; bPoint = TRUE;
+ } else break;
+ }
+ // Nachkomma:
+ if( *pFmt == '.' )
+ {
+ while( *++pFmt == '#' ) nPrec++;
+ nWidth += nPrec + 1;
+ }
+ // Exponent:
+ while( *pFmt == '^' )
+ pFmt++, nExpDig++, nWidth++;
+ // Folgendes Minus:
+ if( !bSign && *pFmt == '-' )
+ pFmt++, bTrail = TRUE;
+
+ // Zahl konvertieren:
+ if( nPrec > 15 ) nPrec = 15;
+ if( nNum < 0.0 ) nNum = -nNum, bNeg = TRUE;
+ p = cBuf;
+ if( bSign ) *p++ = bNeg ? '-' : '+';
+ myftoa( nNum, p, nPrec, nExpDig, bPoint, FALSE );
+ nLen = strlen( cBuf );
+
+ // Ueberlauf?
+ if( cPre ) nLen++;
+ if( nLen > nWidth ) rRes += '%';
+ else {
+ nWidth -= nLen;
+ while( nWidth-- ) rRes += (xub_Unicode)cFill;
+ if( cPre ) rRes += (xub_Unicode)cPre;
+ }
+ rRes += (xub_Unicode*)&(cBuf[0]);
+ if( bTrail )
+ rRes += bNeg ? '-' : ' ';
+
+ return (USHORT) ( pFmt - (const char*) rFmt );
+}
+
+#endif //_old_format_code_
+
+static USHORT printfmtstr( const XubString& rStr, XubString& rRes, const XubString& rFmt )
+{
+ const xub_Unicode* pStr = rStr.GetBuffer();
+ const xub_Unicode* pFmtStart = rFmt.GetBuffer();
+ const xub_Unicode* pFmt = pFmtStart;
+ rRes.Erase();
+ switch( *pFmt )
+ {
+ case '!':
+ rRes += *pStr++; pFmt++; break;
+ case '\\':
+ do
+ {
+ rRes += *pStr ? *pStr++ : static_cast< xub_Unicode >(' ');
+ pFmt++;
+ } while( *pFmt != '\\' );
+ rRes += *pStr ? *pStr++ : static_cast< xub_Unicode >(' ');
+ pFmt++; break;
+ case '&':
+ rRes = rStr;
+ pFmt++; break;
+ default:
+ rRes = rStr;
+ break;
+ }
+ return (USHORT) ( pFmt - pFmtStart );
+}
+
+/////////////////////////////////////////////////////////////////////////
+
+BOOL SbxValue::Scan( const XubString& rSrc, USHORT* pLen )
+{
+ SbxError eRes = SbxERR_OK;
+ if( !CanWrite() )
+ eRes = SbxERR_PROP_READONLY;
+ else
+ {
+ double n;
+ SbxDataType t;
+ eRes = ImpScan( rSrc, n, t, pLen );
+ if( eRes == SbxERR_OK )
+ {
+ if( !IsFixed() )
+ SetType( t );
+ PutDouble( n );
+ }
+ }
+ if( eRes )
+ {
+ SetError( eRes ); return FALSE;
+ }
+ else
+ return TRUE;
+}
+
+
+ResMgr* implGetResMgr( void )
+{
+ static ResMgr* pResMgr = NULL;
+ if( !pResMgr )
+ {
+ ::com::sun::star::lang::Locale aLocale = Application::GetSettings().GetUILocale();
+ pResMgr = ResMgr::CreateResMgr(CREATEVERSIONRESMGR_NAME(sb), aLocale );
+ }
+ return pResMgr;
+}
+
+class SbxValueFormatResId : public ResId
+{
+public:
+ SbxValueFormatResId( USHORT nId )
+ : ResId( nId, *implGetResMgr() )
+ {}
+};
+
+
+enum VbaFormatType
+{
+ VBA_FORMAT_TYPE_OFFSET, // standard number format
+ VBA_FORMAT_TYPE_USERDEFINED, // user defined number format
+ VBA_FORMAT_TYPE_NULL
+};
+
+struct VbaFormatInfo
+{
+ VbaFormatType meType;
+ const char* mpVbaFormat; // Format string in vba
+ NfIndexTableOffset meOffset; // SvNumberFormatter format index, if meType = VBA_FORMAT_TYPE_OFFSET
+ const char* mpOOoFormat; // if meType = VBA_FORMAT_TYPE_USERDEFINED
+};
+
+#define VBA_FORMAT_OFFSET( pcUtf8, eOffset ) \
+ { VBA_FORMAT_TYPE_OFFSET, pcUtf8, eOffset, 0 }
+
+#define VBA_FORMAT_USERDEFINED( pcUtf8, pcDefinedUtf8 ) \
+ { VBA_FORMAT_TYPE_USERDEFINED, pcUtf8, NF_NUMBER_STANDARD, pcDefinedUtf8 }
+
+static VbaFormatInfo pFormatInfoTable[] =
+{
+ VBA_FORMAT_OFFSET( "Long Date", NF_DATE_SYSTEM_LONG ),
+ VBA_FORMAT_USERDEFINED( "Medium Date", "DD-MMM-YY" ),
+ VBA_FORMAT_OFFSET( "Short Date", NF_DATE_SYSTEM_SHORT ),
+ VBA_FORMAT_USERDEFINED( "Long Time", "H:MM:SS AM/PM" ),
+ VBA_FORMAT_OFFSET( "Medium Time", NF_TIME_HHMMAMPM ),
+ VBA_FORMAT_OFFSET( "Short Time", NF_TIME_HHMM ),
+ VBA_FORMAT_OFFSET( "ddddd", NF_DATE_SYSTEM_SHORT ),
+ VBA_FORMAT_OFFSET( "dddddd", NF_DATE_SYSTEM_LONG ),
+ VBA_FORMAT_USERDEFINED( "ttttt", "H:MM:SS AM/PM" ),
+ VBA_FORMAT_OFFSET( "ww", NF_DATE_WW ),
+ { VBA_FORMAT_TYPE_NULL, 0, NF_INDEX_TABLE_ENTRIES, 0 }
+};
+
+VbaFormatInfo* getFormatInfo( const String& rFmt )
+{
+ VbaFormatInfo* pInfo = NULL;
+ INT16 i = 0;
+ while( (pInfo = pFormatInfoTable + i )->mpVbaFormat != NULL )
+ {
+ if( rFmt.EqualsIgnoreCaseAscii( pInfo->mpVbaFormat ) )
+ break;
+ i++;
+ }
+ return pInfo;
+}
+
+#define VBAFORMAT_GENERALDATE "General Date"
+#define VBAFORMAT_C "c"
+#define VBAFORMAT_N "n"
+#define VBAFORMAT_NN "nn"
+#define VBAFORMAT_W "w"
+#define VBAFORMAT_Y "y"
+#define VBAFORMAT_LOWERCASE "<"
+#define VBAFORMAT_UPPERCASE ">"
+
+// From methods1.cxx
+INT16 implGetWeekDay( double aDate, bool bFirstDayParam = false, INT16 nFirstDay = 0 );
+// from methods.cxx
+INT16 implGetMinute( double dDate );
+INT16 implGetDateYear( double aDate );
+BOOL implDateSerial( INT16 nYear, INT16 nMonth, INT16 nDay, double& rdRet );
+
+void SbxValue::Format( XubString& rRes, const XubString* pFmt ) const
+{
+ short nComma = 0;
+ double d = 0;
+
+ // pflin, It is better to use SvNumberFormatter to handle the date/time/number format.
+ // the SvNumberFormatter output is mostly compatible with
+ // VBA output besides the OOo-basic output
+ if( pFmt && !SbxBasicFormater::isBasicFormat( *pFmt ) )
+ {
+ String aStr = GetString();
+
+ if( pFmt->EqualsIgnoreCaseAscii( VBAFORMAT_LOWERCASE ) )
+ {
+ rRes = aStr.ToLowerAscii();
+ return;
+ }
+ if( pFmt->EqualsIgnoreCaseAscii( VBAFORMAT_UPPERCASE ) )
+ {
+ rRes = aStr.ToUpperAscii();
+ return;
+ }
+
+ LanguageType eLangType = GetpApp()->GetSettings().GetLanguage();
+ com::sun::star::uno::Reference< com::sun::star::lang::XMultiServiceFactory >
+ xFactory = comphelper::getProcessServiceFactory();
+ SvNumberFormatter aFormatter( xFactory, eLangType );
+
+ sal_uInt32 nIndex;
+ xub_StrLen nCheckPos = 0;
+ short nType;
+ double nNumber;
+ Color* pCol;
+
+ BOOL bSuccess = aFormatter.IsNumberFormat( aStr, nIndex, nNumber );
+
+ // number format, use SvNumberFormatter to handle it.
+ if( bSuccess )
+ {
+ String aFmtStr = *pFmt;
+ VbaFormatInfo* pInfo = getFormatInfo( aFmtStr );
+ if( pInfo && pInfo->meType != VBA_FORMAT_TYPE_NULL )
+ {
+ if( pInfo->meType == VBA_FORMAT_TYPE_OFFSET )
+ {
+ nIndex = aFormatter.GetFormatIndex( pInfo->meOffset, eLangType );
+ }
+ else
+ {
+ aFmtStr.AssignAscii( pInfo->mpOOoFormat );
+ aFormatter.PutandConvertEntry( aFmtStr, nCheckPos, nType, nIndex, LANGUAGE_ENGLISH, eLangType );
+ }
+ aFormatter.GetOutputString( nNumber, nIndex, rRes, &pCol );
+ }
+ else if( aFmtStr.EqualsIgnoreCaseAscii( VBAFORMAT_GENERALDATE )
+ || aFmtStr.EqualsIgnoreCaseAscii( VBAFORMAT_C ))
+ {
+ if( nNumber <=-1.0 || nNumber >= 1.0 )
+ {
+ // short date
+ nIndex = aFormatter.GetFormatIndex( NF_DATE_SYSTEM_SHORT, eLangType );
+ aFormatter.GetOutputString( nNumber, nIndex, rRes, &pCol );
+
+ // long time
+ if( floor( nNumber ) != nNumber )
+ {
+ aFmtStr.AssignAscii( "H:MM:SS AM/PM" );
+ aFormatter.PutandConvertEntry( aFmtStr, nCheckPos, nType, nIndex, LANGUAGE_ENGLISH, eLangType );
+ String aTime;
+ aFormatter.GetOutputString( nNumber, nIndex, aTime, &pCol );
+ rRes.AppendAscii(" ");
+ rRes += aTime;
+ }
+ }
+ else
+ {
+ // long time only
+ aFmtStr.AssignAscii( "H:MM:SS AM/PM" );
+ aFormatter.PutandConvertEntry( aFmtStr, nCheckPos, nType, nIndex, LANGUAGE_ENGLISH, eLangType );
+ aFormatter.GetOutputString( nNumber, nIndex, rRes, &pCol );
+ }
+ }
+ else if( aFmtStr.EqualsIgnoreCaseAscii( VBAFORMAT_N )
+ || aFmtStr.EqualsIgnoreCaseAscii( VBAFORMAT_NN ))
+ {
+ INT32 nMin = implGetMinute( nNumber );
+ if( nMin < 10 && aFmtStr.EqualsIgnoreCaseAscii( VBAFORMAT_NN ) )
+ {
+ // Minute in two digits
+ sal_Unicode* p = rRes.AllocBuffer( 2 );
+ *p++ = '0';
+ *p = sal_Unicode( '0' + nMin );
+ }
+ else
+ {
+ rRes = String::CreateFromInt32( nMin );
+ }
+ }
+ else if( aFmtStr.EqualsIgnoreCaseAscii( VBAFORMAT_W ))
+ {
+ INT32 nWeekDay = implGetWeekDay( nNumber );
+ rRes = String::CreateFromInt32( nWeekDay );
+ }
+ else if( aFmtStr.EqualsIgnoreCaseAscii( VBAFORMAT_Y ))
+ {
+ INT16 nYear = implGetDateYear( nNumber );
+ double dBaseDate;
+ implDateSerial( nYear, 1, 1, dBaseDate );
+ INT32 nYear32 = 1 + INT32( nNumber - dBaseDate );
+ rRes = String::CreateFromInt32( nYear32 );
+ }
+ else
+ {
+ aFormatter.PutandConvertEntry( aFmtStr, nCheckPos, nType, nIndex, LANGUAGE_ENGLISH, eLangType );
+ aFormatter.GetOutputString( nNumber, nIndex, rRes, &pCol );
+ }
+
+ return;
+ }
+ }
+
+ SbxDataType eType = GetType();
+ switch( eType )
+ {
+ case SbxCHAR:
+ case SbxBYTE:
+ case SbxINTEGER:
+ case SbxUSHORT:
+ case SbxLONG:
+ case SbxULONG:
+ case SbxINT:
+ case SbxUINT:
+ case SbxNULL: // #45929 NULL mit durchschummeln
+ nComma = 0; goto cvt;
+ case SbxSINGLE:
+ nComma = 6; goto cvt;
+ case SbxDOUBLE:
+ nComma = 14;
+
+ cvt:
+ if( eType != SbxNULL )
+ d = GetDouble();
+
+ // #45355 weiterer Einsprungpunkt fuer isnumeric-String
+ cvt2:
+ if( pFmt )
+ {
+ // hole die 'statischen' Daten f"ur Sbx
+ SbxAppData* pData = GetSbxData_Impl();
+
+ LanguageType eLangType = GetpApp()->GetSettings().GetLanguage();
+ if( pData->pBasicFormater )
+ {
+ if( pData->eBasicFormaterLangType != eLangType )
+ {
+ delete pData->pBasicFormater;
+ pData->pBasicFormater = NULL;
+ }
+ }
+ pData->eBasicFormaterLangType = eLangType;
+
+ // falls bisher noch kein BasicFormater-Objekt
+ // existiert, so erzeuge dieses
+ if( !pData->pBasicFormater )
+ {
+ SvtSysLocale aSysLocale;
+ const LocaleDataWrapper& rData = aSysLocale.GetLocaleData();
+ sal_Unicode cComma = rData.getNumDecimalSep().GetBuffer()[0];
+ sal_Unicode c1000 = rData.getNumThousandSep().GetBuffer()[0];
+ String aCurrencyStrg = rData.getCurrSymbol();
+
+ // Initialisierung des Basic-Formater-Hilfsobjekts:
+ // hole die Resourcen f"ur die vordefinierten Ausgaben
+ // des Format()-Befehls, z.B. f"ur "On/Off".
+ String aOnStrg = String( SbxValueFormatResId(
+ STR_BASICKEY_FORMAT_ON ) );
+ String aOffStrg = String( SbxValueFormatResId(
+ STR_BASICKEY_FORMAT_OFF) );
+ String aYesStrg = String( SbxValueFormatResId(
+ STR_BASICKEY_FORMAT_YES) );
+ String aNoStrg = String( SbxValueFormatResId(
+ STR_BASICKEY_FORMAT_NO) );
+ String aTrueStrg = String( SbxValueFormatResId(
+ STR_BASICKEY_FORMAT_TRUE) );
+ String aFalseStrg = String( SbxValueFormatResId(
+ STR_BASICKEY_FORMAT_FALSE) );
+ String aCurrencyFormatStrg = String( SbxValueFormatResId(
+ STR_BASICKEY_FORMAT_CURRENCY) );
+ // erzeuge das Basic-Formater-Objekt
+ pData->pBasicFormater
+ = new SbxBasicFormater( cComma,c1000,aOnStrg,aOffStrg,
+ aYesStrg,aNoStrg,aTrueStrg,aFalseStrg,
+ aCurrencyStrg,aCurrencyFormatStrg );
+ }
+ // Bem.: Aus Performance-Gr"unden wird nur EIN BasicFormater-
+ // Objekt erzeugt und 'gespeichert', dadurch erspart man
+ // sich das teure Resourcen-Laden (f"ur landesspezifische
+ // vordefinierte Ausgaben, z.B. "On/Off") und die st"andige
+ // String-Erzeugungs Operationen.
+ // ABER: dadurch ist dieser Code NICHT multithreading f"ahig !
+
+ // hier gibt es Probleme mit ;;;Null, da diese Methode nur aufgerufen
+ // wird, wenn der SbxValue eine Zahl ist !!!
+ // dazu koennte: pData->pBasicFormater->BasicFormatNull( *pFmt ); aufgerufen werden !
+ if( eType != SbxNULL )
+ {
+ rRes = pData->pBasicFormater->BasicFormat( d ,*pFmt );
+ }
+ else
+ {
+ rRes = pData->pBasicFormater->BasicFormatNull( *pFmt );
+ }
+
+ // Die alte Implementierung:
+ //old: printfmtnum( GetDouble(), rRes, *pFmt );
+ }
+ else
+ {
+ ::rtl::OUString aTmpString( rRes );
+ ImpCvtNum( GetDouble(), nComma, aTmpString );
+ rRes = aTmpString;
+ }
+ break;
+ case SbxSTRING:
+ if( pFmt )
+ {
+ // #45355 wenn es numerisch ist, muss gewandelt werden
+ if( IsNumericRTL() )
+ {
+ ScanNumIntnl( GetString(), d, /*bSingle*/FALSE );
+ goto cvt2;
+ }
+ else
+ {
+ // Sonst String-Formatierung
+ printfmtstr( GetString(), rRes, *pFmt );
+ }
+ }
+ else
+ rRes = GetString();
+ break;
+ default:
+ rRes = GetString();
+ }
+}
+
+
diff --git a/basic/source/sbx/sbxsng.cxx b/basic/source/sbx/sbxsng.cxx
new file mode 100644
index 000000000000..70ef1653666b
--- /dev/null
+++ b/basic/source/sbx/sbxsng.cxx
@@ -0,0 +1,359 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+#include <tools/errcode.hxx>
+#include <basic/sbx.hxx>
+#include "sbxconv.hxx"
+
+float ImpGetSingle( const SbxValues* p )
+{
+ SbxValues aTmp;
+ float nRes;
+start:
+ switch( +p->eType )
+ {
+ case SbxNULL:
+ SbxBase::SetError( SbxERR_CONVERSION );
+ case SbxEMPTY:
+ nRes = 0; break;
+ case SbxCHAR:
+ nRes = p->nChar; break;
+ case SbxBYTE:
+ nRes = p->nByte; break;
+ case SbxINTEGER:
+ case SbxBOOL:
+ nRes = p->nInteger; break;
+ case SbxERROR:
+ case SbxUSHORT:
+ nRes = p->nUShort; break;
+ case SbxLONG:
+ nRes = (float) p->nLong; break;
+ case SbxULONG:
+ nRes = (float) p->nULong; break;
+ case SbxSINGLE:
+ nRes = p->nSingle; break;
+ case SbxSALINT64:
+ nRes = (float) p->nInt64; break;
+ case SbxSALUINT64:
+ nRes = (float) ImpSalUInt64ToDouble( p->uInt64 ); break;
+ case SbxDECIMAL:
+ case SbxBYREF | SbxDECIMAL:
+ if( p->pDecimal )
+ p->pDecimal->getSingle( nRes );
+ else
+ nRes = 0.0;
+ break;
+ case SbxDATE:
+ case SbxDOUBLE:
+ case SbxLONG64:
+ case SbxULONG64:
+ case SbxCURRENCY:
+ {
+ double dVal;
+ if( p->eType == SbxCURRENCY )
+ dVal = ImpCurrencyToDouble( p->nLong64 );
+ else if( p->eType == SbxLONG64 )
+ dVal = ImpINT64ToDouble( p->nLong64 );
+ else if( p->eType == SbxULONG64 )
+ dVal = ImpUINT64ToDouble( p->nULong64 );
+ else
+ dVal = p->nDouble;
+
+ if( dVal > SbxMAXSNG )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW );
+ nRes = static_cast< float >(SbxMAXSNG);
+ }
+ else if( dVal < SbxMINSNG )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW );
+ nRes = static_cast< float >(SbxMINSNG);
+ }
+ else if( dVal > 0 && dVal < SbxMAXSNG2 )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW );
+ nRes = static_cast< float >(SbxMAXSNG2);
+ }
+ else if( dVal < 0 && dVal > SbxMINSNG2 )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW );
+ nRes = static_cast< float >(SbxMINSNG2);
+ }
+ else
+ nRes = (float) dVal;
+ break;
+ }
+ case SbxBYREF | SbxSTRING:
+ case SbxSTRING:
+ case SbxLPSTR:
+ if( !p->pOUString )
+ nRes = 0;
+ else
+ {
+ double d;
+ SbxDataType t;
+ if( ImpScan( *p->pOUString, d, t, NULL ) != SbxERR_OK )
+ nRes = 0;
+ else if( d > SbxMAXSNG )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW );
+ nRes = static_cast< float >(SbxMAXSNG);
+ }
+ else if( d < SbxMINSNG )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW );
+ nRes = static_cast< float >(SbxMINSNG);
+ }
+ else
+ nRes = (float) d;
+ }
+ break;
+ case SbxOBJECT:
+ {
+ SbxValue* pVal = PTR_CAST(SbxValue,p->pObj);
+ if( pVal )
+ nRes = pVal->GetSingle();
+ else
+ {
+ SbxBase::SetError( SbxERR_NO_OBJECT ); nRes = 0;
+ }
+ break;
+ }
+
+ case SbxBYREF | SbxCHAR:
+ nRes = *p->pChar; break;
+ case SbxBYREF | SbxBYTE:
+ nRes = *p->pByte; break;
+ case SbxBYREF | SbxINTEGER:
+ case SbxBYREF | SbxBOOL:
+ nRes = *p->pInteger; break;
+ case SbxBYREF | SbxLONG:
+ nRes = (float) *p->pLong; break;
+ case SbxBYREF | SbxULONG:
+ nRes = (float) *p->pULong; break;
+ case SbxBYREF | SbxERROR:
+ case SbxBYREF | SbxUSHORT:
+ nRes = *p->pUShort; break;
+ case SbxBYREF | SbxSINGLE:
+ nRes = *p->pSingle; break;
+ // ab hier muss getestet werden
+ case SbxBYREF | SbxDATE:
+ case SbxBYREF | SbxDOUBLE:
+ aTmp.nDouble = *p->pDouble; goto ref;
+ case SbxBYREF | SbxULONG64:
+ aTmp.nULong64 = *p->pULong64; goto ref;
+ case SbxBYREF | SbxLONG64:
+ case SbxBYREF | SbxSALINT64:
+ nRes = (float) *p->pnInt64; break;
+ case SbxBYREF | SbxSALUINT64:
+ nRes = (float) ImpSalUInt64ToDouble( *p->puInt64 ); break;
+ case SbxBYREF | SbxCURRENCY:
+ aTmp.nLong64 = *p->pLong64; goto ref;
+ ref:
+ aTmp.eType = SbxDataType( p->eType & 0x0FFF );
+ p = &aTmp; goto start;
+
+ default:
+ SbxBase::SetError( SbxERR_CONVERSION ); nRes = 0;
+ }
+ return nRes;
+}
+
+void ImpPutSingle( SbxValues* p, float n )
+{
+ SbxValues aTmp;
+start:
+ switch( +p->eType )
+ {
+ case SbxCHAR:
+ aTmp.pChar = &p->nChar; goto direct;
+ case SbxBYTE:
+ aTmp.pByte = &p->nByte; goto direct;
+ case SbxINTEGER:
+ case SbxBOOL:
+ aTmp.pInteger = &p->nInteger; goto direct;
+ case SbxLONG:
+ aTmp.pLong = &p->nLong; goto direct;
+ case SbxULONG:
+ aTmp.pULong = &p->nULong; goto direct;
+ case SbxERROR:
+ case SbxUSHORT:
+ aTmp.pUShort = &p->nUShort; goto direct;
+ case SbxULONG64:
+ aTmp.pULong64 = &p->nULong64; goto direct;
+ case SbxLONG64:
+ case SbxCURRENCY:
+ aTmp.pLong64 = &p->nLong64; goto direct;
+ case SbxSALINT64:
+ aTmp.pnInt64 = &p->nInt64; goto direct;
+ case SbxSALUINT64:
+ aTmp.puInt64 = &p->uInt64; goto direct;
+ case SbxDECIMAL:
+ case SbxBYREF | SbxDECIMAL:
+ {
+ SbxDecimal* pDec = ImpCreateDecimal( p );
+ if( !pDec->setSingle( n ) )
+ SbxBase::SetError( SbxERR_OVERFLOW );
+ break;
+ }
+ direct:
+ aTmp.eType = SbxDataType( p->eType | SbxBYREF );
+ p = &aTmp; goto start;
+
+ // keine Tests ab hier
+ case SbxSINGLE:
+ p->nSingle = n; break;
+ case SbxDATE:
+ case SbxDOUBLE:
+ p->nDouble = n; break;
+
+ case SbxBYREF | SbxSTRING:
+ case SbxSTRING:
+ case SbxLPSTR:
+ {
+ if( !p->pOUString )
+ p->pOUString = new ::rtl::OUString;
+ ImpCvtNum( (double) n, 6, *p->pOUString );
+ break;
+ }
+ case SbxOBJECT:
+ {
+ SbxValue* pVal = PTR_CAST(SbxValue,p->pObj);
+ if( pVal )
+ pVal->PutSingle( n );
+ else
+ SbxBase::SetError( SbxERR_NO_OBJECT );
+ break;
+ }
+ case SbxBYREF | SbxCHAR:
+ if( n > SbxMAXCHAR )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = SbxMAXCHAR;
+ }
+ else if( n < SbxMINCHAR )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = SbxMINCHAR;
+ }
+ *p->pChar = (xub_Unicode) n; break;
+ case SbxBYREF | SbxBYTE:
+ if( n > SbxMAXBYTE )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = SbxMAXBYTE;
+ }
+ else if( n < 0 )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = 0;
+ }
+ *p->pByte = (BYTE) n; break;
+ case SbxBYREF | SbxINTEGER:
+ case SbxBYREF | SbxBOOL:
+ if( n > SbxMAXINT )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = SbxMAXINT;
+ }
+ else if( n < SbxMININT )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = SbxMININT;
+ }
+ *p->pInteger = (INT16) n; break;
+ case SbxBYREF | SbxERROR:
+ case SbxBYREF | SbxUSHORT:
+ if( n > SbxMAXUINT )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = SbxMAXUINT;
+ }
+ else if( n < 0 )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = 0;
+ }
+ *p->pUShort = (UINT16) n; break;
+ case SbxBYREF | SbxLONG:
+ {
+ INT32 i;
+ if( n > SbxMAXLNG )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); i = SbxMAXLNG;
+ }
+ else if( n < SbxMINLNG )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); i = SbxMINLNG;
+ }
+ else
+ {
+ i = sal::static_int_cast< INT32 >(n);
+ }
+ *p->pLong = i; break;
+ }
+ case SbxBYREF | SbxULONG:
+ {
+ UINT32 i;
+ if( n > SbxMAXULNG )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); i = SbxMAXULNG;
+ }
+ else if( n < 0 )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); i = 0;
+ }
+ else
+ {
+ i = sal::static_int_cast< UINT32 >(n);
+ }
+ *p->pULong = i; break;
+ }
+ case SbxBYREF | SbxSINGLE:
+ *p->pSingle = n; break;
+ case SbxBYREF | SbxDATE:
+ case SbxBYREF | SbxDOUBLE:
+ *p->pDouble = (double) n; break;
+ case SbxBYREF | SbxSALINT64:
+ *p->pnInt64 = ImpDoubleToSalInt64( (double) n ); break;
+ case SbxBYREF | SbxSALUINT64:
+ *p->puInt64 = ImpDoubleToSalUInt64( (double) n ); break;
+ case SbxBYREF | SbxCURRENCY:
+ double d;
+ if( n > SbxMAXCURR )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); d = SbxMAXCURR;
+ }
+ else if( n < SbxMINCURR )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); d = SbxMINCURR;
+ }
+ else
+ {
+ d = n;
+ }
+ *p->pLong64 = ImpDoubleToCurrency( n ); break;
+
+ default:
+ SbxBase::SetError( SbxERR_CONVERSION );
+ }
+}
+
diff --git a/basic/source/sbx/sbxstr.cxx b/basic/source/sbx/sbxstr.cxx
new file mode 100644
index 000000000000..b4156a116ddc
--- /dev/null
+++ b/basic/source/sbx/sbxstr.cxx
@@ -0,0 +1,319 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+#include <tools/errcode.hxx>
+#include <basic/sbx.hxx>
+#include "sbxconv.hxx"
+#include "sbxres.hxx"
+#include "runtime.hxx"
+#ifndef _RTL_USTRBUF_HXX_
+#include <rtl/ustrbuf.hxx>
+#endif
+// AB 29.10.99 Unicode
+#ifndef _USE_NO_NAMESPACE
+using namespace rtl;
+#endif
+
+
+// Die Konversion eines Items auf String wird ueber die Put-Methoden
+// der einzelnen Datentypen abgewickelt, um doppelten Code zu vermeiden.
+
+::rtl::OUString ImpGetString( const SbxValues* p )
+{
+ SbxValues aTmp;
+ ::rtl::OUString aRes;
+ aTmp.eType = SbxSTRING;
+ aTmp.pOUString = &aRes;
+ switch( +p->eType )
+ {
+ case SbxNULL:
+ SbxBase::SetError( SbxERR_CONVERSION );
+ case SbxEMPTY:
+ break;
+ case SbxCHAR:
+ ImpPutChar( &aTmp, p->nChar ); break;
+ case SbxBYTE:
+ ImpPutByte( &aTmp, p->nByte ); break;
+ case SbxINTEGER:
+ ImpPutInteger( &aTmp, p->nInteger ); break;
+ case SbxBOOL:
+ ImpPutBool( &aTmp, p->nUShort ); break;
+ case SbxUSHORT:
+ ImpPutUShort( &aTmp, p->nUShort ); break;
+ case SbxLONG:
+ ImpPutLong( &aTmp, p->nLong ); break;
+ case SbxULONG:
+ ImpPutULong( &aTmp, p->nULong ); break;
+ case SbxSINGLE:
+ ImpPutSingle( &aTmp, p->nSingle ); break;
+ case SbxDOUBLE:
+ ImpPutDouble( &aTmp, p->nDouble ); break;
+ case SbxCURRENCY:
+ ImpPutCurrency( &aTmp, p->nLong64 ); break;
+ case SbxDECIMAL:
+ case SbxBYREF | SbxDECIMAL:
+ ImpPutDecimal( &aTmp, p->pDecimal ); break;
+ case SbxSALINT64:
+ ImpPutInt64( &aTmp, p->nInt64 ); break;
+ case SbxSALUINT64:
+ ImpPutUInt64( &aTmp, p->uInt64 ); break;
+ case SbxBYREF | SbxSTRING:
+ case SbxSTRING:
+ case SbxLPSTR:
+ if ( p->pOUString )
+ *aTmp.pOUString = *p->pOUString;
+ break;
+ case SbxOBJECT:
+ {
+ SbxValue* pVal = PTR_CAST(SbxValue,p->pObj);
+ if( pVal )
+ aRes = pVal->GetString();
+ else if( p->pObj && p->pObj->IsFixed()
+ && (p->pObj->GetType() == (SbxARRAY | SbxBYTE )) )
+ {
+ // convert byte array to string
+ SbxArray* pArr = PTR_CAST(SbxArray, p->pObj);
+ if( pArr )
+ aRes = ByteArrayToString( pArr );
+ }
+ else
+ SbxBase::SetError( SbxERR_NO_OBJECT );
+ break;
+ }
+ case SbxERROR:
+ // Hier wird der String "Error n" erzeugt
+ aRes = SbxRes( STRING_ERRORMSG );
+ aRes += ::rtl::OUString( p->nUShort ); break;
+ case SbxDATE:
+ ImpPutDate( &aTmp, p->nDouble ); break;
+
+ case SbxBYREF | SbxCHAR:
+ ImpPutChar( &aTmp, *p->pChar ); break;
+ case SbxBYREF | SbxBYTE:
+ ImpPutByte( &aTmp, *p->pByte ); break;
+ case SbxBYREF | SbxINTEGER:
+ case SbxBYREF | SbxBOOL:
+ ImpPutInteger( &aTmp, *p->pInteger ); break;
+ case SbxBYREF | SbxLONG:
+ ImpPutLong( &aTmp, *p->pLong ); break;
+ case SbxBYREF | SbxULONG:
+ ImpPutULong( &aTmp, *p->pULong ); break;
+ case SbxBYREF | SbxERROR:
+ case SbxBYREF | SbxUSHORT:
+ ImpPutUShort( &aTmp, *p->pUShort ); break;
+ case SbxBYREF | SbxSINGLE:
+ ImpPutSingle( &aTmp, *p->pSingle ); break;
+ case SbxBYREF | SbxDATE:
+ case SbxBYREF | SbxDOUBLE:
+ ImpPutDouble( &aTmp, *p->pDouble ); break;
+ case SbxBYREF | SbxCURRENCY:
+ ImpPutCurrency( &aTmp, *p->pLong64 ); break;
+ case SbxBYREF | SbxSALINT64:
+ ImpPutInt64( &aTmp, *p->pnInt64 ); break;
+ case SbxBYREF | SbxSALUINT64:
+ ImpPutUInt64( &aTmp, *p->puInt64 ); break;
+ default:
+ SbxBase::SetError( SbxERR_CONVERSION );
+ }
+ return aRes;
+}
+
+// AB 10.4.97, neue Funktion fuer SbxValue::GetCoreString()
+::rtl::OUString ImpGetCoreString( const SbxValues* p )
+{
+ // Vorerst nur fuer double
+ if( ( p->eType & (~SbxBYREF) ) == SbxDOUBLE )
+ {
+ SbxValues aTmp;
+ XubString aRes;
+ aTmp.eType = SbxSTRING;
+ if( p->eType == SbxDOUBLE )
+ ImpPutDouble( &aTmp, p->nDouble, /*bCoreString=*/TRUE );
+ else
+ ImpPutDouble( &aTmp, *p->pDouble, /*bCoreString=*/TRUE );
+ return aRes;
+ }
+ else
+ return ImpGetString( p );
+}
+
+void ImpPutString( SbxValues* p, const ::rtl::OUString* n )
+{
+ SbxValues aTmp;
+ aTmp.eType = SbxSTRING;
+ ::rtl::OUString* pTmp = NULL;
+ // Sicherheitshalber, falls ein NULL-Ptr kommt
+ if( !n )
+ n = pTmp = new ::rtl::OUString;
+ aTmp.pOUString = (::rtl::OUString*)n;
+ switch( +p->eType )
+ {
+ case SbxCHAR:
+ p->nChar = ImpGetChar( &aTmp ); break;
+ case SbxBYTE:
+ p->nByte = ImpGetByte( &aTmp ); break;
+ case SbxINTEGER:
+ case SbxBOOL:
+ p->nInteger = ImpGetInteger( &aTmp ); break;
+ case SbxLONG:
+ p->nLong = ImpGetLong( &aTmp ); break;
+ case SbxULONG:
+ p->nULong = ImpGetULong( &aTmp ); break;
+ case SbxERROR:
+ case SbxUSHORT:
+ p->nUShort = ImpGetUShort( &aTmp ); break;
+ case SbxSINGLE:
+ p->nSingle = ImpGetSingle( &aTmp ); break;
+ case SbxDATE:
+ p->nDouble = ImpGetDate( &aTmp ); break;
+ case SbxDOUBLE:
+ p->nDouble = ImpGetDouble( &aTmp ); break;
+ case SbxULONG64:
+ p->nLong64 = ImpGetCurrency( &aTmp ); break;
+ case SbxDECIMAL:
+ case SbxBYREF | SbxDECIMAL:
+ releaseDecimalPtr( p->pDecimal );
+ p->pDecimal = ImpGetDecimal( &aTmp ); break;
+ case SbxSALINT64:
+ p->nInt64 = ImpGetInt64( &aTmp ); break;
+ case SbxSALUINT64:
+ p->uInt64 = ImpGetUInt64( &aTmp ); break;
+
+ case SbxBYREF | SbxSTRING:
+ case SbxSTRING:
+ case SbxLPSTR:
+ if( n->getLength() )
+ {
+ if( !p->pOUString )
+ p->pOUString = new ::rtl::OUString( *n );
+ else
+ *p->pOUString = *n;
+ }
+ else
+ delete p->pOUString, p->pOUString = NULL;
+ break;
+ case SbxOBJECT:
+ {
+ SbxValue* pVal = PTR_CAST(SbxValue,p->pObj);
+ if( pVal )
+ pVal->PutString( *n );
+ else
+ SbxBase::SetError( SbxERR_NO_OBJECT );
+ break;
+ }
+ case SbxBYREF | SbxCHAR:
+ *p->pChar = ImpGetChar( p ); break;
+ case SbxBYREF | SbxBYTE:
+ *p->pByte = ImpGetByte( p ); break;
+ case SbxBYREF | SbxINTEGER:
+ *p->pInteger = ImpGetInteger( p ); break;
+ case SbxBYREF | SbxBOOL:
+ *p->pUShort = sal::static_int_cast< UINT16 >( ImpGetBool( p ) );
+ break;
+ case SbxBYREF | SbxERROR:
+ case SbxBYREF | SbxUSHORT:
+ *p->pUShort = ImpGetUShort( p ); break;
+ case SbxBYREF | SbxLONG:
+ *p->pLong = ImpGetLong( p ); break;
+ case SbxBYREF | SbxULONG:
+ *p->pULong = ImpGetULong( p ); break;
+ case SbxBYREF | SbxSINGLE:
+ *p->pSingle = ImpGetSingle( p ); break;
+ case SbxBYREF | SbxDATE:
+ *p->pDouble = ImpGetDate( p ); break;
+ case SbxBYREF | SbxDOUBLE:
+ *p->pDouble = ImpGetDouble( p ); break;
+ case SbxBYREF | SbxCURRENCY:
+ *p->pLong64 = ImpGetCurrency( p ); break;
+ default:
+ SbxBase::SetError( SbxERR_CONVERSION );
+ }
+ delete pTmp;
+}
+
+// Convert string to an array of bytes, preserving unicode (2bytes per character)
+SbxArray* StringToByteArray(const ::rtl::OUString& rStr)
+{
+ sal_Int32 nArraySize = rStr.getLength() * 2;
+ const sal_Unicode* pSrc = rStr.getStr();
+ SbxDimArray* pArray = new SbxDimArray(SbxBYTE);
+ bool bIncIndex = ( IsBaseIndexOne() && SbiRuntime::isVBAEnabled() );
+ if( nArraySize )
+ {
+ if( bIncIndex )
+ pArray->AddDim32( 1, nArraySize );
+ else
+ pArray->AddDim32( 0, nArraySize-1 );
+ }
+ else
+ {
+ pArray->unoAddDim( 0, -1 );
+ }
+
+ for( USHORT i=0; i< nArraySize; i++)
+ {
+ SbxVariable* pNew = new SbxVariable( SbxBYTE );
+ BYTE aByte = static_cast< BYTE >( i%2 ? ((*pSrc) >> 8) & 0xff : (*pSrc) & 0xff );
+ pNew->PutByte( aByte );
+ pNew->SetFlag( SBX_WRITE );
+ pArray->Put( pNew, i );
+ if( i%2 )
+ pSrc++;
+ }
+ return pArray;
+}
+
+// Convert an array of bytes to string (2bytes per character)
+::rtl::OUString ByteArrayToString(SbxArray* pArr)
+{
+ USHORT nCount = pArr->Count();
+ OUStringBuffer aStrBuf;
+ sal_Unicode aChar = 0;
+ for( USHORT i = 0 ; i < nCount ; i++ )
+ {
+ sal_Unicode aTempChar = pArr->Get(i)->GetByte();
+ if( i%2 )
+ {
+ aChar = (aTempChar << 8 ) | aChar;
+ aStrBuf.append(aChar);
+ aChar = 0;
+ }
+ else
+ {
+ aChar = aTempChar;
+ }
+ }
+
+ if( nCount%2 )
+ {
+ aStrBuf.append(aChar);
+ }
+
+ return aStrBuf.makeStringAndClear();
+}
diff --git a/basic/source/sbx/sbxuint.cxx b/basic/source/sbx/sbxuint.cxx
new file mode 100644
index 000000000000..5b75a24d6d26
--- /dev/null
+++ b/basic/source/sbx/sbxuint.cxx
@@ -0,0 +1,331 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+#include <tools/errcode.hxx>
+#include <basic/sbx.hxx>
+#include "sbxconv.hxx"
+
+UINT16 ImpGetUShort( const SbxValues* p )
+{
+ SbxValues aTmp;
+ UINT16 nRes;
+start:
+ switch( +p->eType )
+ {
+ case SbxNULL:
+ SbxBase::SetError( SbxERR_CONVERSION );
+ case SbxEMPTY:
+ nRes = 0; break;
+ case SbxCHAR:
+ nRes = p->nChar;
+ break;
+ case SbxBYTE:
+ nRes = p->nByte; break;
+ case SbxINTEGER:
+ case SbxBOOL:
+ if( p->nInteger < 0 )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = 0;
+ }
+ else
+ nRes = p->nInteger;
+ break;
+ case SbxERROR:
+ case SbxUSHORT:
+ nRes = p->nUShort;
+ break;
+ case SbxLONG:
+ if( p->nLong > SbxMAXUINT )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = SbxMAXUINT;
+ }
+ else if( p->nLong < 0 )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = 0;
+ }
+ else
+ nRes = (UINT16) p->nLong;
+ break;
+ case SbxULONG:
+ if( p->nULong > SbxMAXUINT )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = SbxMAXUINT;
+ }
+ else
+ nRes = (UINT16) p->nULong;
+ break;
+ case SbxSALINT64:
+ if( p->nInt64 > SbxMAXUINT )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = SbxMAXUINT;
+ }
+ else if( p->nInt64 < 0 )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = 0;
+ }
+ else
+ nRes = (UINT16) p->nInt64;
+ break;
+ case SbxSALUINT64:
+ if( p->uInt64 > SbxMAXUINT )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = SbxMAXUINT;
+ }
+ else
+ nRes = (UINT16) p->uInt64;
+ break;
+ case SbxSINGLE:
+ if( p->nSingle > SbxMAXUINT )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = SbxMAXUINT;
+ }
+ else if( p->nSingle < 0 )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = 0;
+ }
+ else
+ nRes = (UINT16) ( p->nSingle + 0.5 );
+ break;
+ case SbxDATE:
+ case SbxDOUBLE:
+ case SbxLONG64:
+ case SbxULONG64:
+ case SbxCURRENCY:
+ case SbxDECIMAL:
+ case SbxBYREF | SbxDECIMAL:
+ {
+ double dVal;
+ if( p->eType == SbxCURRENCY )
+ dVal = ImpCurrencyToDouble( p->nLong64 );
+ else if( p->eType == SbxLONG64 )
+ dVal = ImpINT64ToDouble( p->nLong64 );
+ else if( p->eType == SbxULONG64 )
+ dVal = ImpUINT64ToDouble( p->nULong64 );
+ else if( p->eType == SbxDECIMAL )
+ {
+ dVal = 0.0;
+ if( p->pDecimal )
+ p->pDecimal->getDouble( dVal );
+ }
+ else
+ dVal = p->nDouble;
+
+ if( dVal > SbxMAXUINT )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = SbxMAXUINT;
+ }
+ else if( dVal < 0 )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = 0;
+ }
+ else
+ nRes = (UINT16) ( dVal + 0.5 );
+ break;
+ }
+ case SbxBYREF | SbxSTRING:
+ case SbxSTRING:
+ case SbxLPSTR:
+ if( !p->pOUString )
+ nRes = 0;
+ else
+ {
+ double d;
+ SbxDataType t;
+ if( ImpScan( *p->pOUString, d, t, NULL ) != SbxERR_OK )
+ nRes = 0;
+ else if( d > SbxMAXUINT )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = SbxMAXUINT;
+ }
+ else if( d < 0 )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = 0;
+ }
+ else
+ nRes = (UINT16) ( d + 0.5 );
+ }
+ break;
+ case SbxOBJECT:
+ {
+ SbxValue* pVal = PTR_CAST(SbxValue,p->pObj);
+ if( pVal )
+ nRes = pVal->GetUShort();
+ else
+ {
+ SbxBase::SetError( SbxERR_NO_OBJECT ); nRes = 0;
+ }
+ break;
+ }
+
+ case SbxBYREF | SbxBYTE:
+ nRes = *p->pByte; break;
+ case SbxBYREF | SbxERROR:
+ case SbxBYREF | SbxUSHORT:
+ nRes = *p->pUShort; break;
+
+ // ab hier wird getestet
+ case SbxBYREF | SbxCHAR:
+ aTmp.nChar = *p->pChar; goto ref;
+ case SbxBYREF | SbxINTEGER:
+ case SbxBYREF | SbxBOOL:
+ aTmp.nInteger = *p->pInteger; goto ref;
+ case SbxBYREF | SbxLONG:
+ aTmp.nLong = *p->pLong; goto ref;
+ case SbxBYREF | SbxULONG:
+ aTmp.nULong = *p->pULong; goto ref;
+ case SbxBYREF | SbxSINGLE:
+ aTmp.nSingle = *p->pSingle; goto ref;
+ case SbxBYREF | SbxDATE:
+ case SbxBYREF | SbxDOUBLE:
+ aTmp.nDouble = *p->pDouble; goto ref;
+ case SbxBYREF | SbxULONG64:
+ aTmp.nULong64 = *p->pULong64; goto ref;
+ case SbxBYREF | SbxLONG64:
+ case SbxBYREF | SbxCURRENCY:
+ aTmp.nLong64 = *p->pLong64; goto ref;
+ case SbxBYREF | SbxSALINT64:
+ aTmp.nInt64 = *p->pnInt64; goto ref;
+ case SbxBYREF | SbxSALUINT64:
+ aTmp.uInt64 = *p->puInt64; goto ref;
+ ref:
+ aTmp.eType = SbxDataType( p->eType & 0x0FFF );
+ p = &aTmp; goto start;
+
+ default:
+ SbxBase::SetError( SbxERR_CONVERSION ); nRes = 0;
+ }
+ return nRes;
+}
+
+void ImpPutUShort( SbxValues* p, UINT16 n )
+{
+ SbxValues aTmp;
+
+start:
+ switch( +p->eType )
+ {
+ case SbxERROR:
+ case SbxUSHORT:
+ p->nUShort = n; break;
+ case SbxLONG:
+ p->nLong = n; break;
+ case SbxULONG:
+ p->nULong = n; break;
+ case SbxSINGLE:
+ p->nSingle = n; break;
+ case SbxDATE:
+ case SbxDOUBLE:
+ p->nDouble = n; break;
+ case SbxSALINT64:
+ p->nInt64 = n; break;
+ case SbxSALUINT64:
+ p->uInt64 = n; break;
+ case SbxULONG64:
+ p->nULong64 = ImpDoubleToUINT64( (double)n ); break;
+ case SbxLONG64:
+ p->nLong64 = ImpDoubleToINT64( (double)n ); break;
+ case SbxCURRENCY:
+ p->nLong64 = ImpDoubleToCurrency( (double)n ); break;
+ case SbxDECIMAL:
+ case SbxBYREF | SbxDECIMAL:
+ ImpCreateDecimal( p )->setUInt( n );
+ break;
+
+ // Tests ab hier
+ case SbxCHAR:
+ aTmp.pChar = &p->nChar; goto direct;
+ case SbxBYTE:
+ aTmp.pByte = &p->nByte; goto direct;
+ case SbxINTEGER:
+ case SbxBOOL:
+ aTmp.pInteger = &p->nInteger;
+ direct:
+ aTmp.eType = SbxDataType( p->eType | SbxBYREF );
+ p = &aTmp; goto start;
+
+ case SbxBYREF | SbxSTRING:
+ case SbxSTRING:
+ case SbxLPSTR:
+ if( !p->pOUString )
+ p->pOUString = new ::rtl::OUString;
+ ImpCvtNum( (double) n, 0, *p->pOUString );
+ break;
+ case SbxOBJECT:
+ {
+ SbxValue* pVal = PTR_CAST(SbxValue,p->pObj);
+ if( pVal )
+ pVal->PutUShort( n );
+ else
+ SbxBase::SetError( SbxERR_NO_OBJECT );
+ break;
+ }
+
+ case SbxBYREF | SbxCHAR:
+ *p->pChar = (xub_Unicode) n; break;
+ case SbxBYREF | SbxBYTE:
+ if( n > SbxMAXBYTE )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = SbxMAXBYTE;
+ }
+ *p->pByte = (BYTE) n; break;
+ case SbxBYREF | SbxINTEGER:
+ case SbxBYREF | SbxBOOL:
+ if( n > SbxMAXINT )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = SbxMAXINT;
+ }
+ *p->pInteger = (INT16) n; break;
+ case SbxBYREF | SbxERROR:
+ case SbxBYREF | SbxUSHORT:
+ *p->pUShort = n; break;
+ case SbxBYREF | SbxLONG:
+ *p->pLong = n; break;
+ case SbxBYREF | SbxULONG:
+ *p->pULong = n; break;
+ case SbxBYREF | SbxSINGLE:
+ *p->pSingle = n; break;
+ case SbxBYREF | SbxDATE:
+ case SbxBYREF | SbxDOUBLE:
+ *p->pDouble = n; break;
+ case SbxBYREF | SbxSALINT64:
+ *p->pnInt64 = n; break;
+ case SbxBYREF | SbxSALUINT64:
+ *p->puInt64 = n; break;
+ case SbxBYREF | SbxULONG64:
+ *p->pULong64 = ImpDoubleToUINT64( (double)n ); break;
+ case SbxBYREF | SbxLONG64:
+ *p->pLong64 = ImpDoubleToINT64( (double)n ); break;
+ case SbxBYREF | SbxCURRENCY:
+ *p->pLong64 = ImpDoubleToCurrency( (double)n ); break;
+
+ default:
+ SbxBase::SetError( SbxERR_CONVERSION );
+ }
+}
+
diff --git a/basic/source/sbx/sbxulng.cxx b/basic/source/sbx/sbxulng.cxx
new file mode 100644
index 000000000000..e0f6f3fa421d
--- /dev/null
+++ b/basic/source/sbx/sbxulng.cxx
@@ -0,0 +1,321 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+#include <tools/errcode.hxx>
+#include <basic/sbx.hxx>
+#include "sbxconv.hxx"
+
+UINT32 ImpGetULong( const SbxValues* p )
+{
+ SbxValues aTmp;
+ UINT32 nRes;
+start:
+ switch( +p->eType )
+ {
+ case SbxNULL:
+ SbxBase::SetError( SbxERR_CONVERSION );
+ case SbxEMPTY:
+ nRes = 0; break;
+ case SbxCHAR:
+ nRes = p->nChar;
+ break;
+ case SbxBYTE:
+ nRes = p->nByte; break;
+ case SbxINTEGER:
+ case SbxBOOL:
+ if( p->nInteger < 0 )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = 0;
+ }
+ else
+ nRes = p->nInteger;
+ break;
+ case SbxERROR:
+ case SbxUSHORT:
+ nRes = p->nUShort;
+ break;
+ case SbxLONG:
+ if( p->nLong < 0 )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = 0;
+ }
+ else
+ nRes = p->nLong;
+ break;
+ case SbxULONG:
+ nRes = p->nULong; break;
+ case SbxSINGLE:
+ if( p->nSingle > SbxMAXULNG )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = SbxMAXULNG;
+ }
+ else if( p->nSingle < 0 )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = 0;
+ }
+ else
+ nRes = (UINT32) ( p->nSingle + 0.5 );
+ break;
+ case SbxDATE:
+ case SbxDOUBLE:
+ case SbxLONG64:
+ case SbxULONG64:
+ case SbxSALINT64:
+ case SbxSALUINT64:
+ case SbxCURRENCY:
+ case SbxDECIMAL:
+ case SbxBYREF | SbxDECIMAL:
+ {
+ double dVal;
+ if( p->eType == SbxCURRENCY )
+ dVal = ImpCurrencyToDouble( p->nLong64 );
+ else if( p->eType == SbxLONG64 )
+ dVal = ImpINT64ToDouble( p->nLong64 );
+ else if( p->eType == SbxULONG64 )
+ dVal = ImpUINT64ToDouble( p->nULong64 );
+ else if( p->eType == SbxSALINT64 )
+ dVal = static_cast< double >(p->nInt64);
+ else if( p->eType == SbxSALUINT64 )
+ dVal = ImpSalUInt64ToDouble( p->uInt64 );
+ else if( p->eType == SbxDECIMAL )
+ {
+ dVal = 0.0;
+ if( p->pDecimal )
+ p->pDecimal->getDouble( dVal );
+ }
+ else
+ dVal = p->nDouble;
+
+ if( dVal > SbxMAXULNG )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = SbxMAXULNG;
+ }
+ else if( dVal < 0 )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = 0;
+ }
+ else
+ nRes = (UINT32) ( dVal + 0.5 );
+ break;
+ }
+ case SbxBYREF | SbxSTRING:
+ case SbxSTRING:
+ case SbxLPSTR:
+ if( !p->pOUString )
+ nRes = 0;
+ else
+ {
+ double d;
+ SbxDataType t;
+ if( ImpScan( *p->pOUString, d, t, NULL ) != SbxERR_OK )
+ nRes = 0;
+ else if( d > SbxMAXULNG )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = SbxMAXULNG;
+ }
+ else if( d < 0 )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); nRes = 0;
+ }
+ else
+ nRes = (UINT32) ( d + 0.5 );
+ }
+ break;
+ case SbxOBJECT:
+ {
+ SbxValue* pVal = PTR_CAST(SbxValue,p->pObj);
+ if( pVal )
+ nRes = pVal->GetULong();
+ else
+ {
+ SbxBase::SetError( SbxERR_NO_OBJECT ); nRes = 0;
+ }
+ break;
+ }
+
+ case SbxBYREF | SbxBYTE:
+ nRes = *p->pByte; break;
+ case SbxBYREF | SbxERROR:
+ case SbxBYREF | SbxUSHORT:
+ nRes = *p->pUShort; break;
+ case SbxBYREF | SbxULONG:
+ nRes = *p->pULong; break;
+
+ // Tests ab hier
+ case SbxBYREF | SbxCHAR:
+ aTmp.nChar = *p->pChar; goto ref;
+ case SbxBYREF | SbxINTEGER:
+ case SbxBYREF | SbxBOOL:
+ aTmp.nInteger = *p->pInteger; goto ref;
+ case SbxBYREF | SbxLONG:
+ aTmp.nLong = *p->pLong; goto ref;
+ case SbxBYREF | SbxSINGLE:
+ aTmp.nSingle = *p->pSingle; goto ref;
+ case SbxBYREF | SbxDATE:
+ case SbxBYREF | SbxDOUBLE:
+ aTmp.nDouble = *p->pDouble; goto ref;
+ case SbxBYREF | SbxSALINT64:
+ aTmp.nInt64 = *p->pnInt64; goto ref;
+ case SbxBYREF | SbxSALUINT64:
+ aTmp.uInt64 = *p->puInt64; goto ref;
+ case SbxBYREF | SbxULONG64:
+ aTmp.nULong64 = *p->pULong64; goto ref;
+ case SbxBYREF | SbxLONG64:
+ case SbxBYREF | SbxCURRENCY:
+ aTmp.nLong64 = *p->pLong64; goto ref;
+ ref:
+ aTmp.eType = SbxDataType( p->eType & 0x0FFF );
+ p = &aTmp; goto start;
+
+ default:
+ SbxBase::SetError( SbxERR_CONVERSION ); nRes = 0;
+ }
+ return nRes;
+}
+
+void ImpPutULong( SbxValues* p, UINT32 n )
+{
+ SbxValues aTmp;
+start:
+ switch( +p->eType )
+ {
+ case SbxULONG:
+ p->nULong = n; break;
+ case SbxSINGLE:
+ p->nSingle = (float) n; break;
+ case SbxDATE:
+ case SbxDOUBLE:
+ p->nDouble = n; break;
+ case SbxSALINT64:
+ p->nInt64 = n; break;
+ case SbxSALUINT64:
+ p->uInt64 = n; break;
+ case SbxDECIMAL:
+ case SbxBYREF | SbxDECIMAL:
+ ImpCreateDecimal( p )->setULong( n );
+ break;
+
+ // Tests ab hier
+ case SbxCHAR:
+ aTmp.pChar = &p->nChar; goto direct;
+ case SbxUINT:
+ aTmp.pByte = &p->nByte; goto direct;
+ case SbxINTEGER:
+ case SbxBOOL:
+ aTmp.pInteger = &p->nInteger; goto direct;
+ case SbxLONG:
+ aTmp.pLong = &p->nLong; goto direct;
+ case SbxERROR:
+ case SbxUSHORT:
+ aTmp.pUShort = &p->nUShort; goto direct;
+ case SbxULONG64:
+ aTmp.pULong64 = &p->nULong64; goto direct;
+ case SbxLONG64:
+ case SbxCURRENCY:
+ aTmp.pLong64 = &p->nLong64; goto direct;
+ direct:
+ aTmp.eType = SbxDataType( p->eType | SbxBYREF );
+ p = &aTmp; goto start;
+
+ case SbxBYREF | SbxSTRING:
+ case SbxSTRING:
+ case SbxLPSTR:
+ if( !p->pOUString )
+ p->pOUString = new ::rtl::OUString;
+ ImpCvtNum( (double) n, 0, *p->pOUString );
+ break;
+ case SbxOBJECT:
+ {
+ SbxValue* pVal = PTR_CAST(SbxValue,p->pObj);
+ if( pVal )
+ pVal->PutULong( n );
+ else
+ SbxBase::SetError( SbxERR_NO_OBJECT );
+ break;
+ }
+ case SbxBYREF | SbxCHAR:
+ if( n > SbxMAXCHAR )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = SbxMAXCHAR;
+ }
+ *p->pChar = (xub_Unicode) n; break;
+ case SbxBYREF | SbxBYTE:
+ if( n > SbxMAXBYTE )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = SbxMAXBYTE;
+ }
+ *p->pByte = (BYTE) n; break;
+ case SbxBYREF | SbxINTEGER:
+ case SbxBYREF | SbxBOOL:
+ if( n > SbxMAXINT )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = SbxMAXINT;
+ }
+ *p->pInteger = (INT16) n; break;
+ case SbxBYREF | SbxERROR:
+ case SbxBYREF | SbxUSHORT:
+ if( n > SbxMAXUINT )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = SbxMAXUINT;
+ }
+ *p->pUShort = (UINT16) n; break;
+ case SbxBYREF | SbxLONG:
+ if( n > SbxMAXLNG )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); n = SbxMAXLNG;
+ }
+ *p->pLong = (INT32) n; break;
+ case SbxBYREF | SbxULONG:
+ *p->pULong = n; break;
+ case SbxBYREF | SbxSINGLE:
+ *p->pSingle = (float) n; break;
+ case SbxBYREF | SbxDATE:
+ case SbxBYREF | SbxDOUBLE:
+ *p->pDouble = n; break;
+ case SbxBYREF | SbxSALINT64:
+ *p->pnInt64 = n; break;
+ case SbxBYREF | SbxSALUINT64:
+ *p->puInt64 = n; break;
+ case SbxBYREF | SbxCURRENCY:
+ double d;
+ if( n > SbxMAXCURR )
+ {
+ SbxBase::SetError( SbxERR_OVERFLOW ); d = SbxMAXCURR;
+ }
+ else
+ {
+ d = n;
+ }
+ *p->pLong64 = ImpDoubleToCurrency( n ); break;
+
+ default:
+ SbxBase::SetError( SbxERR_CONVERSION );
+ }
+}
+
diff --git a/basic/source/sbx/sbxvals.cxx b/basic/source/sbx/sbxvals.cxx
new file mode 100644
index 000000000000..e63a352879ed
--- /dev/null
+++ b/basic/source/sbx/sbxvals.cxx
@@ -0,0 +1,109 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+
+#define _TLBIGINT_INT64
+#include <tools/bigint.hxx>
+#include <basic/sbx.hxx>
+
+///////////////////////////// BigInt/Currency //////////////////////////////
+
+SbxValues::SbxValues( const BigInt &rBig ) : eType(SbxCURRENCY)
+{
+ rBig.INT64( &nLong64 );
+}
+
+//TODO: BigInt is TOOLS_DLLPUBLIC, and its four member functions only declared
+// and defined within basic (#define _TLBIGINT_INT64) are a bad hack that causes
+// "warning C4273: 'function' : inconsistent dll linkage" on MSC; this whole
+// mess should be cleaned up properly (e.g., by completely removing Sbx[U]INT64
+// and using sal_[u]Int64 instead):
+#if defined _MSC_VER
+#pragma warning(disable: 4273)
+#endif
+
+BOOL BigInt::INT64( SbxINT64 *p ) const
+{
+ if( bIsBig ) {
+ if( nLen > 4 || (nNum[3] & 0x8000) )
+ return FALSE;
+
+ p->nLow = ((UINT32)nNum[1] << 16) | (UINT32)nNum[0];
+ p->nHigh = ((UINT32)nNum[3] << 16) | (UINT32)nNum[2];
+ if( bIsNeg )
+ p->CHS();
+ }
+ else
+ p->Set( (INT32)nVal );
+
+ return TRUE;
+}
+
+BigInt::BigInt( const SbxINT64 &r )
+{
+ BigInt a10000 = 0x10000;
+
+ *this = r.nHigh;
+ if( r.nHigh )
+ *this *= a10000;
+ *this += (USHORT)(r.nLow >> 16);
+ *this *= a10000;
+ *this += (USHORT)r.nLow;
+}
+
+BOOL BigInt::UINT64( SbxUINT64 *p ) const
+{
+ if( bIsBig ) {
+ if( bIsNeg || nLen > 4 )
+ return FALSE;
+
+ p->nLow = ((UINT32)nNum[1] << 16) | (UINT32)nNum[0];
+ p->nHigh = ((UINT32)nNum[3] << 16) | (UINT32)nNum[2];
+ }
+ else {
+ if( nVal < 0 )
+ return FALSE;
+
+ p->Set( (UINT32)nVal );
+ }
+
+ return TRUE;
+}
+
+BigInt::BigInt( const SbxUINT64 &r )
+{
+ BigInt a10000 = 0x10000;
+
+ *this = BigInt(r.nHigh);
+ if( r.nHigh )
+ *this *= a10000;
+ *this += (USHORT)(r.nLow >> 16);
+ *this *= a10000;
+ *this += (USHORT)r.nLow;
+}
diff --git a/basic/source/sbx/sbxvalue.cxx b/basic/source/sbx/sbxvalue.cxx
new file mode 100644
index 000000000000..4ea4836b701b
--- /dev/null
+++ b/basic/source/sbx/sbxvalue.cxx
@@ -0,0 +1,1858 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+
+#define _TLBIGINT_INT64
+#include <tools/bigint.hxx>
+#include <tools/stream.hxx>
+
+#include <basic/sbx.hxx>
+#include "sbxconv.hxx"
+#include <math.h>
+#include "runtime.hxx"
+// AB 29.10.99 Unicode
+#ifndef _USE_NO_NAMESPACE
+using namespace rtl;
+#endif
+
+
+TYPEINIT1(SbxValue,SbxBase)
+
+/////////////////////////// SbxINT64 /////////////////////////////////////
+SbxINT64 &SbxINT64::operator -= ( const SbxINT64 &r )
+{
+ BigInt b( *this );
+ b -= BigInt( r );
+ b.INT64( this );
+ return *this;
+}
+SbxINT64 &SbxINT64::operator += ( const SbxINT64 &r )
+{
+ BigInt b( *this );
+ b += BigInt( r );
+ b.INT64( this );
+ return *this;
+}
+SbxINT64 &SbxINT64::operator *= ( const SbxINT64 &r )
+{
+ BigInt b( *this );
+ b *= BigInt( r );
+ b.INT64( this );
+ return *this;
+}
+SbxINT64 &SbxINT64::operator %= ( const SbxINT64 &r )
+{
+ BigInt b( *this );
+ b %= BigInt( r );
+ b.INT64( this );
+ return *this;
+}
+SbxINT64 &SbxINT64::operator /= ( const SbxINT64 &r )
+{
+ BigInt b( *this );
+ b /= BigInt( r );
+ b.INT64( this );
+ return *this;
+}
+SbxINT64 &SbxINT64::operator &= ( const SbxINT64 &r )
+{
+ nHigh &= r.nHigh;
+ nLow &= r.nLow;
+ return *this;
+}
+SbxINT64 &SbxINT64::operator |= ( const SbxINT64 &r )
+{
+ nHigh |= r.nHigh;
+ nLow |= r.nLow;
+ return *this;
+}
+SbxINT64 &SbxINT64::operator ^= ( const SbxINT64 &r )
+{
+ nHigh ^= r.nHigh;
+ nLow ^= r.nLow;
+ return *this;
+}
+
+SbxINT64 operator - ( const SbxINT64 &l, const SbxINT64 &r )
+{
+ SbxINT64 a(l);
+ a -= r;
+ return a;
+}
+SbxINT64 operator + ( const SbxINT64 &l, const SbxINT64 &r )
+{
+ SbxINT64 a(l);
+ a += r;
+ return a;
+}
+SbxINT64 operator / ( const SbxINT64 &l, const SbxINT64 &r )
+{
+ SbxINT64 a(l);
+ a /= r;
+ return a;
+}
+SbxINT64 operator % ( const SbxINT64 &l, const SbxINT64 &r )
+{
+ SbxINT64 a(l);
+ a %= r;
+ return a;
+}
+SbxINT64 operator * ( const SbxINT64 &l, const SbxINT64 &r )
+{
+ SbxINT64 a(l);
+ a *= r;
+ return a;
+}
+SbxINT64 operator & ( const SbxINT64 &l, const SbxINT64 &r )
+{
+ SbxINT64 a;
+ a.nHigh = r.nHigh & l.nHigh;
+ a.nLow = r.nLow & l.nLow;
+ return a;
+}
+SbxINT64 operator | ( const SbxINT64 &l, const SbxINT64 &r )
+{
+ SbxINT64 a;
+ a.nHigh = r.nHigh | l.nHigh;
+ a.nLow = r.nLow | l.nLow;
+ return a;
+}
+SbxINT64 operator ^ ( const SbxINT64 &r, const SbxINT64 &l )
+{
+ SbxINT64 a;
+ a.nHigh = r.nHigh ^ l.nHigh;
+ a.nLow = r.nLow ^ l.nLow;
+ return a;
+}
+
+SbxINT64 operator - ( const SbxINT64 &r )
+{
+ SbxINT64 a( r );
+ a.CHS();
+ return a;
+}
+SbxINT64 operator ~ ( const SbxINT64 &r )
+{
+ SbxINT64 a;
+ a.nHigh = ~r.nHigh;
+ a.nLow = ~r.nLow;
+ return a;
+}
+
+SbxUINT64 &SbxUINT64::operator %= ( const SbxUINT64 &r )
+{
+ BigInt b( *this );
+ b %= BigInt( r );
+ b.UINT64( this );
+ return *this;
+}
+SbxUINT64 &SbxUINT64::operator /= ( const SbxUINT64 &r )
+{
+ BigInt b( *this );
+ b /= BigInt( r );
+ b.UINT64( this );
+ return *this;
+}
+/////////////////////////// Fehlerbehandlung /////////////////////////////
+
+#ifdef _USED
+// NOCH NACHZUBAUEN!
+
+// Das Default-Handling setzt nur den Fehlercode.
+
+#ifndef WNT
+#if defined ( UNX )
+int matherr( struct exception* p )
+#else
+int matherr( struct _exception* p )
+#endif
+{
+ switch( p->type )
+ {
+#if defined ( UNX )
+ case OVERFLOW: SbxBase::SetError( SbxERR_OVERFLOW ); break;
+#else
+ case _OVERFLOW: SbxBase::SetError( SbxERR_OVERFLOW ); break;
+#endif
+ default: SbxBase::SetError( SbxERR_NOTIMP ); break;
+ }
+ return TRUE;
+}
+#endif
+
+#endif // _USED
+
+
+///////////////////////////// Konstruktoren //////////////////////////////
+
+SbxValue::SbxValue() : SbxBase()
+{
+ aData.eType = SbxEMPTY;
+}
+
+SbxValue::SbxValue( SbxDataType t, void* p ) : SbxBase()
+{
+ int n = t & 0x0FFF;
+ if( p )
+ n |= SbxBYREF;
+ if( n == SbxVARIANT )
+ n = SbxEMPTY;
+ else
+ SetFlag( SBX_FIXED );
+ if( p )
+ switch( t & 0x0FFF )
+ {
+ case SbxINTEGER: n |= SbxBYREF; aData.pInteger = (INT16*) p; break;
+ case SbxULONG64: n |= SbxBYREF; aData.pULong64 = (SbxUINT64*) p; break;
+ case SbxLONG64:
+ case SbxCURRENCY: n |= SbxBYREF; aData.pLong64 = (SbxINT64*) p; break;
+ case SbxLONG: n |= SbxBYREF; aData.pLong = (INT32*) p; break;
+ case SbxSINGLE: n |= SbxBYREF; aData.pSingle = (float*) p; break;
+ case SbxDATE:
+ case SbxDOUBLE: n |= SbxBYREF; aData.pDouble = (double*) p; break;
+ case SbxSTRING: n |= SbxBYREF; aData.pOUString = (::rtl::OUString*) p; break;
+ case SbxERROR:
+ case SbxUSHORT:
+ case SbxBOOL: n |= SbxBYREF; aData.pUShort = (UINT16*) p; break;
+ case SbxULONG: n |= SbxBYREF; aData.pULong = (UINT32*) p; break;
+ case SbxCHAR: n |= SbxBYREF; aData.pChar = (xub_Unicode*) p; break;
+ case SbxBYTE: n |= SbxBYREF; aData.pByte = (BYTE*) p; break;
+ case SbxINT: n |= SbxBYREF; aData.pInt = (int*) p; break;
+ case SbxOBJECT:
+ aData.pObj = (SbxBase*) p;
+ if( p )
+ aData.pObj->AddRef();
+ break;
+ case SbxDECIMAL:
+ aData.pDecimal = (SbxDecimal*) p;
+ if( p )
+ aData.pDecimal->addRef();
+ break;
+ default:
+ DBG_ASSERT( !this, "Angabe eines Pointers unzulaessig" );
+ n = SbxNULL;
+ }
+ else
+ memset( &aData, 0, sizeof( SbxValues ) );
+ aData.eType = SbxDataType( n );
+}
+
+SbxValue::SbxValue( const SbxValue& r )
+ : SvRefBase( r ), SbxBase( r )
+{
+ if( !r.CanRead() )
+ {
+ SetError( SbxERR_PROP_WRITEONLY );
+ if( !IsFixed() )
+ aData.eType = SbxNULL;
+ }
+ else
+ {
+ ((SbxValue*) &r)->Broadcast( SBX_HINT_DATAWANTED );
+ aData = r.aData;
+ // Pointer kopieren, Referenzen inkrementieren
+ switch( aData.eType )
+ {
+ case SbxSTRING:
+ if( aData.pOUString )
+ aData.pOUString = new ::rtl::OUString( *aData.pOUString );
+ break;
+ case SbxOBJECT:
+ if( aData.pObj )
+ aData.pObj->AddRef();
+ break;
+ case SbxDECIMAL:
+ if( aData.pDecimal )
+ aData.pDecimal->addRef();
+ break;
+ default: break;
+ }
+ }
+}
+
+SbxValue& SbxValue::operator=( const SbxValue& r )
+{
+ if( &r != this )
+ {
+ if( !CanWrite() )
+ SetError( SbxERR_PROP_READONLY );
+ else
+ {
+ // string -> byte array
+ if( IsFixed() && (aData.eType == SbxOBJECT)
+ && aData.pObj && ( aData.pObj->GetType() == (SbxARRAY | SbxBYTE) )
+ && (r.aData.eType == SbxSTRING) )
+ {
+ ::rtl::OUString aStr = r.GetString();
+ SbxArray* pArr = StringToByteArray(aStr);
+ PutObject(pArr);
+ return *this;
+ }
+ // byte array -> string
+ if( r.IsFixed() && (r.aData.eType == SbxOBJECT)
+ && r.aData.pObj && ( r.aData.pObj->GetType() == (SbxARRAY | SbxBYTE) )
+ && (aData.eType == SbxSTRING) )
+ {
+ SbxBase* pObj = r.GetObject();
+ SbxArray* pArr = PTR_CAST(SbxArray, pObj);
+ if( pArr )
+ {
+ ::rtl::OUString aStr = ByteArrayToString( pArr );
+ PutString(aStr);
+ return *this;
+ }
+ }
+ // Den Inhalt der Variablen auslesen
+ SbxValues aNew;
+ if( IsFixed() )
+ // fest: dann muss der Typ stimmen
+ aNew.eType = aData.eType;
+ else if( r.IsFixed() )
+ // Quelle fest: Typ uebernehmen
+ aNew.eType = SbxDataType( r.aData.eType & 0x0FFF );
+ else
+ // beides Variant: dann isses egal
+ aNew.eType = SbxVARIANT;
+ if( r.Get( aNew ) )
+ Put( aNew );
+ }
+ }
+ return *this;
+}
+
+SbxValue::~SbxValue()
+{
+#ifndef C50
+ Broadcast( SBX_HINT_DYING );
+ SetFlag( SBX_WRITE );
+ SbxValue::Clear();
+#else
+ // Provisorischer Fix fuer Solaris 5.0 Compiler Bug
+ // bei Nutzung virtueller Vererbung. Virtuelle Calls
+ // im Destruktor vermeiden. Statt Clear() zu rufen
+ // moegliche Objekt-Referenzen direkt freigeben.
+ if( aData.eType == SbxOBJECT )
+ {
+ if( aData.pObj && aData.pObj != this )
+ {
+ HACK(nicht bei Parent-Prop - sonst CyclicRef)
+ SbxVariable *pThisVar = PTR_CAST(SbxVariable, this);
+ BOOL bParentProp = pThisVar && 5345 ==
+ ( (INT16) ( pThisVar->GetUserData() & 0xFFFF ) );
+ if ( !bParentProp )
+ aData.pObj->ReleaseRef();
+ }
+ }
+ else if( aData.eType == SbxDECIMAL )
+ {
+ releaseDecimalPtr( aData.pDecimal );
+ }
+#endif
+}
+
+void SbxValue::Clear()
+{
+ switch( aData.eType )
+ {
+ case SbxNULL:
+ case SbxEMPTY:
+ case SbxVOID:
+ break;
+ case SbxSTRING:
+ delete aData.pOUString; aData.pOUString = NULL;
+ break;
+ case SbxOBJECT:
+ if( aData.pObj )
+ {
+ if( aData.pObj != this )
+ {
+ HACK(nicht bei Parent-Prop - sonst CyclicRef)
+ SbxVariable *pThisVar = PTR_CAST(SbxVariable, this);
+ BOOL bParentProp = pThisVar && 5345 ==
+ ( (INT16) ( pThisVar->GetUserData() & 0xFFFF ) );
+ if ( !bParentProp )
+ aData.pObj->ReleaseRef();
+ }
+ aData.pObj = NULL;
+ }
+ break;
+ case SbxDECIMAL:
+ if( aData.eType == SbxDECIMAL )
+ releaseDecimalPtr( aData.pDecimal );
+ break;
+ case SbxDATAOBJECT:
+ aData.pData = NULL; break;
+ default:
+ {
+ SbxValues aEmpty;
+ memset( &aEmpty, 0, sizeof( SbxValues ) );
+ aEmpty.eType = GetType();
+ Put( aEmpty );
+ }
+ }
+}
+
+// Dummy
+
+void SbxValue::Broadcast( ULONG )
+{}
+
+//////////////////////////// Daten auslesen //////////////////////////////
+
+// Ermitteln der "richtigen" Variablen. Falls es ein Objekt ist, wird
+// entweder das Objekt selbst oder dessen Default-Property angesprochen.
+// Falls die Variable eine Variable oder ein Objekt enthaelt, wird
+// dieses angesprochen.
+
+SbxValue* SbxValue::TheRealValue() const
+{
+ return TheRealValue( TRUE );
+}
+
+// #55226 Zusaetzliche Info transportieren
+SbxValue* SbxValue::TheRealValue( BOOL bObjInObjError ) const
+{
+ SbxValue* p = (SbxValue*) this;
+ for( ;; )
+ {
+ SbxDataType t = SbxDataType( p->aData.eType & 0x0FFF );
+ if( t == SbxOBJECT )
+ {
+ // Der Block enthaelt ein Objekt oder eine Variable
+ SbxObject* pObj = PTR_CAST(SbxObject,p->aData.pObj);
+ if( pObj )
+ {
+ // Hat das Objekt eine Default-Property?
+ SbxVariable* pDflt = pObj->GetDfltProperty();
+
+ // Falls dies ein Objekt ist und sich selbst enthaelt,
+ // koennen wir nicht darauf zugreifen
+ // #55226# Die alte Bedingung, um einen Fehler zu setzen,
+ // ist nicht richtig, da z.B. eine ganz normale Variant-
+ // Variable mit Objekt davon betroffen sein kann, wenn ein
+ // anderer Wert zugewiesen werden soll. Daher mit Flag.
+ if( bObjInObjError && !pDflt &&
+ ((SbxValue*) pObj)->aData.eType == SbxOBJECT &&
+ ((SbxValue*) pObj)->aData.pObj == pObj )
+ {
+ SetError( SbxERR_BAD_PROP_VALUE );
+ p = NULL;
+ }
+ else if( pDflt )
+ p = pDflt;
+ /* ALT:
+ else
+ p = pDflt ? pDflt : (SbxVariable*) pObj;
+ */
+ break;
+ }
+ // Haben wir ein Array?
+ SbxArray* pArray = PTR_CAST(SbxArray,p->aData.pObj);
+ if( pArray )
+ {
+ // Ggf. Parameter holen
+ SbxArray* pPar = NULL;
+ SbxVariable* pVar = PTR_CAST(SbxVariable,p);
+ if( pVar )
+ pPar = pVar->GetParameters();
+ if( pPar )
+ {
+ // Haben wir ein dimensioniertes Array?
+ SbxDimArray* pDimArray = PTR_CAST(SbxDimArray,p->aData.pObj);
+ if( pDimArray )
+ p = pDimArray->Get( pPar );
+ else
+ p = pArray->Get( pPar->Get( 1 )->GetInteger() );
+ break;
+ }
+ }
+ // Sonst einen SbxValue annehmen
+ SbxValue* pVal = PTR_CAST(SbxValue,p->aData.pObj);
+ if( pVal )
+ p = pVal;
+ else
+ break;
+ }
+ else
+ break;
+ }
+ return p;
+}
+
+BOOL SbxValue::Get( SbxValues& rRes ) const
+{
+ BOOL bRes = FALSE;
+ SbxError eOld = GetError();
+ if( eOld != SbxERR_OK )
+ ResetError();
+ if( !CanRead() )
+ {
+ SetError( SbxERR_PROP_WRITEONLY );
+ rRes.pObj = NULL;
+ }
+ else
+ {
+ // Falls nach einem Objekt oder einem VARIANT gefragt wird, nicht
+ // die wahren Werte suchen
+ SbxValue* p = (SbxValue*) this;
+ if( rRes.eType != SbxOBJECT && rRes.eType != SbxVARIANT )
+ p = TheRealValue();
+ if( p )
+ {
+ p->Broadcast( SBX_HINT_DATAWANTED );
+ switch( rRes.eType )
+ {
+ case SbxEMPTY:
+ case SbxVOID:
+ case SbxNULL: break;
+ case SbxVARIANT: rRes = p->aData; break;
+ case SbxINTEGER: rRes.nInteger = ImpGetInteger( &p->aData ); break;
+ case SbxLONG: rRes.nLong = ImpGetLong( &p->aData ); break;
+ case SbxSALINT64: rRes.nInt64 = ImpGetInt64( &p->aData ); break;
+ case SbxSALUINT64: rRes.uInt64 = ImpGetUInt64( &p->aData ); break;
+ case SbxSINGLE: rRes.nSingle = ImpGetSingle( &p->aData ); break;
+ case SbxDOUBLE: rRes.nDouble = ImpGetDouble( &p->aData ); break;
+ case SbxCURRENCY:rRes.nLong64 = ImpGetCurrency( &p->aData ); break;
+ case SbxDECIMAL: rRes.pDecimal = ImpGetDecimal( &p->aData ); break;
+ case SbxDATE: rRes.nDouble = ImpGetDate( &p->aData ); break;
+ case SbxBOOL:
+ rRes.nUShort = sal::static_int_cast< UINT16 >(
+ ImpGetBool( &p->aData ) );
+ break;
+ case SbxCHAR: rRes.nChar = ImpGetChar( &p->aData ); break;
+ case SbxBYTE: rRes.nByte = ImpGetByte( &p->aData ); break;
+ case SbxUSHORT: rRes.nUShort = ImpGetUShort( &p->aData ); break;
+ case SbxULONG: rRes.nULong = ImpGetULong( &p->aData ); break;
+ case SbxLPSTR:
+ case SbxSTRING: p->aPic = ImpGetString( &p->aData );
+ rRes.pOUString = &p->aPic; break;
+ case SbxCoreSTRING: p->aPic = ImpGetCoreString( &p->aData );
+ rRes.pOUString = &p->aPic; break;
+ case SbxINT:
+#if SAL_TYPES_SIZEOFINT == 2
+ rRes.nInt = (int) ImpGetInteger( &p->aData );
+#else
+ rRes.nInt = (int) ImpGetLong( &p->aData );
+#endif
+ break;
+ case SbxUINT:
+#if SAL_TYPES_SIZEOFINT == 2
+ rRes.nUInt = (int) ImpGetUShort( &p->aData );
+#else
+ rRes.nUInt = (int) ImpGetULong( &p->aData );
+#endif
+ break;
+ case SbxOBJECT:
+ if( p->aData.eType == SbxOBJECT )
+ rRes.pObj = p->aData.pObj;
+ else
+ {
+ SetError( SbxERR_NO_OBJECT );
+ rRes.pObj = NULL;
+ }
+ break;
+ default:
+ if( p->aData.eType == rRes.eType )
+ rRes = p->aData;
+ else
+ {
+ SetError( SbxERR_CONVERSION );
+ rRes.pObj = NULL;
+ }
+ }
+ }
+ else
+ {
+ // Objekt enthielt sich selbst
+ SbxDataType eTemp = rRes.eType;
+ memset( &rRes, 0, sizeof( SbxValues ) );
+ rRes.eType = eTemp;
+ }
+ }
+ if( !IsError() )
+ {
+ bRes = TRUE;
+ if( eOld != SbxERR_OK )
+ SetError( eOld );
+ }
+ return bRes;
+}
+
+BOOL SbxValue::GetNoBroadcast( SbxValues& rRes )
+{
+ USHORT nFlags_ = GetFlags();
+ SetFlag( SBX_NO_BROADCAST );
+ BOOL bRes = Get( rRes );
+ SetFlags( nFlags_ );
+ return bRes;
+}
+
+const XubString& SbxValue::GetString() const
+{
+ SbxValues aRes;
+ aRes.eType = SbxSTRING;
+ if( Get( aRes ) )
+ ((SbxValue*) this)->aToolString = *aRes.pOUString;
+ else
+ ((SbxValue*) this)->aToolString.Erase();
+
+ return aToolString;
+}
+
+const XubString& SbxValue::GetCoreString() const
+{
+ SbxValues aRes;
+ aRes.eType = SbxCoreSTRING;
+ if( Get( aRes ) )
+ ((SbxValue*) this)->aToolString = *aRes.pOUString;
+ else
+ ((SbxValue*) this)->aToolString.Erase();
+
+ return aToolString;
+}
+
+::rtl::OUString SbxValue::GetOUString() const
+{
+ ::rtl::OUString aResult;
+ SbxValues aRes;
+ aRes.eType = SbxSTRING;
+ if( Get( aRes ) )
+ aResult = *aRes.pOUString;
+
+ return aResult;
+}
+
+BOOL SbxValue::HasObject() const
+{
+ ErrCode eErr = GetError();
+ SbxValues aRes;
+ aRes.eType = SbxOBJECT;
+ Get( aRes );
+ SetError( eErr );
+ return 0 != aRes.pObj;
+}
+
+BOOL SbxValue::GetBool() const
+{
+ SbxValues aRes;
+ aRes.eType = SbxBOOL;
+ Get( aRes );
+ return BOOL( aRes.nUShort != 0 );
+}
+
+#define GET( g, e, t, m ) \
+t SbxValue::g() const { SbxValues aRes(e); Get( aRes ); return aRes.m; }
+
+GET( GetByte, SbxBYTE, BYTE, nByte )
+GET( GetChar, SbxCHAR, xub_Unicode, nChar )
+GET( GetCurrency, SbxCURRENCY, SbxINT64, nLong64 )
+GET( GetDate, SbxDATE, double, nDouble )
+GET( GetData, SbxDATAOBJECT, void*, pData )
+GET( GetDouble, SbxDOUBLE, double, nDouble )
+GET( GetErr, SbxERROR, UINT16, nUShort )
+GET( GetInt, SbxINT, int, nInt )
+GET( GetInteger, SbxINTEGER, INT16, nInteger )
+GET( GetLong, SbxLONG, INT32, nLong )
+GET( GetLong64, SbxLONG64, SbxINT64, nLong64 )
+GET( GetObject, SbxOBJECT, SbxBase*, pObj )
+GET( GetSingle, SbxSINGLE, float, nSingle )
+GET( GetULong, SbxULONG, UINT32, nULong )
+GET( GetULong64, SbxULONG64, SbxUINT64, nULong64 )
+GET( GetUShort, SbxUSHORT, UINT16, nUShort )
+GET( GetInt64, SbxSALINT64, sal_Int64, nInt64 )
+GET( GetUInt64, SbxSALUINT64, sal_uInt64, uInt64 )
+GET( GetDecimal, SbxDECIMAL, SbxDecimal*, pDecimal )
+
+
+//////////////////////////// Daten schreiben /////////////////////////////
+
+BOOL SbxValue::Put( const SbxValues& rVal )
+{
+ BOOL bRes = FALSE;
+ SbxError eOld = GetError();
+ if( eOld != SbxERR_OK )
+ ResetError();
+ if( !CanWrite() )
+ SetError( SbxERR_PROP_READONLY );
+ else if( rVal.eType & 0xF000 )
+ SetError( SbxERR_NOTIMP );
+ else
+ {
+ // Falls nach einem Objekt gefragt wird, nicht
+ // die wahren Werte suchen
+ SbxValue* p = this;
+ if( rVal.eType != SbxOBJECT )
+ p = TheRealValue( FALSE ); // #55226 Hier keinen Fehler erlauben
+ if( p )
+ {
+ if( !p->CanWrite() )
+ SetError( SbxERR_PROP_READONLY );
+ else if( p->IsFixed() || p->SetType( (SbxDataType) ( rVal.eType & 0x0FFF ) ) )
+ switch( rVal.eType & 0x0FFF )
+ {
+ case SbxEMPTY:
+ case SbxVOID:
+ case SbxNULL: break;
+ case SbxINTEGER: ImpPutInteger( &p->aData, rVal.nInteger ); break;
+ case SbxLONG: ImpPutLong( &p->aData, rVal.nLong ); break;
+ case SbxSALINT64: ImpPutInt64( &p->aData, rVal.nInt64 ); break;
+ case SbxSALUINT64: ImpPutUInt64( &p->aData, rVal.uInt64 ); break;
+ case SbxSINGLE: ImpPutSingle( &p->aData, rVal.nSingle ); break;
+ case SbxDOUBLE: ImpPutDouble( &p->aData, rVal.nDouble ); break;
+ case SbxCURRENCY: ImpPutCurrency( &p->aData, rVal.nLong64 ); break;
+ case SbxDECIMAL: ImpPutDecimal( &p->aData, rVal.pDecimal ); break;
+ case SbxDATE: ImpPutDate( &p->aData, rVal.nDouble ); break;
+ case SbxBOOL: ImpPutBool( &p->aData, rVal.nInteger ); break;
+ case SbxCHAR: ImpPutChar( &p->aData, rVal.nChar ); break;
+ case SbxBYTE: ImpPutByte( &p->aData, rVal.nByte ); break;
+ case SbxUSHORT: ImpPutUShort( &p->aData, rVal.nUShort ); break;
+ case SbxULONG: ImpPutULong( &p->aData, rVal.nULong ); break;
+ case SbxLPSTR:
+ case SbxSTRING: ImpPutString( &p->aData, rVal.pOUString ); break;
+ case SbxINT:
+#if SAL_TYPES_SIZEOFINT == 2
+ ImpPutInteger( &p->aData, (INT16) rVal.nInt );
+#else
+ ImpPutLong( &p->aData, (INT32) rVal.nInt );
+#endif
+ break;
+ case SbxUINT:
+#if SAL_TYPES_SIZEOFINT == 2
+ ImpPutUShort( &p->aData, (UINT16) rVal.nUInt );
+#else
+ ImpPutULong( &p->aData, (UINT32) rVal.nUInt );
+#endif
+ break;
+ case SbxOBJECT:
+ if( !p->IsFixed() || p->aData.eType == SbxOBJECT )
+ {
+ // ist schon drin
+ if( p->aData.eType == SbxOBJECT && p->aData.pObj == rVal.pObj )
+ break;
+
+ // Nur den Werteteil loeschen!
+ p->SbxValue::Clear();
+
+ // eingentliche Zuweisung
+ p->aData.pObj = rVal.pObj;
+
+ // ggf. Ref-Count mitzaehlen
+ if( p->aData.pObj && p->aData.pObj != p )
+ {
+ if ( p != this )
+ {
+ DBG_ERROR( "TheRealValue" );
+ }
+ HACK(nicht bei Parent-Prop - sonst CyclicRef)
+ SbxVariable *pThisVar = PTR_CAST(SbxVariable, this);
+ BOOL bParentProp = pThisVar && 5345 ==
+ ( (INT16) ( pThisVar->GetUserData() & 0xFFFF ) );
+ if ( !bParentProp )
+ p->aData.pObj->AddRef();
+ }
+ }
+ else
+ SetError( SbxERR_CONVERSION );
+ break;
+ default:
+ if( p->aData.eType == rVal.eType )
+ p->aData = rVal;
+ else
+ {
+ SetError( SbxERR_CONVERSION );
+ if( !p->IsFixed() )
+ p->aData.eType = SbxNULL;
+ }
+ }
+ if( !IsError() )
+ {
+ p->SetModified( TRUE );
+ p->Broadcast( SBX_HINT_DATACHANGED );
+ if( eOld != SbxERR_OK )
+ SetError( eOld );
+ bRes = TRUE;
+ }
+ }
+ }
+ return bRes;
+}
+
+// AB, 28.3.96:
+// Methode, um bei speziellen Typen eine Vorbehandlung des Strings
+// durchzufuehren. Insbesondere erforderlich fuer BASIC-IDE, damit
+// die Ausgaben im Watch-Fenster mit PutStringExt zurueckgeschrieben
+// werden koennen, wenn Floats mit ',' als Dezimaltrenner oder BOOLs
+// explizit mit "TRUE" oder "FALSE" angegeben werden.
+// Implementierung in ImpConvStringExt (SBXSCAN.CXX)
+BOOL SbxValue::PutStringExt( const ::rtl::OUString& r )
+{
+ // Kopieren, bei Unicode gleich konvertieren
+ ::rtl::OUString aStr( r );
+
+ // Eigenen Typ bestimmen (nicht wie in Put() mit TheRealValue(),
+ // Objekte werden sowieso nicht behandelt)
+ SbxDataType eTargetType = SbxDataType( aData.eType & 0x0FFF );
+
+ // Source-Value basteln
+ SbxValues aRes;
+ aRes.eType = SbxSTRING;
+
+ // Nur, wenn wirklich was konvertiert wurde, Kopie nehmen,
+ // sonst Original (Unicode bleibt erhalten)
+ BOOL bRet;
+ if( ImpConvStringExt( aStr, eTargetType ) )
+ aRes.pOUString = (::rtl::OUString*)&aStr;
+ else
+ aRes.pOUString = (::rtl::OUString*)&r;
+
+ // #34939: Bei Strings. die eine Zahl enthalten und wenn this einen
+ // Num-Typ hat, Fixed-Flag setzen, damit der Typ nicht veraendert wird
+ USHORT nFlags_ = GetFlags();
+ if( ( eTargetType >= SbxINTEGER && eTargetType <= SbxCURRENCY ) ||
+ ( eTargetType >= SbxCHAR && eTargetType <= SbxUINT ) ||
+ eTargetType == SbxBOOL )
+ {
+ SbxValue aVal;
+ aVal.Put( aRes );
+ if( aVal.IsNumeric() )
+ SetFlag( SBX_FIXED );
+ }
+
+ Put( aRes );
+ bRet = BOOL( !IsError() );
+
+ // Falls das mit dem FIXED einen Error gegeben hat, zuruecksetzen
+ // (UI-Aktion sollte keinen Error ergeben, sondern nur scheitern)
+ if( !bRet )
+ ResetError();
+
+ SetFlags( nFlags_ );
+ return bRet;
+}
+
+BOOL SbxValue::PutString( const xub_Unicode* p )
+{
+ ::rtl::OUString aVal( p );
+ SbxValues aRes;
+ aRes.eType = SbxSTRING;
+ aRes.pOUString = &aVal;
+ Put( aRes );
+ return BOOL( !IsError() );
+}
+
+BOOL SbxValue::PutBool( BOOL b )
+{
+ SbxValues aRes;
+ aRes.eType = SbxBOOL;
+ aRes.nUShort = sal::static_int_cast< UINT16 >(b ? SbxTRUE : SbxFALSE);
+ Put( aRes );
+ return BOOL( !IsError() );
+}
+
+BOOL SbxValue::PutEmpty()
+{
+ BOOL bRet = SetType( SbxEMPTY );
+ SetModified( TRUE );
+ return bRet;
+}
+
+BOOL SbxValue::PutNull()
+{
+ BOOL bRet = SetType( SbxNULL );
+ if( bRet )
+ SetModified( TRUE );
+ return bRet;
+}
+
+
+// Special decimal methods
+BOOL SbxValue::PutDecimal( com::sun::star::bridge::oleautomation::Decimal& rAutomationDec )
+{
+ SbxValue::Clear();
+ aData.pDecimal = new SbxDecimal( rAutomationDec );
+ aData.pDecimal->addRef();
+ aData.eType = SbxDECIMAL;
+ return TRUE;
+}
+
+BOOL SbxValue::fillAutomationDecimal
+ ( com::sun::star::bridge::oleautomation::Decimal& rAutomationDec )
+{
+ SbxDecimal* pDecimal = GetDecimal();
+ if( pDecimal != NULL )
+ {
+ pDecimal->fillAutomationDecimal( rAutomationDec );
+ return TRUE;
+ }
+ return FALSE;
+}
+
+
+BOOL SbxValue::PutpChar( const xub_Unicode* p )
+{
+ ::rtl::OUString aVal( p );
+ SbxValues aRes;
+ aRes.eType = SbxLPSTR;
+ aRes.pOUString = &aVal;
+ Put( aRes );
+ return BOOL( !IsError() );
+}
+
+BOOL SbxValue::PutString( const ::rtl::OUString& r )
+{
+ SbxValues aRes;
+ aRes.eType = SbxSTRING;
+ aRes.pOUString = (::rtl::OUString*) &r;
+ Put( aRes );
+ return BOOL( !IsError() );
+}
+
+
+#define PUT( p, e, t, m ) \
+BOOL SbxValue::p( t n ) \
+{ SbxValues aRes(e); aRes.m = n; Put( aRes ); return BOOL( !IsError() ); }
+
+PUT( PutByte, SbxBYTE, BYTE, nByte )
+PUT( PutChar, SbxCHAR, xub_Unicode, nChar )
+PUT( PutCurrency, SbxCURRENCY, const SbxINT64&, nLong64 )
+PUT( PutDate, SbxDATE, double, nDouble )
+PUT( PutData, SbxDATAOBJECT, void*, pData )
+PUT( PutDouble, SbxDOUBLE, double, nDouble )
+PUT( PutErr, SbxERROR, UINT16, nUShort )
+PUT( PutInt, SbxINT, int, nInt )
+PUT( PutInteger, SbxINTEGER, INT16, nInteger )
+PUT( PutLong, SbxLONG, INT32, nLong )
+PUT( PutLong64, SbxLONG64, const SbxINT64&, nLong64 )
+PUT( PutObject, SbxOBJECT, SbxBase*, pObj )
+PUT( PutSingle, SbxSINGLE, float, nSingle )
+PUT( PutULong, SbxULONG, UINT32, nULong )
+PUT( PutULong64, SbxULONG64, const SbxUINT64&, nULong64 )
+PUT( PutUShort, SbxUSHORT, UINT16, nUShort )
+PUT( PutInt64, SbxSALINT64, sal_Int64, nInt64 )
+PUT( PutUInt64, SbxSALUINT64, sal_uInt64, uInt64 )
+PUT( PutDecimal, SbxDECIMAL, SbxDecimal*, pDecimal )
+
+
+////////////////////////// Setzen des Datentyps ///////////////////////////
+
+BOOL SbxValue::IsFixed() const
+{
+ return ( (GetFlags() & SBX_FIXED) | (aData.eType & SbxBYREF) ) != 0;
+}
+
+// Eine Variable ist numerisch, wenn sie EMPTY oder wirklich numerisch ist
+// oder einen vollstaendig konvertierbaren String enthaelt
+
+// #41692, fuer RTL und Basic-Core getrennt implementieren
+BOOL SbxValue::IsNumeric() const
+{
+ return ImpIsNumeric( /*bOnlyIntntl*/FALSE );
+}
+
+BOOL SbxValue::IsNumericRTL() const
+{
+ return ImpIsNumeric( /*bOnlyIntntl*/TRUE );
+}
+
+BOOL SbxValue::ImpIsNumeric( BOOL bOnlyIntntl ) const
+{
+
+ if( !CanRead() )
+ {
+ SetError( SbxERR_PROP_WRITEONLY ); return FALSE;
+ }
+ // Downcast pruefen!!!
+ if( this->ISA(SbxVariable) )
+ ((SbxVariable*)this)->Broadcast( SBX_HINT_DATAWANTED );
+ SbxDataType t = GetType();
+ if( t == SbxSTRING )
+ {
+ if( aData.pOUString )
+ {
+ ::rtl::OUString s( *aData.pOUString );
+ double n;
+ SbxDataType t2;
+ USHORT nLen = 0;
+ if( ImpScan( s, n, t2, &nLen, /*bAllowIntntl*/FALSE, bOnlyIntntl ) == SbxERR_OK )
+ return BOOL( nLen == s.getLength() );
+ }
+ return FALSE;
+ }
+ else
+ return BOOL( t == SbxEMPTY
+ || ( t >= SbxINTEGER && t <= SbxCURRENCY )
+ || ( t >= SbxCHAR && t <= SbxUINT ) );
+}
+
+SbxClassType SbxValue::GetClass() const
+{
+ return SbxCLASS_VALUE;
+}
+
+SbxDataType SbxValue::GetType() const
+{
+ return SbxDataType( aData.eType & 0x0FFF );
+}
+
+SbxDataType SbxValue::GetFullType() const
+{
+ return aData.eType;
+}
+
+BOOL SbxValue::SetType( SbxDataType t )
+{
+ DBG_ASSERT( !( t & 0xF000 ), "Setzen von BYREF|ARRAY verboten!" );
+ if( ( t == SbxEMPTY && aData.eType == SbxVOID )
+ || ( aData.eType == SbxEMPTY && t == SbxVOID ) )
+ return TRUE;
+ if( ( t & 0x0FFF ) == SbxVARIANT )
+ {
+ // Versuch, den Datentyp auf Variant zu setzen
+ ResetFlag( SBX_FIXED );
+ if( IsFixed() )
+ {
+ SetError( SbxERR_CONVERSION ); return FALSE;
+ }
+ t = SbxEMPTY;
+ }
+ if( ( t & 0x0FFF ) != ( aData.eType & 0x0FFF ) )
+ {
+ if( !CanWrite() || IsFixed() )
+ {
+ SetError( SbxERR_CONVERSION ); return FALSE;
+ }
+ else
+ {
+ // Eventuelle Objekte freigeben
+ switch( aData.eType )
+ {
+ case SbxSTRING:
+ delete aData.pOUString;
+ break;
+ case SbxOBJECT:
+ if( aData.pObj && aData.pObj != this )
+ {
+ HACK(nicht bei Parent-Prop - sonst CyclicRef)
+ SbxVariable *pThisVar = PTR_CAST(SbxVariable, this);
+ UINT16 nSlotId = pThisVar
+ ? ( (INT16) ( pThisVar->GetUserData() & 0xFFFF ) )
+ : 0;
+ DBG_ASSERT( nSlotId != 5345 || pThisVar->GetName() == UniString::CreateFromAscii( "Parent" ),
+ "SID_PARENTOBJECT heisst nicht 'Parent'" );
+ BOOL bParentProp = 5345 == nSlotId;
+ if ( !bParentProp )
+ aData.pObj->ReleaseRef();
+ }
+ break;
+ default: break;
+ }
+ // Das klappt immer, da auch die Float-Repraesentationen 0 sind.
+ memset( &aData, 0, sizeof( SbxValues ) );
+ aData.eType = t;
+ }
+ }
+ return TRUE;
+}
+
+BOOL SbxValue::Convert( SbxDataType eTo )
+{
+ eTo = SbxDataType( eTo & 0x0FFF );
+ if( ( aData.eType & 0x0FFF ) == eTo )
+ return TRUE;
+ if( !CanWrite() )
+ return FALSE;
+ if( eTo == SbxVARIANT )
+ {
+ // Versuch, den Datentyp auf Variant zu setzen
+ ResetFlag( SBX_FIXED );
+ if( IsFixed() )
+ {
+ SetError( SbxERR_CONVERSION ); return FALSE;
+ }
+ else
+ return TRUE;
+ }
+ // Convert from Null geht niemals. Einmal Null, immer Null!
+ if( aData.eType == SbxNULL )
+ {
+ SetError( SbxERR_CONVERSION ); return FALSE;
+ }
+
+ // Konversion der Daten:
+ SbxValues aNew;
+ aNew.eType = eTo;
+ if( Get( aNew ) )
+ {
+ // Der Datentyp konnte konvertiert werden. Bei Fixed-Elementen
+ // ist hier Ende, da die Daten nicht uebernommen zu werden brauchen
+ if( !IsFixed() )
+ {
+ SetType( eTo );
+ Put( aNew );
+ SetModified( TRUE );
+ }
+ Broadcast( SBX_HINT_CONVERTED );
+ return TRUE;
+ }
+ else
+ return FALSE;
+}
+////////////////////////////////// Rechnen /////////////////////////////////
+
+BOOL SbxValue::Compute( SbxOperator eOp, const SbxValue& rOp )
+{
+ bool bVBAInterop = SbiRuntime::isVBAEnabled();
+
+ SbxDataType eThisType = GetType();
+ SbxDataType eOpType = rOp.GetType();
+ SbxError eOld = GetError();
+ if( eOld != SbxERR_OK )
+ ResetError();
+ if( !CanWrite() )
+ SetError( SbxERR_PROP_READONLY );
+ else if( !rOp.CanRead() )
+ SetError( SbxERR_PROP_WRITEONLY );
+ // Sonderregel 1: Ist ein Operand Null, ist das Ergebnis Null
+ else if( eThisType == SbxNULL || eOpType == SbxNULL )
+ SetType( SbxNULL );
+ // Sonderregel 2: Ist ein Operand Empty, ist das Ergebnis der 2. Operand
+ else if( eThisType == SbxEMPTY
+ && !bVBAInterop
+ )
+ *this = rOp;
+ // 13.2.96: Nicht schon vor Get auf SbxEMPTY pruefen
+ else
+ {
+ SbxValues aL, aR;
+ bool bDecimal = false;
+ if( bVBAInterop && ( ( eThisType == SbxSTRING && eOpType != SbxSTRING ) ||
+ ( eThisType != SbxSTRING && eOpType == SbxSTRING ) ) &&
+ ( eOp == SbxMUL || eOp == SbxDIV || eOp == SbxPLUS || eOp == SbxMINUS ) )
+ {
+ goto Lbl_OpIsDouble;
+ }
+ else if( eThisType == SbxSTRING || eOp == SbxCAT || ( bVBAInterop && ( eOpType == SbxSTRING ) && ( eOp == SbxPLUS ) ) )
+ {
+ if( eOp == SbxCAT || eOp == SbxPLUS )
+ {
+ // AB 5.11.1999, OUString beruecksichtigen
+ aL.eType = aR.eType = SbxSTRING;
+ rOp.Get( aR );
+ // AB 8.12.1999, #70399: Hier wieder GetType() rufen, Get() kann Typ aendern!
+ if( rOp.GetType() == SbxEMPTY )
+ goto Lbl_OpIsEmpty;
+ Get( aL );
+
+ // #30576: Erstmal testen, ob Wandlung geklappt hat
+ if( aL.pOUString != NULL && aR.pOUString != NULL )
+ {
+ *aL.pOUString += *aR.pOUString;
+ }
+ // Nicht einmal Left OK?
+ else if( aL.pOUString == NULL )
+ {
+ aL.pOUString = new ::rtl::OUString();
+ }
+ Put( aL );
+ }
+ else
+ SetError( SbxERR_CONVERSION );
+ }
+ else if( eOpType == SbxSTRING && rOp.IsFixed() )
+ { // Numerisch: rechts darf kein String stehen
+ SetError( SbxERR_CONVERSION );
+ }
+ else if( ( eOp >= SbxIDIV && eOp <= SbxNOT ) || eOp == SbxMOD )
+ {
+ if( GetType() == eOpType )
+ {
+ if( GetType() == SbxULONG64
+ || GetType() == SbxLONG64
+ || GetType() == SbxCURRENCY
+ || GetType() == SbxULONG )
+ aL.eType = aR.eType = GetType();
+// else if( GetType() == SbxDouble || GetType() == SbxSingle )
+// aL.eType = aR.eType = SbxLONG64;
+ else
+ aL.eType = aR.eType = SbxLONG;
+ }
+ else if( GetType() == SbxCURRENCY || eOpType == SbxCURRENCY
+ || GetType() == SbxULONG64 || eOpType == SbxULONG64
+ || GetType() == SbxLONG64 || eOpType == SbxLONG64 )
+ aL.eType = aR.eType = SbxLONG64;
+// else if( GetType() == SbxDouble || rOP.GetType() == SbxDouble
+// || GetType() == SbxSingle || rOP.GetType() == SbxSingle )
+// aL.eType = aR.eType = SbxLONG64;
+ else
+ aL.eType = aR.eType = SbxLONG;
+
+ if( rOp.Get( aR ) )
+ {
+ if( rOp.GetType() == SbxEMPTY )
+ {
+ if ( !bVBAInterop || ( bVBAInterop && ( eOp != SbxNOT ) ) )
+ goto Lbl_OpIsEmpty;
+ }
+ if( Get( aL ) ) switch( eOp )
+ {
+ case SbxIDIV:
+ if( aL.eType == SbxCURRENCY )
+ aL.eType = SbxLONG64;
+ if( aL.eType == SbxLONG64 )
+ if( !aR.nLong64 ) SetError( SbxERR_ZERODIV );
+ else aL.nLong64 /= aR.nLong64;
+ else if( aL.eType == SbxULONG64 )
+ if( !aR.nULong64 ) SetError( SbxERR_ZERODIV );
+ else aL.nULong64 /= aR.nULong64;
+ else if( aL.eType == SbxLONG )
+ if( !aR.nLong ) SetError( SbxERR_ZERODIV );
+ else aL.nLong /= aR.nLong;
+ else
+ if( !aR.nULong ) SetError( SbxERR_ZERODIV );
+ else aL.nULong /= aR.nULong;
+ break;
+ case SbxMOD:
+ if( aL.eType == SbxCURRENCY )
+ aL.eType = SbxLONG64;
+ if( aL.eType == SbxLONG64 )
+ if( !aR.nLong64 ) SetError( SbxERR_ZERODIV );
+ else aL.nLong64 %= aR.nLong64;
+ else if( aL.eType == SbxULONG64 )
+ if( !aR.nULong64 ) SetError( SbxERR_ZERODIV );
+ else aL.nULong64 %= aR.nULong64;
+ else if( aL.eType == SbxLONG )
+ if( !aR.nLong ) SetError( SbxERR_ZERODIV );
+ else aL.nLong %= aR.nLong;
+ else
+ if( !aR.nULong ) SetError( SbxERR_ZERODIV );
+ else aL.nULong %= aR.nULong;
+ break;
+ case SbxAND:
+ if( aL.eType != SbxLONG && aL.eType != SbxULONG )
+ aL.nLong64 &= aR.nLong64;
+ else
+ aL.nLong &= aR.nLong;
+ break;
+ case SbxOR:
+ if( aL.eType != SbxLONG && aL.eType != SbxULONG )
+ aL.nLong64 |= aR.nLong64;
+ else
+ aL.nLong |= aR.nLong;
+ break;
+ case SbxXOR:
+ if( aL.eType != SbxLONG && aL.eType != SbxULONG )
+ aL.nLong64 ^= aR.nLong64;
+ else
+ aL.nLong ^= aR.nLong;
+ break;
+ case SbxEQV:
+ if( aL.eType != SbxLONG && aL.eType != SbxULONG )
+ aL.nLong64 = (aL.nLong64 & aR.nLong64) | (~aL.nLong64 & ~aR.nLong64);
+ else
+ aL.nLong = (aL.nLong & aR.nLong) | (~aL.nLong & ~aR.nLong);
+ break;
+ case SbxIMP:
+ if( aL.eType != SbxLONG && aL.eType != SbxULONG )
+ aL.nLong64 = ~aL.nLong64 | aR.nLong64;
+ else
+ aL.nLong = ~aL.nLong | aR.nLong;
+ break;
+ case SbxNOT:
+ if( aL.eType != SbxLONG && aL.eType != SbxULONG )
+ aL.nLong64 = ~aL.nLong64;
+ else
+ aL.nLong = ~aL.nLong;
+ break;
+ default: break;
+ }
+ }
+ }
+ else if( ( GetType() == SbxDECIMAL || rOp.GetType() == SbxDECIMAL ) &&
+ ( eOp == SbxMUL || eOp == SbxDIV || eOp == SbxPLUS || eOp == SbxMINUS || eOp == SbxNEG ) )
+ {
+ aL.eType = aR.eType = SbxDECIMAL;
+ bDecimal = true;
+ if( rOp.Get( aR ) )
+ {
+ if( rOp.GetType() == SbxEMPTY )
+ {
+ releaseDecimalPtr( aL.pDecimal );
+ goto Lbl_OpIsEmpty;
+ }
+ if( Get( aL ) )
+ {
+ if( aL.pDecimal && aR.pDecimal )
+ {
+ bool bOk = true;
+ switch( eOp )
+ {
+ case SbxMUL:
+ bOk = ( *(aL.pDecimal) *= *(aR.pDecimal) );
+ break;
+ case SbxDIV:
+ if( aR.pDecimal->isZero() )
+ SetError( SbxERR_ZERODIV );
+ else
+ bOk = ( *(aL.pDecimal) /= *(aR.pDecimal) );
+ break;
+ case SbxPLUS:
+ bOk = ( *(aL.pDecimal) += *(aR.pDecimal) );
+ break;
+ case SbxMINUS:
+ bOk = ( *(aL.pDecimal) -= *(aR.pDecimal) );
+ break;
+ case SbxNEG:
+ bOk = ( aL.pDecimal->neg() );
+ break;
+ default:
+ SetError( SbxERR_NOTIMP );
+ }
+ if( !bOk )
+ SetError( SbxERR_OVERFLOW );
+ }
+ else
+ {
+ SetError( SbxERR_CONVERSION );
+ }
+ }
+ }
+ }
+ else if( GetType() == SbxCURRENCY || rOp.GetType() == SbxCURRENCY )
+ {
+ aL.eType = SbxCURRENCY;
+ aR.eType = SbxCURRENCY;
+
+ if( rOp.Get( aR ) )
+ {
+ static BigInt n10K( 10000 );
+
+ if( rOp.GetType() == SbxEMPTY )
+ goto Lbl_OpIsEmpty;
+
+ if( Get( aL ) ) switch( eOp )
+ {
+ case SbxMUL:
+ {
+ // #i20704 Implement directly
+ BigInt b1( aL.nLong64 );
+ BigInt b2( aR.nLong64 );
+ b1 *= b2;
+ b1 /= n10K;
+ double d = double( b1 ) / 10000.0;
+ if( d > SbxMAXCURR || d < SbxMINCURR )
+ SetError( SbxERR_OVERFLOW );
+ else
+ b1.INT64( &aL.nLong64 );
+ break;
+ }
+ case SbxDIV:
+ if( !aR.nLong64 )
+ {
+ SetError( SbxERR_ZERODIV );
+ }
+ else
+ {
+ // #i20704 Implement directly
+ BigInt b1( aL.nLong64 );
+ BigInt b2( aR.nLong64 );
+ b1 *= n10K;
+ b1 /= b2;
+ double d = double( b1 ) / 10000.0;
+ if( d > SbxMAXCURR || d < SbxMINCURR )
+ SetError( SbxERR_OVERFLOW );
+ else
+ b1.INT64( &aL.nLong64 );
+ }
+ break;
+ case SbxPLUS:
+ aL.nLong64 += aR.nLong64; break;
+ case SbxMINUS:
+ aL.nLong64 -= aR.nLong64; break;
+ case SbxNEG:
+ aL.nLong64 = -aL.nLong64; break;
+ default:
+ SetError( SbxERR_NOTIMP );
+ }
+ }
+ }
+ else
+Lbl_OpIsDouble:
+ { // Andere Operatoren
+ aL.eType = aR.eType = SbxDOUBLE;
+ if( rOp.Get( aR ) )
+ {
+ if( rOp.GetType() == SbxEMPTY )
+ {
+ if ( !bVBAInterop || ( bVBAInterop && ( eOp != SbxNEG ) ) )
+ goto Lbl_OpIsEmpty;
+ }
+ if( Get( aL ) )
+ {
+ switch( eOp )
+ {
+ case SbxEXP:
+ aL.nDouble = pow( aL.nDouble, aR.nDouble );
+ break;
+ case SbxMUL:
+ aL.nDouble *= aR.nDouble; break;
+ case SbxDIV:
+ if( !aR.nDouble ) SetError( SbxERR_ZERODIV );
+ else aL.nDouble /= aR.nDouble; break;
+ case SbxPLUS:
+ aL.nDouble += aR.nDouble; break;
+ case SbxMINUS:
+ aL.nDouble -= aR.nDouble; break;
+ case SbxNEG:
+ aL.nDouble = -aL.nDouble; break;
+ default:
+ SetError( SbxERR_NOTIMP );
+ }
+
+ // #45465 Date braucht bei + eine Spezial-Behandlung
+ if( eOp == SbxPLUS && (GetType() == SbxDATE || rOp.GetType() == SbxDATE ) )
+ aL.eType = SbxDATE;
+ }
+ }
+
+ }
+ if( !IsError() )
+ Put( aL );
+ if( bDecimal )
+ {
+ releaseDecimalPtr( aL.pDecimal );
+ releaseDecimalPtr( aR.pDecimal );
+ }
+ }
+Lbl_OpIsEmpty:
+
+ BOOL bRes = BOOL( !IsError() );
+ if( bRes && eOld != SbxERR_OK )
+ SetError( eOld );
+ return bRes;
+}
+
+// Die Vergleichs-Routine liefert TRUE oder FALSE.
+
+BOOL SbxValue::Compare( SbxOperator eOp, const SbxValue& rOp ) const
+{
+ bool bVBAInterop = SbiRuntime::isVBAEnabled();
+
+ BOOL bRes = FALSE;
+ SbxError eOld = GetError();
+ if( eOld != SbxERR_OK )
+ ResetError();
+ if( !CanRead() || !rOp.CanRead() )
+ SetError( SbxERR_PROP_WRITEONLY );
+ else if( GetType() == SbxNULL && rOp.GetType() == SbxNULL && !bVBAInterop )
+ {
+ bRes = TRUE;
+ }
+ else if( GetType() == SbxEMPTY && rOp.GetType() == SbxEMPTY )
+ bRes = !bVBAInterop ? TRUE : ( eOp == SbxEQ ? TRUE : FALSE );
+ // Sonderregel 1: Ist ein Operand Null, ist das Ergebnis FALSE
+ else if( GetType() == SbxNULL || rOp.GetType() == SbxNULL )
+ bRes = FALSE;
+ // Sonderregel 2: Wenn beide Variant sind und einer ist numerisch,
+ // und der andere ein String, ist num < str
+ else if( !IsFixed() && !rOp.IsFixed()
+ && ( rOp.GetType() == SbxSTRING && GetType() != SbxSTRING && IsNumeric() ) && !bVBAInterop
+ )
+ bRes = BOOL( eOp == SbxLT || eOp == SbxLE || eOp == SbxNE );
+ else if( !IsFixed() && !rOp.IsFixed()
+ && ( GetType() == SbxSTRING && rOp.GetType() != SbxSTRING && rOp.IsNumeric() )
+&& !bVBAInterop
+ )
+ bRes = BOOL( eOp == SbxGT || eOp == SbxGE || eOp == SbxNE );
+ else
+ {
+ SbxValues aL, aR;
+ // Wenn einer der Operanden ein String ist,
+ // findet ein Stringvergleich statt
+ if( GetType() == SbxSTRING || rOp.GetType() == SbxSTRING )
+ {
+ aL.eType = aR.eType = SbxSTRING;
+ if( Get( aL ) && rOp.Get( aR ) ) switch( eOp )
+ {
+ case SbxEQ:
+ bRes = BOOL( *aL.pOUString == *aR.pOUString ); break;
+ case SbxNE:
+ bRes = BOOL( *aL.pOUString != *aR.pOUString ); break;
+ case SbxLT:
+ bRes = BOOL( *aL.pOUString < *aR.pOUString ); break;
+ case SbxGT:
+ bRes = BOOL( *aL.pOUString > *aR.pOUString ); break;
+ case SbxLE:
+ bRes = BOOL( *aL.pOUString <= *aR.pOUString ); break;
+ case SbxGE:
+ bRes = BOOL( *aL.pOUString >= *aR.pOUString ); break;
+ default:
+ SetError( SbxERR_NOTIMP );
+ }
+ }
+ // AB 19.12.95: Wenn SbxSINGLE beteiligt, auf SINGLE konvertieren,
+ // sonst gibt es numerische Fehler
+ else if( GetType() == SbxSINGLE || rOp.GetType() == SbxSINGLE )
+ {
+ aL.eType = aR.eType = SbxSINGLE;
+ if( Get( aL ) && rOp.Get( aR ) )
+ switch( eOp )
+ {
+ case SbxEQ:
+ bRes = BOOL( aL.nSingle == aR.nSingle ); break;
+ case SbxNE:
+ bRes = BOOL( aL.nSingle != aR.nSingle ); break;
+ case SbxLT:
+ bRes = BOOL( aL.nSingle < aR.nSingle ); break;
+ case SbxGT:
+ bRes = BOOL( aL.nSingle > aR.nSingle ); break;
+ case SbxLE:
+ bRes = BOOL( aL.nSingle <= aR.nSingle ); break;
+ case SbxGE:
+ bRes = BOOL( aL.nSingle >= aR.nSingle ); break;
+ default:
+ SetError( SbxERR_NOTIMP );
+ }
+ }
+ else if( GetType() == SbxDECIMAL && rOp.GetType() == SbxDECIMAL )
+ {
+ aL.eType = aR.eType = SbxDECIMAL;
+ Get( aL );
+ rOp.Get( aR );
+ if( aL.pDecimal && aR.pDecimal )
+ {
+ SbxDecimal::CmpResult eRes = compare( *aL.pDecimal, *aR.pDecimal );
+ switch( eOp )
+ {
+ case SbxEQ:
+ bRes = BOOL( eRes == SbxDecimal::EQ ); break;
+ case SbxNE:
+ bRes = BOOL( eRes != SbxDecimal::EQ ); break;
+ case SbxLT:
+ bRes = BOOL( eRes == SbxDecimal::LT ); break;
+ case SbxGT:
+ bRes = BOOL( eRes == SbxDecimal::GT ); break;
+ case SbxLE:
+ bRes = BOOL( eRes != SbxDecimal::GT ); break;
+ case SbxGE:
+ bRes = BOOL( eRes != SbxDecimal::LT ); break;
+ default:
+ SetError( SbxERR_NOTIMP );
+ }
+ }
+ else
+ {
+ SetError( SbxERR_CONVERSION );
+ }
+ releaseDecimalPtr( aL.pDecimal );
+ releaseDecimalPtr( aR.pDecimal );
+ }
+ // Alles andere auf SbxDOUBLE-Basis vergleichen
+ else
+ {
+ aL.eType = aR.eType = SbxDOUBLE;
+ //if( Get( aL ) && rOp.Get( aR ) )
+ bool bGetL = Get( aL );
+ bool bGetR = rOp.Get( aR );
+ if( bGetL && bGetR )
+ switch( eOp )
+ {
+ case SbxEQ:
+ bRes = BOOL( aL.nDouble == aR.nDouble ); break;
+ case SbxNE:
+ bRes = BOOL( aL.nDouble != aR.nDouble ); break;
+ case SbxLT:
+ bRes = BOOL( aL.nDouble < aR.nDouble ); break;
+ case SbxGT:
+ bRes = BOOL( aL.nDouble > aR.nDouble ); break;
+ case SbxLE:
+ bRes = BOOL( aL.nDouble <= aR.nDouble ); break;
+ case SbxGE:
+ bRes = BOOL( aL.nDouble >= aR.nDouble ); break;
+ default:
+ SetError( SbxERR_NOTIMP );
+ }
+ // at least one value was got
+ // if this is VBA then a conversion error for one
+ // side will yield a false result of an equality test
+ else if ( bGetR || bGetL )
+ {
+ if ( bVBAInterop && eOp == SbxEQ && GetError() == SbxERR_CONVERSION )
+ {
+ ResetError();
+ bRes = FALSE;
+ }
+ }
+ }
+ }
+ if( eOld != SbxERR_OK )
+ SetError( eOld );
+ return bRes;
+}
+
+///////////////////////////// Lesen/Schreiben ////////////////////////////
+
+BOOL SbxValue::LoadData( SvStream& r, USHORT )
+{
+ SbxValue::Clear();
+ UINT16 nType;
+ r >> nType;
+ aData.eType = SbxDataType( nType );
+ switch( nType )
+ {
+ case SbxBOOL:
+ case SbxINTEGER:
+ r >> aData.nInteger; break;
+ case SbxLONG:
+ r >> aData.nLong; break;
+ case SbxSINGLE:
+ {
+ // Floats als ASCII
+ XubString aVal;
+ r.ReadByteString( aVal, RTL_TEXTENCODING_ASCII_US );
+ double d;
+ SbxDataType t;
+ if( ImpScan( aVal, d, t, NULL ) != SbxERR_OK || t == SbxDOUBLE )
+ {
+ aData.nSingle = 0.0F;
+ return FALSE;
+ }
+ aData.nSingle = (float) d;
+ break;
+ }
+ case SbxDATE:
+ case SbxDOUBLE:
+ {
+ // Floats als ASCII
+ XubString aVal;
+ r.ReadByteString( aVal, RTL_TEXTENCODING_ASCII_US );
+ SbxDataType t;
+ if( ImpScan( aVal, aData.nDouble, t, NULL ) != SbxERR_OK )
+ {
+ aData.nDouble = 0.0;
+ return FALSE;
+ }
+ break;
+ }
+ case SbxULONG64:
+ {
+ r >> aData.nULong64.nHigh >> aData.nULong64.nLow;
+ break;
+ }
+ case SbxLONG64:
+ case SbxCURRENCY:
+ {
+ r >> aData.nLong64.nHigh >> aData.nLong64.nLow;
+ break;
+ }
+ case SbxSTRING:
+ {
+ XubString aVal;
+ r.ReadByteString( aVal, RTL_TEXTENCODING_ASCII_US );
+ if( aVal.Len() )
+ aData.pOUString = new ::rtl::OUString( aVal );
+ else
+ aData.pOUString = NULL; // JSM 22.09.1995
+ break;
+ }
+ case SbxERROR:
+ case SbxUSHORT:
+ r >> aData.nUShort; break;
+ case SbxOBJECT:
+ {
+ BYTE nMode;
+ r >> nMode;
+ switch( nMode )
+ {
+ case 0:
+ aData.pObj = NULL;
+ break;
+ case 1:
+ aData.pObj = SbxBase::Load( r );
+ return BOOL( aData.pObj != NULL );
+ case 2:
+ aData.pObj = this;
+ break;
+ }
+ break;
+ }
+ case SbxCHAR:
+ {
+ char c;
+ r >> c;
+ aData.nChar = c;
+ break;
+ }
+ case SbxBYTE:
+ r >> aData.nByte; break;
+ case SbxULONG:
+ r >> aData.nULong; break;
+ case SbxINT:
+ {
+ BYTE n;
+ r >> n;
+ // Passt der Int auf diesem System?
+ if( n > SAL_TYPES_SIZEOFINT )
+ r >> aData.nLong, aData.eType = SbxLONG;
+ else
+ r >> aData.nInt;
+ break;
+ }
+ case SbxUINT:
+ {
+ BYTE n;
+ r >> n;
+ // Passt der UInt auf diesem System?
+ if( n > SAL_TYPES_SIZEOFINT )
+ r >> aData.nULong, aData.eType = SbxULONG;
+ else
+ r >> (sal_uInt32&)aData.nUInt;
+ break;
+ }
+ case SbxEMPTY:
+ case SbxNULL:
+ case SbxVOID:
+ break;
+ case SbxDATAOBJECT:
+ r >> aData.nLong;
+ break;
+ // #78919 For backwards compatibility
+ case SbxWSTRING:
+ case SbxWCHAR:
+ break;
+ default:
+ memset (&aData,0,sizeof(aData));
+ ResetFlag(SBX_FIXED);
+ aData.eType = SbxNULL;
+ DBG_ASSERT( !this, "Nicht unterstuetzer Datentyp geladen" );
+ return FALSE;
+ }
+ return TRUE;
+}
+
+BOOL SbxValue::StoreData( SvStream& r ) const
+{
+ UINT16 nType = sal::static_int_cast< UINT16 >(aData.eType);
+ r << nType;
+ switch( nType & 0x0FFF )
+ {
+ case SbxBOOL:
+ case SbxINTEGER:
+ r << aData.nInteger; break;
+ case SbxLONG:
+ r << aData.nLong; break;
+ case SbxDATE:
+ // #49935: Als double speichern, sonst Fehler beim Einlesen
+ ((SbxValue*)this)->aData.eType = (SbxDataType)( ( nType & 0xF000 ) | SbxDOUBLE );
+ r.WriteByteString( GetCoreString(), RTL_TEXTENCODING_ASCII_US );
+ ((SbxValue*)this)->aData.eType = (SbxDataType)nType;
+ break;
+ case SbxSINGLE:
+ case SbxDOUBLE:
+ r.WriteByteString( GetCoreString(), RTL_TEXTENCODING_ASCII_US );
+ break;
+ case SbxULONG64:
+ {
+ r << aData.nULong64.nHigh << aData.nULong64.nLow;
+ break;
+ }
+ case SbxLONG64:
+ case SbxCURRENCY:
+ {
+ r << aData.nLong64.nHigh << aData.nLong64.nLow;
+ break;
+ }
+ case SbxSTRING:
+ if( aData.pOUString )
+ {
+ r.WriteByteString( *aData.pOUString, RTL_TEXTENCODING_ASCII_US );
+ }
+ else
+ {
+ String aEmpty;
+ r.WriteByteString( aEmpty, RTL_TEXTENCODING_ASCII_US );
+ }
+ break;
+ case SbxERROR:
+ case SbxUSHORT:
+ r << aData.nUShort; break;
+ case SbxOBJECT:
+ // sich selbst als Objektptr speichern geht nicht!
+ if( aData.pObj )
+ {
+ if( PTR_CAST(SbxValue,aData.pObj) != this )
+ {
+ r << (BYTE) 1;
+ return aData.pObj->Store( r );
+ }
+ else
+ r << (BYTE) 2;
+ }
+ else
+ r << (BYTE) 0;
+ break;
+ case SbxCHAR:
+ {
+ char c = sal::static_int_cast< char >(aData.nChar);
+ r << c;
+ break;
+ }
+ case SbxBYTE:
+ r << aData.nByte; break;
+ case SbxULONG:
+ r << aData.nULong; break;
+ case SbxINT:
+ {
+ BYTE n = SAL_TYPES_SIZEOFINT;
+ r << n << (sal_Int32)aData.nInt;
+ break;
+ }
+ case SbxUINT:
+ {
+ BYTE n = SAL_TYPES_SIZEOFINT;
+ r << n << (sal_uInt32)aData.nUInt;
+ break;
+ }
+ case SbxEMPTY:
+ case SbxNULL:
+ case SbxVOID:
+ break;
+ case SbxDATAOBJECT:
+ r << aData.nLong;
+ break;
+ // #78919 For backwards compatibility
+ case SbxWSTRING:
+ case SbxWCHAR:
+ break;
+ default:
+ DBG_ASSERT( !this, "Speichern eines nicht unterstuetzten Datentyps" );
+ return FALSE;
+ }
+ return TRUE;
+}
+
diff --git a/basic/source/sbx/sbxvar.cxx b/basic/source/sbx/sbxvar.cxx
new file mode 100644
index 000000000000..58e3c1ae92c2
--- /dev/null
+++ b/basic/source/sbx/sbxvar.cxx
@@ -0,0 +1,644 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+
+
+#include <tools/stream.hxx>
+#include "svl/brdcst.hxx"
+
+#include <basic/sbx.hxx>
+#include <basic/sbxbase.hxx>
+#include "sbxres.hxx"
+#include "sbxconv.hxx"
+#include <math.h>
+#include <ctype.h>
+
+#include "com/sun/star/uno/XInterface.hpp"
+using namespace com::sun::star::uno;
+
+///////////////////////////// SbxVariable //////////////////////////////
+
+TYPEINIT1(SbxVariable,SbxValue)
+TYPEINIT1(SbxHint,SfxSimpleHint)
+
+extern UINT32 nVarCreator; // in SBXBASE.CXX, fuer LoadData()
+#ifdef DBG_UTIL
+static ULONG nVar = 0;
+#endif
+
+///////////////////////////// SbxVariableImpl ////////////////////////////
+
+class SbxVariableImpl
+{
+ friend class SbxVariable;
+ String m_aDeclareClassName;
+ Reference< XInterface > m_xComListener;
+
+ SbxVariableImpl( void )
+ {}
+ SbxVariableImpl( const SbxVariableImpl& r )
+ : m_aDeclareClassName( r.m_aDeclareClassName )
+ , m_xComListener( r.m_xComListener )
+ {}
+};
+
+
+///////////////////////////// Konstruktoren //////////////////////////////
+
+SbxVariable::SbxVariable() : SbxValue()
+{
+ mpSbxVariableImpl = NULL;
+ pCst = NULL;
+ pParent = NULL;
+ nUserData = 0;
+ nHash = 0;
+#ifdef DBG_UTIL
+ DbgOutf( "SbxVariable::Ctor %lx=%ld", (void*)this, ++nVar );
+ GetSbxData_Impl()->aVars.Insert( this, LIST_APPEND );
+#endif
+}
+
+SbxVariable::SbxVariable( const SbxVariable& r )
+ : SvRefBase( r ), SbxValue( r ), mpPar( r.mpPar ), pInfo( r.pInfo )
+{
+ mpSbxVariableImpl = NULL;
+ if( r.mpSbxVariableImpl != NULL )
+ mpSbxVariableImpl = new SbxVariableImpl( *r.mpSbxVariableImpl );
+ pCst = NULL;
+ if( r.CanRead() )
+ {
+ pParent = r.pParent;
+ nUserData = r.nUserData;
+ maName = r.maName;
+ nHash = r.nHash;
+ }
+ else
+ {
+ pParent = NULL;
+ nUserData = 0;
+ nHash = 0;
+ }
+#ifdef DBG_UTIL
+ static sal_Char const aCellsStr[] = "Cells";
+ if ( maName.EqualsAscii( aCellsStr ) )
+ maName.AssignAscii( aCellsStr, sizeof( aCellsStr )-1 );
+ DbgOutf( "SbxVariable::Ctor %lx=%ld", (void*)this, ++nVar );
+ GetSbxData_Impl()->aVars.Insert( this, LIST_APPEND );
+#endif
+}
+
+SbxVariable::SbxVariable( SbxDataType t, void* p ) : SbxValue( t, p )
+{
+ mpSbxVariableImpl = NULL;
+ pCst = NULL;
+ pParent = NULL;
+ nUserData = 0;
+ nHash = 0;
+#ifdef DBG_UTIL
+ DbgOutf( "SbxVariable::Ctor %lx=%ld", (void*)this, ++nVar );
+ GetSbxData_Impl()->aVars.Insert( this, LIST_APPEND );
+#endif
+}
+
+SbxVariable::~SbxVariable()
+{
+#ifdef DBG_UTIL
+ ByteString aBStr( (const UniString&)maName, RTL_TEXTENCODING_ASCII_US );
+ DbgOutf( "SbxVariable::Dtor %lx (%s)", (void*)this, aBStr.GetBuffer() );
+ static sal_Char const aCellsStr[] = "Cells";
+ if ( maName.EqualsAscii( aCellsStr ) )
+ maName.AssignAscii( aCellsStr, sizeof( aCellsStr )-1 );
+ GetSbxData_Impl()->aVars.Remove( this );
+#endif
+ delete mpSbxVariableImpl;
+ delete pCst;
+}
+
+////////////////////////////// Broadcasting //////////////////////////////
+
+SfxBroadcaster& SbxVariable::GetBroadcaster()
+{
+ if( !pCst )
+ pCst = new SfxBroadcaster;
+ return *pCst;
+}
+
+// Eines Tages kann man vielleicht den Parameter 0 schleifen,
+// dann entfaellt die Kopiererei...
+
+void SbxVariable::Broadcast( ULONG nHintId )
+{
+ if( pCst && !IsSet( SBX_NO_BROADCAST ) && StaticIsEnabledBroadcasting() )
+ {
+ // Da die Methode von aussen aufrufbar ist, hier noch einmal
+ // die Berechtigung testen
+ if( nHintId & SBX_HINT_DATAWANTED )
+ if( !CanRead() )
+ return;
+ if( nHintId & SBX_HINT_DATACHANGED )
+ if( !CanWrite() )
+ return;
+ // Weitere Broadcasts verhindern
+ SfxBroadcaster* pSave = pCst;
+ pCst = NULL;
+ USHORT nSaveFlags = GetFlags();
+ SetFlag( SBX_READWRITE );
+ if( mpPar.Is() )
+ // this, als Element 0 eintragen, aber den Parent nicht umsetzen!
+ mpPar->GetRef( 0 ) = this;
+ pSave->Broadcast( SbxHint( nHintId, this ) );
+ delete pCst; // wer weiss schon, auf welche Gedanken mancher kommt?
+ pCst = pSave;
+ SetFlags( nSaveFlags );
+ }
+}
+
+SbxInfo* SbxVariable::GetInfo()
+{
+ if( !pInfo )
+ {
+ Broadcast( SBX_HINT_INFOWANTED );
+ if( pInfo.Is() )
+ SetModified( TRUE );
+ }
+ return pInfo;
+}
+
+void SbxVariable::SetInfo( SbxInfo* p )
+{
+ pInfo = p;
+}
+
+void SbxVariable::SetParameters( SbxArray* p )
+{
+ mpPar = p;
+}
+
+
+/////////////////////////// Name der Variablen ///////////////////////////
+
+void SbxVariable::SetName( const XubString& rName )
+{
+ maName = rName;
+ nHash = MakeHashCode( rName );
+}
+
+const XubString& SbxVariable::GetName( SbxNameType t ) const
+{
+ static char cSuffixes[] = " %&!#@ $";
+ if( t == SbxNAME_NONE )
+ return maName;
+ // Parameter-Infos anfordern (nicht fuer Objekte)
+ ((SbxVariable*)this)->GetInfo();
+ // Nix anfuegen, wenn einfache Property (keine leeren Klammern)
+ if( !pInfo
+ || ( !pInfo->aParams.Count() && GetClass() == SbxCLASS_PROPERTY ) )
+ return maName;
+ xub_Unicode cType = ' ';
+ XubString aTmp( maName );
+ // Kurzer Typ? Dann holen, evtl. ist dieser 0.
+ SbxDataType et = GetType();
+ if( t == SbxNAME_SHORT_TYPES )
+ {
+ if( et <= SbxSTRING )
+ cType = cSuffixes[ et ];
+ if( cType != ' ' )
+ aTmp += cType;
+ }
+ aTmp += '(';
+ for( USHORT i = 0; i < pInfo->aParams.Count(); i++ )
+ {
+ const SbxParamInfo* q = pInfo->aParams.GetObject( i );
+ int nt = q->eType & 0x0FFF;
+ if( i )
+ aTmp += ',';
+ if( q->nFlags & SBX_OPTIONAL )
+ aTmp += String( SbxRes( STRING_OPTIONAL ) );
+ if( q->eType & SbxBYREF )
+ aTmp += String( SbxRes( STRING_BYREF ) );
+ aTmp += q->aName;
+ cType = ' ';
+ // Kurzer Typ? Dann holen, evtl. ist dieser 0.
+ if( t == SbxNAME_SHORT_TYPES )
+ {
+ if( nt <= SbxSTRING )
+ cType = cSuffixes[ nt ];
+ }
+ if( cType != ' ' )
+ {
+ aTmp += cType;
+ if( q->eType & SbxARRAY )
+ aTmp.AppendAscii( "()" );
+ }
+ else
+ {
+ if( q->eType & SbxARRAY )
+ aTmp.AppendAscii( "()" );
+ // langer Typ?
+ if( t != SbxNAME_SHORT )
+ {
+ aTmp += String( SbxRes( STRING_AS ) );
+ if( nt < 32 )
+ aTmp += String( SbxRes(
+ sal::static_int_cast< USHORT >( STRING_TYPES + nt ) ) );
+ else
+ aTmp += String( SbxRes( STRING_ANY ) );
+ }
+ }
+ }
+ aTmp += ')';
+ // Langer Typ? Dann holen
+ if( t == SbxNAME_LONG_TYPES && et != SbxEMPTY )
+ {
+ aTmp += String( SbxRes( STRING_AS ) );
+ if( et < 32 )
+ aTmp += String( SbxRes(
+ sal::static_int_cast< USHORT >( STRING_TYPES + et ) ) );
+ else
+ aTmp += String( SbxRes( STRING_ANY ) );
+ }
+ ((SbxVariable*) this)->aToolString = aTmp;
+ return aToolString;
+}
+
+// Einen simplen Hashcode erzeugen: Es werden die ersten 6 Zeichen gewertet.
+
+USHORT SbxVariable::MakeHashCode( const XubString& rName )
+{
+ USHORT n = 0;
+ USHORT nLen = rName.Len();
+ if( nLen > 6 )
+ nLen = 6;
+ const xub_Unicode* p = rName.GetBuffer();
+ while( nLen-- )
+ {
+ BYTE c = (BYTE)*p;
+ p++;
+ // Falls wir ein Schweinezeichen haben, abbrechen!!
+ if( c >= 0x80 )
+ return 0;
+ n = sal::static_int_cast< USHORT >( ( n << 3 ) + toupper( c ) );
+ }
+ return n;
+}
+
+////////////////////////////// Operatoren ////////////////////////////////
+
+SbxVariable& SbxVariable::operator=( const SbxVariable& r )
+{
+ SbxValue::operator=( r );
+ delete mpSbxVariableImpl;
+ if( r.mpSbxVariableImpl != NULL )
+ mpSbxVariableImpl = new SbxVariableImpl( *r.mpSbxVariableImpl );
+ else
+ mpSbxVariableImpl = NULL;
+ return *this;
+}
+
+//////////////////////////////// Konversion ////////////////////////////////
+
+SbxDataType SbxVariable::GetType() const
+{
+ if( aData.eType == SbxOBJECT )
+ return aData.pObj ? aData.pObj->GetType() : SbxOBJECT;
+ else if( aData.eType == SbxVARIANT )
+ return aData.pObj ? aData.pObj->GetType() : SbxVARIANT;
+ else
+ return aData.eType;
+}
+
+SbxClassType SbxVariable::GetClass() const
+{
+ return SbxCLASS_VARIABLE;
+}
+
+void SbxVariable::SetModified( BOOL b )
+{
+ if( IsSet( SBX_NO_MODIFY ) )
+ return;
+ SbxBase::SetModified( b );
+ if( pParent && pParent != this ) //??? HotFix: Rekursion raus MM
+ pParent->SetModified( b );
+}
+
+void SbxVariable::SetParent( SbxObject* p )
+{
+#ifdef DBG_UTIL
+ // wird der Parent eines SbxObjects gesetzt?
+ if ( p && ISA(SbxObject) )
+ {
+ // dann mu\s dieses auch Child vom neuen Parent sein
+ BOOL bFound = FALSE;
+ SbxArray *pChilds = p->GetObjects();
+ if ( pChilds )
+ {
+ for ( USHORT nIdx = 0; !bFound && nIdx < pChilds->Count(); ++nIdx )
+ bFound = ( this == pChilds->Get(nIdx) );
+ }
+ if ( !bFound )
+ {
+ String aMsg = String::CreateFromAscii( "dangling: [" );
+ aMsg += GetName();
+ aMsg.AppendAscii( "].SetParent([" );
+ aMsg += p->GetName();
+ aMsg.AppendAscii( "])" );
+ ByteString aBStr( (const UniString&)aMsg, RTL_TEXTENCODING_ASCII_US );
+ DbgOut( aBStr.GetBuffer(), DBG_OUT_WARNING, __FILE__, __LINE__);
+ }
+ }
+#endif
+
+ pParent = p;
+}
+
+SbxVariableImpl* SbxVariable::getImpl( void )
+{
+ if( mpSbxVariableImpl == NULL )
+ mpSbxVariableImpl = new SbxVariableImpl();
+ return mpSbxVariableImpl;
+}
+
+const String& SbxVariable::GetDeclareClassName( void )
+{
+ SbxVariableImpl* pImpl = getImpl();
+ return pImpl->m_aDeclareClassName;
+}
+
+void SbxVariable::SetDeclareClassName( const String& rDeclareClassName )
+{
+ SbxVariableImpl* pImpl = getImpl();
+ pImpl->m_aDeclareClassName = rDeclareClassName;
+}
+
+void SbxVariable::SetComListener( ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > xComListener )
+{
+ SbxVariableImpl* pImpl = getImpl();
+ pImpl->m_xComListener = xComListener;
+}
+
+
+////////////////////////////// Laden/Speichern /////////////////////////////
+
+BOOL SbxVariable::LoadData( SvStream& rStrm, USHORT nVer )
+{
+ UINT16 nType;
+ BYTE cMark;
+ rStrm >> cMark;
+ if( cMark == 0xFF )
+ {
+ if( !SbxValue::LoadData( rStrm, nVer ) )
+ return FALSE;
+ rStrm.ReadByteString( maName, RTL_TEXTENCODING_ASCII_US );
+ UINT32 nTemp;
+ rStrm >> nTemp;
+ nUserData = nTemp;
+ }
+ else
+ {
+ rStrm.SeekRel( -1L );
+ rStrm >> nType;
+ rStrm.ReadByteString( maName, RTL_TEXTENCODING_ASCII_US );
+ UINT32 nTemp;
+ rStrm >> nTemp;
+ nUserData = nTemp;
+ // Korrektur: Alte Methoden haben statt SbxNULL jetzt SbxEMPTY
+ if( nType == SbxNULL && GetClass() == SbxCLASS_METHOD )
+ nType = SbxEMPTY;
+ SbxValues aTmp;
+ String aTmpString;
+ ::rtl::OUString aVal;
+ aTmp.eType = aData.eType = (SbxDataType) nType;
+ aTmp.pOUString = &aVal;
+ switch( nType )
+ {
+ case SbxBOOL:
+ case SbxERROR:
+ case SbxINTEGER:
+ rStrm >> aTmp.nInteger; break;
+ case SbxLONG:
+ rStrm >> aTmp.nLong; break;
+ case SbxSINGLE:
+ {
+ // Floats als ASCII
+ rStrm.ReadByteString( aTmpString, RTL_TEXTENCODING_ASCII_US );
+ double d;
+ SbxDataType t;
+ if( ImpScan( aTmpString, d, t, NULL ) != SbxERR_OK || t == SbxDOUBLE )
+ {
+ aTmp.nSingle = 0;
+ return FALSE;
+ }
+ aTmp.nSingle = (float) d;
+ break;
+ }
+ case SbxDATE:
+ case SbxDOUBLE:
+ {
+ // Floats als ASCII
+ rStrm.ReadByteString( aTmpString, RTL_TEXTENCODING_ASCII_US );
+ SbxDataType t;
+ if( ImpScan( aTmpString, aTmp.nDouble, t, NULL ) != SbxERR_OK )
+ {
+ aTmp.nDouble = 0;
+ return FALSE;
+ }
+ break;
+ }
+ case SbxSTRING:
+ rStrm.ReadByteString( aTmpString, RTL_TEXTENCODING_ASCII_US );
+ aVal = aTmpString;
+ break;
+ case SbxEMPTY:
+ case SbxNULL:
+ break;
+ default:
+ aData.eType = SbxNULL;
+ DBG_ASSERT( !this, "Nicht unterstuetzer Datentyp geladen" );
+ return FALSE;
+ }
+ // Wert putten
+ if( nType != SbxNULL && nType != SbxEMPTY && !Put( aTmp ) )
+ return FALSE;
+ }
+ rStrm >> cMark;
+ // cMark ist auch eine Versionsnummer!
+ // 1: initial version
+ // 2: mit nUserData
+ if( cMark )
+ {
+ if( cMark > 2 )
+ return FALSE;
+ pInfo = new SbxInfo;
+ pInfo->LoadData( rStrm, (USHORT) cMark );
+ }
+ // Privatdaten nur laden, wenn es eine SbxVariable ist
+ if( GetClass() == SbxCLASS_VARIABLE && !LoadPrivateData( rStrm, nVer ) )
+ return FALSE;
+ ((SbxVariable*) this)->Broadcast( SBX_HINT_DATACHANGED );
+ nHash = MakeHashCode( maName );
+ SetModified( TRUE );
+ return TRUE;
+}
+
+BOOL SbxVariable::StoreData( SvStream& rStrm ) const
+{
+ rStrm << (BYTE) 0xFF; // Marker
+ BOOL bValStore;
+ if( this->IsA( TYPE(SbxMethod) ) )
+ {
+ // #50200 Verhindern, dass Objekte, die zur Laufzeit als Return-Wert
+ // in der Methode als Value gespeichert sind, mit gespeichert werden
+ SbxVariable* pThis = (SbxVariable*)this;
+ USHORT nSaveFlags = GetFlags();
+ pThis->SetFlag( SBX_WRITE );
+ pThis->SbxValue::Clear();
+ pThis->SetFlags( nSaveFlags );
+
+ // Damit die Methode in keinem Fall ausgefuehrt wird!
+ // CAST, um const zu umgehen!
+ pThis->SetFlag( SBX_NO_BROADCAST );
+ bValStore = SbxValue::StoreData( rStrm );
+ pThis->ResetFlag( SBX_NO_BROADCAST );
+ }
+ else
+ bValStore = SbxValue::StoreData( rStrm );
+ if( !bValStore )
+ return FALSE;
+ // if( !SbxValue::StoreData( rStrm ) )
+ // return FALSE;
+ rStrm.WriteByteString( maName, RTL_TEXTENCODING_ASCII_US );
+ rStrm << (UINT32)nUserData;
+ if( pInfo.Is() )
+ {
+ rStrm << (BYTE) 2; // Version 2: mit UserData!
+ pInfo->StoreData( rStrm );
+ }
+ else
+ rStrm << (BYTE) 0;
+ // Privatdaten nur speichern, wenn es eine SbxVariable ist
+ if( GetClass() == SbxCLASS_VARIABLE )
+ return StorePrivateData( rStrm );
+ else
+ return TRUE;
+}
+
+////////////////////////////// SbxInfo ///////////////////////////////////
+
+SbxInfo::SbxInfo() : aHelpFile(), nHelpId( 0 ), aParams()
+{}
+
+SbxInfo::SbxInfo( const String& r, UINT32 n )
+ : aHelpFile( r ), nHelpId( n ), aParams()
+{}
+
+////////////////////////////// SbxAlias //////////////////////////////////
+
+SbxAlias::SbxAlias( const XubString& rName, SbxVariable* p )
+ : SbxVariable(), xAlias( p )
+{
+ SetName( rName );
+ SetFlags( p->GetFlags() );
+ SetFlag( SBX_DONTSTORE );
+ aData.eType = p->GetType();
+ StartListening( p->GetBroadcaster() );
+}
+
+SbxAlias::SbxAlias( const SbxAlias& r )
+ : SvRefBase( r ), SbxVariable( r ),
+ SfxListener( r ), xAlias( r.xAlias )
+{}
+
+SbxAlias& SbxAlias::operator=( const SbxAlias& r )
+{
+ xAlias = r.xAlias;
+ return *this;
+}
+
+SbxAlias::~SbxAlias()
+{
+ if( xAlias.Is() )
+ EndListening( xAlias->GetBroadcaster() );
+}
+
+void SbxAlias::Broadcast( ULONG nHt )
+{
+ if( xAlias.Is() && StaticIsEnabledBroadcasting() )
+ {
+ xAlias->SetParameters( GetParameters() );
+ if( nHt == SBX_HINT_DATAWANTED )
+ SbxVariable::operator=( *xAlias );
+ else if( nHt == SBX_HINT_DATACHANGED || nHt == SBX_HINT_CONVERTED )
+ *xAlias = *this;
+ else if( nHt == SBX_HINT_INFOWANTED )
+ {
+ xAlias->Broadcast( nHt );
+ pInfo = xAlias->GetInfo();
+ }
+ }
+}
+
+void SbxAlias::SFX_NOTIFY( SfxBroadcaster&, const TypeId&,
+ const SfxHint& rHint, const TypeId& )
+{
+ const SbxHint* p = PTR_CAST(SbxHint,&rHint);
+ if( p && p->GetId() == SBX_HINT_DYING )
+ {
+ xAlias.Clear();
+ // Alias loeschen?
+ if( pParent )
+ pParent->Remove( this );
+ }
+}
+
+void SbxVariable::Dump( SvStream& rStrm, BOOL bFill )
+{
+ ByteString aBNameStr( (const UniString&)GetName( SbxNAME_SHORT_TYPES ), RTL_TEXTENCODING_ASCII_US );
+ rStrm << "Variable( "
+ << ByteString::CreateFromInt64( (ULONG) this ).GetBuffer() << "=="
+ << aBNameStr.GetBuffer();
+ ByteString aBParentNameStr( (const UniString&)GetParent()->GetName(), RTL_TEXTENCODING_ASCII_US );
+ if ( GetParent() )
+ rStrm << " in parent '" << aBParentNameStr.GetBuffer() << "'";
+ else
+ rStrm << " no parent";
+ rStrm << " ) ";
+
+ // bei Object-Vars auch das Object ausgeben
+ if ( GetValues_Impl().eType == SbxOBJECT &&
+ GetValues_Impl().pObj &&
+ GetValues_Impl().pObj != this &&
+ GetValues_Impl().pObj != GetParent() )
+ {
+ rStrm << " contains ";
+ ((SbxObject*) GetValues_Impl().pObj)->Dump( rStrm, bFill );
+ }
+ else
+ rStrm << endl;
+}
+
diff --git a/basic/source/uno/dlgcont.cxx b/basic/source/uno/dlgcont.cxx
new file mode 100644
index 000000000000..004b61fbf198
--- /dev/null
+++ b/basic/source/uno/dlgcont.cxx
@@ -0,0 +1,658 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+#include <com/sun/star/container/XNameContainer.hpp>
+#include <com/sun/star/xml/sax/XParser.hpp>
+#include <com/sun/star/xml/sax/InputSource.hpp>
+#include <com/sun/star/io/XOutputStream.hpp>
+#include <com/sun/star/io/XInputStream.hpp>
+#include <com/sun/star/embed/ElementModes.hpp>
+#include <com/sun/star/ucb/XSimpleFileAccess.hpp>
+#include <com/sun/star/beans/XPropertySet.hpp>
+#include <com/sun/star/io/XActiveDataSource.hpp>
+#include <com/sun/star/xml/sax/XDocumentHandler.hpp>
+#include <com/sun/star/xml/sax/XExtendedDocumentHandler.hpp>
+#include "com/sun/star/resource/XStringResourceWithStorage.hpp"
+#include "com/sun/star/resource/XStringResourceWithLocation.hpp"
+#include "dlgcont.hxx"
+#include "sbmodule.hxx"
+#include <comphelper/processfactory.hxx>
+#include <unotools/streamwrap.hxx>
+#include <osl/mutex.hxx>
+
+#include <vcl/svapp.hxx>
+#include <vcl/settings.hxx>
+#include <unotools/pathoptions.hxx>
+#include <xmlscript/xmldlg_imexp.hxx>
+#include <cppuhelper/factory.hxx>
+#include <svtools/sfxecode.hxx>
+#include <svtools/ehdl.hxx>
+
+
+namespace basic
+{
+
+using namespace com::sun::star::document;
+using namespace com::sun::star::container;
+using namespace com::sun::star::io;
+using namespace com::sun::star::uno;
+using namespace com::sun::star::ucb;
+using namespace com::sun::star::lang;
+using namespace com::sun::star::script;
+using namespace com::sun::star::xml::sax;
+using namespace com::sun::star;
+using namespace cppu;
+using namespace rtl;
+using namespace osl;
+
+using com::sun::star::uno::Reference;
+
+//============================================================================
+// Implementation class SfxDialogLibraryContainer
+
+const sal_Char* SAL_CALL SfxDialogLibraryContainer::getInfoFileName() const { return "dialog"; }
+const sal_Char* SAL_CALL SfxDialogLibraryContainer::getOldInfoFileName() const { return "dialogs"; }
+const sal_Char* SAL_CALL SfxDialogLibraryContainer::getLibElementFileExtension() const { return "xdl"; }
+const sal_Char* SAL_CALL SfxDialogLibraryContainer::getLibrariesDir() const { return "Dialogs"; }
+
+// Ctor for service
+SfxDialogLibraryContainer::SfxDialogLibraryContainer( void )
+{
+ // all initialisation has to be done
+ // by calling XInitialization::initialize
+}
+
+SfxDialogLibraryContainer::SfxDialogLibraryContainer( const uno::Reference< embed::XStorage >& xStorage )
+{
+ init( OUString(), xStorage );
+}
+
+// Methods to get library instances of the correct type
+SfxLibrary* SfxDialogLibraryContainer::implCreateLibrary( const ::rtl::OUString& aName )
+{
+ SfxLibrary* pRet = new SfxDialogLibrary( maModifiable, aName, mxMSF, mxSFI, this );
+ return pRet;
+}
+
+SfxLibrary* SfxDialogLibraryContainer::implCreateLibraryLink
+ ( const ::rtl::OUString& aName, const OUString& aLibInfoFileURL,
+ const OUString& StorageURL, sal_Bool ReadOnly )
+{
+ SfxLibrary* pRet = new SfxDialogLibrary
+ ( maModifiable, aName, mxMSF, mxSFI, aLibInfoFileURL, StorageURL, ReadOnly, this );
+ return pRet;
+}
+
+Any SAL_CALL SfxDialogLibraryContainer::createEmptyLibraryElement( void )
+{
+ Reference< XInputStreamProvider > xISP;
+ Any aRetAny;
+ aRetAny <<= xISP;
+ return aRetAny;
+}
+
+bool SAL_CALL SfxDialogLibraryContainer::isLibraryElementValid( Any aElement ) const
+{
+ return SfxDialogLibrary::containsValidDialog( aElement );
+}
+
+bool writeOasis2OOoLibraryElement(
+ Reference< XInputStream > xInput, Reference< XOutputStream > xOutput )
+{
+ Reference< XMultiServiceFactory > xMSF(
+ comphelper::getProcessServiceFactory() );
+
+ Reference< XComponentContext > xContext;
+ Reference< beans::XPropertySet > xProps( xMSF, UNO_QUERY );
+ OSL_ASSERT( xProps.is() );
+ OSL_VERIFY( xProps->getPropertyValue(
+ OUString::createFromAscii(("DefaultContext")) ) >>= xContext );
+
+ Reference< lang::XMultiComponentFactory > xSMgr(
+ xContext->getServiceManager() );
+
+ if (! xSMgr.is())
+ {
+ return FALSE;
+ }
+
+ Reference< xml::sax::XParser > xParser(
+ xSMgr->createInstanceWithContext(
+ OUString( RTL_CONSTASCII_USTRINGPARAM(
+ "com.sun.star.xml.sax.Parser" ) ),
+ xContext ),
+ UNO_QUERY );
+
+ Reference< xml::sax::XExtendedDocumentHandler > xWriter(
+ xSMgr->createInstanceWithContext(
+ OUString( RTL_CONSTASCII_USTRINGPARAM(
+ "com.sun.star.xml.sax.Writer" ) ),
+ xContext ),
+ UNO_QUERY );
+
+ Reference< io::XActiveDataSource > xSource( xWriter, UNO_QUERY );
+ xSource->setOutputStream( xOutput );
+
+ if ( !xParser.is() || !xWriter.is() )
+ {
+ return FALSE;
+ }
+
+ Sequence<Any> aArgs( 1 );
+ aArgs[0] <<= xWriter;
+
+ Reference< xml::sax::XDocumentHandler > xHandler(
+ xSMgr->createInstanceWithArgumentsAndContext(
+ OUString( RTL_CONSTASCII_USTRINGPARAM(
+ "com.sun.star.comp.Oasis2OOoTransformer" ) ),
+ aArgs, xContext ),
+ UNO_QUERY );
+
+ xParser->setDocumentHandler( xHandler );
+
+ xml::sax::InputSource source;
+ source.aInputStream = xInput;
+ source.sSystemId = OUString::createFromAscii( "virtual file" );
+
+ xParser->parseStream( source );
+
+ return TRUE;
+}
+
+void SAL_CALL SfxDialogLibraryContainer::writeLibraryElement
+(
+ const Reference < XNameContainer >& xLib,
+ const OUString& aElementName,
+ const Reference< XOutputStream >& xOutput
+)
+ throw(Exception)
+{
+ Any aElement = xLib->getByName( aElementName );
+ Reference< XInputStreamProvider > xISP;
+ aElement >>= xISP;
+ if( !xISP.is() )
+ return;
+
+ Reference< XInputStream > xInput( xISP->createInputStream() );
+
+ bool bComplete = FALSE;
+ if ( mbOasis2OOoFormat )
+ {
+ bComplete = writeOasis2OOoLibraryElement( xInput, xOutput );
+ }
+
+ if ( bComplete == FALSE )
+ {
+ Sequence< sal_Int8 > bytes;
+ sal_Int32 nRead = xInput->readBytes( bytes, xInput->available() );
+ for (;;)
+ {
+ if( nRead )
+ xOutput->writeBytes( bytes );
+
+ nRead = xInput->readBytes( bytes, 1024 );
+ if (! nRead)
+ break;
+ }
+ }
+ xInput->closeInput();
+}
+
+void SfxDialogLibraryContainer::storeLibrariesToStorage( const uno::Reference< embed::XStorage >& xStorage ) throw ( RuntimeException )
+{
+ LibraryContainerMethodGuard aGuard( *this );
+ mbOasis2OOoFormat = sal_False;
+
+ if ( mxStorage.is() && xStorage.is() )
+ {
+ try
+ {
+ long nSource = SotStorage::GetVersion( mxStorage );
+ long nTarget = SotStorage::GetVersion( xStorage );
+
+ if ( nSource == SOFFICE_FILEFORMAT_CURRENT &&
+ nTarget != SOFFICE_FILEFORMAT_CURRENT )
+ {
+ mbOasis2OOoFormat = sal_True;
+ }
+ }
+ catch ( Exception& )
+ {
+ // if we cannot get the version then the
+ // Oasis2OOoTransformer will not be used
+ OSL_ASSERT(FALSE);
+ }
+ }
+
+ SfxLibraryContainer::storeLibrariesToStorage( xStorage );
+
+ mbOasis2OOoFormat = sal_False;
+}
+
+
+Any SAL_CALL SfxDialogLibraryContainer::importLibraryElement
+ ( const Reference < XNameContainer >& /*xLib*/,
+ const OUString& /*aElementName */, const OUString& aFile,
+ const uno::Reference< io::XInputStream >& xElementStream )
+{
+ Any aRetAny;
+
+ // TODO: Member because later it will be a component
+ //Reference< XMultiServiceFactory > xMSF( comphelper::getProcessServiceFactory() );
+ //if( !xMSF.is() )
+ //{
+ // OSL_ENSURE( 0, "### couln't get ProcessServiceFactory\n" );
+ // return aRetAny;
+ //}
+
+ Reference< XParser > xParser( mxMSF->createInstance(
+ OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.xml.sax.Parser") ) ), UNO_QUERY );
+ if( !xParser.is() )
+ {
+ OSL_ENSURE( 0, "### couln't create sax parser component\n" );
+ return aRetAny;
+ }
+
+ Reference< XNameContainer > xDialogModel( mxMSF->createInstance
+ ( OUString(RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.awt.UnoControlDialogModel" ) ) ), UNO_QUERY );
+ if( !xDialogModel.is() )
+ {
+ OSL_ENSURE( 0, "### couln't create com.sun.star.awt.UnoControlDialogModel component\n" );
+ return aRetAny;
+ }
+
+ // Read from storage?
+ sal_Bool bStorage = xElementStream.is();
+ Reference< XInputStream > xInput;
+
+ if( bStorage )
+ {
+ xInput = xElementStream;
+ }
+ else
+ {
+ try
+ {
+ xInput = mxSFI->openFileRead( aFile );
+ }
+ catch( Exception& )
+ //catch( Exception& e )
+ {
+ // TODO:
+ //throw WrappedTargetException( e );
+ }
+ }
+ if( !xInput.is() )
+ return aRetAny;
+
+ Reference< XComponentContext > xContext;
+ Reference< beans::XPropertySet > xProps( mxMSF, UNO_QUERY );
+ OSL_ASSERT( xProps.is() );
+ OSL_VERIFY( xProps->getPropertyValue( OUString(RTL_CONSTASCII_USTRINGPARAM("DefaultContext")) ) >>= xContext );
+
+ InputSource source;
+ source.aInputStream = xInput;
+ source.sSystemId = aFile;
+
+ try {
+ // start parsing
+ xParser->setDocumentHandler( ::xmlscript::importDialogModel( xDialogModel, xContext ) );
+ xParser->parseStream( source );
+ }
+ catch( Exception& )
+ {
+ OSL_ENSURE( 0, "Parsing error\n" );
+ SfxErrorContext aEc( ERRCTX_SFX_LOADBASIC, aFile );
+ ULONG nErrorCode = ERRCODE_IO_GENERAL;
+ ErrorHandler::HandleError( nErrorCode );
+ return aRetAny;
+ }
+
+ // Create InputStream, TODO: Implement own InputStreamProvider
+ // to avoid creating the DialogModel here!
+ Reference< XInputStreamProvider > xISP = ::xmlscript::exportDialogModel( xDialogModel, xContext );
+ aRetAny <<= xISP;
+ return aRetAny;
+}
+
+void SAL_CALL SfxDialogLibraryContainer::importFromOldStorage( const OUString& )
+{
+ // Nothing to do here, old dialogs cannot be imported
+}
+
+SfxLibraryContainer* SfxDialogLibraryContainer::createInstanceImpl( void )
+{
+ return new SfxDialogLibraryContainer();
+}
+
+
+static OUString aResourceFileNameBase = OUString::createFromAscii( "DialogStrings" );
+static OUString aResourceFileCommentBase = OUString::createFromAscii( "# Strings for Dialog Library " );
+
+// Resource handling
+Reference< ::com::sun::star::resource::XStringResourcePersistence >
+ SfxDialogLibraryContainer::implCreateStringResource( SfxDialogLibrary* pDialogLibrary )
+{
+ Reference< resource::XStringResourcePersistence > xRet;
+ OUString aLibName = pDialogLibrary->getName();
+ bool bReadOnly = pDialogLibrary->mbReadOnly;
+
+ // get ui locale
+ ::com::sun ::star::lang::Locale aLocale = Application::GetSettings().GetUILocale();
+
+ OUString aComment = aResourceFileCommentBase;
+ aComment += aLibName;
+
+ sal_Bool bStorage = mxStorage.is();
+ if( bStorage )
+ {
+ Sequence<Any> aArgs( 5 );
+ aArgs[1] <<= bReadOnly;
+ aArgs[2] <<= aLocale;
+ aArgs[3] <<= aResourceFileNameBase;
+ aArgs[4] <<= aComment;
+
+ // TODO: Ctor
+ xRet = Reference< resource::XStringResourcePersistence >( mxMSF->createInstance
+ ( OUString::createFromAscii( "com.sun.star.resource.StringResourceWithStorage" ) ), UNO_QUERY );
+
+ uno::Reference< embed::XStorage > xLibrariesStor;
+ uno::Reference< embed::XStorage > xLibraryStor;
+ try {
+ xLibrariesStor = mxStorage->openStorageElement( maLibrariesDir, embed::ElementModes::READ );
+ // TODO: Should be READWRITE with new storage concept using store() instead of storeTo()
+ if ( !xLibrariesStor.is() )
+ throw uno::RuntimeException();
+
+ xLibraryStor = xLibrariesStor->openStorageElement( aLibName, embed::ElementModes::READ );
+ // TODO: Should be READWRITE with new storage concept using store() instead of storeTo()
+ if ( !xLibraryStor.is() )
+ throw uno::RuntimeException();
+
+ aArgs[0] <<= xLibraryStor;
+ }
+ catch( uno::Exception& )
+ {
+ // TODO: Error handling?
+ return xRet;
+ }
+
+ // TODO: Ctor
+ if( xRet.is() )
+ {
+ Reference< XInitialization > xInit( xRet, UNO_QUERY );
+ if( xInit.is() )
+ xInit->initialize( aArgs );
+ }
+ }
+ else
+ {
+ Sequence<Any> aArgs( 6 );
+
+ OUString aLocation = createAppLibraryFolder( pDialogLibrary, aLibName );
+ aArgs[0] <<= aLocation;
+ aArgs[1] <<= bReadOnly;
+ aArgs[2] <<= aLocale;
+ aArgs[3] <<= aResourceFileNameBase;
+ aArgs[4] <<= aComment;
+
+ // TODO: Real handler?
+ Reference< task::XInteractionHandler > xDummyHandler;
+ aArgs[5] <<= xDummyHandler;
+
+ // TODO: Ctor
+ xRet = Reference< resource::XStringResourcePersistence >( mxMSF->createInstance
+ ( OUString::createFromAscii( "com.sun.star.resource.StringResourceWithLocation" ) ), UNO_QUERY );
+
+ // TODO: Ctor
+ if( xRet.is() )
+ {
+ Reference< XInitialization > xInit( xRet, UNO_QUERY );
+ if( xInit.is() )
+ xInit->initialize( aArgs );
+ }
+ }
+
+ return xRet;
+}
+
+void SfxDialogLibraryContainer::onNewRootStorage()
+{
+ // the library container is not modified, go through the libraries and check whether they are modified
+ Sequence< OUString > aNames = maNameContainer.getElementNames();
+ const OUString* pNames = aNames.getConstArray();
+ sal_Int32 nNameCount = aNames.getLength();
+
+ for( sal_Int32 i = 0 ; i < nNameCount ; i++ )
+ {
+ OUString aName = pNames[ i ];
+ SfxDialogLibrary* pDialogLibrary = static_cast<SfxDialogLibrary*>( getImplLib( aName ) );
+
+ Reference< resource::XStringResourcePersistence > xStringResourcePersistence =
+ pDialogLibrary->getStringResourcePersistence();
+
+ if( xStringResourcePersistence.is() )
+ {
+ Reference< embed::XStorage > xLibrariesStor;
+ Reference< embed::XStorage > xLibraryStor;
+ try {
+ xLibrariesStor = mxStorage->openStorageElement( maLibrariesDir, embed::ElementModes::READWRITE );
+ if ( !xLibrariesStor.is() )
+ throw uno::RuntimeException();
+
+ OUString aLibName = pDialogLibrary->getName();
+ xLibraryStor = xLibrariesStor->openStorageElement( aLibName, embed::ElementModes::READWRITE );
+ if ( !xLibraryStor.is() )
+ throw uno::RuntimeException();
+
+ Reference< resource::XStringResourceWithStorage >
+ xStringResourceWithStorage( xStringResourcePersistence, UNO_QUERY );
+ if( xStringResourceWithStorage.is() )
+ xStringResourceWithStorage->setStorage( xLibraryStor );
+ }
+ catch( uno::Exception& )
+ {
+ // TODO: Error handling?
+ }
+ }
+ }
+}
+
+
+//============================================================================
+// Service
+
+void createRegistryInfo_SfxDialogLibraryContainer()
+{
+ static OAutoRegistration< SfxDialogLibraryContainer > aAutoRegistration;
+}
+
+::rtl::OUString SAL_CALL SfxDialogLibraryContainer::getImplementationName( ) throw (RuntimeException)
+{
+ return getImplementationName_static();
+}
+
+Sequence< ::rtl::OUString > SAL_CALL SfxDialogLibraryContainer::getSupportedServiceNames( ) throw (RuntimeException)
+{
+ return getSupportedServiceNames_static();
+}
+
+Sequence< OUString > SfxDialogLibraryContainer::getSupportedServiceNames_static()
+{
+ Sequence< OUString > aServiceNames( 2 );
+ aServiceNames[0] = OUString::createFromAscii( "com.sun.star.script.DocumentDialogLibraryContainer" );
+ // plus, for compatibility:
+ aServiceNames[1] = OUString::createFromAscii( "com.sun.star.script.DialogLibraryContainer" );
+ return aServiceNames;
+}
+
+OUString SfxDialogLibraryContainer::getImplementationName_static()
+{
+ static OUString aImplName;
+ static sal_Bool bNeedsInit = sal_True;
+
+ MutexGuard aGuard( Mutex::getGlobalMutex() );
+ if( bNeedsInit )
+ {
+ aImplName = OUString::createFromAscii( "com.sun.star.comp.sfx2.DialogLibraryContainer" );
+ bNeedsInit = sal_False;
+ }
+ return aImplName;
+}
+
+Reference< XInterface > SAL_CALL SfxDialogLibraryContainer::Create( const Reference< XComponentContext >& ) throw( Exception )
+{
+ Reference< XInterface > xRet =
+ static_cast< XInterface* >( static_cast< OWeakObject* >(new SfxDialogLibraryContainer()) );
+ return xRet;
+}
+
+
+//============================================================================
+// Implementation class SfxDialogLibrary
+
+// Ctor
+SfxDialogLibrary::SfxDialogLibrary( ModifiableHelper& _rModifiable,
+ const ::rtl::OUString& aName,
+ const Reference< XMultiServiceFactory >& xMSF,
+ const Reference< XSimpleFileAccess >& xSFI,
+ SfxDialogLibraryContainer* pParent )
+ : SfxLibrary( _rModifiable, getCppuType( (const Reference< XInputStreamProvider > *)0 ), xMSF, xSFI )
+ , m_pParent( pParent )
+ , m_aName( aName )
+{
+}
+
+SfxDialogLibrary::SfxDialogLibrary( ModifiableHelper& _rModifiable,
+ const ::rtl::OUString& aName,
+ const Reference< XMultiServiceFactory >& xMSF,
+ const Reference< XSimpleFileAccess >& xSFI,
+ const OUString& aLibInfoFileURL,
+ const OUString& aStorageURL,
+ sal_Bool ReadOnly,
+ SfxDialogLibraryContainer* pParent )
+ : SfxLibrary( _rModifiable, getCppuType( (const Reference< XInputStreamProvider > *)0 ),
+ xMSF, xSFI, aLibInfoFileURL, aStorageURL, ReadOnly)
+ , m_pParent( pParent )
+ , m_aName( aName )
+{
+}
+
+IMPLEMENT_FORWARD_XINTERFACE2( SfxDialogLibrary, SfxLibrary, SfxDialogLibrary_BASE );
+IMPLEMENT_FORWARD_XTYPEPROVIDER2( SfxDialogLibrary, SfxLibrary, SfxDialogLibrary_BASE );
+
+// Provide modify state including resources
+sal_Bool SfxDialogLibrary::isModified( void )
+{
+ sal_Bool bRet = implIsModified();
+
+ if( !bRet && m_xStringResourcePersistence.is() )
+ bRet = m_xStringResourcePersistence->isModified();
+ // else: Resources not accessed so far -> not modified
+
+ return bRet;
+}
+
+void SfxDialogLibrary::storeResources( void )
+{
+ if( m_xStringResourcePersistence.is() )
+ m_xStringResourcePersistence->store();
+}
+
+void SfxDialogLibrary::storeResourcesAsURL
+ ( const ::rtl::OUString& URL, const ::rtl::OUString& NewName )
+{
+ OUString aComment = aResourceFileCommentBase;
+ m_aName = NewName;
+ aComment += m_aName;
+
+ if( m_xStringResourcePersistence.is() )
+ {
+ m_xStringResourcePersistence->setComment( aComment );
+
+ Reference< resource::XStringResourceWithLocation >
+ xStringResourceWithLocation( m_xStringResourcePersistence, UNO_QUERY );
+ if( xStringResourceWithLocation.is() )
+ xStringResourceWithLocation->storeAsURL( URL );
+ }
+}
+
+void SfxDialogLibrary::storeResourcesToURL( const OUString& URL,
+ const Reference< task::XInteractionHandler >& xHandler )
+{
+ OUString aComment = aResourceFileCommentBase;
+ aComment += m_aName;
+
+ if( m_xStringResourcePersistence.is() )
+ {
+ m_xStringResourcePersistence->storeToURL
+ ( URL, aResourceFileNameBase, aComment, xHandler );
+ }
+}
+
+void SfxDialogLibrary::storeResourcesToStorage( const ::com::sun::star::uno::Reference
+ < ::com::sun::star::embed::XStorage >& xStorage )
+{
+ OUString aComment = aResourceFileCommentBase;
+ aComment += m_aName;
+
+ if( m_xStringResourcePersistence.is() )
+ {
+ m_xStringResourcePersistence->storeToStorage
+ ( xStorage, aResourceFileNameBase, aComment );
+ }
+}
+
+
+// XStringResourceSupplier
+Reference< resource::XStringResourceResolver >
+ SAL_CALL SfxDialogLibrary::getStringResource( ) throw (RuntimeException)
+{
+ if( !m_xStringResourcePersistence.is() )
+ m_xStringResourcePersistence = m_pParent->implCreateStringResource( this );
+
+ Reference< resource::XStringResourceResolver > xRet( m_xStringResourcePersistence, UNO_QUERY );
+ return xRet;
+}
+
+bool SfxDialogLibrary::containsValidDialog( const ::com::sun::star::uno::Any& aElement )
+{
+ Reference< XInputStreamProvider > xISP;
+ aElement >>= xISP;
+ return xISP.is();
+}
+
+bool SAL_CALL SfxDialogLibrary::isLibraryElementValid( ::com::sun::star::uno::Any aElement ) const
+{
+ return SfxDialogLibrary::containsValidDialog( aElement );
+}
+
+}
+//============================================================================
+
diff --git a/basic/source/uno/makefile.mk b/basic/source/uno/makefile.mk
new file mode 100644
index 000000000000..52e7f7004c4d
--- /dev/null
+++ b/basic/source/uno/makefile.mk
@@ -0,0 +1,49 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..$/..
+
+PRJNAME=basic
+TARGET=uno
+
+ENABLE_EXCEPTIONS=TRUE
+
+# --- Settings ------------------------------------------------------------
+
+.INCLUDE : settings.mk
+
+SLOFILES= \
+ $(SLO)$/namecont.obj \
+ $(SLO)$/scriptcont.obj \
+ $(SLO)$/dlgcont.obj \
+ $(SLO)$/sbmodule.obj \
+ $(SLO)$/sbservices.obj \
+ $(SLO)$/modsizeexceeded.obj
+
+# --- Targets --------------------------------------------------------------
+
+.INCLUDE : target.mk
diff --git a/basic/source/uno/modsizeexceeded.cxx b/basic/source/uno/modsizeexceeded.cxx
new file mode 100644
index 000000000000..408b0f3f8dd4
--- /dev/null
+++ b/basic/source/uno/modsizeexceeded.cxx
@@ -0,0 +1,68 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+#include "modsizeexceeded.hxx"
+
+#include <framework/interaction.hxx>
+#include <com/sun/star/script/ModuleSizeExceededRequest.hpp>
+
+using namespace com::sun::star;
+using namespace cppu;
+using namespace rtl;
+using namespace osl;
+
+ModuleSizeExceeded::ModuleSizeExceeded( const uno::Sequence< ::rtl::OUString >& sModules )
+{
+ script::ModuleSizeExceededRequest aReq;
+ aReq.Names = sModules;
+
+ m_aRequest <<= aReq;
+
+ m_xAbort.set( uno::Reference< task::XInteractionAbort >(new framework::ContinuationAbort), uno::UNO_QUERY );
+ m_xApprove.set( uno::Reference< task::XInteractionApprove >(new framework::ContinuationApprove ), uno::UNO_QUERY );
+ m_lContinuations.realloc( 2 );
+ m_lContinuations[0] = m_xApprove;
+ m_lContinuations[1] = m_xAbort;
+}
+
+sal_Bool
+ModuleSizeExceeded::isAbort() const
+{
+ framework::ContinuationAbort* pBase = static_cast< framework::ContinuationAbort* >( m_xAbort.get() );
+ return pBase->isSelected();
+}
+
+sal_Bool
+ModuleSizeExceeded::isApprove() const
+{
+ framework::ContinuationApprove* pBase = static_cast< framework::ContinuationApprove* >( m_xApprove.get() );
+ return pBase->isSelected();
+}
+
+
diff --git a/basic/source/uno/namecont.cxx b/basic/source/uno/namecont.cxx
new file mode 100644
index 000000000000..c31aed1f8ef7
--- /dev/null
+++ b/basic/source/uno/namecont.cxx
@@ -0,0 +1,3506 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+#include <com/sun/star/container/XNameContainer.hpp>
+#include <com/sun/star/container/XContainer.hpp>
+#include <com/sun/star/embed/ElementModes.hpp>
+#include <com/sun/star/embed/XTransactedObject.hpp>
+#include <com/sun/star/lang/XServiceInfo.hpp>
+#include <vcl/svapp.hxx>
+#include <vos/mutex.hxx>
+#ifndef __RSC //autogen
+#include <tools/errinf.hxx>
+#endif
+#include <osl/mutex.hxx>
+#include <vos/diagnose.hxx>
+#include <rtl/uri.hxx>
+#include <rtl/strbuf.hxx>
+#include <comphelper/processfactory.hxx>
+#ifndef INCLUDED_COMPHELPER_ANYTOSTRING_HXX
+#include <comphelper/anytostring.hxx>
+#endif
+
+#include "namecont.hxx"
+#include <basic/basicmanagerrepository.hxx>
+#include <tools/diagnose_ex.h>
+#include <tools/urlobj.hxx>
+#include <unotools/streamwrap.hxx>
+#include <unotools/pathoptions.hxx>
+#include <svtools/sfxecode.hxx>
+#include <svtools/ehdl.hxx>
+#include <basic/basmgr.hxx>
+#include <com/sun/star/xml/sax/XExtendedDocumentHandler.hpp>
+#include <com/sun/star/xml/sax/XParser.hpp>
+#include <com/sun/star/xml/sax/InputSource.hpp>
+#include <com/sun/star/io/XOutputStream.hpp>
+#include <com/sun/star/io/XInputStream.hpp>
+#include <com/sun/star/io/XActiveDataSource.hpp>
+#include <com/sun/star/beans/XPropertySet.hpp>
+#include <com/sun/star/uno/DeploymentException.hpp>
+#include <com/sun/star/lang/DisposedException.hpp>
+#include <com/sun/star/script/LibraryNotLoadedException.hpp>
+#include "com/sun/star/deployment/ExtensionManager.hpp"
+#include <comphelper/storagehelper.hxx>
+#ifndef _RTL_USTRING_HXX_
+#include <comphelper/anytostring.hxx>
+#endif
+#include <cppuhelper/exc_hlp.hxx>
+#include <basic/sbmod.hxx>
+
+namespace basic
+{
+
+using namespace com::sun::star::document;
+using namespace com::sun::star::container;
+using namespace com::sun::star::uno;
+using namespace com::sun::star::lang;
+using namespace com::sun::star::io;
+using namespace com::sun::star::ucb;
+using namespace com::sun::star::script;
+using namespace com::sun::star::beans;
+using namespace com::sun::star::xml::sax;
+using namespace com::sun::star::util;
+using namespace com::sun::star::task;
+using namespace com::sun::star::embed;
+using namespace com::sun::star::frame;
+using namespace com::sun::star::deployment;
+using namespace com::sun::star;
+using namespace cppu;
+using namespace rtl;
+using namespace osl;
+
+using com::sun::star::uno::Reference;
+
+// #i34411: Flag for error handling during migration
+static bool GbMigrationSuppressErrors = false;
+
+//============================================================================
+// Implementation class NameContainer
+
+// Methods XElementAccess
+Type NameContainer::getElementType()
+ throw(RuntimeException)
+{
+ return mType;
+}
+
+sal_Bool NameContainer::hasElements()
+ throw(RuntimeException)
+{
+ sal_Bool bRet = (mnElementCount > 0);
+ return bRet;
+}
+
+// Methods XNameAccess
+Any NameContainer::getByName( const OUString& aName )
+ throw(NoSuchElementException, WrappedTargetException, RuntimeException)
+{
+ NameContainerNameMap::iterator aIt = mHashMap.find( aName );
+ if( aIt == mHashMap.end() )
+ {
+ throw NoSuchElementException();
+ }
+ sal_Int32 iHashResult = (*aIt).second;
+ Any aRetAny = mValues.getConstArray()[ iHashResult ];
+ return aRetAny;
+}
+
+Sequence< OUString > NameContainer::getElementNames()
+ throw(RuntimeException)
+{
+ return mNames;
+}
+
+sal_Bool NameContainer::hasByName( const OUString& aName )
+ throw(RuntimeException)
+{
+ NameContainerNameMap::iterator aIt = mHashMap.find( aName );
+ sal_Bool bRet = ( aIt != mHashMap.end() );
+ return bRet;
+}
+
+
+// Methods XNameReplace
+void NameContainer::replaceByName( const OUString& aName, const Any& aElement )
+ throw(IllegalArgumentException, NoSuchElementException, WrappedTargetException, RuntimeException)
+{
+ Type aAnyType = aElement.getValueType();
+ if( mType != aAnyType )
+ throw IllegalArgumentException();
+
+ NameContainerNameMap::iterator aIt = mHashMap.find( aName );
+ if( aIt == mHashMap.end() )
+ {
+ throw NoSuchElementException();
+ }
+ sal_Int32 iHashResult = (*aIt).second;
+ Any aOldElement = mValues.getConstArray()[ iHashResult ];
+ mValues.getArray()[ iHashResult ] = aElement;
+
+
+ // Fire event
+ ContainerEvent aEvent;
+ aEvent.Source = mpxEventSource;
+ aEvent.Accessor <<= aName;
+ aEvent.Element = aElement;
+ aEvent.ReplacedElement = aOldElement;
+
+ OInterfaceIteratorHelper aIterator( maListenerContainer );
+ while( aIterator.hasMoreElements() )
+ {
+ Reference< XInterface > xIface = aIterator.next();
+ Reference< XContainerListener > xListener( xIface, UNO_QUERY );
+ try
+ {
+ xListener->elementReplaced( aEvent );
+ }
+ catch(RuntimeException&)
+ {
+ aIterator.remove();
+ }
+ }
+}
+
+
+// Methods XNameContainer
+void NameContainer::insertByName( const OUString& aName, const Any& aElement )
+ throw(IllegalArgumentException, ElementExistException, WrappedTargetException, RuntimeException)
+{
+ Type aAnyType = aElement.getValueType();
+ if( mType != aAnyType )
+ throw IllegalArgumentException();
+
+ NameContainerNameMap::iterator aIt = mHashMap.find( aName );
+ if( aIt != mHashMap.end() )
+ {
+ throw ElementExistException();
+ }
+
+ sal_Int32 nCount = mNames.getLength();
+ mNames.realloc( nCount + 1 );
+ mValues.realloc( nCount + 1 );
+ mNames.getArray()[ nCount ] = aName;
+ mValues.getArray()[ nCount ] = aElement;
+
+ mHashMap[ aName ] = nCount;
+ mnElementCount++;
+
+
+ // Fire event
+ ContainerEvent aEvent;
+ aEvent.Source = mpxEventSource;
+ aEvent.Accessor <<= aName;
+ aEvent.Element = aElement;
+
+ OInterfaceIteratorHelper aIterator( maListenerContainer );
+ while( aIterator.hasMoreElements() )
+ {
+ Reference< XInterface > xIface = aIterator.next();
+ Reference< XContainerListener > xListener( xIface, UNO_QUERY );
+ try
+ {
+ xListener->elementInserted( aEvent );
+ }
+ catch(RuntimeException&)
+ {
+ aIterator.remove();
+ }
+ }
+}
+
+void NameContainer::removeByName( const OUString& Name )
+ throw(NoSuchElementException, WrappedTargetException, RuntimeException)
+{
+ NameContainerNameMap::iterator aIt = mHashMap.find( Name );
+ if( aIt == mHashMap.end() )
+ {
+ throw NoSuchElementException();
+ }
+
+ sal_Int32 iHashResult = (*aIt).second;
+ Any aOldElement = mValues.getConstArray()[ iHashResult ];
+ mHashMap.erase( aIt );
+ sal_Int32 iLast = mNames.getLength() - 1;
+ if( iLast != iHashResult )
+ {
+ OUString* pNames = mNames.getArray();
+ Any* pValues = mValues.getArray();
+ pNames[ iHashResult ] = pNames[ iLast ];
+ pValues[ iHashResult ] = pValues[ iLast ];
+ mHashMap[ pNames[ iHashResult ] ] = iHashResult;
+ }
+ mNames.realloc( iLast );
+ mValues.realloc( iLast );
+ mnElementCount--;
+
+
+ // Fire event
+ ContainerEvent aEvent;
+ aEvent.Source = mpxEventSource;
+ aEvent.Accessor <<= Name;
+ aEvent.Element = aOldElement;
+
+ OInterfaceIteratorHelper aIterator( maListenerContainer );
+ while( aIterator.hasMoreElements() )
+ {
+ Reference< XInterface > xIface = aIterator.next();
+ Reference< XContainerListener > xListener( xIface, UNO_QUERY );
+ try
+ {
+ xListener->elementRemoved( aEvent );
+ }
+ catch(RuntimeException&)
+ {
+ aIterator.remove();
+ }
+ }
+}
+
+
+// Methods XContainer
+void SAL_CALL NameContainer::addContainerListener( const Reference< XContainerListener >& xListener )
+ throw (RuntimeException)
+{
+ if( !xListener.is() )
+ throw RuntimeException();
+ Reference< XInterface > xIface( xListener, UNO_QUERY );
+ maListenerContainer.addInterface( xIface );
+}
+
+void SAL_CALL NameContainer::removeContainerListener( const Reference< XContainerListener >& xListener )
+ throw (RuntimeException)
+{
+ if( !xListener.is() )
+ throw RuntimeException();
+ Reference< XInterface > xIface( xListener, UNO_QUERY );
+ maListenerContainer.removeInterface( xIface );
+}
+
+//============================================================================
+// ModifiableHelper
+
+void ModifiableHelper::setModified( sal_Bool _bModified )
+{
+ if ( _bModified == mbModified )
+ return;
+ mbModified = _bModified;
+
+ if ( m_aModifyListeners.getLength() == 0 )
+ return;
+
+ EventObject aModifyEvent( m_rEventSource );
+ m_aModifyListeners.notifyEach( &XModifyListener::modified, aModifyEvent );
+}
+
+//============================================================================
+
+// Implementation class SfxLibraryContainer
+DBG_NAME( SfxLibraryContainer )
+
+// Ctor
+SfxLibraryContainer::SfxLibraryContainer( void )
+ : LibraryContainerHelper( maMutex )
+ , mbVBACompat( sal_False )
+ , maModifiable( *this, maMutex )
+ , maNameContainer( getCppuType( (Reference< XNameAccess >*) NULL ) )
+ , mbOldInfoFormat( sal_False )
+ , mbOasis2OOoFormat( sal_False )
+ , mpBasMgr( NULL )
+ , mbOwnBasMgr( sal_False )
+{
+ DBG_CTOR( SfxLibraryContainer, NULL );
+
+ mxMSF = comphelper::getProcessServiceFactory();
+ if( !mxMSF.is() )
+ {
+ OSL_ENSURE( 0, "### couln't get ProcessServiceFactory\n" );
+ }
+
+ mxSFI = Reference< XSimpleFileAccess >( mxMSF->createInstance
+ ( OUString::createFromAscii( "com.sun.star.ucb.SimpleFileAccess" ) ), UNO_QUERY );
+ if( !mxSFI.is() )
+ {
+ OSL_ENSURE( 0, "### couln't create SimpleFileAccess component\n" );
+ }
+
+ mxStringSubstitution = Reference< XStringSubstitution >( mxMSF->createInstance
+ ( OUString::createFromAscii( "com.sun.star.util.PathSubstitution" ) ), UNO_QUERY );
+ if( !mxStringSubstitution.is() )
+ {
+ OSL_ENSURE( 0, "### couln't create PathSubstitution component\n" );
+ }
+}
+
+SfxLibraryContainer::~SfxLibraryContainer()
+{
+ if( mbOwnBasMgr )
+ BasicManager::LegacyDeleteBasicManager( mpBasMgr );
+ DBG_DTOR( SfxLibraryContainer, NULL );
+}
+
+void SfxLibraryContainer::checkDisposed() const
+{
+ if ( isDisposed() )
+ throw DisposedException( ::rtl::OUString(), *const_cast< SfxLibraryContainer* >( this ) );
+}
+
+void SfxLibraryContainer::enterMethod()
+{
+ maMutex.acquire();
+ checkDisposed();
+}
+
+void SfxLibraryContainer::leaveMethod()
+{
+ maMutex.release();
+}
+
+BasicManager* SfxLibraryContainer::getBasicManager( void )
+{
+ if ( mpBasMgr )
+ return mpBasMgr;
+
+ Reference< XModel > xDocument( mxOwnerDocument.get(), UNO_QUERY );
+ OSL_ENSURE( xDocument.is(), "SfxLibraryContainer::getBasicManager: cannot obtain a BasicManager without document!" );
+ if ( xDocument.is() )
+ mpBasMgr = BasicManagerRepository::getDocumentBasicManager( xDocument );
+
+ return mpBasMgr;
+}
+
+// Methods XStorageBasedLibraryContainer
+Reference< XStorage > SAL_CALL SfxLibraryContainer::getRootStorage() throw (RuntimeException)
+{
+ LibraryContainerMethodGuard aGuard( *this );
+ return mxStorage;
+}
+
+void SAL_CALL SfxLibraryContainer::setRootStorage( const Reference< XStorage >& _rxRootStorage ) throw (IllegalArgumentException, RuntimeException)
+{
+ LibraryContainerMethodGuard aGuard( *this );
+ if ( !_rxRootStorage.is() )
+ throw IllegalArgumentException();
+
+ mxStorage = _rxRootStorage;
+ onNewRootStorage();
+}
+
+void SAL_CALL SfxLibraryContainer::storeLibrariesToStorage( const Reference< XStorage >& _rxRootStorage ) throw (IllegalArgumentException, WrappedTargetException, RuntimeException)
+{
+ LibraryContainerMethodGuard aGuard( *this );
+ if ( !_rxRootStorage.is() )
+ throw IllegalArgumentException();
+
+ try
+ {
+ storeLibraries_Impl( _rxRootStorage, sal_True );
+ }
+ catch( const Exception& )
+ {
+ throw WrappedTargetException( ::rtl::OUString(), *this, ::cppu::getCaughtException() );
+ }
+}
+
+
+// Methods XModifiable
+sal_Bool SfxLibraryContainer::isModified() throw (RuntimeException)
+{
+ LibraryContainerMethodGuard aGuard( *this );
+ if ( maModifiable.isModified() )
+ return sal_True;
+
+ // the library container is not modified, go through the libraries and check whether they are modified
+ Sequence< OUString > aNames = maNameContainer.getElementNames();
+ const OUString* pNames = aNames.getConstArray();
+ sal_Int32 nNameCount = aNames.getLength();
+
+ for( sal_Int32 i = 0 ; i < nNameCount ; i++ )
+ {
+ OUString aName = pNames[ i ];
+ SfxLibrary* pImplLib = getImplLib( aName );
+ if( pImplLib->isModified() )
+ {
+ if ( aName.equals( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Standard") ) ) )
+ {
+ // this is a workaround that has to be implemented because
+ // empty standard library should stay marked as modified
+ // but should not be treated as modified while it is empty
+ if ( pImplLib->hasElements() )
+ return sal_True;
+ }
+ else
+ return sal_True;
+ }
+ }
+
+ return sal_False;
+}
+
+void SAL_CALL SfxLibraryContainer::setModified( sal_Bool _bModified ) throw (PropertyVetoException, RuntimeException)
+{
+ LibraryContainerMethodGuard aGuard( *this );
+ maModifiable.setModified( _bModified );
+}
+
+void SAL_CALL SfxLibraryContainer::addModifyListener( const Reference< XModifyListener >& _rxListener ) throw (RuntimeException)
+{
+ LibraryContainerMethodGuard aGuard( *this );
+ maModifiable.addModifyListener( _rxListener );
+}
+
+void SAL_CALL SfxLibraryContainer::removeModifyListener( const Reference< XModifyListener >& _rxListener ) throw (RuntimeException)
+{
+ LibraryContainerMethodGuard aGuard( *this );
+ maModifiable.removeModifyListener( _rxListener );
+}
+
+// Methods XPersistentLibraryContainer
+Any SAL_CALL SfxLibraryContainer::getRootLocation() throw (RuntimeException)
+{
+ LibraryContainerMethodGuard aGuard( *this );
+ return makeAny( getRootStorage() );
+}
+
+::rtl::OUString SAL_CALL SfxLibraryContainer::getContainerLocationName() throw (RuntimeException)
+{
+ LibraryContainerMethodGuard aGuard( *this );
+ return maLibrariesDir;
+}
+
+void SAL_CALL SfxLibraryContainer::storeLibraries( ) throw (WrappedTargetException, RuntimeException)
+{
+ LibraryContainerMethodGuard aGuard( *this );
+ try
+ {
+ storeLibraries_Impl( mxStorage, mxStorage.is() );
+ // we need to store *all* libraries if and only if we are based on a storage:
+ // in this case, storeLibraries_Impl will remove the source storage, after loading
+ // all libraries, so we need to force them to be stored, again
+ }
+ catch( const Exception& )
+ {
+ throw WrappedTargetException( ::rtl::OUString(), *this, ::cppu::getCaughtException() );
+ }
+}
+
+static void checkAndCopyFileImpl( const INetURLObject& rSourceFolderInetObj,
+ const INetURLObject& rTargetFolderInetObj,
+ const OUString& rCheckFileName,
+ const OUString& rCheckExtension,
+ Reference< XSimpleFileAccess > xSFI )
+{
+ INetURLObject aTargetFolderInetObj( rTargetFolderInetObj );
+ aTargetFolderInetObj.insertName( rCheckFileName, sal_True, INetURLObject::LAST_SEGMENT,
+ sal_True, INetURLObject::ENCODE_ALL );
+ aTargetFolderInetObj.setExtension( rCheckExtension );
+ OUString aTargetFile = aTargetFolderInetObj.GetMainURL( INetURLObject::NO_DECODE );
+ if( !xSFI->exists( aTargetFile ) )
+ {
+ INetURLObject aSourceFolderInetObj( rSourceFolderInetObj );
+ aSourceFolderInetObj.insertName( rCheckFileName, sal_True, INetURLObject::LAST_SEGMENT,
+ sal_True, INetURLObject::ENCODE_ALL );
+ aSourceFolderInetObj.setExtension( rCheckExtension );
+ OUString aSourceFile = aSourceFolderInetObj.GetMainURL( INetURLObject::NO_DECODE );
+ xSFI->copy( aSourceFile, aTargetFile );
+ }
+}
+
+static void createVariableURL( OUString& rStr, const OUString& rLibName,
+ const OUString& rInfoFileName, bool bUser )
+{
+ if( bUser )
+ rStr = OUString::createFromAscii( "$(USER)/basic/" );
+ else
+ rStr = OUString::createFromAscii( "$(INST)/share/basic/" );
+
+ rStr += rLibName;
+ rStr += OUString::createFromAscii( "/" );
+ rStr += rInfoFileName;
+ rStr += OUString::createFromAscii( ".xlb/" );
+}
+
+sal_Bool SfxLibraryContainer::init( const OUString& rInitialDocumentURL, const uno::Reference< embed::XStorage >& rxInitialStorage )
+{
+ // this might be called from within the ctor, and the impl_init might (indirectly) create
+ // an UNO reference to ourself.
+ // Ensure that we're not destroyed while we're in here
+ osl_incrementInterlockedCount( &m_refCount );
+ sal_Bool bSuccess = init_Impl( rInitialDocumentURL, rxInitialStorage );
+ osl_decrementInterlockedCount( &m_refCount );
+
+ return bSuccess;
+}
+
+sal_Bool SfxLibraryContainer::init_Impl(
+ const OUString& rInitialDocumentURL, const uno::Reference< embed::XStorage >& rxInitialStorage )
+{
+ uno::Reference< embed::XStorage > xStorage = rxInitialStorage;
+
+ maInitialDocumentURL = rInitialDocumentURL;
+ maInfoFileName = OUString::createFromAscii( getInfoFileName() );
+ maOldInfoFileName = OUString::createFromAscii( getOldInfoFileName() );
+ maLibElementFileExtension = OUString::createFromAscii( getLibElementFileExtension() );
+ maLibrariesDir = OUString::createFromAscii( getLibrariesDir() );
+
+ meInitMode = DEFAULT;
+ INetURLObject aInitUrlInetObj( maInitialDocumentURL );
+ OUString aInitFileName = aInitUrlInetObj.GetMainURL( INetURLObject::NO_DECODE );
+ if( aInitFileName.getLength() )
+ {
+ // We need a BasicManager to avoid problems
+ StarBASIC* pBas = new StarBASIC();
+ mpBasMgr = new BasicManager( pBas );
+ mbOwnBasMgr = sal_True;
+
+ OUString aExtension = aInitUrlInetObj.getExtension();
+ if( aExtension.compareToAscii( "xlc" ) == COMPARE_EQUAL )
+ {
+ meInitMode = CONTAINER_INIT_FILE;
+ INetURLObject aLibPathInetObj( aInitUrlInetObj );
+ aLibPathInetObj.removeSegment();
+ maLibraryPath = aLibPathInetObj.GetMainURL( INetURLObject::NO_DECODE );
+ }
+ else if( aExtension.compareToAscii( "xlb" ) == COMPARE_EQUAL )
+ {
+ meInitMode = LIBRARY_INIT_FILE;
+ uno::Reference< embed::XStorage > xDummyStor;
+ ::xmlscript::LibDescriptor aLibDesc;
+ sal_Bool bReadIndexFile = implLoadLibraryIndexFile( NULL, aLibDesc, xDummyStor, aInitFileName );
+ return bReadIndexFile;
+ }
+ else
+ {
+ // Decide between old and new document
+ sal_Bool bOldStorage = SotStorage::IsOLEStorage( aInitFileName );
+ if ( bOldStorage )
+ {
+ meInitMode = OLD_BASIC_STORAGE;
+ importFromOldStorage( aInitFileName );
+ return sal_True;
+ }
+ else
+ {
+ meInitMode = OFFICE_DOCUMENT;
+ try
+ {
+ xStorage = ::comphelper::OStorageHelper::GetStorageFromURL( aInitFileName, embed::ElementModes::READ );
+ }
+ catch ( uno::Exception& )
+ {
+ // TODO: error handling
+ }
+ }
+ }
+ }
+ else
+ {
+ // Default pathes
+ maLibraryPath = SvtPathOptions().GetBasicPath();
+ }
+
+ Reference< XParser > xParser( mxMSF->createInstance(
+ OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.xml.sax.Parser") ) ), UNO_QUERY );
+ if( !xParser.is() )
+ {
+ OSL_ENSURE( 0, "### couln't create sax parser component\n" );
+ return sal_False;
+ }
+
+ uno::Reference< io::XInputStream > xInput;
+
+ mxStorage = xStorage;
+ sal_Bool bStorage = mxStorage.is();
+
+
+ // #110009: Scope to force the StorageRefs to be destructed and
+ // so the streams to be closed before the preload operation
+ {
+ // #110009
+
+ uno::Reference< embed::XStorage > xLibrariesStor;
+ String aFileName;
+
+ int nPassCount = 1;
+ if( !bStorage && meInitMode == DEFAULT )
+ nPassCount = 2;
+ for( int nPass = 0 ; nPass < nPassCount ; nPass++ )
+ {
+ if( bStorage )
+ {
+ OSL_ENSURE( meInitMode == DEFAULT || meInitMode == OFFICE_DOCUMENT,
+ "### Wrong InitMode for document\n" );
+ try
+ {
+ uno::Reference< io::XStream > xStream;
+ xLibrariesStor = xStorage->openStorageElement( maLibrariesDir, embed::ElementModes::READ );
+ //if ( !xLibrariesStor.is() )
+ // TODO: the method must either return a storage or throw an exception
+ //throw uno::RuntimeException();
+
+ if ( xLibrariesStor.is() )
+ {
+ aFileName = maInfoFileName;
+ aFileName += String( RTL_CONSTASCII_USTRINGPARAM("-lc.xml") );
+
+ try
+ {
+ xStream = xLibrariesStor->openStreamElement( aFileName, embed::ElementModes::READ );
+ }
+ catch( uno::Exception& )
+ {}
+
+ if( !xStream.is() )
+ {
+ mbOldInfoFormat = true;
+
+ // Check old version
+ aFileName = maOldInfoFileName;
+ aFileName += String( RTL_CONSTASCII_USTRINGPARAM(".xml") );
+
+ try
+ {
+ xStream = xLibrariesStor->openStreamElement( aFileName, embed::ElementModes::READ );
+ }
+ catch( uno::Exception& )
+ {}
+
+ if( !xStream.is() )
+ {
+ // Check for EA2 document version with wrong extensions
+ aFileName = maOldInfoFileName;
+ aFileName += String( RTL_CONSTASCII_USTRINGPARAM(".xli") );
+ xStream = xLibrariesStor->openStreamElement( aFileName, embed::ElementModes::READ );
+ }
+ }
+ }
+
+ if ( xStream.is() )
+ xInput = xStream->getInputStream();
+ }
+ catch( uno::Exception& )
+ {
+ // TODO: error handling?
+ }
+ }
+ else
+ {
+ INetURLObject* pLibInfoInetObj = NULL;
+ if( meInitMode == CONTAINER_INIT_FILE )
+ {
+ aFileName = aInitFileName;
+ }
+ else
+ {
+ if( nPass == 1 )
+ pLibInfoInetObj = new INetURLObject( String(maLibraryPath).GetToken(0) );
+ else
+ pLibInfoInetObj = new INetURLObject( String(maLibraryPath).GetToken(1) );
+ pLibInfoInetObj->insertName( maInfoFileName, sal_True, INetURLObject::LAST_SEGMENT, sal_True, INetURLObject::ENCODE_ALL );
+ pLibInfoInetObj->setExtension( OUString( RTL_CONSTASCII_USTRINGPARAM("xlc") ) );
+ aFileName = pLibInfoInetObj->GetMainURL( INetURLObject::NO_DECODE );
+ }
+
+ try
+ {
+ xInput = mxSFI->openFileRead( aFileName );
+ }
+ catch( Exception& )
+ {
+ xInput.clear();
+ if( nPass == 0 )
+ {
+ SfxErrorContext aEc( ERRCTX_SFX_LOADBASIC, aFileName );
+ ULONG nErrorCode = ERRCODE_IO_GENERAL;
+ ErrorHandler::HandleError( nErrorCode );
+ }
+ }
+
+ // Old variant?
+ if( !xInput.is() && nPass == 0 )
+ {
+ INetURLObject aLibInfoInetObj( String(maLibraryPath).GetToken(1) );
+ aLibInfoInetObj.insertName( maOldInfoFileName, sal_True, INetURLObject::LAST_SEGMENT, sal_True, INetURLObject::ENCODE_ALL );
+ aLibInfoInetObj.setExtension( OUString( RTL_CONSTASCII_USTRINGPARAM("xli") ) );
+ aFileName = aLibInfoInetObj.GetMainURL( INetURLObject::NO_DECODE );
+
+ try
+ {
+ xInput = mxSFI->openFileRead( aFileName );
+ mbOldInfoFormat = true;
+ }
+ catch( Exception& )
+ {
+ xInput.clear();
+ SfxErrorContext aEc( ERRCTX_SFX_LOADBASIC, aFileName );
+ ULONG nErrorCode = ERRCODE_IO_GENERAL;
+ ErrorHandler::HandleError( nErrorCode );
+ }
+ }
+
+ delete pLibInfoInetObj;
+ }
+
+ if( xInput.is() )
+ {
+ InputSource source;
+ source.aInputStream = xInput;
+ source.sSystemId = aFileName;
+
+ // start parsing
+ ::xmlscript::LibDescriptorArray* pLibArray = new ::xmlscript::LibDescriptorArray();
+
+ try
+ {
+ xParser->setDocumentHandler( ::xmlscript::importLibraryContainer( pLibArray ) );
+ xParser->parseStream( source );
+ }
+ catch ( xml::sax::SAXException& e )
+ {
+ (void) e; // avoid warning
+ OSL_ENSURE( 0, OUStringToOString( e.Message, RTL_TEXTENCODING_ASCII_US ).getStr() );
+ return sal_False;
+ }
+ catch ( io::IOException& e )
+ {
+ (void) e; // avoid warning
+ OSL_ENSURE( 0, OUStringToOString( e.Message, RTL_TEXTENCODING_ASCII_US ).getStr() );
+ return sal_False;
+ }
+
+ sal_Int32 nLibCount = pLibArray->mnLibCount;
+ for( sal_Int32 i = 0 ; i < nLibCount ; i++ )
+ {
+ ::xmlscript::LibDescriptor& rLib = pLibArray->mpLibs[i];
+
+ // Check storage URL
+ OUString aStorageURL = rLib.aStorageURL;
+ if( !bStorage && !aStorageURL.getLength() && nPass == 0 )
+ {
+ String aLibraryPath;
+ if( meInitMode == CONTAINER_INIT_FILE )
+ aLibraryPath = maLibraryPath;
+ else
+ aLibraryPath = String(maLibraryPath).GetToken(1);
+ INetURLObject aInetObj( aLibraryPath );
+
+ aInetObj.insertName( rLib.aName, sal_True, INetURLObject::LAST_SEGMENT,
+ sal_True, INetURLObject::ENCODE_ALL );
+ OUString aLibDirPath = aInetObj.GetMainURL( INetURLObject::NO_DECODE );
+ if( mxSFI->isFolder( aLibDirPath ) )
+ {
+ createVariableURL( rLib.aStorageURL, rLib.aName, maInfoFileName, true );
+ maModifiable.setModified( sal_True );
+ }
+ else if( rLib.bLink )
+ {
+ // Check "share" path
+ INetURLObject aShareInetObj( String(maLibraryPath).GetToken(0) );
+ aShareInetObj.insertName( rLib.aName, sal_True, INetURLObject::LAST_SEGMENT,
+ sal_True, INetURLObject::ENCODE_ALL );
+ OUString aShareLibDirPath = aShareInetObj.GetMainURL( INetURLObject::NO_DECODE );
+ if( mxSFI->isFolder( aShareLibDirPath ) )
+ {
+ createVariableURL( rLib.aStorageURL, rLib.aName, maInfoFileName, false );
+ maModifiable.setModified( sal_True );
+ }
+ else
+ {
+ // #i25537: Ignore lib if library folder does not really exist
+ continue;
+ }
+ }
+ }
+
+ OUString aLibName = rLib.aName;
+
+ // If the same library name is used by the shared and the
+ // user lib container index files the user file wins
+ if( nPass == 1 && hasByName( aLibName ) )
+ continue;
+
+ SfxLibrary* pImplLib;
+ if( rLib.bLink )
+ {
+ Reference< XNameAccess > xLib =
+ createLibraryLink( aLibName, rLib.aStorageURL, rLib.bReadOnly );
+ pImplLib = static_cast< SfxLibrary* >( xLib.get() );
+ }
+ else
+ {
+ Reference< XNameContainer > xLib = createLibrary( aLibName );
+ pImplLib = static_cast< SfxLibrary* >( xLib.get() );
+ pImplLib->mbLoaded = sal_False;
+ pImplLib->mbReadOnly = rLib.bReadOnly;
+ if( !bStorage )
+ checkStorageURL( rLib.aStorageURL, pImplLib->maLibInfoFileURL,
+ pImplLib->maStorageURL, pImplLib->maUnexpandedStorageURL );
+ }
+ maModifiable.setModified( sal_False );
+
+ // Read library info files
+ if( !mbOldInfoFormat )
+ {
+ uno::Reference< embed::XStorage > xLibraryStor;
+ if( !pImplLib->mbInitialised && bStorage )
+ {
+ try {
+ xLibraryStor = xLibrariesStor->openStorageElement( rLib.aName,
+ embed::ElementModes::READ );
+ }
+ catch( uno::Exception& )
+ {
+ #if OSL_DEBUG_LEVEL > 0
+ Any aError( ::cppu::getCaughtException() );
+ ::rtl::OStringBuffer aMessage;
+ aMessage.append( "couln't open sub storage for library '" );
+ aMessage.append( ::rtl::OUStringToOString( rLib.aName, osl_getThreadTextEncoding() ) );
+ aMessage.append( "'.\n\nException:" );
+ aMessage.append( ::rtl::OUStringToOString( ::comphelper::anyToString( aError ), osl_getThreadTextEncoding() ) );
+ OSL_ENSURE( false, aMessage.makeStringAndClear().getStr() );
+ #endif
+ }
+ }
+
+ // Link is already initialised in createLibraryLink()
+ if( !pImplLib->mbInitialised && (!bStorage || xLibraryStor.is()) )
+ {
+ OUString aIndexFileName;
+ sal_Bool bLoaded = implLoadLibraryIndexFile( pImplLib, rLib, xLibraryStor, aIndexFileName );
+ if( bLoaded && aLibName != rLib.aName )
+ {
+ OSL_ENSURE( 0, "Different library names in library"
+ " container and library info files!\n" );
+ }
+ if( GbMigrationSuppressErrors && !bLoaded )
+ removeLibrary( aLibName );
+ }
+ }
+ else if( !bStorage )
+ {
+ // Write new index file immediately because otherwise
+ // the library elements will be lost when storing into
+ // the new info format
+ uno::Reference< embed::XStorage > xTmpStorage;
+ implStoreLibraryIndexFile( pImplLib, rLib, xTmpStorage );
+ }
+
+ implImportLibDescriptor( pImplLib, rLib );
+
+ if( nPass == 1 )
+ {
+ pImplLib->mbSharedIndexFile = sal_True;
+ pImplLib->mbReadOnly = sal_True;
+ }
+ }
+
+ // Keep flag for documents to force writing the new index files
+ if( !bStorage )
+ mbOldInfoFormat = sal_False;
+
+ delete pLibArray;
+ }
+ // Only in the first pass it's an error when no index file is found
+ else if( nPass == 0 )
+ {
+ return sal_False;
+ }
+ }
+
+ // #110009: END Scope to force the StorageRefs to be destructed
+ }
+ // #110009
+
+ if( !bStorage && meInitMode == DEFAULT )
+ {
+ try
+ {
+ implScanExtensions();
+ }
+ catch( uno::Exception& )
+ {
+ // TODO: error handling?
+ OSL_ASSERT( "Cannot access extensions!" );
+ }
+ }
+
+ // #110009 Preload?
+ {
+ Sequence< OUString > aNames = maNameContainer.getElementNames();
+ const OUString* pNames = aNames.getConstArray();
+ sal_Int32 nNameCount = aNames.getLength();
+ for( sal_Int32 i = 0 ; i < nNameCount ; i++ )
+ {
+ OUString aName = pNames[ i ];
+ SfxLibrary* pImplLib = getImplLib( aName );
+ if( pImplLib->mbPreload )
+ loadLibrary( aName );
+ }
+ }
+
+ // #118803# upgrade installation 7.0 -> 8.0
+ if( meInitMode == DEFAULT )
+ {
+ INetURLObject aUserBasicInetObj( String(maLibraryPath).GetToken(1) );
+ OUString aStandardStr( RTL_CONSTASCII_USTRINGPARAM("Standard") );
+
+ static char strPrevFolderName_1[] = "__basic_80";
+ static char strPrevFolderName_2[] = "__basic_80_2";
+ INetURLObject aPrevUserBasicInetObj_1( aUserBasicInetObj );
+ aPrevUserBasicInetObj_1.removeSegment();
+ INetURLObject aPrevUserBasicInetObj_2 = aPrevUserBasicInetObj_1;
+ aPrevUserBasicInetObj_1.Append( strPrevFolderName_1 );
+ aPrevUserBasicInetObj_2.Append( strPrevFolderName_2 );
+
+ // #i93163
+ bool bCleanUp = false;
+ try
+ {
+ INetURLObject aPrevUserBasicInetObj = aPrevUserBasicInetObj_1;
+ String aPrevFolder = aPrevUserBasicInetObj.GetMainURL( INetURLObject::NO_DECODE );
+ bool bSecondTime = false;
+ if( mxSFI->isFolder( aPrevFolder ) )
+ {
+ // #110101 Check if Standard folder exists and is complete
+ INetURLObject aUserBasicStandardInetObj( aUserBasicInetObj );
+ aUserBasicStandardInetObj.insertName( aStandardStr, sal_True, INetURLObject::LAST_SEGMENT,
+ sal_True, INetURLObject::ENCODE_ALL );
+ INetURLObject aPrevUserBasicStandardInetObj( aPrevUserBasicInetObj );
+ aPrevUserBasicStandardInetObj.insertName( aStandardStr, sal_True, INetURLObject::LAST_SEGMENT,
+ sal_True, INetURLObject::ENCODE_ALL );
+ OUString aPrevStandardFolder = aPrevUserBasicStandardInetObj.GetMainURL( INetURLObject::NO_DECODE );
+ if( mxSFI->isFolder( aPrevStandardFolder ) )
+ {
+ OUString aXlbExtension( OUString( RTL_CONSTASCII_USTRINGPARAM("xlb") ) );
+ OUString aCheckFileName;
+
+ // Check if script.xlb exists
+ aCheckFileName = OUString( RTL_CONSTASCII_USTRINGPARAM("script") );
+ checkAndCopyFileImpl( aUserBasicStandardInetObj,
+ aPrevUserBasicStandardInetObj,
+ aCheckFileName, aXlbExtension, mxSFI );
+
+ // Check if dialog.xlb exists
+ aCheckFileName = OUString( RTL_CONSTASCII_USTRINGPARAM("dialog") );
+ checkAndCopyFileImpl( aUserBasicStandardInetObj,
+ aPrevUserBasicStandardInetObj,
+ aCheckFileName, aXlbExtension, mxSFI );
+
+ // Check if module1.xba exists
+ OUString aXbaExtension( OUString( RTL_CONSTASCII_USTRINGPARAM("xba") ) );
+ aCheckFileName = OUString( RTL_CONSTASCII_USTRINGPARAM("Module1") );
+ checkAndCopyFileImpl( aUserBasicStandardInetObj,
+ aPrevUserBasicStandardInetObj,
+ aCheckFileName, aXbaExtension, mxSFI );
+ }
+ else
+ {
+ String aStandardFolder = aUserBasicStandardInetObj.GetMainURL( INetURLObject::NO_DECODE );
+ mxSFI->copy( aStandardFolder, aPrevStandardFolder );
+ }
+
+ String aPrevCopyToFolder = aPrevUserBasicInetObj_2.GetMainURL( INetURLObject::NO_DECODE );
+ mxSFI->copy( aPrevFolder, aPrevCopyToFolder );
+ }
+ else
+ {
+ bSecondTime = true;
+ aPrevUserBasicInetObj = aPrevUserBasicInetObj_2;
+ aPrevFolder = aPrevUserBasicInetObj.GetMainURL( INetURLObject::NO_DECODE );
+ }
+ if( mxSFI->isFolder( aPrevFolder ) )
+ {
+ SfxLibraryContainer* pPrevCont = createInstanceImpl();
+ Reference< XInterface > xRef = static_cast< XInterface* >( static_cast< OWeakObject* >(pPrevCont) );
+
+ // Rename previous basic folder to make storage URLs correct during initialisation
+ String aFolderUserBasic = aUserBasicInetObj.GetMainURL( INetURLObject::NO_DECODE );
+ INetURLObject aUserBasicTmpInetObj( aUserBasicInetObj );
+ aUserBasicTmpInetObj.removeSegment();
+ aUserBasicTmpInetObj.Append( "__basic_tmp" );
+ String aFolderTmp = aUserBasicTmpInetObj.GetMainURL( INetURLObject::NO_DECODE );
+
+ mxSFI->move( aFolderUserBasic, aFolderTmp );
+ try
+ {
+ mxSFI->move( aPrevFolder, aFolderUserBasic );
+ }
+ catch( Exception& )
+ {
+ // Move back user/basic folder
+ try
+ {
+ mxSFI->kill( aFolderUserBasic );
+ }
+ catch( Exception& )
+ {}
+ mxSFI->move( aFolderTmp, aFolderUserBasic );
+ throw;
+ }
+
+ INetURLObject aPrevUserBasicLibInfoInetObj( aUserBasicInetObj );
+ aPrevUserBasicLibInfoInetObj.insertName( maInfoFileName, sal_True, INetURLObject::LAST_SEGMENT,
+ sal_True, INetURLObject::ENCODE_ALL );
+ aPrevUserBasicLibInfoInetObj.setExtension( OUString( RTL_CONSTASCII_USTRINGPARAM("xlc") ) );
+ OUString aLibInfoFileName = aPrevUserBasicLibInfoInetObj.GetMainURL( INetURLObject::NO_DECODE );
+ Sequence<Any> aInitSeq( 1 );
+ aInitSeq.getArray()[0] <<= aLibInfoFileName;
+ GbMigrationSuppressErrors = true;
+ pPrevCont->initialize( aInitSeq );
+ GbMigrationSuppressErrors = false;
+
+ // Rename folders back
+ mxSFI->move( aFolderUserBasic, aPrevFolder );
+ mxSFI->move( aFolderTmp, aFolderUserBasic );
+
+ OUString aUserSearchStr = OUString::createFromAscii( "vnd.sun.star.expand:$UNO_USER_PACKAGES_CACHE" );
+ OUString aSharedSearchStr = OUString::createFromAscii( "vnd.sun.star.expand:$UNO_SHARED_PACKAGES_CACHE" );
+ OUString aBundledSearchStr = OUString::createFromAscii( "vnd.sun.star.expand:$BUNDLED_EXTENSIONS" );
+ OUString aInstSearchStr = OUString::createFromAscii( "$(INST)" );
+
+ Sequence< OUString > aNames = pPrevCont->getElementNames();
+ const OUString* pNames = aNames.getConstArray();
+ sal_Int32 nNameCount = aNames.getLength();
+
+ for( sal_Int32 i = 0 ; i < nNameCount ; i++ )
+ {
+ OUString aLibName = pNames[ i ];
+ if( hasByName( aLibName ) )
+ {
+ if( aLibName == aStandardStr )
+ {
+ SfxLibrary* pImplLib = getImplLib( aStandardStr );
+ INetURLObject aStandardFolderInetObj( pImplLib->maStorageURL );
+ String aStandardFolder = pImplLib->maStorageURL;
+ mxSFI->kill( aStandardFolder );
+ }
+ else
+ {
+ continue;
+ }
+ }
+
+ SfxLibrary* pImplLib = pPrevCont->getImplLib( aLibName );
+ if( pImplLib->mbLink )
+ {
+ OUString aStorageURL = pImplLib->maUnexpandedStorageURL;
+ bool bCreateLink = true;
+ if( aStorageURL.indexOf( aUserSearchStr ) != -1 ||
+ aStorageURL.indexOf( aSharedSearchStr ) != -1 ||
+ aStorageURL.indexOf( aBundledSearchStr ) != -1 ||
+ aStorageURL.indexOf( aInstSearchStr ) != -1 )
+ {
+ bCreateLink = false;
+ }
+ if( bCreateLink )
+ createLibraryLink( aLibName, pImplLib->maStorageURL, pImplLib->mbReadOnly );
+ }
+ else
+ {
+ // Move folder if not already done
+ INetURLObject aUserBasicLibFolderInetObj( aUserBasicInetObj );
+ aUserBasicLibFolderInetObj.Append( aLibName );
+ String aLibFolder = aUserBasicLibFolderInetObj.GetMainURL( INetURLObject::NO_DECODE );
+
+ INetURLObject aPrevUserBasicLibFolderInetObj( aPrevUserBasicInetObj );
+ aPrevUserBasicLibFolderInetObj.Append( aLibName );
+ String aPrevLibFolder = aPrevUserBasicLibFolderInetObj.GetMainURL( INetURLObject::NO_DECODE );
+
+ if( mxSFI->isFolder( aPrevLibFolder ) && !mxSFI->isFolder( aLibFolder ) )
+ mxSFI->move( aPrevLibFolder, aLibFolder );
+
+ if( aLibName == aStandardStr )
+ maNameContainer.removeByName( aLibName );
+
+ // Create library
+ Reference< XNameContainer > xLib = createLibrary( aLibName );
+ SfxLibrary* pNewLib = static_cast< SfxLibrary* >( xLib.get() );
+ pNewLib->mbLoaded = false;
+ pNewLib->implSetModified( sal_False );
+ checkStorageURL( aLibFolder, pNewLib->maLibInfoFileURL,
+ pNewLib->maStorageURL, pNewLib->maUnexpandedStorageURL );
+
+ uno::Reference< embed::XStorage > xDummyStor;
+ ::xmlscript::LibDescriptor aLibDesc;
+ /*sal_Bool bReadIndexFile =*/ implLoadLibraryIndexFile
+ ( pNewLib, aLibDesc, xDummyStor, pNewLib->maLibInfoFileURL );
+ implImportLibDescriptor( pNewLib, aLibDesc );
+ }
+ }
+ mxSFI->kill( aPrevFolder );
+ }
+ }
+ catch( Exception& )
+ {
+ bCleanUp = true;
+ }
+
+ // #i93163
+ if( bCleanUp )
+ {
+ DBG_ERROR( "Upgrade of Basic installation failed somehow" );
+
+ static char strErrorSavFolderName[] = "__basic_80_err";
+ INetURLObject aPrevUserBasicInetObj_Err( aUserBasicInetObj );
+ aPrevUserBasicInetObj_Err.removeSegment();
+ aPrevUserBasicInetObj_Err.Append( strErrorSavFolderName );
+ String aPrevFolder_Err = aPrevUserBasicInetObj_Err.GetMainURL( INetURLObject::NO_DECODE );
+
+ bool bSaved = false;
+ try
+ {
+ String aPrevFolder_1 = aPrevUserBasicInetObj_1.GetMainURL( INetURLObject::NO_DECODE );
+ if( mxSFI->isFolder( aPrevFolder_1 ) )
+ {
+ mxSFI->move( aPrevFolder_1, aPrevFolder_Err );
+ bSaved = true;
+ }
+ }
+ catch( Exception& )
+ {}
+ try
+ {
+ String aPrevFolder_2 = aPrevUserBasicInetObj_2.GetMainURL( INetURLObject::NO_DECODE );
+ if( !bSaved && mxSFI->isFolder( aPrevFolder_2 ) )
+ mxSFI->move( aPrevFolder_2, aPrevFolder_Err );
+ else
+ mxSFI->kill( aPrevFolder_2 );
+ }
+ catch( Exception& )
+ {}
+ }
+ }
+
+ return sal_True;
+}
+
+void SfxLibraryContainer::implScanExtensions( void )
+{
+ ScriptExtensionIterator aScriptIt;
+ rtl::OUString aLibURL;
+
+ bool bPureDialogLib = false;
+ while( (aLibURL = aScriptIt.nextBasicOrDialogLibrary( bPureDialogLib )).getLength() > 0 )
+ {
+ if( bPureDialogLib && maInfoFileName.equalsAscii( "script" ) )
+ continue;
+
+ // Extract lib name
+ sal_Int32 nLen = aLibURL.getLength();
+ sal_Int32 indexLastSlash = aLibURL.lastIndexOf( '/' );
+ sal_Int32 nReduceCopy = 0;
+ if( indexLastSlash == nLen - 1 )
+ {
+ nReduceCopy = 1;
+ indexLastSlash = aLibURL.lastIndexOf( '/', nLen - 1 );
+ }
+
+ OUString aLibName = aLibURL.copy( indexLastSlash + 1, nLen - indexLastSlash - nReduceCopy - 1 );
+
+ // If a library of the same exists the existing library wins
+ if( hasByName( aLibName ) )
+ continue;
+
+ // Add index file to URL
+ OUString aIndexFileURL = aLibURL;
+ if( nReduceCopy == 0 )
+ aIndexFileURL += OUString::createFromAscii( "/" );
+ aIndexFileURL += maInfoFileName;
+ aIndexFileURL += OUString::createFromAscii( ".xlb" );
+
+ // Create link
+ const bool bReadOnly = false;
+ Reference< XNameAccess > xLib =
+ createLibraryLink( aLibName, aIndexFileURL, bReadOnly );
+ }
+}
+
+// Handle maLibInfoFileURL and maStorageURL correctly
+void SfxLibraryContainer::checkStorageURL( const OUString& aSourceURL,
+ OUString& aLibInfoFileURL, OUString& aStorageURL, OUString& aUnexpandedStorageURL )
+{
+ OUString aExpandedSourceURL = expand_url( aSourceURL );
+ if( aExpandedSourceURL != aSourceURL )
+ aUnexpandedStorageURL = aSourceURL;
+
+ INetURLObject aInetObj( aExpandedSourceURL );
+ OUString aExtension = aInetObj.getExtension();
+ if( aExtension.compareToAscii( "xlb" ) == COMPARE_EQUAL )
+ {
+ // URL to xlb file
+ aLibInfoFileURL = aExpandedSourceURL;
+ aInetObj.removeSegment();
+ aStorageURL = aInetObj.GetMainURL( INetURLObject::NO_DECODE );
+ }
+ else
+ {
+ // URL to library folder
+ aStorageURL = aExpandedSourceURL;
+ aInetObj.insertName( maInfoFileName, sal_True, INetURLObject::LAST_SEGMENT, sal_True, INetURLObject::ENCODE_ALL );
+ aInetObj.setExtension( OUString( RTL_CONSTASCII_USTRINGPARAM("xlb") ) );
+ aLibInfoFileURL = aInetObj.GetMainURL( INetURLObject::NO_DECODE );
+ }
+}
+
+SfxLibrary* SfxLibraryContainer::getImplLib( const String& rLibraryName )
+{
+ Any aLibAny = maNameContainer.getByName( rLibraryName ) ;
+ Reference< XNameAccess > xNameAccess;
+ aLibAny >>= xNameAccess;
+ SfxLibrary* pImplLib = static_cast< SfxLibrary* >( xNameAccess.get() );
+ return pImplLib;
+}
+
+
+// Storing with password encryption
+
+// Empty implementation, avoids unneccesary implementation in dlgcont.cxx
+sal_Bool SfxLibraryContainer::implStorePasswordLibrary(
+ SfxLibrary*,
+ const OUString&,
+ const uno::Reference< embed::XStorage >&, const uno::Reference< task::XInteractionHandler >& )
+{
+ return sal_False;
+}
+
+sal_Bool SfxLibraryContainer::implStorePasswordLibrary(
+ SfxLibrary* /*pLib*/,
+ const ::rtl::OUString& /*aName*/,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& /*xStorage*/,
+ const ::rtl::OUString& /*aTargetURL*/,
+ const Reference< XSimpleFileAccess > /*xToUseSFI*/,
+ const uno::Reference< task::XInteractionHandler >& )
+{
+ return sal_False;
+}
+
+sal_Bool SfxLibraryContainer::implLoadPasswordLibrary(
+ SfxLibrary* /*pLib*/,
+ const OUString& /*Name*/,
+ sal_Bool /*bVerifyPasswordOnly*/ )
+throw(WrappedTargetException, RuntimeException)
+{
+ return sal_True;
+}
+
+
+
+#define EXPAND_PROTOCOL "vnd.sun.star.expand"
+#define OUSTR(x) ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(x) )
+
+OUString SfxLibraryContainer::createAppLibraryFolder
+ ( SfxLibrary* pLib, const OUString& aName )
+{
+ OUString aLibDirPath = pLib->maStorageURL;
+ if( !aLibDirPath.getLength() )
+ {
+ INetURLObject aInetObj( String(maLibraryPath).GetToken(1) );
+ aInetObj.insertName( aName, sal_True, INetURLObject::LAST_SEGMENT, sal_True, INetURLObject::ENCODE_ALL );
+ checkStorageURL( aInetObj.GetMainURL( INetURLObject::NO_DECODE ), pLib->maLibInfoFileURL,
+ pLib->maStorageURL, pLib->maUnexpandedStorageURL );
+ aLibDirPath = pLib->maStorageURL;
+ }
+
+ if( !mxSFI->isFolder( aLibDirPath ) )
+ {
+ try
+ {
+ mxSFI->createFolder( aLibDirPath );
+ }
+ catch( Exception& )
+ {}
+ }
+
+ return aLibDirPath;
+}
+
+// Storing
+void SfxLibraryContainer::implStoreLibrary( SfxLibrary* pLib,
+ const OUString& aName, const uno::Reference< embed::XStorage >& xStorage )
+{
+ OUString aDummyLocation;
+ Reference< XSimpleFileAccess > xDummySFA;
+ Reference< XInteractionHandler > xDummyHandler;
+ implStoreLibrary( pLib, aName, xStorage, aDummyLocation, xDummySFA, xDummyHandler );
+}
+
+// New variant for library export
+void SfxLibraryContainer::implStoreLibrary( SfxLibrary* pLib,
+ const OUString& aName, const uno::Reference< embed::XStorage >& xStorage,
+ const ::rtl::OUString& aTargetURL, Reference< XSimpleFileAccess > xToUseSFI,
+ const Reference< XInteractionHandler >& xHandler )
+{
+ sal_Bool bLink = pLib->mbLink;
+ sal_Bool bStorage = xStorage.is() && !bLink;
+
+ Sequence< OUString > aElementNames = pLib->getElementNames();
+ sal_Int32 nNameCount = aElementNames.getLength();
+ const OUString* pNames = aElementNames.getConstArray();
+
+ if( bStorage )
+ {
+ for( sal_Int32 i = 0 ; i < nNameCount ; i++ )
+ {
+ OUString aElementName = pNames[ i ];
+
+ OUString aStreamName = aElementName;
+ aStreamName += String( RTL_CONSTASCII_USTRINGPARAM(".xml") );
+
+ /*Any aElement = pLib->getByName( aElementName );*/
+ if( !isLibraryElementValid( pLib->getByName( aElementName ) ) )
+ {
+ #if OSL_DEBUG_LEVEL > 0
+ ::rtl::OStringBuffer aMessage;
+ aMessage.append( "invalid library element '" );
+ aMessage.append( ::rtl::OUStringToOString( aElementName, osl_getThreadTextEncoding() ) );
+ aMessage.append( "'." );
+ OSL_ENSURE( false, aMessage.makeStringAndClear().getStr() );
+ #endif
+ continue;
+ }
+ try {
+ uno::Reference< io::XStream > xElementStream = xStorage->openStreamElement(
+ aStreamName,
+ embed::ElementModes::READWRITE );
+ //if ( !xElementStream.is() )
+ // throw uno::RuntimeException(); // TODO: method must either return the stream or throw an exception
+
+ String aPropName( String::CreateFromAscii( RTL_CONSTASCII_STRINGPARAM("MediaType") ) );
+ OUString aMime( RTL_CONSTASCII_USTRINGPARAM("text/xml") );
+
+ uno::Reference< beans::XPropertySet > xProps( xElementStream, uno::UNO_QUERY );
+ OSL_ENSURE( xProps.is(), "The StorageStream must implement XPropertySet interface!\n" );
+ //if ( !xProps.is() ) //TODO
+ // throw uno::RuntimeException();
+
+ if ( xProps.is() )
+ {
+ xProps->setPropertyValue( aPropName, uno::makeAny( aMime ) );
+
+ // #87671 Allow encryption
+//REMOVE aPropName = String::CreateFromAscii( RTL_CONSTASCII_STRINGPARAM("Encrypted") );
+ aPropName = String::CreateFromAscii( RTL_CONSTASCII_STRINGPARAM( "UseCommonStoragePasswordEncryption" ) );
+ xProps->setPropertyValue( aPropName, uno::makeAny( sal_True ) );
+
+ Reference< XOutputStream > xOutput = xElementStream->getOutputStream();
+ Reference< XNameContainer > xLib( pLib );
+ writeLibraryElement( xLib, aElementName, xOutput );
+ // writeLibraryElement closes the stream
+ // xOutput->closeOutput();
+ }
+ }
+ catch( uno::Exception& )
+ {
+ OSL_ENSURE( sal_False, "Problem during storing of library!\n" );
+ // TODO: error handling?
+ }
+ }
+
+ pLib->storeResourcesToStorage( xStorage );
+ }
+ else
+ {
+ // Export?
+ bool bExport = aTargetURL.getLength();
+ try
+ {
+ Reference< XSimpleFileAccess > xSFI = mxSFI;
+ if( xToUseSFI.is() )
+ xSFI = xToUseSFI;
+
+ OUString aLibDirPath;
+ if( bExport )
+ {
+ INetURLObject aInetObj( aTargetURL );
+ aInetObj.insertName( aName, sal_True, INetURLObject::LAST_SEGMENT, sal_True, INetURLObject::ENCODE_ALL );
+ aLibDirPath = aInetObj.GetMainURL( INetURLObject::NO_DECODE );
+
+ if( !xSFI->isFolder( aLibDirPath ) )
+ xSFI->createFolder( aLibDirPath );
+
+ pLib->storeResourcesToURL( aLibDirPath, xHandler );
+ }
+ else
+ {
+ aLibDirPath = createAppLibraryFolder( pLib, aName );
+ pLib->storeResources();
+ }
+
+ for( sal_Int32 i = 0 ; i < nNameCount ; i++ )
+ {
+ OUString aElementName = pNames[ i ];
+
+ INetURLObject aElementInetObj( aLibDirPath );
+ aElementInetObj.insertName( aElementName, sal_False,
+ INetURLObject::LAST_SEGMENT, sal_True, INetURLObject::ENCODE_ALL );
+ aElementInetObj.setExtension( maLibElementFileExtension );
+ String aElementPath( aElementInetObj.GetMainURL( INetURLObject::NO_DECODE ) );
+
+ /*Any aElement = pLib->getByName( aElementName );*/
+ if( !isLibraryElementValid( pLib->getByName( aElementName ) ) )
+ {
+ #if OSL_DEBUG_LEVEL > 0
+ ::rtl::OStringBuffer aMessage;
+ aMessage.append( "invalid library element '" );
+ aMessage.append( ::rtl::OUStringToOString( aElementName, osl_getThreadTextEncoding() ) );
+ aMessage.append( "'." );
+ OSL_ENSURE( false, aMessage.makeStringAndClear().getStr() );
+ #endif
+ continue;
+ }
+
+ // TODO: Check modified
+ try
+ {
+ if( xSFI->exists( aElementPath ) )
+ xSFI->kill( aElementPath );
+ Reference< XOutputStream > xOutput = xSFI->openFileWrite( aElementPath );
+ Reference< XNameContainer > xLib( pLib );
+ writeLibraryElement( xLib, aElementName, xOutput );
+ xOutput->closeOutput();
+ }
+ catch( Exception& )
+ {
+ if( bExport )
+ throw;
+
+ SfxErrorContext aEc( ERRCTX_SFX_SAVEDOC, aElementPath );
+ ULONG nErrorCode = ERRCODE_IO_GENERAL;
+ ErrorHandler::HandleError( nErrorCode );
+ }
+ }
+ }
+ catch( Exception& )
+ {
+ if( bExport )
+ throw;
+ }
+ }
+}
+
+void SfxLibraryContainer::implStoreLibraryIndexFile( SfxLibrary* pLib,
+ const ::xmlscript::LibDescriptor& rLib, const uno::Reference< embed::XStorage >& xStorage )
+{
+ OUString aDummyLocation;
+ Reference< XSimpleFileAccess > xDummySFA;
+ implStoreLibraryIndexFile( pLib, rLib, xStorage, aDummyLocation, xDummySFA );
+}
+
+// New variant for library export
+void SfxLibraryContainer::implStoreLibraryIndexFile( SfxLibrary* pLib,
+ const ::xmlscript::LibDescriptor& rLib, const uno::Reference< embed::XStorage >& xStorage,
+ const ::rtl::OUString& aTargetURL, Reference< XSimpleFileAccess > xToUseSFI )
+{
+ // Create sax writer
+ Reference< XExtendedDocumentHandler > xHandler(
+ mxMSF->createInstance(
+ OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.xml.sax.Writer") ) ), UNO_QUERY );
+ if( !xHandler.is() )
+ {
+ OSL_ENSURE( 0, "### couln't create sax-writer component\n" );
+ return;
+ }
+
+ sal_Bool bLink = pLib->mbLink;
+ sal_Bool bStorage = xStorage.is() && !bLink;
+
+ // Write info file
+ uno::Reference< io::XOutputStream > xOut;
+ uno::Reference< io::XStream > xInfoStream;
+ if( bStorage )
+ {
+ OUString aStreamName( maInfoFileName );
+ aStreamName += String( RTL_CONSTASCII_USTRINGPARAM("-lb.xml") );
+
+ try {
+ xInfoStream = xStorage->openStreamElement( aStreamName, embed::ElementModes::READWRITE );
+ OSL_ENSURE( xInfoStream.is(), "No stream!\n" );
+ uno::Reference< beans::XPropertySet > xProps( xInfoStream, uno::UNO_QUERY );
+ //if ( !xProps.is() )
+ // throw uno::RuntimeException(); // TODO
+
+ if ( xProps.is() )
+ {
+ String aPropName( String::CreateFromAscii( RTL_CONSTASCII_STRINGPARAM("MediaType") ) );
+ OUString aMime( RTL_CONSTASCII_USTRINGPARAM("text/xml") );
+ xProps->setPropertyValue( aPropName, uno::makeAny( aMime ) );
+
+ // #87671 Allow encryption
+//REMOVE aPropName = String::CreateFromAscii( RTL_CONSTASCII_STRINGPARAM("Encrypted") );
+ aPropName = String::CreateFromAscii( RTL_CONSTASCII_STRINGPARAM( "UseCommonStoragePasswordEncryption" ) );
+ xProps->setPropertyValue( aPropName, uno::makeAny( sal_True ) );
+
+ xOut = xInfoStream->getOutputStream();
+ }
+ }
+ catch( uno::Exception& )
+ {
+ OSL_ENSURE( sal_False, "Problem during storing of library index file!\n" );
+ // TODO: error handling?
+ }
+ }
+ else
+ {
+ // Export?
+ bool bExport = aTargetURL.getLength();
+ Reference< XSimpleFileAccess > xSFI = mxSFI;
+ if( xToUseSFI.is() )
+ xSFI = xToUseSFI;
+
+ OUString aLibInfoPath;
+ if( bExport )
+ {
+ INetURLObject aInetObj( aTargetURL );
+ aInetObj.insertName( rLib.aName, sal_True, INetURLObject::LAST_SEGMENT, sal_True, INetURLObject::ENCODE_ALL );
+ OUString aLibDirPath = aInetObj.GetMainURL( INetURLObject::NO_DECODE );
+ if( !xSFI->isFolder( aLibDirPath ) )
+ xSFI->createFolder( aLibDirPath );
+
+ aInetObj.insertName( maInfoFileName, sal_True, INetURLObject::LAST_SEGMENT, sal_True, INetURLObject::ENCODE_ALL );
+ aInetObj.setExtension( OUString( RTL_CONSTASCII_USTRINGPARAM("xlb") ) );
+ aLibInfoPath = aInetObj.GetMainURL( INetURLObject::NO_DECODE );
+ }
+ else
+ {
+ createAppLibraryFolder( pLib, rLib.aName );
+ aLibInfoPath = pLib->maLibInfoFileURL;
+ }
+
+ try
+ {
+ if( xSFI->exists( aLibInfoPath ) )
+ xSFI->kill( aLibInfoPath );
+ xOut = xSFI->openFileWrite( aLibInfoPath );
+ }
+ catch( Exception& )
+ {
+ if( bExport )
+ throw;
+
+ SfxErrorContext aEc( ERRCTX_SFX_SAVEDOC, aLibInfoPath );
+ ULONG nErrorCode = ERRCODE_IO_GENERAL;
+ ErrorHandler::HandleError( nErrorCode );
+ }
+ }
+ if( !xOut.is() )
+ {
+ OSL_ENSURE( 0, "### couln't open output stream\n" );
+ return;
+ }
+
+ Reference< XActiveDataSource > xSource( xHandler, UNO_QUERY );
+ xSource->setOutputStream( xOut );
+
+ xmlscript::exportLibrary( xHandler, rLib );
+}
+
+
+sal_Bool SfxLibraryContainer::implLoadLibraryIndexFile( SfxLibrary* pLib,
+ ::xmlscript::LibDescriptor& rLib, const uno::Reference< embed::XStorage >& xStorage, const OUString& aIndexFileName )
+{
+ Reference< XParser > xParser( mxMSF->createInstance(
+ OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.xml.sax.Parser") ) ), UNO_QUERY );
+ if( !xParser.is() )
+ {
+ OSL_ENSURE( 0, "### couln't create sax parser component\n" );
+ return sal_False;
+ }
+
+ sal_Bool bLink = sal_False;
+ sal_Bool bStorage = sal_False;
+ if( pLib )
+ {
+ bLink = pLib->mbLink;
+ bStorage = xStorage.is() && !bLink;
+ }
+
+ // Read info file
+ uno::Reference< io::XInputStream > xInput;
+ String aLibInfoPath;
+ if( bStorage )
+ {
+ aLibInfoPath = maInfoFileName;
+ aLibInfoPath += String( RTL_CONSTASCII_USTRINGPARAM("-lb.xml") );
+
+ try {
+ uno::Reference< io::XStream > xInfoStream =
+ xStorage->openStreamElement( aLibInfoPath, embed::ElementModes::READ );
+ xInput = xInfoStream->getInputStream();
+ }
+ catch( uno::Exception& )
+ {}
+ }
+ else
+ {
+ // Create Input stream
+ //String aLibInfoPath; // attention: THIS PROBLEM MUST BE REVIEWED BY SCRIPTING OWNER!!!
+
+ if( pLib )
+ {
+ createAppLibraryFolder( pLib, rLib.aName );
+ aLibInfoPath = pLib->maLibInfoFileURL;
+ }
+ else
+ aLibInfoPath = aIndexFileName;
+
+ try
+ {
+ xInput = mxSFI->openFileRead( aLibInfoPath );
+ }
+ catch( Exception& )
+ {
+ xInput.clear();
+ if( !GbMigrationSuppressErrors )
+ {
+ SfxErrorContext aEc( ERRCTX_SFX_LOADBASIC, aLibInfoPath );
+ ULONG nErrorCode = ERRCODE_IO_GENERAL;
+ ErrorHandler::HandleError( nErrorCode );
+ }
+ }
+ }
+ if( !xInput.is() )
+ {
+ // OSL_ENSURE( 0, "### couln't open input stream\n" );
+ return sal_False;
+ }
+
+ InputSource source;
+ source.aInputStream = xInput;
+ source.sSystemId = aLibInfoPath;
+
+ // start parsing
+ try {
+ xParser->setDocumentHandler( ::xmlscript::importLibrary( rLib ) );
+ xParser->parseStream( source );
+ }
+ catch( Exception& )
+ {
+ // throw WrappedTargetException( OUString::createFromAscii( "parsing error!\n" ),
+ // Reference< XInterface >(),
+ // makeAny( e ) );
+ OSL_ENSURE( 0, "Parsing error\n" );
+ SfxErrorContext aEc( ERRCTX_SFX_LOADBASIC, aLibInfoPath );
+ ULONG nErrorCode = ERRCODE_IO_GENERAL;
+ ErrorHandler::HandleError( nErrorCode );
+ return sal_False;
+ }
+
+ if( !pLib )
+ {
+ Reference< XNameContainer > xLib = createLibrary( rLib.aName );
+ pLib = static_cast< SfxLibrary* >( xLib.get() );
+ pLib->mbLoaded = sal_False;
+ rLib.aStorageURL = aIndexFileName;
+ checkStorageURL( rLib.aStorageURL, pLib->maLibInfoFileURL, pLib->maStorageURL,
+ pLib->maUnexpandedStorageURL );
+
+ implImportLibDescriptor( pLib, rLib );
+ }
+
+ return sal_True;
+}
+
+void SfxLibraryContainer::implImportLibDescriptor
+ ( SfxLibrary* pLib, ::xmlscript::LibDescriptor& rLib )
+{
+ if( !pLib->mbInitialised )
+ {
+ sal_Int32 nElementCount = rLib.aElementNames.getLength();
+ const OUString* pElementNames = rLib.aElementNames.getConstArray();
+ Any aDummyElement = createEmptyLibraryElement();
+ for( sal_Int32 i = 0 ; i < nElementCount ; i++ )
+ {
+ pLib->maNameContainer.insertByName( pElementNames[i], aDummyElement );
+ }
+ pLib->mbPasswordProtected = rLib.bPasswordProtected;
+ pLib->mbReadOnly = rLib.bReadOnly;
+ pLib->mbPreload = rLib.bPreload;
+ pLib->implSetModified( sal_False );
+
+ pLib->mbInitialised = sal_True;
+ }
+}
+
+
+// Methods of new XLibraryStorage interface?
+void SfxLibraryContainer::storeLibraries_Impl( const uno::Reference< embed::XStorage >& i_rStorage, sal_Bool bComplete )
+{
+ const Sequence< OUString > aNames = maNameContainer.getElementNames();
+ sal_Int32 nNameCount = aNames.getLength();
+ const OUString* pName = aNames.getConstArray();
+ const OUString* pNamesEnd = aNames.getConstArray() + nNameCount;
+
+ // Don't count libs from shared index file
+ sal_Int32 nLibsToSave = nNameCount;
+ for( ; pName != pNamesEnd; ++pName )
+ {
+ SfxLibrary* pImplLib = getImplLib( *pName );
+ if( pImplLib->mbSharedIndexFile || pImplLib->mbExtension )
+ nLibsToSave--;
+ }
+ if( !nLibsToSave )
+ return;
+
+ ::xmlscript::LibDescriptorArray* pLibArray = new ::xmlscript::LibDescriptorArray( nLibsToSave );
+
+ // Write to storage?
+ sal_Bool bStorage = i_rStorage.is();
+ uno::Reference< embed::XStorage > xSourceLibrariesStor;
+ uno::Reference< embed::XStorage > xTargetLibrariesStor;
+ ::rtl::OUString sTempTargetStorName;
+ const bool bInplaceStorage = bStorage && ( i_rStorage == mxStorage );
+ if ( bStorage )
+ {
+ // Don't write if only empty standard lib exists
+ if ( ( nNameCount == 1 ) && ( aNames[0].equalsAscii( "Standard" ) ) )
+ {
+ Any aLibAny = maNameContainer.getByName( aNames[0] );
+ Reference< XNameAccess > xNameAccess;
+ aLibAny >>= xNameAccess;
+ if ( !xNameAccess->hasElements() )
+ return;
+ }
+
+ // create the empty target storage
+ try
+ {
+ ::rtl::OUString sTargetLibrariesStoreName;
+ if ( bInplaceStorage )
+ {
+ // create a temporary target storage
+ const ::rtl::OUStringBuffer aTempTargetNameBase = maLibrariesDir + ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "_temp_" ) );
+ sal_Int32 index = 0;
+ do
+ {
+ ::rtl::OUStringBuffer aTempTargetName( aTempTargetNameBase );
+ aTempTargetName.append( index++ );
+
+ sTargetLibrariesStoreName = aTempTargetName.makeStringAndClear();
+ if ( !i_rStorage->hasByName( sTargetLibrariesStoreName ) )
+ break;
+ }
+ while ( true );
+ sTempTargetStorName = sTargetLibrariesStoreName;
+ }
+ else
+ {
+ sTargetLibrariesStoreName = maLibrariesDir;
+ if ( i_rStorage->hasByName( sTargetLibrariesStoreName ) )
+ i_rStorage->removeElement( sTargetLibrariesStoreName );
+ }
+
+ xTargetLibrariesStor.set( i_rStorage->openStorageElement( sTargetLibrariesStoreName, embed::ElementModes::READWRITE ), UNO_QUERY_THROW );
+ }
+ catch( const uno::Exception& )
+ {
+ DBG_UNHANDLED_EXCEPTION();
+ return;
+ }
+
+ // open the source storage which might be used to copy yet-unmodified libraries
+ try
+ {
+ if ( mxStorage->hasByName( maLibrariesDir ) )
+ xSourceLibrariesStor = mxStorage->openStorageElement( maLibrariesDir, bInplaceStorage ? embed::ElementModes::READWRITE : embed::ElementModes::READ );
+ else if ( bInplaceStorage )
+ xSourceLibrariesStor = mxStorage->openStorageElement( maLibrariesDir, embed::ElementModes::READWRITE );
+ }
+ catch( const uno::Exception& )
+ {
+ DBG_UNHANDLED_EXCEPTION();
+ return;
+ }
+ }
+
+ int iArray = 0;
+ pName = aNames.getConstArray();
+ ::xmlscript::LibDescriptor aLibDescriptorForExtensionLibs;
+ for( ; pName != pNamesEnd; ++pName )
+ {
+ SfxLibrary* pImplLib = getImplLib( *pName );
+ if( pImplLib->mbSharedIndexFile )
+ continue;
+ const bool bExtensionLib = pImplLib->mbExtension;
+ ::xmlscript::LibDescriptor& rLib = bExtensionLib ?
+ aLibDescriptorForExtensionLibs : pLibArray->mpLibs[iArray];
+ if( !bExtensionLib )
+ iArray++;
+ rLib.aName = *pName;
+
+ rLib.bLink = pImplLib->mbLink;
+ if( !bStorage || pImplLib->mbLink )
+ {
+ rLib.aStorageURL = ( pImplLib->maUnexpandedStorageURL.getLength() ) ?
+ pImplLib->maUnexpandedStorageURL : pImplLib->maLibInfoFileURL;
+ }
+ rLib.bReadOnly = pImplLib->mbReadOnly;
+ rLib.bPreload = pImplLib->mbPreload;
+ rLib.bPasswordProtected = pImplLib->mbPasswordProtected;
+ rLib.aElementNames = pImplLib->getElementNames();
+
+ if( pImplLib->implIsModified() || bComplete )
+ {
+ // Can we simply copy the storage?
+ if( !mbOldInfoFormat && !pImplLib->implIsModified() && !mbOasis2OOoFormat && xSourceLibrariesStor.is() )
+ {
+ try
+ {
+ xSourceLibrariesStor->copyElementTo( rLib.aName, xTargetLibrariesStor, rLib.aName );
+ }
+ catch( const uno::Exception& )
+ {
+ DBG_UNHANDLED_EXCEPTION();
+ // TODO: error handling?
+ }
+ }
+ else
+ {
+ uno::Reference< embed::XStorage > xLibraryStor;
+ if( bStorage )
+ {
+ try
+ {
+ xLibraryStor = xTargetLibrariesStor->openStorageElement(
+ rLib.aName,
+ embed::ElementModes::READWRITE );
+ }
+ catch( uno::Exception& )
+ {
+ #if OSL_DEBUG_LEVEL > 0
+ Any aError( ::cppu::getCaughtException() );
+ ::rtl::OStringBuffer aMessage;
+ aMessage.append( "couln't create sub storage for library '" );
+ aMessage.append( ::rtl::OUStringToOString( rLib.aName, osl_getThreadTextEncoding() ) );
+ aMessage.append( "'.\n\nException:" );
+ aMessage.append( ::rtl::OUStringToOString( ::comphelper::anyToString( aError ), osl_getThreadTextEncoding() ) );
+ OSL_ENSURE( false, aMessage.makeStringAndClear().getStr() );
+ #endif
+ return;
+ }
+ }
+
+ // Maybe lib is not loaded?!
+ if( bComplete )
+ loadLibrary( rLib.aName );
+
+ if( pImplLib->mbPasswordProtected )
+ implStorePasswordLibrary( pImplLib, rLib.aName, xLibraryStor, uno::Reference< task::XInteractionHandler >() );
+ // TODO: Check return value
+ else
+ implStoreLibrary( pImplLib, rLib.aName, xLibraryStor );
+
+ implStoreLibraryIndexFile( pImplLib, rLib, xLibraryStor );
+ if( bStorage )
+ {
+ try
+ {
+ uno::Reference< embed::XTransactedObject > xTransact( xLibraryStor, uno::UNO_QUERY_THROW );
+ xTransact->commit();
+ }
+ catch( uno::Exception& )
+ {
+ DBG_UNHANDLED_EXCEPTION();
+ // TODO: error handling
+ }
+ }
+ }
+
+ maModifiable.setModified( sal_True );
+ pImplLib->implSetModified( sal_False );
+ }
+
+ // For container info ReadOnly refers to mbReadOnlyLink
+ rLib.bReadOnly = pImplLib->mbReadOnlyLink;
+ }
+
+ // if we did an in-place save into a storage (i.e. a save into the storage we were already based on),
+ // then we need to clean up the temporary storage we used for this
+ if ( bInplaceStorage && sTempTargetStorName.getLength() )
+ {
+ OSL_ENSURE( xSourceLibrariesStor.is(), "SfxLibrariesContainer::storeLibraries_impl: unexpected: we should have a source storage here!" );
+ try
+ {
+ // for this, we first remove everything from the source storage, then copy the complete content
+ // from the temporary target storage. From then on, what used to be the "source storage" becomes
+ // the "targt storage" for all subsequent operations.
+
+ // (We cannot simply remove the storage, denoted by maLibrariesDir, from i_rStorage - there might be
+ // open references to it.)
+
+ if ( xSourceLibrariesStor.is() )
+ {
+ // remove
+ const Sequence< ::rtl::OUString > aRemoveNames( xSourceLibrariesStor->getElementNames() );
+ for ( const ::rtl::OUString* pRemoveName = aRemoveNames.getConstArray();
+ pRemoveName != aRemoveNames.getConstArray() + aRemoveNames.getLength();
+ ++pRemoveName
+ )
+ {
+ xSourceLibrariesStor->removeElement( *pRemoveName );
+ }
+
+ // copy
+ const Sequence< ::rtl::OUString > aCopyNames( xTargetLibrariesStor->getElementNames() );
+ for ( const ::rtl::OUString* pCopyName = aCopyNames.getConstArray();
+ pCopyName != aCopyNames.getConstArray() + aCopyNames.getLength();
+ ++pCopyName
+ )
+ {
+ xTargetLibrariesStor->copyElementTo( *pCopyName, xSourceLibrariesStor, *pCopyName );
+ }
+ }
+
+ // close and remove temp target
+ xTargetLibrariesStor->dispose();
+ i_rStorage->removeElement( sTempTargetStorName );
+ xTargetLibrariesStor.clear();
+ sTempTargetStorName = ::rtl::OUString();
+
+ // adjust target
+ xTargetLibrariesStor = xSourceLibrariesStor;
+ xSourceLibrariesStor.clear();
+ }
+ catch( const Exception& )
+ {
+ DBG_UNHANDLED_EXCEPTION();
+ }
+ }
+
+ if( !mbOldInfoFormat && !maModifiable.isModified() )
+ return;
+ maModifiable.setModified( sal_False );
+ mbOldInfoFormat = sal_False;
+
+ // Write library container info
+ // Create sax writer
+ Reference< XExtendedDocumentHandler > xHandler(
+ mxMSF->createInstance(
+ OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.xml.sax.Writer") ) ), UNO_QUERY );
+ if( !xHandler.is() )
+ {
+ OSL_ENSURE( 0, "### couln't create sax-writer component\n" );
+ return;
+ }
+
+ // Write info file
+ uno::Reference< io::XOutputStream > xOut;
+ uno::Reference< io::XStream > xInfoStream;
+ if( bStorage )
+ {
+ OUString aStreamName( maInfoFileName );
+ aStreamName += String( RTL_CONSTASCII_USTRINGPARAM("-lc.xml") );
+
+ try {
+ xInfoStream = xTargetLibrariesStor->openStreamElement( aStreamName, embed::ElementModes::READWRITE );
+ uno::Reference< beans::XPropertySet > xProps( xInfoStream, uno::UNO_QUERY );
+ OSL_ENSURE ( xProps.is(), "The stream must implement XPropertySet!\n" );
+ if ( !xProps.is() )
+ throw uno::RuntimeException();
+
+ String aPropName( String::CreateFromAscii( RTL_CONSTASCII_STRINGPARAM("MediaType") ) );
+ OUString aMime( RTL_CONSTASCII_USTRINGPARAM("text/xml") );
+ xProps->setPropertyValue( aPropName, uno::makeAny( aMime ) );
+
+ // #87671 Allow encryption
+ aPropName = String::CreateFromAscii( RTL_CONSTASCII_STRINGPARAM("UseCommonStoragePasswordEncryption") );
+ xProps->setPropertyValue( aPropName, uno::makeAny( sal_True ) );
+
+ xOut = xInfoStream->getOutputStream();
+ }
+ catch( uno::Exception& )
+ {
+ ULONG nErrorCode = ERRCODE_IO_GENERAL;
+ ErrorHandler::HandleError( nErrorCode );
+ }
+ }
+ else
+ {
+ // Create Output stream
+ INetURLObject aLibInfoInetObj( String(maLibraryPath).GetToken(1) );
+ aLibInfoInetObj.insertName( maInfoFileName, sal_True, INetURLObject::LAST_SEGMENT, sal_True, INetURLObject::ENCODE_ALL );
+ aLibInfoInetObj.setExtension( OUString( RTL_CONSTASCII_USTRINGPARAM("xlc") ) );
+ String aLibInfoPath( aLibInfoInetObj.GetMainURL( INetURLObject::NO_DECODE ) );
+
+ try
+ {
+ if( mxSFI->exists( aLibInfoPath ) )
+ mxSFI->kill( aLibInfoPath );
+ xOut = mxSFI->openFileWrite( aLibInfoPath );
+ }
+ catch( Exception& )
+ {
+ xOut.clear();
+ SfxErrorContext aEc( ERRCTX_SFX_SAVEDOC, aLibInfoPath );
+ ULONG nErrorCode = ERRCODE_IO_GENERAL;
+ ErrorHandler::HandleError( nErrorCode );
+ }
+
+ }
+ if( !xOut.is() )
+ {
+ OSL_ENSURE( 0, "### couln't open output stream\n" );
+ return;
+ }
+
+ Reference< XActiveDataSource > xSource( xHandler, UNO_QUERY );
+ xSource->setOutputStream( xOut );
+
+ try
+ {
+ xmlscript::exportLibraryContainer( xHandler, pLibArray );
+ if ( bStorage )
+ {
+ uno::Reference< embed::XTransactedObject > xTransact( xTargetLibrariesStor, uno::UNO_QUERY );
+ OSL_ENSURE( xTransact.is(), "The storage must implement XTransactedObject!\n" );
+ if ( !xTransact.is() )
+ throw uno::RuntimeException();
+
+ xTransact->commit();
+ }
+ }
+ catch( uno::Exception& )
+ {
+ OSL_ENSURE( sal_False, "Problem during storing of libraries!\n" );
+ ULONG nErrorCode = ERRCODE_IO_GENERAL;
+ ErrorHandler::HandleError( nErrorCode );
+ }
+
+ delete pLibArray;
+}
+
+
+// Methods XElementAccess
+Type SAL_CALL SfxLibraryContainer::getElementType()
+ throw(RuntimeException)
+{
+ LibraryContainerMethodGuard aGuard( *this );
+ return maNameContainer.getElementType();
+}
+
+sal_Bool SfxLibraryContainer::hasElements()
+ throw(RuntimeException)
+{
+ LibraryContainerMethodGuard aGuard( *this );
+ sal_Bool bRet = maNameContainer.hasElements();
+ return bRet;
+}
+
+// Methods XNameAccess
+Any SfxLibraryContainer::getByName( const OUString& aName )
+ throw(NoSuchElementException, WrappedTargetException, RuntimeException)
+{
+ LibraryContainerMethodGuard aGuard( *this );
+ Any aRetAny = maNameContainer.getByName( aName ) ;
+ return aRetAny;
+}
+
+Sequence< OUString > SfxLibraryContainer::getElementNames()
+ throw(RuntimeException)
+{
+ LibraryContainerMethodGuard aGuard( *this );
+ return maNameContainer.getElementNames();
+}
+
+sal_Bool SfxLibraryContainer::hasByName( const OUString& aName )
+ throw(RuntimeException)
+{
+ LibraryContainerMethodGuard aGuard( *this );
+ return maNameContainer.hasByName( aName ) ;
+}
+
+// Methods XLibraryContainer
+Reference< XNameContainer > SAL_CALL SfxLibraryContainer::createLibrary( const OUString& Name )
+ throw(IllegalArgumentException, ElementExistException, RuntimeException)
+{
+ LibraryContainerMethodGuard aGuard( *this );
+ SfxLibrary* pNewLib = implCreateLibrary( Name );
+ pNewLib->maLibElementFileExtension = maLibElementFileExtension;
+
+ createVariableURL( pNewLib->maUnexpandedStorageURL, Name, maInfoFileName, true );
+
+ Reference< XNameAccess > xNameAccess = static_cast< XNameAccess* >( pNewLib );
+ Any aElement;
+ aElement <<= xNameAccess;
+ maNameContainer.insertByName( Name, aElement );
+ maModifiable.setModified( sal_True );
+ Reference< XNameContainer > xRet( xNameAccess, UNO_QUERY );
+ return xRet;
+}
+
+Reference< XNameAccess > SAL_CALL SfxLibraryContainer::createLibraryLink
+ ( const OUString& Name, const OUString& StorageURL, sal_Bool ReadOnly )
+ throw(IllegalArgumentException, ElementExistException, RuntimeException)
+{
+ LibraryContainerMethodGuard aGuard( *this );
+ // TODO: Check other reasons to force ReadOnly status
+ //if( !ReadOnly )
+ //{
+ //}
+
+ OUString aLibInfoFileURL;
+ OUString aLibDirURL;
+ OUString aUnexpandedStorageURL;
+ checkStorageURL( StorageURL, aLibInfoFileURL, aLibDirURL, aUnexpandedStorageURL );
+
+
+ SfxLibrary* pNewLib = implCreateLibraryLink( Name, aLibInfoFileURL, aLibDirURL, ReadOnly );
+ pNewLib->maLibElementFileExtension = maLibElementFileExtension;
+ pNewLib->maUnexpandedStorageURL = aUnexpandedStorageURL;
+ pNewLib->maOrignialStorageURL = StorageURL;
+
+ OUString aInitFileName;
+ uno::Reference< embed::XStorage > xDummyStor;
+ ::xmlscript::LibDescriptor aLibDesc;
+ /*sal_Bool bReadIndexFile = */implLoadLibraryIndexFile( pNewLib, aLibDesc, xDummyStor, aInitFileName );
+ implImportLibDescriptor( pNewLib, aLibDesc );
+
+ Reference< XNameAccess > xRet = static_cast< XNameAccess* >( pNewLib );
+ Any aElement;
+ aElement <<= xRet;
+ maNameContainer.insertByName( Name, aElement );
+ maModifiable.setModified( sal_True );
+
+ OUString aUserSearchStr = OUString::createFromAscii( "vnd.sun.star.expand:$UNO_USER_PACKAGES_CACHE" );
+ OUString aSharedSearchStr = OUString::createFromAscii( "vnd.sun.star.expand:$UNO_SHARED_PACKAGES_CACHE" );
+ OUString aBundledSearchStr = OUString::createFromAscii( "vnd.sun.star.expand:$BUNDLED_EXTENSIONS" );
+ if( StorageURL.indexOf( aUserSearchStr ) != -1 )
+ {
+ pNewLib->mbExtension = sal_True;
+ }
+ else if( StorageURL.indexOf( aSharedSearchStr ) != -1 || StorageURL.indexOf( aBundledSearchStr ) != -1 )
+ {
+ pNewLib->mbExtension = sal_True;
+ pNewLib->mbReadOnly = sal_True;
+ }
+
+ return xRet;
+}
+
+void SAL_CALL SfxLibraryContainer::removeLibrary( const OUString& Name )
+ throw(NoSuchElementException, WrappedTargetException, RuntimeException)
+{
+ LibraryContainerMethodGuard aGuard( *this );
+ // Get and hold library before removing
+ Any aLibAny = maNameContainer.getByName( Name ) ;
+ Reference< XNameAccess > xNameAccess;
+ aLibAny >>= xNameAccess;
+ SfxLibrary* pImplLib = static_cast< SfxLibrary* >( xNameAccess.get() );
+ if( pImplLib->mbReadOnly && !pImplLib->mbLink )
+ throw IllegalArgumentException();
+
+ // Remove from container
+ maNameContainer.removeByName( Name );
+ maModifiable.setModified( sal_True );
+
+ // Delete library files, but not for linked libraries
+ if( !pImplLib->mbLink )
+ {
+ if( mxStorage.is() )
+ return;
+ if( xNameAccess->hasElements() )
+ {
+ Sequence< OUString > aNames = pImplLib->getElementNames();
+ sal_Int32 nNameCount = aNames.getLength();
+ const OUString* pNames = aNames.getConstArray();
+ for( sal_Int32 i = 0 ; i < nNameCount ; ++i, ++pNames )
+ {
+ pImplLib->removeElementWithoutChecks( *pNames, SfxLibrary::LibraryContainerAccess() );
+ }
+ }
+
+ // Delete index file
+ createAppLibraryFolder( pImplLib, Name );
+ String aLibInfoPath = pImplLib->maLibInfoFileURL;
+ try
+ {
+ if( mxSFI->exists( aLibInfoPath ) )
+ mxSFI->kill( aLibInfoPath );
+ }
+ catch( Exception& ) {}
+
+ // Delete folder if empty
+ INetURLObject aInetObj( String(maLibraryPath).GetToken(1) );
+ aInetObj.insertName( Name, sal_True, INetURLObject::LAST_SEGMENT,
+ sal_True, INetURLObject::ENCODE_ALL );
+ OUString aLibDirPath = aInetObj.GetMainURL( INetURLObject::NO_DECODE );
+
+ try
+ {
+ if( mxSFI->isFolder( aLibDirPath ) )
+ {
+ Sequence< OUString > aContentSeq = mxSFI->getFolderContents( aLibDirPath, true );
+ sal_Int32 nCount = aContentSeq.getLength();
+ if( !nCount )
+ mxSFI->kill( aLibDirPath );
+ }
+ }
+ catch( Exception& )
+ {
+ }
+ }
+}
+
+sal_Bool SAL_CALL SfxLibraryContainer::isLibraryLoaded( const OUString& Name )
+ throw(NoSuchElementException, RuntimeException)
+{
+ LibraryContainerMethodGuard aGuard( *this );
+ SfxLibrary* pImplLib = getImplLib( Name );
+ sal_Bool bRet = pImplLib->mbLoaded;
+ return bRet;
+}
+
+
+void SAL_CALL SfxLibraryContainer::loadLibrary( const OUString& Name )
+ throw(NoSuchElementException, WrappedTargetException, RuntimeException)
+{
+ LibraryContainerMethodGuard aGuard( *this );
+ Any aLibAny = maNameContainer.getByName( Name ) ;
+ Reference< XNameAccess > xNameAccess;
+ aLibAny >>= xNameAccess;
+ SfxLibrary* pImplLib = static_cast< SfxLibrary* >( xNameAccess.get() );
+
+ sal_Bool bLoaded = pImplLib->mbLoaded;
+ pImplLib->mbLoaded = sal_True;
+ if( !bLoaded && xNameAccess->hasElements() )
+ {
+ if( pImplLib->mbPasswordProtected )
+ {
+ implLoadPasswordLibrary( pImplLib, Name );
+ return;
+ }
+
+ sal_Bool bLink = pImplLib->mbLink;
+ sal_Bool bStorage = mxStorage.is() && !bLink;
+
+ uno::Reference< embed::XStorage > xLibrariesStor;
+ uno::Reference< embed::XStorage > xLibraryStor;
+ if( bStorage )
+ {
+ try {
+ xLibrariesStor = mxStorage->openStorageElement( maLibrariesDir, embed::ElementModes::READ );
+ OSL_ENSURE( xLibrariesStor.is(), "The method must either throw exception or return a storage!\n" );
+ if ( !xLibrariesStor.is() )
+ throw uno::RuntimeException();
+
+ xLibraryStor = xLibrariesStor->openStorageElement( Name, embed::ElementModes::READ );
+ OSL_ENSURE( xLibraryStor.is(), "The method must either throw exception or return a storage!\n" );
+ if ( !xLibrariesStor.is() )
+ throw uno::RuntimeException();
+ }
+ catch( uno::Exception& )
+ {
+ #if OSL_DEBUG_LEVEL > 0
+ Any aError( ::cppu::getCaughtException() );
+ ::rtl::OStringBuffer aMessage;
+ aMessage.append( "couln't open sub storage for library '" );
+ aMessage.append( ::rtl::OUStringToOString( Name, osl_getThreadTextEncoding() ) );
+ aMessage.append( "'.\n\nException:" );
+ aMessage.append( ::rtl::OUStringToOString( ::comphelper::anyToString( aError ), osl_getThreadTextEncoding() ) );
+ OSL_ENSURE( false, aMessage.makeStringAndClear().getStr() );
+ #endif
+ return;
+ }
+ }
+
+ Sequence< OUString > aNames = pImplLib->getElementNames();
+ sal_Int32 nNameCount = aNames.getLength();
+ const OUString* pNames = aNames.getConstArray();
+ for( sal_Int32 i = 0 ; i < nNameCount ; i++ )
+ {
+ OUString aElementName = pNames[ i ];
+
+ OUString aFile;
+ uno::Reference< io::XInputStream > xInStream;
+
+ if( bStorage )
+ {
+ uno::Reference< io::XStream > xElementStream;
+
+ aFile = aElementName;
+ aFile += String( RTL_CONSTASCII_USTRINGPARAM(".xml") );
+
+ try {
+ xElementStream = xLibraryStor->openStreamElement( aFile, embed::ElementModes::READ );
+ } catch( uno::Exception& )
+ {}
+
+ if( !xElementStream.is() )
+ {
+ // Check for EA2 document version with wrong extensions
+ aFile = aElementName;
+ aFile += String( RTL_CONSTASCII_USTRINGPARAM(".") );
+ aFile += maLibElementFileExtension;
+ try {
+ xElementStream = xLibraryStor->openStreamElement( aFile, embed::ElementModes::READ );
+ } catch( uno::Exception& )
+ {}
+ }
+
+ if ( xElementStream.is() )
+ xInStream = xElementStream->getInputStream();
+
+ if ( !xInStream.is() )
+ {
+ #if OSL_DEBUG_LEVEL > 0
+ ::rtl::OStringBuffer aMessage;
+ aMessage.append( "couln't open library element stream - attempted to open library '" );
+ aMessage.append( ::rtl::OUStringToOString( Name, osl_getThreadTextEncoding() ) );
+ aMessage.append( "'." );
+ OSL_ENSURE( false, aMessage.makeStringAndClear().getStr() );
+ #endif
+ return;
+ }
+ }
+ else
+ {
+ String aLibDirPath = pImplLib->maStorageURL;
+ INetURLObject aElementInetObj( aLibDirPath );
+ aElementInetObj.insertName( aElementName, sal_False,
+ INetURLObject::LAST_SEGMENT, sal_True, INetURLObject::ENCODE_ALL );
+ aElementInetObj.setExtension( maLibElementFileExtension );
+ aFile = aElementInetObj.GetMainURL( INetURLObject::NO_DECODE );
+ }
+
+ Reference< XNameContainer > xLib( pImplLib );
+ Any aAny = importLibraryElement( xLib, aElementName,
+ aFile, xInStream );
+ if( pImplLib->hasByName( aElementName ) )
+ {
+ if( aAny.hasValue() )
+ pImplLib->maNameContainer.replaceByName( aElementName, aAny );
+ }
+ else
+ {
+ pImplLib->maNameContainer.insertByName( aElementName, aAny );
+ }
+ }
+
+ pImplLib->implSetModified( sal_False );
+ }
+}
+
+// Methods XLibraryContainer2
+sal_Bool SAL_CALL SfxLibraryContainer::isLibraryLink( const OUString& Name )
+ throw (NoSuchElementException, RuntimeException)
+{
+ LibraryContainerMethodGuard aGuard( *this );
+ SfxLibrary* pImplLib = getImplLib( Name );
+ sal_Bool bRet = pImplLib->mbLink;
+ return bRet;
+}
+
+OUString SAL_CALL SfxLibraryContainer::getLibraryLinkURL( const OUString& Name )
+ throw (IllegalArgumentException, NoSuchElementException, RuntimeException)
+{
+ LibraryContainerMethodGuard aGuard( *this );
+ SfxLibrary* pImplLib = getImplLib( Name );
+ sal_Bool bLink = pImplLib->mbLink;
+ if( !bLink )
+ throw IllegalArgumentException();
+ OUString aRetStr = pImplLib->maLibInfoFileURL;
+ return aRetStr;
+}
+
+sal_Bool SAL_CALL SfxLibraryContainer::isLibraryReadOnly( const OUString& Name )
+ throw (NoSuchElementException, RuntimeException)
+{
+ LibraryContainerMethodGuard aGuard( *this );
+ SfxLibrary* pImplLib = getImplLib( Name );
+ sal_Bool bRet = pImplLib->mbReadOnly || (pImplLib->mbLink && pImplLib->mbReadOnlyLink);
+ return bRet;
+}
+
+void SAL_CALL SfxLibraryContainer::setLibraryReadOnly( const OUString& Name, sal_Bool bReadOnly )
+ throw (NoSuchElementException, RuntimeException)
+{
+ LibraryContainerMethodGuard aGuard( *this );
+ SfxLibrary* pImplLib = getImplLib( Name );
+ if( pImplLib->mbLink )
+ {
+ if( pImplLib->mbReadOnlyLink != bReadOnly )
+ {
+ pImplLib->mbReadOnlyLink = bReadOnly;
+ pImplLib->implSetModified( sal_True );
+ maModifiable.setModified( sal_True );
+ }
+ }
+ else
+ {
+ if( pImplLib->mbReadOnly != bReadOnly )
+ {
+ pImplLib->mbReadOnly = bReadOnly;
+ pImplLib->implSetModified( sal_True );
+ }
+ }
+}
+
+void SAL_CALL SfxLibraryContainer::renameLibrary( const OUString& Name, const OUString& NewName )
+ throw (NoSuchElementException, ElementExistException, RuntimeException)
+{
+ LibraryContainerMethodGuard aGuard( *this );
+ if( maNameContainer.hasByName( NewName ) )
+ throw ElementExistException();
+
+ // Get and hold library before removing
+ Any aLibAny = maNameContainer.getByName( Name ) ;
+
+ // #i24094 Maybe lib is not loaded!
+ Reference< XNameAccess > xNameAccess;
+ aLibAny >>= xNameAccess;
+ SfxLibrary* pImplLib = static_cast< SfxLibrary* >( xNameAccess.get() );
+ if( pImplLib->mbPasswordProtected && !pImplLib->mbPasswordVerified )
+ return; // Lib with unverified password cannot be renamed
+ loadLibrary( Name );
+
+ // Remove from container
+ maNameContainer.removeByName( Name );
+ maModifiable.setModified( sal_True );
+
+ // Rename library folder, but not for linked libraries
+ bool bMovedSuccessful = true;
+
+ // Rename files
+ sal_Bool bStorage = mxStorage.is();
+ if( !bStorage && !pImplLib->mbLink )
+ {
+ bMovedSuccessful = false;
+
+ OUString aLibDirPath = pImplLib->maStorageURL;
+
+ INetURLObject aDestInetObj( String(maLibraryPath).GetToken(1) );
+ aDestInetObj.insertName( NewName, sal_True, INetURLObject::LAST_SEGMENT,
+ sal_True, INetURLObject::ENCODE_ALL );
+ OUString aDestDirPath = aDestInetObj.GetMainURL( INetURLObject::NO_DECODE );
+
+ // Store new URL
+ OUString aLibInfoFileURL = pImplLib->maLibInfoFileURL;
+ checkStorageURL( aDestDirPath, pImplLib->maLibInfoFileURL, pImplLib->maStorageURL,
+ pImplLib->maUnexpandedStorageURL );
+
+ try
+ {
+ if( mxSFI->isFolder( aLibDirPath ) )
+ {
+ if( !mxSFI->isFolder( aDestDirPath ) )
+ mxSFI->createFolder( aDestDirPath );
+
+ // Move index file
+ try
+ {
+ if( mxSFI->exists( pImplLib->maLibInfoFileURL ) )
+ mxSFI->kill( pImplLib->maLibInfoFileURL );
+ mxSFI->move( aLibInfoFileURL, pImplLib->maLibInfoFileURL );
+ }
+ catch( Exception& )
+ {
+ }
+
+ Sequence< OUString > aElementNames = xNameAccess->getElementNames();
+ sal_Int32 nNameCount = aElementNames.getLength();
+ const OUString* pNames = aElementNames.getConstArray();
+ for( sal_Int32 i = 0 ; i < nNameCount ; i++ )
+ {
+ OUString aElementName = pNames[ i ];
+
+ INetURLObject aElementInetObj( aLibDirPath );
+ aElementInetObj.insertName( aElementName, sal_False,
+ INetURLObject::LAST_SEGMENT, sal_True, INetURLObject::ENCODE_ALL );
+ aElementInetObj.setExtension( maLibElementFileExtension );
+ String aElementPath( aElementInetObj.GetMainURL( INetURLObject::NO_DECODE ) );
+
+ INetURLObject aElementDestInetObj( aDestDirPath );
+ aElementDestInetObj.insertName( aElementName, sal_False,
+ INetURLObject::LAST_SEGMENT, sal_True, INetURLObject::ENCODE_ALL );
+ aElementDestInetObj.setExtension( maLibElementFileExtension );
+ String aDestElementPath( aElementDestInetObj.GetMainURL( INetURLObject::NO_DECODE ) );
+
+ try
+ {
+ if( mxSFI->exists( aDestElementPath ) )
+ mxSFI->kill( aDestElementPath );
+ mxSFI->move( aElementPath, aDestElementPath );
+ }
+ catch( Exception& )
+ {
+ }
+ }
+ pImplLib->storeResourcesAsURL( aDestDirPath, NewName );
+
+ // Delete folder if empty
+ Sequence< OUString > aContentSeq = mxSFI->getFolderContents( aLibDirPath, true );
+ sal_Int32 nCount = aContentSeq.getLength();
+ if( !nCount )
+ {
+ mxSFI->kill( aLibDirPath );
+ }
+
+ bMovedSuccessful = true;
+ pImplLib->implSetModified( sal_True );
+ }
+ }
+ catch( Exception& )
+ {
+ // Restore old library
+ maNameContainer.insertByName( Name, aLibAny ) ;
+ }
+ }
+
+ if( bStorage && !pImplLib->mbLink )
+ pImplLib->implSetModified( sal_True );
+
+ if( bMovedSuccessful )
+ maNameContainer.insertByName( NewName, aLibAny ) ;
+
+}
+
+
+// Methods XInitialization
+void SAL_CALL SfxLibraryContainer::initialize( const Sequence< Any >& _rArguments )
+ throw (Exception, RuntimeException)
+{
+ LibraryContainerMethodGuard aGuard( *this );
+ sal_Int32 nArgCount = _rArguments.getLength();
+ if ( nArgCount == 1 )
+ {
+ OUString sInitialDocumentURL;
+ Reference< XStorageBasedDocument > xDocument;
+ if ( _rArguments[0] >>= sInitialDocumentURL )
+ {
+ initializeFromDocumentURL( sInitialDocumentURL );
+ return;
+ }
+
+ if ( _rArguments[0] >>= xDocument )
+ {
+ initializeFromDocument( xDocument );
+ return;
+ }
+ }
+
+ throw IllegalArgumentException();
+}
+
+void SAL_CALL SfxLibraryContainer::initializeFromDocumentURL( const ::rtl::OUString& _rInitialDocumentURL )
+{
+ init( _rInitialDocumentURL, NULL );
+}
+
+void SAL_CALL SfxLibraryContainer::initializeFromDocument( const Reference< XStorageBasedDocument >& _rxDocument )
+{
+ // check whether this is a valid OfficeDocument, and obtain the document's root storage
+ Reference< XStorage > xDocStorage;
+ try
+ {
+ Reference< XServiceInfo > xSI( _rxDocument, UNO_QUERY_THROW );
+ if ( xSI->supportsService( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.document.OfficeDocument" ) ) ) )
+ xDocStorage.set( _rxDocument->getDocumentStorage(), UNO_QUERY_THROW );
+
+ Reference< XModel > xDocument( _rxDocument, UNO_QUERY_THROW );
+ Reference< XComponent > xDocComponent( _rxDocument, UNO_QUERY_THROW );
+
+ mxOwnerDocument = xDocument;
+ startComponentListening( xDocComponent );
+ }
+ catch( const Exception& ) { }
+
+ if ( !xDocStorage.is() )
+ throw IllegalArgumentException();
+
+ init( OUString(), xDocStorage );
+}
+
+// OEventListenerAdapter
+void SfxLibraryContainer::_disposing( const EventObject& _rSource )
+{
+#if OSL_DEBUG_LEVEL > 0
+ Reference< XModel > xDocument( mxOwnerDocument.get(), UNO_QUERY );
+ OSL_ENSURE( ( xDocument == _rSource.Source ) && xDocument.is(), "SfxLibraryContainer::_disposing: where does this come from?" );
+#else
+ (void)_rSource;
+#endif
+ dispose();
+}
+
+// OComponentHelper
+void SAL_CALL SfxLibraryContainer::disposing()
+{
+ stopAllComponentListening();
+ mxOwnerDocument = WeakReference< XModel >();
+}
+
+// Methods XLibraryContainerPassword
+sal_Bool SAL_CALL SfxLibraryContainer::isLibraryPasswordProtected( const OUString& )
+ throw (NoSuchElementException, RuntimeException)
+{
+ LibraryContainerMethodGuard aGuard( *this );
+ return sal_False;
+}
+
+sal_Bool SAL_CALL SfxLibraryContainer::isLibraryPasswordVerified( const OUString& )
+ throw (IllegalArgumentException, NoSuchElementException, RuntimeException)
+{
+ LibraryContainerMethodGuard aGuard( *this );
+ throw IllegalArgumentException();
+}
+
+sal_Bool SAL_CALL SfxLibraryContainer::verifyLibraryPassword
+ ( const OUString&, const OUString& )
+ throw (IllegalArgumentException, NoSuchElementException, RuntimeException)
+{
+ LibraryContainerMethodGuard aGuard( *this );
+ throw IllegalArgumentException();
+}
+
+void SAL_CALL SfxLibraryContainer::changeLibraryPassword(
+ const OUString&, const OUString&, const OUString& )
+ throw (IllegalArgumentException, NoSuchElementException, RuntimeException)
+{
+ LibraryContainerMethodGuard aGuard( *this );
+ throw IllegalArgumentException();
+}
+
+// Methods XContainer
+void SAL_CALL SfxLibraryContainer::addContainerListener( const Reference< XContainerListener >& xListener )
+ throw (RuntimeException)
+{
+ LibraryContainerMethodGuard aGuard( *this );
+ maNameContainer.setEventSource( static_cast< XInterface* >( (OWeakObject*)this ) );
+ maNameContainer.addContainerListener( xListener );
+}
+
+void SAL_CALL SfxLibraryContainer::removeContainerListener( const Reference< XContainerListener >& xListener )
+ throw (RuntimeException)
+{
+ LibraryContainerMethodGuard aGuard( *this );
+ maNameContainer.removeContainerListener( xListener );
+}
+
+// Methods XLibraryContainerExport
+void SAL_CALL SfxLibraryContainer::exportLibrary( const OUString& Name, const OUString& URL,
+ const Reference< XInteractionHandler >& Handler )
+ throw ( uno::Exception, NoSuchElementException, RuntimeException)
+{
+ LibraryContainerMethodGuard aGuard( *this );
+ SfxLibrary* pImplLib = getImplLib( Name );
+
+ Reference< XSimpleFileAccess > xToUseSFI;
+ if( Handler.is() )
+ {
+ xToUseSFI = Reference< XSimpleFileAccess >( mxMSF->createInstance
+ ( OUString::createFromAscii( "com.sun.star.ucb.SimpleFileAccess" ) ), UNO_QUERY );
+ if( xToUseSFI.is() )
+ xToUseSFI->setInteractionHandler( Handler );
+ }
+
+ // Maybe lib is not loaded?!
+ loadLibrary( Name );
+
+ uno::Reference< ::com::sun::star::embed::XStorage > xDummyStor;
+ if( pImplLib->mbPasswordProtected )
+ implStorePasswordLibrary( pImplLib, Name, xDummyStor, URL, xToUseSFI, Handler );
+ else
+ implStoreLibrary( pImplLib, Name, xDummyStor, URL, xToUseSFI, Handler );
+
+ ::xmlscript::LibDescriptor aLibDesc;
+ aLibDesc.aName = Name;
+ aLibDesc.bLink = false; // Link status gets lost?
+ aLibDesc.bReadOnly = pImplLib->mbReadOnly;
+ aLibDesc.bPreload = false; // Preload status gets lost?
+ aLibDesc.bPasswordProtected = pImplLib->mbPasswordProtected;
+ aLibDesc.aElementNames = pImplLib->getElementNames();
+
+ implStoreLibraryIndexFile( pImplLib, aLibDesc, xDummyStor, URL, xToUseSFI );
+}
+
+OUString SfxLibraryContainer::expand_url( const OUString& url )
+ throw(::com::sun::star::uno::RuntimeException)
+{
+ if (0 == url.compareToAscii( RTL_CONSTASCII_STRINGPARAM(EXPAND_PROTOCOL ":") ))
+ {
+ if( !mxMacroExpander.is() )
+ {
+ Reference< XPropertySet > xProps( mxMSF, UNO_QUERY );
+ OSL_ASSERT( xProps.is() );
+ if( xProps.is() )
+ {
+ Reference< XComponentContext > xContext;
+ xProps->getPropertyValue(
+ OUString( RTL_CONSTASCII_USTRINGPARAM("DefaultContext") ) ) >>= xContext;
+ OSL_ASSERT( xContext.is() );
+ if( xContext.is() )
+ {
+ Reference< util::XMacroExpander > xExpander;
+ xContext->getValueByName(
+ OUSTR("/singletons/com.sun.star.util.theMacroExpander") ) >>= xExpander;
+ if(! xExpander.is())
+ {
+ throw uno::DeploymentException(
+ OUSTR("no macro expander singleton available!"), Reference< XInterface >() );
+ }
+ MutexGuard guard( Mutex::getGlobalMutex() );
+ if( !mxMacroExpander.is() )
+ {
+ mxMacroExpander = xExpander;
+ }
+ }
+ }
+ }
+
+ if( !mxMacroExpander.is() )
+ return url;
+
+ // cut protocol
+ OUString macro( url.copy( sizeof (EXPAND_PROTOCOL ":") -1 ) );
+ // decode uric class chars
+ macro = Uri::decode( macro, rtl_UriDecodeWithCharset, RTL_TEXTENCODING_UTF8 );
+ // expand macro string
+ OUString ret( mxMacroExpander->expandMacros( macro ) );
+ return ret;
+ }
+ else if( mxStringSubstitution.is() )
+ {
+ OUString ret( mxStringSubstitution->substituteVariables( url, false ) );
+ return ret;
+ }
+ else
+ {
+ return url;
+ }
+}
+
+//XLibraryContainer3
+OUString SAL_CALL SfxLibraryContainer::getOriginalLibraryLinkURL( const OUString& Name )
+ throw (IllegalArgumentException, NoSuchElementException, RuntimeException)
+{
+ LibraryContainerMethodGuard aGuard( *this );
+ SfxLibrary* pImplLib = getImplLib( Name );
+ sal_Bool bLink = pImplLib->mbLink;
+ if( !bLink )
+ throw IllegalArgumentException();
+ OUString aRetStr = pImplLib->maOrignialStorageURL;
+ return aRetStr;
+}
+
+
+// XVBACompatibility
+::sal_Bool SAL_CALL SfxLibraryContainer::getVBACompatibilityMode() throw (RuntimeException)
+{
+ return mbVBACompat;
+}
+
+void SAL_CALL SfxLibraryContainer::setVBACompatibilityMode( ::sal_Bool _vbacompatmodeon ) throw (RuntimeException)
+{
+ BasicManager* pBasMgr = getBasicManager();
+ if( pBasMgr )
+ {
+ // get the standard library
+ String aLibName( RTL_CONSTASCII_USTRINGPARAM( "Standard" ) );
+ if ( pBasMgr->GetName().Len() )
+ aLibName = pBasMgr->GetName();
+
+ StarBASIC* pBasic = pBasMgr->GetLib( aLibName );
+ if( pBasic )
+ pBasic->SetVBAEnabled( _vbacompatmodeon );
+ }
+ mbVBACompat = _vbacompatmodeon;
+}
+
+// Methods XServiceInfo
+::sal_Bool SAL_CALL SfxLibraryContainer::supportsService( const ::rtl::OUString& _rServiceName )
+ throw (RuntimeException)
+{
+ LibraryContainerMethodGuard aGuard( *this );
+ Sequence< OUString > aSupportedServices( getSupportedServiceNames() );
+ const OUString* pSupportedServices = aSupportedServices.getConstArray();
+ for ( sal_Int32 i=0; i<aSupportedServices.getLength(); ++i, ++pSupportedServices )
+ if ( *pSupportedServices == _rServiceName )
+ return sal_True;
+ return sal_False;
+}
+
+//============================================================================
+
+// Implementation class SfxLibrary
+
+// Ctor
+SfxLibrary::SfxLibrary( ModifiableHelper& _rModifiable, const Type& aType,
+ const Reference< XMultiServiceFactory >& xMSF, const Reference< XSimpleFileAccess >& xSFI )
+ : OComponentHelper( m_aMutex )
+ , mxMSF( xMSF )
+ , mxSFI( xSFI )
+ , mrModifiable( _rModifiable )
+ , maNameContainer( aType )
+ , mbLoaded( sal_True )
+ , mbIsModified( sal_True )
+ , mbInitialised( sal_False )
+ , mbLink( sal_False )
+ , mbReadOnly( sal_False )
+ , mbReadOnlyLink( sal_False )
+ , mbPreload( sal_False )
+ , mbPasswordProtected( sal_False )
+ , mbPasswordVerified( sal_False )
+ , mbDoc50Password( sal_False )
+ , mbSharedIndexFile( sal_False )
+ , mbExtension( sal_False )
+{
+}
+
+SfxLibrary::SfxLibrary( ModifiableHelper& _rModifiable, const Type& aType,
+ const Reference< XMultiServiceFactory >& xMSF, const Reference< XSimpleFileAccess >& xSFI,
+ const OUString& aLibInfoFileURL, const OUString& aStorageURL, sal_Bool ReadOnly )
+ : OComponentHelper( m_aMutex )
+ , mxMSF( xMSF )
+ , mxSFI( xSFI )
+ , mrModifiable( _rModifiable )
+ , maNameContainer( aType )
+ , mbLoaded( sal_False )
+ , mbIsModified( sal_True )
+ , mbInitialised( sal_False )
+ , maLibInfoFileURL( aLibInfoFileURL )
+ , maStorageURL( aStorageURL )
+ , mbLink( sal_True )
+ , mbReadOnly( sal_False )
+ , mbReadOnlyLink( ReadOnly )
+ , mbPreload( sal_False )
+ , mbPasswordProtected( sal_False )
+ , mbPasswordVerified( sal_False )
+ , mbDoc50Password( sal_False )
+ , mbSharedIndexFile( sal_False )
+ , mbExtension( sal_False )
+{
+}
+
+void SfxLibrary::implSetModified( sal_Bool _bIsModified )
+{
+ if ( mbIsModified == _bIsModified )
+ return;
+ mbIsModified = _bIsModified;
+ if ( mbIsModified )
+ mrModifiable.setModified( sal_True );
+}
+
+// Methods XInterface
+Any SAL_CALL SfxLibrary::queryInterface( const Type& rType )
+ throw( RuntimeException )
+{
+ Any aRet;
+
+ /*
+ if( mbReadOnly )
+ {
+ aRet = Any( ::cppu::queryInterface( rType,
+ static_cast< XContainer * >( this ),
+ static_cast< XNameAccess * >( this ) ) );
+ }
+ else
+ {
+ */
+ aRet = Any( ::cppu::queryInterface( rType,
+ static_cast< XContainer * >( this ),
+ static_cast< XNameContainer * >( this ),
+ static_cast< XNameAccess * >( this ) ) );
+ //}
+ if( !aRet.hasValue() )
+ aRet = OComponentHelper::queryInterface( rType );
+ return aRet;
+}
+
+// Methods XElementAccess
+Type SfxLibrary::getElementType()
+ throw(RuntimeException)
+{
+ return maNameContainer.getElementType();
+}
+
+sal_Bool SfxLibrary::hasElements()
+ throw(RuntimeException)
+{
+ sal_Bool bRet = maNameContainer.hasElements();
+ return bRet;
+}
+
+// Methods XNameAccess
+Any SfxLibrary::getByName( const OUString& aName )
+ throw(NoSuchElementException, WrappedTargetException, RuntimeException)
+{
+ impl_checkLoaded();
+
+ Any aRetAny = maNameContainer.getByName( aName ) ;
+ return aRetAny;
+}
+
+Sequence< OUString > SfxLibrary::getElementNames()
+ throw(RuntimeException)
+{
+ return maNameContainer.getElementNames();
+}
+
+sal_Bool SfxLibrary::hasByName( const OUString& aName )
+ throw(RuntimeException)
+{
+ sal_Bool bRet = maNameContainer.hasByName( aName );
+ return bRet;
+}
+
+void SfxLibrary::impl_checkReadOnly()
+{
+ if( mbReadOnly || (mbLink && mbReadOnlyLink) )
+ throw IllegalArgumentException(
+ ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Library is readonly." ) ),
+ // TODO: resource
+ *this, 0
+ );
+}
+
+void SfxLibrary::impl_checkLoaded()
+{
+ if ( !mbLoaded )
+ throw WrappedTargetException(
+ ::rtl::OUString(),
+ *this,
+ makeAny( LibraryNotLoadedException(
+ ::rtl::OUString(),
+ *this
+ ) )
+ );
+}
+
+// Methods XNameReplace
+void SfxLibrary::replaceByName( const OUString& aName, const Any& aElement )
+ throw(IllegalArgumentException, NoSuchElementException, WrappedTargetException, RuntimeException)
+{
+ impl_checkReadOnly();
+ impl_checkLoaded();
+
+ OSL_ENSURE( isLibraryElementValid( aElement ), "SfxLibrary::replaceByName: replacing element is invalid!" );
+
+ maNameContainer.replaceByName( aName, aElement );
+ implSetModified( sal_True );
+}
+
+
+// Methods XNameContainer
+void SfxLibrary::insertByName( const OUString& aName, const Any& aElement )
+ throw(IllegalArgumentException, ElementExistException, WrappedTargetException, RuntimeException)
+{
+ impl_checkReadOnly();
+ impl_checkLoaded();
+
+ OSL_ENSURE( isLibraryElementValid( aElement ), "SfxLibrary::insertByName: to-be-inserted element is invalid!" );
+
+ maNameContainer.insertByName( aName, aElement );
+ implSetModified( sal_True );
+}
+
+void SfxLibrary::impl_removeWithoutChecks( const ::rtl::OUString& _rElementName )
+{
+ maNameContainer.removeByName( _rElementName );
+ implSetModified( sal_True );
+
+ // Remove element file
+ if( maStorageURL.getLength() )
+ {
+ INetURLObject aElementInetObj( maStorageURL );
+ aElementInetObj.insertName( _rElementName, sal_False,
+ INetURLObject::LAST_SEGMENT, sal_True, INetURLObject::ENCODE_ALL );
+ aElementInetObj.setExtension( maLibElementFileExtension );
+ OUString aFile = aElementInetObj.GetMainURL( INetURLObject::NO_DECODE );
+
+ try
+ {
+ if( mxSFI->exists( aFile ) )
+ mxSFI->kill( aFile );
+ }
+ catch( Exception& )
+ {
+ DBG_UNHANDLED_EXCEPTION();
+ }
+ }
+}
+
+void SfxLibrary::removeByName( const OUString& Name )
+ throw(NoSuchElementException, WrappedTargetException, RuntimeException)
+{
+ impl_checkReadOnly();
+ impl_checkLoaded();
+ impl_removeWithoutChecks( Name );
+}
+
+// XTypeProvider
+Sequence< Type > SfxLibrary::getTypes()
+ throw( RuntimeException )
+{
+ static OTypeCollection * s_pTypes_NameContainer = 0;
+ {
+ if( !s_pTypes_NameContainer )
+ {
+ MutexGuard aGuard( Mutex::getGlobalMutex() );
+ if( !s_pTypes_NameContainer )
+ {
+ static OTypeCollection s_aTypes_NameContainer(
+ ::getCppuType( (const Reference< XNameContainer > *)0 ),
+ ::getCppuType( (const Reference< XContainer > *)0 ),
+ OComponentHelper::getTypes() );
+ s_pTypes_NameContainer = &s_aTypes_NameContainer;
+ }
+ }
+ return s_pTypes_NameContainer->getTypes();
+ }
+}
+
+
+Sequence< sal_Int8 > SfxLibrary::getImplementationId()
+ throw( RuntimeException )
+{
+ static OImplementationId * s_pId_NameContainer = 0;
+ {
+ if( !s_pId_NameContainer )
+ {
+ MutexGuard aGuard( Mutex::getGlobalMutex() );
+ if( !s_pId_NameContainer )
+ {
+ static OImplementationId s_aId_NameContainer;
+ s_pId_NameContainer = &s_aId_NameContainer;
+ }
+ }
+ return s_pId_NameContainer->getImplementationId();
+ }
+}
+
+
+//============================================================================
+
+// Methods XContainer
+void SAL_CALL SfxLibrary::addContainerListener( const Reference< XContainerListener >& xListener )
+ throw (RuntimeException)
+{
+ maNameContainer.setEventSource( static_cast< XInterface* >( (OWeakObject*)this ) );
+ maNameContainer.addContainerListener( xListener );
+}
+
+void SAL_CALL SfxLibrary::removeContainerListener( const Reference< XContainerListener >& xListener )
+ throw (RuntimeException)
+{
+ maNameContainer.removeContainerListener( xListener );
+}
+
+
+//============================================================================
+// Implementation class ScriptExtensionIterator
+
+static rtl::OUString aBasicLibMediaType( rtl::OUString::createFromAscii( "application/vnd.sun.star.basic-library" ) );
+static rtl::OUString aDialogLibMediaType( rtl::OUString::createFromAscii( "application/vnd.sun.star.dialog-library" ) );
+
+ScriptExtensionIterator::ScriptExtensionIterator( void )
+ : m_eState( USER_EXTENSIONS )
+ , m_bUserPackagesLoaded( false )
+ , m_bSharedPackagesLoaded( false )
+ , m_bBundledPackagesLoaded( false )
+ , m_iUserPackage( 0 )
+ , m_iSharedPackage( 0 )
+ , m_iBundledPackage( 0 )
+ , m_pScriptSubPackageIterator( NULL )
+{
+ Reference< XMultiServiceFactory > xFactory = comphelper::getProcessServiceFactory();
+ Reference< XPropertySet > xProps( xFactory, UNO_QUERY );
+ OSL_ASSERT( xProps.is() );
+ if (xProps.is())
+ {
+ xProps->getPropertyValue(
+ ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("DefaultContext") ) ) >>= m_xContext;
+ OSL_ASSERT( m_xContext.is() );
+ }
+ if( !m_xContext.is() )
+ {
+ throw RuntimeException(
+ ::rtl::OUString::createFromAscii( "ScriptExtensionIterator::init(), no XComponentContext" ),
+ Reference< XInterface >() );
+ }
+}
+
+rtl::OUString ScriptExtensionIterator::nextBasicOrDialogLibrary( bool& rbPureDialogLib )
+{
+ rtl::OUString aRetLib;
+
+ while( !aRetLib.getLength() && m_eState != END_REACHED )
+ {
+ switch( m_eState )
+ {
+ case USER_EXTENSIONS:
+ {
+ Reference< deployment::XPackage > xScriptPackage =
+ implGetNextUserScriptPackage( rbPureDialogLib );
+ if( !xScriptPackage.is() )
+ break;
+
+ aRetLib = xScriptPackage->getURL();
+ break;
+ }
+
+ case SHARED_EXTENSIONS:
+ {
+ Reference< deployment::XPackage > xScriptPackage =
+ implGetNextSharedScriptPackage( rbPureDialogLib );
+ if( !xScriptPackage.is() )
+ break;
+
+ aRetLib = xScriptPackage->getURL();
+ break;
+ }
+ case BUNDLED_EXTENSIONS:
+ {
+ Reference< deployment::XPackage > xScriptPackage =
+ implGetNextBundledScriptPackage( rbPureDialogLib );
+ if( !xScriptPackage.is() )
+ break;
+
+ aRetLib = xScriptPackage->getURL();
+ break;
+ }
+ case END_REACHED:
+ VOS_ENSURE( false, "ScriptExtensionIterator::nextBasicOrDialogLibrary(): Invalid case END_REACHED" );
+ break;
+ }
+ }
+
+ return aRetLib;
+}
+
+ScriptSubPackageIterator::ScriptSubPackageIterator( Reference< deployment::XPackage > xMainPackage )
+ : m_xMainPackage( xMainPackage )
+ , m_bIsValid( false )
+ , m_bIsBundle( false )
+ , m_nSubPkgCount( 0 )
+ , m_iNextSubPkg( 0 )
+{
+ Reference< deployment::XPackage > xScriptPackage;
+ if( !m_xMainPackage.is() )
+ return;
+
+ // Check if parent package is registered
+ beans::Optional< beans::Ambiguous<sal_Bool> > option( m_xMainPackage->isRegistered
+ ( Reference<task::XAbortChannel>(), Reference<ucb::XCommandEnvironment>() ) );
+ bool bRegistered = false;
+ if( option.IsPresent )
+ {
+ beans::Ambiguous<sal_Bool> const & reg = option.Value;
+ if( !reg.IsAmbiguous && reg.Value )
+ bRegistered = true;
+ }
+ if( bRegistered )
+ {
+ m_bIsValid = true;
+ if( m_xMainPackage->isBundle() )
+ {
+ m_bIsBundle = true;
+ m_aSubPkgSeq = m_xMainPackage->getBundle
+ ( Reference<task::XAbortChannel>(), Reference<ucb::XCommandEnvironment>() );
+ m_nSubPkgCount = m_aSubPkgSeq.getLength();
+ }
+ }
+}
+
+Reference< deployment::XPackage > ScriptSubPackageIterator::getNextScriptSubPackage
+ ( bool& rbPureDialogLib )
+{
+ rbPureDialogLib = false;
+
+ Reference< deployment::XPackage > xScriptPackage;
+ if( !m_bIsValid )
+ return xScriptPackage;
+
+ if( m_bIsBundle )
+ {
+ const Reference< deployment::XPackage >* pSeq = m_aSubPkgSeq.getConstArray();
+ sal_Int32 iPkg;
+ for( iPkg = m_iNextSubPkg ; iPkg < m_nSubPkgCount ; ++iPkg )
+ {
+ const Reference< deployment::XPackage > xSubPkg = pSeq[ iPkg ];
+ xScriptPackage = implDetectScriptPackage( xSubPkg, rbPureDialogLib );
+ if( xScriptPackage.is() )
+ break;
+ }
+ m_iNextSubPkg = iPkg + 1;
+ }
+ else
+ {
+ xScriptPackage = implDetectScriptPackage( m_xMainPackage, rbPureDialogLib );
+ m_bIsValid = false; // No more script packages
+ }
+
+ return xScriptPackage;
+}
+
+Reference< deployment::XPackage > ScriptSubPackageIterator::implDetectScriptPackage
+ ( const Reference< deployment::XPackage > xPackage, bool& rbPureDialogLib )
+{
+ Reference< deployment::XPackage > xScriptPackage;
+
+ if( xPackage.is() )
+ {
+ const Reference< deployment::XPackageTypeInfo > xPackageTypeInfo = xPackage->getPackageType();
+ rtl::OUString aMediaType = xPackageTypeInfo->getMediaType();
+ if( aMediaType.equals( aBasicLibMediaType ) )
+ {
+ xScriptPackage = xPackage;
+ }
+ else if( aMediaType.equals( aDialogLibMediaType ) )
+ {
+ rbPureDialogLib = true;
+ xScriptPackage = xPackage;
+ }
+ }
+
+ return xScriptPackage;
+}
+
+Reference< deployment::XPackage > ScriptExtensionIterator::implGetScriptPackageFromPackage
+ ( const Reference< deployment::XPackage > xPackage, bool& rbPureDialogLib )
+{
+ rbPureDialogLib = false;
+
+ Reference< deployment::XPackage > xScriptPackage;
+ if( !xPackage.is() )
+ return xScriptPackage;
+
+ // Check if parent package is registered
+ beans::Optional< beans::Ambiguous<sal_Bool> > option( xPackage->isRegistered
+ ( Reference<task::XAbortChannel>(), Reference<ucb::XCommandEnvironment>() ) );
+ bool bRegistered = false;
+ if( option.IsPresent )
+ {
+ beans::Ambiguous<sal_Bool> const & reg = option.Value;
+ if( !reg.IsAmbiguous && reg.Value )
+ bRegistered = true;
+ }
+ if( bRegistered )
+ {
+ if( xPackage->isBundle() )
+ {
+ Sequence< Reference< deployment::XPackage > > aPkgSeq = xPackage->getBundle
+ ( Reference<task::XAbortChannel>(), Reference<ucb::XCommandEnvironment>() );
+ sal_Int32 nPkgCount = aPkgSeq.getLength();
+ const Reference< deployment::XPackage >* pSeq = aPkgSeq.getConstArray();
+ for( sal_Int32 iPkg = 0 ; iPkg < nPkgCount ; ++iPkg )
+ {
+ const Reference< deployment::XPackage > xSubPkg = pSeq[ iPkg ];
+ const Reference< deployment::XPackageTypeInfo > xPackageTypeInfo = xSubPkg->getPackageType();
+ rtl::OUString aMediaType = xPackageTypeInfo->getMediaType();
+ if( aMediaType.equals( aBasicLibMediaType ) )
+ {
+ xScriptPackage = xSubPkg;
+ break;
+ }
+ else if( aMediaType.equals( aDialogLibMediaType ) )
+ {
+ rbPureDialogLib = true;
+ xScriptPackage = xSubPkg;
+ break;
+ }
+ }
+ }
+ else
+ {
+ const Reference< deployment::XPackageTypeInfo > xPackageTypeInfo = xPackage->getPackageType();
+ rtl::OUString aMediaType = xPackageTypeInfo->getMediaType();
+ if( aMediaType.equals( aBasicLibMediaType ) )
+ {
+ xScriptPackage = xPackage;
+ }
+ else if( aMediaType.equals( aDialogLibMediaType ) )
+ {
+ rbPureDialogLib = true;
+ xScriptPackage = xPackage;
+ }
+ }
+ }
+
+ return xScriptPackage;
+}
+
+Reference< deployment::XPackage > ScriptExtensionIterator::implGetNextUserScriptPackage
+ ( bool& rbPureDialogLib )
+{
+ Reference< deployment::XPackage > xScriptPackage;
+
+ if( !m_bUserPackagesLoaded )
+ {
+ try
+ {
+ Reference< XExtensionManager > xManager =
+ ExtensionManager::get( m_xContext );
+ m_aUserPackagesSeq = xManager->getDeployedExtensions
+ (rtl::OUString::createFromAscii("user"),
+ Reference< task::XAbortChannel >(), Reference< ucb::XCommandEnvironment >() );
+ }
+ catch( com::sun::star::uno::DeploymentException& )
+ {
+ // Special Office installations may not contain deployment code
+ m_eState = END_REACHED;
+ return xScriptPackage;
+ }
+
+ m_bUserPackagesLoaded = true;
+ }
+
+ if( m_iUserPackage == m_aUserPackagesSeq.getLength() )
+ {
+ m_eState = SHARED_EXTENSIONS; // Later: SHARED_MODULE
+ }
+ else
+ {
+ if( m_pScriptSubPackageIterator == NULL )
+ {
+ const Reference< deployment::XPackage >* pUserPackages = m_aUserPackagesSeq.getConstArray();
+ Reference< deployment::XPackage > xPackage = pUserPackages[ m_iUserPackage ];
+ VOS_ENSURE( xPackage.is(), "ScriptExtensionIterator::implGetNextUserScriptPackage(): Invalid package" );
+ m_pScriptSubPackageIterator = new ScriptSubPackageIterator( xPackage );
+ }
+
+ if( m_pScriptSubPackageIterator != NULL )
+ {
+ xScriptPackage = m_pScriptSubPackageIterator->getNextScriptSubPackage( rbPureDialogLib );
+ if( !xScriptPackage.is() )
+ {
+ delete m_pScriptSubPackageIterator;
+ m_pScriptSubPackageIterator = NULL;
+ m_iUserPackage++;
+ }
+ }
+ }
+
+ return xScriptPackage;
+}
+
+Reference< deployment::XPackage > ScriptExtensionIterator::implGetNextSharedScriptPackage
+ ( bool& rbPureDialogLib )
+{
+ Reference< deployment::XPackage > xScriptPackage;
+
+ if( !m_bSharedPackagesLoaded )
+ {
+ try
+ {
+ Reference< XExtensionManager > xSharedManager =
+ ExtensionManager::get( m_xContext );
+ m_aSharedPackagesSeq = xSharedManager->getDeployedExtensions
+ (rtl::OUString::createFromAscii("shared"),
+ Reference< task::XAbortChannel >(), Reference< ucb::XCommandEnvironment >() );
+ }
+ catch( com::sun::star::uno::DeploymentException& )
+ {
+ // Special Office installations may not contain deployment code
+ return xScriptPackage;
+ }
+
+ m_bSharedPackagesLoaded = true;
+ }
+
+ if( m_iSharedPackage == m_aSharedPackagesSeq.getLength() )
+ {
+ m_eState = BUNDLED_EXTENSIONS;
+ }
+ else
+ {
+ if( m_pScriptSubPackageIterator == NULL )
+ {
+ const Reference< deployment::XPackage >* pSharedPackages = m_aSharedPackagesSeq.getConstArray();
+ Reference< deployment::XPackage > xPackage = pSharedPackages[ m_iSharedPackage ];
+ VOS_ENSURE( xPackage.is(), "ScriptExtensionIterator::implGetNextSharedScriptPackage(): Invalid package" );
+ m_pScriptSubPackageIterator = new ScriptSubPackageIterator( xPackage );
+ }
+
+ if( m_pScriptSubPackageIterator != NULL )
+ {
+ xScriptPackage = m_pScriptSubPackageIterator->getNextScriptSubPackage( rbPureDialogLib );
+ if( !xScriptPackage.is() )
+ {
+ delete m_pScriptSubPackageIterator;
+ m_pScriptSubPackageIterator = NULL;
+ m_iSharedPackage++;
+ }
+ }
+ }
+
+ return xScriptPackage;
+}
+
+Reference< deployment::XPackage > ScriptExtensionIterator::implGetNextBundledScriptPackage
+ ( bool& rbPureDialogLib )
+{
+ Reference< deployment::XPackage > xScriptPackage;
+
+ if( !m_bBundledPackagesLoaded )
+ {
+ try
+ {
+ Reference< XExtensionManager > xManager =
+ ExtensionManager::get( m_xContext );
+ m_aBundledPackagesSeq = xManager->getDeployedExtensions
+ (rtl::OUString::createFromAscii("bundled"),
+ Reference< task::XAbortChannel >(), Reference< ucb::XCommandEnvironment >() );
+ }
+ catch( com::sun::star::uno::DeploymentException& )
+ {
+ // Special Office installations may not contain deployment code
+ return xScriptPackage;
+ }
+
+ m_bBundledPackagesLoaded = true;
+ }
+
+ if( m_iBundledPackage == m_aBundledPackagesSeq.getLength() )
+ {
+ m_eState = END_REACHED;
+ }
+ else
+ {
+ if( m_pScriptSubPackageIterator == NULL )
+ {
+ const Reference< deployment::XPackage >* pBundledPackages = m_aBundledPackagesSeq.getConstArray();
+ Reference< deployment::XPackage > xPackage = pBundledPackages[ m_iBundledPackage ];
+ VOS_ENSURE( xPackage.is(), "ScriptExtensionIterator::implGetNextBundledScriptPackage(): Invalid package" );
+ m_pScriptSubPackageIterator = new ScriptSubPackageIterator( xPackage );
+ }
+
+ if( m_pScriptSubPackageIterator != NULL )
+ {
+ xScriptPackage = m_pScriptSubPackageIterator->getNextScriptSubPackage( rbPureDialogLib );
+ if( !xScriptPackage.is() )
+ {
+ delete m_pScriptSubPackageIterator;
+ m_pScriptSubPackageIterator = NULL;
+ m_iBundledPackage++;
+ }
+ }
+ }
+
+ return xScriptPackage;
+}
+
+} // namespace basic
diff --git a/basic/source/uno/sbmodule.cxx b/basic/source/uno/sbmodule.cxx
new file mode 100644
index 000000000000..db9383a019b5
--- /dev/null
+++ b/basic/source/uno/sbmodule.cxx
@@ -0,0 +1,44 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+#include "sbmodule.hxx"
+#include <rtl/instance.hxx>
+
+//........................................................................
+namespace basic
+{
+//........................................................................
+
+ IMPLEMENT_COMPONENT_MODULE( BasicModule );
+
+//........................................................................
+} // namespace basic
+//........................................................................
+
+
diff --git a/basic/source/uno/sbmodule.hxx b/basic/source/uno/sbmodule.hxx
new file mode 100644
index 000000000000..459dac691896
--- /dev/null
+++ b/basic/source/uno/sbmodule.hxx
@@ -0,0 +1,45 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef SBMODULE_HXX
+#define SBMODULE_HXX
+
+#include <comphelper/componentmodule.hxx>
+
+//........................................................................
+namespace basic
+{
+//........................................................................
+
+ DECLARE_COMPONENT_MODULE( BasicModule, BasicModuleClient )
+
+//........................................................................
+} // namespace basic
+//........................................................................
+
+#endif // SBMODULE_HXX
+
diff --git a/basic/source/uno/sbservices.cxx b/basic/source/uno/sbservices.cxx
new file mode 100644
index 000000000000..7a1a4fd2d1cb
--- /dev/null
+++ b/basic/source/uno/sbservices.cxx
@@ -0,0 +1,63 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+#include "sbmodule.hxx"
+
+/** === begin UNO includes === **/
+/** === end UNO includes === **/
+
+//........................................................................
+namespace basic
+{
+//........................................................................
+
+ //--------------------------------------------------------------------
+ extern void createRegistryInfo_SfxDialogLibraryContainer();
+ extern void createRegistryInfo_SfxScriptLibraryContainer();
+
+ static void initializeModule()
+ {
+ static bool bInitialized( false );
+ if ( !bInitialized )
+ {
+ ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() );
+ if ( !bInitialized )
+ {
+ createRegistryInfo_SfxDialogLibraryContainer();
+ createRegistryInfo_SfxScriptLibraryContainer();
+ }
+ }
+ }
+
+//........................................................................
+} // namespace basic
+//........................................................................
+
+IMPLEMENT_COMPONENT_LIBRARY_API( ::basic::BasicModule, ::basic::initializeModule )
+
diff --git a/basic/source/uno/scriptcont.cxx b/basic/source/uno/scriptcont.cxx
new file mode 100644
index 000000000000..f7091d1c1a0b
--- /dev/null
+++ b/basic/source/uno/scriptcont.cxx
@@ -0,0 +1,1328 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+#include "scriptcont.hxx"
+#include "sbmodule.hxx"
+#include <com/sun/star/container/XNameContainer.hpp>
+#include <com/sun/star/xml/sax/XParser.hpp>
+#include <com/sun/star/xml/sax/InputSource.hpp>
+#include <com/sun/star/io/XOutputStream.hpp>
+#include <com/sun/star/io/XInputStream.hpp>
+#include <com/sun/star/io/XActiveDataSource.hpp>
+#include <com/sun/star/ucb/XSimpleFileAccess.hpp>
+#include <com/sun/star/embed/ElementModes.hpp>
+#include <com/sun/star/embed/XEncryptionProtectedSource.hpp>
+#include <com/sun/star/beans/XPropertySet.hpp>
+#include <com/sun/star/embed/XTransactedObject.hpp>
+#include <com/sun/star/task/ErrorCodeIOException.hpp>
+#include <com/sun/star/script/ModuleType.hpp>
+#include <comphelper/processfactory.hxx>
+#ifndef _COMPHELPER_STORAGEHELPER_HXX_
+#include <comphelper/storagehelper.hxx>
+#endif
+#include <unotools/streamwrap.hxx>
+#include <unotools/ucbstreamhelper.hxx>
+#include <osl/mutex.hxx>
+#include <rtl/digest.h>
+#include <rtl/strbuf.hxx>
+
+// For password functionality
+#include <tools/urlobj.hxx>
+
+
+#include <unotools/pathoptions.hxx>
+#include <svtools/sfxecode.hxx>
+#include <svtools/ehdl.hxx>
+#include <basic/basmgr.hxx>
+#include <basic/sbmod.hxx>
+#include <basic/basicmanagerrepository.hxx>
+#include "modsizeexceeded.hxx"
+#include <xmlscript/xmlmod_imexp.hxx>
+#include <cppuhelper/factory.hxx>
+#include <com/sun/star/util/VetoException.hpp>
+
+namespace basic
+{
+
+using namespace com::sun::star::document;
+using namespace com::sun::star::container;
+using namespace com::sun::star::io;
+using namespace com::sun::star::uno;
+using namespace com::sun::star::ucb;
+using namespace com::sun::star::lang;
+using namespace com::sun::star::script;
+using namespace com::sun::star::xml::sax;
+using namespace com::sun::star;
+using namespace cppu;
+using namespace rtl;
+using namespace osl;
+
+using com::sun::star::uno::Reference;
+
+//============================================================================
+// Implementation class SfxScriptLibraryContainer
+
+const sal_Char* SAL_CALL SfxScriptLibraryContainer::getInfoFileName() const { return "script"; }
+const sal_Char* SAL_CALL SfxScriptLibraryContainer::getOldInfoFileName() const { return "script"; }
+const sal_Char* SAL_CALL SfxScriptLibraryContainer::getLibElementFileExtension() const { return "xba"; }
+const sal_Char* SAL_CALL SfxScriptLibraryContainer::getLibrariesDir() const { return "Basic"; }
+
+// OldBasicPassword interface
+void SfxScriptLibraryContainer::setLibraryPassword
+ ( const String& rLibraryName, const String& rPassword )
+{
+ try
+ {
+ SfxLibrary* pImplLib = getImplLib( rLibraryName );
+ if( rPassword.Len() )
+ {
+ pImplLib->mbDoc50Password = sal_True;
+ pImplLib->mbPasswordProtected = sal_True;
+ pImplLib->maPassword = rPassword;
+ }
+ }
+ catch( NoSuchElementException& ) {}
+}
+
+String SfxScriptLibraryContainer::getLibraryPassword( const String& rLibraryName )
+{
+ SfxLibrary* pImplLib = getImplLib( rLibraryName );
+ String aPassword;
+ if( pImplLib->mbPasswordVerified )
+ aPassword = pImplLib->maPassword;
+ return aPassword;
+}
+
+void SfxScriptLibraryContainer::clearLibraryPassword( const String& rLibraryName )
+{
+ try
+ {
+ SfxLibrary* pImplLib = getImplLib( rLibraryName );
+ pImplLib->mbDoc50Password = sal_False;
+ pImplLib->mbPasswordProtected = sal_False;
+ pImplLib->maPassword = OUString();
+ }
+ catch( NoSuchElementException& ) {}
+}
+
+sal_Bool SfxScriptLibraryContainer::hasLibraryPassword( const String& rLibraryName )
+{
+ SfxLibrary* pImplLib = getImplLib( rLibraryName );
+ return pImplLib->mbPasswordProtected;
+}
+
+
+// Ctor for service
+SfxScriptLibraryContainer::SfxScriptLibraryContainer( void )
+ :maScriptLanguage( RTL_CONSTASCII_USTRINGPARAM( "StarBasic" ) )
+{
+ // all initialisation has to be done
+ // by calling XInitialization::initialize
+}
+
+SfxScriptLibraryContainer::SfxScriptLibraryContainer( const uno::Reference< embed::XStorage >& xStorage )
+ :maScriptLanguage( RTL_CONSTASCII_USTRINGPARAM( "StarBasic" ) )
+{
+ init( OUString(), xStorage );
+}
+
+// Methods to get library instances of the correct type
+SfxLibrary* SfxScriptLibraryContainer::implCreateLibrary( const OUString& aName )
+{
+ (void)aName; // Only needed for SfxDialogLibrary
+ SfxLibrary* pRet = new SfxScriptLibrary( maModifiable, mxMSF, mxSFI );
+ return pRet;
+}
+
+SfxLibrary* SfxScriptLibraryContainer::implCreateLibraryLink
+ ( const OUString& aName, const OUString& aLibInfoFileURL,
+ const OUString& StorageURL, sal_Bool ReadOnly )
+{
+ (void)aName; // Only needed for SfxDialogLibrary
+ SfxLibrary* pRet =
+ new SfxScriptLibrary
+ ( maModifiable, mxMSF, mxSFI, aLibInfoFileURL, StorageURL, ReadOnly );
+ return pRet;
+}
+
+Any SAL_CALL SfxScriptLibraryContainer::createEmptyLibraryElement( void )
+{
+ OUString aMod;
+ Any aRetAny;
+ aRetAny <<= aMod;
+ return aRetAny;
+}
+
+bool SAL_CALL SfxScriptLibraryContainer::isLibraryElementValid( Any aElement ) const
+{
+ return SfxScriptLibrary::containsValidModule( aElement );
+}
+
+void SAL_CALL SfxScriptLibraryContainer::writeLibraryElement
+(
+ const Reference < XNameContainer >& xLib,
+ const OUString& aElementName,
+ const Reference< XOutputStream >& xOutput
+)
+ throw(Exception)
+{
+ // Create sax writer
+ Reference< XExtendedDocumentHandler > xHandler(
+ mxMSF->createInstance(
+ OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.xml.sax.Writer") ) ), UNO_QUERY );
+ if( !xHandler.is() )
+ {
+ OSL_ENSURE( 0, "### couln't create sax-writer component\n" );
+ return;
+ }
+
+ Reference< XTruncate > xTruncate( xOutput, UNO_QUERY );
+ OSL_ENSURE( xTruncate.is(), "Currently only the streams that can be truncated are expected!" );
+ if ( xTruncate.is() )
+ xTruncate->truncate();
+
+ Reference< XActiveDataSource > xSource( xHandler, UNO_QUERY );
+ xSource->setOutputStream( xOutput );
+
+ xmlscript::ModuleDescriptor aMod;
+ aMod.aName = aElementName;
+ aMod.aLanguage = maScriptLanguage;
+ Any aElement = xLib->getByName( aElementName );
+ aElement >>= aMod.aCode;
+
+ Reference< script::vba::XVBAModuleInfo > xModInfo( xLib, UNO_QUERY );
+ if( xModInfo.is() && xModInfo->hasModuleInfo( aElementName ) )
+ {
+ script::ModuleInfo aModInfo = xModInfo->getModuleInfo( aElementName );
+ switch( aModInfo.ModuleType )
+ {
+ case ModuleType::NORMAL:
+ aMod.aModuleType = OUString( RTL_CONSTASCII_USTRINGPARAM("normal") );
+ break;
+ case ModuleType::CLASS:
+ aMod.aModuleType = OUString( RTL_CONSTASCII_USTRINGPARAM("class") );
+ break;
+ case ModuleType::FORM:
+ aMod.aModuleType = OUString( RTL_CONSTASCII_USTRINGPARAM("form") );
+ break;
+ case ModuleType::DOCUMENT:
+ aMod.aModuleType = OUString( RTL_CONSTASCII_USTRINGPARAM("document") );
+ break;
+ case ModuleType::UNKNOWN:
+ // nothing
+ break;
+ }
+ }
+
+ xmlscript::exportScriptModule( xHandler, aMod );
+}
+
+
+Any SAL_CALL SfxScriptLibraryContainer::importLibraryElement
+ ( const Reference < XNameContainer >& xLib,
+ const OUString& aElementName, const OUString& aFile,
+ const uno::Reference< io::XInputStream >& xInStream )
+{
+ Any aRetAny;
+
+ Reference< XParser > xParser( mxMSF->createInstance(
+ OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.xml.sax.Parser") ) ), UNO_QUERY );
+ if( !xParser.is() )
+ {
+ OSL_ENSURE( 0, "### couln't create sax parser component\n" );
+ return aRetAny;
+ }
+
+
+ // Read from storage?
+ sal_Bool bStorage = xInStream.is();
+ Reference< XInputStream > xInput;
+
+ if( bStorage )
+ {
+ xInput = xInStream;
+ }
+ else
+ {
+ try
+ {
+ xInput = mxSFI->openFileRead( aFile );
+ }
+ catch( Exception& )
+ //catch( Exception& e )
+ {
+ // TODO:
+ //throw WrappedTargetException( e );
+ }
+ }
+
+ if( !xInput.is() )
+ return aRetAny;
+
+ InputSource source;
+ source.aInputStream = xInput;
+ source.sSystemId = aFile;
+
+ // start parsing
+ xmlscript::ModuleDescriptor aMod;
+
+ try
+ {
+ xParser->setDocumentHandler( ::xmlscript::importScriptModule( aMod ) );
+ xParser->parseStream( source );
+ }
+ catch( Exception& )
+ {
+ SfxErrorContext aEc( ERRCTX_SFX_LOADBASIC, aFile );
+ ULONG nErrorCode = ERRCODE_IO_GENERAL;
+ ErrorHandler::HandleError( nErrorCode );
+ }
+
+ aRetAny <<= aMod.aCode;
+
+ // TODO: Check language
+ // aMod.aLanguage
+ // aMod.aName ignored
+ if( aMod.aModuleType.getLength() > 0 )
+ {
+ if( !getVBACompatibilityMode() )
+ {
+ setVBACompatibilityMode( sal_True );
+
+ Any aGlobs;
+ Sequence< Any > aArgs(1);
+ Reference<frame::XModel > xModel( mxOwnerDocument );
+ aArgs[ 0 ] <<= xModel;
+
+ BasicManager* pBasicMgr = getBasicManager();
+ if( pBasicMgr )
+ {
+ aGlobs <<= ::comphelper::getProcessServiceFactory()->createInstanceWithArguments( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ooo.vba.excel.Globals" ) ), aArgs );
+ pBasicMgr->SetGlobalUNOConstant( "VBAGlobals", aGlobs );
+ }
+ pBasicMgr = BasicManagerRepository::getApplicationBasicManager( sal_False );
+ if( pBasicMgr )
+ pBasicMgr->SetGlobalUNOConstant( "ThisExcelDoc", aArgs[0] );
+ }
+
+ script::ModuleInfo aModInfo;
+ aModInfo.ModuleType = ModuleType::UNKNOWN;
+ if( aMod.aModuleType.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("normal") ))
+ {
+ aModInfo.ModuleType = ModuleType::NORMAL;
+ }
+ else if( aMod.aModuleType.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("class") ))
+ {
+ aModInfo.ModuleType = ModuleType::CLASS;
+ }
+ else if( aMod.aModuleType.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("form") ))
+ {
+ aModInfo.ModuleType = ModuleType::FORM;
+ aModInfo.ModuleObject = mxOwnerDocument;
+ }
+ else if( aMod.aModuleType.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("document") ))
+ {
+ aModInfo.ModuleType = ModuleType::DOCUMENT;
+ Reference<frame::XModel > xModel( mxOwnerDocument );
+ Reference< XMultiServiceFactory> xSF( xModel, UNO_QUERY);
+ Reference< container::XNameAccess > xVBACodeNameAccess;
+ if( xSF.is() )
+ {
+ try
+ {
+ xVBACodeNameAccess.set( xSF->createInstance(
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
+ "ooo.vba.VBAObjectModuleObjectProvider"))),
+ UNO_QUERY );
+ }
+ catch(uno::Exception&) {}
+ }
+ if( xVBACodeNameAccess.is() )
+ {
+ try
+ {
+ aModInfo.ModuleObject.set( xVBACodeNameAccess->getByName( aElementName), uno::UNO_QUERY );
+ }
+ catch(uno::Exception&)
+ {
+ OSL_TRACE("Failed to get documument object for %s", rtl::OUStringToOString( aElementName, RTL_TEXTENCODING_UTF8 ).getStr() );
+ }
+ }
+ }
+
+ Reference< script::vba::XVBAModuleInfo > xVBAModuleInfo( xLib, UNO_QUERY );
+ if( xVBAModuleInfo.is() )
+ {
+ if( xVBAModuleInfo->hasModuleInfo( aElementName ) )
+ xVBAModuleInfo->removeModuleInfo( aElementName );
+ xVBAModuleInfo->insertModuleInfo( aElementName, aModInfo );
+ }
+ }
+
+ return aRetAny;
+}
+
+SfxLibraryContainer* SfxScriptLibraryContainer::createInstanceImpl( void )
+{
+ return new SfxScriptLibraryContainer();
+}
+
+void SAL_CALL SfxScriptLibraryContainer::importFromOldStorage( const ::rtl::OUString& aFile )
+{
+ // TODO: move loading from old storage to binary filters?
+ SotStorageRef xStorage = new SotStorage( sal_False, aFile );
+ if( xStorage.Is() && xStorage->GetError() == ERRCODE_NONE )
+ {
+ // We need a BasicManager to avoid problems
+ // StarBASIC* pBas = new StarBASIC();
+ BasicManager* pBasicManager = new BasicManager( *(SotStorage*)xStorage, aFile );
+
+ // Set info
+ LibraryContainerInfo aInfo( this, NULL, static_cast< OldBasicPassword* >( this ) );
+ pBasicManager->SetLibraryContainerInfo( aInfo );
+
+ // Now the libraries should be copied to this SfxScriptLibraryContainer
+ BasicManager::LegacyDeleteBasicManager( pBasicManager );
+ }
+}
+
+
+// Storing with password encryption
+
+// Methods XLibraryContainerPassword
+sal_Bool SAL_CALL SfxScriptLibraryContainer::isLibraryPasswordProtected( const OUString& Name )
+ throw (NoSuchElementException, RuntimeException)
+{
+ LibraryContainerMethodGuard aGuard( *this );
+ SfxLibrary* pImplLib = getImplLib( Name );
+ sal_Bool bRet = pImplLib->mbPasswordProtected;
+ return bRet;
+}
+
+sal_Bool SAL_CALL SfxScriptLibraryContainer::isLibraryPasswordVerified( const OUString& Name )
+ throw (IllegalArgumentException, NoSuchElementException, RuntimeException)
+{
+ LibraryContainerMethodGuard aGuard( *this );
+ SfxLibrary* pImplLib = getImplLib( Name );
+ if( !pImplLib->mbPasswordProtected )
+ throw IllegalArgumentException();
+ sal_Bool bRet = pImplLib->mbPasswordVerified;
+ return bRet;
+}
+
+sal_Bool SAL_CALL SfxScriptLibraryContainer::verifyLibraryPassword
+ ( const OUString& Name, const OUString& Password )
+ throw (IllegalArgumentException, NoSuchElementException, RuntimeException)
+{
+ LibraryContainerMethodGuard aGuard( *this );
+ SfxLibrary* pImplLib = getImplLib( Name );
+ if( !pImplLib->mbPasswordProtected || pImplLib->mbPasswordVerified )
+ throw IllegalArgumentException();
+
+ // Test password
+ sal_Bool bSuccess = sal_False;
+ if( pImplLib->mbDoc50Password )
+ {
+ bSuccess = ( Password == pImplLib->maPassword );
+ if( bSuccess )
+ pImplLib->mbPasswordVerified = sal_True;
+ }
+ else
+ {
+ pImplLib->maPassword = Password;
+ bSuccess = implLoadPasswordLibrary( pImplLib, Name, sal_True );
+ if( bSuccess )
+ {
+ // The library gets modified by verifiying the password, because other-
+ // wise for saving the storage would be copied and that doesn't work
+ // with mtg's storages when the password is verified
+ pImplLib->implSetModified( sal_True );
+ pImplLib->mbPasswordVerified = sal_True;
+
+ // Reload library to get source
+ if( pImplLib->mbLoaded )
+ implLoadPasswordLibrary( pImplLib, Name );
+ }
+ }
+ return bSuccess;
+}
+
+void SAL_CALL SfxScriptLibraryContainer::changeLibraryPassword( const OUString& Name,
+ const OUString& OldPassword, const OUString& NewPassword )
+ throw (IllegalArgumentException, NoSuchElementException, RuntimeException)
+{
+ LibraryContainerMethodGuard aGuard( *this );
+ SfxLibrary* pImplLib = getImplLib( Name );
+ if( OldPassword == NewPassword )
+ return;
+
+ sal_Bool bOldPassword = ( OldPassword.getLength() > 0 );
+ sal_Bool bNewPassword = ( NewPassword.getLength() > 0 );
+ sal_Bool bStorage = mxStorage.is() && !pImplLib->mbLink;
+
+ if( pImplLib->mbReadOnly || (bOldPassword && !pImplLib->mbPasswordProtected) )
+ throw IllegalArgumentException();
+
+ // Library must be loaded
+ loadLibrary( Name );
+
+ sal_Bool bKillCryptedFiles = sal_False;
+ sal_Bool bKillUncryptedFiles = sal_False;
+
+ // Remove or change password?
+ if( bOldPassword )
+ {
+ if( isLibraryPasswordVerified( Name ) )
+ {
+ if( pImplLib->maPassword != OldPassword )
+ throw IllegalArgumentException();
+ }
+ else
+ {
+ if( !verifyLibraryPassword( Name, OldPassword ) )
+ throw IllegalArgumentException();
+
+ // Reload library to get source
+ // Should be done in verifyLibraryPassword loadLibrary( Name );
+ }
+
+ if( !bNewPassword )
+ {
+ pImplLib->mbPasswordProtected = sal_False;
+ pImplLib->mbPasswordVerified = sal_False;
+ pImplLib->maPassword = OUString();
+
+ maModifiable.setModified( sal_True );
+ pImplLib->implSetModified( sal_True );
+
+ if( !bStorage && !pImplLib->mbDoc50Password )
+ {
+ // Store application basic uncrypted
+ uno::Reference< embed::XStorage > xStorage;
+ storeLibraries_Impl( xStorage, sal_False );
+ bKillCryptedFiles = sal_True;
+ }
+ }
+ }
+
+ // Set new password?
+ if( bNewPassword )
+ {
+ pImplLib->mbPasswordProtected = sal_True;
+ pImplLib->mbPasswordVerified = sal_True;
+ pImplLib->maPassword = NewPassword;
+
+ maModifiable.setModified( sal_True );
+ pImplLib->implSetModified( sal_True );
+
+ if( !bStorage && !pImplLib->mbDoc50Password )
+ {
+ // Store applictaion basic crypted
+ uno::Reference< embed::XStorage > xStorage;
+ storeLibraries_Impl( xStorage, sal_False );
+ bKillUncryptedFiles = sal_True;
+ }
+ }
+
+ if( bKillCryptedFiles || bKillUncryptedFiles )
+ {
+ Sequence< OUString > aElementNames = pImplLib->getElementNames();
+ sal_Int32 nNameCount = aElementNames.getLength();
+ const OUString* pNames = aElementNames.getConstArray();
+ OUString aLibDirPath = createAppLibraryFolder( pImplLib, Name );
+ try
+ {
+ for( sal_Int32 i = 0 ; i < nNameCount ; i++ )
+ {
+ OUString aElementName = pNames[ i ];
+
+ INetURLObject aElementInetObj( aLibDirPath );
+ aElementInetObj.insertName( aElementName, sal_False,
+ INetURLObject::LAST_SEGMENT, sal_True, INetURLObject::ENCODE_ALL );
+ if( bKillUncryptedFiles )
+ aElementInetObj.setExtension( maLibElementFileExtension );
+ else
+ aElementInetObj.setExtension( OUString( RTL_CONSTASCII_USTRINGPARAM("pba") ) );
+ String aElementPath( aElementInetObj.GetMainURL( INetURLObject::NO_DECODE ) );
+
+ if( mxSFI->exists( aElementPath ) )
+ mxSFI->kill( aElementPath );
+ }
+ }
+ catch( Exception& ) {}
+ }
+}
+
+
+void setStreamKey( uno::Reference< io::XStream > xStream, const ::rtl::OUString& aPass )
+{
+ uno::Reference< embed::XEncryptionProtectedSource > xEncrStream( xStream, uno::UNO_QUERY );
+ if ( xEncrStream.is() )
+ xEncrStream->setEncryptionPassword( aPass );
+}
+
+
+// Impl methods
+sal_Bool SfxScriptLibraryContainer::implStorePasswordLibrary( SfxLibrary* pLib,
+ const ::rtl::OUString& aName, const uno::Reference< embed::XStorage >& xStorage, const ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler >& xHandler )
+{
+ OUString aDummyLocation;
+ Reference< XSimpleFileAccess > xDummySFA;
+ return implStorePasswordLibrary( pLib, aName, xStorage, aDummyLocation, xDummySFA, xHandler );
+}
+
+sal_Bool SfxScriptLibraryContainer::implStorePasswordLibrary( SfxLibrary* pLib, const ::rtl::OUString& aName,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& xStorage,
+ const ::rtl::OUString& aTargetURL, const Reference< XSimpleFileAccess > xToUseSFI, const ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler >& xHandler )
+{
+ bool bExport = aTargetURL.getLength();
+
+ BasicManager* pBasicMgr = getBasicManager();
+ OSL_ENSURE( pBasicMgr, "SfxScriptLibraryContainer::implStorePasswordLibrary: cannot do this without a BasicManager!" );
+ if ( !pBasicMgr )
+ return sal_False;
+
+ // Only need to handle the export case here,
+ // save/saveas etc are handled in sfxbasemodel::storeSelf &
+ // sfxbasemodel::impl_store
+ uno::Sequence<rtl::OUString> aNames;
+ if ( bExport && pBasicMgr->LegacyPsswdBinaryLimitExceeded(aNames) )
+ {
+ if ( xHandler.is() )
+ {
+ ModuleSizeExceeded* pReq = new ModuleSizeExceeded( aNames );
+ uno::Reference< task::XInteractionRequest > xReq( pReq );
+ xHandler->handle( xReq );
+ if ( pReq->isAbort() )
+ throw util::VetoException();
+ }
+ }
+
+ StarBASIC* pBasicLib = pBasicMgr->GetLib( aName );
+ if( !pBasicLib )
+ return sal_False;
+
+ Sequence< OUString > aElementNames = pLib->getElementNames();
+ sal_Int32 nNameCount = aElementNames.getLength();
+ const OUString* pNames = aElementNames.getConstArray();
+
+ sal_Bool bLink = pLib->mbLink;
+ sal_Bool bStorage = xStorage.is() && !bLink;
+ if( bStorage )
+ {
+ for( sal_Int32 i = 0 ; i < nNameCount ; i++ )
+ {
+ OUString aElementName = pNames[ i ];
+
+ // Write binary image stream
+ SbModule* pMod = pBasicLib->FindModule( aElementName );
+ if( pMod )
+ {
+ //OUString aCodeStreamName( RTL_CONSTASCII_USTRINGPARAM("code.bin") );
+ OUString aCodeStreamName = aElementName;
+ aCodeStreamName += String( RTL_CONSTASCII_USTRINGPARAM(".bin") );
+
+ try {
+ uno::Reference< io::XStream > xCodeStream = xStorage->openStreamElement(
+ aCodeStreamName,
+ embed::ElementModes::READWRITE | embed::ElementModes::TRUNCATE );
+
+ if ( !xCodeStream.is() )
+ throw uno::RuntimeException();
+
+ SvMemoryStream aMemStream;
+ /*BOOL bStore = */pMod->StoreBinaryData( aMemStream );
+
+ sal_Int32 nSize = (sal_Int32)aMemStream.Tell();
+ Sequence< sal_Int8 > aBinSeq( nSize );
+ sal_Int8* pData = aBinSeq.getArray();
+ ::rtl_copyMemory( pData, aMemStream.GetData(), nSize );
+
+ Reference< XOutputStream > xOut = xCodeStream->getOutputStream();
+ if ( !xOut.is() )
+ throw io::IOException(); // access denied because the stream is readonly
+
+ xOut->writeBytes( aBinSeq );
+ xOut->closeOutput();
+ }
+ catch( uno::Exception& )
+ {
+ // TODO: handle error
+ }
+ }
+
+ if( pLib->mbPasswordVerified || pLib->mbDoc50Password )
+ {
+ /*Any aElement = pLib->getByName( aElementName );*/
+ if( !isLibraryElementValid( pLib->getByName( aElementName ) ) )
+ {
+ #if OSL_DEBUG_LEVEL > 0
+ ::rtl::OStringBuffer aMessage;
+ aMessage.append( "invalid library element '" );
+ aMessage.append( ::rtl::OUStringToOString( aElementName, osl_getThreadTextEncoding() ) );
+ aMessage.append( "'." );
+ OSL_ENSURE( false, aMessage.makeStringAndClear().getStr() );
+ #endif
+ continue;
+ }
+
+ OUString aSourceStreamName = aElementName;
+ aSourceStreamName += String( RTL_CONSTASCII_USTRINGPARAM(".xml") );
+
+ try {
+ uno::Reference< io::XStream > xSourceStream = xStorage->openStreamElement(
+ aSourceStreamName,
+ embed::ElementModes::READWRITE );
+ uno::Reference< beans::XPropertySet > xProps( xSourceStream, uno::UNO_QUERY );
+ if ( !xProps.is() )
+ throw uno::RuntimeException();
+
+ String aPropName( String::CreateFromAscii( RTL_CONSTASCII_STRINGPARAM("MediaType") ) );
+ OUString aMime( RTL_CONSTASCII_USTRINGPARAM("text/xml") );
+ xProps->setPropertyValue( aPropName, uno::makeAny( aMime ) );
+
+ // Set encryption key
+ setStreamKey( xSourceStream, pLib->maPassword );
+
+ Reference< XOutputStream > xOutput = xSourceStream->getOutputStream();
+ Reference< XNameContainer > xLib( pLib );
+ writeLibraryElement( xLib, aElementName, xOutput );
+ // writeLibraryElement should have the stream already closed
+ // xOutput->closeOutput();
+ }
+ catch( uno::Exception& )
+ {
+ OSL_ENSURE( sal_False, "Problem on storing of password library!\n" );
+ // TODO: error handling
+ }
+ }
+ else // !mbPasswordVerified
+ {
+ // TODO
+ // What to do if not verified?! In any case it's already loaded here
+ }
+ }
+
+ }
+ // Application libraries have only to be saved if the password
+ // is verified because otherwise they can't be modified
+ else if( pLib->mbPasswordVerified || bExport )
+ {
+ try
+ {
+ Reference< XSimpleFileAccess > xSFI = mxSFI;
+ if( xToUseSFI.is() )
+ xSFI = xToUseSFI;
+
+ OUString aLibDirPath;
+ if( bExport )
+ {
+ INetURLObject aInetObj( aTargetURL );
+ aInetObj.insertName( aName, sal_True, INetURLObject::LAST_SEGMENT, sal_True, INetURLObject::ENCODE_ALL );
+ aLibDirPath = aInetObj.GetMainURL( INetURLObject::NO_DECODE );
+
+ if( !xSFI->isFolder( aLibDirPath ) )
+ xSFI->createFolder( aLibDirPath );
+ }
+ else
+ {
+ aLibDirPath = createAppLibraryFolder( pLib, aName );
+ }
+
+ for( sal_Int32 i = 0 ; i < nNameCount ; i++ )
+ {
+ OUString aElementName = pNames[ i ];
+
+ INetURLObject aElementInetObj( aLibDirPath );
+ aElementInetObj.insertName( aElementName, sal_False,
+ INetURLObject::LAST_SEGMENT, sal_True, INetURLObject::ENCODE_ALL );
+ aElementInetObj.setExtension( OUString( RTL_CONSTASCII_USTRINGPARAM("pba") ) );
+ String aElementPath = aElementInetObj.GetMainURL( INetURLObject::NO_DECODE );
+
+ /*Any aElement = pLib->getByName( aElementName );*/
+ if( !isLibraryElementValid( pLib->getByName( aElementName ) ) )
+ {
+ #if OSL_DEBUG_LEVEL > 0
+ ::rtl::OStringBuffer aMessage;
+ aMessage.append( "invalid library element '" );
+ aMessage.append( ::rtl::OUStringToOString( aElementName, osl_getThreadTextEncoding() ) );
+ aMessage.append( "'." );
+ OSL_ENSURE( false, aMessage.makeStringAndClear().getStr() );
+ #endif
+ continue;
+ }
+
+ try
+ {
+ uno::Reference< embed::XStorage > xElementRootStorage =
+ ::comphelper::OStorageHelper::GetStorageFromURL(
+ aElementPath,
+ embed::ElementModes::READWRITE );
+ if ( !xElementRootStorage.is() )
+ throw uno::RuntimeException();
+
+ // Write binary image stream
+ SbModule* pMod = pBasicLib->FindModule( aElementName );
+ if( pMod )
+ {
+ OUString aCodeStreamName( RTL_CONSTASCII_USTRINGPARAM("code.bin") );
+
+ uno::Reference< io::XStream > xCodeStream = xElementRootStorage->openStreamElement(
+ aCodeStreamName,
+ embed::ElementModes::WRITE | embed::ElementModes::TRUNCATE );
+
+ SvMemoryStream aMemStream;
+ /*BOOL bStore = */pMod->StoreBinaryData( aMemStream );
+
+ sal_Int32 nSize = (sal_Int32)aMemStream.Tell();
+ Sequence< sal_Int8 > aBinSeq( nSize );
+ sal_Int8* pData = aBinSeq.getArray();
+ ::rtl_copyMemory( pData, aMemStream.GetData(), nSize );
+
+ Reference< XOutputStream > xOut = xCodeStream->getOutputStream();
+ if ( xOut.is() )
+ {
+ xOut->writeBytes( aBinSeq );
+ xOut->closeOutput();
+ }
+ }
+
+ // Write encrypted source stream
+ OUString aSourceStreamName( RTL_CONSTASCII_USTRINGPARAM("source.xml") );
+
+ uno::Reference< io::XStream > xSourceStream;
+ try
+ {
+ xSourceStream = xElementRootStorage->openStreamElement(
+ aSourceStreamName,
+ embed::ElementModes::WRITE | embed::ElementModes::TRUNCATE );
+
+ // #87671 Allow encryption
+ uno::Reference< embed::XEncryptionProtectedSource > xEncr( xSourceStream, uno::UNO_QUERY );
+ OSL_ENSURE( xEncr.is(),
+ "StorageStream opened for writing must implement XEncryptionProtectedSource!\n" );
+ if ( !xEncr.is() )
+ throw uno::RuntimeException();
+ xEncr->setEncryptionPassword( pLib->maPassword );
+ }
+ catch( ::com::sun::star::packages::WrongPasswordException& )
+ {
+ xSourceStream = xElementRootStorage->openEncryptedStreamElement(
+ aSourceStreamName,
+ embed::ElementModes::WRITE | embed::ElementModes::TRUNCATE,
+ pLib->maPassword );
+ }
+
+ uno::Reference< beans::XPropertySet > xProps( xSourceStream, uno::UNO_QUERY );
+ if ( !xProps.is() )
+ throw uno::RuntimeException();
+ String aPropName( String::CreateFromAscii( RTL_CONSTASCII_STRINGPARAM("MediaType") ) );
+ OUString aMime( RTL_CONSTASCII_USTRINGPARAM("text/xml") );
+ xProps->setPropertyValue( aPropName, uno::makeAny( aMime ) );
+
+ Reference< XOutputStream > xOut = xSourceStream->getOutputStream();
+ Reference< XNameContainer > xLib( pLib );
+ writeLibraryElement( xLib, aElementName, xOut );
+ // i50568: sax writer already closes stream
+ // xOut->closeOutput();
+
+ uno::Reference< embed::XTransactedObject > xTransact( xElementRootStorage, uno::UNO_QUERY );
+ OSL_ENSURE( xTransact.is(), "The storage must implement XTransactedObject!\n" );
+ if ( !xTransact.is() )
+ throw uno::RuntimeException();
+
+ xTransact->commit();
+ }
+ catch( uno::Exception& )
+ {
+ // TODO: handle error
+ }
+
+ // Storage Dtor commits too, that makes problems
+ // xElementRootStorage->Commit();
+ }
+ }
+ catch( Exception& )
+ {
+ //throw e;
+ }
+ }
+ return sal_True;
+}
+
+sal_Bool SfxScriptLibraryContainer::implLoadPasswordLibrary
+ ( SfxLibrary* pLib, const OUString& Name, sal_Bool bVerifyPasswordOnly )
+ throw(WrappedTargetException, RuntimeException)
+{
+ sal_Bool bRet = sal_True;
+
+ sal_Bool bLink = pLib->mbLink;
+ sal_Bool bStorage = mxStorage.is() && !bLink;
+
+ // Already loaded? Then only verifiedPassword can change something
+ SfxScriptLibrary* pScriptLib = static_cast< SfxScriptLibrary* >( pLib );
+ if( pScriptLib->mbLoaded )
+ {
+ if( pScriptLib->mbLoadedBinary && !bVerifyPasswordOnly &&
+ (pScriptLib->mbLoadedSource || !pLib->mbPasswordVerified) )
+ return sal_False;
+ }
+
+ StarBASIC* pBasicLib = NULL;
+ sal_Bool bLoadBinary = sal_False;
+ if( !pScriptLib->mbLoadedBinary && !bVerifyPasswordOnly && !pLib->mbPasswordVerified )
+ {
+ BasicManager* pBasicMgr = getBasicManager();
+ OSL_ENSURE( pBasicMgr, "SfxScriptLibraryContainer::implLoadPasswordLibrary: cannot do this without a BasicManager!" );
+ sal_Bool bLoaded = pScriptLib->mbLoaded;
+ pScriptLib->mbLoaded = sal_True; // Necessary to get lib
+ pBasicLib = pBasicMgr ? pBasicMgr->GetLib( Name ) : NULL;
+ pScriptLib->mbLoaded = bLoaded; // Restore flag
+ if( !pBasicLib )
+ return sal_False;
+
+ bLoadBinary = sal_True;
+ pScriptLib->mbLoadedBinary = sal_True;
+ }
+
+ sal_Bool bLoadSource = sal_False;
+ if( !pScriptLib->mbLoadedSource && pLib->mbPasswordVerified && !bVerifyPasswordOnly )
+ {
+ bLoadSource = sal_True;
+ pScriptLib->mbLoadedSource = sal_True;
+ }
+
+ Sequence< OUString > aElementNames = pLib->getElementNames();
+ sal_Int32 nNameCount = aElementNames.getLength();
+ const OUString* pNames = aElementNames.getConstArray();
+
+ if( bStorage )
+ {
+ uno::Reference< embed::XStorage > xLibrariesStor;
+ uno::Reference< embed::XStorage > xLibraryStor;
+ if( bStorage )
+ {
+ try {
+ xLibrariesStor = mxStorage->openStorageElement( maLibrariesDir, embed::ElementModes::READ );
+ if ( !xLibrariesStor.is() )
+ throw uno::RuntimeException();
+
+ xLibraryStor = xLibrariesStor->openStorageElement( Name, embed::ElementModes::READ );
+ if ( !xLibraryStor.is() )
+ throw uno::RuntimeException();
+ }
+ catch( uno::Exception& )
+ {
+ OSL_ENSURE( 0, "### couln't open sub storage for library\n" );
+ return sal_False;
+ }
+ }
+
+ for( sal_Int32 i = 0 ; i < nNameCount ; i++ )
+ {
+ OUString aElementName = pNames[ i ];
+
+ // Load binary
+ if( bLoadBinary )
+ {
+ SbModule* pMod = pBasicLib->FindModule( aElementName );
+ if( !pMod )
+ {
+ pMod = pBasicLib->MakeModule( aElementName, String() );
+ pBasicLib->SetModified( FALSE );
+ }
+
+ //OUString aCodeStreamName( RTL_CONSTASCII_USTRINGPARAM("code.bin") );
+ OUString aCodeStreamName= aElementName;
+ aCodeStreamName += String( RTL_CONSTASCII_USTRINGPARAM(".bin") );
+
+ try {
+ uno::Reference< io::XStream > xCodeStream = xLibraryStor->openStreamElement(
+ aCodeStreamName,
+ embed::ElementModes::READ );
+ if ( !xCodeStream.is() )
+ throw uno::RuntimeException();
+
+ SvStream* pStream = ::utl::UcbStreamHelper::CreateStream( xCodeStream );
+ if ( !pStream || pStream->GetError() )
+ {
+ sal_Int32 nError = pStream ? pStream->GetError() : ERRCODE_IO_GENERAL;
+ delete pStream;
+ throw task::ErrorCodeIOException( ::rtl::OUString(), uno::Reference< uno::XInterface >(), nError );
+ }
+
+ /*BOOL bRet = */pMod->LoadBinaryData( *pStream );
+ // TODO: Check return value
+
+ delete pStream;
+ }
+ catch( uno::Exception& )
+ {
+ // TODO: error handling
+ }
+ }
+
+ // Load source
+ if( bLoadSource || bVerifyPasswordOnly )
+ {
+ // Access encrypted source stream
+ OUString aSourceStreamName = aElementName;
+ aSourceStreamName += String( RTL_CONSTASCII_USTRINGPARAM(".xml") );
+
+ try {
+ uno::Reference< io::XStream > xSourceStream = xLibraryStor->openEncryptedStreamElement(
+ aSourceStreamName,
+ embed::ElementModes::READ,
+ pLib->maPassword );
+ if ( !xSourceStream.is() )
+ throw uno::RuntimeException();
+
+ // if this point is reached then the password is correct
+ if ( !bVerifyPasswordOnly )
+ {
+ uno::Reference< io::XInputStream > xInStream = xSourceStream->getInputStream();
+ if ( !xInStream.is() )
+ throw io::IOException(); // read access denied, seems to be impossible
+
+ Reference< XNameContainer > xLib( pLib );
+ Any aAny = importLibraryElement( xLib,
+ aElementName, aSourceStreamName,
+ xInStream );
+ if( pLib->hasByName( aElementName ) )
+ {
+ if( aAny.hasValue() )
+ pLib->maNameContainer.replaceByName( aElementName, aAny );
+ }
+ else
+ {
+ pLib->maNameContainer.insertByName( aElementName, aAny );
+ }
+ }
+ }
+ catch( uno::Exception& )
+ {
+ bRet = sal_False;
+ }
+ }
+ }
+ }
+ else
+ {
+ try
+ {
+ OUString aLibDirPath = createAppLibraryFolder( pLib, Name );
+
+ for( sal_Int32 i = 0 ; i < nNameCount ; i++ )
+ {
+ OUString aElementName = pNames[ i ];
+
+ INetURLObject aElementInetObj( aLibDirPath );
+ aElementInetObj.insertName( aElementName, sal_False,
+ INetURLObject::LAST_SEGMENT, sal_True, INetURLObject::ENCODE_ALL );
+ aElementInetObj.setExtension( OUString( RTL_CONSTASCII_USTRINGPARAM("pba") ) );
+ String aElementPath = aElementInetObj.GetMainURL( INetURLObject::NO_DECODE );
+
+ uno::Reference< embed::XStorage > xElementRootStorage;
+ try {
+ xElementRootStorage = ::comphelper::OStorageHelper::GetStorageFromURL(
+ aElementPath,
+ embed::ElementModes::READ );
+ } catch( uno::Exception& )
+ {
+ // TODO: error handling
+ }
+
+ if ( xElementRootStorage.is() )
+ {
+ // Load binary
+ if( bLoadBinary )
+ {
+ SbModule* pMod = pBasicLib->FindModule( aElementName );
+ if( !pMod )
+ {
+ pMod = pBasicLib->MakeModule( aElementName, String() );
+ pBasicLib->SetModified( FALSE );
+ }
+
+ try {
+ OUString aCodeStreamName( RTL_CONSTASCII_USTRINGPARAM("code.bin") );
+ uno::Reference< io::XStream > xCodeStream = xElementRootStorage->openStreamElement(
+ aCodeStreamName,
+ embed::ElementModes::READ );
+
+ SvStream* pStream = ::utl::UcbStreamHelper::CreateStream( xCodeStream );
+ if ( !pStream || pStream->GetError() )
+ {
+ sal_Int32 nError = pStream ? pStream->GetError() : ERRCODE_IO_GENERAL;
+ delete pStream;
+ throw task::ErrorCodeIOException( ::rtl::OUString(),
+ uno::Reference< uno::XInterface >(),
+ nError );
+ }
+
+ /*BOOL bRet = */pMod->LoadBinaryData( *pStream );
+ // TODO: Check return value
+
+ delete pStream;
+ }
+ catch( uno::Exception& )
+ {
+ // TODO: error handling
+ }
+ }
+
+ // Load source
+ if( bLoadSource || bVerifyPasswordOnly )
+ {
+ // Access encrypted source stream
+ OUString aSourceStreamName( RTL_CONSTASCII_USTRINGPARAM("source.xml") );
+ try {
+ uno::Reference< io::XStream > xSourceStream = xElementRootStorage->openEncryptedStreamElement(
+ aSourceStreamName,
+ embed::ElementModes::READ,
+ pLib->maPassword );
+ if ( !xSourceStream.is() )
+ throw uno::RuntimeException();
+
+ if ( !bVerifyPasswordOnly )
+ {
+ uno::Reference< io::XInputStream > xInStream = xSourceStream->getInputStream();
+ if ( !xInStream.is() )
+ throw io::IOException(); // read access denied, seems to be impossible
+
+ Reference< XNameContainer > xLib( pLib );
+ Any aAny = importLibraryElement( xLib,
+ aElementName,
+ aSourceStreamName,
+ xInStream );
+ if( pLib->hasByName( aElementName ) )
+ {
+ if( aAny.hasValue() )
+ pLib->maNameContainer.replaceByName( aElementName, aAny );
+ }
+ else
+ {
+ pLib->maNameContainer.insertByName( aElementName, aAny );
+ }
+ }
+ }
+ catch ( uno::Exception& )
+ {
+ bRet = sal_False;
+ }
+ }
+ }
+ }
+
+ }
+ catch( Exception& )
+ {
+ // TODO
+ //throw e;
+ }
+ }
+
+//REMOVE // If the password is verified the library must remain modified, because
+//REMOVE // otherwise for saving the storage would be copied and that doesn't work
+//REMOVE // with mtg's storages when the password is verified
+//REMOVE if( !pLib->mbPasswordVerified )
+//REMOVE pLib->mbModified = sal_False;
+ return bRet;
+}
+
+
+void SfxScriptLibraryContainer::onNewRootStorage()
+{
+}
+
+//============================================================================
+// Service
+void createRegistryInfo_SfxScriptLibraryContainer()
+{
+ static OAutoRegistration< SfxScriptLibraryContainer > aAutoRegistration;
+}
+
+::rtl::OUString SAL_CALL SfxScriptLibraryContainer::getImplementationName( ) throw (RuntimeException)
+{
+ return getImplementationName_static();
+}
+
+Sequence< ::rtl::OUString > SAL_CALL SfxScriptLibraryContainer::getSupportedServiceNames( ) throw (RuntimeException)
+{
+ return getSupportedServiceNames_static();
+}
+
+Sequence< OUString > SfxScriptLibraryContainer::getSupportedServiceNames_static()
+{
+ Sequence< OUString > aServiceNames( 2 );
+ aServiceNames[0] = OUString::createFromAscii( "com.sun.star.script.DocumentScriptLibraryContainer" );
+ // plus, for compatibility:
+ aServiceNames[1] = OUString::createFromAscii( "com.sun.star.script.ScriptLibraryContainer" );
+ return aServiceNames;
+}
+
+OUString SfxScriptLibraryContainer::getImplementationName_static()
+{
+ static OUString aImplName;
+ static sal_Bool bNeedsInit = sal_True;
+
+ MutexGuard aGuard( Mutex::getGlobalMutex() );
+ if( bNeedsInit )
+ {
+ aImplName = OUString::createFromAscii( "com.sun.star.comp.sfx2.ScriptLibraryContainer" );
+ bNeedsInit = sal_False;
+ }
+ return aImplName;
+}
+
+Reference< XInterface > SAL_CALL SfxScriptLibraryContainer::Create
+ ( const Reference< XComponentContext >& )
+ throw( Exception )
+{
+ Reference< XInterface > xRet =
+ static_cast< XInterface* >( static_cast< OWeakObject* >(new SfxScriptLibraryContainer()) );
+ return xRet;
+}
+
+//============================================================================
+// Implementation class SfxScriptLibrary
+
+// Ctor
+SfxScriptLibrary::SfxScriptLibrary( ModifiableHelper& _rModifiable,
+ const Reference< XMultiServiceFactory >& xMSF,
+ const Reference< XSimpleFileAccess >& xSFI )
+ : SfxLibrary( _rModifiable, getCppuType( (const OUString *)0 ), xMSF, xSFI )
+ , mbLoadedSource( sal_False )
+ , mbLoadedBinary( sal_False )
+{
+}
+
+SfxScriptLibrary::SfxScriptLibrary( ModifiableHelper& _rModifiable,
+ const Reference< XMultiServiceFactory >& xMSF,
+ const Reference< XSimpleFileAccess >& xSFI,
+ const OUString& aLibInfoFileURL,
+ const OUString& aStorageURL,
+ sal_Bool ReadOnly )
+ : SfxLibrary( _rModifiable, getCppuType( (const OUString *)0 ), xMSF, xSFI,
+ aLibInfoFileURL, aStorageURL, ReadOnly)
+ , mbLoadedSource( sal_False )
+ , mbLoadedBinary( sal_False )
+{
+}
+
+// Provide modify state including resources
+sal_Bool SfxScriptLibrary::isModified( void )
+{
+ return implIsModified(); // No resources
+}
+
+void SfxScriptLibrary::storeResources( void )
+{
+ // No resources
+}
+
+void SfxScriptLibrary::storeResourcesToURL( const ::rtl::OUString& URL,
+ const Reference< task::XInteractionHandler >& Handler )
+{
+ (void)URL;
+ (void)Handler;
+}
+
+void SfxScriptLibrary::storeResourcesAsURL
+ ( const ::rtl::OUString& URL, const ::rtl::OUString& NewName )
+{
+ (void)URL;
+ (void)NewName;
+}
+
+void SfxScriptLibrary::storeResourcesToStorage( const ::com::sun::star::uno::Reference
+ < ::com::sun::star::embed::XStorage >& xStorage )
+{
+ // No resources
+ (void)xStorage;
+}
+
+bool SfxScriptLibrary::containsValidModule( const Any& aElement )
+{
+ OUString sModuleText;
+ aElement >>= sModuleText;
+ return ( sModuleText.getLength() > 0 );
+}
+
+bool SAL_CALL SfxScriptLibrary::isLibraryElementValid( ::com::sun::star::uno::Any aElement ) const
+{
+ return SfxScriptLibrary::containsValidModule( aElement );
+}
+
+IMPLEMENT_FORWARD_XINTERFACE2( SfxScriptLibrary, SfxLibrary, SfxScriptLibrary_BASE );
+IMPLEMENT_FORWARD_XTYPEPROVIDER2( SfxScriptLibrary, SfxLibrary, SfxScriptLibrary_BASE );
+
+script::ModuleInfo SAL_CALL
+SfxScriptLibrary::getModuleInfo( const ::rtl::OUString& ModuleName ) throw (NoSuchElementException, WrappedTargetException, RuntimeException)
+{
+ if ( !hasModuleInfo( ModuleName ) )
+ throw NoSuchElementException();
+ return mModuleInfos[ ModuleName ];
+}
+
+sal_Bool SAL_CALL
+SfxScriptLibrary::hasModuleInfo( const ::rtl::OUString& ModuleName ) throw (RuntimeException)
+{
+ sal_Bool bRes = sal_False;
+ ModuleInfoMap::iterator it = mModuleInfos.find( ModuleName );
+
+ if ( it != mModuleInfos.end() )
+ bRes = sal_True;
+
+ return bRes;
+}
+
+void SAL_CALL SfxScriptLibrary::insertModuleInfo( const ::rtl::OUString& ModuleName, const script::ModuleInfo& ModuleInfo ) throw (IllegalArgumentException, ElementExistException, WrappedTargetException, RuntimeException)
+{
+ if ( hasModuleInfo( ModuleName ) )
+ throw ElementExistException();
+ mModuleInfos[ ModuleName ] = ModuleInfo;
+}
+
+void SAL_CALL SfxScriptLibrary::removeModuleInfo( const ::rtl::OUString& ModuleName ) throw (NoSuchElementException, WrappedTargetException, RuntimeException)
+{
+ // #FIXME add NoSuchElementException to the spec
+ if ( !hasModuleInfo( ModuleName ) )
+ throw NoSuchElementException();
+ mModuleInfos.erase( mModuleInfos.find( ModuleName ) );
+}
+
+
+//============================================================================
+
+} // namespace basic
diff --git a/basic/util/makefile.mk b/basic/util/makefile.mk
new file mode 100644
index 000000000000..629586f0441c
--- /dev/null
+++ b/basic/util/makefile.mk
@@ -0,0 +1,146 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..
+
+PRJNAME=basic
+TARGET=sb
+#basic.hid generieren
+GEN_HID=TRUE
+
+# --- Settings ---------------------------------------------------
+
+.INCLUDE : settings.mk
+
+# --- Allgemein ---------------------------------------------------
+
+LIB1TARGET=$(SLB)$/sb.lib
+LIB1FILES= \
+ $(SLB)$/basicmgr.lib \
+ $(SLB)$/classes.lib \
+ $(SLB)$/comp.lib \
+ $(SLB)$/uno.lib \
+ $(SLB)$/runtime.lib \
+ $(SLB)$/sbx.lib
+
+SHL1TARGET= sb$(DLLPOSTFIX)
+SHL1IMPLIB= basic
+
+SHL1STDLIBS= \
+ $(CPPULIB) \
+ $(CPPUHELPERLIB) \
+ $(TOOLSLIB) \
+ $(SVTOOLLIB) \
+ $(SVLLIB) \
+ $(VCLLIB) \
+ $(VOSLIB) \
+ $(SALLIB) \
+ $(SALHELPERLIB) \
+ $(COMPHELPERLIB) \
+ $(UNOTOOLSLIB) \
+ $(SOTLIB) \
+ $(VOSLIB) \
+ $(XMLSCRIPTLIB)
+
+.IF "$(SOLAR_JAVA)" != "TRUE"
+SHL1STDLIBS+=$(SJLIB)
+.ENDIF
+
+.IF "$(GUI)"=="WNT"
+SHL1STDLIBS+= \
+ $(UWINAPILIB) \
+ $(OLEAUT32LIB)
+.ENDIF # WNT
+
+.IF "$(GUI)" != "UNX"
+.IF "$(COM)" != "GCC"
+SHL1OBJS= \
+ $(SLO)$/sb.obj
+.ENDIF
+.ENDIF
+
+SHL1DEF= $(MISC)$/$(SHL1TARGET).def
+SHL1LIBS= $(SLB)$/sb.lib
+
+DEF1NAME =$(SHL1TARGET)
+DEF1DEPN = \
+ $(MISC)$/$(SHL1TARGET).flt
+
+DEFLIB1NAME =sb
+DEF1DES =StarBasic
+
+
+RES1TARGET=$(PRJNAME)
+SRS1FILES= \
+ $(SRS)$/classes.srs \
+ $(SRS)$/sbx.srs
+
+# --- TESTTOOL IDE ------------------------------------------------------
+# The resources are linked here
+
+RESLIB1NAME=stt
+RESLIB1IMAGES=$(PRJ)$/res
+RESLIB1SRSFILES= \
+ $(SRS)$/app.srs
+
+RESLIB2NAME=sb
+RESLIB2IMAGES=$(PRJ)$/res
+RESLIB2SRSFILES= \
+ $(SRS)$/classes.srs \
+ $(SRS)$/sbx.srs
+########## remove sbx.srx (and this line) when issue i53795 is fixed
+
+# --- Targets -----------------------------------------------------------
+
+.INCLUDE : target.mk
+
+#-------------------------------------------------------------------------
+# Windows NT
+#-------------------------------------------------------------------------
+#
+# default targets aus target.mk
+#
+
+# --- Basic-Filter-Datei ---
+
+$(MISC)$/$(SHL1TARGET).flt: makefile.mk
+ @echo ------------------------------
+ @echo Making: $@
+ @echo WEP > $@
+ @echo LIBMAIN >> $@
+ @echo LibMain >> $@
+ @echo Sbi >> $@
+ @echo SvRTL >> $@
+ @echo SbRtl_ >> $@
+ @echo exception >> $@
+ @echo bad_alloc >> $@
+ @echo __CT >> $@
+
+$(SRS)$/basic.srs:
+ $(TYPE) $(SRS)$/classes.srs + $(SRS)$/runtime.srs + $(SRS)$/sbx.srs > $@
+
+
diff --git a/basic/win/res/basic.ico b/basic/win/res/basic.ico
new file mode 100644
index 000000000000..c453a0fa988f
--- /dev/null
+++ b/basic/win/res/basic.ico
Binary files differ
diff --git a/basic/win/res/testtool.ico b/basic/win/res/testtool.ico
new file mode 100644
index 000000000000..db880c8678a7
--- /dev/null
+++ b/basic/win/res/testtool.ico
Binary files differ
diff --git a/basic/win/res/work.ico b/basic/win/res/work.ico
new file mode 100644
index 000000000000..43e3b5b3df03
--- /dev/null
+++ b/basic/win/res/work.ico
Binary files differ
diff --git a/basic/workben/basmgr.src b/basic/workben/basmgr.src
new file mode 100644
index 000000000000..f89c719c2399
--- /dev/null
+++ b/basic/workben/basmgr.src
@@ -0,0 +1,31 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#pragma CHARSET_IBMPC
+
+String 300 {
+ Text = "Dummy";
+};
diff --git a/basic/workben/makefile.mk b/basic/workben/makefile.mk
new file mode 100644
index 000000000000..6ec2a9971b9e
--- /dev/null
+++ b/basic/workben/makefile.mk
@@ -0,0 +1,89 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..
+
+PRJNAME=basic
+TARGET=miniapp
+TARGETTYPE=GUI
+
+# --- Settings ---------------------------------------------------
+
+.INCLUDE : settings.mk
+
+# --- SBASIC IDE --------------------------------------------------------
+
+APP1TARGET=$(PRJNAME)app
+APP1STDLIBS= \
+ $(SALLIB) \
+ $(TOOLSLIB) \
+ $(UNOTOOLSLIB) \
+ $(SVTOOLLIB) \
+ $(SVLLIB) \
+ $(VCLLIB) \
+ $(COMPHELPERLIB) \
+ $(UCBHELPERLIB) \
+ $(CPPUHELPERLIB) \
+ $(CPPULIB) \
+ $(SJLIB) \
+ $(SOTLIB) \
+ $(VOSLIB)
+
+#.IF "$(GUI)"=="WNT" || "$(COM)"=="GCC"
+#APP1STDLIBS+=$(CPPULIB)
+#.ENDIF
+#.IF "$(GUI)"=="UNX"
+#APP1STDLIBS+= \
+# $(VOSLIB) \
+# $(SALLIB)
+#.ENDIF
+
+.IF "$(GUI)"!="OS2"
+APP1LIBS= \
+ $(LB)$/basic.lib
+.ENDIF
+APP1LIBS+= \
+ $(LB)$/app.lib \
+ $(LB)$/sample.lib
+.IF "$(GUI)"=="UNX" || "$(GUI)"=="OS2"
+APP1STDLIBS+= \
+ $(BASICLIB)
+.ENDIF
+
+
+APP1DEPN= $(L)$/itools.lib $(SVLIBDEPEND) $(LB)$/basic.lib $(LB)$/app.lib $(LB)$/sample.lib
+
+APP1OBJS = $(OBJ)$/ttbasic.obj
+
+.IF "$(GUI)" != "UNX"
+APP1OBJS+= \
+ $(OBJ)$/app.obj \
+ $(SLO)$/sbintern.obj
+.ENDIF
+
+.INCLUDE : target.mk
+
diff --git a/basic/workben/mgrtest.cxx b/basic/workben/mgrtest.cxx
new file mode 100644
index 000000000000..c56506d7ae31
--- /dev/null
+++ b/basic/workben/mgrtest.cxx
@@ -0,0 +1,591 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basic.hxx"
+#include <vcl/svapp.hxx>
+#include <vcl/wrkwin.hxx>
+#include <vcl/toolbox.hxx>
+#include <vcl/msgbox.hxx>
+#include <vcl/sound.hxx>
+#include <basic/basmgr.hxx>
+#include <basic/sbx.hxx>
+#include <basic/sbmod.hxx>
+#include <basic/basrdll.hxx>
+
+//#include <sv.hxx>
+//#include <basic.hxx>
+//#include <sostor.hxx>
+
+// Defines for ToolBox-Id's
+#define TB_NEW 1
+#define TB_OPENSTORAGE 2
+#define TB_SAVESTORAGE 3
+#define TB_ORG 4
+#define TB_CREATELIB1 10
+#define TB_CREATELIB2 11
+#define TB_CREATELIB3 12
+#define TB_LOADLIB1 20
+#define TB_LOADLIB2 21
+#define TB_LOADLIB3 22
+#define TB_STORELIBX 30
+#define TB_UNLOADX 31
+#define TB_LOADX 32
+#define TB_EXECX 33
+#define TB_REMOVEX 34
+#define TB_REMOVEDELX 35
+
+#define TB_LIB0 40
+#define TB_LIB1 41
+#define TB_LIB2 42
+#define TB_LIB3 43
+
+const char* pLib1Str = "Lib1";
+const char* pLib2Str = "Lib2";
+const char* pLib3Str = "Lib3";
+
+// Test-Application
+class TestApp : public Application
+{
+public:
+ virtual void Main( void );
+ virtual void Main( int, char*[] );
+};
+
+// Test-Window with a ToolBox to choose a test from
+// and the typically used virtual methods
+class TestWindow : public WorkWindow
+{
+private:
+ ToolBox aToolBox;
+ BasicManager* pBasMgr;
+
+ void CheckError();
+ USHORT nLibX;
+ DECL_LINK( BasicErrorHdl, StarBASIC * );
+
+
+public:
+ TestWindow();
+ ~TestWindow();
+
+ virtual void Paint( const Rectangle& );
+ virtual void Resize();
+ virtual void KeyInput( const KeyEvent& rKeyEvt );
+ virtual void MouseMove( const MouseEvent& rMEvt );
+ virtual void MouseButtonDown( const MouseEvent& rMEvt );
+ virtual void MouseButtonUp( const MouseEvent& rMEvt );
+
+ DECL_LINK( TBSelect, ToolBox * );
+ void UpdateToolBox();
+ void ShowInfo();
+};
+
+TestWindow::~TestWindow()
+{
+}
+
+TestWindow::TestWindow() :
+ WorkWindow( NULL, WB_APP | WB_STDWORK | WB_3DLOOK | WB_CLIPCHILDREN ) ,
+ aToolBox( this, WinBits( WB_BORDER | WB_3DLOOK | WB_SCROLL | WB_LINESPACING ) )
+{
+ nLibX = 0;
+
+ aToolBox.SetButtonType( BUTTON_TEXT );
+ aToolBox.SetLineCount( 2 );
+ aToolBox.SetPosPixel( Point( 0, 0 ) );
+ aToolBox.SetSelectHdl( LINK( this, TestWindow, TBSelect ) );
+
+ Font aFont;
+ aFont.SetName( "Helv" );
+ aFont.SetSize( Size( 0, 6 ) );
+ aFont.SetPitch( PITCH_VARIABLE );
+ aFont.SetFamily( FAMILY_SWISS );
+ aFont.SetTransparent( TRUE );
+ aFont.SetAlign( ALIGN_TOP );
+ aToolBox.SetFont( aFont );
+ SetFont( aFont );
+
+ aToolBox.InsertItem( TB_NEW, "New" );
+ aToolBox.SetHelpText( TB_NEW, "New BasicManager" );
+ aToolBox.InsertItem( TB_OPENSTORAGE, "Load" );
+ aToolBox.SetHelpText( TB_OPENSTORAGE, "Load Storage D:\\MYSTORE.SVS" );
+ aToolBox.InsertItem( TB_SAVESTORAGE, "Save" );
+ aToolBox.SetHelpText( TB_SAVESTORAGE, "Save Storage D:\\MYSTORE.SVS" );
+
+ aToolBox.InsertSeparator();
+
+ aToolBox.InsertItem( TB_ORG, "Verwalten" );
+ aToolBox.SetHelpText( TB_ORG, "Libaries verwalten" );
+
+ aToolBox.InsertSeparator();
+
+ aToolBox.InsertItem( TB_LIB0, "0" );
+ aToolBox.SetHelpText( TB_LIB0, "Aktuelle Lib: STANDARD" );
+ aToolBox.InsertItem( TB_LIB1, "1" );
+ aToolBox.SetHelpText( TB_LIB1, "Aktuelle Lib: 1" );
+ aToolBox.InsertItem( TB_LIB2, "2" );
+ aToolBox.SetHelpText( TB_LIB2, "Aktuelle Lib: 2" );
+ aToolBox.InsertItem( TB_LIB3, "3" );
+ aToolBox.SetHelpText( TB_LIB3, "Aktuelle Lib: 3" );
+
+ aToolBox.InsertBreak();
+ aToolBox.InsertItem( TB_CREATELIB1, "CreateLib1" );
+ aToolBox.SetHelpText( TB_CREATELIB1, "Create Libary LIB1" );
+ aToolBox.InsertItem( TB_CREATELIB2, "CreateLib2" );
+ aToolBox.SetHelpText( TB_CREATELIB2, "Create Libary LIB2" );
+ aToolBox.InsertItem( TB_CREATELIB3, "CreateLib3" );
+ aToolBox.SetHelpText( TB_CREATELIB3, "Create Libary LIB3" );
+
+ aToolBox.InsertSeparator();
+ aToolBox.InsertItem( TB_LOADLIB1, "LoadLib1" );
+ aToolBox.SetHelpText( TB_LOADLIB1, "Load Libary LIB1" );
+ aToolBox.InsertItem( TB_LOADLIB2, "LoadLib2" );
+ aToolBox.SetHelpText( TB_LOADLIB2, "Load Libary LIB2" );
+ aToolBox.InsertItem( TB_LOADLIB3, "LoadLib3" );
+ aToolBox.SetHelpText( TB_LOADLIB3, "Load Libary LIB3" );
+
+ aToolBox.InsertSeparator();
+ aToolBox.InsertItem( TB_STORELIBX, "StoreLibX" );
+ aToolBox.SetHelpText( TB_STORELIBX, "Store Libary LIBX" );
+ aToolBox.InsertItem( TB_UNLOADX, "UnloadX" );
+ aToolBox.SetHelpText( TB_UNLOADX, "Unload Libary LIBX" );
+ aToolBox.InsertItem( TB_LOADX, "LoadX" );
+ aToolBox.SetHelpText( TB_LOADX, "Load Libary LIBX" );
+ aToolBox.InsertItem( TB_EXECX, "ExecX" );
+ aToolBox.SetHelpText( TB_EXECX, "Execute 'Libary' LIBX" );
+ aToolBox.InsertItem( TB_REMOVEX, "RemoveX" );
+ aToolBox.SetHelpText( TB_REMOVEX, "Remove Libary LIBX" );
+ aToolBox.InsertItem( TB_REMOVEDELX, "RemDelX" );
+ aToolBox.SetHelpText( TB_REMOVEDELX, "Remove and delete Libary LIBX" );
+
+ pBasMgr = 0;
+
+ Show();
+ UpdateToolBox();
+ aToolBox.Show();
+}
+void TestWindow::ShowInfo()
+{
+ Invalidate();
+ Update();
+ long nH = GetTextSize( "X" ).Height();
+ if ( pBasMgr )
+ {
+ Point aPos( 10, aToolBox.GetSizePixel().Height()+5 );
+ for ( USHORT nLib = 0; nLib < pBasMgr->GetLibCount(); nLib++ )
+ {
+ String aOutStr( nLib );
+ aOutStr +=": ";
+ StarBASIC* pL = pBasMgr->GetLib( nLib );
+ aOutStr += '[';
+ aOutStr += pBasMgr->GetLibName( nLib );
+ aOutStr += "]<";
+ if ( pL )
+ aOutStr += pL->GetName();
+ else
+ aOutStr += "NoLoaded";
+ aOutStr += ">, Storage='";
+ aOutStr += pBasMgr->GetLibStorageName( nLib );
+ aOutStr += "', bLoaded=";
+ aOutStr += (USHORT)pBasMgr->IsLibLoaded( nLib );
+ DrawText( aPos, aOutStr );
+ aPos.Y() += nH;
+ }
+ }
+}
+
+void TestWindow::UpdateToolBox()
+{
+ // View of some buttons as checked or disabled if
+ // wished by tests
+ aToolBox.EnableItem( TB_ORG, (BOOL)(ULONG)pBasMgr );
+
+ aToolBox.EnableItem( TB_CREATELIB1, (BOOL)(ULONG)pBasMgr );
+ aToolBox.EnableItem( TB_CREATELIB2, (BOOL)(ULONG)pBasMgr );
+ aToolBox.EnableItem( TB_CREATELIB3, (BOOL)(ULONG)pBasMgr );
+
+ aToolBox.EnableItem( TB_LOADLIB1, (BOOL)(ULONG)pBasMgr );
+ aToolBox.EnableItem( TB_LOADLIB2, (BOOL)(ULONG)pBasMgr );
+ aToolBox.EnableItem( TB_LOADLIB3, (BOOL)(ULONG)pBasMgr );
+
+ aToolBox.EnableItem( TB_STORELIBX, (BOOL)(ULONG)pBasMgr );
+ aToolBox.EnableItem( TB_EXECX, (BOOL)(ULONG)pBasMgr );
+ aToolBox.EnableItem( TB_UNLOADX, (BOOL)(ULONG)pBasMgr );
+ aToolBox.EnableItem( TB_LOADX, (BOOL)(ULONG)pBasMgr );
+ aToolBox.EnableItem( TB_REMOVEX, (BOOL)(ULONG)pBasMgr );
+ aToolBox.EnableItem( TB_REMOVEDELX, (BOOL)(ULONG)pBasMgr );
+
+ aToolBox.CheckItem( TB_LIB0, nLibX == 0 );
+ aToolBox.CheckItem( TB_LIB1, nLibX == 1 );
+ aToolBox.CheckItem( TB_LIB2, nLibX == 2 );
+ aToolBox.CheckItem( TB_LIB3, nLibX == 3 );
+}
+
+IMPL_LINK( TestWindow, TBSelect, ToolBox *, p )
+{
+ USHORT nId = aToolBox.GetCurItemId();
+ BOOL bChecked = aToolBox.IsItemChecked( nId );
+ switch ( nId )
+ {
+ case TB_NEW:
+ {
+ delete pBasMgr;
+ pBasMgr = new BasicManager( new StarBASIC );
+ pBasMgr->SetStorageName( "d:\\mystore.svs" );
+ }
+ break;
+ case TB_OPENSTORAGE:
+ {
+ delete pBasMgr;
+ SvStorageRef xStorage = new SvStorage( "d:\\mystore.svs", STREAM_READ | STREAM_SHARE_DENYWRITE );
+ DBG_ASSERT( xStorage.Is(), "Kein Storage!" );
+ pBasMgr = new BasicManager( *xStorage );
+ }
+ break;
+ case TB_SAVESTORAGE:
+ {
+ if ( pBasMgr)
+ {
+ SvStorageRef xStorage = new SvStorage( "d:\\mystore.svs" );
+ DBG_ASSERT( xStorage.Is(), "Kein Storage!" );
+ pBasMgr->Store( *xStorage );
+ }
+ }
+ break;
+ case TB_ORG:
+ {
+ if ( pBasMgr)
+ {
+ InfoBox( 0, "Organisieren..." ).Execute();
+ }
+ }
+ break;
+ case TB_CREATELIB1:
+ {
+ if ( pBasMgr )
+ {
+ USHORT nLib = pBasMgr->GetLibId( pBasMgr->CreateLib( pLib1Str ) );
+ if ( nLib != LIB_NOTFOUND )
+ {
+ pBasMgr->SetLibStorageName( nLib, "d:\\mystore.svs" );
+ StarBASIC* pLib = pBasMgr->GetLib( pLib1Str );
+ DBG_ASSERT( pLib, "Lib?!" );
+ String aSource( "Sub SubInLib1Mod1\nprint\"XXX\"\nEnd Sub");
+ SbModule* pM = pLib->MakeModule( "ModLib1", aSource );
+ DBG_ASSERT( pM, "Modul?" );
+ pLib->Compile( pM );
+ }
+ else
+ InfoBox( 0, "CreateLibary fehlgeschlagen..." ).Execute();
+ }
+ }
+ break;
+ case TB_CREATELIB2:
+ {
+ if ( pBasMgr )
+ {
+ USHORT nLib = pBasMgr->GetLibId( pBasMgr->CreateLib( pLib2Str ) );
+ if ( nLib != LIB_NOTFOUND )
+ {
+ pBasMgr->SetLibStorageName( nLib, "d:\\mystore.svs" );
+ StarBASIC* pLib = pBasMgr->GetLib( pLib2Str );
+ DBG_ASSERT( pLib, "Lib?!" );
+ SbModule* pM = pLib->MakeModule( "ModuleLib2", "Sub SubInLib2\n print \"Tralala\" \nEnd Sub\n" );
+ pLib->Compile( pM );
+ }
+ else
+ InfoBox( 0, "CreateLibary fehlgeschlagen..." ).Execute();
+ }
+ }
+ break;
+ case TB_CREATELIB3:
+ {
+ if ( pBasMgr )
+ {
+ // liegt in einem anderen Storage !!!
+ USHORT nLib = pBasMgr->GetLibId( pBasMgr->CreateLib( pLib3Str ) );
+ if ( nLib != LIB_NOTFOUND )
+ {
+ pBasMgr->SetLibStorageName( nLib, "d:\\mystore2.svs" );
+ StarBASIC* pLib = pBasMgr->GetLib( pLib3Str );
+ DBG_ASSERT( pLib, "Lib?!" );
+ SbModule* pM = pLib->MakeModule( "ModuleLib2", "Sub XYZInLib3\n print \"?!\" \nEnd Sub\n" );
+ pLib->Compile( pM );
+ }
+ else
+ InfoBox( 0, "CreateLibary fehlgeschlagen..." ).Execute();
+ }
+ }
+ break;
+ case TB_LOADLIB1:
+ {
+ if ( pBasMgr )
+ {
+ SvStorageRef xStorage = new SvStorage( "d:\\mystore.svs" );
+ if ( !pBasMgr->AddLib( *xStorage, pLib1Str, FALSE ) )
+ Sound::Beep();
+ }
+ }
+ break;
+ case TB_LOADLIB2:
+ {
+ if ( pBasMgr )
+ {
+ SvStorageRef xStorage = new SvStorage( "d:\\mystore.svs" );
+ if ( !pBasMgr->AddLib( *xStorage, pLib2Str, FALSE ) )
+ Sound::Beep();
+ }
+ }
+ break;
+ case TB_LOADLIB3:
+ {
+ if ( pBasMgr )
+ {
+ // liegt in einem anderen Storage !!!
+ SvStorageRef xStorage = new SvStorage( "d:\\mystore2.svs" );
+ if ( !pBasMgr->AddLib( *xStorage, pLib3Str, FALSE ) )
+ Sound::Beep();
+ }
+ }
+ break;
+ case TB_STORELIBX:
+ {
+ if ( pBasMgr )
+ pBasMgr->StoreLib( nLibX );
+ }
+ break;
+ case TB_UNLOADX:
+ {
+ if ( pBasMgr )
+ pBasMgr->UnloadLib( nLibX );
+ }
+ break;
+ case TB_LOADX:
+ {
+ if ( pBasMgr )
+ pBasMgr->LoadLib( nLibX );
+ }
+ break;
+ case TB_REMOVEX:
+ {
+ if ( pBasMgr )
+ pBasMgr->RemoveLib( nLibX, FALSE );
+ }
+ break;
+ case TB_REMOVEDELX:
+ {
+ if ( pBasMgr )
+ pBasMgr->RemoveLib( nLibX, TRUE );
+ }
+ break;
+ case TB_EXECX:
+ {
+ if ( pBasMgr )
+ {
+ StarBASIC* pBasic = pBasMgr->GetLib( nLibX );
+ if ( pBasic && pBasic->GetModules()->Count() )
+ {
+ pBasic->SetErrorHdl( LINK( this, TestWindow, BasicErrorHdl ) );
+
+ SbModule* pMod = (SbModule*)pBasic->GetModules()->Get( 0 );
+ if ( pMod && pMod->GetMethods()->Count() )
+ pMod->GetMethods()->Get(0)->GetInteger();
+ }
+ }
+ }
+ break;
+
+ case TB_LIB0: nLibX = 0;
+ break;
+ case TB_LIB1: nLibX = 1;
+ break;
+ case TB_LIB2: nLibX = 2;
+ break;
+ case TB_LIB3: nLibX = 3;
+ break;
+ }
+
+ UpdateToolBox();
+ CheckError();
+ ShowInfo();
+ return 0;
+}
+
+void TestWindow::CheckError()
+{
+ if ( pBasMgr )
+ {
+ BasicError* pError = pBasMgr->GetFirstError();
+ while ( pError )
+ {
+ String aErrorStr;
+ String aReasonStr;
+ switch ( pError->GetErrorId() )
+ {
+ case BASERR_ID_STDLIBOPEN:
+ aErrorStr = "Standard-Lib konnte nicht geoffnet werden.";
+ break;
+ case BASERR_ID_STDLIBSAVE:
+ aErrorStr = "Standard-Lib konnte nicht gespeichert werden.";
+ break;
+ case BASERR_ID_LIBLOAD:
+ aErrorStr = "Lib konnte nicht geoffnet werden.";
+ break;
+ case BASERR_ID_LIBCREATE:
+ aErrorStr = "Lib konnte nicht erzeugt werden.";
+ break;
+ case BASERR_ID_LIBSAVE:
+ aErrorStr = "Lib konnte nicht gespeichert werden.";
+ break;
+ case BASERR_ID_MGROPEN:
+ aErrorStr = "Manager konnte nicht geladen werden.";
+ break;
+ case BASERR_ID_MGRSAVE:
+ aErrorStr = "Manager konnte nicht gespeichert werden.";
+ break;
+ case BASERR_ID_UNLOADLIB:
+ aErrorStr = "Libary konnte nicht entladen werden.";
+ break;
+ case BASERR_ID_REMOVELIB:
+ aErrorStr = "Libary konnte nicht entfernt werden.";
+ break;
+ default:
+ aErrorStr = "Unbekannter Fehler!";
+ }
+
+ switch ( pError->GetReason() )
+ {
+ case BASERR_REASON_OPENSTORAGE:
+ aReasonStr = "Der Storage konnte nicht geoeffnet werden";
+ break;
+ case BASERR_REASON_OPENLIBSTORAGE:
+ aReasonStr = "Der Lib-Storage konnte nicht geoeffnet werden";
+ break;
+ case BASERR_REASON_OPENMGRSTREAM:
+ aReasonStr = "Der Manager-Stream konnte nicht geoeffnet werden";
+ break;
+ case BASERR_REASON_OPENLIBSTREAM:
+ aReasonStr = "Der Basic-Stream konnte nicht geoeffnet werden";
+ break;
+ case BASERR_REASON_STDLIB:
+ aReasonStr = "STANDARD-Lib";
+ break;
+ case BASERR_REASON_BASICLOADERROR:
+ aReasonStr = "Fehler beim Laden des Basics";
+ default:
+ aReasonStr = " - ";
+ }
+
+ String aErr( aErrorStr );
+ aErr += "\nGrund: ";
+ aErr += aReasonStr;
+ InfoBox( 0, aErr ).Execute();
+
+ pError = pBasMgr->GetNextError();
+ }
+ pBasMgr->ClearErrors();
+ }
+}
+
+void __EXPORT TestWindow::Paint( const Rectangle& rRec )
+{
+}
+
+void __EXPORT TestWindow::Resize()
+{
+ Size aTBSz = aToolBox.CalcWindowSizePixel();
+ aToolBox.SetSizePixel( Size( GetOutputSizePixel().Width(), aTBSz.Height()) );
+ Invalidate();
+ ShowInfo();
+}
+
+void __EXPORT TestWindow::KeyInput( const KeyEvent& rKEvt )
+{
+ char nCharCode = rKEvt.GetCharCode();
+ USHORT nCode = rKEvt.GetKeyCode().GetCode();
+
+ // Nur bei Alt-Return
+ if ( ( nCode == KEY_RETURN ) && rKEvt.GetKeyCode().IsMod2() )
+ ;
+ else
+ WorkWindow::KeyInput( rKEvt );
+
+ UpdateToolBox();
+}
+
+void __EXPORT TestWindow::MouseMove( const MouseEvent& rMEvt )
+{
+}
+
+void __EXPORT TestWindow::MouseButtonDown( const MouseEvent& rMEvt )
+{
+ ShowInfo();
+}
+
+void __EXPORT TestWindow::MouseButtonUp( const MouseEvent& rMEvt )
+{
+ UpdateToolBox();
+}
+
+IMPL_LINK( TestWindow, BasicErrorHdl, StarBASIC *, pBasic )
+{
+ String aErrorText( pBasic->GetErrorText() );
+
+ String aErrorTextPrefix;
+ if( pBasic->IsCompilerError() )
+ {
+ aErrorTextPrefix = "Compilererror: ";
+ }
+ else
+ {
+ aErrorTextPrefix = "Runtimeerror: ";
+ aErrorTextPrefix += pBasic->GetErrorCode();
+ aErrorTextPrefix += " ";
+ }
+
+ InfoBox( 0, String( aErrorTextPrefix + aErrorText ) ).Execute();
+ return 0;
+}
+
+void __EXPORT TestApp::Main( void )
+{
+ Main( 0, NULL );
+}
+
+void __EXPORT TestApp::Main( int, char*[] )
+{
+ BasicDLL aBasiDLL;
+ SvFactory::Init();
+ EnableSVLook();
+ TestWindow aWindow;
+ Execute();
+ SvFactory::DeInit();
+}
+
+
+TestApp aTestApp;
diff --git a/beanshell/bsh-2.0b1-src.patch b/beanshell/bsh-2.0b1-src.patch
new file mode 100644
index 000000000000..99e8b8b9ddc2
--- /dev/null
+++ b/beanshell/bsh-2.0b1-src.patch
@@ -0,0 +1,83 @@
+--- misc/BeanShell/build.xml Fri Dec 19 17:14:27 2003
++++ misc/build/BeanShell/build.xml Fri Mar 28 15:55:04 2008
+@@ -17,7 +17,7 @@
+ up the build dir! It has to be done manually the first time (or put
+ in the jar file). There must be a way to fix this...
+ -->
+-<project name="beanshell" default="compile" basedir=".">
++<project name="beanshell" default="jarall" basedir=".">
+
+ <!-- Project Configuration -->
+
+@@ -71,6 +71,9 @@
+ value="bsh/util/BeanShellBSFEngine.java,TestBshBSF.java"/>
+ -->
+
++ <property name="exclude-bsf"
++ value="bsh/util/BeanShellBSFEngine.java,TestBshBSF.java"/>
++
+ <!-- Uncomment to build without the ASM class generator code.
+ <property name="exclude-classgen"
+ value="bsh/org/objectweb/asm/**,bsh/ClassGeneratorImpl.java,bsh/ClassGeneratorUtil.java,bsh/DelayedEvalBshMethod.java"/>
+@@ -80,6 +83,9 @@
+ <property name="exclude-servlet"
+ value="bsh/servlet/*"/>
+ -->
++
++ <property name="exclude-servlet"
++ value="bsh/servlet/*"/>
+
+ <!-- Legacy excludes. Comment this *out* to build these legacy items -->
+ <property name="legacy-excludes"
+--- misc/BeanShell/makefile.mk Fri Mar 28 15:56:40 2008
++++ misc/build/BeanShell/makefile.mk Fri Mar 28 15:56:06 2008
+@@ -1 +1,35 @@
+-dummy
++#*************************************************************************
++#
++# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
++#
++# Copyright 2000, 2010 Oracle and/or its affiliates.
++#
++# OpenOffice.org - a multi-platform office productivity suite
++#
++# This file is part of OpenOffice.org.
++#
++# OpenOffice.org is free software: you can redistribute it and/or modify
++# it under the terms of the GNU Lesser General Public License version 3
++# only, as published by the Free Software Foundation.
++#
++# OpenOffice.org 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 Lesser General Public License version 3 for more details
++# (a copy is included in the LICENSE file that accompanied this code).
++#
++# You should have received a copy of the GNU Lesser General Public License
++# version 3 along with OpenOffice.org. If not, see
++# <http://www.openoffice.org/license.html>
++# for a copy of the LGPLv3 License.
++#
++#*************************************************************************
++
++PRJ=..$/..$/..$/..
++PRJNAME=ooo_beanshell
++TARGET=jarall
++
++.INCLUDE : ant.mk
++
++ALLTAR : ANTBUILD
++
+--- misc/BeanShell/src/bsh/ClassGeneratorUtil.java Fri Dec 19 17:14:28 2003
++++ misc/build/BeanShell/src/bsh/ClassGeneratorUtil.java Fri Mar 28 15:55:05 2008
+@@ -34,7 +34,9 @@
+ package bsh;
+
+ import bsh.org.objectweb.asm.*;
+-import java.lang.reflect.*;
++import java.lang.reflect.Constructor;
++import java.lang.reflect.InvocationTargetException;
++import java.lang.reflect.Method;
+ import java.util.ArrayList;
+ import java.util.List;
+
diff --git a/beanshell/makefile.mk b/beanshell/makefile.mk
new file mode 100644
index 000000000000..6e89a0034e97
--- /dev/null
+++ b/beanshell/makefile.mk
@@ -0,0 +1,58 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=.
+
+PRJNAME=ooo_beanshell
+TARGET=ooo_beanshell
+
+.IF "$(SOLAR_JAVA)"!=""
+# --- Settings -----------------------------------------------------
+
+.INCLUDE : settings.mk
+
+# --- Files --------------------------------------------------------
+
+TARFILE_NAME=bsh-2.0b1-src
+TARFILE_MD5=ea570af93c284aa9e5621cd563f54f4d
+TARFILE_ROOTDIR=BeanShell
+PATCH_FILES=bsh-2.0b1-src.patch
+
+ADDITIONAL_FILES=makefile.mk
+
+BUILD_ACTION=dmake $(MFLAGS) $(CALLMACROS)
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : set_ext.mk
+.INCLUDE : target.mk
+.INCLUDE : tg_ext.mk
+
+.ELSE
+all:
+ @echo java disabled
+.ENDIF
diff --git a/beanshell/prj/build.lst b/beanshell/prj/build.lst
new file mode 100644
index 000000000000..2a1401b3fbeb
--- /dev/null
+++ b/beanshell/prj/build.lst
@@ -0,0 +1,3 @@
+be beanshell : solenv NULL
+be beanshell usr1 - all be_mkout NULL
+be beanshell nmake - all be_beanshell NULL
diff --git a/beanshell/prj/d.lst b/beanshell/prj/d.lst
new file mode 100644
index 000000000000..661462345eec
--- /dev/null
+++ b/beanshell/prj/d.lst
@@ -0,0 +1 @@
+..\%__SRC%\misc\build\BeanShell\dist\bsh-2.0b1.jar %_DEST%\bin%_EXT%\bsh.jar
diff --git a/berkeleydb/db-4.7.25-mingw.patch b/berkeleydb/db-4.7.25-mingw.patch
new file mode 100644
index 000000000000..38d83d156230
--- /dev/null
+++ b/berkeleydb/db-4.7.25-mingw.patch
@@ -0,0 +1,348 @@
+--- misc/db-4.7.25.NC/dist/Makefile.in 2008-05-06 12:03:36.000000000 +0900
++++ misc/build/db-4.7.25.NC/dist/Makefile.in 2009-07-11 13:38:07.419875000 +0900
+@@ -44,7 +44,7 @@
+ SOLINK= @MAKEFILE_SOLINK@ @CFLAGS@
+ SOFLAGS= @SOFLAGS@
+ LIBMAJOR= @DB_VERSION_MAJOR@
+-LIBVERSION= @DB_VERSION_MAJOR@.@DB_VERSION_MINOR@
++LIBVERSION= @DB_VERSION_MAJOR@@DB_VERSION_MINOR@
+
+ CPPFLAGS= -I$(builddir) -I$(srcdir) @CPPFLAGS@
+
+@@ -62,18 +62,18 @@
+
+ libdb_base= libdb
+ libdb= $(libdb_base).a
+-libdb_version= $(libdb_base)-$(LIBVERSION).a
+-libso= $(libdb_base)-$(LIBVERSION)@SOSUFFIX@
+-libso_target= $(libdb_base)-$(LIBVERSION).la
++libdb_version= $(libdb_base)$(LIBVERSION).a
++libso= $(libdb_base)$(LIBVERSION)@SOSUFFIX@
++libso_target= $(libdb_base)$(LIBVERSION).la
+ libso_default= $(libdb_base)@SOSUFFIX@
+-libso_major= $(libdb_base)-$(LIBMAJOR)@SOSUFFIX@
++libso_major= $(libdb_base)$(LIBMAJOR)@SOSUFFIX@
+
+ ##################################################
+ # C++ API.
+ #
+ # C++ support is optional, and can be built with static or shared libraries.
+ ##################################################
+-CXXFLAGS= -c $(CPPFLAGS) @CXXFLAGS@
++CXXFLAGS= -c $(SOLARINC) $(CPPFLAGS) -DGXX_INCLUDE_PATH=$(GXX_INCLUDE_PATH) @CXXFLAGS@
+ CXX= @MAKEFILE_CXX@
+ CXXLINK= @MAKEFILE_CXXLINK@ @CXXFLAGS@
+ XSOLINK= @MAKEFILE_XSOLINK@ @CXXFLAGS@
+@@ -81,11 +81,11 @@
+
+ libcxx_base= libdb_cxx
+ libcxx= $(libcxx_base).a
+-libcxx_version= $(libcxx_base)-$(LIBVERSION).a
+-libxso= $(libcxx_base)-$(LIBVERSION)@SOSUFFIX@
+-libxso_target= $(libcxx_base)-$(LIBVERSION).la
++libcxx_version= $(libcxx_base)$(LIBVERSION).a
++libxso= $(libcxx_base)$(LIBVERSION)@SOSUFFIX@
++libxso_target= $(libcxx_base)$(LIBVERSION).la
+ libxso_default= $(libcxx_base)@SOSUFFIX@
+-libxso_major= $(libcxx_base)-$(LIBMAJOR)@SOSUFFIX@
++libxso_major= $(libcxx_base)$(LIBMAJOR)@SOSUFFIX@
+
+ ##################################################
+ # Java API.
+@@ -108,12 +108,12 @@
+ libj_jarfile= db.jar
+ libj_exjarfile= dbexamples.jar
+ libjso_base= libdb_java
+-libjso= $(libjso_base)-$(LIBVERSION)@JMODSUFFIX@
+-libjso_static= $(libjso_base)-$(LIBVERSION).a
+-libjso_target= $(libjso_base)-$(LIBVERSION).la
++libjso= $(libjso_base)$(LIBVERSION)@JMODSUFFIX@
++libjso_static= $(libjso_base)$(LIBVERSION).a
++libjso_target= $(libjso_base)$(LIBVERSION).la
+ libjso_default= $(libjso_base)@JMODSUFFIX@
+-libjso_major= $(libjso_base)-$(LIBMAJOR)@JMODSUFFIX@
+-libjso_g= $(libjso_base)-$(LIBVERSION)_g@JMODSUFFIX@
++libjso_major= $(libjso_base)$(LIBMAJOR)@JMODSUFFIX@
++libjso_g= $(libjso_base)$(LIBVERSION)_g@JMODSUFFIX@
+
+ ##################################################
+ # TCL API.
+@@ -123,11 +123,11 @@
+ TCL_INCLUDE_SPEC= @TCL_INCLUDE_SPEC@
+ LIBTSO_LIBS= @LIBTSO_LIBS@ @LIBSO_LIBS@
+ libtso_base= libdb_tcl
+-libtso= $(libtso_base)-$(LIBVERSION)@MODSUFFIX@
+-libtso_static= $(libtso_base)-$(LIBVERSION).a
+-libtso_target= $(libtso_base)-$(LIBVERSION).la
++libtso= $(libtso_base)$(LIBVERSION)@MODSUFFIX@
++libtso_static= $(libtso_base)$(LIBVERSION).a
++libtso_target= $(libtso_base)$(LIBVERSION).la
+ libtso_default= $(libtso_base)@MODSUFFIX@
+-libtso_major= $(libtso_base)-$(LIBMAJOR)@MODSUFFIX@
++libtso_major= $(libtso_base)$(LIBMAJOR)@MODSUFFIX@
+
+ ##################################################
+ # db_dump185 UTILITY
+@@ -756,7 +756,7 @@
+
+ # Shared Java library.
+ $(libjso_target): $(JAVA_OBJS) $(C_OBJS)
+- $(SOLINK) -shrext @JMODSUFFIX@ $(SOFLAGS) $(LDFLAGS) \
++ $(SOLINK) -shrext @JMODSUFFIX@ -add-underscore $(SOFLAGS) $(LDFLAGS) \
+ -o $@ $(JAVA_OBJS) $(C_OBJS) $(LIBJSO_LIBS)
+
+ # Shared Tcl library.
+--- misc/db-4.7.25.NC/dist/configure 2008-05-16 06:12:41.000000000 +0900
++++ misc/build/db-4.7.25.NC/dist/configure 2009-07-11 16:00:39.255625000 +0900
+@@ -9488,7 +9488,7 @@
+ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols'
+
+ if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
++ archive_cmds='$DLLTOOL $add_underscore --export-all-symbols --dllname $soname --output-lib $lib --output-exp $output_objdir/$soname.exp $libobjs; $CC -shared $output_objdir/$soname.exp $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base ${wl}--image-base=0x10000000'
+ # If the export-symbols file already is a .def file (1st line
+ # is EXPORTS), use it as is; otherwise, prepend...
+ archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+@@ -9497,7 +9497,7 @@
+ echo EXPORTS > $output_objdir/$soname.def;
+ cat $export_symbols >> $output_objdir/$soname.def;
+ fi~
+- $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
++ $DLLTOOL $add_underscore --dllname $soname --output-lib $lib --output-exp $output_objdir/$soname.exp --input-def $output_objdir/$soname.def; $CC -shared $output_objdir/$soname.exp $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base ${wl}--image-base=0x10000000'
+ else
+ ld_shlibs=no
+ fi
+@@ -13680,15 +13680,15 @@
+
+ if test "$pre_test_object_deps_done" = no; then
+ if test -z "$predep_objects_CXX"; then
+- predep_objects_CXX="$p"
++ predep_objects_CXX=`cygpath -m "$p"`
+ else
+- predep_objects_CXX="$predep_objects_CXX $p"
++ predep_objects_CXX="$predep_objects_CXX "`cygpath -m "$p"`
+ fi
+ else
+ if test -z "$postdep_objects_CXX"; then
+- postdep_objects_CXX="$p"
++ postdep_objects_CXX=`cygpath -m "$p"`
+ else
+- postdep_objects_CXX="$postdep_objects_CXX $p"
++ postdep_objects_CXX="$postdep_objects_CXX "`cygpath -m "$p"`
+ fi
+ fi
+ ;;
+@@ -22371,6 +22371,154 @@
+
+
+
++case "$host_os" in
++mingw*)
++for ac_header in execinfo.h sys/time.h
++do
++as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
++ { echo "$as_me:$LINENO: checking for $ac_header" >&5
++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
++ echo $ECHO_N "(cached) $ECHO_C" >&6
++fi
++ac_res=`eval echo '${'$as_ac_Header'}'`
++ { echo "$as_me:$LINENO: result: $ac_res" >&5
++echo "${ECHO_T}$ac_res" >&6; }
++else
++ # Is the header compilable?
++{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
++echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
++cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h. */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h. */
++$ac_includes_default
++#include <$ac_header>
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_compile") 2>conftest.er1
++ ac_status=$?
++ grep -v '^ *+' conftest.er1 >conftest.err
++ rm -f conftest.er1
++ cat conftest.err >&5
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); } && {
++ test -z "$ac_c_werror_flag" ||
++ test ! -s conftest.err
++ } && test -s conftest.$ac_objext; then
++ ac_header_compiler=yes
++else
++ echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++ ac_header_compiler=no
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
++echo "${ECHO_T}$ac_header_compiler" >&6; }
++
++# Is the header present?
++{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
++echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
++cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h. */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h. */
++#include <$ac_header>
++_ACEOF
++if { (ac_try="$ac_cpp conftest.$ac_ext"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
++ ac_status=$?
++ grep -v '^ *+' conftest.er1 >conftest.err
++ rm -f conftest.er1
++ cat conftest.err >&5
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); } >/dev/null && {
++ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
++ test ! -s conftest.err
++ }; then
++ ac_header_preproc=yes
++else
++ echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++ ac_header_preproc=no
++fi
++
++rm -f conftest.err conftest.$ac_ext
++{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
++echo "${ECHO_T}$ac_header_preproc" >&6; }
++
++# So? What about this header?
++case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
++ yes:no: )
++ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
++echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
++ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
++echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
++ ac_header_preproc=yes
++ ;;
++ no:yes:* )
++ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
++echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
++ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
++echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
++ { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
++echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
++ { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
++echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
++ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
++echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
++ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
++echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
++ ( cat <<\_ASBOX
++## ---------------------------------------------------------- ##
++## Report this to Oracle Technology Network Berkeley DB forum ##
++## ---------------------------------------------------------- ##
++_ASBOX
++ ) | sed "s/^/$as_me: WARNING: /" >&2
++ ;;
++esac
++{ echo "$as_me:$LINENO: checking for $ac_header" >&5
++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
++ echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++ eval "$as_ac_Header=\$ac_header_preproc"
++fi
++ac_res=`eval echo '${'$as_ac_Header'}'`
++ { echo "$as_me:$LINENO: result: $ac_res" >&5
++echo "${ECHO_T}$ac_res" >&6; }
++
++fi
++if test `eval echo '${'$as_ac_Header'}'` = yes; then
++ cat >>confdefs.h <<_ACEOF
++#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
++_ACEOF
++
++fi
++
++done
++
++;;
++*)
+ for ac_header in execinfo.h sys/select.h sys/socket.h sys/time.h
+ do
+ as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+@@ -22515,6 +22663,8 @@
+
+ done
+
++;;
++esac
+ { echo "$as_me:$LINENO: checking for struct stat.st_blksize" >&5
+ echo $ECHO_N "checking for struct stat.st_blksize... $ECHO_C" >&6; }
+ if test "${ac_cv_member_struct_stat_st_blksize+set}" = set; then
+@@ -27697,6 +27847,18 @@
+
+
+
++ac_cv_sizeof_char_p=`echo $ac_cv_sizeof_char_p | tr -d '\015'`
++ac_cv_sizeof_unsigned_int=`echo $ac_cv_sizeof_unsigned_int | tr -d '\015'`
++ac_cv_sizeof_unsigned_char=`echo $ac_cv_sizeof_unsigned_char | tr -d '\015'`
++ac_cv_sizeof_unsigned_short=`echo $ac_cv_sizeof_unsigned_short | tr -d '\015'`
++ac_cv_sizeof_unsigned_long=`echo $ac_cv_sizeof_unsigned_long | tr -d '\015'`
++ac_cv_sizeof_unsigned_long_long=`echo $ac_cv_sizeof_unsigned_long_long | tr -d '\015'`
++ac_cv_sizeof_int=`echo $ac_cv_sizeof_int | tr -d '\015'`
++ac_cv_sizeof_char=`echo $ac_cv_sizeof_char | tr -d '\015'`
++ac_cv_sizeof_short=`echo $ac_cv_sizeof_short | tr -d '\015'`
++ac_cv_sizeof_long=`echo $ac_cv_sizeof_long | tr -d '\015'`
++ac_cv_sizeof_long_long=`echo $ac_cv_sizeof_long_long | tr -d '\015'`
++
+ # We look for u_char, u_short, u_int, u_long -- if we can't find them,
+ # we create our own.
+
+--- misc/db-4.7.25.NC/dist/ltmain.sh 2006-06-27 10:03:33.000000000 +0900
++++ misc/build/db-4.7.25.NC/dist/ltmain.sh 2009-07-11 13:38:07.388625000 +0900
+@@ -1103,6 +1103,7 @@
+ lib_search_path=`pwd`
+ inst_prefix_dir=
+
++ add_underscore=
+ avoid_version=no
+ dlfiles=
+ dlprefiles=
+@@ -1435,6 +1436,11 @@
+ prevarg="$arg"
+
+ case $arg in
++ -add-underscore)
++ add_underscore="--add-underscore"
++ continue
++ ;;
++
+ -all-static)
+ if test -n "$link_static_flag"; then
+ compile_command="$compile_command $link_static_flag"
+@@ -4869,7 +4875,7 @@
+ esac
+ # test for cygwin because mv fails w/o .exe extensions
+ case $host in
+- *cygwin*)
++ *cygwin* | *mingw*)
+ exeext=.exe
+ outputname=`$echo $outputname|${SED} 's,.exe$,,'` ;;
+ *) exeext= ;;
diff --git a/berkeleydb/db-4.7.25.patch b/berkeleydb/db-4.7.25.patch
new file mode 100644
index 000000000000..8cf412d23e25
--- /dev/null
+++ b/berkeleydb/db-4.7.25.patch
@@ -0,0 +1,1048 @@
+--- misc/db-4.7.25.NC/btree/makefile.mk 2009-07-21 11:42:40.000000000 +0200
++++ misc/build/db-4.7.25.NC/btree/makefile.mk 2009-07-21 11:39:25.000000000 +0200
+@@ -1 +1,35 @@
+-dummy
++PRJ=..$/..$/..$/..$/..
++
++PRJNAME=berkeleydb
++TARGET=btree
++
++EXTERNAL_WARNINGS_NOT_ERRORS := TRUE
++
++.INCLUDE : settings.mk
++
++INCPRE+=..$/build_windows ..$/
++CDEFS+=-D_WINDLL -DUNICODE -D_UNICODE -DDB_CREATE_DLL -D_WINDOWS
++
++SLOFILES= \
++ $(SLO)$/bt_compact.obj \
++ $(SLO)$/bt_compare.obj \
++ $(SLO)$/bt_conv.obj \
++ $(SLO)$/bt_curadj.obj \
++ $(SLO)$/bt_cursor.obj \
++ $(SLO)$/bt_delete.obj \
++ $(SLO)$/bt_method.obj \
++ $(SLO)$/bt_open.obj \
++ $(SLO)$/bt_put.obj \
++ $(SLO)$/bt_rec.obj \
++ $(SLO)$/bt_reclaim.obj \
++ $(SLO)$/bt_recno.obj \
++ $(SLO)$/bt_rsearch.obj \
++ $(SLO)$/bt_search.obj \
++ $(SLO)$/bt_split.obj \
++ $(SLO)$/bt_stat.obj \
++ $(SLO)$/bt_upgrade.obj \
++ $(SLO)$/bt_verify.obj \
++ $(SLO)$/btree_auto.obj
++
++.INCLUDE : target.mk
++
+--- misc/db-4.7.25.NC/clib/makefile.mk 2009-07-21 11:42:40.000000000 +0200
++++ misc/build/db-4.7.25.NC/clib/makefile.mk 2009-07-21 11:39:25.000000000 +0200
+@@ -1 +1,16 @@
+-dummy
++PRJ=..$/..$/..$/..$/..
++
++PRJNAME=berkeleydb
++TARGET=clib
++
++EXTERNAL_WARNINGS_NOT_ERRORS := TRUE
++
++.INCLUDE : settings.mk
++
++INCPRE+=..$/build_windows ..$/dbinc ..$/
++CDEFS+=-D_WINDLL -DUNICODE -D_UNICODE -DDB_CREATE_DLL -D_WINDOWS
++
++SLOFILES= $(SLO)$/strsep.obj
++
++.INCLUDE : target.mk
++
+--- misc/db-4.7.25.NC/common/makefile.mk 2009-07-21 11:42:40.000000000 +0200
++++ misc/build/db-4.7.25.NC/common/makefile.mk 2009-07-21 11:39:25.000000000 +0200
+@@ -1 +1,31 @@
+-dummy
++PRJ=..$/..$/..$/..$/..
++
++PRJNAME=berkeleydb
++TARGET=common
++
++EXTERNAL_WARNINGS_NOT_ERRORS := TRUE
++
++.INCLUDE : settings.mk
++
++INCPRE+=..$/build_windows ..$/
++CDEFS+=-D_WINDLL -DUNICODE -D_UNICODE -DDB_CREATE_DLL -D_WINDOWS
++
++SLOFILES= \
++ $(SLO)$/crypto_stub.obj \
++ $(SLO)$/db_byteorder.obj \
++ $(SLO)$/db_err.obj \
++ $(SLO)$/db_getlong.obj \
++ $(SLO)$/db_idspace.obj \
++ $(SLO)$/db_log2.obj \
++ $(SLO)$/db_shash.obj \
++ $(SLO)$/dbt.obj \
++ $(SLO)$/mkpath.obj \
++ $(SLO)$/openflags.obj \
++ $(SLO)$/os_method.obj \
++ $(SLO)$/util_cache.obj \
++ $(SLO)$/util_log.obj \
++ $(SLO)$/util_sig.obj \
++ $(SLO)$/zerofill.obj
++
++.INCLUDE : target.mk
++
+--- misc/db-4.7.25.NC/cxx/makefile.mk 2009-07-21 11:42:40.000000000 +0200
++++ misc/build/db-4.7.25.NC/cxx/makefile.mk 2009-07-21 11:39:25.000000000 +0200
+@@ -1 +1,27 @@
+-dummy
++PRJ=..$/..$/..$/..$/..
++
++PRJNAME=berkeleydb
++TARGET=cxx
++
++EXTERNAL_WARNINGS_NOT_ERRORS := TRUE
++
++.INCLUDE : settings.mk
++
++INCPRE+=..$/build_windows ..$/
++CDEFS+=-D_WINDLL -DUNICODE -D_UNICODE -DDB_CREATE_DLL -D_WINDOWS
++
++SLOFILES= \
++ $(SLO)$/cxx_db.obj \
++ $(SLO)$/cxx_dbc.obj \
++ $(SLO)$/cxx_dbt.obj \
++ $(SLO)$/cxx_env.obj \
++ $(SLO)$/cxx_except.obj \
++ $(SLO)$/cxx_lock.obj \
++ $(SLO)$/cxx_logc.obj \
++ $(SLO)$/cxx_mpool.obj \
++ $(SLO)$/cxx_multi.obj \
++ $(SLO)$/cxx_seq.obj \
++ $(SLO)$/cxx_txn.obj
++
++.INCLUDE : target.mk
++
+--- misc/db-4.7.25.NC/db/makefile.mk 2009-07-21 11:42:40.000000000 +0200
++++ misc/build/db-4.7.25.NC/db/makefile.mk 2009-07-21 11:39:25.000000000 +0200
+@@ -1 +1,47 @@
+-dummy
++PRJ=..$/..$/..$/..$/..
++
++PRJNAME=berkeleydb
++TARGET=db_src
++
++EXTERNAL_WARNINGS_NOT_ERRORS := TRUE
++
++.INCLUDE : settings.mk
++
++INCPRE+=..$/build_windows ..$/
++CDEFS+=-D_WINDLL -DUNICODE -D_UNICODE -DDB_CREATE_DLL -D_WINDOWS
++
++SLOFILES= \
++ $(SLO)$/crdel_auto.obj \
++ $(SLO)$/crdel_rec.obj \
++ $(SLO)$/db.obj \
++ $(SLO)$/db_am.obj \
++ $(SLO)$/db_auto.obj \
++ $(SLO)$/db_cam.obj \
++ $(SLO)$/db_cds.obj \
++ $(SLO)$/db_conv.obj \
++ $(SLO)$/db_dispatch.obj \
++ $(SLO)$/db_dup.obj \
++ $(SLO)$/db_iface.obj \
++ $(SLO)$/db_join.obj \
++ $(SLO)$/db_meta.obj \
++ $(SLO)$/db_method.obj \
++ $(SLO)$/db_open.obj \
++ $(SLO)$/db_overflow.obj \
++ $(SLO)$/db_ovfl_vrfy.obj \
++ $(SLO)$/db_pr.obj \
++ $(SLO)$/db_rec.obj \
++ $(SLO)$/db_reclaim.obj \
++ $(SLO)$/db_remove.obj \
++ $(SLO)$/db_rename.obj \
++ $(SLO)$/db_ret.obj \
++ $(SLO)$/db_setid.obj \
++ $(SLO)$/db_setlsn.obj \
++ $(SLO)$/db_stati.obj \
++ $(SLO)$/db_truncate.obj \
++ $(SLO)$/db_upg.obj \
++ $(SLO)$/db_upg_opd.obj \
++ $(SLO)$/db_vrfy.obj \
++ $(SLO)$/db_vrfyutil.obj
++
++.INCLUDE: target.mk
++
+--- misc/db-4.7.25.NC/db_4_7_gcc4.map 2009-07-21 11:42:40.000000000 +0200
++++ misc/build/db-4.7.25.NC/db_4_7_gcc4.map 2009-07-21 11:39:25.000000000 +0200
+@@ -1 +1,147 @@
+-dummy
++DB_4_7 {
++ global:
++__bam_adj_read;
++__bam_cadjust_read;
++__bam_cdel_read;
++__bam_curadj_read;
++__bam_merge_44_read;
++__bam_merge_read;
++__bam_pgno_read;
++__bam_relink_read;
++__bam_relink_43_read;
++__bam_repl_read;
++__bam_root_read;
++__bam_rcuradj_read;
++__bam_rsplit_read;
++__bam_split_read;
++__config_split;
++__crdel_inmem_create_read;
++__crdel_inmem_rename_read;
++__crdel_inmem_remove_read;
++__crdel_metasub_read;
++__db_add_recovery_int;
++__db_addrem_read;
++__db_big_read;
++__db_cksum_read;
++__db_dbm_close;
++__db_dbm_delete;
++__db_dbm_fetch;
++__db_dbm_firstkey;
++__db_dbm_init;
++__db_dbm_nextkey;
++__db_dbm_store;
++__db_debug_read;
++__db_dispatch;
++__db_dumptree;
++__db_hcreate;
++__db_hdestroy;
++__db_hsearch;
++__db_idspace;
++__db_mkpath;
++__db_ndbm_clearerr;
++__db_ndbm_close;
++__db_ndbm_delete;
++__db_ndbm_dirfno;
++__db_ndbm_error;
++__db_ndbm_fetch;
++__db_ndbm_firstkey;
++__db_ndbm_nextkey;
++__db_ndbm_open;
++__db_ndbm_pagfno;
++__db_ndbm_rdonly;
++__db_ndbm_store;
++__db_noop_read;
++__db_pg_alloc_42_read;
++__db_pg_alloc_read;
++__db_pg_free_42_read;
++__db_pg_free_read;
++__db_pg_freedata_42_read;
++__db_pg_freedata_read;
++__db_pg_init_read;
++__db_pg_sort_read;
++__db_pr_callback;
++__db_relink_42_read;
++__db_rpath;
++__db_getlong;
++__db_getulong;
++__db_ovref_read;
++__dbreg_register_read;
++__fop_create_read;
++__fop_file_remove_read;
++__fop_remove_read;
++__fop_rename_read;
++__fop_write_read;
++__ham_chgpg_read;
++__ham_copypage_read;
++__ham_curadj_read;
++__ham_groupalloc_42_read;
++__ham_groupalloc_read;
++__ham_insdel_read;
++__ham_metagroup_42_read;
++__ham_metagroup_read;
++__ham_newpage_read;
++__ham_replace_read;
++__ham_splitdata_read;
++__lock_list_print;
++__os_abspath;
++__os_calloc;
++__os_closehandle;
++__os_ctime;
++__os_dirfree;
++__os_dirlist;
++__os_free;
++__os_fsync;
++__os_getenv;
++__os_mkdir;
++__os_open;
++__os_read;
++__os_rename;
++__os_strdup;
++__os_unlink;
++__os_write;
++__os_yield;
++__os_id;
++__qam_add_read;
++__qam_del_read;
++__qam_delext_read;
++__qam_incfirst_read;
++__qam_mvptr_read;
++__txn_ckp_read;
++__txn_ckp_42_read;
++__txn_child_read;
++__txn_recycle_read;
++__txn_regop_42_read;
++__txn_regop_read;
++__txn_xa_regop_read;
++db_create;
++db_env_create;
++db_env_set_func_close;
++db_env_set_func_dirfree;
++db_env_set_func_dirlist;
++db_env_set_func_exists;
++db_env_set_func_file_map;
++db_env_set_func_free;
++db_env_set_func_fsync;
++db_env_set_func_ftruncate;
++db_env_set_func_ioinfo;
++db_env_set_func_malloc;
++db_env_set_func_open;
++db_env_set_func_pread;
++db_env_set_func_pwrite;
++db_env_set_func_read;
++db_env_set_func_realloc;
++db_env_set_func_region_map;
++db_env_set_func_rename;
++db_env_set_func_seek;
++db_env_set_func_unlink;
++db_env_set_func_write;
++db_env_set_func_yield;
++db_sequence_create;
++db_strerror;
++db_version;
++db_xa_switch;
++log_compare;
++
++ local:
++ *;
++};
+--- misc/db-4.7.25.NC/dbm/makefile.mk 2009-07-21 11:42:40.000000000 +0200
++++ misc/build/db-4.7.25.NC/dbm/makefile.mk 2009-07-21 11:39:25.000000000 +0200
+@@ -1 +1,16 @@
+-dummy
++PRJ=..$/..$/..$/..$/..
++
++PRJNAME=berkeleydb
++TARGET=dbm
++
++EXTERNAL_WARNINGS_NOT_ERRORS := TRUE
++
++.INCLUDE : settings.mk
++
++INCPRE+=..$/build_windows ..$/
++CDEFS+=-D_WINDLL -DUNICODE -D_UNICODE -DDB_CREATE_DLL -D_WINDOWS
++
++SLOFILES= $(SLO)$/dbm.obj
++
++.INCLUDE : target.mk
++
+--- misc/db-4.7.25.NC/dbreg/makefile.mk 2009-07-21 11:42:40.000000000 +0200
++++ misc/build/db-4.7.25.NC/dbreg/makefile.mk 2009-07-21 11:39:25.000000000 +0200
+@@ -1 +1,21 @@
+-dummy
++PRJ=..$/..$/..$/..$/..
++
++PRJNAME=berkeleydb
++TARGET=dbreg
++
++EXTERNAL_WARNINGS_NOT_ERRORS := TRUE
++
++.INCLUDE : settings.mk
++
++INCPRE+=..$/build_windows ..$/
++CDEFS+=-D_WINDLL -DUNICODE -D_UNICODE -DDB_CREATE_DLL -D_WINDOWS
++
++SLOFILES= \
++ $(SLO)$/dbreg.obj \
++ $(SLO)$/dbreg_auto.obj \
++ $(SLO)$/dbreg_rec.obj \
++ $(SLO)$/dbreg_stat.obj \
++ $(SLO)$/dbreg_util.obj
++
++.INCLUDE : target.mk
++
+--- misc/db-4.7.25.NC/dist/Makefile.in 2008-05-06 05:03:36.000000000 +0200
++++ misc/build/db-4.7.25.NC/dist/Makefile.in 2009-07-21 11:39:25.000000000 +0200
+@@ -13,7 +13,7 @@
+ libdir= @libdir@
+ docdir= $(prefix)/docs
+
+-dmode= 755
++dmode= 775
+ emode= 555
+ fmode= 444
+
+@@ -56,6 +56,7 @@
+ CCLINK= @MAKEFILE_CCLINK@ @CFLAGS@
+
+ LDFLAGS= @LDFLAGS@
++LDFLAGSVERSION= @LDFLAGSVERSION@
+ LIBS= @LIBSO_LIBS@
+ TEST_LIBS= @TEST_LIBS@
+ LIBCSO_LIBS= @LIBCSO_LIBS@ @LIBSO_LIBS@
+@@ -733,7 +734,7 @@
+
+ # Shared C library.
+ $(libso_target): $(C_OBJS)
+- $(SOLINK) $(SOFLAGS) $(LDFLAGS) -o $@ $(C_OBJS) $(LIBCSO_LIBS)
++ $(SOLINK) $(SOFLAGS) $(LDFLAGS) $(LDFLAGSVERSION) -o $@ $(C_OBJS) $(LIBCSO_LIBS)
+ $(RM) -f $(libdb)
+ $(LN) -s .libs/$(libdb_version) $(libdb)
+
+--- misc/db-4.7.25.NC/dist/configure 2008-05-15 23:12:41.000000000 +0200
++++ misc/build/db-4.7.25.NC/dist/configure 2009-07-21 11:39:25.000000000 +0200
+@@ -3757,8 +3757,10 @@
+ # Set CFLAGS/CXXFLAGS. We MUST set the flags before we call autoconf
+ # compiler configuration macros, because if we don't, they set CFLAGS
+ # to no optimization and -g, which isn't what we want.
+-CFLAGS=${CFLAGS-$optimize_debug}
+-CXXFLAGS=${CXXFLAGS-"$CFLAGS"}
++#CFLAGS=${CFLAGS-$optimize_debug}
++#CXXFLAGS=${CXXFLAGS-"$CFLAGS"}
++CFLAGS="$CFLAGS $optimize_def"
++CXXFLAGS="$CXXFLAGS $CFLAGS"
+
+ # The default compiler is cc (NOT gcc), the default CFLAGS is as specified
+ # above, NOT what is set by AC_PROG_CC, as it won't set optimization flags
+@@ -12566,7 +12568,8 @@
+ # Check to see if the program is GNU ld. I'd rather use --version,
+ # but apparently some variants of GNU ld only accept -v.
+ # Break only if it was the GNU/non-GNU ld that we prefer.
+- case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
++# case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
++ case `$lt_cv_path_LD -v 2>&1 </dev/null` in
+ *GNU* | *'with BFD'*)
+ test "$with_gnu_ld" != no && break
+ ;;
+@@ -36624,6 +36627,7 @@
+ JAR!$JAR$ac_delim
+ JAVACFLAGS!$JAVACFLAGS$ac_delim
+ LDFLAGS!$LDFLAGS$ac_delim
++LDFLAGSVERSION!$LDFLAGSVERSION$ac_delim
+ LIBCSO_LIBS!$LIBCSO_LIBS$ac_delim
+ LIBJSO_LIBS!$LIBJSO_LIBS$ac_delim
+ LIBSO_LIBS!$LIBSO_LIBS$ac_delim
+@@ -36655,7 +36659,7 @@
+ DB_VERSION_PATCH!$DB_VERSION_PATCH$ac_delim
+ _ACEOF
+
+- if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then
++ if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 98; then
+ break
+ elif $ac_last_try; then
+ { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
+--- misc/db-4.7.25.NC/dist/ltmain.sh 2006-06-27 03:03:33.000000000 +0200
++++ misc/build/db-4.7.25.NC/dist/ltmain.sh 2009-07-21 11:39:25.000000000 +0200
+@@ -1700,7 +1700,9 @@
+ # We need an absolute path.
+ case $dir in
+ [\\/]* | [A-Za-z]:[\\/]*) ;;
+- *)
++ # or $ORIGIN altenatively
++ *\$ORIGIN*) ;;
++ *)
+ $echo "$modename: only absolute run-paths are allowed" 1>&2
+ exit $EXIT_FAILURE
+ ;;
+--- misc/db-4.7.25.NC/env/makefile.mk 2009-07-21 11:42:40.000000000 +0200
++++ misc/build/db-4.7.25.NC/env/makefile.mk 2009-07-21 11:39:25.000000000 +0200
+@@ -1 +1,29 @@
+-dummy
++PRJ=..$/..$/..$/..$/..
++
++PRJNAME=berkeleydb
++TARGET=env
++
++EXTERNAL_WARNINGS_NOT_ERRORS := TRUE
++
++.INCLUDE : settings.mk
++
++INCPRE+=..$/build_windows ..$/
++CDEFS+=-D_WINDLL -DUNICODE -D_UNICODE -DDB_CREATE_DLL -D_WINDOWS
++
++SLOFILES= \
++ $(SLO)$/env_alloc.obj \
++ $(SLO)$/env_config.obj \
++ $(SLO)$/env_failchk.obj \
++ $(SLO)$/env_file.obj \
++ $(SLO)$/env_globals.obj \
++ $(SLO)$/env_method.obj \
++ $(SLO)$/env_name.obj \
++ $(SLO)$/env_open.obj \
++ $(SLO)$/env_recover.obj \
++ $(SLO)$/env_region.obj \
++ $(SLO)$/env_register.obj \
++ $(SLO)$/env_sig.obj \
++ $(SLO)$/env_stat.obj
++
++.INCLUDE : target.mk
++
+--- misc/db-4.7.25.NC/fileops/makefile.mk 2009-07-21 11:42:40.000000000 +0200
++++ misc/build/db-4.7.25.NC/fileops/makefile.mk 2009-07-21 11:39:26.000000000 +0200
+@@ -1 +1,20 @@
+-dummy
++PRJ=..$/..$/..$/..$/..
++
++PRJNAME=berkeleydb
++TARGET=fileops
++
++EXTERNAL_WARNINGS_NOT_ERRORS := TRUE
++
++.INCLUDE : settings.mk
++
++INCPRE+=..$/build_windows ..$/
++CDEFS+=-D_WINDLL -DUNICODE -D_UNICODE -DDB_CREATE_DLL -D_WINDOWS
++
++SLOFILES= \
++ $(SLO)$/fileops_auto.obj \
++ $(SLO)$/fop_basic.obj \
++ $(SLO)$/fop_rec.obj \
++ $(SLO)$/fop_util.obj
++
++.INCLUDE : target.mk
++
+--- misc/db-4.7.25.NC/hash/makefile.mk 2009-07-21 11:42:40.000000000 +0200
++++ misc/build/db-4.7.25.NC/hash/makefile.mk 2009-07-21 11:39:26.000000000 +0200
+@@ -1 +1,30 @@
+-dummy
++PRJ=..$/..$/..$/..$/..
++
++PRJNAME=berkeleydb
++TARGET=hash
++
++EXTERNAL_WARNINGS_NOT_ERRORS := TRUE
++
++.INCLUDE : settings.mk
++
++INCPRE+=..$/build_windows ..$/
++CDEFS+=-D_WINDLL -DUNICODE -D_UNICODE -DDB_CREATE_DLL -D_WINDOWS
++
++SLOFILES= \
++ $(SLO)$/hash.obj \
++ $(SLO)$/hash_auto.obj \
++ $(SLO)$/hash_conv.obj \
++ $(SLO)$/hash_dup.obj \
++ $(SLO)$/hash_func.obj \
++ $(SLO)$/hash_meta.obj \
++ $(SLO)$/hash_method.obj \
++ $(SLO)$/hash_open.obj \
++ $(SLO)$/hash_page.obj \
++ $(SLO)$/hash_rec.obj \
++ $(SLO)$/hash_reclaim.obj \
++ $(SLO)$/hash_stat.obj \
++ $(SLO)$/hash_upgrade.obj \
++ $(SLO)$/hash_verify.obj
++
++.INCLUDE : target.mk
++
+--- misc/db-4.7.25.NC/hmac/makefile.mk 2009-07-21 11:42:40.000000000 +0200
++++ misc/build/db-4.7.25.NC/hmac/makefile.mk 2009-07-21 11:39:26.000000000 +0200
+@@ -1 +1,18 @@
+-dummy
++PRJ=..$/..$/..$/..$/..
++
++PRJNAME=berkeleydb
++TARGET=hmac
++
++EXTERNAL_WARNINGS_NOT_ERRORS := TRUE
++
++.INCLUDE : settings.mk
++
++INCPRE+=..$/build_windows ..$/
++CDEFS+=-D_WINDLL -DUNICODE -D_UNICODE -DDB_CREATE_DLL -D_WINDOWS
++
++SLOFILES= \
++ $(SLO)$/hmac.obj \
++ $(SLO)$/sha1.obj
++
++.INCLUDE : target.mk
++
+--- misc/db-4.7.25.NC/hsearch/makefile.mk 2009-07-21 11:42:40.000000000 +0200
++++ misc/build/db-4.7.25.NC/hsearch/makefile.mk 2009-07-21 11:39:26.000000000 +0200
+@@ -1 +1,16 @@
+-dummy
++PRJ=..$/..$/..$/..$/..
++
++PRJNAME=berkeleydb
++TARGET=hsearch
++
++EXTERNAL_WARNINGS_NOT_ERRORS := TRUE
++
++.INCLUDE : settings.mk
++
++INCPRE+=..$/build_windows ..$/
++CDEFS+=-D_WINDLL -DUNICODE -D_UNICODE -DDB_CREATE_DLL -D_WINDOWS
++
++SLOFILES= $(SLO)$/hsearch.obj
++
++.INCLUDE : target.mk
++
+--- misc/db-4.7.25.NC/lock/makefile.mk 2009-07-21 11:42:40.000000000 +0200
++++ misc/build/db-4.7.25.NC/lock/makefile.mk 2009-07-21 11:39:26.000000000 +0200
+@@ -1 +1,26 @@
+-dummy
++PRJ=..$/..$/..$/..$/..
++
++PRJNAME=berkeleydb
++TARGET=lock
++
++EXTERNAL_WARNINGS_NOT_ERRORS := TRUE
++
++.INCLUDE : settings.mk
++
++INCPRE+=..$/build_windows ..$/
++CDEFS+=-D_WINDLL -DUNICODE -D_UNICODE -DDB_CREATE_DLL -D_WINDOWS
++
++SLOFILES= \
++ $(SLO)$/lock.obj \
++ $(SLO)$/lock_deadlock.obj \
++ $(SLO)$/lock_failchk.obj \
++ $(SLO)$/lock_id.obj \
++ $(SLO)$/lock_list.obj \
++ $(SLO)$/lock_method.obj \
++ $(SLO)$/lock_region.obj \
++ $(SLO)$/lock_stat.obj \
++ $(SLO)$/lock_timer.obj \
++ $(SLO)$/lock_util.obj
++
++.INCLUDE : target.mk
++
+--- misc/db-4.7.25.NC/log/makefile.mk 2009-07-21 11:42:40.000000000 +0200
++++ misc/build/db-4.7.25.NC/log/makefile.mk 2009-07-21 11:39:26.000000000 +0200
+@@ -1 +1,24 @@
+-dummy
++PRJ=..$/..$/..$/..$/..
++
++PRJNAME=berkeleydb
++TARGET=log
++
++EXTERNAL_WARNINGS_NOT_ERRORS := TRUE
++
++.INCLUDE : settings.mk
++
++INCPRE+=..$/build_windows ..$/
++CDEFS+=-D_WINDLL -DUNICODE -D_UNICODE -DDB_CREATE_DLL -D_WINDOWS
++
++SLOFILES= \
++ $(SLO)$/log.obj \
++ $(SLO)$/log_archive.obj \
++ $(SLO)$/log_compare.obj \
++ $(SLO)$/log_debug.obj \
++ $(SLO)$/log_get.obj \
++ $(SLO)$/log_method.obj \
++ $(SLO)$/log_put.obj \
++ $(SLO)$/log_stat.obj
++
++.INCLUDE : target.mk
++
+--- misc/db-4.7.25.NC/makefile.mk 2009-07-21 11:42:40.000000000 +0200
++++ misc/build/db-4.7.25.NC/makefile.mk 2009-07-21 11:39:26.000000000 +0200
+@@ -1 +1,76 @@
+-dummy
++PRJ=..$/..$/..$/..
++PRJNAME=libdb47
++TARGET=libdb47
++USE_DEFFILE=true
++UWINAPILIB=
++
++.INCLUDE : settings.mk
++CFLAGS+=-GS -EHsc -Gy
++
++#LINKFLAGS!:=$(LINKFLAGS:s/NODEFAULTLIB/NOLOGO/)
++
++CHILDREN= \
++ btree clib common cxx \
++ db dbm dbreg env fileops \
++ hash hmac hsearch lock \
++ log mp mutex os os_windows \
++ qam rep repmgr sequence \
++ txn xa
++
++LIB1TARGET= $(SLB)$/$(TARGET).lib
++LIB1FILES= \
++ $(SLB)$/btree.lib \
++ $(SLB)$/clib.lib \
++ $(SLB)$/common.lib \
++ $(SLB)$/cxx.lib \
++ $(SLB)$/db_src.lib \
++ $(SLB)$/dbm.lib \
++ $(SLB)$/dbreg.lib \
++ $(SLB)$/env.lib \
++ $(SLB)$/fileops.lib \
++ $(SLB)$/hash.lib \
++ $(SLB)$/hmac.lib \
++ $(SLB)$/hsearch.lib \
++ $(SLB)$/lock.lib \
++ $(SLB)$/log.lib \
++ $(SLB)$/mp.lib \
++ $(SLB)$/mutex.lib \
++ $(SLB)$/os.lib \
++ $(SLB)$/os_windows.lib \
++ $(SLB)$/qam.lib \
++ $(SLB)$/rep.lib \
++ $(SLB)$/repmgr.lib \
++ $(SLB)$/sequence.lib \
++ $(SLB)$/txn.lib \
++ $(SLB)$/xa.lib
++
++SHL1LIBS=$(LIB1TARGET)
++SHL1STDLIBS = $(WS2_32LIB) $(ADVAPI32LIB)
++SHL1TARGET = $(TARGET)
++SHL1DEF = $(MISC)$/$(SHL1TARGET).def
++SHL1IMPLIB = $(SHL1TARGET)
++SHL1LIBS = $(SLB)$/$(TARGET).lib
++SHL1DEPN = $(CHILDREN)
++
++#The following line prevents that the resource file is automatically generated
++use_shl_versions:=
++#use the berkeley's resource file
++RCFILES = build_windows$/libdb.rc
++SHL1RES= $(RES)$/libdb47.res
++
++#DEF1NAME=$(SHL1TARGET)
++#DEF1EXPORTFILE=$(TARGET).dxp
++
++# dmake builds the first rule
++ALLTAR : $(CHILDREN)
++
++$(CHILDREN) .PHONY :
++ cd $@ ; $(MAKECMD) subdmake=true $(MFLAGS) $(CALLMACROS)
++
++.INCLUDE : target.mk
++
++$(MISC)$/$(SHL1TARGET).def : build_windows$/libdb.def
++ $(COPY) $< $@
++
++ #$(DUMPBIN) -DIRECTIVES $(SLB)$/$(TARGET).lib | $(GREP) EXPORT: | $(GREP) -v ",DATA" | $(SED) "s/.*EXPORT://" >> $@
++
+--- misc/db-4.7.25.NC/mp/makefile.mk 2009-07-21 11:42:40.000000000 +0200
++++ misc/build/db-4.7.25.NC/mp/makefile.mk 2009-07-21 11:39:26.000000000 +0200
+@@ -1 +1,31 @@
+-dummy
++PRJ=..$/..$/..$/..$/..
++
++PRJNAME=berkeleydb
++TARGET=mp
++
++EXTERNAL_WARNINGS_NOT_ERRORS := TRUE
++
++.INCLUDE : settings.mk
++
++INCPRE+=..$/build_windows ..$/
++CDEFS+=-D_WINDLL -DUNICODE -D_UNICODE -DDB_CREATE_DLL -D_WINDOWS
++
++SLOFILES= \
++ $(SLO)$/mp_alloc.obj \
++ $(SLO)$/mp_bh.obj \
++ $(SLO)$/mp_fget.obj \
++ $(SLO)$/mp_fmethod.obj \
++ $(SLO)$/mp_fopen.obj \
++ $(SLO)$/mp_fput.obj \
++ $(SLO)$/mp_fset.obj \
++ $(SLO)$/mp_method.obj \
++ $(SLO)$/mp_mvcc.obj \
++ $(SLO)$/mp_region.obj \
++ $(SLO)$/mp_register.obj \
++ $(SLO)$/mp_resize.obj \
++ $(SLO)$/mp_stat.obj \
++ $(SLO)$/mp_sync.obj \
++ $(SLO)$/mp_trickle.obj
++
++.INCLUDE : target.mk
++
+--- misc/db-4.7.25.NC/mutex/makefile.mk 2009-07-21 11:42:40.000000000 +0200
++++ misc/build/db-4.7.25.NC/mutex/makefile.mk 2009-07-21 11:39:26.000000000 +0200
+@@ -1 +1,23 @@
+-dummy
++
++PRJ=..$/..$/..$/..$/..
++
++PRJNAME=berkeleydb
++TARGET=mutex
++
++EXTERNAL_WARNINGS_NOT_ERRORS := TRUE
++
++.INCLUDE : settings.mk
++
++INCPRE+=-I..$/build_windows -I..$/ -I$(COMPATH)$/include $(PSDKINC)
++CDEFS+=-D_WINDLL -DUNICODE -D_UNICODE -DDB_CREATE_DLL -D_WINDOWS
++
++SLOFILES= \
++ $(SLO)$/mut_alloc.obj \
++ $(SLO)$/mut_failchk.obj \
++ $(SLO)$/mut_method.obj \
++ $(SLO)$/mut_region.obj \
++ $(SLO)$/mut_stat.obj \
++ $(SLO)$/mut_win32.obj
++
++.INCLUDE : target.mk
++
+--- misc/db-4.7.25.NC/os/makefile.mk 2009-07-21 11:42:40.000000000 +0200
++++ misc/build/db-4.7.25.NC/os/makefile.mk 2009-07-21 11:39:26.000000000 +0200
+@@ -1 +1,26 @@
+-dummy
++PRJ=..$/..$/..$/..$/..
++
++PRJNAME=berkeleydb
++TARGET=os
++
++EXTERNAL_WARNINGS_NOT_ERRORS := TRUE
++
++.INCLUDE : settings.mk
++
++INCPRE+=..$/build_windows ..$/
++CDEFS+=-D_WINDLL -DUNICODE -D_UNICODE -DDB_CREATE_DLL -D_WINDOWS
++
++SLOFILES= \
++ $(SLO)$/os_abort.obj \
++ $(SLO)$/os_addrinfo.obj \
++ $(SLO)$/os_alloc.obj \
++ $(SLO)$/os_ctime.obj \
++ $(SLO)$/os_pid.obj \
++ $(SLO)$/os_root.obj \
++ $(SLO)$/os_rpath.obj \
++ $(SLO)$/os_stack.obj \
++ $(SLO)$/os_tmpdir.obj \
++ $(SLO)$/os_uid.obj
++
++.INCLUDE : target.mk
++
+--- misc/db-4.7.25.NC/os/os_fsync.c 2008-05-06 05:03:37.000000000 +0200
++++ misc/build/db-4.7.25.NC/os/os_fsync.c 2009-07-21 11:42:03.000000000 +0200
+@@ -79,13 +79,17 @@
+ ret = DB_GLOBAL(j_fsync)(fhp->fd);
+ else {
+ #if defined(F_FULLFSYNC)
++/* When running OOo on MacOS using an NFS mounted disk, fcntl failed with errno
++ ENOTTY (25). Since full sync only works on HFS, FAT and UDF (according to the
++ man page) and also is more time consuming we just use the fallback.
+ RETRY_CHK((fcntl(fhp->fd, F_FULLFSYNC, 0)), ret);
+- /*
++*/ /*
+ * On OS X, F_FULLSYNC only works on HFS+, so we need to fall
+ * back to regular fsync on other filesystems.
+ */
+- if (ret == ENOTSUP)
+- RETRY_CHK((fsync(fhp->fd)), ret);
++/* if (ret == ENOTSUP)
++*/
++ RETRY_CHK((fsync(fhp->fd)), ret);
+ #elif defined(HAVE_QNX)
+ ret = __qnx_fsync(fhp);
+ #elif defined(HAVE_FDATASYNC)
+--- misc/db-4.7.25.NC/os_windows/makefile.mk 2009-07-21 11:42:40.000000000 +0200
++++ misc/build/db-4.7.25.NC/os_windows/makefile.mk 2009-07-21 11:39:26.000000000 +0200
+@@ -1 +1,37 @@
+-dummy
++PRJ=..$/..$/..$/..$/..
++
++PRJNAME=berkeleydb
++TARGET=os_windows
++
++EXTERNAL_WARNINGS_NOT_ERRORS := TRUE
++
++.INCLUDE : settings.mk
++
++INCPRE+=..$/build_windows ..$/
++CDEFS+=-D_WINDLL -DUNICODE -D_UNICODE -DDB_CREATE_DLL -D_WINDOWS
++
++SLOFILES= \
++ $(SLO)$/os_abs.obj \
++ $(SLO)$/os_clock.obj \
++ $(SLO)$/os_config.obj \
++ $(SLO)$/os_cpu.obj \
++ $(SLO)$/os_dir.obj \
++ $(SLO)$/os_errno.obj \
++ $(SLO)$/os_fid.obj \
++ $(SLO)$/os_flock.obj \
++ $(SLO)$/os_fsync.obj \
++ $(SLO)$/os_getenv.obj \
++ $(SLO)$/os_handle.obj \
++ $(SLO)$/os_map.obj \
++ $(SLO)$/os_mkdir.obj \
++ $(SLO)$/os_open.obj \
++ $(SLO)$/os_rename.obj \
++ $(SLO)$/os_rw.obj \
++ $(SLO)$/os_seek.obj \
++ $(SLO)$/os_stat.obj \
++ $(SLO)$/os_truncate.obj \
++ $(SLO)$/os_unlink.obj \
++ $(SLO)$/os_yield.obj \
++
++.INCLUDE : target.mk
++
+--- misc/db-4.7.25.NC/qam/makefile.mk 2009-07-21 11:42:40.000000000 +0200
++++ misc/build/db-4.7.25.NC/qam/makefile.mk 2009-07-21 11:39:26.000000000 +0200
+@@ -1 +1,26 @@
+-dummy
++PRJ=..$/..$/..$/..$/..
++
++PRJNAME=berkeleydb
++TARGET=qam
++
++EXTERNAL_WARNINGS_NOT_ERRORS := TRUE
++
++.INCLUDE : settings.mk
++
++INCPRE+=..$/build_windows ..$/
++CDEFS+=-D_WINDLL -DUNICODE -D_UNICODE -DDB_CREATE_DLL -D_WINDOWS
++
++SLOFILES= \
++ $(SLO)$/qam.obj \
++ $(SLO)$/qam_auto.obj \
++ $(SLO)$/qam_conv.obj \
++ $(SLO)$/qam_files.obj \
++ $(SLO)$/qam_method.obj \
++ $(SLO)$/qam_open.obj \
++ $(SLO)$/qam_rec.obj \
++ $(SLO)$/qam_stat.obj \
++ $(SLO)$/qam_upgrade.obj \
++ $(SLO)$/qam_verify.obj
++
++.INCLUDE : target.mk
++
+--- misc/db-4.7.25.NC/rep/makefile.mk 2009-07-21 11:42:40.000000000 +0200
++++ misc/build/db-4.7.25.NC/rep/makefile.mk 2009-07-21 11:39:26.000000000 +0200
+@@ -1 +1,27 @@
+-dummy
++PRJ=..$/..$/..$/..$/..
++
++PRJNAME=berkeleydb
++TARGET=rep
++
++EXTERNAL_WARNINGS_NOT_ERRORS := TRUE
++
++.INCLUDE : settings.mk
++
++INCPRE+=..$/build_windows ..$/
++CDEFS+=-D_WINDLL -DUNICODE -D_UNICODE -DDB_CREATE_DLL -D_WINDOWS
++
++SLOFILES= \
++ $(SLO)$/rep_auto.obj \
++ $(SLO)$/rep_backup.obj \
++ $(SLO)$/rep_elect.obj \
++ $(SLO)$/rep_lease.obj \
++ $(SLO)$/rep_log.obj \
++ $(SLO)$/rep_method.obj \
++ $(SLO)$/rep_record.obj \
++ $(SLO)$/rep_region.obj \
++ $(SLO)$/rep_stat.obj \
++ $(SLO)$/rep_util.obj \
++ $(SLO)$/rep_verify.obj
++
++.INCLUDE : target.mk
++
+--- misc/db-4.7.25.NC/repmgr/makefile.mk 2009-07-21 11:42:40.000000000 +0200
++++ misc/build/db-4.7.25.NC/repmgr/makefile.mk 2009-07-21 11:39:26.000000000 +0200
+@@ -1 +1,26 @@
+-dummy
++PRJ=..$/..$/..$/..$/..
++
++PRJNAME=berkeleydb
++TARGET=repmgr
++
++EXTERNAL_WARNINGS_NOT_ERRORS := TRUE
++
++.INCLUDE : settings.mk
++
++INCPRE+=..$/build_windows ..$/
++CDEFS+=-D_WINDLL -DUNICODE -D_UNICODE -DDB_CREATE_DLL -D_WINDOWS
++
++SLOFILES= \
++ $(SLO)$/repmgr_auto.obj \
++ $(SLO)$/repmgr_elect.obj \
++ $(SLO)$/repmgr_method.obj \
++ $(SLO)$/repmgr_msg.obj \
++ $(SLO)$/repmgr_net.obj \
++ $(SLO)$/repmgr_queue.obj \
++ $(SLO)$/repmgr_sel.obj \
++ $(SLO)$/repmgr_stat.obj \
++ $(SLO)$/repmgr_util.obj \
++ $(SLO)$/repmgr_windows.obj
++
++.INCLUDE : target.mk
++
+--- misc/db-4.7.25.NC/sequence/makefile.mk 2009-07-21 11:42:40.000000000 +0200
++++ misc/build/db-4.7.25.NC/sequence/makefile.mk 2009-07-21 11:39:26.000000000 +0200
+@@ -1 +1,18 @@
+-dummy
++PRJ=..$/..$/..$/..$/..
++
++PRJNAME=berkeleydb
++TARGET=sequence
++
++EXTERNAL_WARNINGS_NOT_ERRORS := TRUE
++
++.INCLUDE : settings.mk
++
++INCPRE+=..$/build_windows ..$/
++CDEFS+=-D_WINDLL -DUNICODE -D_UNICODE -DDB_CREATE_DLL -D_WINDOWS
++
++SLOFILES= \
++ $(SLO)$/seq_stat.obj \
++ $(SLO)$/sequence.obj
++
++.INCLUDE : target.mk
++
+--- misc/db-4.7.25.NC/txn/makefile.mk 2009-07-21 11:42:40.000000000 +0200
++++ misc/build/db-4.7.25.NC/txn/makefile.mk 2009-07-21 11:39:26.000000000 +0200
+@@ -1 +1,26 @@
+-dummy
++PRJ=..$/..$/..$/..$/..
++
++PRJNAME=berkeleydb
++TARGET=txn
++
++EXTERNAL_WARNINGS_NOT_ERRORS := TRUE
++
++.INCLUDE : settings.mk
++
++INCPRE+=..$/build_windows ..$/
++CDEFS+=-D_WINDLL -DUNICODE -D_UNICODE -DDB_CREATE_DLL -D_WINDOWS
++
++SLOFILES= \
++ $(SLO)$/txn.obj \
++ $(SLO)$/txn_auto.obj \
++ $(SLO)$/txn_chkpt.obj \
++ $(SLO)$/txn_failchk.obj \
++ $(SLO)$/txn_method.obj \
++ $(SLO)$/txn_rec.obj \
++ $(SLO)$/txn_recover.obj \
++ $(SLO)$/txn_region.obj \
++ $(SLO)$/txn_stat.obj \
++ $(SLO)$/txn_util.obj
++
++.INCLUDE : target.mk
++
+--- misc/db-4.7.25.NC/xa/makefile.mk 2009-07-21 11:42:40.000000000 +0200
++++ misc/build/db-4.7.25.NC/xa/makefile.mk 2009-07-21 11:39:26.000000000 +0200
+@@ -1 +1,19 @@
+-dummy
++PRJ=..$/..$/..$/..$/..
++
++PRJNAME=berkeleydb
++TARGET=xa
++
++EXTERNAL_WARNINGS_NOT_ERRORS := TRUE
++
++.INCLUDE : settings.mk
++
++INCPRE+=..$/build_windows ..$/
++CDEFS+=-D_WINDLL -DUNICODE -D_UNICODE -DDB_CREATE_DLL -D_WINDOWS
++
++SLOFILES= \
++ $(SLO)$/xa.obj \
++ $(SLO)$/xa_db.obj \
++ $(SLO)$/xa_map.obj
++
++.INCLUDE : target.mk
++
diff --git a/berkeleydb/makefile.mk b/berkeleydb/makefile.mk
new file mode 100644
index 000000000000..325e8700e7a8
--- /dev/null
+++ b/berkeleydb/makefile.mk
@@ -0,0 +1,182 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=.
+
+PRJNAME=so_berkeleydb
+TARGET=so_berkeleydb
+
+# --- Settings -----------------------------------------------------
+
+.INCLUDE : settings.mk
+
+.IF "$(SYSTEM_DB)" == "YES"
+all:
+ @echo "An already available installation of db should exist on your system."
+ @echo "Therefore the version provided here does not need to be built in addition."
+.ENDIF
+
+# --- Files --------------------------------------------------------
+
+TARFILE_NAME=db-4.7.25.NC-custom
+TARFILE_MD5=d70951c80dabecc2892c919ff5d07172
+TARFILE_ROOTDIR=db-4.7.25.NC
+
+ADDITIONAL_FILES= \
+ makefile.mk btree$/makefile.mk clib$/makefile.mk common$/makefile.mk \
+ cxx$/makefile.mk db$/makefile.mk dbm$/makefile.mk dbreg$/makefile.mk \
+ env$/makefile.mk fileops$/makefile.mk hash$/makefile.mk hmac$/makefile.mk \
+ hsearch$/makefile.mk lock$/makefile.mk log$/makefile.mk mp$/makefile.mk \
+ mutex$/makefile.mk os$/makefile.mk os_windows$/makefile.mk \
+ qam$/makefile.mk rep$/makefile.mk repmgr$/makefile.mk \
+ sequence$/makefile.mk txn$/makefile.mk xa$/makefile.mk \
+ db_4_7_gcc4.map
+
+# not needed for win32. comment out when causing problems...
+.IF "$(GUI)$(COM)"=="WNTGCC"
+PATCH_FILES=db-4.7.25-mingw.patch
+.ELSE
+PATCH_FILES=db-4.7.25.patch
+.ENDIF
+
+# clean compiler flags
+CFLAGS:=
+CXXFLAGS:=
+
+# disable aliasing for all GCC platforms, at least GCC 4.x needs it if
+# optimization level >= 2
+.IF "$(COM)"=="GCC"
+CFLAGS:=-fno-strict-aliasing $(EXTRA_CFLAGS)
+CXXFLAGS:=-fno-strict-aliasing $(EXTRA_CFLAGS)
+.ENDIF
+
+.IF "$(GUI)"=="UNX"
+.IF "$(OS)$(COM)"=="LINUXGCC"
+LDFLAGS:=-Wl,-rpath,'$$$$ORIGIN' -Wl,-z,noexecstack
+.EXPORT: LDFLAGS
+#The current dir when linking is unxlngi6.pro/misc/build/db-4.2.52.NC/out
+# the map file is in unxlngi6.pro/misc/build/db-4.2.52.NC
+LDFLAGSVERSION:= -Wl,--version-script=../db_4_7_gcc4.map
+.EXPORT: LDFLAGSVERSION
+.ENDIF # "$(OS)$(COM)"=="LINUXGCC"
+.IF "$(OS)$(COM)"=="SOLARISC52"
+#.IF "$(BUILD_TOOLS)$/cc"=="$(shell +-which cc)"
+#CC:=$(COMPATH)$/bin$/cc
+#CXX:=$(COMPATH)$/bin$/CC
+#.ENDIF # "$(BUILD_TOOLS)$/cc"=="$(shell +-which cc)"
+LDFLAGS:=$(ARCH_FLAGS) -R\''$$$$ORIGIN'\'
+.EXPORT: LDFLAGS
+.ENDIF # "$(OS)$(COM)"=="SOLARISC52"
+
+CONFIGURE_DIR=out
+#relative to CONFIGURE_DIR
+CONFIGURE_ACTION= \
+ ..$/dist$/configure
+CONFIGURE_FLAGS=--disable-cxx --enable-dynamic --enable-shared --enable-compat185
+.IF "$(OS)"=="MACOSX"
+CONFIGURE_FLAGS+=CPPFLAGS="$(EXTRA_CDEFS)"
+.ENDIF
+# just pass ARCH_FLAGS to native build
+CFLAGS+:=$(ARCH_FLAGS)
+CXXFLAGS+:=$(ARCH_FLAGS)
+.EXPORT : CFLAGS CXXFLAGS
+
+BUILD_DIR=$(CONFIGURE_DIR)
+BUILD_DIR_OUT=$(CONFIGURE_DIR)
+BUILD_ACTION=make
+
+OUT2LIB=$(BUILD_DIR)$/.libs$/libdb*$(DLLPOST)
+OUT2INC= \
+ $(BUILD_DIR)$/db.h
+
+.ENDIF # "$(GUI)"=="UNX"
+
+.IF "$(GUI)"=="WNT"
+.IF "$(COM)"=="GCC"
+CONFIGURE_DIR=out
+#relative to CONFIGURE_DIR
+# TODO needs clean up
+CFLAGS+=-nostdinc
+db_CC=$(CC) -mthreads
+db_CXX=$(CXX) -mthreads
+.IF "$(MINGW_SHARED_GCCLIB)"=="YES"
+db_CC+=-shared-libgcc
+db_CXX+=-shared-libgcc
+.ENDIF
+db_LDFLAGS=-no-undefined -L$(SOLARVER)/$(INPATH)/lib -L$(SOLARVER)/$(INPATH)/bin
+.IF "$(USE_MINGW)"=="cygwin"
+db_LDFLAGS+=-L$(COMPATH)/lib/mingw -L$(COMPATH)/lib/w32api
+.ENDIF
+db_LDFLAGS+=-L$(COMPATH)/lib -L$(MINGW_CLIB_DIR)
+db_LIBS=
+.IF "$(MINGW_SHARED_GXXLIB)"=="YES"
+CFLAGS+=-D_GLIBCXX_DLL
+db_LIBS+=-lstdc++_s
+.ENDIF
+db_LIBXSO_LIBS=$(LIBSTLPORT) $(db_LIBS)
+.IF "$(MINGW_SHARED_GCCLIB)"=="YES"
+db_LIBXSO_LIBS+=-lgcc_s
+.ENDIF
+CONFIGURE_ACTION=..$/dist$/configure
+CONFIGURE_FLAGS=--disable-cxx --enable-dynamic --enable-shared --build=i586-pc-mingw32 --host=i586-pc-mingw32 --enable-mingw CC="$(db_CC)" CXX="$(db_CXX)" LN_S=ln NM="$(WRAPCMD) nm" OBJDUMP="$(WRAPCMD) objdump" JAVA="$(WRAPCMD) -env java" JAVAC="$(WRAPCMD) -env javac" CFLAGS="$(CFLAGS)" CPPFLAGS="$(INCLUDE)" LDFLAGS="$(db_LDFLAGS)" LIBS="$(db_LIBS)" LIBSO_LIBS="$(db_LIBS)" LIBJSO_LIBS="$(db_LIBS)" LIBXSO_LIBS="$(db_LIBXSO_LIBS)"
+
+BUILD_DIR=$(CONFIGURE_DIR)
+BUILD_DIR_OUT=$(CONFIGURE_DIR)
+BUILD_ACTION=make
+
+OUT2LIB=$(BUILD_DIR)$/.libs$/libdb47.dll.a
+OUT2BIN=$(BUILD_DIR)$/.libs$/libdb47.dll
+
+OUT2INC= \
+ $(BUILD_DIR)$/db.h
+.IF "$(GUI)$(COM)"=="WNTGCC"
+.EXPORT : PWD
+.ENDIF
+
+.ELSE
+# make use of stlport headerfiles
+EXT_USE_STLPORT=TRUE
+
+BUILD_DIR=
+BUILD_ACTION=dmake
+
+BUILD_DIR_OUT=build_windows
+#OUT2LIB= \
+# $(BUILD_DIR_OUT)$/Release$/libdb42.lib
+#OUT2BIN=$(BUILD_DIR_OUT)$/Release$/libdb42.dll
+OUT2INC= \
+ $(BUILD_DIR_OUT)$/db.h
+.ENDIF
+.ENDIF # "$(GUI)"=="WNT"
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : set_ext.mk
+.INCLUDE : target.mk
+.INCLUDE : tg_ext.mk
+
+
diff --git a/berkeleydb/prj/build.lst b/berkeleydb/prj/build.lst
new file mode 100644
index 000000000000..c74e15efd2fd
--- /dev/null
+++ b/berkeleydb/prj/build.lst
@@ -0,0 +1,3 @@
+db berkeleydb : external stlport NULL
+db berkeleydb nmake - u as_mkout NULL
+db berkeleydb nmake - w,vc7 as_mkout NULL
diff --git a/berkeleydb/prj/d.lst b/berkeleydb/prj/d.lst
new file mode 100644
index 000000000000..78682f825e0b
--- /dev/null
+++ b/berkeleydb/prj/d.lst
@@ -0,0 +1,15 @@
+mkdir: %_DEST%\inc%_EXT%\berkeleydb
+
+..\%__SRC%\inc\db.h %_DEST%\inc%_EXT%\berkeleydb\db.h
+
+..\%__SRC%\lib\libdb47.lib %_DEST%\lib%_EXT%\libdb47.lib
+
+..\%__SRC%\lib\libdb-4.7.so %_DEST%\lib%_EXT%\libdb-4.7.so
+
+..\%__SRC%\lib\libdb-4.7.dylib %_DEST%\lib%_EXT%\libdb-4.7.dylib
+
+..\%__SRC%\lib\libdb47.dll.a %_DEST%\lib%_EXT%\libdb-4.7.a
+
+..\%__SRC%\bin\libdb47.dll %_DEST%\bin%_EXT%\libdb47.dll
+
+
diff --git a/boost/README.Regex_Experimental b/boost/README.Regex_Experimental
new file mode 100644
index 000000000000..3718fc551884
--- /dev/null
+++ b/boost/README.Regex_Experimental
@@ -0,0 +1,30 @@
+Regular expressions status
+Fri Oct 25 19:36:59 MEST 2002
+
+Boost 1.28 and 1.29 didn't compile on Solaris with STL 4.0, therefor
+sticked to v1.27
+
+Made compile and link regex under wntmsci9 (MSVC 6.03 with STLport 4.0)
+and unxsols3 (Sun WorkShop 6 update 1 C++ 5.2 with STLport 4.0). Failed
+on unxlngi4 (g++ 3.0.1 with glibc 2.1.1 and STLport 4.0) due to wctype (and
+maybe other wide character functions) not properly supported. Gave up due to
+time restrictions, feel free to improve.
+
+Archive Regex_Experimental.tar.gz contains RE.* files that may be used
+for further approaches. Extract and issue the command line
+
+dmake -f RE.makefile.mk
+
+Even if it compiled for all platforms, the remaining issue would be use
+of locales. The system's locale would be used, which doesn't guarantee
+that it works like intended, especially behavior could be different
+between platforms.
+
+I had a short glance at the PCRE (Perl Compatible Regular Expressions)
+available at http://www.pcre.org/, good library, but doesn't support
+Unicode. Localized 256 octets tables are created from locale
+information. Rudimentary UTF-8 support is implemented, but incomplete
+and experimental.
+
+Hope we can solve the RE issues somehow :-/
+Eike Rathke <er@openoffice.org>
diff --git a/boost/Regex_Experimental.tar.gz b/boost/Regex_Experimental.tar.gz
new file mode 100644
index 000000000000..087b8a2a7850
--- /dev/null
+++ b/boost/Regex_Experimental.tar.gz
Binary files differ
diff --git a/boost/boost_1_39_0.patch b/boost/boost_1_39_0.patch
new file mode 100644
index 000000000000..d837246a83bf
--- /dev/null
+++ b/boost/boost_1_39_0.patch
@@ -0,0 +1,287 @@
+diff --git boost_1_39_0/boost/config/compiler/visualc.hpp boost_1_39_0/boost/config/compiler/visualc.hpp
+index 552e5bb..d9f90b2 100644
+--- misc/build/boost_1_39_0/boost/config/compiler/visualc.hpp
++++ misc/build/boost_1_39_0/boost/config/compiler/visualc.hpp
+@@ -138,6 +138,9 @@
+ # define BOOST_NO_RTTI
+ #endif
+
++// disable WORKAROUND macro - gives warning for undefined macros
++#define BOOST_STRICT_CONFIG 1
++
+ //
+ // all versions support __declspec:
+ //
+diff --git boost_1_39_0/boost/function/function_base.hpp boost_1_39_0/boost/function/function_base.hpp
+index 6612fb8..35afa16 100644
+--- misc/build/boost_1_39_0/boost/function/function_base.hpp
++++ misc/build/boost_1_39_0/boost/function/function_base.hpp
+@@ -42,7 +42,7 @@
+ #endif
+
+ // Define BOOST_FUNCTION_STD_NS to the namespace that contains type_info.
+-#ifdef BOOST_NO_EXCEPTION_STD_NAMESPACE
++#ifdef BOOST_NO_STD_TYPEINFO
+ // Embedded VC++ does not have type_info in namespace std
+ # define BOOST_FUNCTION_STD_NS
+ #else
+diff --git boost_1_39_0/boost/function/function_template.hpp boost_1_39_0/boost/function/function_template.hpp
+index 584abe9..36b619b 100644
+--- misc/build/boost_1_39_0/boost/function/function_template.hpp
++++ misc/build/boost_1_39_0/boost/function/function_template.hpp
+@@ -950,10 +950,10 @@ namespace boost {
+ f.vtable->manager(f.functor, this->functor,
+ boost::detail::function::move_functor_tag);
+ f.vtable = 0;
+-#if !defined(BOOST_NO_EXCEPTIONS)
+ } else {
+ clear();
+ }
++#if !defined(BOOST_NO_EXCEPTIONS)
+ } catch (...) {
+ vtable = 0;
+ throw;
+diff --git boost_1_39_0/boost/mpl/apply_wrap.hpp boost_1_39_0/boost/mpl/apply_wrap.hpp
+index b3cb12b..0bf8e73 100644
+--- misc/build/boost_1_39_0/boost/mpl/apply_wrap.hpp
++++ misc/build/boost_1_39_0/boost/mpl/apply_wrap.hpp
+@@ -173,8 +173,8 @@ struct BOOST_PP_CAT(apply_wrap,i_)<AUX778076_APPLY_WRAP_SPEC_PARAMS(i_, int)>
+ # undef i_
+
+ ///// iteration, depth == 2
+-
+-#elif BOOST_PP_ITERATION_DEPTH() == 2
++#else
++#if BOOST_PP_ITERATION_DEPTH() == 2
+
+ # define j_ BOOST_PP_FRAME_ITERATION(2)
+
+@@ -231,4 +231,5 @@ struct BOOST_PP_CAT(apply_wrap_impl,i_)<
+ # undef j_
+
+ #endif // BOOST_PP_ITERATION_DEPTH()
++#endif
+ #endif // BOOST_PP_IS_ITERATING
+diff --git boost_1_39_0/boost/mpl/bind.hpp boost_1_39_0/boost/mpl/bind.hpp
+index 5d851ef..780e260 100644
+--- misc/build/boost_1_39_0/boost/mpl/bind.hpp
++++ misc/build/boost_1_39_0/boost/mpl/bind.hpp
+@@ -531,7 +531,8 @@ struct bind_chooser<i_>
+
+ ///// iteration, depth == 2
+
+-#elif BOOST_PP_ITERATION_DEPTH() == 2
++#else
++#if BOOST_PP_ITERATION_DEPTH() == 2
+
+ # define j_ BOOST_PP_FRAME_ITERATION(2)
+ # if !defined(BOOST_MPL_CFG_NO_UNNAMED_PLACEHOLDER_SUPPORT)
+@@ -548,4 +549,5 @@ struct bind_chooser<i_>
+ # undef j_
+
+ #endif // BOOST_PP_ITERATION_DEPTH()
++#endif
+ #endif // BOOST_PP_IS_ITERATING
+diff --git boost_1_39_0/boost/ptr_container/detail/move.hpp boost_1_39_0/boost/ptr_container/detail/move.hpp
+index bf07d5f..6b082a7 100644
+--- misc/build/boost_1_39_0/boost/ptr_container/detail/move.hpp
++++ misc/build/boost_1_39_0/boost/ptr_container/detail/move.hpp
+@@ -20,7 +20,7 @@ namespace move_ptrs {
+ template<typename Ptr>
+ class move_source {
+ public:
+- move_source(Ptr& ptr) : ptr_(ptr) {}
++ move_source(Ptr& _ptr) : ptr_(_ptr) {}
+ Ptr& ptr() const { return ptr_; }
+ private:
+ Ptr& ptr_;
+diff --git boost_1_39_0/boost/ptr_container/detail/reversible_ptr_container.hpp boost_1_39_0/boost/ptr_container/detail/reversible_ptr_container.hpp
+index 47c3903..3ad2c5c 100644
+--- misc/build/boost_1_39_0/boost/ptr_container/detail/reversible_ptr_container.hpp
++++ misc/build/boost_1_39_0/boost/ptr_container/detail/reversible_ptr_container.hpp
+@@ -278,9 +278,9 @@ namespace ptr_container_detail
+
+ private:
+ template< class ForwardIterator >
+- ForwardIterator advance( ForwardIterator begin, size_type n )
++ ForwardIterator advance( ForwardIterator _begin, size_type n )
+ {
+- ForwardIterator iter = begin;
++ ForwardIterator iter = _begin;
+ std::advance( iter, n );
+ return iter;
+ }
+diff --git boost_1_39_0/boost/ptr_container/detail/static_move_ptr.hpp boost_1_39_0/boost/ptr_container/detail/static_move_ptr.hpp
+index ba2b9af..9e0d682 100644
+--- misc/build/boost_1_39_0/boost/ptr_container/detail/static_move_ptr.hpp
++++ misc/build/boost_1_39_0/boost/ptr_container/detail/static_move_ptr.hpp
+@@ -151,7 +151,7 @@ public:
+ deleter_const_reference get_deleter() const { return impl_.second(); }
+ private:
+ template<typename TT, typename DD>
+- void check(const static_move_ptr<TT, DD>& ptr)
++ void check(const static_move_ptr<TT, DD>& _ptr)
+ {
+ typedef move_ptrs::is_smart_ptr_convertible<TT, T> convertible;
+ BOOST_STATIC_ASSERT(convertible::value);
+diff --git boost_1_39_0/boost/ptr_container/exception.hpp boost_1_39_0/boost/ptr_container/exception.hpp
+index d9a5ffe..7837fbb 100644
+--- misc/build/boost_1_39_0/boost/ptr_container/exception.hpp
++++ misc/build/boost_1_39_0/boost/ptr_container/exception.hpp
+@@ -24,7 +24,7 @@ namespace boost
+ {
+ const char* what_;
+ public:
+- bad_ptr_container_operation( const char* what ) : what_( what )
++ bad_ptr_container_operation( const char* text ) : what_( text )
+ { }
+
+ virtual const char* what() const throw()
+@@ -38,7 +38,7 @@ namespace boost
+ class bad_index : public bad_ptr_container_operation
+ {
+ public:
+- bad_index( const char* what ) : bad_ptr_container_operation( what )
++ bad_index( const char* text ) : bad_ptr_container_operation( text )
+ { }
+ };
+
+diff --git boost_1_39_0/boost/spirit/home/classic/core/impl/match.ipp boost_1_39_0/boost/spirit/home/classic/core/impl/match.ipp
+index 492bf4b..565fdec 100644
+--- misc/build/boost_1_39_0/boost/spirit/home/classic/core/impl/match.ipp
++++ misc/build/boost_1_39_0/boost/spirit/home/classic/core/impl/match.ipp
+@@ -19,12 +19,12 @@ BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+ : len(-1), val() {}
+
+ template <typename T>
+- inline match<T>::match(std::size_t length)
+- : len(length), val() {}
++ inline match<T>::match(std::size_t _length)
++ : len(_length), val() {}
+
+ template <typename T>
+- inline match<T>::match(std::size_t length, ctor_param_t val_)
+- : len(length), val(val_) {}
++ inline match<T>::match(std::size_t _length, ctor_param_t val_)
++ : len(_length), val(val_) {}
+
+ template <typename T>
+ inline bool
+@@ -66,11 +66,11 @@ BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+ inline match<nil_t>::match()
+ : len(-1) {}
+
+- inline match<nil_t>::match(std::size_t length)
+- : len(length) {}
++ inline match<nil_t>::match(std::size_t _length)
++ : len(_length) {}
+
+- inline match<nil_t>::match(std::size_t length, nil_t)
+- : len(length) {}
++ inline match<nil_t>::match(std::size_t _length, nil_t)
++ : len(_length) {}
+
+ inline bool
+ match<nil_t>::operator!() const
+diff --git boost_1_39_0/boost/spirit/home/classic/core/non_terminal/impl/rule.ipp boost_1_39_0/boost/spirit/home/classic/core/non_terminal/impl/rule.ipp
+index ca51bd2..b2282fa 100644
+--- misc/build/boost_1_39_0/boost/spirit/home/classic/core/non_terminal/impl/rule.ipp
++++ misc/build/boost_1_39_0/boost/spirit/home/classic/core/non_terminal/impl/rule.ipp
+@@ -226,7 +226,7 @@ BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+ template <typename ParserT, typename ScannerT, typename AttrT>
+ struct concrete_parser : abstract_parser<ScannerT, AttrT>
+ {
+- concrete_parser(ParserT const& p) : p(p) {}
++ concrete_parser(ParserT const& _p) : p(_p) {}
+ virtual ~concrete_parser() {}
+
+ virtual typename match_result<ScannerT, AttrT>::type
+diff --git boost_1_39_0/boost/spirit/home/classic/core/non_terminal/parser_id.hpp boost_1_39_0/boost/spirit/home/classic/core/non_terminal/parser_id.hpp
+index 2f4b986..b3809da 100644
+--- misc/build/boost_1_39_0/boost/spirit/home/classic/core/non_terminal/parser_id.hpp
++++ misc/build/boost_1_39_0/boost/spirit/home/classic/core/non_terminal/parser_id.hpp
+@@ -106,7 +106,7 @@ BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+ : parser_id(reinterpret_cast<std::size_t>(this));
+ }
+
+- void set_id(parser_id id) { tag = id; }
++ void set_id(parser_id _id) { tag = _id; }
+
+ private:
+
+diff --git boost_1_39_0/boost/spirit/home/classic/core/non_terminal/rule.hpp boost_1_39_0/boost/spirit/home/classic/core/non_terminal/rule.hpp
+index 73389b4..18d26cc 100644
+--- misc/build/boost_1_39_0/boost/spirit/home/classic/core/non_terminal/rule.hpp
++++ misc/build/boost_1_39_0/boost/spirit/home/classic/core/non_terminal/rule.hpp
+@@ -159,11 +159,11 @@ BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+ return ptr.get();
+ }
+
+- rule(abstract_parser_t* ptr)
+- : ptr(ptr) {}
++ rule(abstract_parser_t* _ptr)
++ : ptr(_ptr) {}
+
+- rule(abstract_parser_t const* ptr)
+- : ptr(ptr) {}
++ rule(abstract_parser_t const* _ptr)
++ : ptr(_ptr) {}
+
+ scoped_ptr<abstract_parser_t> ptr;
+ };
+diff --git boost_1_39_0/boost/spirit/home/classic/core/non_terminal/subrule.hpp boost_1_39_0/boost/spirit/home/classic/core/non_terminal/subrule.hpp
+index 5d6761f..b93118a 100644
+--- misc/build/boost_1_39_0/boost/spirit/home/classic/core/non_terminal/subrule.hpp
++++ misc/build/boost_1_39_0/boost/spirit/home/classic/core/non_terminal/subrule.hpp
+@@ -210,7 +210,7 @@ BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+ subrule_list<
+ subrule_parser<ID2, DefT2, ContextT2>,
+ nil_t> >
+- operator,(subrule_parser<ID2, DefT2, ContextT2> const& rhs) const
++ operator,(subrule_parser<ID2, DefT2, ContextT2> const& _rhs) const
+ {
+ return subrule_list<
+ self_t,
+@@ -220,7 +220,7 @@ BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+ *this,
+ subrule_list<
+ subrule_parser<ID2, DefT2, ContextT2>, nil_t>(
+- rhs, nil_t()));
++ _rhs, nil_t()));
+ }
+
+ typename DefT::embed_t rhs;
+@@ -258,10 +258,10 @@ BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+ parse_main(ScannerT const& scan) const
+ {
+ typedef typename parser_result<self_t, ScannerT>::type result_t;
+- result_t result;
++ result_t _result;
+ impl::parse_subrule<result_t, ScannerT, ID>::
+- do_(result, scan);
+- return result;
++ do_(_result, scan);
++ return _result;
+ }
+
+ template <typename ScannerT>
+diff --git boost_1_39_0/boost/spirit/home/classic/debug/impl/parser_names.ipp boost_1_39_0/boost/spirit/home/classic/debug/impl/parser_names.ipp
+index 5d75be2..730cf0c 100644
+--- misc/build/boost_1_39_0/boost/spirit/home/classic/debug/impl/parser_names.ipp
++++ misc/build/boost_1_39_0/boost/spirit/home/classic/debug/impl/parser_names.ipp
+@@ -395,13 +395,13 @@ BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+ }
+
+ bool register_node(void const *r, char const *name_to_register,
+- bool trace_node)
++ bool _trace_node)
+ {
+ if (infos.find(r) != infos.end())
+ return false;
+
+ return infos.insert(rule_infos::value_type(r,
+- rule_info(std::string(name_to_register), trace_node))
++ rule_info(std::string(name_to_register), _trace_node))
+ ).second;
+ }
+
diff --git a/boost/makefile.mk b/boost/makefile.mk
new file mode 100644
index 000000000000..fdc1dfd2a44c
--- /dev/null
+++ b/boost/makefile.mk
@@ -0,0 +1,107 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+# dmake create_clean -- just unpacks
+# dmake patch -- unpacks and applies patch file
+# dmake create_patch -- creates a patch file
+
+PRJ=.
+
+PRJNAME=boost
+TARGET=ooo_boost
+
+# --- Settings -----------------------------------------------------
+
+.INCLUDE : settings.mk
+
+# force patched boost for sunpro CC
+# to workaround opt bug when compiling with -xO3
+.IF "$(SYSTEM_BOOST)" == "YES" && ("$(OS)"!="SOLARIS" || "$(COM)"=="GCC")
+all:
+ @echo "An already available installation of boost should exist on your system."
+ @echo "Therefore the version provided here does not need to be built in addition."
+.ELSE # "$(SYSTEM_BOOST)" == "YES" && ("$(OS)"!="SOLARIS" || "$(COM)"=="GCC")
+
+# --- Files --------------------------------------------------------
+
+TARFILE_NAME=boost_1_39_0
+TARFILE_MD5=fcc6df1160753d0b8c835d17fdeeb0a7
+PATCH_FILES=$(TARFILE_NAME).patch
+
+CONFIGURE_DIR=
+CONFIGURE_ACTION=
+
+BUILD_DIR=
+BUILD_ACTION=
+BUILD_FLAGS=
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : set_ext.mk
+.INCLUDE : target.mk
+.INCLUDE : tg_ext.mk
+
+# --- post-build ---------------------------------------------------
+
+# "normalize" the output structure, in that the C++ headers are
+# copied to the canonic location in OUTPATH
+# The allows, later on, to use the standard mechanisms to deliver those
+# files, instead of delivering them out of OUTPATH/misc/build/..., which
+# could cause problems
+
+NORMALIZE_FLAG_FILE=so_normalized_$(TARGET)
+
+$(PACKAGE_DIR)$/$(NORMALIZE_FLAG_FILE) : $(PACKAGE_DIR)$/$(BUILD_FLAG_FILE)
+ -@$(MKDIRHIER) $(INCCOM)$/$(PRJNAME)
+ @$(GNUCOPY) -r $(PACKAGE_DIR)$/$(TARFILE_NAME)$/boost$/*.h $(INCCOM)$/$(PRJNAME)
+ @$(GNUCOPY) -r $(PACKAGE_DIR)$/$(TARFILE_NAME)$/boost$/*.hpp $(INCCOM)$/$(PRJNAME)
+ @$(GNUCOPY) -r $(PACKAGE_DIR)$/$(TARFILE_NAME)$/boost$/bind $(INCCOM)$/$(PRJNAME)
+ @$(GNUCOPY) -r $(PACKAGE_DIR)$/$(TARFILE_NAME)$/boost$/config $(INCCOM)$/$(PRJNAME)
+ @$(GNUCOPY) -r $(PACKAGE_DIR)$/$(TARFILE_NAME)$/boost$/detail $(INCCOM)$/$(PRJNAME)
+ @$(GNUCOPY) -r $(PACKAGE_DIR)$/$(TARFILE_NAME)$/boost$/exception $(INCCOM)$/$(PRJNAME)
+ @$(GNUCOPY) -r $(PACKAGE_DIR)$/$(TARFILE_NAME)$/boost$/function $(INCCOM)$/$(PRJNAME)
+ @$(GNUCOPY) -r $(PACKAGE_DIR)$/$(TARFILE_NAME)$/boost$/iterator $(INCCOM)$/$(PRJNAME)
+ @$(GNUCOPY) -r $(PACKAGE_DIR)$/$(TARFILE_NAME)$/boost$/mpl $(INCCOM)$/$(PRJNAME)
+ @$(GNUCOPY) -r $(PACKAGE_DIR)$/$(TARFILE_NAME)$/boost$/numeric $(INCCOM)$/$(PRJNAME)
+ @$(GNUCOPY) -r $(PACKAGE_DIR)$/$(TARFILE_NAME)$/boost$/optional $(INCCOM)$/$(PRJNAME)
+ @$(GNUCOPY) -r $(PACKAGE_DIR)$/$(TARFILE_NAME)$/boost$/pending $(INCCOM)$/$(PRJNAME)
+ @$(GNUCOPY) -r $(PACKAGE_DIR)$/$(TARFILE_NAME)$/boost$/pool $(INCCOM)$/$(PRJNAME)
+ @$(GNUCOPY) -r $(PACKAGE_DIR)$/$(TARFILE_NAME)$/boost$/preprocessor $(INCCOM)$/$(PRJNAME)
+ @$(GNUCOPY) -r $(PACKAGE_DIR)$/$(TARFILE_NAME)$/boost$/ptr_container $(INCCOM)$/$(PRJNAME)
+ @$(GNUCOPY) -r $(PACKAGE_DIR)$/$(TARFILE_NAME)$/boost$/range $(INCCOM)$/$(PRJNAME)
+ @$(GNUCOPY) -r $(PACKAGE_DIR)$/$(TARFILE_NAME)$/boost$/spirit $(INCCOM)$/$(PRJNAME)
+ @$(GNUCOPY) -r $(PACKAGE_DIR)$/$(TARFILE_NAME)$/boost$/smart_ptr $(INCCOM)$/$(PRJNAME)
+ @$(GNUCOPY) -r $(PACKAGE_DIR)$/$(TARFILE_NAME)$/boost$/tuple $(INCCOM)$/$(PRJNAME)
+ @$(GNUCOPY) -r $(PACKAGE_DIR)$/$(TARFILE_NAME)$/boost$/type_traits $(INCCOM)$/$(PRJNAME)
+ @$(GNUCOPY) -r $(PACKAGE_DIR)$/$(TARFILE_NAME)$/boost$/utility $(INCCOM)$/$(PRJNAME)
+ @$(GNUCOPY) -r $(PACKAGE_DIR)$/$(TARFILE_NAME)$/boost$/variant $(INCCOM)$/$(PRJNAME)
+ @$(TOUCH) $(PACKAGE_DIR)$/$(NORMALIZE_FLAG_FILE)
+
+normalize: $(PACKAGE_DIR)$/$(NORMALIZE_FLAG_FILE)
+
+$(PACKAGE_DIR)$/$(PREDELIVER_FLAG_FILE) : normalize
+.ENDIF # "$(SYSTEM_BOOST)" == "YES" && ("$(OS)"!="SOLARIS" || "$(COM)"=="GCC")
diff --git a/boost/prj/build.lst b/boost/prj/build.lst
new file mode 100644
index 000000000000..421265b927f7
--- /dev/null
+++ b/boost/prj/build.lst
@@ -0,0 +1,3 @@
+bo boost : SO:so_prereq solenv NULL
+bo boost usr1 - all bo_mkout NULL
+bo boost nmake - all bo_boost NULL
diff --git a/boost/prj/d.lst b/boost/prj/d.lst
new file mode 100644
index 000000000000..6b9ebcaf6d66
--- /dev/null
+++ b/boost/prj/d.lst
@@ -0,0 +1,312 @@
+mkdir: %_DEST%\inc%_EXT%\boost
+mkdir: %_DEST%\inc%_EXT%\boost\bind
+mkdir: %_DEST%\inc%_EXT%\boost\config
+mkdir: %_DEST%\inc%_EXT%\boost\config\compiler
+mkdir: %_DEST%\inc%_EXT%\boost\config\no_tr1
+mkdir: %_DEST%\inc%_EXT%\boost\config\platform
+mkdir: %_DEST%\inc%_EXT%\boost\config\stdlib
+mkdir: %_DEST%\inc%_EXT%\boost\detail
+mkdir: %_DEST%\inc%_EXT%\boost\function
+mkdir: %_DEST%\inc%_EXT%\boost\function\detail
+mkdir: %_DEST%\inc%_EXT%\boost\iterator
+mkdir: %_DEST%\inc%_EXT%\boost\iterator\detail
+mkdir: %_DEST%\inc%_EXT%\boost\exception
+mkdir: %_DEST%\inc%_EXT%\boost\exception\detail
+mkdir: %_DEST%\inc%_EXT%\boost\function
+mkdir: %_DEST%\inc%_EXT%\boost\mpl
+mkdir: %_DEST%\inc%_EXT%\boost\mpl\aux_
+mkdir: %_DEST%\inc%_EXT%\boost\mpl\aux_\config
+mkdir: %_DEST%\inc%_EXT%\boost\mpl\aux_\preprocessed
+mkdir: %_DEST%\inc%_EXT%\boost\mpl\aux_\preprocessed\bcc
+mkdir: %_DEST%\inc%_EXT%\boost\mpl\aux_\preprocessed\bcc551
+mkdir: %_DEST%\inc%_EXT%\boost\mpl\aux_\preprocessed\gcc
+mkdir: %_DEST%\inc%_EXT%\boost\mpl\aux_\preprocessed\msvc60
+mkdir: %_DEST%\inc%_EXT%\boost\mpl\aux_\preprocessed\msvc70
+mkdir: %_DEST%\inc%_EXT%\boost\mpl\aux_\preprocessed\mwcw
+mkdir: %_DEST%\inc%_EXT%\boost\mpl\aux_\preprocessed\no_ctps
+mkdir: %_DEST%\inc%_EXT%\boost\mpl\aux_\preprocessed\no_ttp
+mkdir: %_DEST%\inc%_EXT%\boost\mpl\aux_\preprocessed\plain
+mkdir: %_DEST%\inc%_EXT%\boost\mpl\aux_\preprocessor
+mkdir: %_DEST%\inc%_EXT%\boost\mpl\aux_\range_c
+mkdir: %_DEST%\inc%_EXT%\boost\mpl\limits
+mkdir: %_DEST%\inc%_EXT%\boost\mpl\list
+mkdir: %_DEST%\inc%_EXT%\boost\mpl\list\aux_
+mkdir: %_DEST%\inc%_EXT%\boost\mpl\list\aux_\preprocessed
+mkdir: %_DEST%\inc%_EXT%\boost\mpl\list\aux_\preprocessed\plain
+mkdir: %_DEST%\inc%_EXT%\boost\mpl\math
+mkdir: %_DEST%\inc%_EXT%\boost\mpl\vector
+mkdir: %_DEST%\inc%_EXT%\boost\mpl\vector\aux_
+mkdir: %_DEST%\inc%_EXT%\boost\mpl\vector\aux_\preprocessed
+mkdir: %_DEST%\inc%_EXT%\boost\mpl\vector\aux_\preprocessed\no_ctps
+mkdir: %_DEST%\inc%_EXT%\boost\mpl\vector\aux_\preprocessed\plain
+mkdir: %_DEST%\inc%_EXT%\boost\mpl\vector\aux_\preprocessed\typeof_based
+mkdir: %_DEST%\inc%_EXT%\boost\numeric
+mkdir: %_DEST%\inc%_EXT%\boost\numeric\conversion
+mkdir: %_DEST%\inc%_EXT%\boost\numeric\conversion\detail
+mkdir: %_DEST%\inc%_EXT%\boost\numeric\ublas
+mkdir: %_DEST%\inc%_EXT%\boost\numeric\ublas\detail
+mkdir: %_DEST%\inc%_EXT%\boost\optional
+mkdir: %_DEST%\inc%_EXT%\boost\pending
+mkdir: %_DEST%\inc%_EXT%\boost\pool
+mkdir: %_DEST%\inc%_EXT%\boost\pool\detail
+mkdir: %_DEST%\inc%_EXT%\boost\preprocessor
+mkdir: %_DEST%\inc%_EXT%\boost\preprocessor\arithmetic
+mkdir: %_DEST%\inc%_EXT%\boost\preprocessor\arithmetic\detail
+mkdir: %_DEST%\inc%_EXT%\boost\preprocessor\array
+mkdir: %_DEST%\inc%_EXT%\boost\preprocessor\comparison
+mkdir: %_DEST%\inc%_EXT%\boost\preprocessor\config
+mkdir: %_DEST%\inc%_EXT%\boost\preprocessor\control
+mkdir: %_DEST%\inc%_EXT%\boost\preprocessor\control\detail
+mkdir: %_DEST%\inc%_EXT%\boost\preprocessor\control\detail\edg
+mkdir: %_DEST%\inc%_EXT%\boost\preprocessor\control\detail\msvc
+mkdir: %_DEST%\inc%_EXT%\boost\preprocessor\debug
+mkdir: %_DEST%\inc%_EXT%\boost\preprocessor\detail
+mkdir: %_DEST%\inc%_EXT%\boost\preprocessor\facilities
+mkdir: %_DEST%\inc%_EXT%\boost\preprocessor\iteration
+mkdir: %_DEST%\inc%_EXT%\boost\preprocessor\iteration\detail
+mkdir: %_DEST%\inc%_EXT%\boost\preprocessor\iteration\detail\bounds
+mkdir: %_DEST%\inc%_EXT%\boost\preprocessor\iteration\detail\iter
+mkdir: %_DEST%\inc%_EXT%\boost\preprocessor\list
+mkdir: %_DEST%\inc%_EXT%\boost\preprocessor\list\detail
+mkdir: %_DEST%\inc%_EXT%\boost\preprocessor\list\detail\edg
+mkdir: %_DEST%\inc%_EXT%\boost\preprocessor\logical
+mkdir: %_DEST%\inc%_EXT%\boost\preprocessor\punctuation
+mkdir: %_DEST%\inc%_EXT%\boost\preprocessor\repetition
+mkdir: %_DEST%\inc%_EXT%\boost\preprocessor\repetition\detail
+mkdir: %_DEST%\inc%_EXT%\boost\preprocessor\repetition\detail\edg
+mkdir: %_DEST%\inc%_EXT%\boost\preprocessor\repetition\detail\msvc
+mkdir: %_DEST%\inc%_EXT%\boost\preprocessor\selection
+mkdir: %_DEST%\inc%_EXT%\boost\preprocessor\seq
+mkdir: %_DEST%\inc%_EXT%\boost\preprocessor\seq\detail
+mkdir: %_DEST%\inc%_EXT%\boost\preprocessor\slot
+mkdir: %_DEST%\inc%_EXT%\boost\preprocessor\slot\detail
+mkdir: %_DEST%\inc%_EXT%\boost\preprocessor\tuple
+mkdir: %_DEST%\inc%_EXT%\boost\ptr_container
+mkdir: %_DEST%\inc%_EXT%\boost\ptr_container\detail
+mkdir: %_DEST%\inc%_EXT%\boost\range
+mkdir: %_DEST%\inc%_EXT%\boost\range\detail
+mkdir: %_DEST%\inc%_EXT%\boost\spirit
+mkdir: %_DEST%\inc%_EXT%\boost\spirit\actor
+mkdir: %_DEST%\inc%_EXT%\boost\spirit\attribute
+mkdir: %_DEST%\inc%_EXT%\boost\spirit\core
+mkdir: %_DEST%\inc%_EXT%\boost\spirit\core\composite
+mkdir: %_DEST%\inc%_EXT%\boost\spirit\core\composite\impl
+mkdir: %_DEST%\inc%_EXT%\boost\spirit\core\impl
+mkdir: %_DEST%\inc%_EXT%\boost\spirit\core\meta
+mkdir: %_DEST%\inc%_EXT%\boost\spirit\core\meta\impl
+mkdir: %_DEST%\inc%_EXT%\boost\spirit\core\non_terminal
+mkdir: %_DEST%\inc%_EXT%\boost\spirit\core\non_terminal\impl
+mkdir: %_DEST%\inc%_EXT%\boost\spirit\core\primitives
+mkdir: %_DEST%\inc%_EXT%\boost\spirit\core\primitives\impl
+mkdir: %_DEST%\inc%_EXT%\boost\spirit\core\scanner
+mkdir: %_DEST%\inc%_EXT%\boost\spirit\core\scanner\impl
+mkdir: %_DEST%\inc%_EXT%\boost\spirit\debug
+mkdir: %_DEST%\inc%_EXT%\boost\spirit\debug\impl
+mkdir: %_DEST%\inc%_EXT%\boost\spirit\dynamic
+mkdir: %_DEST%\inc%_EXT%\boost\spirit\dynamic\impl
+mkdir: %_DEST%\inc%_EXT%\boost\spirit\error_handling
+mkdir: %_DEST%\inc%_EXT%\boost\spirit\error_handling\impl
+mkdir: %_DEST%\inc%_EXT%\boost\spirit\home
+mkdir: %_DEST%\inc%_EXT%\boost\spirit\home\classic
+mkdir: %_DEST%\inc%_EXT%\boost\spirit\home\classic\actor
+mkdir: %_DEST%\inc%_EXT%\boost\spirit\home\classic\actor\impl
+mkdir: %_DEST%\inc%_EXT%\boost\spirit\home\classic\debug
+mkdir: %_DEST%\inc%_EXT%\boost\spirit\home\classic\debug\impl
+mkdir: %_DEST%\inc%_EXT%\boost\spirit\home\classic\meta
+mkdir: %_DEST%\inc%_EXT%\boost\spirit\home\classic\meta\impl
+mkdir: %_DEST%\inc%_EXT%\boost\spirit\home\classic\core
+mkdir: %_DEST%\inc%_EXT%\boost\spirit\home\classic\core\impl
+mkdir: %_DEST%\inc%_EXT%\boost\spirit\home\classic\core\scanner
+mkdir: %_DEST%\inc%_EXT%\boost\spirit\home\classic\core\scanner\impl
+mkdir: %_DEST%\inc%_EXT%\boost\spirit\home\classic\core\non_terminal
+mkdir: %_DEST%\inc%_EXT%\boost\spirit\home\classic\core\non_terminal\impl
+mkdir: %_DEST%\inc%_EXT%\boost\spirit\home\classic\core\primitives
+mkdir: %_DEST%\inc%_EXT%\boost\spirit\home\classic\core\primitives\impl
+mkdir: %_DEST%\inc%_EXT%\boost\spirit\home\classic\core\composite
+mkdir: %_DEST%\inc%_EXT%\boost\spirit\home\classic\core\composite\impl
+mkdir: %_DEST%\inc%_EXT%\boost\spirit\home\classic\error_handling
+mkdir: %_DEST%\inc%_EXT%\boost\spirit\home\classic\error_handling\impl
+mkdir: %_DEST%\inc%_EXT%\boost\spirit\home\classic\iterator
+mkdir: %_DEST%\inc%_EXT%\boost\spirit\home\classic\iterator\impl
+mkdir: %_DEST%\inc%_EXT%\boost\spirit\home\classic\utility
+mkdir: %_DEST%\inc%_EXT%\boost\spirit\home\classic\utility\impl
+mkdir: %_DEST%\inc%_EXT%\boost\spirit\home\classic\utility\impl\chset
+mkdir: %_DEST%\inc%_EXT%\boost\spirit\include
+mkdir: %_DEST%\inc%_EXT%\boost\spirit\iterator
+mkdir: %_DEST%\inc%_EXT%\boost\spirit\iterator\impl
+mkdir: %_DEST%\inc%_EXT%\boost\spirit\meta
+mkdir: %_DEST%\inc%_EXT%\boost\spirit\meta\impl
+mkdir: %_DEST%\inc%_EXT%\boost\spirit\phoenix
+mkdir: %_DEST%\inc%_EXT%\boost\spirit\symbols
+mkdir: %_DEST%\inc%_EXT%\boost\spirit\symbols\impl
+mkdir: %_DEST%\inc%_EXT%\boost\spirit\tree
+mkdir: %_DEST%\inc%_EXT%\boost\spirit\tree\impl
+mkdir: %_DEST%\inc%_EXT%\boost\spirit\utility
+mkdir: %_DEST%\inc%_EXT%\boost\spirit\utility\impl
+mkdir: %_DEST%\inc%_EXT%\boost\spirit\utility\impl\chset
+mkdir: %_DEST%\inc%_EXT%\boost\smart_ptr
+mkdir: %_DEST%\inc%_EXT%\boost\smart_ptr\detail
+mkdir: %_DEST%\inc%_EXT%\boost\tuple
+mkdir: %_DEST%\inc%_EXT%\boost\tuple\detail
+mkdir: %_DEST%\inc%_EXT%\boost\type_traits
+mkdir: %_DEST%\inc%_EXT%\boost\type_traits\detail
+mkdir: %_DEST%\inc%_EXT%\boost\utility
+mkdir: %_DEST%\inc%_EXT%\boost\utility\detail
+mkdir: %_DEST%\inc%_EXT%\boost\variant
+mkdir: %_DEST%\inc%_EXT%\boost\variant\detail
+
+..\%__SRC%\inc\boost\* %_DEST%\inc%_EXT%\boost
+..\%__SRC%\inc\boost\bind\* %_DEST%\inc%_EXT%\boost\bind
+..\%__SRC%\inc\boost\config\* %_DEST%\inc%_EXT%\boost\config
+..\%__SRC%\inc\boost\config\compiler\* %_DEST%\inc%_EXT%\boost\config\compiler
+..\%__SRC%\inc\boost\config\no_tr1\* %_DEST%\inc%_EXT%\boost\config\no_tr1
+..\%__SRC%\inc\boost\config\platform\* %_DEST%\inc%_EXT%\boost\config\platform
+..\%__SRC%\inc\boost\config\stdlib\* %_DEST%\inc%_EXT%\boost\config\stdlib
+..\%__SRC%\inc\boost\detail\* %_DEST%\inc%_EXT%\boost\detail
+..\%__SRC%\inc\boost\function\* %_DEST%\inc%_EXT%\boost\function
+..\%__SRC%\inc\boost\function\detail\* %_DEST%\inc%_EXT%\boost\function\detail
+..\%__SRC%\inc\boost\iterator\* %_DEST%\inc%_EXT%\boost\iterator
+..\%__SRC%\inc\boost\iterator\detail\* %_DEST%\inc%_EXT%\boost\iterator\detail
+..\%__SRC%\inc\boost\exception\* %_DEST%\inc%_EXT%\boost\exception
+..\%__SRC%\inc\boost\exception\detail\* %_DEST%\inc%_EXT%\boost\exception\detail
+..\%__SRC%\inc\boost\mpl\* %_DEST%\inc%_EXT%\boost\mpl
+..\%__SRC%\inc\boost\mpl\aux_\* %_DEST%\inc%_EXT%\boost\mpl\aux_
+..\%__SRC%\inc\boost\mpl\aux_\config\* %_DEST%\inc%_EXT%\boost\mpl\aux_\config
+..\%__SRC%\inc\boost\mpl\aux_\preprocessed\* %_DEST%\inc%_EXT%\boost\mpl\aux_\preprocessed
+..\%__SRC%\inc\boost\mpl\aux_\preprocessed\bcc551\* %_DEST%\inc%_EXT%\boost\mpl\aux_\preprocessed\bcc551
+..\%__SRC%\inc\boost\mpl\aux_\preprocessed\bcc\* %_DEST%\inc%_EXT%\boost\mpl\aux_\preprocessed\bcc
+..\%__SRC%\inc\boost\mpl\aux_\preprocessed\gcc\* %_DEST%\inc%_EXT%\boost\mpl\aux_\preprocessed\gcc
+..\%__SRC%\inc\boost\mpl\aux_\preprocessed\msvc60\* %_DEST%\inc%_EXT%\boost\mpl\aux_\preprocessed\msvc60
+..\%__SRC%\inc\boost\mpl\aux_\preprocessed\msvc70\* %_DEST%\inc%_EXT%\boost\mpl\aux_\preprocessed\msvc70
+..\%__SRC%\inc\boost\mpl\aux_\preprocessed\mwcw\* %_DEST%\inc%_EXT%\boost\mpl\aux_\preprocessed\mwcw
+..\%__SRC%\inc\boost\mpl\aux_\preprocessed\no_ctps\* %_DEST%\inc%_EXT%\boost\mpl\aux_\preprocessed\no_ctps
+..\%__SRC%\inc\boost\mpl\aux_\preprocessed\no_ttp\* %_DEST%\inc%_EXT%\boost\mpl\aux_\preprocessed\no_ttp
+..\%__SRC%\inc\boost\mpl\aux_\preprocessed\plain\* %_DEST%\inc%_EXT%\boost\mpl\aux_\preprocessed\plain
+..\%__SRC%\inc\boost\mpl\aux_\preprocessor\* %_DEST%\inc%_EXT%\boost\mpl\aux_\preprocessor
+..\%__SRC%\inc\boost\mpl\aux_\range_c\* %_DEST%\inc%_EXT%\boost\mpl\aux_\range_c
+..\%__SRC%\inc\boost\mpl\limits\* %_DEST%\inc%_EXT%\boost\mpl\limits
+..\%__SRC%\inc\boost\mpl\list\* %_DEST%\inc%_EXT%\boost\mpl\list
+..\%__SRC%\inc\boost\mpl\list\aux_\* %_DEST%\inc%_EXT%\boost\mpl\list\aux_
+..\%__SRC%\inc\boost\mpl\list\aux_\preprocessed\* %_DEST%\inc%_EXT%\boost\mpl\list\aux_\preprocessed
+..\%__SRC%\inc\boost\mpl\list\aux_\preprocessed\plain\* %_DEST%\inc%_EXT%\boost\mpl\list\aux_\preprocessed\plain
+..\%__SRC%\inc\boost\mpl\math\* %_DEST%\inc%_EXT%\boost\mpl\math
+..\%__SRC%\inc\boost\mpl\vector\* %_DEST%\inc%_EXT%\boost\mpl\vector
+..\%__SRC%\inc\boost\mpl\vector\aux_\* %_DEST%\inc%_EXT%\boost\mpl\vector\aux_
+..\%__SRC%\inc\boost\mpl\vector\aux_\preprocessed\* %_DEST%\inc%_EXT%\boost\mpl\vector\aux_\preprocessed
+..\%__SRC%\inc\boost\mpl\vector\aux_\preprocessed\no_ctps\* %_DEST%\inc%_EXT%\boost\mpl\vector\aux_\preprocessed\no_ctps
+..\%__SRC%\inc\boost\mpl\vector\aux_\preprocessed\plain\* %_DEST%\inc%_EXT%\boost\mpl\vector\aux_\preprocessed\plain
+..\%__SRC%\inc\boost\mpl\vector\aux_\preprocessed\typeof_based\* %_DEST%\inc%_EXT%\boost\mpl\vector\aux_\preprocessed\typeof_based
+..\%__SRC%\inc\boost\numeric\*.hpp %_DEST%\inc%_EXT%\boost\numeric\*.hpp
+..\%__SRC%\inc\boost\numeric\conversion\*.hpp %_DEST%\inc%_EXT%\boost\numeric\conversion\*.hpp
+..\%__SRC%\inc\boost\numeric\conversion\detail\*.hpp %_DEST%\inc%_EXT%\boost\numeric\conversion\detail\*.hpp
+..\%__SRC%\inc\boost\numeric\ublas\*.hpp %_DEST%\inc%_EXT%\boost\numeric\ublas\*.hpp
+..\%__SRC%\inc\boost\numeric\ublas\detail\*.hpp %_DEST%\inc%_EXT%\boost\numeric\ublas\detail\*.hpp
+..\%__SRC%\inc\boost\optional\* %_DEST%\inc%_EXT%\boost\optional
+..\%__SRC%\inc\boost\pending\* %_DEST%\inc%_EXT%\boost\pending
+..\%__SRC%\inc\boost\pool\* %_DEST%\inc%_EXT%\boost\pool
+..\%__SRC%\inc\boost\pool\detail\* %_DEST%\inc%_EXT%\boost\pool\detail
+..\%__SRC%\inc\boost\preprocessor\* %_DEST%\inc%_EXT%\boost\preprocessor
+..\%__SRC%\inc\boost\preprocessor\arithmetic\* %_DEST%\inc%_EXT%\boost\preprocessor\arithmetic
+..\%__SRC%\inc\boost\preprocessor\arithmetic\detail\* %_DEST%\inc%_EXT%\boost\preprocessor\arithmetic\detail
+..\%__SRC%\inc\boost\preprocessor\array\* %_DEST%\inc%_EXT%\boost\preprocessor\array
+..\%__SRC%\inc\boost\preprocessor\comparison\* %_DEST%\inc%_EXT%\boost\preprocessor\comparison
+..\%__SRC%\inc\boost\preprocessor\config\* %_DEST%\inc%_EXT%\boost\preprocessor\config
+..\%__SRC%\inc\boost\preprocessor\control\* %_DEST%\inc%_EXT%\boost\preprocessor\control
+..\%__SRC%\inc\boost\preprocessor\control\detail\* %_DEST%\inc%_EXT%\boost\preprocessor\control\detail
+..\%__SRC%\inc\boost\preprocessor\control\detail\edg\* %_DEST%\inc%_EXT%\boost\preprocessor\control\detail\edg
+..\%__SRC%\inc\boost\preprocessor\control\detail\msvc\* %_DEST%\inc%_EXT%\boost\preprocessor\control\detail\msvc
+..\%__SRC%\inc\boost\preprocessor\debug\* %_DEST%\inc%_EXT%\boost\preprocessor\debug
+..\%__SRC%\inc\boost\preprocessor\detail\* %_DEST%\inc%_EXT%\boost\preprocessor\detail
+..\%__SRC%\inc\boost\preprocessor\facilities\* %_DEST%\inc%_EXT%\boost\preprocessor\facilities
+..\%__SRC%\inc\boost\preprocessor\iteration\* %_DEST%\inc%_EXT%\boost\preprocessor\iteration
+..\%__SRC%\inc\boost\preprocessor\iteration\detail\* %_DEST%\inc%_EXT%\boost\preprocessor\iteration\detail
+..\%__SRC%\inc\boost\preprocessor\iteration\detail\bounds\* %_DEST%\inc%_EXT%\boost\preprocessor\iteration\detail\bounds
+..\%__SRC%\inc\boost\preprocessor\iteration\detail\iter\* %_DEST%\inc%_EXT%\boost\preprocessor\iteration\detail\iter
+..\%__SRC%\inc\boost\preprocessor\list\* %_DEST%\inc%_EXT%\boost\preprocessor\list
+..\%__SRC%\inc\boost\preprocessor\list\detail\* %_DEST%\inc%_EXT%\boost\preprocessor\list\detail
+..\%__SRC%\inc\boost\preprocessor\list\detail\edg\* %_DEST%\inc%_EXT%\boost\preprocessor\list\detail\edg
+..\%__SRC%\inc\boost\preprocessor\logical\* %_DEST%\inc%_EXT%\boost\preprocessor\logical
+..\%__SRC%\inc\boost\preprocessor\punctuation\* %_DEST%\inc%_EXT%\boost\preprocessor\punctuation
+..\%__SRC%\inc\boost\preprocessor\repetition\* %_DEST%\inc%_EXT%\boost\preprocessor\repetition
+..\%__SRC%\inc\boost\preprocessor\repetition\detail\* %_DEST%\inc%_EXT%\boost\preprocessor\repetition\detail
+..\%__SRC%\inc\boost\preprocessor\repetition\detail\edg\* %_DEST%\inc%_EXT%\boost\preprocessor\repetition\detail\edg
+..\%__SRC%\inc\boost\preprocessor\repetition\detail\msvc\* %_DEST%\inc%_EXT%\boost\preprocessor\repetition\detail\msvc
+..\%__SRC%\inc\boost\preprocessor\selection\* %_DEST%\inc%_EXT%\boost\preprocessor\selection
+..\%__SRC%\inc\boost\preprocessor\seq\* %_DEST%\inc%_EXT%\boost\preprocessor\seq
+..\%__SRC%\inc\boost\preprocessor\seq\detail\* %_DEST%\inc%_EXT%\boost\preprocessor\seq\detail
+..\%__SRC%\inc\boost\preprocessor\slot\* %_DEST%\inc%_EXT%\boost\preprocessor\slot
+..\%__SRC%\inc\boost\preprocessor\slot\detail\* %_DEST%\inc%_EXT%\boost\preprocessor\slot\detail
+..\%__SRC%\inc\boost\preprocessor\tuple\* %_DEST%\inc%_EXT%\boost\preprocessor\tuple
+..\%__SRC%\inc\boost\ptr_container\* %_DEST%\inc%_EXT%\boost\ptr_container
+..\%__SRC%\inc\boost\ptr_container\detail\* %_DEST%\inc%_EXT%\boost\ptr_container\detail
+..\%__SRC%\inc\boost\range\* %_DEST%\inc%_EXT%\boost\range
+..\%__SRC%\inc\boost\range\detail\* %_DEST%\inc%_EXT%\boost\range\detail
+..\%__SRC%\inc\boost\spirit\* %_DEST%\inc%_EXT%\boost\spirit
+..\%__SRC%\inc\boost\spirit\actor\* %_DEST%\inc%_EXT%\boost\spirit\actor
+..\%__SRC%\inc\boost\spirit\attribute\* %_DEST%\inc%_EXT%\boost\spirit\attribute
+..\%__SRC%\inc\boost\spirit\core\* %_DEST%\inc%_EXT%\boost\spirit\core
+..\%__SRC%\inc\boost\spirit\core\composite\* %_DEST%\inc%_EXT%\boost\spirit\core\composite
+..\%__SRC%\inc\boost\spirit\core\composite\impl\* %_DEST%\inc%_EXT%\boost\spirit\core\composite\impl
+..\%__SRC%\inc\boost\spirit\core\impl\* %_DEST%\inc%_EXT%\boost\spirit\core\impl
+..\%__SRC%\inc\boost\spirit\core\meta\* %_DEST%\inc%_EXT%\boost\spirit\core\meta
+..\%__SRC%\inc\boost\spirit\core\meta\impl\* %_DEST%\inc%_EXT%\boost\spirit\core\meta\impl
+..\%__SRC%\inc\boost\spirit\core\non_terminal\* %_DEST%\inc%_EXT%\boost\spirit\core\non_terminal
+..\%__SRC%\inc\boost\spirit\core\non_terminal\impl\* %_DEST%\inc%_EXT%\boost\spirit\core\non_terminal\impl
+..\%__SRC%\inc\boost\spirit\core\primitives\* %_DEST%\inc%_EXT%\boost\spirit\core\primitives
+..\%__SRC%\inc\boost\spirit\core\primitives\impl\* %_DEST%\inc%_EXT%\boost\spirit\core\primitives\impl
+..\%__SRC%\inc\boost\spirit\core\scanner\* %_DEST%\inc%_EXT%\boost\spirit\core\scanner
+..\%__SRC%\inc\boost\spirit\core\scanner\impl\* %_DEST%\inc%_EXT%\boost\spirit\core\scanner\impl
+..\%__SRC%\inc\boost\spirit\debug\* %_DEST%\inc%_EXT%\boost\spirit\debug
+..\%__SRC%\inc\boost\spirit\debug\impl\* %_DEST%\inc%_EXT%\boost\spirit\debug\impl
+..\%__SRC%\inc\boost\spirit\dynamic\* %_DEST%\inc%_EXT%\boost\spirit\dynamic
+..\%__SRC%\inc\boost\spirit\dynamic\impl\* %_DEST%\inc%_EXT%\boost\spirit\dynamic\impl
+..\%__SRC%\inc\boost\spirit\error_handling\* %_DEST%\inc%_EXT%\boost\spirit\error_handling
+..\%__SRC%\inc\boost\spirit\error_handling\impl\* %_DEST%\inc%_EXT%\boost\spirit\error_handling\impl
+..\%__SRC%\inc\boost\spirit\home\* %_DEST%\inc%_EXT%\boost\spirit\home
+..\%__SRC%\inc\boost\spirit\home\classic\* %_DEST%\inc%_EXT%\boost\spirit\home\classic
+..\%__SRC%\inc\boost\spirit\home\classic\actor\* %_DEST%\inc%_EXT%\boost\spirit\home\classic\actor
+..\%__SRC%\inc\boost\spirit\home\classic\actor\impl\* %_DEST%\inc%_EXT%\boost\spirit\home\classic\actor\impl
+..\%__SRC%\inc\boost\spirit\home\classic\debug\* %_DEST%\inc%_EXT%\boost\spirit\home\classic\debug
+..\%__SRC%\inc\boost\spirit\home\classic\debug\impl\* %_DEST%\inc%_EXT%\boost\spirit\home\classic\debug\impl
+..\%__SRC%\inc\boost\spirit\home\classic\meta\* %_DEST%\inc%_EXT%\boost\spirit\home\classic\meta
+..\%__SRC%\inc\boost\spirit\home\classic\meta\impl\* %_DEST%\inc%_EXT%\boost\spirit\home\classic\meta\impl
+..\%__SRC%\inc\boost\spirit\home\classic\core\* %_DEST%\inc%_EXT%\boost\spirit\home\classic\core
+..\%__SRC%\inc\boost\spirit\home\classic\core\impl\* %_DEST%\inc%_EXT%\boost\spirit\home\classic\core\impl
+..\%__SRC%\inc\boost\spirit\home\classic\core\scanner\* %_DEST%\inc%_EXT%\boost\spirit\home\classic\core\scanner
+..\%__SRC%\inc\boost\spirit\home\classic\core\scanner\impl\* %_DEST%\inc%_EXT%\boost\spirit\home\classic\core\scanner\impl
+..\%__SRC%\inc\boost\spirit\home\classic\core\non_terminal\* %_DEST%\inc%_EXT%\boost\spirit\home\classic\core\non_terminal
+..\%__SRC%\inc\boost\spirit\home\classic\core\non_terminal\impl\* %_DEST%\inc%_EXT%\boost\spirit\home\classic\core\non_terminal\impl
+..\%__SRC%\inc\boost\spirit\home\classic\core\primitives\* %_DEST%\inc%_EXT%\boost\spirit\home\classic\core\primitives
+..\%__SRC%\inc\boost\spirit\home\classic\core\primitives\impl\* %_DEST%\inc%_EXT%\boost\spirit\home\classic\core\primitives\impl
+..\%__SRC%\inc\boost\spirit\home\classic\core\composite\* %_DEST%\inc%_EXT%\boost\spirit\home\classic\core\composite
+..\%__SRC%\inc\boost\spirit\home\classic\core\composite\impl\* %_DEST%\inc%_EXT%\boost\spirit\home\classic\core\composite\impl
+..\%__SRC%\inc\boost\spirit\home\classic\error_handling\* %_DEST%\inc%_EXT%\boost\spirit\home\classic\error_handling
+..\%__SRC%\inc\boost\spirit\home\classic\error_handling\impl\* %_DEST%\inc%_EXT%\boost\spirit\home\classic\error_handling\impl
+..\%__SRC%\inc\boost\spirit\home\classic\iterator\* %_DEST%\inc%_EXT%\boost\spirit\home\classic\iterator
+..\%__SRC%\inc\boost\spirit\home\classic\iterator\impl\* %_DEST%\inc%_EXT%\boost\spirit\home\classic\iterator\impl
+..\%__SRC%\inc\boost\spirit\home\classic\utility\* %_DEST%\inc%_EXT%\boost\spirit\home\classic\utility
+..\%__SRC%\inc\boost\spirit\home\classic\utility\impl\* %_DEST%\inc%_EXT%\boost\spirit\home\classic\utility\impl
+..\%__SRC%\inc\boost\spirit\home\classic\utility\impl\chset\* %_DEST%\inc%_EXT%\boost\spirit\home\classic\utility\impl\chset
+..\%__SRC%\inc\boost\spirit\include\* %_DEST%\inc%_EXT%\boost\spirit\include
+..\%__SRC%\inc\boost\spirit\iterator\* %_DEST%\inc%_EXT%\boost\spirit\iterator
+..\%__SRC%\inc\boost\spirit\iterator\impl\* %_DEST%\inc%_EXT%\boost\spirit\iterator\impl
+..\%__SRC%\inc\boost\spirit\meta\* %_DEST%\inc%_EXT%\boost\spirit\meta
+..\%__SRC%\inc\boost\spirit\meta\impl\* %_DEST%\inc%_EXT%\boost\spirit\meta\impl
+..\%__SRC%\inc\boost\spirit\phoenix\* %_DEST%\inc%_EXT%\boost\spirit\phoenix
+..\%__SRC%\inc\boost\spirit\symbols\* %_DEST%\inc%_EXT%\boost\spirit\symbols
+..\%__SRC%\inc\boost\spirit\symbols\impl\* %_DEST%\inc%_EXT%\boost\spirit\symbols\impl
+..\%__SRC%\inc\boost\spirit\tree\* %_DEST%\inc%_EXT%\boost\spirit\tree
+..\%__SRC%\inc\boost\spirit\tree\impl\* %_DEST%\inc%_EXT%\boost\spirit\tree\impl
+..\%__SRC%\inc\boost\spirit\utility\* %_DEST%\inc%_EXT%\boost\spirit\utility
+..\%__SRC%\inc\boost\spirit\utility\impl\* %_DEST%\inc%_EXT%\boost\spirit\utility\impl
+..\%__SRC%\inc\boost\spirit\utility\impl\chset\* %_DEST%\inc%_EXT%\boost\spirit\utility\impl\chset
+..\%__SRC%\inc\boost\smart_ptr\* %_DEST%\inc%_EXT%\boost\smart_ptr
+..\%__SRC%\inc\boost\smart_ptr\detail\* %_DEST%\inc%_EXT%\boost\smart_ptr\detail
+..\%__SRC%\inc\boost\tuple\* %_DEST%\inc%_EXT%\boost\tuple
+..\%__SRC%\inc\boost\tuple\detail\* %_DEST%\inc%_EXT%\boost\tuple\detail
+..\%__SRC%\inc\boost\type_traits\* %_DEST%\inc%_EXT%\boost\type_traits
+..\%__SRC%\inc\boost\type_traits\detail\* %_DEST%\inc%_EXT%\boost\type_traits\detail
+..\%__SRC%\inc\boost\utility\* %_DEST%\inc%_EXT%\boost\utility
+..\%__SRC%\inc\boost\utility\detail\* %_DEST%\inc%_EXT%\boost\utility\detail
+..\%__SRC%\inc\boost\variant\* %_DEST%\inc%_EXT%\boost\variant
+..\%__SRC%\inc\boost\variant\detail\* %_DEST%\inc%_EXT%\boost\variant\detail
diff --git a/bootstrap.1 b/bootstrap.1
new file mode 100644
index 000000000000..156f5625557a
--- /dev/null
+++ b/bootstrap.1
@@ -0,0 +1,84 @@
+
+# executables are *.exe for WNT. This variable is necessary since Cygwin 1.5.x
+# Use spawn instead of fork when building dmake on cygwin.
+if test "$GUI" = "WNT"; then
+ EXEEXT=".exe"
+ DMAKE_CONF="--enable-spawn"
+else
+ EXEEXT=""
+ DMAKE_CONF=""
+fi
+export EXEEXT
+
+# ------------------------------------------------------------------------------
+# Build dmake
+
+if test "$BUILD_DMAKE" != "NO"; then
+
+ if test ! -x "$SOLARENV/$OUTPATH/bin/dmake$EXEEXT"; then
+
+ cd "$SRC_ROOT/dmake" || exit
+
+ # Special case! The w32/tcsh build needs CC pointing to the MSVC++ compiler
+ # but we need a cygwin/gcc build dmake to understand the posix paths
+ if test "$GUI" = "WNT"; then
+ CC=""
+ CXX=""
+ export CC
+ export CXX
+ fi
+
+ # For normal unixy systems
+ if test -f "Makefile" ; then
+ $GNUMAKE distclean || exit
+ fi
+
+ ./configure $DMAKE_CONF || exit
+
+ ## invoke the gnu make command set by configure.
+ $GNUMAKE || exit
+
+ echo ""
+ echo "dmake has been successfully built"
+
+ cd ..
+
+ else
+
+ echo ""
+ echo "dmake present in $SOLARENV/$OUTPATH/bin/dmake$EXEEXT"
+
+ fi
+
+fi
+
+mkdir -p "$SOLARENV/$OUTPATH/bin"
+if test "$BUILD_DMAKE" != "NO"; then
+ cp -f "$SRC_ROOT/dmake/dmake$EXEEXT" "$SOLARENV/$OUTPATH/bin" || exit
+ echo ""
+ echo "dmake copied to $SOLARENV/$OUTPATH/bin/dmake$EXEEXT"
+fi
+
+if test "$GUI" = "WNT" -a ! -x "$SOLARENV/$OUTPATH/bin/guw$EXEEXT"; then
+ echo ""
+ echo "Calling $GNUMAKE in guw"
+ cd "$SRC_ROOT/guw" || exit
+ $GNUMAKE || exit
+ echo ""
+ echo "guw has been successfully made"
+ cp -f "$SRC_ROOT/guw/guw$EXEEXT" "$SOLARENV/$OUTPATH/bin" || exit
+ echo ""
+ echo "guw copied to $SOLARENV/$OUTPATH/bin/guw$EXEEXT"
+fi
+
+#make sure build.pl is executable
+
+chmod +x "$SRC_ROOT/solenv/bin/build.pl"
+chmod +x "$SRC_ROOT/solenv/bin/build_client.pl"
+chmod +x "$SRC_ROOT/solenv/bin/zipdep.pl"
+chmod +x "$SRC_ROOT/solenv/bin/gccinstlib.pl"
+
+# fetch or update external tarballs
+if [ "$DO_FETCH_TARBALLS" = "yes" ]; then
+ $SRC_ROOT/fetch_tarballs.sh $SRC_ROOT/ooo.lst
+fi
diff --git a/bridges/inc/bridges/cpp_uno/bridge.hxx b/bridges/inc/bridges/cpp_uno/bridge.hxx
new file mode 100644
index 000000000000..9175adfb7858
--- /dev/null
+++ b/bridges/inc/bridges/cpp_uno/bridge.hxx
@@ -0,0 +1,503 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef _BRIDGES_CPP_UNO_BRIDGE_HXX_
+#define _BRIDGES_CPP_UNO_BRIDGE_HXX_
+
+#ifndef _BRIDGES_CPP_UNO_BRIDGE_H_
+#include <bridges/cpp_uno/bridge.h>
+#endif
+#include <osl/mutex.hxx>
+#include <rtl/process.h>
+#include <rtl/ustrbuf.hxx>
+#include <com/sun/star/uno/genfunc.hxx>
+#include <com/sun/star/uno/XInterface.hpp>
+
+
+namespace CPPU_CURRENT_NAMESPACE
+{
+
+//--------------------------------------------------------------------------------------------------
+inline void SAL_CALL cppu_cppInterfaceProxy_free( uno_ExtEnvironment * pEnv, void * pProxy ) SAL_THROW( () )
+{
+ cppu_cppInterfaceProxy * pThis =
+ static_cast< cppu_cppInterfaceProxy * >(
+ reinterpret_cast< ::com::sun::star::uno::XInterface * >( pProxy ) );
+ OSL_ASSERT( pEnv == pThis->pBridge->pCppEnv );
+
+ (*pThis->pBridge->pUnoEnv->revokeInterface)( pThis->pBridge->pUnoEnv, pThis->pUnoI );
+ (*pThis->pUnoI->release)( pThis->pUnoI );
+ ::typelib_typedescription_release( (typelib_TypeDescription *)pThis->pTypeDescr );
+ pThis->pBridge->release();
+
+#if OSL_DEBUG_LEVEL > 1
+ *(int *)pProxy = 0xdeadbabe;
+#endif
+ delete pThis;
+}
+//--------------------------------------------------------------------------------------------------
+inline void SAL_CALL cppu_Mapping_uno2cpp(
+ uno_Mapping * pMapping, void ** ppCppI,
+ void * pUnoI, typelib_InterfaceTypeDescription * pTypeDescr ) SAL_THROW( () )
+{
+ OSL_ASSERT( ppCppI && pTypeDescr );
+ if (*ppCppI)
+ {
+ reinterpret_cast< ::com::sun::star::uno::XInterface * >( *ppCppI )->release();
+ *ppCppI = 0;
+ }
+ if (pUnoI)
+ {
+ cppu_Bridge * pBridge = static_cast< cppu_Mapping * >( pMapping )->pBridge;
+
+ // get object id of uno interface to be wrapped
+ rtl_uString * pOId = 0;
+ (*pBridge->pUnoEnv->getObjectIdentifier)( pBridge->pUnoEnv, &pOId, pUnoI );
+ OSL_ASSERT( pOId );
+
+ // try to get any known interface from target environment
+ (*pBridge->pCppEnv->getRegisteredInterface)(
+ pBridge->pCppEnv, ppCppI, pOId, pTypeDescr );
+
+ if (! *ppCppI) // no existing interface, register new proxy interface
+ {
+ // try to publish a new proxy (ref count initially 1)
+ cppu_cppInterfaceProxy * pProxy = new cppu_cppInterfaceProxy(
+ pBridge, reinterpret_cast< uno_Interface * >( pUnoI ), pTypeDescr, pOId );
+ ::com::sun::star::uno::XInterface * pSurrogate = pProxy;
+ cppu_cppInterfaceProxy_patchVtable( pSurrogate, pProxy->pTypeDescr );
+
+ // proxy may be exchanged during registration
+ (*pBridge->pCppEnv->registerProxyInterface)(
+ pBridge->pCppEnv, reinterpret_cast< void ** >( &pSurrogate ),
+ (uno_freeProxyFunc)cppu_cppInterfaceProxy_free, pOId, pTypeDescr );
+
+ *ppCppI = pSurrogate;
+ }
+ ::rtl_uString_release( pOId );
+ }
+}
+//__________________________________________________________________________________________________
+inline void cppu_cppInterfaceProxy::acquireProxy() SAL_THROW( () )
+{
+ if (1 == osl_incrementInterlockedCount( &nRef ))
+ {
+ // rebirth of proxy zombie
+ // register at cpp env
+ void * pThis = static_cast< ::com::sun::star::uno::XInterface * >( this );
+ (*pBridge->pCppEnv->registerProxyInterface)(
+ pBridge->pCppEnv, &pThis, (uno_freeProxyFunc)cppu_cppInterfaceProxy_free,
+ oid.pData, pTypeDescr );
+ OSL_ASSERT( pThis == static_cast< ::com::sun::star::uno::XInterface * >( this ) );
+ }
+}
+//__________________________________________________________________________________________________
+inline void cppu_cppInterfaceProxy::releaseProxy() SAL_THROW( () )
+{
+ if (! osl_decrementInterlockedCount( &nRef )) // last release
+ {
+ // revoke from cpp env
+ (*pBridge->pCppEnv->revokeInterface)(
+ pBridge->pCppEnv, static_cast< ::com::sun::star::uno::XInterface * >( this ) );
+ }
+}
+//__________________________________________________________________________________________________
+inline cppu_cppInterfaceProxy::cppu_cppInterfaceProxy(
+ cppu_Bridge * pBridge_, uno_Interface * pUnoI_,
+ typelib_InterfaceTypeDescription * pTypeDescr_, const ::rtl::OUString & rOId_ ) SAL_THROW( () )
+ : nRef( 1 )
+ , pBridge( pBridge_ )
+ , pUnoI( pUnoI_ )
+ , pTypeDescr( pTypeDescr_ )
+ , oid( rOId_ )
+{
+ pBridge->acquire();
+ ::typelib_typedescription_acquire( (typelib_TypeDescription *)pTypeDescr );
+ if (! ((typelib_TypeDescription *)pTypeDescr)->bComplete)
+ ::typelib_typedescription_complete( (typelib_TypeDescription **)&pTypeDescr );
+ OSL_ENSURE( ((typelib_TypeDescription *)pTypeDescr)->bComplete, "### type is incomplete!" );
+ (*pUnoI->acquire)( pUnoI );
+ (*pBridge->pUnoEnv->registerInterface)(
+ pBridge->pUnoEnv, reinterpret_cast< void ** >( &pUnoI ), oid.pData, pTypeDescr );
+}
+
+
+//##################################################################################################
+//##################################################################################################
+//##################################################################################################
+
+
+//--------------------------------------------------------------------------------------------------
+inline void SAL_CALL cppu_unoInterfaceProxy_free( uno_ExtEnvironment * pEnv, void * pProxy ) SAL_THROW( () )
+{
+ cppu_unoInterfaceProxy * pThis =
+ static_cast< cppu_unoInterfaceProxy * >(
+ reinterpret_cast< uno_Interface * >( pProxy ) );
+ OSL_ASSERT( pEnv == pThis->pBridge->pUnoEnv );
+
+ (*pThis->pBridge->pCppEnv->revokeInterface)( pThis->pBridge->pCppEnv, pThis->pCppI );
+ pThis->pCppI->release();
+ ::typelib_typedescription_release( (typelib_TypeDescription *)pThis->pTypeDescr );
+ pThis->pBridge->release();
+
+#if OSL_DEBUG_LEVEL > 1
+ *(int *)pProxy = 0xdeadbabe;
+#endif
+ delete pThis;
+}
+//--------------------------------------------------------------------------------------------------
+inline void SAL_CALL cppu_unoInterfaceProxy_acquire( uno_Interface * pUnoI ) SAL_THROW( () )
+{
+ if (1 == osl_incrementInterlockedCount( & static_cast< cppu_unoInterfaceProxy * >( pUnoI )->nRef ))
+ {
+ // rebirth of proxy zombie
+ // register at uno env
+#if OSL_DEBUG_LEVEL > 1
+ void * pThis = pUnoI;
+#endif
+ (*static_cast< cppu_unoInterfaceProxy * >( pUnoI )->pBridge->pUnoEnv->registerProxyInterface)(
+ static_cast< cppu_unoInterfaceProxy * >( pUnoI )->pBridge->pUnoEnv,
+ reinterpret_cast< void ** >( &pUnoI ),
+ (uno_freeProxyFunc)cppu_unoInterfaceProxy_free,
+ static_cast< cppu_unoInterfaceProxy * >( pUnoI )->oid.pData,
+ static_cast< cppu_unoInterfaceProxy * >( pUnoI )->pTypeDescr );
+#if OSL_DEBUG_LEVEL > 1
+ OSL_ASSERT( pThis == pUnoI );
+#endif
+ }
+}
+//--------------------------------------------------------------------------------------------------
+inline void SAL_CALL cppu_unoInterfaceProxy_release( uno_Interface * pUnoI ) SAL_THROW( () )
+{
+ if (! osl_decrementInterlockedCount( & static_cast< cppu_unoInterfaceProxy * >( pUnoI )->nRef ))
+ {
+ // revoke from uno env on last release
+ (*static_cast< cppu_unoInterfaceProxy * >( pUnoI )->pBridge->pUnoEnv->revokeInterface)(
+ static_cast< cppu_unoInterfaceProxy * >( pUnoI )->pBridge->pUnoEnv, pUnoI );
+ }
+}
+//--------------------------------------------------------------------------------------------------
+inline void SAL_CALL cppu_Mapping_cpp2uno(
+ uno_Mapping * pMapping, void ** ppUnoI,
+ void * pCppI, typelib_InterfaceTypeDescription * pTypeDescr ) SAL_THROW( () )
+{
+ OSL_ENSURE( ppUnoI && pTypeDescr, "### null ptr!" );
+ if (*ppUnoI)
+ {
+ (*reinterpret_cast< uno_Interface * >( *ppUnoI )->release)(
+ reinterpret_cast< uno_Interface * >( *ppUnoI ) );
+ *ppUnoI = 0;
+ }
+ if (pCppI)
+ {
+ cppu_Bridge * pBridge = static_cast< cppu_Mapping * >( pMapping )->pBridge;
+
+ // get object id of interface to be wrapped
+ rtl_uString * pOId = 0;
+ (*pBridge->pCppEnv->getObjectIdentifier)( pBridge->pCppEnv, &pOId, pCppI );
+ OSL_ASSERT( pOId );
+
+ // try to get any known interface from target environment
+ (*pBridge->pUnoEnv->getRegisteredInterface)(
+ pBridge->pUnoEnv, ppUnoI, pOId, pTypeDescr );
+
+ if (! *ppUnoI) // no existing interface, register new proxy interface
+ {
+ // try to publish a new proxy (refcount initially 1)
+ uno_Interface * pSurrogate = new cppu_unoInterfaceProxy(
+ pBridge, reinterpret_cast< ::com::sun::star::uno::XInterface * >( pCppI ),
+ pTypeDescr, pOId );
+
+ // proxy may be exchanged during registration
+ (*pBridge->pUnoEnv->registerProxyInterface)(
+ pBridge->pUnoEnv, reinterpret_cast< void ** >( &pSurrogate ),
+ (uno_freeProxyFunc)cppu_unoInterfaceProxy_free, pOId, pTypeDescr );
+
+ *ppUnoI = pSurrogate;
+ }
+ ::rtl_uString_release( pOId );
+ }
+}
+//__________________________________________________________________________________________________
+inline cppu_unoInterfaceProxy::cppu_unoInterfaceProxy(
+ cppu_Bridge * pBridge_, ::com::sun::star::uno::XInterface * pCppI_,
+ typelib_InterfaceTypeDescription * pTypeDescr_, const ::rtl::OUString & rOId_ ) SAL_THROW( () )
+ : nRef( 1 )
+ , pBridge( pBridge_ )
+ , pCppI( pCppI_ )
+ , pTypeDescr( pTypeDescr_ )
+ , oid( rOId_ )
+{
+ pBridge->acquire();
+ ::typelib_typedescription_acquire( (typelib_TypeDescription *)pTypeDescr );
+ if (! ((typelib_TypeDescription *)pTypeDescr)->bComplete)
+ ::typelib_typedescription_complete( (typelib_TypeDescription **)&pTypeDescr );
+ OSL_ENSURE( ((typelib_TypeDescription *)pTypeDescr)->bComplete, "### type is incomplete!" );
+ pCppI->acquire();
+ (*pBridge->pCppEnv->registerInterface)(
+ pBridge->pCppEnv, reinterpret_cast< void ** >( &pCppI ), oid.pData, pTypeDescr );
+
+ // uno_Interface
+ uno_Interface::acquire = cppu_unoInterfaceProxy_acquire;
+ uno_Interface::release = cppu_unoInterfaceProxy_release;
+ uno_Interface::pDispatcher = (uno_DispatchMethod)cppu_unoInterfaceProxy_dispatch;
+}
+
+
+//##################################################################################################
+//##################################################################################################
+//##################################################################################################
+
+
+//--------------------------------------------------------------------------------------------------
+inline void SAL_CALL cppu_Mapping_acquire( uno_Mapping * pMapping ) SAL_THROW( () )
+{
+ static_cast< cppu_Mapping * >( pMapping )->pBridge->acquire();
+}
+//--------------------------------------------------------------------------------------------------
+inline void SAL_CALL cppu_Mapping_release( uno_Mapping * pMapping ) SAL_THROW( () )
+{
+ static_cast< cppu_Mapping * >( pMapping )->pBridge->release();
+}
+//__________________________________________________________________________________________________
+inline cppu_Bridge::cppu_Bridge(
+ uno_ExtEnvironment * pCppEnv_, uno_ExtEnvironment * pUnoEnv_,
+ sal_Bool bExportCpp2Uno_ ) SAL_THROW( () )
+ : nRef( 1 )
+ , pCppEnv( pCppEnv_ )
+ , pUnoEnv( pUnoEnv_ )
+ , bExportCpp2Uno( bExportCpp2Uno_ )
+{
+ g_moduleCount.modCnt.acquire( &g_moduleCount.modCnt );
+
+ aCpp2Uno.pBridge = this;
+ aCpp2Uno.acquire = cppu_Mapping_acquire;
+ aCpp2Uno.release = cppu_Mapping_release;
+ aCpp2Uno.mapInterface = cppu_Mapping_cpp2uno;
+
+ aUno2Cpp.pBridge = this;
+ aUno2Cpp.acquire = cppu_Mapping_acquire;
+ aUno2Cpp.release = cppu_Mapping_release;
+ aUno2Cpp.mapInterface = cppu_Mapping_uno2cpp;
+
+ (*((uno_Environment *)pCppEnv)->acquire)( (uno_Environment *)pCppEnv );
+ (*((uno_Environment *)pUnoEnv)->acquire)( (uno_Environment *)pUnoEnv );
+}
+//__________________________________________________________________________________________________
+inline cppu_Bridge::~cppu_Bridge() SAL_THROW( () )
+{
+ (*((uno_Environment *)pUnoEnv)->release)( (uno_Environment *)pUnoEnv );
+ (*((uno_Environment *)pCppEnv)->release)( (uno_Environment *)pCppEnv );
+ g_moduleCount.modCnt.release( &g_moduleCount.modCnt );
+}
+//__________________________________________________________________________________________________
+inline void SAL_CALL cppu_Bridge_free( uno_Mapping * pMapping ) SAL_THROW( () )
+{
+ delete static_cast< cppu_Mapping * >( pMapping )->pBridge;
+}
+//__________________________________________________________________________________________________
+inline void cppu_Bridge::acquire() SAL_THROW( () )
+{
+ if (1 == osl_incrementInterlockedCount( &nRef ))
+ {
+ if (bExportCpp2Uno)
+ {
+ uno_Mapping * pMapping = &aCpp2Uno;
+ ::uno_registerMapping(
+ &pMapping, cppu_Bridge_free,
+ (uno_Environment *)pCppEnv, (uno_Environment *)pUnoEnv, 0 );
+ }
+ else
+ {
+ uno_Mapping * pMapping = &aUno2Cpp;
+ ::uno_registerMapping(
+ &pMapping, cppu_Bridge_free,
+ (uno_Environment *)pUnoEnv, (uno_Environment *)pCppEnv, 0 );
+ }
+ }
+}
+//__________________________________________________________________________________________________
+inline void cppu_Bridge::release() SAL_THROW( () )
+{
+ if (! osl_decrementInterlockedCount( &nRef ))
+ {
+ ::uno_revokeMapping( bExportCpp2Uno ? &aCpp2Uno : &aUno2Cpp );
+ }
+}
+
+//##################################################################################################
+inline void SAL_CALL cppu_ext_getMapping(
+ uno_Mapping ** ppMapping, uno_Environment * pFrom, uno_Environment * pTo ) SAL_THROW( () )
+{
+ OSL_ASSERT( ppMapping && pFrom && pTo );
+ if (ppMapping && pFrom && pTo && pFrom->pExtEnv && pTo->pExtEnv)
+ {
+ uno_Mapping * pMapping = 0;
+
+ if (0 == rtl_ustr_ascii_compare( pFrom->pTypeName->buffer, CPPU_CURRENT_LANGUAGE_BINDING_NAME ) &&
+ 0 == rtl_ustr_ascii_compare( pTo->pTypeName->buffer, UNO_LB_UNO ))
+ {
+ // ref count initially 1
+ pMapping = &(new cppu_Bridge( pFrom->pExtEnv, pTo->pExtEnv, sal_True ))->aCpp2Uno;
+ ::uno_registerMapping(
+ &pMapping, cppu_Bridge_free,
+ (uno_Environment *)pFrom->pExtEnv,
+ (uno_Environment *)pTo->pExtEnv, 0 );
+ }
+ else if (0 == rtl_ustr_ascii_compare( pTo->pTypeName->buffer, CPPU_CURRENT_LANGUAGE_BINDING_NAME ) &&
+ 0 == rtl_ustr_ascii_compare( pFrom->pTypeName->buffer, UNO_LB_UNO ))
+ {
+ // ref count initially 1
+ pMapping = &(new cppu_Bridge( pTo->pExtEnv, pFrom->pExtEnv, sal_False ))->aUno2Cpp;
+ ::uno_registerMapping(
+ &pMapping, cppu_Bridge_free,
+ (uno_Environment *)pFrom->pExtEnv,
+ (uno_Environment *)pTo->pExtEnv, 0 );
+ }
+
+ if (*ppMapping)
+ {
+ (*(*ppMapping)->release)( *ppMapping );
+ }
+ if (pMapping)
+ *ppMapping = pMapping;
+ }
+}
+
+
+//##################################################################################################
+//##################################################################################################
+//##################################################################################################
+
+#if (defined(__SUNPRO_CC) && (__SUNPRO_CC == 0x500))
+static ::rtl::OUString * s_pStaticOidPart = 0;
+#endif
+
+// environment init stuff
+//--------------------------------------------------------------------------------------------------
+inline const ::rtl::OUString & SAL_CALL cppu_cppenv_getStaticOIdPart() SAL_THROW( () )
+{
+#if ! (defined(__SUNPRO_CC) && (__SUNPRO_CC == 0x500))
+ static ::rtl::OUString * s_pStaticOidPart = 0;
+#endif
+ if (! s_pStaticOidPart)
+ {
+ ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() );
+ if (! s_pStaticOidPart)
+ {
+ ::rtl::OUStringBuffer aRet( 64 );
+ aRet.appendAscii( RTL_CONSTASCII_STRINGPARAM("];") );
+ // good guid
+ sal_uInt8 ar[16];
+ ::rtl_getGlobalProcessId( ar );
+ for ( sal_Int32 i = 0; i < 16; ++i )
+ {
+ aRet.append( (sal_Int32)ar[i], 16 );
+ }
+#if (defined(__SUNPRO_CC) && (__SUNPRO_CC == 0x500))
+ s_pStaticOidPart = new ::rtl::OUString( aRet.makeStringAndClear() );
+#else
+ static ::rtl::OUString s_aStaticOidPart( aRet.makeStringAndClear() );
+ s_pStaticOidPart = &s_aStaticOidPart;
+#endif
+ }
+ }
+ return *s_pStaticOidPart;
+}
+// functions set at environment init
+//--------------------------------------------------------------------------------------------------
+inline void SAL_CALL cppu_cppenv_computeObjectIdentifier(
+ uno_ExtEnvironment * pEnv, rtl_uString ** ppOId, void * pInterface ) SAL_THROW( () )
+{
+ OSL_ENSURE( pEnv && ppOId && pInterface, "### null ptr!" );
+ if (pEnv && ppOId && pInterface)
+ {
+ if (*ppOId)
+ {
+ rtl_uString_release( *ppOId );
+ *ppOId = 0;
+ }
+
+ try
+ {
+ ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > xHome(
+ reinterpret_cast< ::com::sun::star::uno::XInterface * >( pInterface ),
+ ::com::sun::star::uno::UNO_QUERY );
+ OSL_ENSURE( xHome.is(), "### query to XInterface failed!" );
+ if (xHome.is())
+ {
+ // interface
+ ::rtl::OUStringBuffer oid( 64 );
+ oid.append( (sal_Int64)xHome.get(), 16 );
+ oid.append( (sal_Unicode)';' );
+ // ;environment[context]
+ oid.append(
+ *reinterpret_cast< ::rtl::OUString const * >(
+ &((uno_Environment *) pEnv)->pTypeName ) );
+ oid.append( (sal_Unicode)'[' );
+ oid.append( (sal_Int64)((uno_Environment *)pEnv)->pContext, 16 );
+ // ];good guid
+ oid.append( cppu_cppenv_getStaticOIdPart() );
+ ::rtl::OUString aRet( oid.makeStringAndClear() );
+ ::rtl_uString_acquire( *ppOId = aRet.pData );
+ }
+ }
+ catch (::com::sun::star::uno::RuntimeException &)
+ {
+ OSL_ENSURE( 0, "### RuntimeException occured udring queryInterface()!" );
+ }
+ }
+}
+//--------------------------------------------------------------------------------------------------
+inline void SAL_CALL cppu_cppenv_acquireInterface( uno_ExtEnvironment *, void * pCppI ) SAL_THROW( () )
+{
+ reinterpret_cast< ::com::sun::star::uno::XInterface * >( pCppI )->acquire();
+}
+//--------------------------------------------------------------------------------------------------
+inline void SAL_CALL cppu_cppenv_releaseInterface( uno_ExtEnvironment *, void * pCppI ) SAL_THROW( () )
+{
+ reinterpret_cast< ::com::sun::star::uno::XInterface * >( pCppI )->release();
+}
+//--------------------------------------------------------------------------------------------------
+inline void SAL_CALL cppu_cppenv_environmentDisposing( uno_Environment * ) SAL_THROW( () )
+{
+ g_moduleCount.modCnt.release( &g_moduleCount.modCnt );
+}
+//--------------------------------------------------------------------------------------------------
+inline void SAL_CALL cppu_cppenv_initEnvironment( uno_Environment * pCppEnv ) SAL_THROW( () )
+{
+ OSL_ENSURE( pCppEnv->pExtEnv, "### expected extended environment!" );
+ OSL_ENSURE( ::rtl_ustr_ascii_compare( pCppEnv->pTypeName->buffer, CPPU_CURRENT_LANGUAGE_BINDING_NAME ) == 0, "### wrong environment type!" );
+ g_moduleCount.modCnt.acquire( &g_moduleCount.modCnt );
+ ((uno_ExtEnvironment *)pCppEnv)->computeObjectIdentifier = cppu_cppenv_computeObjectIdentifier;
+ ((uno_ExtEnvironment *)pCppEnv)->acquireInterface = cppu_cppenv_acquireInterface;
+ ((uno_ExtEnvironment *)pCppEnv)->releaseInterface = cppu_cppenv_releaseInterface;
+ pCppEnv->environmentDisposing = cppu_cppenv_environmentDisposing;
+}
+
+}
+
+#endif
diff --git a/bridges/inc/bridges/cpp_uno/shared/arraypointer.hxx b/bridges/inc/bridges/cpp_uno/shared/arraypointer.hxx
new file mode 100644
index 000000000000..07d6c179a9ab
--- /dev/null
+++ b/bridges/inc/bridges/cpp_uno/shared/arraypointer.hxx
@@ -0,0 +1,55 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_BRIDGES_CPP_UNO_SHARED_ARRAYPOINTER_HXX
+#define INCLUDED_BRIDGES_CPP_UNO_SHARED_ARRAYPOINTER_HXX
+
+#include "sal/config.h"
+
+namespace bridges { namespace cpp_uno { namespace shared {
+
+/**
+ * A simple smart pointer that holds an array until it is being released.
+ */
+template< typename T > class ArrayPointer {
+public:
+ ArrayPointer(T * p): p_(p) {}
+
+ ~ArrayPointer() { delete[] p_; }
+
+ T * release() { T * t = p_; p_ = 0; return t; }
+
+private:
+ ArrayPointer(ArrayPointer &); // not defined
+ void operator =(ArrayPointer &); // not defined
+
+ T * p_;
+};
+
+} } }
+
+#endif
diff --git a/bridges/inc/bridges/cpp_uno/shared/bridge.hxx b/bridges/inc/bridges/cpp_uno/shared/bridge.hxx
new file mode 100644
index 000000000000..38d722c6dc3c
--- /dev/null
+++ b/bridges/inc/bridges/cpp_uno/shared/bridge.hxx
@@ -0,0 +1,128 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_BRIDGES_CPP_UNO_SHARED_BRIDGE_HXX
+#define INCLUDED_BRIDGES_CPP_UNO_SHARED_BRIDGE_HXX
+
+#include "osl/interlck.h"
+#include "sal/types.h"
+#include "typelib/typedescription.h"
+#include "uno/environment.h"
+#include "uno/mapping.h"
+
+namespace bridges { namespace cpp_uno { namespace shared {
+
+// private:
+extern "C" typedef void SAL_CALL FreeMapping(uno_Mapping *);
+FreeMapping freeMapping;
+
+// private:
+extern "C"
+typedef void SAL_CALL AcquireMapping(uno_Mapping *);
+AcquireMapping acquireMapping;
+
+// private:
+extern "C"
+typedef void SAL_CALL ReleaseMapping(uno_Mapping *);
+ReleaseMapping releaseMapping;
+
+// private:
+extern "C" typedef void SAL_CALL Cpp2unoMapping(
+ uno_Mapping *, void **, void *, typelib_InterfaceTypeDescription *);
+Cpp2unoMapping cpp2unoMapping;
+
+// private:
+extern "C" typedef void SAL_CALL Uno2cppMapping(
+ uno_Mapping *, void **, void *, typelib_InterfaceTypeDescription *);
+Uno2cppMapping uno2cppMapping;
+
+/**
+ * Holding environments and mappings.
+ */
+class Bridge {
+public:
+ // Interface for generic/component.cxx:
+
+ static uno_Mapping * createMapping(
+ uno_ExtEnvironment * pCppEnv, uno_ExtEnvironment * pUnoEnv,
+ bool bExportCpp2Uno) SAL_THROW(());
+
+ // Interface for Cpp/UnoInterfaceProxy:
+
+ void acquire() SAL_THROW(());
+ void release() SAL_THROW(());
+
+ // Interface for individual CPP--UNO bridges:
+
+ uno_ExtEnvironment * getCppEnv() { return pCppEnv; }
+ uno_ExtEnvironment * getUnoEnv() { return pUnoEnv; }
+
+ uno_Mapping * getCpp2Uno() { return &aCpp2Uno; }
+ uno_Mapping * getUno2Cpp() { return &aUno2Cpp; }
+
+private:
+ Bridge(Bridge &); // not implemented
+ void operator =(Bridge); // not implemented
+
+ Bridge(
+ uno_ExtEnvironment * pCppEnv_, uno_ExtEnvironment * pUnoEnv_,
+ bool bExportCpp2Uno_) SAL_THROW(());
+
+ ~Bridge() SAL_THROW(());
+
+ struct Mapping: public uno_Mapping {
+ Bridge * pBridge;
+ };
+
+ oslInterlockedCount nRef;
+
+ uno_ExtEnvironment * pCppEnv;
+ uno_ExtEnvironment * pUnoEnv;
+
+ Mapping aCpp2Uno;
+ Mapping aUno2Cpp;
+
+ bool bExportCpp2Uno;
+
+ friend void SAL_CALL freeMapping(uno_Mapping * pMapping);
+
+ friend void SAL_CALL acquireMapping(uno_Mapping * pMapping);
+
+ friend void SAL_CALL releaseMapping(uno_Mapping * pMapping);
+
+ friend void SAL_CALL cpp2unoMapping(
+ uno_Mapping * pMapping, void ** ppUnoI, void * pCppI,
+ typelib_InterfaceTypeDescription * pTypeDescr);
+
+ friend void SAL_CALL uno2cppMapping(
+ uno_Mapping * pMapping, void ** ppCppI, void * pUnoI,
+ typelib_InterfaceTypeDescription * pTypeDescr);
+};
+
+} } }
+
+#endif
diff --git a/bridges/inc/bridges/cpp_uno/shared/cppinterfaceproxy.hxx b/bridges/inc/bridges/cpp_uno/shared/cppinterfaceproxy.hxx
new file mode 100644
index 000000000000..e3cafcc41101
--- /dev/null
+++ b/bridges/inc/bridges/cpp_uno/shared/cppinterfaceproxy.hxx
@@ -0,0 +1,106 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_BRIDGES_CPP_UNO_SHARED_CPPINTERFACEPROXY_HXX
+#define INCLUDED_BRIDGES_CPP_UNO_SHARED_CPPINTERFACEPROXY_HXX
+
+#include "osl/interlck.h"
+#include "rtl/ustring.hxx"
+#include "sal/types.h"
+#include "typelib/typedescription.h"
+#include "uno/dispatcher.h"
+#include "uno/environment.h"
+#include "bridges/cpp_uno/shared/vtablefactory.hxx"
+
+namespace com { namespace sun { namespace star { namespace uno {
+ class XInterface;
+} } } }
+
+namespace bridges { namespace cpp_uno { namespace shared {
+
+class Bridge;
+
+extern "C" typedef void SAL_CALL FreeCppInterfaceProxy(
+ uno_ExtEnvironment * pEnv, void * pInterface);
+FreeCppInterfaceProxy freeCppInterfaceProxy;
+
+/**
+ * A cpp proxy wrapping a uno interface.
+ */
+class CppInterfaceProxy {
+public:
+ // Interface for Bridge:
+
+ static com::sun::star::uno::XInterface * create(
+ Bridge * pBridge, uno_Interface * pUnoI,
+ typelib_InterfaceTypeDescription * pTypeDescr,
+ rtl::OUString const & rOId) SAL_THROW(());
+
+ // Interface for individual CPP--UNO bridges:
+
+ Bridge * getBridge() { return pBridge; }
+ uno_Interface * getUnoI() { return pUnoI; }
+ typelib_InterfaceTypeDescription * getTypeDescr() { return pTypeDescr; }
+ rtl::OUString getOid() { return oid; }
+
+ // non virtual methods called on incoming vtable calls #1, #2
+ void acquireProxy() SAL_THROW(());
+ void releaseProxy() SAL_THROW(());
+
+ static CppInterfaceProxy * castInterfaceToProxy(void * pInterface);
+
+private:
+ CppInterfaceProxy(CppInterfaceProxy &); // not implemented
+ void operator =(CppInterfaceProxy); // not implemented
+
+ CppInterfaceProxy(
+ Bridge * pBridge_, uno_Interface * pUnoI_,
+ typelib_InterfaceTypeDescription * pTypeDescr_,
+ rtl::OUString const & rOId_) SAL_THROW(());
+
+ ~CppInterfaceProxy();
+
+ static com::sun::star::uno::XInterface * castProxyToInterface(
+ CppInterfaceProxy * pProxy);
+
+ oslInterlockedCount nRef;
+ Bridge * pBridge;
+
+ // mapping information
+ uno_Interface * pUnoI; // wrapped interface
+ typelib_InterfaceTypeDescription * pTypeDescr;
+ rtl::OUString oid;
+
+ VtableFactory::Slot * vtables[1];
+
+ friend void SAL_CALL freeCppInterfaceProxy(
+ uno_ExtEnvironment * pEnv, void * pInterface);
+};
+
+} } }
+
+#endif
diff --git a/bridges/inc/bridges/cpp_uno/shared/types.hxx b/bridges/inc/bridges/cpp_uno/shared/types.hxx
new file mode 100644
index 000000000000..fa87637578ae
--- /dev/null
+++ b/bridges/inc/bridges/cpp_uno/shared/types.hxx
@@ -0,0 +1,77 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_BRIDGES_CPP_UNO_SHARED_TYPES_HXX
+#define INCLUDED_BRIDGES_CPP_UNO_SHARED_TYPES_HXX
+
+#include "typelib/typeclass.h"
+#include "typelib/typedescription.h"
+
+namespace bridges { namespace cpp_uno { namespace shared {
+
+/**
+ * Determines whether a type is a "simple" type (VOID, BOOLEAN, BYTE, SHORT,
+ * UNSIGNED SHORT, LONG, UNSIGNED LONG, HYPER, UNSIGNED HYPER, FLOAT, DOUBLE,
+ * CHAR, or an enum type).
+ *
+ * @param typeClass a type class
+ * @return true if the given type is "simple"
+ */
+bool isSimpleType(typelib_TypeClass typeClass);
+
+/**
+ * Determines whether a type is a "simple" type (VOID, BOOLEAN, BYTE, SHORT,
+ * UNSIGNED SHORT, LONG, UNSIGNED LONG, HYPER, UNSIGNED HYPER, FLOAT, DOUBLE,
+ * CHAR, or an enum type).
+ *
+ * @param type a non-null pointer to a type description reference
+ * @return true if the given type is "simple"
+ */
+bool isSimpleType(typelib_TypeDescriptionReference const * type);
+
+/**
+ * Determines whether a type is a "simple" type (VOID, BOOLEAN, BYTE, SHORT,
+ * UNSIGNED SHORT, LONG, UNSIGNED LONG, HYPER, UNSIGNED HYPER, FLOAT, DOUBLE,
+ * CHAR, or an enum type).
+ *
+ * @param type a non-null pointer to a type description
+ * @return true if the given type is "simple"
+ */
+bool isSimpleType(typelib_TypeDescription const * type);
+
+/**
+ * Determines whether a type relates to an interface type (is itself an
+ * interface type, or might contain entities of interface type).
+ *
+ * @param type a non-null pointer to a type description
+ * @return true if the given type relates to an interface type
+ */
+bool relatesToInterfaceType(typelib_TypeDescription const * type);
+
+} } }
+
+#endif
diff --git a/bridges/inc/bridges/cpp_uno/shared/unointerfaceproxy.hxx b/bridges/inc/bridges/cpp_uno/shared/unointerfaceproxy.hxx
new file mode 100644
index 000000000000..4836348cdfe9
--- /dev/null
+++ b/bridges/inc/bridges/cpp_uno/shared/unointerfaceproxy.hxx
@@ -0,0 +1,116 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_BRIDGES_CPP_UNO_SHARED_UNOINTERFACEPROXY_HXX
+#define INCLUDED_BRIDGES_CPP_UNO_SHARED_UNOINTERFACEPROXY_HXX
+
+#include "osl/interlck.h"
+#include "rtl/ustring.hxx"
+#include "sal/types.h"
+#include "typelib/typedescription.h"
+#include "uno/dispatcher.h"
+#include "uno/environment.h"
+
+namespace com { namespace sun { namespace star { namespace uno {
+ class XInterface;
+} } } }
+
+namespace bridges { namespace cpp_uno { namespace shared {
+
+class Bridge;
+
+extern "C" typedef void SAL_CALL FreeUnoInterfaceProxy(
+ uno_ExtEnvironment * pEnv, void * pProxy);
+FreeUnoInterfaceProxy freeUnoInterfaceProxy;
+
+// private:
+extern "C" typedef void SAL_CALL UnoInterfaceProxyDispatch(
+ uno_Interface * pUnoI, typelib_TypeDescription const * pMemberDescr,
+ void * pReturn, void * pArgs[], uno_Any ** ppException);
+UnoInterfaceProxyDispatch unoInterfaceProxyDispatch;
+ // this function is not defined in the generic part, but instead has to be
+ // defined individually for each CPP--UNO bridge
+
+// private:
+extern "C" typedef void SAL_CALL AcquireProxy(uno_Interface *);
+AcquireProxy acquireProxy;
+
+// private:
+extern "C" typedef void SAL_CALL ReleaseProxy(uno_Interface *);
+ReleaseProxy releaseProxy;
+
+/**
+ * A uno proxy wrapping a cpp interface.
+ */
+class UnoInterfaceProxy: public uno_Interface {
+public:
+ // Interface for Bridge:
+
+ static UnoInterfaceProxy * create(
+ Bridge * pBridge, com::sun::star::uno::XInterface * pCppI,
+ typelib_InterfaceTypeDescription * pTypeDescr,
+ rtl::OUString const & rOId) SAL_THROW(());
+
+ // Interface for individual CPP--UNO bridges:
+
+ Bridge * getBridge() { return pBridge; }
+ com::sun::star::uno::XInterface * getCppI() { return pCppI; }
+
+private:
+ UnoInterfaceProxy(UnoInterfaceProxy &); // not implemented
+ void operator =(UnoInterfaceProxy); // not implemented
+
+ UnoInterfaceProxy(
+ Bridge * pBridge_, com::sun::star::uno::XInterface * pCppI_,
+ typelib_InterfaceTypeDescription * pTypeDescr_,
+ rtl::OUString const & rOId_) SAL_THROW(());
+
+ ~UnoInterfaceProxy();
+
+ oslInterlockedCount nRef;
+ Bridge * pBridge;
+
+ // mapping information
+ com::sun::star::uno::XInterface * pCppI; // wrapped interface
+ typelib_InterfaceTypeDescription * pTypeDescr;
+ rtl::OUString oid;
+
+ friend void SAL_CALL freeUnoInterfaceProxy(
+ uno_ExtEnvironment * pEnv, void * pProxy);
+
+ friend void SAL_CALL unoInterfaceProxyDispatch(
+ uno_Interface * pUnoI, typelib_TypeDescription const * pMemberDescr,
+ void * pReturn, void * pArgs[], uno_Any ** ppException);
+
+ friend void SAL_CALL acquireProxy(uno_Interface * pUnoI);
+
+ friend void SAL_CALL releaseProxy(uno_Interface * pUnoI);
+};
+
+} } }
+
+#endif
diff --git a/bridges/inc/bridges/cpp_uno/shared/vtablefactory.hxx b/bridges/inc/bridges/cpp_uno/shared/vtablefactory.hxx
new file mode 100644
index 000000000000..434e0c6a0a28
--- /dev/null
+++ b/bridges/inc/bridges/cpp_uno/shared/vtablefactory.hxx
@@ -0,0 +1,214 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_BRIDGES_CPP_UNO_SHARED_VTABLEFACTORY_HXX
+#define INCLUDED_BRIDGES_CPP_UNO_SHARED_VTABLEFACTORY_HXX
+
+#include "osl/mutex.hxx"
+#include "rtl/alloc.h"
+#include "rtl/ustring.hxx"
+#include "sal/types.h"
+#include "typelib/typedescription.hxx"
+
+#include <hash_map>
+
+/*See: http://people.redhat.com/drepper/selinux-mem.html*/
+#ifdef LINUX
+#define USE_DOUBLE_MMAP
+#endif
+
+namespace bridges { namespace cpp_uno { namespace shared {
+
+/** Hand out vtable structures for interface type descriptions.
+ */
+class VtableFactory {
+public:
+ // This structure is not defined in the generic part, but instead has to be
+ // defined individually for each CPP--UNO bridge:
+ /** A vtable slot.
+ */
+ struct Slot;
+
+ /** A raw vtable block.
+ */
+ struct Block {
+ /** The start of the raw vtable block.
+
+ It points to the start of the allocated memory block, whereas the
+ vtable pointer typically points some bytes into the block (e.g.,
+ skipping an RTTI pointer, see mapBlockToVtable). Also, the block
+ contains any generated code snippets, after the vtable itself.
+ */
+ void * start;
+
+#ifdef USE_DOUBLE_MMAP
+ /** When seperately mmapping the block for writing and executing
+ exec points to the same memory as start, except start is used
+ exclusively for writing and exec for executing
+ */
+ void * exec;
+
+ /** File handle for the underlying anonymous file
+ */
+ int fd;
+#endif
+
+ /** The size of the raw vtable block, in bytes.
+ */
+ sal_Size size;
+ };
+
+ /** The vtable structure corresponding to an interface type.
+ */
+ struct Vtables {
+ /** The number of blocks/vtables.
+ */
+ sal_Int32 count;
+
+ /** An array of blocks, representing the multiple vtables of a
+ (multiple-inheritance) type.
+
+ <p>A block is a raw vtable. It points to the start of the allocated
+ memory block, whereas the vtable pointer typically points some bytes
+ into the block (e.g., skipping an RTTI pointer, see
+ mapBlockToVtable). Also, the block contains any generated code
+ snippets, after the vtable itself.</p>
+ */
+ Block * blocks;
+ };
+
+ VtableFactory();
+
+ ~VtableFactory();
+
+ /** Given an interface type description, return its corresponding vtable
+ structure.
+ */
+ Vtables getVtables(typelib_InterfaceTypeDescription * type);
+
+ // This function is not defined in the generic part, but instead has to be
+ // defined individually for each CPP--UNO bridge:
+ /** Given a pointer to a block, turn it into a vtable pointer.
+ */
+ static Slot * mapBlockToVtable(void * block);
+
+private:
+ class GuardedBlocks;
+ friend class GuardedBlocks;
+
+ class BaseOffset;
+
+ VtableFactory(VtableFactory &); // not implemented
+ void operator =(VtableFactory); // not implemented
+
+ bool createBlock(Block &block, sal_Int32 slotCount) const;
+
+ void freeBlock(Block const & block) const;
+
+ void createVtables(
+ GuardedBlocks & blocks, BaseOffset const & baseOffset,
+ typelib_InterfaceTypeDescription * type, bool includePrimary) const;
+
+ // This function is not defined in the generic part, but instead has to be
+ // defined individually for each CPP--UNO bridge:
+ /** Calculate the size of a raw vtable block.
+
+ @param slotCount the number of virtual function slots the returned
+ vtable block shall support (if there are any platform-specific slots,
+ like an RTTI pointer, or a pointer to a destructor, they are not covered
+ by slotCount)
+ @return the size of the raw vtable block, in bytes
+ */
+ static sal_Size getBlockSize(sal_Int32 slotCount);
+
+ // This function is not defined in the generic part, but instead has to be
+ // defined individually for each CPP--UNO bridge:
+ /** Initialize a raw vtable block.
+
+ @param block the start address of the raw vtable block
+ @param slotCount the number of slots
+ @return a pointer past the last vtable slot
+ */
+ static Slot * initializeBlock(void * block, sal_Int32 slotCount);
+
+ // This function is not defined in the generic part, but instead has to be
+ // defined individually for each CPP--UNO bridge:
+ /** Fill the vtable slots corresponding to all local (i.e., not inherited)
+ functions of a given interface type (and generate any necessary code
+ snippets for them).
+
+ @param slots on input, points past the vtable slot to be filled with
+ the last virtual function local to the given type; on output, points to
+ the vtable slot filled with the first virtual function local to the
+ given type
+ @param code points to the start of the area where code snippets can be
+ generated
+ @param writetoexecdiff when the same code area is mmaped twice, once for
+ writing for code-generation, and once for code-execution, then this
+ records the offset from a writable address to its executable address
+ @param type the interface type description for which to generate vtable
+ slots
+ @param functionOffset the function offset of the first vtable slot
+ (typically coded into the code snippet for that vtable slot)
+ @param functionCount the number of vtable slots to fill (the number of
+ local functions of the given type, passed in so that it need not be
+ recomputed)
+ @param vtableOffset the offset of this vtable (needed to adjust the
+ this pointer, typically coded into the code snippets for all the filled
+ vtable slots)
+ @return a pointer to the remaining code snippet area
+ */
+ static unsigned char * addLocalFunctions(
+ Slot ** slots, unsigned char * code,
+#ifdef USE_DOUBLE_MMAP
+ sal_PtrDiff writetoexecdiff,
+#endif
+ typelib_InterfaceTypeDescription const * type, sal_Int32 functionOffset,
+ sal_Int32 functionCount, sal_Int32 vtableOffset);
+
+ // This function is not defined in the generic part, but instead has to be
+ // defined individually for each CPP--UNO bridge:
+ /** Flush all the generated code snippets of a vtable, on platforms that
+ require it.
+
+ @param begin points to the start of the code snippet area
+ @param end points behind the end of the code snippet area
+ */
+ static void flushCode(
+ unsigned char const * begin, unsigned char const * end);
+
+ typedef std::hash_map< rtl::OUString, Vtables, rtl::OUStringHash > Map;
+
+ osl::Mutex m_mutex;
+ Map m_map;
+
+ rtl_arena_type * m_arena;
+};
+
+} } }
+
+#endif
diff --git a/bridges/inc/bridges/cpp_uno/shared/vtables.hxx b/bridges/inc/bridges/cpp_uno/shared/vtables.hxx
new file mode 100644
index 000000000000..37cc9bf8eca2
--- /dev/null
+++ b/bridges/inc/bridges/cpp_uno/shared/vtables.hxx
@@ -0,0 +1,108 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_BRIDGES_CPP_UNO_SHARED_VTABLES_HXX
+#define INCLUDED_BRIDGES_CPP_UNO_SHARED_VTABLES_HXX
+
+#include "sal/types.h"
+#include "typelib/typedescription.h"
+
+namespace bridges { namespace cpp_uno { namespace shared {
+
+/**
+ * Calculate the number of local functions of an interface type.
+ *
+ * <p><em>Local</em> functions are those not inherited from any base types. The
+ * number of <em>functions</em> is potentially larger than the number of
+ * <em>members</em>, as each read&ndash;write attribute member counts as two
+ * functions.</p>
+ *
+ * @param type a non-null pointer to an interface type description, for which
+ * <code>typelib_typedescription_complete</code> must already have been
+ * executed
+ * @return the number of local functions of the given interface type
+ */
+sal_Int32 getLocalFunctions(typelib_InterfaceTypeDescription const * type);
+
+/**
+ * Calculate the number of primary functions of an interface type.
+ *
+ * <p>The number of primary functions of an interface is the number of local
+ * functions of that interface (see <code>getLocalFunctions</code>), plus the
+ * number of primary functions of that interface's first base type (if it has at
+ * least one base type).</p>
+ *
+ * @param type a pointer to an interface type description; may be null
+ * @return the number of primary functions of the given interface type, or zero
+ * if the given interface type is null
+ */
+sal_Int32 getPrimaryFunctions(typelib_InterfaceTypeDescription * type);
+
+/**
+ * Represents a vtable slot of a C++ class.
+ */
+struct VtableSlot {
+ /**
+ * The offset of the vtable.
+ *
+ * <p>Multiple-inheritance C++ classes have more than one vtable. The
+ * offset is logical (<em>not</em> a byte offset), and must be
+ * non-negative.</p>
+ */
+ sal_Int32 offset;
+
+ /**
+ * The index within the vtable.
+ *
+ * <p>The index is logical (<em>not</em> a byte offset), and must be
+ * non-negative.</p>
+ */
+ sal_Int32 index;
+};
+
+/**
+ * Calculates the vtable slot associated with an interface attribute member.
+ *
+ * @param ifcMember a non-null pointer to an interface attribute member
+ * description
+ * @return the vtable slot associated with the given interface member
+ */
+VtableSlot getVtableSlot(
+ typelib_InterfaceAttributeTypeDescription const * ifcMember);
+
+/**
+ * Calculates the vtable slot associated with an interface method member.
+ *
+ * @param ifcMember a non-null pointer to an interface method member description
+ * @return the vtable slot associated with the given interface member
+ */
+VtableSlot getVtableSlot(
+ typelib_InterfaceMethodTypeDescription const * ifcMember);
+
+} } }
+
+#endif
diff --git a/bridges/inc/bridges/cpp_uno/type_misc.hxx b/bridges/inc/bridges/cpp_uno/type_misc.hxx
new file mode 100644
index 000000000000..775373b2b47e
--- /dev/null
+++ b/bridges/inc/bridges/cpp_uno/type_misc.hxx
@@ -0,0 +1,129 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef _BRIDGES_CPP_UNO_TYPE_MISC_HXX_
+#define _BRIDGES_CPP_UNO_TYPE_MISC_HXX_
+
+#include <sal/types.h>
+#include <typelib/typedescription.h>
+
+
+/** Determines whether given type might relate or relates to an interface,
+ i.e. values of this type are interface or may contain interface(s).<br>
+ @param pTypeDescr type description of type
+ @return true if type might relate to an interface, false otherwise
+*/
+inline bool cppu_relatesToInterface( typelib_TypeDescription * pTypeDescr ) SAL_THROW( () )
+{
+ switch (pTypeDescr->eTypeClass)
+ {
+// case typelib_TypeClass_TYPEDEF:
+ case typelib_TypeClass_SEQUENCE:
+ {
+ switch (((typelib_IndirectTypeDescription *)pTypeDescr)->pType->eTypeClass)
+ {
+ case typelib_TypeClass_INTERFACE:
+ case typelib_TypeClass_UNION: // might relate to interface
+ case typelib_TypeClass_ANY: // might relate to interface
+ return true;
+ case typelib_TypeClass_SEQUENCE:
+ case typelib_TypeClass_STRUCT:
+ case typelib_TypeClass_EXCEPTION:
+ {
+ typelib_TypeDescription * pTD = 0;
+ TYPELIB_DANGER_GET( &pTD, ((typelib_IndirectTypeDescription *)pTypeDescr)->pType );
+ bool bRel = cppu_relatesToInterface( pTD );
+ TYPELIB_DANGER_RELEASE( pTD );
+ return bRel;
+ }
+ default:
+ return false;
+ }
+ }
+ case typelib_TypeClass_STRUCT:
+ case typelib_TypeClass_EXCEPTION:
+ {
+ // ...optimized... to avoid getDescription() calls!
+ typelib_CompoundTypeDescription * pComp = (typelib_CompoundTypeDescription *)pTypeDescr;
+ typelib_TypeDescriptionReference ** pTypes = pComp->ppTypeRefs;
+ for ( sal_Int32 nPos = pComp->nMembers; nPos--; )
+ {
+ switch (pTypes[nPos]->eTypeClass)
+ {
+ case typelib_TypeClass_INTERFACE:
+ case typelib_TypeClass_UNION: // might relate to interface
+ case typelib_TypeClass_ANY: // might relate to interface
+ return true;
+// case typelib_TypeClass_TYPEDEF:
+ case typelib_TypeClass_SEQUENCE:
+ case typelib_TypeClass_STRUCT:
+ case typelib_TypeClass_EXCEPTION:
+ {
+ typelib_TypeDescription * pTD = 0;
+ TYPELIB_DANGER_GET( &pTD, pTypes[nPos] );
+ bool bRel = cppu_relatesToInterface( pTD );
+ TYPELIB_DANGER_RELEASE( pTD );
+ if (bRel)
+ return true;
+ }
+ default:
+ break;
+ }
+ }
+ if (pComp->pBaseTypeDescription)
+ return cppu_relatesToInterface( (typelib_TypeDescription *)pComp->pBaseTypeDescription );
+ return false;
+ }
+ case typelib_TypeClass_UNION: // might relate to interface
+ case typelib_TypeClass_ANY: // might relate to interface
+ case typelib_TypeClass_INTERFACE:
+ return true;
+ default:
+ return false;
+ }
+}
+
+/** Determines whether given type is a cpp simple type, e.g. int, enum.<br>
+ @param eTypeClass type class of type
+ @return true if type is a cpp simple type, false otherwise
+*/
+inline bool cppu_isSimpleType( typelib_TypeClass eTypeClass ) SAL_THROW( () )
+{
+ return (eTypeClass <= typelib_TypeClass_ENUM &&
+ eTypeClass != typelib_TypeClass_STRING &&
+ eTypeClass != typelib_TypeClass_ANY &&
+ eTypeClass != typelib_TypeClass_TYPE);
+}
+/** Determines whether given type is a cpp simple type, e.g. int, enum.<br>
+ @param pTypeDescr type description of type
+ @return true if type is a cpp simple type, false otherwise
+*/
+inline bool cppu_isSimpleType( typelib_TypeDescription * pTypeDescr ) SAL_THROW( () )
+{
+ return cppu_isSimpleType( pTypeDescr->eTypeClass );
+}
+
+#endif
diff --git a/bridges/inc/bridges/remote/bridgeimpl.hxx b/bridges/inc/bridges/remote/bridgeimpl.hxx
new file mode 100644
index 000000000000..0257dd5f879a
--- /dev/null
+++ b/bridges/inc/bridges/remote/bridgeimpl.hxx
@@ -0,0 +1,94 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef _BRIDGES_REMOTE_BRIDGEIMPL_HXX_
+#define _BRIDGES_REMOTE_BRIDGEIMPL_HXX_
+#include <osl/interlck.h>
+
+#include <uno/environment.h>
+
+#include <bridges/remote/context.h>
+#include <bridges/remote/remote.h>
+
+
+struct remote_BridgeImpl
+{
+ void (SAL_CALL * m_allThreadsAreGone ) ( uno_Environment * );
+ requestClientSideDispatcher m_sendRequest;
+ oslInterlockedCount m_nRemoteThreads;
+ sal_Bool m_bDisposed;
+ sal_Bool m_bReleaseStubsCalled;
+};
+
+namespace bridges_remote {
+
+ enum RemoteThreadCounter_HoldEnvWeak
+ {
+ RTC_HOLDENVWEAK = 0x1
+ };
+
+ class RemoteThreadCounter
+ {
+ public:
+ // performance optimization. In some cases, it is not necessary to acquire the
+ // environment.
+ RemoteThreadCounter( uno_Environment *pEnvRemote, RemoteThreadCounter_HoldEnvWeak )
+ : m_bReleaseEnvironment( sal_False )
+ , m_pEnvRemote( pEnvRemote )
+ {
+ remote_Context *pContext = ((remote_Context *) m_pEnvRemote->pContext );
+ osl_incrementInterlockedCount( &( pContext->m_pBridgeImpl->m_nRemoteThreads ) );
+ }
+
+ RemoteThreadCounter( uno_Environment *pEnvRemote )
+ : m_bReleaseEnvironment( sal_True )
+ , m_pEnvRemote( pEnvRemote )
+ {
+ m_pEnvRemote->acquire( m_pEnvRemote );
+
+ remote_Context *pContext = ((remote_Context *) m_pEnvRemote->pContext );
+ osl_incrementInterlockedCount( &( pContext->m_pBridgeImpl->m_nRemoteThreads ) );
+ }
+
+ ~RemoteThreadCounter( )
+ {
+ remote_Context *pContext = ((remote_Context *) m_pEnvRemote->pContext );
+ if( 0 == osl_decrementInterlockedCount( &( pContext->m_pBridgeImpl->m_nRemoteThreads)) &&
+ pContext->m_pBridgeImpl->m_bDisposed &&
+ ! pContext->m_pBridgeImpl->m_bReleaseStubsCalled )
+ {
+ pContext->m_pBridgeImpl->m_allThreadsAreGone( m_pEnvRemote );
+ }
+ if( m_bReleaseEnvironment )
+ m_pEnvRemote->release( m_pEnvRemote );
+ }
+
+ sal_Bool m_bReleaseEnvironment;
+ uno_Environment *m_pEnvRemote;
+ };
+}
+
+#endif
diff --git a/bridges/inc/bridges/remote/connection.h b/bridges/inc/bridges/remote/connection.h
new file mode 100644
index 000000000000..b374b73bc8cf
--- /dev/null
+++ b/bridges/inc/bridges/remote/connection.h
@@ -0,0 +1,67 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef _BRIDGES_REMOTE_CONNECTION_H_
+#define _BRIDGES_REMOTE_CONNECTION_H_
+#include <sal/types.h>
+
+/** Specfies a C-interface for a bidirectional bytestream,
+ which is used by a UNO remote environment.
+ */
+struct remote_Connection
+{
+ void ( SAL_CALL * acquire ) ( remote_Connection *);
+
+ void ( SAL_CALL * release ) ( remote_Connection *);
+
+ /**
+ reads nSize bytes from the connection. This method blocks, until
+ all bytes are available or an error occurs.
+ @return Number of bytes read.
+ If the return value is less than nSize, an unrecoverable
+ i/o error has occured or the connection was closed.
+
+ */
+ sal_Int32 (SAL_CALL * read)(remote_Connection *, sal_Int8 *pDest, sal_Int32 nSize );
+
+ /**
+ @return Number of bytes written.
+ if the return value is less than nSize an unrecoverable
+ i/o error has occured or the connection was closed.
+ */
+ sal_Int32 (SAL_CALL * write)(remote_Connection *, const sal_Int8 *pSource, sal_Int32 nSize );
+
+ void ( SAL_CALL * flush ) ( remote_Connection * );
+
+ /** closes the connection.
+ Any read or write operation after this call shall not be served
+ anymore. Any ongoing read or write operation must return immeadiatly after this call.
+ The implementation should cope with multiple calls to this method.
+ */
+ void (SAL_CALL * close) ( remote_Connection * );
+};
+
+#endif
diff --git a/bridges/inc/bridges/remote/context.h b/bridges/inc/bridges/remote/context.h
new file mode 100644
index 000000000000..e03310ce5e27
--- /dev/null
+++ b/bridges/inc/bridges/remote/context.h
@@ -0,0 +1,260 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BRIDGES_REMOTE_CONTEXT_H_
+#define _BRIDGES_REMOTE_CONTEXT_H_
+#include <osl/interlck.h>
+#include <osl/conditn.h>
+
+#include <typelib/typedescription.h>
+
+#include <uno/environment.h>
+#include <uno/any2.h>
+
+
+/** Interface for refcounted contexts of uno-environments.
+
+ Not all uno_Contexts need to be refcounted, in case they are,
+ they should be 'derived' from this struct.
+ This is used as a base class for the remote_Context.
+ @see uno_Environment
+ @see uno_getEnvironment()
+ @see remote_Context
+ */
+struct uno_Context
+{
+ /** increase the refcount of the context
+ */
+ void (SAL_CALL * acquire)( uno_Context *pContext );
+
+ /** decrements the recount of the context. In case the recount drops to zero,
+ the context gets destroye.
+ */
+ void (SAL_CALL * release)( uno_Context *pContext);
+
+ /** Allows to query for a different interface of the uno_Context.
+ The result of the void pointer is unspecified and depends on the concrete context.
+ */
+ void * (SAL_CALL *query ) ( uno_Context *pContext , rtl_uString *pId);
+};
+
+struct remote_Connection;
+struct remote_Context;
+struct remote_Interface;
+
+
+
+/** performs a query-interface for a certain interface via the remote connection !
+
+ @param pEnvRemote The environment, that shall perform the call.
+ @param ppRemoteI in/out parameter contains the interface returned by queryInterface
+ @param pOid the oid of the 'ghost' object on which the call must be done.
+ ***/
+typedef void ( SAL_CALL * remote_getInstanceFunc ) (
+ uno_Environment *pEnvRemote,
+ remote_Interface **ppRemoteI,
+ rtl_uString *pOid,
+ typelib_TypeDescriptionReference *pInterfaceTypeRef,
+ uno_Any **ppException );
+
+
+/** refcounted C-interface, which provides object by name.
+ */
+struct remote_InstanceProvider
+{
+ void (SAL_CALL * acquire ) ( remote_InstanceProvider * pProvider );
+ void (SAL_CALL * release ) ( remote_InstanceProvider * pProvider );
+ void (SAL_CALL * getInstance ) ( remote_InstanceProvider * pProvider ,
+ uno_Environment *pEnvRemote,
+ remote_Interface **ppRemoteI,
+ rtl_uString *pInstanceName,
+ typelib_InterfaceTypeDescription *pType,
+ uno_Any **ppException );
+};
+
+/** refcounted C-interface, which allows to register a listener to an
+ remote bridge to be informed when the bridge gets disposed.
+
+ @see remote_Context
+ */
+struct remote_DisposingListener
+{
+ void (SAL_CALL * acquire ) ( remote_DisposingListener * pProvider );
+ void (SAL_CALL * release ) ( remote_DisposingListener * pProvider );
+ void (SAL_CALL * disposing ) ( remote_DisposingListener * pProvider,
+ rtl_uString *pBridgeName );
+};
+
+
+/**
+ Try to get an existing context characterized by the pIdString. Each ID-String must
+ uniquely charcterize a certain connection. The context can't be retrieved via this
+ function anymore, after it got disposed.
+
+ @return 0 when such a context does not exist, otherwise
+ a pointer to an acquired remote_Context.
+ **/
+extern "C" remote_Context * SAL_CALL
+remote_getContext( rtl_uString *pIdString );
+
+/**
+ Create an acquired remote context. The Context is weakly held by the context administration
+ and can be accessed later through remote_getContext() (using the same id-string).
+
+ @param pIdString A string, that uniquely describes the connection. For e.g. a socket connection,
+ host and port of the local and remote host should be in the string.
+
+ @param pDescription
+ Description of the connection, that may brought up to the user.
+
+ @param pProtocol
+ The protocol, that the environment uses for
+ communicating with the remote process.
+ The format of the protocol string is : "protocolname,para1=para1value,..."
+ @return 0, when a context with this name already exists.
+
+ @see remote_getContext()
+ @see remote_Context
+ */
+extern "C" remote_Context * SAL_CALL
+remote_createContext( remote_Connection *pConnection,
+ rtl_uString *pIdStr,
+ rtl_uString *pDescription,
+ rtl_uString *pProtocol,
+ remote_InstanceProvider *);
+
+const sal_Int32 REMOTE_CONTEXT_CREATE = 1;
+const sal_Int32 REMOTE_CONTEXT_DESTROY = 2;
+
+typedef void ( SAL_CALL * remote_contextListenerFunc ) (
+ void *pThis,
+ sal_Int32 nRemoteContextMode,
+ rtl_uString *sName,
+ rtl_uString *sDescription
+ );
+
+/** Registers a listener at the context administration, which allows to keep
+ track of existing remote connections.
+ @param pObject object which is handed to the listener function, when called.
+ */
+extern "C" void SAL_CALL
+remote_addContextListener( remote_contextListenerFunc listener, void *pObject );
+
+
+/** Removes a listener from the context administration.
+ */
+extern "C" void SAL_CALL
+remote_removeContextListener( remote_contextListenerFunc listener , void *pObject );
+
+/** Allows to retrieve all existing context strings.
+
+ @param pnStringCount out parameter. Contains the number of rtl_uStrings in the array
+ @param memAlloc a memory allocation function for the array of pointers to rtl_uStrings
+
+ @return array of rtl strings. The caller must call release on all rtl_uString s and must free
+ the pointer array.
+ */
+extern "C" rtl_uString ** SAL_CALL
+remote_getContextList(
+ sal_Int32 *pnStringCount,
+ void * ( SAL_CALL * memAlloc ) ( sal_Size nBytesToAlloc ) );
+
+
+struct remote_BridgeImpl;
+
+/** The context structure for a remote bridge.
+
+ @see uno_getEnvironment()
+ */
+struct remote_Context
+{
+ struct uno_Context aBase;
+
+ /**
+ These methods are implemented by context administration
+ */
+ void ( SAL_CALL * addDisposingListener ) ( remote_Context *,
+ remote_DisposingListener * );
+ void ( SAL_CALL * removeDisposingListener ) ( remote_Context *,
+ remote_DisposingListener * );
+ /**
+ will be called by the environment when it gets disposed
+ */
+ void ( SAL_CALL * dispose ) ( remote_Context * );
+
+ /** The method is set by the remote-environment during environment initialization.
+ @see remote_getInstanceFunc
+ */
+ remote_getInstanceFunc getRemoteInstance;
+
+ /**
+ The protocol, that the environment uses for communicating with the remote process.
+ The format of the protocol string is : "protocolname,para1=para1value,..."
+ The parameters are protocol dependend
+ */
+ rtl_uString *m_pProtocol;
+
+ /**
+ It may be the same as m_pName.
+ Livetime is handled by the context administration.
+ */
+ rtl_uString *m_pDescription;
+
+ /**
+ The name of this context at context administration.
+ A string, that uniquely describes this environment.
+ Livetime is handled by the context administration.
+ */
+ rtl_uString *m_pName;
+
+ /** The instance-provider, which is used to look up unknown object identifiers.
+ Is usually called on server side, when the first client request comes in.
+ Maybe 0. Livetime is handled by the context administration.
+ */
+ remote_InstanceProvider *m_pInstanceProvider;
+
+ /**
+ The connection of this context.
+ Livetime is handled by the context administration.
+ */
+ remote_Connection *m_pConnection;
+
+ /**
+ Here arbitrary data may be stored. It may be used by a connection
+ service to store environment specific data. The bridge does not
+ use it.
+ */
+ void *m_pAdditionalInformation;
+
+ /**
+ here the bridge stores its private per environment data.
+ */
+ struct remote_BridgeImpl *m_pBridgeImpl;
+};
+
+#endif
+
diff --git a/bridges/inc/bridges/remote/counter.hxx b/bridges/inc/bridges/remote/counter.hxx
new file mode 100644
index 000000000000..deead1d2cb1e
--- /dev/null
+++ b/bridges/inc/bridges/remote/counter.hxx
@@ -0,0 +1,57 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef _BRIDGES_REMOTE_COUNTER_H_
+#define _BRIDGES_REMOTE_COUNTER_H_
+#include <stdio.h>
+#if OSL_DEBUG_LEVEL > 1
+struct MyCounter
+{
+ MyCounter( sal_Char const *pName ) :
+ m_nCounter( 0 ),
+ m_pName ( pName )
+ {
+ }
+ ~MyCounter()
+ {
+ if( m_nCounter ) {
+ printf(
+ "%s : %ld left\n", m_pName,
+ sal::static_int_cast< long >(m_nCounter) );
+ }
+ }
+ void acquire()
+ { m_nCounter ++; }
+ void release()
+ { m_nCounter --; }
+
+
+ sal_Int32 m_nCounter;
+ sal_Char const *m_pName;
+};
+#endif
+
+#endif
diff --git a/bridges/inc/bridges/remote/helper.hxx b/bridges/inc/bridges/remote/helper.hxx
new file mode 100644
index 000000000000..081e47a5c855
--- /dev/null
+++ b/bridges/inc/bridges/remote/helper.hxx
@@ -0,0 +1,68 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#include <bridges/remote/bridgeimpl.hxx>
+
+typedef void ( SAL_CALL * ReleaseRemoteCallbackFunc ) (
+ remote_Interface *ppRemoteI,
+ rtl_uString *pOid,
+ typelib_TypeDescriptionReference *pTypeRef,
+ uno_Environment *pEnvRemote
+ );
+
+typedef void ( SAL_CALL * remote_createStubFunc ) (
+ remote_Interface **ppRemoteI,
+ rtl_uString *pOid ,
+ typelib_TypeDescriptionReference *pTypeRef,
+ uno_Environment *pEnvRemote,
+ ReleaseRemoteCallbackFunc callback
+ );
+namespace bridges_remote
+{
+
+ /** @param callback If the bridge implementation wants to handle the remote release call,
+ it can do it giving this callback. If callback == 0, the releaseRemote
+ method of the stub is called.
+ */
+ void SAL_CALL remote_createStub (
+ remote_Interface **ppRemoteI,
+ rtl_uString *pOid ,
+ typelib_TypeDescriptionReference *pType,
+ uno_Environment *pEnvRemote,
+ ReleaseRemoteCallbackFunc callback );
+
+ void SAL_CALL remote_retrieveOidFromProxy(
+ remote_Interface *pRemtoeI,
+ rtl_uString **ppOid );
+
+ void SAL_CALL remote_sendQueryInterface(
+ uno_Environment *pEnvRemote,
+ remote_Interface **ppRemoteI,
+ rtl_uString *pOid ,
+ typelib_TypeDescriptionReference *pType,
+ uno_Any **ppException
+ );
+}
diff --git a/bridges/inc/bridges/remote/mapping.hxx b/bridges/inc/bridges/remote/mapping.hxx
new file mode 100644
index 000000000000..4247c6cc9b65
--- /dev/null
+++ b/bridges/inc/bridges/remote/mapping.hxx
@@ -0,0 +1,69 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef _BRIDGES_REMOTE_MAPPING_HXX_
+#define _BRIDGES_REMOTE_MAPPING_HXX_
+
+#include <osl/interlck.h>
+#include <rtl/ustring.hxx>
+
+#include <typelib/typedescription.h>
+
+#include <bridges/remote/remote.h>
+
+typedef struct _uno_Environment uno_Environment;
+
+namespace bridges_remote
+{
+ extern "C" typedef void SAL_CALL RemoteToUno(
+ uno_Mapping *pMapping, void **ppOut, void *pInterface,
+ typelib_InterfaceTypeDescription *pInterfaceTypeDescr );
+ RemoteToUno remoteToUno;
+
+ extern "C" typedef void SAL_CALL UnoToRemote(
+ uno_Mapping *pMapping, void **ppOut, void *pInterface,
+ typelib_InterfaceTypeDescription *pInterfaceTypeDescr );
+ UnoToRemote unoToRemote;
+
+ extern "C" typedef void SAL_CALL FreeRemoteMapping(uno_Mapping * mapping);
+ FreeRemoteMapping freeRemoteMapping;
+
+ class RemoteMapping :
+ public remote_Mapping
+ {
+ public:
+ RemoteMapping( uno_Environment *pEnvUno ,
+ uno_Environment *pEnvRemote,
+ uno_MapInterfaceFunc func ,
+ const ::rtl::OUString sPurpose);
+ ~RemoteMapping();
+
+ oslInterlockedCount m_nRef;
+ ::rtl::OUString m_sPurpose;
+ };
+
+}
+#endif
diff --git a/bridges/inc/bridges/remote/proxy.hxx b/bridges/inc/bridges/remote/proxy.hxx
new file mode 100644
index 000000000000..fd1e919b902a
--- /dev/null
+++ b/bridges/inc/bridges/remote/proxy.hxx
@@ -0,0 +1,91 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#include <osl/interlck.h>
+
+#include <uno/environment.h>
+#include <uno/dispatcher.h>
+#include <uno/mapping.hxx>
+
+#include <bridges/remote/remote.h>
+
+namespace bridges_remote {
+
+extern "C" typedef void SAL_CALL FreeRemote2UnoProxy(
+ uno_ExtEnvironment * environment, void * proxy);
+FreeRemote2UnoProxy freeRemote2UnoProxy;
+
+// private:
+extern "C" typedef void SAL_CALL AcquireRemote2UnoProxy(uno_Interface *);
+AcquireRemote2UnoProxy acquireRemote2UnoProxy;
+
+// private:
+extern "C" typedef void SAL_CALL ReleaseRemote2UnoProxy(uno_Interface *);
+ReleaseRemote2UnoProxy releaseRemote2UnoProxy;
+
+// private:
+extern "C" typedef void SAL_CALL DispatchRemote2UnoProxy(
+ uno_Interface *, typelib_TypeDescription const *, void *, void **,
+ uno_Any **);
+DispatchRemote2UnoProxy dispatchRemote2UnoProxy;
+
+extern "C" void SAL_CALL remote_release( void * );
+
+class Remote2UnoProxy :
+ public uno_Interface
+{
+public:
+ Remote2UnoProxy(
+ remote_Interface *pRemoteI,
+ rtl_uString *pOid,
+ typelib_InterfaceTypeDescription *pType ,
+ uno_Environment *pEnvUno,
+ uno_Environment *pEnvRemote
+ );
+
+ ~Remote2UnoProxy();
+
+private:
+ ::rtl::OUString m_sOid;
+ typelib_InterfaceTypeDescription *m_pType;
+ remote_Interface *m_pRemoteI;
+ uno_Environment *m_pEnvUno;
+ uno_Environment *m_pEnvRemote;
+ ::com::sun::star::uno::Mapping m_mapRemote2Uno;
+ ::com::sun::star::uno::Mapping m_mapUno2Remote;
+
+ oslInterlockedCount m_nRef;
+
+ friend void SAL_CALL acquireRemote2UnoProxy(uno_Interface *);
+
+ friend void SAL_CALL releaseRemote2UnoProxy(uno_Interface *);
+
+ friend void SAL_CALL dispatchRemote2UnoProxy(
+ uno_Interface *, typelib_TypeDescription const *, void *, void **,
+ uno_Any **);
+};
+
+}
diff --git a/bridges/inc/bridges/remote/remote.h b/bridges/inc/bridges/remote/remote.h
new file mode 100644
index 000000000000..0cc4071eab8a
--- /dev/null
+++ b/bridges/inc/bridges/remote/remote.h
@@ -0,0 +1,93 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef _BRIDGES_REMOTE_REMOTE_H
+#define _BRIDGES_REMOTE_REMOTE_H
+#include <uno/mapping.h>
+#include <uno/any2.h>
+
+#include <typelib/typedescription.h>
+#include <uno/environment.h>
+
+#define CORBA_STRING8_NAME "com.sun.star.corba.CorbaString8"
+#define CORBA_STRING8_NAME_LENGTH (sizeof(CORBA_STRING8_NAME)-1)
+
+#define CORBA_UNION_NAME "com.sun.star.corba.CorbaUnion"
+#define CORBA_UNION_NAME_LENGTH (sizeof(CORBA_UNION_NAME)-1)
+
+#define REMOTE_MARSHALED_MSGHDR_SIZE 12
+#define REMOTE_RELEASE_METHOD_INDEX 2
+#define REMOTE_RELEASE_METHOD_NAME "release"
+
+#define CURRENT_IIOP_PROTOCOL_MAJOR 1
+#define CURRENT_IIOP_PROTOCOL_MINOR 2
+
+extern "C" {
+
+struct remote_Interface;
+
+/** @internal
+ */
+typedef void (SAL_CALL * remote_DispatchMethod)(
+ remote_Interface * pRemoteI, typelib_TypeDescription const * pMemberType,
+ void * pReturn, void * pArgs[], uno_Any ** ppException );
+
+/**
+ @internal
+ */
+typedef void ( SAL_CALL * requestClientSideDispatcher ) (
+ uno_Environment *pEnvRemote,
+ typelib_TypeDescription const * pMemberType,
+ rtl_uString *pOid,
+ typelib_InterfaceTypeDescription *pInterfaceType,
+ void *pReturn,
+ void *ppArgs[],
+ uno_Any **ppException );
+
+/** The base class of an UNO interface in a remote environment.
+ */
+struct remote_Interface
+{
+ void (SAL_CALL * acquire)( remote_Interface * pInterface );
+
+ void (SAL_CALL * release)( remote_Interface * pInterface );
+
+ remote_DispatchMethod pDispatcher;
+};
+
+/** The mapping between an binary-c-uno and a remote environment.
+ @internal
+ */
+struct remote_Mapping
+{
+ uno_Mapping aBase;
+ uno_Environment *pEnvRemote;
+ uno_Environment *pEnvUno;
+};
+
+}
+
+#endif
diff --git a/bridges/inc/bridges/remote/remote.hxx b/bridges/inc/bridges/remote/remote.hxx
new file mode 100644
index 000000000000..d5e5397e35cd
--- /dev/null
+++ b/bridges/inc/bridges/remote/remote.hxx
@@ -0,0 +1,73 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef _BRIDGES_REMOTE_REMOTE_HXX_
+#define _BRIDGES_REMOTE_REMOTE_HXX_
+#include <list>
+
+#include <osl/mutex.hxx>
+#include <osl/conditn.h>
+#include <osl/interlck.h>
+
+#include <uno/environment.h>
+
+#include <bridges/remote/remote.h>
+#include <bridges/remote/connection.h>
+
+#include <com/sun/star/uno/Sequence.hxx>
+
+namespace bridges_remote {
+
+extern "C" typedef void SAL_CALL AcquireRemote2RemoteStub(
+ remote_Interface * pThis);
+AcquireRemote2RemoteStub acquireRemote2RemoteStub;
+
+extern "C" typedef void SAL_CALL FreeRemote2RemoteStub(
+ uno_ExtEnvironment * environment, void * stub);
+FreeRemote2RemoteStub freeRemote2RemoteStub;
+
+class Remote2RemoteStub :
+ public remote_Interface
+{
+public:
+ Remote2RemoteStub(rtl_uString *pOid,
+ typelib_InterfaceTypeDescription *pType,
+ uno_Environment *pEnvRemote,
+ requestClientSideDispatcher dispatch );
+ ~Remote2RemoteStub();
+
+ void releaseRemote();
+public:
+ ::rtl::OUString m_sOid;
+ typelib_InterfaceTypeDescription *m_pType;
+ oslInterlockedCount m_nRef;
+ uno_Environment *m_pEnvRemote;
+ requestClientSideDispatcher m_dispatch;
+ oslInterlockedCount m_nReleaseRemote;
+};
+
+}
+#endif
diff --git a/bridges/inc/bridges/remote/stub.hxx b/bridges/inc/bridges/remote/stub.hxx
new file mode 100644
index 000000000000..5eb21ff37a10
--- /dev/null
+++ b/bridges/inc/bridges/remote/stub.hxx
@@ -0,0 +1,64 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#include <bridges/remote/remote.hxx>
+
+#include <uno/dispatcher.h>
+#include <uno/mapping.hxx>
+
+namespace bridges_remote {
+
+extern "C" typedef void SAL_CALL AcquireUno2RemoteStub( remote_Interface *pThis );
+AcquireUno2RemoteStub acquireUno2RemoteStub;
+
+extern "C" typedef void SAL_CALL FreeUno2RemoteStub(
+ uno_ExtEnvironment * environment, void * stub);
+FreeUno2RemoteStub freeUno2RemoteStub;
+
+class Uno2RemoteStub :
+ public remote_Interface
+{
+public:
+ Uno2RemoteStub( uno_Interface *pUnoI,
+ rtl_uString *pOid,
+ typelib_InterfaceTypeDescription *pType,
+ uno_Environment *pEnvUno,
+ uno_Environment *pEnvRemote );
+ ~Uno2RemoteStub();
+
+public:
+ ::rtl::OUString m_sOid;
+ typelib_InterfaceTypeDescription *m_pType;
+ uno_Interface *m_pUnoI;
+ oslInterlockedCount m_nRef;
+
+ uno_Environment *m_pEnvUno;
+ uno_Environment *m_pEnvRemote;
+ ::com::sun::star::uno::Mapping m_mapRemote2Uno;
+ ::com::sun::star::uno::Mapping m_mapUno2Remote;
+};
+
+}
diff --git a/bridges/inc/makefile.mk b/bridges/inc/makefile.mk
new file mode 100644
index 000000000000..de828a78479f
--- /dev/null
+++ b/bridges/inc/makefile.mk
@@ -0,0 +1,47 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+PRJ=..
+
+PRJNAME=bridges
+TARGET=inc
+
+# --- Settings -----------------------------------------------------
+
+.INCLUDE : settings.mk
+
+# --- Files --------------------------------------------------------
+# --- Targets -------------------------------------------------------
+
+.INCLUDE : target.mk
+
+.IF "$(ENABLE_PCH)"!=""
+ALLTAR : \
+ $(SLO)$/precompiled.pch \
+ $(SLO)$/precompiled_ex.pch
+
+.ENDIF # "$(ENABLE_PCH)"!=""
+
diff --git a/bridges/inc/pch/precompiled_bridges.cxx b/bridges/inc/pch/precompiled_bridges.cxx
new file mode 100644
index 000000000000..9adda1e1a77e
--- /dev/null
+++ b/bridges/inc/pch/precompiled_bridges.cxx
@@ -0,0 +1,29 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "precompiled_bridges.hxx"
+
diff --git a/bridges/inc/pch/precompiled_bridges.hxx b/bridges/inc/pch/precompiled_bridges.hxx
new file mode 100644
index 000000000000..33d5e5f8971f
--- /dev/null
+++ b/bridges/inc/pch/precompiled_bridges.hxx
@@ -0,0 +1,152 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): Generated on 2006-09-01 17:49:31.967936
+
+#ifdef PRECOMPILED_HEADERS
+//---MARKER---
+#include "boost/static_assert.hpp"
+
+#include "com/sun/star/bridge/InvalidProtocolChangeException.hdl"
+#include "com/sun/star/bridge/InvalidProtocolChangeException.hpp"
+#include "com/sun/star/bridge/ProtocolProperty.hdl"
+#include "com/sun/star/bridge/ProtocolProperty.hpp"
+#include "com/sun/star/bridge/XBridge.hpp"
+#include "com/sun/star/bridge/XBridgeFactory.hpp"
+#include "com/sun/star/bridge/XInstanceProvider.hpp"
+#include "com/sun/star/bridge/XProtocolProperties.hdl"
+#include "com/sun/star/bridge/XProtocolProperties.hpp"
+#include "com/sun/star/bridge/XUnoUrlResolver.hpp"
+#include "com/sun/star/connection/ConnectionSetupException.hpp"
+#include "com/sun/star/connection/NoConnectException.hpp"
+#include "com/sun/star/connection/XAcceptor.hpp"
+#include "com/sun/star/connection/XConnection.hpp"
+#include "com/sun/star/connection/XConnector.hpp"
+#include "com/sun/star/frame/XComponentLoader.hpp"
+#include "com/sun/star/io/XInputStream.hpp"
+#include "com/sun/star/io/XOutputStream.hpp"
+#include "com/sun/star/lang/DisposedException.hdl"
+#include "com/sun/star/lang/DisposedException.hpp"
+#include "com/sun/star/lang/IllegalArgumentException.hpp"
+#include "com/sun/star/lang/WrappedTargetRuntimeException.hpp"
+#include "com/sun/star/lang/XComponent.hpp"
+#include "com/sun/star/lang/XInitialization.hpp"
+#include "com/sun/star/lang/XMain.hpp"
+#include "com/sun/star/lang/XMultiComponentFactory.hpp"
+#include "com/sun/star/lang/XServiceInfo.hpp"
+#include "com/sun/star/lang/XSingleComponentFactory.hpp"
+#include "com/sun/star/registry/InvalidRegistryException.hpp"
+#include "com/sun/star/registry/XImplementationRegistration.hpp"
+#include "com/sun/star/registry/XRegistryKey.hpp"
+#include "com/sun/star/text/XTextDocument.hpp"
+#include "com/sun/star/uno/Any.h"
+#include "com/sun/star/uno/Any.hxx"
+#include "com/sun/star/uno/DeploymentException.hpp"
+#include "com/sun/star/uno/Exception.hdl"
+#include "com/sun/star/uno/Exception.hpp"
+#include "com/sun/star/uno/Reference.h"
+#include "com/sun/star/uno/Reference.hxx"
+#include "com/sun/star/uno/RuntimeException.hdl"
+#include "com/sun/star/uno/RuntimeException.hpp"
+#include "com/sun/star/uno/Sequence.h"
+#include "com/sun/star/uno/Sequence.hxx"
+#include "com/sun/star/uno/Type.h"
+#include "com/sun/star/uno/Type.hxx"
+#include "com/sun/star/uno/TypeClass.hdl"
+#include "com/sun/star/uno/XComponentContext.hpp"
+#include "com/sun/star/uno/XInterface.hdl"
+#include "com/sun/star/uno/XInterface.hpp"
+#include "com/sun/star/uno/XNamingService.hpp"
+#include "com/sun/star/uno/genfunc.hxx"
+
+#include "cppu/macros.hxx"
+#include "cppu/unotype.hxx"
+
+#include "cppuhelper/factory.hxx"
+#include "cppuhelper/implbase1.hxx"
+#include "cppuhelper/implbase2.hxx"
+#include "cppuhelper/implbase3.hxx"
+#include "cppuhelper/implementationentry.hxx"
+#include "cppuhelper/servicefactory.hxx"
+#include "cppuhelper/weak.hxx"
+
+
+#include "osl/conditn.h"
+#include "osl/conditn.hxx"
+#include "osl/diagnose.h"
+#include "osl/doublecheckedlocking.h"
+#include "osl/getglobalmutex.hxx"
+#include "osl/interlck.h"
+#include "osl/module.h"
+#include "osl/module.hxx"
+#include "osl/mutex.h"
+#include "osl/mutex.hxx"
+#include "osl/process.h"
+#include "osl/semaphor.h"
+#include "osl/thread.h"
+#include "osl/thread.hxx"
+#include "osl/time.h"
+
+#include "rtl/alloc.h"
+#include "rtl/byteseq.h"
+#include "rtl/byteseq.hxx"
+#include "rtl/instance.hxx"
+#include "rtl/memory.h"
+#include "rtl/process.h"
+#include "rtl/random.h"
+#include "rtl/strbuf.hxx"
+#include "rtl/string.h"
+#include "rtl/string.hxx"
+#include "rtl/unload.h"
+#include "rtl/ustrbuf.hxx"
+#include "rtl/ustring.h"
+#include "rtl/ustring.hxx"
+#include "rtl/uuid.h"
+
+#include "sal/alloca.h"
+#include "sal/config.h"
+#include "sal/types.h"
+
+#include "sys/types.h"
+
+
+#include "typelib/typeclass.h"
+#include "typelib/typedescription.h"
+#include "typelib/typedescription.hxx"
+
+#include "uno/any2.h"
+#include "uno/data.h"
+#include "uno/dispatcher.h"
+#include "uno/environment.h"
+#include "uno/environment.hxx"
+#include "uno/lbnames.h"
+#include "uno/mapping.h"
+#include "uno/mapping.hxx"
+#include "uno/sequence2.h"
+#include "uno/threadpool.h"
+//---MARKER---
+#endif
diff --git a/bridges/prj/build.lst b/bridges/prj/build.lst
new file mode 100644
index 000000000000..0e7979742562
--- /dev/null
+++ b/bridges/prj/build.lst
@@ -0,0 +1,36 @@
+br bridges : cppuhelper jurt jvmaccess salhelper NULL
+br bridges usr1 - all br_mkout NULL
+br bridges\inc nmake - all br_inc NULL
+br bridges\unotypes nmake - all br_unotypes NULL
+br bridges\source\remote\static nmake - all br_rem_static br_unotypes br_inc NULL
+br bridges\source\remote\urp nmake - all br_rem_urp br_rem_static br_inc NULL
+br bridges\source\remote\context nmake - all br_rcon br_unotypes br_inc NULL
+br bridges\source\cpp_uno\mingw_intel nmake - w br_gcc3i br_cppuno_shared br_unotypes br_inc NULL
+br bridges\source\cpp_uno\msvc_win32_intel nmake - w br_msci br_cppuno_shared br_unotypes br_inc NULL
+br bridges\source\cpp_uno\gcc3_linux_intel nmake - u br_gcc3li br_cppuno_shared br_unotypes br_inc NULL
+br bridges\source\cpp_uno\gcc3_os2_intel nmake - p br_gcc3os br_cppuno_shared br_unotypes br_inc NULL
+br bridges\source\cpp_uno\gcc3_freebsd_intel nmake - u br_gcc3fi br_cppuno_shared br_unotypes br_inc NULL
+br bridges\source\cpp_uno\gcc3_linux_x86-64 nmake - u br_gcc3lx br_cppuno_shared br_unotypes br_inc NULL
+br bridges\source\cpp_uno\gcc3_freebsd_x86-64 nmake - u br_gcc3fx br_cppuno_shared br_unotypes br_inc NULL
+br bridges\source\cpp_uno\gcc3_linux_powerpc nmake - u br_gcc3lp br_cppuno_shared br_unotypes br_inc NULL
+br bridges\source\cpp_uno\gcc3_linux_powerpc64 nmake - u br_gcc3lp_64 br_cppuno_shared br_unotypes br_inc NULL
+br bridges\source\cpp_uno\gcc3_linux_mips nmake - u br_gcc3lmips br_cppuno_shared br_unotypes br_inc NULL
+br bridges\source\cpp_uno\gcc3_linux_m68k nmake - u br_gcc3lm68k br_cppuno_shared br_unotypes br_inc NULL
+br bridges\source\cpp_uno\gcc3_linux_s390 nmake - u br_gcc3l3 br_unotypes br_inc NULL
+br bridges\source\cpp_uno\gcc3_linux_s390x nmake - u br_gcc3l3_64 br_unotypes br_inc NULL
+br bridges\source\cpp_uno\gcc3_linux_sparc nmake - u br_gcc3ls br_unotypes br_cppuno_shared br_inc NULL
+br bridges\source\cpp_uno\gcc3_linux_arm nmake - u br_gcc3lr br_unotypes NULL
+br bridges\source\cpp_uno\gcc3_linux_ia64 nmake - u br_gcc3la br_unotypes NULL
+br bridges\source\cpp_uno\gcc3_linux_hppa nmake - u br_gcc3lh br_unotypes NULL
+br bridges\source\cpp_uno\gcc3_linux_alpha nmake - u br_gcc3ll br_unotypes NULL
+br bridges\source\cpp_uno\gcc3_macosx_intel nmake - u br_gcc3macoxi br_cppuno_shared br_unotypes br_inc NULL
+br bridges\source\cpp_uno\gcc3_macosx_powerpc nmake - u br_gcc3macoxp br_cppuno_shared br_unotypes br_inc NULL
+br bridges\source\cpp_uno\cc50_solaris_sparc nmake - u br_cc50sols br_unotypes br_cppuno_shared br_inc NULL
+br bridges\source\cpp_uno\cc5_solaris_sparc64 nmake - u br_cc5sols64 br_unotypes br_cppuno_shared br_inc NULL
+br bridges\source\cpp_uno\cc50_solaris_intel nmake - u br_cc50soli br_unotypes br_cppuno_shared br_inc NULL
+br bridges\source\cpp_uno\gcc3_solaris_sparc nmake - u br_gcc3sogs br_cppuno_shared br_unotypes br_inc NULL
+br bridges\source\cpp_uno\gcc3_solaris_intel nmake - u br_gcc3sogi br_cppuno_shared br_unotypes br_inc NULL
+br bridges\source\cpp_uno\gcc3_netbsd_intel nmake - u br_gccni br_unotypes br_inc NULL
+br bridges\source\cpp_uno\shared nmake - all br_cppuno_shared br_unotypes br_inc NULL
+br bridges\source\jni_uno nmake - all br_jni_uno br_unotypes br_inc NULL
+br bridges\source\jni_uno\java\com\sun\star\bridges\jni_uno nmake - all br_jni_uno_java br_unotypes br_inc NULL
diff --git a/bridges/prj/d.lst b/bridges/prj/d.lst
new file mode 100644
index 000000000000..0b3dd93370d4
--- /dev/null
+++ b/bridges/prj/d.lst
@@ -0,0 +1,28 @@
+mkdir: %_DEST%\inc%_EXT%\bridges
+mkdir: %_DEST%\inc%_EXT%\bridges\remote
+
+..\inc\bridges\remote\connection.h %_DEST%\inc%_EXT%\bridges\remote\connection.h
+..\inc\bridges\remote\context.h %_DEST%\inc%_EXT%\bridges\remote\context.h
+..\inc\bridges\remote\remote.h %_DEST%\inc%_EXT%\bridges\remote\remote.h
+
+..\%__SRC%\lib\irmcxt* %_DEST%\lib%_EXT%\*
+..\%__SRC%\lib\librmcxt.*.* %_DEST%\lib%_EXT%\*
+..\%__SRC%\bin\rmcxt*.dll %_DEST%\bin%_EXT%\*
+
+..\%__SRC%\lib\liburp_uno* %_DEST%\lib%_EXT%\liburp_uno*
+..\%__SRC%\bin\urp_uno* %_DEST%\bin%_EXT%\urp_uno*
+..\%__SRC%\lib\libjava_uno* %_DEST%\lib%_EXT%\libjava_uno*
+..\%__SRC%\bin\java_uno* %_DEST%\bin%_EXT%\java_uno*
+..\%__SRC%\class\java_uno*.jar %_DEST%\bin%_EXT%\java_uno*.jar
+
+..\%__SRC%\bin\msci_uno.* %_DEST%\bin%_EXT%\msci_uno.*
+..\%__SRC%\bin\gcc3_uno.dll %_DEST%\bin%_EXT%\gcc3_uno.dll
+..\%__SRC%\lib\libgcc2_uno.* %_DEST%\lib%_EXT%\libgcc2_uno.*
+..\%__SRC%\lib\libgcc3_uno.* %_DEST%\lib%_EXT%\libgcc3_uno.*
+..\%__SRC%\bin\gcc3_uno.* %_DEST%\bin%_EXT%\gcc3_uno.*
+..\%__SRC%\lib\libsunpro5_uno.* %_DEST%\lib%_EXT%\libsunpro5_uno.*
+
+..\%__SRC%\lib\rmcxt3.lib %_DEST%\lib%_EXT%\rmcxt.lib
+
+
+linklib: librmcxt.*.*
diff --git a/bridges/source/bridge_exports.map b/bridges/source/bridge_exports.map
new file mode 100644
index 000000000000..df39965a2b51
--- /dev/null
+++ b/bridges/source/bridge_exports.map
@@ -0,0 +1,8 @@
+UDK_3_0_0 {
+ global:
+ component_canUnload;
+ uno_initEnvironment;
+ uno_ext_getMapping;
+ local:
+ *;
+};
diff --git a/bridges/source/cpp_uno/cc50_solaris_intel/call.s b/bridges/source/cpp_uno/cc50_solaris_intel/call.s
new file mode 100644
index 000000000000..95bf79632031
--- /dev/null
+++ b/bridges/source/cpp_uno/cc50_solaris_intel/call.s
@@ -0,0 +1,248 @@
+ .align 4
+ .globl privateSnippetExecutorGeneral
+privateSnippetExecutorGeneral:
+ movl %esp,%ecx
+ pushl %ebp / proper stack frame needed for exception handling
+ movl %esp,%ebp
+ andl $0xFFFFFFF8,%esp / align following 64bit arg
+ subl $0x8,%esp / 64bit nRegReturn
+ pushl %ecx / 32bit pCallStack
+ pushl %edx / 32bit nVtableOffset
+ pushl %eax / 32bit nFunctionIndex
+ call cpp_vtable_call
+ movl 12(%esp),%eax / 64 bit nRegReturn, lower half
+ leave
+ ret
+ .type privateSnippetExecutorGeneral, @function
+ .size privateSnippetExecutorGeneral, .-privateSnippetExecutorGeneral
+
+ .align 4
+ .globl privateSnippetExecutorVoid
+privateSnippetExecutorVoid:
+ movl %esp,%ecx
+ pushl %ebp / proper stack frame needed for exception handling
+ movl %esp,%ebp
+ andl $0xFFFFFFF8,%esp / align following 64bit arg
+ subl $0x8,%esp / 64bit nRegReturn
+ pushl %ecx / 32bit pCallStack
+ pushl %edx / 32bit nVtableOffset
+ pushl %eax / 32bit nFunctionIndex
+ call cpp_vtable_call
+ leave
+ ret
+ .type privateSnippetExecutorVoid, @function
+ .size privateSnippetExecutorVoid, .-privateSnippetExecutorVoid
+
+ .align 4
+ .globl privateSnippetExecutorHyper
+privateSnippetExecutorHyper:
+ movl %esp,%ecx
+ pushl %ebp / proper stack frame needed for exception handling
+ movl %esp,%ebp
+ andl $0xFFFFFFF8,%esp / align following 64bit arg
+ subl $0x8,%esp / 64bit nRegReturn
+ pushl %ecx / 32bit pCallStack
+ pushl %edx / 32bit nVtableOffset
+ pushl %eax / 32bit nFunctionIndex
+ call cpp_vtable_call
+ movl 12(%esp),%eax / 64 bit nRegReturn, lower half
+ movl 16(%esp),%edx / 64 bit nRegReturn, upper half
+ leave
+ ret
+ .type privateSnippetExecutorHyper, @function
+ .size privateSnippetExecutorHyper, .-privateSnippetExecutorHyper
+
+ .align 4
+ .globl privateSnippetExecutorFloat
+privateSnippetExecutorFloat:
+ movl %esp,%ecx
+ pushl %ebp / proper stack frame needed for exception handling
+ movl %esp,%ebp
+ andl $0xFFFFFFF8,%esp / align following 64bit arg
+ subl $0x8,%esp / 64bit nRegReturn
+ pushl %ecx / 32bit pCallStack
+ pushl %edx / 32bit nVtableOffset
+ pushl %eax / 32bit nFunctionIndex
+ call cpp_vtable_call
+ flds 12(%esp) / 64 bit nRegReturn, lower half
+ leave
+ ret
+ .type privateSnippetExecutorFloat, @function
+ .size privateSnippetExecutorFloat, .-privateSnippetExecutorFloat
+
+ .align 4
+ .globl privateSnippetExecutorDouble
+privateSnippetExecutorDouble:
+ movl %esp,%ecx
+ pushl %ebp / proper stack frame needed for exception handling
+ movl %esp,%ebp
+ andl $0xFFFFFFF8,%esp / align following 64bit arg
+ subl $0x8,%esp / 64bit nRegReturn
+ pushl %ecx / 32bit pCallStack
+ pushl %edx / 32bit nVtableOffset
+ pushl %eax / 32bit nFunctionIndex
+ call cpp_vtable_call
+ fldl 12(%esp) / 64 bit nRegReturn
+ leave
+ ret
+ .type privateSnippetExecutorDouble, @function
+ .size privateSnippetExecutorDouble, .-privateSnippetExecutorDouble
+
+ .align 4
+ .globl privateSnippetExecutorStruct
+privateSnippetExecutorStruct:
+ movl %esp,%ecx
+ pushl %ebp / proper stack frame needed for exception handling
+ movl %esp,%ebp
+ andl $0xFFFFFFF8,%esp / align following 64bit arg
+ subl $0x8,%esp / 64bit nRegReturn
+ pushl %ecx / 32bit pCallStack
+ pushl %edx / 32bit nVtableOffset
+ pushl %eax / 32bit nFunctionIndex
+ call cpp_vtable_call
+ movl 12(%esp),%eax / 64 bit nRegReturn, lower half
+ leave
+ ret $4
+ .type privateSnippetExecutorStruct, @function
+ .size privateSnippetExecutorStruct, .-privateSnippetExecutorStruct
+
+ .align 4
+ .globl callVirtualMethod
+callVirtualMethod:
+ pushl %ebp
+ movl %esp, %ebp
+ subl $24, %esp
+ movl %edx, -4(%ebp)
+ movl %ecx, -8(%ebp)
+ movl %eax, -12(%ebp)
+ movl %esp, -16(%ebp)
+ movl %ebx, -20(%ebp)
+
+ / set ebx to GOT
+.L_GOT_BEGIN_2:
+ call .L_GOT_END_2
+.L_GOT_END_2:
+ popl %ebx
+ addl $_GLOBAL_OFFSET_TABLE_+[.-.L_GOT_END_2],%ebx
+.callBeginPosition:
+ movl 28(%ebp), %eax
+ movl %eax, %edx
+ dec %edx
+ shl $2, %edx
+ add 24(%ebp), %edx
+.copyLong:
+ movl 0(%edx), %ecx
+ sub $4, %edx
+ push %ecx
+ dec %eax
+ jne .copyLong
+.doCall:
+ movl 8(%ebp), %edx
+ movl 0(%edx), %edx
+ movl 12(%ebp), %eax
+ add $2, %eax
+ shl $2, %eax
+ add %eax, %edx
+ movl 0(%edx), %edx
+
+ call *%edx
+
+.callVirtualMethodExceptionPosition:
+ / handle returns
+ movl 20(%ebp), %ecx
+
+ / byte types
+ cmp $2, %ecx / typelib_TypeClass_BOOLEAN
+ je .handleByte
+ cmp $3, %ecx
+ je .handleByte / typelib_TypeClass_BYTE
+
+ / half word types
+ cmp $4, %ecx / typelib_TypeClass_SHORT
+ je .handleShort
+ cmp $5, %ecx / typelib_TypeClass_UNSIGNED_SHORT
+ je .handleShort
+
+ / word types
+ cmp $6, %ecx / typelib_TypeClass_LONG
+ je .handleWord
+ cmp $7, %ecx / typelib_TypeClass_UNSIGNED_LONG
+ je .handleWord
+ cmp $1, %ecx / typelib_TypeClass_CHAR (wchar_t)
+ je .handleWord
+ cmp $15, %ecx / typelib_TypeClass_ENUM
+ je .handleWord
+
+ / double word types
+ cmp $8, %ecx / typelib_TypeClass_HYPER
+ je .handleDoubleWord
+ cmp $9, %ecx / typelib_TypeClass_UNSIGNED_HYPER
+ je .handleDoubleWord
+
+ / float
+ cmp $10, %ecx / typelib_TypeClass_FLOAT
+ je .handleFloat
+
+ / double
+ cmp $11, %ecx / typelib_TypeClass_DOUBLE
+ je .handleDouble
+
+ / default: return void
+ jmp .doRestore
+.handleByte:
+ movl 16(%ebp), %ecx
+ movb %al, 0(%ecx)
+ jmp .doRestore
+.handleShort:
+ movl 16(%ebp), %ecx
+ movw %ax, 0(%ecx)
+ jmp .doRestore
+.handleWord:
+ movl 16(%ebp), %ecx
+ movl %eax, 0(%ecx)
+ jmp .doRestore
+.handleDoubleWord:
+ movl 16(%ebp), %ecx
+ movl %eax, 0(%ecx)
+ movl %edx, 4(%ecx)
+ jmp .doRestore
+.handleFloat:
+ movl 16(%ebp), %ecx
+ fstps 0(%ecx)
+ jmp .doRestore
+.handleDouble:
+ movl 16(%ebp), %ecx
+ fstpl 0(%ecx)
+ jmp .doRestore
+.doRestore:
+ movl -4(%ebp), %edx
+ movl -8(%ebp), %ecx
+ movl -12(%ebp), %eax
+ movl -20(%ebp), %ebx
+ movl %ebp, %esp
+ popl %ebp
+ ret
+ .type callVirtualMethod, @function
+ .size callVirtualMethod, .-callVirtualMethod
+
+ .globl callVirtualMethodExceptionHandler
+callVirtualMethodExceptionHandler:
+ movl -4(%ebp), %edx
+ movl -8(%ebp), %ecx
+ movl -12(%ebp), %eax
+ movl -16(%ebp), %esp
+ movl -20(%ebp), %ebx
+ call __1cG__CrunMex_rethrow_q6F_v_@PLT
+ ret
+
+ .type callVirtualMethodExceptionHandler, @function
+ .size callVirtualMethodExceptionHandler, .-callVirtualMethodExceptionHandler
+
+
+ .section .exception_ranges,"aw"
+ .align 4
+
+ .4byte .callBeginPosition@rel
+ .4byte .callVirtualMethodExceptionPosition-.callBeginPosition
+ .4byte callVirtualMethodExceptionHandler-.callBeginPosition
+ .zero 8
diff --git a/bridges/source/cpp_uno/cc50_solaris_intel/cc50_solaris_intel.hxx b/bridges/source/cpp_uno/cc50_solaris_intel/cc50_solaris_intel.hxx
new file mode 100644
index 000000000000..7abd0ffa2375
--- /dev/null
+++ b/bridges/source/cpp_uno/cc50_solaris_intel/cc50_solaris_intel.hxx
@@ -0,0 +1,73 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <cstddef>
+#include <rtl/string.hxx>
+#include <typeinfo>
+
+typedef struct _uno_Any uno_Any;
+typedef struct _uno_Mapping uno_Mapping;
+
+// private C50 structures and functions
+namespace __Crun
+{
+ struct static_type_info
+ {
+ std::ptrdiff_t m_pClassName;
+ int m_nSkip1; // must be 0
+ void* m_pMagic; // points to some magic data
+ int m_nMagic[ 4 ];
+ int m_nSkip2[2]; // must be 0
+ };
+ void* ex_alloc(unsigned);
+ void ex_throw( void*, const static_type_info*, void(*)(void*));
+ void* ex_get();
+ void ex_rethrow_q();
+}
+
+namespace __Cimpl
+{
+ const char* ex_name();
+}
+
+extern "C" void _ex_register( void*, int );
+
+namespace CPPU_CURRENT_NAMESPACE
+{
+
+//##################################################################################################
+//#### exceptions ##################################################################################
+//##################################################################################################
+
+void cc50_solaris_intel_raiseException(
+ uno_Any * pUnoExc, uno_Mapping * pUno2Cpp );
+
+void cc50_solaris_intel_fillUnoException(
+ void*, const char*,
+ uno_Any*, uno_Mapping * pCpp2Uno );
+}
+
diff --git a/bridges/source/cpp_uno/cc50_solaris_intel/cpp2uno.cxx b/bridges/source/cpp_uno/cc50_solaris_intel/cpp2uno.cxx
new file mode 100644
index 000000000000..06df5289bc00
--- /dev/null
+++ b/bridges/source/cpp_uno/cc50_solaris_intel/cpp2uno.cxx
@@ -0,0 +1,527 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_bridges.hxx"
+
+#include <sal/alloca.h>
+
+#include <com/sun/star/uno/genfunc.hxx>
+#include <uno/data.h>
+#include <typelib/typedescription.hxx>
+
+#include "bridges/cpp_uno/shared/bridge.hxx"
+#include "bridges/cpp_uno/shared/cppinterfaceproxy.hxx"
+#include "bridges/cpp_uno/shared/types.hxx"
+#include "bridges/cpp_uno/shared/vtablefactory.hxx"
+
+#include "cc50_solaris_intel.hxx"
+
+using namespace com::sun::star::uno;
+
+namespace
+{
+
+//==================================================================================================
+void cpp2uno_call(
+ bridges::cpp_uno::shared::CppInterfaceProxy * pThis,
+ const typelib_TypeDescription * pMemberTypeDescr,
+ typelib_TypeDescriptionReference * pReturnTypeRef, // 0 indicates void return
+ sal_Int32 nParams, typelib_MethodParameter * pParams,
+ void ** pCallStack,
+ sal_Int64 * pRegisterReturn /* space for register return */ )
+{
+ // pCallStack: ret, [return ptr], this, params
+ char * pCppStack = (char *)(pCallStack +1);
+
+ // return
+ typelib_TypeDescription * pReturnTypeDescr = 0;
+ if (pReturnTypeRef)
+ TYPELIB_DANGER_GET( &pReturnTypeDescr, pReturnTypeRef );
+
+ void * pUnoReturn = 0;
+ void * pCppReturn = 0; // complex return ptr: if != 0 && != pUnoReturn, reconversion need
+
+ if (pReturnTypeDescr)
+ {
+ if (bridges::cpp_uno::shared::isSimpleType( pReturnTypeDescr ))
+ {
+ pUnoReturn = pRegisterReturn; // direct way for simple types
+ }
+ else // complex return via ptr (pCppReturn)
+ {
+ pCppReturn = *(void**)pCppStack;
+ pCppStack += sizeof( void* );
+ pUnoReturn = (bridges::cpp_uno::shared::relatesToInterfaceType(
+ pReturnTypeDescr )
+ ? alloca( pReturnTypeDescr->nSize )
+ : pCppReturn); // direct way
+ }
+ }
+ // pop this
+ pCppStack += sizeof( void* );
+
+ // stack space
+ OSL_ENSURE( sizeof(void *) == sizeof(sal_Int32), "### unexpected size!" );
+ // parameters
+ void ** pUnoArgs = (void **)alloca( 4 * sizeof(void *) * nParams );
+ void ** pCppArgs = pUnoArgs + nParams;
+ // indizes of values this have to be converted (interface conversion cpp<=>uno)
+ sal_Int32 * pTempIndizes = (sal_Int32 *)(pUnoArgs + (2 * nParams));
+ // type descriptions for reconversions
+ typelib_TypeDescription ** ppTempParamTypeDescr = (typelib_TypeDescription **)(pUnoArgs + (3 * nParams));
+
+ sal_Int32 nTempIndizes = 0;
+
+ for ( sal_Int32 nPos = 0; nPos < nParams; ++nPos )
+ {
+ const typelib_MethodParameter & rParam = pParams[nPos];
+ typelib_TypeDescription * pParamTypeDescr = 0;
+ TYPELIB_DANGER_GET( &pParamTypeDescr, rParam.pTypeRef );
+
+ if (!rParam.bOut
+ && bridges::cpp_uno::shared::isSimpleType( pParamTypeDescr ))
+ // value
+ {
+ pCppArgs[ nPos ] = pUnoArgs[ nPos ] = pCppStack;
+ switch (pParamTypeDescr->eTypeClass)
+ {
+ case typelib_TypeClass_HYPER:
+ case typelib_TypeClass_UNSIGNED_HYPER:
+ case typelib_TypeClass_DOUBLE:
+ pCppStack += sizeof(sal_Int32); // extra long
+ }
+ // no longer needed
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ else // ptr to complex value | ref
+ {
+ pCppArgs[nPos] = *(void **)pCppStack;
+
+ if (! rParam.bIn) // is pure out
+ {
+ // uno out is unconstructed mem!
+ pUnoArgs[nPos] = alloca( pParamTypeDescr->nSize );
+ pTempIndizes[nTempIndizes] = nPos;
+ // will be released at reconversion
+ ppTempParamTypeDescr[nTempIndizes++] = pParamTypeDescr;
+ }
+ // is in/inout
+ else if (bridges::cpp_uno::shared::relatesToInterfaceType(
+ pParamTypeDescr ))
+ {
+ uno_copyAndConvertData( pUnoArgs[nPos] = alloca( pParamTypeDescr->nSize ),
+ *(void **)pCppStack, pParamTypeDescr,
+ pThis->getBridge()->getCpp2Uno() );
+ pTempIndizes[nTempIndizes] = nPos; // has to be reconverted
+ // will be released at reconversion
+ ppTempParamTypeDescr[nTempIndizes++] = pParamTypeDescr;
+ }
+ else // direct way
+ {
+ pUnoArgs[nPos] = *(void **)pCppStack;
+ // no longer needed
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ }
+ pCppStack += sizeof(sal_Int32); // standard parameter length
+ }
+
+ // ExceptionHolder
+ uno_Any aUnoExc; // Any will be constructed by callee
+ uno_Any * pUnoExc = &aUnoExc;
+
+ // invoke uno dispatch call
+ (*pThis->getUnoI()->pDispatcher)(
+ pThis->getUnoI(), pMemberTypeDescr, pUnoReturn, pUnoArgs, &pUnoExc );
+
+ // in case no exception occured...
+ if (pUnoExc)
+ {
+ // destruct temporary in/inout params
+ for ( ; nTempIndizes--; )
+ {
+ sal_Int32 nIndex = pTempIndizes[nTempIndizes];
+
+ if (pParams[nIndex].bIn) // is in/inout => was constructed
+ uno_destructData( pUnoArgs[nIndex], ppTempParamTypeDescr[nTempIndizes], 0 );
+ TYPELIB_DANGER_RELEASE( ppTempParamTypeDescr[nTempIndizes] );
+ }
+ if (pReturnTypeDescr)
+ TYPELIB_DANGER_RELEASE( pReturnTypeDescr );
+
+ CPPU_CURRENT_NAMESPACE::cc50_solaris_intel_raiseException(
+ &aUnoExc, pThis->getBridge()->getUno2Cpp() );
+ // has to destruct the any
+ }
+ else // else no exception occured...
+ {
+ // temporary params
+ for ( ; nTempIndizes--; )
+ {
+ sal_Int32 nIndex = pTempIndizes[nTempIndizes];
+ typelib_TypeDescription * pParamTypeDescr = ppTempParamTypeDescr[nTempIndizes];
+
+ if (pParams[nIndex].bOut) // inout/out
+ {
+ // convert and assign
+ uno_destructData(
+ pCppArgs[nIndex], pParamTypeDescr,
+ reinterpret_cast< uno_ReleaseFunc >(cpp_release) );
+ uno_copyAndConvertData( pCppArgs[nIndex], pUnoArgs[nIndex], pParamTypeDescr,
+ pThis->getBridge()->getUno2Cpp() );
+ }
+ // destroy temp uno param
+ uno_destructData( pUnoArgs[nIndex], pParamTypeDescr, 0 );
+
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ // return
+ if (pCppReturn) // has complex return
+ {
+ if (pUnoReturn != pCppReturn) // needs reconversion
+ {
+ uno_copyAndConvertData( pCppReturn, pUnoReturn, pReturnTypeDescr,
+ pThis->getBridge()->getUno2Cpp() );
+ // destroy temp uno return
+ uno_destructData( pUnoReturn, pReturnTypeDescr, 0 );
+ }
+ // complex return ptr is set to eax
+ *(void **)pRegisterReturn = pCppReturn;
+ }
+ if (pReturnTypeDescr)
+ {
+ TYPELIB_DANGER_RELEASE( pReturnTypeDescr );
+ }
+ }
+}
+
+
+//==================================================================================================
+extern "C" void cpp_vtable_call(
+ int nFunctionIndex, int nVtableOffset, void** pCallStack,
+ sal_Int64 nRegReturn )
+{
+ OSL_ENSURE( sizeof(sal_Int32)==sizeof(void *), "### unexpected!" );
+
+ // pCallStack: ret adr, [ret *], this, params
+ void * pThis;
+ if( nFunctionIndex & 0x80000000 )
+ {
+ nFunctionIndex &= 0x7fffffff;
+ pThis = pCallStack[2];
+ }
+ else
+ {
+ pThis = pCallStack[1];
+ }
+ pThis = static_cast< char * >(pThis) - nVtableOffset;
+ bridges::cpp_uno::shared::CppInterfaceProxy * pCppI
+ = bridges::cpp_uno::shared::CppInterfaceProxy::castInterfaceToProxy(
+ pThis);
+
+ typelib_InterfaceTypeDescription * pTypeDescr = pCppI->getTypeDescr();
+
+ OSL_ENSURE( nFunctionIndex < pTypeDescr->nMapFunctionIndexToMemberIndex,
+ "### illegal vtable index!" );
+ if (nFunctionIndex >= pTypeDescr->nMapFunctionIndexToMemberIndex)
+ {
+ throw RuntimeException( rtl::OUString::createFromAscii("illegal vtable index!"), (XInterface *)pThis );
+ }
+
+ // determine called method
+ sal_Int32 nMemberPos = pTypeDescr->pMapFunctionIndexToMemberIndex[nFunctionIndex];
+ OSL_ENSURE( nMemberPos < pTypeDescr->nAllMembers, "### illegal member index!" );
+
+ TypeDescription aMemberDescr( pTypeDescr->ppAllMembers[nMemberPos] );
+
+ switch (aMemberDescr.get()->eTypeClass)
+ {
+ case typelib_TypeClass_INTERFACE_ATTRIBUTE:
+ {
+ if (pTypeDescr->pMapMemberIndexToFunctionIndex[nMemberPos] == nFunctionIndex)
+ {
+ // is GET method
+ cpp2uno_call(
+ pCppI, aMemberDescr.get(),
+ ((typelib_InterfaceAttributeTypeDescription *)aMemberDescr.get())->pAttributeTypeRef,
+ 0, 0, // no params
+ pCallStack, &nRegReturn );
+ }
+ else
+ {
+ // is SET method
+ typelib_MethodParameter aParam;
+ aParam.pTypeRef =
+ ((typelib_InterfaceAttributeTypeDescription *)aMemberDescr.get())->pAttributeTypeRef;
+ aParam.bIn = sal_True;
+ aParam.bOut = sal_False;
+
+ cpp2uno_call(
+ pCppI, aMemberDescr.get(),
+ 0, // indicates void return
+ 1, &aParam,
+ pCallStack, &nRegReturn );
+ }
+ break;
+ }
+ case typelib_TypeClass_INTERFACE_METHOD:
+ {
+ // is METHOD
+ switch (nFunctionIndex)
+ {
+ // standard XInterface vtable calls
+ case 1: // acquire()
+ pCppI->acquireProxy(); // non virtual call!
+ break;
+ case 2: // release()
+ pCppI->releaseProxy(); // non virtual call!
+ break;
+ case 0: // queryInterface() opt
+ {
+ typelib_TypeDescription * pTD = 0;
+ TYPELIB_DANGER_GET( &pTD, reinterpret_cast< Type * >( pCallStack[3] )->getTypeLibType() );
+ if (pTD)
+ {
+ XInterface * pInterface = 0;
+ (*pCppI->getBridge()->getCppEnv()->getRegisteredInterface)(
+ pCppI->getBridge()->getCppEnv(),
+ (void **)&pInterface, pCppI->getOid().pData,
+ (typelib_InterfaceTypeDescription *)pTD );
+
+ if (pInterface)
+ {
+ ::uno_any_construct(
+ reinterpret_cast< uno_Any * >( pCallStack[1] ),
+ &pInterface, pTD,
+ reinterpret_cast< uno_AcquireFunc >(cpp_acquire) );
+ pInterface->release();
+ TYPELIB_DANGER_RELEASE( pTD );
+ *(void **)&nRegReturn = pCallStack[1];
+ break;
+ }
+ TYPELIB_DANGER_RELEASE( pTD );
+ }
+ } // else perform queryInterface()
+ default:
+ cpp2uno_call(
+ pCppI, aMemberDescr.get(),
+ ((typelib_InterfaceMethodTypeDescription *)aMemberDescr.get())->pReturnTypeRef,
+ ((typelib_InterfaceMethodTypeDescription *)aMemberDescr.get())->nParams,
+ ((typelib_InterfaceMethodTypeDescription *)aMemberDescr.get())->pParams,
+ pCallStack, &nRegReturn );
+ }
+ break;
+ }
+ default:
+ {
+ throw RuntimeException( rtl::OUString::createFromAscii("no member description found!"), (XInterface *)pThis );
+ }
+ }
+}
+
+//==================================================================================================
+bool isSimpleStruct(typelib_TypeDescriptionReference * type) {
+ typelib_TypeDescription * td = 0;
+ TYPELIB_DANGER_GET(&td, type);
+ OSL_ASSERT(td != 0);
+ for (typelib_CompoundTypeDescription * ctd
+ = reinterpret_cast< typelib_CompoundTypeDescription * >(td);
+ ctd != 0; ctd = ctd->pBaseTypeDescription)
+ {
+ OSL_ASSERT(ctd->aBase.eTypeClass == typelib_TypeClass_STRUCT);
+ for (sal_Int32 i = 0; i < ctd->nMembers; ++i) {
+ typelib_TypeClass c = ctd->ppTypeRefs[i]->eTypeClass;
+ switch (c) {
+ case typelib_TypeClass_STRING:
+ case typelib_TypeClass_TYPE:
+ case typelib_TypeClass_ANY:
+ case typelib_TypeClass_SEQUENCE:
+ case typelib_TypeClass_INTERFACE:
+ return false;
+ case typelib_TypeClass_STRUCT:
+ if (!isSimpleStruct(ctd->ppTypeRefs[i])) {
+ return false;
+ }
+ break;
+ default:
+ OSL_ASSERT(
+ c <= typelib_TypeClass_DOUBLE
+ || c == typelib_TypeClass_ENUM);
+ break;
+ }
+ }
+ }
+ TYPELIB_DANGER_RELEASE(td);
+ return true;
+}
+
+extern "C" void privateSnippetExecutorGeneral();
+extern "C" void privateSnippetExecutorVoid();
+extern "C" void privateSnippetExecutorHyper();
+extern "C" void privateSnippetExecutorFloat();
+extern "C" void privateSnippetExecutorDouble();
+extern "C" void privateSnippetExecutorStruct();
+extern "C" typedef void (*PrivateSnippetExecutor)();
+
+int const codeSnippetSize = 16;
+
+unsigned char * codeSnippet(
+ unsigned char * code, sal_Int32 functionIndex, sal_Int32 vtableOffset,
+ typelib_TypeDescriptionReference * returnType)
+{
+ typelib_TypeClass c = returnType == 0
+ ? typelib_TypeClass_VOID : returnType->eTypeClass;
+ if (returnType != 0 && !bridges::cpp_uno::shared::isSimpleType(c)) {
+ functionIndex |= 0x80000000;
+ }
+ PrivateSnippetExecutor exec;
+ switch (c) {
+ case typelib_TypeClass_VOID:
+ exec = privateSnippetExecutorVoid;
+ break;
+ case typelib_TypeClass_HYPER:
+ case typelib_TypeClass_UNSIGNED_HYPER:
+ exec = privateSnippetExecutorHyper;
+ break;
+ case typelib_TypeClass_FLOAT:
+ exec = privateSnippetExecutorFloat;
+ break;
+ case typelib_TypeClass_DOUBLE:
+ exec = privateSnippetExecutorDouble;
+ break;
+ case typelib_TypeClass_STRUCT:
+ OSL_ASSERT(returnType != 0);
+ // For "simple" (more-or-less POD, but not exactly) structs, the caller
+ // pops the pointer to the return value off the stack, as documented in
+ // the Intel SYSV ABI; for other structs (which includes STRING, TYPE,
+ // ANY, sequences, and interfaces, btw.), the callee pops the pointer to
+ // the return value off the stack:
+ exec = isSimpleStruct(returnType)
+ ? privateSnippetExecutorStruct : privateSnippetExecutorGeneral;
+ break;
+ default:
+ exec = privateSnippetExecutorGeneral;
+ break;
+ }
+ unsigned char * p = code;
+ OSL_ASSERT(sizeof (sal_Int32) == 4);
+ // mov function_index, %eax:
+ *p++ = 0xB8;
+ *reinterpret_cast< sal_Int32 * >(p) = functionIndex;
+ p += sizeof (sal_Int32);
+ // mov vtable_offset, %edx:
+ *p++ = 0xBA;
+ *reinterpret_cast< sal_Int32 * >(p) = vtableOffset;
+ p += sizeof (sal_Int32);
+ // jmp privateSnippetExecutor:
+ *p++ = 0xE9;
+#pragma disable_warn
+ void * e = reinterpret_cast< void * >(exec);
+#pragma enable_warn
+ *reinterpret_cast< sal_Int32 * >(p)
+ = static_cast< unsigned char * >(e) - p - sizeof (sal_Int32);
+ p += sizeof (sal_Int32);
+ OSL_ASSERT(p - code <= codeSnippetSize);
+ return code + codeSnippetSize;
+}
+
+}
+
+struct bridges::cpp_uno::shared::VtableFactory::Slot { void * fn; };
+
+bridges::cpp_uno::shared::VtableFactory::Slot *
+bridges::cpp_uno::shared::VtableFactory::mapBlockToVtable(void * block) {
+ return static_cast< Slot * >(block) + 1;
+}
+
+sal_Size bridges::cpp_uno::shared::VtableFactory::getBlockSize(
+ sal_Int32 slotCount)
+{
+ return (slotCount + 3) * sizeof (Slot) + slotCount * codeSnippetSize;
+}
+
+bridges::cpp_uno::shared::VtableFactory::Slot *
+bridges::cpp_uno::shared::VtableFactory::initializeBlock(
+ void * block, sal_Int32 slotCount)
+{
+ Slot * slots = mapBlockToVtable(block) + 2;
+ slots[-3].fn = 0; // RTTI
+ slots[-2].fn = 0; // null
+ slots[-1].fn = 0; // destructor
+ return slots + slotCount;
+}
+
+unsigned char * bridges::cpp_uno::shared::VtableFactory::addLocalFunctions(
+ Slot ** slots, unsigned char * code,
+ typelib_InterfaceTypeDescription const * type, sal_Int32 functionOffset,
+ sal_Int32 functionCount, sal_Int32 vtableOffset)
+{
+ (*slots) -= functionCount;
+ Slot * s = *slots;
+ for (sal_Int32 i = 0; i < type->nMembers; ++i) {
+ typelib_TypeDescription * member = 0;
+ TYPELIB_DANGER_GET(&member, type->ppMembers[i]);
+ OSL_ASSERT(member != 0);
+ switch (member->eTypeClass) {
+ case typelib_TypeClass_INTERFACE_ATTRIBUTE:
+ // Getter:
+ (s++)->fn = code;
+ code = codeSnippet(
+ code, functionOffset++, vtableOffset,
+ reinterpret_cast< typelib_InterfaceAttributeTypeDescription * >(
+ member)->pAttributeTypeRef);
+ // Setter:
+ if (!reinterpret_cast<
+ typelib_InterfaceAttributeTypeDescription * >(
+ member)->bReadOnly)
+ {
+ (s++)->fn = code;
+ code = codeSnippet(code, functionOffset++, vtableOffset, 0);
+ }
+ break;
+
+ case typelib_TypeClass_INTERFACE_METHOD:
+ (s++)->fn = code;
+ code = codeSnippet(
+ code, functionOffset++, vtableOffset,
+ reinterpret_cast< typelib_InterfaceMethodTypeDescription * >(
+ member)->pReturnTypeRef);
+ break;
+
+ default:
+ OSL_ASSERT(false);
+ break;
+ }
+ TYPELIB_DANGER_RELEASE(member);
+ }
+ return code;
+}
+
+void bridges::cpp_uno::shared::VtableFactory::flushCode(
+ unsigned char const *, unsigned char const *)
+{}
diff --git a/bridges/source/cpp_uno/cc50_solaris_intel/except.cxx b/bridges/source/cpp_uno/cc50_solaris_intel/except.cxx
new file mode 100644
index 000000000000..c598934b81b1
--- /dev/null
+++ b/bridges/source/cpp_uno/cc50_solaris_intel/except.cxx
@@ -0,0 +1,449 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_bridges.hxx"
+
+#include <cstddef>
+#include <dlfcn.h>
+#include <new.h>
+#include <typeinfo>
+#include <list>
+#include <map>
+#include <rtl/alloc.h>
+#include <osl/diagnose.h>
+
+#include <rtl/strbuf.hxx>
+#include <typelib/typedescription.hxx>
+#include <com/sun/star/uno/Any.hxx>
+
+#include "bridges/cpp_uno/shared/arraypointer.hxx"
+
+#include "cc50_solaris_intel.hxx"
+
+#include <hash.cxx>
+
+// need a += operator for OString and sal_Char
+namespace rtl
+{
+ inline OString& operator+=( OString& rString, sal_Char cAdd )
+ {
+ sal_Char add[2];
+ add[0] = cAdd;
+ add[1] = 0;
+ return rString += add;
+ }
+}
+
+using namespace std;
+using namespace osl;
+using namespace rtl;
+using namespace com::sun::star::uno;
+
+namespace CPPU_CURRENT_NAMESPACE
+{
+
+static OString toUNOname( const OString & rRTTIname )
+{
+ OString aRet;
+
+ const sal_Char* pRTTI = rRTTIname.getStr();
+ const sal_Char* pOrg = pRTTI;
+ const sal_Char* pLast = pRTTI;
+
+ while( 1 )
+ {
+ if( *pRTTI == ':' || ! *pRTTI )
+ {
+ if( aRet.getLength() )
+ aRet += ".";
+ aRet += rRTTIname.copy( pLast - pOrg, pRTTI - pLast );
+ while( *pRTTI == ':' )
+ pRTTI++;
+ pLast = pRTTI;
+ if( ! *pRTTI )
+ break;
+ }
+ else
+ pRTTI++;
+ }
+
+ return aRet;
+}
+//==================================================================================================
+static OString toRTTIname( const OString & rUNOname )
+{
+ OStringBuffer aRet( rUNOname.getLength()*2 );
+
+ sal_Int32 nIndex = 0;
+ do
+ {
+ if( nIndex > 0 )
+ aRet.append( "::" );
+ aRet.append( rUNOname.getToken( 0, '.', nIndex ) );
+ } while( nIndex != -1 );
+
+ return aRet.makeStringAndClear();
+}
+//==================================================================================================
+
+static OString toRTTImangledname( const OString & rRTTIname )
+{
+ if( ! rRTTIname.getLength() )
+ return OString();
+
+ OStringBuffer aRet( rRTTIname.getLength()*2 );
+
+ aRet.append( "__1n" );
+ sal_Int32 nIndex = 0;
+ do
+ {
+ OString aToken( rRTTIname.getToken( 0, ':', nIndex ) );
+ int nBytes = aToken.getLength();
+ if( nBytes )
+ {
+ if( nBytes > 25 )
+ {
+ aRet.append( (sal_Char)( nBytes/26 + 'a' ) );
+ aRet.append( (sal_Char)( nBytes%26 + 'A' ) );
+ }
+ else
+ aRet.append( (sal_Char)( nBytes + 'A' ) );
+ for (sal_Int32 i = 0; i < aToken.getLength(); ++i) {
+ char c = aToken[i];
+ if (c == 'Q') {
+ aRet.append("QdD");
+ } else {
+ aRet.append(c);
+ }
+ }
+ }
+ } while( nIndex != -1 );
+
+ aRet.append( '_' );
+
+ return aRet.makeStringAndClear();
+}
+
+//##################################################################################################
+//#### RTTI simulation #############################################################################
+//##################################################################################################
+
+class RTTIHolder
+{
+ std::map< OString, void* > aAllRTTI;
+public:
+ ~RTTIHolder();
+
+ void* getRTTI( const OString& rTypename );
+ void* getRTTI_UnoName( const OString& rUnoTypename )
+ { return getRTTI( toRTTIname( rUnoTypename ) ); }
+
+ void* insertRTTI( const OString& rTypename );
+ void* insertRTTI_UnoName( const OString& rTypename )
+ { return insertRTTI( toRTTIname( rTypename ) ); }
+ void* generateRTTI( typelib_CompoundTypeDescription* pCompTypeDescr );
+};
+
+RTTIHolder::~RTTIHolder()
+{
+ for ( std::map< OString, void* >::const_iterator iPos( aAllRTTI.begin() );
+ iPos != aAllRTTI.end(); ++iPos )
+ {
+ delete[] static_cast< char * >(iPos->second);
+ }
+}
+
+#if OSL_DEBUG_LEVEL > 1
+#include <stdio.h>
+#endif
+
+void* RTTIHolder::getRTTI( const OString& rTypename )
+{
+ std::map< OString, void* >::iterator element;
+
+ element = aAllRTTI.find( rTypename );
+ if( element != aAllRTTI.end() )
+ return (*element).second;
+
+ // create rtti structure
+ element = aAllRTTI.find( rTypename );
+ if( element != aAllRTTI.end() )
+ return (*element).second;
+
+ return NULL;
+}
+
+static long nMagicId = 1;
+
+void* RTTIHolder::insertRTTI( const OString& rTypename )
+{
+ OString aMangledName( toRTTImangledname( rTypename ) );
+ NIST_Hash aHash( aMangledName.getStr(), aMangledName.getLength() );
+
+
+ // rSuperTypename MUST exist !!!
+ std::size_t const RTTI_SIZE = 19; // 14???
+ void** pRTTI = reinterpret_cast< void ** >(
+ new char[RTTI_SIZE * sizeof (void *) + strlen(rTypename.getStr()) + 1]);
+ pRTTI[ 0 ] = reinterpret_cast< void * >(RTTI_SIZE * sizeof (void *));
+ pRTTI[ 1 ] = NULL;
+ pRTTI[ 2 ] = (void*)(7*sizeof(void*));
+ pRTTI[ 3 ] = (void*)aHash.getHash()[0];
+ pRTTI[ 4 ] = (void*)aHash.getHash()[1];
+ pRTTI[ 5 ] = (void*)aHash.getHash()[2];
+ pRTTI[ 6 ] = (void*)aHash.getHash()[3];
+ pRTTI[ 7 ] = NULL;
+ pRTTI[ 8 ] = NULL;
+
+ pRTTI[ 9 ] = pRTTI[ 3 ];
+ pRTTI[ 10 ] = pRTTI[ 4 ];
+ pRTTI[ 11 ] = pRTTI[ 5 ];
+ pRTTI[ 12 ] = pRTTI[ 6 ];
+ pRTTI[ 13 ] = (void*)0x80000000;
+ strcpy(reinterpret_cast< char * >(pRTTI + RTTI_SIZE), rTypename.getStr());
+
+ aAllRTTI[ rTypename ] = (void*)pRTTI;
+#if OSL_DEBUG_LEVEL > 1
+ fprintf( stderr,
+ "generating base RTTI for type %s:\n"
+ " mangled: %s\n"
+ " hash: %.8x %.8x %.8x %.8x\n",
+ rTypename.getStr(),
+ aMangledName.getStr(),
+ pRTTI[ 3 ], pRTTI[ 4 ], pRTTI[ 5 ], pRTTI[ 6 ]
+ );
+#endif
+ return pRTTI;
+}
+
+void* RTTIHolder::generateRTTI( typelib_CompoundTypeDescription * pCompTypeDescr )
+{
+ OString aUNOCompTypeName( OUStringToOString( pCompTypeDescr->aBase.pTypeName, RTL_TEXTENCODING_ASCII_US ) );
+ OString aRTTICompTypeName( toRTTIname( aUNOCompTypeName ) );
+
+ void* pHaveRTTI = getRTTI( aRTTICompTypeName );
+ if( pHaveRTTI )
+ return pHaveRTTI;
+
+ if( ! pCompTypeDescr->pBaseTypeDescription )
+ // this is a base type
+ return insertRTTI( aRTTICompTypeName );
+
+ // get base class RTTI
+ void* pSuperRTTI = generateRTTI( pCompTypeDescr->pBaseTypeDescription );
+ OSL_ENSURE( pSuperRTTI, "could not generate RTTI for supertype !" );
+
+ // find out the size to allocate for RTTI
+ void** pInherit = (void**)((sal_uInt32)pSuperRTTI + ((sal_uInt32*)pSuperRTTI)[2] + 8);
+ int nInherit;
+ for( nInherit = 1; pInherit[ nInherit*5-1 ] != (void*)0x80000000; nInherit++ )
+ ;
+
+ OString aMangledName( toRTTImangledname( aRTTICompTypeName ) );
+ NIST_Hash aHash( aMangledName.getStr(), aMangledName.getLength() );
+
+ std::size_t const rttiSize = 14 + nInherit * 5;
+ void** pRTTI = reinterpret_cast< void ** >(
+ new char[
+ rttiSize * sizeof (void *)
+ + strlen(aRTTICompTypeName.getStr()) + 1]);
+ pRTTI[ 0 ] = reinterpret_cast< void * >(rttiSize * sizeof (void *));
+ pRTTI[ 1 ] = NULL;
+ pRTTI[ 2 ] = (void*)(7*sizeof(void*));
+ pRTTI[ 3 ] = (void*)aHash.getHash()[0];
+ pRTTI[ 4 ] = (void*)aHash.getHash()[1];
+ pRTTI[ 5 ] = (void*)aHash.getHash()[2];
+ pRTTI[ 6 ] = (void*)aHash.getHash()[3];
+ pRTTI[ 7 ] = NULL;
+ pRTTI[ 8 ] = NULL;
+
+ memcpy( pRTTI+9, pInherit, 4*nInherit*5 );
+ pRTTI[ 8 +nInherit*5 ] = NULL;
+ pRTTI[ 9 +nInherit*5 ] = pRTTI[ 3 ];
+ pRTTI[ 10+nInherit*5 ] = pRTTI[ 4 ];
+ pRTTI[ 11+nInherit*5 ] = pRTTI[ 5 ];
+ pRTTI[ 12+nInherit*5 ] = pRTTI[ 6 ];
+ pRTTI[ 13+nInherit*5 ] = (void*)0x80000000;
+ strcpy(
+ reinterpret_cast< char * >(pRTTI + rttiSize),
+ aRTTICompTypeName.getStr());
+
+ aAllRTTI[ aRTTICompTypeName ] = (void*)pRTTI;
+
+#if OSL_DEBUG_LEVEL > 1
+ fprintf( stderr,
+ "generating struct RTTI for type %s:\n"
+ " mangled: %s\n"
+ " hash: %.8x %.8x %.8X %.8x\n",
+ aRTTICompTypeName.getStr(),
+ aMangledName.getStr(),
+ pRTTI[ 3 ], pRTTI[ 4 ], pRTTI[ 5 ], pRTTI[ 6 ]
+ );
+#endif
+
+ return pRTTI;
+}
+
+//__________________________________________________________________________________________________
+
+static void deleteException(
+ void* pExc, unsigned char* thunk, typelib_TypeDescription* pType )
+{
+ uno_destructData(
+ pExc, pType, reinterpret_cast< uno_ReleaseFunc >(cpp_release) );
+ typelib_typedescription_release( pType );
+ delete[] thunk;
+}
+
+//__________________________________________________________________________________________________
+
+//##################################################################################################
+//#### exported ####################################################################################
+//##################################################################################################
+
+void cc50_solaris_intel_raiseException( uno_Any * pUnoExc, uno_Mapping * pUno2Cpp )
+{
+#if OSL_DEBUG_LEVEL > 1
+ OString cstr(
+ OUStringToOString(
+ *reinterpret_cast< OUString const * >( &pUnoExc->pType->pTypeName ),
+ RTL_TEXTENCODING_ASCII_US ) );
+ fprintf( stderr, "> uno exception occured: %s\n", cstr.getStr() );
+#endif
+ bridges::cpp_uno::shared::ArrayPointer< unsigned char > thunkPtr(
+ new unsigned char[24]);
+ typelib_TypeDescription * pTypeDescr = 0;
+ // will be released by deleteException
+ typelib_typedescriptionreference_getDescription( &pTypeDescr, pUnoExc->pType );
+
+ void* pRTTI;
+ {
+ static ::osl::Mutex aMutex;
+ ::osl::Guard< ::osl::Mutex > guard( aMutex );
+
+ static RTTIHolder * s_pRTTI = 0;
+ if (! s_pRTTI)
+ {
+#ifdef LEAK_STATIC_DATA
+ s_pRTTI = new RTTIHolder();
+#else
+ static RTTIHolder s_aRTTI;
+ s_pRTTI = &s_aRTTI;
+#endif
+ }
+
+ pRTTI = s_pRTTI->generateRTTI( (typelib_CompoundTypeDescription *)pTypeDescr );
+ }
+
+ // a must be
+ OSL_ENSURE( sizeof(sal_Int32) == sizeof(void *), "### pointer size differs from sal_Int32!" );
+
+ void * pCppExc = __Crun::ex_alloc( pTypeDescr->nSize );
+ uno_copyAndConvertData( pCppExc, pUnoExc->pData, pTypeDescr, pUno2Cpp );
+
+ // destruct uno exception
+ uno_any_destruct( pUnoExc, 0 );
+
+ unsigned char * thunk = thunkPtr.release();
+ // movl %esp, %ecx:
+ thunk[0] = 0x8B;
+ thunk[1] = 0xCC;
+ // pushl pTypeDescr:
+ thunk[2] = 0x68;
+ *reinterpret_cast< void ** >(thunk + 3) = pTypeDescr;
+ // pushl thunk:
+ thunk[7] = 0x68;
+ *reinterpret_cast< void ** >(thunk + 8) = thunk;
+ // pushl 4(%ecx):
+ thunk[12] = 0xFF;
+ thunk[13] = 0x71;
+ thunk[14] = 0x04;
+ // call deleteException:
+ thunk[15] = 0xE8;
+#pragma disable_warn
+ void * d = reinterpret_cast< void * >(deleteException);
+#pragma enable_warn
+ *reinterpret_cast< std::ptrdiff_t * >(thunk + 16) =
+ static_cast< unsigned char * >(d) - (thunk + 20);
+ // addl $12, %esp:
+ thunk[20] = 0x83;
+ thunk[21] = 0xC4;
+ thunk[22] = 0x0C;
+ // ret:
+ thunk[23] = 0xC3;
+
+#pragma disable_warn
+ void (* f)(void *) = reinterpret_cast< void (*)(void *) >(thunk);
+#pragma enable_warn
+ __Crun::ex_throw(pCppExc, (const __Crun::static_type_info*)pRTTI, f);
+}
+
+void cc50_solaris_intel_fillUnoException(
+ void* pCppExc,
+ const char* pInfo,
+ uno_Any* pUnoExc,
+ uno_Mapping * pCpp2Uno )
+{
+ OSL_ASSERT( pInfo != 0 );
+ OString uno_name( toUNOname( pInfo ) );
+ OUString aName( OStringToOUString(
+ uno_name, RTL_TEXTENCODING_ASCII_US ) );
+ typelib_TypeDescription * pExcTypeDescr = 0;
+ typelib_typedescription_getByName( &pExcTypeDescr, aName.pData );
+
+ if (pExcTypeDescr == 0) // the thing that should not be
+ {
+ RuntimeException aRE(
+ OUString( RTL_CONSTASCII_USTRINGPARAM(
+ "exception type not found: ") ) + aName,
+ Reference< XInterface >() );
+ Type const & rType = ::getCppuType( &aRE );
+ uno_type_any_constructAndConvert(
+ pUnoExc, &aRE, rType.getTypeLibType(), pCpp2Uno );
+#if OSL_DEBUG_LEVEL > 0
+ OString cstr( OUStringToOString(
+ aRE.Message, RTL_TEXTENCODING_ASCII_US ) );
+ OSL_ENSURE( 0, cstr.getStr() );
+#endif
+ return;
+ }
+
+#if OSL_DEBUG_LEVEL > 1
+ fprintf( stderr, "> c++ exception occured: %s\n",
+ ::rtl::OUStringToOString(
+ pExcTypeDescr->pTypeName,
+ RTL_TEXTENCODING_ASCII_US ).getStr() );
+#endif
+ // construct uno exception any
+ uno_any_constructAndConvert(
+ pUnoExc, pCppExc, pExcTypeDescr, pCpp2Uno );
+ typelib_typedescription_release( pExcTypeDescr );
+}
+
+}
+
diff --git a/bridges/source/cpp_uno/cc50_solaris_intel/hash.cxx b/bridges/source/cpp_uno/cc50_solaris_intel/hash.cxx
new file mode 100644
index 000000000000..37f53da11141
--- /dev/null
+++ b/bridges/source/cpp_uno/cc50_solaris_intel/hash.cxx
@@ -0,0 +1,263 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_bridges.hxx"
+
+
+#ifndef TEST
+#ifndef _SAL_TYPES_H_
+#include <sal/types.h>
+#endif
+#else
+typedef unsigned int sal_uInt32;
+#endif
+
+#include <string.h>
+
+/*
+ * build a hash for a character buffer using the NIST algorithm
+ */
+
+class NIST_Hash
+{
+
+ // helper functions
+ sal_uInt32 f1( sal_uInt32 x, sal_uInt32 y, sal_uInt32 z )
+ {
+ return z ^ ( x & ( y ^ z ) );
+ }
+
+ sal_uInt32 f2( sal_uInt32 x, sal_uInt32 y, sal_uInt32 z )
+ {
+ return x ^ y ^ z;
+ }
+
+ sal_uInt32 f3( sal_uInt32 x, sal_uInt32 y, sal_uInt32 z )
+ {
+ return ( x & y ) + ( z & ( x ^ y ) );
+ }
+
+ sal_uInt32 rotl( sal_uInt32 nValue, sal_uInt32 nBits )
+ {
+ return ( nValue << nBits ) | ( nValue >> (32-nBits) );
+ }
+
+ sal_uInt32 expand_nostore( sal_uInt32 index )
+ {
+ return data[index&15] ^ data[(index-14)&15] ^ data[(index-8)&15] ^ data[(index-3)&15];
+ }
+
+ sal_uInt32 expand_store( sal_uInt32 index )
+ {
+ return data[index&15] ^= data[(index-14)&15] ^ data[(index-8)&15] ^ data[(index-3)&15];
+ }
+
+ void subRound( sal_uInt32 a, sal_uInt32& b, sal_uInt32 c, sal_uInt32 d, sal_uInt32& e, sal_uInt32 constant, sal_uInt32 datum, sal_uInt32 nFunction )
+ {
+ e += rotl(a,5);
+ switch( nFunction )
+ {
+ case 1: e += f1( b, c, d );break;
+ case 2:
+ case 4: e += f2( b, c, d );break;
+ case 3: e += f3( b, c, d );break;
+ }
+ e += constant + datum;
+ b = rotl( b, 30 );
+ }
+
+ void transform();
+ void final();
+
+ // data members
+ sal_uInt32 data[16];
+ sal_uInt32 hashdata[5];
+public:
+ NIST_Hash( const char* pString, sal_uInt32 nLen );
+
+ sal_uInt32 *getHash() { return hashdata; }
+};
+
+void NIST_Hash::transform()
+{
+ // constants
+ const sal_uInt32 K2 = 0x5A827999;
+ const sal_uInt32 K3 = 0x6ED9EBA1;
+ const sal_uInt32 K5 = 0x8F1BBCDC;
+ const sal_uInt32 K10 = 0xCA62C1D6;
+
+ sal_uInt32 a, b, c, d, e;
+ a = hashdata[0];
+ b = hashdata[1];
+ c = hashdata[2];
+ d = hashdata[3];
+ e = hashdata[4];
+
+ subRound( a, b, c, d, e, K2, data[ 0], 1 );
+ subRound( e, a, b, c, d, K2, data[ 1], 1 );
+ subRound( d, e, a, b, c, K2, data[ 2], 1 );
+ subRound( c, d, e, a, b, K2, data[ 3], 1 );
+ subRound( b, c, d, e, a, K2, data[ 4], 1 );
+ subRound( a, b, c, d, e, K2, data[ 5], 1 );
+ subRound( e, a, b, c, d, K2, data[ 6], 1 );
+ subRound( d, e, a, b, c, K2, data[ 7], 1 );
+ subRound( c, d, e, a, b, K2, data[ 8], 1 );
+ subRound( b, c, d, e, a, K2, data[ 9], 1 );
+ subRound( a, b, c, d, e, K2, data[10], 1 );
+ subRound( e, a, b, c, d, K2, data[11], 1 );
+ subRound( d, e, a, b, c, K2, data[12], 1 );
+ subRound( c, d, e, a, b, K2, data[13], 1 );
+ subRound( b, c, d, e, a, K2, data[14], 1 );
+ subRound( a, b, c, d, e, K2, data[15], 1 );
+ subRound( e, a, b, c, d, K2, expand_store( 16 ), 1 );
+ subRound( d, e, a, b, c, K2, expand_store( 17 ), 1 );
+ subRound( c, d, e, a, b, K2, expand_store( 18 ), 1 );
+ subRound( b, c, d, e, a, K2, expand_store( 19 ), 1 );
+
+ subRound( a, b, c, d, e, K3, expand_store( 20 ), 2 );
+ subRound( e, a, b, c, d, K3, expand_store( 21 ), 2 );
+ subRound( d, e, a, b, c, K3, expand_store( 22 ), 2 );
+ subRound( c, d, e, a, b, K3, expand_store( 23 ), 2 );
+ subRound( b, c, d, e, a, K3, expand_store( 24 ), 2 );
+ subRound( a, b, c, d, e, K3, expand_store( 25 ), 2 );
+ subRound( e, a, b, c, d, K3, expand_store( 26 ), 2 );
+ subRound( d, e, a, b, c, K3, expand_store( 27 ), 2 );
+ subRound( c, d, e, a, b, K3, expand_store( 28 ), 2 );
+ subRound( b, c, d, e, a, K3, expand_store( 29 ), 2 );
+ subRound( a, b, c, d, e, K3, expand_store( 30 ), 2 );
+ subRound( e, a, b, c, d, K3, expand_store( 31 ), 2 );
+ subRound( d, e, a, b, c, K3, expand_store( 32 ), 2 );
+ subRound( c, d, e, a, b, K3, expand_store( 33 ), 2 );
+ subRound( b, c, d, e, a, K3, expand_store( 34 ), 2 );
+ subRound( a, b, c, d, e, K3, expand_store( 35 ), 2 );
+ subRound( e, a, b, c, d, K3, expand_store( 36 ), 2 );
+ subRound( d, e, a, b, c, K3, expand_store( 37 ), 2 );
+ subRound( c, d, e, a, b, K3, expand_store( 38 ), 2 );
+ subRound( b, c, d, e, a, K3, expand_store( 39 ), 2 );
+
+ subRound( a, b, c, d, e, K5, expand_store( 40 ), 3 );
+ subRound( e, a, b, c, d, K5, expand_store( 41 ), 3 );
+ subRound( d, e, a, b, c, K5, expand_store( 42 ), 3 );
+ subRound( c, d, e, a, b, K5, expand_store( 43 ), 3 );
+ subRound( b, c, d, e, a, K5, expand_store( 44 ), 3 );
+ subRound( a, b, c, d, e, K5, expand_store( 45 ), 3 );
+ subRound( e, a, b, c, d, K5, expand_store( 46 ), 3 );
+ subRound( d, e, a, b, c, K5, expand_store( 47 ), 3 );
+ subRound( c, d, e, a, b, K5, expand_store( 48 ), 3 );
+ subRound( b, c, d, e, a, K5, expand_store( 49 ), 3 );
+ subRound( a, b, c, d, e, K5, expand_store( 50 ), 3 );
+ subRound( e, a, b, c, d, K5, expand_store( 51 ), 3 );
+ subRound( d, e, a, b, c, K5, expand_store( 52 ), 3 );
+ subRound( c, d, e, a, b, K5, expand_store( 53 ), 3 );
+ subRound( b, c, d, e, a, K5, expand_store( 54 ), 3 );
+ subRound( a, b, c, d, e, K5, expand_store( 55 ), 3 );
+ subRound( e, a, b, c, d, K5, expand_store( 56 ), 3 );
+ subRound( d, e, a, b, c, K5, expand_store( 57 ), 3 );
+ subRound( c, d, e, a, b, K5, expand_store( 58 ), 3 );
+ subRound( b, c, d, e, a, K5, expand_store( 59 ), 3 );
+
+ subRound( a, b, c, d, e, K10, expand_store( 60 ), 4 );
+ subRound( e, a, b, c, d, K10, expand_store( 61 ), 4 );
+ subRound( d, e, a, b, c, K10, expand_store( 62 ), 4 );
+ subRound( c, d, e, a, b, K10, expand_store( 63 ), 4 );
+ subRound( b, c, d, e, a, K10, expand_store( 64 ), 4 );
+ subRound( a, b, c, d, e, K10, expand_store( 65 ), 4 );
+ subRound( e, a, b, c, d, K10, expand_store( 66 ), 4 );
+ subRound( d, e, a, b, c, K10, expand_store( 67 ), 4 );
+ subRound( c, d, e, a, b, K10, expand_store( 68 ), 4 );
+ subRound( b, c, d, e, a, K10, expand_store( 69 ), 4 );
+ subRound( a, b, c, d, e, K10, expand_store( 70 ), 4 );
+ subRound( e, a, b, c, d, K10, expand_store( 71 ), 4 );
+ subRound( d, e, a, b, c, K10, expand_store( 72 ), 4 );
+ subRound( c, d, e, a, b, K10, expand_store( 73 ), 4 );
+ subRound( b, c, d, e, a, K10, expand_store( 74 ), 4 );
+ subRound( a, b, c, d, e, K10, expand_store( 75 ), 4 );
+ subRound( e, a, b, c, d, K10, expand_store( 76 ), 4 );
+ subRound( d, e, a, b, c, K10, expand_nostore( 77 ), 4 );
+ subRound( c, d, e, a, b, K10, expand_nostore( 78 ), 4 );
+ subRound( b, c, d, e, a, K10, expand_nostore( 79 ), 4 );
+
+ hashdata[0] += a;
+ hashdata[1] += b;
+ hashdata[2] += c;
+ hashdata[3] += d;
+ hashdata[4] += e;
+}
+
+#define BLOCKSIZE sizeof( data )
+
+NIST_Hash::NIST_Hash( const char* pString, sal_uInt32 nLen )
+{
+ hashdata[0] = 0x67452301;
+ hashdata[1] = 0xefcdab89;
+ hashdata[2] = 0x98badcfe;
+ hashdata[3] = 0x10325476;
+ hashdata[4] = 0xc3d2e1f0;
+
+ sal_uInt32 nBytes = nLen;
+
+ while( nLen >= sizeof( data ) )
+ {
+ memcpy( data, pString, sizeof( data ) );
+ pString += sizeof( data );
+ nLen -= sizeof( data );
+ transform();
+ }
+ memcpy( data, pString, nLen );
+ ((char*)data)[nLen++] = 0x80;
+ if( nLen > sizeof( data ) - 8 )
+ {
+ memset( ((char*)data)+nLen, 0, sizeof( data ) - nLen );
+ transform();
+ memset( data, 0, sizeof( data ) - 8 );
+ }
+ else
+ memset( ((char*)data)+nLen, 0, sizeof( data ) - 8 - nLen );
+ data[14] = 0;
+ data[15] = nBytes << 3;
+ transform();
+}
+
+#ifdef TEST
+#include <stdio.h>
+int main( int argc, const char** argv )
+{
+ const char* pHash = argc < 2 ? argv[0] : argv[1];
+
+ NIST_Hash aHash( pHash, strlen( pHash ) );
+ sal_uInt32* pBits = aHash.getHash();
+
+ printf( "text : %s\n"
+ "bits : 0x%.8x 0x%.8x 0x%.8x 0x%.8x 0x%.8x\n",
+ pHash,
+ pBits[0], pBits[1], pBits[2],pBits[3],pBits[4]
+ );
+ return 0;
+}
+
+#endif
diff --git a/bridges/source/cpp_uno/cc50_solaris_intel/makefile.mk b/bridges/source/cpp_uno/cc50_solaris_intel/makefile.mk
new file mode 100644
index 000000000000..e3d10f829187
--- /dev/null
+++ b/bridges/source/cpp_uno/cc50_solaris_intel/makefile.mk
@@ -0,0 +1,75 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..$/..$/..
+
+PRJNAME=bridges
+TARGET=sunpro5_uno
+LIBTARGET=no
+ENABLE_EXCEPTIONS=TRUE
+
+# --- Settings -----------------------------------------------------
+
+.INCLUDE : settings.mk
+
+# --- Files --------------------------------------------------------
+
+# disable check for PIC code as it would complain about
+# hand coded assembler
+CHECKFORPIC=
+
+.IF "$(COM)$(CPU)" == "C50I" || "$(COM)$(CPU)" == "C52I"
+
+CFLAGS += -O5 -xO5
+
+SLOFILES= \
+ $(SLO)$/cpp2uno.obj \
+ $(SLO)$/uno2cpp.obj \
+ $(SLO)$/except.obj \
+ $(SLO)$/call.obj
+
+SHL1TARGET= $(TARGET)
+
+SHL1DEF= $(MISC)$/$(SHL1TARGET).def
+SHL1IMPLIB= i$(TARGET)
+SHL1VERSIONMAP=..$/..$/bridge_exports.map
+SHL1RPATH= URELIB
+
+SHL1OBJS = $(SLOFILES)
+SHL1LIBS = $(SLB)$/cpp_uno_shared.lib
+
+SHL1STDLIBS= \
+ $(CPPULIB) \
+ $(SALLIB)
+
+.ENDIF
+
+.INCLUDE : target.mk
+
+$(SLO)$/%.obj: %.s
+ CC -c -o $(SLO)$/$(@:b).o $< && touch $@
+
diff --git a/bridges/source/cpp_uno/cc50_solaris_intel/uno2cpp.cxx b/bridges/source/cpp_uno/cc50_solaris_intel/uno2cpp.cxx
new file mode 100644
index 000000000000..401f77873c90
--- /dev/null
+++ b/bridges/source/cpp_uno/cc50_solaris_intel/uno2cpp.cxx
@@ -0,0 +1,418 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_bridges.hxx"
+
+#include <sal/alloca.h>
+
+#include <com/sun/star/uno/genfunc.hxx>
+#include "com/sun/star/uno/RuntimeException.hpp"
+#include <uno/data.h>
+
+#include "bridges/cpp_uno/shared/bridge.hxx"
+#include "bridges/cpp_uno/shared/types.hxx"
+#include "bridges/cpp_uno/shared/unointerfaceproxy.hxx"
+#include "bridges/cpp_uno/shared/vtables.hxx"
+
+#include "cc50_solaris_intel.hxx"
+
+using namespace rtl;
+using namespace com::sun::star::uno;
+
+namespace
+{
+
+extern "C" {
+ void callVirtualMethod(
+ void * pAdjustedThisPtr,
+ sal_Int32 nVtableIndex,
+ void * pRegisterReturn,
+ typelib_TypeClass eReturnType,
+ sal_Int32 * pStackLongs,
+ sal_Int32 nStackLongs
+ );
+}
+
+//==================================================================================================
+static inline void cpp_call(
+ bridges::cpp_uno::shared::UnoInterfaceProxy * pThis,
+ bridges::cpp_uno::shared::VtableSlot aVtableSlot,
+ typelib_TypeDescriptionReference * pReturnTypeRef,
+ sal_Int32 nParams, typelib_MethodParameter * pParams,
+ void * pUnoReturn, void * pUnoArgs[], uno_Any ** ppUnoExc )
+{
+ // max space for: [complex ret ptr], values|ptr ...
+ char * pCppStack = (char *)alloca( ((nParams+3) * sizeof(sal_Int64)) );
+ char * pCppStackStart = pCppStack;
+
+ // return
+ typelib_TypeDescription * pReturnTypeDescr = 0;
+ TYPELIB_DANGER_GET( &pReturnTypeDescr, pReturnTypeRef );
+ OSL_ENSURE( pReturnTypeDescr, "### expected return type description!" );
+
+ void * pCppReturn = 0; // if != 0 && != pUnoReturn, needs reconversion
+
+ void * pReturnSpace = 0;
+
+ if (pReturnTypeDescr)
+ {
+ if (bridges::cpp_uno::shared::isSimpleType( pReturnTypeDescr ))
+ {
+ pCppReturn = pUnoReturn; // direct way for simple types
+ }
+ else
+ {
+ // complex return via ptr
+ pCppReturn = *(void **)pCppStack
+ = (bridges::cpp_uno::shared::relatesToInterfaceType(
+ pReturnTypeDescr )
+ ? alloca( pReturnTypeDescr->nSize )
+ : pUnoReturn); // direct way
+ pCppStack += sizeof(void *);
+ }
+ }
+ // push this
+ void * pAdjustedThisPtr = reinterpret_cast< void ** >(pThis->getCppI())
+ + aVtableSlot.offset;
+ *(void**)pCppStack = pAdjustedThisPtr;
+ pCppStack += sizeof( void* );
+
+ const int nMaxParams = 32;
+ // args
+ void * args_buffer[3 * nMaxParams];
+ void ** pCppArgs = (void **)(nParams > nMaxParams ? rtl_allocateMemory( 3 * sizeof(void *) * nParams ) : args_buffer);
+ // indizes of values this have to be converted (interface conversion cpp<=>uno)
+ sal_Int32 * pTempIndizes = (sal_Int32 *)(pCppArgs + nParams);
+ // type descriptions for reconversions
+ typelib_TypeDescription ** ppTempParamTypeDescr = (typelib_TypeDescription **)(pCppArgs + (2 * nParams));
+
+ sal_Int32 nTempIndizes = 0;
+
+ const int nTempBufferSize = 256;
+ sal_Int32 nTempBufferPos = 0;
+ long params_buffer[nTempBufferSize];
+
+ for ( sal_Int32 nPos = 0; nPos < nParams; ++nPos )
+ {
+ const typelib_MethodParameter & rParam = pParams[nPos];
+ typelib_TypeDescription * pParamTypeDescr = 0;
+ TYPELIB_DANGER_GET( &pParamTypeDescr, rParam.pTypeRef );
+
+ if (!rParam.bOut
+ && bridges::cpp_uno::shared::isSimpleType( pParamTypeDescr ))
+ {
+ pCppArgs[ nPos ] = pCppStack;
+ uno_copyAndConvertData( pCppArgs[nPos], pUnoArgs[nPos], pParamTypeDescr,
+ pThis->getBridge()->getUno2Cpp() );
+
+ switch (pParamTypeDescr->eTypeClass)
+ {
+ case typelib_TypeClass_HYPER:
+ case typelib_TypeClass_UNSIGNED_HYPER:
+ case typelib_TypeClass_DOUBLE:
+ pCppStack += sizeof(sal_Int32); // extra long
+ }
+ // no longer needed
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ else // ptr to complex value | ref
+ {
+ if (! rParam.bIn) // is pure out
+ {
+ // cpp out is constructed mem, uno out is not!
+ if (pParamTypeDescr->nSize > (sizeof(long) * (nTempBufferSize - nTempBufferPos)))
+ {
+ uno_constructData(
+ *(void **)pCppStack = pCppArgs[nPos] = rtl_allocateMemory( pParamTypeDescr->nSize ),
+ pParamTypeDescr );
+ pTempIndizes[nTempIndizes] = nPos | 0x80000000; // default constructed for cpp call
+ }
+ else
+ {
+ uno_constructData(
+ *(void **)pCppStack = pCppArgs[nPos] = (params_buffer + nTempBufferPos),
+ pParamTypeDescr );
+ pTempIndizes[nTempIndizes] = nPos; // default constructed for cpp call
+ nTempBufferPos += (pParamTypeDescr->nSize / sizeof(long)) +1;
+ }
+ // will be released at reconversion
+ ppTempParamTypeDescr[nTempIndizes++] = pParamTypeDescr;
+ }
+ // is in/inout
+ else if (bridges::cpp_uno::shared::relatesToInterfaceType(
+ pParamTypeDescr ))
+ {
+ if (pParamTypeDescr->nSize > (sizeof(long)*(nTempBufferSize - nTempBufferPos)))
+ {
+ uno_copyAndConvertData(
+ *(void **)pCppStack = pCppArgs[nPos] = rtl_allocateMemory( pParamTypeDescr->nSize ),
+ pUnoArgs[nPos], pParamTypeDescr,
+ pThis->getBridge()->getUno2Cpp() );
+ pTempIndizes[nTempIndizes] = nPos | 0x80000000; // has to be reconverted
+ }
+ else
+ {
+ uno_copyAndConvertData(
+ *(void **)pCppStack = pCppArgs[nPos] = (params_buffer + nTempBufferPos),
+ pUnoArgs[nPos], pParamTypeDescr,
+ pThis->getBridge()->getUno2Cpp() );
+ pTempIndizes[nTempIndizes] = nPos; // has to be reconverted
+ nTempBufferPos += (pParamTypeDescr->nSize / sizeof(long)) +1;
+ }
+ // will be released at reconversion
+ ppTempParamTypeDescr[nTempIndizes++] = pParamTypeDescr;
+ }
+ else // direct way
+ {
+ *(void **)pCppStack = pCppArgs[nPos] = pUnoArgs[nPos];
+ // no longer needed
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ }
+ pCppStack += sizeof(sal_Int32); // standard parameter length
+ }
+
+ try
+ {
+ int nStackLongs = (pCppStack - pCppStackStart)/sizeof(sal_Int32);
+ if( nStackLongs & 1 )
+ // stack has to be 8 byte aligned
+ nStackLongs++;
+
+ callVirtualMethod(
+ pAdjustedThisPtr, aVtableSlot.index,
+ pCppReturn,
+ pReturnTypeDescr->eTypeClass,
+ (sal_Int32 *)pCppStackStart,
+ nStackLongs
+ );
+
+ // NO exception occured...
+ *ppUnoExc = 0;
+
+ // reconvert temporary params
+ for ( ; nTempIndizes--; )
+ {
+ sal_Int32 nIndex = pTempIndizes[nTempIndizes];
+ sal_Bool bAllocated = (nIndex & 0x80000000) != 0;
+ nIndex &= 0x7fffffff;
+ typelib_TypeDescription * pParamTypeDescr = ppTempParamTypeDescr[nTempIndizes];
+
+ if (pParams[nIndex].bIn)
+ {
+ if (pParams[nIndex].bOut) // inout
+ {
+ uno_destructData( pUnoArgs[nIndex], pParamTypeDescr, 0 ); // destroy uno value
+ uno_copyAndConvertData( pUnoArgs[nIndex], pCppArgs[nIndex], pParamTypeDescr,
+ pThis->getBridge()->getCpp2Uno() );
+ }
+ }
+ else // pure out
+ {
+ uno_copyAndConvertData( pUnoArgs[nIndex], pCppArgs[nIndex], pParamTypeDescr,
+ pThis->getBridge()->getCpp2Uno() );
+ }
+ // destroy temp cpp param => cpp: every param was constructed
+ uno_destructData(
+ pCppArgs[nIndex], pParamTypeDescr,
+ reinterpret_cast< uno_ReleaseFunc >(cpp_release) );
+
+ if (bAllocated)
+ rtl_freeMemory( pCppArgs[nIndex] );
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ // return value
+ if (pCppReturn && pUnoReturn != pCppReturn)
+ {
+ uno_copyAndConvertData( pUnoReturn, pCppReturn, pReturnTypeDescr,
+ pThis->getBridge()->getCpp2Uno() );
+ uno_destructData(
+ pCppReturn, pReturnTypeDescr,
+ reinterpret_cast< uno_ReleaseFunc >(cpp_release) );
+ }
+ }
+ catch( ... )
+ {
+ void* pExc = __Crun::ex_get();
+ const char* pName = __Cimpl::ex_name();
+
+ // get exception
+ CPPU_CURRENT_NAMESPACE::cc50_solaris_intel_fillUnoException(
+ pExc, pName, *ppUnoExc,
+ pThis->getBridge()->getCpp2Uno());
+
+ // temporary params
+ for ( ; nTempIndizes--; )
+ {
+ sal_Int32 nIndex = pTempIndizes[nTempIndizes];
+ sal_Bool bAllocated = (nIndex & 0x80000000) != 0;
+ nIndex &= 0x7fffffff;
+ // destroy temp cpp param => cpp: every param was constructed
+ uno_destructData(
+ pCppArgs[nIndex], ppTempParamTypeDescr[nTempIndizes],
+ reinterpret_cast< uno_ReleaseFunc >(cpp_release) );
+ if (bAllocated)
+ rtl_freeMemory( pCppArgs[nIndex] );
+ TYPELIB_DANGER_RELEASE( ppTempParamTypeDescr[nTempIndizes] );
+ }
+ // return type
+ if (pReturnTypeDescr)
+ TYPELIB_DANGER_RELEASE( pReturnTypeDescr );
+ }
+
+ if (pCppArgs != (void **)args_buffer)
+ rtl_freeMemory( pCppArgs );
+ if (pReturnSpace)
+ rtl_freeMemory( pReturnSpace );
+}
+
+}
+
+namespace bridges { namespace cpp_uno { namespace shared {
+
+void unoInterfaceProxyDispatch(
+ uno_Interface * pUnoI, const typelib_TypeDescription * pMemberDescr,
+ void * pReturn, void * pArgs[], uno_Any ** ppException )
+{
+ // is my surrogate
+ bridges::cpp_uno::shared::UnoInterfaceProxy * pThis
+ = static_cast< bridges::cpp_uno::shared::UnoInterfaceProxy * >(pUnoI);
+ typelib_InterfaceTypeDescription * pTypeDescr = pThis->pTypeDescr;
+
+ switch (pMemberDescr->eTypeClass)
+ {
+ case typelib_TypeClass_INTERFACE_ATTRIBUTE:
+ {
+ VtableSlot aVtableSlot(
+ getVtableSlot(
+ reinterpret_cast<
+ typelib_InterfaceAttributeTypeDescription const * >(
+ pMemberDescr)));
+ if (pReturn)
+ {
+ // dependent dispatch
+ cpp_call(
+ pThis, aVtableSlot,
+ ((typelib_InterfaceAttributeTypeDescription *)pMemberDescr)->pAttributeTypeRef,
+ 0, 0, // no params
+ pReturn, pArgs, ppException );
+ }
+ else
+ {
+ // is SET
+ typelib_MethodParameter aParam;
+ aParam.pTypeRef =
+ ((typelib_InterfaceAttributeTypeDescription *)pMemberDescr)->pAttributeTypeRef;
+ aParam.bIn = sal_True;
+ aParam.bOut = sal_False;
+
+ typelib_TypeDescriptionReference * pReturnTypeRef = 0;
+ OUString aVoidName( RTL_CONSTASCII_USTRINGPARAM("void") );
+ typelib_typedescriptionreference_new(
+ &pReturnTypeRef, typelib_TypeClass_VOID, aVoidName.pData );
+
+ // dependent dispatch
+ aVtableSlot.index += 1; // get, then set method
+ cpp_call(
+ pThis, aVtableSlot,
+ pReturnTypeRef,
+ 1, &aParam,
+ pReturn, pArgs, ppException );
+
+ typelib_typedescriptionreference_release( pReturnTypeRef );
+ }
+
+ break;
+ }
+ case typelib_TypeClass_INTERFACE_METHOD:
+ {
+ VtableSlot aVtableSlot(
+ getVtableSlot(
+ reinterpret_cast<
+ typelib_InterfaceMethodTypeDescription const * >(
+ pMemberDescr)));
+ switch (aVtableSlot.index)
+ {
+ // standard calls
+ case 1: // acquire uno interface
+ (*pUnoI->acquire)( pUnoI );
+ *ppException = 0;
+ break;
+ case 2: // release uno interface
+ (*pUnoI->release)( pUnoI );
+ *ppException = 0;
+ break;
+ case 0: // queryInterface() opt
+ {
+ typelib_TypeDescription * pTD = 0;
+ TYPELIB_DANGER_GET( &pTD, reinterpret_cast< Type * >( pArgs[0] )->getTypeLibType() );
+ if (pTD)
+ {
+ uno_Interface * pInterface = 0;
+ (*pThis->pBridge->getUnoEnv()->getRegisteredInterface)(
+ pThis->pBridge->getUnoEnv(),
+ (void **)&pInterface, pThis->oid.pData, (typelib_InterfaceTypeDescription *)pTD );
+
+ if (pInterface)
+ {
+ ::uno_any_construct(
+ reinterpret_cast< uno_Any * >( pReturn ),
+ &pInterface, pTD, 0 );
+ (*pInterface->release)( pInterface );
+ TYPELIB_DANGER_RELEASE( pTD );
+ *ppException = 0;
+ break;
+ }
+ TYPELIB_DANGER_RELEASE( pTD );
+ }
+ } // else perform queryInterface()
+ default:
+ // dependent dispatch
+ cpp_call(
+ pThis, aVtableSlot,
+ ((typelib_InterfaceMethodTypeDescription *)pMemberDescr)->pReturnTypeRef,
+ ((typelib_InterfaceMethodTypeDescription *)pMemberDescr)->nParams,
+ ((typelib_InterfaceMethodTypeDescription *)pMemberDescr)->pParams,
+ pReturn, pArgs, ppException );
+ }
+ break;
+ }
+ default:
+ {
+ ::com::sun::star::uno::RuntimeException aExc(
+ OUString( RTL_CONSTASCII_USTRINGPARAM("illegal member type description!") ),
+ ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >() );
+
+ Type const & rExcType = ::getCppuType( &aExc );
+ // binary identical null reference
+ ::uno_type_any_construct( *ppException, &aExc, rExcType.getTypeLibType(), 0 );
+ }
+ }
+}
+
+} } }
diff --git a/bridges/source/cpp_uno/cc50_solaris_sparc/call.s b/bridges/source/cpp_uno/cc50_solaris_sparc/call.s
new file mode 100644
index 000000000000..be4027fda070
--- /dev/null
+++ b/bridges/source/cpp_uno/cc50_solaris_sparc/call.s
@@ -0,0 +1,199 @@
+.global privateSnippetExecutor
+.type privateSnippetExecutor,2
+privateSnippetExecutor:
+ ! save %sp, -96, %sp already done in code snippet
+ st %i0, [%fp+68]
+ st %i1, [%fp+72]
+ st %i2, [%fp+76]
+ st %i3, [%fp+80]
+ st %i4, [%fp+84]
+ st %i5, [%fp+88]
+ ! %o0: functionIndex, stored by code snippet
+ ! %o1: vtableOffset, stored by code snippet
+ call cpp_vtable_call
+ add %fp, 68, %o2
+.privateSnippetExecutorExceptionPosition:
+ subcc %o0, 11, %g0
+ be .double
+ subcc %o0, 10, %g0
+ be .float
+ ld [%fp+72], %i0
+ ld [%fp+76], %i1
+ ret
+ restore
+.double:
+ ldd [%fp+72], %f0
+ ret
+ restore
+.float:
+ ld [%fp+72], %f0
+ ret
+ restore
+.size privateSnippetExecutor,(.-privateSnippetExecutor)
+.align 8
+
+
+.global callVirtualMethod
+.type callVirtualMethod,2
+callVirtualMethod:
+ ! allocate FIRST stack to have own local registers
+ sethi %hi(-96), %g1
+ or %g1, %lo(-96), %g1
+ subcc %g1, %o5, %g1
+ subcc %g1, %o5, %g1
+ subcc %g1, %o5, %g1
+ subcc %g1, %o5, %g1
+ save %sp, %g1, %sp
+ ! copy stack longs if necessary
+ subcc %i5, 6, %l5
+ ble .copyRegisters
+ nop
+
+ ! prepare source location
+ add %i4, 24, %l4
+
+ ! prepare real stack
+ add %sp, 92, %l3
+
+.copyLong:
+ ld [%l4+0], %l0
+ st %l0, [%l3]
+ add %l4, 4, %l4
+ add %l3, 4, %l3
+ deccc %l5
+ bne .copyLong
+ nop
+.copyRegisters:
+ mov %i5, %l5
+ mov %i4, %l4
+
+ ld [%l4], %o0
+ add %l4, 4, %l4
+ deccc %l5
+ ble .doCall
+
+ ld [%l4], %o1
+ add %l4, 4, %l4
+ deccc %l5
+ ble .doCall
+
+ ld [%l4], %o2
+ add %l4, 4, %l4
+ deccc %l5
+ ble .doCall
+
+ ld [%l4], %o3
+ add %l4, 4, %l4
+ deccc %l5
+ ble .doCall
+
+ ld [%l4], %o4
+ add %l4, 4, %l4
+ deccc %l5
+ ble .doCall
+
+ ld [%l4], %o5
+ add %l4, 4, %l4
+
+ ! prepare complex return pointer
+ st %i2, [%sp+64]
+.doCall:
+ ! get virtual table entry
+ mov %i1, %l1
+ add %l1, 2, %l1
+ sll %l1, 2, %l1
+ ld [%i0], %l3
+ add %l3, %l1, %l1
+ ld [%l1], %l0
+ jmpl %l0,%o7
+ nop
+.callVirtualMethodExceptionPosition:
+ ! handle returns
+
+ !byte types
+ subcc %i3, 2, %l3 ! typelib_TypeClass_BOOLEAN
+ be .handleByte
+ subcc %i3, 3, %l3 ! typelib_TypeClass_BYTE
+ be .handleByte
+
+ ! half word types
+ subcc %i3, 4, %l3 ! typelib_TypeClass_SHORT
+ be .handleShort
+ subcc %i3, 5, %l3 ! typelib_TypeClass_UNSIGNED_SHORT
+ be .handleShort
+ subcc %i3, 1, %l3 ! typelib_TypeClass_CHAR (sal_Unicode==sal_uInt16)
+ be .handleShort
+
+ ! word types
+ subcc %i3, 6, %l3 ! typelib_TypeClass_LONG
+ be .handleWord
+ subcc %i3, 7, %l3 ! typelib_TypeClass_UNSIGNED_LONG
+ be .handleWord
+ subcc %i3, 15, %l3 ! typelib_TypeClass_ENUM
+ be .handleWord
+
+ ! double word types
+ subcc %i3, 8, %l3 ! typelib_TypeClass_HYPER
+ be .handleDoubleWord
+ subcc %i3, 9, %l3 ! typelib_TypeClass_UNSIGNED_HYPER
+ be .handleDoubleWord
+
+ ! float
+ subcc %i3, 10, %l3 ! typelib_TypeClass_FLOAT
+ be .handleFloat
+
+ ! double
+ subcc %i3, 11, %l3 ! typelib_TypeClass_DOUBLE
+ be .handleDouble
+
+ ! default: return void
+ nop ! empty prefetch
+ ba .doRestore
+ nop
+.handleByte:
+ stb %o0, [%i2]
+ ba .doRestore
+ nop
+.handleShort:
+ sth %o0, [%i2]
+ ba .doRestore
+ nop
+.handleWord:
+ st %o0, [%i2]
+ ba .doRestore
+ nop
+.handleDoubleWord:
+ st %o0, [%i2]
+ st %o1, [%i2+4]
+ ba .doRestore
+ nop
+.handleFloat:
+ st %f0, [%i2]
+ ba .doRestore
+ nop
+.handleDouble:
+ std %f0, [%fp-8]
+ ldd [%fp-8], %o0
+ st %o0, [%i2]
+ st %o1, [%i2+4]
+ ba .doRestore
+ nop
+.doRestore:
+ ret
+ restore ! stack frame for own locals
+.size callVirtualMethod,(.-callVirtualMethod)
+.align 8
+
+.rethrow_handler:
+ call __1cG__CrunMex_rethrow_q6F_v_
+ nop
+
+.section ".exception_ranges",#alloc
+.word %r_disp32(.privateSnippetExecutorExceptionPosition)
+.word 0
+.word .rethrow_handler-.privateSnippetExecutorExceptionPosition
+.word 0,0
+.word %r_disp32(.callVirtualMethodExceptionPosition)
+.word 0
+.word .rethrow_handler-.callVirtualMethodExceptionPosition
+.word 0,0
diff --git a/bridges/source/cpp_uno/cc50_solaris_sparc/cc50_solaris_sparc.hxx b/bridges/source/cpp_uno/cc50_solaris_sparc/cc50_solaris_sparc.hxx
new file mode 100644
index 000000000000..d327d0307c51
--- /dev/null
+++ b/bridges/source/cpp_uno/cc50_solaris_sparc/cc50_solaris_sparc.hxx
@@ -0,0 +1,87 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <cstddef>
+#include <rtl/string.hxx>
+#include <typeinfo>
+
+typedef struct _uno_Any uno_Any;
+typedef struct _uno_Mapping uno_Mapping;
+
+// private C50 structures and functions
+namespace __Crun
+{
+ struct static_type_info
+ {
+ std::ptrdiff_t m_pClassName;
+ int m_nSkip1; // must be 0
+ void* m_pMagic; // points to some magic data
+ int m_nMagic[ 4 ];
+ int m_nSkip2[2]; // must be 0
+ };
+ void* ex_alloc(unsigned);
+ void ex_throw( void*, const static_type_info*, void(*)(void*));
+ void* ex_get();
+ void ex_rethrow_q() throw();
+}
+
+namespace __Cimpl
+{
+ const char* ex_name();
+}
+
+extern "C" void _ex_register( void*, int );
+
+namespace CPPU_CURRENT_NAMESPACE
+{
+
+inline char* adjustPointer( char* pIn, typelib_TypeDescription* pType )
+{
+ switch( pType->nSize )
+ {
+ case 1: return pIn + 3;
+ case 2: return pIn + 2;
+ case 3: return pIn + 1;
+ // Huh ? perhaps a char[3] ? Though that would be a pointer
+ // well, we have it anyway for symmetry
+ }
+ return pIn;
+}
+
+//##################################################################################################
+//#### exceptions ##################################################################################
+//##################################################################################################
+
+void cc50_solaris_sparc_raiseException(
+ uno_Any * pUnoExc, uno_Mapping * pUno2Cpp );
+
+void cc50_solaris_sparc_fillUnoException(
+ void*, const char*,
+ uno_Any*, uno_Mapping * pCpp2Uno );
+
+}
+
diff --git a/bridges/source/cpp_uno/cc50_solaris_sparc/cpp2uno.cxx b/bridges/source/cpp_uno/cc50_solaris_sparc/cpp2uno.cxx
new file mode 100644
index 000000000000..df16b62bdf27
--- /dev/null
+++ b/bridges/source/cpp_uno/cc50_solaris_sparc/cpp2uno.cxx
@@ -0,0 +1,530 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_bridges.hxx"
+
+#include <sal/alloca.h>
+
+#include <com/sun/star/uno/genfunc.hxx>
+#include <uno/data.h>
+#include <typelib/typedescription.hxx>
+
+#include "bridges/cpp_uno/shared/bridge.hxx"
+#include "bridges/cpp_uno/shared/cppinterfaceproxy.hxx"
+#include "bridges/cpp_uno/shared/types.hxx"
+#include "bridges/cpp_uno/shared/vtablefactory.hxx"
+
+#include "cc50_solaris_sparc.hxx"
+#include "flushcode.hxx"
+
+using namespace com::sun::star::uno;
+
+namespace
+{
+
+//==================================================================================================
+static typelib_TypeClass cpp2uno_call(
+ bridges::cpp_uno::shared::CppInterfaceProxy * pThis,
+ const typelib_TypeDescription * pMemberTypeDescr,
+ typelib_TypeDescriptionReference * pReturnTypeRef, // 0 indicates void return
+ sal_Int32 nParams, typelib_MethodParameter * pParams,
+ void ** pCallStack,
+ sal_Int64 * pRegisterReturn /* space for register return */ )
+{
+ // pCallStack: [return ptr], this, params
+ char * pCppStack = (char *)pCallStack;
+
+ // return
+ typelib_TypeDescription * pReturnTypeDescr = 0;
+ if (pReturnTypeRef)
+ TYPELIB_DANGER_GET( &pReturnTypeDescr, pReturnTypeRef );
+
+ void * pUnoReturn = 0;
+ void * pCppReturn = 0; // complex return ptr: if != 0 && != pUnoReturn, reconversion need
+
+ if (pReturnTypeDescr)
+ {
+ if (bridges::cpp_uno::shared::isSimpleType( pReturnTypeDescr ))
+ {
+ pUnoReturn = pRegisterReturn; // direct way for simple types
+ }
+ else // complex return via ptr (pCppReturn)
+ {
+ pCppReturn = *pCallStack;
+ pCppStack += sizeof( void* );
+ pUnoReturn = (bridges::cpp_uno::shared::relatesToInterfaceType(
+ pReturnTypeDescr )
+ ? alloca( pReturnTypeDescr->nSize )
+ : pCppReturn); // direct way
+ }
+ }
+ // pop this
+ pCppStack += sizeof( void* );
+
+ // stack space
+ OSL_ENSURE( sizeof(void *) == sizeof(sal_Int32), "### unexpected size!" );
+ // parameters
+ void ** pUnoArgs = (void **)alloca( 4 * sizeof(void *) * nParams );
+ void ** pCppArgs = pUnoArgs + nParams;
+ // indizes of values this have to be converted (interface conversion cpp<=>uno)
+ sal_Int32 * pTempIndizes = (sal_Int32 *)(pUnoArgs + (2 * nParams));
+ // type descriptions for reconversions
+ typelib_TypeDescription ** ppTempParamTypeDescr = (typelib_TypeDescription **)(pUnoArgs + (3 * nParams));
+
+ sal_Int32 nTempIndizes = 0;
+
+ for ( sal_Int32 nPos = 0; nPos < nParams; ++nPos )
+ {
+ const typelib_MethodParameter & rParam = pParams[nPos];
+ typelib_TypeDescription * pParamTypeDescr = 0;
+ TYPELIB_DANGER_GET( &pParamTypeDescr, rParam.pTypeRef );
+
+ if (!rParam.bOut
+ && bridges::cpp_uno::shared::isSimpleType( pParamTypeDescr ))
+ // value
+ {
+ pCppArgs[ nPos ] = pUnoArgs[ nPos ] =
+ CPPU_CURRENT_NAMESPACE::adjustPointer(
+ pCppStack, pParamTypeDescr );
+ switch (pParamTypeDescr->eTypeClass)
+ {
+ case typelib_TypeClass_HYPER:
+ case typelib_TypeClass_UNSIGNED_HYPER:
+ case typelib_TypeClass_DOUBLE:
+ pCppStack += sizeof(sal_Int32); // extra long
+ }
+ // no longer needed
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ else // ptr to complex value | ref
+ {
+ pCppArgs[nPos] = *(void **)pCppStack;
+
+ if (! rParam.bIn) // is pure out
+ {
+ // uno out is unconstructed mem!
+ pUnoArgs[nPos] = alloca( pParamTypeDescr->nSize );
+ pTempIndizes[nTempIndizes] = nPos;
+ // will be released at reconversion
+ ppTempParamTypeDescr[nTempIndizes++] = pParamTypeDescr;
+ }
+ // is in/inout
+ else if (bridges::cpp_uno::shared::relatesToInterfaceType(
+ pParamTypeDescr ))
+ {
+ uno_copyAndConvertData( pUnoArgs[nPos] = alloca( pParamTypeDescr->nSize ),
+ *(void **)pCppStack, pParamTypeDescr,
+ pThis->getBridge()->getCpp2Uno() );
+ pTempIndizes[nTempIndizes] = nPos; // has to be reconverted
+ // will be released at reconversion
+ ppTempParamTypeDescr[nTempIndizes++] = pParamTypeDescr;
+ }
+ else // direct way
+ {
+ pUnoArgs[nPos] = *(void **)pCppStack;
+ // no longer needed
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ }
+ pCppStack += sizeof(sal_Int32); // standard parameter length
+ }
+
+ // ExceptionHolder
+ uno_Any aUnoExc; // Any will be constructed by callee
+ uno_Any * pUnoExc = &aUnoExc;
+
+ // invoke uno dispatch call
+ (*pThis->getUnoI()->pDispatcher)(
+ pThis->getUnoI(), pMemberTypeDescr, pUnoReturn, pUnoArgs, &pUnoExc );
+
+ // in case no exception occured...
+ if (pUnoExc)
+ {
+ // destruct temporary in/inout params
+ for ( ; nTempIndizes--; )
+ {
+ sal_Int32 nIndex = pTempIndizes[nTempIndizes];
+
+ if (pParams[nIndex].bIn) // is in/inout => was constructed
+ uno_destructData( pUnoArgs[nIndex], ppTempParamTypeDescr[nTempIndizes], 0 );
+ TYPELIB_DANGER_RELEASE( ppTempParamTypeDescr[nTempIndizes] );
+ }
+ if (pReturnTypeDescr)
+ TYPELIB_DANGER_RELEASE( pReturnTypeDescr );
+
+ CPPU_CURRENT_NAMESPACE::cc50_solaris_sparc_raiseException(
+ &aUnoExc, pThis->getBridge()->getUno2Cpp() );
+ // has to destruct the any
+ // is here for dummy
+ return typelib_TypeClass_VOID;
+ }
+ else // else no exception occured...
+ {
+ // temporary params
+ for ( ; nTempIndizes--; )
+ {
+ sal_Int32 nIndex = pTempIndizes[nTempIndizes];
+ typelib_TypeDescription * pParamTypeDescr = ppTempParamTypeDescr[nTempIndizes];
+
+ if (pParams[nIndex].bOut) // inout/out
+ {
+ // convert and assign
+ uno_destructData(
+ pCppArgs[nIndex], pParamTypeDescr,
+ reinterpret_cast< uno_ReleaseFunc >(cpp_release) );
+ uno_copyAndConvertData( pCppArgs[nIndex], pUnoArgs[nIndex], pParamTypeDescr,
+ pThis->getBridge()->getUno2Cpp() );
+ }
+ // destroy temp uno param
+ uno_destructData( pUnoArgs[nIndex], pParamTypeDescr, 0 );
+
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ // return
+ if (pCppReturn) // has complex return
+ {
+ if (pUnoReturn != pCppReturn) // needs reconversion
+ {
+ uno_copyAndConvertData( pCppReturn, pUnoReturn, pReturnTypeDescr,
+ pThis->getBridge()->getUno2Cpp() );
+ // destroy temp uno return
+ uno_destructData( pUnoReturn, pReturnTypeDescr, 0 );
+ }
+ // complex return ptr is set to eax
+ *(void **)pRegisterReturn = pCppReturn;
+ }
+ if (pReturnTypeDescr)
+ {
+ typelib_TypeClass eRet = (typelib_TypeClass)pReturnTypeDescr->eTypeClass;
+ TYPELIB_DANGER_RELEASE( pReturnTypeDescr );
+ return eRet;
+ }
+ else
+ return typelib_TypeClass_VOID;
+ }
+}
+
+
+//==================================================================================================
+static typelib_TypeClass cpp_mediate(
+ sal_Int32 nFunctionIndex,
+ sal_Int32 nVtableOffset,
+ void ** pCallStack,
+ sal_Int64 * pRegisterReturn /* space for register return */ )
+{
+ OSL_ENSURE( sizeof(sal_Int32)==sizeof(void *), "### unexpected!" );
+
+ // pCallStack: this, params
+ void * pThis;
+ if( nFunctionIndex & 0x80000000 )
+ {
+ nFunctionIndex &= 0x7fffffff;
+ pThis = pCallStack[1];
+ }
+ else
+ {
+ pThis = pCallStack[0];
+ }
+ pThis = static_cast< char * >(pThis) - nVtableOffset;
+ bridges::cpp_uno::shared::CppInterfaceProxy * pCppI
+ = bridges::cpp_uno::shared::CppInterfaceProxy::castInterfaceToProxy(
+ pThis);
+
+ typelib_InterfaceTypeDescription * pTypeDescr = pCppI->getTypeDescr();
+
+ OSL_ENSURE( nFunctionIndex < pTypeDescr->nMapFunctionIndexToMemberIndex,
+ "### illegal vtable index!" );
+// if (nFunctionIndex >= pTypeDescr->nMapFunctionIndexToMemberIndex)
+// {
+// RuntimeException aExc;
+// aExc.Message = OUString::createFromAscii("illegal vtable index!");
+// aExc.Context = (XInterface *)pThis;
+// throw aExc;
+// }
+
+ // determine called method
+ sal_Int32 nMemberPos = pTypeDescr->pMapFunctionIndexToMemberIndex[nFunctionIndex];
+ OSL_ENSURE( nMemberPos < pTypeDescr->nAllMembers, "### illegal member index!" );
+
+ TypeDescription aMemberDescr( pTypeDescr->ppAllMembers[nMemberPos] );
+
+ typelib_TypeClass eRet;
+ switch (aMemberDescr.get()->eTypeClass)
+ {
+ case typelib_TypeClass_INTERFACE_ATTRIBUTE:
+ {
+ if (pTypeDescr->pMapMemberIndexToFunctionIndex[nMemberPos] == nFunctionIndex)
+ {
+ // is GET method
+ eRet = cpp2uno_call(
+ pCppI, aMemberDescr.get(),
+ ((typelib_InterfaceAttributeTypeDescription *)aMemberDescr.get())->pAttributeTypeRef,
+ 0, 0, // no params
+ pCallStack, pRegisterReturn );
+ }
+ else
+ {
+ // is SET method
+ typelib_MethodParameter aParam;
+ aParam.pTypeRef =
+ ((typelib_InterfaceAttributeTypeDescription *)aMemberDescr.get())->pAttributeTypeRef;
+ aParam.bIn = sal_True;
+ aParam.bOut = sal_False;
+
+ eRet = cpp2uno_call(
+ pCppI, aMemberDescr.get(),
+ 0, // indicates void return
+ 1, &aParam,
+ pCallStack, pRegisterReturn );
+ }
+ break;
+ }
+ case typelib_TypeClass_INTERFACE_METHOD:
+ {
+ // is METHOD
+ switch (nFunctionIndex)
+ {
+ // standard XInterface vtable calls
+ case 1: // acquire()
+ pCppI->acquireProxy(); // non virtual call!
+ eRet = typelib_TypeClass_VOID;
+ break;
+ case 2: // release()
+ pCppI->releaseProxy(); // non virtual call!
+ eRet = typelib_TypeClass_VOID;
+ break;
+ case 0: // queryInterface() opt
+ {
+ typelib_TypeDescription * pTD = 0;
+ TYPELIB_DANGER_GET( &pTD, reinterpret_cast< Type * >( pCallStack[2] )->getTypeLibType() );
+ if (pTD)
+ {
+ XInterface * pInterface = 0;
+ (*pCppI->getBridge()->getCppEnv()->getRegisteredInterface)(
+ pCppI->getBridge()->getCppEnv(),
+ (void **)&pInterface, pCppI->getOid().pData,
+ (typelib_InterfaceTypeDescription *)pTD );
+
+ if (pInterface)
+ {
+ ::uno_any_construct(
+ reinterpret_cast< uno_Any * >( pCallStack[0] ),
+ &pInterface, pTD,
+ reinterpret_cast< uno_AcquireFunc >(cpp_acquire) );
+ pInterface->release();
+ TYPELIB_DANGER_RELEASE( pTD );
+ *(void **)pRegisterReturn = pCallStack[0];
+ eRet = typelib_TypeClass_ANY;
+ break;
+ }
+ TYPELIB_DANGER_RELEASE( pTD );
+ }
+ } // else perform queryInterface()
+ default:
+ eRet = cpp2uno_call(
+ pCppI, aMemberDescr.get(),
+ ((typelib_InterfaceMethodTypeDescription *)aMemberDescr.get())->pReturnTypeRef,
+ ((typelib_InterfaceMethodTypeDescription *)aMemberDescr.get())->nParams,
+ ((typelib_InterfaceMethodTypeDescription *)aMemberDescr.get())->pParams,
+ pCallStack, pRegisterReturn );
+ }
+ break;
+ }
+// default:
+// {
+// RuntimeException aExc;
+// aExc.Message = OUString::createFromAscii("no member description found!");
+// aExc.Context = (XInterface *)pThis;
+// throw aExc;
+// // is here for dummy
+// eRet = typelib_TypeClass_VOID;
+// }
+ }
+
+ return eRet;
+}
+
+}
+
+//==================================================================================================
+extern "C" int cpp_vtable_call(
+ int nFunctionIndex, int nVtableOffset, void** pCallStack )
+{
+ sal_Int64 nRegReturn;
+ typelib_TypeClass aType = cpp_mediate(
+ nFunctionIndex, nVtableOffset, pCallStack, &nRegReturn );
+ OSL_ASSERT( sizeof(void *) == sizeof(sal_Int32) );
+ switch( aType )
+ {
+ // move return value into register space
+ // (will be loaded by machine code snippet)
+ // Use pCallStack[1/2] instead of pCallStack[0/1], because the former is
+ // properly dword aligned:
+ case typelib_TypeClass_BOOLEAN:
+ case typelib_TypeClass_BYTE:
+ pCallStack[1] = (void*)*(char*)&nRegReturn;
+ break;
+ case typelib_TypeClass_CHAR:
+ case typelib_TypeClass_SHORT:
+ case typelib_TypeClass_UNSIGNED_SHORT:
+ pCallStack[1] = (void*)*(short*)&nRegReturn;
+ break;
+ case typelib_TypeClass_DOUBLE:
+ case typelib_TypeClass_HYPER:
+ case typelib_TypeClass_UNSIGNED_HYPER:
+ // move long to %i1
+ pCallStack[2] = ((void **)&nRegReturn)[ 1 ];
+ case typelib_TypeClass_FLOAT:
+ default:
+ // move long to %i0
+ pCallStack[1] = ((void **)&nRegReturn)[ 0 ];
+ break;
+ }
+ return aType;
+}
+
+//==================================================================================================
+namespace {
+
+extern "C" void privateSnippetExecutor();
+
+int const codeSnippetSize = 7 * 4;
+
+unsigned char * codeSnippet(
+ unsigned char * code, sal_Int32 functionIndex, sal_Int32 vtableOffset,
+ bool simpleRetType)
+{
+ sal_uInt32 index = functionIndex;
+ if (!simpleRetType) {
+ index |= 0x80000000;
+ }
+ unsigned int * p = reinterpret_cast< unsigned int * >(code);
+ OSL_ASSERT(sizeof (unsigned int) == 4);
+ // save %sp, -96, %sp ! 92 byte minimal stack frame, + 4 byte dword align:
+ *p++ = 0x9DE3BFA0;
+ // sethi %hi(privateSnippetExecutor), %l0:
+ *p++ = 0x21000000
+ | (reinterpret_cast< unsigned int >(privateSnippetExecutor) >> 10);
+ // sethi %hi(index), %o0:
+ *p++ = 0x11000000 | (index >> 10);
+ // or %o0, %lo(index), %o0:
+ *p++ = 0x90122000 | (index & 0x3FF);
+ // sethi %hi(vtableOffset), %o1:
+ *p++ = 0x13000000 | (vtableOffset >> 10);
+ // jmpl %l0, %lo(privateSnippetExecutor), %g0:
+ *p++ = 0x81C42000
+ | (reinterpret_cast< unsigned int >(privateSnippetExecutor) & 0x3FF);
+ // or %o1, %lo(vtableOffset), %o1:
+ *p++ = 0x92126000 | (vtableOffset & 0x3FF);
+ OSL_ASSERT(
+ reinterpret_cast< unsigned char * >(p) - code <= codeSnippetSize);
+ return code + codeSnippetSize;
+}
+
+}
+
+struct bridges::cpp_uno::shared::VtableFactory::Slot { void * fn; };
+
+bridges::cpp_uno::shared::VtableFactory::Slot *
+bridges::cpp_uno::shared::VtableFactory::mapBlockToVtable(void * block)
+{
+ return static_cast< Slot * >(block) + 1;
+}
+
+sal_Size bridges::cpp_uno::shared::VtableFactory::getBlockSize(
+ sal_Int32 slotCount)
+{
+ return (slotCount + 3) * sizeof (Slot) + slotCount * codeSnippetSize;
+}
+
+bridges::cpp_uno::shared::VtableFactory::Slot *
+bridges::cpp_uno::shared::VtableFactory::initializeBlock(
+ void * block, sal_Int32 slotCount)
+{
+ Slot * slots = mapBlockToVtable(block) + 2;
+ slots[-3].fn = 0; // RTTI
+ slots[-2].fn = 0; // null
+ slots[-1].fn = 0; // destructor
+ return slots + slotCount;
+}
+
+unsigned char * bridges::cpp_uno::shared::VtableFactory::addLocalFunctions(
+ Slot ** slots, unsigned char * code,
+ typelib_InterfaceTypeDescription const * type, sal_Int32 functionOffset,
+ sal_Int32 functionCount, sal_Int32 vtableOffset)
+{
+ (*slots) -= functionCount;
+ Slot * s = *slots;
+ for (sal_Int32 i = 0; i < type->nMembers; ++i) {
+ typelib_TypeDescription * member = 0;
+ TYPELIB_DANGER_GET(&member, type->ppMembers[i]);
+ OSL_ASSERT(member != 0);
+ switch (member->eTypeClass) {
+ case typelib_TypeClass_INTERFACE_ATTRIBUTE:
+ // Getter:
+ (s++)->fn = code;
+ code = codeSnippet(
+ code, functionOffset++, vtableOffset,
+ bridges::cpp_uno::shared::isSimpleType(
+ reinterpret_cast<
+ typelib_InterfaceAttributeTypeDescription * >(
+ member)->pAttributeTypeRef));
+ // Setter:
+ if (!reinterpret_cast<
+ typelib_InterfaceAttributeTypeDescription * >(
+ member)->bReadOnly)
+ {
+ (s++)->fn = code;
+ code = codeSnippet(code, functionOffset++, vtableOffset, true);
+ }
+ break;
+
+ case typelib_TypeClass_INTERFACE_METHOD:
+ (s++)->fn = code;
+ code = codeSnippet(
+ code, functionOffset++, vtableOffset,
+ bridges::cpp_uno::shared::isSimpleType(
+ reinterpret_cast<
+ typelib_InterfaceMethodTypeDescription * >(
+ member)->pReturnTypeRef));
+ break;
+
+ default:
+ OSL_ASSERT(false);
+ break;
+ }
+ TYPELIB_DANGER_RELEASE(member);
+ }
+ return code;
+}
+
+void bridges::cpp_uno::shared::VtableFactory::flushCode(
+ unsigned char const * begin, unsigned char const * end)
+{
+ bridges::cpp_uno::cc50_solaris_sparc::flushCode(begin, end);
+}
diff --git a/bridges/source/cpp_uno/cc50_solaris_sparc/except.cxx b/bridges/source/cpp_uno/cc50_solaris_sparc/except.cxx
new file mode 100644
index 000000000000..2ee6bb3614b6
--- /dev/null
+++ b/bridges/source/cpp_uno/cc50_solaris_sparc/except.cxx
@@ -0,0 +1,445 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_bridges.hxx"
+
+#include <cstddef>
+#include <dlfcn.h>
+#include <new.h>
+#include <typeinfo>
+#include <list>
+#include <map>
+#include <rtl/alloc.h>
+#include <osl/diagnose.h>
+#include <typelib/typedescription.hxx>
+#include <com/sun/star/uno/Any.hxx>
+#include "com/sun/star/uno/RuntimeException.hpp"
+
+#include "cc50_solaris_sparc.hxx"
+#include "flushcode.hxx"
+#include <rtl/strbuf.hxx>
+
+#include "bridges/cpp_uno/shared/arraypointer.hxx"
+
+#include <hash.cxx>
+
+// need a += operator for OString and sal_Char
+namespace rtl
+{
+ inline OString& operator+=( OString& rString, sal_Char cAdd )
+ {
+ sal_Char add[2];
+ add[0] = cAdd;
+ add[1] = 0;
+ return rString += add;
+ }
+}
+
+using namespace std;
+using namespace osl;
+using namespace rtl;
+using namespace com::sun::star::uno;
+
+namespace CPPU_CURRENT_NAMESPACE
+{
+
+//==================================================================================================
+static OString toUNOname( const OString & rRTTIname )
+{
+ OString aRet;
+
+ const sal_Char* pRTTI = rRTTIname.getStr();
+ const sal_Char* pOrg = pRTTI;
+ const sal_Char* pLast = pRTTI;
+
+ while( 1 )
+ {
+ if( *pRTTI == ':' || ! *pRTTI )
+ {
+ if( aRet.getLength() )
+ aRet += ".";
+ aRet += rRTTIname.copy( pLast - pOrg, pRTTI - pLast );
+ while( *pRTTI == ':' )
+ pRTTI++;
+ pLast = pRTTI;
+ if( ! *pRTTI )
+ break;
+ }
+ else
+ pRTTI++;
+ }
+
+ return aRet;
+}
+//==================================================================================================
+static OString toRTTIname( const OString & rUNOname )
+{
+ OStringBuffer aRet( rUNOname.getLength()*2 );
+
+ sal_Int32 nIndex = 0;
+ do
+ {
+ if( nIndex > 0 )
+ aRet.append( "::" );
+ aRet.append( rUNOname.getToken( 0, '.', nIndex ) );
+ } while( nIndex != -1 );
+
+ return aRet.makeStringAndClear();
+}
+//==================================================================================================
+
+static OString toRTTImangledname( const OString & rRTTIname )
+{
+ if( ! rRTTIname.getLength() )
+ return OString();
+
+ OStringBuffer aRet( rRTTIname.getLength()*2 );
+
+ aRet.append( "__1n" );
+ sal_Int32 nIndex = 0;
+ do
+ {
+ OString aToken( rRTTIname.getToken( 0, ':', nIndex ) );
+ int nBytes = aToken.getLength();
+ if( nBytes )
+ {
+ if( nBytes > 25 )
+ {
+ aRet.append( (sal_Char)( nBytes/26 + 'a' ) );
+ aRet.append( (sal_Char)( nBytes%26 + 'A' ) );
+ }
+ else
+ aRet.append( (sal_Char)( nBytes + 'A' ) );
+ for (sal_Int32 i = 0; i < aToken.getLength(); ++i) {
+ char c = aToken[i];
+ if (c == 'Q') {
+ aRet.append("QdD");
+ } else {
+ aRet.append(c);
+ }
+ }
+ }
+ } while( nIndex != -1 );
+
+ aRet.append( '_' );
+
+ return aRet.makeStringAndClear();
+}
+
+
+//##################################################################################################
+//#### RTTI simulation #############################################################################
+//##################################################################################################
+
+class RTTIHolder
+{
+ std::map< OString, void* > aAllRTTI;
+public:
+ ~RTTIHolder();
+
+ void* getRTTI( const OString& rTypename );
+ void* getRTTI_UnoName( const OString& rUnoTypename )
+ { return getRTTI( toRTTIname( rUnoTypename ) ); }
+
+ void* insertRTTI( const OString& rTypename );
+ void* insertRTTI_UnoName( const OString& rTypename )
+ { return insertRTTI( toRTTIname( rTypename ) ); }
+ void* generateRTTI( typelib_CompoundTypeDescription* pCompTypeDescr );
+};
+
+RTTIHolder::~RTTIHolder()
+{
+ for ( std::map< OString, void* >::const_iterator iPos( aAllRTTI.begin() );
+ iPos != aAllRTTI.end(); ++iPos )
+ {
+ delete[] static_cast< char * >(iPos->second);
+ }
+}
+
+#if OSL_DEBUG_LEVEL > 1
+#include <stdio.h>
+#endif
+
+void* RTTIHolder::getRTTI( const OString& rTypename )
+{
+ std::map< OString, void* >::iterator element;
+
+ element = aAllRTTI.find( rTypename );
+ if( element != aAllRTTI.end() )
+ return (*element).second;
+
+ // create rtti structure
+ element = aAllRTTI.find( rTypename );
+ if( element != aAllRTTI.end() )
+ return (*element).second;
+
+ return NULL;
+}
+
+void* RTTIHolder::insertRTTI( const OString& rTypename )
+{
+ OString aMangledName( toRTTImangledname( rTypename ) );
+ NIST_Hash aHash( aMangledName.getStr(), aMangledName.getLength() );
+
+ std::size_t const RTTI_SIZE = 19; // 14???
+ void** pRTTI = reinterpret_cast< void ** >(
+ new char[RTTI_SIZE * sizeof (void *) + strlen(rTypename.getStr()) + 1]);
+ pRTTI[ 0 ] = reinterpret_cast< void * >(RTTI_SIZE * sizeof (void *));
+ pRTTI[ 1 ] = NULL;
+ pRTTI[ 2 ] = (void*)(7*sizeof(void*));
+ pRTTI[ 3 ] = (void*)aHash.getHash()[0];
+ pRTTI[ 4 ] = (void*)aHash.getHash()[1];
+ pRTTI[ 5 ] = (void*)aHash.getHash()[2];
+ pRTTI[ 6 ] = (void*)aHash.getHash()[3];
+ pRTTI[ 7 ] = NULL;
+ pRTTI[ 8 ] = NULL;
+
+ pRTTI[ 9 ] = pRTTI[ 3 ];
+ pRTTI[ 10 ] = pRTTI[ 4 ];
+ pRTTI[ 11 ] = pRTTI[ 5 ];
+ pRTTI[ 12 ] = pRTTI[ 6 ];
+ pRTTI[ 13 ] = (void*)0x80000000;
+ strcpy(reinterpret_cast< char * >(pRTTI + RTTI_SIZE), rTypename.getStr());
+
+ aAllRTTI[ rTypename ] = (void*)pRTTI;
+#if OSL_DEBUG_LEVEL > 1
+ fprintf( stderr,
+ "generating base RTTI for type %s:\n"
+ " mangled: %s\n"
+ " hash: %.8x %.8x %.8x %.8x\n",
+ rTypename.getStr(),
+ aMangledName.getStr(),
+ pRTTI[ 3 ], pRTTI[ 4 ], pRTTI[ 5 ], pRTTI[ 6 ]
+ );
+#endif
+ return pRTTI;
+}
+
+//--------------------------------------------------------------------------------------------------
+
+void* RTTIHolder::generateRTTI( typelib_CompoundTypeDescription * pCompTypeDescr )
+{
+ OString aUNOCompTypeName( OUStringToOString( pCompTypeDescr->aBase.pTypeName, RTL_TEXTENCODING_ASCII_US ) );
+ OString aRTTICompTypeName( toRTTIname( aUNOCompTypeName ) );
+
+ void* pHaveRTTI = getRTTI( aRTTICompTypeName );
+ if( pHaveRTTI )
+ return pHaveRTTI;
+
+ if( ! pCompTypeDescr->pBaseTypeDescription )
+ // this is a base type
+ return insertRTTI( aRTTICompTypeName );
+
+ // get base class RTTI
+ void* pSuperRTTI = generateRTTI( pCompTypeDescr->pBaseTypeDescription );
+ OSL_ENSURE( pSuperRTTI, "could not generate RTTI for supertype !" );
+
+ // find out the size to allocate for RTTI
+ void** pInherit = (void**)((sal_uInt32)pSuperRTTI + ((sal_uInt32*)pSuperRTTI)[2] + 8);
+ int nInherit;
+ for( nInherit = 1; pInherit[ nInherit*5-1 ] != (void*)0x80000000; nInherit++ )
+ ;
+
+ OString aMangledName( toRTTImangledname( aRTTICompTypeName ) );
+ NIST_Hash aHash( aMangledName.getStr(), aMangledName.getLength() );
+
+ std::size_t const rttiSize = 14 + nInherit * 5;
+ void** pRTTI = reinterpret_cast< void ** >(
+ new char[
+ rttiSize * sizeof (void *)
+ + strlen(aRTTICompTypeName.getStr()) + 1]);
+ pRTTI[ 0 ] = reinterpret_cast< void * >(rttiSize * sizeof (void *));
+ pRTTI[ 1 ] = NULL;
+ pRTTI[ 2 ] = (void*)(7*sizeof(void*));
+ pRTTI[ 3 ] = (void*)aHash.getHash()[0];
+ pRTTI[ 4 ] = (void*)aHash.getHash()[1];
+ pRTTI[ 5 ] = (void*)aHash.getHash()[2];
+ pRTTI[ 6 ] = (void*)aHash.getHash()[3];
+ pRTTI[ 7 ] = NULL;
+ pRTTI[ 8 ] = NULL;
+
+ memcpy( pRTTI+9, pInherit, 4*nInherit*5 );
+ pRTTI[ 8 +nInherit*5 ] = NULL;
+ pRTTI[ 9 +nInherit*5 ] = pRTTI[ 3 ];
+ pRTTI[ 10+nInherit*5 ] = pRTTI[ 4 ];
+ pRTTI[ 11+nInherit*5 ] = pRTTI[ 5 ];
+ pRTTI[ 12+nInherit*5 ] = pRTTI[ 6 ];
+ pRTTI[ 13+nInherit*5 ] = (void*)0x80000000;
+ strcpy(
+ reinterpret_cast< char * >(pRTTI + rttiSize),
+ aRTTICompTypeName.getStr());
+
+ aAllRTTI[ aRTTICompTypeName ] = (void*)pRTTI;
+
+#if OSL_DEBUG_LEVEL > 1
+ fprintf( stderr,
+ "generating struct RTTI for type %s:\n"
+ " mangled: %s\n"
+ " hash: %.8x %.8x %.8X %.8x\n",
+ aRTTICompTypeName.getStr(),
+ aMangledName.getStr(),
+ pRTTI[ 3 ], pRTTI[ 4 ], pRTTI[ 5 ], pRTTI[ 6 ]
+ );
+#endif
+
+ return pRTTI;
+}
+
+//--------------------------------------------------------------------------------------------------
+
+static void deleteException(
+ void* pExc, unsigned int* thunk, typelib_TypeDescription* pType )
+{
+ uno_destructData(
+ pExc, pType, reinterpret_cast< uno_ReleaseFunc >(cpp_release) );
+ typelib_typedescription_release( pType );
+ delete[] thunk;
+}
+
+//__________________________________________________________________________________________________
+
+//##################################################################################################
+//#### exported ####################################################################################
+//##################################################################################################
+
+void cc50_solaris_sparc_raiseException( uno_Any * pUnoExc, uno_Mapping * pUno2Cpp )
+{
+#if OSL_DEBUG_LEVEL > 1
+ OString cstr(
+ OUStringToOString(
+ *reinterpret_cast< OUString const * >( &pUnoExc->pType->pTypeName ),
+ RTL_TEXTENCODING_ASCII_US ) );
+ fprintf( stderr, "> uno exception occured: %s\n", cstr.getStr() );
+#endif
+ bridges::cpp_uno::shared::ArrayPointer< unsigned int > thunkPtr(
+ new unsigned int[6]);
+
+ typelib_TypeDescription * pTypeDescr = 0;
+ // will be released by deleteException
+ typelib_typedescriptionreference_getDescription( &pTypeDescr, pUnoExc->pType );
+
+ void* pRTTI;
+ {
+ static ::osl::Mutex aMutex;
+ ::osl::Guard< ::osl::Mutex > guard( aMutex );
+
+ static RTTIHolder * s_pRTTI = 0;
+ if (! s_pRTTI)
+ {
+#ifdef LEAK_STATIC_DATA
+ s_pRTTI = new RTTIHolder();
+#else
+ static RTTIHolder s_aRTTI;
+ s_pRTTI = &s_aRTTI;
+#endif
+ }
+
+ pRTTI = s_pRTTI->generateRTTI( (typelib_CompoundTypeDescription *)pTypeDescr );
+ }
+
+ // a must be
+ OSL_ENSURE( sizeof(sal_Int32) == sizeof(void *), "### pointer size differs from sal_Int32!" );
+
+ void * pCppExc = __Crun::ex_alloc( pTypeDescr->nSize );
+ uno_copyAndConvertData( pCppExc, pUnoExc->pData, pTypeDescr, pUno2Cpp );
+
+ // destruct uno exception
+ uno_any_destruct( pUnoExc, 0 );
+
+ unsigned int * thunk = thunkPtr.release();
+ // sethi %hi(thunk), %o1:
+ thunk[0] = 0x13000000 | (reinterpret_cast< unsigned int >(thunk) >> 10);
+ // or %o1, %lo(thunk), %o1:
+ thunk[1] = 0x92126000 | (reinterpret_cast< unsigned int >(thunk) & 0x3FF);
+ // sethi %hi(pTypeDescr), %o2:
+ thunk[2] = 0x15000000
+ | (reinterpret_cast< unsigned int >(pTypeDescr) >> 10);
+ // sethi %hi(deleteException), %o3
+ thunk[3] = 0x17000000
+ | (reinterpret_cast< unsigned int >(deleteException) >> 10);
+ // jmpl %o3, %lo(deleteException), %g0
+ thunk[4] = 0x81C2E000
+ | (reinterpret_cast< unsigned int >(deleteException) & 0x3FF);
+ // or %o2, %lo(pTypeDescr), %o2:
+ thunk[5] = 0x9412A000
+ | (reinterpret_cast< unsigned int >(pTypeDescr) & 0x3FF);
+ bridges::cpp_uno::cc50_solaris_sparc::flushCode(thunk, thunk + 6);
+
+#pragma disable_warn
+ void (* f)(void *) = reinterpret_cast< void (*)(void *) >(thunk);
+#pragma enable_warn
+ __Crun::ex_throw(pCppExc, (const __Crun::static_type_info*)pRTTI, f);
+}
+
+void cc50_solaris_sparc_fillUnoException(
+ void* pCppExc,
+ const char* pInfo,
+ uno_Any* pUnoExc,
+ uno_Mapping * pCpp2Uno )
+{
+ OSL_ASSERT( pInfo != 0 );
+ OString uno_name( toUNOname( pInfo ) );
+ OUString aName( OStringToOUString(
+ uno_name, RTL_TEXTENCODING_ASCII_US ) );
+ typelib_TypeDescription * pExcTypeDescr = 0;
+ typelib_typedescription_getByName( &pExcTypeDescr, aName.pData );
+
+ if (pExcTypeDescr == 0) // the thing that should not be
+ {
+ RuntimeException aRE(
+ OUString( RTL_CONSTASCII_USTRINGPARAM(
+ "exception type not found: ") ) + aName,
+ Reference< XInterface >() );
+ Type const & rType = ::getCppuType( &aRE );
+ uno_type_any_constructAndConvert(
+ pUnoExc, &aRE, rType.getTypeLibType(), pCpp2Uno );
+#if OSL_DEBUG_LEVEL > 0
+ OString cstr( OUStringToOString(
+ aRE.Message, RTL_TEXTENCODING_ASCII_US ) );
+ OSL_ENSURE( 0, cstr.getStr() );
+#endif
+ return;
+ }
+
+#if OSL_DEBUG_LEVEL > 1
+ fprintf( stderr, "> c++ exception occured: %s\n",
+ ::rtl::OUStringToOString(
+ pExcTypeDescr->pTypeName,
+ RTL_TEXTENCODING_ASCII_US ).getStr() );
+#endif
+ // construct uno exception any
+ uno_any_constructAndConvert(
+ pUnoExc, pCppExc, pExcTypeDescr, pCpp2Uno );
+ typelib_typedescription_release( pExcTypeDescr );
+}
+
+}
+
+
+
+
diff --git a/bridges/source/cpp_uno/cc50_solaris_sparc/flushcode.hxx b/bridges/source/cpp_uno/cc50_solaris_sparc/flushcode.hxx
new file mode 100644
index 000000000000..af0c551f10df
--- /dev/null
+++ b/bridges/source/cpp_uno/cc50_solaris_sparc/flushcode.hxx
@@ -0,0 +1,48 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_BRIDGES_SOURCE_CPP_UNO_CC50_SOLARIS_SPARC_FLUSHCODE_HXX
+#define INCLUDED_BRIDGES_SOURCE_CPP_UNO_CC50_SOLARIS_SPARC_FLUSHCODE_HXX
+
+#include "sal/config.h"
+
+extern "C" void sync_instruction_memory(caddr_t addr, int len); // from libc
+
+namespace bridges { namespace cpp_uno { namespace cc50_solaris_sparc {
+
+/**
+ * Flush a region of memory into which code has been written dynamically.
+ */
+inline void flushCode(void const * begin, void const * end) {
+ sync_instruction_memory(
+ static_cast< caddr_t >(const_cast< void * >(begin)),
+ static_cast< char const * >(end) - static_cast< char const * >(begin));
+}
+
+} } }
+
+#endif
diff --git a/bridges/source/cpp_uno/cc50_solaris_sparc/hash.cxx b/bridges/source/cpp_uno/cc50_solaris_sparc/hash.cxx
new file mode 100644
index 000000000000..0d1c49a23c11
--- /dev/null
+++ b/bridges/source/cpp_uno/cc50_solaris_sparc/hash.cxx
@@ -0,0 +1,264 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_bridges.hxx"
+
+
+#ifndef TEST
+#ifndef _SAL_TYPES_H_
+#include <sal/types.h>
+#endif
+#else
+typedef unsigned int sal_uInt32;
+#endif
+
+#include <string.h>
+
+/*
+ * build a hash for a character buffer using the NIST algorithm
+ */
+
+class NIST_Hash
+{
+
+ // helper functions
+ sal_uInt32 f1( sal_uInt32 x, sal_uInt32 y, sal_uInt32 z )
+ {
+ return z ^ ( x & ( y ^ z ) );
+ }
+
+ sal_uInt32 f2( sal_uInt32 x, sal_uInt32 y, sal_uInt32 z )
+ {
+ return x ^ y ^ z;
+ }
+
+ sal_uInt32 f3( sal_uInt32 x, sal_uInt32 y, sal_uInt32 z )
+ {
+ return ( x & y ) + ( z & ( x ^ y ) );
+ }
+
+ sal_uInt32 rotl( sal_uInt32 nValue, sal_uInt32 nBits )
+ {
+ return ( nValue << nBits ) | ( nValue >> (32-nBits) );
+ }
+
+ sal_uInt32 expand_nostore( sal_uInt32 index )
+ {
+ return data[index&15] ^ data[(index-14)&15] ^ data[(index-8)&15] ^ data[(index-3)&15];
+ }
+
+ sal_uInt32 expand_store( sal_uInt32 index )
+ {
+ return data[index&15] ^= data[(index-14)&15] ^ data[(index-8)&15] ^ data[(index-3)&15];
+ }
+
+ void subRound( sal_uInt32 a, sal_uInt32& b, sal_uInt32 c, sal_uInt32 d, sal_uInt32& e, sal_uInt32 constant, sal_uInt32 datum, sal_uInt32 nFunction )
+ {
+ e += rotl(a,5);
+ switch( nFunction )
+ {
+ case 1: e += f1( b, c, d );break;
+ case 2:
+ case 4: e += f2( b, c, d );break;
+ case 3: e += f3( b, c, d );break;
+ }
+ e += constant + datum;
+ b = rotl( b, 30 );
+ }
+
+ void transform();
+ void final();
+
+ // data members
+ sal_uInt32 data[16];
+ sal_uInt32 hashdata[5];
+public:
+ NIST_Hash( const char* pString, sal_uInt32 nLen );
+
+ sal_uInt32 *getHash() { return hashdata; }
+};
+
+void NIST_Hash::transform()
+{
+ // constants
+ const sal_uInt32 K2 = 0x5A827999;
+ const sal_uInt32 K3 = 0x6ED9EBA1;
+ const sal_uInt32 K5 = 0x8F1BBCDC;
+ const sal_uInt32 K10 = 0xCA62C1D6;
+
+ sal_uInt32 a, b, c, d, e;
+ a = hashdata[0];
+ b = hashdata[1];
+ c = hashdata[2];
+ d = hashdata[3];
+ e = hashdata[4];
+
+ subRound( a, b, c, d, e, K2, data[ 0], 1 );
+ subRound( e, a, b, c, d, K2, data[ 1], 1 );
+ subRound( d, e, a, b, c, K2, data[ 2], 1 );
+ subRound( c, d, e, a, b, K2, data[ 3], 1 );
+ subRound( b, c, d, e, a, K2, data[ 4], 1 );
+ subRound( a, b, c, d, e, K2, data[ 5], 1 );
+ subRound( e, a, b, c, d, K2, data[ 6], 1 );
+ subRound( d, e, a, b, c, K2, data[ 7], 1 );
+ subRound( c, d, e, a, b, K2, data[ 8], 1 );
+ subRound( b, c, d, e, a, K2, data[ 9], 1 );
+ subRound( a, b, c, d, e, K2, data[10], 1 );
+ subRound( e, a, b, c, d, K2, data[11], 1 );
+ subRound( d, e, a, b, c, K2, data[12], 1 );
+ subRound( c, d, e, a, b, K2, data[13], 1 );
+ subRound( b, c, d, e, a, K2, data[14], 1 );
+ subRound( a, b, c, d, e, K2, data[15], 1 );
+ subRound( e, a, b, c, d, K2, expand_store( 16 ), 1 );
+ subRound( d, e, a, b, c, K2, expand_store( 17 ), 1 );
+ subRound( c, d, e, a, b, K2, expand_store( 18 ), 1 );
+ subRound( b, c, d, e, a, K2, expand_store( 19 ), 1 );
+
+ subRound( a, b, c, d, e, K3, expand_store( 20 ), 2 );
+ subRound( e, a, b, c, d, K3, expand_store( 21 ), 2 );
+ subRound( d, e, a, b, c, K3, expand_store( 22 ), 2 );
+ subRound( c, d, e, a, b, K3, expand_store( 23 ), 2 );
+ subRound( b, c, d, e, a, K3, expand_store( 24 ), 2 );
+ subRound( a, b, c, d, e, K3, expand_store( 25 ), 2 );
+ subRound( e, a, b, c, d, K3, expand_store( 26 ), 2 );
+ subRound( d, e, a, b, c, K3, expand_store( 27 ), 2 );
+ subRound( c, d, e, a, b, K3, expand_store( 28 ), 2 );
+ subRound( b, c, d, e, a, K3, expand_store( 29 ), 2 );
+ subRound( a, b, c, d, e, K3, expand_store( 30 ), 2 );
+ subRound( e, a, b, c, d, K3, expand_store( 31 ), 2 );
+ subRound( d, e, a, b, c, K3, expand_store( 32 ), 2 );
+ subRound( c, d, e, a, b, K3, expand_store( 33 ), 2 );
+ subRound( b, c, d, e, a, K3, expand_store( 34 ), 2 );
+ subRound( a, b, c, d, e, K3, expand_store( 35 ), 2 );
+ subRound( e, a, b, c, d, K3, expand_store( 36 ), 2 );
+ subRound( d, e, a, b, c, K3, expand_store( 37 ), 2 );
+ subRound( c, d, e, a, b, K3, expand_store( 38 ), 2 );
+ subRound( b, c, d, e, a, K3, expand_store( 39 ), 2 );
+
+ subRound( a, b, c, d, e, K5, expand_store( 40 ), 3 );
+ subRound( e, a, b, c, d, K5, expand_store( 41 ), 3 );
+ subRound( d, e, a, b, c, K5, expand_store( 42 ), 3 );
+ subRound( c, d, e, a, b, K5, expand_store( 43 ), 3 );
+ subRound( b, c, d, e, a, K5, expand_store( 44 ), 3 );
+ subRound( a, b, c, d, e, K5, expand_store( 45 ), 3 );
+ subRound( e, a, b, c, d, K5, expand_store( 46 ), 3 );
+ subRound( d, e, a, b, c, K5, expand_store( 47 ), 3 );
+ subRound( c, d, e, a, b, K5, expand_store( 48 ), 3 );
+ subRound( b, c, d, e, a, K5, expand_store( 49 ), 3 );
+ subRound( a, b, c, d, e, K5, expand_store( 50 ), 3 );
+ subRound( e, a, b, c, d, K5, expand_store( 51 ), 3 );
+ subRound( d, e, a, b, c, K5, expand_store( 52 ), 3 );
+ subRound( c, d, e, a, b, K5, expand_store( 53 ), 3 );
+ subRound( b, c, d, e, a, K5, expand_store( 54 ), 3 );
+ subRound( a, b, c, d, e, K5, expand_store( 55 ), 3 );
+ subRound( e, a, b, c, d, K5, expand_store( 56 ), 3 );
+ subRound( d, e, a, b, c, K5, expand_store( 57 ), 3 );
+ subRound( c, d, e, a, b, K5, expand_store( 58 ), 3 );
+ subRound( b, c, d, e, a, K5, expand_store( 59 ), 3 );
+
+ subRound( a, b, c, d, e, K10, expand_store( 60 ), 4 );
+ subRound( e, a, b, c, d, K10, expand_store( 61 ), 4 );
+ subRound( d, e, a, b, c, K10, expand_store( 62 ), 4 );
+ subRound( c, d, e, a, b, K10, expand_store( 63 ), 4 );
+ subRound( b, c, d, e, a, K10, expand_store( 64 ), 4 );
+ subRound( a, b, c, d, e, K10, expand_store( 65 ), 4 );
+ subRound( e, a, b, c, d, K10, expand_store( 66 ), 4 );
+ subRound( d, e, a, b, c, K10, expand_store( 67 ), 4 );
+ subRound( c, d, e, a, b, K10, expand_store( 68 ), 4 );
+ subRound( b, c, d, e, a, K10, expand_store( 69 ), 4 );
+ subRound( a, b, c, d, e, K10, expand_store( 70 ), 4 );
+ subRound( e, a, b, c, d, K10, expand_store( 71 ), 4 );
+ subRound( d, e, a, b, c, K10, expand_store( 72 ), 4 );
+ subRound( c, d, e, a, b, K10, expand_store( 73 ), 4 );
+ subRound( b, c, d, e, a, K10, expand_store( 74 ), 4 );
+ subRound( a, b, c, d, e, K10, expand_store( 75 ), 4 );
+ subRound( e, a, b, c, d, K10, expand_store( 76 ), 4 );
+ subRound( d, e, a, b, c, K10, expand_nostore( 77 ), 4 );
+ subRound( c, d, e, a, b, K10, expand_nostore( 78 ), 4 );
+ subRound( b, c, d, e, a, K10, expand_nostore( 79 ), 4 );
+
+ hashdata[0] += a;
+ hashdata[1] += b;
+ hashdata[2] += c;
+ hashdata[3] += d;
+ hashdata[4] += e;
+}
+
+#define BLOCKSIZE sizeof( data )
+
+NIST_Hash::NIST_Hash( const char* pString, sal_uInt32 nLen )
+{
+ hashdata[0] = 0x67452301;
+ hashdata[1] = 0xefcdab89;
+ hashdata[2] = 0x98badcfe;
+ hashdata[3] = 0x10325476;
+ hashdata[4] = 0xc3d2e1f0;
+
+ sal_uInt32 nBytes = nLen;
+
+ while( nLen >= sizeof( data ) )
+ {
+ memcpy( data, pString, sizeof( data ) );
+ pString += sizeof( data );
+ nLen -= sizeof( data );
+ transform();
+ }
+ memcpy( data, pString, nLen );
+ ((char*)data)[nLen++] = 0x80;
+ if( nLen > sizeof( data ) - 8 )
+ {
+ memset( ((char*)data)+nLen, 0, sizeof( data ) - nLen );
+ transform();
+ memset( data, 0, sizeof( data ) - 8 );
+ }
+ else
+ memset( ((char*)data)+nLen, 0, sizeof( data ) - 8 - nLen );
+ data[14] = 0;
+ data[15] = nBytes << 3;
+ transform();
+}
+
+#ifdef TEST
+#include <stdio.h>
+int main( int argc, const char** argv )
+{
+ const char* pHash = argc < 2 ? argv[0] : argv[1];
+
+ NIST_Hash aHash( pHash, strlen( pHash ) );
+ sal_uInt32* pBits = aHash.getHash();
+
+ printf( "text : %s\n"
+ "bits : 0x%.8x 0x%.8x 0x%.8x 0x%.8x 0x%.8x\n",
+ pHash,
+ pBits[0], pBits[1], pBits[2],pBits[3],pBits[4]
+ );
+ return 0;
+}
+
+#endif
diff --git a/bridges/source/cpp_uno/cc50_solaris_sparc/makefile.mk b/bridges/source/cpp_uno/cc50_solaris_sparc/makefile.mk
new file mode 100644
index 000000000000..2af2f29a02a3
--- /dev/null
+++ b/bridges/source/cpp_uno/cc50_solaris_sparc/makefile.mk
@@ -0,0 +1,80 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..$/..$/..
+
+PRJNAME=bridges
+TARGET=sunpro5_uno
+LIBTARGET=no
+ENABLE_EXCEPTIONS=TRUE
+
+# --- Settings -----------------------------------------------------
+
+.INCLUDE : settings.mk
+
+# --- Files --------------------------------------------------------
+
+# disable check for PIC code as it would complain about
+# hand coded assembler
+CHECKFORPIC=
+
+.IF "$(COM)" == "C52" && "$(CPU)"=="S"
+
+#CFLAGS += -O5 -xO5
+
+.IF "$(cppu_no_leak)" == ""
+CFLAGS += -DLEAK_STATIC_DATA
+.ENDIF
+
+SLOFILES= \
+ $(SLO)$/cpp2uno.obj \
+ $(SLO)$/uno2cpp.obj \
+ $(SLO)$/except.obj \
+ $(SLO)$/call.obj
+
+SHL1TARGET= $(TARGET)
+
+SHL1DEF= $(MISC)$/$(SHL1TARGET).def
+SHL1IMPLIB= i$(TARGET)
+SHL1VERSIONMAP=..$/..$/bridge_exports.map
+SHL1RPATH= URELIB
+
+SHL1OBJS = $(SLOFILES)
+SHL1LIBS = $(SLB)$/cpp_uno_shared.lib
+
+SHL1STDLIBS= \
+ $(CPPULIB) \
+ $(SALLIB)
+
+.ENDIF
+
+.INCLUDE : target.mk
+
+
+$(SLO)$/%.obj: %.s
+ CC -KPIC -c -o $(SLO)$/$(@:b).o $< && touch $@
+
diff --git a/bridges/source/cpp_uno/cc50_solaris_sparc/uno2cpp.cxx b/bridges/source/cpp_uno/cc50_solaris_sparc/uno2cpp.cxx
new file mode 100644
index 000000000000..896695540f90
--- /dev/null
+++ b/bridges/source/cpp_uno/cc50_solaris_sparc/uno2cpp.cxx
@@ -0,0 +1,396 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_bridges.hxx"
+
+#include <sal/alloca.h>
+
+#include <com/sun/star/uno/genfunc.hxx>
+#include "com/sun/star/uno/RuntimeException.hpp"
+#include <uno/data.h>
+
+#include "bridges/cpp_uno/shared/bridge.hxx"
+#include "bridges/cpp_uno/shared/types.hxx"
+#include "bridges/cpp_uno/shared/unointerfaceproxy.hxx"
+#include "bridges/cpp_uno/shared/vtables.hxx"
+
+#include "cc50_solaris_sparc.hxx"
+
+using namespace rtl;
+using namespace com::sun::star::uno;
+
+namespace
+{
+
+extern "C" void callVirtualMethod(
+ void * pAdjustedThisPtr,
+ sal_Int32 nVtableIndex,
+ void * pRegisterReturn,
+ typelib_TypeClass eReturnType,
+ sal_Int32 * pStackLongs,
+ sal_Int32 nStackLongs
+ );
+
+//==================================================================================================
+static void cpp_call(
+ bridges::cpp_uno::shared::UnoInterfaceProxy * pThis,
+ bridges::cpp_uno::shared::VtableSlot aVtableSlot,
+ typelib_TypeDescriptionReference * pReturnTypeRef,
+ sal_Int32 nParams, typelib_MethodParameter * pParams,
+ void * pUnoReturn, void * pUnoArgs[], uno_Any ** ppUnoExc )
+{
+ // pCppI is cc50_solaris_sparc this pointer
+ OSL_ENSURE( pThis, "### no interface given!" );
+
+ // max space for: [complex ret ptr], values|ptr ...
+ char * pCppStack = (char *)alloca( ((nParams+3) * sizeof(sal_Int64)) );
+ char * pCppStackStart = pCppStack;
+
+ // return
+ typelib_TypeDescription * pReturnTypeDescr = 0;
+ TYPELIB_DANGER_GET( &pReturnTypeDescr, pReturnTypeRef );
+ OSL_ENSURE( pReturnTypeDescr, "### expected return type description!" );
+
+ void * pCppReturn = 0; // if != 0 && != pUnoReturn, needs reconversion
+
+ if (pReturnTypeDescr)
+ {
+ if (bridges::cpp_uno::shared::isSimpleType( pReturnTypeDescr ))
+ {
+ pCppReturn = pUnoReturn; // direct way for simple types
+ }
+ else
+ {
+ // complex return via ptr
+ pCppReturn = *(void **)pCppStack
+ = (bridges::cpp_uno::shared::relatesToInterfaceType(
+ pReturnTypeDescr )
+ ? alloca( pReturnTypeDescr->nSize )
+ : pUnoReturn); // direct way
+ pCppStack += sizeof(void *);
+ }
+ }
+ // push this
+ void * pAdjustedThisPtr = reinterpret_cast< void ** >(pThis->getCppI())
+ + aVtableSlot.offset;
+ *(void**)pCppStack = pAdjustedThisPtr;
+ pCppStack += sizeof( void* );
+
+ // args
+ void ** pCppArgs = (void **)alloca( 3 * sizeof(void *) * nParams );
+ // indizes of values this have to be converted (interface conversion cpp<=>uno)
+ sal_Int32 * pTempIndizes = (sal_Int32 *)(pCppArgs + nParams);
+ // type descriptions for reconversions
+ typelib_TypeDescription ** ppTempParamTypeDescr = (typelib_TypeDescription **)(pCppArgs + (2 * nParams));
+
+ sal_Int32 nTempIndizes = 0;
+
+ for ( sal_Int32 nPos = 0; nPos < nParams; ++nPos )
+ {
+ const typelib_MethodParameter & rParam = pParams[nPos];
+ typelib_TypeDescription * pParamTypeDescr = 0;
+ TYPELIB_DANGER_GET( &pParamTypeDescr, rParam.pTypeRef );
+
+ if (!rParam.bOut
+ && bridges::cpp_uno::shared::isSimpleType( pParamTypeDescr ))
+ {
+ pCppArgs[ nPos ] = CPPU_CURRENT_NAMESPACE::adjustPointer(
+ pCppStack, pParamTypeDescr );
+ uno_copyAndConvertData( pCppArgs[nPos], pUnoArgs[nPos], pParamTypeDescr,
+ pThis->getBridge()->getUno2Cpp() );
+
+ switch (pParamTypeDescr->eTypeClass)
+ {
+ case typelib_TypeClass_HYPER:
+ case typelib_TypeClass_UNSIGNED_HYPER:
+ case typelib_TypeClass_DOUBLE:
+ pCppStack += sizeof(sal_Int32); // extra long
+ }
+ // no longer needed
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ else // ptr to complex value | ref
+ {
+ if (! rParam.bIn) // is pure out
+ {
+ // cpp out is constructed mem, uno out is not!
+ uno_constructData(
+ *(void **)pCppStack = pCppArgs[nPos] = alloca( pParamTypeDescr->nSize ),
+ pParamTypeDescr );
+ pTempIndizes[nTempIndizes] = nPos; // default constructed for cpp call
+ // will be released at reconversion
+ ppTempParamTypeDescr[nTempIndizes++] = pParamTypeDescr;
+ }
+ // is in/inout
+ else if (bridges::cpp_uno::shared::relatesToInterfaceType(
+ pParamTypeDescr ))
+ {
+ uno_copyAndConvertData(
+ *(void **)pCppStack = pCppArgs[nPos] = alloca( pParamTypeDescr->nSize ),
+ pUnoArgs[nPos], pParamTypeDescr,
+ pThis->getBridge()->getUno2Cpp() );
+
+ pTempIndizes[nTempIndizes] = nPos; // has to be reconverted
+ // will be released at reconversion
+ ppTempParamTypeDescr[nTempIndizes++] = pParamTypeDescr;
+ }
+ else // direct way
+ {
+ *(void **)pCppStack = pCppArgs[nPos] = pUnoArgs[nPos];
+ // no longer needed
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ }
+ pCppStack += sizeof(sal_Int32); // standard parameter length
+ }
+
+// seems that EH registration for callVirtualMethod is not really
+// necessary
+
+// static unsigned long* pFrameInfo = NULL;
+
+// if( ! pFrameInfo )
+// {
+// pFrameInfo = new unsigned long[ 7 ];
+// pFrameInfo[ 0 ] = 0x40000000 | (((unsigned long)__Crun::ex_rethrow_q) >> 2);
+// pFrameInfo[ 1 ] = 0x01000000;
+// pFrameInfo[ 2 ] = (unsigned long)callVirtualMethodExceptionHandler;
+// pFrameInfo[ 3 ] = 0;
+// pFrameInfo[ 4 ] = (unsigned long)pFrameInfo - (unsigned long)callVirtualMethodExceptionHandler;
+// pFrameInfo[ 5 ] = 0;
+// pFrameInfo[ 6 ] = 0;
+// _ex_register( pFrameInfo+2, 1 );
+// }
+
+ try
+ {
+ int nStackLongs = (pCppStack - pCppStackStart)/sizeof(sal_Int32);
+ if( nStackLongs & 1 )
+ // stack has to be 8 byte aligned
+ nStackLongs++;
+
+ callVirtualMethod(
+ pAdjustedThisPtr,
+ aVtableSlot.index,
+ pCppReturn,
+ pReturnTypeDescr->eTypeClass,
+ (sal_Int32 *)pCppStackStart,
+ nStackLongs
+ );
+
+ // NO exception occured...
+ *ppUnoExc = 0;
+
+ // reconvert temporary params
+ for ( ; nTempIndizes--; )
+ {
+ sal_Int32 nIndex = pTempIndizes[nTempIndizes];
+ typelib_TypeDescription * pParamTypeDescr = ppTempParamTypeDescr[nTempIndizes];
+
+ if (pParams[nIndex].bIn)
+ {
+ if (pParams[nIndex].bOut) // inout
+ {
+ uno_destructData( pUnoArgs[nIndex], pParamTypeDescr, 0 ); // destroy uno value
+ uno_copyAndConvertData( pUnoArgs[nIndex], pCppArgs[nIndex], pParamTypeDescr,
+ pThis->getBridge()->getCpp2Uno() );
+ }
+ }
+ else // pure out
+ {
+ uno_copyAndConvertData( pUnoArgs[nIndex], pCppArgs[nIndex], pParamTypeDescr,
+ pThis->getBridge()->getCpp2Uno() );
+ }
+ // destroy temp cpp param => cpp: every param was constructed
+ uno_destructData(
+ pCppArgs[nIndex], pParamTypeDescr,
+ reinterpret_cast< uno_ReleaseFunc >(cpp_release) );
+
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ // return value
+ if (pCppReturn && pUnoReturn != pCppReturn)
+ {
+ uno_copyAndConvertData( pUnoReturn, pCppReturn, pReturnTypeDescr,
+ pThis->getBridge()->getCpp2Uno() );
+ uno_destructData(
+ pCppReturn, pReturnTypeDescr,
+ reinterpret_cast< uno_ReleaseFunc >(cpp_release) );
+ }
+ }
+ catch( ... )
+ {
+ void* pExc = __Crun::ex_get();
+ const char* pName = __Cimpl::ex_name();
+
+ // get exception
+ CPPU_CURRENT_NAMESPACE::cc50_solaris_sparc_fillUnoException(
+ pExc, pName, *ppUnoExc, pThis->getBridge()->getCpp2Uno());
+
+ // temporary params
+ for ( ; nTempIndizes--; )
+ {
+ sal_Int32 nIndex = pTempIndizes[nTempIndizes];
+ // destroy temp cpp param => cpp: every param was constructed
+ uno_destructData(
+ pCppArgs[nIndex],
+ ppTempParamTypeDescr[nTempIndizes],
+ reinterpret_cast< uno_ReleaseFunc >(cpp_release) );
+ TYPELIB_DANGER_RELEASE( ppTempParamTypeDescr[nTempIndizes] );
+ }
+ // return type
+ if (pReturnTypeDescr)
+ TYPELIB_DANGER_RELEASE( pReturnTypeDescr );
+ }
+}
+
+}
+
+namespace bridges { namespace cpp_uno { namespace shared {
+
+void unoInterfaceProxyDispatch(
+ uno_Interface * pUnoI, const typelib_TypeDescription * pMemberDescr,
+ void * pReturn, void * pArgs[], uno_Any ** ppException )
+{
+ // is my surrogate
+ bridges::cpp_uno::shared::UnoInterfaceProxy * pThis
+ = static_cast< bridges::cpp_uno::shared::UnoInterfaceProxy * >(pUnoI);
+ typelib_InterfaceTypeDescription * pTypeDescr = pThis->pTypeDescr;
+
+ switch (pMemberDescr->eTypeClass)
+ {
+ case typelib_TypeClass_INTERFACE_ATTRIBUTE:
+ {
+ VtableSlot aVtableSlot(
+ getVtableSlot(
+ reinterpret_cast<
+ typelib_InterfaceAttributeTypeDescription const * >(
+ pMemberDescr)));
+ if (pReturn)
+ {
+ // dependent dispatch
+ cpp_call(
+ pThis, aVtableSlot,
+ ((typelib_InterfaceAttributeTypeDescription *)pMemberDescr)->pAttributeTypeRef,
+ 0, 0, // no params
+ pReturn, pArgs, ppException );
+ }
+ else
+ {
+ // is SET
+ typelib_MethodParameter aParam;
+ aParam.pTypeRef =
+ ((typelib_InterfaceAttributeTypeDescription *)pMemberDescr)->pAttributeTypeRef;
+ aParam.bIn = sal_True;
+ aParam.bOut = sal_False;
+
+ typelib_TypeDescriptionReference * pReturnTypeRef = 0;
+ OUString aVoidName( RTL_CONSTASCII_USTRINGPARAM("void") );
+ typelib_typedescriptionreference_new(
+ &pReturnTypeRef, typelib_TypeClass_VOID, aVoidName.pData );
+
+ // dependent dispatch
+ aVtableSlot.index += 1; // get, then set method
+ cpp_call(
+ pThis, aVtableSlot,
+ pReturnTypeRef,
+ 1, &aParam,
+ pReturn, pArgs, ppException );
+
+ typelib_typedescriptionreference_release( pReturnTypeRef );
+ }
+
+ break;
+ }
+ case typelib_TypeClass_INTERFACE_METHOD:
+ {
+ VtableSlot aVtableSlot(
+ getVtableSlot(
+ reinterpret_cast<
+ typelib_InterfaceMethodTypeDescription const * >(
+ pMemberDescr)));
+ switch (aVtableSlot.index)
+ {
+ // standard calls
+ case 1: // acquire uno interface
+ (*pUnoI->acquire)( pUnoI );
+ *ppException = 0;
+ break;
+ case 2: // release uno interface
+ (*pUnoI->release)( pUnoI );
+ *ppException = 0;
+ break;
+ case 0: // queryInterface() opt
+ {
+ typelib_TypeDescription * pTD = 0;
+ TYPELIB_DANGER_GET( &pTD, reinterpret_cast< Type * >( pArgs[0] )->getTypeLibType() );
+ if (pTD)
+ {
+ uno_Interface * pInterface = 0;
+ (*pThis->pBridge->getUnoEnv()->getRegisteredInterface)(
+ pThis->pBridge->getUnoEnv(),
+ (void **)&pInterface, pThis->oid.pData, (typelib_InterfaceTypeDescription *)pTD );
+
+ if (pInterface)
+ {
+ ::uno_any_construct(
+ reinterpret_cast< uno_Any * >( pReturn ),
+ &pInterface, pTD, 0 );
+ (*pInterface->release)( pInterface );
+ TYPELIB_DANGER_RELEASE( pTD );
+ *ppException = 0;
+ break;
+ }
+ TYPELIB_DANGER_RELEASE( pTD );
+ }
+ } // else perform queryInterface()
+ default:
+ // dependent dispatch
+ cpp_call(
+ pThis, aVtableSlot,
+ ((typelib_InterfaceMethodTypeDescription *)pMemberDescr)->pReturnTypeRef,
+ ((typelib_InterfaceMethodTypeDescription *)pMemberDescr)->nParams,
+ ((typelib_InterfaceMethodTypeDescription *)pMemberDescr)->pParams,
+ pReturn, pArgs, ppException );
+ }
+ break;
+ }
+ default:
+ {
+ ::com::sun::star::uno::RuntimeException aExc(
+ OUString( RTL_CONSTASCII_USTRINGPARAM("illegal member type description!") ),
+ ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >() );
+
+ Type const & rExcType = ::getCppuType( &aExc );
+ // binary identical null reference
+ ::uno_type_any_construct( *ppException, &aExc, rExcType.getTypeLibType(), 0 );
+ }
+ }
+}
+
+} } }
diff --git a/bridges/source/cpp_uno/cc5_solaris_sparc64/callvirtualmethod.hxx b/bridges/source/cpp_uno/cc5_solaris_sparc64/callvirtualmethod.hxx
new file mode 100644
index 000000000000..889df40a5b40
--- /dev/null
+++ b/bridges/source/cpp_uno/cc5_solaris_sparc64/callvirtualmethod.hxx
@@ -0,0 +1,36 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_BRIDGES_SOURCE_CPP_UNO_CC5_SOLARIS_SPARC64_CALLVIRTUALMETHOD_Hx
+#define INCLUDED_BRIDGES_SOURCE_CPP_UNO_CC5_SOLARIS_SPARC64_CALLVIRTUALMETHOD_Hx
+
+#include "sal/config.h"
+
+extern "C" void callVirtualMethod(
+ unsigned long function, long * stack, sal_Int32 excess);
+
+#endif
diff --git a/bridges/source/cpp_uno/cc5_solaris_sparc64/callvirtualmethod.s b/bridges/source/cpp_uno/cc5_solaris_sparc64/callvirtualmethod.s
new file mode 100644
index 000000000000..67c5aa39ade5
--- /dev/null
+++ b/bridges/source/cpp_uno/cc5_solaris_sparc64/callvirtualmethod.s
@@ -0,0 +1,59 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+.global callVirtualMethod
+.align 8
+callVirtualMethod:
+ ! %o0: unsigned long function
+ ! %o1: unsigned long * stack
+ ! %o2: sal_Int32 excess
+ add %o2, 176, %o3
+ neg %o3
+ save %sp, %o3, %sp
+ ldx [%i1 + 0 * 8], %o0
+ ldx [%i1 + 1 * 8], %o1
+ ldx [%i1 + 2 * 8], %o2
+ ldx [%i1 + 3 * 8], %o3
+ tst %i2
+ bz,pt %xcc, 1f
+ ldx [%i1 + 4 * 8], %o4
+ add %i1, 6 * 8, %l0
+ add %sp, 2047 + 176, %l1
+0: deccc 8, %i2
+ ldx [%l0 + %i2], %l2
+ bnz,pt %xcc, 0b
+ stx %l2, [%l1 + %i2]
+1: call %i0
+ ldx [%i1 + 5 * 8], %o5
+ stx %o0, [%i1 + 0 * 8]
+ stx %o1, [%i1 + 1 * 8]
+ stx %o2, [%i1 + 2 * 8]
+ stx %o3, [%i1 + 3 * 8]
+ ret
+ restore
+.size callVirtualMethod, . - callVirtualMethod
+.type callVirtualMethod, #function
diff --git a/bridges/source/cpp_uno/cc5_solaris_sparc64/cpp2uno.cxx b/bridges/source/cpp_uno/cc5_solaris_sparc64/cpp2uno.cxx
new file mode 100644
index 000000000000..19be97baf7fa
--- /dev/null
+++ b/bridges/source/cpp_uno/cc5_solaris_sparc64/cpp2uno.cxx
@@ -0,0 +1,611 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "precompiled_bridges.hxx"
+#include "sal/config.h"
+
+#include <cstddef>
+#include <cstdlib>
+#include <cstring>
+
+#include "bridges/cpp_uno/shared/bridge.hxx"
+#include "bridges/cpp_uno/shared/cppinterfaceproxy.hxx"
+#include "bridges/cpp_uno/shared/types.hxx"
+#include "bridges/cpp_uno/shared/vtablefactory.hxx"
+#include "com/sun/star/uno/genfunc.hxx"
+#include "osl/diagnose.h"
+#include "sal/alloca.h"
+#include "sal/types.h"
+#include "typelib/typeclass.h"
+#include "typelib/typedescription.h"
+#include "typelib/typedescription.hxx"
+#include "uno/any2.h"
+#include "uno/data.h"
+
+#include "exceptions.hxx"
+#include "flushcode.hxx"
+#include "fp.hxx"
+#include "isdirectreturntype.hxx"
+#include "vtableslotcall.hxx"
+
+namespace {
+
+namespace css = com::sun::star;
+
+void loadFpRegsFromStruct(typelib_TypeDescription * type, void * data) {
+ for (typelib_CompoundTypeDescription * t =
+ reinterpret_cast< typelib_CompoundTypeDescription * >(type);
+ t != NULL; t = t->pBaseTypeDescription)
+ {
+ for (sal_Int32 i = 0; i < t->nMembers; ++i) {
+ switch (t->ppTypeRefs[i]->eTypeClass) {
+ case typelib_TypeClass_FLOAT:
+ switch (t->pMemberOffsets[i]) {
+ case 0:
+ fp_loadf0(reinterpret_cast< float * >(data));
+ break;
+ case 4:
+ fp_loadf1(reinterpret_cast< float * >(data) + 1);
+ break;
+ case 8:
+ fp_loadf2(reinterpret_cast< float * >(data) + 2);
+ break;
+ case 12:
+ fp_loadf3(reinterpret_cast< float * >(data) + 3);
+ break;
+ case 16:
+ fp_loadf4(reinterpret_cast< float * >(data) + 4);
+ break;
+ case 20:
+ fp_loadf5(reinterpret_cast< float * >(data) + 5);
+ break;
+ case 24:
+ fp_loadf6(reinterpret_cast< float * >(data) + 6);
+ break;
+ case 28:
+ fp_loadf7(reinterpret_cast< float * >(data) + 7);
+ break;
+ default:
+ OSL_ASSERT(false);
+ break;
+ }
+ break;
+ case typelib_TypeClass_DOUBLE:
+ switch (t->pMemberOffsets[i]) {
+ case 0:
+ fp_loadd0(reinterpret_cast< double * >(data));
+ break;
+ case 8:
+ fp_loadd2(reinterpret_cast< double * >(data) + 1);
+ break;
+ case 16:
+ fp_loadd4(reinterpret_cast< double * >(data) + 2);
+ break;
+ case 24:
+ fp_loadd6(reinterpret_cast< double * >(data) + 3);
+ break;
+ default:
+ OSL_ASSERT(false);
+ break;
+ }
+ break;
+ case typelib_TypeClass_STRUCT:
+ {
+ typelib_TypeDescription * td = NULL;
+ TYPELIB_DANGER_GET(&td, t->ppTypeRefs[i]);
+ loadFpRegsFromStruct(td, data);
+ TYPELIB_DANGER_RELEASE(td);
+ break;
+ }
+ }
+ }
+ }
+}
+
+void call(
+ bridges::cpp_uno::shared::CppInterfaceProxy * proxy,
+ css::uno::TypeDescription const & description,
+ bool directReturn, typelib_TypeDescriptionReference * returnType,
+ sal_Int32 count, typelib_MethodParameter * parameters,
+ unsigned long * callStack)
+{
+ typelib_TypeDescription * rtd = NULL;
+ if (returnType != NULL) {
+ TYPELIB_DANGER_GET(&rtd, returnType);
+ }
+ bool retconv =
+ rtd != NULL && bridges::cpp_uno::shared::relatesToInterfaceType(rtd);
+ OSL_ASSERT(!(directReturn && retconv));
+ void * retin;
+ void * retout;
+ char retbuf[32];
+ if (directReturn) {
+ retin = returnType == NULL ? NULL : retbuf;
+ } else {
+ retout = reinterpret_cast< void * >(callStack[0]);
+ retin = retconv ? alloca(rtd->nSize) : retout;
+ }
+ void ** args = static_cast< void ** >(alloca(count * sizeof (void *)));
+ void ** cppArgs = static_cast< void ** >(alloca(count * sizeof (void *)));
+ typelib_TypeDescription ** argtds =
+ static_cast< typelib_TypeDescription ** >(
+ alloca(count * sizeof (typelib_TypeDescription *)));
+ union fp { float f; double d; };
+ fp copies[15];
+ sal_Int32 stackPos = directReturn ? 1 : 2; // skip return ptr and this ptr
+ for (sal_Int32 i = 0; i < count; ++i) {
+ typelib_TypeDescription * ptd = NULL;
+ TYPELIB_DANGER_GET(&ptd, parameters[i].pTypeRef);
+ if (!parameters[i].bOut && bridges::cpp_uno::shared::isSimpleType(ptd))
+ {
+ switch (ptd->eTypeClass) {
+ case typelib_TypeClass_FLOAT:
+ if (stackPos <= 15) {
+ switch (stackPos) {
+ case 1:
+ fp_storef3(&copies[0].f);
+ break;
+ case 2:
+ fp_storef5(&copies[1].f);
+ break;
+ case 3:
+ fp_storef7(&copies[2].f);
+ break;
+ case 4:
+ fp_storef9(&copies[3].f);
+ break;
+ case 5:
+ fp_storef11(&copies[4].f);
+ break;
+ case 6:
+ fp_storef13(&copies[5].f);
+ break;
+ case 7:
+ fp_storef15(&copies[6].f);
+ break;
+ case 8:
+ fp_storef17(&copies[7].f);
+ break;
+ case 9:
+ fp_storef19(&copies[8].f);
+ break;
+ case 10:
+ fp_storef21(&copies[9].f);
+ break;
+ case 11:
+ fp_storef23(&copies[10].f);
+ break;
+ case 12:
+ fp_storef25(&copies[11].f);
+ break;
+ case 13:
+ fp_storef27(&copies[12].f);
+ break;
+ case 14:
+ fp_storef29(&copies[13].f);
+ break;
+ case 15:
+ fp_storef31(&copies[14].f);
+ break;
+ default:
+ OSL_ASSERT(false);
+ break;
+ }
+ args[i] = &copies[stackPos - 1].f;
+ } else {
+ args[i] = reinterpret_cast< char * >(callStack + stackPos) +
+ (sizeof (unsigned long) - sizeof (float));
+ }
+ break;
+ case typelib_TypeClass_DOUBLE:
+ if (stackPos <= 15) {
+ switch (stackPos) {
+ case 1:
+ fp_stored2(&copies[0].d);
+ break;
+ case 2:
+ fp_stored4(&copies[1].d);
+ break;
+ case 3:
+ fp_stored6(&copies[2].d);
+ break;
+ case 4:
+ fp_stored8(&copies[3].d);
+ break;
+ case 5:
+ fp_stored10(&copies[4].d);
+ break;
+ case 6:
+ fp_stored12(&copies[5].d);
+ break;
+ case 7:
+ fp_stored14(&copies[6].d);
+ break;
+ case 8:
+ fp_stored16(&copies[7].d);
+ break;
+ case 9:
+ fp_stored18(&copies[8].d);
+ break;
+ case 10:
+ fp_stored20(&copies[9].d);
+ break;
+ case 11:
+ fp_stored22(&copies[10].d);
+ break;
+ case 12:
+ fp_stored24(&copies[11].d);
+ break;
+ case 13:
+ fp_stored26(&copies[12].d);
+ break;
+ case 14:
+ fp_stored28(&copies[13].d);
+ break;
+ case 15:
+ fp_stored30(&copies[14].d);
+ break;
+ default:
+ OSL_ASSERT(false);
+ break;
+ }
+ args[i] = &copies[stackPos - 1].d;
+ } else {
+ args[i] = reinterpret_cast< char * >(callStack + stackPos) +
+ (sizeof (unsigned long) - sizeof (double));
+ }
+ break;
+ default:
+ OSL_ASSERT(ptd->nSize <= 8);
+ args[i] = reinterpret_cast< char * >(callStack + stackPos) +
+ (sizeof (unsigned long) - ptd->nSize);
+ break;
+ }
+ argtds[i] = NULL;
+ TYPELIB_DANGER_RELEASE(ptd);
+ } else {
+ cppArgs[i] = reinterpret_cast< void * >(callStack[stackPos]);
+ if (!parameters[i].bIn) {
+ args[i] = alloca(ptd->nSize);
+ argtds[i] = ptd;
+ } else if (bridges::cpp_uno::shared::relatesToInterfaceType(ptd)) {
+ args[i] = alloca(ptd->nSize);
+ uno_copyAndConvertData(
+ args[i], reinterpret_cast< void * >(callStack[stackPos]),
+ ptd, proxy->getBridge()->getCpp2Uno());
+ argtds[i] = ptd;
+ } else {
+ args[i] = reinterpret_cast< void * >(callStack[stackPos]);
+ argtds[i] = NULL;
+ TYPELIB_DANGER_RELEASE(ptd);
+ }
+ }
+ ++stackPos;
+ }
+ uno_Any exc;
+ uno_Any * pexc = &exc;
+ proxy->getUnoI()->pDispatcher(
+ proxy->getUnoI(), description.get(), retin, args, &pexc);
+ if (pexc != NULL) {
+ for (sal_Int32 i = 0; i < count; ++i) {
+ if (argtds[i] != NULL) {
+ if (parameters[i].bIn) {
+ uno_destructData(args[i], argtds[i], NULL);
+ }
+ TYPELIB_DANGER_RELEASE(argtds[i]);
+ }
+ }
+ if (rtd != NULL) {
+ TYPELIB_DANGER_RELEASE(rtd);
+ }
+ bridges::cpp_uno::cc5_solaris_sparc64::raiseException(
+ &exc, proxy->getBridge()->getUno2Cpp());
+ std::abort(); // just in case
+ }
+ for (sal_Int32 i = 0; i < count; ++i) {
+ if (argtds[i] != NULL) {
+ if (parameters[i].bOut) {
+ uno_destructData(
+ cppArgs[i], argtds[i],
+ reinterpret_cast< uno_ReleaseFunc >(css::uno::cpp_release));
+ uno_copyAndConvertData(
+ cppArgs[i], args[i], argtds[i],
+ proxy->getBridge()->getUno2Cpp());
+ }
+ uno_destructData(args[i], argtds[i], NULL);
+ TYPELIB_DANGER_RELEASE(argtds[i]);
+ }
+ }
+ if (directReturn) {
+ if (rtd != NULL) {
+ switch (rtd->eTypeClass) {
+ case typelib_TypeClass_VOID:
+ break;
+ case typelib_TypeClass_BOOLEAN:
+ callStack[0] = *reinterpret_cast< sal_Bool * >(retbuf);
+ break;
+ case typelib_TypeClass_BYTE:
+ callStack[0] = *reinterpret_cast< sal_Int8 * >(retbuf);
+ break;
+ case typelib_TypeClass_SHORT:
+ callStack[0] = *reinterpret_cast< sal_Int16 * >(retbuf);
+ break;
+ case typelib_TypeClass_UNSIGNED_SHORT:
+ callStack[0] = *reinterpret_cast< sal_uInt16 * >(retbuf);
+ break;
+ case typelib_TypeClass_LONG:
+ case typelib_TypeClass_ENUM:
+ callStack[0] = *reinterpret_cast< sal_Int32 * >(retbuf);
+ break;
+ case typelib_TypeClass_UNSIGNED_LONG:
+ callStack[0] = *reinterpret_cast< sal_uInt32 * >(retbuf);
+ break;
+ case typelib_TypeClass_HYPER:
+ callStack[0] = *reinterpret_cast< sal_Int64 * >(retbuf);
+ break;
+ case typelib_TypeClass_UNSIGNED_HYPER:
+ callStack[0] = *reinterpret_cast< sal_uInt64 * >(retbuf);
+ break;
+ case typelib_TypeClass_FLOAT:
+ fp_loadf0(reinterpret_cast< float * >(retbuf));
+ break;
+ case typelib_TypeClass_DOUBLE:
+ fp_loadd0(reinterpret_cast< double * >(retbuf));
+ break;
+ case typelib_TypeClass_CHAR:
+ callStack[0] = *reinterpret_cast< sal_Unicode * >(retbuf);
+ break;
+ case typelib_TypeClass_STRING:
+ case typelib_TypeClass_TYPE:
+ case typelib_TypeClass_SEQUENCE:
+ case typelib_TypeClass_INTERFACE:
+ callStack[0] = reinterpret_cast< unsigned long >(
+ *reinterpret_cast< void ** >(retbuf));
+ break;
+ case typelib_TypeClass_STRUCT:
+ loadFpRegsFromStruct(rtd, retbuf);
+ // fall through
+ case typelib_TypeClass_ANY:
+ std::memcpy(callStack, retbuf, rtd->nSize);
+ break;
+ default:
+ OSL_ASSERT(false);
+ break;
+ }
+ }
+ } else if (retconv) {
+ uno_copyAndConvertData(
+ retout, retin, rtd, proxy->getBridge()->getUno2Cpp());
+ uno_destructData(retin, rtd, NULL);
+ }
+ if (rtd != NULL) {
+ TYPELIB_DANGER_RELEASE(rtd);
+ }
+}
+
+extern "C" void vtableCall(
+ sal_Int32 functionIndex, sal_Int32 vtableOffset, unsigned long * callStack)
+{
+ bool direct = static_cast< sal_uInt32 >((functionIndex) & 0x80000000) == 0;
+ functionIndex = static_cast< sal_uInt32 >(functionIndex) & 0x7FFFFFFF;
+ bridges::cpp_uno::shared::CppInterfaceProxy * proxy
+ = bridges::cpp_uno::shared::CppInterfaceProxy::castInterfaceToProxy(
+ reinterpret_cast< char * >(callStack[direct ? 0 : 1]) -
+ vtableOffset);
+ typelib_InterfaceTypeDescription * type = proxy->getTypeDescr();
+ OSL_ASSERT(functionIndex < type->nMapFunctionIndexToMemberIndex);
+ sal_Int32 pos = type->pMapFunctionIndexToMemberIndex[functionIndex];
+ css::uno::TypeDescription desc(type->ppAllMembers[pos]);
+ switch (desc.get()->eTypeClass) {
+ case typelib_TypeClass_INTERFACE_ATTRIBUTE:
+ if (type->pMapMemberIndexToFunctionIndex[pos] == functionIndex) {
+ // Getter:
+ call(
+ proxy, desc, direct,
+ reinterpret_cast< typelib_InterfaceAttributeTypeDescription * >(
+ desc.get())->pAttributeTypeRef,
+ 0, NULL, callStack);
+ } else {
+ // Setter:
+ typelib_MethodParameter param = {
+ NULL,
+ reinterpret_cast< typelib_InterfaceAttributeTypeDescription * >(
+ desc.get())->pAttributeTypeRef,
+ true, false };
+ call(proxy, desc, true, NULL, 1, &param, callStack);
+ }
+ break;
+ case typelib_TypeClass_INTERFACE_METHOD:
+ switch (functionIndex) {
+ case 1:
+ proxy->acquireProxy();
+ break;
+ case 2:
+ proxy->releaseProxy();
+ break;
+ case 0:
+ {
+ typelib_TypeDescription * td = NULL;
+ TYPELIB_DANGER_GET(
+ &td,
+ reinterpret_cast< css::uno::Type * >(
+ callStack[2])->getTypeLibType());
+ if (td != NULL) {
+ css::uno::XInterface * ifc = NULL;
+ proxy->getBridge()->getCppEnv()->getRegisteredInterface(
+ proxy->getBridge()->getCppEnv(),
+ reinterpret_cast< void ** >(&ifc),
+ proxy->getOid().pData,
+ reinterpret_cast< typelib_InterfaceTypeDescription * >(
+ td));
+ if (ifc != NULL) {
+ uno_any_construct(
+ reinterpret_cast< uno_Any * >(callStack[0]), &ifc,
+ td,
+ reinterpret_cast< uno_AcquireFunc >(
+ css::uno::cpp_acquire));
+ ifc->release();
+ TYPELIB_DANGER_RELEASE(td);
+ break;
+ }
+ TYPELIB_DANGER_RELEASE(td);
+ }
+ } // fall through
+ default:
+ call(
+ proxy, desc, direct,
+ reinterpret_cast< typelib_InterfaceMethodTypeDescription * >(
+ desc.get())->pReturnTypeRef,
+ reinterpret_cast< typelib_InterfaceMethodTypeDescription * >(
+ desc.get())->nParams,
+ reinterpret_cast< typelib_InterfaceMethodTypeDescription * >(
+ desc.get())->pParams,
+ callStack);
+ }
+ break;
+ default:
+ OSL_ASSERT(false);
+ break;
+ }
+}
+
+int const codeSnippetSize = 10 * 4;
+
+unsigned char * generateCodeSnippet(
+ unsigned char * code, sal_Int32 functionIndex, sal_Int32 vtableOffset,
+ bool directReturn)
+{
+ sal_uInt32 index = functionIndex;
+ if (!directReturn) {
+ index |= 0x80000000;
+ }
+ unsigned int * p = reinterpret_cast< unsigned int * >(code);
+ OSL_ASSERT(sizeof (unsigned int) == 4);
+ // 0*4: save %sp, -176, %sp ! minimal stack frame:
+ *p++ = 0x9DE3BF50;
+ // 1*4: rd %pc, %l0:
+ *p++ = 0xA1414000;
+ // 2*4: ldx %l0, (8-1)*4, %l0:
+ *p++ = 0xE05C201C;
+ // 3*4: sethi %hi(index), %o0:
+ *p++ = 0x11000000 | (index >> 10);
+ // 4*4: or %o0, %lo(index), %o0:
+ *p++ = 0x90122000 | (index & 0x3FF);
+ // 5*4: sethi %hi(vtableOffset), %o1:
+ *p++ = 0x13000000 | (vtableOffset >> 10);
+ // 6*4: jmpl %l0, %g0, %g0:
+ *p++ = 0x81C40000;
+ // 7*4: or %o1, %lo(vtableOffset), %o1:
+ *p++ = 0x92126000 | (vtableOffset & 0x3FF);
+ // 8*4: .xword privateSnippetExecutor:
+ *reinterpret_cast< unsigned long * >(p) =
+ reinterpret_cast< unsigned long >(vtableSlotCall);
+ return code + codeSnippetSize;
+}
+
+}
+
+struct bridges::cpp_uno::shared::VtableFactory::Slot { void * fn; };
+
+bridges::cpp_uno::shared::VtableFactory::Slot *
+bridges::cpp_uno::shared::VtableFactory::mapBlockToVtable(void * block) {
+ return static_cast< Slot * >(block) + 1;
+}
+
+sal_Size bridges::cpp_uno::shared::VtableFactory::getBlockSize(
+ sal_Int32 slotCount)
+{
+ return (slotCount + 3) * sizeof (Slot) + slotCount * codeSnippetSize;
+}
+
+bridges::cpp_uno::shared::VtableFactory::Slot *
+bridges::cpp_uno::shared::VtableFactory::initializeBlock(
+ void * block, sal_Int32 slotCount)
+{
+ Slot * slots = mapBlockToVtable(block) + 2;
+ slots[-3].fn = NULL; // RTTI
+ slots[-2].fn = NULL; // null
+ slots[-1].fn = NULL; // destructor
+ return slots + slotCount;
+}
+
+unsigned char * bridges::cpp_uno::shared::VtableFactory::addLocalFunctions(
+ Slot ** slots, unsigned char * code,
+ typelib_InterfaceTypeDescription const * type, sal_Int32 functionOffset,
+ sal_Int32 functionCount, sal_Int32 vtableOffset)
+{
+ (*slots) -= functionCount;
+ Slot * s = *slots;
+ for (sal_Int32 i = 0; i < type->nMembers; ++i) {
+ typelib_TypeDescription * member = 0;
+ TYPELIB_DANGER_GET(&member, type->ppMembers[i]);
+ OSL_ASSERT(member != 0);
+ switch (member->eTypeClass) {
+ case typelib_TypeClass_INTERFACE_ATTRIBUTE:
+ // Getter:
+ (s++)->fn = code;
+ code = generateCodeSnippet(
+ code, functionOffset++, vtableOffset,
+ bridges::cpp_uno::cc5_solaris_sparc64::isDirectReturnType(
+ reinterpret_cast<
+ typelib_InterfaceAttributeTypeDescription * >(
+ member)->pAttributeTypeRef));
+ // Setter:
+ if (!reinterpret_cast<
+ typelib_InterfaceAttributeTypeDescription * >(
+ member)->bReadOnly)
+ {
+ (s++)->fn = code;
+ code = generateCodeSnippet(
+ code, functionOffset++, vtableOffset, true);
+ }
+ break;
+
+ case typelib_TypeClass_INTERFACE_METHOD:
+ (s++)->fn = code;
+ code = generateCodeSnippet(
+ code, functionOffset++, vtableOffset,
+ bridges::cpp_uno::cc5_solaris_sparc64::isDirectReturnType(
+ reinterpret_cast<
+ typelib_InterfaceMethodTypeDescription * >(
+ member)->pReturnTypeRef));
+ break;
+
+ default:
+ OSL_ASSERT(false);
+ break;
+ }
+ TYPELIB_DANGER_RELEASE(member);
+ }
+ return code;
+}
+
+void bridges::cpp_uno::shared::VtableFactory::flushCode(
+ unsigned char const * begin, unsigned char const * end)
+{
+ bridges::cpp_uno::cc5_solaris_sparc64::flushCode(begin, end);
+}
diff --git a/bridges/source/cpp_uno/cc5_solaris_sparc64/exceptions.cxx b/bridges/source/cpp_uno/cc5_solaris_sparc64/exceptions.cxx
new file mode 100644
index 000000000000..020cdea27333
--- /dev/null
+++ b/bridges/source/cpp_uno/cc5_solaris_sparc64/exceptions.cxx
@@ -0,0 +1,459 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "precompiled_bridges.hxx"
+#include "sal/config.h"
+
+#include <cstddef>
+#include <cstring>
+#include <map>
+#include <utility>
+#include <vector>
+
+#include "bridges/cpp_uno/shared/arraypointer.hxx"
+#include "com/sun/star/uno/Reference.hxx"
+#include "com/sun/star/uno/RuntimeException.hpp"
+#include "com/sun/star/uno/XInterface.hpp"
+#include "com/sun/star/uno/genfunc.hxx"
+#include "osl/diagnose.h"
+#include "osl/mutex.hxx"
+#include "rtl/strbuf.hxx"
+#include "rtl/string.hxx"
+#include "rtl/textenc.h"
+#include "rtl/ustring.h"
+#include "rtl/ustring.hxx"
+#include "sal/types.h"
+#include "typelib/typeclass.h"
+#include "typelib/typedescription.h"
+#include "uno/any2.h"
+#include "uno/data.h"
+#include "uno/mapping.h"
+
+#include "exceptions.hxx"
+#include "flushcode.hxx"
+
+namespace {
+
+namespace css = com::sun::star;
+
+typedef void (* Function)(void *);
+
+Function toFunction(void * pointer) {
+#pragma disable_warn
+ return reinterpret_cast< Function >(pointer);
+#pragma enable_warn
+}
+
+bool toUnoName(char const * rttiName, rtl::OUString * unoName) {
+ rtl::OStringBuffer buf;
+ for (;;) {
+ char const * p = std::strchr(rttiName, ':');
+ if (p == NULL) {
+ buf.append(rttiName);
+ break;
+ }
+ if (p - rttiName > SAL_MAX_INT32) {
+ return false;
+ }
+ buf.append(rttiName, sal::static_int_cast< sal_Int32 >(p - rttiName));
+ buf.append(".");
+ while (*p == ':') {
+ ++p;
+ }
+ rttiName = p;
+ }
+ *unoName = rtl::OStringToOUString(
+ buf.makeStringAndClear(), RTL_TEXTENCODING_UTF8);
+ //TODO: check conversion failure
+ return true;
+}
+
+class NistHash {
+public:
+ NistHash(rtl::OString const & text);
+
+ sal_uInt32 hashdata[5];
+
+private:
+ static sal_uInt32 f1(sal_uInt32 x, sal_uInt32 y, sal_uInt32 z)
+ { return z ^ (x & (y ^ z)); }
+
+ static sal_uInt32 f2(sal_uInt32 x, sal_uInt32 y, sal_uInt32 z)
+ { return x ^ y ^ z; }
+
+ static sal_uInt32 f3(sal_uInt32 x, sal_uInt32 y, sal_uInt32 z)
+ { return (x & y) + (z & (x ^ y)); }
+
+ static sal_uInt32 rotl(sal_uInt32 value, sal_uInt32 bits)
+ { return (value << bits) | (value >> (32 - bits)); }
+
+ sal_uInt32 expand_nostore(sal_uInt32 index) {
+ return data[index & 15] ^ data[(index - 14) & 15] ^
+ data[(index - 8) & 15] ^ data[(index - 3) & 15];
+ }
+
+ sal_uInt32 expand_store(sal_uInt32 index) {
+ return data[index & 15] ^= data[(index - 14) & 15] ^
+ data[(index - 8) & 15] ^ data[(index - 3) & 15];
+ }
+
+ void subRound(
+ sal_uInt32 a, sal_uInt32 & b, sal_uInt32 c, sal_uInt32 d,
+ sal_uInt32 & e, sal_uInt32 constant, sal_uInt32 datum,
+ sal_uInt32 function)
+ {
+ e += rotl(a, 5);
+ switch (function) {
+ case 1:
+ e += f1(b, c, d);
+ break;
+ case 2:
+ case 4:
+ e += f2(b, c, d);
+ break;
+ case 3:
+ e += f3(b, c, d);
+ break;
+ }
+ e += constant + datum;
+ b = rotl(b, 30);
+ }
+
+ void transform();
+
+ sal_uInt32 data[16];
+};
+
+NistHash::NistHash(rtl::OString const & text) {
+ hashdata[0] = 0x67452301;
+ hashdata[1] = 0xefcdab89;
+ hashdata[2] = 0x98badcfe;
+ hashdata[3] = 0x10325476;
+ hashdata[4] = 0xc3d2e1f0;
+ char const * p = text.getStr();
+ sal_Int32 n = text.getLength();
+ while (n >= sizeof data) {
+ std::memcpy(data, p, sizeof data);
+ p += sizeof data;
+ n -= sizeof data;
+ transform();
+ }
+ std::memcpy(data, p, n);
+ reinterpret_cast< unsigned char *>(data)[n++] = 0x80;
+ if (n > sizeof data - 8) {
+ std::memset(reinterpret_cast< char * >(data) + n, 0, sizeof data - n);
+ transform();
+ std::memset(data, 0, sizeof data - 8);
+ } else {
+ std::memset(
+ reinterpret_cast< char * >(data) + n, 0, sizeof data - 8 - n);
+ }
+ data[14] = 0;
+ data[15] = text.getLength() << 3;
+ transform();
+}
+
+void NistHash::transform() {
+ sal_uInt32 const K2 = 0x5A827999;
+ sal_uInt32 const K3 = 0x6ED9EBA1;
+ sal_uInt32 const K5 = 0x8F1BBCDC;
+ sal_uInt32 const K10 = 0xCA62C1D6;
+ sal_uInt32 a = hashdata[0];
+ sal_uInt32 b = hashdata[1];
+ sal_uInt32 c = hashdata[2];
+ sal_uInt32 d = hashdata[3];
+ sal_uInt32 e = hashdata[4];
+ subRound(a, b, c, d, e, K2, data[ 0], 1);
+ subRound(e, a, b, c, d, K2, data[ 1], 1);
+ subRound(d, e, a, b, c, K2, data[ 2], 1);
+ subRound(c, d, e, a, b, K2, data[ 3], 1);
+ subRound(b, c, d, e, a, K2, data[ 4], 1);
+ subRound(a, b, c, d, e, K2, data[ 5], 1);
+ subRound(e, a, b, c, d, K2, data[ 6], 1);
+ subRound(d, e, a, b, c, K2, data[ 7], 1);
+ subRound(c, d, e, a, b, K2, data[ 8], 1);
+ subRound(b, c, d, e, a, K2, data[ 9], 1);
+ subRound(a, b, c, d, e, K2, data[10], 1);
+ subRound(e, a, b, c, d, K2, data[11], 1);
+ subRound(d, e, a, b, c, K2, data[12], 1);
+ subRound(c, d, e, a, b, K2, data[13], 1);
+ subRound(b, c, d, e, a, K2, data[14], 1);
+ subRound(a, b, c, d, e, K2, data[15], 1);
+ subRound(e, a, b, c, d, K2, expand_store(16), 1);
+ subRound(d, e, a, b, c, K2, expand_store(17), 1);
+ subRound(c, d, e, a, b, K2, expand_store(18), 1);
+ subRound(b, c, d, e, a, K2, expand_store(19), 1);
+ subRound(a, b, c, d, e, K3, expand_store(20), 2);
+ subRound(e, a, b, c, d, K3, expand_store(21), 2);
+ subRound(d, e, a, b, c, K3, expand_store(22), 2);
+ subRound(c, d, e, a, b, K3, expand_store(23), 2);
+ subRound(b, c, d, e, a, K3, expand_store(24), 2);
+ subRound(a, b, c, d, e, K3, expand_store(25), 2);
+ subRound(e, a, b, c, d, K3, expand_store(26), 2);
+ subRound(d, e, a, b, c, K3, expand_store(27), 2);
+ subRound(c, d, e, a, b, K3, expand_store(28), 2);
+ subRound(b, c, d, e, a, K3, expand_store(29), 2);
+ subRound(a, b, c, d, e, K3, expand_store(30), 2);
+ subRound(e, a, b, c, d, K3, expand_store(31), 2);
+ subRound(d, e, a, b, c, K3, expand_store(32), 2);
+ subRound(c, d, e, a, b, K3, expand_store(33), 2);
+ subRound(b, c, d, e, a, K3, expand_store(34), 2);
+ subRound(a, b, c, d, e, K3, expand_store(35), 2);
+ subRound(e, a, b, c, d, K3, expand_store(36), 2);
+ subRound(d, e, a, b, c, K3, expand_store(37), 2);
+ subRound(c, d, e, a, b, K3, expand_store(38), 2);
+ subRound(b, c, d, e, a, K3, expand_store(39), 2);
+ subRound(a, b, c, d, e, K5, expand_store(40), 3);
+ subRound(e, a, b, c, d, K5, expand_store(41), 3);
+ subRound(d, e, a, b, c, K5, expand_store(42), 3);
+ subRound(c, d, e, a, b, K5, expand_store(43), 3);
+ subRound(b, c, d, e, a, K5, expand_store(44), 3);
+ subRound(a, b, c, d, e, K5, expand_store(45), 3);
+ subRound(e, a, b, c, d, K5, expand_store(46), 3);
+ subRound(d, e, a, b, c, K5, expand_store(47), 3);
+ subRound(c, d, e, a, b, K5, expand_store(48), 3);
+ subRound(b, c, d, e, a, K5, expand_store(49), 3);
+ subRound(a, b, c, d, e, K5, expand_store(50), 3);
+ subRound(e, a, b, c, d, K5, expand_store(51), 3);
+ subRound(d, e, a, b, c, K5, expand_store(52), 3);
+ subRound(c, d, e, a, b, K5, expand_store(53), 3);
+ subRound(b, c, d, e, a, K5, expand_store(54), 3);
+ subRound(a, b, c, d, e, K5, expand_store(55), 3);
+ subRound(e, a, b, c, d, K5, expand_store(56), 3);
+ subRound(d, e, a, b, c, K5, expand_store(57), 3);
+ subRound(c, d, e, a, b, K5, expand_store(58), 3);
+ subRound(b, c, d, e, a, K5, expand_store(59), 3);
+ subRound(a, b, c, d, e, K10, expand_store(60), 4);
+ subRound(e, a, b, c, d, K10, expand_store(61), 4);
+ subRound(d, e, a, b, c, K10, expand_store(62), 4);
+ subRound(c, d, e, a, b, K10, expand_store(63), 4);
+ subRound(b, c, d, e, a, K10, expand_store(64), 4);
+ subRound(a, b, c, d, e, K10, expand_store(65), 4);
+ subRound(e, a, b, c, d, K10, expand_store(66), 4);
+ subRound(d, e, a, b, c, K10, expand_store(67), 4);
+ subRound(c, d, e, a, b, K10, expand_store(68), 4);
+ subRound(b, c, d, e, a, K10, expand_store(69), 4);
+ subRound(a, b, c, d, e, K10, expand_store(70), 4);
+ subRound(e, a, b, c, d, K10, expand_store(71), 4);
+ subRound(d, e, a, b, c, K10, expand_store(72), 4);
+ subRound(c, d, e, a, b, K10, expand_store(73), 4);
+ subRound(b, c, d, e, a, K10, expand_store(74), 4);
+ subRound(a, b, c, d, e, K10, expand_store(75), 4);
+ subRound(e, a, b, c, d, K10, expand_store(76), 4);
+ subRound(d, e, a, b, c, K10, expand_nostore(77), 4);
+ subRound(c, d, e, a, b, K10, expand_nostore(78), 4);
+ subRound(b, c, d, e, a, K10, expand_nostore(79), 4);
+ hashdata[0] += a;
+ hashdata[1] += b;
+ hashdata[2] += c;
+ hashdata[3] += d;
+ hashdata[4] += e;
+}
+
+class RttiMap {
+public:
+ static __Crun::static_type_info const * get(
+ typelib_CompoundTypeDescription const * type);
+
+private:
+ RttiMap(); // not defined
+ RttiMap(RttiMap &); // not defined
+ ~RttiMap(); // not defined
+ void operator =(RttiMap &); // not defined
+
+ struct Data {
+ __Crun::static_type_info * info;
+ rtl::OString cppName;
+ std::vector< __Crun::class_base_descr > bases;
+ };
+ typedef std::map< rtl::OUString, Data > Map;
+
+ static void toCppNames(
+ rtl::OUString const & unoName, rtl::OString * cppName,
+ rtl::OString * rttiName);
+
+ static Data const & get_(typelib_CompoundTypeDescription const * type);
+
+ static osl::Mutex m_mutex;
+ static Map * m_map;
+};
+
+osl::Mutex RttiMap::m_mutex;
+RttiMap::Map * RttiMap::m_map;
+
+__Crun::static_type_info const * RttiMap::get(
+ typelib_CompoundTypeDescription const * type)
+{
+ osl::MutexGuard g(m_mutex);
+ if (m_map == NULL) {
+ m_map = new Map; // leaked
+ }
+ return get_(type).info;
+}
+
+void RttiMap::toCppNames(
+ rtl::OUString const & unoName, rtl::OString * cppName,
+ rtl::OString * rttiName)
+{
+ OSL_ASSERT(cppName != NULL && rttiName != NULL);
+ rtl::OStringBuffer bc;
+ rtl::OStringBuffer br;
+ br.append("__1n");
+ for (sal_Int32 i = 0; i != -1;) {
+ rtl::OUString tok(unoName.getToken(0, '.', i));
+ bc.append(rtl::OUStringToOString(tok, RTL_TEXTENCODING_UTF8));
+ // conversion should never fail, as tok should be well-formed ASCII
+ if (i != -1) {
+ bc.append("::");
+ }
+ sal_Int32 len = tok.getLength();
+ sal_Int32 pos = br.getLength();
+ for (sal_Int32 n = len / 26; n > 0; n /= 26) {
+ br.insert(pos, static_cast< char >('a' + (n % 26)));
+ }
+ br.append(static_cast< char >('A' + (len % 26)));
+ for (sal_Int32 j = 0; j < len; ++j) {
+ sal_Unicode c = tok[j];
+ OSL_ASSERT(
+ c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' ||
+ c >= 'a' && c <= 'z');
+ if (c == 'Q') {
+ br.append("QdD");
+ } else {
+ br.append(static_cast< char >(c));
+ }
+ }
+ }
+ br.append('_');
+ *cppName = bc.makeStringAndClear();
+ *rttiName = br.makeStringAndClear();
+}
+
+RttiMap::Data const & RttiMap::get_(
+ typelib_CompoundTypeDescription const * type)
+{
+ rtl::OUString name(type->aBase.pTypeName);
+ Map::iterator it(m_map->find(name));
+ if (it == m_map->end()) {
+ it = m_map->insert(std::make_pair(name, Data())).first;
+ Data & data = it->second;
+ rtl::OString rttiName;
+ toCppNames(name, &data.cppName, &rttiName);
+ data.info = new __Crun::static_type_info;
+ data.info->ty_name = data.cppName.getStr() -
+ reinterpret_cast< char * >(&data.info->ty_name);
+ data.info->reserved = 0;
+ NistHash hash(rttiName);
+ data.info->type_hash[0] = hash.hashdata[0];
+ data.info->type_hash[1] = hash.hashdata[1];
+ data.info->type_hash[2] = hash.hashdata[2];
+ data.info->type_hash[3] = hash.hashdata[3];
+ data.info->flags = 0;
+ data.info->cv_qualifiers = 0;
+ if (type->pBaseTypeDescription != NULL) {
+ data.bases = get_(type->pBaseTypeDescription).bases;
+ OSL_ASSERT(!data.bases.empty());
+ data.bases.back().offset = 0;
+ }
+ __Crun::class_base_descr last;
+ last.type_hash[0] = data.info->type_hash[0];
+ last.type_hash[1] = data.info->type_hash[1];
+ last.type_hash[2] = data.info->type_hash[2];
+ last.type_hash[3] = data.info->type_hash[3];
+ last.offset = 0x8000000000000000;
+ data.bases.push_back(last);
+ data.info->base_table = reinterpret_cast< char * >(&data.bases[0]) -
+ reinterpret_cast< char * >(&data.info->base_table);
+ }
+ return it->second;
+}
+
+void deleteException(
+ void * exception, unsigned int * thunk, typelib_TypeDescription * type)
+{
+ uno_destructData(
+ exception, type,
+ reinterpret_cast< uno_ReleaseFunc >(css::uno::cpp_release));
+ typelib_typedescription_release(type);
+ delete[] thunk;
+}
+
+}
+
+namespace bridges { namespace cpp_uno { namespace cc5_solaris_sparc64 {
+
+void raiseException(uno_Any * exception, uno_Mapping * unoToCpp) {
+ bridges::cpp_uno::shared::ArrayPointer< unsigned long > thunkPtr(
+ new unsigned long[4]);
+ typelib_TypeDescription * type = NULL;
+ typelib_typedescriptionreference_getDescription(&type, exception->pType);
+ __Crun::static_type_info const * rtti = RttiMap::get(
+ reinterpret_cast< typelib_CompoundTypeDescription * >(type));
+ void * exc = __Crun::ex_alloc(type->nSize);
+ uno_copyAndConvertData(exc, exception->pData, type, unoToCpp);
+ uno_any_destruct(exception, NULL);
+ unsigned long * thunk = thunkPtr.release();
+ // 0*4: rd %pc, %o1:
+ // 1*4: ldx %o1, (6-0)*4, %o3:
+ thunk[0] = 0x93414000D65A6018;
+ // 2*4: jmpl %o3, %g0, %g0:
+ // 3*4: ldx %o1, (4-0)*4, %o2:
+ thunk[1] = 0x81C2C000D45A6010;
+ // 4*4: .xword type:
+ thunk[2] = reinterpret_cast< unsigned long >(type);
+ // 6*4: .xword deleteException:
+ thunk[3] = reinterpret_cast< unsigned long >(deleteException);
+ flushCode(thunk, thunk + 4);
+ __Crun::ex_throw(exc, rtti, toFunction(thunk));
+}
+
+void fillUnoException(
+ void * cppException, char const * cppName, uno_Any * unoException,
+ uno_Mapping * cppToUno)
+{
+ rtl::OUString name;
+ typelib_TypeDescription * type = NULL;
+ if (toUnoName(cppName, &name)) {
+ typelib_typedescription_getByName(&type, name.pData);
+ }
+ if (type == NULL || type->eTypeClass != typelib_TypeClass_EXCEPTION) {
+ css::uno::RuntimeException exc(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM("Not a UNO exception type: ")) +
+ name),
+ css::uno::Reference< css::uno::XInterface >());
+ uno_type_any_constructAndConvert(
+ unoException, &exc, getCppuType(&exc).getTypeLibType(), cppToUno);
+ } else {
+ uno_any_constructAndConvert(unoException, cppException, type, cppToUno);
+ }
+ if (type != NULL) {
+ typelib_typedescription_release(type);
+ }
+}
+
+} } }
diff --git a/bridges/source/cpp_uno/cc5_solaris_sparc64/exceptions.hxx b/bridges/source/cpp_uno/cc5_solaris_sparc64/exceptions.hxx
new file mode 100644
index 000000000000..7a0963bc695d
--- /dev/null
+++ b/bridges/source/cpp_uno/cc5_solaris_sparc64/exceptions.hxx
@@ -0,0 +1,72 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_BRIDGES_SOURCE_CPP_UNO_CC5_SOLARIS_SPARC64_EXCEPTIONS_HXX
+#define INCLUDED_BRIDGES_SOURCE_CPP_UNO_CC5_SOLARIS_SPARC64_EXCEPTIONS_HXX
+
+#include "sal/config.h"
+
+#include <cstddef>
+
+#include "typelib/typedescription.h"
+#include "uno/any2.h"
+#include "uno/mapping.h"
+
+// Private CC5 structures and functions:
+namespace __Crun {
+ struct class_base_descr {
+ int type_hash[4];
+ std::size_t offset;
+ };
+ struct static_type_info {
+ std::ptrdiff_t ty_name;
+ std::ptrdiff_t reserved;
+ std::ptrdiff_t base_table;
+ int type_hash[4];
+ unsigned int flags;
+ unsigned int cv_qualifiers;
+ };
+ void * ex_alloc(unsigned long);
+ void ex_throw(void *, static_type_info const *, void (*)(void *));
+ void * ex_get();
+ void ex_rethrow_q() throw ();
+}
+namespace __Cimpl {
+ char const * ex_name();
+}
+
+namespace bridges { namespace cpp_uno { namespace cc5_solaris_sparc64 {
+
+void raiseException(uno_Any * exception, uno_Mapping * unoToCpp);
+
+void fillUnoException(
+ void * cppException, char const * cppName, uno_Any * unoException,
+ uno_Mapping * cppToUno);
+
+} } }
+
+#endif
diff --git a/bridges/source/cpp_uno/cc5_solaris_sparc64/flushcode.hxx b/bridges/source/cpp_uno/cc5_solaris_sparc64/flushcode.hxx
new file mode 100644
index 000000000000..bdce67c4da89
--- /dev/null
+++ b/bridges/source/cpp_uno/cc5_solaris_sparc64/flushcode.hxx
@@ -0,0 +1,48 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_BRIDGES_SOURCE_CPP_UNO_CC5_SOLARIS_SPARC64_FLUSHCODE_HXX
+#define INCLUDED_BRIDGES_SOURCE_CPP_UNO_CC5_SOLARIS_SPARC64_FLUSHCODE_HXX
+
+#include "sal/config.h"
+
+extern "C" void sync_instruction_memory(caddr_t addr, int len); // from libc
+
+namespace bridges { namespace cpp_uno { namespace cc5_solaris_sparc64 {
+
+/**
+ * Flush a region of memory into which code has been written dynamically.
+ */
+inline void flushCode(void const * begin, void const * end) {
+ sync_instruction_memory(
+ static_cast< caddr_t >(const_cast< void * >(begin)),
+ static_cast< char const * >(end) - static_cast< char const * >(begin));
+}
+
+} } }
+
+#endif
diff --git a/bridges/source/cpp_uno/cc5_solaris_sparc64/fp.hxx b/bridges/source/cpp_uno/cc5_solaris_sparc64/fp.hxx
new file mode 100644
index 000000000000..84bdbc74bf15
--- /dev/null
+++ b/bridges/source/cpp_uno/cc5_solaris_sparc64/fp.hxx
@@ -0,0 +1,113 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_BRIDGES_SOURCE_CPP_UNO_CC5_SOLARIS_SPARC64_FP_HXX
+#define INCLUDED_BRIDGES_SOURCE_CPP_UNO_CC5_SOLARIS_SPARC64_FP_HXX
+
+#include "sal/config.h"
+
+extern "C" {
+
+void fp_loadf0(float *);
+void fp_loadf1(float *);
+void fp_loadf2(float *);
+void fp_loadf3(float *);
+void fp_loadf4(float *);
+void fp_loadf5(float *);
+void fp_loadf6(float *);
+void fp_loadf7(float *);
+void fp_loadf9(float *);
+void fp_loadf11(float *);
+void fp_loadf13(float *);
+void fp_loadf15(float *);
+void fp_loadf17(float *);
+void fp_loadf19(float *);
+void fp_loadf21(float *);
+void fp_loadf23(float *);
+void fp_loadf25(float *);
+void fp_loadf27(float *);
+void fp_loadf29(float *);
+void fp_loadf31(float *);
+
+void fp_storef0(float *);
+void fp_storef1(float *);
+void fp_storef2(float *);
+void fp_storef3(float *);
+void fp_storef4(float *);
+void fp_storef5(float *);
+void fp_storef6(float *);
+void fp_storef7(float *);
+void fp_storef9(float *);
+void fp_storef11(float *);
+void fp_storef13(float *);
+void fp_storef15(float *);
+void fp_storef17(float *);
+void fp_storef19(float *);
+void fp_storef21(float *);
+void fp_storef23(float *);
+void fp_storef25(float *);
+void fp_storef27(float *);
+void fp_storef29(float *);
+void fp_storef31(float *);
+
+void fp_loadd0(double *);
+void fp_loadd2(double *);
+void fp_loadd4(double *);
+void fp_loadd6(double *);
+void fp_loadd8(double *);
+void fp_loadd10(double *);
+void fp_loadd12(double *);
+void fp_loadd14(double *);
+void fp_loadd16(double *);
+void fp_loadd18(double *);
+void fp_loadd20(double *);
+void fp_loadd22(double *);
+void fp_loadd24(double *);
+void fp_loadd26(double *);
+void fp_loadd28(double *);
+void fp_loadd30(double *);
+
+void fp_stored0(double *);
+void fp_stored2(double *);
+void fp_stored4(double *);
+void fp_stored6(double *);
+void fp_stored8(double *);
+void fp_stored10(double *);
+void fp_stored12(double *);
+void fp_stored14(double *);
+void fp_stored16(double *);
+void fp_stored18(double *);
+void fp_stored20(double *);
+void fp_stored22(double *);
+void fp_stored24(double *);
+void fp_stored26(double *);
+void fp_stored28(double *);
+void fp_stored30(double *);
+
+}
+
+#endif
diff --git a/bridges/source/cpp_uno/cc5_solaris_sparc64/fp.s b/bridges/source/cpp_uno/cc5_solaris_sparc64/fp.s
new file mode 100644
index 000000000000..92216d4e08dd
--- /dev/null
+++ b/bridges/source/cpp_uno/cc5_solaris_sparc64/fp.s
@@ -0,0 +1,602 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+.global fp_loadf0
+.align 8
+fp_loadf0:
+ retl
+ ld [%o0], %f0
+.size fp_loadf0, . - fp_loadf0
+.type fp_loadf0, #function
+
+.global fp_loadf1
+.align 8
+fp_loadf1:
+ retl
+ ld [%o0], %f1
+.size fp_loadf1, . - fp_loadf1
+.type fp_loadf1, #function
+
+.global fp_loadf2
+.align 8
+fp_loadf2:
+ retl
+ ld [%o0], %f2
+.size fp_loadf2, . - fp_loadf2
+.type fp_loadf2, #function
+
+.global fp_loadf3
+.align 8
+fp_loadf3:
+ retl
+ ld [%o0], %f3
+.size fp_loadf3, . - fp_loadf3
+.type fp_loadf3, #function
+
+.global fp_loadf4
+.align 8
+fp_loadf4:
+ retl
+ ld [%o0], %f4
+.size fp_loadf4, . - fp_loadf4
+.type fp_loadf4, #function
+
+.global fp_loadf5
+.align 8
+fp_loadf5:
+ retl
+ ld [%o0], %f5
+.size fp_loadf5, . - fp_loadf5
+.type fp_loadf5, #function
+
+.global fp_loadf6
+.align 8
+fp_loadf6:
+ retl
+ ld [%o0], %f6
+.size fp_loadf6, . - fp_loadf6
+.type fp_loadf6, #function
+
+.global fp_loadf7
+.align 8
+fp_loadf7:
+ retl
+ ld [%o0], %f7
+.size fp_loadf7, . - fp_loadf7
+.type fp_loadf7, #function
+
+.global fp_loadf9
+.align 8
+fp_loadf9:
+ retl
+ ld [%o0], %f9
+.size fp_loadf9, . - fp_loadf9
+.type fp_loadf9, #function
+
+.global fp_loadf11
+.align 8
+fp_loadf11:
+ retl
+ ld [%o0], %f11
+.size fp_loadf11, . - fp_loadf11
+.type fp_loadf11, #function
+
+.global fp_loadf13
+.align 8
+fp_loadf13:
+ retl
+ ld [%o0], %f13
+.size fp_loadf13, . - fp_loadf13
+.type fp_loadf13, #function
+
+.global fp_loadf15
+.align 8
+fp_loadf15:
+ retl
+ ld [%o0], %f15
+.size fp_loadf15, . - fp_loadf15
+.type fp_loadf15, #function
+
+.global fp_loadf17
+.align 8
+fp_loadf17:
+ retl
+ ld [%o0], %f17
+.size fp_loadf17, . - fp_loadf17
+.type fp_loadf17, #function
+
+.global fp_loadf19
+.align 8
+fp_loadf19:
+ retl
+ ld [%o0], %f19
+.size fp_loadf19, . - fp_loadf19
+.type fp_loadf19, #function
+
+.global fp_loadf21
+.align 8
+fp_loadf21:
+ retl
+ ld [%o0], %f21
+.size fp_loadf21, . - fp_loadf21
+.type fp_loadf21, #function
+
+.global fp_loadf23
+.align 8
+fp_loadf23:
+ retl
+ ld [%o0], %f23
+.size fp_loadf23, . - fp_loadf23
+.type fp_loadf23, #function
+
+.global fp_loadf25
+.align 8
+fp_loadf25:
+ retl
+ ld [%o0], %f25
+.size fp_loadf25, . - fp_loadf25
+.type fp_loadf25, #function
+
+.global fp_loadf27
+.align 8
+fp_loadf27:
+ retl
+ ld [%o0], %f27
+.size fp_loadf27, . - fp_loadf27
+.type fp_loadf27, #function
+
+.global fp_loadf29
+.align 8
+fp_loadf29:
+ retl
+ ld [%o0], %f29
+.size fp_loadf29, . - fp_loadf29
+.type fp_loadf29, #function
+
+.global fp_loadf31
+.align 8
+fp_loadf31:
+ retl
+ ld [%o0], %f31
+.size fp_loadf31, . - fp_loadf31
+.type fp_loadf31, #function
+
+.global fp_storef0
+.align 8
+fp_storef0:
+ retl
+ st %f0, [%o0]
+.size fp_storef0, . - fp_storef0
+.type fp_storef0, #function
+
+.global fp_storef1
+.align 8
+fp_storef1:
+ retl
+ st %f1, [%o0]
+.size fp_storef1, . - fp_storef1
+.type fp_storef1, #function
+
+.global fp_storef2
+.align 8
+fp_storef2:
+ retl
+ st %f2, [%o0]
+.size fp_storef2, . - fp_storef2
+.type fp_storef2, #function
+
+.global fp_storef3
+.align 8
+fp_storef3:
+ retl
+ st %f3, [%o0]
+.size fp_storef3, . - fp_storef3
+.type fp_storef3, #function
+
+.global fp_storef4
+.align 8
+fp_storef4:
+ retl
+ st %f4, [%o0]
+.size fp_storef4, . - fp_storef4
+.type fp_storef4, #function
+
+.global fp_storef5
+.align 8
+fp_storef5:
+ retl
+ st %f5, [%o0]
+.size fp_storef5, . - fp_storef5
+.type fp_storef5, #function
+
+.global fp_storef6
+.align 8
+fp_storef6:
+ retl
+ st %f6, [%o0]
+.size fp_storef6, . - fp_storef6
+.type fp_storef6, #function
+
+.global fp_storef7
+.align 8
+fp_storef7:
+ retl
+ st %f7, [%o0]
+.size fp_storef7, . - fp_storef7
+.type fp_storef7, #function
+
+.global fp_storef9
+.align 8
+fp_storef9:
+ retl
+ st %f9, [%o0]
+.size fp_storef9, . - fp_storef9
+.type fp_storef9, #function
+
+.global fp_storef11
+.align 8
+fp_storef11:
+ retl
+ st %f11, [%o0]
+.size fp_storef11, . - fp_storef11
+.type fp_storef11, #function
+
+.global fp_storef13
+.align 8
+fp_storef13:
+ retl
+ st %f13, [%o0]
+.size fp_storef13, . - fp_storef13
+.type fp_storef13, #function
+
+.global fp_storef15
+.align 8
+fp_storef15:
+ retl
+ st %f15, [%o0]
+.size fp_storef15, . - fp_storef15
+.type fp_storef15, #function
+
+.global fp_storef17
+.align 8
+fp_storef17:
+ retl
+ st %f17, [%o0]
+.size fp_storef17, . - fp_storef17
+.type fp_storef17, #function
+
+.global fp_storef19
+.align 8
+fp_storef19:
+ retl
+ st %f19, [%o0]
+.size fp_storef19, . - fp_storef19
+.type fp_storef19, #function
+
+.global fp_storef21
+.align 8
+fp_storef21:
+ retl
+ st %f21, [%o0]
+.size fp_storef21, . - fp_storef21
+.type fp_storef21, #function
+
+.global fp_storef23
+.align 8
+fp_storef23:
+ retl
+ st %f23, [%o0]
+.size fp_storef23, . - fp_storef23
+.type fp_storef23, #function
+
+.global fp_storef25
+.align 8
+fp_storef25:
+ retl
+ st %f25, [%o0]
+.size fp_storef25, . - fp_storef25
+.type fp_storef25, #function
+
+.global fp_storef27
+.align 8
+fp_storef27:
+ retl
+ st %f27, [%o0]
+.size fp_storef27, . - fp_storef27
+.type fp_storef27, #function
+
+.global fp_storef29
+.align 8
+fp_storef29:
+ retl
+ st %f29, [%o0]
+.size fp_storef29, . - fp_storef29
+.type fp_storef29, #function
+
+.global fp_storef31
+.align 8
+fp_storef31:
+ retl
+ st %f31, [%o0]
+.size fp_storef31, . - fp_storef31
+.type fp_storef31, #function
+
+.global fp_loadd0
+.align 8
+fp_loadd0:
+ retl
+ ldd [%o0], %f0
+.size fp_loadd0, . - fp_loadd0
+.type fp_loadd0, #function
+
+.global fp_loadd2
+.align 8
+fp_loadd2:
+ retl
+ ldd [%o0], %f2
+.size fp_loadd2, . - fp_loadd2
+.type fp_loadd2, #function
+
+.global fp_loadd4
+.align 8
+fp_loadd4:
+ retl
+ ldd [%o0], %f4
+.size fp_loadd4, . - fp_loadd4
+.type fp_loadd4, #function
+
+.global fp_loadd6
+.align 8
+fp_loadd6:
+ retl
+ ldd [%o0], %f6
+.size fp_loadd6, . - fp_loadd6
+.type fp_loadd6, #function
+
+.global fp_loadd8
+.align 8
+fp_loadd8:
+ retl
+ ldd [%o0], %f8
+.size fp_loadd8, . - fp_loadd8
+.type fp_loadd8, #function
+
+.global fp_loadd10
+.align 8
+fp_loadd10:
+ retl
+ ldd [%o0], %f10
+.size fp_loadd10, . - fp_loadd10
+.type fp_loadd10, #function
+
+.global fp_loadd12
+.align 8
+fp_loadd12:
+ retl
+ ldd [%o0], %f12
+.size fp_loadd12, . - fp_loadd12
+.type fp_loadd12, #function
+
+.global fp_loadd14
+.align 8
+fp_loadd14:
+ retl
+ ldd [%o0], %f14
+.size fp_loadd14, . - fp_loadd14
+.type fp_loadd14, #function
+
+.global fp_loadd16
+.align 8
+fp_loadd16:
+ retl
+ ldd [%o0], %f16
+.size fp_loadd16, . - fp_loadd16
+.type fp_loadd16, #function
+
+.global fp_loadd18
+.align 8
+fp_loadd18:
+ retl
+ ldd [%o0], %f18
+.size fp_loadd18, . - fp_loadd18
+.type fp_loadd18, #function
+
+.global fp_loadd20
+.align 8
+fp_loadd20:
+ retl
+ ldd [%o0], %f20
+.size fp_loadd20, . - fp_loadd20
+.type fp_loadd20, #function
+
+.global fp_loadd22
+.align 8
+fp_loadd22:
+ retl
+ ldd [%o0], %f22
+.size fp_loadd22, . - fp_loadd22
+.type fp_loadd22, #function
+
+.global fp_loadd24
+.align 8
+fp_loadd24:
+ retl
+ ldd [%o0], %f24
+.size fp_loadd24, . - fp_loadd24
+.type fp_loadd24, #function
+
+.global fp_loadd26
+.align 8
+fp_loadd26:
+ retl
+ ldd [%o0], %f26
+.size fp_loadd26, . - fp_loadd26
+.type fp_loadd26, #function
+
+.global fp_loadd28
+.align 8
+fp_loadd28:
+ retl
+ ldd [%o0], %f28
+.size fp_loadd28, . - fp_loadd28
+.type fp_loadd28, #function
+
+.global fp_loadd30
+.align 8
+fp_loadd30:
+ retl
+ ldd [%o0], %f30
+.size fp_loadd30, . - fp_loadd30
+.type fp_loadd30, #function
+
+.global fp_stored0
+.align 8
+fp_stored0:
+ retl
+ std %f0, [%o0]
+.size fp_stored0, . - fp_stored0
+.type fp_stored0, #function
+
+.global fp_stored2
+.align 8
+fp_stored2:
+ retl
+ std %f2, [%o0]
+.size fp_stored2, . - fp_stored2
+.type fp_stored2, #function
+
+.global fp_stored4
+.align 8
+fp_stored4:
+ retl
+ std %f4, [%o0]
+.size fp_stored4, . - fp_stored4
+.type fp_stored4, #function
+
+.global fp_stored6
+.align 8
+fp_stored6:
+ retl
+ std %f6, [%o0]
+.size fp_stored6, . - fp_stored6
+.type fp_stored6, #function
+
+.global fp_stored8
+.align 8
+fp_stored8:
+ retl
+ std %f8, [%o0]
+.size fp_stored8, . - fp_stored8
+.type fp_stored8, #function
+
+.global fp_stored10
+.align 8
+fp_stored10:
+ retl
+ std %f10, [%o0]
+.size fp_stored10, . - fp_stored10
+.type fp_stored10, #function
+
+.global fp_stored12
+.align 8
+fp_stored12:
+ retl
+ std %f12, [%o0]
+.size fp_stored12, . - fp_stored12
+.type fp_stored12, #function
+
+.global fp_stored14
+.align 8
+fp_stored14:
+ retl
+ std %f14, [%o0]
+.size fp_stored14, . - fp_stored14
+.type fp_stored14, #function
+
+.global fp_stored16
+.align 8
+fp_stored16:
+ retl
+ std %f16, [%o0]
+.size fp_stored16, . - fp_stored16
+.type fp_stored16, #function
+
+.global fp_stored18
+.align 8
+fp_stored18:
+ retl
+ std %f18, [%o0]
+.size fp_stored18, . - fp_stored18
+.type fp_stored18, #function
+
+.global fp_stored20
+.align 8
+fp_stored20:
+ retl
+ std %f20, [%o0]
+.size fp_stored20, . - fp_stored20
+.type fp_stored20, #function
+
+.global fp_stored22
+.align 8
+fp_stored22:
+ retl
+ std %f22, [%o0]
+.size fp_stored22, . - fp_stored22
+.type fp_stored22, #function
+
+.global fp_stored24
+.align 8
+fp_stored24:
+ retl
+ std %f24, [%o0]
+.size fp_stored24, . - fp_stored24
+.type fp_stored24, #function
+
+.global fp_stored26
+.align 8
+fp_stored26:
+ retl
+ std %f26, [%o0]
+.size fp_stored26, . - fp_stored26
+.type fp_stored26, #function
+
+.global fp_stored28
+.align 8
+fp_stored28:
+ retl
+ std %f28, [%o0]
+.size fp_stored28, . - fp_stored28
+.type fp_stored28, #function
+
+.global fp_stored30
+.align 8
+fp_stored30:
+ retl
+ std %f30, [%o0]
+.size fp_stored30, . - fp_stored30
+.type fp_stored30, #function
diff --git a/bridges/source/cpp_uno/cc5_solaris_sparc64/isdirectreturntype.cxx b/bridges/source/cpp_uno/cc5_solaris_sparc64/isdirectreturntype.cxx
new file mode 100644
index 000000000000..f2af8103417c
--- /dev/null
+++ b/bridges/source/cpp_uno/cc5_solaris_sparc64/isdirectreturntype.cxx
@@ -0,0 +1,81 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "precompiled_bridges.hxx"
+#include "sal/config.h"
+
+#include <cstddef>
+
+#include "sal/types.h"
+#include "typelib/typeclass.h"
+#include "typelib/typedescription.h"
+
+#include "isdirectreturntype.hxx"
+
+namespace {
+
+bool isPodStruct(typelib_CompoundTypeDescription * type) {
+ for (; type != NULL; type = type->pBaseTypeDescription) {
+ for (sal_Int32 i = 0; i < type->nMembers; ++i) {
+ if (!bridges::cpp_uno::cc5_solaris_sparc64::isDirectReturnType(
+ type->ppTypeRefs[i]))
+ {
+ return false;
+ }
+ }
+ }
+ return true;
+}
+
+}
+
+namespace bridges { namespace cpp_uno { namespace cc5_solaris_sparc64 {
+
+bool isDirectReturnType(typelib_TypeDescriptionReference * type) {
+ // Is POD of size <= 32 bytes:
+ switch (type->eTypeClass) {
+ default:
+ return true;
+ case typelib_TypeClass_STRING:
+ case typelib_TypeClass_TYPE:
+ case typelib_TypeClass_ANY:
+ case typelib_TypeClass_SEQUENCE:
+ case typelib_TypeClass_INTERFACE:
+ return false;
+ case typelib_TypeClass_STRUCT:
+ {
+ typelib_TypeDescription * t = NULL;
+ TYPELIB_DANGER_GET(&t, type);
+ bool b = t->nSize <= 32 && isPodStruct(
+ reinterpret_cast< typelib_CompoundTypeDescription * >(t));
+ TYPELIB_DANGER_RELEASE(t);
+ return b;
+ }
+ }
+}
+
+} } }
diff --git a/bridges/source/cpp_uno/cc5_solaris_sparc64/isdirectreturntype.hxx b/bridges/source/cpp_uno/cc5_solaris_sparc64/isdirectreturntype.hxx
new file mode 100644
index 000000000000..a5c182cf7985
--- /dev/null
+++ b/bridges/source/cpp_uno/cc5_solaris_sparc64/isdirectreturntype.hxx
@@ -0,0 +1,41 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_BRIDGES_SOURCE_CPP_UNO_CC5_SOLARIS_SPARC64_ISDIRECTRETURNTYPE_x
+#define INCLUDED_BRIDGES_SOURCE_CPP_UNO_CC5_SOLARIS_SPARC64_ISDIRECTRETURNTYPE_x
+
+#include "sal/config.h"
+
+#include "typelib/typedescription.h"
+
+namespace bridges { namespace cpp_uno { namespace cc5_solaris_sparc64 {
+
+bool isDirectReturnType(typelib_TypeDescriptionReference * type);
+
+} } }
+
+#endif
diff --git a/bridges/source/cpp_uno/cc5_solaris_sparc64/makefile.mk b/bridges/source/cpp_uno/cc5_solaris_sparc64/makefile.mk
new file mode 100644
index 000000000000..ec64b1db49dd
--- /dev/null
+++ b/bridges/source/cpp_uno/cc5_solaris_sparc64/makefile.mk
@@ -0,0 +1,61 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ := ..$/..$/..
+PRJNAME := bridges
+TARGET := sunpro5_uno
+ENABLE_EXCEPTIONS := TRUE
+
+.INCLUDE: settings.mk
+
+.IF "$(COM)" == "C52" && "$(CPU)" == "U"
+
+SHL1TARGET = $(TARGET)
+SHL1OBJS = \
+ $(SLO)$/callvirtualmethod.obj \
+ $(SLO)$/cpp2uno.obj \
+ $(SLO)$/exceptions.obj \
+ $(SLO)$/fp.obj \
+ $(SLO)$/isdirectreturntype.obj \
+ $(SLO)$/uno2cpp.obj \
+ $(SLO)$/vtableslotcall.obj
+SHL1LIBS = $(SLB)$/cpp_uno_shared.lib
+SHL1STDLIBS = $(CPPULIB) $(SALLIB)
+SHL1RPATH = URELIB
+SHL1VERSIONMAP = ..$/..$/bridge_exports.map
+SHL1IMPLIB= i$(SHL1TARGET)
+DEF1NAME = $(SHL1TARGET)
+
+SLOFILES = $(SHL1OBJS)
+
+.ENDIF
+
+.INCLUDE: target.mk
+
+$(SLO)$/%.obj: %.s
+ CC -m64 -KPIC -c -o $(SLO)$/$(@:b).o $<
+ touch $@
diff --git a/bridges/source/cpp_uno/cc5_solaris_sparc64/uno2cpp.cxx b/bridges/source/cpp_uno/cc5_solaris_sparc64/uno2cpp.cxx
new file mode 100644
index 000000000000..05733f2bd9ed
--- /dev/null
+++ b/bridges/source/cpp_uno/cc5_solaris_sparc64/uno2cpp.cxx
@@ -0,0 +1,509 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "precompiled_bridges.hxx"
+#include "sal/config.h"
+
+#include <algorithm>
+#include <cstddef>
+#include <cstring>
+
+#include "bridges/cpp_uno/shared/bridge.hxx"
+#include "bridges/cpp_uno/shared/types.hxx"
+#include "bridges/cpp_uno/shared/unointerfaceproxy.hxx"
+#include "bridges/cpp_uno/shared/vtables.hxx"
+#include "com/sun/star/uno/Exception.hpp"
+#include "com/sun/star/uno/genfunc.hxx"
+#include "osl/diagnose.h"
+#include "rtl/ustring.h"
+#include "rtl/ustring.hxx"
+#include "sal/alloca.h"
+#include "sal/types.h"
+#include "typelib/typeclass.h"
+#include "typelib/typedescription.h"
+#include "uno/any2.h"
+#include "uno/data.h"
+
+#include "callvirtualmethod.hxx"
+#include "exceptions.hxx"
+#include "fp.hxx"
+#include "isdirectreturntype.hxx"
+
+namespace {
+
+namespace css = com::sun::star;
+
+void storeFpRegsToStruct(typelib_TypeDescription * type, void * data) {
+ for (typelib_CompoundTypeDescription * t =
+ reinterpret_cast< typelib_CompoundTypeDescription * >(type);
+ t != NULL; t = t->pBaseTypeDescription)
+ {
+ for (sal_Int32 i = 0; i < t->nMembers; ++i) {
+ switch (t->ppTypeRefs[i]->eTypeClass) {
+ case typelib_TypeClass_FLOAT:
+ switch (t->pMemberOffsets[i]) {
+ case 0:
+ fp_storef0(reinterpret_cast< float * >(data));
+ break;
+ case 4:
+ fp_storef1(reinterpret_cast< float * >(data) + 1);
+ break;
+ case 8:
+ fp_storef2(reinterpret_cast< float * >(data) + 2);
+ break;
+ case 12:
+ fp_storef3(reinterpret_cast< float * >(data) + 3);
+ break;
+ case 16:
+ fp_storef4(reinterpret_cast< float * >(data) + 4);
+ break;
+ case 20:
+ fp_storef5(reinterpret_cast< float * >(data) + 5);
+ break;
+ case 24:
+ fp_storef6(reinterpret_cast< float * >(data) + 6);
+ break;
+ case 28:
+ fp_storef7(reinterpret_cast< float * >(data) + 7);
+ break;
+ default:
+ OSL_ASSERT(false);
+ break;
+ }
+ break;
+ case typelib_TypeClass_DOUBLE:
+ switch (t->pMemberOffsets[i]) {
+ case 0:
+ fp_stored0(reinterpret_cast< double * >(data));
+ break;
+ case 8:
+ fp_stored2(reinterpret_cast< double * >(data) + 1);
+ break;
+ case 16:
+ fp_stored4(reinterpret_cast< double * >(data) + 2);
+ break;
+ case 24:
+ fp_stored6(reinterpret_cast< double * >(data) + 3);
+ break;
+ default:
+ OSL_ASSERT(false);
+ break;
+ }
+ break;
+ case typelib_TypeClass_STRUCT:
+ {
+ typelib_TypeDescription * td = NULL;
+ TYPELIB_DANGER_GET(&td, t->ppTypeRefs[i]);
+ storeFpRegsToStruct(td, data);
+ TYPELIB_DANGER_RELEASE(td);
+ break;
+ }
+ }
+ }
+ }
+}
+
+void call(
+ bridges::cpp_uno::shared::UnoInterfaceProxy * proxy,
+ bridges::cpp_uno::shared::VtableSlot slot,
+ typelib_TypeDescriptionReference * returnType, sal_Int32 count,
+ typelib_MethodParameter * parameters, void * returnValue, void ** arguments,
+ uno_Any ** exception)
+{
+ bool directRet = bridges::cpp_uno::cc5_solaris_sparc64::isDirectReturnType(
+ returnType);
+ long * stack = static_cast< long * >(
+ alloca(
+ std::max< sal_Int32 >(count + (directRet ? 1 : 2), 4) *
+ sizeof (long)));
+ sal_Int32 sp = 0;
+ typelib_TypeDescription * rtd = NULL;
+ TYPELIB_DANGER_GET(&rtd, returnType);
+ bool retconv = bridges::cpp_uno::shared::relatesToInterfaceType(rtd);
+ OSL_ASSERT(!(directRet && retconv));
+ void * ret;
+ if (!directRet) {
+ ret = retconv ? alloca(rtd->nSize) : returnValue;
+ stack[sp++] = reinterpret_cast< long >(ret);
+ }
+ unsigned long ** thisPtr = reinterpret_cast< unsigned long ** >(
+ proxy->getCppI()) + slot.offset;
+ stack[sp++] = reinterpret_cast< long >(thisPtr);
+ void ** cppArgs = static_cast< void ** >(alloca(count * sizeof (void *)));
+ typelib_TypeDescription ** ptds =
+ static_cast< typelib_TypeDescription ** >(
+ alloca(count * sizeof (typelib_TypeDescription *)));
+ for (sal_Int32 i = 0; i < count; ++i) {
+ if (!parameters[i].bOut &&
+ bridges::cpp_uno::shared::isSimpleType(parameters[i].pTypeRef))
+ {
+ cppArgs[i] = NULL;
+ switch (parameters[i].pTypeRef->eTypeClass) {
+ case typelib_TypeClass_BOOLEAN:
+ stack[sp] = *static_cast< sal_Bool * >(arguments[i]);
+ break;
+ case typelib_TypeClass_BYTE:
+ stack[sp] = *static_cast< sal_Int8 * >(arguments[i]);
+ break;
+ case typelib_TypeClass_SHORT:
+ stack[sp] = *static_cast< sal_Int16 * >(arguments[i]);
+ break;
+ case typelib_TypeClass_UNSIGNED_SHORT:
+ stack[sp] = *static_cast< sal_uInt16 * >(arguments[i]);
+ break;
+ case typelib_TypeClass_LONG:
+ case typelib_TypeClass_ENUM:
+ stack[sp] = *static_cast< sal_Int32 * >(arguments[i]);
+ break;
+ case typelib_TypeClass_UNSIGNED_LONG:
+ stack[sp] = *static_cast< sal_uInt32 * >(arguments[i]);
+ break;
+ case typelib_TypeClass_HYPER:
+ stack[sp] = *static_cast< sal_Int64 * >(arguments[i]);
+ break;
+ case typelib_TypeClass_UNSIGNED_HYPER:
+ stack[sp] = *static_cast< sal_uInt64 * >(arguments[i]);
+ break;
+ case typelib_TypeClass_FLOAT:
+ {
+ float * f = static_cast< float * >(arguments[i]);
+ switch (sp) {
+ case 1:
+ fp_loadf3(f);
+ break;
+ case 2:
+ fp_loadf5(f);
+ break;
+ case 3:
+ fp_loadf7(f);
+ break;
+ case 4:
+ fp_loadf9(f);
+ break;
+ case 5:
+ fp_loadf11(f);
+ break;
+ case 6:
+ fp_loadf13(f);
+ break;
+ case 7:
+ fp_loadf15(f);
+ break;
+ case 8:
+ fp_loadf17(f);
+ break;
+ case 9:
+ fp_loadf19(f);
+ break;
+ case 10:
+ fp_loadf21(f);
+ break;
+ case 11:
+ fp_loadf23(f);
+ break;
+ case 12:
+ fp_loadf25(f);
+ break;
+ case 13:
+ fp_loadf27(f);
+ break;
+ case 14:
+ fp_loadf29(f);
+ break;
+ case 15:
+ fp_loadf31(f);
+ break;
+ default:
+ reinterpret_cast< float * >(stack + sp)[1] = *f;
+ break;
+ }
+ break;
+ }
+ case typelib_TypeClass_DOUBLE:
+ {
+ double * d = static_cast< double * >(arguments[i]);
+ switch (sp) {
+ case 1:
+ fp_loadd2(d);
+ break;
+ case 2:
+ fp_loadd4(d);
+ break;
+ case 3:
+ fp_loadd6(d);
+ break;
+ case 4:
+ fp_loadd8(d);
+ break;
+ case 5:
+ fp_loadd10(d);
+ break;
+ case 6:
+ fp_loadd12(d);
+ break;
+ case 7:
+ fp_loadd14(d);
+ break;
+ case 8:
+ fp_loadd16(d);
+ break;
+ case 9:
+ fp_loadd18(d);
+ break;
+ case 10:
+ fp_loadd20(d);
+ break;
+ case 11:
+ fp_loadd22(d);
+ break;
+ case 12:
+ fp_loadd24(d);
+ break;
+ case 13:
+ fp_loadd26(d);
+ break;
+ case 14:
+ fp_loadd28(d);
+ break;
+ case 15:
+ fp_loadd30(d);
+ break;
+ default:
+ *reinterpret_cast< double * >(stack + sp) = *d;
+ break;
+ }
+ break;
+ }
+ case typelib_TypeClass_CHAR:
+ stack[sp] = *static_cast< sal_Unicode * >(arguments[i]);
+ break;
+ default:
+ OSL_ASSERT(false);
+ break;
+ }
+ } else {
+ typelib_TypeDescription * ptd = NULL;
+ TYPELIB_DANGER_GET(&ptd, parameters[i].pTypeRef);
+ if (!parameters[i].bIn) {
+ cppArgs[i] = alloca(ptd->nSize);
+ uno_constructData(cppArgs[i], ptd);
+ ptds[i] = ptd;
+ *reinterpret_cast< void ** >(stack + sp) = cppArgs[i];
+ } else if (bridges::cpp_uno::shared::relatesToInterfaceType(ptd)) {
+ cppArgs[i] = alloca(ptd->nSize);
+ uno_copyAndConvertData(
+ cppArgs[i], arguments[i], ptd,
+ proxy->getBridge()->getUno2Cpp());
+ ptds[i] = ptd;
+ *reinterpret_cast< void ** >(stack + sp) = cppArgs[i];
+ } else {
+ cppArgs[i] = NULL;
+ *reinterpret_cast< void ** >(stack + sp) = arguments[i];
+ TYPELIB_DANGER_RELEASE(ptd);
+ }
+ }
+ ++sp;
+ }
+ try {
+ callVirtualMethod(
+ (*thisPtr)[slot.index + 2], stack,
+ std::max< sal_Int32 >(sp - 6, 0) * sizeof (long));
+ } catch (css::uno::Exception &) {
+ void * exc = __Crun::ex_get();
+ char const * name = __Cimpl::ex_name();
+ bridges::cpp_uno::cc5_solaris_sparc64::fillUnoException(
+ exc, name, *exception, proxy->getBridge()->getCpp2Uno());
+ for (sal_Int32 i = 0; i < count; ++i) {
+ if (cppArgs[i] != NULL) {
+ uno_destructData(
+ cppArgs[i], ptds[i],
+ reinterpret_cast< uno_ReleaseFunc >(css::uno::cpp_release));
+ TYPELIB_DANGER_RELEASE(ptds[i]);
+ }
+ }
+ TYPELIB_DANGER_RELEASE(rtd);
+ return;
+ }
+ *exception = NULL;
+ for (sal_Int32 i = 0; i < count; ++i) {
+ if (cppArgs[i] != NULL) {
+ if (parameters[i].bOut) {
+ if (parameters[i].bIn) {
+ uno_destructData(arguments[i], ptds[i], NULL);
+ }
+ uno_copyAndConvertData(
+ arguments[i], cppArgs[i], ptds[i],
+ proxy->getBridge()->getCpp2Uno());
+ }
+ uno_destructData(
+ cppArgs[i], ptds[i],
+ reinterpret_cast< uno_ReleaseFunc >(css::uno::cpp_release));
+ TYPELIB_DANGER_RELEASE(ptds[i]);
+ }
+ }
+ if (directRet) {
+ switch (rtd->eTypeClass) {
+ case typelib_TypeClass_FLOAT:
+ fp_storef0(reinterpret_cast< float * >(returnValue));
+ break;
+ case typelib_TypeClass_DOUBLE:
+ fp_stored0(reinterpret_cast< double * >(returnValue));
+ break;
+ case typelib_TypeClass_STRUCT:
+ storeFpRegsToStruct(rtd, stack);
+ // fall through
+ case typelib_TypeClass_ANY:
+ std::memcpy(returnValue, stack, rtd->nSize);
+ break;
+ default:
+ OSL_ASSERT(rtd->nSize <= 8);
+ std::memcpy(
+ returnValue,
+ reinterpret_cast< char * >(stack) + (8 - rtd->nSize),
+ rtd->nSize);
+ break;
+ }
+ } else if (retconv) {
+ uno_copyAndConvertData(
+ returnValue, ret, rtd, proxy->getBridge()->getCpp2Uno());
+ uno_destructData(
+ ret, rtd,
+ reinterpret_cast< uno_ReleaseFunc >(css::uno::cpp_release));
+ }
+ TYPELIB_DANGER_RELEASE(rtd);
+}
+
+}
+
+namespace bridges { namespace cpp_uno { namespace shared {
+
+void unoInterfaceProxyDispatch(
+ uno_Interface * pUnoI, typelib_TypeDescription const * pMemberDescr,
+ void * pReturn, void * pArgs[], uno_Any ** ppException)
+{
+ bridges::cpp_uno::shared::UnoInterfaceProxy * proxy =
+ static_cast< bridges::cpp_uno::shared::UnoInterfaceProxy * >(pUnoI);
+ switch (pMemberDescr->eTypeClass) {
+ case typelib_TypeClass_INTERFACE_ATTRIBUTE:
+ {
+ VtableSlot slot(
+ getVtableSlot(
+ reinterpret_cast<
+ typelib_InterfaceAttributeTypeDescription const * >(
+ pMemberDescr)));
+ if (pReturn != NULL) {
+ // Getter:
+ call(
+ proxy, slot,
+ (reinterpret_cast<
+ typelib_InterfaceAttributeTypeDescription const * >(
+ pMemberDescr)->pAttributeTypeRef),
+ 0, NULL, pReturn, pArgs, ppException);
+ } else {
+ // Setter:
+ typelib_MethodParameter param = {
+ NULL,
+ (reinterpret_cast<
+ typelib_InterfaceAttributeTypeDescription const * >(
+ pMemberDescr)->pAttributeTypeRef),
+ true, false };
+ typelib_TypeDescriptionReference * rtd = NULL;
+ typelib_typedescriptionreference_new(
+ &rtd, typelib_TypeClass_VOID,
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("void")).pData);
+ slot.index += 1;
+ call(proxy, slot, rtd, 1, &param, pReturn, pArgs, ppException);
+ typelib_typedescriptionreference_release(rtd);
+ }
+ break;
+ }
+ case typelib_TypeClass_INTERFACE_METHOD:
+ {
+ VtableSlot slot(
+ getVtableSlot(
+ reinterpret_cast<
+ typelib_InterfaceMethodTypeDescription const * >(
+ pMemberDescr)));
+ switch (slot.index) {
+ case 1:
+ pUnoI->acquire(pUnoI);
+ *ppException = NULL;
+ break;
+ case 2:
+ pUnoI->release(pUnoI);
+ *ppException = NULL;
+ break;
+ case 0:
+ {
+ typelib_TypeDescription * td = NULL;
+ TYPELIB_DANGER_GET(
+ &td,
+ reinterpret_cast< css::uno::Type * >(
+ pArgs[0])->getTypeLibType());
+ if (td != NULL) {
+ uno_Interface * ifc = NULL;
+ proxy->pBridge->getUnoEnv()->getRegisteredInterface(
+ proxy->pBridge->getUnoEnv(),
+ reinterpret_cast< void ** >(&ifc),
+ proxy->oid.pData,
+ (reinterpret_cast<
+ typelib_InterfaceTypeDescription * >(td)));
+ if (ifc != NULL) {
+ uno_any_construct(
+ reinterpret_cast< uno_Any * >(pReturn),
+ &ifc, td, NULL);
+ ifc->release(ifc);
+ TYPELIB_DANGER_RELEASE(td);
+ *ppException = NULL;
+ break;
+ }
+ TYPELIB_DANGER_RELEASE(td);
+ }
+ } // fall through
+ default:
+ call(
+ proxy, slot,
+ (reinterpret_cast<
+ typelib_InterfaceMethodTypeDescription const * >(
+ pMemberDescr)->pReturnTypeRef),
+ (reinterpret_cast<
+ typelib_InterfaceMethodTypeDescription const * >(
+ pMemberDescr)->nParams),
+ (reinterpret_cast<
+ typelib_InterfaceMethodTypeDescription const * >(
+ pMemberDescr)->pParams),
+ pReturn, pArgs, ppException);
+ }
+ break;
+ }
+ default:
+ OSL_ASSERT(false);
+ break;
+ }
+}
+
+} } }
diff --git a/bridges/source/cpp_uno/cc5_solaris_sparc64/vtableslotcall.hxx b/bridges/source/cpp_uno/cc5_solaris_sparc64/vtableslotcall.hxx
new file mode 100644
index 000000000000..9ccc4a517f82
--- /dev/null
+++ b/bridges/source/cpp_uno/cc5_solaris_sparc64/vtableslotcall.hxx
@@ -0,0 +1,35 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_BRIDGES_SOURCE_CPP_UNO_CC5_SOLARIS_SPARC64_VTABLESLOTCALL_HXX
+#define INCLUDED_BRIDGES_SOURCE_CPP_UNO_CC5_SOLARIS_SPARC64_VTABLESLOTCALL_HXX
+
+#include "sal/config.h"
+
+extern "C" void vtableSlotCall();
+
+#endif
diff --git a/bridges/source/cpp_uno/cc5_solaris_sparc64/vtableslotcall.s b/bridges/source/cpp_uno/cc5_solaris_sparc64/vtableslotcall.s
new file mode 100644
index 000000000000..01a22da74fff
--- /dev/null
+++ b/bridges/source/cpp_uno/cc5_solaris_sparc64/vtableslotcall.s
@@ -0,0 +1,51 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+.global vtableCall
+
+.global vtableSlotCall
+.align 8
+vtableSlotCall:
+ ! save %sp, -176, %sp already done in code snippet
+ stx %i0, [%fp + 2047 + 128]
+ stx %i1, [%fp + 2047 + 136]
+ stx %i2, [%fp + 2047 + 144]
+ stx %i3, [%fp + 2047 + 152]
+ stx %i4, [%fp + 2047 + 160]
+ stx %i5, [%fp + 2047 + 168]
+ ! %o0: functionIndex, stored by code snippet
+ ! %o1: vtableOffset, stored by code snippet
+ call vtableCall
+ add %fp, 2047 + 128, %o2
+ ldx [%fp + 2047 + 128], %i0
+ ldx [%fp + 2047 + 136], %i1
+ ldx [%fp + 2047 + 144], %i2
+ ldx [%fp + 2047 + 152], %i3
+ ret
+ restore
+.size vtableSlotCall, . - vtableSlotCall
+.type vtableSlotCall, #function
diff --git a/bridges/source/cpp_uno/gcc3_freebsd_intel/call.s b/bridges/source/cpp_uno/gcc3_freebsd_intel/call.s
new file mode 100644
index 000000000000..f345e3a764ac
--- /dev/null
+++ b/bridges/source/cpp_uno/gcc3_freebsd_intel/call.s
@@ -0,0 +1,268 @@
+ .text
+
+.globl privateSnippetExecutorGeneral
+ .type privateSnippetExecutorGeneral,@function
+privateSnippetExecutorGeneral:
+.LFBg:
+ movl %esp,%ecx
+ pushl %ebp # proper stack frame needed for exception handling
+.LCFIg0:
+ movl %esp,%ebp
+.LCFIg1:
+ subl $0x4,%esp # 32bit returnValue
+ pushl %esp # 32bit &returnValue
+ pushl %ecx # 32bit pCallStack
+ pushl %edx # 32bit nVtableOffset
+ pushl %eax # 32bit nFunctionIndex
+ call cpp_vtable_call
+ movl 16(%esp),%eax # 32bit returnValue
+ leave
+ ret
+.LFEg:
+ .size privateSnippetExecutorGeneral,.-privateSnippetExecutorGeneral
+
+.globl privateSnippetExecutorVoid
+ .type privateSnippetExecutorVoid,@function
+privateSnippetExecutorVoid:
+.LFBv:
+ movl %esp,%ecx
+ pushl %ebp # proper stack frame needed for exception handling
+.LCFIv0:
+ movl %esp,%ebp
+.LCFIv1:
+ pushl $0 # 32bit null pointer (returnValue not used)
+ pushl %ecx # 32bit pCallStack
+ pushl %edx # 32bit nVtableOffset
+ pushl %eax # 32bit nFunctionIndex
+ call cpp_vtable_call
+ leave
+ ret
+.LFEv:
+ .size privateSnippetExecutorVoid,.-privateSnippetExecutorVoid
+
+.globl privateSnippetExecutorHyper
+ .type privateSnippetExecutorHyper,@function
+privateSnippetExecutorHyper:
+.LFBh:
+ movl %esp,%ecx
+ pushl %ebp # proper stack frame needed for exception handling
+.LCFIh0:
+ movl %esp,%ebp
+.LCFIh1:
+ subl $0x8,%esp # 64bit returnValue
+ pushl %esp # 32bit &returnValue
+ pushl %ecx # 32bit pCallStack
+ pushl %edx # 32bit nVtableOffset
+ pushl %eax # 32bit nFunctionIndex
+ call cpp_vtable_call
+ movl 16(%esp),%eax # 64bit returnValue, lower half
+ movl 20(%esp),%edx # 64bit returnValue, upper half
+ leave
+ ret
+.LFEh:
+ .size privateSnippetExecutorHyper,.-privateSnippetExecutorHyper
+
+.globl privateSnippetExecutorFloat
+ .type privateSnippetExecutorFloat,@function
+privateSnippetExecutorFloat:
+.LFBf:
+ movl %esp,%ecx
+ pushl %ebp # proper stack frame needed for exception handling
+.LCFIf0:
+ movl %esp,%ebp
+.LCFIf1:
+ subl $0x4,%esp # 32bit returnValue
+ pushl %esp # 32bit &returnValue
+ pushl %ecx # 32bit pCallStack
+ pushl %edx # 32bit nVtableOffset
+ pushl %eax # 32bit nFunctionIndex
+ call cpp_vtable_call
+ flds 16(%esp) # 32bit returnValue
+ leave
+ ret
+.LFEf:
+ .size privateSnippetExecutorFloat,.-privateSnippetExecutorFloat
+
+.globl privateSnippetExecutorDouble
+ .type privateSnippetExecutorDouble,@function
+privateSnippetExecutorDouble:
+.LFBd:
+ movl %esp,%ecx
+ pushl %ebp # proper stack frame needed for exception handling
+.LCFId0:
+ movl %esp,%ebp
+.LCFId1:
+ subl $0x8,%esp # 64bit returnValue
+ pushl %esp # 32bit &returnValue
+ pushl %ecx # 32bit pCallStack
+ pushl %edx # 32bit nVtableOffset
+ pushl %eax # 32bit nFunctionIndex
+ call cpp_vtable_call
+ fldl 16(%esp) # 64bit returnValue
+ leave
+ ret
+.LFEd:
+ .size privateSnippetExecutorDouble,.-privateSnippetExecutorDouble
+
+.globl privateSnippetExecutorClass
+ .type privateSnippetExecutorClass,@function
+privateSnippetExecutorClass:
+.LFBc:
+ movl %esp,%ecx
+ pushl %ebp # proper stack frame needed for exception handling
+.LCFIc0:
+ movl %esp,%ebp
+.LCFIc1:
+ subl $0x4,%esp # 32bit returnValue
+ pushl %esp # 32bit &returnValue
+ pushl %ecx # 32bit pCallStack
+ pushl %edx # 32bit nVtableOffset
+ pushl %eax # 32bit nFunctionIndex
+ call cpp_vtable_call
+ movl 16(%esp),%eax # 32bit returnValue
+ leave
+ ret $4
+.LFEc:
+ .size privateSnippetExecutorClass,.-privateSnippetExecutorClass
+
+ .section .eh_frame,"a",@progbits
+.Lframe1:
+ .long .LECIE1-.LSCIE1 # length
+.LSCIE1:
+ .long 0 # CIE_ID
+ .byte 1 # version
+ .string "zR" # augmentation
+ .uleb128 1 # code_alignment_factor
+ .sleb128 -4 # data_alignment_factor
+ .byte 8 # return_address_register
+ .uleb128 1 # augmentation size 1:
+ .byte 0x1B # FDE Encoding (pcrel sdata4)
+ # initial_instructions:
+ .byte 0x0C # DW_CFA_def_cfa %esp, 4
+ .uleb128 4
+ .uleb128 4
+ .byte 0x88 # DW_CFA_offset ret, 1
+ .uleb128 1
+ .align 4
+.LECIE1:
+.LSFDEg:
+ .long .LEFDEg-.LASFDEg # length
+.LASFDEg:
+ .long .LASFDEg-.Lframe1 # CIE_pointer
+ .long .LFBg-. # initial_location
+ .long .LFEg-.LFBg # address_range
+ .uleb128 0 # augmentation size 0
+ # instructions:
+ .byte 0x04 # DW_CFA_advance_loc4
+ .long .LCFIg0-.LFBg
+ .byte 0x0E # DW_CFA_def_cfa_offset 8
+ .uleb128 8
+ .byte 0x85 # DW_CFA_offset %ebp, 2
+ .uleb128 2
+ .byte 0x04 # DW_CFA_advance_loc4
+ .long .LCFIg1-.LCFIg0
+ .byte 0x0D # DW_CFA_def_cfa_register %ebp
+ .uleb128 5
+ .align 4
+.LEFDEg:
+.LSFDEv:
+ .long .LEFDEv-.LASFDEv # length
+.LASFDEv:
+ .long .LASFDEv-.Lframe1 # CIE_pointer
+ .long .LFBv-. # initial_location
+ .long .LFEv-.LFBv # address_range
+ .uleb128 0 # augmentation size 0
+ # instructions:
+ .byte 0x04 # DW_CFA_advance_loc4
+ .long .LCFIv0-.LFBv
+ .byte 0x0E # DW_CFA_def_cfa_offset 8
+ .uleb128 8
+ .byte 0x85 # DW_CFA_offset %ebp, 2
+ .uleb128 2
+ .byte 0x04 # DW_CFA_advance_loc4
+ .long .LCFIv1-.LCFIv0
+ .byte 0x0D # DW_CFA_def_cfa_register %ebp
+ .uleb128 5
+ .align 4
+.LEFDEv:
+.LSFDEh:
+ .long .LEFDEh-.LASFDEh # length
+.LASFDEh:
+ .long .LASFDEh-.Lframe1 # CIE_pointer
+ .long .LFBh-. # initial_location
+ .long .LFEh-.LFBh # address_range
+ .uleb128 0 # augmentation size 0
+ # instructions:
+ .byte 0x04 # DW_CFA_advance_loc4
+ .long .LCFIh0-.LFBh
+ .byte 0x0E # DW_CFA_def_cfa_offset 8
+ .uleb128 8
+ .byte 0x85 # DW_CFA_offset %ebp, 2
+ .uleb128 2
+ .byte 0x04 # DW_CFA_advance_loc4
+ .long .LCFIh1-.LCFIh0
+ .byte 0x0D # DW_CFA_def_cfa_register %ebp
+ .uleb128 5
+ .align 4
+.LEFDEh:
+.LSFDEf:
+ .long .LEFDEf-.LASFDEf # length
+.LASFDEf:
+ .long .LASFDEf-.Lframe1 # CIE_pointer
+ .long .LFBf-. # initial_location
+ .long .LFEf-.LFBf # address_range
+ .uleb128 0 # augmentation size 0
+ # instructions:
+ .byte 0x04 # DW_CFA_advance_loc4
+ .long .LCFIf0-.LFBf
+ .byte 0x0E # DW_CFA_def_cfa_offset 8
+ .uleb128 8
+ .byte 0x85 # DW_CFA_offset %ebp, 2
+ .uleb128 2
+ .byte 0x04 # DW_CFA_advance_loc4
+ .long .LCFIf1-.LCFIf0
+ .byte 0x0D # DW_CFA_def_cfa_register %ebp
+ .uleb128 5
+ .align 4
+.LEFDEf:
+.LSFDEd:
+ .long .LEFDEd-.LASFDEd # length
+.LASFDEd:
+ .long .LASFDEd-.Lframe1 # CIE_pointer
+ .long .LFBd-. # initial_location
+ .long .LFEd-.LFBd # address_range
+ .uleb128 0 # augmentation size 0
+ # instructions:
+ .byte 0x04 # DW_CFA_advance_loc4
+ .long .LCFId0-.LFBd
+ .byte 0x0E # DW_CFA_def_cfa_offset 8
+ .uleb128 8
+ .byte 0x85 # DW_CFA_offset %ebp, 2
+ .uleb128 2
+ .byte 0x04 # DW_CFA_advance_loc4
+ .long .LCFId1-.LCFId0
+ .byte 0x0D # DW_CFA_def_cfa_register %ebp
+ .uleb128 5
+ .align 4
+.LEFDEd:
+.LSFDEc:
+ .long .LEFDEc-.LASFDEc # length
+.LASFDEc:
+ .long .LASFDEc-.Lframe1 # CIE_pointer
+ .long .LFBc-. # initial_location
+ .long .LFEc-.LFBc # address_range
+ .uleb128 0 # augmentation size 0
+ # instructions:
+ .byte 0x04 # DW_CFA_advance_loc4
+ .long .LCFIc0-.LFBc
+ .byte 0x0E # DW_CFA_def_cfa_offset 8
+ .uleb128 8
+ .byte 0x85 # DW_CFA_offset %ebp, 2
+ .uleb128 2
+ .byte 0x04 # DW_CFA_advance_loc4
+ .long .LCFIc1-.LCFIc0
+ .byte 0x0D # DW_CFA_def_cfa_register %ebp
+ .uleb128 5
+ .align 4
+.LEFDEc:
+ .section .note.GNU-stack,"",@progbits
diff --git a/bridges/source/cpp_uno/gcc3_freebsd_intel/cpp2uno.cxx b/bridges/source/cpp_uno/gcc3_freebsd_intel/cpp2uno.cxx
new file mode 100644
index 000000000000..5740b27d9871
--- /dev/null
+++ b/bridges/source/cpp_uno/gcc3_freebsd_intel/cpp2uno.cxx
@@ -0,0 +1,490 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_bridges.hxx"
+
+#include <com/sun/star/uno/genfunc.hxx>
+#include "com/sun/star/uno/RuntimeException.hpp"
+#include <uno/data.h>
+#include <typelib/typedescription.hxx>
+
+#include "bridges/cpp_uno/shared/bridge.hxx"
+#include "bridges/cpp_uno/shared/cppinterfaceproxy.hxx"
+#include "bridges/cpp_uno/shared/types.hxx"
+#include "bridges/cpp_uno/shared/vtablefactory.hxx"
+
+#include "share.hxx"
+
+using namespace ::com::sun::star::uno;
+
+namespace
+{
+
+//==================================================================================================
+void cpp2uno_call(
+ bridges::cpp_uno::shared::CppInterfaceProxy * pThis,
+ const typelib_TypeDescription * pMemberTypeDescr,
+ typelib_TypeDescriptionReference * pReturnTypeRef, // 0 indicates void return
+ sal_Int32 nParams, typelib_MethodParameter * pParams,
+ void ** pCallStack,
+ void * pReturnValue )
+{
+ // pCallStack: ret, [return ptr], this, params
+ char * pCppStack = (char *)(pCallStack +1);
+
+ // return
+ typelib_TypeDescription * pReturnTypeDescr = 0;
+ if (pReturnTypeRef)
+ TYPELIB_DANGER_GET( &pReturnTypeDescr, pReturnTypeRef );
+
+ void * pUnoReturn = 0;
+ void * pCppReturn = 0; // complex return ptr: if != 0 && != pUnoReturn, reconversion need
+
+ if (pReturnTypeDescr)
+ {
+ if (bridges::cpp_uno::shared::isSimpleType( pReturnTypeDescr ))
+ {
+ pUnoReturn = pReturnValue; // direct way for simple types
+ }
+ else // complex return via ptr (pCppReturn)
+ {
+ pCppReturn = *(void **)pCppStack;
+ pCppStack += sizeof(void *);
+
+ pUnoReturn = (bridges::cpp_uno::shared::relatesToInterfaceType(
+ pReturnTypeDescr )
+ ? alloca( pReturnTypeDescr->nSize )
+ : pCppReturn); // direct way
+ }
+ }
+ // pop this
+ pCppStack += sizeof( void* );
+
+ // stack space
+ OSL_ENSURE( sizeof(void *) == sizeof(sal_Int32), "### unexpected size!" );
+ // parameters
+ void ** pUnoArgs = (void **)alloca( 4 * sizeof(void *) * nParams );
+ void ** pCppArgs = pUnoArgs + nParams;
+ // indizes of values this have to be converted (interface conversion cpp<=>uno)
+ sal_Int32 * pTempIndizes = (sal_Int32 *)(pUnoArgs + (2 * nParams));
+ // type descriptions for reconversions
+ typelib_TypeDescription ** ppTempParamTypeDescr = (typelib_TypeDescription **)(pUnoArgs + (3 * nParams));
+
+ sal_Int32 nTempIndizes = 0;
+
+ for ( sal_Int32 nPos = 0; nPos < nParams; ++nPos )
+ {
+ const typelib_MethodParameter & rParam = pParams[nPos];
+ typelib_TypeDescription * pParamTypeDescr = 0;
+ TYPELIB_DANGER_GET( &pParamTypeDescr, rParam.pTypeRef );
+
+ if (!rParam.bOut
+ && bridges::cpp_uno::shared::isSimpleType( pParamTypeDescr ))
+ // value
+ {
+ pCppArgs[nPos] = pCppStack;
+ pUnoArgs[nPos] = pCppStack;
+ switch (pParamTypeDescr->eTypeClass)
+ {
+ case typelib_TypeClass_HYPER:
+ case typelib_TypeClass_UNSIGNED_HYPER:
+ case typelib_TypeClass_DOUBLE:
+ pCppStack += sizeof(sal_Int32); // extra long
+ break;
+ default:
+ break;
+ }
+ // no longer needed
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ else // ptr to complex value | ref
+ {
+ pCppArgs[nPos] = *(void **)pCppStack;
+
+ if (! rParam.bIn) // is pure out
+ {
+ // uno out is unconstructed mem!
+ pUnoArgs[nPos] = alloca( pParamTypeDescr->nSize );
+ pTempIndizes[nTempIndizes] = nPos;
+ // will be released at reconversion
+ ppTempParamTypeDescr[nTempIndizes++] = pParamTypeDescr;
+ }
+ // is in/inout
+ else if (bridges::cpp_uno::shared::relatesToInterfaceType(
+ pParamTypeDescr ))
+ {
+ uno_copyAndConvertData( pUnoArgs[nPos] = alloca( pParamTypeDescr->nSize ),
+ *(void **)pCppStack, pParamTypeDescr,
+ pThis->getBridge()->getCpp2Uno() );
+ pTempIndizes[nTempIndizes] = nPos; // has to be reconverted
+ // will be released at reconversion
+ ppTempParamTypeDescr[nTempIndizes++] = pParamTypeDescr;
+ }
+ else // direct way
+ {
+ pUnoArgs[nPos] = *(void **)pCppStack;
+ // no longer needed
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ }
+ pCppStack += sizeof(sal_Int32); // standard parameter length
+ }
+
+ // ExceptionHolder
+ uno_Any aUnoExc; // Any will be constructed by callee
+ uno_Any * pUnoExc = &aUnoExc;
+
+ // invoke uno dispatch call
+ (*pThis->getUnoI()->pDispatcher)(
+ pThis->getUnoI(), pMemberTypeDescr, pUnoReturn, pUnoArgs, &pUnoExc );
+
+ // in case an exception occured...
+ if (pUnoExc)
+ {
+ // destruct temporary in/inout params
+ for ( ; nTempIndizes--; )
+ {
+ sal_Int32 nIndex = pTempIndizes[nTempIndizes];
+
+ if (pParams[nIndex].bIn) // is in/inout => was constructed
+ uno_destructData( pUnoArgs[nIndex], ppTempParamTypeDescr[nTempIndizes], 0 );
+ TYPELIB_DANGER_RELEASE( ppTempParamTypeDescr[nTempIndizes] );
+ }
+ if (pReturnTypeDescr)
+ TYPELIB_DANGER_RELEASE( pReturnTypeDescr );
+
+ CPPU_CURRENT_NAMESPACE::raiseException(
+ &aUnoExc, pThis->getBridge()->getUno2Cpp() );
+ // has to destruct the any
+ }
+ else // else no exception occured...
+ {
+ // temporary params
+ for ( ; nTempIndizes--; )
+ {
+ sal_Int32 nIndex = pTempIndizes[nTempIndizes];
+ typelib_TypeDescription * pParamTypeDescr = ppTempParamTypeDescr[nTempIndizes];
+
+ if (pParams[nIndex].bOut) // inout/out
+ {
+ // convert and assign
+ uno_destructData( pCppArgs[nIndex], pParamTypeDescr, cpp_release );
+ uno_copyAndConvertData( pCppArgs[nIndex], pUnoArgs[nIndex], pParamTypeDescr,
+ pThis->getBridge()->getUno2Cpp() );
+ }
+ // destroy temp uno param
+ uno_destructData( pUnoArgs[nIndex], pParamTypeDescr, 0 );
+
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ // return
+ if (pCppReturn) // has complex return
+ {
+ if (pUnoReturn != pCppReturn) // needs reconversion
+ {
+ uno_copyAndConvertData( pCppReturn, pUnoReturn, pReturnTypeDescr,
+ pThis->getBridge()->getUno2Cpp() );
+ // destroy temp uno return
+ uno_destructData( pUnoReturn, pReturnTypeDescr, 0 );
+ }
+ // complex return ptr is set to eax
+ *static_cast< void ** >(pReturnValue) = pCppReturn;
+ }
+ if (pReturnTypeDescr)
+ {
+ TYPELIB_DANGER_RELEASE( pReturnTypeDescr );
+ }
+ }
+}
+
+
+//==================================================================================================
+extern "C" void cpp_vtable_call(
+ int nFunctionIndex, int nVtableOffset, void** pCallStack,
+ void * pReturnValue )
+{
+ OSL_ENSURE( sizeof(sal_Int32)==sizeof(void *), "### unexpected!" );
+
+ // pCallStack: ret adr, [ret *], this, params
+ void * pThis;
+ if( nFunctionIndex & 0x80000000 )
+ {
+ nFunctionIndex &= 0x7fffffff;
+ pThis = pCallStack[2];
+ }
+ else
+ {
+ pThis = pCallStack[1];
+ }
+ pThis = static_cast< char * >(pThis) - nVtableOffset;
+ bridges::cpp_uno::shared::CppInterfaceProxy * pCppI
+ = bridges::cpp_uno::shared::CppInterfaceProxy::castInterfaceToProxy(
+ pThis);
+
+ typelib_InterfaceTypeDescription * pTypeDescr = pCppI->getTypeDescr();
+
+ OSL_ENSURE( nFunctionIndex < pTypeDescr->nMapFunctionIndexToMemberIndex, "### illegal vtable index!" );
+ if (nFunctionIndex >= pTypeDescr->nMapFunctionIndexToMemberIndex)
+ {
+ throw RuntimeException(
+ rtl::OUString::createFromAscii("illegal vtable index!"),
+ (XInterface *)pThis );
+ }
+
+ // determine called method
+ sal_Int32 nMemberPos = pTypeDescr->pMapFunctionIndexToMemberIndex[nFunctionIndex];
+ OSL_ENSURE( nMemberPos < pTypeDescr->nAllMembers, "### illegal member index!" );
+
+ TypeDescription aMemberDescr( pTypeDescr->ppAllMembers[nMemberPos] );
+
+ switch (aMemberDescr.get()->eTypeClass)
+ {
+ case typelib_TypeClass_INTERFACE_ATTRIBUTE:
+ {
+ if (pTypeDescr->pMapMemberIndexToFunctionIndex[nMemberPos] == nFunctionIndex)
+ {
+ // is GET method
+ cpp2uno_call(
+ pCppI, aMemberDescr.get(),
+ ((typelib_InterfaceAttributeTypeDescription *)aMemberDescr.get())->pAttributeTypeRef,
+ 0, 0, // no params
+ pCallStack, pReturnValue );
+ }
+ else
+ {
+ // is SET method
+ typelib_MethodParameter aParam;
+ aParam.pTypeRef =
+ ((typelib_InterfaceAttributeTypeDescription *)aMemberDescr.get())->pAttributeTypeRef;
+ aParam.bIn = sal_True;
+ aParam.bOut = sal_False;
+
+ cpp2uno_call(
+ pCppI, aMemberDescr.get(),
+ 0, // indicates void return
+ 1, &aParam,
+ pCallStack, pReturnValue );
+ }
+ break;
+ }
+ case typelib_TypeClass_INTERFACE_METHOD:
+ {
+ // is METHOD
+ switch (nFunctionIndex)
+ {
+ case 1: // acquire()
+ pCppI->acquireProxy(); // non virtual call!
+ break;
+ case 2: // release()
+ pCppI->releaseProxy(); // non virtual call!
+ break;
+ case 0: // queryInterface() opt
+ {
+ typelib_TypeDescription * pTD = 0;
+ TYPELIB_DANGER_GET( &pTD, reinterpret_cast< Type * >( pCallStack[3] )->getTypeLibType() );
+ if (pTD)
+ {
+ XInterface * pInterface = 0;
+ (*pCppI->getBridge()->getCppEnv()->getRegisteredInterface)(
+ pCppI->getBridge()->getCppEnv(),
+ (void **)&pInterface, pCppI->getOid().pData,
+ (typelib_InterfaceTypeDescription *)pTD );
+
+ if (pInterface)
+ {
+ ::uno_any_construct(
+ reinterpret_cast< uno_Any * >( pCallStack[1] ),
+ &pInterface, pTD, cpp_acquire );
+ pInterface->release();
+ TYPELIB_DANGER_RELEASE( pTD );
+ *static_cast< void ** >(pReturnValue) = pCallStack[1];
+ break;
+ }
+ TYPELIB_DANGER_RELEASE( pTD );
+ }
+ } // else perform queryInterface()
+ default:
+ cpp2uno_call(
+ pCppI, aMemberDescr.get(),
+ ((typelib_InterfaceMethodTypeDescription *)aMemberDescr.get())->pReturnTypeRef,
+ ((typelib_InterfaceMethodTypeDescription *)aMemberDescr.get())->nParams,
+ ((typelib_InterfaceMethodTypeDescription *)aMemberDescr.get())->pParams,
+ pCallStack, pReturnValue );
+ }
+ break;
+ }
+ default:
+ {
+ throw RuntimeException(
+ rtl::OUString::createFromAscii("no member description found!"),
+ (XInterface *)pThis );
+ }
+ }
+}
+
+//==================================================================================================
+extern "C" void privateSnippetExecutorGeneral();
+extern "C" void privateSnippetExecutorVoid();
+extern "C" void privateSnippetExecutorHyper();
+extern "C" void privateSnippetExecutorFloat();
+extern "C" void privateSnippetExecutorDouble();
+extern "C" void privateSnippetExecutorClass();
+extern "C" typedef void (*PrivateSnippetExecutor)();
+
+int const codeSnippetSize = 16;
+
+unsigned char * codeSnippet(
+ unsigned char * code, sal_Int32 functionIndex, sal_Int32 vtableOffset,
+ typelib_TypeClass returnTypeClass)
+{
+ if (!bridges::cpp_uno::shared::isSimpleType(returnTypeClass)) {
+ functionIndex |= 0x80000000;
+ }
+ PrivateSnippetExecutor exec;
+ switch (returnTypeClass) {
+ case typelib_TypeClass_VOID:
+ exec = privateSnippetExecutorVoid;
+ break;
+ case typelib_TypeClass_HYPER:
+ case typelib_TypeClass_UNSIGNED_HYPER:
+ exec = privateSnippetExecutorHyper;
+ break;
+ case typelib_TypeClass_FLOAT:
+ exec = privateSnippetExecutorFloat;
+ break;
+ case typelib_TypeClass_DOUBLE:
+ exec = privateSnippetExecutorDouble;
+ break;
+ case typelib_TypeClass_STRING:
+ case typelib_TypeClass_TYPE:
+ case typelib_TypeClass_ANY:
+ case typelib_TypeClass_SEQUENCE:
+ case typelib_TypeClass_STRUCT:
+ case typelib_TypeClass_INTERFACE:
+ exec = privateSnippetExecutorClass;
+ break;
+ default:
+ exec = privateSnippetExecutorGeneral;
+ break;
+ }
+ unsigned char * p = code;
+ OSL_ASSERT(sizeof (sal_Int32) == 4);
+ // mov function_index, %eax:
+ *p++ = 0xB8;
+ *reinterpret_cast< sal_Int32 * >(p) = functionIndex;
+ p += sizeof (sal_Int32);
+ // mov vtable_offset, %edx:
+ *p++ = 0xBA;
+ *reinterpret_cast< sal_Int32 * >(p) = vtableOffset;
+ p += sizeof (sal_Int32);
+ // jmp privateSnippetExecutor:
+ *p++ = 0xE9;
+ *reinterpret_cast< sal_Int32 * >(p)
+ = ((unsigned char *) exec) - p - sizeof (sal_Int32);
+ p += sizeof (sal_Int32);
+ OSL_ASSERT(p - code <= codeSnippetSize);
+ return code + codeSnippetSize;
+}
+
+}
+
+struct bridges::cpp_uno::shared::VtableFactory::Slot { void * fn; };
+
+bridges::cpp_uno::shared::VtableFactory::Slot *
+bridges::cpp_uno::shared::VtableFactory::mapBlockToVtable(void * block)
+{
+ return static_cast< Slot * >(block) + 2;
+}
+
+sal_Size bridges::cpp_uno::shared::VtableFactory::getBlockSize(
+ sal_Int32 slotCount)
+{
+ return (slotCount + 2) * sizeof (Slot) + slotCount * codeSnippetSize;
+}
+
+bridges::cpp_uno::shared::VtableFactory::Slot *
+bridges::cpp_uno::shared::VtableFactory::initializeBlock(
+ void * block, sal_Int32 slotCount)
+{
+ Slot * slots = mapBlockToVtable(block);
+ slots[-2].fn = 0;
+ slots[-1].fn = 0;
+ return slots + slotCount;
+}
+
+unsigned char * bridges::cpp_uno::shared::VtableFactory::addLocalFunctions(
+ Slot ** slots, unsigned char * code,
+ typelib_InterfaceTypeDescription const * type, sal_Int32 functionOffset,
+ sal_Int32 functionCount, sal_Int32 vtableOffset)
+{
+ (*slots) -= functionCount;
+ Slot * s = *slots;
+ for (sal_Int32 i = 0; i < type->nMembers; ++i) {
+ typelib_TypeDescription * member = 0;
+ TYPELIB_DANGER_GET(&member, type->ppMembers[i]);
+ OSL_ASSERT(member != 0);
+ switch (member->eTypeClass) {
+ case typelib_TypeClass_INTERFACE_ATTRIBUTE:
+ // Getter:
+ (s++)->fn = code;
+ code = codeSnippet(
+ code, functionOffset++, vtableOffset,
+ reinterpret_cast< typelib_InterfaceAttributeTypeDescription * >(
+ member)->pAttributeTypeRef->eTypeClass);
+ // Setter:
+ if (!reinterpret_cast<
+ typelib_InterfaceAttributeTypeDescription * >(
+ member)->bReadOnly)
+ {
+ (s++)->fn = code;
+ code = codeSnippet(
+ code, functionOffset++, vtableOffset,
+ typelib_TypeClass_VOID);
+ }
+ break;
+
+ case typelib_TypeClass_INTERFACE_METHOD:
+ (s++)->fn = code;
+ code = codeSnippet(
+ code, functionOffset++, vtableOffset,
+ reinterpret_cast< typelib_InterfaceMethodTypeDescription * >(
+ member)->pReturnTypeRef->eTypeClass);
+ break;
+
+ default:
+ OSL_ASSERT(false);
+ break;
+ }
+ TYPELIB_DANGER_RELEASE(member);
+ }
+ return code;
+}
+
+void bridges::cpp_uno::shared::VtableFactory::flushCode(
+ unsigned char const *, unsigned char const *)
+{}
diff --git a/bridges/source/cpp_uno/gcc3_freebsd_intel/except.cxx b/bridges/source/cpp_uno/gcc3_freebsd_intel/except.cxx
new file mode 100644
index 000000000000..c2287b9b6fa9
--- /dev/null
+++ b/bridges/source/cpp_uno/gcc3_freebsd_intel/except.cxx
@@ -0,0 +1,338 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_bridges.hxx"
+
+#include <stdio.h>
+#include <dlfcn.h>
+#include <cxxabi.h>
+#include <hash_map>
+#include <sys/param.h>
+
+#include <rtl/strbuf.hxx>
+#include <rtl/ustrbuf.hxx>
+#include <osl/diagnose.h>
+#include <osl/mutex.hxx>
+
+#include <com/sun/star/uno/genfunc.hxx>
+#include "com/sun/star/uno/RuntimeException.hpp"
+#include <typelib/typedescription.hxx>
+#include <uno/any2.h>
+
+#include "share.hxx"
+
+
+using namespace ::std;
+using namespace ::osl;
+using namespace ::rtl;
+using namespace ::com::sun::star::uno;
+using namespace ::__cxxabiv1;
+
+
+namespace CPPU_CURRENT_NAMESPACE
+{
+
+void dummy_can_throw_anything( char const * )
+{
+}
+
+//==================================================================================================
+static OUString toUNOname( char const * p ) SAL_THROW( () )
+{
+#if OSL_DEBUG_LEVEL > 1
+ char const * start = p;
+#endif
+
+ // example: N3com3sun4star4lang24IllegalArgumentExceptionE
+
+ OUStringBuffer buf( 64 );
+ OSL_ASSERT( 'N' == *p );
+ ++p; // skip N
+
+ while ('E' != *p)
+ {
+ // read chars count
+ long n = (*p++ - '0');
+ while ('0' <= *p && '9' >= *p)
+ {
+ n *= 10;
+ n += (*p++ - '0');
+ }
+ buf.appendAscii( p, n );
+ p += n;
+ if ('E' != *p)
+ buf.append( (sal_Unicode)'.' );
+ }
+
+#if OSL_DEBUG_LEVEL > 1
+ OUString ret( buf.makeStringAndClear() );
+ OString c_ret( OUStringToOString( ret, RTL_TEXTENCODING_ASCII_US ) );
+ fprintf( stderr, "> toUNOname(): %s => %s\n", start, c_ret.getStr() );
+ return ret;
+#else
+ return buf.makeStringAndClear();
+#endif
+}
+
+//==================================================================================================
+class RTTI
+{
+ typedef hash_map< OUString, type_info *, OUStringHash > t_rtti_map;
+
+ Mutex m_mutex;
+ t_rtti_map m_rttis;
+ t_rtti_map m_generatedRttis;
+
+ void * m_hApp;
+
+public:
+ RTTI() SAL_THROW( () );
+ ~RTTI() SAL_THROW( () );
+
+ type_info * getRTTI( typelib_CompoundTypeDescription * ) SAL_THROW( () );
+};
+//__________________________________________________________________________________________________
+RTTI::RTTI() SAL_THROW( () )
+#if __FreeBSD_version < 602103
+ : m_hApp( dlopen( 0, RTLD_NOW | RTLD_GLOBAL ) )
+#else
+ : m_hApp( dlopen( 0, RTLD_LAZY ) )
+#endif
+{
+}
+//__________________________________________________________________________________________________
+RTTI::~RTTI() SAL_THROW( () )
+{
+ dlclose( m_hApp );
+}
+
+//__________________________________________________________________________________________________
+type_info * RTTI::getRTTI( typelib_CompoundTypeDescription *pTypeDescr ) SAL_THROW( () )
+{
+ type_info * rtti;
+
+ OUString const & unoName = *(OUString const *)&pTypeDescr->aBase.pTypeName;
+
+ MutexGuard guard( m_mutex );
+ t_rtti_map::const_iterator iRttiFind( m_rttis.find( unoName ) );
+ if (iRttiFind == m_rttis.end())
+ {
+ // RTTI symbol
+ OStringBuffer buf( 64 );
+ buf.append( RTL_CONSTASCII_STRINGPARAM("_ZTIN") );
+ sal_Int32 index = 0;
+ do
+ {
+ OUString token( unoName.getToken( 0, '.', index ) );
+ buf.append( token.getLength() );
+ OString c_token( OUStringToOString( token, RTL_TEXTENCODING_ASCII_US ) );
+ buf.append( c_token );
+ }
+ while (index >= 0);
+ buf.append( 'E' );
+
+ OString symName( buf.makeStringAndClear() );
+#if __FreeBSD_version < 602103 /* #i22253# */
+ rtti = (type_info *)dlsym( RTLD_DEFAULT, symName.getStr() );
+#else
+ rtti = (type_info *)dlsym( m_hApp, symName.getStr() );
+#endif
+
+ if (rtti)
+ {
+ pair< t_rtti_map::iterator, bool > insertion(
+ m_rttis.insert( t_rtti_map::value_type( unoName, rtti ) ) );
+ OSL_ENSURE( insertion.second, "### inserting new rtti failed?!" );
+ }
+ else
+ {
+ // try to lookup the symbol in the generated rtti map
+ t_rtti_map::const_iterator iFind( m_generatedRttis.find( unoName ) );
+ if (iFind == m_generatedRttis.end())
+ {
+ // we must generate it !
+ // symbol and rtti-name is nearly identical,
+ // the symbol is prefixed with _ZTI
+ char const * rttiName = symName.getStr() +4;
+#if OSL_DEBUG_LEVEL > 1
+ fprintf( stderr,"generated rtti for %s\n", rttiName );
+#endif
+ if (pTypeDescr->pBaseTypeDescription)
+ {
+ // ensure availability of base
+ type_info * base_rtti = getRTTI(
+ (typelib_CompoundTypeDescription *)pTypeDescr->pBaseTypeDescription );
+ rtti = new __si_class_type_info(
+ strdup( rttiName ), (__class_type_info *)base_rtti );
+ }
+ else
+ {
+ // this class has no base class
+ rtti = new __class_type_info( strdup( rttiName ) );
+ }
+
+ pair< t_rtti_map::iterator, bool > insertion(
+ m_generatedRttis.insert( t_rtti_map::value_type( unoName, rtti ) ) );
+ OSL_ENSURE( insertion.second, "### inserting new generated rtti failed?!" );
+ }
+ else // taking already generated rtti
+ {
+ rtti = iFind->second;
+ }
+ }
+ }
+ else
+ {
+ rtti = iRttiFind->second;
+ }
+
+ return rtti;
+}
+
+//--------------------------------------------------------------------------------------------------
+static void deleteException( void * pExc )
+{
+ __cxa_exception const * header = ((__cxa_exception const *)pExc - 1);
+ typelib_TypeDescription * pTD = 0;
+ OUString unoName( toUNOname( header->exceptionType->name() ) );
+ ::typelib_typedescription_getByName( &pTD, unoName.pData );
+ OSL_ENSURE( pTD, "### unknown exception type! leaving out destruction => leaking!!!" );
+ if (pTD)
+ {
+ ::uno_destructData( pExc, pTD, cpp_release );
+ ::typelib_typedescription_release( pTD );
+ }
+}
+
+//==================================================================================================
+void raiseException( uno_Any * pUnoExc, uno_Mapping * pUno2Cpp )
+{
+#if OSL_DEBUG_LEVEL > 1
+ OString cstr(
+ OUStringToOString(
+ *reinterpret_cast< OUString const * >( &pUnoExc->pType->pTypeName ),
+ RTL_TEXTENCODING_ASCII_US ) );
+ fprintf( stderr, "> uno exception occured: %s\n", cstr.getStr() );
+#endif
+ void * pCppExc;
+ type_info * rtti;
+
+ {
+ // construct cpp exception object
+ typelib_TypeDescription * pTypeDescr = 0;
+ TYPELIB_DANGER_GET( &pTypeDescr, pUnoExc->pType );
+ OSL_ASSERT( pTypeDescr );
+ if (! pTypeDescr)
+ {
+ throw RuntimeException(
+ OUString( RTL_CONSTASCII_USTRINGPARAM("cannot get typedescription for type ") ) +
+ *reinterpret_cast< OUString const * >( &pUnoExc->pType->pTypeName ),
+ Reference< XInterface >() );
+ }
+
+ pCppExc = __cxa_allocate_exception( pTypeDescr->nSize );
+ ::uno_copyAndConvertData( pCppExc, pUnoExc->pData, pTypeDescr, pUno2Cpp );
+
+ // destruct uno exception
+ ::uno_any_destruct( pUnoExc, 0 );
+ // avoiding locked counts
+ static RTTI * s_rtti = 0;
+ if (! s_rtti)
+ {
+ MutexGuard guard( Mutex::getGlobalMutex() );
+ if (! s_rtti)
+ {
+#ifdef LEAK_STATIC_DATA
+ s_rtti = new RTTI();
+#else
+ static RTTI rtti_data;
+ s_rtti = &rtti_data;
+#endif
+ }
+ }
+ rtti = (type_info *)s_rtti->getRTTI( (typelib_CompoundTypeDescription *) pTypeDescr );
+ TYPELIB_DANGER_RELEASE( pTypeDescr );
+ OSL_ENSURE( rtti, "### no rtti for throwing exception!" );
+ if (! rtti)
+ {
+ throw RuntimeException(
+ OUString( RTL_CONSTASCII_USTRINGPARAM("no rtti for type ") ) +
+ *reinterpret_cast< OUString const * >( &pUnoExc->pType->pTypeName ),
+ Reference< XInterface >() );
+ }
+ }
+
+ __cxa_throw( pCppExc, rtti, deleteException );
+}
+
+//==================================================================================================
+void fillUnoException( __cxa_exception * header, uno_Any * pUnoExc, uno_Mapping * pCpp2Uno )
+{
+ if (! header)
+ {
+ RuntimeException aRE(
+ OUString( RTL_CONSTASCII_USTRINGPARAM("no exception header!") ),
+ Reference< XInterface >() );
+ Type const & rType = ::getCppuType( &aRE );
+ uno_type_any_constructAndConvert( pUnoExc, &aRE, rType.getTypeLibType(), pCpp2Uno );
+#if OSL_DEBUG_LEVEL > 0
+ OString cstr( OUStringToOString( aRE.Message, RTL_TEXTENCODING_ASCII_US ) );
+ OSL_ENSURE( 0, cstr.getStr() );
+#endif
+ return;
+ }
+
+ typelib_TypeDescription * pExcTypeDescr = 0;
+ OUString unoName( toUNOname( header->exceptionType->name() ) );
+#if OSL_DEBUG_LEVEL > 1
+ OString cstr_unoName( OUStringToOString( unoName, RTL_TEXTENCODING_ASCII_US ) );
+ fprintf( stderr, "> c++ exception occured: %s\n", cstr_unoName.getStr() );
+#endif
+ typelib_typedescription_getByName( &pExcTypeDescr, unoName.pData );
+ if (0 == pExcTypeDescr)
+ {
+ RuntimeException aRE(
+ OUString( RTL_CONSTASCII_USTRINGPARAM("exception type not found: ") ) + unoName,
+ Reference< XInterface >() );
+ Type const & rType = ::getCppuType( &aRE );
+ uno_type_any_constructAndConvert( pUnoExc, &aRE, rType.getTypeLibType(), pCpp2Uno );
+#if OSL_DEBUG_LEVEL > 0
+ OString cstr( OUStringToOString( aRE.Message, RTL_TEXTENCODING_ASCII_US ) );
+ OSL_ENSURE( 0, cstr.getStr() );
+#endif
+ }
+ else
+ {
+ // construct uno exception any
+ uno_any_constructAndConvert( pUnoExc, header->adjustedPtr, pExcTypeDescr, pCpp2Uno );
+ typelib_typedescription_release( pExcTypeDescr );
+ }
+}
+
+}
+
diff --git a/bridges/source/cpp_uno/gcc3_freebsd_intel/makefile.mk b/bridges/source/cpp_uno/gcc3_freebsd_intel/makefile.mk
new file mode 100644
index 000000000000..87ff690dd653
--- /dev/null
+++ b/bridges/source/cpp_uno/gcc3_freebsd_intel/makefile.mk
@@ -0,0 +1,81 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..$/..$/..
+
+PRJNAME=bridges
+TARGET=gcc3_uno
+LIBTARGET=no
+ENABLE_EXCEPTIONS=TRUE
+
+# --- Settings -----------------------------------------------------
+
+.INCLUDE : settings.mk
+
+# --- Files --------------------------------------------------------
+
+.IF "$(COM)$(OS)$(CPU)$(COMNAME)" == "GCCFREEBSDIgcc3"
+
+.IF "$(cppu_no_leak)" == ""
+CFLAGS += -DLEAK_STATIC_DATA
+.ENDIF
+
+# In case someone enabled the non-standard -fomit-frame-pointer which does not
+# work with the .cxx sources in this directory:
+CFLAGSCXX += -fno-omit-frame-pointer
+
+CFLAGSNOOPT=-O0
+
+SLOFILES= \
+ $(SLO)$/except.obj \
+ $(SLO)$/cpp2uno.obj \
+ $(SLO)$/uno2cpp.obj \
+ $(SLO)$/call.obj
+
+SHL1TARGET= $(TARGET)
+
+SHL1DEF=$(MISC)$/$(SHL1TARGET).def
+SHL1IMPLIB=i$(TARGET)
+SHL1VERSIONMAP=..$/..$/bridge_exports.map
+SHL1RPATH=URELIB
+
+SHL1OBJS = $(SLOFILES)
+SHL1LIBS = $(SLB)$/cpp_uno_shared.lib
+
+SHL1STDLIBS= \
+ $(CPPULIB) \
+ $(SALLIB)
+
+.ENDIF
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : target.mk
+
+$(SLO)$/%.obj: %.s
+ $(CC) -c -o $(SLO)$/$(@:b).o $<
+ touch $@
diff --git a/bridges/source/cpp_uno/gcc3_freebsd_intel/share.hxx b/bridges/source/cpp_uno/gcc3_freebsd_intel/share.hxx
new file mode 100644
index 000000000000..930094738b20
--- /dev/null
+++ b/bridges/source/cpp_uno/gcc3_freebsd_intel/share.hxx
@@ -0,0 +1,90 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "uno/mapping.h"
+
+#include <typeinfo>
+#include <exception>
+#include <cstddef>
+
+namespace CPPU_CURRENT_NAMESPACE
+{
+
+void dummy_can_throw_anything( char const * );
+
+// ----- following decl from libstdc++-v3/libsupc++/unwind-cxx.h and unwind.h
+
+struct _Unwind_Exception
+{
+ unsigned exception_class __attribute__((__mode__(__DI__)));
+ void * exception_cleanup;
+ unsigned private_1 __attribute__((__mode__(__word__)));
+ unsigned private_2 __attribute__((__mode__(__word__)));
+} __attribute__((__aligned__));
+
+struct __cxa_exception
+{
+ ::std::type_info *exceptionType;
+ void (*exceptionDestructor)(void *);
+
+ ::std::unexpected_handler unexpectedHandler;
+ ::std::terminate_handler terminateHandler;
+
+ __cxa_exception *nextException;
+
+ int handlerCount;
+
+ int handlerSwitchValue;
+ const unsigned char *actionRecord;
+ const unsigned char *languageSpecificData;
+ void *catchTemp;
+ void *adjustedPtr;
+
+ _Unwind_Exception unwindHeader;
+};
+
+extern "C" void *__cxa_allocate_exception(
+ std::size_t thrown_size ) throw();
+extern "C" void __cxa_throw (
+ void *thrown_exception, std::type_info *tinfo, void (*dest) (void *) ) __attribute__((noreturn));
+
+struct __cxa_eh_globals
+{
+ __cxa_exception *caughtExceptions;
+ unsigned int uncaughtExceptions;
+};
+extern "C" __cxa_eh_globals *__cxa_get_globals () throw();
+
+// -----
+
+//==================================================================================================
+void raiseException(
+ uno_Any * pUnoExc, uno_Mapping * pUno2Cpp );
+//==================================================================================================
+void fillUnoException(
+ __cxa_exception * header, uno_Any *, uno_Mapping * pCpp2Uno );
+}
diff --git a/bridges/source/cpp_uno/gcc3_freebsd_intel/uno2cpp.cxx b/bridges/source/cpp_uno/gcc3_freebsd_intel/uno2cpp.cxx
new file mode 100644
index 000000000000..094a1d1d0177
--- /dev/null
+++ b/bridges/source/cpp_uno/gcc3_freebsd_intel/uno2cpp.cxx
@@ -0,0 +1,444 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_bridges.hxx"
+
+#include <stdlib.h>
+
+#include <com/sun/star/uno/genfunc.hxx>
+#include "com/sun/star/uno/RuntimeException.hpp"
+#include <uno/data.h>
+
+#include "bridges/cpp_uno/shared/bridge.hxx"
+#include "bridges/cpp_uno/shared/types.hxx"
+#include "bridges/cpp_uno/shared/unointerfaceproxy.hxx"
+#include "bridges/cpp_uno/shared/vtables.hxx"
+
+#include "share.hxx"
+
+using namespace ::rtl;
+using namespace ::com::sun::star::uno;
+
+namespace
+{
+
+//==================================================================================================
+// The call instruction within the asm section of callVirtualMethod may throw
+// exceptions. So that the compiler handles this correctly, it is important
+// that (a) callVirtualMethod might call dummy_can_throw_anything (although this
+// never happens at runtime), which in turn can throw exceptions, and (b)
+// callVirtualMethod is not inlined at its call site (so that any exceptions are
+// caught which are thrown from the instruction calling callVirtualMethod):
+void callVirtualMethod(
+ void * pAdjustedThisPtr,
+ sal_Int32 nVtableIndex,
+ void * pRegisterReturn,
+ typelib_TypeClass eReturnType,
+ sal_Int32 * pStackLongs,
+ sal_Int32 nStackLongs ) __attribute__((noinline));
+
+void callVirtualMethod(
+ void * pAdjustedThisPtr,
+ sal_Int32 nVtableIndex,
+ void * pRegisterReturn,
+ typelib_TypeClass eReturnType,
+ sal_Int32 * pStackLongs,
+ sal_Int32 nStackLongs )
+{
+ // parameter list is mixed list of * and values
+ // reference parameters are pointers
+
+ OSL_ENSURE( pStackLongs && pAdjustedThisPtr, "### null ptr!" );
+ OSL_ENSURE( (sizeof(void *) == 4) && (sizeof(sal_Int32) == 4), "### unexpected size of int!" );
+ OSL_ENSURE( nStackLongs && pStackLongs, "### no stack in callVirtualMethod !" );
+
+ // never called
+ if (! pAdjustedThisPtr) CPPU_CURRENT_NAMESPACE::dummy_can_throw_anything("xxx"); // address something
+
+ volatile long edx = 0, eax = 0; // for register returns
+ void * stackptr;
+ asm volatile (
+ "mov %%esp, %6\n\t"
+ // copy values
+ "mov %0, %%eax\n\t"
+ "mov %%eax, %%edx\n\t"
+ "dec %%edx\n\t"
+ "shl $2, %%edx\n\t"
+ "add %1, %%edx\n"
+ "Lcopy:\n\t"
+ "pushl 0(%%edx)\n\t"
+ "sub $4, %%edx\n\t"
+ "dec %%eax\n\t"
+ "jne Lcopy\n\t"
+ // do the actual call
+ "mov %2, %%edx\n\t"
+ "mov 0(%%edx), %%edx\n\t"
+ "mov %3, %%eax\n\t"
+ "shl $2, %%eax\n\t"
+ "add %%eax, %%edx\n\t"
+ "mov 0(%%edx), %%edx\n\t"
+ "call *%%edx\n\t"
+ // save return registers
+ "mov %%eax, %4\n\t"
+ "mov %%edx, %5\n\t"
+ // cleanup stack
+ "mov %6, %%esp\n\t"
+ :
+ : "m"(nStackLongs), "m"(pStackLongs), "m"(pAdjustedThisPtr),
+ "m"(nVtableIndex), "m"(eax), "m"(edx), "m"(stackptr)
+ : "eax", "edx" );
+ switch( eReturnType )
+ {
+ case typelib_TypeClass_HYPER:
+ case typelib_TypeClass_UNSIGNED_HYPER:
+ ((long*)pRegisterReturn)[1] = edx;
+ case typelib_TypeClass_LONG:
+ case typelib_TypeClass_UNSIGNED_LONG:
+ case typelib_TypeClass_CHAR:
+ case typelib_TypeClass_ENUM:
+ ((long*)pRegisterReturn)[0] = eax;
+ break;
+ case typelib_TypeClass_SHORT:
+ case typelib_TypeClass_UNSIGNED_SHORT:
+ *(unsigned short*)pRegisterReturn = eax;
+ break;
+ case typelib_TypeClass_BOOLEAN:
+ case typelib_TypeClass_BYTE:
+ *(unsigned char*)pRegisterReturn = eax;
+ break;
+ case typelib_TypeClass_FLOAT:
+ asm ( "fstps %0" : : "m"(*(char *)pRegisterReturn) );
+ break;
+ case typelib_TypeClass_DOUBLE:
+ asm ( "fstpl %0\n\t" : : "m"(*(char *)pRegisterReturn) );
+ break;
+ default:
+ break;
+ }
+}
+
+//==================================================================================================
+static void cpp_call(
+ bridges::cpp_uno::shared::UnoInterfaceProxy * pThis,
+ bridges::cpp_uno::shared::VtableSlot aVtableSlot,
+ typelib_TypeDescriptionReference * pReturnTypeRef,
+ sal_Int32 nParams, typelib_MethodParameter * pParams,
+ void * pUnoReturn, void * pUnoArgs[], uno_Any ** ppUnoExc )
+{
+ // max space for: [complex ret ptr], values|ptr ...
+ char * pCppStack =
+ (char *)alloca( sizeof(sal_Int32) + ((nParams+2) * sizeof(sal_Int64)) );
+ char * pCppStackStart = pCppStack;
+
+ // return
+ typelib_TypeDescription * pReturnTypeDescr = 0;
+ TYPELIB_DANGER_GET( &pReturnTypeDescr, pReturnTypeRef );
+ OSL_ENSURE( pReturnTypeDescr, "### expected return type description!" );
+
+ void * pCppReturn = 0; // if != 0 && != pUnoReturn, needs reconversion
+
+ if (pReturnTypeDescr)
+ {
+ if (bridges::cpp_uno::shared::isSimpleType( pReturnTypeDescr ))
+ {
+ pCppReturn = pUnoReturn; // direct way for simple types
+ }
+ else
+ {
+ // complex return via ptr
+ pCppReturn = *(void **)pCppStack
+ = (bridges::cpp_uno::shared::relatesToInterfaceType(
+ pReturnTypeDescr )
+ ? alloca( pReturnTypeDescr->nSize )
+ : pUnoReturn); // direct way
+ pCppStack += sizeof(void *);
+ }
+ }
+ // push this
+ void * pAdjustedThisPtr = reinterpret_cast< void ** >(pThis->getCppI())
+ + aVtableSlot.offset;
+ *(void**)pCppStack = pAdjustedThisPtr;
+ pCppStack += sizeof( void* );
+
+ // stack space
+ OSL_ENSURE( sizeof(void *) == sizeof(sal_Int32), "### unexpected size!" );
+ // args
+ void ** pCppArgs = (void **)alloca( 3 * sizeof(void *) * nParams );
+ // indizes of values this have to be converted (interface conversion cpp<=>uno)
+ sal_Int32 * pTempIndizes = (sal_Int32 *)(pCppArgs + nParams);
+ // type descriptions for reconversions
+ typelib_TypeDescription ** ppTempParamTypeDescr = (typelib_TypeDescription **)(pCppArgs + (2 * nParams));
+
+ sal_Int32 nTempIndizes = 0;
+
+ for ( sal_Int32 nPos = 0; nPos < nParams; ++nPos )
+ {
+ const typelib_MethodParameter & rParam = pParams[nPos];
+ typelib_TypeDescription * pParamTypeDescr = 0;
+ TYPELIB_DANGER_GET( &pParamTypeDescr, rParam.pTypeRef );
+
+ if (!rParam.bOut
+ && bridges::cpp_uno::shared::isSimpleType( pParamTypeDescr ))
+ {
+ uno_copyAndConvertData( pCppArgs[nPos] = pCppStack, pUnoArgs[nPos], pParamTypeDescr,
+ pThis->getBridge()->getUno2Cpp() );
+
+ switch (pParamTypeDescr->eTypeClass)
+ {
+ case typelib_TypeClass_HYPER:
+ case typelib_TypeClass_UNSIGNED_HYPER:
+ case typelib_TypeClass_DOUBLE:
+ pCppStack += sizeof(sal_Int32); // extra long
+ break;
+ default:
+ break;
+ }
+ // no longer needed
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ else // ptr to complex value | ref
+ {
+ if (! rParam.bIn) // is pure out
+ {
+ // cpp out is constructed mem, uno out is not!
+ uno_constructData(
+ *(void **)pCppStack = pCppArgs[nPos] = alloca( pParamTypeDescr->nSize ),
+ pParamTypeDescr );
+ pTempIndizes[nTempIndizes] = nPos; // default constructed for cpp call
+ // will be released at reconversion
+ ppTempParamTypeDescr[nTempIndizes++] = pParamTypeDescr;
+ }
+ // is in/inout
+ else if (bridges::cpp_uno::shared::relatesToInterfaceType(
+ pParamTypeDescr ))
+ {
+ uno_copyAndConvertData(
+ *(void **)pCppStack = pCppArgs[nPos] = alloca( pParamTypeDescr->nSize ),
+ pUnoArgs[nPos], pParamTypeDescr,
+ pThis->getBridge()->getUno2Cpp() );
+
+ pTempIndizes[nTempIndizes] = nPos; // has to be reconverted
+ // will be released at reconversion
+ ppTempParamTypeDescr[nTempIndizes++] = pParamTypeDescr;
+ }
+ else // direct way
+ {
+ *(void **)pCppStack = pCppArgs[nPos] = pUnoArgs[nPos];
+ // no longer needed
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ }
+ pCppStack += sizeof(sal_Int32); // standard parameter length
+ }
+
+ try
+ {
+ OSL_ENSURE( !( (pCppStack - pCppStackStart ) & 3), "UNALIGNED STACK !!! (Please DO panic)" );
+ callVirtualMethod(
+ pAdjustedThisPtr, aVtableSlot.index,
+ pCppReturn, pReturnTypeDescr->eTypeClass,
+ (sal_Int32 *)pCppStackStart, (pCppStack - pCppStackStart) / sizeof(sal_Int32) );
+ // NO exception occured...
+ *ppUnoExc = 0;
+
+ // reconvert temporary params
+ for ( ; nTempIndizes--; )
+ {
+ sal_Int32 nIndex = pTempIndizes[nTempIndizes];
+ typelib_TypeDescription * pParamTypeDescr = ppTempParamTypeDescr[nTempIndizes];
+
+ if (pParams[nIndex].bIn)
+ {
+ if (pParams[nIndex].bOut) // inout
+ {
+ uno_destructData( pUnoArgs[nIndex], pParamTypeDescr, 0 ); // destroy uno value
+ uno_copyAndConvertData( pUnoArgs[nIndex], pCppArgs[nIndex], pParamTypeDescr,
+ pThis->getBridge()->getCpp2Uno() );
+ }
+ }
+ else // pure out
+ {
+ uno_copyAndConvertData( pUnoArgs[nIndex], pCppArgs[nIndex], pParamTypeDescr,
+ pThis->getBridge()->getCpp2Uno() );
+ }
+ // destroy temp cpp param => cpp: every param was constructed
+ uno_destructData( pCppArgs[nIndex], pParamTypeDescr, cpp_release );
+
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ // return value
+ if (pCppReturn && pUnoReturn != pCppReturn)
+ {
+ uno_copyAndConvertData( pUnoReturn, pCppReturn, pReturnTypeDescr,
+ pThis->getBridge()->getCpp2Uno() );
+ uno_destructData( pCppReturn, pReturnTypeDescr, cpp_release );
+ }
+ }
+ catch (...)
+ {
+ // fill uno exception
+ fillUnoException( CPPU_CURRENT_NAMESPACE::__cxa_get_globals()->caughtExceptions, *ppUnoExc, pThis->getBridge()->getCpp2Uno() );
+
+ // temporary params
+ for ( ; nTempIndizes--; )
+ {
+ sal_Int32 nIndex = pTempIndizes[nTempIndizes];
+ // destroy temp cpp param => cpp: every param was constructed
+ uno_destructData( pCppArgs[nIndex], ppTempParamTypeDescr[nTempIndizes], cpp_release );
+ TYPELIB_DANGER_RELEASE( ppTempParamTypeDescr[nTempIndizes] );
+ }
+ // return type
+ if (pReturnTypeDescr)
+ TYPELIB_DANGER_RELEASE( pReturnTypeDescr );
+ }
+}
+
+}
+
+namespace bridges { namespace cpp_uno { namespace shared {
+
+void unoInterfaceProxyDispatch(
+ uno_Interface * pUnoI, const typelib_TypeDescription * pMemberDescr,
+ void * pReturn, void * pArgs[], uno_Any ** ppException )
+{
+ // is my surrogate
+ bridges::cpp_uno::shared::UnoInterfaceProxy * pThis
+ = static_cast< bridges::cpp_uno::shared::UnoInterfaceProxy * >(pUnoI);
+
+ switch (pMemberDescr->eTypeClass)
+ {
+ case typelib_TypeClass_INTERFACE_ATTRIBUTE:
+ {
+ VtableSlot aVtableSlot(
+ getVtableSlot(
+ reinterpret_cast<
+ typelib_InterfaceAttributeTypeDescription const * >(
+ pMemberDescr)));
+ if (pReturn)
+ {
+ // dependent dispatch
+ cpp_call(
+ pThis, aVtableSlot,
+ ((typelib_InterfaceAttributeTypeDescription *)pMemberDescr)->pAttributeTypeRef,
+ 0, 0, // no params
+ pReturn, pArgs, ppException );
+ }
+ else
+ {
+ // is SET
+ typelib_MethodParameter aParam;
+ aParam.pTypeRef =
+ ((typelib_InterfaceAttributeTypeDescription *)pMemberDescr)->pAttributeTypeRef;
+ aParam.bIn = sal_True;
+ aParam.bOut = sal_False;
+
+ typelib_TypeDescriptionReference * pReturnTypeRef = 0;
+ OUString aVoidName( RTL_CONSTASCII_USTRINGPARAM("void") );
+ typelib_typedescriptionreference_new(
+ &pReturnTypeRef, typelib_TypeClass_VOID, aVoidName.pData );
+
+ // dependent dispatch
+ aVtableSlot.index += 1; // get, then set method
+ cpp_call(
+ pThis, aVtableSlot,
+ pReturnTypeRef,
+ 1, &aParam,
+ pReturn, pArgs, ppException );
+
+ typelib_typedescriptionreference_release( pReturnTypeRef );
+ }
+
+ break;
+ }
+ case typelib_TypeClass_INTERFACE_METHOD:
+ {
+ VtableSlot aVtableSlot(
+ getVtableSlot(
+ reinterpret_cast<
+ typelib_InterfaceMethodTypeDescription const * >(
+ pMemberDescr)));
+ switch (aVtableSlot.index)
+ {
+ // standard calls
+ case 1: // acquire uno interface
+ (*pUnoI->acquire)( pUnoI );
+ *ppException = 0;
+ break;
+ case 2: // release uno interface
+ (*pUnoI->release)( pUnoI );
+ *ppException = 0;
+ break;
+ case 0: // queryInterface() opt
+ {
+ typelib_TypeDescription * pTD = 0;
+ TYPELIB_DANGER_GET( &pTD, reinterpret_cast< Type * >( pArgs[0] )->getTypeLibType() );
+ if (pTD)
+ {
+ uno_Interface * pInterface = 0;
+ (*pThis->pBridge->getUnoEnv()->getRegisteredInterface)(
+ pThis->pBridge->getUnoEnv(),
+ (void **)&pInterface, pThis->oid.pData, (typelib_InterfaceTypeDescription *)pTD );
+
+ if (pInterface)
+ {
+ ::uno_any_construct(
+ reinterpret_cast< uno_Any * >( pReturn ),
+ &pInterface, pTD, 0 );
+ (*pInterface->release)( pInterface );
+ TYPELIB_DANGER_RELEASE( pTD );
+ *ppException = 0;
+ break;
+ }
+ TYPELIB_DANGER_RELEASE( pTD );
+ }
+ } // else perform queryInterface()
+ default:
+ // dependent dispatch
+ cpp_call(
+ pThis, aVtableSlot,
+ ((typelib_InterfaceMethodTypeDescription *)pMemberDescr)->pReturnTypeRef,
+ ((typelib_InterfaceMethodTypeDescription *)pMemberDescr)->nParams,
+ ((typelib_InterfaceMethodTypeDescription *)pMemberDescr)->pParams,
+ pReturn, pArgs, ppException );
+ }
+ break;
+ }
+ default:
+ {
+ ::com::sun::star::uno::RuntimeException aExc(
+ OUString( RTL_CONSTASCII_USTRINGPARAM("illegal member type description!") ),
+ ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >() );
+
+ Type const & rExcType = ::getCppuType( &aExc );
+ // binary identical null reference
+ ::uno_type_any_construct( *ppException, &aExc, rExcType.getTypeLibType(), 0 );
+ }
+ }
+}
+
+} } }
diff --git a/bridges/source/cpp_uno/gcc3_freebsd_x86-64/abi.cxx b/bridges/source/cpp_uno/gcc3_freebsd_x86-64/abi.cxx
new file mode 100644
index 000000000000..937af0152d90
--- /dev/null
+++ b/bridges/source/cpp_uno/gcc3_freebsd_x86-64/abi.cxx
@@ -0,0 +1,803 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_bridges.hxx"
+
+// This is an implementation of the x86-64 ABI as described in 'System V
+// Application Binary Interface, AMD64 Architecture Processor Supplement'
+// (http://www.x86-64.org/documentation/abi-0.95.pdf)
+//
+// The code in this file is a modification of src/x86/ffi64.c from libffi
+// (http://sources.redhat.com/libffi/) which is under the following license:
+
+/* -----------------------------------------------------------------------
+ ffi.c - Copyright (c) 2002 Bo Thorsen <bo@suse.de>
+
+ x86-64 Foreign Function Interface
+
+ Permission is hereby granted, free of charge, to any person obtaining
+ a copy of this software and associated documentation files (the
+ ``Software''), to deal in the Software without restriction, including
+ without limitation the rights to use, copy, modify, merge, publish,
+ distribute, sublicense, and/or sell copies of the Software, and to
+ permit persons to whom the Software is furnished to do so, subject to
+ the following conditions:
+
+ The above copyright notice and this permission notice shall be included
+ in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ OTHER DEALINGS IN THE SOFTWARE.
+ ----------------------------------------------------------------------- */
+
+#include <abi.hxx>
+
+#include <rtl/ustring.hxx>
+
+using namespace x86_64;
+
+typedef struct
+{
+ /* Registers for argument passing. */
+ long gpr[MAX_GPR_REGS];
+ __int128_t sse[MAX_SSE_REGS];
+
+ /* Stack space for arguments. */
+ char argspace[0];
+} stackLayout;
+
+/* Register class used for passing given 64bit part of the argument.
+ These represent classes as documented by the PS ABI, with the exception
+ of SSESF, SSEDF classes, that are basically SSE class, just gcc will
+ use SF or DFmode move instead of DImode to avoid reformating penalties.
+
+ Similary we play games with INTEGERSI_CLASS to use cheaper SImode moves
+ whenever possible (upper half does contain padding).
+ */
+enum x86_64_reg_class
+{
+ X86_64_NO_CLASS,
+ X86_64_INTEGER_CLASS,
+ X86_64_INTEGERSI_CLASS,
+ X86_64_SSE_CLASS,
+ X86_64_SSESF_CLASS,
+ X86_64_SSEDF_CLASS,
+ X86_64_SSEUP_CLASS,
+ X86_64_X87_CLASS,
+ X86_64_X87UP_CLASS,
+ X86_64_MEMORY_CLASS
+};
+
+#define MAX_CLASSES 4
+
+#define ALIGN(v, a) (((((size_t) (v))-1) | ((a)-1))+1)
+
+/* x86-64 register passing implementation. See x86-64 ABI for details. Goal
+ of this code is to classify each 8bytes of incoming argument by the register
+ class and assign registers accordingly. */
+
+/* Return the union class of CLASS1 and CLASS2.
+ See the x86-64 PS ABI for details. */
+
+static enum x86_64_reg_class
+merge_classes (enum x86_64_reg_class class1, enum x86_64_reg_class class2)
+{
+ /* Rule #1: If both classes are equal, this is the resulting class. */
+ if (class1 == class2)
+ return class1;
+
+ /* Rule #2: If one of the classes is NO_CLASS, the resulting class is
+ the other class. */
+ if (class1 == X86_64_NO_CLASS)
+ return class2;
+ if (class2 == X86_64_NO_CLASS)
+ return class1;
+
+ /* Rule #3: If one of the classes is MEMORY, the result is MEMORY. */
+ if (class1 == X86_64_MEMORY_CLASS || class2 == X86_64_MEMORY_CLASS)
+ return X86_64_MEMORY_CLASS;
+
+ /* Rule #4: If one of the classes is INTEGER, the result is INTEGER. */
+ if ((class1 == X86_64_INTEGERSI_CLASS && class2 == X86_64_SSESF_CLASS)
+ || (class2 == X86_64_INTEGERSI_CLASS && class1 == X86_64_SSESF_CLASS))
+ return X86_64_INTEGERSI_CLASS;
+ if (class1 == X86_64_INTEGER_CLASS || class1 == X86_64_INTEGERSI_CLASS
+ || class2 == X86_64_INTEGER_CLASS || class2 == X86_64_INTEGERSI_CLASS)
+ return X86_64_INTEGER_CLASS;
+
+ /* Rule #5: If one of the classes is X87 or X87UP class, MEMORY is used. */
+ if (class1 == X86_64_X87_CLASS || class1 == X86_64_X87UP_CLASS
+ || class2 == X86_64_X87_CLASS || class2 == X86_64_X87UP_CLASS)
+ return X86_64_MEMORY_CLASS;
+
+ /* Rule #6: Otherwise class SSE is used. */
+ return X86_64_SSE_CLASS;
+}
+
+/* Classify the argument of type TYPE and mode MODE.
+ CLASSES will be filled by the register class used to pass each word
+ of the operand. The number of words is returned. In case the parameter
+ should be passed in memory, 0 is returned. As a special case for zero
+ sized containers, classes[0] will be NO_CLASS and 1 is returned.
+
+ See the x86-64 PS ABI for details.
+*/
+static int
+classify_argument( typelib_TypeDescriptionReference *pTypeRef, enum x86_64_reg_class classes[], int &rByteOffset )
+{
+ /* First, align to the right place. */
+ rByteOffset = ALIGN( rByteOffset, pTypeRef->pType->nAlignment );
+
+ switch ( pTypeRef->eTypeClass )
+ {
+ case typelib_TypeClass_VOID:
+ classes[0] = X86_64_NO_CLASS;
+ return 1;
+ case typelib_TypeClass_CHAR:
+ case typelib_TypeClass_BOOLEAN:
+ case typelib_TypeClass_BYTE:
+ case typelib_TypeClass_SHORT:
+ case typelib_TypeClass_UNSIGNED_SHORT:
+ case typelib_TypeClass_LONG:
+ case typelib_TypeClass_UNSIGNED_LONG:
+ case typelib_TypeClass_HYPER:
+ case typelib_TypeClass_UNSIGNED_HYPER:
+ case typelib_TypeClass_ENUM:
+ if ( ( rByteOffset % 8 + pTypeRef->pType->nSize ) <= 4 )
+ classes[0] = X86_64_INTEGERSI_CLASS;
+ else
+ classes[0] = X86_64_INTEGER_CLASS;
+ return 1;
+ case typelib_TypeClass_FLOAT:
+ if ( ( rByteOffset % 8 ) == 0 )
+ classes[0] = X86_64_SSESF_CLASS;
+ else
+ classes[0] = X86_64_SSE_CLASS;
+ return 1;
+ case typelib_TypeClass_DOUBLE:
+ classes[0] = X86_64_SSEDF_CLASS;
+ return 1;
+ /*case LONGDOUBLE:
+ classes[0] = X86_64_X87_CLASS;
+ classes[1] = X86_64_X87UP_CLASS;
+ return 2;*/
+ case typelib_TypeClass_STRING:
+ case typelib_TypeClass_TYPE:
+ case typelib_TypeClass_ANY:
+ case typelib_TypeClass_TYPEDEF:
+ case typelib_TypeClass_UNION:
+ case typelib_TypeClass_SEQUENCE:
+ case typelib_TypeClass_ARRAY:
+ case typelib_TypeClass_INTERFACE:
+ return 0;
+ case typelib_TypeClass_STRUCT:
+ case typelib_TypeClass_EXCEPTION:
+ {
+ typelib_TypeDescription * pTypeDescr = 0;
+ TYPELIB_DANGER_GET( &pTypeDescr, pTypeRef );
+
+ const int UNITS_PER_WORD = 8;
+ int words = ( pTypeDescr->nSize + UNITS_PER_WORD - 1 ) / UNITS_PER_WORD;
+ enum x86_64_reg_class subclasses[MAX_CLASSES];
+
+ /* If the struct is larger than 16 bytes, pass it on the stack. */
+ if ( pTypeDescr->nSize > 16 )
+ {
+ TYPELIB_DANGER_RELEASE( pTypeDescr );
+ return 0;
+ }
+
+ for ( int i = 0; i < words; i++ )
+ classes[i] = X86_64_NO_CLASS;
+
+ const typelib_CompoundTypeDescription *pStruct = reinterpret_cast<const typelib_CompoundTypeDescription*>( pTypeDescr );
+
+ /* Merge the fields of structure. */
+ for ( sal_Int32 nMember = 0; nMember < pStruct->nMembers; ++nMember )
+ {
+ typelib_TypeDescriptionReference *pTypeInStruct = pStruct->ppTypeRefs[ nMember ];
+
+ int num = classify_argument( pTypeInStruct, subclasses, rByteOffset );
+
+ if ( num == 0 )
+ {
+ TYPELIB_DANGER_RELEASE( pTypeDescr );
+ return 0;
+ }
+
+ for ( int i = 0; i < num; i++ )
+ {
+ int pos = rByteOffset / 8;
+ classes[i + pos] = merge_classes( subclasses[i], classes[i + pos] );
+ }
+
+ if ( pTypeInStruct->eTypeClass != typelib_TypeClass_STRUCT )
+ rByteOffset = pStruct->pMemberOffsets[ nMember ];
+ }
+
+ TYPELIB_DANGER_RELEASE( pTypeDescr );
+
+ /* Final merger cleanup. */
+ for ( int i = 0; i < words; i++ )
+ {
+ /* If one class is MEMORY, everything should be passed in
+ memory. */
+ if ( classes[i] == X86_64_MEMORY_CLASS )
+ return 0;
+
+ /* The X86_64_SSEUP_CLASS should be always preceded by
+ X86_64_SSE_CLASS. */
+ if ( classes[i] == X86_64_SSEUP_CLASS
+ && ( i == 0 || classes[i - 1] != X86_64_SSE_CLASS ) )
+ classes[i] = X86_64_SSE_CLASS;
+
+ /* X86_64_X87UP_CLASS should be preceded by X86_64_X87_CLASS. */
+ if ( classes[i] == X86_64_X87UP_CLASS
+ && ( i == 0 || classes[i - 1] != X86_64_X87_CLASS ) )
+ classes[i] = X86_64_SSE_CLASS;
+ }
+ return words;
+ }
+
+ default:
+#if OSL_DEBUG_LEVEL > 1
+ OSL_TRACE( "Unhandled case: pType->eTypeClass == %d\n", pTypeRef->eTypeClass );
+#endif
+ OSL_ASSERT(0);
+ }
+ return 0; /* Never reached. */
+}
+
+/* Examine the argument and return set number of register required in each
+ class. Return 0 iff parameter should be passed in memory. */
+bool x86_64::examine_argument( typelib_TypeDescriptionReference *pTypeRef, bool bInReturn, int &nUsedGPR, int &nUsedSSE )
+{
+ enum x86_64_reg_class classes[MAX_CLASSES];
+ int offset = 0;
+ int n;
+
+ n = classify_argument( pTypeRef, classes, offset );
+
+ if ( n == 0 )
+ return false;
+
+ nUsedGPR = 0;
+ nUsedSSE = 0;
+ for ( n--; n >= 0; n-- )
+ switch ( classes[n] )
+ {
+ case X86_64_INTEGER_CLASS:
+ case X86_64_INTEGERSI_CLASS:
+ nUsedGPR++;
+ break;
+ case X86_64_SSE_CLASS:
+ case X86_64_SSESF_CLASS:
+ case X86_64_SSEDF_CLASS:
+ nUsedSSE++;
+ break;
+ case X86_64_NO_CLASS:
+ case X86_64_SSEUP_CLASS:
+ break;
+ case X86_64_X87_CLASS:
+ case X86_64_X87UP_CLASS:
+ if ( !bInReturn )
+ return false;
+ break;
+ default:
+#if OSL_DEBUG_LEVEL > 1
+ OSL_TRACE( "Unhandled case: classes[n] == %d\n", classes[n] );
+#endif
+ OSL_ASSERT(0);
+ }
+ return true;
+}
+
+bool x86_64::return_in_hidden_param( typelib_TypeDescriptionReference *pTypeRef )
+{
+ int g, s;
+
+ return examine_argument( pTypeRef, true, g, s ) == 0;
+}
+
+void x86_64::fill_struct( typelib_TypeDescriptionReference *pTypeRef, void * const *pGPR, void * const *pSSE, void *pStruct )
+{
+ enum x86_64_reg_class classes[MAX_CLASSES];
+ int offset = 0;
+ int n;
+
+ n = classify_argument( pTypeRef, classes, offset );
+
+ sal_uInt64 *pStructAlign = reinterpret_cast<sal_uInt64 *>( pStruct );
+ for ( n--; n >= 0; n-- )
+ switch ( classes[n] )
+ {
+ case X86_64_INTEGER_CLASS:
+ case X86_64_INTEGERSI_CLASS:
+ *pStructAlign++ = *reinterpret_cast<sal_uInt64 *>( *pGPR++ );
+ break;
+ case X86_64_SSE_CLASS:
+ case X86_64_SSESF_CLASS:
+ case X86_64_SSEDF_CLASS:
+ *pStructAlign++ = *reinterpret_cast<sal_uInt64 *>( *pSSE++ );
+ break;
+ }
+}
+
+#if 0
+
+/* Functions to load floats and double to an SSE register placeholder. */
+extern void float2sse (float, __int128_t *);
+extern void double2sse (double, __int128_t *);
+extern void floatfloat2sse (void *, __int128_t *);
+
+/* Functions to put the floats and doubles back. */
+extern float sse2float (__int128_t *);
+extern double sse2double (__int128_t *);
+extern void sse2floatfloat(__int128_t *, void *);
+
+/*@-exportheader@*/
+void
+ffi_prep_args (stackLayout *stack, extended_cif *ecif)
+/*@=exportheader@*/
+{
+ int gprcount, ssecount, i, g, s;
+ void **p_argv;
+ void *argp = &stack->argspace;
+ ffi_type **p_arg;
+
+ /* First check if the return value should be passed in memory. If so,
+ pass the pointer as the first argument. */
+ gprcount = ssecount = 0;
+ if (ecif->cif->rtype->type != FFI_TYPE_VOID
+ && examine_argument (ecif->cif->rtype, 1, &g, &s) == 0)
+ (void *)stack->gpr[gprcount++] = ecif->rvalue;
+
+ for (i=ecif->cif->nargs, p_arg=ecif->cif->arg_types, p_argv = ecif->avalue;
+ i!=0; i--, p_arg++, p_argv++)
+ {
+ int in_register = 0;
+
+ switch ((*p_arg)->type)
+ {
+ case FFI_TYPE_SINT8:
+ case FFI_TYPE_SINT16:
+ case FFI_TYPE_SINT32:
+ case FFI_TYPE_SINT64:
+ case FFI_TYPE_UINT8:
+ case FFI_TYPE_UINT16:
+ case FFI_TYPE_UINT32:
+ case FFI_TYPE_UINT64:
+ case FFI_TYPE_POINTER:
+ if (gprcount < MAX_GPR_REGS)
+ {
+ stack->gpr[gprcount] = 0;
+ stack->gpr[gprcount++] = *(long long *)(*p_argv);
+ in_register = 1;
+ }
+ break;
+
+ case FFI_TYPE_FLOAT:
+ if (ssecount < MAX_SSE_REGS)
+ {
+ float2sse (*(float *)(*p_argv), &stack->sse[ssecount++]);
+ in_register = 1;
+ }
+ break;
+
+ case FFI_TYPE_DOUBLE:
+ if (ssecount < MAX_SSE_REGS)
+ {
+ double2sse (*(double *)(*p_argv), &stack->sse[ssecount++]);
+ in_register = 1;
+ }
+ break;
+ }
+
+ if (in_register)
+ continue;
+
+ /* Either all places in registers where filled, or this is a
+ type that potentially goes into a memory slot. */
+ if (examine_argument (*p_arg, 0, &g, &s) == 0
+ || gprcount + g > MAX_GPR_REGS || ssecount + s > MAX_SSE_REGS)
+ {
+ /* Pass this argument in memory. */
+ argp = (void *)ALIGN(argp, (*p_arg)->alignment);
+ memcpy (argp, *p_argv, (*p_arg)->size);
+ argp += (*p_arg)->size;
+ }
+ else
+ {
+ /* All easy cases are eliminated. Now fire the big guns. */
+
+ enum x86_64_reg_class classes[MAX_CLASSES];
+ int offset = 0, j, num;
+ void *a;
+
+ num = classify_argument (*p_arg, classes, &offset);
+ for (j=0, a=*p_argv; j<num; j++, a+=8)
+ {
+ switch (classes[j])
+ {
+ case X86_64_INTEGER_CLASS:
+ case X86_64_INTEGERSI_CLASS:
+ stack->gpr[gprcount++] = *(long long *)a;
+ break;
+ case X86_64_SSE_CLASS:
+ floatfloat2sse (a, &stack->sse[ssecount++]);
+ break;
+ case X86_64_SSESF_CLASS:
+ float2sse (*(float *)a, &stack->sse[ssecount++]);
+ break;
+ case X86_64_SSEDF_CLASS:
+ double2sse (*(double *)a, &stack->sse[ssecount++]);
+ break;
+ default:
+ abort();
+ }
+ }
+ }
+ }
+}
+
+/* Perform machine dependent cif processing. */
+ffi_status
+ffi_prep_cif_machdep (ffi_cif *cif)
+{
+ int gprcount, ssecount, i, g, s;
+
+ gprcount = ssecount = 0;
+
+ /* Reset the byte count. We handle this size estimation here. */
+ cif->bytes = 0;
+
+ /* If the return value should be passed in memory, pass the pointer
+ as the first argument. The actual memory isn't allocated here. */
+ if (cif->rtype->type != FFI_TYPE_VOID
+ && examine_argument (cif->rtype, 1, &g, &s) == 0)
+ gprcount = 1;
+
+ /* Go over all arguments and determine the way they should be passed.
+ If it's in a register and there is space for it, let that be so. If
+ not, add it's size to the stack byte count. */
+ for (i=0; i<cif->nargs; i++)
+ {
+ if (examine_argument (cif->arg_types[i], 0, &g, &s) == 0
+ || gprcount + g > MAX_GPR_REGS || ssecount + s > MAX_SSE_REGS)
+ {
+ /* This is passed in memory. First align to the basic type. */
+ cif->bytes = ALIGN(cif->bytes, cif->arg_types[i]->alignment);
+
+ /* Stack arguments are *always* at least 8 byte aligned. */
+ cif->bytes = ALIGN(cif->bytes, 8);
+
+ /* Now add the size of this argument. */
+ cif->bytes += cif->arg_types[i]->size;
+ }
+ else
+ {
+ gprcount += g;
+ ssecount += s;
+ }
+ }
+
+ /* Set the flag for the closures return. */
+ switch (cif->rtype->type)
+ {
+ case FFI_TYPE_VOID:
+ case FFI_TYPE_STRUCT:
+ case FFI_TYPE_SINT64:
+ case FFI_TYPE_FLOAT:
+ case FFI_TYPE_DOUBLE:
+ case FFI_TYPE_LONGDOUBLE:
+ cif->flags = (unsigned) cif->rtype->type;
+ break;
+
+ case FFI_TYPE_UINT64:
+ cif->flags = FFI_TYPE_SINT64;
+ break;
+
+ default:
+ cif->flags = FFI_TYPE_INT;
+ break;
+ }
+
+ return FFI_OK;
+}
+
+typedef struct
+{
+ long gpr[2];
+ __int128_t sse[2];
+ long double st0;
+} return_value;
+
+//#endif
+
+void
+ffi_fill_return_value (return_value *rv, extended_cif *ecif)
+{
+ enum x86_64_reg_class classes[MAX_CLASSES];
+ int i = 0, num;
+ long *gpr = rv->gpr;
+ __int128_t *sse = rv->sse;
+ signed char sc;
+ signed short ss;
+
+ /* This is needed because of the way x86-64 handles signed short
+ integers. */
+ switch (ecif->cif->rtype->type)
+ {
+ case FFI_TYPE_SINT8:
+ sc = *(signed char *)gpr;
+ *(long long *)ecif->rvalue = (long long)sc;
+ return;
+ case FFI_TYPE_SINT16:
+ ss = *(signed short *)gpr;
+ *(long long *)ecif->rvalue = (long long)ss;
+ return;
+ default:
+ /* Just continue. */
+ ;
+ }
+
+ num = classify_argument (ecif->cif->rtype, classes, &i);
+
+ if (num == 0)
+ /* Return in memory. */
+ ecif->rvalue = (void *) rv->gpr[0];
+ else if (num == 2 && classes[0] == X86_64_X87_CLASS &&
+ classes[1] == X86_64_X87UP_CLASS)
+ /* This is a long double (this is easiest to handle this way instead
+ of an eightbyte at a time as in the loop below. */
+ *((long double *)ecif->rvalue) = rv->st0;
+ else
+ {
+ void *a;
+
+ for (i=0, a=ecif->rvalue; i<num; i++, a+=8)
+ {
+ switch (classes[i])
+ {
+ case X86_64_INTEGER_CLASS:
+ case X86_64_INTEGERSI_CLASS:
+ *(long long *)a = *gpr;
+ gpr++;
+ break;
+ case X86_64_SSE_CLASS:
+ sse2floatfloat (sse++, a);
+ break;
+ case X86_64_SSESF_CLASS:
+ *(float *)a = sse2float (sse++);
+ break;
+ case X86_64_SSEDF_CLASS:
+ *(double *)a = sse2double (sse++);
+ break;
+ default:
+ abort();
+ }
+ }
+ }
+}
+
+//#if 0
+
+/*@-declundef@*/
+/*@-exportheader@*/
+extern void ffi_call_UNIX64(void (*)(stackLayout *, extended_cif *),
+ void (*) (return_value *, extended_cif *),
+ /*@out@*/ extended_cif *,
+ unsigned, /*@out@*/ unsigned *, void (*fn)());
+/*@=declundef@*/
+/*@=exportheader@*/
+
+void ffi_call(/*@dependent@*/ ffi_cif *cif,
+ void (*fn)(),
+ /*@out@*/ void *rvalue,
+ /*@dependent@*/ void **avalue)
+{
+ extended_cif ecif;
+ int dummy;
+
+ ecif.cif = cif;
+ ecif.avalue = avalue;
+
+ /* If the return value is a struct and we don't have a return */
+ /* value address then we need to make one */
+
+ if ((rvalue == NULL) &&
+ (examine_argument (cif->rtype, 1, &dummy, &dummy) == 0))
+ {
+ /*@-sysunrecog@*/
+ ecif.rvalue = alloca(cif->rtype->size);
+ /*@=sysunrecog@*/
+ }
+ else
+ ecif.rvalue = rvalue;
+
+ /* Stack must always be 16byte aligned. Make it so. */
+ cif->bytes = ALIGN(cif->bytes, 16);
+
+ switch (cif->abi)
+ {
+ case FFI_SYSV:
+ /* Calling 32bit code from 64bit is not possible */
+ FFI_ASSERT(0);
+ break;
+
+ case FFI_UNIX64:
+ /*@-usedef@*/
+ ffi_call_UNIX64 (ffi_prep_args, ffi_fill_return_value, &ecif,
+ cif->bytes, ecif.rvalue, fn);
+ /*@=usedef@*/
+ break;
+
+ default:
+ FFI_ASSERT(0);
+ break;
+ }
+}
+
+extern void ffi_closure_UNIX64(void);
+
+ffi_status
+ffi_prep_closure (ffi_closure* closure,
+ ffi_cif* cif,
+ void (*fun)(ffi_cif*, void*, void**, void*),
+ void *user_data)
+{
+ volatile unsigned short *tramp;
+
+ /* FFI_ASSERT (cif->abi == FFI_OSF); */
+
+ tramp = (volatile unsigned short *) &closure->tramp[0];
+ tramp[0] = 0xbb49; /* mov <code>, %r11 */
+ tramp[5] = 0xba49; /* mov <data>, %r10 */
+ tramp[10] = 0xff49; /* jmp *%r11 */
+ tramp[11] = 0x00e3;
+ *(void * volatile *) &tramp[1] = ffi_closure_UNIX64;
+ *(void * volatile *) &tramp[6] = closure;
+
+ closure->cif = cif;
+ closure->fun = fun;
+ closure->user_data = user_data;
+
+ return FFI_OK;
+}
+
+int
+ffi_closure_UNIX64_inner(ffi_closure *closure, va_list l, void *rp)
+{
+ ffi_cif *cif;
+ void **avalue;
+ ffi_type **arg_types;
+ long i, avn, argn;
+
+ cif = closure->cif;
+ avalue = alloca(cif->nargs * sizeof(void *));
+
+ argn = 0;
+
+ i = 0;
+ avn = cif->nargs;
+ arg_types = cif->arg_types;
+
+ /* Grab the addresses of the arguments from the stack frame. */
+ while (i < avn)
+ {
+ switch (arg_types[i]->type)
+ {
+ case FFI_TYPE_SINT8:
+ case FFI_TYPE_UINT8:
+ case FFI_TYPE_SINT16:
+ case FFI_TYPE_UINT16:
+ case FFI_TYPE_SINT32:
+ case FFI_TYPE_UINT32:
+ case FFI_TYPE_SINT64:
+ case FFI_TYPE_UINT64:
+ case FFI_TYPE_POINTER:
+ {
+ if (l->gp_offset > 48-8)
+ {
+ avalue[i] = l->overflow_arg_area;
+ l->overflow_arg_area = (char *)l->overflow_arg_area + 8;
+ }
+ else
+ {
+ avalue[i] = (char *)l->reg_save_area + l->gp_offset;
+ l->gp_offset += 8;
+ }
+ }
+ break;
+
+ case FFI_TYPE_STRUCT:
+ /* FIXME */
+ FFI_ASSERT(0);
+ break;
+
+ case FFI_TYPE_DOUBLE:
+ {
+ if (l->fp_offset > 176-16)
+ {
+ avalue[i] = l->overflow_arg_area;
+ l->overflow_arg_area = (char *)l->overflow_arg_area + 8;
+ }
+ else
+ {
+ avalue[i] = (char *)l->reg_save_area + l->fp_offset;
+ l->fp_offset += 16;
+ }
+ }
+#if DEBUG_FFI
+ fprintf (stderr, "double arg %d = %g\n", i, *(double *)avalue[i]);
+#endif
+ break;
+
+ case FFI_TYPE_FLOAT:
+ {
+ if (l->fp_offset > 176-16)
+ {
+ avalue[i] = l->overflow_arg_area;
+ l->overflow_arg_area = (char *)l->overflow_arg_area + 8;
+ }
+ else
+ {
+ avalue[i] = (char *)l->reg_save_area + l->fp_offset;
+ l->fp_offset += 16;
+ }
+ }
+#if DEBUG_FFI
+ fprintf (stderr, "float arg %d = %g\n", i, *(float *)avalue[i]);
+#endif
+ break;
+
+ default:
+ FFI_ASSERT(0);
+ }
+
+ argn += ALIGN(arg_types[i]->size, SIZEOF_ARG) / SIZEOF_ARG;
+ i++;
+ }
+
+ /* Invoke the closure. */
+ (closure->fun) (cif, rp, avalue, closure->user_data);
+
+ /* FIXME: Structs not supported. */
+ FFI_ASSERT(cif->rtype->type != FFI_TYPE_STRUCT);
+
+ /* Tell ffi_closure_UNIX64 how to perform return type promotions. */
+
+ return cif->rtype->type;
+}
+
+#endif
diff --git a/bridges/source/cpp_uno/gcc3_freebsd_x86-64/abi.hxx b/bridges/source/cpp_uno/gcc3_freebsd_x86-64/abi.hxx
new file mode 100644
index 000000000000..1e2bc64fff93
--- /dev/null
+++ b/bridges/source/cpp_uno/gcc3_freebsd_x86-64/abi.hxx
@@ -0,0 +1,67 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BRIDGES_CPP_UNO_X86_64_ABI_HXX_
+#define _BRIDGES_CPP_UNO_X86_64_ABI_HXX_
+
+// This is an implementation of the x86-64 ABI as described in 'System V
+// Application Binary Interface, AMD64 Architecture Processor Supplement'
+// (http://www.x86-64.org/documentation/abi-0.95.pdf)
+
+#include <typelib/typedescription.hxx>
+
+namespace x86_64
+{
+
+/* 6 general purpose registers are used for parameter passing */
+const sal_uInt32 MAX_GPR_REGS = 6;
+
+/* 8 SSE registers are used for parameter passing */
+const sal_uInt32 MAX_SSE_REGS = 8;
+
+/* Count number of required registers.
+
+ Examine the argument and return set number of register required in each
+ class.
+
+ Return false iff parameter should be passed in memory.
+*/
+bool examine_argument( typelib_TypeDescriptionReference *pTypeRef, bool bInReturn, int &nUsedGPR, int &nUsedSSE );
+
+/** Does function that returns this type use a hidden parameter, or registers?
+
+ The value can be returned either in a hidden 1st parameter (which is a
+ pointer to a structure allocated by the caller), or in registers (rax, rdx
+ for the integers, xmm0, xmm1 for the floating point numbers).
+*/
+bool return_in_hidden_param( typelib_TypeDescriptionReference *pTypeRef );
+
+void fill_struct( typelib_TypeDescriptionReference *pTypeRef, void * const *pGPR, void * const *pSSE, void *pStruct );
+
+} // namespace x86_64
+
+#endif // _BRIDGES_CPP_UNO_X86_64_ABI_HXX_
diff --git a/bridges/source/cpp_uno/gcc3_freebsd_x86-64/call.s b/bridges/source/cpp_uno/gcc3_freebsd_x86-64/call.s
new file mode 100644
index 000000000000..736230705d5a
--- /dev/null
+++ b/bridges/source/cpp_uno/gcc3_freebsd_x86-64/call.s
@@ -0,0 +1,93 @@
+ .text
+ .align 2
+.globl privateSnippetExecutor
+ .type privateSnippetExecutor, @function
+privateSnippetExecutor:
+.LFB3:
+ pushq %rbp
+.LCFI0:
+ movq %rsp, %rbp
+.LCFI1:
+ subq $160, %rsp
+.LCFI2:
+ movq %r10, -152(%rbp) # Save (nVtableOffset << 32) + nFunctionIndex
+
+ movq %rdi, -112(%rbp) # Save GP registers
+ movq %rsi, -104(%rbp)
+ movq %rdx, -96(%rbp)
+ movq %rcx, -88(%rbp)
+ movq %r8 , -80(%rbp)
+ movq %r9 , -72(%rbp)
+
+ movsd %xmm0, -64(%rbp) # Save FP registers
+ movsd %xmm1, -56(%rbp)
+ movsd %xmm2, -48(%rbp)
+ movsd %xmm3, -40(%rbp)
+ movsd %xmm4, -32(%rbp)
+ movsd %xmm5, -24(%rbp)
+ movsd %xmm6, -16(%rbp)
+ movsd %xmm7, -8(%rbp)
+
+ leaq -144(%rbp), %r9 # 6th param: sal_uInt64 * pRegisterReturn
+ leaq 16(%rbp), %r8 # 5rd param: void ** ovrflw
+ leaq -64(%rbp), %rcx # 4th param: void ** fpreg
+ leaq -112(%rbp), %rdx # 3rd param: void ** gpreg
+ movl -148(%rbp), %esi # 2nd param: sal_int32 nVtableOffset
+ movl -152(%rbp), %edi # 1st param: sal_int32 nFunctionIndex
+
+ call cpp_vtable_call
+
+ cmp $10, %rax # typelib_TypeClass_FLOAT
+ je .Lfloat
+ cmp $11, %rax # typelib_TypeClass_DOUBLE
+ je .Lfloat
+
+ movq -144(%rbp), %rax # Return value (int case)
+ jmp .Lfinish
+.Lfloat:
+ movlpd -144(%rbp), %xmm0 # Return value (float/double case)
+
+.Lfinish:
+ leave
+ ret
+.LFE3:
+ .size privateSnippetExecutor, .-privateSnippetExecutor
+ .section .eh_frame,"a",@progbits
+.Lframe1:
+ .long .LECIE1-.LSCIE1
+.LSCIE1:
+ .long 0x0
+ .byte 0x1
+ .string "zR"
+ .uleb128 0x1
+ .sleb128 -8
+ .byte 0x10
+ .uleb128 0x1
+ .byte 0x1b
+ .byte 0xc
+ .uleb128 0x7
+ .uleb128 0x8
+ .byte 0x90
+ .uleb128 0x1
+ .align 8
+.LECIE1:
+.LSFDE1:
+ .long .LEFDE1-.LASFDE1
+.LASFDE1:
+ .long .LASFDE1-.Lframe1
+ .long .LFB3-.
+ .long .LFE3-.LFB3
+ .uleb128 0x0
+ .byte 0x4
+ .long .LCFI0-.LFB3
+ .byte 0xe
+ .uleb128 0x10
+ .byte 0x86
+ .uleb128 0x2
+ .byte 0x4
+ .long .LCFI1-.LCFI0
+ .byte 0xd
+ .uleb128 0x6
+ .align 8
+.LEFDE1:
+ .section .note.GNU-stack,"",@progbits
diff --git a/bridges/source/cpp_uno/gcc3_freebsd_x86-64/cpp2uno.cxx b/bridges/source/cpp_uno/gcc3_freebsd_x86-64/cpp2uno.cxx
new file mode 100644
index 000000000000..d5c47f82a3f4
--- /dev/null
+++ b/bridges/source/cpp_uno/gcc3_freebsd_x86-64/cpp2uno.cxx
@@ -0,0 +1,541 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_bridges.hxx"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <hash_map>
+
+#include <rtl/alloc.h>
+#include <osl/mutex.hxx>
+
+#include <com/sun/star/uno/genfunc.hxx>
+#include "com/sun/star/uno/RuntimeException.hpp"
+#include <uno/data.h>
+#include <typelib/typedescription.hxx>
+
+#include "bridges/cpp_uno/shared/bridge.hxx"
+#include "bridges/cpp_uno/shared/cppinterfaceproxy.hxx"
+#include "bridges/cpp_uno/shared/types.hxx"
+#include "bridges/cpp_uno/shared/vtablefactory.hxx"
+
+#include "abi.hxx"
+#include "share.hxx"
+
+using namespace ::osl;
+using namespace ::rtl;
+using namespace ::com::sun::star::uno;
+
+//==================================================================================================
+
+// Perform the UNO call
+//
+// We must convert the paramaters stored in gpreg, fpreg and ovrflw to UNO
+// arguments and call pThis->getUnoI()->pDispatcher.
+//
+// gpreg: [ret *], this, [gpr params]
+// fpreg: [fpr params]
+// ovrflw: [gpr or fpr params (properly aligned)]
+//
+// [ret *] is present when we are returning a structure bigger than 16 bytes
+// Simple types are returned in rax, rdx (int), or xmm0, xmm1 (fp).
+// Similarly structures <= 16 bytes are in rax, rdx, xmm0, xmm1 as necessary.
+static typelib_TypeClass cpp2uno_call(
+ bridges::cpp_uno::shared::CppInterfaceProxy * pThis,
+ const typelib_TypeDescription * pMemberTypeDescr,
+ typelib_TypeDescriptionReference * pReturnTypeRef, // 0 indicates void return
+ sal_Int32 nParams, typelib_MethodParameter * pParams,
+ void ** gpreg, void ** fpreg, void ** ovrflw,
+ sal_uInt64 * pRegisterReturn /* space for register return */ )
+{
+ int nr_gpr = 0; //number of gpr registers used
+ int nr_fpr = 0; //number of fpr regsiters used
+
+ // return
+ typelib_TypeDescription * pReturnTypeDescr = 0;
+ if (pReturnTypeRef)
+ TYPELIB_DANGER_GET( &pReturnTypeDescr, pReturnTypeRef );
+
+ void * pUnoReturn = 0;
+ void * pCppReturn = 0; // complex return ptr: if != 0 && != pUnoReturn, reconversion need
+
+ if ( pReturnTypeDescr )
+ {
+ if ( x86_64::return_in_hidden_param( pReturnTypeRef ) )
+ {
+ pCppReturn = *gpreg++;
+ nr_gpr++;
+
+ pUnoReturn = ( bridges::cpp_uno::shared::relatesToInterfaceType( pReturnTypeDescr )
+ ? alloca( pReturnTypeDescr->nSize )
+ : pCppReturn ); // direct way
+ }
+ else
+ pUnoReturn = pRegisterReturn; // direct way for simple types
+ }
+
+ // pop this
+ gpreg++;
+ nr_gpr++;
+
+ // stack space
+ // parameters
+ void ** pUnoArgs = (void **)alloca( 4 * sizeof(void *) * nParams );
+ void ** pCppArgs = pUnoArgs + nParams;
+ // indizes of values this have to be converted (interface conversion cpp<=>uno)
+ sal_Int32 * pTempIndizes = (sal_Int32 *)(pUnoArgs + (2 * nParams));
+ // type descriptions for reconversions
+ typelib_TypeDescription ** ppTempParamTypeDescr = (typelib_TypeDescription **)(pUnoArgs + (3 * nParams));
+
+ sal_Int32 nTempIndizes = 0;
+
+ for ( sal_Int32 nPos = 0; nPos < nParams; ++nPos )
+ {
+ const typelib_MethodParameter & rParam = pParams[nPos];
+ typelib_TypeDescription * pParamTypeDescr = 0;
+ TYPELIB_DANGER_GET( &pParamTypeDescr, rParam.pTypeRef );
+
+ int nUsedGPR = 0;
+ int nUsedSSE = 0;
+ bool bFitsRegisters = x86_64::examine_argument( rParam.pTypeRef, false, nUsedGPR, nUsedSSE );
+ if ( !rParam.bOut && bridges::cpp_uno::shared::isSimpleType( pParamTypeDescr ) ) // value
+ {
+ // Simple types must fit exactly one register on x86_64
+ OSL_ASSERT( bFitsRegisters && ( ( nUsedSSE == 1 && nUsedGPR == 0 ) || ( nUsedSSE == 0 && nUsedGPR == 1 ) ) );
+
+ if ( nUsedSSE == 1 )
+ {
+ if ( nr_fpr < x86_64::MAX_SSE_REGS )
+ {
+ pCppArgs[nPos] = pUnoArgs[nPos] = fpreg++;
+ nr_fpr++;
+ }
+ else
+ pCppArgs[nPos] = pUnoArgs[nPos] = ovrflw++;
+ }
+ else if ( nUsedGPR == 1 )
+ {
+ if ( nr_gpr < x86_64::MAX_GPR_REGS )
+ {
+ pCppArgs[nPos] = pUnoArgs[nPos] = gpreg++;
+ nr_gpr++;
+ }
+ else
+ pCppArgs[nPos] = pUnoArgs[nPos] = ovrflw++;
+ }
+
+ // no longer needed
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ else // struct <= 16 bytes || ptr to complex value || ref
+ {
+ void *pCppStack;
+ char pTmpStruct[16];
+
+ if ( bFitsRegisters && !rParam.bOut &&
+ ( pParamTypeDescr->eTypeClass == typelib_TypeClass_STRUCT ||
+ pParamTypeDescr->eTypeClass == typelib_TypeClass_EXCEPTION ) )
+ {
+ if ( ( nr_gpr + nUsedGPR <= x86_64::MAX_GPR_REGS ) && ( nr_fpr + nUsedSSE <= x86_64::MAX_SSE_REGS ) )
+ {
+ x86_64::fill_struct( rParam.pTypeRef, gpreg, fpreg, pTmpStruct );
+#if OSL_DEBUG_LEVEL > 1
+ fprintf( stderr, "nUsedGPR == %d, nUsedSSE == %d, pTmpStruct[0] == 0x%x, pTmpStruct[1] == 0x%x, **gpreg == 0x%lx\n",
+ nUsedGPR, nUsedSSE, pTmpStruct[0], pTmpStruct[1], *(sal_uInt64*)*gpreg );
+#endif
+
+ pCppArgs[nPos] = pCppStack = reinterpret_cast<void *>( pTmpStruct );
+ gpreg += nUsedGPR;
+ fpreg += nUsedSSE;
+ }
+ else
+ pCppArgs[nPos] = pCppStack = *ovrflw++;
+ }
+ else if ( nr_gpr < x86_64::MAX_GPR_REGS )
+ {
+ pCppArgs[nPos] = pCppStack = *gpreg++;
+ nr_gpr++;
+ }
+ else
+ pCppArgs[nPos] = pCppStack = *ovrflw++;
+
+ if (! rParam.bIn) // is pure out
+ {
+ // uno out is unconstructed mem!
+ pUnoArgs[nPos] = alloca( pParamTypeDescr->nSize );
+ pTempIndizes[nTempIndizes] = nPos;
+ // will be released at reconversion
+ ppTempParamTypeDescr[nTempIndizes++] = pParamTypeDescr;
+ }
+ else if ( bridges::cpp_uno::shared::relatesToInterfaceType( pParamTypeDescr ) ) // is in/inout
+ {
+ uno_copyAndConvertData( pUnoArgs[nPos] = alloca( pParamTypeDescr->nSize ),
+ pCppStack, pParamTypeDescr,
+ pThis->getBridge()->getCpp2Uno() );
+ pTempIndizes[nTempIndizes] = nPos; // has to be reconverted
+ // will be released at reconversion
+ ppTempParamTypeDescr[nTempIndizes++] = pParamTypeDescr;
+ }
+ else // direct way
+ {
+ pUnoArgs[nPos] = pCppStack;
+ // no longer needed
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ }
+ }
+
+ // ExceptionHolder
+ uno_Any aUnoExc; // Any will be constructed by callee
+ uno_Any * pUnoExc = &aUnoExc;
+
+ // invoke uno dispatch call
+ (*pThis->getUnoI()->pDispatcher)( pThis->getUnoI(), pMemberTypeDescr, pUnoReturn, pUnoArgs, &pUnoExc );
+
+ // in case an exception occured...
+ if ( pUnoExc )
+ {
+ // destruct temporary in/inout params
+ for ( ; nTempIndizes--; )
+ {
+ sal_Int32 nIndex = pTempIndizes[nTempIndizes];
+
+ if (pParams[nIndex].bIn) // is in/inout => was constructed
+ uno_destructData( pUnoArgs[nIndex], ppTempParamTypeDescr[nTempIndizes], 0 );
+ TYPELIB_DANGER_RELEASE( ppTempParamTypeDescr[nTempIndizes] );
+ }
+ if (pReturnTypeDescr)
+ TYPELIB_DANGER_RELEASE( pReturnTypeDescr );
+
+ CPPU_CURRENT_NAMESPACE::raiseException( &aUnoExc, pThis->getBridge()->getUno2Cpp() ); // has to destruct the any
+ // is here for dummy
+ return typelib_TypeClass_VOID;
+ }
+ else // else no exception occured...
+ {
+ // temporary params
+ for ( ; nTempIndizes--; )
+ {
+ sal_Int32 nIndex = pTempIndizes[nTempIndizes];
+ typelib_TypeDescription * pParamTypeDescr = ppTempParamTypeDescr[nTempIndizes];
+
+ if ( pParams[nIndex].bOut ) // inout/out
+ {
+ // convert and assign
+ uno_destructData( pCppArgs[nIndex], pParamTypeDescr, cpp_release );
+ uno_copyAndConvertData( pCppArgs[nIndex], pUnoArgs[nIndex], pParamTypeDescr,
+ pThis->getBridge()->getUno2Cpp() );
+ }
+ // destroy temp uno param
+ uno_destructData( pUnoArgs[nIndex], pParamTypeDescr, 0 );
+
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ // return
+ if ( pCppReturn ) // has complex return
+ {
+ if ( pUnoReturn != pCppReturn ) // needs reconversion
+ {
+ uno_copyAndConvertData( pCppReturn, pUnoReturn, pReturnTypeDescr,
+ pThis->getBridge()->getUno2Cpp() );
+ // destroy temp uno return
+ uno_destructData( pUnoReturn, pReturnTypeDescr, 0 );
+ }
+ // complex return ptr is set to return reg
+ *(void **)pRegisterReturn = pCppReturn;
+ }
+ if ( pReturnTypeDescr )
+ {
+ typelib_TypeClass eRet = (typelib_TypeClass)pReturnTypeDescr->eTypeClass;
+ TYPELIB_DANGER_RELEASE( pReturnTypeDescr );
+ return eRet;
+ }
+ else
+ return typelib_TypeClass_VOID;
+ }
+}
+
+
+//==================================================================================================
+extern "C" typelib_TypeClass cpp_vtable_call(
+ sal_Int32 nFunctionIndex, sal_Int32 nVtableOffset,
+ void ** gpreg, void ** fpreg, void ** ovrflw,
+ sal_uInt64 * pRegisterReturn /* space for register return */ )
+{
+ // gpreg: [ret *], this, [other gpr params]
+ // fpreg: [fpr params]
+ // ovrflw: [gpr or fpr params (properly aligned)]
+ void * pThis;
+ if ( nFunctionIndex & 0x80000000 )
+ {
+ nFunctionIndex &= 0x7fffffff;
+ pThis = gpreg[1];
+ }
+ else
+ {
+ pThis = gpreg[0];
+ }
+ pThis = static_cast<char *>( pThis ) - nVtableOffset;
+
+ bridges::cpp_uno::shared::CppInterfaceProxy * pCppI =
+ bridges::cpp_uno::shared::CppInterfaceProxy::castInterfaceToProxy( pThis );
+
+ typelib_InterfaceTypeDescription * pTypeDescr = pCppI->getTypeDescr();
+
+ OSL_ENSURE( nFunctionIndex < pTypeDescr->nMapFunctionIndexToMemberIndex, "### illegal vtable index!\n" );
+ if ( nFunctionIndex >= pTypeDescr->nMapFunctionIndexToMemberIndex )
+ {
+ throw RuntimeException( OUString::createFromAscii("illegal vtable index!"),
+ reinterpret_cast<XInterface *>( pCppI ) );
+ }
+
+ // determine called method
+ sal_Int32 nMemberPos = pTypeDescr->pMapFunctionIndexToMemberIndex[nFunctionIndex];
+ OSL_ENSURE( nMemberPos < pTypeDescr->nAllMembers, "### illegal member index!\n" );
+
+ TypeDescription aMemberDescr( pTypeDescr->ppAllMembers[nMemberPos] );
+
+ typelib_TypeClass eRet;
+ switch ( aMemberDescr.get()->eTypeClass )
+ {
+ case typelib_TypeClass_INTERFACE_ATTRIBUTE:
+ {
+ typelib_TypeDescriptionReference *pAttrTypeRef =
+ reinterpret_cast<typelib_InterfaceAttributeTypeDescription *>( aMemberDescr.get() )->pAttributeTypeRef;
+
+ if ( pTypeDescr->pMapMemberIndexToFunctionIndex[nMemberPos] == nFunctionIndex )
+ {
+ // is GET method
+ eRet = cpp2uno_call( pCppI, aMemberDescr.get(), pAttrTypeRef,
+ 0, 0, // no params
+ gpreg, fpreg, ovrflw, pRegisterReturn );
+ }
+ else
+ {
+ // is SET method
+ typelib_MethodParameter aParam;
+ aParam.pTypeRef = pAttrTypeRef;
+ aParam.bIn = sal_True;
+ aParam.bOut = sal_False;
+
+ eRet = cpp2uno_call( pCppI, aMemberDescr.get(),
+ 0, // indicates void return
+ 1, &aParam,
+ gpreg, fpreg, ovrflw, pRegisterReturn );
+ }
+ break;
+ }
+ case typelib_TypeClass_INTERFACE_METHOD:
+ {
+ // is METHOD
+ switch ( nFunctionIndex )
+ {
+ case 1: // acquire()
+ pCppI->acquireProxy(); // non virtual call!
+ eRet = typelib_TypeClass_VOID;
+ break;
+ case 2: // release()
+ pCppI->releaseProxy(); // non virtual call!
+ eRet = typelib_TypeClass_VOID;
+ break;
+ case 0: // queryInterface() opt
+ {
+ typelib_TypeDescription * pTD = 0;
+ TYPELIB_DANGER_GET( &pTD, reinterpret_cast<Type *>( gpreg[2] )->getTypeLibType() );
+ if ( pTD )
+ {
+ XInterface * pInterface = 0;
+ (*pCppI->getBridge()->getCppEnv()->getRegisteredInterface)
+ ( pCppI->getBridge()->getCppEnv(),
+ (void **)&pInterface,
+ pCppI->getOid().pData,
+ reinterpret_cast<typelib_InterfaceTypeDescription *>( pTD ) );
+
+ if ( pInterface )
+ {
+ ::uno_any_construct( reinterpret_cast<uno_Any *>( gpreg[0] ),
+ &pInterface, pTD, cpp_acquire );
+
+ pInterface->release();
+ TYPELIB_DANGER_RELEASE( pTD );
+
+ reinterpret_cast<void **>( pRegisterReturn )[0] = gpreg[0];
+ eRet = typelib_TypeClass_ANY;
+ break;
+ }
+ TYPELIB_DANGER_RELEASE( pTD );
+ }
+ } // else perform queryInterface()
+ default:
+ {
+ typelib_InterfaceMethodTypeDescription *pMethodTD =
+ reinterpret_cast<typelib_InterfaceMethodTypeDescription *>( aMemberDescr.get() );
+
+ eRet = cpp2uno_call( pCppI, aMemberDescr.get(),
+ pMethodTD->pReturnTypeRef,
+ pMethodTD->nParams,
+ pMethodTD->pParams,
+ gpreg, fpreg, ovrflw, pRegisterReturn );
+ }
+ }
+ break;
+ }
+ default:
+ {
+ throw RuntimeException( OUString::createFromAscii("no member description found!"),
+ reinterpret_cast<XInterface *>( pCppI ) );
+ // is here for dummy
+ eRet = typelib_TypeClass_VOID;
+ }
+ }
+
+ return eRet;
+}
+
+//==================================================================================================
+extern "C" void privateSnippetExecutor( ... );
+
+const int codeSnippetSize = 24;
+
+// Generate a trampoline that redirects method calls to
+// privateSnippetExecutor().
+//
+// privateSnippetExecutor() saves all the registers that are used for
+// parameter passing on x86_64, and calls the cpp_vtable_call().
+// When it returns, privateSnippetExecutor() sets the return value.
+//
+// Note: The code snippet we build here must not create a stack frame,
+// otherwise the UNO exceptions stop working thanks to non-existing
+// unwinding info.
+unsigned char * codeSnippet( unsigned char * code,
+ sal_Int32 nFunctionIndex, sal_Int32 nVtableOffset,
+ bool bHasHiddenParam ) SAL_THROW( () )
+{
+ sal_uInt64 nOffsetAndIndex = ( ( (sal_uInt64) nVtableOffset ) << 32 ) | ( (sal_uInt64) nFunctionIndex );
+
+ if ( bHasHiddenParam )
+ nOffsetAndIndex |= 0x80000000;
+
+ // movq $<nOffsetAndIndex>, %r10
+ *reinterpret_cast<sal_uInt16 *>( code ) = 0xba49;
+ *reinterpret_cast<sal_uInt64 *>( code + 2 ) = nOffsetAndIndex;
+
+ // movq $<address of the privateSnippetExecutor>, %r11
+ *reinterpret_cast<sal_uInt16 *>( code + 10 ) = 0xbb49;
+ *reinterpret_cast<sal_uInt64 *>( code + 12 ) = reinterpret_cast<sal_uInt64>( privateSnippetExecutor );
+
+ // jmpq *%r11
+ *reinterpret_cast<sal_uInt32 *>( code + 20 ) = 0x00e3ff49;
+
+ return code + codeSnippetSize;
+}
+
+//==================================================================================================
+struct bridges::cpp_uno::shared::VtableFactory::Slot { void * fn; };
+
+bridges::cpp_uno::shared::VtableFactory::Slot *
+bridges::cpp_uno::shared::VtableFactory::mapBlockToVtable(void * block)
+{
+ return static_cast< Slot * >(block) + 2;
+}
+
+//==================================================================================================
+sal_Size bridges::cpp_uno::shared::VtableFactory::getBlockSize(
+ sal_Int32 slotCount)
+{
+ return (slotCount + 2) * sizeof (Slot) + slotCount * codeSnippetSize;
+}
+
+//==================================================================================================
+bridges::cpp_uno::shared::VtableFactory::Slot *
+bridges::cpp_uno::shared::VtableFactory::initializeBlock(
+ void * block, sal_Int32 slotCount)
+{
+ Slot * slots = mapBlockToVtable(block);
+ slots[-2].fn = 0;
+ slots[-1].fn = 0;
+ return slots + slotCount;
+}
+
+//==================================================================================================
+
+unsigned char * bridges::cpp_uno::shared::VtableFactory::addLocalFunctions(
+ Slot ** slots, unsigned char * code,
+ typelib_InterfaceTypeDescription const * type, sal_Int32 nFunctionOffset,
+ sal_Int32 functionCount, sal_Int32 nVtableOffset )
+{
+ (*slots) -= functionCount;
+ Slot * s = *slots;
+
+ for ( sal_Int32 nPos = 0; nPos < type->nMembers; ++nPos )
+ {
+ typelib_TypeDescription * pTD = 0;
+
+ TYPELIB_DANGER_GET( &pTD, type->ppMembers[ nPos ] );
+ OSL_ASSERT( pTD );
+
+ if ( typelib_TypeClass_INTERFACE_ATTRIBUTE == pTD->eTypeClass )
+ {
+ typelib_InterfaceAttributeTypeDescription *pAttrTD =
+ reinterpret_cast<typelib_InterfaceAttributeTypeDescription *>( pTD );
+
+ // get method
+ (s++)->fn = code;
+ code = codeSnippet( code, nFunctionOffset++, nVtableOffset,
+ x86_64::return_in_hidden_param( pAttrTD->pAttributeTypeRef ) );
+
+ if ( ! pAttrTD->bReadOnly )
+ {
+ // set method
+ (s++)->fn = code;
+ code = codeSnippet( code, nFunctionOffset++, nVtableOffset, false );
+ }
+ }
+ else if ( typelib_TypeClass_INTERFACE_METHOD == pTD->eTypeClass )
+ {
+ typelib_InterfaceMethodTypeDescription *pMethodTD =
+ reinterpret_cast<typelib_InterfaceMethodTypeDescription *>( pTD );
+
+ (s++)->fn = code;
+ code = codeSnippet( code, nFunctionOffset++, nVtableOffset,
+ x86_64::return_in_hidden_param( pMethodTD->pReturnTypeRef ) );
+ }
+ else
+ OSL_ASSERT( false );
+
+ TYPELIB_DANGER_RELEASE( pTD );
+ }
+ return code;
+}
+
+//==================================================================================================
+void bridges::cpp_uno::shared::VtableFactory::flushCode(
+ unsigned char const *, unsigned char const * )
+{
+}
diff --git a/bridges/source/cpp_uno/gcc3_freebsd_x86-64/except.cxx b/bridges/source/cpp_uno/gcc3_freebsd_x86-64/except.cxx
new file mode 100644
index 000000000000..a6ba69855a1c
--- /dev/null
+++ b/bridges/source/cpp_uno/gcc3_freebsd_x86-64/except.cxx
@@ -0,0 +1,338 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_bridges.hxx"
+
+#include <stdio.h>
+#include <dlfcn.h>
+#include <cxxabi.h>
+#include <hash_map>
+#include <sys/param.h>
+
+#include <rtl/strbuf.hxx>
+#include <rtl/ustrbuf.hxx>
+#include <osl/diagnose.h>
+#include <osl/mutex.hxx>
+
+#include <com/sun/star/uno/genfunc.hxx>
+#include "com/sun/star/uno/RuntimeException.hpp"
+#include <typelib/typedescription.hxx>
+#include <uno/any2.h>
+
+#include "share.hxx"
+
+
+using namespace ::std;
+using namespace ::osl;
+using namespace ::rtl;
+using namespace ::com::sun::star::uno;
+using namespace ::__cxxabiv1;
+
+
+namespace CPPU_CURRENT_NAMESPACE
+{
+
+void dummy_can_throw_anything( char const * )
+{
+}
+
+//==================================================================================================
+static OUString toUNOname( char const * p ) SAL_THROW( () )
+{
+#if OSL_DEBUG_LEVEL > 1
+ char const * start = p;
+#endif
+
+ // example: N3com3sun4star4lang24IllegalArgumentExceptionE
+
+ OUStringBuffer buf( 64 );
+ OSL_ASSERT( 'N' == *p );
+ ++p; // skip N
+
+ while ('E' != *p)
+ {
+ // read chars count
+ long n = (*p++ - '0');
+ while ('0' <= *p && '9' >= *p)
+ {
+ n *= 10;
+ n += (*p++ - '0');
+ }
+ buf.appendAscii( p, n );
+ p += n;
+ if ('E' != *p)
+ buf.append( (sal_Unicode)'.' );
+ }
+
+#if OSL_DEBUG_LEVEL > 1
+ OUString ret( buf.makeStringAndClear() );
+ OString c_ret( OUStringToOString( ret, RTL_TEXTENCODING_ASCII_US ) );
+ fprintf( stderr, "> toUNOname(): %s => %s\n", start, c_ret.getStr() );
+ return ret;
+#else
+ return buf.makeStringAndClear();
+#endif
+}
+
+//==================================================================================================
+class RTTI
+{
+ typedef hash_map< OUString, type_info *, OUStringHash > t_rtti_map;
+
+ Mutex m_mutex;
+ t_rtti_map m_rttis;
+ t_rtti_map m_generatedRttis;
+
+ void * m_hApp;
+
+public:
+ RTTI() SAL_THROW( () );
+ ~RTTI() SAL_THROW( () );
+
+ type_info * getRTTI( typelib_CompoundTypeDescription * ) SAL_THROW( () );
+};
+//__________________________________________________________________________________________________
+RTTI::RTTI() SAL_THROW( () )
+#if __FreeBSD_version < 602103
+ : m_hApp( dlopen( 0, RTLD_NOW | RTLD_GLOBAL ) )
+#else
+ : m_hApp( dlopen( 0, RTLD_LAZY ) )
+#endif
+{
+}
+//__________________________________________________________________________________________________
+RTTI::~RTTI() SAL_THROW( () )
+{
+ dlclose( m_hApp );
+}
+
+//__________________________________________________________________________________________________
+type_info * RTTI::getRTTI( typelib_CompoundTypeDescription *pTypeDescr ) SAL_THROW( () )
+{
+ type_info * rtti;
+
+ OUString const & unoName = *(OUString const *)&pTypeDescr->aBase.pTypeName;
+
+ MutexGuard guard( m_mutex );
+ t_rtti_map::const_iterator iFind( m_rttis.find( unoName ) );
+ if (iFind == m_rttis.end())
+ {
+ // RTTI symbol
+ OStringBuffer buf( 64 );
+ buf.append( RTL_CONSTASCII_STRINGPARAM("_ZTIN") );
+ sal_Int32 index = 0;
+ do
+ {
+ OUString token( unoName.getToken( 0, '.', index ) );
+ buf.append( token.getLength() );
+ OString c_token( OUStringToOString( token, RTL_TEXTENCODING_ASCII_US ) );
+ buf.append( c_token );
+ }
+ while (index >= 0);
+ buf.append( 'E' );
+
+ OString symName( buf.makeStringAndClear() );
+#if __FreeBSD_version < 602103 /* #i22253# */
+ rtti = (type_info *)dlsym( RTLD_DEFAULT, symName.getStr() );
+#else
+ rtti = (type_info *)dlsym( m_hApp, symName.getStr() );
+#endif
+
+ if (rtti)
+ {
+ pair< t_rtti_map::iterator, bool > insertion(
+ m_rttis.insert( t_rtti_map::value_type( unoName, rtti ) ) );
+ OSL_ENSURE( insertion.second, "### inserting new rtti failed?!" );
+ }
+ else
+ {
+ // try to lookup the symbol in the generated rtti map
+ t_rtti_map::const_iterator iFind( m_generatedRttis.find( unoName ) );
+ if (iFind == m_generatedRttis.end())
+ {
+ // we must generate it !
+ // symbol and rtti-name is nearly identical,
+ // the symbol is prefixed with _ZTI
+ char const * rttiName = symName.getStr() +4;
+#if OSL_DEBUG_LEVEL > 1
+ fprintf( stderr,"generated rtti for %s\n", rttiName );
+#endif
+ if (pTypeDescr->pBaseTypeDescription)
+ {
+ // ensure availability of base
+ type_info * base_rtti = getRTTI(
+ (typelib_CompoundTypeDescription *)pTypeDescr->pBaseTypeDescription );
+ rtti = new __si_class_type_info(
+ strdup( rttiName ), (__class_type_info *)base_rtti );
+ }
+ else
+ {
+ // this class has no base class
+ rtti = new __class_type_info( strdup( rttiName ) );
+ }
+
+ pair< t_rtti_map::iterator, bool > insertion(
+ m_generatedRttis.insert( t_rtti_map::value_type( unoName, rtti ) ) );
+ OSL_ENSURE( insertion.second, "### inserting new generated rtti failed?!" );
+ }
+ else // taking already generated rtti
+ {
+ rtti = iFind->second;
+ }
+ }
+ }
+ else
+ {
+ rtti = iFind->second;
+ }
+
+ return rtti;
+}
+
+//--------------------------------------------------------------------------------------------------
+static void deleteException( void * pExc )
+{
+ __cxa_exception const * header = ((__cxa_exception const *)pExc - 1);
+ typelib_TypeDescription * pTD = 0;
+ OUString unoName( toUNOname( header->exceptionType->name() ) );
+ ::typelib_typedescription_getByName( &pTD, unoName.pData );
+ OSL_ENSURE( pTD, "### unknown exception type! leaving out destruction => leaking!!!" );
+ if (pTD)
+ {
+ ::uno_destructData( pExc, pTD, cpp_release );
+ ::typelib_typedescription_release( pTD );
+ }
+}
+
+//==================================================================================================
+void raiseException( uno_Any * pUnoExc, uno_Mapping * pUno2Cpp )
+{
+#if OSL_DEBUG_LEVEL > 1
+ OString cstr(
+ OUStringToOString(
+ *reinterpret_cast< OUString const * >( &pUnoExc->pType->pTypeName ),
+ RTL_TEXTENCODING_ASCII_US ) );
+ fprintf( stderr, "> uno exception occured: %s\n", cstr.getStr() );
+#endif
+ void * pCppExc;
+ type_info * rtti;
+
+ {
+ // construct cpp exception object
+ typelib_TypeDescription * pTypeDescr = 0;
+ TYPELIB_DANGER_GET( &pTypeDescr, pUnoExc->pType );
+ OSL_ASSERT( pTypeDescr );
+ if (! pTypeDescr)
+ {
+ throw RuntimeException(
+ OUString( RTL_CONSTASCII_USTRINGPARAM("cannot get typedescription for type ") ) +
+ *reinterpret_cast< OUString const * >( &pUnoExc->pType->pTypeName ),
+ Reference< XInterface >() );
+ }
+
+ pCppExc = __cxa_allocate_exception( pTypeDescr->nSize );
+ ::uno_copyAndConvertData( pCppExc, pUnoExc->pData, pTypeDescr, pUno2Cpp );
+
+ // destruct uno exception
+ ::uno_any_destruct( pUnoExc, 0 );
+ // avoiding locked counts
+ static RTTI * s_rtti = 0;
+ if (! s_rtti)
+ {
+ MutexGuard guard( Mutex::getGlobalMutex() );
+ if (! s_rtti)
+ {
+#ifdef LEAK_STATIC_DATA
+ s_rtti = new RTTI();
+#else
+ static RTTI rtti_data;
+ s_rtti = &rtti_data;
+#endif
+ }
+ }
+ rtti = (type_info *)s_rtti->getRTTI( (typelib_CompoundTypeDescription *) pTypeDescr );
+ TYPELIB_DANGER_RELEASE( pTypeDescr );
+ OSL_ENSURE( rtti, "### no rtti for throwing exception!" );
+ if (! rtti)
+ {
+ throw RuntimeException(
+ OUString( RTL_CONSTASCII_USTRINGPARAM("no rtti for type ") ) +
+ *reinterpret_cast< OUString const * >( &pUnoExc->pType->pTypeName ),
+ Reference< XInterface >() );
+ }
+ }
+
+ __cxa_throw( pCppExc, rtti, deleteException );
+}
+
+//==================================================================================================
+void fillUnoException( __cxa_exception * header, uno_Any * pUnoExc, uno_Mapping * pCpp2Uno )
+{
+ if (! header)
+ {
+ RuntimeException aRE(
+ OUString( RTL_CONSTASCII_USTRINGPARAM("no exception header!") ),
+ Reference< XInterface >() );
+ Type const & rType = ::getCppuType( &aRE );
+ uno_type_any_constructAndConvert( pUnoExc, &aRE, rType.getTypeLibType(), pCpp2Uno );
+#if OSL_DEBUG_LEVEL > 0
+ OString cstr( OUStringToOString( aRE.Message, RTL_TEXTENCODING_ASCII_US ) );
+ OSL_ENSURE( 0, cstr.getStr() );
+#endif
+ return;
+ }
+
+ typelib_TypeDescription * pExcTypeDescr = 0;
+ OUString unoName( toUNOname( header->exceptionType->name() ) );
+#if OSL_DEBUG_LEVEL > 1
+ OString cstr_unoName( OUStringToOString( unoName, RTL_TEXTENCODING_ASCII_US ) );
+ fprintf( stderr, "> c++ exception occured: %s\n", cstr_unoName.getStr() );
+#endif
+ typelib_typedescription_getByName( &pExcTypeDescr, unoName.pData );
+ if (0 == pExcTypeDescr)
+ {
+ RuntimeException aRE(
+ OUString( RTL_CONSTASCII_USTRINGPARAM("exception type not found: ") ) + unoName,
+ Reference< XInterface >() );
+ Type const & rType = ::getCppuType( &aRE );
+ uno_type_any_constructAndConvert( pUnoExc, &aRE, rType.getTypeLibType(), pCpp2Uno );
+#if OSL_DEBUG_LEVEL > 0
+ OString cstr( OUStringToOString( aRE.Message, RTL_TEXTENCODING_ASCII_US ) );
+ OSL_ENSURE( 0, cstr.getStr() );
+#endif
+ }
+ else
+ {
+ // construct uno exception any
+ uno_any_constructAndConvert( pUnoExc, header->adjustedPtr, pExcTypeDescr, pCpp2Uno );
+ typelib_typedescription_release( pExcTypeDescr );
+ }
+}
+
+}
+
diff --git a/bridges/source/cpp_uno/gcc3_freebsd_x86-64/makefile.mk b/bridges/source/cpp_uno/gcc3_freebsd_x86-64/makefile.mk
new file mode 100644
index 000000000000..9c37d6cd8227
--- /dev/null
+++ b/bridges/source/cpp_uno/gcc3_freebsd_x86-64/makefile.mk
@@ -0,0 +1,80 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..$/..$/..
+
+PRJNAME=bridges
+TARGET=gcc3_uno
+LIBTARGET=no
+ENABLE_EXCEPTIONS=TRUE
+
+# --- Settings -----------------------------------------------------
+
+.INCLUDE : settings.mk
+
+# --- Files --------------------------------------------------------
+
+.IF "$(COM)$(OS)$(CPU)$(COMNAME)" == "GCCFREEBSDXgcc3"
+
+.IF "$(cppu_no_leak)" == ""
+CFLAGS += -DLEAK_STATIC_DATA
+.ENDIF
+
+# In case someone enabled the non-standard -fomit-frame-pointer which does not
+# work with the .cxx sources in this directory:
+CFLAGSCXX += -fno-omit-frame-pointer
+
+SLOFILES= \
+ $(SLO)$/abi.obj \
+ $(SLO)$/except.obj \
+ $(SLO)$/cpp2uno.obj \
+ $(SLO)$/uno2cpp.obj \
+ $(SLO)$/call.obj
+
+SHL1TARGET= $(TARGET)
+
+SHL1DEF=$(MISC)$/$(SHL1TARGET).def
+SHL1IMPLIB=i$(TARGET)
+SHL1VERSIONMAP=..$/..$/bridge_exports.map
+SHL1RPATH=URELIB
+
+SHL1OBJS = $(SLOFILES)
+SHL1LIBS = $(SLB)$/cpp_uno_shared.lib
+
+SHL1STDLIBS= \
+ $(CPPULIB) \
+ $(SALLIB)
+
+.ENDIF
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : target.mk
+
+$(SLO)$/%.obj: %.s
+ $(CC) -c -o $(SLO)$/$(@:b).o $<
+ touch $@
diff --git a/bridges/source/cpp_uno/gcc3_freebsd_x86-64/share.hxx b/bridges/source/cpp_uno/gcc3_freebsd_x86-64/share.hxx
new file mode 100644
index 000000000000..930094738b20
--- /dev/null
+++ b/bridges/source/cpp_uno/gcc3_freebsd_x86-64/share.hxx
@@ -0,0 +1,90 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "uno/mapping.h"
+
+#include <typeinfo>
+#include <exception>
+#include <cstddef>
+
+namespace CPPU_CURRENT_NAMESPACE
+{
+
+void dummy_can_throw_anything( char const * );
+
+// ----- following decl from libstdc++-v3/libsupc++/unwind-cxx.h and unwind.h
+
+struct _Unwind_Exception
+{
+ unsigned exception_class __attribute__((__mode__(__DI__)));
+ void * exception_cleanup;
+ unsigned private_1 __attribute__((__mode__(__word__)));
+ unsigned private_2 __attribute__((__mode__(__word__)));
+} __attribute__((__aligned__));
+
+struct __cxa_exception
+{
+ ::std::type_info *exceptionType;
+ void (*exceptionDestructor)(void *);
+
+ ::std::unexpected_handler unexpectedHandler;
+ ::std::terminate_handler terminateHandler;
+
+ __cxa_exception *nextException;
+
+ int handlerCount;
+
+ int handlerSwitchValue;
+ const unsigned char *actionRecord;
+ const unsigned char *languageSpecificData;
+ void *catchTemp;
+ void *adjustedPtr;
+
+ _Unwind_Exception unwindHeader;
+};
+
+extern "C" void *__cxa_allocate_exception(
+ std::size_t thrown_size ) throw();
+extern "C" void __cxa_throw (
+ void *thrown_exception, std::type_info *tinfo, void (*dest) (void *) ) __attribute__((noreturn));
+
+struct __cxa_eh_globals
+{
+ __cxa_exception *caughtExceptions;
+ unsigned int uncaughtExceptions;
+};
+extern "C" __cxa_eh_globals *__cxa_get_globals () throw();
+
+// -----
+
+//==================================================================================================
+void raiseException(
+ uno_Any * pUnoExc, uno_Mapping * pUno2Cpp );
+//==================================================================================================
+void fillUnoException(
+ __cxa_exception * header, uno_Any *, uno_Mapping * pCpp2Uno );
+}
diff --git a/bridges/source/cpp_uno/gcc3_freebsd_x86-64/uno2cpp.cxx b/bridges/source/cpp_uno/gcc3_freebsd_x86-64/uno2cpp.cxx
new file mode 100644
index 000000000000..6da45f9fb8ce
--- /dev/null
+++ b/bridges/source/cpp_uno/gcc3_freebsd_x86-64/uno2cpp.cxx
@@ -0,0 +1,558 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_bridges.hxx"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <rtl/alloc.h>
+
+#include <com/sun/star/uno/genfunc.hxx>
+#include "com/sun/star/uno/RuntimeException.hpp"
+#include <uno/data.h>
+
+#include <bridges/cpp_uno/shared/bridge.hxx>
+#include <bridges/cpp_uno/shared/types.hxx>
+#include "bridges/cpp_uno/shared/unointerfaceproxy.hxx"
+#include "bridges/cpp_uno/shared/vtables.hxx"
+
+#include "abi.hxx"
+#include "share.hxx"
+
+using namespace ::rtl;
+using namespace ::com::sun::star::uno;
+
+//==================================================================================================
+static void callVirtualMethod(void * pThis, sal_uInt32 nVtableIndex,
+ void * pRegisterReturn, typelib_TypeDescription * pReturnTypeDescr, bool bSimpleReturn,
+ sal_uInt64 *pStack, sal_uInt32 nStack,
+ sal_uInt64 *pGPR, sal_uInt32 nGPR,
+ double *pFPR, sal_uInt32 nFPR) __attribute__((noinline));
+
+static void callVirtualMethod(void * pThis, sal_uInt32 nVtableIndex,
+ void * pRegisterReturn, typelib_TypeDescription * pReturnTypeDescr, bool bSimpleReturn,
+ sal_uInt64 *pStack, sal_uInt32 nStack,
+ sal_uInt64 *pGPR, sal_uInt32 nGPR,
+ double *pFPR, sal_uInt32 nFPR)
+{
+#if OSL_DEBUG_LEVEL > 1
+ // Let's figure out what is really going on here
+ {
+ fprintf( stderr, "= callVirtualMethod() =\nGPR's (%d): ", nGPR );
+ for ( int i = 0; i < nGPR; ++i )
+ fprintf( stderr, "0x%lx, ", pGPR[i] );
+ fprintf( stderr, "\nFPR's (%d): ", nFPR );
+ for ( int i = 0; i < nFPR; ++i )
+ fprintf( stderr, "%f, ", pFPR[i] );
+ fprintf( stderr, "\nStack (%d): ", nStack );
+ for ( int i = 0; i < nStack; ++i )
+ fprintf( stderr, "0x%lx, ", pStack[i] );
+ fprintf( stderr, "\n" );
+ }
+#endif
+
+ // The call instruction within the asm section of callVirtualMethod may throw
+ // exceptions. So that the compiler handles this correctly, it is important
+ // that (a) callVirtualMethod might call dummy_can_throw_anything (although this
+ // never happens at runtime), which in turn can throw exceptions, and (b)
+ // callVirtualMethod is not inlined at its call site (so that any exceptions are
+ // caught which are thrown from the instruction calling callVirtualMethod):
+ if ( !pThis )
+ CPPU_CURRENT_NAMESPACE::dummy_can_throw_anything( "xxx" ); // address something
+
+ // Should not happen, but...
+ if ( nFPR > x86_64::MAX_SSE_REGS )
+ nFPR = x86_64::MAX_SSE_REGS;
+ if ( nGPR > x86_64::MAX_GPR_REGS )
+ nGPR = x86_64::MAX_GPR_REGS;
+
+ // Get pointer to method
+ sal_uInt64 pMethod = *((sal_uInt64 *)pThis);
+ pMethod += 8 * nVtableIndex;
+ pMethod = *((sal_uInt64 *)pMethod);
+
+ // Load parameters to stack, if necessary
+ if ( nStack )
+ {
+ // 16-bytes aligned
+ sal_uInt32 nStackBytes = ( ( nStack + 1 ) >> 1 ) * 16;
+ sal_uInt64 *pCallStack = (sal_uInt64 *) __builtin_alloca( nStackBytes );
+ memcpy( pCallStack, pStack, nStackBytes );
+ }
+
+ // Return values
+ sal_uInt64 rax;
+ sal_uInt64 rdx;
+ double xmm0;
+
+ asm volatile (
+
+ // Fill the xmm registers
+ "movq %2, %%rax\n\t"
+
+ "movsd (%%rax), %%xmm0\n\t"
+ "movsd 8(%%rax), %%xmm1\n\t"
+ "movsd 16(%%rax), %%xmm2\n\t"
+ "movsd 24(%%rax), %%xmm3\n\t"
+ "movsd 32(%%rax), %%xmm4\n\t"
+ "movsd 40(%%rax), %%xmm5\n\t"
+ "movsd 48(%%rax), %%xmm6\n\t"
+ "movsd 56(%%rax), %%xmm7\n\t"
+
+ // Fill the general purpose registers
+ "movq %1, %%rax\n\t"
+
+ "movq (%%rax), %%rdi\n\t"
+ "movq 8(%%rax), %%rsi\n\t"
+ "movq 16(%%rax), %%rdx\n\t"
+ "movq 24(%%rax), %%rcx\n\t"
+ "movq 32(%%rax), %%r8\n\t"
+ "movq 40(%%rax), %%r9\n\t"
+
+ // Perform the call
+ "movq %0, %%r11\n\t"
+ "movq %3, %%rax\n\t"
+ "call *%%r11\n\t"
+
+ // Fill the return values
+ "movq %%rax, %4\n\t"
+ "movq %%rdx, %5\n\t"
+ "movsd %%xmm0, %6\n\t"
+ :
+ : "m" ( pMethod ), "m" ( pGPR ), "m" ( pFPR ), "m" ( nFPR ),
+ "m" ( rax ), "m" ( rdx ), "m" ( xmm0 )
+ : "rax", "rdi", "rsi", "rdx", "rcx", "r8", "r9", "r11"
+ );
+
+ switch (pReturnTypeDescr->eTypeClass)
+ {
+ case typelib_TypeClass_HYPER:
+ case typelib_TypeClass_UNSIGNED_HYPER:
+ *reinterpret_cast<sal_uInt64 *>( pRegisterReturn ) = rax;
+ break;
+ case typelib_TypeClass_LONG:
+ case typelib_TypeClass_UNSIGNED_LONG:
+ case typelib_TypeClass_ENUM:
+ *reinterpret_cast<sal_uInt32 *>( pRegisterReturn ) = *reinterpret_cast<sal_uInt32*>( &rax );
+ break;
+ case typelib_TypeClass_CHAR:
+ case typelib_TypeClass_SHORT:
+ case typelib_TypeClass_UNSIGNED_SHORT:
+ *reinterpret_cast<sal_uInt16 *>( pRegisterReturn ) = *reinterpret_cast<sal_uInt16*>( &rax );
+ break;
+ case typelib_TypeClass_BOOLEAN:
+ case typelib_TypeClass_BYTE:
+ *reinterpret_cast<sal_uInt8 *>( pRegisterReturn ) = *reinterpret_cast<sal_uInt8*>( &rax );
+ break;
+ case typelib_TypeClass_FLOAT:
+ case typelib_TypeClass_DOUBLE:
+ *reinterpret_cast<double *>( pRegisterReturn ) = xmm0;
+ break;
+ default:
+ {
+ sal_Int32 const nRetSize = pReturnTypeDescr->nSize;
+ if (bSimpleReturn && nRetSize <= 16 && nRetSize > 0)
+ {
+ if (nRetSize > 8)
+ static_cast<sal_uInt64 *>(pRegisterReturn)[1] = rdx;
+ static_cast<sal_uInt64 *>(pRegisterReturn)[0] = rax;
+ }
+ break;
+ }
+ }
+}
+
+//==================================================================================================
+
+// Macros for easier insertion of values to registers or stack
+// pSV - pointer to the source
+// nr - order of the value [will be increased if stored to register]
+// pFPR, pGPR - pointer to the registers
+// pDS - pointer to the stack [will be increased if stored here]
+
+// The value in %xmm register is already prepared to be retrieved as a float,
+// thus we treat float and double the same
+#define INSERT_FLOAT_DOUBLE( pSV, nr, pFPR, pDS ) \
+ if ( nr < x86_64::MAX_SSE_REGS ) \
+ pFPR[nr++] = *reinterpret_cast<double *>( pSV ); \
+ else \
+ *pDS++ = *reinterpret_cast<sal_uInt64 *>( pSV ); // verbatim!
+
+#define INSERT_INT64( pSV, nr, pGPR, pDS ) \
+ if ( nr < x86_64::MAX_GPR_REGS ) \
+ pGPR[nr++] = *reinterpret_cast<sal_uInt64 *>( pSV ); \
+ else \
+ *pDS++ = *reinterpret_cast<sal_uInt64 *>( pSV );
+
+#define INSERT_INT32( pSV, nr, pGPR, pDS ) \
+ if ( nr < x86_64::MAX_GPR_REGS ) \
+ pGPR[nr++] = *reinterpret_cast<sal_uInt32 *>( pSV ); \
+ else \
+ *pDS++ = *reinterpret_cast<sal_uInt32 *>( pSV );
+
+#define INSERT_INT16( pSV, nr, pGPR, pDS ) \
+ if ( nr < x86_64::MAX_GPR_REGS ) \
+ pGPR[nr++] = *reinterpret_cast<sal_uInt16 *>( pSV ); \
+ else \
+ *pDS++ = *reinterpret_cast<sal_uInt16 *>( pSV );
+
+#define INSERT_INT8( pSV, nr, pGPR, pDS ) \
+ if ( nr < x86_64::MAX_GPR_REGS ) \
+ pGPR[nr++] = *reinterpret_cast<sal_uInt8 *>( pSV ); \
+ else \
+ *pDS++ = *reinterpret_cast<sal_uInt8 *>( pSV );
+
+//==================================================================================================
+
+static void cpp_call(
+ bridges::cpp_uno::shared::UnoInterfaceProxy * pThis,
+ bridges::cpp_uno::shared::VtableSlot aVtableSlot,
+ typelib_TypeDescriptionReference * pReturnTypeRef,
+ sal_Int32 nParams, typelib_MethodParameter * pParams,
+ void * pUnoReturn, void * pUnoArgs[], uno_Any ** ppUnoExc )
+{
+ // Maxium space for [complex ret ptr], values | ptr ...
+ // (but will be used less - some of the values will be in pGPR and pFPR)
+ sal_uInt64 *pStack = (sal_uInt64 *)__builtin_alloca( (nParams + 3) * sizeof(sal_uInt64) );
+ sal_uInt64 *pStackStart = pStack;
+
+ sal_uInt64 pGPR[x86_64::MAX_GPR_REGS];
+ sal_uInt32 nGPR = 0;
+
+ double pFPR[x86_64::MAX_SSE_REGS];
+ sal_uInt32 nFPR = 0;
+
+ // Return
+ typelib_TypeDescription * pReturnTypeDescr = 0;
+ TYPELIB_DANGER_GET( &pReturnTypeDescr, pReturnTypeRef );
+ OSL_ENSURE( pReturnTypeDescr, "### expected return type description!" );
+
+ void * pCppReturn = 0; // if != 0 && != pUnoReturn, needs reconversion (see below)
+
+ bool bSimpleReturn = true;
+ if ( pReturnTypeDescr )
+ {
+ if ( x86_64::return_in_hidden_param( pReturnTypeRef ) )
+ bSimpleReturn = false;
+
+ if ( bSimpleReturn )
+ pCppReturn = pUnoReturn; // direct way for simple types
+ else
+ {
+ // complex return via ptr
+ pCppReturn = bridges::cpp_uno::shared::relatesToInterfaceType( pReturnTypeDescr )?
+ __builtin_alloca( pReturnTypeDescr->nSize ) : pUnoReturn;
+ INSERT_INT64( &pCppReturn, nGPR, pGPR, pStack );
+ }
+ }
+
+ // Push "this" pointer
+ void * pAdjustedThisPtr = reinterpret_cast< void ** >( pThis->getCppI() ) + aVtableSlot.offset;
+ INSERT_INT64( &pAdjustedThisPtr, nGPR, pGPR, pStack );
+
+ // Args
+ void ** pCppArgs = (void **)alloca( 3 * sizeof(void *) * nParams );
+ // Indizes of values this have to be converted (interface conversion cpp<=>uno)
+ sal_Int32 * pTempIndizes = (sal_Int32 *)(pCppArgs + nParams);
+ // Type descriptions for reconversions
+ typelib_TypeDescription ** ppTempParamTypeDescr = (typelib_TypeDescription **)(pCppArgs + (2 * nParams));
+
+ sal_Int32 nTempIndizes = 0;
+
+ for ( sal_Int32 nPos = 0; nPos < nParams; ++nPos )
+ {
+ const typelib_MethodParameter & rParam = pParams[nPos];
+ typelib_TypeDescription * pParamTypeDescr = 0;
+ TYPELIB_DANGER_GET( &pParamTypeDescr, rParam.pTypeRef );
+
+ if (!rParam.bOut && bridges::cpp_uno::shared::isSimpleType( pParamTypeDescr ))
+ {
+ uno_copyAndConvertData( pCppArgs[nPos] = alloca( 8 ), pUnoArgs[nPos], pParamTypeDescr,
+ pThis->getBridge()->getUno2Cpp() );
+
+ switch (pParamTypeDescr->eTypeClass)
+ {
+ case typelib_TypeClass_HYPER:
+ case typelib_TypeClass_UNSIGNED_HYPER:
+ INSERT_INT64( pCppArgs[nPos], nGPR, pGPR, pStack );
+ break;
+ case typelib_TypeClass_LONG:
+ case typelib_TypeClass_UNSIGNED_LONG:
+ case typelib_TypeClass_ENUM:
+ INSERT_INT32( pCppArgs[nPos], nGPR, pGPR, pStack );
+ break;
+ case typelib_TypeClass_SHORT:
+ case typelib_TypeClass_CHAR:
+ case typelib_TypeClass_UNSIGNED_SHORT:
+ INSERT_INT16( pCppArgs[nPos], nGPR, pGPR, pStack );
+ break;
+ case typelib_TypeClass_BOOLEAN:
+ case typelib_TypeClass_BYTE:
+ INSERT_INT8( pCppArgs[nPos], nGPR, pGPR, pStack );
+ break;
+ case typelib_TypeClass_FLOAT:
+ case typelib_TypeClass_DOUBLE:
+ INSERT_FLOAT_DOUBLE( pCppArgs[nPos], nFPR, pFPR, pStack );
+ break;
+ }
+
+ // no longer needed
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ else // ptr to complex value | ref
+ {
+ if (! rParam.bIn) // is pure out
+ {
+ // cpp out is constructed mem, uno out is not!
+ uno_constructData(
+ pCppArgs[nPos] = alloca( pParamTypeDescr->nSize ),
+ pParamTypeDescr );
+ pTempIndizes[nTempIndizes] = nPos; // default constructed for cpp call
+ // will be released at reconversion
+ ppTempParamTypeDescr[nTempIndizes++] = pParamTypeDescr;
+ }
+ // is in/inout
+ else if (bridges::cpp_uno::shared::relatesToInterfaceType( pParamTypeDescr ))
+ {
+ uno_copyAndConvertData(
+ pCppArgs[nPos] = alloca( pParamTypeDescr->nSize ),
+ pUnoArgs[nPos], pParamTypeDescr, pThis->getBridge()->getUno2Cpp() );
+
+ pTempIndizes[nTempIndizes] = nPos; // has to be reconverted
+ // will be released at reconversion
+ ppTempParamTypeDescr[nTempIndizes++] = pParamTypeDescr;
+ }
+ else // direct way
+ {
+ pCppArgs[nPos] = pUnoArgs[nPos];
+ // no longer needed
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ INSERT_INT64( &(pCppArgs[nPos]), nGPR, pGPR, pStack );
+ }
+ }
+
+ try
+ {
+ callVirtualMethod(
+ pAdjustedThisPtr, aVtableSlot.index,
+ pCppReturn, pReturnTypeDescr, bSimpleReturn,
+ pStackStart, ( pStack - pStackStart ),
+ pGPR, nGPR,
+ pFPR, nFPR );
+ // NO exception occured...
+ *ppUnoExc = 0;
+
+ // reconvert temporary params
+ for ( ; nTempIndizes--; )
+ {
+ sal_Int32 nIndex = pTempIndizes[nTempIndizes];
+ typelib_TypeDescription * pParamTypeDescr = ppTempParamTypeDescr[nTempIndizes];
+
+ if (pParams[nIndex].bIn)
+ {
+ if (pParams[nIndex].bOut) // inout
+ {
+ uno_destructData( pUnoArgs[nIndex], pParamTypeDescr, 0 ); // destroy uno value
+ uno_copyAndConvertData( pUnoArgs[nIndex], pCppArgs[nIndex], pParamTypeDescr,
+ pThis->getBridge()->getCpp2Uno() );
+ }
+ }
+ else // pure out
+ {
+ uno_copyAndConvertData( pUnoArgs[nIndex], pCppArgs[nIndex], pParamTypeDescr,
+ pThis->getBridge()->getCpp2Uno() );
+ }
+ // destroy temp cpp param => cpp: every param was constructed
+ uno_destructData( pCppArgs[nIndex], pParamTypeDescr, cpp_release );
+
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ // return value
+ if (pCppReturn && pUnoReturn != pCppReturn)
+ {
+ uno_copyAndConvertData( pUnoReturn, pCppReturn, pReturnTypeDescr,
+ pThis->getBridge()->getCpp2Uno() );
+ uno_destructData( pCppReturn, pReturnTypeDescr, cpp_release );
+ }
+ }
+ catch (...)
+ {
+ // fill uno exception
+ fillUnoException( CPPU_CURRENT_NAMESPACE::__cxa_get_globals()->caughtExceptions, *ppUnoExc, pThis->getBridge()->getCpp2Uno() );
+
+ // temporary params
+ for ( ; nTempIndizes--; )
+ {
+ sal_Int32 nIndex = pTempIndizes[nTempIndizes];
+ // destroy temp cpp param => cpp: every param was constructed
+ uno_destructData( pCppArgs[nIndex], ppTempParamTypeDescr[nTempIndizes], cpp_release );
+ TYPELIB_DANGER_RELEASE( ppTempParamTypeDescr[nTempIndizes] );
+ }
+ // return type
+ if (pReturnTypeDescr)
+ TYPELIB_DANGER_RELEASE( pReturnTypeDescr );
+ }
+}
+
+//==================================================================================================
+
+namespace bridges { namespace cpp_uno { namespace shared {
+
+void unoInterfaceProxyDispatch(
+ uno_Interface * pUnoI, const typelib_TypeDescription * pMemberDescr,
+ void * pReturn, void * pArgs[], uno_Any ** ppException )
+{
+ // is my surrogate
+ bridges::cpp_uno::shared::UnoInterfaceProxy * pThis
+ = static_cast< bridges::cpp_uno::shared::UnoInterfaceProxy * >(pUnoI);
+ typelib_InterfaceTypeDescription * pTypeDescr = pThis->pTypeDescr;
+
+ switch (pMemberDescr->eTypeClass)
+ {
+ case typelib_TypeClass_INTERFACE_ATTRIBUTE:
+ {
+ // determine vtable call index
+ sal_Int32 nMemberPos = ((typelib_InterfaceMemberTypeDescription *)pMemberDescr)->nPosition;
+ OSL_ENSURE( nMemberPos < pTypeDescr->nAllMembers, "### member pos out of range!" );
+
+ VtableSlot aVtableSlot(
+ getVtableSlot(
+ reinterpret_cast<
+ typelib_InterfaceAttributeTypeDescription const * >(
+ pMemberDescr)));
+
+ if (pReturn)
+ {
+ // dependent dispatch
+ cpp_call(
+ pThis, aVtableSlot,
+ ((typelib_InterfaceAttributeTypeDescription *)pMemberDescr)->pAttributeTypeRef,
+ 0, 0, // no params
+ pReturn, pArgs, ppException );
+ }
+ else
+ {
+ // is SET
+ typelib_MethodParameter aParam;
+ aParam.pTypeRef =
+ ((typelib_InterfaceAttributeTypeDescription *)pMemberDescr)->pAttributeTypeRef;
+ aParam.bIn = sal_True;
+ aParam.bOut = sal_False;
+
+ typelib_TypeDescriptionReference * pReturnTypeRef = 0;
+ OUString aVoidName( RTL_CONSTASCII_USTRINGPARAM("void") );
+ typelib_typedescriptionreference_new(
+ &pReturnTypeRef, typelib_TypeClass_VOID, aVoidName.pData );
+
+ // dependent dispatch
+ aVtableSlot.index += 1; // get, then set method
+ cpp_call(
+ pThis, aVtableSlot, // get, then set method
+ pReturnTypeRef,
+ 1, &aParam,
+ pReturn, pArgs, ppException );
+
+ typelib_typedescriptionreference_release( pReturnTypeRef );
+ }
+
+ break;
+ }
+ case typelib_TypeClass_INTERFACE_METHOD:
+ {
+ // determine vtable call index
+ sal_Int32 nMemberPos = ((typelib_InterfaceMemberTypeDescription *)pMemberDescr)->nPosition;
+ OSL_ENSURE( nMemberPos < pTypeDescr->nAllMembers, "### member pos out of range!" );
+
+ VtableSlot aVtableSlot(
+ getVtableSlot(
+ reinterpret_cast<
+ typelib_InterfaceMethodTypeDescription const * >(
+ pMemberDescr)));
+
+ switch (aVtableSlot.index)
+ {
+ // standard calls
+ case 1: // acquire uno interface
+ (*pUnoI->acquire)( pUnoI );
+ *ppException = 0;
+ break;
+ case 2: // release uno interface
+ (*pUnoI->release)( pUnoI );
+ *ppException = 0;
+ break;
+ case 0: // queryInterface() opt
+ {
+ typelib_TypeDescription * pTD = 0;
+ TYPELIB_DANGER_GET( &pTD, reinterpret_cast< Type * >( pArgs[0] )->getTypeLibType() );
+ if (pTD)
+ {
+ uno_Interface * pInterface = 0;
+ (*pThis->getBridge()->getUnoEnv()->getRegisteredInterface)(
+ pThis->getBridge()->getUnoEnv(),
+ (void **)&pInterface, pThis->oid.pData, (typelib_InterfaceTypeDescription *)pTD );
+
+ if (pInterface)
+ {
+ ::uno_any_construct(
+ reinterpret_cast< uno_Any * >( pReturn ),
+ &pInterface, pTD, 0 );
+ (*pInterface->release)( pInterface );
+ TYPELIB_DANGER_RELEASE( pTD );
+ *ppException = 0;
+ break;
+ }
+ TYPELIB_DANGER_RELEASE( pTD );
+ }
+ } // else perform queryInterface()
+ default:
+ // dependent dispatch
+ cpp_call(
+ pThis, aVtableSlot,
+ ((typelib_InterfaceMethodTypeDescription *)pMemberDescr)->pReturnTypeRef,
+ ((typelib_InterfaceMethodTypeDescription *)pMemberDescr)->nParams,
+ ((typelib_InterfaceMethodTypeDescription *)pMemberDescr)->pParams,
+ pReturn, pArgs, ppException );
+ }
+ break;
+ }
+ default:
+ {
+ ::com::sun::star::uno::RuntimeException aExc(
+ OUString( RTL_CONSTASCII_USTRINGPARAM("illegal member type description!") ),
+ ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >() );
+
+ Type const & rExcType = ::getCppuType( &aExc );
+ // binary identical null reference
+ ::uno_type_any_construct( *ppException, &aExc, rExcType.getTypeLibType(), 0 );
+ }
+ }
+}
+
+} } }
diff --git a/bridges/source/cpp_uno/gcc3_linux_alpha/cpp2uno.cxx b/bridges/source/cpp_uno/gcc3_linux_alpha/cpp2uno.cxx
new file mode 100644
index 000000000000..abc5ce67e4b4
--- /dev/null
+++ b/bridges/source/cpp_uno/gcc3_linux_alpha/cpp2uno.cxx
@@ -0,0 +1,676 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_bridges.hxx"
+
+#include <com/sun/star/uno/genfunc.hxx>
+#include <uno/data.h>
+#include <typelib/typedescription.hxx>
+
+#include "bridges/cpp_uno/shared/bridge.hxx"
+#include "bridges/cpp_uno/shared/cppinterfaceproxy.hxx"
+#include "bridges/cpp_uno/shared/types.hxx"
+#include "bridges/cpp_uno/shared/vtablefactory.hxx"
+
+#include "share.hxx"
+#include <stdio.h>
+
+//Calling Standards:
+// "Calling Standard for Alpha Systems"
+// (Tru64 UNIX Version 5.1 or higher, August 2000)
+//http://www.tru64unix.compaq.com/docs/base_doc/DOCUMENTATION/V51_HTML/ARH9MBTE/TITLE.HTM
+
+using namespace ::com::sun::star::uno;
+
+namespace
+{
+static typelib_TypeClass cpp2uno_call(
+ bridges::cpp_uno::shared::CppInterfaceProxy * pThis,
+ const typelib_TypeDescription * pMemberTypeDescr,
+ typelib_TypeDescriptionReference * pReturnTypeRef, // 0 indicates void return
+ sal_Int32 nParams, typelib_MethodParameter * pParams,
+ void ** gpreg, void ** fpreg, void ** ovrflw,
+ sal_Int64 * pRegisterReturn /* space for register return */ )
+{
+#ifdef CMC_DEBUG
+ fprintf(stderr, "as far as cpp2uno_call\n");
+#endif
+ int nregs = 0; //number of words passed in registers
+
+ // gpreg: [ret *], this, [gpr params]
+ // fpreg: [fpr params]
+ // ovrflw: [gpr or fpr params (properly aligned)]
+
+ // return
+ typelib_TypeDescription * pReturnTypeDescr = 0;
+ if (pReturnTypeRef)
+ TYPELIB_DANGER_GET( &pReturnTypeDescr, pReturnTypeRef );
+
+ void * pUnoReturn = 0;
+ void * pCppReturn = 0; // complex return ptr: if != 0 && != pUnoReturn, reconversion need
+
+ if (pReturnTypeDescr)
+ {
+ if (bridges::cpp_uno::shared::isSimpleType( pReturnTypeDescr ))
+ {
+ pUnoReturn = pRegisterReturn; // direct way for simple types
+ }
+ else // complex return via ptr (pCppReturn)
+ {
+ pCppReturn = *(void **)gpreg;
+ gpreg++;
+ fpreg++;
+ nregs++;
+
+ pUnoReturn = (bridges::cpp_uno::shared::relatesToInterfaceType( pReturnTypeDescr )
+ ? alloca( pReturnTypeDescr->nSize )
+ : pCppReturn); // direct way
+ }
+ }
+ // pop this
+ gpreg++;
+ fpreg++;
+ nregs++;
+
+ // stack space
+ OSL_ENSURE( sizeof(void *) == sizeof(sal_Int64), "### unexpected size!" );
+ // parameters
+ void ** pUnoArgs = (void **)alloca( 4 * sizeof(void *) * nParams );
+ void ** pCppArgs = pUnoArgs + nParams;
+ // indizes of values this have to be converted (interface conversion cpp<=>uno)
+ sal_Int32 * pTempIndizes = (sal_Int32 *)(pUnoArgs + (2 * nParams));
+ // type descriptions for reconversions
+ typelib_TypeDescription ** ppTempParamTypeDescr = (typelib_TypeDescription **)(pUnoArgs + (3 * nParams));
+
+ sal_Int32 nTempIndizes = 0;
+ for ( sal_Int32 nPos = 0; nPos < nParams; ++nPos )
+ {
+ const typelib_MethodParameter & rParam = pParams[nPos];
+ typelib_TypeDescription * pParamTypeDescr = 0;
+ TYPELIB_DANGER_GET( &pParamTypeDescr, rParam.pTypeRef );
+
+#ifdef CMC_DEBUG
+ fprintf(stderr, "arg %d of %d\n", nPos, nParams);
+#endif
+
+ if (!rParam.bOut && bridges::cpp_uno::shared::isSimpleType( pParamTypeDescr )) // value
+ {
+#ifdef CMC_DEBUG
+ fprintf(stderr, "simple type is %d\n", pParamTypeDescr->eTypeClass);
+#endif
+
+ switch (pParamTypeDescr->eTypeClass)
+ {
+ case typelib_TypeClass_FLOAT:
+ case typelib_TypeClass_DOUBLE:
+ if (nregs < axp::MAX_WORDS_IN_REGS)
+ {
+ if (pParamTypeDescr->eTypeClass == typelib_TypeClass_FLOAT)
+ {
+ float tmp = (float) (*((double *)fpreg));
+ (*((float *) fpreg)) = tmp;
+ }
+
+ pCppArgs[nPos] = pUnoArgs[nPos] = fpreg;
+ gpreg++;
+ fpreg++;
+ nregs++;
+ }
+ else
+ {
+ pCppArgs[nPos] = pUnoArgs[nPos] = ovrflw;
+ ovrflw++;
+ }
+ break;
+ case typelib_TypeClass_BYTE:
+ case typelib_TypeClass_BOOLEAN:
+ if (nregs < axp::MAX_WORDS_IN_REGS)
+ {
+ pCppArgs[nPos] = pUnoArgs[nPos] = gpreg;
+ gpreg++;
+ fpreg++;
+ nregs++;
+ }
+ else
+ {
+ pCppArgs[nPos] = pUnoArgs[nPos] = ovrflw;
+ ovrflw++;
+ }
+ break;
+ case typelib_TypeClass_CHAR:
+ case typelib_TypeClass_SHORT:
+ case typelib_TypeClass_UNSIGNED_SHORT:
+ if (nregs < axp::MAX_WORDS_IN_REGS)
+ {
+ pCppArgs[nPos] = pUnoArgs[nPos] = gpreg;
+ gpreg++;
+ fpreg++;
+ nregs++;
+ }
+ else
+ {
+ pCppArgs[nPos] = pUnoArgs[nPos] = ovrflw;
+ ovrflw++;
+ }
+ break;
+ case typelib_TypeClass_ENUM:
+ case typelib_TypeClass_LONG:
+ case typelib_TypeClass_UNSIGNED_LONG:
+ if (nregs < axp::MAX_WORDS_IN_REGS)
+ {
+ pCppArgs[nPos] = pUnoArgs[nPos] = gpreg;
+ gpreg++;
+ fpreg++;
+ nregs++;
+ }
+ else
+ {
+ pCppArgs[nPos] = pUnoArgs[nPos] = ovrflw;
+ ovrflw++;
+ }
+ break;
+ default:
+ if (nregs < axp::MAX_WORDS_IN_REGS)
+ {
+ pCppArgs[nPos] = pUnoArgs[nPos] = gpreg;
+ gpreg++;
+ fpreg++;
+ nregs++;
+ }
+ else
+ {
+ pCppArgs[nPos] = pUnoArgs[nPos] = ovrflw;
+ ovrflw++;
+ }
+ break;
+ }
+
+ // no longer needed
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ else // ptr to complex value | ref
+ {
+#ifdef CMC_DEBUG
+ fprintf(stderr, "complex, nregs is %d\n", nregs);
+#endif
+
+ void *pCppStack; //temporary stack pointer
+
+ if (nregs < axp::MAX_WORDS_IN_REGS)
+ {
+ pCppArgs[nPos] = pCppStack = *gpreg;
+ gpreg++;
+ fpreg++;
+ nregs++;
+ }
+ else
+ {
+ pCppArgs[nPos] = pCppStack = *ovrflw;
+ ovrflw++;
+ }
+
+ if (! rParam.bIn) // is pure out
+ {
+ // uno out is unconstructed mem!
+ pUnoArgs[nPos] = alloca( pParamTypeDescr->nSize );
+ pTempIndizes[nTempIndizes] = nPos;
+ // will be released at reconversion
+ ppTempParamTypeDescr[nTempIndizes++] = pParamTypeDescr;
+ }
+ // is in/inout
+ else if (bridges::cpp_uno::shared::relatesToInterfaceType( pParamTypeDescr ))
+ {
+ uno_copyAndConvertData( pUnoArgs[nPos] = alloca( pParamTypeDescr->nSize ),
+ pCppStack, pParamTypeDescr,
+ pThis->getBridge()->getCpp2Uno() );
+ pTempIndizes[nTempIndizes] = nPos; // has to be reconverted
+ // will be released at reconversion
+ ppTempParamTypeDescr[nTempIndizes++] = pParamTypeDescr;
+ }
+ else // direct way
+ {
+ pUnoArgs[nPos] = pCppStack;
+ // no longer needed
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ }
+ }
+
+#ifdef CMC_DEBUG
+ fprintf(stderr, "end of params\n");
+#endif
+
+ // ExceptionHolder
+ uno_Any aUnoExc; // Any will be constructed by callee
+ uno_Any * pUnoExc = &aUnoExc;
+
+ // invoke uno dispatch call
+ (*pThis->getUnoI()->pDispatcher)( pThis->getUnoI(), pMemberTypeDescr, pUnoReturn, pUnoArgs, &pUnoExc );
+
+ // in case an exception occured...
+ if (pUnoExc)
+ {
+ // destruct temporary in/inout params
+ for ( ; nTempIndizes--; )
+ {
+ sal_Int32 nIndex = pTempIndizes[nTempIndizes];
+
+ if (pParams[nIndex].bIn) // is in/inout => was constructed
+ uno_destructData( pUnoArgs[nIndex], ppTempParamTypeDescr[nTempIndizes], 0 );
+ TYPELIB_DANGER_RELEASE( ppTempParamTypeDescr[nTempIndizes] );
+ }
+ if (pReturnTypeDescr)
+ TYPELIB_DANGER_RELEASE( pReturnTypeDescr );
+
+ CPPU_CURRENT_NAMESPACE::raiseException( &aUnoExc, pThis->getBridge()->getUno2Cpp() ); // has to destruct the any
+ // is here for dummy
+ return typelib_TypeClass_VOID;
+ }
+ else // else no exception occured...
+ {
+ // temporary params
+ for ( ; nTempIndizes--; )
+ {
+ sal_Int32 nIndex = pTempIndizes[nTempIndizes];
+ typelib_TypeDescription * pParamTypeDescr = ppTempParamTypeDescr[nTempIndizes];
+
+ if (pParams[nIndex].bOut) // inout/out
+ {
+ // convert and assign
+ uno_destructData( pCppArgs[nIndex], pParamTypeDescr, cpp_release );
+ uno_copyAndConvertData( pCppArgs[nIndex], pUnoArgs[nIndex], pParamTypeDescr,
+ pThis->getBridge()->getUno2Cpp() );
+ }
+ // destroy temp uno param
+ uno_destructData( pUnoArgs[nIndex], pParamTypeDescr, 0 );
+
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ // return
+ if (pCppReturn) // has complex return
+ {
+ if (pUnoReturn != pCppReturn) // needs reconversion
+ {
+ uno_copyAndConvertData( pCppReturn, pUnoReturn, pReturnTypeDescr,
+ pThis->getBridge()->getUno2Cpp() );
+ // destroy temp uno return
+ uno_destructData( pUnoReturn, pReturnTypeDescr, 0 );
+ }
+ // complex return ptr is set to return reg
+ *(void **)pRegisterReturn = pCppReturn;
+ }
+ if (pReturnTypeDescr)
+ {
+ typelib_TypeClass eRet = (typelib_TypeClass)pReturnTypeDescr->eTypeClass;
+ TYPELIB_DANGER_RELEASE( pReturnTypeDescr );
+ return eRet;
+ }
+ else
+ return typelib_TypeClass_VOID;
+ }
+}
+
+
+//============================================================================
+static typelib_TypeClass cpp_mediate(
+ sal_uInt64 nOffsetAndIndex,
+ void ** gpreg, void ** fpreg, void ** ovrflw,
+ sal_Int64 * pRegisterReturn /* space for register return */ )
+{
+ OSL_ENSURE( sizeof(sal_Int64)==sizeof(void *), "### unexpected!" );
+
+ sal_Int32 nVtableOffset = (nOffsetAndIndex >> 32);
+ sal_Int32 nFunctionIndex = (nOffsetAndIndex & 0xFFFFFFFF);
+
+#ifdef CMC_DEBUG
+ fprintf(stderr, "nVTableOffset, nFunctionIndex are %x %x\n", nVtableOffset, nFunctionIndex);
+#endif
+
+#ifdef CMC_DEBUG
+ // Let's figure out what is really going on here
+ {
+ fprintf( stderr, "= cpp_mediate () =\nGPR's (%d): ", 6 );
+ for ( unsigned int i = 0; i < 6; ++i )
+ fprintf( stderr, "0x%lx, ", gpreg[i] );
+ fprintf( stderr, "\n");
+ fprintf( stderr, "\nFPR's (%d): ", 6 );
+ for ( unsigned int i = 0; i < 6; ++i )
+ fprintf( stderr, "0x%lx (%f), ", fpreg[i], fpreg[i] );
+ fprintf( stderr, "\n");
+ }
+#endif
+
+
+ // gpreg: [ret *], this, [other gpr params]
+ // fpreg: [fpr params]
+ // ovrflw: [gpr or fpr params (properly aligned)]
+
+ // _this_ ptr is patched cppu_XInterfaceProxy object
+ void * pThis;
+ if( nFunctionIndex & 0x80000000 )
+ {
+ nFunctionIndex &= 0x7fffffff;
+ pThis = gpreg[1];
+ }
+ else
+ {
+ pThis = gpreg[0];
+ }
+
+ pThis = static_cast< char * >(pThis) - nVtableOffset;
+
+ bridges::cpp_uno::shared::CppInterfaceProxy * pCppI
+ = bridges::cpp_uno::shared::CppInterfaceProxy::castInterfaceToProxy(
+ pThis);
+
+ typelib_InterfaceTypeDescription * pTypeDescr = pCppI->getTypeDescr();
+
+
+ OSL_ENSURE( nFunctionIndex < pTypeDescr->nMapFunctionIndexToMemberIndex, "### illegal vtable index!" );
+ if (nFunctionIndex >= pTypeDescr->nMapFunctionIndexToMemberIndex)
+ {
+ throw RuntimeException(
+ rtl::OUString::createFromAscii("illegal vtable index!"),
+ (XInterface *)pCppI );
+ }
+
+ // determine called method
+ OSL_ENSURE( nVtableCall < pTypeDescr->nMapFunctionIndexToMemberIndex, "### illegal vtable index!" );
+ sal_Int32 nMemberPos = pTypeDescr->pMapFunctionIndexToMemberIndex[nFunctionIndex];
+ OSL_ENSURE( nMemberPos < pTypeDescr->nAllMembers, "### illegal member index!" );
+
+ TypeDescription aMemberDescr( pTypeDescr->ppAllMembers[nMemberPos] );
+
+ typelib_TypeClass eRet;
+ switch (aMemberDescr.get()->eTypeClass)
+ {
+ case typelib_TypeClass_INTERFACE_ATTRIBUTE:
+ {
+ if (pTypeDescr->pMapMemberIndexToFunctionIndex[nMemberPos] == nFunctionIndex)
+ {
+ // is GET method
+ eRet = cpp2uno_call(
+ pCppI, aMemberDescr.get(),
+ ((typelib_InterfaceAttributeTypeDescription *)aMemberDescr.get())->pAttributeTypeRef,
+ 0, 0, // no params
+ gpreg, fpreg, ovrflw, pRegisterReturn );
+ }
+ else
+ {
+ // is SET method
+ typelib_MethodParameter aParam;
+ aParam.pTypeRef =
+ ((typelib_InterfaceAttributeTypeDescription *)aMemberDescr.get())->pAttributeTypeRef;
+ aParam.bIn = sal_True;
+ aParam.bOut = sal_False;
+
+ eRet = cpp2uno_call(
+ pCppI, aMemberDescr.get(),
+ 0, // indicates void return
+ 1, &aParam,
+ gpreg, fpreg, ovrflw, pRegisterReturn );
+ }
+ break;
+ }
+ case typelib_TypeClass_INTERFACE_METHOD:
+ {
+ // is METHOD
+ switch (nFunctionIndex)
+ {
+ case 1: // acquire()
+ pCppI->acquireProxy(); // non virtual call!
+ eRet = typelib_TypeClass_VOID;
+ break;
+ case 2: // release()
+ pCppI->releaseProxy(); // non virtual call!
+ eRet = typelib_TypeClass_VOID;
+ break;
+ case 0: // queryInterface() opt
+ {
+ typelib_TypeDescription * pTD = 0;
+ TYPELIB_DANGER_GET( &pTD, reinterpret_cast< Type * >( gpreg[2] )->getTypeLibType() );
+ if (pTD)
+ {
+ XInterface * pInterface = 0;
+ (*pCppI->getBridge()->getCppEnv()->getRegisteredInterface)(
+ pCppI->getBridge()->getCppEnv(),
+ (void **)&pInterface, pCppI->getOid().pData,
+ (typelib_InterfaceTypeDescription *)pTD );
+
+ if (pInterface)
+ {
+ ::uno_any_construct(
+ reinterpret_cast< uno_Any * >( gpreg[0] ),
+ &pInterface, pTD, cpp_acquire );
+ pInterface->release();
+ TYPELIB_DANGER_RELEASE( pTD );
+ *(void **)pRegisterReturn = gpreg[0];
+ eRet = typelib_TypeClass_ANY;
+ break;
+ }
+ TYPELIB_DANGER_RELEASE( pTD );
+ }
+ } // else perform queryInterface()
+ default:
+ eRet = cpp2uno_call(
+ pCppI, aMemberDescr.get(),
+ ((typelib_InterfaceMethodTypeDescription *)aMemberDescr.get())->pReturnTypeRef,
+ ((typelib_InterfaceMethodTypeDescription *)aMemberDescr.get())->nParams,
+ ((typelib_InterfaceMethodTypeDescription *)aMemberDescr.get())->pParams,
+ gpreg, fpreg, ovrflw, pRegisterReturn );
+ }
+ break;
+ }
+ default:
+ {
+ throw RuntimeException(
+ rtl::OUString::createFromAscii("no member description found!"),
+ (XInterface *)pCppI );
+ // is here for dummy
+ eRet = typelib_TypeClass_VOID;
+ }
+ }
+
+ return eRet;
+}
+
+long cpp_vtable_call(long r16, long r17, long r18, long r19, long r20, long r21, long firstonstack)
+{
+ register long r1 asm("$1");
+ sal_uInt64 nOffsetAndIndex = r1;
+
+ long sp = (long)&firstonstack;
+
+ sal_uInt64 gpreg[axp::MAX_GPR_REGS];
+ gpreg[0] = r16;
+ gpreg[1] = r17;
+ gpreg[2] = r18;
+ gpreg[3] = r19;
+ gpreg[4] = r20;
+ gpreg[5] = r21;
+
+ double fpreg[axp::MAX_SSE_REGS];
+ register double f16 asm("$f16"); fpreg[0] = f16;
+ register double f17 asm("$f17"); fpreg[1] = f17;
+ register double f18 asm("$f18"); fpreg[2] = f18;
+ register double f19 asm("$f19"); fpreg[3] = f19;
+ register double f20 asm("$f20"); fpreg[4] = f20;
+ register double f21 asm("$f21"); fpreg[5] = f21;
+
+ volatile long nRegReturn[1];
+#ifdef CMC_DEBUG
+ fprintf(stderr, "before mediate with %lx\n",nOffsetAndIndex);
+ fprintf(stderr, "non-doubles are %x %x %x %x %x %x\n", gpreg[0], gpreg[1], gpreg[2], gpreg[3], gpreg[4], gpreg[5]);
+ fprintf(stderr, "doubles are %f %f %f %f %f %f\n", fpreg[0], fpreg[1], fpreg[2], fpreg[3], fpreg[4], fpreg[5]);
+#endif
+ typelib_TypeClass aType =
+ cpp_mediate( nOffsetAndIndex, (void**)gpreg, (void**)fpreg, (void**)sp,
+ (sal_Int64*)nRegReturn );
+#ifdef CMC_DEBUG
+ fprintf(stderr, "after mediate ret is %lx %ld\n", nRegReturn[0], nRegReturn[0]);
+#endif
+
+ switch( aType )
+ {
+ case typelib_TypeClass_BOOLEAN:
+ case typelib_TypeClass_BYTE:
+ nRegReturn[0] = (unsigned long)(*(unsigned char *)nRegReturn);
+ break;
+ case typelib_TypeClass_CHAR:
+ case typelib_TypeClass_UNSIGNED_SHORT:
+ case typelib_TypeClass_SHORT:
+ nRegReturn[0] = (unsigned long)(*(unsigned short *)nRegReturn);
+ break;
+ case typelib_TypeClass_ENUM:
+ case typelib_TypeClass_UNSIGNED_LONG:
+ case typelib_TypeClass_LONG:
+ nRegReturn[0] = (unsigned long)(*(unsigned int *)nRegReturn);
+ break;
+ case typelib_TypeClass_VOID:
+ default:
+ break;
+ case typelib_TypeClass_FLOAT:
+ {
+ double tmp = (double) (*((float *)nRegReturn));
+ (*((double *) nRegReturn)) = tmp;
+ }
+ //deliberate fall through
+ case typelib_TypeClass_DOUBLE:
+ __asm__ ( "ldt $f0,%0\n\t"
+ : : "m" (*((double*)nRegReturn)) : "$f0");
+ break;
+ }
+ return nRegReturn[0];
+}
+
+const int codeSnippetSize = 32;
+
+unsigned char *codeSnippet( unsigned char * code, sal_Int32 nFunctionIndex, sal_Int32 nVtableOffset, bool simple_ret_type )
+{
+ if (! simple_ret_type)
+ nFunctionIndex |= 0x80000000;
+
+ unsigned char * p = code;
+ *(unsigned int*)&p[0] = 0x47fb0401; /* mov $27,$1 */
+ *(unsigned int*)&p[4] = 0xa43b0010; /* ldq $1,16($27) */
+ *(unsigned int*)&p[8] = 0xa77b0018; /* ldq $27,24($27) */
+ *(unsigned int*)&p[12] = 0x6bfb0000; /* jmp $31,($27),0 */
+ *(unsigned int*)&p[16] = nFunctionIndex;
+ *(unsigned int*)&p[20] = nVtableOffset;
+ *(unsigned long*)&p[24] = (unsigned long)cpp_vtable_call;
+ return (code + codeSnippetSize);
+}
+}
+
+void bridges::cpp_uno::shared::VtableFactory::flushCode(unsigned char const *, unsigned char const *)
+{
+ //http://www.gnu.org/software/lightning/manual/html_node/Standard-functions.html
+ __asm__ __volatile__("call_pal 0x86");
+}
+
+struct bridges::cpp_uno::shared::VtableFactory::Slot { void * fn; };
+
+bridges::cpp_uno::shared::VtableFactory::Slot *
+bridges::cpp_uno::shared::VtableFactory::mapBlockToVtable(void * block)
+{
+ return static_cast< Slot * >(block) + 2;
+}
+
+sal_Size bridges::cpp_uno::shared::VtableFactory::getBlockSize(
+ sal_Int32 slotCount)
+{
+ return (slotCount + 2) * sizeof (Slot) + slotCount * codeSnippetSize;
+}
+
+bridges::cpp_uno::shared::VtableFactory::Slot *
+bridges::cpp_uno::shared::VtableFactory::initializeBlock(
+ void * block, sal_Int32 slotCount)
+{
+ Slot * slots = mapBlockToVtable(block);
+ slots[-2].fn = 0;
+ slots[-1].fn = 0;
+ return slots + slotCount;
+}
+
+unsigned char * bridges::cpp_uno::shared::VtableFactory::addLocalFunctions(
+ Slot ** slots, unsigned char * code, sal_PtrDiff writetoexecdiff,
+ typelib_InterfaceTypeDescription const * type, sal_Int32 functionOffset,
+ sal_Int32 functionCount, sal_Int32 vtableOffset)
+{
+ (*slots) -= functionCount;
+ Slot * s = *slots;
+#ifdef CMC_DEBUG
+ fprintf(stderr, "in addLocalFunctions functionOffset is %x\n",functionOffset);
+ fprintf(stderr, "in addLocalFunctions vtableOffset is %x\n",vtableOffset);
+#endif
+
+ for (sal_Int32 i = 0; i < type->nMembers; ++i) {
+ typelib_TypeDescription * member = 0;
+ TYPELIB_DANGER_GET(&member, type->ppMembers[i]);
+ OSL_ASSERT(member != 0);
+ switch (member->eTypeClass) {
+ case typelib_TypeClass_INTERFACE_ATTRIBUTE:
+ // Getter:
+ (s++)->fn = code + writetoexecdiff;
+ code = codeSnippet(
+ code, functionOffset++, vtableOffset,
+ bridges::cpp_uno::shared::isSimpleType(
+ reinterpret_cast<
+ typelib_InterfaceAttributeTypeDescription * >(
+ member)->pAttributeTypeRef));
+
+ // Setter:
+ if (!reinterpret_cast<
+ typelib_InterfaceAttributeTypeDescription * >(
+ member)->bReadOnly)
+ {
+ (s++)->fn = code + writetoexecdiff;
+ code = codeSnippet(code, functionOffset++, vtableOffset, true);
+ }
+ break;
+
+ case typelib_TypeClass_INTERFACE_METHOD:
+ (s++)->fn = code + writetoexecdiff;
+ code = codeSnippet(
+ code, functionOffset++, vtableOffset,
+ bridges::cpp_uno::shared::isSimpleType(
+ reinterpret_cast<
+ typelib_InterfaceMethodTypeDescription * >(
+ member)->pReturnTypeRef));
+ break;
+
+ default:
+ OSL_ASSERT(false);
+ break;
+ }
+ TYPELIB_DANGER_RELEASE(member);
+ }
+ return code;
+}
+
+/* vi:set tabstop=4 shiftwidth=4 expandtab: */
diff --git a/bridges/source/cpp_uno/gcc3_linux_alpha/except.cxx b/bridges/source/cpp_uno/gcc3_linux_alpha/except.cxx
new file mode 100644
index 000000000000..3e666a11cdd0
--- /dev/null
+++ b/bridges/source/cpp_uno/gcc3_linux_alpha/except.cxx
@@ -0,0 +1,287 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_bridges.hxx"
+
+#include <stdio.h>
+#include <string.h>
+#include <dlfcn.h>
+#include <cxxabi.h>
+#include <hash_map>
+
+#include <rtl/strbuf.hxx>
+#include <rtl/ustrbuf.hxx>
+#include <osl/diagnose.h>
+#include <osl/mutex.hxx>
+
+#include <com/sun/star/uno/genfunc.hxx>
+#include <typelib/typedescription.hxx>
+#include <uno/any2.h>
+
+#include "share.hxx"
+
+
+using namespace ::std;
+using namespace ::osl;
+using namespace ::rtl;
+using namespace ::com::sun::star::uno;
+using namespace ::__cxxabiv1;
+
+
+namespace CPPU_CURRENT_NAMESPACE
+{
+
+void dummy_can_throw_anything( char const * )
+{
+}
+
+//==================================================================================================
+static OUString toUNOname( char const * p ) SAL_THROW( () )
+{
+#if OSL_DEBUG_LEVEL > 1
+ char const * start = p;
+#endif
+
+ // example: N3com3sun4star4lang24IllegalArgumentExceptionE
+
+ OUStringBuffer buf( 64 );
+ OSL_ASSERT( 'N' == *p );
+ ++p; // skip N
+
+ while ('E' != *p)
+ {
+ // read chars count
+ long n = (*p++ - '0');
+ while ('0' <= *p && '9' >= *p)
+ {
+ n *= 10;
+ n += (*p++ - '0');
+ }
+ buf.appendAscii( p, n );
+ p += n;
+ if ('E' != *p)
+ buf.append( (sal_Unicode)'.' );
+ }
+
+#if OSL_DEBUG_LEVEL > 1
+ OUString ret( buf.makeStringAndClear() );
+ OString c_ret( OUStringToOString( ret, RTL_TEXTENCODING_ASCII_US ) );
+ fprintf( stderr, "> toUNOname(): %s => %s\n", start, c_ret.getStr() );
+ return ret;
+#else
+ return buf.makeStringAndClear();
+#endif
+}
+
+//==================================================================================================
+class RTTI
+{
+ typedef hash_map< OUString, type_info *, OUStringHash > t_rtti_map;
+
+ Mutex m_mutex;
+ t_rtti_map m_rttis;
+ t_rtti_map m_generatedRttis;
+
+ void * m_hApp;
+
+public:
+ RTTI() SAL_THROW( () );
+ ~RTTI() SAL_THROW( () );
+
+ type_info * getRTTI( typelib_CompoundTypeDescription * ) SAL_THROW( () );
+};
+//__________________________________________________________________________________________________
+RTTI::RTTI() SAL_THROW( () )
+ : m_hApp( dlopen( 0, RTLD_LAZY ) )
+{
+}
+//__________________________________________________________________________________________________
+RTTI::~RTTI() SAL_THROW( () )
+{
+ dlclose( m_hApp );
+}
+
+//__________________________________________________________________________________________________
+type_info * RTTI::getRTTI( typelib_CompoundTypeDescription *pTypeDescr ) SAL_THROW( () )
+{
+ type_info * rtti;
+
+ OUString const & unoName = *(OUString const *)&pTypeDescr->aBase.pTypeName;
+
+ MutexGuard guard( m_mutex );
+ t_rtti_map::const_iterator iRttiFind( m_rttis.find( unoName ) );
+ if (iRttiFind == m_rttis.end())
+ {
+ // RTTI symbol
+ OStringBuffer buf( 64 );
+ buf.append( RTL_CONSTASCII_STRINGPARAM("_ZTIN") );
+ sal_Int32 index = 0;
+ do
+ {
+ OUString token( unoName.getToken( 0, '.', index ) );
+ buf.append( token.getLength() );
+ OString c_token( OUStringToOString( token, RTL_TEXTENCODING_ASCII_US ) );
+ buf.append( c_token );
+ }
+ while (index >= 0);
+ buf.append( 'E' );
+
+ OString symName( buf.makeStringAndClear() );
+ rtti = (type_info *)dlsym( m_hApp, symName.getStr() );
+
+ if (rtti)
+ {
+ pair< t_rtti_map::iterator, bool > insertion(
+ m_rttis.insert( t_rtti_map::value_type( unoName, rtti ) ) );
+ OSL_ENSURE( insertion.second, "### inserting new rtti failed?!" );
+ }
+ else
+ {
+ // try to lookup the symbol in the generated rtti map
+ t_rtti_map::const_iterator iFind( m_generatedRttis.find( unoName ) );
+ if (iFind == m_generatedRttis.end())
+ {
+ // we must generate it !
+ // symbol and rtti-name is nearly identical,
+ // the symbol is prefixed with _ZTI
+ char const * rttiName = symName.getStr() +4;
+#if OSL_DEBUG_LEVEL > 1
+ fprintf( stderr,"generated rtti for %s\n", rttiName );
+#endif
+ if (pTypeDescr->pBaseTypeDescription)
+ {
+ // ensure availability of base
+ type_info * base_rtti = getRTTI(
+ (typelib_CompoundTypeDescription *)pTypeDescr->pBaseTypeDescription );
+ rtti = new __si_class_type_info(
+ strdup( rttiName ), (__class_type_info *)base_rtti );
+ }
+ else
+ {
+ // this class has no base class
+ rtti = new __class_type_info( strdup( rttiName ) );
+ }
+
+ pair< t_rtti_map::iterator, bool > insertion(
+ m_generatedRttis.insert( t_rtti_map::value_type( unoName, rtti ) ) );
+ OSL_ENSURE( insertion.second, "### inserting new generated rtti failed?!" );
+ }
+ else // taking already generated rtti
+ {
+ rtti = iFind->second;
+ }
+ }
+ }
+ else
+ {
+ rtti = iRttiFind->second;
+ }
+
+ return rtti;
+}
+
+//--------------------------------------------------------------------------------------------------
+static void deleteException( void * pExc )
+{
+ __cxa_exception const * header = ((__cxa_exception const *)pExc - 1);
+ typelib_TypeDescription * pTD = 0;
+ OUString unoName( toUNOname( header->exceptionType->name() ) );
+ ::typelib_typedescription_getByName( &pTD, unoName.pData );
+ OSL_ENSURE( pTD, "### unknown exception type! leaving out destruction => leaking!!!" );
+ if (pTD)
+ {
+ ::uno_destructData( pExc, pTD, cpp_release );
+ ::typelib_typedescription_release( pTD );
+ }
+}
+
+//==================================================================================================
+void raiseException( uno_Any * pUnoExc, uno_Mapping * pUno2Cpp )
+{
+ void * pCppExc;
+ type_info * rtti;
+
+ {
+ // construct cpp exception object
+ typelib_TypeDescription * pTypeDescr = 0;
+ TYPELIB_DANGER_GET( &pTypeDescr, pUnoExc->pType );
+ OSL_ASSERT( pTypeDescr );
+ if (! pTypeDescr)
+ terminate();
+
+ pCppExc = __cxa_allocate_exception( pTypeDescr->nSize );
+ ::uno_copyAndConvertData( pCppExc, pUnoExc->pData, pTypeDescr, pUno2Cpp );
+
+ // destruct uno exception
+ ::uno_any_destruct( pUnoExc, 0 );
+ // avoiding locked counts
+ static RTTI * s_rtti = 0;
+ if (! s_rtti)
+ {
+ MutexGuard guard( Mutex::getGlobalMutex() );
+ if (! s_rtti)
+ {
+#ifdef LEAK_STATIC_DATA
+ s_rtti = new RTTI();
+#else
+ static RTTI rtti_data;
+ s_rtti = &rtti_data;
+#endif
+ }
+ }
+ rtti = (type_info *)s_rtti->getRTTI( (typelib_CompoundTypeDescription *) pTypeDescr );
+ TYPELIB_DANGER_RELEASE( pTypeDescr );
+ OSL_ENSURE( rtti, "### no rtti for throwing exception!" );
+ if (! rtti)
+ terminate();
+ }
+
+ __cxa_throw( pCppExc, rtti, deleteException );
+}
+
+//==================================================================================================
+void fillUnoException( __cxa_exception * header, uno_Any * pExc, uno_Mapping * pCpp2Uno )
+{
+ OSL_ENSURE( header, "### no exception header!!!" );
+ if (! header)
+ terminate();
+
+ typelib_TypeDescription * pExcTypeDescr = 0;
+ OUString unoName( toUNOname( header->exceptionType->name() ) );
+ ::typelib_typedescription_getByName( &pExcTypeDescr, unoName.pData );
+ OSL_ENSURE( pExcTypeDescr, "### can not get type description for exception!!!" );
+ if (! pExcTypeDescr)
+ terminate();
+
+ // construct uno exception any
+ ::uno_any_constructAndConvert( pExc, header->adjustedPtr, pExcTypeDescr, pCpp2Uno );
+ ::typelib_typedescription_release( pExcTypeDescr );
+}
+
+}
+/* vi:set tabstop=4 shiftwidth=4 expandtab: */
diff --git a/bridges/source/cpp_uno/gcc3_linux_alpha/makefile.mk b/bridges/source/cpp_uno/gcc3_linux_alpha/makefile.mk
new file mode 100644
index 000000000000..2650c4376933
--- /dev/null
+++ b/bridges/source/cpp_uno/gcc3_linux_alpha/makefile.mk
@@ -0,0 +1,77 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..$/..$/..
+
+PRJNAME=bridges
+TARGET=gcc3_uno
+LIBTARGET=no
+ENABLE_EXCEPTIONS=TRUE
+
+# --- Settings -----------------------------------------------------
+
+.INCLUDE : settings.mk
+
+# --- Files --------------------------------------------------------
+
+.IF "$(COM)$(OS)$(CPU)" == "GCCLINUXL"
+
+.IF "$(cppu_no_leak)" == ""
+CFLAGS += -DLEAK_STATIC_DATA
+.ENDIF
+
+# In case someone enabled the non-standard -fomit-frame-pointer which does not
+# work with the .cxx sources in this directory:
+CFLAGSCXX += -fno-omit-frame-pointer
+
+CFLAGSNOOPT=-O0
+
+SLOFILES= \
+ $(SLO)$/except.obj \
+ $(SLO)$/cpp2uno.obj \
+ $(SLO)$/uno2cpp.obj
+
+SHL1TARGET= $(TARGET)
+
+SHL1DEF=$(MISC)$/$(SHL1TARGET).def
+SHL1IMPLIB=i$(TARGET)
+SHL1VERSIONMAP=..$/..$/bridge_exports.map
+SHL1RPATH=URELIB
+
+SHL1OBJS = $(SLOFILES)
+SHL1LIBS = $(SLB)$/cpp_uno_shared.lib
+
+SHL1STDLIBS= \
+ $(CPPULIB) \
+ $(SALLIB)
+
+.ENDIF
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : target.mk
+
diff --git a/bridges/source/cpp_uno/gcc3_linux_alpha/share.hxx b/bridges/source/cpp_uno/gcc3_linux_alpha/share.hxx
new file mode 100644
index 000000000000..c2f0189a2065
--- /dev/null
+++ b/bridges/source/cpp_uno/gcc3_linux_alpha/share.hxx
@@ -0,0 +1,98 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "uno/mapping.h"
+
+#include <typeinfo>
+#include <exception>
+#include <cstddef>
+
+namespace CPPU_CURRENT_NAMESPACE
+{
+
+ void dummy_can_throw_anything( char const * );
+
+
+// ----- following decl from libstdc++-v3/libsupc++/unwind-cxx.h and unwind.h
+
+struct _Unwind_Exception
+{
+ unsigned exception_class __attribute__((__mode__(__DI__)));
+ void * exception_cleanup;
+ unsigned private_1 __attribute__((__mode__(__word__)));
+ unsigned private_2 __attribute__((__mode__(__word__)));
+} __attribute__((__aligned__));
+
+struct __cxa_exception
+{
+ ::std::type_info *exceptionType;
+ void (*exceptionDestructor)(void *);
+
+ ::std::unexpected_handler unexpectedHandler;
+ ::std::terminate_handler terminateHandler;
+
+ __cxa_exception *nextException;
+
+ int handlerCount;
+
+ int handlerSwitchValue;
+ const unsigned char *actionRecord;
+ const unsigned char *languageSpecificData;
+ void *catchTemp;
+ void *adjustedPtr;
+
+ _Unwind_Exception unwindHeader;
+};
+
+extern "C" void *__cxa_allocate_exception(
+ std::size_t thrown_size ) throw();
+extern "C" void __cxa_throw (
+ void *thrown_exception, std::type_info *tinfo, void (*dest) (void *) ) __attribute__((noreturn));
+
+struct __cxa_eh_globals
+{
+ __cxa_exception *caughtExceptions;
+ unsigned int uncaughtExceptions;
+};
+extern "C" __cxa_eh_globals *__cxa_get_globals () throw();
+
+// -----
+
+//==================================================================================================
+void raiseException(
+ uno_Any * pUnoExc, uno_Mapping * pUno2Cpp );
+//==================================================================================================
+void fillUnoException(
+ __cxa_exception * header, uno_Any *, uno_Mapping * pCpp2Uno );
+}
+
+namespace axp
+{
+ enum axplimits { MAX_WORDS_IN_REGS = 6, MAX_GPR_REGS = 6, MAX_SSE_REGS = 6 };
+}
+
+/* vi:set tabstop=4 shiftwidth=4 expandtab: */
diff --git a/bridges/source/cpp_uno/gcc3_linux_alpha/uno2cpp.cxx b/bridges/source/cpp_uno/gcc3_linux_alpha/uno2cpp.cxx
new file mode 100644
index 000000000000..7f51d425806c
--- /dev/null
+++ b/bridges/source/cpp_uno/gcc3_linux_alpha/uno2cpp.cxx
@@ -0,0 +1,532 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_bridges.hxx"
+
+#include <malloc.h>
+
+#include <com/sun/star/uno/genfunc.hxx>
+#include <uno/data.h>
+
+#include "bridges/cpp_uno/shared/bridge.hxx"
+#include "bridges/cpp_uno/shared/types.hxx"
+#include "bridges/cpp_uno/shared/unointerfaceproxy.hxx"
+#include "bridges/cpp_uno/shared/vtables.hxx"
+
+#include "share.hxx"
+
+#include <stdio.h>
+#include <string.h>
+
+
+using namespace ::rtl;
+using namespace ::com::sun::star::uno;
+
+void MapReturn(long r0, typelib_TypeClass eTypeClass, sal_uInt64* pRegisterReturn)
+{
+ register float fret asm("$f0");
+ register double dret asm("$f0");
+
+#ifdef CMC_DEBUG
+ fprintf(stderr,"Mapping Return with %lx %ld %f\n", r0, r0, dret);
+#endif
+ switch (eTypeClass)
+ {
+ case typelib_TypeClass_HYPER:
+ case typelib_TypeClass_UNSIGNED_HYPER:
+ *pRegisterReturn = r0;
+ break;
+ case typelib_TypeClass_LONG:
+ case typelib_TypeClass_UNSIGNED_LONG:
+ case typelib_TypeClass_ENUM:
+ *(unsigned int*)pRegisterReturn = (unsigned int)r0;
+ break;
+ case typelib_TypeClass_CHAR:
+ case typelib_TypeClass_SHORT:
+ case typelib_TypeClass_UNSIGNED_SHORT:
+ *(unsigned short*)pRegisterReturn = (unsigned short)r0;
+ break;
+ case typelib_TypeClass_BOOLEAN:
+ case typelib_TypeClass_BYTE:
+ *(unsigned char*)pRegisterReturn = (unsigned char)r0;
+ break;
+ case typelib_TypeClass_FLOAT:
+ *reinterpret_cast<float *>( pRegisterReturn ) = fret;
+ break;
+ case typelib_TypeClass_DOUBLE:
+ *reinterpret_cast<double *>( pRegisterReturn ) = dret;
+ break;
+ default:
+ break;
+ }
+#ifdef CMC_DEBUG
+ fprintf(stderr, "end of MapReturn with %x\n", pRegisterReturn ? *pRegisterReturn : 0);
+#endif
+}
+
+#define INSERT_FLOAT( pSV, nr, pFPR, pDS ) \
+ { \
+ if ( nr < axp::MAX_WORDS_IN_REGS ) \
+ { \
+ pFPR[nr++] = *reinterpret_cast<float *>( pSV ); \
+ } \
+ else \
+ *pDS++ = *reinterpret_cast<sal_uInt64 *>( pSV ); \
+ }
+
+#define INSERT_DOUBLE( pSV, nr, pFPR, pDS ) \
+ if ( nr < axp::MAX_WORDS_IN_REGS ) \
+ pFPR[nr++] = *reinterpret_cast<double *>( pSV ); \
+ else \
+ *pDS++ = *reinterpret_cast<sal_uInt64 *>( pSV ); // verbatim!
+
+#define INSERT_INT64( pSV, nr, pGPR, pDS ) \
+ if ( nr < axp::MAX_WORDS_IN_REGS ) \
+ pGPR[nr++] = *reinterpret_cast<sal_uInt64 *>( pSV ); \
+ else \
+ *pDS++ = *reinterpret_cast<sal_uInt64 *>( pSV );
+
+#define INSERT_INT32( pSV, nr, pGPR, pDS ) \
+ if ( nr < axp::MAX_WORDS_IN_REGS ) \
+ pGPR[nr++] = *reinterpret_cast<sal_uInt32 *>( pSV ); \
+ else \
+ *pDS++ = *reinterpret_cast<sal_uInt32 *>( pSV );
+
+#define INSERT_INT16( pSV, nr, pGPR, pDS ) \
+ if ( nr < axp::MAX_WORDS_IN_REGS ) \
+ pGPR[nr++] = *reinterpret_cast<sal_uInt16 *>( pSV ); \
+ else \
+ *pDS++ = *reinterpret_cast<sal_uInt16 *>( pSV );
+
+#define INSERT_INT8( pSV, nr, pGPR, pDS ) \
+ if ( nr < axp::MAX_WORDS_IN_REGS ) \
+ pGPR[nr++] = *reinterpret_cast<sal_uInt8 *>( pSV ); \
+ else \
+ *pDS++ = *reinterpret_cast<sal_uInt8 *>( pSV );
+
+namespace
+{
+//==================================================================================================
+void callVirtualMethod(
+ void * pThis, sal_Int32 nVtableIndex,
+ void * pRegisterReturn, typelib_TypeDescription * pReturnTypeDescr,
+ sal_uInt64 *pStack, sal_uInt32 nStack,
+ sal_uInt64 *pGPR, sal_uInt32 nGPR,
+ double *pFPR, sal_uInt32 nFPR)
+{
+ // Should not happen, but...
+ if ( nFPR > axp::MAX_SSE_REGS )
+ nFPR = axp::MAX_SSE_REGS;
+ if ( nGPR > axp::MAX_GPR_REGS )
+ nGPR = axp::MAX_GPR_REGS;
+
+#ifdef CMC_DEBUG
+ // Let's figure out what is really going on here
+ {
+ fprintf( stderr, "= nStack is %d\n", nStack );
+ fprintf( stderr, "= callVirtualMethod() =\nGPR's (%d): ", nGPR );
+ for ( unsigned int i = 0; i < nGPR; ++i )
+ fprintf( stderr, "0x%lx, ", pGPR[i] );
+ fprintf( stderr, "\nFPR's (%d): ", nFPR );
+ for ( unsigned int i = 0; i < nFPR; ++i )
+ fprintf( stderr, "0x%lx (%f), ", pFPR[i], pFPR[i] );
+ fprintf( stderr, "\nStack (%d): ", nStack );
+ for ( unsigned int i = 0; i < nStack; ++i )
+ fprintf( stderr, "0x%lx, ", pStack[i] );
+ fprintf( stderr, "\n" );
+ fprintf( stderr, "pRegisterReturn is %p\n", pRegisterReturn);
+ }
+#endif
+
+ // Load parameters to stack, if necessary
+ // Stack, if used, must be 8-bytes aligned
+ sal_uInt64 *stack = (sal_uInt64 *) __builtin_alloca( nStack * 8 );
+ memcpy( stack, pStack, nStack * 8 );
+
+ // To get pointer to method
+ // a) get the address of the vtable
+ sal_uInt64 pMethod = *((sal_uInt64 *)pThis);
+ // b) get the address from the vtable entry at offset
+ pMethod += 8 * nVtableIndex;
+ pMethod = *((sal_uInt64 *)pMethod);
+
+ typedef void (* FunctionCall )( sal_uInt64, sal_uInt64, sal_uInt64, sal_uInt64, sal_uInt64, sal_uInt64 );
+ FunctionCall pFunc = (FunctionCall)pMethod;
+
+ switch (nFPR) //deliberate fall through
+ {
+ case 6:
+ asm volatile("ldt $f16,%0" :: "m"(pFPR[5]) : "$f16");
+ case 5:
+ asm volatile("ldt $f17,%0" :: "m"(pFPR[4]) : "$f17");
+ case 4:
+ asm volatile("ldt $f18,%0" :: "m"(pFPR[3]) : "$f18");
+ case 3:
+ asm volatile("ldt $f19,%0" :: "m"(pFPR[2]) : "$f19");
+ case 2:
+ asm volatile("ldt $f20,%0" :: "m"(pFPR[1]) : "$f20");
+ case 1:
+ asm volatile("ldt $f21,%0" :: "m"(pFPR[0]) : "$f21");
+ default:
+ break;
+ }
+
+ (*pFunc)(pGPR[0], pGPR[1], pGPR[2], pGPR[3], pGPR[4], pGPR[5]);
+ register sal_uInt64 r0 __asm__("$0");
+ MapReturn(r0, pReturnTypeDescr->eTypeClass, (sal_uInt64*)pRegisterReturn);
+}
+
+
+//============================================================================
+static void cpp_call(
+ bridges::cpp_uno::shared::UnoInterfaceProxy * pThis,
+ bridges::cpp_uno::shared::VtableSlot aVtableSlot,
+ typelib_TypeDescriptionReference * pReturnTypeRef,
+ sal_Int32 nParams, typelib_MethodParameter * pParams,
+ void * pUnoReturn, void * pUnoArgs[], uno_Any ** ppUnoExc )
+{
+ // max space for: [complex ret ptr], values|ptr ...
+ sal_uInt64 * pStack = (sal_uInt64 *)alloca( (nParams+3) * sizeof(sal_Int64) );
+ sal_uInt64 * pStackStart = pStack;
+
+ sal_uInt64 pGPR[axp::MAX_GPR_REGS];
+ double pFPR[axp::MAX_SSE_REGS];
+ sal_uInt32 nRegs = 0;
+
+ // return
+ typelib_TypeDescription * pReturnTypeDescr = 0;
+ TYPELIB_DANGER_GET( &pReturnTypeDescr, pReturnTypeRef );
+ OSL_ENSURE( pReturnTypeDescr, "### expected return type description!" );
+
+ void * pCppReturn = 0; // if != 0 && != pUnoReturn, needs reconversion
+
+ if (pReturnTypeDescr)
+ {
+ if (bridges::cpp_uno::shared::isSimpleType( pReturnTypeDescr ))
+ {
+ pCppReturn = pUnoReturn; // direct way for simple types
+ }
+ else
+ {
+ // complex return via ptr
+ pCppReturn = (bridges::cpp_uno::shared::relatesToInterfaceType( pReturnTypeDescr )
+ ? alloca( pReturnTypeDescr->nSize )
+ : pUnoReturn); // direct way
+ INSERT_INT64( &pCppReturn, nRegs, pGPR, pStack );
+ }
+ }
+ // push "this" pointer
+ void * pAdjustedThisPtr = reinterpret_cast< void ** >( pThis->getCppI() ) + aVtableSlot.offset;
+
+ INSERT_INT64( &pAdjustedThisPtr, nRegs, pGPR, pStack );
+
+ // stack space
+ OSL_ENSURE( sizeof(void *) == sizeof(sal_Int64), "### unexpected size!" );
+ // args
+ void ** pCppArgs = (void **)alloca( 3 * sizeof(void *) * nParams );
+ // indizes of values this have to be converted (interface conversion cpp<=>uno)
+ sal_Int32 * pTempIndizes = (sal_Int32 *)(pCppArgs + nParams);
+ // type descriptions for reconversions
+ typelib_TypeDescription ** ppTempParamTypeDescr = (typelib_TypeDescription **)(pCppArgs + (2 * nParams));
+
+ sal_Int32 nTempIndizes = 0;
+
+ for ( sal_Int32 nPos = 0; nPos < nParams; ++nPos )
+ {
+ const typelib_MethodParameter & rParam = pParams[nPos];
+ typelib_TypeDescription * pParamTypeDescr = 0;
+ TYPELIB_DANGER_GET( &pParamTypeDescr, rParam.pTypeRef );
+
+ if (!rParam.bOut && bridges::cpp_uno::shared::isSimpleType( pParamTypeDescr ))
+ {
+ uno_copyAndConvertData( pCppArgs[nPos] = alloca( 8 ), pUnoArgs[nPos], pParamTypeDescr,
+ pThis->getBridge()->getUno2Cpp() );
+
+ switch (pParamTypeDescr->eTypeClass)
+ {
+ case typelib_TypeClass_HYPER:
+ case typelib_TypeClass_UNSIGNED_HYPER:
+ INSERT_INT64( pCppArgs[nPos], nRegs, pGPR, pStack );
+ break;
+ case typelib_TypeClass_LONG:
+ case typelib_TypeClass_UNSIGNED_LONG:
+ case typelib_TypeClass_ENUM:
+ INSERT_INT32( pCppArgs[nPos], nRegs, pGPR, pStack );
+ break;
+ case typelib_TypeClass_SHORT:
+ case typelib_TypeClass_CHAR:
+ case typelib_TypeClass_UNSIGNED_SHORT:
+ INSERT_INT16( pCppArgs[nPos], nRegs, pGPR, pStack );
+ break;
+ case typelib_TypeClass_BOOLEAN:
+ case typelib_TypeClass_BYTE:
+ INSERT_INT8( pCppArgs[nPos], nRegs, pGPR, pStack );
+ break;
+ case typelib_TypeClass_FLOAT:
+ INSERT_FLOAT( pCppArgs[nPos], nRegs, pFPR, pStack );
+ break;
+ case typelib_TypeClass_DOUBLE:
+ INSERT_DOUBLE( pCppArgs[nPos], nRegs, pFPR, pStack );
+ break;
+ default:
+ break;
+ }
+
+ // no longer needed
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ else // ptr to complex value | ref
+ {
+ if (! rParam.bIn) // is pure out
+ {
+ // cpp out is constructed mem, uno out is not!
+ uno_constructData(
+ pCppArgs[nPos] = alloca( pParamTypeDescr->nSize ),
+ pParamTypeDescr );
+ pTempIndizes[nTempIndizes] = nPos; // default constructed for cpp call
+ // will be released at reconversion
+ ppTempParamTypeDescr[nTempIndizes++] = pParamTypeDescr;
+ }
+ // is in/inout
+ else if (bridges::cpp_uno::shared::relatesToInterfaceType( pParamTypeDescr ))
+ {
+ uno_copyAndConvertData(
+ pCppArgs[nPos] = alloca( pParamTypeDescr->nSize ),
+ pUnoArgs[nPos], pParamTypeDescr, pThis->getBridge()->getUno2Cpp() );
+
+ pTempIndizes[nTempIndizes] = nPos; // has to be reconverted
+ // will be released at reconversion
+ ppTempParamTypeDescr[nTempIndizes++] = pParamTypeDescr;
+ }
+ else // direct way
+ {
+ pCppArgs[nPos] = pUnoArgs[nPos];
+ // no longer needed
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ INSERT_INT64( &(pCppArgs[nPos]), nRegs, pGPR, pStack );
+ }
+ }
+
+ try
+ {
+ callVirtualMethod(
+ pAdjustedThisPtr, aVtableSlot.index,
+ pCppReturn, pReturnTypeDescr,
+ pStackStart, (pStack - pStackStart),
+ pGPR, nRegs,
+ pFPR, nRegs );
+ // NO exception occured...
+ *ppUnoExc = 0;
+
+ // reconvert temporary params
+ for ( ; nTempIndizes--; )
+ {
+ sal_Int32 nIndex = pTempIndizes[nTempIndizes];
+ typelib_TypeDescription * pParamTypeDescr = ppTempParamTypeDescr[nTempIndizes];
+
+ if (pParams[nIndex].bIn)
+ {
+ if (pParams[nIndex].bOut) // inout
+ {
+ uno_destructData( pUnoArgs[nIndex], pParamTypeDescr, 0 ); // destroy uno value
+ uno_copyAndConvertData( pUnoArgs[nIndex], pCppArgs[nIndex], pParamTypeDescr,
+ pThis->getBridge()->getCpp2Uno() );
+ }
+ }
+ else // pure out
+ {
+ uno_copyAndConvertData( pUnoArgs[nIndex], pCppArgs[nIndex], pParamTypeDescr,
+ pThis->getBridge()->getCpp2Uno() );
+ }
+ // destroy temp cpp param => cpp: every param was constructed
+ uno_destructData( pCppArgs[nIndex], pParamTypeDescr, cpp_release );
+
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ // return value
+ if (pCppReturn && pUnoReturn != pCppReturn)
+ {
+ uno_copyAndConvertData( pUnoReturn, pCppReturn, pReturnTypeDescr,
+ pThis->getBridge()->getCpp2Uno() );
+ uno_destructData( pCppReturn, pReturnTypeDescr, cpp_release );
+ }
+ }
+ catch (...)
+ {
+ // fill uno exception
+ fillUnoException( CPPU_CURRENT_NAMESPACE::__cxa_get_globals()->caughtExceptions,
+ *ppUnoExc, pThis->getBridge()->getCpp2Uno() );
+
+
+ // temporary params
+ for ( ; nTempIndizes--; )
+ {
+ sal_Int32 nIndex = pTempIndizes[nTempIndizes];
+ // destroy temp cpp param => cpp: every param was constructed
+ uno_destructData( pCppArgs[nIndex], ppTempParamTypeDescr[nTempIndizes], cpp_release );
+ TYPELIB_DANGER_RELEASE( ppTempParamTypeDescr[nTempIndizes] );
+ }
+ // return type
+ if (pReturnTypeDescr)
+ TYPELIB_DANGER_RELEASE( pReturnTypeDescr );
+ }
+}
+}
+
+namespace bridges { namespace cpp_uno { namespace shared {
+
+void unoInterfaceProxyDispatch(
+ uno_Interface * pUnoI, const typelib_TypeDescription * pMemberDescr,
+ void * pReturn, void * pArgs[], uno_Any ** ppException )
+{
+#ifdef CMC_DEBUG
+ fprintf(stderr, "unoInterfaceProxyDispatch\n");
+#endif
+
+
+ // is my surrogate
+ bridges::cpp_uno::shared::UnoInterfaceProxy * pThis
+ = static_cast< bridges::cpp_uno::shared::UnoInterfaceProxy *> (pUnoI);
+
+ switch (pMemberDescr->eTypeClass)
+ {
+ case typelib_TypeClass_INTERFACE_ATTRIBUTE:
+ {
+
+ VtableSlot aVtableSlot(
+ getVtableSlot(
+ reinterpret_cast<
+ typelib_InterfaceAttributeTypeDescription const * >(
+ pMemberDescr)));
+
+ if (pReturn)
+ {
+ // dependent dispatch
+ cpp_call(
+ pThis, aVtableSlot,
+ ((typelib_InterfaceAttributeTypeDescription *)pMemberDescr)->pAttributeTypeRef,
+ 0, 0, // no params
+ pReturn, pArgs, ppException );
+ }
+ else
+ {
+ // is SET
+ typelib_MethodParameter aParam;
+ aParam.pTypeRef =
+ ((typelib_InterfaceAttributeTypeDescription *)pMemberDescr)->pAttributeTypeRef;
+ aParam.bIn = sal_True;
+ aParam.bOut = sal_False;
+
+ typelib_TypeDescriptionReference * pReturnTypeRef = 0;
+ OUString aVoidName( RTL_CONSTASCII_USTRINGPARAM("void") );
+ typelib_typedescriptionreference_new(
+ &pReturnTypeRef, typelib_TypeClass_VOID, aVoidName.pData );
+
+ // dependent dispatch
+ aVtableSlot.index += 1; //get then set method
+ cpp_call(
+ pThis, aVtableSlot,
+ pReturnTypeRef,
+ 1, &aParam,
+ pReturn, pArgs, ppException );
+
+ typelib_typedescriptionreference_release( pReturnTypeRef );
+ }
+
+ break;
+ }
+ case typelib_TypeClass_INTERFACE_METHOD:
+ {
+
+ VtableSlot aVtableSlot(
+ getVtableSlot(
+ reinterpret_cast<
+ typelib_InterfaceMethodTypeDescription const * >(
+ pMemberDescr)));
+ switch (aVtableSlot.index)
+ {
+ // standard calls
+ case 1: // acquire uno interface
+ (*pUnoI->acquire)( pUnoI );
+ *ppException = 0;
+ break;
+ case 2: // release uno interface
+ (*pUnoI->release)( pUnoI );
+ *ppException = 0;
+ break;
+ case 0: // queryInterface() opt
+ {
+ typelib_TypeDescription * pTD = 0;
+ TYPELIB_DANGER_GET( &pTD, reinterpret_cast< Type * >( pArgs[0] )->getTypeLibType() );
+ if (pTD)
+ {
+ uno_Interface * pInterface = 0;
+ (*pThis->pBridge->getUnoEnv()->getRegisteredInterface)(
+ pThis->pBridge->getUnoEnv(),
+ (void **)&pInterface, pThis->oid.pData, (typelib_InterfaceTypeDescription *)pTD );
+
+ if (pInterface)
+ {
+ ::uno_any_construct(
+ reinterpret_cast< uno_Any * >( pReturn ),
+ &pInterface, pTD, 0 );
+ (*pInterface->release)( pInterface );
+ TYPELIB_DANGER_RELEASE( pTD );
+ *ppException = 0;
+ break;
+ }
+ TYPELIB_DANGER_RELEASE( pTD );
+ }
+ } // else perform queryInterface()
+ default:
+ // dependent dispatch
+ cpp_call(
+ pThis, aVtableSlot,
+ ((typelib_InterfaceMethodTypeDescription *)pMemberDescr)->pReturnTypeRef,
+ ((typelib_InterfaceMethodTypeDescription *)pMemberDescr)->nParams,
+ ((typelib_InterfaceMethodTypeDescription *)pMemberDescr)->pParams,
+ pReturn, pArgs, ppException );
+ }
+ break;
+ }
+ default:
+ {
+ ::com::sun::star::uno::RuntimeException aExc(
+ OUString( RTL_CONSTASCII_USTRINGPARAM("illegal member type description!") ),
+ ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >() );
+
+ Type const & rExcType = ::getCppuType( &aExc );
+ // binary identical null reference
+ ::uno_type_any_construct( *ppException, &aExc, rExcType.getTypeLibType(), 0 );
+ }
+ }
+}
+
+} } }
+/* vi:set tabstop=4 shiftwidth=4 expandtab: */
diff --git a/bridges/source/cpp_uno/gcc3_linux_arm/armhelper.S b/bridges/source/cpp_uno/gcc3_linux_arm/armhelper.S
new file mode 100644
index 000000000000..d5faf15eed6f
--- /dev/null
+++ b/bridges/source/cpp_uno/gcc3_linux_arm/armhelper.S
@@ -0,0 +1,38 @@
+@ ARM support code for OpenOffice C++/UNO bridging
+@
+@ Written by Peter Naulls <peter@chocky.org>
+@ Modified by Caolan McNamara <caolanm@redhat.com>
+@ Fixed by Michael Casadevall <mcasadevall@kubuntu.org>
+
+#ifdef __ARM_EABI__
+# define UNWIND
+#else
+# define UNWIND @
+#endif
+
+ .file "armhelper.s"
+ .text
+ .align 4
+ .global privateSnippetExecutor
+ .type privateSnippetExecutor, %function
+privateSnippetExecutor:
+ UNWIND .fnstart @ start of unwinder entry
+
+ stmfd sp!, {r0-r3} @ follow other parameters on stack
+ UNWIND .pad #16 @ throw this data away on exception
+ mov r0, ip @ r0 points to functionoffset/vtable
+ mov r1, sp @ r1 points to this and params
+ @ (see cppuno.cxx:codeSnippet())
+ stmfd sp!, {r4,lr} @ save return address
+ @ (r4 pushed to preserve stack alignment)
+ UNWIND .save {r4,lr} @ restore these regs on exception
+
+ bl cpp_vtable_call(PLT)
+
+ add sp, sp, #4 @ no need to restore r4 (we didn't touch it)
+ ldr pc, [sp], #20 @ return, discarding function arguments
+
+ UNWIND .fnend @ end of unwinder entry
+
+ .size privateSnippetExecutor, . - privateSnippetExecutor
+ .section .note.GNU-stack,"",%progbits
diff --git a/bridges/source/cpp_uno/gcc3_linux_arm/cpp2uno.cxx b/bridges/source/cpp_uno/gcc3_linux_arm/cpp2uno.cxx
new file mode 100644
index 000000000000..0e801ab4433e
--- /dev/null
+++ b/bridges/source/cpp_uno/gcc3_linux_arm/cpp2uno.cxx
@@ -0,0 +1,550 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <malloc.h>
+#include <hash_map>
+
+#include <rtl/alloc.h>
+#include <osl/mutex.hxx>
+
+#include <com/sun/star/uno/genfunc.hxx>
+#include "com/sun/star/uno/RuntimeException.hpp"
+#include <uno/data.h>
+#include <typelib/typedescription.hxx>
+
+#include "bridges/cpp_uno/shared/bridge.hxx"
+#include "bridges/cpp_uno/shared/cppinterfaceproxy.hxx"
+#include "bridges/cpp_uno/shared/types.hxx"
+#include "bridges/cpp_uno/shared/vtablefactory.hxx"
+
+#include "share.hxx"
+
+#include <dlfcn.h>
+
+
+using namespace ::osl;
+using namespace ::rtl;
+using namespace ::com::sun::star::uno;
+
+namespace
+{
+
+ static typelib_TypeClass cpp2uno_call(
+ bridges::cpp_uno::shared::CppInterfaceProxy* pThis,
+ const typelib_TypeDescription * pMemberTypeDescr,
+ typelib_TypeDescriptionReference * pReturnTypeRef,
+ sal_Int32 nParams, typelib_MethodParameter * pParams,
+ void ** pCallStack,
+ sal_Int64 * pRegisterReturn /* space for register return */ )
+ {
+ // pCallStack: ret, [return ptr], this, params
+ char * pTopStack = (char *)(pCallStack + 0);
+ char * pCppStack = pTopStack;
+
+ // return
+ typelib_TypeDescription * pReturnTypeDescr = 0;
+ if (pReturnTypeRef)
+ TYPELIB_DANGER_GET( &pReturnTypeDescr, pReturnTypeRef );
+
+ void * pUnoReturn = 0;
+ // complex return ptr: if != 0 && != pUnoReturn, reconversion need
+ void * pCppReturn = 0;
+
+ if (pReturnTypeDescr)
+ {
+ if (!arm::return_in_hidden_param(pReturnTypeRef))
+ pUnoReturn = pRegisterReturn; // direct way for simple types
+ else // complex return via ptr (pCppReturn)
+ {
+ pCppReturn = *(void **)pCppStack;
+ pCppStack += sizeof(void *);
+
+ pUnoReturn = (bridges::cpp_uno::shared::relatesToInterfaceType(
+ pReturnTypeDescr )
+ ? alloca( pReturnTypeDescr->nSize )
+ : pCppReturn); // direct way
+ }
+ }
+ // pop this
+ pCppStack += sizeof( void* );
+
+ // stack space
+ OSL_ENSURE( sizeof(void *) == sizeof(sal_Int32),
+ "### unexpected size!" );
+ // parameters
+ void ** pUnoArgs = (void **)alloca( 4 * sizeof(void *) * nParams );
+ void ** pCppArgs = pUnoArgs + nParams;
+ // indizes of values this have to be converted (interface conversion
+ // cpp<=>uno)
+ sal_Int32 * pTempIndizes = (sal_Int32 *)(pUnoArgs + (2 * nParams));
+ // type descriptions for reconversions
+ typelib_TypeDescription ** ppTempParamTypeDescr =
+ (typelib_TypeDescription **)(pUnoArgs + (3 * nParams));
+
+ sal_Int32 nTempIndizes = 0;
+
+ for ( sal_Int32 nPos = 0; nPos < nParams; ++nPos )
+ {
+ const typelib_MethodParameter & rParam = pParams[nPos];
+ typelib_TypeDescription * pParamTypeDescr = 0;
+ TYPELIB_DANGER_GET( &pParamTypeDescr, rParam.pTypeRef );
+
+ if (!rParam.bOut &&
+ bridges::cpp_uno::shared::isSimpleType( pParamTypeDescr ))
+ {
+#ifdef __ARM_EABI__
+ switch (pParamTypeDescr->eTypeClass)
+ {
+ case typelib_TypeClass_HYPER:
+ case typelib_TypeClass_UNSIGNED_HYPER:
+ case typelib_TypeClass_DOUBLE:
+ if ((pCppStack - pTopStack) % 8) pCppStack+=sizeof(sal_Int32); //align to 8
+ break;
+ default:
+ break;
+ }
+#endif
+
+ pCppArgs[nPos] = pCppStack;
+ pUnoArgs[nPos] = pCppStack;
+ switch (pParamTypeDescr->eTypeClass)
+ {
+ case typelib_TypeClass_HYPER:
+ case typelib_TypeClass_UNSIGNED_HYPER:
+ case typelib_TypeClass_DOUBLE:
+ pCppStack += sizeof(sal_Int32); // extra long
+ break;
+ default:
+ break;
+ }
+ // no longer needed
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ else // ptr to complex value | ref
+ {
+ pCppArgs[nPos] = *(void **)pCppStack;
+
+ if (! rParam.bIn) // is pure out
+ {
+ // uno out is unconstructed mem!
+ pUnoArgs[nPos] = alloca( pParamTypeDescr->nSize );
+ pTempIndizes[nTempIndizes] = nPos;
+ // will be released at reconversion
+ ppTempParamTypeDescr[nTempIndizes++] = pParamTypeDescr;
+ }
+ // is in/inout
+ else if (bridges::cpp_uno::shared::relatesToInterfaceType(
+ pParamTypeDescr ))
+ {
+ uno_copyAndConvertData( pUnoArgs[nPos] =
+ alloca( pParamTypeDescr->nSize ),
+ *(void **)pCppStack, pParamTypeDescr,
+ pThis->getBridge()->getCpp2Uno() );
+ pTempIndizes[nTempIndizes] = nPos; // has to be reconverted
+ // will be released at reconversion
+ ppTempParamTypeDescr[nTempIndizes++] = pParamTypeDescr;
+ }
+ else // direct way
+ {
+ pUnoArgs[nPos] = *(void **)pCppStack;
+ // no longer needed
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ }
+ pCppStack += sizeof(sal_Int32); // standard parameter length
+ }
+
+ // ExceptionHolder
+ uno_Any aUnoExc; // Any will be constructed by callee
+ uno_Any * pUnoExc = &aUnoExc;
+
+ // invoke uno dispatch call
+ (*pThis->getUnoI()->pDispatcher)(
+ pThis->getUnoI(), pMemberTypeDescr, pUnoReturn, pUnoArgs, &pUnoExc );
+
+ // in case an exception occured...
+ if (pUnoExc)
+ {
+ // destruct temporary in/inout params
+ for ( ; nTempIndizes--; )
+ {
+ sal_Int32 nIndex = pTempIndizes[nTempIndizes];
+
+ if (pParams[nIndex].bIn) // is in/inout => was constructed
+ uno_destructData( pUnoArgs[nIndex],
+ ppTempParamTypeDescr[nTempIndizes], 0 );
+ TYPELIB_DANGER_RELEASE( ppTempParamTypeDescr[nTempIndizes] );
+ }
+ if (pReturnTypeDescr)
+ TYPELIB_DANGER_RELEASE( pReturnTypeDescr );
+
+ CPPU_CURRENT_NAMESPACE::raiseException( &aUnoExc,
+ pThis->getBridge()->getUno2Cpp() ); // has to destruct the any
+ // is here for dummy
+ return typelib_TypeClass_VOID;
+ }
+ else // else no exception occured...
+ {
+ // temporary params
+ for ( ; nTempIndizes--; )
+ {
+ sal_Int32 nIndex = pTempIndizes[nTempIndizes];
+ typelib_TypeDescription * pParamTypeDescr =
+ ppTempParamTypeDescr[nTempIndizes];
+
+ if (pParams[nIndex].bOut) // inout/out
+ {
+ // convert and assign
+ uno_destructData( pCppArgs[nIndex], pParamTypeDescr,
+ cpp_release );
+ uno_copyAndConvertData( pCppArgs[nIndex], pUnoArgs[nIndex],
+ pParamTypeDescr, pThis->getBridge()->getUno2Cpp() );
+ }
+ // destroy temp uno param
+ uno_destructData( pUnoArgs[nIndex], pParamTypeDescr, 0 );
+
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ // return
+ if (pCppReturn) // has complex return
+ {
+ if (pUnoReturn != pCppReturn) // needs reconversion
+ {
+ uno_copyAndConvertData( pCppReturn, pUnoReturn,
+ pReturnTypeDescr, pThis->getBridge()->getUno2Cpp() );
+ // destroy temp uno return
+ uno_destructData( pUnoReturn, pReturnTypeDescr, 0 );
+ }
+ // complex return ptr is set to eax
+ *(void **)pRegisterReturn = pCppReturn;
+ }
+ if (pReturnTypeDescr)
+ {
+ typelib_TypeClass eRet =
+ (typelib_TypeClass)pReturnTypeDescr->eTypeClass;
+ TYPELIB_DANGER_RELEASE( pReturnTypeDescr );
+ return eRet;
+ }
+ else
+ return typelib_TypeClass_VOID;
+ }
+ }
+
+
+ //=====================================================================
+ static typelib_TypeClass cpp_mediate(
+ sal_Int32 nFunctionIndex, sal_Int32 nVtableOffset,
+ void ** pCallStack,
+ sal_Int64 * pRegisterReturn /* space for register return */ )
+ {
+ OSL_ENSURE( sizeof(sal_Int32)==sizeof(void *), "### unexpected!" );
+
+ // pCallStack: [ret *], this, params
+ // _this_ ptr is patched cppu_XInterfaceProxy object
+ void *pThis;
+ if( nFunctionIndex & 0x80000000 )
+ {
+ nFunctionIndex &= 0x7fffffff;
+ pThis = pCallStack[1];
+ }
+ else
+ {
+ pThis = pCallStack[0];
+ }
+
+ pThis = static_cast< char * >(pThis) - nVtableOffset;
+ bridges::cpp_uno::shared::CppInterfaceProxy * pCppI =
+ bridges::cpp_uno::shared::CppInterfaceProxy::castInterfaceToProxy(
+ pThis);
+
+ typelib_InterfaceTypeDescription * pTypeDescr = pCppI->getTypeDescr();
+
+ OSL_ENSURE( nFunctionIndex < pTypeDescr->nMapFunctionIndexToMemberIndex,
+ "### illegal vtable index!" );
+ if (nFunctionIndex >= pTypeDescr->nMapFunctionIndexToMemberIndex)
+ {
+ throw RuntimeException(
+ OUString::createFromAscii("illegal vtable index!"),
+ (XInterface *)pCppI );
+ }
+
+ // determine called method
+ OSL_ENSURE( nFunctionIndex < pTypeDescr->nMapFunctionIndexToMemberIndex,
+ "### illegal vtable index!" );
+ sal_Int32 nMemberPos =
+ pTypeDescr->pMapFunctionIndexToMemberIndex[nFunctionIndex];
+ OSL_ENSURE( nMemberPos < pTypeDescr->nAllMembers,
+ "### illegal member index!" );
+
+ TypeDescription aMemberDescr( pTypeDescr->ppAllMembers[nMemberPos] );
+
+ typelib_TypeClass eRet;
+ switch (aMemberDescr.get()->eTypeClass)
+ {
+ case typelib_TypeClass_INTERFACE_ATTRIBUTE:
+ {
+ if (pTypeDescr->pMapMemberIndexToFunctionIndex[nMemberPos] ==
+ nFunctionIndex)
+ {
+ // is GET method
+ eRet = cpp2uno_call(
+ pCppI, aMemberDescr.get(),
+ ((typelib_InterfaceAttributeTypeDescription *)aMemberDescr.get())->pAttributeTypeRef,
+ 0, 0, // no params
+ pCallStack, pRegisterReturn );
+ }
+ else
+ {
+ // is SET method
+ typelib_MethodParameter aParam;
+ aParam.pTypeRef =
+ ((typelib_InterfaceAttributeTypeDescription *)aMemberDescr.get())->pAttributeTypeRef;
+ aParam.bIn = sal_True;
+ aParam.bOut = sal_False;
+
+ eRet = cpp2uno_call(
+ pCppI, aMemberDescr.get(),
+ 0, // indicates void return
+ 1, &aParam,
+ pCallStack, pRegisterReturn );
+ }
+ break;
+ }
+ case typelib_TypeClass_INTERFACE_METHOD:
+ {
+ // is METHOD
+ switch (nFunctionIndex)
+ {
+ case 1: // acquire()
+ pCppI->acquireProxy(); // non virtual call!
+ eRet = typelib_TypeClass_VOID;
+ break;
+ case 2: // release()
+ pCppI->releaseProxy(); // non virtual call!
+ eRet = typelib_TypeClass_VOID;
+ break;
+ case 0: // queryInterface() opt
+ {
+ typelib_TypeDescription * pTD = 0;
+ TYPELIB_DANGER_GET(&pTD,
+ reinterpret_cast<Type *>(pCallStack[2])->getTypeLibType());
+ if (pTD)
+ {
+ XInterface * pInterface = 0;
+ (*pCppI->getBridge()->getCppEnv()->getRegisteredInterface)(
+ pCppI->getBridge()->getCppEnv(),
+ (void **)&pInterface, pCppI->getOid().pData,
+ (typelib_InterfaceTypeDescription *)pTD );
+
+ if (pInterface)
+ {
+ ::uno_any_construct(
+ reinterpret_cast< uno_Any * >( pCallStack[0] ),
+ &pInterface, pTD, cpp_acquire );
+ pInterface->release();
+ TYPELIB_DANGER_RELEASE( pTD );
+ *(void **)pRegisterReturn = pCallStack[0];
+ eRet = typelib_TypeClass_ANY;
+ break;
+ }
+ TYPELIB_DANGER_RELEASE( pTD );
+ }
+ } // else perform queryInterface()
+ default:
+ eRet = cpp2uno_call(
+ pCppI, aMemberDescr.get(),
+ ((typelib_InterfaceMethodTypeDescription *)aMemberDescr.get())->pReturnTypeRef,
+ ((typelib_InterfaceMethodTypeDescription *)aMemberDescr.get())->nParams,
+ ((typelib_InterfaceMethodTypeDescription *)aMemberDescr.get())->pParams,
+ pCallStack, pRegisterReturn );
+ }
+ break;
+ }
+ default:
+ {
+ throw RuntimeException(
+ OUString::createFromAscii("no member description found!"),
+ (XInterface *)pCppI );
+ // is here for dummy
+ eRet = typelib_TypeClass_VOID;
+ }
+ }
+
+ return eRet;
+ }
+}
+
+//=======================================================================
+/**
+ * is called on incoming vtable calls
+ * (called by asm snippets)
+ */
+
+extern "C" sal_Int64 cpp_vtable_call( long *pFunctionAndOffset,
+ void **pCallStack )
+{
+ sal_Int64 nRegReturn;
+ typelib_TypeClass aType = cpp_mediate( pFunctionAndOffset[0], pFunctionAndOffset[1], pCallStack,
+ &nRegReturn );
+
+ switch( aType )
+ {
+ case typelib_TypeClass_BOOLEAN:
+ case typelib_TypeClass_BYTE:
+ nRegReturn = (unsigned long)(*(unsigned char *)&nRegReturn);
+ break;
+ case typelib_TypeClass_CHAR:
+ case typelib_TypeClass_UNSIGNED_SHORT:
+ case typelib_TypeClass_SHORT:
+ nRegReturn = (unsigned long)(*(unsigned short *)&nRegReturn);
+ break;
+ case typelib_TypeClass_ENUM:
+ case typelib_TypeClass_UNSIGNED_LONG:
+ case typelib_TypeClass_LONG:
+ nRegReturn = (unsigned long)(*(unsigned int *)&nRegReturn);
+ break;
+ case typelib_TypeClass_VOID:
+ default:
+ break;
+ }
+
+ return nRegReturn;
+}
+
+extern "C" void privateSnippetExecutor(void);
+
+namespace
+{
+ const int codeSnippetSize = 20;
+
+ unsigned char *codeSnippet(unsigned char* code, sal_Int32 functionIndex,
+ sal_Int32 vtableOffset, bool bHasHiddenParam)
+ {
+ if (bHasHiddenParam)
+ functionIndex |= 0x80000000;
+
+ unsigned long * p = (unsigned long *)code;
+
+ *p++ = 0xE1A0C00F;
+ *p++ = 0xE59FF004;
+ *p++ = (unsigned long)functionIndex;
+ *p++ = (unsigned long)vtableOffset;
+ *p++ = (unsigned long)privateSnippetExecutor;
+
+ return code + codeSnippetSize;
+ }
+}
+
+struct bridges::cpp_uno::shared::VtableFactory::Slot { void * fn; };
+
+bridges::cpp_uno::shared::VtableFactory::Slot *
+bridges::cpp_uno::shared::VtableFactory::mapBlockToVtable(void * block)
+{
+ return static_cast< Slot * >(block) + 2;
+}
+
+sal_Size bridges::cpp_uno::shared::VtableFactory::getBlockSize(
+ sal_Int32 slotCount)
+{
+ return (slotCount + 2) * sizeof (Slot) + slotCount * codeSnippetSize;
+}
+
+bridges::cpp_uno::shared::VtableFactory::Slot *
+bridges::cpp_uno::shared::VtableFactory::initializeBlock(
+ void * block, sal_Int32 slotCount)
+{
+ Slot * slots = mapBlockToVtable(block);
+ slots[-2].fn = 0;
+ slots[-1].fn = 0;
+ return slots + slotCount;
+}
+
+unsigned char * bridges::cpp_uno::shared::VtableFactory::addLocalFunctions(
+ Slot ** slots, unsigned char * code, sal_PtrDiff writetoexecdiff,
+ typelib_InterfaceTypeDescription const * type, sal_Int32 functionOffset,
+ sal_Int32 functionCount, sal_Int32 vtableOffset)
+{
+ (*slots) -= functionCount;
+ Slot * s = *slots;
+ for (sal_Int32 i = 0; i < type->nMembers; ++i)
+ {
+ typelib_TypeDescription * member = 0;
+ TYPELIB_DANGER_GET(&member, type->ppMembers[i]);
+ OSL_ASSERT(member != 0);
+ switch (member->eTypeClass)
+ {
+ case typelib_TypeClass_INTERFACE_ATTRIBUTE:
+ {
+ typelib_InterfaceAttributeTypeDescription *pAttrTD =
+ reinterpret_cast<typelib_InterfaceAttributeTypeDescription *>( member );
+
+ // Getter:
+ (s++)->fn = code + writetoexecdiff;
+ code = codeSnippet(
+ code, functionOffset++, vtableOffset,
+ arm::return_in_hidden_param( pAttrTD->pAttributeTypeRef ));
+
+ // Setter:
+ if (!pAttrTD->bReadOnly)
+ {
+ (s++)->fn = code + writetoexecdiff;
+ code = codeSnippet(
+ code, functionOffset++, vtableOffset, false);
+ }
+ break;
+ }
+ case typelib_TypeClass_INTERFACE_METHOD:
+ {
+ (s++)->fn = code + writetoexecdiff;
+
+ typelib_InterfaceMethodTypeDescription *pMethodTD =
+ reinterpret_cast<
+ typelib_InterfaceMethodTypeDescription * >(member);
+
+ code = codeSnippet(code, functionOffset++, vtableOffset,
+ arm::return_in_hidden_param(pMethodTD->pReturnTypeRef));
+ break;
+ }
+ default:
+ OSL_ASSERT(false);
+ break;
+ }
+ TYPELIB_DANGER_RELEASE(member);
+ }
+ return code;
+}
+
+void bridges::cpp_uno::shared::VtableFactory::flushCode(
+ unsigned char const *beg, unsigned char const *end)
+{
+ static void (*clear_cache)(unsigned char const*, unsigned char const*)
+ = (void (*)(unsigned char const*, unsigned char const*))
+ dlsym(RTLD_DEFAULT, "__clear_cache");
+ (*clear_cache)(beg, end);
+}
+
+/* vi:set tabstop=4 shiftwidth=4 expandtab: */
diff --git a/bridges/source/cpp_uno/gcc3_linux_arm/except.cxx b/bridges/source/cpp_uno/gcc3_linux_arm/except.cxx
new file mode 100644
index 000000000000..ec1e671a72ba
--- /dev/null
+++ b/bridges/source/cpp_uno/gcc3_linux_arm/except.cxx
@@ -0,0 +1,341 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <stdio.h>
+#include <string.h>
+#include <dlfcn.h>
+#include <cxxabi.h>
+#include <hash_map>
+
+#include <rtl/strbuf.hxx>
+#include <rtl/ustrbuf.hxx>
+#include <osl/diagnose.h>
+#include <osl/mutex.hxx>
+
+#include <com/sun/star/uno/genfunc.hxx>
+#include "com/sun/star/uno/RuntimeException.hpp"
+#include <typelib/typedescription.hxx>
+#include <uno/any2.h>
+
+#include "share.hxx"
+
+
+using namespace ::std;
+using namespace ::osl;
+using namespace ::rtl;
+using namespace ::com::sun::star::uno;
+using namespace ::__cxxabiv1;
+
+extern sal_Int32 * pHack;
+extern sal_Int32 nHack;
+
+namespace CPPU_CURRENT_NAMESPACE
+{
+ void dummy_can_throw_anything( char const * )
+ {
+ }
+
+ //===================================================================
+ static OUString toUNOname( char const * p ) SAL_THROW( () )
+ {
+#if OSL_DEBUG_LEVEL > 1
+ char const * start = p;
+#endif
+
+ // example: N3com3sun4star4lang24IllegalArgumentExceptionE
+
+ OUStringBuffer buf( 64 );
+ OSL_ASSERT( 'N' == *p );
+ ++p; // skip N
+
+ while ('E' != *p)
+ {
+ // read chars count
+ long n = (*p++ - '0');
+ while ('0' <= *p && '9' >= *p)
+ {
+ n *= 10;
+ n += (*p++ - '0');
+ }
+ buf.appendAscii( p, n );
+ p += n;
+ if ('E' != *p)
+ buf.append( (sal_Unicode)'.' );
+ }
+
+#if OSL_DEBUG_LEVEL > 1
+ OUString ret( buf.makeStringAndClear() );
+ OString c_ret( OUStringToOString( ret, RTL_TEXTENCODING_ASCII_US ) );
+ fprintf( stderr, "> toUNOname(): %s => %s\n", start, c_ret.getStr() );
+ return ret;
+#else
+ return buf.makeStringAndClear();
+#endif
+ }
+
+ //=====================================================================
+ class RTTI
+ {
+ typedef hash_map< OUString, type_info *, OUStringHash > t_rtti_map;
+
+ Mutex m_mutex;
+ t_rtti_map m_rttis;
+ t_rtti_map m_generatedRttis;
+
+ void * m_hApp;
+
+ public:
+ RTTI() SAL_THROW( () );
+ ~RTTI() SAL_THROW( () );
+
+ type_info * getRTTI(typelib_CompoundTypeDescription *) SAL_THROW( () );
+ };
+ //____________________________________________________________________
+ RTTI::RTTI() SAL_THROW( () )
+ : m_hApp( dlopen( 0, RTLD_LAZY ) )
+ {
+ }
+ //____________________________________________________________________
+ RTTI::~RTTI() SAL_THROW( () )
+ {
+ dlclose( m_hApp );
+ }
+
+ //____________________________________________________________________
+ type_info * RTTI::getRTTI( typelib_CompoundTypeDescription *pTypeDescr ) SAL_THROW( () )
+ {
+ type_info * rtti;
+
+ OUString const & unoName = *(OUString const *)&pTypeDescr->aBase.pTypeName;
+
+ MutexGuard guard( m_mutex );
+ t_rtti_map::const_iterator iFind( m_rttis.find( unoName ) );
+ if (iFind == m_rttis.end())
+ {
+ // RTTI symbol
+ OStringBuffer buf( 64 );
+ buf.append( RTL_CONSTASCII_STRINGPARAM("_ZTIN") );
+ sal_Int32 index = 0;
+ do
+ {
+ OUString token( unoName.getToken( 0, '.', index ) );
+ buf.append( token.getLength() );
+ OString c_token( OUStringToOString( token, RTL_TEXTENCODING_ASCII_US ) );
+ buf.append( c_token );
+ }
+ while (index >= 0);
+ buf.append( 'E' );
+
+ OString symName( buf.makeStringAndClear() );
+ rtti = (type_info *)dlsym( m_hApp, symName.getStr() );
+
+ if (rtti)
+ {
+ pair< t_rtti_map::iterator, bool > insertion(
+ m_rttis.insert( t_rtti_map::value_type( unoName, rtti ) ) );
+ OSL_ENSURE( insertion.second, "### inserting new rtti failed?!" );
+ }
+ else
+ {
+ // try to lookup the symbol in the generated rtti map
+ t_rtti_map::const_iterator iFind2( m_generatedRttis.find( unoName ) );
+ if (iFind2 == m_generatedRttis.end())
+ {
+ // we must generate it !
+ // symbol and rtti-name is nearly identical,
+ // the symbol is prefixed with _ZTI
+ char const * rttiName = symName.getStr() +4;
+#if OSL_DEBUG_LEVEL > 1
+ fprintf( stderr,"generated rtti for %s\n", rttiName );
+#endif
+ if (pTypeDescr->pBaseTypeDescription)
+ {
+ // ensure availability of base
+ type_info * base_rtti = getRTTI(
+ (typelib_CompoundTypeDescription *)pTypeDescr->pBaseTypeDescription );
+ rtti = new __si_class_type_info(
+ strdup( rttiName ), (__class_type_info *)base_rtti );
+ }
+ else
+ {
+ // this class has no base class
+ rtti = new __class_type_info( strdup( rttiName ) );
+ }
+
+ pair< t_rtti_map::iterator, bool > insertion(
+ m_generatedRttis.insert( t_rtti_map::value_type( unoName, rtti ) ) );
+ OSL_ENSURE( insertion.second, "### inserting new generated rtti failed?!" );
+ }
+ else // taking already generated rtti
+ {
+ rtti = iFind2->second;
+ }
+ }
+ }
+ else
+ {
+ rtti = iFind->second;
+ }
+
+ return rtti;
+ }
+
+ //------------------------------------------------------------------
+ static void deleteException( void * pExc )
+ {
+ __cxa_exception const * header = ((__cxa_exception const *)pExc - 1);
+ typelib_TypeDescription * pTD = 0;
+ OUString unoName( toUNOname( header->exceptionType->name() ) );
+ ::typelib_typedescription_getByName( &pTD, unoName.pData );
+ OSL_ENSURE( pTD, "### unknown exception type! leaving out destruction => leaking!!!" );
+ if (pTD)
+ {
+ ::uno_destructData( pExc, pTD, cpp_release );
+ ::typelib_typedescription_release( pTD );
+ }
+ }
+
+ //==================================================================
+ void raiseException( uno_Any * pUnoExc, uno_Mapping * pUno2Cpp )
+ {
+#if OSL_DEBUG_LEVEL > 1
+ OString cstr(
+ OUStringToOString(
+ *reinterpret_cast< OUString const * >( &pUnoExc->pType->pTypeName ),
+ RTL_TEXTENCODING_ASCII_US ) );
+ fprintf( stderr, "> uno exception occured: %s\n", cstr.getStr() );
+#endif
+ void * pCppExc;
+ type_info * rtti;
+
+ {
+ // construct cpp exception object
+ typelib_TypeDescription * pTypeDescr = 0;
+ TYPELIB_DANGER_GET( &pTypeDescr, pUnoExc->pType );
+ OSL_ASSERT( pTypeDescr );
+ if (! pTypeDescr)
+ {
+ throw RuntimeException(
+ OUString( RTL_CONSTASCII_USTRINGPARAM("cannot get typedescription for type ") ) +
+ *reinterpret_cast< OUString const * >( &pUnoExc->pType->pTypeName ),
+ Reference< XInterface >() );
+ }
+
+ pCppExc = __cxa_allocate_exception( pTypeDescr->nSize );
+ ::uno_copyAndConvertData( pCppExc, pUnoExc->pData, pTypeDescr, pUno2Cpp );
+
+ // destruct uno exception
+ ::uno_any_destruct( pUnoExc, 0 );
+ // avoiding locked counts
+ static RTTI * s_rtti = 0;
+ if (! s_rtti)
+ {
+ MutexGuard guard( Mutex::getGlobalMutex() );
+ if (! s_rtti)
+ {
+#ifdef LEAK_STATIC_DATA
+ s_rtti = new RTTI();
+#else
+ static RTTI rtti_data;
+ s_rtti = &rtti_data;
+#endif
+ }
+ }
+ rtti = (type_info *)s_rtti->getRTTI( (typelib_CompoundTypeDescription *) pTypeDescr );
+ TYPELIB_DANGER_RELEASE( pTypeDescr );
+ OSL_ENSURE( rtti, "### no rtti for throwing exception!" );
+ if (! rtti)
+ {
+ throw RuntimeException(
+ OUString( RTL_CONSTASCII_USTRINGPARAM("no rtti for type ") ) +
+ *reinterpret_cast< OUString const * >( &pUnoExc->pType->pTypeName ),
+ Reference< XInterface >() );
+ }
+ }
+
+
+ __cxa_throw( pCppExc, rtti, deleteException );
+ }
+
+#ifdef __ARM_EABI__
+ static void* getAdjustedPtr(__cxa_exception* header)
+ {
+ return (void*)header->unwindHeader.barrier_cache.bitpattern[0];
+ }
+#else
+ static void* getAdjustedPtr(__cxa_exception* header)
+ {
+ return header->adjustedPtr;
+ }
+#endif
+
+ //===================================================================
+ void fillUnoException( __cxa_exception * header, uno_Any * pUnoExc, uno_Mapping * pCpp2Uno )
+ {
+ if (! header)
+ {
+ RuntimeException aRE(
+ OUString( RTL_CONSTASCII_USTRINGPARAM("no exception header!") ),
+ Reference< XInterface >() );
+ Type const & rType = ::getCppuType( &aRE );
+ uno_type_any_constructAndConvert( pUnoExc, &aRE, rType.getTypeLibType(), pCpp2Uno );
+#if OSL_DEBUG_LEVEL > 0
+ OString cstr( OUStringToOString( aRE.Message, RTL_TEXTENCODING_ASCII_US ) );
+ OSL_ENSURE( 0, cstr.getStr() );
+#endif
+ return;
+ }
+
+ typelib_TypeDescription * pExcTypeDescr = 0;
+ OUString unoName( toUNOname( header->exceptionType->name() ) );
+#if OSL_DEBUG_LEVEL > 1
+ OString cstr_unoName( OUStringToOString( unoName, RTL_TEXTENCODING_ASCII_US ) );
+ fprintf( stderr, "> c++ exception occured: %s\n", cstr_unoName.getStr() );
+#endif
+ typelib_typedescription_getByName( &pExcTypeDescr, unoName.pData );
+ if (0 == pExcTypeDescr)
+ {
+ RuntimeException aRE(
+ OUString( RTL_CONSTASCII_USTRINGPARAM("exception type not found: ") ) + unoName,
+ Reference< XInterface >() );
+ Type const & rType = ::getCppuType( &aRE );
+ uno_type_any_constructAndConvert( pUnoExc, &aRE, rType.getTypeLibType(), pCpp2Uno );
+#if OSL_DEBUG_LEVEL > 0
+ OString cstr( OUStringToOString( aRE.Message, RTL_TEXTENCODING_ASCII_US ) );
+ OSL_ENSURE( 0, cstr.getStr() );
+#endif
+ }
+ else
+ {
+ // construct uno exception any
+ uno_any_constructAndConvert( pUnoExc, getAdjustedPtr(header), pExcTypeDescr, pCpp2Uno );
+ typelib_typedescription_release( pExcTypeDescr );
+ }
+ }
+}
+
+/* vi:set tabstop=4 shiftwidth=4 expandtab: */
diff --git a/bridges/source/cpp_uno/gcc3_linux_arm/makefile.mk b/bridges/source/cpp_uno/gcc3_linux_arm/makefile.mk
new file mode 100644
index 000000000000..0900ec11f41f
--- /dev/null
+++ b/bridges/source/cpp_uno/gcc3_linux_arm/makefile.mk
@@ -0,0 +1,84 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..$/..$/..
+
+PRJNAME=bridges
+TARGET=gcc3_uno
+LIBTARGET=no
+ENABLE_EXCEPTIONS=TRUE
+NO_BSYMBOLIC=TRUE
+
+# --- Settings -----------------------------------------------------
+
+.INCLUDE : settings.mk
+
+# --- Files --------------------------------------------------------
+
+.IF "$(COM)$(OS)$(CPU)$(COMNAME)" == "GCCLINUXRgcc3"
+
+.IF "$(cppu_no_leak)" == ""
+CFLAGS += -DLEAK_STATIC_DATA
+.ENDIF
+
+CFLAGSCXX += -fno-omit-frame-pointer
+
+NOOPTFILES= \
+ $(SLO)$/cpp2uno.obj \
+ $(SLO)$/except.obj \
+ $(SLO)$/uno2cpp.obj
+
+CFLAGSNOOPT=-O0
+
+SLOFILES= \
+ $(SLO)$/cpp2uno.obj \
+ $(SLO)$/except.obj \
+ $(SLO)$/uno2cpp.obj \
+ $(SLO)$/armhelper.obj
+
+SHL1TARGET= $(TARGET)
+
+SHL1DEF=$(MISC)$/$(SHL1TARGET).def
+SHL1IMPLIB=i$(TARGET)
+SHL1VERSIONMAP=..$/..$/bridge_exports.map
+SHL1RPATH=URELIB
+
+SHL1OBJS = $(SLOFILES)
+SHL1LIBS = $(SLB)$/cpp_uno_shared.lib
+
+SHL1STDLIBS= \
+ $(CPPULIB) \
+ $(SALLIB)
+
+.ENDIF
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : target.mk
+
+$(SLO)$/%.obj: %.S
+ $(CXX) -c -o $(SLO)$/$(@:b).o $< -fPIC ; touch $@
diff --git a/bridges/source/cpp_uno/gcc3_linux_arm/share.hxx b/bridges/source/cpp_uno/gcc3_linux_arm/share.hxx
new file mode 100644
index 000000000000..fb72c360fd45
--- /dev/null
+++ b/bridges/source/cpp_uno/gcc3_linux_arm/share.hxx
@@ -0,0 +1,100 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef _ARM_SHARE_HXX
+#define _ARM_SHARE_HXX
+#include "uno/mapping.h"
+
+#include <typeinfo>
+#include <exception>
+#include <cstddef>
+#include <unwind.h>
+
+namespace CPPU_CURRENT_NAMESPACE
+{
+
+ void dummy_can_throw_anything( char const * );
+
+ // -- following decl from libstdc++-v3/libsupc++/unwind-cxx.h and unwind.h
+
+ struct __cxa_exception
+ {
+ ::std::type_info *exceptionType;
+ void (*exceptionDestructor)(void *);
+
+ ::std::unexpected_handler unexpectedHandler;
+ ::std::terminate_handler terminateHandler;
+
+ __cxa_exception *nextException;
+
+ int handlerCount;
+#ifdef __ARM_EABI__
+ __cxa_exception *nextPropagatingException;
+ int propagationCount;
+#else
+ int handlerSwitchValue;
+ const unsigned char *actionRecord;
+ const unsigned char *languageSpecificData;
+ void *catchTemp;
+ void *adjustedPtr;
+#endif
+ _Unwind_Exception unwindHeader;
+ };
+
+ extern "C" void *__cxa_allocate_exception(
+ std::size_t thrown_size ) throw();
+ extern "C" void __cxa_throw (
+ void *thrown_exception, std::type_info *tinfo,
+ void (*dest) (void *) ) __attribute__((noreturn));
+
+ struct __cxa_eh_globals
+ {
+ __cxa_exception *caughtExceptions;
+ unsigned int uncaughtExceptions;
+#ifdef __ARM_EABI__
+ __cxa_exception *propagatingExceptions;
+#endif
+ };
+ extern "C" __cxa_eh_globals *__cxa_get_globals () throw();
+
+ // -----
+
+ //====================================================================
+ void raiseException(
+ uno_Any * pUnoExc, uno_Mapping * pUno2Cpp );
+ //====================================================================
+ void fillUnoException(
+ __cxa_exception * header, uno_Any *, uno_Mapping * pCpp2Uno );
+}
+
+namespace arm
+{
+ enum armlimits { MAX_GPR_REGS = 4 };
+ bool return_in_hidden_param( typelib_TypeDescriptionReference *pTypeRef );
+}
+
+#endif
+/* vi:set tabstop=4 shiftwidth=4 expandtab: */
diff --git a/bridges/source/cpp_uno/gcc3_linux_arm/uno2cpp.cxx b/bridges/source/cpp_uno/gcc3_linux_arm/uno2cpp.cxx
new file mode 100644
index 000000000000..be67ed8fd830
--- /dev/null
+++ b/bridges/source/cpp_uno/gcc3_linux_arm/uno2cpp.cxx
@@ -0,0 +1,669 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <malloc.h>
+#include <rtl/alloc.h>
+
+#include <com/sun/star/uno/genfunc.hxx>
+#include "com/sun/star/uno/RuntimeException.hpp"
+#include <uno/data.h>
+
+#include <bridges/cpp_uno/shared/bridge.hxx>
+#include <bridges/cpp_uno/shared/types.hxx>
+#include <bridges/cpp_uno/shared/unointerfaceproxy.hxx>
+#include <bridges/cpp_uno/shared/vtables.hxx>
+
+#include "share.hxx"
+
+#include <stdio.h>
+#include <string.h>
+
+/*
+ * Based on http://gcc.gnu.org/PR41443
+ * References to __SOFTFP__ are incorrect for EABI; the __SOFTFP__ code
+ * should be used for *soft-float ABI* whether or not VFP is enabled,
+ * and __SOFTFP__ does specifically mean soft-float not soft-float ABI.
+ *
+ * Changing the conditionals to __SOFTFP__ || __ARM_EABI__ then
+ * -mfloat-abi=softfp should work. -mfloat-abi=hard won't; that would
+ * need both a new macro to identify the hard-VFP ABI.
+ */
+#if !defined(__ARM_EABI__) && !defined(__SOFTFP__)
+#error Not Implemented
+
+/*
+ some possibly handy code to detect that we have VFP registers
+ */
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <elf.h>
+
+#define HWCAP_ARM_VFP 64
+
+int hasVFP(void)
+{
+ int fd = open ("/proc/self/auxv", O_RDONLY);
+ if (fd == -1)
+ return -1;
+
+ int ret = -1;
+
+ Elf32_auxv_t buf[128];
+ ssize_t n;
+ while ((ret == -1) && ((n = read(fd, buf, sizeof (buf))) > 0))
+ {
+ for (int i = 0; i < 128; ++i)
+ {
+ if (buf[i].a_type == AT_HWCAP)
+ {
+ ret = (buf[i].a_un.a_val & HWCAP_ARM_VFP) ? true : false;
+ break;
+ }
+ else if (buf[i].a_type == AT_NULL)
+ {
+ ret = -2;
+ break;
+ }
+ }
+ }
+
+ close (fd);
+ return ret;
+}
+
+#endif
+
+using namespace ::rtl;
+using namespace ::com::sun::star::uno;
+
+namespace arm
+{
+ bool is_complex_struct(const typelib_TypeDescription * type)
+ {
+ const typelib_CompoundTypeDescription * p
+ = reinterpret_cast< const typelib_CompoundTypeDescription * >(type);
+ for (sal_Int32 i = 0; i < p->nMembers; ++i)
+ {
+ if (p->ppTypeRefs[i]->eTypeClass == typelib_TypeClass_STRUCT ||
+ p->ppTypeRefs[i]->eTypeClass == typelib_TypeClass_EXCEPTION)
+ {
+ typelib_TypeDescription * t = 0;
+ TYPELIB_DANGER_GET(&t, p->ppTypeRefs[i]);
+ bool b = is_complex_struct(t);
+ TYPELIB_DANGER_RELEASE(t);
+ if (b) {
+ return true;
+ }
+ }
+ else if (!bridges::cpp_uno::shared::isSimpleType(p->ppTypeRefs[i]->eTypeClass))
+ return true;
+ }
+ if (p->pBaseTypeDescription != 0)
+ return is_complex_struct(&p->pBaseTypeDescription->aBase);
+ return false;
+ }
+
+ bool return_in_hidden_param( typelib_TypeDescriptionReference *pTypeRef )
+ {
+ if (bridges::cpp_uno::shared::isSimpleType(pTypeRef))
+ return false;
+ else if (pTypeRef->eTypeClass == typelib_TypeClass_STRUCT || pTypeRef->eTypeClass == typelib_TypeClass_EXCEPTION)
+ {
+ typelib_TypeDescription * pTypeDescr = 0;
+ TYPELIB_DANGER_GET( &pTypeDescr, pTypeRef );
+
+ //A Composite Type not larger than 4 bytes is returned in r0
+ bool bRet = pTypeDescr->nSize > 4 || is_complex_struct(pTypeDescr);
+
+ TYPELIB_DANGER_RELEASE( pTypeDescr );
+ return bRet;
+ }
+ return true;
+ }
+}
+
+void MapReturn(sal_uInt32 r0, sal_uInt32 r1, typelib_TypeDescriptionReference * pReturnType, sal_uInt32* pRegisterReturn)
+{
+#if !defined(__ARM_EABI__) && !defined(__SOFTFP__)
+ register float fret asm("f0");
+ register double dret asm("f0");
+#endif
+
+ switch( pReturnType->eTypeClass )
+ {
+ case typelib_TypeClass_HYPER:
+ case typelib_TypeClass_UNSIGNED_HYPER:
+ pRegisterReturn[1] = r1;
+ case typelib_TypeClass_LONG:
+ case typelib_TypeClass_UNSIGNED_LONG:
+ case typelib_TypeClass_ENUM:
+ case typelib_TypeClass_CHAR:
+ case typelib_TypeClass_SHORT:
+ case typelib_TypeClass_UNSIGNED_SHORT:
+ case typelib_TypeClass_BOOLEAN:
+ case typelib_TypeClass_BYTE:
+ pRegisterReturn[0] = r0;
+ break;
+ case typelib_TypeClass_FLOAT:
+#if defined(__ARM_EABI__) || defined(__SOFTFP__)
+ pRegisterReturn[0] = r0;
+#else
+ *(float*)pRegisterReturn = fret;
+#endif
+ break;
+ case typelib_TypeClass_DOUBLE:
+#if defined(__ARM_EABI__) || defined(__SOFTFP__)
+ pRegisterReturn[1] = r1;
+ pRegisterReturn[0] = r0;
+#else
+ *(double*)pRegisterReturn = dret;
+#endif
+ break;
+ case typelib_TypeClass_STRUCT:
+ case typelib_TypeClass_EXCEPTION:
+ {
+ if (!arm::return_in_hidden_param(pReturnType))
+ pRegisterReturn[0] = r0;
+ break;
+ }
+ default:
+ break;
+ }
+}
+
+namespace
+{
+//================================================================
+
+void callVirtualMethod(
+ void * pThis,
+ sal_Int32 nVtableIndex,
+ void * pRegisterReturn,
+ typelib_TypeDescriptionReference * pReturnType,
+ sal_uInt32 *pStack,
+ sal_uInt32 nStack,
+ sal_uInt32 *pGPR,
+ sal_uInt32 nGPR) __attribute__((noinline));
+
+void callVirtualMethod(
+ void * pThis,
+ sal_Int32 nVtableIndex,
+ void * pRegisterReturn,
+ typelib_TypeDescriptionReference * pReturnType,
+ sal_uInt32 *pStack,
+ sal_uInt32 nStack,
+ sal_uInt32 *pGPR,
+ sal_uInt32 nGPR)
+{
+ // never called
+ if (! pThis)
+ CPPU_CURRENT_NAMESPACE::dummy_can_throw_anything("xxx"); // address something
+
+ if ( nStack )
+ {
+ // 8-bytes aligned
+ sal_uInt32 nStackBytes = ( ( nStack + 1 ) >> 1 ) * 8;
+ sal_uInt32 *stack = (sal_uInt32 *) __builtin_alloca( nStackBytes );
+ memcpy( stack, pStack, nStackBytes );
+ }
+
+ // Should not happen, but...
+ if ( nGPR > arm::MAX_GPR_REGS )
+ nGPR = arm::MAX_GPR_REGS;
+
+ sal_uInt32 pMethod = *((sal_uInt32*)pThis);
+ pMethod += 4 * nVtableIndex;
+ pMethod = *((sal_uInt32 *)pMethod);
+
+ typedef void (*FunctionCall )( sal_uInt32, sal_uInt32, sal_uInt32, sal_uInt32);
+ FunctionCall pFunc = (FunctionCall)pMethod;
+
+ (*pFunc)(pGPR[0], pGPR[1], pGPR[2], pGPR[3]);
+
+ sal_uInt32 r0;
+ sal_uInt32 r1;
+
+ // get return value
+ __asm__ __volatile__ (
+ "mov %0, r0\n\t"
+ "mov %1, r1\n\t"
+ : "=r" (r0), "=r" (r1) : );
+
+ MapReturn(r0, r1, pReturnType, (sal_uInt32*)pRegisterReturn);
+}
+}
+
+#define INSERT_INT32( pSV, nr, pGPR, pDS, bOverflow ) \
+ if ( nr < arm::MAX_GPR_REGS ) \
+ pGPR[nr++] = *reinterpret_cast<sal_uInt32 *>( pSV ); \
+ else \
+ bOverFlow = true; \
+ if (bOverFlow) \
+ *pDS++ = *reinterpret_cast<sal_uInt32 *>( pSV );
+
+#ifdef __ARM_EABI__
+#define INSERT_INT64( pSV, nr, pGPR, pDS, pStart, bOverflow ) \
+ if ( (nr < arm::MAX_GPR_REGS) && (nr % 2) ) \
+ { \
+ ++nr; \
+ } \
+ if ( nr < arm::MAX_GPR_REGS ) \
+ { \
+ pGPR[nr++] = *reinterpret_cast<sal_uInt32 *>( pSV ); \
+ pGPR[nr++] = *(reinterpret_cast<sal_uInt32 *>( pSV ) + 1); \
+ } \
+ else \
+ bOverFlow = true; \
+ if (bOverFlow) \
+ { \
+ if ( (pDS - pStart) % 2) \
+ { \
+ ++pDS; \
+ } \
+ *pDS++ = reinterpret_cast<sal_uInt32 *>( pSV )[0]; \
+ *pDS++ = reinterpret_cast<sal_uInt32 *>( pSV )[1]; \
+ }
+#else
+#define INSERT_INT64( pSV, nr, pGPR, pDS, pStart, bOverflow ) \
+ INSERT_INT32( pSV, nr, pGPR, pDS, bOverflow) \
+ INSERT_INT32( ((sal_uInt32*)pSV)+1, nr, pGPR, pDS, bOverflow)
+#endif
+
+#define INSERT_FLOAT( pSV, nr, pFPR, pDS, bOverflow ) \
+ INSERT_INT32( pSV, nr, pGPR, pDS, bOverflow)
+
+#define INSERT_DOUBLE( pSV, nr, pFPR, pDS, pStart, bOverflow ) \
+ INSERT_INT64( pSV, nr, pGPR, pDS, pStart, bOverflow )
+
+#define INSERT_INT16( pSV, nr, pGPR, pDS, bOverflow ) \
+ if ( nr < arm::MAX_GPR_REGS ) \
+ pGPR[nr++] = *reinterpret_cast<sal_uInt16 *>( pSV ); \
+ else \
+ bOverFlow = true; \
+ if (bOverFlow) \
+ *pDS++ = *reinterpret_cast<sal_uInt16 *>( pSV );
+
+#define INSERT_INT8( pSV, nr, pGPR, pDS, bOverflow ) \
+ if ( nr < arm::MAX_GPR_REGS ) \
+ pGPR[nr++] = *reinterpret_cast<sal_uInt8 *>( pSV ); \
+ else \
+ bOverFlow = true; \
+ if (bOverFlow) \
+ *pDS++ = *reinterpret_cast<sal_uInt8 *>( pSV );
+
+namespace {
+//=======================================================================
+static void cpp_call(
+ bridges::cpp_uno::shared::UnoInterfaceProxy * pThis,
+ bridges::cpp_uno::shared::VtableSlot aVtableSlot,
+ typelib_TypeDescriptionReference * pReturnTypeRef,
+ sal_Int32 nParams, typelib_MethodParameter * pParams,
+ void * pUnoReturn, void * pUnoArgs[], uno_Any ** ppUnoExc )
+{
+ // max space for: [complex ret ptr], values|ptr ...
+ sal_uInt32 * pStack = (sal_uInt32 *)__builtin_alloca(
+ sizeof(sal_Int32) + ((nParams+2) * sizeof(sal_Int64)) );
+ sal_uInt32 * pStackStart = pStack;
+
+ sal_uInt32 pGPR[arm::MAX_GPR_REGS];
+ sal_uInt32 nGPR = 0;
+
+ // return
+ typelib_TypeDescription * pReturnTypeDescr = 0;
+ TYPELIB_DANGER_GET( &pReturnTypeDescr, pReturnTypeRef );
+ OSL_ENSURE( pReturnTypeDescr, "### expected return type description!" );
+
+ void * pCppReturn = 0; // if != 0 && != pUnoReturn, needs reconversion
+
+ bool bOverFlow = false;
+ bool bSimpleReturn = true;
+ if (pReturnTypeDescr)
+ {
+ if (arm::return_in_hidden_param( pReturnTypeRef ) )
+ bSimpleReturn = false;
+
+ if (bSimpleReturn)
+ pCppReturn = pUnoReturn; // direct way for simple types
+ else
+ {
+ // complex return via ptr
+ pCppReturn = (bridges::cpp_uno::shared::relatesToInterfaceType( pReturnTypeDescr )
+ ? __builtin_alloca( pReturnTypeDescr->nSize )
+ : pUnoReturn); // direct way
+
+ INSERT_INT32( &pCppReturn, nGPR, pGPR, pStack, bOverFlow );
+ }
+ }
+ // push this
+ void * pAdjustedThisPtr = reinterpret_cast< void ** >(pThis->getCppI())
+ + aVtableSlot.offset;
+ INSERT_INT32( &pAdjustedThisPtr, nGPR, pGPR, pStack, bOverFlow );
+
+ // stack space
+ OSL_ENSURE( sizeof(void *) == sizeof(sal_Int32), "### unexpected size!" );
+ // args
+ void ** pCppArgs = (void **)alloca( 3 * sizeof(void *) * nParams );
+ // indizes of values this have to be converted (interface conversion cpp<=>uno)
+ sal_Int32 * pTempIndizes = (sal_Int32 *)(pCppArgs + nParams);
+ // type descriptions for reconversions
+ typelib_TypeDescription ** ppTempParamTypeDescr = (typelib_TypeDescription **)(pCppArgs + (2 * nParams));
+
+ sal_Int32 nTempIndizes = 0;
+
+ for ( sal_Int32 nPos = 0; nPos < nParams; ++nPos )
+ {
+ const typelib_MethodParameter & rParam = pParams[nPos];
+ typelib_TypeDescription * pParamTypeDescr = 0;
+ TYPELIB_DANGER_GET( &pParamTypeDescr, rParam.pTypeRef );
+
+ if (!rParam.bOut && bridges::cpp_uno::shared::isSimpleType( pParamTypeDescr ))
+ {
+// uno_copyAndConvertData( pCppArgs[nPos] = pStack, pUnoArgs[nPos],
+ uno_copyAndConvertData( pCppArgs[nPos] = alloca(8), pUnoArgs[nPos],
+ pParamTypeDescr, pThis->getBridge()->getUno2Cpp() );
+
+ switch (pParamTypeDescr->eTypeClass)
+ {
+ case typelib_TypeClass_HYPER:
+ case typelib_TypeClass_UNSIGNED_HYPER:
+#ifdef CMC_DEBUG
+ fprintf(stderr, "hyper is %lx\n", pCppArgs[nPos]);
+#endif
+ INSERT_INT64( pCppArgs[nPos], nGPR, pGPR, pStack, pStackStart, bOverFlow );
+ break;
+ case typelib_TypeClass_LONG:
+ case typelib_TypeClass_UNSIGNED_LONG:
+ case typelib_TypeClass_ENUM:
+#ifdef CMC_DEBUG
+ fprintf(stderr, "long is %x\n", pCppArgs[nPos]);
+#endif
+ INSERT_INT32( pCppArgs[nPos], nGPR, pGPR, pStack, bOverFlow );
+ break;
+ case typelib_TypeClass_SHORT:
+ case typelib_TypeClass_CHAR:
+ case typelib_TypeClass_UNSIGNED_SHORT:
+ INSERT_INT16( pCppArgs[nPos], nGPR, pGPR, pStack, bOverFlow );
+ break;
+ case typelib_TypeClass_BOOLEAN:
+ case typelib_TypeClass_BYTE:
+ INSERT_INT8( pCppArgs[nPos], nGPR, pGPR, pStack, bOverFlow );
+ break;
+ case typelib_TypeClass_FLOAT:
+ INSERT_FLOAT( pCppArgs[nPos], nGPR, pGPR, pStack, bOverFlow );
+ break;
+ case typelib_TypeClass_DOUBLE:
+ INSERT_DOUBLE( pCppArgs[nPos], nGPR, pGPR, pStack, pStackStart, bOverFlow );
+ break;
+ default:
+ break;
+ }
+ // no longer needed
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ else // ptr to complex value | ref
+ {
+ if (! rParam.bIn) // is pure out
+ {
+ // cpp out is constructed mem, uno out is not!
+ uno_constructData(
+ pCppArgs[nPos] = alloca( pParamTypeDescr->nSize ),
+ pParamTypeDescr );
+ pTempIndizes[nTempIndizes] = nPos; // default constructed for cpp call
+ // will be released at reconversion
+ ppTempParamTypeDescr[nTempIndizes++] = pParamTypeDescr;
+ }
+ // is in/inout
+ else if (bridges::cpp_uno::shared::relatesToInterfaceType( pParamTypeDescr ))
+ {
+ uno_copyAndConvertData(
+ pCppArgs[nPos] = alloca( pParamTypeDescr->nSize ),
+ pUnoArgs[nPos], pParamTypeDescr, pThis->getBridge()->getUno2Cpp() );
+
+ pTempIndizes[nTempIndizes] = nPos; // has to be reconverted
+ // will be released at reconversion
+ ppTempParamTypeDescr[nTempIndizes++] = pParamTypeDescr;
+ }
+ else // direct way
+ {
+ pCppArgs[nPos] = pUnoArgs[nPos];
+ // no longer needed
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ INSERT_INT32( &(pCppArgs[nPos]), nGPR, pGPR, pStack, bOverFlow );
+ }
+ }
+
+ try
+ {
+ callVirtualMethod(
+ pAdjustedThisPtr, aVtableSlot.index,
+ pCppReturn, pReturnTypeRef,
+ pStackStart,
+ (pStack - pStackStart),
+ pGPR, nGPR);
+
+ // NO exception occured...
+ *ppUnoExc = 0;
+
+ // reconvert temporary params
+ for ( ; nTempIndizes--; )
+ {
+ sal_Int32 nIndex = pTempIndizes[nTempIndizes];
+ typelib_TypeDescription * pParamTypeDescr = ppTempParamTypeDescr[nTempIndizes];
+
+ if (pParams[nIndex].bIn)
+ {
+ if (pParams[nIndex].bOut) // inout
+ {
+ uno_destructData( pUnoArgs[nIndex], pParamTypeDescr, 0 ); // destroy uno value
+ uno_copyAndConvertData( pUnoArgs[nIndex], pCppArgs[nIndex], pParamTypeDescr,
+ pThis->getBridge()->getCpp2Uno() );
+ }
+ }
+ else // pure out
+ {
+ uno_copyAndConvertData( pUnoArgs[nIndex], pCppArgs[nIndex], pParamTypeDescr,
+ pThis->getBridge()->getCpp2Uno() );
+ }
+ // destroy temp cpp param => cpp: every param was constructed
+ uno_destructData( pCppArgs[nIndex], pParamTypeDescr, cpp_release );
+
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ // return value
+ if (pCppReturn && pUnoReturn != pCppReturn)
+ {
+ uno_copyAndConvertData( pUnoReturn, pCppReturn, pReturnTypeDescr,
+ pThis->getBridge()->getCpp2Uno() );
+ uno_destructData( pCppReturn, pReturnTypeDescr, cpp_release );
+ }
+ }
+ catch (...)
+ {
+// __asm__ __volatile__ ("sub sp, sp, #2048\n");
+
+ // fill uno exception
+ fillUnoException( CPPU_CURRENT_NAMESPACE::__cxa_get_globals()->caughtExceptions, *ppUnoExc, pThis->getBridge()->getCpp2Uno() );
+
+ // temporary params
+ for ( ; nTempIndizes--; )
+ {
+ sal_Int32 nIndex = pTempIndizes[nTempIndizes];
+ // destroy temp cpp param => cpp: every param was constructed
+ uno_destructData( pCppArgs[nIndex], ppTempParamTypeDescr[nTempIndizes], cpp_release );
+ TYPELIB_DANGER_RELEASE( ppTempParamTypeDescr[nTempIndizes] );
+ }
+
+ // return type
+ if (pReturnTypeDescr)
+ TYPELIB_DANGER_RELEASE( pReturnTypeDescr );
+ }
+}
+}
+
+namespace bridges { namespace cpp_uno { namespace shared {
+
+void unoInterfaceProxyDispatch(
+ uno_Interface * pUnoI, const typelib_TypeDescription * pMemberDescr,
+ void * pReturn, void * pArgs[], uno_Any ** ppException )
+{
+ // is my surrogate
+ bridges::cpp_uno::shared::UnoInterfaceProxy * pThis
+ = static_cast< bridges::cpp_uno::shared::UnoInterfaceProxy * >(pUnoI);
+#if OSL_DEBUG_LEVEL > 0
+ typelib_InterfaceTypeDescription * pTypeDescr = pThis->pTypeDescr;
+#endif
+
+ switch (pMemberDescr->eTypeClass)
+ {
+ case typelib_TypeClass_INTERFACE_ATTRIBUTE:
+ {
+#if OSL_DEBUG_LEVEL > 0
+ // determine vtable call index
+ sal_Int32 nMemberPos = ((typelib_InterfaceMemberTypeDescription *)pMemberDescr)->nPosition;
+ OSL_ENSURE( nMemberPos < pTypeDescr->nAllMembers, "### member pos out of range!" );
+#endif
+
+ VtableSlot aVtableSlot(
+ getVtableSlot(
+ reinterpret_cast<typelib_InterfaceAttributeTypeDescription const *>
+ (pMemberDescr)));
+
+ if (pReturn)
+ {
+ // dependent dispatch
+ cpp_call(
+ pThis, aVtableSlot,
+ ((typelib_InterfaceAttributeTypeDescription *)pMemberDescr)->pAttributeTypeRef,
+ 0, 0, // no params
+ pReturn, pArgs, ppException );
+ }
+ else
+ {
+ // is SET
+ typelib_MethodParameter aParam;
+ aParam.pTypeRef =
+ ((typelib_InterfaceAttributeTypeDescription *)pMemberDescr)->pAttributeTypeRef;
+ aParam.bIn = sal_True;
+ aParam.bOut = sal_False;
+
+ typelib_TypeDescriptionReference * pReturnTypeRef = 0;
+ OUString aVoidName( RTL_CONSTASCII_USTRINGPARAM("void") );
+ typelib_typedescriptionreference_new(
+ &pReturnTypeRef, typelib_TypeClass_VOID, aVoidName.pData );
+
+ // dependent dispatch
+ aVtableSlot.index += 1;
+ cpp_call(
+ pThis, aVtableSlot, // get, then set method
+ pReturnTypeRef,
+ 1, &aParam,
+ pReturn, pArgs, ppException );
+
+ typelib_typedescriptionreference_release( pReturnTypeRef );
+ }
+
+ break;
+ }
+ case typelib_TypeClass_INTERFACE_METHOD:
+ {
+#if OSL_DEBUG_LEVEL > 0
+ // determine vtable call index
+ sal_Int32 nMemberPos = ((typelib_InterfaceMemberTypeDescription *)pMemberDescr)->nPosition;
+ OSL_ENSURE( nMemberPos < pTypeDescr->nAllMembers, "### member pos out of range!" );
+#endif
+
+ VtableSlot aVtableSlot(
+ getVtableSlot(
+ reinterpret_cast<typelib_InterfaceMethodTypeDescription const *>
+ (pMemberDescr)));
+
+ switch (aVtableSlot.index)
+ {
+ // standard calls
+ case 1: // acquire uno interface
+ (*pUnoI->acquire)( pUnoI );
+ *ppException = 0;
+ break;
+ case 2: // release uno interface
+ (*pUnoI->release)( pUnoI );
+ *ppException = 0;
+ break;
+ case 0: // queryInterface() opt
+ {
+ typelib_TypeDescription * pTD = 0;
+ TYPELIB_DANGER_GET( &pTD, reinterpret_cast< Type * >( pArgs[0] )->getTypeLibType() );
+ if (pTD)
+ {
+ uno_Interface * pInterface = 0;
+ (*pThis->getBridge()->getUnoEnv()->getRegisteredInterface)(
+ pThis->getBridge()->getUnoEnv(),
+ (void **)&pInterface, pThis->oid.pData, (typelib_InterfaceTypeDescription *)pTD );
+
+ if (pInterface)
+ {
+ ::uno_any_construct(
+ reinterpret_cast< uno_Any * >( pReturn ),
+ &pInterface, pTD, 0 );
+ (*pInterface->release)( pInterface );
+ TYPELIB_DANGER_RELEASE( pTD );
+ *ppException = 0;
+ break;
+ }
+ TYPELIB_DANGER_RELEASE( pTD );
+ }
+ } // else perform queryInterface()
+ default:
+ // dependent dispatch
+ cpp_call(
+ pThis, aVtableSlot,
+ ((typelib_InterfaceMethodTypeDescription *)pMemberDescr)->pReturnTypeRef,
+ ((typelib_InterfaceMethodTypeDescription *)pMemberDescr)->nParams,
+ ((typelib_InterfaceMethodTypeDescription *)pMemberDescr)->pParams,
+ pReturn, pArgs, ppException );
+ }
+ break;
+ }
+ default:
+ {
+ ::com::sun::star::uno::RuntimeException aExc(
+ OUString( RTL_CONSTASCII_USTRINGPARAM("illegal member type description!") ),
+ ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >() );
+
+ Type const & rExcType = ::getCppuType( &aExc );
+ // binary identical null reference
+ ::uno_type_any_construct( *ppException, &aExc, rExcType.getTypeLibType(), 0 );
+ }
+ }
+}
+
+} } }
+
+/* vi:set tabstop=4 shiftwidth=4 expandtab: */
diff --git a/bridges/source/cpp_uno/gcc3_linux_hppa/call.cxx b/bridges/source/cpp_uno/gcc3_linux_hppa/call.cxx
new file mode 100644
index 000000000000..64302947d9a2
--- /dev/null
+++ b/bridges/source/cpp_uno/gcc3_linux_hppa/call.cxx
@@ -0,0 +1,142 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <malloc.h>
+#include <rtl/alloc.h>
+
+#include <com/sun/star/uno/genfunc.hxx>
+#include "com/sun/star/uno/RuntimeException.hpp"
+#include <uno/data.h>
+
+#include <bridges/cpp_uno/shared/bridge.hxx>
+#include <bridges/cpp_uno/shared/types.hxx>
+#include <bridges/cpp_uno/shared/unointerfaceproxy.hxx>
+#include <bridges/cpp_uno/shared/vtables.hxx>
+
+#include "share.hxx"
+
+#include <stdio.h>
+#include <string.h>
+
+using namespace ::rtl;
+using namespace ::com::sun::star::uno;
+
+void MapReturn(sal_uInt32 ret0, sal_uInt32 ret1, typelib_TypeDescription *pReturnTypeDescr, bool bRegisterReturn, sal_uInt32 *pRegisterReturn)
+{
+ register float fret asm("fr4");
+ register double dret asm("fr4");
+
+ switch (pReturnTypeDescr->eTypeClass)
+ {
+ case typelib_TypeClass_HYPER:
+ case typelib_TypeClass_UNSIGNED_HYPER:
+ pRegisterReturn[1] = ret1;
+ case typelib_TypeClass_LONG:
+ case typelib_TypeClass_UNSIGNED_LONG:
+ case typelib_TypeClass_ENUM:
+ case typelib_TypeClass_CHAR:
+ case typelib_TypeClass_SHORT:
+ case typelib_TypeClass_UNSIGNED_SHORT:
+ case typelib_TypeClass_BOOLEAN:
+ case typelib_TypeClass_BYTE:
+ pRegisterReturn[0] = ret0;
+ break;
+ case typelib_TypeClass_FLOAT:
+ *(float*)pRegisterReturn = fret;
+ break;
+ case typelib_TypeClass_DOUBLE:
+ *(double*)pRegisterReturn = dret;
+ break;
+ case typelib_TypeClass_STRUCT:
+ case typelib_TypeClass_EXCEPTION:
+ {
+ if (bRegisterReturn)
+ {
+ pRegisterReturn[0] = ret0;
+ pRegisterReturn[1] = ret1;
+ }
+ break;
+ }
+ default:
+ break;
+ }
+}
+
+//Moved callVirtual into this .cxx so that I can do this and get gcc to not
+//touch r28 without having to learn any more pa-risc assembly than is
+//strictly necessary
+register sal_uInt32 r28 __asm__("%r28");
+
+void callVirtualMethod(void * pThis, sal_uInt32 nVtableIndex,
+ void * pRegisterReturn, typelib_TypeDescription *pReturnTypeDescr, bool bRegisterReturn,
+ sal_uInt32 *pStack, sal_uInt32 nStack, sal_uInt32 *pGPR, double *pFPR) __attribute__((noinline));
+
+void callVirtualMethod(void * pThis, sal_uInt32 nVtableIndex,
+ void * pRegisterReturn, typelib_TypeDescription *pReturnTypeDescr, bool bRegisterReturn,
+ sal_uInt32 *pStack, sal_uInt32 nStack, sal_uInt32 *pGPR, double *pFPR)
+{
+ register sal_uInt32* sp __asm__("%r30");
+
+ sal_uInt32 pMethod = *((sal_uInt32*)pThis);
+ pMethod += 4 * nVtableIndex;
+ pMethod = *((sal_uInt32 *)pMethod);
+
+#ifdef CMC_DEBUG
+ fprintf(stderr, "this is %p\n", pGPR[0]);
+ for (int i = 0; i < hppa::MAX_GPR_REGS ; ++i)
+ fprintf(stderr, "normal reg %d is %d %x\n", i, pGPR[i], pGPR[i]);
+
+ for (int i = 0; i < hppa::MAX_SSE_REGS ; ++i)
+ fprintf(stderr, "float reg %d is %x\n", i, pFPR[i]);
+
+ for (int i = 0; i < nStack; ++i)
+ fprintf(stderr, "stack bytes are %x\n", pStack[i]);
+#endif
+
+ //Always reserve 4 slots, and align to 8 bytes
+ sal_uInt32 nStackBytes = ( ( nStack + 4 + 1 ) >> 1 ) * 8;
+ __builtin_alloca(nStackBytes);
+ sal_uInt32 *stack = sp-8;
+ int o = -5;
+ for (sal_uInt32 i = 0; i < nStack; ++i, --o)
+ stack[o] = pStack[i];
+
+ typedef int (* FunctionCall )( sal_uInt32, sal_uInt32, sal_uInt32, sal_uInt32 );
+ FunctionCall pFunc = (FunctionCall)pMethod;
+
+ asm volatile("fldd %0, %%fr4" : : "m"(pFPR[0]) : "fr4");
+ asm volatile("fldd %0, %%fr5" : : "m"(pFPR[1]) : "fr5");
+ asm volatile("fldd %0, %%fr6" : : "m"(pFPR[2]) : "fr6");
+ asm volatile("fldd %0, %%fr7" : : "m"(pFPR[3]) : "fr7");
+ asm volatile("ldw %0, %%r28" : : "m"(pRegisterReturn) : "r28");
+ (*pFunc)(pGPR[0], pGPR[1], pGPR[2], pGPR[3]);
+
+ register sal_uInt32 r29 __asm__("%r29");
+ MapReturn(r28, r29, pReturnTypeDescr, bRegisterReturn, (sal_uInt32*)pRegisterReturn);
+}
+
+/* vi:set tabstop=4 shiftwidth=4 expandtab: */
diff --git a/bridges/source/cpp_uno/gcc3_linux_hppa/cpp2uno.cxx b/bridges/source/cpp_uno/gcc3_linux_hppa/cpp2uno.cxx
new file mode 100644
index 000000000000..959452b4d985
--- /dev/null
+++ b/bridges/source/cpp_uno/gcc3_linux_hppa/cpp2uno.cxx
@@ -0,0 +1,725 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <malloc.h>
+#include <hash_map>
+
+#include <rtl/alloc.h>
+#include <osl/mutex.hxx>
+
+#include <com/sun/star/uno/genfunc.hxx>
+#include "com/sun/star/uno/RuntimeException.hpp"
+#include <uno/data.h>
+#include <typelib/typedescription.hxx>
+
+#include "bridges/cpp_uno/shared/bridge.hxx"
+#include "bridges/cpp_uno/shared/cppinterfaceproxy.hxx"
+#include "bridges/cpp_uno/shared/types.hxx"
+#include "bridges/cpp_uno/shared/vtablefactory.hxx"
+
+#include "share.hxx"
+
+#include <dlfcn.h>
+
+
+using namespace ::osl;
+using namespace ::rtl;
+using namespace ::com::sun::star::uno;
+
+namespace
+{
+
+ static typelib_TypeClass cpp2uno_call(
+ bridges::cpp_uno::shared::CppInterfaceProxy* pThis,
+ const typelib_TypeDescription * pMemberTypeDescr,
+ typelib_TypeDescriptionReference * pReturnTypeRef,
+ sal_Int32 nParams, typelib_MethodParameter * pParams,
+ long r8, void ** gpreg, double *fpreg, void ** ovrflw,
+ sal_Int64 * pRegisterReturn /* space for register return */ )
+ {
+ void ** startovrflw = ovrflw;
+ int nregs = 0; //number of words passed in registers
+
+#ifdef CMC_DEBUG
+ fprintf(stderr, "cpp2uno_call\n");
+#endif
+ // return
+ typelib_TypeDescription * pReturnTypeDescr = 0;
+ if (pReturnTypeRef)
+ TYPELIB_DANGER_GET( &pReturnTypeDescr, pReturnTypeRef );
+
+ void * pUnoReturn = 0;
+ // complex return ptr: if != 0 && != pUnoReturn, reconversion need
+ void * pCppReturn = 0;
+
+ if (pReturnTypeDescr)
+ {
+ if (hppa::isRegisterReturn(pReturnTypeRef))
+ {
+#ifdef CMC_DEBUG
+ fprintf(stderr, "simple return\n");
+#endif
+ pUnoReturn = pRegisterReturn; // direct way for simple types
+ }
+ else
+ {
+#ifdef CMC_DEBUG
+ fprintf(stderr, "complex return via r8\n");
+#endif
+ pCppReturn = (void *)r8;
+
+ pUnoReturn = (bridges::cpp_uno::shared::relatesToInterfaceType( pReturnTypeDescr )
+ ? alloca( pReturnTypeDescr->nSize )
+ : pCppReturn); // direct way
+ }
+ }
+ // pop this
+ gpreg++;
+ fpreg++;
+ nregs++;
+
+ // stack space
+ OSL_ENSURE( sizeof(void *) == sizeof(sal_Int32), "### unexpected size!" );
+ // parameters
+ void ** pUnoArgs = (void **)alloca( 4 * sizeof(void *) * nParams );
+ void ** pCppArgs = pUnoArgs + nParams;
+ // indizes of values this have to be converted (interface conversion
+ // cpp<=>uno)
+ sal_Int32 * pTempIndizes = (sal_Int32 *)(pUnoArgs + (2 * nParams));
+ // type descriptions for reconversions
+ typelib_TypeDescription ** ppTempParamTypeDescr =
+ (typelib_TypeDescription **)(pUnoArgs + (3 * nParams));
+
+ sal_Int32 nTempIndizes = 0;
+ bool bOverFlowUsed = false;
+ for ( sal_Int32 nPos = 0; nPos < nParams; ++nPos )
+ {
+ const typelib_MethodParameter & rParam = pParams[nPos];
+ typelib_TypeDescription * pParamTypeDescr = 0;
+ TYPELIB_DANGER_GET( &pParamTypeDescr, rParam.pTypeRef );
+
+ if (!rParam.bOut && bridges::cpp_uno::shared::isSimpleType( pParamTypeDescr ))
+ {
+ switch (pParamTypeDescr->eTypeClass)
+ {
+ case typelib_TypeClass_DOUBLE:
+ if (nregs < hppa::MAX_WORDS_IN_REGS && (nregs & 1))
+ {
+ gpreg++;
+ fpreg++;
+ nregs++;
+ }
+ if (nregs < hppa::MAX_WORDS_IN_REGS-1)
+ {
+ fpreg++;
+ pCppArgs[nPos] = pUnoArgs[nPos] = fpreg;
+ gpreg+=2;
+ fpreg+=2;
+ nregs+=2;
+ }
+ else
+ {
+ if ((startovrflw-ovrflw) & 1)
+ ovrflw--;
+ pCppArgs[nPos] = pUnoArgs[nPos] = ((char*)ovrflw - 4);
+ bOverFlowUsed = true;
+ }
+ if (bOverFlowUsed) ovrflw-=2;
+ break;
+ case typelib_TypeClass_FLOAT:
+ if (nregs < hppa::MAX_WORDS_IN_REGS)
+ {
+ pCppArgs[nPos] = pUnoArgs[nPos] = fpreg;
+ gpreg++;
+ fpreg++;
+ nregs++;
+ }
+ else
+ {
+ pCppArgs[nPos] = pUnoArgs[nPos] = ovrflw;
+ bOverFlowUsed = true;
+ }
+ if (bOverFlowUsed) ovrflw--;
+ break;
+ case typelib_TypeClass_HYPER:
+ case typelib_TypeClass_UNSIGNED_HYPER:
+ if (nregs < hppa::MAX_WORDS_IN_REGS && (nregs & 1))
+ {
+ gpreg++;
+ fpreg++;
+ nregs++;
+ }
+ if (nregs < hppa::MAX_WORDS_IN_REGS-1)
+ {
+ pCppArgs[nPos] = pUnoArgs[nPos] = gpreg;
+ gpreg+=2;
+ fpreg+=2;
+ nregs+=2;
+ }
+ else
+ {
+ if ((startovrflw-ovrflw) & 1)
+ ovrflw--;
+ pCppArgs[nPos] = pUnoArgs[nPos] = ((char*)ovrflw - 4);
+ bOverFlowUsed = true;
+ }
+ if (bOverFlowUsed) ovrflw-=2;
+ break;
+ case typelib_TypeClass_BYTE:
+ case typelib_TypeClass_BOOLEAN:
+ if (nregs < hppa::MAX_WORDS_IN_REGS)
+ {
+ pCppArgs[nPos] = pUnoArgs[nPos] = ((char*)gpreg + 3);
+ gpreg++;
+ fpreg++;
+ nregs++;
+ }
+ else
+ {
+ pCppArgs[nPos] = pUnoArgs[nPos] = ((char*)ovrflw+3);
+ bOverFlowUsed = true;
+ }
+ if (bOverFlowUsed) ovrflw--;
+ break;
+ case typelib_TypeClass_CHAR:
+ case typelib_TypeClass_SHORT:
+ case typelib_TypeClass_UNSIGNED_SHORT:
+ if (nregs < hppa::MAX_WORDS_IN_REGS)
+ {
+ pCppArgs[nPos] = pUnoArgs[nPos] = ((char*)gpreg+2);
+ gpreg++;
+ fpreg++;
+ nregs++;
+ }
+ else
+ {
+ pCppArgs[nPos] = pUnoArgs[nPos] = ((char*)ovrflw+2);
+ bOverFlowUsed = true;
+ }
+ if (bOverFlowUsed) ovrflw--;
+ break;
+ case typelib_TypeClass_ENUM:
+ case typelib_TypeClass_LONG:
+ case typelib_TypeClass_UNSIGNED_LONG:
+ default:
+ if (nregs < hppa::MAX_WORDS_IN_REGS)
+ {
+ pCppArgs[nPos] = pUnoArgs[nPos] = gpreg;
+ gpreg++;
+ fpreg++;
+ nregs++;
+ }
+ else
+ {
+ pCppArgs[nPos] = pUnoArgs[nPos] = ovrflw;
+ bOverFlowUsed = true;
+ }
+ if (bOverFlowUsed) ovrflw--;
+ break;
+ }
+ // no longer needed
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ else // ptr to complex value | ref
+ {
+ void *pCppStack;
+
+ if (nregs < hppa::MAX_WORDS_IN_REGS)
+ {
+ pCppArgs[nPos] = pCppStack = *gpreg;
+ gpreg++;
+ fpreg++;
+ nregs++;
+ }
+ else
+ {
+ pCppArgs[nPos] = pCppStack = *ovrflw;
+ bOverFlowUsed = true;
+ }
+ if (bOverFlowUsed) ovrflw--;
+
+ if (! rParam.bIn) // is pure out
+ {
+ // uno out is unconstructed mem!
+ pUnoArgs[nPos] = alloca( pParamTypeDescr->nSize );
+ pTempIndizes[nTempIndizes] = nPos;
+ // will be released at reconversion
+ ppTempParamTypeDescr[nTempIndizes++] = pParamTypeDescr;
+ }
+ // is in/inout
+ else if (bridges::cpp_uno::shared::relatesToInterfaceType(
+ pParamTypeDescr ))
+ {
+ uno_copyAndConvertData( pUnoArgs[nPos] = alloca( pParamTypeDescr->nSize ),
+ pCppStack, pParamTypeDescr,
+ pThis->getBridge()->getCpp2Uno() );
+ pTempIndizes[nTempIndizes] = nPos; // has to be reconverted
+ // will be released at reconversion
+ ppTempParamTypeDescr[nTempIndizes++] = pParamTypeDescr;
+ }
+ else // direct way
+ {
+ pUnoArgs[nPos] = pCppStack;
+ // no longer needed
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ }
+ }
+
+ // ExceptionHolder
+ uno_Any aUnoExc; // Any will be constructed by callee
+ uno_Any * pUnoExc = &aUnoExc;
+
+#ifdef CMC_DEBUG
+ fprintf(stderr, "before dispatch\n");
+#endif
+ // invoke uno dispatch call
+ (*pThis->getUnoI()->pDispatcher)(
+ pThis->getUnoI(), pMemberTypeDescr, pUnoReturn, pUnoArgs, &pUnoExc );
+
+#ifdef CMC_DEBUG
+ fprintf(stderr, "after dispatch\n");
+#endif
+
+ // in case an exception occured...
+ if (pUnoExc)
+ {
+ // destruct temporary in/inout params
+ for ( ; nTempIndizes--; )
+ {
+ sal_Int32 nIndex = pTempIndizes[nTempIndizes];
+
+ if (pParams[nIndex].bIn) // is in/inout => was constructed
+ uno_destructData( pUnoArgs[nIndex],
+ ppTempParamTypeDescr[nTempIndizes], 0 );
+ TYPELIB_DANGER_RELEASE( ppTempParamTypeDescr[nTempIndizes] );
+ }
+ if (pReturnTypeDescr)
+ TYPELIB_DANGER_RELEASE( pReturnTypeDescr );
+
+ CPPU_CURRENT_NAMESPACE::raiseException( &aUnoExc,
+ pThis->getBridge()->getUno2Cpp() ); // has to destruct the any
+ // is here for dummy
+ return typelib_TypeClass_VOID;
+ }
+ else // else no exception occured...
+ {
+ // temporary params
+ for ( ; nTempIndizes--; )
+ {
+ sal_Int32 nIndex = pTempIndizes[nTempIndizes];
+ typelib_TypeDescription * pParamTypeDescr =
+ ppTempParamTypeDescr[nTempIndizes];
+
+ if (pParams[nIndex].bOut) // inout/out
+ {
+ // convert and assign
+ uno_destructData( pCppArgs[nIndex], pParamTypeDescr,
+ cpp_release );
+ uno_copyAndConvertData( pCppArgs[nIndex], pUnoArgs[nIndex],
+ pParamTypeDescr, pThis->getBridge()->getUno2Cpp() );
+ }
+ // destroy temp uno param
+ uno_destructData( pUnoArgs[nIndex], pParamTypeDescr, 0 );
+
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ // return
+ if (pCppReturn) // has complex return
+ {
+ if (pUnoReturn != pCppReturn) // needs reconversion
+ {
+ uno_copyAndConvertData( pCppReturn, pUnoReturn,
+ pReturnTypeDescr, pThis->getBridge()->getUno2Cpp() );
+ // destroy temp uno return
+ uno_destructData( pUnoReturn, pReturnTypeDescr, 0 );
+ }
+ // complex return ptr is set to eax
+ *(void **)pRegisterReturn = pCppReturn;
+ }
+ if (pReturnTypeDescr)
+ {
+ typelib_TypeClass eRet =
+ (typelib_TypeClass)pReturnTypeDescr->eTypeClass;
+ TYPELIB_DANGER_RELEASE( pReturnTypeDescr );
+ return eRet;
+ }
+ else
+ return typelib_TypeClass_VOID;
+ }
+ }
+
+
+ //=====================================================================
+ static typelib_TypeClass cpp_mediate(
+ sal_Int32 nFunctionIndex, sal_Int32 nVtableOffset,
+ void ** gpreg, double* fpreg,
+ long sp, long r8,
+ sal_Int64 * pRegisterReturn /* space for register return */ )
+
+ {
+ void ** ovrflw = (void**)(sp);
+#ifdef CMC_DEBUG
+ fprintf(stderr, "cpp_mediate with\n");
+ fprintf(stderr, "%x %x\n", nFunctionIndex, nVtableOffset);
+ fprintf(stderr, "and %x %x\n", (long)(ovrflw[0]), (long)(ovrflw[-1]));
+ fprintf(stderr, "and %x %x\n", (long)(ovrflw[-2]), (long)(ovrflw[-3]));
+ fprintf(stderr, "and %x %x\n", (long)(ovrflw[-4]), (long)(ovrflw[-5]));
+ fprintf(stderr, "and %x %x\n", (long)(ovrflw[-6]), (long)(ovrflw[-7]));
+ fprintf(stderr, "and %x %x\n", (long)(ovrflw[-8]), (long)(ovrflw[-9]));
+ fprintf(stderr, "and %x %x\n", (long)(ovrflw[-10]), (long)(ovrflw[-11]));
+ fprintf(stderr, "and %x %x\n", (long)(ovrflw[-12]), (long)(ovrflw[-13]));
+ fprintf(stderr, "and %x %x\n", (long)(ovrflw[-14]), (long)(ovrflw[-15]));
+#endif
+ OSL_ENSURE( sizeof(sal_Int32)==sizeof(void *), "### unexpected!" );
+
+ // gpreg: [ret *], this, [other gpr params]
+ // fpreg: [fpr params]
+ // ovrflw: [gpr or fpr params (properly aligned)]
+
+ void * pThis;
+ if (nFunctionIndex & 0x80000000 )
+ {
+ nFunctionIndex &= 0x7fffffff;
+ pThis = gpreg[1];
+#ifdef CMC_DEBUG
+ fprintf(stderr, "pThis is gpreg[1]\n");
+#endif
+ }
+ else
+ {
+ pThis = gpreg[0];
+#ifdef CMC_DEBUG
+ fprintf(stderr, "pThis is gpreg[0]\n");
+#endif
+ }
+
+ pThis = static_cast< char * >(pThis) - nVtableOffset;
+
+ bridges::cpp_uno::shared::CppInterfaceProxy * pCppI =
+ bridges::cpp_uno::shared::CppInterfaceProxy::castInterfaceToProxy(
+ pThis);
+
+ typelib_InterfaceTypeDescription * pTypeDescr = pCppI->getTypeDescr();
+
+ OSL_ENSURE( nFunctionIndex < pTypeDescr->nMapFunctionIndexToMemberIndex,
+ "### illegal vtable index!" );
+ if (nFunctionIndex >= pTypeDescr->nMapFunctionIndexToMemberIndex)
+ {
+ throw RuntimeException(
+ OUString::createFromAscii("illegal vtable index!"),
+ (XInterface *)pCppI );
+ }
+
+ // determine called method
+ OSL_ENSURE( nFunctionIndex < pTypeDescr->nMapFunctionIndexToMemberIndex,
+ "### illegal vtable index!" );
+ sal_Int32 nMemberPos =
+ pTypeDescr->pMapFunctionIndexToMemberIndex[nFunctionIndex];
+ OSL_ENSURE( nMemberPos < pTypeDescr->nAllMembers,
+ "### illegal member index!" );
+
+ TypeDescription aMemberDescr( pTypeDescr->ppAllMembers[nMemberPos] );
+
+ typelib_TypeClass eRet;
+ switch (aMemberDescr.get()->eTypeClass)
+ {
+ case typelib_TypeClass_INTERFACE_ATTRIBUTE:
+ {
+ if (pTypeDescr->pMapMemberIndexToFunctionIndex[nMemberPos] ==
+ nFunctionIndex)
+ {
+ // is GET method
+ eRet = cpp2uno_call(
+ pCppI, aMemberDescr.get(),
+ ((typelib_InterfaceAttributeTypeDescription *)aMemberDescr.get())->pAttributeTypeRef,
+ 0, 0, // no params
+ r8, gpreg, fpreg, ovrflw, pRegisterReturn );
+ }
+ else
+ {
+ // is SET method
+ typelib_MethodParameter aParam;
+ aParam.pTypeRef =
+ ((typelib_InterfaceAttributeTypeDescription *)aMemberDescr.get())->pAttributeTypeRef;
+ aParam.bIn = sal_True;
+ aParam.bOut = sal_False;
+
+ eRet = cpp2uno_call(
+ pCppI, aMemberDescr.get(),
+ 0, // indicates void return
+ 1, &aParam,
+ r8, gpreg, fpreg, ovrflw, pRegisterReturn );
+ }
+ break;
+ }
+ case typelib_TypeClass_INTERFACE_METHOD:
+ {
+ // is METHOD
+ switch (nFunctionIndex)
+ {
+ case 1: // acquire()
+ pCppI->acquireProxy(); // non virtual call!
+ eRet = typelib_TypeClass_VOID;
+ break;
+ case 2: // release()
+ pCppI->releaseProxy(); // non virtual call!
+ eRet = typelib_TypeClass_VOID;
+ break;
+ case 0: // queryInterface() opt
+ {
+ typelib_TypeDescription * pTD = 0;
+ TYPELIB_DANGER_GET(&pTD,
+ reinterpret_cast<Type *>(gpreg[1])->getTypeLibType());
+ if (pTD)
+ {
+ XInterface * pInterface = 0;
+ (*pCppI->getBridge()->getCppEnv()->getRegisteredInterface)(
+ pCppI->getBridge()->getCppEnv(),
+ (void **)&pInterface, pCppI->getOid().pData,
+ (typelib_InterfaceTypeDescription *)pTD );
+
+ if (pInterface)
+ {
+ ::uno_any_construct(
+ reinterpret_cast< uno_Any * >( r8 ),
+ &pInterface, pTD, cpp_acquire );
+ pInterface->release();
+ TYPELIB_DANGER_RELEASE( pTD );
+ *(void **)pRegisterReturn = (void*)r8;
+ eRet = typelib_TypeClass_ANY;
+ break;
+ }
+ TYPELIB_DANGER_RELEASE( pTD );
+ }
+ } // else perform queryInterface()
+ default:
+ eRet = cpp2uno_call(
+ pCppI, aMemberDescr.get(),
+ ((typelib_InterfaceMethodTypeDescription *)aMemberDescr.get())->pReturnTypeRef,
+ ((typelib_InterfaceMethodTypeDescription *)aMemberDescr.get())->nParams,
+ ((typelib_InterfaceMethodTypeDescription *)aMemberDescr.get())->pParams,
+ r8, gpreg, fpreg, ovrflw, pRegisterReturn );
+ }
+ break;
+ }
+ default:
+ {
+ throw RuntimeException(
+ OUString::createFromAscii("no member description found!"),
+ (XInterface *)pCppI );
+ // is here for dummy
+ eRet = typelib_TypeClass_VOID;
+ }
+ }
+
+ return eRet;
+ }
+}
+
+//=======================================================================
+/**
+ * is called on incoming vtable calls
+ * (called by asm snippets)
+ */
+
+sal_Int64 cpp_vtable_call( sal_uInt32 in0, sal_uInt32 in1, sal_uInt32 in2, sal_uInt32 in3, sal_uInt32 firstonstack )
+{
+ register sal_Int32 r21 asm("r21");
+ register sal_Int32 r22 asm("r22");
+ register sal_Int32 r28 asm("r28");
+ sal_Int32 functionIndex = r21;
+ sal_Int32 vtableOffset = r22;
+ sal_Int32 r8 = r28;
+
+ long sp = (long)&firstonstack;
+
+ sal_uInt32 gpreg[hppa::MAX_GPR_REGS];
+ gpreg[0] = in0;
+ gpreg[1] = in1;
+ gpreg[2] = in2;
+ gpreg[3] = in3;
+
+ float fpreg[hppa::MAX_SSE_REGS]; //todo
+ register float f0 asm("fr4"); fpreg[0] = f0;
+ register float f1 asm("fr5"); fpreg[1] = f1;
+ register float f2 asm("fr6"); fpreg[2] = f2;
+ register float f3 asm("fr7"); fpreg[3] = f3;
+
+ double dpreg[hppa::MAX_SSE_REGS]; //todo
+ register double d0 asm("fr4"); dpreg[0] = d0;
+ register double d1 asm("fr5"); dpreg[1] = d1;
+ register double d2 asm("fr6"); dpreg[2] = d2;
+ register double d3 asm("fr7"); dpreg[3] = d3;
+
+
+#ifdef CMC_DEBUG
+ fprintf(stderr, "got to cpp_vtable_call with %x %x\n", functionIndex, vtableOffset);
+ for (int i = 0; i < hppa::MAX_GPR_REGS; ++i)
+ fprintf(stderr, "reg %d is %d %x\n", i, gpreg[i], gpreg[i]);
+ for (int i = 0; i < hppa::MAX_SSE_REGS; ++i)
+ fprintf(stderr, "float reg %d is %f %x\n", i, fpreg[i], ((long*)fpreg)[i]);
+ for (int i = 0; i < 4; ++i)
+ fprintf(stderr, "double reg %d is %f %llx\n", i, dpreg[i], ((long long*)dpreg)[i]);
+#endif
+
+ sal_Int64 nRegReturn;
+
+ typelib_TypeClass aType =
+ cpp_mediate( functionIndex, vtableOffset, (void**)gpreg, dpreg, sp, r8, &nRegReturn);
+
+ switch( aType )
+ {
+ case typelib_TypeClass_FLOAT:
+ f0 = (*((float*)&nRegReturn));
+ break;
+ case typelib_TypeClass_DOUBLE:
+ d0 = (*((double*)&nRegReturn));
+ break;
+ default:
+ break;
+ }
+
+ return nRegReturn;
+}
+
+
+namespace
+{
+ const int codeSnippetSize = 44;
+
+# define unldil(v) (((v & 0x7c) << 14) | ((v & 0x180) << 7) | ((v & 0x3) << 12) | ((v & 0xffe00) >> 8) | ((v & 0x100000) >> 20))
+# define L21(v) unldil(((unsigned long)(v) >> 11) & 0x1fffff) //Left 21 bits
+# define R11(v) (((unsigned long)(v) & 0x7FF) << 1) //Right 11 bits
+
+ unsigned char *codeSnippet(unsigned char* code, sal_Int32 functionIndex,
+ sal_Int32 vtableOffset, bool bHasHiddenParam)
+ {
+ if (bHasHiddenParam)
+ functionIndex |= 0x80000000;
+
+ unsigned char * p = code;
+ *(unsigned long*)&p[0] = 0xeaa00000; // b,l 0x8,r21
+ *(unsigned long*)&p[4] = 0xd6a01c1e; // depwi 0,31,2,r21
+ *(unsigned long*)&p[8] = 0x4aa10040; // ldw 32(r21),r1
+
+ *(unsigned long*)&p[12] = 0x22A00000 | L21(functionIndex); // ldil L<functionIndex>,r21
+ *(unsigned long*)&p[16] = 0x36B50000 | R11(functionIndex); // ldo R<functionIndex>,r21
+
+ *(unsigned long*)&p[20] = 0x22C00000 | L21(vtableOffset); // ldil L<vtableOffset>,r22
+ *(unsigned long*)&p[24] = 0x36D60000 | R11(vtableOffset); // ldo R<vtableOffset>,r22
+
+ *(unsigned long*)&p[28] = 0x0c201094; // ldw 0(r1),r20
+ *(unsigned long*)&p[32] = 0xea80c000; // bv r0(r20)
+ *(unsigned long*)&p[36] = 0x0c281093; // ldw 4(r1),r19
+ *(unsigned long*)&p[40] = ((unsigned long)(cpp_vtable_call) & ~2);
+
+ return code + codeSnippetSize;
+ }
+}
+
+struct bridges::cpp_uno::shared::VtableFactory::Slot { void * fn; };
+
+bridges::cpp_uno::shared::VtableFactory::Slot *
+bridges::cpp_uno::shared::VtableFactory::mapBlockToVtable(void * block)
+{
+ return static_cast< Slot * >(block) + 2;
+}
+
+sal_Size bridges::cpp_uno::shared::VtableFactory::getBlockSize(
+ sal_Int32 slotCount)
+{
+ return (slotCount + 2) * sizeof (Slot) + slotCount * codeSnippetSize;
+}
+
+bridges::cpp_uno::shared::VtableFactory::Slot *
+bridges::cpp_uno::shared::VtableFactory::initializeBlock(
+ void * block, sal_Int32 slotCount)
+{
+ Slot * slots = mapBlockToVtable(block);
+ slots[-2].fn = 0;
+ slots[-1].fn = 0;
+ return slots + slotCount;
+}
+
+unsigned char * bridges::cpp_uno::shared::VtableFactory::addLocalFunctions(
+ Slot ** slots, unsigned char * code, sal_PtrDiff writetoexecdiff,
+ typelib_InterfaceTypeDescription const * type, sal_Int32 functionOffset,
+ sal_Int32 functionCount, sal_Int32 vtableOffset)
+{
+ (*slots) -= functionCount;
+ Slot * s = *slots;
+ for (sal_Int32 i = 0; i < type->nMembers; ++i)
+ {
+ typelib_TypeDescription * member = 0;
+ TYPELIB_DANGER_GET(&member, type->ppMembers[i]);
+ OSL_ASSERT(member != 0);
+ switch (member->eTypeClass)
+ {
+ case typelib_TypeClass_INTERFACE_ATTRIBUTE:
+ // Getter:
+ (s++)->fn = code + writetoexecdiff;
+ code = codeSnippet(code, functionOffset++, vtableOffset, false);
+ // Setter:
+ if (!reinterpret_cast<
+ typelib_InterfaceAttributeTypeDescription * >(
+ member)->bReadOnly)
+ {
+ (s++)->fn = code + writetoexecdiff;
+ code = codeSnippet(code, functionOffset++, vtableOffset, false);
+ }
+ break;
+ case typelib_TypeClass_INTERFACE_METHOD:
+ {
+ (s++)->fn = code + writetoexecdiff;
+ code = codeSnippet(code, functionOffset++, vtableOffset, false);
+ break;
+ }
+ default:
+ OSL_ASSERT(false);
+ break;
+ }
+ TYPELIB_DANGER_RELEASE(member);
+ }
+ return code;
+}
+
+void bridges::cpp_uno::shared::VtableFactory::flushCode(
+ unsigned char const *beg, unsigned char const *end)
+{
+ void *p = (void*)((size_t)beg & ~31);
+ size_t stride = 32;
+ while (p < end)
+ {
+ asm volatile("fdc (%0)\n\t"
+ "sync\n\t"
+ "fic,m %1(%%sr4, %0)\n\t"
+ "sync" : "+r"(p) : "r"(stride) : "memory");
+ }
+}
+
+/* vi:set tabstop=4 shiftwidth=4 expandtab: */
diff --git a/bridges/source/cpp_uno/gcc3_linux_hppa/except.cxx b/bridges/source/cpp_uno/gcc3_linux_hppa/except.cxx
new file mode 100644
index 000000000000..9d036d1b5ae8
--- /dev/null
+++ b/bridges/source/cpp_uno/gcc3_linux_hppa/except.cxx
@@ -0,0 +1,334 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <stdio.h>
+#include <string.h>
+#include <dlfcn.h>
+#include <cxxabi.h>
+#include <hash_map>
+
+#include <rtl/strbuf.hxx>
+#include <rtl/ustrbuf.hxx>
+#include <osl/diagnose.h>
+#include <osl/mutex.hxx>
+
+#include <com/sun/star/uno/genfunc.hxx>
+#include "com/sun/star/uno/RuntimeException.hpp"
+#include <typelib/typedescription.hxx>
+#include <uno/any2.h>
+
+#include "share.hxx"
+
+
+using namespace ::std;
+using namespace ::osl;
+using namespace ::rtl;
+using namespace ::com::sun::star::uno;
+using namespace ::__cxxabiv1;
+
+extern sal_Int32 * pHack;
+extern sal_Int32 nHack;
+
+namespace CPPU_CURRENT_NAMESPACE
+{
+ void dummy_can_throw_anything( char const * )
+ {
+ }
+
+ //===================================================================
+ static OUString toUNOname( char const * p ) SAL_THROW( () )
+ {
+#if OSL_DEBUG_LEVEL > 1
+ char const * start = p;
+#endif
+
+ // example: N3com3sun4star4lang24IllegalArgumentExceptionE
+
+ OUStringBuffer buf( 64 );
+ OSL_ASSERT( 'N' == *p );
+ ++p; // skip N
+
+ while ('E' != *p)
+ {
+ // read chars count
+ long n = (*p++ - '0');
+ while ('0' <= *p && '9' >= *p)
+ {
+ n *= 10;
+ n += (*p++ - '0');
+ }
+ buf.appendAscii( p, n );
+ p += n;
+ if ('E' != *p)
+ buf.append( (sal_Unicode)'.' );
+ }
+
+#if OSL_DEBUG_LEVEL > 1
+ OUString ret( buf.makeStringAndClear() );
+ OString c_ret( OUStringToOString( ret, RTL_TEXTENCODING_ASCII_US ) );
+ fprintf( stderr, "> toUNOname(): %s => %s\n", start, c_ret.getStr() );
+ return ret;
+#else
+ return buf.makeStringAndClear();
+#endif
+ }
+
+ //=====================================================================
+ class RTTI
+ {
+ typedef hash_map< OUString, type_info *, OUStringHash > t_rtti_map;
+
+ Mutex m_mutex;
+ t_rtti_map m_rttis;
+ t_rtti_map m_generatedRttis;
+
+ void * m_hApp;
+
+ public:
+ RTTI() SAL_THROW( () );
+ ~RTTI() SAL_THROW( () );
+
+ type_info * getRTTI(typelib_CompoundTypeDescription *) SAL_THROW( () );
+ };
+ //____________________________________________________________________
+ RTTI::RTTI() SAL_THROW( () )
+ : m_hApp( dlopen( 0, RTLD_LAZY ) )
+ {
+ }
+ //____________________________________________________________________
+ RTTI::~RTTI() SAL_THROW( () )
+ {
+ dlclose( m_hApp );
+ }
+
+ //____________________________________________________________________
+ type_info * RTTI::getRTTI( typelib_CompoundTypeDescription *pTypeDescr ) SAL_THROW( () )
+ {
+ type_info * rtti;
+
+ OUString const & unoName = *(OUString const *)&pTypeDescr->aBase.pTypeName;
+
+ MutexGuard guard( m_mutex );
+ t_rtti_map::const_iterator iRttiFind( m_rttis.find( unoName ) );
+ if (iRttiFind == m_rttis.end())
+ {
+ // RTTI symbol
+ OStringBuffer buf( 64 );
+ buf.append( RTL_CONSTASCII_STRINGPARAM("_ZTIN") );
+ sal_Int32 index = 0;
+ do
+ {
+ OUString token( unoName.getToken( 0, '.', index ) );
+ buf.append( token.getLength() );
+ OString c_token( OUStringToOString( token, RTL_TEXTENCODING_ASCII_US ) );
+ buf.append( c_token );
+ }
+ while (index >= 0);
+ buf.append( 'E' );
+
+ OString symName( buf.makeStringAndClear() );
+ rtti = (type_info *)dlsym( m_hApp, symName.getStr() );
+
+ if (rtti)
+ {
+ pair< t_rtti_map::iterator, bool > insertion(
+ m_rttis.insert( t_rtti_map::value_type( unoName, rtti ) ) );
+ OSL_ENSURE( insertion.second, "### inserting new rtti failed?!" );
+ }
+ else
+ {
+ // try to lookup the symbol in the generated rtti map
+ t_rtti_map::const_iterator iFind( m_generatedRttis.find( unoName ) );
+ if (iFind == m_generatedRttis.end())
+ {
+ // we must generate it !
+ // symbol and rtti-name is nearly identical,
+ // the symbol is prefixed with _ZTI
+ char const * rttiName = symName.getStr() +4;
+#if OSL_DEBUG_LEVEL > 1
+ fprintf( stderr,"generated rtti for %s\n", rttiName );
+#endif
+ if (pTypeDescr->pBaseTypeDescription)
+ {
+ // ensure availability of base
+ type_info * base_rtti = getRTTI(
+ (typelib_CompoundTypeDescription *)pTypeDescr->pBaseTypeDescription );
+ rtti = new __si_class_type_info(
+ strdup( rttiName ), (__class_type_info *)base_rtti );
+ }
+ else
+ {
+ // this class has no base class
+ rtti = new __class_type_info( strdup( rttiName ) );
+ }
+
+ pair< t_rtti_map::iterator, bool > insertion(
+ m_generatedRttis.insert( t_rtti_map::value_type( unoName, rtti ) ) );
+ OSL_ENSURE( insertion.second, "### inserting new generated rtti failed?!" );
+ }
+ else // taking already generated rtti
+ {
+ rtti = iFind->second;
+ }
+ }
+ }
+ else
+ {
+ rtti = iRttiFind->second;
+ }
+
+ return rtti;
+ }
+
+ //------------------------------------------------------------------
+ static void deleteException( void * pExc )
+ {
+ __cxa_exception const * header = ((__cxa_exception const *)pExc - 1);
+ typelib_TypeDescription * pTD = 0;
+ OUString unoName( toUNOname( header->exceptionType->name() ) );
+ ::typelib_typedescription_getByName( &pTD, unoName.pData );
+ OSL_ENSURE( pTD, "### unknown exception type! leaving out destruction => leaking!!!" );
+ if (pTD)
+ {
+ ::uno_destructData( pExc, pTD, cpp_release );
+ ::typelib_typedescription_release( pTD );
+ }
+ }
+
+ //==================================================================
+ void raiseException( uno_Any * pUnoExc, uno_Mapping * pUno2Cpp )
+ {
+#if OSL_DEBUG_LEVEL > 1
+ OString cstr(
+ OUStringToOString(
+ *reinterpret_cast< OUString const * >( &pUnoExc->pType->pTypeName ),
+ RTL_TEXTENCODING_ASCII_US ) );
+ fprintf( stderr, "> uno exception occured: %s\n", cstr.getStr() );
+#endif
+ void * pCppExc;
+ type_info * rtti;
+
+ {
+ // construct cpp exception object
+ typelib_TypeDescription * pTypeDescr = 0;
+ TYPELIB_DANGER_GET( &pTypeDescr, pUnoExc->pType );
+ OSL_ASSERT( pTypeDescr );
+ if (! pTypeDescr)
+ {
+ throw RuntimeException(
+ OUString( RTL_CONSTASCII_USTRINGPARAM("cannot get typedescription for type ") ) +
+ *reinterpret_cast< OUString const * >( &pUnoExc->pType->pTypeName ),
+ Reference< XInterface >() );
+ }
+
+ pCppExc = __cxa_allocate_exception( pTypeDescr->nSize );
+ ::uno_copyAndConvertData( pCppExc, pUnoExc->pData, pTypeDescr, pUno2Cpp );
+
+ // destruct uno exception
+ ::uno_any_destruct( pUnoExc, 0 );
+ // avoiding locked counts
+ static RTTI * s_rtti = 0;
+ if (! s_rtti)
+ {
+ MutexGuard guard( Mutex::getGlobalMutex() );
+ if (! s_rtti)
+ {
+#ifdef LEAK_STATIC_DATA
+ s_rtti = new RTTI();
+#else
+ static RTTI rtti_data;
+ s_rtti = &rtti_data;
+#endif
+ }
+ }
+ rtti = (type_info *)s_rtti->getRTTI( (typelib_CompoundTypeDescription *) pTypeDescr );
+ TYPELIB_DANGER_RELEASE( pTypeDescr );
+ OSL_ENSURE( rtti, "### no rtti for throwing exception!" );
+ if (! rtti)
+ {
+ throw RuntimeException(
+ OUString( RTL_CONSTASCII_USTRINGPARAM("no rtti for type ") ) +
+ *reinterpret_cast< OUString const * >( &pUnoExc->pType->pTypeName ),
+ Reference< XInterface >() );
+ }
+ }
+
+
+ __cxa_throw( pCppExc, rtti, deleteException );
+ }
+
+ static void* getAdjustedPtr(__cxa_exception* header)
+ {
+ return header->adjustedPtr;
+ }
+
+ //===================================================================
+ void fillUnoException( __cxa_exception * header, uno_Any * pUnoExc, uno_Mapping * pCpp2Uno )
+ {
+ if (! header)
+ {
+ RuntimeException aRE(
+ OUString( RTL_CONSTASCII_USTRINGPARAM("no exception header!") ),
+ Reference< XInterface >() );
+ Type const & rType = ::getCppuType( &aRE );
+ uno_type_any_constructAndConvert( pUnoExc, &aRE, rType.getTypeLibType(), pCpp2Uno );
+#if OSL_DEBUG_LEVEL > 0
+ OString cstr( OUStringToOString( aRE.Message, RTL_TEXTENCODING_ASCII_US ) );
+ OSL_ENSURE( 0, cstr.getStr() );
+#endif
+ return;
+ }
+
+ typelib_TypeDescription * pExcTypeDescr = 0;
+ OUString unoName( toUNOname( header->exceptionType->name() ) );
+#if OSL_DEBUG_LEVEL > 1
+ OString cstr_unoName( OUStringToOString( unoName, RTL_TEXTENCODING_ASCII_US ) );
+ fprintf( stderr, "> c++ exception occured: %s\n", cstr_unoName.getStr() );
+#endif
+ typelib_typedescription_getByName( &pExcTypeDescr, unoName.pData );
+ if (0 == pExcTypeDescr)
+ {
+ RuntimeException aRE(
+ OUString( RTL_CONSTASCII_USTRINGPARAM("exception type not found: ") ) + unoName,
+ Reference< XInterface >() );
+ Type const & rType = ::getCppuType( &aRE );
+ uno_type_any_constructAndConvert( pUnoExc, &aRE, rType.getTypeLibType(), pCpp2Uno );
+#if OSL_DEBUG_LEVEL > 0
+ OString cstr( OUStringToOString( aRE.Message, RTL_TEXTENCODING_ASCII_US ) );
+ OSL_ENSURE( 0, cstr.getStr() );
+#endif
+ }
+ else
+ {
+ // construct uno exception any
+ uno_any_constructAndConvert( pUnoExc, getAdjustedPtr(header), pExcTypeDescr, pCpp2Uno );
+ typelib_typedescription_release( pExcTypeDescr );
+ }
+ }
+}
+
+/* vi:set tabstop=4 shiftwidth=4 expandtab: */
diff --git a/bridges/source/cpp_uno/gcc3_linux_hppa/makefile.mk b/bridges/source/cpp_uno/gcc3_linux_hppa/makefile.mk
new file mode 100644
index 000000000000..a160ed5fb4c9
--- /dev/null
+++ b/bridges/source/cpp_uno/gcc3_linux_hppa/makefile.mk
@@ -0,0 +1,82 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..$/..$/..
+
+PRJNAME=bridges
+TARGET=gcc3_uno
+LIBTARGET=no
+ENABLE_EXCEPTIONS=TRUE
+NO_BSYMBOLIC=TRUE
+
+# --- Settings -----------------------------------------------------
+
+.INCLUDE : settings.mk
+
+# --- Files --------------------------------------------------------
+
+.IF "$(COM)$(OS)$(CPU)" == "GCCLINUXH"
+
+.IF "$(cppu_no_leak)" == ""
+CFLAGS += -DLEAK_STATIC_DATA
+.ENDIF
+
+CFLAGSCXX += -fno-omit-frame-pointer
+
+NOOPTFILES= \
+ $(SLO)$/cpp2uno.obj \
+ $(SLO)$/except.obj \
+ $(SLO)$/uno2cpp.obj \
+ $(SLO)$/call.obj
+
+CFLAGSNOOPT=-O0
+
+SLOFILES= \
+ $(SLO)$/cpp2uno.obj \
+ $(SLO)$/except.obj \
+ $(SLO)$/uno2cpp.obj \
+ $(SLO)$/call.obj
+
+SHL1TARGET= $(TARGET)
+
+SHL1DEF=$(MISC)$/$(SHL1TARGET).def
+SHL1IMPLIB=i$(TARGET)
+SHL1VERSIONMAP=..$/..$/bridge_exports.map
+SHL1RPATH=URELIB
+
+SHL1OBJS = $(SLOFILES)
+SHL1LIBS = $(SLB)$/cpp_uno_shared.lib
+
+SHL1STDLIBS= \
+ $(CPPULIB) \
+ $(SALLIB)
+
+.ENDIF
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : target.mk
diff --git a/bridges/source/cpp_uno/gcc3_linux_hppa/share.hxx b/bridges/source/cpp_uno/gcc3_linux_hppa/share.hxx
new file mode 100644
index 000000000000..59b674363fd1
--- /dev/null
+++ b/bridges/source/cpp_uno/gcc3_linux_hppa/share.hxx
@@ -0,0 +1,99 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "uno/mapping.h"
+
+#include <typeinfo>
+#include <exception>
+#include <cstddef>
+
+namespace CPPU_CURRENT_NAMESPACE
+{
+
+ void dummy_can_throw_anything( char const * );
+
+
+// ----- following decl from libstdc++-v3/libsupc++/unwind-cxx.h and unwind.h
+
+struct _Unwind_Exception
+{
+ unsigned exception_class __attribute__((__mode__(__DI__)));
+ void * exception_cleanup;
+ unsigned private_1 __attribute__((__mode__(__word__)));
+ unsigned private_2 __attribute__((__mode__(__word__)));
+} __attribute__((__aligned__));
+
+struct __cxa_exception
+{
+ ::std::type_info *exceptionType;
+ void (*exceptionDestructor)(void *);
+
+ ::std::unexpected_handler unexpectedHandler;
+ ::std::terminate_handler terminateHandler;
+
+ __cxa_exception *nextException;
+
+ int handlerCount;
+
+ int handlerSwitchValue;
+ const unsigned char *actionRecord;
+ const unsigned char *languageSpecificData;
+ void *catchTemp;
+ void *adjustedPtr;
+
+ _Unwind_Exception unwindHeader;
+};
+
+extern "C" void *__cxa_allocate_exception(
+ std::size_t thrown_size ) throw();
+extern "C" void __cxa_throw (
+ void *thrown_exception, std::type_info *tinfo, void (*dest) (void *) ) __attribute__((noreturn));
+
+struct __cxa_eh_globals
+{
+ __cxa_exception *caughtExceptions;
+ unsigned int uncaughtExceptions;
+};
+extern "C" __cxa_eh_globals *__cxa_get_globals () throw();
+
+// -----
+
+//==================================================================================================
+void raiseException(
+ uno_Any * pUnoExc, uno_Mapping * pUno2Cpp );
+//==================================================================================================
+void fillUnoException(
+ __cxa_exception * header, uno_Any *, uno_Mapping * pCpp2Uno );
+}
+
+
+namespace hppa
+{
+ enum hppalimits { MAX_WORDS_IN_REGS = 4, MAX_GPR_REGS = 4, MAX_SSE_REGS = 4 };
+
+ bool isRegisterReturn( typelib_TypeDescriptionReference *pTypeRef );
+}
diff --git a/bridges/source/cpp_uno/gcc3_linux_hppa/uno2cpp.cxx b/bridges/source/cpp_uno/gcc3_linux_hppa/uno2cpp.cxx
new file mode 100644
index 000000000000..cbf88dd7a516
--- /dev/null
+++ b/bridges/source/cpp_uno/gcc3_linux_hppa/uno2cpp.cxx
@@ -0,0 +1,521 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <malloc.h>
+#include <rtl/alloc.h>
+
+#include <com/sun/star/uno/genfunc.hxx>
+#include "com/sun/star/uno/RuntimeException.hpp"
+#include <uno/data.h>
+
+#include <bridges/cpp_uno/shared/bridge.hxx>
+#include <bridges/cpp_uno/shared/types.hxx>
+#include <bridges/cpp_uno/shared/unointerfaceproxy.hxx>
+#include <bridges/cpp_uno/shared/vtables.hxx>
+
+#include "share.hxx"
+
+#include <stdio.h>
+#include <string.h>
+
+using namespace ::rtl;
+using namespace ::com::sun::star::uno;
+
+void callVirtualMethod(void * pThis, sal_uInt32 nVtableIndex,
+ void * pRegisterReturn, typelib_TypeDescription *pReturnTypeDescr, bool bRegisterReturn,
+ sal_uInt32 *pStack, sal_uInt32 nStack, sal_uInt32 *pGPR, double *pFPR);
+
+#define INSERT_INT32( pSV, nr, pGPR, pDS, bOverFlow )\
+ if (nr < hppa::MAX_WORDS_IN_REGS) \
+ { \
+ pGPR[nr++] = *reinterpret_cast<sal_uInt32 *>( pSV ); \
+ } \
+ else \
+ bOverFlow = true; \
+ if (bOverFlow) \
+ *pDS++ = *reinterpret_cast<sal_uInt32 *>( pSV );
+
+#define INSERT_INT64( pSV, nr, pGPR, pDS, pStart, bOverFlow )\
+ if ( (nr < hppa::MAX_WORDS_IN_REGS) && (nr % 2) ) \
+ { \
+ ++nr; \
+ } \
+ if ( nr < hppa::MAX_WORDS_IN_REGS ) \
+ { \
+ pGPR[nr++] = *reinterpret_cast<sal_uInt32 *>( pSV ); \
+ pGPR[nr++] = *(reinterpret_cast<sal_uInt32 *>( pSV ) + 1); \
+ } \
+ else \
+ bOverFlow = true; \
+ if ( bOverFlow ) \
+ { \
+ if ( (pDS - pStart) % 2) \
+ ++pDS; \
+ *pDS++ = reinterpret_cast<sal_uInt32 *>( pSV )[1]; \
+ *pDS++ = reinterpret_cast<sal_uInt32 *>( pSV )[0]; \
+ }
+
+#define INSERT_FLOAT( pSV, nr, pFPR, pDS, bOverFlow ) \
+ if (nr < hppa::MAX_WORDS_IN_REGS) \
+ { \
+ sal_uInt32 *pDouble = (sal_uInt32 *)&(pFPR[nr++]); \
+ pDouble[0] = *reinterpret_cast<sal_uInt32 *>( pSV ); \
+ } \
+ else \
+ bOverFlow = true; \
+ if (bOverFlow) \
+ *pDS++ = *reinterpret_cast<sal_uInt32 *>( pSV );
+
+#define INSERT_DOUBLE( pSV, nr, pFPR, pDS, pStart, bOverFlow ) \
+ if ( (nr < hppa::MAX_WORDS_IN_REGS) && (nr % 2) ) \
+ { \
+ ++nr; \
+ } \
+ if ( nr < hppa::MAX_WORDS_IN_REGS ) \
+ { \
+ sal_uInt32 *pDouble = (sal_uInt32 *)&(pFPR[nr+1]); \
+ pDouble[0] = *reinterpret_cast<sal_uInt32 *>( pSV ); \
+ pDouble[1] = *(reinterpret_cast<sal_uInt32 *>( pSV ) + 1); \
+ nr+=2; \
+ } \
+ else \
+ bOverFlow = true; \
+ if ( bOverFlow ) \
+ { \
+ if ( (pDS - pStart) % 2) \
+ ++pDS; \
+ *pDS++ = reinterpret_cast<sal_uInt32 *>( pSV )[1]; \
+ *pDS++ = reinterpret_cast<sal_uInt32 *>( pSV )[0]; \
+ }
+
+#define INSERT_INT16( pSV, nr, pGPR, pDS, bOverFlow ) \
+ if ( nr < hppa::MAX_WORDS_IN_REGS ) \
+ pGPR[nr++] = *reinterpret_cast<sal_uInt16 *>( pSV ); \
+ else \
+ bOverFlow = true; \
+ if (bOverFlow) \
+ *pDS++ = *reinterpret_cast<sal_uInt16 *>( pSV );
+
+#define INSERT_INT8( pSV, nr, pGPR, pDS, bOverFlow ) \
+ if ( nr < hppa::MAX_WORDS_IN_REGS ) \
+ pGPR[nr++] = *reinterpret_cast<sal_uInt8 *>( pSV ); \
+ else \
+ bOverFlow = true; \
+ if (bOverFlow) \
+ *pDS++ = *reinterpret_cast<sal_uInt8 *>( pSV );
+
+namespace hppa
+{
+ bool is_complex_struct(const typelib_TypeDescription * type)
+ {
+ const typelib_CompoundTypeDescription * p
+ = reinterpret_cast< const typelib_CompoundTypeDescription * >(type);
+ for (sal_Int32 i = 0; i < p->nMembers; ++i)
+ {
+ if (p->ppTypeRefs[i]->eTypeClass == typelib_TypeClass_STRUCT ||
+ p->ppTypeRefs[i]->eTypeClass == typelib_TypeClass_EXCEPTION)
+ {
+ typelib_TypeDescription * t = 0;
+ TYPELIB_DANGER_GET(&t, p->ppTypeRefs[i]);
+ bool b = is_complex_struct(t);
+ TYPELIB_DANGER_RELEASE(t);
+ if (b) {
+ return true;
+ }
+ }
+ else if (!bridges::cpp_uno::shared::isSimpleType(p->ppTypeRefs[i]->eTypeClass))
+ return true;
+ }
+ if (p->pBaseTypeDescription != 0)
+ return is_complex_struct(&p->pBaseTypeDescription->aBase);
+ return false;
+ }
+
+ bool isRegisterReturn( typelib_TypeDescriptionReference *pTypeRef )
+ {
+ if (bridges::cpp_uno::shared::isSimpleType(pTypeRef))
+ return true;
+ else if (pTypeRef->eTypeClass == typelib_TypeClass_STRUCT || pTypeRef->eTypeClass == typelib_TypeClass_EXCEPTION)
+ {
+ typelib_TypeDescription * pTypeDescr = 0;
+ TYPELIB_DANGER_GET( &pTypeDescr, pTypeRef );
+
+ /* If the struct is larger than 8 bytes, then there is a buffer at r8 to stick the return value into */
+ bool bRet = pTypeDescr->nSize <= 8 && !is_complex_struct(pTypeDescr);
+
+ TYPELIB_DANGER_RELEASE( pTypeDescr );
+ return bRet;
+ }
+ return false;
+ }
+}
+
+
+namespace {
+//=======================================================================
+static void cpp_call(
+ bridges::cpp_uno::shared::UnoInterfaceProxy * pThis,
+ bridges::cpp_uno::shared::VtableSlot aVtableSlot,
+ typelib_TypeDescriptionReference * pReturnTypeRef,
+ sal_Int32 nParams, typelib_MethodParameter * pParams,
+ void * pUnoReturn, void * pUnoArgs[], uno_Any ** ppUnoExc )
+{
+ // max space for: [complex ret ptr], values|ptr ...
+ sal_uInt32 * pStack = (sal_uInt32 *)__builtin_alloca(
+ sizeof(sal_Int32) + ((nParams+2) * sizeof(sal_Int64)) );
+ sal_uInt32 * pStackStart = pStack;
+
+ sal_uInt32 pGPR[hppa::MAX_GPR_REGS];
+ double pFPR[hppa::MAX_SSE_REGS];
+ sal_uInt32 nRegs=0;
+
+ // return
+ typelib_TypeDescription * pReturnTypeDescr = 0;
+ TYPELIB_DANGER_GET( &pReturnTypeDescr, pReturnTypeRef );
+ OSL_ENSURE( pReturnTypeDescr, "### expected return type description!" );
+
+ void * pCppReturn = 0; // if != 0 && != pUnoReturn, needs reconversion
+ bool bOverFlow = false;
+ bool bRegisterReturn = true;
+
+ if (pReturnTypeDescr)
+ {
+
+ bRegisterReturn = hppa::isRegisterReturn(pReturnTypeRef);
+ if (bRegisterReturn)
+ pCppReturn = pUnoReturn; // direct way for simple types
+ else
+ {
+ // complex return via ptr
+ pCppReturn = (bridges::cpp_uno::shared::relatesToInterfaceType( pReturnTypeDescr )
+ ? __builtin_alloca( pReturnTypeDescr->nSize )
+ : pUnoReturn); // direct way
+ }
+ }
+ // push this
+ void * pAdjustedThisPtr = reinterpret_cast< void ** >(pThis->getCppI())
+ + aVtableSlot.offset;
+ INSERT_INT32( &pAdjustedThisPtr, nRegs, pGPR, pStack, bOverFlow );
+
+ // stack space
+ OSL_ENSURE( sizeof(void *) == sizeof(sal_Int32), "### unexpected size!" );
+ // args
+ void ** pCppArgs = (void **)alloca( 3 * sizeof(void *) * nParams );
+ // indizes of values this have to be converted (interface conversion cpp<=>uno)
+ sal_Int32 * pTempIndizes = (sal_Int32 *)(pCppArgs + nParams);
+ // type descriptions for reconversions
+ typelib_TypeDescription ** ppTempParamTypeDescr = (typelib_TypeDescription **)(pCppArgs + (2 * nParams));
+
+ sal_Int32 nTempIndizes = 0;
+
+ for ( sal_Int32 nPos = 0; nPos < nParams; ++nPos )
+ {
+ const typelib_MethodParameter & rParam = pParams[nPos];
+ typelib_TypeDescription * pParamTypeDescr = 0;
+ TYPELIB_DANGER_GET( &pParamTypeDescr, rParam.pTypeRef );
+
+ if (!rParam.bOut && bridges::cpp_uno::shared::isSimpleType( pParamTypeDescr ))
+ {
+ uno_copyAndConvertData( pCppArgs[nPos] = alloca(8), pUnoArgs[nPos],
+ pParamTypeDescr, pThis->getBridge()->getUno2Cpp() );
+
+ switch (pParamTypeDescr->eTypeClass)
+ {
+ case typelib_TypeClass_HYPER:
+ case typelib_TypeClass_UNSIGNED_HYPER:
+#ifdef CMC_DEBUG
+ fprintf(stderr, "hyper is %llx\n", *((long long*)pCppArgs[nPos]));
+#endif
+ INSERT_INT64( pCppArgs[nPos], nRegs, pGPR, pStack, pStackStart, bOverFlow );
+ break;
+ case typelib_TypeClass_LONG:
+ case typelib_TypeClass_UNSIGNED_LONG:
+ case typelib_TypeClass_ENUM:
+#ifdef CMC_DEBUG
+ fprintf(stderr, "long is %x\n", pCppArgs[nPos]);
+#endif
+ INSERT_INT32( pCppArgs[nPos], nRegs, pGPR, pStack, bOverFlow );
+ break;
+ case typelib_TypeClass_SHORT:
+ case typelib_TypeClass_CHAR:
+ case typelib_TypeClass_UNSIGNED_SHORT:
+ INSERT_INT16( pCppArgs[nPos], nRegs, pGPR, pStack, bOverFlow );
+ break;
+ case typelib_TypeClass_BOOLEAN:
+ case typelib_TypeClass_BYTE:
+ INSERT_INT8( pCppArgs[nPos], nRegs, pGPR, pStack, bOverFlow );
+ break;
+ case typelib_TypeClass_FLOAT:
+ INSERT_FLOAT( pCppArgs[nPos], nRegs, pFPR, pStack, bOverFlow );
+ break;
+ case typelib_TypeClass_DOUBLE:
+ INSERT_DOUBLE( pCppArgs[nPos], nRegs, pFPR, pStack, pStackStart, bOverFlow );
+ break;
+ default:
+ break;
+ }
+ // no longer needed
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ else // ptr to complex value | ref
+ {
+ if (! rParam.bIn) // is pure out
+ {
+ // cpp out is constructed mem, uno out is not!
+ uno_constructData(
+ pCppArgs[nPos] = alloca( pParamTypeDescr->nSize ),
+ pParamTypeDescr );
+ pTempIndizes[nTempIndizes] = nPos; // default constructed for cpp call
+ // will be released at reconversion
+ ppTempParamTypeDescr[nTempIndizes++] = pParamTypeDescr;
+ }
+ // is in/inout
+ else if (bridges::cpp_uno::shared::relatesToInterfaceType( pParamTypeDescr ))
+ {
+ uno_copyAndConvertData(
+ pCppArgs[nPos] = alloca( pParamTypeDescr->nSize ),
+ pUnoArgs[nPos], pParamTypeDescr, pThis->getBridge()->getUno2Cpp() );
+
+ pTempIndizes[nTempIndizes] = nPos; // has to be reconverted
+ // will be released at reconversion
+ ppTempParamTypeDescr[nTempIndizes++] = pParamTypeDescr;
+ }
+ else // direct way
+ {
+ pCppArgs[nPos] = pUnoArgs[nPos];
+ // no longer needed
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ INSERT_INT32( &(pCppArgs[nPos]), nRegs, pGPR, pStack, bOverFlow );
+ }
+ }
+
+ try
+ {
+ callVirtualMethod(
+ pAdjustedThisPtr, aVtableSlot.index,
+ pCppReturn, pReturnTypeDescr, bRegisterReturn,
+ pStackStart,
+ (pStack - pStackStart), pGPR, pFPR);
+
+ // NO exception occured...
+ *ppUnoExc = 0;
+
+ // reconvert temporary params
+ for ( ; nTempIndizes--; )
+ {
+ sal_Int32 nIndex = pTempIndizes[nTempIndizes];
+ typelib_TypeDescription * pParamTypeDescr = ppTempParamTypeDescr[nTempIndizes];
+
+ if (pParams[nIndex].bIn)
+ {
+ if (pParams[nIndex].bOut) // inout
+ {
+ uno_destructData( pUnoArgs[nIndex], pParamTypeDescr, 0 ); // destroy uno value
+ uno_copyAndConvertData( pUnoArgs[nIndex], pCppArgs[nIndex], pParamTypeDescr,
+ pThis->getBridge()->getCpp2Uno() );
+ }
+ }
+ else // pure out
+ {
+ uno_copyAndConvertData( pUnoArgs[nIndex], pCppArgs[nIndex], pParamTypeDescr,
+ pThis->getBridge()->getCpp2Uno() );
+ }
+ // destroy temp cpp param => cpp: every param was constructed
+ uno_destructData( pCppArgs[nIndex], pParamTypeDescr, cpp_release );
+
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ // return value
+ if (pCppReturn && pUnoReturn != pCppReturn)
+ {
+ uno_copyAndConvertData( pUnoReturn, pCppReturn, pReturnTypeDescr,
+ pThis->getBridge()->getCpp2Uno() );
+ uno_destructData( pCppReturn, pReturnTypeDescr, cpp_release );
+ }
+ }
+ catch (...)
+ {
+ // fill uno exception
+ fillUnoException( CPPU_CURRENT_NAMESPACE::__cxa_get_globals()->caughtExceptions, *ppUnoExc, pThis->getBridge()->getCpp2Uno() );
+
+ // temporary params
+ for ( ; nTempIndizes--; )
+ {
+ sal_Int32 nIndex = pTempIndizes[nTempIndizes];
+ // destroy temp cpp param => cpp: every param was constructed
+ uno_destructData( pCppArgs[nIndex], ppTempParamTypeDescr[nTempIndizes], cpp_release );
+ TYPELIB_DANGER_RELEASE( ppTempParamTypeDescr[nTempIndizes] );
+ }
+
+ // return type
+ if (pReturnTypeDescr)
+ TYPELIB_DANGER_RELEASE( pReturnTypeDescr );
+ }
+}
+}
+
+namespace bridges { namespace cpp_uno { namespace shared {
+
+void unoInterfaceProxyDispatch(
+ uno_Interface * pUnoI, const typelib_TypeDescription * pMemberDescr,
+ void * pReturn, void * pArgs[], uno_Any ** ppException )
+{
+ // is my surrogate
+ bridges::cpp_uno::shared::UnoInterfaceProxy * pThis
+ = static_cast< bridges::cpp_uno::shared::UnoInterfaceProxy * >(pUnoI);
+#if OSL_DEBUG_LEVEL > 0
+ typelib_InterfaceTypeDescription * pTypeDescr = pThis->pTypeDescr;
+#endif
+
+ switch (pMemberDescr->eTypeClass)
+ {
+ case typelib_TypeClass_INTERFACE_ATTRIBUTE:
+ {
+#if OSL_DEBUG_LEVEL > 0
+ // determine vtable call index
+ sal_Int32 nMemberPos = ((typelib_InterfaceMemberTypeDescription *)pMemberDescr)->nPosition;
+ OSL_ENSURE( nMemberPos < pTypeDescr->nAllMembers, "### member pos out of range!" );
+#endif
+
+ VtableSlot aVtableSlot(
+ getVtableSlot(
+ reinterpret_cast<typelib_InterfaceAttributeTypeDescription const *>
+ (pMemberDescr)));
+
+ if (pReturn)
+ {
+ // dependent dispatch
+ cpp_call(
+ pThis, aVtableSlot,
+ ((typelib_InterfaceAttributeTypeDescription *)pMemberDescr)->pAttributeTypeRef,
+ 0, 0, // no params
+ pReturn, pArgs, ppException );
+ }
+ else
+ {
+ // is SET
+ typelib_MethodParameter aParam;
+ aParam.pTypeRef =
+ ((typelib_InterfaceAttributeTypeDescription *)pMemberDescr)->pAttributeTypeRef;
+ aParam.bIn = sal_True;
+ aParam.bOut = sal_False;
+
+ typelib_TypeDescriptionReference * pReturnTypeRef = 0;
+ OUString aVoidName( RTL_CONSTASCII_USTRINGPARAM("void") );
+ typelib_typedescriptionreference_new(
+ &pReturnTypeRef, typelib_TypeClass_VOID, aVoidName.pData );
+
+ // dependent dispatch
+ aVtableSlot.index += 1;
+ cpp_call(
+ pThis, aVtableSlot, // get, then set method
+ pReturnTypeRef,
+ 1, &aParam,
+ pReturn, pArgs, ppException );
+
+ typelib_typedescriptionreference_release( pReturnTypeRef );
+ }
+
+ break;
+ }
+ case typelib_TypeClass_INTERFACE_METHOD:
+ {
+#if OSL_DEBUG_LEVEL > 0
+ // determine vtable call index
+ sal_Int32 nMemberPos = ((typelib_InterfaceMemberTypeDescription *)pMemberDescr)->nPosition;
+ OSL_ENSURE( nMemberPos < pTypeDescr->nAllMembers, "### member pos out of range!" );
+#endif
+
+ VtableSlot aVtableSlot(
+ getVtableSlot(
+ reinterpret_cast<typelib_InterfaceMethodTypeDescription const *>
+ (pMemberDescr)));
+
+ switch (aVtableSlot.index)
+ {
+ // standard calls
+ case 1: // acquire uno interface
+ (*pUnoI->acquire)( pUnoI );
+ *ppException = 0;
+ break;
+ case 2: // release uno interface
+ (*pUnoI->release)( pUnoI );
+ *ppException = 0;
+ break;
+ case 0: // queryInterface() opt
+ {
+ typelib_TypeDescription * pTD = 0;
+ TYPELIB_DANGER_GET( &pTD, reinterpret_cast< Type * >( pArgs[0] )->getTypeLibType() );
+ if (pTD)
+ {
+ uno_Interface * pInterface = 0;
+ (*pThis->getBridge()->getUnoEnv()->getRegisteredInterface)(
+ pThis->getBridge()->getUnoEnv(),
+ (void **)&pInterface, pThis->oid.pData, (typelib_InterfaceTypeDescription *)pTD );
+
+ if (pInterface)
+ {
+ ::uno_any_construct(
+ reinterpret_cast< uno_Any * >( pReturn ),
+ &pInterface, pTD, 0 );
+ (*pInterface->release)( pInterface );
+ TYPELIB_DANGER_RELEASE( pTD );
+ *ppException = 0;
+ break;
+ }
+
+ TYPELIB_DANGER_RELEASE( pTD );
+ }
+ } // else perform queryInterface()
+ default:
+ // dependent dispatch
+ cpp_call(
+ pThis, aVtableSlot,
+ ((typelib_InterfaceMethodTypeDescription *)pMemberDescr)->pReturnTypeRef,
+ ((typelib_InterfaceMethodTypeDescription *)pMemberDescr)->nParams,
+ ((typelib_InterfaceMethodTypeDescription *)pMemberDescr)->pParams,
+ pReturn, pArgs, ppException );
+ }
+ break;
+ }
+ default:
+ {
+ ::com::sun::star::uno::RuntimeException aExc(
+ OUString( RTL_CONSTASCII_USTRINGPARAM("illegal member type description!") ),
+ ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >() );
+
+ Type const & rExcType = ::getCppuType( &aExc );
+ // binary identical null reference
+ ::uno_type_any_construct( *ppException, &aExc, rExcType.getTypeLibType(), 0 );
+ }
+ }
+}
+
+} } }
+
+/* vi:set tabstop=4 shiftwidth=4 expandtab: */
diff --git a/bridges/source/cpp_uno/gcc3_linux_ia64/call.s b/bridges/source/cpp_uno/gcc3_linux_ia64/call.s
new file mode 100644
index 000000000000..8073127da3e3
--- /dev/null
+++ b/bridges/source/cpp_uno/gcc3_linux_ia64/call.s
@@ -0,0 +1,20 @@
+/* ia64 support code for OpenOffice C++/UNO bridging
+ *
+ * Caolan McNamara <caolanm@redhat.com>
+ */
+ .text
+ .align 16
+ .global privateSnippetExecutor#
+ .proc privateSnippetExecutor#
+privateSnippetExecutor:
+ adds r15 = 8, gp /* r15 now points to real gp value*/
+ ;;
+ ld8 r14 = [gp] /* load nOffsetAndIndex into a handy register */
+ ld8 gp = [r15] /* load real gp value into gp */
+ ;;
+ /* store the address where large structs are "returned" into a handy register */
+ mov r15 = r8
+ ;;
+ br cpp_vtable_call# /* call cpp_vtable_call which'll suck out r14 */
+ ;;
+ .endp privateSnippetExecutor#
diff --git a/bridges/source/cpp_uno/gcc3_linux_ia64/cpp2uno.cxx b/bridges/source/cpp_uno/gcc3_linux_ia64/cpp2uno.cxx
new file mode 100644
index 000000000000..fe880b2aa449
--- /dev/null
+++ b/bridges/source/cpp_uno/gcc3_linux_ia64/cpp2uno.cxx
@@ -0,0 +1,684 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_bridges.hxx"
+
+#include <com/sun/star/uno/genfunc.hxx>
+#include <uno/data.h>
+#include <typelib/typedescription.hxx>
+
+#include "bridges/cpp_uno/shared/bridge.hxx"
+#include "bridges/cpp_uno/shared/cppinterfaceproxy.hxx"
+#include "bridges/cpp_uno/shared/types.hxx"
+#include "bridges/cpp_uno/shared/vtablefactory.hxx"
+
+#include "share.hxx"
+#include <stdio.h>
+
+extern "C" { extern void (*privateSnippetExecutor)(); }
+
+using namespace ::com::sun::star::uno;
+
+namespace
+{
+//==================================================================================================
+static typelib_TypeClass cpp2uno_call(
+ bridges::cpp_uno::shared::CppInterfaceProxy * pThis,
+ const typelib_TypeDescription * pMemberTypeDescr,
+ typelib_TypeDescriptionReference * pReturnTypeRef, // 0 indicates void return
+ sal_Int32 nParams, typelib_MethodParameter * pParams, long r8,
+ void ** gpreg, void ** fpreg, void ** ovrflw,
+ sal_Int64 * pRegisterReturn /* space for register return */ )
+{
+#ifdef CMC_DEBUG
+ fprintf(stderr, "as far as cpp2uno_call\n");
+#endif
+
+ int ng = 0; //number of gpr registers used
+ int nf = 0; //number of fpr regsiters used
+
+ // gpreg: [ret *], this, [gpr params]
+ // fpreg: [fpr params]
+ // ovrflw: [gpr or fpr params (properly aligned)]
+
+ // return
+ typelib_TypeDescription * pReturnTypeDescr = 0;
+ if (pReturnTypeRef)
+ TYPELIB_DANGER_GET( &pReturnTypeDescr, pReturnTypeRef );
+
+ void * pUnoReturn = 0;
+ void * pCppReturn = 0; // complex return ptr: if != 0 && != pUnoReturn, reconversion need
+
+ if (pReturnTypeDescr)
+ {
+ if ( ia64::return_in_hidden_param( pReturnTypeRef ) ) // complex return via ptr passed as hidden parameter reg (pCppReturn)
+ {
+ pCppReturn = *(void **)gpreg;
+ gpreg++;
+ ng++;
+
+ pUnoReturn = (bridges::cpp_uno::shared::relatesToInterfaceType( pReturnTypeDescr )
+ ? alloca( pReturnTypeDescr->nSize )
+ : pCppReturn); // direct way
+ }
+ else if ( ia64::return_via_r8_buffer( pReturnTypeRef ) ) // complex return via ptr passed in r8
+ {
+ pCppReturn = (void *)r8;
+
+ pUnoReturn = (bridges::cpp_uno::shared::relatesToInterfaceType( pReturnTypeDescr )
+ ? alloca( pReturnTypeDescr->nSize )
+ : pCppReturn); // direct way
+ }
+
+ else
+ pUnoReturn = pRegisterReturn; // direct way for simple types
+ }
+ // pop this
+ gpreg++;
+ ng++;
+
+ // stack space
+ OSL_ENSURE( sizeof(void *) == sizeof(sal_Int64), "### unexpected size!" );
+ // parameters
+ void ** pUnoArgs = (void **)alloca( 4 * sizeof(void *) * nParams );
+ void ** pCppArgs = pUnoArgs + nParams;
+ // indizes of values this have to be converted (interface conversion cpp<=>uno)
+ sal_Int32 * pTempIndizes = (sal_Int32 *)(pUnoArgs + (2 * nParams));
+ // type descriptions for reconversions
+ typelib_TypeDescription ** ppTempParamTypeDescr = (typelib_TypeDescription **)(pUnoArgs + (3 * nParams));
+
+ sal_Int32 nTempIndizes = 0;
+ bool bOverFlowUsed = false;
+ for ( sal_Int32 nPos = 0; nPos < nParams; ++nPos )
+ {
+ const typelib_MethodParameter & rParam = pParams[nPos];
+ typelib_TypeDescription * pParamTypeDescr = 0;
+ TYPELIB_DANGER_GET( &pParamTypeDescr, rParam.pTypeRef );
+
+#ifdef CMC_DEBUG
+ fprintf(stderr, "arg %d of %d\n", nPos, nParams);
+#endif
+
+ //I think it is impossible to get UNO to pass structs as parameters by copy
+ if (!rParam.bOut && bridges::cpp_uno::shared::isSimpleType( pParamTypeDescr ))
+ {
+#ifdef CMC_DEBUG
+ fprintf(stderr, "simple\n");
+#endif
+
+ switch (pParamTypeDescr->eTypeClass)
+ {
+ case typelib_TypeClass_FLOAT:
+ if (nf < ia64::MAX_SSE_REGS && ng < ia64::MAX_GPR_REGS)
+ {
+ float tmp = (float) (*((double *)fpreg));
+ (*((float *) fpreg)) = tmp;
+ pCppArgs[nPos] = pUnoArgs[nPos] = fpreg++;
+ nf++;
+ gpreg++;
+ ng++;
+ }
+ else
+ {
+ pCppArgs[nPos] = pUnoArgs[nPos] = ovrflw;
+ bOverFlowUsed = true;
+ }
+ if (bOverFlowUsed) ovrflw++;
+ break;
+ case typelib_TypeClass_DOUBLE:
+ if (nf < ia64::MAX_SSE_REGS && ng < ia64::MAX_GPR_REGS)
+ {
+ pCppArgs[nPos] = pUnoArgs[nPos] = fpreg++;
+ nf++;
+ gpreg++;
+ ng++;
+ }
+ else
+ {
+ pCppArgs[nPos] = pUnoArgs[nPos] = ovrflw;
+ bOverFlowUsed = true;
+ }
+ if (bOverFlowUsed) ovrflw++;
+ break;
+ case typelib_TypeClass_BYTE:
+ case typelib_TypeClass_BOOLEAN:
+ case typelib_TypeClass_CHAR:
+ case typelib_TypeClass_SHORT:
+ case typelib_TypeClass_UNSIGNED_SHORT:
+ case typelib_TypeClass_ENUM:
+ case typelib_TypeClass_LONG:
+ case typelib_TypeClass_UNSIGNED_LONG:
+ default:
+ if (ng < ia64::MAX_GPR_REGS)
+ {
+ pCppArgs[nPos] = pUnoArgs[nPos] = gpreg++;
+ ng++;
+ }
+ else
+ {
+ pCppArgs[nPos] = pUnoArgs[nPos] = ovrflw;
+ bOverFlowUsed = true;
+ }
+ if (bOverFlowUsed) ovrflw++;
+ break;
+ }
+
+ // no longer needed
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ else // ptr to complex value | ref
+ {
+#ifdef CMC_DEBUG
+ fprintf(stderr, "complex, ng is %d\n", ng);
+#endif
+ void *pCppStack; //temporary stack pointer
+
+ if (ng < ia64::MAX_GPR_REGS)
+ {
+ pCppArgs[nPos] = pCppStack = *gpreg++;
+ ng++;
+ }
+ else
+ {
+ pCppArgs[nPos] = pCppStack = *ovrflw;
+ bOverFlowUsed = true;
+ }
+ if (bOverFlowUsed) ovrflw++;
+
+ if (! rParam.bIn) // is pure out
+ {
+ // uno out is unconstructed mem!
+ pUnoArgs[nPos] = alloca( pParamTypeDescr->nSize );
+ pTempIndizes[nTempIndizes] = nPos;
+ // will be released at reconversion
+ ppTempParamTypeDescr[nTempIndizes++] = pParamTypeDescr;
+ }
+ // is in/inout
+ else if (bridges::cpp_uno::shared::relatesToInterfaceType( pParamTypeDescr ))
+ {
+ uno_copyAndConvertData( pUnoArgs[nPos] = alloca( pParamTypeDescr->nSize ),
+ pCppStack, pParamTypeDescr,
+ pThis->getBridge()->getCpp2Uno() );
+ pTempIndizes[nTempIndizes] = nPos; // has to be reconverted
+ // will be released at reconversion
+ ppTempParamTypeDescr[nTempIndizes++] = pParamTypeDescr;
+ }
+ else // direct way
+ {
+ pUnoArgs[nPos] = pCppStack;
+ // no longer needed
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ }
+ }
+
+#ifdef CMC_DEBUG
+ fprintf(stderr, "end of params\n");
+#endif
+
+ // ExceptionHolder
+ uno_Any aUnoExc; // Any will be constructed by callee
+ uno_Any * pUnoExc = &aUnoExc;
+
+ // invoke uno dispatch call
+ (*pThis->getUnoI()->pDispatcher)( pThis->getUnoI(), pMemberTypeDescr, pUnoReturn, pUnoArgs, &pUnoExc );
+
+ // in case an exception occured...
+ if (pUnoExc)
+ {
+ // destruct temporary in/inout params
+ for ( ; nTempIndizes--; )
+ {
+ sal_Int32 nIndex = pTempIndizes[nTempIndizes];
+
+ if (pParams[nIndex].bIn) // is in/inout => was constructed
+ uno_destructData( pUnoArgs[nIndex], ppTempParamTypeDescr[nTempIndizes], 0 );
+ TYPELIB_DANGER_RELEASE( ppTempParamTypeDescr[nTempIndizes] );
+ }
+ if (pReturnTypeDescr)
+ TYPELIB_DANGER_RELEASE( pReturnTypeDescr );
+
+ CPPU_CURRENT_NAMESPACE::raiseException( &aUnoExc, pThis->getBridge()->getUno2Cpp() );
+ // has to destruct the any
+ // is here for dummy
+ return typelib_TypeClass_VOID;
+ }
+ else // else no exception occured...
+ {
+ // temporary params
+ for ( ; nTempIndizes--; )
+ {
+ sal_Int32 nIndex = pTempIndizes[nTempIndizes];
+ typelib_TypeDescription * pParamTypeDescr = ppTempParamTypeDescr[nTempIndizes];
+
+ if (pParams[nIndex].bOut) // inout/out
+ {
+ // convert and assign
+ uno_destructData( pCppArgs[nIndex], pParamTypeDescr, cpp_release );
+ uno_copyAndConvertData( pCppArgs[nIndex], pUnoArgs[nIndex], pParamTypeDescr,
+ pThis->getBridge()->getUno2Cpp() );
+ }
+ // destroy temp uno param
+ uno_destructData( pUnoArgs[nIndex], pParamTypeDescr, 0 );
+
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ // return
+ if (pCppReturn) // has complex return
+ {
+ if (pUnoReturn != pCppReturn) // needs reconversion
+ {
+ uno_copyAndConvertData( pCppReturn, pUnoReturn, pReturnTypeDescr,
+ pThis->getBridge()->getUno2Cpp() );
+ // destroy temp uno return
+ uno_destructData( pUnoReturn, pReturnTypeDescr, 0 );
+ }
+ // complex return ptr is set to return reg
+ *(void **)pRegisterReturn = pCppReturn;
+ }
+ if (pReturnTypeDescr)
+ {
+ typelib_TypeClass eRet = ia64::return_via_r8_buffer(pReturnTypeRef) ? typelib_TypeClass_VOID : (typelib_TypeClass)pReturnTypeDescr->eTypeClass;
+ TYPELIB_DANGER_RELEASE( pReturnTypeDescr );
+ return eRet;
+ }
+ else
+ return typelib_TypeClass_VOID;
+ }
+}
+
+
+//==================================================================================================
+static typelib_TypeClass cpp_mediate(
+ sal_uInt64 nOffsetAndIndex,
+ void ** gpreg, void ** fpreg, long sp, long r8,
+ sal_Int64 * pRegisterReturn /* space for register return */ )
+{
+ OSL_ENSURE( sizeof(sal_Int64)==sizeof(void *), "### unexpected!" );
+
+ sal_Int32 nVtableOffset = (nOffsetAndIndex >> 32);
+ sal_Int32 nFunctionIndex = (nOffsetAndIndex & 0xFFFFFFFF);
+
+ void ** ovrflw = (void**)(sp);
+
+ // gpreg: [ret *], this, [other gpr params]
+ // fpreg: [fpr params]
+ // ovrflw: [gpr or fpr params (properly aligned)]
+
+ void * pThis;
+ if (nFunctionIndex & 0x80000000 )
+ {
+ nFunctionIndex &= 0x7fffffff;
+ pThis = gpreg[1];
+#ifdef CMC_DEBUG
+ fprintf(stderr, "pThis is gpreg[1]\n");
+#endif
+ }
+ else
+ {
+ pThis = gpreg[0];
+#ifdef CMC_DEBUG
+ fprintf(stderr, "pThis is gpreg[0]\n");
+#endif
+ }
+
+#ifdef CMC_DEBUG
+ fprintf(stderr, "pThis is %p\n", pThis);
+#endif
+
+ pThis = static_cast< char * >(pThis) - nVtableOffset;
+
+#ifdef CMC_DEBUG
+ fprintf(stderr, "pThis is now %p\n", pThis);
+#endif
+
+ bridges::cpp_uno::shared::CppInterfaceProxy * pCppI
+ = bridges::cpp_uno::shared::CppInterfaceProxy::castInterfaceToProxy(
+ pThis);
+
+ typelib_InterfaceTypeDescription * pTypeDescr = pCppI->getTypeDescr();
+
+#ifdef CMC_DEBUG
+ fprintf(stderr, "indexes are %d %d\n", nFunctionIndex, pTypeDescr->nMapFunctionIndexToMemberIndex);
+#endif
+
+ OSL_ENSURE( nFunctionIndex < pTypeDescr->nMapFunctionIndexToMemberIndex, "### illegal vtable index!" );
+ if (nFunctionIndex >= pTypeDescr->nMapFunctionIndexToMemberIndex)
+ {
+ throw RuntimeException(
+ rtl::OUString::createFromAscii("illegal vtable index!"),
+ (XInterface *)pThis );
+ }
+
+ // determine called method
+ sal_Int32 nMemberPos = pTypeDescr->pMapFunctionIndexToMemberIndex[nFunctionIndex];
+ OSL_ENSURE( nMemberPos < pTypeDescr->nAllMembers, "### illegal member index!" );
+
+#ifdef CMC_DEBUG
+ fprintf(stderr, "members are %d %d\n", nMemberPos, pTypeDescr->nAllMembers);
+#endif
+
+ TypeDescription aMemberDescr( pTypeDescr->ppAllMembers[nMemberPos] );
+
+ typelib_TypeClass eRet;
+ switch (aMemberDescr.get()->eTypeClass)
+ {
+ case typelib_TypeClass_INTERFACE_ATTRIBUTE:
+ {
+ if (pTypeDescr->pMapMemberIndexToFunctionIndex[nMemberPos] == nFunctionIndex)
+ {
+ // is GET method
+ eRet = cpp2uno_call(
+ pCppI, aMemberDescr.get(),
+ ((typelib_InterfaceAttributeTypeDescription *)aMemberDescr.get())->pAttributeTypeRef,
+ 0, 0, // no params
+ r8, gpreg, fpreg, ovrflw, pRegisterReturn );
+ }
+ else
+ {
+ // is SET method
+ typelib_MethodParameter aParam;
+ aParam.pTypeRef =
+ ((typelib_InterfaceAttributeTypeDescription *)aMemberDescr.get())->pAttributeTypeRef;
+ aParam.bIn = sal_True;
+ aParam.bOut = sal_False;
+
+ eRet = cpp2uno_call(
+ pCppI, aMemberDescr.get(),
+ 0, // indicates void return
+ 1, &aParam,
+ r8, gpreg, fpreg, ovrflw, pRegisterReturn );
+ }
+ break;
+ }
+ case typelib_TypeClass_INTERFACE_METHOD:
+ {
+ // is METHOD
+ switch (nFunctionIndex)
+ {
+ case 1: // acquire()
+ pCppI->acquireProxy(); // non virtual call!
+ eRet = typelib_TypeClass_VOID;
+ break;
+ case 2: // release()
+ pCppI->releaseProxy(); // non virtual call!
+ eRet = typelib_TypeClass_VOID;
+ break;
+ case 0: // queryInterface() opt
+ {
+ typelib_TypeDescription * pTD = 0;
+ TYPELIB_DANGER_GET( &pTD, reinterpret_cast< Type * >( gpreg[2] )->getTypeLibType() );
+ if (pTD)
+ {
+ XInterface * pInterface = 0;
+ (*pCppI->getBridge()->getCppEnv()->getRegisteredInterface)(
+ pCppI->getBridge()->getCppEnv(),
+ (void **)&pInterface, pCppI->getOid().pData,
+ (typelib_InterfaceTypeDescription *)pTD );
+
+ if (pInterface)
+ {
+ ::uno_any_construct(
+ reinterpret_cast< uno_Any * >( gpreg[0] ),
+ &pInterface, pTD, cpp_acquire );
+ pInterface->release();
+ TYPELIB_DANGER_RELEASE( pTD );
+ *(void **)pRegisterReturn = gpreg[0];
+ eRet = typelib_TypeClass_ANY;
+ break;
+ }
+ TYPELIB_DANGER_RELEASE( pTD );
+ }
+ } // else perform queryInterface()
+ default:
+ eRet = cpp2uno_call(
+ pCppI, aMemberDescr.get(),
+ ((typelib_InterfaceMethodTypeDescription *)aMemberDescr.get())->pReturnTypeRef,
+ ((typelib_InterfaceMethodTypeDescription *)aMemberDescr.get())->nParams,
+ ((typelib_InterfaceMethodTypeDescription *)aMemberDescr.get())->pParams,
+ r8, gpreg, fpreg, ovrflw, pRegisterReturn );
+ }
+ break;
+ }
+ default:
+ {
+#ifdef CMC_DEBUG
+ fprintf(stderr, "screwed\n");
+#endif
+
+ throw RuntimeException(
+ rtl::OUString::createFromAscii("no member description found!"),
+ (XInterface *)pThis );
+ // is here for dummy
+ eRet = typelib_TypeClass_VOID;
+ }
+ }
+
+#ifdef CMC_DEBUG
+ fprintf(stderr, "end of cpp_mediate\n");
+#endif
+ return eRet;
+}
+}
+
+extern "C" ia64::RegReturn cpp_vtable_call(
+ long in0, long in1, long in2, long in3, long in4, long in5, long in6, long in7,
+ long firstonstack
+ )
+{
+ register long r15 asm("r15");
+ long r8 = r15;
+
+ register long r14 asm("r14");
+ long nOffsetAndIndex = r14;
+
+ long sp = (long)&firstonstack;
+
+ sal_uInt64 gpreg[ia64::MAX_GPR_REGS];
+ gpreg[0] = in0;
+ gpreg[1] = in1;
+ gpreg[2] = in2;
+ gpreg[3] = in3;
+ gpreg[4] = in4;
+ gpreg[5] = in5;
+ gpreg[6] = in6;
+ gpreg[7] = in7;
+
+ double fpreg[ia64::MAX_SSE_REGS];
+ register double f8 asm("f8"); fpreg[0] = f8;
+ register double f9 asm("f9"); fpreg[1] = f9;
+ register double f10 asm("f10"); fpreg[2] = f10;
+ register double f11 asm("f11"); fpreg[3] = f11;
+ register double f12 asm("f12"); fpreg[4] = f12;
+ register double f13 asm("f13"); fpreg[5] = f13;
+ register double f14 asm("f14"); fpreg[6] = f14;
+ register double f15 asm("f15"); fpreg[7] = f15;
+
+#ifdef CMC_DEBUG
+ fprintf(stderr, "cpp_vtable_call called with %lx\n", nOffsetAndIndex);
+ fprintf(stderr, "adump is %lx %lx %lx %lx %lx %lx %lx %lx\n", in0, in1, in2, in3, in4, in5, in6, in7);
+ fprintf(stderr, "bdump is %f %f %f %f %f %f %f %f\n", f8, f9, f10, f11, f12, f13, f14, f15);
+#endif
+
+ volatile long nRegReturn[4] = { 0 };
+
+ typelib_TypeClass aType =
+ cpp_mediate( nOffsetAndIndex, (void**)gpreg, (void**)fpreg, sp, r8, (sal_Int64*)&nRegReturn[0]);
+
+ ia64::RegReturn ret;
+ switch( aType )
+ {
+ case typelib_TypeClass_VOID:
+ break;
+ case typelib_TypeClass_BOOLEAN:
+ case typelib_TypeClass_BYTE:
+ case typelib_TypeClass_CHAR:
+ case typelib_TypeClass_UNSIGNED_SHORT:
+ case typelib_TypeClass_SHORT:
+ case typelib_TypeClass_ENUM:
+ case typelib_TypeClass_UNSIGNED_LONG:
+ case typelib_TypeClass_LONG:
+ case typelib_TypeClass_UNSIGNED_HYPER:
+ case typelib_TypeClass_HYPER:
+ ret.r8 = nRegReturn[0];
+ break;
+ case typelib_TypeClass_FLOAT:
+ asm volatile("ldfs f8=%0" : : "m"((*((float*)&nRegReturn))) : "f8");
+ break;
+ case typelib_TypeClass_DOUBLE:
+ asm volatile("ldfd f8=%0" : : "m"((*((double*)&nRegReturn))) : "f8");
+ break;
+ case typelib_TypeClass_STRUCT:
+ case typelib_TypeClass_EXCEPTION:
+ {
+ ret.r8 = nRegReturn[0];
+ ret.r9 = nRegReturn[1];
+ ret.r10 = nRegReturn[2];
+ ret.r11 = nRegReturn[3];
+ break;
+ }
+ default:
+ break;
+ }
+ return ret;
+}
+
+namespace
+{
+const int codeSnippetSize = 40;
+
+bridges::cpp_uno::shared::VtableFactory::Slot codeSnippet( unsigned char * code, sal_PtrDiff writetoexecdiff, sal_Int32 nFunctionIndex, sal_Int32 nVtableOffset,
+ bool bHasHiddenParam )
+{
+#ifdef CMC_DEBUG
+ fprintf(stderr, "size is %d\n", codeSnippetSize);
+ fprintf(stderr,"in codeSnippet functionIndex is %x\n", nFunctionIndex);
+ fprintf(stderr,"in codeSnippet vtableOffset is %x\n", nVtableOffset);
+#endif
+
+ sal_uInt64 nOffsetAndIndex = ( ( (sal_uInt64) nVtableOffset ) << 32 ) | ( (sal_uInt64) nFunctionIndex );
+
+ if ( bHasHiddenParam )
+ nOffsetAndIndex |= 0x80000000;
+
+ long *raw = (long *)code;
+
+ bridges::cpp_uno::shared::VtableFactory::Slot* destination = (bridges::cpp_uno::shared::VtableFactory::Slot*)cpp_vtable_call;
+
+ raw[0] = (long)&privateSnippetExecutor;
+ raw[1] = (long)&raw[2];
+ raw[2] = nOffsetAndIndex;
+ raw[3] = destination->gp_value;
+
+ return *(bridges::cpp_uno::shared::VtableFactory::Slot*)(code+writetoexecdiff);
+}
+}
+
+void bridges::cpp_uno::shared::VtableFactory::flushCode(unsigned char const *, unsigned char const *)
+{
+}
+
+bridges::cpp_uno::shared::VtableFactory::Slot * bridges::cpp_uno::shared::VtableFactory::mapBlockToVtable(void * block)
+{
+ return static_cast< Slot * >(block) + 2;
+}
+
+
+sal_Size bridges::cpp_uno::shared::VtableFactory::getBlockSize(
+ sal_Int32 slotCount)
+{
+ return (slotCount + 2) * sizeof (Slot) + slotCount * codeSnippetSize;
+}
+
+bridges::cpp_uno::shared::VtableFactory::Slot* bridges::cpp_uno::shared::VtableFactory::initializeBlock(void * block, sal_Int32 slotCount)
+{
+ Slot * slots = mapBlockToVtable(block);
+ Slot foo = {0,0};
+ slots[-2] = foo;
+ slots[-1] = foo;
+ return slots + slotCount;
+}
+
+unsigned char * bridges::cpp_uno::shared::VtableFactory::addLocalFunctions(
+ Slot ** in_slots, unsigned char * code, sal_PtrDiff writetoexecdiff,
+ typelib_InterfaceTypeDescription const * type, sal_Int32 functionOffset,
+ sal_Int32 functionCount, sal_Int32 vtableOffset)
+{
+ (*in_slots) -= functionCount;
+ Slot * slots = *in_slots;
+#ifdef CMC_DEBUG
+ fprintf(stderr, "in addLocalFunctions functionOffset is %x\n",functionOffset);
+ fprintf(stderr, "in addLocalFunctions vtableOffset is %x\n",vtableOffset);
+#endif
+
+ for (sal_Int32 i = 0; i < type->nMembers; ++i) {
+ typelib_TypeDescription * member = 0;
+ TYPELIB_DANGER_GET(&member, type->ppMembers[i]);
+ OSL_ASSERT(member != 0);
+ switch (member->eTypeClass) {
+ case typelib_TypeClass_INTERFACE_ATTRIBUTE:
+ // Getter:
+ *slots++ = codeSnippet(
+ code, writetoexecdiff, functionOffset++, vtableOffset,
+ ia64::return_in_hidden_param(
+ reinterpret_cast<
+ typelib_InterfaceAttributeTypeDescription * >(
+ member)->pAttributeTypeRef));
+ code += codeSnippetSize;
+
+
+ // Setter:
+ if (!reinterpret_cast<
+ typelib_InterfaceAttributeTypeDescription * >(
+ member)->bReadOnly)
+ {
+ *slots++ = codeSnippet(code, writetoexecdiff, functionOffset++, vtableOffset, false);
+ code += codeSnippetSize;
+ }
+ break;
+
+ case typelib_TypeClass_INTERFACE_METHOD:
+ *slots++ = codeSnippet(
+ code, writetoexecdiff, functionOffset++, vtableOffset,
+ ia64::return_in_hidden_param(
+ reinterpret_cast<
+ typelib_InterfaceMethodTypeDescription * >(
+ member)->pReturnTypeRef));
+ code += codeSnippetSize;
+ break;
+
+ default:
+ OSL_ASSERT(false);
+ break;
+ }
+ TYPELIB_DANGER_RELEASE(member);
+ }
+ return code;
+}
+
+/* vi:set tabstop=4 shiftwidth=4 expandtab: */
diff --git a/bridges/source/cpp_uno/gcc3_linux_ia64/except.cxx b/bridges/source/cpp_uno/gcc3_linux_ia64/except.cxx
new file mode 100644
index 000000000000..3e666a11cdd0
--- /dev/null
+++ b/bridges/source/cpp_uno/gcc3_linux_ia64/except.cxx
@@ -0,0 +1,287 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_bridges.hxx"
+
+#include <stdio.h>
+#include <string.h>
+#include <dlfcn.h>
+#include <cxxabi.h>
+#include <hash_map>
+
+#include <rtl/strbuf.hxx>
+#include <rtl/ustrbuf.hxx>
+#include <osl/diagnose.h>
+#include <osl/mutex.hxx>
+
+#include <com/sun/star/uno/genfunc.hxx>
+#include <typelib/typedescription.hxx>
+#include <uno/any2.h>
+
+#include "share.hxx"
+
+
+using namespace ::std;
+using namespace ::osl;
+using namespace ::rtl;
+using namespace ::com::sun::star::uno;
+using namespace ::__cxxabiv1;
+
+
+namespace CPPU_CURRENT_NAMESPACE
+{
+
+void dummy_can_throw_anything( char const * )
+{
+}
+
+//==================================================================================================
+static OUString toUNOname( char const * p ) SAL_THROW( () )
+{
+#if OSL_DEBUG_LEVEL > 1
+ char const * start = p;
+#endif
+
+ // example: N3com3sun4star4lang24IllegalArgumentExceptionE
+
+ OUStringBuffer buf( 64 );
+ OSL_ASSERT( 'N' == *p );
+ ++p; // skip N
+
+ while ('E' != *p)
+ {
+ // read chars count
+ long n = (*p++ - '0');
+ while ('0' <= *p && '9' >= *p)
+ {
+ n *= 10;
+ n += (*p++ - '0');
+ }
+ buf.appendAscii( p, n );
+ p += n;
+ if ('E' != *p)
+ buf.append( (sal_Unicode)'.' );
+ }
+
+#if OSL_DEBUG_LEVEL > 1
+ OUString ret( buf.makeStringAndClear() );
+ OString c_ret( OUStringToOString( ret, RTL_TEXTENCODING_ASCII_US ) );
+ fprintf( stderr, "> toUNOname(): %s => %s\n", start, c_ret.getStr() );
+ return ret;
+#else
+ return buf.makeStringAndClear();
+#endif
+}
+
+//==================================================================================================
+class RTTI
+{
+ typedef hash_map< OUString, type_info *, OUStringHash > t_rtti_map;
+
+ Mutex m_mutex;
+ t_rtti_map m_rttis;
+ t_rtti_map m_generatedRttis;
+
+ void * m_hApp;
+
+public:
+ RTTI() SAL_THROW( () );
+ ~RTTI() SAL_THROW( () );
+
+ type_info * getRTTI( typelib_CompoundTypeDescription * ) SAL_THROW( () );
+};
+//__________________________________________________________________________________________________
+RTTI::RTTI() SAL_THROW( () )
+ : m_hApp( dlopen( 0, RTLD_LAZY ) )
+{
+}
+//__________________________________________________________________________________________________
+RTTI::~RTTI() SAL_THROW( () )
+{
+ dlclose( m_hApp );
+}
+
+//__________________________________________________________________________________________________
+type_info * RTTI::getRTTI( typelib_CompoundTypeDescription *pTypeDescr ) SAL_THROW( () )
+{
+ type_info * rtti;
+
+ OUString const & unoName = *(OUString const *)&pTypeDescr->aBase.pTypeName;
+
+ MutexGuard guard( m_mutex );
+ t_rtti_map::const_iterator iRttiFind( m_rttis.find( unoName ) );
+ if (iRttiFind == m_rttis.end())
+ {
+ // RTTI symbol
+ OStringBuffer buf( 64 );
+ buf.append( RTL_CONSTASCII_STRINGPARAM("_ZTIN") );
+ sal_Int32 index = 0;
+ do
+ {
+ OUString token( unoName.getToken( 0, '.', index ) );
+ buf.append( token.getLength() );
+ OString c_token( OUStringToOString( token, RTL_TEXTENCODING_ASCII_US ) );
+ buf.append( c_token );
+ }
+ while (index >= 0);
+ buf.append( 'E' );
+
+ OString symName( buf.makeStringAndClear() );
+ rtti = (type_info *)dlsym( m_hApp, symName.getStr() );
+
+ if (rtti)
+ {
+ pair< t_rtti_map::iterator, bool > insertion(
+ m_rttis.insert( t_rtti_map::value_type( unoName, rtti ) ) );
+ OSL_ENSURE( insertion.second, "### inserting new rtti failed?!" );
+ }
+ else
+ {
+ // try to lookup the symbol in the generated rtti map
+ t_rtti_map::const_iterator iFind( m_generatedRttis.find( unoName ) );
+ if (iFind == m_generatedRttis.end())
+ {
+ // we must generate it !
+ // symbol and rtti-name is nearly identical,
+ // the symbol is prefixed with _ZTI
+ char const * rttiName = symName.getStr() +4;
+#if OSL_DEBUG_LEVEL > 1
+ fprintf( stderr,"generated rtti for %s\n", rttiName );
+#endif
+ if (pTypeDescr->pBaseTypeDescription)
+ {
+ // ensure availability of base
+ type_info * base_rtti = getRTTI(
+ (typelib_CompoundTypeDescription *)pTypeDescr->pBaseTypeDescription );
+ rtti = new __si_class_type_info(
+ strdup( rttiName ), (__class_type_info *)base_rtti );
+ }
+ else
+ {
+ // this class has no base class
+ rtti = new __class_type_info( strdup( rttiName ) );
+ }
+
+ pair< t_rtti_map::iterator, bool > insertion(
+ m_generatedRttis.insert( t_rtti_map::value_type( unoName, rtti ) ) );
+ OSL_ENSURE( insertion.second, "### inserting new generated rtti failed?!" );
+ }
+ else // taking already generated rtti
+ {
+ rtti = iFind->second;
+ }
+ }
+ }
+ else
+ {
+ rtti = iRttiFind->second;
+ }
+
+ return rtti;
+}
+
+//--------------------------------------------------------------------------------------------------
+static void deleteException( void * pExc )
+{
+ __cxa_exception const * header = ((__cxa_exception const *)pExc - 1);
+ typelib_TypeDescription * pTD = 0;
+ OUString unoName( toUNOname( header->exceptionType->name() ) );
+ ::typelib_typedescription_getByName( &pTD, unoName.pData );
+ OSL_ENSURE( pTD, "### unknown exception type! leaving out destruction => leaking!!!" );
+ if (pTD)
+ {
+ ::uno_destructData( pExc, pTD, cpp_release );
+ ::typelib_typedescription_release( pTD );
+ }
+}
+
+//==================================================================================================
+void raiseException( uno_Any * pUnoExc, uno_Mapping * pUno2Cpp )
+{
+ void * pCppExc;
+ type_info * rtti;
+
+ {
+ // construct cpp exception object
+ typelib_TypeDescription * pTypeDescr = 0;
+ TYPELIB_DANGER_GET( &pTypeDescr, pUnoExc->pType );
+ OSL_ASSERT( pTypeDescr );
+ if (! pTypeDescr)
+ terminate();
+
+ pCppExc = __cxa_allocate_exception( pTypeDescr->nSize );
+ ::uno_copyAndConvertData( pCppExc, pUnoExc->pData, pTypeDescr, pUno2Cpp );
+
+ // destruct uno exception
+ ::uno_any_destruct( pUnoExc, 0 );
+ // avoiding locked counts
+ static RTTI * s_rtti = 0;
+ if (! s_rtti)
+ {
+ MutexGuard guard( Mutex::getGlobalMutex() );
+ if (! s_rtti)
+ {
+#ifdef LEAK_STATIC_DATA
+ s_rtti = new RTTI();
+#else
+ static RTTI rtti_data;
+ s_rtti = &rtti_data;
+#endif
+ }
+ }
+ rtti = (type_info *)s_rtti->getRTTI( (typelib_CompoundTypeDescription *) pTypeDescr );
+ TYPELIB_DANGER_RELEASE( pTypeDescr );
+ OSL_ENSURE( rtti, "### no rtti for throwing exception!" );
+ if (! rtti)
+ terminate();
+ }
+
+ __cxa_throw( pCppExc, rtti, deleteException );
+}
+
+//==================================================================================================
+void fillUnoException( __cxa_exception * header, uno_Any * pExc, uno_Mapping * pCpp2Uno )
+{
+ OSL_ENSURE( header, "### no exception header!!!" );
+ if (! header)
+ terminate();
+
+ typelib_TypeDescription * pExcTypeDescr = 0;
+ OUString unoName( toUNOname( header->exceptionType->name() ) );
+ ::typelib_typedescription_getByName( &pExcTypeDescr, unoName.pData );
+ OSL_ENSURE( pExcTypeDescr, "### can not get type description for exception!!!" );
+ if (! pExcTypeDescr)
+ terminate();
+
+ // construct uno exception any
+ ::uno_any_constructAndConvert( pExc, header->adjustedPtr, pExcTypeDescr, pCpp2Uno );
+ ::typelib_typedescription_release( pExcTypeDescr );
+}
+
+}
+/* vi:set tabstop=4 shiftwidth=4 expandtab: */
diff --git a/bridges/source/cpp_uno/gcc3_linux_ia64/makefile.mk b/bridges/source/cpp_uno/gcc3_linux_ia64/makefile.mk
new file mode 100644
index 000000000000..b4ac2edc3a71
--- /dev/null
+++ b/bridges/source/cpp_uno/gcc3_linux_ia64/makefile.mk
@@ -0,0 +1,83 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..$/..$/..
+
+PRJNAME=bridges
+TARGET=gcc3_uno
+LIBTARGET=no
+ENABLE_EXCEPTIONS=TRUE
+
+# --- Settings -----------------------------------------------------
+
+.INCLUDE : settings.mk
+
+# --- Files --------------------------------------------------------
+
+.IF "$(COM)$(OS)$(CPU)$(COMNAME)" == "GCCLINUXAgcc3"
+
+.IF "$(cppu_no_leak)" == ""
+CFLAGS += -DLEAK_STATIC_DATA
+.ENDIF
+
+# In case someone enabled the non-standard -fomit-frame-pointer which does not
+# work with the .cxx sources in this directory:
+CFLAGSCXX += -fno-omit-frame-pointer
+
+NOOPTFILES= \
+ $(SLO)$/uno2cpp.obj \
+ $(SLO)$/cpp2uno.obj
+
+CFLAGSNOOPT=-O0
+
+SLOFILES= \
+ $(SLO)$/except.obj \
+ $(SLO)$/cpp2uno.obj \
+ $(SLO)$/uno2cpp.obj \
+ $(SLO)$/call.obj
+
+SHL1TARGET= $(TARGET)
+
+SHL1DEF=$(MISC)$/$(SHL1TARGET).def
+SHL1IMPLIB=i$(TARGET)
+SHL1VERSIONMAP=..$/..$/bridge_exports.map
+
+SHL1OBJS= $(SLOFILES)
+SHL1LIBS = $(SLB)$/cpp_uno_shared.lib
+
+SHL1STDLIBS= \
+ $(CPPULIB) \
+ $(SALLIB)
+
+.ENDIF
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : target.mk
+
+$(SLO)$/%.obj: %.s
+ $(CC) -c -o $(SLO)$/$(@:b).o $< -fpic ; touch $@
diff --git a/bridges/source/cpp_uno/gcc3_linux_ia64/share.hxx b/bridges/source/cpp_uno/gcc3_linux_ia64/share.hxx
new file mode 100644
index 000000000000..abf95470aafc
--- /dev/null
+++ b/bridges/source/cpp_uno/gcc3_linux_ia64/share.hxx
@@ -0,0 +1,130 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "uno/mapping.h"
+
+#include <typeinfo>
+#include <exception>
+#include <cstddef>
+#include "bridges/cpp_uno/shared/vtablefactory.hxx"
+
+namespace CPPU_CURRENT_NAMESPACE
+{
+
+ void dummy_can_throw_anything( char const * );
+
+
+// ----- following decl from libstdc++-v3/libsupc++/unwind-cxx.h and unwind.h
+
+struct _Unwind_Exception
+{
+ unsigned exception_class __attribute__((__mode__(__DI__)));
+ void * exception_cleanup;
+ unsigned private_1 __attribute__((__mode__(__word__)));
+ unsigned private_2 __attribute__((__mode__(__word__)));
+} __attribute__((__aligned__));
+
+struct __cxa_exception
+{
+ ::std::type_info *exceptionType;
+ void (*exceptionDestructor)(void *);
+
+ ::std::unexpected_handler unexpectedHandler;
+ ::std::terminate_handler terminateHandler;
+
+ __cxa_exception *nextException;
+
+ int handlerCount;
+
+ int handlerSwitchValue;
+ const unsigned char *actionRecord;
+ const unsigned char *languageSpecificData;
+ void *catchTemp;
+ void *adjustedPtr;
+
+ _Unwind_Exception unwindHeader;
+};
+
+extern "C" void *__cxa_allocate_exception(
+ std::size_t thrown_size ) throw();
+extern "C" void __cxa_throw (
+ void *thrown_exception, std::type_info *tinfo, void (*dest) (void *) ) __attribute__((noreturn));
+
+struct __cxa_eh_globals
+{
+ __cxa_exception *caughtExceptions;
+ unsigned int uncaughtExceptions;
+};
+extern "C" __cxa_eh_globals *__cxa_get_globals () throw();
+
+// -----
+
+//==================================================================================================
+void raiseException(
+ uno_Any * pUnoExc, uno_Mapping * pUno2Cpp );
+//==================================================================================================
+void fillUnoException(
+ __cxa_exception * header, uno_Any *, uno_Mapping * pCpp2Uno );
+}
+
+namespace ia64
+{
+ enum ia64limits { MAX_GPR_REGS = 8, MAX_SSE_REGS = 8, MAX_REG_SLOTS = 8 };
+
+ bool return_in_hidden_param( typelib_TypeDescriptionReference *pTypeRef );
+ bool return_via_r8_buffer( typelib_TypeDescriptionReference *pTypeRef );
+
+ struct RegReturn
+ {
+ long r8;
+ long r9;
+ long r10;
+ long r11;
+ };
+}
+
+namespace bridges
+{
+ namespace cpp_uno
+ {
+ namespace shared
+ {
+ /*
+ http://www.swag.uwaterloo.ca/asx/ABI.html
+ On Itanium, function pointers are pairs: the function address followed
+ by the global pointer value that should be used when calling the
+ function (code address, gp value)
+ */
+ struct VtableFactory::Slot
+ {
+ sal_uInt64 code_address;
+ sal_uInt64 gp_value;
+ };
+ }
+ }
+}
+/* vi:set tabstop=4 shiftwidth=4 expandtab: */
diff --git a/bridges/source/cpp_uno/gcc3_linux_ia64/uno2cpp.cxx b/bridges/source/cpp_uno/gcc3_linux_ia64/uno2cpp.cxx
new file mode 100644
index 000000000000..7a07c5ea5dd9
--- /dev/null
+++ b/bridges/source/cpp_uno/gcc3_linux_ia64/uno2cpp.cxx
@@ -0,0 +1,690 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_bridges.hxx"
+
+#include <malloc.h>
+
+#include <com/sun/star/uno/genfunc.hxx>
+#include <uno/data.h>
+
+#include "bridges/cpp_uno/shared/bridge.hxx"
+#include "bridges/cpp_uno/shared/types.hxx"
+#include "bridges/cpp_uno/shared/unointerfaceproxy.hxx"
+#include "bridges/cpp_uno/shared/vtables.hxx"
+
+#include "share.hxx"
+
+#include <stdio.h>
+#include <string.h>
+
+
+using namespace ::rtl;
+using namespace ::com::sun::star::uno;
+
+void MapReturn(const ia64::RegReturn &rRet, double dret, typelib_TypeDescription * pReturnTypeDescr, bool bSimpleReturn, sal_uInt64 *pRegisterReturn)
+{
+ switch (pReturnTypeDescr->eTypeClass)
+ {
+ case typelib_TypeClass_HYPER:
+ case typelib_TypeClass_UNSIGNED_HYPER:
+ case typelib_TypeClass_LONG:
+ case typelib_TypeClass_UNSIGNED_LONG:
+ case typelib_TypeClass_ENUM:
+ *pRegisterReturn = rRet.r8;
+ break;
+ case typelib_TypeClass_CHAR:
+ case typelib_TypeClass_SHORT:
+ case typelib_TypeClass_UNSIGNED_SHORT:
+ *pRegisterReturn = (unsigned short)rRet.r8;
+ break;
+ case typelib_TypeClass_BOOLEAN:
+ case typelib_TypeClass_BYTE:
+ *pRegisterReturn = (unsigned char)rRet.r8;
+ break;
+ case typelib_TypeClass_FLOAT:
+ *reinterpret_cast<float *>( pRegisterReturn ) = dret;
+ break;
+ case typelib_TypeClass_DOUBLE:
+ *reinterpret_cast<double *>( pRegisterReturn ) = dret;
+ break;
+ case typelib_TypeClass_STRUCT:
+ case typelib_TypeClass_EXCEPTION:
+ {
+ sal_uInt32 nRetSize = pReturnTypeDescr->nSize;
+ if (bSimpleReturn && nRetSize <= 32 && nRetSize > 0)
+ memcpy(pRegisterReturn, (void*)&rRet, nRetSize);
+ break;
+ }
+ default:
+ break;
+ }
+}
+
+namespace ia64
+{
+ bool is_complex_struct(const typelib_TypeDescription * type)
+ {
+ const typelib_CompoundTypeDescription * p
+ = reinterpret_cast< const typelib_CompoundTypeDescription * >(type);
+ for (sal_Int32 i = 0; i < p->nMembers; ++i)
+ {
+ if (p->ppTypeRefs[i]->eTypeClass == typelib_TypeClass_STRUCT ||
+ p->ppTypeRefs[i]->eTypeClass == typelib_TypeClass_EXCEPTION)
+ {
+ typelib_TypeDescription * t = 0;
+ TYPELIB_DANGER_GET(&t, p->ppTypeRefs[i]);
+ bool b = is_complex_struct(t);
+ TYPELIB_DANGER_RELEASE(t);
+ if (b) {
+ return true;
+ }
+ }
+ else if (!bridges::cpp_uno::shared::isSimpleType(p->ppTypeRefs[i]->eTypeClass))
+ return true;
+ }
+ if (p->pBaseTypeDescription != 0)
+ return is_complex_struct(&p->pBaseTypeDescription->aBase);
+ return false;
+ }
+
+ bool is_complex_struct( typelib_TypeDescriptionReference *pTypeRef )
+ {
+ if (pTypeRef->eTypeClass == typelib_TypeClass_STRUCT || pTypeRef->eTypeClass == typelib_TypeClass_EXCEPTION)
+ {
+ typelib_TypeDescription * pTypeDescr = 0;
+ TYPELIB_DANGER_GET( &pTypeDescr, pTypeRef );
+
+ bool bRet = is_complex_struct( pTypeDescr );
+ TYPELIB_DANGER_RELEASE( pTypeDescr );
+
+ return bRet;
+ }
+ return false;
+ }
+
+ bool return_via_r8_buffer( typelib_TypeDescriptionReference *pTypeRef )
+ {
+ if (pTypeRef->eTypeClass == typelib_TypeClass_STRUCT || pTypeRef->eTypeClass == typelib_TypeClass_EXCEPTION)
+ {
+ if (is_complex_struct( pTypeRef )) return false;
+
+ typelib_TypeDescription * pTypeDescr = 0;
+ TYPELIB_DANGER_GET( &pTypeDescr, pTypeRef );
+
+ /* If the struct is larger than 32 bytes, then there is a buffer at r8 to stick the return value into */
+ bool bRet = pTypeDescr->nSize > 32;
+ TYPELIB_DANGER_RELEASE( pTypeDescr );
+ return bRet;
+ }
+ return false;
+ }
+
+ bool return_in_hidden_param( typelib_TypeDescriptionReference *pTypeRef )
+ {
+ if (bridges::cpp_uno::shared::isSimpleType(pTypeRef))
+ return false;
+ else if (pTypeRef->eTypeClass == typelib_TypeClass_STRUCT || pTypeRef->eTypeClass == typelib_TypeClass_EXCEPTION)
+ return is_complex_struct( pTypeRef );
+ return true;
+ }
+
+
+}
+
+namespace
+{
+//==================================================================================================
+static void callVirtualMethod(void * pThis, sal_uInt32 nVtableIndex,
+ void * pRegisterReturn, typelib_TypeDescription * pReturnTypeDescr, bool bSimpleReturn,
+ sal_uInt64 *pStack, sal_uInt32 nStack,
+ sal_uInt64 *pGPR, sal_uInt32 nGPR,
+ double *pFPR, sal_uInt32 nFPR)
+{
+ // Stack, if used, must be 16-bytes aligned
+ if ( nStack )
+ nStack = ( nStack + 1 ) & ~1;
+
+ // Should not happen, but...
+ if ( nFPR > ia64::MAX_SSE_REGS )
+ nFPR = ia64::MAX_SSE_REGS;
+ if ( nGPR > ia64::MAX_GPR_REGS )
+ nGPR = ia64::MAX_GPR_REGS;
+
+#ifdef CMC_DEBUG
+ // Let's figure out what is really going on here
+ {
+ fprintf( stderr, "= callVirtualMethod() =\nGPR's (%d): ", nGPR );
+ for ( unsigned int i = 0; i < nGPR; ++i )
+ fprintf( stderr, "0x%lx, ", pGPR[i] );
+ fprintf( stderr, "\nFPR's (%d): ", nFPR );
+ for ( unsigned int i = 0; i < nFPR; ++i )
+ fprintf( stderr, "0x%lx (%f), ", pFPR[i], pFPR[i] );
+ fprintf( stderr, "\nStack (%d): ", nStack );
+ for ( unsigned int i = 0; i < nStack; ++i )
+ fprintf( stderr, "0x%lx, ", pStack[i] );
+ fprintf( stderr, "\n" );
+ fprintf( stderr, "pRegisterReturn is %p\n", pRegisterReturn);
+ }
+#endif
+
+ // Load parameters to stack, if necessary
+ sal_uInt64 *stack = (sal_uInt64 *) __builtin_alloca( nStack * 8 );
+ memcpy( stack, pStack, nStack * 8 );
+
+ // To get pointer to method
+ // a) get the address of the vtable
+ sal_uInt64 pMethod = *((sal_uInt64 *)pThis);
+ // b) get the address from the vtable entry at offset, each entry is 16bytes,
+ // 8 for function pointer, and 8 for global pointer
+ pMethod += 16 * nVtableIndex;
+
+ typedef void (* FunctionCall )( sal_uInt64, sal_uInt64, sal_uInt64, sal_uInt64, sal_uInt64, sal_uInt64, sal_uInt64, sal_uInt64 );
+ FunctionCall pFunc = (FunctionCall)pMethod;
+
+ switch (nFPR) //deliberate fall through
+ {
+ case 8:
+ asm volatile("ldfd f15=%0" : : "m"(pFPR[7]) : "f15");
+ case 7:
+ asm volatile("ldfd f14=%0" : : "m"(pFPR[6]) : "f14");
+ case 6:
+ asm volatile("ldfd f13=%0" : : "m"(pFPR[5]) : "f13");
+ case 5:
+ asm volatile("ldfd f12=%0" : : "m"(pFPR[4]) : "f12");
+ case 4:
+ asm volatile("ldfd f11=%0" : : "m"(pFPR[3]) : "f11");
+ case 3:
+ asm volatile("ldfd f10=%0" : : "m"(pFPR[2]) : "f10");
+ case 2:
+ asm volatile("ldfd f9=%0" : : "m"(pFPR[1]) : "f9");
+ case 1:
+ asm volatile("ldfd f8=%0" : : "m"(pFPR[0]) : "f8");
+ default:
+ break;
+ }
+
+ //stick the return area into r8 for big struct returning
+ asm volatile("ld8 r8=%0" : : "m"(pRegisterReturn) : "r8");
+
+ (*pFunc)(pGPR[0], pGPR[1], pGPR[2], pGPR[3], pGPR[4], pGPR[5], pGPR[6], pGPR[7]);
+
+ register double f8 asm("f8");
+ ia64::RegReturn ret;
+ {
+ register long r8 asm("r8"); ret.r8 = r8;
+ register long r9 asm("r9"); ret.r9 = r9;
+ register long r10 asm("r10"); ret.r10 = r10;
+ register long r11 asm("r11"); ret.r11 = r11;
+ }
+
+ MapReturn(ret, f8, pReturnTypeDescr, bSimpleReturn, (sal_uInt64*)pRegisterReturn);
+}
+
+// Macros for easier insertion of values to registers or stack
+// pSV - pointer to the source
+// nr - order of the value [will be increased if stored to register]
+// pFPR, pGPR - pointer to the registers
+// pDS - pointer to the stack [will be increased if stored here]
+
+// The value in %xmm register is already prepared to be retrieved as a float,
+// thus we treat float and double the same
+#define INSERT_FLOAT( pSV, nfr, pFPR, ngr, pGPR, pDS, bOverflow ) \
+ if ( nfr < ia64::MAX_SSE_REGS && ngr < ia64::MAX_GPR_REGS ) \
+ pFPR[nfr++] = *reinterpret_cast<float *>( pSV ); \
+ if ( ngr < ia64::MAX_GPR_REGS ) \
+ pGPR[ngr++] = *reinterpret_cast<sal_uInt64 *>( pSV ); \
+ else \
+ bOverFlow = true; \
+ if (bOverFlow) \
+ *pDS++ = *reinterpret_cast<sal_uInt64 *>( pSV ); // verbatim!
+
+#define INSERT_DOUBLE( pSV, nfr, pFPR, ngr, pGPR, pDS, bOverflow ) \
+ if ( nfr < ia64::MAX_SSE_REGS && ngr < ia64::MAX_GPR_REGS ) \
+ pFPR[nfr++] = *reinterpret_cast<double *>( pSV ); \
+ if ( ngr < ia64::MAX_GPR_REGS ) \
+ pGPR[ngr++] = *reinterpret_cast<sal_uInt64 *>( pSV ); \
+ else \
+ bOverFlow = true; \
+ if (bOverFlow) \
+ *pDS++ = *reinterpret_cast<sal_uInt64 *>( pSV ); // verbatim!
+
+#define INSERT_INT64( pSV, nr, pGPR, pDS, bOverflow ) \
+ if ( nr < ia64::MAX_GPR_REGS ) \
+ pGPR[nr++] = *reinterpret_cast<sal_uInt64 *>( pSV ); \
+ else \
+ bOverFlow = true; \
+ if (bOverFlow) \
+ *pDS++ = *reinterpret_cast<sal_uInt64 *>( pSV );
+
+#define INSERT_INT32( pSV, nr, pGPR, pDS, bOverflow ) \
+ if ( nr < ia64::MAX_GPR_REGS ) \
+ pGPR[nr++] = *reinterpret_cast<sal_uInt32 *>( pSV ); \
+ else \
+ bOverFlow = true; \
+ if (bOverFlow) \
+ *pDS++ = *reinterpret_cast<sal_uInt32 *>( pSV );
+
+#define INSERT_INT16( pSV, nr, pGPR, pDS, bOverflow ) \
+ if ( nr < ia64::MAX_GPR_REGS ) \
+ pGPR[nr++] = *reinterpret_cast<sal_uInt16 *>( pSV ); \
+ else \
+ bOverFlow = true; \
+ if (bOverFlow) \
+ *pDS++ = *reinterpret_cast<sal_uInt16 *>( pSV );
+
+#define INSERT_INT8( pSV, nr, pGPR, pDS, bOverflow ) \
+ if ( nr < ia64::MAX_GPR_REGS ) \
+ pGPR[nr++] = *reinterpret_cast<sal_uInt8 *>( pSV ); \
+ else \
+ bOverFlow = true; \
+ if (bOverFlow) \
+ *pDS++ = *reinterpret_cast<sal_uInt8 *>( pSV );
+
+//==================================================================================================
+static void cpp_call(
+ bridges::cpp_uno::shared::UnoInterfaceProxy * pThis,
+ bridges::cpp_uno::shared::VtableSlot aVtableSlot,
+ typelib_TypeDescriptionReference * pReturnTypeRef,
+ sal_Int32 nParams, typelib_MethodParameter * pParams,
+ void * pUnoReturn, void * pUnoArgs[], uno_Any ** ppUnoExc )
+{
+ // max space for: [complex ret ptr], values|ptr ...
+ sal_uInt64 * pStack = (sal_uInt64 *)alloca( (nParams+3) * sizeof(sal_Int64) );
+ sal_uInt64 * pStackStart = pStack;
+
+ sal_uInt64 pGPR[ia64::MAX_GPR_REGS];
+ sal_uInt32 nGPR = 0;
+
+ double pFPR[ia64::MAX_SSE_REGS];
+ sal_uInt32 nFPR = 0;
+
+ // return
+ typelib_TypeDescription * pReturnTypeDescr = 0;
+ TYPELIB_DANGER_GET( &pReturnTypeDescr, pReturnTypeRef );
+ OSL_ENSURE( pReturnTypeDescr, "### expected return type description!" );
+
+ void * pCppReturn = 0; // if != 0 && != pUnoReturn, needs reconversion
+
+ bool bOverFlow = false;
+
+ bool bSimpleReturn = true;
+ if (pReturnTypeDescr)
+ {
+#ifdef CMC_DEBUG
+ fprintf(stderr, "return type is %d\n", pReturnTypeDescr->eTypeClass);
+#endif
+ if ( ia64::return_in_hidden_param(pReturnTypeRef) || ia64::return_via_r8_buffer(pReturnTypeRef) )
+ bSimpleReturn = false;
+
+ if ( bSimpleReturn )
+ {
+ pCppReturn = pUnoReturn; // direct way for simple types
+#ifdef CMC_DEBUG
+ fprintf(stderr, "simple return\n");
+#endif
+ }
+ else
+ {
+ // complex return via ptr
+ pCppReturn = (bridges::cpp_uno::shared::relatesToInterfaceType( pReturnTypeDescr )
+ ? alloca( pReturnTypeDescr->nSize ) : pUnoReturn);
+#ifdef CMC_DEBUG
+ fprintf(stderr, "pCppReturn/pUnoReturn is %lx/%lx", pCppReturn, pUnoReturn);
+#endif
+ if (!ia64::return_via_r8_buffer(pReturnTypeRef))
+ INSERT_INT64( &pCppReturn, nGPR, pGPR, pStack, bOverFlow );
+ }
+ }
+ // push "this" pointer
+ void * pAdjustedThisPtr = reinterpret_cast< void ** >( pThis->getCppI() ) + aVtableSlot.offset;
+
+#ifdef CMC_DEBUG
+ fprintf(stderr, "this pointer is %p\n", pAdjustedThisPtr);
+#endif
+ INSERT_INT64( &pAdjustedThisPtr, nGPR, pGPR, pStack, bOverFlow );
+
+ // Args
+ void ** pCppArgs = (void **)alloca( 3 * sizeof(void *) * nParams );
+ // indizes of values this have to be converted (interface conversion cpp<=>uno)
+ sal_Int32 * pTempIndizes = (sal_Int32 *)(pCppArgs + nParams);
+ // type descriptions for reconversions
+ typelib_TypeDescription ** ppTempParamTypeDescr = (typelib_TypeDescription **)(pCppArgs + (2 * nParams));
+
+ sal_Int32 nTempIndizes = 0;
+
+#ifdef CMC_DEBUG
+ fprintf(stderr, "n params is %d\n", nParams);
+#endif
+
+ for ( sal_Int32 nPos = 0; nPos < nParams; ++nPos )
+ {
+ const typelib_MethodParameter & rParam = pParams[nPos];
+ typelib_TypeDescription * pParamTypeDescr = 0;
+ TYPELIB_DANGER_GET( &pParamTypeDescr, rParam.pTypeRef );
+
+#ifdef CMC_DEBUG
+ fprintf(stderr, "param %d is %d %d %d\n", nPos, rParam.bOut, bridges::cpp_uno::shared::isSimpleType( pParamTypeDescr ),
+ pParamTypeDescr->eTypeClass);
+#endif
+
+ if (!rParam.bOut && bridges::cpp_uno::shared::isSimpleType( pParamTypeDescr ))
+ {
+// uno_copyAndConvertData( pCppArgs[nPos] = alloca( 8 ), pUnoArgs[nPos], pParamTypeDescr,
+ uno_copyAndConvertData( pCppArgs[nPos] = pStack, pUnoArgs[nPos], pParamTypeDescr,
+ pThis->getBridge()->getUno2Cpp() );
+ switch (pParamTypeDescr->eTypeClass)
+ {
+ case typelib_TypeClass_HYPER:
+ case typelib_TypeClass_UNSIGNED_HYPER:
+#ifdef CMC_DEBUG
+ fprintf(stderr, "hyper is %lx\n", *(unsigned long*)(pCppArgs[nPos]));
+#endif
+ INSERT_INT64( pCppArgs[nPos], nGPR, pGPR, pStack, bOverFlow );
+ break;
+ case typelib_TypeClass_LONG:
+ case typelib_TypeClass_UNSIGNED_LONG:
+ case typelib_TypeClass_ENUM:
+#ifdef CMC_DEBUG
+ fprintf(stderr, "long is %lx\n", *(unsigned int*)(pCppArgs[nPos]));
+#endif
+ INSERT_INT32( pCppArgs[nPos], nGPR, pGPR, pStack, bOverFlow );
+ break;
+ case typelib_TypeClass_SHORT:
+ case typelib_TypeClass_CHAR:
+ case typelib_TypeClass_UNSIGNED_SHORT:
+#ifdef CMC_DEBUG
+ fprintf(stderr, "short is %x\n", *(unsigned short*)(pCppArgs[nPos]));
+#endif
+ INSERT_INT16( pCppArgs[nPos], nGPR, pGPR, pStack, bOverFlow );
+ break;
+ case typelib_TypeClass_BOOLEAN:
+ case typelib_TypeClass_BYTE:
+#ifdef CMC_DEBUG
+ fprintf(stderr, "byte is %x\n", *(unsigned char*)(pCppArgs[nPos]));
+#endif
+ INSERT_INT8( pCppArgs[nPos], nGPR, pGPR, pStack, bOverFlow );
+ break;
+ case typelib_TypeClass_FLOAT:
+#ifdef CMC_DEBUG
+ fprintf(stderr, "a float is %f\n", *(float*)(pCppArgs[nPos]));
+ fprintf(stderr, "b float is %f\n", *(double*)(pCppArgs[nPos]));
+#endif
+ INSERT_FLOAT( pCppArgs[nPos], nFPR, pFPR, nGPR, pGPR, pStack, bOverFlow );
+ break;
+ case typelib_TypeClass_DOUBLE:
+#ifdef CMC_DEBUG
+ fprintf(stderr, "double is %f\n", *(double*)(pCppArgs[nPos]));
+#endif
+ INSERT_DOUBLE( pCppArgs[nPos], nFPR, pFPR, nGPR, pGPR, pStack, bOverFlow );
+ break;
+ default:
+ break;
+ }
+
+ // no longer needed
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+
+ }
+ else // ptr to complex value | ref
+ {
+#ifdef CMC_DEBUG
+ fprintf(stderr, "complex type again %d\n", rParam.bIn);
+#endif
+ if (! rParam.bIn) // is pure out
+ {
+#ifdef CMC_DEBUG
+ fprintf(stderr, "complex size is %d\n", pParamTypeDescr->nSize );
+#endif
+ // cpp out is constructed mem, uno out is not!
+ uno_constructData(
+ pCppArgs[nPos] = alloca( pParamTypeDescr->nSize ),
+ pParamTypeDescr );
+ pTempIndizes[nTempIndizes] = nPos; // default constructed for cpp call
+ // will be released at reconversion
+ ppTempParamTypeDescr[nTempIndizes++] = pParamTypeDescr;
+ }
+ // is in/inout
+ else if (bridges::cpp_uno::shared::relatesToInterfaceType( pParamTypeDescr ))
+ {
+#ifdef CMC_DEBUG
+ fprintf(stderr, "this one\n");
+#endif
+ uno_copyAndConvertData(
+ pCppArgs[nPos] = alloca( pParamTypeDescr->nSize ),
+ pUnoArgs[nPos], pParamTypeDescr, pThis->getBridge()->getUno2Cpp() );
+
+ pTempIndizes[nTempIndizes] = nPos; // has to be reconverted
+ // will be released at reconversion
+ ppTempParamTypeDescr[nTempIndizes++] = pParamTypeDescr;
+ }
+ else // direct way
+ {
+#ifdef CMC_DEBUG
+ fprintf(stderr, "that one, passing %lx through\n", pUnoArgs[nPos]);
+#endif
+ pCppArgs[nPos] = pUnoArgs[nPos];
+ // no longer needed
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ INSERT_INT64( &(pCppArgs[nPos]), nGPR, pGPR, pStack, bOverFlow );
+ }
+ }
+
+ try
+ {
+ callVirtualMethod(
+ pAdjustedThisPtr, aVtableSlot.index,
+ pCppReturn, pReturnTypeDescr, bSimpleReturn,
+ pStackStart, ( pStack - pStackStart ),
+ pGPR, nGPR,
+ pFPR, nFPR );
+ // NO exception occured...
+ *ppUnoExc = 0;
+
+ // reconvert temporary params
+ for ( ; nTempIndizes--; )
+ {
+ sal_Int32 nIndex = pTempIndizes[nTempIndizes];
+ typelib_TypeDescription * pParamTypeDescr = ppTempParamTypeDescr[nTempIndizes];
+
+ if (pParams[nIndex].bIn)
+ {
+ if (pParams[nIndex].bOut) // inout
+ {
+ uno_destructData( pUnoArgs[nIndex], pParamTypeDescr, 0 ); // destroy uno value
+ uno_copyAndConvertData( pUnoArgs[nIndex], pCppArgs[nIndex], pParamTypeDescr,
+ pThis->getBridge()->getCpp2Uno() );
+ }
+ }
+ else // pure out
+ {
+ uno_copyAndConvertData( pUnoArgs[nIndex], pCppArgs[nIndex], pParamTypeDescr,
+ pThis->getBridge()->getCpp2Uno() );
+ }
+ // destroy temp cpp param => cpp: every param was constructed
+ uno_destructData( pCppArgs[nIndex], pParamTypeDescr, cpp_release );
+
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ // return value
+ if (pCppReturn && pUnoReturn != pCppReturn)
+ {
+ uno_copyAndConvertData( pUnoReturn, pCppReturn, pReturnTypeDescr,
+ pThis->getBridge()->getCpp2Uno() );
+ uno_destructData( pCppReturn, pReturnTypeDescr, cpp_release );
+ }
+ }
+ catch (...)
+ {
+ // fill uno exception
+ fillUnoException( CPPU_CURRENT_NAMESPACE::__cxa_get_globals()->caughtExceptions,
+ *ppUnoExc, pThis->getBridge()->getCpp2Uno() );
+
+ // temporary params
+ for ( ; nTempIndizes--; )
+ {
+ sal_Int32 nIndex = pTempIndizes[nTempIndizes];
+ // destroy temp cpp param => cpp: every param was constructed
+ uno_destructData( pCppArgs[nIndex], ppTempParamTypeDescr[nTempIndizes], cpp_release );
+ TYPELIB_DANGER_RELEASE( ppTempParamTypeDescr[nTempIndizes] );
+ }
+ // return type
+ if (pReturnTypeDescr)
+ TYPELIB_DANGER_RELEASE( pReturnTypeDescr );
+ }
+}
+
+}
+
+namespace bridges { namespace cpp_uno { namespace shared {
+
+void unoInterfaceProxyDispatch(
+ uno_Interface * pUnoI, const typelib_TypeDescription * pMemberDescr,
+ void * pReturn, void * pArgs[], uno_Any ** ppException )
+{
+ // is my surrogate
+ bridges::cpp_uno::shared::UnoInterfaceProxy * pThis
+ = static_cast< bridges::cpp_uno::shared::UnoInterfaceProxy *> (pUnoI);
+
+ switch (pMemberDescr->eTypeClass)
+ {
+ case typelib_TypeClass_INTERFACE_ATTRIBUTE:
+ {
+
+ VtableSlot aVtableSlot(
+ getVtableSlot(
+ reinterpret_cast<
+ typelib_InterfaceAttributeTypeDescription const * >(
+ pMemberDescr)));
+
+ if (pReturn)
+ {
+ // dependent dispatch
+ cpp_call(
+ pThis, aVtableSlot,
+ ((typelib_InterfaceAttributeTypeDescription *)pMemberDescr)->pAttributeTypeRef,
+ 0, 0, // no params
+ pReturn, pArgs, ppException );
+ }
+ else
+ {
+ // is SET
+ typelib_MethodParameter aParam;
+ aParam.pTypeRef =
+ ((typelib_InterfaceAttributeTypeDescription *)pMemberDescr)->pAttributeTypeRef;
+ aParam.bIn = sal_True;
+ aParam.bOut = sal_False;
+
+ typelib_TypeDescriptionReference * pReturnTypeRef = 0;
+ OUString aVoidName( RTL_CONSTASCII_USTRINGPARAM("void") );
+ typelib_typedescriptionreference_new(
+ &pReturnTypeRef, typelib_TypeClass_VOID, aVoidName.pData );
+
+ // dependent dispatch
+ aVtableSlot.index += 1; //get then set method
+ cpp_call(
+ pThis, aVtableSlot,
+ pReturnTypeRef,
+ 1, &aParam,
+ pReturn, pArgs, ppException );
+
+ typelib_typedescriptionreference_release( pReturnTypeRef );
+ }
+
+ break;
+ }
+ case typelib_TypeClass_INTERFACE_METHOD:
+ {
+
+ VtableSlot aVtableSlot(
+ getVtableSlot(
+ reinterpret_cast<
+ typelib_InterfaceMethodTypeDescription const * >(
+ pMemberDescr)));
+ switch (aVtableSlot.index)
+ {
+ // standard calls
+ case 1: // acquire uno interface
+ (*pUnoI->acquire)( pUnoI );
+ *ppException = 0;
+ break;
+ case 2: // release uno interface
+ (*pUnoI->release)( pUnoI );
+ *ppException = 0;
+ break;
+ case 0: // queryInterface() opt
+ {
+ typelib_TypeDescription * pTD = 0;
+ TYPELIB_DANGER_GET( &pTD, reinterpret_cast< Type * >( pArgs[0] )->getTypeLibType() );
+ if (pTD)
+ {
+ uno_Interface * pInterface = 0;
+ (*pThis->pBridge->getUnoEnv()->getRegisteredInterface)(
+ pThis->pBridge->getUnoEnv(),
+ (void **)&pInterface, pThis->oid.pData, (typelib_InterfaceTypeDescription *)pTD );
+
+ if (pInterface)
+ {
+ ::uno_any_construct(
+ reinterpret_cast< uno_Any * >( pReturn ),
+ &pInterface, pTD, 0 );
+ (*pInterface->release)( pInterface );
+ TYPELIB_DANGER_RELEASE( pTD );
+ *ppException = 0;
+ break;
+ }
+ TYPELIB_DANGER_RELEASE( pTD );
+ }
+ } // else perform queryInterface()
+ default:
+ // dependent dispatch
+ cpp_call(
+ pThis, aVtableSlot,
+ ((typelib_InterfaceMethodTypeDescription *)pMemberDescr)->pReturnTypeRef,
+ ((typelib_InterfaceMethodTypeDescription *)pMemberDescr)->nParams,
+ ((typelib_InterfaceMethodTypeDescription *)pMemberDescr)->pParams,
+ pReturn, pArgs, ppException );
+ }
+ break;
+ }
+ default:
+ {
+ ::com::sun::star::uno::RuntimeException aExc(
+ OUString( RTL_CONSTASCII_USTRINGPARAM("illegal member type description!") ),
+ ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >() );
+
+ Type const & rExcType = ::getCppuType( &aExc );
+ // binary identical null reference
+ ::uno_type_any_construct( *ppException, &aExc, rExcType.getTypeLibType(), 0 );
+ }
+ }
+}
+
+} } }
+/* vi:set tabstop=4 shiftwidth=4 expandtab: */
diff --git a/bridges/source/cpp_uno/gcc3_linux_intel/call.s b/bridges/source/cpp_uno/gcc3_linux_intel/call.s
new file mode 100644
index 000000000000..45d7c5308d30
--- /dev/null
+++ b/bridges/source/cpp_uno/gcc3_linux_intel/call.s
@@ -0,0 +1,274 @@
+ .text
+
+.globl privateSnippetExecutorGeneral
+ .type privateSnippetExecutorGeneral,@function
+privateSnippetExecutorGeneral:
+.LFBg:
+ movl %esp,%ecx
+ pushl %ebp # proper stack frame needed for exception handling
+.LCFIg0:
+ movl %esp,%ebp
+.LCFIg1:
+ subl $0x8,%esp # 32bit returnValue, and preserve potential 128bit
+ # stack alignment
+ pushl %esp # 32bit &returnValue
+ pushl %ecx # 32bit pCallStack
+ pushl %edx # 32bit nVtableOffset
+ pushl %eax # 32bit nFunctionIndex
+ call cpp_vtable_call
+ movl 16(%esp),%eax # 32bit returnValue
+ leave
+ ret
+.LFEg:
+ .size privateSnippetExecutorGeneral,.-privateSnippetExecutorGeneral
+
+.globl privateSnippetExecutorVoid
+ .type privateSnippetExecutorVoid,@function
+privateSnippetExecutorVoid:
+.LFBv:
+ movl %esp,%ecx
+ pushl %ebp # proper stack frame needed for exception handling
+.LCFIv0:
+ movl %esp,%ebp
+.LCFIv1:
+ andl $0xFFFFFFF0,%esp # preserve potential 128bit stack alignment
+ pushl $0 # 32bit null pointer (returnValue not used)
+ pushl %ecx # 32bit pCallStack
+ pushl %edx # 32bit nVtableOffset
+ pushl %eax # 32bit nFunctionIndex
+ call cpp_vtable_call
+ leave
+ ret
+.LFEv:
+ .size privateSnippetExecutorVoid,.-privateSnippetExecutorVoid
+
+.globl privateSnippetExecutorHyper
+ .type privateSnippetExecutorHyper,@function
+privateSnippetExecutorHyper:
+.LFBh:
+ movl %esp,%ecx
+ pushl %ebp # proper stack frame needed for exception handling
+.LCFIh0:
+ movl %esp,%ebp
+.LCFIh1:
+ subl $0x8,%esp # 64bit returnValue (preserves potential 128bit
+ # stack alignment)
+ pushl %esp # 32bit &returnValue
+ pushl %ecx # 32bit pCallStack
+ pushl %edx # 32bit nVtableOffset
+ pushl %eax # 32bit nFunctionIndex
+ call cpp_vtable_call
+ movl 16(%esp),%eax # 64bit returnValue, lower half
+ movl 20(%esp),%edx # 64bit returnValue, upper half
+ leave
+ ret
+.LFEh:
+ .size privateSnippetExecutorHyper,.-privateSnippetExecutorHyper
+
+.globl privateSnippetExecutorFloat
+ .type privateSnippetExecutorFloat,@function
+privateSnippetExecutorFloat:
+.LFBf:
+ movl %esp,%ecx
+ pushl %ebp # proper stack frame needed for exception handling
+.LCFIf0:
+ movl %esp,%ebp
+.LCFIf1:
+ subl $0x8,%esp # 32bit returnValue, and preserve potential 128bit
+ # stack alignment
+ pushl %esp # 32bit &returnValue
+ pushl %ecx # 32bit pCallStack
+ pushl %edx # 32bit nVtableOffset
+ pushl %eax # 32bit nFunctionIndex
+ call cpp_vtable_call
+ flds 16(%esp) # 32bit returnValue
+ leave
+ ret
+.LFEf:
+ .size privateSnippetExecutorFloat,.-privateSnippetExecutorFloat
+
+.globl privateSnippetExecutorDouble
+ .type privateSnippetExecutorDouble,@function
+privateSnippetExecutorDouble:
+.LFBd:
+ movl %esp,%ecx
+ pushl %ebp # proper stack frame needed for exception handling
+.LCFId0:
+ movl %esp,%ebp
+.LCFId1:
+ subl $0x8,%esp # 64bit returnValue (preserves potential 128bit
+ # stack alignment)
+ pushl %esp # 32bit &returnValue
+ pushl %ecx # 32bit pCallStack
+ pushl %edx # 32bit nVtableOffset
+ pushl %eax # 32bit nFunctionIndex
+ call cpp_vtable_call
+ fldl 16(%esp) # 64bit returnValue
+ leave
+ ret
+.LFEd:
+ .size privateSnippetExecutorDouble,.-privateSnippetExecutorDouble
+
+.globl privateSnippetExecutorClass
+ .type privateSnippetExecutorClass,@function
+privateSnippetExecutorClass:
+.LFBc:
+ movl %esp,%ecx
+ pushl %ebp # proper stack frame needed for exception handling
+.LCFIc0:
+ movl %esp,%ebp
+.LCFIc1:
+ subl $0x8,%esp # 32bit returnValue, and preserve potential 128bit
+ # stack alignment
+ pushl %esp # 32bit &returnValue
+ pushl %ecx # 32bit pCallStack
+ pushl %edx # 32bit nVtableOffset
+ pushl %eax # 32bit nFunctionIndex
+ call cpp_vtable_call
+ movl 16(%esp),%eax # 32bit returnValue
+ leave
+ ret $4
+.LFEc:
+ .size privateSnippetExecutorClass,.-privateSnippetExecutorClass
+
+ .section .eh_frame,"a",@progbits
+.Lframe1:
+ .long .LECIE1-.LSCIE1 # length
+.LSCIE1:
+ .long 0 # CIE_ID
+ .byte 1 # version
+ .string "zR" # augmentation
+ .uleb128 1 # code_alignment_factor
+ .sleb128 -4 # data_alignment_factor
+ .byte 8 # return_address_register
+ .uleb128 1 # augmentation size 1:
+ .byte 0x1B # FDE Encoding (pcrel sdata4)
+ # initial_instructions:
+ .byte 0x0C # DW_CFA_def_cfa %esp, 4
+ .uleb128 4
+ .uleb128 4
+ .byte 0x88 # DW_CFA_offset ret, 1
+ .uleb128 1
+ .align 4
+.LECIE1:
+.LSFDEg:
+ .long .LEFDEg-.LASFDEg # length
+.LASFDEg:
+ .long .LASFDEg-.Lframe1 # CIE_pointer
+ .long .LFBg-. # initial_location
+ .long .LFEg-.LFBg # address_range
+ .uleb128 0 # augmentation size 0
+ # instructions:
+ .byte 0x04 # DW_CFA_advance_loc4
+ .long .LCFIg0-.LFBg
+ .byte 0x0E # DW_CFA_def_cfa_offset 8
+ .uleb128 8
+ .byte 0x85 # DW_CFA_offset %ebp, 2
+ .uleb128 2
+ .byte 0x04 # DW_CFA_advance_loc4
+ .long .LCFIg1-.LCFIg0
+ .byte 0x0D # DW_CFA_def_cfa_register %ebp
+ .uleb128 5
+ .align 4
+.LEFDEg:
+.LSFDEv:
+ .long .LEFDEv-.LASFDEv # length
+.LASFDEv:
+ .long .LASFDEv-.Lframe1 # CIE_pointer
+ .long .LFBv-. # initial_location
+ .long .LFEv-.LFBv # address_range
+ .uleb128 0 # augmentation size 0
+ # instructions:
+ .byte 0x04 # DW_CFA_advance_loc4
+ .long .LCFIv0-.LFBv
+ .byte 0x0E # DW_CFA_def_cfa_offset 8
+ .uleb128 8
+ .byte 0x85 # DW_CFA_offset %ebp, 2
+ .uleb128 2
+ .byte 0x04 # DW_CFA_advance_loc4
+ .long .LCFIv1-.LCFIv0
+ .byte 0x0D # DW_CFA_def_cfa_register %ebp
+ .uleb128 5
+ .align 4
+.LEFDEv:
+.LSFDEh:
+ .long .LEFDEh-.LASFDEh # length
+.LASFDEh:
+ .long .LASFDEh-.Lframe1 # CIE_pointer
+ .long .LFBh-. # initial_location
+ .long .LFEh-.LFBh # address_range
+ .uleb128 0 # augmentation size 0
+ # instructions:
+ .byte 0x04 # DW_CFA_advance_loc4
+ .long .LCFIh0-.LFBh
+ .byte 0x0E # DW_CFA_def_cfa_offset 8
+ .uleb128 8
+ .byte 0x85 # DW_CFA_offset %ebp, 2
+ .uleb128 2
+ .byte 0x04 # DW_CFA_advance_loc4
+ .long .LCFIh1-.LCFIh0
+ .byte 0x0D # DW_CFA_def_cfa_register %ebp
+ .uleb128 5
+ .align 4
+.LEFDEh:
+.LSFDEf:
+ .long .LEFDEf-.LASFDEf # length
+.LASFDEf:
+ .long .LASFDEf-.Lframe1 # CIE_pointer
+ .long .LFBf-. # initial_location
+ .long .LFEf-.LFBf # address_range
+ .uleb128 0 # augmentation size 0
+ # instructions:
+ .byte 0x04 # DW_CFA_advance_loc4
+ .long .LCFIf0-.LFBf
+ .byte 0x0E # DW_CFA_def_cfa_offset 8
+ .uleb128 8
+ .byte 0x85 # DW_CFA_offset %ebp, 2
+ .uleb128 2
+ .byte 0x04 # DW_CFA_advance_loc4
+ .long .LCFIf1-.LCFIf0
+ .byte 0x0D # DW_CFA_def_cfa_register %ebp
+ .uleb128 5
+ .align 4
+.LEFDEf:
+.LSFDEd:
+ .long .LEFDEd-.LASFDEd # length
+.LASFDEd:
+ .long .LASFDEd-.Lframe1 # CIE_pointer
+ .long .LFBd-. # initial_location
+ .long .LFEd-.LFBd # address_range
+ .uleb128 0 # augmentation size 0
+ # instructions:
+ .byte 0x04 # DW_CFA_advance_loc4
+ .long .LCFId0-.LFBd
+ .byte 0x0E # DW_CFA_def_cfa_offset 8
+ .uleb128 8
+ .byte 0x85 # DW_CFA_offset %ebp, 2
+ .uleb128 2
+ .byte 0x04 # DW_CFA_advance_loc4
+ .long .LCFId1-.LCFId0
+ .byte 0x0D # DW_CFA_def_cfa_register %ebp
+ .uleb128 5
+ .align 4
+.LEFDEd:
+.LSFDEc:
+ .long .LEFDEc-.LASFDEc # length
+.LASFDEc:
+ .long .LASFDEc-.Lframe1 # CIE_pointer
+ .long .LFBc-. # initial_location
+ .long .LFEc-.LFBc # address_range
+ .uleb128 0 # augmentation size 0
+ # instructions:
+ .byte 0x04 # DW_CFA_advance_loc4
+ .long .LCFIc0-.LFBc
+ .byte 0x0E # DW_CFA_def_cfa_offset 8
+ .uleb128 8
+ .byte 0x85 # DW_CFA_offset %ebp, 2
+ .uleb128 2
+ .byte 0x04 # DW_CFA_advance_loc4
+ .long .LCFIc1-.LCFIc0
+ .byte 0x0D # DW_CFA_def_cfa_register %ebp
+ .uleb128 5
+ .align 4
+.LEFDEc:
+ .section .note.GNU-stack,"",@progbits
diff --git a/bridges/source/cpp_uno/gcc3_linux_intel/cpp2uno.cxx b/bridges/source/cpp_uno/gcc3_linux_intel/cpp2uno.cxx
new file mode 100644
index 000000000000..ac47e786588c
--- /dev/null
+++ b/bridges/source/cpp_uno/gcc3_linux_intel/cpp2uno.cxx
@@ -0,0 +1,489 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_bridges.hxx"
+
+#include <com/sun/star/uno/genfunc.hxx>
+#include "com/sun/star/uno/RuntimeException.hpp"
+#include <uno/data.h>
+#include <typelib/typedescription.hxx>
+
+#include "bridges/cpp_uno/shared/bridge.hxx"
+#include "bridges/cpp_uno/shared/cppinterfaceproxy.hxx"
+#include "bridges/cpp_uno/shared/types.hxx"
+#include "bridges/cpp_uno/shared/vtablefactory.hxx"
+
+#include "share.hxx"
+
+using namespace ::com::sun::star::uno;
+
+namespace
+{
+
+//==================================================================================================
+void cpp2uno_call(
+ bridges::cpp_uno::shared::CppInterfaceProxy * pThis,
+ const typelib_TypeDescription * pMemberTypeDescr,
+ typelib_TypeDescriptionReference * pReturnTypeRef, // 0 indicates void return
+ sal_Int32 nParams, typelib_MethodParameter * pParams,
+ void ** pCallStack,
+ void * pReturnValue )
+{
+ // pCallStack: ret, [return ptr], this, params
+ char * pCppStack = (char *)(pCallStack +1);
+
+ // return
+ typelib_TypeDescription * pReturnTypeDescr = 0;
+ if (pReturnTypeRef)
+ TYPELIB_DANGER_GET( &pReturnTypeDescr, pReturnTypeRef );
+
+ void * pUnoReturn = 0;
+ void * pCppReturn = 0; // complex return ptr: if != 0 && != pUnoReturn, reconversion need
+
+ if (pReturnTypeDescr)
+ {
+ if (bridges::cpp_uno::shared::isSimpleType( pReturnTypeDescr ))
+ {
+ pUnoReturn = pReturnValue; // direct way for simple types
+ }
+ else // complex return via ptr (pCppReturn)
+ {
+ pCppReturn = *(void **)pCppStack;
+ pCppStack += sizeof(void *);
+
+ pUnoReturn = (bridges::cpp_uno::shared::relatesToInterfaceType(
+ pReturnTypeDescr )
+ ? alloca( pReturnTypeDescr->nSize )
+ : pCppReturn); // direct way
+ }
+ }
+ // pop this
+ pCppStack += sizeof( void* );
+
+ // stack space
+ OSL_ENSURE( sizeof(void *) == sizeof(sal_Int32), "### unexpected size!" );
+ // parameters
+ void ** pUnoArgs = (void **)alloca( 4 * sizeof(void *) * nParams );
+ void ** pCppArgs = pUnoArgs + nParams;
+ // indizes of values this have to be converted (interface conversion cpp<=>uno)
+ sal_Int32 * pTempIndizes = (sal_Int32 *)(pUnoArgs + (2 * nParams));
+ // type descriptions for reconversions
+ typelib_TypeDescription ** ppTempParamTypeDescr = (typelib_TypeDescription **)(pUnoArgs + (3 * nParams));
+
+ sal_Int32 nTempIndizes = 0;
+
+ for ( sal_Int32 nPos = 0; nPos < nParams; ++nPos )
+ {
+ const typelib_MethodParameter & rParam = pParams[nPos];
+ typelib_TypeDescription * pParamTypeDescr = 0;
+ TYPELIB_DANGER_GET( &pParamTypeDescr, rParam.pTypeRef );
+
+ if (!rParam.bOut
+ && bridges::cpp_uno::shared::isSimpleType( pParamTypeDescr ))
+ // value
+ {
+ pCppArgs[nPos] = pCppStack;
+ pUnoArgs[nPos] = pCppStack;
+ switch (pParamTypeDescr->eTypeClass)
+ {
+ case typelib_TypeClass_HYPER:
+ case typelib_TypeClass_UNSIGNED_HYPER:
+ case typelib_TypeClass_DOUBLE:
+ pCppStack += sizeof(sal_Int32); // extra long
+ break;
+ default:
+ break;
+ }
+ // no longer needed
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ else // ptr to complex value | ref
+ {
+ pCppArgs[nPos] = *(void **)pCppStack;
+
+ if (! rParam.bIn) // is pure out
+ {
+ // uno out is unconstructed mem!
+ pUnoArgs[nPos] = alloca( pParamTypeDescr->nSize );
+ pTempIndizes[nTempIndizes] = nPos;
+ // will be released at reconversion
+ ppTempParamTypeDescr[nTempIndizes++] = pParamTypeDescr;
+ }
+ // is in/inout
+ else if (bridges::cpp_uno::shared::relatesToInterfaceType(
+ pParamTypeDescr ))
+ {
+ uno_copyAndConvertData( pUnoArgs[nPos] = alloca( pParamTypeDescr->nSize ),
+ *(void **)pCppStack, pParamTypeDescr,
+ pThis->getBridge()->getCpp2Uno() );
+ pTempIndizes[nTempIndizes] = nPos; // has to be reconverted
+ // will be released at reconversion
+ ppTempParamTypeDescr[nTempIndizes++] = pParamTypeDescr;
+ }
+ else // direct way
+ {
+ pUnoArgs[nPos] = *(void **)pCppStack;
+ // no longer needed
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ }
+ pCppStack += sizeof(sal_Int32); // standard parameter length
+ }
+
+ // ExceptionHolder
+ uno_Any aUnoExc; // Any will be constructed by callee
+ uno_Any * pUnoExc = &aUnoExc;
+
+ // invoke uno dispatch call
+ (*pThis->getUnoI()->pDispatcher)(
+ pThis->getUnoI(), pMemberTypeDescr, pUnoReturn, pUnoArgs, &pUnoExc );
+
+ // in case an exception occured...
+ if (pUnoExc)
+ {
+ // destruct temporary in/inout params
+ for ( ; nTempIndizes--; )
+ {
+ sal_Int32 nIndex = pTempIndizes[nTempIndizes];
+
+ if (pParams[nIndex].bIn) // is in/inout => was constructed
+ uno_destructData( pUnoArgs[nIndex], ppTempParamTypeDescr[nTempIndizes], 0 );
+ TYPELIB_DANGER_RELEASE( ppTempParamTypeDescr[nTempIndizes] );
+ }
+ if (pReturnTypeDescr)
+ TYPELIB_DANGER_RELEASE( pReturnTypeDescr );
+
+ CPPU_CURRENT_NAMESPACE::raiseException(
+ &aUnoExc, pThis->getBridge()->getUno2Cpp() );
+ // has to destruct the any
+ }
+ else // else no exception occured...
+ {
+ // temporary params
+ for ( ; nTempIndizes--; )
+ {
+ sal_Int32 nIndex = pTempIndizes[nTempIndizes];
+ typelib_TypeDescription * pParamTypeDescr = ppTempParamTypeDescr[nTempIndizes];
+
+ if (pParams[nIndex].bOut) // inout/out
+ {
+ // convert and assign
+ uno_destructData( pCppArgs[nIndex], pParamTypeDescr, cpp_release );
+ uno_copyAndConvertData( pCppArgs[nIndex], pUnoArgs[nIndex], pParamTypeDescr,
+ pThis->getBridge()->getUno2Cpp() );
+ }
+ // destroy temp uno param
+ uno_destructData( pUnoArgs[nIndex], pParamTypeDescr, 0 );
+
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ // return
+ if (pCppReturn) // has complex return
+ {
+ if (pUnoReturn != pCppReturn) // needs reconversion
+ {
+ uno_copyAndConvertData( pCppReturn, pUnoReturn, pReturnTypeDescr,
+ pThis->getBridge()->getUno2Cpp() );
+ // destroy temp uno return
+ uno_destructData( pUnoReturn, pReturnTypeDescr, 0 );
+ }
+ // complex return ptr is set to eax
+ *static_cast< void ** >(pReturnValue) = pCppReturn;
+ }
+ if (pReturnTypeDescr)
+ {
+ TYPELIB_DANGER_RELEASE( pReturnTypeDescr );
+ }
+ }
+}
+
+
+//==================================================================================================
+extern "C" void cpp_vtable_call(
+ int nFunctionIndex, int nVtableOffset, void** pCallStack,
+ void * pReturnValue )
+{
+ OSL_ENSURE( sizeof(sal_Int32)==sizeof(void *), "### unexpected!" );
+
+ // pCallStack: ret adr, [ret *], this, params
+ void * pThis;
+ if( nFunctionIndex & 0x80000000 )
+ {
+ nFunctionIndex &= 0x7fffffff;
+ pThis = pCallStack[2];
+ }
+ else
+ {
+ pThis = pCallStack[1];
+ }
+ pThis = static_cast< char * >(pThis) - nVtableOffset;
+ bridges::cpp_uno::shared::CppInterfaceProxy * pCppI
+ = bridges::cpp_uno::shared::CppInterfaceProxy::castInterfaceToProxy(
+ pThis);
+
+ typelib_InterfaceTypeDescription * pTypeDescr = pCppI->getTypeDescr();
+
+ OSL_ENSURE( nFunctionIndex < pTypeDescr->nMapFunctionIndexToMemberIndex, "### illegal vtable index!" );
+ if (nFunctionIndex >= pTypeDescr->nMapFunctionIndexToMemberIndex)
+ {
+ throw RuntimeException(
+ rtl::OUString::createFromAscii("illegal vtable index!"),
+ (XInterface *)pThis );
+ }
+
+ // determine called method
+ sal_Int32 nMemberPos = pTypeDescr->pMapFunctionIndexToMemberIndex[nFunctionIndex];
+ OSL_ENSURE( nMemberPos < pTypeDescr->nAllMembers, "### illegal member index!" );
+
+ TypeDescription aMemberDescr( pTypeDescr->ppAllMembers[nMemberPos] );
+
+ switch (aMemberDescr.get()->eTypeClass)
+ {
+ case typelib_TypeClass_INTERFACE_ATTRIBUTE:
+ {
+ if (pTypeDescr->pMapMemberIndexToFunctionIndex[nMemberPos] == nFunctionIndex)
+ {
+ // is GET method
+ cpp2uno_call(
+ pCppI, aMemberDescr.get(),
+ ((typelib_InterfaceAttributeTypeDescription *)aMemberDescr.get())->pAttributeTypeRef,
+ 0, 0, // no params
+ pCallStack, pReturnValue );
+ }
+ else
+ {
+ // is SET method
+ typelib_MethodParameter aParam;
+ aParam.pTypeRef =
+ ((typelib_InterfaceAttributeTypeDescription *)aMemberDescr.get())->pAttributeTypeRef;
+ aParam.bIn = sal_True;
+ aParam.bOut = sal_False;
+
+ cpp2uno_call(
+ pCppI, aMemberDescr.get(),
+ 0, // indicates void return
+ 1, &aParam,
+ pCallStack, pReturnValue );
+ }
+ break;
+ }
+ case typelib_TypeClass_INTERFACE_METHOD:
+ {
+ // is METHOD
+ switch (nFunctionIndex)
+ {
+ case 1: // acquire()
+ pCppI->acquireProxy(); // non virtual call!
+ break;
+ case 2: // release()
+ pCppI->releaseProxy(); // non virtual call!
+ break;
+ case 0: // queryInterface() opt
+ {
+ typelib_TypeDescription * pTD = 0;
+ TYPELIB_DANGER_GET( &pTD, reinterpret_cast< Type * >( pCallStack[3] )->getTypeLibType() );
+ if (pTD)
+ {
+ XInterface * pInterface = 0;
+ (*pCppI->getBridge()->getCppEnv()->getRegisteredInterface)(
+ pCppI->getBridge()->getCppEnv(),
+ (void **)&pInterface, pCppI->getOid().pData,
+ (typelib_InterfaceTypeDescription *)pTD );
+
+ if (pInterface)
+ {
+ ::uno_any_construct(
+ reinterpret_cast< uno_Any * >( pCallStack[1] ),
+ &pInterface, pTD, cpp_acquire );
+ pInterface->release();
+ TYPELIB_DANGER_RELEASE( pTD );
+ *static_cast< void ** >(pReturnValue) = pCallStack[1];
+ break;
+ }
+ TYPELIB_DANGER_RELEASE( pTD );
+ }
+ } // else perform queryInterface()
+ default:
+ cpp2uno_call(
+ pCppI, aMemberDescr.get(),
+ ((typelib_InterfaceMethodTypeDescription *)aMemberDescr.get())->pReturnTypeRef,
+ ((typelib_InterfaceMethodTypeDescription *)aMemberDescr.get())->nParams,
+ ((typelib_InterfaceMethodTypeDescription *)aMemberDescr.get())->pParams,
+ pCallStack, pReturnValue );
+ }
+ break;
+ }
+ default:
+ {
+ throw RuntimeException(
+ rtl::OUString::createFromAscii("no member description found!"),
+ (XInterface *)pThis );
+ }
+ }
+}
+
+//==================================================================================================
+extern "C" void privateSnippetExecutorGeneral();
+extern "C" void privateSnippetExecutorVoid();
+extern "C" void privateSnippetExecutorHyper();
+extern "C" void privateSnippetExecutorFloat();
+extern "C" void privateSnippetExecutorDouble();
+extern "C" void privateSnippetExecutorClass();
+extern "C" typedef void (*PrivateSnippetExecutor)();
+
+int const codeSnippetSize = 16;
+
+unsigned char * codeSnippet(
+ unsigned char * code, sal_PtrDiff writetoexecdiff, sal_Int32 functionIndex, sal_Int32 vtableOffset,
+ typelib_TypeClass returnTypeClass)
+{
+ if (!bridges::cpp_uno::shared::isSimpleType(returnTypeClass)) {
+ functionIndex |= 0x80000000;
+ }
+ PrivateSnippetExecutor exec;
+ switch (returnTypeClass) {
+ case typelib_TypeClass_VOID:
+ exec = privateSnippetExecutorVoid;
+ break;
+ case typelib_TypeClass_HYPER:
+ case typelib_TypeClass_UNSIGNED_HYPER:
+ exec = privateSnippetExecutorHyper;
+ break;
+ case typelib_TypeClass_FLOAT:
+ exec = privateSnippetExecutorFloat;
+ break;
+ case typelib_TypeClass_DOUBLE:
+ exec = privateSnippetExecutorDouble;
+ break;
+ case typelib_TypeClass_STRING:
+ case typelib_TypeClass_TYPE:
+ case typelib_TypeClass_ANY:
+ case typelib_TypeClass_SEQUENCE:
+ case typelib_TypeClass_STRUCT:
+ case typelib_TypeClass_INTERFACE:
+ exec = privateSnippetExecutorClass;
+ break;
+ default:
+ exec = privateSnippetExecutorGeneral;
+ break;
+ }
+ unsigned char * p = code;
+ OSL_ASSERT(sizeof (sal_Int32) == 4);
+ // mov function_index, %eax:
+ *p++ = 0xB8;
+ *reinterpret_cast< sal_Int32 * >(p) = functionIndex;
+ p += sizeof (sal_Int32);
+ // mov vtable_offset, %edx:
+ *p++ = 0xBA;
+ *reinterpret_cast< sal_Int32 * >(p) = vtableOffset;
+ p += sizeof (sal_Int32);
+ // jmp privateSnippetExecutor:
+ *p++ = 0xE9;
+ *reinterpret_cast< sal_Int32 * >(p)
+ = ((unsigned char *) exec) - p - sizeof (sal_Int32) - writetoexecdiff;
+ p += sizeof (sal_Int32);
+ OSL_ASSERT(p - code <= codeSnippetSize);
+ return code + codeSnippetSize;
+}
+
+}
+
+struct bridges::cpp_uno::shared::VtableFactory::Slot { void * fn; };
+
+bridges::cpp_uno::shared::VtableFactory::Slot *
+bridges::cpp_uno::shared::VtableFactory::mapBlockToVtable(void * block) {
+ return static_cast< Slot * >(block) + 2;
+}
+
+sal_Size bridges::cpp_uno::shared::VtableFactory::getBlockSize(
+ sal_Int32 slotCount)
+{
+ return (slotCount + 2) * sizeof (Slot) + slotCount * codeSnippetSize;
+}
+
+bridges::cpp_uno::shared::VtableFactory::Slot *
+bridges::cpp_uno::shared::VtableFactory::initializeBlock(
+ void * block, sal_Int32 slotCount)
+{
+ Slot * slots = mapBlockToVtable(block);
+ slots[-2].fn = 0;
+ slots[-1].fn = 0;
+ return slots + slotCount;
+}
+
+unsigned char * bridges::cpp_uno::shared::VtableFactory::addLocalFunctions(
+ Slot ** slots, unsigned char * code, sal_PtrDiff writetoexecdiff,
+ typelib_InterfaceTypeDescription const * type, sal_Int32 functionOffset,
+ sal_Int32 functionCount, sal_Int32 vtableOffset)
+{
+ (*slots) -= functionCount;
+ Slot * s = *slots;
+ for (sal_Int32 i = 0; i < type->nMembers; ++i) {
+ typelib_TypeDescription * member = 0;
+ TYPELIB_DANGER_GET(&member, type->ppMembers[i]);
+ OSL_ASSERT(member != 0);
+ switch (member->eTypeClass) {
+ case typelib_TypeClass_INTERFACE_ATTRIBUTE:
+ // Getter:
+ (s++)->fn = code + writetoexecdiff;
+ code = codeSnippet(
+ code, writetoexecdiff, functionOffset++, vtableOffset,
+ reinterpret_cast< typelib_InterfaceAttributeTypeDescription * >(
+ member)->pAttributeTypeRef->eTypeClass);
+ // Setter:
+ if (!reinterpret_cast<
+ typelib_InterfaceAttributeTypeDescription * >(
+ member)->bReadOnly)
+ {
+ (s++)->fn = code + writetoexecdiff;
+ code = codeSnippet(
+ code, writetoexecdiff, functionOffset++, vtableOffset,
+ typelib_TypeClass_VOID);
+ }
+ break;
+
+ case typelib_TypeClass_INTERFACE_METHOD:
+ (s++)->fn = code + writetoexecdiff;
+ code = codeSnippet(
+ code, writetoexecdiff, functionOffset++, vtableOffset,
+ reinterpret_cast< typelib_InterfaceMethodTypeDescription * >(
+ member)->pReturnTypeRef->eTypeClass);
+ break;
+
+ default:
+ OSL_ASSERT(false);
+ break;
+ }
+ TYPELIB_DANGER_RELEASE(member);
+ }
+ return code;
+}
+
+void bridges::cpp_uno::shared::VtableFactory::flushCode(
+ unsigned char const *, unsigned char const *)
+{}
diff --git a/bridges/source/cpp_uno/gcc3_linux_intel/except.cxx b/bridges/source/cpp_uno/gcc3_linux_intel/except.cxx
new file mode 100644
index 000000000000..95cb9dd68971
--- /dev/null
+++ b/bridges/source/cpp_uno/gcc3_linux_intel/except.cxx
@@ -0,0 +1,330 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_bridges.hxx"
+
+#include <stdio.h>
+#include <string.h>
+#include <dlfcn.h>
+#include <cxxabi.h>
+#include <hash_map>
+
+#include <rtl/strbuf.hxx>
+#include <rtl/ustrbuf.hxx>
+#include <osl/diagnose.h>
+#include <osl/mutex.hxx>
+
+#include <com/sun/star/uno/genfunc.hxx>
+#include "com/sun/star/uno/RuntimeException.hpp"
+#include <typelib/typedescription.hxx>
+#include <uno/any2.h>
+
+#include "share.hxx"
+
+
+using namespace ::std;
+using namespace ::osl;
+using namespace ::rtl;
+using namespace ::com::sun::star::uno;
+using namespace ::__cxxabiv1;
+
+
+namespace CPPU_CURRENT_NAMESPACE
+{
+
+void dummy_can_throw_anything( char const * )
+{
+}
+
+//==================================================================================================
+static OUString toUNOname( char const * p ) SAL_THROW( () )
+{
+#if OSL_DEBUG_LEVEL > 1
+ char const * start = p;
+#endif
+
+ // example: N3com3sun4star4lang24IllegalArgumentExceptionE
+
+ OUStringBuffer buf( 64 );
+ OSL_ASSERT( 'N' == *p );
+ ++p; // skip N
+
+ while ('E' != *p)
+ {
+ // read chars count
+ long n = (*p++ - '0');
+ while ('0' <= *p && '9' >= *p)
+ {
+ n *= 10;
+ n += (*p++ - '0');
+ }
+ buf.appendAscii( p, n );
+ p += n;
+ if ('E' != *p)
+ buf.append( (sal_Unicode)'.' );
+ }
+
+#if OSL_DEBUG_LEVEL > 1
+ OUString ret( buf.makeStringAndClear() );
+ OString c_ret( OUStringToOString( ret, RTL_TEXTENCODING_ASCII_US ) );
+ fprintf( stderr, "> toUNOname(): %s => %s\n", start, c_ret.getStr() );
+ return ret;
+#else
+ return buf.makeStringAndClear();
+#endif
+}
+
+//==================================================================================================
+class RTTI
+{
+ typedef hash_map< OUString, type_info *, OUStringHash > t_rtti_map;
+
+ Mutex m_mutex;
+ t_rtti_map m_rttis;
+ t_rtti_map m_generatedRttis;
+
+ void * m_hApp;
+
+public:
+ RTTI() SAL_THROW( () );
+ ~RTTI() SAL_THROW( () );
+
+ type_info * getRTTI( typelib_CompoundTypeDescription * ) SAL_THROW( () );
+};
+//__________________________________________________________________________________________________
+RTTI::RTTI() SAL_THROW( () )
+ : m_hApp( dlopen( 0, RTLD_LAZY ) )
+{
+}
+//__________________________________________________________________________________________________
+RTTI::~RTTI() SAL_THROW( () )
+{
+ dlclose( m_hApp );
+}
+
+//__________________________________________________________________________________________________
+type_info * RTTI::getRTTI( typelib_CompoundTypeDescription *pTypeDescr ) SAL_THROW( () )
+{
+ type_info * rtti;
+
+ OUString const & unoName = *(OUString const *)&pTypeDescr->aBase.pTypeName;
+
+ MutexGuard guard( m_mutex );
+ t_rtti_map::const_iterator iRttiFind( m_rttis.find( unoName ) );
+ if (iRttiFind == m_rttis.end())
+ {
+ // RTTI symbol
+ OStringBuffer buf( 64 );
+ buf.append( RTL_CONSTASCII_STRINGPARAM("_ZTIN") );
+ sal_Int32 index = 0;
+ do
+ {
+ OUString token( unoName.getToken( 0, '.', index ) );
+ buf.append( token.getLength() );
+ OString c_token( OUStringToOString( token, RTL_TEXTENCODING_ASCII_US ) );
+ buf.append( c_token );
+ }
+ while (index >= 0);
+ buf.append( 'E' );
+
+ OString symName( buf.makeStringAndClear() );
+ rtti = (type_info *)dlsym( m_hApp, symName.getStr() );
+
+ if (rtti)
+ {
+ pair< t_rtti_map::iterator, bool > insertion(
+ m_rttis.insert( t_rtti_map::value_type( unoName, rtti ) ) );
+ OSL_ENSURE( insertion.second, "### inserting new rtti failed?!" );
+ }
+ else
+ {
+ // try to lookup the symbol in the generated rtti map
+ t_rtti_map::const_iterator iFind( m_generatedRttis.find( unoName ) );
+ if (iFind == m_generatedRttis.end())
+ {
+ // we must generate it !
+ // symbol and rtti-name is nearly identical,
+ // the symbol is prefixed with _ZTI
+ char const * rttiName = symName.getStr() +4;
+#if OSL_DEBUG_LEVEL > 1
+ fprintf( stderr,"generated rtti for %s\n", rttiName );
+#endif
+ if (pTypeDescr->pBaseTypeDescription)
+ {
+ // ensure availability of base
+ type_info * base_rtti = getRTTI(
+ (typelib_CompoundTypeDescription *)pTypeDescr->pBaseTypeDescription );
+ rtti = new __si_class_type_info(
+ strdup( rttiName ), (__class_type_info *)base_rtti );
+ }
+ else
+ {
+ // this class has no base class
+ rtti = new __class_type_info( strdup( rttiName ) );
+ }
+
+ pair< t_rtti_map::iterator, bool > insertion(
+ m_generatedRttis.insert( t_rtti_map::value_type( unoName, rtti ) ) );
+ OSL_ENSURE( insertion.second, "### inserting new generated rtti failed?!" );
+ }
+ else // taking already generated rtti
+ {
+ rtti = iFind->second;
+ }
+ }
+ }
+ else
+ {
+ rtti = iRttiFind->second;
+ }
+
+ return rtti;
+}
+
+//--------------------------------------------------------------------------------------------------
+static void deleteException( void * pExc )
+{
+ __cxa_exception const * header = ((__cxa_exception const *)pExc - 1);
+ typelib_TypeDescription * pTD = 0;
+ OUString unoName( toUNOname( header->exceptionType->name() ) );
+ ::typelib_typedescription_getByName( &pTD, unoName.pData );
+ OSL_ENSURE( pTD, "### unknown exception type! leaving out destruction => leaking!!!" );
+ if (pTD)
+ {
+ ::uno_destructData( pExc, pTD, cpp_release );
+ ::typelib_typedescription_release( pTD );
+ }
+}
+
+//==================================================================================================
+void raiseException( uno_Any * pUnoExc, uno_Mapping * pUno2Cpp )
+{
+#if OSL_DEBUG_LEVEL > 1
+ OString cstr(
+ OUStringToOString(
+ *reinterpret_cast< OUString const * >( &pUnoExc->pType->pTypeName ),
+ RTL_TEXTENCODING_ASCII_US ) );
+ fprintf( stderr, "> uno exception occured: %s\n", cstr.getStr() );
+#endif
+ void * pCppExc;
+ type_info * rtti;
+
+ {
+ // construct cpp exception object
+ typelib_TypeDescription * pTypeDescr = 0;
+ TYPELIB_DANGER_GET( &pTypeDescr, pUnoExc->pType );
+ OSL_ASSERT( pTypeDescr );
+ if (! pTypeDescr)
+ {
+ throw RuntimeException(
+ OUString( RTL_CONSTASCII_USTRINGPARAM("cannot get typedescription for type ") ) +
+ *reinterpret_cast< OUString const * >( &pUnoExc->pType->pTypeName ),
+ Reference< XInterface >() );
+ }
+
+ pCppExc = __cxa_allocate_exception( pTypeDescr->nSize );
+ ::uno_copyAndConvertData( pCppExc, pUnoExc->pData, pTypeDescr, pUno2Cpp );
+
+ // destruct uno exception
+ ::uno_any_destruct( pUnoExc, 0 );
+ // avoiding locked counts
+ static RTTI * s_rtti = 0;
+ if (! s_rtti)
+ {
+ MutexGuard guard( Mutex::getGlobalMutex() );
+ if (! s_rtti)
+ {
+#ifdef LEAK_STATIC_DATA
+ s_rtti = new RTTI();
+#else
+ static RTTI rtti_data;
+ s_rtti = &rtti_data;
+#endif
+ }
+ }
+ rtti = (type_info *)s_rtti->getRTTI( (typelib_CompoundTypeDescription *) pTypeDescr );
+ TYPELIB_DANGER_RELEASE( pTypeDescr );
+ OSL_ENSURE( rtti, "### no rtti for throwing exception!" );
+ if (! rtti)
+ {
+ throw RuntimeException(
+ OUString( RTL_CONSTASCII_USTRINGPARAM("no rtti for type ") ) +
+ *reinterpret_cast< OUString const * >( &pUnoExc->pType->pTypeName ),
+ Reference< XInterface >() );
+ }
+ }
+
+ __cxa_throw( pCppExc, rtti, deleteException );
+}
+
+//==================================================================================================
+void fillUnoException( __cxa_exception * header, uno_Any * pUnoExc, uno_Mapping * pCpp2Uno )
+{
+ if (! header)
+ {
+ RuntimeException aRE(
+ OUString( RTL_CONSTASCII_USTRINGPARAM("no exception header!") ),
+ Reference< XInterface >() );
+ Type const & rType = ::getCppuType( &aRE );
+ uno_type_any_constructAndConvert( pUnoExc, &aRE, rType.getTypeLibType(), pCpp2Uno );
+#if OSL_DEBUG_LEVEL > 0
+ OString cstr( OUStringToOString( aRE.Message, RTL_TEXTENCODING_ASCII_US ) );
+ OSL_ENSURE( 0, cstr.getStr() );
+#endif
+ return;
+ }
+
+ typelib_TypeDescription * pExcTypeDescr = 0;
+ OUString unoName( toUNOname( header->exceptionType->name() ) );
+#if OSL_DEBUG_LEVEL > 1
+ OString cstr_unoName( OUStringToOString( unoName, RTL_TEXTENCODING_ASCII_US ) );
+ fprintf( stderr, "> c++ exception occured: %s\n", cstr_unoName.getStr() );
+#endif
+ typelib_typedescription_getByName( &pExcTypeDescr, unoName.pData );
+ if (0 == pExcTypeDescr)
+ {
+ RuntimeException aRE(
+ OUString( RTL_CONSTASCII_USTRINGPARAM("exception type not found: ") ) + unoName,
+ Reference< XInterface >() );
+ Type const & rType = ::getCppuType( &aRE );
+ uno_type_any_constructAndConvert( pUnoExc, &aRE, rType.getTypeLibType(), pCpp2Uno );
+#if OSL_DEBUG_LEVEL > 0
+ OString cstr( OUStringToOString( aRE.Message, RTL_TEXTENCODING_ASCII_US ) );
+ OSL_ENSURE( 0, cstr.getStr() );
+#endif
+ }
+ else
+ {
+ // construct uno exception any
+ uno_any_constructAndConvert( pUnoExc, header->adjustedPtr, pExcTypeDescr, pCpp2Uno );
+ typelib_typedescription_release( pExcTypeDescr );
+ }
+}
+
+}
+
diff --git a/bridges/source/cpp_uno/gcc3_linux_intel/makefile.mk b/bridges/source/cpp_uno/gcc3_linux_intel/makefile.mk
new file mode 100644
index 000000000000..d5eb2dd6e1d9
--- /dev/null
+++ b/bridges/source/cpp_uno/gcc3_linux_intel/makefile.mk
@@ -0,0 +1,81 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..$/..$/..
+
+PRJNAME=bridges
+TARGET=gcc3_uno
+LIBTARGET=no
+ENABLE_EXCEPTIONS=TRUE
+
+# --- Settings -----------------------------------------------------
+
+.INCLUDE : settings.mk
+
+# --- Files --------------------------------------------------------
+
+.IF "$(COM)$(OS)$(CPU)$(COMNAME)" == "GCCLINUXIgcc3"
+
+.IF "$(cppu_no_leak)" == ""
+CFLAGS += -DLEAK_STATIC_DATA
+.ENDIF
+
+# In case someone enabled the non-standard -fomit-frame-pointer which does not
+# work with the .cxx sources in this directory:
+CFLAGSCXX += -fno-omit-frame-pointer
+
+CFLAGSNOOPT=-O0
+
+SLOFILES= \
+ $(SLO)$/except.obj \
+ $(SLO)$/cpp2uno.obj \
+ $(SLO)$/uno2cpp.obj \
+ $(SLO)$/call.obj
+
+SHL1TARGET= $(TARGET)
+
+SHL1DEF=$(MISC)$/$(SHL1TARGET).def
+SHL1IMPLIB=i$(TARGET)
+SHL1VERSIONMAP=..$/..$/bridge_exports.map
+SHL1RPATH=URELIB
+
+SHL1OBJS = $(SLOFILES)
+SHL1LIBS = $(SLB)$/cpp_uno_shared.lib
+
+SHL1STDLIBS= \
+ $(CPPULIB) \
+ $(SALLIB)
+
+.ENDIF
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : target.mk
+
+$(SLO)$/%.obj: %.s
+ $(CC) -c -o $(SLO)$/$(@:b).o $<
+ touch $@
diff --git a/bridges/source/cpp_uno/gcc3_linux_intel/share.hxx b/bridges/source/cpp_uno/gcc3_linux_intel/share.hxx
new file mode 100644
index 000000000000..930094738b20
--- /dev/null
+++ b/bridges/source/cpp_uno/gcc3_linux_intel/share.hxx
@@ -0,0 +1,90 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "uno/mapping.h"
+
+#include <typeinfo>
+#include <exception>
+#include <cstddef>
+
+namespace CPPU_CURRENT_NAMESPACE
+{
+
+void dummy_can_throw_anything( char const * );
+
+// ----- following decl from libstdc++-v3/libsupc++/unwind-cxx.h and unwind.h
+
+struct _Unwind_Exception
+{
+ unsigned exception_class __attribute__((__mode__(__DI__)));
+ void * exception_cleanup;
+ unsigned private_1 __attribute__((__mode__(__word__)));
+ unsigned private_2 __attribute__((__mode__(__word__)));
+} __attribute__((__aligned__));
+
+struct __cxa_exception
+{
+ ::std::type_info *exceptionType;
+ void (*exceptionDestructor)(void *);
+
+ ::std::unexpected_handler unexpectedHandler;
+ ::std::terminate_handler terminateHandler;
+
+ __cxa_exception *nextException;
+
+ int handlerCount;
+
+ int handlerSwitchValue;
+ const unsigned char *actionRecord;
+ const unsigned char *languageSpecificData;
+ void *catchTemp;
+ void *adjustedPtr;
+
+ _Unwind_Exception unwindHeader;
+};
+
+extern "C" void *__cxa_allocate_exception(
+ std::size_t thrown_size ) throw();
+extern "C" void __cxa_throw (
+ void *thrown_exception, std::type_info *tinfo, void (*dest) (void *) ) __attribute__((noreturn));
+
+struct __cxa_eh_globals
+{
+ __cxa_exception *caughtExceptions;
+ unsigned int uncaughtExceptions;
+};
+extern "C" __cxa_eh_globals *__cxa_get_globals () throw();
+
+// -----
+
+//==================================================================================================
+void raiseException(
+ uno_Any * pUnoExc, uno_Mapping * pUno2Cpp );
+//==================================================================================================
+void fillUnoException(
+ __cxa_exception * header, uno_Any *, uno_Mapping * pCpp2Uno );
+}
diff --git a/bridges/source/cpp_uno/gcc3_linux_intel/uno2cpp.cxx b/bridges/source/cpp_uno/gcc3_linux_intel/uno2cpp.cxx
new file mode 100644
index 000000000000..4d1d3f2f8ca4
--- /dev/null
+++ b/bridges/source/cpp_uno/gcc3_linux_intel/uno2cpp.cxx
@@ -0,0 +1,451 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_bridges.hxx"
+
+#include <malloc.h>
+
+#include <com/sun/star/uno/genfunc.hxx>
+#include "com/sun/star/uno/RuntimeException.hpp"
+#include <uno/data.h>
+
+#include "bridges/cpp_uno/shared/bridge.hxx"
+#include "bridges/cpp_uno/shared/types.hxx"
+#include "bridges/cpp_uno/shared/unointerfaceproxy.hxx"
+#include "bridges/cpp_uno/shared/vtables.hxx"
+
+#include "share.hxx"
+
+using namespace ::rtl;
+using namespace ::com::sun::star::uno;
+
+namespace
+{
+
+//==================================================================================================
+// The call instruction within the asm section of callVirtualMethod may throw
+// exceptions. So that the compiler handles this correctly, it is important
+// that (a) callVirtualMethod might call dummy_can_throw_anything (although this
+// never happens at runtime), which in turn can throw exceptions, and (b)
+// callVirtualMethod is not inlined at its call site (so that any exceptions are
+// caught which are thrown from the instruction calling callVirtualMethod):
+void callVirtualMethod(
+ void * pAdjustedThisPtr,
+ sal_Int32 nVtableIndex,
+ void * pRegisterReturn,
+ typelib_TypeClass eReturnType,
+ sal_Int32 * pStackLongs,
+ sal_Int32 nStackLongs ) __attribute__((noinline));
+
+void callVirtualMethod(
+ void * pAdjustedThisPtr,
+ sal_Int32 nVtableIndex,
+ void * pRegisterReturn,
+ typelib_TypeClass eReturnType,
+ sal_Int32 * pStackLongs,
+ sal_Int32 nStackLongs )
+{
+ // parameter list is mixed list of * and values
+ // reference parameters are pointers
+
+ OSL_ENSURE( pStackLongs && pAdjustedThisPtr, "### null ptr!" );
+ OSL_ENSURE( (sizeof(void *) == 4) && (sizeof(sal_Int32) == 4), "### unexpected size of int!" );
+ OSL_ENSURE( nStackLongs && pStackLongs, "### no stack in callVirtualMethod !" );
+
+ // never called
+ if (! pAdjustedThisPtr) CPPU_CURRENT_NAMESPACE::dummy_can_throw_anything("xxx"); // address something
+
+ volatile long edx = 0, eax = 0; // for register returns
+ void * stackptr;
+ asm volatile (
+ "mov %%esp, %6\n\t"
+ // preserve potential 128bit stack alignment
+ "and $0xfffffff0, %%esp\n\t"
+ "mov %0, %%eax\n\t"
+ "lea -4(,%%eax,4), %%eax\n\t"
+ "and $0xf, %%eax\n\t"
+ "sub $0xc, %%eax\n\t"
+ "add %%eax, %%esp\n\t"
+ // copy values
+ "mov %0, %%eax\n\t"
+ "mov %%eax, %%edx\n\t"
+ "dec %%edx\n\t"
+ "shl $2, %%edx\n\t"
+ "add %1, %%edx\n"
+ "Lcopy:\n\t"
+ "pushl 0(%%edx)\n\t"
+ "sub $4, %%edx\n\t"
+ "dec %%eax\n\t"
+ "jne Lcopy\n\t"
+ // do the actual call
+ "mov %2, %%edx\n\t"
+ "mov 0(%%edx), %%edx\n\t"
+ "mov %3, %%eax\n\t"
+ "shl $2, %%eax\n\t"
+ "add %%eax, %%edx\n\t"
+ "mov 0(%%edx), %%edx\n\t"
+ "call *%%edx\n\t"
+ // save return registers
+ "mov %%eax, %4\n\t"
+ "mov %%edx, %5\n\t"
+ // cleanup stack
+ "mov %6, %%esp\n\t"
+ :
+ : "m"(nStackLongs), "m"(pStackLongs), "m"(pAdjustedThisPtr),
+ "m"(nVtableIndex), "m"(eax), "m"(edx), "m"(stackptr)
+ : "eax", "edx" );
+ switch( eReturnType )
+ {
+ case typelib_TypeClass_HYPER:
+ case typelib_TypeClass_UNSIGNED_HYPER:
+ ((long*)pRegisterReturn)[1] = edx;
+ case typelib_TypeClass_LONG:
+ case typelib_TypeClass_UNSIGNED_LONG:
+ case typelib_TypeClass_CHAR:
+ case typelib_TypeClass_ENUM:
+ ((long*)pRegisterReturn)[0] = eax;
+ break;
+ case typelib_TypeClass_SHORT:
+ case typelib_TypeClass_UNSIGNED_SHORT:
+ *(unsigned short*)pRegisterReturn = eax;
+ break;
+ case typelib_TypeClass_BOOLEAN:
+ case typelib_TypeClass_BYTE:
+ *(unsigned char*)pRegisterReturn = eax;
+ break;
+ case typelib_TypeClass_FLOAT:
+ asm ( "fstps %0" : : "m"(*(char *)pRegisterReturn) );
+ break;
+ case typelib_TypeClass_DOUBLE:
+ asm ( "fstpl %0\n\t" : : "m"(*(char *)pRegisterReturn) );
+ break;
+ default:
+ break;
+ }
+}
+
+//==================================================================================================
+static void cpp_call(
+ bridges::cpp_uno::shared::UnoInterfaceProxy * pThis,
+ bridges::cpp_uno::shared::VtableSlot aVtableSlot,
+ typelib_TypeDescriptionReference * pReturnTypeRef,
+ sal_Int32 nParams, typelib_MethodParameter * pParams,
+ void * pUnoReturn, void * pUnoArgs[], uno_Any ** ppUnoExc )
+{
+ // max space for: [complex ret ptr], values|ptr ...
+ char * pCppStack =
+ (char *)alloca( sizeof(sal_Int32) + ((nParams+2) * sizeof(sal_Int64)) );
+ char * pCppStackStart = pCppStack;
+
+ // return
+ typelib_TypeDescription * pReturnTypeDescr = 0;
+ TYPELIB_DANGER_GET( &pReturnTypeDescr, pReturnTypeRef );
+ OSL_ENSURE( pReturnTypeDescr, "### expected return type description!" );
+
+ void * pCppReturn = 0; // if != 0 && != pUnoReturn, needs reconversion
+
+ if (pReturnTypeDescr)
+ {
+ if (bridges::cpp_uno::shared::isSimpleType( pReturnTypeDescr ))
+ {
+ pCppReturn = pUnoReturn; // direct way for simple types
+ }
+ else
+ {
+ // complex return via ptr
+ pCppReturn = *(void **)pCppStack
+ = (bridges::cpp_uno::shared::relatesToInterfaceType(
+ pReturnTypeDescr )
+ ? alloca( pReturnTypeDescr->nSize )
+ : pUnoReturn); // direct way
+ pCppStack += sizeof(void *);
+ }
+ }
+ // push this
+ void * pAdjustedThisPtr = reinterpret_cast< void ** >(pThis->getCppI())
+ + aVtableSlot.offset;
+ *(void**)pCppStack = pAdjustedThisPtr;
+ pCppStack += sizeof( void* );
+
+ // stack space
+ OSL_ENSURE( sizeof(void *) == sizeof(sal_Int32), "### unexpected size!" );
+ // args
+ void ** pCppArgs = (void **)alloca( 3 * sizeof(void *) * nParams );
+ // indizes of values this have to be converted (interface conversion cpp<=>uno)
+ sal_Int32 * pTempIndizes = (sal_Int32 *)(pCppArgs + nParams);
+ // type descriptions for reconversions
+ typelib_TypeDescription ** ppTempParamTypeDescr = (typelib_TypeDescription **)(pCppArgs + (2 * nParams));
+
+ sal_Int32 nTempIndizes = 0;
+
+ for ( sal_Int32 nPos = 0; nPos < nParams; ++nPos )
+ {
+ const typelib_MethodParameter & rParam = pParams[nPos];
+ typelib_TypeDescription * pParamTypeDescr = 0;
+ TYPELIB_DANGER_GET( &pParamTypeDescr, rParam.pTypeRef );
+
+ if (!rParam.bOut
+ && bridges::cpp_uno::shared::isSimpleType( pParamTypeDescr ))
+ {
+ uno_copyAndConvertData( pCppArgs[nPos] = pCppStack, pUnoArgs[nPos], pParamTypeDescr,
+ pThis->getBridge()->getUno2Cpp() );
+
+ switch (pParamTypeDescr->eTypeClass)
+ {
+ case typelib_TypeClass_HYPER:
+ case typelib_TypeClass_UNSIGNED_HYPER:
+ case typelib_TypeClass_DOUBLE:
+ pCppStack += sizeof(sal_Int32); // extra long
+ break;
+ default:
+ break;
+ }
+ // no longer needed
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ else // ptr to complex value | ref
+ {
+ if (! rParam.bIn) // is pure out
+ {
+ // cpp out is constructed mem, uno out is not!
+ uno_constructData(
+ *(void **)pCppStack = pCppArgs[nPos] = alloca( pParamTypeDescr->nSize ),
+ pParamTypeDescr );
+ pTempIndizes[nTempIndizes] = nPos; // default constructed for cpp call
+ // will be released at reconversion
+ ppTempParamTypeDescr[nTempIndizes++] = pParamTypeDescr;
+ }
+ // is in/inout
+ else if (bridges::cpp_uno::shared::relatesToInterfaceType(
+ pParamTypeDescr ))
+ {
+ uno_copyAndConvertData(
+ *(void **)pCppStack = pCppArgs[nPos] = alloca( pParamTypeDescr->nSize ),
+ pUnoArgs[nPos], pParamTypeDescr,
+ pThis->getBridge()->getUno2Cpp() );
+
+ pTempIndizes[nTempIndizes] = nPos; // has to be reconverted
+ // will be released at reconversion
+ ppTempParamTypeDescr[nTempIndizes++] = pParamTypeDescr;
+ }
+ else // direct way
+ {
+ *(void **)pCppStack = pCppArgs[nPos] = pUnoArgs[nPos];
+ // no longer needed
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ }
+ pCppStack += sizeof(sal_Int32); // standard parameter length
+ }
+
+ try
+ {
+ OSL_ENSURE( !( (pCppStack - pCppStackStart ) & 3), "UNALIGNED STACK !!! (Please DO panic)" );
+ callVirtualMethod(
+ pAdjustedThisPtr, aVtableSlot.index,
+ pCppReturn, pReturnTypeDescr->eTypeClass,
+ (sal_Int32 *)pCppStackStart, (pCppStack - pCppStackStart) / sizeof(sal_Int32) );
+ // NO exception occured...
+ *ppUnoExc = 0;
+
+ // reconvert temporary params
+ for ( ; nTempIndizes--; )
+ {
+ sal_Int32 nIndex = pTempIndizes[nTempIndizes];
+ typelib_TypeDescription * pParamTypeDescr = ppTempParamTypeDescr[nTempIndizes];
+
+ if (pParams[nIndex].bIn)
+ {
+ if (pParams[nIndex].bOut) // inout
+ {
+ uno_destructData( pUnoArgs[nIndex], pParamTypeDescr, 0 ); // destroy uno value
+ uno_copyAndConvertData( pUnoArgs[nIndex], pCppArgs[nIndex], pParamTypeDescr,
+ pThis->getBridge()->getCpp2Uno() );
+ }
+ }
+ else // pure out
+ {
+ uno_copyAndConvertData( pUnoArgs[nIndex], pCppArgs[nIndex], pParamTypeDescr,
+ pThis->getBridge()->getCpp2Uno() );
+ }
+ // destroy temp cpp param => cpp: every param was constructed
+ uno_destructData( pCppArgs[nIndex], pParamTypeDescr, cpp_release );
+
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ // return value
+ if (pCppReturn && pUnoReturn != pCppReturn)
+ {
+ uno_copyAndConvertData( pUnoReturn, pCppReturn, pReturnTypeDescr,
+ pThis->getBridge()->getCpp2Uno() );
+ uno_destructData( pCppReturn, pReturnTypeDescr, cpp_release );
+ }
+ }
+ catch (...)
+ {
+ // fill uno exception
+ fillUnoException( CPPU_CURRENT_NAMESPACE::__cxa_get_globals()->caughtExceptions, *ppUnoExc, pThis->getBridge()->getCpp2Uno() );
+
+ // temporary params
+ for ( ; nTempIndizes--; )
+ {
+ sal_Int32 nIndex = pTempIndizes[nTempIndizes];
+ // destroy temp cpp param => cpp: every param was constructed
+ uno_destructData( pCppArgs[nIndex], ppTempParamTypeDescr[nTempIndizes], cpp_release );
+ TYPELIB_DANGER_RELEASE( ppTempParamTypeDescr[nTempIndizes] );
+ }
+ // return type
+ if (pReturnTypeDescr)
+ TYPELIB_DANGER_RELEASE( pReturnTypeDescr );
+ }
+}
+
+}
+
+namespace bridges { namespace cpp_uno { namespace shared {
+
+void unoInterfaceProxyDispatch(
+ uno_Interface * pUnoI, const typelib_TypeDescription * pMemberDescr,
+ void * pReturn, void * pArgs[], uno_Any ** ppException )
+{
+ // is my surrogate
+ bridges::cpp_uno::shared::UnoInterfaceProxy * pThis
+ = static_cast< bridges::cpp_uno::shared::UnoInterfaceProxy * >(pUnoI);
+
+ switch (pMemberDescr->eTypeClass)
+ {
+ case typelib_TypeClass_INTERFACE_ATTRIBUTE:
+ {
+ VtableSlot aVtableSlot(
+ getVtableSlot(
+ reinterpret_cast<
+ typelib_InterfaceAttributeTypeDescription const * >(
+ pMemberDescr)));
+ if (pReturn)
+ {
+ // dependent dispatch
+ cpp_call(
+ pThis, aVtableSlot,
+ ((typelib_InterfaceAttributeTypeDescription *)pMemberDescr)->pAttributeTypeRef,
+ 0, 0, // no params
+ pReturn, pArgs, ppException );
+ }
+ else
+ {
+ // is SET
+ typelib_MethodParameter aParam;
+ aParam.pTypeRef =
+ ((typelib_InterfaceAttributeTypeDescription *)pMemberDescr)->pAttributeTypeRef;
+ aParam.bIn = sal_True;
+ aParam.bOut = sal_False;
+
+ typelib_TypeDescriptionReference * pReturnTypeRef = 0;
+ OUString aVoidName( RTL_CONSTASCII_USTRINGPARAM("void") );
+ typelib_typedescriptionreference_new(
+ &pReturnTypeRef, typelib_TypeClass_VOID, aVoidName.pData );
+
+ // dependent dispatch
+ aVtableSlot.index += 1; // get, then set method
+ cpp_call(
+ pThis, aVtableSlot,
+ pReturnTypeRef,
+ 1, &aParam,
+ pReturn, pArgs, ppException );
+
+ typelib_typedescriptionreference_release( pReturnTypeRef );
+ }
+
+ break;
+ }
+ case typelib_TypeClass_INTERFACE_METHOD:
+ {
+ VtableSlot aVtableSlot(
+ getVtableSlot(
+ reinterpret_cast<
+ typelib_InterfaceMethodTypeDescription const * >(
+ pMemberDescr)));
+ switch (aVtableSlot.index)
+ {
+ // standard calls
+ case 1: // acquire uno interface
+ (*pUnoI->acquire)( pUnoI );
+ *ppException = 0;
+ break;
+ case 2: // release uno interface
+ (*pUnoI->release)( pUnoI );
+ *ppException = 0;
+ break;
+ case 0: // queryInterface() opt
+ {
+ typelib_TypeDescription * pTD = 0;
+ TYPELIB_DANGER_GET( &pTD, reinterpret_cast< Type * >( pArgs[0] )->getTypeLibType() );
+ if (pTD)
+ {
+ uno_Interface * pInterface = 0;
+ (*pThis->pBridge->getUnoEnv()->getRegisteredInterface)(
+ pThis->pBridge->getUnoEnv(),
+ (void **)&pInterface, pThis->oid.pData, (typelib_InterfaceTypeDescription *)pTD );
+
+ if (pInterface)
+ {
+ ::uno_any_construct(
+ reinterpret_cast< uno_Any * >( pReturn ),
+ &pInterface, pTD, 0 );
+ (*pInterface->release)( pInterface );
+ TYPELIB_DANGER_RELEASE( pTD );
+ *ppException = 0;
+ break;
+ }
+ TYPELIB_DANGER_RELEASE( pTD );
+ }
+ } // else perform queryInterface()
+ default:
+ // dependent dispatch
+ cpp_call(
+ pThis, aVtableSlot,
+ ((typelib_InterfaceMethodTypeDescription *)pMemberDescr)->pReturnTypeRef,
+ ((typelib_InterfaceMethodTypeDescription *)pMemberDescr)->nParams,
+ ((typelib_InterfaceMethodTypeDescription *)pMemberDescr)->pParams,
+ pReturn, pArgs, ppException );
+ }
+ break;
+ }
+ default:
+ {
+ ::com::sun::star::uno::RuntimeException aExc(
+ OUString( RTL_CONSTASCII_USTRINGPARAM("illegal member type description!") ),
+ ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >() );
+
+ Type const & rExcType = ::getCppuType( &aExc );
+ // binary identical null reference
+ ::uno_type_any_construct( *ppException, &aExc, rExcType.getTypeLibType(), 0 );
+ }
+ }
+}
+
+} } }
diff --git a/bridges/source/cpp_uno/gcc3_linux_m68k/cpp2uno.cxx b/bridges/source/cpp_uno/gcc3_linux_m68k/cpp2uno.cxx
new file mode 100644
index 000000000000..2121001d2820
--- /dev/null
+++ b/bridges/source/cpp_uno/gcc3_linux_m68k/cpp2uno.cxx
@@ -0,0 +1,536 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <malloc.h>
+#include <hash_map>
+
+#include <rtl/alloc.h>
+#include <osl/mutex.hxx>
+
+#include <com/sun/star/uno/genfunc.hxx>
+#include "com/sun/star/uno/RuntimeException.hpp"
+#include <uno/data.h>
+#include <typelib/typedescription.hxx>
+
+#include "bridges/cpp_uno/shared/bridge.hxx"
+#include "bridges/cpp_uno/shared/cppinterfaceproxy.hxx"
+#include "bridges/cpp_uno/shared/types.hxx"
+#include "bridges/cpp_uno/shared/vtablefactory.hxx"
+
+#include "share.hxx"
+
+#include <dlfcn.h>
+
+
+using namespace ::osl;
+using namespace ::rtl;
+using namespace ::com::sun::star::uno;
+
+namespace
+{
+
+ static typelib_TypeClass cpp2uno_call(
+ bridges::cpp_uno::shared::CppInterfaceProxy* pThis,
+ const typelib_TypeDescription * pMemberTypeDescr,
+ typelib_TypeDescriptionReference * pReturnTypeRef,
+ sal_Int32 nParams, typelib_MethodParameter * pParams,
+ long r8, void ** pCallStack,
+ sal_Int64 * pRegisterReturn /* space for register return */ )
+ {
+ // pCallStack: ret, [return ptr], this, params
+ char * pTopStack = (char *)(pCallStack + 0);
+ char * pCppStack = pTopStack;
+#ifdef CMC_DEBUG
+ fprintf(stderr, "cpp2uno_call\n");
+#endif
+ // return
+ typelib_TypeDescription * pReturnTypeDescr = 0;
+ if (pReturnTypeRef)
+ TYPELIB_DANGER_GET( &pReturnTypeDescr, pReturnTypeRef );
+
+ void * pUnoReturn = 0;
+ // complex return ptr: if != 0 && != pUnoReturn, reconversion need
+ void * pCppReturn = 0;
+
+ if (pReturnTypeDescr)
+ {
+ if (bridges::cpp_uno::shared::isSimpleType( pReturnTypeDescr ))
+ {
+#ifdef CMC_DEBUG
+ fprintf(stderr, "simple return\n");
+#endif
+ pUnoReturn = pRegisterReturn; // direct way for simple types
+ }
+ else // complex return via ptr (pCppReturn)
+ {
+#ifdef CMC_DEBUG
+ fprintf(stderr, "complex return\n");
+#endif
+ pCppReturn = (void *)r8;
+
+ pUnoReturn = (bridges::cpp_uno::shared::relatesToInterfaceType( pReturnTypeDescr )
+ ? alloca( pReturnTypeDescr->nSize )
+ : pCppReturn); // direct way
+ }
+ }
+ // pop this
+ pCppStack += sizeof( void* );
+
+ // stack space
+ OSL_ENSURE( sizeof(void *) == sizeof(sal_Int32),
+ "### unexpected size!" );
+ // parameters
+ void ** pUnoArgs = (void **)alloca( 4 * sizeof(void *) * nParams );
+ void ** pCppArgs = pUnoArgs + nParams;
+ // indizes of values this have to be converted (interface conversion
+ // cpp<=>uno)
+ sal_Int32 * pTempIndizes = (sal_Int32 *)(pUnoArgs + (2 * nParams));
+ // type descriptions for reconversions
+ typelib_TypeDescription ** ppTempParamTypeDescr =
+ (typelib_TypeDescription **)(pUnoArgs + (3 * nParams));
+
+ sal_Int32 nTempIndizes = 0;
+
+ for ( sal_Int32 nPos = 0; nPos < nParams; ++nPos )
+ {
+ const typelib_MethodParameter & rParam = pParams[nPos];
+ typelib_TypeDescription * pParamTypeDescr = 0;
+ TYPELIB_DANGER_GET( &pParamTypeDescr, rParam.pTypeRef );
+
+ if (!rParam.bOut &&
+ bridges::cpp_uno::shared::isSimpleType( pParamTypeDescr ))
+ {
+ switch (pParamTypeDescr->eTypeClass)
+ {
+ case typelib_TypeClass_BYTE:
+ case typelib_TypeClass_BOOLEAN:
+ pCppArgs[nPos] = pCppStack + 3;
+ pUnoArgs[nPos] = pCppStack + 3;
+ break;
+ case typelib_TypeClass_CHAR:
+ case typelib_TypeClass_SHORT:
+ case typelib_TypeClass_UNSIGNED_SHORT:
+ pCppArgs[nPos] = pCppStack + 2;
+ pUnoArgs[nPos] = pCppStack + 2;
+ break;
+ case typelib_TypeClass_HYPER:
+ case typelib_TypeClass_UNSIGNED_HYPER:
+ case typelib_TypeClass_DOUBLE:
+ pCppArgs[nPos] = pCppStack;
+ pUnoArgs[nPos] = pCppStack;
+ pCppStack += sizeof(sal_Int32); // extra long
+ break;
+ default:
+ pCppArgs[nPos] = pCppStack;
+ pUnoArgs[nPos] = pCppStack;
+ break;
+ }
+ // no longer needed
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ else // ptr to complex value | ref
+ {
+ pCppArgs[nPos] = *(void **)pCppStack;
+
+ if (! rParam.bIn) // is pure out
+ {
+ // uno out is unconstructed mem!
+ pUnoArgs[nPos] = alloca( pParamTypeDescr->nSize );
+ pTempIndizes[nTempIndizes] = nPos;
+ // will be released at reconversion
+ ppTempParamTypeDescr[nTempIndizes++] = pParamTypeDescr;
+ }
+ // is in/inout
+ else if (bridges::cpp_uno::shared::relatesToInterfaceType(
+ pParamTypeDescr ))
+ {
+ uno_copyAndConvertData( pUnoArgs[nPos] = alloca( pParamTypeDescr->nSize ),
+ *(void **)pCppStack, pParamTypeDescr,
+ pThis->getBridge()->getCpp2Uno() );
+ pTempIndizes[nTempIndizes] = nPos; // has to be reconverted
+ // will be released at reconversion
+ ppTempParamTypeDescr[nTempIndizes++] = pParamTypeDescr;
+ }
+ else // direct way
+ {
+ pUnoArgs[nPos] = *(void **)pCppStack;
+ // no longer needed
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ }
+ pCppStack += sizeof(sal_Int32); // standard parameter length
+ }
+
+ // ExceptionHolder
+ uno_Any aUnoExc; // Any will be constructed by callee
+ uno_Any * pUnoExc = &aUnoExc;
+
+#ifdef CMC_DEBUG
+ fprintf(stderr, "before dispatch\n");
+#endif
+ // invoke uno dispatch call
+ (*pThis->getUnoI()->pDispatcher)(
+ pThis->getUnoI(), pMemberTypeDescr, pUnoReturn, pUnoArgs, &pUnoExc );
+
+#ifdef CMC_DEBUG
+ fprintf(stderr, "after dispatch\n");
+#endif
+
+ // in case an exception occured...
+ if (pUnoExc)
+ {
+ // destruct temporary in/inout params
+ for ( ; nTempIndizes--; )
+ {
+ sal_Int32 nIndex = pTempIndizes[nTempIndizes];
+
+ if (pParams[nIndex].bIn) // is in/inout => was constructed
+ uno_destructData( pUnoArgs[nIndex],
+ ppTempParamTypeDescr[nTempIndizes], 0 );
+ TYPELIB_DANGER_RELEASE( ppTempParamTypeDescr[nTempIndizes] );
+ }
+ if (pReturnTypeDescr)
+ TYPELIB_DANGER_RELEASE( pReturnTypeDescr );
+
+ CPPU_CURRENT_NAMESPACE::raiseException( &aUnoExc,
+ pThis->getBridge()->getUno2Cpp() ); // has to destruct the any
+ // is here for dummy
+ return typelib_TypeClass_VOID;
+ }
+ else // else no exception occured...
+ {
+ // temporary params
+ for ( ; nTempIndizes--; )
+ {
+ sal_Int32 nIndex = pTempIndizes[nTempIndizes];
+ typelib_TypeDescription * pParamTypeDescr =
+ ppTempParamTypeDescr[nTempIndizes];
+
+ if (pParams[nIndex].bOut) // inout/out
+ {
+ // convert and assign
+ uno_destructData( pCppArgs[nIndex], pParamTypeDescr,
+ cpp_release );
+ uno_copyAndConvertData( pCppArgs[nIndex], pUnoArgs[nIndex],
+ pParamTypeDescr, pThis->getBridge()->getUno2Cpp() );
+ }
+ // destroy temp uno param
+ uno_destructData( pUnoArgs[nIndex], pParamTypeDescr, 0 );
+
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ // return
+ if (pCppReturn) // has complex return
+ {
+ if (pUnoReturn != pCppReturn) // needs reconversion
+ {
+ uno_copyAndConvertData( pCppReturn, pUnoReturn,
+ pReturnTypeDescr, pThis->getBridge()->getUno2Cpp() );
+ // destroy temp uno return
+ uno_destructData( pUnoReturn, pReturnTypeDescr, 0 );
+ }
+ // complex return ptr is set to return reg
+ *(void **)pRegisterReturn = pCppReturn;
+ }
+ if (pReturnTypeDescr)
+ {
+ typelib_TypeClass eRet =
+ (typelib_TypeClass)pReturnTypeDescr->eTypeClass;
+ TYPELIB_DANGER_RELEASE( pReturnTypeDescr );
+ return eRet;
+ }
+ else
+ return typelib_TypeClass_VOID;
+ }
+ }
+
+
+ //=====================================================================
+ static typelib_TypeClass cpp_mediate(
+ sal_Int32 nFunctionIndex, sal_Int32 nVtableOffset,
+ long sp, long r8,
+ sal_Int64 * pRegisterReturn /* space for register return */ )
+ {
+ void ** pCallStack = (void**)(sp);
+#ifdef CMC_DEBUG
+ fprintf(stderr, "cpp_mediate with\n");
+ fprintf(stderr, "%x %x\n", nFunctionIndex, nVtableOffset);
+ fprintf(stderr, "and %x %x\n", pCallStack, pRegisterReturn);
+ fprintf(stderr, "and %x %x\n", pCallStack[0], pCallStack[1]);
+#endif
+ OSL_ENSURE( sizeof(sal_Int32)==sizeof(void *), "### unexpected!" );
+
+ void *pThis = pCallStack[0];
+
+ pThis = static_cast< char * >(pThis) - nVtableOffset;
+
+ bridges::cpp_uno::shared::CppInterfaceProxy * pCppI =
+ bridges::cpp_uno::shared::CppInterfaceProxy::castInterfaceToProxy(
+ pThis);
+
+ typelib_InterfaceTypeDescription * pTypeDescr = pCppI->getTypeDescr();
+
+ OSL_ENSURE( nFunctionIndex < pTypeDescr->nMapFunctionIndexToMemberIndex,
+ "### illegal vtable index!" );
+ if (nFunctionIndex >= pTypeDescr->nMapFunctionIndexToMemberIndex)
+ {
+ throw RuntimeException(
+ OUString::createFromAscii("illegal vtable index!"),
+ (XInterface *)pCppI );
+ }
+
+ // determine called method
+ OSL_ENSURE( nFunctionIndex < pTypeDescr->nMapFunctionIndexToMemberIndex,
+ "### illegal vtable index!" );
+ sal_Int32 nMemberPos =
+ pTypeDescr->pMapFunctionIndexToMemberIndex[nFunctionIndex];
+ OSL_ENSURE( nMemberPos < pTypeDescr->nAllMembers,
+ "### illegal member index!" );
+
+ TypeDescription aMemberDescr( pTypeDescr->ppAllMembers[nMemberPos] );
+
+ typelib_TypeClass eRet;
+ switch (aMemberDescr.get()->eTypeClass)
+ {
+ case typelib_TypeClass_INTERFACE_ATTRIBUTE:
+ {
+ if (pTypeDescr->pMapMemberIndexToFunctionIndex[nMemberPos] ==
+ nFunctionIndex)
+ {
+ // is GET method
+ eRet = cpp2uno_call(
+ pCppI, aMemberDescr.get(),
+ ((typelib_InterfaceAttributeTypeDescription *)aMemberDescr.get())->pAttributeTypeRef,
+ 0, 0, // no params
+ r8, pCallStack, pRegisterReturn );
+ }
+ else
+ {
+ // is SET method
+ typelib_MethodParameter aParam;
+ aParam.pTypeRef =
+ ((typelib_InterfaceAttributeTypeDescription *)aMemberDescr.get())->pAttributeTypeRef;
+ aParam.bIn = sal_True;
+ aParam.bOut = sal_False;
+
+ eRet = cpp2uno_call(
+ pCppI, aMemberDescr.get(),
+ 0, // indicates void return
+ 1, &aParam,
+ r8, pCallStack, pRegisterReturn );
+ }
+ break;
+ }
+ case typelib_TypeClass_INTERFACE_METHOD:
+ {
+ // is METHOD
+ switch (nFunctionIndex)
+ {
+ case 1: // acquire()
+ pCppI->acquireProxy(); // non virtual call!
+ eRet = typelib_TypeClass_VOID;
+ break;
+ case 2: // release()
+ pCppI->releaseProxy(); // non virtual call!
+ eRet = typelib_TypeClass_VOID;
+ break;
+ case 0: // queryInterface() opt
+ {
+ typelib_TypeDescription * pTD = 0;
+ TYPELIB_DANGER_GET(&pTD,
+ reinterpret_cast<Type *>(pCallStack[1])->getTypeLibType());
+ if (pTD)
+ {
+ XInterface * pInterface = 0;
+ (*pCppI->getBridge()->getCppEnv()->getRegisteredInterface)(
+ pCppI->getBridge()->getCppEnv(),
+ (void **)&pInterface, pCppI->getOid().pData,
+ (typelib_InterfaceTypeDescription *)pTD );
+
+ if (pInterface)
+ {
+ ::uno_any_construct(
+ reinterpret_cast< uno_Any * >( r8 ),
+ &pInterface, pTD, cpp_acquire );
+ pInterface->release();
+ TYPELIB_DANGER_RELEASE( pTD );
+ *(void **)pRegisterReturn = (void*)r8;
+ eRet = typelib_TypeClass_ANY;
+ break;
+ }
+ TYPELIB_DANGER_RELEASE( pTD );
+ }
+ } // else perform queryInterface()
+ default:
+ eRet = cpp2uno_call(
+ pCppI, aMemberDescr.get(),
+ ((typelib_InterfaceMethodTypeDescription *)aMemberDescr.get())->pReturnTypeRef,
+ ((typelib_InterfaceMethodTypeDescription *)aMemberDescr.get())->nParams,
+ ((typelib_InterfaceMethodTypeDescription *)aMemberDescr.get())->pParams,
+ r8, pCallStack, pRegisterReturn );
+ }
+ break;
+ }
+ default:
+ {
+ throw RuntimeException(
+ OUString::createFromAscii("no member description found!"),
+ (XInterface *)pCppI );
+ // is here for dummy
+ eRet = typelib_TypeClass_VOID;
+ }
+ }
+
+ return eRet;
+ }
+}
+
+//=======================================================================
+/**
+ * is called on incoming vtable calls
+ * (called by asm snippets)
+ */
+
+extern "C" sal_Int64 cpp_vtable_call( long firstonstack )
+{
+ register long d0 asm("d0");
+ long functionIndex = d0;
+
+ register long a1 asm("a1");
+ long r8 = a1;
+
+ register long d1 asm("d1");
+ long vtableOffset = d1;
+
+ long sp = (long)&firstonstack;
+
+ sal_Int64 nRegReturn;
+ cpp_mediate( functionIndex, vtableOffset, sp, r8, &nRegReturn );
+ return nRegReturn;
+}
+
+namespace
+{
+ const int codeSnippetSize = 20;
+
+ //some m68k info : http://www2.biglobe.ne.jp/~inaba/trampolines.html
+
+ unsigned char *codeSnippet(unsigned char* code, sal_Int32 functionIndex,
+ sal_Int32 vtableOffset)
+ {
+ unsigned char * p = code;
+ *(short *)&p[0] = 0x203C; //movel functionIndex,d0
+ *(long *)&p[2] = functionIndex;
+ *(short *)&p[6] = 0x223C; //movel functionIndex,d1
+ *(long *)&p[8] = vtableOffset;
+ *(short *)&p[12] = 0x4EF9; //jmp cpp_vtable_call
+ *(long *)&p[14] = (long)&cpp_vtable_call;
+ *(short *)&p[18] = 0x4E71; //nop
+ return code + codeSnippetSize;
+ }
+}
+
+struct bridges::cpp_uno::shared::VtableFactory::Slot { void * fn; };
+
+bridges::cpp_uno::shared::VtableFactory::Slot *
+bridges::cpp_uno::shared::VtableFactory::mapBlockToVtable(void * block)
+{
+ return static_cast< Slot * >(block) + 2;
+}
+
+sal_Size bridges::cpp_uno::shared::VtableFactory::getBlockSize(
+ sal_Int32 slotCount)
+{
+ return (slotCount + 2) * sizeof (Slot) + slotCount * codeSnippetSize;
+}
+
+bridges::cpp_uno::shared::VtableFactory::Slot *
+bridges::cpp_uno::shared::VtableFactory::initializeBlock(
+ void * block, sal_Int32 slotCount)
+{
+ Slot * slots = mapBlockToVtable(block);
+ slots[-2].fn = 0;
+ slots[-1].fn = 0;
+ return slots + slotCount;
+}
+
+unsigned char * bridges::cpp_uno::shared::VtableFactory::addLocalFunctions(
+ Slot ** slots, unsigned char * code, sal_PtrDiff writetoexecdiff,
+ typelib_InterfaceTypeDescription const * type, sal_Int32 functionOffset,
+ sal_Int32 functionCount, sal_Int32 vtableOffset)
+{
+ (*slots) -= functionCount;
+ Slot * s = *slots;
+ for (sal_Int32 i = 0; i < type->nMembers; ++i)
+ {
+ typelib_TypeDescription * member = 0;
+ TYPELIB_DANGER_GET(&member, type->ppMembers[i]);
+ OSL_ASSERT(member != 0);
+ switch (member->eTypeClass)
+ {
+ case typelib_TypeClass_INTERFACE_ATTRIBUTE:
+ // Getter:
+ (s++)->fn = code + writetoexecdiff;
+ code = codeSnippet(code, functionOffset++, vtableOffset);
+ // Setter:
+ if (!reinterpret_cast<
+ typelib_InterfaceAttributeTypeDescription * >(
+ member)->bReadOnly)
+ {
+ (s++)->fn = code + writetoexecdiff;
+ code = codeSnippet(code, functionOffset++, vtableOffset);
+ }
+ break;
+ case typelib_TypeClass_INTERFACE_METHOD:
+ {
+ (s++)->fn = code + writetoexecdiff;
+
+ typelib_InterfaceMethodTypeDescription *pMethodTD =
+ reinterpret_cast<
+ typelib_InterfaceMethodTypeDescription * >(member);
+
+ bool issimple = bridges::cpp_uno::shared::isSimpleType(
+ pMethodTD->pReturnTypeRef);
+
+ code = codeSnippet(code, functionOffset++, vtableOffset);
+ break;
+ }
+ default:
+ OSL_ASSERT(false);
+ break;
+ }
+ TYPELIB_DANGER_RELEASE(member);
+ }
+ return code;
+}
+
+void bridges::cpp_uno::shared::VtableFactory::flushCode(
+ unsigned char const * /*beg*/, unsigned char const * /*end*/)
+{
+}
+
+/* vi:set tabstop=4 shiftwidth=4 expandtab: */
diff --git a/bridges/source/cpp_uno/gcc3_linux_m68k/except.cxx b/bridges/source/cpp_uno/gcc3_linux_m68k/except.cxx
new file mode 100644
index 000000000000..9d036d1b5ae8
--- /dev/null
+++ b/bridges/source/cpp_uno/gcc3_linux_m68k/except.cxx
@@ -0,0 +1,334 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <stdio.h>
+#include <string.h>
+#include <dlfcn.h>
+#include <cxxabi.h>
+#include <hash_map>
+
+#include <rtl/strbuf.hxx>
+#include <rtl/ustrbuf.hxx>
+#include <osl/diagnose.h>
+#include <osl/mutex.hxx>
+
+#include <com/sun/star/uno/genfunc.hxx>
+#include "com/sun/star/uno/RuntimeException.hpp"
+#include <typelib/typedescription.hxx>
+#include <uno/any2.h>
+
+#include "share.hxx"
+
+
+using namespace ::std;
+using namespace ::osl;
+using namespace ::rtl;
+using namespace ::com::sun::star::uno;
+using namespace ::__cxxabiv1;
+
+extern sal_Int32 * pHack;
+extern sal_Int32 nHack;
+
+namespace CPPU_CURRENT_NAMESPACE
+{
+ void dummy_can_throw_anything( char const * )
+ {
+ }
+
+ //===================================================================
+ static OUString toUNOname( char const * p ) SAL_THROW( () )
+ {
+#if OSL_DEBUG_LEVEL > 1
+ char const * start = p;
+#endif
+
+ // example: N3com3sun4star4lang24IllegalArgumentExceptionE
+
+ OUStringBuffer buf( 64 );
+ OSL_ASSERT( 'N' == *p );
+ ++p; // skip N
+
+ while ('E' != *p)
+ {
+ // read chars count
+ long n = (*p++ - '0');
+ while ('0' <= *p && '9' >= *p)
+ {
+ n *= 10;
+ n += (*p++ - '0');
+ }
+ buf.appendAscii( p, n );
+ p += n;
+ if ('E' != *p)
+ buf.append( (sal_Unicode)'.' );
+ }
+
+#if OSL_DEBUG_LEVEL > 1
+ OUString ret( buf.makeStringAndClear() );
+ OString c_ret( OUStringToOString( ret, RTL_TEXTENCODING_ASCII_US ) );
+ fprintf( stderr, "> toUNOname(): %s => %s\n", start, c_ret.getStr() );
+ return ret;
+#else
+ return buf.makeStringAndClear();
+#endif
+ }
+
+ //=====================================================================
+ class RTTI
+ {
+ typedef hash_map< OUString, type_info *, OUStringHash > t_rtti_map;
+
+ Mutex m_mutex;
+ t_rtti_map m_rttis;
+ t_rtti_map m_generatedRttis;
+
+ void * m_hApp;
+
+ public:
+ RTTI() SAL_THROW( () );
+ ~RTTI() SAL_THROW( () );
+
+ type_info * getRTTI(typelib_CompoundTypeDescription *) SAL_THROW( () );
+ };
+ //____________________________________________________________________
+ RTTI::RTTI() SAL_THROW( () )
+ : m_hApp( dlopen( 0, RTLD_LAZY ) )
+ {
+ }
+ //____________________________________________________________________
+ RTTI::~RTTI() SAL_THROW( () )
+ {
+ dlclose( m_hApp );
+ }
+
+ //____________________________________________________________________
+ type_info * RTTI::getRTTI( typelib_CompoundTypeDescription *pTypeDescr ) SAL_THROW( () )
+ {
+ type_info * rtti;
+
+ OUString const & unoName = *(OUString const *)&pTypeDescr->aBase.pTypeName;
+
+ MutexGuard guard( m_mutex );
+ t_rtti_map::const_iterator iRttiFind( m_rttis.find( unoName ) );
+ if (iRttiFind == m_rttis.end())
+ {
+ // RTTI symbol
+ OStringBuffer buf( 64 );
+ buf.append( RTL_CONSTASCII_STRINGPARAM("_ZTIN") );
+ sal_Int32 index = 0;
+ do
+ {
+ OUString token( unoName.getToken( 0, '.', index ) );
+ buf.append( token.getLength() );
+ OString c_token( OUStringToOString( token, RTL_TEXTENCODING_ASCII_US ) );
+ buf.append( c_token );
+ }
+ while (index >= 0);
+ buf.append( 'E' );
+
+ OString symName( buf.makeStringAndClear() );
+ rtti = (type_info *)dlsym( m_hApp, symName.getStr() );
+
+ if (rtti)
+ {
+ pair< t_rtti_map::iterator, bool > insertion(
+ m_rttis.insert( t_rtti_map::value_type( unoName, rtti ) ) );
+ OSL_ENSURE( insertion.second, "### inserting new rtti failed?!" );
+ }
+ else
+ {
+ // try to lookup the symbol in the generated rtti map
+ t_rtti_map::const_iterator iFind( m_generatedRttis.find( unoName ) );
+ if (iFind == m_generatedRttis.end())
+ {
+ // we must generate it !
+ // symbol and rtti-name is nearly identical,
+ // the symbol is prefixed with _ZTI
+ char const * rttiName = symName.getStr() +4;
+#if OSL_DEBUG_LEVEL > 1
+ fprintf( stderr,"generated rtti for %s\n", rttiName );
+#endif
+ if (pTypeDescr->pBaseTypeDescription)
+ {
+ // ensure availability of base
+ type_info * base_rtti = getRTTI(
+ (typelib_CompoundTypeDescription *)pTypeDescr->pBaseTypeDescription );
+ rtti = new __si_class_type_info(
+ strdup( rttiName ), (__class_type_info *)base_rtti );
+ }
+ else
+ {
+ // this class has no base class
+ rtti = new __class_type_info( strdup( rttiName ) );
+ }
+
+ pair< t_rtti_map::iterator, bool > insertion(
+ m_generatedRttis.insert( t_rtti_map::value_type( unoName, rtti ) ) );
+ OSL_ENSURE( insertion.second, "### inserting new generated rtti failed?!" );
+ }
+ else // taking already generated rtti
+ {
+ rtti = iFind->second;
+ }
+ }
+ }
+ else
+ {
+ rtti = iRttiFind->second;
+ }
+
+ return rtti;
+ }
+
+ //------------------------------------------------------------------
+ static void deleteException( void * pExc )
+ {
+ __cxa_exception const * header = ((__cxa_exception const *)pExc - 1);
+ typelib_TypeDescription * pTD = 0;
+ OUString unoName( toUNOname( header->exceptionType->name() ) );
+ ::typelib_typedescription_getByName( &pTD, unoName.pData );
+ OSL_ENSURE( pTD, "### unknown exception type! leaving out destruction => leaking!!!" );
+ if (pTD)
+ {
+ ::uno_destructData( pExc, pTD, cpp_release );
+ ::typelib_typedescription_release( pTD );
+ }
+ }
+
+ //==================================================================
+ void raiseException( uno_Any * pUnoExc, uno_Mapping * pUno2Cpp )
+ {
+#if OSL_DEBUG_LEVEL > 1
+ OString cstr(
+ OUStringToOString(
+ *reinterpret_cast< OUString const * >( &pUnoExc->pType->pTypeName ),
+ RTL_TEXTENCODING_ASCII_US ) );
+ fprintf( stderr, "> uno exception occured: %s\n", cstr.getStr() );
+#endif
+ void * pCppExc;
+ type_info * rtti;
+
+ {
+ // construct cpp exception object
+ typelib_TypeDescription * pTypeDescr = 0;
+ TYPELIB_DANGER_GET( &pTypeDescr, pUnoExc->pType );
+ OSL_ASSERT( pTypeDescr );
+ if (! pTypeDescr)
+ {
+ throw RuntimeException(
+ OUString( RTL_CONSTASCII_USTRINGPARAM("cannot get typedescription for type ") ) +
+ *reinterpret_cast< OUString const * >( &pUnoExc->pType->pTypeName ),
+ Reference< XInterface >() );
+ }
+
+ pCppExc = __cxa_allocate_exception( pTypeDescr->nSize );
+ ::uno_copyAndConvertData( pCppExc, pUnoExc->pData, pTypeDescr, pUno2Cpp );
+
+ // destruct uno exception
+ ::uno_any_destruct( pUnoExc, 0 );
+ // avoiding locked counts
+ static RTTI * s_rtti = 0;
+ if (! s_rtti)
+ {
+ MutexGuard guard( Mutex::getGlobalMutex() );
+ if (! s_rtti)
+ {
+#ifdef LEAK_STATIC_DATA
+ s_rtti = new RTTI();
+#else
+ static RTTI rtti_data;
+ s_rtti = &rtti_data;
+#endif
+ }
+ }
+ rtti = (type_info *)s_rtti->getRTTI( (typelib_CompoundTypeDescription *) pTypeDescr );
+ TYPELIB_DANGER_RELEASE( pTypeDescr );
+ OSL_ENSURE( rtti, "### no rtti for throwing exception!" );
+ if (! rtti)
+ {
+ throw RuntimeException(
+ OUString( RTL_CONSTASCII_USTRINGPARAM("no rtti for type ") ) +
+ *reinterpret_cast< OUString const * >( &pUnoExc->pType->pTypeName ),
+ Reference< XInterface >() );
+ }
+ }
+
+
+ __cxa_throw( pCppExc, rtti, deleteException );
+ }
+
+ static void* getAdjustedPtr(__cxa_exception* header)
+ {
+ return header->adjustedPtr;
+ }
+
+ //===================================================================
+ void fillUnoException( __cxa_exception * header, uno_Any * pUnoExc, uno_Mapping * pCpp2Uno )
+ {
+ if (! header)
+ {
+ RuntimeException aRE(
+ OUString( RTL_CONSTASCII_USTRINGPARAM("no exception header!") ),
+ Reference< XInterface >() );
+ Type const & rType = ::getCppuType( &aRE );
+ uno_type_any_constructAndConvert( pUnoExc, &aRE, rType.getTypeLibType(), pCpp2Uno );
+#if OSL_DEBUG_LEVEL > 0
+ OString cstr( OUStringToOString( aRE.Message, RTL_TEXTENCODING_ASCII_US ) );
+ OSL_ENSURE( 0, cstr.getStr() );
+#endif
+ return;
+ }
+
+ typelib_TypeDescription * pExcTypeDescr = 0;
+ OUString unoName( toUNOname( header->exceptionType->name() ) );
+#if OSL_DEBUG_LEVEL > 1
+ OString cstr_unoName( OUStringToOString( unoName, RTL_TEXTENCODING_ASCII_US ) );
+ fprintf( stderr, "> c++ exception occured: %s\n", cstr_unoName.getStr() );
+#endif
+ typelib_typedescription_getByName( &pExcTypeDescr, unoName.pData );
+ if (0 == pExcTypeDescr)
+ {
+ RuntimeException aRE(
+ OUString( RTL_CONSTASCII_USTRINGPARAM("exception type not found: ") ) + unoName,
+ Reference< XInterface >() );
+ Type const & rType = ::getCppuType( &aRE );
+ uno_type_any_constructAndConvert( pUnoExc, &aRE, rType.getTypeLibType(), pCpp2Uno );
+#if OSL_DEBUG_LEVEL > 0
+ OString cstr( OUStringToOString( aRE.Message, RTL_TEXTENCODING_ASCII_US ) );
+ OSL_ENSURE( 0, cstr.getStr() );
+#endif
+ }
+ else
+ {
+ // construct uno exception any
+ uno_any_constructAndConvert( pUnoExc, getAdjustedPtr(header), pExcTypeDescr, pCpp2Uno );
+ typelib_typedescription_release( pExcTypeDescr );
+ }
+ }
+}
+
+/* vi:set tabstop=4 shiftwidth=4 expandtab: */
diff --git a/bridges/source/cpp_uno/gcc3_linux_m68k/makefile.mk b/bridges/source/cpp_uno/gcc3_linux_m68k/makefile.mk
new file mode 100644
index 000000000000..8ad89c973b9e
--- /dev/null
+++ b/bridges/source/cpp_uno/gcc3_linux_m68k/makefile.mk
@@ -0,0 +1,80 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..$/..$/..
+
+PRJNAME=bridges
+TARGET=gcc3_uno
+LIBTARGET=no
+ENABLE_EXCEPTIONS=TRUE
+NO_BSYMBOLIC=TRUE
+
+# --- Settings -----------------------------------------------------
+
+.INCLUDE : settings.mk
+
+# --- Files --------------------------------------------------------
+
+.IF "$(COM)$(OS)$(CPU)$(COMNAME)" == "GCCLINUX6gcc3"
+
+.IF "$(cppu_no_leak)" == ""
+CFLAGS += -DLEAK_STATIC_DATA
+.ENDIF
+
+CFLAGSCXX += -fno-omit-frame-pointer
+
+NOOPTFILES= \
+ $(SLO)$/cpp2uno.obj \
+ $(SLO)$/except.obj \
+ $(SLO)$/uno2cpp.obj
+
+CFLAGSNOOPT=-O0
+
+SLOFILES= \
+ $(SLO)$/cpp2uno.obj \
+ $(SLO)$/except.obj \
+ $(SLO)$/uno2cpp.obj
+
+SHL1TARGET= $(TARGET)
+
+SHL1DEF=$(MISC)$/$(SHL1TARGET).def
+SHL1IMPLIB=i$(TARGET)
+SHL1VERSIONMAP=..$/..$/bridge_exports.map
+SHL1RPATH=URELIB
+
+SHL1OBJS = $(SLOFILES)
+SHL1LIBS = $(SLB)$/cpp_uno_shared.lib
+
+SHL1STDLIBS= \
+ $(CPPULIB) \
+ $(SALLIB)
+
+.ENDIF
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : target.mk
diff --git a/bridges/source/cpp_uno/gcc3_linux_m68k/share.hxx b/bridges/source/cpp_uno/gcc3_linux_m68k/share.hxx
new file mode 100644
index 000000000000..6e148b489508
--- /dev/null
+++ b/bridges/source/cpp_uno/gcc3_linux_m68k/share.hxx
@@ -0,0 +1,91 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "uno/mapping.h"
+
+#include <typeinfo>
+#include <exception>
+#include <cstddef>
+
+namespace CPPU_CURRENT_NAMESPACE
+{
+
+ void dummy_can_throw_anything( char const * );
+
+
+// ----- following decl from libstdc++-v3/libsupc++/unwind-cxx.h and unwind.h
+
+struct _Unwind_Exception
+{
+ unsigned exception_class __attribute__((__mode__(__DI__)));
+ void * exception_cleanup;
+ unsigned private_1 __attribute__((__mode__(__word__)));
+ unsigned private_2 __attribute__((__mode__(__word__)));
+} __attribute__((__aligned__));
+
+struct __cxa_exception
+{
+ ::std::type_info *exceptionType;
+ void (*exceptionDestructor)(void *);
+
+ ::std::unexpected_handler unexpectedHandler;
+ ::std::terminate_handler terminateHandler;
+
+ __cxa_exception *nextException;
+
+ int handlerCount;
+
+ int handlerSwitchValue;
+ const unsigned char *actionRecord;
+ const unsigned char *languageSpecificData;
+ void *catchTemp;
+ void *adjustedPtr;
+
+ _Unwind_Exception unwindHeader;
+};
+
+extern "C" void *__cxa_allocate_exception(
+ std::size_t thrown_size ) throw();
+extern "C" void __cxa_throw (
+ void *thrown_exception, std::type_info *tinfo, void (*dest) (void *) ) __attribute__((noreturn));
+
+struct __cxa_eh_globals
+{
+ __cxa_exception *caughtExceptions;
+ unsigned int uncaughtExceptions;
+};
+extern "C" __cxa_eh_globals *__cxa_get_globals () throw();
+
+// -----
+
+//==================================================================================================
+void raiseException(
+ uno_Any * pUnoExc, uno_Mapping * pUno2Cpp );
+//==================================================================================================
+void fillUnoException(
+ __cxa_exception * header, uno_Any *, uno_Mapping * pCpp2Uno );
+}
diff --git a/bridges/source/cpp_uno/gcc3_linux_m68k/uno2cpp.cxx b/bridges/source/cpp_uno/gcc3_linux_m68k/uno2cpp.cxx
new file mode 100644
index 000000000000..2bee8f1e0fad
--- /dev/null
+++ b/bridges/source/cpp_uno/gcc3_linux_m68k/uno2cpp.cxx
@@ -0,0 +1,493 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <malloc.h>
+#include <rtl/alloc.h>
+
+#include <com/sun/star/uno/genfunc.hxx>
+#include "com/sun/star/uno/RuntimeException.hpp"
+#include <uno/data.h>
+
+#include <bridges/cpp_uno/shared/bridge.hxx>
+#include <bridges/cpp_uno/shared/types.hxx>
+#include <bridges/cpp_uno/shared/unointerfaceproxy.hxx>
+#include <bridges/cpp_uno/shared/vtables.hxx>
+
+#include "share.hxx"
+
+#include <stdio.h>
+#include <string.h>
+
+using namespace ::rtl;
+using namespace ::com::sun::star::uno;
+
+void MapReturn(long d0, long d1, typelib_TypeClass eReturnType, long *pRegisterReturn)
+{
+ register float fret asm("fp0");
+ register double dret asm("fp0");
+
+ switch( eReturnType )
+ {
+ case typelib_TypeClass_HYPER:
+ case typelib_TypeClass_UNSIGNED_HYPER:
+ pRegisterReturn[1] = d1;
+ case typelib_TypeClass_LONG:
+ case typelib_TypeClass_UNSIGNED_LONG:
+ case typelib_TypeClass_ENUM:
+ case typelib_TypeClass_CHAR:
+ case typelib_TypeClass_SHORT:
+ case typelib_TypeClass_UNSIGNED_SHORT:
+ case typelib_TypeClass_BOOLEAN:
+ case typelib_TypeClass_BYTE:
+ pRegisterReturn[0] = d0;
+ break;
+ case typelib_TypeClass_FLOAT:
+ *(float*)pRegisterReturn = fret;
+ break;
+ case typelib_TypeClass_DOUBLE:
+ *(double*)pRegisterReturn = dret;
+ break;
+ default:
+ break;
+ }
+}
+
+namespace
+{
+//================================================================
+
+void callVirtualMethod(
+ void * pThis,
+ sal_Int32 nVtableIndex,
+ void * pRegisterReturn,
+ typelib_TypeClass eReturnType,
+ sal_uInt32 *pStack,
+ sal_uInt32 nStack) __attribute__((noinline));
+
+void callVirtualMethod(
+ void * pThis,
+ sal_Int32 nVtableIndex,
+ void * pRegisterReturn,
+ typelib_TypeClass eReturnType,
+ sal_uInt32 *pStack,
+ sal_uInt32 nStack)
+{
+ // never called
+ if (! pThis)
+ CPPU_CURRENT_NAMESPACE::dummy_can_throw_anything("xxx"); // address something
+
+ if ( nStack )
+ {
+ // m68k stack is either 2 or 4 bytes aligned, doesn't really matter as
+ // we deal in 4 byte units anyway
+ sal_uInt32 nStackBytes = nStack * sizeof(sal_uInt32);
+ sal_uInt32 *stack = (sal_uInt32 *) __builtin_alloca( nStackBytes );
+ memcpy( stack, pStack, nStackBytes );
+ }
+
+#ifdef CMC_DEBUG
+ // Let's figure out what is really going on here
+ {
+ fprintf( stderr, "\nStack (%d): ", nStack );
+ for ( unsigned int i = 0; i < nStack; ++i )
+ fprintf( stderr, "0x%lx, ", pStack[i] );
+ fprintf( stderr, "\n" );
+ fprintf( stderr, "pRegisterReturn is %p\n", pRegisterReturn);
+ }
+#endif
+
+ sal_uInt32 pMethod = *((sal_uInt32*)pThis);
+ pMethod += 4 * nVtableIndex;
+ pMethod = *((sal_uInt32 *)pMethod);
+
+ typedef long (*FunctionCall )();
+ FunctionCall pFunc = (FunctionCall)pMethod;
+
+ //stick the return area into r8 for big struct returning
+ asm volatile("movel %0,%%a1" : : "m"(pRegisterReturn) : );
+
+ long d0 = (*pFunc)();
+
+ register long d1 asm("d1");
+
+ MapReturn(d0, d1, eReturnType, (long*)pRegisterReturn);
+}
+}
+
+#define INSERT_INT32( pSV, pDS )\
+ *pDS++ = *reinterpret_cast<sal_uInt32 *>( pSV );
+
+#define INSERT_INT64( pSV, pDS )\
+ INSERT_INT32( pSV, pDS ) \
+ INSERT_INT32( ((sal_uInt32*)pSV)+1, pDS )
+
+#define INSERT_FLOAT( pSV, pDS ) \
+ INSERT_INT32( pSV, pDS )
+
+#define INSERT_DOUBLE( pSV, pDS ) \
+ INSERT_INT64( pSV, pDS )
+
+#define INSERT_INT16( pSV, pDS ) \
+ *pDS++ = *reinterpret_cast<sal_uInt16 *>( pSV );
+
+#define INSERT_INT8( pSV, pDS ) \
+ *pDS++ = *reinterpret_cast<sal_uInt8 *>( pSV );
+
+namespace {
+//=======================================================================
+static void cpp_call(
+ bridges::cpp_uno::shared::UnoInterfaceProxy * pThis,
+ bridges::cpp_uno::shared::VtableSlot aVtableSlot,
+ typelib_TypeDescriptionReference * pReturnTypeRef,
+ sal_Int32 nParams, typelib_MethodParameter * pParams,
+ void * pUnoReturn, void * pUnoArgs[], uno_Any ** ppUnoExc )
+{
+
+ // max space for: [complex ret ptr], values|ptr ...
+ sal_uInt32 * pStack = (sal_uInt32 *)__builtin_alloca(
+ sizeof(sal_Int32) + ((nParams+2) * sizeof(sal_Int64)) );
+ sal_uInt32 * pStackStart = pStack;
+
+ // return
+ typelib_TypeDescription * pReturnTypeDescr = 0;
+ TYPELIB_DANGER_GET( &pReturnTypeDescr, pReturnTypeRef );
+ OSL_ENSURE( pReturnTypeDescr, "### expected return type description!" );
+
+ void * pCppReturn = 0; // if != 0 && != pUnoReturn, needs reconversion
+
+ if (pReturnTypeDescr)
+ {
+
+ if (bridges::cpp_uno::shared::isSimpleType( pReturnTypeDescr ))
+ {
+ pCppReturn = pUnoReturn; // direct way for simple types
+ }
+ else
+ {
+ // complex return via ptr
+ pCppReturn = (bridges::cpp_uno::shared::relatesToInterfaceType( pReturnTypeDescr )
+ ? __builtin_alloca( pReturnTypeDescr->nSize )
+ : pUnoReturn); // direct way
+
+// INSERT_INT32( &pCppReturn, pStack );
+ }
+ }
+ // push this
+ void * pAdjustedThisPtr = reinterpret_cast< void ** >(pThis->getCppI())
+ + aVtableSlot.offset;
+ INSERT_INT32( &pAdjustedThisPtr, pStack );
+
+ // stack space
+ OSL_ENSURE( sizeof(void *) == sizeof(sal_Int32), "### unexpected size!" );
+ // args
+ void ** pCppArgs = (void **)alloca( 3 * sizeof(void *) * nParams );
+ // indizes of values this have to be converted (interface conversion cpp<=>uno)
+ sal_Int32 * pTempIndizes = (sal_Int32 *)(pCppArgs + nParams);
+ // type descriptions for reconversions
+ typelib_TypeDescription ** ppTempParamTypeDescr = (typelib_TypeDescription **)(pCppArgs + (2 * nParams));
+
+ sal_Int32 nTempIndizes = 0;
+
+ for ( sal_Int32 nPos = 0; nPos < nParams; ++nPos )
+ {
+ const typelib_MethodParameter & rParam = pParams[nPos];
+ typelib_TypeDescription * pParamTypeDescr = 0;
+ TYPELIB_DANGER_GET( &pParamTypeDescr, rParam.pTypeRef );
+
+ if (!rParam.bOut && bridges::cpp_uno::shared::isSimpleType( pParamTypeDescr ))
+ {
+// uno_copyAndConvertData( pCppArgs[nPos] = pStack, pUnoArgs[nPos],
+ uno_copyAndConvertData( pCppArgs[nPos] = alloca(8), pUnoArgs[nPos],
+ pParamTypeDescr, pThis->getBridge()->getUno2Cpp() );
+
+ switch (pParamTypeDescr->eTypeClass)
+ {
+ case typelib_TypeClass_HYPER:
+ case typelib_TypeClass_UNSIGNED_HYPER:
+#ifdef CMC_DEBUG
+ fprintf(stderr, "hyper is %lx\n", pCppArgs[nPos]);
+#endif
+ INSERT_INT64( pCppArgs[nPos], pStack );
+ break;
+ case typelib_TypeClass_LONG:
+ case typelib_TypeClass_UNSIGNED_LONG:
+ case typelib_TypeClass_ENUM:
+#ifdef CMC_DEBUG
+ fprintf(stderr, "long is %x\n", pCppArgs[nPos]);
+#endif
+ INSERT_INT32( pCppArgs[nPos], pStack );
+ break;
+ case typelib_TypeClass_SHORT:
+ case typelib_TypeClass_CHAR:
+ case typelib_TypeClass_UNSIGNED_SHORT:
+ INSERT_INT16( pCppArgs[nPos], pStack );
+ break;
+ case typelib_TypeClass_BOOLEAN:
+ case typelib_TypeClass_BYTE:
+ INSERT_INT8( pCppArgs[nPos], pStack );
+ break;
+ case typelib_TypeClass_FLOAT:
+ INSERT_FLOAT( pCppArgs[nPos], pStack );
+ break;
+ case typelib_TypeClass_DOUBLE:
+ INSERT_DOUBLE( pCppArgs[nPos], pStack );
+ break;
+ }
+ // no longer needed
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ else // ptr to complex value | ref
+ {
+ if (! rParam.bIn) // is pure out
+ {
+ // cpp out is constructed mem, uno out is not!
+ uno_constructData(
+ pCppArgs[nPos] = alloca( pParamTypeDescr->nSize ),
+ pParamTypeDescr );
+ pTempIndizes[nTempIndizes] = nPos; // default constructed for cpp call
+ // will be released at reconversion
+ ppTempParamTypeDescr[nTempIndizes++] = pParamTypeDescr;
+ }
+ // is in/inout
+ else if (bridges::cpp_uno::shared::relatesToInterfaceType( pParamTypeDescr ))
+ {
+ uno_copyAndConvertData(
+ pCppArgs[nPos] = alloca( pParamTypeDescr->nSize ),
+ pUnoArgs[nPos], pParamTypeDescr, pThis->getBridge()->getUno2Cpp() );
+
+ pTempIndizes[nTempIndizes] = nPos; // has to be reconverted
+ // will be released at reconversion
+ ppTempParamTypeDescr[nTempIndizes++] = pParamTypeDescr;
+ }
+ else // direct way
+ {
+ pCppArgs[nPos] = pUnoArgs[nPos];
+ // no longer needed
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ INSERT_INT32( &(pCppArgs[nPos]), pStack );
+ }
+ }
+
+ try
+ {
+ callVirtualMethod(
+ pAdjustedThisPtr, aVtableSlot.index,
+ pCppReturn, pReturnTypeDescr->eTypeClass,
+ pStackStart,
+ (pStack - pStackStart));
+
+ // NO exception occured...
+ *ppUnoExc = 0;
+
+ // reconvert temporary params
+ for ( ; nTempIndizes--; )
+ {
+ sal_Int32 nIndex = pTempIndizes[nTempIndizes];
+ typelib_TypeDescription * pParamTypeDescr = ppTempParamTypeDescr[nTempIndizes];
+
+ if (pParams[nIndex].bIn)
+ {
+ if (pParams[nIndex].bOut) // inout
+ {
+ uno_destructData( pUnoArgs[nIndex], pParamTypeDescr, 0 ); // destroy uno value
+ uno_copyAndConvertData( pUnoArgs[nIndex], pCppArgs[nIndex], pParamTypeDescr,
+ pThis->getBridge()->getCpp2Uno() );
+ }
+ }
+ else // pure out
+ {
+ uno_copyAndConvertData( pUnoArgs[nIndex], pCppArgs[nIndex], pParamTypeDescr,
+ pThis->getBridge()->getCpp2Uno() );
+ }
+ // destroy temp cpp param => cpp: every param was constructed
+ uno_destructData( pCppArgs[nIndex], pParamTypeDescr, cpp_release );
+
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ // return value
+ if (pCppReturn && pUnoReturn != pCppReturn)
+ {
+ uno_copyAndConvertData( pUnoReturn, pCppReturn, pReturnTypeDescr,
+ pThis->getBridge()->getCpp2Uno() );
+ uno_destructData( pCppReturn, pReturnTypeDescr, cpp_release );
+ }
+ }
+ catch (...)
+ {
+ // fill uno exception
+ fillUnoException( CPPU_CURRENT_NAMESPACE::__cxa_get_globals()->caughtExceptions, *ppUnoExc, pThis->getBridge()->getCpp2Uno() );
+
+ // temporary params
+ for ( ; nTempIndizes--; )
+ {
+ sal_Int32 nIndex = pTempIndizes[nTempIndizes];
+ // destroy temp cpp param => cpp: every param was constructed
+ uno_destructData( pCppArgs[nIndex], ppTempParamTypeDescr[nTempIndizes], cpp_release );
+ TYPELIB_DANGER_RELEASE( ppTempParamTypeDescr[nTempIndizes] );
+ }
+
+ // return type
+ if (pReturnTypeDescr)
+ TYPELIB_DANGER_RELEASE( pReturnTypeDescr );
+ }
+}
+}
+
+namespace bridges { namespace cpp_uno { namespace shared {
+
+void unoInterfaceProxyDispatch(
+ uno_Interface * pUnoI, const typelib_TypeDescription * pMemberDescr,
+ void * pReturn, void * pArgs[], uno_Any ** ppException )
+{
+ // is my surrogate
+ bridges::cpp_uno::shared::UnoInterfaceProxy * pThis
+ = static_cast< bridges::cpp_uno::shared::UnoInterfaceProxy * >(pUnoI);
+ typelib_InterfaceTypeDescription * pTypeDescr = pThis->pTypeDescr;
+
+ switch (pMemberDescr->eTypeClass)
+ {
+ case typelib_TypeClass_INTERFACE_ATTRIBUTE:
+ {
+ // determine vtable call index
+ sal_Int32 nMemberPos = ((typelib_InterfaceMemberTypeDescription *)pMemberDescr)->nPosition;
+ OSL_ENSURE( nMemberPos < pTypeDescr->nAllMembers, "### member pos out of range!" );
+
+ VtableSlot aVtableSlot(
+ getVtableSlot(
+ reinterpret_cast<typelib_InterfaceAttributeTypeDescription const *>
+ (pMemberDescr)));
+
+ if (pReturn)
+ {
+ // dependent dispatch
+ cpp_call(
+ pThis, aVtableSlot,
+ ((typelib_InterfaceAttributeTypeDescription *)pMemberDescr)->pAttributeTypeRef,
+ 0, 0, // no params
+ pReturn, pArgs, ppException );
+ }
+ else
+ {
+ // is SET
+ typelib_MethodParameter aParam;
+ aParam.pTypeRef =
+ ((typelib_InterfaceAttributeTypeDescription *)pMemberDescr)->pAttributeTypeRef;
+ aParam.bIn = sal_True;
+ aParam.bOut = sal_False;
+
+ typelib_TypeDescriptionReference * pReturnTypeRef = 0;
+ OUString aVoidName( RTL_CONSTASCII_USTRINGPARAM("void") );
+ typelib_typedescriptionreference_new(
+ &pReturnTypeRef, typelib_TypeClass_VOID, aVoidName.pData );
+
+ // dependent dispatch
+ aVtableSlot.index += 1;
+ cpp_call(
+ pThis, aVtableSlot, // get, then set method
+ pReturnTypeRef,
+ 1, &aParam,
+ pReturn, pArgs, ppException );
+
+ typelib_typedescriptionreference_release( pReturnTypeRef );
+ }
+
+ break;
+ }
+ case typelib_TypeClass_INTERFACE_METHOD:
+ {
+ // determine vtable call index
+ sal_Int32 nMemberPos = ((typelib_InterfaceMemberTypeDescription *)pMemberDescr)->nPosition;
+ OSL_ENSURE( nMemberPos < pTypeDescr->nAllMembers, "### member pos out of range!" );
+
+ VtableSlot aVtableSlot(
+ getVtableSlot(
+ reinterpret_cast<typelib_InterfaceMethodTypeDescription const *>
+ (pMemberDescr)));
+
+ switch (aVtableSlot.index)
+ {
+ // standard calls
+ case 1: // acquire uno interface
+ (*pUnoI->acquire)( pUnoI );
+ *ppException = 0;
+ break;
+ case 2: // release uno interface
+ (*pUnoI->release)( pUnoI );
+ *ppException = 0;
+ break;
+ case 0: // queryInterface() opt
+ {
+ typelib_TypeDescription * pTD = 0;
+ TYPELIB_DANGER_GET( &pTD, reinterpret_cast< Type * >( pArgs[0] )->getTypeLibType() );
+ if (pTD)
+ {
+ uno_Interface * pInterface = 0;
+ (*pThis->getBridge()->getUnoEnv()->getRegisteredInterface)(
+ pThis->getBridge()->getUnoEnv(),
+ (void **)&pInterface, pThis->oid.pData, (typelib_InterfaceTypeDescription *)pTD );
+
+ if (pInterface)
+ {
+ ::uno_any_construct(
+ reinterpret_cast< uno_Any * >( pReturn ),
+ &pInterface, pTD, 0 );
+ (*pInterface->release)( pInterface );
+ TYPELIB_DANGER_RELEASE( pTD );
+ *ppException = 0;
+ break;
+ }
+ TYPELIB_DANGER_RELEASE( pTD );
+ }
+ } // else perform queryInterface()
+ default:
+ // dependent dispatch
+ cpp_call(
+ pThis, aVtableSlot,
+ ((typelib_InterfaceMethodTypeDescription *)pMemberDescr)->pReturnTypeRef,
+ ((typelib_InterfaceMethodTypeDescription *)pMemberDescr)->nParams,
+ ((typelib_InterfaceMethodTypeDescription *)pMemberDescr)->pParams,
+ pReturn, pArgs, ppException );
+ }
+ break;
+ }
+ default:
+ {
+ ::com::sun::star::uno::RuntimeException aExc(
+ OUString( RTL_CONSTASCII_USTRINGPARAM("illegal member type description!") ),
+ ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >() );
+
+ Type const & rExcType = ::getCppuType( &aExc );
+ // binary identical null reference
+ ::uno_type_any_construct( *ppException, &aExc, rExcType.getTypeLibType(), 0 );
+ }
+ }
+}
+
+} } }
+
+/* vi:set tabstop=4 shiftwidth=4 expandtab: */
diff --git a/bridges/source/cpp_uno/gcc3_linux_mips/cpp2uno.cxx b/bridges/source/cpp_uno/gcc3_linux_mips/cpp2uno.cxx
new file mode 100644
index 000000000000..784657954d84
--- /dev/null
+++ b/bridges/source/cpp_uno/gcc3_linux_mips/cpp2uno.cxx
@@ -0,0 +1,803 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#include <com/sun/star/uno/genfunc.hxx>
+#include <typelib/typedescription.hxx>
+#include <uno/data.h>
+#include <osl/endian.h>
+#include "bridges/cpp_uno/shared/bridge.hxx"
+#include "bridges/cpp_uno/shared/cppinterfaceproxy.hxx"
+#include "bridges/cpp_uno/shared/types.hxx"
+#include "bridges/cpp_uno/shared/vtablefactory.hxx"
+#include "share.hxx"
+
+#include <stdio.h>
+#include <string.h>
+
+using namespace com::sun::star::uno;
+
+//#define BRDEBUG
+
+#ifdef BRDEBUG
+#include <rtl/strbuf.hxx>
+#include <rtl/ustrbuf.hxx>
+#include <osl/diagnose.h>
+#include <osl/mutex.hxx>
+using namespace ::std;
+using namespace ::osl;
+using namespace ::rtl;
+#endif
+#include <sys/sysmips.h>
+
+#ifdef OSL_BIGENDIAN
+#define IS_BIG_ENDIAN 1
+#else
+#define IS_BIG_ENDIAN 0
+#endif
+
+using namespace ::com::sun::star::uno;
+
+namespace
+{
+
+ //==================================================================================================
+ static typelib_TypeClass cpp2uno_call(
+ bridges::cpp_uno::shared::CppInterfaceProxy * pThis,
+ const typelib_TypeDescription * pMemberTypeDescr,
+ typelib_TypeDescriptionReference * pReturnTypeRef, // 0 indicates void return
+ sal_Int32 nParams, typelib_MethodParameter * pParams,
+ void ** gpreg, void ** /*fpreg*/, void ** ovrflw,
+ sal_Int64 * pRegisterReturn /* space for register return */ )
+ {
+ /* Most MIPS ABIs view the arguments as a struct, of which the
+ first N words go in registers and the rest go on the stack. If I < N, the
+ Ith word might go in Ith integer argument register or the Ith
+ floating-point one. For these ABIs, we only need to remember the number
+ of words passed so far. We are interested only in o32 ABI,so it is the
+ case.
+ */
+ int nw = 0; // number of words used by arguments
+
+#ifdef BRDEBUG
+ fprintf(stderr,"cpp2uno_call1\n");
+#endif
+
+ /* C++ has [ret *] or this as the first arguments, so no arguments will
+ * be passed in floating-point registers?
+ */
+ //int int_seen = 0; // have we seen integer arguments?
+
+ void ** pCppStack; //temporary stack pointer
+
+ // gpreg: [ret *], this, [gpr params]
+ // fpreg: [fpr params]
+ // ovrflw: [gpr or fpr params (properly aligned)]
+
+ // return
+ typelib_TypeDescription * pReturnTypeDescr = 0;
+ if (pReturnTypeRef)
+ TYPELIB_DANGER_GET( &pReturnTypeDescr, pReturnTypeRef );
+
+ void * pUnoReturn = 0;
+ void * pCppReturn = 0; // complex return ptr: if != 0 && != pUnoReturn, reconversion need
+
+ if (pReturnTypeDescr)
+ {
+ if (bridges::cpp_uno::shared::isSimpleType( pReturnTypeDescr ))
+ {
+ pUnoReturn = pRegisterReturn; // direct way for simple types
+#ifdef BRDEBUG
+ fprintf(stderr,"cpp2uno_call:simplereturn\n");
+#endif
+ }
+ else // complex return via ptr (pCppReturn)
+ {
+ pCppReturn = *(void **)gpreg;
+ gpreg++;
+ nw++;
+
+ pUnoReturn = (bridges::cpp_uno::shared::relatesToInterfaceType( pReturnTypeDescr )
+ ? alloca( pReturnTypeDescr->nSize )
+ : pCppReturn); // direct way
+#ifdef BRDEBUG
+ fprintf(stderr,"cpp2uno_call:complexreturn\n");
+#endif
+ }
+ }
+
+ // pop this
+ gpreg++;
+ nw++;
+
+ // stack space
+ OSL_ENSURE( sizeof(void *) == sizeof(sal_Int32), "### unexpected size!" );
+ // parameters
+ void ** pUnoArgs = (void **)alloca( 4 * sizeof(void *) * nParams );
+ void ** pCppArgs = pUnoArgs + nParams;
+ // indizes of values this have to be converted (interface conversion cpp<=>uno)
+ sal_Int32 * pTempIndizes = (sal_Int32 *)(pUnoArgs + (2 * nParams));
+ // type descriptions for reconversions
+ typelib_TypeDescription ** ppTempParamTypeDescr = (typelib_TypeDescription **)(pUnoArgs + (3 * nParams));
+
+ sal_Int32 nTempIndizes = 0;
+
+#ifdef BRDEBUG
+ fprintf(stderr,"cpp2uno_call:nParams=%d\n",nParams);
+#endif
+
+ for ( sal_Int32 nPos = 0; nPos < nParams; ++nPos )
+ {
+ const typelib_MethodParameter & rParam = pParams[nPos];
+ typelib_TypeDescription * pParamTypeDescr = 0;
+ TYPELIB_DANGER_GET( &pParamTypeDescr, rParam.pTypeRef );
+
+ if (!rParam.bOut && bridges::cpp_uno::shared::isSimpleType( pParamTypeDescr ))
+ // value
+ {
+
+ switch (pParamTypeDescr->eTypeClass)
+ {
+ case typelib_TypeClass_DOUBLE:
+ case typelib_TypeClass_HYPER:
+ case typelib_TypeClass_UNSIGNED_HYPER:
+#ifdef BRDEBUG
+ fprintf(stderr,"cpp2uno_call:hyper=%d,%p\n",pParamTypeDescr->eTypeClass,gpreg[0]);
+#endif
+ if (nw < 3) {
+ if (nw & 1) {
+ nw++;
+ gpreg++;
+ }
+#ifdef BRDEBUG
+ fprintf(stderr,"cpp2uno_call:gpreg=%p,%p\n",gpreg[0],gpreg[1]);
+#endif
+ pCppArgs[nPos] = gpreg;
+ pUnoArgs[nPos] = gpreg;
+ nw += 2;
+ gpreg += 2;
+ } else {
+ if (((long)ovrflw) & 4) ovrflw++;
+#ifdef BRDEBUG
+ fprintf(stderr,"cpp2uno_call:overflw=%p,%p\n",ovrflw[0],ovrflw[1]);
+#endif
+ pCppArgs[nPos] = ovrflw;
+ pUnoArgs[nPos] = ovrflw;
+ ovrflw += 2;
+ }
+ break;
+
+ case typelib_TypeClass_BYTE:
+ case typelib_TypeClass_BOOLEAN:
+#ifdef BRDEBUG
+ fprintf(stderr,"cpp2uno_call:byte=%p,%p\n",gpreg[0],ovrflw[0]);
+#endif
+ if (nw < 4) {
+ pCppArgs[nPos] = ((char *)gpreg + 3*IS_BIG_ENDIAN);
+ pUnoArgs[nPos] = ((char *)gpreg + 3*IS_BIG_ENDIAN);
+ nw++;
+ gpreg++;
+ } else {
+ pCppArgs[nPos] = ((char *)ovrflw + 3*IS_BIG_ENDIAN);
+ pUnoArgs[nPos] = ((char *)ovrflw + 3*IS_BIG_ENDIAN);
+ ovrflw++;
+ }
+ break;
+
+
+ case typelib_TypeClass_CHAR:
+ case typelib_TypeClass_SHORT:
+ case typelib_TypeClass_UNSIGNED_SHORT:
+#ifdef BRDEBUG
+ fprintf(stderr,"cpp2uno_call:char=%p,%p\n",gpreg[0],ovrflw[0]);
+#endif
+ if (nw < 4) {
+ pCppArgs[nPos] = ((char *)gpreg + 2*IS_BIG_ENDIAN);
+ pUnoArgs[nPos] = ((char *)gpreg + 2*IS_BIG_ENDIAN);
+ nw++;
+ gpreg++;
+ } else {
+ pCppArgs[nPos] = ((char *)ovrflw + 2*IS_BIG_ENDIAN);
+ pUnoArgs[nPos] = ((char *)ovrflw + 2*IS_BIG_ENDIAN);
+ ovrflw++;
+ }
+ break;
+
+
+ default:
+#ifdef BRDEBUG
+ fprintf(stderr,"cpp2uno_call:def=%p,%p\n",gpreg[0],ovrflw[0]);
+#endif
+ if (nw < 4) {
+ pCppArgs[nPos] = gpreg;
+ pUnoArgs[nPos] = gpreg;
+ nw++;
+ gpreg++;
+ } else {
+ pCppArgs[nPos] = ovrflw;
+ pUnoArgs[nPos] = ovrflw;
+ ovrflw++;
+ }
+ break;
+
+ }
+ // no longer needed
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ else // ptr to complex value | ref
+ {
+
+#ifdef BRDEBUG
+ fprintf(stderr,"cpp2uno_call:ptr|ref\n");
+#endif
+ if (nw < 4) {
+ pCppArgs[nPos] = *(void **)gpreg;
+ pCppStack = gpreg;
+ nw++;
+ gpreg++;
+ } else {
+ pCppArgs[nPos] = *(void **)ovrflw;
+ pCppStack = ovrflw;
+ ovrflw++;
+ }
+#ifdef BRDEBUG
+ fprintf(stderr,"cpp2uno_call:pCppStack=%p\n",pCppStack);
+#endif
+
+ if (! rParam.bIn) // is pure out
+ {
+ // uno out is unconstructed mem!
+ pUnoArgs[nPos] = alloca( pParamTypeDescr->nSize );
+ pTempIndizes[nTempIndizes] = nPos;
+ // will be released at reconversion
+ ppTempParamTypeDescr[nTempIndizes++] = pParamTypeDescr;
+ }
+ // is in/inout
+ else if (bridges::cpp_uno::shared::relatesToInterfaceType( pParamTypeDescr ))
+ {
+ uno_copyAndConvertData( pUnoArgs[nPos] = alloca( pParamTypeDescr->nSize ),
+ *(void **)pCppStack, pParamTypeDescr,
+ pThis->getBridge()->getCpp2Uno() );
+ pTempIndizes[nTempIndizes] = nPos; // has to be reconverted
+ // will be released at reconversion
+ ppTempParamTypeDescr[nTempIndizes++] = pParamTypeDescr;
+#ifdef BRDEBUG
+ fprintf(stderr,"cpp2uno_call:related to interface,%p,%d,pUnoargs[%d]=%p\n",*(void**)pCppStack,pParamTypeDescr->nSize,nPos,pUnoArgs[nPos]);
+#endif
+ }
+ else // direct way
+ {
+ pUnoArgs[nPos] = *(void **)pCppStack;
+#ifdef BRDEBUG
+ fprintf(stderr,"cpp2uno_call:direct,pUnoArgs[%d]=%p\n",nPos,pUnoArgs[nPos]);
+#endif
+ // no longer needed
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ }
+ }
+#ifdef BRDEBUG
+ fprintf(stderr,"cpp2uno_call2,%p,unoargs=%p\n",pThis->getUnoI()->pDispatcher,pUnoArgs);
+#endif
+
+ // ExceptionHolder
+ uno_Any aUnoExc; // Any will be constructed by callee
+ uno_Any * pUnoExc = &aUnoExc;
+
+ // invoke uno dispatch call
+ (*pThis->getUnoI()->pDispatcher)( pThis->getUnoI(), pMemberTypeDescr, pUnoReturn, pUnoArgs, &pUnoExc );
+#ifdef BRDEBUG
+ fprintf(stderr,"cpp2uno_call2,after dispatch\n");
+#endif
+
+ // in case an exception occured...
+ if (pUnoExc)
+ {
+ // destruct temporary in/inout params
+ for ( ; nTempIndizes--; )
+ {
+ sal_Int32 nIndex = pTempIndizes[nTempIndizes];
+
+ if (pParams[nIndex].bIn) // is in/inout => was constructed
+ uno_destructData( pUnoArgs[nIndex], ppTempParamTypeDescr[nTempIndizes], 0 );
+ TYPELIB_DANGER_RELEASE( ppTempParamTypeDescr[nTempIndizes] );
+ }
+ if (pReturnTypeDescr)
+ TYPELIB_DANGER_RELEASE( pReturnTypeDescr );
+
+ CPPU_CURRENT_NAMESPACE::raiseException( &aUnoExc, pThis->getBridge()->getUno2Cpp() );
+ // has to destruct the any
+ // is here for dummy
+ return typelib_TypeClass_VOID;
+ }
+ else // else no exception occured...
+ {
+ // temporary params
+ for ( ; nTempIndizes--; )
+ {
+ sal_Int32 nIndex = pTempIndizes[nTempIndizes];
+ typelib_TypeDescription * pParamTypeDescr = ppTempParamTypeDescr[nTempIndizes];
+
+ if (pParams[nIndex].bOut) // inout/out
+ {
+ // convert and assign
+ uno_destructData( pCppArgs[nIndex], pParamTypeDescr, cpp_release );
+ uno_copyAndConvertData( pCppArgs[nIndex], pUnoArgs[nIndex], pParamTypeDescr,
+ pThis->getBridge()->getUno2Cpp() );
+ }
+ // destroy temp uno param
+ uno_destructData( pUnoArgs[nIndex], pParamTypeDescr, 0 );
+
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ // return
+ if (pCppReturn) // has complex return
+ {
+ if (pUnoReturn != pCppReturn) // needs reconversion
+ {
+ uno_copyAndConvertData( pCppReturn, pUnoReturn, pReturnTypeDescr,
+ pThis->getBridge()->getUno2Cpp() );
+ // destroy temp uno return
+ uno_destructData( pUnoReturn, pReturnTypeDescr, 0 );
+ }
+ // complex return ptr is set to return reg
+ *(void **)pRegisterReturn = pCppReturn;
+ }
+ if (pReturnTypeDescr)
+ {
+ typelib_TypeClass eRet = (typelib_TypeClass)pReturnTypeDescr->eTypeClass;
+ TYPELIB_DANGER_RELEASE( pReturnTypeDescr );
+ return eRet;
+ }
+ else
+ return typelib_TypeClass_VOID;
+ }
+ }
+
+
+ //==================================================================================================
+ static typelib_TypeClass cpp_mediate(
+ sal_Int32 nFunctionIndex,
+ sal_Int32 nVtableOffset,
+ void ** gpreg, void ** fpreg, void ** ovrflw,
+ sal_Int64 * pRegisterReturn /* space for register return */ )
+ {
+ OSL_ENSURE( sizeof(sal_Int32)==sizeof(void *), "### unexpected!" );
+
+#ifdef BRDEBUG
+ fprintf(stderr,"cpp_mediate1 gp=%p,fp=%p,ov=%p\n",gpreg,fpreg,ovrflw);
+ fprintf(stderr,"gp=%x,%x,%x,%x\n",gpreg[0],gpreg[1],gpreg[2],gpreg[3]);
+#endif
+
+ // gpreg: [ret *], this, [other gpr params]
+ // fpreg: [fpr params]
+ // ovrflw: [gpr or fpr params (properly aligned)]
+
+ void * pThis;
+ if (nFunctionIndex & 0x80000000 )
+ {
+ nFunctionIndex &= 0x7fffffff;
+ pThis = gpreg[1];
+ }
+ else
+ {
+ pThis = gpreg[0];
+ }
+#ifdef BRDEBUG
+ fprintf(stderr,"cpp_mediate12,pThis=%p, nFunctionIndex=%d,nVtableOffset=%d\n",pThis,nFunctionIndex,nVtableOffset);
+#endif
+
+ pThis = static_cast< char * >(pThis) - nVtableOffset;
+ bridges::cpp_uno::shared::CppInterfaceProxy * pCppI
+ = bridges::cpp_uno::shared::CppInterfaceProxy::castInterfaceToProxy(
+ pThis);
+#ifdef BRDEBUG
+ fprintf(stderr,"cpp_mediate13,pCppI=%p\n",pCppI);
+#endif
+
+ typelib_InterfaceTypeDescription * pTypeDescr = pCppI->getTypeDescr();
+
+#ifdef BRDEBUG
+ fprintf(stderr,"cpp_mediate2\n");
+#endif
+ OSL_ENSURE( nFunctionIndex < pTypeDescr->nMapFunctionIndexToMemberIndex, "### illegal vtable index!" );
+ if (nFunctionIndex >= pTypeDescr->nMapFunctionIndexToMemberIndex)
+ {
+ throw RuntimeException(
+ rtl::OUString::createFromAscii("illegal vtable index!"),
+ (XInterface *)pThis );
+ }
+
+ // determine called method
+ sal_Int32 nMemberPos = pTypeDescr->pMapFunctionIndexToMemberIndex[nFunctionIndex];
+ OSL_ENSURE( nMemberPos < pTypeDescr->nAllMembers, "### illegal member index!" );
+
+ TypeDescription aMemberDescr( pTypeDescr->ppAllMembers[nMemberPos] );
+
+#ifdef BRDEBUG
+ fprintf(stderr,"cpp_mediate3\n");
+ OString cstr( OUStringToOString( aMemberDescr.get()->pTypeName, RTL_TEXTENCODING_ASCII_US ) );
+ fprintf( stderr, "calling %s, nFunctionIndex=%d\n", cstr.getStr(), nFunctionIndex );
+#endif
+ typelib_TypeClass eRet;
+ switch (aMemberDescr.get()->eTypeClass)
+ {
+ case typelib_TypeClass_INTERFACE_ATTRIBUTE:
+ {
+#ifdef BRDEBUG
+ fprintf(stderr,"cpp_mediate4\n");
+#endif
+ if (pTypeDescr->pMapMemberIndexToFunctionIndex[nMemberPos] == nFunctionIndex)
+ {
+ // is GET method
+ eRet = cpp2uno_call(
+ pCppI, aMemberDescr.get(),
+ ((typelib_InterfaceAttributeTypeDescription *)aMemberDescr.get())->pAttributeTypeRef,
+ 0, 0, // no params
+ gpreg, fpreg, ovrflw, pRegisterReturn );
+ }
+ else
+ {
+ // is SET method
+ typelib_MethodParameter aParam;
+ aParam.pTypeRef =
+ ((typelib_InterfaceAttributeTypeDescription *)aMemberDescr.get())->pAttributeTypeRef;
+ aParam.bIn = sal_True;
+ aParam.bOut = sal_False;
+
+ eRet = cpp2uno_call(
+ pCppI, aMemberDescr.get(),
+ 0, // indicates void return
+ 1, &aParam,
+ gpreg, fpreg, ovrflw, pRegisterReturn );
+ }
+ break;
+ }
+ case typelib_TypeClass_INTERFACE_METHOD:
+ {
+#ifdef BRDEBUG
+ fprintf(stderr,"cpp_mediate5\n");
+#endif
+ // is METHOD
+ switch (nFunctionIndex)
+ {
+ case 1: // acquire()
+ pCppI->acquireProxy(); // non virtual call!
+ eRet = typelib_TypeClass_VOID;
+ break;
+ case 2: // release()
+#ifdef BRDEBUG
+ fprintf(stderr,"cpp_mediate51\n");
+#endif
+ pCppI->releaseProxy(); // non virtual call!
+ eRet = typelib_TypeClass_VOID;
+#ifdef BRDEBUG
+ fprintf(stderr,"cpp_mediate52\n");
+#endif
+ break;
+ case 0: // queryInterface() opt
+ {
+ typelib_TypeDescription * pTD = 0;
+ TYPELIB_DANGER_GET( &pTD, reinterpret_cast< Type * >( gpreg[2] )->getTypeLibType() );
+ if (pTD)
+ {
+ XInterface * pInterface = 0;
+ (*pCppI->getBridge()->getCppEnv()->getRegisteredInterface)(
+ pCppI->getBridge()->getCppEnv(),
+ (void **)&pInterface, pCppI->getOid().pData,
+ (typelib_InterfaceTypeDescription *)pTD );
+
+ if (pInterface)
+ {
+ ::uno_any_construct(
+ reinterpret_cast< uno_Any * >( gpreg[0] ),
+ &pInterface, pTD, cpp_acquire );
+ pInterface->release();
+ TYPELIB_DANGER_RELEASE( pTD );
+ *(void **)pRegisterReturn = gpreg[0];
+ eRet = typelib_TypeClass_ANY;
+ break;
+ }
+ TYPELIB_DANGER_RELEASE( pTD );
+ }
+ } // else perform queryInterface()
+ default:
+ eRet = cpp2uno_call(
+ pCppI, aMemberDescr.get(),
+ ((typelib_InterfaceMethodTypeDescription *)aMemberDescr.get())->pReturnTypeRef,
+ ((typelib_InterfaceMethodTypeDescription *)aMemberDescr.get())->nParams,
+ ((typelib_InterfaceMethodTypeDescription *)aMemberDescr.get())->pParams,
+ gpreg, fpreg, ovrflw, pRegisterReturn );
+ }
+ break;
+ }
+ default:
+ {
+#ifdef BRDEBUG
+ fprintf(stderr,"cpp_mediate6\n");
+#endif
+ throw RuntimeException(
+ rtl::OUString::createFromAscii("no member description found!"),
+ (XInterface *)pThis );
+ // is here for dummy
+ eRet = typelib_TypeClass_VOID;
+ }
+ }
+
+ return eRet;
+ }
+
+ //==================================================================================================
+ /**
+ * is called on incoming vtable calls
+ * (called by asm snippets)
+ */
+// static void cpp_vtable_call( int nFunctionIndex, int nVtableOffset, void** gpregptr, void** fpregptr, void** ovrflw)
+// static void cpp_vtable_call( int nFunctionIndex, int nVtableOffset, void** gpregptr, void** ovrflw)
+ static void cpp_vtable_call(void)
+ {
+ int nFunctionIndex;
+ int vTableOffset;
+ void** pCallStack;
+ void** ovrflw;
+
+ sal_Int32 gpreg[4];
+ double fpreg[2];
+
+ //memcpy( fpreg, fpregptr, 16);
+
+ volatile long nRegReturn[2];
+
+ __asm__( "sw $4, %0\n\t"
+ "sw $5, %1\n\t"
+ "sw $6, %2\n\t"
+ "sw $7, %3\n\t"
+ ::"m"(nFunctionIndex), "m"(vTableOffset), "m"(pCallStack), "m"(ovrflw) );
+
+ memcpy( gpreg, pCallStack, 16);
+
+#ifdef BRDEBUG
+ fprintf(stderr,"in cpp_vtable_call nFunctionIndex is %d\n",nFunctionIndex);
+ fprintf(stderr,"in cpp_vtable_call nVtableOffset is %d\n",vTableOffset);
+ fprintf(stderr,"gp=%x,%x,%x,%x\n",gpreg[0],gpreg[1],gpreg[2],gpreg[3]);
+#endif
+
+ //sal_Bool bComplex = nFunctionIndex & 0x80000000 ? sal_True : sal_False;
+
+ typelib_TypeClass aType =
+ cpp_mediate( nFunctionIndex, vTableOffset, (void**)gpreg, (void**)fpreg, ovrflw, (sal_Int64*)nRegReturn );
+
+ switch( aType )
+ {
+
+ // move return value into register space
+ // (will be loaded by machine code snippet)
+
+ case typelib_TypeClass_BOOLEAN:
+ case typelib_TypeClass_BYTE:
+ __asm__( "lbu $2,%0\n\t" : :
+ "m"(nRegReturn[0]) );
+ break;
+
+ case typelib_TypeClass_CHAR:
+ case typelib_TypeClass_UNSIGNED_SHORT:
+ __asm__( "lhu $2,%0\n\t" : :
+ "m"(nRegReturn[0]) );
+ break;
+
+ case typelib_TypeClass_SHORT:
+ __asm__( "lh $2,%0\n\t" : :
+ "m"(nRegReturn[0]) );
+ break;
+
+
+ case typelib_TypeClass_FLOAT:
+ __asm__( "lwc1 $f0,%0\n\t" : :
+ "m" (*((float*)nRegReturn)) );
+ break;
+
+ case typelib_TypeClass_DOUBLE:
+ { register double dret asm("$f0");
+ dret = (*((double*)nRegReturn)); }
+ break;
+
+ case typelib_TypeClass_HYPER:
+ case typelib_TypeClass_UNSIGNED_HYPER:
+ __asm__( "lw $3,%0\n\t" : :
+ "m"(nRegReturn[1]) ); // fall through
+
+ default:
+ __asm__( "lw $2,%0\n\t" : :
+ "m"(nRegReturn[0]) );
+ break;
+ }
+ }
+
+
+ int const codeSnippetSize = 56;
+
+ unsigned char * codeSnippet( unsigned char * code, sal_Int32 functionIndex, sal_Int32 vtableOffset,
+ bool simpleRetType)
+ {
+
+#ifdef BRDEBUG
+ fprintf(stderr,"in codeSnippet functionIndex is %d\n", functionIndex);
+ fprintf(stderr,"in codeSnippet vtableOffset is %d\n", vtableOffset);
+ fflush(stderr);
+#endif
+
+ if (! simpleRetType )
+ functionIndex |= 0x80000000;
+
+ unsigned long * p = (unsigned long *) code;
+
+ // OSL_ASSERT( sizeof (long) == 4 );
+ OSL_ASSERT((((unsigned long)code) & 0x3) == 0 ); //aligned to 4 otherwise a mistake
+
+ /* generate this code */
+ /*
+ #save regs into argument space required by mips abi
+ c: afa40000 sw a0,0(sp)
+ 10: afa50004 sw a1,4(sp)
+ 14: afa60008 sw a2,8(sp)
+ 18: afa7000c sw a3,12(sp)
+ #a0=index
+ 1c: 3c040000 lui a0,0x0
+ 20: 34840000 ori a0,a0,0x0
+ #a1=offset
+ 24: 3c050000 lui a1,0x0
+ 28: 34a50000 ori a1,a1,0x0
+ #a2=gpregptr
+ 2c: 27a60000 addiu a2,sp,0
+ #a3=ovrflw
+ 30: 27a70010 addiu a3,sp,16
+ #load cpp_vtable_call addr
+ 34: 3c190000 lui t9,0x0
+ 38: 37390000 ori t9,t9,0
+ #jmp to the function,note: we don't use jalr, that will destroy $ra
+ #but be sure to use t9! gp calculation depends on it
+ 3c: 03200008 jr t9
+ 40: 00000000 nop
+
+ be careful, we use the argument space reserved by the caller to
+ write down regs. This can avoid the need to make use of arbitary far away
+ stack space or to allocate a function frame for this code snippet itself.
+ Since only functions with variable arguments will overwrite the space,
+ cpp_vtable_call should be safe.
+ ??? gcc seems change this behavior! cpp_vtable_call overwrite the space!
+ */
+
+ * p++ = 0xafa40000;
+ * p++ = 0xafa50004;
+ * p++ = 0xafa60008;
+ * p++ = 0xafa7000c;
+ * p++ = 0x3c040000 | ((functionIndex>>16) & 0x0000ffff);
+ * p++ = 0x34840000 | (functionIndex & 0x0000ffff);
+ * p++ = 0x3c050000 | ((vtableOffset>>16) & 0x0000ffff);
+ * p++ = 0x34a50000 | (vtableOffset & 0x0000ffff);
+ * p++ = 0x27a60000;
+ * p++ = 0x27a70010;
+ * p++ = 0x3c190000 | ((((unsigned long)cpp_vtable_call) >> 16) & 0x0000ffff);
+ * p++ = 0x37390000 | (((unsigned long)cpp_vtable_call) & 0x0000FFFF);
+ * p++ = 0x03200008;
+ * p++ = 0x00000000;
+ return (code + codeSnippetSize);
+
+ }
+
+
+}
+
+
+#define MIN_LINE_SIZE 32
+
+void bridges::cpp_uno::shared::VtableFactory::flushCode(unsigned char const * /*bptr*/, unsigned char const * /*eptr*/)
+{
+ sysmips(FLUSH_CACHE,0,0,0);
+}
+
+struct bridges::cpp_uno::shared::VtableFactory::Slot { void * fn; };
+
+bridges::cpp_uno::shared::VtableFactory::Slot *
+bridges::cpp_uno::shared::VtableFactory::mapBlockToVtable(void * block)
+{
+ return static_cast< Slot * >(block) + 2;
+}
+
+
+sal_Size bridges::cpp_uno::shared::VtableFactory::getBlockSize(
+ sal_Int32 slotCount)
+{
+ return (slotCount + 2) * sizeof (Slot) + slotCount * codeSnippetSize;
+}
+
+bridges::cpp_uno::shared::VtableFactory::Slot *
+bridges::cpp_uno::shared::VtableFactory::initializeBlock(
+ void * block, sal_Int32 slotCount)
+{
+ Slot * slots = mapBlockToVtable(block);
+ slots[-2].fn = 0; //null
+ slots[-1].fn = 0; //destructor
+ return slots + slotCount;
+}
+
+unsigned char * bridges::cpp_uno::shared::VtableFactory::addLocalFunctions(
+ Slot ** slots, unsigned char * code, sal_PtrDiff writetoexecdiff,
+ typelib_InterfaceTypeDescription const * type, sal_Int32 functionOffset,
+ sal_Int32 functionCount, sal_Int32 vtableOffset)
+{
+ (*slots) -= functionCount;
+ Slot * s = *slots;
+#ifdef BRDEBUG
+ fprintf(stderr, "in addLocalFunctions functionOffset is %d\n",functionOffset);
+ fprintf(stderr, "in addLocalFunctions vtableOffset is %d\n",vtableOffset);
+ fprintf(stderr, "nMembers=%d\n",type->nMembers);
+ fflush(stderr);
+#endif
+
+ for (sal_Int32 i = 0; i < type->nMembers; ++i) {
+ typelib_TypeDescription * member = 0;
+ TYPELIB_DANGER_GET(&member, type->ppMembers[i]);
+ OSL_ASSERT(member != 0);
+ switch (member->eTypeClass) {
+ case typelib_TypeClass_INTERFACE_ATTRIBUTE:
+ // Getter:
+ (s++)->fn = code + writetoexecdiff;
+ code = codeSnippet(
+ code, functionOffset++, vtableOffset,
+ bridges::cpp_uno::shared::isSimpleType(
+ reinterpret_cast<
+ typelib_InterfaceAttributeTypeDescription * >(
+ member)->pAttributeTypeRef));
+
+ // Setter:
+ if (!reinterpret_cast<
+ typelib_InterfaceAttributeTypeDescription * >(
+ member)->bReadOnly)
+ {
+ (s++)->fn = code + writetoexecdiff;
+ code = codeSnippet(code, functionOffset++, vtableOffset, true);
+ }
+ break;
+
+ case typelib_TypeClass_INTERFACE_METHOD:
+ (s++)->fn = code + writetoexecdiff;
+ code = codeSnippet(
+ code, functionOffset++, vtableOffset,
+ bridges::cpp_uno::shared::isSimpleType(
+ reinterpret_cast<
+ typelib_InterfaceMethodTypeDescription * >(
+ member)->pReturnTypeRef));
+ break;
+
+ default:
+ OSL_ASSERT(false);
+ break;
+ }
+ TYPELIB_DANGER_RELEASE(member);
+ }
+ return code;
+}
+
diff --git a/bridges/source/cpp_uno/gcc3_linux_mips/except.cxx b/bridges/source/cpp_uno/gcc3_linux_mips/except.cxx
new file mode 100644
index 000000000000..99cf6df8fed8
--- /dev/null
+++ b/bridges/source/cpp_uno/gcc3_linux_mips/except.cxx
@@ -0,0 +1,325 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#include <stdio.h>
+#include <string.h>
+#include <dlfcn.h>
+#include <cxxabi.h>
+#include <hash_map>
+
+#include <rtl/strbuf.hxx>
+#include <rtl/ustrbuf.hxx>
+#include <osl/diagnose.h>
+#include <osl/mutex.hxx>
+
+#include <com/sun/star/uno/genfunc.hxx>
+#include <typelib/typedescription.hxx>
+#include <uno/any2.h>
+
+#include "share.hxx"
+
+
+using namespace ::std;
+using namespace ::osl;
+using namespace ::rtl;
+using namespace ::com::sun::star::uno;
+using namespace ::__cxxabiv1;
+
+
+namespace CPPU_CURRENT_NAMESPACE
+{
+
+void dummy_can_throw_anything( char const * )
+{
+}
+
+//==================================================================================================
+static OUString toUNOname( char const * p ) SAL_THROW( () )
+{
+#if defined BRIDGES_DEBUG
+ char const * start = p;
+#endif
+
+ // example: N3com3sun4star4lang24IllegalArgumentExceptionE
+
+ OUStringBuffer buf( 64 );
+ OSL_ASSERT( 'N' == *p );
+ ++p; // skip N
+
+ while ('E' != *p)
+ {
+ // read chars count
+ long n = (*p++ - '0');
+ while ('0' <= *p && '9' >= *p)
+ {
+ n *= 10;
+ n += (*p++ - '0');
+ }
+ buf.appendAscii( p, n );
+ p += n;
+ if ('E' != *p)
+ buf.append( (sal_Unicode)'.' );
+ }
+
+#if defined BRIDGES_DEBUG
+ OUString ret( buf.makeStringAndClear() );
+ OString c_ret( OUStringToOString( ret, RTL_TEXTENCODING_ASCII_US ) );
+ fprintf( stderr, "> toUNOname(): %s => %s\n", start, c_ret.getStr() );
+ return ret;
+#else
+ return buf.makeStringAndClear();
+#endif
+}
+
+//==================================================================================================
+class RTTI
+{
+ typedef hash_map< OUString, type_info *, OUStringHash > t_rtti_map;
+
+ Mutex m_mutex;
+ t_rtti_map m_rttis;
+ t_rtti_map m_generatedRttis;
+
+ void * m_hApp;
+
+public:
+ RTTI() SAL_THROW( () );
+ ~RTTI() SAL_THROW( () );
+
+ type_info * getRTTI( typelib_CompoundTypeDescription * ) SAL_THROW( () );
+};
+//__________________________________________________________________________________________________
+RTTI::RTTI() SAL_THROW( () )
+ : m_hApp( dlopen( 0, RTLD_LAZY ) )
+{
+}
+//__________________________________________________________________________________________________
+RTTI::~RTTI() SAL_THROW( () )
+{
+ dlclose( m_hApp );
+}
+
+//__________________________________________________________________________________________________
+type_info * RTTI::getRTTI( typelib_CompoundTypeDescription *pTypeDescr ) SAL_THROW( () )
+{
+ type_info * rtti;
+
+ OUString const & unoName = *(OUString const *)&pTypeDescr->aBase.pTypeName;
+
+ MutexGuard guard( m_mutex );
+ t_rtti_map::const_iterator iRttiFind( m_rttis.find( unoName ) );
+ if (iRttiFind == m_rttis.end())
+ {
+ // RTTI symbol
+ OStringBuffer buf( 64 );
+ buf.append( RTL_CONSTASCII_STRINGPARAM("_ZTIN") );
+ sal_Int32 index = 0;
+ do
+ {
+ OUString token( unoName.getToken( 0, '.', index ) );
+ buf.append( token.getLength() );
+ OString c_token( OUStringToOString( token, RTL_TEXTENCODING_ASCII_US ) );
+ buf.append( c_token );
+ }
+ while (index >= 0);
+ buf.append( 'E' );
+
+ OString symName( buf.makeStringAndClear() );
+ rtti = (type_info *)dlsym( m_hApp, symName.getStr() );
+
+ if (rtti)
+ {
+ pair< t_rtti_map::iterator, bool > insertion(
+ m_rttis.insert( t_rtti_map::value_type( unoName, rtti ) ) );
+ OSL_ENSURE( insertion.second, "### inserting new rtti failed?!" );
+ }
+ else
+ {
+ // try to lookup the symbol in the generated rtti map
+ t_rtti_map::const_iterator iFind( m_generatedRttis.find( unoName ) );
+ if (iFind == m_generatedRttis.end())
+ {
+ // we must generate it !
+ // symbol and rtti-name is nearly identical,
+ // the symbol is prefixed with _ZTI
+ char const * rttiName = symName.getStr() +4;
+#if defined BRIDGES_DEBUG
+ fprintf( stderr,"generated rtti for %s\n", rttiName );
+#endif
+ if (pTypeDescr->pBaseTypeDescription)
+ {
+ // ensure availability of base
+ type_info * base_rtti = getRTTI(
+ (typelib_CompoundTypeDescription *)pTypeDescr->pBaseTypeDescription );
+ rtti = new __si_class_type_info(
+ strdup( rttiName ), (__class_type_info *)base_rtti );
+ }
+ else
+ {
+ // this class has no base class
+ rtti = new __class_type_info( strdup( rttiName ) );
+ }
+
+ pair< t_rtti_map::iterator, bool > insertion(
+ m_generatedRttis.insert( t_rtti_map::value_type( unoName, rtti ) ) );
+ OSL_ENSURE( insertion.second, "### inserting new generated rtti failed?!" );
+ }
+ else // taking already generated rtti
+ {
+ rtti = iFind->second;
+ }
+ }
+ }
+ else
+ {
+ rtti = iRttiFind->second;
+ }
+
+ return rtti;
+}
+
+//--------------------------------------------------------------------------------------------------
+static void deleteException( void * pExc )
+{
+ __cxa_exception const * header = ((__cxa_exception const *)pExc - 1);
+ typelib_TypeDescription * pTD = 0;
+ OUString unoName( toUNOname( header->exceptionType->name() ) );
+ ::typelib_typedescription_getByName( &pTD, unoName.pData );
+ OSL_ENSURE( pTD, "### unknown exception type! leaving out destruction => leaking!!!" );
+ if (pTD)
+ {
+ ::uno_destructData( pExc, pTD, cpp_release );
+ ::typelib_typedescription_release( pTD );
+ }
+}
+
+//==================================================================================================
+void raiseException( uno_Any * pUnoExc, uno_Mapping * pUno2Cpp )
+{
+#if defined BRIDGES_DEBUG
+ OString cstr(
+ OUStringToOString(
+ *reinterpret_cast< OUString const * >( &pUnoExc->pType->pTypeName ),
+ RTL_TEXTENCODING_ASCII_US ) );
+ fprintf( stderr, "> uno exception occured: %s\n", cstr.getStr() );
+#endif
+ void * pCppExc;
+ type_info * rtti;
+
+ {
+ // construct cpp exception object
+ typelib_TypeDescription * pTypeDescr = 0;
+ TYPELIB_DANGER_GET( &pTypeDescr, pUnoExc->pType );
+ OSL_ASSERT( pTypeDescr );
+ if (! pTypeDescr)
+ {
+ throw RuntimeException(
+ OUString( RTL_CONSTASCII_USTRINGPARAM("cannot get typedescription for type ") ) +
+ *reinterpret_cast< OUString const * >( &pUnoExc->pType->pTypeName ),
+ Reference< XInterface >() );
+ }
+
+ pCppExc = __cxa_allocate_exception( pTypeDescr->nSize );
+ ::uno_copyAndConvertData( pCppExc, pUnoExc->pData, pTypeDescr, pUno2Cpp );
+
+ // destruct uno exception
+ ::uno_any_destruct( pUnoExc, 0 );
+ // avoiding locked counts
+ static RTTI * s_rtti = 0;
+ if (! s_rtti)
+ {
+ MutexGuard guard( Mutex::getGlobalMutex() );
+ if (! s_rtti)
+ {
+#ifdef LEAK_STATIC_DATA
+ s_rtti = new RTTI();
+#else
+ static RTTI rtti_data;
+ s_rtti = &rtti_data;
+#endif
+ }
+ }
+ rtti = (type_info *)s_rtti->getRTTI( (typelib_CompoundTypeDescription *) pTypeDescr );
+ TYPELIB_DANGER_RELEASE( pTypeDescr );
+ OSL_ENSURE( rtti, "### no rtti for throwing exception!" );
+ if (! rtti)
+ {
+ throw RuntimeException(
+ OUString( RTL_CONSTASCII_USTRINGPARAM("no rtti for type ") ) +
+ *reinterpret_cast< OUString const * >( &pUnoExc->pType->pTypeName ),
+ Reference< XInterface >() );
+ }
+ }
+
+ __cxa_throw( pCppExc, rtti, deleteException );
+}
+
+//==================================================================================================
+void fillUnoException( __cxa_exception * header, uno_Any * pUnoExc, uno_Mapping * pCpp2Uno )
+{
+ if (! header)
+ {
+ RuntimeException aRE(
+ OUString( RTL_CONSTASCII_USTRINGPARAM("no exception header!") ),
+ Reference< XInterface >() );
+ Type const & rType = ::getCppuType( &aRE );
+ uno_type_any_constructAndConvert( pUnoExc, &aRE, rType.getTypeLibType(), pCpp2Uno );
+#if defined _DEBUG
+ OString cstr( OUStringToOString( aRE.Message, RTL_TEXTENCODING_ASCII_US ) );
+ OSL_ENSURE( 0, cstr.getStr() );
+#endif
+ return;
+ }
+
+ typelib_TypeDescription * pExcTypeDescr = 0;
+ OUString unoName( toUNOname( header->exceptionType->name() ) );
+#if defined BRIDGES_DEBUG
+ OString cstr_unoName( OUStringToOString( unoName, RTL_TEXTENCODING_ASCII_US ) );
+ fprintf( stderr, "> c++ exception occured: %s\n", cstr_unoName.getStr() );
+#endif
+ typelib_typedescription_getByName( &pExcTypeDescr, unoName.pData );
+ if (0 == pExcTypeDescr)
+ {
+ RuntimeException aRE(
+ OUString( RTL_CONSTASCII_USTRINGPARAM("exception type not found: ") ) + unoName,
+ Reference< XInterface >() );
+ Type const & rType = ::getCppuType( &aRE );
+ uno_type_any_constructAndConvert( pUnoExc, &aRE, rType.getTypeLibType(), pCpp2Uno );
+#if defined _DEBUG
+ OString cstr( OUStringToOString( aRE.Message, RTL_TEXTENCODING_ASCII_US ) );
+ OSL_ENSURE( 0, cstr.getStr() );
+#endif
+ }
+ else
+ {
+ // construct uno exception any
+ uno_any_constructAndConvert( pUnoExc, header->adjustedPtr, pExcTypeDescr, pCpp2Uno );
+ typelib_typedescription_release( pExcTypeDescr );
+ }
+}
+
+}
+
diff --git a/bridges/source/cpp_uno/gcc3_linux_mips/makefile.mk b/bridges/source/cpp_uno/gcc3_linux_mips/makefile.mk
new file mode 100644
index 000000000000..c71849f06ea9
--- /dev/null
+++ b/bridges/source/cpp_uno/gcc3_linux_mips/makefile.mk
@@ -0,0 +1,81 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+PRJ=..$/..$/..
+
+PRJNAME=bridges
+TARGET=gcc3_uno
+LIBTARGET=no
+ENABLE_EXCEPTIONS=TRUE
+NO_BSYMBOLIC=TRUE
+
+# --- Settings -----------------------------------------------------
+
+.INCLUDE : settings.mk
+
+# --- Files --------------------------------------------------------
+
+.IF "$(COM)$(OS)$(CPU)" == "GCCLINUXM"
+
+.IF "$(cppu_no_leak)" == ""
+CFLAGS += -DLEAK_STATIC_DATA
+.ENDIF
+
+# In case someone enabled the non-standard -fomit-frame-pointer which does not
+# work with the .cxx sources in this directory:
+CFLAGSCXX += -fno-omit-frame-pointer
+
+CFLAGSNOOPT=-O0
+
+NOOPTFILES = \
+ $(SLO)$/uno2cpp.obj \
+ $(SLO)$/cpp2uno.obj
+
+SLOFILES= \
+ $(SLO)$/except.obj \
+ $(SLO)$/cpp2uno.obj \
+ $(SLO)$/uno2cpp.obj
+
+
+SHL1TARGET=$(TARGET)
+
+SHL1DEF=$(MISC)$/$(SHL1TARGET).def
+SHL1IMPLIB=i$(TARGET)
+SHL1VERSIONMAP=..$/..$/bridge_exports.map
+
+SHL1OBJS= $(SLOFILES)
+SHL1LIBS =$(SLB)$/cpp_uno_shared.lib
+
+SHL1STDLIBS= \
+ $(CPPULIB) \
+ $(SALLIB)
+
+.ENDIF
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : target.mk
+
diff --git a/bridges/source/cpp_uno/gcc3_linux_mips/share.hxx b/bridges/source/cpp_uno/gcc3_linux_mips/share.hxx
new file mode 100644
index 000000000000..6e148b489508
--- /dev/null
+++ b/bridges/source/cpp_uno/gcc3_linux_mips/share.hxx
@@ -0,0 +1,91 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "uno/mapping.h"
+
+#include <typeinfo>
+#include <exception>
+#include <cstddef>
+
+namespace CPPU_CURRENT_NAMESPACE
+{
+
+ void dummy_can_throw_anything( char const * );
+
+
+// ----- following decl from libstdc++-v3/libsupc++/unwind-cxx.h and unwind.h
+
+struct _Unwind_Exception
+{
+ unsigned exception_class __attribute__((__mode__(__DI__)));
+ void * exception_cleanup;
+ unsigned private_1 __attribute__((__mode__(__word__)));
+ unsigned private_2 __attribute__((__mode__(__word__)));
+} __attribute__((__aligned__));
+
+struct __cxa_exception
+{
+ ::std::type_info *exceptionType;
+ void (*exceptionDestructor)(void *);
+
+ ::std::unexpected_handler unexpectedHandler;
+ ::std::terminate_handler terminateHandler;
+
+ __cxa_exception *nextException;
+
+ int handlerCount;
+
+ int handlerSwitchValue;
+ const unsigned char *actionRecord;
+ const unsigned char *languageSpecificData;
+ void *catchTemp;
+ void *adjustedPtr;
+
+ _Unwind_Exception unwindHeader;
+};
+
+extern "C" void *__cxa_allocate_exception(
+ std::size_t thrown_size ) throw();
+extern "C" void __cxa_throw (
+ void *thrown_exception, std::type_info *tinfo, void (*dest) (void *) ) __attribute__((noreturn));
+
+struct __cxa_eh_globals
+{
+ __cxa_exception *caughtExceptions;
+ unsigned int uncaughtExceptions;
+};
+extern "C" __cxa_eh_globals *__cxa_get_globals () throw();
+
+// -----
+
+//==================================================================================================
+void raiseException(
+ uno_Any * pUnoExc, uno_Mapping * pUno2Cpp );
+//==================================================================================================
+void fillUnoException(
+ __cxa_exception * header, uno_Any *, uno_Mapping * pCpp2Uno );
+}
diff --git a/bridges/source/cpp_uno/gcc3_linux_mips/uno2cpp.cxx b/bridges/source/cpp_uno/gcc3_linux_mips/uno2cpp.cxx
new file mode 100644
index 000000000000..746d43520a73
--- /dev/null
+++ b/bridges/source/cpp_uno/gcc3_linux_mips/uno2cpp.cxx
@@ -0,0 +1,597 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <malloc.h>
+
+#include <com/sun/star/uno/genfunc.hxx>
+#include <uno/data.h>
+
+#include "bridges/cpp_uno/shared/bridge.hxx"
+#include "bridges/cpp_uno/shared/types.hxx"
+#include "bridges/cpp_uno/shared/unointerfaceproxy.hxx"
+#include "bridges/cpp_uno/shared/vtables.hxx"
+
+#include "share.hxx"
+
+//#define BRDEBUG
+#ifdef BRDEBUG
+#include <stdio.h>
+#endif
+
+
+using namespace ::rtl;
+using namespace ::com::sun::star::uno;
+
+namespace
+{
+
+
+ //==================================================================================================
+ static void callVirtualMethod(
+ void * pAdjustedThisPtr,
+ sal_Int32 nVtableIndex,
+ void * pRegisterReturn,
+ typelib_TypeClass eReturnType,
+ char * pPT,
+ sal_Int32 * pStackLongs,
+ sal_Int32 /*nStackLongs*/)
+ {
+
+ // parameter list is mixed list of * and values
+ // reference parameters are pointers
+
+ unsigned long * mfunc; // actual function to be invoked
+ void (*ptr)();
+ int gpr[4]; // storage for gpregisters, map to a0-a3
+ int off; // offset used to find function
+ int nw; // number of words mapped
+ long *p; // pointer to parameter overflow area
+ int c; // character of parameter type being decoded
+ int iret, iret2; // temporary function return values
+
+ // never called
+ if (! pAdjustedThisPtr ) CPPU_CURRENT_NAMESPACE::dummy_can_throw_anything("xxx"); // address something
+
+#ifdef BRDEBUG
+ fprintf(stderr,"in CallVirtualMethod\n");
+#endif
+
+ // Because of the MIPS O32 calling conventions we could be passing
+ // parameters in both register types and on the stack. To create the
+ // stack parameter area we need we now simply allocate local
+ // variable storage param[] that is at least the size of the parameter stack
+ // (more than enough space) which we can overwrite the parameters into.
+
+ /* p = sp - 512; new sp will be p - 16, but we don't change sp
+ * at this time to avoid breaking ABI--not sure whether changing sp will break
+ * references to local variables. For the same reason, we use abosulte value.
+ */
+ __asm__ __volatile__ (
+ "addiu $2,$29,-512\n\t"
+ "move %0,$2\n\t"
+ :"=r"(p): : "$2","$29" );
+
+#ifdef BRDEBUG
+ if (nStackLongs * 4 > 512 )
+ fprintf(stderr,"too many arguments");
+#endif
+
+ // now begin to load the C++ function arguments into storage
+ nw = 0;
+
+ // now we need to parse the entire signature string */
+ // until we get the END indicator */
+
+ // treat complex return pointer like any other parameter //
+
+#ifdef BRDEBUG
+ fprintf(stderr,"overflow area pointer p=%p\n",p);
+
+ /* Let's figure out what is really going on here*/
+ fprintf(stderr,"callVirtualMethod paramters string is %s\n",pPT);
+ int k = nStackLongs;
+ long * q = (long *)pStackLongs;
+ while (k > 0) {
+ fprintf(stderr,"uno stack is: %x\n",(unsigned int)*q);
+ k--;
+ q++;
+ }
+#endif
+
+ /* parse the argument list up to the ending ) */
+ while (*pPT != 'X') {
+ c = *pPT;
+ switch (c) {
+ case 'D': /* type is double */
+ /* treat the same as long long */
+ case 'H': /* type is long long */
+ if (nw & 1) nw++; /* note even elements gpr[] will map to
+ odd registers*/
+ if (nw < 4) {
+ gpr[nw++] = *pStackLongs;
+ gpr[nw++] = *(pStackLongs+1);
+ } else {
+ if (((long) p) & 4)
+ p++;
+ *p++ = *pStackLongs;
+ *p++ = *(pStackLongs+1);
+ }
+ pStackLongs += 2;
+ break;
+
+ case 'S':
+ if (nw < 4) {
+ gpr[nw++] = *((unsigned short*)pStackLongs);
+ } else {
+ *p++ = *((unsigned short *)pStackLongs);
+ }
+ pStackLongs += 1;
+ break;
+
+ case 'B':
+ if (nw < 4) {
+ gpr[nw++] = *((char *)pStackLongs);
+ } else {
+ *p++ = *((char *)pStackLongs);
+ }
+ pStackLongs += 1;
+ break;
+
+ default:
+ if (nw < 4) {
+ gpr[nw++] = *pStackLongs;
+ } else {
+ *p++ = *pStackLongs;
+ }
+ pStackLongs += 1;
+ break;
+ }
+ pPT++;
+ }
+
+ /* figure out the address of the function we need to invoke */
+ off = nVtableIndex;
+ off = off * 4; // 4 bytes per slot
+ mfunc = *((unsigned long **)pAdjustedThisPtr); // get the address of the vtable
+ mfunc = (unsigned long *)((char *)mfunc + off); // get the address from the vtable entry at offset
+ mfunc = *((unsigned long **)mfunc); // the function is stored at the address
+ ptr = (void (*)())mfunc;
+
+#ifdef BRDEBUG
+ fprintf(stderr,"calling function %p\n",mfunc);
+#endif
+
+ /* Set up the machine registers and invoke the function */
+
+ __asm__ __volatile__ (
+ "lw $4, 0(%0)\n\t"
+ "lw $5, 4(%0)\n\t"
+ "lw $6, 8(%0)\n\t"
+ "lw $7, 12(%0)\n\t"
+ : : "r" (gpr)
+ : "$4", "$5", "$6", "$7"
+ );
+
+ __asm__ __volatile__ ("addiu $29,$29,-528\r\n":::"$29");
+
+ (*ptr)();
+
+ __asm__ __volatile__ ("addiu $29,$29,528\r\n":::"$29");
+
+ __asm__ __volatile__ (
+ "sw $2,%0 \n\t"
+ "sw $3,%1 \n\t"
+ : "=m" (iret), "=m" (iret2) : );
+ register float fret asm("$f0");
+ register double dret asm("$f0");
+
+ switch( eReturnType )
+ {
+ case typelib_TypeClass_HYPER:
+ case typelib_TypeClass_UNSIGNED_HYPER:
+ ((long*)pRegisterReturn)[1] = iret2; // fall through
+ case typelib_TypeClass_LONG:
+ case typelib_TypeClass_UNSIGNED_LONG:
+ case typelib_TypeClass_ENUM:
+ ((long*)pRegisterReturn)[0] = iret;
+ break;
+ case typelib_TypeClass_CHAR:
+ case typelib_TypeClass_SHORT:
+ case typelib_TypeClass_UNSIGNED_SHORT:
+ *(unsigned short*)pRegisterReturn = (unsigned short)iret;
+ break;
+ case typelib_TypeClass_BOOLEAN:
+ case typelib_TypeClass_BYTE:
+ *(unsigned char*)pRegisterReturn = (unsigned char)iret;
+ break;
+ case typelib_TypeClass_FLOAT:
+ *(float*)pRegisterReturn = fret;
+ break;
+ case typelib_TypeClass_DOUBLE:
+ *(double*)pRegisterReturn = dret;
+ break;
+ default:
+ break;
+ }
+ }
+
+
+ //==================================================================================================
+ static void cpp_call(
+ bridges::cpp_uno::shared::UnoInterfaceProxy * pThis,
+ bridges::cpp_uno::shared::VtableSlot aVtableSlot,
+ typelib_TypeDescriptionReference * pReturnTypeRef,
+ sal_Int32 nParams, typelib_MethodParameter * pParams,
+ void * pUnoReturn, void * pUnoArgs[], uno_Any ** ppUnoExc )
+ {
+ // max space for: [complex ret ptr], values|ptr ...
+ char * pCppStack =
+ (char *)alloca( sizeof(sal_Int32) + ((nParams+2) * sizeof(sal_Int64)) );
+ char * pCppStackStart = pCppStack;
+
+ // need to know parameter types for callVirtualMethod so generate a signature string
+ char * pParamType = (char *) alloca(nParams+2);
+ char * pPT = pParamType;
+
+#ifdef BRDEBUG
+ fprintf(stderr,"in cpp_call\n");
+#endif
+
+ // return
+ typelib_TypeDescription * pReturnTypeDescr = 0;
+ TYPELIB_DANGER_GET( &pReturnTypeDescr, pReturnTypeRef );
+ // OSL_ENSURE( pReturnTypeDescr, "### expected return type description!" );
+
+ void * pCppReturn = 0; // if != 0 && != pUnoReturn, needs reconversion
+
+ if (pReturnTypeDescr)
+ {
+ if (bridges::cpp_uno::shared::isSimpleType( pReturnTypeDescr ))
+ {
+ pCppReturn = pUnoReturn; // direct way for simple types
+ }
+ else
+ {
+ // complex return via ptr
+ pCppReturn = *(void **)pCppStack =
+ (bridges::cpp_uno::shared::relatesToInterfaceType( pReturnTypeDescr )
+ ? alloca( pReturnTypeDescr->nSize ): pUnoReturn); // direct way
+ *pPT++ = 'I'; //signify that a complex return type on stack
+ pCppStack += sizeof(void *);
+ }
+ }
+ // push this
+ void* pAdjustedThisPtr = reinterpret_cast< void **>(pThis->getCppI()) + aVtableSlot.offset;
+ *(void**)pCppStack = pAdjustedThisPtr;
+ pCppStack += sizeof( void* );
+ *pPT++ = 'I';
+
+ // stack space
+ // OSL_ENSURE( sizeof(void *) == sizeof(sal_Int32), "### unexpected size!" );
+ // args
+ void ** pCppArgs = (void **)alloca( 3 * sizeof(void *) * nParams );
+ // indizes of values this have to be converted (interface conversion cpp<=>uno)
+ sal_Int32 * pTempIndizes = (sal_Int32 *)(pCppArgs + nParams);
+ // type descriptions for reconversions
+ typelib_TypeDescription ** ppTempParamTypeDescr = (typelib_TypeDescription **)(pCppArgs + (2 * nParams));
+
+ sal_Int32 nTempIndizes = 0;
+
+ for ( sal_Int32 nPos = 0; nPos < nParams; ++nPos )
+ {
+ const typelib_MethodParameter & rParam = pParams[nPos];
+ typelib_TypeDescription * pParamTypeDescr = 0;
+ TYPELIB_DANGER_GET( &pParamTypeDescr, rParam.pTypeRef );
+
+ if (!rParam.bOut && bridges::cpp_uno::shared::isSimpleType( pParamTypeDescr ))
+ {
+ uno_copyAndConvertData( pCppArgs[nPos] = pCppStack, pUnoArgs[nPos], pParamTypeDescr,
+ pThis->getBridge()->getUno2Cpp() );
+
+ switch (pParamTypeDescr->eTypeClass)
+ {
+
+ // we need to know type of each param so that we know whether to use
+ // gpr or fpr to pass in parameters:
+ // Key: I - int, long, pointer, etc means pass in gpr
+ // B - byte value passed in gpr
+ // S - short value passed in gpr
+ // F - float value pass in fpr
+ // D - double value pass in fpr
+ // H - long long int pass in proper pairs of gpr (3,4) (5,6), etc
+ // X - indicates end of parameter description string
+
+ case typelib_TypeClass_LONG:
+ case typelib_TypeClass_UNSIGNED_LONG:
+ case typelib_TypeClass_ENUM:
+ *pPT++ = 'I';
+ break;
+ case typelib_TypeClass_SHORT:
+ case typelib_TypeClass_CHAR:
+ case typelib_TypeClass_UNSIGNED_SHORT:
+ *pPT++ = 'S';
+ break;
+ case typelib_TypeClass_BOOLEAN:
+ case typelib_TypeClass_BYTE:
+ *pPT++ = 'B';
+ break;
+ case typelib_TypeClass_FLOAT:
+ *pPT++ = 'F';
+ break;
+ case typelib_TypeClass_DOUBLE:
+ *pPT++ = 'D';
+ pCppStack += sizeof(sal_Int32); // extra long
+ break;
+ case typelib_TypeClass_HYPER:
+ case typelib_TypeClass_UNSIGNED_HYPER:
+ *pPT++ = 'H';
+ pCppStack += sizeof(sal_Int32); // extra long
+ break;
+ default:
+ break;
+ }
+
+ // no longer needed
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ else // ptr to complex value | ref
+ {
+ if (! rParam.bIn) // is pure out
+ {
+ // cpp out is constructed mem, uno out is not!
+ uno_constructData(
+ *(void **)pCppStack = pCppArgs[nPos] = alloca( pParamTypeDescr->nSize ),
+ pParamTypeDescr );
+ pTempIndizes[nTempIndizes] = nPos; // default constructed for cpp call
+ // will be released at reconversion
+ ppTempParamTypeDescr[nTempIndizes++] = pParamTypeDescr;
+ }
+ // is in/inout
+ else if (bridges::cpp_uno::shared::relatesToInterfaceType( pParamTypeDescr ))
+ {
+ uno_copyAndConvertData(
+ *(void **)pCppStack = pCppArgs[nPos] = alloca( pParamTypeDescr->nSize ),
+ pUnoArgs[nPos], pParamTypeDescr,
+ pThis->getBridge()->getUno2Cpp() );
+
+ pTempIndizes[nTempIndizes] = nPos; // has to be reconverted
+ // will be released at reconversion
+ ppTempParamTypeDescr[nTempIndizes++] = pParamTypeDescr;
+ }
+ else // direct way
+ {
+ *(void **)pCppStack = pCppArgs[nPos] = pUnoArgs[nPos];
+ // no longer needed
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ // KBH: FIXME: is this the right way to pass these
+ *pPT++='I';
+ }
+ pCppStack += sizeof(sal_Int32); // standard parameter length
+ }
+
+ // terminate the signature string
+ *pPT++='X';
+ *pPT=0;
+
+ try
+ {
+ OSL_ENSURE( !( (pCppStack - pCppStackStart ) & 3), "UNALIGNED STACK !!! (Please DO panic)" );
+ callVirtualMethod(
+ pAdjustedThisPtr, aVtableSlot.index,
+ pCppReturn, pReturnTypeDescr->eTypeClass, pParamType,
+ (sal_Int32 *)pCppStackStart, (pCppStack - pCppStackStart) / sizeof(sal_Int32) );
+ // NO exception occured...
+ *ppUnoExc = 0;
+
+ // reconvert temporary params
+ for ( ; nTempIndizes--; )
+ {
+ sal_Int32 nIndex = pTempIndizes[nTempIndizes];
+ typelib_TypeDescription * pParamTypeDescr = ppTempParamTypeDescr[nTempIndizes];
+
+ if (pParams[nIndex].bIn)
+ {
+ if (pParams[nIndex].bOut) // inout
+ {
+ uno_destructData( pUnoArgs[nIndex], pParamTypeDescr, 0 ); // destroy uno value
+ uno_copyAndConvertData( pUnoArgs[nIndex], pCppArgs[nIndex], pParamTypeDescr,
+ pThis->getBridge()->getCpp2Uno() );
+ }
+ }
+ else // pure out
+ {
+ uno_copyAndConvertData( pUnoArgs[nIndex], pCppArgs[nIndex], pParamTypeDescr,
+ pThis->getBridge()->getCpp2Uno() );
+ }
+ // destroy temp cpp param => cpp: every param was constructed
+ uno_destructData( pCppArgs[nIndex], pParamTypeDescr, cpp_release );
+
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ // return value
+ if (pCppReturn && pUnoReturn != pCppReturn)
+ {
+ uno_copyAndConvertData( pUnoReturn, pCppReturn, pReturnTypeDescr,
+ pThis->getBridge()->getCpp2Uno() );
+ uno_destructData( pCppReturn, pReturnTypeDescr, cpp_release );
+ }
+ }
+ catch (...)
+ {
+ // fill uno exception
+ fillUnoException( CPPU_CURRENT_NAMESPACE::__cxa_get_globals()->caughtExceptions,
+ *ppUnoExc, pThis->getBridge()->getCpp2Uno() );
+
+ // temporary params
+ for ( ; nTempIndizes--; )
+ {
+ sal_Int32 nIndex = pTempIndizes[nTempIndizes];
+ // destroy temp cpp param => cpp: every param was constructed
+ uno_destructData( pCppArgs[nIndex], ppTempParamTypeDescr[nTempIndizes], cpp_release );
+ TYPELIB_DANGER_RELEASE( ppTempParamTypeDescr[nTempIndizes] );
+ }
+ // return type
+ if (pReturnTypeDescr)
+ TYPELIB_DANGER_RELEASE( pReturnTypeDescr );
+ }
+ }
+
+}
+
+
+namespace bridges { namespace cpp_uno { namespace shared {
+
+//==================================================================================================
+void unoInterfaceProxyDispatch(
+ uno_Interface * pUnoI, const typelib_TypeDescription * pMemberDescr,
+ void * pReturn, void * pArgs[], uno_Any ** ppException )
+{
+ // is my surrogate
+ bridges::cpp_uno::shared::UnoInterfaceProxy * pThis
+ = static_cast< bridges::cpp_uno::shared::UnoInterfaceProxy *> (pUnoI);
+ //typelib_InterfaceTypeDescription * pTypeDescr = pThis->pTypeDescr;
+
+#ifdef BRDEBUG
+ fprintf(stderr,"in dispatch\n");
+#endif
+
+ switch (pMemberDescr->eTypeClass)
+ {
+ case typelib_TypeClass_INTERFACE_ATTRIBUTE:
+ {
+
+ VtableSlot aVtableSlot(
+ getVtableSlot(
+ reinterpret_cast<
+ typelib_InterfaceAttributeTypeDescription const * >(
+ pMemberDescr)));
+
+ if (pReturn)
+ {
+ // dependent dispatch
+ cpp_call(
+ pThis, aVtableSlot,
+ ((typelib_InterfaceAttributeTypeDescription *)pMemberDescr)->pAttributeTypeRef,
+ 0, 0, // no params
+ pReturn, pArgs, ppException );
+ }
+ else
+ {
+ // is SET
+ typelib_MethodParameter aParam;
+ aParam.pTypeRef =
+ ((typelib_InterfaceAttributeTypeDescription *)pMemberDescr)->pAttributeTypeRef;
+ aParam.bIn = sal_True;
+ aParam.bOut = sal_False;
+
+ typelib_TypeDescriptionReference * pReturnTypeRef = 0;
+ OUString aVoidName( RTL_CONSTASCII_USTRINGPARAM("void") );
+ typelib_typedescriptionreference_new(
+ &pReturnTypeRef, typelib_TypeClass_VOID, aVoidName.pData );
+
+ // dependent dispatch
+ aVtableSlot.index += 1; //get then set method
+ cpp_call(
+ pThis, aVtableSlot,
+ pReturnTypeRef,
+ 1, &aParam,
+ pReturn, pArgs, ppException );
+
+ typelib_typedescriptionreference_release( pReturnTypeRef );
+ }
+
+ break;
+ }
+ case typelib_TypeClass_INTERFACE_METHOD:
+ {
+
+ VtableSlot aVtableSlot(
+ getVtableSlot(
+ reinterpret_cast<
+ typelib_InterfaceMethodTypeDescription const * >(
+ pMemberDescr)));
+ switch (aVtableSlot.index)
+ {
+ // standard calls
+ case 1: // acquire uno interface
+ (*pUnoI->acquire)( pUnoI );
+ *ppException = 0;
+ break;
+ case 2: // release uno interface
+ (*pUnoI->release)( pUnoI );
+ *ppException = 0;
+ break;
+ case 0: // queryInterface() opt
+ {
+ typelib_TypeDescription * pTD = 0;
+ TYPELIB_DANGER_GET( &pTD, reinterpret_cast< Type * >( pArgs[0] )->getTypeLibType() );
+ if (pTD)
+ {
+ uno_Interface * pInterface = 0;
+ (*pThis->pBridge->getUnoEnv()->getRegisteredInterface)(
+ pThis->pBridge->getUnoEnv(),
+ (void **)&pInterface, pThis->oid.pData, (typelib_InterfaceTypeDescription *)pTD );
+
+ if (pInterface)
+ {
+ ::uno_any_construct(
+ reinterpret_cast< uno_Any * >( pReturn ),
+ &pInterface, pTD, 0 );
+ (*pInterface->release)( pInterface );
+ TYPELIB_DANGER_RELEASE( pTD );
+ *ppException = 0;
+ break;
+ }
+ TYPELIB_DANGER_RELEASE( pTD );
+ }
+ } // else perform queryInterface()
+ default:
+ // dependent dispatch
+ cpp_call(
+ pThis, aVtableSlot,
+ ((typelib_InterfaceMethodTypeDescription *)pMemberDescr)->pReturnTypeRef,
+ ((typelib_InterfaceMethodTypeDescription *)pMemberDescr)->nParams,
+ ((typelib_InterfaceMethodTypeDescription *)pMemberDescr)->pParams,
+ pReturn, pArgs, ppException );
+ }
+ break;
+ }
+ default:
+ {
+ ::com::sun::star::uno::RuntimeException aExc(
+ OUString( RTL_CONSTASCII_USTRINGPARAM("illegal member type description!") ),
+ ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >() );
+
+ Type const & rExcType = ::getCppuType( &aExc );
+ // binary identical null reference
+ ::uno_type_any_construct( *ppException, &aExc, rExcType.getTypeLibType(), 0 );
+ }
+ }
+}
+}}}
+
diff --git a/bridges/source/cpp_uno/gcc3_linux_powerpc/cpp2uno.cxx b/bridges/source/cpp_uno/gcc3_linux_powerpc/cpp2uno.cxx
new file mode 100644
index 000000000000..bf2826594162
--- /dev/null
+++ b/bridges/source/cpp_uno/gcc3_linux_powerpc/cpp2uno.cxx
@@ -0,0 +1,795 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_bridges.hxx"
+
+#include <string.h>
+
+#include <com/sun/star/uno/genfunc.hxx>
+#include <uno/data.h>
+#include <typelib/typedescription.hxx>
+
+#include "bridges/cpp_uno/shared/bridge.hxx"
+#include "bridges/cpp_uno/shared/cppinterfaceproxy.hxx"
+#include "bridges/cpp_uno/shared/types.hxx"
+#include "bridges/cpp_uno/shared/vtablefactory.hxx"
+
+#include "share.hxx"
+// #include <stdio.h>
+
+
+using namespace ::com::sun::star::uno;
+
+namespace
+{
+
+//==================================================================================================
+static typelib_TypeClass cpp2uno_call(
+ bridges::cpp_uno::shared::CppInterfaceProxy * pThis,
+ const typelib_TypeDescription * pMemberTypeDescr,
+ typelib_TypeDescriptionReference * pReturnTypeRef, // 0 indicates void return
+ sal_Int32 nParams, typelib_MethodParameter * pParams,
+ void ** gpreg, void ** fpreg, void ** ovrflw,
+ sal_Int64 * pRegisterReturn /* space for register return */ )
+{
+ int ng = 0; //number of gpr registers used
+#ifndef __NO_FPRS__
+ int nf = 0; //number of fpr regsiters used
+#endif
+ void ** pCppStack; //temporary stack pointer
+
+ // gpreg: [ret *], this, [gpr params]
+ // fpreg: [fpr params]
+ // ovrflw: [gpr or fpr params (properly aligned)]
+
+ // return
+ typelib_TypeDescription * pReturnTypeDescr = 0;
+ if (pReturnTypeRef)
+ TYPELIB_DANGER_GET( &pReturnTypeDescr, pReturnTypeRef );
+
+ void * pUnoReturn = 0;
+ void * pCppReturn = 0; // complex return ptr: if != 0 && != pUnoReturn, reconversion need
+
+ if (pReturnTypeDescr)
+ {
+ if (bridges::cpp_uno::shared::isSimpleType( pReturnTypeDescr ))
+ {
+ pUnoReturn = pRegisterReturn; // direct way for simple types
+ }
+ else // complex return via ptr (pCppReturn)
+ {
+ pCppReturn = *(void **)gpreg;
+ gpreg++;
+ ng++;
+
+ pUnoReturn = (bridges::cpp_uno::shared::relatesToInterfaceType( pReturnTypeDescr )
+ ? alloca( pReturnTypeDescr->nSize )
+ : pCppReturn); // direct way
+ }
+ }
+ // pop this
+ gpreg++;
+ ng++;
+
+ // stack space
+ OSL_ENSURE( sizeof(void *) == sizeof(sal_Int32), "### unexpected size!" );
+ // parameters
+ void ** pUnoArgs = (void **)alloca( 4 * sizeof(void *) * nParams );
+ void ** pCppArgs = pUnoArgs + nParams;
+ // indizes of values this have to be converted (interface conversion cpp<=>uno)
+ sal_Int32 * pTempIndizes = (sal_Int32 *)(pUnoArgs + (2 * nParams));
+ // type descriptions for reconversions
+ typelib_TypeDescription ** ppTempParamTypeDescr = (typelib_TypeDescription **)(pUnoArgs + (3 * nParams));
+
+ sal_Int32 nTempIndizes = 0;
+
+ for ( sal_Int32 nPos = 0; nPos < nParams; ++nPos )
+ {
+ const typelib_MethodParameter & rParam = pParams[nPos];
+ typelib_TypeDescription * pParamTypeDescr = 0;
+ TYPELIB_DANGER_GET( &pParamTypeDescr, rParam.pTypeRef );
+
+ if (!rParam.bOut && bridges::cpp_uno::shared::isSimpleType( pParamTypeDescr ))
+ // value
+ {
+
+ switch (pParamTypeDescr->eTypeClass)
+ {
+
+ case typelib_TypeClass_DOUBLE:
+#ifndef __NO_FPRS__
+ if (nf < 8) {
+ pCppArgs[nPos] = fpreg;
+ pUnoArgs[nPos] = fpreg;
+ nf++;
+ fpreg += 2;
+#else
+ if (ng & 1) {
+ ng++;
+ gpreg++;
+ }
+ if (ng < 8) {
+ pCppArgs[nPos] = gpreg;
+ pUnoArgs[nPos] = gpreg;
+ ng += 2;
+ gpreg += 2;
+#endif
+ } else {
+ if (((long)ovrflw) & 4) ovrflw++;
+ pCppArgs[nPos] = ovrflw;
+ pUnoArgs[nPos] = ovrflw;
+ ovrflw += 2;
+ }
+ break;
+
+ case typelib_TypeClass_FLOAT:
+ // fpreg are all double values so need to
+ // modify fpreg to be a single word float value
+#ifndef __NO_FPRS__
+ if (nf < 8) {
+ float tmp = (float) (*((double *)fpreg));
+ (*((float *) fpreg)) = tmp;
+ pCppArgs[nPos] = fpreg;
+ pUnoArgs[nPos] = fpreg;
+ nf++;
+ fpreg += 2;
+#else
+ if (ng < 8) {
+ pCppArgs[nPos] = gpreg;
+ pUnoArgs[nPos] = gpreg;
+ ng++;
+ gpreg++;
+#endif
+ } else {
+#if 0 /* abi is not being followed correctly */
+ if (((long)ovrflw) & 4) ovrflw++;
+ float tmp = (float) (*((double *)ovrflw));
+ (*((float *) ovrflw)) = tmp;
+ pCppArgs[nPos] = ovrflw;
+ pUnoArgs[nPos] = ovrflw;
+ ovrflw += 2;
+#else
+ pCppArgs[nPos] = ovrflw;
+ pUnoArgs[nPos] = ovrflw;
+ ovrflw += 1;
+#endif
+ }
+ break;
+
+ case typelib_TypeClass_HYPER:
+ case typelib_TypeClass_UNSIGNED_HYPER:
+ if (ng & 1) {
+ ng++;
+ gpreg++;
+ }
+ if (ng < 8) {
+ pCppArgs[nPos] = gpreg;
+ pUnoArgs[nPos] = gpreg;
+ ng += 2;
+ gpreg += 2;
+ } else {
+ if (((long)ovrflw) & 4) ovrflw++;
+ pCppArgs[nPos] = ovrflw;
+ pUnoArgs[nPos] = ovrflw;
+ ovrflw += 2;
+ }
+ break;
+
+ case typelib_TypeClass_BYTE:
+ case typelib_TypeClass_BOOLEAN:
+ if (ng < 8) {
+ pCppArgs[nPos] = (((char *)gpreg) + 3);
+ pUnoArgs[nPos] = (((char *)gpreg) + 3);
+ ng++;
+ gpreg++;
+ } else {
+ pCppArgs[nPos] = (((char *)ovrflw) + 3);
+ pUnoArgs[nPos] = (((char *)ovrflw) + 3);
+ ovrflw++;
+ }
+ break;
+
+
+ case typelib_TypeClass_CHAR:
+ case typelib_TypeClass_SHORT:
+ case typelib_TypeClass_UNSIGNED_SHORT:
+ if (ng < 8) {
+ pCppArgs[nPos] = (((char *)gpreg)+ 2);
+ pUnoArgs[nPos] = (((char *)gpreg)+ 2);
+ ng++;
+ gpreg++;
+ } else {
+ pCppArgs[nPos] = (((char *)ovrflw) + 2);
+ pUnoArgs[nPos] = (((char *)ovrflw) + 2);
+ ovrflw++;
+ }
+ break;
+
+
+ default:
+ if (ng < 8) {
+ pCppArgs[nPos] = gpreg;
+ pUnoArgs[nPos] = gpreg;
+ ng++;
+ gpreg++;
+ } else {
+ pCppArgs[nPos] = ovrflw;
+ pUnoArgs[nPos] = ovrflw;
+ ovrflw++;
+ }
+ break;
+
+ }
+ // no longer needed
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ else // ptr to complex value | ref
+ {
+
+ if (ng < 8) {
+ pCppArgs[nPos] = *(void **)gpreg;
+ pCppStack = gpreg;
+ ng++;
+ gpreg++;
+ } else {
+ pCppArgs[nPos] = *(void **)ovrflw;
+ pCppStack = ovrflw;
+ ovrflw++;
+ }
+
+ if (! rParam.bIn) // is pure out
+ {
+ // uno out is unconstructed mem!
+ pUnoArgs[nPos] = alloca( pParamTypeDescr->nSize );
+ pTempIndizes[nTempIndizes] = nPos;
+ // will be released at reconversion
+ ppTempParamTypeDescr[nTempIndizes++] = pParamTypeDescr;
+ }
+ // is in/inout
+ else if (bridges::cpp_uno::shared::relatesToInterfaceType( pParamTypeDescr ))
+ {
+ uno_copyAndConvertData( pUnoArgs[nPos] = alloca( pParamTypeDescr->nSize ),
+ *(void **)pCppStack, pParamTypeDescr,
+ pThis->getBridge()->getCpp2Uno() );
+ pTempIndizes[nTempIndizes] = nPos; // has to be reconverted
+ // will be released at reconversion
+ ppTempParamTypeDescr[nTempIndizes++] = pParamTypeDescr;
+ }
+ else // direct way
+ {
+ pUnoArgs[nPos] = *(void **)pCppStack;
+ // no longer needed
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ }
+ }
+
+ // ExceptionHolder
+ uno_Any aUnoExc; // Any will be constructed by callee
+ uno_Any * pUnoExc = &aUnoExc;
+
+ // invoke uno dispatch call
+ (*pThis->getUnoI()->pDispatcher)( pThis->getUnoI(), pMemberTypeDescr, pUnoReturn, pUnoArgs, &pUnoExc );
+
+ // in case an exception occured...
+ if (pUnoExc)
+ {
+ // destruct temporary in/inout params
+ for ( ; nTempIndizes--; )
+ {
+ sal_Int32 nIndex = pTempIndizes[nTempIndizes];
+
+ if (pParams[nIndex].bIn) // is in/inout => was constructed
+ uno_destructData( pUnoArgs[nIndex], ppTempParamTypeDescr[nTempIndizes], 0 );
+ TYPELIB_DANGER_RELEASE( ppTempParamTypeDescr[nTempIndizes] );
+ }
+ if (pReturnTypeDescr)
+ TYPELIB_DANGER_RELEASE( pReturnTypeDescr );
+
+ CPPU_CURRENT_NAMESPACE::raiseException( &aUnoExc, pThis->getBridge()->getUno2Cpp() );
+ // has to destruct the any
+ // is here for dummy
+ return typelib_TypeClass_VOID;
+ }
+ else // else no exception occured...
+ {
+ // temporary params
+ for ( ; nTempIndizes--; )
+ {
+ sal_Int32 nIndex = pTempIndizes[nTempIndizes];
+ typelib_TypeDescription * pParamTypeDescr = ppTempParamTypeDescr[nTempIndizes];
+
+ if (pParams[nIndex].bOut) // inout/out
+ {
+ // convert and assign
+ uno_destructData( pCppArgs[nIndex], pParamTypeDescr, cpp_release );
+ uno_copyAndConvertData( pCppArgs[nIndex], pUnoArgs[nIndex], pParamTypeDescr,
+ pThis->getBridge()->getUno2Cpp() );
+ }
+ // destroy temp uno param
+ uno_destructData( pUnoArgs[nIndex], pParamTypeDescr, 0 );
+
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ // return
+ if (pCppReturn) // has complex return
+ {
+ if (pUnoReturn != pCppReturn) // needs reconversion
+ {
+ uno_copyAndConvertData( pCppReturn, pUnoReturn, pReturnTypeDescr,
+ pThis->getBridge()->getUno2Cpp() );
+ // destroy temp uno return
+ uno_destructData( pUnoReturn, pReturnTypeDescr, 0 );
+ }
+ // complex return ptr is set to return reg
+ *(void **)pRegisterReturn = pCppReturn;
+ }
+ if (pReturnTypeDescr)
+ {
+ typelib_TypeClass eRet = (typelib_TypeClass)pReturnTypeDescr->eTypeClass;
+ TYPELIB_DANGER_RELEASE( pReturnTypeDescr );
+ return eRet;
+ }
+ else
+ return typelib_TypeClass_VOID;
+ }
+}
+
+
+//==================================================================================================
+static typelib_TypeClass cpp_mediate(
+ sal_Int32 nFunctionIndex,
+ sal_Int32 nVtableOffset,
+ void ** gpreg, void ** fpreg, void ** ovrflw,
+ sal_Int64 * pRegisterReturn /* space for register return */ )
+{
+ OSL_ENSURE( sizeof(sal_Int32)==sizeof(void *), "### unexpected!" );
+
+ // gpreg: [ret *], this, [other gpr params]
+ // fpreg: [fpr params]
+ // ovrflw: [gpr or fpr params (properly aligned)]
+
+ void * pThis;
+ if (nFunctionIndex & 0x80000000 )
+ {
+ nFunctionIndex &= 0x7fffffff;
+ pThis = gpreg[1];
+ }
+ else
+ {
+ pThis = gpreg[0];
+ }
+
+ pThis = static_cast< char * >(pThis) - nVtableOffset;
+ bridges::cpp_uno::shared::CppInterfaceProxy * pCppI
+ = bridges::cpp_uno::shared::CppInterfaceProxy::castInterfaceToProxy(
+ pThis);
+
+ typelib_InterfaceTypeDescription * pTypeDescr = pCppI->getTypeDescr();
+
+ OSL_ENSURE( nFunctionIndex < pTypeDescr->nMapFunctionIndexToMemberIndex, "### illegal vtable index!" );
+ if (nFunctionIndex >= pTypeDescr->nMapFunctionIndexToMemberIndex)
+ {
+ throw RuntimeException(
+ rtl::OUString::createFromAscii("illegal vtable index!"),
+ (XInterface *)pThis );
+ }
+
+ // determine called method
+ sal_Int32 nMemberPos = pTypeDescr->pMapFunctionIndexToMemberIndex[nFunctionIndex];
+ OSL_ENSURE( nMemberPos < pTypeDescr->nAllMembers, "### illegal member index!" );
+
+ TypeDescription aMemberDescr( pTypeDescr->ppAllMembers[nMemberPos] );
+
+ typelib_TypeClass eRet;
+ switch (aMemberDescr.get()->eTypeClass)
+ {
+ case typelib_TypeClass_INTERFACE_ATTRIBUTE:
+ {
+ if (pTypeDescr->pMapMemberIndexToFunctionIndex[nMemberPos] == nFunctionIndex)
+ {
+ // is GET method
+ eRet = cpp2uno_call(
+ pCppI, aMemberDescr.get(),
+ ((typelib_InterfaceAttributeTypeDescription *)aMemberDescr.get())->pAttributeTypeRef,
+ 0, 0, // no params
+ gpreg, fpreg, ovrflw, pRegisterReturn );
+ }
+ else
+ {
+ // is SET method
+ typelib_MethodParameter aParam;
+ aParam.pTypeRef =
+ ((typelib_InterfaceAttributeTypeDescription *)aMemberDescr.get())->pAttributeTypeRef;
+ aParam.bIn = sal_True;
+ aParam.bOut = sal_False;
+
+ eRet = cpp2uno_call(
+ pCppI, aMemberDescr.get(),
+ 0, // indicates void return
+ 1, &aParam,
+ gpreg, fpreg, ovrflw, pRegisterReturn );
+ }
+ break;
+ }
+ case typelib_TypeClass_INTERFACE_METHOD:
+ {
+ // is METHOD
+ switch (nFunctionIndex)
+ {
+ case 1: // acquire()
+ pCppI->acquireProxy(); // non virtual call!
+ eRet = typelib_TypeClass_VOID;
+ break;
+ case 2: // release()
+ pCppI->releaseProxy(); // non virtual call!
+ eRet = typelib_TypeClass_VOID;
+ break;
+ case 0: // queryInterface() opt
+ {
+ typelib_TypeDescription * pTD = 0;
+ TYPELIB_DANGER_GET( &pTD, reinterpret_cast< Type * >( gpreg[2] )->getTypeLibType() );
+ if (pTD)
+ {
+ XInterface * pInterface = 0;
+ (*pCppI->getBridge()->getCppEnv()->getRegisteredInterface)(
+ pCppI->getBridge()->getCppEnv(),
+ (void **)&pInterface, pCppI->getOid().pData,
+ (typelib_InterfaceTypeDescription *)pTD );
+
+ if (pInterface)
+ {
+ ::uno_any_construct(
+ reinterpret_cast< uno_Any * >( gpreg[0] ),
+ &pInterface, pTD, cpp_acquire );
+ pInterface->release();
+ TYPELIB_DANGER_RELEASE( pTD );
+ *(void **)pRegisterReturn = gpreg[0];
+ eRet = typelib_TypeClass_ANY;
+ break;
+ }
+ TYPELIB_DANGER_RELEASE( pTD );
+ }
+ } // else perform queryInterface()
+ default:
+ eRet = cpp2uno_call(
+ pCppI, aMemberDescr.get(),
+ ((typelib_InterfaceMethodTypeDescription *)aMemberDescr.get())->pReturnTypeRef,
+ ((typelib_InterfaceMethodTypeDescription *)aMemberDescr.get())->nParams,
+ ((typelib_InterfaceMethodTypeDescription *)aMemberDescr.get())->pParams,
+ gpreg, fpreg, ovrflw, pRegisterReturn );
+ }
+ break;
+ }
+ default:
+ {
+ throw RuntimeException(
+ rtl::OUString::createFromAscii("no member description found!"),
+ (XInterface *)pThis );
+ // is here for dummy
+ eRet = typelib_TypeClass_VOID;
+ }
+ }
+
+ return eRet;
+}
+
+//==================================================================================================
+/**
+ * is called on incoming vtable calls
+ * (called by asm snippets)
+ */
+static void cpp_vtable_call( int nFunctionIndex, int nVtableOffset, void** gpregptr, void** fpregptr, void** ovrflw)
+{
+ sal_Int32 gpreg[8];
+ memcpy( gpreg, gpregptr, 32);
+
+#ifndef __NO_FPRS__
+ double fpreg[8];
+ memcpy( fpreg, fpregptr, 64);
+#endif
+
+ volatile long nRegReturn[2];
+
+ // fprintf(stderr,"in cpp_vtable_call nFunctionIndex is %x\n",nFunctionIndex);
+ // fprintf(stderr,"in cpp_vtable_call nVtableOffset is %x\n",nVtableOffset);
+ // fflush(stderr);
+
+ typelib_TypeClass aType =
+ cpp_mediate( nFunctionIndex, nVtableOffset, (void**)gpreg,
+#ifndef __NO_FPRS__
+ (void**)fpreg,
+#else
+ NULL,
+#endif
+ ovrflw, (sal_Int64*)nRegReturn );
+
+ switch( aType )
+ {
+
+ // move return value into register space
+ // (will be loaded by machine code snippet)
+
+ case typelib_TypeClass_BOOLEAN:
+ case typelib_TypeClass_BYTE:
+ __asm__( "lbz 3,%0\n\t" : :
+ "m"(nRegReturn[0]) );
+ break;
+
+ case typelib_TypeClass_CHAR:
+ case typelib_TypeClass_SHORT:
+ case typelib_TypeClass_UNSIGNED_SHORT:
+ __asm__( "lhz 3,%0\n\t" : :
+ "m"(nRegReturn[0]) );
+ break;
+
+ case typelib_TypeClass_FLOAT:
+#ifndef __NO_FPRS__
+ __asm__( "lfs 1,%0\n\t" : :
+ "m" (*((float*)nRegReturn)) );
+ #else
+ __asm__( "lwz 3,%0\n\t" : :
+ "m"(nRegReturn[0]) );
+#endif
+ break;
+
+ case typelib_TypeClass_DOUBLE:
+#ifndef __NO_FPRS__
+ __asm__( "lfd 1,%0\n\t" : :
+ "m" (*((double*)nRegReturn)) );
+#else
+ __asm__( "lwz 3,%0\n\t" : :
+ "m"(nRegReturn[0]) );
+ __asm__( "lwz 4,%0\n\t" : :
+ "m"(nRegReturn[1]) );
+#endif
+ break;
+
+ case typelib_TypeClass_HYPER:
+ case typelib_TypeClass_UNSIGNED_HYPER:
+ __asm__( "lwz 4,%0\n\t" : :
+ "m"(nRegReturn[1]) ); // fall through
+
+ default:
+ __asm__( "lwz 3,%0\n\t" : :
+ "m"(nRegReturn[0]) );
+ break;
+ }
+}
+
+
+int const codeSnippetSize = 108;
+
+unsigned char * codeSnippet( unsigned char * code, sal_Int32 functionIndex, sal_Int32 vtableOffset,
+ bool simpleRetType)
+{
+
+ // fprintf(stderr,"in codeSnippet functionIndex is %x\n", functionIndex);
+ // fprintf(stderr,"in codeSnippet vtableOffset is %x\n", vtableOffset);
+ // fflush(stderr);
+
+ if (! simpleRetType )
+ functionIndex |= 0x80000000;
+
+ unsigned long * p = (unsigned long *) code;
+
+ // OSL_ASSERT( sizeof (long) == 4 );
+ OSL_ASSERT((((unsigned long)code) & 0x3) == 0 ); //aligned to 4 otherwise a mistake
+
+ /* generate this code */
+ // # so first save gpr 3 to gpr 10 (aligned to 4)
+ // stw r3,-2048(r1)
+ // stw r4,-2044(r1)
+ // stw r5,-2040(r1)
+ // stw r6,-2036(r1)
+ // stw r7,-2032(r1)
+ // stw r8,-2028(r1)
+ // stw r9,-2024(r1)
+ // stw r10,-2020(r1)
+
+
+ // # next save fpr 1 to fpr 8 (aligned to 8)
+ // if dedicated floating point registers are used
+ // stfd f1,-2016(r1)
+ // stfd f2,-2008(r1)
+ // stfd f3,-2000(r1)
+ // stfd f4,-1992(r1)
+ // stfd f5,-1984(r1)
+ // stfd f6,-1976(r1)
+ // stfd f7,-1968(r1)
+ // stfd f8,-1960(r1)
+
+ // # now here is where cpp_vtable_call must go
+ // lis r3,-8531
+ // ori r3,r3,48879
+ // mtctr r3
+
+ // # now load up the functionIndex
+ // lis r3,-8531
+ // ori r3,r3,48879
+
+ // # now load up the vtableOffset
+ // lis r4,-8531
+ // ori r4,r4,48879
+
+ // #now load up the pointer to the saved gpr registers
+ // addi r5,r1,-2048
+
+ // #now load up the pointer to the saved fpr registers
+ // addi r6,r1,-2016
+ // if no dedicated floating point registers are used than we have NULL
+ // pointer there
+ // li r6, 0
+ //
+
+ // #now load up the pointer to the overflow call stack
+ // addi r7,r1,8
+ // bctr
+
+ * p++ = 0x9061f800;
+ * p++ = 0x9081f804;
+ * p++ = 0x90a1f808;
+ * p++ = 0x90c1f80c;
+ * p++ = 0x90e1f810;
+ * p++ = 0x9101f814;
+ * p++ = 0x9121f818;
+ * p++ = 0x9141f81c;
+#ifndef __NO_FPRS__
+ * p++ = 0xd821f820;
+ * p++ = 0xd841f828;
+ * p++ = 0xd861f830;
+ * p++ = 0xd881f838;
+ * p++ = 0xd8a1f840;
+ * p++ = 0xd8c1f848;
+ * p++ = 0xd8e1f850;
+ * p++ = 0xd901f858;
+#else
+ /* these nops could be replaced with a smaller codeSnippetSize - 8 * 4 */
+ * p++ = 0x60000000;
+ * p++ = 0x60000000;
+ * p++ = 0x60000000;
+ * p++ = 0x60000000;
+ * p++ = 0x60000000;
+ * p++ = 0x60000000;
+ * p++ = 0x60000000;
+ * p++ = 0x60000000;
+#endif
+ * p++ = 0x3c600000 | (((unsigned long)cpp_vtable_call) >> 16);
+ * p++ = 0x60630000 | (((unsigned long)cpp_vtable_call) & 0x0000FFFF);
+ * p++ = 0x7c6903a6;
+ * p++ = 0x3c600000 | (((unsigned long)functionIndex) >> 16);
+ * p++ = 0x60630000 | (((unsigned long)functionIndex) & 0x0000FFFF);
+ * p++ = 0x3c800000 | (((unsigned long)vtableOffset) >> 16);
+ * p++ = 0x60840000 | (((unsigned long)vtableOffset) & 0x0000FFFF);
+ * p++ = 0x38a1f800;
+#ifndef __NO_FPRS__
+ * p++ = 0x38c1f820;
+#else
+ * p++ = 0x38c00000;
+#endif
+ * p++ = 0x38e10008;
+ * p++ = 0x4e800420;
+ return (code + codeSnippetSize);
+
+}
+
+
+}
+
+void bridges::cpp_uno::shared::VtableFactory::flushCode(unsigned char const * bptr, unsigned char const * eptr)
+{
+ int const lineSize = 32;
+ for (unsigned char const * p = bptr; p < eptr + lineSize; p += lineSize) {
+ __asm__ volatile ("dcbst 0, %0" : : "r"(p) : "memory");
+ }
+ __asm__ volatile ("sync" : : : "memory");
+ for (unsigned char const * p = bptr; p < eptr + lineSize; p += lineSize) {
+ __asm__ volatile ("icbi 0, %0" : : "r"(p) : "memory");
+ }
+ __asm__ volatile ("isync" : : : "memory");
+}
+
+struct bridges::cpp_uno::shared::VtableFactory::Slot { void * fn; };
+
+bridges::cpp_uno::shared::VtableFactory::Slot *
+bridges::cpp_uno::shared::VtableFactory::mapBlockToVtable(void * block)
+{
+ return static_cast< Slot * >(block) + 2;
+}
+
+sal_Size bridges::cpp_uno::shared::VtableFactory::getBlockSize(
+ sal_Int32 slotCount)
+{
+ return (slotCount + 2) * sizeof (Slot) + slotCount * codeSnippetSize;
+}
+
+bridges::cpp_uno::shared::VtableFactory::Slot *
+bridges::cpp_uno::shared::VtableFactory::initializeBlock(
+ void * block, sal_Int32 slotCount)
+{
+ Slot * slots = mapBlockToVtable(block);
+ slots[-2].fn = 0;
+ slots[-1].fn = 0;
+ return slots + slotCount;
+}
+
+unsigned char * bridges::cpp_uno::shared::VtableFactory::addLocalFunctions(
+ Slot ** slots, unsigned char * code, sal_PtrDiff writetoexecdiff,
+ typelib_InterfaceTypeDescription const * type, sal_Int32 functionOffset,
+ sal_Int32 functionCount, sal_Int32 vtableOffset)
+{
+ (*slots) -= functionCount;
+ Slot * s = *slots;
+ // fprintf(stderr, "in addLocalFunctions functionOffset is %x\n",functionOffset);
+ // fprintf(stderr, "in addLocalFunctions vtableOffset is %x\n",vtableOffset);
+ // fflush(stderr);
+
+ for (sal_Int32 i = 0; i < type->nMembers; ++i) {
+ typelib_TypeDescription * member = 0;
+ TYPELIB_DANGER_GET(&member, type->ppMembers[i]);
+ OSL_ASSERT(member != 0);
+ switch (member->eTypeClass) {
+ case typelib_TypeClass_INTERFACE_ATTRIBUTE:
+ // Getter:
+ (s++)->fn = code + writetoexecdiff;
+ code = codeSnippet(
+ code, functionOffset++, vtableOffset,
+ bridges::cpp_uno::shared::isSimpleType(
+ reinterpret_cast<
+ typelib_InterfaceAttributeTypeDescription * >(
+ member)->pAttributeTypeRef));
+
+ // Setter:
+ if (!reinterpret_cast<
+ typelib_InterfaceAttributeTypeDescription * >(
+ member)->bReadOnly)
+ {
+ (s++)->fn = code + writetoexecdiff;
+ code = codeSnippet(code, functionOffset++, vtableOffset, true);
+ }
+ break;
+
+ case typelib_TypeClass_INTERFACE_METHOD:
+ (s++)->fn = code + writetoexecdiff;
+ code = codeSnippet(
+ code, functionOffset++, vtableOffset,
+ bridges::cpp_uno::shared::isSimpleType(
+ reinterpret_cast<
+ typelib_InterfaceMethodTypeDescription * >(
+ member)->pReturnTypeRef));
+ break;
+
+ default:
+ OSL_ASSERT(false);
+ break;
+ }
+ TYPELIB_DANGER_RELEASE(member);
+ }
+ return code;
+}
+
diff --git a/bridges/source/cpp_uno/gcc3_linux_powerpc/except.cxx b/bridges/source/cpp_uno/gcc3_linux_powerpc/except.cxx
new file mode 100644
index 000000000000..7012ac42eb28
--- /dev/null
+++ b/bridges/source/cpp_uno/gcc3_linux_powerpc/except.cxx
@@ -0,0 +1,287 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_bridges.hxx"
+
+#include <stdio.h>
+#include <string.h>
+#include <dlfcn.h>
+#include <cxxabi.h>
+#include <hash_map>
+
+#include <rtl/strbuf.hxx>
+#include <rtl/ustrbuf.hxx>
+#include <osl/diagnose.h>
+#include <osl/mutex.hxx>
+
+#include <com/sun/star/uno/genfunc.hxx>
+#include <typelib/typedescription.hxx>
+#include <uno/any2.h>
+
+#include "share.hxx"
+
+
+using namespace ::std;
+using namespace ::osl;
+using namespace ::rtl;
+using namespace ::com::sun::star::uno;
+using namespace ::__cxxabiv1;
+
+
+namespace CPPU_CURRENT_NAMESPACE
+{
+
+void dummy_can_throw_anything( char const * )
+{
+}
+
+//==================================================================================================
+static OUString toUNOname( char const * p ) SAL_THROW( () )
+{
+#if OSL_DEBUG_LEVEL > 1
+ char const * start = p;
+#endif
+
+ // example: N3com3sun4star4lang24IllegalArgumentExceptionE
+
+ OUStringBuffer buf( 64 );
+ OSL_ASSERT( 'N' == *p );
+ ++p; // skip N
+
+ while ('E' != *p)
+ {
+ // read chars count
+ long n = (*p++ - '0');
+ while ('0' <= *p && '9' >= *p)
+ {
+ n *= 10;
+ n += (*p++ - '0');
+ }
+ buf.appendAscii( p, n );
+ p += n;
+ if ('E' != *p)
+ buf.append( (sal_Unicode)'.' );
+ }
+
+#if OSL_DEBUG_LEVEL > 1
+ OUString ret( buf.makeStringAndClear() );
+ OString c_ret( OUStringToOString( ret, RTL_TEXTENCODING_ASCII_US ) );
+ fprintf( stderr, "> toUNOname(): %s => %s\n", start, c_ret.getStr() );
+ return ret;
+#else
+ return buf.makeStringAndClear();
+#endif
+}
+
+//==================================================================================================
+class RTTI
+{
+ typedef hash_map< OUString, type_info *, OUStringHash > t_rtti_map;
+
+ Mutex m_mutex;
+ t_rtti_map m_rttis;
+ t_rtti_map m_generatedRttis;
+
+ void * m_hApp;
+
+public:
+ RTTI() SAL_THROW( () );
+ ~RTTI() SAL_THROW( () );
+
+ type_info * getRTTI( typelib_CompoundTypeDescription * ) SAL_THROW( () );
+};
+//__________________________________________________________________________________________________
+RTTI::RTTI() SAL_THROW( () )
+ : m_hApp( dlopen( 0, RTLD_LAZY ) )
+{
+}
+//__________________________________________________________________________________________________
+RTTI::~RTTI() SAL_THROW( () )
+{
+ dlclose( m_hApp );
+}
+
+//__________________________________________________________________________________________________
+type_info * RTTI::getRTTI( typelib_CompoundTypeDescription *pTypeDescr ) SAL_THROW( () )
+{
+ type_info * rtti;
+
+ OUString const & unoName = *(OUString const *)&pTypeDescr->aBase.pTypeName;
+
+ MutexGuard guard( m_mutex );
+ t_rtti_map::const_iterator iRttiFind( m_rttis.find( unoName ) );
+ if (iRttiFind == m_rttis.end())
+ {
+ // RTTI symbol
+ OStringBuffer buf( 64 );
+ buf.append( RTL_CONSTASCII_STRINGPARAM("_ZTIN") );
+ sal_Int32 index = 0;
+ do
+ {
+ OUString token( unoName.getToken( 0, '.', index ) );
+ buf.append( token.getLength() );
+ OString c_token( OUStringToOString( token, RTL_TEXTENCODING_ASCII_US ) );
+ buf.append( c_token );
+ }
+ while (index >= 0);
+ buf.append( 'E' );
+
+ OString symName( buf.makeStringAndClear() );
+ rtti = (type_info *)dlsym( m_hApp, symName.getStr() );
+
+ if (rtti)
+ {
+ pair< t_rtti_map::iterator, bool > insertion(
+ m_rttis.insert( t_rtti_map::value_type( unoName, rtti ) ) );
+ OSL_ENSURE( insertion.second, "### inserting new rtti failed?!" );
+ }
+ else
+ {
+ // try to lookup the symbol in the generated rtti map
+ t_rtti_map::const_iterator iFind( m_generatedRttis.find( unoName ) );
+ if (iFind == m_generatedRttis.end())
+ {
+ // we must generate it !
+ // symbol and rtti-name is nearly identical,
+ // the symbol is prefixed with _ZTI
+ char const * rttiName = symName.getStr() +4;
+#if OSL_DEBUG_LEVEL > 1
+ fprintf( stderr,"generated rtti for %s\n", rttiName );
+#endif
+ if (pTypeDescr->pBaseTypeDescription)
+ {
+ // ensure availability of base
+ type_info * base_rtti = getRTTI(
+ (typelib_CompoundTypeDescription *)pTypeDescr->pBaseTypeDescription );
+ rtti = new __si_class_type_info(
+ strdup( rttiName ), (__class_type_info *)base_rtti );
+ }
+ else
+ {
+ // this class has no base class
+ rtti = new __class_type_info( strdup( rttiName ) );
+ }
+
+ pair< t_rtti_map::iterator, bool > insertion(
+ m_generatedRttis.insert( t_rtti_map::value_type( unoName, rtti ) ) );
+ OSL_ENSURE( insertion.second, "### inserting new generated rtti failed?!" );
+ }
+ else // taking already generated rtti
+ {
+ rtti = iFind->second;
+ }
+ }
+ }
+ else
+ {
+ rtti = iRttiFind->second;
+ }
+
+ return rtti;
+}
+
+//--------------------------------------------------------------------------------------------------
+static void deleteException( void * pExc )
+{
+ __cxa_exception const * header = ((__cxa_exception const *)pExc - 1);
+ typelib_TypeDescription * pTD = 0;
+ OUString unoName( toUNOname( header->exceptionType->name() ) );
+ ::typelib_typedescription_getByName( &pTD, unoName.pData );
+ OSL_ENSURE( pTD, "### unknown exception type! leaving out destruction => leaking!!!" );
+ if (pTD)
+ {
+ ::uno_destructData( pExc, pTD, cpp_release );
+ ::typelib_typedescription_release( pTD );
+ }
+}
+
+//==================================================================================================
+void raiseException( uno_Any * pUnoExc, uno_Mapping * pUno2Cpp )
+{
+ void * pCppExc;
+ type_info * rtti;
+
+ {
+ // construct cpp exception object
+ typelib_TypeDescription * pTypeDescr = 0;
+ TYPELIB_DANGER_GET( &pTypeDescr, pUnoExc->pType );
+ OSL_ASSERT( pTypeDescr );
+ if (! pTypeDescr)
+ terminate();
+
+ pCppExc = __cxa_allocate_exception( pTypeDescr->nSize );
+ ::uno_copyAndConvertData( pCppExc, pUnoExc->pData, pTypeDescr, pUno2Cpp );
+
+ // destruct uno exception
+ ::uno_any_destruct( pUnoExc, 0 );
+ // avoiding locked counts
+ static RTTI * s_rtti = 0;
+ if (! s_rtti)
+ {
+ MutexGuard guard( Mutex::getGlobalMutex() );
+ if (! s_rtti)
+ {
+#ifdef LEAK_STATIC_DATA
+ s_rtti = new RTTI();
+#else
+ static RTTI rtti_data;
+ s_rtti = &rtti_data;
+#endif
+ }
+ }
+ rtti = (type_info *)s_rtti->getRTTI( (typelib_CompoundTypeDescription *) pTypeDescr );
+ TYPELIB_DANGER_RELEASE( pTypeDescr );
+ OSL_ENSURE( rtti, "### no rtti for throwing exception!" );
+ if (! rtti)
+ terminate();
+ }
+
+ __cxa_throw( pCppExc, rtti, deleteException );
+}
+
+//==================================================================================================
+void fillUnoException( __cxa_exception * header, uno_Any * pExc, uno_Mapping * pCpp2Uno )
+{
+ OSL_ENSURE( header, "### no exception header!!!" );
+ if (! header)
+ terminate();
+
+ typelib_TypeDescription * pExcTypeDescr = 0;
+ OUString unoName( toUNOname( header->exceptionType->name() ) );
+ ::typelib_typedescription_getByName( &pExcTypeDescr, unoName.pData );
+ OSL_ENSURE( pExcTypeDescr, "### can not get type description for exception!!!" );
+ if (! pExcTypeDescr)
+ terminate();
+
+ // construct uno exception any
+ ::uno_any_constructAndConvert( pExc, header->adjustedPtr, pExcTypeDescr, pCpp2Uno );
+ ::typelib_typedescription_release( pExcTypeDescr );
+}
+
+}
+
diff --git a/bridges/source/cpp_uno/gcc3_linux_powerpc/makefile.mk b/bridges/source/cpp_uno/gcc3_linux_powerpc/makefile.mk
new file mode 100644
index 000000000000..02906e1a0e94
--- /dev/null
+++ b/bridges/source/cpp_uno/gcc3_linux_powerpc/makefile.mk
@@ -0,0 +1,80 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..$/..$/..
+
+PRJNAME=bridges
+TARGET=gcc3_uno
+LIBTARGET=no
+ENABLE_EXCEPTIONS=TRUE
+
+# --- Settings -----------------------------------------------------
+
+.INCLUDE : settings.mk
+
+# --- Files --------------------------------------------------------
+.IF "$(COM)$(OS)$(CPU)$(COMNAME)$(CPUNAME)" == "GCCLINUXPgcc3POWERPC"
+
+.IF "$(cppu_no_leak)" == ""
+CFLAGS += -DLEAK_STATIC_DATA
+.ENDIF
+
+# In case someone enabled the non-standard -fomit-frame-pointer which does not
+# work with the .cxx sources in this directory:
+CFLAGSCXX += -fno-omit-frame-pointer
+
+NOOPTFILES= \
+ $(SLO)$/uno2cpp.obj
+
+
+CFLAGSNOOPT=-O0
+
+SLOFILES= \
+ $(SLO)$/except.obj \
+ $(SLO)$/cpp2uno.obj \
+ $(SLO)$/uno2cpp.obj
+
+SHL1TARGET= $(TARGET)
+
+SHL1DEF=$(MISC)$/$(SHL1TARGET).def
+SHL1IMPLIB=i$(TARGET)
+SHL1VERSIONMAP=..$/..$/bridge_exports.map
+SHL1RPATH=URELIB
+
+SHL1OBJS= $(SLOFILES)
+SHL1LIBS = $(SLB)$/cpp_uno_shared.lib
+
+SHL1STDLIBS= \
+ $(CPPULIB) \
+ $(SALLIB)
+
+.ENDIF
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : target.mk
+
diff --git a/bridges/source/cpp_uno/gcc3_linux_powerpc/share.hxx b/bridges/source/cpp_uno/gcc3_linux_powerpc/share.hxx
new file mode 100644
index 000000000000..6e148b489508
--- /dev/null
+++ b/bridges/source/cpp_uno/gcc3_linux_powerpc/share.hxx
@@ -0,0 +1,91 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "uno/mapping.h"
+
+#include <typeinfo>
+#include <exception>
+#include <cstddef>
+
+namespace CPPU_CURRENT_NAMESPACE
+{
+
+ void dummy_can_throw_anything( char const * );
+
+
+// ----- following decl from libstdc++-v3/libsupc++/unwind-cxx.h and unwind.h
+
+struct _Unwind_Exception
+{
+ unsigned exception_class __attribute__((__mode__(__DI__)));
+ void * exception_cleanup;
+ unsigned private_1 __attribute__((__mode__(__word__)));
+ unsigned private_2 __attribute__((__mode__(__word__)));
+} __attribute__((__aligned__));
+
+struct __cxa_exception
+{
+ ::std::type_info *exceptionType;
+ void (*exceptionDestructor)(void *);
+
+ ::std::unexpected_handler unexpectedHandler;
+ ::std::terminate_handler terminateHandler;
+
+ __cxa_exception *nextException;
+
+ int handlerCount;
+
+ int handlerSwitchValue;
+ const unsigned char *actionRecord;
+ const unsigned char *languageSpecificData;
+ void *catchTemp;
+ void *adjustedPtr;
+
+ _Unwind_Exception unwindHeader;
+};
+
+extern "C" void *__cxa_allocate_exception(
+ std::size_t thrown_size ) throw();
+extern "C" void __cxa_throw (
+ void *thrown_exception, std::type_info *tinfo, void (*dest) (void *) ) __attribute__((noreturn));
+
+struct __cxa_eh_globals
+{
+ __cxa_exception *caughtExceptions;
+ unsigned int uncaughtExceptions;
+};
+extern "C" __cxa_eh_globals *__cxa_get_globals () throw();
+
+// -----
+
+//==================================================================================================
+void raiseException(
+ uno_Any * pUnoExc, uno_Mapping * pUno2Cpp );
+//==================================================================================================
+void fillUnoException(
+ __cxa_exception * header, uno_Any *, uno_Mapping * pCpp2Uno );
+}
diff --git a/bridges/source/cpp_uno/gcc3_linux_powerpc/uno2cpp.cxx b/bridges/source/cpp_uno/gcc3_linux_powerpc/uno2cpp.cxx
new file mode 100644
index 000000000000..ec585e95fabf
--- /dev/null
+++ b/bridges/source/cpp_uno/gcc3_linux_powerpc/uno2cpp.cxx
@@ -0,0 +1,672 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_bridges.hxx"
+
+#include <malloc.h>
+
+#include <com/sun/star/uno/genfunc.hxx>
+#include <uno/data.h>
+
+#include "bridges/cpp_uno/shared/bridge.hxx"
+#include "bridges/cpp_uno/shared/types.hxx"
+#include "bridges/cpp_uno/shared/unointerfaceproxy.hxx"
+#include "bridges/cpp_uno/shared/vtables.hxx"
+
+#include "share.hxx"
+
+
+using namespace ::rtl;
+using namespace ::com::sun::star::uno;
+
+namespace
+{
+
+
+//==================================================================================================
+static void callVirtualMethod(
+ void * pAdjustedThisPtr,
+ sal_Int32 nVtableIndex,
+ void * pRegisterReturn,
+ typelib_TypeClass eReturnType,
+ char * pPT,
+ sal_Int32 * pStackLongs,
+ sal_Int32 nStackLongs)
+{
+
+ // parameter list is mixed list of * and values
+ // reference parameters are pointers
+
+ // the basic idea here is to use gpr[8] as a storage area for
+ // the future values of registers r3 to r10 needed for the call,
+ // and similarly fpr[8] as a storage area for the future values
+ // of floating point registers f1 to f8
+
+ unsigned long * mfunc; // actual function to be invoked
+ void (*ptr)();
+ int gpr[8]; // storage for gpregisters, map to r3-r10
+ int off; // offset used to find function
+#ifndef __NO_FPRS__
+ double fpr[8]; // storage for fpregisters, map to f1-f8
+ int f; // number of fprs mapped so far
+ double dret; // temporary function return values
+#endif
+ int n; // number of gprs mapped so far
+ long *p; // pointer to parameter overflow area
+ int c; // character of parameter type being decoded
+ int iret, iret2;
+
+ // Because of the Power PC calling conventions we could be passing
+ // parameters in both register types and on the stack. To create the
+ // stack parameter area we need we now simply allocate local
+ // variable storage param[] that is at least the size of the parameter stack
+ // (more than enough space) which we can overwrite the parameters into.
+
+ // Note: This keeps us from having to decode the signature twice and
+ // prevents problems with later local variables.
+
+ // Note: could require up to 2*nStackLongs words of parameter stack area
+ // if the call has many float parameters (i.e. floats take up only 1
+ // word on the stack but double takes 2 words in parameter area in the
+ // stack frame .
+
+ // Update! floats on the outgoing parameter stack only take up 1 word
+ // (stfs is used) which is not correct according to the ABI but we
+ // will match what the compiler does until this is figured out
+
+ // this grows the current stack to the appropriate size
+ // and sets the outgoing stack pointer p to the right place
+ __asm__ __volatile__ (
+ "rlwinm %0,%0,3,3,28\n\t"
+ "addi %0,%0,22\n\t"
+ "rlwinm %0,%0,0,4,28\n\t"
+ "lwz 0,0(1)\n\t"
+ "subf 1,%0,1\n\t"
+ "stw 0,0(1)\n\t"
+ : : "r" (nStackLongs) : "0" );
+
+ __asm__ __volatile__ ( "addi %0,1,8" : "=r" (p) : );
+
+ // never called
+ // if (! pAdjustedThisPtr ) dummy_can_throw_anything("xxx"); // address something
+
+
+ // now begin to load the C++ function arguments into storage
+ n = 0;
+#ifndef __NO_FPRS__
+ f = 0;
+#endif
+
+ // now we need to parse the entire signature string */
+ // until we get the END indicator */
+
+ // treat complex return pointer like any other parameter //
+
+#if 0
+ /* Let's figure out what is really going on here*/
+ fprintf(stderr,"callVirtualMethod paramters string is %s\n",pPT);
+ int k = nStackLongs;
+ long * q = (long *)pStackLongs;
+ while (k > 0) {
+ fprintf(stderr,"uno stack is: %x\n",*q);
+ k--;
+ q++;
+ }
+#endif
+
+ /* parse the argument list up to the ending ) */
+ while (*pPT != 'X') {
+ c = *pPT;
+ switch (c) {
+ case 'D': /* type is double */
+#ifndef __NO_FPRS__
+ if (f < 8) {
+ fpr[f++] = *((double *)pStackLongs); /* store in register */
+#else
+ if (n & 1)
+ n++;
+ if (n < 8) {
+ gpr[n++] = *pStackLongs;
+ gpr[n++] = *(pStackLongs+1);
+#endif
+ } else {
+ if (((long) p) & 4)
+ p++;
+ *p++ = *pStackLongs; /* or on the parameter stack */
+ *p++ = *(pStackLongs + 1);
+ }
+ pStackLongs += 2;
+ break;
+
+ case 'F': /* type is float */
+ /* this assumes that floats are stored as 1 32 bit word on param
+ stack and that if passed in parameter stack to C, should be
+ as double word.
+
+ Whoops: the abi is not actually followed by gcc, need to
+ store floats as a *single* word on outgoing parameter stack
+ to match what gcc actually does
+ */
+#ifndef __NO_FPRS__
+ if (f < 8) {
+ fpr[f++] = *((float *)pStackLongs);
+#else
+ if (n < 8) {
+ gpr[n++] = *pStackLongs;
+#endif
+ } else {
+#if 0 /* if abi were followed */
+ if (((long) p) & 4)
+ p++;
+ *((double *)p) = *((float *)pStackLongs);
+ p += 2;
+#else
+ *((float *)p) = *((float *)pStackLongs);
+ p += 1;
+#endif
+ }
+ pStackLongs += 1;
+ break;
+
+ case 'H': /* type is long long */
+ if (n & 1) n++; /* note even elements gpr[] will map to
+ odd registers*/
+ if (n <= 6) {
+ gpr[n++] = *pStackLongs;
+ gpr[n++] = *(pStackLongs+1);
+ } else {
+ if (((long) p) & 4)
+ p++;
+ *p++ = *pStackLongs;
+ *p++ = *(pStackLongs+1);
+ }
+ pStackLongs += 2;
+ break;
+
+ case 'S':
+ if (n < 8) {
+ gpr[n++] = *((unsigned short*)pStackLongs);
+ } else {
+ *p++ = *((unsigned short *)pStackLongs);
+ }
+ pStackLongs += 1;
+ break;
+
+ case 'B':
+ if (n < 8) {
+ gpr[n++] = *((char *)pStackLongs);
+ } else {
+ *p++ = *((char *)pStackLongs);
+ }
+ pStackLongs += 1;
+ break;
+
+ default:
+ if (n < 8) {
+ gpr[n++] = *pStackLongs;
+ } else {
+ *p++ = *pStackLongs;
+ }
+ pStackLongs += 1;
+ break;
+ }
+ pPT++;
+ }
+
+ /* figure out the address of the function we need to invoke */
+ off = nVtableIndex;
+ off = off * 4; // 4 bytes per slot
+ mfunc = *((unsigned long **)pAdjustedThisPtr); // get the address of the vtable
+ mfunc = (unsigned long *)((char *)mfunc + off); // get the address from the vtable entry at offset
+ mfunc = *((unsigned long **)mfunc); // the function is stored at the address
+ ptr = (void (*)())mfunc;
+
+ /* Set up the machine registers and invoke the function */
+
+ __asm__ __volatile__ (
+ "lwz 3, 0(%0)\n\t"
+ "lwz 4, 4(%0)\n\t"
+ "lwz 5, 8(%0)\n\t"
+ "lwz 6, 12(%0)\n\t"
+ "lwz 7, 16(%0)\n\t"
+ "lwz 8, 20(%0)\n\t"
+ "lwz 9, 24(%0)\n\t"
+ "lwz 10, 28(%0)\n\t"
+#ifndef __NO_FPRS__
+ "lfd 1, 0(%1)\n\t"
+ "lfd 2, 8(%1)\n\t"
+ "lfd 3, 16(%1)\n\t"
+ "lfd 4, 24(%1)\n\t"
+ "lfd 5, 32(%1)\n\t"
+ "lfd 6, 40(%1)\n\t"
+ "lfd 7, 48(%1)\n\t"
+ "lfd 8, 56(%1)\n\t"
+ : : "r" (gpr), "r" (fpr)
+#else
+ : : "r" (gpr)
+#endif
+ : "0", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"
+ );
+
+ (*ptr)();
+
+ __asm__ __volatile__ (
+ "mr %0, 3\n\t"
+ "mr %1, 4\n\t"
+#ifndef __NO_FPRS__
+ "fmr %2, 1\n\t"
+ : "=r" (iret), "=r" (iret2), "=f" (dret)
+#else
+ : "=r" (iret), "=r" (iret2)
+#endif
+ : );
+
+ switch( eReturnType )
+ {
+ case typelib_TypeClass_HYPER:
+ case typelib_TypeClass_UNSIGNED_HYPER:
+ ((long*)pRegisterReturn)[0] = iret;
+ ((long*)pRegisterReturn)[1] = iret2;
+ case typelib_TypeClass_LONG:
+ case typelib_TypeClass_UNSIGNED_LONG:
+ case typelib_TypeClass_ENUM:
+ ((long*)pRegisterReturn)[0] = iret;
+ break;
+ case typelib_TypeClass_CHAR:
+ case typelib_TypeClass_SHORT:
+ case typelib_TypeClass_UNSIGNED_SHORT:
+ *(unsigned short*)pRegisterReturn = (unsigned short)iret;
+ break;
+ case typelib_TypeClass_BOOLEAN:
+ case typelib_TypeClass_BYTE:
+ *(unsigned char*)pRegisterReturn = (unsigned char)iret;
+ break;
+ case typelib_TypeClass_FLOAT:
+#ifndef __NO_FPRS__
+ *(float*)pRegisterReturn = (float)dret;
+#else
+ ((unsigned int*)pRegisterReturn)[0] = iret;
+#endif
+ break;
+ case typelib_TypeClass_DOUBLE:
+#ifndef __NO_FPRS__
+ *(double*)pRegisterReturn = dret;
+#else
+ ((unsigned int*)pRegisterReturn)[0] = iret;
+ ((unsigned int*)pRegisterReturn)[1] = iret2;
+#endif
+ break;
+ default:
+ break;
+ }
+}
+
+
+//==================================================================================================
+static void cpp_call(
+ bridges::cpp_uno::shared::UnoInterfaceProxy * pThis,
+ bridges::cpp_uno::shared::VtableSlot aVtableSlot,
+ typelib_TypeDescriptionReference * pReturnTypeRef,
+ sal_Int32 nParams, typelib_MethodParameter * pParams,
+ void * pUnoReturn, void * pUnoArgs[], uno_Any ** ppUnoExc )
+{
+ // max space for: [complex ret ptr], values|ptr ...
+ char * pCppStack =
+ (char *)alloca( sizeof(sal_Int32) + ((nParams+2) * sizeof(sal_Int64)) );
+ char * pCppStackStart = pCppStack;
+
+ // need to know parameter types for callVirtualMethod so generate a signature string
+ char * pParamType = (char *) alloca(nParams+2);
+ char * pPT = pParamType;
+
+ // return
+ typelib_TypeDescription * pReturnTypeDescr = 0;
+ TYPELIB_DANGER_GET( &pReturnTypeDescr, pReturnTypeRef );
+ // OSL_ENSURE( pReturnTypeDescr, "### expected return type description!" );
+
+ void * pCppReturn = 0; // if != 0 && != pUnoReturn, needs reconversion
+
+ if (pReturnTypeDescr)
+ {
+ if (bridges::cpp_uno::shared::isSimpleType( pReturnTypeDescr ))
+ {
+ pCppReturn = pUnoReturn; // direct way for simple types
+ }
+ else
+ {
+ // complex return via ptr
+ pCppReturn = *(void **)pCppStack =
+ (bridges::cpp_uno::shared::relatesToInterfaceType( pReturnTypeDescr )
+ ? alloca( pReturnTypeDescr->nSize ): pUnoReturn); // direct way
+ *pPT++ = 'I'; //signify that a complex return type on stack
+ pCppStack += sizeof(void *);
+ }
+ }
+ // push this
+ void* pAdjustedThisPtr = reinterpret_cast< void **>(pThis->getCppI()) + aVtableSlot.offset;
+ *(void**)pCppStack = pAdjustedThisPtr;
+ pCppStack += sizeof( void* );
+ *pPT++ = 'I';
+
+ // stack space
+ // OSL_ENSURE( sizeof(void *) == sizeof(sal_Int32), "### unexpected size!" );
+ // args
+ void ** pCppArgs = (void **)alloca( 3 * sizeof(void *) * nParams );
+ // indizes of values this have to be converted (interface conversion cpp<=>uno)
+ sal_Int32 * pTempIndizes = (sal_Int32 *)(pCppArgs + nParams);
+ // type descriptions for reconversions
+ typelib_TypeDescription ** ppTempParamTypeDescr = (typelib_TypeDescription **)(pCppArgs + (2 * nParams));
+
+ sal_Int32 nTempIndizes = 0;
+
+ for ( sal_Int32 nPos = 0; nPos < nParams; ++nPos )
+ {
+ const typelib_MethodParameter & rParam = pParams[nPos];
+ typelib_TypeDescription * pParamTypeDescr = 0;
+ TYPELIB_DANGER_GET( &pParamTypeDescr, rParam.pTypeRef );
+
+ if (!rParam.bOut && bridges::cpp_uno::shared::isSimpleType( pParamTypeDescr ))
+ {
+ uno_copyAndConvertData( pCppArgs[nPos] = pCppStack, pUnoArgs[nPos], pParamTypeDescr,
+ pThis->getBridge()->getUno2Cpp() );
+
+ switch (pParamTypeDescr->eTypeClass)
+ {
+
+ // we need to know type of each param so that we know whether to use
+ // gpr or fpr to pass in parameters:
+ // Key: I - int, long, pointer, etc means pass in gpr
+ // B - byte value passed in gpr
+ // S - short value passed in gpr
+ // F - float value pass in fpr
+ // D - double value pass in fpr
+ // H - long long int pass in proper pairs of gpr (3,4) (5,6), etc
+ // X - indicates end of parameter description string
+
+ case typelib_TypeClass_LONG:
+ case typelib_TypeClass_UNSIGNED_LONG:
+ case typelib_TypeClass_ENUM:
+ *pPT++ = 'I';
+ break;
+ case typelib_TypeClass_SHORT:
+ case typelib_TypeClass_CHAR:
+ case typelib_TypeClass_UNSIGNED_SHORT:
+ *pPT++ = 'S';
+ break;
+ case typelib_TypeClass_BOOLEAN:
+ case typelib_TypeClass_BYTE:
+ *pPT++ = 'B';
+ break;
+ case typelib_TypeClass_FLOAT:
+ *pPT++ = 'F';
+ break;
+ case typelib_TypeClass_DOUBLE:
+ *pPT++ = 'D';
+ pCppStack += sizeof(sal_Int32); // extra long
+ break;
+ case typelib_TypeClass_HYPER:
+ case typelib_TypeClass_UNSIGNED_HYPER:
+ *pPT++ = 'H';
+ pCppStack += sizeof(sal_Int32); // extra long
+ default:
+ break;
+ }
+
+ // no longer needed
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ else // ptr to complex value | ref
+ {
+ if (! rParam.bIn) // is pure out
+ {
+ // cpp out is constructed mem, uno out is not!
+ uno_constructData(
+ *(void **)pCppStack = pCppArgs[nPos] = alloca( pParamTypeDescr->nSize ),
+ pParamTypeDescr );
+ pTempIndizes[nTempIndizes] = nPos; // default constructed for cpp call
+ // will be released at reconversion
+ ppTempParamTypeDescr[nTempIndizes++] = pParamTypeDescr;
+ }
+ // is in/inout
+ else if (bridges::cpp_uno::shared::relatesToInterfaceType( pParamTypeDescr ))
+ {
+ uno_copyAndConvertData(
+ *(void **)pCppStack = pCppArgs[nPos] = alloca( pParamTypeDescr->nSize ),
+ pUnoArgs[nPos], pParamTypeDescr,
+ pThis->getBridge()->getUno2Cpp() );
+
+ pTempIndizes[nTempIndizes] = nPos; // has to be reconverted
+ // will be released at reconversion
+ ppTempParamTypeDescr[nTempIndizes++] = pParamTypeDescr;
+ }
+ else // direct way
+ {
+ *(void **)pCppStack = pCppArgs[nPos] = pUnoArgs[nPos];
+ // no longer needed
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ // KBH: FIXME: is this the right way to pass these
+ *pPT++='I';
+ }
+ pCppStack += sizeof(sal_Int32); // standard parameter length
+ }
+
+ // terminate the signature string
+ *pPT++='X';
+ *pPT=0;
+
+ try
+ {
+ OSL_ENSURE( !( (pCppStack - pCppStackStart ) & 3), "UNALIGNED STACK !!! (Please DO panic)" );
+ callVirtualMethod(
+ pAdjustedThisPtr, aVtableSlot.index,
+ pCppReturn, pReturnTypeDescr->eTypeClass, pParamType,
+ (sal_Int32 *)pCppStackStart, (pCppStack - pCppStackStart) / sizeof(sal_Int32) );
+ // NO exception occured...
+ *ppUnoExc = 0;
+
+ // reconvert temporary params
+ for ( ; nTempIndizes--; )
+ {
+ sal_Int32 nIndex = pTempIndizes[nTempIndizes];
+ typelib_TypeDescription * pParamTypeDescr = ppTempParamTypeDescr[nTempIndizes];
+
+ if (pParams[nIndex].bIn)
+ {
+ if (pParams[nIndex].bOut) // inout
+ {
+ uno_destructData( pUnoArgs[nIndex], pParamTypeDescr, 0 ); // destroy uno value
+ uno_copyAndConvertData( pUnoArgs[nIndex], pCppArgs[nIndex], pParamTypeDescr,
+ pThis->getBridge()->getCpp2Uno() );
+ }
+ }
+ else // pure out
+ {
+ uno_copyAndConvertData( pUnoArgs[nIndex], pCppArgs[nIndex], pParamTypeDescr,
+ pThis->getBridge()->getCpp2Uno() );
+ }
+ // destroy temp cpp param => cpp: every param was constructed
+ uno_destructData( pCppArgs[nIndex], pParamTypeDescr, cpp_release );
+
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ // return value
+ if (pCppReturn && pUnoReturn != pCppReturn)
+ {
+ uno_copyAndConvertData( pUnoReturn, pCppReturn, pReturnTypeDescr,
+ pThis->getBridge()->getCpp2Uno() );
+ uno_destructData( pCppReturn, pReturnTypeDescr, cpp_release );
+ }
+ }
+ catch (...)
+ {
+ // fill uno exception
+ fillUnoException( CPPU_CURRENT_NAMESPACE::__cxa_get_globals()->caughtExceptions,
+ *ppUnoExc, pThis->getBridge()->getCpp2Uno() );
+
+ // temporary params
+ for ( ; nTempIndizes--; )
+ {
+ sal_Int32 nIndex = pTempIndizes[nTempIndizes];
+ // destroy temp cpp param => cpp: every param was constructed
+ uno_destructData( pCppArgs[nIndex], ppTempParamTypeDescr[nTempIndizes], cpp_release );
+ TYPELIB_DANGER_RELEASE( ppTempParamTypeDescr[nTempIndizes] );
+ }
+ // return type
+ if (pReturnTypeDescr)
+ TYPELIB_DANGER_RELEASE( pReturnTypeDescr );
+ }
+}
+
+}
+
+namespace bridges { namespace cpp_uno { namespace shared {
+
+void unoInterfaceProxyDispatch(
+ uno_Interface * pUnoI, const typelib_TypeDescription * pMemberDescr,
+ void * pReturn, void * pArgs[], uno_Any ** ppException )
+{
+ // is my surrogate
+ bridges::cpp_uno::shared::UnoInterfaceProxy * pThis
+ = static_cast< bridges::cpp_uno::shared::UnoInterfaceProxy *> (pUnoI);
+
+ switch (pMemberDescr->eTypeClass)
+ {
+ case typelib_TypeClass_INTERFACE_ATTRIBUTE:
+ {
+
+ VtableSlot aVtableSlot(
+ getVtableSlot(
+ reinterpret_cast<
+ typelib_InterfaceAttributeTypeDescription const * >(
+ pMemberDescr)));
+
+ if (pReturn)
+ {
+ // dependent dispatch
+ cpp_call(
+ pThis, aVtableSlot,
+ ((typelib_InterfaceAttributeTypeDescription *)pMemberDescr)->pAttributeTypeRef,
+ 0, 0, // no params
+ pReturn, pArgs, ppException );
+ }
+ else
+ {
+ // is SET
+ typelib_MethodParameter aParam;
+ aParam.pTypeRef =
+ ((typelib_InterfaceAttributeTypeDescription *)pMemberDescr)->pAttributeTypeRef;
+ aParam.bIn = sal_True;
+ aParam.bOut = sal_False;
+
+ typelib_TypeDescriptionReference * pReturnTypeRef = 0;
+ OUString aVoidName( RTL_CONSTASCII_USTRINGPARAM("void") );
+ typelib_typedescriptionreference_new(
+ &pReturnTypeRef, typelib_TypeClass_VOID, aVoidName.pData );
+
+ // dependent dispatch
+ aVtableSlot.index += 1; //get then set method
+ cpp_call(
+ pThis, aVtableSlot,
+ pReturnTypeRef,
+ 1, &aParam,
+ pReturn, pArgs, ppException );
+
+ typelib_typedescriptionreference_release( pReturnTypeRef );
+ }
+
+ break;
+ }
+ case typelib_TypeClass_INTERFACE_METHOD:
+ {
+
+ VtableSlot aVtableSlot(
+ getVtableSlot(
+ reinterpret_cast<
+ typelib_InterfaceMethodTypeDescription const * >(
+ pMemberDescr)));
+ switch (aVtableSlot.index)
+ {
+ // standard calls
+ case 1: // acquire uno interface
+ (*pUnoI->acquire)( pUnoI );
+ *ppException = 0;
+ break;
+ case 2: // release uno interface
+ (*pUnoI->release)( pUnoI );
+ *ppException = 0;
+ break;
+ case 0: // queryInterface() opt
+ {
+ typelib_TypeDescription * pTD = 0;
+ TYPELIB_DANGER_GET( &pTD, reinterpret_cast< Type * >( pArgs[0] )->getTypeLibType() );
+ if (pTD)
+ {
+ uno_Interface * pInterface = 0;
+ (*pThis->pBridge->getUnoEnv()->getRegisteredInterface)(
+ pThis->pBridge->getUnoEnv(),
+ (void **)&pInterface, pThis->oid.pData, (typelib_InterfaceTypeDescription *)pTD );
+
+ if (pInterface)
+ {
+ ::uno_any_construct(
+ reinterpret_cast< uno_Any * >( pReturn ),
+ &pInterface, pTD, 0 );
+ (*pInterface->release)( pInterface );
+ TYPELIB_DANGER_RELEASE( pTD );
+ *ppException = 0;
+ break;
+ }
+ TYPELIB_DANGER_RELEASE( pTD );
+ }
+ } // else perform queryInterface()
+ default:
+ // dependent dispatch
+ cpp_call(
+ pThis, aVtableSlot,
+ ((typelib_InterfaceMethodTypeDescription *)pMemberDescr)->pReturnTypeRef,
+ ((typelib_InterfaceMethodTypeDescription *)pMemberDescr)->nParams,
+ ((typelib_InterfaceMethodTypeDescription *)pMemberDescr)->pParams,
+ pReturn, pArgs, ppException );
+ }
+ break;
+ }
+ default:
+ {
+ ::com::sun::star::uno::RuntimeException aExc(
+ OUString( RTL_CONSTASCII_USTRINGPARAM("illegal member type description!") ),
+ ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >() );
+
+ Type const & rExcType = ::getCppuType( &aExc );
+ // binary identical null reference
+ ::uno_type_any_construct( *ppException, &aExc, rExcType.getTypeLibType(), 0 );
+ }
+ }
+}
+
+} } }
diff --git a/bridges/source/cpp_uno/gcc3_linux_powerpc64/cpp2uno.cxx b/bridges/source/cpp_uno/gcc3_linux_powerpc64/cpp2uno.cxx
new file mode 100644
index 000000000000..c80e20feb18a
--- /dev/null
+++ b/bridges/source/cpp_uno/gcc3_linux_powerpc64/cpp2uno.cxx
@@ -0,0 +1,722 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_bridges.hxx"
+
+#include <com/sun/star/uno/genfunc.hxx>
+#include <uno/data.h>
+#include <typelib/typedescription.hxx>
+
+#include "bridges/cpp_uno/shared/bridge.hxx"
+#include "bridges/cpp_uno/shared/cppinterfaceproxy.hxx"
+#include "bridges/cpp_uno/shared/types.hxx"
+#include "bridges/cpp_uno/shared/vtablefactory.hxx"
+
+#include "share.hxx"
+#include <stdio.h>
+#include <string.h>
+
+
+using namespace ::com::sun::star::uno;
+
+namespace
+{
+
+//==================================================================================================
+static typelib_TypeClass cpp2uno_call(
+ bridges::cpp_uno::shared::CppInterfaceProxy * pThis,
+ const typelib_TypeDescription * pMemberTypeDescr,
+ typelib_TypeDescriptionReference * pReturnTypeRef, // 0 indicates void return
+ sal_Int32 nParams, typelib_MethodParameter * pParams,
+ void ** gpreg, void ** fpreg, void ** ovrflw,
+ sal_Int64 * pRegisterReturn /* space for register return */ )
+{
+#ifdef CMC_DEBUG
+ fprintf(stderr, "as far as cpp2uno_call\n");
+#endif
+
+ int ng = 0; //number of gpr registers used
+ int nf = 0; //number of fpr regsiters used
+
+ // gpreg: [ret *], this, [gpr params]
+ // fpreg: [fpr params]
+ // ovrflw: [gpr or fpr params (properly aligned)]
+
+ // return
+ typelib_TypeDescription * pReturnTypeDescr = 0;
+ if (pReturnTypeRef)
+ TYPELIB_DANGER_GET( &pReturnTypeDescr, pReturnTypeRef );
+
+ void * pUnoReturn = 0;
+ void * pCppReturn = 0; // complex return ptr: if != 0 && != pUnoReturn, reconversion need
+
+ if (pReturnTypeDescr)
+ {
+ if (bridges::cpp_uno::shared::isSimpleType( pReturnTypeDescr ))
+ {
+ pUnoReturn = pRegisterReturn; // direct way for simple types
+ }
+ else // complex return via ptr (pCppReturn)
+ {
+ pCppReturn = *(void **)gpreg;
+ gpreg++;
+ ng++;
+
+ pUnoReturn = (bridges::cpp_uno::shared::relatesToInterfaceType( pReturnTypeDescr )
+ ? alloca( pReturnTypeDescr->nSize )
+ : pCppReturn); // direct way
+ }
+ }
+ // pop this
+ gpreg++;
+ ng++;
+
+ // stack space
+ OSL_ENSURE( sizeof(void *) == sizeof(sal_Int64), "### unexpected size!" );
+ // parameters
+ void ** pUnoArgs = (void **)alloca( 4 * sizeof(void *) * nParams );
+ void ** pCppArgs = pUnoArgs + nParams;
+ // indizes of values this have to be converted (interface conversion cpp<=>uno)
+ sal_Int32 * pTempIndizes = (sal_Int32 *)(pUnoArgs + (2 * nParams));
+ // type descriptions for reconversions
+ typelib_TypeDescription ** ppTempParamTypeDescr = (typelib_TypeDescription **)(pUnoArgs + (3 * nParams));
+
+ sal_Int32 nTempIndizes = 0;
+ bool bOverFlowUsed = false;
+ for ( sal_Int32 nPos = 0; nPos < nParams; ++nPos )
+ {
+ const typelib_MethodParameter & rParam = pParams[nPos];
+ typelib_TypeDescription * pParamTypeDescr = 0;
+ TYPELIB_DANGER_GET( &pParamTypeDescr, rParam.pTypeRef );
+
+#ifdef CMC_DEBUG
+ fprintf(stderr, "arg %d of %d\n", nPos, nParams);
+#endif
+
+ if (!rParam.bOut && bridges::cpp_uno::shared::isSimpleType( pParamTypeDescr ))
+ {
+#ifdef CMC_DEBUG
+ fprintf(stderr, "simple\n");
+#endif
+
+ switch (pParamTypeDescr->eTypeClass)
+ {
+ case typelib_TypeClass_FLOAT:
+ case typelib_TypeClass_DOUBLE:
+ if (nf < ppc64::MAX_SSE_REGS)
+ {
+ if (pParamTypeDescr->eTypeClass == typelib_TypeClass_FLOAT)
+ {
+ float tmp = (float) (*((double *)fpreg));
+ (*((float *) fpreg)) = tmp;
+ }
+ pCppArgs[nPos] = pUnoArgs[nPos] = fpreg++;
+ nf++;
+ }
+ else
+ {
+ pCppArgs[nPos] = pUnoArgs[nPos] = ovrflw;
+ bOverFlowUsed = true;
+ }
+ if (bOverFlowUsed) ovrflw++;
+ break;
+ case typelib_TypeClass_BYTE:
+ case typelib_TypeClass_BOOLEAN:
+ if (ng < ppc64::MAX_GPR_REGS)
+ {
+ pCppArgs[nPos] = pUnoArgs[nPos] = (((char *)gpreg) + (sizeof(void*)-1));
+ ng++;
+ gpreg++;
+ }
+ else
+ {
+ pCppArgs[nPos] = pUnoArgs[nPos] = (((char *)ovrflw) + (sizeof(void*)-1));
+ bOverFlowUsed = true;
+ }
+ if (bOverFlowUsed) ovrflw++;
+ break;
+ case typelib_TypeClass_CHAR:
+ case typelib_TypeClass_SHORT:
+ case typelib_TypeClass_UNSIGNED_SHORT:
+ if (ng < ppc64::MAX_GPR_REGS)
+ {
+ pCppArgs[nPos] = pUnoArgs[nPos] = (((char *)gpreg) + (sizeof(void*)-2));
+ ng++;
+ gpreg++;
+ }
+ else
+ {
+ pCppArgs[nPos] = pUnoArgs[nPos] = (((char *)ovrflw) + (sizeof(void*)-2));
+ bOverFlowUsed = true;
+ }
+ if (bOverFlowUsed) ovrflw++;
+ break;
+ case typelib_TypeClass_ENUM:
+ case typelib_TypeClass_LONG:
+ case typelib_TypeClass_UNSIGNED_LONG:
+ if (ng < ppc64::MAX_GPR_REGS)
+ {
+ pCppArgs[nPos] = pUnoArgs[nPos] = (((char *)gpreg) + (sizeof(void*)-4));
+ ng++;
+ gpreg++;
+ }
+ else
+ {
+ pCppArgs[nPos] = pUnoArgs[nPos] = (((char *)ovrflw) + (sizeof(void*)-4));
+ bOverFlowUsed = true;
+ }
+ if (bOverFlowUsed) ovrflw++;
+ break;
+ default:
+ if (ng < ppc64::MAX_GPR_REGS)
+ {
+ pCppArgs[nPos] = pUnoArgs[nPos] = gpreg++;
+ ng++;
+ }
+ else
+ {
+ pCppArgs[nPos] = pUnoArgs[nPos] = ovrflw;
+ bOverFlowUsed = true;
+ }
+ if (bOverFlowUsed) ovrflw++;
+ break;
+ }
+
+ // no longer needed
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ else // ptr to complex value | ref
+ {
+#ifdef CMC_DEBUG
+ fprintf(stderr, "complex, ng is %d\n", ng);
+#endif
+ void *pCppStack; //temporary stack pointer
+
+ if (ng < ppc64::MAX_GPR_REGS)
+ {
+ pCppArgs[nPos] = pCppStack = *gpreg++;
+ ng++;
+ }
+ else
+ {
+ pCppArgs[nPos] = pCppStack = *ovrflw;
+ bOverFlowUsed = true;
+ }
+ if (bOverFlowUsed) ovrflw++;
+
+ if (! rParam.bIn) // is pure out
+ {
+ // uno out is unconstructed mem!
+ pUnoArgs[nPos] = alloca( pParamTypeDescr->nSize );
+ pTempIndizes[nTempIndizes] = nPos;
+ // will be released at reconversion
+ ppTempParamTypeDescr[nTempIndizes++] = pParamTypeDescr;
+ }
+ // is in/inout
+ else if (bridges::cpp_uno::shared::relatesToInterfaceType( pParamTypeDescr ))
+ {
+ uno_copyAndConvertData( pUnoArgs[nPos] = alloca( pParamTypeDescr->nSize ),
+ pCppStack, pParamTypeDescr,
+ pThis->getBridge()->getCpp2Uno() );
+ pTempIndizes[nTempIndizes] = nPos; // has to be reconverted
+ // will be released at reconversion
+ ppTempParamTypeDescr[nTempIndizes++] = pParamTypeDescr;
+ }
+ else // direct way
+ {
+ pUnoArgs[nPos] = pCppStack;
+ // no longer needed
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ }
+ }
+
+#ifdef CMC_DEBUG
+ fprintf(stderr, "end of params\n");
+#endif
+
+ // ExceptionHolder
+ uno_Any aUnoExc; // Any will be constructed by callee
+ uno_Any * pUnoExc = &aUnoExc;
+
+ // invoke uno dispatch call
+ (*pThis->getUnoI()->pDispatcher)( pThis->getUnoI(), pMemberTypeDescr, pUnoReturn, pUnoArgs, &pUnoExc );
+
+ // in case an exception occured...
+ if (pUnoExc)
+ {
+ // destruct temporary in/inout params
+ for ( ; nTempIndizes--; )
+ {
+ sal_Int32 nIndex = pTempIndizes[nTempIndizes];
+
+ if (pParams[nIndex].bIn) // is in/inout => was constructed
+ uno_destructData( pUnoArgs[nIndex], ppTempParamTypeDescr[nTempIndizes], 0 );
+ TYPELIB_DANGER_RELEASE( ppTempParamTypeDescr[nTempIndizes] );
+ }
+ if (pReturnTypeDescr)
+ TYPELIB_DANGER_RELEASE( pReturnTypeDescr );
+
+ CPPU_CURRENT_NAMESPACE::raiseException( &aUnoExc, pThis->getBridge()->getUno2Cpp() );
+ // has to destruct the any
+ // is here for dummy
+ return typelib_TypeClass_VOID;
+ }
+ else // else no exception occured...
+ {
+ // temporary params
+ for ( ; nTempIndizes--; )
+ {
+ sal_Int32 nIndex = pTempIndizes[nTempIndizes];
+ typelib_TypeDescription * pParamTypeDescr = ppTempParamTypeDescr[nTempIndizes];
+
+ if (pParams[nIndex].bOut) // inout/out
+ {
+ // convert and assign
+ uno_destructData( pCppArgs[nIndex], pParamTypeDescr, cpp_release );
+ uno_copyAndConvertData( pCppArgs[nIndex], pUnoArgs[nIndex], pParamTypeDescr,
+ pThis->getBridge()->getUno2Cpp() );
+ }
+ // destroy temp uno param
+ uno_destructData( pUnoArgs[nIndex], pParamTypeDescr, 0 );
+
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ // return
+ if (pCppReturn) // has complex return
+ {
+ if (pUnoReturn != pCppReturn) // needs reconversion
+ {
+ uno_copyAndConvertData( pCppReturn, pUnoReturn, pReturnTypeDescr,
+ pThis->getBridge()->getUno2Cpp() );
+ // destroy temp uno return
+ uno_destructData( pUnoReturn, pReturnTypeDescr, 0 );
+ }
+ // complex return ptr is set to return reg
+ *(void **)pRegisterReturn = pCppReturn;
+ }
+ if (pReturnTypeDescr)
+ {
+ typelib_TypeClass eRet = (typelib_TypeClass)pReturnTypeDescr->eTypeClass;
+ TYPELIB_DANGER_RELEASE( pReturnTypeDescr );
+ return eRet;
+ }
+ else
+ return typelib_TypeClass_VOID;
+ }
+}
+
+
+//==================================================================================================
+static typelib_TypeClass cpp_mediate(
+ sal_uInt64 nOffsetAndIndex,
+ void ** gpreg, void ** fpreg, long sp,
+ sal_Int64 * pRegisterReturn /* space for register return */ )
+{
+ OSL_ENSURE( sizeof(sal_Int64)==sizeof(void *), "### unexpected!" );
+
+ sal_Int32 nVtableOffset = (nOffsetAndIndex >> 32);
+ sal_Int32 nFunctionIndex = (nOffsetAndIndex & 0xFFFFFFFF);
+
+ long sf = *(long*)sp;
+ void ** ovrflw = (void**)(sf + 112);
+
+ // gpreg: [ret *], this, [other gpr params]
+ // fpreg: [fpr params]
+ // ovrflw: [gpr or fpr params (properly aligned)]
+
+ void * pThis;
+ if (nFunctionIndex & 0x80000000 )
+ {
+ nFunctionIndex &= 0x7fffffff;
+ pThis = gpreg[1];
+#ifdef CMC_DEBUG
+ fprintf(stderr, "pThis is gpreg[1]\n");
+#endif
+ }
+ else
+ {
+ pThis = gpreg[0];
+#ifdef CMC_DEBUG
+ fprintf(stderr, "pThis is gpreg[0]\n");
+#endif
+ }
+
+#ifdef CMC_DEBUG
+ fprintf(stderr, "pThis is %lx\n", pThis);
+#endif
+
+ pThis = static_cast< char * >(pThis) - nVtableOffset;
+
+#ifdef CMC_DEBUG
+ fprintf(stderr, "pThis is now %lx\n", pThis);
+#endif
+
+ bridges::cpp_uno::shared::CppInterfaceProxy * pCppI
+ = bridges::cpp_uno::shared::CppInterfaceProxy::castInterfaceToProxy(
+ pThis);
+
+ typelib_InterfaceTypeDescription * pTypeDescr = pCppI->getTypeDescr();
+
+#ifdef CMC_DEBUG
+ fprintf(stderr, "indexes are %d %d\n", nFunctionIndex, pTypeDescr->nMapFunctionIndexToMemberIndex);
+#endif
+
+ OSL_ENSURE( nFunctionIndex < pTypeDescr->nMapFunctionIndexToMemberIndex, "### illegal vtable index!" );
+ if (nFunctionIndex >= pTypeDescr->nMapFunctionIndexToMemberIndex)
+ {
+ throw RuntimeException(
+ rtl::OUString::createFromAscii("illegal vtable index!"),
+ (XInterface *)pThis );
+ }
+
+ // determine called method
+ sal_Int32 nMemberPos = pTypeDescr->pMapFunctionIndexToMemberIndex[nFunctionIndex];
+ OSL_ENSURE( nMemberPos < pTypeDescr->nAllMembers, "### illegal member index!" );
+
+#ifdef CMC_DEBUG
+ fprintf(stderr, "members are %d %d\n", nMemberPos, pTypeDescr->nAllMembers);
+#endif
+
+ TypeDescription aMemberDescr( pTypeDescr->ppAllMembers[nMemberPos] );
+
+ typelib_TypeClass eRet;
+ switch (aMemberDescr.get()->eTypeClass)
+ {
+ case typelib_TypeClass_INTERFACE_ATTRIBUTE:
+ {
+ if (pTypeDescr->pMapMemberIndexToFunctionIndex[nMemberPos] == nFunctionIndex)
+ {
+ // is GET method
+ eRet = cpp2uno_call(
+ pCppI, aMemberDescr.get(),
+ ((typelib_InterfaceAttributeTypeDescription *)aMemberDescr.get())->pAttributeTypeRef,
+ 0, 0, // no params
+ gpreg, fpreg, ovrflw, pRegisterReturn );
+ }
+ else
+ {
+ // is SET method
+ typelib_MethodParameter aParam;
+ aParam.pTypeRef =
+ ((typelib_InterfaceAttributeTypeDescription *)aMemberDescr.get())->pAttributeTypeRef;
+ aParam.bIn = sal_True;
+ aParam.bOut = sal_False;
+
+ eRet = cpp2uno_call(
+ pCppI, aMemberDescr.get(),
+ 0, // indicates void return
+ 1, &aParam,
+ gpreg, fpreg, ovrflw, pRegisterReturn );
+ }
+ break;
+ }
+ case typelib_TypeClass_INTERFACE_METHOD:
+ {
+ // is METHOD
+ switch (nFunctionIndex)
+ {
+ case 1: // acquire()
+ pCppI->acquireProxy(); // non virtual call!
+ eRet = typelib_TypeClass_VOID;
+ break;
+ case 2: // release()
+ pCppI->releaseProxy(); // non virtual call!
+ eRet = typelib_TypeClass_VOID;
+ break;
+ case 0: // queryInterface() opt
+ {
+ typelib_TypeDescription * pTD = 0;
+ TYPELIB_DANGER_GET( &pTD, reinterpret_cast< Type * >( gpreg[2] )->getTypeLibType() );
+ if (pTD)
+ {
+ XInterface * pInterface = 0;
+ (*pCppI->getBridge()->getCppEnv()->getRegisteredInterface)(
+ pCppI->getBridge()->getCppEnv(),
+ (void **)&pInterface, pCppI->getOid().pData,
+ (typelib_InterfaceTypeDescription *)pTD );
+
+ if (pInterface)
+ {
+ ::uno_any_construct(
+ reinterpret_cast< uno_Any * >( gpreg[0] ),
+ &pInterface, pTD, cpp_acquire );
+ pInterface->release();
+ TYPELIB_DANGER_RELEASE( pTD );
+ *(void **)pRegisterReturn = gpreg[0];
+ eRet = typelib_TypeClass_ANY;
+ break;
+ }
+ TYPELIB_DANGER_RELEASE( pTD );
+ }
+ } // else perform queryInterface()
+ default:
+ eRet = cpp2uno_call(
+ pCppI, aMemberDescr.get(),
+ ((typelib_InterfaceMethodTypeDescription *)aMemberDescr.get())->pReturnTypeRef,
+ ((typelib_InterfaceMethodTypeDescription *)aMemberDescr.get())->nParams,
+ ((typelib_InterfaceMethodTypeDescription *)aMemberDescr.get())->pParams,
+ gpreg, fpreg, ovrflw, pRegisterReturn );
+ }
+ break;
+ }
+ default:
+ {
+#ifdef CMC_DEBUG
+ fprintf(stderr, "screwed\n");
+#endif
+
+ throw RuntimeException(
+ rtl::OUString::createFromAscii("no member description found!"),
+ (XInterface *)pThis );
+ // is here for dummy
+ eRet = typelib_TypeClass_VOID;
+ }
+ }
+
+#ifdef CMC_DEBUG
+ fprintf(stderr, "end of cpp_mediate\n");
+#endif
+ return eRet;
+}
+
+extern "C" void privateSnippetExecutor( ... )
+{
+ volatile long nOffsetAndIndex;
+
+ //mr %r3, %r11 # move into arg1 the 64bit value passed from OOo
+ __asm__ __volatile__ (
+ "mr %0, 11\n\t"
+ : "=r" (nOffsetAndIndex) : );
+
+ sal_uInt64 gpreg[ppc64::MAX_GPR_REGS];
+ double fpreg[ppc64::MAX_SSE_REGS];
+
+ __asm__ __volatile__ (
+ "std 3, 0(%0)\t\n"
+ "std 4, 8(%0)\t\n"
+ "std 5, 16(%0)\t\n"
+ "std 6, 24(%0)\t\n"
+ "std 7, 32(%0)\t\n"
+ "std 8, 40(%0)\t\n"
+ "std 9, 48(%0)\t\n"
+ "std 10, 56(%0)\t\n"
+ "stfd 1, 0(%1)\t\n"
+ "stfd 2, 8(%1)\t\n"
+ "stfd 3, 16(%1)\t\n"
+ "stfd 4, 24(%1)\t\n"
+ "stfd 5, 32(%1)\t\n"
+ "stfd 6, 40(%1)\t\n"
+ "stfd 7, 48(%1)\t\n"
+ "stfd 8, 56(%1)\t\n"
+ "stfd 9, 64(%1)\t\n"
+ "stfd 10, 72(%1)\t\n"
+ "stfd 11, 80(%1)\t\n"
+ "stfd 12, 88(%1)\t\n"
+ "stfd 13, 96(%1)\t\n"
+ : : "r" (gpreg), "r" (fpreg)
+ : "r0", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10",
+ "fr1", "fr2", "fr3", "fr4", "fr5", "fr6", "fr7", "fr8", "fr9",
+ "fr10", "fr11", "fr12", "fr13"
+ );
+
+ volatile long sp;
+
+ //stack pointer
+ __asm__ __volatile__ (
+ "mr %0, 1\n\t"
+ : "=r" (sp) : );
+
+ volatile long nRegReturn[1];
+
+ typelib_TypeClass aType =
+ cpp_mediate( nOffsetAndIndex, (void**)gpreg, (void**)fpreg, sp, (sal_Int64*)nRegReturn);
+
+ switch( aType )
+ {
+ case typelib_TypeClass_VOID:
+ break;
+ case typelib_TypeClass_BOOLEAN:
+ case typelib_TypeClass_BYTE:
+ __asm__( "lbz 3,%0\n\t"
+ : : "m" (nRegReturn[0]) );
+ break;
+ case typelib_TypeClass_CHAR:
+ case typelib_TypeClass_UNSIGNED_SHORT:
+ __asm__( "lhz 3,%0\n\t"
+ : : "m" (nRegReturn[0]) );
+ break;
+ case typelib_TypeClass_SHORT:
+ __asm__( "lha 3,%0\n\t"
+ : : "m" (nRegReturn[0]) );
+ break;
+ case typelib_TypeClass_ENUM:
+ case typelib_TypeClass_UNSIGNED_LONG:
+ __asm__( "lwz 3,%0\n\t"
+ : : "m"(nRegReturn[0]) );
+ break;
+ case typelib_TypeClass_LONG:
+ __asm__( "lwa 3,%0\n\t"
+ : : "m"(nRegReturn[0]) );
+ break;
+ case typelib_TypeClass_FLOAT:
+ __asm__( "lfs 1,%0\n\t"
+ : : "m" (*((float*)nRegReturn)) );
+ break;
+ case typelib_TypeClass_DOUBLE:
+ __asm__( "lfd 1,%0\n\t"
+ : : "m" (*((double*)nRegReturn)) );
+ break;
+ default:
+ __asm__( "ld 3,%0\n\t"
+ : : "m" (nRegReturn[0]) );
+ break;
+ }
+}
+
+const int codeSnippetSize = 24;
+
+unsigned char * codeSnippet( unsigned char * code, sal_Int32 nFunctionIndex, sal_Int32 nVtableOffset,
+ bool simpleRetType)
+{
+#ifdef CMC_DEBUG
+ fprintf(stderr,"in codeSnippet functionIndex is %x\n", nFunctionIndex);
+ fprintf(stderr,"in codeSnippet vtableOffset is %x\n", nVtableOffset);
+#endif
+
+ sal_uInt64 nOffsetAndIndex = ( ( (sal_uInt64) nVtableOffset ) << 32 ) | ( (sal_uInt64) nFunctionIndex );
+
+ if ( !simpleRetType )
+ nOffsetAndIndex |= 0x80000000;
+
+ void ** raw = (void **)&code[0];
+ memcpy(raw, (char*) privateSnippetExecutor, 16);
+ raw[2] = (void*) nOffsetAndIndex;
+#ifdef CMC_DEBUG
+ fprintf(stderr, "in: offset/index is %x %x %d, %lx\n",
+ nFunctionIndex, nVtableOffset, !simpleRetType, raw[2]);
+#endif
+ return (code + codeSnippetSize);
+}
+
+}
+
+void bridges::cpp_uno::shared::VtableFactory::flushCode(unsigned char const * bptr, unsigned char const * eptr)
+{
+ int const lineSize = 32;
+ for (unsigned char const * p = bptr; p < eptr + lineSize; p += lineSize) {
+ __asm__ volatile ("dcbst 0, %0" : : "r"(p) : "memory");
+ }
+ __asm__ volatile ("sync" : : : "memory");
+ for (unsigned char const * p = bptr; p < eptr + lineSize; p += lineSize) {
+ __asm__ volatile ("icbi 0, %0" : : "r"(p) : "memory");
+ }
+ __asm__ volatile ("isync" : : : "memory");
+}
+
+struct bridges::cpp_uno::shared::VtableFactory::Slot { void * fn; };
+
+bridges::cpp_uno::shared::VtableFactory::Slot *
+bridges::cpp_uno::shared::VtableFactory::mapBlockToVtable(void * block)
+{
+ return static_cast< Slot * >(block) + 2;
+}
+
+sal_Size bridges::cpp_uno::shared::VtableFactory::getBlockSize(
+ sal_Int32 slotCount)
+{
+ return (slotCount + 2) * sizeof (Slot) + slotCount * codeSnippetSize;
+}
+
+bridges::cpp_uno::shared::VtableFactory::Slot *
+bridges::cpp_uno::shared::VtableFactory::initializeBlock(
+ void * block, sal_Int32 slotCount)
+{
+ Slot * slots = mapBlockToVtable(block);
+ slots[-2].fn = 0;
+ slots[-1].fn = 0;
+ return slots + slotCount;
+}
+
+unsigned char * bridges::cpp_uno::shared::VtableFactory::addLocalFunctions(
+ Slot ** slots, unsigned char * code, sal_PtrDiff writetoexecdiff,
+ typelib_InterfaceTypeDescription const * type, sal_Int32 functionOffset,
+ sal_Int32 functionCount, sal_Int32 vtableOffset)
+{
+ (*slots) -= functionCount;
+ Slot * s = *slots;
+#ifdef CMC_DEBUG
+ fprintf(stderr, "in addLocalFunctions functionOffset is %x\n",functionOffset);
+ fprintf(stderr, "in addLocalFunctions vtableOffset is %x\n",vtableOffset);
+#endif
+
+ for (sal_Int32 i = 0; i < type->nMembers; ++i) {
+ typelib_TypeDescription * member = 0;
+ TYPELIB_DANGER_GET(&member, type->ppMembers[i]);
+ OSL_ASSERT(member != 0);
+ switch (member->eTypeClass) {
+ case typelib_TypeClass_INTERFACE_ATTRIBUTE:
+ // Getter:
+ (s++)->fn = code + writetoexecdiff;
+ code = codeSnippet(
+ code, functionOffset++, vtableOffset,
+ bridges::cpp_uno::shared::isSimpleType(
+ reinterpret_cast<
+ typelib_InterfaceAttributeTypeDescription * >(
+ member)->pAttributeTypeRef));
+
+ // Setter:
+ if (!reinterpret_cast<
+ typelib_InterfaceAttributeTypeDescription * >(
+ member)->bReadOnly)
+ {
+ (s++)->fn = code + writetoexecdiff;
+ code = codeSnippet(code, functionOffset++, vtableOffset, true);
+ }
+ break;
+
+ case typelib_TypeClass_INTERFACE_METHOD:
+ (s++)->fn = code + writetoexecdiff;
+ code = codeSnippet(
+ code, functionOffset++, vtableOffset,
+ bridges::cpp_uno::shared::isSimpleType(
+ reinterpret_cast<
+ typelib_InterfaceMethodTypeDescription * >(
+ member)->pReturnTypeRef));
+ break;
+
+ default:
+ OSL_ASSERT(false);
+ break;
+ }
+ TYPELIB_DANGER_RELEASE(member);
+ }
+ return code;
+}
+
+/* vi:set tabstop=4 shiftwidth=4 expandtab: */
diff --git a/bridges/source/cpp_uno/gcc3_linux_powerpc64/except.cxx b/bridges/source/cpp_uno/gcc3_linux_powerpc64/except.cxx
new file mode 100644
index 000000000000..7012ac42eb28
--- /dev/null
+++ b/bridges/source/cpp_uno/gcc3_linux_powerpc64/except.cxx
@@ -0,0 +1,287 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_bridges.hxx"
+
+#include <stdio.h>
+#include <string.h>
+#include <dlfcn.h>
+#include <cxxabi.h>
+#include <hash_map>
+
+#include <rtl/strbuf.hxx>
+#include <rtl/ustrbuf.hxx>
+#include <osl/diagnose.h>
+#include <osl/mutex.hxx>
+
+#include <com/sun/star/uno/genfunc.hxx>
+#include <typelib/typedescription.hxx>
+#include <uno/any2.h>
+
+#include "share.hxx"
+
+
+using namespace ::std;
+using namespace ::osl;
+using namespace ::rtl;
+using namespace ::com::sun::star::uno;
+using namespace ::__cxxabiv1;
+
+
+namespace CPPU_CURRENT_NAMESPACE
+{
+
+void dummy_can_throw_anything( char const * )
+{
+}
+
+//==================================================================================================
+static OUString toUNOname( char const * p ) SAL_THROW( () )
+{
+#if OSL_DEBUG_LEVEL > 1
+ char const * start = p;
+#endif
+
+ // example: N3com3sun4star4lang24IllegalArgumentExceptionE
+
+ OUStringBuffer buf( 64 );
+ OSL_ASSERT( 'N' == *p );
+ ++p; // skip N
+
+ while ('E' != *p)
+ {
+ // read chars count
+ long n = (*p++ - '0');
+ while ('0' <= *p && '9' >= *p)
+ {
+ n *= 10;
+ n += (*p++ - '0');
+ }
+ buf.appendAscii( p, n );
+ p += n;
+ if ('E' != *p)
+ buf.append( (sal_Unicode)'.' );
+ }
+
+#if OSL_DEBUG_LEVEL > 1
+ OUString ret( buf.makeStringAndClear() );
+ OString c_ret( OUStringToOString( ret, RTL_TEXTENCODING_ASCII_US ) );
+ fprintf( stderr, "> toUNOname(): %s => %s\n", start, c_ret.getStr() );
+ return ret;
+#else
+ return buf.makeStringAndClear();
+#endif
+}
+
+//==================================================================================================
+class RTTI
+{
+ typedef hash_map< OUString, type_info *, OUStringHash > t_rtti_map;
+
+ Mutex m_mutex;
+ t_rtti_map m_rttis;
+ t_rtti_map m_generatedRttis;
+
+ void * m_hApp;
+
+public:
+ RTTI() SAL_THROW( () );
+ ~RTTI() SAL_THROW( () );
+
+ type_info * getRTTI( typelib_CompoundTypeDescription * ) SAL_THROW( () );
+};
+//__________________________________________________________________________________________________
+RTTI::RTTI() SAL_THROW( () )
+ : m_hApp( dlopen( 0, RTLD_LAZY ) )
+{
+}
+//__________________________________________________________________________________________________
+RTTI::~RTTI() SAL_THROW( () )
+{
+ dlclose( m_hApp );
+}
+
+//__________________________________________________________________________________________________
+type_info * RTTI::getRTTI( typelib_CompoundTypeDescription *pTypeDescr ) SAL_THROW( () )
+{
+ type_info * rtti;
+
+ OUString const & unoName = *(OUString const *)&pTypeDescr->aBase.pTypeName;
+
+ MutexGuard guard( m_mutex );
+ t_rtti_map::const_iterator iRttiFind( m_rttis.find( unoName ) );
+ if (iRttiFind == m_rttis.end())
+ {
+ // RTTI symbol
+ OStringBuffer buf( 64 );
+ buf.append( RTL_CONSTASCII_STRINGPARAM("_ZTIN") );
+ sal_Int32 index = 0;
+ do
+ {
+ OUString token( unoName.getToken( 0, '.', index ) );
+ buf.append( token.getLength() );
+ OString c_token( OUStringToOString( token, RTL_TEXTENCODING_ASCII_US ) );
+ buf.append( c_token );
+ }
+ while (index >= 0);
+ buf.append( 'E' );
+
+ OString symName( buf.makeStringAndClear() );
+ rtti = (type_info *)dlsym( m_hApp, symName.getStr() );
+
+ if (rtti)
+ {
+ pair< t_rtti_map::iterator, bool > insertion(
+ m_rttis.insert( t_rtti_map::value_type( unoName, rtti ) ) );
+ OSL_ENSURE( insertion.second, "### inserting new rtti failed?!" );
+ }
+ else
+ {
+ // try to lookup the symbol in the generated rtti map
+ t_rtti_map::const_iterator iFind( m_generatedRttis.find( unoName ) );
+ if (iFind == m_generatedRttis.end())
+ {
+ // we must generate it !
+ // symbol and rtti-name is nearly identical,
+ // the symbol is prefixed with _ZTI
+ char const * rttiName = symName.getStr() +4;
+#if OSL_DEBUG_LEVEL > 1
+ fprintf( stderr,"generated rtti for %s\n", rttiName );
+#endif
+ if (pTypeDescr->pBaseTypeDescription)
+ {
+ // ensure availability of base
+ type_info * base_rtti = getRTTI(
+ (typelib_CompoundTypeDescription *)pTypeDescr->pBaseTypeDescription );
+ rtti = new __si_class_type_info(
+ strdup( rttiName ), (__class_type_info *)base_rtti );
+ }
+ else
+ {
+ // this class has no base class
+ rtti = new __class_type_info( strdup( rttiName ) );
+ }
+
+ pair< t_rtti_map::iterator, bool > insertion(
+ m_generatedRttis.insert( t_rtti_map::value_type( unoName, rtti ) ) );
+ OSL_ENSURE( insertion.second, "### inserting new generated rtti failed?!" );
+ }
+ else // taking already generated rtti
+ {
+ rtti = iFind->second;
+ }
+ }
+ }
+ else
+ {
+ rtti = iRttiFind->second;
+ }
+
+ return rtti;
+}
+
+//--------------------------------------------------------------------------------------------------
+static void deleteException( void * pExc )
+{
+ __cxa_exception const * header = ((__cxa_exception const *)pExc - 1);
+ typelib_TypeDescription * pTD = 0;
+ OUString unoName( toUNOname( header->exceptionType->name() ) );
+ ::typelib_typedescription_getByName( &pTD, unoName.pData );
+ OSL_ENSURE( pTD, "### unknown exception type! leaving out destruction => leaking!!!" );
+ if (pTD)
+ {
+ ::uno_destructData( pExc, pTD, cpp_release );
+ ::typelib_typedescription_release( pTD );
+ }
+}
+
+//==================================================================================================
+void raiseException( uno_Any * pUnoExc, uno_Mapping * pUno2Cpp )
+{
+ void * pCppExc;
+ type_info * rtti;
+
+ {
+ // construct cpp exception object
+ typelib_TypeDescription * pTypeDescr = 0;
+ TYPELIB_DANGER_GET( &pTypeDescr, pUnoExc->pType );
+ OSL_ASSERT( pTypeDescr );
+ if (! pTypeDescr)
+ terminate();
+
+ pCppExc = __cxa_allocate_exception( pTypeDescr->nSize );
+ ::uno_copyAndConvertData( pCppExc, pUnoExc->pData, pTypeDescr, pUno2Cpp );
+
+ // destruct uno exception
+ ::uno_any_destruct( pUnoExc, 0 );
+ // avoiding locked counts
+ static RTTI * s_rtti = 0;
+ if (! s_rtti)
+ {
+ MutexGuard guard( Mutex::getGlobalMutex() );
+ if (! s_rtti)
+ {
+#ifdef LEAK_STATIC_DATA
+ s_rtti = new RTTI();
+#else
+ static RTTI rtti_data;
+ s_rtti = &rtti_data;
+#endif
+ }
+ }
+ rtti = (type_info *)s_rtti->getRTTI( (typelib_CompoundTypeDescription *) pTypeDescr );
+ TYPELIB_DANGER_RELEASE( pTypeDescr );
+ OSL_ENSURE( rtti, "### no rtti for throwing exception!" );
+ if (! rtti)
+ terminate();
+ }
+
+ __cxa_throw( pCppExc, rtti, deleteException );
+}
+
+//==================================================================================================
+void fillUnoException( __cxa_exception * header, uno_Any * pExc, uno_Mapping * pCpp2Uno )
+{
+ OSL_ENSURE( header, "### no exception header!!!" );
+ if (! header)
+ terminate();
+
+ typelib_TypeDescription * pExcTypeDescr = 0;
+ OUString unoName( toUNOname( header->exceptionType->name() ) );
+ ::typelib_typedescription_getByName( &pExcTypeDescr, unoName.pData );
+ OSL_ENSURE( pExcTypeDescr, "### can not get type description for exception!!!" );
+ if (! pExcTypeDescr)
+ terminate();
+
+ // construct uno exception any
+ ::uno_any_constructAndConvert( pExc, header->adjustedPtr, pExcTypeDescr, pCpp2Uno );
+ ::typelib_typedescription_release( pExcTypeDescr );
+}
+
+}
+
diff --git a/bridges/source/cpp_uno/gcc3_linux_powerpc64/makefile.mk b/bridges/source/cpp_uno/gcc3_linux_powerpc64/makefile.mk
new file mode 100644
index 000000000000..2dd11d815c69
--- /dev/null
+++ b/bridges/source/cpp_uno/gcc3_linux_powerpc64/makefile.mk
@@ -0,0 +1,79 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..$/..$/..
+
+PRJNAME=bridges
+TARGET=gcc3_uno
+LIBTARGET=no
+ENABLE_EXCEPTIONS=TRUE
+
+# --- Settings -----------------------------------------------------
+
+.INCLUDE : settings.mk
+
+# --- Files --------------------------------------------------------
+
+.IF "$(COM)$(OS)$(CPU)$(COMNAME)$(CPUNAME)" == "GCCLINUXPgcc3POWERPC64"
+
+.IF "$(cppu_no_leak)" == ""
+CFLAGS += -DLEAK_STATIC_DATA
+.ENDIF
+
+# In case someone enabled the non-standard -fomit-frame-pointer which does not
+# work with the .cxx sources in this directory:
+CFLAGSCXX += -fno-omit-frame-pointer
+
+NOOPTFILES= \
+ $(SLO)$/uno2cpp.obj \
+ $(SLO)$/cpp2uno.obj
+
+CFLAGSNOOPT=-O0
+
+SLOFILES= \
+ $(SLO)$/except.obj \
+ $(SLO)$/cpp2uno.obj \
+ $(SLO)$/uno2cpp.obj
+
+SHL1TARGET= $(TARGET)
+
+SHL1DEF=$(MISC)$/$(SHL1TARGET).def
+SHL1IMPLIB=i$(TARGET)
+SHL1VERSIONMAP=..$/..$/bridge_exports.map
+
+SHL1OBJS= $(SLOFILES)
+SHL1LIBS = $(SLB)$/cpp_uno_shared.lib
+
+SHL1STDLIBS= \
+ $(CPPULIB) \
+ $(SALLIB)
+
+.ENDIF
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : target.mk
diff --git a/bridges/source/cpp_uno/gcc3_linux_powerpc64/share.hxx b/bridges/source/cpp_uno/gcc3_linux_powerpc64/share.hxx
new file mode 100644
index 000000000000..45c3cdd5fcc4
--- /dev/null
+++ b/bridges/source/cpp_uno/gcc3_linux_powerpc64/share.hxx
@@ -0,0 +1,96 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "uno/mapping.h"
+
+#include <typeinfo>
+#include <exception>
+#include <cstddef>
+
+namespace CPPU_CURRENT_NAMESPACE
+{
+
+ void dummy_can_throw_anything( char const * );
+
+
+// ----- following decl from libstdc++-v3/libsupc++/unwind-cxx.h and unwind.h
+
+struct _Unwind_Exception
+{
+ unsigned exception_class __attribute__((__mode__(__DI__)));
+ void * exception_cleanup;
+ unsigned private_1 __attribute__((__mode__(__word__)));
+ unsigned private_2 __attribute__((__mode__(__word__)));
+} __attribute__((__aligned__));
+
+struct __cxa_exception
+{
+ ::std::type_info *exceptionType;
+ void (*exceptionDestructor)(void *);
+
+ ::std::unexpected_handler unexpectedHandler;
+ ::std::terminate_handler terminateHandler;
+
+ __cxa_exception *nextException;
+
+ int handlerCount;
+
+ int handlerSwitchValue;
+ const unsigned char *actionRecord;
+ const unsigned char *languageSpecificData;
+ void *catchTemp;
+ void *adjustedPtr;
+
+ _Unwind_Exception unwindHeader;
+};
+
+extern "C" void *__cxa_allocate_exception(
+ std::size_t thrown_size ) throw();
+extern "C" void __cxa_throw (
+ void *thrown_exception, std::type_info *tinfo, void (*dest) (void *) ) __attribute__((noreturn));
+
+struct __cxa_eh_globals
+{
+ __cxa_exception *caughtExceptions;
+ unsigned int uncaughtExceptions;
+};
+extern "C" __cxa_eh_globals *__cxa_get_globals () throw();
+
+// -----
+
+//==================================================================================================
+void raiseException(
+ uno_Any * pUnoExc, uno_Mapping * pUno2Cpp );
+//==================================================================================================
+void fillUnoException(
+ __cxa_exception * header, uno_Any *, uno_Mapping * pCpp2Uno );
+}
+
+namespace ppc64
+{
+ enum ppclimits { MAX_GPR_REGS = 8, MAX_SSE_REGS = 13 };
+}
diff --git a/bridges/source/cpp_uno/gcc3_linux_powerpc64/uno2cpp.cxx b/bridges/source/cpp_uno/gcc3_linux_powerpc64/uno2cpp.cxx
new file mode 100644
index 000000000000..d8486836b1a1
--- /dev/null
+++ b/bridges/source/cpp_uno/gcc3_linux_powerpc64/uno2cpp.cxx
@@ -0,0 +1,600 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_bridges.hxx"
+
+#include <malloc.h>
+
+#include <com/sun/star/uno/genfunc.hxx>
+#include <uno/data.h>
+
+#include "bridges/cpp_uno/shared/bridge.hxx"
+#include "bridges/cpp_uno/shared/types.hxx"
+#include "bridges/cpp_uno/shared/unointerfaceproxy.hxx"
+#include "bridges/cpp_uno/shared/vtables.hxx"
+
+#include "share.hxx"
+
+#include <stdio.h>
+#include <string.h>
+
+
+using namespace ::rtl;
+using namespace ::com::sun::star::uno;
+
+void MapReturn(long r3, double dret, typelib_TypeClass eTypeClass, void *pRegisterReturn)
+{
+ switch (eTypeClass)
+ {
+ case typelib_TypeClass_HYPER:
+ case typelib_TypeClass_UNSIGNED_HYPER:
+ *reinterpret_cast<sal_uInt64 *>( pRegisterReturn ) = r3;
+ break;
+ case typelib_TypeClass_LONG:
+ case typelib_TypeClass_UNSIGNED_LONG:
+ case typelib_TypeClass_ENUM:
+ *reinterpret_cast<sal_uInt32 *>( pRegisterReturn ) = r3;
+ break;
+ case typelib_TypeClass_CHAR:
+ case typelib_TypeClass_SHORT:
+ case typelib_TypeClass_UNSIGNED_SHORT:
+ *reinterpret_cast<sal_uInt16 *>( pRegisterReturn ) = (unsigned short)r3;
+ break;
+ case typelib_TypeClass_BOOLEAN:
+ case typelib_TypeClass_BYTE:
+ *reinterpret_cast<sal_uInt8 *>( pRegisterReturn ) = (unsigned char)r3;
+ break;
+ case typelib_TypeClass_FLOAT:
+ *reinterpret_cast<float *>( pRegisterReturn ) = dret;
+ break;
+ case typelib_TypeClass_DOUBLE:
+ *reinterpret_cast<double *>( pRegisterReturn ) = dret;
+ break;
+ default:
+ break;
+ }
+}
+
+namespace
+{
+//==================================================================================================
+static void callVirtualMethod(void * pThis, sal_uInt32 nVtableIndex,
+ void * pRegisterReturn, typelib_TypeDescription * pReturnTypeDescr,
+ sal_uInt64 *pStack, sal_uInt32 nStack,
+ sal_uInt64 *pGPR, sal_uInt32 nGPR,
+ double *pFPR, sal_uInt32 nFPR)
+{
+ // Stack, if used, must be 16-bytes aligned
+ if ( nStack )
+ nStack = ( nStack + 1 ) & ~1;
+
+ // Should not happen, but...
+ if ( nFPR > ppc64::MAX_SSE_REGS )
+ nFPR = ppc64::MAX_SSE_REGS;
+ if ( nGPR > ppc64::MAX_GPR_REGS )
+ nGPR = ppc64::MAX_GPR_REGS;
+
+#ifdef CMC_DEBUG
+ // Let's figure out what is really going on here
+ {
+ fprintf( stderr, "= callVirtualMethod() =\nGPR's (%d): ", nGPR );
+ for ( int i = 0; i < nGPR; ++i )
+ fprintf( stderr, "0x%lx, ", pGPR[i] );
+ fprintf( stderr, "\nFPR's (%d): ", nFPR );
+ for ( int i = 0; i < nFPR; ++i )
+ fprintf( stderr, "0x%lx (%f), ", pFPR[i], pFPR[i] );
+ fprintf( stderr, "\nStack (%d): ", nStack );
+ for ( int i = 0; i < nStack; ++i )
+ fprintf( stderr, "0x%lx, ", pStack[i] );
+ fprintf( stderr, "\n" );
+ }
+#endif
+
+ // Load parameters to stack, if necessary
+ sal_uInt64 *stack = (sal_uInt64 *) __builtin_alloca( nStack * 8 );
+ memcpy( stack, pStack, nStack * 8 );
+
+ // Get pointer to method
+ sal_uInt64 pMethod = *((sal_uInt64 *)pThis);
+ pMethod += 8 * nVtableIndex;
+ pMethod = *((sal_uInt64 *)pMethod);
+
+ typedef void (* FunctionCall )( sal_uInt64, sal_uInt64, sal_uInt64, sal_uInt64, sal_uInt64, sal_uInt64, sal_uInt64, sal_uInt64 );
+ FunctionCall pFunc = (FunctionCall)pMethod;
+
+ volatile double dret;
+
+ // fill registers
+ __asm__ __volatile__ (
+ "ld 3, 0(%0)\n\t"
+ "ld 4, 8(%0)\n\t"
+ "ld 5, 16(%0)\n\t"
+ "ld 6, 24(%0)\n\t"
+ "ld 7, 32(%0)\n\t"
+ "ld 8, 40(%0)\n\t"
+ "ld 9, 48(%0)\n\t"
+ "ld 10, 56(%0)\n\t"
+ "lfd 1, 0(%1)\n\t"
+ "lfd 2, 8(%1)\n\t"
+ "lfd 3, 16(%1)\n\t"
+ "lfd 4, 24(%1)\n\t"
+ "lfd 5, 32(%1)\n\t"
+ "lfd 6, 40(%1)\n\t"
+ "lfd 7, 48(%1)\n\t"
+ "lfd 8, 56(%1)\n\t"
+ "lfd 9, 64(%1)\n\t"
+ "lfd 10, 72(%1)\n\t"
+ "lfd 11, 80(%1)\n\t"
+ "lfd 12, 88(%1)\n\t"
+ "lfd 13, 96(%1)\n\t"
+ : : "r" (pGPR), "r" (pFPR)
+ : "r0", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10",
+ "fr1", "fr2", "fr3", "fr4", "fr5", "fr6", "fr7", "fr8", "fr9",
+ "fr10", "fr11", "fr12", "fr13"
+ );
+
+ // tell gcc that r3 to r11 are not available to it for doing the TOC and exception munge on the func call
+ register sal_uInt64 r3 asm("r3");
+ register sal_uInt64 r4 asm("r4");
+ register sal_uInt64 r5 asm("r5");
+ register sal_uInt64 r6 asm("r6");
+ register sal_uInt64 r7 asm("r7");
+ register sal_uInt64 r8 asm("r8");
+ register sal_uInt64 r9 asm("r9");
+ register sal_uInt64 r10 asm("r10");
+ register sal_uInt64 r11 asm("r11");
+
+ (*pFunc)(r3, r4, r5, r6, r7, r8, r9, r10);
+
+ // get return value
+ __asm__ __volatile__ (
+ "mr %1, 3\n\t"
+ "mr %2, 4\n\t"
+ "fmr %0, 1\n\t"
+ : "=f" (dret), "=r" (r3), "=r" (r4) : );
+
+ MapReturn(r3, dret, pReturnTypeDescr->eTypeClass, pRegisterReturn);
+}
+
+// Macros for easier insertion of values to registers or stack
+// pSV - pointer to the source
+// nr - order of the value [will be increased if stored to register]
+// pFPR, pGPR - pointer to the registers
+// pDS - pointer to the stack [will be increased if stored here]
+
+// The value in %xmm register is already prepared to be retrieved as a float,
+// thus we treat float and double the same
+#define INSERT_FLOAT( pSV, nr, pFPR, pDS, bOverflow ) \
+ if ( nr < ppc64::MAX_SSE_REGS ) \
+ pFPR[nr++] = *reinterpret_cast<float *>( pSV ); \
+ else \
+ bOverFlow = true; \
+ if (bOverFlow) \
+ *pDS++ = *reinterpret_cast<sal_uInt64 *>( pSV ); // verbatim!
+
+#define INSERT_DOUBLE( pSV, nr, pFPR, pDS, bOverflow ) \
+ if ( nr < ppc64::MAX_SSE_REGS ) \
+ pFPR[nr++] = *reinterpret_cast<double *>( pSV ); \
+ else \
+ bOverFlow = true; \
+ if (bOverFlow) \
+ *pDS++ = *reinterpret_cast<sal_uInt64 *>( pSV ); // verbatim!
+
+#define INSERT_INT64( pSV, nr, pGPR, pDS, bOverflow ) \
+ if ( nr < ppc64::MAX_GPR_REGS ) \
+ pGPR[nr++] = *reinterpret_cast<sal_uInt64 *>( pSV ); \
+ else \
+ bOverFlow = true; \
+ if (bOverFlow) \
+ *pDS++ = *reinterpret_cast<sal_uInt64 *>( pSV );
+
+#define INSERT_INT32( pSV, nr, pGPR, pDS, bOverflow ) \
+ if ( nr < ppc64::MAX_GPR_REGS ) \
+ pGPR[nr++] = *reinterpret_cast<sal_uInt32 *>( pSV ); \
+ else \
+ bOverFlow = true; \
+ if (bOverFlow) \
+ *pDS++ = *reinterpret_cast<sal_uInt32 *>( pSV );
+
+#define INSERT_INT16( pSV, nr, pGPR, pDS, bOverflow ) \
+ if ( nr < ppc64::MAX_GPR_REGS ) \
+ pGPR[nr++] = *reinterpret_cast<sal_uInt16 *>( pSV ); \
+ else \
+ bOverFlow = true; \
+ if (bOverFlow) \
+ *pDS++ = *reinterpret_cast<sal_uInt16 *>( pSV );
+
+#define INSERT_INT8( pSV, nr, pGPR, pDS, bOverflow ) \
+ if ( nr < ppc64::MAX_GPR_REGS ) \
+ pGPR[nr++] = *reinterpret_cast<sal_uInt8 *>( pSV ); \
+ else \
+ bOverFlow = true; \
+ if (bOverFlow) \
+ *pDS++ = *reinterpret_cast<sal_uInt8 *>( pSV );
+
+//==================================================================================================
+static void cpp_call(
+ bridges::cpp_uno::shared::UnoInterfaceProxy * pThis,
+ bridges::cpp_uno::shared::VtableSlot aVtableSlot,
+ typelib_TypeDescriptionReference * pReturnTypeRef,
+ sal_Int32 nParams, typelib_MethodParameter * pParams,
+ void * pUnoReturn, void * pUnoArgs[], uno_Any ** ppUnoExc )
+{
+ // max space for: [complex ret ptr], values|ptr ...
+ sal_uInt64 * pStack = (sal_uInt64 *)alloca( (nParams+3) * sizeof(sal_Int64) );
+ sal_uInt64 * pStackStart = pStack;
+
+ sal_uInt64 pGPR[ppc64::MAX_GPR_REGS];
+ sal_uInt32 nGPR = 0;
+
+ double pFPR[ppc64::MAX_SSE_REGS];
+ sal_uInt32 nFPR = 0;
+
+ // return
+ typelib_TypeDescription * pReturnTypeDescr = 0;
+ TYPELIB_DANGER_GET( &pReturnTypeDescr, pReturnTypeRef );
+ OSL_ENSURE( pReturnTypeDescr, "### expected return type description!" );
+
+ void * pCppReturn = 0; // if != 0 && != pUnoReturn, needs reconversion
+
+ bool bOverFlow = false;
+
+ if (pReturnTypeDescr)
+ {
+#ifdef CMC_DEBUG
+ fprintf(stderr, "return type is %d\n", pReturnTypeDescr->eTypeClass);
+#endif
+ if (bridges::cpp_uno::shared::isSimpleType( pReturnTypeDescr ))
+ {
+ pCppReturn = pUnoReturn; // direct way for simple types
+#ifdef CMC_DEBUG
+ fprintf(stderr, "simple return\n");
+#endif
+ }
+ else
+ {
+ // complex return via ptr
+ pCppReturn = (bridges::cpp_uno::shared::relatesToInterfaceType( pReturnTypeDescr )
+ ? alloca( pReturnTypeDescr->nSize ) : pUnoReturn);
+#ifdef CMC_DEBUG
+ fprintf(stderr, "pCppReturn/pUnoReturn is %lx/%lx", pCppReturn, pUnoReturn);
+#endif
+ INSERT_INT64( &pCppReturn, nGPR, pGPR, pStack, bOverFlow );
+ }
+ }
+ // push "this" pointer
+ void * pAdjustedThisPtr = reinterpret_cast< void ** >( pThis->getCppI() ) + aVtableSlot.offset;
+#ifdef CMC_DEBUG
+ fprintf(stderr, "this pointer is %p\n", pAdjustedThisPtr);
+#endif
+ INSERT_INT64( &pAdjustedThisPtr, nGPR, pGPR, pStack, bOverFlow );
+
+ // Args
+ void ** pCppArgs = (void **)alloca( 3 * sizeof(void *) * nParams );
+ // indizes of values this have to be converted (interface conversion cpp<=>uno)
+ sal_Int32 * pTempIndizes = (sal_Int32 *)(pCppArgs + nParams);
+ // type descriptions for reconversions
+ typelib_TypeDescription ** ppTempParamTypeDescr = (typelib_TypeDescription **)(pCppArgs + (2 * nParams));
+
+ sal_Int32 nTempIndizes = 0;
+
+#ifdef CMC_DEBUG
+ fprintf(stderr, "n params is %d\n", nParams);
+#endif
+
+ for ( sal_Int32 nPos = 0; nPos < nParams; ++nPos )
+ {
+ const typelib_MethodParameter & rParam = pParams[nPos];
+ typelib_TypeDescription * pParamTypeDescr = 0;
+ TYPELIB_DANGER_GET( &pParamTypeDescr, rParam.pTypeRef );
+
+#ifdef CMC_DEBUG
+ fprintf(stderr, "param %d is %d %d %d\n", nPos, rParam.bOut, bridges::cpp_uno::shared::isSimpleType( pParamTypeDescr ),
+ pParamTypeDescr->eTypeClass);
+#endif
+
+ if (!rParam.bOut && bridges::cpp_uno::shared::isSimpleType( pParamTypeDescr ))
+ {
+// uno_copyAndConvertData( pCppArgs[nPos] = alloca( 8 ), pUnoArgs[nPos], pParamTypeDescr,
+ uno_copyAndConvertData( pCppArgs[nPos] = pStack, pUnoArgs[nPos], pParamTypeDescr,
+ pThis->getBridge()->getUno2Cpp() );
+ switch (pParamTypeDescr->eTypeClass)
+ {
+ case typelib_TypeClass_HYPER:
+ case typelib_TypeClass_UNSIGNED_HYPER:
+#ifdef CMC_DEBUG
+ fprintf(stderr, "hyper is %lx\n", pCppArgs[nPos]);
+#endif
+ INSERT_INT64( pCppArgs[nPos], nGPR, pGPR, pStack, bOverFlow );
+ break;
+ case typelib_TypeClass_LONG:
+ case typelib_TypeClass_UNSIGNED_LONG:
+ case typelib_TypeClass_ENUM:
+#ifdef CMC_DEBUG
+ fprintf(stderr, "long is %x\n", pCppArgs[nPos]);
+#endif
+ INSERT_INT32( pCppArgs[nPos], nGPR, pGPR, pStack, bOverFlow );
+ break;
+ case typelib_TypeClass_SHORT:
+ case typelib_TypeClass_CHAR:
+ case typelib_TypeClass_UNSIGNED_SHORT:
+ INSERT_INT16( pCppArgs[nPos], nGPR, pGPR, pStack, bOverFlow );
+ break;
+ case typelib_TypeClass_BOOLEAN:
+ case typelib_TypeClass_BYTE:
+ INSERT_INT8( pCppArgs[nPos], nGPR, pGPR, pStack, bOverFlow );
+ break;
+ case typelib_TypeClass_FLOAT:
+ INSERT_FLOAT( pCppArgs[nPos], nFPR, pFPR, pStack, bOverFlow );
+ break;
+ case typelib_TypeClass_DOUBLE:
+ INSERT_DOUBLE( pCppArgs[nPos], nFPR, pFPR, pStack, bOverFlow );
+ break;
+ }
+
+ // no longer needed
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+
+ }
+ else // ptr to complex value | ref
+ {
+#ifdef CMC_DEBUG
+ fprintf(stderr, "complex type again %d\n", rParam.bIn);
+#endif
+ if (! rParam.bIn) // is pure out
+ {
+#ifdef CMC_DEBUG
+ fprintf(stderr, "complex size is %d\n", pParamTypeDescr->nSize );
+#endif
+ // cpp out is constructed mem, uno out is not!
+ uno_constructData(
+ pCppArgs[nPos] = alloca( pParamTypeDescr->nSize ),
+ pParamTypeDescr );
+ pTempIndizes[nTempIndizes] = nPos; // default constructed for cpp call
+ // will be released at reconversion
+ ppTempParamTypeDescr[nTempIndizes++] = pParamTypeDescr;
+ }
+ // is in/inout
+ else if (bridges::cpp_uno::shared::relatesToInterfaceType( pParamTypeDescr ))
+ {
+#ifdef CMC_DEBUG
+ fprintf(stderr, "this one\n");
+#endif
+ uno_copyAndConvertData(
+ pCppArgs[nPos] = alloca( pParamTypeDescr->nSize ),
+ pUnoArgs[nPos], pParamTypeDescr, pThis->getBridge()->getUno2Cpp() );
+
+ pTempIndizes[nTempIndizes] = nPos; // has to be reconverted
+ // will be released at reconversion
+ ppTempParamTypeDescr[nTempIndizes++] = pParamTypeDescr;
+ }
+ else // direct way
+ {
+#ifdef CMC_DEBUG
+ fprintf(stderr, "that one, passing %lx through\n", pUnoArgs[nPos]);
+#endif
+ pCppArgs[nPos] = pUnoArgs[nPos];
+ // no longer needed
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ INSERT_INT64( &(pCppArgs[nPos]), nGPR, pGPR, pStack, bOverFlow );
+ }
+ }
+
+ try
+ {
+ callVirtualMethod(
+ pAdjustedThisPtr, aVtableSlot.index,
+ pCppReturn, pReturnTypeDescr,
+ pStackStart, ( pStack - pStackStart ),
+ pGPR, nGPR,
+ pFPR, nFPR );
+ // NO exception occured...
+ *ppUnoExc = 0;
+
+ // reconvert temporary params
+ for ( ; nTempIndizes--; )
+ {
+ sal_Int32 nIndex = pTempIndizes[nTempIndizes];
+ typelib_TypeDescription * pParamTypeDescr = ppTempParamTypeDescr[nTempIndizes];
+
+ if (pParams[nIndex].bIn)
+ {
+ if (pParams[nIndex].bOut) // inout
+ {
+ uno_destructData( pUnoArgs[nIndex], pParamTypeDescr, 0 ); // destroy uno value
+ uno_copyAndConvertData( pUnoArgs[nIndex], pCppArgs[nIndex], pParamTypeDescr,
+ pThis->getBridge()->getCpp2Uno() );
+ }
+ }
+ else // pure out
+ {
+ uno_copyAndConvertData( pUnoArgs[nIndex], pCppArgs[nIndex], pParamTypeDescr,
+ pThis->getBridge()->getCpp2Uno() );
+ }
+ // destroy temp cpp param => cpp: every param was constructed
+ uno_destructData( pCppArgs[nIndex], pParamTypeDescr, cpp_release );
+
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ // return value
+ if (pCppReturn && pUnoReturn != pCppReturn)
+ {
+ uno_copyAndConvertData( pUnoReturn, pCppReturn, pReturnTypeDescr,
+ pThis->getBridge()->getCpp2Uno() );
+ uno_destructData( pCppReturn, pReturnTypeDescr, cpp_release );
+ }
+ }
+ catch (...)
+ {
+ // fill uno exception
+ fillUnoException( CPPU_CURRENT_NAMESPACE::__cxa_get_globals()->caughtExceptions,
+ *ppUnoExc, pThis->getBridge()->getCpp2Uno() );
+
+ // temporary params
+ for ( ; nTempIndizes--; )
+ {
+ sal_Int32 nIndex = pTempIndizes[nTempIndizes];
+ // destroy temp cpp param => cpp: every param was constructed
+ uno_destructData( pCppArgs[nIndex], ppTempParamTypeDescr[nTempIndizes], cpp_release );
+ TYPELIB_DANGER_RELEASE( ppTempParamTypeDescr[nTempIndizes] );
+ }
+ // return type
+ if (pReturnTypeDescr)
+ TYPELIB_DANGER_RELEASE( pReturnTypeDescr );
+ }
+}
+
+}
+
+namespace bridges { namespace cpp_uno { namespace shared {
+
+void unoInterfaceProxyDispatch(
+ uno_Interface * pUnoI, const typelib_TypeDescription * pMemberDescr,
+ void * pReturn, void * pArgs[], uno_Any ** ppException )
+{
+ // is my surrogate
+ bridges::cpp_uno::shared::UnoInterfaceProxy * pThis
+ = static_cast< bridges::cpp_uno::shared::UnoInterfaceProxy *> (pUnoI);
+ typelib_InterfaceTypeDescription * pTypeDescr = pThis->pTypeDescr;
+
+ switch (pMemberDescr->eTypeClass)
+ {
+ case typelib_TypeClass_INTERFACE_ATTRIBUTE:
+ {
+
+ VtableSlot aVtableSlot(
+ getVtableSlot(
+ reinterpret_cast<
+ typelib_InterfaceAttributeTypeDescription const * >(
+ pMemberDescr)));
+
+ if (pReturn)
+ {
+ // dependent dispatch
+ cpp_call(
+ pThis, aVtableSlot,
+ ((typelib_InterfaceAttributeTypeDescription *)pMemberDescr)->pAttributeTypeRef,
+ 0, 0, // no params
+ pReturn, pArgs, ppException );
+ }
+ else
+ {
+ // is SET
+ typelib_MethodParameter aParam;
+ aParam.pTypeRef =
+ ((typelib_InterfaceAttributeTypeDescription *)pMemberDescr)->pAttributeTypeRef;
+ aParam.bIn = sal_True;
+ aParam.bOut = sal_False;
+
+ typelib_TypeDescriptionReference * pReturnTypeRef = 0;
+ OUString aVoidName( RTL_CONSTASCII_USTRINGPARAM("void") );
+ typelib_typedescriptionreference_new(
+ &pReturnTypeRef, typelib_TypeClass_VOID, aVoidName.pData );
+
+ // dependent dispatch
+ aVtableSlot.index += 1; //get then set method
+ cpp_call(
+ pThis, aVtableSlot,
+ pReturnTypeRef,
+ 1, &aParam,
+ pReturn, pArgs, ppException );
+
+ typelib_typedescriptionreference_release( pReturnTypeRef );
+ }
+
+ break;
+ }
+ case typelib_TypeClass_INTERFACE_METHOD:
+ {
+
+ VtableSlot aVtableSlot(
+ getVtableSlot(
+ reinterpret_cast<
+ typelib_InterfaceMethodTypeDescription const * >(
+ pMemberDescr)));
+ switch (aVtableSlot.index)
+ {
+ // standard calls
+ case 1: // acquire uno interface
+ (*pUnoI->acquire)( pUnoI );
+ *ppException = 0;
+ break;
+ case 2: // release uno interface
+ (*pUnoI->release)( pUnoI );
+ *ppException = 0;
+ break;
+ case 0: // queryInterface() opt
+ {
+ typelib_TypeDescription * pTD = 0;
+ TYPELIB_DANGER_GET( &pTD, reinterpret_cast< Type * >( pArgs[0] )->getTypeLibType() );
+ if (pTD)
+ {
+ uno_Interface * pInterface = 0;
+ (*pThis->pBridge->getUnoEnv()->getRegisteredInterface)(
+ pThis->pBridge->getUnoEnv(),
+ (void **)&pInterface, pThis->oid.pData, (typelib_InterfaceTypeDescription *)pTD );
+
+ if (pInterface)
+ {
+ ::uno_any_construct(
+ reinterpret_cast< uno_Any * >( pReturn ),
+ &pInterface, pTD, 0 );
+ (*pInterface->release)( pInterface );
+ TYPELIB_DANGER_RELEASE( pTD );
+ *ppException = 0;
+ break;
+ }
+ TYPELIB_DANGER_RELEASE( pTD );
+ }
+ } // else perform queryInterface()
+ default:
+ // dependent dispatch
+ cpp_call(
+ pThis, aVtableSlot,
+ ((typelib_InterfaceMethodTypeDescription *)pMemberDescr)->pReturnTypeRef,
+ ((typelib_InterfaceMethodTypeDescription *)pMemberDescr)->nParams,
+ ((typelib_InterfaceMethodTypeDescription *)pMemberDescr)->pParams,
+ pReturn, pArgs, ppException );
+ }
+ break;
+ }
+ default:
+ {
+ ::com::sun::star::uno::RuntimeException aExc(
+ OUString( RTL_CONSTASCII_USTRINGPARAM("illegal member type description!") ),
+ ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >() );
+
+ Type const & rExcType = ::getCppuType( &aExc );
+ // binary identical null reference
+ ::uno_type_any_construct( *ppException, &aExc, rExcType.getTypeLibType(), 0 );
+ }
+ }
+}
+
+} } }
diff --git a/bridges/source/cpp_uno/gcc3_linux_s390/cpp2uno.cxx b/bridges/source/cpp_uno/gcc3_linux_s390/cpp2uno.cxx
new file mode 100644
index 000000000000..6807884281c4
--- /dev/null
+++ b/bridges/source/cpp_uno/gcc3_linux_s390/cpp2uno.cxx
@@ -0,0 +1,695 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_bridges.hxx"
+
+#include <com/sun/star/uno/genfunc.hxx>
+#include <uno/data.h>
+#include <typelib/typedescription.hxx>
+
+#include "bridges/cpp_uno/shared/bridge.hxx"
+#include "bridges/cpp_uno/shared/cppinterfaceproxy.hxx"
+#include "bridges/cpp_uno/shared/types.hxx"
+#include "bridges/cpp_uno/shared/vtablefactory.hxx"
+
+#include "share.hxx"
+#include <stdio.h>
+#include <string.h>
+
+using namespace ::com::sun::star::uno;
+
+namespace
+{
+
+static typelib_TypeClass cpp2uno_call(
+ bridges::cpp_uno::shared::CppInterfaceProxy * pThis,
+ const typelib_TypeDescription * pMemberTypeDescr,
+ typelib_TypeDescriptionReference * pReturnTypeRef, // 0 indicates void return
+ sal_Int32 nParams, typelib_MethodParameter * pParams,
+ void ** gpreg, void ** fpreg, void ** ovrflw,
+ sal_Int64 * pRegisterReturn /* space for register return */ )
+{
+ int ng = 0; //number of gpr registers used
+ int nf = 0; //number of fpr regsiters used
+ void ** pCppStack; //temporary stack pointer
+
+ // gpreg: [ret *], this, [gpr params]
+ // fpreg: [fpr params]
+ // ovrflw: [gpr or fpr params (properly aligned)]
+
+ // return
+ typelib_TypeDescription * pReturnTypeDescr = 0;
+ if (pReturnTypeRef)
+ TYPELIB_DANGER_GET( &pReturnTypeDescr, pReturnTypeRef );
+
+ void * pUnoReturn = 0;
+ void * pCppReturn = 0; // complex return ptr: if != 0 && != pUnoReturn, reconversion need
+
+ if (pReturnTypeDescr)
+ {
+ if (bridges::cpp_uno::shared::isSimpleType( pReturnTypeDescr ))
+ {
+ pUnoReturn = pRegisterReturn; // direct way for simple types
+ }
+ else // complex return via ptr (pCppReturn)
+ {
+ pCppReturn = *(void **)gpreg;
+ gpreg++;
+ ng++;
+
+ pUnoReturn = (bridges::cpp_uno::shared::relatesToInterfaceType( pReturnTypeDescr )
+ ? alloca( pReturnTypeDescr->nSize )
+ : pCppReturn); // direct way
+ }
+ }
+ // pop this
+ gpreg++;
+ ng++;
+
+ // stack space
+ OSL_ENSURE( sizeof(void *) == sizeof(sal_Int32), "### unexpected size!" );
+ // parameters
+ void ** pUnoArgs = (void **)alloca( 4 * sizeof(void *) * nParams );
+ void ** pCppArgs = pUnoArgs + nParams;
+ // indizes of values this have to be converted (interface conversion cpp<=>uno)
+ sal_Int32 * pTempIndizes = (sal_Int32 *)(pUnoArgs + (2 * nParams));
+ // type descriptions for reconversions
+ typelib_TypeDescription ** ppTempParamTypeDescr = (typelib_TypeDescription **)(pUnoArgs + (3 * nParams));
+
+ sal_Int32 nTempIndizes = 0;
+
+ for ( sal_Int32 nPos = 0; nPos < nParams; ++nPos )
+ {
+ const typelib_MethodParameter & rParam = pParams[nPos];
+ typelib_TypeDescription * pParamTypeDescr = 0;
+ TYPELIB_DANGER_GET( &pParamTypeDescr, rParam.pTypeRef );
+
+ if (!rParam.bOut && bridges::cpp_uno::shared::isSimpleType( pParamTypeDescr )) // value
+ {
+
+ switch (pParamTypeDescr->eTypeClass)
+ {
+
+ case typelib_TypeClass_DOUBLE:
+ if (nf < 2) {
+ pCppArgs[nPos] = fpreg;
+ pUnoArgs[nPos] = fpreg;
+ nf++;
+ fpreg += 2;
+ } else {
+ pCppArgs[nPos] = ovrflw;
+ pUnoArgs[nPos] = ovrflw;
+ ovrflw += 2;
+ }
+ break;
+
+ case typelib_TypeClass_FLOAT:
+ // fpreg are all double values so need to
+ // modify fpreg to be a single word float value
+ if (nf < 2) {
+// float tmp = (float) (*((double *)fpreg));
+// (*((float *) fpreg)) = tmp;
+ pCppArgs[nPos] = fpreg;
+ pUnoArgs[nPos] = fpreg;
+ nf++;
+ fpreg += 2;
+ } else {
+ pCppArgs[nPos] = ovrflw;
+ pUnoArgs[nPos] = ovrflw;
+ ovrflw += 1;
+ }
+ break;
+
+ case typelib_TypeClass_HYPER:
+ case typelib_TypeClass_UNSIGNED_HYPER:
+ if (ng < 4) {
+ pCppArgs[nPos] = gpreg;
+ pUnoArgs[nPos] = gpreg;
+ ng += 2;
+ gpreg += 2;
+ } else {
+ pCppArgs[nPos] = ovrflw;
+ pUnoArgs[nPos] = ovrflw;
+ ovrflw += 2;
+ }
+ break;
+
+ case typelib_TypeClass_BYTE:
+ case typelib_TypeClass_BOOLEAN:
+ if (ng < 5) {
+ pCppArgs[nPos] = (((char *)gpreg) + 3);
+ pUnoArgs[nPos] = (((char *)gpreg) + 3);
+ ng++;
+ gpreg++;
+ } else {
+ pCppArgs[nPos] = (((char *)ovrflw) + 3);
+ pUnoArgs[nPos] = (((char *)ovrflw) + 3);
+ ovrflw++;
+ }
+ break;
+
+
+ case typelib_TypeClass_CHAR:
+ case typelib_TypeClass_SHORT:
+ case typelib_TypeClass_UNSIGNED_SHORT:
+ if (ng < 5) {
+ pCppArgs[nPos] = (((char *)gpreg)+ 2);
+ pUnoArgs[nPos] = (((char *)gpreg)+ 2);
+ ng++;
+ gpreg++;
+ } else {
+ pCppArgs[nPos] = (((char *)ovrflw) + 2);
+ pUnoArgs[nPos] = (((char *)ovrflw) + 2);
+ ovrflw++;
+ }
+ break;
+
+
+ default:
+ if (ng < 5) {
+ pCppArgs[nPos] = gpreg;
+ pUnoArgs[nPos] = gpreg;
+ ng++;
+ gpreg++;
+ } else {
+ pCppArgs[nPos] = ovrflw;
+ pUnoArgs[nPos] = ovrflw;
+ ovrflw++;
+ }
+ break;
+
+ }
+ // no longer needed
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ else // ptr to complex value | ref
+ {
+
+ if (ng < 5) {
+ pCppArgs[nPos] = *(void **)gpreg;
+ pCppStack = gpreg;
+ ng++;
+ gpreg++;
+ } else {
+ pCppArgs[nPos] = *(void **)ovrflw;
+ pCppStack = ovrflw;
+ ovrflw++;
+ }
+
+ if (! rParam.bIn) // is pure out
+ {
+ // uno out is unconstructed mem!
+ pUnoArgs[nPos] = alloca( pParamTypeDescr->nSize );
+ pTempIndizes[nTempIndizes] = nPos;
+ // will be released at reconversion
+ ppTempParamTypeDescr[nTempIndizes++] = pParamTypeDescr;
+ }
+ // is in/inout
+ else if (bridges::cpp_uno::shared::relatesToInterfaceType( pParamTypeDescr ))
+ {
+ uno_copyAndConvertData( pUnoArgs[nPos] = alloca( pParamTypeDescr->nSize ),
+ *(void **)pCppStack, pParamTypeDescr,
+ pThis->getBridge()->getCpp2Uno() );
+ pTempIndizes[nTempIndizes] = nPos; // has to be reconverted
+ // will be released at reconversion
+ ppTempParamTypeDescr[nTempIndizes++] = pParamTypeDescr;
+ }
+ else // direct way
+ {
+ pUnoArgs[nPos] = *(void **)pCppStack;
+ // no longer needed
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ }
+ }
+
+ // ExceptionHolder
+ uno_Any aUnoExc; // Any will be constructed by callee
+ uno_Any * pUnoExc = &aUnoExc;
+
+ // invoke uno dispatch call
+ (*pThis->getUnoI()->pDispatcher)( pThis->getUnoI(), pMemberTypeDescr, pUnoReturn, pUnoArgs, &pUnoExc );
+
+ // in case an exception occured...
+ if (pUnoExc)
+ {
+ // destruct temporary in/inout params
+ for ( ; nTempIndizes--; )
+ {
+ sal_Int32 nIndex = pTempIndizes[nTempIndizes];
+
+ if (pParams[nIndex].bIn) // is in/inout => was constructed
+ uno_destructData( pUnoArgs[nIndex], ppTempParamTypeDescr[nTempIndizes], 0 );
+ TYPELIB_DANGER_RELEASE( ppTempParamTypeDescr[nTempIndizes] );
+ }
+ if (pReturnTypeDescr)
+ TYPELIB_DANGER_RELEASE( pReturnTypeDescr );
+
+ CPPU_CURRENT_NAMESPACE::raiseException( &aUnoExc, pThis->getBridge()->getUno2Cpp() ); // has to destruct the any
+ // is here for dummy
+ return typelib_TypeClass_VOID;
+ }
+ else // else no exception occured...
+ {
+ // temporary params
+ for ( ; nTempIndizes--; )
+ {
+ sal_Int32 nIndex = pTempIndizes[nTempIndizes];
+ typelib_TypeDescription * pParamTypeDescr = ppTempParamTypeDescr[nTempIndizes];
+
+ if (pParams[nIndex].bOut) // inout/out
+ {
+ // convert and assign
+ uno_destructData( pCppArgs[nIndex], pParamTypeDescr, cpp_release );
+ uno_copyAndConvertData( pCppArgs[nIndex], pUnoArgs[nIndex], pParamTypeDescr,
+ pThis->getBridge()->getUno2Cpp() );
+ }
+ // destroy temp uno param
+ uno_destructData( pUnoArgs[nIndex], pParamTypeDescr, 0 );
+
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ // return
+ if (pCppReturn) // has complex return
+ {
+ if (pUnoReturn != pCppReturn) // needs reconversion
+ {
+ uno_copyAndConvertData( pCppReturn, pUnoReturn, pReturnTypeDescr,
+ pThis->getBridge()->getUno2Cpp() );
+ // destroy temp uno return
+ uno_destructData( pUnoReturn, pReturnTypeDescr, 0 );
+ }
+ // complex return ptr is set to return reg
+ *(void **)pRegisterReturn = pCppReturn;
+ }
+ if (pReturnTypeDescr)
+ {
+ typelib_TypeClass eRet = (typelib_TypeClass)pReturnTypeDescr->eTypeClass;
+ TYPELIB_DANGER_RELEASE( pReturnTypeDescr );
+ return eRet;
+ }
+ else
+ return typelib_TypeClass_VOID;
+ }
+}
+
+
+//============================================================================
+static typelib_TypeClass cpp_mediate(
+ sal_uInt32 nOffsetAndIndex,
+ void ** gpreg, void ** fpreg, void ** ovrflw,
+ sal_Int64 * pRegisterReturn /* space for register return */ )
+{
+ OSL_ENSURE( sizeof(sal_Int32)==sizeof(void *), "### unexpected!" );
+
+ sal_Int16 nVtableOffset = (nOffsetAndIndex >> 16);
+ sal_Int16 nFunctionIndex = (nOffsetAndIndex & 0xFFFF);
+
+ // gpreg: [ret *], this, [other gpr params]
+ // fpreg: [fpr params]
+ // ovrflw: [gpr or fpr params (properly aligned)]
+
+ // _this_ ptr is patched cppu_XInterfaceProxy object
+ void * pThis;
+ if( nFunctionIndex & 0x8000 )
+ {
+ nFunctionIndex &= 0x7fff;
+ pThis = gpreg[1];
+ }
+ else
+ {
+ pThis = gpreg[0];
+ }
+
+ pThis = static_cast< char * >(pThis) - nVtableOffset;
+
+ bridges::cpp_uno::shared::CppInterfaceProxy * pCppI
+ = bridges::cpp_uno::shared::CppInterfaceProxy::castInterfaceToProxy(
+ pThis);
+
+ typelib_InterfaceTypeDescription * pTypeDescr = pCppI->getTypeDescr();
+
+
+ OSL_ENSURE( nFunctionIndex < pTypeDescr->nMapFunctionIndexToMemberIndex, "### illegal vtable index!" );
+ if (nFunctionIndex >= pTypeDescr->nMapFunctionIndexToMemberIndex)
+ {
+ throw RuntimeException(
+ rtl::OUString::createFromAscii("illegal vtable index!"),
+ (XInterface *)pCppI );
+ }
+
+ // determine called method
+ OSL_ENSURE( nVtableCall < pTypeDescr->nMapFunctionIndexToMemberIndex, "### illegal vtable index!" );
+ sal_Int32 nMemberPos = pTypeDescr->pMapFunctionIndexToMemberIndex[nFunctionIndex];
+ OSL_ENSURE( nMemberPos < pTypeDescr->nAllMembers, "### illegal member index!" );
+
+ TypeDescription aMemberDescr( pTypeDescr->ppAllMembers[nMemberPos] );
+
+ typelib_TypeClass eRet;
+ switch (aMemberDescr.get()->eTypeClass)
+ {
+ case typelib_TypeClass_INTERFACE_ATTRIBUTE:
+ {
+ if (pTypeDescr->pMapMemberIndexToFunctionIndex[nMemberPos] == nFunctionIndex)
+ {
+ // is GET method
+ eRet = cpp2uno_call(
+ pCppI, aMemberDescr.get(),
+ ((typelib_InterfaceAttributeTypeDescription *)aMemberDescr.get())->pAttributeTypeRef,
+ 0, 0, // no params
+ gpreg, fpreg, ovrflw, pRegisterReturn );
+ }
+ else
+ {
+ // is SET method
+ typelib_MethodParameter aParam;
+ aParam.pTypeRef =
+ ((typelib_InterfaceAttributeTypeDescription *)aMemberDescr.get())->pAttributeTypeRef;
+ aParam.bIn = sal_True;
+ aParam.bOut = sal_False;
+
+ eRet = cpp2uno_call(
+ pCppI, aMemberDescr.get(),
+ 0, // indicates void return
+ 1, &aParam,
+ gpreg, fpreg, ovrflw, pRegisterReturn );
+ }
+ break;
+ }
+ case typelib_TypeClass_INTERFACE_METHOD:
+ {
+ // is METHOD
+ switch (nFunctionIndex)
+ {
+ case 1: // acquire()
+ pCppI->acquireProxy(); // non virtual call!
+ eRet = typelib_TypeClass_VOID;
+ break;
+ case 2: // release()
+ pCppI->releaseProxy(); // non virtual call!
+ eRet = typelib_TypeClass_VOID;
+ break;
+ case 0: // queryInterface() opt
+ {
+ typelib_TypeDescription * pTD = 0;
+ TYPELIB_DANGER_GET( &pTD, reinterpret_cast< Type * >( gpreg[2] )->getTypeLibType() );
+ if (pTD)
+ {
+ XInterface * pInterface = 0;
+ (*pCppI->getBridge()->getCppEnv()->getRegisteredInterface)(
+ pCppI->getBridge()->getCppEnv(),
+ (void **)&pInterface, pCppI->getOid().pData,
+ (typelib_InterfaceTypeDescription *)pTD );
+
+ if (pInterface)
+ {
+ ::uno_any_construct(
+ reinterpret_cast< uno_Any * >( gpreg[0] ),
+ &pInterface, pTD, cpp_acquire );
+ pInterface->release();
+ TYPELIB_DANGER_RELEASE( pTD );
+ *(void **)pRegisterReturn = gpreg[0];
+ eRet = typelib_TypeClass_ANY;
+ break;
+ }
+ TYPELIB_DANGER_RELEASE( pTD );
+ }
+ } // else perform queryInterface()
+ default:
+ eRet = cpp2uno_call(
+ pCppI, aMemberDescr.get(),
+ ((typelib_InterfaceMethodTypeDescription *)aMemberDescr.get())->pReturnTypeRef,
+ ((typelib_InterfaceMethodTypeDescription *)aMemberDescr.get())->nParams,
+ ((typelib_InterfaceMethodTypeDescription *)aMemberDescr.get())->pParams,
+ gpreg, fpreg, ovrflw, pRegisterReturn );
+ }
+ break;
+ }
+ default:
+ {
+ throw RuntimeException(
+ rtl::OUString::createFromAscii("no member description found!"),
+ (XInterface *)pCppI );
+ // is here for dummy
+ eRet = typelib_TypeClass_VOID;
+ }
+ }
+
+ return eRet;
+}
+
+//==================================================================================================
+/**
+ * is called on incoming vtable calls
+ * (called by asm snippets)
+ */
+static void privateSnippetExecutor( sal_uInt32 nOffsetAndIndex, void** gpregptr, void** fpregptr, void** ovrflw)
+{
+#ifdef CMC_DEBUG
+ fprintf(stderr, "privateSnippetExecutor\n");
+#endif
+
+
+ sal_Int32 gpreg[8];
+ double fpreg[8];
+
+ memcpy( gpreg, gpregptr, 32);
+ memcpy( fpreg, fpregptr, 64);
+
+ volatile long nRegReturn[2];
+
+ typelib_TypeClass aType =
+ cpp_mediate( nOffsetAndIndex, (void**)gpreg, (void**)fpreg, ovrflw,
+ (sal_Int64*)nRegReturn );
+
+ switch( aType )
+ {
+
+ // move return value into register space
+ // (will be loaded by machine code snippet)
+
+ case typelib_TypeClass_BOOLEAN:
+ {
+ unsigned long tmp = (unsigned long)(*(unsigned char *)nRegReturn);
+ __asm__ volatile ( "l 2,%0\n\t" : :
+ "m"(tmp) : "2" );
+ break;
+ }
+ case typelib_TypeClass_BYTE:
+ {
+ long tmp = (long)(*(signed char *)nRegReturn);
+ __asm__ volatile ( "l 2,%0\n\t" : :
+ "m"(tmp) : "2" );
+ break;
+ }
+ case typelib_TypeClass_CHAR:
+ case typelib_TypeClass_UNSIGNED_SHORT:
+ {
+ unsigned long tmp = (unsigned long)(*(unsigned short *)nRegReturn);
+ __asm__ volatile ( "l 2,%0\n\t" : :
+ "m"(tmp) : "2" );
+ break;
+ }
+ case typelib_TypeClass_SHORT:
+ {
+ long tmp = (long)(*(short *)nRegReturn);
+ __asm__ volatile ( "l 2,%0\n\t" : :
+ "m"(tmp) : "2" );
+ break;
+ }
+ case typelib_TypeClass_FLOAT:
+ __asm__ volatile ( "le 0,%0\n\t" : :
+ "m" (*((float*)nRegReturn)) : "16" );
+ break;
+
+ case typelib_TypeClass_DOUBLE:
+ __asm__ volatile ( "ld 0,%0\n\t" : :
+ "m" (*((double*)nRegReturn)) : "16" );
+ break;
+
+ case typelib_TypeClass_HYPER:
+ case typelib_TypeClass_UNSIGNED_HYPER:
+ __asm__ volatile ( "lm 2,3,%0\n\t" : :
+ "m"(nRegReturn[0]) : "2", "3" );
+ break;
+
+ default:
+ __asm__ volatile ( "l 2,%0\n\t" : :
+ "m"(nRegReturn[0]) : "2" );
+ break;
+ }
+}
+
+const int codeSnippetSize = 50;
+
+unsigned char* codeSnippet( unsigned char * code, sal_Int16 nFunctionIndex, sal_Int16 nVtableOffset, bool simple_ret_type )
+{
+ sal_uInt32 nOffsetAndIndex = ( ( nVtableOffset ) << 16 ) | ( nFunctionIndex );
+
+ if (! simple_ret_type)
+ nOffsetAndIndex |= 0x8000;
+
+ OSL_ASSERT( sizeof (long) == 4 );
+
+ /* generate this code */
+ // lr %r0,%r13
+ // bras %r13,0x6
+ // .long privateSnippetExecutor
+ // .long nOffsetAndIndex
+ // stm %r2,%r6,8(%r15)
+ // std %f0,64(%r15)
+ // std %f2,72(%r15)
+
+ // l %r2,4(%r13)
+ // la %r3,8(%r15)
+ // la %r4,64(%r15)
+ // la %r5,96(%r15)
+ // l %r1,0(%r13)
+ // lr %r13,%r0
+ // br %r1
+
+ unsigned char * p = code;
+ *reinterpret_cast< sal_Int16 * >(p) = 0x180d;
+ p += sizeof(sal_Int16);
+ *reinterpret_cast< sal_Int32 * >(p) = 0xa7d50006;
+ p += sizeof(sal_Int32);
+ *reinterpret_cast< sal_Int32 * >(p) =
+ reinterpret_cast< sal_Int32 >(privateSnippetExecutor);
+ p += sizeof(sal_Int32);
+ *reinterpret_cast< sal_Int32 * >(p) = nOffsetAndIndex;
+ p += sizeof(sal_Int32);
+ *reinterpret_cast< sal_Int32 * >(p) = 0x9026f008;
+ p += sizeof(sal_Int32);
+ *reinterpret_cast< sal_Int32 * >(p) = 0x6000f040;
+ p += sizeof(sal_Int32);
+ *reinterpret_cast< sal_Int32 * >(p) = 0x6020f048;
+ p += sizeof(sal_Int32);
+ *reinterpret_cast< sal_Int32 * >(p) = 0x5820d004;
+ p += sizeof(sal_Int32);
+ *reinterpret_cast< sal_Int32 * >(p) = 0x4130f008;
+ p += sizeof(sal_Int32);
+ *reinterpret_cast< sal_Int32 * >(p) = 0x4140f040;
+ p += sizeof(sal_Int32);
+ *reinterpret_cast< sal_Int32 * >(p) = 0x4150f060;
+ p += sizeof(sal_Int32);
+ *reinterpret_cast< sal_Int32 * >(p) = 0x5810d000;
+ p += sizeof(sal_Int32);
+ *reinterpret_cast< sal_Int16 * >(p) = 0x18d0;
+ p += sizeof(sal_Int16);
+ *reinterpret_cast< sal_Int16 * >(p) = 0x07f1;
+ p += sizeof(sal_Int16);
+
+ return (code + codeSnippetSize);
+}
+}
+
+void bridges::cpp_uno::shared::VtableFactory::flushCode(unsigned char const *, unsigned char const *)
+{
+}
+
+struct bridges::cpp_uno::shared::VtableFactory::Slot { void * fn; };
+
+bridges::cpp_uno::shared::VtableFactory::Slot *
+bridges::cpp_uno::shared::VtableFactory::mapBlockToVtable(void * block)
+{
+ return static_cast< Slot * >(block) + 2;
+}
+
+sal_Size bridges::cpp_uno::shared::VtableFactory::getBlockSize(
+ sal_Int32 slotCount)
+{
+ return (slotCount + 2) * sizeof (Slot) + slotCount * codeSnippetSize;
+}
+
+bridges::cpp_uno::shared::VtableFactory::Slot *
+bridges::cpp_uno::shared::VtableFactory::initializeBlock(
+ void * block, sal_Int32 slotCount)
+{
+ Slot * slots = mapBlockToVtable(block);
+ slots[-2].fn = 0;
+ slots[-1].fn = 0;
+ return slots + slotCount;
+}
+
+unsigned char * bridges::cpp_uno::shared::VtableFactory::addLocalFunctions(
+ Slot ** slots, unsigned char * code, sal_PtrDiff writetoexecdiff,
+ typelib_InterfaceTypeDescription const * type, sal_Int32 functionOffset,
+ sal_Int32 functionCount, sal_Int32 vtableOffset)
+{
+ (*slots) -= functionCount;
+ Slot * s = *slots;
+#ifdef CMC_DEBUG
+ fprintf(stderr, "in addLocalFunctions functionOffset is %x\n",functionOffset);
+ fprintf(stderr, "in addLocalFunctions vtableOffset is %x\n",vtableOffset);
+#endif
+
+ for (sal_Int32 i = 0; i < type->nMembers; ++i) {
+ typelib_TypeDescription * member = 0;
+ TYPELIB_DANGER_GET(&member, type->ppMembers[i]);
+ OSL_ASSERT(member != 0);
+ switch (member->eTypeClass) {
+ case typelib_TypeClass_INTERFACE_ATTRIBUTE:
+ // Getter:
+ (s++)->fn = code + writetoexecdiff;
+ code = codeSnippet(
+ code, functionOffset++, vtableOffset,
+ bridges::cpp_uno::shared::isSimpleType(
+ reinterpret_cast<
+ typelib_InterfaceAttributeTypeDescription * >(
+ member)->pAttributeTypeRef));
+
+ // Setter:
+ if (!reinterpret_cast<
+ typelib_InterfaceAttributeTypeDescription * >(
+ member)->bReadOnly)
+ {
+ (s++)->fn = code + writetoexecdiff;
+ code = codeSnippet(code, functionOffset++, vtableOffset, true);
+ }
+ break;
+
+ case typelib_TypeClass_INTERFACE_METHOD:
+ (s++)->fn = code + writetoexecdiff;
+ code = codeSnippet(
+ code, functionOffset++, vtableOffset,
+ bridges::cpp_uno::shared::isSimpleType(
+ reinterpret_cast<
+ typelib_InterfaceMethodTypeDescription * >(
+ member)->pReturnTypeRef));
+ break;
+
+ default:
+ OSL_ASSERT(false);
+ break;
+ }
+ TYPELIB_DANGER_RELEASE(member);
+ }
+ return code;
+}
+
+/* vi:set tabstop=4 shiftwidth=4 expandtab: */
diff --git a/bridges/source/cpp_uno/gcc3_linux_s390/except.cxx b/bridges/source/cpp_uno/gcc3_linux_s390/except.cxx
new file mode 100644
index 000000000000..3e666a11cdd0
--- /dev/null
+++ b/bridges/source/cpp_uno/gcc3_linux_s390/except.cxx
@@ -0,0 +1,287 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_bridges.hxx"
+
+#include <stdio.h>
+#include <string.h>
+#include <dlfcn.h>
+#include <cxxabi.h>
+#include <hash_map>
+
+#include <rtl/strbuf.hxx>
+#include <rtl/ustrbuf.hxx>
+#include <osl/diagnose.h>
+#include <osl/mutex.hxx>
+
+#include <com/sun/star/uno/genfunc.hxx>
+#include <typelib/typedescription.hxx>
+#include <uno/any2.h>
+
+#include "share.hxx"
+
+
+using namespace ::std;
+using namespace ::osl;
+using namespace ::rtl;
+using namespace ::com::sun::star::uno;
+using namespace ::__cxxabiv1;
+
+
+namespace CPPU_CURRENT_NAMESPACE
+{
+
+void dummy_can_throw_anything( char const * )
+{
+}
+
+//==================================================================================================
+static OUString toUNOname( char const * p ) SAL_THROW( () )
+{
+#if OSL_DEBUG_LEVEL > 1
+ char const * start = p;
+#endif
+
+ // example: N3com3sun4star4lang24IllegalArgumentExceptionE
+
+ OUStringBuffer buf( 64 );
+ OSL_ASSERT( 'N' == *p );
+ ++p; // skip N
+
+ while ('E' != *p)
+ {
+ // read chars count
+ long n = (*p++ - '0');
+ while ('0' <= *p && '9' >= *p)
+ {
+ n *= 10;
+ n += (*p++ - '0');
+ }
+ buf.appendAscii( p, n );
+ p += n;
+ if ('E' != *p)
+ buf.append( (sal_Unicode)'.' );
+ }
+
+#if OSL_DEBUG_LEVEL > 1
+ OUString ret( buf.makeStringAndClear() );
+ OString c_ret( OUStringToOString( ret, RTL_TEXTENCODING_ASCII_US ) );
+ fprintf( stderr, "> toUNOname(): %s => %s\n", start, c_ret.getStr() );
+ return ret;
+#else
+ return buf.makeStringAndClear();
+#endif
+}
+
+//==================================================================================================
+class RTTI
+{